<?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>193877</bug_id>
          
          <creation_ts>2019-01-26 17:27:55 -0800</creation_ts>
          <short_desc>[WHLSL] Pack and unpack data at entry points and exit points</short_desc>
          <delta_ts>2019-03-06 15:09:20 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Myles C. Maxfield">mmaxfield</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1498781</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-01-26 17:27:55 -0800</bug_when>
    <thetext>[WHLSL] Pack and unpack data at entry points and exit points</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1498782</commentid>
    <comment_count>1</comment_count>
      <attachid>360258</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-01-26 17:29:37 -0800</bug_when>
    <thetext>Created attachment 360258
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1498783</commentid>
    <comment_count>2</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-01-26 17:32:06 -0800</bug_when>
    <thetext>Attachment 360258 did not pass style-queue:


ERROR: Source/WebCore/ChangeLog:8:  You should remove the &apos;No new tests&apos; and either add and list tests, or explain why no new tests were possible.  [changelog/nonewtests] [5]
Total errors found: 1 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1498871</commentid>
    <comment_count>3</comment_count>
      <attachid>360298</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-01-27 10:02:33 -0800</bug_when>
    <thetext>Created attachment 360298
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1498872</commentid>
    <comment_count>4</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-01-27 10:03:39 -0800</bug_when>
    <thetext>Attachment 360298 did not pass style-queue:


ERROR: Source/WebCore/ChangeLog:8:  You should remove the &apos;No new tests&apos; and either add and list tests, or explain why no new tests were possible.  [changelog/nonewtests] [5]
Total errors found: 1 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1498942</commentid>
    <comment_count>5</comment_count>
      <attachid>360319</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-01-27 22:45:34 -0800</bug_when>
    <thetext>Created attachment 360319
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1498944</commentid>
    <comment_count>6</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-01-27 22:48:35 -0800</bug_when>
    <thetext>Attachment 360319 did not pass style-queue:


ERROR: Source/WebCore/ChangeLog:8:  You should remove the &apos;No new tests&apos; and either add and list tests, or explain why no new tests were possible.  [changelog/nonewtests] [5]
Total errors found: 1 in 16 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>1512835</commentid>
    <comment_count>7</comment_count>
      <attachid>363689</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-03-05 14:26:46 -0800</bug_when>
    <thetext>Created attachment 363689
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1513184</commentid>
    <comment_count>8</comment_count>
      <attachid>363790</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-03-06 14:03:56 -0800</bug_when>
    <thetext>Created attachment 363790
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1513193</commentid>
    <comment_count>9</comment_count>
      <attachid>363790</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2019-03-06 14:24:21 -0800</bug_when>
    <thetext>Comment on attachment 363790
Patch

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

&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLEntryPointScaffolding.cpp:107
&gt; +        namedBindGroup.argumentBufferIndex = argumentBufferIndex++;

Why can&apos;t you use i here? (or rename i to be argumentBufferIndex)

&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLEntryPointScaffolding.cpp:113
&gt; +            namedBinding.index = index++;

Why can&apos;t you use j here?

&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLEntryPointScaffolding.cpp:407
&gt; +    m_namedOutputs.reserveInitialCapacity(m_entryPointItems.outputs.size());
&gt; +    for (size_t i = 0; i &lt; m_entryPointItems.outputs.size(); ++i) {
&gt; +        NamedOutput namedOutput;
&gt; +        namedOutput.elementName = m_typeNamer.generateNextStructureElementName();
&gt; +        m_namedOutputs.uncheckedAppend(WTFMove(namedOutput));
&gt; +    }

I wonder if you could use .map for these loops. It sets up the initial capacity for you.

m_namedOutputs = m_entryPointItems.output.map([] (...) -&gt; NamedOutput {  .... return namedOutput;  }

&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:265
&gt; +    CRASH();

Really? Wouldn&apos;t we want to return an invalid program instead?

&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:360
&gt; +    CRASH();

ditto for other instances of CRASH()

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLSemanticMatcher.cpp:97
&gt; +                itemIndices.add(i + 1); // Work around the fact that HashSet&apos;s keys are restricted.

Confused--- Can&apos;t you use a HashSet with a zero key? You test for max above?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1513219</commentid>
    <comment_count>10</comment_count>
      <attachid>363790</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-03-06 15:08:58 -0800</bug_when>
    <thetext>Comment on attachment 363790
Patch

Clearing flags on attachment: 363790

Committed r242571: &lt;https://trac.webkit.org/changeset/242571&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1513220</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-03-06 15:09:00 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1513221</commentid>
    <comment_count>12</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-03-06 15:09:20 -0800</bug_when>
    <thetext>&lt;rdar://problem/48654341&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>360258</attachid>
            <date>2019-01-26 17:29:37 -0800</date>
            <delta_ts>2019-01-27 10:02:31 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>bug-193877-20190126172936.patch</filename>
            <type>text/plain</type>
            <size>65772</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQwNDU2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTExMmMzZmRiNmIyOTI3
ODc0NmEyNjE2MzAyNjljMGUxMWQ2MTcwZi4uMTA0MTcwN2I1NTRlNmY5Njg3NjljMzA3NjIxMjNh
NDA1YTdkYWQ3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY2IEBACisyMDE5LTAxLTI2ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dITFNMXSBQ
YWNrIGFuZCB1bnBhY2sgZGF0YSBhdCBlbnRyeSBwb2ludHMgYW5kIGV4aXQgcG9pbnRzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTM4NzcKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMg
KE9PUFMhKS4KKworICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRW50
cnlQb2ludFNjYWZmb2xkaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6
YXR0cmlidXRlRm9yU2VtYW50aWMpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpF
bnRyeVBvaW50U2NhZmZvbGRpbmc6OkVudHJ5UG9pbnRTY2FmZm9sZGluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpXSExTTDo6TWV0YWw6OkVudHJ5UG9pbnRTY2FmZm9sZGluZzo6cmVzb3VyY2VIZWxw
ZXJUeXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkVudHJ5UG9pbnRTY2Fm
Zm9sZGluZzo6cmVzb3VyY2VTaWduYXR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1l
dGFsOjpFbnRyeVBvaW50U2NhZmZvbGRpbmc6OmJ1aWx0SW5zU2lnbmF0dXJlKToKKyAgICAgICAg
KFdlYkNvcmU6OldITFNMOjpNZXRhbDo6RW50cnlQb2ludFNjYWZmb2xkaW5nOjptYW5nbGVkSW5w
dXRQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6RW50cnlQb2ludFNjYWZm
b2xkaW5nOjptYW5nbGVkT3V0cHV0UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0
YWw6OkVudHJ5UG9pbnRTY2FmZm9sZGluZzo6dW5wYWNrUmVzb3VyY2VzQW5kTmFtZWRCdWlsdElu
cyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OlZlcnRleEVudHJ5UG9pbnRTY2Fm
Zm9sZGluZzo6VmVydGV4RW50cnlQb2ludFNjYWZmb2xkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OldITFNMOjpNZXRhbDo6VmVydGV4RW50cnlQb2ludFNjYWZmb2xkaW5nOjpoZWxwZXJUeXBlcyk6
CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OlZlcnRleEVudHJ5UG9pbnRTY2FmZm9s
ZGluZzo6c2lnbmF0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6VmVydGV4
RW50cnlQb2ludFNjYWZmb2xkaW5nOjp1bnBhY2spOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6
Ok1ldGFsOjpWZXJ0ZXhFbnRyeVBvaW50U2NhZmZvbGRpbmc6OnBhY2spOgorICAgICAgICAoV2Vi
Q29yZTo6V0hMU0w6Ok1ldGFsOjpGcmFnbWVudEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6RnJhZ21l
bnRFbnRyeVBvaW50U2NhZmZvbGRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFs
OjpGcmFnbWVudEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6aGVscGVyVHlwZXMpOgorICAgICAgICAo
V2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpGcmFnbWVudEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6c2ln
bmF0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6RnJhZ21lbnRFbnRyeVBv
aW50U2NhZmZvbGRpbmc6OnVucGFjayk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6
OkZyYWdtZW50RW50cnlQb2ludFNjYWZmb2xkaW5nOjpwYWNrKToKKyAgICAgICAgKFdlYkNvcmU6
OldITFNMOjpNZXRhbDo6Q29tcHV0ZUVudHJ5UG9pbnRTY2FmZm9sZGluZzo6Q29tcHV0ZUVudHJ5
UG9pbnRTY2FmZm9sZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkNvbXB1
dGVFbnRyeVBvaW50U2NhZmZvbGRpbmc6OmhlbHBlclR5cGVzKToKKyAgICAgICAgKFdlYkNvcmU6
OldITFNMOjpNZXRhbDo6Q29tcHV0ZUVudHJ5UG9pbnRTY2FmZm9sZGluZzo6c2lnbmF0dXJlKToK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6Q29tcHV0ZUVudHJ5UG9pbnRTY2FmZm9s
ZGluZzo6dW5wYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6Q29tcHV0ZUVu
dHJ5UG9pbnRTY2FmZm9sZGluZzo6cGFjayk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0
YWw6OkVudHJ5UG9pbnRTY2FmZm9sZGluZzo6aGVscGVyVHlwZXMpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpFbnRyeVBvaW50U2NhZmZvbGRpbmc6OnNpZ25hdHVy
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkVudHJ5UG9pbnRT
Y2FmZm9sZGluZzo6dW5wYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpN
ZXRhbDo6RW50cnlQb2ludFNjYWZmb2xkaW5nOjpwYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKiBN
b2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEVudHJ5UG9pbnRTY2FmZm9sZGluZy5oOgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpFbnRyeVBvaW50U2NhZmZvbGRpbmc6OnBh
cmFtZXRlclZhcmlhYmxlcyk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwv
V0hMU0xGdW5jdGlvbldyaXRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6
OkZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6RnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6bWV0YWxGdW5jdGlvbnMpOgorICAgICAgICAq
IE1vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRnVuY3Rpb25Xcml0ZXIuaDoKKyAgICAg
ICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE1ldGFsQ29kZUdlbmVyYXRvci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OmdlbmVyYXRlTWV0YWxDb2RlKToK
KyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE1ldGFsQ29kZUdlbmVy
YXRvci5oOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW50cmluc2ljcy5o
OgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkludHJpbnNpY3M6OmZsb2F0MlR5cGUgY29uc3Qp
OgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGlwZWxpbmVEZXNjcmlwdG9y
Lmg6IEFkZGVkLgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU2VtYW50aWNN
YXRjaGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6ZmluZEVudHJ5UG9p
bnQpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Om1hdGNoTW9kZSk6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6bWF0Y2hSZXNvdXJjZXMpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Om1h
dGNoSW5wdXRzT3V0cHV0cyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6aXNBY2NlcHRhYmxl
Rm9ybWF0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjptYXRjaFZlcnRleEF0dHJpYnV0ZXMp
OgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Om1hdGNoQ29sb3JBdHRhY2htZW50cyk6CisgICAg
ICAgIChXZWJDb3JlOjpXSExTTDo6bWF0Y2hEZXB0aEF0dGFjaG1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6V0hMU0w6Om1hdGNoU2VtYW50aWNzKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTFNlbWFudGljTWF0Y2hlci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEVudHJ5UG9pbnRTY2FmZm9sZGluZy5jcHAu
CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorCiAyMDE5LTAxLTI0ICBDaGFybGVzIFZhemFjICA8Y3ZhemFjQGFrYW1h
aS5jb20+CiAKICAgICAgICAgSW1wbGVtZW50IFBlcmZvcm1hbmNlT2JzZXJ2ZXIuc3VwcG9ydGVk
RW50cnlUeXBlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvTWV0YWwvV0hMU0xFbnRyeVBvaW50U2NhZmZvbGRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xFbnRyeVBvaW50U2NhZmZvbGRpbmcuY3Bw
CmluZGV4IDQ4ZmNmMjM1ZjI1MTY0MGM1YTc4MjIxMGU5ZDI2ODRmNGVlM2MwN2QuLjM5Nzk1MjVh
MTZmYzE3ZjE1OTQxNDZiZDc4OTMzNzk5MjhlZWNmNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRW50cnlQb2ludFNjYWZmb2xkaW5n
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExT
TEVudHJ5UG9pbnRTY2FmZm9sZGluZy5jcHAKQEAgLTI4LDcgKzI4LDE3IEBACiAKICNpZiBFTkFC
TEUoV0VCR1BVKQogCisjaW5jbHVkZSAiV0hMU0xCdWlsdEluU2VtYW50aWMuaCIKKyNpbmNsdWRl
ICJXSExTTEZ1bmN0aW9uRGVmaW5pdGlvbi5oIgogI2luY2x1ZGUgIldITFNMR2F0aGVyRW50cnlQ
b2ludEl0ZW1zLmgiCisjaW5jbHVkZSAiV0hMU0xQaXBlbGluZURlc2NyaXB0b3IuaCIKKyNpbmNs
dWRlICJXSExTTFJlc291cmNlU2VtYW50aWMuaCIKKyNpbmNsdWRlICJXSExTTFN0YWdlSW5PdXRT
ZW1hbnRpYy5oIgorI2luY2x1ZGUgIldITFNMU3RydWN0dXJlRGVmaW5pdGlvbi5oIgorI2luY2x1
ZGUgIldITFNMVHlwZU5hbWVyLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IApAQCAtMzYsMzUgKzQ2LDQ1OSBAQCBuYW1lc3BhY2UgV0hMU0wgewogCiBuYW1lc3BhY2UgTWV0
YWwgewogCi1FbnRyeVBvaW50U2NhZmZvbGRpbmc6OkVudHJ5UG9pbnRTY2FmZm9sZGluZyhBU1Q6
OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0aW9uLCBJbnRyaW5zaWNzJiBpbnRy
aW5zaWNzKQotICAgIDogbV9mdW5jdGlvbkRlZmluaXRpb24oJmZ1bmN0aW9uRGVmaW5pdGlvbikK
LSAgICAsIG1faW50cmluc2ljcygmaW50cmluc2ljcykKK3N0YXRpYyBTdHJpbmcgYXR0cmlidXRl
Rm9yU2VtYW50aWMoQVNUOjpCdWlsdEluU2VtYW50aWMmIGJ1aWx0SW5TZW1hbnRpYykKIHsKLSAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCi0gICAgZ2F0aGVyRW50cnlQb2ludEl0ZW1zKCpt
X2ludHJpbnNpY3MsICptX2Z1bmN0aW9uRGVmaW5pdGlvbik7CisgICAgc3dpdGNoIChidWlsdElu
U2VtYW50aWMudmFyaWFibGUoKSkgeworICAgIGNhc2UgQVNUOjpCdWlsdEluU2VtYW50aWM6OlZh
cmlhYmxlOjpTVkluc3RhbmNlSUQ6CisgICAgICAgIHJldHVybiAiW1tpbnN0YW5jZV9pZF1dIl9z
dHI7CisgICAgY2FzZSBBU1Q6OkJ1aWx0SW5TZW1hbnRpYzo6VmFyaWFibGU6OlNWVmVydGV4SUQ6
CisgICAgICAgIHJldHVybiAiW1t2ZXJ0ZXhfaWRdXSJfc3RyOworICAgIGNhc2UgQVNUOjpCdWls
dEluU2VtYW50aWM6OlZhcmlhYmxlOjpQU2l6ZToKKyAgICAgICAgcmV0dXJuICJbW3BvaW50X3Np
emVdXSJfc3RyOworICAgIGNhc2UgQVNUOjpCdWlsdEluU2VtYW50aWM6OlZhcmlhYmxlOjpTVlBv
c2l0aW9uOgorICAgICAgICByZXR1cm4gIltbcG9zaXRpb25dXSJfc3RyOworICAgIGNhc2UgQVNU
OjpCdWlsdEluU2VtYW50aWM6OlZhcmlhYmxlOjpTVklzRnJvbnRGYWNlOgorICAgICAgICByZXR1
cm4gIltbZnJvbnRfZmFjaW5nXV0iX3N0cjsKKyAgICBjYXNlIEFTVDo6QnVpbHRJblNlbWFudGlj
OjpWYXJpYWJsZTo6U1ZTYW1wbGVJbmRleDoKKyAgICAgICAgcmV0dXJuICJbW3NhbXBsZV9pZF1d
Il9zdHI7CisgICAgY2FzZSBBU1Q6OkJ1aWx0SW5TZW1hbnRpYzo6VmFyaWFibGU6OlNWSW5uZXJD
b3ZlcmFnZToKKyAgICAgICAgcmV0dXJuICJbW3NhbXBsZV9tYXNrXV0iX3N0cjsKKyAgICBjYXNl
IEFTVDo6QnVpbHRJblNlbWFudGljOjpWYXJpYWJsZTo6U1ZUYXJnZXQ6CisgICAgICAgIHJldHVy
biBtYWtlU3RyaW5nKCJbW2NvbG9yKCIsICpidWlsdEluU2VtYW50aWMudGFyZ2V0SW5kZXgoKSwg
IildXSIpOworICAgIGNhc2UgQVNUOjpCdWlsdEluU2VtYW50aWM6OlZhcmlhYmxlOjpTVkRlcHRo
OgorICAgICAgICByZXR1cm4gIltbZGVwdGgoYW55KV1dIl9zdHI7CisgICAgY2FzZSBBU1Q6OkJ1
aWx0SW5TZW1hbnRpYzo6VmFyaWFibGU6OlNWQ292ZXJhZ2U6CisgICAgICAgIHJldHVybiAiW1tz
YW1wbGVfbWFza11dIl9zdHI7CisgICAgY2FzZSBBU1Q6OkJ1aWx0SW5TZW1hbnRpYzo6VmFyaWFi
bGU6OlNWRGlzcGF0Y2hUaHJlYWRJRDoKKyAgICAgICAgcmV0dXJuICJbW3RocmVhZF9wb3NpdGlv
bl9pbl9ncmlkXV0iX3N0cjsKKyAgICBjYXNlIEFTVDo6QnVpbHRJblNlbWFudGljOjpWYXJpYWJs
ZTo6U1ZHcm91cElEOgorICAgICAgICByZXR1cm4gIltbdGhyZWFkZ3JvdXBfcG9zaXRpb25faW5f
Z3JpZF1dIl9zdHI7CisgICAgY2FzZSBBU1Q6OkJ1aWx0SW5TZW1hbnRpYzo6VmFyaWFibGU6OlNW
R3JvdXBJbmRleDoKKyAgICAgICAgcmV0dXJuICJbW3RocmVhZF9pbmRleF9pbl90aHJlYWRncm91
cF1dIl9zdHI7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUKGJ1aWx0SW5TZW1hbnRpYy52
YXJpYWJsZSgpID09IEFTVDo6QnVpbHRJblNlbWFudGljOjpWYXJpYWJsZTo6U1ZHcm91cFRocmVh
ZElEKTsKKyAgICAgICAgcmV0dXJuICJbW3RocmVhZF9wb3NpdGlvbl9pbl90aHJlYWRncm91cF1d
Il9zdHI7CisgICAgfQogfQogCi1TdHJpbmcgRW50cnlQb2ludFNjYWZmb2xkaW5nOjpoZWxwZXJU
eXBlcygpCitzdGF0aWMgU3RyaW5nIGF0dHJpYnV0ZUZvclNlbWFudGljKEFTVDo6U2VtYW50aWMm
IHNlbWFudGljKQogewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KLSAgICByZXR1cm4g
U3RyaW5nKCk7CisgICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8QVNUOjpCdWlsdEluU2Vt
YW50aWM+KHNlbWFudGljKSkKKyAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZUZvclNlbWFudGljKFdU
Rjo6Z2V0PEFTVDo6QnVpbHRJblNlbWFudGljPihzZW1hbnRpYykpOworICAgIGF1dG8mIHN0YWdl
SW5PdXRTZW1hbnRpYyA9IFdURjo6Z2V0PEFTVDo6U3RhZ2VJbk91dFNlbWFudGljPihzZW1hbnRp
Yyk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoIltbdXNlcigiLCBzdGFnZUluT3V0U2VtYW50aWMu
aW5kZXgoKSwgIildXSIpOwogfQogCi1TdHJpbmcgRW50cnlQb2ludFNjYWZmb2xkaW5nOjpzaWdu
YXR1cmUoKQorRW50cnlQb2ludFNjYWZmb2xkaW5nOjpFbnRyeVBvaW50U2NhZmZvbGRpbmcoQVNU
OjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbiwgSW50cmluc2ljcyYgaW50
cmluc2ljcywgVHlwZU5hbWVyJiB0eXBlTmFtZXIsIEVudHJ5UG9pbnRJdGVtcyYgZW50cnlQb2lu
dEl0ZW1zLCBIYXNoTWFwPEJpbmRpbmcqLCBzaXplX3Q+JiByZXNvdXJjZU1hcCwgTGF5b3V0JiBs
YXlvdXQsIHN0ZDo6ZnVuY3Rpb248U3RyaW5nKCk+JiYgZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1l
KQorICAgIDogbV9mdW5jdGlvbkRlZmluaXRpb24oZnVuY3Rpb25EZWZpbml0aW9uKQorICAgICwg
bV9pbnRyaW5zaWNzKGludHJpbnNpY3MpCisgICAgLCBtX3R5cGVOYW1lcih0eXBlTmFtZXIpCisg
ICAgLCBtX2VudHJ5UG9pbnRJdGVtcyhlbnRyeVBvaW50SXRlbXMpCisgICAgLCBtX3Jlc291cmNl
TWFwKHJlc291cmNlTWFwKQorICAgICwgbV9sYXlvdXQobGF5b3V0KQorICAgICwgbV9nZW5lcmF0
ZU5leHRWYXJpYWJsZU5hbWUoZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKQogewotICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQgdGhpcy4KLSAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgdW5zaWduZWQg
YXJndW1lbnRCdWZmZXJJbmRleCA9IDA7CisgICAgbV9uYW1lZEJpbmRHcm91cHMucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eShtX2xheW91dC5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV9sYXlvdXQuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgTmFtZWRCaW5kR3JvdXAgbmFtZWRC
aW5kR3JvdXA7CisgICAgICAgIG5hbWVkQmluZEdyb3VwLnN0cnVjdE5hbWUgPSBtX3R5cGVOYW1l
ci5nZW5lcmF0ZU5leHRUeXBlTmFtZSgpOworICAgICAgICBuYW1lZEJpbmRHcm91cC52YXJpYWJs
ZU5hbWUgPSBtX2dlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOworICAgICAgICBuYW1lZEJpbmRH
cm91cC5hcmd1bWVudEJ1ZmZlckluZGV4ID0gYXJndW1lbnRCdWZmZXJJbmRleCsrOworICAgICAg
ICBuYW1lZEJpbmRHcm91cC5uYW1lZEJpbmRpbmdzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9s
YXlvdXRbaV0uYmluZGluZ3Muc2l6ZSgpKTsKKyAgICAgICAgdW5zaWduZWQgaW5kZXggPSAwOwor
ICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IG1fbGF5b3V0W2ldLmJpbmRpbmdzLnNpemUo
KTsgKytqKSB7CisgICAgICAgICAgICBOYW1lZEJpbmRpbmcgbmFtZWRCaW5kaW5nOworICAgICAg
ICAgICAgbmFtZWRCaW5kaW5nLmVsZW1lbnROYW1lID0gbV90eXBlTmFtZXIuZ2VuZXJhdGVOZXh0
U3RydWN0dXJlRWxlbWVudE5hbWUoKTsKKyAgICAgICAgICAgIG5hbWVkQmluZGluZy5pbmRleCA9
IGluZGV4Kys7CisgICAgICAgICAgICBuYW1lZEJpbmRHcm91cC5uYW1lZEJpbmRpbmdzLnVuY2hl
Y2tlZEFwcGVuZChXVEZNb3ZlKG5hbWVkQmluZGluZykpOworICAgICAgICB9CisgICAgICAgIG1f
bmFtZWRCaW5kR3JvdXBzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKG5hbWVkQmluZEdyb3VwKSk7
CisgICAgfQorCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2VudHJ5UG9pbnRJdGVtcy5p
bnB1dHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKCFXVEY6OmhvbGRzX2FsdGVybmF0aXZl
PEFTVDo6QnVpbHRJblNlbWFudGljPigqbV9lbnRyeVBvaW50SXRlbXMuaW5wdXRzW2ldLnNlbWFu
dGljKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBOYW1lZEJ1aWx0SW4gbmFtZWRC
dWlsdEluOworICAgICAgICBuYW1lZEJ1aWx0SW4uaW5kZXhJbkVudHJ5UG9pbnRJdGVtcyA9IGk7
CisgICAgICAgIG5hbWVkQnVpbHRJbi52YXJpYWJsZU5hbWUgPSBtX2dlbmVyYXRlTmV4dFZhcmlh
YmxlTmFtZSgpOworICAgICAgICBtX25hbWVkQnVpbHRJbnMuYXBwZW5kKFdURk1vdmUobmFtZWRC
dWlsdEluKSk7CisgICAgfQorCisgICAgbV9wYXJhbWV0ZXJWYXJpYWJsZXMucmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eShtX2Z1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpKTsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMo
KS5zaXplKCk7ICsraSkKKyAgICAgICAgbV9wYXJhbWV0ZXJWYXJpYWJsZXMudW5jaGVja2VkQXBw
ZW5kKG1fZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCkpOwogfQogCi1TdHJpbmcgRW50cnlQb2lu
dFNjYWZmb2xkaW5nOjp1bnBhY2soKQorU3RyaW5nIEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6cmVz
b3VyY2VIZWxwZXJUeXBlcygpCiB7Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgotICAg
IHJldHVybiBTdHJpbmcoKTsKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2xheW91dC5zaXplKCk7ICsraSkgeworICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJzdHJ1Y3QgIiwgbV9uYW1lZEJpbmRHcm91
cHNbaV0uc3RydWN0TmFtZSwgIiB7XG4iKSk7CisgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBq
IDwgbV9sYXlvdXRbaV0uYmluZGluZ3Muc2l6ZSgpOyArK2opIHsKKyAgICAgICAgICAgIGF1dG8g
aXRlcmF0b3IgPSBtX3Jlc291cmNlTWFwLmZpbmQoJm1fbGF5b3V0W2ldLmJpbmRpbmdzW2pdKTsK
KyAgICAgICAgICAgIGlmIChpdGVyYXRvciA9PSBtX3Jlc291cmNlTWFwLmVuZCgpKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgYXV0byBtYW5nbGVkVHlwZU5hbWUgPSBt
X3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm1fZW50cnlQb2ludEl0ZW1zLmlucHV0c1tp
dGVyYXRvci0+dmFsdWVdLnVubmFtZWRUeXBlKTsKKyAgICAgICAgICAgIGF1dG8gZWxlbWVudE5h
bWUgPSBtX25hbWVkQmluZEdyb3Vwc1tpXS5uYW1lZEJpbmRpbmdzW2pdLmVsZW1lbnROYW1lOwor
ICAgICAgICAgICAgYXV0byBpbmRleCA9IG1fbmFtZWRCaW5kR3JvdXBzW2ldLm5hbWVkQmluZGlu
Z3Nbal0uaW5kZXg7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5n
KCIgICAgIiwgbWFuZ2xlZFR5cGVOYW1lLCAnICcsIGVsZW1lbnROYW1lLCAiIFtbaWQoIiwgaW5k
ZXgsICIpXV07XG4iKSk7CisgICAgICAgIH0KKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
In1cblxuIik7CisgICAgfQorICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7Cit9
CisKK09wdGlvbmFsPFN0cmluZz4gRW50cnlQb2ludFNjYWZmb2xkaW5nOjpyZXNvdXJjZVNpZ25h
dHVyZSgpCit7CisgICAgaWYgKCFtX2xheW91dC5zaXplKCkpCisgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX2xheW91dC5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoaSkK
KyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIsICIpOworICAgICAgICBhdXRvJiBu
YW1lZEJpbmRHcm91cCA9IG1fbmFtZWRCaW5kR3JvdXBzW2ldOworICAgICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZChtYWtlU3RyaW5nKG5hbWVkQmluZEdyb3VwLnN0cnVjdE5hbWUsICImICIsIG5h
bWVkQmluZEdyb3VwLnZhcmlhYmxlTmFtZSwgIiBbW2J1ZmZlcigiLCBuYW1lZEJpbmRHcm91cC5h
cmd1bWVudEJ1ZmZlckluZGV4LCAiKV1dIikpOworICAgIH0KKyAgICByZXR1cm4gc3RyaW5nQnVp
bGRlci50b1N0cmluZygpOworfQorCitPcHRpb25hbDxTdHJpbmc+IEVudHJ5UG9pbnRTY2FmZm9s
ZGluZzo6YnVpbHRJbnNTaWduYXR1cmUoKQoreworICAgIGlmICghbV9uYW1lZEJ1aWx0SW5zLnNp
emUoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIFN0cmluZ0J1aWxkZXIg
c3RyaW5nQnVpbGRlcjsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fbmFtZWRCdWlsdElu
cy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoaSkKKyAgICAgICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKCIsICIpOworICAgICAgICBhdXRvJiBuYW1lZEJ1aWx0SW4gPSBtX25hbWVkQnVp
bHRJbnNbaV07CisgICAgICAgIGF1dG8mIGl0ZW0gPSBtX2VudHJ5UG9pbnRJdGVtcy5pbnB1dHNb
bmFtZWRCdWlsdEluLmluZGV4SW5FbnRyeVBvaW50SXRlbXNdOworICAgICAgICBhdXRvJiBidWls
dEluU2VtYW50aWMgPSBXVEY6OmdldDxBU1Q6OkJ1aWx0SW5TZW1hbnRpYz4oKml0ZW0uc2VtYW50
aWMpOworICAgICAgICBhdXRvIG1hbmdsZWRUeXBlTmFtZSA9IG1fdHlwZU5hbWVyLm1hbmdsZWRO
YW1lRm9yVHlwZSgqaXRlbS51bm5hbWVkVHlwZSk7CisgICAgICAgIGF1dG8gdmFyaWFibGVOYW1l
ID0gbmFtZWRCdWlsdEluLnZhcmlhYmxlTmFtZTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQobWFrZVN0cmluZyhtYW5nbGVkVHlwZU5hbWUsICcgJywgdmFyaWFibGVOYW1lLCAnICcsIGF0
dHJpYnV0ZUZvclNlbWFudGljKGJ1aWx0SW5TZW1hbnRpYykpKTsKKyAgICB9CisgICAgcmV0dXJu
IHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKK30KKworU3RyaW5nIEVudHJ5UG9pbnRTY2FmZm9s
ZGluZzo6bWFuZ2xlZElucHV0UGF0aChWZWN0b3I8U3RyaW5nPiYgcGF0aCkKK3sKKyAgICBBU1NF
UlQoIXBhdGguaXNFbXB0eSgpKTsKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7Cisg
ICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgIEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbiogc3Ry
dWN0dXJlRGVmaW5pdGlvbiA9IG51bGxwdHI7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X2Z1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
aWYgKG1fZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVtpXS5uYW1lKCkgPT0gcGF0aFsw
XSkgeworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobV9wYXJhbWV0ZXJWYXJpYWJs
ZXNbaV0pOworICAgICAgICAgICAgYXV0byYgdW5pZnlOb2RlID0gbV9mdW5jdGlvbkRlZmluaXRp
b24ucGFyYW1ldGVycygpW2ldLnR5cGUoKS0+dW5pZnlOb2RlKCk7CisgICAgICAgICAgICBpZiAo
aXM8QVNUOjpOYW1lZFR5cGU+KHVuaWZ5Tm9kZSkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBu
YW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4odW5pZnlOb2RlKTsKKyAgICAgICAg
ICAgICAgICBpZiAoaXM8QVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uPihuYW1lZFR5cGUpKQorICAg
ICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVEZWZpbml0aW9uID0gJmRvd25jYXN0PEFTVDo6U3Ry
dWN0dXJlRGVmaW5pdGlvbj4obmFtZWRUeXBlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAg
IEFTU0VSVChmb3VuZCk7CisgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBwYXRoLnNpemUoKTsg
KytpKSB7CisgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmVEZWZpbml0aW9uKTsKKyAgICAgICAgYXV0
byogbmV4dCA9IHN0cnVjdHVyZURlZmluaXRpb24tPmZpbmQocGF0aFtpXSk7CisgICAgICAgIEFT
U0VSVChuZXh0KTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygnLics
IG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yU3RydWN0dXJlRWxlbWVudCgqbmV4dCkpKTsKKyAg
ICAgICAgc3RydWN0dXJlRGVmaW5pdGlvbiA9IG51bGxwdHI7CisgICAgICAgIGF1dG8mIHVuaWZ5
Tm9kZSA9IG5leHQtPnR5cGUoKS51bmlmeU5vZGUoKTsKKyAgICAgICAgaWYgKGlzPEFTVDo6TmFt
ZWRUeXBlPih1bmlmeU5vZGUpKSB7CisgICAgICAgICAgICBhdXRvJiBuYW1lZFR5cGUgPSBkb3du
Y2FzdDxBU1Q6Ok5hbWVkVHlwZT4odW5pZnlOb2RlKTsKKyAgICAgICAgICAgIGlmIChpczxBU1Q6
OlN0cnVjdHVyZURlZmluaXRpb24+KG5hbWVkVHlwZSkpCisgICAgICAgICAgICAgICAgc3RydWN0
dXJlRGVmaW5pdGlvbiA9ICZkb3duY2FzdDxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24+KG5hbWVk
VHlwZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0
cmluZygpOworfQorCitTdHJpbmcgRW50cnlQb2ludFNjYWZmb2xkaW5nOjptYW5nbGVkT3V0cHV0
UGF0aChWZWN0b3I8U3RyaW5nPiYgcGF0aCkKK3sKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1
aWxkZXI7CisKKyAgICBBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24qIHN0cnVjdHVyZURlZmluaXRp
b24gPSBudWxscHRyOworICAgIGF1dG8mIHVuaWZ5Tm9kZSA9IG1fZnVuY3Rpb25EZWZpbml0aW9u
LnR5cGUoKS51bmlmeU5vZGUoKTsKKyAgICBBU1NFUlQoaXM8QVNUOjpOYW1lZFR5cGU+KHVuaWZ5
Tm9kZSkpOworICAgIGF1dG8mIG5hbWVkVHlwZSA9IGRvd25jYXN0PEFTVDo6TmFtZWRUeXBlPih1
bmlmeU5vZGUpOworICAgIEFTU0VSVChpczxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24+KG5hbWVk
VHlwZSkpOworICAgIHN0cnVjdHVyZURlZmluaXRpb24gPSAmZG93bmNhc3Q8QVNUOjpTdHJ1Y3R1
cmVEZWZpbml0aW9uPihuYW1lZFR5cGUpOworICAgIGZvciAoYXV0byYgY29tcG9uZW50IDogcGF0
aCkgeworICAgICAgICBBU1NFUlQoc3RydWN0dXJlRGVmaW5pdGlvbik7CisgICAgICAgIGF1dG8q
IG5leHQgPSBzdHJ1Y3R1cmVEZWZpbml0aW9uLT5maW5kKGNvbXBvbmVudCk7CisgICAgICAgIEFT
U0VSVChuZXh0KTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygnLics
IG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yU3RydWN0dXJlRWxlbWVudCgqbmV4dCkpKTsKKyAg
ICAgICAgc3RydWN0dXJlRGVmaW5pdGlvbiA9IG51bGxwdHI7CisgICAgICAgIGF1dG8mIHVuaWZ5
Tm9kZSA9IG5leHQtPnR5cGUoKS51bmlmeU5vZGUoKTsKKyAgICAgICAgaWYgKGlzPEFTVDo6TmFt
ZWRUeXBlPih1bmlmeU5vZGUpKSB7CisgICAgICAgICAgICBhdXRvJiBuYW1lZFR5cGUgPSBkb3du
Y2FzdDxBU1Q6Ok5hbWVkVHlwZT4odW5pZnlOb2RlKTsKKyAgICAgICAgICAgIGlmIChpczxBU1Q6
OlN0cnVjdHVyZURlZmluaXRpb24+KG5hbWVkVHlwZSkpCisgICAgICAgICAgICAgICAgc3RydWN0
dXJlRGVmaW5pdGlvbiA9ICZkb3duY2FzdDxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24+KG5hbWVk
VHlwZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0
cmluZygpOworfQorCitTdHJpbmcgRW50cnlQb2ludFNjYWZmb2xkaW5nOjp1bnBhY2tSZXNvdXJj
ZXNBbmROYW1lZEJ1aWx0SW5zKCkKK3sKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2Z1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0
ZXJzKCkuc2l6ZSgpOyArK2kpCisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJp
bmcobV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCptX2Z1bmN0aW9uRGVmaW5pdGlvbi5w
YXJhbWV0ZXJzKClbaV0udHlwZSgpKSwgJyAnLCBtX3BhcmFtZXRlclZhcmlhYmxlc1tpXSwgIjtc
biIpKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9sYXlvdXQuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgYXV0byB2YXJpYWJsZU5hbWUgPSBtX25hbWVkQmluZEdyb3Vwc1tpXS52YXJp
YWJsZU5hbWU7CisgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgbV9sYXlvdXRbaV0uYmlu
ZGluZ3Muc2l6ZSgpOyArK2opIHsKKyAgICAgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX3Jlc291
cmNlTWFwLmZpbmQoJm1fbGF5b3V0W2ldLmJpbmRpbmdzW2pdKTsKKyAgICAgICAgICAgIGlmIChp
dGVyYXRvciA9PSBtX3Jlc291cmNlTWFwLmVuZCgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgYXV0byYgcGF0aCA9IG1fZW50cnlQb2ludEl0ZW1zLmlucHV0c1tpdGVy
YXRvci0+dmFsdWVdLnBhdGg7CisgICAgICAgICAgICBhdXRvIGVsZW1lbnROYW1lID0gbV9uYW1l
ZEJpbmRHcm91cHNbaV0ubmFtZWRCaW5kaW5nc1tqXS5lbGVtZW50TmFtZTsKKyAgICAgICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWFuZ2xlZElucHV0UGF0aChwYXRoKSwg
IiA9ICIsIHZhcmlhYmxlTmFtZSwgJy4nLCBlbGVtZW50TmFtZSwgIjtcbiIpKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGZvciAoYXV0byYgbmFtZWRCdWlsdEluIDogbV9uYW1lZEJ1aWx0SW5z
KSB7CisgICAgICAgIGF1dG8mIHBhdGggPSBtX2VudHJ5UG9pbnRJdGVtcy5pbnB1dHNbbmFtZWRC
dWlsdEluLmluZGV4SW5FbnRyeVBvaW50SXRlbXNdLnBhdGg7CisgICAgICAgIGF1dG8mIHZhcmlh
YmxlTmFtZSA9IG5hbWVkQnVpbHRJbi52YXJpYWJsZU5hbWU7CisgICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKG1ha2VTdHJpbmcobWFuZ2xlZElucHV0UGF0aChwYXRoKSwgIiA9ICIsIHZhcmlh
YmxlTmFtZSwgIjtcbiIpKTsKKyAgICB9CisgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJp
bmcoKTsKK30KKworVmVydGV4RW50cnlQb2ludFNjYWZmb2xkaW5nOjpWZXJ0ZXhFbnRyeVBvaW50
U2NhZmZvbGRpbmcoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbiwg
SW50cmluc2ljcyYgaW50cmluc2ljcywgVHlwZU5hbWVyJiB0eXBlTmFtZXIsIEVudHJ5UG9pbnRJ
dGVtcyYgZW50cnlQb2ludEl0ZW1zLCBIYXNoTWFwPEJpbmRpbmcqLCBzaXplX3Q+JiByZXNvdXJj
ZU1hcCwgTGF5b3V0JiBsYXlvdXQsIHN0ZDo6ZnVuY3Rpb248U3RyaW5nKCk+JiYgZ2VuZXJhdGVO
ZXh0VmFyaWFibGVOYW1lLCBIYXNoTWFwPFZlcnRleEF0dHJpYnV0ZSosIHNpemVfdD4mIG1hdGNo
ZWRWZXJ0ZXhBdHRyaWJ1dGVzKQorICAgIDogRW50cnlQb2ludFNjYWZmb2xkaW5nKGZ1bmN0aW9u
RGVmaW5pdGlvbiwgaW50cmluc2ljcywgdHlwZU5hbWVyLCBlbnRyeVBvaW50SXRlbXMsIHJlc291
cmNlTWFwLCBsYXlvdXQsIFdURk1vdmUoZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKSkKKyAgICAs
IG1fbWF0Y2hlZFZlcnRleEF0dHJpYnV0ZXMobWF0Y2hlZFZlcnRleEF0dHJpYnV0ZXMpCisgICAg
LCBtX3N0YWdlSW5TdHJ1Y3ROYW1lKHR5cGVOYW1lci5nZW5lcmF0ZU5leHRUeXBlTmFtZSgpKQor
ICAgICwgbV9yZXR1cm5TdHJ1Y3ROYW1lKHR5cGVOYW1lci5nZW5lcmF0ZU5leHRUeXBlTmFtZSgp
KQorICAgICwgbV9zdGFnZUluUGFyYW1ldGVyTmFtZShtX2dlbmVyYXRlTmV4dFZhcmlhYmxlTmFt
ZSgpKQoreworICAgIG1fbmFtZWRTdGFnZUlucy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fbWF0
Y2hlZFZlcnRleEF0dHJpYnV0ZXMuc2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8mIGtleVZhbHVlUGFp
ciA6IG1fbWF0Y2hlZFZlcnRleEF0dHJpYnV0ZXMpIHsKKyAgICAgICAgTmFtZWRTdGFnZUluIG5h
bWVkU3RhZ2VJbjsKKyAgICAgICAgbmFtZWRTdGFnZUluLmluZGV4SW5FbnRyeVBvaW50SXRlbXMg
PSBrZXlWYWx1ZVBhaXIudmFsdWU7CisgICAgICAgIG5hbWVkU3RhZ2VJbi5lbGVtZW50TmFtZSA9
IG1fdHlwZU5hbWVyLmdlbmVyYXRlTmV4dFN0cnVjdHVyZUVsZW1lbnROYW1lKCk7CisgICAgICAg
IG5hbWVkU3RhZ2VJbi5hdHRyaWJ1dGVJbmRleCA9IGtleVZhbHVlUGFpci5rZXktPm5hbWU7Cisg
ICAgICAgIG1fbmFtZWRTdGFnZUlucy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShuYW1lZFN0YWdl
SW4pKTsKKyAgICB9CisKKyAgICBtX25hbWVkT3V0cHV0cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5
KG1fZW50cnlQb2ludEl0ZW1zLm91dHB1dHMuc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fZW50cnlQb2ludEl0ZW1zLm91dHB1dHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
TmFtZWRPdXRwdXQgbmFtZWRPdXRwdXQ7CisgICAgICAgIG5hbWVkT3V0cHV0LmVsZW1lbnROYW1l
ID0gbV90eXBlTmFtZXIuZ2VuZXJhdGVOZXh0U3RydWN0dXJlRWxlbWVudE5hbWUoKTsKKyAgICAg
ICAgbV9uYW1lZE91dHB1dHMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUobmFtZWRPdXRwdXQpKTsK
KyAgICB9Cit9CisKK1N0cmluZyBWZXJ0ZXhFbnRyeVBvaW50U2NhZmZvbGRpbmc6OmhlbHBlclR5
cGVzKCkKK3sKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CisKKyAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJzdHJ1Y3QgIiwgbV9zdGFnZUluU3RydWN0TmFtZSwg
IiB7XG4iKSk7CisgICAgZm9yIChhdXRvJiBuYW1lZFN0YWdlSW4gOiBtX25hbWVkU3RhZ2VJbnMp
IHsKKyAgICAgICAgYXV0byBtYW5nbGVkVHlwZU5hbWUgPSBtX3R5cGVOYW1lci5tYW5nbGVkTmFt
ZUZvclR5cGUoKm1fZW50cnlQb2ludEl0ZW1zLmlucHV0c1tuYW1lZFN0YWdlSW4uaW5kZXhJbkVu
dHJ5UG9pbnRJdGVtc10udW5uYW1lZFR5cGUpOworICAgICAgICBhdXRvIGVsZW1lbnROYW1lID0g
bmFtZWRTdGFnZUluLmVsZW1lbnROYW1lOworICAgICAgICBhdXRvIGF0dHJpYnV0ZUluZGV4ID0g
bmFtZWRTdGFnZUluLmVsZW1lbnROYW1lOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCht
YWtlU3RyaW5nKCIgICAgIiwgbWFuZ2xlZFR5cGVOYW1lLCAnICcsIGVsZW1lbnROYW1lLCAiIFtb
YXR0cmlidXRlKCIsIGF0dHJpYnV0ZUluZGV4LCAiKV1dO1xuIikpOworICAgIH0KKyAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZCgifVxuXG4iKTsKKworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1h
a2VTdHJpbmcoInN0cnVjdCAiLCBtX3JldHVyblN0cnVjdE5hbWUsICIge1xuIikpOworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9lbnRyeVBvaW50SXRlbXMub3V0cHV0cy5zaXplKCk7ICsr
aSkgeworICAgICAgICBhdXRvJiBvdXRwdXRJdGVtID0gbV9lbnRyeVBvaW50SXRlbXMub3V0cHV0
c1tpXTsKKyAgICAgICAgYXV0byBtYW5nbGVkVHlwZU5hbWUgPSBtX3R5cGVOYW1lci5tYW5nbGVk
TmFtZUZvclR5cGUoKm91dHB1dEl0ZW0udW5uYW1lZFR5cGUpOworICAgICAgICBhdXRvIGVsZW1l
bnROYW1lID0gbV9uYW1lZE91dHB1dHNbaV0uZWxlbWVudE5hbWU7CisgICAgICAgIGF1dG8gYXR0
cmlidXRlID0gYXR0cmlidXRlRm9yU2VtYW50aWMoKm91dHB1dEl0ZW0uc2VtYW50aWMpOworICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIgICAgIiwgbWFuZ2xlZFR5cGVO
YW1lLCAnICcsIGVsZW1lbnROYW1lLCAnICcsIGF0dHJpYnV0ZSwgIjtcbiIpKTsKKyAgICB9Cisg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIn1cblxuIik7CisKKyAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZChyZXNvdXJjZUhlbHBlclR5cGVzKCkpOworCisgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIu
dG9TdHJpbmcoKTsKK30KKworU3RyaW5nIFZlcnRleEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6c2ln
bmF0dXJlKFN0cmluZyYgZnVuY3Rpb25OYW1lKQoreworICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5n
QnVpbGRlcjsKKworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoInZlcnRleCAi
LCBtX3JldHVyblN0cnVjdE5hbWUsICcgJywgZnVuY3Rpb25OYW1lLCAnKCcsIG1fc3RhZ2VJblN0
cnVjdE5hbWUsICcgJywgbV9zdGFnZUluUGFyYW1ldGVyTmFtZSwgIiBbW3N0YWdlX2luXV0iKSk7
CisgICAgaWYgKGF1dG8gcmVzb3VyY2VTaWduYXR1cmUgPSB0aGlzLT5yZXNvdXJjZVNpZ25hdHVy
ZSgpKQorICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIsICIsICpyZXNv
dXJjZVNpZ25hdHVyZSkpOworICAgIGlmIChhdXRvIGJ1aWx0SW5zU2lnbmF0dXJlID0gdGhpcy0+
YnVpbHRJbnNTaWduYXR1cmUoKSkKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0
cmluZygiLCAiLCAqYnVpbHRJbnNTaWduYXR1cmUpKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZCgiKSIpOworCisgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKK30KKworU3Ry
aW5nIFZlcnRleEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6dW5wYWNrKCkKK3sKKyAgICBTdHJpbmdC
dWlsZGVyIHN0cmluZ0J1aWxkZXI7CisKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh1bnBhY2tS
ZXNvdXJjZXNBbmROYW1lZEJ1aWx0SW5zKCkpOworCisgICAgZm9yIChhdXRvJiBuYW1lZFN0YWdl
SW4gOiBtX25hbWVkU3RhZ2VJbnMpIHsKKyAgICAgICAgYXV0byYgcGF0aCA9IG1fZW50cnlQb2lu
dEl0ZW1zLmlucHV0c1tuYW1lZFN0YWdlSW4uaW5kZXhJbkVudHJ5UG9pbnRJdGVtc10ucGF0aDsK
KyAgICAgICAgYXV0byYgZWxlbWVudE5hbWUgPSBuYW1lZFN0YWdlSW4uZWxlbWVudE5hbWU7Cisg
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWFuZ2xlZElucHV0UGF0aChw
YXRoKSwgIiA9ICIsIG1fc3RhZ2VJblN0cnVjdE5hbWUsICcuJywgZWxlbWVudE5hbWUsICI7XG4i
KSk7CisgICAgfQorCisgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKK30KKwor
U3RyaW5nIFZlcnRleEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6cGFjayhjb25zdCBTdHJpbmcmIGlu
cHV0VmFyaWFibGVOYW1lLCBjb25zdCBTdHJpbmcmIG91dHB1dFZhcmlhYmxlTmFtZSkKK3sKKyAg
ICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
bWFrZVN0cmluZyhtX3JldHVyblN0cnVjdE5hbWUsICcgJywgb3V0cHV0VmFyaWFibGVOYW1lKSk7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2VudHJ5UG9pbnRJdGVtcy5vdXRwdXRzLnNp
emUoKTsgKytpKSB7CisgICAgICAgIGF1dG8mIGVsZW1lbnROYW1lID0gbV9uYW1lZE91dHB1dHNb
aV0uZWxlbWVudE5hbWU7CisgICAgICAgIGF1dG8mIHBhdGggPSBtX2VudHJ5UG9pbnRJdGVtcy5v
dXRwdXRzW2ldLnBhdGg7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmco
b3V0cHV0VmFyaWFibGVOYW1lLCAnLicsIGVsZW1lbnROYW1lLCAiID0gIiwgaW5wdXRWYXJpYWJs
ZU5hbWUsIG1hbmdsZWRPdXRwdXRQYXRoKHBhdGgpLCAiO1xuIikpOworICAgIH0KKyAgICByZXR1
cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworfQorCitGcmFnbWVudEVudHJ5UG9pbnRTY2Fm
Zm9sZGluZzo6RnJhZ21lbnRFbnRyeVBvaW50U2NhZmZvbGRpbmcoQVNUOjpGdW5jdGlvbkRlZmlu
aXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbiwgSW50cmluc2ljcyYgaW50cmluc2ljcywgVHlwZU5h
bWVyJiB0eXBlTmFtZXIsIEVudHJ5UG9pbnRJdGVtcyYgZW50cnlQb2ludEl0ZW1zLCBIYXNoTWFw
PEJpbmRpbmcqLCBzaXplX3Q+JiByZXNvdXJjZU1hcCwgTGF5b3V0JiBsYXlvdXQsIHN0ZDo6ZnVu
Y3Rpb248U3RyaW5nKCk+JiYgZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lLCBIYXNoTWFwPEF0dGFj
aG1lbnREZXNjcmlwdG9yKiwgc2l6ZV90PiYpCisgICAgOiBFbnRyeVBvaW50U2NhZmZvbGRpbmco
ZnVuY3Rpb25EZWZpbml0aW9uLCBpbnRyaW5zaWNzLCB0eXBlTmFtZXIsIGVudHJ5UG9pbnRJdGVt
cywgcmVzb3VyY2VNYXAsIGxheW91dCwgV1RGTW92ZShnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUp
KQorICAgICwgbV9zdGFnZUluU3RydWN0TmFtZSh0eXBlTmFtZXIuZ2VuZXJhdGVOZXh0VHlwZU5h
bWUoKSkKKyAgICAsIG1fcmV0dXJuU3RydWN0TmFtZSh0eXBlTmFtZXIuZ2VuZXJhdGVOZXh0VHlw
ZU5hbWUoKSkKKyAgICAsIG1fc3RhZ2VJblBhcmFtZXRlck5hbWUobV9nZW5lcmF0ZU5leHRWYXJp
YWJsZU5hbWUoKSkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZW50cnlQb2ludEl0
ZW1zLmlucHV0cy5zaXplKCk7ICsraSkgeworICAgICAgICBhdXRvJiBpbnB1dEl0ZW0gPSBtX2Vu
dHJ5UG9pbnRJdGVtcy5pbnB1dHNbaV07CisgICAgICAgIGlmICghV1RGOjpob2xkc19hbHRlcm5h
dGl2ZTxBU1Q6OlN0YWdlSW5PdXRTZW1hbnRpYz4oKmlucHV0SXRlbS5zZW1hbnRpYykpCisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgYXV0byYgc3RhZ2VJbk91dFNlbWFudGljID0gV1RG
OjpnZXQ8QVNUOjpTdGFnZUluT3V0U2VtYW50aWM+KCppbnB1dEl0ZW0uc2VtYW50aWMpOworICAg
ICAgICBOYW1lZFN0YWdlSW4gbmFtZWRTdGFnZUluOworICAgICAgICBuYW1lZFN0YWdlSW4uaW5k
ZXhJbkVudHJ5UG9pbnRJdGVtcyA9IGk7CisgICAgICAgIG5hbWVkU3RhZ2VJbi5lbGVtZW50TmFt
ZSA9IG1fdHlwZU5hbWVyLmdlbmVyYXRlTmV4dFN0cnVjdHVyZUVsZW1lbnROYW1lKCk7CisgICAg
ICAgIG5hbWVkU3RhZ2VJbi5hdHRyaWJ1dGVJbmRleCA9IHN0YWdlSW5PdXRTZW1hbnRpYy5pbmRl
eCgpOworICAgICAgICBtX25hbWVkU3RhZ2VJbnMuYXBwZW5kKFdURk1vdmUobmFtZWRTdGFnZUlu
KSk7CisgICAgfQorCisgICAgbV9uYW1lZE91dHB1dHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSht
X2VudHJ5UG9pbnRJdGVtcy5vdXRwdXRzLnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX2VudHJ5UG9pbnRJdGVtcy5vdXRwdXRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIE5h
bWVkT3V0cHV0IG5hbWVkT3V0cHV0OworICAgICAgICBuYW1lZE91dHB1dC5lbGVtZW50TmFtZSA9
IG1fdHlwZU5hbWVyLmdlbmVyYXRlTmV4dFN0cnVjdHVyZUVsZW1lbnROYW1lKCk7CisgICAgICAg
IG1fbmFtZWRPdXRwdXRzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKG5hbWVkT3V0cHV0KSk7Cisg
ICAgfQorfQorCitTdHJpbmcgRnJhZ21lbnRFbnRyeVBvaW50U2NhZmZvbGRpbmc6OmhlbHBlclR5
cGVzKCkKK3sKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CisKKyAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJzdHJ1Y3QgIiwgbV9zdGFnZUluU3RydWN0TmFtZSwg
IiB7XG4iKSk7CisgICAgZm9yIChhdXRvJiBuYW1lZFN0YWdlSW4gOiBtX25hbWVkU3RhZ2VJbnMp
IHsKKyAgICAgICAgYXV0byBtYW5nbGVkVHlwZU5hbWUgPSBtX3R5cGVOYW1lci5tYW5nbGVkTmFt
ZUZvclR5cGUoKm1fZW50cnlQb2ludEl0ZW1zLmlucHV0c1tuYW1lZFN0YWdlSW4uaW5kZXhJbkVu
dHJ5UG9pbnRJdGVtc10udW5uYW1lZFR5cGUpOworICAgICAgICBhdXRvIGVsZW1lbnROYW1lID0g
bmFtZWRTdGFnZUluLmVsZW1lbnROYW1lOworICAgICAgICBhdXRvIGF0dHJpYnV0ZUluZGV4ID0g
bmFtZWRTdGFnZUluLmVsZW1lbnROYW1lOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCht
YWtlU3RyaW5nKCIgICAgIiwgbWFuZ2xlZFR5cGVOYW1lLCAnICcsIGVsZW1lbnROYW1lLCAiIFtb
dXNlcigiLCBhdHRyaWJ1dGVJbmRleCwgIildXTtcbiIpKTsKKyAgICB9CisgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQoIn1cblxuIik7CisKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3Ry
aW5nKCJzdHJ1Y3QgIiwgbV9yZXR1cm5TdHJ1Y3ROYW1lLCAiIHtcbiIpKTsKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1fZW50cnlQb2ludEl0ZW1zLm91dHB1dHMuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgYXV0byYgb3V0cHV0SXRlbSA9IG1fZW50cnlQb2ludEl0ZW1zLm91dHB1dHNbaV07
CisgICAgICAgIGF1dG8gbWFuZ2xlZFR5cGVOYW1lID0gbV90eXBlTmFtZXIubWFuZ2xlZE5hbWVG
b3JUeXBlKCpvdXRwdXRJdGVtLnVubmFtZWRUeXBlKTsKKyAgICAgICAgYXV0byBlbGVtZW50TmFt
ZSA9IG1fbmFtZWRPdXRwdXRzW2ldLmVsZW1lbnROYW1lOworICAgICAgICBhdXRvIGF0dHJpYnV0
ZSA9IGF0dHJpYnV0ZUZvclNlbWFudGljKCpvdXRwdXRJdGVtLnNlbWFudGljKTsKKyAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAgICIsIG1hbmdsZWRUeXBlTmFtZSwg
JyAnLCBlbGVtZW50TmFtZSwgJyAnLCBhdHRyaWJ1dGUsICI7XG4iKSk7CisgICAgfQorICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKCJ9XG5cbiIpOworCisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
cmVzb3VyY2VIZWxwZXJUeXBlcygpKTsKKworICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3Ry
aW5nKCk7Cit9CisKK1N0cmluZyBGcmFnbWVudEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6c2lnbmF0
dXJlKFN0cmluZyYgZnVuY3Rpb25OYW1lKQoreworICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVp
bGRlcjsKKworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoImZyYWdtZW50ICIs
IG1fcmV0dXJuU3RydWN0TmFtZSwgJyAnLCBmdW5jdGlvbk5hbWUsICcoJywgbV9zdGFnZUluU3Ry
dWN0TmFtZSwgJyAnLCBtX3N0YWdlSW5QYXJhbWV0ZXJOYW1lLCAiIFtbc3RhZ2VfaW5dXSIpKTsK
KyAgICBpZiAoYXV0byByZXNvdXJjZVNpZ25hdHVyZSA9IHRoaXMtPnJlc291cmNlU2lnbmF0dXJl
KCkpCisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiwgIiwgKnJlc291
cmNlU2lnbmF0dXJlKSk7CisgICAgaWYgKGF1dG8gYnVpbHRJbnNTaWduYXR1cmUgPSB0aGlzLT5i
dWlsdEluc1NpZ25hdHVyZSgpKQorICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3Ry
aW5nKCIsICIsICpidWlsdEluc1NpZ25hdHVyZSkpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KCIpIik7CisKKyAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworfQorCitTdHJp
bmcgRnJhZ21lbnRFbnRyeVBvaW50U2NhZmZvbGRpbmc6OnVucGFjaygpCit7CisgICAgU3RyaW5n
QnVpbGRlciBzdHJpbmdCdWlsZGVyOworCisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodW5wYWNr
UmVzb3VyY2VzQW5kTmFtZWRCdWlsdElucygpKTsKKworICAgIGZvciAoYXV0byYgbmFtZWRTdGFn
ZUluIDogbV9uYW1lZFN0YWdlSW5zKSB7CisgICAgICAgIGF1dG8mIHBhdGggPSBtX2VudHJ5UG9p
bnRJdGVtcy5pbnB1dHNbbmFtZWRTdGFnZUluLmluZGV4SW5FbnRyeVBvaW50SXRlbXNdLnBhdGg7
CisgICAgICAgIGF1dG8mIGVsZW1lbnROYW1lID0gbmFtZWRTdGFnZUluLmVsZW1lbnROYW1lOwor
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1hbmdsZWRJbnB1dFBhdGgo
cGF0aCksICIgPSAiLCBtX3N0YWdlSW5TdHJ1Y3ROYW1lLCAnLicsIGVsZW1lbnROYW1lLCAiO1xu
IikpOworICAgIH0KKworICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7Cit9CisK
K1N0cmluZyBGcmFnbWVudEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6cGFjayhjb25zdCBTdHJpbmcm
IGlucHV0VmFyaWFibGVOYW1lLCBjb25zdCBTdHJpbmcmIG91dHB1dFZhcmlhYmxlTmFtZSkKK3sK
KyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CisgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQobWFrZVN0cmluZyhtX3JldHVyblN0cnVjdE5hbWUsICcgJywgb3V0cHV0VmFyaWFibGVOYW1l
KSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2VudHJ5UG9pbnRJdGVtcy5vdXRwdXRz
LnNpemUoKTsgKytpKSB7CisgICAgICAgIGF1dG8mIGVsZW1lbnROYW1lID0gbV9uYW1lZE91dHB1
dHNbaV0uZWxlbWVudE5hbWU7CisgICAgICAgIGF1dG8mIHBhdGggPSBtX2VudHJ5UG9pbnRJdGVt
cy5vdXRwdXRzW2ldLnBhdGg7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJp
bmcob3V0cHV0VmFyaWFibGVOYW1lLCAnLicsIGVsZW1lbnROYW1lLCAiID0gIiwgaW5wdXRWYXJp
YWJsZU5hbWUsIG1hbmdsZWRPdXRwdXRQYXRoKHBhdGgpLCAiO1xuIikpOworICAgIH0KKyAgICBy
ZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworfQorCitDb21wdXRlRW50cnlQb2ludFNj
YWZmb2xkaW5nOjpDb21wdXRlRW50cnlQb2ludFNjYWZmb2xkaW5nKEFTVDo6RnVuY3Rpb25EZWZp
bml0aW9uJiBmdW5jdGlvbkRlZmluaXRpb24sIEludHJpbnNpY3MmIGludHJpbnNpY3MsIFR5cGVO
YW1lciYgdHlwZU5hbWVyLCBFbnRyeVBvaW50SXRlbXMmIGVudHJ5UG9pbnRJdGVtcywgSGFzaE1h
cDxCaW5kaW5nKiwgc2l6ZV90PiYgcmVzb3VyY2VNYXAsIExheW91dCYgbGF5b3V0LCBzdGQ6OmZ1
bmN0aW9uPFN0cmluZygpPiYmIGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSkKKyAgICA6IEVudHJ5
UG9pbnRTY2FmZm9sZGluZyhmdW5jdGlvbkRlZmluaXRpb24sIGludHJpbnNpY3MsIHR5cGVOYW1l
ciwgZW50cnlQb2ludEl0ZW1zLCByZXNvdXJjZU1hcCwgbGF5b3V0LCBXVEZNb3ZlKGdlbmVyYXRl
TmV4dFZhcmlhYmxlTmFtZSkpCit7Cit9CisKK1N0cmluZyBDb21wdXRlRW50cnlQb2ludFNjYWZm
b2xkaW5nOjpoZWxwZXJUeXBlcygpCit7CisgICAgcmV0dXJuIHJlc291cmNlSGVscGVyVHlwZXMo
KTsKK30KKworU3RyaW5nIENvbXB1dGVFbnRyeVBvaW50U2NhZmZvbGRpbmc6OnNpZ25hdHVyZShT
dHJpbmcmIGZ1bmN0aW9uTmFtZSkKK3sKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7
CisKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJjb21wdXRlIHZvaWQgIiwg
ZnVuY3Rpb25OYW1lLCAnKCcpKTsKKyAgICBib29sIGVtcHR5ID0gdHJ1ZTsKKyAgICBpZiAoYXV0
byByZXNvdXJjZVNpZ25hdHVyZSA9IHRoaXMtPnJlc291cmNlU2lnbmF0dXJlKCkpIHsKKyAgICAg
ICAgZW1wdHkgPSBmYWxzZTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmlu
ZygqcmVzb3VyY2VTaWduYXR1cmUpKTsKKyAgICB9CisgICAgaWYgKGF1dG8gYnVpbHRJbnNTaWdu
YXR1cmUgPSB0aGlzLT5idWlsdEluc1NpZ25hdHVyZSgpKSB7CisgICAgICAgIGlmICghZW1wdHkp
CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiLCAiKTsKKyAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQoKmJ1aWx0SW5zU2lnbmF0dXJlKTsKKyAgICB9CisgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQoIikiKTsKKworICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7
Cit9CisKK1N0cmluZyBDb21wdXRlRW50cnlQb2ludFNjYWZmb2xkaW5nOjp1bnBhY2soKQorewor
ICAgIHJldHVybiB1bnBhY2tSZXNvdXJjZXNBbmROYW1lZEJ1aWx0SW5zKCk7CiB9CiAKLVN0cmlu
ZyBFbnRyeVBvaW50U2NhZmZvbGRpbmc6OnBhY2soY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5n
JikKK1N0cmluZyBDb21wdXRlRW50cnlQb2ludFNjYWZmb2xkaW5nOjpwYWNrKGNvbnN0IFN0cmlu
ZyYsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgorICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xFbnRy
eVBvaW50U2NhZmZvbGRpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L01ldGFsL1dITFNMRW50cnlQb2ludFNjYWZmb2xkaW5nLmgKaW5kZXggOGQ2NWZhZDIwN2RmNTM5
ZTllYTc0MDQ1MDVlYTZlODcyMTRjOTRlMC4uN2YzNThhMDBhZmM1OWQxYzIxNGQyZDJjYzAxZjY5
OThkYjgzMTcwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvTWV0YWwvV0hMU0xFbnRyeVBvaW50U2NhZmZvbGRpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEVudHJ5UG9pbnRTY2FmZm9sZGluZy5o
CkBAIC0yNyw2ICsyNywxMSBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAorI2luY2x1ZGUgIldI
TFNMUGlwZWxpbmVEZXNjcmlwdG9yLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNs
dWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBuYW1lc3BhY2UgV0hMU0wgewpAQCAtMzcsMjMgKzQyLDEz
MiBAQCBjbGFzcyBGdW5jdGlvbkRlZmluaXRpb247CiAKIH0KIAorc3RydWN0IEVudHJ5UG9pbnRJ
dGVtczsKIGNsYXNzIEludHJpbnNpY3M7CiAKIG5hbWVzcGFjZSBNZXRhbCB7CiAKK2NsYXNzIFR5
cGVOYW1lcjsKKwogLy8gRklYTUU6IFRoaXMgbmVlZHMgdG8ga25vdyBhYm91dCB0aGUgcGlwZWxp
bmUgc3RhdGUgb2JqZWN0IHRvIGVtaXQgZnVuY3Rpb24gcHJvbG9ndWVzIGFuZCBlcGlsb2d1ZXMu
CiBjbGFzcyBFbnRyeVBvaW50U2NhZmZvbGRpbmcgewogcHVibGljOgotICAgIEVudHJ5UG9pbnRT
Y2FmZm9sZGluZyhBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYsIEludHJpbnNpY3MmKTsKKyAgICBF
bnRyeVBvaW50U2NhZmZvbGRpbmcoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mLCBJbnRyaW5zaWNz
JiwgVHlwZU5hbWVyJiwgRW50cnlQb2ludEl0ZW1zJiwgSGFzaE1hcDxCaW5kaW5nKiwgc2l6ZV90
PiYgcmVzb3VyY2VNYXAsIExheW91dCYsIHN0ZDo6ZnVuY3Rpb248U3RyaW5nKCk+JiYgZ2VuZXJh
dGVOZXh0VmFyaWFibGVOYW1lKTsKKyAgICB2aXJ0dWFsIH5FbnRyeVBvaW50U2NhZmZvbGRpbmco
KSA9IGRlZmF1bHQ7CisKKyAgICB2aXJ0dWFsIFN0cmluZyBoZWxwZXJUeXBlcygpID0gMDsKKyAg
ICB2aXJ0dWFsIFN0cmluZyBzaWduYXR1cmUoU3RyaW5nJiBmdW5jdGlvbk5hbWUpID0gMDsKKyAg
ICB2aXJ0dWFsIFN0cmluZyB1bnBhY2soKSA9IDA7CisgICAgdmlydHVhbCBTdHJpbmcgcGFjayhj
b25zdCBTdHJpbmcmIGV4aXN0aW5nVmFyaWFibGVOYW1lLCBjb25zdCBTdHJpbmcmIHZhcmlhYmxl
TmFtZSkgPSAwOworCisgICAgVmVjdG9yPFN0cmluZz4mIHBhcmFtZXRlclZhcmlhYmxlcygpIHsg
cmV0dXJuIG1fcGFyYW1ldGVyVmFyaWFibGVzOyB9CisKK3Byb3RlY3RlZDoKKyAgICBTdHJpbmcg
cmVzb3VyY2VIZWxwZXJUeXBlcygpOworICAgIE9wdGlvbmFsPFN0cmluZz4gcmVzb3VyY2VTaWdu
YXR1cmUoKTsKKyAgICBPcHRpb25hbDxTdHJpbmc+IGJ1aWx0SW5zU2lnbmF0dXJlKCk7CisKKyAg
ICBTdHJpbmcgbWFuZ2xlZElucHV0UGF0aChWZWN0b3I8U3RyaW5nPiYgcGF0aCk7CisgICAgU3Ry
aW5nIG1hbmdsZWRPdXRwdXRQYXRoKFZlY3RvcjxTdHJpbmc+JiBwYXRoKTsKKyAgICBTdHJpbmcg
dW5wYWNrUmVzb3VyY2VzQW5kTmFtZWRCdWlsdElucygpOworCisgICAgQVNUOjpGdW5jdGlvbkRl
ZmluaXRpb24mIG1fZnVuY3Rpb25EZWZpbml0aW9uOworICAgIEludHJpbnNpY3MmIG1faW50cmlu
c2ljczsKKyAgICBUeXBlTmFtZXImIG1fdHlwZU5hbWVyOworICAgIEVudHJ5UG9pbnRJdGVtcyYg
bV9lbnRyeVBvaW50SXRlbXM7CisgICAgSGFzaE1hcDxCaW5kaW5nKiwgc2l6ZV90PiYgbV9yZXNv
dXJjZU1hcDsKKyAgICBMYXlvdXQmIG1fbGF5b3V0OworICAgIHN0ZDo6ZnVuY3Rpb248U3RyaW5n
KCk+IG1fZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lOworCisgICAgc3RydWN0IE5hbWVkQmluZGlu
ZyB7CisgICAgICAgIFN0cmluZyBlbGVtZW50TmFtZTsKKyAgICAgICAgdW5zaWduZWQgaW5kZXg7
CisgICAgfTsKKyAgICBzdHJ1Y3QgTmFtZWRCaW5kR3JvdXAgeworICAgICAgICBTdHJpbmcgc3Ry
dWN0TmFtZTsKKyAgICAgICAgU3RyaW5nIHZhcmlhYmxlTmFtZTsKKyAgICAgICAgVmVjdG9yPE5h
bWVkQmluZGluZz4gbmFtZWRCaW5kaW5nczsKKyAgICAgICAgdW5zaWduZWQgYXJndW1lbnRCdWZm
ZXJJbmRleDsKKyAgICB9OworICAgIFZlY3RvcjxOYW1lZEJpbmRHcm91cD4gbV9uYW1lZEJpbmRH
cm91cHM7IC8vIFBhcmFsbGVsIHRvIG1fbGF5b3V0CisKKyAgICBzdHJ1Y3QgTmFtZWRCdWlsdElu
IHsKKyAgICAgICAgc2l6ZV90IGluZGV4SW5FbnRyeVBvaW50SXRlbXM7CisgICAgICAgIFN0cmlu
ZyB2YXJpYWJsZU5hbWU7CisgICAgfTsKKyAgICBWZWN0b3I8TmFtZWRCdWlsdEluPiBtX25hbWVk
QnVpbHRJbnM7CisKKyAgICBWZWN0b3I8U3RyaW5nPiBtX3BhcmFtZXRlclZhcmlhYmxlczsKK307
CisKK2NsYXNzIFZlcnRleEVudHJ5UG9pbnRTY2FmZm9sZGluZyA6IHB1YmxpYyBFbnRyeVBvaW50
U2NhZmZvbGRpbmcgeworcHVibGljOgorICAgIFZlcnRleEVudHJ5UG9pbnRTY2FmZm9sZGluZyhB
U1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYsIEludHJpbnNpY3MmLCBUeXBlTmFtZXImLCBFbnRyeVBv
aW50SXRlbXMmLCBIYXNoTWFwPEJpbmRpbmcqLCBzaXplX3Q+JiByZXNvdXJjZU1hcCwgTGF5b3V0
Jiwgc3RkOjpmdW5jdGlvbjxTdHJpbmcoKT4mJiBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUsIEhh
c2hNYXA8VmVydGV4QXR0cmlidXRlKiwgc2l6ZV90PiYgbWF0Y2hlZFZlcnRleEF0dHJpYnV0ZXMp
OworICAgIHZpcnR1YWwgflZlcnRleEVudHJ5UG9pbnRTY2FmZm9sZGluZygpID0gZGVmYXVsdDsK
KworICAgIFN0cmluZyBoZWxwZXJUeXBlcygpIG92ZXJyaWRlOworICAgIFN0cmluZyBzaWduYXR1
cmUoU3RyaW5nJiBmdW5jdGlvbk5hbWUpIG92ZXJyaWRlOworICAgIFN0cmluZyB1bnBhY2soKSBv
dmVycmlkZTsKKyAgICBTdHJpbmcgcGFjayhjb25zdCBTdHJpbmcmIGV4aXN0aW5nVmFyaWFibGVO
YW1lLCBjb25zdCBTdHJpbmcmIHZhcmlhYmxlTmFtZSkgb3ZlcnJpZGU7CisKK3ByaXZhdGU6Cisg
ICAgSGFzaE1hcDxWZXJ0ZXhBdHRyaWJ1dGUqLCBzaXplX3Q+JiBtX21hdGNoZWRWZXJ0ZXhBdHRy
aWJ1dGVzOworICAgIFN0cmluZyBtX3N0YWdlSW5TdHJ1Y3ROYW1lOworICAgIFN0cmluZyBtX3Jl
dHVyblN0cnVjdE5hbWU7CisgICAgU3RyaW5nIG1fc3RhZ2VJblBhcmFtZXRlck5hbWU7CisKKyAg
ICBzdHJ1Y3QgTmFtZWRTdGFnZUluIHsKKyAgICAgICAgc2l6ZV90IGluZGV4SW5FbnRyeVBvaW50
SXRlbXM7CisgICAgICAgIFN0cmluZyBlbGVtZW50TmFtZTsKKyAgICAgICAgdW5zaWduZWQgYXR0
cmlidXRlSW5kZXg7CisgICAgfTsKKyAgICBWZWN0b3I8TmFtZWRTdGFnZUluPiBtX25hbWVkU3Rh
Z2VJbnM7CisKKyAgICBzdHJ1Y3QgTmFtZWRPdXRwdXQgeworICAgICAgICBTdHJpbmcgZWxlbWVu
dE5hbWU7CisgICAgfTsKKyAgICBWZWN0b3I8TmFtZWRPdXRwdXQ+IG1fbmFtZWRPdXRwdXRzOwor
fTsKKworY2xhc3MgRnJhZ21lbnRFbnRyeVBvaW50U2NhZmZvbGRpbmcgOiBwdWJsaWMgRW50cnlQ
b2ludFNjYWZmb2xkaW5nIHsKK3B1YmxpYzoKKyAgICBGcmFnbWVudEVudHJ5UG9pbnRTY2FmZm9s
ZGluZyhBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYsIEludHJpbnNpY3MmLCBUeXBlTmFtZXImLCBF
bnRyeVBvaW50SXRlbXMmLCBIYXNoTWFwPEJpbmRpbmcqLCBzaXplX3Q+JiByZXNvdXJjZU1hcCwg
TGF5b3V0Jiwgc3RkOjpmdW5jdGlvbjxTdHJpbmcoKT4mJiBnZW5lcmF0ZU5leHRWYXJpYWJsZU5h
bWUsIEhhc2hNYXA8QXR0YWNobWVudERlc2NyaXB0b3IqLCBzaXplX3Q+JiBtYXRjaGVkQ29sb3JB
dHRhY2htZW50cyk7CisgICAgdmlydHVhbCB+RnJhZ21lbnRFbnRyeVBvaW50U2NhZmZvbGRpbmco
KSA9IGRlZmF1bHQ7CisKKyAgICBTdHJpbmcgaGVscGVyVHlwZXMoKSBvdmVycmlkZTsKKyAgICBT
dHJpbmcgc2lnbmF0dXJlKFN0cmluZyYgZnVuY3Rpb25OYW1lKSBvdmVycmlkZTsKKyAgICBTdHJp
bmcgdW5wYWNrKCkgb3ZlcnJpZGU7CisgICAgU3RyaW5nIHBhY2soY29uc3QgU3RyaW5nJiBleGlz
dGluZ1ZhcmlhYmxlTmFtZSwgY29uc3QgU3RyaW5nJiB2YXJpYWJsZU5hbWUpIG92ZXJyaWRlOwor
Citwcml2YXRlOgorICAgIFN0cmluZyBtX3N0YWdlSW5TdHJ1Y3ROYW1lOworICAgIFN0cmluZyBt
X3JldHVyblN0cnVjdE5hbWU7CisgICAgU3RyaW5nIG1fc3RhZ2VJblBhcmFtZXRlck5hbWU7CisK
KyAgICBzdHJ1Y3QgTmFtZWRTdGFnZUluIHsKKyAgICAgICAgc2l6ZV90IGluZGV4SW5FbnRyeVBv
aW50SXRlbXM7CisgICAgICAgIFN0cmluZyBlbGVtZW50TmFtZTsKKyAgICAgICAgdW5zaWduZWQg
YXR0cmlidXRlSW5kZXg7CisgICAgfTsKKyAgICBWZWN0b3I8TmFtZWRTdGFnZUluPiBtX25hbWVk
U3RhZ2VJbnM7CisKKyAgICBzdHJ1Y3QgTmFtZWRPdXRwdXQgeworICAgICAgICBTdHJpbmcgZWxl
bWVudE5hbWU7CisgICAgfTsKKyAgICBWZWN0b3I8TmFtZWRPdXRwdXQ+IG1fbmFtZWRPdXRwdXRz
OworfTsKKworY2xhc3MgQ29tcHV0ZUVudHJ5UG9pbnRTY2FmZm9sZGluZyA6IHB1YmxpYyBFbnRy
eVBvaW50U2NhZmZvbGRpbmcgeworcHVibGljOgorICAgIENvbXB1dGVFbnRyeVBvaW50U2NhZmZv
bGRpbmcoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mLCBJbnRyaW5zaWNzJiwgVHlwZU5hbWVyJiwg
RW50cnlQb2ludEl0ZW1zJiwgSGFzaE1hcDxCaW5kaW5nKiwgc2l6ZV90PiYgcmVzb3VyY2VNYXAs
IExheW91dCYsIHN0ZDo6ZnVuY3Rpb248U3RyaW5nKCk+JiYgZ2VuZXJhdGVOZXh0VmFyaWFibGVO
YW1lKTsKKyAgICB2aXJ0dWFsIH5Db21wdXRlRW50cnlQb2ludFNjYWZmb2xkaW5nKCkgPSBkZWZh
dWx0OwogCi0gICAgU3RyaW5nIGhlbHBlclR5cGVzKCk7Ci0gICAgU3RyaW5nIHNpZ25hdHVyZSgp
OwotICAgIFN0cmluZyB1bnBhY2soKTsKLSAgICBTdHJpbmcgcGFjayhjb25zdCBTdHJpbmcmIGV4
aXN0aW5nVmFyaWFibGVOYW1lLCBjb25zdCBTdHJpbmcmIHZhcmlhYmxlTmFtZSk7CisgICAgU3Ry
aW5nIGhlbHBlclR5cGVzKCkgb3ZlcnJpZGU7CisgICAgU3RyaW5nIHNpZ25hdHVyZShTdHJpbmcm
IGZ1bmN0aW9uTmFtZSkgb3ZlcnJpZGU7CisgICAgU3RyaW5nIHVucGFjaygpIG92ZXJyaWRlOwor
ICAgIFN0cmluZyBwYWNrKGNvbnN0IFN0cmluZyYgZXhpc3RpbmdWYXJpYWJsZU5hbWUsIGNvbnN0
IFN0cmluZyYgdmFyaWFibGVOYW1lKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKLSAgICBBU1Q6OkZ1
bmN0aW9uRGVmaW5pdGlvbiogbV9mdW5jdGlvbkRlZmluaXRpb247Ci0gICAgSW50cmluc2ljcyog
bV9pbnRyaW5zaWNzOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xGdW5jdGlvbldyaXRlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVyLmNwcApp
bmRleCAwMTlhMjY3YmJjOGJlNmZkMjdlYTBlMTA4ZjgxYjc5NDI4ZDUwY2Y2Li44NDk4MWUzOTNk
OWFjZjM1MGExYzQxZjM1ZmVjNmM0MDY5YTZmYzA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9u
V3JpdGVyLmNwcApAQCAtMTEwLDEwICsxMTAsMTIgQEAgcHJpdmF0ZToKIAogY2xhc3MgRnVuY3Rp
b25EZWZpbml0aW9uV3JpdGVyIDogcHVibGljIFZpc2l0b3IgewogcHVibGljOgotICAgIEZ1bmN0
aW9uRGVmaW5pdGlvbldyaXRlcihJbnRyaW5zaWNzJiBpbnRyaW5zaWNzLCBUeXBlTmFtZXImIHR5
cGVOYW1lciwgSGFzaE1hcDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qLCBTdHJpbmc+JiBmdW5j
dGlvbk1hcHBpbmcpCisgICAgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyKEludHJpbnNpY3MmIGlu
dHJpbnNpY3MsIFR5cGVOYW1lciYgdHlwZU5hbWVyLCBIYXNoTWFwPEFTVDo6RnVuY3Rpb25EZWNs
YXJhdGlvbiosIFN0cmluZz4mIGZ1bmN0aW9uTWFwcGluZywgVmFyaWFudDxNYXRjaGVkUmVuZGVy
U2VtYW50aWNzLCBNYXRjaGVkQ29tcHV0ZVNlbWFudGljcz4mJiBtYXRjaGVkU2VtYW50aWNzLCBM
YXlvdXQmIGxheW91dCkKICAgICAgICAgOiBtX2ludHJpbnNpY3MoaW50cmluc2ljcykKICAgICAg
ICAgLCBtX3R5cGVOYW1lcih0eXBlTmFtZXIpCiAgICAgICAgICwgbV9mdW5jdGlvbk1hcHBpbmco
ZnVuY3Rpb25NYXBwaW5nKQorICAgICAgICAsIG1fbWF0Y2hlZFNlbWFudGljcyhXVEZNb3ZlKG1h
dGNoZWRTZW1hbnRpY3MpKQorICAgICAgICAsIG1fbGF5b3V0KGxheW91dCkKICAgICB7CiAgICAg
fQogCkBAIC0xMzMsMTYgKzEzNSwzNCBAQCBwdWJsaWM6CiAgICAgICAgIGF1dG8gaXRlcmF0b3Ig
PSBtX2Z1bmN0aW9uTWFwcGluZy5maW5kKCZmdW5jdGlvbkRlZmluaXRpb24pOwogICAgICAgICBB
U1NFUlQoaXRlcmF0b3IgIT0gbV9mdW5jdGlvbk1hcHBpbmcuZW5kKCkpOwogICAgICAgICBpZiAo
ZnVuY3Rpb25EZWZpbml0aW9uLmVudHJ5UG9pbnRUeXBlKCkpIHsKLSAgICAgICAgICAgIG1fZW50
cnlQb2ludFNjYWZmb2xkaW5nID0gRW50cnlQb2ludFNjYWZmb2xkaW5nKGZ1bmN0aW9uRGVmaW5p
dGlvbiwgbV9pbnRyaW5zaWNzKTsKKyAgICAgICAgICAgIGF1dG8gZ2VuZXJhdGVOZXh0VmFyaWFi
bGVOYW1lID0gW3RoaXNdKCkgLT4gU3RyaW5nIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhp
cy0+Z2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7CisgICAgICAgICAgICB9OworICAgICAgICAg
ICAgV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShNYXRjaGVkUmVuZGVyU2VtYW50aWNz
JiBtYXRjaGVkUmVuZGVyU2VtYW50aWNzKSB7CisgICAgICAgICAgICAgICAgaWYgKCZmdW5jdGlv
bkRlZmluaXRpb24gPT0gbWF0Y2hlZFJlbmRlclNlbWFudGljcy52ZXJ0ZXhTaGFkZXIpCisgICAg
ICAgICAgICAgICAgICAgIG1fZW50cnlQb2ludFNjYWZmb2xkaW5nID0gc3RkOjptYWtlX3VuaXF1
ZTxWZXJ0ZXhFbnRyeVBvaW50U2NhZmZvbGRpbmc+KGZ1bmN0aW9uRGVmaW5pdGlvbiwgbV9pbnRy
aW5zaWNzLCBtX3R5cGVOYW1lciwgbWF0Y2hlZFJlbmRlclNlbWFudGljcy52ZXJ0ZXhTaGFkZXJF
bnRyeVBvaW50SXRlbXMsIG1hdGNoZWRSZW5kZXJTZW1hbnRpY3MudmVydGV4U2hhZGVyUmVzb3Vy
Y2VNYXAsIG1fbGF5b3V0LCBXVEZNb3ZlKGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSksIG1hdGNo
ZWRSZW5kZXJTZW1hbnRpY3MubWF0Y2hlZFZlcnRleEF0dHJpYnV0ZXMpOworICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKCZmdW5jdGlvbkRlZmluaXRpb24gPT0gbWF0Y2hlZFJlbmRlclNlbWFudGlj
cy5mcmFnbWVudFNoYWRlcikKKyAgICAgICAgICAgICAgICAgICAgbV9lbnRyeVBvaW50U2NhZmZv
bGRpbmcgPSBzdGQ6Om1ha2VfdW5pcXVlPEZyYWdtZW50RW50cnlQb2ludFNjYWZmb2xkaW5nPihm
dW5jdGlvbkRlZmluaXRpb24sIG1faW50cmluc2ljcywgbV90eXBlTmFtZXIsIG1hdGNoZWRSZW5k
ZXJTZW1hbnRpY3MuZnJhZ21lbnRTaGFkZXJFbnRyeVBvaW50SXRlbXMsIG1hdGNoZWRSZW5kZXJT
ZW1hbnRpY3MuZnJhZ21lbnRTaGFkZXJSZXNvdXJjZU1hcCwgbV9sYXlvdXQsIFdURk1vdmUoZ2Vu
ZXJhdGVOZXh0VmFyaWFibGVOYW1lKSwgbWF0Y2hlZFJlbmRlclNlbWFudGljcy5tYXRjaGVkQ29s
b3JBdHRhY2htZW50cyk7CisgICAgICAgICAgICB9LCBbJl0oTWF0Y2hlZENvbXB1dGVTZW1hbnRp
Y3MmIG1hdGNoZWRDb21wdXRlU2VtYW50aWNzKSB7CisgICAgICAgICAgICAgICAgaWYgKCZmdW5j
dGlvbkRlZmluaXRpb24gPT0gbWF0Y2hlZENvbXB1dGVTZW1hbnRpY3Muc2hhZGVyKQorICAgICAg
ICAgICAgICAgICAgICBtX2VudHJ5UG9pbnRTY2FmZm9sZGluZyA9IHN0ZDo6bWFrZV91bmlxdWU8
Q29tcHV0ZUVudHJ5UG9pbnRTY2FmZm9sZGluZz4oZnVuY3Rpb25EZWZpbml0aW9uLCBtX2ludHJp
bnNpY3MsIG1fdHlwZU5hbWVyLCBtYXRjaGVkQ29tcHV0ZVNlbWFudGljcy5lbnRyeVBvaW50SXRl
bXMsIG1hdGNoZWRDb21wdXRlU2VtYW50aWNzLnJlc291cmNlTWFwLCBtX2xheW91dCwgV1RGTW92
ZShnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUpKTsKKyAgICAgICAgICAgIH0pLCBtX21hdGNoZWRT
ZW1hbnRpY3MpOworICAgICAgICAgICAgaWYgKCFtX2VudHJ5UG9pbnRTY2FmZm9sZGluZykKKyAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5k
KG1fZW50cnlQb2ludFNjYWZmb2xkaW5nLT5oZWxwZXJUeXBlcygpKTsKICAgICAgICAgICAgIG1f
c3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIu
YXBwZW5kKG1ha2VTdHJpbmcobV9lbnRyeVBvaW50U2NhZmZvbGRpbmctPnNpZ25hdHVyZSgpLCAi
IHsiKSk7CisgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobV9l
bnRyeVBvaW50U2NhZmZvbGRpbmctPnNpZ25hdHVyZShpdGVyYXRvci0+dmFsdWUpLCAiIHsiKSk7
CiAgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1fZW50cnlQb2ludFNjYWZmb2xk
aW5nLT51bnBhY2soKSk7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZ1bmN0
aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAg
ICBhdXRvIGFkZFJlc3VsdCA9IG1fdmFyaWFibGVNYXBwaW5nLmFkZCgmZnVuY3Rpb25EZWZpbml0
aW9uLnBhcmFtZXRlcnMoKVtpXSwgbV9lbnRyeVBvaW50U2NhZmZvbGRpbmctPnBhcmFtZXRlclZh
cmlhYmxlcygpW2ldKTsKKyAgICAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwg
YWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgY2hlY2tF
cnJvckFuZFZpc2l0KGZ1bmN0aW9uRGVmaW5pdGlvbi5ibG9jaygpKTsKICAgICAgICAgICAgIEFT
U0VSVChtX3N0YWNrLmlzRW1wdHkoKSk7CiAgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBw
ZW5kKCJ9XG4iKTsKKyAgICAgICAgICAgIG1fZW50cnlQb2ludFNjYWZmb2xkaW5nID0gbnVsbHB0
cjsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1fZW50cnlQb2ludFNjYWZmb2xkaW5n
ID0gV1RGOjpudWxsb3B0OworICAgICAgICAgICAgQVNTRVJUKG1fZW50cnlQb2ludFNjYWZmb2xk
aW5nID09IG51bGxwdHIpOwogICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtl
U3RyaW5nKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShmdW5jdGlvbkRlZmluaXRpb24u
dHlwZSgpKSwgJyAnLCBpdGVyYXRvci0+dmFsdWUsICcoJykpOwogICAgICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpLnNpemUoKTsg
KytpKSB7CiAgICAgICAgICAgICAgICAgYXV0byYgcGFyYW1ldGVyID0gZnVuY3Rpb25EZWZpbml0
aW9uLnBhcmFtZXRlcnMoKVtpXTsKQEAgLTU3OSwxMSArNTk5LDEzIEBAIHByaXZhdGU6CiAgICAg
SGFzaE1hcDxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24qLCBTdHJpbmc+IG1fdmFyaWFibGVNYXBw
aW5nOwogICAgIFN0cmluZ0J1aWxkZXIgbV9zdHJpbmdCdWlsZGVyOwogICAgIFZlY3RvcjxTdHJp
bmc+IG1fc3RhY2s7Ci0gICAgT3B0aW9uYWw8RW50cnlQb2ludFNjYWZmb2xkaW5nPiBtX2VudHJ5
UG9pbnRTY2FmZm9sZGluZzsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RW50cnlQb2ludFNjYWZmb2xk
aW5nPiBtX2VudHJ5UG9pbnRTY2FmZm9sZGluZzsKKyAgICBWYXJpYW50PE1hdGNoZWRSZW5kZXJT
ZW1hbnRpY3MsIE1hdGNoZWRDb21wdXRlU2VtYW50aWNzPiBtX21hdGNoZWRTZW1hbnRpY3M7Cisg
ICAgTGF5b3V0JiBtX2xheW91dDsKICAgICB1bnNpZ25lZCBtX3ZhcmlhYmxlQ291bnQgeyAwIH07
CiB9OwogCi1TdHJpbmcgbWV0YWxGdW5jdGlvbnMoUHJvZ3JhbSYgcHJvZ3JhbSwgVHlwZU5hbWVy
JiB0eXBlTmFtZXIpCitTdHJpbmcgbWV0YWxGdW5jdGlvbnMoUHJvZ3JhbSYgcHJvZ3JhbSwgVHlw
ZU5hbWVyJiB0eXBlTmFtZXIsIFZhcmlhbnQ8TWF0Y2hlZFJlbmRlclNlbWFudGljcywgTWF0Y2hl
ZENvbXB1dGVTZW1hbnRpY3M+JiYgbWF0Y2hlZFNlbWFudGljcywgTGF5b3V0JiBsYXlvdXQpCiB7
CiAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwogCkBAIC02MTIsNyArNjM0LDcgQEAg
U3RyaW5nIG1ldGFsRnVuY3Rpb25zKFByb2dyYW0mIHByb2dyYW0sIFR5cGVOYW1lciYgdHlwZU5h
bWVyKQogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwogCiAgICAgewotICAgICAgICBG
dW5jdGlvbkRlZmluaXRpb25Xcml0ZXIgZnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyKHByb2dyYW0u
aW50cmluc2ljcygpLCB0eXBlTmFtZXIsIGZ1bmN0aW9uTWFwcGluZyk7CisgICAgICAgIEZ1bmN0
aW9uRGVmaW5pdGlvbldyaXRlciBmdW5jdGlvbkRlZmluaXRpb25Xcml0ZXIocHJvZ3JhbS5pbnRy
aW5zaWNzKCksIHR5cGVOYW1lciwgZnVuY3Rpb25NYXBwaW5nLCBXVEZNb3ZlKG1hdGNoZWRTZW1h
bnRpY3MpLCBsYXlvdXQpOwogICAgICAgICBmb3IgKGF1dG8mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24gOiBwcm9ncmFtLm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25zKCkpCiAgICAgICAgICAg
ICBmdW5jdGlvbkRlZmluaXRpb25Xcml0ZXIudmlzaXQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bik7CiAgICAgICAgIGZvciAoYXV0byYgZnVuY3Rpb25EZWZpbml0aW9uIDogcHJvZ3JhbS5mdW5j
dGlvbkRlZmluaXRpb25zKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVyLmgKaW5kZXggOTk2
MGU1ZTQ4ZDU4YzI0ZTM1ZTUyODM4MjQ1NjQ3MmI3ZDA5YjZkNy4uZDdkMmI4ZGFiMjZiNWE1NGEz
NzZiODExN2FiM2ZkNTFiZDJhNGUzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xGdW5jdGlvbldyaXRlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRnVuY3Rpb25Xcml0ZXIuaApA
QCAtMjcsNiArMjcsOCBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAorI2luY2x1ZGUgIldITFNM
U2VtYW50aWNNYXRjaGVyLmgiCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNlIFdI
TFNMIHsKQEAgLTM3LDcgKzM5LDcgQEAgbmFtZXNwYWNlIE1ldGFsIHsKIAogY2xhc3MgVHlwZU5h
bWVyOwogCi1TdHJpbmcgbWV0YWxGdW5jdGlvbnMoUHJvZ3JhbSYsIFR5cGVOYW1lciYpOworU3Ry
aW5nIG1ldGFsRnVuY3Rpb25zKFByb2dyYW0mLCBUeXBlTmFtZXImLCBWYXJpYW50PE1hdGNoZWRS
ZW5kZXJTZW1hbnRpY3MsIE1hdGNoZWRDb21wdXRlU2VtYW50aWNzPiYmLCBMYXlvdXQmKTsKIAog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRh
bC9XSExTTE1ldGFsQ29kZUdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9NZXRhbC9XSExTTE1ldGFsQ29kZUdlbmVyYXRvci5jcHAKaW5kZXggMTBjMDUz
MGUyOTBkNzA0MTc2N2Y3MTgyMzI3MGQzYjkyNTk3YjU0Yi4uMmVjNTc1NmQzZDQ3YzViMDYzN2Q5
NmRjNDcyNmI4Nzc5ZTYzNjdhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xNZXRhbENvZGVHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMTWV0YWxDb2RlR2VuZXJh
dG9yLmNwcApAQCAtMzgsNyArMzgsNyBAQCBuYW1lc3BhY2UgV0hMU0wgewogCiBuYW1lc3BhY2Ug
TWV0YWwgewogCi1TdHJpbmcgZ2VuZXJhdGVNZXRhbENvZGUoUHJvZ3JhbSYgcHJvZ3JhbSkKK1N0
cmluZyBnZW5lcmF0ZU1ldGFsQ29kZShQcm9ncmFtJiBwcm9ncmFtLCBWYXJpYW50PE1hdGNoZWRS
ZW5kZXJTZW1hbnRpY3MsIE1hdGNoZWRDb21wdXRlU2VtYW50aWNzPiYmIG1hdGNoZWRTZW1hbnRp
Y3MsIExheW91dCYgbGF5b3V0KQogewogICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsK
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiI2luY2x1ZGUgPG1ldGFsX3N0ZGxpYj5cbiIpOwpA
QCAtNTMsNyArNTMsNyBAQCBTdHJpbmcgZ2VuZXJhdGVNZXRhbENvZGUoUHJvZ3JhbSYgcHJvZ3Jh
bSkKIAogICAgIFR5cGVOYW1lciB0eXBlTmFtZXIocHJvZ3JhbSk7CiAgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQodHlwZU5hbWVyLm1ldGFsVHlwZXMoKSk7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQobWV0YWxGdW5jdGlvbnMocHJvZ3JhbSwgdHlwZU5hbWVyKSk7CisgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQobWV0YWxGdW5jdGlvbnMocHJvZ3JhbSwgdHlwZU5hbWVyLCBXVEZNb3ZlKG1hdGNo
ZWRTZW1hbnRpY3MpLCBsYXlvdXQpKTsKICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmlu
ZygpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9NZXRhbC9XSExTTE1ldGFsQ29kZUdlbmVyYXRvci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xNZXRhbENvZGVHZW5lcmF0b3IuaAppbmRleCBlMDg4
ZTAxMDQ0OTk0ODQxMTA3NTY3NDM0NzQ5MWY3M2QzNmEyMzRmLi43ZWE3M2I4ZDNjMTcxNDJkZWUy
ZTM1MTI1OTQxOWJkOWE3MDI3YTM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE1ldGFsQ29kZUdlbmVyYXRvci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMTWV0YWxDb2RlR2VuZXJh
dG9yLmgKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAKKyNpbmNsdWRl
IDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CkBAIC0zOCw3ICszOSw3IEBAIGNsYXNzIFByb2dyYW07CiBuYW1lc3Bh
Y2UgTWV0YWwgewogCiAvLyBGSVhNRTogVGhpcyBuZWVkcyB0byBrbm93IGFib3V0IHRoZSBwaXBl
bGluZSBzdGF0ZSBvYmplY3QgdG8gZW1pdCBmdW5jdGlvbiBwcm9sb2d1ZXMgYW5kIGVwaWxvZ3Vl
cy4KLVN0cmluZyBnZW5lcmF0ZU1ldGFsQ29kZShQcm9ncmFtJik7CitTdHJpbmcgZ2VuZXJhdGVN
ZXRhbENvZGUoUHJvZ3JhbSYsIFZhcmlhbnQ8TWF0Y2hlZFJlbmRlclNlbWFudGljcywgTWF0Y2hl
ZENvbXB1dGVTZW1hbnRpY3M+JiYgbWF0Y2hlZFNlbWFudGljcywgTGF5b3V0Jik7CiAKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbnRy
aW5zaWNzLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEludHJp
bnNpY3MuaAppbmRleCA4NDEwYzhiNzM5MmM3ZjAwMTQ0YTkwMWQ1ZWM0NjJkNDk2YWJhODFjLi5m
YzQ3ZDMyOTM1NDBkZjZjY2E1MzY2MzFkNGM5ZmJkMmVjZTg5NzlmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEludHJpbnNpY3MuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEludHJpbnNpY3MuaApAQCAt
ODIsNiArODIsMTIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gKm1fZmxvYXRUeXBlOwogICAg
IH0KIAorICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBmbG9hdDJUeXBlKCkgY29uc3QK
KyAgICB7CisgICAgICAgIEFTU0VSVChtX3ZlY3RvckZsb2F0WzBdKTsKKyAgICAgICAgcmV0dXJu
ICptX3ZlY3RvckZsb2F0WzBdOworICAgIH0KKwogICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0
aW9uJiBmbG9hdDNUeXBlKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3ZlY3RvckZs
b2F0WzFdKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMUGlwZWxpbmVEZXNjcmlwdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTFBpcGVsaW5lRGVzY3JpcHRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBmMjg2OTJjMTg0
YmJmNmEwNjFmYzc5NDI1MjUyNDUwOTIxMjJhYjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBpcGVsaW5lRGVzY3JpcHRvci5oCkBA
IC0wLDAgKzEsMTE2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUo
V0VCR1BVKQorCisjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgorI2luY2x1ZGUgPHd0Zi9WYXJp
YW50Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K25hbWVzcGFjZSBXSExTTCB7CisKK2VudW0gY2xhc3MgVmVydGV4Rm9ybWF0IDogdWludDhfdCB7
CisgICAgRmxvYXRSMzJHMzJCMzJBMzIsCisgICAgRmxvYXRSMzJHMzJCMzIsCisgICAgRmxvYXRS
MzJHMzIsCisgICAgRmxvYXRSMzIKK307CisKK3N0cnVjdCBWZXJ0ZXhBdHRyaWJ1dGUgeworICAg
IFZlcnRleEZvcm1hdCB2ZXJ0ZXhGb3JtYXQ7CisgICAgdW5zaWduZWQgbmFtZTsKK307CisKK3Vz
aW5nIFZlcnRleEF0dHJpYnV0ZXMgPSBWZWN0b3I8VmVydGV4QXR0cmlidXRlPjsKKworZW51bSBj
bGFzcyBUZXh0dXJlRm9ybWF0IHsKKyAgICBSOEc4QjhBOFVub3JtLAorICAgIFI4RzhCOEE4VWlu
dCwKKyAgICBCOEc4UjhBOFVub3JtLAorICAgIEQzMkZsb2F0UzhVaW50Cit9OworCitzdHJ1Y3Qg
QXR0YWNobWVudERlc2NyaXB0b3IgeworICAgIFRleHR1cmVGb3JtYXQgdGV4dHVyZUZvcm1hdDsK
KyAgICB1bnNpZ25lZCBuYW1lOworfTsKKworc3RydWN0IEF0dGFjaG1lbnRzU3RhdGVEZXNjcmlw
dG9yIHsKKyAgICBWZWN0b3I8QXR0YWNobWVudERlc2NyaXB0b3I+IGF0dGFjaG1lbnREZXNjcmlw
dG9yczsKKyAgICBPcHRpb25hbDxBdHRhY2htZW50RGVzY3JpcHRvcj4gZGVwdGhTdGVuY2lsQXR0
YWNobWVudERlc2NyaXB0b3I7Cit9OworCitlbnVtIGNsYXNzIFNoYWRlclN0YWdlIDogdWludDhf
dCB7CisgICAgTm9uZSA9IDAsCisgICAgVmVydGV4ID0gMSA8PCAwLAorICAgIEZyYWdtZW50ID0g
MSA8PCAxLAorICAgIENvbXB1dGUgPSAxIDw8IDIKK307CisKK2VudW0gY2xhc3MgQmluZGluZ1R5
cGUgOiB1aW50OF90IHsKKyAgICBVbmlmb3JtQnVmZmVyLAorICAgIFNhbXBsZXIsCisgICAgVGV4
dHVyZSwKKyAgICBTdG9yYWdlQnVmZmVyLAorICAgIC8vIEZJWE1FOiBBZGQgdGhlIGR5bmFtaWMg
dHlwZXMKK307CisKK3N0cnVjdCBCaW5kaW5nIHsKKyAgICBPcHRpb25TZXQ8U2hhZGVyU3RhZ2U+
IHZpc2liaWxpdHk7CisgICAgQmluZGluZ1R5cGUgYmluZGluZ1R5cGU7CisgICAgdW5zaWduZWQg
bmFtZTsKK307CisKK3N0cnVjdCBCaW5kR3JvdXAgeworICAgIFZlY3RvcjxCaW5kaW5nPiBiaW5k
aW5nczsKKyAgICB1bnNpZ25lZCBuYW1lOworfTsKKwordXNpbmcgTGF5b3V0ID0gVmVjdG9yPEJp
bmRHcm91cD47CisKK3N0cnVjdCBSZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgeworICAgIFZlcnRl
eEF0dHJpYnV0ZXMgdmVydGV4QXR0cmlidXRlczsKKyAgICBBdHRhY2htZW50c1N0YXRlRGVzY3Jp
cHRvciBhdHRhY2htZW50c1N0YXRlRGVzY3JpcHRvcjsKKyAgICBMYXlvdXQgbGF5b3V0OworICAg
IFN0cmluZyB2ZXJ0ZXhFbnRyeVBvaW50TmFtZTsKKyAgICBTdHJpbmcgZnJhZ21lbnRFbnRyeVBv
aW50TmFtZTsKK307CisKK3N0cnVjdCBDb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yIHsKKyAgICBM
YXlvdXQgbGF5b3V0OworICAgIFN0cmluZyBlbnRyeVBvaW50TmFtZTsKK307CisKK3VzaW5nIFBp
cGVsaW5lRGVzY3JpcHRvciA9IFZhcmlhbnQ8UmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yLCBDb21w
dXRlUGlwZWxpbmVEZXNjcmlwdG9yPjsKKworfSAvLyBuYW1lc3BhY2UgV0hMU0wKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdQVSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU2VtYW50aWNNYXRjaGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU2VtYW50aWNN
YXRjaGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hOTZkZTk0N2U5YWI0N2Q3OTcyODM1MDM5NDgyYjFkY2M3
MDg0ZmQzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xTZW1hbnRpY01hdGNoZXIuY3BwCkBAIC0wLDAgKzEsMzAzIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldITFNMU2VtYW50aWNNYXRjaGVy
LmgiCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xCdWlsdEluU2VtYW50
aWMuaCIKKyNpbmNsdWRlICJXSExTTEZ1bmN0aW9uRGVmaW5pdGlvbi5oIgorI2luY2x1ZGUgIldI
TFNMR2F0aGVyRW50cnlQb2ludEl0ZW1zLmgiCisjaW5jbHVkZSAiV0hMU0xJbmZlclR5cGVzLmgi
CisjaW5jbHVkZSAiV0hMU0xQaXBlbGluZURlc2NyaXB0b3IuaCIKKyNpbmNsdWRlICJXSExTTFBy
b2dyYW0uaCIKKyNpbmNsdWRlICJXSExTTFJlc291cmNlU2VtYW50aWMuaCIKKyNpbmNsdWRlICJX
SExTTFN0YWdlSW5PdXRTZW1hbnRpYy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5j
bHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3Bh
Y2UgV0hMU0wgeworCitzdGF0aWMgQVNUOjpGdW5jdGlvbkRlZmluaXRpb24qIGZpbmRFbnRyeVBv
aW50KFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpGdW5jdGlvbkRlZmluaXRpb24+PiYgZnVuY3Rpb25E
ZWZpbml0aW9ucywgU3RyaW5nJiBuYW1lKQoreworICAgIGF1dG8gaXRlcmF0b3IgPSBzdGQ6OmZp
bmRfaWYoZnVuY3Rpb25EZWZpbml0aW9ucy5iZWdpbigpLCBmdW5jdGlvbkRlZmluaXRpb25zLmVu
ZCgpLCBbJl0oQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbikgewor
ICAgICAgICByZXR1cm4gZnVuY3Rpb25EZWZpbml0aW9uLmVudHJ5UG9pbnRUeXBlKCkgJiYgZnVu
Y3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSBuYW1lOworICAgIH0pOworICAgIGlmIChpdGVyYXRv
ciA9PSBmdW5jdGlvbkRlZmluaXRpb25zLmVuZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICByZXR1cm4gJippdGVyYXRvcjsKK307CisKK3N0YXRpYyBib29sIG1hdGNoTW9kZShCaW5k
aW5nVHlwZSBiaW5kaW5nVHlwZSwgQVNUOjpSZXNvdXJjZVNlbWFudGljOjpNb2RlIG1vZGUpCit7
CisgICAgc3dpdGNoIChiaW5kaW5nVHlwZSkgeworICAgIGNhc2UgQmluZGluZ1R5cGU6OlVuaWZv
cm1CdWZmZXI6CisgICAgICAgIHJldHVybiBtb2RlID09IEFTVDo6UmVzb3VyY2VTZW1hbnRpYzo6
TW9kZTo6QnVmZmVyOworICAgIGNhc2UgQmluZGluZ1R5cGU6OlNhbXBsZXI6CisgICAgICAgIHJl
dHVybiBtb2RlID09IEFTVDo6UmVzb3VyY2VTZW1hbnRpYzo6TW9kZTo6U2FtcGxlcjsKKyAgICBj
YXNlIEJpbmRpbmdUeXBlOjpUZXh0dXJlOgorICAgICAgICByZXR1cm4gbW9kZSA9PSBBU1Q6OlJl
c291cmNlU2VtYW50aWM6Ok1vZGU6OlRleHR1cmU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNT
RVJUKGJpbmRpbmdUeXBlID09IEJpbmRpbmdUeXBlOjpTdG9yYWdlQnVmZmVyKTsKKyAgICAgICAg
cmV0dXJuIG1vZGUgPT0gQVNUOjpSZXNvdXJjZVNlbWFudGljOjpNb2RlOjpVbm9yZGVyZWRBY2Nl
c3NWaWV3OworICAgIH0KK30KKworc3RhdGljIE9wdGlvbmFsPEhhc2hNYXA8QmluZGluZyosIHNp
emVfdD4+IG1hdGNoUmVzb3VyY2VzKFZlY3RvcjxFbnRyeVBvaW50SXRlbT4mIGVudHJ5UG9pbnRJ
dGVtcywgTGF5b3V0JiBsYXlvdXQsIFNoYWRlclN0YWdlIHNoYWRlclN0YWdlKQoreworICAgIEhh
c2hNYXA8QmluZGluZyosIHNpemVfdD4gcmVzdWx0OworICAgIEhhc2hTZXQ8c2l6ZV90PiBpdGVt
SW5kaWNlczsKKyAgICBpZiAoZW50cnlQb2ludEl0ZW1zLnNpemUoKSA9PSBzdGQ6Om51bWVyaWNf
bGltaXRzPHNpemVfdD46Om1heCgpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OyAvLyBX
b3JrIGFyb3VuZCB0aGUgZmFjdCB0aGF0IEhhc2hTZXQncyBrZXlzIGFyZSByZXN0cmljdGVkLgor
ICAgIGZvciAoYXV0byYgYmluZEdyb3VwIDogbGF5b3V0KSB7CisgICAgICAgIGF1dG8gc3BhY2Ug
PSBiaW5kR3JvdXAubmFtZTsKKyAgICAgICAgZm9yIChhdXRvJiBiaW5kaW5nIDogYmluZEdyb3Vw
LmJpbmRpbmdzKSB7CisgICAgICAgICAgICBpZiAoIWJpbmRpbmcudmlzaWJpbGl0eS5jb250YWlu
cyhzaGFkZXJTdGFnZSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGVudHJ5UG9pbnRJdGVtcy5zaXplKCk7ICsraSkgeworICAg
ICAgICAgICAgICAgIGF1dG8mIGl0ZW0gPSBlbnRyeVBvaW50SXRlbXNbaV07CisgICAgICAgICAg
ICAgICAgYXV0byYgc2VtYW50aWMgPSAqaXRlbS5zZW1hbnRpYzsKKyAgICAgICAgICAgICAgICBp
ZiAoIVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8QVNUOjpSZXNvdXJjZVNlbWFudGljPihzZW1hbnRp
YykpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGF1dG8m
IHJlc291cmNlU2VtYW50aWMgPSBXVEY6OmdldDxBU1Q6OlJlc291cmNlU2VtYW50aWM+KHNlbWFu
dGljKTsKKyAgICAgICAgICAgICAgICBpZiAoIW1hdGNoTW9kZShiaW5kaW5nLmJpbmRpbmdUeXBl
LCByZXNvdXJjZVNlbWFudGljLm1vZGUoKSkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgICAgIGlmIChiaW5kaW5nLm5hbWUgIT0gcmVzb3VyY2VTZW1hbnRpYy5p
bmRleCgpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBp
ZiAoc3BhY2UgIT0gcmVzb3VyY2VTZW1hbnRpYy5zcGFjZSgpKQorICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICByZXN1bHQuYWRkKCZiaW5kaW5nLCBpKTsKKyAg
ICAgICAgICAgICAgICBpdGVtSW5kaWNlcy5hZGQoaSArIDEpOyAvLyBXb3JrIGFyb3VuZCB0aGUg
ZmFjdCB0aGF0IEhhc2hTZXQncyBrZXlzIGFyZSByZXN0cmljdGVkLgorICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBlbnRyeVBvaW50
SXRlbXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgYXV0byYgaXRlbSA9IGVudHJ5UG9pbnRJdGVt
c1tpXTsKKyAgICAgICAgYXV0byYgc2VtYW50aWMgPSAqaXRlbS5zZW1hbnRpYzsKKyAgICAgICAg
aWYgKCFXVEY6OmhvbGRzX2FsdGVybmF0aXZlPEFTVDo6UmVzb3VyY2VTZW1hbnRpYz4oc2VtYW50
aWMpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmICghaXRlbUluZGljZXMuY29u
dGFpbnMoaSArIDEpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICB9CisK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgYm9vbCBtYXRjaElucHV0c091dHB1dHMo
VmVjdG9yPEVudHJ5UG9pbnRJdGVtPiYgdmVydGV4T3V0cHV0cywgVmVjdG9yPEVudHJ5UG9pbnRJ
dGVtPiYgZnJhZ21lbnRJbnB1dHMpCit7CisgICAgZm9yIChhdXRvJiBmcmFnbWVudElucHV0IDog
ZnJhZ21lbnRJbnB1dHMpIHsKKyAgICAgICAgaWYgKCFXVEY6OmhvbGRzX2FsdGVybmF0aXZlPEFT
VDo6U3RhZ2VJbk91dFNlbWFudGljPigqZnJhZ21lbnRJbnB1dC5zZW1hbnRpYykpCisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgYXV0byYgZnJhZ21lbnRJbnB1dFN0YWdlSW5PdXRTZW1h
bnRpYyA9IGRvd25jYXN0PEFTVDo6U3RhZ2VJbk91dFNlbWFudGljPigqZnJhZ21lbnRJbnB1dC5z
ZW1hbnRpYyk7CisgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICAgICAgZm9yIChhdXRv
JiB2ZXJ0ZXhPdXRwdXQgOiB2ZXJ0ZXhPdXRwdXRzKSB7CisgICAgICAgICAgICBpZiAoIVdURjo6
aG9sZHNfYWx0ZXJuYXRpdmU8QVNUOjpTdGFnZUluT3V0U2VtYW50aWM+KCp2ZXJ0ZXhPdXRwdXQu
c2VtYW50aWMpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgYXV0byYg
dmVydGV4T3V0cHV0U3RhZ2VJbk91dFNlbWFudGljID0gZG93bmNhc3Q8QVNUOjpTdGFnZUluT3V0
U2VtYW50aWM+KCp2ZXJ0ZXhPdXRwdXQuc2VtYW50aWMpOworICAgICAgICAgICAgaWYgKGZyYWdt
ZW50SW5wdXRTdGFnZUluT3V0U2VtYW50aWMuaW5kZXgoKSA9PSB2ZXJ0ZXhPdXRwdXRTdGFnZUlu
T3V0U2VtYW50aWMuaW5kZXgoKSkgeworICAgICAgICAgICAgICAgIGlmIChtYXRjaGVzKCpmcmFn
bWVudElucHV0LnVubmFtZWRUeXBlLCAqdmVydGV4T3V0cHV0LnVubmFtZWRUeXBlKSkgeworICAg
ICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFmb3VuZCkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIGlz
QWNjZXB0YWJsZUZvcm1hdChWZXJ0ZXhGb3JtYXQgdmVydGV4Rm9ybWF0LCBBU1Q6OlVubmFtZWRU
eXBlJiB1bm5hbWVkVHlwZSwgSW50cmluc2ljcyYgaW50cmluc2ljcykKK3sKKyAgICBzd2l0Y2gg
KHZlcnRleEZvcm1hdCkgeworICAgIGNhc2UgVmVydGV4Rm9ybWF0OjpGbG9hdFIzMkczMkIzMkEz
MjoKKyAgICAgICAgcmV0dXJuIG1hdGNoZXModW5uYW1lZFR5cGUsIGludHJpbnNpY3MuZmxvYXQ0
VHlwZSgpKTsKKyAgICBjYXNlIFZlcnRleEZvcm1hdDo6RmxvYXRSMzJHMzJCMzI6CisgICAgICAg
IHJldHVybiBtYXRjaGVzKHVubmFtZWRUeXBlLCBpbnRyaW5zaWNzLmZsb2F0M1R5cGUoKSk7Cisg
ICAgY2FzZSBWZXJ0ZXhGb3JtYXQ6OkZsb2F0UjMyRzMyOgorICAgICAgICByZXR1cm4gbWF0Y2hl
cyh1bm5hbWVkVHlwZSwgaW50cmluc2ljcy5mbG9hdDJUeXBlKCkpOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIEFTU0VSVCh2ZXJ0ZXhGb3JtYXQgPT0gVmVydGV4Rm9ybWF0OjpGbG9hdFIzMik7Cisg
ICAgICAgIHJldHVybiBtYXRjaGVzKHVubmFtZWRUeXBlLCBpbnRyaW5zaWNzLmZsb2F0VHlwZSgp
KTsKKyAgICB9Cit9CisKK3N0YXRpYyBPcHRpb25hbDxIYXNoTWFwPFZlcnRleEF0dHJpYnV0ZSos
IHNpemVfdD4+IG1hdGNoVmVydGV4QXR0cmlidXRlcyhWZWN0b3I8RW50cnlQb2ludEl0ZW0+JiB2
ZXJ0ZXhJbnB1dHMsIFZlcnRleEF0dHJpYnV0ZXMmIHZlcnRleEF0dHJpYnV0ZXMsIEludHJpbnNp
Y3MmIGludHJpbnNpY3MpCit7CisgICAgSGFzaE1hcDxWZXJ0ZXhBdHRyaWJ1dGUqLCBzaXplX3Q+
IHJlc3VsdDsKKyAgICBIYXNoU2V0PHNpemVfdD4gaXRlbUluZGljZXM7CisgICAgaWYgKHZlcnRl
eElucHV0cy5zaXplKCkgPT0gc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSkKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsgLy8gV29yayBhcm91bmQgdGhlIGZhY3QgdGhhdCBI
YXNoU2V0J3Mga2V5cyBhcmUgcmVzdHJpY3RlZC4KKyAgICBmb3IgKGF1dG8mIHZlcnRleEF0dHJp
YnV0ZSA6IHZlcnRleEF0dHJpYnV0ZXMpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCB2ZXJ0ZXhJbnB1dHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGF1dG8mIGl0ZW0gPSB2
ZXJ0ZXhJbnB1dHNbaV07CisgICAgICAgICAgICBhdXRvJiBzZW1hbnRpYyA9ICppdGVtLnNlbWFu
dGljOworICAgICAgICAgICAgaWYgKCFXVEY6OmhvbGRzX2FsdGVybmF0aXZlPEFTVDo6U3RhZ2VJ
bk91dFNlbWFudGljPihzZW1hbnRpYykpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICBhdXRvJiBzdGFnZUluT3V0U2VtYW50aWMgPSBXVEY6OmdldDxBU1Q6OlN0YWdlSW5P
dXRTZW1hbnRpYz4oc2VtYW50aWMpOworICAgICAgICAgICAgaWYgKHN0YWdlSW5PdXRTZW1hbnRp
Yy5pbmRleCgpICE9IHZlcnRleEF0dHJpYnV0ZS5uYW1lKQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgaWYgKCFpc0FjY2VwdGFibGVGb3JtYXQodmVydGV4QXR0cmlidXRl
LnZlcnRleEZvcm1hdCwgKml0ZW0udW5uYW1lZFR5cGUsIGludHJpbnNpY3MpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgICAgICByZXN1bHQuYWRkKCZ2ZXJ0
ZXhBdHRyaWJ1dGUsIGkpOworICAgICAgICAgICAgaXRlbUluZGljZXMuYWRkKGkgKyAxKTsgLy8g
V29yayBhcm91bmQgdGhlIGZhY3QgdGhhdCBIYXNoU2V0J3Mga2V5cyBhcmUgcmVzdHJpY3RlZC4K
KyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmVydGV4SW5w
dXRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGF1dG8mIGl0ZW0gPSB2ZXJ0ZXhJbnB1dHNbaV07
CisgICAgICAgIGF1dG8mIHNlbWFudGljID0gKml0ZW0uc2VtYW50aWM7CisgICAgICAgIGlmICgh
V1RGOjpob2xkc19hbHRlcm5hdGl2ZTxBU1Q6OlN0YWdlSW5PdXRTZW1hbnRpYz4oc2VtYW50aWMp
KQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmICghaXRlbUluZGljZXMuY29udGFp
bnMoaSArIDEpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICB9CisKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgYm9vbCBpc0FjY2VwdGFibGVGb3JtYXQoVGV4
dHVyZUZvcm1hdCB0ZXh0dXJlRm9ybWF0LCBBU1Q6OlVubmFtZWRUeXBlJiB1bm5hbWVkVHlwZSwg
SW50cmluc2ljcyYgaW50cmluc2ljcywgYm9vbCBpc0NvbG9yKQoreworICAgIGlmIChpc0NvbG9y
KSB7CisgICAgICAgIHN3aXRjaCAodGV4dHVyZUZvcm1hdCkgeworICAgICAgICBjYXNlIFRleHR1
cmVGb3JtYXQ6OlI4RzhCOEE4VW5vcm06CisgICAgICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6UjhH
OEI4QThVaW50OgorICAgICAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkI4RzhSOEE4VW5vcm06Cisg
ICAgICAgICAgICByZXR1cm4gbWF0Y2hlcyh1bm5hbWVkVHlwZSwgaW50cmluc2ljcy5mbG9hdDRU
eXBlKCkpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUKHRleHR1cmVGb3Jt
YXQgPT0gVGV4dHVyZUZvcm1hdDo6RDMyRmxvYXRTOFVpbnQpOworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB0ZXh0dXJlRm9ybWF0ID09IFRl
eHR1cmVGb3JtYXQ6OkQzMkZsb2F0UzhVaW50ICYmIG1hdGNoZXModW5uYW1lZFR5cGUsIGludHJp
bnNpY3MuZmxvYXRUeXBlKCkpOworfQorCitzdGF0aWMgT3B0aW9uYWw8SGFzaE1hcDxBdHRhY2ht
ZW50RGVzY3JpcHRvciosIHNpemVfdD4+IG1hdGNoQ29sb3JBdHRhY2htZW50cyhWZWN0b3I8RW50
cnlQb2ludEl0ZW0+JiBmcmFnbWVudE91dHB1dHMsIFZlY3RvcjxBdHRhY2htZW50RGVzY3JpcHRv
cj4mIGF0dGFjaG1lbnREZXNjcmlwdG9ycywgSW50cmluc2ljcyYgaW50cmluc2ljcykKK3sKKyAg
ICBIYXNoTWFwPEF0dGFjaG1lbnREZXNjcmlwdG9yKiwgc2l6ZV90PiByZXN1bHQ7CisgICAgSGFz
aFNldDxzaXplX3Q+IGl0ZW1JbmRpY2VzOworICAgIGlmIChhdHRhY2htZW50RGVzY3JpcHRvcnMu
c2l6ZSgpID09IHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkpCisgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7IC8vIFdvcmsgYXJvdW5kIHRoZSBmYWN0IHRoYXQgSGFzaFNldCdz
IGtleXMgYXJlIHJlc3RyaWN0ZWQuCisgICAgZm9yIChhdXRvJiBhdHRhY2htZW50RGVzY3JpcHRv
ciA6IGF0dGFjaG1lbnREZXNjcmlwdG9ycykgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGZyYWdtZW50T3V0cHV0cy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgYXV0byYgaXRl
bSA9IGZyYWdtZW50T3V0cHV0c1tpXTsKKyAgICAgICAgICAgIGF1dG8mIHNlbWFudGljID0gKml0
ZW0uc2VtYW50aWM7CisgICAgICAgICAgICBpZiAoIVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8QVNU
OjpTdGFnZUluT3V0U2VtYW50aWM+KHNlbWFudGljKSkKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIGF1dG8mIHN0YWdlSW5PdXRTZW1hbnRpYyA9IFdURjo6Z2V0PEFTVDo6
U3RhZ2VJbk91dFNlbWFudGljPihzZW1hbnRpYyk7CisgICAgICAgICAgICBpZiAoc3RhZ2VJbk91
dFNlbWFudGljLmluZGV4KCkgIT0gYXR0YWNobWVudERlc2NyaXB0b3IubmFtZSkKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmICghaXNBY2NlcHRhYmxlRm9ybWF0KGF0
dGFjaG1lbnREZXNjcmlwdG9yLnRleHR1cmVGb3JtYXQsICppdGVtLnVubmFtZWRUeXBlLCBpbnRy
aW5zaWNzLCB0cnVlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAg
ICAgICAgICAgcmVzdWx0LmFkZCgmYXR0YWNobWVudERlc2NyaXB0b3IsIGkpOworICAgICAgICAg
ICAgaXRlbUluZGljZXMuYWRkKGkgKyAxKTsgLy8gV29yayBhcm91bmQgdGhlIGZhY3QgdGhhdCBI
YXNoU2V0J3Mga2V5cyBhcmUgcmVzdHJpY3RlZC4KKyAgICAgICAgfQorICAgIH0KKworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgZnJhZ21lbnRPdXRwdXRzLnNpemUoKTsgKytpKSB7CisgICAg
ICAgIGF1dG8mIGl0ZW0gPSBmcmFnbWVudE91dHB1dHNbaV07CisgICAgICAgIGF1dG8mIHNlbWFu
dGljID0gKml0ZW0uc2VtYW50aWM7CisgICAgICAgIGlmICghV1RGOjpob2xkc19hbHRlcm5hdGl2
ZTxBU1Q6OlN0YWdlSW5PdXRTZW1hbnRpYz4oc2VtYW50aWMpKQorICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIGlmICghaXRlbUluZGljZXMuY29udGFpbnMoaSArIDEpKQorICAgICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CitzdGF0aWMgYm9vbCBtYXRjaERlcHRoQXR0YWNobWVudChWZWN0b3I8RW50cnlQb2ludEl0ZW0+
JiBmcmFnbWVudE91dHB1dHMsIE9wdGlvbmFsPEF0dGFjaG1lbnREZXNjcmlwdG9yPiYgZGVwdGhT
dGVuY2lsQXR0YWNobWVudERlc2NyaXB0b3IsIEludHJpbnNpY3MmIGludHJpbnNpY3MpCit7Cisg
ICAgYXV0byBpdGVyYXRvciA9IHN0ZDo6ZmluZF9pZihmcmFnbWVudE91dHB1dHMuYmVnaW4oKSwg
ZnJhZ21lbnRPdXRwdXRzLmVuZCgpLCBbJl0oRW50cnlQb2ludEl0ZW0mIGl0ZW0pIHsKKyAgICAg
ICAgYXV0byYgc2VtYW50aWMgPSAqaXRlbS5zZW1hbnRpYzsKKyAgICAgICAgaWYgKCFXVEY6Omhv
bGRzX2FsdGVybmF0aXZlPEFTVDo6QnVpbHRJblNlbWFudGljPihzZW1hbnRpYykpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGF1dG8mIGJ1aWx0SW5TZW1hbnRpYyA9IFdURjo6
Z2V0PEFTVDo6QnVpbHRJblNlbWFudGljPihzZW1hbnRpYyk7CisgICAgICAgIHJldHVybiBidWls
dEluU2VtYW50aWMudmFyaWFibGUoKSA9PSBBU1Q6OkJ1aWx0SW5TZW1hbnRpYzo6VmFyaWFibGU6
OlNWRGVwdGg7CisgICAgfSk7CisgICAgaWYgKGl0ZXJhdG9yID09IGZyYWdtZW50T3V0cHV0cy5l
bmQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoZGVwdGhTdGVuY2lsQXR0YWNo
bWVudERlc2NyaXB0b3IpIHsKKyAgICAgICAgQVNTRVJUKCFkZXB0aFN0ZW5jaWxBdHRhY2htZW50
RGVzY3JpcHRvci0+bmFtZSk7CisgICAgICAgIHJldHVybiBpc0FjY2VwdGFibGVGb3JtYXQoZGVw
dGhTdGVuY2lsQXR0YWNobWVudERlc2NyaXB0b3ItPnRleHR1cmVGb3JtYXQsICppdGVyYXRvci0+
dW5uYW1lZFR5cGUsIGludHJpbnNpY3MsIGZhbHNlKTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNl
OworfQorCitPcHRpb25hbDxNYXRjaGVkUmVuZGVyU2VtYW50aWNzPiBtYXRjaFNlbWFudGljcyhQ
cm9ncmFtJiBwcm9ncmFtLCBSZW5kZXJQaXBlbGluZURlc2NyaXB0b3ImIHJlbmRlclBpcGVsaW5l
RGVzY3JpcHRvcikKK3sKKyAgICBhdXRvIHZlcnRleFNoYWRlckVudHJ5UG9pbnQgPSBmaW5kRW50
cnlQb2ludChwcm9ncmFtLmZ1bmN0aW9uRGVmaW5pdGlvbnMoKSwgcmVuZGVyUGlwZWxpbmVEZXNj
cmlwdG9yLnZlcnRleEVudHJ5UG9pbnROYW1lKTsKKyAgICBhdXRvIGZyYWdtZW50U2hhZGVyRW50
cnlQb2ludCA9IGZpbmRFbnRyeVBvaW50KHByb2dyYW0uZnVuY3Rpb25EZWZpbml0aW9ucygpLCBy
ZW5kZXJQaXBlbGluZURlc2NyaXB0b3IuZnJhZ21lbnRFbnRyeVBvaW50TmFtZSk7CisgICAgaWYg
KCF2ZXJ0ZXhTaGFkZXJFbnRyeVBvaW50IHx8ICFmcmFnbWVudFNoYWRlckVudHJ5UG9pbnQpCisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgYXV0byB2ZXJ0ZXhTaGFkZXJFbnRyeVBv
aW50SXRlbXMgPSBnYXRoZXJFbnRyeVBvaW50SXRlbXMocHJvZ3JhbS5pbnRyaW5zaWNzKCksICp2
ZXJ0ZXhTaGFkZXJFbnRyeVBvaW50KTsKKyAgICBhdXRvIGZyYWdtZW50U2hhZGVyRW50cnlQb2lu
dEl0ZW1zID0gZ2F0aGVyRW50cnlQb2ludEl0ZW1zKHByb2dyYW0uaW50cmluc2ljcygpLCAqZnJh
Z21lbnRTaGFkZXJFbnRyeVBvaW50KTsKKyAgICBpZiAoIXZlcnRleFNoYWRlckVudHJ5UG9pbnRJ
dGVtcyB8fCAhZnJhZ21lbnRTaGFkZXJFbnRyeVBvaW50SXRlbXMpCisgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CisgICAgYXV0byB2ZXJ0ZXhTaGFkZXJSZXNvdXJjZU1hcCA9IG1hdGNoUmVz
b3VyY2VzKHZlcnRleFNoYWRlckVudHJ5UG9pbnRJdGVtcy0+aW5wdXRzLCByZW5kZXJQaXBlbGlu
ZURlc2NyaXB0b3IubGF5b3V0LCBTaGFkZXJTdGFnZTo6VmVydGV4KTsKKyAgICBhdXRvIGZyYWdt
ZW50U2hhZGVyUmVzb3VyY2VNYXAgPSBtYXRjaFJlc291cmNlcyhmcmFnbWVudFNoYWRlckVudHJ5
UG9pbnRJdGVtcy0+aW5wdXRzLCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IubGF5b3V0LCBTaGFk
ZXJTdGFnZTo6RnJhZ21lbnQpOworICAgIGlmICghdmVydGV4U2hhZGVyUmVzb3VyY2VNYXAgfHwg
IWZyYWdtZW50U2hhZGVyUmVzb3VyY2VNYXApCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CisgICAgaWYgKCFtYXRjaElucHV0c091dHB1dHModmVydGV4U2hhZGVyRW50cnlQb2ludEl0ZW1z
LT5vdXRwdXRzLCBmcmFnbWVudFNoYWRlckVudHJ5UG9pbnRJdGVtcy0+aW5wdXRzKSkKKyAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBhdXRvIG1hdGNoZWRWZXJ0ZXhBdHRyaWJ1dGVz
ID0gbWF0Y2hWZXJ0ZXhBdHRyaWJ1dGVzKHZlcnRleFNoYWRlckVudHJ5UG9pbnRJdGVtcy0+aW5w
dXRzLCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IudmVydGV4QXR0cmlidXRlcywgcHJvZ3JhbS5p
bnRyaW5zaWNzKCkpOworICAgIGlmICghbWF0Y2hlZFZlcnRleEF0dHJpYnV0ZXMpCisgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgYXV0byBtYXRjaGVkQ29sb3JBdHRhY2htZW50cyA9
IG1hdGNoQ29sb3JBdHRhY2htZW50cyhmcmFnbWVudFNoYWRlckVudHJ5UG9pbnRJdGVtcy0+b3V0
cHV0cywgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yLmF0dGFjaG1lbnRzU3RhdGVEZXNjcmlwdG9y
LmF0dGFjaG1lbnREZXNjcmlwdG9ycywgcHJvZ3JhbS5pbnRyaW5zaWNzKCkpOworICAgIGlmICgh
bWF0Y2hlZENvbG9yQXR0YWNobWVudHMpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cisg
ICAgaWYgKCFtYXRjaERlcHRoQXR0YWNobWVudChmcmFnbWVudFNoYWRlckVudHJ5UG9pbnRJdGVt
cy0+b3V0cHV0cywgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yLmF0dGFjaG1lbnRzU3RhdGVEZXNj
cmlwdG9yLmRlcHRoU3RlbmNpbEF0dGFjaG1lbnREZXNjcmlwdG9yLCBwcm9ncmFtLmludHJpbnNp
Y3MoKSkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIHt7IHZlcnRl
eFNoYWRlckVudHJ5UG9pbnQsIGZyYWdtZW50U2hhZGVyRW50cnlQb2ludCwgKnZlcnRleFNoYWRl
ckVudHJ5UG9pbnRJdGVtcywgKmZyYWdtZW50U2hhZGVyRW50cnlQb2ludEl0ZW1zLCAqdmVydGV4
U2hhZGVyUmVzb3VyY2VNYXAsICpmcmFnbWVudFNoYWRlclJlc291cmNlTWFwLCAqbWF0Y2hlZFZl
cnRleEF0dHJpYnV0ZXMsICptYXRjaGVkQ29sb3JBdHRhY2htZW50cyB9fTsKK30KKworT3B0aW9u
YWw8TWF0Y2hlZENvbXB1dGVTZW1hbnRpY3M+IG1hdGNoU2VtYW50aWNzKFByb2dyYW0mIHByb2dy
YW0sIENvbXB1dGVQaXBlbGluZURlc2NyaXB0b3ImIGNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3Ip
Cit7CisgICAgYXV0byBlbnRyeVBvaW50ID0gZmluZEVudHJ5UG9pbnQocHJvZ3JhbS5mdW5jdGlv
bkRlZmluaXRpb25zKCksIGNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IuZW50cnlQb2ludE5hbWUp
OworICAgIGlmICghZW50cnlQb2ludCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAg
ICBhdXRvIGVudHJ5UG9pbnRJdGVtcyA9IGdhdGhlckVudHJ5UG9pbnRJdGVtcyhwcm9ncmFtLmlu
dHJpbnNpY3MoKSwgKmVudHJ5UG9pbnQpOworICAgIGlmICghZW50cnlQb2ludEl0ZW1zKQorICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIEFTU0VSVChlbnRyeVBvaW50SXRlbXMtPm91
dHB1dHMuaXNFbXB0eSgpKTsKKyAgICBhdXRvIHJlc291cmNlTWFwID0gbWF0Y2hSZXNvdXJjZXMo
ZW50cnlQb2ludEl0ZW1zLT5pbnB1dHMsIGNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IubGF5b3V0
LCBTaGFkZXJTdGFnZTo6Q29tcHV0ZSk7CisgICAgaWYgKCFyZXNvdXJjZU1hcCkKKyAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4ge3sgZW50cnlQb2ludCwgKmVudHJ5UG9p
bnRJdGVtcywgKnJlc291cmNlTWFwIH19OworfQorCit9IC8vIG5hbWVzcGFjZSBXSExTTAorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR1BVKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTZW1hbnRpY01h
dGNoZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU2VtYW50
aWNNYXRjaGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGZmOGM4ZDEzZmYwY2Q3NzRlMjY1NGRlMWNmNmYwY2Yy
NTgzODY2NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMU2VtYW50aWNNYXRjaGVyLmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldITFNM
R2F0aGVyRW50cnlQb2ludEl0ZW1zLmgiCisjaW5jbHVkZSAiV0hMU0xQaXBlbGluZURlc2NyaXB0
b3IuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCitjbGFz
cyBQcm9ncmFtOworCitzdHJ1Y3QgTWF0Y2hlZFJlbmRlclNlbWFudGljcyB7CisgICAgQVNUOjpG
dW5jdGlvbkRlZmluaXRpb24qIHZlcnRleFNoYWRlcjsKKyAgICBBU1Q6OkZ1bmN0aW9uRGVmaW5p
dGlvbiogZnJhZ21lbnRTaGFkZXI7CisgICAgRW50cnlQb2ludEl0ZW1zIHZlcnRleFNoYWRlckVu
dHJ5UG9pbnRJdGVtczsKKyAgICBFbnRyeVBvaW50SXRlbXMgZnJhZ21lbnRTaGFkZXJFbnRyeVBv
aW50SXRlbXM7CisgICAgSGFzaE1hcDxCaW5kaW5nKiwgc2l6ZV90PiB2ZXJ0ZXhTaGFkZXJSZXNv
dXJjZU1hcDsKKyAgICBIYXNoTWFwPEJpbmRpbmcqLCBzaXplX3Q+IGZyYWdtZW50U2hhZGVyUmVz
b3VyY2VNYXA7CisgICAgSGFzaE1hcDxWZXJ0ZXhBdHRyaWJ1dGUqLCBzaXplX3Q+IG1hdGNoZWRW
ZXJ0ZXhBdHRyaWJ1dGVzOworICAgIEhhc2hNYXA8QXR0YWNobWVudERlc2NyaXB0b3IqLCBzaXpl
X3Q+IG1hdGNoZWRDb2xvckF0dGFjaG1lbnRzOworfTsKKworT3B0aW9uYWw8TWF0Y2hlZFJlbmRl
clNlbWFudGljcz4gbWF0Y2hTZW1hbnRpY3MoUHJvZ3JhbSYsIFJlbmRlclBpcGVsaW5lRGVzY3Jp
cHRvciYpOworCitzdHJ1Y3QgTWF0Y2hlZENvbXB1dGVTZW1hbnRpY3MgeworICAgIEFTVDo6RnVu
Y3Rpb25EZWZpbml0aW9uKiBzaGFkZXI7CisgICAgRW50cnlQb2ludEl0ZW1zIGVudHJ5UG9pbnRJ
dGVtczsKKyAgICBIYXNoTWFwPEJpbmRpbmcqLCBzaXplX3Q+IHJlc291cmNlTWFwOworfTsKKwor
T3B0aW9uYWw8TWF0Y2hlZENvbXB1dGVTZW1hbnRpY3M+IG1hdGNoU2VtYW50aWNzKFByb2dyYW0m
LCBDb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yJik7CisKK30gLy8gbmFtZXNwYWNlIFdITFNMCisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJHUFUpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJj
ZXMudHh0CmluZGV4IDQwZmE0NzRhNDRlYjhkMmVhYjgwYjA5ODZjNWVlYmJmMGQ1MDUxMWIuLjI3
NDlkNzRhMjNhMjI5NDc2Nzk3YzZjNzliMDhiOGU2NjYxYzRhMmQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBA
IC0zMjQsNiArMzI0LDcgQEAgTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIu
Y3BwCiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmVPdmVybG9hZEltcGwuY3BwCiBN
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlY3Vyc2lvbkNoZWNrZXIuY3BwCiBNb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTFZpc2l0b3IuY3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFNl
bWFudGljTWF0Y2hlci5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTGl0ZXJhbFR5cGVD
aGVja2VyLmNwcAogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xIaWdoWm9tYmllRmluZGVyLmNw
cAogTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xUeXBlTmFtZXIuY3BwCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYzNk
OGZkYjA0NTYzNDBjOWNjZjA0YTAyZjdhZjE0Mzk4ODY0MmM2NC4uZGQ2MTk3MzdjZTk1ZGYyYTk1
ZjhlZTQzNTUxZGMwOWFhNTk2NGZhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTMzOTEsNiArMTMzOTEsOSBAQAogCQlDMjM0
QTlCNjIxRTkyQ0MwMDAzQzk4NEQgLyogV0hMU0xJbnRyaW5zaWNzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdITFNMSW50cmluc2ljcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjM0QTlC
NzIxRTkyQ0MxMDAzQzk4NEQgLyogV0hMU0xJbnRyaW5zaWNzLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFdITFNMSW50cmluc2ljcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMy
NDU4RTYxMUZFODk3OUUwMDU5NDc1OSAvKiBGb250Q2FjaGVDb3JlVGV4dC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBGb250Q2FjaGVDb3JlVGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlD
MjRBNTdBRjIxRkFENTNGMDA0QzZERDEgLyogV0hMU0xQaXBlbGluZURlc2NyaXB0b3IuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV0hMU0xQaXBlbGluZURlc2NyaXB0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQzI0QTU3QjIyMUZCOEREQTAwNEM2REQxIC8qIFdITFNMU2VtYW50aWNNYXRj
aGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMU2VtYW50aWNNYXRjaGVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzI0QTU3QjMyMUZCOEREQTAwNEM2REQxIC8qIFdI
TFNMU2VtYW50aWNNYXRjaGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMU2VtYW50aWNNYXRjaGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyNjAxN0ExMUM3MkRDOTkwMEY3NEEx
NiAvKiBDU1NGb250RmFjZVNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBDU1NGb250RmFjZVNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMy
NjAxN0EyMUM3MkRDOTkwMEY3NEExNiAvKiBDU1NGb250RmFjZVNldC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBDU1NGb250RmFjZVNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlDMjgwODMzQzFDNkRCMTk0MDAxNDUxQjYgLyogRm9udEZhY2UuaWRsICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dDsgcGF0aCA9IEZvbnRGYWNlLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTI1NjAyLDYgKzI1NjA1LDcgQEAKIAkJCQlDMjM0QTk4QzIxRTg4ODNFMDAzQzk4NEQg
LyogV0hMU0xOYW1lUmVzb2x2ZXIuaCAqLywKIAkJCQlDMjFCRjczNzIxQ0Q4QTAyMDAyMjc5Nzkg
LyogV0hMU0xQYXJzZXIuY3BwICovLAogCQkJCUMyMUJGNzM4MjFDRDhBMDMwMDIyNzk3OSAvKiBX
SExTTFBhcnNlci5oICovLAorCQkJCUMyNEE1N0FGMjFGQUQ1M0YwMDRDNkREMSAvKiBXSExTTFBp
cGVsaW5lRGVzY3JpcHRvci5oICovLAogCQkJCUMyMUJGNzNBMjFDRDhENzAwMDIyNzk3OSAvKiBX
SExTTFByb2dyYW0uaCAqLywKIAkJCQkxQ0EwQzJFMDIxRUVCNUY1MDBBMTE4NjAgLyogV0hMU0xS
ZWN1cnNpb25DaGVja2VyLmNwcCAqLywKIAkJCQkxQ0EwQzJERTIxRUVCNUY0MDBBMTE4NjAgLyog
V0hMU0xSZWN1cnNpb25DaGVja2VyLmggKi8sCkBAIC0yNTYxMCw2ICsyNTYxNCw4IEBACiAJCQkJ
QzIzNEE5OTkyMUU5MEYyOTAwM0M5ODREIC8qIFdITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5jcHAg
Ki8sCiAJCQkJQzIzNEE5OTcyMUU5MEYyODAwM0M5ODREIC8qIFdITFNMUmVzb2x2ZU92ZXJsb2Fk
SW1wbC5oICovLAogCQkJCUMyMzRBOTlEMjFFOTEwQkQwMDNDOTg0RCAvKiBXSExTTFJlc29sdmlu
Z1R5cGUuaCAqLywKKwkJCQlDMjRBNTdCMjIxRkI4RERBMDA0QzZERDEgLyogV0hMU0xTZW1hbnRp
Y01hdGNoZXIuY3BwICovLAorCQkJCUMyNEE1N0IzMjFGQjhEREEwMDRDNkREMSAvKiBXSExTTFNl
bWFudGljTWF0Y2hlci5oICovLAogCQkJCUMyMUJGNzQ1MjFDRDk2OTgwMDIyNzk3OSAvKiBXSExT
TFN0YW5kYXJkTGlicmFyeS50eHQgKi8sCiAJCQkJMUNFQ0IzQTkyMUYyQjY3MzAwRjQ0NTQyIC8q
IFdITFNMU3RhdGVtZW50QmVoYXZpb3JDaGVja2VyLmNwcCAqLywKIAkJCQkxQ0VDQjNBODIxRjJC
NjczMDBGNDQ1NDIgLyogV0hMU0xTdGF0ZW1lbnRCZWhhdmlvckNoZWNrZXIuaCAqLywK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>360298</attachid>
            <date>2019-01-27 10:02:33 -0800</date>
            <delta_ts>2019-01-27 22:45:33 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-193877-20190127100232.patch</filename>
            <type>text/plain</type>
            <size>65772</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQwNDU2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTExMmMzZmRiNmIyOTI3
ODc0NmEyNjE2MzAyNjljMGUxMWQ2MTcwZi4uMTA0MTcwN2I1NTRlNmY5Njg3NjljMzA3NjIxMjNh
NDA1YTdkYWQ3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY2IEBACisyMDE5LTAxLTI2ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dITFNMXSBQ
YWNrIGFuZCB1bnBhY2sgZGF0YSBhdCBlbnRyeSBwb2ludHMgYW5kIGV4aXQgcG9pbnRzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTM4NzcKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMg
KE9PUFMhKS4KKworICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRW50
cnlQb2ludFNjYWZmb2xkaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6
YXR0cmlidXRlRm9yU2VtYW50aWMpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpF
bnRyeVBvaW50U2NhZmZvbGRpbmc6OkVudHJ5UG9pbnRTY2FmZm9sZGluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpXSExTTDo6TWV0YWw6OkVudHJ5UG9pbnRTY2FmZm9sZGluZzo6cmVzb3VyY2VIZWxw
ZXJUeXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkVudHJ5UG9pbnRTY2Fm
Zm9sZGluZzo6cmVzb3VyY2VTaWduYXR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1l
dGFsOjpFbnRyeVBvaW50U2NhZmZvbGRpbmc6OmJ1aWx0SW5zU2lnbmF0dXJlKToKKyAgICAgICAg
KFdlYkNvcmU6OldITFNMOjpNZXRhbDo6RW50cnlQb2ludFNjYWZmb2xkaW5nOjptYW5nbGVkSW5w
dXRQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6RW50cnlQb2ludFNjYWZm
b2xkaW5nOjptYW5nbGVkT3V0cHV0UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0
YWw6OkVudHJ5UG9pbnRTY2FmZm9sZGluZzo6dW5wYWNrUmVzb3VyY2VzQW5kTmFtZWRCdWlsdElu
cyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OlZlcnRleEVudHJ5UG9pbnRTY2Fm
Zm9sZGluZzo6VmVydGV4RW50cnlQb2ludFNjYWZmb2xkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OldITFNMOjpNZXRhbDo6VmVydGV4RW50cnlQb2ludFNjYWZmb2xkaW5nOjpoZWxwZXJUeXBlcyk6
CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OlZlcnRleEVudHJ5UG9pbnRTY2FmZm9s
ZGluZzo6c2lnbmF0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6VmVydGV4
RW50cnlQb2ludFNjYWZmb2xkaW5nOjp1bnBhY2spOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6
Ok1ldGFsOjpWZXJ0ZXhFbnRyeVBvaW50U2NhZmZvbGRpbmc6OnBhY2spOgorICAgICAgICAoV2Vi
Q29yZTo6V0hMU0w6Ok1ldGFsOjpGcmFnbWVudEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6RnJhZ21l
bnRFbnRyeVBvaW50U2NhZmZvbGRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFs
OjpGcmFnbWVudEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6aGVscGVyVHlwZXMpOgorICAgICAgICAo
V2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpGcmFnbWVudEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6c2ln
bmF0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6RnJhZ21lbnRFbnRyeVBv
aW50U2NhZmZvbGRpbmc6OnVucGFjayk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6
OkZyYWdtZW50RW50cnlQb2ludFNjYWZmb2xkaW5nOjpwYWNrKToKKyAgICAgICAgKFdlYkNvcmU6
OldITFNMOjpNZXRhbDo6Q29tcHV0ZUVudHJ5UG9pbnRTY2FmZm9sZGluZzo6Q29tcHV0ZUVudHJ5
UG9pbnRTY2FmZm9sZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkNvbXB1
dGVFbnRyeVBvaW50U2NhZmZvbGRpbmc6OmhlbHBlclR5cGVzKToKKyAgICAgICAgKFdlYkNvcmU6
OldITFNMOjpNZXRhbDo6Q29tcHV0ZUVudHJ5UG9pbnRTY2FmZm9sZGluZzo6c2lnbmF0dXJlKToK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6Q29tcHV0ZUVudHJ5UG9pbnRTY2FmZm9s
ZGluZzo6dW5wYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6Q29tcHV0ZUVu
dHJ5UG9pbnRTY2FmZm9sZGluZzo6cGFjayk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0
YWw6OkVudHJ5UG9pbnRTY2FmZm9sZGluZzo6aGVscGVyVHlwZXMpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpFbnRyeVBvaW50U2NhZmZvbGRpbmc6OnNpZ25hdHVy
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkVudHJ5UG9pbnRT
Y2FmZm9sZGluZzo6dW5wYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpN
ZXRhbDo6RW50cnlQb2ludFNjYWZmb2xkaW5nOjpwYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKiBN
b2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEVudHJ5UG9pbnRTY2FmZm9sZGluZy5oOgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpFbnRyeVBvaW50U2NhZmZvbGRpbmc6OnBh
cmFtZXRlclZhcmlhYmxlcyk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwv
V0hMU0xGdW5jdGlvbldyaXRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6
OkZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6RnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6bWV0YWxGdW5jdGlvbnMpOgorICAgICAgICAq
IE1vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRnVuY3Rpb25Xcml0ZXIuaDoKKyAgICAg
ICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE1ldGFsQ29kZUdlbmVyYXRvci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OmdlbmVyYXRlTWV0YWxDb2RlKToK
KyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE1ldGFsQ29kZUdlbmVy
YXRvci5oOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW50cmluc2ljcy5o
OgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkludHJpbnNpY3M6OmZsb2F0MlR5cGUgY29uc3Qp
OgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGlwZWxpbmVEZXNjcmlwdG9y
Lmg6IEFkZGVkLgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU2VtYW50aWNN
YXRjaGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6ZmluZEVudHJ5UG9p
bnQpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Om1hdGNoTW9kZSk6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6bWF0Y2hSZXNvdXJjZXMpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Om1h
dGNoSW5wdXRzT3V0cHV0cyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6aXNBY2NlcHRhYmxl
Rm9ybWF0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjptYXRjaFZlcnRleEF0dHJpYnV0ZXMp
OgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Om1hdGNoQ29sb3JBdHRhY2htZW50cyk6CisgICAg
ICAgIChXZWJDb3JlOjpXSExTTDo6bWF0Y2hEZXB0aEF0dGFjaG1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6V0hMU0w6Om1hdGNoU2VtYW50aWNzKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTFNlbWFudGljTWF0Y2hlci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEVudHJ5UG9pbnRTY2FmZm9sZGluZy5jcHAu
CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorCiAyMDE5LTAxLTI0ICBDaGFybGVzIFZhemFjICA8Y3ZhemFjQGFrYW1h
aS5jb20+CiAKICAgICAgICAgSW1wbGVtZW50IFBlcmZvcm1hbmNlT2JzZXJ2ZXIuc3VwcG9ydGVk
RW50cnlUeXBlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvTWV0YWwvV0hMU0xFbnRyeVBvaW50U2NhZmZvbGRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xFbnRyeVBvaW50U2NhZmZvbGRpbmcuY3Bw
CmluZGV4IDQ4ZmNmMjM1ZjI1MTY0MGM1YTc4MjIxMGU5ZDI2ODRmNGVlM2MwN2QuLjM5Nzk1MjVh
MTZmYzE3ZjE1OTQxNDZiZDc4OTMzNzk5MjhlZWNmNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRW50cnlQb2ludFNjYWZmb2xkaW5n
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExT
TEVudHJ5UG9pbnRTY2FmZm9sZGluZy5jcHAKQEAgLTI4LDcgKzI4LDE3IEBACiAKICNpZiBFTkFC
TEUoV0VCR1BVKQogCisjaW5jbHVkZSAiV0hMU0xCdWlsdEluU2VtYW50aWMuaCIKKyNpbmNsdWRl
ICJXSExTTEZ1bmN0aW9uRGVmaW5pdGlvbi5oIgogI2luY2x1ZGUgIldITFNMR2F0aGVyRW50cnlQ
b2ludEl0ZW1zLmgiCisjaW5jbHVkZSAiV0hMU0xQaXBlbGluZURlc2NyaXB0b3IuaCIKKyNpbmNs
dWRlICJXSExTTFJlc291cmNlU2VtYW50aWMuaCIKKyNpbmNsdWRlICJXSExTTFN0YWdlSW5PdXRT
ZW1hbnRpYy5oIgorI2luY2x1ZGUgIldITFNMU3RydWN0dXJlRGVmaW5pdGlvbi5oIgorI2luY2x1
ZGUgIldITFNMVHlwZU5hbWVyLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IApAQCAtMzYsMzUgKzQ2LDQ1OSBAQCBuYW1lc3BhY2UgV0hMU0wgewogCiBuYW1lc3BhY2UgTWV0
YWwgewogCi1FbnRyeVBvaW50U2NhZmZvbGRpbmc6OkVudHJ5UG9pbnRTY2FmZm9sZGluZyhBU1Q6
OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0aW9uLCBJbnRyaW5zaWNzJiBpbnRy
aW5zaWNzKQotICAgIDogbV9mdW5jdGlvbkRlZmluaXRpb24oJmZ1bmN0aW9uRGVmaW5pdGlvbikK
LSAgICAsIG1faW50cmluc2ljcygmaW50cmluc2ljcykKK3N0YXRpYyBTdHJpbmcgYXR0cmlidXRl
Rm9yU2VtYW50aWMoQVNUOjpCdWlsdEluU2VtYW50aWMmIGJ1aWx0SW5TZW1hbnRpYykKIHsKLSAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCi0gICAgZ2F0aGVyRW50cnlQb2ludEl0ZW1zKCpt
X2ludHJpbnNpY3MsICptX2Z1bmN0aW9uRGVmaW5pdGlvbik7CisgICAgc3dpdGNoIChidWlsdElu
U2VtYW50aWMudmFyaWFibGUoKSkgeworICAgIGNhc2UgQVNUOjpCdWlsdEluU2VtYW50aWM6OlZh
cmlhYmxlOjpTVkluc3RhbmNlSUQ6CisgICAgICAgIHJldHVybiAiW1tpbnN0YW5jZV9pZF1dIl9z
dHI7CisgICAgY2FzZSBBU1Q6OkJ1aWx0SW5TZW1hbnRpYzo6VmFyaWFibGU6OlNWVmVydGV4SUQ6
CisgICAgICAgIHJldHVybiAiW1t2ZXJ0ZXhfaWRdXSJfc3RyOworICAgIGNhc2UgQVNUOjpCdWls
dEluU2VtYW50aWM6OlZhcmlhYmxlOjpQU2l6ZToKKyAgICAgICAgcmV0dXJuICJbW3BvaW50X3Np
emVdXSJfc3RyOworICAgIGNhc2UgQVNUOjpCdWlsdEluU2VtYW50aWM6OlZhcmlhYmxlOjpTVlBv
c2l0aW9uOgorICAgICAgICByZXR1cm4gIltbcG9zaXRpb25dXSJfc3RyOworICAgIGNhc2UgQVNU
OjpCdWlsdEluU2VtYW50aWM6OlZhcmlhYmxlOjpTVklzRnJvbnRGYWNlOgorICAgICAgICByZXR1
cm4gIltbZnJvbnRfZmFjaW5nXV0iX3N0cjsKKyAgICBjYXNlIEFTVDo6QnVpbHRJblNlbWFudGlj
OjpWYXJpYWJsZTo6U1ZTYW1wbGVJbmRleDoKKyAgICAgICAgcmV0dXJuICJbW3NhbXBsZV9pZF1d
Il9zdHI7CisgICAgY2FzZSBBU1Q6OkJ1aWx0SW5TZW1hbnRpYzo6VmFyaWFibGU6OlNWSW5uZXJD
b3ZlcmFnZToKKyAgICAgICAgcmV0dXJuICJbW3NhbXBsZV9tYXNrXV0iX3N0cjsKKyAgICBjYXNl
IEFTVDo6QnVpbHRJblNlbWFudGljOjpWYXJpYWJsZTo6U1ZUYXJnZXQ6CisgICAgICAgIHJldHVy
biBtYWtlU3RyaW5nKCJbW2NvbG9yKCIsICpidWlsdEluU2VtYW50aWMudGFyZ2V0SW5kZXgoKSwg
IildXSIpOworICAgIGNhc2UgQVNUOjpCdWlsdEluU2VtYW50aWM6OlZhcmlhYmxlOjpTVkRlcHRo
OgorICAgICAgICByZXR1cm4gIltbZGVwdGgoYW55KV1dIl9zdHI7CisgICAgY2FzZSBBU1Q6OkJ1
aWx0SW5TZW1hbnRpYzo6VmFyaWFibGU6OlNWQ292ZXJhZ2U6CisgICAgICAgIHJldHVybiAiW1tz
YW1wbGVfbWFza11dIl9zdHI7CisgICAgY2FzZSBBU1Q6OkJ1aWx0SW5TZW1hbnRpYzo6VmFyaWFi
bGU6OlNWRGlzcGF0Y2hUaHJlYWRJRDoKKyAgICAgICAgcmV0dXJuICJbW3RocmVhZF9wb3NpdGlv
bl9pbl9ncmlkXV0iX3N0cjsKKyAgICBjYXNlIEFTVDo6QnVpbHRJblNlbWFudGljOjpWYXJpYWJs
ZTo6U1ZHcm91cElEOgorICAgICAgICByZXR1cm4gIltbdGhyZWFkZ3JvdXBfcG9zaXRpb25faW5f
Z3JpZF1dIl9zdHI7CisgICAgY2FzZSBBU1Q6OkJ1aWx0SW5TZW1hbnRpYzo6VmFyaWFibGU6OlNW
R3JvdXBJbmRleDoKKyAgICAgICAgcmV0dXJuICJbW3RocmVhZF9pbmRleF9pbl90aHJlYWRncm91
cF1dIl9zdHI7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUKGJ1aWx0SW5TZW1hbnRpYy52
YXJpYWJsZSgpID09IEFTVDo6QnVpbHRJblNlbWFudGljOjpWYXJpYWJsZTo6U1ZHcm91cFRocmVh
ZElEKTsKKyAgICAgICAgcmV0dXJuICJbW3RocmVhZF9wb3NpdGlvbl9pbl90aHJlYWRncm91cF1d
Il9zdHI7CisgICAgfQogfQogCi1TdHJpbmcgRW50cnlQb2ludFNjYWZmb2xkaW5nOjpoZWxwZXJU
eXBlcygpCitzdGF0aWMgU3RyaW5nIGF0dHJpYnV0ZUZvclNlbWFudGljKEFTVDo6U2VtYW50aWMm
IHNlbWFudGljKQogewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KLSAgICByZXR1cm4g
U3RyaW5nKCk7CisgICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8QVNUOjpCdWlsdEluU2Vt
YW50aWM+KHNlbWFudGljKSkKKyAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZUZvclNlbWFudGljKFdU
Rjo6Z2V0PEFTVDo6QnVpbHRJblNlbWFudGljPihzZW1hbnRpYykpOworICAgIGF1dG8mIHN0YWdl
SW5PdXRTZW1hbnRpYyA9IFdURjo6Z2V0PEFTVDo6U3RhZ2VJbk91dFNlbWFudGljPihzZW1hbnRp
Yyk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoIltbdXNlcigiLCBzdGFnZUluT3V0U2VtYW50aWMu
aW5kZXgoKSwgIildXSIpOwogfQogCi1TdHJpbmcgRW50cnlQb2ludFNjYWZmb2xkaW5nOjpzaWdu
YXR1cmUoKQorRW50cnlQb2ludFNjYWZmb2xkaW5nOjpFbnRyeVBvaW50U2NhZmZvbGRpbmcoQVNU
OjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbiwgSW50cmluc2ljcyYgaW50
cmluc2ljcywgVHlwZU5hbWVyJiB0eXBlTmFtZXIsIEVudHJ5UG9pbnRJdGVtcyYgZW50cnlQb2lu
dEl0ZW1zLCBIYXNoTWFwPEJpbmRpbmcqLCBzaXplX3Q+JiByZXNvdXJjZU1hcCwgTGF5b3V0JiBs
YXlvdXQsIHN0ZDo6ZnVuY3Rpb248U3RyaW5nKCk+JiYgZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1l
KQorICAgIDogbV9mdW5jdGlvbkRlZmluaXRpb24oZnVuY3Rpb25EZWZpbml0aW9uKQorICAgICwg
bV9pbnRyaW5zaWNzKGludHJpbnNpY3MpCisgICAgLCBtX3R5cGVOYW1lcih0eXBlTmFtZXIpCisg
ICAgLCBtX2VudHJ5UG9pbnRJdGVtcyhlbnRyeVBvaW50SXRlbXMpCisgICAgLCBtX3Jlc291cmNl
TWFwKHJlc291cmNlTWFwKQorICAgICwgbV9sYXlvdXQobGF5b3V0KQorICAgICwgbV9nZW5lcmF0
ZU5leHRWYXJpYWJsZU5hbWUoZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKQogewotICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQgdGhpcy4KLSAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgdW5zaWduZWQg
YXJndW1lbnRCdWZmZXJJbmRleCA9IDA7CisgICAgbV9uYW1lZEJpbmRHcm91cHMucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eShtX2xheW91dC5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV9sYXlvdXQuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgTmFtZWRCaW5kR3JvdXAgbmFtZWRC
aW5kR3JvdXA7CisgICAgICAgIG5hbWVkQmluZEdyb3VwLnN0cnVjdE5hbWUgPSBtX3R5cGVOYW1l
ci5nZW5lcmF0ZU5leHRUeXBlTmFtZSgpOworICAgICAgICBuYW1lZEJpbmRHcm91cC52YXJpYWJs
ZU5hbWUgPSBtX2dlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOworICAgICAgICBuYW1lZEJpbmRH
cm91cC5hcmd1bWVudEJ1ZmZlckluZGV4ID0gYXJndW1lbnRCdWZmZXJJbmRleCsrOworICAgICAg
ICBuYW1lZEJpbmRHcm91cC5uYW1lZEJpbmRpbmdzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9s
YXlvdXRbaV0uYmluZGluZ3Muc2l6ZSgpKTsKKyAgICAgICAgdW5zaWduZWQgaW5kZXggPSAwOwor
ICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IG1fbGF5b3V0W2ldLmJpbmRpbmdzLnNpemUo
KTsgKytqKSB7CisgICAgICAgICAgICBOYW1lZEJpbmRpbmcgbmFtZWRCaW5kaW5nOworICAgICAg
ICAgICAgbmFtZWRCaW5kaW5nLmVsZW1lbnROYW1lID0gbV90eXBlTmFtZXIuZ2VuZXJhdGVOZXh0
U3RydWN0dXJlRWxlbWVudE5hbWUoKTsKKyAgICAgICAgICAgIG5hbWVkQmluZGluZy5pbmRleCA9
IGluZGV4Kys7CisgICAgICAgICAgICBuYW1lZEJpbmRHcm91cC5uYW1lZEJpbmRpbmdzLnVuY2hl
Y2tlZEFwcGVuZChXVEZNb3ZlKG5hbWVkQmluZGluZykpOworICAgICAgICB9CisgICAgICAgIG1f
bmFtZWRCaW5kR3JvdXBzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKG5hbWVkQmluZEdyb3VwKSk7
CisgICAgfQorCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2VudHJ5UG9pbnRJdGVtcy5p
bnB1dHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKCFXVEY6OmhvbGRzX2FsdGVybmF0aXZl
PEFTVDo6QnVpbHRJblNlbWFudGljPigqbV9lbnRyeVBvaW50SXRlbXMuaW5wdXRzW2ldLnNlbWFu
dGljKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBOYW1lZEJ1aWx0SW4gbmFtZWRC
dWlsdEluOworICAgICAgICBuYW1lZEJ1aWx0SW4uaW5kZXhJbkVudHJ5UG9pbnRJdGVtcyA9IGk7
CisgICAgICAgIG5hbWVkQnVpbHRJbi52YXJpYWJsZU5hbWUgPSBtX2dlbmVyYXRlTmV4dFZhcmlh
YmxlTmFtZSgpOworICAgICAgICBtX25hbWVkQnVpbHRJbnMuYXBwZW5kKFdURk1vdmUobmFtZWRC
dWlsdEluKSk7CisgICAgfQorCisgICAgbV9wYXJhbWV0ZXJWYXJpYWJsZXMucmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eShtX2Z1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpKTsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMo
KS5zaXplKCk7ICsraSkKKyAgICAgICAgbV9wYXJhbWV0ZXJWYXJpYWJsZXMudW5jaGVja2VkQXBw
ZW5kKG1fZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCkpOwogfQogCi1TdHJpbmcgRW50cnlQb2lu
dFNjYWZmb2xkaW5nOjp1bnBhY2soKQorU3RyaW5nIEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6cmVz
b3VyY2VIZWxwZXJUeXBlcygpCiB7Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgotICAg
IHJldHVybiBTdHJpbmcoKTsKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2xheW91dC5zaXplKCk7ICsraSkgeworICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJzdHJ1Y3QgIiwgbV9uYW1lZEJpbmRHcm91
cHNbaV0uc3RydWN0TmFtZSwgIiB7XG4iKSk7CisgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBq
IDwgbV9sYXlvdXRbaV0uYmluZGluZ3Muc2l6ZSgpOyArK2opIHsKKyAgICAgICAgICAgIGF1dG8g
aXRlcmF0b3IgPSBtX3Jlc291cmNlTWFwLmZpbmQoJm1fbGF5b3V0W2ldLmJpbmRpbmdzW2pdKTsK
KyAgICAgICAgICAgIGlmIChpdGVyYXRvciA9PSBtX3Jlc291cmNlTWFwLmVuZCgpKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgYXV0byBtYW5nbGVkVHlwZU5hbWUgPSBt
X3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm1fZW50cnlQb2ludEl0ZW1zLmlucHV0c1tp
dGVyYXRvci0+dmFsdWVdLnVubmFtZWRUeXBlKTsKKyAgICAgICAgICAgIGF1dG8gZWxlbWVudE5h
bWUgPSBtX25hbWVkQmluZEdyb3Vwc1tpXS5uYW1lZEJpbmRpbmdzW2pdLmVsZW1lbnROYW1lOwor
ICAgICAgICAgICAgYXV0byBpbmRleCA9IG1fbmFtZWRCaW5kR3JvdXBzW2ldLm5hbWVkQmluZGlu
Z3Nbal0uaW5kZXg7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5n
KCIgICAgIiwgbWFuZ2xlZFR5cGVOYW1lLCAnICcsIGVsZW1lbnROYW1lLCAiIFtbaWQoIiwgaW5k
ZXgsICIpXV07XG4iKSk7CisgICAgICAgIH0KKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
In1cblxuIik7CisgICAgfQorICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7Cit9
CisKK09wdGlvbmFsPFN0cmluZz4gRW50cnlQb2ludFNjYWZmb2xkaW5nOjpyZXNvdXJjZVNpZ25h
dHVyZSgpCit7CisgICAgaWYgKCFtX2xheW91dC5zaXplKCkpCisgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX2xheW91dC5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoaSkK
KyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIsICIpOworICAgICAgICBhdXRvJiBu
YW1lZEJpbmRHcm91cCA9IG1fbmFtZWRCaW5kR3JvdXBzW2ldOworICAgICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZChtYWtlU3RyaW5nKG5hbWVkQmluZEdyb3VwLnN0cnVjdE5hbWUsICImICIsIG5h
bWVkQmluZEdyb3VwLnZhcmlhYmxlTmFtZSwgIiBbW2J1ZmZlcigiLCBuYW1lZEJpbmRHcm91cC5h
cmd1bWVudEJ1ZmZlckluZGV4LCAiKV1dIikpOworICAgIH0KKyAgICByZXR1cm4gc3RyaW5nQnVp
bGRlci50b1N0cmluZygpOworfQorCitPcHRpb25hbDxTdHJpbmc+IEVudHJ5UG9pbnRTY2FmZm9s
ZGluZzo6YnVpbHRJbnNTaWduYXR1cmUoKQoreworICAgIGlmICghbV9uYW1lZEJ1aWx0SW5zLnNp
emUoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIFN0cmluZ0J1aWxkZXIg
c3RyaW5nQnVpbGRlcjsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fbmFtZWRCdWlsdElu
cy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoaSkKKyAgICAgICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKCIsICIpOworICAgICAgICBhdXRvJiBuYW1lZEJ1aWx0SW4gPSBtX25hbWVkQnVp
bHRJbnNbaV07CisgICAgICAgIGF1dG8mIGl0ZW0gPSBtX2VudHJ5UG9pbnRJdGVtcy5pbnB1dHNb
bmFtZWRCdWlsdEluLmluZGV4SW5FbnRyeVBvaW50SXRlbXNdOworICAgICAgICBhdXRvJiBidWls
dEluU2VtYW50aWMgPSBXVEY6OmdldDxBU1Q6OkJ1aWx0SW5TZW1hbnRpYz4oKml0ZW0uc2VtYW50
aWMpOworICAgICAgICBhdXRvIG1hbmdsZWRUeXBlTmFtZSA9IG1fdHlwZU5hbWVyLm1hbmdsZWRO
YW1lRm9yVHlwZSgqaXRlbS51bm5hbWVkVHlwZSk7CisgICAgICAgIGF1dG8gdmFyaWFibGVOYW1l
ID0gbmFtZWRCdWlsdEluLnZhcmlhYmxlTmFtZTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQobWFrZVN0cmluZyhtYW5nbGVkVHlwZU5hbWUsICcgJywgdmFyaWFibGVOYW1lLCAnICcsIGF0
dHJpYnV0ZUZvclNlbWFudGljKGJ1aWx0SW5TZW1hbnRpYykpKTsKKyAgICB9CisgICAgcmV0dXJu
IHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKK30KKworU3RyaW5nIEVudHJ5UG9pbnRTY2FmZm9s
ZGluZzo6bWFuZ2xlZElucHV0UGF0aChWZWN0b3I8U3RyaW5nPiYgcGF0aCkKK3sKKyAgICBBU1NF
UlQoIXBhdGguaXNFbXB0eSgpKTsKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7Cisg
ICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgIEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbiogc3Ry
dWN0dXJlRGVmaW5pdGlvbiA9IG51bGxwdHI7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X2Z1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
aWYgKG1fZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVtpXS5uYW1lKCkgPT0gcGF0aFsw
XSkgeworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobV9wYXJhbWV0ZXJWYXJpYWJs
ZXNbaV0pOworICAgICAgICAgICAgYXV0byYgdW5pZnlOb2RlID0gbV9mdW5jdGlvbkRlZmluaXRp
b24ucGFyYW1ldGVycygpW2ldLnR5cGUoKS0+dW5pZnlOb2RlKCk7CisgICAgICAgICAgICBpZiAo
aXM8QVNUOjpOYW1lZFR5cGU+KHVuaWZ5Tm9kZSkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBu
YW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4odW5pZnlOb2RlKTsKKyAgICAgICAg
ICAgICAgICBpZiAoaXM8QVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uPihuYW1lZFR5cGUpKQorICAg
ICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVEZWZpbml0aW9uID0gJmRvd25jYXN0PEFTVDo6U3Ry
dWN0dXJlRGVmaW5pdGlvbj4obmFtZWRUeXBlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAg
IEFTU0VSVChmb3VuZCk7CisgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBwYXRoLnNpemUoKTsg
KytpKSB7CisgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmVEZWZpbml0aW9uKTsKKyAgICAgICAgYXV0
byogbmV4dCA9IHN0cnVjdHVyZURlZmluaXRpb24tPmZpbmQocGF0aFtpXSk7CisgICAgICAgIEFT
U0VSVChuZXh0KTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygnLics
IG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yU3RydWN0dXJlRWxlbWVudCgqbmV4dCkpKTsKKyAg
ICAgICAgc3RydWN0dXJlRGVmaW5pdGlvbiA9IG51bGxwdHI7CisgICAgICAgIGF1dG8mIHVuaWZ5
Tm9kZSA9IG5leHQtPnR5cGUoKS51bmlmeU5vZGUoKTsKKyAgICAgICAgaWYgKGlzPEFTVDo6TmFt
ZWRUeXBlPih1bmlmeU5vZGUpKSB7CisgICAgICAgICAgICBhdXRvJiBuYW1lZFR5cGUgPSBkb3du
Y2FzdDxBU1Q6Ok5hbWVkVHlwZT4odW5pZnlOb2RlKTsKKyAgICAgICAgICAgIGlmIChpczxBU1Q6
OlN0cnVjdHVyZURlZmluaXRpb24+KG5hbWVkVHlwZSkpCisgICAgICAgICAgICAgICAgc3RydWN0
dXJlRGVmaW5pdGlvbiA9ICZkb3duY2FzdDxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24+KG5hbWVk
VHlwZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0
cmluZygpOworfQorCitTdHJpbmcgRW50cnlQb2ludFNjYWZmb2xkaW5nOjptYW5nbGVkT3V0cHV0
UGF0aChWZWN0b3I8U3RyaW5nPiYgcGF0aCkKK3sKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1
aWxkZXI7CisKKyAgICBBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24qIHN0cnVjdHVyZURlZmluaXRp
b24gPSBudWxscHRyOworICAgIGF1dG8mIHVuaWZ5Tm9kZSA9IG1fZnVuY3Rpb25EZWZpbml0aW9u
LnR5cGUoKS51bmlmeU5vZGUoKTsKKyAgICBBU1NFUlQoaXM8QVNUOjpOYW1lZFR5cGU+KHVuaWZ5
Tm9kZSkpOworICAgIGF1dG8mIG5hbWVkVHlwZSA9IGRvd25jYXN0PEFTVDo6TmFtZWRUeXBlPih1
bmlmeU5vZGUpOworICAgIEFTU0VSVChpczxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24+KG5hbWVk
VHlwZSkpOworICAgIHN0cnVjdHVyZURlZmluaXRpb24gPSAmZG93bmNhc3Q8QVNUOjpTdHJ1Y3R1
cmVEZWZpbml0aW9uPihuYW1lZFR5cGUpOworICAgIGZvciAoYXV0byYgY29tcG9uZW50IDogcGF0
aCkgeworICAgICAgICBBU1NFUlQoc3RydWN0dXJlRGVmaW5pdGlvbik7CisgICAgICAgIGF1dG8q
IG5leHQgPSBzdHJ1Y3R1cmVEZWZpbml0aW9uLT5maW5kKGNvbXBvbmVudCk7CisgICAgICAgIEFT
U0VSVChuZXh0KTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygnLics
IG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yU3RydWN0dXJlRWxlbWVudCgqbmV4dCkpKTsKKyAg
ICAgICAgc3RydWN0dXJlRGVmaW5pdGlvbiA9IG51bGxwdHI7CisgICAgICAgIGF1dG8mIHVuaWZ5
Tm9kZSA9IG5leHQtPnR5cGUoKS51bmlmeU5vZGUoKTsKKyAgICAgICAgaWYgKGlzPEFTVDo6TmFt
ZWRUeXBlPih1bmlmeU5vZGUpKSB7CisgICAgICAgICAgICBhdXRvJiBuYW1lZFR5cGUgPSBkb3du
Y2FzdDxBU1Q6Ok5hbWVkVHlwZT4odW5pZnlOb2RlKTsKKyAgICAgICAgICAgIGlmIChpczxBU1Q6
OlN0cnVjdHVyZURlZmluaXRpb24+KG5hbWVkVHlwZSkpCisgICAgICAgICAgICAgICAgc3RydWN0
dXJlRGVmaW5pdGlvbiA9ICZkb3duY2FzdDxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24+KG5hbWVk
VHlwZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0
cmluZygpOworfQorCitTdHJpbmcgRW50cnlQb2ludFNjYWZmb2xkaW5nOjp1bnBhY2tSZXNvdXJj
ZXNBbmROYW1lZEJ1aWx0SW5zKCkKK3sKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2Z1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0
ZXJzKCkuc2l6ZSgpOyArK2kpCisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJp
bmcobV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCptX2Z1bmN0aW9uRGVmaW5pdGlvbi5w
YXJhbWV0ZXJzKClbaV0udHlwZSgpKSwgJyAnLCBtX3BhcmFtZXRlclZhcmlhYmxlc1tpXSwgIjtc
biIpKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9sYXlvdXQuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgYXV0byB2YXJpYWJsZU5hbWUgPSBtX25hbWVkQmluZEdyb3Vwc1tpXS52YXJp
YWJsZU5hbWU7CisgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgbV9sYXlvdXRbaV0uYmlu
ZGluZ3Muc2l6ZSgpOyArK2opIHsKKyAgICAgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX3Jlc291
cmNlTWFwLmZpbmQoJm1fbGF5b3V0W2ldLmJpbmRpbmdzW2pdKTsKKyAgICAgICAgICAgIGlmIChp
dGVyYXRvciA9PSBtX3Jlc291cmNlTWFwLmVuZCgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgYXV0byYgcGF0aCA9IG1fZW50cnlQb2ludEl0ZW1zLmlucHV0c1tpdGVy
YXRvci0+dmFsdWVdLnBhdGg7CisgICAgICAgICAgICBhdXRvIGVsZW1lbnROYW1lID0gbV9uYW1l
ZEJpbmRHcm91cHNbaV0ubmFtZWRCaW5kaW5nc1tqXS5lbGVtZW50TmFtZTsKKyAgICAgICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWFuZ2xlZElucHV0UGF0aChwYXRoKSwg
IiA9ICIsIHZhcmlhYmxlTmFtZSwgJy4nLCBlbGVtZW50TmFtZSwgIjtcbiIpKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGZvciAoYXV0byYgbmFtZWRCdWlsdEluIDogbV9uYW1lZEJ1aWx0SW5z
KSB7CisgICAgICAgIGF1dG8mIHBhdGggPSBtX2VudHJ5UG9pbnRJdGVtcy5pbnB1dHNbbmFtZWRC
dWlsdEluLmluZGV4SW5FbnRyeVBvaW50SXRlbXNdLnBhdGg7CisgICAgICAgIGF1dG8mIHZhcmlh
YmxlTmFtZSA9IG5hbWVkQnVpbHRJbi52YXJpYWJsZU5hbWU7CisgICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKG1ha2VTdHJpbmcobWFuZ2xlZElucHV0UGF0aChwYXRoKSwgIiA9ICIsIHZhcmlh
YmxlTmFtZSwgIjtcbiIpKTsKKyAgICB9CisgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJp
bmcoKTsKK30KKworVmVydGV4RW50cnlQb2ludFNjYWZmb2xkaW5nOjpWZXJ0ZXhFbnRyeVBvaW50
U2NhZmZvbGRpbmcoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbiwg
SW50cmluc2ljcyYgaW50cmluc2ljcywgVHlwZU5hbWVyJiB0eXBlTmFtZXIsIEVudHJ5UG9pbnRJ
dGVtcyYgZW50cnlQb2ludEl0ZW1zLCBIYXNoTWFwPEJpbmRpbmcqLCBzaXplX3Q+JiByZXNvdXJj
ZU1hcCwgTGF5b3V0JiBsYXlvdXQsIHN0ZDo6ZnVuY3Rpb248U3RyaW5nKCk+JiYgZ2VuZXJhdGVO
ZXh0VmFyaWFibGVOYW1lLCBIYXNoTWFwPFZlcnRleEF0dHJpYnV0ZSosIHNpemVfdD4mIG1hdGNo
ZWRWZXJ0ZXhBdHRyaWJ1dGVzKQorICAgIDogRW50cnlQb2ludFNjYWZmb2xkaW5nKGZ1bmN0aW9u
RGVmaW5pdGlvbiwgaW50cmluc2ljcywgdHlwZU5hbWVyLCBlbnRyeVBvaW50SXRlbXMsIHJlc291
cmNlTWFwLCBsYXlvdXQsIFdURk1vdmUoZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKSkKKyAgICAs
IG1fbWF0Y2hlZFZlcnRleEF0dHJpYnV0ZXMobWF0Y2hlZFZlcnRleEF0dHJpYnV0ZXMpCisgICAg
LCBtX3N0YWdlSW5TdHJ1Y3ROYW1lKHR5cGVOYW1lci5nZW5lcmF0ZU5leHRUeXBlTmFtZSgpKQor
ICAgICwgbV9yZXR1cm5TdHJ1Y3ROYW1lKHR5cGVOYW1lci5nZW5lcmF0ZU5leHRUeXBlTmFtZSgp
KQorICAgICwgbV9zdGFnZUluUGFyYW1ldGVyTmFtZShtX2dlbmVyYXRlTmV4dFZhcmlhYmxlTmFt
ZSgpKQoreworICAgIG1fbmFtZWRTdGFnZUlucy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fbWF0
Y2hlZFZlcnRleEF0dHJpYnV0ZXMuc2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8mIGtleVZhbHVlUGFp
ciA6IG1fbWF0Y2hlZFZlcnRleEF0dHJpYnV0ZXMpIHsKKyAgICAgICAgTmFtZWRTdGFnZUluIG5h
bWVkU3RhZ2VJbjsKKyAgICAgICAgbmFtZWRTdGFnZUluLmluZGV4SW5FbnRyeVBvaW50SXRlbXMg
PSBrZXlWYWx1ZVBhaXIudmFsdWU7CisgICAgICAgIG5hbWVkU3RhZ2VJbi5lbGVtZW50TmFtZSA9
IG1fdHlwZU5hbWVyLmdlbmVyYXRlTmV4dFN0cnVjdHVyZUVsZW1lbnROYW1lKCk7CisgICAgICAg
IG5hbWVkU3RhZ2VJbi5hdHRyaWJ1dGVJbmRleCA9IGtleVZhbHVlUGFpci5rZXktPm5hbWU7Cisg
ICAgICAgIG1fbmFtZWRTdGFnZUlucy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShuYW1lZFN0YWdl
SW4pKTsKKyAgICB9CisKKyAgICBtX25hbWVkT3V0cHV0cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5
KG1fZW50cnlQb2ludEl0ZW1zLm91dHB1dHMuc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fZW50cnlQb2ludEl0ZW1zLm91dHB1dHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
TmFtZWRPdXRwdXQgbmFtZWRPdXRwdXQ7CisgICAgICAgIG5hbWVkT3V0cHV0LmVsZW1lbnROYW1l
ID0gbV90eXBlTmFtZXIuZ2VuZXJhdGVOZXh0U3RydWN0dXJlRWxlbWVudE5hbWUoKTsKKyAgICAg
ICAgbV9uYW1lZE91dHB1dHMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUobmFtZWRPdXRwdXQpKTsK
KyAgICB9Cit9CisKK1N0cmluZyBWZXJ0ZXhFbnRyeVBvaW50U2NhZmZvbGRpbmc6OmhlbHBlclR5
cGVzKCkKK3sKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CisKKyAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJzdHJ1Y3QgIiwgbV9zdGFnZUluU3RydWN0TmFtZSwg
IiB7XG4iKSk7CisgICAgZm9yIChhdXRvJiBuYW1lZFN0YWdlSW4gOiBtX25hbWVkU3RhZ2VJbnMp
IHsKKyAgICAgICAgYXV0byBtYW5nbGVkVHlwZU5hbWUgPSBtX3R5cGVOYW1lci5tYW5nbGVkTmFt
ZUZvclR5cGUoKm1fZW50cnlQb2ludEl0ZW1zLmlucHV0c1tuYW1lZFN0YWdlSW4uaW5kZXhJbkVu
dHJ5UG9pbnRJdGVtc10udW5uYW1lZFR5cGUpOworICAgICAgICBhdXRvIGVsZW1lbnROYW1lID0g
bmFtZWRTdGFnZUluLmVsZW1lbnROYW1lOworICAgICAgICBhdXRvIGF0dHJpYnV0ZUluZGV4ID0g
bmFtZWRTdGFnZUluLmVsZW1lbnROYW1lOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCht
YWtlU3RyaW5nKCIgICAgIiwgbWFuZ2xlZFR5cGVOYW1lLCAnICcsIGVsZW1lbnROYW1lLCAiIFtb
YXR0cmlidXRlKCIsIGF0dHJpYnV0ZUluZGV4LCAiKV1dO1xuIikpOworICAgIH0KKyAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZCgifVxuXG4iKTsKKworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1h
a2VTdHJpbmcoInN0cnVjdCAiLCBtX3JldHVyblN0cnVjdE5hbWUsICIge1xuIikpOworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9lbnRyeVBvaW50SXRlbXMub3V0cHV0cy5zaXplKCk7ICsr
aSkgeworICAgICAgICBhdXRvJiBvdXRwdXRJdGVtID0gbV9lbnRyeVBvaW50SXRlbXMub3V0cHV0
c1tpXTsKKyAgICAgICAgYXV0byBtYW5nbGVkVHlwZU5hbWUgPSBtX3R5cGVOYW1lci5tYW5nbGVk
TmFtZUZvclR5cGUoKm91dHB1dEl0ZW0udW5uYW1lZFR5cGUpOworICAgICAgICBhdXRvIGVsZW1l
bnROYW1lID0gbV9uYW1lZE91dHB1dHNbaV0uZWxlbWVudE5hbWU7CisgICAgICAgIGF1dG8gYXR0
cmlidXRlID0gYXR0cmlidXRlRm9yU2VtYW50aWMoKm91dHB1dEl0ZW0uc2VtYW50aWMpOworICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIgICAgIiwgbWFuZ2xlZFR5cGVO
YW1lLCAnICcsIGVsZW1lbnROYW1lLCAnICcsIGF0dHJpYnV0ZSwgIjtcbiIpKTsKKyAgICB9Cisg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIn1cblxuIik7CisKKyAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZChyZXNvdXJjZUhlbHBlclR5cGVzKCkpOworCisgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIu
dG9TdHJpbmcoKTsKK30KKworU3RyaW5nIFZlcnRleEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6c2ln
bmF0dXJlKFN0cmluZyYgZnVuY3Rpb25OYW1lKQoreworICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5n
QnVpbGRlcjsKKworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoInZlcnRleCAi
LCBtX3JldHVyblN0cnVjdE5hbWUsICcgJywgZnVuY3Rpb25OYW1lLCAnKCcsIG1fc3RhZ2VJblN0
cnVjdE5hbWUsICcgJywgbV9zdGFnZUluUGFyYW1ldGVyTmFtZSwgIiBbW3N0YWdlX2luXV0iKSk7
CisgICAgaWYgKGF1dG8gcmVzb3VyY2VTaWduYXR1cmUgPSB0aGlzLT5yZXNvdXJjZVNpZ25hdHVy
ZSgpKQorICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIsICIsICpyZXNv
dXJjZVNpZ25hdHVyZSkpOworICAgIGlmIChhdXRvIGJ1aWx0SW5zU2lnbmF0dXJlID0gdGhpcy0+
YnVpbHRJbnNTaWduYXR1cmUoKSkKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0
cmluZygiLCAiLCAqYnVpbHRJbnNTaWduYXR1cmUpKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZCgiKSIpOworCisgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKK30KKworU3Ry
aW5nIFZlcnRleEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6dW5wYWNrKCkKK3sKKyAgICBTdHJpbmdC
dWlsZGVyIHN0cmluZ0J1aWxkZXI7CisKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh1bnBhY2tS
ZXNvdXJjZXNBbmROYW1lZEJ1aWx0SW5zKCkpOworCisgICAgZm9yIChhdXRvJiBuYW1lZFN0YWdl
SW4gOiBtX25hbWVkU3RhZ2VJbnMpIHsKKyAgICAgICAgYXV0byYgcGF0aCA9IG1fZW50cnlQb2lu
dEl0ZW1zLmlucHV0c1tuYW1lZFN0YWdlSW4uaW5kZXhJbkVudHJ5UG9pbnRJdGVtc10ucGF0aDsK
KyAgICAgICAgYXV0byYgZWxlbWVudE5hbWUgPSBuYW1lZFN0YWdlSW4uZWxlbWVudE5hbWU7Cisg
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWFuZ2xlZElucHV0UGF0aChw
YXRoKSwgIiA9ICIsIG1fc3RhZ2VJblN0cnVjdE5hbWUsICcuJywgZWxlbWVudE5hbWUsICI7XG4i
KSk7CisgICAgfQorCisgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKK30KKwor
U3RyaW5nIFZlcnRleEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6cGFjayhjb25zdCBTdHJpbmcmIGlu
cHV0VmFyaWFibGVOYW1lLCBjb25zdCBTdHJpbmcmIG91dHB1dFZhcmlhYmxlTmFtZSkKK3sKKyAg
ICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
bWFrZVN0cmluZyhtX3JldHVyblN0cnVjdE5hbWUsICcgJywgb3V0cHV0VmFyaWFibGVOYW1lKSk7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2VudHJ5UG9pbnRJdGVtcy5vdXRwdXRzLnNp
emUoKTsgKytpKSB7CisgICAgICAgIGF1dG8mIGVsZW1lbnROYW1lID0gbV9uYW1lZE91dHB1dHNb
aV0uZWxlbWVudE5hbWU7CisgICAgICAgIGF1dG8mIHBhdGggPSBtX2VudHJ5UG9pbnRJdGVtcy5v
dXRwdXRzW2ldLnBhdGg7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmco
b3V0cHV0VmFyaWFibGVOYW1lLCAnLicsIGVsZW1lbnROYW1lLCAiID0gIiwgaW5wdXRWYXJpYWJs
ZU5hbWUsIG1hbmdsZWRPdXRwdXRQYXRoKHBhdGgpLCAiO1xuIikpOworICAgIH0KKyAgICByZXR1
cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworfQorCitGcmFnbWVudEVudHJ5UG9pbnRTY2Fm
Zm9sZGluZzo6RnJhZ21lbnRFbnRyeVBvaW50U2NhZmZvbGRpbmcoQVNUOjpGdW5jdGlvbkRlZmlu
aXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbiwgSW50cmluc2ljcyYgaW50cmluc2ljcywgVHlwZU5h
bWVyJiB0eXBlTmFtZXIsIEVudHJ5UG9pbnRJdGVtcyYgZW50cnlQb2ludEl0ZW1zLCBIYXNoTWFw
PEJpbmRpbmcqLCBzaXplX3Q+JiByZXNvdXJjZU1hcCwgTGF5b3V0JiBsYXlvdXQsIHN0ZDo6ZnVu
Y3Rpb248U3RyaW5nKCk+JiYgZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lLCBIYXNoTWFwPEF0dGFj
aG1lbnREZXNjcmlwdG9yKiwgc2l6ZV90PiYpCisgICAgOiBFbnRyeVBvaW50U2NhZmZvbGRpbmco
ZnVuY3Rpb25EZWZpbml0aW9uLCBpbnRyaW5zaWNzLCB0eXBlTmFtZXIsIGVudHJ5UG9pbnRJdGVt
cywgcmVzb3VyY2VNYXAsIGxheW91dCwgV1RGTW92ZShnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUp
KQorICAgICwgbV9zdGFnZUluU3RydWN0TmFtZSh0eXBlTmFtZXIuZ2VuZXJhdGVOZXh0VHlwZU5h
bWUoKSkKKyAgICAsIG1fcmV0dXJuU3RydWN0TmFtZSh0eXBlTmFtZXIuZ2VuZXJhdGVOZXh0VHlw
ZU5hbWUoKSkKKyAgICAsIG1fc3RhZ2VJblBhcmFtZXRlck5hbWUobV9nZW5lcmF0ZU5leHRWYXJp
YWJsZU5hbWUoKSkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZW50cnlQb2ludEl0
ZW1zLmlucHV0cy5zaXplKCk7ICsraSkgeworICAgICAgICBhdXRvJiBpbnB1dEl0ZW0gPSBtX2Vu
dHJ5UG9pbnRJdGVtcy5pbnB1dHNbaV07CisgICAgICAgIGlmICghV1RGOjpob2xkc19hbHRlcm5h
dGl2ZTxBU1Q6OlN0YWdlSW5PdXRTZW1hbnRpYz4oKmlucHV0SXRlbS5zZW1hbnRpYykpCisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgYXV0byYgc3RhZ2VJbk91dFNlbWFudGljID0gV1RG
OjpnZXQ8QVNUOjpTdGFnZUluT3V0U2VtYW50aWM+KCppbnB1dEl0ZW0uc2VtYW50aWMpOworICAg
ICAgICBOYW1lZFN0YWdlSW4gbmFtZWRTdGFnZUluOworICAgICAgICBuYW1lZFN0YWdlSW4uaW5k
ZXhJbkVudHJ5UG9pbnRJdGVtcyA9IGk7CisgICAgICAgIG5hbWVkU3RhZ2VJbi5lbGVtZW50TmFt
ZSA9IG1fdHlwZU5hbWVyLmdlbmVyYXRlTmV4dFN0cnVjdHVyZUVsZW1lbnROYW1lKCk7CisgICAg
ICAgIG5hbWVkU3RhZ2VJbi5hdHRyaWJ1dGVJbmRleCA9IHN0YWdlSW5PdXRTZW1hbnRpYy5pbmRl
eCgpOworICAgICAgICBtX25hbWVkU3RhZ2VJbnMuYXBwZW5kKFdURk1vdmUobmFtZWRTdGFnZUlu
KSk7CisgICAgfQorCisgICAgbV9uYW1lZE91dHB1dHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSht
X2VudHJ5UG9pbnRJdGVtcy5vdXRwdXRzLnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX2VudHJ5UG9pbnRJdGVtcy5vdXRwdXRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIE5h
bWVkT3V0cHV0IG5hbWVkT3V0cHV0OworICAgICAgICBuYW1lZE91dHB1dC5lbGVtZW50TmFtZSA9
IG1fdHlwZU5hbWVyLmdlbmVyYXRlTmV4dFN0cnVjdHVyZUVsZW1lbnROYW1lKCk7CisgICAgICAg
IG1fbmFtZWRPdXRwdXRzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKG5hbWVkT3V0cHV0KSk7Cisg
ICAgfQorfQorCitTdHJpbmcgRnJhZ21lbnRFbnRyeVBvaW50U2NhZmZvbGRpbmc6OmhlbHBlclR5
cGVzKCkKK3sKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CisKKyAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJzdHJ1Y3QgIiwgbV9zdGFnZUluU3RydWN0TmFtZSwg
IiB7XG4iKSk7CisgICAgZm9yIChhdXRvJiBuYW1lZFN0YWdlSW4gOiBtX25hbWVkU3RhZ2VJbnMp
IHsKKyAgICAgICAgYXV0byBtYW5nbGVkVHlwZU5hbWUgPSBtX3R5cGVOYW1lci5tYW5nbGVkTmFt
ZUZvclR5cGUoKm1fZW50cnlQb2ludEl0ZW1zLmlucHV0c1tuYW1lZFN0YWdlSW4uaW5kZXhJbkVu
dHJ5UG9pbnRJdGVtc10udW5uYW1lZFR5cGUpOworICAgICAgICBhdXRvIGVsZW1lbnROYW1lID0g
bmFtZWRTdGFnZUluLmVsZW1lbnROYW1lOworICAgICAgICBhdXRvIGF0dHJpYnV0ZUluZGV4ID0g
bmFtZWRTdGFnZUluLmVsZW1lbnROYW1lOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCht
YWtlU3RyaW5nKCIgICAgIiwgbWFuZ2xlZFR5cGVOYW1lLCAnICcsIGVsZW1lbnROYW1lLCAiIFtb
dXNlcigiLCBhdHRyaWJ1dGVJbmRleCwgIildXTtcbiIpKTsKKyAgICB9CisgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQoIn1cblxuIik7CisKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3Ry
aW5nKCJzdHJ1Y3QgIiwgbV9yZXR1cm5TdHJ1Y3ROYW1lLCAiIHtcbiIpKTsKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1fZW50cnlQb2ludEl0ZW1zLm91dHB1dHMuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgYXV0byYgb3V0cHV0SXRlbSA9IG1fZW50cnlQb2ludEl0ZW1zLm91dHB1dHNbaV07
CisgICAgICAgIGF1dG8gbWFuZ2xlZFR5cGVOYW1lID0gbV90eXBlTmFtZXIubWFuZ2xlZE5hbWVG
b3JUeXBlKCpvdXRwdXRJdGVtLnVubmFtZWRUeXBlKTsKKyAgICAgICAgYXV0byBlbGVtZW50TmFt
ZSA9IG1fbmFtZWRPdXRwdXRzW2ldLmVsZW1lbnROYW1lOworICAgICAgICBhdXRvIGF0dHJpYnV0
ZSA9IGF0dHJpYnV0ZUZvclNlbWFudGljKCpvdXRwdXRJdGVtLnNlbWFudGljKTsKKyAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAgICIsIG1hbmdsZWRUeXBlTmFtZSwg
JyAnLCBlbGVtZW50TmFtZSwgJyAnLCBhdHRyaWJ1dGUsICI7XG4iKSk7CisgICAgfQorICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKCJ9XG5cbiIpOworCisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
cmVzb3VyY2VIZWxwZXJUeXBlcygpKTsKKworICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3Ry
aW5nKCk7Cit9CisKK1N0cmluZyBGcmFnbWVudEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6c2lnbmF0
dXJlKFN0cmluZyYgZnVuY3Rpb25OYW1lKQoreworICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVp
bGRlcjsKKworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoImZyYWdtZW50ICIs
IG1fcmV0dXJuU3RydWN0TmFtZSwgJyAnLCBmdW5jdGlvbk5hbWUsICcoJywgbV9zdGFnZUluU3Ry
dWN0TmFtZSwgJyAnLCBtX3N0YWdlSW5QYXJhbWV0ZXJOYW1lLCAiIFtbc3RhZ2VfaW5dXSIpKTsK
KyAgICBpZiAoYXV0byByZXNvdXJjZVNpZ25hdHVyZSA9IHRoaXMtPnJlc291cmNlU2lnbmF0dXJl
KCkpCisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiwgIiwgKnJlc291
cmNlU2lnbmF0dXJlKSk7CisgICAgaWYgKGF1dG8gYnVpbHRJbnNTaWduYXR1cmUgPSB0aGlzLT5i
dWlsdEluc1NpZ25hdHVyZSgpKQorICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3Ry
aW5nKCIsICIsICpidWlsdEluc1NpZ25hdHVyZSkpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KCIpIik7CisKKyAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworfQorCitTdHJp
bmcgRnJhZ21lbnRFbnRyeVBvaW50U2NhZmZvbGRpbmc6OnVucGFjaygpCit7CisgICAgU3RyaW5n
QnVpbGRlciBzdHJpbmdCdWlsZGVyOworCisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodW5wYWNr
UmVzb3VyY2VzQW5kTmFtZWRCdWlsdElucygpKTsKKworICAgIGZvciAoYXV0byYgbmFtZWRTdGFn
ZUluIDogbV9uYW1lZFN0YWdlSW5zKSB7CisgICAgICAgIGF1dG8mIHBhdGggPSBtX2VudHJ5UG9p
bnRJdGVtcy5pbnB1dHNbbmFtZWRTdGFnZUluLmluZGV4SW5FbnRyeVBvaW50SXRlbXNdLnBhdGg7
CisgICAgICAgIGF1dG8mIGVsZW1lbnROYW1lID0gbmFtZWRTdGFnZUluLmVsZW1lbnROYW1lOwor
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1hbmdsZWRJbnB1dFBhdGgo
cGF0aCksICIgPSAiLCBtX3N0YWdlSW5TdHJ1Y3ROYW1lLCAnLicsIGVsZW1lbnROYW1lLCAiO1xu
IikpOworICAgIH0KKworICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7Cit9CisK
K1N0cmluZyBGcmFnbWVudEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6cGFjayhjb25zdCBTdHJpbmcm
IGlucHV0VmFyaWFibGVOYW1lLCBjb25zdCBTdHJpbmcmIG91dHB1dFZhcmlhYmxlTmFtZSkKK3sK
KyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CisgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQobWFrZVN0cmluZyhtX3JldHVyblN0cnVjdE5hbWUsICcgJywgb3V0cHV0VmFyaWFibGVOYW1l
KSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2VudHJ5UG9pbnRJdGVtcy5vdXRwdXRz
LnNpemUoKTsgKytpKSB7CisgICAgICAgIGF1dG8mIGVsZW1lbnROYW1lID0gbV9uYW1lZE91dHB1
dHNbaV0uZWxlbWVudE5hbWU7CisgICAgICAgIGF1dG8mIHBhdGggPSBtX2VudHJ5UG9pbnRJdGVt
cy5vdXRwdXRzW2ldLnBhdGg7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJp
bmcob3V0cHV0VmFyaWFibGVOYW1lLCAnLicsIGVsZW1lbnROYW1lLCAiID0gIiwgaW5wdXRWYXJp
YWJsZU5hbWUsIG1hbmdsZWRPdXRwdXRQYXRoKHBhdGgpLCAiO1xuIikpOworICAgIH0KKyAgICBy
ZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworfQorCitDb21wdXRlRW50cnlQb2ludFNj
YWZmb2xkaW5nOjpDb21wdXRlRW50cnlQb2ludFNjYWZmb2xkaW5nKEFTVDo6RnVuY3Rpb25EZWZp
bml0aW9uJiBmdW5jdGlvbkRlZmluaXRpb24sIEludHJpbnNpY3MmIGludHJpbnNpY3MsIFR5cGVO
YW1lciYgdHlwZU5hbWVyLCBFbnRyeVBvaW50SXRlbXMmIGVudHJ5UG9pbnRJdGVtcywgSGFzaE1h
cDxCaW5kaW5nKiwgc2l6ZV90PiYgcmVzb3VyY2VNYXAsIExheW91dCYgbGF5b3V0LCBzdGQ6OmZ1
bmN0aW9uPFN0cmluZygpPiYmIGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSkKKyAgICA6IEVudHJ5
UG9pbnRTY2FmZm9sZGluZyhmdW5jdGlvbkRlZmluaXRpb24sIGludHJpbnNpY3MsIHR5cGVOYW1l
ciwgZW50cnlQb2ludEl0ZW1zLCByZXNvdXJjZU1hcCwgbGF5b3V0LCBXVEZNb3ZlKGdlbmVyYXRl
TmV4dFZhcmlhYmxlTmFtZSkpCit7Cit9CisKK1N0cmluZyBDb21wdXRlRW50cnlQb2ludFNjYWZm
b2xkaW5nOjpoZWxwZXJUeXBlcygpCit7CisgICAgcmV0dXJuIHJlc291cmNlSGVscGVyVHlwZXMo
KTsKK30KKworU3RyaW5nIENvbXB1dGVFbnRyeVBvaW50U2NhZmZvbGRpbmc6OnNpZ25hdHVyZShT
dHJpbmcmIGZ1bmN0aW9uTmFtZSkKK3sKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7
CisKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJjb21wdXRlIHZvaWQgIiwg
ZnVuY3Rpb25OYW1lLCAnKCcpKTsKKyAgICBib29sIGVtcHR5ID0gdHJ1ZTsKKyAgICBpZiAoYXV0
byByZXNvdXJjZVNpZ25hdHVyZSA9IHRoaXMtPnJlc291cmNlU2lnbmF0dXJlKCkpIHsKKyAgICAg
ICAgZW1wdHkgPSBmYWxzZTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmlu
ZygqcmVzb3VyY2VTaWduYXR1cmUpKTsKKyAgICB9CisgICAgaWYgKGF1dG8gYnVpbHRJbnNTaWdu
YXR1cmUgPSB0aGlzLT5idWlsdEluc1NpZ25hdHVyZSgpKSB7CisgICAgICAgIGlmICghZW1wdHkp
CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiLCAiKTsKKyAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQoKmJ1aWx0SW5zU2lnbmF0dXJlKTsKKyAgICB9CisgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQoIikiKTsKKworICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7
Cit9CisKK1N0cmluZyBDb21wdXRlRW50cnlQb2ludFNjYWZmb2xkaW5nOjp1bnBhY2soKQorewor
ICAgIHJldHVybiB1bnBhY2tSZXNvdXJjZXNBbmROYW1lZEJ1aWx0SW5zKCk7CiB9CiAKLVN0cmlu
ZyBFbnRyeVBvaW50U2NhZmZvbGRpbmc6OnBhY2soY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5n
JikKK1N0cmluZyBDb21wdXRlRW50cnlQb2ludFNjYWZmb2xkaW5nOjpwYWNrKGNvbnN0IFN0cmlu
ZyYsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgorICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xFbnRy
eVBvaW50U2NhZmZvbGRpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L01ldGFsL1dITFNMRW50cnlQb2ludFNjYWZmb2xkaW5nLmgKaW5kZXggOGQ2NWZhZDIwN2RmNTM5
ZTllYTc0MDQ1MDVlYTZlODcyMTRjOTRlMC4uN2YzNThhMDBhZmM1OWQxYzIxNGQyZDJjYzAxZjY5
OThkYjgzMTcwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvTWV0YWwvV0hMU0xFbnRyeVBvaW50U2NhZmZvbGRpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEVudHJ5UG9pbnRTY2FmZm9sZGluZy5o
CkBAIC0yNyw2ICsyNywxMSBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAorI2luY2x1ZGUgIldI
TFNMUGlwZWxpbmVEZXNjcmlwdG9yLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNs
dWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBuYW1lc3BhY2UgV0hMU0wgewpAQCAtMzcsMjMgKzQyLDEz
MiBAQCBjbGFzcyBGdW5jdGlvbkRlZmluaXRpb247CiAKIH0KIAorc3RydWN0IEVudHJ5UG9pbnRJ
dGVtczsKIGNsYXNzIEludHJpbnNpY3M7CiAKIG5hbWVzcGFjZSBNZXRhbCB7CiAKK2NsYXNzIFR5
cGVOYW1lcjsKKwogLy8gRklYTUU6IFRoaXMgbmVlZHMgdG8ga25vdyBhYm91dCB0aGUgcGlwZWxp
bmUgc3RhdGUgb2JqZWN0IHRvIGVtaXQgZnVuY3Rpb24gcHJvbG9ndWVzIGFuZCBlcGlsb2d1ZXMu
CiBjbGFzcyBFbnRyeVBvaW50U2NhZmZvbGRpbmcgewogcHVibGljOgotICAgIEVudHJ5UG9pbnRT
Y2FmZm9sZGluZyhBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYsIEludHJpbnNpY3MmKTsKKyAgICBF
bnRyeVBvaW50U2NhZmZvbGRpbmcoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mLCBJbnRyaW5zaWNz
JiwgVHlwZU5hbWVyJiwgRW50cnlQb2ludEl0ZW1zJiwgSGFzaE1hcDxCaW5kaW5nKiwgc2l6ZV90
PiYgcmVzb3VyY2VNYXAsIExheW91dCYsIHN0ZDo6ZnVuY3Rpb248U3RyaW5nKCk+JiYgZ2VuZXJh
dGVOZXh0VmFyaWFibGVOYW1lKTsKKyAgICB2aXJ0dWFsIH5FbnRyeVBvaW50U2NhZmZvbGRpbmco
KSA9IGRlZmF1bHQ7CisKKyAgICB2aXJ0dWFsIFN0cmluZyBoZWxwZXJUeXBlcygpID0gMDsKKyAg
ICB2aXJ0dWFsIFN0cmluZyBzaWduYXR1cmUoU3RyaW5nJiBmdW5jdGlvbk5hbWUpID0gMDsKKyAg
ICB2aXJ0dWFsIFN0cmluZyB1bnBhY2soKSA9IDA7CisgICAgdmlydHVhbCBTdHJpbmcgcGFjayhj
b25zdCBTdHJpbmcmIGV4aXN0aW5nVmFyaWFibGVOYW1lLCBjb25zdCBTdHJpbmcmIHZhcmlhYmxl
TmFtZSkgPSAwOworCisgICAgVmVjdG9yPFN0cmluZz4mIHBhcmFtZXRlclZhcmlhYmxlcygpIHsg
cmV0dXJuIG1fcGFyYW1ldGVyVmFyaWFibGVzOyB9CisKK3Byb3RlY3RlZDoKKyAgICBTdHJpbmcg
cmVzb3VyY2VIZWxwZXJUeXBlcygpOworICAgIE9wdGlvbmFsPFN0cmluZz4gcmVzb3VyY2VTaWdu
YXR1cmUoKTsKKyAgICBPcHRpb25hbDxTdHJpbmc+IGJ1aWx0SW5zU2lnbmF0dXJlKCk7CisKKyAg
ICBTdHJpbmcgbWFuZ2xlZElucHV0UGF0aChWZWN0b3I8U3RyaW5nPiYgcGF0aCk7CisgICAgU3Ry
aW5nIG1hbmdsZWRPdXRwdXRQYXRoKFZlY3RvcjxTdHJpbmc+JiBwYXRoKTsKKyAgICBTdHJpbmcg
dW5wYWNrUmVzb3VyY2VzQW5kTmFtZWRCdWlsdElucygpOworCisgICAgQVNUOjpGdW5jdGlvbkRl
ZmluaXRpb24mIG1fZnVuY3Rpb25EZWZpbml0aW9uOworICAgIEludHJpbnNpY3MmIG1faW50cmlu
c2ljczsKKyAgICBUeXBlTmFtZXImIG1fdHlwZU5hbWVyOworICAgIEVudHJ5UG9pbnRJdGVtcyYg
bV9lbnRyeVBvaW50SXRlbXM7CisgICAgSGFzaE1hcDxCaW5kaW5nKiwgc2l6ZV90PiYgbV9yZXNv
dXJjZU1hcDsKKyAgICBMYXlvdXQmIG1fbGF5b3V0OworICAgIHN0ZDo6ZnVuY3Rpb248U3RyaW5n
KCk+IG1fZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lOworCisgICAgc3RydWN0IE5hbWVkQmluZGlu
ZyB7CisgICAgICAgIFN0cmluZyBlbGVtZW50TmFtZTsKKyAgICAgICAgdW5zaWduZWQgaW5kZXg7
CisgICAgfTsKKyAgICBzdHJ1Y3QgTmFtZWRCaW5kR3JvdXAgeworICAgICAgICBTdHJpbmcgc3Ry
dWN0TmFtZTsKKyAgICAgICAgU3RyaW5nIHZhcmlhYmxlTmFtZTsKKyAgICAgICAgVmVjdG9yPE5h
bWVkQmluZGluZz4gbmFtZWRCaW5kaW5nczsKKyAgICAgICAgdW5zaWduZWQgYXJndW1lbnRCdWZm
ZXJJbmRleDsKKyAgICB9OworICAgIFZlY3RvcjxOYW1lZEJpbmRHcm91cD4gbV9uYW1lZEJpbmRH
cm91cHM7IC8vIFBhcmFsbGVsIHRvIG1fbGF5b3V0CisKKyAgICBzdHJ1Y3QgTmFtZWRCdWlsdElu
IHsKKyAgICAgICAgc2l6ZV90IGluZGV4SW5FbnRyeVBvaW50SXRlbXM7CisgICAgICAgIFN0cmlu
ZyB2YXJpYWJsZU5hbWU7CisgICAgfTsKKyAgICBWZWN0b3I8TmFtZWRCdWlsdEluPiBtX25hbWVk
QnVpbHRJbnM7CisKKyAgICBWZWN0b3I8U3RyaW5nPiBtX3BhcmFtZXRlclZhcmlhYmxlczsKK307
CisKK2NsYXNzIFZlcnRleEVudHJ5UG9pbnRTY2FmZm9sZGluZyA6IHB1YmxpYyBFbnRyeVBvaW50
U2NhZmZvbGRpbmcgeworcHVibGljOgorICAgIFZlcnRleEVudHJ5UG9pbnRTY2FmZm9sZGluZyhB
U1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYsIEludHJpbnNpY3MmLCBUeXBlTmFtZXImLCBFbnRyeVBv
aW50SXRlbXMmLCBIYXNoTWFwPEJpbmRpbmcqLCBzaXplX3Q+JiByZXNvdXJjZU1hcCwgTGF5b3V0
Jiwgc3RkOjpmdW5jdGlvbjxTdHJpbmcoKT4mJiBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUsIEhh
c2hNYXA8VmVydGV4QXR0cmlidXRlKiwgc2l6ZV90PiYgbWF0Y2hlZFZlcnRleEF0dHJpYnV0ZXMp
OworICAgIHZpcnR1YWwgflZlcnRleEVudHJ5UG9pbnRTY2FmZm9sZGluZygpID0gZGVmYXVsdDsK
KworICAgIFN0cmluZyBoZWxwZXJUeXBlcygpIG92ZXJyaWRlOworICAgIFN0cmluZyBzaWduYXR1
cmUoU3RyaW5nJiBmdW5jdGlvbk5hbWUpIG92ZXJyaWRlOworICAgIFN0cmluZyB1bnBhY2soKSBv
dmVycmlkZTsKKyAgICBTdHJpbmcgcGFjayhjb25zdCBTdHJpbmcmIGV4aXN0aW5nVmFyaWFibGVO
YW1lLCBjb25zdCBTdHJpbmcmIHZhcmlhYmxlTmFtZSkgb3ZlcnJpZGU7CisKK3ByaXZhdGU6Cisg
ICAgSGFzaE1hcDxWZXJ0ZXhBdHRyaWJ1dGUqLCBzaXplX3Q+JiBtX21hdGNoZWRWZXJ0ZXhBdHRy
aWJ1dGVzOworICAgIFN0cmluZyBtX3N0YWdlSW5TdHJ1Y3ROYW1lOworICAgIFN0cmluZyBtX3Jl
dHVyblN0cnVjdE5hbWU7CisgICAgU3RyaW5nIG1fc3RhZ2VJblBhcmFtZXRlck5hbWU7CisKKyAg
ICBzdHJ1Y3QgTmFtZWRTdGFnZUluIHsKKyAgICAgICAgc2l6ZV90IGluZGV4SW5FbnRyeVBvaW50
SXRlbXM7CisgICAgICAgIFN0cmluZyBlbGVtZW50TmFtZTsKKyAgICAgICAgdW5zaWduZWQgYXR0
cmlidXRlSW5kZXg7CisgICAgfTsKKyAgICBWZWN0b3I8TmFtZWRTdGFnZUluPiBtX25hbWVkU3Rh
Z2VJbnM7CisKKyAgICBzdHJ1Y3QgTmFtZWRPdXRwdXQgeworICAgICAgICBTdHJpbmcgZWxlbWVu
dE5hbWU7CisgICAgfTsKKyAgICBWZWN0b3I8TmFtZWRPdXRwdXQ+IG1fbmFtZWRPdXRwdXRzOwor
fTsKKworY2xhc3MgRnJhZ21lbnRFbnRyeVBvaW50U2NhZmZvbGRpbmcgOiBwdWJsaWMgRW50cnlQ
b2ludFNjYWZmb2xkaW5nIHsKK3B1YmxpYzoKKyAgICBGcmFnbWVudEVudHJ5UG9pbnRTY2FmZm9s
ZGluZyhBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYsIEludHJpbnNpY3MmLCBUeXBlTmFtZXImLCBF
bnRyeVBvaW50SXRlbXMmLCBIYXNoTWFwPEJpbmRpbmcqLCBzaXplX3Q+JiByZXNvdXJjZU1hcCwg
TGF5b3V0Jiwgc3RkOjpmdW5jdGlvbjxTdHJpbmcoKT4mJiBnZW5lcmF0ZU5leHRWYXJpYWJsZU5h
bWUsIEhhc2hNYXA8QXR0YWNobWVudERlc2NyaXB0b3IqLCBzaXplX3Q+JiBtYXRjaGVkQ29sb3JB
dHRhY2htZW50cyk7CisgICAgdmlydHVhbCB+RnJhZ21lbnRFbnRyeVBvaW50U2NhZmZvbGRpbmco
KSA9IGRlZmF1bHQ7CisKKyAgICBTdHJpbmcgaGVscGVyVHlwZXMoKSBvdmVycmlkZTsKKyAgICBT
dHJpbmcgc2lnbmF0dXJlKFN0cmluZyYgZnVuY3Rpb25OYW1lKSBvdmVycmlkZTsKKyAgICBTdHJp
bmcgdW5wYWNrKCkgb3ZlcnJpZGU7CisgICAgU3RyaW5nIHBhY2soY29uc3QgU3RyaW5nJiBleGlz
dGluZ1ZhcmlhYmxlTmFtZSwgY29uc3QgU3RyaW5nJiB2YXJpYWJsZU5hbWUpIG92ZXJyaWRlOwor
Citwcml2YXRlOgorICAgIFN0cmluZyBtX3N0YWdlSW5TdHJ1Y3ROYW1lOworICAgIFN0cmluZyBt
X3JldHVyblN0cnVjdE5hbWU7CisgICAgU3RyaW5nIG1fc3RhZ2VJblBhcmFtZXRlck5hbWU7CisK
KyAgICBzdHJ1Y3QgTmFtZWRTdGFnZUluIHsKKyAgICAgICAgc2l6ZV90IGluZGV4SW5FbnRyeVBv
aW50SXRlbXM7CisgICAgICAgIFN0cmluZyBlbGVtZW50TmFtZTsKKyAgICAgICAgdW5zaWduZWQg
YXR0cmlidXRlSW5kZXg7CisgICAgfTsKKyAgICBWZWN0b3I8TmFtZWRTdGFnZUluPiBtX25hbWVk
U3RhZ2VJbnM7CisKKyAgICBzdHJ1Y3QgTmFtZWRPdXRwdXQgeworICAgICAgICBTdHJpbmcgZWxl
bWVudE5hbWU7CisgICAgfTsKKyAgICBWZWN0b3I8TmFtZWRPdXRwdXQ+IG1fbmFtZWRPdXRwdXRz
OworfTsKKworY2xhc3MgQ29tcHV0ZUVudHJ5UG9pbnRTY2FmZm9sZGluZyA6IHB1YmxpYyBFbnRy
eVBvaW50U2NhZmZvbGRpbmcgeworcHVibGljOgorICAgIENvbXB1dGVFbnRyeVBvaW50U2NhZmZv
bGRpbmcoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mLCBJbnRyaW5zaWNzJiwgVHlwZU5hbWVyJiwg
RW50cnlQb2ludEl0ZW1zJiwgSGFzaE1hcDxCaW5kaW5nKiwgc2l6ZV90PiYgcmVzb3VyY2VNYXAs
IExheW91dCYsIHN0ZDo6ZnVuY3Rpb248U3RyaW5nKCk+JiYgZ2VuZXJhdGVOZXh0VmFyaWFibGVO
YW1lKTsKKyAgICB2aXJ0dWFsIH5Db21wdXRlRW50cnlQb2ludFNjYWZmb2xkaW5nKCkgPSBkZWZh
dWx0OwogCi0gICAgU3RyaW5nIGhlbHBlclR5cGVzKCk7Ci0gICAgU3RyaW5nIHNpZ25hdHVyZSgp
OwotICAgIFN0cmluZyB1bnBhY2soKTsKLSAgICBTdHJpbmcgcGFjayhjb25zdCBTdHJpbmcmIGV4
aXN0aW5nVmFyaWFibGVOYW1lLCBjb25zdCBTdHJpbmcmIHZhcmlhYmxlTmFtZSk7CisgICAgU3Ry
aW5nIGhlbHBlclR5cGVzKCkgb3ZlcnJpZGU7CisgICAgU3RyaW5nIHNpZ25hdHVyZShTdHJpbmcm
IGZ1bmN0aW9uTmFtZSkgb3ZlcnJpZGU7CisgICAgU3RyaW5nIHVucGFjaygpIG92ZXJyaWRlOwor
ICAgIFN0cmluZyBwYWNrKGNvbnN0IFN0cmluZyYgZXhpc3RpbmdWYXJpYWJsZU5hbWUsIGNvbnN0
IFN0cmluZyYgdmFyaWFibGVOYW1lKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKLSAgICBBU1Q6OkZ1
bmN0aW9uRGVmaW5pdGlvbiogbV9mdW5jdGlvbkRlZmluaXRpb247Ci0gICAgSW50cmluc2ljcyog
bV9pbnRyaW5zaWNzOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xGdW5jdGlvbldyaXRlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVyLmNwcApp
bmRleCAwMTlhMjY3YmJjOGJlNmZkMjdlYTBlMTA4ZjgxYjc5NDI4ZDUwY2Y2Li44NDk4MWUzOTNk
OWFjZjM1MGExYzQxZjM1ZmVjNmM0MDY5YTZmYzA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9u
V3JpdGVyLmNwcApAQCAtMTEwLDEwICsxMTAsMTIgQEAgcHJpdmF0ZToKIAogY2xhc3MgRnVuY3Rp
b25EZWZpbml0aW9uV3JpdGVyIDogcHVibGljIFZpc2l0b3IgewogcHVibGljOgotICAgIEZ1bmN0
aW9uRGVmaW5pdGlvbldyaXRlcihJbnRyaW5zaWNzJiBpbnRyaW5zaWNzLCBUeXBlTmFtZXImIHR5
cGVOYW1lciwgSGFzaE1hcDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qLCBTdHJpbmc+JiBmdW5j
dGlvbk1hcHBpbmcpCisgICAgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyKEludHJpbnNpY3MmIGlu
dHJpbnNpY3MsIFR5cGVOYW1lciYgdHlwZU5hbWVyLCBIYXNoTWFwPEFTVDo6RnVuY3Rpb25EZWNs
YXJhdGlvbiosIFN0cmluZz4mIGZ1bmN0aW9uTWFwcGluZywgVmFyaWFudDxNYXRjaGVkUmVuZGVy
U2VtYW50aWNzLCBNYXRjaGVkQ29tcHV0ZVNlbWFudGljcz4mJiBtYXRjaGVkU2VtYW50aWNzLCBM
YXlvdXQmIGxheW91dCkKICAgICAgICAgOiBtX2ludHJpbnNpY3MoaW50cmluc2ljcykKICAgICAg
ICAgLCBtX3R5cGVOYW1lcih0eXBlTmFtZXIpCiAgICAgICAgICwgbV9mdW5jdGlvbk1hcHBpbmco
ZnVuY3Rpb25NYXBwaW5nKQorICAgICAgICAsIG1fbWF0Y2hlZFNlbWFudGljcyhXVEZNb3ZlKG1h
dGNoZWRTZW1hbnRpY3MpKQorICAgICAgICAsIG1fbGF5b3V0KGxheW91dCkKICAgICB7CiAgICAg
fQogCkBAIC0xMzMsMTYgKzEzNSwzNCBAQCBwdWJsaWM6CiAgICAgICAgIGF1dG8gaXRlcmF0b3Ig
PSBtX2Z1bmN0aW9uTWFwcGluZy5maW5kKCZmdW5jdGlvbkRlZmluaXRpb24pOwogICAgICAgICBB
U1NFUlQoaXRlcmF0b3IgIT0gbV9mdW5jdGlvbk1hcHBpbmcuZW5kKCkpOwogICAgICAgICBpZiAo
ZnVuY3Rpb25EZWZpbml0aW9uLmVudHJ5UG9pbnRUeXBlKCkpIHsKLSAgICAgICAgICAgIG1fZW50
cnlQb2ludFNjYWZmb2xkaW5nID0gRW50cnlQb2ludFNjYWZmb2xkaW5nKGZ1bmN0aW9uRGVmaW5p
dGlvbiwgbV9pbnRyaW5zaWNzKTsKKyAgICAgICAgICAgIGF1dG8gZ2VuZXJhdGVOZXh0VmFyaWFi
bGVOYW1lID0gW3RoaXNdKCkgLT4gU3RyaW5nIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhp
cy0+Z2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7CisgICAgICAgICAgICB9OworICAgICAgICAg
ICAgV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShNYXRjaGVkUmVuZGVyU2VtYW50aWNz
JiBtYXRjaGVkUmVuZGVyU2VtYW50aWNzKSB7CisgICAgICAgICAgICAgICAgaWYgKCZmdW5jdGlv
bkRlZmluaXRpb24gPT0gbWF0Y2hlZFJlbmRlclNlbWFudGljcy52ZXJ0ZXhTaGFkZXIpCisgICAg
ICAgICAgICAgICAgICAgIG1fZW50cnlQb2ludFNjYWZmb2xkaW5nID0gc3RkOjptYWtlX3VuaXF1
ZTxWZXJ0ZXhFbnRyeVBvaW50U2NhZmZvbGRpbmc+KGZ1bmN0aW9uRGVmaW5pdGlvbiwgbV9pbnRy
aW5zaWNzLCBtX3R5cGVOYW1lciwgbWF0Y2hlZFJlbmRlclNlbWFudGljcy52ZXJ0ZXhTaGFkZXJF
bnRyeVBvaW50SXRlbXMsIG1hdGNoZWRSZW5kZXJTZW1hbnRpY3MudmVydGV4U2hhZGVyUmVzb3Vy
Y2VNYXAsIG1fbGF5b3V0LCBXVEZNb3ZlKGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSksIG1hdGNo
ZWRSZW5kZXJTZW1hbnRpY3MubWF0Y2hlZFZlcnRleEF0dHJpYnV0ZXMpOworICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKCZmdW5jdGlvbkRlZmluaXRpb24gPT0gbWF0Y2hlZFJlbmRlclNlbWFudGlj
cy5mcmFnbWVudFNoYWRlcikKKyAgICAgICAgICAgICAgICAgICAgbV9lbnRyeVBvaW50U2NhZmZv
bGRpbmcgPSBzdGQ6Om1ha2VfdW5pcXVlPEZyYWdtZW50RW50cnlQb2ludFNjYWZmb2xkaW5nPihm
dW5jdGlvbkRlZmluaXRpb24sIG1faW50cmluc2ljcywgbV90eXBlTmFtZXIsIG1hdGNoZWRSZW5k
ZXJTZW1hbnRpY3MuZnJhZ21lbnRTaGFkZXJFbnRyeVBvaW50SXRlbXMsIG1hdGNoZWRSZW5kZXJT
ZW1hbnRpY3MuZnJhZ21lbnRTaGFkZXJSZXNvdXJjZU1hcCwgbV9sYXlvdXQsIFdURk1vdmUoZ2Vu
ZXJhdGVOZXh0VmFyaWFibGVOYW1lKSwgbWF0Y2hlZFJlbmRlclNlbWFudGljcy5tYXRjaGVkQ29s
b3JBdHRhY2htZW50cyk7CisgICAgICAgICAgICB9LCBbJl0oTWF0Y2hlZENvbXB1dGVTZW1hbnRp
Y3MmIG1hdGNoZWRDb21wdXRlU2VtYW50aWNzKSB7CisgICAgICAgICAgICAgICAgaWYgKCZmdW5j
dGlvbkRlZmluaXRpb24gPT0gbWF0Y2hlZENvbXB1dGVTZW1hbnRpY3Muc2hhZGVyKQorICAgICAg
ICAgICAgICAgICAgICBtX2VudHJ5UG9pbnRTY2FmZm9sZGluZyA9IHN0ZDo6bWFrZV91bmlxdWU8
Q29tcHV0ZUVudHJ5UG9pbnRTY2FmZm9sZGluZz4oZnVuY3Rpb25EZWZpbml0aW9uLCBtX2ludHJp
bnNpY3MsIG1fdHlwZU5hbWVyLCBtYXRjaGVkQ29tcHV0ZVNlbWFudGljcy5lbnRyeVBvaW50SXRl
bXMsIG1hdGNoZWRDb21wdXRlU2VtYW50aWNzLnJlc291cmNlTWFwLCBtX2xheW91dCwgV1RGTW92
ZShnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUpKTsKKyAgICAgICAgICAgIH0pLCBtX21hdGNoZWRT
ZW1hbnRpY3MpOworICAgICAgICAgICAgaWYgKCFtX2VudHJ5UG9pbnRTY2FmZm9sZGluZykKKyAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5k
KG1fZW50cnlQb2ludFNjYWZmb2xkaW5nLT5oZWxwZXJUeXBlcygpKTsKICAgICAgICAgICAgIG1f
c3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIu
YXBwZW5kKG1ha2VTdHJpbmcobV9lbnRyeVBvaW50U2NhZmZvbGRpbmctPnNpZ25hdHVyZSgpLCAi
IHsiKSk7CisgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobV9l
bnRyeVBvaW50U2NhZmZvbGRpbmctPnNpZ25hdHVyZShpdGVyYXRvci0+dmFsdWUpLCAiIHsiKSk7
CiAgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1fZW50cnlQb2ludFNjYWZmb2xk
aW5nLT51bnBhY2soKSk7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZ1bmN0
aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAg
ICBhdXRvIGFkZFJlc3VsdCA9IG1fdmFyaWFibGVNYXBwaW5nLmFkZCgmZnVuY3Rpb25EZWZpbml0
aW9uLnBhcmFtZXRlcnMoKVtpXSwgbV9lbnRyeVBvaW50U2NhZmZvbGRpbmctPnBhcmFtZXRlclZh
cmlhYmxlcygpW2ldKTsKKyAgICAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwg
YWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgY2hlY2tF
cnJvckFuZFZpc2l0KGZ1bmN0aW9uRGVmaW5pdGlvbi5ibG9jaygpKTsKICAgICAgICAgICAgIEFT
U0VSVChtX3N0YWNrLmlzRW1wdHkoKSk7CiAgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBw
ZW5kKCJ9XG4iKTsKKyAgICAgICAgICAgIG1fZW50cnlQb2ludFNjYWZmb2xkaW5nID0gbnVsbHB0
cjsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1fZW50cnlQb2ludFNjYWZmb2xkaW5n
ID0gV1RGOjpudWxsb3B0OworICAgICAgICAgICAgQVNTRVJUKG1fZW50cnlQb2ludFNjYWZmb2xk
aW5nID09IG51bGxwdHIpOwogICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtl
U3RyaW5nKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShmdW5jdGlvbkRlZmluaXRpb24u
dHlwZSgpKSwgJyAnLCBpdGVyYXRvci0+dmFsdWUsICcoJykpOwogICAgICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpLnNpemUoKTsg
KytpKSB7CiAgICAgICAgICAgICAgICAgYXV0byYgcGFyYW1ldGVyID0gZnVuY3Rpb25EZWZpbml0
aW9uLnBhcmFtZXRlcnMoKVtpXTsKQEAgLTU3OSwxMSArNTk5LDEzIEBAIHByaXZhdGU6CiAgICAg
SGFzaE1hcDxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24qLCBTdHJpbmc+IG1fdmFyaWFibGVNYXBw
aW5nOwogICAgIFN0cmluZ0J1aWxkZXIgbV9zdHJpbmdCdWlsZGVyOwogICAgIFZlY3RvcjxTdHJp
bmc+IG1fc3RhY2s7Ci0gICAgT3B0aW9uYWw8RW50cnlQb2ludFNjYWZmb2xkaW5nPiBtX2VudHJ5
UG9pbnRTY2FmZm9sZGluZzsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RW50cnlQb2ludFNjYWZmb2xk
aW5nPiBtX2VudHJ5UG9pbnRTY2FmZm9sZGluZzsKKyAgICBWYXJpYW50PE1hdGNoZWRSZW5kZXJT
ZW1hbnRpY3MsIE1hdGNoZWRDb21wdXRlU2VtYW50aWNzPiBtX21hdGNoZWRTZW1hbnRpY3M7Cisg
ICAgTGF5b3V0JiBtX2xheW91dDsKICAgICB1bnNpZ25lZCBtX3ZhcmlhYmxlQ291bnQgeyAwIH07
CiB9OwogCi1TdHJpbmcgbWV0YWxGdW5jdGlvbnMoUHJvZ3JhbSYgcHJvZ3JhbSwgVHlwZU5hbWVy
JiB0eXBlTmFtZXIpCitTdHJpbmcgbWV0YWxGdW5jdGlvbnMoUHJvZ3JhbSYgcHJvZ3JhbSwgVHlw
ZU5hbWVyJiB0eXBlTmFtZXIsIFZhcmlhbnQ8TWF0Y2hlZFJlbmRlclNlbWFudGljcywgTWF0Y2hl
ZENvbXB1dGVTZW1hbnRpY3M+JiYgbWF0Y2hlZFNlbWFudGljcywgTGF5b3V0JiBsYXlvdXQpCiB7
CiAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwogCkBAIC02MTIsNyArNjM0LDcgQEAg
U3RyaW5nIG1ldGFsRnVuY3Rpb25zKFByb2dyYW0mIHByb2dyYW0sIFR5cGVOYW1lciYgdHlwZU5h
bWVyKQogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwogCiAgICAgewotICAgICAgICBG
dW5jdGlvbkRlZmluaXRpb25Xcml0ZXIgZnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyKHByb2dyYW0u
aW50cmluc2ljcygpLCB0eXBlTmFtZXIsIGZ1bmN0aW9uTWFwcGluZyk7CisgICAgICAgIEZ1bmN0
aW9uRGVmaW5pdGlvbldyaXRlciBmdW5jdGlvbkRlZmluaXRpb25Xcml0ZXIocHJvZ3JhbS5pbnRy
aW5zaWNzKCksIHR5cGVOYW1lciwgZnVuY3Rpb25NYXBwaW5nLCBXVEZNb3ZlKG1hdGNoZWRTZW1h
bnRpY3MpLCBsYXlvdXQpOwogICAgICAgICBmb3IgKGF1dG8mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24gOiBwcm9ncmFtLm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25zKCkpCiAgICAgICAgICAg
ICBmdW5jdGlvbkRlZmluaXRpb25Xcml0ZXIudmlzaXQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bik7CiAgICAgICAgIGZvciAoYXV0byYgZnVuY3Rpb25EZWZpbml0aW9uIDogcHJvZ3JhbS5mdW5j
dGlvbkRlZmluaXRpb25zKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVyLmgKaW5kZXggOTk2
MGU1ZTQ4ZDU4YzI0ZTM1ZTUyODM4MjQ1NjQ3MmI3ZDA5YjZkNy4uZDdkMmI4ZGFiMjZiNWE1NGEz
NzZiODExN2FiM2ZkNTFiZDJhNGUzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xGdW5jdGlvbldyaXRlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRnVuY3Rpb25Xcml0ZXIuaApA
QCAtMjcsNiArMjcsOCBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAorI2luY2x1ZGUgIldITFNM
U2VtYW50aWNNYXRjaGVyLmgiCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNlIFdI
TFNMIHsKQEAgLTM3LDcgKzM5LDcgQEAgbmFtZXNwYWNlIE1ldGFsIHsKIAogY2xhc3MgVHlwZU5h
bWVyOwogCi1TdHJpbmcgbWV0YWxGdW5jdGlvbnMoUHJvZ3JhbSYsIFR5cGVOYW1lciYpOworU3Ry
aW5nIG1ldGFsRnVuY3Rpb25zKFByb2dyYW0mLCBUeXBlTmFtZXImLCBWYXJpYW50PE1hdGNoZWRS
ZW5kZXJTZW1hbnRpY3MsIE1hdGNoZWRDb21wdXRlU2VtYW50aWNzPiYmLCBMYXlvdXQmKTsKIAog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRh
bC9XSExTTE1ldGFsQ29kZUdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9NZXRhbC9XSExTTE1ldGFsQ29kZUdlbmVyYXRvci5jcHAKaW5kZXggMTBjMDUz
MGUyOTBkNzA0MTc2N2Y3MTgyMzI3MGQzYjkyNTk3YjU0Yi4uMmVjNTc1NmQzZDQ3YzViMDYzN2Q5
NmRjNDcyNmI4Nzc5ZTYzNjdhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xNZXRhbENvZGVHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMTWV0YWxDb2RlR2VuZXJh
dG9yLmNwcApAQCAtMzgsNyArMzgsNyBAQCBuYW1lc3BhY2UgV0hMU0wgewogCiBuYW1lc3BhY2Ug
TWV0YWwgewogCi1TdHJpbmcgZ2VuZXJhdGVNZXRhbENvZGUoUHJvZ3JhbSYgcHJvZ3JhbSkKK1N0
cmluZyBnZW5lcmF0ZU1ldGFsQ29kZShQcm9ncmFtJiBwcm9ncmFtLCBWYXJpYW50PE1hdGNoZWRS
ZW5kZXJTZW1hbnRpY3MsIE1hdGNoZWRDb21wdXRlU2VtYW50aWNzPiYmIG1hdGNoZWRTZW1hbnRp
Y3MsIExheW91dCYgbGF5b3V0KQogewogICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsK
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiI2luY2x1ZGUgPG1ldGFsX3N0ZGxpYj5cbiIpOwpA
QCAtNTMsNyArNTMsNyBAQCBTdHJpbmcgZ2VuZXJhdGVNZXRhbENvZGUoUHJvZ3JhbSYgcHJvZ3Jh
bSkKIAogICAgIFR5cGVOYW1lciB0eXBlTmFtZXIocHJvZ3JhbSk7CiAgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQodHlwZU5hbWVyLm1ldGFsVHlwZXMoKSk7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQobWV0YWxGdW5jdGlvbnMocHJvZ3JhbSwgdHlwZU5hbWVyKSk7CisgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQobWV0YWxGdW5jdGlvbnMocHJvZ3JhbSwgdHlwZU5hbWVyLCBXVEZNb3ZlKG1hdGNo
ZWRTZW1hbnRpY3MpLCBsYXlvdXQpKTsKICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmlu
ZygpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9NZXRhbC9XSExTTE1ldGFsQ29kZUdlbmVyYXRvci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xNZXRhbENvZGVHZW5lcmF0b3IuaAppbmRleCBlMDg4
ZTAxMDQ0OTk0ODQxMTA3NTY3NDM0NzQ5MWY3M2QzNmEyMzRmLi43ZWE3M2I4ZDNjMTcxNDJkZWUy
ZTM1MTI1OTQxOWJkOWE3MDI3YTM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE1ldGFsQ29kZUdlbmVyYXRvci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMTWV0YWxDb2RlR2VuZXJh
dG9yLmgKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAKKyNpbmNsdWRl
IDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CkBAIC0zOCw3ICszOSw3IEBAIGNsYXNzIFByb2dyYW07CiBuYW1lc3Bh
Y2UgTWV0YWwgewogCiAvLyBGSVhNRTogVGhpcyBuZWVkcyB0byBrbm93IGFib3V0IHRoZSBwaXBl
bGluZSBzdGF0ZSBvYmplY3QgdG8gZW1pdCBmdW5jdGlvbiBwcm9sb2d1ZXMgYW5kIGVwaWxvZ3Vl
cy4KLVN0cmluZyBnZW5lcmF0ZU1ldGFsQ29kZShQcm9ncmFtJik7CitTdHJpbmcgZ2VuZXJhdGVN
ZXRhbENvZGUoUHJvZ3JhbSYsIFZhcmlhbnQ8TWF0Y2hlZFJlbmRlclNlbWFudGljcywgTWF0Y2hl
ZENvbXB1dGVTZW1hbnRpY3M+JiYgbWF0Y2hlZFNlbWFudGljcywgTGF5b3V0Jik7CiAKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbnRy
aW5zaWNzLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEludHJp
bnNpY3MuaAppbmRleCA4NDEwYzhiNzM5MmM3ZjAwMTQ0YTkwMWQ1ZWM0NjJkNDk2YWJhODFjLi5m
YzQ3ZDMyOTM1NDBkZjZjY2E1MzY2MzFkNGM5ZmJkMmVjZTg5NzlmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEludHJpbnNpY3MuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEludHJpbnNpY3MuaApAQCAt
ODIsNiArODIsMTIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gKm1fZmxvYXRUeXBlOwogICAg
IH0KIAorICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBmbG9hdDJUeXBlKCkgY29uc3QK
KyAgICB7CisgICAgICAgIEFTU0VSVChtX3ZlY3RvckZsb2F0WzBdKTsKKyAgICAgICAgcmV0dXJu
ICptX3ZlY3RvckZsb2F0WzBdOworICAgIH0KKwogICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0
aW9uJiBmbG9hdDNUeXBlKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3ZlY3RvckZs
b2F0WzFdKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMUGlwZWxpbmVEZXNjcmlwdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTFBpcGVsaW5lRGVzY3JpcHRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBmMjg2OTJjMTg0
YmJmNmEwNjFmYzc5NDI1MjUyNDUwOTIxMjJhYjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBpcGVsaW5lRGVzY3JpcHRvci5oCkBA
IC0wLDAgKzEsMTE2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUo
V0VCR1BVKQorCisjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgorI2luY2x1ZGUgPHd0Zi9WYXJp
YW50Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K25hbWVzcGFjZSBXSExTTCB7CisKK2VudW0gY2xhc3MgVmVydGV4Rm9ybWF0IDogdWludDhfdCB7
CisgICAgRmxvYXRSMzJHMzJCMzJBMzIsCisgICAgRmxvYXRSMzJHMzJCMzIsCisgICAgRmxvYXRS
MzJHMzIsCisgICAgRmxvYXRSMzIKK307CisKK3N0cnVjdCBWZXJ0ZXhBdHRyaWJ1dGUgeworICAg
IFZlcnRleEZvcm1hdCB2ZXJ0ZXhGb3JtYXQ7CisgICAgdW5zaWduZWQgbmFtZTsKK307CisKK3Vz
aW5nIFZlcnRleEF0dHJpYnV0ZXMgPSBWZWN0b3I8VmVydGV4QXR0cmlidXRlPjsKKworZW51bSBj
bGFzcyBUZXh0dXJlRm9ybWF0IHsKKyAgICBSOEc4QjhBOFVub3JtLAorICAgIFI4RzhCOEE4VWlu
dCwKKyAgICBCOEc4UjhBOFVub3JtLAorICAgIEQzMkZsb2F0UzhVaW50Cit9OworCitzdHJ1Y3Qg
QXR0YWNobWVudERlc2NyaXB0b3IgeworICAgIFRleHR1cmVGb3JtYXQgdGV4dHVyZUZvcm1hdDsK
KyAgICB1bnNpZ25lZCBuYW1lOworfTsKKworc3RydWN0IEF0dGFjaG1lbnRzU3RhdGVEZXNjcmlw
dG9yIHsKKyAgICBWZWN0b3I8QXR0YWNobWVudERlc2NyaXB0b3I+IGF0dGFjaG1lbnREZXNjcmlw
dG9yczsKKyAgICBPcHRpb25hbDxBdHRhY2htZW50RGVzY3JpcHRvcj4gZGVwdGhTdGVuY2lsQXR0
YWNobWVudERlc2NyaXB0b3I7Cit9OworCitlbnVtIGNsYXNzIFNoYWRlclN0YWdlIDogdWludDhf
dCB7CisgICAgTm9uZSA9IDAsCisgICAgVmVydGV4ID0gMSA8PCAwLAorICAgIEZyYWdtZW50ID0g
MSA8PCAxLAorICAgIENvbXB1dGUgPSAxIDw8IDIKK307CisKK2VudW0gY2xhc3MgQmluZGluZ1R5
cGUgOiB1aW50OF90IHsKKyAgICBVbmlmb3JtQnVmZmVyLAorICAgIFNhbXBsZXIsCisgICAgVGV4
dHVyZSwKKyAgICBTdG9yYWdlQnVmZmVyLAorICAgIC8vIEZJWE1FOiBBZGQgdGhlIGR5bmFtaWMg
dHlwZXMKK307CisKK3N0cnVjdCBCaW5kaW5nIHsKKyAgICBPcHRpb25TZXQ8U2hhZGVyU3RhZ2U+
IHZpc2liaWxpdHk7CisgICAgQmluZGluZ1R5cGUgYmluZGluZ1R5cGU7CisgICAgdW5zaWduZWQg
bmFtZTsKK307CisKK3N0cnVjdCBCaW5kR3JvdXAgeworICAgIFZlY3RvcjxCaW5kaW5nPiBiaW5k
aW5nczsKKyAgICB1bnNpZ25lZCBuYW1lOworfTsKKwordXNpbmcgTGF5b3V0ID0gVmVjdG9yPEJp
bmRHcm91cD47CisKK3N0cnVjdCBSZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgeworICAgIFZlcnRl
eEF0dHJpYnV0ZXMgdmVydGV4QXR0cmlidXRlczsKKyAgICBBdHRhY2htZW50c1N0YXRlRGVzY3Jp
cHRvciBhdHRhY2htZW50c1N0YXRlRGVzY3JpcHRvcjsKKyAgICBMYXlvdXQgbGF5b3V0OworICAg
IFN0cmluZyB2ZXJ0ZXhFbnRyeVBvaW50TmFtZTsKKyAgICBTdHJpbmcgZnJhZ21lbnRFbnRyeVBv
aW50TmFtZTsKK307CisKK3N0cnVjdCBDb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yIHsKKyAgICBM
YXlvdXQgbGF5b3V0OworICAgIFN0cmluZyBlbnRyeVBvaW50TmFtZTsKK307CisKK3VzaW5nIFBp
cGVsaW5lRGVzY3JpcHRvciA9IFZhcmlhbnQ8UmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yLCBDb21w
dXRlUGlwZWxpbmVEZXNjcmlwdG9yPjsKKworfSAvLyBuYW1lc3BhY2UgV0hMU0wKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdQVSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU2VtYW50aWNNYXRjaGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU2VtYW50aWNN
YXRjaGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wYmRjYzBjZThmMWRhNTc2YzViZjczNGI5MzZlNmM2YTk3
OTMyOThhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xTZW1hbnRpY01hdGNoZXIuY3BwCkBAIC0wLDAgKzEsMzAzIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldITFNMU2VtYW50aWNNYXRjaGVy
LmgiCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xCdWlsdEluU2VtYW50
aWMuaCIKKyNpbmNsdWRlICJXSExTTEZ1bmN0aW9uRGVmaW5pdGlvbi5oIgorI2luY2x1ZGUgIldI
TFNMR2F0aGVyRW50cnlQb2ludEl0ZW1zLmgiCisjaW5jbHVkZSAiV0hMU0xJbmZlclR5cGVzLmgi
CisjaW5jbHVkZSAiV0hMU0xQaXBlbGluZURlc2NyaXB0b3IuaCIKKyNpbmNsdWRlICJXSExTTFBy
b2dyYW0uaCIKKyNpbmNsdWRlICJXSExTTFJlc291cmNlU2VtYW50aWMuaCIKKyNpbmNsdWRlICJX
SExTTFN0YWdlSW5PdXRTZW1hbnRpYy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5j
bHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3Bh
Y2UgV0hMU0wgeworCitzdGF0aWMgQVNUOjpGdW5jdGlvbkRlZmluaXRpb24qIGZpbmRFbnRyeVBv
aW50KFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpGdW5jdGlvbkRlZmluaXRpb24+PiYgZnVuY3Rpb25E
ZWZpbml0aW9ucywgU3RyaW5nJiBuYW1lKQoreworICAgIGF1dG8gaXRlcmF0b3IgPSBzdGQ6OmZp
bmRfaWYoZnVuY3Rpb25EZWZpbml0aW9ucy5iZWdpbigpLCBmdW5jdGlvbkRlZmluaXRpb25zLmVu
ZCgpLCBbJl0oQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbikgewor
ICAgICAgICByZXR1cm4gZnVuY3Rpb25EZWZpbml0aW9uLmVudHJ5UG9pbnRUeXBlKCkgJiYgZnVu
Y3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSBuYW1lOworICAgIH0pOworICAgIGlmIChpdGVyYXRv
ciA9PSBmdW5jdGlvbkRlZmluaXRpb25zLmVuZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICByZXR1cm4gJippdGVyYXRvcjsKK307CisKK3N0YXRpYyBib29sIG1hdGNoTW9kZShCaW5k
aW5nVHlwZSBiaW5kaW5nVHlwZSwgQVNUOjpSZXNvdXJjZVNlbWFudGljOjpNb2RlIG1vZGUpCit7
CisgICAgc3dpdGNoIChiaW5kaW5nVHlwZSkgeworICAgIGNhc2UgQmluZGluZ1R5cGU6OlVuaWZv
cm1CdWZmZXI6CisgICAgICAgIHJldHVybiBtb2RlID09IEFTVDo6UmVzb3VyY2VTZW1hbnRpYzo6
TW9kZTo6QnVmZmVyOworICAgIGNhc2UgQmluZGluZ1R5cGU6OlNhbXBsZXI6CisgICAgICAgIHJl
dHVybiBtb2RlID09IEFTVDo6UmVzb3VyY2VTZW1hbnRpYzo6TW9kZTo6U2FtcGxlcjsKKyAgICBj
YXNlIEJpbmRpbmdUeXBlOjpUZXh0dXJlOgorICAgICAgICByZXR1cm4gbW9kZSA9PSBBU1Q6OlJl
c291cmNlU2VtYW50aWM6Ok1vZGU6OlRleHR1cmU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNT
RVJUKGJpbmRpbmdUeXBlID09IEJpbmRpbmdUeXBlOjpTdG9yYWdlQnVmZmVyKTsKKyAgICAgICAg
cmV0dXJuIG1vZGUgPT0gQVNUOjpSZXNvdXJjZVNlbWFudGljOjpNb2RlOjpVbm9yZGVyZWRBY2Nl
c3NWaWV3OworICAgIH0KK30KKworc3RhdGljIE9wdGlvbmFsPEhhc2hNYXA8QmluZGluZyosIHNp
emVfdD4+IG1hdGNoUmVzb3VyY2VzKFZlY3RvcjxFbnRyeVBvaW50SXRlbT4mIGVudHJ5UG9pbnRJ
dGVtcywgTGF5b3V0JiBsYXlvdXQsIFNoYWRlclN0YWdlIHNoYWRlclN0YWdlKQoreworICAgIEhh
c2hNYXA8QmluZGluZyosIHNpemVfdD4gcmVzdWx0OworICAgIEhhc2hTZXQ8c2l6ZV90PiBpdGVt
SW5kaWNlczsKKyAgICBpZiAoZW50cnlQb2ludEl0ZW1zLnNpemUoKSA9PSBzdGQ6Om51bWVyaWNf
bGltaXRzPHNpemVfdD46Om1heCgpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OyAvLyBX
b3JrIGFyb3VuZCB0aGUgZmFjdCB0aGF0IEhhc2hTZXQncyBrZXlzIGFyZSByZXN0cmljdGVkLgor
ICAgIGZvciAoYXV0byYgYmluZEdyb3VwIDogbGF5b3V0KSB7CisgICAgICAgIGF1dG8gc3BhY2Ug
PSBiaW5kR3JvdXAubmFtZTsKKyAgICAgICAgZm9yIChhdXRvJiBiaW5kaW5nIDogYmluZEdyb3Vw
LmJpbmRpbmdzKSB7CisgICAgICAgICAgICBpZiAoIWJpbmRpbmcudmlzaWJpbGl0eS5jb250YWlu
cyhzaGFkZXJTdGFnZSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGVudHJ5UG9pbnRJdGVtcy5zaXplKCk7ICsraSkgeworICAg
ICAgICAgICAgICAgIGF1dG8mIGl0ZW0gPSBlbnRyeVBvaW50SXRlbXNbaV07CisgICAgICAgICAg
ICAgICAgYXV0byYgc2VtYW50aWMgPSAqaXRlbS5zZW1hbnRpYzsKKyAgICAgICAgICAgICAgICBp
ZiAoIVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8QVNUOjpSZXNvdXJjZVNlbWFudGljPihzZW1hbnRp
YykpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGF1dG8m
IHJlc291cmNlU2VtYW50aWMgPSBXVEY6OmdldDxBU1Q6OlJlc291cmNlU2VtYW50aWM+KHNlbWFu
dGljKTsKKyAgICAgICAgICAgICAgICBpZiAoIW1hdGNoTW9kZShiaW5kaW5nLmJpbmRpbmdUeXBl
LCByZXNvdXJjZVNlbWFudGljLm1vZGUoKSkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgICAgIGlmIChiaW5kaW5nLm5hbWUgIT0gcmVzb3VyY2VTZW1hbnRpYy5p
bmRleCgpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBp
ZiAoc3BhY2UgIT0gcmVzb3VyY2VTZW1hbnRpYy5zcGFjZSgpKQorICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICByZXN1bHQuYWRkKCZiaW5kaW5nLCBpKTsKKyAg
ICAgICAgICAgICAgICBpdGVtSW5kaWNlcy5hZGQoaSArIDEpOyAvLyBXb3JrIGFyb3VuZCB0aGUg
ZmFjdCB0aGF0IEhhc2hTZXQncyBrZXlzIGFyZSByZXN0cmljdGVkLgorICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBlbnRyeVBvaW50
SXRlbXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgYXV0byYgaXRlbSA9IGVudHJ5UG9pbnRJdGVt
c1tpXTsKKyAgICAgICAgYXV0byYgc2VtYW50aWMgPSAqaXRlbS5zZW1hbnRpYzsKKyAgICAgICAg
aWYgKCFXVEY6OmhvbGRzX2FsdGVybmF0aXZlPEFTVDo6UmVzb3VyY2VTZW1hbnRpYz4oc2VtYW50
aWMpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmICghaXRlbUluZGljZXMuY29u
dGFpbnMoaSArIDEpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICB9CisK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgYm9vbCBtYXRjaElucHV0c091dHB1dHMo
VmVjdG9yPEVudHJ5UG9pbnRJdGVtPiYgdmVydGV4T3V0cHV0cywgVmVjdG9yPEVudHJ5UG9pbnRJ
dGVtPiYgZnJhZ21lbnRJbnB1dHMpCit7CisgICAgZm9yIChhdXRvJiBmcmFnbWVudElucHV0IDog
ZnJhZ21lbnRJbnB1dHMpIHsKKyAgICAgICAgaWYgKCFXVEY6OmhvbGRzX2FsdGVybmF0aXZlPEFT
VDo6U3RhZ2VJbk91dFNlbWFudGljPigqZnJhZ21lbnRJbnB1dC5zZW1hbnRpYykpCisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgYXV0byYgZnJhZ21lbnRJbnB1dFN0YWdlSW5PdXRTZW1h
bnRpYyA9IFdURjo6Z2V0PEFTVDo6U3RhZ2VJbk91dFNlbWFudGljPigqZnJhZ21lbnRJbnB1dC5z
ZW1hbnRpYyk7CisgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICAgICAgZm9yIChhdXRv
JiB2ZXJ0ZXhPdXRwdXQgOiB2ZXJ0ZXhPdXRwdXRzKSB7CisgICAgICAgICAgICBpZiAoIVdURjo6
aG9sZHNfYWx0ZXJuYXRpdmU8QVNUOjpTdGFnZUluT3V0U2VtYW50aWM+KCp2ZXJ0ZXhPdXRwdXQu
c2VtYW50aWMpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgYXV0byYg
dmVydGV4T3V0cHV0U3RhZ2VJbk91dFNlbWFudGljID0gV1RGOjpnZXQ8QVNUOjpTdGFnZUluT3V0
U2VtYW50aWM+KCp2ZXJ0ZXhPdXRwdXQuc2VtYW50aWMpOworICAgICAgICAgICAgaWYgKGZyYWdt
ZW50SW5wdXRTdGFnZUluT3V0U2VtYW50aWMuaW5kZXgoKSA9PSB2ZXJ0ZXhPdXRwdXRTdGFnZUlu
T3V0U2VtYW50aWMuaW5kZXgoKSkgeworICAgICAgICAgICAgICAgIGlmIChtYXRjaGVzKCpmcmFn
bWVudElucHV0LnVubmFtZWRUeXBlLCAqdmVydGV4T3V0cHV0LnVubmFtZWRUeXBlKSkgeworICAg
ICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFmb3VuZCkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIGlz
QWNjZXB0YWJsZUZvcm1hdChWZXJ0ZXhGb3JtYXQgdmVydGV4Rm9ybWF0LCBBU1Q6OlVubmFtZWRU
eXBlJiB1bm5hbWVkVHlwZSwgSW50cmluc2ljcyYgaW50cmluc2ljcykKK3sKKyAgICBzd2l0Y2gg
KHZlcnRleEZvcm1hdCkgeworICAgIGNhc2UgVmVydGV4Rm9ybWF0OjpGbG9hdFIzMkczMkIzMkEz
MjoKKyAgICAgICAgcmV0dXJuIG1hdGNoZXModW5uYW1lZFR5cGUsIGludHJpbnNpY3MuZmxvYXQ0
VHlwZSgpKTsKKyAgICBjYXNlIFZlcnRleEZvcm1hdDo6RmxvYXRSMzJHMzJCMzI6CisgICAgICAg
IHJldHVybiBtYXRjaGVzKHVubmFtZWRUeXBlLCBpbnRyaW5zaWNzLmZsb2F0M1R5cGUoKSk7Cisg
ICAgY2FzZSBWZXJ0ZXhGb3JtYXQ6OkZsb2F0UjMyRzMyOgorICAgICAgICByZXR1cm4gbWF0Y2hl
cyh1bm5hbWVkVHlwZSwgaW50cmluc2ljcy5mbG9hdDJUeXBlKCkpOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIEFTU0VSVCh2ZXJ0ZXhGb3JtYXQgPT0gVmVydGV4Rm9ybWF0OjpGbG9hdFIzMik7Cisg
ICAgICAgIHJldHVybiBtYXRjaGVzKHVubmFtZWRUeXBlLCBpbnRyaW5zaWNzLmZsb2F0VHlwZSgp
KTsKKyAgICB9Cit9CisKK3N0YXRpYyBPcHRpb25hbDxIYXNoTWFwPFZlcnRleEF0dHJpYnV0ZSos
IHNpemVfdD4+IG1hdGNoVmVydGV4QXR0cmlidXRlcyhWZWN0b3I8RW50cnlQb2ludEl0ZW0+JiB2
ZXJ0ZXhJbnB1dHMsIFZlcnRleEF0dHJpYnV0ZXMmIHZlcnRleEF0dHJpYnV0ZXMsIEludHJpbnNp
Y3MmIGludHJpbnNpY3MpCit7CisgICAgSGFzaE1hcDxWZXJ0ZXhBdHRyaWJ1dGUqLCBzaXplX3Q+
IHJlc3VsdDsKKyAgICBIYXNoU2V0PHNpemVfdD4gaXRlbUluZGljZXM7CisgICAgaWYgKHZlcnRl
eElucHV0cy5zaXplKCkgPT0gc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSkKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsgLy8gV29yayBhcm91bmQgdGhlIGZhY3QgdGhhdCBI
YXNoU2V0J3Mga2V5cyBhcmUgcmVzdHJpY3RlZC4KKyAgICBmb3IgKGF1dG8mIHZlcnRleEF0dHJp
YnV0ZSA6IHZlcnRleEF0dHJpYnV0ZXMpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCB2ZXJ0ZXhJbnB1dHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGF1dG8mIGl0ZW0gPSB2
ZXJ0ZXhJbnB1dHNbaV07CisgICAgICAgICAgICBhdXRvJiBzZW1hbnRpYyA9ICppdGVtLnNlbWFu
dGljOworICAgICAgICAgICAgaWYgKCFXVEY6OmhvbGRzX2FsdGVybmF0aXZlPEFTVDo6U3RhZ2VJ
bk91dFNlbWFudGljPihzZW1hbnRpYykpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICBhdXRvJiBzdGFnZUluT3V0U2VtYW50aWMgPSBXVEY6OmdldDxBU1Q6OlN0YWdlSW5P
dXRTZW1hbnRpYz4oc2VtYW50aWMpOworICAgICAgICAgICAgaWYgKHN0YWdlSW5PdXRTZW1hbnRp
Yy5pbmRleCgpICE9IHZlcnRleEF0dHJpYnV0ZS5uYW1lKQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgaWYgKCFpc0FjY2VwdGFibGVGb3JtYXQodmVydGV4QXR0cmlidXRl
LnZlcnRleEZvcm1hdCwgKml0ZW0udW5uYW1lZFR5cGUsIGludHJpbnNpY3MpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgICAgICByZXN1bHQuYWRkKCZ2ZXJ0
ZXhBdHRyaWJ1dGUsIGkpOworICAgICAgICAgICAgaXRlbUluZGljZXMuYWRkKGkgKyAxKTsgLy8g
V29yayBhcm91bmQgdGhlIGZhY3QgdGhhdCBIYXNoU2V0J3Mga2V5cyBhcmUgcmVzdHJpY3RlZC4K
KyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmVydGV4SW5w
dXRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGF1dG8mIGl0ZW0gPSB2ZXJ0ZXhJbnB1dHNbaV07
CisgICAgICAgIGF1dG8mIHNlbWFudGljID0gKml0ZW0uc2VtYW50aWM7CisgICAgICAgIGlmICgh
V1RGOjpob2xkc19hbHRlcm5hdGl2ZTxBU1Q6OlN0YWdlSW5PdXRTZW1hbnRpYz4oc2VtYW50aWMp
KQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmICghaXRlbUluZGljZXMuY29udGFp
bnMoaSArIDEpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICB9CisKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgYm9vbCBpc0FjY2VwdGFibGVGb3JtYXQoVGV4
dHVyZUZvcm1hdCB0ZXh0dXJlRm9ybWF0LCBBU1Q6OlVubmFtZWRUeXBlJiB1bm5hbWVkVHlwZSwg
SW50cmluc2ljcyYgaW50cmluc2ljcywgYm9vbCBpc0NvbG9yKQoreworICAgIGlmIChpc0NvbG9y
KSB7CisgICAgICAgIHN3aXRjaCAodGV4dHVyZUZvcm1hdCkgeworICAgICAgICBjYXNlIFRleHR1
cmVGb3JtYXQ6OlI4RzhCOEE4VW5vcm06CisgICAgICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6UjhH
OEI4QThVaW50OgorICAgICAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkI4RzhSOEE4VW5vcm06Cisg
ICAgICAgICAgICByZXR1cm4gbWF0Y2hlcyh1bm5hbWVkVHlwZSwgaW50cmluc2ljcy5mbG9hdDRU
eXBlKCkpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUKHRleHR1cmVGb3Jt
YXQgPT0gVGV4dHVyZUZvcm1hdDo6RDMyRmxvYXRTOFVpbnQpOworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB0ZXh0dXJlRm9ybWF0ID09IFRl
eHR1cmVGb3JtYXQ6OkQzMkZsb2F0UzhVaW50ICYmIG1hdGNoZXModW5uYW1lZFR5cGUsIGludHJp
bnNpY3MuZmxvYXRUeXBlKCkpOworfQorCitzdGF0aWMgT3B0aW9uYWw8SGFzaE1hcDxBdHRhY2ht
ZW50RGVzY3JpcHRvciosIHNpemVfdD4+IG1hdGNoQ29sb3JBdHRhY2htZW50cyhWZWN0b3I8RW50
cnlQb2ludEl0ZW0+JiBmcmFnbWVudE91dHB1dHMsIFZlY3RvcjxBdHRhY2htZW50RGVzY3JpcHRv
cj4mIGF0dGFjaG1lbnREZXNjcmlwdG9ycywgSW50cmluc2ljcyYgaW50cmluc2ljcykKK3sKKyAg
ICBIYXNoTWFwPEF0dGFjaG1lbnREZXNjcmlwdG9yKiwgc2l6ZV90PiByZXN1bHQ7CisgICAgSGFz
aFNldDxzaXplX3Q+IGl0ZW1JbmRpY2VzOworICAgIGlmIChhdHRhY2htZW50RGVzY3JpcHRvcnMu
c2l6ZSgpID09IHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkpCisgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7IC8vIFdvcmsgYXJvdW5kIHRoZSBmYWN0IHRoYXQgSGFzaFNldCdz
IGtleXMgYXJlIHJlc3RyaWN0ZWQuCisgICAgZm9yIChhdXRvJiBhdHRhY2htZW50RGVzY3JpcHRv
ciA6IGF0dGFjaG1lbnREZXNjcmlwdG9ycykgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGZyYWdtZW50T3V0cHV0cy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgYXV0byYgaXRl
bSA9IGZyYWdtZW50T3V0cHV0c1tpXTsKKyAgICAgICAgICAgIGF1dG8mIHNlbWFudGljID0gKml0
ZW0uc2VtYW50aWM7CisgICAgICAgICAgICBpZiAoIVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8QVNU
OjpTdGFnZUluT3V0U2VtYW50aWM+KHNlbWFudGljKSkKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIGF1dG8mIHN0YWdlSW5PdXRTZW1hbnRpYyA9IFdURjo6Z2V0PEFTVDo6
U3RhZ2VJbk91dFNlbWFudGljPihzZW1hbnRpYyk7CisgICAgICAgICAgICBpZiAoc3RhZ2VJbk91
dFNlbWFudGljLmluZGV4KCkgIT0gYXR0YWNobWVudERlc2NyaXB0b3IubmFtZSkKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmICghaXNBY2NlcHRhYmxlRm9ybWF0KGF0
dGFjaG1lbnREZXNjcmlwdG9yLnRleHR1cmVGb3JtYXQsICppdGVtLnVubmFtZWRUeXBlLCBpbnRy
aW5zaWNzLCB0cnVlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAg
ICAgICAgICAgcmVzdWx0LmFkZCgmYXR0YWNobWVudERlc2NyaXB0b3IsIGkpOworICAgICAgICAg
ICAgaXRlbUluZGljZXMuYWRkKGkgKyAxKTsgLy8gV29yayBhcm91bmQgdGhlIGZhY3QgdGhhdCBI
YXNoU2V0J3Mga2V5cyBhcmUgcmVzdHJpY3RlZC4KKyAgICAgICAgfQorICAgIH0KKworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgZnJhZ21lbnRPdXRwdXRzLnNpemUoKTsgKytpKSB7CisgICAg
ICAgIGF1dG8mIGl0ZW0gPSBmcmFnbWVudE91dHB1dHNbaV07CisgICAgICAgIGF1dG8mIHNlbWFu
dGljID0gKml0ZW0uc2VtYW50aWM7CisgICAgICAgIGlmICghV1RGOjpob2xkc19hbHRlcm5hdGl2
ZTxBU1Q6OlN0YWdlSW5PdXRTZW1hbnRpYz4oc2VtYW50aWMpKQorICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIGlmICghaXRlbUluZGljZXMuY29udGFpbnMoaSArIDEpKQorICAgICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CitzdGF0aWMgYm9vbCBtYXRjaERlcHRoQXR0YWNobWVudChWZWN0b3I8RW50cnlQb2ludEl0ZW0+
JiBmcmFnbWVudE91dHB1dHMsIE9wdGlvbmFsPEF0dGFjaG1lbnREZXNjcmlwdG9yPiYgZGVwdGhT
dGVuY2lsQXR0YWNobWVudERlc2NyaXB0b3IsIEludHJpbnNpY3MmIGludHJpbnNpY3MpCit7Cisg
ICAgYXV0byBpdGVyYXRvciA9IHN0ZDo6ZmluZF9pZihmcmFnbWVudE91dHB1dHMuYmVnaW4oKSwg
ZnJhZ21lbnRPdXRwdXRzLmVuZCgpLCBbJl0oRW50cnlQb2ludEl0ZW0mIGl0ZW0pIHsKKyAgICAg
ICAgYXV0byYgc2VtYW50aWMgPSAqaXRlbS5zZW1hbnRpYzsKKyAgICAgICAgaWYgKCFXVEY6Omhv
bGRzX2FsdGVybmF0aXZlPEFTVDo6QnVpbHRJblNlbWFudGljPihzZW1hbnRpYykpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGF1dG8mIGJ1aWx0SW5TZW1hbnRpYyA9IFdURjo6
Z2V0PEFTVDo6QnVpbHRJblNlbWFudGljPihzZW1hbnRpYyk7CisgICAgICAgIHJldHVybiBidWls
dEluU2VtYW50aWMudmFyaWFibGUoKSA9PSBBU1Q6OkJ1aWx0SW5TZW1hbnRpYzo6VmFyaWFibGU6
OlNWRGVwdGg7CisgICAgfSk7CisgICAgaWYgKGl0ZXJhdG9yID09IGZyYWdtZW50T3V0cHV0cy5l
bmQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoZGVwdGhTdGVuY2lsQXR0YWNo
bWVudERlc2NyaXB0b3IpIHsKKyAgICAgICAgQVNTRVJUKCFkZXB0aFN0ZW5jaWxBdHRhY2htZW50
RGVzY3JpcHRvci0+bmFtZSk7CisgICAgICAgIHJldHVybiBpc0FjY2VwdGFibGVGb3JtYXQoZGVw
dGhTdGVuY2lsQXR0YWNobWVudERlc2NyaXB0b3ItPnRleHR1cmVGb3JtYXQsICppdGVyYXRvci0+
dW5uYW1lZFR5cGUsIGludHJpbnNpY3MsIGZhbHNlKTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNl
OworfQorCitPcHRpb25hbDxNYXRjaGVkUmVuZGVyU2VtYW50aWNzPiBtYXRjaFNlbWFudGljcyhQ
cm9ncmFtJiBwcm9ncmFtLCBSZW5kZXJQaXBlbGluZURlc2NyaXB0b3ImIHJlbmRlclBpcGVsaW5l
RGVzY3JpcHRvcikKK3sKKyAgICBhdXRvIHZlcnRleFNoYWRlckVudHJ5UG9pbnQgPSBmaW5kRW50
cnlQb2ludChwcm9ncmFtLmZ1bmN0aW9uRGVmaW5pdGlvbnMoKSwgcmVuZGVyUGlwZWxpbmVEZXNj
cmlwdG9yLnZlcnRleEVudHJ5UG9pbnROYW1lKTsKKyAgICBhdXRvIGZyYWdtZW50U2hhZGVyRW50
cnlQb2ludCA9IGZpbmRFbnRyeVBvaW50KHByb2dyYW0uZnVuY3Rpb25EZWZpbml0aW9ucygpLCBy
ZW5kZXJQaXBlbGluZURlc2NyaXB0b3IuZnJhZ21lbnRFbnRyeVBvaW50TmFtZSk7CisgICAgaWYg
KCF2ZXJ0ZXhTaGFkZXJFbnRyeVBvaW50IHx8ICFmcmFnbWVudFNoYWRlckVudHJ5UG9pbnQpCisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgYXV0byB2ZXJ0ZXhTaGFkZXJFbnRyeVBv
aW50SXRlbXMgPSBnYXRoZXJFbnRyeVBvaW50SXRlbXMocHJvZ3JhbS5pbnRyaW5zaWNzKCksICp2
ZXJ0ZXhTaGFkZXJFbnRyeVBvaW50KTsKKyAgICBhdXRvIGZyYWdtZW50U2hhZGVyRW50cnlQb2lu
dEl0ZW1zID0gZ2F0aGVyRW50cnlQb2ludEl0ZW1zKHByb2dyYW0uaW50cmluc2ljcygpLCAqZnJh
Z21lbnRTaGFkZXJFbnRyeVBvaW50KTsKKyAgICBpZiAoIXZlcnRleFNoYWRlckVudHJ5UG9pbnRJ
dGVtcyB8fCAhZnJhZ21lbnRTaGFkZXJFbnRyeVBvaW50SXRlbXMpCisgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CisgICAgYXV0byB2ZXJ0ZXhTaGFkZXJSZXNvdXJjZU1hcCA9IG1hdGNoUmVz
b3VyY2VzKHZlcnRleFNoYWRlckVudHJ5UG9pbnRJdGVtcy0+aW5wdXRzLCByZW5kZXJQaXBlbGlu
ZURlc2NyaXB0b3IubGF5b3V0LCBTaGFkZXJTdGFnZTo6VmVydGV4KTsKKyAgICBhdXRvIGZyYWdt
ZW50U2hhZGVyUmVzb3VyY2VNYXAgPSBtYXRjaFJlc291cmNlcyhmcmFnbWVudFNoYWRlckVudHJ5
UG9pbnRJdGVtcy0+aW5wdXRzLCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IubGF5b3V0LCBTaGFk
ZXJTdGFnZTo6RnJhZ21lbnQpOworICAgIGlmICghdmVydGV4U2hhZGVyUmVzb3VyY2VNYXAgfHwg
IWZyYWdtZW50U2hhZGVyUmVzb3VyY2VNYXApCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CisgICAgaWYgKCFtYXRjaElucHV0c091dHB1dHModmVydGV4U2hhZGVyRW50cnlQb2ludEl0ZW1z
LT5vdXRwdXRzLCBmcmFnbWVudFNoYWRlckVudHJ5UG9pbnRJdGVtcy0+aW5wdXRzKSkKKyAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBhdXRvIG1hdGNoZWRWZXJ0ZXhBdHRyaWJ1dGVz
ID0gbWF0Y2hWZXJ0ZXhBdHRyaWJ1dGVzKHZlcnRleFNoYWRlckVudHJ5UG9pbnRJdGVtcy0+aW5w
dXRzLCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IudmVydGV4QXR0cmlidXRlcywgcHJvZ3JhbS5p
bnRyaW5zaWNzKCkpOworICAgIGlmICghbWF0Y2hlZFZlcnRleEF0dHJpYnV0ZXMpCisgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgYXV0byBtYXRjaGVkQ29sb3JBdHRhY2htZW50cyA9
IG1hdGNoQ29sb3JBdHRhY2htZW50cyhmcmFnbWVudFNoYWRlckVudHJ5UG9pbnRJdGVtcy0+b3V0
cHV0cywgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yLmF0dGFjaG1lbnRzU3RhdGVEZXNjcmlwdG9y
LmF0dGFjaG1lbnREZXNjcmlwdG9ycywgcHJvZ3JhbS5pbnRyaW5zaWNzKCkpOworICAgIGlmICgh
bWF0Y2hlZENvbG9yQXR0YWNobWVudHMpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cisg
ICAgaWYgKCFtYXRjaERlcHRoQXR0YWNobWVudChmcmFnbWVudFNoYWRlckVudHJ5UG9pbnRJdGVt
cy0+b3V0cHV0cywgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yLmF0dGFjaG1lbnRzU3RhdGVEZXNj
cmlwdG9yLmRlcHRoU3RlbmNpbEF0dGFjaG1lbnREZXNjcmlwdG9yLCBwcm9ncmFtLmludHJpbnNp
Y3MoKSkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIHt7IHZlcnRl
eFNoYWRlckVudHJ5UG9pbnQsIGZyYWdtZW50U2hhZGVyRW50cnlQb2ludCwgKnZlcnRleFNoYWRl
ckVudHJ5UG9pbnRJdGVtcywgKmZyYWdtZW50U2hhZGVyRW50cnlQb2ludEl0ZW1zLCAqdmVydGV4
U2hhZGVyUmVzb3VyY2VNYXAsICpmcmFnbWVudFNoYWRlclJlc291cmNlTWFwLCAqbWF0Y2hlZFZl
cnRleEF0dHJpYnV0ZXMsICptYXRjaGVkQ29sb3JBdHRhY2htZW50cyB9fTsKK30KKworT3B0aW9u
YWw8TWF0Y2hlZENvbXB1dGVTZW1hbnRpY3M+IG1hdGNoU2VtYW50aWNzKFByb2dyYW0mIHByb2dy
YW0sIENvbXB1dGVQaXBlbGluZURlc2NyaXB0b3ImIGNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3Ip
Cit7CisgICAgYXV0byBlbnRyeVBvaW50ID0gZmluZEVudHJ5UG9pbnQocHJvZ3JhbS5mdW5jdGlv
bkRlZmluaXRpb25zKCksIGNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IuZW50cnlQb2ludE5hbWUp
OworICAgIGlmICghZW50cnlQb2ludCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAg
ICBhdXRvIGVudHJ5UG9pbnRJdGVtcyA9IGdhdGhlckVudHJ5UG9pbnRJdGVtcyhwcm9ncmFtLmlu
dHJpbnNpY3MoKSwgKmVudHJ5UG9pbnQpOworICAgIGlmICghZW50cnlQb2ludEl0ZW1zKQorICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIEFTU0VSVChlbnRyeVBvaW50SXRlbXMtPm91
dHB1dHMuaXNFbXB0eSgpKTsKKyAgICBhdXRvIHJlc291cmNlTWFwID0gbWF0Y2hSZXNvdXJjZXMo
ZW50cnlQb2ludEl0ZW1zLT5pbnB1dHMsIGNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IubGF5b3V0
LCBTaGFkZXJTdGFnZTo6Q29tcHV0ZSk7CisgICAgaWYgKCFyZXNvdXJjZU1hcCkKKyAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4ge3sgZW50cnlQb2ludCwgKmVudHJ5UG9p
bnRJdGVtcywgKnJlc291cmNlTWFwIH19OworfQorCit9IC8vIG5hbWVzcGFjZSBXSExTTAorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR1BVKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTZW1hbnRpY01h
dGNoZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU2VtYW50
aWNNYXRjaGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGZmOGM4ZDEzZmYwY2Q3NzRlMjY1NGRlMWNmNmYwY2Yy
NTgzODY2NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMU2VtYW50aWNNYXRjaGVyLmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldITFNM
R2F0aGVyRW50cnlQb2ludEl0ZW1zLmgiCisjaW5jbHVkZSAiV0hMU0xQaXBlbGluZURlc2NyaXB0
b3IuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCitjbGFz
cyBQcm9ncmFtOworCitzdHJ1Y3QgTWF0Y2hlZFJlbmRlclNlbWFudGljcyB7CisgICAgQVNUOjpG
dW5jdGlvbkRlZmluaXRpb24qIHZlcnRleFNoYWRlcjsKKyAgICBBU1Q6OkZ1bmN0aW9uRGVmaW5p
dGlvbiogZnJhZ21lbnRTaGFkZXI7CisgICAgRW50cnlQb2ludEl0ZW1zIHZlcnRleFNoYWRlckVu
dHJ5UG9pbnRJdGVtczsKKyAgICBFbnRyeVBvaW50SXRlbXMgZnJhZ21lbnRTaGFkZXJFbnRyeVBv
aW50SXRlbXM7CisgICAgSGFzaE1hcDxCaW5kaW5nKiwgc2l6ZV90PiB2ZXJ0ZXhTaGFkZXJSZXNv
dXJjZU1hcDsKKyAgICBIYXNoTWFwPEJpbmRpbmcqLCBzaXplX3Q+IGZyYWdtZW50U2hhZGVyUmVz
b3VyY2VNYXA7CisgICAgSGFzaE1hcDxWZXJ0ZXhBdHRyaWJ1dGUqLCBzaXplX3Q+IG1hdGNoZWRW
ZXJ0ZXhBdHRyaWJ1dGVzOworICAgIEhhc2hNYXA8QXR0YWNobWVudERlc2NyaXB0b3IqLCBzaXpl
X3Q+IG1hdGNoZWRDb2xvckF0dGFjaG1lbnRzOworfTsKKworT3B0aW9uYWw8TWF0Y2hlZFJlbmRl
clNlbWFudGljcz4gbWF0Y2hTZW1hbnRpY3MoUHJvZ3JhbSYsIFJlbmRlclBpcGVsaW5lRGVzY3Jp
cHRvciYpOworCitzdHJ1Y3QgTWF0Y2hlZENvbXB1dGVTZW1hbnRpY3MgeworICAgIEFTVDo6RnVu
Y3Rpb25EZWZpbml0aW9uKiBzaGFkZXI7CisgICAgRW50cnlQb2ludEl0ZW1zIGVudHJ5UG9pbnRJ
dGVtczsKKyAgICBIYXNoTWFwPEJpbmRpbmcqLCBzaXplX3Q+IHJlc291cmNlTWFwOworfTsKKwor
T3B0aW9uYWw8TWF0Y2hlZENvbXB1dGVTZW1hbnRpY3M+IG1hdGNoU2VtYW50aWNzKFByb2dyYW0m
LCBDb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yJik7CisKK30gLy8gbmFtZXNwYWNlIFdITFNMCisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJHUFUpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJj
ZXMudHh0CmluZGV4IDQwZmE0NzRhNDRlYjhkMmVhYjgwYjA5ODZjNWVlYmJmMGQ1MDUxMWIuLjI3
NDlkNzRhMjNhMjI5NDc2Nzk3YzZjNzliMDhiOGU2NjYxYzRhMmQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBA
IC0zMjQsNiArMzI0LDcgQEAgTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIu
Y3BwCiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmVPdmVybG9hZEltcGwuY3BwCiBN
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlY3Vyc2lvbkNoZWNrZXIuY3BwCiBNb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTFZpc2l0b3IuY3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFNl
bWFudGljTWF0Y2hlci5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTGl0ZXJhbFR5cGVD
aGVja2VyLmNwcAogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xIaWdoWm9tYmllRmluZGVyLmNw
cAogTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xUeXBlTmFtZXIuY3BwCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYzNk
OGZkYjA0NTYzNDBjOWNjZjA0YTAyZjdhZjE0Mzk4ODY0MmM2NC4uZGQ2MTk3MzdjZTk1ZGYyYTk1
ZjhlZTQzNTUxZGMwOWFhNTk2NGZhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTMzOTEsNiArMTMzOTEsOSBAQAogCQlDMjM0
QTlCNjIxRTkyQ0MwMDAzQzk4NEQgLyogV0hMU0xJbnRyaW5zaWNzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdITFNMSW50cmluc2ljcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjM0QTlC
NzIxRTkyQ0MxMDAzQzk4NEQgLyogV0hMU0xJbnRyaW5zaWNzLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFdITFNMSW50cmluc2ljcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMy
NDU4RTYxMUZFODk3OUUwMDU5NDc1OSAvKiBGb250Q2FjaGVDb3JlVGV4dC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBGb250Q2FjaGVDb3JlVGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlD
MjRBNTdBRjIxRkFENTNGMDA0QzZERDEgLyogV0hMU0xQaXBlbGluZURlc2NyaXB0b3IuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV0hMU0xQaXBlbGluZURlc2NyaXB0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQzI0QTU3QjIyMUZCOEREQTAwNEM2REQxIC8qIFdITFNMU2VtYW50aWNNYXRj
aGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMU2VtYW50aWNNYXRjaGVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzI0QTU3QjMyMUZCOEREQTAwNEM2REQxIC8qIFdI
TFNMU2VtYW50aWNNYXRjaGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMU2VtYW50aWNNYXRjaGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyNjAxN0ExMUM3MkRDOTkwMEY3NEEx
NiAvKiBDU1NGb250RmFjZVNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBDU1NGb250RmFjZVNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMy
NjAxN0EyMUM3MkRDOTkwMEY3NEExNiAvKiBDU1NGb250RmFjZVNldC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBDU1NGb250RmFjZVNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlDMjgwODMzQzFDNkRCMTk0MDAxNDUxQjYgLyogRm9udEZhY2UuaWRsICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dDsgcGF0aCA9IEZvbnRGYWNlLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTI1NjAyLDYgKzI1NjA1LDcgQEAKIAkJCQlDMjM0QTk4QzIxRTg4ODNFMDAzQzk4NEQg
LyogV0hMU0xOYW1lUmVzb2x2ZXIuaCAqLywKIAkJCQlDMjFCRjczNzIxQ0Q4QTAyMDAyMjc5Nzkg
LyogV0hMU0xQYXJzZXIuY3BwICovLAogCQkJCUMyMUJGNzM4MjFDRDhBMDMwMDIyNzk3OSAvKiBX
SExTTFBhcnNlci5oICovLAorCQkJCUMyNEE1N0FGMjFGQUQ1M0YwMDRDNkREMSAvKiBXSExTTFBp
cGVsaW5lRGVzY3JpcHRvci5oICovLAogCQkJCUMyMUJGNzNBMjFDRDhENzAwMDIyNzk3OSAvKiBX
SExTTFByb2dyYW0uaCAqLywKIAkJCQkxQ0EwQzJFMDIxRUVCNUY1MDBBMTE4NjAgLyogV0hMU0xS
ZWN1cnNpb25DaGVja2VyLmNwcCAqLywKIAkJCQkxQ0EwQzJERTIxRUVCNUY0MDBBMTE4NjAgLyog
V0hMU0xSZWN1cnNpb25DaGVja2VyLmggKi8sCkBAIC0yNTYxMCw2ICsyNTYxNCw4IEBACiAJCQkJ
QzIzNEE5OTkyMUU5MEYyOTAwM0M5ODREIC8qIFdITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5jcHAg
Ki8sCiAJCQkJQzIzNEE5OTcyMUU5MEYyODAwM0M5ODREIC8qIFdITFNMUmVzb2x2ZU92ZXJsb2Fk
SW1wbC5oICovLAogCQkJCUMyMzRBOTlEMjFFOTEwQkQwMDNDOTg0RCAvKiBXSExTTFJlc29sdmlu
Z1R5cGUuaCAqLywKKwkJCQlDMjRBNTdCMjIxRkI4RERBMDA0QzZERDEgLyogV0hMU0xTZW1hbnRp
Y01hdGNoZXIuY3BwICovLAorCQkJCUMyNEE1N0IzMjFGQjhEREEwMDRDNkREMSAvKiBXSExTTFNl
bWFudGljTWF0Y2hlci5oICovLAogCQkJCUMyMUJGNzQ1MjFDRDk2OTgwMDIyNzk3OSAvKiBXSExT
TFN0YW5kYXJkTGlicmFyeS50eHQgKi8sCiAJCQkJMUNFQ0IzQTkyMUYyQjY3MzAwRjQ0NTQyIC8q
IFdITFNMU3RhdGVtZW50QmVoYXZpb3JDaGVja2VyLmNwcCAqLywKIAkJCQkxQ0VDQjNBODIxRjJC
NjczMDBGNDQ1NDIgLyogV0hMU0xTdGF0ZW1lbnRCZWhhdmlvckNoZWNrZXIuaCAqLywK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>360319</attachid>
            <date>2019-01-27 22:45:34 -0800</date>
            <delta_ts>2019-03-05 14:26:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-193877-20190127224533.patch</filename>
            <type>text/plain</type>
            <size>128199</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQwNDU2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTExMmMzZmRiNmIyOTI3
ODc0NmEyNjE2MzAyNjljMGUxMWQ2MTcwZi4uZTllNWRkNmQ3OGNlNDIxNGFjYjFhNDBhYWUwZjQ5
NmZhNzhkODRhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg2IEBACisyMDE5LTAxLTI3ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dITFNMXSBQ
YWNrIGFuZCB1bnBhY2sgZGF0YSBhdCBlbnRyeSBwb2ludHMgYW5kIGV4aXQgcG9pbnRzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTM4NzcKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMg
KE9PUFMhKS4KKworICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRW50
cnlQb2ludFNjYWZmb2xkaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6
YXR0cmlidXRlRm9yU2VtYW50aWMpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpF
bnRyeVBvaW50U2NhZmZvbGRpbmc6OkVudHJ5UG9pbnRTY2FmZm9sZGluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpXSExTTDo6TWV0YWw6OkVudHJ5UG9pbnRTY2FmZm9sZGluZzo6bWFwcGVkQmluZEdy
b3VwcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkVudHJ5UG9pbnRT
Y2FmZm9sZGluZzo6cmVzb3VyY2VIZWxwZXJUeXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpXSExT
TDo6TWV0YWw6OkVudHJ5UG9pbnRTY2FmZm9sZGluZzo6cmVzb3VyY2VTaWduYXR1cmUpOgorICAg
ICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpFbnRyeVBvaW50U2NhZmZvbGRpbmc6OmJ1aWx0
SW5zU2lnbmF0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6RW50cnlQb2lu
dFNjYWZmb2xkaW5nOjptYW5nbGVkSW5wdXRQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNM
OjpNZXRhbDo6RW50cnlQb2ludFNjYWZmb2xkaW5nOjptYW5nbGVkT3V0cHV0UGF0aCk6CisgICAg
ICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkVudHJ5UG9pbnRTY2FmZm9sZGluZzo6dW5wYWNr
UmVzb3VyY2VzQW5kTmFtZWRCdWlsdElucyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0
YWw6OlZlcnRleEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6VmVydGV4RW50cnlQb2ludFNjYWZmb2xk
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6VmVydGV4RW50cnlQb2ludFNj
YWZmb2xkaW5nOjpoZWxwZXJUeXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6
OlZlcnRleEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6c2lnbmF0dXJlKToKKyAgICAgICAgKFdlYkNv
cmU6OldITFNMOjpNZXRhbDo6VmVydGV4RW50cnlQb2ludFNjYWZmb2xkaW5nOjp1bnBhY2spOgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpWZXJ0ZXhFbnRyeVBvaW50U2NhZmZvbGRp
bmc6OnBhY2spOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpGcmFnbWVudEVudHJ5
UG9pbnRTY2FmZm9sZGluZzo6RnJhZ21lbnRFbnRyeVBvaW50U2NhZmZvbGRpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpGcmFnbWVudEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6
aGVscGVyVHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpGcmFnbWVudEVu
dHJ5UG9pbnRTY2FmZm9sZGluZzo6c2lnbmF0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNM
OjpNZXRhbDo6RnJhZ21lbnRFbnRyeVBvaW50U2NhZmZvbGRpbmc6OnVucGFjayk6CisgICAgICAg
IChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkZyYWdtZW50RW50cnlQb2ludFNjYWZmb2xkaW5nOjpw
YWNrKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6Q29tcHV0ZUVudHJ5UG9pbnRT
Y2FmZm9sZGluZzo6Q29tcHV0ZUVudHJ5UG9pbnRTY2FmZm9sZGluZyk6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6TWV0YWw6OkNvbXB1dGVFbnRyeVBvaW50U2NhZmZvbGRpbmc6OmhlbHBlclR5
cGVzKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6Q29tcHV0ZUVudHJ5UG9pbnRT
Y2FmZm9sZGluZzo6c2lnbmF0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6
Q29tcHV0ZUVudHJ5UG9pbnRTY2FmZm9sZGluZzo6dW5wYWNrKToKKyAgICAgICAgKFdlYkNvcmU6
OldITFNMOjpNZXRhbDo6Q29tcHV0ZUVudHJ5UG9pbnRTY2FmZm9sZGluZzo6cGFjayk6CisgICAg
ICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkVudHJ5UG9pbnRTY2FmZm9sZGluZzo6aGVscGVy
VHlwZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpFbnRyeVBv
aW50U2NhZmZvbGRpbmc6OnNpZ25hdHVyZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpX
SExTTDo6TWV0YWw6OkVudHJ5UG9pbnRTY2FmZm9sZGluZzo6dW5wYWNrKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6RW50cnlQb2ludFNjYWZmb2xkaW5nOjpwYWNr
KTogRGVsZXRlZC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEVu
dHJ5UG9pbnRTY2FmZm9sZGluZy5oOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpF
bnRyeVBvaW50U2NhZmZvbGRpbmc6OnBhcmFtZXRlclZhcmlhYmxlcyk6CisgICAgICAgICogTW9k
dWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xGdW5jdGlvbldyaXRlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkZ1bmN0aW9uRGVjbGFyYXRpb25Xcml0ZXI6OnRvU3Ry
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6RnVuY3Rpb25EZWNsYXJhdGlv
bldyaXRlcjo6dmlzaXQpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpGdW5jdGlv
bkRlZmluaXRpb25Xcml0ZXI6OkZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpXSExTTDo6TWV0YWw6OkZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6Z2VuZXJhdGVO
ZXh0VmFyaWFibGVOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6RnVuY3Rp
b25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0
YWw6OkZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6Y29uc3RhbnRFeHByZXNzaW9uU3RyaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6UmVuZGVyRnVuY3Rpb25EZWZpbml0aW9u
V3JpdGVyOjpSZW5kZXJGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6V0hMU0w6Ok1ldGFsOjpSZW5kZXJGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnRha2VWZXJ0
ZXhNYXBwZWRCaW5kR3JvdXBzKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6UmVu
ZGVyRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp0YWtlRnJhZ21lbnRNYXBwZWRCaW5kR3JvdXBz
KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6UmVuZGVyRnVuY3Rpb25EZWZpbml0
aW9uV3JpdGVyOjpjcmVhdGVFbnRyeVBvaW50U2NhZmZvbGRpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6V0hMU0w6Ok1ldGFsOjpDb21wdXRlRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjpDb21wdXRl
RnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRh
bDo6Q29tcHV0ZUZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dGFrZU1hcHBlZEJpbmRHcm91cHMp
OgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpDb21wdXRlRnVuY3Rpb25EZWZpbml0
aW9uV3JpdGVyOjpjcmVhdGVFbnRyeVBvaW50U2NhZmZvbGRpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6V0hMU0w6Ok1ldGFsOjpzaGFyZWRNZXRhbEZ1bmN0aW9ucyk6CisgICAgICAgIChXZWJDb3Jl
OjpXSExTTDo6TWV0YWw6Om1ldGFsRnVuY3Rpb25zKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdw
dS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVyLmg6CisgICAgICAgICogTW9kdWxlcy93
ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xNYXBwZWRCaW5kaW5ncy5oOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE1ldGFsQ29kZUdlbmVy
YXRvci5oLgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMTWV0YWxD
b2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6Z2VuZXJh
dGVNZXRhbENvZGVTaGFyZWQpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpnZW5l
cmF0ZU1ldGFsQ29kZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hM
U0xNZXRhbENvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTEludHJpbnNpY3MuaDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpJbnRyaW5zaWNzOjpm
bG9hdDJUeXBlIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBp
cGVsaW5lRGVzY3JpcHRvci5oOiBBZGRlZC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTFByZXBhcmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpwcmVw
YXJlU2hhcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpwcmVwYXJlKToKKyAgICAgICAg
KiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuaDogQ29waWVkIGZyb20gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xNZXRhbENvZGVHZW5lcmF0
b3IuaC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFNlbWFudGljTWF0Y2hl
ci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OmZpbmRFbnRyeVBvaW50KToK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjptYXRjaE1vZGUpOgorICAgICAgICAoV2ViQ29yZTo6
V0hMU0w6Om1hdGNoUmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjptYXRjaElu
cHV0c091dHB1dHMpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OmlzQWNjZXB0YWJsZUZvcm1h
dCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6bWF0Y2hWZXJ0ZXhBdHRyaWJ1dGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OldITFNMOjptYXRjaENvbG9yQXR0YWNobWVudHMpOgorICAgICAgICAo
V2ViQ29yZTo6V0hMU0w6Om1hdGNoRGVwdGhBdHRhY2htZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OldITFNMOjptYXRjaFNlbWFudGljcyk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xTZW1hbnRpY01hdGNoZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xFbnRyeVBvaW50U2NhZmZvbGRpbmcuY3BwLgorICAg
ICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKwogMjAxOS0wMS0yNCAgQ2hhcmxlcyBWYXphYyAgPGN2YXphY0Bha2FtYWkuY29t
PgogCiAgICAgICAgIEltcGxlbWVudCBQZXJmb3JtYW5jZU9ic2VydmVyLnN1cHBvcnRlZEVudHJ5
VHlwZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01l
dGFsL1dITFNMRW50cnlQb2ludFNjYWZmb2xkaW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRW50cnlQb2ludFNjYWZmb2xkaW5nLmNwcAppbmRl
eCA0OGZjZjIzNWYyNTE2NDBjNWE3ODIyMTBlOWQyNjg0ZjRlZTNjMDdkLi4wMzUyODRjYTRmY2Yz
MmY4NzY4MTBiYjczNzJmYjgxNTJhM2U3YTEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEVudHJ5UG9pbnRTY2FmZm9sZGluZy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xFbnRy
eVBvaW50U2NhZmZvbGRpbmcuY3BwCkBAIC0yOCw3ICsyOCwxNyBAQAogCiAjaWYgRU5BQkxFKFdF
QkdQVSkKIAorI2luY2x1ZGUgIldITFNMQnVpbHRJblNlbWFudGljLmgiCisjaW5jbHVkZSAiV0hM
U0xGdW5jdGlvbkRlZmluaXRpb24uaCIKICNpbmNsdWRlICJXSExTTEdhdGhlckVudHJ5UG9pbnRJ
dGVtcy5oIgorI2luY2x1ZGUgIldITFNMUGlwZWxpbmVEZXNjcmlwdG9yLmgiCisjaW5jbHVkZSAi
V0hMU0xSZXNvdXJjZVNlbWFudGljLmgiCisjaW5jbHVkZSAiV0hMU0xTdGFnZUluT3V0U2VtYW50
aWMuaCIKKyNpbmNsdWRlICJXSExTTFN0cnVjdHVyZURlZmluaXRpb24uaCIKKyNpbmNsdWRlICJX
SExTTFR5cGVOYW1lci5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTM2LDM1ICs0Niw0NzQgQEAgbmFtZXNwYWNlIFdITFNMIHsKIAogbmFtZXNwYWNlIE1ldGFsIHsK
IAotRW50cnlQb2ludFNjYWZmb2xkaW5nOjpFbnRyeVBvaW50U2NhZmZvbGRpbmcoQVNUOjpGdW5j
dGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbiwgSW50cmluc2ljcyYgaW50cmluc2lj
cykKLSAgICA6IG1fZnVuY3Rpb25EZWZpbml0aW9uKCZmdW5jdGlvbkRlZmluaXRpb24pCi0gICAg
LCBtX2ludHJpbnNpY3MoJmludHJpbnNpY3MpCitzdGF0aWMgU3RyaW5nIGF0dHJpYnV0ZUZvclNl
bWFudGljKEFTVDo6QnVpbHRJblNlbWFudGljJiBidWlsdEluU2VtYW50aWMpCiB7Ci0gICAgLy8g
RklYTUU6IEltcGxlbWVudCB0aGlzLgotICAgIGdhdGhlckVudHJ5UG9pbnRJdGVtcygqbV9pbnRy
aW5zaWNzLCAqbV9mdW5jdGlvbkRlZmluaXRpb24pOworICAgIHN3aXRjaCAoYnVpbHRJblNlbWFu
dGljLnZhcmlhYmxlKCkpIHsKKyAgICBjYXNlIEFTVDo6QnVpbHRJblNlbWFudGljOjpWYXJpYWJs
ZTo6U1ZJbnN0YW5jZUlEOgorICAgICAgICByZXR1cm4gIltbaW5zdGFuY2VfaWRdXSJfc3RyOwor
ICAgIGNhc2UgQVNUOjpCdWlsdEluU2VtYW50aWM6OlZhcmlhYmxlOjpTVlZlcnRleElEOgorICAg
ICAgICByZXR1cm4gIltbdmVydGV4X2lkXV0iX3N0cjsKKyAgICBjYXNlIEFTVDo6QnVpbHRJblNl
bWFudGljOjpWYXJpYWJsZTo6UFNpemU6CisgICAgICAgIHJldHVybiAiW1twb2ludF9zaXplXV0i
X3N0cjsKKyAgICBjYXNlIEFTVDo6QnVpbHRJblNlbWFudGljOjpWYXJpYWJsZTo6U1ZQb3NpdGlv
bjoKKyAgICAgICAgcmV0dXJuICJbW3Bvc2l0aW9uXV0iX3N0cjsKKyAgICBjYXNlIEFTVDo6QnVp
bHRJblNlbWFudGljOjpWYXJpYWJsZTo6U1ZJc0Zyb250RmFjZToKKyAgICAgICAgcmV0dXJuICJb
W2Zyb250X2ZhY2luZ11dIl9zdHI7CisgICAgY2FzZSBBU1Q6OkJ1aWx0SW5TZW1hbnRpYzo6VmFy
aWFibGU6OlNWU2FtcGxlSW5kZXg6CisgICAgICAgIHJldHVybiAiW1tzYW1wbGVfaWRdXSJfc3Ry
OworICAgIGNhc2UgQVNUOjpCdWlsdEluU2VtYW50aWM6OlZhcmlhYmxlOjpTVklubmVyQ292ZXJh
Z2U6CisgICAgICAgIHJldHVybiAiW1tzYW1wbGVfbWFza11dIl9zdHI7CisgICAgY2FzZSBBU1Q6
OkJ1aWx0SW5TZW1hbnRpYzo6VmFyaWFibGU6OlNWVGFyZ2V0OgorICAgICAgICByZXR1cm4gbWFr
ZVN0cmluZygiW1tjb2xvcigiLCAqYnVpbHRJblNlbWFudGljLnRhcmdldEluZGV4KCksICIpXV0i
KTsKKyAgICBjYXNlIEFTVDo6QnVpbHRJblNlbWFudGljOjpWYXJpYWJsZTo6U1ZEZXB0aDoKKyAg
ICAgICAgcmV0dXJuICJbW2RlcHRoKGFueSldXSJfc3RyOworICAgIGNhc2UgQVNUOjpCdWlsdElu
U2VtYW50aWM6OlZhcmlhYmxlOjpTVkNvdmVyYWdlOgorICAgICAgICByZXR1cm4gIltbc2FtcGxl
X21hc2tdXSJfc3RyOworICAgIGNhc2UgQVNUOjpCdWlsdEluU2VtYW50aWM6OlZhcmlhYmxlOjpT
VkRpc3BhdGNoVGhyZWFkSUQ6CisgICAgICAgIHJldHVybiAiW1t0aHJlYWRfcG9zaXRpb25faW5f
Z3JpZF1dIl9zdHI7CisgICAgY2FzZSBBU1Q6OkJ1aWx0SW5TZW1hbnRpYzo6VmFyaWFibGU6OlNW
R3JvdXBJRDoKKyAgICAgICAgcmV0dXJuICJbW3RocmVhZGdyb3VwX3Bvc2l0aW9uX2luX2dyaWRd
XSJfc3RyOworICAgIGNhc2UgQVNUOjpCdWlsdEluU2VtYW50aWM6OlZhcmlhYmxlOjpTVkdyb3Vw
SW5kZXg6CisgICAgICAgIHJldHVybiAiW1t0aHJlYWRfaW5kZXhfaW5fdGhyZWFkZ3JvdXBdXSJf
c3RyOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVChidWlsdEluU2VtYW50aWMudmFyaWFi
bGUoKSA9PSBBU1Q6OkJ1aWx0SW5TZW1hbnRpYzo6VmFyaWFibGU6OlNWR3JvdXBUaHJlYWRJRCk7
CisgICAgICAgIHJldHVybiAiW1t0aHJlYWRfcG9zaXRpb25faW5fdGhyZWFkZ3JvdXBdXSJfc3Ry
OworICAgIH0KIH0KIAotU3RyaW5nIEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6aGVscGVyVHlwZXMo
KQorc3RhdGljIFN0cmluZyBhdHRyaWJ1dGVGb3JTZW1hbnRpYyhBU1Q6OlNlbWFudGljJiBzZW1h
bnRpYykKIHsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCi0gICAgcmV0dXJuIFN0cmlu
ZygpOworICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPEFTVDo6QnVpbHRJblNlbWFudGlj
PihzZW1hbnRpYykpCisgICAgICAgIHJldHVybiBhdHRyaWJ1dGVGb3JTZW1hbnRpYyhXVEY6Omdl
dDxBU1Q6OkJ1aWx0SW5TZW1hbnRpYz4oc2VtYW50aWMpKTsKKyAgICBhdXRvJiBzdGFnZUluT3V0
U2VtYW50aWMgPSBXVEY6OmdldDxBU1Q6OlN0YWdlSW5PdXRTZW1hbnRpYz4oc2VtYW50aWMpOwor
ICAgIHJldHVybiBtYWtlU3RyaW5nKCJbW3VzZXIoIiwgc3RhZ2VJbk91dFNlbWFudGljLmluZGV4
KCksICIpXV0iKTsKIH0KIAotU3RyaW5nIEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6c2lnbmF0dXJl
KCkKK0VudHJ5UG9pbnRTY2FmZm9sZGluZzo6RW50cnlQb2ludFNjYWZmb2xkaW5nKEFTVDo6RnVu
Y3Rpb25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXRpb24sIEludHJpbnNpY3MmIGludHJpbnNp
Y3MsIFR5cGVOYW1lciYgdHlwZU5hbWVyLCBFbnRyeVBvaW50SXRlbXMmIGVudHJ5UG9pbnRJdGVt
cywgSGFzaE1hcDxCaW5kaW5nKiwgc2l6ZV90PiYgcmVzb3VyY2VNYXAsIExheW91dCYgbGF5b3V0
LCBzdGQ6OmZ1bmN0aW9uPFN0cmluZygpPiYmIGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSkKKyAg
ICA6IG1fZnVuY3Rpb25EZWZpbml0aW9uKGZ1bmN0aW9uRGVmaW5pdGlvbikKKyAgICAsIG1faW50
cmluc2ljcyhpbnRyaW5zaWNzKQorICAgICwgbV90eXBlTmFtZXIodHlwZU5hbWVyKQorICAgICwg
bV9lbnRyeVBvaW50SXRlbXMoZW50cnlQb2ludEl0ZW1zKQorICAgICwgbV9yZXNvdXJjZU1hcChy
ZXNvdXJjZU1hcCkKKyAgICAsIG1fbGF5b3V0KGxheW91dCkKKyAgICAsIG1fZ2VuZXJhdGVOZXh0
VmFyaWFibGVOYW1lKGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSkKIHsKLSAgICAvLyBGSVhNRTog
SW1wbGVtZW50IHRoaXMuCi0gICAgcmV0dXJuIFN0cmluZygpOworICAgIHVuc2lnbmVkIGFyZ3Vt
ZW50QnVmZmVySW5kZXggPSAwOworICAgIG1fbmFtZWRCaW5kR3JvdXBzLnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkobV9sYXlvdXQuc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
bGF5b3V0LnNpemUoKTsgKytpKSB7CisgICAgICAgIE5hbWVkQmluZEdyb3VwIG5hbWVkQmluZEdy
b3VwOworICAgICAgICBuYW1lZEJpbmRHcm91cC5zdHJ1Y3ROYW1lID0gbV90eXBlTmFtZXIuZ2Vu
ZXJhdGVOZXh0VHlwZU5hbWUoKTsKKyAgICAgICAgbmFtZWRCaW5kR3JvdXAudmFyaWFibGVOYW1l
ID0gbV9nZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKKyAgICAgICAgbmFtZWRCaW5kR3JvdXAu
YXJndW1lbnRCdWZmZXJJbmRleCA9IGFyZ3VtZW50QnVmZmVySW5kZXgrKzsKKyAgICAgICAgbmFt
ZWRCaW5kR3JvdXAubmFtZWRCaW5kaW5ncy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fbGF5b3V0
W2ldLmJpbmRpbmdzLnNpemUoKSk7CisgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKKyAgICAg
ICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBtX2xheW91dFtpXS5iaW5kaW5ncy5zaXplKCk7ICsr
aikgeworICAgICAgICAgICAgTmFtZWRCaW5kaW5nIG5hbWVkQmluZGluZzsKKyAgICAgICAgICAg
IG5hbWVkQmluZGluZy5lbGVtZW50TmFtZSA9IG1fdHlwZU5hbWVyLmdlbmVyYXRlTmV4dFN0cnVj
dHVyZUVsZW1lbnROYW1lKCk7CisgICAgICAgICAgICBuYW1lZEJpbmRpbmcuaW5kZXggPSBpbmRl
eCsrOworICAgICAgICAgICAgbmFtZWRCaW5kR3JvdXAubmFtZWRCaW5kaW5ncy51bmNoZWNrZWRB
cHBlbmQoV1RGTW92ZShuYW1lZEJpbmRpbmcpKTsKKyAgICAgICAgfQorICAgICAgICBtX25hbWVk
QmluZEdyb3Vwcy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShuYW1lZEJpbmRHcm91cCkpOworICAg
IH0KKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9lbnRyeVBvaW50SXRlbXMuaW5wdXRz
LnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmICghV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxBU1Q6
OkJ1aWx0SW5TZW1hbnRpYz4oKm1fZW50cnlQb2ludEl0ZW1zLmlucHV0c1tpXS5zZW1hbnRpYykp
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgTmFtZWRCdWlsdEluIG5hbWVkQnVpbHRJ
bjsKKyAgICAgICAgbmFtZWRCdWlsdEluLmluZGV4SW5FbnRyeVBvaW50SXRlbXMgPSBpOworICAg
ICAgICBuYW1lZEJ1aWx0SW4udmFyaWFibGVOYW1lID0gbV9nZW5lcmF0ZU5leHRWYXJpYWJsZU5h
bWUoKTsKKyAgICAgICAgbV9uYW1lZEJ1aWx0SW5zLmFwcGVuZChXVEZNb3ZlKG5hbWVkQnVpbHRJ
bikpOworICAgIH0KKworICAgIG1fcGFyYW1ldGVyVmFyaWFibGVzLnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkobV9mdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpLnNpemUoKSk7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtX2Z1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKCkuc2l6
ZSgpOyArK2kpCisgICAgICAgIG1fcGFyYW1ldGVyVmFyaWFibGVzLnVuY2hlY2tlZEFwcGVuZCht
X2dlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpKTsKIH0KIAotU3RyaW5nIEVudHJ5UG9pbnRTY2Fm
Zm9sZGluZzo6dW5wYWNrKCkKK01hcHBlZEJpbmRHcm91cHMgRW50cnlQb2ludFNjYWZmb2xkaW5n
OjptYXBwZWRCaW5kR3JvdXBzKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRo
aXMuCi0gICAgcmV0dXJuIFN0cmluZygpOworICAgIE1hcHBlZEJpbmRHcm91cHMgcmVzdWx0Owor
ICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fbGF5b3V0LnNpemUoKSk7CisgICAg
Zm9yIChhdXRvJiBuYW1lZEJpbmRHcm91cCA6IG1fbmFtZWRCaW5kR3JvdXBzKSB7CisgICAgICAg
IE1hcHBlZEJpbmRHcm91cCBtYXBwZWRCaW5kR3JvdXA7CisgICAgICAgIG1hcHBlZEJpbmRHcm91
cC5hcmd1bWVudEJ1ZmZlckluZGV4ID0gbmFtZWRCaW5kR3JvdXAuYXJndW1lbnRCdWZmZXJJbmRl
eDsKKyAgICAgICAgbWFwcGVkQmluZEdyb3VwLmJpbmRpbmdJbmRpY2VzLnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkobmFtZWRCaW5kR3JvdXAubmFtZWRCaW5kaW5ncy5zaXplKCkpOworICAgICAgICBm
b3IgKGF1dG8mIG5hbWVkQmluZGluZyA6IG5hbWVkQmluZEdyb3VwLm5hbWVkQmluZGluZ3MpCisg
ICAgICAgICAgICBtYXBwZWRCaW5kR3JvdXAuYmluZGluZ0luZGljZXMudW5jaGVja2VkQXBwZW5k
KG5hbWVkQmluZGluZy5pbmRleCk7CisgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoV1RG
TW92ZShtYXBwZWRCaW5kR3JvdXApKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
U3RyaW5nIEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6cmVzb3VyY2VIZWxwZXJUeXBlcygpCit7Cisg
ICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV9sYXlvdXQuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
bWFrZVN0cmluZygic3RydWN0ICIsIG1fbmFtZWRCaW5kR3JvdXBzW2ldLnN0cnVjdE5hbWUsICIg
e1xuIikpOworICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IG1fbGF5b3V0W2ldLmJpbmRp
bmdzLnNpemUoKTsgKytqKSB7CisgICAgICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbV9yZXNvdXJj
ZU1hcC5maW5kKCZtX2xheW91dFtpXS5iaW5kaW5nc1tqXSk7CisgICAgICAgICAgICBpZiAoaXRl
cmF0b3IgPT0gbV9yZXNvdXJjZU1hcC5lbmQoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgIGF1dG8gbWFuZ2xlZFR5cGVOYW1lID0gbV90eXBlTmFtZXIubWFuZ2xlZE5h
bWVGb3JUeXBlKCptX2VudHJ5UG9pbnRJdGVtcy5pbnB1dHNbaXRlcmF0b3ItPnZhbHVlXS51bm5h
bWVkVHlwZSk7CisgICAgICAgICAgICBhdXRvIGVsZW1lbnROYW1lID0gbV9uYW1lZEJpbmRHcm91
cHNbaV0ubmFtZWRCaW5kaW5nc1tqXS5lbGVtZW50TmFtZTsKKyAgICAgICAgICAgIGF1dG8gaW5k
ZXggPSBtX25hbWVkQmluZEdyb3Vwc1tpXS5uYW1lZEJpbmRpbmdzW2pdLmluZGV4OworICAgICAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAgICIsIG1hbmdsZWRUeXBl
TmFtZSwgJyAnLCBlbGVtZW50TmFtZSwgIiBbW2lkKCIsIGluZGV4LCAiKV1dO1xuIikpOworICAg
ICAgICB9CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9XG5cbiIpOworICAgIH0KKyAg
ICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworfQorCitPcHRpb25hbDxTdHJpbmc+
IEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6cmVzb3VyY2VTaWduYXR1cmUoKQoreworICAgIGlmICgh
bV9sYXlvdXQuc2l6ZSgpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgU3Ry
aW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9s
YXlvdXQuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKGkpCisgICAgICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZCgiLCAiKTsKKyAgICAgICAgYXV0byYgbmFtZWRCaW5kR3JvdXAgPSBtX25h
bWVkQmluZEdyb3Vwc1tpXTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmlu
ZyhuYW1lZEJpbmRHcm91cC5zdHJ1Y3ROYW1lLCAiJiAiLCBuYW1lZEJpbmRHcm91cC52YXJpYWJs
ZU5hbWUsICIgW1tidWZmZXIoIiwgbmFtZWRCaW5kR3JvdXAuYXJndW1lbnRCdWZmZXJJbmRleCwg
IildXSIpKTsKKyAgICB9CisgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKK30K
KworT3B0aW9uYWw8U3RyaW5nPiBFbnRyeVBvaW50U2NhZmZvbGRpbmc6OmJ1aWx0SW5zU2lnbmF0
dXJlKCkKK3sKKyAgICBpZiAoIW1fbmFtZWRCdWlsdElucy5zaXplKCkpCisgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CisKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX25hbWVkQnVpbHRJbnMuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgaWYgKGkpCisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiLCAiKTsKKyAg
ICAgICAgYXV0byYgbmFtZWRCdWlsdEluID0gbV9uYW1lZEJ1aWx0SW5zW2ldOworICAgICAgICBh
dXRvJiBpdGVtID0gbV9lbnRyeVBvaW50SXRlbXMuaW5wdXRzW25hbWVkQnVpbHRJbi5pbmRleElu
RW50cnlQb2ludEl0ZW1zXTsKKyAgICAgICAgYXV0byYgYnVpbHRJblNlbWFudGljID0gV1RGOjpn
ZXQ8QVNUOjpCdWlsdEluU2VtYW50aWM+KCppdGVtLnNlbWFudGljKTsKKyAgICAgICAgYXV0byBt
YW5nbGVkVHlwZU5hbWUgPSBtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKml0ZW0udW5u
YW1lZFR5cGUpOworICAgICAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IG5hbWVkQnVpbHRJbi52YXJp
YWJsZU5hbWU7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWFuZ2xl
ZFR5cGVOYW1lLCAnICcsIHZhcmlhYmxlTmFtZSwgJyAnLCBhdHRyaWJ1dGVGb3JTZW1hbnRpYyhi
dWlsdEluU2VtYW50aWMpKSk7CisgICAgfQorICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3Ry
aW5nKCk7Cit9CisKK1N0cmluZyBFbnRyeVBvaW50U2NhZmZvbGRpbmc6Om1hbmdsZWRJbnB1dFBh
dGgoVmVjdG9yPFN0cmluZz4mIHBhdGgpCit7CisgICAgQVNTRVJUKCFwYXRoLmlzRW1wdHkoKSk7
CisgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOworICAgIGJvb2wgZm91bmQgPSBmYWxz
ZTsKKyAgICBBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24qIHN0cnVjdHVyZURlZmluaXRpb24gPSBu
dWxscHRyOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9mdW5jdGlvbkRlZmluaXRpb24u
cGFyYW1ldGVycygpLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChtX2Z1bmN0aW9uRGVmaW5p
dGlvbi5wYXJhbWV0ZXJzKClbaV0ubmFtZSgpID09IHBhdGhbMF0pIHsKKyAgICAgICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKG1fcGFyYW1ldGVyVmFyaWFibGVzW2ldKTsKKyAgICAgICAgICAg
IGF1dG8mIHVuaWZ5Tm9kZSA9IG1fZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVtpXS50
eXBlKCktPnVuaWZ5Tm9kZSgpOworICAgICAgICAgICAgaWYgKGlzPEFTVDo6TmFtZWRUeXBlPih1
bmlmeU5vZGUpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgbmFtZWRUeXBlID0gZG93bmNhc3Q8
QVNUOjpOYW1lZFR5cGU+KHVuaWZ5Tm9kZSk7CisgICAgICAgICAgICAgICAgaWYgKGlzPEFTVDo6
U3RydWN0dXJlRGVmaW5pdGlvbj4obmFtZWRUeXBlKSkKKyAgICAgICAgICAgICAgICAgICAgc3Ry
dWN0dXJlRGVmaW5pdGlvbiA9ICZkb3duY2FzdDxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24+KG5h
bWVkVHlwZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBBU1NFUlQoZm91bmQpOworICAg
IGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgcGF0aC5zaXplKCk7ICsraSkgeworICAgICAgICBBU1NF
UlQoc3RydWN0dXJlRGVmaW5pdGlvbik7CisgICAgICAgIGF1dG8qIG5leHQgPSBzdHJ1Y3R1cmVE
ZWZpbml0aW9uLT5maW5kKHBhdGhbaV0pOworICAgICAgICBBU1NFUlQobmV4dCk7CisgICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoJy4nLCBtX3R5cGVOYW1lci5tYW5nbGVk
TmFtZUZvclN0cnVjdHVyZUVsZW1lbnQoKm5leHQpKSk7CisgICAgICAgIHN0cnVjdHVyZURlZmlu
aXRpb24gPSBudWxscHRyOworICAgICAgICBhdXRvJiB1bmlmeU5vZGUgPSBuZXh0LT50eXBlKCku
dW5pZnlOb2RlKCk7CisgICAgICAgIGlmIChpczxBU1Q6Ok5hbWVkVHlwZT4odW5pZnlOb2RlKSkg
eworICAgICAgICAgICAgYXV0byYgbmFtZWRUeXBlID0gZG93bmNhc3Q8QVNUOjpOYW1lZFR5cGU+
KHVuaWZ5Tm9kZSk7CisgICAgICAgICAgICBpZiAoaXM8QVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9u
PihuYW1lZFR5cGUpKQorICAgICAgICAgICAgICAgIHN0cnVjdHVyZURlZmluaXRpb24gPSAmZG93
bmNhc3Q8QVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uPihuYW1lZFR5cGUpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKK30KKworU3RyaW5n
IEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6bWFuZ2xlZE91dHB1dFBhdGgoVmVjdG9yPFN0cmluZz4m
IHBhdGgpCit7CisgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOworCisgICAgQVNUOjpT
dHJ1Y3R1cmVEZWZpbml0aW9uKiBzdHJ1Y3R1cmVEZWZpbml0aW9uID0gbnVsbHB0cjsKKyAgICBh
dXRvJiB1bmlmeU5vZGUgPSBtX2Z1bmN0aW9uRGVmaW5pdGlvbi50eXBlKCkudW5pZnlOb2RlKCk7
CisgICAgQVNTRVJUKGlzPEFTVDo6TmFtZWRUeXBlPih1bmlmeU5vZGUpKTsKKyAgICBhdXRvJiBu
YW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4odW5pZnlOb2RlKTsKKyAgICBBU1NF
UlQoaXM8QVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uPihuYW1lZFR5cGUpKTsKKyAgICBzdHJ1Y3R1
cmVEZWZpbml0aW9uID0gJmRvd25jYXN0PEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbj4obmFtZWRU
eXBlKTsKKyAgICBmb3IgKGF1dG8mIGNvbXBvbmVudCA6IHBhdGgpIHsKKyAgICAgICAgQVNTRVJU
KHN0cnVjdHVyZURlZmluaXRpb24pOworICAgICAgICBhdXRvKiBuZXh0ID0gc3RydWN0dXJlRGVm
aW5pdGlvbi0+ZmluZChjb21wb25lbnQpOworICAgICAgICBBU1NFUlQobmV4dCk7CisgICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoJy4nLCBtX3R5cGVOYW1lci5tYW5nbGVk
TmFtZUZvclN0cnVjdHVyZUVsZW1lbnQoKm5leHQpKSk7CisgICAgICAgIHN0cnVjdHVyZURlZmlu
aXRpb24gPSBudWxscHRyOworICAgICAgICBhdXRvJiB1bmlmeU5vZGUgPSBuZXh0LT50eXBlKCku
dW5pZnlOb2RlKCk7CisgICAgICAgIGlmIChpczxBU1Q6Ok5hbWVkVHlwZT4odW5pZnlOb2RlKSkg
eworICAgICAgICAgICAgYXV0byYgbmFtZWRUeXBlID0gZG93bmNhc3Q8QVNUOjpOYW1lZFR5cGU+
KHVuaWZ5Tm9kZSk7CisgICAgICAgICAgICBpZiAoaXM8QVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9u
PihuYW1lZFR5cGUpKQorICAgICAgICAgICAgICAgIHN0cnVjdHVyZURlZmluaXRpb24gPSAmZG93
bmNhc3Q8QVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uPihuYW1lZFR5cGUpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKK30KKworU3RyaW5n
IEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6dW5wYWNrUmVzb3VyY2VzQW5kTmFtZWRCdWlsdElucygp
Cit7CisgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV9mdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpLnNpemUoKTsgKytpKQor
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1fdHlwZU5hbWVyLm1hbmds
ZWROYW1lRm9yVHlwZSgqbV9mdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpW2ldLnR5cGUo
KSksICcgJywgbV9wYXJhbWV0ZXJWYXJpYWJsZXNbaV0sICI7XG4iKSk7CisKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1fbGF5b3V0LnNpemUoKTsgKytpKSB7CisgICAgICAgIGF1dG8gdmFy
aWFibGVOYW1lID0gbV9uYW1lZEJpbmRHcm91cHNbaV0udmFyaWFibGVOYW1lOworICAgICAgICBm
b3IgKHNpemVfdCBqID0gMDsgaiA8IG1fbGF5b3V0W2ldLmJpbmRpbmdzLnNpemUoKTsgKytqKSB7
CisgICAgICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbV9yZXNvdXJjZU1hcC5maW5kKCZtX2xheW91
dFtpXS5iaW5kaW5nc1tqXSk7CisgICAgICAgICAgICBpZiAoaXRlcmF0b3IgPT0gbV9yZXNvdXJj
ZU1hcC5lbmQoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGF1dG8m
IHBhdGggPSBtX2VudHJ5UG9pbnRJdGVtcy5pbnB1dHNbaXRlcmF0b3ItPnZhbHVlXS5wYXRoOwor
ICAgICAgICAgICAgYXV0byBlbGVtZW50TmFtZSA9IG1fbmFtZWRCaW5kR3JvdXBzW2ldLm5hbWVk
QmluZGluZ3Nbal0uZWxlbWVudE5hbWU7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZChtYWtlU3RyaW5nKG1hbmdsZWRJbnB1dFBhdGgocGF0aCksICIgPSAiLCB2YXJpYWJsZU5hbWUs
ICcuJywgZWxlbWVudE5hbWUsICI7XG4iKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3Ig
KGF1dG8mIG5hbWVkQnVpbHRJbiA6IG1fbmFtZWRCdWlsdElucykgeworICAgICAgICBhdXRvJiBw
YXRoID0gbV9lbnRyeVBvaW50SXRlbXMuaW5wdXRzW25hbWVkQnVpbHRJbi5pbmRleEluRW50cnlQ
b2ludEl0ZW1zXS5wYXRoOworICAgICAgICBhdXRvJiB2YXJpYWJsZU5hbWUgPSBuYW1lZEJ1aWx0
SW4udmFyaWFibGVOYW1lOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5n
KG1hbmdsZWRJbnB1dFBhdGgocGF0aCksICIgPSAiLCB2YXJpYWJsZU5hbWUsICI7XG4iKSk7Cisg
ICAgfQorICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7Cit9CisKK1ZlcnRleEVu
dHJ5UG9pbnRTY2FmZm9sZGluZzo6VmVydGV4RW50cnlQb2ludFNjYWZmb2xkaW5nKEFTVDo6RnVu
Y3Rpb25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXRpb24sIEludHJpbnNpY3MmIGludHJpbnNp
Y3MsIFR5cGVOYW1lciYgdHlwZU5hbWVyLCBFbnRyeVBvaW50SXRlbXMmIGVudHJ5UG9pbnRJdGVt
cywgSGFzaE1hcDxCaW5kaW5nKiwgc2l6ZV90PiYgcmVzb3VyY2VNYXAsIExheW91dCYgbGF5b3V0
LCBzdGQ6OmZ1bmN0aW9uPFN0cmluZygpPiYmIGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSwgSGFz
aE1hcDxWZXJ0ZXhBdHRyaWJ1dGUqLCBzaXplX3Q+JiBtYXRjaGVkVmVydGV4QXR0cmlidXRlcykK
KyAgICA6IEVudHJ5UG9pbnRTY2FmZm9sZGluZyhmdW5jdGlvbkRlZmluaXRpb24sIGludHJpbnNp
Y3MsIHR5cGVOYW1lciwgZW50cnlQb2ludEl0ZW1zLCByZXNvdXJjZU1hcCwgbGF5b3V0LCBXVEZN
b3ZlKGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSkpCisgICAgLCBtX21hdGNoZWRWZXJ0ZXhBdHRy
aWJ1dGVzKG1hdGNoZWRWZXJ0ZXhBdHRyaWJ1dGVzKQorICAgICwgbV9zdGFnZUluU3RydWN0TmFt
ZSh0eXBlTmFtZXIuZ2VuZXJhdGVOZXh0VHlwZU5hbWUoKSkKKyAgICAsIG1fcmV0dXJuU3RydWN0
TmFtZSh0eXBlTmFtZXIuZ2VuZXJhdGVOZXh0VHlwZU5hbWUoKSkKKyAgICAsIG1fc3RhZ2VJblBh
cmFtZXRlck5hbWUobV9nZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKSkKK3sKKyAgICBtX25hbWVk
U3RhZ2VJbnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX21hdGNoZWRWZXJ0ZXhBdHRyaWJ1dGVz
LnNpemUoKSk7CisgICAgZm9yIChhdXRvJiBrZXlWYWx1ZVBhaXIgOiBtX21hdGNoZWRWZXJ0ZXhB
dHRyaWJ1dGVzKSB7CisgICAgICAgIE5hbWVkU3RhZ2VJbiBuYW1lZFN0YWdlSW47CisgICAgICAg
IG5hbWVkU3RhZ2VJbi5pbmRleEluRW50cnlQb2ludEl0ZW1zID0ga2V5VmFsdWVQYWlyLnZhbHVl
OworICAgICAgICBuYW1lZFN0YWdlSW4uZWxlbWVudE5hbWUgPSBtX3R5cGVOYW1lci5nZW5lcmF0
ZU5leHRTdHJ1Y3R1cmVFbGVtZW50TmFtZSgpOworICAgICAgICBuYW1lZFN0YWdlSW4uYXR0cmli
dXRlSW5kZXggPSBrZXlWYWx1ZVBhaXIua2V5LT5uYW1lOworICAgICAgICBtX25hbWVkU3RhZ2VJ
bnMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUobmFtZWRTdGFnZUluKSk7CisgICAgfQorCisgICAg
bV9uYW1lZE91dHB1dHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX2VudHJ5UG9pbnRJdGVtcy5v
dXRwdXRzLnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2VudHJ5UG9pbnRJ
dGVtcy5vdXRwdXRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIE5hbWVkT3V0cHV0IG5hbWVkT3V0
cHV0OworICAgICAgICBuYW1lZE91dHB1dC5lbGVtZW50TmFtZSA9IG1fdHlwZU5hbWVyLmdlbmVy
YXRlTmV4dFN0cnVjdHVyZUVsZW1lbnROYW1lKCk7CisgICAgICAgIG1fbmFtZWRPdXRwdXRzLnVu
Y2hlY2tlZEFwcGVuZChXVEZNb3ZlKG5hbWVkT3V0cHV0KSk7CisgICAgfQorfQorCitTdHJpbmcg
VmVydGV4RW50cnlQb2ludFNjYWZmb2xkaW5nOjpoZWxwZXJUeXBlcygpCit7CisgICAgU3RyaW5n
QnVpbGRlciBzdHJpbmdCdWlsZGVyOworCisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0
cmluZygic3RydWN0ICIsIG1fc3RhZ2VJblN0cnVjdE5hbWUsICIge1xuIikpOworICAgIGZvciAo
YXV0byYgbmFtZWRTdGFnZUluIDogbV9uYW1lZFN0YWdlSW5zKSB7CisgICAgICAgIGF1dG8gbWFu
Z2xlZFR5cGVOYW1lID0gbV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCptX2VudHJ5UG9p
bnRJdGVtcy5pbnB1dHNbbmFtZWRTdGFnZUluLmluZGV4SW5FbnRyeVBvaW50SXRlbXNdLnVubmFt
ZWRUeXBlKTsKKyAgICAgICAgYXV0byBlbGVtZW50TmFtZSA9IG5hbWVkU3RhZ2VJbi5lbGVtZW50
TmFtZTsKKyAgICAgICAgYXV0byBhdHRyaWJ1dGVJbmRleCA9IG5hbWVkU3RhZ2VJbi5lbGVtZW50
TmFtZTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAgICIsIG1h
bmdsZWRUeXBlTmFtZSwgJyAnLCBlbGVtZW50TmFtZSwgIiBbW2F0dHJpYnV0ZSgiLCBhdHRyaWJ1
dGVJbmRleCwgIildXTtcbiIpKTsKKyAgICB9CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIn1c
blxuIik7CisKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJzdHJ1Y3QgIiwg
bV9yZXR1cm5TdHJ1Y3ROYW1lLCAiIHtcbiIpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fZW50cnlQb2ludEl0ZW1zLm91dHB1dHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgYXV0byYg
b3V0cHV0SXRlbSA9IG1fZW50cnlQb2ludEl0ZW1zLm91dHB1dHNbaV07CisgICAgICAgIGF1dG8g
bWFuZ2xlZFR5cGVOYW1lID0gbV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpvdXRwdXRJ
dGVtLnVubmFtZWRUeXBlKTsKKyAgICAgICAgYXV0byBlbGVtZW50TmFtZSA9IG1fbmFtZWRPdXRw
dXRzW2ldLmVsZW1lbnROYW1lOworICAgICAgICBhdXRvIGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZUZv
clNlbWFudGljKCpvdXRwdXRJdGVtLnNlbWFudGljKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQobWFrZVN0cmluZygiICAgICIsIG1hbmdsZWRUeXBlTmFtZSwgJyAnLCBlbGVtZW50TmFt
ZSwgJyAnLCBhdHRyaWJ1dGUsICI7XG4iKSk7CisgICAgfQorICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKCJ9XG5cbiIpOworCisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQocmVzb3VyY2VIZWxwZXJU
eXBlcygpKTsKKworICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7Cit9CisKK1N0
cmluZyBWZXJ0ZXhFbnRyeVBvaW50U2NhZmZvbGRpbmc6OnNpZ25hdHVyZShTdHJpbmcmIGZ1bmN0
aW9uTmFtZSkKK3sKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CisKKyAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJ2ZXJ0ZXggIiwgbV9yZXR1cm5TdHJ1Y3ROYW1l
LCAnICcsIGZ1bmN0aW9uTmFtZSwgJygnLCBtX3N0YWdlSW5TdHJ1Y3ROYW1lLCAnICcsIG1fc3Rh
Z2VJblBhcmFtZXRlck5hbWUsICIgW1tzdGFnZV9pbl1dIikpOworICAgIGlmIChhdXRvIHJlc291
cmNlU2lnbmF0dXJlID0gdGhpcy0+cmVzb3VyY2VTaWduYXR1cmUoKSkKKyAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiLCAiLCAqcmVzb3VyY2VTaWduYXR1cmUpKTsKKyAg
ICBpZiAoYXV0byBidWlsdEluc1NpZ25hdHVyZSA9IHRoaXMtPmJ1aWx0SW5zU2lnbmF0dXJlKCkp
CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiwgIiwgKmJ1aWx0SW5z
U2lnbmF0dXJlKSk7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIikiKTsKKworICAgIHJldHVy
biBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7Cit9CisKK1N0cmluZyBWZXJ0ZXhFbnRyeVBvaW50
U2NhZmZvbGRpbmc6OnVucGFjaygpCit7CisgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVy
OworCisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodW5wYWNrUmVzb3VyY2VzQW5kTmFtZWRCdWls
dElucygpKTsKKworICAgIGZvciAoYXV0byYgbmFtZWRTdGFnZUluIDogbV9uYW1lZFN0YWdlSW5z
KSB7CisgICAgICAgIGF1dG8mIHBhdGggPSBtX2VudHJ5UG9pbnRJdGVtcy5pbnB1dHNbbmFtZWRT
dGFnZUluLmluZGV4SW5FbnRyeVBvaW50SXRlbXNdLnBhdGg7CisgICAgICAgIGF1dG8mIGVsZW1l
bnROYW1lID0gbmFtZWRTdGFnZUluLmVsZW1lbnROYW1lOworICAgICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZChtYWtlU3RyaW5nKG1hbmdsZWRJbnB1dFBhdGgocGF0aCksICIgPSAiLCBtX3N0YWdl
SW5TdHJ1Y3ROYW1lLCAnLicsIGVsZW1lbnROYW1lLCAiO1xuIikpOworICAgIH0KKworICAgIHJl
dHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7Cit9CisKK1N0cmluZyBWZXJ0ZXhFbnRyeVBv
aW50U2NhZmZvbGRpbmc6OnBhY2soY29uc3QgU3RyaW5nJiBpbnB1dFZhcmlhYmxlTmFtZSwgY29u
c3QgU3RyaW5nJiBvdXRwdXRWYXJpYWJsZU5hbWUpCit7CisgICAgU3RyaW5nQnVpbGRlciBzdHJp
bmdCdWlsZGVyOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobV9yZXR1cm5T
dHJ1Y3ROYW1lLCAnICcsIG91dHB1dFZhcmlhYmxlTmFtZSkpOworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV9lbnRyeVBvaW50SXRlbXMub3V0cHV0cy5zaXplKCk7ICsraSkgeworICAgICAg
ICBhdXRvJiBlbGVtZW50TmFtZSA9IG1fbmFtZWRPdXRwdXRzW2ldLmVsZW1lbnROYW1lOworICAg
ICAgICBhdXRvJiBwYXRoID0gbV9lbnRyeVBvaW50SXRlbXMub3V0cHV0c1tpXS5wYXRoOworICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG91dHB1dFZhcmlhYmxlTmFtZSwg
Jy4nLCBlbGVtZW50TmFtZSwgIiA9ICIsIGlucHV0VmFyaWFibGVOYW1lLCBtYW5nbGVkT3V0cHV0
UGF0aChwYXRoKSwgIjtcbiIpKTsKKyAgICB9CisgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9T
dHJpbmcoKTsKK30KKworRnJhZ21lbnRFbnRyeVBvaW50U2NhZmZvbGRpbmc6OkZyYWdtZW50RW50
cnlQb2ludFNjYWZmb2xkaW5nKEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmlu
aXRpb24sIEludHJpbnNpY3MmIGludHJpbnNpY3MsIFR5cGVOYW1lciYgdHlwZU5hbWVyLCBFbnRy
eVBvaW50SXRlbXMmIGVudHJ5UG9pbnRJdGVtcywgSGFzaE1hcDxCaW5kaW5nKiwgc2l6ZV90PiYg
cmVzb3VyY2VNYXAsIExheW91dCYgbGF5b3V0LCBzdGQ6OmZ1bmN0aW9uPFN0cmluZygpPiYmIGdl
bmVyYXRlTmV4dFZhcmlhYmxlTmFtZSwgSGFzaE1hcDxBdHRhY2htZW50RGVzY3JpcHRvciosIHNp
emVfdD4mKQorICAgIDogRW50cnlQb2ludFNjYWZmb2xkaW5nKGZ1bmN0aW9uRGVmaW5pdGlvbiwg
aW50cmluc2ljcywgdHlwZU5hbWVyLCBlbnRyeVBvaW50SXRlbXMsIHJlc291cmNlTWFwLCBsYXlv
dXQsIFdURk1vdmUoZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKSkKKyAgICAsIG1fc3RhZ2VJblN0
cnVjdE5hbWUodHlwZU5hbWVyLmdlbmVyYXRlTmV4dFR5cGVOYW1lKCkpCisgICAgLCBtX3JldHVy
blN0cnVjdE5hbWUodHlwZU5hbWVyLmdlbmVyYXRlTmV4dFR5cGVOYW1lKCkpCisgICAgLCBtX3N0
YWdlSW5QYXJhbWV0ZXJOYW1lKG1fZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCkpCit7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2VudHJ5UG9pbnRJdGVtcy5pbnB1dHMuc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgYXV0byYgaW5wdXRJdGVtID0gbV9lbnRyeVBvaW50SXRlbXMuaW5wdXRz
W2ldOworICAgICAgICBpZiAoIVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8QVNUOjpTdGFnZUluT3V0
U2VtYW50aWM+KCppbnB1dEl0ZW0uc2VtYW50aWMpKQorICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIGF1dG8mIHN0YWdlSW5PdXRTZW1hbnRpYyA9IFdURjo6Z2V0PEFTVDo6U3RhZ2VJbk91
dFNlbWFudGljPigqaW5wdXRJdGVtLnNlbWFudGljKTsKKyAgICAgICAgTmFtZWRTdGFnZUluIG5h
bWVkU3RhZ2VJbjsKKyAgICAgICAgbmFtZWRTdGFnZUluLmluZGV4SW5FbnRyeVBvaW50SXRlbXMg
PSBpOworICAgICAgICBuYW1lZFN0YWdlSW4uZWxlbWVudE5hbWUgPSBtX3R5cGVOYW1lci5nZW5l
cmF0ZU5leHRTdHJ1Y3R1cmVFbGVtZW50TmFtZSgpOworICAgICAgICBuYW1lZFN0YWdlSW4uYXR0
cmlidXRlSW5kZXggPSBzdGFnZUluT3V0U2VtYW50aWMuaW5kZXgoKTsKKyAgICAgICAgbV9uYW1l
ZFN0YWdlSW5zLmFwcGVuZChXVEZNb3ZlKG5hbWVkU3RhZ2VJbikpOworICAgIH0KKworICAgIG1f
bmFtZWRPdXRwdXRzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9lbnRyeVBvaW50SXRlbXMub3V0
cHV0cy5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9lbnRyeVBvaW50SXRl
bXMub3V0cHV0cy5zaXplKCk7ICsraSkgeworICAgICAgICBOYW1lZE91dHB1dCBuYW1lZE91dHB1
dDsKKyAgICAgICAgbmFtZWRPdXRwdXQuZWxlbWVudE5hbWUgPSBtX3R5cGVOYW1lci5nZW5lcmF0
ZU5leHRTdHJ1Y3R1cmVFbGVtZW50TmFtZSgpOworICAgICAgICBtX25hbWVkT3V0cHV0cy51bmNo
ZWNrZWRBcHBlbmQoV1RGTW92ZShuYW1lZE91dHB1dCkpOworICAgIH0KK30KKworU3RyaW5nIEZy
YWdtZW50RW50cnlQb2ludFNjYWZmb2xkaW5nOjpoZWxwZXJUeXBlcygpCit7CisgICAgU3RyaW5n
QnVpbGRlciBzdHJpbmdCdWlsZGVyOworCisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0
cmluZygic3RydWN0ICIsIG1fc3RhZ2VJblN0cnVjdE5hbWUsICIge1xuIikpOworICAgIGZvciAo
YXV0byYgbmFtZWRTdGFnZUluIDogbV9uYW1lZFN0YWdlSW5zKSB7CisgICAgICAgIGF1dG8gbWFu
Z2xlZFR5cGVOYW1lID0gbV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCptX2VudHJ5UG9p
bnRJdGVtcy5pbnB1dHNbbmFtZWRTdGFnZUluLmluZGV4SW5FbnRyeVBvaW50SXRlbXNdLnVubmFt
ZWRUeXBlKTsKKyAgICAgICAgYXV0byBlbGVtZW50TmFtZSA9IG5hbWVkU3RhZ2VJbi5lbGVtZW50
TmFtZTsKKyAgICAgICAgYXV0byBhdHRyaWJ1dGVJbmRleCA9IG5hbWVkU3RhZ2VJbi5lbGVtZW50
TmFtZTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAgICIsIG1h
bmdsZWRUeXBlTmFtZSwgJyAnLCBlbGVtZW50TmFtZSwgIiBbW3VzZXIoIiwgYXR0cmlidXRlSW5k
ZXgsICIpXV07XG4iKSk7CisgICAgfQorICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9XG5cbiIp
OworCisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygic3RydWN0ICIsIG1fcmV0
dXJuU3RydWN0TmFtZSwgIiB7XG4iKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2Vu
dHJ5UG9pbnRJdGVtcy5vdXRwdXRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGF1dG8mIG91dHB1
dEl0ZW0gPSBtX2VudHJ5UG9pbnRJdGVtcy5vdXRwdXRzW2ldOworICAgICAgICBhdXRvIG1hbmds
ZWRUeXBlTmFtZSA9IG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqb3V0cHV0SXRlbS51
bm5hbWVkVHlwZSk7CisgICAgICAgIGF1dG8gZWxlbWVudE5hbWUgPSBtX25hbWVkT3V0cHV0c1tp
XS5lbGVtZW50TmFtZTsKKyAgICAgICAgYXV0byBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVGb3JTZW1h
bnRpYygqb3V0cHV0SXRlbS5zZW1hbnRpYyk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KG1ha2VTdHJpbmcoIiAgICAiLCBtYW5nbGVkVHlwZU5hbWUsICcgJywgZWxlbWVudE5hbWUsICcg
JywgYXR0cmlidXRlLCAiO1xuIikpOworICAgIH0KKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgi
fVxuXG4iKTsKKworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHJlc291cmNlSGVscGVyVHlwZXMo
KSk7CisKKyAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworfQorCitTdHJpbmcg
RnJhZ21lbnRFbnRyeVBvaW50U2NhZmZvbGRpbmc6OnNpZ25hdHVyZShTdHJpbmcmIGZ1bmN0aW9u
TmFtZSkKK3sKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CisKKyAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJmcmFnbWVudCAiLCBtX3JldHVyblN0cnVjdE5hbWUs
ICcgJywgZnVuY3Rpb25OYW1lLCAnKCcsIG1fc3RhZ2VJblN0cnVjdE5hbWUsICcgJywgbV9zdGFn
ZUluUGFyYW1ldGVyTmFtZSwgIiBbW3N0YWdlX2luXV0iKSk7CisgICAgaWYgKGF1dG8gcmVzb3Vy
Y2VTaWduYXR1cmUgPSB0aGlzLT5yZXNvdXJjZVNpZ25hdHVyZSgpKQorICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIsICIsICpyZXNvdXJjZVNpZ25hdHVyZSkpOworICAg
IGlmIChhdXRvIGJ1aWx0SW5zU2lnbmF0dXJlID0gdGhpcy0+YnVpbHRJbnNTaWduYXR1cmUoKSkK
KyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiLCAiLCAqYnVpbHRJbnNT
aWduYXR1cmUpKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiKSIpOworCisgICAgcmV0dXJu
IHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKK30KKworU3RyaW5nIEZyYWdtZW50RW50cnlQb2lu
dFNjYWZmb2xkaW5nOjp1bnBhY2soKQoreworICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRl
cjsKKworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHVucGFja1Jlc291cmNlc0FuZE5hbWVkQnVp
bHRJbnMoKSk7CisKKyAgICBmb3IgKGF1dG8mIG5hbWVkU3RhZ2VJbiA6IG1fbmFtZWRTdGFnZUlu
cykgeworICAgICAgICBhdXRvJiBwYXRoID0gbV9lbnRyeVBvaW50SXRlbXMuaW5wdXRzW25hbWVk
U3RhZ2VJbi5pbmRleEluRW50cnlQb2ludEl0ZW1zXS5wYXRoOworICAgICAgICBhdXRvJiBlbGVt
ZW50TmFtZSA9IG5hbWVkU3RhZ2VJbi5lbGVtZW50TmFtZTsKKyAgICAgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQobWFrZVN0cmluZyhtYW5nbGVkSW5wdXRQYXRoKHBhdGgpLCAiID0gIiwgbV9zdGFn
ZUluU3RydWN0TmFtZSwgJy4nLCBlbGVtZW50TmFtZSwgIjtcbiIpKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworfQorCitTdHJpbmcgRnJhZ21lbnRFbnRy
eVBvaW50U2NhZmZvbGRpbmc6OnBhY2soY29uc3QgU3RyaW5nJiBpbnB1dFZhcmlhYmxlTmFtZSwg
Y29uc3QgU3RyaW5nJiBvdXRwdXRWYXJpYWJsZU5hbWUpCit7CisgICAgU3RyaW5nQnVpbGRlciBz
dHJpbmdCdWlsZGVyOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobV9yZXR1
cm5TdHJ1Y3ROYW1lLCAnICcsIG91dHB1dFZhcmlhYmxlTmFtZSkpOworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV9lbnRyeVBvaW50SXRlbXMub3V0cHV0cy5zaXplKCk7ICsraSkgeworICAg
ICAgICBhdXRvJiBlbGVtZW50TmFtZSA9IG1fbmFtZWRPdXRwdXRzW2ldLmVsZW1lbnROYW1lOwor
ICAgICAgICBhdXRvJiBwYXRoID0gbV9lbnRyeVBvaW50SXRlbXMub3V0cHV0c1tpXS5wYXRoOwor
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG91dHB1dFZhcmlhYmxlTmFt
ZSwgJy4nLCBlbGVtZW50TmFtZSwgIiA9ICIsIGlucHV0VmFyaWFibGVOYW1lLCBtYW5nbGVkT3V0
cHV0UGF0aChwYXRoKSwgIjtcbiIpKTsKKyAgICB9CisgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIu
dG9TdHJpbmcoKTsKK30KKworQ29tcHV0ZUVudHJ5UG9pbnRTY2FmZm9sZGluZzo6Q29tcHV0ZUVu
dHJ5UG9pbnRTY2FmZm9sZGluZyhBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZp
bml0aW9uLCBJbnRyaW5zaWNzJiBpbnRyaW5zaWNzLCBUeXBlTmFtZXImIHR5cGVOYW1lciwgRW50
cnlQb2ludEl0ZW1zJiBlbnRyeVBvaW50SXRlbXMsIEhhc2hNYXA8QmluZGluZyosIHNpemVfdD4m
IHJlc291cmNlTWFwLCBMYXlvdXQmIGxheW91dCwgc3RkOjpmdW5jdGlvbjxTdHJpbmcoKT4mJiBn
ZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUpCisgICAgOiBFbnRyeVBvaW50U2NhZmZvbGRpbmcoZnVu
Y3Rpb25EZWZpbml0aW9uLCBpbnRyaW5zaWNzLCB0eXBlTmFtZXIsIGVudHJ5UG9pbnRJdGVtcywg
cmVzb3VyY2VNYXAsIGxheW91dCwgV1RGTW92ZShnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUpKQor
eworfQorCitTdHJpbmcgQ29tcHV0ZUVudHJ5UG9pbnRTY2FmZm9sZGluZzo6aGVscGVyVHlwZXMo
KQoreworICAgIHJldHVybiByZXNvdXJjZUhlbHBlclR5cGVzKCk7Cit9CisKK1N0cmluZyBDb21w
dXRlRW50cnlQb2ludFNjYWZmb2xkaW5nOjpzaWduYXR1cmUoU3RyaW5nJiBmdW5jdGlvbk5hbWUp
Cit7CisgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOworCisgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQobWFrZVN0cmluZygiY29tcHV0ZSB2b2lkICIsIGZ1bmN0aW9uTmFtZSwgJygnKSk7
CisgICAgYm9vbCBlbXB0eSA9IHRydWU7CisgICAgaWYgKGF1dG8gcmVzb3VyY2VTaWduYXR1cmUg
PSB0aGlzLT5yZXNvdXJjZVNpZ25hdHVyZSgpKSB7CisgICAgICAgIGVtcHR5ID0gZmFsc2U7Cisg
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoKnJlc291cmNlU2lnbmF0dXJl
KSk7CisgICAgfQorICAgIGlmIChhdXRvIGJ1aWx0SW5zU2lnbmF0dXJlID0gdGhpcy0+YnVpbHRJ
bnNTaWduYXR1cmUoKSkgeworICAgICAgICBpZiAoIWVtcHR5KQorICAgICAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQoIiwgIik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCpidWls
dEluc1NpZ25hdHVyZSk7CisgICAgfQorICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIpIik7CisK
KyAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworfQorCitTdHJpbmcgQ29tcHV0
ZUVudHJ5UG9pbnRTY2FmZm9sZGluZzo6dW5wYWNrKCkKK3sKKyAgICByZXR1cm4gdW5wYWNrUmVz
b3VyY2VzQW5kTmFtZWRCdWlsdElucygpOwogfQogCi1TdHJpbmcgRW50cnlQb2ludFNjYWZmb2xk
aW5nOjpwYWNrKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpCitTdHJpbmcgQ29tcHV0ZUVu
dHJ5UG9pbnRTY2FmZm9sZGluZzo6cGFjayhjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKQog
ewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRW50cnlQb2ludFNjYWZmb2xkaW5nLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEVudHJ5UG9p
bnRTY2FmZm9sZGluZy5oCmluZGV4IDhkNjVmYWQyMDdkZjUzOWU5ZWE3NDA0NTA1ZWE2ZTg3MjE0
Yzk0ZTAuLmQ4N2Y2ZTlmNTRlNzcxNjRmY2I0MWZlNmE2NWUwYzVjNTA1ODlhODEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRW50cnlQ
b2ludFNjYWZmb2xkaW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvTWV0YWwvV0hMU0xFbnRyeVBvaW50U2NhZmZvbGRpbmcuaApAQCAtMjcsNiArMjcsMTIgQEAK
IAogI2lmIEVOQUJMRShXRUJHUFUpCiAKKyNpbmNsdWRlICJXSExTTE1hcHBlZEJpbmRpbmdzLmgi
CisjaW5jbHVkZSAiV0hMU0xQaXBlbGluZURlc2NyaXB0b3IuaCIKKyNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIG5hbWVzcGFjZSBXSExTTCB7CkBA
IC0zNywyMyArNDMsMTMyIEBAIGNsYXNzIEZ1bmN0aW9uRGVmaW5pdGlvbjsKIAogfQogCitzdHJ1
Y3QgRW50cnlQb2ludEl0ZW1zOwogY2xhc3MgSW50cmluc2ljczsKIAogbmFtZXNwYWNlIE1ldGFs
IHsKIAotLy8gRklYTUU6IFRoaXMgbmVlZHMgdG8ga25vdyBhYm91dCB0aGUgcGlwZWxpbmUgc3Rh
dGUgb2JqZWN0IHRvIGVtaXQgZnVuY3Rpb24gcHJvbG9ndWVzIGFuZCBlcGlsb2d1ZXMuCitjbGFz
cyBUeXBlTmFtZXI7CisKIGNsYXNzIEVudHJ5UG9pbnRTY2FmZm9sZGluZyB7CiBwdWJsaWM6Ci0g
ICAgRW50cnlQb2ludFNjYWZmb2xkaW5nKEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiwgSW50cmlu
c2ljcyYpOworICAgIEVudHJ5UG9pbnRTY2FmZm9sZGluZyhBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlv
biYsIEludHJpbnNpY3MmLCBUeXBlTmFtZXImLCBFbnRyeVBvaW50SXRlbXMmLCBIYXNoTWFwPEJp
bmRpbmcqLCBzaXplX3Q+JiByZXNvdXJjZU1hcCwgTGF5b3V0Jiwgc3RkOjpmdW5jdGlvbjxTdHJp
bmcoKT4mJiBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUpOworICAgIHZpcnR1YWwgfkVudHJ5UG9p
bnRTY2FmZm9sZGluZygpID0gZGVmYXVsdDsKKworICAgIHZpcnR1YWwgU3RyaW5nIGhlbHBlclR5
cGVzKCkgPSAwOworICAgIHZpcnR1YWwgU3RyaW5nIHNpZ25hdHVyZShTdHJpbmcmIGZ1bmN0aW9u
TmFtZSkgPSAwOworICAgIHZpcnR1YWwgU3RyaW5nIHVucGFjaygpID0gMDsKKyAgICB2aXJ0dWFs
IFN0cmluZyBwYWNrKGNvbnN0IFN0cmluZyYgZXhpc3RpbmdWYXJpYWJsZU5hbWUsIGNvbnN0IFN0
cmluZyYgdmFyaWFibGVOYW1lKSA9IDA7CisKKyAgICBNYXBwZWRCaW5kR3JvdXBzIG1hcHBlZEJp
bmRHcm91cHMoKSBjb25zdDsKKyAgICBWZWN0b3I8U3RyaW5nPiYgcGFyYW1ldGVyVmFyaWFibGVz
KCkgeyByZXR1cm4gbV9wYXJhbWV0ZXJWYXJpYWJsZXM7IH0KKworcHJvdGVjdGVkOgorICAgIFN0
cmluZyByZXNvdXJjZUhlbHBlclR5cGVzKCk7CisgICAgT3B0aW9uYWw8U3RyaW5nPiByZXNvdXJj
ZVNpZ25hdHVyZSgpOworICAgIE9wdGlvbmFsPFN0cmluZz4gYnVpbHRJbnNTaWduYXR1cmUoKTsK
KworICAgIFN0cmluZyBtYW5nbGVkSW5wdXRQYXRoKFZlY3RvcjxTdHJpbmc+JiBwYXRoKTsKKyAg
ICBTdHJpbmcgbWFuZ2xlZE91dHB1dFBhdGgoVmVjdG9yPFN0cmluZz4mIHBhdGgpOworICAgIFN0
cmluZyB1bnBhY2tSZXNvdXJjZXNBbmROYW1lZEJ1aWx0SW5zKCk7CisKKyAgICBBU1Q6OkZ1bmN0
aW9uRGVmaW5pdGlvbiYgbV9mdW5jdGlvbkRlZmluaXRpb247CisgICAgSW50cmluc2ljcyYgbV9p
bnRyaW5zaWNzOworICAgIFR5cGVOYW1lciYgbV90eXBlTmFtZXI7CisgICAgRW50cnlQb2ludEl0
ZW1zJiBtX2VudHJ5UG9pbnRJdGVtczsKKyAgICBIYXNoTWFwPEJpbmRpbmcqLCBzaXplX3Q+JiBt
X3Jlc291cmNlTWFwOworICAgIExheW91dCYgbV9sYXlvdXQ7CisgICAgc3RkOjpmdW5jdGlvbjxT
dHJpbmcoKT4gbV9nZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWU7CisKKyAgICBzdHJ1Y3QgTmFtZWRC
aW5kaW5nIHsKKyAgICAgICAgU3RyaW5nIGVsZW1lbnROYW1lOworICAgICAgICB1bnNpZ25lZCBp
bmRleDsKKyAgICB9OworICAgIHN0cnVjdCBOYW1lZEJpbmRHcm91cCB7CisgICAgICAgIFN0cmlu
ZyBzdHJ1Y3ROYW1lOworICAgICAgICBTdHJpbmcgdmFyaWFibGVOYW1lOworICAgICAgICBWZWN0
b3I8TmFtZWRCaW5kaW5nPiBuYW1lZEJpbmRpbmdzOworICAgICAgICB1bnNpZ25lZCBhcmd1bWVu
dEJ1ZmZlckluZGV4OworICAgIH07CisgICAgVmVjdG9yPE5hbWVkQmluZEdyb3VwPiBtX25hbWVk
QmluZEdyb3VwczsgLy8gUGFyYWxsZWwgdG8gbV9sYXlvdXQKKworICAgIHN0cnVjdCBOYW1lZEJ1
aWx0SW4geworICAgICAgICBzaXplX3QgaW5kZXhJbkVudHJ5UG9pbnRJdGVtczsKKyAgICAgICAg
U3RyaW5nIHZhcmlhYmxlTmFtZTsKKyAgICB9OworICAgIFZlY3RvcjxOYW1lZEJ1aWx0SW4+IG1f
bmFtZWRCdWlsdEluczsKKworICAgIFZlY3RvcjxTdHJpbmc+IG1fcGFyYW1ldGVyVmFyaWFibGVz
OworfTsKKworY2xhc3MgVmVydGV4RW50cnlQb2ludFNjYWZmb2xkaW5nIDogcHVibGljIEVudHJ5
UG9pbnRTY2FmZm9sZGluZyB7CitwdWJsaWM6CisgICAgVmVydGV4RW50cnlQb2ludFNjYWZmb2xk
aW5nKEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiwgSW50cmluc2ljcyYsIFR5cGVOYW1lciYsIEVu
dHJ5UG9pbnRJdGVtcyYsIEhhc2hNYXA8QmluZGluZyosIHNpemVfdD4mIHJlc291cmNlTWFwLCBM
YXlvdXQmLCBzdGQ6OmZ1bmN0aW9uPFN0cmluZygpPiYmIGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFt
ZSwgSGFzaE1hcDxWZXJ0ZXhBdHRyaWJ1dGUqLCBzaXplX3Q+JiBtYXRjaGVkVmVydGV4QXR0cmli
dXRlcyk7CisgICAgdmlydHVhbCB+VmVydGV4RW50cnlQb2ludFNjYWZmb2xkaW5nKCkgPSBkZWZh
dWx0OworCisgICAgU3RyaW5nIGhlbHBlclR5cGVzKCkgb3ZlcnJpZGU7CisgICAgU3RyaW5nIHNp
Z25hdHVyZShTdHJpbmcmIGZ1bmN0aW9uTmFtZSkgb3ZlcnJpZGU7CisgICAgU3RyaW5nIHVucGFj
aygpIG92ZXJyaWRlOworICAgIFN0cmluZyBwYWNrKGNvbnN0IFN0cmluZyYgZXhpc3RpbmdWYXJp
YWJsZU5hbWUsIGNvbnN0IFN0cmluZyYgdmFyaWFibGVOYW1lKSBvdmVycmlkZTsKKworcHJpdmF0
ZToKKyAgICBIYXNoTWFwPFZlcnRleEF0dHJpYnV0ZSosIHNpemVfdD4mIG1fbWF0Y2hlZFZlcnRl
eEF0dHJpYnV0ZXM7CisgICAgU3RyaW5nIG1fc3RhZ2VJblN0cnVjdE5hbWU7CisgICAgU3RyaW5n
IG1fcmV0dXJuU3RydWN0TmFtZTsKKyAgICBTdHJpbmcgbV9zdGFnZUluUGFyYW1ldGVyTmFtZTsK
KworICAgIHN0cnVjdCBOYW1lZFN0YWdlSW4geworICAgICAgICBzaXplX3QgaW5kZXhJbkVudHJ5
UG9pbnRJdGVtczsKKyAgICAgICAgU3RyaW5nIGVsZW1lbnROYW1lOworICAgICAgICB1bnNpZ25l
ZCBhdHRyaWJ1dGVJbmRleDsKKyAgICB9OworICAgIFZlY3RvcjxOYW1lZFN0YWdlSW4+IG1fbmFt
ZWRTdGFnZUluczsKKworICAgIHN0cnVjdCBOYW1lZE91dHB1dCB7CisgICAgICAgIFN0cmluZyBl
bGVtZW50TmFtZTsKKyAgICB9OworICAgIFZlY3RvcjxOYW1lZE91dHB1dD4gbV9uYW1lZE91dHB1
dHM7Cit9OworCitjbGFzcyBGcmFnbWVudEVudHJ5UG9pbnRTY2FmZm9sZGluZyA6IHB1YmxpYyBF
bnRyeVBvaW50U2NhZmZvbGRpbmcgeworcHVibGljOgorICAgIEZyYWdtZW50RW50cnlQb2ludFNj
YWZmb2xkaW5nKEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiwgSW50cmluc2ljcyYsIFR5cGVOYW1l
ciYsIEVudHJ5UG9pbnRJdGVtcyYsIEhhc2hNYXA8QmluZGluZyosIHNpemVfdD4mIHJlc291cmNl
TWFwLCBMYXlvdXQmLCBzdGQ6OmZ1bmN0aW9uPFN0cmluZygpPiYmIGdlbmVyYXRlTmV4dFZhcmlh
YmxlTmFtZSwgSGFzaE1hcDxBdHRhY2htZW50RGVzY3JpcHRvciosIHNpemVfdD4mIG1hdGNoZWRD
b2xvckF0dGFjaG1lbnRzKTsKKyAgICB2aXJ0dWFsIH5GcmFnbWVudEVudHJ5UG9pbnRTY2FmZm9s
ZGluZygpID0gZGVmYXVsdDsKKworICAgIFN0cmluZyBoZWxwZXJUeXBlcygpIG92ZXJyaWRlOwor
ICAgIFN0cmluZyBzaWduYXR1cmUoU3RyaW5nJiBmdW5jdGlvbk5hbWUpIG92ZXJyaWRlOworICAg
IFN0cmluZyB1bnBhY2soKSBvdmVycmlkZTsKKyAgICBTdHJpbmcgcGFjayhjb25zdCBTdHJpbmcm
IGV4aXN0aW5nVmFyaWFibGVOYW1lLCBjb25zdCBTdHJpbmcmIHZhcmlhYmxlTmFtZSkgb3ZlcnJp
ZGU7CisKK3ByaXZhdGU6CisgICAgU3RyaW5nIG1fc3RhZ2VJblN0cnVjdE5hbWU7CisgICAgU3Ry
aW5nIG1fcmV0dXJuU3RydWN0TmFtZTsKKyAgICBTdHJpbmcgbV9zdGFnZUluUGFyYW1ldGVyTmFt
ZTsKKworICAgIHN0cnVjdCBOYW1lZFN0YWdlSW4geworICAgICAgICBzaXplX3QgaW5kZXhJbkVu
dHJ5UG9pbnRJdGVtczsKKyAgICAgICAgU3RyaW5nIGVsZW1lbnROYW1lOworICAgICAgICB1bnNp
Z25lZCBhdHRyaWJ1dGVJbmRleDsKKyAgICB9OworICAgIFZlY3RvcjxOYW1lZFN0YWdlSW4+IG1f
bmFtZWRTdGFnZUluczsKKworICAgIHN0cnVjdCBOYW1lZE91dHB1dCB7CisgICAgICAgIFN0cmlu
ZyBlbGVtZW50TmFtZTsKKyAgICB9OworICAgIFZlY3RvcjxOYW1lZE91dHB1dD4gbV9uYW1lZE91
dHB1dHM7Cit9OworCitjbGFzcyBDb21wdXRlRW50cnlQb2ludFNjYWZmb2xkaW5nIDogcHVibGlj
IEVudHJ5UG9pbnRTY2FmZm9sZGluZyB7CitwdWJsaWM6CisgICAgQ29tcHV0ZUVudHJ5UG9pbnRT
Y2FmZm9sZGluZyhBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYsIEludHJpbnNpY3MmLCBUeXBlTmFt
ZXImLCBFbnRyeVBvaW50SXRlbXMmLCBIYXNoTWFwPEJpbmRpbmcqLCBzaXplX3Q+JiByZXNvdXJj
ZU1hcCwgTGF5b3V0Jiwgc3RkOjpmdW5jdGlvbjxTdHJpbmcoKT4mJiBnZW5lcmF0ZU5leHRWYXJp
YWJsZU5hbWUpOworICAgIHZpcnR1YWwgfkNvbXB1dGVFbnRyeVBvaW50U2NhZmZvbGRpbmcoKSA9
IGRlZmF1bHQ7CiAKLSAgICBTdHJpbmcgaGVscGVyVHlwZXMoKTsKLSAgICBTdHJpbmcgc2lnbmF0
dXJlKCk7Ci0gICAgU3RyaW5nIHVucGFjaygpOwotICAgIFN0cmluZyBwYWNrKGNvbnN0IFN0cmlu
ZyYgZXhpc3RpbmdWYXJpYWJsZU5hbWUsIGNvbnN0IFN0cmluZyYgdmFyaWFibGVOYW1lKTsKKyAg
ICBTdHJpbmcgaGVscGVyVHlwZXMoKSBvdmVycmlkZTsKKyAgICBTdHJpbmcgc2lnbmF0dXJlKFN0
cmluZyYgZnVuY3Rpb25OYW1lKSBvdmVycmlkZTsKKyAgICBTdHJpbmcgdW5wYWNrKCkgb3ZlcnJp
ZGU7CisgICAgU3RyaW5nIHBhY2soY29uc3QgU3RyaW5nJiBleGlzdGluZ1ZhcmlhYmxlTmFtZSwg
Y29uc3QgU3RyaW5nJiB2YXJpYWJsZU5hbWUpIG92ZXJyaWRlOwogCiBwcml2YXRlOgotICAgIEFT
VDo6RnVuY3Rpb25EZWZpbml0aW9uKiBtX2Z1bmN0aW9uRGVmaW5pdGlvbjsKLSAgICBJbnRyaW5z
aWNzKiBtX2ludHJpbnNpY3M7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRnVuY3Rpb25Xcml0ZXIu
Y3BwCmluZGV4IDAxOWEyNjdiYmM4YmU2ZmQyN2VhMGUxMDhmODFiNzk0MjhkNTBjZjYuLjFiN2E0
MmFiY2RlNjJjMDI5NTM5ZGM0YWYxYjBmM2JkNmFhYTQ2NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRnVuY3Rpb25Xcml0ZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRnVu
Y3Rpb25Xcml0ZXIuY3BwCkBAIC01MCw2ICs1MCw3IEBACiAjaW5jbHVkZSAiV0hMU0xMb2dpY2Fs
Tm90RXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgIldITFNMTWFrZUFycmF5UmVmZXJlbmNlRXhwcmVz
c2lvbi5oIgogI2luY2x1ZGUgIldITFNMTWFrZVBvaW50ZXJFeHByZXNzaW9uLmgiCisjaW5jbHVk
ZSAiV0hMU0xNYXBwZWRCaW5kaW5ncy5oIgogI2luY2x1ZGUgIldITFNMTmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIldITFNMTmF0aXZlRnVuY3Rpb25Xcml0ZXIuaCIKICNp
bmNsdWRlICJXSExTTE5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5oIgpAQCAtODYsMjEgKzg3LDggQEAg
cHVibGljOgogICAgIHZpcnR1YWwgfkZ1bmN0aW9uRGVjbGFyYXRpb25Xcml0ZXIoKSA9IGRlZmF1
bHQ7CiAKICAgICBTdHJpbmcgdG9TdHJpbmcoKSB7IHJldHVybiBtX3N0cmluZ0J1aWxkZXIudG9T
dHJpbmcoKTsgfQotICAgIHZvaWQgdmlzaXQoQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uJiBmdW5j
dGlvbkRlY2xhcmF0aW9uKSBvdmVycmlkZQotICAgIHsKLSAgICAgICAgaWYgKGZ1bmN0aW9uRGVj
bGFyYXRpb24uZW50cnlQb2ludFR5cGUoKSkKLSAgICAgICAgICAgIHJldHVybjsKIAotICAgICAg
ICBhdXRvIGl0ZXJhdG9yID0gbV9mdW5jdGlvbk1hcHBpbmcuZmluZCgmZnVuY3Rpb25EZWNsYXJh
dGlvbik7Ci0gICAgICAgIEFTU0VSVChpdGVyYXRvciAhPSBtX2Z1bmN0aW9uTWFwcGluZy5lbmQo
KSk7Ci0gICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtX3R5cGVOYW1l
ci5tYW5nbGVkTmFtZUZvclR5cGUoZnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpLCAnICcsIGl0
ZXJhdG9yLT52YWx1ZSwgJygnKSk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnVu
Y3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAg
IGlmIChpKQotICAgICAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIiwgIik7Ci0g
ICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1l
Rm9yVHlwZSgqZnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbaV0udHlwZSgpKSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiKTtcbiIpOwotICAgIH0K
KyAgICB2b2lkIHZpc2l0KEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiYpIG92ZXJyaWRlOwogCiBw
cml2YXRlOgogICAgIFR5cGVOYW1lciYgbV90eXBlTmFtZXI7CkBAIC0xMDgsMTIgKzk2LDI5IEBA
IHByaXZhdGU6CiAgICAgU3RyaW5nQnVpbGRlciBtX3N0cmluZ0J1aWxkZXI7CiB9OwogCit2b2lk
IEZ1bmN0aW9uRGVjbGFyYXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlv
biYgZnVuY3Rpb25EZWNsYXJhdGlvbikKK3sKKyAgICBpZiAoZnVuY3Rpb25EZWNsYXJhdGlvbi5l
bnRyeVBvaW50VHlwZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIGl0ZXJhdG9yID0g
bV9mdW5jdGlvbk1hcHBpbmcuZmluZCgmZnVuY3Rpb25EZWNsYXJhdGlvbik7CisgICAgQVNTRVJU
KGl0ZXJhdG9yICE9IG1fZnVuY3Rpb25NYXBwaW5nLmVuZCgpKTsKKyAgICBtX3N0cmluZ0J1aWxk
ZXIuYXBwZW5kKG1ha2VTdHJpbmcobV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKGZ1bmN0
aW9uRGVjbGFyYXRpb24udHlwZSgpKSwgJyAnLCBpdGVyYXRvci0+dmFsdWUsICcoJykpOworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCku
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKGkpCisgICAgICAgICAgICBtX3N0cmluZ0J1aWxk
ZXIuYXBwZW5kKCIsICIpOworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1fdHlwZU5h
bWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqZnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClb
aV0udHlwZSgpKSk7CisgICAgfQorICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIik7XG4iKTsK
K30KKwogY2xhc3MgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyIDogcHVibGljIFZpc2l0b3Igewog
cHVibGljOgotICAgIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcihJbnRyaW5zaWNzJiBpbnRyaW5z
aWNzLCBUeXBlTmFtZXImIHR5cGVOYW1lciwgSGFzaE1hcDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRp
b24qLCBTdHJpbmc+JiBmdW5jdGlvbk1hcHBpbmcpCisgICAgRnVuY3Rpb25EZWZpbml0aW9uV3Jp
dGVyKEludHJpbnNpY3MmIGludHJpbnNpY3MsIFR5cGVOYW1lciYgdHlwZU5hbWVyLCBIYXNoTWFw
PEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiosIFN0cmluZz4mIGZ1bmN0aW9uTWFwcGluZywgTGF5
b3V0JiBsYXlvdXQpCiAgICAgICAgIDogbV9pbnRyaW5zaWNzKGludHJpbnNpY3MpCiAgICAgICAg
ICwgbV90eXBlTmFtZXIodHlwZU5hbWVyKQogICAgICAgICAsIG1fZnVuY3Rpb25NYXBwaW5nKGZ1
bmN0aW9uTWFwcGluZykKKyAgICAgICAgLCBtX2xheW91dChsYXlvdXQpCiAgICAgewogICAgIH0K
IApAQCAtMTIxLDQ2OSArMTI2LDYxMCBAQCBwdWJsaWM6CiAKICAgICBTdHJpbmcgdG9TdHJpbmco
KSB7IHJldHVybiBtX3N0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsgfQogCi0gICAgdm9pZCB2aXNp
dChBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24pIG92ZXJyaWRlCi0gICAgewotICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbV9mdW5jdGlvbk1h
cHBpbmcuZmluZCgmbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbik7Ci0gICAgICAgIEFTU0VSVChp
dGVyYXRvciAhPSBtX2Z1bmN0aW9uTWFwcGluZy5lbmQoKSk7Ci0gICAgICAgIG1fc3RyaW5nQnVp
bGRlci5hcHBlbmQod3JpdGVOYXRpdmVGdW5jdGlvbihuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
LCBpdGVyYXRvci0+dmFsdWUsIG1fdHlwZU5hbWVyKSk7Ci0gICAgfQorICAgIHZvaWQgdmlzaXQo
QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNp
dChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYpIG92ZXJyaWRlOworCitwcm90ZWN0ZWQ6CisgICAg
dmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8RW50cnlQb2ludFNjYWZmb2xkaW5nPiBjcmVhdGVFbnRy
eVBvaW50U2NhZmZvbGRpbmcoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mKSA9IDA7CisKKyAgICB2
b2lkIHZpc2l0KEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiYpIG92ZXJyaWRlOworICAgIHZvaWQg
dmlzaXQoQVNUOjpTdGF0ZW1lbnQmKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6Qmxv
Y2smKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6QnJlYWsmKSBvdmVycmlkZTsKKyAg
ICB2b2lkIHZpc2l0KEFTVDo6Q29udGludWUmKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFT
VDo6RG9XaGlsZUxvb3AmKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6RWZmZWN0ZnVs
RXhwcmVzc2lvblN0YXRlbWVudCYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpGYWxs
dGhyb3VnaCYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpGb3JMb29wJikgb3ZlcnJp
ZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OklmU3RhdGVtZW50Jikgb3ZlcnJpZGU7CisgICAgdm9p
ZCB2aXNpdChBU1Q6OlJldHVybiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpTd2l0
Y2hTdGF0ZW1lbnQmKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6U3dpdGNoQ2FzZSYp
IG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpUcmFwJikgb3ZlcnJpZGU7CisgICAgdm9p
ZCB2aXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50Jikgb3ZlcnJpZGU7Cisg
ICAgdm9pZCB2aXNpdChBU1Q6OldoaWxlTG9vcCYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQo
QVNUOjpJbnRlZ2VyTGl0ZXJhbCYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpVbnNp
Z25lZEludGVnZXJMaXRlcmFsJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkZsb2F0
TGl0ZXJhbCYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpOdWxsTGl0ZXJhbCYpIG92
ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpCb29sZWFuTGl0ZXJhbCYpIG92ZXJyaWRlOwor
ICAgIHZvaWQgdmlzaXQoQVNUOjpFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwmKSBvdmVycmlkZTsK
KyAgICB2b2lkIHZpc2l0KEFTVDo6RXhwcmVzc2lvbiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlz
aXQoQVNUOjpEb3RFeHByZXNzaW9uJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6Oklu
ZGV4RXhwcmVzc2lvbiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpQcm9wZXJ0eUFj
Y2Vzc0V4cHJlc3Npb24mKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6VmFyaWFibGVE
ZWNsYXJhdGlvbiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpBc3NpZ25tZW50RXhw
cmVzc2lvbiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpDYWxsRXhwcmVzc2lvbiYp
IG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpDb21tYUV4cHJlc3Npb24mKSBvdmVycmlk
ZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uJikgb3ZlcnJpZGU7
CisgICAgdm9pZCB2aXNpdChBU1Q6OkxvZ2ljYWxFeHByZXNzaW9uJikgb3ZlcnJpZGU7CisgICAg
dm9pZCB2aXNpdChBU1Q6OkxvZ2ljYWxOb3RFeHByZXNzaW9uJikgb3ZlcnJpZGU7CisgICAgdm9p
ZCB2aXNpdChBU1Q6Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24mKSBvdmVycmlkZTsKKyAg
ICB2b2lkIHZpc2l0KEFTVDo6TWFrZVBvaW50ZXJFeHByZXNzaW9uJikgb3ZlcnJpZGU7CisgICAg
dm9pZCB2aXNpdChBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24mKSBvdmVycmlkZTsKKyAg
ICB2b2lkIHZpc2l0KEFTVDo6VGVybmFyeUV4cHJlc3Npb24mKSBvdmVycmlkZTsKKyAgICB2b2lk
IHZpc2l0KEFTVDo6VmFyaWFibGVSZWZlcmVuY2UmKSBvdmVycmlkZTsKKworICAgIFN0cmluZyBj
b25zdGFudEV4cHJlc3Npb25TdHJpbmcoQVNUOjpDb25zdGFudEV4cHJlc3Npb24mKTsKIAotICAg
IHZvaWQgdmlzaXQoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbikg
b3ZlcnJpZGUKKyAgICBTdHJpbmcgZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCkKICAgICB7Ci0g
ICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX2Z1bmN0aW9uTWFwcGluZy5maW5kKCZmdW5jdGlvbkRl
ZmluaXRpb24pOwotICAgICAgICBBU1NFUlQoaXRlcmF0b3IgIT0gbV9mdW5jdGlvbk1hcHBpbmcu
ZW5kKCkpOwotICAgICAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLmVudHJ5UG9pbnRUeXBlKCkp
IHsKLSAgICAgICAgICAgIG1fZW50cnlQb2ludFNjYWZmb2xkaW5nID0gRW50cnlQb2ludFNjYWZm
b2xkaW5nKGZ1bmN0aW9uRGVmaW5pdGlvbiwgbV9pbnRyaW5zaWNzKTsKLSAgICAgICAgICAgIG1f
c3RyaW5nQnVpbGRlci5hcHBlbmQobV9lbnRyeVBvaW50U2NhZmZvbGRpbmctPmhlbHBlclR5cGVz
KCkpOwotICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAgICAgICAg
ICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtX2VudHJ5UG9pbnRTY2FmZm9s
ZGluZy0+c2lnbmF0dXJlKCksICIgeyIpKTsKLSAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5h
cHBlbmQobV9lbnRyeVBvaW50U2NhZmZvbGRpbmctPnVucGFjaygpKTsKLSAgICAgICAgICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdChmdW5jdGlvbkRlZmluaXRpb24uYmxvY2soKSk7Ci0gICAgICAgICAg
ICBBU1NFUlQobV9zdGFjay5pc0VtcHR5KCkpOwotICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVy
LmFwcGVuZCgifVxuIik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtX2VudHJ5UG9p
bnRTY2FmZm9sZGluZyA9IFdURjo6bnVsbG9wdDsKLSAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRl
ci5hcHBlbmQobWFrZVN0cmluZyhtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoZnVuY3Rp
b25EZWZpbml0aW9uLnR5cGUoKSksICcgJywgaXRlcmF0b3ItPnZhbHVlLCAnKCcpKTsKLSAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRl
cnMoKS5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgIGF1dG8mIHBhcmFtZXRlciA9IGZ1
bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbaV07Ci0gICAgICAgICAgICAgICAgaWYgKGkp
Ci0gICAgICAgICAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIiwgIik7Ci0gICAg
ICAgICAgICAgICAgYXV0byBwYXJhbWV0ZXJOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1l
KCk7Ci0gICAgICAgICAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3ZhcmlhYmxlTWFwcGluZy5h
ZGQoJnBhcmFtZXRlciwgcGFyYW1ldGVyTmFtZSk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUX1VO
VVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKLSAgICAgICAgICAgICAgICBt
X3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobV90eXBlTmFtZXIubWFuZ2xlZE5hbWVG
b3JUeXBlKCpwYXJhbWV0ZXIudHlwZSgpKSwgJyAnLCBwYXJhbWV0ZXJOYW1lKSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCIpIHtcbiIpOwotICAg
ICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGZ1bmN0aW9uRGVmaW5pdGlvbi5ibG9jaygpKTsK
LSAgICAgICAgICAgIEFTU0VSVChtX3N0YWNrLmlzRW1wdHkoKSk7Ci0gICAgICAgICAgICBtX3N0
cmluZ0J1aWxkZXIuYXBwZW5kKCJ9XG4iKTsKLSAgICAgICAgfQorICAgICAgICByZXR1cm4gbWFr
ZVN0cmluZygidmFyaWFibGUiLCBtX3ZhcmlhYmxlQ291bnQrKyk7CiAgICAgfQogCi1wcml2YXRl
OgotICAgIHZvaWQgdmlzaXQoQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uJikgb3ZlcnJpZGUKLSAg
ICB7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KKyAgICBJbnRyaW5zaWNz
JiBtX2ludHJpbnNpY3M7CisgICAgVHlwZU5hbWVyJiBtX3R5cGVOYW1lcjsKKyAgICBIYXNoTWFw
PEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiosIFN0cmluZz4mIG1fZnVuY3Rpb25NYXBwaW5nOwor
ICAgIEhhc2hNYXA8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uKiwgU3RyaW5nPiBtX3ZhcmlhYmxl
TWFwcGluZzsKKyAgICBTdHJpbmdCdWlsZGVyIG1fc3RyaW5nQnVpbGRlcjsKKyAgICBWZWN0b3I8
U3RyaW5nPiBtX3N0YWNrOworICAgIHN0ZDo6dW5pcXVlX3B0cjxFbnRyeVBvaW50U2NhZmZvbGRp
bmc+IG1fZW50cnlQb2ludFNjYWZmb2xkaW5nOworICAgIExheW91dCYgbV9sYXlvdXQ7CisgICAg
dW5zaWduZWQgbV92YXJpYWJsZUNvdW50IHsgMCB9OworfTsKIAotICAgIHZvaWQgdmlzaXQoQVNU
OjpTdGF0ZW1lbnQmIHN0YXRlbWVudCkgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIFZpc2l0b3I6
OnZpc2l0KHN0YXRlbWVudCk7Ci0gICAgfQordm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6
OnZpc2l0KEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYgbmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbikKK3sKKyAgICBhdXRvIGl0ZXJhdG9yID0gbV9mdW5jdGlvbk1hcHBpbmcuZmluZCgm
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbik7CisgICAgQVNTRVJUKGl0ZXJhdG9yICE9IG1fZnVu
Y3Rpb25NYXBwaW5nLmVuZCgpKTsKKyAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKHdyaXRlTmF0
aXZlRnVuY3Rpb24obmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiwgaXRlcmF0b3ItPnZhbHVlLCBt
X3R5cGVOYW1lcikpOworfQogCi0gICAgdm9pZCB2aXNpdChBU1Q6OkJsb2NrJiBibG9jaykgb3Zl
cnJpZGUKLSAgICB7Ci0gICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIntcbiIpOwotICAg
ICAgICBmb3IgKGF1dG8mIHN0YXRlbWVudCA6IGJsb2NrLnN0YXRlbWVudHMoKSkKLSAgICAgICAg
ICAgIGNoZWNrRXJyb3JBbmRWaXNpdChzdGF0ZW1lbnQpOwordm9pZCBGdW5jdGlvbkRlZmluaXRp
b25Xcml0ZXI6OnZpc2l0KEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXRp
b24pCit7CisgICAgYXV0byBpdGVyYXRvciA9IG1fZnVuY3Rpb25NYXBwaW5nLmZpbmQoJmZ1bmN0
aW9uRGVmaW5pdGlvbik7CisgICAgQVNTRVJUKGl0ZXJhdG9yICE9IG1fZnVuY3Rpb25NYXBwaW5n
LmVuZCgpKTsKKyAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLmVudHJ5UG9pbnRUeXBlKCkpIHsK
KyAgICAgICAgYXV0byBlbnRyeVBvaW50U2NhZmZvbGRpbmcgPSBjcmVhdGVFbnRyeVBvaW50U2Nh
ZmZvbGRpbmcoZnVuY3Rpb25EZWZpbml0aW9uKTsKKyAgICAgICAgaWYgKCFlbnRyeVBvaW50U2Nh
ZmZvbGRpbmcpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fZW50cnlQb2ludFNjYWZm
b2xkaW5nID0gV1RGTW92ZShlbnRyeVBvaW50U2NhZmZvbGRpbmcpOworICAgICAgICBtX3N0cmlu
Z0J1aWxkZXIuYXBwZW5kKG1fZW50cnlQb2ludFNjYWZmb2xkaW5nLT5oZWxwZXJUeXBlcygpKTsK
KyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKKyAgICAgICAgbV9zdHJpbmdC
dWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1fZW50cnlQb2ludFNjYWZmb2xkaW5nLT5zaWduYXR1
cmUoaXRlcmF0b3ItPnZhbHVlKSwgIiB7IikpOworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBw
ZW5kKG1fZW50cnlQb2ludFNjYWZmb2xkaW5nLT51bnBhY2soKSk7CisgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCk7ICsr
aSkgeworICAgICAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3ZhcmlhYmxlTWFwcGluZy5hZGQo
JmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbaV0sIG1fZW50cnlQb2ludFNjYWZmb2xk
aW5nLT5wYXJhbWV0ZXJWYXJpYWJsZXMoKVtpXSk7CisgICAgICAgICAgICBBU1NFUlRfVU5VU0VE
KGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgICAgICB9CisgICAgICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdChmdW5jdGlvbkRlZmluaXRpb24uYmxvY2soKSk7CisgICAgICAgIEFT
U0VSVChtX3N0YWNrLmlzRW1wdHkoKSk7CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQo
In1cbiIpOworICAgICAgICBtX2VudHJ5UG9pbnRTY2FmZm9sZGluZyA9IG51bGxwdHI7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKG1fZW50cnlQb2ludFNjYWZmb2xkaW5nID09IG51bGxw
dHIpOworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobV90eXBlTmFt
ZXIubWFuZ2xlZE5hbWVGb3JUeXBlKGZ1bmN0aW9uRGVmaW5pdGlvbi50eXBlKCkpLCAnICcsIGl0
ZXJhdG9yLT52YWx1ZSwgJygnKSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnVu
Y3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCk7ICsraSkgeworICAgICAgICAgICAg
YXV0byYgcGFyYW1ldGVyID0gZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVtpXTsKKyAg
ICAgICAgICAgIGlmIChpKQorICAgICAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQo
IiwgIik7CisgICAgICAgICAgICBhdXRvIHBhcmFtZXRlck5hbWUgPSBnZW5lcmF0ZU5leHRWYXJp
YWJsZU5hbWUoKTsKKyAgICAgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV92YXJpYWJsZU1hcHBp
bmcuYWRkKCZwYXJhbWV0ZXIsIHBhcmFtZXRlck5hbWUpOworICAgICAgICAgICAgQVNTRVJUX1VO
VVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICAgICAgICAgIG1fc3Ry
aW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5
cGUoKnBhcmFtZXRlci50eXBlKCkpLCAnICcsIHBhcmFtZXRlck5hbWUpKTsKKyAgICAgICAgfQor
ICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCIpIHtcbiIpOworICAgICAgICBjaGVja0Vy
cm9yQW5kVmlzaXQoZnVuY3Rpb25EZWZpbml0aW9uLmJsb2NrKCkpOworICAgICAgICBBU1NFUlQo
bV9zdGFjay5pc0VtcHR5KCkpOwogICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9XG4i
KTsKICAgICB9Cit9CiAKLSAgICB2b2lkIHZpc2l0KEFTVDo6QnJlYWsmKSBvdmVycmlkZQotICAg
IHsKLSAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiYnJlYWs7XG4iKTsKLSAgICB9Cit2
b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpGdW5jdGlvbkRlY2xhcmF0
aW9uJikKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KIAotICAgIHZvaWQgdmlzaXQo
QVNUOjpDb250aW51ZSYpIG92ZXJyaWRlCi0gICAgewotICAgICAgICAvLyBGSVhNRTogRmlndXJl
IG91dCB3aGljaCBsb29wIHdlJ3JlIGluLCBhbmQgcnVuIHRoZSBpbmNyZW1lbnQgY29kZQotICAg
ICAgICBDUkFTSCgpOwotICAgIH0KK3ZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNp
dChBU1Q6OlN0YXRlbWVudCYgc3RhdGVtZW50KQoreworICAgIFZpc2l0b3I6OnZpc2l0KHN0YXRl
bWVudCk7Cit9CiAKLSAgICB2b2lkIHZpc2l0KEFTVDo6RG9XaGlsZUxvb3AmIGRvV2hpbGVMb29w
KSBvdmVycmlkZQotICAgIHsKLSAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiZG8ge1xu
Iik7Ci0gICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb1doaWxlTG9vcC5ib2R5KCkpOwotICAg
ICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG9XaGlsZUxvb3AuY29uZGl0aW9uYWwoKSk7Ci0gICAg
ICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiaWYgKCEiLCBtX3N0YWNrLnRh
a2VMYXN0KCksICIpIGJyZWFrO1xuIikpOwotICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5k
KG1ha2VTdHJpbmcoIn0gd2hpbGUodHJ1ZSk7XG4iKSk7Ci0gICAgfQordm9pZCBGdW5jdGlvbkRl
ZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6QmxvY2smIGJsb2NrKQoreworICAgIG1fc3RyaW5n
QnVpbGRlci5hcHBlbmQoIntcbiIpOworICAgIGZvciAoYXV0byYgc3RhdGVtZW50IDogYmxvY2su
c3RhdGVtZW50cygpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoc3RhdGVtZW50KTsKKyAg
ICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9XG4iKTsKK30KIAotICAgIHZvaWQgdmlzaXQoQVNU
OjpFZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50JiBlZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVt
ZW50KSBvdmVycmlkZQotICAgIHsKLSAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGVmZmVjdGZ1
bEV4cHJlc3Npb25TdGF0ZW1lbnQuZWZmZWN0ZnVsRXhwcmVzc2lvbigpKTsKLSAgICAgICAgbV9z
dGFjay50YWtlTGFzdCgpOyAvLyBUaGUgc3RhdGVtZW50IGlzIGFscmVhZHkgZWZmZWN0ZnVsLCBz
byB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIHdpdGggdGhlIHJlc3VsdC4KLSAgICB9Cit2
b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpCcmVhayYpCit7CisgICAg
bV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiYnJlYWs7XG4iKTsKK30KIAotICAgIHZvaWQgdmlzaXQo
QVNUOjpGYWxsdGhyb3VnaCYpIG92ZXJyaWRlCi0gICAgewotICAgICAgICBtX3N0cmluZ0J1aWxk
ZXIuYXBwZW5kKCJbW2NsYW5nOjpmYWxsdGhyb3VnaF1dO1xuIik7IC8vIEZJWE1FOiBNYWtlIHN1
cmUgdGhpcyBpcyBva2F5LiBBbHRlcm5hdGl2ZWx5LCB3ZSBjb3VsZCBkbyBub3RoaW5nIGFuZCBq
dXN0IHJldHVybiBoZXJlIGluc3RlYWQuCi0gICAgfQordm9pZCBGdW5jdGlvbkRlZmluaXRpb25X
cml0ZXI6OnZpc2l0KEFTVDo6Q29udGludWUmKQoreworICAgIC8vIEZJWE1FOiBGaWd1cmUgb3V0
IHdoaWNoIGxvb3Agd2UncmUgaW4sIGFuZCBydW4gdGhlIGluY3JlbWVudCBjb2RlCisgICAgQ1JB
U0goKTsKK30KIAotICAgIHZvaWQgdmlzaXQoQVNUOjpGb3JMb29wJiBmb3JMb29wKSBvdmVycmlk
ZQotICAgIHsKLSAgICAgICAgV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6OlZh
cmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50JiB2YXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVu
dCkgewotICAgICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHZhcmlhYmxlRGVjbGFyYXRpb25z
U3RhdGVtZW50KTsKLSAgICAgICAgfSwgWyZdKFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+JiBl
eHByZXNzaW9uKSB7Ci0gICAgICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZXhwcmVzc2lvbik7
Ci0gICAgICAgICAgICBtX3N0YWNrLnRha2VMYXN0KCk7IC8vIFdlIGRvbid0IG5lZWQgdG8gZG8g
YW55dGhpbmcgd2l0aCB0aGUgcmVzdWx0LgotICAgICAgICB9KSwgZm9yTG9vcC5pbml0aWFsaXph
dGlvbigpKTsKLQotICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJmb3IgKCA7IDsgKSB7
XG4iKTsKLSAgICAgICAgaWYgKGZvckxvb3AuY29uZGl0aW9uKCkpIHsKLSAgICAgICAgICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdCgqZm9yTG9vcC5jb25kaXRpb24oKSk7Ci0gICAgICAgICAgICBtX3N0
cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoImlmICghIiwgbV9zdGFjay50YWtlTGFzdCgp
LCAiKSBicmVhaztcbiIpKTsKLSAgICAgICAgfQotICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQo
Zm9yTG9vcC5ib2R5KCkpOwotICAgICAgICBpZiAoZm9yTG9vcC5pbmNyZW1lbnQoKSkgewotICAg
ICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCpmb3JMb29wLmluY3JlbWVudCgpKTsKLSAgICAg
ICAgICAgIG1fc3RhY2sudGFrZUxhc3QoKTsKLSAgICAgICAgfQotICAgICAgICBtX3N0cmluZ0J1
aWxkZXIuYXBwZW5kKCJ9XG4iKTsKK3ZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNp
dChBU1Q6OkRvV2hpbGVMb29wJiBkb1doaWxlTG9vcCkKK3sKKyAgICBtX3N0cmluZ0J1aWxkZXIu
YXBwZW5kKCJkbyB7XG4iKTsKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG9XaGlsZUxvb3AuYm9k
eSgpKTsKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG9XaGlsZUxvb3AuY29uZGl0aW9uYWwoKSk7
CisgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJpZiAoISIsIG1fc3RhY2su
dGFrZUxhc3QoKSwgIikgYnJlYWs7XG4iKSk7CisgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCht
YWtlU3RyaW5nKCJ9IHdoaWxlKHRydWUpO1xuIikpOworfQorCit2b2lkIEZ1bmN0aW9uRGVmaW5p
dGlvbldyaXRlcjo6dmlzaXQoQVNUOjpFZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50JiBlZmZl
Y3RmdWxFeHByZXNzaW9uU3RhdGVtZW50KQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChlZmZl
Y3RmdWxFeHByZXNzaW9uU3RhdGVtZW50LmVmZmVjdGZ1bEV4cHJlc3Npb24oKSk7CisgICAgbV9z
dGFjay50YWtlTGFzdCgpOyAvLyBUaGUgc3RhdGVtZW50IGlzIGFscmVhZHkgZWZmZWN0ZnVsLCBz
byB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIHdpdGggdGhlIHJlc3VsdC4KK30KKwordm9p
ZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6RmFsbHRocm91Z2gmKQorewor
ICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIltbY2xhbmc6OmZhbGx0aHJvdWdoXV07XG4iKTsg
Ly8gRklYTUU6IE1ha2Ugc3VyZSB0aGlzIGlzIG9rYXkuIEFsdGVybmF0aXZlbHksIHdlIGNvdWxk
IGRvIG5vdGhpbmcgYW5kIGp1c3QgcmV0dXJuIGhlcmUgaW5zdGVhZC4KK30KKwordm9pZCBGdW5j
dGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6Rm9yTG9vcCYgZm9yTG9vcCkKK3sKKyAg
ICBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6VmFyaWFibGVEZWNsYXJhdGlv
bnNTdGF0ZW1lbnQmIHZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50KSB7CisgICAgICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdCh2YXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCk7CisgICAgfSwg
WyZdKFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+JiBleHByZXNzaW9uKSB7CisgICAgICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdChleHByZXNzaW9uKTsKKyAgICAgICAgbV9zdGFjay50YWtlTGFzdCgp
OyAvLyBXZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIHdpdGggdGhlIHJlc3VsdC4KKyAgICB9
KSwgZm9yTG9vcC5pbml0aWFsaXphdGlvbigpKTsKKworICAgIG1fc3RyaW5nQnVpbGRlci5hcHBl
bmQoImZvciAoIDsgOyApIHtcbiIpOworICAgIGlmIChmb3JMb29wLmNvbmRpdGlvbigpKSB7Cisg
ICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqZm9yTG9vcC5jb25kaXRpb24oKSk7CisgICAgICAg
IG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiaWYgKCEiLCBtX3N0YWNrLnRha2VM
YXN0KCksICIpIGJyZWFrO1xuIikpOwogICAgIH0KKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoZm9y
TG9vcC5ib2R5KCkpOworICAgIGlmIChmb3JMb29wLmluY3JlbWVudCgpKSB7CisgICAgICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdCgqZm9yTG9vcC5pbmNyZW1lbnQoKSk7CisgICAgICAgIG1fc3RhY2su
dGFrZUxhc3QoKTsKKyAgICB9CisgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgifVxuIik7Cit9
CiAKLSAgICB2b2lkIHZpc2l0KEFTVDo6SWZTdGF0ZW1lbnQmIGlmU3RhdGVtZW50KSBvdmVycmlk
ZQotICAgIHsKLSAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGlmU3RhdGVtZW50LmNvbmRpdGlv
bmFsKCkpOwotICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoImlmICgi
LCBtX3N0YWNrLnRha2VMYXN0KCksICIpIHtcbiIpKTsKLSAgICAgICAgY2hlY2tFcnJvckFuZFZp
c2l0KGlmU3RhdGVtZW50LmJvZHkoKSk7Ci0gICAgICAgIGlmIChpZlN0YXRlbWVudC5lbHNlQm9k
eSgpKSB7Ci0gICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9IGVsc2Uge1xuIik7
Ci0gICAgICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKmlmU3RhdGVtZW50LmVsc2VCb2R5KCkp
OwotICAgICAgICB9Ci0gICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIn1cbiIpOwordm9p
ZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6SWZTdGF0ZW1lbnQmIGlmU3Rh
dGVtZW50KQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChpZlN0YXRlbWVudC5jb25kaXRpb25h
bCgpKTsKKyAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoImlmICgiLCBtX3N0
YWNrLnRha2VMYXN0KCksICIpIHtcbiIpKTsKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoaWZTdGF0
ZW1lbnQuYm9keSgpKTsKKyAgICBpZiAoaWZTdGF0ZW1lbnQuZWxzZUJvZHkoKSkgeworICAgICAg
ICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9IGVsc2Uge1xuIik7CisgICAgICAgIGNoZWNrRXJy
b3JBbmRWaXNpdCgqaWZTdGF0ZW1lbnQuZWxzZUJvZHkoKSk7CiAgICAgfQorICAgIG1fc3RyaW5n
QnVpbGRlci5hcHBlbmQoIn1cbiIpOworfQogCi0gICAgdm9pZCB2aXNpdChBU1Q6OlJldHVybiYg
cmV0dXJuU3RhdGVtZW50KSBvdmVycmlkZQotICAgIHsKLSAgICAgICAgaWYgKHJldHVyblN0YXRl
bWVudC52YWx1ZSgpKSB7Ci0gICAgICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKnJldHVyblN0
YXRlbWVudC52YWx1ZSgpKTsKLSAgICAgICAgICAgIGlmIChtX2VudHJ5UG9pbnRTY2FmZm9sZGlu
ZykgewotICAgICAgICAgICAgICAgIGF1dG8gdmFyaWFibGVOYW1lID0gZ2VuZXJhdGVOZXh0VmFy
aWFibGVOYW1lKCk7Ci0gICAgICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtX2Vu
dHJ5UG9pbnRTY2FmZm9sZGluZy0+cGFjayhtX3N0YWNrLnRha2VMYXN0KCksIHZhcmlhYmxlTmFt
ZSkpOwotICAgICAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygi
cmV0dXJuICIsIHZhcmlhYmxlTmFtZSwgIjtcbiIpKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAg
ICAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygicmV0dXJuICIs
IG1fc3RhY2sudGFrZUxhc3QoKSwgIjtcbiIpKTsKK3ZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3Jp
dGVyOjp2aXNpdChBU1Q6OlJldHVybiYgcmV0dXJuU3RhdGVtZW50KQoreworICAgIGlmIChyZXR1
cm5TdGF0ZW1lbnQudmFsdWUoKSkgeworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKnJldHVy
blN0YXRlbWVudC52YWx1ZSgpKTsKKyAgICAgICAgaWYgKG1fZW50cnlQb2ludFNjYWZmb2xkaW5n
KSB7CisgICAgICAgICAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxl
TmFtZSgpOworICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtX2VudHJ5UG9pbnRT
Y2FmZm9sZGluZy0+cGFjayhtX3N0YWNrLnRha2VMYXN0KCksIHZhcmlhYmxlTmFtZSkpOworICAg
ICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJyZXR1cm4gIiwgdmFy
aWFibGVOYW1lLCAiO1xuIikpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1fc3RyaW5n
QnVpbGRlci5hcHBlbmQoInJldHVybjtcbiIpOwotICAgIH0KKyAgICAgICAgICAgIG1fc3RyaW5n
QnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygicmV0dXJuICIsIG1fc3RhY2sudGFrZUxhc3QoKSwg
IjtcbiIpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgicmV0
dXJuO1xuIik7Cit9CiAKLSAgICB2b2lkIHZpc2l0KEFTVDo6U3dpdGNoU3RhdGVtZW50JiBzd2l0
Y2hTdGF0ZW1lbnQpIG92ZXJyaWRlCi0gICAgewotICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQo
c3dpdGNoU3RhdGVtZW50LnZhbHVlKCkpOwordm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6
OnZpc2l0KEFTVDo6U3dpdGNoU3RhdGVtZW50JiBzd2l0Y2hTdGF0ZW1lbnQpCit7CisgICAgY2hl
Y2tFcnJvckFuZFZpc2l0KHN3aXRjaFN0YXRlbWVudC52YWx1ZSgpKTsKIAotICAgICAgICBtX3N0
cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoInN3aXRjaCAoIiwgbV9zdGFjay50YWtlTGFz
dCgpLCAiKSB7IikpOwotICAgICAgICBmb3IgKGF1dG8mIHN3aXRjaENhc2UgOiBzd2l0Y2hTdGF0
ZW1lbnQuc3dpdGNoQ2FzZXMoKSkKLSAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChzd2l0
Y2hDYXNlKTsKLSAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgifVxuIik7Ci0gICAgfQor
ICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygic3dpdGNoICgiLCBtX3N0YWNr
LnRha2VMYXN0KCksICIpIHsiKSk7CisgICAgZm9yIChhdXRvJiBzd2l0Y2hDYXNlIDogc3dpdGNo
U3RhdGVtZW50LnN3aXRjaENhc2VzKCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChzd2l0
Y2hDYXNlKTsKKyAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9XG4iKTsKK30KIAotICAgIHZv
aWQgdmlzaXQoQVNUOjpTd2l0Y2hDYXNlJiBzd2l0Y2hDYXNlKSBvdmVycmlkZQotICAgIHsKLSAg
ICAgICAgaWYgKHN3aXRjaENhc2UudmFsdWUoKSkKLSAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRl
ci5hcHBlbmQobWFrZVN0cmluZygiY2FzZSAiLCBjb25zdGFudEV4cHJlc3Npb25TdHJpbmcoKnN3
aXRjaENhc2UudmFsdWUoKSksICI6XG4iKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1f
c3RyaW5nQnVpbGRlci5hcHBlbmQoImRlZmF1bHQ6XG4iKTsKLSAgICAgICAgY2hlY2tFcnJvckFu
ZFZpc2l0KHN3aXRjaENhc2UuYmxvY2soKSk7Ci0gICAgICAgIC8vIEZJWE1FOiBGaWd1cmUgb3V0
IHdoZXRoZXIgd2UgbmVlZCB0byBicmVhayBvciBmYWxsdGhyb3VnaC4KLSAgICAgICAgQ1JBU0go
KTsKLSAgICB9Cit2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpTd2l0
Y2hDYXNlJiBzd2l0Y2hDYXNlKQoreworICAgIGlmIChzd2l0Y2hDYXNlLnZhbHVlKCkpCisgICAg
ICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiY2FzZSAiLCBjb25zdGFudEV4
cHJlc3Npb25TdHJpbmcoKnN3aXRjaENhc2UudmFsdWUoKSksICI6XG4iKSk7CisgICAgZWxzZQor
ICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJkZWZhdWx0OlxuIik7CisgICAgY2hlY2tF
cnJvckFuZFZpc2l0KHN3aXRjaENhc2UuYmxvY2soKSk7CisgICAgLy8gRklYTUU6IEZpZ3VyZSBv
dXQgd2hldGhlciB3ZSBuZWVkIHRvIGJyZWFrIG9yIGZhbGx0aHJvdWdoLgorICAgIENSQVNIKCk7
Cit9CiAKLSAgICB2b2lkIHZpc2l0KEFTVDo6VHJhcCYpIG92ZXJyaWRlCi0gICAgewotICAgICAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMKLSAgICAgICAgQ1JBU0goKTsKLSAgICB9Cit2b2lk
IEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpUcmFwJikKK3sKKyAgICAvLyBG
SVhNRTogSW1wbGVtZW50IHRoaXMKKyAgICBDUkFTSCgpOworfQogCi0gICAgdm9pZCB2aXNpdChB
U1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50JiB2YXJpYWJsZURlY2xhcmF0aW9uc1N0
YXRlbWVudCkgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIFZpc2l0b3I6OnZpc2l0KHZhcmlhYmxl
RGVjbGFyYXRpb25zU3RhdGVtZW50KTsKLSAgICB9Cit2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldy
aXRlcjo6dmlzaXQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCYgdmFyaWFibGVE
ZWNsYXJhdGlvbnNTdGF0ZW1lbnQpCit7CisgICAgVmlzaXRvcjo6dmlzaXQodmFyaWFibGVEZWNs
YXJhdGlvbnNTdGF0ZW1lbnQpOworfQogCi0gICAgdm9pZCB2aXNpdChBU1Q6OldoaWxlTG9vcCYg
d2hpbGVMb29wKSBvdmVycmlkZQotICAgIHsKLSAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVu
ZChtYWtlU3RyaW5nKCJ3aGlsZSAodHJ1ZSkge1xuIikpOwotICAgICAgICBjaGVja0Vycm9yQW5k
VmlzaXQod2hpbGVMb29wLmNvbmRpdGlvbmFsKCkpOwotICAgICAgICBtX3N0cmluZ0J1aWxkZXIu
YXBwZW5kKG1ha2VTdHJpbmcoImlmICghIiwgbV9zdGFjay50YWtlTGFzdCgpLCAiKSBicmVhaztc
biIpKTsKLSAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHdoaWxlTG9vcC5ib2R5KCkpOwotICAg
ICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9XG4iKTsKLSAgICB9Cit2b2lkIEZ1bmN0aW9u
RGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpXaGlsZUxvb3AmIHdoaWxlTG9vcCkKK3sKKyAg
ICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIndoaWxlICh0cnVlKSB7XG4iKSk7
CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHdoaWxlTG9vcC5jb25kaXRpb25hbCgpKTsKKyAgICBt
X3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoImlmICghIiwgbV9zdGFjay50YWtlTGFz
dCgpLCAiKSBicmVhaztcbiIpKTsKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQod2hpbGVMb29wLmJv
ZHkoKSk7CisgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgifVxuIik7Cit9CiAKLSAgICB2b2lk
IHZpc2l0KEFTVDo6SW50ZWdlckxpdGVyYWwmIGludGVnZXJMaXRlcmFsKSBvdmVycmlkZQotICAg
IHsKLSAgICAgICAgQVNTRVJUKGludGVnZXJMaXRlcmFsLnJlc29sdmVkVHlwZSgpKTsKLSAgICAg
ICAgYXV0byB2YXJpYWJsZU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKLSAgICAg
ICAgYXV0byBtYW5nbGVkVHlwZU5hbWUgPSBtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUo
KmludGVnZXJMaXRlcmFsLnJlc29sdmVkVHlwZSgpKTsKLSAgICAgICAgbV9zdHJpbmdCdWlsZGVy
LmFwcGVuZChtYWtlU3RyaW5nKG1hbmdsZWRUeXBlTmFtZSwgJyAnLCB2YXJpYWJsZU5hbWUsICIg
PSBzdGF0aWNfY2FzdDwiLCBtYW5nbGVkVHlwZU5hbWUsICI+KCIsIGludGVnZXJMaXRlcmFsLnZh
bHVlKCksICIpO1xuIikpOwotICAgICAgICBtX3N0YWNrLmFwcGVuZCh2YXJpYWJsZU5hbWUpOwot
ICAgIH0KK3ZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OkludGVnZXJM
aXRlcmFsJiBpbnRlZ2VyTGl0ZXJhbCkKK3sKKyAgICBBU1NFUlQoaW50ZWdlckxpdGVyYWwucmVz
b2x2ZWRUeXBlKCkpOworICAgIGF1dG8gdmFyaWFibGVOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFi
bGVOYW1lKCk7CisgICAgYXV0byBtYW5nbGVkVHlwZU5hbWUgPSBtX3R5cGVOYW1lci5tYW5nbGVk
TmFtZUZvclR5cGUoKmludGVnZXJMaXRlcmFsLnJlc29sdmVkVHlwZSgpKTsKKyAgICBtX3N0cmlu
Z0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWFuZ2xlZFR5cGVOYW1lLCAnICcsIHZhcmlhYmxl
TmFtZSwgIiA9IHN0YXRpY19jYXN0PCIsIG1hbmdsZWRUeXBlTmFtZSwgIj4oIiwgaW50ZWdlckxp
dGVyYWwudmFsdWUoKSwgIik7XG4iKSk7CisgICAgbV9zdGFjay5hcHBlbmQodmFyaWFibGVOYW1l
KTsKK30KIAotICAgIHZvaWQgdmlzaXQoQVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsJiB1bnNp
Z25lZEludGVnZXJMaXRlcmFsKSBvdmVycmlkZQotICAgIHsKLSAgICAgICAgQVNTRVJUKHVuc2ln
bmVkSW50ZWdlckxpdGVyYWwucmVzb2x2ZWRUeXBlKCkpOwotICAgICAgICBhdXRvIHZhcmlhYmxl
TmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOwotICAgICAgICBhdXRvIG1hbmdsZWRU
eXBlTmFtZSA9IG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqdW5zaWduZWRJbnRlZ2Vy
TGl0ZXJhbC5yZXNvbHZlZFR5cGUoKSk7Ci0gICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQo
bWFrZVN0cmluZyhtYW5nbGVkVHlwZU5hbWUsICcgJywgdmFyaWFibGVOYW1lLCAiID0gc3RhdGlj
X2Nhc3Q8IiwgbWFuZ2xlZFR5cGVOYW1lLCAiPigiLCB1bnNpZ25lZEludGVnZXJMaXRlcmFsLnZh
bHVlKCksICIpO1xuIikpOwotICAgICAgICBtX3N0YWNrLmFwcGVuZCh2YXJpYWJsZU5hbWUpOwot
ICAgIH0KK3ZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OlVuc2lnbmVk
SW50ZWdlckxpdGVyYWwmIHVuc2lnbmVkSW50ZWdlckxpdGVyYWwpCit7CisgICAgQVNTRVJUKHVu
c2lnbmVkSW50ZWdlckxpdGVyYWwucmVzb2x2ZWRUeXBlKCkpOworICAgIGF1dG8gdmFyaWFibGVO
YW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7CisgICAgYXV0byBtYW5nbGVkVHlwZU5h
bWUgPSBtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKnVuc2lnbmVkSW50ZWdlckxpdGVy
YWwucmVzb2x2ZWRUeXBlKCkpOworICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmlu
ZyhtYW5nbGVkVHlwZU5hbWUsICcgJywgdmFyaWFibGVOYW1lLCAiID0gc3RhdGljX2Nhc3Q8Iiwg
bWFuZ2xlZFR5cGVOYW1lLCAiPigiLCB1bnNpZ25lZEludGVnZXJMaXRlcmFsLnZhbHVlKCksICIp
O1xuIikpOworICAgIG1fc3RhY2suYXBwZW5kKHZhcmlhYmxlTmFtZSk7Cit9CiAKLSAgICB2b2lk
IHZpc2l0KEFTVDo6RmxvYXRMaXRlcmFsJiBmbG9hdExpdGVyYWwpIG92ZXJyaWRlCi0gICAgewot
ICAgICAgICBBU1NFUlQoZmxvYXRMaXRlcmFsLnJlc29sdmVkVHlwZSgpKTsKLSAgICAgICAgYXV0
byB2YXJpYWJsZU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKLSAgICAgICAgYXV0
byBtYW5nbGVkVHlwZU5hbWUgPSBtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKmZsb2F0
TGl0ZXJhbC5yZXNvbHZlZFR5cGUoKSk7Ci0gICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQo
bWFrZVN0cmluZyhtYW5nbGVkVHlwZU5hbWUsICcgJywgdmFyaWFibGVOYW1lLCAiID0gc3RhdGlj
X2Nhc3Q8IiwgbWFuZ2xlZFR5cGVOYW1lLCAiPigiLCBmbG9hdExpdGVyYWwudmFsdWUoKSwgIik7
XG4iKSk7Ci0gICAgICAgIG1fc3RhY2suYXBwZW5kKHZhcmlhYmxlTmFtZSk7Ci0gICAgfQordm9p
ZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6RmxvYXRMaXRlcmFsJiBmbG9h
dExpdGVyYWwpCit7CisgICAgQVNTRVJUKGZsb2F0TGl0ZXJhbC5yZXNvbHZlZFR5cGUoKSk7Cisg
ICAgYXV0byB2YXJpYWJsZU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKKyAgICBh
dXRvIG1hbmdsZWRUeXBlTmFtZSA9IG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqZmxv
YXRMaXRlcmFsLnJlc29sdmVkVHlwZSgpKTsKKyAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1h
a2VTdHJpbmcobWFuZ2xlZFR5cGVOYW1lLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9IHN0YXRpY19j
YXN0PCIsIG1hbmdsZWRUeXBlTmFtZSwgIj4oIiwgZmxvYXRMaXRlcmFsLnZhbHVlKCksICIpO1xu
IikpOworICAgIG1fc3RhY2suYXBwZW5kKHZhcmlhYmxlTmFtZSk7Cit9CiAKLSAgICB2b2lkIHZp
c2l0KEFTVDo6TnVsbExpdGVyYWwmIG51bGxMaXRlcmFsKSBvdmVycmlkZQotICAgIHsKLSAgICAg
ICAgQVNTRVJUKG51bGxMaXRlcmFsLnJlc29sdmVkVHlwZSgpKTsKLSAgICAgICAgYXV0byYgdW5p
ZnlOb2RlID0gbnVsbExpdGVyYWwucmVzb2x2ZWRUeXBlKCktPnVuaWZ5Tm9kZSgpOwotICAgICAg
ICBBU1NFUlQoaXM8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlOb2RlKSk7Ci0gICAgICAgIGF1dG8m
IHVubmFtZWRUeXBlID0gZG93bmNhc3Q8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlOb2RlKTsKLSAg
ICAgICAgYm9vbCBpc0FycmF5UmVmZXJlbmNlVHlwZSA9IGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VU
eXBlPih1bm5hbWVkVHlwZSk7Ci0KLSAgICAgICAgYXV0byB2YXJpYWJsZU5hbWUgPSBnZW5lcmF0
ZU5leHRWYXJpYWJsZU5hbWUoKTsKLSAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtl
U3RyaW5nKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbnVsbExpdGVyYWwucmVzb2x2
ZWRUeXBlKCkpLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9ICIpKTsKLSAgICAgICAgaWYgKGlzQXJy
YXlSZWZlcmVuY2VUeXBlKQotICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgieyBu
dWxscHRyLCAwIH0iKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVy
LmFwcGVuZCgibnVsbHB0ciIpOwotICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCI7XG4i
KTsKLSAgICAgICAgbV9zdGFjay5hcHBlbmQodmFyaWFibGVOYW1lKTsKLSAgICB9Cit2b2lkIEZ1
bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpOdWxsTGl0ZXJhbCYgbnVsbExpdGVy
YWwpCit7CisgICAgQVNTRVJUKG51bGxMaXRlcmFsLnJlc29sdmVkVHlwZSgpKTsKKyAgICBhdXRv
JiB1bmlmeU5vZGUgPSBudWxsTGl0ZXJhbC5yZXNvbHZlZFR5cGUoKS0+dW5pZnlOb2RlKCk7Cisg
ICAgQVNTRVJUKGlzPEFTVDo6VW5uYW1lZFR5cGU+KHVuaWZ5Tm9kZSkpOworICAgIGF1dG8mIHVu
bmFtZWRUeXBlID0gZG93bmNhc3Q8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlOb2RlKTsKKyAgICBi
b29sIGlzQXJyYXlSZWZlcmVuY2VUeXBlID0gaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHVu
bmFtZWRUeXBlKTsKKworICAgIGF1dG8gdmFyaWFibGVOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFi
bGVOYW1lKCk7CisgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1fdHlwZU5h
bWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbnVsbExpdGVyYWwucmVzb2x2ZWRUeXBlKCkpLCAnICcs
IHZhcmlhYmxlTmFtZSwgIiA9ICIpKTsKKyAgICBpZiAoaXNBcnJheVJlZmVyZW5jZVR5cGUpCisg
ICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoInsgbnVsbHB0ciwgMCB9Iik7CisgICAgZWxz
ZQorICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJudWxscHRyIik7CisgICAgbV9zdHJp
bmdCdWlsZGVyLmFwcGVuZCgiO1xuIik7CisgICAgbV9zdGFjay5hcHBlbmQodmFyaWFibGVOYW1l
KTsKK30KIAotICAgIHZvaWQgdmlzaXQoQVNUOjpCb29sZWFuTGl0ZXJhbCYgYm9vbGVhbkxpdGVy
YWwpIG92ZXJyaWRlCi0gICAgewotICAgICAgICBBU1NFUlQoYm9vbGVhbkxpdGVyYWwucmVzb2x2
ZWRUeXBlKCkpOwotICAgICAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlh
YmxlTmFtZSgpOwotICAgICAgICBhdXRvIG1hbmdsZWRUeXBlTmFtZSA9IG1fdHlwZU5hbWVyLm1h
bmdsZWROYW1lRm9yVHlwZSgqYm9vbGVhbkxpdGVyYWwucmVzb2x2ZWRUeXBlKCkpOwotICAgICAg
ICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWFuZ2xlZFR5cGVOYW1lLCAnICcs
IHZhcmlhYmxlTmFtZSwgIiA9IHN0YXRpY19jYXN0PCIsIG1hbmdsZWRUeXBlTmFtZSwgIj4oIiwg
Ym9vbGVhbkxpdGVyYWwudmFsdWUoKSA/ICJ0cnVlIiA6ICJmYWxzZSIsICIpO1xuIikpOwotICAg
ICAgICBtX3N0YWNrLmFwcGVuZCh2YXJpYWJsZU5hbWUpOwotICAgIH0KK3ZvaWQgRnVuY3Rpb25E
ZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OkJvb2xlYW5MaXRlcmFsJiBib29sZWFuTGl0ZXJh
bCkKK3sKKyAgICBBU1NFUlQoYm9vbGVhbkxpdGVyYWwucmVzb2x2ZWRUeXBlKCkpOworICAgIGF1
dG8gdmFyaWFibGVOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7CisgICAgYXV0byBt
YW5nbGVkVHlwZU5hbWUgPSBtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKmJvb2xlYW5M
aXRlcmFsLnJlc29sdmVkVHlwZSgpKTsKKyAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VT
dHJpbmcobWFuZ2xlZFR5cGVOYW1lLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9IHN0YXRpY19jYXN0
PCIsIG1hbmdsZWRUeXBlTmFtZSwgIj4oIiwgYm9vbGVhbkxpdGVyYWwudmFsdWUoKSA/ICJ0cnVl
IiA6ICJmYWxzZSIsICIpO1xuIikpOworICAgIG1fc3RhY2suYXBwZW5kKHZhcmlhYmxlTmFtZSk7
Cit9CiAKLSAgICB2b2lkIHZpc2l0KEFTVDo6RW51bWVyYXRpb25NZW1iZXJMaXRlcmFsJiBlbnVt
ZXJhdGlvbk1lbWJlckxpdGVyYWwpIG92ZXJyaWRlCi0gICAgewotICAgICAgICBBU1NFUlQoZW51
bWVyYXRpb25NZW1iZXJMaXRlcmFsLnJlc29sdmVkVHlwZSgpKTsKLSAgICAgICAgQVNTRVJUKGVu
dW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5lbnVtZXJhdGlvbkRlZmluaXRpb24oKSk7Ci0gICAgICAg
IEFTU0VSVChlbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuZW51bWVyYXRpb25EZWZpbml0aW9uKCkp
OwotICAgICAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgp
OwotICAgICAgICBhdXRvIG1hbmdsZWRUeXBlTmFtZSA9IG1fdHlwZU5hbWVyLm1hbmdsZWROYW1l
Rm9yVHlwZSgqZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLnJlc29sdmVkVHlwZSgpKTsKLSAgICAg
ICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1hbmdsZWRUeXBlTmFtZSwgJyAn
LCB2YXJpYWJsZU5hbWUsICIgPSAiLCBtYW5nbGVkVHlwZU5hbWUsICcuJywgbV90eXBlTmFtZXIu
bWFuZ2xlZE5hbWVGb3JFbnVtZXJhdGlvbk1lbWJlcigqZW51bWVyYXRpb25NZW1iZXJMaXRlcmFs
LmVudW1lcmF0aW9uTWVtYmVyKCkpLCAiO1xuIikpOwotICAgICAgICBtX3N0YWNrLmFwcGVuZCh2
YXJpYWJsZU5hbWUpOwotICAgIH0KK3ZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNp
dChBU1Q6OkVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCYgZW51bWVyYXRpb25NZW1iZXJMaXRlcmFs
KQoreworICAgIEFTU0VSVChlbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwucmVzb2x2ZWRUeXBlKCkp
OworICAgIEFTU0VSVChlbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuZW51bWVyYXRpb25EZWZpbml0
aW9uKCkpOworICAgIEFTU0VSVChlbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuZW51bWVyYXRpb25E
ZWZpbml0aW9uKCkpOworICAgIGF1dG8gdmFyaWFibGVOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFi
bGVOYW1lKCk7CisgICAgYXV0byBtYW5nbGVkVHlwZU5hbWUgPSBtX3R5cGVOYW1lci5tYW5nbGVk
TmFtZUZvclR5cGUoKmVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5yZXNvbHZlZFR5cGUoKSk7Cisg
ICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1hbmdsZWRUeXBlTmFtZSwgJyAn
LCB2YXJpYWJsZU5hbWUsICIgPSAiLCBtYW5nbGVkVHlwZU5hbWUsICcuJywgbV90eXBlTmFtZXIu
bWFuZ2xlZE5hbWVGb3JFbnVtZXJhdGlvbk1lbWJlcigqZW51bWVyYXRpb25NZW1iZXJMaXRlcmFs
LmVudW1lcmF0aW9uTWVtYmVyKCkpLCAiO1xuIikpOworICAgIG1fc3RhY2suYXBwZW5kKHZhcmlh
YmxlTmFtZSk7Cit9CiAKLSAgICB2b2lkIHZpc2l0KEFTVDo6RXhwcmVzc2lvbiYgZXhwcmVzc2lv
bikgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIFZpc2l0b3I6OnZpc2l0KGV4cHJlc3Npb24pOwot
ICAgIH0KK3ZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OkV4cHJlc3Np
b24mIGV4cHJlc3Npb24pCit7CisgICAgVmlzaXRvcjo6dmlzaXQoZXhwcmVzc2lvbik7Cit9CiAK
LSAgICB2b2lkIHZpc2l0KEFTVDo6RG90RXhwcmVzc2lvbiYpIG92ZXJyaWRlCi0gICAgewotICAg
ICAgICAvLyBUaGlzIHNob3VsZCBiZSBsb3dlcmVkIGFscmVhZHkuCi0gICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgIH0KK3ZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNp
dChBU1Q6OkRvdEV4cHJlc3Npb24mKQoreworICAgIC8vIFRoaXMgc2hvdWxkIGJlIGxvd2VyZWQg
YWxyZWFkeS4KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KIAotICAgIHZvaWQgdmlzaXQo
QVNUOjpJbmRleEV4cHJlc3Npb24mKSBvdmVycmlkZQotICAgIHsKLSAgICAgICAgLy8gVGhpcyBz
aG91bGQgYmUgbG93ZXJlZCBhbHJlYWR5LgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICB9Cit2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpJbmRleEV4
cHJlc3Npb24mKQoreworICAgIC8vIFRoaXMgc2hvdWxkIGJlIGxvd2VyZWQgYWxyZWFkeS4KKyAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KIAotICAgIHZvaWQgdmlzaXQoQVNUOjpQcm9wZXJ0
eUFjY2Vzc0V4cHJlc3Npb24mKSBvdmVycmlkZQotICAgIHsKLSAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgfQordm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFT
VDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uJikKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKK30KIAotICAgIHZvaWQgdmlzaXQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uJiB2YXJpYWJs
ZURlY2xhcmF0aW9uKSBvdmVycmlkZQotICAgIHsKLSAgICAgICAgQVNTRVJUKHZhcmlhYmxlRGVj
bGFyYXRpb24udHlwZSgpKTsKLSAgICAgICAgaWYgKHZhcmlhYmxlRGVjbGFyYXRpb24uaW5pdGlh
bGl6ZXIoKSkKLSAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqdmFyaWFibGVEZWNsYXJh
dGlvbi5pbml0aWFsaXplcigpKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvLyBGSVhN
RTogWmVyby1maWxsIHRoZSB2YXJpYWJsZS4KLSAgICAgICAgICAgIENSQVNIKCk7Ci0gICAgICAg
IH0KLSAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBxdWFsaWZpZXJzLgotICAgICAgICBhdXRv
IHZhcmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOwotICAgICAgICBhdXRv
IGFkZFJlc3VsdCA9IG1fdmFyaWFibGVNYXBwaW5nLmFkZCgmdmFyaWFibGVEZWNsYXJhdGlvbiwg
dmFyaWFibGVOYW1lKTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3Vs
dC5pc05ld0VudHJ5KTsKLSAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5n
KG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqdmFyaWFibGVEZWNsYXJhdGlvbi50eXBl
KCkpLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9ICIsIG1fc3RhY2sudGFrZUxhc3QoKSwgIjtcbiIp
KTsKLSAgICAgICAgbV9zdGFjay5hcHBlbmQodmFyaWFibGVOYW1lKTsKK3ZvaWQgRnVuY3Rpb25E
ZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24mIHZhcmlhYmxl
RGVjbGFyYXRpb24pCit7CisgICAgQVNTRVJUKHZhcmlhYmxlRGVjbGFyYXRpb24udHlwZSgpKTsK
KyAgICBpZiAodmFyaWFibGVEZWNsYXJhdGlvbi5pbml0aWFsaXplcigpKQorICAgICAgICBjaGVj
a0Vycm9yQW5kVmlzaXQoKnZhcmlhYmxlRGVjbGFyYXRpb24uaW5pdGlhbGl6ZXIoKSk7CisgICAg
ZWxzZSB7CisgICAgICAgIC8vIEZJWE1FOiBaZXJvLWZpbGwgdGhlIHZhcmlhYmxlLgorICAgICAg
ICBDUkFTSCgpOwogICAgIH0KKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHF1YWxpZmllcnMuCisg
ICAgYXV0byB2YXJpYWJsZU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKKyAgICBh
dXRvIGFkZFJlc3VsdCA9IG1fdmFyaWFibGVNYXBwaW5nLmFkZCgmdmFyaWFibGVEZWNsYXJhdGlv
biwgdmFyaWFibGVOYW1lKTsKKyAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0
LmlzTmV3RW50cnkpOworICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtX3R5
cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKnZhcmlhYmxlRGVjbGFyYXRpb24udHlwZSgpKSwg
JyAnLCB2YXJpYWJsZU5hbWUsICIgPSAiLCBtX3N0YWNrLnRha2VMYXN0KCksICI7XG4iKSk7Cisg
ICAgbV9zdGFjay5hcHBlbmQodmFyaWFibGVOYW1lKTsKK30KIAotICAgIHZvaWQgdmlzaXQoQVNU
OjpBc3NpZ25tZW50RXhwcmVzc2lvbiYgYXNzaWdubWVudEV4cHJlc3Npb24pIG92ZXJyaWRlCi0g
ICAgewotICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoYXNzaWdubWVudEV4cHJlc3Npb24ubGVm
dCgpKTsKLSAgICAgICAgYXV0byBsZWZ0TmFtZSA9IG1fc3RhY2sudGFrZUxhc3QoKTsKLSAgICAg
ICAgY2hlY2tFcnJvckFuZFZpc2l0KGFzc2lnbm1lbnRFeHByZXNzaW9uLnJpZ2h0KCkpOwotICAg
ICAgICBhdXRvIHJpZ2h0TmFtZSA9IG1fc3RhY2sudGFrZUxhc3QoKTsKLSAgICAgICAgbV9zdHJp
bmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKGxlZnROYW1lLCAiID0gIiwgcmlnaHROYW1lLCAi
O1xuIikpOwotICAgIH0KK3ZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6
OkFzc2lnbm1lbnRFeHByZXNzaW9uJiBhc3NpZ25tZW50RXhwcmVzc2lvbikKK3sKKyAgICBjaGVj
a0Vycm9yQW5kVmlzaXQoYXNzaWdubWVudEV4cHJlc3Npb24ubGVmdCgpKTsKKyAgICBhdXRvIGxl
ZnROYW1lID0gbV9zdGFjay50YWtlTGFzdCgpOworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChhc3Np
Z25tZW50RXhwcmVzc2lvbi5yaWdodCgpKTsKKyAgICBhdXRvIHJpZ2h0TmFtZSA9IG1fc3RhY2su
dGFrZUxhc3QoKTsKKyAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobGVmdE5h
bWUsICIgPSAiLCByaWdodE5hbWUsICI7XG4iKSk7Cit9CiAKLSAgICB2b2lkIHZpc2l0KEFTVDo6
Q2FsbEV4cHJlc3Npb24mIGNhbGxFeHByZXNzaW9uKSBvdmVycmlkZQotICAgIHsKLSAgICAgICAg
VmVjdG9yPFN0cmluZz4gYXJndW1lbnROYW1lczsKLSAgICAgICAgZm9yIChhdXRvJiBhcmd1bWVu
dCA6IGNhbGxFeHByZXNzaW9uLmFyZ3VtZW50cygpKSB7Ci0gICAgICAgICAgICBjaGVja0Vycm9y
QW5kVmlzaXQoYXJndW1lbnQpOwotICAgICAgICAgICAgYXJndW1lbnROYW1lcy5hcHBlbmQobV9z
dGFjay50YWtlTGFzdCgpKTsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlQoY2FsbEV4cHJlc3Np
b24ucmVzb2x2ZWRUeXBlKCkpOwotICAgICAgICBBU1NFUlQoY2FsbEV4cHJlc3Npb24uZnVuY3Rp
b24oKSk7Ci0gICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX2Z1bmN0aW9uTWFwcGluZy5maW5kKGNh
bGxFeHByZXNzaW9uLmZ1bmN0aW9uKCkpOwotICAgICAgICBBU1NFUlQoaXRlcmF0b3IgIT0gbV9m
dW5jdGlvbk1hcHBpbmcuZW5kKCkpOwotICAgICAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdlbmVy
YXRlTmV4dFZhcmlhYmxlTmFtZSgpOwotICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1h
a2VTdHJpbmcobV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpjYWxsRXhwcmVzc2lvbi5y
ZXNvbHZlZFR5cGUoKSksICcgJywgdmFyaWFibGVOYW1lLCAiID0gIiwgaXRlcmF0b3ItPnZhbHVl
LCAnKCcpKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmd1bWVudE5hbWVzLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoaSkKLSAgICAgICAgICAgICAgICBtX3N0cmlu
Z0J1aWxkZXIuYXBwZW5kKCIsICIpOwotICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVu
ZChhcmd1bWVudE5hbWVzW2ldKTsKLSAgICAgICAgfQotICAgICAgICBtX3N0cmluZ0J1aWxkZXIu
YXBwZW5kKCIpO1xuIik7Ci0gICAgICAgIG1fc3RhY2suYXBwZW5kKHZhcmlhYmxlTmFtZSk7Ci0g
ICAgfQordm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6Q2FsbEV4cHJl
c3Npb24mIGNhbGxFeHByZXNzaW9uKQoreworICAgIFZlY3RvcjxTdHJpbmc+IGFyZ3VtZW50TmFt
ZXM7CisgICAgZm9yIChhdXRvJiBhcmd1bWVudCA6IGNhbGxFeHByZXNzaW9uLmFyZ3VtZW50cygp
KSB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChhcmd1bWVudCk7CisgICAgICAgIGFyZ3Vt
ZW50TmFtZXMuYXBwZW5kKG1fc3RhY2sudGFrZUxhc3QoKSk7CisgICAgfQorICAgIEFTU0VSVChj
YWxsRXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSk7CisgICAgQVNTRVJUKGNhbGxFeHByZXNzaW9u
LmZ1bmN0aW9uKCkpOworICAgIGF1dG8gaXRlcmF0b3IgPSBtX2Z1bmN0aW9uTWFwcGluZy5maW5k
KGNhbGxFeHByZXNzaW9uLmZ1bmN0aW9uKCkpOworICAgIEFTU0VSVChpdGVyYXRvciAhPSBtX2Z1
bmN0aW9uTWFwcGluZy5lbmQoKSk7CisgICAgYXV0byB2YXJpYWJsZU5hbWUgPSBnZW5lcmF0ZU5l
eHRWYXJpYWJsZU5hbWUoKTsKKyAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmco
bV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpjYWxsRXhwcmVzc2lvbi5yZXNvbHZlZFR5
cGUoKSksICcgJywgdmFyaWFibGVOYW1lLCAiID0gIiwgaXRlcmF0b3ItPnZhbHVlLCAnKCcpKTsK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ3VtZW50TmFtZXMuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgaWYgKGkpCisgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCIsICIp
OworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKGFyZ3VtZW50TmFtZXNbaV0pOworICAg
IH0KKyAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCIpO1xuIik7CisgICAgbV9zdGFjay5hcHBl
bmQodmFyaWFibGVOYW1lKTsKK30KIAotICAgIHZvaWQgdmlzaXQoQVNUOjpDb21tYUV4cHJlc3Np
b24mIGNvbW1hRXhwcmVzc2lvbikgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIFN0cmluZyByZXN1
bHQ7Ci0gICAgICAgIGZvciAoYXV0byYgZXhwcmVzc2lvbiA6IGNvbW1hRXhwcmVzc2lvbi5saXN0
KCkpIHsKLSAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChleHByZXNzaW9uKTsKLSAgICAg
ICAgICAgIHJlc3VsdCA9IG1fc3RhY2sudGFrZUxhc3QoKTsKLSAgICAgICAgfQotICAgICAgICBt
X3N0YWNrLmFwcGVuZChyZXN1bHQpOwordm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZp
c2l0KEFTVDo6Q29tbWFFeHByZXNzaW9uJiBjb21tYUV4cHJlc3Npb24pCit7CisgICAgU3RyaW5n
IHJlc3VsdDsKKyAgICBmb3IgKGF1dG8mIGV4cHJlc3Npb24gOiBjb21tYUV4cHJlc3Npb24ubGlz
dCgpKSB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChleHByZXNzaW9uKTsKKyAgICAgICAg
cmVzdWx0ID0gbV9zdGFjay50YWtlTGFzdCgpOwogICAgIH0KKyAgICBtX3N0YWNrLmFwcGVuZChy
ZXN1bHQpOworfQogCi0gICAgdm9pZCB2aXNpdChBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbiYg
ZGVyZWZlcmVuY2VFeHByZXNzaW9uKSBvdmVycmlkZQotICAgIHsKLSAgICAgICAgY2hlY2tFcnJv
ckFuZFZpc2l0KGRlcmVmZXJlbmNlRXhwcmVzc2lvbi5wb2ludGVyKCkpOwotICAgICAgICBhdXRv
IHJpZ2h0ID0gbV9zdGFjay50YWtlTGFzdCgpOwotICAgICAgICBBU1NFUlQoZGVyZWZlcmVuY2VF
eHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKTsKLSAgICAgICAgYXV0byB2YXJpYWJsZU5hbWUgPSBn
ZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKLSAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVu
ZChtYWtlU3RyaW5nKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqZGVyZWZlcmVuY2VF
eHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKSwgJyAnLCB2YXJpYWJsZU5hbWUsICIgPSAqIiwgcmln
aHQsICI7XG4iKSk7Ci0gICAgICAgIG1fc3RhY2suYXBwZW5kKHZhcmlhYmxlTmFtZSk7Ci0gICAg
fQordm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6RGVyZWZlcmVuY2VF
eHByZXNzaW9uJiBkZXJlZmVyZW5jZUV4cHJlc3Npb24pCit7CisgICAgY2hlY2tFcnJvckFuZFZp
c2l0KGRlcmVmZXJlbmNlRXhwcmVzc2lvbi5wb2ludGVyKCkpOworICAgIGF1dG8gcmlnaHQgPSBt
X3N0YWNrLnRha2VMYXN0KCk7CisgICAgQVNTRVJUKGRlcmVmZXJlbmNlRXhwcmVzc2lvbi5yZXNv
bHZlZFR5cGUoKSk7CisgICAgYXV0byB2YXJpYWJsZU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJs
ZU5hbWUoKTsKKyAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobV90eXBlTmFt
ZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpkZXJlZmVyZW5jZUV4cHJlc3Npb24ucmVzb2x2ZWRUeXBl
KCkpLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9ICoiLCByaWdodCwgIjtcbiIpKTsKKyAgICBtX3N0
YWNrLmFwcGVuZCh2YXJpYWJsZU5hbWUpOworfQogCi0gICAgdm9pZCB2aXNpdChBU1Q6OkxvZ2lj
YWxFeHByZXNzaW9uJiBsb2dpY2FsRXhwcmVzc2lvbikgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAg
IGNoZWNrRXJyb3JBbmRWaXNpdChsb2dpY2FsRXhwcmVzc2lvbi5sZWZ0KCkpOwotICAgICAgICBh
dXRvIGxlZnQgPSBtX3N0YWNrLnRha2VMYXN0KCk7Ci0gICAgICAgIGNoZWNrRXJyb3JBbmRWaXNp
dChsb2dpY2FsRXhwcmVzc2lvbi5yaWdodCgpKTsKLSAgICAgICAgYXV0byByaWdodCA9IG1fc3Rh
Y2sudGFrZUxhc3QoKTsKLSAgICAgICAgQVNTRVJUKGxvZ2ljYWxFeHByZXNzaW9uLnJlc29sdmVk
VHlwZSgpKTsKLSAgICAgICAgYXV0byB2YXJpYWJsZU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJs
ZU5hbWUoKTsKLSAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1fdHlw
ZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbG9naWNhbEV4cHJlc3Npb24ucmVzb2x2ZWRUeXBl
KCkpLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9ICIsIGxlZnQpKTsKLSAgICAgICAgc3dpdGNoIChs
b2dpY2FsRXhwcmVzc2lvbi50eXBlKCkpIHsKLSAgICAgICAgY2FzZSBBU1Q6OkxvZ2ljYWxFeHBy
ZXNzaW9uOjpUeXBlOjpBbmQ6Ci0gICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCIg
JiYgIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IEFTU0VSVChsb2dpY2FsRXhwcmVzc2lvbi50eXBlKCkgPT0gQVNUOjpMb2dpY2FsRXhwcmVzc2lv
bjo6VHlwZTo6T3IpOwotICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiIHx8ICIp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgbV9zdHJpbmdCdWlsZGVy
LmFwcGVuZChtYWtlU3RyaW5nKHJpZ2h0LCAiO1xuIikpOwotICAgICAgICBtX3N0YWNrLmFwcGVu
ZCh2YXJpYWJsZU5hbWUpOwotICAgIH0KK3ZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2
aXNpdChBU1Q6OkxvZ2ljYWxFeHByZXNzaW9uJiBsb2dpY2FsRXhwcmVzc2lvbikKK3sKKyAgICBj
aGVja0Vycm9yQW5kVmlzaXQobG9naWNhbEV4cHJlc3Npb24ubGVmdCgpKTsKKyAgICBhdXRvIGxl
ZnQgPSBtX3N0YWNrLnRha2VMYXN0KCk7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KGxvZ2ljYWxF
eHByZXNzaW9uLnJpZ2h0KCkpOworICAgIGF1dG8gcmlnaHQgPSBtX3N0YWNrLnRha2VMYXN0KCk7
CisgICAgQVNTRVJUKGxvZ2ljYWxFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKTsKKyAgICBhdXRv
IHZhcmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOworICAgIG1fc3RyaW5n
QnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUo
KmxvZ2ljYWxFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKSwgJyAnLCB2YXJpYWJsZU5hbWUsICIg
PSAiLCBsZWZ0KSk7CisgICAgc3dpdGNoIChsb2dpY2FsRXhwcmVzc2lvbi50eXBlKCkpIHsKKyAg
ICBjYXNlIEFTVDo6TG9naWNhbEV4cHJlc3Npb246OlR5cGU6OkFuZDoKKyAgICAgICAgbV9zdHJp
bmdCdWlsZGVyLmFwcGVuZCgiICYmICIpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBBU1NFUlQobG9naWNhbEV4cHJlc3Npb24udHlwZSgpID09IEFTVDo6TG9naWNhbEV4
cHJlc3Npb246OlR5cGU6Ok9yKTsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiIHx8
ICIpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCht
YWtlU3RyaW5nKHJpZ2h0LCAiO1xuIikpOworICAgIG1fc3RhY2suYXBwZW5kKHZhcmlhYmxlTmFt
ZSk7Cit9CiAKLSAgICB2b2lkIHZpc2l0KEFTVDo6TG9naWNhbE5vdEV4cHJlc3Npb24mIGxvZ2lj
YWxOb3RFeHByZXNzaW9uKSBvdmVycmlkZQotICAgIHsKLSAgICAgICAgY2hlY2tFcnJvckFuZFZp
c2l0KGxvZ2ljYWxOb3RFeHByZXNzaW9uLm9wZXJhbmQoKSk7Ci0gICAgICAgIGF1dG8gb3BlcmFu
ZCA9IG1fc3RhY2sudGFrZUxhc3QoKTsKLSAgICAgICAgQVNTRVJUKGxvZ2ljYWxOb3RFeHByZXNz
aW9uLnJlc29sdmVkVHlwZSgpKTsKLSAgICAgICAgYXV0byB2YXJpYWJsZU5hbWUgPSBnZW5lcmF0
ZU5leHRWYXJpYWJsZU5hbWUoKTsKLSAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtl
U3RyaW5nKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbG9naWNhbE5vdEV4cHJlc3Np
b24ucmVzb2x2ZWRUeXBlKCkpLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9ICEiLCBvcGVyYW5kLCAi
O1xuIikpOwotICAgICAgICBtX3N0YWNrLmFwcGVuZCh2YXJpYWJsZU5hbWUpOwotICAgIH0KK3Zv
aWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OkxvZ2ljYWxOb3RFeHByZXNz
aW9uJiBsb2dpY2FsTm90RXhwcmVzc2lvbikKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQobG9n
aWNhbE5vdEV4cHJlc3Npb24ub3BlcmFuZCgpKTsKKyAgICBhdXRvIG9wZXJhbmQgPSBtX3N0YWNr
LnRha2VMYXN0KCk7CisgICAgQVNTRVJUKGxvZ2ljYWxOb3RFeHByZXNzaW9uLnJlc29sdmVkVHlw
ZSgpKTsKKyAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgp
OworICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtX3R5cGVOYW1lci5tYW5n
bGVkTmFtZUZvclR5cGUoKmxvZ2ljYWxOb3RFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKSwgJyAn
LCB2YXJpYWJsZU5hbWUsICIgPSAhIiwgb3BlcmFuZCwgIjtcbiIpKTsKKyAgICBtX3N0YWNrLmFw
cGVuZCh2YXJpYWJsZU5hbWUpOworfQogCi0gICAgdm9pZCB2aXNpdChBU1Q6Ok1ha2VBcnJheVJl
ZmVyZW5jZUV4cHJlc3Npb24mIG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24pIG92ZXJyaWRl
Cit2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpNYWtlQXJyYXlSZWZl
cmVuY2VFeHByZXNzaW9uJiBtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uKQoreworICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdChtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmxWYWx1ZSgpKTsK
KyAgICBhdXRvIGxWYWx1ZSA9IG1fc3RhY2sudGFrZUxhc3QoKTsKKyAgICBBU1NFUlQobWFrZUFy
cmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSk7CisgICAgYXV0byB2YXJpYWJs
ZU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKKyAgICBhdXRvIG1hbmdsZWRUeXBl
TmFtZSA9IG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbWFrZUFycmF5UmVmZXJlbmNl
RXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSk7CisgICAgaWYgKGlzPEFTVDo6UG9pbnRlclR5cGU+
KCptYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKSkKKyAgICAgICAg
bV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1hbmdsZWRUeXBlTmFtZSwgJyAnLCB2
YXJpYWJsZU5hbWUsICIgPSB7ICIsIGxWYWx1ZSwgIiwgMSB9O1xuIikpOworICAgIGVsc2UgaWYg
KGlzPEFTVDo6QXJyYXlUeXBlPigqbWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5yZXNvbHZl
ZFR5cGUoKSkpIHsKKyAgICAgICAgYXV0byYgYXJyYXlUeXBlID0gZG93bmNhc3Q8QVNUOjpBcnJh
eVR5cGU+KCptYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKTsKKyAg
ICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1hbmdsZWRUeXBlTmFtZSwg
JyAnLCB2YXJpYWJsZU5hbWUsICIgPSB7ICYoIiwgbFZhbHVlLCAiWzBdKSwgIiwgYXJyYXlUeXBl
Lm51bUVsZW1lbnRzKCksICIgfTtcbiIpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9zdHJpbmdC
dWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1hbmdsZWRUeXBlTmFtZSwgJyAnLCB2YXJpYWJsZU5h
bWUsICIgPSB7ICYiLCBsVmFsdWUsICIsIDEgfTtcbiIpKTsKKyAgICBtX3N0YWNrLmFwcGVuZCh2
YXJpYWJsZU5hbWUpOworfQorCit2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQo
QVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb24mIG1ha2VQb2ludGVyRXhwcmVzc2lvbikKK3sKKyAg
ICBjaGVja0Vycm9yQW5kVmlzaXQobWFrZVBvaW50ZXJFeHByZXNzaW9uLmxWYWx1ZSgpKTsKKyAg
ICBhdXRvIGxWYWx1ZSA9IG1fc3RhY2sudGFrZUxhc3QoKTsKKyAgICBBU1NFUlQobWFrZVBvaW50
ZXJFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKTsKKyAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdl
bmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOworICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFr
ZVN0cmluZyhtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm1ha2VQb2ludGVyRXhwcmVz
c2lvbi5yZXNvbHZlZFR5cGUoKSksICcgJywgdmFyaWFibGVOYW1lLCAiID0gJiIsIGxWYWx1ZSwg
IjtcbiIpKTsKKyAgICBtX3N0YWNrLmFwcGVuZCh2YXJpYWJsZU5hbWUpOworfQorCit2b2lkIEZ1
bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpSZWFkTW9kaWZ5V3JpdGVFeHByZXNz
aW9uJikKK3sKKyAgICAvLyBUaGlzIHNob3VsZCBiZSBsb3dlcmVkIGFscmVhZHkuCisgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2
aXNpdChBU1Q6OlRlcm5hcnlFeHByZXNzaW9uJiB0ZXJuYXJ5RXhwcmVzc2lvbikKK3sKKyAgICBj
aGVja0Vycm9yQW5kVmlzaXQodGVybmFyeUV4cHJlc3Npb24ucHJlZGljYXRlKCkpOworICAgIGF1
dG8gY2hlY2sgPSBtX3N0YWNrLnRha2VMYXN0KCk7CisKKyAgICBBU1NFUlQodGVybmFyeUV4cHJl
c3Npb24ucmVzb2x2ZWRUeXBlKCkpOworICAgIGF1dG8gdmFyaWFibGVOYW1lID0gZ2VuZXJhdGVO
ZXh0VmFyaWFibGVOYW1lKCk7CisgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5n
KG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqdGVybmFyeUV4cHJlc3Npb24ucmVzb2x2
ZWRUeXBlKCkpLCAnICcsIHZhcmlhYmxlTmFtZSwgIjtcbiIpKTsKKworICAgIG1fc3RyaW5nQnVp
bGRlci5hcHBlbmQobWFrZVN0cmluZygiaWYgKCIsIGNoZWNrLCAiKSB7XG4iKSk7CisgICAgY2hl
Y2tFcnJvckFuZFZpc2l0KHRlcm5hcnlFeHByZXNzaW9uLmJvZHlFeHByZXNzaW9uKCkpOworICAg
IG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyh2YXJpYWJsZU5hbWUsICIgPSAiLCBt
X3N0YWNrLnRha2VMYXN0KCksICI7XG4iKSk7CisgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgi
fSBlbHNlIHtcbiIpOworICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh0ZXJuYXJ5RXhwcmVzc2lvbi5l
bHNlRXhwcmVzc2lvbigpKTsKKyAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmco
dmFyaWFibGVOYW1lLCAiID0gIiwgbV9zdGFjay50YWtlTGFzdCgpLCAiO1xuIikpOworICAgIG1f
c3RyaW5nQnVpbGRlci5hcHBlbmQoIn1cbiIpOworICAgIG1fc3RhY2suYXBwZW5kKHZhcmlhYmxl
TmFtZSk7Cit9CisKK3ZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OlZh
cmlhYmxlUmVmZXJlbmNlJiB2YXJpYWJsZVJlZmVyZW5jZSkKK3sKKyAgICBBU1NFUlQodmFyaWFi
bGVSZWZlcmVuY2UudmFyaWFibGUoKSk7CisgICAgYXV0byBpdGVyYXRvciA9IG1fdmFyaWFibGVN
YXBwaW5nLmZpbmQodmFyaWFibGVSZWZlcmVuY2UudmFyaWFibGUoKSk7CisgICAgQVNTRVJUKGl0
ZXJhdG9yICE9IG1fdmFyaWFibGVNYXBwaW5nLmVuZCgpKTsKKyAgICBtX3N0YWNrLmFwcGVuZChp
dGVyYXRvci0+dmFsdWUpOworfQorCitTdHJpbmcgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjpj
b25zdGFudEV4cHJlc3Npb25TdHJpbmcoQVNUOjpDb25zdGFudEV4cHJlc3Npb24mIGNvbnN0YW50
RXhwcmVzc2lvbikKK3sKKyAgICBTdHJpbmcgcmVzdWx0OworICAgIGNvbnN0YW50RXhwcmVzc2lv
bi52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6OkludGVnZXJMaXRlcmFsJiBpbnRlZ2Vy
TGl0ZXJhbCkgeworICAgICAgICByZXN1bHQgPSBtYWtlU3RyaW5nKCIiLCBpbnRlZ2VyTGl0ZXJh
bC52YWx1ZSgpKTsKKyAgICB9LCBbJl0oQVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsJiB1bnNp
Z25lZEludGVnZXJMaXRlcmFsKSB7CisgICAgICAgIHJlc3VsdCA9IG1ha2VTdHJpbmcoIiIsIHVu
c2lnbmVkSW50ZWdlckxpdGVyYWwudmFsdWUoKSk7CisgICAgfSwgWyZdKEFTVDo6RmxvYXRMaXRl
cmFsJiBmbG9hdExpdGVyYWwpIHsKKyAgICAgICAgcmVzdWx0ID0gbWFrZVN0cmluZygiIiwgZmxv
YXRMaXRlcmFsLnZhbHVlKCkpOworICAgIH0sIFsmXShBU1Q6Ok51bGxMaXRlcmFsJikgeworICAg
ICAgICByZXN1bHQgPSAibnVsbHB0ciJfc3RyOworICAgIH0sIFsmXShBU1Q6OkJvb2xlYW5MaXRl
cmFsJiBib29sZWFuTGl0ZXJhbCkgeworICAgICAgICByZXN1bHQgPSBib29sZWFuTGl0ZXJhbC52
YWx1ZSgpID8gInRydWUiX3N0ciA6ICJmYWxzZSJfc3RyOworICAgIH0sIFsmXShBU1Q6OkVudW1l
cmF0aW9uTWVtYmVyTGl0ZXJhbCYgZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsKSB7CisgICAgICAg
IEFTU0VSVChlbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuZW51bWVyYXRpb25EZWZpbml0aW9uKCkp
OworICAgICAgICBBU1NFUlQoZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLmVudW1lcmF0aW9uRGVm
aW5pdGlvbigpKTsKKyAgICAgICAgcmVzdWx0ID0gbWFrZVN0cmluZyhtX3R5cGVOYW1lci5tYW5n
bGVkTmFtZUZvclR5cGUoKmVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5lbnVtZXJhdGlvbkRlZmlu
aXRpb24oKSksICcuJywgbV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JFbnVtZXJhdGlvbk1lbWJl
cigqZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLmVudW1lcmF0aW9uTWVtYmVyKCkpKTsKKyAgICB9
KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworY2xhc3MgUmVuZGVyRnVuY3Rpb25EZWZpbml0
aW9uV3JpdGVyIDogcHVibGljIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlciB7CitwdWJsaWM6Cisg
ICAgUmVuZGVyRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyKEludHJpbnNpY3MmIGludHJpbnNpY3Ms
IFR5cGVOYW1lciYgdHlwZU5hbWVyLCBIYXNoTWFwPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbios
IFN0cmluZz4mIGZ1bmN0aW9uTWFwcGluZywgTWF0Y2hlZFJlbmRlclNlbWFudGljcyYmIG1hdGNo
ZWRTZW1hbnRpY3MsIExheW91dCYgbGF5b3V0KQorICAgICAgICA6IEZ1bmN0aW9uRGVmaW5pdGlv
bldyaXRlcihpbnRyaW5zaWNzLCB0eXBlTmFtZXIsIGZ1bmN0aW9uTWFwcGluZywgbGF5b3V0KQor
ICAgICAgICAsIG1fbWF0Y2hlZFNlbWFudGljcyhXVEZNb3ZlKG1hdGNoZWRTZW1hbnRpY3MpKQog
ICAgIHsKLSAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KG1ha2VBcnJheVJlZmVyZW5jZUV4cHJl
c3Npb24ubFZhbHVlKCkpOwotICAgICAgICBhdXRvIGxWYWx1ZSA9IG1fc3RhY2sudGFrZUxhc3Qo
KTsKLSAgICAgICAgQVNTRVJUKG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24ucmVzb2x2ZWRU
eXBlKCkpOwotICAgICAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxl
TmFtZSgpOwotICAgICAgICBhdXRvIG1hbmdsZWRUeXBlTmFtZSA9IG1fdHlwZU5hbWVyLm1hbmds
ZWROYW1lRm9yVHlwZSgqbWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUo
KSk7Ci0gICAgICAgIGlmIChpczxBU1Q6OlBvaW50ZXJUeXBlPigqbWFrZUFycmF5UmVmZXJlbmNl
RXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSkpCi0gICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIu
YXBwZW5kKG1ha2VTdHJpbmcobWFuZ2xlZFR5cGVOYW1lLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9
IHsgIiwgbFZhbHVlLCAiLCAxIH07XG4iKSk7Ci0gICAgICAgIGVsc2UgaWYgKGlzPEFTVDo6QXJy
YXlUeXBlPigqbWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSkpIHsK
LSAgICAgICAgICAgIGF1dG8mIGFycmF5VHlwZSA9IGRvd25jYXN0PEFTVDo6QXJyYXlUeXBlPigq
bWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSk7Ci0gICAgICAgICAg
ICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWFuZ2xlZFR5cGVOYW1lLCAnICcs
IHZhcmlhYmxlTmFtZSwgIiA9IHsgJigiLCBsVmFsdWUsICJbMF0pLCAiLCBhcnJheVR5cGUubnVt
RWxlbWVudHMoKSwgIiB9O1xuIikpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1fc3Ry
aW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtYW5nbGVkVHlwZU5hbWUsICcgJywgdmFyaWFi
bGVOYW1lLCAiID0geyAmIiwgbFZhbHVlLCAiLCAxIH07XG4iKSk7Ci0gICAgICAgIG1fc3RhY2su
YXBwZW5kKHZhcmlhYmxlTmFtZSk7CiAgICAgfQogCi0gICAgdm9pZCB2aXNpdChBU1Q6Ok1ha2VQ
b2ludGVyRXhwcmVzc2lvbiYgbWFrZVBvaW50ZXJFeHByZXNzaW9uKSBvdmVycmlkZQorICAgIE1h
cHBlZEJpbmRHcm91cHMmJiB0YWtlVmVydGV4TWFwcGVkQmluZEdyb3VwcygpCiAgICAgewotICAg
ICAgICBjaGVja0Vycm9yQW5kVmlzaXQobWFrZVBvaW50ZXJFeHByZXNzaW9uLmxWYWx1ZSgpKTsK
LSAgICAgICAgYXV0byBsVmFsdWUgPSBtX3N0YWNrLnRha2VMYXN0KCk7Ci0gICAgICAgIEFTU0VS
VChtYWtlUG9pbnRlckV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpOwotICAgICAgICBhdXRvIHZh
cmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOwotICAgICAgICBtX3N0cmlu
Z0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBl
KCptYWtlUG9pbnRlckV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpLCAnICcsIHZhcmlhYmxlTmFt
ZSwgIiA9ICYiLCBsVmFsdWUsICI7XG4iKSk7Ci0gICAgICAgIG1fc3RhY2suYXBwZW5kKHZhcmlh
YmxlTmFtZSk7CisgICAgICAgIEFTU0VSVChtX3ZlcnRleE1hcHBlZEJpbmRHcm91cHMpOworICAg
ICAgICByZXR1cm4gV1RGTW92ZSgqbV92ZXJ0ZXhNYXBwZWRCaW5kR3JvdXBzKTsKICAgICB9CiAK
LSAgICB2b2lkIHZpc2l0KEFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbiYpIG92ZXJyaWRl
CisgICAgTWFwcGVkQmluZEdyb3VwcyYmIHRha2VGcmFnbWVudE1hcHBlZEJpbmRHcm91cHMoKQog
ICAgIHsKLSAgICAgICAgLy8gVGhpcyBzaG91bGQgYmUgbG93ZXJlZCBhbHJlYWR5LgotICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgQVNTRVJUKG1fZnJhZ21lbnRNYXBwZWRC
aW5kR3JvdXBzKTsKKyAgICAgICAgcmV0dXJuIFdURk1vdmUoKm1fZnJhZ21lbnRNYXBwZWRCaW5k
R3JvdXBzKTsKICAgICB9CiAKLSAgICB2b2lkIHZpc2l0KEFTVDo6VGVybmFyeUV4cHJlc3Npb24m
IHRlcm5hcnlFeHByZXNzaW9uKSBvdmVycmlkZQotICAgIHsKLSAgICAgICAgY2hlY2tFcnJvckFu
ZFZpc2l0KHRlcm5hcnlFeHByZXNzaW9uLnByZWRpY2F0ZSgpKTsKLSAgICAgICAgYXV0byBjaGVj
ayA9IG1fc3RhY2sudGFrZUxhc3QoKTsKK3ByaXZhdGU6CisgICAgc3RkOjp1bmlxdWVfcHRyPEVu
dHJ5UG9pbnRTY2FmZm9sZGluZz4gY3JlYXRlRW50cnlQb2ludFNjYWZmb2xkaW5nKEFTVDo6RnVu
Y3Rpb25EZWZpbml0aW9uJikgb3ZlcnJpZGU7CiAKLSAgICAgICAgQVNTRVJUKHRlcm5hcnlFeHBy
ZXNzaW9uLnJlc29sdmVkVHlwZSgpKTsKLSAgICAgICAgYXV0byB2YXJpYWJsZU5hbWUgPSBnZW5l
cmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKLSAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCht
YWtlU3RyaW5nKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqdGVybmFyeUV4cHJlc3Np
b24ucmVzb2x2ZWRUeXBlKCkpLCAnICcsIHZhcmlhYmxlTmFtZSwgIjtcbiIpKTsKKyAgICBNYXRj
aGVkUmVuZGVyU2VtYW50aWNzIG1fbWF0Y2hlZFNlbWFudGljczsKKyAgICBPcHRpb25hbDxNYXBw
ZWRCaW5kR3JvdXBzPiBtX3ZlcnRleE1hcHBlZEJpbmRHcm91cHM7CisgICAgT3B0aW9uYWw8TWFw
cGVkQmluZEdyb3Vwcz4gbV9mcmFnbWVudE1hcHBlZEJpbmRHcm91cHM7Cit9OwogCi0gICAgICAg
IG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiaWYgKCIsIGNoZWNrLCAiKSB7XG4i
KSk7Ci0gICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh0ZXJuYXJ5RXhwcmVzc2lvbi5ib2R5RXhw
cmVzc2lvbigpKTsKLSAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKHZh
cmlhYmxlTmFtZSwgIiA9ICIsIG1fc3RhY2sudGFrZUxhc3QoKSwgIjtcbiIpKTsKLSAgICAgICAg
bV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgifSBlbHNlIHtcbiIpOwotICAgICAgICBjaGVja0Vycm9y
QW5kVmlzaXQodGVybmFyeUV4cHJlc3Npb24uZWxzZUV4cHJlc3Npb24oKSk7Ci0gICAgICAgIG1f
c3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyh2YXJpYWJsZU5hbWUsICIgPSAiLCBtX3N0
YWNrLnRha2VMYXN0KCksICI7XG4iKSk7Ci0gICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQo
In1cbiIpOwotICAgICAgICBtX3N0YWNrLmFwcGVuZCh2YXJpYWJsZU5hbWUpOworc3RkOjp1bmlx
dWVfcHRyPEVudHJ5UG9pbnRTY2FmZm9sZGluZz4gUmVuZGVyRnVuY3Rpb25EZWZpbml0aW9uV3Jp
dGVyOjpjcmVhdGVFbnRyeVBvaW50U2NhZmZvbGRpbmcoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24m
IGZ1bmN0aW9uRGVmaW5pdGlvbikKK3sKKyAgICBhdXRvIGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFt
ZSA9IFt0aGlzXSgpIC0+IFN0cmluZyB7CisgICAgICAgIHJldHVybiB0aGlzLT5nZW5lcmF0ZU5l
eHRWYXJpYWJsZU5hbWUoKTsKKyAgICB9OworICAgIGlmICgmZnVuY3Rpb25EZWZpbml0aW9uID09
IG1fbWF0Y2hlZFNlbWFudGljcy52ZXJ0ZXhTaGFkZXIpIHsKKyAgICAgICAgYXV0byByZXN1bHQg
PSBzdGQ6Om1ha2VfdW5pcXVlPFZlcnRleEVudHJ5UG9pbnRTY2FmZm9sZGluZz4oZnVuY3Rpb25E
ZWZpbml0aW9uLCBtX2ludHJpbnNpY3MsIG1fdHlwZU5hbWVyLCBtX21hdGNoZWRTZW1hbnRpY3Mu
dmVydGV4U2hhZGVyRW50cnlQb2ludEl0ZW1zLCBtX21hdGNoZWRTZW1hbnRpY3MudmVydGV4U2hh
ZGVyUmVzb3VyY2VNYXAsIG1fbGF5b3V0LCBXVEZNb3ZlKGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFt
ZSksIG1fbWF0Y2hlZFNlbWFudGljcy5tYXRjaGVkVmVydGV4QXR0cmlidXRlcyk7CisgICAgICAg
IEFTU0VSVCghbV92ZXJ0ZXhNYXBwZWRCaW5kR3JvdXBzKTsKKyAgICAgICAgbV92ZXJ0ZXhNYXBw
ZWRCaW5kR3JvdXBzID0gcmVzdWx0LT5tYXBwZWRCaW5kR3JvdXBzKCk7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgfQotCi0gICAgdm9pZCB2aXNpdChBU1Q6OlZhcmlhYmxlUmVmZXJlbmNl
JiB2YXJpYWJsZVJlZmVyZW5jZSkgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIEFTU0VSVCh2YXJp
YWJsZVJlZmVyZW5jZS52YXJpYWJsZSgpKTsKLSAgICAgICAgYXV0byBpdGVyYXRvciA9IG1fdmFy
aWFibGVNYXBwaW5nLmZpbmQodmFyaWFibGVSZWZlcmVuY2UudmFyaWFibGUoKSk7Ci0gICAgICAg
IEFTU0VSVChpdGVyYXRvciAhPSBtX3ZhcmlhYmxlTWFwcGluZy5lbmQoKSk7Ci0gICAgICAgIG1f
c3RhY2suYXBwZW5kKGl0ZXJhdG9yLT52YWx1ZSk7CisgICAgaWYgKCZmdW5jdGlvbkRlZmluaXRp
b24gPT0gbV9tYXRjaGVkU2VtYW50aWNzLmZyYWdtZW50U2hhZGVyKSB7CisgICAgICAgIGF1dG8g
cmVzdWx0ID0gc3RkOjptYWtlX3VuaXF1ZTxGcmFnbWVudEVudHJ5UG9pbnRTY2FmZm9sZGluZz4o
ZnVuY3Rpb25EZWZpbml0aW9uLCBtX2ludHJpbnNpY3MsIG1fdHlwZU5hbWVyLCBtX21hdGNoZWRT
ZW1hbnRpY3MuZnJhZ21lbnRTaGFkZXJFbnRyeVBvaW50SXRlbXMsIG1fbWF0Y2hlZFNlbWFudGlj
cy5mcmFnbWVudFNoYWRlclJlc291cmNlTWFwLCBtX2xheW91dCwgV1RGTW92ZShnZW5lcmF0ZU5l
eHRWYXJpYWJsZU5hbWUpLCBtX21hdGNoZWRTZW1hbnRpY3MubWF0Y2hlZENvbG9yQXR0YWNobWVu
dHMpOworICAgICAgICBBU1NFUlQoIW1fZnJhZ21lbnRNYXBwZWRCaW5kR3JvdXBzKTsKKyAgICAg
ICAgbV9mcmFnbWVudE1hcHBlZEJpbmRHcm91cHMgPSByZXN1bHQtPm1hcHBlZEJpbmRHcm91cHMo
KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9
CiAKLSAgICBTdHJpbmcgY29uc3RhbnRFeHByZXNzaW9uU3RyaW5nKEFTVDo6Q29uc3RhbnRFeHBy
ZXNzaW9uJiBjb25zdGFudEV4cHJlc3Npb24pCitjbGFzcyBDb21wdXRlRnVuY3Rpb25EZWZpbml0
aW9uV3JpdGVyIDogcHVibGljIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlciB7CitwdWJsaWM6Cisg
ICAgQ29tcHV0ZUZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcihJbnRyaW5zaWNzJiBpbnRyaW5zaWNz
LCBUeXBlTmFtZXImIHR5cGVOYW1lciwgSGFzaE1hcDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24q
LCBTdHJpbmc+JiBmdW5jdGlvbk1hcHBpbmcsIE1hdGNoZWRDb21wdXRlU2VtYW50aWNzJiYgbWF0
Y2hlZFNlbWFudGljcywgTGF5b3V0JiBsYXlvdXQpCisgICAgICAgIDogRnVuY3Rpb25EZWZpbml0
aW9uV3JpdGVyKGludHJpbnNpY3MsIHR5cGVOYW1lciwgZnVuY3Rpb25NYXBwaW5nLCBsYXlvdXQp
CisgICAgICAgICwgbV9tYXRjaGVkU2VtYW50aWNzKFdURk1vdmUobWF0Y2hlZFNlbWFudGljcykp
CiAgICAgewotICAgICAgICBTdHJpbmcgcmVzdWx0OwotICAgICAgICBjb25zdGFudEV4cHJlc3Np
b24udmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oQVNUOjpJbnRlZ2VyTGl0ZXJhbCYgaW50ZWdl
ckxpdGVyYWwpIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IG1ha2VTdHJpbmcoIiIsIGludGVnZXJM
aXRlcmFsLnZhbHVlKCkpOwotICAgICAgICB9LCBbJl0oQVNUOjpVbnNpZ25lZEludGVnZXJMaXRl
cmFsJiB1bnNpZ25lZEludGVnZXJMaXRlcmFsKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBtYWtl
U3RyaW5nKCIiLCB1bnNpZ25lZEludGVnZXJMaXRlcmFsLnZhbHVlKCkpOwotICAgICAgICB9LCBb
Jl0oQVNUOjpGbG9hdExpdGVyYWwmIGZsb2F0TGl0ZXJhbCkgewotICAgICAgICAgICAgcmVzdWx0
ID0gbWFrZVN0cmluZygiIiwgZmxvYXRMaXRlcmFsLnZhbHVlKCkpOwotICAgICAgICB9LCBbJl0o
QVNUOjpOdWxsTGl0ZXJhbCYpIHsKLSAgICAgICAgICAgIHJlc3VsdCA9ICJudWxscHRyIl9zdHI7
Ci0gICAgICAgIH0sIFsmXShBU1Q6OkJvb2xlYW5MaXRlcmFsJiBib29sZWFuTGl0ZXJhbCkgewot
ICAgICAgICAgICAgcmVzdWx0ID0gYm9vbGVhbkxpdGVyYWwudmFsdWUoKSA/ICJ0cnVlIl9zdHIg
OiAiZmFsc2UiX3N0cjsKLSAgICAgICAgfSwgWyZdKEFTVDo6RW51bWVyYXRpb25NZW1iZXJMaXRl
cmFsJiBlbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwpIHsKLSAgICAgICAgICAgIEFTU0VSVChlbnVt
ZXJhdGlvbk1lbWJlckxpdGVyYWwuZW51bWVyYXRpb25EZWZpbml0aW9uKCkpOwotICAgICAgICAg
ICAgQVNTRVJUKGVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5lbnVtZXJhdGlvbkRlZmluaXRpb24o
KSk7Ci0gICAgICAgICAgICByZXN1bHQgPSBtYWtlU3RyaW5nKG1fdHlwZU5hbWVyLm1hbmdsZWRO
YW1lRm9yVHlwZSgqZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLmVudW1lcmF0aW9uRGVmaW5pdGlv
bigpKSwgJy4nLCBtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvckVudW1lcmF0aW9uTWVtYmVyKCpl
bnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuZW51bWVyYXRpb25NZW1iZXIoKSkpOwotICAgICAgICB9
KSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgU3RyaW5nIGdlbmVyYXRl
TmV4dFZhcmlhYmxlTmFtZSgpCisgICAgTWFwcGVkQmluZEdyb3VwcyYmIHRha2VNYXBwZWRCaW5k
R3JvdXBzKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCJ2YXJpYWJsZSIsIG1f
dmFyaWFibGVDb3VudCsrKTsKKyAgICAgICAgQVNTRVJUKG1fbWFwcGVkQmluZEdyb3Vwcyk7Cisg
ICAgICAgIHJldHVybiBXVEZNb3ZlKCptX21hcHBlZEJpbmRHcm91cHMpOwogICAgIH0KIAogcHJp
dmF0ZToKLSAgICBJbnRyaW5zaWNzJiBtX2ludHJpbnNpY3M7Ci0gICAgVHlwZU5hbWVyJiBtX3R5
cGVOYW1lcjsKLSAgICBIYXNoTWFwPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiosIFN0cmluZz4m
IG1fZnVuY3Rpb25NYXBwaW5nOwotICAgIEhhc2hNYXA8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9u
KiwgU3RyaW5nPiBtX3ZhcmlhYmxlTWFwcGluZzsKLSAgICBTdHJpbmdCdWlsZGVyIG1fc3RyaW5n
QnVpbGRlcjsKLSAgICBWZWN0b3I8U3RyaW5nPiBtX3N0YWNrOwotICAgIE9wdGlvbmFsPEVudHJ5
UG9pbnRTY2FmZm9sZGluZz4gbV9lbnRyeVBvaW50U2NhZmZvbGRpbmc7Ci0gICAgdW5zaWduZWQg
bV92YXJpYWJsZUNvdW50IHsgMCB9OworICAgIHN0ZDo6dW5pcXVlX3B0cjxFbnRyeVBvaW50U2Nh
ZmZvbGRpbmc+IGNyZWF0ZUVudHJ5UG9pbnRTY2FmZm9sZGluZyhBU1Q6OkZ1bmN0aW9uRGVmaW5p
dGlvbiYpIG92ZXJyaWRlOworCisgICAgTWF0Y2hlZENvbXB1dGVTZW1hbnRpY3MgbV9tYXRjaGVk
U2VtYW50aWNzOworICAgIE9wdGlvbmFsPE1hcHBlZEJpbmRHcm91cHM+IG1fbWFwcGVkQmluZEdy
b3VwczsKIH07CiAKLVN0cmluZyBtZXRhbEZ1bmN0aW9ucyhQcm9ncmFtJiBwcm9ncmFtLCBUeXBl
TmFtZXImIHR5cGVOYW1lcikKK3N0ZDo6dW5pcXVlX3B0cjxFbnRyeVBvaW50U2NhZmZvbGRpbmc+
IENvbXB1dGVGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OmNyZWF0ZUVudHJ5UG9pbnRTY2FmZm9s
ZGluZyhBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0aW9uKQoreworICAg
IGF1dG8gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lID0gW3RoaXNdKCkgLT4gU3RyaW5nIHsKKyAg
ICAgICAgcmV0dXJuIHRoaXMtPmdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOworICAgIH07Cisg
ICAgaWYgKCZmdW5jdGlvbkRlZmluaXRpb24gPT0gbV9tYXRjaGVkU2VtYW50aWNzLnNoYWRlcikg
eworICAgICAgICBhdXRvIHJlc3VsdCA9IHN0ZDo6bWFrZV91bmlxdWU8Q29tcHV0ZUVudHJ5UG9p
bnRTY2FmZm9sZGluZz4oZnVuY3Rpb25EZWZpbml0aW9uLCBtX2ludHJpbnNpY3MsIG1fdHlwZU5h
bWVyLCBtX21hdGNoZWRTZW1hbnRpY3MuZW50cnlQb2ludEl0ZW1zLCBtX21hdGNoZWRTZW1hbnRp
Y3MucmVzb3VyY2VNYXAsIG1fbGF5b3V0LCBXVEZNb3ZlKGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFt
ZSkpOworICAgICAgICBBU1NFUlQoIW1fbWFwcGVkQmluZEdyb3Vwcyk7CisgICAgICAgIG1fbWFw
cGVkQmluZEdyb3VwcyA9IHJlc3VsdC0+bWFwcGVkQmluZEdyb3VwcygpOworICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworc3RydWN0IFNoYXJl
ZE1ldGFsRnVuY3Rpb25zUmVzdWx0IHsKKyAgICBIYXNoTWFwPEFTVDo6RnVuY3Rpb25EZWNsYXJh
dGlvbiosIFN0cmluZz4gZnVuY3Rpb25NYXBwaW5nOworICAgIFN0cmluZyBtZXRhbEZ1bmN0aW9u
czsKK307CitzdGF0aWMgU2hhcmVkTWV0YWxGdW5jdGlvbnNSZXN1bHQgc2hhcmVkTWV0YWxGdW5j
dGlvbnMoUHJvZ3JhbSYgcHJvZ3JhbSwgVHlwZU5hbWVyJiB0eXBlTmFtZXIpCiB7CiAgICAgU3Ry
aW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwogCkBAIC02MTAsMTcgKzc1Niw0OCBAQCBTdHJpbmcg
bWV0YWxGdW5jdGlvbnMoUHJvZ3JhbSYgcHJvZ3JhbSwgVHlwZU5hbWVyJiB0eXBlTmFtZXIpCiAg
ICAgfQogCiAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7CisgICAgcmV0dXJuIHsgV1RG
TW92ZShmdW5jdGlvbk1hcHBpbmcpLCBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkgfTsKK30KIAot
ICAgIHsKLSAgICAgICAgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyIGZ1bmN0aW9uRGVmaW5pdGlv
bldyaXRlcihwcm9ncmFtLmludHJpbnNpY3MoKSwgdHlwZU5hbWVyLCBmdW5jdGlvbk1hcHBpbmcp
OwotICAgICAgICBmb3IgKGF1dG8mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gOiBwcm9ncmFt
Lm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25zKCkpCi0gICAgICAgICAgICBmdW5jdGlvbkRlZmlu
aXRpb25Xcml0ZXIudmlzaXQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbik7Ci0gICAgICAgIGZv
ciAoYXV0byYgZnVuY3Rpb25EZWZpbml0aW9uIDogcHJvZ3JhbS5mdW5jdGlvbkRlZmluaXRpb25z
KCkpCi0gICAgICAgICAgICBmdW5jdGlvbkRlZmluaXRpb25Xcml0ZXIudmlzaXQoZnVuY3Rpb25E
ZWZpbml0aW9uKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoZnVuY3Rpb25EZWZpbml0
aW9uV3JpdGVyLnRvU3RyaW5nKCkpOwotICAgIH0KK1JlbmRlck1ldGFsRnVuY3Rpb25zIG1ldGFs
RnVuY3Rpb25zKFByb2dyYW0mIHByb2dyYW0sIFR5cGVOYW1lciYgdHlwZU5hbWVyLCBNYXRjaGVk
UmVuZGVyU2VtYW50aWNzJiYgbWF0Y2hlZFNlbWFudGljcywgTGF5b3V0JiBsYXlvdXQpCit7Cisg
ICAgYXV0byBzaGFyZWRNZXRhbEZ1bmN0aW9ucyA9IE1ldGFsOjpzaGFyZWRNZXRhbEZ1bmN0aW9u
cyhwcm9ncmFtLCB0eXBlTmFtZXIpOworCisgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVy
OworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHNoYXJlZE1ldGFsRnVuY3Rpb25zLm1ldGFsRnVu
Y3Rpb25zKTsKKworICAgIFJlbmRlckZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlciBmdW5jdGlvbkRl
ZmluaXRpb25Xcml0ZXIocHJvZ3JhbS5pbnRyaW5zaWNzKCksIHR5cGVOYW1lciwgc2hhcmVkTWV0
YWxGdW5jdGlvbnMuZnVuY3Rpb25NYXBwaW5nLCBXVEZNb3ZlKG1hdGNoZWRTZW1hbnRpY3MpLCBs
YXlvdXQpOworICAgIGZvciAoYXV0byYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiA6IHByb2dy
YW0ubmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnMoKSkKKyAgICAgICAgZnVuY3Rpb25EZWZpbml0
aW9uV3JpdGVyLnZpc2l0KG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pOworICAgIGZvciAoYXV0
byYgZnVuY3Rpb25EZWZpbml0aW9uIDogcHJvZ3JhbS5mdW5jdGlvbkRlZmluaXRpb25zKCkpCisg
ICAgICAgIGZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlci52aXNpdChmdW5jdGlvbkRlZmluaXRpb24p
OworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlci50b1N0
cmluZygpKTsKKworICAgIFJlbmRlck1ldGFsRnVuY3Rpb25zIHJlc3VsdDsKKyAgICByZXN1bHQu
bWV0YWxTb3VyY2UgPSBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CisgICAgcmVzdWx0LnZlcnRl
eE1hcHBlZEJpbmRHcm91cHMgPSBmdW5jdGlvbkRlZmluaXRpb25Xcml0ZXIudGFrZVZlcnRleE1h
cHBlZEJpbmRHcm91cHMoKTsKKyAgICByZXN1bHQuZnJhZ21lbnRNYXBwZWRCaW5kR3JvdXBzID0g
ZnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyLnRha2VGcmFnbWVudE1hcHBlZEJpbmRHcm91cHMoKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQogCi0gICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJp
bmcoKTsKK0NvbXB1dGVNZXRhbEZ1bmN0aW9ucyBtZXRhbEZ1bmN0aW9ucyhQcm9ncmFtJiBwcm9n
cmFtLCBUeXBlTmFtZXImIHR5cGVOYW1lciwgTWF0Y2hlZENvbXB1dGVTZW1hbnRpY3MmJiBtYXRj
aGVkU2VtYW50aWNzLCBMYXlvdXQmIGxheW91dCkKK3sKKyAgICBhdXRvIHNoYXJlZE1ldGFsRnVu
Y3Rpb25zID0gTWV0YWw6OnNoYXJlZE1ldGFsRnVuY3Rpb25zKHByb2dyYW0sIHR5cGVOYW1lcik7
CisKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CisgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQoc2hhcmVkTWV0YWxGdW5jdGlvbnMubWV0YWxGdW5jdGlvbnMpOworCisgICAgQ29tcHV0
ZUZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlciBmdW5jdGlvbkRlZmluaXRpb25Xcml0ZXIocHJvZ3Jh
bS5pbnRyaW5zaWNzKCksIHR5cGVOYW1lciwgc2hhcmVkTWV0YWxGdW5jdGlvbnMuZnVuY3Rpb25N
YXBwaW5nLCBXVEZNb3ZlKG1hdGNoZWRTZW1hbnRpY3MpLCBsYXlvdXQpOworICAgIGZvciAoYXV0
byYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiA6IHByb2dyYW0ubmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbnMoKSkKKyAgICAgICAgZnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyLnZpc2l0KG5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24pOworICAgIGZvciAoYXV0byYgZnVuY3Rpb25EZWZpbml0aW9u
IDogcHJvZ3JhbS5mdW5jdGlvbkRlZmluaXRpb25zKCkpCisgICAgICAgIGZ1bmN0aW9uRGVmaW5p
dGlvbldyaXRlci52aXNpdChmdW5jdGlvbkRlZmluaXRpb24pOworICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKGZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlci50b1N0cmluZygpKTsKKworICAgIENvbXB1
dGVNZXRhbEZ1bmN0aW9ucyByZXN1bHQ7CisgICAgcmVzdWx0Lm1ldGFsU291cmNlID0gc3RyaW5n
QnVpbGRlci50b1N0cmluZygpOworICAgIHJlc3VsdC5tYXBwZWRCaW5kR3JvdXBzID0gZnVuY3Rp
b25EZWZpbml0aW9uV3JpdGVyLnRha2VNYXBwZWRCaW5kR3JvdXBzKCk7CisgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAogfSAvLyBuYW1lc3BhY2UgTWV0YWwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRnVuY3Rpb25Xcml0ZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRnVuY3Rpb25Xcml0
ZXIuaAppbmRleCA5OTYwZTVlNDhkNThjMjRlMzVlNTI4MzgyNDU2NDcyYjdkMDliNmQ3Li4wNjI4
MjFmYWI4OWVjNWYwN2JkN2M3ZjQ4ZGYyYTIwYWM1NDdhY2NlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xGdW5j
dGlvbldyaXRlci5oCkBAIC0yNyw2ICsyNyw5IEBACiAKICNpZiBFTkFCTEUoV0VCR1BVKQogCisj
aW5jbHVkZSAiV0hMU0xNYXBwZWRCaW5kaW5ncy5oIgorI2luY2x1ZGUgIldITFNMU2VtYW50aWNN
YXRjaGVyLmgiCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNlIFdITFNMIHsKQEAg
LTM3LDcgKzQwLDE4IEBAIG5hbWVzcGFjZSBNZXRhbCB7CiAKIGNsYXNzIFR5cGVOYW1lcjsKIAot
U3RyaW5nIG1ldGFsRnVuY3Rpb25zKFByb2dyYW0mLCBUeXBlTmFtZXImKTsKK3N0cnVjdCBSZW5k
ZXJNZXRhbEZ1bmN0aW9ucyB7CisgICAgU3RyaW5nIG1ldGFsU291cmNlOworICAgIE1hcHBlZEJp
bmRHcm91cHMgdmVydGV4TWFwcGVkQmluZEdyb3VwczsKKyAgICBNYXBwZWRCaW5kR3JvdXBzIGZy
YWdtZW50TWFwcGVkQmluZEdyb3VwczsKK307CitSZW5kZXJNZXRhbEZ1bmN0aW9ucyBtZXRhbEZ1
bmN0aW9ucyhQcm9ncmFtJiwgVHlwZU5hbWVyJiwgTWF0Y2hlZFJlbmRlclNlbWFudGljcyYmLCBM
YXlvdXQmKTsKKworc3RydWN0IENvbXB1dGVNZXRhbEZ1bmN0aW9ucyB7CisgICAgU3RyaW5nIG1l
dGFsU291cmNlOworICAgIE1hcHBlZEJpbmRHcm91cHMgbWFwcGVkQmluZEdyb3VwczsKK307CitD
b21wdXRlTWV0YWxGdW5jdGlvbnMgbWV0YWxGdW5jdGlvbnMoUHJvZ3JhbSYsIFR5cGVOYW1lciYs
IE1hdGNoZWRDb21wdXRlU2VtYW50aWNzJiYsIExheW91dCYpOwogCiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMTWFwcGVkQmlu
ZGluZ3MuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNM
TWFwcGVkQmluZGluZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kYjNjNTJiZjQ5NjM5OGYzZDA0MGQxNWE4YmQ4
YjdlODQ0ZTFkMTM2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xNYXBwZWRCaW5kaW5ncy5oCkBAIC0wLDAgKzEsNTEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdI
TFNMIHsKKworbmFtZXNwYWNlIE1ldGFsIHsKKworc3RydWN0IE1hcHBlZEJpbmRHcm91cCB7Cisg
ICAgdW5zaWduZWQgYXJndW1lbnRCdWZmZXJJbmRleDsKKyAgICBWZWN0b3I8dW5zaWduZWQ+IGJp
bmRpbmdJbmRpY2VzOworfTsKKwordXNpbmcgTWFwcGVkQmluZEdyb3VwcyA9IFZlY3RvcjxNYXBw
ZWRCaW5kR3JvdXA+OyAvLyBQYXJhbGxlbCB0byB0aGUgaW5wdXQgcmVzb3VyY2UgTGF5b3V0Lgor
Cit9IC8vIG5hbWVzcGFjZSBNZXRhbAorCit9IC8vIG5hbWVzcGFjZSBXSExTTAorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xNZXRhbENvZGVHZW5lcmF0b3IuY3BwIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xNZXRhbENvZGVHZW5l
cmF0b3IuY3BwCmluZGV4IDEwYzA1MzBlMjkwZDcwNDE3NjdmNzE4MjMyNzBkM2I5MjU5N2I1NGIu
Ljg4Y2ZlNzMwMTdkNjAyZjM0MTFlZWVhZGY1N2JhNWUwNDRmM2NkNzEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMTWV0YWxDb2RlR2Vu
ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRh
bC9XSExTTE1ldGFsQ29kZUdlbmVyYXRvci5jcHAKQEAgLTM4LDcgKzM4LDcgQEAgbmFtZXNwYWNl
IFdITFNMIHsKIAogbmFtZXNwYWNlIE1ldGFsIHsKIAotU3RyaW5nIGdlbmVyYXRlTWV0YWxDb2Rl
KFByb2dyYW0mIHByb2dyYW0pCitzdGF0aWMgU3RyaW5nIGdlbmVyYXRlTWV0YWxDb2RlU2hhcmVk
KFN0cmluZyYmIG1ldGFsVHlwZXMsIFN0cmluZyYmIG1ldGFsRnVuY3Rpb25zKQogewogICAgIFN0
cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiI2lu
Y2x1ZGUgPG1ldGFsX3N0ZGxpYj5cbiIpOwpAQCAtNTEsMTIgKzUxLDI5IEBAIFN0cmluZyBnZW5l
cmF0ZU1ldGFsQ29kZShQcm9ncmFtJiBwcm9ncmFtKQogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KCJ1c2luZyBuYW1lc3BhY2UgbWV0YWw7XG4iKTsKICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgi
XG4iKTsKIAotICAgIFR5cGVOYW1lciB0eXBlTmFtZXIocHJvZ3JhbSk7Ci0gICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQodHlwZU5hbWVyLm1ldGFsVHlwZXMoKSk7Ci0gICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQobWV0YWxGdW5jdGlvbnMocHJvZ3JhbSwgdHlwZU5hbWVyKSk7CisgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQoV1RGTW92ZShtZXRhbFR5cGVzKSk7CisgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQoV1RGTW92ZShtZXRhbEZ1bmN0aW9ucykpOwogICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRv
U3RyaW5nKCk7CiB9CiAKK1JlbmRlck1ldGFsQ29kZSBnZW5lcmF0ZU1ldGFsQ29kZShQcm9ncmFt
JiBwcm9ncmFtLCBNYXRjaGVkUmVuZGVyU2VtYW50aWNzJiYgbWF0Y2hlZFNlbWFudGljcywgTGF5
b3V0JiBsYXlvdXQpCit7CisgICAgVHlwZU5hbWVyIHR5cGVOYW1lcihwcm9ncmFtKTsKKyAgICBh
dXRvIG1ldGFsVHlwZXMgPSB0eXBlTmFtZXIubWV0YWxUeXBlcygpOworICAgIGF1dG8gbWV0YWxG
dW5jdGlvbnMgPSBNZXRhbDo6bWV0YWxGdW5jdGlvbnMocHJvZ3JhbSwgdHlwZU5hbWVyLCBXVEZN
b3ZlKG1hdGNoZWRTZW1hbnRpY3MpLCBsYXlvdXQpOworICAgIGF1dG8gbWV0YWxDb2RlID0gZ2Vu
ZXJhdGVNZXRhbENvZGVTaGFyZWQoV1RGTW92ZShtZXRhbFR5cGVzKSwgV1RGTW92ZShtZXRhbEZ1
bmN0aW9ucy5tZXRhbFNvdXJjZSkpOworICAgIHJldHVybiB7IFdURk1vdmUobWV0YWxDb2RlKSwg
V1RGTW92ZShtZXRhbEZ1bmN0aW9ucy52ZXJ0ZXhNYXBwZWRCaW5kR3JvdXBzKSwgV1RGTW92ZSht
ZXRhbEZ1bmN0aW9ucy5mcmFnbWVudE1hcHBlZEJpbmRHcm91cHMpIH07Cit9CisKK0NvbXB1dGVN
ZXRhbENvZGUgZ2VuZXJhdGVNZXRhbENvZGUoUHJvZ3JhbSYgcHJvZ3JhbSwgTWF0Y2hlZENvbXB1
dGVTZW1hbnRpY3MmJiBtYXRjaGVkU2VtYW50aWNzLCBMYXlvdXQmIGxheW91dCkKK3sKKyAgICBU
eXBlTmFtZXIgdHlwZU5hbWVyKHByb2dyYW0pOworICAgIGF1dG8gbWV0YWxUeXBlcyA9IHR5cGVO
YW1lci5tZXRhbFR5cGVzKCk7CisgICAgYXV0byBtZXRhbEZ1bmN0aW9ucyA9IE1ldGFsOjptZXRh
bEZ1bmN0aW9ucyhwcm9ncmFtLCB0eXBlTmFtZXIsIFdURk1vdmUobWF0Y2hlZFNlbWFudGljcyks
IGxheW91dCk7CisgICAgYXV0byBtZXRhbENvZGUgPSBnZW5lcmF0ZU1ldGFsQ29kZVNoYXJlZChX
VEZNb3ZlKG1ldGFsVHlwZXMpLCBXVEZNb3ZlKG1ldGFsRnVuY3Rpb25zLm1ldGFsU291cmNlKSk7
CisgICAgcmV0dXJuIHsgV1RGTW92ZShtZXRhbENvZGUpLCBXVEZNb3ZlKG1ldGFsRnVuY3Rpb25z
Lm1hcHBlZEJpbmRHcm91cHMpIH07Cit9CisKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xNZXRhbENvZGVHZW5lcmF0b3Iu
aCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMTWV0YWxD
b2RlR2VuZXJhdG9yLmgKaW5kZXggZTA4OGUwMTA0NDk5NDg0MTEwNzU2NzQzNDc0OTFmNzNkMzZh
MjM0Zi4uYTY5NDYzZGY0YWYzNTEyZGEwNmJlYWFlMTUyZDQ4ZDY5NDQ0NzgxMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xNZXRhbENv
ZGVHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9N
ZXRhbC9XSExTTE1ldGFsQ29kZUdlbmVyYXRvci5oCkBAIC0yNyw2ICsyNywxMCBAQAogCiAjaWYg
RU5BQkxFKFdFQkdQVSkKIAorI2luY2x1ZGUgIldITFNMTWFwcGVkQmluZGluZ3MuaCIKKyNpbmNs
dWRlICJXSExTTFBpcGVsaW5lRGVzY3JpcHRvci5oIgorI2luY2x1ZGUgIldITFNMU2VtYW50aWNN
YXRjaGVyLmgiCisjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzcsOCArNDEsMTggQEAgY2xh
c3MgUHJvZ3JhbTsKIAogbmFtZXNwYWNlIE1ldGFsIHsKIAotLy8gRklYTUU6IFRoaXMgbmVlZHMg
dG8ga25vdyBhYm91dCB0aGUgcGlwZWxpbmUgc3RhdGUgb2JqZWN0IHRvIGVtaXQgZnVuY3Rpb24g
cHJvbG9ndWVzIGFuZCBlcGlsb2d1ZXMuCi1TdHJpbmcgZ2VuZXJhdGVNZXRhbENvZGUoUHJvZ3Jh
bSYpOworc3RydWN0IFJlbmRlck1ldGFsQ29kZSB7CisgICAgU3RyaW5nIG1ldGFsU291cmNlOwor
ICAgIE1hcHBlZEJpbmRHcm91cHMgdmVydGV4TWFwcGVkQmluZEdyb3VwczsKKyAgICBNYXBwZWRC
aW5kR3JvdXBzIGZyYWdtZW50TWFwcGVkQmluZEdyb3VwczsKK307CitSZW5kZXJNZXRhbENvZGUg
Z2VuZXJhdGVNZXRhbENvZGUoUHJvZ3JhbSYsIE1hdGNoZWRSZW5kZXJTZW1hbnRpY3MmJiBtYXRj
aGVkU2VtYW50aWNzLCBMYXlvdXQmKTsKKworc3RydWN0IENvbXB1dGVNZXRhbENvZGUgeworICAg
IFN0cmluZyBtZXRhbFNvdXJjZTsKKyAgICBNYXBwZWRCaW5kR3JvdXBzIGJpbmRHcm91cHM7Cit9
OworQ29tcHV0ZU1ldGFsQ29kZSBnZW5lcmF0ZU1ldGFsQ29kZShQcm9ncmFtJiwgTWF0Y2hlZENv
bXB1dGVTZW1hbnRpY3MmJiBtYXRjaGVkU2VtYW50aWNzLCBMYXlvdXQmKTsKIAogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEludHJpbnNp
Y3MuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW50cmluc2lj
cy5oCmluZGV4IDg0MTBjOGI3MzkyYzdmMDAxNDRhOTAxZDVlYzQ2MmQ0OTZhYmE4MWMuLmZjNDdk
MzI5MzU0MGRmNmNjYTUzNjYzMWQ0YzlmYmQyZWNlODk3OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW50cmluc2ljcy5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW50cmluc2ljcy5oCkBAIC04Miw2
ICs4MiwxMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAqbV9mbG9hdFR5cGU7CiAgICAgfQog
CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mIGZsb2F0MlR5cGUoKSBjb25zdAorICAg
IHsKKyAgICAgICAgQVNTRVJUKG1fdmVjdG9yRmxvYXRbMF0pOworICAgICAgICByZXR1cm4gKm1f
dmVjdG9yRmxvYXRbMF07CisgICAgfQorCiAgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24m
IGZsb2F0M1R5cGUoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKG1fdmVjdG9yRmxvYXRb
MV0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xQaXBlbGluZURlc2NyaXB0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMUGlwZWxpbmVEZXNjcmlwdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGYyODY5MmMxODRiYmY2
YTA2MWZjNzk0MjUyNTI0NTA5MjEyMmFiNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGlwZWxpbmVEZXNjcmlwdG9yLmgKQEAgLTAs
MCArMSwxMTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJH
UFUpCisKKyNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1ZhcmlhbnQu
aD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFt
ZXNwYWNlIFdITFNMIHsKKworZW51bSBjbGFzcyBWZXJ0ZXhGb3JtYXQgOiB1aW50OF90IHsKKyAg
ICBGbG9hdFIzMkczMkIzMkEzMiwKKyAgICBGbG9hdFIzMkczMkIzMiwKKyAgICBGbG9hdFIzMkcz
MiwKKyAgICBGbG9hdFIzMgorfTsKKworc3RydWN0IFZlcnRleEF0dHJpYnV0ZSB7CisgICAgVmVy
dGV4Rm9ybWF0IHZlcnRleEZvcm1hdDsKKyAgICB1bnNpZ25lZCBuYW1lOworfTsKKwordXNpbmcg
VmVydGV4QXR0cmlidXRlcyA9IFZlY3RvcjxWZXJ0ZXhBdHRyaWJ1dGU+OworCitlbnVtIGNsYXNz
IFRleHR1cmVGb3JtYXQgeworICAgIFI4RzhCOEE4VW5vcm0sCisgICAgUjhHOEI4QThVaW50LAor
ICAgIEI4RzhSOEE4VW5vcm0sCisgICAgRDMyRmxvYXRTOFVpbnQKK307CisKK3N0cnVjdCBBdHRh
Y2htZW50RGVzY3JpcHRvciB7CisgICAgVGV4dHVyZUZvcm1hdCB0ZXh0dXJlRm9ybWF0OworICAg
IHVuc2lnbmVkIG5hbWU7Cit9OworCitzdHJ1Y3QgQXR0YWNobWVudHNTdGF0ZURlc2NyaXB0b3Ig
eworICAgIFZlY3RvcjxBdHRhY2htZW50RGVzY3JpcHRvcj4gYXR0YWNobWVudERlc2NyaXB0b3Jz
OworICAgIE9wdGlvbmFsPEF0dGFjaG1lbnREZXNjcmlwdG9yPiBkZXB0aFN0ZW5jaWxBdHRhY2ht
ZW50RGVzY3JpcHRvcjsKK307CisKK2VudW0gY2xhc3MgU2hhZGVyU3RhZ2UgOiB1aW50OF90IHsK
KyAgICBOb25lID0gMCwKKyAgICBWZXJ0ZXggPSAxIDw8IDAsCisgICAgRnJhZ21lbnQgPSAxIDw8
IDEsCisgICAgQ29tcHV0ZSA9IDEgPDwgMgorfTsKKworZW51bSBjbGFzcyBCaW5kaW5nVHlwZSA6
IHVpbnQ4X3QgeworICAgIFVuaWZvcm1CdWZmZXIsCisgICAgU2FtcGxlciwKKyAgICBUZXh0dXJl
LAorICAgIFN0b3JhZ2VCdWZmZXIsCisgICAgLy8gRklYTUU6IEFkZCB0aGUgZHluYW1pYyB0eXBl
cworfTsKKworc3RydWN0IEJpbmRpbmcgeworICAgIE9wdGlvblNldDxTaGFkZXJTdGFnZT4gdmlz
aWJpbGl0eTsKKyAgICBCaW5kaW5nVHlwZSBiaW5kaW5nVHlwZTsKKyAgICB1bnNpZ25lZCBuYW1l
OworfTsKKworc3RydWN0IEJpbmRHcm91cCB7CisgICAgVmVjdG9yPEJpbmRpbmc+IGJpbmRpbmdz
OworICAgIHVuc2lnbmVkIG5hbWU7Cit9OworCit1c2luZyBMYXlvdXQgPSBWZWN0b3I8QmluZEdy
b3VwPjsKKworc3RydWN0IFJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciB7CisgICAgVmVydGV4QXR0
cmlidXRlcyB2ZXJ0ZXhBdHRyaWJ1dGVzOworICAgIEF0dGFjaG1lbnRzU3RhdGVEZXNjcmlwdG9y
IGF0dGFjaG1lbnRzU3RhdGVEZXNjcmlwdG9yOworICAgIExheW91dCBsYXlvdXQ7CisgICAgU3Ry
aW5nIHZlcnRleEVudHJ5UG9pbnROYW1lOworICAgIFN0cmluZyBmcmFnbWVudEVudHJ5UG9pbnRO
YW1lOworfTsKKworc3RydWN0IENvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IgeworICAgIExheW91
dCBsYXlvdXQ7CisgICAgU3RyaW5nIGVudHJ5UG9pbnROYW1lOworfTsKKwordXNpbmcgUGlwZWxp
bmVEZXNjcmlwdG9yID0gVmFyaWFudDxSZW5kZXJQaXBlbGluZURlc2NyaXB0b3IsIENvbXB1dGVQ
aXBlbGluZURlc2NyaXB0b3I+OworCit9IC8vIG5hbWVzcGFjZSBXSExTTAorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR1BVKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNGVjMmJkMjgxNWU3MWU4Mjg1ZDQ1YzhkYzY4Nzc2MTFhYWJjMWJiMAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5j
cHAKQEAgLTAsMCArMSwxMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiV0hMU0xQcmVwYXJlLmgiCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVk
ZSAiV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5oIgorI2luY2x1ZGUgIldITFNMQ2hlY2tl
ci5oIgorI2luY2x1ZGUgIldITFNMRnVuY3Rpb25TdGFnZUNoZWNrZXIuaCIKKyNpbmNsdWRlICJX
SExTTEhpZ2hab21iaWVGaW5kZXIuaCIKKyNpbmNsdWRlICJXSExTTExpdGVyYWxUeXBlQ2hlY2tl
ci5oIgorI2luY2x1ZGUgIldITFNMTWV0YWxDb2RlR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiV0hM
U0xOYW1lUmVzb2x2ZXIuaCIKKyNpbmNsdWRlICJXSExTTFBhcnNlci5oIgorI2luY2x1ZGUgIldI
TFNMUHJvZ3JhbS5oIgorI2luY2x1ZGUgIldITFNMUmVjdXJzaW9uQ2hlY2tlci5oIgorI2luY2x1
ZGUgIldITFNMUmVjdXJzaXZlVHlwZUNoZWNrZXIuaCIKKyNpbmNsdWRlICJXSExTTFNlbWFudGlj
TWF0Y2hlci5oIgorI2luY2x1ZGUgIldITFNMU3RhbmRhcmRMaWJyYXJ5LmgiCisjaW5jbHVkZSAi
V0hMU0xTdGF0ZW1lbnRCZWhhdmlvckNoZWNrZXIuaCIKKyNpbmNsdWRlICJXSExTTFN5bnRoZXNp
emVBcnJheU9wZXJhdG9yTGVuZ3RoLmgiCisjaW5jbHVkZSAiV0hMU0xTeW50aGVzaXplQ29uc3Ry
dWN0b3JzLmgiCisjaW5jbHVkZSAiV0hMU0xTeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMu
aCIKKyNpbmNsdWRlICJXSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuaCIKKyNpbmNs
dWRlIDx3dGYvVmFyaWFudC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBX
SExTTCB7CisKK3N0YXRpYyBPcHRpb25hbDxQcm9ncmFtPiBwcmVwYXJlU2hhcmVkKFN0cmluZyYg
d2hsc2xTb3VyY2UpCit7CisgICAgUHJvZ3JhbSBwcm9ncmFtOworICAgIFBhcnNlciBwYXJzZXI7
CisgICAgYXV0byBzdGFuZGFyZExpYnJhcnkgPSBTdHJpbmc6OmZyb21VVEY4KFdITFNMU3RhbmRh
cmRMaWJyYXJ5LCBzaXplb2YoV0hMU0xTdGFuZGFyZExpYnJhcnkpKTsKKyAgICBhdXRvIGZhaWx1
cmUgPSBzdGF0aWNfY2FzdDxib29sPihwYXJzZXIucGFyc2UocHJvZ3JhbSwgc3RhbmRhcmRMaWJy
YXJ5LCBQYXJzZXI6Ok1vZGU6OlN0YW5kYXJkTGlicmFyeSkpOworICAgIEFTU0VSVF9VTlVTRUQo
ZmFpbHVyZSwgIWZhaWx1cmUpOworICAgIGlmIChwYXJzZXIucGFyc2UocHJvZ3JhbSwgd2hsc2xT
b3VyY2UsIFBhcnNlcjo6TW9kZTo6VXNlcikpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CisgICAgTmFtZVJlc29sdmVyIG5hbWVSZXNvbHZlcihwcm9ncmFtLm5hbWVDb250ZXh0KCkpOwor
ICAgIGlmICghcmVzb2x2ZU5hbWVzSW5UeXBlcyhwcm9ncmFtLCBuYW1lUmVzb2x2ZXIpKQorICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGlmICghY2hlY2tSZWN1cnNpdmVUeXBlcyhw
cm9ncmFtKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBzeW50aGVzaXplU3Ry
dWN0dXJlQWNjZXNzb3JzKHByb2dyYW0pOworICAgIHN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0
aW9ucyhwcm9ncmFtKTsKKyAgICBzeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aChwcm9ncmFt
KTsKKyAgICBzeW50aGVzaXplQ29uc3RydWN0b3JzKHByb2dyYW0pOworICAgIHJlc29sdmVOYW1l
c0luRnVuY3Rpb25zKHByb2dyYW0sIG5hbWVSZXNvbHZlcik7CisgICAgaWYgKCFjaGVja0R1cGxp
Y2F0ZUZ1bmN0aW9ucyhwcm9ncmFtKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKwor
ICAgIGlmICghY2hlY2socHJvZ3JhbSkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cisg
ICAgY2hlY2tMaXRlcmFsVHlwZXMocHJvZ3JhbSk7CisgICAgLy8gcmVzb2x2ZVByb3BlcnRpZXMo
cHJvZ3JhbSk7CisgICAgZmluZEhpZ2hab21iaWVzKHByb2dyYW0pOworICAgIGlmICghY2hlY2tT
dGF0ZW1lbnRCZWhhdmlvcihwcm9ncmFtKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
KyAgICBpZiAoIWNoZWNrUmVjdXJzaW9uKHByb2dyYW0pKQorICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworICAgIGlmICghY2hlY2tGdW5jdGlvblN0YWdlcyhwcm9ncmFtKSkKKyAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gcHJvZ3JhbTsKK30KKworT3B0aW9uYWw8
UmVuZGVyUHJlcGFyZVJlc3VsdD4gcHJlcGFyZShTdHJpbmcmIHdobHNsU291cmNlLCBSZW5kZXJQ
aXBlbGluZURlc2NyaXB0b3ImIHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcikKK3sKKyAgICBhdXRv
IHByb2dyYW0gPSBwcmVwYXJlU2hhcmVkKHdobHNsU291cmNlKTsKKyAgICBpZiAoIXByb2dyYW0p
CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgYXV0byBtYXRjaGVkU2VtYW50aWNz
ID0gbWF0Y2hTZW1hbnRpY3MoKnByb2dyYW0sIHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcik7Cisg
ICAgaWYgKCFtYXRjaGVkU2VtYW50aWNzKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
CisgICAgYXV0byBnZW5lcmF0ZWRDb2RlID0gTWV0YWw6OmdlbmVyYXRlTWV0YWxDb2RlKCpwcm9n
cmFtLCBXVEZNb3ZlKCptYXRjaGVkU2VtYW50aWNzKSwgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9y
LmxheW91dCk7CisKKyAgICBSZW5kZXJQcmVwYXJlUmVzdWx0IHJlc3VsdDsKKyAgICByZXN1bHQu
bWV0YWxTb3VyY2UgPSBXVEZNb3ZlKGdlbmVyYXRlZENvZGUubWV0YWxTb3VyY2UpOworICAgIHJl
c3VsdC52ZXJ0ZXhNYXBwZWRCaW5kR3JvdXBzID0gV1RGTW92ZShnZW5lcmF0ZWRDb2RlLnZlcnRl
eE1hcHBlZEJpbmRHcm91cHMpOworICAgIHJlc3VsdC5mcmFnbWVudE1hcHBlZEJpbmRHcm91cHMg
PSBXVEZNb3ZlKGdlbmVyYXRlZENvZGUuZnJhZ21lbnRNYXBwZWRCaW5kR3JvdXBzKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCitPcHRpb25hbDxDb21wdXRlUHJlcGFyZVJlc3VsdD4gcHJlcGFy
ZShTdHJpbmcmIHdobHNsU291cmNlLCBDb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yJiBjb21wdXRl
UGlwZWxpbmVEZXNjcmlwdG9yKQoreworICAgIGF1dG8gcHJvZ3JhbSA9IHByZXBhcmVTaGFyZWQo
d2hsc2xTb3VyY2UpOworICAgIGlmICghcHJvZ3JhbSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKyAgICBhdXRvIG1hdGNoZWRTZW1hbnRpY3MgPSBtYXRjaFNlbWFudGljcygqcHJvZ3Jh
bSwgY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvcik7CisgICAgaWYgKCFtYXRjaGVkU2VtYW50aWNz
KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgYXV0byBnZW5lcmF0ZWRDb2Rl
ID0gTWV0YWw6OmdlbmVyYXRlTWV0YWxDb2RlKCpwcm9ncmFtLCBXVEZNb3ZlKCptYXRjaGVkU2Vt
YW50aWNzKSwgY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvci5sYXlvdXQpOworCisgICAgQ29tcHV0
ZVByZXBhcmVSZXN1bHQgcmVzdWx0OworICAgIHJlc3VsdC5tZXRhbFNvdXJjZSA9IFdURk1vdmUo
Z2VuZXJhdGVkQ29kZS5tZXRhbFNvdXJjZSk7CisgICAgcmVzdWx0Lm1hcHBlZEJpbmRHcm91cHMg
PSBXVEZNb3ZlKGdlbmVyYXRlZENvZGUuYmluZEdyb3Vwcyk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworfSAvLyBuYW1lc3BhY2UgV0hMU0wKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gRU5BQkxFKFdFQkdQVSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGYyYzg0NjZiZjU2NWI3YjFl
NTBjNGFhZWNmZGIzNTNmMmRjOGNmMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5oCkBAIC0wLDAgKzEsNTcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRl
ICJXSExTTE1hcHBlZEJpbmRpbmdzLmgiCisjaW5jbHVkZSAiV0hMU0xQaXBlbGluZURlc2NyaXB0
b3IuaCIKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCisv
LyBGSVhNRTogR2VuZXJhdGUgZGVzY3JpcHRpdmUgZXJyb3IgbWVzc2FnZXMgYW5kIHJldHVybiB0
aGVtIGhlcmUuCitzdHJ1Y3QgUmVuZGVyUHJlcGFyZVJlc3VsdCB7CisgICAgU3RyaW5nIG1ldGFs
U291cmNlOworICAgIE1ldGFsOjpNYXBwZWRCaW5kR3JvdXBzIHZlcnRleE1hcHBlZEJpbmRHcm91
cHM7CisgICAgTWV0YWw6Ok1hcHBlZEJpbmRHcm91cHMgZnJhZ21lbnRNYXBwZWRCaW5kR3JvdXBz
OworfTsKK09wdGlvbmFsPFJlbmRlclByZXBhcmVSZXN1bHQ+IHByZXBhcmUoU3RyaW5nJiB3aGxz
bFNvdXJjZSwgUmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yJik7CisKK3N0cnVjdCBDb21wdXRlUHJl
cGFyZVJlc3VsdCB7CisgICAgU3RyaW5nIG1ldGFsU291cmNlOworICAgIE1ldGFsOjpNYXBwZWRC
aW5kR3JvdXBzIG1hcHBlZEJpbmRHcm91cHM7Cit9OworT3B0aW9uYWw8Q29tcHV0ZVByZXBhcmVS
ZXN1bHQ+IHByZXBhcmUoU3RyaW5nJiB3aGxzbFNvdXJjZSwgQ29tcHV0ZVBpcGVsaW5lRGVzY3Jp
cHRvciYpOworCit9IC8vIG5hbWVzcGFjZSBXSExTTAorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR1BVKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTZW1hbnRpY01hdGNoZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTZW1hbnRpY01hdGNoZXIuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjBiZGNjMGNlOGYxZGE1NzZjNWJmNzM0YjkzNmU2YzZhOTc5MzI5OGEKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFNlbWFu
dGljTWF0Y2hlci5jcHAKQEAgLTAsMCArMSwzMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiV0hMU0xTZW1hbnRpY01hdGNoZXIuaCIKKworI2lmIEVOQUJM
RShXRUJHUFUpCisKKyNpbmNsdWRlICJXSExTTEJ1aWx0SW5TZW1hbnRpYy5oIgorI2luY2x1ZGUg
IldITFNMRnVuY3Rpb25EZWZpbml0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xHYXRoZXJFbnRyeVBv
aW50SXRlbXMuaCIKKyNpbmNsdWRlICJXSExTTEluZmVyVHlwZXMuaCIKKyNpbmNsdWRlICJXSExT
TFBpcGVsaW5lRGVzY3JpcHRvci5oIgorI2luY2x1ZGUgIldITFNMUHJvZ3JhbS5oIgorI2luY2x1
ZGUgIldITFNMUmVzb3VyY2VTZW1hbnRpYy5oIgorI2luY2x1ZGUgIldITFNMU3RhZ2VJbk91dFNl
bWFudGljLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNl
dC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK3N0
YXRpYyBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiogZmluZEVudHJ5UG9pbnQoVmVjdG9yPFVuaXF1
ZVJlZjxBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbj4+JiBmdW5jdGlvbkRlZmluaXRpb25zLCBTdHJp
bmcmIG5hbWUpCit7CisgICAgYXV0byBpdGVyYXRvciA9IHN0ZDo6ZmluZF9pZihmdW5jdGlvbkRl
ZmluaXRpb25zLmJlZ2luKCksIGZ1bmN0aW9uRGVmaW5pdGlvbnMuZW5kKCksIFsmXShBU1Q6OkZ1
bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0aW9uKSB7CisgICAgICAgIHJldHVybiBm
dW5jdGlvbkRlZmluaXRpb24uZW50cnlQb2ludFR5cGUoKSAmJiBmdW5jdGlvbkRlZmluaXRpb24u
bmFtZSgpID09IG5hbWU7CisgICAgfSk7CisgICAgaWYgKGl0ZXJhdG9yID09IGZ1bmN0aW9uRGVm
aW5pdGlvbnMuZW5kKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiAmKml0
ZXJhdG9yOworfTsKKworc3RhdGljIGJvb2wgbWF0Y2hNb2RlKEJpbmRpbmdUeXBlIGJpbmRpbmdU
eXBlLCBBU1Q6OlJlc291cmNlU2VtYW50aWM6Ok1vZGUgbW9kZSkKK3sKKyAgICBzd2l0Y2ggKGJp
bmRpbmdUeXBlKSB7CisgICAgY2FzZSBCaW5kaW5nVHlwZTo6VW5pZm9ybUJ1ZmZlcjoKKyAgICAg
ICAgcmV0dXJuIG1vZGUgPT0gQVNUOjpSZXNvdXJjZVNlbWFudGljOjpNb2RlOjpCdWZmZXI7Cisg
ICAgY2FzZSBCaW5kaW5nVHlwZTo6U2FtcGxlcjoKKyAgICAgICAgcmV0dXJuIG1vZGUgPT0gQVNU
OjpSZXNvdXJjZVNlbWFudGljOjpNb2RlOjpTYW1wbGVyOworICAgIGNhc2UgQmluZGluZ1R5cGU6
OlRleHR1cmU6CisgICAgICAgIHJldHVybiBtb2RlID09IEFTVDo6UmVzb3VyY2VTZW1hbnRpYzo6
TW9kZTo6VGV4dHVyZTsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlQoYmluZGluZ1R5cGUg
PT0gQmluZGluZ1R5cGU6OlN0b3JhZ2VCdWZmZXIpOworICAgICAgICByZXR1cm4gbW9kZSA9PSBB
U1Q6OlJlc291cmNlU2VtYW50aWM6Ok1vZGU6OlVub3JkZXJlZEFjY2Vzc1ZpZXc7CisgICAgfQor
fQorCitzdGF0aWMgT3B0aW9uYWw8SGFzaE1hcDxCaW5kaW5nKiwgc2l6ZV90Pj4gbWF0Y2hSZXNv
dXJjZXMoVmVjdG9yPEVudHJ5UG9pbnRJdGVtPiYgZW50cnlQb2ludEl0ZW1zLCBMYXlvdXQmIGxh
eW91dCwgU2hhZGVyU3RhZ2Ugc2hhZGVyU3RhZ2UpCit7CisgICAgSGFzaE1hcDxCaW5kaW5nKiwg
c2l6ZV90PiByZXN1bHQ7CisgICAgSGFzaFNldDxzaXplX3Q+IGl0ZW1JbmRpY2VzOworICAgIGlm
IChlbnRyeVBvaW50SXRlbXMuc2l6ZSgpID09IHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6
bWF4KCkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7IC8vIFdvcmsgYXJvdW5kIHRoZSBm
YWN0IHRoYXQgSGFzaFNldCdzIGtleXMgYXJlIHJlc3RyaWN0ZWQuCisgICAgZm9yIChhdXRvJiBi
aW5kR3JvdXAgOiBsYXlvdXQpIHsKKyAgICAgICAgYXV0byBzcGFjZSA9IGJpbmRHcm91cC5uYW1l
OworICAgICAgICBmb3IgKGF1dG8mIGJpbmRpbmcgOiBiaW5kR3JvdXAuYmluZGluZ3MpIHsKKyAg
ICAgICAgICAgIGlmICghYmluZGluZy52aXNpYmlsaXR5LmNvbnRhaW5zKHNoYWRlclN0YWdlKSkK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgZW50cnlQb2ludEl0ZW1zLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgYXV0
byYgaXRlbSA9IGVudHJ5UG9pbnRJdGVtc1tpXTsKKyAgICAgICAgICAgICAgICBhdXRvJiBzZW1h
bnRpYyA9ICppdGVtLnNlbWFudGljOworICAgICAgICAgICAgICAgIGlmICghV1RGOjpob2xkc19h
bHRlcm5hdGl2ZTxBU1Q6OlJlc291cmNlU2VtYW50aWM+KHNlbWFudGljKSkKKyAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgYXV0byYgcmVzb3VyY2VTZW1hbnRp
YyA9IFdURjo6Z2V0PEFTVDo6UmVzb3VyY2VTZW1hbnRpYz4oc2VtYW50aWMpOworICAgICAgICAg
ICAgICAgIGlmICghbWF0Y2hNb2RlKGJpbmRpbmcuYmluZGluZ1R5cGUsIHJlc291cmNlU2VtYW50
aWMubW9kZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAg
ICAgaWYgKGJpbmRpbmcubmFtZSAhPSByZXNvdXJjZVNlbWFudGljLmluZGV4KCkpCisgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGlmIChzcGFjZSAhPSByZXNv
dXJjZVNlbWFudGljLnNwYWNlKCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgICAgIHJlc3VsdC5hZGQoJmJpbmRpbmcsIGkpOworICAgICAgICAgICAgICAgIGl0
ZW1JbmRpY2VzLmFkZChpICsgMSk7IC8vIFdvcmsgYXJvdW5kIHRoZSBmYWN0IHRoYXQgSGFzaFNl
dCdzIGtleXMgYXJlIHJlc3RyaWN0ZWQuCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGVudHJ5UG9pbnRJdGVtcy5zaXplKCk7ICsr
aSkgeworICAgICAgICBhdXRvJiBpdGVtID0gZW50cnlQb2ludEl0ZW1zW2ldOworICAgICAgICBh
dXRvJiBzZW1hbnRpYyA9ICppdGVtLnNlbWFudGljOworICAgICAgICBpZiAoIVdURjo6aG9sZHNf
YWx0ZXJuYXRpdmU8QVNUOjpSZXNvdXJjZVNlbWFudGljPihzZW1hbnRpYykpCisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgaWYgKCFpdGVtSW5kaWNlcy5jb250YWlucyhpICsgMSkpCisg
ICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIH0KKworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3N0YXRpYyBib29sIG1hdGNoSW5wdXRzT3V0cHV0cyhWZWN0b3I8RW50cnlQb2lu
dEl0ZW0+JiB2ZXJ0ZXhPdXRwdXRzLCBWZWN0b3I8RW50cnlQb2ludEl0ZW0+JiBmcmFnbWVudElu
cHV0cykKK3sKKyAgICBmb3IgKGF1dG8mIGZyYWdtZW50SW5wdXQgOiBmcmFnbWVudElucHV0cykg
eworICAgICAgICBpZiAoIVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8QVNUOjpTdGFnZUluT3V0U2Vt
YW50aWM+KCpmcmFnbWVudElucHV0LnNlbWFudGljKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICBhdXRvJiBmcmFnbWVudElucHV0U3RhZ2VJbk91dFNlbWFudGljID0gV1RGOjpnZXQ8
QVNUOjpTdGFnZUluT3V0U2VtYW50aWM+KCpmcmFnbWVudElucHV0LnNlbWFudGljKTsKKyAgICAg
ICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgICAgICBmb3IgKGF1dG8mIHZlcnRleE91dHB1dCA6
IHZlcnRleE91dHB1dHMpIHsKKyAgICAgICAgICAgIGlmICghV1RGOjpob2xkc19hbHRlcm5hdGl2
ZTxBU1Q6OlN0YWdlSW5PdXRTZW1hbnRpYz4oKnZlcnRleE91dHB1dC5zZW1hbnRpYykpCisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBhdXRvJiB2ZXJ0ZXhPdXRwdXRTdGFn
ZUluT3V0U2VtYW50aWMgPSBXVEY6OmdldDxBU1Q6OlN0YWdlSW5PdXRTZW1hbnRpYz4oKnZlcnRl
eE91dHB1dC5zZW1hbnRpYyk7CisgICAgICAgICAgICBpZiAoZnJhZ21lbnRJbnB1dFN0YWdlSW5P
dXRTZW1hbnRpYy5pbmRleCgpID09IHZlcnRleE91dHB1dFN0YWdlSW5PdXRTZW1hbnRpYy5pbmRl
eCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKG1hdGNoZXMoKmZyYWdtZW50SW5wdXQudW5uYW1l
ZFR5cGUsICp2ZXJ0ZXhPdXRwdXQudW5uYW1lZFR5cGUpKSB7CisgICAgICAgICAgICAgICAgICAg
IGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBpZiAoIWZvdW5kKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgaXNBY2NlcHRhYmxlRm9ybWF0
KFZlcnRleEZvcm1hdCB2ZXJ0ZXhGb3JtYXQsIEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBl
LCBJbnRyaW5zaWNzJiBpbnRyaW5zaWNzKQoreworICAgIHN3aXRjaCAodmVydGV4Rm9ybWF0KSB7
CisgICAgY2FzZSBWZXJ0ZXhGb3JtYXQ6OkZsb2F0UjMyRzMyQjMyQTMyOgorICAgICAgICByZXR1
cm4gbWF0Y2hlcyh1bm5hbWVkVHlwZSwgaW50cmluc2ljcy5mbG9hdDRUeXBlKCkpOworICAgIGNh
c2UgVmVydGV4Rm9ybWF0OjpGbG9hdFIzMkczMkIzMjoKKyAgICAgICAgcmV0dXJuIG1hdGNoZXMo
dW5uYW1lZFR5cGUsIGludHJpbnNpY3MuZmxvYXQzVHlwZSgpKTsKKyAgICBjYXNlIFZlcnRleEZv
cm1hdDo6RmxvYXRSMzJHMzI6CisgICAgICAgIHJldHVybiBtYXRjaGVzKHVubmFtZWRUeXBlLCBp
bnRyaW5zaWNzLmZsb2F0MlR5cGUoKSk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUKHZl
cnRleEZvcm1hdCA9PSBWZXJ0ZXhGb3JtYXQ6OkZsb2F0UjMyKTsKKyAgICAgICAgcmV0dXJuIG1h
dGNoZXModW5uYW1lZFR5cGUsIGludHJpbnNpY3MuZmxvYXRUeXBlKCkpOworICAgIH0KK30KKwor
c3RhdGljIE9wdGlvbmFsPEhhc2hNYXA8VmVydGV4QXR0cmlidXRlKiwgc2l6ZV90Pj4gbWF0Y2hW
ZXJ0ZXhBdHRyaWJ1dGVzKFZlY3RvcjxFbnRyeVBvaW50SXRlbT4mIHZlcnRleElucHV0cywgVmVy
dGV4QXR0cmlidXRlcyYgdmVydGV4QXR0cmlidXRlcywgSW50cmluc2ljcyYgaW50cmluc2ljcykK
K3sKKyAgICBIYXNoTWFwPFZlcnRleEF0dHJpYnV0ZSosIHNpemVfdD4gcmVzdWx0OworICAgIEhh
c2hTZXQ8c2l6ZV90PiBpdGVtSW5kaWNlczsKKyAgICBpZiAodmVydGV4SW5wdXRzLnNpemUoKSA9
PSBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpKQorICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OyAvLyBXb3JrIGFyb3VuZCB0aGUgZmFjdCB0aGF0IEhhc2hTZXQncyBrZXlzIGFy
ZSByZXN0cmljdGVkLgorICAgIGZvciAoYXV0byYgdmVydGV4QXR0cmlidXRlIDogdmVydGV4QXR0
cmlidXRlcykgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZlcnRleElucHV0cy5z
aXplKCk7ICsraSkgeworICAgICAgICAgICAgYXV0byYgaXRlbSA9IHZlcnRleElucHV0c1tpXTsK
KyAgICAgICAgICAgIGF1dG8mIHNlbWFudGljID0gKml0ZW0uc2VtYW50aWM7CisgICAgICAgICAg
ICBpZiAoIVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8QVNUOjpTdGFnZUluT3V0U2VtYW50aWM+KHNl
bWFudGljKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGF1dG8mIHN0
YWdlSW5PdXRTZW1hbnRpYyA9IFdURjo6Z2V0PEFTVDo6U3RhZ2VJbk91dFNlbWFudGljPihzZW1h
bnRpYyk7CisgICAgICAgICAgICBpZiAoc3RhZ2VJbk91dFNlbWFudGljLmluZGV4KCkgIT0gdmVy
dGV4QXR0cmlidXRlLm5hbWUpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICBpZiAoIWlzQWNjZXB0YWJsZUZvcm1hdCh2ZXJ0ZXhBdHRyaWJ1dGUudmVydGV4Rm9ybWF0LCAq
aXRlbS51bm5hbWVkVHlwZSwgaW50cmluc2ljcykpCisgICAgICAgICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKyAgICAgICAgICAgIHJlc3VsdC5hZGQoJnZlcnRleEF0dHJpYnV0ZSwgaSk7
CisgICAgICAgICAgICBpdGVtSW5kaWNlcy5hZGQoaSArIDEpOyAvLyBXb3JrIGFyb3VuZCB0aGUg
ZmFjdCB0aGF0IEhhc2hTZXQncyBrZXlzIGFyZSByZXN0cmljdGVkLgorICAgICAgICB9CisgICAg
fQorCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2ZXJ0ZXhJbnB1dHMuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgYXV0byYgaXRlbSA9IHZlcnRleElucHV0c1tpXTsKKyAgICAgICAgYXV0byYg
c2VtYW50aWMgPSAqaXRlbS5zZW1hbnRpYzsKKyAgICAgICAgaWYgKCFXVEY6OmhvbGRzX2FsdGVy
bmF0aXZlPEFTVDo6U3RhZ2VJbk91dFNlbWFudGljPihzZW1hbnRpYykpCisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgaWYgKCFpdGVtSW5kaWNlcy5jb250YWlucyhpICsgMSkpCisgICAg
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK3N0YXRpYyBib29sIGlzQWNjZXB0YWJsZUZvcm1hdChUZXh0dXJlRm9ybWF0IHRleHR1
cmVGb3JtYXQsIEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlLCBJbnRyaW5zaWNzJiBpbnRy
aW5zaWNzLCBib29sIGlzQ29sb3IpCit7CisgICAgaWYgKGlzQ29sb3IpIHsKKyAgICAgICAgc3dp
dGNoICh0ZXh0dXJlRm9ybWF0KSB7CisgICAgICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6UjhHOEI4
QThVbm9ybToKKyAgICAgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpSOEc4QjhBOFVpbnQ6CisgICAg
ICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6QjhHOFI4QThVbm9ybToKKyAgICAgICAgICAgIHJldHVy
biBtYXRjaGVzKHVubmFtZWRUeXBlLCBpbnRyaW5zaWNzLmZsb2F0NFR5cGUoKSk7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlQodGV4dHVyZUZvcm1hdCA9PSBUZXh0dXJlRm9y
bWF0OjpEMzJGbG9hdFM4VWludCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICB9CisgICAgcmV0dXJuIHRleHR1cmVGb3JtYXQgPT0gVGV4dHVyZUZvcm1hdDo6RDMy
RmxvYXRTOFVpbnQgJiYgbWF0Y2hlcyh1bm5hbWVkVHlwZSwgaW50cmluc2ljcy5mbG9hdFR5cGUo
KSk7Cit9CisKK3N0YXRpYyBPcHRpb25hbDxIYXNoTWFwPEF0dGFjaG1lbnREZXNjcmlwdG9yKiwg
c2l6ZV90Pj4gbWF0Y2hDb2xvckF0dGFjaG1lbnRzKFZlY3RvcjxFbnRyeVBvaW50SXRlbT4mIGZy
YWdtZW50T3V0cHV0cywgVmVjdG9yPEF0dGFjaG1lbnREZXNjcmlwdG9yPiYgYXR0YWNobWVudERl
c2NyaXB0b3JzLCBJbnRyaW5zaWNzJiBpbnRyaW5zaWNzKQoreworICAgIEhhc2hNYXA8QXR0YWNo
bWVudERlc2NyaXB0b3IqLCBzaXplX3Q+IHJlc3VsdDsKKyAgICBIYXNoU2V0PHNpemVfdD4gaXRl
bUluZGljZXM7CisgICAgaWYgKGF0dGFjaG1lbnREZXNjcmlwdG9ycy5zaXplKCkgPT0gc3RkOjpu
dW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsgLy8gV29yayBhcm91bmQgdGhlIGZhY3QgdGhhdCBIYXNoU2V0J3Mga2V5cyBhcmUgcmVzdHJp
Y3RlZC4KKyAgICBmb3IgKGF1dG8mIGF0dGFjaG1lbnREZXNjcmlwdG9yIDogYXR0YWNobWVudERl
c2NyaXB0b3JzKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnJhZ21lbnRPdXRw
dXRzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBhdXRvJiBpdGVtID0gZnJhZ21lbnRPdXRw
dXRzW2ldOworICAgICAgICAgICAgYXV0byYgc2VtYW50aWMgPSAqaXRlbS5zZW1hbnRpYzsKKyAg
ICAgICAgICAgIGlmICghV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxBU1Q6OlN0YWdlSW5PdXRTZW1h
bnRpYz4oc2VtYW50aWMpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
YXV0byYgc3RhZ2VJbk91dFNlbWFudGljID0gV1RGOjpnZXQ8QVNUOjpTdGFnZUluT3V0U2VtYW50
aWM+KHNlbWFudGljKTsKKyAgICAgICAgICAgIGlmIChzdGFnZUluT3V0U2VtYW50aWMuaW5kZXgo
KSAhPSBhdHRhY2htZW50RGVzY3JpcHRvci5uYW1lKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgaWYgKCFpc0FjY2VwdGFibGVGb3JtYXQoYXR0YWNobWVudERlc2NyaXB0
b3IudGV4dHVyZUZvcm1hdCwgKml0ZW0udW5uYW1lZFR5cGUsIGludHJpbnNpY3MsIHRydWUpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgICAgICByZXN1bHQu
YWRkKCZhdHRhY2htZW50RGVzY3JpcHRvciwgaSk7CisgICAgICAgICAgICBpdGVtSW5kaWNlcy5h
ZGQoaSArIDEpOyAvLyBXb3JrIGFyb3VuZCB0aGUgZmFjdCB0aGF0IEhhc2hTZXQncyBrZXlzIGFy
ZSByZXN0cmljdGVkLgorICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBmcmFnbWVudE91dHB1dHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgYXV0byYgaXRlbSA9
IGZyYWdtZW50T3V0cHV0c1tpXTsKKyAgICAgICAgYXV0byYgc2VtYW50aWMgPSAqaXRlbS5zZW1h
bnRpYzsKKyAgICAgICAgaWYgKCFXVEY6OmhvbGRzX2FsdGVybmF0aXZlPEFTVDo6U3RhZ2VJbk91
dFNlbWFudGljPihzZW1hbnRpYykpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYg
KCFpdGVtSW5kaWNlcy5jb250YWlucyhpICsgMSkpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBib29sIG1h
dGNoRGVwdGhBdHRhY2htZW50KFZlY3RvcjxFbnRyeVBvaW50SXRlbT4mIGZyYWdtZW50T3V0cHV0
cywgT3B0aW9uYWw8QXR0YWNobWVudERlc2NyaXB0b3I+JiBkZXB0aFN0ZW5jaWxBdHRhY2htZW50
RGVzY3JpcHRvciwgSW50cmluc2ljcyYgaW50cmluc2ljcykKK3sKKyAgICBhdXRvIGl0ZXJhdG9y
ID0gc3RkOjpmaW5kX2lmKGZyYWdtZW50T3V0cHV0cy5iZWdpbigpLCBmcmFnbWVudE91dHB1dHMu
ZW5kKCksIFsmXShFbnRyeVBvaW50SXRlbSYgaXRlbSkgeworICAgICAgICBhdXRvJiBzZW1hbnRp
YyA9ICppdGVtLnNlbWFudGljOworICAgICAgICBpZiAoIVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8
QVNUOjpCdWlsdEluU2VtYW50aWM+KHNlbWFudGljKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgYXV0byYgYnVpbHRJblNlbWFudGljID0gV1RGOjpnZXQ8QVNUOjpCdWlsdElu
U2VtYW50aWM+KHNlbWFudGljKTsKKyAgICAgICAgcmV0dXJuIGJ1aWx0SW5TZW1hbnRpYy52YXJp
YWJsZSgpID09IEFTVDo6QnVpbHRJblNlbWFudGljOjpWYXJpYWJsZTo6U1ZEZXB0aDsKKyAgICB9
KTsKKyAgICBpZiAoaXRlcmF0b3IgPT0gZnJhZ21lbnRPdXRwdXRzLmVuZCgpKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgIGlmIChkZXB0aFN0ZW5jaWxBdHRhY2htZW50RGVzY3JpcHRvcikg
eworICAgICAgICBBU1NFUlQoIWRlcHRoU3RlbmNpbEF0dGFjaG1lbnREZXNjcmlwdG9yLT5uYW1l
KTsKKyAgICAgICAgcmV0dXJuIGlzQWNjZXB0YWJsZUZvcm1hdChkZXB0aFN0ZW5jaWxBdHRhY2ht
ZW50RGVzY3JpcHRvci0+dGV4dHVyZUZvcm1hdCwgKml0ZXJhdG9yLT51bm5hbWVkVHlwZSwgaW50
cmluc2ljcywgZmFsc2UpOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK09wdGlvbmFs
PE1hdGNoZWRSZW5kZXJTZW1hbnRpY3M+IG1hdGNoU2VtYW50aWNzKFByb2dyYW0mIHByb2dyYW0s
IFJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciYgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKQorewor
ICAgIGF1dG8gdmVydGV4U2hhZGVyRW50cnlQb2ludCA9IGZpbmRFbnRyeVBvaW50KHByb2dyYW0u
ZnVuY3Rpb25EZWZpbml0aW9ucygpLCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IudmVydGV4RW50
cnlQb2ludE5hbWUpOworICAgIGF1dG8gZnJhZ21lbnRTaGFkZXJFbnRyeVBvaW50ID0gZmluZEVu
dHJ5UG9pbnQocHJvZ3JhbS5mdW5jdGlvbkRlZmluaXRpb25zKCksIHJlbmRlclBpcGVsaW5lRGVz
Y3JpcHRvci5mcmFnbWVudEVudHJ5UG9pbnROYW1lKTsKKyAgICBpZiAoIXZlcnRleFNoYWRlckVu
dHJ5UG9pbnQgfHwgIWZyYWdtZW50U2hhZGVyRW50cnlQb2ludCkKKyAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKyAgICBhdXRvIHZlcnRleFNoYWRlckVudHJ5UG9pbnRJdGVtcyA9IGdhdGhl
ckVudHJ5UG9pbnRJdGVtcyhwcm9ncmFtLmludHJpbnNpY3MoKSwgKnZlcnRleFNoYWRlckVudHJ5
UG9pbnQpOworICAgIGF1dG8gZnJhZ21lbnRTaGFkZXJFbnRyeVBvaW50SXRlbXMgPSBnYXRoZXJF
bnRyeVBvaW50SXRlbXMocHJvZ3JhbS5pbnRyaW5zaWNzKCksICpmcmFnbWVudFNoYWRlckVudHJ5
UG9pbnQpOworICAgIGlmICghdmVydGV4U2hhZGVyRW50cnlQb2ludEl0ZW1zIHx8ICFmcmFnbWVu
dFNoYWRlckVudHJ5UG9pbnRJdGVtcykKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAg
ICBhdXRvIHZlcnRleFNoYWRlclJlc291cmNlTWFwID0gbWF0Y2hSZXNvdXJjZXModmVydGV4U2hh
ZGVyRW50cnlQb2ludEl0ZW1zLT5pbnB1dHMsIHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvci5sYXlv
dXQsIFNoYWRlclN0YWdlOjpWZXJ0ZXgpOworICAgIGF1dG8gZnJhZ21lbnRTaGFkZXJSZXNvdXJj
ZU1hcCA9IG1hdGNoUmVzb3VyY2VzKGZyYWdtZW50U2hhZGVyRW50cnlQb2ludEl0ZW1zLT5pbnB1
dHMsIHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvci5sYXlvdXQsIFNoYWRlclN0YWdlOjpGcmFnbWVu
dCk7CisgICAgaWYgKCF2ZXJ0ZXhTaGFkZXJSZXNvdXJjZU1hcCB8fCAhZnJhZ21lbnRTaGFkZXJS
ZXNvdXJjZU1hcCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBpZiAoIW1hdGNo
SW5wdXRzT3V0cHV0cyh2ZXJ0ZXhTaGFkZXJFbnRyeVBvaW50SXRlbXMtPm91dHB1dHMsIGZyYWdt
ZW50U2hhZGVyRW50cnlQb2ludEl0ZW1zLT5pbnB1dHMpKQorICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworICAgIGF1dG8gbWF0Y2hlZFZlcnRleEF0dHJpYnV0ZXMgPSBtYXRjaFZlcnRleEF0
dHJpYnV0ZXModmVydGV4U2hhZGVyRW50cnlQb2ludEl0ZW1zLT5pbnB1dHMsIHJlbmRlclBpcGVs
aW5lRGVzY3JpcHRvci52ZXJ0ZXhBdHRyaWJ1dGVzLCBwcm9ncmFtLmludHJpbnNpY3MoKSk7Cisg
ICAgaWYgKCFtYXRjaGVkVmVydGV4QXR0cmlidXRlcykKKyAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKyAgICBhdXRvIG1hdGNoZWRDb2xvckF0dGFjaG1lbnRzID0gbWF0Y2hDb2xvckF0dGFj
aG1lbnRzKGZyYWdtZW50U2hhZGVyRW50cnlQb2ludEl0ZW1zLT5vdXRwdXRzLCByZW5kZXJQaXBl
bGluZURlc2NyaXB0b3IuYXR0YWNobWVudHNTdGF0ZURlc2NyaXB0b3IuYXR0YWNobWVudERlc2Ny
aXB0b3JzLCBwcm9ncmFtLmludHJpbnNpY3MoKSk7CisgICAgaWYgKCFtYXRjaGVkQ29sb3JBdHRh
Y2htZW50cykKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBpZiAoIW1hdGNoRGVw
dGhBdHRhY2htZW50KGZyYWdtZW50U2hhZGVyRW50cnlQb2ludEl0ZW1zLT5vdXRwdXRzLCByZW5k
ZXJQaXBlbGluZURlc2NyaXB0b3IuYXR0YWNobWVudHNTdGF0ZURlc2NyaXB0b3IuZGVwdGhTdGVu
Y2lsQXR0YWNobWVudERlc2NyaXB0b3IsIHByb2dyYW0uaW50cmluc2ljcygpKSkKKyAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4ge3sgdmVydGV4U2hhZGVyRW50cnlQb2lu
dCwgZnJhZ21lbnRTaGFkZXJFbnRyeVBvaW50LCAqdmVydGV4U2hhZGVyRW50cnlQb2ludEl0ZW1z
LCAqZnJhZ21lbnRTaGFkZXJFbnRyeVBvaW50SXRlbXMsICp2ZXJ0ZXhTaGFkZXJSZXNvdXJjZU1h
cCwgKmZyYWdtZW50U2hhZGVyUmVzb3VyY2VNYXAsICptYXRjaGVkVmVydGV4QXR0cmlidXRlcywg
Km1hdGNoZWRDb2xvckF0dGFjaG1lbnRzIH19OworfQorCitPcHRpb25hbDxNYXRjaGVkQ29tcHV0
ZVNlbWFudGljcz4gbWF0Y2hTZW1hbnRpY3MoUHJvZ3JhbSYgcHJvZ3JhbSwgQ29tcHV0ZVBpcGVs
aW5lRGVzY3JpcHRvciYgY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvcikKK3sKKyAgICBhdXRvIGVu
dHJ5UG9pbnQgPSBmaW5kRW50cnlQb2ludChwcm9ncmFtLmZ1bmN0aW9uRGVmaW5pdGlvbnMoKSwg
Y29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvci5lbnRyeVBvaW50TmFtZSk7CisgICAgaWYgKCFlbnRy
eVBvaW50KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGF1dG8gZW50cnlQb2lu
dEl0ZW1zID0gZ2F0aGVyRW50cnlQb2ludEl0ZW1zKHByb2dyYW0uaW50cmluc2ljcygpLCAqZW50
cnlQb2ludCk7CisgICAgaWYgKCFlbnRyeVBvaW50SXRlbXMpCisgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisgICAgQVNTRVJUKGVudHJ5UG9pbnRJdGVtcy0+b3V0cHV0cy5pc0VtcHR5KCkp
OworICAgIGF1dG8gcmVzb3VyY2VNYXAgPSBtYXRjaFJlc291cmNlcyhlbnRyeVBvaW50SXRlbXMt
PmlucHV0cywgY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvci5sYXlvdXQsIFNoYWRlclN0YWdlOjpD
b21wdXRlKTsKKyAgICBpZiAoIXJlc291cmNlTWFwKQorICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworICAgIHJldHVybiB7eyBlbnRyeVBvaW50LCAqZW50cnlQb2ludEl0ZW1zLCAqcmVzb3Vy
Y2VNYXAgfX07Cit9CisKK30gLy8gbmFtZXNwYWNlIFdITFNMCisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJHUFUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFNlbWFudGljTWF0Y2hlci5oIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTZW1hbnRpY01hdGNoZXIuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi40ZmY4YzhkMTNmZjBjZDc3NGUyNjU0ZGUxY2Y2ZjBjZjI1ODM4NjY3Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTZW1h
bnRpY01hdGNoZXIuaApAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xHYXRoZXJFbnRyeVBvaW50
SXRlbXMuaCIKKyNpbmNsdWRlICJXSExTTFBpcGVsaW5lRGVzY3JpcHRvci5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2NsYXNzIFByb2dyYW07CisKK3N0
cnVjdCBNYXRjaGVkUmVuZGVyU2VtYW50aWNzIHsKKyAgICBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlv
biogdmVydGV4U2hhZGVyOworICAgIEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uKiBmcmFnbWVudFNo
YWRlcjsKKyAgICBFbnRyeVBvaW50SXRlbXMgdmVydGV4U2hhZGVyRW50cnlQb2ludEl0ZW1zOwor
ICAgIEVudHJ5UG9pbnRJdGVtcyBmcmFnbWVudFNoYWRlckVudHJ5UG9pbnRJdGVtczsKKyAgICBI
YXNoTWFwPEJpbmRpbmcqLCBzaXplX3Q+IHZlcnRleFNoYWRlclJlc291cmNlTWFwOworICAgIEhh
c2hNYXA8QmluZGluZyosIHNpemVfdD4gZnJhZ21lbnRTaGFkZXJSZXNvdXJjZU1hcDsKKyAgICBI
YXNoTWFwPFZlcnRleEF0dHJpYnV0ZSosIHNpemVfdD4gbWF0Y2hlZFZlcnRleEF0dHJpYnV0ZXM7
CisgICAgSGFzaE1hcDxBdHRhY2htZW50RGVzY3JpcHRvciosIHNpemVfdD4gbWF0Y2hlZENvbG9y
QXR0YWNobWVudHM7Cit9OworCitPcHRpb25hbDxNYXRjaGVkUmVuZGVyU2VtYW50aWNzPiBtYXRj
aFNlbWFudGljcyhQcm9ncmFtJiwgUmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yJik7CisKK3N0cnVj
dCBNYXRjaGVkQ29tcHV0ZVNlbWFudGljcyB7CisgICAgQVNUOjpGdW5jdGlvbkRlZmluaXRpb24q
IHNoYWRlcjsKKyAgICBFbnRyeVBvaW50SXRlbXMgZW50cnlQb2ludEl0ZW1zOworICAgIEhhc2hN
YXA8QmluZGluZyosIHNpemVfdD4gcmVzb3VyY2VNYXA7Cit9OworCitPcHRpb25hbDxNYXRjaGVk
Q29tcHV0ZVNlbWFudGljcz4gbWF0Y2hTZW1hbnRpY3MoUHJvZ3JhbSYsIENvbXB1dGVQaXBlbGlu
ZURlc2NyaXB0b3ImKTsKKworfSAvLyBuYW1lc3BhY2UgV0hMU0wKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdQVSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggNDBm
YTQ3NGE0NGViOGQyZWFiODBiMDk4NmM1ZWViYmYwZDUwNTExYi4uZDE5OTFlZTRmMjYxMzYzMmIw
MmM0ZWE3ZDc2ZTc0ZTJlYmI5NGQ3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNl
cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTMyNCw2ICszMjQsNyBA
QCBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5jcHAKIE1vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMUmVjdXJzaW9uQ2hlY2tlci5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
VmlzaXRvci5jcHAKK01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU2VtYW50aWNNYXRjaGVyLmNw
cAogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xMaXRlcmFsVHlwZUNoZWNrZXIuY3BwCiBNb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTEhpZ2hab21iaWVGaW5kZXIuY3BwCiBNb2R1bGVzL3dlYmdw
dS9XSExTTC9NZXRhbC9XSExTTFR5cGVOYW1lci5jcHAKQEAgLTM0NSw2ICszNDYsNyBAQCBNb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZS5jcHAK
IE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFR5cGVSZWZlcmVuY2UuY3BwCiBNb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJhbC5jcHAKIE1vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWwuY3BwCitNb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTFByZXBhcmUuY3BwCiBNb2R1bGVzL3dlYmdwdS9XZWJHUFUuY3BwCiBNb2R1
bGVzL3dlYmdwdS9XZWJHUFVCaW5kR3JvdXAuY3BwCiBNb2R1bGVzL3dlYmdwdS9XZWJHUFVBZGFw
dGVyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCmluZGV4IGMzZDhmZGIwNDU2MzQwYzljY2YwNGEwMmY3YWYxNDM5ODg2NDJjNjQuLmY2
ODE0NDMwMmI1YjM5ZTdhMzQ2MzEyOWYwZGQ4YjIzOWUyZmRlOTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEzMzkxLDYgKzEz
MzkxLDEyIEBACiAJCUMyMzRBOUI2MjFFOTJDQzAwMDNDOTg0RCAvKiBXSExTTEludHJpbnNpY3Mu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xJbnRyaW5zaWNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUMyMzRBOUI3MjFFOTJDQzEwMDNDOTg0RCAvKiBXSExTTEludHJpbnNpY3MuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xJbnRyaW5zaWNzLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQzI0NThFNjExRkU4OTc5RTAwNTk0NzU5IC8qIEZvbnRDYWNoZUNvcmVU
ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnRDYWNoZUNvcmVUZXh0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUMyNEE1N0FGMjFGQUQ1M0YwMDRDNkREMSAvKiBXSExTTFBpcGVsaW5l
RGVzY3JpcHRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFBpcGVsaW5lRGVzY3JpcHRvci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjRBNTdCMjIxRkI4RERBMDA0QzZERDEgLyog
V0hMU0xTZW1hbnRpY01hdGNoZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xTZW1hbnRp
Y01hdGNoZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjRBNTdCMzIxRkI4
RERBMDA0QzZERDEgLyogV0hMU0xTZW1hbnRpY01hdGNoZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hM
U0xTZW1hbnRpY01hdGNoZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzI0QTU3
QkEyMUZFQUZFQTAwNEM2REQxIC8qIFdITFNMUHJlcGFyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXSExTTFByZXBhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjRBNTdC
QjIxRkVBRkVBMDA0QzZERDEgLyogV0hMU0xQcmVwYXJlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNM
UHJlcGFyZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjRBNTdCRTIxRkVDNjVD
MDA0QzZERDEgLyogV0hMU0xNYXBwZWRCaW5kaW5ncy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTE1h
cHBlZEJpbmRpbmdzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyNjAxN0ExMUM3
MkRDOTkwMEY3NEExNiAvKiBDU1NGb250RmFjZVNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBDU1NGb250RmFjZVNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUMyNjAxN0EyMUM3MkRDOTkwMEY3NEExNiAvKiBDU1NGb250RmFjZVNldC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NGb250RmFjZVNldC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlDMjgwODMzQzFDNkRCMTk0MDAxNDUxQjYgLyogRm9udEZh
Y2UuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEZvbnRGYWNlLmlkbDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTE3MTY3LDYgKzE3MTczLDcgQEAKIAkJCQkxQ0VDQjNCQjIxRjUx
MUFBMDBGNDQ1NDIgLyogV0hMU0xFbnRyeVBvaW50U2NhZmZvbGRpbmcuaCAqLywKIAkJCQkxQ0VD
QjNBRjIxRjJCOTg0MDBGNDQ1NDIgLyogV0hMU0xGdW5jdGlvbldyaXRlci5jcHAgKi8sCiAJCQkJ
MUNFQ0IzQjIyMUYyQjk4NjAwRjQ0NTQyIC8qIFdITFNMRnVuY3Rpb25Xcml0ZXIuaCAqLywKKwkJ
CQlDMjRBNTdCRTIxRkVDNjVDMDA0QzZERDEgLyogV0hMU0xNYXBwZWRCaW5kaW5ncy5oICovLAog
CQkJCTFDRUNCM0I1MjFGNTBBQzcwMEY0NDU0MiAvKiBXSExTTE1ldGFsQ29kZUdlbmVyYXRvci5j
cHAgKi8sCiAJCQkJMUNFQ0IzQjYyMUY1MEFDNzAwRjQ0NTQyIC8qIFdITFNMTWV0YWxDb2RlR2Vu
ZXJhdG9yLmggKi8sCiAJCQkJMUNFQ0IzQjgyMUY1MEQxMDAwRjQ0NTQyIC8qIFdITFNMTmF0aXZl
RnVuY3Rpb25Xcml0ZXIuY3BwICovLApAQCAtMjU2MDIsNiArMjU2MDksOSBAQAogCQkJCUMyMzRB
OThDMjFFODg4M0UwMDNDOTg0RCAvKiBXSExTTE5hbWVSZXNvbHZlci5oICovLAogCQkJCUMyMUJG
NzM3MjFDRDhBMDIwMDIyNzk3OSAvKiBXSExTTFBhcnNlci5jcHAgKi8sCiAJCQkJQzIxQkY3Mzgy
MUNEOEEwMzAwMjI3OTc5IC8qIFdITFNMUGFyc2VyLmggKi8sCisJCQkJQzI0QTU3QUYyMUZBRDUz
RjAwNEM2REQxIC8qIFdITFNMUGlwZWxpbmVEZXNjcmlwdG9yLmggKi8sCisJCQkJQzI0QTU3QkEy
MUZFQUZFQTAwNEM2REQxIC8qIFdITFNMUHJlcGFyZS5jcHAgKi8sCisJCQkJQzI0QTU3QkIyMUZF
QUZFQTAwNEM2REQxIC8qIFdITFNMUHJlcGFyZS5oICovLAogCQkJCUMyMUJGNzNBMjFDRDhENzAw
MDIyNzk3OSAvKiBXSExTTFByb2dyYW0uaCAqLywKIAkJCQkxQ0EwQzJFMDIxRUVCNUY1MDBBMTE4
NjAgLyogV0hMU0xSZWN1cnNpb25DaGVja2VyLmNwcCAqLywKIAkJCQkxQ0EwQzJERTIxRUVCNUY0
MDBBMTE4NjAgLyogV0hMU0xSZWN1cnNpb25DaGVja2VyLmggKi8sCkBAIC0yNTYxMCw2ICsyNTYy
MCw4IEBACiAJCQkJQzIzNEE5OTkyMUU5MEYyOTAwM0M5ODREIC8qIFdITFNMUmVzb2x2ZU92ZXJs
b2FkSW1wbC5jcHAgKi8sCiAJCQkJQzIzNEE5OTcyMUU5MEYyODAwM0M5ODREIC8qIFdITFNMUmVz
b2x2ZU92ZXJsb2FkSW1wbC5oICovLAogCQkJCUMyMzRBOTlEMjFFOTEwQkQwMDNDOTg0RCAvKiBX
SExTTFJlc29sdmluZ1R5cGUuaCAqLywKKwkJCQlDMjRBNTdCMjIxRkI4RERBMDA0QzZERDEgLyog
V0hMU0xTZW1hbnRpY01hdGNoZXIuY3BwICovLAorCQkJCUMyNEE1N0IzMjFGQjhEREEwMDRDNkRE
MSAvKiBXSExTTFNlbWFudGljTWF0Y2hlci5oICovLAogCQkJCUMyMUJGNzQ1MjFDRDk2OTgwMDIy
Nzk3OSAvKiBXSExTTFN0YW5kYXJkTGlicmFyeS50eHQgKi8sCiAJCQkJMUNFQ0IzQTkyMUYyQjY3
MzAwRjQ0NTQyIC8qIFdITFNMU3RhdGVtZW50QmVoYXZpb3JDaGVja2VyLmNwcCAqLywKIAkJCQkx
Q0VDQjNBODIxRjJCNjczMDBGNDQ1NDIgLyogV0hMU0xTdGF0ZW1lbnRCZWhhdmlvckNoZWNrZXIu
aCAqLywK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>363689</attachid>
            <date>2019-03-05 14:26:46 -0800</date>
            <delta_ts>2019-03-06 14:03:54 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>bug-193877-20190305142646.patch</filename>
            <type>text/plain</type>
            <size>128269</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQyNTExCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWRiZjVlNDRjNDJjNjE3
YjAwNTZlNTBlYWEwODg0NTNjYTkzOTYyNy4uMWYzNTgwZWRjYzk0ZGE2MjEyMWFjNzY3NGZlOWM5
ZDhiMTdkYzc4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg2IEBACisyMDE5LTAzLTA1ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dITFNMXSBQ
YWNrIGFuZCB1bnBhY2sgZGF0YSBhdCBlbnRyeSBwb2ludHMgYW5kIGV4aXQgcG9pbnRzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTM4NzcKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMg
KE9PUFMhKS4KKworICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRW50
cnlQb2ludFNjYWZmb2xkaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6
YXR0cmlidXRlRm9yU2VtYW50aWMpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpF
bnRyeVBvaW50U2NhZmZvbGRpbmc6OkVudHJ5UG9pbnRTY2FmZm9sZGluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpXSExTTDo6TWV0YWw6OkVudHJ5UG9pbnRTY2FmZm9sZGluZzo6bWFwcGVkQmluZEdy
b3VwcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkVudHJ5UG9pbnRT
Y2FmZm9sZGluZzo6cmVzb3VyY2VIZWxwZXJUeXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpXSExT
TDo6TWV0YWw6OkVudHJ5UG9pbnRTY2FmZm9sZGluZzo6cmVzb3VyY2VTaWduYXR1cmUpOgorICAg
ICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpFbnRyeVBvaW50U2NhZmZvbGRpbmc6OmJ1aWx0
SW5zU2lnbmF0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6RW50cnlQb2lu
dFNjYWZmb2xkaW5nOjptYW5nbGVkSW5wdXRQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNM
OjpNZXRhbDo6RW50cnlQb2ludFNjYWZmb2xkaW5nOjptYW5nbGVkT3V0cHV0UGF0aCk6CisgICAg
ICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkVudHJ5UG9pbnRTY2FmZm9sZGluZzo6dW5wYWNr
UmVzb3VyY2VzQW5kTmFtZWRCdWlsdElucyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0
YWw6OlZlcnRleEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6VmVydGV4RW50cnlQb2ludFNjYWZmb2xk
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6VmVydGV4RW50cnlQb2ludFNj
YWZmb2xkaW5nOjpoZWxwZXJUeXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6
OlZlcnRleEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6c2lnbmF0dXJlKToKKyAgICAgICAgKFdlYkNv
cmU6OldITFNMOjpNZXRhbDo6VmVydGV4RW50cnlQb2ludFNjYWZmb2xkaW5nOjp1bnBhY2spOgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpWZXJ0ZXhFbnRyeVBvaW50U2NhZmZvbGRp
bmc6OnBhY2spOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpGcmFnbWVudEVudHJ5
UG9pbnRTY2FmZm9sZGluZzo6RnJhZ21lbnRFbnRyeVBvaW50U2NhZmZvbGRpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpGcmFnbWVudEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6
aGVscGVyVHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpGcmFnbWVudEVu
dHJ5UG9pbnRTY2FmZm9sZGluZzo6c2lnbmF0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNM
OjpNZXRhbDo6RnJhZ21lbnRFbnRyeVBvaW50U2NhZmZvbGRpbmc6OnVucGFjayk6CisgICAgICAg
IChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkZyYWdtZW50RW50cnlQb2ludFNjYWZmb2xkaW5nOjpw
YWNrKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6Q29tcHV0ZUVudHJ5UG9pbnRT
Y2FmZm9sZGluZzo6Q29tcHV0ZUVudHJ5UG9pbnRTY2FmZm9sZGluZyk6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6TWV0YWw6OkNvbXB1dGVFbnRyeVBvaW50U2NhZmZvbGRpbmc6OmhlbHBlclR5
cGVzKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6Q29tcHV0ZUVudHJ5UG9pbnRT
Y2FmZm9sZGluZzo6c2lnbmF0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6
Q29tcHV0ZUVudHJ5UG9pbnRTY2FmZm9sZGluZzo6dW5wYWNrKToKKyAgICAgICAgKFdlYkNvcmU6
OldITFNMOjpNZXRhbDo6Q29tcHV0ZUVudHJ5UG9pbnRTY2FmZm9sZGluZzo6cGFjayk6CisgICAg
ICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkVudHJ5UG9pbnRTY2FmZm9sZGluZzo6aGVscGVy
VHlwZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpFbnRyeVBv
aW50U2NhZmZvbGRpbmc6OnNpZ25hdHVyZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpX
SExTTDo6TWV0YWw6OkVudHJ5UG9pbnRTY2FmZm9sZGluZzo6dW5wYWNrKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6RW50cnlQb2ludFNjYWZmb2xkaW5nOjpwYWNr
KTogRGVsZXRlZC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEVu
dHJ5UG9pbnRTY2FmZm9sZGluZy5oOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpF
bnRyeVBvaW50U2NhZmZvbGRpbmc6OnBhcmFtZXRlclZhcmlhYmxlcyk6CisgICAgICAgICogTW9k
dWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xGdW5jdGlvbldyaXRlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkZ1bmN0aW9uRGVjbGFyYXRpb25Xcml0ZXI6OnRvU3Ry
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6RnVuY3Rpb25EZWNsYXJhdGlv
bldyaXRlcjo6dmlzaXQpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpGdW5jdGlv
bkRlZmluaXRpb25Xcml0ZXI6OkZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpXSExTTDo6TWV0YWw6OkZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6Z2VuZXJhdGVO
ZXh0VmFyaWFibGVOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6RnVuY3Rp
b25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0
YWw6OkZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6Y29uc3RhbnRFeHByZXNzaW9uU3RyaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6UmVuZGVyRnVuY3Rpb25EZWZpbml0aW9u
V3JpdGVyOjpSZW5kZXJGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6V0hMU0w6Ok1ldGFsOjpSZW5kZXJGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnRha2VWZXJ0
ZXhNYXBwZWRCaW5kR3JvdXBzKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6UmVu
ZGVyRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp0YWtlRnJhZ21lbnRNYXBwZWRCaW5kR3JvdXBz
KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6UmVuZGVyRnVuY3Rpb25EZWZpbml0
aW9uV3JpdGVyOjpjcmVhdGVFbnRyeVBvaW50U2NhZmZvbGRpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6V0hMU0w6Ok1ldGFsOjpDb21wdXRlRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjpDb21wdXRl
RnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRh
bDo6Q29tcHV0ZUZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dGFrZU1hcHBlZEJpbmRHcm91cHMp
OgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpDb21wdXRlRnVuY3Rpb25EZWZpbml0
aW9uV3JpdGVyOjpjcmVhdGVFbnRyeVBvaW50U2NhZmZvbGRpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6V0hMU0w6Ok1ldGFsOjpzaGFyZWRNZXRhbEZ1bmN0aW9ucyk6CisgICAgICAgIChXZWJDb3Jl
OjpXSExTTDo6TWV0YWw6Om1ldGFsRnVuY3Rpb25zKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdw
dS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVyLmg6CisgICAgICAgICogTW9kdWxlcy93
ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xNYXBwZWRCaW5kaW5ncy5oOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE1ldGFsQ29kZUdlbmVy
YXRvci5oLgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMTWV0YWxD
b2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6Z2VuZXJh
dGVNZXRhbENvZGVTaGFyZWQpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpnZW5l
cmF0ZU1ldGFsQ29kZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hM
U0xNZXRhbENvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTEludHJpbnNpY3MuaDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpJbnRyaW5zaWNzOjpm
bG9hdDJUeXBlIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBp
cGVsaW5lRGVzY3JpcHRvci5oOiBBZGRlZC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTFByZXBhcmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpwcmVw
YXJlU2hhcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpwcmVwYXJlKToKKyAgICAgICAg
KiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuaDogQ29waWVkIGZyb20gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xNZXRhbENvZGVHZW5lcmF0
b3IuaC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFNlbWFudGljTWF0Y2hl
ci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OmZpbmRFbnRyeVBvaW50KToK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjptYXRjaE1vZGUpOgorICAgICAgICAoV2ViQ29yZTo6
V0hMU0w6Om1hdGNoUmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjptYXRjaElu
cHV0c091dHB1dHMpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OmlzQWNjZXB0YWJsZUZvcm1h
dCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6bWF0Y2hWZXJ0ZXhBdHRyaWJ1dGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OldITFNMOjptYXRjaENvbG9yQXR0YWNobWVudHMpOgorICAgICAgICAo
V2ViQ29yZTo6V0hMU0w6Om1hdGNoRGVwdGhBdHRhY2htZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OldITFNMOjptYXRjaFNlbWFudGljcyk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xTZW1hbnRpY01hdGNoZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xFbnRyeVBvaW50U2NhZmZvbGRpbmcuY3BwLgorICAg
ICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKwogMjAxOS0wMy0wNSAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgog
CiAgICAgICAgIFtDb250ZW50Q2hhbmdlT2JzZXJ2ZXJdIFNlbmQgY29udGVudCBjaGFuZ2Ugbm90
aWZpY2F0aW9uIHRocm91Z2ggYWRqdXN0T2JzZXJ2ZWRTdGF0ZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xFbnRyeVBvaW50U2NhZmZv
bGRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hM
U0xFbnRyeVBvaW50U2NhZmZvbGRpbmcuY3BwCmluZGV4IDQ4ZmNmMjM1ZjI1MTY0MGM1YTc4MjIx
MGU5ZDI2ODRmNGVlM2MwN2QuLjAzNTI4NGNhNGZjZjMyZjg3NjgxMGJiNzM3MmZiODE1MmEzZTdh
MTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFs
L1dITFNMRW50cnlQb2ludFNjYWZmb2xkaW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEVudHJ5UG9pbnRTY2FmZm9sZGluZy5jcHAKQEAg
LTI4LDcgKzI4LDE3IEBACiAKICNpZiBFTkFCTEUoV0VCR1BVKQogCisjaW5jbHVkZSAiV0hMU0xC
dWlsdEluU2VtYW50aWMuaCIKKyNpbmNsdWRlICJXSExTTEZ1bmN0aW9uRGVmaW5pdGlvbi5oIgog
I2luY2x1ZGUgIldITFNMR2F0aGVyRW50cnlQb2ludEl0ZW1zLmgiCisjaW5jbHVkZSAiV0hMU0xQ
aXBlbGluZURlc2NyaXB0b3IuaCIKKyNpbmNsdWRlICJXSExTTFJlc291cmNlU2VtYW50aWMuaCIK
KyNpbmNsdWRlICJXSExTTFN0YWdlSW5PdXRTZW1hbnRpYy5oIgorI2luY2x1ZGUgIldITFNMU3Ry
dWN0dXJlRGVmaW5pdGlvbi5oIgorI2luY2x1ZGUgIldITFNMVHlwZU5hbWVyLmgiCisjaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0Nv
bmNhdGVuYXRlLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJz
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzYsMzUgKzQ2LDQ3NCBAQCBuYW1lc3Bh
Y2UgV0hMU0wgewogCiBuYW1lc3BhY2UgTWV0YWwgewogCi1FbnRyeVBvaW50U2NhZmZvbGRpbmc6
OkVudHJ5UG9pbnRTY2FmZm9sZGluZyhBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25E
ZWZpbml0aW9uLCBJbnRyaW5zaWNzJiBpbnRyaW5zaWNzKQotICAgIDogbV9mdW5jdGlvbkRlZmlu
aXRpb24oJmZ1bmN0aW9uRGVmaW5pdGlvbikKLSAgICAsIG1faW50cmluc2ljcygmaW50cmluc2lj
cykKK3N0YXRpYyBTdHJpbmcgYXR0cmlidXRlRm9yU2VtYW50aWMoQVNUOjpCdWlsdEluU2VtYW50
aWMmIGJ1aWx0SW5TZW1hbnRpYykKIHsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCi0g
ICAgZ2F0aGVyRW50cnlQb2ludEl0ZW1zKCptX2ludHJpbnNpY3MsICptX2Z1bmN0aW9uRGVmaW5p
dGlvbik7CisgICAgc3dpdGNoIChidWlsdEluU2VtYW50aWMudmFyaWFibGUoKSkgeworICAgIGNh
c2UgQVNUOjpCdWlsdEluU2VtYW50aWM6OlZhcmlhYmxlOjpTVkluc3RhbmNlSUQ6CisgICAgICAg
IHJldHVybiAiW1tpbnN0YW5jZV9pZF1dIl9zdHI7CisgICAgY2FzZSBBU1Q6OkJ1aWx0SW5TZW1h
bnRpYzo6VmFyaWFibGU6OlNWVmVydGV4SUQ6CisgICAgICAgIHJldHVybiAiW1t2ZXJ0ZXhfaWRd
XSJfc3RyOworICAgIGNhc2UgQVNUOjpCdWlsdEluU2VtYW50aWM6OlZhcmlhYmxlOjpQU2l6ZToK
KyAgICAgICAgcmV0dXJuICJbW3BvaW50X3NpemVdXSJfc3RyOworICAgIGNhc2UgQVNUOjpCdWls
dEluU2VtYW50aWM6OlZhcmlhYmxlOjpTVlBvc2l0aW9uOgorICAgICAgICByZXR1cm4gIltbcG9z
aXRpb25dXSJfc3RyOworICAgIGNhc2UgQVNUOjpCdWlsdEluU2VtYW50aWM6OlZhcmlhYmxlOjpT
VklzRnJvbnRGYWNlOgorICAgICAgICByZXR1cm4gIltbZnJvbnRfZmFjaW5nXV0iX3N0cjsKKyAg
ICBjYXNlIEFTVDo6QnVpbHRJblNlbWFudGljOjpWYXJpYWJsZTo6U1ZTYW1wbGVJbmRleDoKKyAg
ICAgICAgcmV0dXJuICJbW3NhbXBsZV9pZF1dIl9zdHI7CisgICAgY2FzZSBBU1Q6OkJ1aWx0SW5T
ZW1hbnRpYzo6VmFyaWFibGU6OlNWSW5uZXJDb3ZlcmFnZToKKyAgICAgICAgcmV0dXJuICJbW3Nh
bXBsZV9tYXNrXV0iX3N0cjsKKyAgICBjYXNlIEFTVDo6QnVpbHRJblNlbWFudGljOjpWYXJpYWJs
ZTo6U1ZUYXJnZXQ6CisgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCJbW2NvbG9yKCIsICpidWls
dEluU2VtYW50aWMudGFyZ2V0SW5kZXgoKSwgIildXSIpOworICAgIGNhc2UgQVNUOjpCdWlsdElu
U2VtYW50aWM6OlZhcmlhYmxlOjpTVkRlcHRoOgorICAgICAgICByZXR1cm4gIltbZGVwdGgoYW55
KV1dIl9zdHI7CisgICAgY2FzZSBBU1Q6OkJ1aWx0SW5TZW1hbnRpYzo6VmFyaWFibGU6OlNWQ292
ZXJhZ2U6CisgICAgICAgIHJldHVybiAiW1tzYW1wbGVfbWFza11dIl9zdHI7CisgICAgY2FzZSBB
U1Q6OkJ1aWx0SW5TZW1hbnRpYzo6VmFyaWFibGU6OlNWRGlzcGF0Y2hUaHJlYWRJRDoKKyAgICAg
ICAgcmV0dXJuICJbW3RocmVhZF9wb3NpdGlvbl9pbl9ncmlkXV0iX3N0cjsKKyAgICBjYXNlIEFT
VDo6QnVpbHRJblNlbWFudGljOjpWYXJpYWJsZTo6U1ZHcm91cElEOgorICAgICAgICByZXR1cm4g
IltbdGhyZWFkZ3JvdXBfcG9zaXRpb25faW5fZ3JpZF1dIl9zdHI7CisgICAgY2FzZSBBU1Q6OkJ1
aWx0SW5TZW1hbnRpYzo6VmFyaWFibGU6OlNWR3JvdXBJbmRleDoKKyAgICAgICAgcmV0dXJuICJb
W3RocmVhZF9pbmRleF9pbl90aHJlYWRncm91cF1dIl9zdHI7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgQVNTRVJUKGJ1aWx0SW5TZW1hbnRpYy52YXJpYWJsZSgpID09IEFTVDo6QnVpbHRJblNlbWFu
dGljOjpWYXJpYWJsZTo6U1ZHcm91cFRocmVhZElEKTsKKyAgICAgICAgcmV0dXJuICJbW3RocmVh
ZF9wb3NpdGlvbl9pbl90aHJlYWRncm91cF1dIl9zdHI7CisgICAgfQogfQogCi1TdHJpbmcgRW50
cnlQb2ludFNjYWZmb2xkaW5nOjpoZWxwZXJUeXBlcygpCitzdGF0aWMgU3RyaW5nIGF0dHJpYnV0
ZUZvclNlbWFudGljKEFTVDo6U2VtYW50aWMmIHNlbWFudGljKQogewotICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQgdGhpcy4KLSAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgaWYgKFdURjo6aG9sZHNf
YWx0ZXJuYXRpdmU8QVNUOjpCdWlsdEluU2VtYW50aWM+KHNlbWFudGljKSkKKyAgICAgICAgcmV0
dXJuIGF0dHJpYnV0ZUZvclNlbWFudGljKFdURjo6Z2V0PEFTVDo6QnVpbHRJblNlbWFudGljPihz
ZW1hbnRpYykpOworICAgIGF1dG8mIHN0YWdlSW5PdXRTZW1hbnRpYyA9IFdURjo6Z2V0PEFTVDo6
U3RhZ2VJbk91dFNlbWFudGljPihzZW1hbnRpYyk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoIltb
dXNlcigiLCBzdGFnZUluT3V0U2VtYW50aWMuaW5kZXgoKSwgIildXSIpOwogfQogCi1TdHJpbmcg
RW50cnlQb2ludFNjYWZmb2xkaW5nOjpzaWduYXR1cmUoKQorRW50cnlQb2ludFNjYWZmb2xkaW5n
OjpFbnRyeVBvaW50U2NhZmZvbGRpbmcoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9u
RGVmaW5pdGlvbiwgSW50cmluc2ljcyYgaW50cmluc2ljcywgVHlwZU5hbWVyJiB0eXBlTmFtZXIs
IEVudHJ5UG9pbnRJdGVtcyYgZW50cnlQb2ludEl0ZW1zLCBIYXNoTWFwPEJpbmRpbmcqLCBzaXpl
X3Q+JiByZXNvdXJjZU1hcCwgTGF5b3V0JiBsYXlvdXQsIHN0ZDo6ZnVuY3Rpb248U3RyaW5nKCk+
JiYgZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKQorICAgIDogbV9mdW5jdGlvbkRlZmluaXRpb24o
ZnVuY3Rpb25EZWZpbml0aW9uKQorICAgICwgbV9pbnRyaW5zaWNzKGludHJpbnNpY3MpCisgICAg
LCBtX3R5cGVOYW1lcih0eXBlTmFtZXIpCisgICAgLCBtX2VudHJ5UG9pbnRJdGVtcyhlbnRyeVBv
aW50SXRlbXMpCisgICAgLCBtX3Jlc291cmNlTWFwKHJlc291cmNlTWFwKQorICAgICwgbV9sYXlv
dXQobGF5b3V0KQorICAgICwgbV9nZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoZ2VuZXJhdGVOZXh0
VmFyaWFibGVOYW1lKQogewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KLSAgICByZXR1
cm4gU3RyaW5nKCk7CisgICAgdW5zaWduZWQgYXJndW1lbnRCdWZmZXJJbmRleCA9IDA7CisgICAg
bV9uYW1lZEJpbmRHcm91cHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX2xheW91dC5zaXplKCkp
OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9sYXlvdXQuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgTmFtZWRCaW5kR3JvdXAgbmFtZWRCaW5kR3JvdXA7CisgICAgICAgIG5hbWVkQmluZEdy
b3VwLnN0cnVjdE5hbWUgPSBtX3R5cGVOYW1lci5nZW5lcmF0ZU5leHRUeXBlTmFtZSgpOworICAg
ICAgICBuYW1lZEJpbmRHcm91cC52YXJpYWJsZU5hbWUgPSBtX2dlbmVyYXRlTmV4dFZhcmlhYmxl
TmFtZSgpOworICAgICAgICBuYW1lZEJpbmRHcm91cC5hcmd1bWVudEJ1ZmZlckluZGV4ID0gYXJn
dW1lbnRCdWZmZXJJbmRleCsrOworICAgICAgICBuYW1lZEJpbmRHcm91cC5uYW1lZEJpbmRpbmdz
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9sYXlvdXRbaV0uYmluZGluZ3Muc2l6ZSgpKTsKKyAg
ICAgICAgdW5zaWduZWQgaW5kZXggPSAwOworICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8
IG1fbGF5b3V0W2ldLmJpbmRpbmdzLnNpemUoKTsgKytqKSB7CisgICAgICAgICAgICBOYW1lZEJp
bmRpbmcgbmFtZWRCaW5kaW5nOworICAgICAgICAgICAgbmFtZWRCaW5kaW5nLmVsZW1lbnROYW1l
ID0gbV90eXBlTmFtZXIuZ2VuZXJhdGVOZXh0U3RydWN0dXJlRWxlbWVudE5hbWUoKTsKKyAgICAg
ICAgICAgIG5hbWVkQmluZGluZy5pbmRleCA9IGluZGV4Kys7CisgICAgICAgICAgICBuYW1lZEJp
bmRHcm91cC5uYW1lZEJpbmRpbmdzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKG5hbWVkQmluZGlu
ZykpOworICAgICAgICB9CisgICAgICAgIG1fbmFtZWRCaW5kR3JvdXBzLnVuY2hlY2tlZEFwcGVu
ZChXVEZNb3ZlKG5hbWVkQmluZEdyb3VwKSk7CisgICAgfQorCisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBtX2VudHJ5UG9pbnRJdGVtcy5pbnB1dHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
aWYgKCFXVEY6OmhvbGRzX2FsdGVybmF0aXZlPEFTVDo6QnVpbHRJblNlbWFudGljPigqbV9lbnRy
eVBvaW50SXRlbXMuaW5wdXRzW2ldLnNlbWFudGljKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICBOYW1lZEJ1aWx0SW4gbmFtZWRCdWlsdEluOworICAgICAgICBuYW1lZEJ1aWx0SW4u
aW5kZXhJbkVudHJ5UG9pbnRJdGVtcyA9IGk7CisgICAgICAgIG5hbWVkQnVpbHRJbi52YXJpYWJs
ZU5hbWUgPSBtX2dlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOworICAgICAgICBtX25hbWVkQnVp
bHRJbnMuYXBwZW5kKFdURk1vdmUobmFtZWRCdWlsdEluKSk7CisgICAgfQorCisgICAgbV9wYXJh
bWV0ZXJWYXJpYWJsZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX2Z1bmN0aW9uRGVmaW5pdGlv
bi5wYXJhbWV0ZXJzKCkuc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZnVu
Y3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCk7ICsraSkKKyAgICAgICAgbV9wYXJh
bWV0ZXJWYXJpYWJsZXMudW5jaGVja2VkQXBwZW5kKG1fZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1l
KCkpOwogfQogCi1TdHJpbmcgRW50cnlQb2ludFNjYWZmb2xkaW5nOjp1bnBhY2soKQorTWFwcGVk
QmluZEdyb3VwcyBFbnRyeVBvaW50U2NhZmZvbGRpbmc6Om1hcHBlZEJpbmRHcm91cHMoKSBjb25z
dAogewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KLSAgICByZXR1cm4gU3RyaW5nKCk7
CisgICAgTWFwcGVkQmluZEdyb3VwcyByZXN1bHQ7CisgICAgcmVzdWx0LnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkobV9sYXlvdXQuc2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8mIG5hbWVkQmluZEdyb3Vw
IDogbV9uYW1lZEJpbmRHcm91cHMpIHsKKyAgICAgICAgTWFwcGVkQmluZEdyb3VwIG1hcHBlZEJp
bmRHcm91cDsKKyAgICAgICAgbWFwcGVkQmluZEdyb3VwLmFyZ3VtZW50QnVmZmVySW5kZXggPSBu
YW1lZEJpbmRHcm91cC5hcmd1bWVudEJ1ZmZlckluZGV4OworICAgICAgICBtYXBwZWRCaW5kR3Jv
dXAuYmluZGluZ0luZGljZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShuYW1lZEJpbmRHcm91cC5u
YW1lZEJpbmRpbmdzLnNpemUoKSk7CisgICAgICAgIGZvciAoYXV0byYgbmFtZWRCaW5kaW5nIDog
bmFtZWRCaW5kR3JvdXAubmFtZWRCaW5kaW5ncykKKyAgICAgICAgICAgIG1hcHBlZEJpbmRHcm91
cC5iaW5kaW5nSW5kaWNlcy51bmNoZWNrZWRBcHBlbmQobmFtZWRCaW5kaW5nLmluZGV4KTsKKyAg
ICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKG1hcHBlZEJpbmRHcm91cCkpOwor
ICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitTdHJpbmcgRW50cnlQb2ludFNjYWZmb2xk
aW5nOjpyZXNvdXJjZUhlbHBlclR5cGVzKCkKK3sKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1
aWxkZXI7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2xheW91dC5zaXplKCk7ICsraSkg
eworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJzdHJ1Y3QgIiwgbV9u
YW1lZEJpbmRHcm91cHNbaV0uc3RydWN0TmFtZSwgIiB7XG4iKSk7CisgICAgICAgIGZvciAoc2l6
ZV90IGogPSAwOyBqIDwgbV9sYXlvdXRbaV0uYmluZGluZ3Muc2l6ZSgpOyArK2opIHsKKyAgICAg
ICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX3Jlc291cmNlTWFwLmZpbmQoJm1fbGF5b3V0W2ldLmJp
bmRpbmdzW2pdKTsKKyAgICAgICAgICAgIGlmIChpdGVyYXRvciA9PSBtX3Jlc291cmNlTWFwLmVu
ZCgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgYXV0byBtYW5nbGVk
VHlwZU5hbWUgPSBtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm1fZW50cnlQb2ludEl0
ZW1zLmlucHV0c1tpdGVyYXRvci0+dmFsdWVdLnVubmFtZWRUeXBlKTsKKyAgICAgICAgICAgIGF1
dG8gZWxlbWVudE5hbWUgPSBtX25hbWVkQmluZEdyb3Vwc1tpXS5uYW1lZEJpbmRpbmdzW2pdLmVs
ZW1lbnROYW1lOworICAgICAgICAgICAgYXV0byBpbmRleCA9IG1fbmFtZWRCaW5kR3JvdXBzW2ld
Lm5hbWVkQmluZGluZ3Nbal0uaW5kZXg7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZChtYWtlU3RyaW5nKCIgICAgIiwgbWFuZ2xlZFR5cGVOYW1lLCAnICcsIGVsZW1lbnROYW1lLCAi
IFtbaWQoIiwgaW5kZXgsICIpXV07XG4iKSk7CisgICAgICAgIH0KKyAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQoIn1cblxuIik7CisgICAgfQorICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRv
U3RyaW5nKCk7Cit9CisKK09wdGlvbmFsPFN0cmluZz4gRW50cnlQb2ludFNjYWZmb2xkaW5nOjpy
ZXNvdXJjZVNpZ25hdHVyZSgpCit7CisgICAgaWYgKCFtX2xheW91dC5zaXplKCkpCisgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2xheW91dC5zaXplKCk7ICsraSkgeworICAg
ICAgICBpZiAoaSkKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIsICIpOworICAg
ICAgICBhdXRvJiBuYW1lZEJpbmRHcm91cCA9IG1fbmFtZWRCaW5kR3JvdXBzW2ldOworICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG5hbWVkQmluZEdyb3VwLnN0cnVjdE5h
bWUsICImICIsIG5hbWVkQmluZEdyb3VwLnZhcmlhYmxlTmFtZSwgIiBbW2J1ZmZlcigiLCBuYW1l
ZEJpbmRHcm91cC5hcmd1bWVudEJ1ZmZlckluZGV4LCAiKV1dIikpOworICAgIH0KKyAgICByZXR1
cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworfQorCitPcHRpb25hbDxTdHJpbmc+IEVudHJ5
UG9pbnRTY2FmZm9sZGluZzo6YnVpbHRJbnNTaWduYXR1cmUoKQoreworICAgIGlmICghbV9uYW1l
ZEJ1aWx0SW5zLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIFN0
cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
bmFtZWRCdWlsdElucy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoaSkKKyAgICAgICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIsICIpOworICAgICAgICBhdXRvJiBuYW1lZEJ1aWx0SW4g
PSBtX25hbWVkQnVpbHRJbnNbaV07CisgICAgICAgIGF1dG8mIGl0ZW0gPSBtX2VudHJ5UG9pbnRJ
dGVtcy5pbnB1dHNbbmFtZWRCdWlsdEluLmluZGV4SW5FbnRyeVBvaW50SXRlbXNdOworICAgICAg
ICBhdXRvJiBidWlsdEluU2VtYW50aWMgPSBXVEY6OmdldDxBU1Q6OkJ1aWx0SW5TZW1hbnRpYz4o
Kml0ZW0uc2VtYW50aWMpOworICAgICAgICBhdXRvIG1hbmdsZWRUeXBlTmFtZSA9IG1fdHlwZU5h
bWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqaXRlbS51bm5hbWVkVHlwZSk7CisgICAgICAgIGF1dG8g
dmFyaWFibGVOYW1lID0gbmFtZWRCdWlsdEluLnZhcmlhYmxlTmFtZTsKKyAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtYW5nbGVkVHlwZU5hbWUsICcgJywgdmFyaWFibGVO
YW1lLCAnICcsIGF0dHJpYnV0ZUZvclNlbWFudGljKGJ1aWx0SW5TZW1hbnRpYykpKTsKKyAgICB9
CisgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKK30KKworU3RyaW5nIEVudHJ5
UG9pbnRTY2FmZm9sZGluZzo6bWFuZ2xlZElucHV0UGF0aChWZWN0b3I8U3RyaW5nPiYgcGF0aCkK
K3sKKyAgICBBU1NFUlQoIXBhdGguaXNFbXB0eSgpKTsKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmlu
Z0J1aWxkZXI7CisgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgIEFTVDo6U3RydWN0dXJlRGVm
aW5pdGlvbiogc3RydWN0dXJlRGVmaW5pdGlvbiA9IG51bGxwdHI7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtX2Z1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgaWYgKG1fZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVtpXS5uYW1l
KCkgPT0gcGF0aFswXSkgeworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobV9wYXJh
bWV0ZXJWYXJpYWJsZXNbaV0pOworICAgICAgICAgICAgYXV0byYgdW5pZnlOb2RlID0gbV9mdW5j
dGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpW2ldLnR5cGUoKS0+dW5pZnlOb2RlKCk7CisgICAg
ICAgICAgICBpZiAoaXM8QVNUOjpOYW1lZFR5cGU+KHVuaWZ5Tm9kZSkpIHsKKyAgICAgICAgICAg
ICAgICBhdXRvJiBuYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4odW5pZnlOb2Rl
KTsKKyAgICAgICAgICAgICAgICBpZiAoaXM8QVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uPihuYW1l
ZFR5cGUpKQorICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVEZWZpbml0aW9uID0gJmRvd25j
YXN0PEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbj4obmFtZWRUeXBlKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgfQorICAgIEFTU0VSVChmb3VuZCk7CisgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBw
YXRoLnNpemUoKTsgKytpKSB7CisgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmVEZWZpbml0aW9uKTsK
KyAgICAgICAgYXV0byogbmV4dCA9IHN0cnVjdHVyZURlZmluaXRpb24tPmZpbmQocGF0aFtpXSk7
CisgICAgICAgIEFTU0VSVChuZXh0KTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFr
ZVN0cmluZygnLicsIG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yU3RydWN0dXJlRWxlbWVudCgq
bmV4dCkpKTsKKyAgICAgICAgc3RydWN0dXJlRGVmaW5pdGlvbiA9IG51bGxwdHI7CisgICAgICAg
IGF1dG8mIHVuaWZ5Tm9kZSA9IG5leHQtPnR5cGUoKS51bmlmeU5vZGUoKTsKKyAgICAgICAgaWYg
KGlzPEFTVDo6TmFtZWRUeXBlPih1bmlmeU5vZGUpKSB7CisgICAgICAgICAgICBhdXRvJiBuYW1l
ZFR5cGUgPSBkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4odW5pZnlOb2RlKTsKKyAgICAgICAgICAg
IGlmIChpczxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24+KG5hbWVkVHlwZSkpCisgICAgICAgICAg
ICAgICAgc3RydWN0dXJlRGVmaW5pdGlvbiA9ICZkb3duY2FzdDxBU1Q6OlN0cnVjdHVyZURlZmlu
aXRpb24+KG5hbWVkVHlwZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gc3RyaW5n
QnVpbGRlci50b1N0cmluZygpOworfQorCitTdHJpbmcgRW50cnlQb2ludFNjYWZmb2xkaW5nOjpt
YW5nbGVkT3V0cHV0UGF0aChWZWN0b3I8U3RyaW5nPiYgcGF0aCkKK3sKKyAgICBTdHJpbmdCdWls
ZGVyIHN0cmluZ0J1aWxkZXI7CisKKyAgICBBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24qIHN0cnVj
dHVyZURlZmluaXRpb24gPSBudWxscHRyOworICAgIGF1dG8mIHVuaWZ5Tm9kZSA9IG1fZnVuY3Rp
b25EZWZpbml0aW9uLnR5cGUoKS51bmlmeU5vZGUoKTsKKyAgICBBU1NFUlQoaXM8QVNUOjpOYW1l
ZFR5cGU+KHVuaWZ5Tm9kZSkpOworICAgIGF1dG8mIG5hbWVkVHlwZSA9IGRvd25jYXN0PEFTVDo6
TmFtZWRUeXBlPih1bmlmeU5vZGUpOworICAgIEFTU0VSVChpczxBU1Q6OlN0cnVjdHVyZURlZmlu
aXRpb24+KG5hbWVkVHlwZSkpOworICAgIHN0cnVjdHVyZURlZmluaXRpb24gPSAmZG93bmNhc3Q8
QVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uPihuYW1lZFR5cGUpOworICAgIGZvciAoYXV0byYgY29t
cG9uZW50IDogcGF0aCkgeworICAgICAgICBBU1NFUlQoc3RydWN0dXJlRGVmaW5pdGlvbik7Cisg
ICAgICAgIGF1dG8qIG5leHQgPSBzdHJ1Y3R1cmVEZWZpbml0aW9uLT5maW5kKGNvbXBvbmVudCk7
CisgICAgICAgIEFTU0VSVChuZXh0KTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFr
ZVN0cmluZygnLicsIG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yU3RydWN0dXJlRWxlbWVudCgq
bmV4dCkpKTsKKyAgICAgICAgc3RydWN0dXJlRGVmaW5pdGlvbiA9IG51bGxwdHI7CisgICAgICAg
IGF1dG8mIHVuaWZ5Tm9kZSA9IG5leHQtPnR5cGUoKS51bmlmeU5vZGUoKTsKKyAgICAgICAgaWYg
KGlzPEFTVDo6TmFtZWRUeXBlPih1bmlmeU5vZGUpKSB7CisgICAgICAgICAgICBhdXRvJiBuYW1l
ZFR5cGUgPSBkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4odW5pZnlOb2RlKTsKKyAgICAgICAgICAg
IGlmIChpczxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24+KG5hbWVkVHlwZSkpCisgICAgICAgICAg
ICAgICAgc3RydWN0dXJlRGVmaW5pdGlvbiA9ICZkb3duY2FzdDxBU1Q6OlN0cnVjdHVyZURlZmlu
aXRpb24+KG5hbWVkVHlwZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gc3RyaW5n
QnVpbGRlci50b1N0cmluZygpOworfQorCitTdHJpbmcgRW50cnlQb2ludFNjYWZmb2xkaW5nOjp1
bnBhY2tSZXNvdXJjZXNBbmROYW1lZEJ1aWx0SW5zKCkKK3sKKyAgICBTdHJpbmdCdWlsZGVyIHN0
cmluZ0J1aWxkZXI7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2Z1bmN0aW9uRGVmaW5p
dGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpOyArK2kpCisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKG1ha2VTdHJpbmcobV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCptX2Z1bmN0aW9u
RGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbaV0udHlwZSgpKSwgJyAnLCBtX3BhcmFtZXRlclZhcmlh
Ymxlc1tpXSwgIjtcbiIpKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9sYXlvdXQu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgYXV0byB2YXJpYWJsZU5hbWUgPSBtX25hbWVkQmluZEdy
b3Vwc1tpXS52YXJpYWJsZU5hbWU7CisgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgbV9s
YXlvdXRbaV0uYmluZGluZ3Muc2l6ZSgpOyArK2opIHsKKyAgICAgICAgICAgIGF1dG8gaXRlcmF0
b3IgPSBtX3Jlc291cmNlTWFwLmZpbmQoJm1fbGF5b3V0W2ldLmJpbmRpbmdzW2pdKTsKKyAgICAg
ICAgICAgIGlmIChpdGVyYXRvciA9PSBtX3Jlc291cmNlTWFwLmVuZCgpKQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgYXV0byYgcGF0aCA9IG1fZW50cnlQb2ludEl0ZW1z
LmlucHV0c1tpdGVyYXRvci0+dmFsdWVdLnBhdGg7CisgICAgICAgICAgICBhdXRvIGVsZW1lbnRO
YW1lID0gbV9uYW1lZEJpbmRHcm91cHNbaV0ubmFtZWRCaW5kaW5nc1tqXS5lbGVtZW50TmFtZTsK
KyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWFuZ2xlZElucHV0
UGF0aChwYXRoKSwgIiA9ICIsIHZhcmlhYmxlTmFtZSwgJy4nLCBlbGVtZW50TmFtZSwgIjtcbiIp
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoYXV0byYgbmFtZWRCdWlsdEluIDogbV9u
YW1lZEJ1aWx0SW5zKSB7CisgICAgICAgIGF1dG8mIHBhdGggPSBtX2VudHJ5UG9pbnRJdGVtcy5p
bnB1dHNbbmFtZWRCdWlsdEluLmluZGV4SW5FbnRyeVBvaW50SXRlbXNdLnBhdGg7CisgICAgICAg
IGF1dG8mIHZhcmlhYmxlTmFtZSA9IG5hbWVkQnVpbHRJbi52YXJpYWJsZU5hbWU7CisgICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWFuZ2xlZElucHV0UGF0aChwYXRoKSwg
IiA9ICIsIHZhcmlhYmxlTmFtZSwgIjtcbiIpKTsKKyAgICB9CisgICAgcmV0dXJuIHN0cmluZ0J1
aWxkZXIudG9TdHJpbmcoKTsKK30KKworVmVydGV4RW50cnlQb2ludFNjYWZmb2xkaW5nOjpWZXJ0
ZXhFbnRyeVBvaW50U2NhZmZvbGRpbmcoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9u
RGVmaW5pdGlvbiwgSW50cmluc2ljcyYgaW50cmluc2ljcywgVHlwZU5hbWVyJiB0eXBlTmFtZXIs
IEVudHJ5UG9pbnRJdGVtcyYgZW50cnlQb2ludEl0ZW1zLCBIYXNoTWFwPEJpbmRpbmcqLCBzaXpl
X3Q+JiByZXNvdXJjZU1hcCwgTGF5b3V0JiBsYXlvdXQsIHN0ZDo6ZnVuY3Rpb248U3RyaW5nKCk+
JiYgZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lLCBIYXNoTWFwPFZlcnRleEF0dHJpYnV0ZSosIHNp
emVfdD4mIG1hdGNoZWRWZXJ0ZXhBdHRyaWJ1dGVzKQorICAgIDogRW50cnlQb2ludFNjYWZmb2xk
aW5nKGZ1bmN0aW9uRGVmaW5pdGlvbiwgaW50cmluc2ljcywgdHlwZU5hbWVyLCBlbnRyeVBvaW50
SXRlbXMsIHJlc291cmNlTWFwLCBsYXlvdXQsIFdURk1vdmUoZ2VuZXJhdGVOZXh0VmFyaWFibGVO
YW1lKSkKKyAgICAsIG1fbWF0Y2hlZFZlcnRleEF0dHJpYnV0ZXMobWF0Y2hlZFZlcnRleEF0dHJp
YnV0ZXMpCisgICAgLCBtX3N0YWdlSW5TdHJ1Y3ROYW1lKHR5cGVOYW1lci5nZW5lcmF0ZU5leHRU
eXBlTmFtZSgpKQorICAgICwgbV9yZXR1cm5TdHJ1Y3ROYW1lKHR5cGVOYW1lci5nZW5lcmF0ZU5l
eHRUeXBlTmFtZSgpKQorICAgICwgbV9zdGFnZUluUGFyYW1ldGVyTmFtZShtX2dlbmVyYXRlTmV4
dFZhcmlhYmxlTmFtZSgpKQoreworICAgIG1fbmFtZWRTdGFnZUlucy5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KG1fbWF0Y2hlZFZlcnRleEF0dHJpYnV0ZXMuc2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8m
IGtleVZhbHVlUGFpciA6IG1fbWF0Y2hlZFZlcnRleEF0dHJpYnV0ZXMpIHsKKyAgICAgICAgTmFt
ZWRTdGFnZUluIG5hbWVkU3RhZ2VJbjsKKyAgICAgICAgbmFtZWRTdGFnZUluLmluZGV4SW5FbnRy
eVBvaW50SXRlbXMgPSBrZXlWYWx1ZVBhaXIudmFsdWU7CisgICAgICAgIG5hbWVkU3RhZ2VJbi5l
bGVtZW50TmFtZSA9IG1fdHlwZU5hbWVyLmdlbmVyYXRlTmV4dFN0cnVjdHVyZUVsZW1lbnROYW1l
KCk7CisgICAgICAgIG5hbWVkU3RhZ2VJbi5hdHRyaWJ1dGVJbmRleCA9IGtleVZhbHVlUGFpci5r
ZXktPm5hbWU7CisgICAgICAgIG1fbmFtZWRTdGFnZUlucy51bmNoZWNrZWRBcHBlbmQoV1RGTW92
ZShuYW1lZFN0YWdlSW4pKTsKKyAgICB9CisKKyAgICBtX25hbWVkT3V0cHV0cy5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KG1fZW50cnlQb2ludEl0ZW1zLm91dHB1dHMuc2l6ZSgpKTsKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fZW50cnlQb2ludEl0ZW1zLm91dHB1dHMuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgTmFtZWRPdXRwdXQgbmFtZWRPdXRwdXQ7CisgICAgICAgIG5hbWVkT3V0cHV0
LmVsZW1lbnROYW1lID0gbV90eXBlTmFtZXIuZ2VuZXJhdGVOZXh0U3RydWN0dXJlRWxlbWVudE5h
bWUoKTsKKyAgICAgICAgbV9uYW1lZE91dHB1dHMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUobmFt
ZWRPdXRwdXQpKTsKKyAgICB9Cit9CisKK1N0cmluZyBWZXJ0ZXhFbnRyeVBvaW50U2NhZmZvbGRp
bmc6OmhlbHBlclR5cGVzKCkKK3sKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CisK
KyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJzdHJ1Y3QgIiwgbV9zdGFnZUlu
U3RydWN0TmFtZSwgIiB7XG4iKSk7CisgICAgZm9yIChhdXRvJiBuYW1lZFN0YWdlSW4gOiBtX25h
bWVkU3RhZ2VJbnMpIHsKKyAgICAgICAgYXV0byBtYW5nbGVkVHlwZU5hbWUgPSBtX3R5cGVOYW1l
ci5tYW5nbGVkTmFtZUZvclR5cGUoKm1fZW50cnlQb2ludEl0ZW1zLmlucHV0c1tuYW1lZFN0YWdl
SW4uaW5kZXhJbkVudHJ5UG9pbnRJdGVtc10udW5uYW1lZFR5cGUpOworICAgICAgICBhdXRvIGVs
ZW1lbnROYW1lID0gbmFtZWRTdGFnZUluLmVsZW1lbnROYW1lOworICAgICAgICBhdXRvIGF0dHJp
YnV0ZUluZGV4ID0gbmFtZWRTdGFnZUluLmVsZW1lbnROYW1lOworICAgICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIgICAgIiwgbWFuZ2xlZFR5cGVOYW1lLCAnICcsIGVsZW1l
bnROYW1lLCAiIFtbYXR0cmlidXRlKCIsIGF0dHJpYnV0ZUluZGV4LCAiKV1dO1xuIikpOworICAg
IH0KKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgifVxuXG4iKTsKKworICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKG1ha2VTdHJpbmcoInN0cnVjdCAiLCBtX3JldHVyblN0cnVjdE5hbWUsICIge1xu
IikpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9lbnRyeVBvaW50SXRlbXMub3V0cHV0
cy5zaXplKCk7ICsraSkgeworICAgICAgICBhdXRvJiBvdXRwdXRJdGVtID0gbV9lbnRyeVBvaW50
SXRlbXMub3V0cHV0c1tpXTsKKyAgICAgICAgYXV0byBtYW5nbGVkVHlwZU5hbWUgPSBtX3R5cGVO
YW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm91dHB1dEl0ZW0udW5uYW1lZFR5cGUpOworICAgICAg
ICBhdXRvIGVsZW1lbnROYW1lID0gbV9uYW1lZE91dHB1dHNbaV0uZWxlbWVudE5hbWU7CisgICAg
ICAgIGF1dG8gYXR0cmlidXRlID0gYXR0cmlidXRlRm9yU2VtYW50aWMoKm91dHB1dEl0ZW0uc2Vt
YW50aWMpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIgICAgIiwg
bWFuZ2xlZFR5cGVOYW1lLCAnICcsIGVsZW1lbnROYW1lLCAnICcsIGF0dHJpYnV0ZSwgIjtcbiIp
KTsKKyAgICB9CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIn1cblxuIik7CisKKyAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZChyZXNvdXJjZUhlbHBlclR5cGVzKCkpOworCisgICAgcmV0dXJuIHN0
cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKK30KKworU3RyaW5nIFZlcnRleEVudHJ5UG9pbnRTY2Fm
Zm9sZGluZzo6c2lnbmF0dXJlKFN0cmluZyYgZnVuY3Rpb25OYW1lKQoreworICAgIFN0cmluZ0J1
aWxkZXIgc3RyaW5nQnVpbGRlcjsKKworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJp
bmcoInZlcnRleCAiLCBtX3JldHVyblN0cnVjdE5hbWUsICcgJywgZnVuY3Rpb25OYW1lLCAnKCcs
IG1fc3RhZ2VJblN0cnVjdE5hbWUsICcgJywgbV9zdGFnZUluUGFyYW1ldGVyTmFtZSwgIiBbW3N0
YWdlX2luXV0iKSk7CisgICAgaWYgKGF1dG8gcmVzb3VyY2VTaWduYXR1cmUgPSB0aGlzLT5yZXNv
dXJjZVNpZ25hdHVyZSgpKQorICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5n
KCIsICIsICpyZXNvdXJjZVNpZ25hdHVyZSkpOworICAgIGlmIChhdXRvIGJ1aWx0SW5zU2lnbmF0
dXJlID0gdGhpcy0+YnVpbHRJbnNTaWduYXR1cmUoKSkKKyAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQobWFrZVN0cmluZygiLCAiLCAqYnVpbHRJbnNTaWduYXR1cmUpKTsKKyAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZCgiKSIpOworCisgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmco
KTsKK30KKworU3RyaW5nIFZlcnRleEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6dW5wYWNrKCkKK3sK
KyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CisKKyAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZCh1bnBhY2tSZXNvdXJjZXNBbmROYW1lZEJ1aWx0SW5zKCkpOworCisgICAgZm9yIChhdXRv
JiBuYW1lZFN0YWdlSW4gOiBtX25hbWVkU3RhZ2VJbnMpIHsKKyAgICAgICAgYXV0byYgcGF0aCA9
IG1fZW50cnlQb2ludEl0ZW1zLmlucHV0c1tuYW1lZFN0YWdlSW4uaW5kZXhJbkVudHJ5UG9pbnRJ
dGVtc10ucGF0aDsKKyAgICAgICAgYXV0byYgZWxlbWVudE5hbWUgPSBuYW1lZFN0YWdlSW4uZWxl
bWVudE5hbWU7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWFuZ2xl
ZElucHV0UGF0aChwYXRoKSwgIiA9ICIsIG1fc3RhZ2VJblN0cnVjdE5hbWUsICcuJywgZWxlbWVu
dE5hbWUsICI7XG4iKSk7CisgICAgfQorCisgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJp
bmcoKTsKK30KKworU3RyaW5nIFZlcnRleEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6cGFjayhjb25z
dCBTdHJpbmcmIGlucHV0VmFyaWFibGVOYW1lLCBjb25zdCBTdHJpbmcmIG91dHB1dFZhcmlhYmxl
TmFtZSkKK3sKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CisgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQobWFrZVN0cmluZyhtX3JldHVyblN0cnVjdE5hbWUsICcgJywgb3V0cHV0VmFy
aWFibGVOYW1lKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2VudHJ5UG9pbnRJdGVt
cy5vdXRwdXRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGF1dG8mIGVsZW1lbnROYW1lID0gbV9u
YW1lZE91dHB1dHNbaV0uZWxlbWVudE5hbWU7CisgICAgICAgIGF1dG8mIHBhdGggPSBtX2VudHJ5
UG9pbnRJdGVtcy5vdXRwdXRzW2ldLnBhdGg7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KG1ha2VTdHJpbmcob3V0cHV0VmFyaWFibGVOYW1lLCAnLicsIGVsZW1lbnROYW1lLCAiID0gIiwg
aW5wdXRWYXJpYWJsZU5hbWUsIG1hbmdsZWRPdXRwdXRQYXRoKHBhdGgpLCAiO1xuIikpOworICAg
IH0KKyAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworfQorCitGcmFnbWVudEVu
dHJ5UG9pbnRTY2FmZm9sZGluZzo6RnJhZ21lbnRFbnRyeVBvaW50U2NhZmZvbGRpbmcoQVNUOjpG
dW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbiwgSW50cmluc2ljcyYgaW50cmlu
c2ljcywgVHlwZU5hbWVyJiB0eXBlTmFtZXIsIEVudHJ5UG9pbnRJdGVtcyYgZW50cnlQb2ludEl0
ZW1zLCBIYXNoTWFwPEJpbmRpbmcqLCBzaXplX3Q+JiByZXNvdXJjZU1hcCwgTGF5b3V0JiBsYXlv
dXQsIHN0ZDo6ZnVuY3Rpb248U3RyaW5nKCk+JiYgZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lLCBI
YXNoTWFwPEF0dGFjaG1lbnREZXNjcmlwdG9yKiwgc2l6ZV90PiYpCisgICAgOiBFbnRyeVBvaW50
U2NhZmZvbGRpbmcoZnVuY3Rpb25EZWZpbml0aW9uLCBpbnRyaW5zaWNzLCB0eXBlTmFtZXIsIGVu
dHJ5UG9pbnRJdGVtcywgcmVzb3VyY2VNYXAsIGxheW91dCwgV1RGTW92ZShnZW5lcmF0ZU5leHRW
YXJpYWJsZU5hbWUpKQorICAgICwgbV9zdGFnZUluU3RydWN0TmFtZSh0eXBlTmFtZXIuZ2VuZXJh
dGVOZXh0VHlwZU5hbWUoKSkKKyAgICAsIG1fcmV0dXJuU3RydWN0TmFtZSh0eXBlTmFtZXIuZ2Vu
ZXJhdGVOZXh0VHlwZU5hbWUoKSkKKyAgICAsIG1fc3RhZ2VJblBhcmFtZXRlck5hbWUobV9nZW5l
cmF0ZU5leHRWYXJpYWJsZU5hbWUoKSkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
ZW50cnlQb2ludEl0ZW1zLmlucHV0cy5zaXplKCk7ICsraSkgeworICAgICAgICBhdXRvJiBpbnB1
dEl0ZW0gPSBtX2VudHJ5UG9pbnRJdGVtcy5pbnB1dHNbaV07CisgICAgICAgIGlmICghV1RGOjpo
b2xkc19hbHRlcm5hdGl2ZTxBU1Q6OlN0YWdlSW5PdXRTZW1hbnRpYz4oKmlucHV0SXRlbS5zZW1h
bnRpYykpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgYXV0byYgc3RhZ2VJbk91dFNl
bWFudGljID0gV1RGOjpnZXQ8QVNUOjpTdGFnZUluT3V0U2VtYW50aWM+KCppbnB1dEl0ZW0uc2Vt
YW50aWMpOworICAgICAgICBOYW1lZFN0YWdlSW4gbmFtZWRTdGFnZUluOworICAgICAgICBuYW1l
ZFN0YWdlSW4uaW5kZXhJbkVudHJ5UG9pbnRJdGVtcyA9IGk7CisgICAgICAgIG5hbWVkU3RhZ2VJ
bi5lbGVtZW50TmFtZSA9IG1fdHlwZU5hbWVyLmdlbmVyYXRlTmV4dFN0cnVjdHVyZUVsZW1lbnRO
YW1lKCk7CisgICAgICAgIG5hbWVkU3RhZ2VJbi5hdHRyaWJ1dGVJbmRleCA9IHN0YWdlSW5PdXRT
ZW1hbnRpYy5pbmRleCgpOworICAgICAgICBtX25hbWVkU3RhZ2VJbnMuYXBwZW5kKFdURk1vdmUo
bmFtZWRTdGFnZUluKSk7CisgICAgfQorCisgICAgbV9uYW1lZE91dHB1dHMucmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eShtX2VudHJ5UG9pbnRJdGVtcy5vdXRwdXRzLnNpemUoKSk7CisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX2VudHJ5UG9pbnRJdGVtcy5vdXRwdXRzLnNpemUoKTsgKytpKSB7
CisgICAgICAgIE5hbWVkT3V0cHV0IG5hbWVkT3V0cHV0OworICAgICAgICBuYW1lZE91dHB1dC5l
bGVtZW50TmFtZSA9IG1fdHlwZU5hbWVyLmdlbmVyYXRlTmV4dFN0cnVjdHVyZUVsZW1lbnROYW1l
KCk7CisgICAgICAgIG1fbmFtZWRPdXRwdXRzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKG5hbWVk
T3V0cHV0KSk7CisgICAgfQorfQorCitTdHJpbmcgRnJhZ21lbnRFbnRyeVBvaW50U2NhZmZvbGRp
bmc6OmhlbHBlclR5cGVzKCkKK3sKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CisK
KyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJzdHJ1Y3QgIiwgbV9zdGFnZUlu
U3RydWN0TmFtZSwgIiB7XG4iKSk7CisgICAgZm9yIChhdXRvJiBuYW1lZFN0YWdlSW4gOiBtX25h
bWVkU3RhZ2VJbnMpIHsKKyAgICAgICAgYXV0byBtYW5nbGVkVHlwZU5hbWUgPSBtX3R5cGVOYW1l
ci5tYW5nbGVkTmFtZUZvclR5cGUoKm1fZW50cnlQb2ludEl0ZW1zLmlucHV0c1tuYW1lZFN0YWdl
SW4uaW5kZXhJbkVudHJ5UG9pbnRJdGVtc10udW5uYW1lZFR5cGUpOworICAgICAgICBhdXRvIGVs
ZW1lbnROYW1lID0gbmFtZWRTdGFnZUluLmVsZW1lbnROYW1lOworICAgICAgICBhdXRvIGF0dHJp
YnV0ZUluZGV4ID0gbmFtZWRTdGFnZUluLmVsZW1lbnROYW1lOworICAgICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIgICAgIiwgbWFuZ2xlZFR5cGVOYW1lLCAnICcsIGVsZW1l
bnROYW1lLCAiIFtbdXNlcigiLCBhdHRyaWJ1dGVJbmRleCwgIildXTtcbiIpKTsKKyAgICB9Cisg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIn1cblxuIik7CisKKyAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZChtYWtlU3RyaW5nKCJzdHJ1Y3QgIiwgbV9yZXR1cm5TdHJ1Y3ROYW1lLCAiIHtcbiIpKTsK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZW50cnlQb2ludEl0ZW1zLm91dHB1dHMuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgYXV0byYgb3V0cHV0SXRlbSA9IG1fZW50cnlQb2ludEl0ZW1z
Lm91dHB1dHNbaV07CisgICAgICAgIGF1dG8gbWFuZ2xlZFR5cGVOYW1lID0gbV90eXBlTmFtZXIu
bWFuZ2xlZE5hbWVGb3JUeXBlKCpvdXRwdXRJdGVtLnVubmFtZWRUeXBlKTsKKyAgICAgICAgYXV0
byBlbGVtZW50TmFtZSA9IG1fbmFtZWRPdXRwdXRzW2ldLmVsZW1lbnROYW1lOworICAgICAgICBh
dXRvIGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZUZvclNlbWFudGljKCpvdXRwdXRJdGVtLnNlbWFudGlj
KTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAgICIsIG1hbmds
ZWRUeXBlTmFtZSwgJyAnLCBlbGVtZW50TmFtZSwgJyAnLCBhdHRyaWJ1dGUsICI7XG4iKSk7Cisg
ICAgfQorICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9XG5cbiIpOworCisgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQocmVzb3VyY2VIZWxwZXJUeXBlcygpKTsKKworICAgIHJldHVybiBzdHJpbmdC
dWlsZGVyLnRvU3RyaW5nKCk7Cit9CisKK1N0cmluZyBGcmFnbWVudEVudHJ5UG9pbnRTY2FmZm9s
ZGluZzo6c2lnbmF0dXJlKFN0cmluZyYgZnVuY3Rpb25OYW1lKQoreworICAgIFN0cmluZ0J1aWxk
ZXIgc3RyaW5nQnVpbGRlcjsKKworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmco
ImZyYWdtZW50ICIsIG1fcmV0dXJuU3RydWN0TmFtZSwgJyAnLCBmdW5jdGlvbk5hbWUsICcoJywg
bV9zdGFnZUluU3RydWN0TmFtZSwgJyAnLCBtX3N0YWdlSW5QYXJhbWV0ZXJOYW1lLCAiIFtbc3Rh
Z2VfaW5dXSIpKTsKKyAgICBpZiAoYXV0byByZXNvdXJjZVNpZ25hdHVyZSA9IHRoaXMtPnJlc291
cmNlU2lnbmF0dXJlKCkpCisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmco
IiwgIiwgKnJlc291cmNlU2lnbmF0dXJlKSk7CisgICAgaWYgKGF1dG8gYnVpbHRJbnNTaWduYXR1
cmUgPSB0aGlzLT5idWlsdEluc1NpZ25hdHVyZSgpKQorICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZChtYWtlU3RyaW5nKCIsICIsICpidWlsdEluc1NpZ25hdHVyZSkpOworICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKCIpIik7CisKKyAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygp
OworfQorCitTdHJpbmcgRnJhZ21lbnRFbnRyeVBvaW50U2NhZmZvbGRpbmc6OnVucGFjaygpCit7
CisgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOworCisgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQodW5wYWNrUmVzb3VyY2VzQW5kTmFtZWRCdWlsdElucygpKTsKKworICAgIGZvciAoYXV0
byYgbmFtZWRTdGFnZUluIDogbV9uYW1lZFN0YWdlSW5zKSB7CisgICAgICAgIGF1dG8mIHBhdGgg
PSBtX2VudHJ5UG9pbnRJdGVtcy5pbnB1dHNbbmFtZWRTdGFnZUluLmluZGV4SW5FbnRyeVBvaW50
SXRlbXNdLnBhdGg7CisgICAgICAgIGF1dG8mIGVsZW1lbnROYW1lID0gbmFtZWRTdGFnZUluLmVs
ZW1lbnROYW1lOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1hbmds
ZWRJbnB1dFBhdGgocGF0aCksICIgPSAiLCBtX3N0YWdlSW5TdHJ1Y3ROYW1lLCAnLicsIGVsZW1l
bnROYW1lLCAiO1xuIikpOworICAgIH0KKworICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3Ry
aW5nKCk7Cit9CisKK1N0cmluZyBGcmFnbWVudEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6cGFjayhj
b25zdCBTdHJpbmcmIGlucHV0VmFyaWFibGVOYW1lLCBjb25zdCBTdHJpbmcmIG91dHB1dFZhcmlh
YmxlTmFtZSkKK3sKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CisgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtX3JldHVyblN0cnVjdE5hbWUsICcgJywgb3V0cHV0
VmFyaWFibGVOYW1lKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2VudHJ5UG9pbnRJ
dGVtcy5vdXRwdXRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGF1dG8mIGVsZW1lbnROYW1lID0g
bV9uYW1lZE91dHB1dHNbaV0uZWxlbWVudE5hbWU7CisgICAgICAgIGF1dG8mIHBhdGggPSBtX2Vu
dHJ5UG9pbnRJdGVtcy5vdXRwdXRzW2ldLnBhdGg7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKG1ha2VTdHJpbmcob3V0cHV0VmFyaWFibGVOYW1lLCAnLicsIGVsZW1lbnROYW1lLCAiID0g
IiwgaW5wdXRWYXJpYWJsZU5hbWUsIG1hbmdsZWRPdXRwdXRQYXRoKHBhdGgpLCAiO1xuIikpOwor
ICAgIH0KKyAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworfQorCitDb21wdXRl
RW50cnlQb2ludFNjYWZmb2xkaW5nOjpDb21wdXRlRW50cnlQb2ludFNjYWZmb2xkaW5nKEFTVDo6
RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXRpb24sIEludHJpbnNpY3MmIGludHJp
bnNpY3MsIFR5cGVOYW1lciYgdHlwZU5hbWVyLCBFbnRyeVBvaW50SXRlbXMmIGVudHJ5UG9pbnRJ
dGVtcywgSGFzaE1hcDxCaW5kaW5nKiwgc2l6ZV90PiYgcmVzb3VyY2VNYXAsIExheW91dCYgbGF5
b3V0LCBzdGQ6OmZ1bmN0aW9uPFN0cmluZygpPiYmIGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSkK
KyAgICA6IEVudHJ5UG9pbnRTY2FmZm9sZGluZyhmdW5jdGlvbkRlZmluaXRpb24sIGludHJpbnNp
Y3MsIHR5cGVOYW1lciwgZW50cnlQb2ludEl0ZW1zLCByZXNvdXJjZU1hcCwgbGF5b3V0LCBXVEZN
b3ZlKGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSkpCit7Cit9CisKK1N0cmluZyBDb21wdXRlRW50
cnlQb2ludFNjYWZmb2xkaW5nOjpoZWxwZXJUeXBlcygpCit7CisgICAgcmV0dXJuIHJlc291cmNl
SGVscGVyVHlwZXMoKTsKK30KKworU3RyaW5nIENvbXB1dGVFbnRyeVBvaW50U2NhZmZvbGRpbmc6
OnNpZ25hdHVyZShTdHJpbmcmIGZ1bmN0aW9uTmFtZSkKK3sKKyAgICBTdHJpbmdCdWlsZGVyIHN0
cmluZ0J1aWxkZXI7CisKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJjb21w
dXRlIHZvaWQgIiwgZnVuY3Rpb25OYW1lLCAnKCcpKTsKKyAgICBib29sIGVtcHR5ID0gdHJ1ZTsK
KyAgICBpZiAoYXV0byByZXNvdXJjZVNpZ25hdHVyZSA9IHRoaXMtPnJlc291cmNlU2lnbmF0dXJl
KCkpIHsKKyAgICAgICAgZW1wdHkgPSBmYWxzZTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQobWFrZVN0cmluZygqcmVzb3VyY2VTaWduYXR1cmUpKTsKKyAgICB9CisgICAgaWYgKGF1dG8g
YnVpbHRJbnNTaWduYXR1cmUgPSB0aGlzLT5idWlsdEluc1NpZ25hdHVyZSgpKSB7CisgICAgICAg
IGlmICghZW1wdHkpCisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiLCAiKTsKKyAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoKmJ1aWx0SW5zU2lnbmF0dXJlKTsKKyAgICB9Cisg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIikiKTsKKworICAgIHJldHVybiBzdHJpbmdCdWlsZGVy
LnRvU3RyaW5nKCk7Cit9CisKK1N0cmluZyBDb21wdXRlRW50cnlQb2ludFNjYWZmb2xkaW5nOjp1
bnBhY2soKQoreworICAgIHJldHVybiB1bnBhY2tSZXNvdXJjZXNBbmROYW1lZEJ1aWx0SW5zKCk7
CiB9CiAKLVN0cmluZyBFbnRyeVBvaW50U2NhZmZvbGRpbmc6OnBhY2soY29uc3QgU3RyaW5nJiwg
Y29uc3QgU3RyaW5nJikKK1N0cmluZyBDb21wdXRlRW50cnlQb2ludFNjYWZmb2xkaW5nOjpwYWNr
KGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgLy8gRklYTUU6IEltcGxlbWVu
dCB0aGlzLgorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBTdHJpbmcoKTsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0
YWwvV0hMU0xFbnRyeVBvaW50U2NhZmZvbGRpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML01ldGFsL1dITFNMRW50cnlQb2ludFNjYWZmb2xkaW5nLmgKaW5kZXggOGQ2
NWZhZDIwN2RmNTM5ZTllYTc0MDQ1MDVlYTZlODcyMTRjOTRlMC4uZDg3ZjZlOWY1NGU3NzE2NGZj
YjQxZmU2YTY1ZTBjNWM1MDU4OWE4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xFbnRyeVBvaW50U2NhZmZvbGRpbmcuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEVudHJ5UG9pbnRT
Y2FmZm9sZGluZy5oCkBAIC0yNyw2ICsyNywxMiBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAor
I2luY2x1ZGUgIldITFNMTWFwcGVkQmluZGluZ3MuaCIKKyNpbmNsdWRlICJXSExTTFBpcGVsaW5l
RGVzY3JpcHRvci5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL09w
dGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogbmFtZXNwYWNlIFdITFNMIHsKQEAgLTM3LDIzICs0MywxMzIgQEAgY2xhc3Mg
RnVuY3Rpb25EZWZpbml0aW9uOwogCiB9CiAKK3N0cnVjdCBFbnRyeVBvaW50SXRlbXM7CiBjbGFz
cyBJbnRyaW5zaWNzOwogCiBuYW1lc3BhY2UgTWV0YWwgewogCi0vLyBGSVhNRTogVGhpcyBuZWVk
cyB0byBrbm93IGFib3V0IHRoZSBwaXBlbGluZSBzdGF0ZSBvYmplY3QgdG8gZW1pdCBmdW5jdGlv
biBwcm9sb2d1ZXMgYW5kIGVwaWxvZ3Vlcy4KK2NsYXNzIFR5cGVOYW1lcjsKKwogY2xhc3MgRW50
cnlQb2ludFNjYWZmb2xkaW5nIHsKIHB1YmxpYzoKLSAgICBFbnRyeVBvaW50U2NhZmZvbGRpbmco
QVNUOjpGdW5jdGlvbkRlZmluaXRpb24mLCBJbnRyaW5zaWNzJik7CisgICAgRW50cnlQb2ludFNj
YWZmb2xkaW5nKEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiwgSW50cmluc2ljcyYsIFR5cGVOYW1l
ciYsIEVudHJ5UG9pbnRJdGVtcyYsIEhhc2hNYXA8QmluZGluZyosIHNpemVfdD4mIHJlc291cmNl
TWFwLCBMYXlvdXQmLCBzdGQ6OmZ1bmN0aW9uPFN0cmluZygpPiYmIGdlbmVyYXRlTmV4dFZhcmlh
YmxlTmFtZSk7CisgICAgdmlydHVhbCB+RW50cnlQb2ludFNjYWZmb2xkaW5nKCkgPSBkZWZhdWx0
OworCisgICAgdmlydHVhbCBTdHJpbmcgaGVscGVyVHlwZXMoKSA9IDA7CisgICAgdmlydHVhbCBT
dHJpbmcgc2lnbmF0dXJlKFN0cmluZyYgZnVuY3Rpb25OYW1lKSA9IDA7CisgICAgdmlydHVhbCBT
dHJpbmcgdW5wYWNrKCkgPSAwOworICAgIHZpcnR1YWwgU3RyaW5nIHBhY2soY29uc3QgU3RyaW5n
JiBleGlzdGluZ1ZhcmlhYmxlTmFtZSwgY29uc3QgU3RyaW5nJiB2YXJpYWJsZU5hbWUpID0gMDsK
KworICAgIE1hcHBlZEJpbmRHcm91cHMgbWFwcGVkQmluZEdyb3VwcygpIGNvbnN0OworICAgIFZl
Y3RvcjxTdHJpbmc+JiBwYXJhbWV0ZXJWYXJpYWJsZXMoKSB7IHJldHVybiBtX3BhcmFtZXRlclZh
cmlhYmxlczsgfQorCitwcm90ZWN0ZWQ6CisgICAgU3RyaW5nIHJlc291cmNlSGVscGVyVHlwZXMo
KTsKKyAgICBPcHRpb25hbDxTdHJpbmc+IHJlc291cmNlU2lnbmF0dXJlKCk7CisgICAgT3B0aW9u
YWw8U3RyaW5nPiBidWlsdEluc1NpZ25hdHVyZSgpOworCisgICAgU3RyaW5nIG1hbmdsZWRJbnB1
dFBhdGgoVmVjdG9yPFN0cmluZz4mIHBhdGgpOworICAgIFN0cmluZyBtYW5nbGVkT3V0cHV0UGF0
aChWZWN0b3I8U3RyaW5nPiYgcGF0aCk7CisgICAgU3RyaW5nIHVucGFja1Jlc291cmNlc0FuZE5h
bWVkQnVpbHRJbnMoKTsKKworICAgIEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBtX2Z1bmN0aW9u
RGVmaW5pdGlvbjsKKyAgICBJbnRyaW5zaWNzJiBtX2ludHJpbnNpY3M7CisgICAgVHlwZU5hbWVy
JiBtX3R5cGVOYW1lcjsKKyAgICBFbnRyeVBvaW50SXRlbXMmIG1fZW50cnlQb2ludEl0ZW1zOwor
ICAgIEhhc2hNYXA8QmluZGluZyosIHNpemVfdD4mIG1fcmVzb3VyY2VNYXA7CisgICAgTGF5b3V0
JiBtX2xheW91dDsKKyAgICBzdGQ6OmZ1bmN0aW9uPFN0cmluZygpPiBtX2dlbmVyYXRlTmV4dFZh
cmlhYmxlTmFtZTsKKworICAgIHN0cnVjdCBOYW1lZEJpbmRpbmcgeworICAgICAgICBTdHJpbmcg
ZWxlbWVudE5hbWU7CisgICAgICAgIHVuc2lnbmVkIGluZGV4OworICAgIH07CisgICAgc3RydWN0
IE5hbWVkQmluZEdyb3VwIHsKKyAgICAgICAgU3RyaW5nIHN0cnVjdE5hbWU7CisgICAgICAgIFN0
cmluZyB2YXJpYWJsZU5hbWU7CisgICAgICAgIFZlY3RvcjxOYW1lZEJpbmRpbmc+IG5hbWVkQmlu
ZGluZ3M7CisgICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50QnVmZmVySW5kZXg7CisgICAgfTsKKyAg
ICBWZWN0b3I8TmFtZWRCaW5kR3JvdXA+IG1fbmFtZWRCaW5kR3JvdXBzOyAvLyBQYXJhbGxlbCB0
byBtX2xheW91dAorCisgICAgc3RydWN0IE5hbWVkQnVpbHRJbiB7CisgICAgICAgIHNpemVfdCBp
bmRleEluRW50cnlQb2ludEl0ZW1zOworICAgICAgICBTdHJpbmcgdmFyaWFibGVOYW1lOworICAg
IH07CisgICAgVmVjdG9yPE5hbWVkQnVpbHRJbj4gbV9uYW1lZEJ1aWx0SW5zOworCisgICAgVmVj
dG9yPFN0cmluZz4gbV9wYXJhbWV0ZXJWYXJpYWJsZXM7Cit9OworCitjbGFzcyBWZXJ0ZXhFbnRy
eVBvaW50U2NhZmZvbGRpbmcgOiBwdWJsaWMgRW50cnlQb2ludFNjYWZmb2xkaW5nIHsKK3B1Ymxp
YzoKKyAgICBWZXJ0ZXhFbnRyeVBvaW50U2NhZmZvbGRpbmcoQVNUOjpGdW5jdGlvbkRlZmluaXRp
b24mLCBJbnRyaW5zaWNzJiwgVHlwZU5hbWVyJiwgRW50cnlQb2ludEl0ZW1zJiwgSGFzaE1hcDxC
aW5kaW5nKiwgc2l6ZV90PiYgcmVzb3VyY2VNYXAsIExheW91dCYsIHN0ZDo6ZnVuY3Rpb248U3Ry
aW5nKCk+JiYgZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lLCBIYXNoTWFwPFZlcnRleEF0dHJpYnV0
ZSosIHNpemVfdD4mIG1hdGNoZWRWZXJ0ZXhBdHRyaWJ1dGVzKTsKKyAgICB2aXJ0dWFsIH5WZXJ0
ZXhFbnRyeVBvaW50U2NhZmZvbGRpbmcoKSA9IGRlZmF1bHQ7CisKKyAgICBTdHJpbmcgaGVscGVy
VHlwZXMoKSBvdmVycmlkZTsKKyAgICBTdHJpbmcgc2lnbmF0dXJlKFN0cmluZyYgZnVuY3Rpb25O
YW1lKSBvdmVycmlkZTsKKyAgICBTdHJpbmcgdW5wYWNrKCkgb3ZlcnJpZGU7CisgICAgU3RyaW5n
IHBhY2soY29uc3QgU3RyaW5nJiBleGlzdGluZ1ZhcmlhYmxlTmFtZSwgY29uc3QgU3RyaW5nJiB2
YXJpYWJsZU5hbWUpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIEhhc2hNYXA8VmVydGV4QXR0
cmlidXRlKiwgc2l6ZV90PiYgbV9tYXRjaGVkVmVydGV4QXR0cmlidXRlczsKKyAgICBTdHJpbmcg
bV9zdGFnZUluU3RydWN0TmFtZTsKKyAgICBTdHJpbmcgbV9yZXR1cm5TdHJ1Y3ROYW1lOworICAg
IFN0cmluZyBtX3N0YWdlSW5QYXJhbWV0ZXJOYW1lOworCisgICAgc3RydWN0IE5hbWVkU3RhZ2VJ
biB7CisgICAgICAgIHNpemVfdCBpbmRleEluRW50cnlQb2ludEl0ZW1zOworICAgICAgICBTdHJp
bmcgZWxlbWVudE5hbWU7CisgICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZUluZGV4OworICAgIH07
CisgICAgVmVjdG9yPE5hbWVkU3RhZ2VJbj4gbV9uYW1lZFN0YWdlSW5zOworCisgICAgc3RydWN0
IE5hbWVkT3V0cHV0IHsKKyAgICAgICAgU3RyaW5nIGVsZW1lbnROYW1lOworICAgIH07CisgICAg
VmVjdG9yPE5hbWVkT3V0cHV0PiBtX25hbWVkT3V0cHV0czsKK307CisKK2NsYXNzIEZyYWdtZW50
RW50cnlQb2ludFNjYWZmb2xkaW5nIDogcHVibGljIEVudHJ5UG9pbnRTY2FmZm9sZGluZyB7Citw
dWJsaWM6CisgICAgRnJhZ21lbnRFbnRyeVBvaW50U2NhZmZvbGRpbmcoQVNUOjpGdW5jdGlvbkRl
ZmluaXRpb24mLCBJbnRyaW5zaWNzJiwgVHlwZU5hbWVyJiwgRW50cnlQb2ludEl0ZW1zJiwgSGFz
aE1hcDxCaW5kaW5nKiwgc2l6ZV90PiYgcmVzb3VyY2VNYXAsIExheW91dCYsIHN0ZDo6ZnVuY3Rp
b248U3RyaW5nKCk+JiYgZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lLCBIYXNoTWFwPEF0dGFjaG1l
bnREZXNjcmlwdG9yKiwgc2l6ZV90PiYgbWF0Y2hlZENvbG9yQXR0YWNobWVudHMpOworICAgIHZp
cnR1YWwgfkZyYWdtZW50RW50cnlQb2ludFNjYWZmb2xkaW5nKCkgPSBkZWZhdWx0OworCisgICAg
U3RyaW5nIGhlbHBlclR5cGVzKCkgb3ZlcnJpZGU7CisgICAgU3RyaW5nIHNpZ25hdHVyZShTdHJp
bmcmIGZ1bmN0aW9uTmFtZSkgb3ZlcnJpZGU7CisgICAgU3RyaW5nIHVucGFjaygpIG92ZXJyaWRl
OworICAgIFN0cmluZyBwYWNrKGNvbnN0IFN0cmluZyYgZXhpc3RpbmdWYXJpYWJsZU5hbWUsIGNv
bnN0IFN0cmluZyYgdmFyaWFibGVOYW1lKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBTdHJp
bmcgbV9zdGFnZUluU3RydWN0TmFtZTsKKyAgICBTdHJpbmcgbV9yZXR1cm5TdHJ1Y3ROYW1lOwor
ICAgIFN0cmluZyBtX3N0YWdlSW5QYXJhbWV0ZXJOYW1lOworCisgICAgc3RydWN0IE5hbWVkU3Rh
Z2VJbiB7CisgICAgICAgIHNpemVfdCBpbmRleEluRW50cnlQb2ludEl0ZW1zOworICAgICAgICBT
dHJpbmcgZWxlbWVudE5hbWU7CisgICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZUluZGV4OworICAg
IH07CisgICAgVmVjdG9yPE5hbWVkU3RhZ2VJbj4gbV9uYW1lZFN0YWdlSW5zOworCisgICAgc3Ry
dWN0IE5hbWVkT3V0cHV0IHsKKyAgICAgICAgU3RyaW5nIGVsZW1lbnROYW1lOworICAgIH07Cisg
ICAgVmVjdG9yPE5hbWVkT3V0cHV0PiBtX25hbWVkT3V0cHV0czsKK307CisKK2NsYXNzIENvbXB1
dGVFbnRyeVBvaW50U2NhZmZvbGRpbmcgOiBwdWJsaWMgRW50cnlQb2ludFNjYWZmb2xkaW5nIHsK
K3B1YmxpYzoKKyAgICBDb21wdXRlRW50cnlQb2ludFNjYWZmb2xkaW5nKEFTVDo6RnVuY3Rpb25E
ZWZpbml0aW9uJiwgSW50cmluc2ljcyYsIFR5cGVOYW1lciYsIEVudHJ5UG9pbnRJdGVtcyYsIEhh
c2hNYXA8QmluZGluZyosIHNpemVfdD4mIHJlc291cmNlTWFwLCBMYXlvdXQmLCBzdGQ6OmZ1bmN0
aW9uPFN0cmluZygpPiYmIGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSk7CisgICAgdmlydHVhbCB+
Q29tcHV0ZUVudHJ5UG9pbnRTY2FmZm9sZGluZygpID0gZGVmYXVsdDsKIAotICAgIFN0cmluZyBo
ZWxwZXJUeXBlcygpOwotICAgIFN0cmluZyBzaWduYXR1cmUoKTsKLSAgICBTdHJpbmcgdW5wYWNr
KCk7Ci0gICAgU3RyaW5nIHBhY2soY29uc3QgU3RyaW5nJiBleGlzdGluZ1ZhcmlhYmxlTmFtZSwg
Y29uc3QgU3RyaW5nJiB2YXJpYWJsZU5hbWUpOworICAgIFN0cmluZyBoZWxwZXJUeXBlcygpIG92
ZXJyaWRlOworICAgIFN0cmluZyBzaWduYXR1cmUoU3RyaW5nJiBmdW5jdGlvbk5hbWUpIG92ZXJy
aWRlOworICAgIFN0cmluZyB1bnBhY2soKSBvdmVycmlkZTsKKyAgICBTdHJpbmcgcGFjayhjb25z
dCBTdHJpbmcmIGV4aXN0aW5nVmFyaWFibGVOYW1lLCBjb25zdCBTdHJpbmcmIHZhcmlhYmxlTmFt
ZSkgb3ZlcnJpZGU7CiAKIHByaXZhdGU6Ci0gICAgQVNUOjpGdW5jdGlvbkRlZmluaXRpb24qIG1f
ZnVuY3Rpb25EZWZpbml0aW9uOwotICAgIEludHJpbnNpY3MqIG1faW50cmluc2ljczsKIH07CiAK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFs
L1dITFNMRnVuY3Rpb25Xcml0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvTWV0YWwvV0hMU0xGdW5jdGlvbldyaXRlci5jcHAKaW5kZXggMDE5YTI2N2JiYzhiZTZm
ZDI3ZWEwZTEwOGY4MWI3OTQyOGQ1MGNmNi4uMWI3YTQyYWJjZGU2MmMwMjk1MzlkYzRhZjFiMGYz
YmQ2YWFhNDY1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvTWV0YWwvV0hMU0xGdW5jdGlvbldyaXRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xGdW5jdGlvbldyaXRlci5jcHAKQEAgLTUwLDYg
KzUwLDcgQEAKICNpbmNsdWRlICJXSExTTExvZ2ljYWxOb3RFeHByZXNzaW9uLmgiCiAjaW5jbHVk
ZSAiV0hMU0xNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xN
YWtlUG9pbnRlckV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTE1hcHBlZEJpbmRpbmdzLmgi
CiAjaW5jbHVkZSAiV0hMU0xOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLmgiCiAjaW5jbHVkZSAi
V0hMU0xOYXRpdmVGdW5jdGlvbldyaXRlci5oIgogI2luY2x1ZGUgIldITFNMTmF0aXZlVHlwZURl
Y2xhcmF0aW9uLmgiCkBAIC04NiwyMSArODcsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+RnVu
Y3Rpb25EZWNsYXJhdGlvbldyaXRlcigpID0gZGVmYXVsdDsKIAogICAgIFN0cmluZyB0b1N0cmlu
ZygpIHsgcmV0dXJuIG1fc3RyaW5nQnVpbGRlci50b1N0cmluZygpOyB9Ci0gICAgdm9pZCB2aXNp
dChBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24mIGZ1bmN0aW9uRGVjbGFyYXRpb24pIG92ZXJyaWRl
Ci0gICAgewotICAgICAgICBpZiAoZnVuY3Rpb25EZWNsYXJhdGlvbi5lbnRyeVBvaW50VHlwZSgp
KQotICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX2Z1bmN0
aW9uTWFwcGluZy5maW5kKCZmdW5jdGlvbkRlY2xhcmF0aW9uKTsKLSAgICAgICAgQVNTRVJUKGl0
ZXJhdG9yICE9IG1fZnVuY3Rpb25NYXBwaW5nLmVuZCgpKTsKLSAgICAgICAgbV9zdHJpbmdCdWls
ZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShmdW5j
dGlvbkRlY2xhcmF0aW9uLnR5cGUoKSksICcgJywgaXRlcmF0b3ItPnZhbHVlLCAnKCcpKTsKLSAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRl
cnMoKS5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgaWYgKGkpCi0gICAgICAgICAgICAgICAg
bV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiLCAiKTsKLSAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRl
ci5hcHBlbmQobV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpmdW5jdGlvbkRlY2xhcmF0
aW9uLnBhcmFtZXRlcnMoKVtpXS50eXBlKCkpKTsKLSAgICAgICAgfQotICAgICAgICBtX3N0cmlu
Z0J1aWxkZXIuYXBwZW5kKCIpO1xuIik7Ci0gICAgfQorICAgIHZvaWQgdmlzaXQoQVNUOjpGdW5j
dGlvbkRlY2xhcmF0aW9uJikgb3ZlcnJpZGU7CiAKIHByaXZhdGU6CiAgICAgVHlwZU5hbWVyJiBt
X3R5cGVOYW1lcjsKQEAgLTEwOCwxMiArOTYsMjkgQEAgcHJpdmF0ZToKICAgICBTdHJpbmdCdWls
ZGVyIG1fc3RyaW5nQnVpbGRlcjsKIH07CiAKK3ZvaWQgRnVuY3Rpb25EZWNsYXJhdGlvbldyaXRl
cjo6dmlzaXQoQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uJiBmdW5jdGlvbkRlY2xhcmF0aW9uKQor
eworICAgIGlmIChmdW5jdGlvbkRlY2xhcmF0aW9uLmVudHJ5UG9pbnRUeXBlKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGF1dG8gaXRlcmF0b3IgPSBtX2Z1bmN0aW9uTWFwcGluZy5maW5kKCZm
dW5jdGlvbkRlY2xhcmF0aW9uKTsKKyAgICBBU1NFUlQoaXRlcmF0b3IgIT0gbV9mdW5jdGlvbk1h
cHBpbmcuZW5kKCkpOworICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtX3R5
cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoZnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpLCAn
ICcsIGl0ZXJhdG9yLT52YWx1ZSwgJygnKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBm
dW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCk7ICsraSkgeworICAgICAgICBp
ZiAoaSkKKyAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIiwgIik7CisgICAgICAg
IG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpm
dW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVtpXS50eXBlKCkpKTsKKyAgICB9CisgICAg
bV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiKTtcbiIpOworfQorCiBjbGFzcyBGdW5jdGlvbkRlZmlu
aXRpb25Xcml0ZXIgOiBwdWJsaWMgVmlzaXRvciB7CiBwdWJsaWM6Ci0gICAgRnVuY3Rpb25EZWZp
bml0aW9uV3JpdGVyKEludHJpbnNpY3MmIGludHJpbnNpY3MsIFR5cGVOYW1lciYgdHlwZU5hbWVy
LCBIYXNoTWFwPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiosIFN0cmluZz4mIGZ1bmN0aW9uTWFw
cGluZykKKyAgICBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXIoSW50cmluc2ljcyYgaW50cmluc2lj
cywgVHlwZU5hbWVyJiB0eXBlTmFtZXIsIEhhc2hNYXA8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9u
KiwgU3RyaW5nPiYgZnVuY3Rpb25NYXBwaW5nLCBMYXlvdXQmIGxheW91dCkKICAgICAgICAgOiBt
X2ludHJpbnNpY3MoaW50cmluc2ljcykKICAgICAgICAgLCBtX3R5cGVOYW1lcih0eXBlTmFtZXIp
CiAgICAgICAgICwgbV9mdW5jdGlvbk1hcHBpbmcoZnVuY3Rpb25NYXBwaW5nKQorICAgICAgICAs
IG1fbGF5b3V0KGxheW91dCkKICAgICB7CiAgICAgfQogCkBAIC0xMjEsNDY5ICsxMjYsNjEwIEBA
IHB1YmxpYzoKIAogICAgIFN0cmluZyB0b1N0cmluZygpIHsgcmV0dXJuIG1fc3RyaW5nQnVpbGRl
ci50b1N0cmluZygpOyB9CiAKLSAgICB2b2lkIHZpc2l0KEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbiYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikgb3ZlcnJpZGUKLSAgICB7Ci0gICAg
ICAgIGF1dG8gaXRlcmF0b3IgPSBtX2Z1bmN0aW9uTWFwcGluZy5maW5kKCZuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uKTsKLSAgICAgICAgQVNTRVJUKGl0ZXJhdG9yICE9IG1fZnVuY3Rpb25NYXBw
aW5nLmVuZCgpKTsKLSAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCh3cml0ZU5hdGl2ZUZ1
bmN0aW9uKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24sIGl0ZXJhdG9yLT52YWx1ZSwgbV90eXBl
TmFtZXIpKTsKLSAgICB9CisgICAgdm9pZCB2aXNpdChBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24mKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6RnVuY3Rpb25EZWZpbml0aW9u
Jikgb3ZlcnJpZGU7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxF
bnRyeVBvaW50U2NhZmZvbGRpbmc+IGNyZWF0ZUVudHJ5UG9pbnRTY2FmZm9sZGluZyhBU1Q6OkZ1
bmN0aW9uRGVmaW5pdGlvbiYpID0gMDsKKworICAgIHZvaWQgdmlzaXQoQVNUOjpGdW5jdGlvbkRl
Y2xhcmF0aW9uJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OlN0YXRlbWVudCYpIG92
ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpCbG9jayYpIG92ZXJyaWRlOworICAgIHZvaWQg
dmlzaXQoQVNUOjpCcmVhayYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpDb250aW51
ZSYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpEb1doaWxlTG9vcCYpIG92ZXJyaWRl
OworICAgIHZvaWQgdmlzaXQoQVNUOjpFZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50Jikgb3Zl
cnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkZhbGx0aHJvdWdoJikgb3ZlcnJpZGU7CisgICAg
dm9pZCB2aXNpdChBU1Q6OkZvckxvb3AmKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6
SWZTdGF0ZW1lbnQmKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6UmV0dXJuJikgb3Zl
cnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OlN3aXRjaFN0YXRlbWVudCYpIG92ZXJyaWRlOwor
ICAgIHZvaWQgdmlzaXQoQVNUOjpTd2l0Y2hDYXNlJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNp
dChBU1Q6OlRyYXAmKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6VmFyaWFibGVEZWNs
YXJhdGlvbnNTdGF0ZW1lbnQmKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6V2hpbGVM
b29wJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkludGVnZXJMaXRlcmFsJikgb3Zl
cnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWwmKSBvdmVy
cmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6RmxvYXRMaXRlcmFsJikgb3ZlcnJpZGU7CisgICAg
dm9pZCB2aXNpdChBU1Q6Ok51bGxMaXRlcmFsJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChB
U1Q6OkJvb2xlYW5MaXRlcmFsJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkVudW1l
cmF0aW9uTWVtYmVyTGl0ZXJhbCYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpFeHBy
ZXNzaW9uJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkRvdEV4cHJlc3Npb24mKSBv
dmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6SW5kZXhFeHByZXNzaW9uJikgb3ZlcnJpZGU7
CisgICAgdm9pZCB2aXNpdChBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiYpIG92ZXJyaWRl
OworICAgIHZvaWQgdmlzaXQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uJikgb3ZlcnJpZGU7Cisg
ICAgdm9pZCB2aXNpdChBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uJikgb3ZlcnJpZGU7CisgICAg
dm9pZCB2aXNpdChBU1Q6OkNhbGxFeHByZXNzaW9uJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNp
dChBU1Q6OkNvbW1hRXhwcmVzc2lvbiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpE
ZXJlZmVyZW5jZUV4cHJlc3Npb24mKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6TG9n
aWNhbEV4cHJlc3Npb24mKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6TG9naWNhbE5v
dEV4cHJlc3Npb24mKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6TWFrZUFycmF5UmVm
ZXJlbmNlRXhwcmVzc2lvbiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpNYWtlUG9p
bnRlckV4cHJlc3Npb24mKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6UmVhZE1vZGlm
eVdyaXRlRXhwcmVzc2lvbiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpUZXJuYXJ5
RXhwcmVzc2lvbiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpWYXJpYWJsZVJlZmVy
ZW5jZSYpIG92ZXJyaWRlOworCisgICAgU3RyaW5nIGNvbnN0YW50RXhwcmVzc2lvblN0cmluZyhB
U1Q6OkNvbnN0YW50RXhwcmVzc2lvbiYpOwogCi0gICAgdm9pZCB2aXNpdChBU1Q6OkZ1bmN0aW9u
RGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0aW9uKSBvdmVycmlkZQorICAgIFN0cmluZyBnZW5l
cmF0ZU5leHRWYXJpYWJsZU5hbWUoKQogICAgIHsKLSAgICAgICAgYXV0byBpdGVyYXRvciA9IG1f
ZnVuY3Rpb25NYXBwaW5nLmZpbmQoJmZ1bmN0aW9uRGVmaW5pdGlvbik7Ci0gICAgICAgIEFTU0VS
VChpdGVyYXRvciAhPSBtX2Z1bmN0aW9uTWFwcGluZy5lbmQoKSk7Ci0gICAgICAgIGlmIChmdW5j
dGlvbkRlZmluaXRpb24uZW50cnlQb2ludFR5cGUoKSkgewotICAgICAgICAgICAgbV9lbnRyeVBv
aW50U2NhZmZvbGRpbmcgPSBFbnRyeVBvaW50U2NhZmZvbGRpbmcoZnVuY3Rpb25EZWZpbml0aW9u
LCBtX2ludHJpbnNpY3MpOwotICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtX2Vu
dHJ5UG9pbnRTY2FmZm9sZGluZy0+aGVscGVyVHlwZXMoKSk7Ci0gICAgICAgICAgICBtX3N0cmlu
Z0J1aWxkZXIuYXBwZW5kKCdcbicpOwotICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVu
ZChtYWtlU3RyaW5nKG1fZW50cnlQb2ludFNjYWZmb2xkaW5nLT5zaWduYXR1cmUoKSwgIiB7Iikp
OwotICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtX2VudHJ5UG9pbnRTY2FmZm9s
ZGluZy0+dW5wYWNrKCkpOwotICAgICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGZ1bmN0aW9u
RGVmaW5pdGlvbi5ibG9jaygpKTsKLSAgICAgICAgICAgIEFTU0VSVChtX3N0YWNrLmlzRW1wdHko
KSk7Ci0gICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9XG4iKTsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIG1fZW50cnlQb2ludFNjYWZmb2xkaW5nID0gV1RGOjpudWxs
b3B0OwotICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1fdHlw
ZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShmdW5jdGlvbkRlZmluaXRpb24udHlwZSgpKSwgJyAn
LCBpdGVyYXRvci0+dmFsdWUsICcoJykpOwotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpLnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgICAgICAgICAgYXV0byYgcGFyYW1ldGVyID0gZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRl
cnMoKVtpXTsKLSAgICAgICAgICAgICAgICBpZiAoaSkKLSAgICAgICAgICAgICAgICAgICAgbV9z
dHJpbmdCdWlsZGVyLmFwcGVuZCgiLCAiKTsKLSAgICAgICAgICAgICAgICBhdXRvIHBhcmFtZXRl
ck5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKLSAgICAgICAgICAgICAgICBhdXRv
IGFkZFJlc3VsdCA9IG1fdmFyaWFibGVNYXBwaW5nLmFkZCgmcGFyYW1ldGVyLCBwYXJhbWV0ZXJO
YW1lKTsKLSAgICAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0
LmlzTmV3RW50cnkpOwotICAgICAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFr
ZVN0cmluZyhtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKnBhcmFtZXRlci50eXBlKCkp
LCAnICcsIHBhcmFtZXRlck5hbWUpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fc3Ry
aW5nQnVpbGRlci5hcHBlbmQoIikge1xuIik7Ci0gICAgICAgICAgICBjaGVja0Vycm9yQW5kVmlz
aXQoZnVuY3Rpb25EZWZpbml0aW9uLmJsb2NrKCkpOwotICAgICAgICAgICAgQVNTRVJUKG1fc3Rh
Y2suaXNFbXB0eSgpKTsKLSAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIn1cbiIp
OwotICAgICAgICB9CisgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCJ2YXJpYWJsZSIsIG1fdmFy
aWFibGVDb3VudCsrKTsKICAgICB9CiAKLXByaXZhdGU6Ci0gICAgdm9pZCB2aXNpdChBU1Q6OkZ1
bmN0aW9uRGVjbGFyYXRpb24mKSBvdmVycmlkZQotICAgIHsKLSAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgfQorICAgIEludHJpbnNpY3MmIG1faW50cmluc2ljczsKKyAgICBUeXBl
TmFtZXImIG1fdHlwZU5hbWVyOworICAgIEhhc2hNYXA8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9u
KiwgU3RyaW5nPiYgbV9mdW5jdGlvbk1hcHBpbmc7CisgICAgSGFzaE1hcDxBU1Q6OlZhcmlhYmxl
RGVjbGFyYXRpb24qLCBTdHJpbmc+IG1fdmFyaWFibGVNYXBwaW5nOworICAgIFN0cmluZ0J1aWxk
ZXIgbV9zdHJpbmdCdWlsZGVyOworICAgIFZlY3RvcjxTdHJpbmc+IG1fc3RhY2s7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPEVudHJ5UG9pbnRTY2FmZm9sZGluZz4gbV9lbnRyeVBvaW50U2NhZmZvbGRp
bmc7CisgICAgTGF5b3V0JiBtX2xheW91dDsKKyAgICB1bnNpZ25lZCBtX3ZhcmlhYmxlQ291bnQg
eyAwIH07Cit9OwogCi0gICAgdm9pZCB2aXNpdChBU1Q6OlN0YXRlbWVudCYgc3RhdGVtZW50KSBv
dmVycmlkZQotICAgIHsKLSAgICAgICAgVmlzaXRvcjo6dmlzaXQoc3RhdGVtZW50KTsKLSAgICB9
Cit2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpOYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKQoreworICAgIGF1dG8gaXRl
cmF0b3IgPSBtX2Z1bmN0aW9uTWFwcGluZy5maW5kKCZuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
KTsKKyAgICBBU1NFUlQoaXRlcmF0b3IgIT0gbV9mdW5jdGlvbk1hcHBpbmcuZW5kKCkpOworICAg
IG1fc3RyaW5nQnVpbGRlci5hcHBlbmQod3JpdGVOYXRpdmVGdW5jdGlvbihuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uLCBpdGVyYXRvci0+dmFsdWUsIG1fdHlwZU5hbWVyKSk7Cit9CiAKLSAgICB2
b2lkIHZpc2l0KEFTVDo6QmxvY2smIGJsb2NrKSBvdmVycmlkZQotICAgIHsKLSAgICAgICAgbV9z
dHJpbmdCdWlsZGVyLmFwcGVuZCgie1xuIik7Ci0gICAgICAgIGZvciAoYXV0byYgc3RhdGVtZW50
IDogYmxvY2suc3RhdGVtZW50cygpKQotICAgICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHN0
YXRlbWVudCk7Cit2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpGdW5j
dGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbikKK3sKKyAgICBhdXRvIGl0ZXJhdG9y
ID0gbV9mdW5jdGlvbk1hcHBpbmcuZmluZCgmZnVuY3Rpb25EZWZpbml0aW9uKTsKKyAgICBBU1NF
UlQoaXRlcmF0b3IgIT0gbV9mdW5jdGlvbk1hcHBpbmcuZW5kKCkpOworICAgIGlmIChmdW5jdGlv
bkRlZmluaXRpb24uZW50cnlQb2ludFR5cGUoKSkgeworICAgICAgICBhdXRvIGVudHJ5UG9pbnRT
Y2FmZm9sZGluZyA9IGNyZWF0ZUVudHJ5UG9pbnRTY2FmZm9sZGluZyhmdW5jdGlvbkRlZmluaXRp
b24pOworICAgICAgICBpZiAoIWVudHJ5UG9pbnRTY2FmZm9sZGluZykKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgbV9lbnRyeVBvaW50U2NhZmZvbGRpbmcgPSBXVEZNb3ZlKGVudHJ5UG9p
bnRTY2FmZm9sZGluZyk7CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobV9lbnRyeVBv
aW50U2NhZmZvbGRpbmctPmhlbHBlclR5cGVzKCkpOworICAgICAgICBtX3N0cmluZ0J1aWxkZXIu
YXBwZW5kKCdcbicpOworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmco
bV9lbnRyeVBvaW50U2NhZmZvbGRpbmctPnNpZ25hdHVyZShpdGVyYXRvci0+dmFsdWUpLCAiIHsi
KSk7CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobV9lbnRyeVBvaW50U2NhZmZvbGRp
bmctPnVucGFjaygpKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmdW5jdGlvbkRl
ZmluaXRpb24ucGFyYW1ldGVycygpLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBhdXRvIGFk
ZFJlc3VsdCA9IG1fdmFyaWFibGVNYXBwaW5nLmFkZCgmZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFt
ZXRlcnMoKVtpXSwgbV9lbnRyeVBvaW50U2NhZmZvbGRpbmctPnBhcmFtZXRlclZhcmlhYmxlcygp
W2ldKTsKKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNO
ZXdFbnRyeSk7CisgICAgICAgIH0KKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGZ1bmN0aW9u
RGVmaW5pdGlvbi5ibG9jaygpKTsKKyAgICAgICAgQVNTRVJUKG1fc3RhY2suaXNFbXB0eSgpKTsK
KyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgifVxuIik7CisgICAgICAgIG1fZW50cnlQ
b2ludFNjYWZmb2xkaW5nID0gbnVsbHB0cjsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQo
bV9lbnRyeVBvaW50U2NhZmZvbGRpbmcgPT0gbnVsbHB0cik7CisgICAgICAgIG1fc3RyaW5nQnVp
bGRlci5hcHBlbmQobWFrZVN0cmluZyhtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoZnVu
Y3Rpb25EZWZpbml0aW9uLnR5cGUoKSksICcgJywgaXRlcmF0b3ItPnZhbHVlLCAnKCcpKTsKKyAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVy
cygpLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBhdXRvJiBwYXJhbWV0ZXIgPSBmdW5jdGlv
bkRlZmluaXRpb24ucGFyYW1ldGVycygpW2ldOworICAgICAgICAgICAgaWYgKGkpCisgICAgICAg
ICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiLCAiKTsKKyAgICAgICAgICAgIGF1dG8g
cGFyYW1ldGVyTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOworICAgICAgICAgICAg
YXV0byBhZGRSZXN1bHQgPSBtX3ZhcmlhYmxlTWFwcGluZy5hZGQoJnBhcmFtZXRlciwgcGFyYW1l
dGVyTmFtZSk7CisgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0
LmlzTmV3RW50cnkpOworICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3Ry
aW5nKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqcGFyYW1ldGVyLnR5cGUoKSksICcg
JywgcGFyYW1ldGVyTmFtZSkpOworICAgICAgICB9CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5h
cHBlbmQoIikge1xuIik7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChmdW5jdGlvbkRlZmlu
aXRpb24uYmxvY2soKSk7CisgICAgICAgIEFTU0VSVChtX3N0YWNrLmlzRW1wdHkoKSk7CiAgICAg
ICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIn1cbiIpOwogICAgIH0KK30KIAotICAgIHZvaWQg
dmlzaXQoQVNUOjpCcmVhayYpIG92ZXJyaWRlCi0gICAgewotICAgICAgICBtX3N0cmluZ0J1aWxk
ZXIuYXBwZW5kKCJicmVhaztcbiIpOwotICAgIH0KK3ZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3Jp
dGVyOjp2aXNpdChBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24mKQoreworICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworfQogCi0gICAgdm9pZCB2aXNpdChBU1Q6OkNvbnRpbnVlJikgb3ZlcnJpZGUK
LSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBGaWd1cmUgb3V0IHdoaWNoIGxvb3Agd2UncmUgaW4s
IGFuZCBydW4gdGhlIGluY3JlbWVudCBjb2RlCi0gICAgICAgIENSQVNIKCk7Ci0gICAgfQordm9p
ZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6U3RhdGVtZW50JiBzdGF0ZW1l
bnQpCit7CisgICAgVmlzaXRvcjo6dmlzaXQoc3RhdGVtZW50KTsKK30KIAotICAgIHZvaWQgdmlz
aXQoQVNUOjpEb1doaWxlTG9vcCYgZG9XaGlsZUxvb3ApIG92ZXJyaWRlCi0gICAgewotICAgICAg
ICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJkbyB7XG4iKTsKLSAgICAgICAgY2hlY2tFcnJvckFu
ZFZpc2l0KGRvV2hpbGVMb29wLmJvZHkoKSk7Ci0gICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChk
b1doaWxlTG9vcC5jb25kaXRpb25hbCgpKTsKLSAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVu
ZChtYWtlU3RyaW5nKCJpZiAoISIsIG1fc3RhY2sudGFrZUxhc3QoKSwgIikgYnJlYWs7XG4iKSk7
Ci0gICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygifSB3aGlsZSh0cnVl
KTtcbiIpKTsKLSAgICB9Cit2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNU
OjpCbG9jayYgYmxvY2spCit7CisgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgie1xuIik7Cisg
ICAgZm9yIChhdXRvJiBzdGF0ZW1lbnQgOiBibG9jay5zdGF0ZW1lbnRzKCkpCisgICAgICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdChzdGF0ZW1lbnQpOworICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQo
In1cbiIpOworfQogCi0gICAgdm9pZCB2aXNpdChBU1Q6OkVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0
ZW1lbnQmIGVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQpIG92ZXJyaWRlCi0gICAgewotICAg
ICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudC5lZmZl
Y3RmdWxFeHByZXNzaW9uKCkpOwotICAgICAgICBtX3N0YWNrLnRha2VMYXN0KCk7IC8vIFRoZSBz
dGF0ZW1lbnQgaXMgYWxyZWFkeSBlZmZlY3RmdWwsIHNvIHdlIGRvbid0IG5lZWQgdG8gZG8gYW55
dGhpbmcgd2l0aCB0aGUgcmVzdWx0LgotICAgIH0KK3ZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3Jp
dGVyOjp2aXNpdChBU1Q6OkJyZWFrJikKK3sKKyAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJi
cmVhaztcbiIpOworfQogCi0gICAgdm9pZCB2aXNpdChBU1Q6OkZhbGx0aHJvdWdoJikgb3ZlcnJp
ZGUKLSAgICB7Ci0gICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIltbY2xhbmc6OmZhbGx0
aHJvdWdoXV07XG4iKTsgLy8gRklYTUU6IE1ha2Ugc3VyZSB0aGlzIGlzIG9rYXkuIEFsdGVybmF0
aXZlbHksIHdlIGNvdWxkIGRvIG5vdGhpbmcgYW5kIGp1c3QgcmV0dXJuIGhlcmUgaW5zdGVhZC4K
LSAgICB9Cit2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpDb250aW51
ZSYpCit7CisgICAgLy8gRklYTUU6IEZpZ3VyZSBvdXQgd2hpY2ggbG9vcCB3ZSdyZSBpbiwgYW5k
IHJ1biB0aGUgaW5jcmVtZW50IGNvZGUKKyAgICBDUkFTSCgpOworfQogCi0gICAgdm9pZCB2aXNp
dChBU1Q6OkZvckxvb3AmIGZvckxvb3ApIG92ZXJyaWRlCi0gICAgewotICAgICAgICBXVEY6OnZp
c2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1l
bnQmIHZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50KSB7Ci0gICAgICAgICAgICBjaGVja0Vy
cm9yQW5kVmlzaXQodmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQpOwotICAgICAgICB9LCBb
Jl0oVW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4mIGV4cHJlc3Npb24pIHsKLSAgICAgICAgICAg
IGNoZWNrRXJyb3JBbmRWaXNpdChleHByZXNzaW9uKTsKLSAgICAgICAgICAgIG1fc3RhY2sudGFr
ZUxhc3QoKTsgLy8gV2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZyB3aXRoIHRoZSByZXN1bHQu
Ci0gICAgICAgIH0pLCBmb3JMb29wLmluaXRpYWxpemF0aW9uKCkpOwotCi0gICAgICAgIG1fc3Ry
aW5nQnVpbGRlci5hcHBlbmQoImZvciAoIDsgOyApIHtcbiIpOwotICAgICAgICBpZiAoZm9yTG9v
cC5jb25kaXRpb24oKSkgewotICAgICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCpmb3JMb29w
LmNvbmRpdGlvbigpKTsKLSAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0
cmluZygiaWYgKCEiLCBtX3N0YWNrLnRha2VMYXN0KCksICIpIGJyZWFrO1xuIikpOwotICAgICAg
ICB9Ci0gICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChmb3JMb29wLmJvZHkoKSk7Ci0gICAgICAg
IGlmIChmb3JMb29wLmluY3JlbWVudCgpKSB7Ci0gICAgICAgICAgICBjaGVja0Vycm9yQW5kVmlz
aXQoKmZvckxvb3AuaW5jcmVtZW50KCkpOwotICAgICAgICAgICAgbV9zdGFjay50YWtlTGFzdCgp
OwotICAgICAgICB9Ci0gICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIn1cbiIpOwordm9p
ZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6RG9XaGlsZUxvb3AmIGRvV2hp
bGVMb29wKQoreworICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoImRvIHtcbiIpOworICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdChkb1doaWxlTG9vcC5ib2R5KCkpOworICAgIGNoZWNrRXJyb3JBbmRW
aXNpdChkb1doaWxlTG9vcC5jb25kaXRpb25hbCgpKTsKKyAgICBtX3N0cmluZ0J1aWxkZXIuYXBw
ZW5kKG1ha2VTdHJpbmcoImlmICghIiwgbV9zdGFjay50YWtlTGFzdCgpLCAiKSBicmVhaztcbiIp
KTsKKyAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIn0gd2hpbGUodHJ1ZSk7
XG4iKSk7Cit9CisKK3ZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OkVm
ZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQmIGVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQp
Cit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KGVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQu
ZWZmZWN0ZnVsRXhwcmVzc2lvbigpKTsKKyAgICBtX3N0YWNrLnRha2VMYXN0KCk7IC8vIFRoZSBz
dGF0ZW1lbnQgaXMgYWxyZWFkeSBlZmZlY3RmdWwsIHNvIHdlIGRvbid0IG5lZWQgdG8gZG8gYW55
dGhpbmcgd2l0aCB0aGUgcmVzdWx0LgorfQorCit2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRl
cjo6dmlzaXQoQVNUOjpGYWxsdGhyb3VnaCYpCit7CisgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVu
ZCgiW1tjbGFuZzo6ZmFsbHRocm91Z2hdXTtcbiIpOyAvLyBGSVhNRTogTWFrZSBzdXJlIHRoaXMg
aXMgb2theS4gQWx0ZXJuYXRpdmVseSwgd2UgY291bGQgZG8gbm90aGluZyBhbmQganVzdCByZXR1
cm4gaGVyZSBpbnN0ZWFkLgorfQorCit2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlz
aXQoQVNUOjpGb3JMb29wJiBmb3JMb29wKQoreworICAgIFdURjo6dmlzaXQoV1RGOjptYWtlVmlz
aXRvcihbJl0oQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCYgdmFyaWFibGVEZWNs
YXJhdGlvbnNTdGF0ZW1lbnQpIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHZhcmlhYmxl
RGVjbGFyYXRpb25zU3RhdGVtZW50KTsKKyAgICB9LCBbJl0oVW5pcXVlUmVmPEFTVDo6RXhwcmVz
c2lvbj4mIGV4cHJlc3Npb24pIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGV4cHJlc3Np
b24pOworICAgICAgICBtX3N0YWNrLnRha2VMYXN0KCk7IC8vIFdlIGRvbid0IG5lZWQgdG8gZG8g
YW55dGhpbmcgd2l0aCB0aGUgcmVzdWx0LgorICAgIH0pLCBmb3JMb29wLmluaXRpYWxpemF0aW9u
KCkpOworCisgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiZm9yICggOyA7ICkge1xuIik7Cisg
ICAgaWYgKGZvckxvb3AuY29uZGl0aW9uKCkpIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0
KCpmb3JMb29wLmNvbmRpdGlvbigpKTsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCht
YWtlU3RyaW5nKCJpZiAoISIsIG1fc3RhY2sudGFrZUxhc3QoKSwgIikgYnJlYWs7XG4iKSk7CiAg
ICAgfQorICAgIGNoZWNrRXJyb3JBbmRWaXNpdChmb3JMb29wLmJvZHkoKSk7CisgICAgaWYgKGZv
ckxvb3AuaW5jcmVtZW50KCkpIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCpmb3JMb29w
LmluY3JlbWVudCgpKTsKKyAgICAgICAgbV9zdGFjay50YWtlTGFzdCgpOworICAgIH0KKyAgICBt
X3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9XG4iKTsKK30KIAotICAgIHZvaWQgdmlzaXQoQVNUOjpJ
ZlN0YXRlbWVudCYgaWZTdGF0ZW1lbnQpIG92ZXJyaWRlCi0gICAgewotICAgICAgICBjaGVja0Vy
cm9yQW5kVmlzaXQoaWZTdGF0ZW1lbnQuY29uZGl0aW9uYWwoKSk7Ci0gICAgICAgIG1fc3RyaW5n
QnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiaWYgKCIsIG1fc3RhY2sudGFrZUxhc3QoKSwgIikg
e1xuIikpOwotICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoaWZTdGF0ZW1lbnQuYm9keSgpKTsK
LSAgICAgICAgaWYgKGlmU3RhdGVtZW50LmVsc2VCb2R5KCkpIHsKLSAgICAgICAgICAgIG1fc3Ry
aW5nQnVpbGRlci5hcHBlbmQoIn0gZWxzZSB7XG4iKTsKLSAgICAgICAgICAgIGNoZWNrRXJyb3JB
bmRWaXNpdCgqaWZTdGF0ZW1lbnQuZWxzZUJvZHkoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgbV9z
dHJpbmdCdWlsZGVyLmFwcGVuZCgifVxuIik7Cit2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRl
cjo6dmlzaXQoQVNUOjpJZlN0YXRlbWVudCYgaWZTdGF0ZW1lbnQpCit7CisgICAgY2hlY2tFcnJv
ckFuZFZpc2l0KGlmU3RhdGVtZW50LmNvbmRpdGlvbmFsKCkpOworICAgIG1fc3RyaW5nQnVpbGRl
ci5hcHBlbmQobWFrZVN0cmluZygiaWYgKCIsIG1fc3RhY2sudGFrZUxhc3QoKSwgIikge1xuIikp
OworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChpZlN0YXRlbWVudC5ib2R5KCkpOworICAgIGlmIChp
ZlN0YXRlbWVudC5lbHNlQm9keSgpKSB7CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQo
In0gZWxzZSB7XG4iKTsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCppZlN0YXRlbWVudC5l
bHNlQm9keSgpKTsKICAgICB9CisgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgifVxuIik7Cit9
CiAKLSAgICB2b2lkIHZpc2l0KEFTVDo6UmV0dXJuJiByZXR1cm5TdGF0ZW1lbnQpIG92ZXJyaWRl
Ci0gICAgewotICAgICAgICBpZiAocmV0dXJuU3RhdGVtZW50LnZhbHVlKCkpIHsKLSAgICAgICAg
ICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqcmV0dXJuU3RhdGVtZW50LnZhbHVlKCkpOwotICAgICAg
ICAgICAgaWYgKG1fZW50cnlQb2ludFNjYWZmb2xkaW5nKSB7Ci0gICAgICAgICAgICAgICAgYXV0
byB2YXJpYWJsZU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKLSAgICAgICAgICAg
ICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1fZW50cnlQb2ludFNjYWZmb2xkaW5nLT5wYWNr
KG1fc3RhY2sudGFrZUxhc3QoKSwgdmFyaWFibGVOYW1lKSk7Ci0gICAgICAgICAgICAgICAgbV9z
dHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJyZXR1cm4gIiwgdmFyaWFibGVOYW1lLCAi
O1xuIikpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgbV9zdHJpbmdCdWls
ZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJyZXR1cm4gIiwgbV9zdGFjay50YWtlTGFzdCgpLCAiO1xu
IikpOwordm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6UmV0dXJuJiBy
ZXR1cm5TdGF0ZW1lbnQpCit7CisgICAgaWYgKHJldHVyblN0YXRlbWVudC52YWx1ZSgpKSB7Cisg
ICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqcmV0dXJuU3RhdGVtZW50LnZhbHVlKCkpOworICAg
ICAgICBpZiAobV9lbnRyeVBvaW50U2NhZmZvbGRpbmcpIHsKKyAgICAgICAgICAgIGF1dG8gdmFy
aWFibGVOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7CisgICAgICAgICAgICBtX3N0
cmluZ0J1aWxkZXIuYXBwZW5kKG1fZW50cnlQb2ludFNjYWZmb2xkaW5nLT5wYWNrKG1fc3RhY2su
dGFrZUxhc3QoKSwgdmFyaWFibGVOYW1lKSk7CisgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIu
YXBwZW5kKG1ha2VTdHJpbmcoInJldHVybiAiLCB2YXJpYWJsZU5hbWUsICI7XG4iKSk7CiAgICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgicmV0dXJuO1xu
Iik7Ci0gICAgfQorICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5n
KCJyZXR1cm4gIiwgbV9zdGFjay50YWtlTGFzdCgpLCAiO1xuIikpOworICAgIH0gZWxzZQorICAg
ICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJyZXR1cm47XG4iKTsKK30KIAotICAgIHZvaWQg
dmlzaXQoQVNUOjpTd2l0Y2hTdGF0ZW1lbnQmIHN3aXRjaFN0YXRlbWVudCkgb3ZlcnJpZGUKLSAg
ICB7Ci0gICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChzd2l0Y2hTdGF0ZW1lbnQudmFsdWUoKSk7
Cit2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpTd2l0Y2hTdGF0ZW1l
bnQmIHN3aXRjaFN0YXRlbWVudCkKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoc3dpdGNoU3Rh
dGVtZW50LnZhbHVlKCkpOwogCi0gICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0
cmluZygic3dpdGNoICgiLCBtX3N0YWNrLnRha2VMYXN0KCksICIpIHsiKSk7Ci0gICAgICAgIGZv
ciAoYXV0byYgc3dpdGNoQ2FzZSA6IHN3aXRjaFN0YXRlbWVudC5zd2l0Y2hDYXNlcygpKQotICAg
ICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHN3aXRjaENhc2UpOwotICAgICAgICBtX3N0cmlu
Z0J1aWxkZXIuYXBwZW5kKCJ9XG4iKTsKLSAgICB9CisgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVu
ZChtYWtlU3RyaW5nKCJzd2l0Y2ggKCIsIG1fc3RhY2sudGFrZUxhc3QoKSwgIikgeyIpKTsKKyAg
ICBmb3IgKGF1dG8mIHN3aXRjaENhc2UgOiBzd2l0Y2hTdGF0ZW1lbnQuc3dpdGNoQ2FzZXMoKSkK
KyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHN3aXRjaENhc2UpOworICAgIG1fc3RyaW5nQnVp
bGRlci5hcHBlbmQoIn1cbiIpOworfQogCi0gICAgdm9pZCB2aXNpdChBU1Q6OlN3aXRjaENhc2Um
IHN3aXRjaENhc2UpIG92ZXJyaWRlCi0gICAgewotICAgICAgICBpZiAoc3dpdGNoQ2FzZS52YWx1
ZSgpKQotICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJjYXNl
ICIsIGNvbnN0YW50RXhwcmVzc2lvblN0cmluZygqc3dpdGNoQ2FzZS52YWx1ZSgpKSwgIjpcbiIp
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiZGVm
YXVsdDpcbiIpOwotICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoc3dpdGNoQ2FzZS5ibG9jaygp
KTsKLSAgICAgICAgLy8gRklYTUU6IEZpZ3VyZSBvdXQgd2hldGhlciB3ZSBuZWVkIHRvIGJyZWFr
IG9yIGZhbGx0aHJvdWdoLgotICAgICAgICBDUkFTSCgpOwotICAgIH0KK3ZvaWQgRnVuY3Rpb25E
ZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OlN3aXRjaENhc2UmIHN3aXRjaENhc2UpCit7Cisg
ICAgaWYgKHN3aXRjaENhc2UudmFsdWUoKSkKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVu
ZChtYWtlU3RyaW5nKCJjYXNlICIsIGNvbnN0YW50RXhwcmVzc2lvblN0cmluZygqc3dpdGNoQ2Fz
ZS52YWx1ZSgpKSwgIjpcbiIpKTsKKyAgICBlbHNlCisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5h
cHBlbmQoImRlZmF1bHQ6XG4iKTsKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoc3dpdGNoQ2FzZS5i
bG9jaygpKTsKKyAgICAvLyBGSVhNRTogRmlndXJlIG91dCB3aGV0aGVyIHdlIG5lZWQgdG8gYnJl
YWsgb3IgZmFsbHRocm91Z2guCisgICAgQ1JBU0goKTsKK30KIAotICAgIHZvaWQgdmlzaXQoQVNU
OjpUcmFwJikgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhp
cwotICAgICAgICBDUkFTSCgpOwotICAgIH0KK3ZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVy
Ojp2aXNpdChBU1Q6OlRyYXAmKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcworICAg
IENSQVNIKCk7Cit9CiAKLSAgICB2b2lkIHZpc2l0KEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnNT
dGF0ZW1lbnQmIHZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50KSBvdmVycmlkZQotICAgIHsK
LSAgICAgICAgVmlzaXRvcjo6dmlzaXQodmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQpOwot
ICAgIH0KK3ZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OlZhcmlhYmxl
RGVjbGFyYXRpb25zU3RhdGVtZW50JiB2YXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCkKK3sK
KyAgICBWaXNpdG9yOjp2aXNpdCh2YXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCk7Cit9CiAK
LSAgICB2b2lkIHZpc2l0KEFTVDo6V2hpbGVMb29wJiB3aGlsZUxvb3ApIG92ZXJyaWRlCi0gICAg
ewotICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIndoaWxlICh0cnVl
KSB7XG4iKSk7Ci0gICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh3aGlsZUxvb3AuY29uZGl0aW9u
YWwoKSk7Ci0gICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiaWYgKCEi
LCBtX3N0YWNrLnRha2VMYXN0KCksICIpIGJyZWFrO1xuIikpOwotICAgICAgICBjaGVja0Vycm9y
QW5kVmlzaXQod2hpbGVMb29wLmJvZHkoKSk7Ci0gICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBl
bmQoIn1cbiIpOwotICAgIH0KK3ZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChB
U1Q6OldoaWxlTG9vcCYgd2hpbGVMb29wKQoreworICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQo
bWFrZVN0cmluZygid2hpbGUgKHRydWUpIHtcbiIpKTsKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQo
d2hpbGVMb29wLmNvbmRpdGlvbmFsKCkpOworICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFr
ZVN0cmluZygiaWYgKCEiLCBtX3N0YWNrLnRha2VMYXN0KCksICIpIGJyZWFrO1xuIikpOworICAg
IGNoZWNrRXJyb3JBbmRWaXNpdCh3aGlsZUxvb3AuYm9keSgpKTsKKyAgICBtX3N0cmluZ0J1aWxk
ZXIuYXBwZW5kKCJ9XG4iKTsKK30KIAotICAgIHZvaWQgdmlzaXQoQVNUOjpJbnRlZ2VyTGl0ZXJh
bCYgaW50ZWdlckxpdGVyYWwpIG92ZXJyaWRlCi0gICAgewotICAgICAgICBBU1NFUlQoaW50ZWdl
ckxpdGVyYWwucmVzb2x2ZWRUeXBlKCkpOwotICAgICAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdl
bmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOwotICAgICAgICBhdXRvIG1hbmdsZWRUeXBlTmFtZSA9
IG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqaW50ZWdlckxpdGVyYWwucmVzb2x2ZWRU
eXBlKCkpOwotICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWFuZ2xl
ZFR5cGVOYW1lLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9IHN0YXRpY19jYXN0PCIsIG1hbmdsZWRU
eXBlTmFtZSwgIj4oIiwgaW50ZWdlckxpdGVyYWwudmFsdWUoKSwgIik7XG4iKSk7Ci0gICAgICAg
IG1fc3RhY2suYXBwZW5kKHZhcmlhYmxlTmFtZSk7Ci0gICAgfQordm9pZCBGdW5jdGlvbkRlZmlu
aXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6SW50ZWdlckxpdGVyYWwmIGludGVnZXJMaXRlcmFsKQor
eworICAgIEFTU0VSVChpbnRlZ2VyTGl0ZXJhbC5yZXNvbHZlZFR5cGUoKSk7CisgICAgYXV0byB2
YXJpYWJsZU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKKyAgICBhdXRvIG1hbmds
ZWRUeXBlTmFtZSA9IG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqaW50ZWdlckxpdGVy
YWwucmVzb2x2ZWRUeXBlKCkpOworICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmlu
ZyhtYW5nbGVkVHlwZU5hbWUsICcgJywgdmFyaWFibGVOYW1lLCAiID0gc3RhdGljX2Nhc3Q8Iiwg
bWFuZ2xlZFR5cGVOYW1lLCAiPigiLCBpbnRlZ2VyTGl0ZXJhbC52YWx1ZSgpLCAiKTtcbiIpKTsK
KyAgICBtX3N0YWNrLmFwcGVuZCh2YXJpYWJsZU5hbWUpOworfQogCi0gICAgdm9pZCB2aXNpdChB
U1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWwmIHVuc2lnbmVkSW50ZWdlckxpdGVyYWwpIG92ZXJy
aWRlCi0gICAgewotICAgICAgICBBU1NFUlQodW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC5yZXNvbHZl
ZFR5cGUoKSk7Ci0gICAgICAgIGF1dG8gdmFyaWFibGVOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFi
bGVOYW1lKCk7Ci0gICAgICAgIGF1dG8gbWFuZ2xlZFR5cGVOYW1lID0gbV90eXBlTmFtZXIubWFu
Z2xlZE5hbWVGb3JUeXBlKCp1bnNpZ25lZEludGVnZXJMaXRlcmFsLnJlc29sdmVkVHlwZSgpKTsK
LSAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1hbmdsZWRUeXBlTmFt
ZSwgJyAnLCB2YXJpYWJsZU5hbWUsICIgPSBzdGF0aWNfY2FzdDwiLCBtYW5nbGVkVHlwZU5hbWUs
ICI+KCIsIHVuc2lnbmVkSW50ZWdlckxpdGVyYWwudmFsdWUoKSwgIik7XG4iKSk7Ci0gICAgICAg
IG1fc3RhY2suYXBwZW5kKHZhcmlhYmxlTmFtZSk7Ci0gICAgfQordm9pZCBGdW5jdGlvbkRlZmlu
aXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCYgdW5zaWduZWRJ
bnRlZ2VyTGl0ZXJhbCkKK3sKKyAgICBBU1NFUlQodW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC5yZXNv
bHZlZFR5cGUoKSk7CisgICAgYXV0byB2YXJpYWJsZU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJs
ZU5hbWUoKTsKKyAgICBhdXRvIG1hbmdsZWRUeXBlTmFtZSA9IG1fdHlwZU5hbWVyLm1hbmdsZWRO
YW1lRm9yVHlwZSgqdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC5yZXNvbHZlZFR5cGUoKSk7CisgICAg
bV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1hbmdsZWRUeXBlTmFtZSwgJyAnLCB2
YXJpYWJsZU5hbWUsICIgPSBzdGF0aWNfY2FzdDwiLCBtYW5nbGVkVHlwZU5hbWUsICI+KCIsIHVu
c2lnbmVkSW50ZWdlckxpdGVyYWwudmFsdWUoKSwgIik7XG4iKSk7CisgICAgbV9zdGFjay5hcHBl
bmQodmFyaWFibGVOYW1lKTsKK30KIAotICAgIHZvaWQgdmlzaXQoQVNUOjpGbG9hdExpdGVyYWwm
IGZsb2F0TGl0ZXJhbCkgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIEFTU0VSVChmbG9hdExpdGVy
YWwucmVzb2x2ZWRUeXBlKCkpOwotICAgICAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdlbmVyYXRl
TmV4dFZhcmlhYmxlTmFtZSgpOwotICAgICAgICBhdXRvIG1hbmdsZWRUeXBlTmFtZSA9IG1fdHlw
ZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqZmxvYXRMaXRlcmFsLnJlc29sdmVkVHlwZSgpKTsK
LSAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1hbmdsZWRUeXBlTmFt
ZSwgJyAnLCB2YXJpYWJsZU5hbWUsICIgPSBzdGF0aWNfY2FzdDwiLCBtYW5nbGVkVHlwZU5hbWUs
ICI+KCIsIGZsb2F0TGl0ZXJhbC52YWx1ZSgpLCAiKTtcbiIpKTsKLSAgICAgICAgbV9zdGFjay5h
cHBlbmQodmFyaWFibGVOYW1lKTsKLSAgICB9Cit2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRl
cjo6dmlzaXQoQVNUOjpGbG9hdExpdGVyYWwmIGZsb2F0TGl0ZXJhbCkKK3sKKyAgICBBU1NFUlQo
ZmxvYXRMaXRlcmFsLnJlc29sdmVkVHlwZSgpKTsKKyAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdl
bmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOworICAgIGF1dG8gbWFuZ2xlZFR5cGVOYW1lID0gbV90
eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpmbG9hdExpdGVyYWwucmVzb2x2ZWRUeXBlKCkp
OworICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtYW5nbGVkVHlwZU5hbWUs
ICcgJywgdmFyaWFibGVOYW1lLCAiID0gc3RhdGljX2Nhc3Q8IiwgbWFuZ2xlZFR5cGVOYW1lLCAi
PigiLCBmbG9hdExpdGVyYWwudmFsdWUoKSwgIik7XG4iKSk7CisgICAgbV9zdGFjay5hcHBlbmQo
dmFyaWFibGVOYW1lKTsKK30KIAotICAgIHZvaWQgdmlzaXQoQVNUOjpOdWxsTGl0ZXJhbCYgbnVs
bExpdGVyYWwpIG92ZXJyaWRlCi0gICAgewotICAgICAgICBBU1NFUlQobnVsbExpdGVyYWwucmVz
b2x2ZWRUeXBlKCkpOwotICAgICAgICBhdXRvJiB1bmlmeU5vZGUgPSBudWxsTGl0ZXJhbC5yZXNv
bHZlZFR5cGUoKS0+dW5pZnlOb2RlKCk7Ci0gICAgICAgIEFTU0VSVChpczxBU1Q6OlVubmFtZWRU
eXBlPih1bmlmeU5vZGUpKTsKLSAgICAgICAgYXV0byYgdW5uYW1lZFR5cGUgPSBkb3duY2FzdDxB
U1Q6OlVubmFtZWRUeXBlPih1bmlmeU5vZGUpOwotICAgICAgICBib29sIGlzQXJyYXlSZWZlcmVu
Y2VUeXBlID0gaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHVubmFtZWRUeXBlKTsKLQotICAg
ICAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOwotICAg
ICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobV90eXBlTmFtZXIubWFuZ2xl
ZE5hbWVGb3JUeXBlKCpudWxsTGl0ZXJhbC5yZXNvbHZlZFR5cGUoKSksICcgJywgdmFyaWFibGVO
YW1lLCAiID0gIikpOwotICAgICAgICBpZiAoaXNBcnJheVJlZmVyZW5jZVR5cGUpCi0gICAgICAg
ICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJ7IG51bGxwdHIsIDAgfSIpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJudWxscHRyIik7Ci0gICAg
ICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIjtcbiIpOwotICAgICAgICBtX3N0YWNrLmFwcGVu
ZCh2YXJpYWJsZU5hbWUpOwotICAgIH0KK3ZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2
aXNpdChBU1Q6Ok51bGxMaXRlcmFsJiBudWxsTGl0ZXJhbCkKK3sKKyAgICBBU1NFUlQobnVsbExp
dGVyYWwucmVzb2x2ZWRUeXBlKCkpOworICAgIGF1dG8mIHVuaWZ5Tm9kZSA9IG51bGxMaXRlcmFs
LnJlc29sdmVkVHlwZSgpLT51bmlmeU5vZGUoKTsKKyAgICBBU1NFUlQoaXM8QVNUOjpVbm5hbWVk
VHlwZT4odW5pZnlOb2RlKSk7CisgICAgYXV0byYgdW5uYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6
OlVubmFtZWRUeXBlPih1bmlmeU5vZGUpOworICAgIGJvb2wgaXNBcnJheVJlZmVyZW5jZVR5cGUg
PSBpczxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4odW5uYW1lZFR5cGUpOworCisgICAgYXV0byB2
YXJpYWJsZU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKKyAgICBtX3N0cmluZ0J1
aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpu
dWxsTGl0ZXJhbC5yZXNvbHZlZFR5cGUoKSksICcgJywgdmFyaWFibGVOYW1lLCAiID0gIikpOwor
ICAgIGlmIChpc0FycmF5UmVmZXJlbmNlVHlwZSkKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFw
cGVuZCgieyBudWxscHRyLCAwIH0iKTsKKyAgICBlbHNlCisgICAgICAgIG1fc3RyaW5nQnVpbGRl
ci5hcHBlbmQoIm51bGxwdHIiKTsKKyAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCI7XG4iKTsK
KyAgICBtX3N0YWNrLmFwcGVuZCh2YXJpYWJsZU5hbWUpOworfQogCi0gICAgdm9pZCB2aXNpdChB
U1Q6OkJvb2xlYW5MaXRlcmFsJiBib29sZWFuTGl0ZXJhbCkgb3ZlcnJpZGUKLSAgICB7Ci0gICAg
ICAgIEFTU0VSVChib29sZWFuTGl0ZXJhbC5yZXNvbHZlZFR5cGUoKSk7Ci0gICAgICAgIGF1dG8g
dmFyaWFibGVOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7Ci0gICAgICAgIGF1dG8g
bWFuZ2xlZFR5cGVOYW1lID0gbV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpib29sZWFu
TGl0ZXJhbC5yZXNvbHZlZFR5cGUoKSk7Ci0gICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQo
bWFrZVN0cmluZyhtYW5nbGVkVHlwZU5hbWUsICcgJywgdmFyaWFibGVOYW1lLCAiID0gc3RhdGlj
X2Nhc3Q8IiwgbWFuZ2xlZFR5cGVOYW1lLCAiPigiLCBib29sZWFuTGl0ZXJhbC52YWx1ZSgpID8g
InRydWUiIDogImZhbHNlIiwgIik7XG4iKSk7Ci0gICAgICAgIG1fc3RhY2suYXBwZW5kKHZhcmlh
YmxlTmFtZSk7Ci0gICAgfQordm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFT
VDo6Qm9vbGVhbkxpdGVyYWwmIGJvb2xlYW5MaXRlcmFsKQoreworICAgIEFTU0VSVChib29sZWFu
TGl0ZXJhbC5yZXNvbHZlZFR5cGUoKSk7CisgICAgYXV0byB2YXJpYWJsZU5hbWUgPSBnZW5lcmF0
ZU5leHRWYXJpYWJsZU5hbWUoKTsKKyAgICBhdXRvIG1hbmdsZWRUeXBlTmFtZSA9IG1fdHlwZU5h
bWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqYm9vbGVhbkxpdGVyYWwucmVzb2x2ZWRUeXBlKCkpOwor
ICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtYW5nbGVkVHlwZU5hbWUsICcg
JywgdmFyaWFibGVOYW1lLCAiID0gc3RhdGljX2Nhc3Q8IiwgbWFuZ2xlZFR5cGVOYW1lLCAiPigi
LCBib29sZWFuTGl0ZXJhbC52YWx1ZSgpID8gInRydWUiIDogImZhbHNlIiwgIik7XG4iKSk7Cisg
ICAgbV9zdGFjay5hcHBlbmQodmFyaWFibGVOYW1lKTsKK30KIAotICAgIHZvaWQgdmlzaXQoQVNU
OjpFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwmIGVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCkgb3Zl
cnJpZGUKLSAgICB7Ci0gICAgICAgIEFTU0VSVChlbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwucmVz
b2x2ZWRUeXBlKCkpOwotICAgICAgICBBU1NFUlQoZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLmVu
dW1lcmF0aW9uRGVmaW5pdGlvbigpKTsKLSAgICAgICAgQVNTRVJUKGVudW1lcmF0aW9uTWVtYmVy
TGl0ZXJhbC5lbnVtZXJhdGlvbkRlZmluaXRpb24oKSk7Ci0gICAgICAgIGF1dG8gdmFyaWFibGVO
YW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7Ci0gICAgICAgIGF1dG8gbWFuZ2xlZFR5
cGVOYW1lID0gbV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCplbnVtZXJhdGlvbk1lbWJl
ckxpdGVyYWwucmVzb2x2ZWRUeXBlKCkpOwotICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5k
KG1ha2VTdHJpbmcobWFuZ2xlZFR5cGVOYW1lLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9ICIsIG1h
bmdsZWRUeXBlTmFtZSwgJy4nLCBtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvckVudW1lcmF0aW9u
TWVtYmVyKCplbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuZW51bWVyYXRpb25NZW1iZXIoKSksICI7
XG4iKSk7Ci0gICAgICAgIG1fc3RhY2suYXBwZW5kKHZhcmlhYmxlTmFtZSk7Ci0gICAgfQordm9p
ZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6RW51bWVyYXRpb25NZW1iZXJM
aXRlcmFsJiBlbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwpCit7CisgICAgQVNTRVJUKGVudW1lcmF0
aW9uTWVtYmVyTGl0ZXJhbC5yZXNvbHZlZFR5cGUoKSk7CisgICAgQVNTRVJUKGVudW1lcmF0aW9u
TWVtYmVyTGl0ZXJhbC5lbnVtZXJhdGlvbkRlZmluaXRpb24oKSk7CisgICAgQVNTRVJUKGVudW1l
cmF0aW9uTWVtYmVyTGl0ZXJhbC5lbnVtZXJhdGlvbkRlZmluaXRpb24oKSk7CisgICAgYXV0byB2
YXJpYWJsZU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKKyAgICBhdXRvIG1hbmds
ZWRUeXBlTmFtZSA9IG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqZW51bWVyYXRpb25N
ZW1iZXJMaXRlcmFsLnJlc29sdmVkVHlwZSgpKTsKKyAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5k
KG1ha2VTdHJpbmcobWFuZ2xlZFR5cGVOYW1lLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9ICIsIG1h
bmdsZWRUeXBlTmFtZSwgJy4nLCBtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvckVudW1lcmF0aW9u
TWVtYmVyKCplbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuZW51bWVyYXRpb25NZW1iZXIoKSksICI7
XG4iKSk7CisgICAgbV9zdGFjay5hcHBlbmQodmFyaWFibGVOYW1lKTsKK30KIAotICAgIHZvaWQg
dmlzaXQoQVNUOjpFeHByZXNzaW9uJiBleHByZXNzaW9uKSBvdmVycmlkZQotICAgIHsKLSAgICAg
ICAgVmlzaXRvcjo6dmlzaXQoZXhwcmVzc2lvbik7Ci0gICAgfQordm9pZCBGdW5jdGlvbkRlZmlu
aXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6RXhwcmVzc2lvbiYgZXhwcmVzc2lvbikKK3sKKyAgICBW
aXNpdG9yOjp2aXNpdChleHByZXNzaW9uKTsKK30KIAotICAgIHZvaWQgdmlzaXQoQVNUOjpEb3RF
eHByZXNzaW9uJikgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIC8vIFRoaXMgc2hvdWxkIGJlIGxv
d2VyZWQgYWxyZWFkeS4KLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQordm9p
ZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6RG90RXhwcmVzc2lvbiYpCit7
CisgICAgLy8gVGhpcyBzaG91bGQgYmUgbG93ZXJlZCBhbHJlYWR5LgorICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworfQogCi0gICAgdm9pZCB2aXNpdChBU1Q6OkluZGV4RXhwcmVzc2lvbiYpIG92
ZXJyaWRlCi0gICAgewotICAgICAgICAvLyBUaGlzIHNob3VsZCBiZSBsb3dlcmVkIGFscmVhZHku
Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KK3ZvaWQgRnVuY3Rpb25EZWZp
bml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OkluZGV4RXhwcmVzc2lvbiYpCit7CisgICAgLy8gVGhp
cyBzaG91bGQgYmUgbG93ZXJlZCBhbHJlYWR5LgorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
fQogCi0gICAgdm9pZCB2aXNpdChBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiYpIG92ZXJy
aWRlCi0gICAgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Cit2b2lkIEZ1
bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Np
b24mKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQogCi0gICAgdm9pZCB2aXNpdChB
U1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24mIHZhcmlhYmxlRGVjbGFyYXRpb24pIG92ZXJyaWRlCi0g
ICAgewotICAgICAgICBBU1NFUlQodmFyaWFibGVEZWNsYXJhdGlvbi50eXBlKCkpOwotICAgICAg
ICBpZiAodmFyaWFibGVEZWNsYXJhdGlvbi5pbml0aWFsaXplcigpKQotICAgICAgICAgICAgY2hl
Y2tFcnJvckFuZFZpc2l0KCp2YXJpYWJsZURlY2xhcmF0aW9uLmluaXRpYWxpemVyKCkpOwotICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBaZXJvLWZpbGwgdGhlIHZhcmlhYmxl
LgotICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgfQotICAgICAgICAvLyBGSVhNRTogSW1w
bGVtZW50IHF1YWxpZmllcnMuCi0gICAgICAgIGF1dG8gdmFyaWFibGVOYW1lID0gZ2VuZXJhdGVO
ZXh0VmFyaWFibGVOYW1lKCk7Ci0gICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV92YXJpYWJsZU1h
cHBpbmcuYWRkKCZ2YXJpYWJsZURlY2xhcmF0aW9uLCB2YXJpYWJsZU5hbWUpOwotICAgICAgICBB
U1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOwotICAgICAgICBt
X3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobV90eXBlTmFtZXIubWFuZ2xlZE5hbWVG
b3JUeXBlKCp2YXJpYWJsZURlY2xhcmF0aW9uLnR5cGUoKSksICcgJywgdmFyaWFibGVOYW1lLCAi
ID0gIiwgbV9zdGFjay50YWtlTGFzdCgpLCAiO1xuIikpOwotICAgICAgICBtX3N0YWNrLmFwcGVu
ZCh2YXJpYWJsZU5hbWUpOwordm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFT
VDo6VmFyaWFibGVEZWNsYXJhdGlvbiYgdmFyaWFibGVEZWNsYXJhdGlvbikKK3sKKyAgICBBU1NF
UlQodmFyaWFibGVEZWNsYXJhdGlvbi50eXBlKCkpOworICAgIGlmICh2YXJpYWJsZURlY2xhcmF0
aW9uLmluaXRpYWxpemVyKCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqdmFyaWFibGVE
ZWNsYXJhdGlvbi5pbml0aWFsaXplcigpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgLy8gRklYTUU6
IFplcm8tZmlsbCB0aGUgdmFyaWFibGUuCisgICAgICAgIENSQVNIKCk7CiAgICAgfQorICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgcXVhbGlmaWVycy4KKyAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdl
bmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOworICAgIGF1dG8gYWRkUmVzdWx0ID0gbV92YXJpYWJs
ZU1hcHBpbmcuYWRkKCZ2YXJpYWJsZURlY2xhcmF0aW9uLCB2YXJpYWJsZU5hbWUpOworICAgIEFT
U0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgbV9zdHJp
bmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlw
ZSgqdmFyaWFibGVEZWNsYXJhdGlvbi50eXBlKCkpLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9ICIs
IG1fc3RhY2sudGFrZUxhc3QoKSwgIjtcbiIpKTsKKyAgICBtX3N0YWNrLmFwcGVuZCh2YXJpYWJs
ZU5hbWUpOworfQogCi0gICAgdm9pZCB2aXNpdChBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uJiBh
c3NpZ25tZW50RXhwcmVzc2lvbikgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIGNoZWNrRXJyb3JB
bmRWaXNpdChhc3NpZ25tZW50RXhwcmVzc2lvbi5sZWZ0KCkpOwotICAgICAgICBhdXRvIGxlZnRO
YW1lID0gbV9zdGFjay50YWtlTGFzdCgpOwotICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoYXNz
aWdubWVudEV4cHJlc3Npb24ucmlnaHQoKSk7Ci0gICAgICAgIGF1dG8gcmlnaHROYW1lID0gbV9z
dGFjay50YWtlTGFzdCgpOwotICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJp
bmcobGVmdE5hbWUsICIgPSAiLCByaWdodE5hbWUsICI7XG4iKSk7Ci0gICAgfQordm9pZCBGdW5j
dGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24mIGFz
c2lnbm1lbnRFeHByZXNzaW9uKQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChhc3NpZ25tZW50
RXhwcmVzc2lvbi5sZWZ0KCkpOworICAgIGF1dG8gbGVmdE5hbWUgPSBtX3N0YWNrLnRha2VMYXN0
KCk7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KGFzc2lnbm1lbnRFeHByZXNzaW9uLnJpZ2h0KCkp
OworICAgIGF1dG8gcmlnaHROYW1lID0gbV9zdGFjay50YWtlTGFzdCgpOworICAgIG1fc3RyaW5n
QnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhsZWZ0TmFtZSwgIiA9ICIsIHJpZ2h0TmFtZSwgIjtc
biIpKTsKK30KIAotICAgIHZvaWQgdmlzaXQoQVNUOjpDYWxsRXhwcmVzc2lvbiYgY2FsbEV4cHJl
c3Npb24pIG92ZXJyaWRlCi0gICAgewotICAgICAgICBWZWN0b3I8U3RyaW5nPiBhcmd1bWVudE5h
bWVzOwotICAgICAgICBmb3IgKGF1dG8mIGFyZ3VtZW50IDogY2FsbEV4cHJlc3Npb24uYXJndW1l
bnRzKCkpIHsKLSAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChhcmd1bWVudCk7Ci0gICAg
ICAgICAgICBhcmd1bWVudE5hbWVzLmFwcGVuZChtX3N0YWNrLnRha2VMYXN0KCkpOwotICAgICAg
ICB9Ci0gICAgICAgIEFTU0VSVChjYWxsRXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSk7Ci0gICAg
ICAgIEFTU0VSVChjYWxsRXhwcmVzc2lvbi5mdW5jdGlvbigpKTsKLSAgICAgICAgYXV0byBpdGVy
YXRvciA9IG1fZnVuY3Rpb25NYXBwaW5nLmZpbmQoY2FsbEV4cHJlc3Npb24uZnVuY3Rpb24oKSk7
Ci0gICAgICAgIEFTU0VSVChpdGVyYXRvciAhPSBtX2Z1bmN0aW9uTWFwcGluZy5lbmQoKSk7Ci0g
ICAgICAgIGF1dG8gdmFyaWFibGVOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7Ci0g
ICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtX3R5cGVOYW1lci5tYW5n
bGVkTmFtZUZvclR5cGUoKmNhbGxFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKSwgJyAnLCB2YXJp
YWJsZU5hbWUsICIgPSAiLCBpdGVyYXRvci0+dmFsdWUsICcoJykpOwotICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGFyZ3VtZW50TmFtZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAg
IGlmIChpKQotICAgICAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIiwgIik7Ci0g
ICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKGFyZ3VtZW50TmFtZXNbaV0pOwotICAg
ICAgICB9Ci0gICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIik7XG4iKTsKLSAgICAgICAg
bV9zdGFjay5hcHBlbmQodmFyaWFibGVOYW1lKTsKLSAgICB9Cit2b2lkIEZ1bmN0aW9uRGVmaW5p
dGlvbldyaXRlcjo6dmlzaXQoQVNUOjpDYWxsRXhwcmVzc2lvbiYgY2FsbEV4cHJlc3Npb24pCit7
CisgICAgVmVjdG9yPFN0cmluZz4gYXJndW1lbnROYW1lczsKKyAgICBmb3IgKGF1dG8mIGFyZ3Vt
ZW50IDogY2FsbEV4cHJlc3Npb24uYXJndW1lbnRzKCkpIHsKKyAgICAgICAgY2hlY2tFcnJvckFu
ZFZpc2l0KGFyZ3VtZW50KTsKKyAgICAgICAgYXJndW1lbnROYW1lcy5hcHBlbmQobV9zdGFjay50
YWtlTGFzdCgpKTsKKyAgICB9CisgICAgQVNTRVJUKGNhbGxFeHByZXNzaW9uLnJlc29sdmVkVHlw
ZSgpKTsKKyAgICBBU1NFUlQoY2FsbEV4cHJlc3Npb24uZnVuY3Rpb24oKSk7CisgICAgYXV0byBp
dGVyYXRvciA9IG1fZnVuY3Rpb25NYXBwaW5nLmZpbmQoY2FsbEV4cHJlc3Npb24uZnVuY3Rpb24o
KSk7CisgICAgQVNTRVJUKGl0ZXJhdG9yICE9IG1fZnVuY3Rpb25NYXBwaW5nLmVuZCgpKTsKKyAg
ICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOworICAgIG1f
c3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZv
clR5cGUoKmNhbGxFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKSwgJyAnLCB2YXJpYWJsZU5hbWUs
ICIgPSAiLCBpdGVyYXRvci0+dmFsdWUsICcoJykpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgYXJndW1lbnROYW1lcy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoaSkKKyAgICAgICAg
ICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIiwgIik7CisgICAgICAgIG1fc3RyaW5nQnVpbGRl
ci5hcHBlbmQoYXJndW1lbnROYW1lc1tpXSk7CisgICAgfQorICAgIG1fc3RyaW5nQnVpbGRlci5h
cHBlbmQoIik7XG4iKTsKKyAgICBtX3N0YWNrLmFwcGVuZCh2YXJpYWJsZU5hbWUpOworfQogCi0g
ICAgdm9pZCB2aXNpdChBU1Q6OkNvbW1hRXhwcmVzc2lvbiYgY29tbWFFeHByZXNzaW9uKSBvdmVy
cmlkZQotICAgIHsKLSAgICAgICAgU3RyaW5nIHJlc3VsdDsKLSAgICAgICAgZm9yIChhdXRvJiBl
eHByZXNzaW9uIDogY29tbWFFeHByZXNzaW9uLmxpc3QoKSkgewotICAgICAgICAgICAgY2hlY2tF
cnJvckFuZFZpc2l0KGV4cHJlc3Npb24pOwotICAgICAgICAgICAgcmVzdWx0ID0gbV9zdGFjay50
YWtlTGFzdCgpOwotICAgICAgICB9Ci0gICAgICAgIG1fc3RhY2suYXBwZW5kKHJlc3VsdCk7Cit2
b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpDb21tYUV4cHJlc3Npb24m
IGNvbW1hRXhwcmVzc2lvbikKK3sKKyAgICBTdHJpbmcgcmVzdWx0OworICAgIGZvciAoYXV0byYg
ZXhwcmVzc2lvbiA6IGNvbW1hRXhwcmVzc2lvbi5saXN0KCkpIHsKKyAgICAgICAgY2hlY2tFcnJv
ckFuZFZpc2l0KGV4cHJlc3Npb24pOworICAgICAgICByZXN1bHQgPSBtX3N0YWNrLnRha2VMYXN0
KCk7CiAgICAgfQorICAgIG1fc3RhY2suYXBwZW5kKHJlc3VsdCk7Cit9CiAKLSAgICB2b2lkIHZp
c2l0KEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uJiBkZXJlZmVyZW5jZUV4cHJlc3Npb24pIG92
ZXJyaWRlCi0gICAgewotICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZGVyZWZlcmVuY2VFeHBy
ZXNzaW9uLnBvaW50ZXIoKSk7Ci0gICAgICAgIGF1dG8gcmlnaHQgPSBtX3N0YWNrLnRha2VMYXN0
KCk7Ci0gICAgICAgIEFTU0VSVChkZXJlZmVyZW5jZUV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkp
OwotICAgICAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgp
OwotICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobV90eXBlTmFtZXIu
bWFuZ2xlZE5hbWVGb3JUeXBlKCpkZXJlZmVyZW5jZUV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkp
LCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9ICoiLCByaWdodCwgIjtcbiIpKTsKLSAgICAgICAgbV9z
dGFjay5hcHBlbmQodmFyaWFibGVOYW1lKTsKLSAgICB9Cit2b2lkIEZ1bmN0aW9uRGVmaW5pdGlv
bldyaXRlcjo6dmlzaXQoQVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24mIGRlcmVmZXJlbmNlRXhw
cmVzc2lvbikKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoZGVyZWZlcmVuY2VFeHByZXNzaW9u
LnBvaW50ZXIoKSk7CisgICAgYXV0byByaWdodCA9IG1fc3RhY2sudGFrZUxhc3QoKTsKKyAgICBB
U1NFUlQoZGVyZWZlcmVuY2VFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKTsKKyAgICBhdXRvIHZh
cmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOworICAgIG1fc3RyaW5nQnVp
bGRlci5hcHBlbmQobWFrZVN0cmluZyhtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKmRl
cmVmZXJlbmNlRXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSksICcgJywgdmFyaWFibGVOYW1lLCAi
ID0gKiIsIHJpZ2h0LCAiO1xuIikpOworICAgIG1fc3RhY2suYXBwZW5kKHZhcmlhYmxlTmFtZSk7
Cit9CiAKLSAgICB2b2lkIHZpc2l0KEFTVDo6TG9naWNhbEV4cHJlc3Npb24mIGxvZ2ljYWxFeHBy
ZXNzaW9uKSBvdmVycmlkZQotICAgIHsKLSAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGxvZ2lj
YWxFeHByZXNzaW9uLmxlZnQoKSk7Ci0gICAgICAgIGF1dG8gbGVmdCA9IG1fc3RhY2sudGFrZUxh
c3QoKTsKLSAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGxvZ2ljYWxFeHByZXNzaW9uLnJpZ2h0
KCkpOwotICAgICAgICBhdXRvIHJpZ2h0ID0gbV9zdGFjay50YWtlTGFzdCgpOwotICAgICAgICBB
U1NFUlQobG9naWNhbEV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpOwotICAgICAgICBhdXRvIHZh
cmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOwotICAgICAgICBtX3N0cmlu
Z0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBl
KCpsb2dpY2FsRXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSksICcgJywgdmFyaWFibGVOYW1lLCAi
ID0gIiwgbGVmdCkpOwotICAgICAgICBzd2l0Y2ggKGxvZ2ljYWxFeHByZXNzaW9uLnR5cGUoKSkg
ewotICAgICAgICBjYXNlIEFTVDo6TG9naWNhbEV4cHJlc3Npb246OlR5cGU6OkFuZDoKLSAgICAg
ICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIiAmJiAiKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUKGxvZ2ljYWxFeHByZXNzaW9u
LnR5cGUoKSA9PSBBU1Q6OkxvZ2ljYWxFeHByZXNzaW9uOjpUeXBlOjpPcik7Ci0gICAgICAgICAg
ICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCIgfHwgIik7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcocmlnaHQs
ICI7XG4iKSk7Ci0gICAgICAgIG1fc3RhY2suYXBwZW5kKHZhcmlhYmxlTmFtZSk7Ci0gICAgfQor
dm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6TG9naWNhbEV4cHJlc3Np
b24mIGxvZ2ljYWxFeHByZXNzaW9uKQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChsb2dpY2Fs
RXhwcmVzc2lvbi5sZWZ0KCkpOworICAgIGF1dG8gbGVmdCA9IG1fc3RhY2sudGFrZUxhc3QoKTsK
KyAgICBjaGVja0Vycm9yQW5kVmlzaXQobG9naWNhbEV4cHJlc3Npb24ucmlnaHQoKSk7CisgICAg
YXV0byByaWdodCA9IG1fc3RhY2sudGFrZUxhc3QoKTsKKyAgICBBU1NFUlQobG9naWNhbEV4cHJl
c3Npb24ucmVzb2x2ZWRUeXBlKCkpOworICAgIGF1dG8gdmFyaWFibGVOYW1lID0gZ2VuZXJhdGVO
ZXh0VmFyaWFibGVOYW1lKCk7CisgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5n
KG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbG9naWNhbEV4cHJlc3Npb24ucmVzb2x2
ZWRUeXBlKCkpLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9ICIsIGxlZnQpKTsKKyAgICBzd2l0Y2gg
KGxvZ2ljYWxFeHByZXNzaW9uLnR5cGUoKSkgeworICAgIGNhc2UgQVNUOjpMb2dpY2FsRXhwcmVz
c2lvbjo6VHlwZTo6QW5kOgorICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCIgJiYgIik7
CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVChsb2dpY2FsRXhw
cmVzc2lvbi50eXBlKCkgPT0gQVNUOjpMb2dpY2FsRXhwcmVzc2lvbjo6VHlwZTo6T3IpOworICAg
ICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCIgfHwgIik7CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcocmlnaHQsICI7XG4iKSk7
CisgICAgbV9zdGFjay5hcHBlbmQodmFyaWFibGVOYW1lKTsKK30KIAotICAgIHZvaWQgdmlzaXQo
QVNUOjpMb2dpY2FsTm90RXhwcmVzc2lvbiYgbG9naWNhbE5vdEV4cHJlc3Npb24pIG92ZXJyaWRl
Ci0gICAgewotICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQobG9naWNhbE5vdEV4cHJlc3Npb24u
b3BlcmFuZCgpKTsKLSAgICAgICAgYXV0byBvcGVyYW5kID0gbV9zdGFjay50YWtlTGFzdCgpOwot
ICAgICAgICBBU1NFUlQobG9naWNhbE5vdEV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpOwotICAg
ICAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOwotICAg
ICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobV90eXBlTmFtZXIubWFuZ2xl
ZE5hbWVGb3JUeXBlKCpsb2dpY2FsTm90RXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSksICcgJywg
dmFyaWFibGVOYW1lLCAiID0gISIsIG9wZXJhbmQsICI7XG4iKSk7Ci0gICAgICAgIG1fc3RhY2su
YXBwZW5kKHZhcmlhYmxlTmFtZSk7Ci0gICAgfQordm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0
ZXI6OnZpc2l0KEFTVDo6TG9naWNhbE5vdEV4cHJlc3Npb24mIGxvZ2ljYWxOb3RFeHByZXNzaW9u
KQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChsb2dpY2FsTm90RXhwcmVzc2lvbi5vcGVyYW5k
KCkpOworICAgIGF1dG8gb3BlcmFuZCA9IG1fc3RhY2sudGFrZUxhc3QoKTsKKyAgICBBU1NFUlQo
bG9naWNhbE5vdEV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpOworICAgIGF1dG8gdmFyaWFibGVO
YW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7CisgICAgbV9zdHJpbmdCdWlsZGVyLmFw
cGVuZChtYWtlU3RyaW5nKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbG9naWNhbE5v
dEV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9ICEiLCBv
cGVyYW5kLCAiO1xuIikpOworICAgIG1fc3RhY2suYXBwZW5kKHZhcmlhYmxlTmFtZSk7Cit9CiAK
LSAgICB2b2lkIHZpc2l0KEFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbiYgbWFrZUFy
cmF5UmVmZXJlbmNlRXhwcmVzc2lvbikgb3ZlcnJpZGUKK3ZvaWQgRnVuY3Rpb25EZWZpbml0aW9u
V3JpdGVyOjp2aXNpdChBU1Q6Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24mIG1ha2VBcnJh
eVJlZmVyZW5jZUV4cHJlc3Npb24pCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KG1ha2VBcnJh
eVJlZmVyZW5jZUV4cHJlc3Npb24ubFZhbHVlKCkpOworICAgIGF1dG8gbFZhbHVlID0gbV9zdGFj
ay50YWtlTGFzdCgpOworICAgIEFTU0VSVChtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLnJl
c29sdmVkVHlwZSgpKTsKKyAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlh
YmxlTmFtZSgpOworICAgIGF1dG8gbWFuZ2xlZFR5cGVOYW1lID0gbV90eXBlTmFtZXIubWFuZ2xl
ZE5hbWVGb3JUeXBlKCptYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgp
KTsKKyAgICBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4oKm1ha2VBcnJheVJlZmVyZW5jZUV4cHJl
c3Npb24ucmVzb2x2ZWRUeXBlKCkpKQorICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1h
a2VTdHJpbmcobWFuZ2xlZFR5cGVOYW1lLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9IHsgIiwgbFZh
bHVlLCAiLCAxIH07XG4iKSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpBcnJheVR5cGU+KCptYWtl
QXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKSkgeworICAgICAgICBhdXRv
JiBhcnJheVR5cGUgPSBkb3duY2FzdDxBU1Q6OkFycmF5VHlwZT4oKm1ha2VBcnJheVJlZmVyZW5j
ZUV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpOworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBw
ZW5kKG1ha2VTdHJpbmcobWFuZ2xlZFR5cGVOYW1lLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9IHsg
JigiLCBsVmFsdWUsICJbMF0pLCAiLCBhcnJheVR5cGUubnVtRWxlbWVudHMoKSwgIiB9O1xuIikp
OworICAgIH0gZWxzZQorICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmco
bWFuZ2xlZFR5cGVOYW1lLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9IHsgJiIsIGxWYWx1ZSwgIiwg
MSB9O1xuIikpOworICAgIG1fc3RhY2suYXBwZW5kKHZhcmlhYmxlTmFtZSk7Cit9CisKK3ZvaWQg
RnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lv
biYgbWFrZVBvaW50ZXJFeHByZXNzaW9uKQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChtYWtl
UG9pbnRlckV4cHJlc3Npb24ubFZhbHVlKCkpOworICAgIGF1dG8gbFZhbHVlID0gbV9zdGFjay50
YWtlTGFzdCgpOworICAgIEFTU0VSVChtYWtlUG9pbnRlckV4cHJlc3Npb24ucmVzb2x2ZWRUeXBl
KCkpOworICAgIGF1dG8gdmFyaWFibGVOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7
CisgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1fdHlwZU5hbWVyLm1hbmds
ZWROYW1lRm9yVHlwZSgqbWFrZVBvaW50ZXJFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKSwgJyAn
LCB2YXJpYWJsZU5hbWUsICIgPSAmIiwgbFZhbHVlLCAiO1xuIikpOworICAgIG1fc3RhY2suYXBw
ZW5kKHZhcmlhYmxlTmFtZSk7Cit9CisKK3ZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2
aXNpdChBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24mKQoreworICAgIC8vIFRoaXMgc2hv
dWxkIGJlIGxvd2VyZWQgYWxyZWFkeS4KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwor
dm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6VGVybmFyeUV4cHJlc3Np
b24mIHRlcm5hcnlFeHByZXNzaW9uKQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh0ZXJuYXJ5
RXhwcmVzc2lvbi5wcmVkaWNhdGUoKSk7CisgICAgYXV0byBjaGVjayA9IG1fc3RhY2sudGFrZUxh
c3QoKTsKKworICAgIEFTU0VSVCh0ZXJuYXJ5RXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSk7Cisg
ICAgYXV0byB2YXJpYWJsZU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKKyAgICBt
X3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobV90eXBlTmFtZXIubWFuZ2xlZE5hbWVG
b3JUeXBlKCp0ZXJuYXJ5RXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSksICcgJywgdmFyaWFibGVO
YW1lLCAiO1xuIikpOworCisgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJp
ZiAoIiwgY2hlY2ssICIpIHtcbiIpKTsKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQodGVybmFyeUV4
cHJlc3Npb24uYm9keUV4cHJlc3Npb24oKSk7CisgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCht
YWtlU3RyaW5nKHZhcmlhYmxlTmFtZSwgIiA9ICIsIG1fc3RhY2sudGFrZUxhc3QoKSwgIjtcbiIp
KTsKKyAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9IGVsc2Uge1xuIik7CisgICAgY2hlY2tF
cnJvckFuZFZpc2l0KHRlcm5hcnlFeHByZXNzaW9uLmVsc2VFeHByZXNzaW9uKCkpOworICAgIG1f
c3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyh2YXJpYWJsZU5hbWUsICIgPSAiLCBtX3N0
YWNrLnRha2VMYXN0KCksICI7XG4iKSk7CisgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgifVxu
Iik7CisgICAgbV9zdGFjay5hcHBlbmQodmFyaWFibGVOYW1lKTsKK30KKwordm9pZCBGdW5jdGlv
bkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6VmFyaWFibGVSZWZlcmVuY2UmIHZhcmlhYmxl
UmVmZXJlbmNlKQoreworICAgIEFTU0VSVCh2YXJpYWJsZVJlZmVyZW5jZS52YXJpYWJsZSgpKTsK
KyAgICBhdXRvIGl0ZXJhdG9yID0gbV92YXJpYWJsZU1hcHBpbmcuZmluZCh2YXJpYWJsZVJlZmVy
ZW5jZS52YXJpYWJsZSgpKTsKKyAgICBBU1NFUlQoaXRlcmF0b3IgIT0gbV92YXJpYWJsZU1hcHBp
bmcuZW5kKCkpOworICAgIG1fc3RhY2suYXBwZW5kKGl0ZXJhdG9yLT52YWx1ZSk7Cit9CisKK1N0
cmluZyBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OmNvbnN0YW50RXhwcmVzc2lvblN0cmluZyhB
U1Q6OkNvbnN0YW50RXhwcmVzc2lvbiYgY29uc3RhbnRFeHByZXNzaW9uKQoreworICAgIFN0cmlu
ZyByZXN1bHQ7CisgICAgY29uc3RhbnRFeHByZXNzaW9uLnZpc2l0KFdURjo6bWFrZVZpc2l0b3Io
WyZdKEFTVDo6SW50ZWdlckxpdGVyYWwmIGludGVnZXJMaXRlcmFsKSB7CisgICAgICAgIHJlc3Vs
dCA9IG1ha2VTdHJpbmcoIiIsIGludGVnZXJMaXRlcmFsLnZhbHVlKCkpOworICAgIH0sIFsmXShB
U1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWwmIHVuc2lnbmVkSW50ZWdlckxpdGVyYWwpIHsKKyAg
ICAgICAgcmVzdWx0ID0gbWFrZVN0cmluZygiIiwgdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC52YWx1
ZSgpKTsKKyAgICB9LCBbJl0oQVNUOjpGbG9hdExpdGVyYWwmIGZsb2F0TGl0ZXJhbCkgeworICAg
ICAgICByZXN1bHQgPSBtYWtlU3RyaW5nKCIiLCBmbG9hdExpdGVyYWwudmFsdWUoKSk7CisgICAg
fSwgWyZdKEFTVDo6TnVsbExpdGVyYWwmKSB7CisgICAgICAgIHJlc3VsdCA9ICJudWxscHRyIl9z
dHI7CisgICAgfSwgWyZdKEFTVDo6Qm9vbGVhbkxpdGVyYWwmIGJvb2xlYW5MaXRlcmFsKSB7Cisg
ICAgICAgIHJlc3VsdCA9IGJvb2xlYW5MaXRlcmFsLnZhbHVlKCkgPyAidHJ1ZSJfc3RyIDogImZh
bHNlIl9zdHI7CisgICAgfSwgWyZdKEFTVDo6RW51bWVyYXRpb25NZW1iZXJMaXRlcmFsJiBlbnVt
ZXJhdGlvbk1lbWJlckxpdGVyYWwpIHsKKyAgICAgICAgQVNTRVJUKGVudW1lcmF0aW9uTWVtYmVy
TGl0ZXJhbC5lbnVtZXJhdGlvbkRlZmluaXRpb24oKSk7CisgICAgICAgIEFTU0VSVChlbnVtZXJh
dGlvbk1lbWJlckxpdGVyYWwuZW51bWVyYXRpb25EZWZpbml0aW9uKCkpOworICAgICAgICByZXN1
bHQgPSBtYWtlU3RyaW5nKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqZW51bWVyYXRp
b25NZW1iZXJMaXRlcmFsLmVudW1lcmF0aW9uRGVmaW5pdGlvbigpKSwgJy4nLCBtX3R5cGVOYW1l
ci5tYW5nbGVkTmFtZUZvckVudW1lcmF0aW9uTWVtYmVyKCplbnVtZXJhdGlvbk1lbWJlckxpdGVy
YWwuZW51bWVyYXRpb25NZW1iZXIoKSkpOworICAgIH0pKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitjbGFzcyBSZW5kZXJGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXIgOiBwdWJsaWMgRnVuY3Rp
b25EZWZpbml0aW9uV3JpdGVyIHsKK3B1YmxpYzoKKyAgICBSZW5kZXJGdW5jdGlvbkRlZmluaXRp
b25Xcml0ZXIoSW50cmluc2ljcyYgaW50cmluc2ljcywgVHlwZU5hbWVyJiB0eXBlTmFtZXIsIEhh
c2hNYXA8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiwgU3RyaW5nPiYgZnVuY3Rpb25NYXBwaW5n
LCBNYXRjaGVkUmVuZGVyU2VtYW50aWNzJiYgbWF0Y2hlZFNlbWFudGljcywgTGF5b3V0JiBsYXlv
dXQpCisgICAgICAgIDogRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyKGludHJpbnNpY3MsIHR5cGVO
YW1lciwgZnVuY3Rpb25NYXBwaW5nLCBsYXlvdXQpCisgICAgICAgICwgbV9tYXRjaGVkU2VtYW50
aWNzKFdURk1vdmUobWF0Y2hlZFNlbWFudGljcykpCiAgICAgewotICAgICAgICBjaGVja0Vycm9y
QW5kVmlzaXQobWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5sVmFsdWUoKSk7Ci0gICAgICAg
IGF1dG8gbFZhbHVlID0gbV9zdGFjay50YWtlTGFzdCgpOwotICAgICAgICBBU1NFUlQobWFrZUFy
cmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSk7Ci0gICAgICAgIGF1dG8gdmFy
aWFibGVOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7Ci0gICAgICAgIGF1dG8gbWFu
Z2xlZFR5cGVOYW1lID0gbV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCptYWtlQXJyYXlS
ZWZlcmVuY2VFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKTsKLSAgICAgICAgaWYgKGlzPEFTVDo6
UG9pbnRlclR5cGU+KCptYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgp
KSkKLSAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtYW5nbGVk
VHlwZU5hbWUsICcgJywgdmFyaWFibGVOYW1lLCAiID0geyAiLCBsVmFsdWUsICIsIDEgfTtcbiIp
KTsKLSAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpBcnJheVR5cGU+KCptYWtlQXJyYXlSZWZlcmVu
Y2VFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKSkgewotICAgICAgICAgICAgYXV0byYgYXJyYXlU
eXBlID0gZG93bmNhc3Q8QVNUOjpBcnJheVR5cGU+KCptYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNz
aW9uLnJlc29sdmVkVHlwZSgpKTsKLSAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQo
bWFrZVN0cmluZyhtYW5nbGVkVHlwZU5hbWUsICcgJywgdmFyaWFibGVOYW1lLCAiID0geyAmKCIs
IGxWYWx1ZSwgIlswXSksICIsIGFycmF5VHlwZS5udW1FbGVtZW50cygpLCAiIH07XG4iKSk7Ci0g
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3Ry
aW5nKG1hbmdsZWRUeXBlTmFtZSwgJyAnLCB2YXJpYWJsZU5hbWUsICIgPSB7ICYiLCBsVmFsdWUs
ICIsIDEgfTtcbiIpKTsKLSAgICAgICAgbV9zdGFjay5hcHBlbmQodmFyaWFibGVOYW1lKTsKICAg
ICB9CiAKLSAgICB2b2lkIHZpc2l0KEFTVDo6TWFrZVBvaW50ZXJFeHByZXNzaW9uJiBtYWtlUG9p
bnRlckV4cHJlc3Npb24pIG92ZXJyaWRlCisgICAgTWFwcGVkQmluZEdyb3VwcyYmIHRha2VWZXJ0
ZXhNYXBwZWRCaW5kR3JvdXBzKCkKICAgICB7Ci0gICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCht
YWtlUG9pbnRlckV4cHJlc3Npb24ubFZhbHVlKCkpOwotICAgICAgICBhdXRvIGxWYWx1ZSA9IG1f
c3RhY2sudGFrZUxhc3QoKTsKLSAgICAgICAgQVNTRVJUKG1ha2VQb2ludGVyRXhwcmVzc2lvbi5y
ZXNvbHZlZFR5cGUoKSk7Ci0gICAgICAgIGF1dG8gdmFyaWFibGVOYW1lID0gZ2VuZXJhdGVOZXh0
VmFyaWFibGVOYW1lKCk7Ci0gICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmlu
ZyhtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm1ha2VQb2ludGVyRXhwcmVzc2lvbi5y
ZXNvbHZlZFR5cGUoKSksICcgJywgdmFyaWFibGVOYW1lLCAiID0gJiIsIGxWYWx1ZSwgIjtcbiIp
KTsKLSAgICAgICAgbV9zdGFjay5hcHBlbmQodmFyaWFibGVOYW1lKTsKKyAgICAgICAgQVNTRVJU
KG1fdmVydGV4TWFwcGVkQmluZEdyb3Vwcyk7CisgICAgICAgIHJldHVybiBXVEZNb3ZlKCptX3Zl
cnRleE1hcHBlZEJpbmRHcm91cHMpOwogICAgIH0KIAotICAgIHZvaWQgdmlzaXQoQVNUOjpSZWFk
TW9kaWZ5V3JpdGVFeHByZXNzaW9uJikgb3ZlcnJpZGUKKyAgICBNYXBwZWRCaW5kR3JvdXBzJiYg
dGFrZUZyYWdtZW50TWFwcGVkQmluZEdyb3VwcygpCiAgICAgewotICAgICAgICAvLyBUaGlzIHNo
b3VsZCBiZSBsb3dlcmVkIGFscmVhZHkuCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICBBU1NFUlQobV9mcmFnbWVudE1hcHBlZEJpbmRHcm91cHMpOworICAgICAgICByZXR1
cm4gV1RGTW92ZSgqbV9mcmFnbWVudE1hcHBlZEJpbmRHcm91cHMpOwogICAgIH0KIAotICAgIHZv
aWQgdmlzaXQoQVNUOjpUZXJuYXJ5RXhwcmVzc2lvbiYgdGVybmFyeUV4cHJlc3Npb24pIG92ZXJy
aWRlCi0gICAgewotICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQodGVybmFyeUV4cHJlc3Npb24u
cHJlZGljYXRlKCkpOwotICAgICAgICBhdXRvIGNoZWNrID0gbV9zdGFjay50YWtlTGFzdCgpOwor
cHJpdmF0ZToKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RW50cnlQb2ludFNjYWZmb2xkaW5nPiBjcmVh
dGVFbnRyeVBvaW50U2NhZmZvbGRpbmcoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mKSBvdmVycmlk
ZTsKIAotICAgICAgICBBU1NFUlQodGVybmFyeUV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpOwot
ICAgICAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOwot
ICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobV90eXBlTmFtZXIubWFu
Z2xlZE5hbWVGb3JUeXBlKCp0ZXJuYXJ5RXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSksICcgJywg
dmFyaWFibGVOYW1lLCAiO1xuIikpOworICAgIE1hdGNoZWRSZW5kZXJTZW1hbnRpY3MgbV9tYXRj
aGVkU2VtYW50aWNzOworICAgIE9wdGlvbmFsPE1hcHBlZEJpbmRHcm91cHM+IG1fdmVydGV4TWFw
cGVkQmluZEdyb3VwczsKKyAgICBPcHRpb25hbDxNYXBwZWRCaW5kR3JvdXBzPiBtX2ZyYWdtZW50
TWFwcGVkQmluZEdyb3VwczsKK307CiAKLSAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCht
YWtlU3RyaW5nKCJpZiAoIiwgY2hlY2ssICIpIHtcbiIpKTsKLSAgICAgICAgY2hlY2tFcnJvckFu
ZFZpc2l0KHRlcm5hcnlFeHByZXNzaW9uLmJvZHlFeHByZXNzaW9uKCkpOwotICAgICAgICBtX3N0
cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcodmFyaWFibGVOYW1lLCAiID0gIiwgbV9zdGFj
ay50YWtlTGFzdCgpLCAiO1xuIikpOwotICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9
IGVsc2Uge1xuIik7Ci0gICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh0ZXJuYXJ5RXhwcmVzc2lv
bi5lbHNlRXhwcmVzc2lvbigpKTsKLSAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtl
U3RyaW5nKHZhcmlhYmxlTmFtZSwgIiA9ICIsIG1fc3RhY2sudGFrZUxhc3QoKSwgIjtcbiIpKTsK
LSAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgifVxuIik7Ci0gICAgICAgIG1fc3RhY2su
YXBwZW5kKHZhcmlhYmxlTmFtZSk7CitzdGQ6OnVuaXF1ZV9wdHI8RW50cnlQb2ludFNjYWZmb2xk
aW5nPiBSZW5kZXJGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OmNyZWF0ZUVudHJ5UG9pbnRTY2Fm
Zm9sZGluZyhBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0aW9uKQorewor
ICAgIGF1dG8gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lID0gW3RoaXNdKCkgLT4gU3RyaW5nIHsK
KyAgICAgICAgcmV0dXJuIHRoaXMtPmdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOworICAgIH07
CisgICAgaWYgKCZmdW5jdGlvbkRlZmluaXRpb24gPT0gbV9tYXRjaGVkU2VtYW50aWNzLnZlcnRl
eFNoYWRlcikgeworICAgICAgICBhdXRvIHJlc3VsdCA9IHN0ZDo6bWFrZV91bmlxdWU8VmVydGV4
RW50cnlQb2ludFNjYWZmb2xkaW5nPihmdW5jdGlvbkRlZmluaXRpb24sIG1faW50cmluc2ljcywg
bV90eXBlTmFtZXIsIG1fbWF0Y2hlZFNlbWFudGljcy52ZXJ0ZXhTaGFkZXJFbnRyeVBvaW50SXRl
bXMsIG1fbWF0Y2hlZFNlbWFudGljcy52ZXJ0ZXhTaGFkZXJSZXNvdXJjZU1hcCwgbV9sYXlvdXQs
IFdURk1vdmUoZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKSwgbV9tYXRjaGVkU2VtYW50aWNzLm1h
dGNoZWRWZXJ0ZXhBdHRyaWJ1dGVzKTsKKyAgICAgICAgQVNTRVJUKCFtX3ZlcnRleE1hcHBlZEJp
bmRHcm91cHMpOworICAgICAgICBtX3ZlcnRleE1hcHBlZEJpbmRHcm91cHMgPSByZXN1bHQtPm1h
cHBlZEJpbmRHcm91cHMoKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9Ci0KLSAgICB2
b2lkIHZpc2l0KEFTVDo6VmFyaWFibGVSZWZlcmVuY2UmIHZhcmlhYmxlUmVmZXJlbmNlKSBvdmVy
cmlkZQotICAgIHsKLSAgICAgICAgQVNTRVJUKHZhcmlhYmxlUmVmZXJlbmNlLnZhcmlhYmxlKCkp
OwotICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbV92YXJpYWJsZU1hcHBpbmcuZmluZCh2YXJpYWJs
ZVJlZmVyZW5jZS52YXJpYWJsZSgpKTsKLSAgICAgICAgQVNTRVJUKGl0ZXJhdG9yICE9IG1fdmFy
aWFibGVNYXBwaW5nLmVuZCgpKTsKLSAgICAgICAgbV9zdGFjay5hcHBlbmQoaXRlcmF0b3ItPnZh
bHVlKTsKKyAgICBpZiAoJmZ1bmN0aW9uRGVmaW5pdGlvbiA9PSBtX21hdGNoZWRTZW1hbnRpY3Mu
ZnJhZ21lbnRTaGFkZXIpIHsKKyAgICAgICAgYXV0byByZXN1bHQgPSBzdGQ6Om1ha2VfdW5pcXVl
PEZyYWdtZW50RW50cnlQb2ludFNjYWZmb2xkaW5nPihmdW5jdGlvbkRlZmluaXRpb24sIG1faW50
cmluc2ljcywgbV90eXBlTmFtZXIsIG1fbWF0Y2hlZFNlbWFudGljcy5mcmFnbWVudFNoYWRlckVu
dHJ5UG9pbnRJdGVtcywgbV9tYXRjaGVkU2VtYW50aWNzLmZyYWdtZW50U2hhZGVyUmVzb3VyY2VN
YXAsIG1fbGF5b3V0LCBXVEZNb3ZlKGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSksIG1fbWF0Y2hl
ZFNlbWFudGljcy5tYXRjaGVkQ29sb3JBdHRhY2htZW50cyk7CisgICAgICAgIEFTU0VSVCghbV9m
cmFnbWVudE1hcHBlZEJpbmRHcm91cHMpOworICAgICAgICBtX2ZyYWdtZW50TWFwcGVkQmluZEdy
b3VwcyA9IHJlc3VsdC0+bWFwcGVkQmluZEdyb3VwcygpOworICAgICAgICByZXR1cm4gcmVzdWx0
OwogICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKK30KIAotICAgIFN0cmluZyBjb25zdGFudEV4
cHJlc3Npb25TdHJpbmcoQVNUOjpDb25zdGFudEV4cHJlc3Npb24mIGNvbnN0YW50RXhwcmVzc2lv
bikKK2NsYXNzIENvbXB1dGVGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXIgOiBwdWJsaWMgRnVuY3Rp
b25EZWZpbml0aW9uV3JpdGVyIHsKK3B1YmxpYzoKKyAgICBDb21wdXRlRnVuY3Rpb25EZWZpbml0
aW9uV3JpdGVyKEludHJpbnNpY3MmIGludHJpbnNpY3MsIFR5cGVOYW1lciYgdHlwZU5hbWVyLCBI
YXNoTWFwPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiosIFN0cmluZz4mIGZ1bmN0aW9uTWFwcGlu
ZywgTWF0Y2hlZENvbXB1dGVTZW1hbnRpY3MmJiBtYXRjaGVkU2VtYW50aWNzLCBMYXlvdXQmIGxh
eW91dCkKKyAgICAgICAgOiBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXIoaW50cmluc2ljcywgdHlw
ZU5hbWVyLCBmdW5jdGlvbk1hcHBpbmcsIGxheW91dCkKKyAgICAgICAgLCBtX21hdGNoZWRTZW1h
bnRpY3MoV1RGTW92ZShtYXRjaGVkU2VtYW50aWNzKSkKICAgICB7Ci0gICAgICAgIFN0cmluZyBy
ZXN1bHQ7Ci0gICAgICAgIGNvbnN0YW50RXhwcmVzc2lvbi52aXNpdChXVEY6Om1ha2VWaXNpdG9y
KFsmXShBU1Q6OkludGVnZXJMaXRlcmFsJiBpbnRlZ2VyTGl0ZXJhbCkgewotICAgICAgICAgICAg
cmVzdWx0ID0gbWFrZVN0cmluZygiIiwgaW50ZWdlckxpdGVyYWwudmFsdWUoKSk7Ci0gICAgICAg
IH0sIFsmXShBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWwmIHVuc2lnbmVkSW50ZWdlckxpdGVy
YWwpIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IG1ha2VTdHJpbmcoIiIsIHVuc2lnbmVkSW50ZWdl
ckxpdGVyYWwudmFsdWUoKSk7Ci0gICAgICAgIH0sIFsmXShBU1Q6OkZsb2F0TGl0ZXJhbCYgZmxv
YXRMaXRlcmFsKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBtYWtlU3RyaW5nKCIiLCBmbG9hdExp
dGVyYWwudmFsdWUoKSk7Ci0gICAgICAgIH0sIFsmXShBU1Q6Ok51bGxMaXRlcmFsJikgewotICAg
ICAgICAgICAgcmVzdWx0ID0gIm51bGxwdHIiX3N0cjsKLSAgICAgICAgfSwgWyZdKEFTVDo6Qm9v
bGVhbkxpdGVyYWwmIGJvb2xlYW5MaXRlcmFsKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBib29s
ZWFuTGl0ZXJhbC52YWx1ZSgpID8gInRydWUiX3N0ciA6ICJmYWxzZSJfc3RyOwotICAgICAgICB9
LCBbJl0oQVNUOjpFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwmIGVudW1lcmF0aW9uTWVtYmVyTGl0
ZXJhbCkgewotICAgICAgICAgICAgQVNTRVJUKGVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5lbnVt
ZXJhdGlvbkRlZmluaXRpb24oKSk7Ci0gICAgICAgICAgICBBU1NFUlQoZW51bWVyYXRpb25NZW1i
ZXJMaXRlcmFsLmVudW1lcmF0aW9uRGVmaW5pdGlvbigpKTsKLSAgICAgICAgICAgIHJlc3VsdCA9
IG1ha2VTdHJpbmcobV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCplbnVtZXJhdGlvbk1l
bWJlckxpdGVyYWwuZW51bWVyYXRpb25EZWZpbml0aW9uKCkpLCAnLicsIG1fdHlwZU5hbWVyLm1h
bmdsZWROYW1lRm9yRW51bWVyYXRpb25NZW1iZXIoKmVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5l
bnVtZXJhdGlvbk1lbWJlcigpKSk7Ci0gICAgICAgIH0pKTsKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICB9CiAKLSAgICBTdHJpbmcgZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCkKKyAgICBN
YXBwZWRCaW5kR3JvdXBzJiYgdGFrZU1hcHBlZEJpbmRHcm91cHMoKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIG1ha2VTdHJpbmcoInZhcmlhYmxlIiwgbV92YXJpYWJsZUNvdW50KyspOworICAgICAg
ICBBU1NFUlQobV9tYXBwZWRCaW5kR3JvdXBzKTsKKyAgICAgICAgcmV0dXJuIFdURk1vdmUoKm1f
bWFwcGVkQmluZEdyb3Vwcyk7CiAgICAgfQogCiBwcml2YXRlOgotICAgIEludHJpbnNpY3MmIG1f
aW50cmluc2ljczsKLSAgICBUeXBlTmFtZXImIG1fdHlwZU5hbWVyOwotICAgIEhhc2hNYXA8QVNU
OjpGdW5jdGlvbkRlY2xhcmF0aW9uKiwgU3RyaW5nPiYgbV9mdW5jdGlvbk1hcHBpbmc7Ci0gICAg
SGFzaE1hcDxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24qLCBTdHJpbmc+IG1fdmFyaWFibGVNYXBw
aW5nOwotICAgIFN0cmluZ0J1aWxkZXIgbV9zdHJpbmdCdWlsZGVyOwotICAgIFZlY3RvcjxTdHJp
bmc+IG1fc3RhY2s7Ci0gICAgT3B0aW9uYWw8RW50cnlQb2ludFNjYWZmb2xkaW5nPiBtX2VudHJ5
UG9pbnRTY2FmZm9sZGluZzsKLSAgICB1bnNpZ25lZCBtX3ZhcmlhYmxlQ291bnQgeyAwIH07Cisg
ICAgc3RkOjp1bmlxdWVfcHRyPEVudHJ5UG9pbnRTY2FmZm9sZGluZz4gY3JlYXRlRW50cnlQb2lu
dFNjYWZmb2xkaW5nKEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJikgb3ZlcnJpZGU7CisKKyAgICBN
YXRjaGVkQ29tcHV0ZVNlbWFudGljcyBtX21hdGNoZWRTZW1hbnRpY3M7CisgICAgT3B0aW9uYWw8
TWFwcGVkQmluZEdyb3Vwcz4gbV9tYXBwZWRCaW5kR3JvdXBzOwogfTsKIAotU3RyaW5nIG1ldGFs
RnVuY3Rpb25zKFByb2dyYW0mIHByb2dyYW0sIFR5cGVOYW1lciYgdHlwZU5hbWVyKQorc3RkOjp1
bmlxdWVfcHRyPEVudHJ5UG9pbnRTY2FmZm9sZGluZz4gQ29tcHV0ZUZ1bmN0aW9uRGVmaW5pdGlv
bldyaXRlcjo6Y3JlYXRlRW50cnlQb2ludFNjYWZmb2xkaW5nKEFTVDo6RnVuY3Rpb25EZWZpbml0
aW9uJiBmdW5jdGlvbkRlZmluaXRpb24pCit7CisgICAgYXV0byBnZW5lcmF0ZU5leHRWYXJpYWJs
ZU5hbWUgPSBbdGhpc10oKSAtPiBTdHJpbmcgeworICAgICAgICByZXR1cm4gdGhpcy0+Z2VuZXJh
dGVOZXh0VmFyaWFibGVOYW1lKCk7CisgICAgfTsKKyAgICBpZiAoJmZ1bmN0aW9uRGVmaW5pdGlv
biA9PSBtX21hdGNoZWRTZW1hbnRpY3Muc2hhZGVyKSB7CisgICAgICAgIGF1dG8gcmVzdWx0ID0g
c3RkOjptYWtlX3VuaXF1ZTxDb21wdXRlRW50cnlQb2ludFNjYWZmb2xkaW5nPihmdW5jdGlvbkRl
ZmluaXRpb24sIG1faW50cmluc2ljcywgbV90eXBlTmFtZXIsIG1fbWF0Y2hlZFNlbWFudGljcy5l
bnRyeVBvaW50SXRlbXMsIG1fbWF0Y2hlZFNlbWFudGljcy5yZXNvdXJjZU1hcCwgbV9sYXlvdXQs
IFdURk1vdmUoZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKSk7CisgICAgICAgIEFTU0VSVCghbV9t
YXBwZWRCaW5kR3JvdXBzKTsKKyAgICAgICAgbV9tYXBwZWRCaW5kR3JvdXBzID0gcmVzdWx0LT5t
YXBwZWRCaW5kR3JvdXBzKCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIHJl
dHVybiBudWxscHRyOworfQorCitzdHJ1Y3QgU2hhcmVkTWV0YWxGdW5jdGlvbnNSZXN1bHQgewor
ICAgIEhhc2hNYXA8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiwgU3RyaW5nPiBmdW5jdGlvbk1h
cHBpbmc7CisgICAgU3RyaW5nIG1ldGFsRnVuY3Rpb25zOworfTsKK3N0YXRpYyBTaGFyZWRNZXRh
bEZ1bmN0aW9uc1Jlc3VsdCBzaGFyZWRNZXRhbEZ1bmN0aW9ucyhQcm9ncmFtJiBwcm9ncmFtLCBU
eXBlTmFtZXImIHR5cGVOYW1lcikKIHsKICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7
CiAKQEAgLTYxMCwxNyArNzU2LDQ4IEBAIFN0cmluZyBtZXRhbEZ1bmN0aW9ucyhQcm9ncmFtJiBw
cm9ncmFtLCBUeXBlTmFtZXImIHR5cGVOYW1lcikKICAgICB9CiAKICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZCgnXG4nKTsKKyAgICByZXR1cm4geyBXVEZNb3ZlKGZ1bmN0aW9uTWFwcGluZyksIHN0
cmluZ0J1aWxkZXIudG9TdHJpbmcoKSB9OworfQogCi0gICAgewotICAgICAgICBGdW5jdGlvbkRl
ZmluaXRpb25Xcml0ZXIgZnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyKHByb2dyYW0uaW50cmluc2lj
cygpLCB0eXBlTmFtZXIsIGZ1bmN0aW9uTWFwcGluZyk7Ci0gICAgICAgIGZvciAoYXV0byYgbmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiA6IHByb2dyYW0ubmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bnMoKSkKLSAgICAgICAgICAgIGZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlci52aXNpdChuYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uKTsKLSAgICAgICAgZm9yIChhdXRvJiBmdW5jdGlvbkRlZmluaXRp
b24gOiBwcm9ncmFtLmZ1bmN0aW9uRGVmaW5pdGlvbnMoKSkKLSAgICAgICAgICAgIGZ1bmN0aW9u
RGVmaW5pdGlvbldyaXRlci52aXNpdChmdW5jdGlvbkRlZmluaXRpb24pOwotICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZChmdW5jdGlvbkRlZmluaXRpb25Xcml0ZXIudG9TdHJpbmcoKSk7Ci0g
ICAgfQorUmVuZGVyTWV0YWxGdW5jdGlvbnMgbWV0YWxGdW5jdGlvbnMoUHJvZ3JhbSYgcHJvZ3Jh
bSwgVHlwZU5hbWVyJiB0eXBlTmFtZXIsIE1hdGNoZWRSZW5kZXJTZW1hbnRpY3MmJiBtYXRjaGVk
U2VtYW50aWNzLCBMYXlvdXQmIGxheW91dCkKK3sKKyAgICBhdXRvIHNoYXJlZE1ldGFsRnVuY3Rp
b25zID0gTWV0YWw6OnNoYXJlZE1ldGFsRnVuY3Rpb25zKHByb2dyYW0sIHR5cGVOYW1lcik7CisK
KyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CisgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQoc2hhcmVkTWV0YWxGdW5jdGlvbnMubWV0YWxGdW5jdGlvbnMpOworCisgICAgUmVuZGVyRnVu
Y3Rpb25EZWZpbml0aW9uV3JpdGVyIGZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcihwcm9ncmFtLmlu
dHJpbnNpY3MoKSwgdHlwZU5hbWVyLCBzaGFyZWRNZXRhbEZ1bmN0aW9ucy5mdW5jdGlvbk1hcHBp
bmcsIFdURk1vdmUobWF0Y2hlZFNlbWFudGljcyksIGxheW91dCk7CisgICAgZm9yIChhdXRvJiBu
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIDogcHJvZ3JhbS5uYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9ucygpKQorICAgICAgICBmdW5jdGlvbkRlZmluaXRpb25Xcml0ZXIudmlzaXQobmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbik7CisgICAgZm9yIChhdXRvJiBmdW5jdGlvbkRlZmluaXRpb24gOiBw
cm9ncmFtLmZ1bmN0aW9uRGVmaW5pdGlvbnMoKSkKKyAgICAgICAgZnVuY3Rpb25EZWZpbml0aW9u
V3JpdGVyLnZpc2l0KGZ1bmN0aW9uRGVmaW5pdGlvbik7CisgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQoZnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyLnRvU3RyaW5nKCkpOworCisgICAgUmVuZGVyTWV0
YWxGdW5jdGlvbnMgcmVzdWx0OworICAgIHJlc3VsdC5tZXRhbFNvdXJjZSA9IHN0cmluZ0J1aWxk
ZXIudG9TdHJpbmcoKTsKKyAgICByZXN1bHQudmVydGV4TWFwcGVkQmluZEdyb3VwcyA9IGZ1bmN0
aW9uRGVmaW5pdGlvbldyaXRlci50YWtlVmVydGV4TWFwcGVkQmluZEdyb3VwcygpOworICAgIHJl
c3VsdC5mcmFnbWVudE1hcHBlZEJpbmRHcm91cHMgPSBmdW5jdGlvbkRlZmluaXRpb25Xcml0ZXIu
dGFrZUZyYWdtZW50TWFwcGVkQmluZEdyb3VwcygpOworICAgIHJldHVybiByZXN1bHQ7Cit9CiAK
LSAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworQ29tcHV0ZU1ldGFsRnVuY3Rp
b25zIG1ldGFsRnVuY3Rpb25zKFByb2dyYW0mIHByb2dyYW0sIFR5cGVOYW1lciYgdHlwZU5hbWVy
LCBNYXRjaGVkQ29tcHV0ZVNlbWFudGljcyYmIG1hdGNoZWRTZW1hbnRpY3MsIExheW91dCYgbGF5
b3V0KQoreworICAgIGF1dG8gc2hhcmVkTWV0YWxGdW5jdGlvbnMgPSBNZXRhbDo6c2hhcmVkTWV0
YWxGdW5jdGlvbnMocHJvZ3JhbSwgdHlwZU5hbWVyKTsKKworICAgIFN0cmluZ0J1aWxkZXIgc3Ry
aW5nQnVpbGRlcjsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChzaGFyZWRNZXRhbEZ1bmN0aW9u
cy5tZXRhbEZ1bmN0aW9ucyk7CisKKyAgICBDb21wdXRlRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVy
IGZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcihwcm9ncmFtLmludHJpbnNpY3MoKSwgdHlwZU5hbWVy
LCBzaGFyZWRNZXRhbEZ1bmN0aW9ucy5mdW5jdGlvbk1hcHBpbmcsIFdURk1vdmUobWF0Y2hlZFNl
bWFudGljcyksIGxheW91dCk7CisgICAgZm9yIChhdXRvJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uIDogcHJvZ3JhbS5uYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9ucygpKQorICAgICAgICBmdW5j
dGlvbkRlZmluaXRpb25Xcml0ZXIudmlzaXQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbik7Cisg
ICAgZm9yIChhdXRvJiBmdW5jdGlvbkRlZmluaXRpb24gOiBwcm9ncmFtLmZ1bmN0aW9uRGVmaW5p
dGlvbnMoKSkKKyAgICAgICAgZnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyLnZpc2l0KGZ1bmN0aW9u
RGVmaW5pdGlvbik7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoZnVuY3Rpb25EZWZpbml0aW9u
V3JpdGVyLnRvU3RyaW5nKCkpOworCisgICAgQ29tcHV0ZU1ldGFsRnVuY3Rpb25zIHJlc3VsdDsK
KyAgICByZXN1bHQubWV0YWxTb3VyY2UgPSBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CisgICAg
cmVzdWx0Lm1hcHBlZEJpbmRHcm91cHMgPSBmdW5jdGlvbkRlZmluaXRpb25Xcml0ZXIudGFrZU1h
cHBlZEJpbmRHcm91cHMoKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBNZXRhbApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
TWV0YWwvV0hMU0xGdW5jdGlvbldyaXRlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvTWV0YWwvV0hMU0xGdW5jdGlvbldyaXRlci5oCmluZGV4IDk5NjBlNWU0OGQ1OGMy
NGUzNWU1MjgzODI0NTY0NzJiN2QwOWI2ZDcuLjA2MjgyMWZhYjg5ZWM1ZjA3YmQ3YzdmNDhkZjJh
MjBhYzU0N2FjY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML01ldGFsL1dITFNMRnVuY3Rpb25Xcml0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVyLmgKQEAgLTI3LDYgKzI3
LDkgQEAKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAKKyNpbmNsdWRlICJXSExTTE1hcHBlZEJpbmRp
bmdzLmgiCisjaW5jbHVkZSAiV0hMU0xTZW1hbnRpY01hdGNoZXIuaCIKKwogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBuYW1lc3BhY2UgV0hMU0wgewpAQCAtMzcsNyArNDAsMTggQEAgbmFtZXNwYWNl
IE1ldGFsIHsKIAogY2xhc3MgVHlwZU5hbWVyOwogCi1TdHJpbmcgbWV0YWxGdW5jdGlvbnMoUHJv
Z3JhbSYsIFR5cGVOYW1lciYpOworc3RydWN0IFJlbmRlck1ldGFsRnVuY3Rpb25zIHsKKyAgICBT
dHJpbmcgbWV0YWxTb3VyY2U7CisgICAgTWFwcGVkQmluZEdyb3VwcyB2ZXJ0ZXhNYXBwZWRCaW5k
R3JvdXBzOworICAgIE1hcHBlZEJpbmRHcm91cHMgZnJhZ21lbnRNYXBwZWRCaW5kR3JvdXBzOwor
fTsKK1JlbmRlck1ldGFsRnVuY3Rpb25zIG1ldGFsRnVuY3Rpb25zKFByb2dyYW0mLCBUeXBlTmFt
ZXImLCBNYXRjaGVkUmVuZGVyU2VtYW50aWNzJiYsIExheW91dCYpOworCitzdHJ1Y3QgQ29tcHV0
ZU1ldGFsRnVuY3Rpb25zIHsKKyAgICBTdHJpbmcgbWV0YWxTb3VyY2U7CisgICAgTWFwcGVkQmlu
ZEdyb3VwcyBtYXBwZWRCaW5kR3JvdXBzOworfTsKK0NvbXB1dGVNZXRhbEZ1bmN0aW9ucyBtZXRh
bEZ1bmN0aW9ucyhQcm9ncmFtJiwgVHlwZU5hbWVyJiwgTWF0Y2hlZENvbXB1dGVTZW1hbnRpY3Mm
JiwgTGF5b3V0Jik7CiAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xNYXBwZWRCaW5kaW5ncy5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xNYXBwZWRCaW5kaW5ncy5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmRiM2M1MmJmNDk2Mzk4ZjNkMDQwZDE1YThiZDhiN2U4NDRlMWQxMzYKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE1h
cHBlZEJpbmRpbmdzLmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgTWV0YWwg
eworCitzdHJ1Y3QgTWFwcGVkQmluZEdyb3VwIHsKKyAgICB1bnNpZ25lZCBhcmd1bWVudEJ1ZmZl
ckluZGV4OworICAgIFZlY3Rvcjx1bnNpZ25lZD4gYmluZGluZ0luZGljZXM7Cit9OworCit1c2lu
ZyBNYXBwZWRCaW5kR3JvdXBzID0gVmVjdG9yPE1hcHBlZEJpbmRHcm91cD47IC8vIFBhcmFsbGVs
IHRvIHRoZSBpbnB1dCByZXNvdXJjZSBMYXlvdXQuCisKK30gLy8gbmFtZXNwYWNlIE1ldGFsCisK
K30gLy8gbmFtZXNwYWNlIFdITFNMCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9X
SExTTE1ldGFsQ29kZUdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9NZXRhbC9XSExTTE1ldGFsQ29kZUdlbmVyYXRvci5jcHAKaW5kZXggMTBjMDUzMGUy
OTBkNzA0MTc2N2Y3MTgyMzI3MGQzYjkyNTk3YjU0Yi4uODhjZmU3MzAxN2Q2MDJmMzQxMWVlZWFk
ZjU3YmE1ZTA0NGYzY2Q3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvTWV0YWwvV0hMU0xNZXRhbENvZGVHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMTWV0YWxDb2RlR2VuZXJhdG9y
LmNwcApAQCAtMzgsNyArMzgsNyBAQCBuYW1lc3BhY2UgV0hMU0wgewogCiBuYW1lc3BhY2UgTWV0
YWwgewogCi1TdHJpbmcgZ2VuZXJhdGVNZXRhbENvZGUoUHJvZ3JhbSYgcHJvZ3JhbSkKK3N0YXRp
YyBTdHJpbmcgZ2VuZXJhdGVNZXRhbENvZGVTaGFyZWQoU3RyaW5nJiYgbWV0YWxUeXBlcywgU3Ry
aW5nJiYgbWV0YWxGdW5jdGlvbnMpCiB7CiAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVy
OwogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIjaW5jbHVkZSA8bWV0YWxfc3RkbGliPlxuIik7
CkBAIC01MSwxMiArNTEsMjkgQEAgU3RyaW5nIGdlbmVyYXRlTWV0YWxDb2RlKFByb2dyYW0mIHBy
b2dyYW0pCiAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoInVzaW5nIG5hbWVzcGFjZSBtZXRhbDtc
biIpOwogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJcbiIpOwogCi0gICAgVHlwZU5hbWVyIHR5
cGVOYW1lcihwcm9ncmFtKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0eXBlTmFtZXIubWV0
YWxUeXBlcygpKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtZXRhbEZ1bmN0aW9ucyhwcm9n
cmFtLCB0eXBlTmFtZXIpKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChXVEZNb3ZlKG1ldGFs
VHlwZXMpKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChXVEZNb3ZlKG1ldGFsRnVuY3Rpb25z
KSk7CiAgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKIH0KIAorUmVuZGVyTWV0
YWxDb2RlIGdlbmVyYXRlTWV0YWxDb2RlKFByb2dyYW0mIHByb2dyYW0sIE1hdGNoZWRSZW5kZXJT
ZW1hbnRpY3MmJiBtYXRjaGVkU2VtYW50aWNzLCBMYXlvdXQmIGxheW91dCkKK3sKKyAgICBUeXBl
TmFtZXIgdHlwZU5hbWVyKHByb2dyYW0pOworICAgIGF1dG8gbWV0YWxUeXBlcyA9IHR5cGVOYW1l
ci5tZXRhbFR5cGVzKCk7CisgICAgYXV0byBtZXRhbEZ1bmN0aW9ucyA9IE1ldGFsOjptZXRhbEZ1
bmN0aW9ucyhwcm9ncmFtLCB0eXBlTmFtZXIsIFdURk1vdmUobWF0Y2hlZFNlbWFudGljcyksIGxh
eW91dCk7CisgICAgYXV0byBtZXRhbENvZGUgPSBnZW5lcmF0ZU1ldGFsQ29kZVNoYXJlZChXVEZN
b3ZlKG1ldGFsVHlwZXMpLCBXVEZNb3ZlKG1ldGFsRnVuY3Rpb25zLm1ldGFsU291cmNlKSk7Cisg
ICAgcmV0dXJuIHsgV1RGTW92ZShtZXRhbENvZGUpLCBXVEZNb3ZlKG1ldGFsRnVuY3Rpb25zLnZl
cnRleE1hcHBlZEJpbmRHcm91cHMpLCBXVEZNb3ZlKG1ldGFsRnVuY3Rpb25zLmZyYWdtZW50TWFw
cGVkQmluZEdyb3VwcykgfTsKK30KKworQ29tcHV0ZU1ldGFsQ29kZSBnZW5lcmF0ZU1ldGFsQ29k
ZShQcm9ncmFtJiBwcm9ncmFtLCBNYXRjaGVkQ29tcHV0ZVNlbWFudGljcyYmIG1hdGNoZWRTZW1h
bnRpY3MsIExheW91dCYgbGF5b3V0KQoreworICAgIFR5cGVOYW1lciB0eXBlTmFtZXIocHJvZ3Jh
bSk7CisgICAgYXV0byBtZXRhbFR5cGVzID0gdHlwZU5hbWVyLm1ldGFsVHlwZXMoKTsKKyAgICBh
dXRvIG1ldGFsRnVuY3Rpb25zID0gTWV0YWw6Om1ldGFsRnVuY3Rpb25zKHByb2dyYW0sIHR5cGVO
YW1lciwgV1RGTW92ZShtYXRjaGVkU2VtYW50aWNzKSwgbGF5b3V0KTsKKyAgICBhdXRvIG1ldGFs
Q29kZSA9IGdlbmVyYXRlTWV0YWxDb2RlU2hhcmVkKFdURk1vdmUobWV0YWxUeXBlcyksIFdURk1v
dmUobWV0YWxGdW5jdGlvbnMubWV0YWxTb3VyY2UpKTsKKyAgICByZXR1cm4geyBXVEZNb3ZlKG1l
dGFsQ29kZSksIFdURk1vdmUobWV0YWxGdW5jdGlvbnMubWFwcGVkQmluZEdyb3VwcykgfTsKK30K
KwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9NZXRhbC9XSExTTE1ldGFsQ29kZUdlbmVyYXRvci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xNZXRhbENvZGVHZW5lcmF0b3IuaAppbmRleCBlMDg4
ZTAxMDQ0OTk0ODQxMTA3NTY3NDM0NzQ5MWY3M2QzNmEyMzRmLi5hNjk0NjNkZjRhZjM1MTJkYTA2
YmVhYWUxNTJkNDhkNjk0NDQ3ODEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE1ldGFsQ29kZUdlbmVyYXRvci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMTWV0YWxDb2RlR2VuZXJh
dG9yLmgKQEAgLTI3LDYgKzI3LDEwIEBACiAKICNpZiBFTkFCTEUoV0VCR1BVKQogCisjaW5jbHVk
ZSAiV0hMU0xNYXBwZWRCaW5kaW5ncy5oIgorI2luY2x1ZGUgIldITFNMUGlwZWxpbmVEZXNjcmlw
dG9yLmgiCisjaW5jbHVkZSAiV0hMU0xTZW1hbnRpY01hdGNoZXIuaCIKKyNpbmNsdWRlIDx3dGYv
VmFyaWFudC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CkBAIC0zNyw4ICs0MSwxOCBAQCBjbGFzcyBQcm9ncmFtOwogCiBuYW1lc3BhY2Ug
TWV0YWwgewogCi0vLyBGSVhNRTogVGhpcyBuZWVkcyB0byBrbm93IGFib3V0IHRoZSBwaXBlbGlu
ZSBzdGF0ZSBvYmplY3QgdG8gZW1pdCBmdW5jdGlvbiBwcm9sb2d1ZXMgYW5kIGVwaWxvZ3Vlcy4K
LVN0cmluZyBnZW5lcmF0ZU1ldGFsQ29kZShQcm9ncmFtJik7CitzdHJ1Y3QgUmVuZGVyTWV0YWxD
b2RlIHsKKyAgICBTdHJpbmcgbWV0YWxTb3VyY2U7CisgICAgTWFwcGVkQmluZEdyb3VwcyB2ZXJ0
ZXhNYXBwZWRCaW5kR3JvdXBzOworICAgIE1hcHBlZEJpbmRHcm91cHMgZnJhZ21lbnRNYXBwZWRC
aW5kR3JvdXBzOworfTsKK1JlbmRlck1ldGFsQ29kZSBnZW5lcmF0ZU1ldGFsQ29kZShQcm9ncmFt
JiwgTWF0Y2hlZFJlbmRlclNlbWFudGljcyYmIG1hdGNoZWRTZW1hbnRpY3MsIExheW91dCYpOwor
CitzdHJ1Y3QgQ29tcHV0ZU1ldGFsQ29kZSB7CisgICAgU3RyaW5nIG1ldGFsU291cmNlOworICAg
IE1hcHBlZEJpbmRHcm91cHMgYmluZEdyb3VwczsKK307CitDb21wdXRlTWV0YWxDb2RlIGdlbmVy
YXRlTWV0YWxDb2RlKFByb2dyYW0mLCBNYXRjaGVkQ29tcHV0ZVNlbWFudGljcyYmIG1hdGNoZWRT
ZW1hbnRpY3MsIExheW91dCYpOwogCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW50cmluc2ljcy5oIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbnRyaW5zaWNzLmgKaW5kZXggODQxMGM4YjczOTJjN2Yw
MDE0NGE5MDFkNWVjNDYyZDQ5NmFiYTgxYy4uZmM0N2QzMjkzNTQwZGY2Y2NhNTM2NjMxZDRjOWZi
ZDJlY2U4OTc5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xJbnRyaW5zaWNzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xJbnRyaW5zaWNzLmgKQEAgLTgyLDYgKzgyLDEyIEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuICptX2Zsb2F0VHlwZTsKICAgICB9CiAKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNs
YXJhdGlvbiYgZmxvYXQyVHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV92ZWN0
b3JGbG9hdFswXSk7CisgICAgICAgIHJldHVybiAqbV92ZWN0b3JGbG9hdFswXTsKKyAgICB9CisK
ICAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYgZmxvYXQzVHlwZSgpIGNvbnN0CiAgICAg
ewogICAgICAgICBBU1NFUlQobV92ZWN0b3JGbG9hdFsxXSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBpcGVsaW5lRGVzY3JpcHRvci5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQaXBlbGluZURlc2NyaXB0
b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4wZjI4NjkyYzE4NGJiZjZhMDYxZmM3OTQyNTI1MjQ1MDkyMTIyYWI2
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xQaXBlbGluZURlc2NyaXB0b3IuaApAQCAtMCwwICsxLDExNiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgPHd0Zi9PcHRp
b25TZXQuaD4KKyNpbmNsdWRlIDx3dGYvVmFyaWFudC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCitlbnVtIGNs
YXNzIFZlcnRleEZvcm1hdCA6IHVpbnQ4X3QgeworICAgIEZsb2F0UjMyRzMyQjMyQTMyLAorICAg
IEZsb2F0UjMyRzMyQjMyLAorICAgIEZsb2F0UjMyRzMyLAorICAgIEZsb2F0UjMyCit9OworCitz
dHJ1Y3QgVmVydGV4QXR0cmlidXRlIHsKKyAgICBWZXJ0ZXhGb3JtYXQgdmVydGV4Rm9ybWF0Owor
ICAgIHVuc2lnbmVkIG5hbWU7Cit9OworCit1c2luZyBWZXJ0ZXhBdHRyaWJ1dGVzID0gVmVjdG9y
PFZlcnRleEF0dHJpYnV0ZT47CisKK2VudW0gY2xhc3MgVGV4dHVyZUZvcm1hdCB7CisgICAgUjhH
OEI4QThVbm9ybSwKKyAgICBSOEc4QjhBOFVpbnQsCisgICAgQjhHOFI4QThVbm9ybSwKKyAgICBE
MzJGbG9hdFM4VWludAorfTsKKworc3RydWN0IEF0dGFjaG1lbnREZXNjcmlwdG9yIHsKKyAgICBU
ZXh0dXJlRm9ybWF0IHRleHR1cmVGb3JtYXQ7CisgICAgdW5zaWduZWQgbmFtZTsKK307CisKK3N0
cnVjdCBBdHRhY2htZW50c1N0YXRlRGVzY3JpcHRvciB7CisgICAgVmVjdG9yPEF0dGFjaG1lbnRE
ZXNjcmlwdG9yPiBhdHRhY2htZW50RGVzY3JpcHRvcnM7CisgICAgT3B0aW9uYWw8QXR0YWNobWVu
dERlc2NyaXB0b3I+IGRlcHRoU3RlbmNpbEF0dGFjaG1lbnREZXNjcmlwdG9yOworfTsKKworZW51
bSBjbGFzcyBTaGFkZXJTdGFnZSA6IHVpbnQ4X3QgeworICAgIE5vbmUgPSAwLAorICAgIFZlcnRl
eCA9IDEgPDwgMCwKKyAgICBGcmFnbWVudCA9IDEgPDwgMSwKKyAgICBDb21wdXRlID0gMSA8PCAy
Cit9OworCitlbnVtIGNsYXNzIEJpbmRpbmdUeXBlIDogdWludDhfdCB7CisgICAgVW5pZm9ybUJ1
ZmZlciwKKyAgICBTYW1wbGVyLAorICAgIFRleHR1cmUsCisgICAgU3RvcmFnZUJ1ZmZlciwKKyAg
ICAvLyBGSVhNRTogQWRkIHRoZSBkeW5hbWljIHR5cGVzCit9OworCitzdHJ1Y3QgQmluZGluZyB7
CisgICAgT3B0aW9uU2V0PFNoYWRlclN0YWdlPiB2aXNpYmlsaXR5OworICAgIEJpbmRpbmdUeXBl
IGJpbmRpbmdUeXBlOworICAgIHVuc2lnbmVkIG5hbWU7Cit9OworCitzdHJ1Y3QgQmluZEdyb3Vw
IHsKKyAgICBWZWN0b3I8QmluZGluZz4gYmluZGluZ3M7CisgICAgdW5zaWduZWQgbmFtZTsKK307
CisKK3VzaW5nIExheW91dCA9IFZlY3RvcjxCaW5kR3JvdXA+OworCitzdHJ1Y3QgUmVuZGVyUGlw
ZWxpbmVEZXNjcmlwdG9yIHsKKyAgICBWZXJ0ZXhBdHRyaWJ1dGVzIHZlcnRleEF0dHJpYnV0ZXM7
CisgICAgQXR0YWNobWVudHNTdGF0ZURlc2NyaXB0b3IgYXR0YWNobWVudHNTdGF0ZURlc2NyaXB0
b3I7CisgICAgTGF5b3V0IGxheW91dDsKKyAgICBTdHJpbmcgdmVydGV4RW50cnlQb2ludE5hbWU7
CisgICAgU3RyaW5nIGZyYWdtZW50RW50cnlQb2ludE5hbWU7Cit9OworCitzdHJ1Y3QgQ29tcHV0
ZVBpcGVsaW5lRGVzY3JpcHRvciB7CisgICAgTGF5b3V0IGxheW91dDsKKyAgICBTdHJpbmcgZW50
cnlQb2ludE5hbWU7Cit9OworCit1c2luZyBQaXBlbGluZURlc2NyaXB0b3IgPSBWYXJpYW50PFJl
bmRlclBpcGVsaW5lRGVzY3JpcHRvciwgQ29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvcj47CisKK30g
Ly8gbmFtZXNwYWNlIFdITFNMCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRShXRUJHUFUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTFByZXBhcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xQcmVwYXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZWMyYmQyODE1ZTcxZTgyODVkNDVj
OGRjNjg3NzYxMWFhYmMxYmIwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmNwcApAQCAtMCwwICsxLDEzMCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXSExTTFByZXBhcmUuaCIK
KworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJXSExTTENoZWNrRHVwbGljYXRlRnVu
Y3Rpb25zLmgiCisjaW5jbHVkZSAiV0hMU0xDaGVja2VyLmgiCisjaW5jbHVkZSAiV0hMU0xGdW5j
dGlvblN0YWdlQ2hlY2tlci5oIgorI2luY2x1ZGUgIldITFNMSGlnaFpvbWJpZUZpbmRlci5oIgor
I2luY2x1ZGUgIldITFNMTGl0ZXJhbFR5cGVDaGVja2VyLmgiCisjaW5jbHVkZSAiV0hMU0xNZXRh
bENvZGVHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJXSExTTE5hbWVSZXNvbHZlci5oIgorI2luY2x1
ZGUgIldITFNMUGFyc2VyLmgiCisjaW5jbHVkZSAiV0hMU0xQcm9ncmFtLmgiCisjaW5jbHVkZSAi
V0hMU0xSZWN1cnNpb25DaGVja2VyLmgiCisjaW5jbHVkZSAiV0hMU0xSZWN1cnNpdmVUeXBlQ2hl
Y2tlci5oIgorI2luY2x1ZGUgIldITFNMU2VtYW50aWNNYXRjaGVyLmgiCisjaW5jbHVkZSAiV0hM
U0xTdGFuZGFyZExpYnJhcnkuaCIKKyNpbmNsdWRlICJXSExTTFN0YXRlbWVudEJlaGF2aW9yQ2hl
Y2tlci5oIgorI2luY2x1ZGUgIldITFNMU3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGguaCIK
KyNpbmNsdWRlICJXSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuaCIKKyNpbmNsdWRlICJXSExT
TFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5oIgorI2luY2x1ZGUgIldITFNMU3ludGhl
c2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5oIgorI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworc3RhdGljIE9wdGlvbmFs
PFByb2dyYW0+IHByZXBhcmVTaGFyZWQoU3RyaW5nJiB3aGxzbFNvdXJjZSkKK3sKKyAgICBQcm9n
cmFtIHByb2dyYW07CisgICAgUGFyc2VyIHBhcnNlcjsKKyAgICBhdXRvIHN0YW5kYXJkTGlicmFy
eSA9IFN0cmluZzo6ZnJvbVVURjgoV0hMU0xTdGFuZGFyZExpYnJhcnksIHNpemVvZihXSExTTFN0
YW5kYXJkTGlicmFyeSkpOworICAgIGF1dG8gZmFpbHVyZSA9IHN0YXRpY19jYXN0PGJvb2w+KHBh
cnNlci5wYXJzZShwcm9ncmFtLCBzdGFuZGFyZExpYnJhcnksIFBhcnNlcjo6TW9kZTo6U3RhbmRh
cmRMaWJyYXJ5KSk7CisgICAgQVNTRVJUX1VOVVNFRChmYWlsdXJlLCAhZmFpbHVyZSk7CisgICAg
aWYgKHBhcnNlci5wYXJzZShwcm9ncmFtLCB3aGxzbFNvdXJjZSwgUGFyc2VyOjpNb2RlOjpVc2Vy
KSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBOYW1lUmVzb2x2ZXIgbmFtZVJl
c29sdmVyKHByb2dyYW0ubmFtZUNvbnRleHQoKSk7CisgICAgaWYgKCFyZXNvbHZlTmFtZXNJblR5
cGVzKHByb2dyYW0sIG5hbWVSZXNvbHZlcikpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CisgICAgaWYgKCFjaGVja1JlY3Vyc2l2ZVR5cGVzKHByb2dyYW0pKQorICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworICAgIHN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMocHJvZ3JhbSk7
CisgICAgc3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zKHByb2dyYW0pOworICAgIHN5bnRo
ZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoKHByb2dyYW0pOworICAgIHN5bnRoZXNpemVDb25zdHJ1
Y3RvcnMocHJvZ3JhbSk7CisgICAgcmVzb2x2ZU5hbWVzSW5GdW5jdGlvbnMocHJvZ3JhbSwgbmFt
ZVJlc29sdmVyKTsKKyAgICBpZiAoIWNoZWNrRHVwbGljYXRlRnVuY3Rpb25zKHByb2dyYW0pKQor
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgaWYgKCFjaGVjayhwcm9ncmFtKSkK
KyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBjaGVja0xpdGVyYWxUeXBlcyhwcm9n
cmFtKTsKKyAgICAvLyByZXNvbHZlUHJvcGVydGllcyhwcm9ncmFtKTsKKyAgICBmaW5kSGlnaFpv
bWJpZXMocHJvZ3JhbSk7CisgICAgaWYgKCFjaGVja1N0YXRlbWVudEJlaGF2aW9yKHByb2dyYW0p
KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGlmICghY2hlY2tSZWN1cnNpb24o
cHJvZ3JhbSkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgaWYgKCFjaGVja0Z1
bmN0aW9uU3RhZ2VzKHByb2dyYW0pKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAg
IHJldHVybiBwcm9ncmFtOworfQorCitPcHRpb25hbDxSZW5kZXJQcmVwYXJlUmVzdWx0PiBwcmVw
YXJlKFN0cmluZyYgd2hsc2xTb3VyY2UsIFJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciYgcmVuZGVy
UGlwZWxpbmVEZXNjcmlwdG9yKQoreworICAgIGF1dG8gcHJvZ3JhbSA9IHByZXBhcmVTaGFyZWQo
d2hsc2xTb3VyY2UpOworICAgIGlmICghcHJvZ3JhbSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKyAgICBhdXRvIG1hdGNoZWRTZW1hbnRpY3MgPSBtYXRjaFNlbWFudGljcygqcHJvZ3Jh
bSwgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKKyAgICBpZiAoIW1hdGNoZWRTZW1hbnRpY3Mp
CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBhdXRvIGdlbmVyYXRlZENvZGUg
PSBNZXRhbDo6Z2VuZXJhdGVNZXRhbENvZGUoKnByb2dyYW0sIFdURk1vdmUoKm1hdGNoZWRTZW1h
bnRpY3MpLCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IubGF5b3V0KTsKKworICAgIFJlbmRlclBy
ZXBhcmVSZXN1bHQgcmVzdWx0OworICAgIHJlc3VsdC5tZXRhbFNvdXJjZSA9IFdURk1vdmUoZ2Vu
ZXJhdGVkQ29kZS5tZXRhbFNvdXJjZSk7CisgICAgcmVzdWx0LnZlcnRleE1hcHBlZEJpbmRHcm91
cHMgPSBXVEZNb3ZlKGdlbmVyYXRlZENvZGUudmVydGV4TWFwcGVkQmluZEdyb3Vwcyk7CisgICAg
cmVzdWx0LmZyYWdtZW50TWFwcGVkQmluZEdyb3VwcyA9IFdURk1vdmUoZ2VuZXJhdGVkQ29kZS5m
cmFnbWVudE1hcHBlZEJpbmRHcm91cHMpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK09wdGlv
bmFsPENvbXB1dGVQcmVwYXJlUmVzdWx0PiBwcmVwYXJlKFN0cmluZyYgd2hsc2xTb3VyY2UsIENv
bXB1dGVQaXBlbGluZURlc2NyaXB0b3ImIGNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IpCit7Cisg
ICAgYXV0byBwcm9ncmFtID0gcHJlcGFyZVNoYXJlZCh3aGxzbFNvdXJjZSk7CisgICAgaWYgKCFw
cm9ncmFtKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGF1dG8gbWF0Y2hlZFNl
bWFudGljcyA9IG1hdGNoU2VtYW50aWNzKCpwcm9ncmFtLCBjb21wdXRlUGlwZWxpbmVEZXNjcmlw
dG9yKTsKKyAgICBpZiAoIW1hdGNoZWRTZW1hbnRpY3MpCisgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CisKKyAgICBhdXRvIGdlbmVyYXRlZENvZGUgPSBNZXRhbDo6Z2VuZXJhdGVNZXRhbENv
ZGUoKnByb2dyYW0sIFdURk1vdmUoKm1hdGNoZWRTZW1hbnRpY3MpLCBjb21wdXRlUGlwZWxpbmVE
ZXNjcmlwdG9yLmxheW91dCk7CisKKyAgICBDb21wdXRlUHJlcGFyZVJlc3VsdCByZXN1bHQ7Cisg
ICAgcmVzdWx0Lm1ldGFsU291cmNlID0gV1RGTW92ZShnZW5lcmF0ZWRDb2RlLm1ldGFsU291cmNl
KTsKKyAgICByZXN1bHQubWFwcGVkQmluZEdyb3VwcyA9IFdURk1vdmUoZ2VuZXJhdGVkQ29kZS5i
aW5kR3JvdXBzKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9IC8vIG5hbWVzcGFjZSBXSExT
TAorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR1BVKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVw
YXJlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4wZjJjODQ2NmJmNTY1YjdiMWU1MGM0YWFlY2ZkYjM1M2YyZGM4Y2YwCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xQcmVwYXJlLmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldITFNMTWFwcGVkQmluZGluZ3MuaCIK
KyNpbmNsdWRlICJXSExTTFBpcGVsaW5lRGVzY3JpcHRvci5oIgorI2luY2x1ZGUgPHd0Zi9PcHRp
b25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKKy8vIEZJWE1FOiBHZW5lcmF0ZSBkZXNjcmlw
dGl2ZSBlcnJvciBtZXNzYWdlcyBhbmQgcmV0dXJuIHRoZW0gaGVyZS4KK3N0cnVjdCBSZW5kZXJQ
cmVwYXJlUmVzdWx0IHsKKyAgICBTdHJpbmcgbWV0YWxTb3VyY2U7CisgICAgTWV0YWw6Ok1hcHBl
ZEJpbmRHcm91cHMgdmVydGV4TWFwcGVkQmluZEdyb3VwczsKKyAgICBNZXRhbDo6TWFwcGVkQmlu
ZEdyb3VwcyBmcmFnbWVudE1hcHBlZEJpbmRHcm91cHM7Cit9OworT3B0aW9uYWw8UmVuZGVyUHJl
cGFyZVJlc3VsdD4gcHJlcGFyZShTdHJpbmcmIHdobHNsU291cmNlLCBSZW5kZXJQaXBlbGluZURl
c2NyaXB0b3ImKTsKKworc3RydWN0IENvbXB1dGVQcmVwYXJlUmVzdWx0IHsKKyAgICBTdHJpbmcg
bWV0YWxTb3VyY2U7CisgICAgTWV0YWw6Ok1hcHBlZEJpbmRHcm91cHMgbWFwcGVkQmluZEdyb3Vw
czsKK307CitPcHRpb25hbDxDb21wdXRlUHJlcGFyZVJlc3VsdD4gcHJlcGFyZShTdHJpbmcmIHdo
bHNsU291cmNlLCBDb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yJik7CisKK30gLy8gbmFtZXNwYWNl
IFdITFNMCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJH
UFUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TFNlbWFudGljTWF0Y2hlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTFNlbWFudGljTWF0Y2hlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGJkY2MwY2U4ZjFkYTU3NmM1
YmY3MzRiOTM2ZTZjNmE5NzkzMjk4YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU2VtYW50aWNNYXRjaGVyLmNwcApAQCAtMCwwICsx
LDMwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXSExT
TFNlbWFudGljTWF0Y2hlci5oIgorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldI
TFNMQnVpbHRJblNlbWFudGljLmgiCisjaW5jbHVkZSAiV0hMU0xGdW5jdGlvbkRlZmluaXRpb24u
aCIKKyNpbmNsdWRlICJXSExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5oIgorI2luY2x1ZGUgIldI
TFNMSW5mZXJUeXBlcy5oIgorI2luY2x1ZGUgIldITFNMUGlwZWxpbmVEZXNjcmlwdG9yLmgiCisj
aW5jbHVkZSAiV0hMU0xQcm9ncmFtLmgiCisjaW5jbHVkZSAiV0hMU0xSZXNvdXJjZVNlbWFudGlj
LmgiCisjaW5jbHVkZSAiV0hMU0xTdGFnZUluT3V0U2VtYW50aWMuaCIKKyNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL09wdGlv
bmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworc3RhdGljIEFTVDo6RnVuY3Rpb25EZWZpbml0
aW9uKiBmaW5kRW50cnlQb2ludChWZWN0b3I8VW5pcXVlUmVmPEFTVDo6RnVuY3Rpb25EZWZpbml0
aW9uPj4mIGZ1bmN0aW9uRGVmaW5pdGlvbnMsIFN0cmluZyYgbmFtZSkKK3sKKyAgICBhdXRvIGl0
ZXJhdG9yID0gc3RkOjpmaW5kX2lmKGZ1bmN0aW9uRGVmaW5pdGlvbnMuYmVnaW4oKSwgZnVuY3Rp
b25EZWZpbml0aW9ucy5lbmQoKSwgWyZdKEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlv
bkRlZmluaXRpb24pIHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uRGVmaW5pdGlvbi5lbnRyeVBv
aW50VHlwZSgpICYmIGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gbmFtZTsKKyAgICB9KTsK
KyAgICBpZiAoaXRlcmF0b3IgPT0gZnVuY3Rpb25EZWZpbml0aW9ucy5lbmQoKSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuICYqaXRlcmF0b3I7Cit9OworCitzdGF0aWMgYm9v
bCBtYXRjaE1vZGUoQmluZGluZ1R5cGUgYmluZGluZ1R5cGUsIEFTVDo6UmVzb3VyY2VTZW1hbnRp
Yzo6TW9kZSBtb2RlKQoreworICAgIHN3aXRjaCAoYmluZGluZ1R5cGUpIHsKKyAgICBjYXNlIEJp
bmRpbmdUeXBlOjpVbmlmb3JtQnVmZmVyOgorICAgICAgICByZXR1cm4gbW9kZSA9PSBBU1Q6OlJl
c291cmNlU2VtYW50aWM6Ok1vZGU6OkJ1ZmZlcjsKKyAgICBjYXNlIEJpbmRpbmdUeXBlOjpTYW1w
bGVyOgorICAgICAgICByZXR1cm4gbW9kZSA9PSBBU1Q6OlJlc291cmNlU2VtYW50aWM6Ok1vZGU6
OlNhbXBsZXI7CisgICAgY2FzZSBCaW5kaW5nVHlwZTo6VGV4dHVyZToKKyAgICAgICAgcmV0dXJu
IG1vZGUgPT0gQVNUOjpSZXNvdXJjZVNlbWFudGljOjpNb2RlOjpUZXh0dXJlOworICAgIGRlZmF1
bHQ6CisgICAgICAgIEFTU0VSVChiaW5kaW5nVHlwZSA9PSBCaW5kaW5nVHlwZTo6U3RvcmFnZUJ1
ZmZlcik7CisgICAgICAgIHJldHVybiBtb2RlID09IEFTVDo6UmVzb3VyY2VTZW1hbnRpYzo6TW9k
ZTo6VW5vcmRlcmVkQWNjZXNzVmlldzsKKyAgICB9Cit9CisKK3N0YXRpYyBPcHRpb25hbDxIYXNo
TWFwPEJpbmRpbmcqLCBzaXplX3Q+PiBtYXRjaFJlc291cmNlcyhWZWN0b3I8RW50cnlQb2ludEl0
ZW0+JiBlbnRyeVBvaW50SXRlbXMsIExheW91dCYgbGF5b3V0LCBTaGFkZXJTdGFnZSBzaGFkZXJT
dGFnZSkKK3sKKyAgICBIYXNoTWFwPEJpbmRpbmcqLCBzaXplX3Q+IHJlc3VsdDsKKyAgICBIYXNo
U2V0PHNpemVfdD4gaXRlbUluZGljZXM7CisgICAgaWYgKGVudHJ5UG9pbnRJdGVtcy5zaXplKCkg
PT0gc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSkKKyAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsgLy8gV29yayBhcm91bmQgdGhlIGZhY3QgdGhhdCBIYXNoU2V0J3Mga2V5cyBh
cmUgcmVzdHJpY3RlZC4KKyAgICBmb3IgKGF1dG8mIGJpbmRHcm91cCA6IGxheW91dCkgeworICAg
ICAgICBhdXRvIHNwYWNlID0gYmluZEdyb3VwLm5hbWU7CisgICAgICAgIGZvciAoYXV0byYgYmlu
ZGluZyA6IGJpbmRHcm91cC5iaW5kaW5ncykgeworICAgICAgICAgICAgaWYgKCFiaW5kaW5nLnZp
c2liaWxpdHkuY29udGFpbnMoc2hhZGVyU3RhZ2UpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBlbnRyeVBvaW50SXRlbXMuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBpdGVtID0gZW50cnlQb2ludEl0ZW1z
W2ldOworICAgICAgICAgICAgICAgIGF1dG8mIHNlbWFudGljID0gKml0ZW0uc2VtYW50aWM7Cisg
ICAgICAgICAgICAgICAgaWYgKCFXVEY6OmhvbGRzX2FsdGVybmF0aXZlPEFTVDo6UmVzb3VyY2VT
ZW1hbnRpYz4oc2VtYW50aWMpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgICAgICBhdXRvJiByZXNvdXJjZVNlbWFudGljID0gV1RGOjpnZXQ8QVNUOjpSZXNvdXJj
ZVNlbWFudGljPihzZW1hbnRpYyk7CisgICAgICAgICAgICAgICAgaWYgKCFtYXRjaE1vZGUoYmlu
ZGluZy5iaW5kaW5nVHlwZSwgcmVzb3VyY2VTZW1hbnRpYy5tb2RlKCkpKQorICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBpZiAoYmluZGluZy5uYW1lICE9IHJl
c291cmNlU2VtYW50aWMuaW5kZXgoKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAgICAgaWYgKHNwYWNlICE9IHJlc291cmNlU2VtYW50aWMuc3BhY2UoKSkKKyAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFkZCgm
YmluZGluZywgaSk7CisgICAgICAgICAgICAgICAgaXRlbUluZGljZXMuYWRkKGkgKyAxKTsgLy8g
V29yayBhcm91bmQgdGhlIGZhY3QgdGhhdCBIYXNoU2V0J3Mga2V5cyBhcmUgcmVzdHJpY3RlZC4K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgZW50cnlQb2ludEl0ZW1zLnNpemUoKTsgKytpKSB7CisgICAgICAgIGF1dG8mIGl0ZW0g
PSBlbnRyeVBvaW50SXRlbXNbaV07CisgICAgICAgIGF1dG8mIHNlbWFudGljID0gKml0ZW0uc2Vt
YW50aWM7CisgICAgICAgIGlmICghV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxBU1Q6OlJlc291cmNl
U2VtYW50aWM+KHNlbWFudGljKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAo
IWl0ZW1JbmRpY2VzLmNvbnRhaW5zKGkgKyAxKSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGJvb2wgbWF0
Y2hJbnB1dHNPdXRwdXRzKFZlY3RvcjxFbnRyeVBvaW50SXRlbT4mIHZlcnRleE91dHB1dHMsIFZl
Y3RvcjxFbnRyeVBvaW50SXRlbT4mIGZyYWdtZW50SW5wdXRzKQoreworICAgIGZvciAoYXV0byYg
ZnJhZ21lbnRJbnB1dCA6IGZyYWdtZW50SW5wdXRzKSB7CisgICAgICAgIGlmICghV1RGOjpob2xk
c19hbHRlcm5hdGl2ZTxBU1Q6OlN0YWdlSW5PdXRTZW1hbnRpYz4oKmZyYWdtZW50SW5wdXQuc2Vt
YW50aWMpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGF1dG8mIGZyYWdtZW50SW5w
dXRTdGFnZUluT3V0U2VtYW50aWMgPSBXVEY6OmdldDxBU1Q6OlN0YWdlSW5PdXRTZW1hbnRpYz4o
KmZyYWdtZW50SW5wdXQuc2VtYW50aWMpOworICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7Cisg
ICAgICAgIGZvciAoYXV0byYgdmVydGV4T3V0cHV0IDogdmVydGV4T3V0cHV0cykgeworICAgICAg
ICAgICAgaWYgKCFXVEY6OmhvbGRzX2FsdGVybmF0aXZlPEFTVDo6U3RhZ2VJbk91dFNlbWFudGlj
PigqdmVydGV4T3V0cHV0LnNlbWFudGljKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgIGF1dG8mIHZlcnRleE91dHB1dFN0YWdlSW5PdXRTZW1hbnRpYyA9IFdURjo6Z2V0
PEFTVDo6U3RhZ2VJbk91dFNlbWFudGljPigqdmVydGV4T3V0cHV0LnNlbWFudGljKTsKKyAgICAg
ICAgICAgIGlmIChmcmFnbWVudElucHV0U3RhZ2VJbk91dFNlbWFudGljLmluZGV4KCkgPT0gdmVy
dGV4T3V0cHV0U3RhZ2VJbk91dFNlbWFudGljLmluZGV4KCkpIHsKKyAgICAgICAgICAgICAgICBp
ZiAobWF0Y2hlcygqZnJhZ21lbnRJbnB1dC51bm5hbWVkVHlwZSwgKnZlcnRleE91dHB1dC51bm5h
bWVkVHlwZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICghZm91bmQp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQor
CitzdGF0aWMgYm9vbCBpc0FjY2VwdGFibGVGb3JtYXQoVmVydGV4Rm9ybWF0IHZlcnRleEZvcm1h
dCwgQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUsIEludHJpbnNpY3MmIGludHJpbnNpY3Mp
Cit7CisgICAgc3dpdGNoICh2ZXJ0ZXhGb3JtYXQpIHsKKyAgICBjYXNlIFZlcnRleEZvcm1hdDo6
RmxvYXRSMzJHMzJCMzJBMzI6CisgICAgICAgIHJldHVybiBtYXRjaGVzKHVubmFtZWRUeXBlLCBp
bnRyaW5zaWNzLmZsb2F0NFR5cGUoKSk7CisgICAgY2FzZSBWZXJ0ZXhGb3JtYXQ6OkZsb2F0UjMy
RzMyQjMyOgorICAgICAgICByZXR1cm4gbWF0Y2hlcyh1bm5hbWVkVHlwZSwgaW50cmluc2ljcy5m
bG9hdDNUeXBlKCkpOworICAgIGNhc2UgVmVydGV4Rm9ybWF0OjpGbG9hdFIzMkczMjoKKyAgICAg
ICAgcmV0dXJuIG1hdGNoZXModW5uYW1lZFR5cGUsIGludHJpbnNpY3MuZmxvYXQyVHlwZSgpKTsK
KyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlQodmVydGV4Rm9ybWF0ID09IFZlcnRleEZvcm1h
dDo6RmxvYXRSMzIpOworICAgICAgICByZXR1cm4gbWF0Y2hlcyh1bm5hbWVkVHlwZSwgaW50cmlu
c2ljcy5mbG9hdFR5cGUoKSk7CisgICAgfQorfQorCitzdGF0aWMgT3B0aW9uYWw8SGFzaE1hcDxW
ZXJ0ZXhBdHRyaWJ1dGUqLCBzaXplX3Q+PiBtYXRjaFZlcnRleEF0dHJpYnV0ZXMoVmVjdG9yPEVu
dHJ5UG9pbnRJdGVtPiYgdmVydGV4SW5wdXRzLCBWZXJ0ZXhBdHRyaWJ1dGVzJiB2ZXJ0ZXhBdHRy
aWJ1dGVzLCBJbnRyaW5zaWNzJiBpbnRyaW5zaWNzKQoreworICAgIEhhc2hNYXA8VmVydGV4QXR0
cmlidXRlKiwgc2l6ZV90PiByZXN1bHQ7CisgICAgSGFzaFNldDxzaXplX3Q+IGl0ZW1JbmRpY2Vz
OworICAgIGlmICh2ZXJ0ZXhJbnB1dHMuc2l6ZSgpID09IHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6
ZV90Pjo6bWF4KCkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7IC8vIFdvcmsgYXJvdW5k
IHRoZSBmYWN0IHRoYXQgSGFzaFNldCdzIGtleXMgYXJlIHJlc3RyaWN0ZWQuCisgICAgZm9yIChh
dXRvJiB2ZXJ0ZXhBdHRyaWJ1dGUgOiB2ZXJ0ZXhBdHRyaWJ1dGVzKSB7CisgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgdmVydGV4SW5wdXRzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAg
ICBhdXRvJiBpdGVtID0gdmVydGV4SW5wdXRzW2ldOworICAgICAgICAgICAgYXV0byYgc2VtYW50
aWMgPSAqaXRlbS5zZW1hbnRpYzsKKyAgICAgICAgICAgIGlmICghV1RGOjpob2xkc19hbHRlcm5h
dGl2ZTxBU1Q6OlN0YWdlSW5PdXRTZW1hbnRpYz4oc2VtYW50aWMpKQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgYXV0byYgc3RhZ2VJbk91dFNlbWFudGljID0gV1RGOjpn
ZXQ8QVNUOjpTdGFnZUluT3V0U2VtYW50aWM+KHNlbWFudGljKTsKKyAgICAgICAgICAgIGlmIChz
dGFnZUluT3V0U2VtYW50aWMuaW5kZXgoKSAhPSB2ZXJ0ZXhBdHRyaWJ1dGUubmFtZSkKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmICghaXNBY2NlcHRhYmxlRm9ybWF0
KHZlcnRleEF0dHJpYnV0ZS52ZXJ0ZXhGb3JtYXQsICppdGVtLnVubmFtZWRUeXBlLCBpbnRyaW5z
aWNzKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICAgICAg
cmVzdWx0LmFkZCgmdmVydGV4QXR0cmlidXRlLCBpKTsKKyAgICAgICAgICAgIGl0ZW1JbmRpY2Vz
LmFkZChpICsgMSk7IC8vIFdvcmsgYXJvdW5kIHRoZSBmYWN0IHRoYXQgSGFzaFNldCdzIGtleXMg
YXJlIHJlc3RyaWN0ZWQuCisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHZlcnRleElucHV0cy5zaXplKCk7ICsraSkgeworICAgICAgICBhdXRvJiBpdGVtID0g
dmVydGV4SW5wdXRzW2ldOworICAgICAgICBhdXRvJiBzZW1hbnRpYyA9ICppdGVtLnNlbWFudGlj
OworICAgICAgICBpZiAoIVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8QVNUOjpTdGFnZUluT3V0U2Vt
YW50aWM+KHNlbWFudGljKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoIWl0
ZW1JbmRpY2VzLmNvbnRhaW5zKGkgKyAxKSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGJvb2wgaXNBY2Nl
cHRhYmxlRm9ybWF0KFRleHR1cmVGb3JtYXQgdGV4dHVyZUZvcm1hdCwgQVNUOjpVbm5hbWVkVHlw
ZSYgdW5uYW1lZFR5cGUsIEludHJpbnNpY3MmIGludHJpbnNpY3MsIGJvb2wgaXNDb2xvcikKK3sK
KyAgICBpZiAoaXNDb2xvcikgeworICAgICAgICBzd2l0Y2ggKHRleHR1cmVGb3JtYXQpIHsKKyAg
ICAgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpSOEc4QjhBOFVub3JtOgorICAgICAgICBjYXNlIFRl
eHR1cmVGb3JtYXQ6OlI4RzhCOEE4VWludDoKKyAgICAgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpC
OEc4UjhBOFVub3JtOgorICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXModW5uYW1lZFR5cGUsIGlu
dHJpbnNpY3MuZmxvYXQ0VHlwZSgpKTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFT
U0VSVCh0ZXh0dXJlRm9ybWF0ID09IFRleHR1cmVGb3JtYXQ6OkQzMkZsb2F0UzhVaW50KTsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdGV4
dHVyZUZvcm1hdCA9PSBUZXh0dXJlRm9ybWF0OjpEMzJGbG9hdFM4VWludCAmJiBtYXRjaGVzKHVu
bmFtZWRUeXBlLCBpbnRyaW5zaWNzLmZsb2F0VHlwZSgpKTsKK30KKworc3RhdGljIE9wdGlvbmFs
PEhhc2hNYXA8QXR0YWNobWVudERlc2NyaXB0b3IqLCBzaXplX3Q+PiBtYXRjaENvbG9yQXR0YWNo
bWVudHMoVmVjdG9yPEVudHJ5UG9pbnRJdGVtPiYgZnJhZ21lbnRPdXRwdXRzLCBWZWN0b3I8QXR0
YWNobWVudERlc2NyaXB0b3I+JiBhdHRhY2htZW50RGVzY3JpcHRvcnMsIEludHJpbnNpY3MmIGlu
dHJpbnNpY3MpCit7CisgICAgSGFzaE1hcDxBdHRhY2htZW50RGVzY3JpcHRvciosIHNpemVfdD4g
cmVzdWx0OworICAgIEhhc2hTZXQ8c2l6ZV90PiBpdGVtSW5kaWNlczsKKyAgICBpZiAoYXR0YWNo
bWVudERlc2NyaXB0b3JzLnNpemUoKSA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1h
eCgpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OyAvLyBXb3JrIGFyb3VuZCB0aGUgZmFj
dCB0aGF0IEhhc2hTZXQncyBrZXlzIGFyZSByZXN0cmljdGVkLgorICAgIGZvciAoYXV0byYgYXR0
YWNobWVudERlc2NyaXB0b3IgOiBhdHRhY2htZW50RGVzY3JpcHRvcnMpIHsKKyAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBmcmFnbWVudE91dHB1dHMuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgICAgIGF1dG8mIGl0ZW0gPSBmcmFnbWVudE91dHB1dHNbaV07CisgICAgICAgICAgICBhdXRv
JiBzZW1hbnRpYyA9ICppdGVtLnNlbWFudGljOworICAgICAgICAgICAgaWYgKCFXVEY6OmhvbGRz
X2FsdGVybmF0aXZlPEFTVDo6U3RhZ2VJbk91dFNlbWFudGljPihzZW1hbnRpYykpCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBhdXRvJiBzdGFnZUluT3V0U2VtYW50aWMg
PSBXVEY6OmdldDxBU1Q6OlN0YWdlSW5PdXRTZW1hbnRpYz4oc2VtYW50aWMpOworICAgICAgICAg
ICAgaWYgKHN0YWdlSW5PdXRTZW1hbnRpYy5pbmRleCgpICE9IGF0dGFjaG1lbnREZXNjcmlwdG9y
Lm5hbWUpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAoIWlzQWNj
ZXB0YWJsZUZvcm1hdChhdHRhY2htZW50RGVzY3JpcHRvci50ZXh0dXJlRm9ybWF0LCAqaXRlbS51
bm5hbWVkVHlwZSwgaW50cmluc2ljcywgdHJ1ZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKyAgICAgICAgICAgIHJlc3VsdC5hZGQoJmF0dGFjaG1lbnREZXNjcmlwdG9y
LCBpKTsKKyAgICAgICAgICAgIGl0ZW1JbmRpY2VzLmFkZChpICsgMSk7IC8vIFdvcmsgYXJvdW5k
IHRoZSBmYWN0IHRoYXQgSGFzaFNldCdzIGtleXMgYXJlIHJlc3RyaWN0ZWQuCisgICAgICAgIH0K
KyAgICB9CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZyYWdtZW50T3V0cHV0cy5zaXpl
KCk7ICsraSkgeworICAgICAgICBhdXRvJiBpdGVtID0gZnJhZ21lbnRPdXRwdXRzW2ldOworICAg
ICAgICBhdXRvJiBzZW1hbnRpYyA9ICppdGVtLnNlbWFudGljOworICAgICAgICBpZiAoIVdURjo6
aG9sZHNfYWx0ZXJuYXRpdmU8QVNUOjpTdGFnZUluT3V0U2VtYW50aWM+KHNlbWFudGljKSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoIWl0ZW1JbmRpY2VzLmNvbnRhaW5zKGkg
KyAxKSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgfQorCisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGJvb2wgbWF0Y2hEZXB0aEF0dGFjaG1lbnQoVmVjdG9y
PEVudHJ5UG9pbnRJdGVtPiYgZnJhZ21lbnRPdXRwdXRzLCBPcHRpb25hbDxBdHRhY2htZW50RGVz
Y3JpcHRvcj4mIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnREZXNjcmlwdG9yLCBJbnRyaW5zaWNzJiBp
bnRyaW5zaWNzKQoreworICAgIGF1dG8gaXRlcmF0b3IgPSBzdGQ6OmZpbmRfaWYoZnJhZ21lbnRP
dXRwdXRzLmJlZ2luKCksIGZyYWdtZW50T3V0cHV0cy5lbmQoKSwgWyZdKEVudHJ5UG9pbnRJdGVt
JiBpdGVtKSB7CisgICAgICAgIGF1dG8mIHNlbWFudGljID0gKml0ZW0uc2VtYW50aWM7CisgICAg
ICAgIGlmICghV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxBU1Q6OkJ1aWx0SW5TZW1hbnRpYz4oc2Vt
YW50aWMpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBhdXRvJiBidWlsdElu
U2VtYW50aWMgPSBXVEY6OmdldDxBU1Q6OkJ1aWx0SW5TZW1hbnRpYz4oc2VtYW50aWMpOworICAg
ICAgICByZXR1cm4gYnVpbHRJblNlbWFudGljLnZhcmlhYmxlKCkgPT0gQVNUOjpCdWlsdEluU2Vt
YW50aWM6OlZhcmlhYmxlOjpTVkRlcHRoOworICAgIH0pOworICAgIGlmIChpdGVyYXRvciA9PSBm
cmFnbWVudE91dHB1dHMuZW5kKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGRl
cHRoU3RlbmNpbEF0dGFjaG1lbnREZXNjcmlwdG9yKSB7CisgICAgICAgIEFTU0VSVCghZGVwdGhT
dGVuY2lsQXR0YWNobWVudERlc2NyaXB0b3ItPm5hbWUpOworICAgICAgICByZXR1cm4gaXNBY2Nl
cHRhYmxlRm9ybWF0KGRlcHRoU3RlbmNpbEF0dGFjaG1lbnREZXNjcmlwdG9yLT50ZXh0dXJlRm9y
bWF0LCAqaXRlcmF0b3ItPnVubmFtZWRUeXBlLCBpbnRyaW5zaWNzLCBmYWxzZSk7CisgICAgfQor
ICAgIHJldHVybiBmYWxzZTsKK30KKworT3B0aW9uYWw8TWF0Y2hlZFJlbmRlclNlbWFudGljcz4g
bWF0Y2hTZW1hbnRpY3MoUHJvZ3JhbSYgcHJvZ3JhbSwgUmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9y
JiByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpCit7CisgICAgYXV0byB2ZXJ0ZXhTaGFkZXJFbnRy
eVBvaW50ID0gZmluZEVudHJ5UG9pbnQocHJvZ3JhbS5mdW5jdGlvbkRlZmluaXRpb25zKCksIHJl
bmRlclBpcGVsaW5lRGVzY3JpcHRvci52ZXJ0ZXhFbnRyeVBvaW50TmFtZSk7CisgICAgYXV0byBm
cmFnbWVudFNoYWRlckVudHJ5UG9pbnQgPSBmaW5kRW50cnlQb2ludChwcm9ncmFtLmZ1bmN0aW9u
RGVmaW5pdGlvbnMoKSwgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yLmZyYWdtZW50RW50cnlQb2lu
dE5hbWUpOworICAgIGlmICghdmVydGV4U2hhZGVyRW50cnlQb2ludCB8fCAhZnJhZ21lbnRTaGFk
ZXJFbnRyeVBvaW50KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGF1dG8gdmVy
dGV4U2hhZGVyRW50cnlQb2ludEl0ZW1zID0gZ2F0aGVyRW50cnlQb2ludEl0ZW1zKHByb2dyYW0u
aW50cmluc2ljcygpLCAqdmVydGV4U2hhZGVyRW50cnlQb2ludCk7CisgICAgYXV0byBmcmFnbWVu
dFNoYWRlckVudHJ5UG9pbnRJdGVtcyA9IGdhdGhlckVudHJ5UG9pbnRJdGVtcyhwcm9ncmFtLmlu
dHJpbnNpY3MoKSwgKmZyYWdtZW50U2hhZGVyRW50cnlQb2ludCk7CisgICAgaWYgKCF2ZXJ0ZXhT
aGFkZXJFbnRyeVBvaW50SXRlbXMgfHwgIWZyYWdtZW50U2hhZGVyRW50cnlQb2ludEl0ZW1zKQor
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGF1dG8gdmVydGV4U2hhZGVyUmVzb3Vy
Y2VNYXAgPSBtYXRjaFJlc291cmNlcyh2ZXJ0ZXhTaGFkZXJFbnRyeVBvaW50SXRlbXMtPmlucHV0
cywgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yLmxheW91dCwgU2hhZGVyU3RhZ2U6OlZlcnRleCk7
CisgICAgYXV0byBmcmFnbWVudFNoYWRlclJlc291cmNlTWFwID0gbWF0Y2hSZXNvdXJjZXMoZnJh
Z21lbnRTaGFkZXJFbnRyeVBvaW50SXRlbXMtPmlucHV0cywgcmVuZGVyUGlwZWxpbmVEZXNjcmlw
dG9yLmxheW91dCwgU2hhZGVyU3RhZ2U6OkZyYWdtZW50KTsKKyAgICBpZiAoIXZlcnRleFNoYWRl
clJlc291cmNlTWFwIHx8ICFmcmFnbWVudFNoYWRlclJlc291cmNlTWFwKQorICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OworICAgIGlmICghbWF0Y2hJbnB1dHNPdXRwdXRzKHZlcnRleFNoYWRl
ckVudHJ5UG9pbnRJdGVtcy0+b3V0cHV0cywgZnJhZ21lbnRTaGFkZXJFbnRyeVBvaW50SXRlbXMt
PmlucHV0cykpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgYXV0byBtYXRjaGVk
VmVydGV4QXR0cmlidXRlcyA9IG1hdGNoVmVydGV4QXR0cmlidXRlcyh2ZXJ0ZXhTaGFkZXJFbnRy
eVBvaW50SXRlbXMtPmlucHV0cywgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yLnZlcnRleEF0dHJp
YnV0ZXMsIHByb2dyYW0uaW50cmluc2ljcygpKTsKKyAgICBpZiAoIW1hdGNoZWRWZXJ0ZXhBdHRy
aWJ1dGVzKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGF1dG8gbWF0Y2hlZENv
bG9yQXR0YWNobWVudHMgPSBtYXRjaENvbG9yQXR0YWNobWVudHMoZnJhZ21lbnRTaGFkZXJFbnRy
eVBvaW50SXRlbXMtPm91dHB1dHMsIHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvci5hdHRhY2htZW50
c1N0YXRlRGVzY3JpcHRvci5hdHRhY2htZW50RGVzY3JpcHRvcnMsIHByb2dyYW0uaW50cmluc2lj
cygpKTsKKyAgICBpZiAoIW1hdGNoZWRDb2xvckF0dGFjaG1lbnRzKQorICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworICAgIGlmICghbWF0Y2hEZXB0aEF0dGFjaG1lbnQoZnJhZ21lbnRTaGFk
ZXJFbnRyeVBvaW50SXRlbXMtPm91dHB1dHMsIHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvci5hdHRh
Y2htZW50c1N0YXRlRGVzY3JpcHRvci5kZXB0aFN0ZW5jaWxBdHRhY2htZW50RGVzY3JpcHRvciwg
cHJvZ3JhbS5pbnRyaW5zaWNzKCkpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAg
IHJldHVybiB7eyB2ZXJ0ZXhTaGFkZXJFbnRyeVBvaW50LCBmcmFnbWVudFNoYWRlckVudHJ5UG9p
bnQsICp2ZXJ0ZXhTaGFkZXJFbnRyeVBvaW50SXRlbXMsICpmcmFnbWVudFNoYWRlckVudHJ5UG9p
bnRJdGVtcywgKnZlcnRleFNoYWRlclJlc291cmNlTWFwLCAqZnJhZ21lbnRTaGFkZXJSZXNvdXJj
ZU1hcCwgKm1hdGNoZWRWZXJ0ZXhBdHRyaWJ1dGVzLCAqbWF0Y2hlZENvbG9yQXR0YWNobWVudHMg
fX07Cit9CisKK09wdGlvbmFsPE1hdGNoZWRDb21wdXRlU2VtYW50aWNzPiBtYXRjaFNlbWFudGlj
cyhQcm9ncmFtJiBwcm9ncmFtLCBDb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yJiBjb21wdXRlUGlw
ZWxpbmVEZXNjcmlwdG9yKQoreworICAgIGF1dG8gZW50cnlQb2ludCA9IGZpbmRFbnRyeVBvaW50
KHByb2dyYW0uZnVuY3Rpb25EZWZpbml0aW9ucygpLCBjb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9y
LmVudHJ5UG9pbnROYW1lKTsKKyAgICBpZiAoIWVudHJ5UG9pbnQpCisgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CisgICAgYXV0byBlbnRyeVBvaW50SXRlbXMgPSBnYXRoZXJFbnRyeVBvaW50
SXRlbXMocHJvZ3JhbS5pbnRyaW5zaWNzKCksICplbnRyeVBvaW50KTsKKyAgICBpZiAoIWVudHJ5
UG9pbnRJdGVtcykKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBBU1NFUlQoZW50
cnlQb2ludEl0ZW1zLT5vdXRwdXRzLmlzRW1wdHkoKSk7CisgICAgYXV0byByZXNvdXJjZU1hcCA9
IG1hdGNoUmVzb3VyY2VzKGVudHJ5UG9pbnRJdGVtcy0+aW5wdXRzLCBjb21wdXRlUGlwZWxpbmVE
ZXNjcmlwdG9yLmxheW91dCwgU2hhZGVyU3RhZ2U6OkNvbXB1dGUpOworICAgIGlmICghcmVzb3Vy
Y2VNYXApCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIHt7IGVudHJ5
UG9pbnQsICplbnRyeVBvaW50SXRlbXMsICpyZXNvdXJjZU1hcCB9fTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV0hMU0wKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxF
KFdFQkdQVSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMU2VtYW50aWNNYXRjaGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTFNlbWFudGljTWF0Y2hlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJkZmY0YmJmZjc4ODA4NGY3
N2RjNmU2OGRhZWNkNjg5N2NiMWNjNzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFNlbWFudGljTWF0Y2hlci5oCkBAIC0wLDAgKzEs
NjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisK
KyNpbmNsdWRlICJXSExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5oIgorI2luY2x1ZGUgIldITFNM
UGlwZWxpbmVEZXNjcmlwdG9yLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCitjbGFzcyBQcm9ncmFtOworCitz
dHJ1Y3QgTWF0Y2hlZFJlbmRlclNlbWFudGljcyB7CisgICAgQVNUOjpGdW5jdGlvbkRlZmluaXRp
b24qIHZlcnRleFNoYWRlcjsKKyAgICBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiogZnJhZ21lbnRT
aGFkZXI7CisgICAgRW50cnlQb2ludEl0ZW1zIHZlcnRleFNoYWRlckVudHJ5UG9pbnRJdGVtczsK
KyAgICBFbnRyeVBvaW50SXRlbXMgZnJhZ21lbnRTaGFkZXJFbnRyeVBvaW50SXRlbXM7CisgICAg
SGFzaE1hcDxCaW5kaW5nKiwgc2l6ZV90PiB2ZXJ0ZXhTaGFkZXJSZXNvdXJjZU1hcDsKKyAgICBI
YXNoTWFwPEJpbmRpbmcqLCBzaXplX3Q+IGZyYWdtZW50U2hhZGVyUmVzb3VyY2VNYXA7CisgICAg
SGFzaE1hcDxWZXJ0ZXhBdHRyaWJ1dGUqLCBzaXplX3Q+IG1hdGNoZWRWZXJ0ZXhBdHRyaWJ1dGVz
OworICAgIEhhc2hNYXA8QXR0YWNobWVudERlc2NyaXB0b3IqLCBzaXplX3Q+IG1hdGNoZWRDb2xv
ckF0dGFjaG1lbnRzOworfTsKKworT3B0aW9uYWw8TWF0Y2hlZFJlbmRlclNlbWFudGljcz4gbWF0
Y2hTZW1hbnRpY3MoUHJvZ3JhbSYsIFJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciYpOworCitzdHJ1
Y3QgTWF0Y2hlZENvbXB1dGVTZW1hbnRpY3MgeworICAgIEFTVDo6RnVuY3Rpb25EZWZpbml0aW9u
KiBzaGFkZXI7CisgICAgRW50cnlQb2ludEl0ZW1zIGVudHJ5UG9pbnRJdGVtczsKKyAgICBIYXNo
TWFwPEJpbmRpbmcqLCBzaXplX3Q+IHJlc291cmNlTWFwOworfTsKKworT3B0aW9uYWw8TWF0Y2hl
ZENvbXB1dGVTZW1hbnRpY3M+IG1hdGNoU2VtYW50aWNzKFByb2dyYW0mLCBDb21wdXRlUGlwZWxp
bmVEZXNjcmlwdG9yJik7CisKK30gLy8gbmFtZXNwYWNlIFdITFNMCisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJHUFUpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IGI1
NzVlNjhiZmZiYWJhZTkyMTY1MGQ0YTliZjZjNDI1MzFhMWQ3OTYuLjg0MTU3NzAzMTk4MWE2NzA2
YjM0ZWUzMTFmMzAwNzdjNzU0MmFiZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJj
ZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0zMjQsNiArMzI0LDcg
QEAgTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuY3BwCiBNb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTFJlc29sdmVPdmVybG9hZEltcGwuY3BwCiBNb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTFJlY3Vyc2lvbkNoZWNrZXIuY3BwCiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TFZpc2l0b3IuY3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFNlbWFudGljTWF0Y2hlci5j
cHAKIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTGl0ZXJhbFR5cGVDaGVja2VyLmNwcAogTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xIaWdoWm9tYmllRmluZGVyLmNwcAogTW9kdWxlcy93ZWJn
cHUvV0hMU0wvTWV0YWwvV0hMU0xUeXBlTmFtZXIuY3BwCkBAIC0zNDYsNiArMzQ3LDcgQEAgTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUuY3Bw
CiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlUmVmZXJlbmNlLmNwcAogTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW50ZWdlckxpdGVyYWwuY3BwCiBNb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsLmNwcAorTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xQcmVwYXJlLmNwcAogTW9kdWxlcy93ZWJncHUvV2ViR1BVLmNwcAogTW9k
dWxlcy93ZWJncHUvV2ViR1BVQmluZEdyb3VwLmNwcAogTW9kdWxlcy93ZWJncHUvV2ViR1BVQmlu
ZEdyb3VwRGVzY3JpcHRvci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA4ZjA5MDliMDNlMDM1M2Q0MDk4MGFkMTY0ZGNjNjE5
MmM1YmM1MmE5Li4xZjI2YzM5MTM4Y2FmZTk3OWJjNTYyMjk3NTkzYjYxNjI0ZmQwOWE4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
KysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBA
IC0xMzQzMSw2ICsxMzQzMSwxMiBAQAogCQlDMjM0QTlCNjIxRTkyQ0MwMDAzQzk4NEQgLyogV0hM
U0xJbnRyaW5zaWNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMSW50cmluc2ljcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlDMjM0QTlCNzIxRTkyQ0MxMDAzQzk4NEQgLyogV0hMU0xJ
bnRyaW5zaWNzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMSW50cmluc2ljcy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyNDU4RTYxMUZFODk3OUUwMDU5NDc1OSAvKiBG
b250Q2FjaGVDb3JlVGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb250Q2FjaGVDb3JlVGV4dC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjRBNTdBRjIxRkFENTNGMDA0QzZERDEgLyog
V0hMU0xQaXBlbGluZURlc2NyaXB0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xQaXBlbGluZURl
c2NyaXB0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzI0QTU3QjIyMUZCOERE
QTAwNEM2REQxIC8qIFdITFNMU2VtYW50aWNNYXRjaGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFdITFNMU2VtYW50aWNNYXRjaGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QzI0QTU3QjMyMUZCOEREQTAwNEM2REQxIC8qIFdITFNMU2VtYW50aWNNYXRjaGVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdITFNMU2VtYW50aWNNYXRjaGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUMyNEE1N0JBMjFGRUFGRUEwMDRDNkREMSAvKiBXSExTTFByZXBhcmUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gV0hMU0xQcmVwYXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQzI0QTU3QkIyMUZFQUZFQTAwNEM2REQxIC8qIFdITFNMUHJlcGFyZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXSExTTFByZXBhcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzI0
QTU3QkUyMUZFQzY1QzAwNEM2REQxIC8qIFdITFNMTWFwcGVkQmluZGluZ3MuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV0hMU0xNYXBwZWRCaW5kaW5ncy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlDMjYwMTdBMTFDNzJEQzk5MDBGNzRBMTYgLyogQ1NTRm9udEZhY2VTZXQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTRm9udEZhY2VTZXQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlDMjYwMTdBMjFDNzJEQzk5MDBGNzRBMTYgLyogQ1NTRm9u
dEZhY2VTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTRm9udEZhY2VT
ZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzI4MDgzM0MxQzZEQjE5NDAwMTQ1
MUI2IC8qIEZvbnRGYWNlLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBGb250RmFjZS5pZGw7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNzIxNyw2ICsxNzIyMyw3IEBACiAJCQkJ
MUNFQ0IzQkIyMUY1MTFBQTAwRjQ0NTQyIC8qIFdITFNMRW50cnlQb2ludFNjYWZmb2xkaW5nLmgg
Ki8sCiAJCQkJMUNFQ0IzQUYyMUYyQjk4NDAwRjQ0NTQyIC8qIFdITFNMRnVuY3Rpb25Xcml0ZXIu
Y3BwICovLAogCQkJCTFDRUNCM0IyMjFGMkI5ODYwMEY0NDU0MiAvKiBXSExTTEZ1bmN0aW9uV3Jp
dGVyLmggKi8sCisJCQkJQzI0QTU3QkUyMUZFQzY1QzAwNEM2REQxIC8qIFdITFNMTWFwcGVkQmlu
ZGluZ3MuaCAqLywKIAkJCQkxQ0VDQjNCNTIxRjUwQUM3MDBGNDQ1NDIgLyogV0hMU0xNZXRhbENv
ZGVHZW5lcmF0b3IuY3BwICovLAogCQkJCTFDRUNCM0I2MjFGNTBBQzcwMEY0NDU0MiAvKiBXSExT
TE1ldGFsQ29kZUdlbmVyYXRvci5oICovLAogCQkJCTFDRUNCM0I4MjFGNTBEMTAwMEY0NDU0MiAv
KiBXSExTTE5hdGl2ZUZ1bmN0aW9uV3JpdGVyLmNwcCAqLywKQEAgLTI1Njk2LDYgKzI1NzAzLDkg
QEAKIAkJCQlDMjM0QTk4QzIxRTg4ODNFMDAzQzk4NEQgLyogV0hMU0xOYW1lUmVzb2x2ZXIuaCAq
LywKIAkJCQlDMjFCRjczNzIxQ0Q4QTAyMDAyMjc5NzkgLyogV0hMU0xQYXJzZXIuY3BwICovLAog
CQkJCUMyMUJGNzM4MjFDRDhBMDMwMDIyNzk3OSAvKiBXSExTTFBhcnNlci5oICovLAorCQkJCUMy
NEE1N0FGMjFGQUQ1M0YwMDRDNkREMSAvKiBXSExTTFBpcGVsaW5lRGVzY3JpcHRvci5oICovLAor
CQkJCUMyNEE1N0JBMjFGRUFGRUEwMDRDNkREMSAvKiBXSExTTFByZXBhcmUuY3BwICovLAorCQkJ
CUMyNEE1N0JCMjFGRUFGRUEwMDRDNkREMSAvKiBXSExTTFByZXBhcmUuaCAqLywKIAkJCQlDMjFC
RjczQTIxQ0Q4RDcwMDAyMjc5NzkgLyogV0hMU0xQcm9ncmFtLmggKi8sCiAJCQkJMUNBMEMyRTAy
MUVFQjVGNTAwQTExODYwIC8qIFdITFNMUmVjdXJzaW9uQ2hlY2tlci5jcHAgKi8sCiAJCQkJMUNB
MEMyREUyMUVFQjVGNDAwQTExODYwIC8qIFdITFNMUmVjdXJzaW9uQ2hlY2tlci5oICovLApAQCAt
MjU3MDQsNiArMjU3MTQsOCBAQAogCQkJCUMyMzRBOTk5MjFFOTBGMjkwMDNDOTg0RCAvKiBXSExT
TFJlc29sdmVPdmVybG9hZEltcGwuY3BwICovLAogCQkJCUMyMzRBOTk3MjFFOTBGMjgwMDNDOTg0
RCAvKiBXSExTTFJlc29sdmVPdmVybG9hZEltcGwuaCAqLywKIAkJCQlDMjM0QTk5RDIxRTkxMEJE
MDAzQzk4NEQgLyogV0hMU0xSZXNvbHZpbmdUeXBlLmggKi8sCisJCQkJQzI0QTU3QjIyMUZCOERE
QTAwNEM2REQxIC8qIFdITFNMU2VtYW50aWNNYXRjaGVyLmNwcCAqLywKKwkJCQlDMjRBNTdCMzIx
RkI4RERBMDA0QzZERDEgLyogV0hMU0xTZW1hbnRpY01hdGNoZXIuaCAqLywKIAkJCQlDMjFCRjc0
NTIxQ0Q5Njk4MDAyMjc5NzkgLyogV0hMU0xTdGFuZGFyZExpYnJhcnkudHh0ICovLAogCQkJCTFD
RUNCM0E5MjFGMkI2NzMwMEY0NDU0MiAvKiBXSExTTFN0YXRlbWVudEJlaGF2aW9yQ2hlY2tlci5j
cHAgKi8sCiAJCQkJMUNFQ0IzQTgyMUYyQjY3MzAwRjQ0NTQyIC8qIFdITFNMU3RhdGVtZW50QmVo
YXZpb3JDaGVja2VyLmggKi8sCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>363790</attachid>
            <date>2019-03-06 14:03:56 -0800</date>
            <delta_ts>2019-03-06 15:08:58 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-193877-20190306140355.patch</filename>
            <type>text/plain</type>
            <size>130794</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQyNTExCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWRiZjVlNDRjNDJjNjE3
YjAwNTZlNTBlYWEwODg0NTNjYTkzOTYyNy4uMzM5Mzg5NGMzYmNkNGJmZDU4MTM1N2FjMGQxZjZj
ZTcyMjdjMzllNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk2IEBACisyMDE5LTAzLTA1ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dITFNMXSBQ
YWNrIGFuZCB1bnBhY2sgZGF0YSBhdCBlbnRyeSBwb2ludHMgYW5kIGV4aXQgcG9pbnRzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTM4NzcKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGltcGxlbWVu
dHMgdGhlIGJ1bGsgb2YgdGhlIHJlc3Qgb2YgdGhlIE1ldGFsIGNvZGUgZ2VuZXJhdGlvbiBwaWVj
ZS4KKyAgICAgICAgU3BlY2lmaWNhbGx5LCB0aGlzIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhl
IHBhY2tpbmcgYW5kIHVucGFja2luZyBzdGVwcworICAgICAgICBhdCB0aGUgYmVnaW5uaW5nIG9m
IHRoZSBlbnRyeSBwb2ludCBmdW5jdGlvbnMgYW5kIGFsbCByZXR1cm5zIGZyb20gdGhvc2UKKyAg
ICAgICAgZnVuY3Rpb25zLiBJdCBkb2VzIHRoaXMgYnkgY3JlYXRpbmcgYW4gb2JqZWN0LCBFbnRy
eVBvaW50U2NhZmZvbGRpbmcsIHRoYXQKKyAgICAgICAga25vd3MgaG93IHRvIGVtaXQgYWxsIHRo
ZSBoZWxwZXIgdHlwZXMsIHBhY2tpbmcgLyB1bnBhY2tpbmcgY29kZSwgYW5kIHRoZQorICAgICAg
ICBmdW5jdGlvbiBzaWduYXR1cmUuIFRoaXMgcGF0Y2ggYWxzbyBhY2NlcHRzIHBhcnRzIG9mIHRo
ZQorICAgICAgICBQaXBlbGluZVN0YXRlRGVzY3JpcHRvciBzbyB3ZSBrbm93IHRoZSBkYXRhIGxh
eW91dCB3ZSBzaG91bGQgYmUgcGFja2luZyBhbmQKKyAgICAgICAgdW5wYWNraW5nLgorCisgICAg
ICAgIFRoaXMgaXMgdGhlIGxhc3QgcGF0Y2ggYmVmb3JlIGVub3VnaCBvZiB0aGUgY29tcGlsZXIg
aXMgcHJlc2VudCB0aGF0IHdlIGNhbgorICAgICAgICBzdGFydCB0ZXN0aW5nIGl0LiBUaGUgbmV4
dCBwYXRjaCB3aWxsIHN0YXJ0IHBvcnRpbmcgdGhlIHRlc3Qgc3VpdGUuCisKKyAgICAgICAgKiBN
b2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEVudHJ5UG9pbnRTY2FmZm9sZGluZy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OmF0dHJpYnV0ZUZvclNlbWFudGljKToK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6RW50cnlQb2ludFNjYWZmb2xkaW5nOjpF
bnRyeVBvaW50U2NhZmZvbGRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpF
bnRyeVBvaW50U2NhZmZvbGRpbmc6Om1hcHBlZEJpbmRHcm91cHMgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpFbnRyeVBvaW50U2NhZmZvbGRpbmc6OnJlc291cmNlSGVs
cGVyVHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpFbnRyeVBvaW50U2Nh
ZmZvbGRpbmc6OnJlc291cmNlU2lnbmF0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpN
ZXRhbDo6RW50cnlQb2ludFNjYWZmb2xkaW5nOjpidWlsdEluc1NpZ25hdHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkVudHJ5UG9pbnRTY2FmZm9sZGluZzo6bWFuZ2xlZElu
cHV0UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkVudHJ5UG9pbnRTY2Fm
Zm9sZGluZzo6bWFuZ2xlZE91dHB1dFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1l
dGFsOjpFbnRyeVBvaW50U2NhZmZvbGRpbmc6OnVucGFja1Jlc291cmNlc0FuZE5hbWVkQnVpbHRJ
bnMpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpWZXJ0ZXhFbnRyeVBvaW50U2Nh
ZmZvbGRpbmc6OlZlcnRleEVudHJ5UG9pbnRTY2FmZm9sZGluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpXSExTTDo6TWV0YWw6OlZlcnRleEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6aGVscGVyVHlwZXMp
OgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpWZXJ0ZXhFbnRyeVBvaW50U2NhZmZv
bGRpbmc6OnNpZ25hdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OlZlcnRl
eEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6dW5wYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNM
OjpNZXRhbDo6VmVydGV4RW50cnlQb2ludFNjYWZmb2xkaW5nOjpwYWNrKToKKyAgICAgICAgKFdl
YkNvcmU6OldITFNMOjpNZXRhbDo6RnJhZ21lbnRFbnRyeVBvaW50U2NhZmZvbGRpbmc6OkZyYWdt
ZW50RW50cnlQb2ludFNjYWZmb2xkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRh
bDo6RnJhZ21lbnRFbnRyeVBvaW50U2NhZmZvbGRpbmc6OmhlbHBlclR5cGVzKToKKyAgICAgICAg
KFdlYkNvcmU6OldITFNMOjpNZXRhbDo6RnJhZ21lbnRFbnRyeVBvaW50U2NhZmZvbGRpbmc6OnNp
Z25hdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkZyYWdtZW50RW50cnlQ
b2ludFNjYWZmb2xkaW5nOjp1bnBhY2spOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFs
OjpGcmFnbWVudEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6cGFjayk6CisgICAgICAgIChXZWJDb3Jl
OjpXSExTTDo6TWV0YWw6OkNvbXB1dGVFbnRyeVBvaW50U2NhZmZvbGRpbmc6OkNvbXB1dGVFbnRy
eVBvaW50U2NhZmZvbGRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpDb21w
dXRlRW50cnlQb2ludFNjYWZmb2xkaW5nOjpoZWxwZXJUeXBlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpXSExTTDo6TWV0YWw6OkNvbXB1dGVFbnRyeVBvaW50U2NhZmZvbGRpbmc6OnNpZ25hdHVyZSk6
CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkNvbXB1dGVFbnRyeVBvaW50U2NhZmZv
bGRpbmc6OnVucGFjayk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkNvbXB1dGVF
bnRyeVBvaW50U2NhZmZvbGRpbmc6OnBhY2spOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1l
dGFsOjpFbnRyeVBvaW50U2NhZmZvbGRpbmc6OmhlbHBlclR5cGVzKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6RW50cnlQb2ludFNjYWZmb2xkaW5nOjpzaWduYXR1
cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpFbnRyeVBvaW50
U2NhZmZvbGRpbmc6OnVucGFjayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6
TWV0YWw6OkVudHJ5UG9pbnRTY2FmZm9sZGluZzo6cGFjayk6IERlbGV0ZWQuCisgICAgICAgICog
TW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xFbnRyeVBvaW50U2NhZmZvbGRpbmcuaDoK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6RW50cnlQb2ludFNjYWZmb2xkaW5nOjpw
YXJhbWV0ZXJWYXJpYWJsZXMpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFs
L1dITFNMRnVuY3Rpb25Xcml0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFs
OjpGdW5jdGlvbkRlY2xhcmF0aW9uV3JpdGVyOjp0b1N0cmluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpXSExTTDo6TWV0YWw6OkZ1bmN0aW9uRGVjbGFyYXRpb25Xcml0ZXI6OnZpc2l0KToKKyAgICAg
ICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6RnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjpGdW5j
dGlvbkRlZmluaXRpb25Xcml0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpG
dW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OmdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlz
aXQpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpGdW5jdGlvbkRlZmluaXRpb25X
cml0ZXI6OmNvbnN0YW50RXhwcmVzc2lvblN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpXSExT
TDo6TWV0YWw6OlJlbmRlckZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6UmVuZGVyRnVuY3Rpb25E
ZWZpbml0aW9uV3JpdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6UmVuZGVy
RnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp0YWtlVmVydGV4TWFwcGVkQmluZEdyb3Vwcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OlJlbmRlckZ1bmN0aW9uRGVmaW5pdGlvbldy
aXRlcjo6dGFrZUZyYWdtZW50TWFwcGVkQmluZEdyb3Vwcyk6CisgICAgICAgIChXZWJDb3JlOjpX
SExTTDo6TWV0YWw6OlJlbmRlckZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6Y3JlYXRlRW50cnlQ
b2ludFNjYWZmb2xkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6Q29tcHV0
ZUZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6Q29tcHV0ZUZ1bmN0aW9uRGVmaW5pdGlvbldyaXRl
cik6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkNvbXB1dGVGdW5jdGlvbkRlZmlu
aXRpb25Xcml0ZXI6OnRha2VNYXBwZWRCaW5kR3JvdXBzKToKKyAgICAgICAgKFdlYkNvcmU6OldI
TFNMOjpNZXRhbDo6Q29tcHV0ZUZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6Y3JlYXRlRW50cnlQ
b2ludFNjYWZmb2xkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6c2hhcmVk
TWV0YWxGdW5jdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjptZXRhbEZ1
bmN0aW9ucyk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xGdW5j
dGlvbldyaXRlci5oOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNM
TWFwcGVkQmluZGluZ3MuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvTWV0YWwvV0hMU0xNZXRhbENvZGVHZW5lcmF0b3IuaC4KKyAgICAgICAgKiBNb2R1
bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE1ldGFsQ29kZUdlbmVyYXRvci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OmdlbmVyYXRlTWV0YWxDb2RlU2hhcmVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6Z2VuZXJhdGVNZXRhbENvZGUpOgorICAgICAg
ICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMTWV0YWxDb2RlR2VuZXJhdG9yLmg6
CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbnRyaW5zaWNzLmg6CisgICAg
ICAgIChXZWJDb3JlOjpXSExTTDo6SW50cmluc2ljczo6ZmxvYXQyVHlwZSBjb25zdCk6CisgICAg
ICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQaXBlbGluZURlc2NyaXB0b3IuaDogQWRk
ZWQuCisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6cHJlcGFyZVNoYXJlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpXSExTTDo6cHJlcGFyZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xQcmVwYXJlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML01ldGFsL1dITFNMTWV0YWxDb2RlR2VuZXJhdG9yLmguCisgICAgICAgICogTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xTZW1hbnRpY01hdGNoZXIuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OldITFNMOjpmaW5kRW50cnlQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpXSExT
TDo6bWF0Y2hNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjptYXRjaFJlc291cmNlcyk6
CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6bWF0Y2hJbnB1dHNPdXRwdXRzKToKKyAgICAgICAg
KFdlYkNvcmU6OldITFNMOjppc0FjY2VwdGFibGVGb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6
V0hMU0w6Om1hdGNoVmVydGV4QXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6
bWF0Y2hDb2xvckF0dGFjaG1lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjptYXRjaERl
cHRoQXR0YWNobWVudCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6bWF0Y2hTZW1hbnRpY3Mp
OgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU2VtYW50aWNNYXRjaGVyLmg6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dI
TFNMRW50cnlQb2ludFNjYWZmb2xkaW5nLmNwcC4KKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAg
ICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMTktMDMtMDUg
IFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbQ29udGVudENoYW5n
ZU9ic2VydmVyXSBTZW5kIGNvbnRlbnQgY2hhbmdlIG5vdGlmaWNhdGlvbiB0aHJvdWdoIGFkanVz
dE9ic2VydmVkU3RhdGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML01ldGFsL1dITFNMRW50cnlQb2ludFNjYWZmb2xkaW5nLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRW50cnlQb2ludFNjYWZmb2xkaW5n
LmNwcAppbmRleCA0OGZjZjIzNWYyNTE2NDBjNWE3ODIyMTBlOWQyNjg0ZjRlZTNjMDdkLi4wMzUy
ODRjYTRmY2YzMmY4NzY4MTBiYjczNzJmYjgxNTJhM2U3YTEyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEVudHJ5UG9pbnRTY2FmZm9s
ZGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwv
V0hMU0xFbnRyeVBvaW50U2NhZmZvbGRpbmcuY3BwCkBAIC0yOCw3ICsyOCwxNyBAQAogCiAjaWYg
RU5BQkxFKFdFQkdQVSkKIAorI2luY2x1ZGUgIldITFNMQnVpbHRJblNlbWFudGljLmgiCisjaW5j
bHVkZSAiV0hMU0xGdW5jdGlvbkRlZmluaXRpb24uaCIKICNpbmNsdWRlICJXSExTTEdhdGhlckVu
dHJ5UG9pbnRJdGVtcy5oIgorI2luY2x1ZGUgIldITFNMUGlwZWxpbmVEZXNjcmlwdG9yLmgiCisj
aW5jbHVkZSAiV0hMU0xSZXNvdXJjZVNlbWFudGljLmgiCisjaW5jbHVkZSAiV0hMU0xTdGFnZUlu
T3V0U2VtYW50aWMuaCIKKyNpbmNsdWRlICJXSExTTFN0cnVjdHVyZURlZmluaXRpb24uaCIKKyNp
bmNsdWRlICJXSExTTFR5cGVOYW1lci5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxk
ZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKQEAgLTM2LDM1ICs0Niw0NzQgQEAgbmFtZXNwYWNlIFdITFNMIHsKIAogbmFtZXNwYWNl
IE1ldGFsIHsKIAotRW50cnlQb2ludFNjYWZmb2xkaW5nOjpFbnRyeVBvaW50U2NhZmZvbGRpbmco
QVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbiwgSW50cmluc2ljcyYg
aW50cmluc2ljcykKLSAgICA6IG1fZnVuY3Rpb25EZWZpbml0aW9uKCZmdW5jdGlvbkRlZmluaXRp
b24pCi0gICAgLCBtX2ludHJpbnNpY3MoJmludHJpbnNpY3MpCitzdGF0aWMgU3RyaW5nIGF0dHJp
YnV0ZUZvclNlbWFudGljKEFTVDo6QnVpbHRJblNlbWFudGljJiBidWlsdEluU2VtYW50aWMpCiB7
Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgotICAgIGdhdGhlckVudHJ5UG9pbnRJdGVt
cygqbV9pbnRyaW5zaWNzLCAqbV9mdW5jdGlvbkRlZmluaXRpb24pOworICAgIHN3aXRjaCAoYnVp
bHRJblNlbWFudGljLnZhcmlhYmxlKCkpIHsKKyAgICBjYXNlIEFTVDo6QnVpbHRJblNlbWFudGlj
OjpWYXJpYWJsZTo6U1ZJbnN0YW5jZUlEOgorICAgICAgICByZXR1cm4gIltbaW5zdGFuY2VfaWRd
XSJfc3RyOworICAgIGNhc2UgQVNUOjpCdWlsdEluU2VtYW50aWM6OlZhcmlhYmxlOjpTVlZlcnRl
eElEOgorICAgICAgICByZXR1cm4gIltbdmVydGV4X2lkXV0iX3N0cjsKKyAgICBjYXNlIEFTVDo6
QnVpbHRJblNlbWFudGljOjpWYXJpYWJsZTo6UFNpemU6CisgICAgICAgIHJldHVybiAiW1twb2lu
dF9zaXplXV0iX3N0cjsKKyAgICBjYXNlIEFTVDo6QnVpbHRJblNlbWFudGljOjpWYXJpYWJsZTo6
U1ZQb3NpdGlvbjoKKyAgICAgICAgcmV0dXJuICJbW3Bvc2l0aW9uXV0iX3N0cjsKKyAgICBjYXNl
IEFTVDo6QnVpbHRJblNlbWFudGljOjpWYXJpYWJsZTo6U1ZJc0Zyb250RmFjZToKKyAgICAgICAg
cmV0dXJuICJbW2Zyb250X2ZhY2luZ11dIl9zdHI7CisgICAgY2FzZSBBU1Q6OkJ1aWx0SW5TZW1h
bnRpYzo6VmFyaWFibGU6OlNWU2FtcGxlSW5kZXg6CisgICAgICAgIHJldHVybiAiW1tzYW1wbGVf
aWRdXSJfc3RyOworICAgIGNhc2UgQVNUOjpCdWlsdEluU2VtYW50aWM6OlZhcmlhYmxlOjpTVklu
bmVyQ292ZXJhZ2U6CisgICAgICAgIHJldHVybiAiW1tzYW1wbGVfbWFza11dIl9zdHI7CisgICAg
Y2FzZSBBU1Q6OkJ1aWx0SW5TZW1hbnRpYzo6VmFyaWFibGU6OlNWVGFyZ2V0OgorICAgICAgICBy
ZXR1cm4gbWFrZVN0cmluZygiW1tjb2xvcigiLCAqYnVpbHRJblNlbWFudGljLnRhcmdldEluZGV4
KCksICIpXV0iKTsKKyAgICBjYXNlIEFTVDo6QnVpbHRJblNlbWFudGljOjpWYXJpYWJsZTo6U1ZE
ZXB0aDoKKyAgICAgICAgcmV0dXJuICJbW2RlcHRoKGFueSldXSJfc3RyOworICAgIGNhc2UgQVNU
OjpCdWlsdEluU2VtYW50aWM6OlZhcmlhYmxlOjpTVkNvdmVyYWdlOgorICAgICAgICByZXR1cm4g
Iltbc2FtcGxlX21hc2tdXSJfc3RyOworICAgIGNhc2UgQVNUOjpCdWlsdEluU2VtYW50aWM6OlZh
cmlhYmxlOjpTVkRpc3BhdGNoVGhyZWFkSUQ6CisgICAgICAgIHJldHVybiAiW1t0aHJlYWRfcG9z
aXRpb25faW5fZ3JpZF1dIl9zdHI7CisgICAgY2FzZSBBU1Q6OkJ1aWx0SW5TZW1hbnRpYzo6VmFy
aWFibGU6OlNWR3JvdXBJRDoKKyAgICAgICAgcmV0dXJuICJbW3RocmVhZGdyb3VwX3Bvc2l0aW9u
X2luX2dyaWRdXSJfc3RyOworICAgIGNhc2UgQVNUOjpCdWlsdEluU2VtYW50aWM6OlZhcmlhYmxl
OjpTVkdyb3VwSW5kZXg6CisgICAgICAgIHJldHVybiAiW1t0aHJlYWRfaW5kZXhfaW5fdGhyZWFk
Z3JvdXBdXSJfc3RyOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVChidWlsdEluU2VtYW50
aWMudmFyaWFibGUoKSA9PSBBU1Q6OkJ1aWx0SW5TZW1hbnRpYzo6VmFyaWFibGU6OlNWR3JvdXBU
aHJlYWRJRCk7CisgICAgICAgIHJldHVybiAiW1t0aHJlYWRfcG9zaXRpb25faW5fdGhyZWFkZ3Jv
dXBdXSJfc3RyOworICAgIH0KIH0KIAotU3RyaW5nIEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6aGVs
cGVyVHlwZXMoKQorc3RhdGljIFN0cmluZyBhdHRyaWJ1dGVGb3JTZW1hbnRpYyhBU1Q6OlNlbWFu
dGljJiBzZW1hbnRpYykKIHsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCi0gICAgcmV0
dXJuIFN0cmluZygpOworICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPEFTVDo6QnVpbHRJ
blNlbWFudGljPihzZW1hbnRpYykpCisgICAgICAgIHJldHVybiBhdHRyaWJ1dGVGb3JTZW1hbnRp
YyhXVEY6OmdldDxBU1Q6OkJ1aWx0SW5TZW1hbnRpYz4oc2VtYW50aWMpKTsKKyAgICBhdXRvJiBz
dGFnZUluT3V0U2VtYW50aWMgPSBXVEY6OmdldDxBU1Q6OlN0YWdlSW5PdXRTZW1hbnRpYz4oc2Vt
YW50aWMpOworICAgIHJldHVybiBtYWtlU3RyaW5nKCJbW3VzZXIoIiwgc3RhZ2VJbk91dFNlbWFu
dGljLmluZGV4KCksICIpXV0iKTsKIH0KIAotU3RyaW5nIEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6
c2lnbmF0dXJlKCkKK0VudHJ5UG9pbnRTY2FmZm9sZGluZzo6RW50cnlQb2ludFNjYWZmb2xkaW5n
KEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXRpb24sIEludHJpbnNpY3Mm
IGludHJpbnNpY3MsIFR5cGVOYW1lciYgdHlwZU5hbWVyLCBFbnRyeVBvaW50SXRlbXMmIGVudHJ5
UG9pbnRJdGVtcywgSGFzaE1hcDxCaW5kaW5nKiwgc2l6ZV90PiYgcmVzb3VyY2VNYXAsIExheW91
dCYgbGF5b3V0LCBzdGQ6OmZ1bmN0aW9uPFN0cmluZygpPiYmIGdlbmVyYXRlTmV4dFZhcmlhYmxl
TmFtZSkKKyAgICA6IG1fZnVuY3Rpb25EZWZpbml0aW9uKGZ1bmN0aW9uRGVmaW5pdGlvbikKKyAg
ICAsIG1faW50cmluc2ljcyhpbnRyaW5zaWNzKQorICAgICwgbV90eXBlTmFtZXIodHlwZU5hbWVy
KQorICAgICwgbV9lbnRyeVBvaW50SXRlbXMoZW50cnlQb2ludEl0ZW1zKQorICAgICwgbV9yZXNv
dXJjZU1hcChyZXNvdXJjZU1hcCkKKyAgICAsIG1fbGF5b3V0KGxheW91dCkKKyAgICAsIG1fZ2Vu
ZXJhdGVOZXh0VmFyaWFibGVOYW1lKGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSkKIHsKLSAgICAv
LyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCi0gICAgcmV0dXJuIFN0cmluZygpOworICAgIHVuc2ln
bmVkIGFyZ3VtZW50QnVmZmVySW5kZXggPSAwOworICAgIG1fbmFtZWRCaW5kR3JvdXBzLnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkobV9sYXlvdXQuc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fbGF5b3V0LnNpemUoKTsgKytpKSB7CisgICAgICAgIE5hbWVkQmluZEdyb3VwIG5h
bWVkQmluZEdyb3VwOworICAgICAgICBuYW1lZEJpbmRHcm91cC5zdHJ1Y3ROYW1lID0gbV90eXBl
TmFtZXIuZ2VuZXJhdGVOZXh0VHlwZU5hbWUoKTsKKyAgICAgICAgbmFtZWRCaW5kR3JvdXAudmFy
aWFibGVOYW1lID0gbV9nZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKKyAgICAgICAgbmFtZWRC
aW5kR3JvdXAuYXJndW1lbnRCdWZmZXJJbmRleCA9IGFyZ3VtZW50QnVmZmVySW5kZXgrKzsKKyAg
ICAgICAgbmFtZWRCaW5kR3JvdXAubmFtZWRCaW5kaW5ncy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5
KG1fbGF5b3V0W2ldLmJpbmRpbmdzLnNpemUoKSk7CisgICAgICAgIHVuc2lnbmVkIGluZGV4ID0g
MDsKKyAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBtX2xheW91dFtpXS5iaW5kaW5ncy5z
aXplKCk7ICsraikgeworICAgICAgICAgICAgTmFtZWRCaW5kaW5nIG5hbWVkQmluZGluZzsKKyAg
ICAgICAgICAgIG5hbWVkQmluZGluZy5lbGVtZW50TmFtZSA9IG1fdHlwZU5hbWVyLmdlbmVyYXRl
TmV4dFN0cnVjdHVyZUVsZW1lbnROYW1lKCk7CisgICAgICAgICAgICBuYW1lZEJpbmRpbmcuaW5k
ZXggPSBpbmRleCsrOworICAgICAgICAgICAgbmFtZWRCaW5kR3JvdXAubmFtZWRCaW5kaW5ncy51
bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShuYW1lZEJpbmRpbmcpKTsKKyAgICAgICAgfQorICAgICAg
ICBtX25hbWVkQmluZEdyb3Vwcy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShuYW1lZEJpbmRHcm91
cCkpOworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9lbnRyeVBvaW50SXRl
bXMuaW5wdXRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmICghV1RGOjpob2xkc19hbHRlcm5h
dGl2ZTxBU1Q6OkJ1aWx0SW5TZW1hbnRpYz4oKm1fZW50cnlQb2ludEl0ZW1zLmlucHV0c1tpXS5z
ZW1hbnRpYykpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgTmFtZWRCdWlsdEluIG5h
bWVkQnVpbHRJbjsKKyAgICAgICAgbmFtZWRCdWlsdEluLmluZGV4SW5FbnRyeVBvaW50SXRlbXMg
PSBpOworICAgICAgICBuYW1lZEJ1aWx0SW4udmFyaWFibGVOYW1lID0gbV9nZW5lcmF0ZU5leHRW
YXJpYWJsZU5hbWUoKTsKKyAgICAgICAgbV9uYW1lZEJ1aWx0SW5zLmFwcGVuZChXVEZNb3ZlKG5h
bWVkQnVpbHRJbikpOworICAgIH0KKworICAgIG1fcGFyYW1ldGVyVmFyaWFibGVzLnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkobV9mdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpLnNpemUoKSk7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2Z1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0
ZXJzKCkuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fcGFyYW1ldGVyVmFyaWFibGVzLnVuY2hlY2tl
ZEFwcGVuZChtX2dlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpKTsKIH0KIAotU3RyaW5nIEVudHJ5
UG9pbnRTY2FmZm9sZGluZzo6dW5wYWNrKCkKK01hcHBlZEJpbmRHcm91cHMgRW50cnlQb2ludFNj
YWZmb2xkaW5nOjptYXBwZWRCaW5kR3JvdXBzKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogSW1w
bGVtZW50IHRoaXMuCi0gICAgcmV0dXJuIFN0cmluZygpOworICAgIE1hcHBlZEJpbmRHcm91cHMg
cmVzdWx0OworICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fbGF5b3V0LnNpemUo
KSk7CisgICAgZm9yIChhdXRvJiBuYW1lZEJpbmRHcm91cCA6IG1fbmFtZWRCaW5kR3JvdXBzKSB7
CisgICAgICAgIE1hcHBlZEJpbmRHcm91cCBtYXBwZWRCaW5kR3JvdXA7CisgICAgICAgIG1hcHBl
ZEJpbmRHcm91cC5hcmd1bWVudEJ1ZmZlckluZGV4ID0gbmFtZWRCaW5kR3JvdXAuYXJndW1lbnRC
dWZmZXJJbmRleDsKKyAgICAgICAgbWFwcGVkQmluZEdyb3VwLmJpbmRpbmdJbmRpY2VzLnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkobmFtZWRCaW5kR3JvdXAubmFtZWRCaW5kaW5ncy5zaXplKCkpOwor
ICAgICAgICBmb3IgKGF1dG8mIG5hbWVkQmluZGluZyA6IG5hbWVkQmluZEdyb3VwLm5hbWVkQmlu
ZGluZ3MpCisgICAgICAgICAgICBtYXBwZWRCaW5kR3JvdXAuYmluZGluZ0luZGljZXMudW5jaGVj
a2VkQXBwZW5kKG5hbWVkQmluZGluZy5pbmRleCk7CisgICAgICAgIHJlc3VsdC51bmNoZWNrZWRB
cHBlbmQoV1RGTW92ZShtYXBwZWRCaW5kR3JvdXApKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworU3RyaW5nIEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6cmVzb3VyY2VIZWxwZXJUeXBl
cygpCit7CisgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV9sYXlvdXQuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQobWFrZVN0cmluZygic3RydWN0ICIsIG1fbmFtZWRCaW5kR3JvdXBzW2ldLnN0cnVj
dE5hbWUsICIge1xuIikpOworICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IG1fbGF5b3V0
W2ldLmJpbmRpbmdzLnNpemUoKTsgKytqKSB7CisgICAgICAgICAgICBhdXRvIGl0ZXJhdG9yID0g
bV9yZXNvdXJjZU1hcC5maW5kKCZtX2xheW91dFtpXS5iaW5kaW5nc1tqXSk7CisgICAgICAgICAg
ICBpZiAoaXRlcmF0b3IgPT0gbV9yZXNvdXJjZU1hcC5lbmQoKSkKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIGF1dG8gbWFuZ2xlZFR5cGVOYW1lID0gbV90eXBlTmFtZXIu
bWFuZ2xlZE5hbWVGb3JUeXBlKCptX2VudHJ5UG9pbnRJdGVtcy5pbnB1dHNbaXRlcmF0b3ItPnZh
bHVlXS51bm5hbWVkVHlwZSk7CisgICAgICAgICAgICBhdXRvIGVsZW1lbnROYW1lID0gbV9uYW1l
ZEJpbmRHcm91cHNbaV0ubmFtZWRCaW5kaW5nc1tqXS5lbGVtZW50TmFtZTsKKyAgICAgICAgICAg
IGF1dG8gaW5kZXggPSBtX25hbWVkQmluZEdyb3Vwc1tpXS5uYW1lZEJpbmRpbmdzW2pdLmluZGV4
OworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAgICIsIG1h
bmdsZWRUeXBlTmFtZSwgJyAnLCBlbGVtZW50TmFtZSwgIiBbW2lkKCIsIGluZGV4LCAiKV1dO1xu
IikpOworICAgICAgICB9CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9XG5cbiIpOwor
ICAgIH0KKyAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworfQorCitPcHRpb25h
bDxTdHJpbmc+IEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6cmVzb3VyY2VTaWduYXR1cmUoKQorewor
ICAgIGlmICghbV9sYXlvdXQuc2l6ZSgpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
CisgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV9sYXlvdXQuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKGkpCisgICAgICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiLCAiKTsKKyAgICAgICAgYXV0byYgbmFtZWRCaW5kR3Jv
dXAgPSBtX25hbWVkQmluZEdyb3Vwc1tpXTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
bWFrZVN0cmluZyhuYW1lZEJpbmRHcm91cC5zdHJ1Y3ROYW1lLCAiJiAiLCBuYW1lZEJpbmRHcm91
cC52YXJpYWJsZU5hbWUsICIgW1tidWZmZXIoIiwgbmFtZWRCaW5kR3JvdXAuYXJndW1lbnRCdWZm
ZXJJbmRleCwgIildXSIpKTsKKyAgICB9CisgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJp
bmcoKTsKK30KKworT3B0aW9uYWw8U3RyaW5nPiBFbnRyeVBvaW50U2NhZmZvbGRpbmc6OmJ1aWx0
SW5zU2lnbmF0dXJlKCkKK3sKKyAgICBpZiAoIW1fbmFtZWRCdWlsdElucy5zaXplKCkpCisgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxk
ZXI7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX25hbWVkQnVpbHRJbnMuc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgaWYgKGkpCisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgi
LCAiKTsKKyAgICAgICAgYXV0byYgbmFtZWRCdWlsdEluID0gbV9uYW1lZEJ1aWx0SW5zW2ldOwor
ICAgICAgICBhdXRvJiBpdGVtID0gbV9lbnRyeVBvaW50SXRlbXMuaW5wdXRzW25hbWVkQnVpbHRJ
bi5pbmRleEluRW50cnlQb2ludEl0ZW1zXTsKKyAgICAgICAgYXV0byYgYnVpbHRJblNlbWFudGlj
ID0gV1RGOjpnZXQ8QVNUOjpCdWlsdEluU2VtYW50aWM+KCppdGVtLnNlbWFudGljKTsKKyAgICAg
ICAgYXV0byBtYW5nbGVkVHlwZU5hbWUgPSBtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUo
Kml0ZW0udW5uYW1lZFR5cGUpOworICAgICAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IG5hbWVkQnVp
bHRJbi52YXJpYWJsZU5hbWU7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJp
bmcobWFuZ2xlZFR5cGVOYW1lLCAnICcsIHZhcmlhYmxlTmFtZSwgJyAnLCBhdHRyaWJ1dGVGb3JT
ZW1hbnRpYyhidWlsdEluU2VtYW50aWMpKSk7CisgICAgfQorICAgIHJldHVybiBzdHJpbmdCdWls
ZGVyLnRvU3RyaW5nKCk7Cit9CisKK1N0cmluZyBFbnRyeVBvaW50U2NhZmZvbGRpbmc6Om1hbmds
ZWRJbnB1dFBhdGgoVmVjdG9yPFN0cmluZz4mIHBhdGgpCit7CisgICAgQVNTRVJUKCFwYXRoLmlz
RW1wdHkoKSk7CisgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOworICAgIGJvb2wgZm91
bmQgPSBmYWxzZTsKKyAgICBBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24qIHN0cnVjdHVyZURlZmlu
aXRpb24gPSBudWxscHRyOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9mdW5jdGlvbkRl
ZmluaXRpb24ucGFyYW1ldGVycygpLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChtX2Z1bmN0
aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbaV0ubmFtZSgpID09IHBhdGhbMF0pIHsKKyAgICAg
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1fcGFyYW1ldGVyVmFyaWFibGVzW2ldKTsKKyAg
ICAgICAgICAgIGF1dG8mIHVuaWZ5Tm9kZSA9IG1fZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRl
cnMoKVtpXS50eXBlKCktPnVuaWZ5Tm9kZSgpOworICAgICAgICAgICAgaWYgKGlzPEFTVDo6TmFt
ZWRUeXBlPih1bmlmeU5vZGUpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgbmFtZWRUeXBlID0g
ZG93bmNhc3Q8QVNUOjpOYW1lZFR5cGU+KHVuaWZ5Tm9kZSk7CisgICAgICAgICAgICAgICAgaWYg
KGlzPEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbj4obmFtZWRUeXBlKSkKKyAgICAgICAgICAgICAg
ICAgICAgc3RydWN0dXJlRGVmaW5pdGlvbiA9ICZkb3duY2FzdDxBU1Q6OlN0cnVjdHVyZURlZmlu
aXRpb24+KG5hbWVkVHlwZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3VuZCA9IHRy
dWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBBU1NFUlQoZm91
bmQpOworICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgcGF0aC5zaXplKCk7ICsraSkgeworICAg
ICAgICBBU1NFUlQoc3RydWN0dXJlRGVmaW5pdGlvbik7CisgICAgICAgIGF1dG8qIG5leHQgPSBz
dHJ1Y3R1cmVEZWZpbml0aW9uLT5maW5kKHBhdGhbaV0pOworICAgICAgICBBU1NFUlQobmV4dCk7
CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoJy4nLCBtX3R5cGVOYW1l
ci5tYW5nbGVkTmFtZUZvclN0cnVjdHVyZUVsZW1lbnQoKm5leHQpKSk7CisgICAgICAgIHN0cnVj
dHVyZURlZmluaXRpb24gPSBudWxscHRyOworICAgICAgICBhdXRvJiB1bmlmeU5vZGUgPSBuZXh0
LT50eXBlKCkudW5pZnlOb2RlKCk7CisgICAgICAgIGlmIChpczxBU1Q6Ok5hbWVkVHlwZT4odW5p
ZnlOb2RlKSkgeworICAgICAgICAgICAgYXV0byYgbmFtZWRUeXBlID0gZG93bmNhc3Q8QVNUOjpO
YW1lZFR5cGU+KHVuaWZ5Tm9kZSk7CisgICAgICAgICAgICBpZiAoaXM8QVNUOjpTdHJ1Y3R1cmVE
ZWZpbml0aW9uPihuYW1lZFR5cGUpKQorICAgICAgICAgICAgICAgIHN0cnVjdHVyZURlZmluaXRp
b24gPSAmZG93bmNhc3Q8QVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uPihuYW1lZFR5cGUpOworICAg
ICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKK30K
KworU3RyaW5nIEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6bWFuZ2xlZE91dHB1dFBhdGgoVmVjdG9y
PFN0cmluZz4mIHBhdGgpCit7CisgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOworCisg
ICAgQVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uKiBzdHJ1Y3R1cmVEZWZpbml0aW9uID0gbnVsbHB0
cjsKKyAgICBhdXRvJiB1bmlmeU5vZGUgPSBtX2Z1bmN0aW9uRGVmaW5pdGlvbi50eXBlKCkudW5p
ZnlOb2RlKCk7CisgICAgQVNTRVJUKGlzPEFTVDo6TmFtZWRUeXBlPih1bmlmeU5vZGUpKTsKKyAg
ICBhdXRvJiBuYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4odW5pZnlOb2RlKTsK
KyAgICBBU1NFUlQoaXM8QVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uPihuYW1lZFR5cGUpKTsKKyAg
ICBzdHJ1Y3R1cmVEZWZpbml0aW9uID0gJmRvd25jYXN0PEFTVDo6U3RydWN0dXJlRGVmaW5pdGlv
bj4obmFtZWRUeXBlKTsKKyAgICBmb3IgKGF1dG8mIGNvbXBvbmVudCA6IHBhdGgpIHsKKyAgICAg
ICAgQVNTRVJUKHN0cnVjdHVyZURlZmluaXRpb24pOworICAgICAgICBhdXRvKiBuZXh0ID0gc3Ry
dWN0dXJlRGVmaW5pdGlvbi0+ZmluZChjb21wb25lbnQpOworICAgICAgICBBU1NFUlQobmV4dCk7
CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoJy4nLCBtX3R5cGVOYW1l
ci5tYW5nbGVkTmFtZUZvclN0cnVjdHVyZUVsZW1lbnQoKm5leHQpKSk7CisgICAgICAgIHN0cnVj
dHVyZURlZmluaXRpb24gPSBudWxscHRyOworICAgICAgICBhdXRvJiB1bmlmeU5vZGUgPSBuZXh0
LT50eXBlKCkudW5pZnlOb2RlKCk7CisgICAgICAgIGlmIChpczxBU1Q6Ok5hbWVkVHlwZT4odW5p
ZnlOb2RlKSkgeworICAgICAgICAgICAgYXV0byYgbmFtZWRUeXBlID0gZG93bmNhc3Q8QVNUOjpO
YW1lZFR5cGU+KHVuaWZ5Tm9kZSk7CisgICAgICAgICAgICBpZiAoaXM8QVNUOjpTdHJ1Y3R1cmVE
ZWZpbml0aW9uPihuYW1lZFR5cGUpKQorICAgICAgICAgICAgICAgIHN0cnVjdHVyZURlZmluaXRp
b24gPSAmZG93bmNhc3Q8QVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uPihuYW1lZFR5cGUpOworICAg
ICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKK30K
KworU3RyaW5nIEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6dW5wYWNrUmVzb3VyY2VzQW5kTmFtZWRC
dWlsdElucygpCit7CisgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbV9mdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpLnNpemUo
KTsgKytpKQorICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1fdHlwZU5h
bWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbV9mdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygp
W2ldLnR5cGUoKSksICcgJywgbV9wYXJhbWV0ZXJWYXJpYWJsZXNbaV0sICI7XG4iKSk7CisKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fbGF5b3V0LnNpemUoKTsgKytpKSB7CisgICAgICAg
IGF1dG8gdmFyaWFibGVOYW1lID0gbV9uYW1lZEJpbmRHcm91cHNbaV0udmFyaWFibGVOYW1lOwor
ICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IG1fbGF5b3V0W2ldLmJpbmRpbmdzLnNpemUo
KTsgKytqKSB7CisgICAgICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbV9yZXNvdXJjZU1hcC5maW5k
KCZtX2xheW91dFtpXS5iaW5kaW5nc1tqXSk7CisgICAgICAgICAgICBpZiAoaXRlcmF0b3IgPT0g
bV9yZXNvdXJjZU1hcC5lbmQoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgIGF1dG8mIHBhdGggPSBtX2VudHJ5UG9pbnRJdGVtcy5pbnB1dHNbaXRlcmF0b3ItPnZhbHVl
XS5wYXRoOworICAgICAgICAgICAgYXV0byBlbGVtZW50TmFtZSA9IG1fbmFtZWRCaW5kR3JvdXBz
W2ldLm5hbWVkQmluZGluZ3Nbal0uZWxlbWVudE5hbWU7CisgICAgICAgICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1hbmdsZWRJbnB1dFBhdGgocGF0aCksICIgPSAiLCB2YXJp
YWJsZU5hbWUsICcuJywgZWxlbWVudE5hbWUsICI7XG4iKSk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBmb3IgKGF1dG8mIG5hbWVkQnVpbHRJbiA6IG1fbmFtZWRCdWlsdElucykgeworICAgICAg
ICBhdXRvJiBwYXRoID0gbV9lbnRyeVBvaW50SXRlbXMuaW5wdXRzW25hbWVkQnVpbHRJbi5pbmRl
eEluRW50cnlQb2ludEl0ZW1zXS5wYXRoOworICAgICAgICBhdXRvJiB2YXJpYWJsZU5hbWUgPSBu
YW1lZEJ1aWx0SW4udmFyaWFibGVOYW1lOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCht
YWtlU3RyaW5nKG1hbmdsZWRJbnB1dFBhdGgocGF0aCksICIgPSAiLCB2YXJpYWJsZU5hbWUsICI7
XG4iKSk7CisgICAgfQorICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7Cit9CisK
K1ZlcnRleEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6VmVydGV4RW50cnlQb2ludFNjYWZmb2xkaW5n
KEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXRpb24sIEludHJpbnNpY3Mm
IGludHJpbnNpY3MsIFR5cGVOYW1lciYgdHlwZU5hbWVyLCBFbnRyeVBvaW50SXRlbXMmIGVudHJ5
UG9pbnRJdGVtcywgSGFzaE1hcDxCaW5kaW5nKiwgc2l6ZV90PiYgcmVzb3VyY2VNYXAsIExheW91
dCYgbGF5b3V0LCBzdGQ6OmZ1bmN0aW9uPFN0cmluZygpPiYmIGdlbmVyYXRlTmV4dFZhcmlhYmxl
TmFtZSwgSGFzaE1hcDxWZXJ0ZXhBdHRyaWJ1dGUqLCBzaXplX3Q+JiBtYXRjaGVkVmVydGV4QXR0
cmlidXRlcykKKyAgICA6IEVudHJ5UG9pbnRTY2FmZm9sZGluZyhmdW5jdGlvbkRlZmluaXRpb24s
IGludHJpbnNpY3MsIHR5cGVOYW1lciwgZW50cnlQb2ludEl0ZW1zLCByZXNvdXJjZU1hcCwgbGF5
b3V0LCBXVEZNb3ZlKGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSkpCisgICAgLCBtX21hdGNoZWRW
ZXJ0ZXhBdHRyaWJ1dGVzKG1hdGNoZWRWZXJ0ZXhBdHRyaWJ1dGVzKQorICAgICwgbV9zdGFnZUlu
U3RydWN0TmFtZSh0eXBlTmFtZXIuZ2VuZXJhdGVOZXh0VHlwZU5hbWUoKSkKKyAgICAsIG1fcmV0
dXJuU3RydWN0TmFtZSh0eXBlTmFtZXIuZ2VuZXJhdGVOZXh0VHlwZU5hbWUoKSkKKyAgICAsIG1f
c3RhZ2VJblBhcmFtZXRlck5hbWUobV9nZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKSkKK3sKKyAg
ICBtX25hbWVkU3RhZ2VJbnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX21hdGNoZWRWZXJ0ZXhB
dHRyaWJ1dGVzLnNpemUoKSk7CisgICAgZm9yIChhdXRvJiBrZXlWYWx1ZVBhaXIgOiBtX21hdGNo
ZWRWZXJ0ZXhBdHRyaWJ1dGVzKSB7CisgICAgICAgIE5hbWVkU3RhZ2VJbiBuYW1lZFN0YWdlSW47
CisgICAgICAgIG5hbWVkU3RhZ2VJbi5pbmRleEluRW50cnlQb2ludEl0ZW1zID0ga2V5VmFsdWVQ
YWlyLnZhbHVlOworICAgICAgICBuYW1lZFN0YWdlSW4uZWxlbWVudE5hbWUgPSBtX3R5cGVOYW1l
ci5nZW5lcmF0ZU5leHRTdHJ1Y3R1cmVFbGVtZW50TmFtZSgpOworICAgICAgICBuYW1lZFN0YWdl
SW4uYXR0cmlidXRlSW5kZXggPSBrZXlWYWx1ZVBhaXIua2V5LT5uYW1lOworICAgICAgICBtX25h
bWVkU3RhZ2VJbnMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUobmFtZWRTdGFnZUluKSk7CisgICAg
fQorCisgICAgbV9uYW1lZE91dHB1dHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX2VudHJ5UG9p
bnRJdGVtcy5vdXRwdXRzLnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2Vu
dHJ5UG9pbnRJdGVtcy5vdXRwdXRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIE5hbWVkT3V0cHV0
IG5hbWVkT3V0cHV0OworICAgICAgICBuYW1lZE91dHB1dC5lbGVtZW50TmFtZSA9IG1fdHlwZU5h
bWVyLmdlbmVyYXRlTmV4dFN0cnVjdHVyZUVsZW1lbnROYW1lKCk7CisgICAgICAgIG1fbmFtZWRP
dXRwdXRzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKG5hbWVkT3V0cHV0KSk7CisgICAgfQorfQor
CitTdHJpbmcgVmVydGV4RW50cnlQb2ludFNjYWZmb2xkaW5nOjpoZWxwZXJUeXBlcygpCit7Cisg
ICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOworCisgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQobWFrZVN0cmluZygic3RydWN0ICIsIG1fc3RhZ2VJblN0cnVjdE5hbWUsICIge1xuIikpOwor
ICAgIGZvciAoYXV0byYgbmFtZWRTdGFnZUluIDogbV9uYW1lZFN0YWdlSW5zKSB7CisgICAgICAg
IGF1dG8gbWFuZ2xlZFR5cGVOYW1lID0gbV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpt
X2VudHJ5UG9pbnRJdGVtcy5pbnB1dHNbbmFtZWRTdGFnZUluLmluZGV4SW5FbnRyeVBvaW50SXRl
bXNdLnVubmFtZWRUeXBlKTsKKyAgICAgICAgYXV0byBlbGVtZW50TmFtZSA9IG5hbWVkU3RhZ2VJ
bi5lbGVtZW50TmFtZTsKKyAgICAgICAgYXV0byBhdHRyaWJ1dGVJbmRleCA9IG5hbWVkU3RhZ2VJ
bi5lbGVtZW50TmFtZTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygi
ICAgICIsIG1hbmdsZWRUeXBlTmFtZSwgJyAnLCBlbGVtZW50TmFtZSwgIiBbW2F0dHJpYnV0ZSgi
LCBhdHRyaWJ1dGVJbmRleCwgIildXTtcbiIpKTsKKyAgICB9CisgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQoIn1cblxuIik7CisKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJz
dHJ1Y3QgIiwgbV9yZXR1cm5TdHJ1Y3ROYW1lLCAiIHtcbiIpKTsKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1fZW50cnlQb2ludEl0ZW1zLm91dHB1dHMuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgYXV0byYgb3V0cHV0SXRlbSA9IG1fZW50cnlQb2ludEl0ZW1zLm91dHB1dHNbaV07CisgICAg
ICAgIGF1dG8gbWFuZ2xlZFR5cGVOYW1lID0gbV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBl
KCpvdXRwdXRJdGVtLnVubmFtZWRUeXBlKTsKKyAgICAgICAgYXV0byBlbGVtZW50TmFtZSA9IG1f
bmFtZWRPdXRwdXRzW2ldLmVsZW1lbnROYW1lOworICAgICAgICBhdXRvIGF0dHJpYnV0ZSA9IGF0
dHJpYnV0ZUZvclNlbWFudGljKCpvdXRwdXRJdGVtLnNlbWFudGljKTsKKyAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAgICIsIG1hbmdsZWRUeXBlTmFtZSwgJyAnLCBl
bGVtZW50TmFtZSwgJyAnLCBhdHRyaWJ1dGUsICI7XG4iKSk7CisgICAgfQorICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKCJ9XG5cbiIpOworCisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQocmVzb3Vy
Y2VIZWxwZXJUeXBlcygpKTsKKworICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7
Cit9CisKK1N0cmluZyBWZXJ0ZXhFbnRyeVBvaW50U2NhZmZvbGRpbmc6OnNpZ25hdHVyZShTdHJp
bmcmIGZ1bmN0aW9uTmFtZSkKK3sKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CisK
KyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJ2ZXJ0ZXggIiwgbV9yZXR1cm5T
dHJ1Y3ROYW1lLCAnICcsIGZ1bmN0aW9uTmFtZSwgJygnLCBtX3N0YWdlSW5TdHJ1Y3ROYW1lLCAn
ICcsIG1fc3RhZ2VJblBhcmFtZXRlck5hbWUsICIgW1tzdGFnZV9pbl1dIikpOworICAgIGlmIChh
dXRvIHJlc291cmNlU2lnbmF0dXJlID0gdGhpcy0+cmVzb3VyY2VTaWduYXR1cmUoKSkKKyAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiLCAiLCAqcmVzb3VyY2VTaWduYXR1
cmUpKTsKKyAgICBpZiAoYXV0byBidWlsdEluc1NpZ25hdHVyZSA9IHRoaXMtPmJ1aWx0SW5zU2ln
bmF0dXJlKCkpCisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiwgIiwg
KmJ1aWx0SW5zU2lnbmF0dXJlKSk7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIikiKTsKKwor
ICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7Cit9CisKK1N0cmluZyBWZXJ0ZXhF
bnRyeVBvaW50U2NhZmZvbGRpbmc6OnVucGFjaygpCit7CisgICAgU3RyaW5nQnVpbGRlciBzdHJp
bmdCdWlsZGVyOworCisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodW5wYWNrUmVzb3VyY2VzQW5k
TmFtZWRCdWlsdElucygpKTsKKworICAgIGZvciAoYXV0byYgbmFtZWRTdGFnZUluIDogbV9uYW1l
ZFN0YWdlSW5zKSB7CisgICAgICAgIGF1dG8mIHBhdGggPSBtX2VudHJ5UG9pbnRJdGVtcy5pbnB1
dHNbbmFtZWRTdGFnZUluLmluZGV4SW5FbnRyeVBvaW50SXRlbXNdLnBhdGg7CisgICAgICAgIGF1
dG8mIGVsZW1lbnROYW1lID0gbmFtZWRTdGFnZUluLmVsZW1lbnROYW1lOworICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1hbmdsZWRJbnB1dFBhdGgocGF0aCksICIgPSAi
LCBtX3N0YWdlSW5TdHJ1Y3ROYW1lLCAnLicsIGVsZW1lbnROYW1lLCAiO1xuIikpOworICAgIH0K
KworICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7Cit9CisKK1N0cmluZyBWZXJ0
ZXhFbnRyeVBvaW50U2NhZmZvbGRpbmc6OnBhY2soY29uc3QgU3RyaW5nJiBpbnB1dFZhcmlhYmxl
TmFtZSwgY29uc3QgU3RyaW5nJiBvdXRwdXRWYXJpYWJsZU5hbWUpCit7CisgICAgU3RyaW5nQnVp
bGRlciBzdHJpbmdCdWlsZGVyOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmco
bV9yZXR1cm5TdHJ1Y3ROYW1lLCAnICcsIG91dHB1dFZhcmlhYmxlTmFtZSkpOworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbV9lbnRyeVBvaW50SXRlbXMub3V0cHV0cy5zaXplKCk7ICsraSkg
eworICAgICAgICBhdXRvJiBlbGVtZW50TmFtZSA9IG1fbmFtZWRPdXRwdXRzW2ldLmVsZW1lbnRO
YW1lOworICAgICAgICBhdXRvJiBwYXRoID0gbV9lbnRyeVBvaW50SXRlbXMub3V0cHV0c1tpXS5w
YXRoOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG91dHB1dFZhcmlh
YmxlTmFtZSwgJy4nLCBlbGVtZW50TmFtZSwgIiA9ICIsIGlucHV0VmFyaWFibGVOYW1lLCBtYW5n
bGVkT3V0cHV0UGF0aChwYXRoKSwgIjtcbiIpKTsKKyAgICB9CisgICAgcmV0dXJuIHN0cmluZ0J1
aWxkZXIudG9TdHJpbmcoKTsKK30KKworRnJhZ21lbnRFbnRyeVBvaW50U2NhZmZvbGRpbmc6OkZy
YWdtZW50RW50cnlQb2ludFNjYWZmb2xkaW5nKEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5j
dGlvbkRlZmluaXRpb24sIEludHJpbnNpY3MmIGludHJpbnNpY3MsIFR5cGVOYW1lciYgdHlwZU5h
bWVyLCBFbnRyeVBvaW50SXRlbXMmIGVudHJ5UG9pbnRJdGVtcywgSGFzaE1hcDxCaW5kaW5nKiwg
c2l6ZV90PiYgcmVzb3VyY2VNYXAsIExheW91dCYgbGF5b3V0LCBzdGQ6OmZ1bmN0aW9uPFN0cmlu
ZygpPiYmIGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSwgSGFzaE1hcDxBdHRhY2htZW50RGVzY3Jp
cHRvciosIHNpemVfdD4mKQorICAgIDogRW50cnlQb2ludFNjYWZmb2xkaW5nKGZ1bmN0aW9uRGVm
aW5pdGlvbiwgaW50cmluc2ljcywgdHlwZU5hbWVyLCBlbnRyeVBvaW50SXRlbXMsIHJlc291cmNl
TWFwLCBsYXlvdXQsIFdURk1vdmUoZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKSkKKyAgICAsIG1f
c3RhZ2VJblN0cnVjdE5hbWUodHlwZU5hbWVyLmdlbmVyYXRlTmV4dFR5cGVOYW1lKCkpCisgICAg
LCBtX3JldHVyblN0cnVjdE5hbWUodHlwZU5hbWVyLmdlbmVyYXRlTmV4dFR5cGVOYW1lKCkpCisg
ICAgLCBtX3N0YWdlSW5QYXJhbWV0ZXJOYW1lKG1fZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCkp
Cit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2VudHJ5UG9pbnRJdGVtcy5pbnB1dHMu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgYXV0byYgaW5wdXRJdGVtID0gbV9lbnRyeVBvaW50SXRl
bXMuaW5wdXRzW2ldOworICAgICAgICBpZiAoIVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8QVNUOjpT
dGFnZUluT3V0U2VtYW50aWM+KCppbnB1dEl0ZW0uc2VtYW50aWMpKQorICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIGF1dG8mIHN0YWdlSW5PdXRTZW1hbnRpYyA9IFdURjo6Z2V0PEFTVDo6
U3RhZ2VJbk91dFNlbWFudGljPigqaW5wdXRJdGVtLnNlbWFudGljKTsKKyAgICAgICAgTmFtZWRT
dGFnZUluIG5hbWVkU3RhZ2VJbjsKKyAgICAgICAgbmFtZWRTdGFnZUluLmluZGV4SW5FbnRyeVBv
aW50SXRlbXMgPSBpOworICAgICAgICBuYW1lZFN0YWdlSW4uZWxlbWVudE5hbWUgPSBtX3R5cGVO
YW1lci5nZW5lcmF0ZU5leHRTdHJ1Y3R1cmVFbGVtZW50TmFtZSgpOworICAgICAgICBuYW1lZFN0
YWdlSW4uYXR0cmlidXRlSW5kZXggPSBzdGFnZUluT3V0U2VtYW50aWMuaW5kZXgoKTsKKyAgICAg
ICAgbV9uYW1lZFN0YWdlSW5zLmFwcGVuZChXVEZNb3ZlKG5hbWVkU3RhZ2VJbikpOworICAgIH0K
KworICAgIG1fbmFtZWRPdXRwdXRzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9lbnRyeVBvaW50
SXRlbXMub3V0cHV0cy5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9lbnRy
eVBvaW50SXRlbXMub3V0cHV0cy5zaXplKCk7ICsraSkgeworICAgICAgICBOYW1lZE91dHB1dCBu
YW1lZE91dHB1dDsKKyAgICAgICAgbmFtZWRPdXRwdXQuZWxlbWVudE5hbWUgPSBtX3R5cGVOYW1l
ci5nZW5lcmF0ZU5leHRTdHJ1Y3R1cmVFbGVtZW50TmFtZSgpOworICAgICAgICBtX25hbWVkT3V0
cHV0cy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShuYW1lZE91dHB1dCkpOworICAgIH0KK30KKwor
U3RyaW5nIEZyYWdtZW50RW50cnlQb2ludFNjYWZmb2xkaW5nOjpoZWxwZXJUeXBlcygpCit7Cisg
ICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOworCisgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQobWFrZVN0cmluZygic3RydWN0ICIsIG1fc3RhZ2VJblN0cnVjdE5hbWUsICIge1xuIikpOwor
ICAgIGZvciAoYXV0byYgbmFtZWRTdGFnZUluIDogbV9uYW1lZFN0YWdlSW5zKSB7CisgICAgICAg
IGF1dG8gbWFuZ2xlZFR5cGVOYW1lID0gbV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpt
X2VudHJ5UG9pbnRJdGVtcy5pbnB1dHNbbmFtZWRTdGFnZUluLmluZGV4SW5FbnRyeVBvaW50SXRl
bXNdLnVubmFtZWRUeXBlKTsKKyAgICAgICAgYXV0byBlbGVtZW50TmFtZSA9IG5hbWVkU3RhZ2VJ
bi5lbGVtZW50TmFtZTsKKyAgICAgICAgYXV0byBhdHRyaWJ1dGVJbmRleCA9IG5hbWVkU3RhZ2VJ
bi5lbGVtZW50TmFtZTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygi
ICAgICIsIG1hbmdsZWRUeXBlTmFtZSwgJyAnLCBlbGVtZW50TmFtZSwgIiBbW3VzZXIoIiwgYXR0
cmlidXRlSW5kZXgsICIpXV07XG4iKSk7CisgICAgfQorICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KCJ9XG5cbiIpOworCisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygic3RydWN0
ICIsIG1fcmV0dXJuU3RydWN0TmFtZSwgIiB7XG4iKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX2VudHJ5UG9pbnRJdGVtcy5vdXRwdXRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGF1
dG8mIG91dHB1dEl0ZW0gPSBtX2VudHJ5UG9pbnRJdGVtcy5vdXRwdXRzW2ldOworICAgICAgICBh
dXRvIG1hbmdsZWRUeXBlTmFtZSA9IG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqb3V0
cHV0SXRlbS51bm5hbWVkVHlwZSk7CisgICAgICAgIGF1dG8gZWxlbWVudE5hbWUgPSBtX25hbWVk
T3V0cHV0c1tpXS5lbGVtZW50TmFtZTsKKyAgICAgICAgYXV0byBhdHRyaWJ1dGUgPSBhdHRyaWJ1
dGVGb3JTZW1hbnRpYygqb3V0cHV0SXRlbS5zZW1hbnRpYyk7CisgICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiAgICAiLCBtYW5nbGVkVHlwZU5hbWUsICcgJywgZWxlbWVu
dE5hbWUsICcgJywgYXR0cmlidXRlLCAiO1xuIikpOworICAgIH0KKyAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZCgifVxuXG4iKTsKKworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHJlc291cmNlSGVs
cGVyVHlwZXMoKSk7CisKKyAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworfQor
CitTdHJpbmcgRnJhZ21lbnRFbnRyeVBvaW50U2NhZmZvbGRpbmc6OnNpZ25hdHVyZShTdHJpbmcm
IGZ1bmN0aW9uTmFtZSkKK3sKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CisKKyAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJmcmFnbWVudCAiLCBtX3JldHVyblN0
cnVjdE5hbWUsICcgJywgZnVuY3Rpb25OYW1lLCAnKCcsIG1fc3RhZ2VJblN0cnVjdE5hbWUsICcg
JywgbV9zdGFnZUluUGFyYW1ldGVyTmFtZSwgIiBbW3N0YWdlX2luXV0iKSk7CisgICAgaWYgKGF1
dG8gcmVzb3VyY2VTaWduYXR1cmUgPSB0aGlzLT5yZXNvdXJjZVNpZ25hdHVyZSgpKQorICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIsICIsICpyZXNvdXJjZVNpZ25hdHVy
ZSkpOworICAgIGlmIChhdXRvIGJ1aWx0SW5zU2lnbmF0dXJlID0gdGhpcy0+YnVpbHRJbnNTaWdu
YXR1cmUoKSkKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiLCAiLCAq
YnVpbHRJbnNTaWduYXR1cmUpKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiKSIpOworCisg
ICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKK30KKworU3RyaW5nIEZyYWdtZW50
RW50cnlQb2ludFNjYWZmb2xkaW5nOjp1bnBhY2soKQoreworICAgIFN0cmluZ0J1aWxkZXIgc3Ry
aW5nQnVpbGRlcjsKKworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHVucGFja1Jlc291cmNlc0Fu
ZE5hbWVkQnVpbHRJbnMoKSk7CisKKyAgICBmb3IgKGF1dG8mIG5hbWVkU3RhZ2VJbiA6IG1fbmFt
ZWRTdGFnZUlucykgeworICAgICAgICBhdXRvJiBwYXRoID0gbV9lbnRyeVBvaW50SXRlbXMuaW5w
dXRzW25hbWVkU3RhZ2VJbi5pbmRleEluRW50cnlQb2ludEl0ZW1zXS5wYXRoOworICAgICAgICBh
dXRvJiBlbGVtZW50TmFtZSA9IG5hbWVkU3RhZ2VJbi5lbGVtZW50TmFtZTsKKyAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtYW5nbGVkSW5wdXRQYXRoKHBhdGgpLCAiID0g
IiwgbV9zdGFnZUluU3RydWN0TmFtZSwgJy4nLCBlbGVtZW50TmFtZSwgIjtcbiIpKTsKKyAgICB9
CisKKyAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworfQorCitTdHJpbmcgRnJh
Z21lbnRFbnRyeVBvaW50U2NhZmZvbGRpbmc6OnBhY2soY29uc3QgU3RyaW5nJiBpbnB1dFZhcmlh
YmxlTmFtZSwgY29uc3QgU3RyaW5nJiBvdXRwdXRWYXJpYWJsZU5hbWUpCit7CisgICAgU3RyaW5n
QnVpbGRlciBzdHJpbmdCdWlsZGVyOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJp
bmcobV9yZXR1cm5TdHJ1Y3ROYW1lLCAnICcsIG91dHB1dFZhcmlhYmxlTmFtZSkpOworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9lbnRyeVBvaW50SXRlbXMub3V0cHV0cy5zaXplKCk7ICsr
aSkgeworICAgICAgICBhdXRvJiBlbGVtZW50TmFtZSA9IG1fbmFtZWRPdXRwdXRzW2ldLmVsZW1l
bnROYW1lOworICAgICAgICBhdXRvJiBwYXRoID0gbV9lbnRyeVBvaW50SXRlbXMub3V0cHV0c1tp
XS5wYXRoOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG91dHB1dFZh
cmlhYmxlTmFtZSwgJy4nLCBlbGVtZW50TmFtZSwgIiA9ICIsIGlucHV0VmFyaWFibGVOYW1lLCBt
YW5nbGVkT3V0cHV0UGF0aChwYXRoKSwgIjtcbiIpKTsKKyAgICB9CisgICAgcmV0dXJuIHN0cmlu
Z0J1aWxkZXIudG9TdHJpbmcoKTsKK30KKworQ29tcHV0ZUVudHJ5UG9pbnRTY2FmZm9sZGluZzo6
Q29tcHV0ZUVudHJ5UG9pbnRTY2FmZm9sZGluZyhBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVu
Y3Rpb25EZWZpbml0aW9uLCBJbnRyaW5zaWNzJiBpbnRyaW5zaWNzLCBUeXBlTmFtZXImIHR5cGVO
YW1lciwgRW50cnlQb2ludEl0ZW1zJiBlbnRyeVBvaW50SXRlbXMsIEhhc2hNYXA8QmluZGluZyos
IHNpemVfdD4mIHJlc291cmNlTWFwLCBMYXlvdXQmIGxheW91dCwgc3RkOjpmdW5jdGlvbjxTdHJp
bmcoKT4mJiBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUpCisgICAgOiBFbnRyeVBvaW50U2NhZmZv
bGRpbmcoZnVuY3Rpb25EZWZpbml0aW9uLCBpbnRyaW5zaWNzLCB0eXBlTmFtZXIsIGVudHJ5UG9p
bnRJdGVtcywgcmVzb3VyY2VNYXAsIGxheW91dCwgV1RGTW92ZShnZW5lcmF0ZU5leHRWYXJpYWJs
ZU5hbWUpKQoreworfQorCitTdHJpbmcgQ29tcHV0ZUVudHJ5UG9pbnRTY2FmZm9sZGluZzo6aGVs
cGVyVHlwZXMoKQoreworICAgIHJldHVybiByZXNvdXJjZUhlbHBlclR5cGVzKCk7Cit9CisKK1N0
cmluZyBDb21wdXRlRW50cnlQb2ludFNjYWZmb2xkaW5nOjpzaWduYXR1cmUoU3RyaW5nJiBmdW5j
dGlvbk5hbWUpCit7CisgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOworCisgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiY29tcHV0ZSB2b2lkICIsIGZ1bmN0aW9uTmFt
ZSwgJygnKSk7CisgICAgYm9vbCBlbXB0eSA9IHRydWU7CisgICAgaWYgKGF1dG8gcmVzb3VyY2VT
aWduYXR1cmUgPSB0aGlzLT5yZXNvdXJjZVNpZ25hdHVyZSgpKSB7CisgICAgICAgIGVtcHR5ID0g
ZmFsc2U7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoKnJlc291cmNl
U2lnbmF0dXJlKSk7CisgICAgfQorICAgIGlmIChhdXRvIGJ1aWx0SW5zU2lnbmF0dXJlID0gdGhp
cy0+YnVpbHRJbnNTaWduYXR1cmUoKSkgeworICAgICAgICBpZiAoIWVtcHR5KQorICAgICAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiwgIik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKCpidWlsdEluc1NpZ25hdHVyZSk7CisgICAgfQorICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KCIpIik7CisKKyAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworfQorCitTdHJp
bmcgQ29tcHV0ZUVudHJ5UG9pbnRTY2FmZm9sZGluZzo6dW5wYWNrKCkKK3sKKyAgICByZXR1cm4g
dW5wYWNrUmVzb3VyY2VzQW5kTmFtZWRCdWlsdElucygpOwogfQogCi1TdHJpbmcgRW50cnlQb2lu
dFNjYWZmb2xkaW5nOjpwYWNrKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpCitTdHJpbmcg
Q29tcHV0ZUVudHJ5UG9pbnRTY2FmZm9sZGluZzo6cGFjayhjb25zdCBTdHJpbmcmLCBjb25zdCBT
dHJpbmcmKQogewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRW50cnlQb2ludFNjYWZm
b2xkaW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExT
TEVudHJ5UG9pbnRTY2FmZm9sZGluZy5oCmluZGV4IDhkNjVmYWQyMDdkZjUzOWU5ZWE3NDA0NTA1
ZWE2ZTg3MjE0Yzk0ZTAuLmQ4N2Y2ZTlmNTRlNzcxNjRmY2I0MWZlNmE2NWUwYzVjNTA1ODlhODEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dI
TFNMRW50cnlQb2ludFNjYWZmb2xkaW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xFbnRyeVBvaW50U2NhZmZvbGRpbmcuaApAQCAtMjcsNiAr
MjcsMTIgQEAKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAKKyNpbmNsdWRlICJXSExTTE1hcHBlZEJp
bmRpbmdzLmgiCisjaW5jbHVkZSAiV0hMU0xQaXBlbGluZURlc2NyaXB0b3IuaCIKKyNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIG5hbWVzcGFjZSBX
SExTTCB7CkBAIC0zNywyMyArNDMsMTMyIEBAIGNsYXNzIEZ1bmN0aW9uRGVmaW5pdGlvbjsKIAog
fQogCitzdHJ1Y3QgRW50cnlQb2ludEl0ZW1zOwogY2xhc3MgSW50cmluc2ljczsKIAogbmFtZXNw
YWNlIE1ldGFsIHsKIAotLy8gRklYTUU6IFRoaXMgbmVlZHMgdG8ga25vdyBhYm91dCB0aGUgcGlw
ZWxpbmUgc3RhdGUgb2JqZWN0IHRvIGVtaXQgZnVuY3Rpb24gcHJvbG9ndWVzIGFuZCBlcGlsb2d1
ZXMuCitjbGFzcyBUeXBlTmFtZXI7CisKIGNsYXNzIEVudHJ5UG9pbnRTY2FmZm9sZGluZyB7CiBw
dWJsaWM6Ci0gICAgRW50cnlQb2ludFNjYWZmb2xkaW5nKEFTVDo6RnVuY3Rpb25EZWZpbml0aW9u
JiwgSW50cmluc2ljcyYpOworICAgIEVudHJ5UG9pbnRTY2FmZm9sZGluZyhBU1Q6OkZ1bmN0aW9u
RGVmaW5pdGlvbiYsIEludHJpbnNpY3MmLCBUeXBlTmFtZXImLCBFbnRyeVBvaW50SXRlbXMmLCBI
YXNoTWFwPEJpbmRpbmcqLCBzaXplX3Q+JiByZXNvdXJjZU1hcCwgTGF5b3V0Jiwgc3RkOjpmdW5j
dGlvbjxTdHJpbmcoKT4mJiBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUpOworICAgIHZpcnR1YWwg
fkVudHJ5UG9pbnRTY2FmZm9sZGluZygpID0gZGVmYXVsdDsKKworICAgIHZpcnR1YWwgU3RyaW5n
IGhlbHBlclR5cGVzKCkgPSAwOworICAgIHZpcnR1YWwgU3RyaW5nIHNpZ25hdHVyZShTdHJpbmcm
IGZ1bmN0aW9uTmFtZSkgPSAwOworICAgIHZpcnR1YWwgU3RyaW5nIHVucGFjaygpID0gMDsKKyAg
ICB2aXJ0dWFsIFN0cmluZyBwYWNrKGNvbnN0IFN0cmluZyYgZXhpc3RpbmdWYXJpYWJsZU5hbWUs
IGNvbnN0IFN0cmluZyYgdmFyaWFibGVOYW1lKSA9IDA7CisKKyAgICBNYXBwZWRCaW5kR3JvdXBz
IG1hcHBlZEJpbmRHcm91cHMoKSBjb25zdDsKKyAgICBWZWN0b3I8U3RyaW5nPiYgcGFyYW1ldGVy
VmFyaWFibGVzKCkgeyByZXR1cm4gbV9wYXJhbWV0ZXJWYXJpYWJsZXM7IH0KKworcHJvdGVjdGVk
OgorICAgIFN0cmluZyByZXNvdXJjZUhlbHBlclR5cGVzKCk7CisgICAgT3B0aW9uYWw8U3RyaW5n
PiByZXNvdXJjZVNpZ25hdHVyZSgpOworICAgIE9wdGlvbmFsPFN0cmluZz4gYnVpbHRJbnNTaWdu
YXR1cmUoKTsKKworICAgIFN0cmluZyBtYW5nbGVkSW5wdXRQYXRoKFZlY3RvcjxTdHJpbmc+JiBw
YXRoKTsKKyAgICBTdHJpbmcgbWFuZ2xlZE91dHB1dFBhdGgoVmVjdG9yPFN0cmluZz4mIHBhdGgp
OworICAgIFN0cmluZyB1bnBhY2tSZXNvdXJjZXNBbmROYW1lZEJ1aWx0SW5zKCk7CisKKyAgICBB
U1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgbV9mdW5jdGlvbkRlZmluaXRpb247CisgICAgSW50cmlu
c2ljcyYgbV9pbnRyaW5zaWNzOworICAgIFR5cGVOYW1lciYgbV90eXBlTmFtZXI7CisgICAgRW50
cnlQb2ludEl0ZW1zJiBtX2VudHJ5UG9pbnRJdGVtczsKKyAgICBIYXNoTWFwPEJpbmRpbmcqLCBz
aXplX3Q+JiBtX3Jlc291cmNlTWFwOworICAgIExheW91dCYgbV9sYXlvdXQ7CisgICAgc3RkOjpm
dW5jdGlvbjxTdHJpbmcoKT4gbV9nZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWU7CisKKyAgICBzdHJ1
Y3QgTmFtZWRCaW5kaW5nIHsKKyAgICAgICAgU3RyaW5nIGVsZW1lbnROYW1lOworICAgICAgICB1
bnNpZ25lZCBpbmRleDsKKyAgICB9OworICAgIHN0cnVjdCBOYW1lZEJpbmRHcm91cCB7CisgICAg
ICAgIFN0cmluZyBzdHJ1Y3ROYW1lOworICAgICAgICBTdHJpbmcgdmFyaWFibGVOYW1lOworICAg
ICAgICBWZWN0b3I8TmFtZWRCaW5kaW5nPiBuYW1lZEJpbmRpbmdzOworICAgICAgICB1bnNpZ25l
ZCBhcmd1bWVudEJ1ZmZlckluZGV4OworICAgIH07CisgICAgVmVjdG9yPE5hbWVkQmluZEdyb3Vw
PiBtX25hbWVkQmluZEdyb3VwczsgLy8gUGFyYWxsZWwgdG8gbV9sYXlvdXQKKworICAgIHN0cnVj
dCBOYW1lZEJ1aWx0SW4geworICAgICAgICBzaXplX3QgaW5kZXhJbkVudHJ5UG9pbnRJdGVtczsK
KyAgICAgICAgU3RyaW5nIHZhcmlhYmxlTmFtZTsKKyAgICB9OworICAgIFZlY3RvcjxOYW1lZEJ1
aWx0SW4+IG1fbmFtZWRCdWlsdEluczsKKworICAgIFZlY3RvcjxTdHJpbmc+IG1fcGFyYW1ldGVy
VmFyaWFibGVzOworfTsKKworY2xhc3MgVmVydGV4RW50cnlQb2ludFNjYWZmb2xkaW5nIDogcHVi
bGljIEVudHJ5UG9pbnRTY2FmZm9sZGluZyB7CitwdWJsaWM6CisgICAgVmVydGV4RW50cnlQb2lu
dFNjYWZmb2xkaW5nKEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiwgSW50cmluc2ljcyYsIFR5cGVO
YW1lciYsIEVudHJ5UG9pbnRJdGVtcyYsIEhhc2hNYXA8QmluZGluZyosIHNpemVfdD4mIHJlc291
cmNlTWFwLCBMYXlvdXQmLCBzdGQ6OmZ1bmN0aW9uPFN0cmluZygpPiYmIGdlbmVyYXRlTmV4dFZh
cmlhYmxlTmFtZSwgSGFzaE1hcDxWZXJ0ZXhBdHRyaWJ1dGUqLCBzaXplX3Q+JiBtYXRjaGVkVmVy
dGV4QXR0cmlidXRlcyk7CisgICAgdmlydHVhbCB+VmVydGV4RW50cnlQb2ludFNjYWZmb2xkaW5n
KCkgPSBkZWZhdWx0OworCisgICAgU3RyaW5nIGhlbHBlclR5cGVzKCkgb3ZlcnJpZGU7CisgICAg
U3RyaW5nIHNpZ25hdHVyZShTdHJpbmcmIGZ1bmN0aW9uTmFtZSkgb3ZlcnJpZGU7CisgICAgU3Ry
aW5nIHVucGFjaygpIG92ZXJyaWRlOworICAgIFN0cmluZyBwYWNrKGNvbnN0IFN0cmluZyYgZXhp
c3RpbmdWYXJpYWJsZU5hbWUsIGNvbnN0IFN0cmluZyYgdmFyaWFibGVOYW1lKSBvdmVycmlkZTsK
KworcHJpdmF0ZToKKyAgICBIYXNoTWFwPFZlcnRleEF0dHJpYnV0ZSosIHNpemVfdD4mIG1fbWF0
Y2hlZFZlcnRleEF0dHJpYnV0ZXM7CisgICAgU3RyaW5nIG1fc3RhZ2VJblN0cnVjdE5hbWU7Cisg
ICAgU3RyaW5nIG1fcmV0dXJuU3RydWN0TmFtZTsKKyAgICBTdHJpbmcgbV9zdGFnZUluUGFyYW1l
dGVyTmFtZTsKKworICAgIHN0cnVjdCBOYW1lZFN0YWdlSW4geworICAgICAgICBzaXplX3QgaW5k
ZXhJbkVudHJ5UG9pbnRJdGVtczsKKyAgICAgICAgU3RyaW5nIGVsZW1lbnROYW1lOworICAgICAg
ICB1bnNpZ25lZCBhdHRyaWJ1dGVJbmRleDsKKyAgICB9OworICAgIFZlY3RvcjxOYW1lZFN0YWdl
SW4+IG1fbmFtZWRTdGFnZUluczsKKworICAgIHN0cnVjdCBOYW1lZE91dHB1dCB7CisgICAgICAg
IFN0cmluZyBlbGVtZW50TmFtZTsKKyAgICB9OworICAgIFZlY3RvcjxOYW1lZE91dHB1dD4gbV9u
YW1lZE91dHB1dHM7Cit9OworCitjbGFzcyBGcmFnbWVudEVudHJ5UG9pbnRTY2FmZm9sZGluZyA6
IHB1YmxpYyBFbnRyeVBvaW50U2NhZmZvbGRpbmcgeworcHVibGljOgorICAgIEZyYWdtZW50RW50
cnlQb2ludFNjYWZmb2xkaW5nKEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiwgSW50cmluc2ljcyYs
IFR5cGVOYW1lciYsIEVudHJ5UG9pbnRJdGVtcyYsIEhhc2hNYXA8QmluZGluZyosIHNpemVfdD4m
IHJlc291cmNlTWFwLCBMYXlvdXQmLCBzdGQ6OmZ1bmN0aW9uPFN0cmluZygpPiYmIGdlbmVyYXRl
TmV4dFZhcmlhYmxlTmFtZSwgSGFzaE1hcDxBdHRhY2htZW50RGVzY3JpcHRvciosIHNpemVfdD4m
IG1hdGNoZWRDb2xvckF0dGFjaG1lbnRzKTsKKyAgICB2aXJ0dWFsIH5GcmFnbWVudEVudHJ5UG9p
bnRTY2FmZm9sZGluZygpID0gZGVmYXVsdDsKKworICAgIFN0cmluZyBoZWxwZXJUeXBlcygpIG92
ZXJyaWRlOworICAgIFN0cmluZyBzaWduYXR1cmUoU3RyaW5nJiBmdW5jdGlvbk5hbWUpIG92ZXJy
aWRlOworICAgIFN0cmluZyB1bnBhY2soKSBvdmVycmlkZTsKKyAgICBTdHJpbmcgcGFjayhjb25z
dCBTdHJpbmcmIGV4aXN0aW5nVmFyaWFibGVOYW1lLCBjb25zdCBTdHJpbmcmIHZhcmlhYmxlTmFt
ZSkgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgU3RyaW5nIG1fc3RhZ2VJblN0cnVjdE5hbWU7
CisgICAgU3RyaW5nIG1fcmV0dXJuU3RydWN0TmFtZTsKKyAgICBTdHJpbmcgbV9zdGFnZUluUGFy
YW1ldGVyTmFtZTsKKworICAgIHN0cnVjdCBOYW1lZFN0YWdlSW4geworICAgICAgICBzaXplX3Qg
aW5kZXhJbkVudHJ5UG9pbnRJdGVtczsKKyAgICAgICAgU3RyaW5nIGVsZW1lbnROYW1lOworICAg
ICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVJbmRleDsKKyAgICB9OworICAgIFZlY3RvcjxOYW1lZFN0
YWdlSW4+IG1fbmFtZWRTdGFnZUluczsKKworICAgIHN0cnVjdCBOYW1lZE91dHB1dCB7CisgICAg
ICAgIFN0cmluZyBlbGVtZW50TmFtZTsKKyAgICB9OworICAgIFZlY3RvcjxOYW1lZE91dHB1dD4g
bV9uYW1lZE91dHB1dHM7Cit9OworCitjbGFzcyBDb21wdXRlRW50cnlQb2ludFNjYWZmb2xkaW5n
IDogcHVibGljIEVudHJ5UG9pbnRTY2FmZm9sZGluZyB7CitwdWJsaWM6CisgICAgQ29tcHV0ZUVu
dHJ5UG9pbnRTY2FmZm9sZGluZyhBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYsIEludHJpbnNpY3Mm
LCBUeXBlTmFtZXImLCBFbnRyeVBvaW50SXRlbXMmLCBIYXNoTWFwPEJpbmRpbmcqLCBzaXplX3Q+
JiByZXNvdXJjZU1hcCwgTGF5b3V0Jiwgc3RkOjpmdW5jdGlvbjxTdHJpbmcoKT4mJiBnZW5lcmF0
ZU5leHRWYXJpYWJsZU5hbWUpOworICAgIHZpcnR1YWwgfkNvbXB1dGVFbnRyeVBvaW50U2NhZmZv
bGRpbmcoKSA9IGRlZmF1bHQ7CiAKLSAgICBTdHJpbmcgaGVscGVyVHlwZXMoKTsKLSAgICBTdHJp
bmcgc2lnbmF0dXJlKCk7Ci0gICAgU3RyaW5nIHVucGFjaygpOwotICAgIFN0cmluZyBwYWNrKGNv
bnN0IFN0cmluZyYgZXhpc3RpbmdWYXJpYWJsZU5hbWUsIGNvbnN0IFN0cmluZyYgdmFyaWFibGVO
YW1lKTsKKyAgICBTdHJpbmcgaGVscGVyVHlwZXMoKSBvdmVycmlkZTsKKyAgICBTdHJpbmcgc2ln
bmF0dXJlKFN0cmluZyYgZnVuY3Rpb25OYW1lKSBvdmVycmlkZTsKKyAgICBTdHJpbmcgdW5wYWNr
KCkgb3ZlcnJpZGU7CisgICAgU3RyaW5nIHBhY2soY29uc3QgU3RyaW5nJiBleGlzdGluZ1Zhcmlh
YmxlTmFtZSwgY29uc3QgU3RyaW5nJiB2YXJpYWJsZU5hbWUpIG92ZXJyaWRlOwogCiBwcml2YXRl
OgotICAgIEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uKiBtX2Z1bmN0aW9uRGVmaW5pdGlvbjsKLSAg
ICBJbnRyaW5zaWNzKiBtX2ludHJpbnNpY3M7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRnVuY3Rp
b25Xcml0ZXIuY3BwCmluZGV4IDAxOWEyNjdiYmM4YmU2ZmQyN2VhMGUxMDhmODFiNzk0MjhkNTBj
ZjYuLjFiN2E0MmFiY2RlNjJjMDI5NTM5ZGM0YWYxYjBmM2JkNmFhYTQ2NWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRnVuY3Rpb25X
cml0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFs
L1dITFNMRnVuY3Rpb25Xcml0ZXIuY3BwCkBAIC01MCw2ICs1MCw3IEBACiAjaW5jbHVkZSAiV0hM
U0xMb2dpY2FsTm90RXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgIldITFNMTWFrZUFycmF5UmVmZXJl
bmNlRXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgIldITFNMTWFrZVBvaW50ZXJFeHByZXNzaW9uLmgi
CisjaW5jbHVkZSAiV0hMU0xNYXBwZWRCaW5kaW5ncy5oIgogI2luY2x1ZGUgIldITFNMTmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIldITFNMTmF0aXZlRnVuY3Rpb25Xcml0
ZXIuaCIKICNpbmNsdWRlICJXSExTTE5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5oIgpAQCAtODYsMjEg
Kzg3LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgfkZ1bmN0aW9uRGVjbGFyYXRpb25Xcml0ZXIo
KSA9IGRlZmF1bHQ7CiAKICAgICBTdHJpbmcgdG9TdHJpbmcoKSB7IHJldHVybiBtX3N0cmluZ0J1
aWxkZXIudG9TdHJpbmcoKTsgfQotICAgIHZvaWQgdmlzaXQoQVNUOjpGdW5jdGlvbkRlY2xhcmF0
aW9uJiBmdW5jdGlvbkRlY2xhcmF0aW9uKSBvdmVycmlkZQotICAgIHsKLSAgICAgICAgaWYgKGZ1
bmN0aW9uRGVjbGFyYXRpb24uZW50cnlQb2ludFR5cGUoKSkKLSAgICAgICAgICAgIHJldHVybjsK
IAotICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbV9mdW5jdGlvbk1hcHBpbmcuZmluZCgmZnVuY3Rp
b25EZWNsYXJhdGlvbik7Ci0gICAgICAgIEFTU0VSVChpdGVyYXRvciAhPSBtX2Z1bmN0aW9uTWFw
cGluZy5lbmQoKSk7Ci0gICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyht
X3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoZnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkp
LCAnICcsIGl0ZXJhdG9yLT52YWx1ZSwgJygnKSk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgZnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgICAgIGlmIChpKQotICAgICAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQo
IiwgIik7Ci0gICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1fdHlwZU5hbWVyLm1h
bmdsZWROYW1lRm9yVHlwZSgqZnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbaV0udHlw
ZSgpKSk7Ci0gICAgICAgIH0KLSAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiKTtcbiIp
OwotICAgIH0KKyAgICB2b2lkIHZpc2l0KEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiYpIG92ZXJy
aWRlOwogCiBwcml2YXRlOgogICAgIFR5cGVOYW1lciYgbV90eXBlTmFtZXI7CkBAIC0xMDgsMTIg
Kzk2LDI5IEBAIHByaXZhdGU6CiAgICAgU3RyaW5nQnVpbGRlciBtX3N0cmluZ0J1aWxkZXI7CiB9
OwogCit2b2lkIEZ1bmN0aW9uRGVjbGFyYXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6RnVuY3Rpb25E
ZWNsYXJhdGlvbiYgZnVuY3Rpb25EZWNsYXJhdGlvbikKK3sKKyAgICBpZiAoZnVuY3Rpb25EZWNs
YXJhdGlvbi5lbnRyeVBvaW50VHlwZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIGl0
ZXJhdG9yID0gbV9mdW5jdGlvbk1hcHBpbmcuZmluZCgmZnVuY3Rpb25EZWNsYXJhdGlvbik7Cisg
ICAgQVNTRVJUKGl0ZXJhdG9yICE9IG1fZnVuY3Rpb25NYXBwaW5nLmVuZCgpKTsKKyAgICBtX3N0
cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JU
eXBlKGZ1bmN0aW9uRGVjbGFyYXRpb24udHlwZSgpKSwgJyAnLCBpdGVyYXRvci0+dmFsdWUsICco
JykpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJh
bWV0ZXJzKCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKGkpCisgICAgICAgICAgICBtX3N0
cmluZ0J1aWxkZXIuYXBwZW5kKCIsICIpOworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5k
KG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqZnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJh
bWV0ZXJzKClbaV0udHlwZSgpKSk7CisgICAgfQorICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQo
Iik7XG4iKTsKK30KKwogY2xhc3MgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyIDogcHVibGljIFZp
c2l0b3IgewogcHVibGljOgotICAgIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcihJbnRyaW5zaWNz
JiBpbnRyaW5zaWNzLCBUeXBlTmFtZXImIHR5cGVOYW1lciwgSGFzaE1hcDxBU1Q6OkZ1bmN0aW9u
RGVjbGFyYXRpb24qLCBTdHJpbmc+JiBmdW5jdGlvbk1hcHBpbmcpCisgICAgRnVuY3Rpb25EZWZp
bml0aW9uV3JpdGVyKEludHJpbnNpY3MmIGludHJpbnNpY3MsIFR5cGVOYW1lciYgdHlwZU5hbWVy
LCBIYXNoTWFwPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiosIFN0cmluZz4mIGZ1bmN0aW9uTWFw
cGluZywgTGF5b3V0JiBsYXlvdXQpCiAgICAgICAgIDogbV9pbnRyaW5zaWNzKGludHJpbnNpY3Mp
CiAgICAgICAgICwgbV90eXBlTmFtZXIodHlwZU5hbWVyKQogICAgICAgICAsIG1fZnVuY3Rpb25N
YXBwaW5nKGZ1bmN0aW9uTWFwcGluZykKKyAgICAgICAgLCBtX2xheW91dChsYXlvdXQpCiAgICAg
ewogICAgIH0KIApAQCAtMTIxLDQ2OSArMTI2LDYxMCBAQCBwdWJsaWM6CiAKICAgICBTdHJpbmcg
dG9TdHJpbmcoKSB7IHJldHVybiBtX3N0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsgfQogCi0gICAg
dm9pZCB2aXNpdChBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mIG5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24pIG92ZXJyaWRlCi0gICAgewotICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbV9m
dW5jdGlvbk1hcHBpbmcuZmluZCgmbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbik7Ci0gICAgICAg
IEFTU0VSVChpdGVyYXRvciAhPSBtX2Z1bmN0aW9uTWFwcGluZy5lbmQoKSk7Ci0gICAgICAgIG1f
c3RyaW5nQnVpbGRlci5hcHBlbmQod3JpdGVOYXRpdmVGdW5jdGlvbihuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLCBpdGVyYXRvci0+dmFsdWUsIG1fdHlwZU5hbWVyKSk7Ci0gICAgfQorICAgIHZv
aWQgdmlzaXQoQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJikgb3ZlcnJpZGU7CisgICAg
dm9pZCB2aXNpdChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYpIG92ZXJyaWRlOworCitwcm90ZWN0
ZWQ6CisgICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8RW50cnlQb2ludFNjYWZmb2xkaW5nPiBj
cmVhdGVFbnRyeVBvaW50U2NhZmZvbGRpbmcoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mKSA9IDA7
CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiYpIG92ZXJyaWRlOwor
ICAgIHZvaWQgdmlzaXQoQVNUOjpTdGF0ZW1lbnQmKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0
KEFTVDo6QmxvY2smKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6QnJlYWsmKSBvdmVy
cmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6Q29udGludWUmKSBvdmVycmlkZTsKKyAgICB2b2lk
IHZpc2l0KEFTVDo6RG9XaGlsZUxvb3AmKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6
RWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudCYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQo
QVNUOjpGYWxsdGhyb3VnaCYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpGb3JMb29w
Jikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OklmU3RhdGVtZW50Jikgb3ZlcnJpZGU7
CisgICAgdm9pZCB2aXNpdChBU1Q6OlJldHVybiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQo
QVNUOjpTd2l0Y2hTdGF0ZW1lbnQmKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6U3dp
dGNoQ2FzZSYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpUcmFwJikgb3ZlcnJpZGU7
CisgICAgdm9pZCB2aXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50Jikgb3Zl
cnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OldoaWxlTG9vcCYpIG92ZXJyaWRlOworICAgIHZv
aWQgdmlzaXQoQVNUOjpJbnRlZ2VyTGl0ZXJhbCYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQo
QVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChB
U1Q6OkZsb2F0TGl0ZXJhbCYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpOdWxsTGl0
ZXJhbCYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpCb29sZWFuTGl0ZXJhbCYpIG92
ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwmKSBv
dmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6RXhwcmVzc2lvbiYpIG92ZXJyaWRlOworICAg
IHZvaWQgdmlzaXQoQVNUOjpEb3RFeHByZXNzaW9uJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNp
dChBU1Q6OkluZGV4RXhwcmVzc2lvbiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpQ
cm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6
VmFyaWFibGVEZWNsYXJhdGlvbiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpBc3Np
Z25tZW50RXhwcmVzc2lvbiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpDYWxsRXhw
cmVzc2lvbiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpDb21tYUV4cHJlc3Npb24m
KSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uJikg
b3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkxvZ2ljYWxFeHByZXNzaW9uJikgb3ZlcnJp
ZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkxvZ2ljYWxOb3RFeHByZXNzaW9uJikgb3ZlcnJpZGU7
CisgICAgdm9pZCB2aXNpdChBU1Q6Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24mKSBvdmVy
cmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6TWFrZVBvaW50ZXJFeHByZXNzaW9uJikgb3ZlcnJp
ZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24mKSBvdmVy
cmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6VGVybmFyeUV4cHJlc3Npb24mKSBvdmVycmlkZTsK
KyAgICB2b2lkIHZpc2l0KEFTVDo6VmFyaWFibGVSZWZlcmVuY2UmKSBvdmVycmlkZTsKKworICAg
IFN0cmluZyBjb25zdGFudEV4cHJlc3Npb25TdHJpbmcoQVNUOjpDb25zdGFudEV4cHJlc3Npb24m
KTsKIAotICAgIHZvaWQgdmlzaXQoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVm
aW5pdGlvbikgb3ZlcnJpZGUKKyAgICBTdHJpbmcgZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCkK
ICAgICB7Ci0gICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX2Z1bmN0aW9uTWFwcGluZy5maW5kKCZm
dW5jdGlvbkRlZmluaXRpb24pOwotICAgICAgICBBU1NFUlQoaXRlcmF0b3IgIT0gbV9mdW5jdGlv
bk1hcHBpbmcuZW5kKCkpOwotICAgICAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLmVudHJ5UG9p
bnRUeXBlKCkpIHsKLSAgICAgICAgICAgIG1fZW50cnlQb2ludFNjYWZmb2xkaW5nID0gRW50cnlQ
b2ludFNjYWZmb2xkaW5nKGZ1bmN0aW9uRGVmaW5pdGlvbiwgbV9pbnRyaW5zaWNzKTsKLSAgICAg
ICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobV9lbnRyeVBvaW50U2NhZmZvbGRpbmctPmhl
bHBlclR5cGVzKCkpOwotICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsK
LSAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtX2VudHJ5UG9p
bnRTY2FmZm9sZGluZy0+c2lnbmF0dXJlKCksICIgeyIpKTsKLSAgICAgICAgICAgIG1fc3RyaW5n
QnVpbGRlci5hcHBlbmQobV9lbnRyeVBvaW50U2NhZmZvbGRpbmctPnVucGFjaygpKTsKLSAgICAg
ICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChmdW5jdGlvbkRlZmluaXRpb24uYmxvY2soKSk7Ci0g
ICAgICAgICAgICBBU1NFUlQobV9zdGFjay5pc0VtcHR5KCkpOwotICAgICAgICAgICAgbV9zdHJp
bmdCdWlsZGVyLmFwcGVuZCgifVxuIik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBt
X2VudHJ5UG9pbnRTY2FmZm9sZGluZyA9IFdURjo6bnVsbG9wdDsKLSAgICAgICAgICAgIG1fc3Ry
aW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5
cGUoZnVuY3Rpb25EZWZpbml0aW9uLnR5cGUoKSksICcgJywgaXRlcmF0b3ItPnZhbHVlLCAnKCcp
KTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnVuY3Rpb25EZWZpbml0aW9u
LnBhcmFtZXRlcnMoKS5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgIGF1dG8mIHBhcmFt
ZXRlciA9IGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbaV07Ci0gICAgICAgICAgICAg
ICAgaWYgKGkpCi0gICAgICAgICAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIiwg
Iik7Ci0gICAgICAgICAgICAgICAgYXV0byBwYXJhbWV0ZXJOYW1lID0gZ2VuZXJhdGVOZXh0VmFy
aWFibGVOYW1lKCk7Ci0gICAgICAgICAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3ZhcmlhYmxl
TWFwcGluZy5hZGQoJnBhcmFtZXRlciwgcGFyYW1ldGVyTmFtZSk7Ci0gICAgICAgICAgICAgICAg
QVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKLSAgICAgICAg
ICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobV90eXBlTmFtZXIubWFu
Z2xlZE5hbWVGb3JUeXBlKCpwYXJhbWV0ZXIudHlwZSgpKSwgJyAnLCBwYXJhbWV0ZXJOYW1lKSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCIpIHtc
biIpOwotICAgICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGZ1bmN0aW9uRGVmaW5pdGlvbi5i
bG9jaygpKTsKLSAgICAgICAgICAgIEFTU0VSVChtX3N0YWNrLmlzRW1wdHkoKSk7Ci0gICAgICAg
ICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9XG4iKTsKLSAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gbWFrZVN0cmluZygidmFyaWFibGUiLCBtX3ZhcmlhYmxlQ291bnQrKyk7CiAgICAgfQog
Ci1wcml2YXRlOgotICAgIHZvaWQgdmlzaXQoQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uJikgb3Zl
cnJpZGUKLSAgICB7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KKyAgICBJ
bnRyaW5zaWNzJiBtX2ludHJpbnNpY3M7CisgICAgVHlwZU5hbWVyJiBtX3R5cGVOYW1lcjsKKyAg
ICBIYXNoTWFwPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiosIFN0cmluZz4mIG1fZnVuY3Rpb25N
YXBwaW5nOworICAgIEhhc2hNYXA8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uKiwgU3RyaW5nPiBt
X3ZhcmlhYmxlTWFwcGluZzsKKyAgICBTdHJpbmdCdWlsZGVyIG1fc3RyaW5nQnVpbGRlcjsKKyAg
ICBWZWN0b3I8U3RyaW5nPiBtX3N0YWNrOworICAgIHN0ZDo6dW5pcXVlX3B0cjxFbnRyeVBvaW50
U2NhZmZvbGRpbmc+IG1fZW50cnlQb2ludFNjYWZmb2xkaW5nOworICAgIExheW91dCYgbV9sYXlv
dXQ7CisgICAgdW5zaWduZWQgbV92YXJpYWJsZUNvdW50IHsgMCB9OworfTsKIAotICAgIHZvaWQg
dmlzaXQoQVNUOjpTdGF0ZW1lbnQmIHN0YXRlbWVudCkgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAg
IFZpc2l0b3I6OnZpc2l0KHN0YXRlbWVudCk7Ci0gICAgfQordm9pZCBGdW5jdGlvbkRlZmluaXRp
b25Xcml0ZXI6OnZpc2l0KEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYgbmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbikKK3sKKyAgICBhdXRvIGl0ZXJhdG9yID0gbV9mdW5jdGlvbk1hcHBp
bmcuZmluZCgmbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbik7CisgICAgQVNTRVJUKGl0ZXJhdG9y
ICE9IG1fZnVuY3Rpb25NYXBwaW5nLmVuZCgpKTsKKyAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5k
KHdyaXRlTmF0aXZlRnVuY3Rpb24obmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiwgaXRlcmF0b3It
PnZhbHVlLCBtX3R5cGVOYW1lcikpOworfQogCi0gICAgdm9pZCB2aXNpdChBU1Q6OkJsb2NrJiBi
bG9jaykgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIntc
biIpOwotICAgICAgICBmb3IgKGF1dG8mIHN0YXRlbWVudCA6IGJsb2NrLnN0YXRlbWVudHMoKSkK
LSAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChzdGF0ZW1lbnQpOwordm9pZCBGdW5jdGlv
bkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlv
bkRlZmluaXRpb24pCit7CisgICAgYXV0byBpdGVyYXRvciA9IG1fZnVuY3Rpb25NYXBwaW5nLmZp
bmQoJmZ1bmN0aW9uRGVmaW5pdGlvbik7CisgICAgQVNTRVJUKGl0ZXJhdG9yICE9IG1fZnVuY3Rp
b25NYXBwaW5nLmVuZCgpKTsKKyAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLmVudHJ5UG9pbnRU
eXBlKCkpIHsKKyAgICAgICAgYXV0byBlbnRyeVBvaW50U2NhZmZvbGRpbmcgPSBjcmVhdGVFbnRy
eVBvaW50U2NhZmZvbGRpbmcoZnVuY3Rpb25EZWZpbml0aW9uKTsKKyAgICAgICAgaWYgKCFlbnRy
eVBvaW50U2NhZmZvbGRpbmcpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fZW50cnlQ
b2ludFNjYWZmb2xkaW5nID0gV1RGTW92ZShlbnRyeVBvaW50U2NhZmZvbGRpbmcpOworICAgICAg
ICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1fZW50cnlQb2ludFNjYWZmb2xkaW5nLT5oZWxwZXJU
eXBlcygpKTsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKKyAgICAgICAg
bV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1fZW50cnlQb2ludFNjYWZmb2xkaW5n
LT5zaWduYXR1cmUoaXRlcmF0b3ItPnZhbHVlKSwgIiB7IikpOworICAgICAgICBtX3N0cmluZ0J1
aWxkZXIuYXBwZW5kKG1fZW50cnlQb2ludFNjYWZmb2xkaW5nLT51bnBhY2soKSk7CisgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKS5z
aXplKCk7ICsraSkgeworICAgICAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3ZhcmlhYmxlTWFw
cGluZy5hZGQoJmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbaV0sIG1fZW50cnlQb2lu
dFNjYWZmb2xkaW5nLT5wYXJhbWV0ZXJWYXJpYWJsZXMoKVtpXSk7CisgICAgICAgICAgICBBU1NF
UlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgICAgICB9Cisg
ICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChmdW5jdGlvbkRlZmluaXRpb24uYmxvY2soKSk7Cisg
ICAgICAgIEFTU0VSVChtX3N0YWNrLmlzRW1wdHkoKSk7CisgICAgICAgIG1fc3RyaW5nQnVpbGRl
ci5hcHBlbmQoIn1cbiIpOworICAgICAgICBtX2VudHJ5UG9pbnRTY2FmZm9sZGluZyA9IG51bGxw
dHI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKG1fZW50cnlQb2ludFNjYWZmb2xkaW5n
ID09IG51bGxwdHIpOworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmco
bV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKGZ1bmN0aW9uRGVmaW5pdGlvbi50eXBlKCkp
LCAnICcsIGl0ZXJhdG9yLT52YWx1ZSwgJygnKSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCk7ICsraSkgeworICAg
ICAgICAgICAgYXV0byYgcGFyYW1ldGVyID0gZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMo
KVtpXTsKKyAgICAgICAgICAgIGlmIChpKQorICAgICAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRl
ci5hcHBlbmQoIiwgIik7CisgICAgICAgICAgICBhdXRvIHBhcmFtZXRlck5hbWUgPSBnZW5lcmF0
ZU5leHRWYXJpYWJsZU5hbWUoKTsKKyAgICAgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV92YXJp
YWJsZU1hcHBpbmcuYWRkKCZwYXJhbWV0ZXIsIHBhcmFtZXRlck5hbWUpOworICAgICAgICAgICAg
QVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICAgICAg
ICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtX3R5cGVOYW1lci5tYW5nbGVk
TmFtZUZvclR5cGUoKnBhcmFtZXRlci50eXBlKCkpLCAnICcsIHBhcmFtZXRlck5hbWUpKTsKKyAg
ICAgICAgfQorICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCIpIHtcbiIpOworICAgICAg
ICBjaGVja0Vycm9yQW5kVmlzaXQoZnVuY3Rpb25EZWZpbml0aW9uLmJsb2NrKCkpOworICAgICAg
ICBBU1NFUlQobV9zdGFjay5pc0VtcHR5KCkpOwogICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBw
ZW5kKCJ9XG4iKTsKICAgICB9Cit9CiAKLSAgICB2b2lkIHZpc2l0KEFTVDo6QnJlYWsmKSBvdmVy
cmlkZQotICAgIHsKLSAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiYnJlYWs7XG4iKTsK
LSAgICB9Cit2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpGdW5jdGlv
bkRlY2xhcmF0aW9uJikKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KIAotICAgIHZv
aWQgdmlzaXQoQVNUOjpDb250aW51ZSYpIG92ZXJyaWRlCi0gICAgewotICAgICAgICAvLyBGSVhN
RTogRmlndXJlIG91dCB3aGljaCBsb29wIHdlJ3JlIGluLCBhbmQgcnVuIHRoZSBpbmNyZW1lbnQg
Y29kZQotICAgICAgICBDUkFTSCgpOwotICAgIH0KK3ZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3Jp
dGVyOjp2aXNpdChBU1Q6OlN0YXRlbWVudCYgc3RhdGVtZW50KQoreworICAgIFZpc2l0b3I6OnZp
c2l0KHN0YXRlbWVudCk7Cit9CiAKLSAgICB2b2lkIHZpc2l0KEFTVDo6RG9XaGlsZUxvb3AmIGRv
V2hpbGVMb29wKSBvdmVycmlkZQotICAgIHsKLSAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVu
ZCgiZG8ge1xuIik7Ci0gICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb1doaWxlTG9vcC5ib2R5
KCkpOwotICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG9XaGlsZUxvb3AuY29uZGl0aW9uYWwo
KSk7Ci0gICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiaWYgKCEiLCBt
X3N0YWNrLnRha2VMYXN0KCksICIpIGJyZWFrO1xuIikpOwotICAgICAgICBtX3N0cmluZ0J1aWxk
ZXIuYXBwZW5kKG1ha2VTdHJpbmcoIn0gd2hpbGUodHJ1ZSk7XG4iKSk7Ci0gICAgfQordm9pZCBG
dW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6QmxvY2smIGJsb2NrKQoreworICAg
IG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIntcbiIpOworICAgIGZvciAoYXV0byYgc3RhdGVtZW50
IDogYmxvY2suc3RhdGVtZW50cygpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoc3RhdGVt
ZW50KTsKKyAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9XG4iKTsKK30KIAotICAgIHZvaWQg
dmlzaXQoQVNUOjpFZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50JiBlZmZlY3RmdWxFeHByZXNz
aW9uU3RhdGVtZW50KSBvdmVycmlkZQotICAgIHsKLSAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0
KGVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQuZWZmZWN0ZnVsRXhwcmVzc2lvbigpKTsKLSAg
ICAgICAgbV9zdGFjay50YWtlTGFzdCgpOyAvLyBUaGUgc3RhdGVtZW50IGlzIGFscmVhZHkgZWZm
ZWN0ZnVsLCBzbyB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIHdpdGggdGhlIHJlc3VsdC4K
LSAgICB9Cit2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpCcmVhayYp
Cit7CisgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiYnJlYWs7XG4iKTsKK30KIAotICAgIHZv
aWQgdmlzaXQoQVNUOjpGYWxsdGhyb3VnaCYpIG92ZXJyaWRlCi0gICAgewotICAgICAgICBtX3N0
cmluZ0J1aWxkZXIuYXBwZW5kKCJbW2NsYW5nOjpmYWxsdGhyb3VnaF1dO1xuIik7IC8vIEZJWE1F
OiBNYWtlIHN1cmUgdGhpcyBpcyBva2F5LiBBbHRlcm5hdGl2ZWx5LCB3ZSBjb3VsZCBkbyBub3Ro
aW5nIGFuZCBqdXN0IHJldHVybiBoZXJlIGluc3RlYWQuCi0gICAgfQordm9pZCBGdW5jdGlvbkRl
ZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6Q29udGludWUmKQoreworICAgIC8vIEZJWE1FOiBG
aWd1cmUgb3V0IHdoaWNoIGxvb3Agd2UncmUgaW4sIGFuZCBydW4gdGhlIGluY3JlbWVudCBjb2Rl
CisgICAgQ1JBU0goKTsKK30KIAotICAgIHZvaWQgdmlzaXQoQVNUOjpGb3JMb29wJiBmb3JMb29w
KSBvdmVycmlkZQotICAgIHsKLSAgICAgICAgV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsm
XShBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50JiB2YXJpYWJsZURlY2xhcmF0aW9u
c1N0YXRlbWVudCkgewotICAgICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHZhcmlhYmxlRGVj
bGFyYXRpb25zU3RhdGVtZW50KTsKLSAgICAgICAgfSwgWyZdKFVuaXF1ZVJlZjxBU1Q6OkV4cHJl
c3Npb24+JiBleHByZXNzaW9uKSB7Ci0gICAgICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZXhw
cmVzc2lvbik7Ci0gICAgICAgICAgICBtX3N0YWNrLnRha2VMYXN0KCk7IC8vIFdlIGRvbid0IG5l
ZWQgdG8gZG8gYW55dGhpbmcgd2l0aCB0aGUgcmVzdWx0LgotICAgICAgICB9KSwgZm9yTG9vcC5p
bml0aWFsaXphdGlvbigpKTsKLQotICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJmb3Ig
KCA7IDsgKSB7XG4iKTsKLSAgICAgICAgaWYgKGZvckxvb3AuY29uZGl0aW9uKCkpIHsKLSAgICAg
ICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqZm9yTG9vcC5jb25kaXRpb24oKSk7Ci0gICAgICAg
ICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoImlmICghIiwgbV9zdGFjay50
YWtlTGFzdCgpLCAiKSBicmVhaztcbiIpKTsKLSAgICAgICAgfQotICAgICAgICBjaGVja0Vycm9y
QW5kVmlzaXQoZm9yTG9vcC5ib2R5KCkpOwotICAgICAgICBpZiAoZm9yTG9vcC5pbmNyZW1lbnQo
KSkgewotICAgICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCpmb3JMb29wLmluY3JlbWVudCgp
KTsKLSAgICAgICAgICAgIG1fc3RhY2sudGFrZUxhc3QoKTsKLSAgICAgICAgfQotICAgICAgICBt
X3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9XG4iKTsKK3ZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3Jp
dGVyOjp2aXNpdChBU1Q6OkRvV2hpbGVMb29wJiBkb1doaWxlTG9vcCkKK3sKKyAgICBtX3N0cmlu
Z0J1aWxkZXIuYXBwZW5kKCJkbyB7XG4iKTsKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG9XaGls
ZUxvb3AuYm9keSgpKTsKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG9XaGlsZUxvb3AuY29uZGl0
aW9uYWwoKSk7CisgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJpZiAoISIs
IG1fc3RhY2sudGFrZUxhc3QoKSwgIikgYnJlYWs7XG4iKSk7CisgICAgbV9zdHJpbmdCdWlsZGVy
LmFwcGVuZChtYWtlU3RyaW5nKCJ9IHdoaWxlKHRydWUpO1xuIikpOworfQorCit2b2lkIEZ1bmN0
aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpFZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVt
ZW50JiBlZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50KQoreworICAgIGNoZWNrRXJyb3JBbmRW
aXNpdChlZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50LmVmZmVjdGZ1bEV4cHJlc3Npb24oKSk7
CisgICAgbV9zdGFjay50YWtlTGFzdCgpOyAvLyBUaGUgc3RhdGVtZW50IGlzIGFscmVhZHkgZWZm
ZWN0ZnVsLCBzbyB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIHdpdGggdGhlIHJlc3VsdC4K
K30KKwordm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6RmFsbHRocm91
Z2gmKQoreworICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIltbY2xhbmc6OmZhbGx0aHJvdWdo
XV07XG4iKTsgLy8gRklYTUU6IE1ha2Ugc3VyZSB0aGlzIGlzIG9rYXkuIEFsdGVybmF0aXZlbHks
IHdlIGNvdWxkIGRvIG5vdGhpbmcgYW5kIGp1c3QgcmV0dXJuIGhlcmUgaW5zdGVhZC4KK30KKwor
dm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6Rm9yTG9vcCYgZm9yTG9v
cCkKK3sKKyAgICBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6VmFyaWFibGVE
ZWNsYXJhdGlvbnNTdGF0ZW1lbnQmIHZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50KSB7Cisg
ICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh2YXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCk7
CisgICAgfSwgWyZdKFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+JiBleHByZXNzaW9uKSB7Cisg
ICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChleHByZXNzaW9uKTsKKyAgICAgICAgbV9zdGFjay50
YWtlTGFzdCgpOyAvLyBXZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIHdpdGggdGhlIHJlc3Vs
dC4KKyAgICB9KSwgZm9yTG9vcC5pbml0aWFsaXphdGlvbigpKTsKKworICAgIG1fc3RyaW5nQnVp
bGRlci5hcHBlbmQoImZvciAoIDsgOyApIHtcbiIpOworICAgIGlmIChmb3JMb29wLmNvbmRpdGlv
bigpKSB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqZm9yTG9vcC5jb25kaXRpb24oKSk7
CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiaWYgKCEiLCBtX3N0
YWNrLnRha2VMYXN0KCksICIpIGJyZWFrO1xuIikpOwogICAgIH0KKyAgICBjaGVja0Vycm9yQW5k
VmlzaXQoZm9yTG9vcC5ib2R5KCkpOworICAgIGlmIChmb3JMb29wLmluY3JlbWVudCgpKSB7Cisg
ICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqZm9yTG9vcC5pbmNyZW1lbnQoKSk7CisgICAgICAg
IG1fc3RhY2sudGFrZUxhc3QoKTsKKyAgICB9CisgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgi
fVxuIik7Cit9CiAKLSAgICB2b2lkIHZpc2l0KEFTVDo6SWZTdGF0ZW1lbnQmIGlmU3RhdGVtZW50
KSBvdmVycmlkZQotICAgIHsKLSAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGlmU3RhdGVtZW50
LmNvbmRpdGlvbmFsKCkpOwotICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJp
bmcoImlmICgiLCBtX3N0YWNrLnRha2VMYXN0KCksICIpIHtcbiIpKTsKLSAgICAgICAgY2hlY2tF
cnJvckFuZFZpc2l0KGlmU3RhdGVtZW50LmJvZHkoKSk7Ci0gICAgICAgIGlmIChpZlN0YXRlbWVu
dC5lbHNlQm9keSgpKSB7Ci0gICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9IGVs
c2Uge1xuIik7Ci0gICAgICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKmlmU3RhdGVtZW50LmVs
c2VCb2R5KCkpOwotICAgICAgICB9Ci0gICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIn1c
biIpOwordm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6SWZTdGF0ZW1l
bnQmIGlmU3RhdGVtZW50KQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChpZlN0YXRlbWVudC5j
b25kaXRpb25hbCgpKTsKKyAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoImlm
ICgiLCBtX3N0YWNrLnRha2VMYXN0KCksICIpIHtcbiIpKTsKKyAgICBjaGVja0Vycm9yQW5kVmlz
aXQoaWZTdGF0ZW1lbnQuYm9keSgpKTsKKyAgICBpZiAoaWZTdGF0ZW1lbnQuZWxzZUJvZHkoKSkg
eworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9IGVsc2Uge1xuIik7CisgICAgICAg
IGNoZWNrRXJyb3JBbmRWaXNpdCgqaWZTdGF0ZW1lbnQuZWxzZUJvZHkoKSk7CiAgICAgfQorICAg
IG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIn1cbiIpOworfQogCi0gICAgdm9pZCB2aXNpdChBU1Q6
OlJldHVybiYgcmV0dXJuU3RhdGVtZW50KSBvdmVycmlkZQotICAgIHsKLSAgICAgICAgaWYgKHJl
dHVyblN0YXRlbWVudC52YWx1ZSgpKSB7Ci0gICAgICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQo
KnJldHVyblN0YXRlbWVudC52YWx1ZSgpKTsKLSAgICAgICAgICAgIGlmIChtX2VudHJ5UG9pbnRT
Y2FmZm9sZGluZykgewotICAgICAgICAgICAgICAgIGF1dG8gdmFyaWFibGVOYW1lID0gZ2VuZXJh
dGVOZXh0VmFyaWFibGVOYW1lKCk7Ci0gICAgICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFw
cGVuZChtX2VudHJ5UG9pbnRTY2FmZm9sZGluZy0+cGFjayhtX3N0YWNrLnRha2VMYXN0KCksIHZh
cmlhYmxlTmFtZSkpOwotICAgICAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFr
ZVN0cmluZygicmV0dXJuICIsIHZhcmlhYmxlTmFtZSwgIjtcbiIpKTsKLSAgICAgICAgICAgIH0g
ZWxzZQotICAgICAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygi
cmV0dXJuICIsIG1fc3RhY2sudGFrZUxhc3QoKSwgIjtcbiIpKTsKK3ZvaWQgRnVuY3Rpb25EZWZp
bml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OlJldHVybiYgcmV0dXJuU3RhdGVtZW50KQoreworICAg
IGlmIChyZXR1cm5TdGF0ZW1lbnQudmFsdWUoKSkgeworICAgICAgICBjaGVja0Vycm9yQW5kVmlz
aXQoKnJldHVyblN0YXRlbWVudC52YWx1ZSgpKTsKKyAgICAgICAgaWYgKG1fZW50cnlQb2ludFNj
YWZmb2xkaW5nKSB7CisgICAgICAgICAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4
dFZhcmlhYmxlTmFtZSgpOworICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtX2Vu
dHJ5UG9pbnRTY2FmZm9sZGluZy0+cGFjayhtX3N0YWNrLnRha2VMYXN0KCksIHZhcmlhYmxlTmFt
ZSkpOworICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJyZXR1
cm4gIiwgdmFyaWFibGVOYW1lLCAiO1xuIikpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
IG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoInJldHVybjtcbiIpOwotICAgIH0KKyAgICAgICAgICAg
IG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygicmV0dXJuICIsIG1fc3RhY2sudGFr
ZUxhc3QoKSwgIjtcbiIpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFw
cGVuZCgicmV0dXJuO1xuIik7Cit9CiAKLSAgICB2b2lkIHZpc2l0KEFTVDo6U3dpdGNoU3RhdGVt
ZW50JiBzd2l0Y2hTdGF0ZW1lbnQpIG92ZXJyaWRlCi0gICAgewotICAgICAgICBjaGVja0Vycm9y
QW5kVmlzaXQoc3dpdGNoU3RhdGVtZW50LnZhbHVlKCkpOwordm9pZCBGdW5jdGlvbkRlZmluaXRp
b25Xcml0ZXI6OnZpc2l0KEFTVDo6U3dpdGNoU3RhdGVtZW50JiBzd2l0Y2hTdGF0ZW1lbnQpCit7
CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHN3aXRjaFN0YXRlbWVudC52YWx1ZSgpKTsKIAotICAg
ICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoInN3aXRjaCAoIiwgbV9zdGFj
ay50YWtlTGFzdCgpLCAiKSB7IikpOwotICAgICAgICBmb3IgKGF1dG8mIHN3aXRjaENhc2UgOiBz
d2l0Y2hTdGF0ZW1lbnQuc3dpdGNoQ2FzZXMoKSkKLSAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRW
aXNpdChzd2l0Y2hDYXNlKTsKLSAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgifVxuIik7
Ci0gICAgfQorICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygic3dpdGNoICgi
LCBtX3N0YWNrLnRha2VMYXN0KCksICIpIHsiKSk7CisgICAgZm9yIChhdXRvJiBzd2l0Y2hDYXNl
IDogc3dpdGNoU3RhdGVtZW50LnN3aXRjaENhc2VzKCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRW
aXNpdChzd2l0Y2hDYXNlKTsKKyAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9XG4iKTsKK30K
IAotICAgIHZvaWQgdmlzaXQoQVNUOjpTd2l0Y2hDYXNlJiBzd2l0Y2hDYXNlKSBvdmVycmlkZQot
ICAgIHsKLSAgICAgICAgaWYgKHN3aXRjaENhc2UudmFsdWUoKSkKLSAgICAgICAgICAgIG1fc3Ry
aW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiY2FzZSAiLCBjb25zdGFudEV4cHJlc3Npb25T
dHJpbmcoKnN3aXRjaENhc2UudmFsdWUoKSksICI6XG4iKSk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoImRlZmF1bHQ6XG4iKTsKLSAgICAgICAgY2hl
Y2tFcnJvckFuZFZpc2l0KHN3aXRjaENhc2UuYmxvY2soKSk7Ci0gICAgICAgIC8vIEZJWE1FOiBG
aWd1cmUgb3V0IHdoZXRoZXIgd2UgbmVlZCB0byBicmVhayBvciBmYWxsdGhyb3VnaC4KLSAgICAg
ICAgQ1JBU0goKTsKLSAgICB9Cit2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQo
QVNUOjpTd2l0Y2hDYXNlJiBzd2l0Y2hDYXNlKQoreworICAgIGlmIChzd2l0Y2hDYXNlLnZhbHVl
KCkpCisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiY2FzZSAiLCBj
b25zdGFudEV4cHJlc3Npb25TdHJpbmcoKnN3aXRjaENhc2UudmFsdWUoKSksICI6XG4iKSk7Cisg
ICAgZWxzZQorICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJkZWZhdWx0OlxuIik7Cisg
ICAgY2hlY2tFcnJvckFuZFZpc2l0KHN3aXRjaENhc2UuYmxvY2soKSk7CisgICAgLy8gRklYTUU6
IEZpZ3VyZSBvdXQgd2hldGhlciB3ZSBuZWVkIHRvIGJyZWFrIG9yIGZhbGx0aHJvdWdoLgorICAg
IENSQVNIKCk7Cit9CiAKLSAgICB2b2lkIHZpc2l0KEFTVDo6VHJhcCYpIG92ZXJyaWRlCi0gICAg
ewotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMKLSAgICAgICAgQ1JBU0goKTsKLSAg
ICB9Cit2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpUcmFwJikKK3sK
KyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMKKyAgICBDUkFTSCgpOworfQogCi0gICAgdm9p
ZCB2aXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50JiB2YXJpYWJsZURlY2xh
cmF0aW9uc1N0YXRlbWVudCkgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIFZpc2l0b3I6OnZpc2l0
KHZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50KTsKLSAgICB9Cit2b2lkIEZ1bmN0aW9uRGVm
aW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCYg
dmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQpCit7CisgICAgVmlzaXRvcjo6dmlzaXQodmFy
aWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQpOworfQogCi0gICAgdm9pZCB2aXNpdChBU1Q6Oldo
aWxlTG9vcCYgd2hpbGVMb29wKSBvdmVycmlkZQotICAgIHsKLSAgICAgICAgbV9zdHJpbmdCdWls
ZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJ3aGlsZSAodHJ1ZSkge1xuIikpOwotICAgICAgICBjaGVj
a0Vycm9yQW5kVmlzaXQod2hpbGVMb29wLmNvbmRpdGlvbmFsKCkpOwotICAgICAgICBtX3N0cmlu
Z0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoImlmICghIiwgbV9zdGFjay50YWtlTGFzdCgpLCAi
KSBicmVhaztcbiIpKTsKLSAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHdoaWxlTG9vcC5ib2R5
KCkpOwotICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9XG4iKTsKLSAgICB9Cit2b2lk
IEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpXaGlsZUxvb3AmIHdoaWxlTG9v
cCkKK3sKKyAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIndoaWxlICh0cnVl
KSB7XG4iKSk7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHdoaWxlTG9vcC5jb25kaXRpb25hbCgp
KTsKKyAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoImlmICghIiwgbV9zdGFj
ay50YWtlTGFzdCgpLCAiKSBicmVhaztcbiIpKTsKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQod2hp
bGVMb29wLmJvZHkoKSk7CisgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgifVxuIik7Cit9CiAK
LSAgICB2b2lkIHZpc2l0KEFTVDo6SW50ZWdlckxpdGVyYWwmIGludGVnZXJMaXRlcmFsKSBvdmVy
cmlkZQotICAgIHsKLSAgICAgICAgQVNTRVJUKGludGVnZXJMaXRlcmFsLnJlc29sdmVkVHlwZSgp
KTsKLSAgICAgICAgYXV0byB2YXJpYWJsZU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUo
KTsKLSAgICAgICAgYXV0byBtYW5nbGVkVHlwZU5hbWUgPSBtX3R5cGVOYW1lci5tYW5nbGVkTmFt
ZUZvclR5cGUoKmludGVnZXJMaXRlcmFsLnJlc29sdmVkVHlwZSgpKTsKLSAgICAgICAgbV9zdHJp
bmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1hbmdsZWRUeXBlTmFtZSwgJyAnLCB2YXJpYWJs
ZU5hbWUsICIgPSBzdGF0aWNfY2FzdDwiLCBtYW5nbGVkVHlwZU5hbWUsICI+KCIsIGludGVnZXJM
aXRlcmFsLnZhbHVlKCksICIpO1xuIikpOwotICAgICAgICBtX3N0YWNrLmFwcGVuZCh2YXJpYWJs
ZU5hbWUpOwotICAgIH0KK3ZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6
OkludGVnZXJMaXRlcmFsJiBpbnRlZ2VyTGl0ZXJhbCkKK3sKKyAgICBBU1NFUlQoaW50ZWdlckxp
dGVyYWwucmVzb2x2ZWRUeXBlKCkpOworICAgIGF1dG8gdmFyaWFibGVOYW1lID0gZ2VuZXJhdGVO
ZXh0VmFyaWFibGVOYW1lKCk7CisgICAgYXV0byBtYW5nbGVkVHlwZU5hbWUgPSBtX3R5cGVOYW1l
ci5tYW5nbGVkTmFtZUZvclR5cGUoKmludGVnZXJMaXRlcmFsLnJlc29sdmVkVHlwZSgpKTsKKyAg
ICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWFuZ2xlZFR5cGVOYW1lLCAnICcs
IHZhcmlhYmxlTmFtZSwgIiA9IHN0YXRpY19jYXN0PCIsIG1hbmdsZWRUeXBlTmFtZSwgIj4oIiwg
aW50ZWdlckxpdGVyYWwudmFsdWUoKSwgIik7XG4iKSk7CisgICAgbV9zdGFjay5hcHBlbmQodmFy
aWFibGVOYW1lKTsKK30KIAotICAgIHZvaWQgdmlzaXQoQVNUOjpVbnNpZ25lZEludGVnZXJMaXRl
cmFsJiB1bnNpZ25lZEludGVnZXJMaXRlcmFsKSBvdmVycmlkZQotICAgIHsKLSAgICAgICAgQVNT
RVJUKHVuc2lnbmVkSW50ZWdlckxpdGVyYWwucmVzb2x2ZWRUeXBlKCkpOwotICAgICAgICBhdXRv
IHZhcmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOwotICAgICAgICBhdXRv
IG1hbmdsZWRUeXBlTmFtZSA9IG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqdW5zaWdu
ZWRJbnRlZ2VyTGl0ZXJhbC5yZXNvbHZlZFR5cGUoKSk7Ci0gICAgICAgIG1fc3RyaW5nQnVpbGRl
ci5hcHBlbmQobWFrZVN0cmluZyhtYW5nbGVkVHlwZU5hbWUsICcgJywgdmFyaWFibGVOYW1lLCAi
ID0gc3RhdGljX2Nhc3Q8IiwgbWFuZ2xlZFR5cGVOYW1lLCAiPigiLCB1bnNpZ25lZEludGVnZXJM
aXRlcmFsLnZhbHVlKCksICIpO1xuIikpOwotICAgICAgICBtX3N0YWNrLmFwcGVuZCh2YXJpYWJs
ZU5hbWUpOwotICAgIH0KK3ZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6
OlVuc2lnbmVkSW50ZWdlckxpdGVyYWwmIHVuc2lnbmVkSW50ZWdlckxpdGVyYWwpCit7CisgICAg
QVNTRVJUKHVuc2lnbmVkSW50ZWdlckxpdGVyYWwucmVzb2x2ZWRUeXBlKCkpOworICAgIGF1dG8g
dmFyaWFibGVOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7CisgICAgYXV0byBtYW5n
bGVkVHlwZU5hbWUgPSBtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKnVuc2lnbmVkSW50
ZWdlckxpdGVyYWwucmVzb2x2ZWRUeXBlKCkpOworICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQo
bWFrZVN0cmluZyhtYW5nbGVkVHlwZU5hbWUsICcgJywgdmFyaWFibGVOYW1lLCAiID0gc3RhdGlj
X2Nhc3Q8IiwgbWFuZ2xlZFR5cGVOYW1lLCAiPigiLCB1bnNpZ25lZEludGVnZXJMaXRlcmFsLnZh
bHVlKCksICIpO1xuIikpOworICAgIG1fc3RhY2suYXBwZW5kKHZhcmlhYmxlTmFtZSk7Cit9CiAK
LSAgICB2b2lkIHZpc2l0KEFTVDo6RmxvYXRMaXRlcmFsJiBmbG9hdExpdGVyYWwpIG92ZXJyaWRl
Ci0gICAgewotICAgICAgICBBU1NFUlQoZmxvYXRMaXRlcmFsLnJlc29sdmVkVHlwZSgpKTsKLSAg
ICAgICAgYXV0byB2YXJpYWJsZU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKLSAg
ICAgICAgYXV0byBtYW5nbGVkVHlwZU5hbWUgPSBtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5
cGUoKmZsb2F0TGl0ZXJhbC5yZXNvbHZlZFR5cGUoKSk7Ci0gICAgICAgIG1fc3RyaW5nQnVpbGRl
ci5hcHBlbmQobWFrZVN0cmluZyhtYW5nbGVkVHlwZU5hbWUsICcgJywgdmFyaWFibGVOYW1lLCAi
ID0gc3RhdGljX2Nhc3Q8IiwgbWFuZ2xlZFR5cGVOYW1lLCAiPigiLCBmbG9hdExpdGVyYWwudmFs
dWUoKSwgIik7XG4iKSk7Ci0gICAgICAgIG1fc3RhY2suYXBwZW5kKHZhcmlhYmxlTmFtZSk7Ci0g
ICAgfQordm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6RmxvYXRMaXRl
cmFsJiBmbG9hdExpdGVyYWwpCit7CisgICAgQVNTRVJUKGZsb2F0TGl0ZXJhbC5yZXNvbHZlZFR5
cGUoKSk7CisgICAgYXV0byB2YXJpYWJsZU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUo
KTsKKyAgICBhdXRvIG1hbmdsZWRUeXBlTmFtZSA9IG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9y
VHlwZSgqZmxvYXRMaXRlcmFsLnJlc29sdmVkVHlwZSgpKTsKKyAgICBtX3N0cmluZ0J1aWxkZXIu
YXBwZW5kKG1ha2VTdHJpbmcobWFuZ2xlZFR5cGVOYW1lLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9
IHN0YXRpY19jYXN0PCIsIG1hbmdsZWRUeXBlTmFtZSwgIj4oIiwgZmxvYXRMaXRlcmFsLnZhbHVl
KCksICIpO1xuIikpOworICAgIG1fc3RhY2suYXBwZW5kKHZhcmlhYmxlTmFtZSk7Cit9CiAKLSAg
ICB2b2lkIHZpc2l0KEFTVDo6TnVsbExpdGVyYWwmIG51bGxMaXRlcmFsKSBvdmVycmlkZQotICAg
IHsKLSAgICAgICAgQVNTRVJUKG51bGxMaXRlcmFsLnJlc29sdmVkVHlwZSgpKTsKLSAgICAgICAg
YXV0byYgdW5pZnlOb2RlID0gbnVsbExpdGVyYWwucmVzb2x2ZWRUeXBlKCktPnVuaWZ5Tm9kZSgp
OwotICAgICAgICBBU1NFUlQoaXM8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlOb2RlKSk7Ci0gICAg
ICAgIGF1dG8mIHVubmFtZWRUeXBlID0gZG93bmNhc3Q8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlO
b2RlKTsKLSAgICAgICAgYm9vbCBpc0FycmF5UmVmZXJlbmNlVHlwZSA9IGlzPEFTVDo6QXJyYXlS
ZWZlcmVuY2VUeXBlPih1bm5hbWVkVHlwZSk7Ci0KLSAgICAgICAgYXV0byB2YXJpYWJsZU5hbWUg
PSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKLSAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFw
cGVuZChtYWtlU3RyaW5nKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbnVsbExpdGVy
YWwucmVzb2x2ZWRUeXBlKCkpLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9ICIpKTsKLSAgICAgICAg
aWYgKGlzQXJyYXlSZWZlcmVuY2VUeXBlKQotICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFw
cGVuZCgieyBudWxscHRyLCAwIH0iKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9zdHJp
bmdCdWlsZGVyLmFwcGVuZCgibnVsbHB0ciIpOwotICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBw
ZW5kKCI7XG4iKTsKLSAgICAgICAgbV9zdGFjay5hcHBlbmQodmFyaWFibGVOYW1lKTsKLSAgICB9
Cit2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpOdWxsTGl0ZXJhbCYg
bnVsbExpdGVyYWwpCit7CisgICAgQVNTRVJUKG51bGxMaXRlcmFsLnJlc29sdmVkVHlwZSgpKTsK
KyAgICBhdXRvJiB1bmlmeU5vZGUgPSBudWxsTGl0ZXJhbC5yZXNvbHZlZFR5cGUoKS0+dW5pZnlO
b2RlKCk7CisgICAgQVNTRVJUKGlzPEFTVDo6VW5uYW1lZFR5cGU+KHVuaWZ5Tm9kZSkpOworICAg
IGF1dG8mIHVubmFtZWRUeXBlID0gZG93bmNhc3Q8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlOb2Rl
KTsKKyAgICBib29sIGlzQXJyYXlSZWZlcmVuY2VUeXBlID0gaXM8QVNUOjpBcnJheVJlZmVyZW5j
ZVR5cGU+KHVubmFtZWRUeXBlKTsKKworICAgIGF1dG8gdmFyaWFibGVOYW1lID0gZ2VuZXJhdGVO
ZXh0VmFyaWFibGVOYW1lKCk7CisgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5n
KG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbnVsbExpdGVyYWwucmVzb2x2ZWRUeXBl
KCkpLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9ICIpKTsKKyAgICBpZiAoaXNBcnJheVJlZmVyZW5j
ZVR5cGUpCisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoInsgbnVsbHB0ciwgMCB9Iik7
CisgICAgZWxzZQorICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJudWxscHRyIik7Cisg
ICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiO1xuIik7CisgICAgbV9zdGFjay5hcHBlbmQodmFy
aWFibGVOYW1lKTsKK30KIAotICAgIHZvaWQgdmlzaXQoQVNUOjpCb29sZWFuTGl0ZXJhbCYgYm9v
bGVhbkxpdGVyYWwpIG92ZXJyaWRlCi0gICAgewotICAgICAgICBBU1NFUlQoYm9vbGVhbkxpdGVy
YWwucmVzb2x2ZWRUeXBlKCkpOwotICAgICAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdlbmVyYXRl
TmV4dFZhcmlhYmxlTmFtZSgpOwotICAgICAgICBhdXRvIG1hbmdsZWRUeXBlTmFtZSA9IG1fdHlw
ZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqYm9vbGVhbkxpdGVyYWwucmVzb2x2ZWRUeXBlKCkp
OwotICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWFuZ2xlZFR5cGVO
YW1lLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9IHN0YXRpY19jYXN0PCIsIG1hbmdsZWRUeXBlTmFt
ZSwgIj4oIiwgYm9vbGVhbkxpdGVyYWwudmFsdWUoKSA/ICJ0cnVlIiA6ICJmYWxzZSIsICIpO1xu
IikpOwotICAgICAgICBtX3N0YWNrLmFwcGVuZCh2YXJpYWJsZU5hbWUpOwotICAgIH0KK3ZvaWQg
RnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OkJvb2xlYW5MaXRlcmFsJiBib29s
ZWFuTGl0ZXJhbCkKK3sKKyAgICBBU1NFUlQoYm9vbGVhbkxpdGVyYWwucmVzb2x2ZWRUeXBlKCkp
OworICAgIGF1dG8gdmFyaWFibGVOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7Cisg
ICAgYXV0byBtYW5nbGVkVHlwZU5hbWUgPSBtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUo
KmJvb2xlYW5MaXRlcmFsLnJlc29sdmVkVHlwZSgpKTsKKyAgICBtX3N0cmluZ0J1aWxkZXIuYXBw
ZW5kKG1ha2VTdHJpbmcobWFuZ2xlZFR5cGVOYW1lLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9IHN0
YXRpY19jYXN0PCIsIG1hbmdsZWRUeXBlTmFtZSwgIj4oIiwgYm9vbGVhbkxpdGVyYWwudmFsdWUo
KSA/ICJ0cnVlIiA6ICJmYWxzZSIsICIpO1xuIikpOworICAgIG1fc3RhY2suYXBwZW5kKHZhcmlh
YmxlTmFtZSk7Cit9CiAKLSAgICB2b2lkIHZpc2l0KEFTVDo6RW51bWVyYXRpb25NZW1iZXJMaXRl
cmFsJiBlbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwpIG92ZXJyaWRlCi0gICAgewotICAgICAgICBB
U1NFUlQoZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLnJlc29sdmVkVHlwZSgpKTsKLSAgICAgICAg
QVNTRVJUKGVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5lbnVtZXJhdGlvbkRlZmluaXRpb24oKSk7
Ci0gICAgICAgIEFTU0VSVChlbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuZW51bWVyYXRpb25EZWZp
bml0aW9uKCkpOwotICAgICAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlh
YmxlTmFtZSgpOwotICAgICAgICBhdXRvIG1hbmdsZWRUeXBlTmFtZSA9IG1fdHlwZU5hbWVyLm1h
bmdsZWROYW1lRm9yVHlwZSgqZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLnJlc29sdmVkVHlwZSgp
KTsKLSAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1hbmdsZWRUeXBl
TmFtZSwgJyAnLCB2YXJpYWJsZU5hbWUsICIgPSAiLCBtYW5nbGVkVHlwZU5hbWUsICcuJywgbV90
eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JFbnVtZXJhdGlvbk1lbWJlcigqZW51bWVyYXRpb25NZW1i
ZXJMaXRlcmFsLmVudW1lcmF0aW9uTWVtYmVyKCkpLCAiO1xuIikpOwotICAgICAgICBtX3N0YWNr
LmFwcGVuZCh2YXJpYWJsZU5hbWUpOwotICAgIH0KK3ZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3Jp
dGVyOjp2aXNpdChBU1Q6OkVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCYgZW51bWVyYXRpb25NZW1i
ZXJMaXRlcmFsKQoreworICAgIEFTU0VSVChlbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwucmVzb2x2
ZWRUeXBlKCkpOworICAgIEFTU0VSVChlbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuZW51bWVyYXRp
b25EZWZpbml0aW9uKCkpOworICAgIEFTU0VSVChlbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuZW51
bWVyYXRpb25EZWZpbml0aW9uKCkpOworICAgIGF1dG8gdmFyaWFibGVOYW1lID0gZ2VuZXJhdGVO
ZXh0VmFyaWFibGVOYW1lKCk7CisgICAgYXV0byBtYW5nbGVkVHlwZU5hbWUgPSBtX3R5cGVOYW1l
ci5tYW5nbGVkTmFtZUZvclR5cGUoKmVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5yZXNvbHZlZFR5
cGUoKSk7CisgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1hbmdsZWRUeXBl
TmFtZSwgJyAnLCB2YXJpYWJsZU5hbWUsICIgPSAiLCBtYW5nbGVkVHlwZU5hbWUsICcuJywgbV90
eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JFbnVtZXJhdGlvbk1lbWJlcigqZW51bWVyYXRpb25NZW1i
ZXJMaXRlcmFsLmVudW1lcmF0aW9uTWVtYmVyKCkpLCAiO1xuIikpOworICAgIG1fc3RhY2suYXBw
ZW5kKHZhcmlhYmxlTmFtZSk7Cit9CiAKLSAgICB2b2lkIHZpc2l0KEFTVDo6RXhwcmVzc2lvbiYg
ZXhwcmVzc2lvbikgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIFZpc2l0b3I6OnZpc2l0KGV4cHJl
c3Npb24pOwotICAgIH0KK3ZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6
OkV4cHJlc3Npb24mIGV4cHJlc3Npb24pCit7CisgICAgVmlzaXRvcjo6dmlzaXQoZXhwcmVzc2lv
bik7Cit9CiAKLSAgICB2b2lkIHZpc2l0KEFTVDo6RG90RXhwcmVzc2lvbiYpIG92ZXJyaWRlCi0g
ICAgewotICAgICAgICAvLyBUaGlzIHNob3VsZCBiZSBsb3dlcmVkIGFscmVhZHkuCi0gICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KK3ZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3Jp
dGVyOjp2aXNpdChBU1Q6OkRvdEV4cHJlc3Npb24mKQoreworICAgIC8vIFRoaXMgc2hvdWxkIGJl
IGxvd2VyZWQgYWxyZWFkeS4KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KIAotICAgIHZv
aWQgdmlzaXQoQVNUOjpJbmRleEV4cHJlc3Npb24mKSBvdmVycmlkZQotICAgIHsKLSAgICAgICAg
Ly8gVGhpcyBzaG91bGQgYmUgbG93ZXJlZCBhbHJlYWR5LgotICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICB9Cit2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNU
OjpJbmRleEV4cHJlc3Npb24mKQoreworICAgIC8vIFRoaXMgc2hvdWxkIGJlIGxvd2VyZWQgYWxy
ZWFkeS4KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KIAotICAgIHZvaWQgdmlzaXQoQVNU
OjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mKSBvdmVycmlkZQotICAgIHsKLSAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQordm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6
OnZpc2l0KEFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uJikKK3sKKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKK30KIAotICAgIHZvaWQgdmlzaXQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9u
JiB2YXJpYWJsZURlY2xhcmF0aW9uKSBvdmVycmlkZQotICAgIHsKLSAgICAgICAgQVNTRVJUKHZh
cmlhYmxlRGVjbGFyYXRpb24udHlwZSgpKTsKLSAgICAgICAgaWYgKHZhcmlhYmxlRGVjbGFyYXRp
b24uaW5pdGlhbGl6ZXIoKSkKLSAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqdmFyaWFi
bGVEZWNsYXJhdGlvbi5pbml0aWFsaXplcigpKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICAvLyBGSVhNRTogWmVyby1maWxsIHRoZSB2YXJpYWJsZS4KLSAgICAgICAgICAgIENSQVNIKCk7
Ci0gICAgICAgIH0KLSAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBxdWFsaWZpZXJzLgotICAg
ICAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOwotICAg
ICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdmFyaWFibGVNYXBwaW5nLmFkZCgmdmFyaWFibGVEZWNs
YXJhdGlvbiwgdmFyaWFibGVOYW1lKTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQs
IGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKLSAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCht
YWtlU3RyaW5nKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqdmFyaWFibGVEZWNsYXJh
dGlvbi50eXBlKCkpLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9ICIsIG1fc3RhY2sudGFrZUxhc3Qo
KSwgIjtcbiIpKTsKLSAgICAgICAgbV9zdGFjay5hcHBlbmQodmFyaWFibGVOYW1lKTsKK3ZvaWQg
RnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24m
IHZhcmlhYmxlRGVjbGFyYXRpb24pCit7CisgICAgQVNTRVJUKHZhcmlhYmxlRGVjbGFyYXRpb24u
dHlwZSgpKTsKKyAgICBpZiAodmFyaWFibGVEZWNsYXJhdGlvbi5pbml0aWFsaXplcigpKQorICAg
ICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKnZhcmlhYmxlRGVjbGFyYXRpb24uaW5pdGlhbGl6ZXIo
KSk7CisgICAgZWxzZSB7CisgICAgICAgIC8vIEZJWE1FOiBaZXJvLWZpbGwgdGhlIHZhcmlhYmxl
LgorICAgICAgICBDUkFTSCgpOwogICAgIH0KKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHF1YWxp
ZmllcnMuCisgICAgYXV0byB2YXJpYWJsZU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUo
KTsKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdmFyaWFibGVNYXBwaW5nLmFkZCgmdmFyaWFibGVE
ZWNsYXJhdGlvbiwgdmFyaWFibGVOYW1lKTsKKyAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwg
YWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0
cmluZyhtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKnZhcmlhYmxlRGVjbGFyYXRpb24u
dHlwZSgpKSwgJyAnLCB2YXJpYWJsZU5hbWUsICIgPSAiLCBtX3N0YWNrLnRha2VMYXN0KCksICI7
XG4iKSk7CisgICAgbV9zdGFjay5hcHBlbmQodmFyaWFibGVOYW1lKTsKK30KIAotICAgIHZvaWQg
dmlzaXQoQVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbiYgYXNzaWdubWVudEV4cHJlc3Npb24pIG92
ZXJyaWRlCi0gICAgewotICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoYXNzaWdubWVudEV4cHJl
c3Npb24ubGVmdCgpKTsKLSAgICAgICAgYXV0byBsZWZ0TmFtZSA9IG1fc3RhY2sudGFrZUxhc3Qo
KTsKLSAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGFzc2lnbm1lbnRFeHByZXNzaW9uLnJpZ2h0
KCkpOwotICAgICAgICBhdXRvIHJpZ2h0TmFtZSA9IG1fc3RhY2sudGFrZUxhc3QoKTsKLSAgICAg
ICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKGxlZnROYW1lLCAiID0gIiwgcmln
aHROYW1lLCAiO1xuIikpOwotICAgIH0KK3ZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2
aXNpdChBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uJiBhc3NpZ25tZW50RXhwcmVzc2lvbikKK3sK
KyAgICBjaGVja0Vycm9yQW5kVmlzaXQoYXNzaWdubWVudEV4cHJlc3Npb24ubGVmdCgpKTsKKyAg
ICBhdXRvIGxlZnROYW1lID0gbV9zdGFjay50YWtlTGFzdCgpOworICAgIGNoZWNrRXJyb3JBbmRW
aXNpdChhc3NpZ25tZW50RXhwcmVzc2lvbi5yaWdodCgpKTsKKyAgICBhdXRvIHJpZ2h0TmFtZSA9
IG1fc3RhY2sudGFrZUxhc3QoKTsKKyAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJp
bmcobGVmdE5hbWUsICIgPSAiLCByaWdodE5hbWUsICI7XG4iKSk7Cit9CiAKLSAgICB2b2lkIHZp
c2l0KEFTVDo6Q2FsbEV4cHJlc3Npb24mIGNhbGxFeHByZXNzaW9uKSBvdmVycmlkZQotICAgIHsK
LSAgICAgICAgVmVjdG9yPFN0cmluZz4gYXJndW1lbnROYW1lczsKLSAgICAgICAgZm9yIChhdXRv
JiBhcmd1bWVudCA6IGNhbGxFeHByZXNzaW9uLmFyZ3VtZW50cygpKSB7Ci0gICAgICAgICAgICBj
aGVja0Vycm9yQW5kVmlzaXQoYXJndW1lbnQpOwotICAgICAgICAgICAgYXJndW1lbnROYW1lcy5h
cHBlbmQobV9zdGFjay50YWtlTGFzdCgpKTsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlQoY2Fs
bEV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpOwotICAgICAgICBBU1NFUlQoY2FsbEV4cHJlc3Np
b24uZnVuY3Rpb24oKSk7Ci0gICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX2Z1bmN0aW9uTWFwcGlu
Zy5maW5kKGNhbGxFeHByZXNzaW9uLmZ1bmN0aW9uKCkpOwotICAgICAgICBBU1NFUlQoaXRlcmF0
b3IgIT0gbV9mdW5jdGlvbk1hcHBpbmcuZW5kKCkpOwotICAgICAgICBhdXRvIHZhcmlhYmxlTmFt
ZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOwotICAgICAgICBtX3N0cmluZ0J1aWxkZXIu
YXBwZW5kKG1ha2VTdHJpbmcobV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpjYWxsRXhw
cmVzc2lvbi5yZXNvbHZlZFR5cGUoKSksICcgJywgdmFyaWFibGVOYW1lLCAiID0gIiwgaXRlcmF0
b3ItPnZhbHVlLCAnKCcpKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmd1bWVu
dE5hbWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoaSkKLSAgICAgICAgICAgICAg
ICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCIsICIpOwotICAgICAgICAgICAgbV9zdHJpbmdCdWls
ZGVyLmFwcGVuZChhcmd1bWVudE5hbWVzW2ldKTsKLSAgICAgICAgfQotICAgICAgICBtX3N0cmlu
Z0J1aWxkZXIuYXBwZW5kKCIpO1xuIik7Ci0gICAgICAgIG1fc3RhY2suYXBwZW5kKHZhcmlhYmxl
TmFtZSk7Ci0gICAgfQordm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6
Q2FsbEV4cHJlc3Npb24mIGNhbGxFeHByZXNzaW9uKQoreworICAgIFZlY3RvcjxTdHJpbmc+IGFy
Z3VtZW50TmFtZXM7CisgICAgZm9yIChhdXRvJiBhcmd1bWVudCA6IGNhbGxFeHByZXNzaW9uLmFy
Z3VtZW50cygpKSB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChhcmd1bWVudCk7CisgICAg
ICAgIGFyZ3VtZW50TmFtZXMuYXBwZW5kKG1fc3RhY2sudGFrZUxhc3QoKSk7CisgICAgfQorICAg
IEFTU0VSVChjYWxsRXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSk7CisgICAgQVNTRVJUKGNhbGxF
eHByZXNzaW9uLmZ1bmN0aW9uKCkpOworICAgIGF1dG8gaXRlcmF0b3IgPSBtX2Z1bmN0aW9uTWFw
cGluZy5maW5kKGNhbGxFeHByZXNzaW9uLmZ1bmN0aW9uKCkpOworICAgIEFTU0VSVChpdGVyYXRv
ciAhPSBtX2Z1bmN0aW9uTWFwcGluZy5lbmQoKSk7CisgICAgYXV0byB2YXJpYWJsZU5hbWUgPSBn
ZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKKyAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1h
a2VTdHJpbmcobV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpjYWxsRXhwcmVzc2lvbi5y
ZXNvbHZlZFR5cGUoKSksICcgJywgdmFyaWFibGVOYW1lLCAiID0gIiwgaXRlcmF0b3ItPnZhbHVl
LCAnKCcpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ3VtZW50TmFtZXMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgaWYgKGkpCisgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBw
ZW5kKCIsICIpOworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKGFyZ3VtZW50TmFtZXNb
aV0pOworICAgIH0KKyAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCIpO1xuIik7CisgICAgbV9z
dGFjay5hcHBlbmQodmFyaWFibGVOYW1lKTsKK30KIAotICAgIHZvaWQgdmlzaXQoQVNUOjpDb21t
YUV4cHJlc3Npb24mIGNvbW1hRXhwcmVzc2lvbikgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIFN0
cmluZyByZXN1bHQ7Ci0gICAgICAgIGZvciAoYXV0byYgZXhwcmVzc2lvbiA6IGNvbW1hRXhwcmVz
c2lvbi5saXN0KCkpIHsKLSAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChleHByZXNzaW9u
KTsKLSAgICAgICAgICAgIHJlc3VsdCA9IG1fc3RhY2sudGFrZUxhc3QoKTsKLSAgICAgICAgfQot
ICAgICAgICBtX3N0YWNrLmFwcGVuZChyZXN1bHQpOwordm9pZCBGdW5jdGlvbkRlZmluaXRpb25X
cml0ZXI6OnZpc2l0KEFTVDo6Q29tbWFFeHByZXNzaW9uJiBjb21tYUV4cHJlc3Npb24pCit7Cisg
ICAgU3RyaW5nIHJlc3VsdDsKKyAgICBmb3IgKGF1dG8mIGV4cHJlc3Npb24gOiBjb21tYUV4cHJl
c3Npb24ubGlzdCgpKSB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChleHByZXNzaW9uKTsK
KyAgICAgICAgcmVzdWx0ID0gbV9zdGFjay50YWtlTGFzdCgpOwogICAgIH0KKyAgICBtX3N0YWNr
LmFwcGVuZChyZXN1bHQpOworfQogCi0gICAgdm9pZCB2aXNpdChBU1Q6OkRlcmVmZXJlbmNlRXhw
cmVzc2lvbiYgZGVyZWZlcmVuY2VFeHByZXNzaW9uKSBvdmVycmlkZQotICAgIHsKLSAgICAgICAg
Y2hlY2tFcnJvckFuZFZpc2l0KGRlcmVmZXJlbmNlRXhwcmVzc2lvbi5wb2ludGVyKCkpOwotICAg
ICAgICBhdXRvIHJpZ2h0ID0gbV9zdGFjay50YWtlTGFzdCgpOwotICAgICAgICBBU1NFUlQoZGVy
ZWZlcmVuY2VFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKTsKLSAgICAgICAgYXV0byB2YXJpYWJs
ZU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKLSAgICAgICAgbV9zdHJpbmdCdWls
ZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqZGVy
ZWZlcmVuY2VFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKSwgJyAnLCB2YXJpYWJsZU5hbWUsICIg
PSAqIiwgcmlnaHQsICI7XG4iKSk7Ci0gICAgICAgIG1fc3RhY2suYXBwZW5kKHZhcmlhYmxlTmFt
ZSk7Ci0gICAgfQordm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6RGVy
ZWZlcmVuY2VFeHByZXNzaW9uJiBkZXJlZmVyZW5jZUV4cHJlc3Npb24pCit7CisgICAgY2hlY2tF
cnJvckFuZFZpc2l0KGRlcmVmZXJlbmNlRXhwcmVzc2lvbi5wb2ludGVyKCkpOworICAgIGF1dG8g
cmlnaHQgPSBtX3N0YWNrLnRha2VMYXN0KCk7CisgICAgQVNTRVJUKGRlcmVmZXJlbmNlRXhwcmVz
c2lvbi5yZXNvbHZlZFR5cGUoKSk7CisgICAgYXV0byB2YXJpYWJsZU5hbWUgPSBnZW5lcmF0ZU5l
eHRWYXJpYWJsZU5hbWUoKTsKKyAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmco
bV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpkZXJlZmVyZW5jZUV4cHJlc3Npb24ucmVz
b2x2ZWRUeXBlKCkpLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9ICoiLCByaWdodCwgIjtcbiIpKTsK
KyAgICBtX3N0YWNrLmFwcGVuZCh2YXJpYWJsZU5hbWUpOworfQogCi0gICAgdm9pZCB2aXNpdChB
U1Q6OkxvZ2ljYWxFeHByZXNzaW9uJiBsb2dpY2FsRXhwcmVzc2lvbikgb3ZlcnJpZGUKLSAgICB7
Ci0gICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChsb2dpY2FsRXhwcmVzc2lvbi5sZWZ0KCkpOwot
ICAgICAgICBhdXRvIGxlZnQgPSBtX3N0YWNrLnRha2VMYXN0KCk7Ci0gICAgICAgIGNoZWNrRXJy
b3JBbmRWaXNpdChsb2dpY2FsRXhwcmVzc2lvbi5yaWdodCgpKTsKLSAgICAgICAgYXV0byByaWdo
dCA9IG1fc3RhY2sudGFrZUxhc3QoKTsKLSAgICAgICAgQVNTRVJUKGxvZ2ljYWxFeHByZXNzaW9u
LnJlc29sdmVkVHlwZSgpKTsKLSAgICAgICAgYXV0byB2YXJpYWJsZU5hbWUgPSBnZW5lcmF0ZU5l
eHRWYXJpYWJsZU5hbWUoKTsKLSAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3Ry
aW5nKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbG9naWNhbEV4cHJlc3Npb24ucmVz
b2x2ZWRUeXBlKCkpLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9ICIsIGxlZnQpKTsKLSAgICAgICAg
c3dpdGNoIChsb2dpY2FsRXhwcmVzc2lvbi50eXBlKCkpIHsKLSAgICAgICAgY2FzZSBBU1Q6Okxv
Z2ljYWxFeHByZXNzaW9uOjpUeXBlOjpBbmQ6Ci0gICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIu
YXBwZW5kKCIgJiYgIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgIEFTU0VSVChsb2dpY2FsRXhwcmVzc2lvbi50eXBlKCkgPT0gQVNUOjpMb2dpY2Fs
RXhwcmVzc2lvbjo6VHlwZTo6T3IpOwotICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVu
ZCgiIHx8ICIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgbV9zdHJp
bmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKHJpZ2h0LCAiO1xuIikpOwotICAgICAgICBtX3N0
YWNrLmFwcGVuZCh2YXJpYWJsZU5hbWUpOwotICAgIH0KK3ZvaWQgRnVuY3Rpb25EZWZpbml0aW9u
V3JpdGVyOjp2aXNpdChBU1Q6OkxvZ2ljYWxFeHByZXNzaW9uJiBsb2dpY2FsRXhwcmVzc2lvbikK
K3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQobG9naWNhbEV4cHJlc3Npb24ubGVmdCgpKTsKKyAg
ICBhdXRvIGxlZnQgPSBtX3N0YWNrLnRha2VMYXN0KCk7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0
KGxvZ2ljYWxFeHByZXNzaW9uLnJpZ2h0KCkpOworICAgIGF1dG8gcmlnaHQgPSBtX3N0YWNrLnRh
a2VMYXN0KCk7CisgICAgQVNTRVJUKGxvZ2ljYWxFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKTsK
KyAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOworICAg
IG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtX3R5cGVOYW1lci5tYW5nbGVkTmFt
ZUZvclR5cGUoKmxvZ2ljYWxFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKSwgJyAnLCB2YXJpYWJs
ZU5hbWUsICIgPSAiLCBsZWZ0KSk7CisgICAgc3dpdGNoIChsb2dpY2FsRXhwcmVzc2lvbi50eXBl
KCkpIHsKKyAgICBjYXNlIEFTVDo6TG9naWNhbEV4cHJlc3Npb246OlR5cGU6OkFuZDoKKyAgICAg
ICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiICYmICIpOworICAgICAgICBicmVhazsKKyAgICBk
ZWZhdWx0OgorICAgICAgICBBU1NFUlQobG9naWNhbEV4cHJlc3Npb24udHlwZSgpID09IEFTVDo6
TG9naWNhbEV4cHJlc3Npb246OlR5cGU6Ok9yKTsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFw
cGVuZCgiIHx8ICIpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgbV9zdHJpbmdCdWlsZGVy
LmFwcGVuZChtYWtlU3RyaW5nKHJpZ2h0LCAiO1xuIikpOworICAgIG1fc3RhY2suYXBwZW5kKHZh
cmlhYmxlTmFtZSk7Cit9CiAKLSAgICB2b2lkIHZpc2l0KEFTVDo6TG9naWNhbE5vdEV4cHJlc3Np
b24mIGxvZ2ljYWxOb3RFeHByZXNzaW9uKSBvdmVycmlkZQotICAgIHsKLSAgICAgICAgY2hlY2tF
cnJvckFuZFZpc2l0KGxvZ2ljYWxOb3RFeHByZXNzaW9uLm9wZXJhbmQoKSk7Ci0gICAgICAgIGF1
dG8gb3BlcmFuZCA9IG1fc3RhY2sudGFrZUxhc3QoKTsKLSAgICAgICAgQVNTRVJUKGxvZ2ljYWxO
b3RFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKTsKLSAgICAgICAgYXV0byB2YXJpYWJsZU5hbWUg
PSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKLSAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFw
cGVuZChtYWtlU3RyaW5nKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbG9naWNhbE5v
dEV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9ICEiLCBv
cGVyYW5kLCAiO1xuIikpOwotICAgICAgICBtX3N0YWNrLmFwcGVuZCh2YXJpYWJsZU5hbWUpOwot
ICAgIH0KK3ZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OkxvZ2ljYWxO
b3RFeHByZXNzaW9uJiBsb2dpY2FsTm90RXhwcmVzc2lvbikKK3sKKyAgICBjaGVja0Vycm9yQW5k
VmlzaXQobG9naWNhbE5vdEV4cHJlc3Npb24ub3BlcmFuZCgpKTsKKyAgICBhdXRvIG9wZXJhbmQg
PSBtX3N0YWNrLnRha2VMYXN0KCk7CisgICAgQVNTRVJUKGxvZ2ljYWxOb3RFeHByZXNzaW9uLnJl
c29sdmVkVHlwZSgpKTsKKyAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlh
YmxlTmFtZSgpOworICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtX3R5cGVO
YW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKmxvZ2ljYWxOb3RFeHByZXNzaW9uLnJlc29sdmVkVHlw
ZSgpKSwgJyAnLCB2YXJpYWJsZU5hbWUsICIgPSAhIiwgb3BlcmFuZCwgIjtcbiIpKTsKKyAgICBt
X3N0YWNrLmFwcGVuZCh2YXJpYWJsZU5hbWUpOworfQogCi0gICAgdm9pZCB2aXNpdChBU1Q6Ok1h
a2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24mIG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24p
IG92ZXJyaWRlCit2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpNYWtl
QXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uJiBtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uKQor
eworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmxW
YWx1ZSgpKTsKKyAgICBhdXRvIGxWYWx1ZSA9IG1fc3RhY2sudGFrZUxhc3QoKTsKKyAgICBBU1NF
UlQobWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSk7CisgICAgYXV0
byB2YXJpYWJsZU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKKyAgICBhdXRvIG1h
bmdsZWRUeXBlTmFtZSA9IG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbWFrZUFycmF5
UmVmZXJlbmNlRXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSk7CisgICAgaWYgKGlzPEFTVDo6UG9p
bnRlclR5cGU+KCptYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKSkK
KyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1hbmdsZWRUeXBlTmFt
ZSwgJyAnLCB2YXJpYWJsZU5hbWUsICIgPSB7ICIsIGxWYWx1ZSwgIiwgMSB9O1xuIikpOworICAg
IGVsc2UgaWYgKGlzPEFTVDo6QXJyYXlUeXBlPigqbWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lv
bi5yZXNvbHZlZFR5cGUoKSkpIHsKKyAgICAgICAgYXV0byYgYXJyYXlUeXBlID0gZG93bmNhc3Q8
QVNUOjpBcnJheVR5cGU+KCptYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLnJlc29sdmVkVHlw
ZSgpKTsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1hbmdsZWRU
eXBlTmFtZSwgJyAnLCB2YXJpYWJsZU5hbWUsICIgPSB7ICYoIiwgbFZhbHVlLCAiWzBdKSwgIiwg
YXJyYXlUeXBlLm51bUVsZW1lbnRzKCksICIgfTtcbiIpKTsKKyAgICB9IGVsc2UKKyAgICAgICAg
bV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1hbmdsZWRUeXBlTmFtZSwgJyAnLCB2
YXJpYWJsZU5hbWUsICIgPSB7ICYiLCBsVmFsdWUsICIsIDEgfTtcbiIpKTsKKyAgICBtX3N0YWNr
LmFwcGVuZCh2YXJpYWJsZU5hbWUpOworfQorCit2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRl
cjo6dmlzaXQoQVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb24mIG1ha2VQb2ludGVyRXhwcmVzc2lv
bikKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQobWFrZVBvaW50ZXJFeHByZXNzaW9uLmxWYWx1
ZSgpKTsKKyAgICBhdXRvIGxWYWx1ZSA9IG1fc3RhY2sudGFrZUxhc3QoKTsKKyAgICBBU1NFUlQo
bWFrZVBvaW50ZXJFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKTsKKyAgICBhdXRvIHZhcmlhYmxl
TmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOworICAgIG1fc3RyaW5nQnVpbGRlci5h
cHBlbmQobWFrZVN0cmluZyhtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm1ha2VQb2lu
dGVyRXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSksICcgJywgdmFyaWFibGVOYW1lLCAiID0gJiIs
IGxWYWx1ZSwgIjtcbiIpKTsKKyAgICBtX3N0YWNrLmFwcGVuZCh2YXJpYWJsZU5hbWUpOworfQor
Cit2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpSZWFkTW9kaWZ5V3Jp
dGVFeHByZXNzaW9uJikKK3sKKyAgICAvLyBUaGlzIHNob3VsZCBiZSBsb3dlcmVkIGFscmVhZHku
CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgRnVuY3Rpb25EZWZpbml0aW9u
V3JpdGVyOjp2aXNpdChBU1Q6OlRlcm5hcnlFeHByZXNzaW9uJiB0ZXJuYXJ5RXhwcmVzc2lvbikK
K3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQodGVybmFyeUV4cHJlc3Npb24ucHJlZGljYXRlKCkp
OworICAgIGF1dG8gY2hlY2sgPSBtX3N0YWNrLnRha2VMYXN0KCk7CisKKyAgICBBU1NFUlQodGVy
bmFyeUV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpOworICAgIGF1dG8gdmFyaWFibGVOYW1lID0g
Z2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7CisgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCht
YWtlU3RyaW5nKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqdGVybmFyeUV4cHJlc3Np
b24ucmVzb2x2ZWRUeXBlKCkpLCAnICcsIHZhcmlhYmxlTmFtZSwgIjtcbiIpKTsKKworICAgIG1f
c3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiaWYgKCIsIGNoZWNrLCAiKSB7XG4iKSk7
CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHRlcm5hcnlFeHByZXNzaW9uLmJvZHlFeHByZXNzaW9u
KCkpOworICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyh2YXJpYWJsZU5hbWUs
ICIgPSAiLCBtX3N0YWNrLnRha2VMYXN0KCksICI7XG4iKSk7CisgICAgbV9zdHJpbmdCdWlsZGVy
LmFwcGVuZCgifSBlbHNlIHtcbiIpOworICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh0ZXJuYXJ5RXhw
cmVzc2lvbi5lbHNlRXhwcmVzc2lvbigpKTsKKyAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1h
a2VTdHJpbmcodmFyaWFibGVOYW1lLCAiID0gIiwgbV9zdGFjay50YWtlTGFzdCgpLCAiO1xuIikp
OworICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIn1cbiIpOworICAgIG1fc3RhY2suYXBwZW5k
KHZhcmlhYmxlTmFtZSk7Cit9CisKK3ZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNp
dChBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlJiB2YXJpYWJsZVJlZmVyZW5jZSkKK3sKKyAgICBBU1NF
UlQodmFyaWFibGVSZWZlcmVuY2UudmFyaWFibGUoKSk7CisgICAgYXV0byBpdGVyYXRvciA9IG1f
dmFyaWFibGVNYXBwaW5nLmZpbmQodmFyaWFibGVSZWZlcmVuY2UudmFyaWFibGUoKSk7CisgICAg
QVNTRVJUKGl0ZXJhdG9yICE9IG1fdmFyaWFibGVNYXBwaW5nLmVuZCgpKTsKKyAgICBtX3N0YWNr
LmFwcGVuZChpdGVyYXRvci0+dmFsdWUpOworfQorCitTdHJpbmcgRnVuY3Rpb25EZWZpbml0aW9u
V3JpdGVyOjpjb25zdGFudEV4cHJlc3Npb25TdHJpbmcoQVNUOjpDb25zdGFudEV4cHJlc3Npb24m
IGNvbnN0YW50RXhwcmVzc2lvbikKK3sKKyAgICBTdHJpbmcgcmVzdWx0OworICAgIGNvbnN0YW50
RXhwcmVzc2lvbi52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6OkludGVnZXJMaXRlcmFs
JiBpbnRlZ2VyTGl0ZXJhbCkgeworICAgICAgICByZXN1bHQgPSBtYWtlU3RyaW5nKCIiLCBpbnRl
Z2VyTGl0ZXJhbC52YWx1ZSgpKTsKKyAgICB9LCBbJl0oQVNUOjpVbnNpZ25lZEludGVnZXJMaXRl
cmFsJiB1bnNpZ25lZEludGVnZXJMaXRlcmFsKSB7CisgICAgICAgIHJlc3VsdCA9IG1ha2VTdHJp
bmcoIiIsIHVuc2lnbmVkSW50ZWdlckxpdGVyYWwudmFsdWUoKSk7CisgICAgfSwgWyZdKEFTVDo6
RmxvYXRMaXRlcmFsJiBmbG9hdExpdGVyYWwpIHsKKyAgICAgICAgcmVzdWx0ID0gbWFrZVN0cmlu
ZygiIiwgZmxvYXRMaXRlcmFsLnZhbHVlKCkpOworICAgIH0sIFsmXShBU1Q6Ok51bGxMaXRlcmFs
JikgeworICAgICAgICByZXN1bHQgPSAibnVsbHB0ciJfc3RyOworICAgIH0sIFsmXShBU1Q6OkJv
b2xlYW5MaXRlcmFsJiBib29sZWFuTGl0ZXJhbCkgeworICAgICAgICByZXN1bHQgPSBib29sZWFu
TGl0ZXJhbC52YWx1ZSgpID8gInRydWUiX3N0ciA6ICJmYWxzZSJfc3RyOworICAgIH0sIFsmXShB
U1Q6OkVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCYgZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsKSB7
CisgICAgICAgIEFTU0VSVChlbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuZW51bWVyYXRpb25EZWZp
bml0aW9uKCkpOworICAgICAgICBBU1NFUlQoZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLmVudW1l
cmF0aW9uRGVmaW5pdGlvbigpKTsKKyAgICAgICAgcmVzdWx0ID0gbWFrZVN0cmluZyhtX3R5cGVO
YW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKmVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5lbnVtZXJh
dGlvbkRlZmluaXRpb24oKSksICcuJywgbV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JFbnVtZXJh
dGlvbk1lbWJlcigqZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLmVudW1lcmF0aW9uTWVtYmVyKCkp
KTsKKyAgICB9KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworY2xhc3MgUmVuZGVyRnVuY3Rp
b25EZWZpbml0aW9uV3JpdGVyIDogcHVibGljIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlciB7Citw
dWJsaWM6CisgICAgUmVuZGVyRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyKEludHJpbnNpY3MmIGlu
dHJpbnNpY3MsIFR5cGVOYW1lciYgdHlwZU5hbWVyLCBIYXNoTWFwPEFTVDo6RnVuY3Rpb25EZWNs
YXJhdGlvbiosIFN0cmluZz4mIGZ1bmN0aW9uTWFwcGluZywgTWF0Y2hlZFJlbmRlclNlbWFudGlj
cyYmIG1hdGNoZWRTZW1hbnRpY3MsIExheW91dCYgbGF5b3V0KQorICAgICAgICA6IEZ1bmN0aW9u
RGVmaW5pdGlvbldyaXRlcihpbnRyaW5zaWNzLCB0eXBlTmFtZXIsIGZ1bmN0aW9uTWFwcGluZywg
bGF5b3V0KQorICAgICAgICAsIG1fbWF0Y2hlZFNlbWFudGljcyhXVEZNb3ZlKG1hdGNoZWRTZW1h
bnRpY3MpKQogICAgIHsKLSAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KG1ha2VBcnJheVJlZmVy
ZW5jZUV4cHJlc3Npb24ubFZhbHVlKCkpOwotICAgICAgICBhdXRvIGxWYWx1ZSA9IG1fc3RhY2su
dGFrZUxhc3QoKTsKLSAgICAgICAgQVNTRVJUKG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24u
cmVzb2x2ZWRUeXBlKCkpOwotICAgICAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4
dFZhcmlhYmxlTmFtZSgpOwotICAgICAgICBhdXRvIG1hbmdsZWRUeXBlTmFtZSA9IG1fdHlwZU5h
bWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5yZXNv
bHZlZFR5cGUoKSk7Ci0gICAgICAgIGlmIChpczxBU1Q6OlBvaW50ZXJUeXBlPigqbWFrZUFycmF5
UmVmZXJlbmNlRXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSkpCi0gICAgICAgICAgICBtX3N0cmlu
Z0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWFuZ2xlZFR5cGVOYW1lLCAnICcsIHZhcmlhYmxl
TmFtZSwgIiA9IHsgIiwgbFZhbHVlLCAiLCAxIH07XG4iKSk7Ci0gICAgICAgIGVsc2UgaWYgKGlz
PEFTVDo6QXJyYXlUeXBlPigqbWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5yZXNvbHZlZFR5
cGUoKSkpIHsKLSAgICAgICAgICAgIGF1dG8mIGFycmF5VHlwZSA9IGRvd25jYXN0PEFTVDo6QXJy
YXlUeXBlPigqbWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSk7Ci0g
ICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWFuZ2xlZFR5cGVO
YW1lLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9IHsgJigiLCBsVmFsdWUsICJbMF0pLCAiLCBhcnJh
eVR5cGUubnVtRWxlbWVudHMoKSwgIiB9O1xuIikpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtYW5nbGVkVHlwZU5hbWUsICcg
JywgdmFyaWFibGVOYW1lLCAiID0geyAmIiwgbFZhbHVlLCAiLCAxIH07XG4iKSk7Ci0gICAgICAg
IG1fc3RhY2suYXBwZW5kKHZhcmlhYmxlTmFtZSk7CiAgICAgfQogCi0gICAgdm9pZCB2aXNpdChB
U1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbiYgbWFrZVBvaW50ZXJFeHByZXNzaW9uKSBvdmVycmlk
ZQorICAgIE1hcHBlZEJpbmRHcm91cHMmJiB0YWtlVmVydGV4TWFwcGVkQmluZEdyb3VwcygpCiAg
ICAgewotICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQobWFrZVBvaW50ZXJFeHByZXNzaW9uLmxW
YWx1ZSgpKTsKLSAgICAgICAgYXV0byBsVmFsdWUgPSBtX3N0YWNrLnRha2VMYXN0KCk7Ci0gICAg
ICAgIEFTU0VSVChtYWtlUG9pbnRlckV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpOwotICAgICAg
ICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOwotICAgICAg
ICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobV90eXBlTmFtZXIubWFuZ2xlZE5h
bWVGb3JUeXBlKCptYWtlUG9pbnRlckV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpLCAnICcsIHZh
cmlhYmxlTmFtZSwgIiA9ICYiLCBsVmFsdWUsICI7XG4iKSk7Ci0gICAgICAgIG1fc3RhY2suYXBw
ZW5kKHZhcmlhYmxlTmFtZSk7CisgICAgICAgIEFTU0VSVChtX3ZlcnRleE1hcHBlZEJpbmRHcm91
cHMpOworICAgICAgICByZXR1cm4gV1RGTW92ZSgqbV92ZXJ0ZXhNYXBwZWRCaW5kR3JvdXBzKTsK
ICAgICB9CiAKLSAgICB2b2lkIHZpc2l0KEFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbiYp
IG92ZXJyaWRlCisgICAgTWFwcGVkQmluZEdyb3VwcyYmIHRha2VGcmFnbWVudE1hcHBlZEJpbmRH
cm91cHMoKQogICAgIHsKLSAgICAgICAgLy8gVGhpcyBzaG91bGQgYmUgbG93ZXJlZCBhbHJlYWR5
LgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgQVNTRVJUKG1fZnJhZ21l
bnRNYXBwZWRCaW5kR3JvdXBzKTsKKyAgICAgICAgcmV0dXJuIFdURk1vdmUoKm1fZnJhZ21lbnRN
YXBwZWRCaW5kR3JvdXBzKTsKICAgICB9CiAKLSAgICB2b2lkIHZpc2l0KEFTVDo6VGVybmFyeUV4
cHJlc3Npb24mIHRlcm5hcnlFeHByZXNzaW9uKSBvdmVycmlkZQotICAgIHsKLSAgICAgICAgY2hl
Y2tFcnJvckFuZFZpc2l0KHRlcm5hcnlFeHByZXNzaW9uLnByZWRpY2F0ZSgpKTsKLSAgICAgICAg
YXV0byBjaGVjayA9IG1fc3RhY2sudGFrZUxhc3QoKTsKK3ByaXZhdGU6CisgICAgc3RkOjp1bmlx
dWVfcHRyPEVudHJ5UG9pbnRTY2FmZm9sZGluZz4gY3JlYXRlRW50cnlQb2ludFNjYWZmb2xkaW5n
KEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJikgb3ZlcnJpZGU7CiAKLSAgICAgICAgQVNTRVJUKHRl
cm5hcnlFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKTsKLSAgICAgICAgYXV0byB2YXJpYWJsZU5h
bWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKLSAgICAgICAgbV9zdHJpbmdCdWlsZGVy
LmFwcGVuZChtYWtlU3RyaW5nKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqdGVybmFy
eUV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpLCAnICcsIHZhcmlhYmxlTmFtZSwgIjtcbiIpKTsK
KyAgICBNYXRjaGVkUmVuZGVyU2VtYW50aWNzIG1fbWF0Y2hlZFNlbWFudGljczsKKyAgICBPcHRp
b25hbDxNYXBwZWRCaW5kR3JvdXBzPiBtX3ZlcnRleE1hcHBlZEJpbmRHcm91cHM7CisgICAgT3B0
aW9uYWw8TWFwcGVkQmluZEdyb3Vwcz4gbV9mcmFnbWVudE1hcHBlZEJpbmRHcm91cHM7Cit9Owog
Ci0gICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiaWYgKCIsIGNoZWNr
LCAiKSB7XG4iKSk7Ci0gICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh0ZXJuYXJ5RXhwcmVzc2lv
bi5ib2R5RXhwcmVzc2lvbigpKTsKLSAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtl
U3RyaW5nKHZhcmlhYmxlTmFtZSwgIiA9ICIsIG1fc3RhY2sudGFrZUxhc3QoKSwgIjtcbiIpKTsK
LSAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgifSBlbHNlIHtcbiIpOwotICAgICAgICBj
aGVja0Vycm9yQW5kVmlzaXQodGVybmFyeUV4cHJlc3Npb24uZWxzZUV4cHJlc3Npb24oKSk7Ci0g
ICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyh2YXJpYWJsZU5hbWUsICIg
PSAiLCBtX3N0YWNrLnRha2VMYXN0KCksICI7XG4iKSk7Ci0gICAgICAgIG1fc3RyaW5nQnVpbGRl
ci5hcHBlbmQoIn1cbiIpOwotICAgICAgICBtX3N0YWNrLmFwcGVuZCh2YXJpYWJsZU5hbWUpOwor
c3RkOjp1bmlxdWVfcHRyPEVudHJ5UG9pbnRTY2FmZm9sZGluZz4gUmVuZGVyRnVuY3Rpb25EZWZp
bml0aW9uV3JpdGVyOjpjcmVhdGVFbnRyeVBvaW50U2NhZmZvbGRpbmcoQVNUOjpGdW5jdGlvbkRl
ZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbikKK3sKKyAgICBhdXRvIGdlbmVyYXRlTmV4dFZh
cmlhYmxlTmFtZSA9IFt0aGlzXSgpIC0+IFN0cmluZyB7CisgICAgICAgIHJldHVybiB0aGlzLT5n
ZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKKyAgICB9OworICAgIGlmICgmZnVuY3Rpb25EZWZp
bml0aW9uID09IG1fbWF0Y2hlZFNlbWFudGljcy52ZXJ0ZXhTaGFkZXIpIHsKKyAgICAgICAgYXV0
byByZXN1bHQgPSBzdGQ6Om1ha2VfdW5pcXVlPFZlcnRleEVudHJ5UG9pbnRTY2FmZm9sZGluZz4o
ZnVuY3Rpb25EZWZpbml0aW9uLCBtX2ludHJpbnNpY3MsIG1fdHlwZU5hbWVyLCBtX21hdGNoZWRT
ZW1hbnRpY3MudmVydGV4U2hhZGVyRW50cnlQb2ludEl0ZW1zLCBtX21hdGNoZWRTZW1hbnRpY3Mu
dmVydGV4U2hhZGVyUmVzb3VyY2VNYXAsIG1fbGF5b3V0LCBXVEZNb3ZlKGdlbmVyYXRlTmV4dFZh
cmlhYmxlTmFtZSksIG1fbWF0Y2hlZFNlbWFudGljcy5tYXRjaGVkVmVydGV4QXR0cmlidXRlcyk7
CisgICAgICAgIEFTU0VSVCghbV92ZXJ0ZXhNYXBwZWRCaW5kR3JvdXBzKTsKKyAgICAgICAgbV92
ZXJ0ZXhNYXBwZWRCaW5kR3JvdXBzID0gcmVzdWx0LT5tYXBwZWRCaW5kR3JvdXBzKCk7CisgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQotCi0gICAgdm9pZCB2aXNpdChBU1Q6OlZhcmlhYmxl
UmVmZXJlbmNlJiB2YXJpYWJsZVJlZmVyZW5jZSkgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIEFT
U0VSVCh2YXJpYWJsZVJlZmVyZW5jZS52YXJpYWJsZSgpKTsKLSAgICAgICAgYXV0byBpdGVyYXRv
ciA9IG1fdmFyaWFibGVNYXBwaW5nLmZpbmQodmFyaWFibGVSZWZlcmVuY2UudmFyaWFibGUoKSk7
Ci0gICAgICAgIEFTU0VSVChpdGVyYXRvciAhPSBtX3ZhcmlhYmxlTWFwcGluZy5lbmQoKSk7Ci0g
ICAgICAgIG1fc3RhY2suYXBwZW5kKGl0ZXJhdG9yLT52YWx1ZSk7CisgICAgaWYgKCZmdW5jdGlv
bkRlZmluaXRpb24gPT0gbV9tYXRjaGVkU2VtYW50aWNzLmZyYWdtZW50U2hhZGVyKSB7CisgICAg
ICAgIGF1dG8gcmVzdWx0ID0gc3RkOjptYWtlX3VuaXF1ZTxGcmFnbWVudEVudHJ5UG9pbnRTY2Fm
Zm9sZGluZz4oZnVuY3Rpb25EZWZpbml0aW9uLCBtX2ludHJpbnNpY3MsIG1fdHlwZU5hbWVyLCBt
X21hdGNoZWRTZW1hbnRpY3MuZnJhZ21lbnRTaGFkZXJFbnRyeVBvaW50SXRlbXMsIG1fbWF0Y2hl
ZFNlbWFudGljcy5mcmFnbWVudFNoYWRlclJlc291cmNlTWFwLCBtX2xheW91dCwgV1RGTW92ZShn
ZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUpLCBtX21hdGNoZWRTZW1hbnRpY3MubWF0Y2hlZENvbG9y
QXR0YWNobWVudHMpOworICAgICAgICBBU1NFUlQoIW1fZnJhZ21lbnRNYXBwZWRCaW5kR3JvdXBz
KTsKKyAgICAgICAgbV9mcmFnbWVudE1hcHBlZEJpbmRHcm91cHMgPSByZXN1bHQtPm1hcHBlZEJp
bmRHcm91cHMoKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CisgICAgcmV0dXJuIG51
bGxwdHI7Cit9CiAKLSAgICBTdHJpbmcgY29uc3RhbnRFeHByZXNzaW9uU3RyaW5nKEFTVDo6Q29u
c3RhbnRFeHByZXNzaW9uJiBjb25zdGFudEV4cHJlc3Npb24pCitjbGFzcyBDb21wdXRlRnVuY3Rp
b25EZWZpbml0aW9uV3JpdGVyIDogcHVibGljIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlciB7Citw
dWJsaWM6CisgICAgQ29tcHV0ZUZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcihJbnRyaW5zaWNzJiBp
bnRyaW5zaWNzLCBUeXBlTmFtZXImIHR5cGVOYW1lciwgSGFzaE1hcDxBU1Q6OkZ1bmN0aW9uRGVj
bGFyYXRpb24qLCBTdHJpbmc+JiBmdW5jdGlvbk1hcHBpbmcsIE1hdGNoZWRDb21wdXRlU2VtYW50
aWNzJiYgbWF0Y2hlZFNlbWFudGljcywgTGF5b3V0JiBsYXlvdXQpCisgICAgICAgIDogRnVuY3Rp
b25EZWZpbml0aW9uV3JpdGVyKGludHJpbnNpY3MsIHR5cGVOYW1lciwgZnVuY3Rpb25NYXBwaW5n
LCBsYXlvdXQpCisgICAgICAgICwgbV9tYXRjaGVkU2VtYW50aWNzKFdURk1vdmUobWF0Y2hlZFNl
bWFudGljcykpCiAgICAgewotICAgICAgICBTdHJpbmcgcmVzdWx0OwotICAgICAgICBjb25zdGFu
dEV4cHJlc3Npb24udmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oQVNUOjpJbnRlZ2VyTGl0ZXJh
bCYgaW50ZWdlckxpdGVyYWwpIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IG1ha2VTdHJpbmcoIiIs
IGludGVnZXJMaXRlcmFsLnZhbHVlKCkpOwotICAgICAgICB9LCBbJl0oQVNUOjpVbnNpZ25lZElu
dGVnZXJMaXRlcmFsJiB1bnNpZ25lZEludGVnZXJMaXRlcmFsKSB7Ci0gICAgICAgICAgICByZXN1
bHQgPSBtYWtlU3RyaW5nKCIiLCB1bnNpZ25lZEludGVnZXJMaXRlcmFsLnZhbHVlKCkpOwotICAg
ICAgICB9LCBbJl0oQVNUOjpGbG9hdExpdGVyYWwmIGZsb2F0TGl0ZXJhbCkgewotICAgICAgICAg
ICAgcmVzdWx0ID0gbWFrZVN0cmluZygiIiwgZmxvYXRMaXRlcmFsLnZhbHVlKCkpOwotICAgICAg
ICB9LCBbJl0oQVNUOjpOdWxsTGl0ZXJhbCYpIHsKLSAgICAgICAgICAgIHJlc3VsdCA9ICJudWxs
cHRyIl9zdHI7Ci0gICAgICAgIH0sIFsmXShBU1Q6OkJvb2xlYW5MaXRlcmFsJiBib29sZWFuTGl0
ZXJhbCkgewotICAgICAgICAgICAgcmVzdWx0ID0gYm9vbGVhbkxpdGVyYWwudmFsdWUoKSA/ICJ0
cnVlIl9zdHIgOiAiZmFsc2UiX3N0cjsKLSAgICAgICAgfSwgWyZdKEFTVDo6RW51bWVyYXRpb25N
ZW1iZXJMaXRlcmFsJiBlbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwpIHsKLSAgICAgICAgICAgIEFT
U0VSVChlbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuZW51bWVyYXRpb25EZWZpbml0aW9uKCkpOwot
ICAgICAgICAgICAgQVNTRVJUKGVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5lbnVtZXJhdGlvbkRl
ZmluaXRpb24oKSk7Ci0gICAgICAgICAgICByZXN1bHQgPSBtYWtlU3RyaW5nKG1fdHlwZU5hbWVy
Lm1hbmdsZWROYW1lRm9yVHlwZSgqZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLmVudW1lcmF0aW9u
RGVmaW5pdGlvbigpKSwgJy4nLCBtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvckVudW1lcmF0aW9u
TWVtYmVyKCplbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuZW51bWVyYXRpb25NZW1iZXIoKSkpOwot
ICAgICAgICB9KSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgU3RyaW5n
IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpCisgICAgTWFwcGVkQmluZEdyb3VwcyYmIHRha2VN
YXBwZWRCaW5kR3JvdXBzKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCJ2YXJp
YWJsZSIsIG1fdmFyaWFibGVDb3VudCsrKTsKKyAgICAgICAgQVNTRVJUKG1fbWFwcGVkQmluZEdy
b3Vwcyk7CisgICAgICAgIHJldHVybiBXVEZNb3ZlKCptX21hcHBlZEJpbmRHcm91cHMpOwogICAg
IH0KIAogcHJpdmF0ZToKLSAgICBJbnRyaW5zaWNzJiBtX2ludHJpbnNpY3M7Ci0gICAgVHlwZU5h
bWVyJiBtX3R5cGVOYW1lcjsKLSAgICBIYXNoTWFwPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbios
IFN0cmluZz4mIG1fZnVuY3Rpb25NYXBwaW5nOwotICAgIEhhc2hNYXA8QVNUOjpWYXJpYWJsZURl
Y2xhcmF0aW9uKiwgU3RyaW5nPiBtX3ZhcmlhYmxlTWFwcGluZzsKLSAgICBTdHJpbmdCdWlsZGVy
IG1fc3RyaW5nQnVpbGRlcjsKLSAgICBWZWN0b3I8U3RyaW5nPiBtX3N0YWNrOwotICAgIE9wdGlv
bmFsPEVudHJ5UG9pbnRTY2FmZm9sZGluZz4gbV9lbnRyeVBvaW50U2NhZmZvbGRpbmc7Ci0gICAg
dW5zaWduZWQgbV92YXJpYWJsZUNvdW50IHsgMCB9OworICAgIHN0ZDo6dW5pcXVlX3B0cjxFbnRy
eVBvaW50U2NhZmZvbGRpbmc+IGNyZWF0ZUVudHJ5UG9pbnRTY2FmZm9sZGluZyhBU1Q6OkZ1bmN0
aW9uRGVmaW5pdGlvbiYpIG92ZXJyaWRlOworCisgICAgTWF0Y2hlZENvbXB1dGVTZW1hbnRpY3Mg
bV9tYXRjaGVkU2VtYW50aWNzOworICAgIE9wdGlvbmFsPE1hcHBlZEJpbmRHcm91cHM+IG1fbWFw
cGVkQmluZEdyb3VwczsKIH07CiAKLVN0cmluZyBtZXRhbEZ1bmN0aW9ucyhQcm9ncmFtJiBwcm9n
cmFtLCBUeXBlTmFtZXImIHR5cGVOYW1lcikKK3N0ZDo6dW5pcXVlX3B0cjxFbnRyeVBvaW50U2Nh
ZmZvbGRpbmc+IENvbXB1dGVGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OmNyZWF0ZUVudHJ5UG9p
bnRTY2FmZm9sZGluZyhBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0aW9u
KQoreworICAgIGF1dG8gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lID0gW3RoaXNdKCkgLT4gU3Ry
aW5nIHsKKyAgICAgICAgcmV0dXJuIHRoaXMtPmdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOwor
ICAgIH07CisgICAgaWYgKCZmdW5jdGlvbkRlZmluaXRpb24gPT0gbV9tYXRjaGVkU2VtYW50aWNz
LnNoYWRlcikgeworICAgICAgICBhdXRvIHJlc3VsdCA9IHN0ZDo6bWFrZV91bmlxdWU8Q29tcHV0
ZUVudHJ5UG9pbnRTY2FmZm9sZGluZz4oZnVuY3Rpb25EZWZpbml0aW9uLCBtX2ludHJpbnNpY3Ms
IG1fdHlwZU5hbWVyLCBtX21hdGNoZWRTZW1hbnRpY3MuZW50cnlQb2ludEl0ZW1zLCBtX21hdGNo
ZWRTZW1hbnRpY3MucmVzb3VyY2VNYXAsIG1fbGF5b3V0LCBXVEZNb3ZlKGdlbmVyYXRlTmV4dFZh
cmlhYmxlTmFtZSkpOworICAgICAgICBBU1NFUlQoIW1fbWFwcGVkQmluZEdyb3Vwcyk7CisgICAg
ICAgIG1fbWFwcGVkQmluZEdyb3VwcyA9IHJlc3VsdC0+bWFwcGVkQmluZEdyb3VwcygpOworICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworc3Ry
dWN0IFNoYXJlZE1ldGFsRnVuY3Rpb25zUmVzdWx0IHsKKyAgICBIYXNoTWFwPEFTVDo6RnVuY3Rp
b25EZWNsYXJhdGlvbiosIFN0cmluZz4gZnVuY3Rpb25NYXBwaW5nOworICAgIFN0cmluZyBtZXRh
bEZ1bmN0aW9uczsKK307CitzdGF0aWMgU2hhcmVkTWV0YWxGdW5jdGlvbnNSZXN1bHQgc2hhcmVk
TWV0YWxGdW5jdGlvbnMoUHJvZ3JhbSYgcHJvZ3JhbSwgVHlwZU5hbWVyJiB0eXBlTmFtZXIpCiB7
CiAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwogCkBAIC02MTAsMTcgKzc1Niw0OCBA
QCBTdHJpbmcgbWV0YWxGdW5jdGlvbnMoUHJvZ3JhbSYgcHJvZ3JhbSwgVHlwZU5hbWVyJiB0eXBl
TmFtZXIpCiAgICAgfQogCiAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7CisgICAgcmV0
dXJuIHsgV1RGTW92ZShmdW5jdGlvbk1hcHBpbmcpLCBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkg
fTsKK30KIAotICAgIHsKLSAgICAgICAgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyIGZ1bmN0aW9u
RGVmaW5pdGlvbldyaXRlcihwcm9ncmFtLmludHJpbnNpY3MoKSwgdHlwZU5hbWVyLCBmdW5jdGlv
bk1hcHBpbmcpOwotICAgICAgICBmb3IgKGF1dG8mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24g
OiBwcm9ncmFtLm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25zKCkpCi0gICAgICAgICAgICBmdW5j
dGlvbkRlZmluaXRpb25Xcml0ZXIudmlzaXQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbik7Ci0g
ICAgICAgIGZvciAoYXV0byYgZnVuY3Rpb25EZWZpbml0aW9uIDogcHJvZ3JhbS5mdW5jdGlvbkRl
ZmluaXRpb25zKCkpCi0gICAgICAgICAgICBmdW5jdGlvbkRlZmluaXRpb25Xcml0ZXIudmlzaXQo
ZnVuY3Rpb25EZWZpbml0aW9uKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoZnVuY3Rp
b25EZWZpbml0aW9uV3JpdGVyLnRvU3RyaW5nKCkpOwotICAgIH0KK1JlbmRlck1ldGFsRnVuY3Rp
b25zIG1ldGFsRnVuY3Rpb25zKFByb2dyYW0mIHByb2dyYW0sIFR5cGVOYW1lciYgdHlwZU5hbWVy
LCBNYXRjaGVkUmVuZGVyU2VtYW50aWNzJiYgbWF0Y2hlZFNlbWFudGljcywgTGF5b3V0JiBsYXlv
dXQpCit7CisgICAgYXV0byBzaGFyZWRNZXRhbEZ1bmN0aW9ucyA9IE1ldGFsOjpzaGFyZWRNZXRh
bEZ1bmN0aW9ucyhwcm9ncmFtLCB0eXBlTmFtZXIpOworCisgICAgU3RyaW5nQnVpbGRlciBzdHJp
bmdCdWlsZGVyOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHNoYXJlZE1ldGFsRnVuY3Rpb25z
Lm1ldGFsRnVuY3Rpb25zKTsKKworICAgIFJlbmRlckZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlciBm
dW5jdGlvbkRlZmluaXRpb25Xcml0ZXIocHJvZ3JhbS5pbnRyaW5zaWNzKCksIHR5cGVOYW1lciwg
c2hhcmVkTWV0YWxGdW5jdGlvbnMuZnVuY3Rpb25NYXBwaW5nLCBXVEZNb3ZlKG1hdGNoZWRTZW1h
bnRpY3MpLCBsYXlvdXQpOworICAgIGZvciAoYXV0byYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
biA6IHByb2dyYW0ubmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnMoKSkKKyAgICAgICAgZnVuY3Rp
b25EZWZpbml0aW9uV3JpdGVyLnZpc2l0KG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pOworICAg
IGZvciAoYXV0byYgZnVuY3Rpb25EZWZpbml0aW9uIDogcHJvZ3JhbS5mdW5jdGlvbkRlZmluaXRp
b25zKCkpCisgICAgICAgIGZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlci52aXNpdChmdW5jdGlvbkRl
ZmluaXRpb24pOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGZ1bmN0aW9uRGVmaW5pdGlvbldy
aXRlci50b1N0cmluZygpKTsKKworICAgIFJlbmRlck1ldGFsRnVuY3Rpb25zIHJlc3VsdDsKKyAg
ICByZXN1bHQubWV0YWxTb3VyY2UgPSBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CisgICAgcmVz
dWx0LnZlcnRleE1hcHBlZEJpbmRHcm91cHMgPSBmdW5jdGlvbkRlZmluaXRpb25Xcml0ZXIudGFr
ZVZlcnRleE1hcHBlZEJpbmRHcm91cHMoKTsKKyAgICByZXN1bHQuZnJhZ21lbnRNYXBwZWRCaW5k
R3JvdXBzID0gZnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyLnRha2VGcmFnbWVudE1hcHBlZEJpbmRH
cm91cHMoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQogCi0gICAgcmV0dXJuIHN0cmluZ0J1aWxk
ZXIudG9TdHJpbmcoKTsKK0NvbXB1dGVNZXRhbEZ1bmN0aW9ucyBtZXRhbEZ1bmN0aW9ucyhQcm9n
cmFtJiBwcm9ncmFtLCBUeXBlTmFtZXImIHR5cGVOYW1lciwgTWF0Y2hlZENvbXB1dGVTZW1hbnRp
Y3MmJiBtYXRjaGVkU2VtYW50aWNzLCBMYXlvdXQmIGxheW91dCkKK3sKKyAgICBhdXRvIHNoYXJl
ZE1ldGFsRnVuY3Rpb25zID0gTWV0YWw6OnNoYXJlZE1ldGFsRnVuY3Rpb25zKHByb2dyYW0sIHR5
cGVOYW1lcik7CisKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CisgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQoc2hhcmVkTWV0YWxGdW5jdGlvbnMubWV0YWxGdW5jdGlvbnMpOworCisg
ICAgQ29tcHV0ZUZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlciBmdW5jdGlvbkRlZmluaXRpb25Xcml0
ZXIocHJvZ3JhbS5pbnRyaW5zaWNzKCksIHR5cGVOYW1lciwgc2hhcmVkTWV0YWxGdW5jdGlvbnMu
ZnVuY3Rpb25NYXBwaW5nLCBXVEZNb3ZlKG1hdGNoZWRTZW1hbnRpY3MpLCBsYXlvdXQpOworICAg
IGZvciAoYXV0byYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiA6IHByb2dyYW0ubmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbnMoKSkKKyAgICAgICAgZnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyLnZp
c2l0KG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pOworICAgIGZvciAoYXV0byYgZnVuY3Rpb25E
ZWZpbml0aW9uIDogcHJvZ3JhbS5mdW5jdGlvbkRlZmluaXRpb25zKCkpCisgICAgICAgIGZ1bmN0
aW9uRGVmaW5pdGlvbldyaXRlci52aXNpdChmdW5jdGlvbkRlZmluaXRpb24pOworICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKGZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlci50b1N0cmluZygpKTsKKwor
ICAgIENvbXB1dGVNZXRhbEZ1bmN0aW9ucyByZXN1bHQ7CisgICAgcmVzdWx0Lm1ldGFsU291cmNl
ID0gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworICAgIHJlc3VsdC5tYXBwZWRCaW5kR3JvdXBz
ID0gZnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyLnRha2VNYXBwZWRCaW5kR3JvdXBzKCk7CisgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAogfSAvLyBuYW1lc3BhY2UgTWV0YWwKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRnVuY3Rpb25Xcml0
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRnVu
Y3Rpb25Xcml0ZXIuaAppbmRleCA5OTYwZTVlNDhkNThjMjRlMzVlNTI4MzgyNDU2NDcyYjdkMDli
NmQ3Li4wNjI4MjFmYWI4OWVjNWYwN2JkN2M3ZjQ4ZGYyYTIwYWM1NDdhY2NlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9u
V3JpdGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwv
V0hMU0xGdW5jdGlvbldyaXRlci5oCkBAIC0yNyw2ICsyNyw5IEBACiAKICNpZiBFTkFCTEUoV0VC
R1BVKQogCisjaW5jbHVkZSAiV0hMU0xNYXBwZWRCaW5kaW5ncy5oIgorI2luY2x1ZGUgIldITFNM
U2VtYW50aWNNYXRjaGVyLmgiCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNlIFdI
TFNMIHsKQEAgLTM3LDcgKzQwLDE4IEBAIG5hbWVzcGFjZSBNZXRhbCB7CiAKIGNsYXNzIFR5cGVO
YW1lcjsKIAotU3RyaW5nIG1ldGFsRnVuY3Rpb25zKFByb2dyYW0mLCBUeXBlTmFtZXImKTsKK3N0
cnVjdCBSZW5kZXJNZXRhbEZ1bmN0aW9ucyB7CisgICAgU3RyaW5nIG1ldGFsU291cmNlOworICAg
IE1hcHBlZEJpbmRHcm91cHMgdmVydGV4TWFwcGVkQmluZEdyb3VwczsKKyAgICBNYXBwZWRCaW5k
R3JvdXBzIGZyYWdtZW50TWFwcGVkQmluZEdyb3VwczsKK307CitSZW5kZXJNZXRhbEZ1bmN0aW9u
cyBtZXRhbEZ1bmN0aW9ucyhQcm9ncmFtJiwgVHlwZU5hbWVyJiwgTWF0Y2hlZFJlbmRlclNlbWFu
dGljcyYmLCBMYXlvdXQmKTsKKworc3RydWN0IENvbXB1dGVNZXRhbEZ1bmN0aW9ucyB7CisgICAg
U3RyaW5nIG1ldGFsU291cmNlOworICAgIE1hcHBlZEJpbmRHcm91cHMgbWFwcGVkQmluZEdyb3Vw
czsKK307CitDb21wdXRlTWV0YWxGdW5jdGlvbnMgbWV0YWxGdW5jdGlvbnMoUHJvZ3JhbSYsIFR5
cGVOYW1lciYsIE1hdGNoZWRDb21wdXRlU2VtYW50aWNzJiYsIExheW91dCYpOwogCiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNM
TWFwcGVkQmluZGluZ3MuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01l
dGFsL1dITFNMTWFwcGVkQmluZGluZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kYjNjNTJiZjQ5NjM5OGYzZDA0
MGQxNWE4YmQ4YjdlODQ0ZTFkMTM2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xNYXBwZWRCaW5kaW5ncy5oCkBAIC0wLDAg
KzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUp
CisKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFt
ZXNwYWNlIFdITFNMIHsKKworbmFtZXNwYWNlIE1ldGFsIHsKKworc3RydWN0IE1hcHBlZEJpbmRH
cm91cCB7CisgICAgdW5zaWduZWQgYXJndW1lbnRCdWZmZXJJbmRleDsKKyAgICBWZWN0b3I8dW5z
aWduZWQ+IGJpbmRpbmdJbmRpY2VzOworfTsKKwordXNpbmcgTWFwcGVkQmluZEdyb3VwcyA9IFZl
Y3RvcjxNYXBwZWRCaW5kR3JvdXA+OyAvLyBQYXJhbGxlbCB0byB0aGUgaW5wdXQgcmVzb3VyY2Ug
TGF5b3V0LgorCit9IC8vIG5hbWVzcGFjZSBNZXRhbAorCit9IC8vIG5hbWVzcGFjZSBXSExTTAor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xNZXRhbENvZGVHZW5lcmF0b3Iu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xNZXRh
bENvZGVHZW5lcmF0b3IuY3BwCmluZGV4IDEwYzA1MzBlMjkwZDcwNDE3NjdmNzE4MjMyNzBkM2I5
MjU5N2I1NGIuLjMwNWYzMzhjMzEzMDI3MmExZTc0ZDlkNDI3NTc4YmI2ZDdiMDMyMTIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMTWV0
YWxDb2RlR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9NZXRhbC9XSExTTE1ldGFsQ29kZUdlbmVyYXRvci5jcHAKQEAgLTM4LDcgKzM4LDcgQEAg
bmFtZXNwYWNlIFdITFNMIHsKIAogbmFtZXNwYWNlIE1ldGFsIHsKIAotU3RyaW5nIGdlbmVyYXRl
TWV0YWxDb2RlKFByb2dyYW0mIHByb2dyYW0pCitzdGF0aWMgU3RyaW5nIGdlbmVyYXRlTWV0YWxD
b2RlU2hhcmVkKFN0cmluZyYmIG1ldGFsVHlwZXMsIFN0cmluZyYmIG1ldGFsRnVuY3Rpb25zKQog
ewogICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZCgiI2luY2x1ZGUgPG1ldGFsX3N0ZGxpYj5cbiIpOwpAQCAtNDgsMTUgKzQ4LDMyIEBAIFN0
cmluZyBnZW5lcmF0ZU1ldGFsQ29kZShQcm9ncmFtJiBwcm9ncmFtKQogICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKCIjaW5jbHVkZSA8bWV0YWxfY29tcHV0ZT5cbiIpOwogICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKCIjaW5jbHVkZSA8bWV0YWxfdGV4dHVyZT5cbiIpOwogICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKCJcbiIpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJ1c2luZyBuYW1lc3Bh
Y2UgbWV0YWw7XG4iKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgidXNpbmcgbmFtZXNwYWNl
IG1ldGFsO1xuIik7IC8vIEZJWE1FOiBQcm9iYWJseSBzaG91bGQgcXVhbGlmeSBhbGwgY2FsbHMg
dG8gYnVpbHQtaW4gZnVuY3Rpb25zLCBpbnN0ZWFkIG9mIHVzaW5nIHRoaXMgbGluZS4KICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZCgiXG4iKTsKIAotICAgIFR5cGVOYW1lciB0eXBlTmFtZXIocHJv
Z3JhbSk7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodHlwZU5hbWVyLm1ldGFsVHlwZXMoKSk7
Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWV0YWxGdW5jdGlvbnMocHJvZ3JhbSwgdHlwZU5h
bWVyKSk7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoV1RGTW92ZShtZXRhbFR5cGVzKSk7Cisg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoV1RGTW92ZShtZXRhbEZ1bmN0aW9ucykpOwogICAgIHJl
dHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKK1JlbmRlck1ldGFsQ29kZSBnZW5l
cmF0ZU1ldGFsQ29kZShQcm9ncmFtJiBwcm9ncmFtLCBNYXRjaGVkUmVuZGVyU2VtYW50aWNzJiYg
bWF0Y2hlZFNlbWFudGljcywgTGF5b3V0JiBsYXlvdXQpCit7CisgICAgVHlwZU5hbWVyIHR5cGVO
YW1lcihwcm9ncmFtKTsKKyAgICBhdXRvIG1ldGFsVHlwZXMgPSB0eXBlTmFtZXIubWV0YWxUeXBl
cygpOworICAgIGF1dG8gbWV0YWxGdW5jdGlvbnMgPSBNZXRhbDo6bWV0YWxGdW5jdGlvbnMocHJv
Z3JhbSwgdHlwZU5hbWVyLCBXVEZNb3ZlKG1hdGNoZWRTZW1hbnRpY3MpLCBsYXlvdXQpOworICAg
IGF1dG8gbWV0YWxDb2RlID0gZ2VuZXJhdGVNZXRhbENvZGVTaGFyZWQoV1RGTW92ZShtZXRhbFR5
cGVzKSwgV1RGTW92ZShtZXRhbEZ1bmN0aW9ucy5tZXRhbFNvdXJjZSkpOworICAgIHJldHVybiB7
IFdURk1vdmUobWV0YWxDb2RlKSwgV1RGTW92ZShtZXRhbEZ1bmN0aW9ucy52ZXJ0ZXhNYXBwZWRC
aW5kR3JvdXBzKSwgV1RGTW92ZShtZXRhbEZ1bmN0aW9ucy5mcmFnbWVudE1hcHBlZEJpbmRHcm91
cHMpIH07Cit9CisKK0NvbXB1dGVNZXRhbENvZGUgZ2VuZXJhdGVNZXRhbENvZGUoUHJvZ3JhbSYg
cHJvZ3JhbSwgTWF0Y2hlZENvbXB1dGVTZW1hbnRpY3MmJiBtYXRjaGVkU2VtYW50aWNzLCBMYXlv
dXQmIGxheW91dCkKK3sKKyAgICBUeXBlTmFtZXIgdHlwZU5hbWVyKHByb2dyYW0pOworICAgIGF1
dG8gbWV0YWxUeXBlcyA9IHR5cGVOYW1lci5tZXRhbFR5cGVzKCk7CisgICAgYXV0byBtZXRhbEZ1
bmN0aW9ucyA9IE1ldGFsOjptZXRhbEZ1bmN0aW9ucyhwcm9ncmFtLCB0eXBlTmFtZXIsIFdURk1v
dmUobWF0Y2hlZFNlbWFudGljcyksIGxheW91dCk7CisgICAgYXV0byBtZXRhbENvZGUgPSBnZW5l
cmF0ZU1ldGFsQ29kZVNoYXJlZChXVEZNb3ZlKG1ldGFsVHlwZXMpLCBXVEZNb3ZlKG1ldGFsRnVu
Y3Rpb25zLm1ldGFsU291cmNlKSk7CisgICAgcmV0dXJuIHsgV1RGTW92ZShtZXRhbENvZGUpLCBX
VEZNb3ZlKG1ldGFsRnVuY3Rpb25zLm1hcHBlZEJpbmRHcm91cHMpIH07Cit9CisKIH0KIAogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hM
U0xNZXRhbENvZGVHZW5lcmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML01ldGFsL1dITFNMTWV0YWxDb2RlR2VuZXJhdG9yLmgKaW5kZXggZTA4OGUwMTA0NDk5NDg0
MTEwNzU2NzQzNDc0OTFmNzNkMzZhMjM0Zi4uYTZiM2QzMTJjYjY0YjAxMjFkNDI4MjJjMDU5MTM3
YzcyNWNlZGZjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvTWV0YWwvV0hMU0xNZXRhbENvZGVHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE1ldGFsQ29kZUdlbmVyYXRvci5oCkBAIC0y
Nyw2ICsyNywxMCBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAorI2luY2x1ZGUgIldITFNMTWFw
cGVkQmluZGluZ3MuaCIKKyNpbmNsdWRlICJXSExTTFBpcGVsaW5lRGVzY3JpcHRvci5oIgorI2lu
Y2x1ZGUgIldITFNMU2VtYW50aWNNYXRjaGVyLmgiCisjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtMzcsOCArNDEsMjAgQEAgY2xhc3MgUHJvZ3JhbTsKIAogbmFtZXNwYWNlIE1ldGFsIHsKIAot
Ly8gRklYTUU6IFRoaXMgbmVlZHMgdG8ga25vdyBhYm91dCB0aGUgcGlwZWxpbmUgc3RhdGUgb2Jq
ZWN0IHRvIGVtaXQgZnVuY3Rpb24gcHJvbG9ndWVzIGFuZCBlcGlsb2d1ZXMuCi1TdHJpbmcgZ2Vu
ZXJhdGVNZXRhbENvZGUoUHJvZ3JhbSYpOworc3RydWN0IFJlbmRlck1ldGFsQ29kZSB7CisgICAg
U3RyaW5nIG1ldGFsU291cmNlOworICAgIE1hcHBlZEJpbmRHcm91cHMgdmVydGV4TWFwcGVkQmlu
ZEdyb3VwczsKKyAgICBNYXBwZWRCaW5kR3JvdXBzIGZyYWdtZW50TWFwcGVkQmluZEdyb3VwczsK
K307CisvLyBDYW4ndCBmYWlsLiBBbnkgZmFpbHVyZSBjaGVja3MgbmVlZCB0byBiZSBkb25lIGVh
cmxpZXIsIGluIHRoZSBiYWNrZW5kLWFnbm9zdGljIHBhcnQgb2YgdGhlIGNvbXBpbGVyLgorUmVu
ZGVyTWV0YWxDb2RlIGdlbmVyYXRlTWV0YWxDb2RlKFByb2dyYW0mLCBNYXRjaGVkUmVuZGVyU2Vt
YW50aWNzJiYgbWF0Y2hlZFNlbWFudGljcywgTGF5b3V0Jik7CisKK3N0cnVjdCBDb21wdXRlTWV0
YWxDb2RlIHsKKyAgICBTdHJpbmcgbWV0YWxTb3VyY2U7CisgICAgTWFwcGVkQmluZEdyb3VwcyBi
aW5kR3JvdXBzOworfTsKKy8vIENhbid0IGZhaWwuIEFueSBmYWlsdXJlIGNoZWNrcyBuZWVkIHRv
IGJlIGRvbmUgZWFybGllciwgaW4gdGhlIGJhY2tlbmQtYWdub3N0aWMgcGFydCBvZiB0aGUgY29t
cGlsZXIuCitDb21wdXRlTWV0YWxDb2RlIGdlbmVyYXRlTWV0YWxDb2RlKFByb2dyYW0mLCBNYXRj
aGVkQ29tcHV0ZVNlbWFudGljcyYmIG1hdGNoZWRTZW1hbnRpY3MsIExheW91dCYpOwogCiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dI
TFNMVmVydGV4QnVmZmVySW5kZXhDYWxjdWxhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMVmVydGV4QnVmZmVySW5kZXhDYWxjdWxhdG9yLmNw
cAppbmRleCBlMjY4MzFlNTUyZGZkZGExOTQzMDVlOTQwMGJhZmU4OWFiYmNiODUyLi5hODA5MWU5
ZTdiYTgyY2Y5NzQ1MGM0MjFiMDczMTBiMmVkNzk2ZWNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTFZlcnRleEJ1ZmZlckluZGV4Q2Fs
Y3VsYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0
YWwvV0hMU0xWZXJ0ZXhCdWZmZXJJbmRleENhbGN1bGF0b3IuY3BwCkBAIC00MCwxMCArNDAsMTAg
QEAgdW5zaWduZWQgbG9uZyBjYWxjdWxhdGVWZXJ0ZXhCdWZmZXJJbmRleCh1bnNpZ25lZCBsb25n
IGluZGV4KQogICAgIHJldHVybiBpbmRleCArIDg7CiB9CiAKLX0gLy8gbmFtZXNwYWNlIE1ldGFs
Cit9CiAKLX0gLy8gbmFtZXNwYWNlIFdITFNMCit9CiAKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
K30KIAogI2VuZGlmIC8vIEVOQUJMRShXRUJHUFUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTFZlcnRleEJ1ZmZlckluZGV4Q2FsY3Vs
YXRvci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xW
ZXJ0ZXhCdWZmZXJJbmRleENhbGN1bGF0b3IuaAppbmRleCBiYjU1Yjg5ZjRhMzAxOTkyZWNkYmE2
YWVjOTE0YWIxNmNhMzUwMzk5Li45ZjhjMjUzMGYwMDEzYmE4NzY3YjBjMDBhY2ZmMzFmZWRlMTc0
MzdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRh
bC9XSExTTFZlcnRleEJ1ZmZlckluZGV4Q2FsY3VsYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMVmVydGV4QnVmZmVySW5kZXhDYWxjdWxh
dG9yLmgKQEAgLTM1LDEwICszNSwxMCBAQCBuYW1lc3BhY2UgTWV0YWwgewogCiB1bnNpZ25lZCBs
b25nIGNhbGN1bGF0ZVZlcnRleEJ1ZmZlckluZGV4KHVuc2lnbmVkIGxvbmcpOwogCi19IC8vIG5h
bWVzcGFjZSBNZXRhbAorfQogCi19IC8vIG5hbWVzcGFjZSBXSExTTAorfQogCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCit9CiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCR1BVKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbnRyaW5zaWNzLmggYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEludHJpbnNpY3MuaAppbmRl
eCA4NDEwYzhiNzM5MmM3ZjAwMTQ0YTkwMWQ1ZWM0NjJkNDk2YWJhODFjLi5mYzQ3ZDMyOTM1NDBk
ZjZjY2E1MzY2MzFkNGM5ZmJkMmVjZTg5NzlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEludHJpbnNpY3MuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEludHJpbnNpY3MuaApAQCAtODIsNiArODIsMTIg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gKm1fZmxvYXRUeXBlOwogICAgIH0KIAorICAgIEFT
VDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBmbG9hdDJUeXBlKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIEFTU0VSVChtX3ZlY3RvckZsb2F0WzBdKTsKKyAgICAgICAgcmV0dXJuICptX3ZlY3RvckZs
b2F0WzBdOworICAgIH0KKwogICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBmbG9hdDNU
eXBlKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3ZlY3RvckZsb2F0WzFdKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGlwZWxp
bmVEZXNjcmlwdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TFBpcGVsaW5lRGVzY3JpcHRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBmMjg2OTJjMTg0YmJmNmEwNjFmYzc5
NDI1MjUyNDUwOTIxMjJhYjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTFBpcGVsaW5lRGVzY3JpcHRvci5oCkBAIC0wLDAgKzEsMTE2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisj
aW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgorI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBX
SExTTCB7CisKK2VudW0gY2xhc3MgVmVydGV4Rm9ybWF0IDogdWludDhfdCB7CisgICAgRmxvYXRS
MzJHMzJCMzJBMzIsCisgICAgRmxvYXRSMzJHMzJCMzIsCisgICAgRmxvYXRSMzJHMzIsCisgICAg
RmxvYXRSMzIKK307CisKK3N0cnVjdCBWZXJ0ZXhBdHRyaWJ1dGUgeworICAgIFZlcnRleEZvcm1h
dCB2ZXJ0ZXhGb3JtYXQ7CisgICAgdW5zaWduZWQgbmFtZTsKK307CisKK3VzaW5nIFZlcnRleEF0
dHJpYnV0ZXMgPSBWZWN0b3I8VmVydGV4QXR0cmlidXRlPjsKKworZW51bSBjbGFzcyBUZXh0dXJl
Rm9ybWF0IHsKKyAgICBSOEc4QjhBOFVub3JtLAorICAgIFI4RzhCOEE4VWludCwKKyAgICBCOEc4
UjhBOFVub3JtLAorICAgIEQzMkZsb2F0UzhVaW50Cit9OworCitzdHJ1Y3QgQXR0YWNobWVudERl
c2NyaXB0b3IgeworICAgIFRleHR1cmVGb3JtYXQgdGV4dHVyZUZvcm1hdDsKKyAgICB1bnNpZ25l
ZCBuYW1lOworfTsKKworc3RydWN0IEF0dGFjaG1lbnRzU3RhdGVEZXNjcmlwdG9yIHsKKyAgICBW
ZWN0b3I8QXR0YWNobWVudERlc2NyaXB0b3I+IGF0dGFjaG1lbnREZXNjcmlwdG9yczsKKyAgICBP
cHRpb25hbDxBdHRhY2htZW50RGVzY3JpcHRvcj4gZGVwdGhTdGVuY2lsQXR0YWNobWVudERlc2Ny
aXB0b3I7Cit9OworCitlbnVtIGNsYXNzIFNoYWRlclN0YWdlIDogdWludDhfdCB7CisgICAgTm9u
ZSA9IDAsCisgICAgVmVydGV4ID0gMSA8PCAwLAorICAgIEZyYWdtZW50ID0gMSA8PCAxLAorICAg
IENvbXB1dGUgPSAxIDw8IDIKK307CisKK2VudW0gY2xhc3MgQmluZGluZ1R5cGUgOiB1aW50OF90
IHsKKyAgICBVbmlmb3JtQnVmZmVyLAorICAgIFNhbXBsZXIsCisgICAgVGV4dHVyZSwKKyAgICBT
dG9yYWdlQnVmZmVyLAorICAgIC8vIEZJWE1FOiBBZGQgdGhlIGR5bmFtaWMgdHlwZXMKK307CisK
K3N0cnVjdCBCaW5kaW5nIHsKKyAgICBPcHRpb25TZXQ8U2hhZGVyU3RhZ2U+IHZpc2liaWxpdHk7
CisgICAgQmluZGluZ1R5cGUgYmluZGluZ1R5cGU7CisgICAgdW5zaWduZWQgbmFtZTsKK307CisK
K3N0cnVjdCBCaW5kR3JvdXAgeworICAgIFZlY3RvcjxCaW5kaW5nPiBiaW5kaW5nczsKKyAgICB1
bnNpZ25lZCBuYW1lOworfTsKKwordXNpbmcgTGF5b3V0ID0gVmVjdG9yPEJpbmRHcm91cD47CisK
K3N0cnVjdCBSZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgeworICAgIFZlcnRleEF0dHJpYnV0ZXMg
dmVydGV4QXR0cmlidXRlczsKKyAgICBBdHRhY2htZW50c1N0YXRlRGVzY3JpcHRvciBhdHRhY2ht
ZW50c1N0YXRlRGVzY3JpcHRvcjsKKyAgICBMYXlvdXQgbGF5b3V0OworICAgIFN0cmluZyB2ZXJ0
ZXhFbnRyeVBvaW50TmFtZTsKKyAgICBTdHJpbmcgZnJhZ21lbnRFbnRyeVBvaW50TmFtZTsKK307
CisKK3N0cnVjdCBDb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yIHsKKyAgICBMYXlvdXQgbGF5b3V0
OworICAgIFN0cmluZyBlbnRyeVBvaW50TmFtZTsKK307CisKK3VzaW5nIFBpcGVsaW5lRGVzY3Jp
cHRvciA9IFZhcmlhbnQ8UmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yLCBDb21wdXRlUGlwZWxpbmVE
ZXNjcmlwdG9yPjsKKworfSAvLyBuYW1lc3BhY2UgV0hMU0wKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdQVSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRlYzJi
ZDI4MTVlNzFlODI4NWQ0NWM4ZGM2ODc3NjExYWFiYzFiYjAKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3BwCkBAIC0w
LDAgKzEsMTMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IldITFNMUHJlcGFyZS5oIgorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldITFNM
Q2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuaCIKKyNpbmNsdWRlICJXSExTTENoZWNrZXIuaCIKKyNp
bmNsdWRlICJXSExTTEZ1bmN0aW9uU3RhZ2VDaGVja2VyLmgiCisjaW5jbHVkZSAiV0hMU0xIaWdo
Wm9tYmllRmluZGVyLmgiCisjaW5jbHVkZSAiV0hMU0xMaXRlcmFsVHlwZUNoZWNrZXIuaCIKKyNp
bmNsdWRlICJXSExTTE1ldGFsQ29kZUdlbmVyYXRvci5oIgorI2luY2x1ZGUgIldITFNMTmFtZVJl
c29sdmVyLmgiCisjaW5jbHVkZSAiV0hMU0xQYXJzZXIuaCIKKyNpbmNsdWRlICJXSExTTFByb2dy
YW0uaCIKKyNpbmNsdWRlICJXSExTTFJlY3Vyc2lvbkNoZWNrZXIuaCIKKyNpbmNsdWRlICJXSExT
TFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmgiCisjaW5jbHVkZSAiV0hMU0xTZW1hbnRpY01hdGNoZXIu
aCIKKyNpbmNsdWRlICJXSExTTFN0YW5kYXJkTGlicmFyeS5oIgorI2luY2x1ZGUgIldITFNMU3Rh
dGVtZW50QmVoYXZpb3JDaGVja2VyLmgiCisjaW5jbHVkZSAiV0hMU0xTeW50aGVzaXplQXJyYXlP
cGVyYXRvckxlbmd0aC5oIgorI2luY2x1ZGUgIldITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5o
IgorI2luY2x1ZGUgIldITFNMU3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zLmgiCisjaW5j
bHVkZSAiV0hMU0xTeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzLmgiCisjaW5jbHVkZSA8d3Rm
L1ZhcmlhbnQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgewor
CitzdGF0aWMgT3B0aW9uYWw8UHJvZ3JhbT4gcHJlcGFyZVNoYXJlZChTdHJpbmcmIHdobHNsU291
cmNlKQoreworICAgIFByb2dyYW0gcHJvZ3JhbTsKKyAgICBQYXJzZXIgcGFyc2VyOworICAgIGF1
dG8gc3RhbmRhcmRMaWJyYXJ5ID0gU3RyaW5nOjpmcm9tVVRGOChXSExTTFN0YW5kYXJkTGlicmFy
eSwgc2l6ZW9mKFdITFNMU3RhbmRhcmRMaWJyYXJ5KSk7CisgICAgYXV0byBmYWlsdXJlID0gc3Rh
dGljX2Nhc3Q8Ym9vbD4ocGFyc2VyLnBhcnNlKHByb2dyYW0sIHN0YW5kYXJkTGlicmFyeSwgUGFy
c2VyOjpNb2RlOjpTdGFuZGFyZExpYnJhcnkpKTsKKyAgICBBU1NFUlRfVU5VU0VEKGZhaWx1cmUs
ICFmYWlsdXJlKTsKKyAgICBpZiAocGFyc2VyLnBhcnNlKHByb2dyYW0sIHdobHNsU291cmNlLCBQ
YXJzZXI6Ok1vZGU6OlVzZXIpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIE5h
bWVSZXNvbHZlciBuYW1lUmVzb2x2ZXIocHJvZ3JhbS5uYW1lQ29udGV4dCgpKTsKKyAgICBpZiAo
IXJlc29sdmVOYW1lc0luVHlwZXMocHJvZ3JhbSwgbmFtZVJlc29sdmVyKSkKKyAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKKyAgICBpZiAoIWNoZWNrUmVjdXJzaXZlVHlwZXMocHJvZ3JhbSkp
CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgc3ludGhlc2l6ZVN0cnVjdHVyZUFj
Y2Vzc29ycyhwcm9ncmFtKTsKKyAgICBzeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMocHJv
Z3JhbSk7CisgICAgc3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGgocHJvZ3JhbSk7CisgICAg
c3ludGhlc2l6ZUNvbnN0cnVjdG9ycyhwcm9ncmFtKTsKKyAgICByZXNvbHZlTmFtZXNJbkZ1bmN0
aW9ucyhwcm9ncmFtLCBuYW1lUmVzb2x2ZXIpOworICAgIGlmICghY2hlY2tEdXBsaWNhdGVGdW5j
dGlvbnMocHJvZ3JhbSkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBpZiAo
IWNoZWNrKHByb2dyYW0pKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGNoZWNr
TGl0ZXJhbFR5cGVzKHByb2dyYW0pOworICAgIC8vIHJlc29sdmVQcm9wZXJ0aWVzKHByb2dyYW0p
OworICAgIGZpbmRIaWdoWm9tYmllcyhwcm9ncmFtKTsKKyAgICBpZiAoIWNoZWNrU3RhdGVtZW50
QmVoYXZpb3IocHJvZ3JhbSkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgaWYg
KCFjaGVja1JlY3Vyc2lvbihwcm9ncmFtKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
KyAgICBpZiAoIWNoZWNrRnVuY3Rpb25TdGFnZXMocHJvZ3JhbSkpCisgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIHByb2dyYW07Cit9CisKK09wdGlvbmFsPFJlbmRlclBy
ZXBhcmVSZXN1bHQ+IHByZXBhcmUoU3RyaW5nJiB3aGxzbFNvdXJjZSwgUmVuZGVyUGlwZWxpbmVE
ZXNjcmlwdG9yJiByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpCit7CisgICAgYXV0byBwcm9ncmFt
ID0gcHJlcGFyZVNoYXJlZCh3aGxzbFNvdXJjZSk7CisgICAgaWYgKCFwcm9ncmFtKQorICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGF1dG8gbWF0Y2hlZFNlbWFudGljcyA9IG1hdGNo
U2VtYW50aWNzKCpwcm9ncmFtLCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOworICAgIGlmICgh
bWF0Y2hlZFNlbWFudGljcykKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIGF1
dG8gZ2VuZXJhdGVkQ29kZSA9IE1ldGFsOjpnZW5lcmF0ZU1ldGFsQ29kZSgqcHJvZ3JhbSwgV1RG
TW92ZSgqbWF0Y2hlZFNlbWFudGljcyksIHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvci5sYXlvdXQp
OworCisgICAgUmVuZGVyUHJlcGFyZVJlc3VsdCByZXN1bHQ7CisgICAgcmVzdWx0Lm1ldGFsU291
cmNlID0gV1RGTW92ZShnZW5lcmF0ZWRDb2RlLm1ldGFsU291cmNlKTsKKyAgICByZXN1bHQudmVy
dGV4TWFwcGVkQmluZEdyb3VwcyA9IFdURk1vdmUoZ2VuZXJhdGVkQ29kZS52ZXJ0ZXhNYXBwZWRC
aW5kR3JvdXBzKTsKKyAgICByZXN1bHQuZnJhZ21lbnRNYXBwZWRCaW5kR3JvdXBzID0gV1RGTW92
ZShnZW5lcmF0ZWRDb2RlLmZyYWdtZW50TWFwcGVkQmluZEdyb3Vwcyk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworT3B0aW9uYWw8Q29tcHV0ZVByZXBhcmVSZXN1bHQ+IHByZXBhcmUoU3RyaW5n
JiB3aGxzbFNvdXJjZSwgQ29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvciYgY29tcHV0ZVBpcGVsaW5l
RGVzY3JpcHRvcikKK3sKKyAgICBhdXRvIHByb2dyYW0gPSBwcmVwYXJlU2hhcmVkKHdobHNsU291
cmNlKTsKKyAgICBpZiAoIXByb2dyYW0pCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cisg
ICAgYXV0byBtYXRjaGVkU2VtYW50aWNzID0gbWF0Y2hTZW1hbnRpY3MoKnByb2dyYW0sIGNvbXB1
dGVQaXBlbGluZURlc2NyaXB0b3IpOworICAgIGlmICghbWF0Y2hlZFNlbWFudGljcykKKyAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIGF1dG8gZ2VuZXJhdGVkQ29kZSA9IE1ldGFs
OjpnZW5lcmF0ZU1ldGFsQ29kZSgqcHJvZ3JhbSwgV1RGTW92ZSgqbWF0Y2hlZFNlbWFudGljcyks
IGNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IubGF5b3V0KTsKKworICAgIENvbXB1dGVQcmVwYXJl
UmVzdWx0IHJlc3VsdDsKKyAgICByZXN1bHQubWV0YWxTb3VyY2UgPSBXVEZNb3ZlKGdlbmVyYXRl
ZENvZGUubWV0YWxTb3VyY2UpOworICAgIHJlc3VsdC5tYXBwZWRCaW5kR3JvdXBzID0gV1RGTW92
ZShnZW5lcmF0ZWRDb2RlLmJpbmRHcm91cHMpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdITFNMCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRShXRUJHUFUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTFByZXBhcmUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMUHJlcGFyZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBmMmM4NDY2YmY1NjViN2IxZTUwYzRhYWVj
ZmRiMzUzZjJkYzhjZjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuaApAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xN
YXBwZWRCaW5kaW5ncy5oIgorI2luY2x1ZGUgIldITFNMUGlwZWxpbmVEZXNjcmlwdG9yLmgiCisj
aW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworLy8gRklYTUU6
IEdlbmVyYXRlIGRlc2NyaXB0aXZlIGVycm9yIG1lc3NhZ2VzIGFuZCByZXR1cm4gdGhlbSBoZXJl
Lgorc3RydWN0IFJlbmRlclByZXBhcmVSZXN1bHQgeworICAgIFN0cmluZyBtZXRhbFNvdXJjZTsK
KyAgICBNZXRhbDo6TWFwcGVkQmluZEdyb3VwcyB2ZXJ0ZXhNYXBwZWRCaW5kR3JvdXBzOworICAg
IE1ldGFsOjpNYXBwZWRCaW5kR3JvdXBzIGZyYWdtZW50TWFwcGVkQmluZEdyb3VwczsKK307CitP
cHRpb25hbDxSZW5kZXJQcmVwYXJlUmVzdWx0PiBwcmVwYXJlKFN0cmluZyYgd2hsc2xTb3VyY2Us
IFJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciYpOworCitzdHJ1Y3QgQ29tcHV0ZVByZXBhcmVSZXN1
bHQgeworICAgIFN0cmluZyBtZXRhbFNvdXJjZTsKKyAgICBNZXRhbDo6TWFwcGVkQmluZEdyb3Vw
cyBtYXBwZWRCaW5kR3JvdXBzOworfTsKK09wdGlvbmFsPENvbXB1dGVQcmVwYXJlUmVzdWx0PiBw
cmVwYXJlKFN0cmluZyYgd2hsc2xTb3VyY2UsIENvbXB1dGVQaXBlbGluZURlc2NyaXB0b3ImKTsK
KworfSAvLyBuYW1lc3BhY2UgV0hMU0wKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gRU5BQkxFKFdFQkdQVSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMU2VtYW50aWNNYXRjaGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU2VtYW50aWNNYXRjaGVyLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4w
YmRjYzBjZThmMWRhNTc2YzViZjczNGI5MzZlNmM2YTk3OTMyOThhCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTZW1hbnRpY01hdGNo
ZXIuY3BwCkBAIC0wLDAgKzEsMzAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIldITFNMU2VtYW50aWNNYXRjaGVyLmgiCisKKyNpZiBFTkFCTEUoV0VCR1BV
KQorCisjaW5jbHVkZSAiV0hMU0xCdWlsdEluU2VtYW50aWMuaCIKKyNpbmNsdWRlICJXSExTTEZ1
bmN0aW9uRGVmaW5pdGlvbi5oIgorI2luY2x1ZGUgIldITFNMR2F0aGVyRW50cnlQb2ludEl0ZW1z
LmgiCisjaW5jbHVkZSAiV0hMU0xJbmZlclR5cGVzLmgiCisjaW5jbHVkZSAiV0hMU0xQaXBlbGlu
ZURlc2NyaXB0b3IuaCIKKyNpbmNsdWRlICJXSExTTFByb2dyYW0uaCIKKyNpbmNsdWRlICJXSExT
TFJlc291cmNlU2VtYW50aWMuaCIKKyNpbmNsdWRlICJXSExTTFN0YWdlSW5PdXRTZW1hbnRpYy5o
IgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNp
bmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCitzdGF0aWMgQVNU
OjpGdW5jdGlvbkRlZmluaXRpb24qIGZpbmRFbnRyeVBvaW50KFZlY3RvcjxVbmlxdWVSZWY8QVNU
OjpGdW5jdGlvbkRlZmluaXRpb24+PiYgZnVuY3Rpb25EZWZpbml0aW9ucywgU3RyaW5nJiBuYW1l
KQoreworICAgIGF1dG8gaXRlcmF0b3IgPSBzdGQ6OmZpbmRfaWYoZnVuY3Rpb25EZWZpbml0aW9u
cy5iZWdpbigpLCBmdW5jdGlvbkRlZmluaXRpb25zLmVuZCgpLCBbJl0oQVNUOjpGdW5jdGlvbkRl
ZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbikgeworICAgICAgICByZXR1cm4gZnVuY3Rpb25E
ZWZpbml0aW9uLmVudHJ5UG9pbnRUeXBlKCkgJiYgZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9
PSBuYW1lOworICAgIH0pOworICAgIGlmIChpdGVyYXRvciA9PSBmdW5jdGlvbkRlZmluaXRpb25z
LmVuZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gJippdGVyYXRvcjsK
K307CisKK3N0YXRpYyBib29sIG1hdGNoTW9kZShCaW5kaW5nVHlwZSBiaW5kaW5nVHlwZSwgQVNU
OjpSZXNvdXJjZVNlbWFudGljOjpNb2RlIG1vZGUpCit7CisgICAgc3dpdGNoIChiaW5kaW5nVHlw
ZSkgeworICAgIGNhc2UgQmluZGluZ1R5cGU6OlVuaWZvcm1CdWZmZXI6CisgICAgICAgIHJldHVy
biBtb2RlID09IEFTVDo6UmVzb3VyY2VTZW1hbnRpYzo6TW9kZTo6QnVmZmVyOworICAgIGNhc2Ug
QmluZGluZ1R5cGU6OlNhbXBsZXI6CisgICAgICAgIHJldHVybiBtb2RlID09IEFTVDo6UmVzb3Vy
Y2VTZW1hbnRpYzo6TW9kZTo6U2FtcGxlcjsKKyAgICBjYXNlIEJpbmRpbmdUeXBlOjpUZXh0dXJl
OgorICAgICAgICByZXR1cm4gbW9kZSA9PSBBU1Q6OlJlc291cmNlU2VtYW50aWM6Ok1vZGU6OlRl
eHR1cmU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUKGJpbmRpbmdUeXBlID09IEJpbmRp
bmdUeXBlOjpTdG9yYWdlQnVmZmVyKTsKKyAgICAgICAgcmV0dXJuIG1vZGUgPT0gQVNUOjpSZXNv
dXJjZVNlbWFudGljOjpNb2RlOjpVbm9yZGVyZWRBY2Nlc3NWaWV3OworICAgIH0KK30KKworc3Rh
dGljIE9wdGlvbmFsPEhhc2hNYXA8QmluZGluZyosIHNpemVfdD4+IG1hdGNoUmVzb3VyY2VzKFZl
Y3RvcjxFbnRyeVBvaW50SXRlbT4mIGVudHJ5UG9pbnRJdGVtcywgTGF5b3V0JiBsYXlvdXQsIFNo
YWRlclN0YWdlIHNoYWRlclN0YWdlKQoreworICAgIEhhc2hNYXA8QmluZGluZyosIHNpemVfdD4g
cmVzdWx0OworICAgIEhhc2hTZXQ8c2l6ZV90PiBpdGVtSW5kaWNlczsKKyAgICBpZiAoZW50cnlQ
b2ludEl0ZW1zLnNpemUoKSA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpKQor
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OyAvLyBXb3JrIGFyb3VuZCB0aGUgZmFjdCB0aGF0
IEhhc2hTZXQncyBrZXlzIGFyZSByZXN0cmljdGVkLgorICAgIGZvciAoYXV0byYgYmluZEdyb3Vw
IDogbGF5b3V0KSB7CisgICAgICAgIGF1dG8gc3BhY2UgPSBiaW5kR3JvdXAubmFtZTsKKyAgICAg
ICAgZm9yIChhdXRvJiBiaW5kaW5nIDogYmluZEdyb3VwLmJpbmRpbmdzKSB7CisgICAgICAgICAg
ICBpZiAoIWJpbmRpbmcudmlzaWJpbGl0eS5jb250YWlucyhzaGFkZXJTdGFnZSkpCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGVu
dHJ5UG9pbnRJdGVtcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGl0ZW0g
PSBlbnRyeVBvaW50SXRlbXNbaV07CisgICAgICAgICAgICAgICAgYXV0byYgc2VtYW50aWMgPSAq
aXRlbS5zZW1hbnRpYzsKKyAgICAgICAgICAgICAgICBpZiAoIVdURjo6aG9sZHNfYWx0ZXJuYXRp
dmU8QVNUOjpSZXNvdXJjZVNlbWFudGljPihzZW1hbnRpYykpCisgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGF1dG8mIHJlc291cmNlU2VtYW50aWMgPSBXVEY6
OmdldDxBU1Q6OlJlc291cmNlU2VtYW50aWM+KHNlbWFudGljKTsKKyAgICAgICAgICAgICAgICBp
ZiAoIW1hdGNoTW9kZShiaW5kaW5nLmJpbmRpbmdUeXBlLCByZXNvdXJjZVNlbWFudGljLm1vZGUo
KSkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGlmIChi
aW5kaW5nLm5hbWUgIT0gcmVzb3VyY2VTZW1hbnRpYy5pbmRleCgpKQorICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBpZiAoc3BhY2UgIT0gcmVzb3VyY2VTZW1h
bnRpYy5zcGFjZSgpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
ICAgICByZXN1bHQuYWRkKCZiaW5kaW5nLCBpKTsKKyAgICAgICAgICAgICAgICBpdGVtSW5kaWNl
cy5hZGQoaSArIDEpOyAvLyBXb3JrIGFyb3VuZCB0aGUgZmFjdCB0aGF0IEhhc2hTZXQncyBrZXlz
IGFyZSByZXN0cmljdGVkLgorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBlbnRyeVBvaW50SXRlbXMuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgYXV0byYgaXRlbSA9IGVudHJ5UG9pbnRJdGVtc1tpXTsKKyAgICAgICAgYXV0byYgc2Vt
YW50aWMgPSAqaXRlbS5zZW1hbnRpYzsKKyAgICAgICAgaWYgKCFXVEY6OmhvbGRzX2FsdGVybmF0
aXZlPEFTVDo6UmVzb3VyY2VTZW1hbnRpYz4oc2VtYW50aWMpKQorICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIGlmICghaXRlbUluZGljZXMuY29udGFpbnMoaSArIDEpKQorICAgICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CitzdGF0aWMgYm9vbCBtYXRjaElucHV0c091dHB1dHMoVmVjdG9yPEVudHJ5UG9pbnRJdGVtPiYg
dmVydGV4T3V0cHV0cywgVmVjdG9yPEVudHJ5UG9pbnRJdGVtPiYgZnJhZ21lbnRJbnB1dHMpCit7
CisgICAgZm9yIChhdXRvJiBmcmFnbWVudElucHV0IDogZnJhZ21lbnRJbnB1dHMpIHsKKyAgICAg
ICAgaWYgKCFXVEY6OmhvbGRzX2FsdGVybmF0aXZlPEFTVDo6U3RhZ2VJbk91dFNlbWFudGljPigq
ZnJhZ21lbnRJbnB1dC5zZW1hbnRpYykpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
YXV0byYgZnJhZ21lbnRJbnB1dFN0YWdlSW5PdXRTZW1hbnRpYyA9IFdURjo6Z2V0PEFTVDo6U3Rh
Z2VJbk91dFNlbWFudGljPigqZnJhZ21lbnRJbnB1dC5zZW1hbnRpYyk7CisgICAgICAgIGJvb2wg
Zm91bmQgPSBmYWxzZTsKKyAgICAgICAgZm9yIChhdXRvJiB2ZXJ0ZXhPdXRwdXQgOiB2ZXJ0ZXhP
dXRwdXRzKSB7CisgICAgICAgICAgICBpZiAoIVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8QVNUOjpT
dGFnZUluT3V0U2VtYW50aWM+KCp2ZXJ0ZXhPdXRwdXQuc2VtYW50aWMpKQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgYXV0byYgdmVydGV4T3V0cHV0U3RhZ2VJbk91dFNl
bWFudGljID0gV1RGOjpnZXQ8QVNUOjpTdGFnZUluT3V0U2VtYW50aWM+KCp2ZXJ0ZXhPdXRwdXQu
c2VtYW50aWMpOworICAgICAgICAgICAgaWYgKGZyYWdtZW50SW5wdXRTdGFnZUluT3V0U2VtYW50
aWMuaW5kZXgoKSA9PSB2ZXJ0ZXhPdXRwdXRTdGFnZUluT3V0U2VtYW50aWMuaW5kZXgoKSkgewor
ICAgICAgICAgICAgICAgIGlmIChtYXRjaGVzKCpmcmFnbWVudElucHV0LnVubmFtZWRUeXBlLCAq
dmVydGV4T3V0cHV0LnVubmFtZWRUeXBlKSkgeworICAgICAgICAgICAgICAgICAgICBmb3VuZCA9
IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKCFmb3VuZCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIGlzQWNjZXB0YWJsZUZvcm1hdChWZXJ0ZXhG
b3JtYXQgdmVydGV4Rm9ybWF0LCBBU1Q6OlVubmFtZWRUeXBlJiB1bm5hbWVkVHlwZSwgSW50cmlu
c2ljcyYgaW50cmluc2ljcykKK3sKKyAgICBzd2l0Y2ggKHZlcnRleEZvcm1hdCkgeworICAgIGNh
c2UgVmVydGV4Rm9ybWF0OjpGbG9hdFIzMkczMkIzMkEzMjoKKyAgICAgICAgcmV0dXJuIG1hdGNo
ZXModW5uYW1lZFR5cGUsIGludHJpbnNpY3MuZmxvYXQ0VHlwZSgpKTsKKyAgICBjYXNlIFZlcnRl
eEZvcm1hdDo6RmxvYXRSMzJHMzJCMzI6CisgICAgICAgIHJldHVybiBtYXRjaGVzKHVubmFtZWRU
eXBlLCBpbnRyaW5zaWNzLmZsb2F0M1R5cGUoKSk7CisgICAgY2FzZSBWZXJ0ZXhGb3JtYXQ6OkZs
b2F0UjMyRzMyOgorICAgICAgICByZXR1cm4gbWF0Y2hlcyh1bm5hbWVkVHlwZSwgaW50cmluc2lj
cy5mbG9hdDJUeXBlKCkpOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVCh2ZXJ0ZXhGb3Jt
YXQgPT0gVmVydGV4Rm9ybWF0OjpGbG9hdFIzMik7CisgICAgICAgIHJldHVybiBtYXRjaGVzKHVu
bmFtZWRUeXBlLCBpbnRyaW5zaWNzLmZsb2F0VHlwZSgpKTsKKyAgICB9Cit9CisKK3N0YXRpYyBP
cHRpb25hbDxIYXNoTWFwPFZlcnRleEF0dHJpYnV0ZSosIHNpemVfdD4+IG1hdGNoVmVydGV4QXR0
cmlidXRlcyhWZWN0b3I8RW50cnlQb2ludEl0ZW0+JiB2ZXJ0ZXhJbnB1dHMsIFZlcnRleEF0dHJp
YnV0ZXMmIHZlcnRleEF0dHJpYnV0ZXMsIEludHJpbnNpY3MmIGludHJpbnNpY3MpCit7CisgICAg
SGFzaE1hcDxWZXJ0ZXhBdHRyaWJ1dGUqLCBzaXplX3Q+IHJlc3VsdDsKKyAgICBIYXNoU2V0PHNp
emVfdD4gaXRlbUluZGljZXM7CisgICAgaWYgKHZlcnRleElucHV0cy5zaXplKCkgPT0gc3RkOjpu
dW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsgLy8gV29yayBhcm91bmQgdGhlIGZhY3QgdGhhdCBIYXNoU2V0J3Mga2V5cyBhcmUgcmVzdHJp
Y3RlZC4KKyAgICBmb3IgKGF1dG8mIHZlcnRleEF0dHJpYnV0ZSA6IHZlcnRleEF0dHJpYnV0ZXMp
IHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2ZXJ0ZXhJbnB1dHMuc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgICAgIGF1dG8mIGl0ZW0gPSB2ZXJ0ZXhJbnB1dHNbaV07CisgICAgICAg
ICAgICBhdXRvJiBzZW1hbnRpYyA9ICppdGVtLnNlbWFudGljOworICAgICAgICAgICAgaWYgKCFX
VEY6OmhvbGRzX2FsdGVybmF0aXZlPEFTVDo6U3RhZ2VJbk91dFNlbWFudGljPihzZW1hbnRpYykp
CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBhdXRvJiBzdGFnZUluT3V0
U2VtYW50aWMgPSBXVEY6OmdldDxBU1Q6OlN0YWdlSW5PdXRTZW1hbnRpYz4oc2VtYW50aWMpOwor
ICAgICAgICAgICAgaWYgKHN0YWdlSW5PdXRTZW1hbnRpYy5pbmRleCgpICE9IHZlcnRleEF0dHJp
YnV0ZS5uYW1lKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKCFp
c0FjY2VwdGFibGVGb3JtYXQodmVydGV4QXR0cmlidXRlLnZlcnRleEZvcm1hdCwgKml0ZW0udW5u
YW1lZFR5cGUsIGludHJpbnNpY3MpKQorICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CisgICAgICAgICAgICByZXN1bHQuYWRkKCZ2ZXJ0ZXhBdHRyaWJ1dGUsIGkpOworICAgICAg
ICAgICAgaXRlbUluZGljZXMuYWRkKGkgKyAxKTsgLy8gV29yayBhcm91bmQgdGhlIGZhY3QgdGhh
dCBIYXNoU2V0J3Mga2V5cyBhcmUgcmVzdHJpY3RlZC4KKyAgICAgICAgfQorICAgIH0KKworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmVydGV4SW5wdXRzLnNpemUoKTsgKytpKSB7CisgICAg
ICAgIGF1dG8mIGl0ZW0gPSB2ZXJ0ZXhJbnB1dHNbaV07CisgICAgICAgIGF1dG8mIHNlbWFudGlj
ID0gKml0ZW0uc2VtYW50aWM7CisgICAgICAgIGlmICghV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxB
U1Q6OlN0YWdlSW5PdXRTZW1hbnRpYz4oc2VtYW50aWMpKQorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIGlmICghaXRlbUluZGljZXMuY29udGFpbnMoaSArIDEpKQorICAgICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitz
dGF0aWMgYm9vbCBpc0FjY2VwdGFibGVGb3JtYXQoVGV4dHVyZUZvcm1hdCB0ZXh0dXJlRm9ybWF0
LCBBU1Q6OlVubmFtZWRUeXBlJiB1bm5hbWVkVHlwZSwgSW50cmluc2ljcyYgaW50cmluc2ljcywg
Ym9vbCBpc0NvbG9yKQoreworICAgIGlmIChpc0NvbG9yKSB7CisgICAgICAgIHN3aXRjaCAodGV4
dHVyZUZvcm1hdCkgeworICAgICAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OlI4RzhCOEE4VW5vcm06
CisgICAgICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6UjhHOEI4QThVaW50OgorICAgICAgICBjYXNl
IFRleHR1cmVGb3JtYXQ6OkI4RzhSOEE4VW5vcm06CisgICAgICAgICAgICByZXR1cm4gbWF0Y2hl
cyh1bm5hbWVkVHlwZSwgaW50cmluc2ljcy5mbG9hdDRUeXBlKCkpOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgQVNTRVJUKHRleHR1cmVGb3JtYXQgPT0gVGV4dHVyZUZvcm1hdDo6RDMy
RmxvYXRTOFVpbnQpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
fQorICAgIHJldHVybiB0ZXh0dXJlRm9ybWF0ID09IFRleHR1cmVGb3JtYXQ6OkQzMkZsb2F0UzhV
aW50ICYmIG1hdGNoZXModW5uYW1lZFR5cGUsIGludHJpbnNpY3MuZmxvYXRUeXBlKCkpOworfQor
CitzdGF0aWMgT3B0aW9uYWw8SGFzaE1hcDxBdHRhY2htZW50RGVzY3JpcHRvciosIHNpemVfdD4+
IG1hdGNoQ29sb3JBdHRhY2htZW50cyhWZWN0b3I8RW50cnlQb2ludEl0ZW0+JiBmcmFnbWVudE91
dHB1dHMsIFZlY3RvcjxBdHRhY2htZW50RGVzY3JpcHRvcj4mIGF0dGFjaG1lbnREZXNjcmlwdG9y
cywgSW50cmluc2ljcyYgaW50cmluc2ljcykKK3sKKyAgICBIYXNoTWFwPEF0dGFjaG1lbnREZXNj
cmlwdG9yKiwgc2l6ZV90PiByZXN1bHQ7CisgICAgSGFzaFNldDxzaXplX3Q+IGl0ZW1JbmRpY2Vz
OworICAgIGlmIChhdHRhY2htZW50RGVzY3JpcHRvcnMuc2l6ZSgpID09IHN0ZDo6bnVtZXJpY19s
aW1pdHM8c2l6ZV90Pjo6bWF4KCkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7IC8vIFdv
cmsgYXJvdW5kIHRoZSBmYWN0IHRoYXQgSGFzaFNldCdzIGtleXMgYXJlIHJlc3RyaWN0ZWQuCisg
ICAgZm9yIChhdXRvJiBhdHRhY2htZW50RGVzY3JpcHRvciA6IGF0dGFjaG1lbnREZXNjcmlwdG9y
cykgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZyYWdtZW50T3V0cHV0cy5zaXpl
KCk7ICsraSkgeworICAgICAgICAgICAgYXV0byYgaXRlbSA9IGZyYWdtZW50T3V0cHV0c1tpXTsK
KyAgICAgICAgICAgIGF1dG8mIHNlbWFudGljID0gKml0ZW0uc2VtYW50aWM7CisgICAgICAgICAg
ICBpZiAoIVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8QVNUOjpTdGFnZUluT3V0U2VtYW50aWM+KHNl
bWFudGljKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGF1dG8mIHN0
YWdlSW5PdXRTZW1hbnRpYyA9IFdURjo6Z2V0PEFTVDo6U3RhZ2VJbk91dFNlbWFudGljPihzZW1h
bnRpYyk7CisgICAgICAgICAgICBpZiAoc3RhZ2VJbk91dFNlbWFudGljLmluZGV4KCkgIT0gYXR0
YWNobWVudERlc2NyaXB0b3IubmFtZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIGlmICghaXNBY2NlcHRhYmxlRm9ybWF0KGF0dGFjaG1lbnREZXNjcmlwdG9yLnRleHR1
cmVGb3JtYXQsICppdGVtLnVubmFtZWRUeXBlLCBpbnRyaW5zaWNzLCB0cnVlKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICAgICAgcmVzdWx0LmFkZCgmYXR0
YWNobWVudERlc2NyaXB0b3IsIGkpOworICAgICAgICAgICAgaXRlbUluZGljZXMuYWRkKGkgKyAx
KTsgLy8gV29yayBhcm91bmQgdGhlIGZhY3QgdGhhdCBIYXNoU2V0J3Mga2V5cyBhcmUgcmVzdHJp
Y3RlZC4KKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnJh
Z21lbnRPdXRwdXRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGF1dG8mIGl0ZW0gPSBmcmFnbWVu
dE91dHB1dHNbaV07CisgICAgICAgIGF1dG8mIHNlbWFudGljID0gKml0ZW0uc2VtYW50aWM7Cisg
ICAgICAgIGlmICghV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxBU1Q6OlN0YWdlSW5PdXRTZW1hbnRp
Yz4oc2VtYW50aWMpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmICghaXRlbUlu
ZGljZXMuY29udGFpbnMoaSArIDEpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
KyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgYm9vbCBtYXRjaERlcHRo
QXR0YWNobWVudChWZWN0b3I8RW50cnlQb2ludEl0ZW0+JiBmcmFnbWVudE91dHB1dHMsIE9wdGlv
bmFsPEF0dGFjaG1lbnREZXNjcmlwdG9yPiYgZGVwdGhTdGVuY2lsQXR0YWNobWVudERlc2NyaXB0
b3IsIEludHJpbnNpY3MmIGludHJpbnNpY3MpCit7CisgICAgYXV0byBpdGVyYXRvciA9IHN0ZDo6
ZmluZF9pZihmcmFnbWVudE91dHB1dHMuYmVnaW4oKSwgZnJhZ21lbnRPdXRwdXRzLmVuZCgpLCBb
Jl0oRW50cnlQb2ludEl0ZW0mIGl0ZW0pIHsKKyAgICAgICAgYXV0byYgc2VtYW50aWMgPSAqaXRl
bS5zZW1hbnRpYzsKKyAgICAgICAgaWYgKCFXVEY6OmhvbGRzX2FsdGVybmF0aXZlPEFTVDo6QnVp
bHRJblNlbWFudGljPihzZW1hbnRpYykpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIGF1dG8mIGJ1aWx0SW5TZW1hbnRpYyA9IFdURjo6Z2V0PEFTVDo6QnVpbHRJblNlbWFudGlj
PihzZW1hbnRpYyk7CisgICAgICAgIHJldHVybiBidWlsdEluU2VtYW50aWMudmFyaWFibGUoKSA9
PSBBU1Q6OkJ1aWx0SW5TZW1hbnRpYzo6VmFyaWFibGU6OlNWRGVwdGg7CisgICAgfSk7CisgICAg
aWYgKGl0ZXJhdG9yID09IGZyYWdtZW50T3V0cHV0cy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisKKyAgICBpZiAoZGVwdGhTdGVuY2lsQXR0YWNobWVudERlc2NyaXB0b3IpIHsKKyAgICAg
ICAgQVNTRVJUKCFkZXB0aFN0ZW5jaWxBdHRhY2htZW50RGVzY3JpcHRvci0+bmFtZSk7CisgICAg
ICAgIHJldHVybiBpc0FjY2VwdGFibGVGb3JtYXQoZGVwdGhTdGVuY2lsQXR0YWNobWVudERlc2Ny
aXB0b3ItPnRleHR1cmVGb3JtYXQsICppdGVyYXRvci0+dW5uYW1lZFR5cGUsIGludHJpbnNpY3Ms
IGZhbHNlKTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitPcHRpb25hbDxNYXRjaGVk
UmVuZGVyU2VtYW50aWNzPiBtYXRjaFNlbWFudGljcyhQcm9ncmFtJiBwcm9ncmFtLCBSZW5kZXJQ
aXBlbGluZURlc2NyaXB0b3ImIHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcikKK3sKKyAgICBhdXRv
IHZlcnRleFNoYWRlckVudHJ5UG9pbnQgPSBmaW5kRW50cnlQb2ludChwcm9ncmFtLmZ1bmN0aW9u
RGVmaW5pdGlvbnMoKSwgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yLnZlcnRleEVudHJ5UG9pbnRO
YW1lKTsKKyAgICBhdXRvIGZyYWdtZW50U2hhZGVyRW50cnlQb2ludCA9IGZpbmRFbnRyeVBvaW50
KHByb2dyYW0uZnVuY3Rpb25EZWZpbml0aW9ucygpLCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3Iu
ZnJhZ21lbnRFbnRyeVBvaW50TmFtZSk7CisgICAgaWYgKCF2ZXJ0ZXhTaGFkZXJFbnRyeVBvaW50
IHx8ICFmcmFnbWVudFNoYWRlckVudHJ5UG9pbnQpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CisgICAgYXV0byB2ZXJ0ZXhTaGFkZXJFbnRyeVBvaW50SXRlbXMgPSBnYXRoZXJFbnRyeVBv
aW50SXRlbXMocHJvZ3JhbS5pbnRyaW5zaWNzKCksICp2ZXJ0ZXhTaGFkZXJFbnRyeVBvaW50KTsK
KyAgICBhdXRvIGZyYWdtZW50U2hhZGVyRW50cnlQb2ludEl0ZW1zID0gZ2F0aGVyRW50cnlQb2lu
dEl0ZW1zKHByb2dyYW0uaW50cmluc2ljcygpLCAqZnJhZ21lbnRTaGFkZXJFbnRyeVBvaW50KTsK
KyAgICBpZiAoIXZlcnRleFNoYWRlckVudHJ5UG9pbnRJdGVtcyB8fCAhZnJhZ21lbnRTaGFkZXJF
bnRyeVBvaW50SXRlbXMpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgYXV0byB2
ZXJ0ZXhTaGFkZXJSZXNvdXJjZU1hcCA9IG1hdGNoUmVzb3VyY2VzKHZlcnRleFNoYWRlckVudHJ5
UG9pbnRJdGVtcy0+aW5wdXRzLCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IubGF5b3V0LCBTaGFk
ZXJTdGFnZTo6VmVydGV4KTsKKyAgICBhdXRvIGZyYWdtZW50U2hhZGVyUmVzb3VyY2VNYXAgPSBt
YXRjaFJlc291cmNlcyhmcmFnbWVudFNoYWRlckVudHJ5UG9pbnRJdGVtcy0+aW5wdXRzLCByZW5k
ZXJQaXBlbGluZURlc2NyaXB0b3IubGF5b3V0LCBTaGFkZXJTdGFnZTo6RnJhZ21lbnQpOworICAg
IGlmICghdmVydGV4U2hhZGVyUmVzb3VyY2VNYXAgfHwgIWZyYWdtZW50U2hhZGVyUmVzb3VyY2VN
YXApCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgaWYgKCFtYXRjaElucHV0c091
dHB1dHModmVydGV4U2hhZGVyRW50cnlQb2ludEl0ZW1zLT5vdXRwdXRzLCBmcmFnbWVudFNoYWRl
ckVudHJ5UG9pbnRJdGVtcy0+aW5wdXRzKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
KyAgICBhdXRvIG1hdGNoZWRWZXJ0ZXhBdHRyaWJ1dGVzID0gbWF0Y2hWZXJ0ZXhBdHRyaWJ1dGVz
KHZlcnRleFNoYWRlckVudHJ5UG9pbnRJdGVtcy0+aW5wdXRzLCByZW5kZXJQaXBlbGluZURlc2Ny
aXB0b3IudmVydGV4QXR0cmlidXRlcywgcHJvZ3JhbS5pbnRyaW5zaWNzKCkpOworICAgIGlmICgh
bWF0Y2hlZFZlcnRleEF0dHJpYnV0ZXMpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cisg
ICAgYXV0byBtYXRjaGVkQ29sb3JBdHRhY2htZW50cyA9IG1hdGNoQ29sb3JBdHRhY2htZW50cyhm
cmFnbWVudFNoYWRlckVudHJ5UG9pbnRJdGVtcy0+b3V0cHV0cywgcmVuZGVyUGlwZWxpbmVEZXNj
cmlwdG9yLmF0dGFjaG1lbnRzU3RhdGVEZXNjcmlwdG9yLmF0dGFjaG1lbnREZXNjcmlwdG9ycywg
cHJvZ3JhbS5pbnRyaW5zaWNzKCkpOworICAgIGlmICghbWF0Y2hlZENvbG9yQXR0YWNobWVudHMp
CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgaWYgKCFtYXRjaERlcHRoQXR0YWNo
bWVudChmcmFnbWVudFNoYWRlckVudHJ5UG9pbnRJdGVtcy0+b3V0cHV0cywgcmVuZGVyUGlwZWxp
bmVEZXNjcmlwdG9yLmF0dGFjaG1lbnRzU3RhdGVEZXNjcmlwdG9yLmRlcHRoU3RlbmNpbEF0dGFj
aG1lbnREZXNjcmlwdG9yLCBwcm9ncmFtLmludHJpbnNpY3MoKSkpCisgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIHt7IHZlcnRleFNoYWRlckVudHJ5UG9pbnQsIGZyYWdt
ZW50U2hhZGVyRW50cnlQb2ludCwgKnZlcnRleFNoYWRlckVudHJ5UG9pbnRJdGVtcywgKmZyYWdt
ZW50U2hhZGVyRW50cnlQb2ludEl0ZW1zLCAqdmVydGV4U2hhZGVyUmVzb3VyY2VNYXAsICpmcmFn
bWVudFNoYWRlclJlc291cmNlTWFwLCAqbWF0Y2hlZFZlcnRleEF0dHJpYnV0ZXMsICptYXRjaGVk
Q29sb3JBdHRhY2htZW50cyB9fTsKK30KKworT3B0aW9uYWw8TWF0Y2hlZENvbXB1dGVTZW1hbnRp
Y3M+IG1hdGNoU2VtYW50aWNzKFByb2dyYW0mIHByb2dyYW0sIENvbXB1dGVQaXBlbGluZURlc2Ny
aXB0b3ImIGNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IpCit7CisgICAgYXV0byBlbnRyeVBvaW50
ID0gZmluZEVudHJ5UG9pbnQocHJvZ3JhbS5mdW5jdGlvbkRlZmluaXRpb25zKCksIGNvbXB1dGVQ
aXBlbGluZURlc2NyaXB0b3IuZW50cnlQb2ludE5hbWUpOworICAgIGlmICghZW50cnlQb2ludCkK
KyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBhdXRvIGVudHJ5UG9pbnRJdGVtcyA9
IGdhdGhlckVudHJ5UG9pbnRJdGVtcyhwcm9ncmFtLmludHJpbnNpY3MoKSwgKmVudHJ5UG9pbnQp
OworICAgIGlmICghZW50cnlQb2ludEl0ZW1zKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworICAgIEFTU0VSVChlbnRyeVBvaW50SXRlbXMtPm91dHB1dHMuaXNFbXB0eSgpKTsKKyAgICBh
dXRvIHJlc291cmNlTWFwID0gbWF0Y2hSZXNvdXJjZXMoZW50cnlQb2ludEl0ZW1zLT5pbnB1dHMs
IGNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IubGF5b3V0LCBTaGFkZXJTdGFnZTo6Q29tcHV0ZSk7
CisgICAgaWYgKCFyZXNvdXJjZU1hcCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAg
ICByZXR1cm4ge3sgZW50cnlQb2ludCwgKmVudHJ5UG9pbnRJdGVtcywgKnJlc291cmNlTWFwIH19
OworfQorCit9IC8vIG5hbWVzcGFjZSBXSExTTAorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBFTkFCTEUoV0VCR1BVKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTZW1hbnRpY01hdGNoZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU2VtYW50aWNNYXRjaGVyLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YmRmZjRiYmZmNzg4MDg0Zjc3ZGM2ZTY4ZGFlY2Q2ODk3Y2IxY2M3MAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU2VtYW50aWNNYXRj
aGVyLmgKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYg
RU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldITFNMR2F0aGVyRW50cnlQb2ludEl0ZW1zLmgi
CisjaW5jbHVkZSAiV0hMU0xQaXBlbGluZURlc2NyaXB0b3IuaCIKKyNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2Ns
YXNzIFByb2dyYW07CisKK3N0cnVjdCBNYXRjaGVkUmVuZGVyU2VtYW50aWNzIHsKKyAgICBBU1Q6
OkZ1bmN0aW9uRGVmaW5pdGlvbiogdmVydGV4U2hhZGVyOworICAgIEFTVDo6RnVuY3Rpb25EZWZp
bml0aW9uKiBmcmFnbWVudFNoYWRlcjsKKyAgICBFbnRyeVBvaW50SXRlbXMgdmVydGV4U2hhZGVy
RW50cnlQb2ludEl0ZW1zOworICAgIEVudHJ5UG9pbnRJdGVtcyBmcmFnbWVudFNoYWRlckVudHJ5
UG9pbnRJdGVtczsKKyAgICBIYXNoTWFwPEJpbmRpbmcqLCBzaXplX3Q+IHZlcnRleFNoYWRlclJl
c291cmNlTWFwOworICAgIEhhc2hNYXA8QmluZGluZyosIHNpemVfdD4gZnJhZ21lbnRTaGFkZXJS
ZXNvdXJjZU1hcDsKKyAgICBIYXNoTWFwPFZlcnRleEF0dHJpYnV0ZSosIHNpemVfdD4gbWF0Y2hl
ZFZlcnRleEF0dHJpYnV0ZXM7CisgICAgSGFzaE1hcDxBdHRhY2htZW50RGVzY3JpcHRvciosIHNp
emVfdD4gbWF0Y2hlZENvbG9yQXR0YWNobWVudHM7Cit9OworCitPcHRpb25hbDxNYXRjaGVkUmVu
ZGVyU2VtYW50aWNzPiBtYXRjaFNlbWFudGljcyhQcm9ncmFtJiwgUmVuZGVyUGlwZWxpbmVEZXNj
cmlwdG9yJik7CisKK3N0cnVjdCBNYXRjaGVkQ29tcHV0ZVNlbWFudGljcyB7CisgICAgQVNUOjpG
dW5jdGlvbkRlZmluaXRpb24qIHNoYWRlcjsKKyAgICBFbnRyeVBvaW50SXRlbXMgZW50cnlQb2lu
dEl0ZW1zOworICAgIEhhc2hNYXA8QmluZGluZyosIHNpemVfdD4gcmVzb3VyY2VNYXA7Cit9Owor
CitPcHRpb25hbDxNYXRjaGVkQ29tcHV0ZVNlbWFudGljcz4gbWF0Y2hTZW1hbnRpY3MoUHJvZ3Jh
bSYsIENvbXB1dGVQaXBlbGluZURlc2NyaXB0b3ImKTsKKworfSAvLyBuYW1lc3BhY2UgV0hMU0wK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdQVSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291
cmNlcy50eHQKaW5kZXggYjU3NWU2OGJmZmJhYmFlOTIxNjUwZDRhOWJmNmM0MjUzMWExZDc5Ni4u
ODQxNTc3MDMxOTgxYTY3MDZiMzRlZTMxMWYzMDA3N2M3NTQyYWJlYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQK
QEAgLTMyNCw2ICszMjQsNyBAQCBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZl
ci5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5jcHAK
IE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVjdXJzaW9uQ2hlY2tlci5jcHAKIE1vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMVmlzaXRvci5jcHAKK01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
U2VtYW50aWNNYXRjaGVyLmNwcAogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xMaXRlcmFsVHlw
ZUNoZWNrZXIuY3BwCiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEhpZ2hab21iaWVGaW5kZXIu
Y3BwCiBNb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTFR5cGVOYW1lci5jcHAKQEAgLTM0
Niw2ICszNDcsNyBAQCBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbnNpZ25lZEludGVn
ZXJMaXRlcmFsVHlwZS5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFR5cGVSZWZl
cmVuY2UuY3BwCiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJhbC5j
cHAKIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWwu
Y3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3BwCiBNb2R1bGVzL3dlYmdw
dS9XZWJHUFUuY3BwCiBNb2R1bGVzL3dlYmdwdS9XZWJHUFVCaW5kR3JvdXAuY3BwCiBNb2R1bGVz
L3dlYmdwdS9XZWJHUFVCaW5kR3JvdXBEZXNjcmlwdG9yLmNwcApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDhmMDkwOWIwM2UwMzUz
ZDQwOTgwYWQxNjRkY2M2MTkyYzViYzUyYTkuLjFmMjZjMzkxMzhjYWZlOTc5YmM1NjIyOTc1OTNi
NjE2MjRmZDA5YTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTEzNDMxLDYgKzEzNDMxLDEyIEBACiAJCUMyMzRBOUI2MjFFOTJD
QzAwMDNDOTg0RCAvKiBXSExTTEludHJpbnNpY3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xJbnRy
aW5zaWNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMzRBOUI3MjFFOTJDQzEw
MDNDOTg0RCAvKiBXSExTTEludHJpbnNpY3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xJ
bnRyaW5zaWNzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzI0NThFNjExRkU4
OTc5RTAwNTk0NzU5IC8qIEZvbnRDYWNoZUNvcmVUZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnRD
YWNoZUNvcmVUZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyNEE1N0FGMjFG
QUQ1M0YwMDRDNkREMSAvKiBXSExTTFBpcGVsaW5lRGVzY3JpcHRvci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXSExTTFBpcGVsaW5lRGVzY3JpcHRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlDMjRBNTdCMjIxRkI4RERBMDA0QzZERDEgLyogV0hMU0xTZW1hbnRpY01hdGNoZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xTZW1hbnRpY01hdGNoZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlDMjRBNTdCMzIxRkI4RERBMDA0QzZERDEgLyogV0hMU0xTZW1hbnRp
Y01hdGNoZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xTZW1hbnRpY01hdGNoZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzI0QTU3QkEyMUZFQUZFQTAwNEM2REQxIC8qIFdITFNM
UHJlcGFyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTFByZXBhcmUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlDMjRBNTdCQjIxRkVBRkVBMDA0QzZERDEgLyogV0hMU0xQ
cmVwYXJlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMUHJlcGFyZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlDMjRBNTdCRTIxRkVDNjVDMDA0QzZERDEgLyogV0hMU0xNYXBwZWRCaW5k
aW5ncy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTE1hcHBlZEJpbmRpbmdzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUMyNjAxN0ExMUM3MkRDOTkwMEY3NEExNiAvKiBDU1NGb250RmFj
ZVNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NGb250RmFj
ZVNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyNjAxN0EyMUM3MkRDOTkw
MEY3NEExNiAvKiBDU1NGb250RmFjZVNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBDU1NGb250RmFjZVNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjgw
ODMzQzFDNkRCMTk0MDAxNDUxQjYgLyogRm9udEZhY2UuaWRsICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0
aCA9IEZvbnRGYWNlLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE3MjE3LDYg
KzE3MjIzLDcgQEAKIAkJCQkxQ0VDQjNCQjIxRjUxMUFBMDBGNDQ1NDIgLyogV0hMU0xFbnRyeVBv
aW50U2NhZmZvbGRpbmcuaCAqLywKIAkJCQkxQ0VDQjNBRjIxRjJCOTg0MDBGNDQ1NDIgLyogV0hM
U0xGdW5jdGlvbldyaXRlci5jcHAgKi8sCiAJCQkJMUNFQ0IzQjIyMUYyQjk4NjAwRjQ0NTQyIC8q
IFdITFNMRnVuY3Rpb25Xcml0ZXIuaCAqLywKKwkJCQlDMjRBNTdCRTIxRkVDNjVDMDA0QzZERDEg
LyogV0hMU0xNYXBwZWRCaW5kaW5ncy5oICovLAogCQkJCTFDRUNCM0I1MjFGNTBBQzcwMEY0NDU0
MiAvKiBXSExTTE1ldGFsQ29kZUdlbmVyYXRvci5jcHAgKi8sCiAJCQkJMUNFQ0IzQjYyMUY1MEFD
NzAwRjQ0NTQyIC8qIFdITFNMTWV0YWxDb2RlR2VuZXJhdG9yLmggKi8sCiAJCQkJMUNFQ0IzQjgy
MUY1MEQxMDAwRjQ0NTQyIC8qIFdITFNMTmF0aXZlRnVuY3Rpb25Xcml0ZXIuY3BwICovLApAQCAt
MjU2OTYsNiArMjU3MDMsOSBAQAogCQkJCUMyMzRBOThDMjFFODg4M0UwMDNDOTg0RCAvKiBXSExT
TE5hbWVSZXNvbHZlci5oICovLAogCQkJCUMyMUJGNzM3MjFDRDhBMDIwMDIyNzk3OSAvKiBXSExT
TFBhcnNlci5jcHAgKi8sCiAJCQkJQzIxQkY3MzgyMUNEOEEwMzAwMjI3OTc5IC8qIFdITFNMUGFy
c2VyLmggKi8sCisJCQkJQzI0QTU3QUYyMUZBRDUzRjAwNEM2REQxIC8qIFdITFNMUGlwZWxpbmVE
ZXNjcmlwdG9yLmggKi8sCisJCQkJQzI0QTU3QkEyMUZFQUZFQTAwNEM2REQxIC8qIFdITFNMUHJl
cGFyZS5jcHAgKi8sCisJCQkJQzI0QTU3QkIyMUZFQUZFQTAwNEM2REQxIC8qIFdITFNMUHJlcGFy
ZS5oICovLAogCQkJCUMyMUJGNzNBMjFDRDhENzAwMDIyNzk3OSAvKiBXSExTTFByb2dyYW0uaCAq
LywKIAkJCQkxQ0EwQzJFMDIxRUVCNUY1MDBBMTE4NjAgLyogV0hMU0xSZWN1cnNpb25DaGVja2Vy
LmNwcCAqLywKIAkJCQkxQ0EwQzJERTIxRUVCNUY0MDBBMTE4NjAgLyogV0hMU0xSZWN1cnNpb25D
aGVja2VyLmggKi8sCkBAIC0yNTcwNCw2ICsyNTcxNCw4IEBACiAJCQkJQzIzNEE5OTkyMUU5MEYy
OTAwM0M5ODREIC8qIFdITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5jcHAgKi8sCiAJCQkJQzIzNEE5
OTcyMUU5MEYyODAwM0M5ODREIC8qIFdITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5oICovLAogCQkJ
CUMyMzRBOTlEMjFFOTEwQkQwMDNDOTg0RCAvKiBXSExTTFJlc29sdmluZ1R5cGUuaCAqLywKKwkJ
CQlDMjRBNTdCMjIxRkI4RERBMDA0QzZERDEgLyogV0hMU0xTZW1hbnRpY01hdGNoZXIuY3BwICov
LAorCQkJCUMyNEE1N0IzMjFGQjhEREEwMDRDNkREMSAvKiBXSExTTFNlbWFudGljTWF0Y2hlci5o
ICovLAogCQkJCUMyMUJGNzQ1MjFDRDk2OTgwMDIyNzk3OSAvKiBXSExTTFN0YW5kYXJkTGlicmFy
eS50eHQgKi8sCiAJCQkJMUNFQ0IzQTkyMUYyQjY3MzAwRjQ0NTQyIC8qIFdITFNMU3RhdGVtZW50
QmVoYXZpb3JDaGVja2VyLmNwcCAqLywKIAkJCQkxQ0VDQjNBODIxRjJCNjczMDBGNDQ1NDIgLyog
V0hMU0xTdGF0ZW1lbnRCZWhhdmlvckNoZWNrZXIuaCAqLywK
</data>

          </attachment>
      

    </bug>

</bugzilla>