<?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>217565</bug_id>
          
          <creation_ts>2020-10-10 21:28:07 -0700</creation_ts>
          <short_desc>IPC testing JS API should expose a reply and describe the list of arguments for each message</short_desc>
          <delta_ts>2020-10-14 18:44:06 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</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>
          <dependson>217728</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>annulen</cc>
    
    <cc>beidson</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fujii</cc>
    
    <cc>ggaren</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1696568</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-10-10 21:28:07 -0700</bug_when>
    <thetext>JS API added in https://trac.webkit.org/r268239 to test IPC should wait &amp; decode the reply and expose it as JS objects.
We should also describe the list of arguments for each IPC message.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1696569</commentid>
    <comment_count>1</comment_count>
      <attachid>411029</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-10-10 21:29:46 -0700</bug_when>
    <thetext>Created attachment 411029
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1696796</commentid>
    <comment_count>2</comment_count>
      <attachid>411099</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-10-12 00:22:52 -0700</bug_when>
    <thetext>Created attachment 411099
WIP2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1697357</commentid>
    <comment_count>3</comment_count>
      <attachid>411242</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-10-13 13:09:32 -0700</bug_when>
    <thetext>Created attachment 411242
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1697360</commentid>
    <comment_count>4</comment_count>
      <attachid>411242</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2020-10-13 13:16:15 -0700</bug_when>
    <thetext>Comment on attachment 411242
Patch

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

r=me

&gt; Source/WebKit/WebProcess/WebPage/IPCTestingAPI.cpp:151
&gt; +        { &quot;sessionID&quot;, sessionID, 0, kJSPropertyAttributeDontDelete | kJSPropertyAttributeReadOnly },
&gt; +        { &quot;pageIdentifier&quot;, pageIdentifier, 0, kJSPropertyAttributeDontDelete | kJSPropertyAttributeReadOnly },

How about naming these sessionID and pageID, to keep our JavaScript code consistent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1697372</commentid>
    <comment_count>5</comment_count>
      <attachid>411242</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-10-13 13:32:04 -0700</bug_when>
    <thetext>Comment on attachment 411242
Patch

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

&gt;&gt; Source/WebKit/WebProcess/WebPage/IPCTestingAPI.cpp:151
&gt;&gt; +        { &quot;pageIdentifier&quot;, pageIdentifier, 0, kJSPropertyAttributeDontDelete | kJSPropertyAttributeReadOnly },
&gt; 
&gt; How about naming these sessionID and pageID, to keep our JavaScript code consistent.

I guess we&apos;d also rename frameIdentifier to frameID in that case.

&gt; Source/WebKit/WebProcess/WebPage/IPCTestingAPI.cpp:564
&gt; +        returnValue = JSObjectMakeDeferredPromise(context, &amp;resolve, &amp;reject, exception);

Hm... Mojave complains that I&apos;m using this even though I have a local build of WebKit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1697374</commentid>
    <comment_count>6</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2020-10-13 13:33:32 -0700</bug_when>
    <thetext>EWS is angry:

CompileC /Volumes/Data/worker/macOS-Mojave-Debug-Build-EWS/build/WebKitBuild/WebKit.build/Debug/WebKit.build/Objects-normal/x86_64/UnifiedSource76.o /Volumes/Data/worker/macOS-Mojave-Debug-Build-EWS/build/WebKitBuild/Debug/DerivedSources/WebKit2/unified-sources/Unifi
edSource76.cpp normal x86_64 c++ com.apple.compilers.llvm.clang.1_0.compiler
    cd /Volumes/Data/worker/macOS-Mojave-Debug-Build-EWS/build/Source/WebKit
    export LANG=en_US.US-ASCII
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -x c++ -arch x86_64 -fmessage-length=0 -fdiagnostics-show-note-include-stack -fmacro-backtrace-limit=0 -std=gnu++1z -stdlib=libc++ -gmodules -Wno-trigraphs -fno-exceptions -fno-rtti -fno-sanitize=vptr -fpascal-strings -O0 -fno-common -Werror -Wno-missing-field-initializers -Wmissing-prototypes -Wunreachable-code -Wnon-virtual-dtor -Wno-overloaded-virtual -Wno-exit-time-destructors -Wno-missing-braces -Wparentheses -Wswitch -Wunused-function -Wno-unused-label -Wno-unused-parameter -Wunused-variable -Wunused-value -Wempty-body -Wuninitialized -Wno-unknown-pragmas -Wno-shadow -Wno-four-char-constants -Wno-conversion -Wconstant-conversion -Wint-conversion -Wbool-conversion -Wenum-conversion -Wno-float-conversion -Wnon-literal-null-conversion -Wobjc-literal-conversion -Wsign-compare -Wno-shorten-64-to-32 -Wnewline-eof -Wno-c++11-extensions -DENABLE_EXPERIMENTAL_FEATURES -DHAVE_CORE_PREDICTION -DFRAMEWORK_NAME=WebKit -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk -fasm-blocks -fstrict-aliasing -Wdeprecated-declarations -Winvalid-offsetof -mmacosx-version-min=10.14 -g -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -Wno-sign-conversion -Winfinite-recursion -Wmove -Wcomma -Wblock-capture-autoreleasing -Wstrict-prototypes -Wrange-loop-analysis -Wno-semicolon-before-method-body -iquote /Volumes/Data/worker/macOS-Mojave-Debug-Build-EWS/build/WebKitBuild/WebKit.build/Debug/WebKit.build/WebKit-generated-files.hmap -I/Volumes/Data/worker/macOS-Mojave-Debug-Build-EWS/build/WebKitBuild/WebKit.build/Debug/WebKit.build/WebKit-own-target-headers.hmap -I/Volumes/Data/worker/macOS-Mojave-Debug-Build-EWS/build/WebKitBuild/WebKit.build/Debug/WebKit.build/WebKit-all-target-headers.hmap -iquote /Volumes/Data/worker/macOS-Mojave-Debug-Build-EWS/build/WebKitBuild/WebKit.build/Debug/WebKit.build/WebKit-project-headers.hmap -I/Volumes/Data/worker/macOS-Mojave-Debug-Build-EWS/build/WebKitBuild/Debug/include -I/Volumes/Data/worker/macOS-Mojave-Debug-Build-EWS/build/WebKitBuild/Debug/usr/local/include -I/Volumes/Data/worker/macOS-Mojave-Debug-Build-EWS/build/WebKitBuild/Debug/WebCore.framework/PrivateHeaders/ForwardingHeaders -I/Volumes/Data/worker/macOS-Mojave-Debug-Build-EWS/build/WebKitBuild/Debug/DerivedSources/WebKit2 -I/Volumes/Data/worker/macOS-Mojave-Debug-Build-EWS/build/WebKitBuild/Debug/usr/local/include/WebKitAdditions -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/usr/local/include/WebKitAdditions -I/Volumes/Data/worker/macOS-Mojave-Debug-Build-EWS/build/WebKitBuild/Debug/usr/local/include/webrtc -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/usr/local/include/webrtc -I/Volumes/Data/worker/macOS-Mojave-Debug-Build-EWS/build/Source/WebKit -I/Volumes/Data/worker/macOS-Mojave-Debug-Build-EWS/build/WebKitBuild/WebKit.build/Debug/WebKit.build/DerivedSources-normal/x86_64 -I/Volumes/Data/worker/macOS-Mojave-Debug-Build-EWS/build/WebKitBuild/WebKit.build/Debug/WebKit.build/DerivedSources/x86_64 -I/Volumes/Data/worker/macOS-Mojave-Debug-Build-EWS/build/WebKitBuild/WebKit.build/Debug/WebKit.build/DerivedSources -Wall -Wextra -Wcast-qual -Wchar-subscripts -Wconditional-uninitialized -Wextra-tokens -Wformat-security -Winit-self -Wmissing-format-attribute -Wmissing-noreturn -Wno-unused-parameter -Wpacked -Wpointer-arith -Wredundant-decls -Wundef -Wwrite-strings -Wexit-time-destructors -Wglobal-constructors -Wtautological-compare -Wimplicit-fallthrough -Wvla -Wliteral-conversion -F/Volumes/Data/worker/macOS-Mojave-Debug-Build-EWS/build/WebKitBuild/Debug -F/Volumes/Data/worker/macOS-Mojave-Debug-Build-EWS/build/Source/WebKit/../../WebKitLibraries/WebKitPrivateFrameworkStubs/Mac/10140
0 -iframework /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/PrivateFrameworks -iframework /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks -iframework /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/PrivateFrameworks -isystem /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/System.framework/PrivateHeaders -include /Volumes/Data/worker/macOS-Mojave-Debug-Build-EWS/build/WebKitBuild/PrecompiledHeaders/WebKit2Prefix-awuiitavrzgbhueqydpoigkowpiq/WebKit2Prefix.h -MMD -MT dependencies -MF /Volumes/Data/worker/macOS-Mojave-Debug-Build-EWS/build/WebKitBuild/WebKit.build/Debug/WebKit.build/Objects-normal/x86_64/UnifiedSource76.d --serialize-diagnostics /Volumes/Data/worker/macOS-Mojave-Debug-Build-EWS/build/WebKitBuild/WebKit.build/Debug/WebKit.build/Objects-normal/x86_64/UnifiedSource76.dia -c /Volumes/Data/worker/macOS-Mojave-Debug-Build-EWS/build/WebKitBuild/Debug/DerivedSources/WebKit2/unified-sources/UnifiedSource76.cpp -o /Volumes/Data/worker/macOS-Mojave-Debug-Build-EWS/build/WebKitBuild/WebKit.build/Debug/WebKit.build/Objects-normal/x86_64/UnifiedSource76.o
In file included from /Volumes/Data/worker/macOS-Mojave-Debug-Build-EWS/build/WebKitBuild/Debug/DerivedSources/WebKit2/unified-sources/UnifiedSource76.cpp:5:
/Volumes/Data/worker/macOS-Mojave-Debug-Build-EWS/build/Source/WebKit/WebProcess/WebPage/IPCTestingAPI.cpp:564:23: error: &apos;JSObjectMakeDeferredPromise&apos; is only available on macOS 10.15 or newer [-Werror,-Wunguarded-availability-new]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1697379</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-10-13 13:39:13 -0700</bug_when>
    <thetext>Yeah, how do we suppress that warning in Mojave? It&apos;s totally irrelevant that JSC that shipped in Mojave doesn&apos;t have that API...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1697380</commentid>
    <comment_count>8</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-10-13 13:41:26 -0700</bug_when>
    <thetext>(In reply to Ryosuke Niwa from comment #7)
&gt; Yeah, how do we suppress that warning in Mojave? It&apos;s totally irrelevant
&gt; that JSC that shipped in Mojave doesn&apos;t have that API...

Found it: ALLOW_NEW_API_WITHOUT_GUARDS_BEGIN</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1697391</commentid>
    <comment_count>9</comment_count>
      <attachid>411251</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-10-13 14:00:49 -0700</bug_when>
    <thetext>Created attachment 411251
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1697398</commentid>
    <comment_count>10</comment_count>
      <attachid>411251</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-10-13 14:17:02 -0700</bug_when>
    <thetext>Comment on attachment 411251
Patch

This was already reviewed by Geoff. Just waiting for EWS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1697488</commentid>
    <comment_count>11</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-10-13 16:20:56 -0700</bug_when>
    <thetext>Committed r268431: &lt;https://trac.webkit.org/changeset/268431&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1697489</commentid>
    <comment_count>12</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-10-13 16:21:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/70271211&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1697520</commentid>
    <comment_count>13</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2020-10-13 17:17:24 -0700</bug_when>
    <thetext>Filed: Bug 217688 – [WinCaio][PlayStation] reference to undefined symbol `IPC::messageReplyArgumentDescriptions(IPC::MessageName)&apos; since r268431</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1697597</commentid>
    <comment_count>14</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-10-13 20:20:45 -0700</bug_when>
    <thetext>Committed r268443: &lt;https://trac.webkit.org/changeset/268443&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1697857</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-10-14 13:41:06 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 217728</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1697871</commentid>
    <comment_count>16</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2020-10-14 14:05:02 -0700</bug_when>
    <thetext>*** Bug 217688 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1697975</commentid>
    <comment_count>17</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-10-14 17:33:32 -0700</bug_when>
    <thetext>Committed r268503: &lt;https://trac.webkit.org/changeset/268503&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1697993</commentid>
    <comment_count>18</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-10-14 18:44:06 -0700</bug_when>
    <thetext>Build fix: https://trac.webkit.org/r268504</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>411029</attachid>
            <date>2020-10-10 21:29:46 -0700</date>
            <delta_ts>2020-10-12 00:22:52 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>wip217565.patch</filename>
            <type>text/plain</type>
            <size>49906</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjY4MjQ2KQorKysgU291cmNlL1dlYktp
dC9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNDI4LDYgKzQyOCw3IEBACiAKICAg
ICBhZGRfY3VzdG9tX2NvbW1hbmQoCiAgICAgICAgIE9VVFBVVAorICAgICAgICAgICAgJHtXZWJL
aXRfREVSSVZFRF9TT1VSQ0VTX0RJUn0vTWVzc2FnZUFyZ3VtZW50RGVzY3JpcHRpb25zLmNwcAog
ICAgICAgICAgICAgJHtXZWJLaXRfREVSSVZFRF9TT1VSQ0VTX0RJUn0vTWVzc2FnZU5hbWVzLmNw
cAogICAgICAgICAgICAgJHtXZWJLaXRfREVSSVZFRF9TT1VSQ0VTX0RJUn0vTWVzc2FnZU5hbWVz
LmgKICAgICAgICAgICAgICR7X291dHB1dHN9CkluZGV4OiBTb3VyY2UvV2ViS2l0L0Rlcml2ZWRT
b3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvRGVy
aXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QJKHJldmlzaW9uIDI2ODI0NikKKysrIFNvdXJj
ZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QJKHdvcmtpbmcgY29weSkK
QEAgLTY4LDYgKzY4LDcgQEAKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9X
ZWJLaXQyL01lZGlhUGxheWVyUHJpdmF0ZVJlbW90ZU1lc3NhZ2VSZWNlaXZlci5jcHAKICQoQlVJ
TFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL01lZGlhUGxheWVyUHJpdmF0
ZVJlbW90ZU1lc3NhZ2VzLmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9X
ZWJLaXQyL01lZGlhUGxheWVyUHJpdmF0ZVJlbW90ZU1lc3NhZ2VzUmVwbGllcy5oCiskKEJVSUxU
X1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9NZXNzYWdlQXJndW1lbnREZXNj
cmlwdGlvbnMuY3BwCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0
Mi9NZXNzYWdlTmFtZXMuY3BwCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMv
V2ViS2l0Mi9NZXNzYWdlTmFtZXMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3Vy
Y2VzL1dlYktpdDIvTlBPYmplY3RNZXNzYWdlUmVjZWl2ZXJNZXNzYWdlUmVjZWl2ZXIuY3BwCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5tYWtlCShyZXZpc2lvbiAyNjgyNDYpCisrKyBTb3Vy
Y2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHdvcmtpbmcgY29weSkKQEAgLTI1Nyw3ICsy
NTcsNyBAQAogTUVTU0FHRVNfRklMRVMgOj0gJChhZGRzdWZmaXggTWVzc2FnZXMuaCwkKG5vdGRp
ciAkKE1FU1NBR0VfUkVDRUlWRVJTKSkpCiBNRVNTQUdFX1JFUExJRVNfRklMRVMgOj0gJChhZGRz
dWZmaXggTWVzc2FnZXNSZXBsaWVzLmgsJChub3RkaXIgJChNRVNTQUdFX1JFQ0VJVkVSUykpKQog
Ci1HRU5FUkFURURfTUVTU0FHRVNfRklMRVMgOj0gJChNRVNTQUdFX1JFQ0VJVkVSX0ZJTEVTKSAk
KE1FU1NBR0VTX0ZJTEVTKSAkKE1FU1NBR0VfUkVQTElFU19GSUxFUykgTWVzc2FnZU5hbWVzLmgg
TWVzc2FnZU5hbWVzLmNwcAorR0VORVJBVEVEX01FU1NBR0VTX0ZJTEVTIDo9ICQoTUVTU0FHRV9S
RUNFSVZFUl9GSUxFUykgJChNRVNTQUdFU19GSUxFUykgJChNRVNTQUdFX1JFUExJRVNfRklMRVMp
IE1lc3NhZ2VOYW1lcy5oIE1lc3NhZ2VOYW1lcy5jcHAgTWVzc2FnZUFyZ3VtZW50RGVzY3JpcHRp
b25zLmNwcAogR0VORVJBVEVEX01FU1NBR0VTX0ZJTEVTX0FTX1BBVFRFUk5TIDo9ICQoc3Vic3Qg
LiwlLCQoR0VORVJBVEVEX01FU1NBR0VTX0ZJTEVTKSkKIAogTUVTU0FHRVNfSU5fRklMRVMgOj0g
JChhZGRzdWZmaXggLm1lc3NhZ2VzLmluLCQoTUVTU0FHRV9SRUNFSVZFUlMpKQpJbmRleDogU291
cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvSlNJUENCaW5kaW5nLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvSlNJUENCaW5kaW5nLmgJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvSlNJUENCaW5kaW5nLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwyNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
IkRlY29kZXIuaCIKKyNpbmNsdWRlICJIYW5kbGVNZXNzYWdlLmgiCisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvT2JqZWN0Q29uc3RydWN0b3IuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9K
U0FycmF5Lmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNHbG9iYWxPYmplY3QuaD4KKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU09iamVjdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRmxv
YXRSZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9SZWdpc3RyYWJsZURvbWFpbi5oPgorI2luY2x1ZGUgPHd0Zi9PYmplY3RJZGVudGlmaWVyLmg+
CisjaW5jbHVkZSA8d3RmL1VSTC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzdGQ6OmVuYWJsZV9pZl90PCFzdGQ6OmlzX2FyaXRobWV0
aWM8VD46OnZhbHVlICYmICFzdGQ6OmlzX2VudW08VD46OnZhbHVlPiogPSBudWxscHRyPgorSlND
OjpKU1ZhbHVlIGRlY29kZUFyZ3VtZW50KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBjb25zdCBUJikK
K3sKKyAgICByZXR1cm4gSlNDOjpqc1VuZGVmaW5lZCgpOworfQorCit0ZW1wbGF0ZTw+CitKU0M6
OkpTVmFsdWUgZGVjb2RlQXJndW1lbnQoSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIGF1dG8mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRv
KiBvYmplY3QgPSBKU0M6OmNvbnN0cnVjdEVtcHR5T2JqZWN0KGdsb2JhbE9iamVjdCwgZ2xvYmFs
T2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgSlNDOjpKU1ZhbHVlKCkpOworICAgIG9iamVjdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sICJ0eXBlIl9zKSwgSlNDOjpqc05vbnRyaXZpYWxTdHJpbmco
dm0sICJTdHJpbmciX3MpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU0M6OkpT
VmFsdWUoKSk7CisgICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgInZhbHVlIl9zKSwgSlNDOjpqc05vbnRyaXZpYWxTdHJpbmcodm0sIHZhbHVl
KSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNDOjpKU1ZhbHVlKCkpOworICAg
IHJldHVybiBvYmplY3Q7Cit9CisKK3RlbXBsYXRlPD4KK0pTQzo6SlNWYWx1ZSBkZWNvZGVBcmd1
bWVudChKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFVSTCYgdmFsdWUp
Cit7CisgICAgcmV0dXJuIGRlY29kZUFyZ3VtZW50KGdsb2JhbE9iamVjdCwgdmFsdWUuc3RyaW5n
KCkpOworfQorCit0ZW1wbGF0ZTw+CitKU0M6OkpTVmFsdWUgZGVjb2RlQXJndW1lbnQoSlNDOjpK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiYgdmFsdWUpCit7CisgICAgcmV0dXJuIGRlY29kZUFyZ3VtZW50KGdsb2JhbE9iamVjdCwg
dmFsdWUuc3RyaW5nKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBOdW1lcmljVHlwZT4KK0pT
Qzo6SlNWYWx1ZSBkZWNvZGVOdW1lcmljKEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgTnVtZXJpY1R5cGUgdmFsdWUsIGNvbnN0IFN0cmluZyYgdHlwZSkKK3sKKyAgICBhdXRvJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisgICAgYXV0byogb2JqZWN0ID0gSlNDOjpjb25zdHJ1Y3RFbXB0eU9iamVjdChn
bG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCkpOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIEpTQzo6SlNWYWx1ZSgpKTsKKyAgICBvYmplY3QtPnB1dERp
cmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidHlwZSJfcyksIEpTQzo6
anNOb250cml2aWFsU3RyaW5nKHZtLCB0eXBlKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgSlNDOjpKU1ZhbHVlKCkpOworICAgIG9iamVjdC0+cHV0RGlyZWN0KHZtLCBKU0M6Oklk
ZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ2YWx1ZSJfcyksIEpTQzo6SlNWYWx1ZSh2YWx1ZSkp
OworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTQzo6SlNWYWx1ZSgpKTsKKyAgICBy
ZXR1cm4gb2JqZWN0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzdGQ6OmVuYWJsZV9pZl90
PHN0ZDo6aXNfYXJpdGhtZXRpYzxUPjo6dmFsdWU+KiA9IG51bGxwdHI+CitKU0M6OkpTVmFsdWUg
ZGVjb2RlQXJndW1lbnQoSlNDOjpKU0dsb2JhbE9iamVjdCosIFQpCit7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIEUsIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19lbnVtPEU+Ojp2YWx1ZT4qID0g
bnVsbHB0cj4KK0pTQzo6SlNWYWx1ZSBkZWNvZGVBcmd1bWVudChKU0M6OkpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEUgdmFsdWUpCit7CisgICAgcmV0dXJuIGRlY29kZUFyZ3VtZW50KGds
b2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8c3RkOjp1bmRlcmx5aW5nX3R5cGVfdDxFPj4odmFsdWUp
KTsKK30KKwordGVtcGxhdGU8PgorSlNDOjpKU1ZhbHVlIGRlY29kZUFyZ3VtZW50KEpTQzo6SlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgYm9vbCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gZGVj
b2RlTnVtZXJpYyhnbG9iYWxPYmplY3QsIHZhbHVlLCAiYm9vbCIpOworfQorCit0ZW1wbGF0ZTw+
CitKU0M6OkpTVmFsdWUgZGVjb2RlQXJndW1lbnQoSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBkb3VibGUgdmFsdWUpCit7CisgICAgcmV0dXJuIGRlY29kZU51bWVyaWMoZ2xvYmFs
T2JqZWN0LCB2YWx1ZSwgImRvdWJsZSIpOworfQorCit0ZW1wbGF0ZTw+CitKU0M6OkpTVmFsdWUg
ZGVjb2RlQXJndW1lbnQoSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBmbG9hdCB2
YWx1ZSkKK3sKKyAgICByZXR1cm4gZGVjb2RlTnVtZXJpYyhnbG9iYWxPYmplY3QsIHZhbHVlLCAi
ZmxvYXQiKTsKK30KKwordGVtcGxhdGU8PgorSlNDOjpKU1ZhbHVlIGRlY29kZUFyZ3VtZW50KEpT
Qzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgaW50OF90IHZhbHVlKQoreworICAgIHJl
dHVybiBkZWNvZGVOdW1lcmljKGdsb2JhbE9iamVjdCwgdmFsdWUsICJpbnQ4X3QiKTsKK30KKwor
dGVtcGxhdGU8PgorSlNDOjpKU1ZhbHVlIGRlY29kZUFyZ3VtZW50KEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgaW50MTZfdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gZGVjb2RlTnVt
ZXJpYyhnbG9iYWxPYmplY3QsIHZhbHVlLCAiaW50MTZfdCIpOworfQorCit0ZW1wbGF0ZTw+CitK
U0M6OkpTVmFsdWUgZGVjb2RlQXJndW1lbnQoSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBpbnQzMl90IHZhbHVlKQoreworICAgIHJldHVybiBkZWNvZGVOdW1lcmljKGdsb2JhbE9i
amVjdCwgdmFsdWUsICJpbnQzMl90Iik7Cit9CisKK3RlbXBsYXRlPD4KK0pTQzo6SlNWYWx1ZSBk
ZWNvZGVBcmd1bWVudChKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGludDY0X3Qg
dmFsdWUpCit7CisgICAgcmV0dXJuIGRlY29kZU51bWVyaWMoZ2xvYmFsT2JqZWN0LCB2YWx1ZSwg
ImludDY0X3QiKTsKK30KKwordGVtcGxhdGU8PgorSlNDOjpKU1ZhbHVlIGRlY29kZUFyZ3VtZW50
KEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdWludDhfdCB2YWx1ZSkKK3sKKyAg
ICByZXR1cm4gZGVjb2RlTnVtZXJpYyhnbG9iYWxPYmplY3QsIHZhbHVlLCAidWludDhfdCIpOwor
fQorCit0ZW1wbGF0ZTw+CitKU0M6OkpTVmFsdWUgZGVjb2RlQXJndW1lbnQoSlNDOjpKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1aW50MTZfdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gZGVj
b2RlTnVtZXJpYyhnbG9iYWxPYmplY3QsIHZhbHVlLCAidWludDE2X3QiKTsKK30KKwordGVtcGxh
dGU8PgorSlNDOjpKU1ZhbHVlIGRlY29kZUFyZ3VtZW50KEpTQzo6SlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgdWludDMyX3QgdmFsdWUpCit7CisgICAgcmV0dXJuIGRlY29kZU51bWVyaWMo
Z2xvYmFsT2JqZWN0LCB2YWx1ZSwgInVpbnQzMl90Iik7Cit9CisKK3RlbXBsYXRlPD4KK0pTQzo6
SlNWYWx1ZSBkZWNvZGVBcmd1bWVudChKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IHVpbnQ2NF90IHZhbHVlKQoreworICAgIHJldHVybiBkZWNvZGVOdW1lcmljKGdsb2JhbE9iamVj
dCwgdmFsdWUsICJ1aW50NjRfdCIpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorSlNDOjpK
U1ZhbHVlIGRlY29kZUFyZ3VtZW50KEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Y29uc3QgT2JqZWN0SWRlbnRpZmllcjxVPiYgdmFsdWUpCit7CisgICAgcmV0dXJuIGRlY29kZUFy
Z3VtZW50KGdsb2JhbE9iamVjdCwgdmFsdWUudG9VSW50NjQoKSk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFJlY3RUeXBlPgorSlNDOjpKU1ZhbHVlIGRlY29kZVJlY3QoSlNDOjpKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBSZWN0VHlwZSYgdmFsdWUsIGNvbnN0IFN0cmluZyYg
dHlwZSkKK3sKKyAgICBhdXRvJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byogb2JqZWN0ID0gSlNDOjpj
b25zdHJ1Y3RFbXB0eU9iamVjdChnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+b2JqZWN0UHJv
dG90eXBlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTQzo6SlNWYWx1ZSgp
KTsKKyAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCAidHlwZSJfcyksIEpTQzo6anNOb250cml2aWFsU3RyaW5nKHZtLCB0eXBlKSk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNDOjpKU1ZhbHVlKCkpOworICAgIG9iamVjdC0+
cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ4Il9zKSwgSlND
OjpKU1ZhbHVlKHZhbHVlLngoKSkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpT
Qzo6SlNWYWx1ZSgpKTsKKyAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCAieSJfcyksIEpTQzo6SlNWYWx1ZSh2YWx1ZS55KCkpKTsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU0M6OkpTVmFsdWUoKSk7CisgICAgb2JqZWN0LT5w
dXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIndpZHRoIl9zKSwg
SlNDOjpKU1ZhbHVlKHZhbHVlLndpZHRoKCkpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBKU0M6OkpTVmFsdWUoKSk7CisgICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImhlaWdodCJfcyksIEpTQzo6SlNWYWx1ZSh2YWx1ZS5o
ZWlnaHQoKSkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTQzo6SlNWYWx1ZSgp
KTsKKyAgICByZXR1cm4gb2JqZWN0OworfQorCit0ZW1wbGF0ZTw+CitKU0M6OkpTVmFsdWUgZGVj
b2RlQXJndW1lbnQoSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBXZWJD
b3JlOjpJbnRSZWN0JiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gZGVjb2RlUmVjdChnbG9iYWxPYmpl
Y3QsIHZhbHVlLCAiSW50UmVjdCIpOworfQorCit0ZW1wbGF0ZTw+CitKU0M6OkpTVmFsdWUgZGVj
b2RlQXJndW1lbnQoSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBXZWJD
b3JlOjpGbG9hdFJlY3QmIHZhbHVlKQoreworICAgIHJldHVybiBkZWNvZGVSZWN0KGdsb2JhbE9i
amVjdCwgdmFsdWUsICJGbG9hdFJlY3QiKTsKK30KKwordGVtcGxhdGU8c2l6ZV90IHJlbWFpbmlu
Z1NpemUsIHR5cGVuYW1lLi4uIEVsZW1lbnRzPgorc3RydWN0IERlY29kZWRBcmd1bWVudEpTVmFs
dWVDb252ZXJ0ZXIgeworICAgIHN0YXRpYyBib29sIGNvbnZlcnQoSlNDOjpKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTQXJyYXkqIGFycmF5LCBjb25zdCBzdGQ6OnR1cGxlPEVs
ZW1lbnRzLi4uPiYgdHVwbGUpCisgICAgeworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRShnbG9iYWxPYmplY3QtPnZtKCkpOworCisgICAgICAgIGF1dG8ganNWYWx1ZSA9
IGRlY29kZUFyZ3VtZW50KGdsb2JhbE9iamVjdCwgc3RkOjpnZXQ8c2l6ZW9mLi4uKEVsZW1lbnRz
KSAtIHJlbWFpbmluZ1NpemU+KHR1cGxlKSk7CisgICAgICAgIGlmIChqc1ZhbHVlLmlzRW1wdHko
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICB1bnNpZ25lZCBpbmRleCA9
IHNpemVvZi4uLihFbGVtZW50cykgLSByZW1haW5pbmdTaXplOworICAgICAgICBhcnJheS0+cHV0
RGlyZWN0SW5kZXgoZ2xvYmFsT2JqZWN0LCBpbmRleCwganNWYWx1ZSk7CisgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKKworICAgICAgICByZXR1cm4gRGVjb2RlZEFy
Z3VtZW50SlNWYWx1ZUNvbnZlcnRlcjxyZW1haW5pbmdTaXplIC0gMSwgRWxlbWVudHMuLi4+Ojpj
b252ZXJ0KGdsb2JhbE9iamVjdCwgYXJyYXksIHR1cGxlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0
ZTx0eXBlbmFtZS4uLiBFbGVtZW50cz4KK3N0cnVjdCBEZWNvZGVkQXJndW1lbnRKU1ZhbHVlQ29u
dmVydGVyPDAsIEVsZW1lbnRzLi4uPiB7CisgICAgc3RhdGljIGJvb2wgY29udmVydChKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgSlNDOjpKU0FycmF5KiwgY29uc3Qgc3RkOjp0dXBsZTxFbGVtZW50cy4u
Lj4mKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfTsKKwordGVtcGxhdGU8
dHlwZW5hbWUuLi4gRWxlbWVudHM+CitzdGF0aWMgT3B0aW9uYWw8SlNDOjpKU1ZhbHVlPiBqc1Zh
bHVlRm9yQXJndW1lbnRUdXBsZShKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNv
bnN0IHN0ZDo6dHVwbGU8RWxlbWVudHMuLi4+JiB0dXBsZSkKK3sKKyAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRShnbG9iYWxPYmplY3QtPnZtKCkpOworICAgIGF1dG8qIGFycmF5
ID0gSlNDOjpjb25zdHJ1Y3RFbXB0eUFycmF5KGdsb2JhbE9iamVjdCwgbnVsbHB0cik7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgV1RGOjpudWxsb3B0KTsKKyAgICBpZiAoIURlY29k
ZWRBcmd1bWVudEpTVmFsdWVDb252ZXJ0ZXI8c2l6ZW9mLi4uKEVsZW1lbnRzKSwgRWxlbWVudHMu
Li4+Ojpjb252ZXJ0KGdsb2JhbE9iamVjdCwgYXJyYXksIHR1cGxlKSkKKyAgICAgICAgcmV0dXJu
IEpTQzo6SlNWYWx1ZSgpOworICAgIHJldHVybiBKU0M6OkpTVmFsdWUoYXJyYXkpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RhdGljIE9wdGlvbmFsPEpTQzo6SlNWYWx1ZT4ganNWYWx1
ZUZvckRlY29kZWRBcmd1bWVudHMoSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBJ
UEM6OkRlY29kZXImIGRlY29kZXIpCit7CisgICAgT3B0aW9uYWw8dHlwZW5hbWUgSVBDOjpDb2Rp
bmdUeXBlPFQ+OjpUeXBlPiBhcmd1bWVudHM7CisgICAgZGVjb2RlciA+PiBhcmd1bWVudHM7Cisg
ICAgaWYgKCFhcmd1bWVudHMpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0
dXJuIGpzVmFsdWVGb3JBcmd1bWVudFR1cGxlKGdsb2JhbE9iamVjdCwgKmFyZ3VtZW50cyk7Cit9
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9NZXNzYWdlQXJndW1lbnREZXNjcmlw
dGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9NZXNzYWdl
QXJndW1lbnREZXNjcmlwdGlvbnMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViS2l0L1Bs
YXRmb3JtL0lQQy9NZXNzYWdlQXJndW1lbnREZXNjcmlwdGlvbnMuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJN
ZXNzYWdlTmFtZXMuaCIKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU0dsb2JhbE9iamVjdDsKK2Ns
YXNzIEpTVmFsdWU7CisKK30KKworbmFtZXNwYWNlIElQQyB7CisKK2NsYXNzIERlY29kZXI7CisK
K09wdGlvbmFsPEpTQzo6SlNWYWx1ZT4ganNWYWx1ZUZvckFyZ3VtZW50cyhKU0M6OkpTR2xvYmFs
T2JqZWN0KiwgTWVzc2FnZU5hbWUsIERlY29kZXImKTsKK09wdGlvbmFsPEpTQzo6SlNWYWx1ZT4g
anNWYWx1ZUZvclJlcGx5QXJndW1lbnRzKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBNZXNzYWdlTmFt
ZSwgRGVjb2RlciYpOworCitzdHJ1Y3QgQXJndW1lbnREZXNjcmlwdGlvbiB7CisgICAgY29uc3Qg
Y2hhciogbmFtZTsKKyAgICBjb25zdCBjaGFyKiB0eXBlOworICAgIGNvbnN0IGNoYXIqIGVudW1O
YW1lOworICAgIGJvb2wgaXNPcHRpb25hbDsKK307CisKK1ZlY3RvcjxBcmd1bWVudERlc2NyaXB0
aW9uPiBtZXNzYWdlQXJndW1lbnREZXNjcmlwdGlvbnMoTWVzc2FnZU5hbWUpOworCit9CkluZGV4
OiBTb3VyY2UvV2ViS2l0L1NjcmlwdHMvZ2VuZXJhdGUtbWVzc2FnZS1yZWNlaXZlci5weQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NjcmlwdHMvZ2VuZXJhdGUtbWVzc2FnZS1yZWNlaXZl
ci5weQkocmV2aXNpb24gMjY4MjQ2KQorKysgU291cmNlL1dlYktpdC9TY3JpcHRzL2dlbmVyYXRl
LW1lc3NhZ2UtcmVjZWl2ZXIucHkJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKIAog
ICAgIGZpcnN0X2FyZyA9IFRydWUKICAgICBzZWNvbmRfYXJnID0gRmFsc2UKKyAgICByZWNlaXZl
cl9oZWFkZXJfZmlsZXMgPSBbXQogICAgIGZvciBwYXJhbWV0ZXIgaW4gYXJndjoKICAgICAgICAg
aWYgZmlyc3RfYXJnOgogICAgICAgICAgICAgZmlyc3RfYXJnID0gRmFsc2UKQEAgLTUzLDcgKzU0
LDkgQEAKICAgICAgICAgd2l0aCBvcGVuKCclc01lc3NhZ2VSZWNlaXZlci5jcHAnICUgcmVjZWl2
ZXJfbmFtZSwgIncrIikgYXMgaW1wbGVtZW50YXRpb25fb3V0cHV0OgogICAgICAgICAgICAgaW1w
bGVtZW50YXRpb25fb3V0cHV0LndyaXRlKHdlYmtpdC5tZXNzYWdlcy5nZW5lcmF0ZV9tZXNzYWdl
X2hhbmRsZXIocmVjZWl2ZXIpKQogCi0gICAgICAgIHdpdGggb3BlbignJXNNZXNzYWdlcy5oJyAl
IHJlY2VpdmVyX25hbWUsICJ3KyIpIGFzIGhlYWRlcl9vdXRwdXQ6CisgICAgICAgIHJlY2VpdmVy
X21lc3NhZ2VfaGVhZGVyID0gJyVzTWVzc2FnZXMuaCcgJSByZWNlaXZlcl9uYW1lCisgICAgICAg
IHJlY2VpdmVyX2hlYWRlcl9maWxlcy5hcHBlbmQocmVjZWl2ZXJfbWVzc2FnZV9oZWFkZXIpCisg
ICAgICAgIHdpdGggb3BlbihyZWNlaXZlcl9tZXNzYWdlX2hlYWRlciwgIncrIikgYXMgaGVhZGVy
X291dHB1dDoKICAgICAgICAgICAgIGhlYWRlcl9vdXRwdXQud3JpdGUod2Via2l0Lm1lc3NhZ2Vz
LmdlbmVyYXRlX21lc3NhZ2VzX2hlYWRlcihyZWNlaXZlcikpCiAKICAgICAgICAgd2l0aCBvcGVu
KCclc01lc3NhZ2VzUmVwbGllcy5oJyAlIHJlY2VpdmVyX25hbWUsICJ3KyIpIGFzIHJlcGx5X2hl
YWRlcl9vdXRwdXQ6CkBAIC02NSw2ICs2OCw5IEBACiAgICAgd2l0aCBvcGVuKCdNZXNzYWdlTmFt
ZXMuY3BwJywgIncrIikgYXMgbWVzc2FnZV9uYW1lc19pbXBsZW1lbnRhdGlvbl9vdXRwdXQ6CiAg
ICAgICAgIG1lc3NhZ2VfbmFtZXNfaW1wbGVtZW50YXRpb25fb3V0cHV0LndyaXRlKHdlYmtpdC5t
ZXNzYWdlcy5nZW5lcmF0ZV9tZXNzYWdlX25hbWVzX2ltcGxlbWVudGF0aW9uKHJlY2VpdmVycykp
CiAKKyAgICB3aXRoIG9wZW4oJ01lc3NhZ2VBcmd1bWVudERlc2NyaXB0aW9ucy5jcHAnLCAidysi
KSBhcyBtZXNzYWdlX2Rlc2NyaXB0aW9uc19pbXBsZW1lbnRhdGlvbl9vdXRwdXQ6CisgICAgICAg
IG1lc3NhZ2VfZGVzY3JpcHRpb25zX2ltcGxlbWVudGF0aW9uX291dHB1dC53cml0ZSh3ZWJraXQu
bWVzc2FnZXMuZ2VuZXJhdGVfbWVzc2FnZV9hcmd1bWVudF9kZXNjcmlwdGlvbl9pbXBsZW1lbnRh
dGlvbihyZWNlaXZlcnMsIHJlY2VpdmVyX2hlYWRlcl9maWxlcykpCisKICAgICByZXR1cm4gMAog
CiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgpJbmRleDogU291cmNlL1dlYktpdC9TY3JpcHRz
L3dlYmtpdC9tZXNzYWdlcy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NjcmlwdHMv
d2Via2l0L21lc3NhZ2VzLnB5CShyZXZpc2lvbiAyNjgyNDYpCisrKyBTb3VyY2UvV2ViS2l0L1Nj
cmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC02MjMsNyArNjIzLDYg
QEAKICAgICAgICAgJ1dlYkNvcmU6OlBhc3RlYm9hcmRVUkwnOiBbJzxXZWJDb3JlL1Bhc3RlYm9h
cmQuaD4nXSwKICAgICAgICAgJ1dlYkNvcmU6OlBhc3RlYm9hcmRXZWJDb250ZW50JzogWyc8V2Vi
Q29yZS9QYXN0ZWJvYXJkLmg+J10sCiAgICAgICAgICdXZWJDb3JlOjpQYXltZW50QXV0aG9yaXph
dGlvblJlc3VsdCc6IFsnPFdlYkNvcmUvQXBwbGVQYXlTZXNzaW9uUGF5bWVudFJlcXVlc3QuaD4n
XSwKLSAgICAgICAgJ1dlYkNvcmU6OlBheW1lbnRNZXRob2RVcGRhdGUnOiBbJzxXZWJDb3JlL0Fw
cGxlUGF5U2Vzc2lvblBheW1lbnRSZXF1ZXN0Lmg+J10sCiAgICAgICAgICdXZWJDb3JlOjpQbGF0
Zm9ybVRleHRUcmFja0RhdGEnOiBbJzxXZWJDb3JlL1BsYXRmb3JtVGV4dFRyYWNrLmg+J10sCiAg
ICAgICAgICdXZWJDb3JlOjpQbHVnaW5JbmZvJzogWyc8V2ViQ29yZS9QbHVnaW5EYXRhLmg+J10s
CiAgICAgICAgICdXZWJDb3JlOjpQbHVnaW5Mb2FkQ2xpZW50UG9saWN5JzogWyc8V2ViQ29yZS9Q
bHVnaW5EYXRhLmg+J10sCkBAIC02ODcsNyArNjg2LDcgQEAKICAgICAgICAgJ3N0cnVjdCBXZWJL
aXQ6OldlYlVzZXJTY3JpcHREYXRhJzogWyciV2ViVXNlckNvbnRlbnRDb250cm9sbGVyRGF0YVR5
cGVzLmgiJ10sCiAgICAgICAgICdzdHJ1Y3QgV2ViS2l0OjpXZWJVc2VyU3R5bGVTaGVldERhdGEn
OiBbJyJXZWJVc2VyQ29udGVudENvbnRyb2xsZXJEYXRhVHlwZXMuaCInXSwKICAgICAgICAgJ3N0
cnVjdCBXZWJLaXQ6OldlYlNjcmlwdE1lc3NhZ2VIYW5kbGVyRGF0YSc6IFsnIldlYlVzZXJDb250
ZW50Q29udHJvbGxlckRhdGFUeXBlcy5oIiddLAotICAgICAgICAnd2VicnRjOjpXZWJLaXRFbmNv
ZGVkRnJhbWVJbmZvJzogWyc8d2VicnRjL3Nkay9XZWJLaXQvV2ViS2l0RW5jb2Rlci5oPiddLAor
ICAgICAgICAnd2VicnRjOjpXZWJLaXRFbmNvZGVkRnJhbWVJbmZvJzogWyc8d2VicnRjL3Nkay9X
ZWJLaXQvV2ViS2l0RW5jb2Rlci5oPicsICc8V2ViQ29yZS9MaWJXZWJSVENFbnVtVHJhaXRzLmg+
J10sCiAgICAgICAgICd3ZWJydGM6OldlYktpdFJUUEZyYWdtZW50YXRpb25IZWFkZXInOiBbJzx3
ZWJydGMvc2RrL1dlYktpdC9XZWJLaXRFbmNvZGVyLmg+J10sCiAgICAgfQogCkBAIC03MTQsMTMg
KzcxMyw3IEBACiAgICAgcmV0dXJuIGhlYWRlcnMKIAogCi1kZWYgZ2VuZXJhdGVfbWVzc2FnZV9o
YW5kbGVyKHJlY2VpdmVyKToKLSAgICBoZWFkZXJfY29uZGl0aW9ucyA9IHsKLSAgICAgICAgJyIl
cyInICUgbWVzc2FnZXNfaGVhZGVyX2ZpbGVuYW1lKHJlY2VpdmVyKTogW05vbmVdLAotICAgICAg
ICAnIkhhbmRsZU1lc3NhZ2UuaCInOiBbTm9uZV0sCi0gICAgICAgICciRGVjb2Rlci5oIic6IFtO
b25lXSwKLSAgICB9Ci0KK2RlZiBjb2xsZWN0X2hlYWRlcl9jb25kaXRpb25zX2Zvcl9yZWNlaXZl
cihyZWNlaXZlciwgaGVhZGVyX2NvbmRpdGlvbnMpOgogICAgIHR5cGVfY29uZGl0aW9ucyA9IHt9
CiAgICAgZm9yIHBhcmFtZXRlciBpbiByZWNlaXZlci5pdGVycGFyYW1ldGVycygpOgogICAgICAg
ICBpZiBub3QgcGFyYW1ldGVyLnR5cGUgaW4gdHlwZV9jb25kaXRpb25zOgpAQCAtNzYzLDYgKzc1
NiwyNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyX2NvbmRpdGlvbnNbaGVhZGVy
XSA9IFtdCiAgICAgICAgICAgICAgICAgICAgIGhlYWRlcl9jb25kaXRpb25zW2hlYWRlcl0uYXBw
ZW5kKG1lc3NhZ2UuY29uZGl0aW9uKQogCisgICAgcmV0dXJuIGhlYWRlcl9jb25kaXRpb25zCisK
KworZGVmIGdlbmVyYXRlX2hlYWRlcl9pbmNsdWRlc19mcm9tX2NvbmRpdGlvbnMocmVzdWx0LCBo
ZWFkZXJfY29uZGl0aW9ucyk6CisgICAgZm9yIGhlYWRlciBpbiBzb3J0ZWQoaGVhZGVyX2NvbmRp
dGlvbnMpOgorICAgICAgICBpZiBoZWFkZXJfY29uZGl0aW9uc1toZWFkZXJdIGFuZCBub3QgTm9u
ZSBpbiBoZWFkZXJfY29uZGl0aW9uc1toZWFkZXJdOgorICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZCgnI2lmICVzXG4nICUgJyB8fCAnLmpvaW4oc29ydGVkKHNldChoZWFkZXJfY29uZGl0aW9uc1to
ZWFkZXJdKSkpKQorICAgICAgICAgICAgcmVzdWx0ICs9IFsnI2luY2x1ZGUgJXNcbicgJSBoZWFk
ZXJdCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcjZW5kaWZcbicpCisgICAgICAgIGVsc2U6
CisgICAgICAgICAgICByZXN1bHQgKz0gWycjaW5jbHVkZSAlc1xuJyAlIGhlYWRlcl0KKworZGVm
IGdlbmVyYXRlX21lc3NhZ2VfaGFuZGxlcihyZWNlaXZlcik6CisgICAgaGVhZGVyX2NvbmRpdGlv
bnMgPSB7CisgICAgICAgICciJXMiJyAlIG1lc3NhZ2VzX2hlYWRlcl9maWxlbmFtZShyZWNlaXZl
cik6IFtOb25lXSwKKyAgICAgICAgJyJIYW5kbGVNZXNzYWdlLmgiJzogW05vbmVdLAorICAgICAg
ICAnIkRlY29kZXIuaCInOiBbTm9uZV0sCisgICAgfQorCisgICAgY29sbGVjdF9oZWFkZXJfY29u
ZGl0aW9uc19mb3JfcmVjZWl2ZXIocmVjZWl2ZXIsIGhlYWRlcl9jb25kaXRpb25zKQorCiAgICAg
cmVzdWx0ID0gW10KIAogICAgIHJlc3VsdC5hcHBlbmQoX2xpY2Vuc2VfaGVhZGVyKQpAQCAtNzcz
LDEzICs3ODcsNyBAQAogICAgICAgICByZXN1bHQuYXBwZW5kKCcjaWYgJXNcblxuJyAlIHJlY2Vp
dmVyLmNvbmRpdGlvbikKIAogICAgIHJlc3VsdC5hcHBlbmQoJyNpbmNsdWRlICIlcy5oIlxuXG4n
ICUgcmVjZWl2ZXIubmFtZSkKLSAgICBmb3IgaGVhZGVyIGluIHNvcnRlZChoZWFkZXJfY29uZGl0
aW9ucyk6Ci0gICAgICAgIGlmIGhlYWRlcl9jb25kaXRpb25zW2hlYWRlcl0gYW5kIG5vdCBOb25l
IGluIGhlYWRlcl9jb25kaXRpb25zW2hlYWRlcl06Ci0gICAgICAgICAgICByZXN1bHQuYXBwZW5k
KCcjaWYgJXNcbicgJSAnIHx8ICcuam9pbihzb3J0ZWQoc2V0KGhlYWRlcl9jb25kaXRpb25zW2hl
YWRlcl0pKSkpCi0gICAgICAgICAgICByZXN1bHQgKz0gWycjaW5jbHVkZSAlc1xuJyAlIGhlYWRl
cl0KLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyNlbmRpZlxuJykKLSAgICAgICAgZWxzZToK
LSAgICAgICAgICAgIHJlc3VsdCArPSBbJyNpbmNsdWRlICVzXG4nICUgaGVhZGVyXQorICAgIGdl
bmVyYXRlX2hlYWRlcl9pbmNsdWRlc19mcm9tX2NvbmRpdGlvbnMocmVzdWx0LCBoZWFkZXJfY29u
ZGl0aW9ucykKICAgICByZXN1bHQuYXBwZW5kKCdcbicpCiAKICAgICBkZWxheWVkX29yX2FzeW5j
X21lc3NhZ2VzID0gW10KQEAgLTEwNDQsMyArMTA1MiwxMjUgQEAKICAgICByZXN1bHQuYXBwZW5k
KCdcbicpCiAgICAgcmVzdWx0LmFwcGVuZCgnfSAvLyBuYW1lc3BhY2UgSVBDXG4nKQogICAgIHJl
dHVybiAnJy5qb2luKHJlc3VsdCkKKworZGVmIGdlbmVyYXRlX2pzX3ZhbHVlX2NvbnZlcnNpb25f
ZnVuY3Rpb24ocmVzdWx0LCByZWNlaXZlcnMsIGZ1bmN0aW9uX25hbWUsIGFyZ3VtZW50X3R5cGUs
IHByZWRpY2F0ZT1sYW1iZGEgbWVzc2FnZTogVHJ1ZSk6CisgICAgcmVzdWx0LmFwcGVuZCgnT3B0
aW9uYWw8SlNDOjpKU1ZhbHVlPiAlcyhKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IE1lc3NhZ2VOYW1lIG5hbWUsIERlY29kZXImIGRlY29kZXIpXG4nICUgZnVuY3Rpb25fbmFtZSkK
KyAgICByZXN1bHQuYXBwZW5kKCd7XG4nKQorICAgIHJlc3VsdC5hcHBlbmQoJyAgICBzd2l0Y2gg
KG5hbWUpIHtcbicpCisgICAgZm9yIHJlY2VpdmVyIGluIHJlY2VpdmVyczoKKyAgICAgICAgaWYg
cmVjZWl2ZXIuY29uZGl0aW9uOgorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnI2lmICVzXG4n
ICUgcmVjZWl2ZXIuY29uZGl0aW9uKQorICAgICAgICBwcmV2aXNpb25fbWVzc2FnZV9jb25kaXRp
b24gPSBOb25lCisgICAgICAgIGZvciBtZXNzYWdlIGluIHJlY2VpdmVyLm1lc3NhZ2VzOgorICAg
ICAgICAgICAgaWYgbm90IHByZWRpY2F0ZShtZXNzYWdlKToKKyAgICAgICAgICAgICAgICBjb250
aW51ZQorICAgICAgICAgICAgaWYgcHJldmlzaW9uX21lc3NhZ2VfY29uZGl0aW9uICE9IG1lc3Nh
Z2UuY29uZGl0aW9uOgorICAgICAgICAgICAgICAgIGlmIHByZXZpc2lvbl9tZXNzYWdlX2NvbmRp
dGlvbjoKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnI2VuZGlmXG4nKQorICAg
ICAgICAgICAgICAgIGlmIG1lc3NhZ2UuY29uZGl0aW9uOgorICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKCcjaWYgJXNcbicgJSBtZXNzYWdlLmNvbmRpdGlvbikKKyAgICAgICAgICAg
IHByZXZpc2lvbl9tZXNzYWdlX2NvbmRpdGlvbiA9IG1lc3NhZ2UuY29uZGl0aW9uCisgICAgICAg
ICAgICByZXN1bHQuYXBwZW5kKCcgICAgY2FzZSBNZXNzYWdlTmFtZTo6JXNfJXM6XG4nICUgKHJl
Y2VpdmVyLm5hbWUsIG1lc3NhZ2UubmFtZSkpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcg
ICAgICAgIHJldHVybiBqc1ZhbHVlRm9yRGVjb2RlZEFyZ3VtZW50czxNZXNzYWdlczo6JXM6OiVz
Ojolcz4oZ2xvYmFsT2JqZWN0LCBkZWNvZGVyKTtcbicgJSAocmVjZWl2ZXIubmFtZSwgbWVzc2Fn
ZS5uYW1lLCBhcmd1bWVudF90eXBlKSkKKyAgICAgICAgaWYgcHJldmlzaW9uX21lc3NhZ2VfY29u
ZGl0aW9uOgorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnI2VuZGlmXG4nKQorICAgICAgICBp
ZiByZWNlaXZlci5jb25kaXRpb246CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcjZW5kaWZc
bicpCisgICAgcmVzdWx0LmFwcGVuZCgnICAgIGRlZmF1bHQ6XG4nKQorICAgIHJlc3VsdC5hcHBl
bmQoJyAgICAgICAgYnJlYWs7XG4nKQorICAgIHJlc3VsdC5hcHBlbmQoJyAgICB9XG4nKQorICAg
IHJlc3VsdC5hcHBlbmQoJyAgICByZXR1cm4gV1RGOjpudWxsb3B0O1xuJykKKyAgICByZXN1bHQu
YXBwZW5kKCd9XG4nKQorCisKK2RlZiBnZW5lcmF0ZV9tZXNzYWdlX2FyZ3VtZW50X2Rlc2NyaXB0
aW9uX2ltcGxlbWVudGF0aW9uKHJlY2VpdmVycywgcmVjZWl2ZXJfaGVhZGVycyk6CisgICAgaGVh
ZGVyX2NvbmRpdGlvbnMgPSB7CisgICAgICAgICciSlNJUENCaW5kaW5nLmgiJzogW05vbmVdCisg
ICAgfQorICAgIGZvciByZWNlaXZlciBpbiByZWNlaXZlcnM6CisgICAgICAgIGhlYWRlcl9jb25k
aXRpb25zWyciJXMiJyAlIG1lc3NhZ2VzX2hlYWRlcl9maWxlbmFtZShyZWNlaXZlcildID0gW05v
bmVdCisgICAgICAgIGNvbGxlY3RfaGVhZGVyX2NvbmRpdGlvbnNfZm9yX3JlY2VpdmVyKHJlY2Vp
dmVyLCBoZWFkZXJfY29uZGl0aW9ucykKKworICAgIHJlc3VsdCA9IFtdCisgICAgcmVzdWx0LmFw
cGVuZChfbGljZW5zZV9oZWFkZXIpCisgICAgcmVzdWx0LmFwcGVuZCgnI2luY2x1ZGUgImNvbmZp
Zy5oIlxuJykKKyAgICByZXN1bHQuYXBwZW5kKCcjaW5jbHVkZSAiTWVzc2FnZUFyZ3VtZW50RGVz
Y3JpcHRpb25zLmgiXG4nKQorICAgIHJlc3VsdC5hcHBlbmQoJ1xuJykKKyAgICBnZW5lcmF0ZV9o
ZWFkZXJfaW5jbHVkZXNfZnJvbV9jb25kaXRpb25zKHJlc3VsdCwgaGVhZGVyX2NvbmRpdGlvbnMp
CisgICAgcmVzdWx0LmFwcGVuZCgnXG4nKQorICAgIHJlc3VsdC5hcHBlbmQoJyNpZiBFTkFCTEUo
SVBDX1RFU1RJTkdfQVBJKVxuJykKKyAgICByZXN1bHQuYXBwZW5kKCdcbicpCisKKyAgICBmb3Ig
aGVhZGVyIGluIHNvcnRlZChoZWFkZXJfY29uZGl0aW9ucyk6CisgICAgICAgIGlmIGhlYWRlcl9j
b25kaXRpb25zW2hlYWRlcl0gYW5kIG5vdCBOb25lIGluIGhlYWRlcl9jb25kaXRpb25zW2hlYWRl
cl06CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcjaWYgJXNcbicgJSAnIHx8ICcuam9pbihz
b3J0ZWQoc2V0KGhlYWRlcl9jb25kaXRpb25zW2hlYWRlcl0pKSkpCisgICAgICAgICAgICByZXN1
bHQgKz0gWycjaW5jbHVkZSAlc1xuJyAlIGhlYWRlcl0KKyAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQoJyNlbmRpZlxuJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlc3VsdCArPSBbJyNp
bmNsdWRlICVzXG4nICUgaGVhZGVyXQorCisgICAgcmVzdWx0LmFwcGVuZCgnI2luY2x1ZGUgIkpT
SVBDQmluZGluZy5oIlxuJykKKyAgICByZXN1bHQuYXBwZW5kKCdcbicpCisKKyAgICBmb3IgaGVh
ZGVyIGluIHJlY2VpdmVyX2hlYWRlcnM6CisgICAgICAgIHJlc3VsdC5hcHBlbmQoJyNpbmNsdWRl
ICIlcyJcbicgJSAoaGVhZGVyKSkKKworICAgIHJlc3VsdC5hcHBlbmQoJ1xuJykKKyAgICByZXN1
bHQuYXBwZW5kKCduYW1lc3BhY2UgSVBDIHtcbicpCisgICAgcmVzdWx0LmFwcGVuZCgnXG4nKQor
CisgICAgZ2VuZXJhdGVfanNfdmFsdWVfY29udmVyc2lvbl9mdW5jdGlvbihyZXN1bHQsIHJlY2Vp
dmVycywgJ2pzVmFsdWVGb3JBcmd1bWVudHMnLCAnQXJndW1lbnRzJykKKworICAgIHJlc3VsdC5h
cHBlbmQoJ1xuJykKKworICAgIGdlbmVyYXRlX2pzX3ZhbHVlX2NvbnZlcnNpb25fZnVuY3Rpb24o
cmVzdWx0LCByZWNlaXZlcnMsICdqc1ZhbHVlRm9yUmVwbHlBcmd1bWVudHMnLCAnUmVwbHlBcmd1
bWVudHMnLAorICAgICAgICBsYW1iZGEgbWVzc2FnZTogbWVzc2FnZS5yZXBseV9wYXJhbWV0ZXJz
ICE9IE5vbmUgYW5kIChtZXNzYWdlLmhhc19hdHRyaWJ1dGUoU1lOQ0hST05PVVNfQVRUUklCVVRF
KSBvciBtZXNzYWdlLmhhc19hdHRyaWJ1dGUoQVNZTkNfQVRUUklCVVRFKSkpCisKKyAgICByZXN1
bHQuYXBwZW5kKCdcbicpCisKKyAgICByZXN1bHQuYXBwZW5kKCdWZWN0b3I8QXJndW1lbnREZXNj
cmlwdGlvbj4gbWVzc2FnZUFyZ3VtZW50RGVzY3JpcHRpb25zKE1lc3NhZ2VOYW1lIG5hbWUpXG4n
KQorICAgIHJlc3VsdC5hcHBlbmQoJ3tcbicpCisgICAgcmVzdWx0LmFwcGVuZCgnICAgIHN3aXRj
aCAobmFtZSkge1xuJykKKworICAgIGZvciByZWNlaXZlciBpbiByZWNlaXZlcnM6CisgICAgICAg
IGlmIHJlY2VpdmVyLmNvbmRpdGlvbjoKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyNpZiAl
c1xuJyAlIHJlY2VpdmVyLmNvbmRpdGlvbikKKyAgICAgICAgcHJldmlzaW9uX21lc3NhZ2VfY29u
ZGl0aW9uID0gTm9uZQorICAgICAgICBmb3IgbWVzc2FnZSBpbiByZWNlaXZlci5tZXNzYWdlczoK
KyAgICAgICAgICAgIGlmIG5vdCBsZW4obWVzc2FnZS5wYXJhbWV0ZXJzKToKKyAgICAgICAgICAg
ICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgcHJldmlzaW9uX21lc3NhZ2VfY29uZGl0aW9u
ICE9IG1lc3NhZ2UuY29uZGl0aW9uOgorICAgICAgICAgICAgICAgIGlmIHByZXZpc2lvbl9tZXNz
YWdlX2NvbmRpdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnI2VuZGlm
XG4nKQorICAgICAgICAgICAgICAgIGlmIG1lc3NhZ2UuY29uZGl0aW9uOgorICAgICAgICAgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKCcjaWYgJXNcbicgJSBtZXNzYWdlLmNvbmRpdGlvbikKKyAg
ICAgICAgICAgIHByZXZpc2lvbl9tZXNzYWdlX2NvbmRpdGlvbiA9IG1lc3NhZ2UuY29uZGl0aW9u
CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgY2FzZSBNZXNzYWdlTmFtZTo6JXNfJXM6
XG4nICUgKHJlY2VpdmVyLm5hbWUsIG1lc3NhZ2UubmFtZSkpCisgICAgICAgICAgICByZXN1bHQu
YXBwZW5kKCcgICAgICAgIHJldHVybiB7XG4nKQorICAgICAgICAgICAgZm9yIHBhcmFtZXRlciBp
biBtZXNzYWdlLnBhcmFtZXRlcnM6CisgICAgICAgICAgICAgICAgcGFyYW1ldGVyX3R5cGUgPSBw
YXJhbWV0ZXIudHlwZQorICAgICAgICAgICAgICAgIGVudW1fdHlwZSA9IE5vbmUKKyAgICAgICAg
ICAgICAgICBpc19vcHRpb25hbCA9IEZhbHNlCisgICAgICAgICAgICAgICAgaWYgcGFyYW1ldGVy
LmtpbmQuc3RhcnRzd2l0aCgnZW51bTonKToKKyAgICAgICAgICAgICAgICAgICAgZW51bV90eXBl
ID0gJyIlcyInICUgcGFyYW1ldGVyX3R5cGUKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVy
X3R5cGUgPSBwYXJhbWV0ZXIua2luZFs1Ol0KKyAgICAgICAgICAgICAgICBpZiBwYXJhbWV0ZXJf
dHlwZS5zdGFydHN3aXRoKCdPcHRpb25hbDwnKSBhbmQgcGFyYW1ldGVyX3R5cGUuZW5kc3dpdGgo
Jz4nKToKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyX3R5cGUgPSBwYXJhbWV0ZXJfdHlw
ZVs5Oi0xXQorICAgICAgICAgICAgICAgICAgICBpc19vcHRpb25hbCA9IFRydWUKKyAgICAgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgICAgICAgICB7IiVzIiwgIiVzIiwgJXMsICVzfSxc
bicgJSAocGFyYW1ldGVyLm5hbWUsIHBhcmFtZXRlcl90eXBlLCBlbnVtX3R5cGUgb3IgJ251bGxw
dHInLCAndHJ1ZScgaWYgaXNfb3B0aW9uYWwgZWxzZSAnZmFsc2UnKSkKKyAgICAgICAgICAgIHJl
c3VsdC5hcHBlbmQoJyAgICAgICAgfTtcbicpCisgICAgICAgIGlmIHByZXZpc2lvbl9tZXNzYWdl
X2NvbmRpdGlvbjoKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyNlbmRpZlxuJykKKyAgICAg
ICAgaWYgcmVjZWl2ZXIuY29uZGl0aW9uOgorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnI2Vu
ZGlmXG4nKQorCisgICAgcmVzdWx0LmFwcGVuZCgnICAgIGRlZmF1bHQ6XG4nKQorICAgIHJlc3Vs
dC5hcHBlbmQoJyAgICAgICAgYnJlYWs7XG4nKQorICAgIHJlc3VsdC5hcHBlbmQoJyAgICB9XG4n
KQorICAgIHJlc3VsdC5hcHBlbmQoJyAgICByZXR1cm4geyB9O1xuJykKKyAgICByZXN1bHQuYXBw
ZW5kKCd9XG4nKQorICAgIHJlc3VsdC5hcHBlbmQoJ1xuJykKKyAgICByZXN1bHQuYXBwZW5kKCcj
ZW5kaWZcbicpCisgICAgcmVzdWx0LmFwcGVuZCgnXG4nKQorICAgIHJlc3VsdC5hcHBlbmQoJ30g
Ly8gbmFtZXNwYWNlIFdURlxuJykKKyAgICByZXR1cm4gJycuam9pbihyZXN1bHQpCkluZGV4OiBT
b3VyY2UvV2ViS2l0L1NoYXJlZC9BcHBsZVBheS9BcHBsZVBheVBheW1lbnRTZXR1cEZlYXR1cmVz
V2ViS2l0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvQXBwbGVQYXkvQXBw
bGVQYXlQYXltZW50U2V0dXBGZWF0dXJlc1dlYktpdC5oCShyZXZpc2lvbiAyNjgyNDYpCisrKyBT
b3VyY2UvV2ViS2l0L1NoYXJlZC9BcHBsZVBheS9BcHBsZVBheVBheW1lbnRTZXR1cEZlYXR1cmVz
V2ViS2l0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShB
UFBMRV9QQVkpCiAKK09CSkNfQ0xBU1MgTlNBcnJheTsKIE9CSkNfQ0xBU1MgUEtQYXltZW50U2V0
dXBGZWF0dXJlOwogCiAjaW5jbHVkZSA8V2ViQ29yZS9BcHBsZVBheVNldHVwRmVhdHVyZVdlYkNv
cmUuaD4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQJKHJldmlzaW9uIDI2ODI0NikKKysrIFNv
dXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNjU4LDYgKzY1
OCw3IEBACiBHUFVQcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcAogTGliV2ViUlRDQ29kZWNzUHJv
eHlNZXNzYWdlUmVjZWl2ZXIuY3BwCiBMaWJXZWJSVENDb2RlY3NNZXNzYWdlUmVjZWl2ZXIuY3Bw
CitNZXNzYWdlQXJndW1lbnREZXNjcmlwdGlvbnMuY3BwIEBuby11bmlmeQogTWVzc2FnZU5hbWVz
LmNwcAogUmVtb3RlQXVkaW9EZXN0aW5hdGlvbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwCiBS
ZW1vdGVBdWRpb0Rlc3RpbmF0aW9uUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAJKHJldmlzaW9uIDI2ODI0
NikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTg4Niw2ICs4ODYsMTEgQEAKIAogICAgIFdlYlByb2Nlc3NQb29sOjpkaWRS
ZWNlaXZlSW52YWxpZE1lc3NhZ2UobWVzc2FnZU5hbWUpOwogCisjaWYgRU5BQkxFKElQQ19URVNU
SU5HX0FQSSkKKyAgICBpZiAocHJvY2Vzc1Bvb2woKS5kZWZhdWx0UGFnZUdyb3VwKCkucHJlZmVy
ZW5jZXMoKS5zdG9yZSgpLmdldEJvb2xWYWx1ZUZvcktleShXZWJQcmVmZXJlbmNlc0tleTo6aXBj
VGVzdGluZ0FQSUVuYWJsZWRLZXkoKSkpCisgICAgICAgIHJldHVybjsKKyNlbmRpZgorCiAgICAg
Ly8gVGVybWluYXRlIHRoZSBXZWJDb250ZW50IHByb2Nlc3MuCiAgICAgdGVybWluYXRlKCk7CiAK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkocmV2aXNpb24gMjY4MjQ2KQorKysgU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTQxNyw2ICsxNDE3LDkgQEAKIAkJOUIx
MjI5Q0QyM0ZGMjVGMjAwOENBNzUxIC8qIFJlbW90ZUF1ZGlvRGVzdGluYXRpb25NYW5hZ2VyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjEyMjlDQjIz
RkYyNUYyMDA4Q0E3NTEgLyogUmVtb3RlQXVkaW9EZXN0aW5hdGlvbk1hbmFnZXIuaCAqLzsgfTsK
IAkJOUIxMjI5Q0UyM0ZGMjVGMjAwOENBNzUxIC8qIFJlbW90ZUF1ZGlvRGVzdGluYXRpb25NYW5h
Z2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlC
MTIyOUNDMjNGRjI1RjIwMDhDQTc1MSAvKiBSZW1vdGVBdWRpb0Rlc3RpbmF0aW9uTWFuYWdlci5j
cHAgKi87IH07CiAJCTlCMTIyOUQyMjNGRjJCQ0MwMDhDQTc1MSAvKiBSZW1vdGVBdWRpb0Rlc3Rp
bmF0aW9uSWRlbnRpZmllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOUIxMjI5RDAyM0ZGMkE1RTAwOENBNzUxIC8qIFJlbW90ZUF1ZGlvRGVzdGluYXRp
b25JZGVudGlmaWVyLmggKi87IH07CisJCTlCNDc5MDhEMjUzMTREODMwMEVDMTFBQiAvKiBNZXNz
YWdlQXJndW1lbnREZXNjcmlwdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDlCNDc5MDhDMjUzMTREODMwMEVDMTFBQiAvKiBNZXNzYWdlQXJndW1l
bnREZXNjcmlwdGlvbnMuaCAqLzsgfTsKKwkJOUI0NzkwOEYyNTMxNTFDQzAwRUMxMUFCIC8qIEpT
SVBDQmluZGluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOUI0NzkwOEUyNTMxNTFDQzAwRUMxMUFCIC8qIEpTSVBDQmluZGluZy5oICovOyB9OworCQk5
QjQ3OTA5MTI1MzE1NjMyMDBFQzExQUIgLyogTWVzc2FnZUFyZ3VtZW50RGVzY3JpcHRpb25zLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCNDc5MDkw
MjUzMTU2MzIwMEVDMTFBQiAvKiBNZXNzYWdlQXJndW1lbnREZXNjcmlwdGlvbnMuY3BwICovOyB9
OwogCQk5QjU0OTlBRDIzNjJBNkY5MDBERjhCQTUgLyogX1dLVGV4dE1hbmlwdWxhdGlvbkNvbmZp
Z3VyYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDlCNTQ5OUFDMjM2MkE2RjYwMERGOEJBNSAvKiBfV0tUZXh0TWFuaXB1bGF0aW9uQ29uZmlndXJh
dGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTlCNTQ5OUIyMjM2MkE3RUMwMERGOEJBNSAvKiBfV0tUZXh0TWFuaXB1bGF0aW9uRXhjbHVzaW9u
UnVsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUI1
NDk5QjAyMzYyQTdFQzAwREY4QkE1IC8qIF9XS1RleHRNYW5pcHVsYXRpb25FeGNsdXNpb25SdWxl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOUI1
QkVDMjYyNDAwRjRBOTAwNzBDNkVGIC8qIFdlYk1lZGlhU3RyYXRlZ3kuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCNUJFQzI0MjQwMEY0QTkwMDcwQzZF
RiAvKiBXZWJNZWRpYVN0cmF0ZWd5LmggKi87IH07CkBAIC00NDkzLDYgKzQ0OTYsOSBAQAogCQk5
QjEyMjlDQzIzRkYyNUYyMDA4Q0E3NTEgLyogUmVtb3RlQXVkaW9EZXN0aW5hdGlvbk1hbmFnZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVtb3RlQXVkaW9EZXN0aW5hdGlvbk1hbmFnZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QjEyMjlDRjIzRkYyODE0MDA4Q0E3NTEg
LyogUmVtb3RlQXVkaW9EZXN0aW5hdGlvbk1hbmFnZXIubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gUmVtb3Rl
QXVkaW9EZXN0aW5hdGlvbk1hbmFnZXIubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTlCMTIyOUQwMjNGRjJBNUUwMDhDQTc1MSAvKiBSZW1vdGVBdWRpb0Rlc3RpbmF0
aW9uSWRlbnRpZmllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVBdWRpb0Rlc3RpbmF0aW9uSWRl
bnRpZmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5QjQ3OTA4QzI1MzE0RDgz
MDBFQzExQUIgLyogTWVzc2FnZUFyZ3VtZW50RGVzY3JpcHRpb25zLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IE1lc3NhZ2VBcmd1bWVudERlc2NyaXB0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk5QjQ3OTA4RTI1MzE1MUNDMDBFQzExQUIgLyogSlNJUENCaW5kaW5nLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEpTSVBDQmluZGluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5QjQ3
OTA5MDI1MzE1NjMyMDBFQzExQUIgLyogTWVzc2FnZUFyZ3VtZW50RGVzY3JpcHRpb25zLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IE1lc3NhZ2VBcmd1bWVudERlc2Ny
aXB0aW9ucy5jcHA7IHBhdGggPSBNZXNzYWdlQXJndW1lbnREZXNjcmlwdGlvbnMuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QjU0OTlBQzIzNjJBNkY2MDBERjhCQTUgLyogX1dL
VGV4dE1hbmlwdWxhdGlvbkNvbmZpZ3VyYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gX1dLVGV4dE1h
bmlwdWxhdGlvbkNvbmZpZ3VyYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
OUI1NDk5QUUyMzYyQTdBNzAwREY4QkE1IC8qIF9XS1RleHRNYW5pcHVsYXRpb25Db25maWd1cmF0
aW9uLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gX1dLVGV4dE1hbmlwdWxhdGlvbkNvbmZpZ3Vy
YXRpb24ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCNTQ5OUIwMjM2MkE3RUMw
MERGOEJBNSAvKiBfV0tUZXh0TWFuaXB1bGF0aW9uRXhjbHVzaW9uUnVsZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBfV0tUZXh0TWFuaXB1bGF0aW9uRXhjbHVzaW9uUnVsZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtNjQyNCw2ICs2NDMwLDggQEAKIAkJCQkyREMxODgxQUNCQ0FCNUQ1N0M1
QzZFRjAgLyogU2hhcmVkQnVmZmVyRGF0YVJlZmVyZW5jZS5oICovLAogCQkJCTFBRTAwRDY5MTgz
MjdDMTIwMDA4N0RENyAvKiBTdHJpbmdSZWZlcmVuY2UuY3BwICovLAogCQkJCTFBRTAwRDZBMTgz
MjdDMTIwMDA4N0RENyAvKiBTdHJpbmdSZWZlcmVuY2UuaCAqLywKKwkJCQk5QjQ3OTA4QzI1MzE0
RDgzMDBFQzExQUIgLyogTWVzc2FnZUFyZ3VtZW50RGVzY3JpcHRpb25zLmggKi8sCisJCQkJOUI0
NzkwOEUyNTMxNTFDQzAwRUMxMUFCIC8qIEpTSVBDQmluZGluZy5oICovLAogCQkJKTsKIAkJCXBh
dGggPSBJUEM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMTAwMTUsNiArMTAwMjMs
NyBAQAogCQkJCTA3RTE5RUY4MjNENDAxRjAwMDk0RkZCNCAvKiBNZWRpYVBsYXllclByaXZhdGVS
ZW1vdGVNZXNzYWdlUmVjZWl2ZXIuY3BwICovLAogCQkJCTA3RTE5RUY5MjNENDAxRjAwMDk0RkZC
NCAvKiBNZWRpYVBsYXllclByaXZhdGVSZW1vdGVNZXNzYWdlcy5oICovLAogCQkJCTA3RTE5RUZB
MjNENDAxRjAwMDk0RkZCNCAvKiBNZWRpYVBsYXllclByaXZhdGVSZW1vdGVNZXNzYWdlc1JlcGxp
ZXMuaCAqLywKKwkJCQk5QjQ3OTA5MDI1MzE1NjMyMDBFQzExQUIgLyogTWVzc2FnZUFyZ3VtZW50
RGVzY3JpcHRpb25zLmNwcCAqLywKIAkJCQk1MUREOUYyNjE2MzY3REEyMDAxNTc4RTkgLyogTmV0
d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlUmVjZWl2ZXIuY3BwICovLAogCQkJCTUx
REQ5RjI3MTYzNjdEQTIwMDE1NzhFOSAvKiBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01l
c3NhZ2VzLmggKi8sCiAJCQkJNTJGMDYwREQxNjU0MzE3NTAwRjMyODFCIC8qIE5ldHdvcmtDb250
ZW50UnVsZUxpc3RNYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCAqLywKQEAgLTExMjQxLDYgKzEx
MjUwLDcgQEAKIAkJCQlCQ0Y0REUyNTE2OEZBNDQ4MDBDOTRBRkMgLyogV2ViQ29udGV4dFN1cHBs
ZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ2ODA5QTdDMjNEOTIyNUUwMEMyOTdEMCAvKiBX
ZWJDb29raWVDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM3RkI0NzAyMUU5N0RDNTAwOUUz
MjQxIC8qIFdlYkNvb2tpZUphci5oIGluIEhlYWRlcnMgKi8sCisJCQkJOUI0NzkwOEQyNTMxNEQ4
MzAwRUMxMUFCIC8qIE1lc3NhZ2VBcmd1bWVudERlc2NyaXB0aW9ucy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMzMwOTM0NTAxMzE1Qjk0RDAwOTdBN0JDIC8qIFdlYkNvb2tpZU1hbmFnZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTMzMDkzNDQ4MTMxNUI5MjIwMDk3QTdCQyAvKiBXZWJDb29raWVNYW5h
Z2VyTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTMzMDkzNDU2MTMxNUI5NzUwMDk3QTdC
QyAvKiBXZWJDb29raWVNYW5hZ2VyUHJveHkuaCBpbiBIZWFkZXJzICovLApAQCAtMTE2NDAsNiAr
MTE2NTAsNyBAQAogCQkJCTFBQTEzMjEyMTkxRDU5MjQwMDlDMTQ4OSAvKiBXS05hdmlnYXRpb25S
ZXNwb25zZVByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTJEM0E2NURGMUE3QzNBN0QwMENB
QzYzNyAvKiBXS05hdmlnYXRpb25SZXNwb25zZVJlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTcw
REFBQzYyMzAzN0Y3RjAwRThGQzA0IC8qIFdLTkZSZWFkZXJTZXNzaW9uRGVsZWdhdGUuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTlCNDc5MDhGMjUzMTUxQ0MwMEVDMTFBQiAvKiBKU0lQQ0JpbmRpbmcu
aCBpbiBIZWFkZXJzICovLAogCQkJCTMxOEJFMTc5MTQ3NDNFNkYwMEE4RkJCMiAvKiBXS05vdGlm
aWNhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzE4QkUxNzExNDc0M0RCMTAwQThGQkIyIC8q
IFdLTm90aWZpY2F0aW9uTWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzFBMkVDNzQxNDhE
NTlDQTAwODEwRDcxIC8qIFdLTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3QuaCBpbiBIZWFk
ZXJzICovLApAQCAtMTI4MTYsNiArMTI4MjcsNyBAQAogCQkJCTA3MDE3ODlFMjNCRTlDRkMwMDVG
MEZBQSAvKiBSZW1vdGVNZWRpYVBsYXllck1JTUVUeXBlQ2FjaGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMDcxQkM1OEYyM0NFMUVBQTAwNjgwRDdDIC8qIFJlbW90ZU1lZGlhUGxheWVyUHJveHlN
ZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUQ0RDczNzAyM0E5RTU0NzAw
NzE3QTI1IC8qIFJlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTlCNDc5MDkxMjUzMTU2MzIwMEVDMTFBQiAvKiBNZXNzYWdlQXJn
dW1lbnREZXNjcmlwdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFDMTMzODUxODU5MEM0
NjAwRjNFQzA1IC8qIFJlbW90ZU9iamVjdFJlZ2lzdHJ5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGNTk0N0E3MTg3QjUxNzYwMDQzNzg1NyAvKiBSZW1vdGVTY3JvbGxp
bmdDb29yZGluYXRvck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTVC
QTgyNjFCQTI1Q0ZEMDA3Q0QzM0QgLyogUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlNZXNzYWdlUmVj
ZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9JUENUZXN0aW5nQVBJLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9JUENUZXN0aW5nQVBJLmNwcAkocmV2aXNpb24gMjY4MjQ2KQorKysg
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvSVBDVGVzdGluZ0FQSS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlICJFbmNvZGVyLmgiCiAjaW5jbHVk
ZSAiRnJhbWVJbmZvRGF0YS5oIgogI2luY2x1ZGUgIkdQVVByb2Nlc3NDb25uZWN0aW9uLmgiCi0j
aW5jbHVkZSAiTWVzc2FnZU5hbWVzLmgiCisjaW5jbHVkZSAiTWVzc2FnZUFyZ3VtZW50RGVzY3Jp
cHRpb25zLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLmgiCiAjaW5jbHVk
ZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSAiV2ViRnJhbWUuaCIKQEAgLTgz
LDYgKzgzLDggQEAKIAogICAgIHN0YXRpYyBKU1ZhbHVlUmVmIHZpc2l0ZWRMaW5rU3RvcmVJRChK
U0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmLCBKU1N0cmluZ1JlZiwgSlNWYWx1ZVJlZiogZXhjZXB0
aW9uKTsKICAgICBzdGF0aWMgSlNWYWx1ZVJlZiB3ZWJQYWdlUHJveHlJRChKU0NvbnRleHRSZWYs
IEpTT2JqZWN0UmVmLCBKU1N0cmluZ1JlZiwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsKKyAgICBz
dGF0aWMgSlNWYWx1ZVJlZiBzZXNzaW9uSUQoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiwgSlNT
dHJpbmdSZWYsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CisgICAgc3RhdGljIEpTVmFsdWVSZWYg
cGFnZUlkZW50aWZpZXIoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiwgSlNTdHJpbmdSZWYsIEpT
VmFsdWVSZWYqIGV4Y2VwdGlvbik7CiAgICAgc3RhdGljIEpTVmFsdWVSZWYgZnJhbWVJZGVudGlm
aWVyKEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYsIEpTU3RyaW5nUmVmLCBKU1ZhbHVlUmVmKiBl
eGNlcHRpb24pOwogICAgIHN0YXRpYyBKU1ZhbHVlUmVmIHJldHJpZXZlSUQoSlNDb250ZXh0UmVm
LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24sIGNvbnN0IFdU
Rjo6RnVuY3Rpb248dWludDY0X3QoSlNJUEMmKT4mKTsKIApAQCAtMTQ1LDYgKzE0Nyw4IEBACiAg
ICAgc3RhdGljIGNvbnN0IEpTU3RhdGljVmFsdWUgdmFsdWVzW10gPSB7CiAgICAgICAgIHsgInZp
c2l0ZWRMaW5rU3RvcmVJRCIsIHZpc2l0ZWRMaW5rU3RvcmVJRCwgMCwga0pTUHJvcGVydHlBdHRy
aWJ1dGVEb250RGVsZXRlIHwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB9LAogICAgICAg
ICB7ICJ3ZWJQYWdlUHJveHlJRCIsIHdlYlBhZ2VQcm94eUlELCAwLCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZURvbnREZWxldGUgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IH0sCisgICAgICAg
IHsgInNlc3Npb25JRCIsIHNlc3Npb25JRCwgMCwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVs
ZXRlIHwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB9LAorICAgICAgICB7ICJwYWdlSWRl
bnRpZmllciIsIHBhZ2VJZGVudGlmaWVyLCAwLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxl
dGUgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IH0sCiAgICAgICAgIHsgImZyYW1lSWRl
bnRpZmllciIsIGZyYW1lSWRlbnRpZmllciwgMCwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVs
ZXRlIHwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB9LAogICAgICAgICB7ICJtZXNzYWdl
cyIsIG1lc3NhZ2VzLCAwLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IH0sCiAgICAgICAgIHsgMCwgMCwgMCwgMCB9CkBAIC0yMzcs
MjYgKzI0MSwzOSBAQAogICAgIHJldHVybiB0b1JlZihKU0M6OmNyZWF0ZVR5cGVFcnJvcih0b0pT
KGNvbnRleHQpLCBtZXNzYWdlKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFJlY3RUeXBlPiBi
b29sIGVuY29kZVJlY3RUeXBlKElQQzo6RW5jb2RlciYgZW5jb2RlciwgSlNDOjpKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTT2JqZWN0KiBqc09iamVjdCkKK3RlbXBsYXRlPHR5
cGVuYW1lIFBvaW50VHlwZT4gYm9vbCBlbmNvZGVQb2ludFR5cGUoSVBDOjpFbmNvZGVyJiBlbmNv
ZGVyLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNPYmplY3QqIGpz
T2JqZWN0LCBKU0M6OkNhdGNoU2NvcGUmIHNjb3BlKQogewogICAgIGF1dG8mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOwogICAgIGF1dG8ganNYID0ganNPYmplY3QtPmdldChnbG9iYWxPYmplY3Qs
IEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIngiX3MpKTsKLSAgICBpZiAoIWpzWC5p
c051bWJlcigpKQorICAgIGlmIChzY29wZS5leGNlcHRpb24oKSB8fCAhanNYLmlzTnVtYmVyKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBhdXRvIGpzWSA9IGpzT2JqZWN0LT5nZXQoZ2xv
YmFsT2JqZWN0LCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ5Il9zKSk7Ci0gICAg
aWYgKCFqc1kuaXNOdW1iZXIoKSkKKyAgICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkgfHwgIWpzWS5p
c051bWJlcigpKQogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZW5jb2RlciA8PCBQb2ludFR5
cGUoanNYLmFzTnVtYmVyKCksIGpzWS5hc051bWJlcigpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgUmVjdFR5cGU+IGJvb2wgZW5jb2RlUmVjdFR5cGUoSVBDOjpF
bmNvZGVyJiBlbmNvZGVyLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6
SlNPYmplY3QqIGpzT2JqZWN0LCBKU0M6OkNhdGNoU2NvcGUmIHNjb3BlKQoreworICAgIGF1dG8m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8ganNYID0ganNPYmplY3QtPmdldChn
bG9iYWxPYmplY3QsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIngiX3MpKTsKKyAg
ICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkgfHwgIWpzWC5pc051bWJlcigpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgYXV0byBqc1kgPSBqc09iamVjdC0+Z2V0KGdsb2JhbE9iamVjdCwgSlND
OjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAieSJfcykpOworICAgIGlmIChzY29wZS5leGNl
cHRpb24oKSB8fCAhanNZLmlzTnVtYmVyKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBh
dXRvIGpzV2lkdGggPSBqc09iamVjdC0+Z2V0KGdsb2JhbE9iamVjdCwgSlNDOjpJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCAid2lkdGgiX3MpKTsKLSAgICBpZiAoIWpzV2lkdGguaXNOdW1iZXIo
KSkKKyAgICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkgfHwgIWpzV2lkdGguaXNOdW1iZXIoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGF1dG8ganNIZWlnaHQgPSBqc09iamVjdC0+Z2V0KGds
b2JhbE9iamVjdCwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiaGVpZ2h0Il9zKSk7
Ci0gICAgaWYgKCFqc0hlaWdodC5pc051bWJlcigpKQorICAgIGlmIChzY29wZS5leGNlcHRpb24o
KSB8fCAhanNIZWlnaHQuaXNOdW1iZXIoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGVu
Y29kZXIgPDwgUmVjdFR5cGUoanNYLmFzTnVtYmVyKCksIGpzWS5hc051bWJlcigpLCBqc1dpZHRo
LmFzTnVtYmVyKCksIGpzSGVpZ2h0LmFzTnVtYmVyKCkpOwogICAgIHJldHVybiB0cnVlOwogfQog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBJbnRlZ3JhbFR5cGU+IGJvb2wgZW5jb2RlSW50ZWdyYWxUeXBl
KElQQzo6RW5jb2RlciYgZW5jb2RlciwgSlNDOjpKU1ZhbHVlIGpzVmFsdWUpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBJbnRlZ3JhbFR5cGU+IGJvb2wgZW5jb2RlTnVtZXJpY1R5cGUoSVBDOjpFbmNvZGVy
JiBlbmNvZGVyLCBKU0M6OkpTVmFsdWUganNWYWx1ZSkKIHsKICAgICBpZiAoanNWYWx1ZS5pc0Jp
Z0ludCgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBTdXBwb3J0IG5lZ2F0aXZlIEJpZ0ludC4KQEAg
LTM0MCw4ICszNTcsMjQgQEAKICAgICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAorICAgIGlmICh0eXBlID09ICJJbnRQb2ludCIpIHsKKyAgICAgICAgaWYg
KCFlbmNvZGVQb2ludFR5cGU8V2ViQ29yZTo6SW50UG9pbnQ+KGVuY29kZXIsIGdsb2JhbE9iamVj
dCwganNPYmplY3QsIHNjb3BlKSkgeworICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVR5
cGVFcnJvcihjb250ZXh0LCAiRmFpbGVkIHRvIGNvbnZlcnQgSW50UG9pbnQiX3MpOworICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKworICAgIGlmICh0eXBlID09ICJGbG9hdFBvaW50IikgeworICAgICAgICBpZiAoIWVuY29k
ZVBvaW50VHlwZTxXZWJDb3JlOjpJbnRQb2ludD4oZW5jb2RlciwgZ2xvYmFsT2JqZWN0LCBqc09i
amVjdCwgc2NvcGUpKSB7CisgICAgICAgICAgICAqZXhjZXB0aW9uID0gY3JlYXRlVHlwZUVycm9y
KGNvbnRleHQsICJGYWlsZWQgdG8gY29udmVydCBGbG9hdFBvaW50Il9zKTsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
ICAgICBpZiAodHlwZSA9PSAiSW50UmVjdCIpIHsKLSAgICAgICAgaWYgKCFlbmNvZGVSZWN0VHlw
ZTxXZWJDb3JlOjpJbnRSZWN0PihlbmNvZGVyLCBnbG9iYWxPYmplY3QsIGpzT2JqZWN0KSkgewor
ICAgICAgICBpZiAoIWVuY29kZVJlY3RUeXBlPFdlYkNvcmU6OkludFJlY3Q+KGVuY29kZXIsIGds
b2JhbE9iamVjdCwganNPYmplY3QsIHNjb3BlKSkgewogICAgICAgICAgICAgKmV4Y2VwdGlvbiA9
IGNyZWF0ZVR5cGVFcnJvcihjb250ZXh0LCAiRmFpbGVkIHRvIGNvbnZlcnQgSW50UmVjdCJfcyk7
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KQEAgLTM0OSw3ICszODIsNyBA
QAogICAgIH0KIAogICAgIGlmICh0eXBlID09ICJGbG9hdFJlY3QiKSB7Ci0gICAgICAgIGlmICgh
ZW5jb2RlUmVjdFR5cGU8V2ViQ29yZTo6RmxvYXRSZWN0PihlbmNvZGVyLCBnbG9iYWxPYmplY3Qs
IGpzT2JqZWN0KSkgeworICAgICAgICBpZiAoIWVuY29kZVJlY3RUeXBlPFdlYkNvcmU6OkZsb2F0
UmVjdD4oZW5jb2RlciwgZ2xvYmFsT2JqZWN0LCBqc09iamVjdCwgc2NvcGUpKSB7CiAgICAgICAg
ICAgICAqZXhjZXB0aW9uID0gY3JlYXRlVHlwZUVycm9yKGNvbnRleHQsICJGYWlsZWQgdG8gY29u
dmVydCBGbG9hdFJlY3QiX3MpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9
CkBAIC0zODIsNiArNDE1LDMwIEBACiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAorICAg
IGlmICh0eXBlID09ICJVUkwiKSB7CisgICAgICAgIGlmIChqc1ZhbHVlLmlzVW5kZWZpbmVkT3JO
dWxsKCkpIHsKKyAgICAgICAgICAgIGVuY29kZXIgPDwgVVJMIHsgfTsKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGF1dG8gc3RyaW5nID0ganNWYWx1ZS50b1dU
RlN0cmluZyhnbG9iYWxPYmplY3QpOworICAgICAgICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGVuY29kZXIgPDwgVVJMIHsgVVJMIHsg
fSwgc3RyaW5nIH07CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmICh0eXBl
ID09ICJSZWdpc3RyYWJsZURvbWFpbiIpIHsKKyAgICAgICAgaWYgKGpzVmFsdWUuaXNVbmRlZmlu
ZWRPck51bGwoKSkgeworICAgICAgICAgICAgZW5jb2RlciA8PCBSZWdpc3RyYWJsZURvbWFpbiB7
IH07CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBhdXRvIHN0
cmluZyA9IGpzVmFsdWUudG9XVEZTdHJpbmcoZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgaWYgKHNj
b3BlLmV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBlbmNv
ZGVyIDw8IFJlZ2lzdHJhYmxlRG9tYWluIHsgVVJMIHsgVVJMIHsgfSwgc3RyaW5nIH0gfTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCiAgICAgaWYgKHR5cGUgPT0gIlJHQkEiKSB7CiAg
ICAgICAgIGlmICghanNWYWx1ZS5pc051bWJlcigpKSB7CiAgICAgICAgICAgICAqZXhjZXB0aW9u
ID0gY3JlYXRlVHlwZUVycm9yKGNvbnRleHQsICJSR0JBIHZhbHVlIHNob3VsZCBiZSBhIG51bWJl
ciJfcyk7CkBAIC0zOTIsMzYgKzQ0OSw0NCBAQAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAKLSAgICBib29sIGludGVncmFsUmVzdWx0OworICAgIGJvb2wgbnVtZXJpY1Jlc3VsdDsKICAg
ICBpZiAodHlwZSA9PSAiYm9vbCIpCi0gICAgICAgIGludGVncmFsUmVzdWx0ID0gZW5jb2RlSW50
ZWdyYWxUeXBlPGJvb2w+KGVuY29kZXIsIGpzVmFsdWUpOworICAgICAgICBudW1lcmljUmVzdWx0
ID0gZW5jb2RlTnVtZXJpY1R5cGU8Ym9vbD4oZW5jb2RlciwganNWYWx1ZSk7CisgICAgZWxzZSBp
ZiAodHlwZSA9PSAiZG91YmxlIikKKyAgICAgICAgbnVtZXJpY1Jlc3VsdCA9IGVuY29kZU51bWVy
aWNUeXBlPGRvdWJsZT4oZW5jb2RlciwganNWYWx1ZSk7CisgICAgZWxzZSBpZiAodHlwZSA9PSAi
ZmxvYXQiKQorICAgICAgICBudW1lcmljUmVzdWx0ID0gZW5jb2RlTnVtZXJpY1R5cGU8ZmxvYXQ+
KGVuY29kZXIsIGpzVmFsdWUpOwogICAgIGVsc2UgaWYgKHR5cGUgPT0gImludDhfdCIpCi0gICAg
ICAgIGludGVncmFsUmVzdWx0ID0gZW5jb2RlSW50ZWdyYWxUeXBlPGludDhfdD4oZW5jb2Rlciwg
anNWYWx1ZSk7CisgICAgICAgIG51bWVyaWNSZXN1bHQgPSBlbmNvZGVOdW1lcmljVHlwZTxpbnQ4
X3Q+KGVuY29kZXIsIGpzVmFsdWUpOwogICAgIGVsc2UgaWYgKHR5cGUgPT0gImludDE2X3QiKQot
ICAgICAgICBpbnRlZ3JhbFJlc3VsdCA9IGVuY29kZUludGVncmFsVHlwZTxpbnQxNl90PihlbmNv
ZGVyLCBqc1ZhbHVlKTsKKyAgICAgICAgbnVtZXJpY1Jlc3VsdCA9IGVuY29kZU51bWVyaWNUeXBl
PGludDE2X3Q+KGVuY29kZXIsIGpzVmFsdWUpOwogICAgIGVsc2UgaWYgKHR5cGUgPT0gImludDMy
X3QiKQotICAgICAgICBpbnRlZ3JhbFJlc3VsdCA9IGVuY29kZUludGVncmFsVHlwZTxpbnQzMl90
PihlbmNvZGVyLCBqc1ZhbHVlKTsKKyAgICAgICAgbnVtZXJpY1Jlc3VsdCA9IGVuY29kZU51bWVy
aWNUeXBlPGludDMyX3Q+KGVuY29kZXIsIGpzVmFsdWUpOwogICAgIGVsc2UgaWYgKHR5cGUgPT0g
ImludDY0X3QiKQotICAgICAgICBpbnRlZ3JhbFJlc3VsdCA9IGVuY29kZUludGVncmFsVHlwZTxp
bnQ2NF90PihlbmNvZGVyLCBqc1ZhbHVlKTsKKyAgICAgICAgbnVtZXJpY1Jlc3VsdCA9IGVuY29k
ZU51bWVyaWNUeXBlPGludDY0X3Q+KGVuY29kZXIsIGpzVmFsdWUpOwogICAgIGVsc2UgaWYgKHR5
cGUgPT0gInVpbnQ4X3QiKQotICAgICAgICBpbnRlZ3JhbFJlc3VsdCA9IGVuY29kZUludGVncmFs
VHlwZTx1aW50OF90PihlbmNvZGVyLCBqc1ZhbHVlKTsKKyAgICAgICAgbnVtZXJpY1Jlc3VsdCA9
IGVuY29kZU51bWVyaWNUeXBlPHVpbnQ4X3Q+KGVuY29kZXIsIGpzVmFsdWUpOwogICAgIGVsc2Ug
aWYgKHR5cGUgPT0gInVpbnQxNl90IikKLSAgICAgICAgaW50ZWdyYWxSZXN1bHQgPSBlbmNvZGVJ
bnRlZ3JhbFR5cGU8dWludDE2X3Q+KGVuY29kZXIsIGpzVmFsdWUpOworICAgICAgICBudW1lcmlj
UmVzdWx0ID0gZW5jb2RlTnVtZXJpY1R5cGU8dWludDE2X3Q+KGVuY29kZXIsIGpzVmFsdWUpOwog
ICAgIGVsc2UgaWYgKHR5cGUgPT0gInVpbnQzMl90IikKLSAgICAgICAgaW50ZWdyYWxSZXN1bHQg
PSBlbmNvZGVJbnRlZ3JhbFR5cGU8dWludDMyX3Q+KGVuY29kZXIsIGpzVmFsdWUpOworICAgICAg
ICBudW1lcmljUmVzdWx0ID0gZW5jb2RlTnVtZXJpY1R5cGU8dWludDMyX3Q+KGVuY29kZXIsIGpz
VmFsdWUpOwogICAgIGVsc2UgaWYgKHR5cGUgPT0gInVpbnQ2NF90IikKLSAgICAgICAgaW50ZWdy
YWxSZXN1bHQgPSBlbmNvZGVJbnRlZ3JhbFR5cGU8dWludDY0X3Q+KGVuY29kZXIsIGpzVmFsdWUp
OworICAgICAgICBudW1lcmljUmVzdWx0ID0gZW5jb2RlTnVtZXJpY1R5cGU8dWludDY0X3Q+KGVu
Y29kZXIsIGpzVmFsdWUpOwogICAgIGVsc2UgewogICAgICAgICAqZXhjZXB0aW9uID0gY3JlYXRl
VHlwZUVycm9yKGNvbnRleHQsICJCYWQgdHlwZSBuYW1lIl9zKTsKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KLSAgICBpZiAoIWludGVncmFsUmVzdWx0KSB7Ci0gICAgICAgICpleGNlcHRp
b24gPSBjcmVhdGVUeXBlRXJyb3IoY29udGV4dCwgIkZhaWxlZCB0byBlbmNvZGUgYW4gaW50ZWdl
ciJfcyk7CisgICAgaWYgKCFudW1lcmljUmVzdWx0KSB7CisgICAgICAgICpleGNlcHRpb24gPSBj
cmVhdGVUeXBlRXJyb3IoY29udGV4dCwgIkZhaWxlZCB0byBlbmNvZGUgYSBudW1iZXIiX3MpOwog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIHJldHVybiB0cnVlOwogfQogCitlbnVt
IGNsYXNzIE1lc3NhZ2VPcHRpb24geworICAgIEhhc1JlcGx5ID0gMSA8PCAwLAorfTsKKwogSlNW
YWx1ZVJlZiBKU0lQQzo6c2VuZE1lc3NhZ2UoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0
UmVmLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3Qg
SlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewogICAgIGF1
dG8qIGdsb2JhbE9iamVjdCA9IHRvSlMoY29udGV4dCk7CkBAIC00MjgsMTIgKzQ5MywxMiBAQAog
ICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZ2xvYmFsT2JqZWN0LT52bSgpKTsKICAgICBhdXRv
IGpzSVBDID0gbWFrZVJlZlB0cih0b1dyYXBwZWQoY29udGV4dCwgdGhpc09iamVjdCkpOwogICAg
IGlmICghanNJUEMpIHsKLSAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKEpTQzo6Y3JlYXRlVHlw
ZUVycm9yKHRvSlMoY29udGV4dCksICJXcm9uZyB0eXBlIl9zKSk7CisgICAgICAgICpleGNlcHRp
b24gPSBjcmVhdGVUeXBlRXJyb3IoY29udGV4dCwgIldyb25nIHR5cGUiX3MpOwogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAgICAgfQogCiAgICAgaWYgKGFy
Z3VtZW50Q291bnQgPCAzKSB7Ci0gICAgICAgICpleGNlcHRpb24gPSB0b1JlZihKU0M6OmNyZWF0
ZVR5cGVFcnJvcih0b0pTKGNvbnRleHQpLCAiTXVzdCBzcGVjaWZ5IHRoZSB0YXJnZXQgcHJvY2Vz
cywgZGVzaW5hdGlvbiBJRCwgYW5kIG1lc3NhZ2UgSUQgYXMgdGhlIGZpcnN0IHRocmVlIGFyZ3Vt
ZW50cyJfcykpOworICAgICAgICAqZXhjZXB0aW9uID0gY3JlYXRlVHlwZUVycm9yKGNvbnRleHQs
ICJNdXN0IHNwZWNpZnkgdGhlIHRhcmdldCBwcm9jZXNzLCBkZXNpbmF0aW9uIElELCBhbmQgbWVz
c2FnZSBJRCBhcyB0aGUgZmlyc3QgdGhyZWUgYXJndW1lbnRzIl9zKTsKICAgICAgICAgcmV0dXJu
IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogICAgIH0KIApAQCAtNDQ5LDcgKzUxNCw3
IEBACiAgICAgaWYgKCFtZXNzYWdlSUQpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVm
aW5lZChjb250ZXh0KTsKIAotICAgIGF1dG8gZW5jb2RlciA9IG1ha2VVbmlxdWU8SVBDOjpFbmNv
ZGVyPihzdGF0aWNfY2FzdDxJUEM6Ok1lc3NhZ2VOYW1lPihzdGF0aWNfY2FzdDx1aW50NjRfdD4o
Km1lc3NhZ2VJRCkpLCAqZGVzdGluYXRpb25JRCk7CisgICAgYXV0byBlbmNvZGVyID0gbWFrZVVu
aXF1ZTxJUEM6OkVuY29kZXI+KHN0YXRpY19jYXN0PElQQzo6TWVzc2FnZU5hbWU+KCptZXNzYWdl
SUQpLCAqZGVzdGluYXRpb25JRCk7CiAKICAgICBpZiAoYXJndW1lbnRDb3VudCA+IDMpIHsKICAg
ICAgICAgaWYgKCFlbmNvZGVBcmd1bWVudCgqZW5jb2RlciwgKmpzSVBDLCBjb250ZXh0LCBhcmd1
bWVudHNbM10sIGV4Y2VwdGlvbikpCkBAIC00NjksMTIgKzUzNCwxMiBAQAogICAgIEpTQzo6SlNM
b2NrSG9sZGVyIGxvY2soZ2xvYmFsT2JqZWN0LT52bSgpKTsKICAgICBhdXRvIGpzSVBDID0gbWFr
ZVJlZlB0cih0b1dyYXBwZWQoY29udGV4dCwgdGhpc09iamVjdCkpOwogICAgIGlmICghanNJUEMp
IHsKLSAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKEpTQzo6Y3JlYXRlVHlwZUVycm9yKHRvSlMo
Y29udGV4dCksICJXcm9uZyB0eXBlIl9zKSk7CisgICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVU
eXBlRXJyb3IoY29udGV4dCwgIldyb25nIHR5cGUiX3MpOwogICAgICAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAgICAgfQogCiAgICAgaWYgKGFyZ3VtZW50Q291bnQg
PCA0KSB7Ci0gICAgICAgICpleGNlcHRpb24gPSB0b1JlZihKU0M6OmNyZWF0ZVR5cGVFcnJvcih0
b0pTKGNvbnRleHQpLCAiTXVzdCBzcGVjaWZ5IHRoZSB0YXJnZXQgcHJvY2VzcywgZGVzaW5hdGlv
biBJRCwgbWVzc2FnZSBJRCwgYW5kIHRpbWVvdXQgYXMgdGhlIGZpcnN0IGZvdXIgYXJndW1lbnRz
Il9zKSk7CisgICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVUeXBlRXJyb3IoY29udGV4dCwgIk11
c3Qgc3BlY2lmeSB0aGUgdGFyZ2V0IHByb2Nlc3MsIGRlc2luYXRpb24gSUQsIGFuZCBtZXNzYWdl
IElEIGFzIHRoZSBmaXJzdCB0aHJlZSBhcmd1bWVudHMiX3MpOwogICAgICAgICByZXR1cm4gSlNW
YWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAgICAgfQogCkBAIC00OTQsMTYgKzU1OSwzMyBA
QAogICAgIHsKICAgICAgICAgYXV0byBqc1ZhbHVlID0gdG9KUyhnbG9iYWxPYmplY3QsIGFyZ3Vt
ZW50c1szXSk7CiAgICAgICAgIGlmICghanNWYWx1ZS5pc051bWJlcigpKSB7Ci0gICAgICAgICAg
ICAqZXhjZXB0aW9uID0gdG9SZWYoSlNDOjpjcmVhdGVUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCAi
dGltZW91dCBtdXN0IGJlIGEgbnVtYmVyIl9zKSk7CisgICAgICAgICAgICAqZXhjZXB0aW9uID0g
Y3JlYXRlVHlwZUVycm9yKGNvbnRleHQsICJUaW1lb3V0IG11c3QgYmUgYSBudW1iZXIiX3MpOwog
ICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogICAgICAg
ICB9CiAgICAgICAgIHRpbWVvdXQgPSBTZWNvbmRzIHsganNWYWx1ZS5hc051bWJlcigpIH07CiAg
ICAgfQotICAgIAorCisgICAgT3B0aW9uU2V0PE1lc3NhZ2VPcHRpb24+IG9wdGlvbnM7CisgICAg
aWYgKGFyZ3VtZW50Q291bnQgPiA1KSB7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NB
VENIX1NDT1BFKGdsb2JhbE9iamVjdC0+dm0oKSk7CisgICAgICAgIGF1dG8ganNWYWx1ZSA9IHRv
SlMoZ2xvYmFsT2JqZWN0LCBhcmd1bWVudHNbNF0pOworICAgICAgICBhdXRvKiBqc09iamVjdCA9
IGpzVmFsdWUudG9PYmplY3QoZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgaWYgKHNjb3BlLmV4Y2Vw
dGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQp
OworCisgICAgICAgIGF1dG8mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgICAgICBhdXRv
IGhhc1JlcGx5ID0ganNPYmplY3QtPmdldChnbG9iYWxPYmplY3QsIEpTQzo6SWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgImhhc1JlcGx5Il9zKSk7CisgICAgICAgIGlmIChzY29wZS5leGNlcHRp
b24oKSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsK
KyAgICAgICAgaWYgKGhhc1JlcGx5LnRvQm9vbGVhbihnbG9iYWxPYmplY3QpKSAKKyAgICAgICAg
ICAgIG9wdGlvbnMuYWRkKE1lc3NhZ2VPcHRpb246Okhhc1JlcGx5KTsKKyAgICB9CisKICAgICAv
LyBGSVhNRTogU3VwcG9ydCB0aGUgb3B0aW9ucy4KIAogICAgIHVpbnQ2NF90IHN5bmNSZXF1ZXN0
SUQgPSAwOwotICAgIGF1dG8gZW5jb2RlciA9IGNvbm5lY3Rpb24tPmNyZWF0ZVN5bmNNZXNzYWdl
RW5jb2RlcihzdGF0aWNfY2FzdDxJUEM6Ok1lc3NhZ2VOYW1lPihzdGF0aWNfY2FzdDx1aW50NjRf
dD4oKm1lc3NhZ2VJRCkpLCAqZGVzdGluYXRpb25JRCwgc3luY1JlcXVlc3RJRCk7CisgICAgYXV0
byBtZXNzYWdlTmFtZSA9IHN0YXRpY19jYXN0PElQQzo6TWVzc2FnZU5hbWU+KCptZXNzYWdlSUQp
OworICAgIGF1dG8gZW5jb2RlciA9IGNvbm5lY3Rpb24tPmNyZWF0ZVN5bmNNZXNzYWdlRW5jb2Rl
cihtZXNzYWdlTmFtZSwgKmRlc3RpbmF0aW9uSUQsIHN5bmNSZXF1ZXN0SUQpOwogCiAgICAgaWYg
KGFyZ3VtZW50Q291bnQgPiA0KSB7CiAgICAgICAgIGlmICghZW5jb2RlQXJndW1lbnQoKmVuY29k
ZXIsICpqc0lQQywgY29udGV4dCwgYXJndW1lbnRzWzRdLCBleGNlcHRpb24pKQpAQCAtNTEwLDgg
KzU5MiwxOCBAQAogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRl
eHQpOwogICAgIH0KIAotICAgIGF1dG8gcmVwbHlEZWNvZGVyID0gY29ubmVjdGlvbi0+c2VuZFN5
bmNNZXNzYWdlKHN5bmNSZXF1ZXN0SUQsIFdURk1vdmUoZW5jb2RlciksIHRpbWVvdXQsIHsgfSk7
Ci0gICAgLy8gRklYTUU6IERlY29kZSB0aGUgcmVwbHkuCisgICAgaWYgKGF1dG8gcmVwbHlEZWNv
ZGVyID0gY29ubmVjdGlvbi0+c2VuZFN5bmNNZXNzYWdlKHN5bmNSZXF1ZXN0SUQsIFdURk1vdmUo
ZW5jb2RlciksIHRpbWVvdXQsIHsgfSkpIHsKKyAgICAgICAgYXV0byByZXN1bHQgPSBqc1ZhbHVl
Rm9yUmVwbHlBcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBtZXNzYWdlTmFtZSwgKnJlcGx5RGVjb2Rl
cik7CisgICAgICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgICAgICAqZXhjZXB0aW9uID0gY3Jl
YXRlVHlwZUVycm9yKGNvbnRleHQsICJGYWlsZWQgdG8gZGVjb2RlIHRoZSByZXBseSJfcyk7Cisg
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKHJlc3VsdC0+aXNFbXB0eSgpKSB7CisgICAgICAgICAgICAqZXhjZXB0
aW9uID0gY3JlYXRlVHlwZUVycm9yKGNvbnRleHQsICJGYWlsZWQgdG8gY29udmVydCB0aGUgcmVw
bHkgdG8gYW4gSlMgYXJyYXkiX3MpOworICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5k
ZWZpbmVkKGNvbnRleHQpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0b1JlZihnbG9iYWxP
YmplY3QsICpyZXN1bHQpOworICAgIH0KIAogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5l
ZChjb250ZXh0KTsKIH0KQEAgLTUzMSw2ICs2MjMsMjAgQEAKICAgICB9KTsKIH0KIAorSlNWYWx1
ZVJlZiBKU0lQQzo6c2Vzc2lvbklEKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiB0
aGlzT2JqZWN0LCBKU1N0cmluZ1JlZiwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIHJl
dHVybiByZXRyaWV2ZUlEKGNvbnRleHQsIHRoaXNPYmplY3QsIGV4Y2VwdGlvbiwgW10oSlNJUEMm
IHdyYXBwZWQpIHsKKyAgICAgICAgcmV0dXJuIHdyYXBwZWQubV93ZWJQYWdlLT5zZXNzaW9uSUQo
KS50b1VJbnQ2NCgpOworICAgIH0pOworfQorCitKU1ZhbHVlUmVmIEpTSVBDOjpwYWdlSWRlbnRp
ZmllcihKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgSlNTdHJp
bmdSZWYsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICByZXR1cm4gcmV0cmlldmVJRChj
b250ZXh0LCB0aGlzT2JqZWN0LCBleGNlcHRpb24sIFtdKEpTSVBDJiB3cmFwcGVkKSB7CisgICAg
ICAgIHJldHVybiB3cmFwcGVkLm1fd2ViUGFnZS0+aWRlbnRpZmllcigpLnRvVUludDY0KCk7Cisg
ICAgfSk7Cit9CisKIEpTVmFsdWVSZWYgSlNJUEM6OmZyYW1lSWRlbnRpZmllcihKU0NvbnRleHRS
ZWYgY29udGV4dCwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgSlNTdHJpbmdSZWYsIEpTVmFsdWVS
ZWYqIGV4Y2VwdGlvbikKIHsKICAgICByZXR1cm4gcmV0cmlldmVJRChjb250ZXh0LCB0aGlzT2Jq
ZWN0LCBleGNlcHRpb24sIFtdKEpTSVBDJiB3cmFwcGVkKSB7CkBAIC01NjcsMTcgKzY3Myw1NSBA
QAogICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAgICAgfQog
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogICAgIEpTQzo6SlNP
YmplY3QqIG1lc3NhZ2VzT2JqZWN0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZ2xvYmFsT2JqZWN0
LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KSk7CisKICAgICBhdXRvIG5h
bWVJZGVudCA9IEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm5hbWUiKTsKKyAgICBh
dXRvIHR5cGVJZGVudCA9IEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInR5cGUiKTsK
KyAgICBhdXRvIGVudW1JZGVudCA9IEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImVu
dW0iKTsKKyAgICBhdXRvIG9wdGlvbmFsSWRlbnQgPSBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJvcHRpb25hbCIpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oSVBDOjpNZXNzYWdlTmFtZTo6TGFzdCk7ICsraSkgewotICAgICAgICBh
dXRvKiBtZXNzYWdlTmFtZSA9IGRlc2NyaXB0aW9uKHN0YXRpY19jYXN0PElQQzo6TWVzc2FnZU5h
bWU+KGkpKTsKKyAgICAgICAgYXV0byBuYW1lID0gc3RhdGljX2Nhc3Q8SVBDOjpNZXNzYWdlTmFt
ZT4oaSk7CiAKICAgICAgICAgSlNDOjpKU09iamVjdCogZGljdGlvbmFyeSA9IGNvbnN0cnVjdEVt
cHR5T2JqZWN0KGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSk7
CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWVNYWtlVW5kZWZpbmVk
KGNvbnRleHQpKTsKKwogICAgICAgICBkaWN0aW9uYXJ5LT5wdXREaXJlY3Qodm0sIG5hbWVJZGVu
dCwgSlNDOjpKU1ZhbHVlKGkpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
SlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCkpOwogCi0gICAgICAgIC8vIEZJWE1FOiBBZGQg
YXJndW1lbnQgbmFtZXMuCisgICAgICAgIEpTQzo6SlNPYmplY3QqIGFyZ3VtZW50c0FycmF5ID0g
SlNDOjpjb25zdHJ1Y3RFbXB0eUFycmF5KGdsb2JhbE9iamVjdCwgbnVsbHB0cik7CisgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQp
KTsKIAotICAgICAgICBtZXNzYWdlc09iamVjdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sIG1lc3NhZ2VOYW1lKSwgZGljdGlvbmFyeSk7CisgICAgICAgIGRp
Y3Rpb25hcnktPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+YXJndW1lbnRzLCBhcmd1
bWVudHNBcnJheSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWVN
YWtlVW5kZWZpbmVkKGNvbnRleHQpKTsKKworICAgICAgICBhdXRvIGFyZ3VtZW50RGVzY3JpcHRp
b25zID0gSVBDOjptZXNzYWdlQXJndW1lbnREZXNjcmlwdGlvbnMobmFtZSk7CisgICAgICAgIGZv
ciAodW5zaWduZWQgYXJndW1lbnRJbmRleCA9IDA7IGFyZ3VtZW50SW5kZXggPCBhcmd1bWVudERl
c2NyaXB0aW9ucy5zaXplKCk7ICsrYXJndW1lbnRJbmRleCkgeworICAgICAgICAgICAgYXV0byYg
ZGVzY3JpcHRpb24gPSBhcmd1bWVudERlc2NyaXB0aW9uc1thcmd1bWVudEluZGV4XTsKKyAgICAg
ICAgICAgIEpTQzo6SlNPYmplY3QqIGpzRGVzY3JpcHRpb25zID0gY29uc3RydWN0RW1wdHlPYmpl
Y3QoZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKTsKKyAgICAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNv
bnRleHQpKTsKKworICAgICAgICAgICAgYXJndW1lbnRzQXJyYXktPnB1dERpcmVjdEluZGV4KGds
b2JhbE9iamVjdCwgYXJndW1lbnRJbmRleCwganNEZXNjcmlwdGlvbnMpOworICAgICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCkp
OworCisgICAgICAgICAgICBqc0Rlc2NyaXB0aW9ucy0+cHV0RGlyZWN0KHZtLCBuYW1lSWRlbnQs
IEpTQzo6anNTdHJpbmcodm0sIFN0cmluZyhkZXNjcmlwdGlvbi5uYW1lKSkpOworICAgICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4
dCkpOworCisgICAgICAgICAgICBqc0Rlc2NyaXB0aW9ucy0+cHV0RGlyZWN0KHZtLCB0eXBlSWRl
bnQsIEpTQzo6anNTdHJpbmcodm0sIFN0cmluZyhkZXNjcmlwdGlvbi50eXBlKSkpOworICAgICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29u
dGV4dCkpOworCisgICAgICAgICAgICBqc0Rlc2NyaXB0aW9ucy0+cHV0RGlyZWN0KHZtLCBvcHRp
b25hbElkZW50LCBkZXNjcmlwdGlvbi5pc09wdGlvbmFsID8gSlNDOjpKU1ZhbHVlKEpTQzo6SlNW
YWx1ZTo6SlNUcnVlKSA6IEpTQzo6SlNWYWx1ZShKU0M6OkpTVmFsdWU6OkpTRmFsc2UpKTsKKyAg
ICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWVNYWtlVW5kZWZpbmVk
KGNvbnRleHQpKTsKKworICAgICAgICAgICAgaWYgKGRlc2NyaXB0aW9uLmVudW1OYW1lKSB7Cisg
ICAgICAgICAgICAgICAganNEZXNjcmlwdGlvbnMtPnB1dERpcmVjdCh2bSwgZW51bUlkZW50LCBK
U0M6OmpzU3RyaW5nKHZtLCBTdHJpbmcoZGVzY3JpcHRpb24uZW51bU5hbWUpKSk7CisgICAgICAg
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZU1ha2VVbmRlZmluZWQo
Y29udGV4dCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgbWVzc2FnZXNP
YmplY3QtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBkZXNj
cmlwdGlvbihuYW1lKSksIGRpY3Rpb25hcnkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KSk7CiAgICAgfQogCiAgICAgcmV0
dXJuIHRvUmVmKHZtLCBtZXNzYWdlc09iamVjdCk7Cg==
</data>
<flag name="commit-queue"
          id="427148"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>411099</attachid>
            <date>2020-10-12 00:22:52 -0700</date>
            <delta_ts>2020-10-13 13:09:30 -0700</delta_ts>
            <desc>WIP2</desc>
            <filename>wip217565b.patch</filename>
            <type>text/plain</type>
            <size>53751</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjY4MjQ2KQorKysgU291cmNlL1dlYktp
dC9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNDI4LDYgKzQyOCw3IEBACiAKICAg
ICBhZGRfY3VzdG9tX2NvbW1hbmQoCiAgICAgICAgIE9VVFBVVAorICAgICAgICAgICAgJHtXZWJL
aXRfREVSSVZFRF9TT1VSQ0VTX0RJUn0vTWVzc2FnZUFyZ3VtZW50RGVzY3JpcHRpb25zLmNwcAog
ICAgICAgICAgICAgJHtXZWJLaXRfREVSSVZFRF9TT1VSQ0VTX0RJUn0vTWVzc2FnZU5hbWVzLmNw
cAogICAgICAgICAgICAgJHtXZWJLaXRfREVSSVZFRF9TT1VSQ0VTX0RJUn0vTWVzc2FnZU5hbWVz
LmgKICAgICAgICAgICAgICR7X291dHB1dHN9CkluZGV4OiBTb3VyY2UvV2ViS2l0L0Rlcml2ZWRT
b3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvRGVy
aXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QJKHJldmlzaW9uIDI2ODI0NikKKysrIFNvdXJj
ZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QJKHdvcmtpbmcgY29weSkK
QEAgLTY4LDYgKzY4LDcgQEAKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9X
ZWJLaXQyL01lZGlhUGxheWVyUHJpdmF0ZVJlbW90ZU1lc3NhZ2VSZWNlaXZlci5jcHAKICQoQlVJ
TFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL01lZGlhUGxheWVyUHJpdmF0
ZVJlbW90ZU1lc3NhZ2VzLmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9X
ZWJLaXQyL01lZGlhUGxheWVyUHJpdmF0ZVJlbW90ZU1lc3NhZ2VzUmVwbGllcy5oCiskKEJVSUxU
X1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9NZXNzYWdlQXJndW1lbnREZXNj
cmlwdGlvbnMuY3BwCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0
Mi9NZXNzYWdlTmFtZXMuY3BwCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMv
V2ViS2l0Mi9NZXNzYWdlTmFtZXMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3Vy
Y2VzL1dlYktpdDIvTlBPYmplY3RNZXNzYWdlUmVjZWl2ZXJNZXNzYWdlUmVjZWl2ZXIuY3BwCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5tYWtlCShyZXZpc2lvbiAyNjgyNDYpCisrKyBTb3Vy
Y2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHdvcmtpbmcgY29weSkKQEAgLTI1Nyw3ICsy
NTcsNyBAQAogTUVTU0FHRVNfRklMRVMgOj0gJChhZGRzdWZmaXggTWVzc2FnZXMuaCwkKG5vdGRp
ciAkKE1FU1NBR0VfUkVDRUlWRVJTKSkpCiBNRVNTQUdFX1JFUExJRVNfRklMRVMgOj0gJChhZGRz
dWZmaXggTWVzc2FnZXNSZXBsaWVzLmgsJChub3RkaXIgJChNRVNTQUdFX1JFQ0VJVkVSUykpKQog
Ci1HRU5FUkFURURfTUVTU0FHRVNfRklMRVMgOj0gJChNRVNTQUdFX1JFQ0VJVkVSX0ZJTEVTKSAk
KE1FU1NBR0VTX0ZJTEVTKSAkKE1FU1NBR0VfUkVQTElFU19GSUxFUykgTWVzc2FnZU5hbWVzLmgg
TWVzc2FnZU5hbWVzLmNwcAorR0VORVJBVEVEX01FU1NBR0VTX0ZJTEVTIDo9ICQoTUVTU0FHRV9S
RUNFSVZFUl9GSUxFUykgJChNRVNTQUdFU19GSUxFUykgJChNRVNTQUdFX1JFUExJRVNfRklMRVMp
IE1lc3NhZ2VOYW1lcy5oIE1lc3NhZ2VOYW1lcy5jcHAgTWVzc2FnZUFyZ3VtZW50RGVzY3JpcHRp
b25zLmNwcAogR0VORVJBVEVEX01FU1NBR0VTX0ZJTEVTX0FTX1BBVFRFUk5TIDo9ICQoc3Vic3Qg
LiwlLCQoR0VORVJBVEVEX01FU1NBR0VTX0ZJTEVTKSkKIAogTUVTU0FHRVNfSU5fRklMRVMgOj0g
JChhZGRzdWZmaXggLm1lc3NhZ2VzLmluLCQoTUVTU0FHRV9SRUNFSVZFUlMpKQpJbmRleDogU291
cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRGVjb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvUGxhdGZvcm0vSVBDL0RlY29kZXIuaAkocmV2aXNpb24gMjY4MjQ2KQorKysgU291cmNl
L1dlYktpdC9QbGF0Zm9ybS9JUEMvRGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03Miw2ICs3
Miw3IEBACiAKICAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPERlY29kZXI+IHVud3JhcEZvclRl
c3RpbmcoRGVjb2RlciYpOwogCisgICAgY29uc3QgdWludDhfdCogYnVmZmVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9idWZmZXI7IH0KICAgICBzaXplX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9i
dWZmZXJFbmQgLSBtX2J1ZmZlcjsgfQogCiAgICAgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgaXNW
YWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1fYnVmZmVyUG9zICE9IG51bGxwdHI7IH0KSW5kZXg6IFNv
dXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0pTSVBDQmluZGluZy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0pTSVBDQmluZGluZy5oCShub25leGlzdGVudCkKKysr
IFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0pTSVBDQmluZGluZy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMjQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJEZWNvZGVyLmgiCisjaW5jbHVkZSAiSGFuZGxlTWVzc2FnZS5oIgorI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL09iamVjdENvbnN0cnVjdG9yLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SlNBcnJheS5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTR2xvYmFsT2JqZWN0Lmg+Cisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNPYmplY3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Zs
b2F0UmVjdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvUmVnaXN0cmFibGVEb21haW4uaD4KKyNpbmNsdWRlIDx3dGYvT2JqZWN0SWRlbnRpZmllci5o
PgorI2luY2x1ZGUgPHd0Zi9VUkwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
KwordGVtcGxhdGU8dHlwZW5hbWUgVCwgc3RkOjplbmFibGVfaWZfdDwhc3RkOjppc19hcml0aG1l
dGljPFQ+Ojp2YWx1ZSAmJiAhc3RkOjppc19lbnVtPFQ+Ojp2YWx1ZT4qID0gbnVsbHB0cj4KK0pT
Qzo6SlNWYWx1ZSBqc1ZhbHVlRm9yRGVjb2RlZEFyZ3VtZW50VmFsdWUoSlNDOjpKU0dsb2JhbE9i
amVjdCosIGNvbnN0IFQmKQoreworICAgIHJldHVybiBKU0M6OmpzVW5kZWZpbmVkKCk7Cit9CisK
K3RlbXBsYXRlPD4KK0pTQzo6SlNWYWx1ZSBqc1ZhbHVlRm9yRGVjb2RlZEFyZ3VtZW50VmFsdWUo
SlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBTdHJpbmcmIHZhbHVlKQor
eworICAgIGF1dG8mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvKiBvYmplY3QgPSBKU0M6OmNvbnN0cnVj
dEVtcHR5T2JqZWN0KGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUo
KSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNDOjpKU1ZhbHVlKCkpOworICAg
IG9iamVjdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ0
eXBlIl9zKSwgSlNDOjpqc05vbnRyaXZpYWxTdHJpbmcodm0sICJTdHJpbmciX3MpKTsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU0M6OkpTVmFsdWUoKSk7CisgICAgb2JqZWN0LT5w
dXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInZhbHVlIl9zKSwg
SlNDOjpqc05vbnRyaXZpYWxTdHJpbmcodm0sIHZhbHVlKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgSlNDOjpKU1ZhbHVlKCkpOworICAgIHJldHVybiBvYmplY3Q7Cit9CisKK3Rl
bXBsYXRlPD4KK0pTQzo6SlNWYWx1ZSBqc1ZhbHVlRm9yRGVjb2RlZEFyZ3VtZW50VmFsdWUoSlND
OjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBVUkwmIHZhbHVlKQoreworICAg
IHJldHVybiBqc1ZhbHVlRm9yRGVjb2RlZEFyZ3VtZW50VmFsdWUoZ2xvYmFsT2JqZWN0LCB2YWx1
ZS5zdHJpbmcoKSk7Cit9CisKK3RlbXBsYXRlPD4KK0pTQzo6SlNWYWx1ZSBqc1ZhbHVlRm9yRGVj
b2RlZEFyZ3VtZW50VmFsdWUoSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25z
dCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiYgdmFsdWUpCit7CisgICAgcmV0dXJuIGpzVmFs
dWVGb3JEZWNvZGVkQXJndW1lbnRWYWx1ZShnbG9iYWxPYmplY3QsIHZhbHVlLnN0cmluZygpKTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX2FyaXRo
bWV0aWM8VD46OnZhbHVlPiogPSBudWxscHRyPgorSlNDOjpKU1ZhbHVlIGpzVmFsdWVGb3JEZWNv
ZGVkQXJndW1lbnRWYWx1ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgVCkKK3sKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgRSwgc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX2VudW08RT46OnZhbHVlPiog
PSBudWxscHRyPgorSlNDOjpKU1ZhbHVlIGpzVmFsdWVGb3JEZWNvZGVkQXJndW1lbnRWYWx1ZShK
U0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEUgdmFsdWUpCit7CisgICAgcmV0dXJu
IGpzVmFsdWVGb3JEZWNvZGVkQXJndW1lbnRWYWx1ZShnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0
PHN0ZDo6dW5kZXJseWluZ190eXBlX3Q8RT4+KHZhbHVlKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIE51bWVyaWNUeXBlPgorSlNDOjpKU1ZhbHVlIGpzVmFsdWVGb3JEZWNvZGVkTnVtZXJpY0Fy
Z3VtZW50VmFsdWUoSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBOdW1lcmljVHlw
ZSB2YWx1ZSwgY29uc3QgU3RyaW5nJiB0eXBlKQoreworICAgIGF1dG8mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAg
ICBhdXRvKiBvYmplY3QgPSBKU0M6OmNvbnN0cnVjdEVtcHR5T2JqZWN0KGdsb2JhbE9iamVjdCwg
Z2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgSlNDOjpKU1ZhbHVlKCkpOworICAgIG9iamVjdC0+cHV0RGlyZWN0KHZtLCBKU0M6
OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ0eXBlIl9zKSwgSlNDOjpqc05vbnRyaXZpYWxT
dHJpbmcodm0sIHR5cGUpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU0M6OkpT
VmFsdWUoKSk7CisgICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgInZhbHVlIl9zKSwgSlNDOjpKU1ZhbHVlKHZhbHVlKSk7CisgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgSlNDOjpKU1ZhbHVlKCkpOworICAgIHJldHVybiBvYmplY3Q7
Cit9CisKK3RlbXBsYXRlPD4KK0pTQzo6SlNWYWx1ZSBqc1ZhbHVlRm9yRGVjb2RlZEFyZ3VtZW50
VmFsdWUoSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBib29sIHZhbHVlKQorewor
ICAgIHJldHVybiBqc1ZhbHVlRm9yRGVjb2RlZE51bWVyaWNBcmd1bWVudFZhbHVlKGdsb2JhbE9i
amVjdCwgdmFsdWUsICJib29sIik7Cit9CisKK3RlbXBsYXRlPD4KK0pTQzo6SlNWYWx1ZSBqc1Zh
bHVlRm9yRGVjb2RlZEFyZ3VtZW50VmFsdWUoSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBkb3VibGUgdmFsdWUpCit7CisgICAgcmV0dXJuIGpzVmFsdWVGb3JEZWNvZGVkTnVtZXJp
Y0FyZ3VtZW50VmFsdWUoZ2xvYmFsT2JqZWN0LCB2YWx1ZSwgImRvdWJsZSIpOworfQorCit0ZW1w
bGF0ZTw+CitKU0M6OkpTVmFsdWUganNWYWx1ZUZvckRlY29kZWRBcmd1bWVudFZhbHVlKEpTQzo6
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgZmxvYXQgdmFsdWUpCit7CisgICAgcmV0dXJu
IGpzVmFsdWVGb3JEZWNvZGVkTnVtZXJpY0FyZ3VtZW50VmFsdWUoZ2xvYmFsT2JqZWN0LCB2YWx1
ZSwgImZsb2F0Iik7Cit9CisKK3RlbXBsYXRlPD4KK0pTQzo6SlNWYWx1ZSBqc1ZhbHVlRm9yRGVj
b2RlZEFyZ3VtZW50VmFsdWUoSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBpbnQ4
X3QgdmFsdWUpCit7CisgICAgcmV0dXJuIGpzVmFsdWVGb3JEZWNvZGVkTnVtZXJpY0FyZ3VtZW50
VmFsdWUoZ2xvYmFsT2JqZWN0LCB2YWx1ZSwgImludDhfdCIpOworfQorCit0ZW1wbGF0ZTw+CitK
U0M6OkpTVmFsdWUganNWYWx1ZUZvckRlY29kZWRBcmd1bWVudFZhbHVlKEpTQzo6SlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgaW50MTZfdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4ganNWYWx1
ZUZvckRlY29kZWROdW1lcmljQXJndW1lbnRWYWx1ZShnbG9iYWxPYmplY3QsIHZhbHVlLCAiaW50
MTZfdCIpOworfQorCit0ZW1wbGF0ZTw+CitKU0M6OkpTVmFsdWUganNWYWx1ZUZvckRlY29kZWRB
cmd1bWVudFZhbHVlKEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgaW50MzJfdCB2
YWx1ZSkKK3sKKyAgICByZXR1cm4ganNWYWx1ZUZvckRlY29kZWROdW1lcmljQXJndW1lbnRWYWx1
ZShnbG9iYWxPYmplY3QsIHZhbHVlLCAiaW50MzJfdCIpOworfQorCit0ZW1wbGF0ZTw+CitKU0M6
OkpTVmFsdWUganNWYWx1ZUZvckRlY29kZWRBcmd1bWVudFZhbHVlKEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgaW50NjRfdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4ganNWYWx1ZUZv
ckRlY29kZWROdW1lcmljQXJndW1lbnRWYWx1ZShnbG9iYWxPYmplY3QsIHZhbHVlLCAiaW50NjRf
dCIpOworfQorCit0ZW1wbGF0ZTw+CitKU0M6OkpTVmFsdWUganNWYWx1ZUZvckRlY29kZWRBcmd1
bWVudFZhbHVlKEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdWludDhfdCB2YWx1
ZSkKK3sKKyAgICByZXR1cm4ganNWYWx1ZUZvckRlY29kZWROdW1lcmljQXJndW1lbnRWYWx1ZShn
bG9iYWxPYmplY3QsIHZhbHVlLCAidWludDhfdCIpOworfQorCit0ZW1wbGF0ZTw+CitKU0M6OkpT
VmFsdWUganNWYWx1ZUZvckRlY29kZWRBcmd1bWVudFZhbHVlKEpTQzo6SlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgdWludDE2X3QgdmFsdWUpCit7CisgICAgcmV0dXJuIGpzVmFsdWVGb3JE
ZWNvZGVkTnVtZXJpY0FyZ3VtZW50VmFsdWUoZ2xvYmFsT2JqZWN0LCB2YWx1ZSwgInVpbnQxNl90
Iik7Cit9CisKK3RlbXBsYXRlPD4KK0pTQzo6SlNWYWx1ZSBqc1ZhbHVlRm9yRGVjb2RlZEFyZ3Vt
ZW50VmFsdWUoSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1aW50MzJfdCB2YWx1
ZSkKK3sKKyAgICByZXR1cm4ganNWYWx1ZUZvckRlY29kZWROdW1lcmljQXJndW1lbnRWYWx1ZShn
bG9iYWxPYmplY3QsIHZhbHVlLCAidWludDMyX3QiKTsKK30KKwordGVtcGxhdGU8PgorSlNDOjpK
U1ZhbHVlIGpzVmFsdWVGb3JEZWNvZGVkQXJndW1lbnRWYWx1ZShKU0M6OkpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIHVpbnQ2NF90IHZhbHVlKQoreworICAgIHJldHVybiBqc1ZhbHVlRm9y
RGVjb2RlZE51bWVyaWNBcmd1bWVudFZhbHVlKGdsb2JhbE9iamVjdCwgdmFsdWUsICJ1aW50NjRf
dCIpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorSlNDOjpKU1ZhbHVlIGpzVmFsdWVGb3JE
ZWNvZGVkQXJndW1lbnRWYWx1ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNv
bnN0IE9iamVjdElkZW50aWZpZXI8VT4mIHZhbHVlKQoreworICAgIHJldHVybiBqc1ZhbHVlRm9y
RGVjb2RlZEFyZ3VtZW50VmFsdWUoZ2xvYmFsT2JqZWN0LCB2YWx1ZS50b1VJbnQ2NCgpKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgUmVjdFR5cGU+CitKU0M6OkpTVmFsdWUganNWYWx1ZUZvckRl
Y29kZWRBcmd1bWVudFJlY3QoSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25z
dCBSZWN0VHlwZSYgdmFsdWUsIGNvbnN0IFN0cmluZyYgdHlwZSkKK3sKKyAgICBhdXRvJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisgICAgYXV0byogb2JqZWN0ID0gSlNDOjpjb25zdHJ1Y3RFbXB0eU9iamVjdChnbG9i
YWxPYmplY3QsIGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCkpOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIEpTQzo6SlNWYWx1ZSgpKTsKKyAgICBvYmplY3QtPnB1dERpcmVj
dCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidHlwZSJfcyksIEpTQzo6anNO
b250cml2aWFsU3RyaW5nKHZtLCB0eXBlKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgSlNDOjpKU1ZhbHVlKCkpOworICAgIG9iamVjdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sICJ4Il9zKSwgSlNDOjpKU1ZhbHVlKHZhbHVlLngoKSkpOwor
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTQzo6SlNWYWx1ZSgpKTsKKyAgICBvYmpl
Y3QtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAieSJfcyks
IEpTQzo6SlNWYWx1ZSh2YWx1ZS55KCkpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBKU0M6OkpTVmFsdWUoKSk7CisgICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyh2bSwgIndpZHRoIl9zKSwgSlNDOjpKU1ZhbHVlKHZhbHVlLndpZHRo
KCkpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU0M6OkpTVmFsdWUoKSk7Cisg
ICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
ImhlaWdodCJfcyksIEpTQzo6SlNWYWx1ZSh2YWx1ZS5oZWlnaHQoKSkpOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIEpTQzo6SlNWYWx1ZSgpKTsKKyAgICByZXR1cm4gb2JqZWN0Owor
fQorCit0ZW1wbGF0ZTw+CitKU0M6OkpTVmFsdWUganNWYWx1ZUZvckRlY29kZWRBcmd1bWVudFZh
bHVlKEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYgdmFsdWUpCit7CisgICAgcmV0dXJuIGpzVmFsdWVGb3JEZWNvZGVkQXJndW1lbnRSZWN0
KGdsb2JhbE9iamVjdCwgdmFsdWUsICJJbnRSZWN0Iik7Cit9CisKK3RlbXBsYXRlPD4KK0pTQzo6
SlNWYWx1ZSBqc1ZhbHVlRm9yRGVjb2RlZEFyZ3VtZW50VmFsdWUoSlNDOjpKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHZhbHVlKQoreworICAg
IHJldHVybiBqc1ZhbHVlRm9yRGVjb2RlZEFyZ3VtZW50UmVjdChnbG9iYWxPYmplY3QsIHZhbHVl
LCAiRmxvYXRSZWN0Iik7Cit9CisKK3RlbXBsYXRlPHNpemVfdCByZW1haW5pbmdTaXplLCB0eXBl
bmFtZS4uLiBFbGVtZW50cz4KK3N0cnVjdCBEZWNvZGVkQXJndW1lbnRKU1ZhbHVlQ29udmVydGVy
IHsKKyAgICBzdGF0aWMgYm9vbCBjb252ZXJ0KEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNDOjpKU0FycmF5KiBhcnJheSwgY29uc3Qgc3RkOjp0dXBsZTxFbGVtZW50cy4uLj4m
IHR1cGxlKQorICAgIHsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
Z2xvYmFsT2JqZWN0LT52bSgpKTsKKworICAgICAgICBhdXRvIGpzVmFsdWUgPSBqc1ZhbHVlRm9y
RGVjb2RlZEFyZ3VtZW50VmFsdWUoZ2xvYmFsT2JqZWN0LCBzdGQ6OmdldDxzaXplb2YuLi4oRWxl
bWVudHMpIC0gcmVtYWluaW5nU2l6ZT4odHVwbGUpKTsKKyAgICAgICAgaWYgKGpzVmFsdWUuaXNF
bXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHVuc2lnbmVkIGlu
ZGV4ID0gc2l6ZW9mLi4uKEVsZW1lbnRzKSAtIHJlbWFpbmluZ1NpemU7CisgICAgICAgIGFycmF5
LT5wdXREaXJlY3RJbmRleChnbG9iYWxPYmplY3QsIGluZGV4LCBqc1ZhbHVlKTsKKyAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOworCisgICAgICAgIHJldHVybiBEZWNv
ZGVkQXJndW1lbnRKU1ZhbHVlQ29udmVydGVyPHJlbWFpbmluZ1NpemUgLSAxLCBFbGVtZW50cy4u
Lj46OmNvbnZlcnQoZ2xvYmFsT2JqZWN0LCBhcnJheSwgdHVwbGUpOworICAgIH0KK307CisKK3Rl
bXBsYXRlPHR5cGVuYW1lLi4uIEVsZW1lbnRzPgorc3RydWN0IERlY29kZWRBcmd1bWVudEpTVmFs
dWVDb252ZXJ0ZXI8MCwgRWxlbWVudHMuLi4+IHsKKyAgICBzdGF0aWMgYm9vbCBjb252ZXJ0KEpT
Qzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkpTQXJyYXkqLCBjb25zdCBzdGQ6OnR1cGxlPEVsZW1l
bnRzLi4uPiYpCisgICAgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9OworCit0ZW1w
bGF0ZTx0eXBlbmFtZS4uLiBFbGVtZW50cz4KK3N0YXRpYyBPcHRpb25hbDxKU0M6OkpTVmFsdWU+
IGpzVmFsdWVGb3JBcmd1bWVudFR1cGxlKEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgY29uc3Qgc3RkOjp0dXBsZTxFbGVtZW50cy4uLj4mIHR1cGxlKQoreworICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGdsb2JhbE9iamVjdC0+dm0oKSk7CisgICAgYXV0byog
YXJyYXkgPSBKU0M6OmNvbnN0cnVjdEVtcHR5QXJyYXkoZ2xvYmFsT2JqZWN0LCBudWxscHRyKTsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBXVEY6Om51bGxvcHQpOworICAgIGlmICgh
RGVjb2RlZEFyZ3VtZW50SlNWYWx1ZUNvbnZlcnRlcjxzaXplb2YuLi4oRWxlbWVudHMpLCBFbGVt
ZW50cy4uLj46OmNvbnZlcnQoZ2xvYmFsT2JqZWN0LCBhcnJheSwgdHVwbGUpKQorICAgICAgICBy
ZXR1cm4gSlNDOjpKU1ZhbHVlKCk7CisgICAgcmV0dXJuIEpTQzo6SlNWYWx1ZShhcnJheSk7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdGF0aWMgT3B0aW9uYWw8SlNDOjpKU1ZhbHVlPiBq
c1ZhbHVlRm9yRGVjb2RlZEFyZ3VtZW50cyhKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIElQQzo6RGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBPcHRpb25hbDx0eXBlbmFtZSBJUEM6
OkNvZGluZ1R5cGU8VD46OlR5cGU+IGFyZ3VtZW50czsKKyAgICBkZWNvZGVyID4+IGFyZ3VtZW50
czsKKyAgICBpZiAoIWFyZ3VtZW50cykKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAg
ICByZXR1cm4ganNWYWx1ZUZvckFyZ3VtZW50VHVwbGUoZ2xvYmFsT2JqZWN0LCAqYXJndW1lbnRz
KTsKK30KSW5kZXg6IFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL01lc3NhZ2VBcmd1bWVudERl
c2NyaXB0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL01l
c3NhZ2VBcmd1bWVudERlc2NyaXB0aW9ucy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJL
aXQvUGxhdGZvcm0vSVBDL01lc3NhZ2VBcmd1bWVudERlc2NyaXB0aW9ucy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgIk1lc3NhZ2VOYW1lcy5oIgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTR2xvYmFsT2JqZWN0
OworY2xhc3MgSlNWYWx1ZTsKKworfQorCituYW1lc3BhY2UgSVBDIHsKKworY2xhc3MgRGVjb2Rl
cjsKKworT3B0aW9uYWw8SlNDOjpKU1ZhbHVlPiBqc1ZhbHVlRm9yQXJndW1lbnRzKEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBNZXNzYWdlTmFtZSwgRGVjb2RlciYpOworT3B0aW9uYWw8SlNDOjpKU1Zh
bHVlPiBqc1ZhbHVlRm9yUmVwbHlBcmd1bWVudHMoSlNDOjpKU0dsb2JhbE9iamVjdCosIE1lc3Nh
Z2VOYW1lLCBEZWNvZGVyJik7CisKK3N0cnVjdCBBcmd1bWVudERlc2NyaXB0aW9uIHsKKyAgICBj
b25zdCBjaGFyKiBuYW1lOworICAgIGNvbnN0IGNoYXIqIHR5cGU7CisgICAgY29uc3QgY2hhciog
ZW51bU5hbWU7CisgICAgYm9vbCBpc09wdGlvbmFsOworfTsKKworT3B0aW9uYWw8VmVjdG9yPEFy
Z3VtZW50RGVzY3JpcHRpb24+PiBtZXNzYWdlQXJndW1lbnREZXNjcmlwdGlvbnMoTWVzc2FnZU5h
bWUpOworT3B0aW9uYWw8VmVjdG9yPEFyZ3VtZW50RGVzY3JpcHRpb24+PiBtZXNzYWdlUmVwbHlB
cmd1bWVudERlc2NyaXB0aW9ucyhNZXNzYWdlTmFtZSk7CisKK30KSW5kZXg6IFNvdXJjZS9XZWJL
aXQvU2NyaXB0cy9nZW5lcmF0ZS1tZXNzYWdlLXJlY2VpdmVyLnB5Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvU2NyaXB0cy9nZW5lcmF0ZS1tZXNzYWdlLXJlY2VpdmVyLnB5CShyZXZpc2lv
biAyNjgyNDYpCisrKyBTb3VyY2UvV2ViS2l0L1NjcmlwdHMvZ2VuZXJhdGUtbWVzc2FnZS1yZWNl
aXZlci5weQkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogCiAgICAgZmlyc3RfYXJn
ID0gVHJ1ZQogICAgIHNlY29uZF9hcmcgPSBGYWxzZQorICAgIHJlY2VpdmVyX2hlYWRlcl9maWxl
cyA9IFtdCiAgICAgZm9yIHBhcmFtZXRlciBpbiBhcmd2OgogICAgICAgICBpZiBmaXJzdF9hcmc6
CiAgICAgICAgICAgICBmaXJzdF9hcmcgPSBGYWxzZQpAQCAtNTMsNyArNTQsOSBAQAogICAgICAg
ICB3aXRoIG9wZW4oJyVzTWVzc2FnZVJlY2VpdmVyLmNwcCcgJSByZWNlaXZlcl9uYW1lLCAidysi
KSBhcyBpbXBsZW1lbnRhdGlvbl9vdXRwdXQ6CiAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbl9v
dXRwdXQud3JpdGUod2Via2l0Lm1lc3NhZ2VzLmdlbmVyYXRlX21lc3NhZ2VfaGFuZGxlcihyZWNl
aXZlcikpCiAKLSAgICAgICAgd2l0aCBvcGVuKCclc01lc3NhZ2VzLmgnICUgcmVjZWl2ZXJfbmFt
ZSwgIncrIikgYXMgaGVhZGVyX291dHB1dDoKKyAgICAgICAgcmVjZWl2ZXJfbWVzc2FnZV9oZWFk
ZXIgPSAnJXNNZXNzYWdlcy5oJyAlIHJlY2VpdmVyX25hbWUKKyAgICAgICAgcmVjZWl2ZXJfaGVh
ZGVyX2ZpbGVzLmFwcGVuZChyZWNlaXZlcl9tZXNzYWdlX2hlYWRlcikKKyAgICAgICAgd2l0aCBv
cGVuKHJlY2VpdmVyX21lc3NhZ2VfaGVhZGVyLCAidysiKSBhcyBoZWFkZXJfb3V0cHV0OgogICAg
ICAgICAgICAgaGVhZGVyX291dHB1dC53cml0ZSh3ZWJraXQubWVzc2FnZXMuZ2VuZXJhdGVfbWVz
c2FnZXNfaGVhZGVyKHJlY2VpdmVyKSkKIAogICAgICAgICB3aXRoIG9wZW4oJyVzTWVzc2FnZXNS
ZXBsaWVzLmgnICUgcmVjZWl2ZXJfbmFtZSwgIncrIikgYXMgcmVwbHlfaGVhZGVyX291dHB1dDoK
QEAgLTY1LDYgKzY4LDkgQEAKICAgICB3aXRoIG9wZW4oJ01lc3NhZ2VOYW1lcy5jcHAnLCAidysi
KSBhcyBtZXNzYWdlX25hbWVzX2ltcGxlbWVudGF0aW9uX291dHB1dDoKICAgICAgICAgbWVzc2Fn
ZV9uYW1lc19pbXBsZW1lbnRhdGlvbl9vdXRwdXQud3JpdGUod2Via2l0Lm1lc3NhZ2VzLmdlbmVy
YXRlX21lc3NhZ2VfbmFtZXNfaW1wbGVtZW50YXRpb24ocmVjZWl2ZXJzKSkKIAorICAgIHdpdGgg
b3BlbignTWVzc2FnZUFyZ3VtZW50RGVzY3JpcHRpb25zLmNwcCcsICJ3KyIpIGFzIG1lc3NhZ2Vf
ZGVzY3JpcHRpb25zX2ltcGxlbWVudGF0aW9uX291dHB1dDoKKyAgICAgICAgbWVzc2FnZV9kZXNj
cmlwdGlvbnNfaW1wbGVtZW50YXRpb25fb3V0cHV0LndyaXRlKHdlYmtpdC5tZXNzYWdlcy5nZW5l
cmF0ZV9tZXNzYWdlX2FyZ3VtZW50X2Rlc2NyaXB0aW9uX2ltcGxlbWVudGF0aW9uKHJlY2VpdmVy
cywgcmVjZWl2ZXJfaGVhZGVyX2ZpbGVzKSkKKwogICAgIHJldHVybiAwCiAKIGlmIF9fbmFtZV9f
ID09ICdfX21haW5fXyc6CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3Nh
Z2VzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2Fn
ZXMucHkJKHJldmlzaW9uIDI2ODI0NikKKysrIFNvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQv
bWVzc2FnZXMucHkJKHdvcmtpbmcgY29weSkKQEAgLTYyMyw3ICs2MjMsNiBAQAogICAgICAgICAn
V2ViQ29yZTo6UGFzdGVib2FyZFVSTCc6IFsnPFdlYkNvcmUvUGFzdGVib2FyZC5oPiddLAogICAg
ICAgICAnV2ViQ29yZTo6UGFzdGVib2FyZFdlYkNvbnRlbnQnOiBbJzxXZWJDb3JlL1Bhc3RlYm9h
cmQuaD4nXSwKICAgICAgICAgJ1dlYkNvcmU6OlBheW1lbnRBdXRob3JpemF0aW9uUmVzdWx0Jzog
Wyc8V2ViQ29yZS9BcHBsZVBheVNlc3Npb25QYXltZW50UmVxdWVzdC5oPiddLAotICAgICAgICAn
V2ViQ29yZTo6UGF5bWVudE1ldGhvZFVwZGF0ZSc6IFsnPFdlYkNvcmUvQXBwbGVQYXlTZXNzaW9u
UGF5bWVudFJlcXVlc3QuaD4nXSwKICAgICAgICAgJ1dlYkNvcmU6OlBsYXRmb3JtVGV4dFRyYWNr
RGF0YSc6IFsnPFdlYkNvcmUvUGxhdGZvcm1UZXh0VHJhY2suaD4nXSwKICAgICAgICAgJ1dlYkNv
cmU6OlBsdWdpbkluZm8nOiBbJzxXZWJDb3JlL1BsdWdpbkRhdGEuaD4nXSwKICAgICAgICAgJ1dl
YkNvcmU6OlBsdWdpbkxvYWRDbGllbnRQb2xpY3knOiBbJzxXZWJDb3JlL1BsdWdpbkRhdGEuaD4n
XSwKQEAgLTY4Nyw3ICs2ODYsNyBAQAogICAgICAgICAnc3RydWN0IFdlYktpdDo6V2ViVXNlclNj
cmlwdERhdGEnOiBbJyJXZWJVc2VyQ29udGVudENvbnRyb2xsZXJEYXRhVHlwZXMuaCInXSwKICAg
ICAgICAgJ3N0cnVjdCBXZWJLaXQ6OldlYlVzZXJTdHlsZVNoZWV0RGF0YSc6IFsnIldlYlVzZXJD
b250ZW50Q29udHJvbGxlckRhdGFUeXBlcy5oIiddLAogICAgICAgICAnc3RydWN0IFdlYktpdDo6
V2ViU2NyaXB0TWVzc2FnZUhhbmRsZXJEYXRhJzogWyciV2ViVXNlckNvbnRlbnRDb250cm9sbGVy
RGF0YVR5cGVzLmgiJ10sCi0gICAgICAgICd3ZWJydGM6OldlYktpdEVuY29kZWRGcmFtZUluZm8n
OiBbJzx3ZWJydGMvc2RrL1dlYktpdC9XZWJLaXRFbmNvZGVyLmg+J10sCisgICAgICAgICd3ZWJy
dGM6OldlYktpdEVuY29kZWRGcmFtZUluZm8nOiBbJzx3ZWJydGMvc2RrL1dlYktpdC9XZWJLaXRF
bmNvZGVyLmg+JywgJzxXZWJDb3JlL0xpYldlYlJUQ0VudW1UcmFpdHMuaD4nXSwKICAgICAgICAg
J3dlYnJ0Yzo6V2ViS2l0UlRQRnJhZ21lbnRhdGlvbkhlYWRlcic6IFsnPHdlYnJ0Yy9zZGsvV2Vi
S2l0L1dlYktpdEVuY29kZXIuaD4nXSwKICAgICB9CiAKQEAgLTcxNCwxMyArNzEzLDcgQEAKICAg
ICByZXR1cm4gaGVhZGVycwogCiAKLWRlZiBnZW5lcmF0ZV9tZXNzYWdlX2hhbmRsZXIocmVjZWl2
ZXIpOgotICAgIGhlYWRlcl9jb25kaXRpb25zID0gewotICAgICAgICAnIiVzIicgJSBtZXNzYWdl
c19oZWFkZXJfZmlsZW5hbWUocmVjZWl2ZXIpOiBbTm9uZV0sCi0gICAgICAgICciSGFuZGxlTWVz
c2FnZS5oIic6IFtOb25lXSwKLSAgICAgICAgJyJEZWNvZGVyLmgiJzogW05vbmVdLAotICAgIH0K
LQorZGVmIGNvbGxlY3RfaGVhZGVyX2NvbmRpdGlvbnNfZm9yX3JlY2VpdmVyKHJlY2VpdmVyLCBo
ZWFkZXJfY29uZGl0aW9ucyk6CiAgICAgdHlwZV9jb25kaXRpb25zID0ge30KICAgICBmb3IgcGFy
YW1ldGVyIGluIHJlY2VpdmVyLml0ZXJwYXJhbWV0ZXJzKCk6CiAgICAgICAgIGlmIG5vdCBwYXJh
bWV0ZXIudHlwZSBpbiB0eXBlX2NvbmRpdGlvbnM6CkBAIC03NjMsOCArNzU2LDMxIEBACiAgICAg
ICAgICAgICAgICAgICAgICAgICBoZWFkZXJfY29uZGl0aW9uc1toZWFkZXJdID0gW10KICAgICAg
ICAgICAgICAgICAgICAgaGVhZGVyX2NvbmRpdGlvbnNbaGVhZGVyXS5hcHBlbmQobWVzc2FnZS5j
b25kaXRpb24pCiAKKyAgICByZXR1cm4gaGVhZGVyX2NvbmRpdGlvbnMKKworCitkZWYgZ2VuZXJh
dGVfaGVhZGVyX2luY2x1ZGVzX2Zyb21fY29uZGl0aW9ucyhoZWFkZXJfY29uZGl0aW9ucyk6CiAg
ICAgcmVzdWx0ID0gW10KKyAgICBmb3IgaGVhZGVyIGluIHNvcnRlZChoZWFkZXJfY29uZGl0aW9u
cyk6CisgICAgICAgIGlmIGhlYWRlcl9jb25kaXRpb25zW2hlYWRlcl0gYW5kIG5vdCBOb25lIGlu
IGhlYWRlcl9jb25kaXRpb25zW2hlYWRlcl06CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcj
aWYgJXNcbicgJSAnIHx8ICcuam9pbihzb3J0ZWQoc2V0KGhlYWRlcl9jb25kaXRpb25zW2hlYWRl
cl0pKSkpCisgICAgICAgICAgICByZXN1bHQgKz0gWycjaW5jbHVkZSAlc1xuJyAlIGhlYWRlcl0K
KyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyNlbmRpZlxuJykKKyAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgIHJlc3VsdCArPSBbJyNpbmNsdWRlICVzXG4nICUgaGVhZGVyXQorICAgIHJldHVy
biByZXN1bHQKIAorZGVmIGdlbmVyYXRlX21lc3NhZ2VfaGFuZGxlcihyZWNlaXZlcik6CisgICAg
aGVhZGVyX2NvbmRpdGlvbnMgPSB7CisgICAgICAgICciJXMiJyAlIG1lc3NhZ2VzX2hlYWRlcl9m
aWxlbmFtZShyZWNlaXZlcik6IFtOb25lXSwKKyAgICAgICAgJyJIYW5kbGVNZXNzYWdlLmgiJzog
W05vbmVdLAorICAgICAgICAnIkRlY29kZXIuaCInOiBbTm9uZV0sCisgICAgfQorCisgICAgY29s
bGVjdF9oZWFkZXJfY29uZGl0aW9uc19mb3JfcmVjZWl2ZXIocmVjZWl2ZXIsIGhlYWRlcl9jb25k
aXRpb25zKQorCisgICAgcmVzdWx0ID0gW10KKwogICAgIHJlc3VsdC5hcHBlbmQoX2xpY2Vuc2Vf
aGVhZGVyKQogICAgIHJlc3VsdC5hcHBlbmQoJyNpbmNsdWRlICJjb25maWcuaCJcbicpCiAgICAg
cmVzdWx0LmFwcGVuZCgnXG4nKQpAQCAtNzczLDEzICs3ODksNyBAQAogICAgICAgICByZXN1bHQu
YXBwZW5kKCcjaWYgJXNcblxuJyAlIHJlY2VpdmVyLmNvbmRpdGlvbikKIAogICAgIHJlc3VsdC5h
cHBlbmQoJyNpbmNsdWRlICIlcy5oIlxuXG4nICUgcmVjZWl2ZXIubmFtZSkKLSAgICBmb3IgaGVh
ZGVyIGluIHNvcnRlZChoZWFkZXJfY29uZGl0aW9ucyk6Ci0gICAgICAgIGlmIGhlYWRlcl9jb25k
aXRpb25zW2hlYWRlcl0gYW5kIG5vdCBOb25lIGluIGhlYWRlcl9jb25kaXRpb25zW2hlYWRlcl06
Ci0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcjaWYgJXNcbicgJSAnIHx8ICcuam9pbihzb3J0
ZWQoc2V0KGhlYWRlcl9jb25kaXRpb25zW2hlYWRlcl0pKSkpCi0gICAgICAgICAgICByZXN1bHQg
Kz0gWycjaW5jbHVkZSAlc1xuJyAlIGhlYWRlcl0KLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQo
JyNlbmRpZlxuJykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJlc3VsdCArPSBbJyNpbmNs
dWRlICVzXG4nICUgaGVhZGVyXQorICAgIHJlc3VsdCArPSBnZW5lcmF0ZV9oZWFkZXJfaW5jbHVk
ZXNfZnJvbV9jb25kaXRpb25zKGhlYWRlcl9jb25kaXRpb25zKQogICAgIHJlc3VsdC5hcHBlbmQo
J1xuJykKIAogICAgIGRlbGF5ZWRfb3JfYXN5bmNfbWVzc2FnZXMgPSBbXQpAQCAtMTA0NCwzICsx
MDU0LDEzMiBAQAogICAgIHJlc3VsdC5hcHBlbmQoJ1xuJykKICAgICByZXN1bHQuYXBwZW5kKCd9
IC8vIG5hbWVzcGFjZSBJUENcbicpCiAgICAgcmV0dXJuICcnLmpvaW4ocmVzdWx0KQorCisKK2Rl
ZiBnZW5lcmF0ZV9qc192YWx1ZV9jb252ZXJzaW9uX2Z1bmN0aW9uKHJlc3VsdCwgcmVjZWl2ZXJz
LCBmdW5jdGlvbl9uYW1lLCBhcmd1bWVudF90eXBlLCBwcmVkaWNhdGU9bGFtYmRhIG1lc3NhZ2U6
IFRydWUpOgorICAgIHJlc3VsdC5hcHBlbmQoJ09wdGlvbmFsPEpTQzo6SlNWYWx1ZT4gJXMoSlND
OjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBNZXNzYWdlTmFtZSBuYW1lLCBEZWNvZGVy
JiBkZWNvZGVyKVxuJyAlIGZ1bmN0aW9uX25hbWUpCisgICAgcmVzdWx0LmFwcGVuZCgne1xuJykK
KyAgICByZXN1bHQuYXBwZW5kKCcgICAgc3dpdGNoIChuYW1lKSB7XG4nKQorICAgIGZvciByZWNl
aXZlciBpbiByZWNlaXZlcnM6CisgICAgICAgIGlmIHJlY2VpdmVyLmNvbmRpdGlvbjoKKyAgICAg
ICAgICAgIHJlc3VsdC5hcHBlbmQoJyNpZiAlc1xuJyAlIHJlY2VpdmVyLmNvbmRpdGlvbikKKyAg
ICAgICAgcHJldmlzaW9uX21lc3NhZ2VfY29uZGl0aW9uID0gTm9uZQorICAgICAgICBmb3IgbWVz
c2FnZSBpbiByZWNlaXZlci5tZXNzYWdlczoKKyAgICAgICAgICAgIGlmIG5vdCBwcmVkaWNhdGUo
bWVzc2FnZSk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIHByZXZp
c2lvbl9tZXNzYWdlX2NvbmRpdGlvbiAhPSBtZXNzYWdlLmNvbmRpdGlvbjoKKyAgICAgICAgICAg
ICAgICBpZiBwcmV2aXNpb25fbWVzc2FnZV9jb25kaXRpb246CisgICAgICAgICAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQoJyNlbmRpZlxuJykKKyAgICAgICAgICAgICAgICBpZiBtZXNzYWdlLmNv
bmRpdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnI2lmICVzXG4nICUg
bWVzc2FnZS5jb25kaXRpb24pCisgICAgICAgICAgICBwcmV2aXNpb25fbWVzc2FnZV9jb25kaXRp
b24gPSBtZXNzYWdlLmNvbmRpdGlvbgorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIGNh
c2UgTWVzc2FnZU5hbWU6OiVzXyVzOlxuJyAlIChyZWNlaXZlci5uYW1lLCBtZXNzYWdlLm5hbWUp
KQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgICAgICByZXR1cm4ganNWYWx1ZUZvckRl
Y29kZWRBcmd1bWVudHM8TWVzc2FnZXM6OiVzOjolczo6JXM+KGdsb2JhbE9iamVjdCwgZGVjb2Rl
cik7XG4nICUgKHJlY2VpdmVyLm5hbWUsIG1lc3NhZ2UubmFtZSwgYXJndW1lbnRfdHlwZSkpCisg
ICAgICAgIGlmIHByZXZpc2lvbl9tZXNzYWdlX2NvbmRpdGlvbjoKKyAgICAgICAgICAgIHJlc3Vs
dC5hcHBlbmQoJyNlbmRpZlxuJykKKyAgICAgICAgaWYgcmVjZWl2ZXIuY29uZGl0aW9uOgorICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZCgnI2VuZGlmXG4nKQorICAgIHJlc3VsdC5hcHBlbmQoJyAg
ICBkZWZhdWx0OlxuJykKKyAgICByZXN1bHQuYXBwZW5kKCcgICAgICAgIGJyZWFrO1xuJykKKyAg
ICByZXN1bHQuYXBwZW5kKCcgICAgfVxuJykKKyAgICByZXN1bHQuYXBwZW5kKCcgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDtcbicpCisgICAgcmVzdWx0LmFwcGVuZCgnfVxuJykKKworCitkZWYgZ2Vu
ZXJhdGVfanNfYXJndW1lbnRfZGVzY3JpcHRpb25zKHJlY2VpdmVycywgZnVuY3Rpb25fbmFtZSwg
YXJndW1lbnRzX2Zyb21fbWVzc2FnZSk6CisgICAgcmVzdWx0ID0gW10KKyAgICByZXN1bHQuYXBw
ZW5kKCdPcHRpb25hbDxWZWN0b3I8QXJndW1lbnREZXNjcmlwdGlvbj4+ICVzKE1lc3NhZ2VOYW1l
IG5hbWUpXG4nICUgZnVuY3Rpb25fbmFtZSkKKyAgICByZXN1bHQuYXBwZW5kKCd7XG4nKQorICAg
IHJlc3VsdC5hcHBlbmQoJyAgICBzd2l0Y2ggKG5hbWUpIHtcbicpCisgICAgZm9yIHJlY2VpdmVy
IGluIHJlY2VpdmVyczoKKyAgICAgICAgaWYgcmVjZWl2ZXIuY29uZGl0aW9uOgorICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZCgnI2lmICVzXG4nICUgcmVjZWl2ZXIuY29uZGl0aW9uKQorICAgICAg
ICBwcmV2aXNpb25fbWVzc2FnZV9jb25kaXRpb24gPSBOb25lCisgICAgICAgIGZvciBtZXNzYWdl
IGluIHJlY2VpdmVyLm1lc3NhZ2VzOgorICAgICAgICAgICAgYXJndW1lbnRfbGlzdCA9IGFyZ3Vt
ZW50c19mcm9tX21lc3NhZ2UobWVzc2FnZSkKKyAgICAgICAgICAgIGlmIGFyZ3VtZW50X2xpc3Qg
PT0gTm9uZToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgcHJldmlz
aW9uX21lc3NhZ2VfY29uZGl0aW9uICE9IG1lc3NhZ2UuY29uZGl0aW9uOgorICAgICAgICAgICAg
ICAgIGlmIHByZXZpc2lvbl9tZXNzYWdlX2NvbmRpdGlvbjoKKyAgICAgICAgICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZCgnI2VuZGlmXG4nKQorICAgICAgICAgICAgICAgIGlmIG1lc3NhZ2UuY29u
ZGl0aW9uOgorICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcjaWYgJXNcbicgJSBt
ZXNzYWdlLmNvbmRpdGlvbikKKyAgICAgICAgICAgIHByZXZpc2lvbl9tZXNzYWdlX2NvbmRpdGlv
biA9IG1lc3NhZ2UuY29uZGl0aW9uCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgY2Fz
ZSBNZXNzYWdlTmFtZTo6JXNfJXM6XG4nICUgKHJlY2VpdmVyLm5hbWUsIG1lc3NhZ2UubmFtZSkp
CisKKyAgICAgICAgICAgIGlmIG5vdCBsZW4oYXJndW1lbnRfbGlzdCk6CisgICAgICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZCgnICAgICAgICByZXR1cm4gVmVjdG9yPEFyZ3VtZW50RGVzY3JpcHRp
b24+IHsgfTtcbicpCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZCgnICAgICAgICByZXR1cm4gVmVjdG9yPEFyZ3VtZW50RGVzY3JpcHRpb24+IHtc
bicpCisgICAgICAgICAgICBmb3IgYXJndW1lbnQgaW4gYXJndW1lbnRfbGlzdDoKKyAgICAgICAg
ICAgICAgICBhcmd1bWVudF90eXBlID0gYXJndW1lbnQudHlwZQorICAgICAgICAgICAgICAgIGVu
dW1fdHlwZSA9IE5vbmUKKyAgICAgICAgICAgICAgICBpc19vcHRpb25hbCA9IEZhbHNlCisgICAg
ICAgICAgICAgICAgaWYgYXJndW1lbnQua2luZC5zdGFydHN3aXRoKCdlbnVtOicpOgorICAgICAg
ICAgICAgICAgICAgICBlbnVtX3R5cGUgPSAnIiVzIicgJSBhcmd1bWVudF90eXBlCisgICAgICAg
ICAgICAgICAgICAgIGFyZ3VtZW50X3R5cGUgPSBhcmd1bWVudC5raW5kWzU6XQorICAgICAgICAg
ICAgICAgIGlmIGFyZ3VtZW50X3R5cGUuc3RhcnRzd2l0aCgnT3B0aW9uYWw8JykgYW5kIGFyZ3Vt
ZW50X3R5cGUuZW5kc3dpdGgoJz4nKToKKyAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRfdHlw
ZSA9IGFyZ3VtZW50X3R5cGVbOTotMV0KKyAgICAgICAgICAgICAgICAgICAgaXNfb3B0aW9uYWwg
PSBUcnVlCisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgICAgICAgICAgeyIlcyIs
ICIlcyIsICVzLCAlc30sXG4nICUgKGFyZ3VtZW50Lm5hbWUsIGFyZ3VtZW50X3R5cGUsIGVudW1f
dHlwZSBvciAnbnVsbHB0cicsICd0cnVlJyBpZiBpc19vcHRpb25hbCBlbHNlICdmYWxzZScpKQor
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgICAgICB9O1xuJykKKyAgICAgICAgaWYgcHJl
dmlzaW9uX21lc3NhZ2VfY29uZGl0aW9uOgorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnI2Vu
ZGlmXG4nKQorICAgICAgICBpZiByZWNlaXZlci5jb25kaXRpb246CisgICAgICAgICAgICByZXN1
bHQuYXBwZW5kKCcjZW5kaWZcbicpCisgICAgcmVzdWx0LmFwcGVuZCgnICAgIGRlZmF1bHQ6XG4n
KQorICAgIHJlc3VsdC5hcHBlbmQoJyAgICAgICAgYnJlYWs7XG4nKQorICAgIHJlc3VsdC5hcHBl
bmQoJyAgICB9XG4nKQorICAgIHJlc3VsdC5hcHBlbmQoJyAgICByZXR1cm4gV1RGOjpudWxsb3B0
O1xuJykKKyAgICByZXN1bHQuYXBwZW5kKCd9XG4nKQorICAgIHJldHVybiByZXN1bHQKKworCitk
ZWYgZ2VuZXJhdGVfbWVzc2FnZV9hcmd1bWVudF9kZXNjcmlwdGlvbl9pbXBsZW1lbnRhdGlvbihy
ZWNlaXZlcnMsIHJlY2VpdmVyX2hlYWRlcnMpOgorICAgIGhlYWRlcl9jb25kaXRpb25zID0gewor
ICAgICAgICAnIkpTSVBDQmluZGluZy5oIic6IFtOb25lXQorICAgIH0KKyAgICBmb3IgcmVjZWl2
ZXIgaW4gcmVjZWl2ZXJzOgorICAgICAgICBoZWFkZXJfY29uZGl0aW9uc1snIiVzIicgJSBtZXNz
YWdlc19oZWFkZXJfZmlsZW5hbWUocmVjZWl2ZXIpXSA9IFtOb25lXQorICAgICAgICBjb2xsZWN0
X2hlYWRlcl9jb25kaXRpb25zX2Zvcl9yZWNlaXZlcihyZWNlaXZlciwgaGVhZGVyX2NvbmRpdGlv
bnMpCisKKyAgICByZXN1bHQgPSBbXQorICAgIHJlc3VsdC5hcHBlbmQoX2xpY2Vuc2VfaGVhZGVy
KQorICAgIHJlc3VsdC5hcHBlbmQoJyNpbmNsdWRlICJjb25maWcuaCJcbicpCisgICAgcmVzdWx0
LmFwcGVuZCgnI2luY2x1ZGUgIk1lc3NhZ2VBcmd1bWVudERlc2NyaXB0aW9ucy5oIlxuJykKKyAg
ICByZXN1bHQuYXBwZW5kKCdcbicpCisgICAgcmVzdWx0LmFwcGVuZCgnI2lmIEVOQUJMRShJUENf
VEVTVElOR19BUEkpXG4nKQorICAgIHJlc3VsdC5hcHBlbmQoJ1xuJykKKyAgICByZXN1bHQgKz0g
Z2VuZXJhdGVfaGVhZGVyX2luY2x1ZGVzX2Zyb21fY29uZGl0aW9ucyhoZWFkZXJfY29uZGl0aW9u
cykKKyAgICByZXN1bHQuYXBwZW5kKCdcbicpCisKKyAgICBmb3IgaGVhZGVyIGluIHJlY2VpdmVy
X2hlYWRlcnM6CisgICAgICAgIHJlc3VsdC5hcHBlbmQoJyNpbmNsdWRlICIlcyJcbicgJSAoaGVh
ZGVyKSkKKworICAgIHJlc3VsdC5hcHBlbmQoJ1xuJykKKyAgICByZXN1bHQuYXBwZW5kKCduYW1l
c3BhY2UgSVBDIHtcbicpCisgICAgcmVzdWx0LmFwcGVuZCgnXG4nKQorCisgICAgZ2VuZXJhdGVf
anNfdmFsdWVfY29udmVyc2lvbl9mdW5jdGlvbihyZXN1bHQsIHJlY2VpdmVycywgJ2pzVmFsdWVG
b3JBcmd1bWVudHMnLCAnQXJndW1lbnRzJykKKworICAgIHJlc3VsdC5hcHBlbmQoJ1xuJykKKwor
ICAgIGdlbmVyYXRlX2pzX3ZhbHVlX2NvbnZlcnNpb25fZnVuY3Rpb24ocmVzdWx0LCByZWNlaXZl
cnMsICdqc1ZhbHVlRm9yUmVwbHlBcmd1bWVudHMnLCAnUmVwbHlBcmd1bWVudHMnLAorICAgICAg
ICBsYW1iZGEgbWVzc2FnZTogbWVzc2FnZS5yZXBseV9wYXJhbWV0ZXJzICE9IE5vbmUgYW5kICht
ZXNzYWdlLmhhc19hdHRyaWJ1dGUoU1lOQ0hST05PVVNfQVRUUklCVVRFKSBvciBtZXNzYWdlLmhh
c19hdHRyaWJ1dGUoQVNZTkNfQVRUUklCVVRFKSkpCisKKyAgICByZXN1bHQuYXBwZW5kKCdcbicp
CisKKyAgICByZXN1bHQgKz0gZ2VuZXJhdGVfanNfYXJndW1lbnRfZGVzY3JpcHRpb25zKHJlY2Vp
dmVycywgJ21lc3NhZ2VBcmd1bWVudERlc2NyaXB0aW9ucycsIGxhbWJkYSBtZXNzYWdlOiBtZXNz
YWdlLnBhcmFtZXRlcnMpCisKKyAgICByZXN1bHQuYXBwZW5kKCdcbicpCisKKyAgICByZXN1bHQg
Kz0gZ2VuZXJhdGVfanNfYXJndW1lbnRfZGVzY3JpcHRpb25zKHJlY2VpdmVycywgJ21lc3NhZ2VS
ZXBseUFyZ3VtZW50RGVzY3JpcHRpb25zJywKKyAgICAgICAgbGFtYmRhIG1lc3NhZ2U6IG1lc3Nh
Z2UucmVwbHlfcGFyYW1ldGVycyBpZiBtZXNzYWdlLmhhc19hdHRyaWJ1dGUoU1lOQ0hST05PVVNf
QVRUUklCVVRFKSBvciBtZXNzYWdlLmhhc19hdHRyaWJ1dGUoQVNZTkNfQVRUUklCVVRFKSBlbHNl
IE5vbmUpCisKKyAgICByZXN1bHQuYXBwZW5kKCdcbicpCisKKyAgICByZXN1bHQuYXBwZW5kKCd9
IC8vIG5hbWVzcGFjZSBXZWJLaXRcbicpCisgICAgcmVzdWx0LmFwcGVuZCgnXG4nKQorICAgIHJl
c3VsdC5hcHBlbmQoJyNlbmRpZlxuJykKKyAgICByZXR1cm4gJycuam9pbihyZXN1bHQpCkluZGV4
OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9BcHBsZVBheS9BcHBsZVBheVBheW1lbnRTZXR1cEZlYXR1
cmVzV2ViS2l0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvQXBwbGVQYXkv
QXBwbGVQYXlQYXltZW50U2V0dXBGZWF0dXJlc1dlYktpdC5oCShyZXZpc2lvbiAyNjgyNDYpCisr
KyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9BcHBsZVBheS9BcHBsZVBheVBheW1lbnRTZXR1cEZlYXR1
cmVzV2ViS2l0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lmIEVOQUJM
RShBUFBMRV9QQVkpCiAKK09CSkNfQ0xBU1MgTlNBcnJheTsKIE9CSkNfQ0xBU1MgUEtQYXltZW50
U2V0dXBGZWF0dXJlOwogCiAjaW5jbHVkZSA8V2ViQ29yZS9BcHBsZVBheVNldHVwRmVhdHVyZVdl
YkNvcmUuaD4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQJKHJldmlzaW9uIDI2ODI0NikKKysr
IFNvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNjU4LDYg
KzY1OCw3IEBACiBHUFVQcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcAogTGliV2ViUlRDQ29kZWNz
UHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwCiBMaWJXZWJSVENDb2RlY3NNZXNzYWdlUmVjZWl2ZXIu
Y3BwCitNZXNzYWdlQXJndW1lbnREZXNjcmlwdGlvbnMuY3BwIEBuby11bmlmeQogTWVzc2FnZU5h
bWVzLmNwcAogUmVtb3RlQXVkaW9EZXN0aW5hdGlvbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3Bw
CiBSZW1vdGVBdWRpb0Rlc3RpbmF0aW9uUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwCkluZGV4OiBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAJKHJldmlzaW9uIDI2
ODI0NikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTg4Niw2ICs4ODYsMTEgQEAKIAogICAgIFdlYlByb2Nlc3NQb29sOjpk
aWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UobWVzc2FnZU5hbWUpOwogCisjaWYgRU5BQkxFKElQQ19U
RVNUSU5HX0FQSSkKKyAgICBpZiAocHJvY2Vzc1Bvb2woKS5kZWZhdWx0UGFnZUdyb3VwKCkucHJl
ZmVyZW5jZXMoKS5zdG9yZSgpLmdldEJvb2xWYWx1ZUZvcktleShXZWJQcmVmZXJlbmNlc0tleTo6
aXBjVGVzdGluZ0FQSUVuYWJsZWRLZXkoKSkpCisgICAgICAgIHJldHVybjsKKyNlbmRpZgorCiAg
ICAgLy8gVGVybWluYXRlIHRoZSBXZWJDb250ZW50IHByb2Nlc3MuCiAgICAgdGVybWluYXRlKCk7
CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkocmV2aXNpb24gMjY4MjQ2KQorKysgU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTQxNyw2ICsxNDE3LDkgQEAKIAkJ
OUIxMjI5Q0QyM0ZGMjVGMjAwOENBNzUxIC8qIFJlbW90ZUF1ZGlvRGVzdGluYXRpb25NYW5hZ2Vy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjEyMjlD
QjIzRkYyNUYyMDA4Q0E3NTEgLyogUmVtb3RlQXVkaW9EZXN0aW5hdGlvbk1hbmFnZXIuaCAqLzsg
fTsKIAkJOUIxMjI5Q0UyM0ZGMjVGMjAwOENBNzUxIC8qIFJlbW90ZUF1ZGlvRGVzdGluYXRpb25N
YW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDlCMTIyOUNDMjNGRjI1RjIwMDhDQTc1MSAvKiBSZW1vdGVBdWRpb0Rlc3RpbmF0aW9uTWFuYWdl
ci5jcHAgKi87IH07CiAJCTlCMTIyOUQyMjNGRjJCQ0MwMDhDQTc1MSAvKiBSZW1vdGVBdWRpb0Rl
c3RpbmF0aW9uSWRlbnRpZmllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOUIxMjI5RDAyM0ZGMkE1RTAwOENBNzUxIC8qIFJlbW90ZUF1ZGlvRGVzdGlu
YXRpb25JZGVudGlmaWVyLmggKi87IH07CisJCTlCNDc5MDhEMjUzMTREODMwMEVDMTFBQiAvKiBN
ZXNzYWdlQXJndW1lbnREZXNjcmlwdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDlCNDc5MDhDMjUzMTREODMwMEVDMTFBQiAvKiBNZXNzYWdlQXJn
dW1lbnREZXNjcmlwdGlvbnMuaCAqLzsgfTsKKwkJOUI0NzkwOEYyNTMxNTFDQzAwRUMxMUFCIC8q
IEpTSVBDQmluZGluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOUI0NzkwOEUyNTMxNTFDQzAwRUMxMUFCIC8qIEpTSVBDQmluZGluZy5oICovOyB9Owor
CQk5QjQ3OTA5MTI1MzE1NjMyMDBFQzExQUIgLyogTWVzc2FnZUFyZ3VtZW50RGVzY3JpcHRpb25z
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCNDc5
MDkwMjUzMTU2MzIwMEVDMTFBQiAvKiBNZXNzYWdlQXJndW1lbnREZXNjcmlwdGlvbnMuY3BwICov
OyB9OwogCQk5QjU0OTlBRDIzNjJBNkY5MDBERjhCQTUgLyogX1dLVGV4dE1hbmlwdWxhdGlvbkNv
bmZpZ3VyYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDlCNTQ5OUFDMjM2MkE2RjYwMERGOEJBNSAvKiBfV0tUZXh0TWFuaXB1bGF0aW9uQ29uZmln
dXJhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTlCNTQ5OUIyMjM2MkE3RUMwMERGOEJBNSAvKiBfV0tUZXh0TWFuaXB1bGF0aW9uRXhjbHVz
aW9uUnVsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OUI1NDk5QjAyMzYyQTdFQzAwREY4QkE1IC8qIF9XS1RleHRNYW5pcHVsYXRpb25FeGNsdXNpb25S
dWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
OUI1QkVDMjYyNDAwRjRBOTAwNzBDNkVGIC8qIFdlYk1lZGlhU3RyYXRlZ3kuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCNUJFQzI0MjQwMEY0QTkwMDcw
QzZFRiAvKiBXZWJNZWRpYVN0cmF0ZWd5LmggKi87IH07CkBAIC00NDkzLDYgKzQ0OTYsOSBAQAog
CQk5QjEyMjlDQzIzRkYyNUYyMDA4Q0E3NTEgLyogUmVtb3RlQXVkaW9EZXN0aW5hdGlvbk1hbmFn
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVtb3RlQXVkaW9EZXN0aW5hdGlvbk1hbmFnZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QjEyMjlDRjIzRkYyODE0MDA4Q0E3
NTEgLyogUmVtb3RlQXVkaW9EZXN0aW5hdGlvbk1hbmFnZXIubWVzc2FnZXMuaW4gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gUmVt
b3RlQXVkaW9EZXN0aW5hdGlvbk1hbmFnZXIubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTlCMTIyOUQwMjNGRjJBNUUwMDhDQTc1MSAvKiBSZW1vdGVBdWRpb0Rlc3Rp
bmF0aW9uSWRlbnRpZmllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVBdWRpb0Rlc3RpbmF0aW9u
SWRlbnRpZmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5QjQ3OTA4QzI1MzE0
RDgzMDBFQzExQUIgLyogTWVzc2FnZUFyZ3VtZW50RGVzY3JpcHRpb25zLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IE1lc3NhZ2VBcmd1bWVudERlc2NyaXB0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk5QjQ3OTA4RTI1MzE1MUNDMDBFQzExQUIgLyogSlNJUENCaW5kaW5nLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTSVBDQmluZGluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5
QjQ3OTA5MDI1MzE1NjMyMDBFQzExQUIgLyogTWVzc2FnZUFyZ3VtZW50RGVzY3JpcHRpb25zLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IE1lc3NhZ2VBcmd1bWVudERl
c2NyaXB0aW9ucy5jcHA7IHBhdGggPSBNZXNzYWdlQXJndW1lbnREZXNjcmlwdGlvbnMuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QjU0OTlBQzIzNjJBNkY2MDBERjhCQTUgLyog
X1dLVGV4dE1hbmlwdWxhdGlvbkNvbmZpZ3VyYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gX1dLVGV4
dE1hbmlwdWxhdGlvbkNvbmZpZ3VyYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJOUI1NDk5QUUyMzYyQTdBNzAwREY4QkE1IC8qIF9XS1RleHRNYW5pcHVsYXRpb25Db25maWd1
cmF0aW9uLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gX1dLVGV4dE1hbmlwdWxhdGlvbkNvbmZp
Z3VyYXRpb24ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCNTQ5OUIwMjM2MkE3
RUMwMERGOEJBNSAvKiBfV0tUZXh0TWFuaXB1bGF0aW9uRXhjbHVzaW9uUnVsZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBfV0tUZXh0TWFuaXB1bGF0aW9uRXhjbHVzaW9uUnVsZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtNjQyNCw2ICs2NDMwLDggQEAKIAkJCQkyREMxODgxQUNCQ0FCNUQ1
N0M1QzZFRjAgLyogU2hhcmVkQnVmZmVyRGF0YVJlZmVyZW5jZS5oICovLAogCQkJCTFBRTAwRDY5
MTgzMjdDMTIwMDA4N0RENyAvKiBTdHJpbmdSZWZlcmVuY2UuY3BwICovLAogCQkJCTFBRTAwRDZB
MTgzMjdDMTIwMDA4N0RENyAvKiBTdHJpbmdSZWZlcmVuY2UuaCAqLywKKwkJCQk5QjQ3OTA4QzI1
MzE0RDgzMDBFQzExQUIgLyogTWVzc2FnZUFyZ3VtZW50RGVzY3JpcHRpb25zLmggKi8sCisJCQkJ
OUI0NzkwOEUyNTMxNTFDQzAwRUMxMUFCIC8qIEpTSVBDQmluZGluZy5oICovLAogCQkJKTsKIAkJ
CXBhdGggPSBJUEM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMTAwMTUsNiArMTAw
MjMsNyBAQAogCQkJCTA3RTE5RUY4MjNENDAxRjAwMDk0RkZCNCAvKiBNZWRpYVBsYXllclByaXZh
dGVSZW1vdGVNZXNzYWdlUmVjZWl2ZXIuY3BwICovLAogCQkJCTA3RTE5RUY5MjNENDAxRjAwMDk0
RkZCNCAvKiBNZWRpYVBsYXllclByaXZhdGVSZW1vdGVNZXNzYWdlcy5oICovLAogCQkJCTA3RTE5
RUZBMjNENDAxRjAwMDk0RkZCNCAvKiBNZWRpYVBsYXllclByaXZhdGVSZW1vdGVNZXNzYWdlc1Jl
cGxpZXMuaCAqLywKKwkJCQk5QjQ3OTA5MDI1MzE1NjMyMDBFQzExQUIgLyogTWVzc2FnZUFyZ3Vt
ZW50RGVzY3JpcHRpb25zLmNwcCAqLywKIAkJCQk1MUREOUYyNjE2MzY3REEyMDAxNTc4RTkgLyog
TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlUmVjZWl2ZXIuY3BwICovLAogCQkJ
CTUxREQ5RjI3MTYzNjdEQTIwMDE1NzhFOSAvKiBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vz
c01lc3NhZ2VzLmggKi8sCiAJCQkJNTJGMDYwREQxNjU0MzE3NTAwRjMyODFCIC8qIE5ldHdvcmtD
b250ZW50UnVsZUxpc3RNYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCAqLywKQEAgLTExMjQxLDYg
KzExMjUwLDcgQEAKIAkJCQlCQ0Y0REUyNTE2OEZBNDQ4MDBDOTRBRkMgLyogV2ViQ29udGV4dFN1
cHBsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ2ODA5QTdDMjNEOTIyNUUwMEMyOTdEMCAv
KiBXZWJDb29raWVDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM3RkI0NzAyMUU5N0RDNTAw
OUUzMjQxIC8qIFdlYkNvb2tpZUphci5oIGluIEhlYWRlcnMgKi8sCisJCQkJOUI0NzkwOEQyNTMx
NEQ4MzAwRUMxMUFCIC8qIE1lc3NhZ2VBcmd1bWVudERlc2NyaXB0aW9ucy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMzMwOTM0NTAxMzE1Qjk0RDAwOTdBN0JDIC8qIFdlYkNvb2tpZU1hbmFnZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTMzMDkzNDQ4MTMxNUI5MjIwMDk3QTdCQyAvKiBXZWJDb29raWVN
YW5hZ2VyTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTMzMDkzNDU2MTMxNUI5NzUwMDk3
QTdCQyAvKiBXZWJDb29raWVNYW5hZ2VyUHJveHkuaCBpbiBIZWFkZXJzICovLApAQCAtMTE2NDAs
NiArMTE2NTAsNyBAQAogCQkJCTFBQTEzMjEyMTkxRDU5MjQwMDlDMTQ4OSAvKiBXS05hdmlnYXRp
b25SZXNwb25zZVByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTJEM0E2NURGMUE3QzNBN0Qw
MENBQzYzNyAvKiBXS05hdmlnYXRpb25SZXNwb25zZVJlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NTcwREFBQzYyMzAzN0Y3RjAwRThGQzA0IC8qIFdLTkZSZWFkZXJTZXNzaW9uRGVsZWdhdGUuaCBp
biBIZWFkZXJzICovLAorCQkJCTlCNDc5MDhGMjUzMTUxQ0MwMEVDMTFBQiAvKiBKU0lQQ0JpbmRp
bmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxOEJFMTc5MTQ3NDNFNkYwMEE4RkJCMiAvKiBXS05v
dGlmaWNhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzE4QkUxNzExNDc0M0RCMTAwQThGQkIy
IC8qIFdLTm90aWZpY2F0aW9uTWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzFBMkVDNzQx
NDhENTlDQTAwODEwRDcxIC8qIFdLTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3QuaCBpbiBI
ZWFkZXJzICovLApAQCAtMTI4MTYsNiArMTI4MjcsNyBAQAogCQkJCTA3MDE3ODlFMjNCRTlDRkMw
MDVGMEZBQSAvKiBSZW1vdGVNZWRpYVBsYXllck1JTUVUeXBlQ2FjaGUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMDcxQkM1OEYyM0NFMUVBQTAwNjgwRDdDIC8qIFJlbW90ZU1lZGlhUGxheWVyUHJv
eHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUQ0RDczNzAyM0E5RTU0
NzAwNzE3QTI1IC8qIFJlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTlCNDc5MDkxMjUzMTU2MzIwMEVDMTFBQiAvKiBNZXNzYWdl
QXJndW1lbnREZXNjcmlwdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFDMTMzODUxODU5
MEM0NjAwRjNFQzA1IC8qIFJlbW90ZU9iamVjdFJlZ2lzdHJ5TWVzc2FnZVJlY2VpdmVyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGNTk0N0E3MTg3QjUxNzYwMDQzNzg1NyAvKiBSZW1vdGVTY3Jv
bGxpbmdDb29yZGluYXRvck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
NTVCQTgyNjFCQTI1Q0ZEMDA3Q0QzM0QgLyogUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlNZXNzYWdl
UmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9JUENUZXN0aW5nQVBJLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9JUENUZXN0aW5nQVBJLmNwcAkocmV2aXNpb24gMjY4MjQ2KQor
KysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvSVBDVGVzdGluZ0FQSS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlICJFbmNvZGVyLmgiCiAjaW5j
bHVkZSAiRnJhbWVJbmZvRGF0YS5oIgogI2luY2x1ZGUgIkdQVVByb2Nlc3NDb25uZWN0aW9uLmgi
Ci0jaW5jbHVkZSAiTWVzc2FnZU5hbWVzLmgiCisjaW5jbHVkZSAiTWVzc2FnZUFyZ3VtZW50RGVz
Y3JpcHRpb25zLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLmgiCiAjaW5j
bHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSAiV2ViRnJhbWUuaCIKQEAg
LTgzLDYgKzgzLDggQEAKIAogICAgIHN0YXRpYyBKU1ZhbHVlUmVmIHZpc2l0ZWRMaW5rU3RvcmVJ
RChKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmLCBKU1N0cmluZ1JlZiwgSlNWYWx1ZVJlZiogZXhj
ZXB0aW9uKTsKICAgICBzdGF0aWMgSlNWYWx1ZVJlZiB3ZWJQYWdlUHJveHlJRChKU0NvbnRleHRS
ZWYsIEpTT2JqZWN0UmVmLCBKU1N0cmluZ1JlZiwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsKKyAg
ICBzdGF0aWMgSlNWYWx1ZVJlZiBzZXNzaW9uSUQoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiwg
SlNTdHJpbmdSZWYsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CisgICAgc3RhdGljIEpTVmFsdWVS
ZWYgcGFnZUlkZW50aWZpZXIoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiwgSlNTdHJpbmdSZWYs
IEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CiAgICAgc3RhdGljIEpTVmFsdWVSZWYgZnJhbWVJZGVu
dGlmaWVyKEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYsIEpTU3RyaW5nUmVmLCBKU1ZhbHVlUmVm
KiBleGNlcHRpb24pOwogICAgIHN0YXRpYyBKU1ZhbHVlUmVmIHJldHJpZXZlSUQoSlNDb250ZXh0
UmVmLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24sIGNvbnN0
IFdURjo6RnVuY3Rpb248dWludDY0X3QoSlNJUEMmKT4mKTsKIApAQCAtMTQ1LDYgKzE0Nyw4IEBA
CiAgICAgc3RhdGljIGNvbnN0IEpTU3RhdGljVmFsdWUgdmFsdWVzW10gPSB7CiAgICAgICAgIHsg
InZpc2l0ZWRMaW5rU3RvcmVJRCIsIHZpc2l0ZWRMaW5rU3RvcmVJRCwgMCwga0pTUHJvcGVydHlB
dHRyaWJ1dGVEb250RGVsZXRlIHwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB9LAogICAg
ICAgICB7ICJ3ZWJQYWdlUHJveHlJRCIsIHdlYlBhZ2VQcm94eUlELCAwLCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZURvbnREZWxldGUgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IH0sCisgICAg
ICAgIHsgInNlc3Npb25JRCIsIHNlc3Npb25JRCwgMCwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250
RGVsZXRlIHwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB9LAorICAgICAgICB7ICJwYWdl
SWRlbnRpZmllciIsIHBhZ2VJZGVudGlmaWVyLCAwLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnRE
ZWxldGUgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IH0sCiAgICAgICAgIHsgImZyYW1l
SWRlbnRpZmllciIsIGZyYW1lSWRlbnRpZmllciwgMCwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250
RGVsZXRlIHwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB9LAogICAgICAgICB7ICJtZXNz
YWdlcyIsIG1lc3NhZ2VzLCAwLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IH0sCiAgICAgICAgIHsgMCwgMCwgMCwgMCB9CkBAIC0y
MzcsMjYgKzI0MSwzOSBAQAogICAgIHJldHVybiB0b1JlZihKU0M6OmNyZWF0ZVR5cGVFcnJvcih0
b0pTKGNvbnRleHQpLCBtZXNzYWdlKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFJlY3RUeXBl
PiBib29sIGVuY29kZVJlY3RUeXBlKElQQzo6RW5jb2RlciYgZW5jb2RlciwgSlNDOjpKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTT2JqZWN0KiBqc09iamVjdCkKK3RlbXBsYXRl
PHR5cGVuYW1lIFBvaW50VHlwZT4gYm9vbCBlbmNvZGVQb2ludFR5cGUoSVBDOjpFbmNvZGVyJiBl
bmNvZGVyLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNPYmplY3Qq
IGpzT2JqZWN0LCBKU0M6OkNhdGNoU2NvcGUmIHNjb3BlKQogewogICAgIGF1dG8mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8ganNYID0ganNPYmplY3QtPmdldChnbG9iYWxPYmpl
Y3QsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIngiX3MpKTsKLSAgICBpZiAoIWpz
WC5pc051bWJlcigpKQorICAgIGlmIChzY29wZS5leGNlcHRpb24oKSB8fCAhanNYLmlzTnVtYmVy
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBhdXRvIGpzWSA9IGpzT2JqZWN0LT5nZXQo
Z2xvYmFsT2JqZWN0LCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ5Il9zKSk7Ci0g
ICAgaWYgKCFqc1kuaXNOdW1iZXIoKSkKKyAgICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkgfHwgIWpz
WS5pc051bWJlcigpKQogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZW5jb2RlciA8PCBQb2lu
dFR5cGUoanNYLmFzTnVtYmVyKCksIGpzWS5hc051bWJlcigpKTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgUmVjdFR5cGU+IGJvb2wgZW5jb2RlUmVjdFR5cGUoSVBD
OjpFbmNvZGVyJiBlbmNvZGVyLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
Qzo6SlNPYmplY3QqIGpzT2JqZWN0LCBKU0M6OkNhdGNoU2NvcGUmIHNjb3BlKQoreworICAgIGF1
dG8mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8ganNYID0ganNPYmplY3QtPmdl
dChnbG9iYWxPYmplY3QsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIngiX3MpKTsK
KyAgICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkgfHwgIWpzWC5pc051bWJlcigpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgYXV0byBqc1kgPSBqc09iamVjdC0+Z2V0KGdsb2JhbE9iamVjdCwg
SlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAieSJfcykpOworICAgIGlmIChzY29wZS5l
eGNlcHRpb24oKSB8fCAhanNZLmlzTnVtYmVyKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICBhdXRvIGpzV2lkdGggPSBqc09iamVjdC0+Z2V0KGdsb2JhbE9iamVjdCwgSlNDOjpJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCAid2lkdGgiX3MpKTsKLSAgICBpZiAoIWpzV2lkdGguaXNOdW1i
ZXIoKSkKKyAgICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkgfHwgIWpzV2lkdGguaXNOdW1iZXIoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGF1dG8ganNIZWlnaHQgPSBqc09iamVjdC0+Z2V0
KGdsb2JhbE9iamVjdCwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiaGVpZ2h0Il9z
KSk7Ci0gICAgaWYgKCFqc0hlaWdodC5pc051bWJlcigpKQorICAgIGlmIChzY29wZS5leGNlcHRp
b24oKSB8fCAhanNIZWlnaHQuaXNOdW1iZXIoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IGVuY29kZXIgPDwgUmVjdFR5cGUoanNYLmFzTnVtYmVyKCksIGpzWS5hc051bWJlcigpLCBqc1dp
ZHRoLmFzTnVtYmVyKCksIGpzSGVpZ2h0LmFzTnVtYmVyKCkpOwogICAgIHJldHVybiB0cnVlOwog
fQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBJbnRlZ3JhbFR5cGU+IGJvb2wgZW5jb2RlSW50ZWdyYWxU
eXBlKElQQzo6RW5jb2RlciYgZW5jb2RlciwgSlNDOjpKU1ZhbHVlIGpzVmFsdWUpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBJbnRlZ3JhbFR5cGU+IGJvb2wgZW5jb2RlTnVtZXJpY1R5cGUoSVBDOjpFbmNv
ZGVyJiBlbmNvZGVyLCBKU0M6OkpTVmFsdWUganNWYWx1ZSkKIHsKICAgICBpZiAoanNWYWx1ZS5p
c0JpZ0ludCgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBTdXBwb3J0IG5lZ2F0aXZlIEJpZ0ludC4K
QEAgLTM0MCw4ICszNTcsMjQgQEAKICAgICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAorICAgIGlmICh0eXBlID09ICJJbnRQb2ludCIpIHsKKyAgICAgICAg
aWYgKCFlbmNvZGVQb2ludFR5cGU8V2ViQ29yZTo6SW50UG9pbnQ+KGVuY29kZXIsIGdsb2JhbE9i
amVjdCwganNPYmplY3QsIHNjb3BlKSkgeworICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0
ZVR5cGVFcnJvcihjb250ZXh0LCAiRmFpbGVkIHRvIGNvbnZlcnQgSW50UG9pbnQiX3MpOworICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKworICAgIGlmICh0eXBlID09ICJGbG9hdFBvaW50IikgeworICAgICAgICBpZiAoIWVu
Y29kZVBvaW50VHlwZTxXZWJDb3JlOjpJbnRQb2ludD4oZW5jb2RlciwgZ2xvYmFsT2JqZWN0LCBq
c09iamVjdCwgc2NvcGUpKSB7CisgICAgICAgICAgICAqZXhjZXB0aW9uID0gY3JlYXRlVHlwZUVy
cm9yKGNvbnRleHQsICJGYWlsZWQgdG8gY29udmVydCBGbG9hdFBvaW50Il9zKTsKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKICAgICBpZiAodHlwZSA9PSAiSW50UmVjdCIpIHsKLSAgICAgICAgaWYgKCFlbmNvZGVSZWN0
VHlwZTxXZWJDb3JlOjpJbnRSZWN0PihlbmNvZGVyLCBnbG9iYWxPYmplY3QsIGpzT2JqZWN0KSkg
eworICAgICAgICBpZiAoIWVuY29kZVJlY3RUeXBlPFdlYkNvcmU6OkludFJlY3Q+KGVuY29kZXIs
IGdsb2JhbE9iamVjdCwganNPYmplY3QsIHNjb3BlKSkgewogICAgICAgICAgICAgKmV4Y2VwdGlv
biA9IGNyZWF0ZVR5cGVFcnJvcihjb250ZXh0LCAiRmFpbGVkIHRvIGNvbnZlcnQgSW50UmVjdCJf
cyk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KQEAgLTM0OSw3ICszODIs
NyBAQAogICAgIH0KIAogICAgIGlmICh0eXBlID09ICJGbG9hdFJlY3QiKSB7Ci0gICAgICAgIGlm
ICghZW5jb2RlUmVjdFR5cGU8V2ViQ29yZTo6RmxvYXRSZWN0PihlbmNvZGVyLCBnbG9iYWxPYmpl
Y3QsIGpzT2JqZWN0KSkgeworICAgICAgICBpZiAoIWVuY29kZVJlY3RUeXBlPFdlYkNvcmU6OkZs
b2F0UmVjdD4oZW5jb2RlciwgZ2xvYmFsT2JqZWN0LCBqc09iamVjdCwgc2NvcGUpKSB7CiAgICAg
ICAgICAgICAqZXhjZXB0aW9uID0gY3JlYXRlVHlwZUVycm9yKGNvbnRleHQsICJGYWlsZWQgdG8g
Y29udmVydCBGbG9hdFJlY3QiX3MpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICB9CkBAIC0zODIsNiArNDE1LDMwIEBACiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAor
ICAgIGlmICh0eXBlID09ICJVUkwiKSB7CisgICAgICAgIGlmIChqc1ZhbHVlLmlzVW5kZWZpbmVk
T3JOdWxsKCkpIHsKKyAgICAgICAgICAgIGVuY29kZXIgPDwgVVJMIHsgfTsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGF1dG8gc3RyaW5nID0ganNWYWx1ZS50
b1dURlN0cmluZyhnbG9iYWxPYmplY3QpOworICAgICAgICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGVuY29kZXIgPDwgVVJMIHsgVVJM
IHsgfSwgc3RyaW5nIH07CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmICh0
eXBlID09ICJSZWdpc3RyYWJsZURvbWFpbiIpIHsKKyAgICAgICAgaWYgKGpzVmFsdWUuaXNVbmRl
ZmluZWRPck51bGwoKSkgeworICAgICAgICAgICAgZW5jb2RlciA8PCBSZWdpc3RyYWJsZURvbWFp
biB7IH07CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBhdXRv
IHN0cmluZyA9IGpzVmFsdWUudG9XVEZTdHJpbmcoZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgaWYg
KHNjb3BlLmV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBl
bmNvZGVyIDw8IFJlZ2lzdHJhYmxlRG9tYWluIHsgVVJMIHsgVVJMIHsgfSwgc3RyaW5nIH0gfTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCiAgICAgaWYgKHR5cGUgPT0gIlJHQkEiKSB7
CiAgICAgICAgIGlmICghanNWYWx1ZS5pc051bWJlcigpKSB7CiAgICAgICAgICAgICAqZXhjZXB0
aW9uID0gY3JlYXRlVHlwZUVycm9yKGNvbnRleHQsICJSR0JBIHZhbHVlIHNob3VsZCBiZSBhIG51
bWJlciJfcyk7CkBAIC0zOTIsMzYgKzQ0OSw0NCBAQAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAKLSAgICBib29sIGludGVncmFsUmVzdWx0OworICAgIGJvb2wgbnVtZXJpY1Jlc3VsdDsK
ICAgICBpZiAodHlwZSA9PSAiYm9vbCIpCi0gICAgICAgIGludGVncmFsUmVzdWx0ID0gZW5jb2Rl
SW50ZWdyYWxUeXBlPGJvb2w+KGVuY29kZXIsIGpzVmFsdWUpOworICAgICAgICBudW1lcmljUmVz
dWx0ID0gZW5jb2RlTnVtZXJpY1R5cGU8Ym9vbD4oZW5jb2RlciwganNWYWx1ZSk7CisgICAgZWxz
ZSBpZiAodHlwZSA9PSAiZG91YmxlIikKKyAgICAgICAgbnVtZXJpY1Jlc3VsdCA9IGVuY29kZU51
bWVyaWNUeXBlPGRvdWJsZT4oZW5jb2RlciwganNWYWx1ZSk7CisgICAgZWxzZSBpZiAodHlwZSA9
PSAiZmxvYXQiKQorICAgICAgICBudW1lcmljUmVzdWx0ID0gZW5jb2RlTnVtZXJpY1R5cGU8Zmxv
YXQ+KGVuY29kZXIsIGpzVmFsdWUpOwogICAgIGVsc2UgaWYgKHR5cGUgPT0gImludDhfdCIpCi0g
ICAgICAgIGludGVncmFsUmVzdWx0ID0gZW5jb2RlSW50ZWdyYWxUeXBlPGludDhfdD4oZW5jb2Rl
ciwganNWYWx1ZSk7CisgICAgICAgIG51bWVyaWNSZXN1bHQgPSBlbmNvZGVOdW1lcmljVHlwZTxp
bnQ4X3Q+KGVuY29kZXIsIGpzVmFsdWUpOwogICAgIGVsc2UgaWYgKHR5cGUgPT0gImludDE2X3Qi
KQotICAgICAgICBpbnRlZ3JhbFJlc3VsdCA9IGVuY29kZUludGVncmFsVHlwZTxpbnQxNl90Pihl
bmNvZGVyLCBqc1ZhbHVlKTsKKyAgICAgICAgbnVtZXJpY1Jlc3VsdCA9IGVuY29kZU51bWVyaWNU
eXBlPGludDE2X3Q+KGVuY29kZXIsIGpzVmFsdWUpOwogICAgIGVsc2UgaWYgKHR5cGUgPT0gImlu
dDMyX3QiKQotICAgICAgICBpbnRlZ3JhbFJlc3VsdCA9IGVuY29kZUludGVncmFsVHlwZTxpbnQz
Ml90PihlbmNvZGVyLCBqc1ZhbHVlKTsKKyAgICAgICAgbnVtZXJpY1Jlc3VsdCA9IGVuY29kZU51
bWVyaWNUeXBlPGludDMyX3Q+KGVuY29kZXIsIGpzVmFsdWUpOwogICAgIGVsc2UgaWYgKHR5cGUg
PT0gImludDY0X3QiKQotICAgICAgICBpbnRlZ3JhbFJlc3VsdCA9IGVuY29kZUludGVncmFsVHlw
ZTxpbnQ2NF90PihlbmNvZGVyLCBqc1ZhbHVlKTsKKyAgICAgICAgbnVtZXJpY1Jlc3VsdCA9IGVu
Y29kZU51bWVyaWNUeXBlPGludDY0X3Q+KGVuY29kZXIsIGpzVmFsdWUpOwogICAgIGVsc2UgaWYg
KHR5cGUgPT0gInVpbnQ4X3QiKQotICAgICAgICBpbnRlZ3JhbFJlc3VsdCA9IGVuY29kZUludGVn
cmFsVHlwZTx1aW50OF90PihlbmNvZGVyLCBqc1ZhbHVlKTsKKyAgICAgICAgbnVtZXJpY1Jlc3Vs
dCA9IGVuY29kZU51bWVyaWNUeXBlPHVpbnQ4X3Q+KGVuY29kZXIsIGpzVmFsdWUpOwogICAgIGVs
c2UgaWYgKHR5cGUgPT0gInVpbnQxNl90IikKLSAgICAgICAgaW50ZWdyYWxSZXN1bHQgPSBlbmNv
ZGVJbnRlZ3JhbFR5cGU8dWludDE2X3Q+KGVuY29kZXIsIGpzVmFsdWUpOworICAgICAgICBudW1l
cmljUmVzdWx0ID0gZW5jb2RlTnVtZXJpY1R5cGU8dWludDE2X3Q+KGVuY29kZXIsIGpzVmFsdWUp
OwogICAgIGVsc2UgaWYgKHR5cGUgPT0gInVpbnQzMl90IikKLSAgICAgICAgaW50ZWdyYWxSZXN1
bHQgPSBlbmNvZGVJbnRlZ3JhbFR5cGU8dWludDMyX3Q+KGVuY29kZXIsIGpzVmFsdWUpOworICAg
ICAgICBudW1lcmljUmVzdWx0ID0gZW5jb2RlTnVtZXJpY1R5cGU8dWludDMyX3Q+KGVuY29kZXIs
IGpzVmFsdWUpOwogICAgIGVsc2UgaWYgKHR5cGUgPT0gInVpbnQ2NF90IikKLSAgICAgICAgaW50
ZWdyYWxSZXN1bHQgPSBlbmNvZGVJbnRlZ3JhbFR5cGU8dWludDY0X3Q+KGVuY29kZXIsIGpzVmFs
dWUpOworICAgICAgICBudW1lcmljUmVzdWx0ID0gZW5jb2RlTnVtZXJpY1R5cGU8dWludDY0X3Q+
KGVuY29kZXIsIGpzVmFsdWUpOwogICAgIGVsc2UgewogICAgICAgICAqZXhjZXB0aW9uID0gY3Jl
YXRlVHlwZUVycm9yKGNvbnRleHQsICJCYWQgdHlwZSBuYW1lIl9zKTsKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KLSAgICBpZiAoIWludGVncmFsUmVzdWx0KSB7Ci0gICAgICAgICpleGNl
cHRpb24gPSBjcmVhdGVUeXBlRXJyb3IoY29udGV4dCwgIkZhaWxlZCB0byBlbmNvZGUgYW4gaW50
ZWdlciJfcyk7CisgICAgaWYgKCFudW1lcmljUmVzdWx0KSB7CisgICAgICAgICpleGNlcHRpb24g
PSBjcmVhdGVUeXBlRXJyb3IoY29udGV4dCwgIkZhaWxlZCB0byBlbmNvZGUgYSBudW1iZXIiX3Mp
OwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIHJldHVybiB0cnVlOwogfQogCitl
bnVtIGNsYXNzIE1lc3NhZ2VPcHRpb24geworICAgIEhhc1JlcGx5ID0gMSA8PCAwLAorfTsKKwog
SlNWYWx1ZVJlZiBKU0lQQzo6c2VuZE1lc3NhZ2UoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2Jq
ZWN0UmVmLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29u
c3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewogICAg
IGF1dG8qIGdsb2JhbE9iamVjdCA9IHRvSlMoY29udGV4dCk7CkBAIC00MjgsMTIgKzQ5MywxMiBA
QAogICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZ2xvYmFsT2JqZWN0LT52bSgpKTsKICAgICBh
dXRvIGpzSVBDID0gbWFrZVJlZlB0cih0b1dyYXBwZWQoY29udGV4dCwgdGhpc09iamVjdCkpOwog
ICAgIGlmICghanNJUEMpIHsKLSAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKEpTQzo6Y3JlYXRl
VHlwZUVycm9yKHRvSlMoY29udGV4dCksICJXcm9uZyB0eXBlIl9zKSk7CisgICAgICAgICpleGNl
cHRpb24gPSBjcmVhdGVUeXBlRXJyb3IoY29udGV4dCwgIldyb25nIHR5cGUiX3MpOwogICAgICAg
ICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAgICAgfQogCiAgICAgaWYg
KGFyZ3VtZW50Q291bnQgPCAzKSB7Ci0gICAgICAgICpleGNlcHRpb24gPSB0b1JlZihKU0M6OmNy
ZWF0ZVR5cGVFcnJvcih0b0pTKGNvbnRleHQpLCAiTXVzdCBzcGVjaWZ5IHRoZSB0YXJnZXQgcHJv
Y2VzcywgZGVzaW5hdGlvbiBJRCwgYW5kIG1lc3NhZ2UgSUQgYXMgdGhlIGZpcnN0IHRocmVlIGFy
Z3VtZW50cyJfcykpOworICAgICAgICAqZXhjZXB0aW9uID0gY3JlYXRlVHlwZUVycm9yKGNvbnRl
eHQsICJNdXN0IHNwZWNpZnkgdGhlIHRhcmdldCBwcm9jZXNzLCBkZXNpbmF0aW9uIElELCBhbmQg
bWVzc2FnZSBJRCBhcyB0aGUgZmlyc3QgdGhyZWUgYXJndW1lbnRzIl9zKTsKICAgICAgICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogICAgIH0KIApAQCAtNDQ5LDcgKzUx
NCw3IEBACiAgICAgaWYgKCFtZXNzYWdlSUQpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVu
ZGVmaW5lZChjb250ZXh0KTsKIAotICAgIGF1dG8gZW5jb2RlciA9IG1ha2VVbmlxdWU8SVBDOjpF
bmNvZGVyPihzdGF0aWNfY2FzdDxJUEM6Ok1lc3NhZ2VOYW1lPihzdGF0aWNfY2FzdDx1aW50NjRf
dD4oKm1lc3NhZ2VJRCkpLCAqZGVzdGluYXRpb25JRCk7CisgICAgYXV0byBlbmNvZGVyID0gbWFr
ZVVuaXF1ZTxJUEM6OkVuY29kZXI+KHN0YXRpY19jYXN0PElQQzo6TWVzc2FnZU5hbWU+KCptZXNz
YWdlSUQpLCAqZGVzdGluYXRpb25JRCk7CiAKICAgICBpZiAoYXJndW1lbnRDb3VudCA+IDMpIHsK
ICAgICAgICAgaWYgKCFlbmNvZGVBcmd1bWVudCgqZW5jb2RlciwgKmpzSVBDLCBjb250ZXh0LCBh
cmd1bWVudHNbM10sIGV4Y2VwdGlvbikpCkBAIC00NjksMTIgKzUzNCwxMiBAQAogICAgIEpTQzo6
SlNMb2NrSG9sZGVyIGxvY2soZ2xvYmFsT2JqZWN0LT52bSgpKTsKICAgICBhdXRvIGpzSVBDID0g
bWFrZVJlZlB0cih0b1dyYXBwZWQoY29udGV4dCwgdGhpc09iamVjdCkpOwogICAgIGlmICghanNJ
UEMpIHsKLSAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKEpTQzo6Y3JlYXRlVHlwZUVycm9yKHRv
SlMoY29udGV4dCksICJXcm9uZyB0eXBlIl9zKSk7CisgICAgICAgICpleGNlcHRpb24gPSBjcmVh
dGVUeXBlRXJyb3IoY29udGV4dCwgIldyb25nIHR5cGUiX3MpOwogICAgICAgICByZXR1cm4gSlNW
YWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAgICAgfQogCiAgICAgaWYgKGFyZ3VtZW50Q291
bnQgPCA0KSB7Ci0gICAgICAgICpleGNlcHRpb24gPSB0b1JlZihKU0M6OmNyZWF0ZVR5cGVFcnJv
cih0b0pTKGNvbnRleHQpLCAiTXVzdCBzcGVjaWZ5IHRoZSB0YXJnZXQgcHJvY2VzcywgZGVzaW5h
dGlvbiBJRCwgbWVzc2FnZSBJRCwgYW5kIHRpbWVvdXQgYXMgdGhlIGZpcnN0IGZvdXIgYXJndW1l
bnRzIl9zKSk7CisgICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVUeXBlRXJyb3IoY29udGV4dCwg
Ik11c3Qgc3BlY2lmeSB0aGUgdGFyZ2V0IHByb2Nlc3MsIGRlc2luYXRpb24gSUQsIGFuZCBtZXNz
YWdlIElEIGFzIHRoZSBmaXJzdCB0aHJlZSBhcmd1bWVudHMiX3MpOwogICAgICAgICByZXR1cm4g
SlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAgICAgfQogCkBAIC00OTQsMTYgKzU1OSwz
MyBAQAogICAgIHsKICAgICAgICAgYXV0byBqc1ZhbHVlID0gdG9KUyhnbG9iYWxPYmplY3QsIGFy
Z3VtZW50c1szXSk7CiAgICAgICAgIGlmICghanNWYWx1ZS5pc051bWJlcigpKSB7Ci0gICAgICAg
ICAgICAqZXhjZXB0aW9uID0gdG9SZWYoSlNDOjpjcmVhdGVUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0
LCAidGltZW91dCBtdXN0IGJlIGEgbnVtYmVyIl9zKSk7CisgICAgICAgICAgICAqZXhjZXB0aW9u
ID0gY3JlYXRlVHlwZUVycm9yKGNvbnRleHQsICJUaW1lb3V0IG11c3QgYmUgYSBudW1iZXIiX3Mp
OwogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogICAg
ICAgICB9CiAgICAgICAgIHRpbWVvdXQgPSBTZWNvbmRzIHsganNWYWx1ZS5hc051bWJlcigpIH07
CiAgICAgfQotICAgIAorCisgICAgT3B0aW9uU2V0PE1lc3NhZ2VPcHRpb24+IG9wdGlvbnM7Cisg
ICAgaWYgKGFyZ3VtZW50Q291bnQgPiA1KSB7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X0NBVENIX1NDT1BFKGdsb2JhbE9iamVjdC0+dm0oKSk7CisgICAgICAgIGF1dG8ganNWYWx1ZSA9
IHRvSlMoZ2xvYmFsT2JqZWN0LCBhcmd1bWVudHNbNF0pOworICAgICAgICBhdXRvKiBqc09iamVj
dCA9IGpzVmFsdWUudG9PYmplY3QoZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgaWYgKHNjb3BlLmV4
Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRl
eHQpOworCisgICAgICAgIGF1dG8mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgICAgICBh
dXRvIGhhc1JlcGx5ID0ganNPYmplY3QtPmdldChnbG9iYWxPYmplY3QsIEpTQzo6SWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgImhhc1JlcGx5Il9zKSk7CisgICAgICAgIGlmIChzY29wZS5leGNl
cHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0
KTsKKyAgICAgICAgaWYgKGhhc1JlcGx5LnRvQm9vbGVhbihnbG9iYWxPYmplY3QpKSAKKyAgICAg
ICAgICAgIG9wdGlvbnMuYWRkKE1lc3NhZ2VPcHRpb246Okhhc1JlcGx5KTsKKyAgICB9CisKICAg
ICAvLyBGSVhNRTogU3VwcG9ydCB0aGUgb3B0aW9ucy4KIAogICAgIHVpbnQ2NF90IHN5bmNSZXF1
ZXN0SUQgPSAwOwotICAgIGF1dG8gZW5jb2RlciA9IGNvbm5lY3Rpb24tPmNyZWF0ZVN5bmNNZXNz
YWdlRW5jb2RlcihzdGF0aWNfY2FzdDxJUEM6Ok1lc3NhZ2VOYW1lPihzdGF0aWNfY2FzdDx1aW50
NjRfdD4oKm1lc3NhZ2VJRCkpLCAqZGVzdGluYXRpb25JRCwgc3luY1JlcXVlc3RJRCk7CisgICAg
YXV0byBtZXNzYWdlTmFtZSA9IHN0YXRpY19jYXN0PElQQzo6TWVzc2FnZU5hbWU+KCptZXNzYWdl
SUQpOworICAgIGF1dG8gZW5jb2RlciA9IGNvbm5lY3Rpb24tPmNyZWF0ZVN5bmNNZXNzYWdlRW5j
b2RlcihtZXNzYWdlTmFtZSwgKmRlc3RpbmF0aW9uSUQsIHN5bmNSZXF1ZXN0SUQpOwogCiAgICAg
aWYgKGFyZ3VtZW50Q291bnQgPiA0KSB7CiAgICAgICAgIGlmICghZW5jb2RlQXJndW1lbnQoKmVu
Y29kZXIsICpqc0lQQywgY29udGV4dCwgYXJndW1lbnRzWzRdLCBleGNlcHRpb24pKQpAQCAtNTEw
LDkgKzU5Miw0MSBAQAogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNv
bnRleHQpOwogICAgIH0KIAotICAgIGF1dG8gcmVwbHlEZWNvZGVyID0gY29ubmVjdGlvbi0+c2Vu
ZFN5bmNNZXNzYWdlKHN5bmNSZXF1ZXN0SUQsIFdURk1vdmUoZW5jb2RlciksIHRpbWVvdXQsIHsg
fSk7Ci0gICAgLy8gRklYTUU6IERlY29kZSB0aGUgcmVwbHkuCisgICAgaWYgKGF1dG8gcmVwbHlE
ZWNvZGVyID0gY29ubmVjdGlvbi0+c2VuZFN5bmNNZXNzYWdlKHN5bmNSZXF1ZXN0SUQsIFdURk1v
dmUoZW5jb2RlciksIHRpbWVvdXQsIHsgfSkpIHsKKyAgICAgICAgYXV0byYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZt
KTsKIAorICAgICAgICBhdXRvIGFycmF5QnVmZmVyID0gSlNDOjpBcnJheUJ1ZmZlcjo6Y3JlYXRl
KHJlcGx5RGVjb2Rlci0+YnVmZmVyKCksIHJlcGx5RGVjb2Rlci0+bGVuZ3RoKCkpOworICAgICAg
ICBKU0M6OkpTQXJyYXlCdWZmZXIqIGpzQXJyYXlCdWZmZXIgPSBudWxscHRyOworICAgICAgICBp
ZiAoYXV0byogc3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5hcnJheUJ1ZmZlclN0cnVjdHVyZShh
cnJheUJ1ZmZlci0+c2hhcmluZ01vZGUoKSkpCisgICAgICAgICAgICBqc0FycmF5QnVmZmVyID0g
SlNDOjpKU0FycmF5QnVmZmVyOjpjcmVhdGUodm0sIHN0cnVjdHVyZSwgV1RGTW92ZShhcnJheUJ1
ZmZlcikpOworICAgICAgICBpZiAoIWpzQXJyYXlCdWZmZXIpIHsKKyAgICAgICAgICAgICpleGNl
cHRpb24gPSBjcmVhdGVUeXBlRXJyb3IoY29udGV4dCwgIkZhaWxlZCB0byBjcmVhdGUgdGhlIGFy
cmF5IGJ1ZmZlciBmb3IgdGhlIHJlcGx5Il9zKTsKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVl
TWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8ganNSZXBs
eUFyZ3VtZW50cyA9IGpzVmFsdWVGb3JSZXBseUFyZ3VtZW50cyhnbG9iYWxPYmplY3QsIG1lc3Nh
Z2VOYW1lLCAqcmVwbHlEZWNvZGVyKTsKKyAgICAgICAgaWYgKCFqc1JlcGx5QXJndW1lbnRzKSB7
CisgICAgICAgICAgICAqZXhjZXB0aW9uID0gY3JlYXRlVHlwZUVycm9yKGNvbnRleHQsICJGYWls
ZWQgdG8gZGVjb2RlIHRoZSByZXBseSJfcyk7CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZU1h
a2VVbmRlZmluZWQoY29udGV4dCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGpzUmVwbHlBcmd1
bWVudHMtPmlzRW1wdHkoKSkgeworICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVF
cnJvcihjb250ZXh0LCAiRmFpbGVkIHRvIGNvbnZlcnQgdGhlIHJlcGx5IHRvIGFuIEpTIGFycmF5
Il9zKTsKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsK
KyAgICAgICAgfQorCisgICAgICAgIEpTQzo6SlNPYmplY3QqIGpzUmVzdWx0ID0gY29uc3RydWN0
RW1wdHlPYmplY3QoZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgp
KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZU1ha2VVbmRlZmlu
ZWQoY29udGV4dCkpOworCisgICAgICAgIGpzUmVzdWx0LT5wdXREaXJlY3Qodm0sIHZtLnByb3Bl
cnR5TmFtZXMtPmFyZ3VtZW50cywgKmpzUmVwbHlBcmd1bWVudHMpOworICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KSk7CisKKyAg
ICAgICAganNSZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCAiYnVmZmVyIiksIGpzQXJyYXlCdWZmZXIpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KSk7CisKKyAgICAgICAgcmV0
dXJuIHRvUmVmKGdsb2JhbE9iamVjdCwganNSZXN1bHQpOworICAgIH0KKwogICAgIHJldHVybiBK
U1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIH0KIApAQCAtNTMxLDYgKzY0NSwyMCBAQAog
ICAgIH0pOwogfQogCitKU1ZhbHVlUmVmIEpTSVBDOjpzZXNzaW9uSUQoSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIEpTU3RyaW5nUmVmLCBKU1ZhbHVlUmVmKiBl
eGNlcHRpb24pCit7CisgICAgcmV0dXJuIHJldHJpZXZlSUQoY29udGV4dCwgdGhpc09iamVjdCwg
ZXhjZXB0aW9uLCBbXShKU0lQQyYgd3JhcHBlZCkgeworICAgICAgICByZXR1cm4gd3JhcHBlZC5t
X3dlYlBhZ2UtPnNlc3Npb25JRCgpLnRvVUludDY0KCk7CisgICAgfSk7Cit9CisKK0pTVmFsdWVS
ZWYgSlNJUEM6OnBhZ2VJZGVudGlmaWVyKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJl
ZiB0aGlzT2JqZWN0LCBKU1N0cmluZ1JlZiwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAg
IHJldHVybiByZXRyaWV2ZUlEKGNvbnRleHQsIHRoaXNPYmplY3QsIGV4Y2VwdGlvbiwgW10oSlNJ
UEMmIHdyYXBwZWQpIHsKKyAgICAgICAgcmV0dXJuIHdyYXBwZWQubV93ZWJQYWdlLT5pZGVudGlm
aWVyKCkudG9VSW50NjQoKTsKKyAgICB9KTsKK30KKwogSlNWYWx1ZVJlZiBKU0lQQzo6ZnJhbWVJ
ZGVudGlmaWVyKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBK
U1N0cmluZ1JlZiwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewogICAgIHJldHVybiByZXRyaWV2
ZUlEKGNvbnRleHQsIHRoaXNPYmplY3QsIGV4Y2VwdGlvbiwgW10oSlNJUEMmIHdyYXBwZWQpIHsK
QEAgLTU1NSw2ICs2ODMsNDEgQEAKICAgICByZXR1cm4gdG9SZWYodm0sIGpzVmFsdWUpOwogfQog
CitzdGF0aWMgSlNDOjpKU1ZhbHVlIGNyZWF0ZUpTQXJyYXlGb3JBcmd1bWVudERlc2NyaXB0aW9u
cyhKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIE9wdGlvbmFsPFZlY3RvcjxJUEM6
OkFyZ3VtZW50RGVzY3JpcHRpb24+PiYmIGFyZ3VtZW50RGVzY3JpcHRpb25zKQoreworICAgIGlm
ICghYXJndW1lbnREZXNjcmlwdGlvbnMpCisgICAgICAgIHJldHVybiBKU0M6OmpzVERaVmFsdWUo
KTsKKworICAgIGF1dG8mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICBKU0M6OkpTT2JqZWN0KiBhcmd1bWVudHNB
cnJheSA9IEpTQzo6Y29uc3RydWN0RW1wdHlBcnJheShnbG9iYWxPYmplY3QsIG51bGxwdHIpOwor
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTQzo6anNURFpWYWx1ZSgpKTsKKworICAg
IGZvciAodW5zaWduZWQgYXJndW1lbnRJbmRleCA9IDA7IGFyZ3VtZW50SW5kZXggPCBhcmd1bWVu
dERlc2NyaXB0aW9ucy0+c2l6ZSgpOyArK2FyZ3VtZW50SW5kZXgpIHsKKyAgICAgICAgYXV0byYg
ZGVzY3JpcHRpb24gPSBhcmd1bWVudERlc2NyaXB0aW9ucy0+YXQoYXJndW1lbnRJbmRleCk7Cisg
ICAgICAgIEpTQzo6SlNPYmplY3QqIGpzRGVzY3JpcHRpb25zID0gY29uc3RydWN0RW1wdHlPYmpl
Y3QoZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKTsKKyAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNDOjpqc1REWlZhbHVlKCkpOworCisgICAg
ICAgIGFyZ3VtZW50c0FycmF5LT5wdXREaXJlY3RJbmRleChnbG9iYWxPYmplY3QsIGFyZ3VtZW50
SW5kZXgsIGpzRGVzY3JpcHRpb25zKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgSlNDOjpqc1REWlZhbHVlKCkpOworCisgICAgICAgIGpzRGVzY3JpcHRpb25zLT5wdXREaXJl
Y3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm5hbWUiKSwgSlNDOjpqc1N0
cmluZyh2bSwgU3RyaW5nKGRlc2NyaXB0aW9uLm5hbWUpKSk7CisgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIEpTQzo6anNURFpWYWx1ZSgpKTsKKworICAgICAgICBqc0Rlc2NyaXB0
aW9ucy0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ0eXBl
IiksIEpTQzo6anNTdHJpbmcodm0sIFN0cmluZyhkZXNjcmlwdGlvbi50eXBlKSkpOworICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU0M6OmpzVERaVmFsdWUoKSk7CisKKyAgICAg
ICAganNEZXNjcmlwdGlvbnMtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCAib3B0aW9uYWwiKSwgSlNDOjpqc0Jvb2xlYW4oZGVzY3JpcHRpb24uaXNPcHRpb25h
bCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU0M6OmpzVERaVmFsdWUo
KSk7CisKKyAgICAgICAgaWYgKGRlc2NyaXB0aW9uLmVudW1OYW1lKSB7CisgICAgICAgICAgICBq
c0Rlc2NyaXB0aW9ucy0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0sICJlbnVtIiksIEpTQzo6anNTdHJpbmcodm0sIFN0cmluZyhkZXNjcmlwdGlvbi5lbnVtTmFt
ZSkpKTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTQzo6anNURFpW
YWx1ZSgpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gYXJndW1lbnRzQXJyYXk7Cit9
CisKIEpTVmFsdWVSZWYgSlNJUEM6Om1lc3NhZ2VzKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09i
amVjdFJlZiB0aGlzT2JqZWN0LCBKU1N0cmluZ1JlZiwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQog
ewogICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IHRvSlMoY29udGV4dCk7CkBAIC01NjcsMTcgKzcz
MCwzNSBAQAogICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAg
ICAgfQogCisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogICAgIEpT
Qzo6SlNPYmplY3QqIG1lc3NhZ2VzT2JqZWN0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZ2xvYmFs
T2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKTsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KSk7CisKICAgICBh
dXRvIG5hbWVJZGVudCA9IEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm5hbWUiKTsK
KyAgICBhdXRvIHJlcGx5QXJndW1lbnRzSWRlbnQgPSBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJyZXBseUFyZ3VtZW50cyIpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oSVBDOjpNZXNzYWdlTmFtZTo6TGFzdCk7ICsraSkgewotICAg
ICAgICBhdXRvKiBtZXNzYWdlTmFtZSA9IGRlc2NyaXB0aW9uKHN0YXRpY19jYXN0PElQQzo6TWVz
c2FnZU5hbWU+KGkpKTsKKyAgICAgICAgYXV0byBuYW1lID0gc3RhdGljX2Nhc3Q8SVBDOjpNZXNz
YWdlTmFtZT4oaSk7CiAKICAgICAgICAgSlNDOjpKU09iamVjdCogZGljdGlvbmFyeSA9IGNvbnN0
cnVjdEVtcHR5T2JqZWN0KGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5
cGUoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWVNYWtlVW5k
ZWZpbmVkKGNvbnRleHQpKTsKKwogICAgICAgICBkaWN0aW9uYXJ5LT5wdXREaXJlY3Qodm0sIG5h
bWVJZGVudCwgSlNDOjpKU1ZhbHVlKGkpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCkpOwogCi0gICAgICAgIC8vIEZJWE1F
OiBBZGQgYXJndW1lbnQgbmFtZXMuCisgICAgICAgIGF1dG8gYXJndW1lbnREZXNjcmlwdGlvbnMg
PSBjcmVhdGVKU0FycmF5Rm9yQXJndW1lbnREZXNjcmlwdGlvbnMoZ2xvYmFsT2JqZWN0LCBJUEM6
Om1lc3NhZ2VBcmd1bWVudERlc2NyaXB0aW9ucyhuYW1lKSk7CisgICAgICAgIGlmIChhcmd1bWVu
dERlc2NyaXB0aW9ucy5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCk7CisgICAgICAgIGRpY3Rpb25hcnktPnB1dERpcmVjdCh2bSwgdm0u
cHJvcGVydHlOYW1lcy0+YXJndW1lbnRzLCBhcmd1bWVudERlc2NyaXB0aW9ucyk7ICAgICAgICAg
ICAgCisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWVNYWtlVW5kZWZp
bmVkKGNvbnRleHQpKTsKIAotICAgICAgICBtZXNzYWdlc09iamVjdC0+cHV0RGlyZWN0KHZtLCBK
U0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIG1lc3NhZ2VOYW1lKSwgZGljdGlvbmFyeSk7
CisgICAgICAgIGF1dG8gcmVwbHlBcmd1bWVudERlc2NyaXB0aW9ucyA9IGNyZWF0ZUpTQXJyYXlG
b3JBcmd1bWVudERlc2NyaXB0aW9ucyhnbG9iYWxPYmplY3QsIElQQzo6bWVzc2FnZVJlcGx5QXJn
dW1lbnREZXNjcmlwdGlvbnMobmFtZSkpOworICAgICAgICBpZiAocmVwbHlBcmd1bWVudERlc2Ny
aXB0aW9ucy5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmlu
ZWQoY29udGV4dCk7CisgICAgICAgIGRpY3Rpb25hcnktPnB1dERpcmVjdCh2bSwgcmVwbHlBcmd1
bWVudHNJZGVudCwgcmVwbHlBcmd1bWVudERlc2NyaXB0aW9ucyk7ICAgICAgICAgICAgCisgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRl
eHQpKTsKKworICAgICAgICBtZXNzYWdlc09iamVjdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sIGRlc2NyaXB0aW9uKG5hbWUpKSwgZGljdGlvbmFyeSk7Cisg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNv
bnRleHQpKTsKICAgICB9CiAKICAgICByZXR1cm4gdG9SZWYodm0sIG1lc3NhZ2VzT2JqZWN0KTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>411242</attachid>
            <date>2020-10-13 13:09:32 -0700</date>
            <delta_ts>2020-10-13 14:00:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217565-20201013130931.patch</filename>
            <type>text/plain</type>
            <size>68562</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjgyNDYpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc3IEBACisyMDIwLTEwLTEyICBSeW9zdWtlIE5p
d2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIElQQyB0ZXN0aW5nIEpTIEFQSSBzaG91
bGQgZXhwb3NlIGEgcmVwbHkgYW5kIGRlc2NyaWJlIHRoZSBsaXN0IG9mIGFyZ3VtZW50cyBmb3Ig
ZWFjaCBtZXNzYWdlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMTc1NjUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUaGlzIHBhdGNoIG1ha2VzIElQQy5zZW5kTWVzc2FnZSBhbmQgSVBDLnNlbmRTeW5jTWVz
c2FnZSBkZWNvZGUgdGhlIHJlcGx5LiBJUEMuc2VuZFN5bmNNZXNzYWdlIG5vdyByZXR1cm5zCisg
ICAgICAgIGEgZGljdGlvbmFyeSB3aXRoIHR3byBrZXlzOiAiYnVmZmVyIiBhbmQgImFyZ3VtZW50
cyIsIHRoZSBmaXJzdCBvZiB3aGljaCByZXR1cm5zIEFycmF5QnVmZmVyIG9mIHRoZSBkZWNvZGVk
CisgICAgICAgIG1lc3NhZ2UgcmVwbHkgYW5kIHRoZSBzZWNvbmQgb2Ygd2hpY2ggaXMgYW4gYXJy
YXkgb2YgZGVjb2RlZCBhcmd1bWVudHMgd2hlcmUgdGhlcmUgd2FzIGFuIGFwcHJvcHJpYXRlIEpT
CisgICAgICAgIGJpbmRpbmcgY29kZSBleGlzdGVkIGZvciB0aGUgYXJndW1lbnQgdHlwZS4gSVBD
LnNlbmRNZXNzYWdlIG5vdyByZXR1cm5zIGEgUHJvbWlzZSB3aGljaCBjYW4gZWl0aGVyIHJlc29s
dmUKKyAgICAgICAgd2l0aCB0aGUgc2FtZSBkaWN0aW9uYXJ5IGFzIElQQy5zZW5kU3luY01lc3Nh
Z2Ugb3IgcmVqZWN0IHdoZW4gdGhlIGRlY29kaW5nIGZhaWxzLgorCisgICAgICAgIEluIGFkZGl0
aW9uLCB0aGlzIHBhdGNoIGV4cG9zZXMgYSBkaWN0aW9uYXJ5IGRlc2NyaWJpbmcgZWFjaCBJUEMg
bWVzc2FnZSBhcmd1bWVudCdzIHR5cGUgYW5kIHBhcmFtZXRlciBuYW1lLgorCisgICAgICAgIElu
IG9yZGVyIHRvIGFkZCB0aGVzZSB0d28gZnVuY3Rpb25hbGl0aWVzLCB0aGlzIHBhdGNoIGFkZHMg
YSBuZXcgc3RlcCBpbiBnZW5lcmF0ZS1tZXNzYWdlLXJlY2VpdmVyLnB5IHRvCisgICAgICAgIGdl
bmVyYXRlIE1lc3NhZ2VBcmd1bWVudERlc2NyaXB0aW9ucy5jcHAsIHdoaWNoIGNvbnRhaW5zIGZ1
bmN0aW9ucyB3aGljaCBrbm93IGhvdyB0byBkZWNvZGUgYXJndW1lbnRzIG9mCisgICAgICAgIGFu
eSBJUEMgbWVzc2FnZSBhbmQgY3JlYXRlIGEgSlMgZGljdGlvbmFyeSBkZXNjcmliaW5nIGl0IGFz
IHdlbGwgYXMgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIGRlc2NyaXB0aW9ucyBvZgorICAgICAgICBh
cmd1bWVudHMgb3IgcmVwbHkgYXJndW1lbnRzLgorCisgICAgICAgIEZpbmFsbHksIHRoaXMgcGF0
Y2ggYWRkcyBlbmNvZGVycyBmb3IgYSBmZXcgdHlwZXMgZm91bmQgdG8gYmUgdmVyeSBjb21tb24g
YWZ0ZXIgcjI2ODIzOSBoYWQgYmVlbiBsYW5kZWQuCisKKyAgICAgICAgVGVzdHM6IFRlc3RXZWJL
aXRBUEkuSVBDVGVzdGluZ0FQSS5EZWNvZGVzUmVwbHlBcmd1bWVudHNGb3JQcm9tcHQKKyAgICAg
ICAgICAgICAgIFRlc3RXZWJLaXRBUEkuSVBDVGVzdGluZ0FQSS5EZWNvZGVzUmVwbHlBcmd1bWVu
dHNGb3JBc3luY01lc3NhZ2UKKyAgICAgICAgICAgICAgIFRlc3RXZWJLaXRBUEkuSVBDVGVzdGlu
Z0FQSS5EZXNjcmliZXNBcmd1bWVudHMKKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAg
ICAgICAqIERlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0OgorICAgICAgICAqIERlcml2
ZWRTb3VyY2VzLm1ha2U6CisgICAgICAgICogUGxhdGZvcm0vSVBDL0RlY29kZXIuaDoKKyAgICAg
ICAgKElQQzo6RGVjb2Rlcjo6YnVmZmVyIGNvbnN0KToKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMv
SlNJUENCaW5kaW5nLmg6IEFkZGVkLgorICAgICAgICAoanNWYWx1ZUZvckRlY29kZWRBcmd1bWVu
dFZhbHVlKTogQWRkZWQuIEEgdGVtcGxhdGUgZnVuY3Rpb24gdG8gY29uc3RydWN0IGEgSlMgdmFs
dWUgZm9yIGEgZ2l2ZW4gQysrIHZhbHVlLgorICAgICAgICAoanNWYWx1ZUZvckRlY29kZWROdW1l
cmljQXJndW1lbnRWYWx1ZSk6IEFkZGVkLiBBIGhlbHBlciBmb3IgY29uc3RydWN0aW5nIGEgSlMg
dmFsdWUgZm9yIG51bWVyaWMgdmFsdWVzLgorICAgICAgICAoanNWYWx1ZUZvckRlY29kZWRBcmd1
bWVudFJlY3QpOiBBZGRlZC4gRGl0dG8gZm9yIEludFJlY3QgYW5kIEZsb2F0UmVjdC4KKyAgICAg
ICAgKERlY29kZWRBcmd1bWVudEpTVmFsdWVDb252ZXJ0ZXIpOiBBZGRlZC4gQSBoZWxwZXIgY2xh
c3MgdG8gY29uc3RydWN0IEpTIHZhbHVlcyBmb3IgYSB0dXBsZSBvZiB2YWx1ZXMgdXNpbmcKKyAg
ICAgICAgcGFydGlhbCB0ZW1wbGF0ZSBzcGVjaWFsaXphdGlvbnMuCisgICAgICAgIChEZWNvZGVk
QXJndW1lbnRKU1ZhbHVlQ29udmVydGVyOjpjb252ZXJ0KTogQWRkZWQuCisgICAgICAgIChqc1Zh
bHVlRm9yQXJndW1lbnRUdXBsZSk6IEFkZGVkLiBBIGhlbHBlciB0byBjb25zdHJ1Y3QgYSBKUyBh
cnJheSBmb3IgdGhlIGRlY29kZWQgSVBDIGFyZ3VtZW50cy4KKyAgICAgICAgKGpzVmFsdWVGb3JE
ZWNvZGVkQXJndW1lbnRzKTogQWRkZWQuCisgICAgICAgICogUGxhdGZvcm0vSVBDL01lc3NhZ2VB
cmd1bWVudERlc2NyaXB0aW9ucy5oOiBBZGRlZC4KKyAgICAgICAgKElQQzo6QXJndW1lbnREZXNj
cmlwdGlvbik6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvZ2VuZXJhdGUtbWVzc2FnZS1yZWNl
aXZlci5weToKKyAgICAgICAgKG1haW4pOiBHZW5lcmF0ZSBNZXNzYWdlQXJndW1lbnREZXNjcmlw
dGlvbnMuY3BwLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5OgorICAgICAg
ICAoaGVhZGVyc19mb3JfdHlwZSk6IFJlbW92ZWQgdGhlIHNwZWNpYWwgY2FzZSBmb3IgUGF5bWVu
dE1ldGhvZFVwZGF0ZSBub3cgdGhhdCBpdCdzIGluIGl0cyBvd24gaGVhZGVyLiBBbHNvCisgICAg
ICAgIGFkZGVkIG1hZGUgd2VicnRjOjpXZWJLaXRFbmNvZGVkRnJhbWVJbmZvIGluY2x1ZGUgTGli
V2ViUlRDRW51bVRyYWl0cy5oIGFzIGl0IHVzZXMgd2VicnRjOjpWaWRlb0ZyYW1lVHlwZS4KKyAg
ICAgICAgKGNvbGxlY3RfaGVhZGVyX2NvbmRpdGlvbnNfZm9yX3JlY2VpdmVyKTogRXh0cmFjdGVk
IGZyb20gZ2VuZXJhdGVfbWVzc2FnZV9oYW5kbGVyLgorICAgICAgICAoZ2VuZXJhdGVfaGVhZGVy
X2luY2x1ZGVzX2Zyb21fY29uZGl0aW9ucyk6IERpdHRvLgorICAgICAgICAoZ2VuZXJhdGVfbWVz
c2FnZV9oYW5kbGVyKToKKyAgICAgICAgKGdlbmVyYXRlX2pzX3ZhbHVlX2NvbnZlcnNpb25fZnVu
Y3Rpb24pOiBBZGRlZC4KKyAgICAgICAgKGdlbmVyYXRlX2pzX2FyZ3VtZW50X2Rlc2NyaXB0aW9u
cyk6IEFkZGVkLgorICAgICAgICAoZ2VuZXJhdGVfbWVzc2FnZV9hcmd1bWVudF9kZXNjcmlwdGlv
bl9pbXBsZW1lbnRhdGlvbik6IEFkZGVkLgorICAgICAgICAqIFNoYXJlZC9BcHBsZVBheS9BcHBs
ZVBheVBheW1lbnRTZXR1cEZlYXR1cmVzV2ViS2l0Lmg6IEZpeGVkIGEgYnVnIHRoYXQgd2Ugd2Vy
ZSBub3QgZm9yd2FyZCBkZWNsYXJpbmcgTlNBcnJheS4KKyAgICAgICAgKiBTb3VyY2VzQ29jb2Eu
dHh0OiBBZGRlZCBNZXNzYWdlQXJndW1lbnREZXNjcmlwdGlvbnMuY3BwIGFzIGEgbm9uLXVuaWZp
ZWQgY3BwIGZpbGUgYXMgaXRzIHNpemUgaXMgYXJvdW5kIDFNQi4KKyAgICAgICAgKiBXZWJLaXQu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
SVBDVGVzdGluZ0FQSS5jcHA6CisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBD
OjpzdGF0aWNWYWx1ZXMpOiBBZGRlZCB0aGUgc2Vzc2lvbiBJRCBhbmQgcGFnZSBJRCBhcyBzdGF0
aWMgdmFyaWFibGVzLgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjplbmNvZGVQb2lu
dFR5cGUpOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6ZW5jb2RlUmVj
dFR5cGUpOiBGaXhlZCB0aGUgYnVnIHdhcyB0aGF0IHRoaXMgY29kZSB3YXNuJ3QgY2hlY2tpbmcg
Zm9yIGFueSBleGNlcHRpb25zLgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjplbmNv
ZGVOdW1lcmljVHlwZSk6IFJlbmFtZWQgZnJvbSBlbmNvZGVJbnRlZ3JhbFR5cGUgc2luY2UgdGhp
cyBmdW5jdGlvbiBpcyBub3cgdXNlZAorICAgICAgICB0byBlbmNvZGUgZG91YmxlIGFuZCBmbG9h
dCwgbm90IGp1c3QgaW50ZWdyYWwgdHlwZXMuCisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdB
UEk6OmVuY29kZUFyZ3VtZW50KTogQWRkZWQgdGhlIHN1cHBvcnQgZm9yIEludFBvaW50LCBGbG9h
dFBvaW50LCBVUkwsIFJlZ2lzdHJhYmxlRG9tYWluLAorICAgICAgICBkb3VibGUsIGFuZCBmbG9h
dCBhbGwgb2Ygd2hpY2ggdHVybmVkIG91dCB0byBiZSBpbiB0aGUgdG9wIDIwIG1vc3QgY29tbW9u
IHR5cGVzLgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpqc1Jlc3VsdEZyb21SZXBs
eURlY29kZXIpOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJUEM6
OnNlbmRNZXNzYWdlKTogQWRkZWQgdGhlIGNvZGUgdG8gcmV0dXJuIFByb21pc2Ugd2hlbiB0aGVy
ZSBpcyBhIHJlcGx5IGFuZCByZXNvbHZlCisgICAgICAgIGl0IHdpdGggdGhlIEpTIG9iamVjdCBk
ZXNjcmliaW5nIHRoZSBkZWNvZGVkIGFyZ3VtZW50LiBXZSB1c2UgbWVzc2FnZVJlcGx5QXJndW1l
bnREZXNjcmlwdGlvbnMgdG8gZmlndXJlIG91dAorICAgICAgICB3aGV0aGVyIHRoZXJlIGlzIGEg
cmVwbHkgb3Igbm90LgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpKU0lQQzo6c2Vu
ZFN5bmNNZXNzYWdlKTogRGVjb2RlIHRoZSByZXBseSBhbmQgcmV0dXJuIGEgSlMgb2JqZWN0IHdo
aWNoIGRlc2NyaWJlcyBpdC4KKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJUEM6
OnNlc3Npb25JRCk6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpKU0lQ
Qzo6cGFnZUlkZW50aWZpZXIpOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQ
STo6Y3JlYXRlSlNBcnJheUZvckFyZ3VtZW50RGVzY3JpcHRpb25zKTogQWRkZWQuCisgICAgICAg
IChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDOjptZXNzYWdlcyk6IEFkZGVkIHRoZSBjb2Rl
IHRvIGdlbmVyYXRlIGRlc2NyaXB0aW9ucyBmb3IgYXJndW1lbnRzLgorCiAyMDIwLTEwLTA4ICBD
aHJpcyBGbGVpemFjaCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CiAKICAgICAgICAgQVg6IFdlYnNp
dGUgV2FybmluZyBwYWdlIGlzIGluYWNjZXNzaWJsZQpJbmRleDogU291cmNlL1dlYktpdC9DTWFr
ZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0NNYWtlTGlzdHMudHh0CShy
ZXZpc2lvbiAyNjgyNDYpCisrKyBTb3VyY2UvV2ViS2l0L0NNYWtlTGlzdHMudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC00MjgsNiArNDI4LDcgQEAgbWFjcm8oR0VORVJBVEVfTUVTU0FHRV9TT1VSQ0VT
IF9vdXRwdXRfcwogCiAgICAgYWRkX2N1c3RvbV9jb21tYW5kKAogICAgICAgICBPVVRQVVQKKyAg
ICAgICAgICAgICR7V2ViS2l0X0RFUklWRURfU09VUkNFU19ESVJ9L01lc3NhZ2VBcmd1bWVudERl
c2NyaXB0aW9ucy5jcHAKICAgICAgICAgICAgICR7V2ViS2l0X0RFUklWRURfU09VUkNFU19ESVJ9
L01lc3NhZ2VOYW1lcy5jcHAKICAgICAgICAgICAgICR7V2ViS2l0X0RFUklWRURfU09VUkNFU19E
SVJ9L01lc3NhZ2VOYW1lcy5oCiAgICAgICAgICAgICAke19vdXRwdXRzfQpJbmRleDogU291cmNl
L1dlYktpdC9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0CShyZXZpc2lvbiAy
NjgyNDYpCisrKyBTb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0
CSh3b3JraW5nIGNvcHkpCkBAIC02OCw2ICs2OCw3IEBAICQoQlVJTFRfUFJPRFVDVFNfRElSKS9E
ZXJpdmVkU291cmNlcy9XZWIKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9X
ZWJLaXQyL01lZGlhUGxheWVyUHJpdmF0ZVJlbW90ZU1lc3NhZ2VSZWNlaXZlci5jcHAKICQoQlVJ
TFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL01lZGlhUGxheWVyUHJpdmF0
ZVJlbW90ZU1lc3NhZ2VzLmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9X
ZWJLaXQyL01lZGlhUGxheWVyUHJpdmF0ZVJlbW90ZU1lc3NhZ2VzUmVwbGllcy5oCiskKEJVSUxU
X1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9NZXNzYWdlQXJndW1lbnREZXNj
cmlwdGlvbnMuY3BwCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0
Mi9NZXNzYWdlTmFtZXMuY3BwCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMv
V2ViS2l0Mi9NZXNzYWdlTmFtZXMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3Vy
Y2VzL1dlYktpdDIvTlBPYmplY3RNZXNzYWdlUmVjZWl2ZXJNZXNzYWdlUmVjZWl2ZXIuY3BwCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5tYWtlCShyZXZpc2lvbiAyNjgyNDYpCisrKyBTb3Vy
Y2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHdvcmtpbmcgY29weSkKQEAgLTI1Nyw3ICsy
NTcsNyBAQCBNRVNTQUdFX1JFQ0VJVkVSX0ZJTEVTIDo9ICQoYWRkc3VmZml4IE1lCiBNRVNTQUdF
U19GSUxFUyA6PSAkKGFkZHN1ZmZpeCBNZXNzYWdlcy5oLCQobm90ZGlyICQoTUVTU0FHRV9SRUNF
SVZFUlMpKSkKIE1FU1NBR0VfUkVQTElFU19GSUxFUyA6PSAkKGFkZHN1ZmZpeCBNZXNzYWdlc1Jl
cGxpZXMuaCwkKG5vdGRpciAkKE1FU1NBR0VfUkVDRUlWRVJTKSkpCiAKLUdFTkVSQVRFRF9NRVNT
QUdFU19GSUxFUyA6PSAkKE1FU1NBR0VfUkVDRUlWRVJfRklMRVMpICQoTUVTU0FHRVNfRklMRVMp
ICQoTUVTU0FHRV9SRVBMSUVTX0ZJTEVTKSBNZXNzYWdlTmFtZXMuaCBNZXNzYWdlTmFtZXMuY3Bw
CitHRU5FUkFURURfTUVTU0FHRVNfRklMRVMgOj0gJChNRVNTQUdFX1JFQ0VJVkVSX0ZJTEVTKSAk
KE1FU1NBR0VTX0ZJTEVTKSAkKE1FU1NBR0VfUkVQTElFU19GSUxFUykgTWVzc2FnZU5hbWVzLmgg
TWVzc2FnZU5hbWVzLmNwcCBNZXNzYWdlQXJndW1lbnREZXNjcmlwdGlvbnMuY3BwCiBHRU5FUkFU
RURfTUVTU0FHRVNfRklMRVNfQVNfUEFUVEVSTlMgOj0gJChzdWJzdCAuLCUsJChHRU5FUkFURURf
TUVTU0FHRVNfRklMRVMpKQogCiBNRVNTQUdFU19JTl9GSUxFUyA6PSAkKGFkZHN1ZmZpeCAubWVz
c2FnZXMuaW4sJChNRVNTQUdFX1JFQ0VJVkVSUykpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1NvdXJj
ZXNDb2NvYS50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0
CShyZXZpc2lvbiAyNjgyNDYpCisrKyBTb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTY1OCw2ICs2NTgsNyBAQCBHUFVQcm9jZXNzUHJveHlNZXNzYWdlUmVj
ZWl2ZXIuY3BwCiBHUFVQcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcAogTGliV2ViUlRDQ29kZWNz
UHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwCiBMaWJXZWJSVENDb2RlY3NNZXNzYWdlUmVjZWl2ZXIu
Y3BwCitNZXNzYWdlQXJndW1lbnREZXNjcmlwdGlvbnMuY3BwIEBuby11bmlmeQogTWVzc2FnZU5h
bWVzLmNwcAogUmVtb3RlQXVkaW9EZXN0aW5hdGlvbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3Bw
CiBSZW1vdGVBdWRpb0Rlc3RpbmF0aW9uUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwCkluZGV4OiBT
b3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9EZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9QbGF0Zm9ybS9JUEMvRGVjb2Rlci5oCShyZXZpc2lvbiAyNjgyNDYpCisrKyBTb3Vy
Y2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9EZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTcyLDYg
KzcyLDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxEZWNvZGVyPiB1
bndyYXBGb3JUZXN0aW5nKERlY29kZXImKTsKIAorICAgIGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlcigp
IGNvbnN0IHsgcmV0dXJuIG1fYnVmZmVyOyB9CiAgICAgc2l6ZV90IGxlbmd0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fYnVmZmVyRW5kIC0gbV9idWZmZXI7IH0KIAogICAgIFdBUk5fVU5VU0VEX1JFVFVS
TiBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlclBvcyAhPSBudWxscHRyOyB9
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9KU0lQQ0JpbmRpbmcuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9KU0lQQ0JpbmRpbmcuaAkobm9uZXhp
c3RlbnQpCisrKyBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9KU0lQQ0JpbmRpbmcuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDI1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiRGVjb2Rlci5oIgorI2luY2x1ZGUgIkhhbmRsZU1lc3NhZ2UuaCIKKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9KU0FycmF5Lmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SlNHbG9iYWxPYmplY3QuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU09iamVjdC5oPgor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL09iamVjdENvbnN0cnVjdG9yLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9GbG9hdFJlY3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL1JlZ2lzdHJhYmxlRG9tYWluLmg+CisjaW5jbHVkZSA8d3RmL09iamVjdElk
ZW50aWZpZXIuaD4KKyNpbmNsdWRlIDx3dGYvVVJMLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6
aXNfYXJpdGhtZXRpYzxUPjo6dmFsdWUgJiYgIXN0ZDo6aXNfZW51bTxUPjo6dmFsdWU+KiA9IG51
bGxwdHI+CitKU0M6OkpTVmFsdWUganNWYWx1ZUZvckRlY29kZWRBcmd1bWVudFZhbHVlKEpTQzo6
SlNHbG9iYWxPYmplY3QqLCBjb25zdCBUJikKK3sKKyAgICByZXR1cm4gSlNDOjpqc1VuZGVmaW5l
ZCgpOworfQorCit0ZW1wbGF0ZTw+CitKU0M6OkpTVmFsdWUganNWYWx1ZUZvckRlY29kZWRBcmd1
bWVudFZhbHVlKEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgU3RyaW5n
JiB2YWx1ZSkKK3sKKyAgICBhdXRvJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byogb2JqZWN0ID0gSlND
Ojpjb25zdHJ1Y3RFbXB0eU9iamVjdChnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+b2JqZWN0
UHJvdG90eXBlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTQzo6SlNWYWx1
ZSgpKTsKKyAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCAidHlwZSJfcyksIEpTQzo6anNOb250cml2aWFsU3RyaW5nKHZtLCAiU3RyaW5nIl9z
KSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNDOjpKU1ZhbHVlKCkpOworICAg
IG9iamVjdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ2
YWx1ZSJfcyksIEpTQzo6anNOb250cml2aWFsU3RyaW5nKHZtLCB2YWx1ZSkpOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIEpTQzo6SlNWYWx1ZSgpKTsKKyAgICByZXR1cm4gb2JqZWN0
OworfQorCit0ZW1wbGF0ZTw+CitKU0M6OkpTVmFsdWUganNWYWx1ZUZvckRlY29kZWRBcmd1bWVu
dFZhbHVlKEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgVVJMJiB2YWx1
ZSkKK3sKKyAgICByZXR1cm4ganNWYWx1ZUZvckRlY29kZWRBcmd1bWVudFZhbHVlKGdsb2JhbE9i
amVjdCwgdmFsdWUuc3RyaW5nKCkpOworfQorCit0ZW1wbGF0ZTw+CitKU0M6OkpTVmFsdWUganNW
YWx1ZUZvckRlY29kZWRBcmd1bWVudFZhbHVlKEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgY29uc3QgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4mIHZhbHVlKQoreworICAgIHJl
dHVybiBqc1ZhbHVlRm9yRGVjb2RlZEFyZ3VtZW50VmFsdWUoZ2xvYmFsT2JqZWN0LCB2YWx1ZS5z
dHJpbmcoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHN0ZDo6ZW5hYmxlX2lmX3Q8c3Rk
Ojppc19hcml0aG1ldGljPFQ+Ojp2YWx1ZT4qID0gbnVsbHB0cj4KK0pTQzo6SlNWYWx1ZSBqc1Zh
bHVlRm9yRGVjb2RlZEFyZ3VtZW50VmFsdWUoSlNDOjpKU0dsb2JhbE9iamVjdCosIFQpCit7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIEUsIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19lbnVtPEU+
Ojp2YWx1ZT4qID0gbnVsbHB0cj4KK0pTQzo6SlNWYWx1ZSBqc1ZhbHVlRm9yRGVjb2RlZEFyZ3Vt
ZW50VmFsdWUoSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFIHZhbHVlKQorewor
ICAgIHJldHVybiBqc1ZhbHVlRm9yRGVjb2RlZEFyZ3VtZW50VmFsdWUoZ2xvYmFsT2JqZWN0LCBz
dGF0aWNfY2FzdDxzdGQ6OnVuZGVybHlpbmdfdHlwZV90PEU+Pih2YWx1ZSkpOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBOdW1lcmljVHlwZT4KK0pTQzo6SlNWYWx1ZSBqc1ZhbHVlRm9yRGVjb2Rl
ZE51bWVyaWNBcmd1bWVudFZhbHVlKEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
TnVtZXJpY1R5cGUgdmFsdWUsIGNvbnN0IFN0cmluZyYgdHlwZSkKK3sKKyAgICBhdXRvJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisgICAgYXV0byogb2JqZWN0ID0gSlNDOjpjb25zdHJ1Y3RFbXB0eU9iamVjdChnbG9i
YWxPYmplY3QsIGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCkpOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIEpTQzo6SlNWYWx1ZSgpKTsKKyAgICBvYmplY3QtPnB1dERpcmVj
dCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidHlwZSJfcyksIEpTQzo6anNO
b250cml2aWFsU3RyaW5nKHZtLCB0eXBlKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgSlNDOjpKU1ZhbHVlKCkpOworICAgIG9iamVjdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sICJ2YWx1ZSJfcyksIEpTQzo6SlNWYWx1ZSh2YWx1ZSkpOwor
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTQzo6SlNWYWx1ZSgpKTsKKyAgICByZXR1
cm4gb2JqZWN0OworfQorCit0ZW1wbGF0ZTw+CitKU0M6OkpTVmFsdWUganNWYWx1ZUZvckRlY29k
ZWRBcmd1bWVudFZhbHVlKEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgYm9vbCB2
YWx1ZSkKK3sKKyAgICBhdXRvJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byogb2JqZWN0ID0gSlNDOjpj
b25zdHJ1Y3RFbXB0eU9iamVjdChnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+b2JqZWN0UHJv
dG90eXBlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTQzo6SlNWYWx1ZSgp
KTsKKyAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCAidHlwZSJfcyksIEpTQzo6anNOb250cml2aWFsU3RyaW5nKHZtLCAiYm9vbCIpKTsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU0M6OkpTVmFsdWUoKSk7CisgICAgb2JqZWN0
LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInZhbHVlIl9z
KSwgSlNDOjpqc0Jvb2xlYW4odmFsdWUpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBKU0M6OkpTVmFsdWUoKSk7CisgICAgcmV0dXJuIG9iamVjdDsKK30KKwordGVtcGxhdGU8Pgor
SlNDOjpKU1ZhbHVlIGpzVmFsdWVGb3JEZWNvZGVkQXJndW1lbnRWYWx1ZShKU0M6OkpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIGRvdWJsZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4ganNWYWx1
ZUZvckRlY29kZWROdW1lcmljQXJndW1lbnRWYWx1ZShnbG9iYWxPYmplY3QsIHZhbHVlLCAiZG91
YmxlIik7Cit9CisKK3RlbXBsYXRlPD4KK0pTQzo6SlNWYWx1ZSBqc1ZhbHVlRm9yRGVjb2RlZEFy
Z3VtZW50VmFsdWUoSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBmbG9hdCB2YWx1
ZSkKK3sKKyAgICByZXR1cm4ganNWYWx1ZUZvckRlY29kZWROdW1lcmljQXJndW1lbnRWYWx1ZShn
bG9iYWxPYmplY3QsIHZhbHVlLCAiZmxvYXQiKTsKK30KKwordGVtcGxhdGU8PgorSlNDOjpKU1Zh
bHVlIGpzVmFsdWVGb3JEZWNvZGVkQXJndW1lbnRWYWx1ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIGludDhfdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4ganNWYWx1ZUZvckRlY29k
ZWROdW1lcmljQXJndW1lbnRWYWx1ZShnbG9iYWxPYmplY3QsIHZhbHVlLCAiaW50OF90Iik7Cit9
CisKK3RlbXBsYXRlPD4KK0pTQzo6SlNWYWx1ZSBqc1ZhbHVlRm9yRGVjb2RlZEFyZ3VtZW50VmFs
dWUoSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBpbnQxNl90IHZhbHVlKQorewor
ICAgIHJldHVybiBqc1ZhbHVlRm9yRGVjb2RlZE51bWVyaWNBcmd1bWVudFZhbHVlKGdsb2JhbE9i
amVjdCwgdmFsdWUsICJpbnQxNl90Iik7Cit9CisKK3RlbXBsYXRlPD4KK0pTQzo6SlNWYWx1ZSBq
c1ZhbHVlRm9yRGVjb2RlZEFyZ3VtZW50VmFsdWUoSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBpbnQzMl90IHZhbHVlKQoreworICAgIHJldHVybiBqc1ZhbHVlRm9yRGVjb2RlZE51
bWVyaWNBcmd1bWVudFZhbHVlKGdsb2JhbE9iamVjdCwgdmFsdWUsICJpbnQzMl90Iik7Cit9CisK
K3RlbXBsYXRlPD4KK0pTQzo6SlNWYWx1ZSBqc1ZhbHVlRm9yRGVjb2RlZEFyZ3VtZW50VmFsdWUo
SlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBpbnQ2NF90IHZhbHVlKQoreworICAg
IHJldHVybiBqc1ZhbHVlRm9yRGVjb2RlZE51bWVyaWNBcmd1bWVudFZhbHVlKGdsb2JhbE9iamVj
dCwgdmFsdWUsICJpbnQ2NF90Iik7Cit9CisKK3RlbXBsYXRlPD4KK0pTQzo6SlNWYWx1ZSBqc1Zh
bHVlRm9yRGVjb2RlZEFyZ3VtZW50VmFsdWUoSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCB1aW50OF90IHZhbHVlKQoreworICAgIHJldHVybiBqc1ZhbHVlRm9yRGVjb2RlZE51bWVy
aWNBcmd1bWVudFZhbHVlKGdsb2JhbE9iamVjdCwgdmFsdWUsICJ1aW50OF90Iik7Cit9CisKK3Rl
bXBsYXRlPD4KK0pTQzo6SlNWYWx1ZSBqc1ZhbHVlRm9yRGVjb2RlZEFyZ3VtZW50VmFsdWUoSlND
OjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1aW50MTZfdCB2YWx1ZSkKK3sKKyAgICBy
ZXR1cm4ganNWYWx1ZUZvckRlY29kZWROdW1lcmljQXJndW1lbnRWYWx1ZShnbG9iYWxPYmplY3Qs
IHZhbHVlLCAidWludDE2X3QiKTsKK30KKwordGVtcGxhdGU8PgorSlNDOjpKU1ZhbHVlIGpzVmFs
dWVGb3JEZWNvZGVkQXJndW1lbnRWYWx1ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIHVpbnQzMl90IHZhbHVlKQoreworICAgIHJldHVybiBqc1ZhbHVlRm9yRGVjb2RlZE51bWVy
aWNBcmd1bWVudFZhbHVlKGdsb2JhbE9iamVjdCwgdmFsdWUsICJ1aW50MzJfdCIpOworfQorCit0
ZW1wbGF0ZTw+CitKU0M6OkpTVmFsdWUganNWYWx1ZUZvckRlY29kZWRBcmd1bWVudFZhbHVlKEpT
Qzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdWludDY0X3QgdmFsdWUpCit7CisgICAg
cmV0dXJuIGpzVmFsdWVGb3JEZWNvZGVkTnVtZXJpY0FyZ3VtZW50VmFsdWUoZ2xvYmFsT2JqZWN0
LCB2YWx1ZSwgInVpbnQ2NF90Iik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFU+CitKU0M6OkpT
VmFsdWUganNWYWx1ZUZvckRlY29kZWRBcmd1bWVudFZhbHVlKEpTQzo6SlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgY29uc3QgT2JqZWN0SWRlbnRpZmllcjxVPiYgdmFsdWUpCit7CisgICAg
cmV0dXJuIGpzVmFsdWVGb3JEZWNvZGVkQXJndW1lbnRWYWx1ZShnbG9iYWxPYmplY3QsIHZhbHVl
LnRvVUludDY0KCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBSZWN0VHlwZT4KK0pTQzo6SlNW
YWx1ZSBqc1ZhbHVlRm9yRGVjb2RlZEFyZ3VtZW50UmVjdChKU0M6OkpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIGNvbnN0IFJlY3RUeXBlJiB2YWx1ZSwgY29uc3QgU3RyaW5nJiB0eXBlKQor
eworICAgIGF1dG8mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvKiBvYmplY3QgPSBKU0M6OmNvbnN0cnVj
dEVtcHR5T2JqZWN0KGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUo
KSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNDOjpKU1ZhbHVlKCkpOworICAg
IG9iamVjdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ0
eXBlIl9zKSwgSlNDOjpqc05vbnRyaXZpYWxTdHJpbmcodm0sIHR5cGUpKTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBKU0M6OkpTVmFsdWUoKSk7CisgICAgb2JqZWN0LT5wdXREaXJl
Y3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIngiX3MpLCBKU0M6OkpTVmFs
dWUodmFsdWUueCgpKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNDOjpKU1Zh
bHVlKCkpOworICAgIG9iamVjdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sICJ5Il9zKSwgSlNDOjpKU1ZhbHVlKHZhbHVlLnkoKSkpOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIEpTQzo6SlNWYWx1ZSgpKTsKKyAgICBvYmplY3QtPnB1dERpcmVj
dCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAid2lkdGgiX3MpLCBKU0M6OkpT
VmFsdWUodmFsdWUud2lkdGgoKSkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpT
Qzo6SlNWYWx1ZSgpKTsKKyAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCAiaGVpZ2h0Il9zKSwgSlNDOjpKU1ZhbHVlKHZhbHVlLmhlaWdodCgp
KSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNDOjpKU1ZhbHVlKCkpOworICAg
IHJldHVybiBvYmplY3Q7Cit9CisKK3RlbXBsYXRlPD4KK0pTQzo6SlNWYWx1ZSBqc1ZhbHVlRm9y
RGVjb2RlZEFyZ3VtZW50VmFsdWUoSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JiB2YWx1ZSkKK3sKKyAgICByZXR1cm4ganNWYWx1ZUZvckRl
Y29kZWRBcmd1bWVudFJlY3QoZ2xvYmFsT2JqZWN0LCB2YWx1ZSwgIkludFJlY3QiKTsKK30KKwor
dGVtcGxhdGU8PgorSlNDOjpKU1ZhbHVlIGpzVmFsdWVGb3JEZWNvZGVkQXJndW1lbnRWYWx1ZShK
U0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVj
dCYgdmFsdWUpCit7CisgICAgcmV0dXJuIGpzVmFsdWVGb3JEZWNvZGVkQXJndW1lbnRSZWN0KGds
b2JhbE9iamVjdCwgdmFsdWUsICJGbG9hdFJlY3QiKTsKK30KKwordGVtcGxhdGU8c2l6ZV90IHJl
bWFpbmluZ1NpemUsIHR5cGVuYW1lLi4uIEVsZW1lbnRzPgorc3RydWN0IERlY29kZWRBcmd1bWVu
dEpTVmFsdWVDb252ZXJ0ZXIgeworICAgIHN0YXRpYyBib29sIGNvbnZlcnQoSlNDOjpKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTQXJyYXkqIGFycmF5LCBjb25zdCBzdGQ6OnR1
cGxlPEVsZW1lbnRzLi4uPiYgdHVwbGUpCisgICAgeworICAgICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRShnbG9iYWxPYmplY3QtPnZtKCkpOworCisgICAgICAgIGF1dG8ganNW
YWx1ZSA9IGpzVmFsdWVGb3JEZWNvZGVkQXJndW1lbnRWYWx1ZShnbG9iYWxPYmplY3QsIHN0ZDo6
Z2V0PHNpemVvZi4uLihFbGVtZW50cykgLSByZW1haW5pbmdTaXplPih0dXBsZSkpOworICAgICAg
ICBpZiAoanNWYWx1ZS5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAgICAgdW5zaWduZWQgaW5kZXggPSBzaXplb2YuLi4oRWxlbWVudHMpIC0gcmVtYWluaW5nU2l6
ZTsKKyAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGdsb2JhbE9iamVjdCwgaW5kZXgsIGpz
VmFsdWUpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CisKKyAg
ICAgICAgcmV0dXJuIERlY29kZWRBcmd1bWVudEpTVmFsdWVDb252ZXJ0ZXI8cmVtYWluaW5nU2l6
ZSAtIDEsIEVsZW1lbnRzLi4uPjo6Y29udmVydChnbG9iYWxPYmplY3QsIGFycmF5LCB0dXBsZSk7
CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUuLi4gRWxlbWVudHM+CitzdHJ1Y3QgRGVj
b2RlZEFyZ3VtZW50SlNWYWx1ZUNvbnZlcnRlcjwwLCBFbGVtZW50cy4uLj4geworICAgIHN0YXRp
YyBib29sIGNvbnZlcnQoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6SlNBcnJheSosIGNvbnN0
IHN0ZDo6dHVwbGU8RWxlbWVudHMuLi4+JikKKyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lLi4uIEVsZW1lbnRzPgorc3RhdGljIEpTQzo6
SlNWYWx1ZSBqc1ZhbHVlRm9yQXJndW1lbnRUdXBsZShKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIGNvbnN0IHN0ZDo6dHVwbGU8RWxlbWVudHMuLi4+JiB0dXBsZSkKK3sKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShnbG9iYWxPYmplY3QtPnZtKCkpOworICAg
IGF1dG8qIGFycmF5ID0gSlNDOjpjb25zdHJ1Y3RFbXB0eUFycmF5KGdsb2JhbE9iamVjdCwgbnVs
bHB0cik7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNDOjpKU1ZhbHVlKCkpOwor
ICAgIGlmICghRGVjb2RlZEFyZ3VtZW50SlNWYWx1ZUNvbnZlcnRlcjxzaXplb2YuLi4oRWxlbWVu
dHMpLCBFbGVtZW50cy4uLj46OmNvbnZlcnQoZ2xvYmFsT2JqZWN0LCBhcnJheSwgdHVwbGUpKQor
ICAgICAgICByZXR1cm4gSlNDOjpKU1ZhbHVlKCk7CisgICAgcmV0dXJuIEpTQzo6SlNWYWx1ZShh
cnJheSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdGF0aWMgT3B0aW9uYWw8SlNDOjpK
U1ZhbHVlPiBqc1ZhbHVlRm9yRGVjb2RlZEFyZ3VtZW50cyhKU0M6OkpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIElQQzo6RGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBPcHRpb25hbDx0eXBl
bmFtZSBJUEM6OkNvZGluZ1R5cGU8VD46OlR5cGU+IGFyZ3VtZW50czsKKyAgICBkZWNvZGVyID4+
IGFyZ3VtZW50czsKKyAgICBpZiAoIWFyZ3VtZW50cykKKyAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKyAgICByZXR1cm4ganNWYWx1ZUZvckFyZ3VtZW50VHVwbGUoZ2xvYmFsT2JqZWN0LCAq
YXJndW1lbnRzKTsKK30KSW5kZXg6IFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL01lc3NhZ2VB
cmd1bWVudERlc2NyaXB0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvUGxhdGZv
cm0vSVBDL01lc3NhZ2VBcmd1bWVudERlc2NyaXB0aW9ucy5oCShub25leGlzdGVudCkKKysrIFNv
dXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL01lc3NhZ2VBcmd1bWVudERlc2NyaXB0aW9ucy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgIk1lc3NhZ2VOYW1lcy5oIgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgor
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTR2xv
YmFsT2JqZWN0OworY2xhc3MgSlNWYWx1ZTsKKworfQorCituYW1lc3BhY2UgSVBDIHsKKworY2xh
c3MgRGVjb2RlcjsKKworT3B0aW9uYWw8SlNDOjpKU1ZhbHVlPiBqc1ZhbHVlRm9yQXJndW1lbnRz
KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBNZXNzYWdlTmFtZSwgRGVjb2RlciYpOworT3B0aW9uYWw8
SlNDOjpKU1ZhbHVlPiBqc1ZhbHVlRm9yUmVwbHlBcmd1bWVudHMoSlNDOjpKU0dsb2JhbE9iamVj
dCosIE1lc3NhZ2VOYW1lLCBEZWNvZGVyJik7CisKK3N0cnVjdCBBcmd1bWVudERlc2NyaXB0aW9u
IHsKKyAgICBjb25zdCBjaGFyKiBuYW1lOworICAgIGNvbnN0IGNoYXIqIHR5cGU7CisgICAgY29u
c3QgY2hhciogZW51bU5hbWU7CisgICAgYm9vbCBpc09wdGlvbmFsOworfTsKKworT3B0aW9uYWw8
VmVjdG9yPEFyZ3VtZW50RGVzY3JpcHRpb24+PiBtZXNzYWdlQXJndW1lbnREZXNjcmlwdGlvbnMo
TWVzc2FnZU5hbWUpOworT3B0aW9uYWw8VmVjdG9yPEFyZ3VtZW50RGVzY3JpcHRpb24+PiBtZXNz
YWdlUmVwbHlBcmd1bWVudERlc2NyaXB0aW9ucyhNZXNzYWdlTmFtZSk7CisKK30KSW5kZXg6IFNv
dXJjZS9XZWJLaXQvU2NyaXB0cy9nZW5lcmF0ZS1tZXNzYWdlLXJlY2VpdmVyLnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2NyaXB0cy9nZW5lcmF0ZS1tZXNzYWdlLXJlY2VpdmVyLnB5
CShyZXZpc2lvbiAyNjgyNDYpCisrKyBTb3VyY2UvV2ViS2l0L1NjcmlwdHMvZ2VuZXJhdGUtbWVz
c2FnZS1yZWNlaXZlci5weQkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQCBkZWYgbWFp
bihhcmd2KToKIAogICAgIGZpcnN0X2FyZyA9IFRydWUKICAgICBzZWNvbmRfYXJnID0gRmFsc2UK
KyAgICByZWNlaXZlcl9oZWFkZXJfZmlsZXMgPSBbXQogICAgIGZvciBwYXJhbWV0ZXIgaW4gYXJn
djoKICAgICAgICAgaWYgZmlyc3RfYXJnOgogICAgICAgICAgICAgZmlyc3RfYXJnID0gRmFsc2UK
QEAgLTUzLDcgKzU0LDkgQEAgZGVmIG1haW4oYXJndik6CiAgICAgICAgIHdpdGggb3BlbignJXNN
ZXNzYWdlUmVjZWl2ZXIuY3BwJyAlIHJlY2VpdmVyX25hbWUsICJ3KyIpIGFzIGltcGxlbWVudGF0
aW9uX291dHB1dDoKICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uX291dHB1dC53cml0ZSh3ZWJr
aXQubWVzc2FnZXMuZ2VuZXJhdGVfbWVzc2FnZV9oYW5kbGVyKHJlY2VpdmVyKSkKIAotICAgICAg
ICB3aXRoIG9wZW4oJyVzTWVzc2FnZXMuaCcgJSByZWNlaXZlcl9uYW1lLCAidysiKSBhcyBoZWFk
ZXJfb3V0cHV0OgorICAgICAgICByZWNlaXZlcl9tZXNzYWdlX2hlYWRlciA9ICclc01lc3NhZ2Vz
LmgnICUgcmVjZWl2ZXJfbmFtZQorICAgICAgICByZWNlaXZlcl9oZWFkZXJfZmlsZXMuYXBwZW5k
KHJlY2VpdmVyX21lc3NhZ2VfaGVhZGVyKQorICAgICAgICB3aXRoIG9wZW4ocmVjZWl2ZXJfbWVz
c2FnZV9oZWFkZXIsICJ3KyIpIGFzIGhlYWRlcl9vdXRwdXQ6CiAgICAgICAgICAgICBoZWFkZXJf
b3V0cHV0LndyaXRlKHdlYmtpdC5tZXNzYWdlcy5nZW5lcmF0ZV9tZXNzYWdlc19oZWFkZXIocmVj
ZWl2ZXIpKQogCiAgICAgICAgIHdpdGggb3BlbignJXNNZXNzYWdlc1JlcGxpZXMuaCcgJSByZWNl
aXZlcl9uYW1lLCAidysiKSBhcyByZXBseV9oZWFkZXJfb3V0cHV0OgpAQCAtNjUsNiArNjgsOSBA
QCBkZWYgbWFpbihhcmd2KToKICAgICB3aXRoIG9wZW4oJ01lc3NhZ2VOYW1lcy5jcHAnLCAidysi
KSBhcyBtZXNzYWdlX25hbWVzX2ltcGxlbWVudGF0aW9uX291dHB1dDoKICAgICAgICAgbWVzc2Fn
ZV9uYW1lc19pbXBsZW1lbnRhdGlvbl9vdXRwdXQud3JpdGUod2Via2l0Lm1lc3NhZ2VzLmdlbmVy
YXRlX21lc3NhZ2VfbmFtZXNfaW1wbGVtZW50YXRpb24ocmVjZWl2ZXJzKSkKIAorICAgIHdpdGgg
b3BlbignTWVzc2FnZUFyZ3VtZW50RGVzY3JpcHRpb25zLmNwcCcsICJ3KyIpIGFzIG1lc3NhZ2Vf
ZGVzY3JpcHRpb25zX2ltcGxlbWVudGF0aW9uX291dHB1dDoKKyAgICAgICAgbWVzc2FnZV9kZXNj
cmlwdGlvbnNfaW1wbGVtZW50YXRpb25fb3V0cHV0LndyaXRlKHdlYmtpdC5tZXNzYWdlcy5nZW5l
cmF0ZV9tZXNzYWdlX2FyZ3VtZW50X2Rlc2NyaXB0aW9uX2ltcGxlbWVudGF0aW9uKHJlY2VpdmVy
cywgcmVjZWl2ZXJfaGVhZGVyX2ZpbGVzKSkKKwogICAgIHJldHVybiAwCiAKIGlmIF9fbmFtZV9f
ID09ICdfX21haW5fXyc6CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3Nh
Z2VzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2Fn
ZXMucHkJKHJldmlzaW9uIDI2ODI0NikKKysrIFNvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQv
bWVzc2FnZXMucHkJKHdvcmtpbmcgY29weSkKQEAgLTYyMyw3ICs2MjMsNiBAQCBkZWYgaGVhZGVy
c19mb3JfdHlwZSh0eXBlKToKICAgICAgICAgJ1dlYkNvcmU6OlBhc3RlYm9hcmRVUkwnOiBbJzxX
ZWJDb3JlL1Bhc3RlYm9hcmQuaD4nXSwKICAgICAgICAgJ1dlYkNvcmU6OlBhc3RlYm9hcmRXZWJD
b250ZW50JzogWyc8V2ViQ29yZS9QYXN0ZWJvYXJkLmg+J10sCiAgICAgICAgICdXZWJDb3JlOjpQ
YXltZW50QXV0aG9yaXphdGlvblJlc3VsdCc6IFsnPFdlYkNvcmUvQXBwbGVQYXlTZXNzaW9uUGF5
bWVudFJlcXVlc3QuaD4nXSwKLSAgICAgICAgJ1dlYkNvcmU6OlBheW1lbnRNZXRob2RVcGRhdGUn
OiBbJzxXZWJDb3JlL0FwcGxlUGF5U2Vzc2lvblBheW1lbnRSZXF1ZXN0Lmg+J10sCiAgICAgICAg
ICdXZWJDb3JlOjpQbGF0Zm9ybVRleHRUcmFja0RhdGEnOiBbJzxXZWJDb3JlL1BsYXRmb3JtVGV4
dFRyYWNrLmg+J10sCiAgICAgICAgICdXZWJDb3JlOjpQbHVnaW5JbmZvJzogWyc8V2ViQ29yZS9Q
bHVnaW5EYXRhLmg+J10sCiAgICAgICAgICdXZWJDb3JlOjpQbHVnaW5Mb2FkQ2xpZW50UG9saWN5
JzogWyc8V2ViQ29yZS9QbHVnaW5EYXRhLmg+J10sCkBAIC02ODcsNyArNjg2LDcgQEAgZGVmIGhl
YWRlcnNfZm9yX3R5cGUodHlwZSk6CiAgICAgICAgICdzdHJ1Y3QgV2ViS2l0OjpXZWJVc2VyU2Ny
aXB0RGF0YSc6IFsnIldlYlVzZXJDb250ZW50Q29udHJvbGxlckRhdGFUeXBlcy5oIiddLAogICAg
ICAgICAnc3RydWN0IFdlYktpdDo6V2ViVXNlclN0eWxlU2hlZXREYXRhJzogWyciV2ViVXNlckNv
bnRlbnRDb250cm9sbGVyRGF0YVR5cGVzLmgiJ10sCiAgICAgICAgICdzdHJ1Y3QgV2ViS2l0OjpX
ZWJTY3JpcHRNZXNzYWdlSGFuZGxlckRhdGEnOiBbJyJXZWJVc2VyQ29udGVudENvbnRyb2xsZXJE
YXRhVHlwZXMuaCInXSwKLSAgICAgICAgJ3dlYnJ0Yzo6V2ViS2l0RW5jb2RlZEZyYW1lSW5mbyc6
IFsnPHdlYnJ0Yy9zZGsvV2ViS2l0L1dlYktpdEVuY29kZXIuaD4nXSwKKyAgICAgICAgJ3dlYnJ0
Yzo6V2ViS2l0RW5jb2RlZEZyYW1lSW5mbyc6IFsnPHdlYnJ0Yy9zZGsvV2ViS2l0L1dlYktpdEVu
Y29kZXIuaD4nLCAnPFdlYkNvcmUvTGliV2ViUlRDRW51bVRyYWl0cy5oPiddLAogICAgICAgICAn
d2VicnRjOjpXZWJLaXRSVFBGcmFnbWVudGF0aW9uSGVhZGVyJzogWyc8d2VicnRjL3Nkay9XZWJL
aXQvV2ViS2l0RW5jb2Rlci5oPiddLAogICAgIH0KIApAQCAtNzE0LDEzICs3MTMsNyBAQCBkZWYg
aGVhZGVyc19mb3JfdHlwZSh0eXBlKToKICAgICByZXR1cm4gaGVhZGVycwogCiAKLWRlZiBnZW5l
cmF0ZV9tZXNzYWdlX2hhbmRsZXIocmVjZWl2ZXIpOgotICAgIGhlYWRlcl9jb25kaXRpb25zID0g
ewotICAgICAgICAnIiVzIicgJSBtZXNzYWdlc19oZWFkZXJfZmlsZW5hbWUocmVjZWl2ZXIpOiBb
Tm9uZV0sCi0gICAgICAgICciSGFuZGxlTWVzc2FnZS5oIic6IFtOb25lXSwKLSAgICAgICAgJyJE
ZWNvZGVyLmgiJzogW05vbmVdLAotICAgIH0KLQorZGVmIGNvbGxlY3RfaGVhZGVyX2NvbmRpdGlv
bnNfZm9yX3JlY2VpdmVyKHJlY2VpdmVyLCBoZWFkZXJfY29uZGl0aW9ucyk6CiAgICAgdHlwZV9j
b25kaXRpb25zID0ge30KICAgICBmb3IgcGFyYW1ldGVyIGluIHJlY2VpdmVyLml0ZXJwYXJhbWV0
ZXJzKCk6CiAgICAgICAgIGlmIG5vdCBwYXJhbWV0ZXIudHlwZSBpbiB0eXBlX2NvbmRpdGlvbnM6
CkBAIC03NjMsNiArNzU2LDMwIEBAIGRlZiBnZW5lcmF0ZV9tZXNzYWdlX2hhbmRsZXIocmVjZWl2
ZXIpOgogICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyX2NvbmRpdGlvbnNbaGVhZGVyXSA9
IFtdCiAgICAgICAgICAgICAgICAgICAgIGhlYWRlcl9jb25kaXRpb25zW2hlYWRlcl0uYXBwZW5k
KG1lc3NhZ2UuY29uZGl0aW9uKQogCisgICAgcmV0dXJuIGhlYWRlcl9jb25kaXRpb25zCisKKwor
ZGVmIGdlbmVyYXRlX2hlYWRlcl9pbmNsdWRlc19mcm9tX2NvbmRpdGlvbnMoaGVhZGVyX2NvbmRp
dGlvbnMpOgorICAgIHJlc3VsdCA9IFtdCisgICAgZm9yIGhlYWRlciBpbiBzb3J0ZWQoaGVhZGVy
X2NvbmRpdGlvbnMpOgorICAgICAgICBpZiBoZWFkZXJfY29uZGl0aW9uc1toZWFkZXJdIGFuZCBu
b3QgTm9uZSBpbiBoZWFkZXJfY29uZGl0aW9uc1toZWFkZXJdOgorICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZCgnI2lmICVzXG4nICUgJyB8fCAnLmpvaW4oc29ydGVkKHNldChoZWFkZXJfY29uZGl0
aW9uc1toZWFkZXJdKSkpKQorICAgICAgICAgICAgcmVzdWx0ICs9IFsnI2luY2x1ZGUgJXNcbicg
JSBoZWFkZXJdCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcjZW5kaWZcbicpCisgICAgICAg
IGVsc2U6CisgICAgICAgICAgICByZXN1bHQgKz0gWycjaW5jbHVkZSAlc1xuJyAlIGhlYWRlcl0K
KyAgICByZXR1cm4gcmVzdWx0CisKKworZGVmIGdlbmVyYXRlX21lc3NhZ2VfaGFuZGxlcihyZWNl
aXZlcik6CisgICAgaGVhZGVyX2NvbmRpdGlvbnMgPSB7CisgICAgICAgICciJXMiJyAlIG1lc3Nh
Z2VzX2hlYWRlcl9maWxlbmFtZShyZWNlaXZlcik6IFtOb25lXSwKKyAgICAgICAgJyJIYW5kbGVN
ZXNzYWdlLmgiJzogW05vbmVdLAorICAgICAgICAnIkRlY29kZXIuaCInOiBbTm9uZV0sCisgICAg
fQorCisgICAgY29sbGVjdF9oZWFkZXJfY29uZGl0aW9uc19mb3JfcmVjZWl2ZXIocmVjZWl2ZXIs
IGhlYWRlcl9jb25kaXRpb25zKQorCiAgICAgcmVzdWx0ID0gW10KIAogICAgIHJlc3VsdC5hcHBl
bmQoX2xpY2Vuc2VfaGVhZGVyKQpAQCAtNzczLDEzICs3OTAsNyBAQCBkZWYgZ2VuZXJhdGVfbWVz
c2FnZV9oYW5kbGVyKHJlY2VpdmVyKToKICAgICAgICAgcmVzdWx0LmFwcGVuZCgnI2lmICVzXG5c
bicgJSByZWNlaXZlci5jb25kaXRpb24pCiAKICAgICByZXN1bHQuYXBwZW5kKCcjaW5jbHVkZSAi
JXMuaCJcblxuJyAlIHJlY2VpdmVyLm5hbWUpCi0gICAgZm9yIGhlYWRlciBpbiBzb3J0ZWQoaGVh
ZGVyX2NvbmRpdGlvbnMpOgotICAgICAgICBpZiBoZWFkZXJfY29uZGl0aW9uc1toZWFkZXJdIGFu
ZCBub3QgTm9uZSBpbiBoZWFkZXJfY29uZGl0aW9uc1toZWFkZXJdOgotICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZCgnI2lmICVzXG4nICUgJyB8fCAnLmpvaW4oc29ydGVkKHNldChoZWFkZXJfY29u
ZGl0aW9uc1toZWFkZXJdKSkpKQotICAgICAgICAgICAgcmVzdWx0ICs9IFsnI2luY2x1ZGUgJXNc
bicgJSBoZWFkZXJdCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcjZW5kaWZcbicpCi0gICAg
ICAgIGVsc2U6Ci0gICAgICAgICAgICByZXN1bHQgKz0gWycjaW5jbHVkZSAlc1xuJyAlIGhlYWRl
cl0KKyAgICByZXN1bHQgKz0gZ2VuZXJhdGVfaGVhZGVyX2luY2x1ZGVzX2Zyb21fY29uZGl0aW9u
cyhoZWFkZXJfY29uZGl0aW9ucykKICAgICByZXN1bHQuYXBwZW5kKCdcbicpCiAKICAgICBkZWxh
eWVkX29yX2FzeW5jX21lc3NhZ2VzID0gW10KQEAgLTEwNDQsMyArMTA1NSwxMzAgQEAgZGVmIGdl
bmVyYXRlX21lc3NhZ2VfbmFtZXNfaW1wbGVtZW50YXRpbwogICAgIHJlc3VsdC5hcHBlbmQoJ1xu
JykKICAgICByZXN1bHQuYXBwZW5kKCd9IC8vIG5hbWVzcGFjZSBJUENcbicpCiAgICAgcmV0dXJu
ICcnLmpvaW4ocmVzdWx0KQorCisKK2RlZiBnZW5lcmF0ZV9qc192YWx1ZV9jb252ZXJzaW9uX2Z1
bmN0aW9uKHJlc3VsdCwgcmVjZWl2ZXJzLCBmdW5jdGlvbl9uYW1lLCBhcmd1bWVudF90eXBlLCBw
cmVkaWNhdGU9bGFtYmRhIG1lc3NhZ2U6IFRydWUpOgorICAgIHJlc3VsdC5hcHBlbmQoJ09wdGlv
bmFsPEpTQzo6SlNWYWx1ZT4gJXMoSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBN
ZXNzYWdlTmFtZSBuYW1lLCBEZWNvZGVyJiBkZWNvZGVyKVxuJyAlIGZ1bmN0aW9uX25hbWUpCisg
ICAgcmVzdWx0LmFwcGVuZCgne1xuJykKKyAgICByZXN1bHQuYXBwZW5kKCcgICAgc3dpdGNoIChu
YW1lKSB7XG4nKQorICAgIGZvciByZWNlaXZlciBpbiByZWNlaXZlcnM6CisgICAgICAgIGlmIHJl
Y2VpdmVyLmNvbmRpdGlvbjoKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyNpZiAlc1xuJyAl
IHJlY2VpdmVyLmNvbmRpdGlvbikKKyAgICAgICAgcHJldmlzaW9uX21lc3NhZ2VfY29uZGl0aW9u
ID0gTm9uZQorICAgICAgICBmb3IgbWVzc2FnZSBpbiByZWNlaXZlci5tZXNzYWdlczoKKyAgICAg
ICAgICAgIGlmIG5vdCBwcmVkaWNhdGUobWVzc2FnZSk6CisgICAgICAgICAgICAgICAgY29udGlu
dWUKKyAgICAgICAgICAgIGlmIHByZXZpc2lvbl9tZXNzYWdlX2NvbmRpdGlvbiAhPSBtZXNzYWdl
LmNvbmRpdGlvbjoKKyAgICAgICAgICAgICAgICBpZiBwcmV2aXNpb25fbWVzc2FnZV9jb25kaXRp
b246CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyNlbmRpZlxuJykKKyAgICAg
ICAgICAgICAgICBpZiBtZXNzYWdlLmNvbmRpdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZCgnI2lmICVzXG4nICUgbWVzc2FnZS5jb25kaXRpb24pCisgICAgICAgICAgICBw
cmV2aXNpb25fbWVzc2FnZV9jb25kaXRpb24gPSBtZXNzYWdlLmNvbmRpdGlvbgorICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZCgnICAgIGNhc2UgTWVzc2FnZU5hbWU6OiVzXyVzOlxuJyAlIChyZWNl
aXZlci5uYW1lLCBtZXNzYWdlLm5hbWUpKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAg
ICAgICByZXR1cm4ganNWYWx1ZUZvckRlY29kZWRBcmd1bWVudHM8TWVzc2FnZXM6OiVzOjolczo6
JXM+KGdsb2JhbE9iamVjdCwgZGVjb2Rlcik7XG4nICUgKHJlY2VpdmVyLm5hbWUsIG1lc3NhZ2Uu
bmFtZSwgYXJndW1lbnRfdHlwZSkpCisgICAgICAgIGlmIHByZXZpc2lvbl9tZXNzYWdlX2NvbmRp
dGlvbjoKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyNlbmRpZlxuJykKKyAgICAgICAgaWYg
cmVjZWl2ZXIuY29uZGl0aW9uOgorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnI2VuZGlmXG4n
KQorICAgIHJlc3VsdC5hcHBlbmQoJyAgICBkZWZhdWx0OlxuJykKKyAgICByZXN1bHQuYXBwZW5k
KCcgICAgICAgIGJyZWFrO1xuJykKKyAgICByZXN1bHQuYXBwZW5kKCcgICAgfVxuJykKKyAgICBy
ZXN1bHQuYXBwZW5kKCcgICAgcmV0dXJuIFdURjo6bnVsbG9wdDtcbicpCisgICAgcmVzdWx0LmFw
cGVuZCgnfVxuJykKKworCitkZWYgZ2VuZXJhdGVfanNfYXJndW1lbnRfZGVzY3JpcHRpb25zKHJl
Y2VpdmVycywgZnVuY3Rpb25fbmFtZSwgYXJndW1lbnRzX2Zyb21fbWVzc2FnZSk6CisgICAgcmVz
dWx0ID0gW10KKyAgICByZXN1bHQuYXBwZW5kKCdPcHRpb25hbDxWZWN0b3I8QXJndW1lbnREZXNj
cmlwdGlvbj4+ICVzKE1lc3NhZ2VOYW1lIG5hbWUpXG4nICUgZnVuY3Rpb25fbmFtZSkKKyAgICBy
ZXN1bHQuYXBwZW5kKCd7XG4nKQorICAgIHJlc3VsdC5hcHBlbmQoJyAgICBzd2l0Y2ggKG5hbWUp
IHtcbicpCisgICAgZm9yIHJlY2VpdmVyIGluIHJlY2VpdmVyczoKKyAgICAgICAgaWYgcmVjZWl2
ZXIuY29uZGl0aW9uOgorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnI2lmICVzXG4nICUgcmVj
ZWl2ZXIuY29uZGl0aW9uKQorICAgICAgICBwcmV2aXNpb25fbWVzc2FnZV9jb25kaXRpb24gPSBO
b25lCisgICAgICAgIGZvciBtZXNzYWdlIGluIHJlY2VpdmVyLm1lc3NhZ2VzOgorICAgICAgICAg
ICAgYXJndW1lbnRfbGlzdCA9IGFyZ3VtZW50c19mcm9tX21lc3NhZ2UobWVzc2FnZSkKKyAgICAg
ICAgICAgIGlmIGFyZ3VtZW50X2xpc3QgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBjb250aW51
ZQorICAgICAgICAgICAgaWYgcHJldmlzaW9uX21lc3NhZ2VfY29uZGl0aW9uICE9IG1lc3NhZ2Uu
Y29uZGl0aW9uOgorICAgICAgICAgICAgICAgIGlmIHByZXZpc2lvbl9tZXNzYWdlX2NvbmRpdGlv
bjoKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnI2VuZGlmXG4nKQorICAgICAg
ICAgICAgICAgIGlmIG1lc3NhZ2UuY29uZGl0aW9uOgorICAgICAgICAgICAgICAgICAgICByZXN1
bHQuYXBwZW5kKCcjaWYgJXNcbicgJSBtZXNzYWdlLmNvbmRpdGlvbikKKyAgICAgICAgICAgIHBy
ZXZpc2lvbl9tZXNzYWdlX2NvbmRpdGlvbiA9IG1lc3NhZ2UuY29uZGl0aW9uCisgICAgICAgICAg
ICByZXN1bHQuYXBwZW5kKCcgICAgY2FzZSBNZXNzYWdlTmFtZTo6JXNfJXM6XG4nICUgKHJlY2Vp
dmVyLm5hbWUsIG1lc3NhZ2UubmFtZSkpCisKKyAgICAgICAgICAgIGlmIG5vdCBsZW4oYXJndW1l
bnRfbGlzdCk6CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgICAgICByZXR1cm4g
VmVjdG9yPEFyZ3VtZW50RGVzY3JpcHRpb24+IHsgfTtcbicpCisgICAgICAgICAgICAgICAgY29u
dGludWUKKworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgICAgICByZXR1cm4gVmVjdG9y
PEFyZ3VtZW50RGVzY3JpcHRpb24+IHtcbicpCisgICAgICAgICAgICBmb3IgYXJndW1lbnQgaW4g
YXJndW1lbnRfbGlzdDoKKyAgICAgICAgICAgICAgICBhcmd1bWVudF90eXBlID0gYXJndW1lbnQu
dHlwZQorICAgICAgICAgICAgICAgIGVudW1fdHlwZSA9IE5vbmUKKyAgICAgICAgICAgICAgICBp
c19vcHRpb25hbCA9IEZhbHNlCisgICAgICAgICAgICAgICAgaWYgYXJndW1lbnQua2luZC5zdGFy
dHN3aXRoKCdlbnVtOicpOgorICAgICAgICAgICAgICAgICAgICBlbnVtX3R5cGUgPSAnIiVzIicg
JSBhcmd1bWVudF90eXBlCisgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50X3R5cGUgPSBhcmd1
bWVudC5raW5kWzU6XQorICAgICAgICAgICAgICAgIGlmIGFyZ3VtZW50X3R5cGUuc3RhcnRzd2l0
aCgnT3B0aW9uYWw8JykgYW5kIGFyZ3VtZW50X3R5cGUuZW5kc3dpdGgoJz4nKToKKyAgICAgICAg
ICAgICAgICAgICAgYXJndW1lbnRfdHlwZSA9IGFyZ3VtZW50X3R5cGVbOTotMV0KKyAgICAgICAg
ICAgICAgICAgICAgaXNfb3B0aW9uYWwgPSBUcnVlCisgICAgICAgICAgICAgICAgcmVzdWx0LmFw
cGVuZCgnICAgICAgICAgICAgeyIlcyIsICIlcyIsICVzLCAlc30sXG4nICUgKGFyZ3VtZW50Lm5h
bWUsIGFyZ3VtZW50X3R5cGUsIGVudW1fdHlwZSBvciAnbnVsbHB0cicsICd0cnVlJyBpZiBpc19v
cHRpb25hbCBlbHNlICdmYWxzZScpKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgICAg
ICB9O1xuJykKKyAgICAgICAgaWYgcHJldmlzaW9uX21lc3NhZ2VfY29uZGl0aW9uOgorICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZCgnI2VuZGlmXG4nKQorICAgICAgICBpZiByZWNlaXZlci5jb25k
aXRpb246CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcjZW5kaWZcbicpCisgICAgcmVzdWx0
LmFwcGVuZCgnICAgIGRlZmF1bHQ6XG4nKQorICAgIHJlc3VsdC5hcHBlbmQoJyAgICAgICAgYnJl
YWs7XG4nKQorICAgIHJlc3VsdC5hcHBlbmQoJyAgICB9XG4nKQorICAgIHJlc3VsdC5hcHBlbmQo
JyAgICByZXR1cm4gV1RGOjpudWxsb3B0O1xuJykKKyAgICByZXN1bHQuYXBwZW5kKCd9XG4nKQor
ICAgIHJldHVybiByZXN1bHQKKworCitkZWYgZ2VuZXJhdGVfbWVzc2FnZV9hcmd1bWVudF9kZXNj
cmlwdGlvbl9pbXBsZW1lbnRhdGlvbihyZWNlaXZlcnMsIHJlY2VpdmVyX2hlYWRlcnMpOgorICAg
IGhlYWRlcl9jb25kaXRpb25zID0geworICAgICAgICAnIkpTSVBDQmluZGluZy5oIic6IFtOb25l
XQorICAgIH0KKyAgICBmb3IgcmVjZWl2ZXIgaW4gcmVjZWl2ZXJzOgorICAgICAgICBoZWFkZXJf
Y29uZGl0aW9uc1snIiVzIicgJSBtZXNzYWdlc19oZWFkZXJfZmlsZW5hbWUocmVjZWl2ZXIpXSA9
IFtOb25lXQorICAgICAgICBjb2xsZWN0X2hlYWRlcl9jb25kaXRpb25zX2Zvcl9yZWNlaXZlcihy
ZWNlaXZlciwgaGVhZGVyX2NvbmRpdGlvbnMpCisKKyAgICByZXN1bHQgPSBbXQorICAgIHJlc3Vs
dC5hcHBlbmQoX2xpY2Vuc2VfaGVhZGVyKQorICAgIHJlc3VsdC5hcHBlbmQoJyNpbmNsdWRlICJj
b25maWcuaCJcbicpCisgICAgcmVzdWx0LmFwcGVuZCgnI2luY2x1ZGUgIk1lc3NhZ2VBcmd1bWVu
dERlc2NyaXB0aW9ucy5oIlxuJykKKyAgICByZXN1bHQuYXBwZW5kKCdcbicpCisgICAgcmVzdWx0
LmFwcGVuZCgnI2lmIEVOQUJMRShJUENfVEVTVElOR19BUEkpXG4nKQorICAgIHJlc3VsdC5hcHBl
bmQoJ1xuJykKKyAgICByZXN1bHQgKz0gZ2VuZXJhdGVfaGVhZGVyX2luY2x1ZGVzX2Zyb21fY29u
ZGl0aW9ucyhoZWFkZXJfY29uZGl0aW9ucykKKyAgICByZXN1bHQuYXBwZW5kKCdcbicpCisKKyAg
ICBmb3IgaGVhZGVyIGluIHJlY2VpdmVyX2hlYWRlcnM6CisgICAgICAgIHJlc3VsdC5hcHBlbmQo
JyNpbmNsdWRlICIlcyJcbicgJSAoaGVhZGVyKSkKKworICAgIHJlc3VsdC5hcHBlbmQoJ1xuJykK
KyAgICByZXN1bHQuYXBwZW5kKCduYW1lc3BhY2UgSVBDIHtcbicpCisgICAgcmVzdWx0LmFwcGVu
ZCgnXG4nKQorCisgICAgZ2VuZXJhdGVfanNfdmFsdWVfY29udmVyc2lvbl9mdW5jdGlvbihyZXN1
bHQsIHJlY2VpdmVycywgJ2pzVmFsdWVGb3JBcmd1bWVudHMnLCAnQXJndW1lbnRzJykKKworICAg
IHJlc3VsdC5hcHBlbmQoJ1xuJykKKworICAgIGdlbmVyYXRlX2pzX3ZhbHVlX2NvbnZlcnNpb25f
ZnVuY3Rpb24ocmVzdWx0LCByZWNlaXZlcnMsICdqc1ZhbHVlRm9yUmVwbHlBcmd1bWVudHMnLCAn
UmVwbHlBcmd1bWVudHMnLCBsYW1iZGEgbWVzc2FnZTogbWVzc2FnZS5yZXBseV9wYXJhbWV0ZXJz
IGlzIG5vdCBOb25lIGFuZCAobWVzc2FnZS5oYXNfYXR0cmlidXRlKFNZTkNIUk9OT1VTX0FUVFJJ
QlVURSkgb3IgbWVzc2FnZS5oYXNfYXR0cmlidXRlKEFTWU5DX0FUVFJJQlVURSkpKQorCisgICAg
cmVzdWx0LmFwcGVuZCgnXG4nKQorCisgICAgcmVzdWx0ICs9IGdlbmVyYXRlX2pzX2FyZ3VtZW50
X2Rlc2NyaXB0aW9ucyhyZWNlaXZlcnMsICdtZXNzYWdlQXJndW1lbnREZXNjcmlwdGlvbnMnLCBs
YW1iZGEgbWVzc2FnZTogbWVzc2FnZS5wYXJhbWV0ZXJzKQorCisgICAgcmVzdWx0LmFwcGVuZCgn
XG4nKQorCisgICAgcmVzdWx0ICs9IGdlbmVyYXRlX2pzX2FyZ3VtZW50X2Rlc2NyaXB0aW9ucyhy
ZWNlaXZlcnMsICdtZXNzYWdlUmVwbHlBcmd1bWVudERlc2NyaXB0aW9ucycsIGxhbWJkYSBtZXNz
YWdlOiBtZXNzYWdlLnJlcGx5X3BhcmFtZXRlcnMgaWYgbWVzc2FnZS5oYXNfYXR0cmlidXRlKFNZ
TkNIUk9OT1VTX0FUVFJJQlVURSkgb3IgbWVzc2FnZS5oYXNfYXR0cmlidXRlKEFTWU5DX0FUVFJJ
QlVURSkgZWxzZSBOb25lKQorCisgICAgcmVzdWx0LmFwcGVuZCgnXG4nKQorCisgICAgcmVzdWx0
LmFwcGVuZCgnfSAvLyBuYW1lc3BhY2UgV2ViS2l0XG4nKQorICAgIHJlc3VsdC5hcHBlbmQoJ1xu
JykKKyAgICByZXN1bHQuYXBwZW5kKCcjZW5kaWZcbicpCisgICAgcmV0dXJuICcnLmpvaW4ocmVz
dWx0KQpJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQvQXBwbGVQYXkvQXBwbGVQYXlQYXltZW50
U2V0dXBGZWF0dXJlc1dlYktpdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVk
L0FwcGxlUGF5L0FwcGxlUGF5UGF5bWVudFNldHVwRmVhdHVyZXNXZWJLaXQuaAkocmV2aXNpb24g
MjY4MjQ2KQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvQXBwbGVQYXkvQXBwbGVQYXlQYXltZW50
U2V0dXBGZWF0dXJlc1dlYktpdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAK
ICNpZiBFTkFCTEUoQVBQTEVfUEFZKQogCitPQkpDX0NMQVNTIE5TQXJyYXk7CiBPQkpDX0NMQVNT
IFBLUGF5bWVudFNldHVwRmVhdHVyZTsKIAogI2luY2x1ZGUgPFdlYkNvcmUvQXBwbGVQYXlTZXR1
cEZlYXR1cmVXZWJDb3JlLmg+CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI2ODI0NikKKysrIFNvdXJjZS9XZWJLaXQv
V2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE0MTcs
NiArMTQxNyw5IEBACiAJCTlCMTIyOUNEMjNGRjI1RjIwMDhDQTc1MSAvKiBSZW1vdGVBdWRpb0Rl
c3RpbmF0aW9uTWFuYWdlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOUIxMjI5Q0IyM0ZGMjVGMjAwOENBNzUxIC8qIFJlbW90ZUF1ZGlvRGVzdGluYXRp
b25NYW5hZ2VyLmggKi87IH07CiAJCTlCMTIyOUNFMjNGRjI1RjIwMDhDQTc1MSAvKiBSZW1vdGVB
dWRpb0Rlc3RpbmF0aW9uTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5QjEyMjlDQzIzRkYyNUYyMDA4Q0E3NTEgLyogUmVtb3RlQXVkaW9E
ZXN0aW5hdGlvbk1hbmFnZXIuY3BwICovOyB9OwogCQk5QjEyMjlEMjIzRkYyQkNDMDA4Q0E3NTEg
LyogUmVtb3RlQXVkaW9EZXN0aW5hdGlvbklkZW50aWZpZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCMTIyOUQwMjNGRjJBNUUwMDhDQTc1MSAvKiBS
ZW1vdGVBdWRpb0Rlc3RpbmF0aW9uSWRlbnRpZmllci5oICovOyB9OworCQk5QjQ3OTA4RDI1MzE0
RDgzMDBFQzExQUIgLyogTWVzc2FnZUFyZ3VtZW50RGVzY3JpcHRpb25zLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjQ3OTA4QzI1MzE0RDgzMDBFQzEx
QUIgLyogTWVzc2FnZUFyZ3VtZW50RGVzY3JpcHRpb25zLmggKi87IH07CisJCTlCNDc5MDhGMjUz
MTUxQ0MwMEVDMTFBQiAvKiBKU0lQQ0JpbmRpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCNDc5MDhFMjUzMTUxQ0MwMEVDMTFBQiAvKiBKU0lQQ0Jp
bmRpbmcuaCAqLzsgfTsKKwkJOUI0NzkwOTEyNTMxNTYzMjAwRUMxMUFCIC8qIE1lc3NhZ2VBcmd1
bWVudERlc2NyaXB0aW9ucy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5QjQ3OTA5MDI1MzE1NjMyMDBFQzExQUIgLyogTWVzc2FnZUFyZ3VtZW50RGVz
Y3JpcHRpb25zLmNwcCAqLzsgfTsKIAkJOUI1NDk5QUQyMzYyQTZGOTAwREY4QkE1IC8qIF9XS1Rl
eHRNYW5pcHVsYXRpb25Db25maWd1cmF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5QjU0OTlBQzIzNjJBNkY2MDBERjhCQTUgLyogX1dLVGV4dE1h
bmlwdWxhdGlvbkNvbmZpZ3VyYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk5QjU0OTlCMjIzNjJBN0VDMDBERjhCQTUgLyogX1dLVGV4dE1h
bmlwdWxhdGlvbkV4Y2x1c2lvblJ1bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDlCNTQ5OUIwMjM2MkE3RUMwMERGOEJBNSAvKiBfV0tUZXh0TWFuaXB1
bGF0aW9uRXhjbHVzaW9uUnVsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTlCNUJFQzI2MjQwMEY0QTkwMDcwQzZFRiAvKiBXZWJNZWRpYVN0cmF0
ZWd5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjVC
RUMyNDI0MDBGNEE5MDA3MEM2RUYgLyogV2ViTWVkaWFTdHJhdGVneS5oICovOyB9OwpAQCAtNDQ5
Myw2ICs0NDk2LDkgQEAKIAkJOUIxMjI5Q0MyM0ZGMjVGMjAwOENBNzUxIC8qIFJlbW90ZUF1ZGlv
RGVzdGluYXRpb25NYW5hZ2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW90ZUF1ZGlvRGVz
dGluYXRpb25NYW5hZ2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUIxMjI5
Q0YyM0ZGMjgxNDAwOENBNzUxIC8qIFJlbW90ZUF1ZGlvRGVzdGluYXRpb25NYW5hZ2VyLm1lc3Nh
Z2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dDsgcGF0aCA9IFJlbW90ZUF1ZGlvRGVzdGluYXRpb25NYW5hZ2VyLm1lc3NhZ2VzLmluOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QjEyMjlEMDIzRkYyQTVFMDA4Q0E3NTEgLyog
UmVtb3RlQXVkaW9EZXN0aW5hdGlvbklkZW50aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3Rl
QXVkaW9EZXN0aW5hdGlvbklkZW50aWZpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJOUI0NzkwOEMyNTMxNEQ4MzAwRUMxMUFCIC8qIE1lc3NhZ2VBcmd1bWVudERlc2NyaXB0aW9u
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBNZXNzYWdlQXJndW1lbnREZXNjcmlwdGlvbnMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOUI0NzkwOEUyNTMxNTFDQzAwRUMxMUFCIC8qIEpTSVBD
QmluZGluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0lQQ0JpbmRpbmcuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJOUI0NzkwOTAyNTMxNTYzMjAwRUMxMUFCIC8qIE1lc3NhZ2VBcmd1bWVu
dERlc2NyaXB0aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBN
ZXNzYWdlQXJndW1lbnREZXNjcmlwdGlvbnMuY3BwOyBwYXRoID0gTWVzc2FnZUFyZ3VtZW50RGVz
Y3JpcHRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUI1NDk5QUMyMzYy
QTZGNjAwREY4QkE1IC8qIF9XS1RleHRNYW5pcHVsYXRpb25Db25maWd1cmF0aW9uLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IF9XS1RleHRNYW5pcHVsYXRpb25Db25maWd1cmF0aW9uLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTlCNTQ5OUFFMjM2MkE3QTcwMERGOEJBNSAvKiBfV0tUZXh0TWFu
aXB1bGF0aW9uQ29uZmlndXJhdGlvbi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IF9XS1RleHRN
YW5pcHVsYXRpb25Db25maWd1cmF0aW9uLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5QjU0OTlCMDIzNjJBN0VDMDBERjhCQTUgLyogX1dLVGV4dE1hbmlwdWxhdGlvbkV4Y2x1c2lv
blJ1bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gX1dLVGV4dE1hbmlwdWxhdGlvbkV4Y2x1c2lvblJ1bGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTY0MTIsNiArNjQxOCw4IEBACiAJCQkJ
NDE1MUU1QzMxRkJCOTBBOTAwRTQ3RTJEIC8qIEZvcm1EYXRhUmVmZXJlbmNlLmggKi8sCiAJCQkJ
QzBDRTcyQUMxMjQ3RTc4RDAwQkMwRUM0IC8qIEhhbmRsZU1lc3NhZ2UuaCAqLywKIAkJCQkxQzlB
RjM2MTI0MTM0RDIzMDBEM0VDMDIgLyogSW1hZ2VEYXRhUmVmZXJlbmNlLmggKi8sCisJCQkJOUI0
NzkwOEUyNTMxNTFDQzAwRUMxMUFCIC8qIEpTSVBDQmluZGluZy5oICovLAorCQkJCTlCNDc5MDhD
MjUzMTREODMwMEVDMTFBQiAvKiBNZXNzYWdlQXJndW1lbnREZXNjcmlwdGlvbnMuaCAqLywKIAkJ
CQkxQUM0QzgyODE2Qjg3NkE5MDA2OURDQ0QgLyogTWVzc2FnZUZsYWdzLmggKi8sCiAJCQkJMUEz
RUVEMTExNjFBNTNENjAwQUVCNEY1IC8qIE1lc3NhZ2VSZWNlaXZlci5oICovLAogCQkJCTFBM0VF
RDBDMTYxQTUzNTMwMEFFQjRGNSAvKiBNZXNzYWdlUmVjZWl2ZXJNYXAuY3BwICovLApAQCAtMTAw
MTUsNiArMTAwMjMsNyBAQAogCQkJCTA3RTE5RUY4MjNENDAxRjAwMDk0RkZCNCAvKiBNZWRpYVBs
YXllclByaXZhdGVSZW1vdGVNZXNzYWdlUmVjZWl2ZXIuY3BwICovLAogCQkJCTA3RTE5RUY5MjNE
NDAxRjAwMDk0RkZCNCAvKiBNZWRpYVBsYXllclByaXZhdGVSZW1vdGVNZXNzYWdlcy5oICovLAog
CQkJCTA3RTE5RUZBMjNENDAxRjAwMDk0RkZCNCAvKiBNZWRpYVBsYXllclByaXZhdGVSZW1vdGVN
ZXNzYWdlc1JlcGxpZXMuaCAqLywKKwkJCQk5QjQ3OTA5MDI1MzE1NjMyMDBFQzExQUIgLyogTWVz
c2FnZUFyZ3VtZW50RGVzY3JpcHRpb25zLmNwcCAqLywKIAkJCQk1MUREOUYyNjE2MzY3REEyMDAx
NTc4RTkgLyogTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlUmVjZWl2ZXIuY3Bw
ICovLAogCQkJCTUxREQ5RjI3MTYzNjdEQTIwMDE1NzhFOSAvKiBOZXR3b3JrQ29ubmVjdGlvblRv
V2ViUHJvY2Vzc01lc3NhZ2VzLmggKi8sCiAJCQkJNTJGMDYwREQxNjU0MzE3NTAwRjMyODFCIC8q
IE5ldHdvcmtDb250ZW50UnVsZUxpc3RNYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCAqLywKQEAg
LTEwODY3LDYgKzEwODc2LDcgQEAKIAkJCQlBNUUzOTFGRDIxODNDMUY4MDBDOEZCMzEgLyogSW5z
cGVjdG9yVGFyZ2V0UHJveHkuaCBpbiBIZWFkZXJzICovLAogCQkJCUM1QkNFNURGMUM1MDc2NkEw
MENERTNGQSAvKiBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMkQ0RDJDODExREY2MEJGMzAwMkVCMTBDIC8qIEludGVyYWN0aW9uSW5mb3JtYXRp
b25SZXF1ZXN0LmggaW4gSGVhZGVycyAqLywKKwkJCQk5QjQ3OTA4RjI1MzE1MUNDMDBFQzExQUIg
LyogSlNJUENCaW5kaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUU0OUE0OTExRkZBOENFMDA0
OEI0NjQgLyogSlNOUE1ldGhvZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFFNDk4NzgxMUZGN0ZB
QTAwNDhCNDY0IC8qIEpTTlBPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUMxNjYzRTVCMjRB
RUFBMkYwMEM2QTNCMiAvKiBMYXVuY2hTZXJ2aWNlc0RhdGFiYXNlWFBDQ29uc3RhbnRzLmggaW4g
SGVhZGVycyAqLywKQEAgLTEwOTAzLDYgKzEwOTEzLDcgQEAKIAkJCQkwN0UxOUVGQzIzRDQwMUYx
MDA5NEZGQjQgLyogTWVkaWFQbGF5ZXJQcml2YXRlUmVtb3RlTWVzc2FnZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTA3RTE5RUZEMjNENDAxRjEwMDk0RkZCNCAvKiBNZWRpYVBsYXllclByaXZhdGVS
ZW1vdGVNZXNzYWdlc1JlcGxpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxOTMzREVGMTk2NUVC
MzEwMDhBQzNFQSAvKiBNZW51VXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKKwkJCQk5QjQ3OTA4
RDI1MzE0RDgzMDBFQzExQUIgLyogTWVzc2FnZUFyZ3VtZW50RGVzY3JpcHRpb25zLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxQUM0QzgyOTE2Qjg3NkE5MDA2OURDQ0QgLyogTWVzc2FnZUZsYWdzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxQTNFRUQxMjE2MUE1M0Q2MDBBRUI0RjUgLyogTWVzc2FnZVJl
Y2VpdmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTNFRUQwRjE2MUE1MzU0MDBBRUI0RjUgLyog
TWVzc2FnZVJlY2VpdmVyTWFwLmggaW4gSGVhZGVycyAqLywKQEAgLTEyNzQzLDYgKzEyNzU0LDcg
QEAKIAkJCQk0NDlEOTBEQTIxRkRDMzBCMDBGNjc3QzAgLyogTG9jYWxBdXRoZW50aWNhdGlvblNv
ZnRMaW5rLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMkQ5MkE3NzkyMTJCNkE2MTAwRjQ5M0ZEIC8q
IExvZ2dpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDdFMTlFRkIyM0Q0MDFGMTAwOTRGRkI0
IC8qIE1lZGlhUGxheWVyUHJpdmF0ZVJlbW90ZU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQk5QjQ3OTA5MTI1MzE1NjMyMDBFQzExQUIgLyogTWVzc2FnZUFyZ3VtZW50RGVz
Y3JpcHRpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJEOTJBNzgxMjEyQjZBNzEwMEY0OTNG
RCAvKiBNZXNzYWdlUmVjZWl2ZXJNYXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkQ5MkE3ODIy
MTJCNkE3MTAwRjQ5M0ZEIC8qIE1lc3NhZ2VTZW5kZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MkQ5MkE3N0EyMTJCNkE2MTAwRjQ5M0ZEIC8qIE1vZHVsZS5jcHAgaW4gU291cmNlcyAqLywKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0lQQ1Rlc3RpbmdBUEkuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0lQQ1Rlc3RpbmdB
UEkuY3BwCShyZXZpc2lvbiAyNjgyNDYpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9JUENUZXN0aW5nQVBJLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAog
I2luY2x1ZGUgIkVuY29kZXIuaCIKICNpbmNsdWRlICJGcmFtZUluZm9EYXRhLmgiCiAjaW5jbHVk
ZSAiR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaCIKLSNpbmNsdWRlICJNZXNzYWdlTmFtZXMuaCIKKyNp
bmNsdWRlICJNZXNzYWdlQXJndW1lbnREZXNjcmlwdGlvbnMuaCIKICNpbmNsdWRlICJOZXR3b3Jr
UHJvY2Vzc0Nvbm5lY3Rpb24uaCIKICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIK
ICNpbmNsdWRlICJXZWJGcmFtZS5oIgpAQCAtODMsNiArODMsOCBAQCBwcml2YXRlOgogCiAgICAg
c3RhdGljIEpTVmFsdWVSZWYgdmlzaXRlZExpbmtTdG9yZUlEKEpTQ29udGV4dFJlZiwgSlNPYmpl
Y3RSZWYsIEpTU3RyaW5nUmVmLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOwogICAgIHN0YXRpYyBK
U1ZhbHVlUmVmIHdlYlBhZ2VQcm94eUlEKEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYsIEpTU3Ry
aW5nUmVmLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOworICAgIHN0YXRpYyBKU1ZhbHVlUmVmIHNl
c3Npb25JRChKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmLCBKU1N0cmluZ1JlZiwgSlNWYWx1ZVJl
ZiogZXhjZXB0aW9uKTsKKyAgICBzdGF0aWMgSlNWYWx1ZVJlZiBwYWdlSWRlbnRpZmllcihKU0Nv
bnRleHRSZWYsIEpTT2JqZWN0UmVmLCBKU1N0cmluZ1JlZiwgSlNWYWx1ZVJlZiogZXhjZXB0aW9u
KTsKICAgICBzdGF0aWMgSlNWYWx1ZVJlZiBmcmFtZUlkZW50aWZpZXIoSlNDb250ZXh0UmVmLCBK
U09iamVjdFJlZiwgSlNTdHJpbmdSZWYsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CiAgICAgc3Rh
dGljIEpTVmFsdWVSZWYgcmV0cmlldmVJRChKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmIHRoaXNP
YmplY3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbiwgY29uc3QgV1RGOjpGdW5jdGlvbjx1aW50NjRf
dChKU0lQQyYpPiYpOwogCkBAIC0xNDUsNiArMTQ3LDggQEAgY29uc3QgSlNTdGF0aWNWYWx1ZSog
SlNJUEM6OnN0YXRpY1ZhbHVlcwogICAgIHN0YXRpYyBjb25zdCBKU1N0YXRpY1ZhbHVlIHZhbHVl
c1tdID0gewogICAgICAgICB7ICJ2aXNpdGVkTGlua1N0b3JlSUQiLCB2aXNpdGVkTGlua1N0b3Jl
SUQsIDAsIGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB8IGtKU1Byb3BlcnR5QXR0cmli
dXRlUmVhZE9ubHkgfSwKICAgICAgICAgeyAid2ViUGFnZVByb3h5SUQiLCB3ZWJQYWdlUHJveHlJ
RCwgMCwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIHwga0pTUHJvcGVydHlBdHRyaWJ1
dGVSZWFkT25seSB9LAorICAgICAgICB7ICJzZXNzaW9uSUQiLCBzZXNzaW9uSUQsIDAsIGtKU1By
b3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkg
fSwKKyAgICAgICAgeyAicGFnZUlkZW50aWZpZXIiLCBwYWdlSWRlbnRpZmllciwgMCwga0pTUHJv
cGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIHwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB9
LAogICAgICAgICB7ICJmcmFtZUlkZW50aWZpZXIiLCBmcmFtZUlkZW50aWZpZXIsIDAsIGtKU1By
b3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkg
fSwKICAgICAgICAgeyAibWVzc2FnZXMiLCBtZXNzYWdlcywgMCwga0pTUHJvcGVydHlBdHRyaWJ1
dGVEb250RGVsZXRlIHwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB9LAogICAgICAgICB7
IDAsIDAsIDAsIDAgfQpAQCAtMjM3LDI2ICsyNDEsMzkgQEAgc3RhdGljIEpTVmFsdWVSZWYgY3Jl
YXRlVHlwZUVycm9yKEpTQ29udAogICAgIHJldHVybiB0b1JlZihKU0M6OmNyZWF0ZVR5cGVFcnJv
cih0b0pTKGNvbnRleHQpLCBtZXNzYWdlKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFJlY3RU
eXBlPiBib29sIGVuY29kZVJlY3RUeXBlKElQQzo6RW5jb2RlciYgZW5jb2RlciwgSlNDOjpKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTT2JqZWN0KiBqc09iamVjdCkKK3RlbXBs
YXRlPHR5cGVuYW1lIFBvaW50VHlwZT4gYm9vbCBlbmNvZGVQb2ludFR5cGUoSVBDOjpFbmNvZGVy
JiBlbmNvZGVyLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNPYmpl
Y3QqIGpzT2JqZWN0LCBKU0M6OkNhdGNoU2NvcGUmIHNjb3BlKQogewogICAgIGF1dG8mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8ganNYID0ganNPYmplY3QtPmdldChnbG9iYWxP
YmplY3QsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIngiX3MpKTsKLSAgICBpZiAo
IWpzWC5pc051bWJlcigpKQorICAgIGlmIChzY29wZS5leGNlcHRpb24oKSB8fCAhanNYLmlzTnVt
YmVyKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBhdXRvIGpzWSA9IGpzT2JqZWN0LT5n
ZXQoZ2xvYmFsT2JqZWN0LCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ5Il9zKSk7
Ci0gICAgaWYgKCFqc1kuaXNOdW1iZXIoKSkKKyAgICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkgfHwg
IWpzWS5pc051bWJlcigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZW5jb2RlciA8PCBQ
b2ludFR5cGUoanNYLmFzTnVtYmVyKCksIGpzWS5hc051bWJlcigpKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgUmVjdFR5cGU+IGJvb2wgZW5jb2RlUmVjdFR5cGUo
SVBDOjpFbmNvZGVyJiBlbmNvZGVyLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTQzo6SlNPYmplY3QqIGpzT2JqZWN0LCBKU0M6OkNhdGNoU2NvcGUmIHNjb3BlKQoreworICAg
IGF1dG8mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8ganNYID0ganNPYmplY3Qt
PmdldChnbG9iYWxPYmplY3QsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIngiX3Mp
KTsKKyAgICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkgfHwgIWpzWC5pc051bWJlcigpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgYXV0byBqc1kgPSBqc09iamVjdC0+Z2V0KGdsb2JhbE9iamVj
dCwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAieSJfcykpOworICAgIGlmIChzY29w
ZS5leGNlcHRpb24oKSB8fCAhanNZLmlzTnVtYmVyKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICBhdXRvIGpzV2lkdGggPSBqc09iamVjdC0+Z2V0KGdsb2JhbE9iamVjdCwgSlNDOjpJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAid2lkdGgiX3MpKTsKLSAgICBpZiAoIWpzV2lkdGguaXNO
dW1iZXIoKSkKKyAgICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkgfHwgIWpzV2lkdGguaXNOdW1iZXIo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGF1dG8ganNIZWlnaHQgPSBqc09iamVjdC0+
Z2V0KGdsb2JhbE9iamVjdCwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiaGVpZ2h0
Il9zKSk7Ci0gICAgaWYgKCFqc0hlaWdodC5pc051bWJlcigpKQorICAgIGlmIChzY29wZS5leGNl
cHRpb24oKSB8fCAhanNIZWlnaHQuaXNOdW1iZXIoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIGVuY29kZXIgPDwgUmVjdFR5cGUoanNYLmFzTnVtYmVyKCksIGpzWS5hc051bWJlcigpLCBq
c1dpZHRoLmFzTnVtYmVyKCksIGpzSGVpZ2h0LmFzTnVtYmVyKCkpOwogICAgIHJldHVybiB0cnVl
OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBJbnRlZ3JhbFR5cGU+IGJvb2wgZW5jb2RlSW50ZWdy
YWxUeXBlKElQQzo6RW5jb2RlciYgZW5jb2RlciwgSlNDOjpKU1ZhbHVlIGpzVmFsdWUpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBJbnRlZ3JhbFR5cGU+IGJvb2wgZW5jb2RlTnVtZXJpY1R5cGUoSVBDOjpF
bmNvZGVyJiBlbmNvZGVyLCBKU0M6OkpTVmFsdWUganNWYWx1ZSkKIHsKICAgICBpZiAoanNWYWx1
ZS5pc0JpZ0ludCgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBTdXBwb3J0IG5lZ2F0aXZlIEJpZ0lu
dC4KQEAgLTM0MCw4ICszNTcsMjQgQEAgc3RhdGljIGJvb2wgZW5jb2RlQXJndW1lbnQoSVBDOjpF
bmNvZGVyJgogICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCisgICAgaWYgKHR5cGUgPT0gIkludFBvaW50IikgeworICAgICAgICBpZiAoIWVuY29kZVBv
aW50VHlwZTxXZWJDb3JlOjpJbnRQb2ludD4oZW5jb2RlciwgZ2xvYmFsT2JqZWN0LCBqc09iamVj
dCwgc2NvcGUpKSB7CisgICAgICAgICAgICAqZXhjZXB0aW9uID0gY3JlYXRlVHlwZUVycm9yKGNv
bnRleHQsICJGYWlsZWQgdG8gY29udmVydCBJbnRQb2ludCJfcyk7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAg
aWYgKHR5cGUgPT0gIkZsb2F0UG9pbnQiKSB7CisgICAgICAgIGlmICghZW5jb2RlUG9pbnRUeXBl
PFdlYkNvcmU6OkludFBvaW50PihlbmNvZGVyLCBnbG9iYWxPYmplY3QsIGpzT2JqZWN0LCBzY29w
ZSkpIHsKKyAgICAgICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVUeXBlRXJyb3IoY29udGV4dCwg
IkZhaWxlZCB0byBjb252ZXJ0IEZsb2F0UG9pbnQiX3MpOworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwogICAgIGlmICh0
eXBlID09ICJJbnRSZWN0IikgewotICAgICAgICBpZiAoIWVuY29kZVJlY3RUeXBlPFdlYkNvcmU6
OkludFJlY3Q+KGVuY29kZXIsIGdsb2JhbE9iamVjdCwganNPYmplY3QpKSB7CisgICAgICAgIGlm
ICghZW5jb2RlUmVjdFR5cGU8V2ViQ29yZTo6SW50UmVjdD4oZW5jb2RlciwgZ2xvYmFsT2JqZWN0
LCBqc09iamVjdCwgc2NvcGUpKSB7CiAgICAgICAgICAgICAqZXhjZXB0aW9uID0gY3JlYXRlVHlw
ZUVycm9yKGNvbnRleHQsICJGYWlsZWQgdG8gY29udmVydCBJbnRSZWN0Il9zKTsKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpAQCAtMzQ5LDcgKzM4Miw3IEBAIHN0YXRpYyBi
b29sIGVuY29kZUFyZ3VtZW50KElQQzo6RW5jb2RlciYKICAgICB9CiAKICAgICBpZiAodHlwZSA9
PSAiRmxvYXRSZWN0IikgewotICAgICAgICBpZiAoIWVuY29kZVJlY3RUeXBlPFdlYkNvcmU6OkZs
b2F0UmVjdD4oZW5jb2RlciwgZ2xvYmFsT2JqZWN0LCBqc09iamVjdCkpIHsKKyAgICAgICAgaWYg
KCFlbmNvZGVSZWN0VHlwZTxXZWJDb3JlOjpGbG9hdFJlY3Q+KGVuY29kZXIsIGdsb2JhbE9iamVj
dCwganNPYmplY3QsIHNjb3BlKSkgewogICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVR5
cGVFcnJvcihjb250ZXh0LCAiRmFpbGVkIHRvIGNvbnZlcnQgRmxvYXRSZWN0Il9zKTsKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpAQCAtMzgyLDYgKzQxNSwzMCBAQCBzdGF0
aWMgYm9vbCBlbmNvZGVBcmd1bWVudChJUEM6OkVuY29kZXImCiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KIAorICAgIGlmICh0eXBlID09ICJVUkwiKSB7CisgICAgICAgIGlmIChqc1ZhbHVl
LmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKKyAgICAgICAgICAgIGVuY29kZXIgPDwgVVJMIHsgfTsK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGF1dG8gc3RyaW5n
ID0ganNWYWx1ZS50b1dURlN0cmluZyhnbG9iYWxPYmplY3QpOworICAgICAgICBpZiAoc2NvcGUu
ZXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGVuY29kZXIg
PDwgVVJMIHsgVVJMIHsgfSwgc3RyaW5nIH07CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworICAgIGlmICh0eXBlID09ICJSZWdpc3RyYWJsZURvbWFpbiIpIHsKKyAgICAgICAgaWYgKGpz
VmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgeworICAgICAgICAgICAgZW5jb2RlciA8PCBSZWdp
c3RyYWJsZURvbWFpbiB7IH07CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQor
ICAgICAgICBhdXRvIHN0cmluZyA9IGpzVmFsdWUudG9XVEZTdHJpbmcoZ2xvYmFsT2JqZWN0KTsK
KyAgICAgICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBlbmNvZGVyIDw8IFJlZ2lzdHJhYmxlRG9tYWluIHsgVVJMIHsgVVJMIHsgfSwg
c3RyaW5nIH0gfTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCiAgICAgaWYgKHR5cGUg
PT0gIlJHQkEiKSB7CiAgICAgICAgIGlmICghanNWYWx1ZS5pc051bWJlcigpKSB7CiAgICAgICAg
ICAgICAqZXhjZXB0aW9uID0gY3JlYXRlVHlwZUVycm9yKGNvbnRleHQsICJSR0JBIHZhbHVlIHNo
b3VsZCBiZSBhIG51bWJlciJfcyk7CkBAIC0zOTIsNDggKzQ0OSw5MSBAQCBzdGF0aWMgYm9vbCBl
bmNvZGVBcmd1bWVudChJUEM6OkVuY29kZXImCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
IAotICAgIGJvb2wgaW50ZWdyYWxSZXN1bHQ7CisgICAgYm9vbCBudW1lcmljUmVzdWx0OwogICAg
IGlmICh0eXBlID09ICJib29sIikKLSAgICAgICAgaW50ZWdyYWxSZXN1bHQgPSBlbmNvZGVJbnRl
Z3JhbFR5cGU8Ym9vbD4oZW5jb2RlciwganNWYWx1ZSk7CisgICAgICAgIG51bWVyaWNSZXN1bHQg
PSBlbmNvZGVOdW1lcmljVHlwZTxib29sPihlbmNvZGVyLCBqc1ZhbHVlKTsKKyAgICBlbHNlIGlm
ICh0eXBlID09ICJkb3VibGUiKQorICAgICAgICBudW1lcmljUmVzdWx0ID0gZW5jb2RlTnVtZXJp
Y1R5cGU8ZG91YmxlPihlbmNvZGVyLCBqc1ZhbHVlKTsKKyAgICBlbHNlIGlmICh0eXBlID09ICJm
bG9hdCIpCisgICAgICAgIG51bWVyaWNSZXN1bHQgPSBlbmNvZGVOdW1lcmljVHlwZTxmbG9hdD4o
ZW5jb2RlciwganNWYWx1ZSk7CiAgICAgZWxzZSBpZiAodHlwZSA9PSAiaW50OF90IikKLSAgICAg
ICAgaW50ZWdyYWxSZXN1bHQgPSBlbmNvZGVJbnRlZ3JhbFR5cGU8aW50OF90PihlbmNvZGVyLCBq
c1ZhbHVlKTsKKyAgICAgICAgbnVtZXJpY1Jlc3VsdCA9IGVuY29kZU51bWVyaWNUeXBlPGludDhf
dD4oZW5jb2RlciwganNWYWx1ZSk7CiAgICAgZWxzZSBpZiAodHlwZSA9PSAiaW50MTZfdCIpCi0g
ICAgICAgIGludGVncmFsUmVzdWx0ID0gZW5jb2RlSW50ZWdyYWxUeXBlPGludDE2X3Q+KGVuY29k
ZXIsIGpzVmFsdWUpOworICAgICAgICBudW1lcmljUmVzdWx0ID0gZW5jb2RlTnVtZXJpY1R5cGU8
aW50MTZfdD4oZW5jb2RlciwganNWYWx1ZSk7CiAgICAgZWxzZSBpZiAodHlwZSA9PSAiaW50MzJf
dCIpCi0gICAgICAgIGludGVncmFsUmVzdWx0ID0gZW5jb2RlSW50ZWdyYWxUeXBlPGludDMyX3Q+
KGVuY29kZXIsIGpzVmFsdWUpOworICAgICAgICBudW1lcmljUmVzdWx0ID0gZW5jb2RlTnVtZXJp
Y1R5cGU8aW50MzJfdD4oZW5jb2RlciwganNWYWx1ZSk7CiAgICAgZWxzZSBpZiAodHlwZSA9PSAi
aW50NjRfdCIpCi0gICAgICAgIGludGVncmFsUmVzdWx0ID0gZW5jb2RlSW50ZWdyYWxUeXBlPGlu
dDY0X3Q+KGVuY29kZXIsIGpzVmFsdWUpOworICAgICAgICBudW1lcmljUmVzdWx0ID0gZW5jb2Rl
TnVtZXJpY1R5cGU8aW50NjRfdD4oZW5jb2RlciwganNWYWx1ZSk7CiAgICAgZWxzZSBpZiAodHlw
ZSA9PSAidWludDhfdCIpCi0gICAgICAgIGludGVncmFsUmVzdWx0ID0gZW5jb2RlSW50ZWdyYWxU
eXBlPHVpbnQ4X3Q+KGVuY29kZXIsIGpzVmFsdWUpOworICAgICAgICBudW1lcmljUmVzdWx0ID0g
ZW5jb2RlTnVtZXJpY1R5cGU8dWludDhfdD4oZW5jb2RlciwganNWYWx1ZSk7CiAgICAgZWxzZSBp
ZiAodHlwZSA9PSAidWludDE2X3QiKQotICAgICAgICBpbnRlZ3JhbFJlc3VsdCA9IGVuY29kZUlu
dGVncmFsVHlwZTx1aW50MTZfdD4oZW5jb2RlciwganNWYWx1ZSk7CisgICAgICAgIG51bWVyaWNS
ZXN1bHQgPSBlbmNvZGVOdW1lcmljVHlwZTx1aW50MTZfdD4oZW5jb2RlciwganNWYWx1ZSk7CiAg
ICAgZWxzZSBpZiAodHlwZSA9PSAidWludDMyX3QiKQotICAgICAgICBpbnRlZ3JhbFJlc3VsdCA9
IGVuY29kZUludGVncmFsVHlwZTx1aW50MzJfdD4oZW5jb2RlciwganNWYWx1ZSk7CisgICAgICAg
IG51bWVyaWNSZXN1bHQgPSBlbmNvZGVOdW1lcmljVHlwZTx1aW50MzJfdD4oZW5jb2RlciwganNW
YWx1ZSk7CiAgICAgZWxzZSBpZiAodHlwZSA9PSAidWludDY0X3QiKQotICAgICAgICBpbnRlZ3Jh
bFJlc3VsdCA9IGVuY29kZUludGVncmFsVHlwZTx1aW50NjRfdD4oZW5jb2RlciwganNWYWx1ZSk7
CisgICAgICAgIG51bWVyaWNSZXN1bHQgPSBlbmNvZGVOdW1lcmljVHlwZTx1aW50NjRfdD4oZW5j
b2RlciwganNWYWx1ZSk7CiAgICAgZWxzZSB7CiAgICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVU
eXBlRXJyb3IoY29udGV4dCwgIkJhZCB0eXBlIG5hbWUiX3MpOwogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQotICAgIGlmICghaW50ZWdyYWxSZXN1bHQpIHsKLSAgICAgICAgKmV4Y2VwdGlv
biA9IGNyZWF0ZVR5cGVFcnJvcihjb250ZXh0LCAiRmFpbGVkIHRvIGVuY29kZSBhbiBpbnRlZ2Vy
Il9zKTsKKyAgICBpZiAoIW51bWVyaWNSZXN1bHQpIHsKKyAgICAgICAgKmV4Y2VwdGlvbiA9IGNy
ZWF0ZVR5cGVFcnJvcihjb250ZXh0LCAiRmFpbGVkIHRvIGVuY29kZSBhIG51bWJlciJfcyk7CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKKworc3Rh
dGljIEpTQzo6SlNPYmplY3QqIGpzUmVzdWx0RnJvbVJlcGx5RGVjb2RlcihKU0M6OkpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIElQQzo6TWVzc2FnZU5hbWUgbWVzc2FnZU5hbWUsIElQQzo6
RGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBhdXRvJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBhdXRvIGFy
cmF5QnVmZmVyID0gSlNDOjpBcnJheUJ1ZmZlcjo6Y3JlYXRlKGRlY29kZXIuYnVmZmVyKCksIGRl
Y29kZXIubGVuZ3RoKCkpOworICAgIEpTQzo6SlNBcnJheUJ1ZmZlcioganNBcnJheUJ1ZmZlciA9
IG51bGxwdHI7CisgICAgaWYgKGF1dG8qIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+YXJyYXlC
dWZmZXJTdHJ1Y3R1cmUoYXJyYXlCdWZmZXItPnNoYXJpbmdNb2RlKCkpKQorICAgICAgICBqc0Fy
cmF5QnVmZmVyID0gSlNDOjpKU0FycmF5QnVmZmVyOjpjcmVhdGUodm0sIHN0cnVjdHVyZSwgV1RG
TW92ZShhcnJheUJ1ZmZlcikpOworICAgIGlmICghanNBcnJheUJ1ZmZlcikgeworICAgICAgICB0
aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHNjb3BlLCBKU0M6OmNyZWF0ZVR5cGVFcnJvcihn
bG9iYWxPYmplY3QsICJGYWlsZWQgdG8gY3JlYXRlIHRoZSBhcnJheSBidWZmZXIgZm9yIHRoZSBy
ZXBseSJfcykpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBhdXRvIGpz
UmVwbHlBcmd1bWVudHMgPSBqc1ZhbHVlRm9yUmVwbHlBcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBt
ZXNzYWdlTmFtZSwgZGVjb2Rlcik7CisgICAgaWYgKCFqc1JlcGx5QXJndW1lbnRzKSB7CisgICAg
ICAgIHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgc2NvcGUsIEpTQzo6Y3JlYXRlVHlwZUVy
cm9yKGdsb2JhbE9iamVjdCwgIkZhaWxlZCB0byBkZWNvZGUgdGhlIHJlcGx5Il9zKSk7CisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIGlmIChqc1JlcGx5QXJndW1lbnRzLT5p
c0VtcHR5KCkpIHsKKyAgICAgICAgdGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCBzY29wZSwg
SlNDOjpjcmVhdGVUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCAiRmFpbGVkIHRvIGNvbnZlcnQgdGhl
IHJlcGx5IHRvIGFuIEpTIGFycmF5Il9zKSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IH0KKworICAgIGF1dG8gY2F0Y2hTY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAg
IEpTQzo6SlNPYmplY3QqIGpzUmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZ2xvYmFsT2Jq
ZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKGNhdGNoU2NvcGUsIG51bGxwdHIpOworCisgICAganNSZXN1bHQtPnB1dERpcmVjdCh2
bSwgdm0ucHJvcGVydHlOYW1lcy0+YXJndW1lbnRzLCAqanNSZXBseUFyZ3VtZW50cyk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihjYXRjaFNjb3BlLCBudWxscHRyKTsKKworICAgIGpzUmVzdWx0
LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImJ1ZmZlciIp
LCBqc0FycmF5QnVmZmVyKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKGNhdGNoU2NvcGUsIG51
bGxwdHIpOworCisgICAgcmV0dXJuIGpzUmVzdWx0OworfQorCiBKU1ZhbHVlUmVmIEpTSVBDOjpz
ZW5kTWVzc2FnZShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVm
IHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3Vt
ZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7CiAgICAgYXV0byogZ2xvYmFsT2JqZWN0
ID0gdG9KUyhjb250ZXh0KTsKICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGdsb2JhbE9iamVj
dC0+dm0oKSk7CiAgICAgYXV0byBqc0lQQyA9IG1ha2VSZWZQdHIodG9XcmFwcGVkKGNvbnRleHQs
IHRoaXNPYmplY3QpKTsKICAgICBpZiAoIWpzSVBDKSB7Ci0gICAgICAgICpleGNlcHRpb24gPSB0
b1JlZihKU0M6OmNyZWF0ZVR5cGVFcnJvcih0b0pTKGNvbnRleHQpLCAiV3JvbmcgdHlwZSJfcykp
OworICAgICAgICAqZXhjZXB0aW9uID0gY3JlYXRlVHlwZUVycm9yKGNvbnRleHQsICJXcm9uZyB0
eXBlIl9zKTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwog
ICAgIH0KIAogICAgIGlmIChhcmd1bWVudENvdW50IDwgMykgewotICAgICAgICAqZXhjZXB0aW9u
ID0gdG9SZWYoSlNDOjpjcmVhdGVUeXBlRXJyb3IodG9KUyhjb250ZXh0KSwgIk11c3Qgc3BlY2lm
eSB0aGUgdGFyZ2V0IHByb2Nlc3MsIGRlc2luYXRpb24gSUQsIGFuZCBtZXNzYWdlIElEIGFzIHRo
ZSBmaXJzdCB0aHJlZSBhcmd1bWVudHMiX3MpKTsKKyAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0
ZVR5cGVFcnJvcihjb250ZXh0LCAiTXVzdCBzcGVjaWZ5IHRoZSB0YXJnZXQgcHJvY2VzcywgZGVz
aW5hdGlvbiBJRCwgYW5kIG1lc3NhZ2UgSUQgYXMgdGhlIGZpcnN0IHRocmVlIGFyZ3VtZW50cyJf
cyk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKICAgICB9
CiAKQEAgLTQ0OSw3ICs1NDksNDYgQEAgSlNWYWx1ZVJlZiBKU0lQQzo6c2VuZE1lc3NhZ2UoSlND
b250ZXh0UgogICAgIGlmICghbWVzc2FnZUlEKQogICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCk7CiAKLSAgICBhdXRvIGVuY29kZXIgPSBtYWtlVW5pcXVlPElQQzo6
RW5jb2Rlcj4oc3RhdGljX2Nhc3Q8SVBDOjpNZXNzYWdlTmFtZT4oc3RhdGljX2Nhc3Q8dWludDY0
X3Q+KCptZXNzYWdlSUQpKSwgKmRlc3RpbmF0aW9uSUQpOworICAgIGF1dG8gbWVzc2FnZU5hbWUg
PSBzdGF0aWNfY2FzdDxJUEM6Ok1lc3NhZ2VOYW1lPigqbWVzc2FnZUlEKTsKKyAgICBhdXRvIGVu
Y29kZXIgPSBtYWtlVW5pcXVlPElQQzo6RW5jb2Rlcj4obWVzc2FnZU5hbWUsICpkZXN0aW5hdGlv
bklEKTsKKworICAgIEpTVmFsdWVSZWYgcmV0dXJuVmFsdWUgPSBKU1ZhbHVlTWFrZVVuZGVmaW5l
ZChjb250ZXh0KTsKKworICAgIGJvb2wgaGFzUmVwbHkgPSAhIW1lc3NhZ2VSZXBseUFyZ3VtZW50
RGVzY3JpcHRpb25zKG1lc3NhZ2VOYW1lKTsKKyAgICBpZiAoaGFzUmVwbHkpIHsKKyAgICAgICAg
dWludDY0X3QgbGlzdGVuZXJJRCA9IElQQzo6bmV4dEFzeW5jUmVwbHlIYW5kbGVySUQoKTsKKyAg
ICAgICAgZW5jb2Rlci0+ZW5jb2RlKGxpc3RlbmVySUQpOworCisgICAgICAgIEpTT2JqZWN0UmVm
IHJlc29sdmU7CisgICAgICAgIEpTT2JqZWN0UmVmIHJlamVjdDsKKyAgICAgICAgcmV0dXJuVmFs
dWUgPSBKU09iamVjdE1ha2VEZWZlcnJlZFByb21pc2UoY29udGV4dCwgJnJlc29sdmUsICZyZWpl
Y3QsIGV4Y2VwdGlvbik7CisgICAgICAgIGlmICghcmV0dXJuVmFsdWUpCisgICAgICAgICAgICBy
ZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisKKyAgICAgICAgSlNHbG9iYWxD
b250ZXh0UmV0YWluKEpTQ29udGV4dEdldEdsb2JhbENvbnRleHQoY29udGV4dCkpOworICAgICAg
ICBKU1ZhbHVlUHJvdGVjdChjb250ZXh0LCByZXNvbHZlKTsKKyAgICAgICAgSlNWYWx1ZVByb3Rl
Y3QoY29udGV4dCwgcmVqZWN0KTsKKyAgICAgICAgSVBDOjphZGRBc3luY1JlcGx5SGFuZGxlcigq
Y29ubmVjdGlvbiwgbGlzdGVuZXJJRCwgW21lc3NhZ2VOYW1lLCBjb250ZXh0LCByZXNvbHZlLCBy
ZWplY3RdKElQQzo6RGVjb2RlciogcmVwbHlEZWNvZGVyKSB7CisgICAgICAgICAgICBhdXRvKiBn
bG9iYWxPYmplY3QgPSB0b0pTKGNvbnRleHQpOworICAgICAgICAgICAgYXV0byYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CisgICAgICAgICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKHZtKTsK
KworICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAg
ICAgICAgICAgYXV0byoganNSZXN1bHQgPSBqc1Jlc3VsdEZyb21SZXBseURlY29kZXIoZ2xvYmFs
T2JqZWN0LCBtZXNzYWdlTmFtZSwgKnJlcGx5RGVjb2Rlcik7CisgICAgICAgICAgICBpZiAoYXV0
byogZXhjZXB0aW9uID0gc2NvcGUuZXhjZXB0aW9uKCkpIHsKKyAgICAgICAgICAgICAgICBzY29w
ZS5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICAgICAgICAgIEpTVmFsdWVSZWYgYXJndW1lbnRz
W10gPSB7IHRvUmVmKGdsb2JhbE9iamVjdCwgZXhjZXB0aW9uKSB9OworICAgICAgICAgICAgICAg
IEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb24oY29udGV4dCwgcmVqZWN0LCByZWplY3QsIDEsIGFyZ3Vt
ZW50cywgbnVsbHB0cik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEpT
VmFsdWVSZWYgYXJndW1lbnRzW10gPSB7IHRvUmVmKGdsb2JhbE9iamVjdCwganNSZXN1bHQpIH07
CisgICAgICAgICAgICAgICAgSlNPYmplY3RDYWxsQXNGdW5jdGlvbihjb250ZXh0LCByZXNvbHZl
LCByZXNvbHZlLCAxLCBhcmd1bWVudHMsIG51bGxwdHIpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBKU1ZhbHVlVW5wcm90ZWN0KGNvbnRleHQsIHJlamVjdCk7CisgICAgICAgICAgICBK
U1ZhbHVlVW5wcm90ZWN0KGNvbnRleHQsIHJlc29sdmUpOworICAgICAgICAgICAgSlNHbG9iYWxD
b250ZXh0UmVsZWFzZShKU0NvbnRleHRHZXRHbG9iYWxDb250ZXh0KGNvbnRleHQpKTsKKyAgICAg
ICAgfSk7CisgICAgfQogCiAgICAgaWYgKGFyZ3VtZW50Q291bnQgPiAzKSB7CiAgICAgICAgIGlm
ICghZW5jb2RlQXJndW1lbnQoKmVuY29kZXIsICpqc0lQQywgY29udGV4dCwgYXJndW1lbnRzWzNd
LCBleGNlcHRpb24pKQpAQCAtNDYwLDcgKzU5OSw3IEBAIEpTVmFsdWVSZWYgSlNJUEM6OnNlbmRN
ZXNzYWdlKEpTQ29udGV4dFIKIAogICAgIGNvbm5lY3Rpb24tPnNlbmRNZXNzYWdlKFdURk1vdmUo
ZW5jb2RlciksIHsgfSk7CiAKLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4
dCk7CisgICAgcmV0dXJuIHJldHVyblZhbHVlOwogfQogCiBKU1ZhbHVlUmVmIEpTSVBDOjpzZW5k
U3luY01lc3NhZ2UoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJl
ZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1
bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQpAQCAtNDY5LDEyICs2MDgsMTIgQEAgSlNW
YWx1ZVJlZiBKU0lQQzo6c2VuZFN5bmNNZXNzYWdlKEpTQ29udAogICAgIEpTQzo6SlNMb2NrSG9s
ZGVyIGxvY2soZ2xvYmFsT2JqZWN0LT52bSgpKTsKICAgICBhdXRvIGpzSVBDID0gbWFrZVJlZlB0
cih0b1dyYXBwZWQoY29udGV4dCwgdGhpc09iamVjdCkpOwogICAgIGlmICghanNJUEMpIHsKLSAg
ICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKEpTQzo6Y3JlYXRlVHlwZUVycm9yKHRvSlMoY29udGV4
dCksICJXcm9uZyB0eXBlIl9zKSk7CisgICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVUeXBlRXJy
b3IoY29udGV4dCwgIldyb25nIHR5cGUiX3MpOwogICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCk7CiAgICAgfQogCiAgICAgaWYgKGFyZ3VtZW50Q291bnQgPCA0KSB7
Ci0gICAgICAgICpleGNlcHRpb24gPSB0b1JlZihKU0M6OmNyZWF0ZVR5cGVFcnJvcih0b0pTKGNv
bnRleHQpLCAiTXVzdCBzcGVjaWZ5IHRoZSB0YXJnZXQgcHJvY2VzcywgZGVzaW5hdGlvbiBJRCwg
bWVzc2FnZSBJRCwgYW5kIHRpbWVvdXQgYXMgdGhlIGZpcnN0IGZvdXIgYXJndW1lbnRzIl9zKSk7
CisgICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVUeXBlRXJyb3IoY29udGV4dCwgIk11c3Qgc3Bl
Y2lmeSB0aGUgdGFyZ2V0IHByb2Nlc3MsIGRlc2luYXRpb24gSUQsIGFuZCBtZXNzYWdlIElEIGFz
IHRoZSBmaXJzdCB0aHJlZSBhcmd1bWVudHMiX3MpOwogICAgICAgICByZXR1cm4gSlNWYWx1ZU1h
a2VVbmRlZmluZWQoY29udGV4dCk7CiAgICAgfQogCkBAIC00OTQsMjQgKzYzMywzMyBAQCBKU1Zh
bHVlUmVmIEpTSVBDOjpzZW5kU3luY01lc3NhZ2UoSlNDb250CiAgICAgewogICAgICAgICBhdXRv
IGpzVmFsdWUgPSB0b0pTKGdsb2JhbE9iamVjdCwgYXJndW1lbnRzWzNdKTsKICAgICAgICAgaWYg
KCFqc1ZhbHVlLmlzTnVtYmVyKCkpIHsKLSAgICAgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihK
U0M6OmNyZWF0ZVR5cGVFcnJvcihnbG9iYWxPYmplY3QsICJ0aW1lb3V0IG11c3QgYmUgYSBudW1i
ZXIiX3MpKTsKKyAgICAgICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVUeXBlRXJyb3IoY29udGV4
dCwgIlRpbWVvdXQgbXVzdCBiZSBhIG51bWJlciJfcyk7CiAgICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAgICAgICAgIH0KICAgICAgICAgdGltZW91dCA9
IFNlY29uZHMgeyBqc1ZhbHVlLmFzTnVtYmVyKCkgfTsKICAgICB9Ci0gICAgCisKICAgICAvLyBG
SVhNRTogU3VwcG9ydCB0aGUgb3B0aW9ucy4KIAogICAgIHVpbnQ2NF90IHN5bmNSZXF1ZXN0SUQg
PSAwOwotICAgIGF1dG8gZW5jb2RlciA9IGNvbm5lY3Rpb24tPmNyZWF0ZVN5bmNNZXNzYWdlRW5j
b2RlcihzdGF0aWNfY2FzdDxJUEM6Ok1lc3NhZ2VOYW1lPihzdGF0aWNfY2FzdDx1aW50NjRfdD4o
Km1lc3NhZ2VJRCkpLCAqZGVzdGluYXRpb25JRCwgc3luY1JlcXVlc3RJRCk7CisgICAgYXV0byBt
ZXNzYWdlTmFtZSA9IHN0YXRpY19jYXN0PElQQzo6TWVzc2FnZU5hbWU+KCptZXNzYWdlSUQpOwor
ICAgIGF1dG8gZW5jb2RlciA9IGNvbm5lY3Rpb24tPmNyZWF0ZVN5bmNNZXNzYWdlRW5jb2Rlciht
ZXNzYWdlTmFtZSwgKmRlc3RpbmF0aW9uSUQsIHN5bmNSZXF1ZXN0SUQpOwogCiAgICAgaWYgKGFy
Z3VtZW50Q291bnQgPiA0KSB7CiAgICAgICAgIGlmICghZW5jb2RlQXJndW1lbnQoKmVuY29kZXIs
ICpqc0lQQywgY29udGV4dCwgYXJndW1lbnRzWzRdLCBleGNlcHRpb24pKQogICAgICAgICAgICAg
cmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogICAgIH0KIAotICAgIGF1dG8g
cmVwbHlEZWNvZGVyID0gY29ubmVjdGlvbi0+c2VuZFN5bmNNZXNzYWdlKHN5bmNSZXF1ZXN0SUQs
IFdURk1vdmUoZW5jb2RlciksIHRpbWVvdXQsIHsgfSk7Ci0gICAgLy8gRklYTUU6IERlY29kZSB0
aGUgcmVwbHkuCisgICAgaWYgKGF1dG8gcmVwbHlEZWNvZGVyID0gY29ubmVjdGlvbi0+c2VuZFN5
bmNNZXNzYWdlKHN5bmNSZXF1ZXN0SUQsIFdURk1vdmUoZW5jb2RlciksIHRpbWVvdXQsIHsgfSkp
IHsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUoZ2xvYmFsT2JqZWN0
LT52bSgpKTsKKyAgICAgICAgYXV0byoganNSZXN1bHQgPSBqc1Jlc3VsdEZyb21SZXBseURlY29k
ZXIoZ2xvYmFsT2JqZWN0LCBtZXNzYWdlTmFtZSwgKnJlcGx5RGVjb2Rlcik7CisgICAgICAgIGlm
IChzY29wZS5leGNlcHRpb24oKSkgeworICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGds
b2JhbE9iamVjdCwgc2NvcGUuZXhjZXB0aW9uKCkpOworICAgICAgICAgICAgc2NvcGUuY2xlYXJF
eGNlcHRpb24oKTsKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250
ZXh0KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdG9SZWYoZ2xvYmFsT2JqZWN0LCBqc1Jl
c3VsdCk7CisgICAgfQogCiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQp
OwogfQpAQCAtNTMxLDYgKzY3OSwyMCBAQCBKU1ZhbHVlUmVmIEpTSVBDOjp3ZWJQYWdlUHJveHlJ
RChKU0NvbnRlCiAgICAgfSk7CiB9CiAKK0pTVmFsdWVSZWYgSlNJUEM6OnNlc3Npb25JRChKU0Nv
bnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgSlNTdHJpbmdSZWYsIEpT
VmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICByZXR1cm4gcmV0cmlldmVJRChjb250ZXh0LCB0
aGlzT2JqZWN0LCBleGNlcHRpb24sIFtdKEpTSVBDJiB3cmFwcGVkKSB7CisgICAgICAgIHJldHVy
biB3cmFwcGVkLm1fd2ViUGFnZS0+c2Vzc2lvbklEKCkudG9VSW50NjQoKTsKKyAgICB9KTsKK30K
KworSlNWYWx1ZVJlZiBKU0lQQzo6cGFnZUlkZW50aWZpZXIoSlNDb250ZXh0UmVmIGNvbnRleHQs
IEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIEpTU3RyaW5nUmVmLCBKU1ZhbHVlUmVmKiBleGNlcHRp
b24pCit7CisgICAgcmV0dXJuIHJldHJpZXZlSUQoY29udGV4dCwgdGhpc09iamVjdCwgZXhjZXB0
aW9uLCBbXShKU0lQQyYgd3JhcHBlZCkgeworICAgICAgICByZXR1cm4gd3JhcHBlZC5tX3dlYlBh
Z2UtPmlkZW50aWZpZXIoKS50b1VJbnQ2NCgpOworICAgIH0pOworfQorCiBKU1ZhbHVlUmVmIEpT
SVBDOjpmcmFtZUlkZW50aWZpZXIoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIHRo
aXNPYmplY3QsIEpTU3RyaW5nUmVmLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7CiAgICAgcmV0
dXJuIHJldHJpZXZlSUQoY29udGV4dCwgdGhpc09iamVjdCwgZXhjZXB0aW9uLCBbXShKU0lQQyYg
d3JhcHBlZCkgewpAQCAtNTU1LDYgKzcxNyw0MSBAQCBKU1ZhbHVlUmVmIEpTSVBDOjpyZXRyaWV2
ZUlEKEpTQ29udGV4dFJlCiAgICAgcmV0dXJuIHRvUmVmKHZtLCBqc1ZhbHVlKTsKIH0KIAorc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjcmVhdGVKU0FycmF5Rm9yQXJndW1lbnREZXNjcmlwdGlvbnMoSlND
OjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBPcHRpb25hbDxWZWN0b3I8SVBDOjpBcmd1
bWVudERlc2NyaXB0aW9uPj4mJiBhcmd1bWVudERlc2NyaXB0aW9ucykKK3sKKyAgICBpZiAoIWFy
Z3VtZW50RGVzY3JpcHRpb25zKQorICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKKworICAg
IGF1dG8mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X0NBVENIX1NDT1BFKHZtKTsKKyAgICBKU0M6OkpTT2JqZWN0KiBhcmd1bWVudHNBcnJheSA9IEpT
Qzo6Y29uc3RydWN0RW1wdHlBcnJheShnbG9iYWxPYmplY3QsIG51bGxwdHIpOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIEpTQzo6anNURFpWYWx1ZSgpKTsKKworICAgIGZvciAodW5z
aWduZWQgYXJndW1lbnRJbmRleCA9IDA7IGFyZ3VtZW50SW5kZXggPCBhcmd1bWVudERlc2NyaXB0
aW9ucy0+c2l6ZSgpOyArK2FyZ3VtZW50SW5kZXgpIHsKKyAgICAgICAgYXV0byYgZGVzY3JpcHRp
b24gPSBhcmd1bWVudERlc2NyaXB0aW9ucy0+YXQoYXJndW1lbnRJbmRleCk7CisgICAgICAgIEpT
Qzo6SlNPYmplY3QqIGpzRGVzY3JpcHRpb25zID0gY29uc3RydWN0RW1wdHlPYmplY3QoZ2xvYmFs
T2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKTsKKyAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgSlNDOjpqc1REWlZhbHVlKCkpOworCisgICAgICAgIGFyZ3Vt
ZW50c0FycmF5LT5wdXREaXJlY3RJbmRleChnbG9iYWxPYmplY3QsIGFyZ3VtZW50SW5kZXgsIGpz
RGVzY3JpcHRpb25zKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNDOjpq
c1REWlZhbHVlKCkpOworCisgICAgICAgIGpzRGVzY3JpcHRpb25zLT5wdXREaXJlY3Qodm0sIEpT
Qzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm5hbWUiKSwgSlNDOjpqc1N0cmluZyh2bSwg
U3RyaW5nKGRlc2NyaXB0aW9uLm5hbWUpKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIEpTQzo6anNURFpWYWx1ZSgpKTsKKworICAgICAgICBqc0Rlc2NyaXB0aW9ucy0+cHV0
RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ0eXBlIiksIEpTQzo6
anNTdHJpbmcodm0sIFN0cmluZyhkZXNjcmlwdGlvbi50eXBlKSkpOworICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBKU0M6OmpzVERaVmFsdWUoKSk7CisKKyAgICAgICAganNEZXNj
cmlwdGlvbnMtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAi
b3B0aW9uYWwiKSwgSlNDOjpqc0Jvb2xlYW4oZGVzY3JpcHRpb24uaXNPcHRpb25hbCkpOworICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU0M6OmpzVERaVmFsdWUoKSk7CisKKyAg
ICAgICAgaWYgKGRlc2NyaXB0aW9uLmVudW1OYW1lKSB7CisgICAgICAgICAgICBqc0Rlc2NyaXB0
aW9ucy0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJlbnVt
IiksIEpTQzo6anNTdHJpbmcodm0sIFN0cmluZyhkZXNjcmlwdGlvbi5lbnVtTmFtZSkpKTsKKyAg
ICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTQzo6anNURFpWYWx1ZSgpKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gYXJndW1lbnRzQXJyYXk7Cit9CisKIEpTVmFs
dWVSZWYgSlNJUEM6Om1lc3NhZ2VzKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiB0
aGlzT2JqZWN0LCBKU1N0cmluZ1JlZiwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewogICAgIGF1
dG8qIGdsb2JhbE9iamVjdCA9IHRvSlMoY29udGV4dCk7CkBAIC01NjcsMTcgKzc2NCwzNSBAQCBK
U1ZhbHVlUmVmIEpTSVBDOjptZXNzYWdlcyhKU0NvbnRleHRSZWYgCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKICAgICB9CiAKKyAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAgICAgSlNDOjpKU09iamVjdCogbWVzc2FnZXNPYmpl
Y3QgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+b2Jq
ZWN0UHJvdG90eXBlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWVN
YWtlVW5kZWZpbmVkKGNvbnRleHQpKTsKKwogICAgIGF1dG8gbmFtZUlkZW50ID0gSlNDOjpJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibmFtZSIpOworICAgIGF1dG8gcmVwbHlBcmd1bWVudHNJ
ZGVudCA9IEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInJlcGx5QXJndW1lbnRzIik7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihJUEM6
Ok1lc3NhZ2VOYW1lOjpMYXN0KTsgKytpKSB7Ci0gICAgICAgIGF1dG8qIG1lc3NhZ2VOYW1lID0g
ZGVzY3JpcHRpb24oc3RhdGljX2Nhc3Q8SVBDOjpNZXNzYWdlTmFtZT4oaSkpOworICAgICAgICBh
dXRvIG5hbWUgPSBzdGF0aWNfY2FzdDxJUEM6Ok1lc3NhZ2VOYW1lPihpKTsKIAogICAgICAgICBK
U0M6OkpTT2JqZWN0KiBkaWN0aW9uYXJ5ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZ2xvYmFsT2Jq
ZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKTsKKyAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCkpOworCiAgICAg
ICAgIGRpY3Rpb25hcnktPnB1dERpcmVjdCh2bSwgbmFtZUlkZW50LCBKU0M6OkpTVmFsdWUoaSkp
OworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlTWFrZVVuZGVmaW5l
ZChjb250ZXh0KSk7CiAKLSAgICAgICAgLy8gRklYTUU6IEFkZCBhcmd1bWVudCBuYW1lcy4KKyAg
ICAgICAgYXV0byBhcmd1bWVudERlc2NyaXB0aW9ucyA9IGNyZWF0ZUpTQXJyYXlGb3JBcmd1bWVu
dERlc2NyaXB0aW9ucyhnbG9iYWxPYmplY3QsIElQQzo6bWVzc2FnZUFyZ3VtZW50RGVzY3JpcHRp
b25zKG5hbWUpKTsKKyAgICAgICAgaWYgKGFyZ3VtZW50RGVzY3JpcHRpb25zLmlzRW1wdHkoKSkK
KyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKyAgICAg
ICAgZGljdGlvbmFyeS0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMs
IGFyZ3VtZW50RGVzY3JpcHRpb25zKTsgICAgICAgICAgICAKKyAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCkpOworCisgICAgICAg
IGF1dG8gcmVwbHlBcmd1bWVudERlc2NyaXB0aW9ucyA9IGNyZWF0ZUpTQXJyYXlGb3JBcmd1bWVu
dERlc2NyaXB0aW9ucyhnbG9iYWxPYmplY3QsIElQQzo6bWVzc2FnZVJlcGx5QXJndW1lbnREZXNj
cmlwdGlvbnMobmFtZSkpOworICAgICAgICBpZiAocmVwbHlBcmd1bWVudERlc2NyaXB0aW9ucy5p
c0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4
dCk7CisgICAgICAgIGRpY3Rpb25hcnktPnB1dERpcmVjdCh2bSwgcmVwbHlBcmd1bWVudHNJZGVu
dCwgcmVwbHlBcmd1bWVudERlc2NyaXB0aW9ucyk7ICAgICAgICAgICAgCisgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpKTsKIAot
ICAgICAgICBtZXNzYWdlc09iamVjdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sIG1lc3NhZ2VOYW1lKSwgZGljdGlvbmFyeSk7CisgICAgICAgIG1lc3NhZ2Vz
T2JqZWN0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgZGVz
Y3JpcHRpb24obmFtZSkpLCBkaWN0aW9uYXJ5KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCkpOwogICAgIH0KIAogICAgIHJl
dHVybiB0b1JlZih2bSwgbWVzc2FnZXNPYmplY3QpOwpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjY4Mzg1KQorKysgVG9vbHMv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMjAtMTAtMTIgIFJ5
b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgSVBDIHRlc3RpbmcgSlMg
QVBJIHNob3VsZCBleHBvc2UgYSByZXBseSBhbmQgZGVzY3JpYmUgdGhlIGxpc3Qgb2YgYXJndW1l
bnRzIGZvciBlYWNoIG1lc3NhZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIxNzU2NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEFkZGVkIHRlc3RzIGZvciBkZWNvZGluZyByZXBsaWVzIGZvciBzeW5jIGFu
ZCBhc3luYyBtZXNzYWdlcyBhbmQgb25lIGZvciBhcmd1bWVudCBkZXNjcmlwdGlvbnMuCisKKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lQQ1Rlc3RpbmdBUEkubW06
CisgICAgICAgICgtW0lQQ1Rlc3RpbmdBUElEZWxlZ2F0ZSB3ZWJWaWV3OnJ1bkphdmFTY3JpcHRU
ZXh0SW5wdXRQYW5lbFdpdGhQcm9tcHQ6ZGVmYXVsdFRleHQ6aW5pdGlhdGVkQnlGcmFtZTpjb21w
bGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKC1bSVBDVGVzdGluZ0FQSURlbGVnYXRlIF93ZWJW
aWV3OndlYkNvbnRlbnRQcm9jZXNzRGlkVGVybWluYXRlV2l0aFJlYXNvbjpdKToKKyAgICAgICAg
KElQQ1Rlc3RpbmdBUEkuRGVjb2Rlc1JlcGx5QXJndW1lbnRzRm9yUHJvbXB0KToKKyAgICAgICAg
KElQQ1Rlc3RpbmdBUEkuRGVjb2Rlc1JlcGx5QXJndW1lbnRzRm9yQXN5bmNNZXNzYWdlKToKKyAg
ICAgICAgKElQQ1Rlc3RpbmdBUEkuRGVzY3JpYmVzQXJndW1lbnRzKToKKwogMjAyMC0xMC0xMiAg
RGV2aW4gUm91c3NvICA8ZHJvdXNzb0BhcHBsZS5jb20+CiAKICAgICAgICAgQ1NTICJhbnktcG9p
bnRlcjpmaW5lIiBtZWRpYSBxdWVyeSBmYWxzZSBvbiBpUGFkL1BlbmNpbApJbmRleDogVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JUENUZXN0aW5nQVBJLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSVBDVGVzdGluZ0FQ
SS5tbQkocmV2aXNpb24gMjY4MjQ2KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9JUENUZXN0aW5nQVBJLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw5ICszNCwxMiBA
QAogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogCiBzdGF0aWMgYm9vbCBkb25lID0gZmFsc2U7
CitzdGF0aWMgYm9vbCBkaWRDcmFzaCA9IGZhbHNlOwogc3RhdGljIFJldGFpblB0cjxOU1N0cmlu
Zz4gYWxlcnRNZXNzYWdlOworc3RhdGljIFJldGFpblB0cjxOU1N0cmluZz4gcHJvbXB0RGVmYXVs
dDsKK3N0YXRpYyBSZXRhaW5QdHI8TlNTdHJpbmc+IHByb21wdFJlc3VsdDsKIAotQGludGVyZmFj
ZSBJUENUZXN0aW5nQVBJRGVsZWdhdGUgOiBOU09iamVjdCA8V0tVSURlbGVnYXRlPgorQGludGVy
ZmFjZSBJUENUZXN0aW5nQVBJRGVsZWdhdGUgOiBOU09iamVjdCA8V0tVSURlbGVnYXRlLCBXS05h
dmlnYXRpb25EZWxlZ2F0ZT4KIEBlbmQKICAgICAKIEBpbXBsZW1lbnRhdGlvbiBJUENUZXN0aW5n
QVBJRGVsZWdhdGUKQEAgLTQ4LDYgKzUxLDE5IEBAIC0gKHZvaWQpd2ViVmlldzooV0tXZWJWaWV3
ICopd2ViVmlldyBydW4KICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwogfQogCistICh2b2lkKXdl
YlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgcnVuSmF2YVNjcmlwdFRleHRJbnB1dFBhbmVsV2l0
aFByb21wdDooTlNTdHJpbmcgKilwcm9tcHQgZGVmYXVsdFRleHQ6KE5TU3RyaW5nICopZGVmYXVs
dFRleHQgaW5pdGlhdGVkQnlGcmFtZTooV0tGcmFtZUluZm8gKilmcmFtZSBjb21wbGV0aW9uSGFu
ZGxlcjoodm9pZCAoXikoTlNTdHJpbmcgKiBfTnVsbGFibGUpKWNvbXBsZXRpb25IYW5kbGVyCit7
CisgICAgcHJvbXB0RGVmYXVsdCA9IGRlZmF1bHRUZXh0OworICAgIGRvbmUgPSB0cnVlOworICAg
IGNvbXBsZXRpb25IYW5kbGVyKHByb21wdFJlc3VsdC5nZXQoKSk7Cit9CisKKy0gKHZvaWQpX3dl
YlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgd2ViQ29udGVudFByb2Nlc3NEaWRUZXJtaW5hdGVX
aXRoUmVhc29uOihfV0tQcm9jZXNzVGVybWluYXRpb25SZWFzb24pcmVhc29uCit7CisgICAgZGlk
Q3Jhc2ggPSBmYWxzZTsKKyAgICBkb25lID0gdHJ1ZTsKK30KKwogQGVuZAogCiBURVNUKElQQ1Rl
c3RpbmdBUEksIElzRGlzYWJsZWRCeURlZmF1bHQpCkBAIC04Nyw0ICsxMDMsNzkgQEAgVEVTVChJ
UENUZXN0aW5nQVBJLCBDYW5TZW5kQWxlcnQpCiAgICAgRVhQRUNUX1NUUkVRKFthbGVydE1lc3Nh
Z2UgVVRGOFN0cmluZ10sICJoaSIpOwogfQogCitURVNUKElQQ1Rlc3RpbmdBUEksIERlY29kZXNS
ZXBseUFyZ3VtZW50c0ZvclByb21wdCkKK3sKKyAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmln
dXJhdGlvbj4gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9u
IGFsbG9jXSBpbml0XSk7CisgICAgZm9yIChfV0tJbnRlcm5hbERlYnVnRmVhdHVyZSAqZmVhdHVy
ZSBpbiBbV0tQcmVmZXJlbmNlcyBfaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzXSkgeworICAgICAgICBp
ZiAoW2ZlYXR1cmUua2V5IGlzRXF1YWxUb1N0cmluZzpAIklQQ1Rlc3RpbmdBUElFbmFibGVkIl0p
IHsKKyAgICAgICAgICAgIFtbY29uZmlndXJhdGlvbiBwcmVmZXJlbmNlc10gX3NldEVuYWJsZWQ6
WUVTIGZvckludGVybmFsRGVidWdGZWF0dXJlOmZlYXR1cmVdOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICB9CisgICAgUmV0YWluUHRyPFRlc3RXS1dlYlZpZXc+IHdlYlZpZXcg
PSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0
KDAsIDAsIDMwMCwgMzAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKKwor
ICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbSVBDVGVzdGluZ0FQSURlbGVnYXRlIGFsbG9j
XSBpbml0XSk7CisgICAgW3dlYlZpZXcgc2V0VUlEZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQoKV07CisK
KyAgICBkb25lID0gZmFsc2U7CisgICAgcHJvbXB0UmVzdWx0ID0gQCJmb28iOworICAgIFt3ZWJW
aWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzpAIjwhRE9DVFlQRSBodG1sPjxzY3JpcHQ+
cmVzdWx0ID0gSVBDLnNlbmRTeW5jTWVzc2FnZSgnVUknLCBJUEMud2ViUGFnZVByb3h5SUQsIElQ
Qy5tZXNzYWdlcy5XZWJQYWdlUHJveHlfUnVuSmF2YVNjcmlwdFByb21wdC5uYW1lLCAxMDAsIgor
ICAgICAgICAiW3t0eXBlOiAndWludDY0X3QnLCB2YWx1ZTogSVBDLmZyYW1lSWRlbnRpZmllcn0s
IHt0eXBlOiAnRnJhbWVJbmZvRGF0YSd9LCB7J3R5cGUnOiAnU3RyaW5nJywgJ3ZhbHVlJzogJ2hp
J30sIHsndHlwZSc6ICdTdHJpbmcnLCAndmFsdWUnOiAnYmFyJ31dKTs8L3NjcmlwdD4iXTsKKyAg
ICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOworCisgICAgRVhQRUNUX1NUUkVRKFtw
cm9tcHREZWZhdWx0IFVURjhTdHJpbmddLCAiYmFyIik7CisgICAgRVhQRUNUX1NUUkVRKFtbd2Vi
VmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiSlNPTi5zdHJpbmdpZnkocmVzdWx0
LmFyZ3VtZW50cykiXSBVVEY4U3RyaW5nXSwgIlt7XCJ0eXBlXCI6XCJTdHJpbmdcIixcInZhbHVl
XCI6XCJmb29cIn1dIik7Cit9CisKKyNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNT
KQorVEVTVChJUENUZXN0aW5nQVBJLCBEZWNvZGVzUmVwbHlBcmd1bWVudHNGb3JBc3luY01lc3Nh
Z2UpCit7CisgICAgUmV0YWluUHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRp
b24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOworICAg
IGZvciAoX1dLSW50ZXJuYWxEZWJ1Z0ZlYXR1cmUgKmZlYXR1cmUgaW4gW1dLUHJlZmVyZW5jZXMg
X2ludGVybmFsRGVidWdGZWF0dXJlc10pIHsKKyAgICAgICAgaWYgKFtmZWF0dXJlLmtleSBpc0Vx
dWFsVG9TdHJpbmc6QCJJUENUZXN0aW5nQVBJRW5hYmxlZCJdKSB7CisgICAgICAgICAgICBbW2Nv
bmZpZ3VyYXRpb24gcHJlZmVyZW5jZXNdIF9zZXRFbmFibGVkOllFUyBmb3JJbnRlcm5hbERlYnVn
RmVhdHVyZTpmZWF0dXJlXTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQor
ICAgIFJldGFpblB0cjxUZXN0V0tXZWJWaWV3PiB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dl
YlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCAzMDAsIDMwMCkgY29u
ZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CisKKyAgICBhdXRvIGRlbGVnYXRlID0g
YWRvcHROUyhbW0lQQ1Rlc3RpbmdBUElEZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworICAgIFt3ZWJW
aWV3IHNldFVJRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOworCisgICAgZG9uZSA9IGZhbHNlOwor
ICAgIHByb21wdFJlc3VsdCA9IEAiZm9vIjsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9h
ZEhUTUxTdHJpbmc6QCI8IURPQ1RZUEUgaHRtbD48c2NyaXB0PklQQy5zZW5kTWVzc2FnZShcIk5l
dHdvcmtpbmdcIiwgMCwgSVBDLm1lc3NhZ2VzLk5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNz
X0hhc1N0b3JhZ2VBY2Nlc3MubmFtZSwiCisgICAgICAgICJbe3R5cGU6ICdSZWdpc3RyYWJsZURv
bWFpbicsIHZhbHVlOiAnaHR0cHM6Ly9pcGN0ZXN0aW5nYXBpLmNvbSd9LCB7dHlwZTogJ1JlZ2lz
dHJhYmxlRG9tYWluJywgdmFsdWU6ICdodHRwczovL3dlYmtpdC5vcmcnfSwge3R5cGU6ICd1aW50
NjRfdCcsIHZhbHVlOiBJUEMuZnJhbWVJZGVudGlmaWVyfSwiCisgICAgICAgICJ7dHlwZTogJ3Vp
bnQ2NF90JywgdmFsdWU6IElQQy5wYWdlSWRlbnRpZmllcn1dKS50aGVuKChyZXN1bHQpID0+IGFs
ZXJ0KEpTT04uc3RyaW5naWZ5KHJlc3VsdC5hcmd1bWVudHMpKSk7PC9zY3JpcHQ+Il07CisgICAg
VGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKKworICAgIEVYUEVDVF9TVFJFUShbYWxl
cnRNZXNzYWdlIFVURjhTdHJpbmddLCAiW3tcInR5cGVcIjpcImJvb2xcIixcInZhbHVlXCI6ZmFs
c2V9XSIpOworfQorI2VuZGlmCisKK1RFU1QoSVBDVGVzdGluZ0FQSSwgRGVzY3JpYmVzQXJndW1l
bnRzKQoreworICAgIFJldGFpblB0cjxXS1dlYlZpZXdDb25maWd1cmF0aW9uPiBjb25maWd1cmF0
aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKKyAg
ICBmb3IgKF9XS0ludGVybmFsRGVidWdGZWF0dXJlICpmZWF0dXJlIGluIFtXS1ByZWZlcmVuY2Vz
IF9pbnRlcm5hbERlYnVnRmVhdHVyZXNdKSB7CisgICAgICAgIGlmIChbZmVhdHVyZS5rZXkgaXNF
cXVhbFRvU3RyaW5nOkAiSVBDVGVzdGluZ0FQSUVuYWJsZWQiXSkgeworICAgICAgICAgICAgW1tj
b25maWd1cmF0aW9uIHByZWZlcmVuY2VzXSBfc2V0RW5hYmxlZDpZRVMgZm9ySW50ZXJuYWxEZWJ1
Z0ZlYXR1cmU6ZmVhdHVyZV07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0K
KyAgICBSZXRhaW5QdHI8VGVzdFdLV2ViVmlldz4gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tX
ZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgMzAwLCAzMDApIGNv
bmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0pOworCisgICAgYXV0byBkZWxlZ2F0ZSA9
IGFkb3B0TlMoW1tJUENUZXN0aW5nQVBJRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICBbd2Vi
VmlldyBzZXRVSURlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKworICAgIGRvbmUgPSBmYWxzZTsK
KyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmc6QCI8IURPQ1RZUEUgaHRt
bD48c2NyaXB0PndpbmRvdy5hcmdzID0gSVBDLm1lc3NhZ2VzLldlYlBhZ2VQcm94eV9SdW5KYXZh
U2NyaXB0QWxlcnQuYXJndW1lbnRzOyBhbGVydCgnb2snKTwvc2NyaXB0PiJdOworICAgIFRlc3RX
ZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CisKKyAgICBFWFBFQ1RfU1RSRVEoW1t3ZWJWaWV3
IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJhcmdzLmxlbmd0aCJdIFVURjhTdHJpbmdd
LCAiMyIpOworICAgIEVYUEVDVF9TVFJFUShbW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2
YVNjcmlwdDpAImFyZ3NbMF0udHlwZSJdIFVURjhTdHJpbmddLCAiV2ViQ29yZTo6RnJhbWVJZGVu
dGlmaWVyIik7CisgICAgRVhQRUNUX1NUUkVRKFtbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdK
YXZhU2NyaXB0OkAiYXJnc1sxXS50eXBlIl0gVVRGOFN0cmluZ10sICJXZWJLaXQ6OkZyYW1lSW5m
b0RhdGEiKTsKKyAgICBFWFBFQ1RfU1RSRVEoW1t3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0ph
dmFTY3JpcHQ6QCJhcmdzWzJdLm5hbWUiXSBVVEY4U3RyaW5nXSwgIm1lc3NhZ2UiKTsKKyAgICBF
WFBFQ1RfU1RSRVEoW1t3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJhcmdz
WzJdLnR5cGUiXSBVVEY4U3RyaW5nXSwgIlN0cmluZyIpOworfQorCiAjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>411251</attachid>
            <date>2020-10-13 14:00:49 -0700</date>
            <delta_ts>2020-10-13 14:17:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217565-20201013140048.patch</filename>
            <type>text/plain</type>
            <size>69662</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjgyNDYpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc4IEBACisyMDIwLTEwLTEyICBSeW9zdWtlIE5p
d2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIElQQyB0ZXN0aW5nIEpTIEFQSSBzaG91
bGQgZXhwb3NlIGEgcmVwbHkgYW5kIGRlc2NyaWJlIHRoZSBsaXN0IG9mIGFyZ3VtZW50cyBmb3Ig
ZWFjaCBtZXNzYWdlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMTc1NjUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUaGlzIHBhdGNoIG1ha2VzIElQQy5zZW5kTWVzc2FnZSBhbmQgSVBDLnNlbmRTeW5jTWVz
c2FnZSBkZWNvZGUgdGhlIHJlcGx5LiBJUEMuc2VuZFN5bmNNZXNzYWdlIG5vdyByZXR1cm5zCisg
ICAgICAgIGEgZGljdGlvbmFyeSB3aXRoIHR3byBrZXlzOiAiYnVmZmVyIiBhbmQgImFyZ3VtZW50
cyIsIHRoZSBmaXJzdCBvZiB3aGljaCByZXR1cm5zIEFycmF5QnVmZmVyIG9mIHRoZSBkZWNvZGVk
CisgICAgICAgIG1lc3NhZ2UgcmVwbHkgYW5kIHRoZSBzZWNvbmQgb2Ygd2hpY2ggaXMgYW4gYXJy
YXkgb2YgZGVjb2RlZCBhcmd1bWVudHMgd2hlcmUgdGhlcmUgd2FzIGFuIGFwcHJvcHJpYXRlIEpT
CisgICAgICAgIGJpbmRpbmcgY29kZSBleGlzdGVkIGZvciB0aGUgYXJndW1lbnQgdHlwZS4gSVBD
LnNlbmRNZXNzYWdlIG5vdyByZXR1cm5zIGEgUHJvbWlzZSB3aGljaCBjYW4gZWl0aGVyIHJlc29s
dmUKKyAgICAgICAgd2l0aCB0aGUgc2FtZSBkaWN0aW9uYXJ5IGFzIElQQy5zZW5kU3luY01lc3Nh
Z2Ugb3IgcmVqZWN0IHdoZW4gdGhlIGRlY29kaW5nIGZhaWxzLgorCisgICAgICAgIEluIGFkZGl0
aW9uLCB0aGlzIHBhdGNoIGV4cG9zZXMgYSBkaWN0aW9uYXJ5IGRlc2NyaWJpbmcgZWFjaCBJUEMg
bWVzc2FnZSBhcmd1bWVudCdzIHR5cGUgYW5kIHBhcmFtZXRlciBuYW1lLgorCisgICAgICAgIElu
IG9yZGVyIHRvIGFkZCB0aGVzZSB0d28gZnVuY3Rpb25hbGl0aWVzLCB0aGlzIHBhdGNoIGFkZHMg
YSBuZXcgc3RlcCBpbiBnZW5lcmF0ZS1tZXNzYWdlLXJlY2VpdmVyLnB5IHRvCisgICAgICAgIGdl
bmVyYXRlIE1lc3NhZ2VBcmd1bWVudERlc2NyaXB0aW9ucy5jcHAsIHdoaWNoIGNvbnRhaW5zIGZ1
bmN0aW9ucyB3aGljaCBrbm93IGhvdyB0byBkZWNvZGUgYXJndW1lbnRzIG9mCisgICAgICAgIGFu
eSBJUEMgbWVzc2FnZSBhbmQgY3JlYXRlIGEgSlMgZGljdGlvbmFyeSBkZXNjcmliaW5nIGl0IGFz
IHdlbGwgYXMgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIGRlc2NyaXB0aW9ucyBvZgorICAgICAgICBh
cmd1bWVudHMgb3IgcmVwbHkgYXJndW1lbnRzLgorCisgICAgICAgIEZpbmFsbHksIHRoaXMgcGF0
Y2ggYWRkcyBlbmNvZGVycyBmb3IgYSBmZXcgdHlwZXMgZm91bmQgdG8gYmUgdmVyeSBjb21tb24g
YWZ0ZXIgcjI2ODIzOSBoYWQgYmVlbiBsYW5kZWQuCisKKyAgICAgICAgVGVzdHM6IFRlc3RXZWJL
aXRBUEkuSVBDVGVzdGluZ0FQSS5EZWNvZGVzUmVwbHlBcmd1bWVudHNGb3JQcm9tcHQKKyAgICAg
ICAgICAgICAgIFRlc3RXZWJLaXRBUEkuSVBDVGVzdGluZ0FQSS5EZWNvZGVzUmVwbHlBcmd1bWVu
dHNGb3JBc3luY01lc3NhZ2UKKyAgICAgICAgICAgICAgIFRlc3RXZWJLaXRBUEkuSVBDVGVzdGlu
Z0FQSS5EZXNjcmliZXNBcmd1bWVudHMKKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAg
ICAgICAqIERlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0OgorICAgICAgICAqIERlcml2
ZWRTb3VyY2VzLm1ha2U6CisgICAgICAgICogUGxhdGZvcm0vSVBDL0RlY29kZXIuaDoKKyAgICAg
ICAgKElQQzo6RGVjb2Rlcjo6YnVmZmVyIGNvbnN0KToKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMv
SlNJUENCaW5kaW5nLmg6IEFkZGVkLgorICAgICAgICAoanNWYWx1ZUZvckRlY29kZWRBcmd1bWVu
dFZhbHVlKTogQWRkZWQuIEEgdGVtcGxhdGUgZnVuY3Rpb24gdG8gY29uc3RydWN0IGEgSlMgdmFs
dWUgZm9yIGEgZ2l2ZW4gQysrIHZhbHVlLgorICAgICAgICAoanNWYWx1ZUZvckRlY29kZWROdW1l
cmljQXJndW1lbnRWYWx1ZSk6IEFkZGVkLiBBIGhlbHBlciBmb3IgY29uc3RydWN0aW5nIGEgSlMg
dmFsdWUgZm9yIG51bWVyaWMgdmFsdWVzLgorICAgICAgICAoanNWYWx1ZUZvckRlY29kZWRBcmd1
bWVudFJlY3QpOiBBZGRlZC4gRGl0dG8gZm9yIEludFJlY3QgYW5kIEZsb2F0UmVjdC4KKyAgICAg
ICAgKERlY29kZWRBcmd1bWVudEpTVmFsdWVDb252ZXJ0ZXIpOiBBZGRlZC4gQSBoZWxwZXIgY2xh
c3MgdG8gY29uc3RydWN0IEpTIHZhbHVlcyBmb3IgYSB0dXBsZSBvZiB2YWx1ZXMgdXNpbmcKKyAg
ICAgICAgcGFydGlhbCB0ZW1wbGF0ZSBzcGVjaWFsaXphdGlvbnMuCisgICAgICAgIChEZWNvZGVk
QXJndW1lbnRKU1ZhbHVlQ29udmVydGVyOjpjb252ZXJ0KTogQWRkZWQuCisgICAgICAgIChqc1Zh
bHVlRm9yQXJndW1lbnRUdXBsZSk6IEFkZGVkLiBBIGhlbHBlciB0byBjb25zdHJ1Y3QgYSBKUyBh
cnJheSBmb3IgdGhlIGRlY29kZWQgSVBDIGFyZ3VtZW50cy4KKyAgICAgICAgKGpzVmFsdWVGb3JE
ZWNvZGVkQXJndW1lbnRzKTogQWRkZWQuCisgICAgICAgICogUGxhdGZvcm0vSVBDL01lc3NhZ2VB
cmd1bWVudERlc2NyaXB0aW9ucy5oOiBBZGRlZC4KKyAgICAgICAgKElQQzo6QXJndW1lbnREZXNj
cmlwdGlvbik6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvZ2VuZXJhdGUtbWVzc2FnZS1yZWNl
aXZlci5weToKKyAgICAgICAgKG1haW4pOiBHZW5lcmF0ZSBNZXNzYWdlQXJndW1lbnREZXNjcmlw
dGlvbnMuY3BwLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5OgorICAgICAg
ICAoaGVhZGVyc19mb3JfdHlwZSk6IFJlbW92ZWQgdGhlIHNwZWNpYWwgY2FzZSBmb3IgUGF5bWVu
dE1ldGhvZFVwZGF0ZSBub3cgdGhhdCBpdCdzIGluIGl0cyBvd24gaGVhZGVyLiBBbHNvCisgICAg
ICAgIGFkZGVkIG1hZGUgd2VicnRjOjpXZWJLaXRFbmNvZGVkRnJhbWVJbmZvIGluY2x1ZGUgTGli
V2ViUlRDRW51bVRyYWl0cy5oIGFzIGl0IHVzZXMgd2VicnRjOjpWaWRlb0ZyYW1lVHlwZS4KKyAg
ICAgICAgKGNvbGxlY3RfaGVhZGVyX2NvbmRpdGlvbnNfZm9yX3JlY2VpdmVyKTogRXh0cmFjdGVk
IGZyb20gZ2VuZXJhdGVfbWVzc2FnZV9oYW5kbGVyLgorICAgICAgICAoZ2VuZXJhdGVfaGVhZGVy
X2luY2x1ZGVzX2Zyb21fY29uZGl0aW9ucyk6IERpdHRvLgorICAgICAgICAoZ2VuZXJhdGVfbWVz
c2FnZV9oYW5kbGVyKToKKyAgICAgICAgKGdlbmVyYXRlX2pzX3ZhbHVlX2NvbnZlcnNpb25fZnVu
Y3Rpb24pOiBBZGRlZC4KKyAgICAgICAgKGdlbmVyYXRlX2pzX2FyZ3VtZW50X2Rlc2NyaXB0aW9u
cyk6IEFkZGVkLgorICAgICAgICAoZ2VuZXJhdGVfbWVzc2FnZV9hcmd1bWVudF9kZXNjcmlwdGlv
bl9pbXBsZW1lbnRhdGlvbik6IEFkZGVkLgorICAgICAgICAqIFNoYXJlZC9BcHBsZVBheS9BcHBs
ZVBheVBheW1lbnRTZXR1cEZlYXR1cmVzV2ViS2l0Lmg6IEZpeGVkIGEgYnVnIHRoYXQgd2Ugd2Vy
ZSBub3QgZm9yd2FyZCBkZWNsYXJpbmcgTlNBcnJheS4KKyAgICAgICAgKiBTb3VyY2VzQ29jb2Eu
dHh0OiBBZGRlZCBNZXNzYWdlQXJndW1lbnREZXNjcmlwdGlvbnMuY3BwIGFzIGEgbm9uLXVuaWZp
ZWQgY3BwIGZpbGUgYXMgaXRzIHNpemUgaXMgYXJvdW5kIDFNQi4KKyAgICAgICAgKiBXZWJLaXQu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
SVBDVGVzdGluZ0FQSS5jcHA6CisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBD
OjpzdGF0aWNWYWx1ZXMpOiBBZGRlZCB0aGUgc2Vzc2lvbiBJRCBhbmQgcGFnZSBJRCBhcyBzdGF0
aWMgdmFyaWFibGVzLgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjplbmNvZGVQb2lu
dFR5cGUpOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6ZW5jb2RlUmVj
dFR5cGUpOiBGaXhlZCB0aGUgYnVnIHdhcyB0aGF0IHRoaXMgY29kZSB3YXNuJ3QgY2hlY2tpbmcg
Zm9yIGFueSBleGNlcHRpb25zLgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjplbmNv
ZGVOdW1lcmljVHlwZSk6IFJlbmFtZWQgZnJvbSBlbmNvZGVJbnRlZ3JhbFR5cGUgc2luY2UgdGhp
cyBmdW5jdGlvbiBpcyBub3cgdXNlZAorICAgICAgICB0byBlbmNvZGUgZG91YmxlIGFuZCBmbG9h
dCwgbm90IGp1c3QgaW50ZWdyYWwgdHlwZXMuCisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdB
UEk6OmVuY29kZUFyZ3VtZW50KTogQWRkZWQgdGhlIHN1cHBvcnQgZm9yIEludFBvaW50LCBGbG9h
dFBvaW50LCBVUkwsIFJlZ2lzdHJhYmxlRG9tYWluLAorICAgICAgICBkb3VibGUsIGFuZCBmbG9h
dCBhbGwgb2Ygd2hpY2ggdHVybmVkIG91dCB0byBiZSBpbiB0aGUgdG9wIDIwIG1vc3QgY29tbW9u
IHR5cGVzLgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpqc1Jlc3VsdEZyb21SZXBs
eURlY29kZXIpOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJUEM6
OnNlbmRNZXNzYWdlKTogQWRkZWQgdGhlIGNvZGUgdG8gcmV0dXJuIFByb21pc2Ugd2hlbiB0aGVy
ZSBpcyBhIHJlcGx5IGFuZCByZXNvbHZlCisgICAgICAgIGl0IHdpdGggdGhlIEpTIG9iamVjdCBk
ZXNjcmliaW5nIHRoZSBkZWNvZGVkIGFyZ3VtZW50LiBXZSB1c2UgbWVzc2FnZVJlcGx5QXJndW1l
bnREZXNjcmlwdGlvbnMgdG8gZmlndXJlIG91dAorICAgICAgICB3aGV0aGVyIHRoZXJlIGlzIGEg
cmVwbHkgb3Igbm90LgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpKU0lQQzo6c2Vu
ZFN5bmNNZXNzYWdlKTogRGVjb2RlIHRoZSByZXBseSBhbmQgcmV0dXJuIGEgSlMgb2JqZWN0IHdo
aWNoIGRlc2NyaWJlcyBpdC4KKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJUEM6
OmZyYW1lSUQpOiBSZW5hbWVkIGZyb20gZnJhbWVJZGVudGlmaWVyIHRvIGJlIGNvbnNpc3RlbnQu
CisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDOjpwYWdlSUQpOiBBZGRlZC4K
KyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJUEM6OnNlc3Npb25JRCk6IEFkZGVk
LgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpjcmVhdGVKU0FycmF5Rm9yQXJndW1l
bnREZXNjcmlwdGlvbnMpOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6
SlNJUEM6Om1lc3NhZ2VzKTogQWRkZWQgdGhlIGNvZGUgdG8gZ2VuZXJhdGUgZGVzY3JpcHRpb25z
IGZvciBhcmd1bWVudHMuCisKIDIwMjAtMTAtMDggIENocmlzIEZsZWl6YWNoICA8Y2ZsZWl6YWNo
QGFwcGxlLmNvbT4KIAogICAgICAgICBBWDogV2Vic2l0ZSBXYXJuaW5nIHBhZ2UgaXMgaW5hY2Nl
c3NpYmxlCkluZGV4OiBTb3VyY2UvV2ViS2l0L0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI2ODI0NikKKysrIFNvdXJj
ZS9XZWJLaXQvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTQyOCw2ICs0MjgsNyBA
QCBtYWNybyhHRU5FUkFURV9NRVNTQUdFX1NPVVJDRVMgX291dHB1dF9zCiAKICAgICBhZGRfY3Vz
dG9tX2NvbW1hbmQoCiAgICAgICAgIE9VVFBVVAorICAgICAgICAgICAgJHtXZWJLaXRfREVSSVZF
RF9TT1VSQ0VTX0RJUn0vTWVzc2FnZUFyZ3VtZW50RGVzY3JpcHRpb25zLmNwcAogICAgICAgICAg
ICAgJHtXZWJLaXRfREVSSVZFRF9TT1VSQ0VTX0RJUn0vTWVzc2FnZU5hbWVzLmNwcAogICAgICAg
ICAgICAgJHtXZWJLaXRfREVSSVZFRF9TT1VSQ0VTX0RJUn0vTWVzc2FnZU5hbWVzLmgKICAgICAg
ICAgICAgICR7X291dHB1dHN9CkluZGV4OiBTb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLW91
dHB1dC54Y2ZpbGVsaXN0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJj
ZXMtb3V0cHV0LnhjZmlsZWxpc3QJKHJldmlzaW9uIDI2ODI0NikKKysrIFNvdXJjZS9XZWJLaXQv
RGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QJKHdvcmtpbmcgY29weSkKQEAgLTY4LDYg
KzY4LDcgQEAgJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYgogJChCVUlM
VF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvTWVkaWFQbGF5ZXJQcml2YXRl
UmVtb3RlTWVzc2FnZVJlY2VpdmVyLmNwcAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRT
b3VyY2VzL1dlYktpdDIvTWVkaWFQbGF5ZXJQcml2YXRlUmVtb3RlTWVzc2FnZXMuaAogJChCVUlM
VF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvTWVkaWFQbGF5ZXJQcml2YXRl
UmVtb3RlTWVzc2FnZXNSZXBsaWVzLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291
cmNlcy9XZWJLaXQyL01lc3NhZ2VBcmd1bWVudERlc2NyaXB0aW9ucy5jcHAKICQoQlVJTFRfUFJP
RFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL01lc3NhZ2VOYW1lcy5jcHAKICQoQlVJ
TFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL01lc3NhZ2VOYW1lcy5oCiAk
KEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9OUE9iamVjdE1lc3Nh
Z2VSZWNlaXZlck1lc3NhZ2VSZWNlaXZlci5jcHAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvRGVyaXZl
ZFNvdXJjZXMubWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2Vz
Lm1ha2UJKHJldmlzaW9uIDI2ODI0NikKKysrIFNvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMu
bWFrZQkod29ya2luZyBjb3B5KQpAQCAtMjU3LDcgKzI1Nyw3IEBAIE1FU1NBR0VfUkVDRUlWRVJf
RklMRVMgOj0gJChhZGRzdWZmaXggTWUKIE1FU1NBR0VTX0ZJTEVTIDo9ICQoYWRkc3VmZml4IE1l
c3NhZ2VzLmgsJChub3RkaXIgJChNRVNTQUdFX1JFQ0VJVkVSUykpKQogTUVTU0FHRV9SRVBMSUVT
X0ZJTEVTIDo9ICQoYWRkc3VmZml4IE1lc3NhZ2VzUmVwbGllcy5oLCQobm90ZGlyICQoTUVTU0FH
RV9SRUNFSVZFUlMpKSkKIAotR0VORVJBVEVEX01FU1NBR0VTX0ZJTEVTIDo9ICQoTUVTU0FHRV9S
RUNFSVZFUl9GSUxFUykgJChNRVNTQUdFU19GSUxFUykgJChNRVNTQUdFX1JFUExJRVNfRklMRVMp
IE1lc3NhZ2VOYW1lcy5oIE1lc3NhZ2VOYW1lcy5jcHAKK0dFTkVSQVRFRF9NRVNTQUdFU19GSUxF
UyA6PSAkKE1FU1NBR0VfUkVDRUlWRVJfRklMRVMpICQoTUVTU0FHRVNfRklMRVMpICQoTUVTU0FH
RV9SRVBMSUVTX0ZJTEVTKSBNZXNzYWdlTmFtZXMuaCBNZXNzYWdlTmFtZXMuY3BwIE1lc3NhZ2VB
cmd1bWVudERlc2NyaXB0aW9ucy5jcHAKIEdFTkVSQVRFRF9NRVNTQUdFU19GSUxFU19BU19QQVRU
RVJOUyA6PSAkKHN1YnN0IC4sJSwkKEdFTkVSQVRFRF9NRVNTQUdFU19GSUxFUykpCiAKIE1FU1NB
R0VTX0lOX0ZJTEVTIDo9ICQoYWRkc3VmZml4IC5tZXNzYWdlcy5pbiwkKE1FU1NBR0VfUkVDRUlW
RVJTKSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQJKHJldmlzaW9uIDI2ODI0NikKKysrIFNv
dXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNjU4LDYgKzY1
OCw3IEBAIEdQVVByb2Nlc3NQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKIEdQVVByb2Nlc3NNZXNz
YWdlUmVjZWl2ZXIuY3BwCiBMaWJXZWJSVENDb2RlY3NQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAK
IExpYldlYlJUQ0NvZGVjc01lc3NhZ2VSZWNlaXZlci5jcHAKK01lc3NhZ2VBcmd1bWVudERlc2Ny
aXB0aW9ucy5jcHAgQG5vLXVuaWZ5CiBNZXNzYWdlTmFtZXMuY3BwCiBSZW1vdGVBdWRpb0Rlc3Rp
bmF0aW9uTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAKIFJlbW90ZUF1ZGlvRGVzdGluYXRpb25Q
cm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBD
L0RlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9EZWNv
ZGVyLmgJKHJldmlzaW9uIDI2ODI0NikKKysrIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0Rl
Y29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzIsNiArNzIsNyBAQCBwdWJsaWM6CiAKICAgICBz
dGF0aWMgc3RkOjp1bmlxdWVfcHRyPERlY29kZXI+IHVud3JhcEZvclRlc3RpbmcoRGVjb2RlciYp
OwogCisgICAgY29uc3QgdWludDhfdCogYnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXI7
IH0KICAgICBzaXplX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXJFbmQgLSBtX2J1
ZmZlcjsgfQogCiAgICAgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsg
cmV0dXJuIG1fYnVmZmVyUG9zICE9IG51bGxwdHI7IH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvUGxh
dGZvcm0vSVBDL0pTSVBDQmluZGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvUGxh
dGZvcm0vSVBDL0pTSVBDQmluZGluZy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJLaXQv
UGxhdGZvcm0vSVBDL0pTSVBDQmluZGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjU1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJEZWNvZGVyLmgiCisj
aW5jbHVkZSAiSGFuZGxlTWVzc2FnZS5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQXJy
YXkuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0dsb2JhbE9iamVjdC5oPgorI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0pTT2JqZWN0Lmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
T2JqZWN0Q29uc3RydWN0b3IuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVnaXN0cmFibGVE
b21haW4uaD4KKyNpbmNsdWRlIDx3dGYvT2JqZWN0SWRlbnRpZmllci5oPgorI2luY2x1ZGUgPHd0
Zi9VUkwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgc3RkOjplbmFibGVfaWZfdDwhc3RkOjppc19hcml0aG1ldGljPFQ+Ojp2YWx1ZSAm
JiAhc3RkOjppc19lbnVtPFQ+Ojp2YWx1ZT4qID0gbnVsbHB0cj4KK0pTQzo6SlNWYWx1ZSBqc1Zh
bHVlRm9yRGVjb2RlZEFyZ3VtZW50VmFsdWUoSlNDOjpKU0dsb2JhbE9iamVjdCosIGNvbnN0IFQm
KQoreworICAgIHJldHVybiBKU0M6OmpzVW5kZWZpbmVkKCk7Cit9CisKK3RlbXBsYXRlPD4KK0pT
Qzo6SlNWYWx1ZSBqc1ZhbHVlRm9yRGVjb2RlZEFyZ3VtZW50VmFsdWUoSlNDOjpKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIGF1dG8mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKyAgICBhdXRvKiBvYmplY3QgPSBKU0M6OmNvbnN0cnVjdEVtcHR5T2JqZWN0KGds
b2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSk7CisgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgSlNDOjpKU1ZhbHVlKCkpOworICAgIG9iamVjdC0+cHV0RGly
ZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ0eXBlIl9zKSwgSlNDOjpq
c05vbnRyaXZpYWxTdHJpbmcodm0sICJTdHJpbmciX3MpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBKU0M6OkpTVmFsdWUoKSk7CisgICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIEpT
Qzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInZhbHVlIl9zKSwgSlNDOjpqc05vbnRyaXZp
YWxTdHJpbmcodm0sIHZhbHVlKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlND
OjpKU1ZhbHVlKCkpOworICAgIHJldHVybiBvYmplY3Q7Cit9CisKK3RlbXBsYXRlPD4KK0pTQzo6
SlNWYWx1ZSBqc1ZhbHVlRm9yRGVjb2RlZEFyZ3VtZW50VmFsdWUoSlNDOjpKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBjb25zdCBVUkwmIHZhbHVlKQoreworICAgIHJldHVybiBqc1ZhbHVl
Rm9yRGVjb2RlZEFyZ3VtZW50VmFsdWUoZ2xvYmFsT2JqZWN0LCB2YWx1ZS5zdHJpbmcoKSk7Cit9
CisKK3RlbXBsYXRlPD4KK0pTQzo6SlNWYWx1ZSBqc1ZhbHVlRm9yRGVjb2RlZEFyZ3VtZW50VmFs
dWUoSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiYgdmFsdWUpCit7CisgICAgcmV0dXJuIGpzVmFsdWVGb3JEZWNvZGVkQXJn
dW1lbnRWYWx1ZShnbG9iYWxPYmplY3QsIHZhbHVlLnN0cmluZygpKTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgVCwgc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX2FyaXRobWV0aWM8VD46OnZhbHVl
PiogPSBudWxscHRyPgorSlNDOjpKU1ZhbHVlIGpzVmFsdWVGb3JEZWNvZGVkQXJndW1lbnRWYWx1
ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgVCkKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRSwg
c3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX2VudW08RT46OnZhbHVlPiogPSBudWxscHRyPgorSlND
OjpKU1ZhbHVlIGpzVmFsdWVGb3JEZWNvZGVkQXJndW1lbnRWYWx1ZShKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEUgdmFsdWUpCit7CisgICAgcmV0dXJuIGpzVmFsdWVGb3JEZWNv
ZGVkQXJndW1lbnRWYWx1ZShnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PHN0ZDo6dW5kZXJseWlu
Z190eXBlX3Q8RT4+KHZhbHVlKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIE51bWVyaWNUeXBl
PgorSlNDOjpKU1ZhbHVlIGpzVmFsdWVGb3JEZWNvZGVkTnVtZXJpY0FyZ3VtZW50VmFsdWUoSlND
OjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBOdW1lcmljVHlwZSB2YWx1ZSwgY29uc3Qg
U3RyaW5nJiB0eXBlKQoreworICAgIGF1dG8mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvKiBvYmplY3Qg
PSBKU0M6OmNvbnN0cnVjdEVtcHR5T2JqZWN0KGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5v
YmplY3RQcm90b3R5cGUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNDOjpK
U1ZhbHVlKCkpOworICAgIG9iamVjdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sICJ0eXBlIl9zKSwgSlNDOjpqc05vbnRyaXZpYWxTdHJpbmcodm0sIHR5cGUp
KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU0M6OkpTVmFsdWUoKSk7CisgICAg
b2JqZWN0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInZh
bHVlIl9zKSwgSlNDOjpKU1ZhbHVlKHZhbHVlKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgSlNDOjpKU1ZhbHVlKCkpOworICAgIHJldHVybiBvYmplY3Q7Cit9CisKK3RlbXBsYXRl
PD4KK0pTQzo6SlNWYWx1ZSBqc1ZhbHVlRm9yRGVjb2RlZEFyZ3VtZW50VmFsdWUoSlNDOjpKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBib29sIHZhbHVlKQoreworICAgIGF1dG8mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKyAgICBhdXRvKiBvYmplY3QgPSBKU0M6OmNvbnN0cnVjdEVtcHR5T2JqZWN0KGdsb2Jh
bE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgSlNDOjpKU1ZhbHVlKCkpOworICAgIG9iamVjdC0+cHV0RGlyZWN0
KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ0eXBlIl9zKSwgSlNDOjpqc05v
bnRyaXZpYWxTdHJpbmcodm0sICJib29sIikpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIEpTQzo6SlNWYWx1ZSgpKTsKKyAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidmFsdWUiX3MpLCBKU0M6OmpzQm9vbGVhbih2YWx1ZSkp
OworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTQzo6SlNWYWx1ZSgpKTsKKyAgICBy
ZXR1cm4gb2JqZWN0OworfQorCit0ZW1wbGF0ZTw+CitKU0M6OkpTVmFsdWUganNWYWx1ZUZvckRl
Y29kZWRBcmd1bWVudFZhbHVlKEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgZG91
YmxlIHZhbHVlKQoreworICAgIHJldHVybiBqc1ZhbHVlRm9yRGVjb2RlZE51bWVyaWNBcmd1bWVu
dFZhbHVlKGdsb2JhbE9iamVjdCwgdmFsdWUsICJkb3VibGUiKTsKK30KKwordGVtcGxhdGU8Pgor
SlNDOjpKU1ZhbHVlIGpzVmFsdWVGb3JEZWNvZGVkQXJndW1lbnRWYWx1ZShKU0M6OkpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIGZsb2F0IHZhbHVlKQoreworICAgIHJldHVybiBqc1ZhbHVl
Rm9yRGVjb2RlZE51bWVyaWNBcmd1bWVudFZhbHVlKGdsb2JhbE9iamVjdCwgdmFsdWUsICJmbG9h
dCIpOworfQorCit0ZW1wbGF0ZTw+CitKU0M6OkpTVmFsdWUganNWYWx1ZUZvckRlY29kZWRBcmd1
bWVudFZhbHVlKEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgaW50OF90IHZhbHVl
KQoreworICAgIHJldHVybiBqc1ZhbHVlRm9yRGVjb2RlZE51bWVyaWNBcmd1bWVudFZhbHVlKGds
b2JhbE9iamVjdCwgdmFsdWUsICJpbnQ4X3QiKTsKK30KKwordGVtcGxhdGU8PgorSlNDOjpKU1Zh
bHVlIGpzVmFsdWVGb3JEZWNvZGVkQXJndW1lbnRWYWx1ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIGludDE2X3QgdmFsdWUpCit7CisgICAgcmV0dXJuIGpzVmFsdWVGb3JEZWNv
ZGVkTnVtZXJpY0FyZ3VtZW50VmFsdWUoZ2xvYmFsT2JqZWN0LCB2YWx1ZSwgImludDE2X3QiKTsK
K30KKwordGVtcGxhdGU8PgorSlNDOjpKU1ZhbHVlIGpzVmFsdWVGb3JEZWNvZGVkQXJndW1lbnRW
YWx1ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGludDMyX3QgdmFsdWUpCit7
CisgICAgcmV0dXJuIGpzVmFsdWVGb3JEZWNvZGVkTnVtZXJpY0FyZ3VtZW50VmFsdWUoZ2xvYmFs
T2JqZWN0LCB2YWx1ZSwgImludDMyX3QiKTsKK30KKwordGVtcGxhdGU8PgorSlNDOjpKU1ZhbHVl
IGpzVmFsdWVGb3JEZWNvZGVkQXJndW1lbnRWYWx1ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIGludDY0X3QgdmFsdWUpCit7CisgICAgcmV0dXJuIGpzVmFsdWVGb3JEZWNvZGVk
TnVtZXJpY0FyZ3VtZW50VmFsdWUoZ2xvYmFsT2JqZWN0LCB2YWx1ZSwgImludDY0X3QiKTsKK30K
KwordGVtcGxhdGU8PgorSlNDOjpKU1ZhbHVlIGpzVmFsdWVGb3JEZWNvZGVkQXJndW1lbnRWYWx1
ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVpbnQ4X3QgdmFsdWUpCit7Cisg
ICAgcmV0dXJuIGpzVmFsdWVGb3JEZWNvZGVkTnVtZXJpY0FyZ3VtZW50VmFsdWUoZ2xvYmFsT2Jq
ZWN0LCB2YWx1ZSwgInVpbnQ4X3QiKTsKK30KKwordGVtcGxhdGU8PgorSlNDOjpKU1ZhbHVlIGpz
VmFsdWVGb3JEZWNvZGVkQXJndW1lbnRWYWx1ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIHVpbnQxNl90IHZhbHVlKQoreworICAgIHJldHVybiBqc1ZhbHVlRm9yRGVjb2RlZE51
bWVyaWNBcmd1bWVudFZhbHVlKGdsb2JhbE9iamVjdCwgdmFsdWUsICJ1aW50MTZfdCIpOworfQor
Cit0ZW1wbGF0ZTw+CitKU0M6OkpTVmFsdWUganNWYWx1ZUZvckRlY29kZWRBcmd1bWVudFZhbHVl
KEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdWludDMyX3QgdmFsdWUpCit7Cisg
ICAgcmV0dXJuIGpzVmFsdWVGb3JEZWNvZGVkTnVtZXJpY0FyZ3VtZW50VmFsdWUoZ2xvYmFsT2Jq
ZWN0LCB2YWx1ZSwgInVpbnQzMl90Iik7Cit9CisKK3RlbXBsYXRlPD4KK0pTQzo6SlNWYWx1ZSBq
c1ZhbHVlRm9yRGVjb2RlZEFyZ3VtZW50VmFsdWUoSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCB1aW50NjRfdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4ganNWYWx1ZUZvckRlY29kZWRO
dW1lcmljQXJndW1lbnRWYWx1ZShnbG9iYWxPYmplY3QsIHZhbHVlLCAidWludDY0X3QiKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgVT4KK0pTQzo6SlNWYWx1ZSBqc1ZhbHVlRm9yRGVjb2RlZEFy
Z3VtZW50VmFsdWUoSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBPYmpl
Y3RJZGVudGlmaWVyPFU+JiB2YWx1ZSkKK3sKKyAgICByZXR1cm4ganNWYWx1ZUZvckRlY29kZWRB
cmd1bWVudFZhbHVlKGdsb2JhbE9iamVjdCwgdmFsdWUudG9VSW50NjQoKSk7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFJlY3RUeXBlPgorSlNDOjpKU1ZhbHVlIGpzVmFsdWVGb3JEZWNvZGVkQXJn
dW1lbnRSZWN0KEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgUmVjdFR5
cGUmIHZhbHVlLCBjb25zdCBTdHJpbmcmIHR5cGUpCit7CisgICAgYXV0byYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
ICAgIGF1dG8qIG9iamVjdCA9IEpTQzo6Y29uc3RydWN0RW1wdHlPYmplY3QoZ2xvYmFsT2JqZWN0
LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBKU0M6OkpTVmFsdWUoKSk7CisgICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIEpT
Qzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInR5cGUiX3MpLCBKU0M6OmpzTm9udHJpdmlh
bFN0cmluZyh2bSwgdHlwZSkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTQzo6
SlNWYWx1ZSgpKTsKKyAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAieCJfcyksIEpTQzo6SlNWYWx1ZSh2YWx1ZS54KCkpKTsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU0M6OkpTVmFsdWUoKSk7CisgICAgb2JqZWN0LT5wdXRE
aXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInkiX3MpLCBKU0M6OkpT
VmFsdWUodmFsdWUueSgpKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNDOjpK
U1ZhbHVlKCkpOworICAgIG9iamVjdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sICJ3aWR0aCJfcyksIEpTQzo6SlNWYWx1ZSh2YWx1ZS53aWR0aCgpKSk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNDOjpKU1ZhbHVlKCkpOworICAgIG9iamVj
dC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJoZWlnaHQi
X3MpLCBKU0M6OkpTVmFsdWUodmFsdWUuaGVpZ2h0KCkpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBKU0M6OkpTVmFsdWUoKSk7CisgICAgcmV0dXJuIG9iamVjdDsKK30KKwordGVt
cGxhdGU8PgorSlNDOjpKU1ZhbHVlIGpzVmFsdWVGb3JEZWNvZGVkQXJndW1lbnRWYWx1ZShKU0M6
OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHZh
bHVlKQoreworICAgIHJldHVybiBqc1ZhbHVlRm9yRGVjb2RlZEFyZ3VtZW50UmVjdChnbG9iYWxP
YmplY3QsIHZhbHVlLCAiSW50UmVjdCIpOworfQorCit0ZW1wbGF0ZTw+CitKU0M6OkpTVmFsdWUg
anNWYWx1ZUZvckRlY29kZWRBcmd1bWVudFZhbHVlKEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiB2YWx1ZSkKK3sKKyAgICByZXR1cm4g
anNWYWx1ZUZvckRlY29kZWRBcmd1bWVudFJlY3QoZ2xvYmFsT2JqZWN0LCB2YWx1ZSwgIkZsb2F0
UmVjdCIpOworfQorCit0ZW1wbGF0ZTxzaXplX3QgcmVtYWluaW5nU2l6ZSwgdHlwZW5hbWUuLi4g
RWxlbWVudHM+CitzdHJ1Y3QgRGVjb2RlZEFyZ3VtZW50SlNWYWx1ZUNvbnZlcnRlciB7CisgICAg
c3RhdGljIGJvb2wgY29udmVydChKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
Qzo6SlNBcnJheSogYXJyYXksIGNvbnN0IHN0ZDo6dHVwbGU8RWxlbWVudHMuLi4+JiB0dXBsZSkK
KyAgICB7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGdsb2JhbE9i
amVjdC0+dm0oKSk7CisKKyAgICAgICAgYXV0byBqc1ZhbHVlID0ganNWYWx1ZUZvckRlY29kZWRB
cmd1bWVudFZhbHVlKGdsb2JhbE9iamVjdCwgc3RkOjpnZXQ8c2l6ZW9mLi4uKEVsZW1lbnRzKSAt
IHJlbWFpbmluZ1NpemU+KHR1cGxlKSk7CisgICAgICAgIGlmIChqc1ZhbHVlLmlzRW1wdHkoKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICB1bnNpZ25lZCBpbmRleCA9IHNp
emVvZi4uLihFbGVtZW50cykgLSByZW1haW5pbmdTaXplOworICAgICAgICBhcnJheS0+cHV0RGly
ZWN0SW5kZXgoZ2xvYmFsT2JqZWN0LCBpbmRleCwganNWYWx1ZSk7CisgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKKworICAgICAgICByZXR1cm4gRGVjb2RlZEFyZ3Vt
ZW50SlNWYWx1ZUNvbnZlcnRlcjxyZW1haW5pbmdTaXplIC0gMSwgRWxlbWVudHMuLi4+Ojpjb252
ZXJ0KGdsb2JhbE9iamVjdCwgYXJyYXksIHR1cGxlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0
eXBlbmFtZS4uLiBFbGVtZW50cz4KK3N0cnVjdCBEZWNvZGVkQXJndW1lbnRKU1ZhbHVlQ29udmVy
dGVyPDAsIEVsZW1lbnRzLi4uPiB7CisgICAgc3RhdGljIGJvb2wgY29udmVydChKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgSlNDOjpKU0FycmF5KiwgY29uc3Qgc3RkOjp0dXBsZTxFbGVtZW50cy4uLj4m
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUuLi4gRWxlbWVudHM+CitzdGF0aWMgSlNDOjpKU1ZhbHVlIGpzVmFsdWVGb3JBcmd1bWVu
dFR1cGxlKEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3Qgc3RkOjp0dXBs
ZTxFbGVtZW50cy4uLj4mIHR1cGxlKQoreworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKGdsb2JhbE9iamVjdC0+dm0oKSk7CisgICAgYXV0byogYXJyYXkgPSBKU0M6OmNvbnN0
cnVjdEVtcHR5QXJyYXkoZ2xvYmFsT2JqZWN0LCBudWxscHRyKTsKKyAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBKU0M6OkpTVmFsdWUoKSk7CisgICAgaWYgKCFEZWNvZGVkQXJndW1lbnRK
U1ZhbHVlQ29udmVydGVyPHNpemVvZi4uLihFbGVtZW50cyksIEVsZW1lbnRzLi4uPjo6Y29udmVy
dChnbG9iYWxPYmplY3QsIGFycmF5LCB0dXBsZSkpCisgICAgICAgIHJldHVybiBKU0M6OkpTVmFs
dWUoKTsKKyAgICByZXR1cm4gSlNDOjpKU1ZhbHVlKGFycmF5KTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4KK3N0YXRpYyBPcHRpb25hbDxKU0M6OkpTVmFsdWU+IGpzVmFsdWVGb3JEZWNvZGVk
QXJndW1lbnRzKEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSVBDOjpEZWNvZGVy
JiBkZWNvZGVyKQoreworICAgIE9wdGlvbmFsPHR5cGVuYW1lIElQQzo6Q29kaW5nVHlwZTxUPjo6
VHlwZT4gYXJndW1lbnRzOworICAgIGRlY29kZXIgPj4gYXJndW1lbnRzOworICAgIGlmICghYXJn
dW1lbnRzKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiBqc1ZhbHVl
Rm9yQXJndW1lbnRUdXBsZShnbG9iYWxPYmplY3QsICphcmd1bWVudHMpOworfQpJbmRleDogU291
cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvTWVzc2FnZUFyZ3VtZW50RGVzY3JpcHRpb25zLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvTWVzc2FnZUFyZ3VtZW50RGVz
Y3JpcHRpb25zLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMv
TWVzc2FnZUFyZ3VtZW50RGVzY3JpcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiTWVzc2FnZU5hbWVz
LmgiCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgor
CituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNHbG9iYWxPYmplY3Q7CitjbGFzcyBKU1ZhbHVl
OworCit9CisKK25hbWVzcGFjZSBJUEMgeworCitjbGFzcyBEZWNvZGVyOworCitPcHRpb25hbDxK
U0M6OkpTVmFsdWU+IGpzVmFsdWVGb3JBcmd1bWVudHMoSlNDOjpKU0dsb2JhbE9iamVjdCosIE1l
c3NhZ2VOYW1lLCBEZWNvZGVyJik7CitPcHRpb25hbDxKU0M6OkpTVmFsdWU+IGpzVmFsdWVGb3JS
ZXBseUFyZ3VtZW50cyhKU0M6OkpTR2xvYmFsT2JqZWN0KiwgTWVzc2FnZU5hbWUsIERlY29kZXIm
KTsKKworc3RydWN0IEFyZ3VtZW50RGVzY3JpcHRpb24geworICAgIGNvbnN0IGNoYXIqIG5hbWU7
CisgICAgY29uc3QgY2hhciogdHlwZTsKKyAgICBjb25zdCBjaGFyKiBlbnVtTmFtZTsKKyAgICBi
b29sIGlzT3B0aW9uYWw7Cit9OworCitPcHRpb25hbDxWZWN0b3I8QXJndW1lbnREZXNjcmlwdGlv
bj4+IG1lc3NhZ2VBcmd1bWVudERlc2NyaXB0aW9ucyhNZXNzYWdlTmFtZSk7CitPcHRpb25hbDxW
ZWN0b3I8QXJndW1lbnREZXNjcmlwdGlvbj4+IG1lc3NhZ2VSZXBseUFyZ3VtZW50RGVzY3JpcHRp
b25zKE1lc3NhZ2VOYW1lKTsKKworfQpJbmRleDogU291cmNlL1dlYktpdC9TY3JpcHRzL2dlbmVy
YXRlLW1lc3NhZ2UtcmVjZWl2ZXIucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TY3Jp
cHRzL2dlbmVyYXRlLW1lc3NhZ2UtcmVjZWl2ZXIucHkJKHJldmlzaW9uIDI2ODI0NikKKysrIFNv
dXJjZS9XZWJLaXQvU2NyaXB0cy9nZW5lcmF0ZS1tZXNzYWdlLXJlY2VpdmVyLnB5CSh3b3JraW5n
IGNvcHkpCkBAIC0zNCw2ICszNCw3IEBAIGRlZiBtYWluKGFyZ3YpOgogCiAgICAgZmlyc3RfYXJn
ID0gVHJ1ZQogICAgIHNlY29uZF9hcmcgPSBGYWxzZQorICAgIHJlY2VpdmVyX2hlYWRlcl9maWxl
cyA9IFtdCiAgICAgZm9yIHBhcmFtZXRlciBpbiBhcmd2OgogICAgICAgICBpZiBmaXJzdF9hcmc6
CiAgICAgICAgICAgICBmaXJzdF9hcmcgPSBGYWxzZQpAQCAtNTMsNyArNTQsOSBAQCBkZWYgbWFp
bihhcmd2KToKICAgICAgICAgd2l0aCBvcGVuKCclc01lc3NhZ2VSZWNlaXZlci5jcHAnICUgcmVj
ZWl2ZXJfbmFtZSwgIncrIikgYXMgaW1wbGVtZW50YXRpb25fb3V0cHV0OgogICAgICAgICAgICAg
aW1wbGVtZW50YXRpb25fb3V0cHV0LndyaXRlKHdlYmtpdC5tZXNzYWdlcy5nZW5lcmF0ZV9tZXNz
YWdlX2hhbmRsZXIocmVjZWl2ZXIpKQogCi0gICAgICAgIHdpdGggb3BlbignJXNNZXNzYWdlcy5o
JyAlIHJlY2VpdmVyX25hbWUsICJ3KyIpIGFzIGhlYWRlcl9vdXRwdXQ6CisgICAgICAgIHJlY2Vp
dmVyX21lc3NhZ2VfaGVhZGVyID0gJyVzTWVzc2FnZXMuaCcgJSByZWNlaXZlcl9uYW1lCisgICAg
ICAgIHJlY2VpdmVyX2hlYWRlcl9maWxlcy5hcHBlbmQocmVjZWl2ZXJfbWVzc2FnZV9oZWFkZXIp
CisgICAgICAgIHdpdGggb3BlbihyZWNlaXZlcl9tZXNzYWdlX2hlYWRlciwgIncrIikgYXMgaGVh
ZGVyX291dHB1dDoKICAgICAgICAgICAgIGhlYWRlcl9vdXRwdXQud3JpdGUod2Via2l0Lm1lc3Nh
Z2VzLmdlbmVyYXRlX21lc3NhZ2VzX2hlYWRlcihyZWNlaXZlcikpCiAKICAgICAgICAgd2l0aCBv
cGVuKCclc01lc3NhZ2VzUmVwbGllcy5oJyAlIHJlY2VpdmVyX25hbWUsICJ3KyIpIGFzIHJlcGx5
X2hlYWRlcl9vdXRwdXQ6CkBAIC02NSw2ICs2OCw5IEBAIGRlZiBtYWluKGFyZ3YpOgogICAgIHdp
dGggb3BlbignTWVzc2FnZU5hbWVzLmNwcCcsICJ3KyIpIGFzIG1lc3NhZ2VfbmFtZXNfaW1wbGVt
ZW50YXRpb25fb3V0cHV0OgogICAgICAgICBtZXNzYWdlX25hbWVzX2ltcGxlbWVudGF0aW9uX291
dHB1dC53cml0ZSh3ZWJraXQubWVzc2FnZXMuZ2VuZXJhdGVfbWVzc2FnZV9uYW1lc19pbXBsZW1l
bnRhdGlvbihyZWNlaXZlcnMpKQogCisgICAgd2l0aCBvcGVuKCdNZXNzYWdlQXJndW1lbnREZXNj
cmlwdGlvbnMuY3BwJywgIncrIikgYXMgbWVzc2FnZV9kZXNjcmlwdGlvbnNfaW1wbGVtZW50YXRp
b25fb3V0cHV0OgorICAgICAgICBtZXNzYWdlX2Rlc2NyaXB0aW9uc19pbXBsZW1lbnRhdGlvbl9v
dXRwdXQud3JpdGUod2Via2l0Lm1lc3NhZ2VzLmdlbmVyYXRlX21lc3NhZ2VfYXJndW1lbnRfZGVz
Y3JpcHRpb25faW1wbGVtZW50YXRpb24ocmVjZWl2ZXJzLCByZWNlaXZlcl9oZWFkZXJfZmlsZXMp
KQorCiAgICAgcmV0dXJuIDAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQkocmV2aXNpb24gMjY4MjQ2KQor
KysgU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQkod29ya2luZyBjb3B5
KQpAQCAtNjIzLDcgKzYyMyw2IEBAIGRlZiBoZWFkZXJzX2Zvcl90eXBlKHR5cGUpOgogICAgICAg
ICAnV2ViQ29yZTo6UGFzdGVib2FyZFVSTCc6IFsnPFdlYkNvcmUvUGFzdGVib2FyZC5oPiddLAog
ICAgICAgICAnV2ViQ29yZTo6UGFzdGVib2FyZFdlYkNvbnRlbnQnOiBbJzxXZWJDb3JlL1Bhc3Rl
Ym9hcmQuaD4nXSwKICAgICAgICAgJ1dlYkNvcmU6OlBheW1lbnRBdXRob3JpemF0aW9uUmVzdWx0
JzogWyc8V2ViQ29yZS9BcHBsZVBheVNlc3Npb25QYXltZW50UmVxdWVzdC5oPiddLAotICAgICAg
ICAnV2ViQ29yZTo6UGF5bWVudE1ldGhvZFVwZGF0ZSc6IFsnPFdlYkNvcmUvQXBwbGVQYXlTZXNz
aW9uUGF5bWVudFJlcXVlc3QuaD4nXSwKICAgICAgICAgJ1dlYkNvcmU6OlBsYXRmb3JtVGV4dFRy
YWNrRGF0YSc6IFsnPFdlYkNvcmUvUGxhdGZvcm1UZXh0VHJhY2suaD4nXSwKICAgICAgICAgJ1dl
YkNvcmU6OlBsdWdpbkluZm8nOiBbJzxXZWJDb3JlL1BsdWdpbkRhdGEuaD4nXSwKICAgICAgICAg
J1dlYkNvcmU6OlBsdWdpbkxvYWRDbGllbnRQb2xpY3knOiBbJzxXZWJDb3JlL1BsdWdpbkRhdGEu
aD4nXSwKQEAgLTY4Nyw3ICs2ODYsNyBAQCBkZWYgaGVhZGVyc19mb3JfdHlwZSh0eXBlKToKICAg
ICAgICAgJ3N0cnVjdCBXZWJLaXQ6OldlYlVzZXJTY3JpcHREYXRhJzogWyciV2ViVXNlckNvbnRl
bnRDb250cm9sbGVyRGF0YVR5cGVzLmgiJ10sCiAgICAgICAgICdzdHJ1Y3QgV2ViS2l0OjpXZWJV
c2VyU3R5bGVTaGVldERhdGEnOiBbJyJXZWJVc2VyQ29udGVudENvbnRyb2xsZXJEYXRhVHlwZXMu
aCInXSwKICAgICAgICAgJ3N0cnVjdCBXZWJLaXQ6OldlYlNjcmlwdE1lc3NhZ2VIYW5kbGVyRGF0
YSc6IFsnIldlYlVzZXJDb250ZW50Q29udHJvbGxlckRhdGFUeXBlcy5oIiddLAotICAgICAgICAn
d2VicnRjOjpXZWJLaXRFbmNvZGVkRnJhbWVJbmZvJzogWyc8d2VicnRjL3Nkay9XZWJLaXQvV2Vi
S2l0RW5jb2Rlci5oPiddLAorICAgICAgICAnd2VicnRjOjpXZWJLaXRFbmNvZGVkRnJhbWVJbmZv
JzogWyc8d2VicnRjL3Nkay9XZWJLaXQvV2ViS2l0RW5jb2Rlci5oPicsICc8V2ViQ29yZS9MaWJX
ZWJSVENFbnVtVHJhaXRzLmg+J10sCiAgICAgICAgICd3ZWJydGM6OldlYktpdFJUUEZyYWdtZW50
YXRpb25IZWFkZXInOiBbJzx3ZWJydGMvc2RrL1dlYktpdC9XZWJLaXRFbmNvZGVyLmg+J10sCiAg
ICAgfQogCkBAIC03MTQsMTMgKzcxMyw3IEBAIGRlZiBoZWFkZXJzX2Zvcl90eXBlKHR5cGUpOgog
ICAgIHJldHVybiBoZWFkZXJzCiAKIAotZGVmIGdlbmVyYXRlX21lc3NhZ2VfaGFuZGxlcihyZWNl
aXZlcik6Ci0gICAgaGVhZGVyX2NvbmRpdGlvbnMgPSB7Ci0gICAgICAgICciJXMiJyAlIG1lc3Nh
Z2VzX2hlYWRlcl9maWxlbmFtZShyZWNlaXZlcik6IFtOb25lXSwKLSAgICAgICAgJyJIYW5kbGVN
ZXNzYWdlLmgiJzogW05vbmVdLAotICAgICAgICAnIkRlY29kZXIuaCInOiBbTm9uZV0sCi0gICAg
fQotCitkZWYgY29sbGVjdF9oZWFkZXJfY29uZGl0aW9uc19mb3JfcmVjZWl2ZXIocmVjZWl2ZXIs
IGhlYWRlcl9jb25kaXRpb25zKToKICAgICB0eXBlX2NvbmRpdGlvbnMgPSB7fQogICAgIGZvciBw
YXJhbWV0ZXIgaW4gcmVjZWl2ZXIuaXRlcnBhcmFtZXRlcnMoKToKICAgICAgICAgaWYgbm90IHBh
cmFtZXRlci50eXBlIGluIHR5cGVfY29uZGl0aW9uczoKQEAgLTc2Myw2ICs3NTYsMzAgQEAgZGVm
IGdlbmVyYXRlX21lc3NhZ2VfaGFuZGxlcihyZWNlaXZlcik6CiAgICAgICAgICAgICAgICAgICAg
ICAgICBoZWFkZXJfY29uZGl0aW9uc1toZWFkZXJdID0gW10KICAgICAgICAgICAgICAgICAgICAg
aGVhZGVyX2NvbmRpdGlvbnNbaGVhZGVyXS5hcHBlbmQobWVzc2FnZS5jb25kaXRpb24pCiAKKyAg
ICByZXR1cm4gaGVhZGVyX2NvbmRpdGlvbnMKKworCitkZWYgZ2VuZXJhdGVfaGVhZGVyX2luY2x1
ZGVzX2Zyb21fY29uZGl0aW9ucyhoZWFkZXJfY29uZGl0aW9ucyk6CisgICAgcmVzdWx0ID0gW10K
KyAgICBmb3IgaGVhZGVyIGluIHNvcnRlZChoZWFkZXJfY29uZGl0aW9ucyk6CisgICAgICAgIGlm
IGhlYWRlcl9jb25kaXRpb25zW2hlYWRlcl0gYW5kIG5vdCBOb25lIGluIGhlYWRlcl9jb25kaXRp
b25zW2hlYWRlcl06CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcjaWYgJXNcbicgJSAnIHx8
ICcuam9pbihzb3J0ZWQoc2V0KGhlYWRlcl9jb25kaXRpb25zW2hlYWRlcl0pKSkpCisgICAgICAg
ICAgICByZXN1bHQgKz0gWycjaW5jbHVkZSAlc1xuJyAlIGhlYWRlcl0KKyAgICAgICAgICAgIHJl
c3VsdC5hcHBlbmQoJyNlbmRpZlxuJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlc3Vs
dCArPSBbJyNpbmNsdWRlICVzXG4nICUgaGVhZGVyXQorICAgIHJldHVybiByZXN1bHQKKworCitk
ZWYgZ2VuZXJhdGVfbWVzc2FnZV9oYW5kbGVyKHJlY2VpdmVyKToKKyAgICBoZWFkZXJfY29uZGl0
aW9ucyA9IHsKKyAgICAgICAgJyIlcyInICUgbWVzc2FnZXNfaGVhZGVyX2ZpbGVuYW1lKHJlY2Vp
dmVyKTogW05vbmVdLAorICAgICAgICAnIkhhbmRsZU1lc3NhZ2UuaCInOiBbTm9uZV0sCisgICAg
ICAgICciRGVjb2Rlci5oIic6IFtOb25lXSwKKyAgICB9CisKKyAgICBjb2xsZWN0X2hlYWRlcl9j
b25kaXRpb25zX2Zvcl9yZWNlaXZlcihyZWNlaXZlciwgaGVhZGVyX2NvbmRpdGlvbnMpCisKICAg
ICByZXN1bHQgPSBbXQogCiAgICAgcmVzdWx0LmFwcGVuZChfbGljZW5zZV9oZWFkZXIpCkBAIC03
NzMsMTMgKzc5MCw3IEBAIGRlZiBnZW5lcmF0ZV9tZXNzYWdlX2hhbmRsZXIocmVjZWl2ZXIpOgog
ICAgICAgICByZXN1bHQuYXBwZW5kKCcjaWYgJXNcblxuJyAlIHJlY2VpdmVyLmNvbmRpdGlvbikK
IAogICAgIHJlc3VsdC5hcHBlbmQoJyNpbmNsdWRlICIlcy5oIlxuXG4nICUgcmVjZWl2ZXIubmFt
ZSkKLSAgICBmb3IgaGVhZGVyIGluIHNvcnRlZChoZWFkZXJfY29uZGl0aW9ucyk6Ci0gICAgICAg
IGlmIGhlYWRlcl9jb25kaXRpb25zW2hlYWRlcl0gYW5kIG5vdCBOb25lIGluIGhlYWRlcl9jb25k
aXRpb25zW2hlYWRlcl06Ci0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcjaWYgJXNcbicgJSAn
IHx8ICcuam9pbihzb3J0ZWQoc2V0KGhlYWRlcl9jb25kaXRpb25zW2hlYWRlcl0pKSkpCi0gICAg
ICAgICAgICByZXN1bHQgKz0gWycjaW5jbHVkZSAlc1xuJyAlIGhlYWRlcl0KLSAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQoJyNlbmRpZlxuJykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJl
c3VsdCArPSBbJyNpbmNsdWRlICVzXG4nICUgaGVhZGVyXQorICAgIHJlc3VsdCArPSBnZW5lcmF0
ZV9oZWFkZXJfaW5jbHVkZXNfZnJvbV9jb25kaXRpb25zKGhlYWRlcl9jb25kaXRpb25zKQogICAg
IHJlc3VsdC5hcHBlbmQoJ1xuJykKIAogICAgIGRlbGF5ZWRfb3JfYXN5bmNfbWVzc2FnZXMgPSBb
XQpAQCAtMTA0NCwzICsxMDU1LDEzMCBAQCBkZWYgZ2VuZXJhdGVfbWVzc2FnZV9uYW1lc19pbXBs
ZW1lbnRhdGlvCiAgICAgcmVzdWx0LmFwcGVuZCgnXG4nKQogICAgIHJlc3VsdC5hcHBlbmQoJ30g
Ly8gbmFtZXNwYWNlIElQQ1xuJykKICAgICByZXR1cm4gJycuam9pbihyZXN1bHQpCisKKworZGVm
IGdlbmVyYXRlX2pzX3ZhbHVlX2NvbnZlcnNpb25fZnVuY3Rpb24ocmVzdWx0LCByZWNlaXZlcnMs
IGZ1bmN0aW9uX25hbWUsIGFyZ3VtZW50X3R5cGUsIHByZWRpY2F0ZT1sYW1iZGEgbWVzc2FnZTog
VHJ1ZSk6CisgICAgcmVzdWx0LmFwcGVuZCgnT3B0aW9uYWw8SlNDOjpKU1ZhbHVlPiAlcyhKU0M6
OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIE1lc3NhZ2VOYW1lIG5hbWUsIERlY29kZXIm
IGRlY29kZXIpXG4nICUgZnVuY3Rpb25fbmFtZSkKKyAgICByZXN1bHQuYXBwZW5kKCd7XG4nKQor
ICAgIHJlc3VsdC5hcHBlbmQoJyAgICBzd2l0Y2ggKG5hbWUpIHtcbicpCisgICAgZm9yIHJlY2Vp
dmVyIGluIHJlY2VpdmVyczoKKyAgICAgICAgaWYgcmVjZWl2ZXIuY29uZGl0aW9uOgorICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZCgnI2lmICVzXG4nICUgcmVjZWl2ZXIuY29uZGl0aW9uKQorICAg
ICAgICBwcmV2aXNpb25fbWVzc2FnZV9jb25kaXRpb24gPSBOb25lCisgICAgICAgIGZvciBtZXNz
YWdlIGluIHJlY2VpdmVyLm1lc3NhZ2VzOgorICAgICAgICAgICAgaWYgbm90IHByZWRpY2F0ZSht
ZXNzYWdlKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgcHJldmlz
aW9uX21lc3NhZ2VfY29uZGl0aW9uICE9IG1lc3NhZ2UuY29uZGl0aW9uOgorICAgICAgICAgICAg
ICAgIGlmIHByZXZpc2lvbl9tZXNzYWdlX2NvbmRpdGlvbjoKKyAgICAgICAgICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZCgnI2VuZGlmXG4nKQorICAgICAgICAgICAgICAgIGlmIG1lc3NhZ2UuY29u
ZGl0aW9uOgorICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcjaWYgJXNcbicgJSBt
ZXNzYWdlLmNvbmRpdGlvbikKKyAgICAgICAgICAgIHByZXZpc2lvbl9tZXNzYWdlX2NvbmRpdGlv
biA9IG1lc3NhZ2UuY29uZGl0aW9uCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgY2Fz
ZSBNZXNzYWdlTmFtZTo6JXNfJXM6XG4nICUgKHJlY2VpdmVyLm5hbWUsIG1lc3NhZ2UubmFtZSkp
CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgICAgIHJldHVybiBqc1ZhbHVlRm9yRGVj
b2RlZEFyZ3VtZW50czxNZXNzYWdlczo6JXM6OiVzOjolcz4oZ2xvYmFsT2JqZWN0LCBkZWNvZGVy
KTtcbicgJSAocmVjZWl2ZXIubmFtZSwgbWVzc2FnZS5uYW1lLCBhcmd1bWVudF90eXBlKSkKKyAg
ICAgICAgaWYgcHJldmlzaW9uX21lc3NhZ2VfY29uZGl0aW9uOgorICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZCgnI2VuZGlmXG4nKQorICAgICAgICBpZiByZWNlaXZlci5jb25kaXRpb246CisgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKCcjZW5kaWZcbicpCisgICAgcmVzdWx0LmFwcGVuZCgnICAg
IGRlZmF1bHQ6XG4nKQorICAgIHJlc3VsdC5hcHBlbmQoJyAgICAgICAgYnJlYWs7XG4nKQorICAg
IHJlc3VsdC5hcHBlbmQoJyAgICB9XG4nKQorICAgIHJlc3VsdC5hcHBlbmQoJyAgICByZXR1cm4g
V1RGOjpudWxsb3B0O1xuJykKKyAgICByZXN1bHQuYXBwZW5kKCd9XG4nKQorCisKK2RlZiBnZW5l
cmF0ZV9qc19hcmd1bWVudF9kZXNjcmlwdGlvbnMocmVjZWl2ZXJzLCBmdW5jdGlvbl9uYW1lLCBh
cmd1bWVudHNfZnJvbV9tZXNzYWdlKToKKyAgICByZXN1bHQgPSBbXQorICAgIHJlc3VsdC5hcHBl
bmQoJ09wdGlvbmFsPFZlY3RvcjxBcmd1bWVudERlc2NyaXB0aW9uPj4gJXMoTWVzc2FnZU5hbWUg
bmFtZSlcbicgJSBmdW5jdGlvbl9uYW1lKQorICAgIHJlc3VsdC5hcHBlbmQoJ3tcbicpCisgICAg
cmVzdWx0LmFwcGVuZCgnICAgIHN3aXRjaCAobmFtZSkge1xuJykKKyAgICBmb3IgcmVjZWl2ZXIg
aW4gcmVjZWl2ZXJzOgorICAgICAgICBpZiByZWNlaXZlci5jb25kaXRpb246CisgICAgICAgICAg
ICByZXN1bHQuYXBwZW5kKCcjaWYgJXNcbicgJSByZWNlaXZlci5jb25kaXRpb24pCisgICAgICAg
IHByZXZpc2lvbl9tZXNzYWdlX2NvbmRpdGlvbiA9IE5vbmUKKyAgICAgICAgZm9yIG1lc3NhZ2Ug
aW4gcmVjZWl2ZXIubWVzc2FnZXM6CisgICAgICAgICAgICBhcmd1bWVudF9saXN0ID0gYXJndW1l
bnRzX2Zyb21fbWVzc2FnZShtZXNzYWdlKQorICAgICAgICAgICAgaWYgYXJndW1lbnRfbGlzdCBp
cyBOb25lOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBwcmV2aXNp
b25fbWVzc2FnZV9jb25kaXRpb24gIT0gbWVzc2FnZS5jb25kaXRpb246CisgICAgICAgICAgICAg
ICAgaWYgcHJldmlzaW9uX21lc3NhZ2VfY29uZGl0aW9uOgorICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKCcjZW5kaWZcbicpCisgICAgICAgICAgICAgICAgaWYgbWVzc2FnZS5jb25k
aXRpb246CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyNpZiAlc1xuJyAlIG1l
c3NhZ2UuY29uZGl0aW9uKQorICAgICAgICAgICAgcHJldmlzaW9uX21lc3NhZ2VfY29uZGl0aW9u
ID0gbWVzc2FnZS5jb25kaXRpb24KKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICBjYXNl
IE1lc3NhZ2VOYW1lOjolc18lczpcbicgJSAocmVjZWl2ZXIubmFtZSwgbWVzc2FnZS5uYW1lKSkK
KworICAgICAgICAgICAgaWYgbm90IGxlbihhcmd1bWVudF9saXN0KToKKyAgICAgICAgICAgICAg
ICByZXN1bHQuYXBwZW5kKCcgICAgICAgIHJldHVybiBWZWN0b3I8QXJndW1lbnREZXNjcmlwdGlv
bj4geyB9O1xuJykKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICByZXN1
bHQuYXBwZW5kKCcgICAgICAgIHJldHVybiBWZWN0b3I8QXJndW1lbnREZXNjcmlwdGlvbj4ge1xu
JykKKyAgICAgICAgICAgIGZvciBhcmd1bWVudCBpbiBhcmd1bWVudF9saXN0OgorICAgICAgICAg
ICAgICAgIGFyZ3VtZW50X3R5cGUgPSBhcmd1bWVudC50eXBlCisgICAgICAgICAgICAgICAgZW51
bV90eXBlID0gTm9uZQorICAgICAgICAgICAgICAgIGlzX29wdGlvbmFsID0gRmFsc2UKKyAgICAg
ICAgICAgICAgICBpZiBhcmd1bWVudC5raW5kLnN0YXJ0c3dpdGgoJ2VudW06Jyk6CisgICAgICAg
ICAgICAgICAgICAgIGVudW1fdHlwZSA9ICciJXMiJyAlIGFyZ3VtZW50X3R5cGUKKyAgICAgICAg
ICAgICAgICAgICAgYXJndW1lbnRfdHlwZSA9IGFyZ3VtZW50LmtpbmRbNTpdCisgICAgICAgICAg
ICAgICAgaWYgYXJndW1lbnRfdHlwZS5zdGFydHN3aXRoKCdPcHRpb25hbDwnKSBhbmQgYXJndW1l
bnRfdHlwZS5lbmRzd2l0aCgnPicpOgorICAgICAgICAgICAgICAgICAgICBhcmd1bWVudF90eXBl
ID0gYXJndW1lbnRfdHlwZVs5Oi0xXQorICAgICAgICAgICAgICAgICAgICBpc19vcHRpb25hbCA9
IFRydWUKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgICAgICAgICB7IiVzIiwg
IiVzIiwgJXMsICVzfSxcbicgJSAoYXJndW1lbnQubmFtZSwgYXJndW1lbnRfdHlwZSwgZW51bV90
eXBlIG9yICdudWxscHRyJywgJ3RydWUnIGlmIGlzX29wdGlvbmFsIGVsc2UgJ2ZhbHNlJykpCisg
ICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgICAgIH07XG4nKQorICAgICAgICBpZiBwcmV2
aXNpb25fbWVzc2FnZV9jb25kaXRpb246CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcjZW5k
aWZcbicpCisgICAgICAgIGlmIHJlY2VpdmVyLmNvbmRpdGlvbjoKKyAgICAgICAgICAgIHJlc3Vs
dC5hcHBlbmQoJyNlbmRpZlxuJykKKyAgICByZXN1bHQuYXBwZW5kKCcgICAgZGVmYXVsdDpcbicp
CisgICAgcmVzdWx0LmFwcGVuZCgnICAgICAgICBicmVhaztcbicpCisgICAgcmVzdWx0LmFwcGVu
ZCgnICAgIH1cbicpCisgICAgcmVzdWx0LmFwcGVuZCgnICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
XG4nKQorICAgIHJlc3VsdC5hcHBlbmQoJ31cbicpCisgICAgcmV0dXJuIHJlc3VsdAorCisKK2Rl
ZiBnZW5lcmF0ZV9tZXNzYWdlX2FyZ3VtZW50X2Rlc2NyaXB0aW9uX2ltcGxlbWVudGF0aW9uKHJl
Y2VpdmVycywgcmVjZWl2ZXJfaGVhZGVycyk6CisgICAgaGVhZGVyX2NvbmRpdGlvbnMgPSB7Cisg
ICAgICAgICciSlNJUENCaW5kaW5nLmgiJzogW05vbmVdCisgICAgfQorICAgIGZvciByZWNlaXZl
ciBpbiByZWNlaXZlcnM6CisgICAgICAgIGhlYWRlcl9jb25kaXRpb25zWyciJXMiJyAlIG1lc3Nh
Z2VzX2hlYWRlcl9maWxlbmFtZShyZWNlaXZlcildID0gW05vbmVdCisgICAgICAgIGNvbGxlY3Rf
aGVhZGVyX2NvbmRpdGlvbnNfZm9yX3JlY2VpdmVyKHJlY2VpdmVyLCBoZWFkZXJfY29uZGl0aW9u
cykKKworICAgIHJlc3VsdCA9IFtdCisgICAgcmVzdWx0LmFwcGVuZChfbGljZW5zZV9oZWFkZXIp
CisgICAgcmVzdWx0LmFwcGVuZCgnI2luY2x1ZGUgImNvbmZpZy5oIlxuJykKKyAgICByZXN1bHQu
YXBwZW5kKCcjaW5jbHVkZSAiTWVzc2FnZUFyZ3VtZW50RGVzY3JpcHRpb25zLmgiXG4nKQorICAg
IHJlc3VsdC5hcHBlbmQoJ1xuJykKKyAgICByZXN1bHQuYXBwZW5kKCcjaWYgRU5BQkxFKElQQ19U
RVNUSU5HX0FQSSlcbicpCisgICAgcmVzdWx0LmFwcGVuZCgnXG4nKQorICAgIHJlc3VsdCArPSBn
ZW5lcmF0ZV9oZWFkZXJfaW5jbHVkZXNfZnJvbV9jb25kaXRpb25zKGhlYWRlcl9jb25kaXRpb25z
KQorICAgIHJlc3VsdC5hcHBlbmQoJ1xuJykKKworICAgIGZvciBoZWFkZXIgaW4gcmVjZWl2ZXJf
aGVhZGVyczoKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgnI2luY2x1ZGUgIiVzIlxuJyAlIChoZWFk
ZXIpKQorCisgICAgcmVzdWx0LmFwcGVuZCgnXG4nKQorICAgIHJlc3VsdC5hcHBlbmQoJ25hbWVz
cGFjZSBJUEMge1xuJykKKyAgICByZXN1bHQuYXBwZW5kKCdcbicpCisKKyAgICBnZW5lcmF0ZV9q
c192YWx1ZV9jb252ZXJzaW9uX2Z1bmN0aW9uKHJlc3VsdCwgcmVjZWl2ZXJzLCAnanNWYWx1ZUZv
ckFyZ3VtZW50cycsICdBcmd1bWVudHMnKQorCisgICAgcmVzdWx0LmFwcGVuZCgnXG4nKQorCisg
ICAgZ2VuZXJhdGVfanNfdmFsdWVfY29udmVyc2lvbl9mdW5jdGlvbihyZXN1bHQsIHJlY2VpdmVy
cywgJ2pzVmFsdWVGb3JSZXBseUFyZ3VtZW50cycsICdSZXBseUFyZ3VtZW50cycsIGxhbWJkYSBt
ZXNzYWdlOiBtZXNzYWdlLnJlcGx5X3BhcmFtZXRlcnMgaXMgbm90IE5vbmUgYW5kIChtZXNzYWdl
Lmhhc19hdHRyaWJ1dGUoU1lOQ0hST05PVVNfQVRUUklCVVRFKSBvciBtZXNzYWdlLmhhc19hdHRy
aWJ1dGUoQVNZTkNfQVRUUklCVVRFKSkpCisKKyAgICByZXN1bHQuYXBwZW5kKCdcbicpCisKKyAg
ICByZXN1bHQgKz0gZ2VuZXJhdGVfanNfYXJndW1lbnRfZGVzY3JpcHRpb25zKHJlY2VpdmVycywg
J21lc3NhZ2VBcmd1bWVudERlc2NyaXB0aW9ucycsIGxhbWJkYSBtZXNzYWdlOiBtZXNzYWdlLnBh
cmFtZXRlcnMpCisKKyAgICByZXN1bHQuYXBwZW5kKCdcbicpCisKKyAgICByZXN1bHQgKz0gZ2Vu
ZXJhdGVfanNfYXJndW1lbnRfZGVzY3JpcHRpb25zKHJlY2VpdmVycywgJ21lc3NhZ2VSZXBseUFy
Z3VtZW50RGVzY3JpcHRpb25zJywgbGFtYmRhIG1lc3NhZ2U6IG1lc3NhZ2UucmVwbHlfcGFyYW1l
dGVycyBpZiBtZXNzYWdlLmhhc19hdHRyaWJ1dGUoU1lOQ0hST05PVVNfQVRUUklCVVRFKSBvciBt
ZXNzYWdlLmhhc19hdHRyaWJ1dGUoQVNZTkNfQVRUUklCVVRFKSBlbHNlIE5vbmUpCisKKyAgICBy
ZXN1bHQuYXBwZW5kKCdcbicpCisKKyAgICByZXN1bHQuYXBwZW5kKCd9IC8vIG5hbWVzcGFjZSBX
ZWJLaXRcbicpCisgICAgcmVzdWx0LmFwcGVuZCgnXG4nKQorICAgIHJlc3VsdC5hcHBlbmQoJyNl
bmRpZlxuJykKKyAgICByZXR1cm4gJycuam9pbihyZXN1bHQpCkluZGV4OiBTb3VyY2UvV2ViS2l0
L1NoYXJlZC9BcHBsZVBheS9BcHBsZVBheVBheW1lbnRTZXR1cEZlYXR1cmVzV2ViS2l0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvQXBwbGVQYXkvQXBwbGVQYXlQYXltZW50
U2V0dXBGZWF0dXJlc1dlYktpdC5oCShyZXZpc2lvbiAyNjgyNDYpCisrKyBTb3VyY2UvV2ViS2l0
L1NoYXJlZC9BcHBsZVBheS9BcHBsZVBheVBheW1lbnRTZXR1cEZlYXR1cmVzV2ViS2l0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShBUFBMRV9QQVkpCiAK
K09CSkNfQ0xBU1MgTlNBcnJheTsKIE9CSkNfQ0xBU1MgUEtQYXltZW50U2V0dXBGZWF0dXJlOwog
CiAjaW5jbHVkZSA8V2ViQ29yZS9BcHBsZVBheVNldHVwRmVhdHVyZVdlYkNvcmUuaD4KSW5kZXg6
IFNvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2
aXNpb24gMjY4MjQ2KQorKysgU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTQxNyw2ICsxNDE3LDkgQEAKIAkJOUIxMjI5Q0Qy
M0ZGMjVGMjAwOENBNzUxIC8qIFJlbW90ZUF1ZGlvRGVzdGluYXRpb25NYW5hZ2VyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjEyMjlDQjIzRkYyNUYy
MDA4Q0E3NTEgLyogUmVtb3RlQXVkaW9EZXN0aW5hdGlvbk1hbmFnZXIuaCAqLzsgfTsKIAkJOUIx
MjI5Q0UyM0ZGMjVGMjAwOENBNzUxIC8qIFJlbW90ZUF1ZGlvRGVzdGluYXRpb25NYW5hZ2VyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCMTIyOUND
MjNGRjI1RjIwMDhDQTc1MSAvKiBSZW1vdGVBdWRpb0Rlc3RpbmF0aW9uTWFuYWdlci5jcHAgKi87
IH07CiAJCTlCMTIyOUQyMjNGRjJCQ0MwMDhDQTc1MSAvKiBSZW1vdGVBdWRpb0Rlc3RpbmF0aW9u
SWRlbnRpZmllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOUIxMjI5RDAyM0ZGMkE1RTAwOENBNzUxIC8qIFJlbW90ZUF1ZGlvRGVzdGluYXRpb25JZGVu
dGlmaWVyLmggKi87IH07CisJCTlCNDc5MDhEMjUzMTREODMwMEVDMTFBQiAvKiBNZXNzYWdlQXJn
dW1lbnREZXNjcmlwdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDlCNDc5MDhDMjUzMTREODMwMEVDMTFBQiAvKiBNZXNzYWdlQXJndW1lbnREZXNj
cmlwdGlvbnMuaCAqLzsgfTsKKwkJOUI0NzkwOEYyNTMxNTFDQzAwRUMxMUFCIC8qIEpTSVBDQmlu
ZGluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUI0
NzkwOEUyNTMxNTFDQzAwRUMxMUFCIC8qIEpTSVBDQmluZGluZy5oICovOyB9OworCQk5QjQ3OTA5
MTI1MzE1NjMyMDBFQzExQUIgLyogTWVzc2FnZUFyZ3VtZW50RGVzY3JpcHRpb25zLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCNDc5MDkwMjUzMTU2
MzIwMEVDMTFBQiAvKiBNZXNzYWdlQXJndW1lbnREZXNjcmlwdGlvbnMuY3BwICovOyB9OwogCQk5
QjU0OTlBRDIzNjJBNkY5MDBERjhCQTUgLyogX1dLVGV4dE1hbmlwdWxhdGlvbkNvbmZpZ3VyYXRp
b24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCNTQ5
OUFDMjM2MkE2RjYwMERGOEJBNSAvKiBfV0tUZXh0TWFuaXB1bGF0aW9uQ29uZmlndXJhdGlvbi5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTlCNTQ5
OUIyMjM2MkE3RUMwMERGOEJBNSAvKiBfV0tUZXh0TWFuaXB1bGF0aW9uRXhjbHVzaW9uUnVsZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUI1NDk5QjAy
MzYyQTdFQzAwREY4QkE1IC8qIF9XS1RleHRNYW5pcHVsYXRpb25FeGNsdXNpb25SdWxlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOUI1QkVDMjYy
NDAwRjRBOTAwNzBDNkVGIC8qIFdlYk1lZGlhU3RyYXRlZ3kuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCNUJFQzI0MjQwMEY0QTkwMDcwQzZFRiAvKiBX
ZWJNZWRpYVN0cmF0ZWd5LmggKi87IH07CkBAIC00NDkzLDYgKzQ0OTYsOSBAQAogCQk5QjEyMjlD
QzIzRkYyNUYyMDA4Q0E3NTEgLyogUmVtb3RlQXVkaW9EZXN0aW5hdGlvbk1hbmFnZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gUmVtb3RlQXVkaW9EZXN0aW5hdGlvbk1hbmFnZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QjEyMjlDRjIzRkYyODE0MDA4Q0E3NTEgLyogUmVt
b3RlQXVkaW9EZXN0aW5hdGlvbk1hbmFnZXIubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gUmVtb3RlQXVkaW9E
ZXN0aW5hdGlvbk1hbmFnZXIubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTlCMTIyOUQwMjNGRjJBNUUwMDhDQTc1MSAvKiBSZW1vdGVBdWRpb0Rlc3RpbmF0aW9uSWRl
bnRpZmllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVBdWRpb0Rlc3RpbmF0aW9uSWRlbnRpZmll
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5QjQ3OTA4QzI1MzE0RDgzMDBFQzEx
QUIgLyogTWVzc2FnZUFyZ3VtZW50RGVzY3JpcHRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lc3Nh
Z2VBcmd1bWVudERlc2NyaXB0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5
QjQ3OTA4RTI1MzE1MUNDMDBFQzExQUIgLyogSlNJUENCaW5kaW5nLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpTSVBDQmluZGluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5QjQ3OTA5MDI1
MzE1NjMyMDBFQzExQUIgLyogTWVzc2FnZUFyZ3VtZW50RGVzY3JpcHRpb25zLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IE1lc3NhZ2VBcmd1bWVudERlc2NyaXB0aW9u
cy5jcHA7IHBhdGggPSBNZXNzYWdlQXJndW1lbnREZXNjcmlwdGlvbnMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk5QjU0OTlBQzIzNjJBNkY2MDBERjhCQTUgLyogX1dLVGV4dE1h
bmlwdWxhdGlvbkNvbmZpZ3VyYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gX1dLVGV4dE1hbmlwdWxh
dGlvbkNvbmZpZ3VyYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUI1NDk5
QUUyMzYyQTdBNzAwREY4QkE1IC8qIF9XS1RleHRNYW5pcHVsYXRpb25Db25maWd1cmF0aW9uLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gX1dLVGV4dE1hbmlwdWxhdGlvbkNvbmZpZ3VyYXRpb24u
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCNTQ5OUIwMjM2MkE3RUMwMERGOEJB
NSAvKiBfV0tUZXh0TWFuaXB1bGF0aW9uRXhjbHVzaW9uUnVsZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBf
V0tUZXh0TWFuaXB1bGF0aW9uRXhjbHVzaW9uUnVsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtNjQxMiw2ICs2NDE4LDggQEAKIAkJCQk0MTUxRTVDMzFGQkI5MEE5MDBFNDdFMkQg
LyogRm9ybURhdGFSZWZlcmVuY2UuaCAqLywKIAkJCQlDMENFNzJBQzEyNDdFNzhEMDBCQzBFQzQg
LyogSGFuZGxlTWVzc2FnZS5oICovLAogCQkJCTFDOUFGMzYxMjQxMzREMjMwMEQzRUMwMiAvKiBJ
bWFnZURhdGFSZWZlcmVuY2UuaCAqLywKKwkJCQk5QjQ3OTA4RTI1MzE1MUNDMDBFQzExQUIgLyog
SlNJUENCaW5kaW5nLmggKi8sCisJCQkJOUI0NzkwOEMyNTMxNEQ4MzAwRUMxMUFCIC8qIE1lc3Nh
Z2VBcmd1bWVudERlc2NyaXB0aW9ucy5oICovLAogCQkJCTFBQzRDODI4MTZCODc2QTkwMDY5REND
RCAvKiBNZXNzYWdlRmxhZ3MuaCAqLywKIAkJCQkxQTNFRUQxMTE2MUE1M0Q2MDBBRUI0RjUgLyog
TWVzc2FnZVJlY2VpdmVyLmggKi8sCiAJCQkJMUEzRUVEMEMxNjFBNTM1MzAwQUVCNEY1IC8qIE1l
c3NhZ2VSZWNlaXZlck1hcC5jcHAgKi8sCkBAIC0xMDAxNSw2ICsxMDAyMyw3IEBACiAJCQkJMDdF
MTlFRjgyM0Q0MDFGMDAwOTRGRkI0IC8qIE1lZGlhUGxheWVyUHJpdmF0ZVJlbW90ZU1lc3NhZ2VS
ZWNlaXZlci5jcHAgKi8sCiAJCQkJMDdFMTlFRjkyM0Q0MDFGMDAwOTRGRkI0IC8qIE1lZGlhUGxh
eWVyUHJpdmF0ZVJlbW90ZU1lc3NhZ2VzLmggKi8sCiAJCQkJMDdFMTlFRkEyM0Q0MDFGMDAwOTRG
RkI0IC8qIE1lZGlhUGxheWVyUHJpdmF0ZVJlbW90ZU1lc3NhZ2VzUmVwbGllcy5oICovLAorCQkJ
CTlCNDc5MDkwMjUzMTU2MzIwMEVDMTFBQiAvKiBNZXNzYWdlQXJndW1lbnREZXNjcmlwdGlvbnMu
Y3BwICovLAogCQkJCTUxREQ5RjI2MTYzNjdEQTIwMDE1NzhFOSAvKiBOZXR3b3JrQ29ubmVjdGlv
blRvV2ViUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAgKi8sCiAJCQkJNTFERDlGMjcxNjM2N0RB
MjAwMTU3OEU5IC8qIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZXMuaCAqLywK
IAkJCQk1MkYwNjBERDE2NTQzMTc1MDBGMzI4MUIgLyogTmV0d29ya0NvbnRlbnRSdWxlTGlzdE1h
bmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwICovLApAQCAtMTA4NjcsNiArMTA4NzYsNyBAQAogCQkJ
CUE1RTM5MUZEMjE4M0MxRjgwMEM4RkIzMSAvKiBJbnNwZWN0b3JUYXJnZXRQcm94eS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQzVCQ0U1REYxQzUwNzY2QTAwQ0RFM0ZBIC8qIEludGVyYWN0aW9uSW5m
b3JtYXRpb25BdFBvc2l0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRDREMkM4MTFERjYwQkYz
MDAyRUIxMEMgLyogSW50ZXJhY3Rpb25JbmZvcm1hdGlvblJlcXVlc3QuaCBpbiBIZWFkZXJzICov
LAorCQkJCTlCNDc5MDhGMjUzMTUxQ0MwMEVDMTFBQiAvKiBKU0lQQ0JpbmRpbmcuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTFBRTQ5QTQ5MTFGRkE4Q0UwMDQ4QjQ2NCAvKiBKU05QTWV0aG9kLmggaW4g
SGVhZGVycyAqLywKIAkJCQkxQUU0OTg3ODExRkY3RkFBMDA0OEI0NjQgLyogSlNOUE9iamVjdC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQzE2NjNFNUIyNEFFQUEyRjAwQzZBM0IyIC8qIExhdW5jaFNl
cnZpY2VzRGF0YWJhc2VYUENDb25zdGFudHMuaCBpbiBIZWFkZXJzICovLApAQCAtMTA5MDMsNiAr
MTA5MTMsNyBAQAogCQkJCTA3RTE5RUZDMjNENDAxRjEwMDk0RkZCNCAvKiBNZWRpYVBsYXllclBy
aXZhdGVSZW1vdGVNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDdFMTlFRkQyM0Q0MDFG
MTAwOTRGRkI0IC8qIE1lZGlhUGxheWVyUHJpdmF0ZVJlbW90ZU1lc3NhZ2VzUmVwbGllcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNTE5MzNERUYxOTY1RUIzMTAwOEFDM0VBIC8qIE1lbnVVdGlsaXRp
ZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTlCNDc5MDhEMjUzMTREODMwMEVDMTFBQiAvKiBNZXNz
YWdlQXJndW1lbnREZXNjcmlwdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQzRDODI5MTZC
ODc2QTkwMDY5RENDRCAvKiBNZXNzYWdlRmxhZ3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBM0VF
RDEyMTYxQTUzRDYwMEFFQjRGNSAvKiBNZXNzYWdlUmVjZWl2ZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCTFBM0VFRDBGMTYxQTUzNTQwMEFFQjRGNSAvKiBNZXNzYWdlUmVjZWl2ZXJNYXAuaCBpbiBI
ZWFkZXJzICovLApAQCAtMTI3NDMsNiArMTI3NTQsNyBAQAogCQkJCTQ0OUQ5MERBMjFGREMzMEIw
MEY2NzdDMCAvKiBMb2NhbEF1dGhlbnRpY2F0aW9uU29mdExpbmsubW0gaW4gU291cmNlcyAqLywK
IAkJCQkyRDkyQTc3OTIxMkI2QTYxMDBGNDkzRkQgLyogTG9nZ2luZy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwN0UxOUVGQjIzRDQwMUYxMDA5NEZGQjQgLyogTWVkaWFQbGF5ZXJQcml2YXRlUmVt
b3RlTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTlCNDc5MDkxMjUzMTU2
MzIwMEVDMTFBQiAvKiBNZXNzYWdlQXJndW1lbnREZXNjcmlwdGlvbnMuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMkQ5MkE3ODEyMTJCNkE3MTAwRjQ5M0ZEIC8qIE1lc3NhZ2VSZWNlaXZlck1hcC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkyRDkyQTc4MjIxMkI2QTcxMDBGNDkzRkQgLyogTWVzc2Fn
ZVNlbmRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyRDkyQTc3QTIxMkI2QTYxMDBGNDkzRkQg
LyogTW9kdWxlLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvSVBDVGVzdGluZ0FQSS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvSVBDVGVzdGluZ0FQSS5jcHAJKHJldmlzaW9uIDI2ODI0NikK
KysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0lQQ1Rlc3RpbmdBUEkuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAiRW5jb2Rlci5oIgogI2lu
Y2x1ZGUgIkZyYW1lSW5mb0RhdGEuaCIKICNpbmNsdWRlICJHUFVQcm9jZXNzQ29ubmVjdGlvbi5o
IgotI2luY2x1ZGUgIk1lc3NhZ2VOYW1lcy5oIgorI2luY2x1ZGUgIk1lc3NhZ2VBcmd1bWVudERl
c2NyaXB0aW9ucy5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbi5oIgogI2lu
Y2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUgIldlYkZyYW1lLmgiCkBA
IC04Myw3ICs4Myw5IEBAIHByaXZhdGU6CiAKICAgICBzdGF0aWMgSlNWYWx1ZVJlZiB2aXNpdGVk
TGlua1N0b3JlSUQoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiwgSlNTdHJpbmdSZWYsIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbik7CiAgICAgc3RhdGljIEpTVmFsdWVSZWYgd2ViUGFnZVByb3h5SUQo
SlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiwgSlNTdHJpbmdSZWYsIEpTVmFsdWVSZWYqIGV4Y2Vw
dGlvbik7Ci0gICAgc3RhdGljIEpTVmFsdWVSZWYgZnJhbWVJZGVudGlmaWVyKEpTQ29udGV4dFJl
ZiwgSlNPYmplY3RSZWYsIEpTU3RyaW5nUmVmLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOworICAg
IHN0YXRpYyBKU1ZhbHVlUmVmIHNlc3Npb25JRChKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmLCBK
U1N0cmluZ1JlZiwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsKKyAgICBzdGF0aWMgSlNWYWx1ZVJl
ZiBwYWdlSUQoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiwgSlNTdHJpbmdSZWYsIEpTVmFsdWVS
ZWYqIGV4Y2VwdGlvbik7CisgICAgc3RhdGljIEpTVmFsdWVSZWYgZnJhbWVJRChKU0NvbnRleHRS
ZWYsIEpTT2JqZWN0UmVmLCBKU1N0cmluZ1JlZiwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsKICAg
ICBzdGF0aWMgSlNWYWx1ZVJlZiByZXRyaWV2ZUlEKEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYg
dGhpc09iamVjdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uLCBjb25zdCBXVEY6OkZ1bmN0aW9uPHVp
bnQ2NF90KEpTSVBDJik+Jik7CiAKICAgICBzdGF0aWMgSlNWYWx1ZVJlZiBtZXNzYWdlcyhKU0Nv
bnRleHRSZWYsIEpTT2JqZWN0UmVmLCBKU1N0cmluZ1JlZiwgSlNWYWx1ZVJlZiogZXhjZXB0aW9u
KTsKQEAgLTE0NCw4ICsxNDYsMTAgQEAgY29uc3QgSlNTdGF0aWNWYWx1ZSogSlNJUEM6OnN0YXRp
Y1ZhbHVlcwogewogICAgIHN0YXRpYyBjb25zdCBKU1N0YXRpY1ZhbHVlIHZhbHVlc1tdID0gewog
ICAgICAgICB7ICJ2aXNpdGVkTGlua1N0b3JlSUQiLCB2aXNpdGVkTGlua1N0b3JlSUQsIDAsIGtK
U1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9u
bHkgfSwKKyAgICAgICAgeyAiZnJhbWVJRCIsIGZyYW1lSUQsIDAsIGtKU1Byb3BlcnR5QXR0cmli
dXRlRG9udERlbGV0ZSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfSwKKyAgICAgICAg
eyAicGFnZUlEIiwgcGFnZUlELCAwLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IH0sCisgICAgICAgIHsgInNlc3Npb25JRCIsIHNl
c3Npb25JRCwgMCwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIHwga0pTUHJvcGVydHlB
dHRyaWJ1dGVSZWFkT25seSB9LAogICAgICAgICB7ICJ3ZWJQYWdlUHJveHlJRCIsIHdlYlBhZ2VQ
cm94eUlELCAwLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZVJlYWRPbmx5IH0sCi0gICAgICAgIHsgImZyYW1lSWRlbnRpZmllciIsIGZyYW1lSWRl
bnRpZmllciwgMCwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIHwga0pTUHJvcGVydHlB
dHRyaWJ1dGVSZWFkT25seSB9LAogICAgICAgICB7ICJtZXNzYWdlcyIsIG1lc3NhZ2VzLCAwLCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRP
bmx5IH0sCiAgICAgICAgIHsgMCwgMCwgMCwgMCB9CiAgICAgfTsKQEAgLTIzNywyNiArMjQxLDM5
IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGNyZWF0ZVR5cGVFcnJvcihKU0NvbnQKICAgICByZXR1cm4g
dG9SZWYoSlNDOjpjcmVhdGVUeXBlRXJyb3IodG9KUyhjb250ZXh0KSwgbWVzc2FnZSkpOwogfQog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBSZWN0VHlwZT4gYm9vbCBlbmNvZGVSZWN0VHlwZShJUEM6OkVu
Y29kZXImIGVuY29kZXIsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpK
U09iamVjdCoganNPYmplY3QpCit0ZW1wbGF0ZTx0eXBlbmFtZSBQb2ludFR5cGU+IGJvb2wgZW5j
b2RlUG9pbnRUeXBlKElQQzo6RW5jb2RlciYgZW5jb2RlciwgSlNDOjpKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU0M6OkpTT2JqZWN0KiBqc09iamVjdCwgSlNDOjpDYXRjaFNjb3BlJiBz
Y29wZSkKIHsKICAgICBhdXRvJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIGpz
WCA9IGpzT2JqZWN0LT5nZXQoZ2xvYmFsT2JqZWN0LCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJ4Il9zKSk7Ci0gICAgaWYgKCFqc1guaXNOdW1iZXIoKSkKKyAgICBpZiAoc2NvcGUu
ZXhjZXB0aW9uKCkgfHwgIWpzWC5pc051bWJlcigpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgYXV0byBqc1kgPSBqc09iamVjdC0+Z2V0KGdsb2JhbE9iamVjdCwgSlNDOjpJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCAieSJfcykpOwotICAgIGlmICghanNZLmlzTnVtYmVyKCkpCisgICAg
aWYgKHNjb3BlLmV4Y2VwdGlvbigpIHx8ICFqc1kuaXNOdW1iZXIoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGVuY29kZXIgPDwgUG9pbnRUeXBlKGpzWC5hc051bWJlcigpLCBqc1kuYXNO
dW1iZXIoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFJlY3RU
eXBlPiBib29sIGVuY29kZVJlY3RUeXBlKElQQzo6RW5jb2RlciYgZW5jb2RlciwgSlNDOjpKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTT2JqZWN0KiBqc09iamVjdCwgSlNDOjpD
YXRjaFNjb3BlJiBzY29wZSkKK3sKKyAgICBhdXRvJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
KyAgICBhdXRvIGpzWCA9IGpzT2JqZWN0LT5nZXQoZ2xvYmFsT2JqZWN0LCBKU0M6OklkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sICJ4Il9zKSk7CisgICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpIHx8
ICFqc1guaXNOdW1iZXIoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8ganNZID0g
anNPYmplY3QtPmdldChnbG9iYWxPYmplY3QsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgInkiX3MpKTsKKyAgICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkgfHwgIWpzWS5pc051bWJlcigp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgYXV0byBqc1dpZHRoID0ganNPYmplY3QtPmdl
dChnbG9iYWxPYmplY3QsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIndpZHRoIl9z
KSk7Ci0gICAgaWYgKCFqc1dpZHRoLmlzTnVtYmVyKCkpCisgICAgaWYgKHNjb3BlLmV4Y2VwdGlv
bigpIHx8ICFqc1dpZHRoLmlzTnVtYmVyKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBh
dXRvIGpzSGVpZ2h0ID0ganNPYmplY3QtPmdldChnbG9iYWxPYmplY3QsIEpTQzo6SWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgImhlaWdodCJfcykpOwotICAgIGlmICghanNIZWlnaHQuaXNOdW1i
ZXIoKSkKKyAgICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkgfHwgIWpzSGVpZ2h0LmlzTnVtYmVyKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBlbmNvZGVyIDw8IFJlY3RUeXBlKGpzWC5hc051
bWJlcigpLCBqc1kuYXNOdW1iZXIoKSwganNXaWR0aC5hc051bWJlcigpLCBqc0hlaWdodC5hc051
bWJlcigpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgSW50ZWdy
YWxUeXBlPiBib29sIGVuY29kZUludGVncmFsVHlwZShJUEM6OkVuY29kZXImIGVuY29kZXIsIEpT
Qzo6SlNWYWx1ZSBqc1ZhbHVlKQordGVtcGxhdGU8dHlwZW5hbWUgSW50ZWdyYWxUeXBlPiBib29s
IGVuY29kZU51bWVyaWNUeXBlKElQQzo6RW5jb2RlciYgZW5jb2RlciwgSlNDOjpKU1ZhbHVlIGpz
VmFsdWUpCiB7CiAgICAgaWYgKGpzVmFsdWUuaXNCaWdJbnQoKSkgewogICAgICAgICAvLyBGSVhN
RTogU3VwcG9ydCBuZWdhdGl2ZSBCaWdJbnQuCkBAIC0zNDAsOCArMzU3LDI0IEBAIHN0YXRpYyBi
b29sIGVuY29kZUFyZ3VtZW50KElQQzo6RW5jb2RlciYKICAgICBpZiAoc2NvcGUuZXhjZXB0aW9u
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGlmICh0eXBlID09ICJJbnRQb2ludCIp
IHsKKyAgICAgICAgaWYgKCFlbmNvZGVQb2ludFR5cGU8V2ViQ29yZTo6SW50UG9pbnQ+KGVuY29k
ZXIsIGdsb2JhbE9iamVjdCwganNPYmplY3QsIHNjb3BlKSkgeworICAgICAgICAgICAgKmV4Y2Vw
dGlvbiA9IGNyZWF0ZVR5cGVFcnJvcihjb250ZXh0LCAiRmFpbGVkIHRvIGNvbnZlcnQgSW50UG9p
bnQiX3MpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKworICAgIGlmICh0eXBlID09ICJGbG9hdFBvaW50IikgeworICAg
ICAgICBpZiAoIWVuY29kZVBvaW50VHlwZTxXZWJDb3JlOjpJbnRQb2ludD4oZW5jb2RlciwgZ2xv
YmFsT2JqZWN0LCBqc09iamVjdCwgc2NvcGUpKSB7CisgICAgICAgICAgICAqZXhjZXB0aW9uID0g
Y3JlYXRlVHlwZUVycm9yKGNvbnRleHQsICJGYWlsZWQgdG8gY29udmVydCBGbG9hdFBvaW50Il9z
KTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKICAgICBpZiAodHlwZSA9PSAiSW50UmVjdCIpIHsKLSAgICAgICAgaWYg
KCFlbmNvZGVSZWN0VHlwZTxXZWJDb3JlOjpJbnRSZWN0PihlbmNvZGVyLCBnbG9iYWxPYmplY3Qs
IGpzT2JqZWN0KSkgeworICAgICAgICBpZiAoIWVuY29kZVJlY3RUeXBlPFdlYkNvcmU6OkludFJl
Y3Q+KGVuY29kZXIsIGdsb2JhbE9iamVjdCwganNPYmplY3QsIHNjb3BlKSkgewogICAgICAgICAg
ICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJvcihjb250ZXh0LCAiRmFpbGVkIHRvIGNvbnZl
cnQgSW50UmVjdCJfcyk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KQEAg
LTM0OSw3ICszODIsNyBAQCBzdGF0aWMgYm9vbCBlbmNvZGVBcmd1bWVudChJUEM6OkVuY29kZXIm
CiAgICAgfQogCiAgICAgaWYgKHR5cGUgPT0gIkZsb2F0UmVjdCIpIHsKLSAgICAgICAgaWYgKCFl
bmNvZGVSZWN0VHlwZTxXZWJDb3JlOjpGbG9hdFJlY3Q+KGVuY29kZXIsIGdsb2JhbE9iamVjdCwg
anNPYmplY3QpKSB7CisgICAgICAgIGlmICghZW5jb2RlUmVjdFR5cGU8V2ViQ29yZTo6RmxvYXRS
ZWN0PihlbmNvZGVyLCBnbG9iYWxPYmplY3QsIGpzT2JqZWN0LCBzY29wZSkpIHsKICAgICAgICAg
ICAgICpleGNlcHRpb24gPSBjcmVhdGVUeXBlRXJyb3IoY29udGV4dCwgIkZhaWxlZCB0byBjb252
ZXJ0IEZsb2F0UmVjdCJfcyk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0K
QEAgLTM4Miw2ICs0MTUsMzAgQEAgc3RhdGljIGJvb2wgZW5jb2RlQXJndW1lbnQoSVBDOjpFbmNv
ZGVyJgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKKyAgICBpZiAodHlwZSA9PSAiVVJM
IikgeworICAgICAgICBpZiAoanNWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CisgICAgICAg
ICAgICBlbmNvZGVyIDw8IFVSTCB7IH07CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfQorICAgICAgICBhdXRvIHN0cmluZyA9IGpzVmFsdWUudG9XVEZTdHJpbmcoZ2xvYmFsT2Jq
ZWN0KTsKKyAgICAgICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICBlbmNvZGVyIDw8IFVSTCB7IFVSTCB7IH0sIHN0cmluZyB9OworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAodHlwZSA9PSAiUmVnaXN0cmFibGVE
b21haW4iKSB7CisgICAgICAgIGlmIChqc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKKyAg
ICAgICAgICAgIGVuY29kZXIgPDwgUmVnaXN0cmFibGVEb21haW4geyB9OworICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgYXV0byBzdHJpbmcgPSBqc1ZhbHVlLnRv
V1RGU3RyaW5nKGdsb2JhbE9iamVjdCk7CisgICAgICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZW5jb2RlciA8PCBSZWdpc3RyYWJs
ZURvbWFpbiB7IFVSTCB7IFVSTCB7IH0sIHN0cmluZyB9IH07CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKwogICAgIGlmICh0eXBlID09ICJSR0JBIikgewogICAgICAgICBpZiAoIWpzVmFs
dWUuaXNOdW1iZXIoKSkgewogICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJv
cihjb250ZXh0LCAiUkdCQSB2YWx1ZSBzaG91bGQgYmUgYSBudW1iZXIiX3MpOwpAQCAtMzkyLDQ4
ICs0NDksOTEgQEAgc3RhdGljIGJvb2wgZW5jb2RlQXJndW1lbnQoSVBDOjpFbmNvZGVyJgogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBib29sIGludGVncmFsUmVzdWx0OworICAg
IGJvb2wgbnVtZXJpY1Jlc3VsdDsKICAgICBpZiAodHlwZSA9PSAiYm9vbCIpCi0gICAgICAgIGlu
dGVncmFsUmVzdWx0ID0gZW5jb2RlSW50ZWdyYWxUeXBlPGJvb2w+KGVuY29kZXIsIGpzVmFsdWUp
OworICAgICAgICBudW1lcmljUmVzdWx0ID0gZW5jb2RlTnVtZXJpY1R5cGU8Ym9vbD4oZW5jb2Rl
ciwganNWYWx1ZSk7CisgICAgZWxzZSBpZiAodHlwZSA9PSAiZG91YmxlIikKKyAgICAgICAgbnVt
ZXJpY1Jlc3VsdCA9IGVuY29kZU51bWVyaWNUeXBlPGRvdWJsZT4oZW5jb2RlciwganNWYWx1ZSk7
CisgICAgZWxzZSBpZiAodHlwZSA9PSAiZmxvYXQiKQorICAgICAgICBudW1lcmljUmVzdWx0ID0g
ZW5jb2RlTnVtZXJpY1R5cGU8ZmxvYXQ+KGVuY29kZXIsIGpzVmFsdWUpOwogICAgIGVsc2UgaWYg
KHR5cGUgPT0gImludDhfdCIpCi0gICAgICAgIGludGVncmFsUmVzdWx0ID0gZW5jb2RlSW50ZWdy
YWxUeXBlPGludDhfdD4oZW5jb2RlciwganNWYWx1ZSk7CisgICAgICAgIG51bWVyaWNSZXN1bHQg
PSBlbmNvZGVOdW1lcmljVHlwZTxpbnQ4X3Q+KGVuY29kZXIsIGpzVmFsdWUpOwogICAgIGVsc2Ug
aWYgKHR5cGUgPT0gImludDE2X3QiKQotICAgICAgICBpbnRlZ3JhbFJlc3VsdCA9IGVuY29kZUlu
dGVncmFsVHlwZTxpbnQxNl90PihlbmNvZGVyLCBqc1ZhbHVlKTsKKyAgICAgICAgbnVtZXJpY1Jl
c3VsdCA9IGVuY29kZU51bWVyaWNUeXBlPGludDE2X3Q+KGVuY29kZXIsIGpzVmFsdWUpOwogICAg
IGVsc2UgaWYgKHR5cGUgPT0gImludDMyX3QiKQotICAgICAgICBpbnRlZ3JhbFJlc3VsdCA9IGVu
Y29kZUludGVncmFsVHlwZTxpbnQzMl90PihlbmNvZGVyLCBqc1ZhbHVlKTsKKyAgICAgICAgbnVt
ZXJpY1Jlc3VsdCA9IGVuY29kZU51bWVyaWNUeXBlPGludDMyX3Q+KGVuY29kZXIsIGpzVmFsdWUp
OwogICAgIGVsc2UgaWYgKHR5cGUgPT0gImludDY0X3QiKQotICAgICAgICBpbnRlZ3JhbFJlc3Vs
dCA9IGVuY29kZUludGVncmFsVHlwZTxpbnQ2NF90PihlbmNvZGVyLCBqc1ZhbHVlKTsKKyAgICAg
ICAgbnVtZXJpY1Jlc3VsdCA9IGVuY29kZU51bWVyaWNUeXBlPGludDY0X3Q+KGVuY29kZXIsIGpz
VmFsdWUpOwogICAgIGVsc2UgaWYgKHR5cGUgPT0gInVpbnQ4X3QiKQotICAgICAgICBpbnRlZ3Jh
bFJlc3VsdCA9IGVuY29kZUludGVncmFsVHlwZTx1aW50OF90PihlbmNvZGVyLCBqc1ZhbHVlKTsK
KyAgICAgICAgbnVtZXJpY1Jlc3VsdCA9IGVuY29kZU51bWVyaWNUeXBlPHVpbnQ4X3Q+KGVuY29k
ZXIsIGpzVmFsdWUpOwogICAgIGVsc2UgaWYgKHR5cGUgPT0gInVpbnQxNl90IikKLSAgICAgICAg
aW50ZWdyYWxSZXN1bHQgPSBlbmNvZGVJbnRlZ3JhbFR5cGU8dWludDE2X3Q+KGVuY29kZXIsIGpz
VmFsdWUpOworICAgICAgICBudW1lcmljUmVzdWx0ID0gZW5jb2RlTnVtZXJpY1R5cGU8dWludDE2
X3Q+KGVuY29kZXIsIGpzVmFsdWUpOwogICAgIGVsc2UgaWYgKHR5cGUgPT0gInVpbnQzMl90IikK
LSAgICAgICAgaW50ZWdyYWxSZXN1bHQgPSBlbmNvZGVJbnRlZ3JhbFR5cGU8dWludDMyX3Q+KGVu
Y29kZXIsIGpzVmFsdWUpOworICAgICAgICBudW1lcmljUmVzdWx0ID0gZW5jb2RlTnVtZXJpY1R5
cGU8dWludDMyX3Q+KGVuY29kZXIsIGpzVmFsdWUpOwogICAgIGVsc2UgaWYgKHR5cGUgPT0gInVp
bnQ2NF90IikKLSAgICAgICAgaW50ZWdyYWxSZXN1bHQgPSBlbmNvZGVJbnRlZ3JhbFR5cGU8dWlu
dDY0X3Q+KGVuY29kZXIsIGpzVmFsdWUpOworICAgICAgICBudW1lcmljUmVzdWx0ID0gZW5jb2Rl
TnVtZXJpY1R5cGU8dWludDY0X3Q+KGVuY29kZXIsIGpzVmFsdWUpOwogICAgIGVsc2UgewogICAg
ICAgICAqZXhjZXB0aW9uID0gY3JlYXRlVHlwZUVycm9yKGNvbnRleHQsICJCYWQgdHlwZSBuYW1l
Il9zKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBpZiAoIWludGVncmFsUmVz
dWx0KSB7Ci0gICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVUeXBlRXJyb3IoY29udGV4dCwgIkZh
aWxlZCB0byBlbmNvZGUgYW4gaW50ZWdlciJfcyk7CisgICAgaWYgKCFudW1lcmljUmVzdWx0KSB7
CisgICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVUeXBlRXJyb3IoY29udGV4dCwgIkZhaWxlZCB0
byBlbmNvZGUgYSBudW1iZXIiX3MpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAg
IHJldHVybiB0cnVlOwogfQogCisKK3N0YXRpYyBKU0M6OkpTT2JqZWN0KiBqc1Jlc3VsdEZyb21S
ZXBseURlY29kZXIoSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBJUEM6Ok1lc3Nh
Z2VOYW1lIG1lc3NhZ2VOYW1lLCBJUEM6OkRlY29kZXImIGRlY29kZXIpCit7CisgICAgYXV0byYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworCisgICAgYXV0byBhcnJheUJ1ZmZlciA9IEpTQzo6QXJyYXlCdWZmZXI6OmNy
ZWF0ZShkZWNvZGVyLmJ1ZmZlcigpLCBkZWNvZGVyLmxlbmd0aCgpKTsKKyAgICBKU0M6OkpTQXJy
YXlCdWZmZXIqIGpzQXJyYXlCdWZmZXIgPSBudWxscHRyOworICAgIGlmIChhdXRvKiBzdHJ1Y3R1
cmUgPSBnbG9iYWxPYmplY3QtPmFycmF5QnVmZmVyU3RydWN0dXJlKGFycmF5QnVmZmVyLT5zaGFy
aW5nTW9kZSgpKSkKKyAgICAgICAganNBcnJheUJ1ZmZlciA9IEpTQzo6SlNBcnJheUJ1ZmZlcjo6
Y3JlYXRlKHZtLCBzdHJ1Y3R1cmUsIFdURk1vdmUoYXJyYXlCdWZmZXIpKTsKKyAgICBpZiAoIWpz
QXJyYXlCdWZmZXIpIHsKKyAgICAgICAgdGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCBzY29w
ZSwgSlNDOjpjcmVhdGVUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCAiRmFpbGVkIHRvIGNyZWF0ZSB0
aGUgYXJyYXkgYnVmZmVyIGZvciB0aGUgcmVwbHkiX3MpKTsKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgfQorCisgICAgYXV0byBqc1JlcGx5QXJndW1lbnRzID0ganNWYWx1ZUZvclJlcGx5
QXJndW1lbnRzKGdsb2JhbE9iamVjdCwgbWVzc2FnZU5hbWUsIGRlY29kZXIpOworICAgIGlmICgh
anNSZXBseUFyZ3VtZW50cykgeworICAgICAgICB0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3Qs
IHNjb3BlLCBKU0M6OmNyZWF0ZVR5cGVFcnJvcihnbG9iYWxPYmplY3QsICJGYWlsZWQgdG8gZGVj
b2RlIHRoZSByZXBseSJfcykpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAg
ICBpZiAoanNSZXBseUFyZ3VtZW50cy0+aXNFbXB0eSgpKSB7CisgICAgICAgIHRocm93RXhjZXB0
aW9uKGdsb2JhbE9iamVjdCwgc2NvcGUsIEpTQzo6Y3JlYXRlVHlwZUVycm9yKGdsb2JhbE9iamVj
dCwgIkZhaWxlZCB0byBjb252ZXJ0IHRoZSByZXBseSB0byBhbiBKUyBhcnJheSJfcykpOworICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBhdXRvIGNhdGNoU2NvcGUgPSBERUNM
QVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICBKU0M6OkpTT2JqZWN0KiBqc1Jlc3VsdCA9IGNvbnN0
cnVjdEVtcHR5T2JqZWN0KGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5
cGUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihjYXRjaFNjb3BlLCBudWxscHRyKTsKKwor
ICAgIGpzUmVzdWx0LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cywg
KmpzUmVwbHlBcmd1bWVudHMpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oY2F0Y2hTY29wZSwg
bnVsbHB0cik7CisKKyAgICBqc1Jlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6
OmZyb21TdHJpbmcodm0sICJidWZmZXIiKSwganNBcnJheUJ1ZmZlcik7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihjYXRjaFNjb3BlLCBudWxscHRyKTsKKworICAgIHJldHVybiBqc1Jlc3VsdDsK
K30KKwogSlNWYWx1ZVJlZiBKU0lQQzo6c2VuZE1lc3NhZ2UoSlNDb250ZXh0UmVmIGNvbnRleHQs
IEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3Vu
dCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQog
ewogICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IHRvSlMoY29udGV4dCk7CiAgICAgSlNDOjpKU0xv
Y2tIb2xkZXIgbG9jayhnbG9iYWxPYmplY3QtPnZtKCkpOwogICAgIGF1dG8ganNJUEMgPSBtYWtl
UmVmUHRyKHRvV3JhcHBlZChjb250ZXh0LCB0aGlzT2JqZWN0KSk7CiAgICAgaWYgKCFqc0lQQykg
ewotICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoSlNDOjpjcmVhdGVUeXBlRXJyb3IodG9KUyhj
b250ZXh0KSwgIldyb25nIHR5cGUiX3MpKTsKKyAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVR5
cGVFcnJvcihjb250ZXh0LCAiV3JvbmcgdHlwZSJfcyk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVl
TWFrZVVuZGVmaW5lZChjb250ZXh0KTsKICAgICB9CiAKICAgICBpZiAoYXJndW1lbnRDb3VudCA8
IDMpIHsKLSAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKEpTQzo6Y3JlYXRlVHlwZUVycm9yKHRv
SlMoY29udGV4dCksICJNdXN0IHNwZWNpZnkgdGhlIHRhcmdldCBwcm9jZXNzLCBkZXNpbmF0aW9u
IElELCBhbmQgbWVzc2FnZSBJRCBhcyB0aGUgZmlyc3QgdGhyZWUgYXJndW1lbnRzIl9zKSk7Cisg
ICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVUeXBlRXJyb3IoY29udGV4dCwgIk11c3Qgc3BlY2lm
eSB0aGUgdGFyZ2V0IHByb2Nlc3MsIGRlc2luYXRpb24gSUQsIGFuZCBtZXNzYWdlIElEIGFzIHRo
ZSBmaXJzdCB0aHJlZSBhcmd1bWVudHMiX3MpOwogICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCk7CiAgICAgfQogCkBAIC00NDksNyArNTQ5LDQ4IEBAIEpTVmFsdWVS
ZWYgSlNJUEM6OnNlbmRNZXNzYWdlKEpTQ29udGV4dFIKICAgICBpZiAoIW1lc3NhZ2VJRCkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogCi0gICAgYXV0byBl
bmNvZGVyID0gbWFrZVVuaXF1ZTxJUEM6OkVuY29kZXI+KHN0YXRpY19jYXN0PElQQzo6TWVzc2Fn
ZU5hbWU+KHN0YXRpY19jYXN0PHVpbnQ2NF90PigqbWVzc2FnZUlEKSksICpkZXN0aW5hdGlvbklE
KTsKKyAgICBhdXRvIG1lc3NhZ2VOYW1lID0gc3RhdGljX2Nhc3Q8SVBDOjpNZXNzYWdlTmFtZT4o
Km1lc3NhZ2VJRCk7CisgICAgYXV0byBlbmNvZGVyID0gbWFrZVVuaXF1ZTxJUEM6OkVuY29kZXI+
KG1lc3NhZ2VOYW1lLCAqZGVzdGluYXRpb25JRCk7CisKKyAgICBKU1ZhbHVlUmVmIHJldHVyblZh
bHVlID0gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisKKyAgICBib29sIGhhc1JlcGx5
ID0gISFtZXNzYWdlUmVwbHlBcmd1bWVudERlc2NyaXB0aW9ucyhtZXNzYWdlTmFtZSk7CisgICAg
aWYgKGhhc1JlcGx5KSB7CisgICAgICAgIHVpbnQ2NF90IGxpc3RlbmVySUQgPSBJUEM6Om5leHRB
c3luY1JlcGx5SGFuZGxlcklEKCk7CisgICAgICAgIGVuY29kZXItPmVuY29kZShsaXN0ZW5lcklE
KTsKKworICAgICAgICBKU09iamVjdFJlZiByZXNvbHZlOworICAgICAgICBKU09iamVjdFJlZiBy
ZWplY3Q7CitBTExPV19ORVdfQVBJX1dJVEhPVVRfR1VBUkRTX0JFR0lOCisgICAgICAgIHJldHVy
blZhbHVlID0gSlNPYmplY3RNYWtlRGVmZXJyZWRQcm9taXNlKGNvbnRleHQsICZyZXNvbHZlLCAm
cmVqZWN0LCBleGNlcHRpb24pOworQUxMT1dfTkVXX0FQSV9XSVRIT1VUX0dVQVJEU19FTkQKKyAg
ICAgICAgaWYgKCFyZXR1cm5WYWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVu
ZGVmaW5lZChjb250ZXh0KTsKKworICAgICAgICBKU0dsb2JhbENvbnRleHRSZXRhaW4oSlNDb250
ZXh0R2V0R2xvYmFsQ29udGV4dChjb250ZXh0KSk7CisgICAgICAgIEpTVmFsdWVQcm90ZWN0KGNv
bnRleHQsIHJlc29sdmUpOworICAgICAgICBKU1ZhbHVlUHJvdGVjdChjb250ZXh0LCByZWplY3Qp
OworICAgICAgICBJUEM6OmFkZEFzeW5jUmVwbHlIYW5kbGVyKCpjb25uZWN0aW9uLCBsaXN0ZW5l
cklELCBbbWVzc2FnZU5hbWUsIGNvbnRleHQsIHJlc29sdmUsIHJlamVjdF0oSVBDOjpEZWNvZGVy
KiByZXBseURlY29kZXIpIHsKKyAgICAgICAgICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IHRvSlMo
Y29udGV4dCk7CisgICAgICAgICAgICBhdXRvJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAg
ICAgICAgICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2sodm0pOworCisgICAgICAgICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisgICAgICAgICAgICBhdXRvKiBqc1Jl
c3VsdCA9IGpzUmVzdWx0RnJvbVJlcGx5RGVjb2RlcihnbG9iYWxPYmplY3QsIG1lc3NhZ2VOYW1l
LCAqcmVwbHlEZWNvZGVyKTsKKyAgICAgICAgICAgIGlmIChhdXRvKiBleGNlcHRpb24gPSBzY29w
ZS5leGNlcHRpb24oKSkgeworICAgICAgICAgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7
CisgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSA9IHsgdG9SZWYoZ2xvYmFs
T2JqZWN0LCBleGNlcHRpb24pIH07CisgICAgICAgICAgICAgICAgSlNPYmplY3RDYWxsQXNGdW5j
dGlvbihjb250ZXh0LCByZWplY3QsIHJlamVjdCwgMSwgYXJndW1lbnRzLCBudWxscHRyKTsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZiBhcmd1bWVudHNb
XSA9IHsgdG9SZWYoZ2xvYmFsT2JqZWN0LCBqc1Jlc3VsdCkgfTsKKyAgICAgICAgICAgICAgICBK
U09iamVjdENhbGxBc0Z1bmN0aW9uKGNvbnRleHQsIHJlc29sdmUsIHJlc29sdmUsIDEsIGFyZ3Vt
ZW50cywgbnVsbHB0cik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEpTVmFsdWVVbnBy
b3RlY3QoY29udGV4dCwgcmVqZWN0KTsKKyAgICAgICAgICAgIEpTVmFsdWVVbnByb3RlY3QoY29u
dGV4dCwgcmVzb2x2ZSk7CisgICAgICAgICAgICBKU0dsb2JhbENvbnRleHRSZWxlYXNlKEpTQ29u
dGV4dEdldEdsb2JhbENvbnRleHQoY29udGV4dCkpOworICAgICAgICB9KTsKKyAgICB9CiAKICAg
ICBpZiAoYXJndW1lbnRDb3VudCA+IDMpIHsKICAgICAgICAgaWYgKCFlbmNvZGVBcmd1bWVudCgq
ZW5jb2RlciwgKmpzSVBDLCBjb250ZXh0LCBhcmd1bWVudHNbM10sIGV4Y2VwdGlvbikpCkBAIC00
NjAsNyArNjAxLDcgQEAgSlNWYWx1ZVJlZiBKU0lQQzo6c2VuZE1lc3NhZ2UoSlNDb250ZXh0Ugog
CiAgICAgY29ubmVjdGlvbi0+c2VuZE1lc3NhZ2UoV1RGTW92ZShlbmNvZGVyKSwgeyB9KTsKIAot
ICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKyAgICByZXR1cm4gcmV0
dXJuVmFsdWU7CiB9CiAKIEpTVmFsdWVSZWYgSlNJUEM6OnNlbmRTeW5jTWVzc2FnZShKU0NvbnRl
eHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVf
dCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVm
KiBleGNlcHRpb24pCkBAIC00NjksMTIgKzYxMCwxMiBAQCBKU1ZhbHVlUmVmIEpTSVBDOjpzZW5k
U3luY01lc3NhZ2UoSlNDb250CiAgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhnbG9iYWxPYmpl
Y3QtPnZtKCkpOwogICAgIGF1dG8ganNJUEMgPSBtYWtlUmVmUHRyKHRvV3JhcHBlZChjb250ZXh0
LCB0aGlzT2JqZWN0KSk7CiAgICAgaWYgKCFqc0lQQykgewotICAgICAgICAqZXhjZXB0aW9uID0g
dG9SZWYoSlNDOjpjcmVhdGVUeXBlRXJyb3IodG9KUyhjb250ZXh0KSwgIldyb25nIHR5cGUiX3Mp
KTsKKyAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJvcihjb250ZXh0LCAiV3Jvbmcg
dHlwZSJfcyk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsK
ICAgICB9CiAKICAgICBpZiAoYXJndW1lbnRDb3VudCA8IDQpIHsKLSAgICAgICAgKmV4Y2VwdGlv
biA9IHRvUmVmKEpTQzo6Y3JlYXRlVHlwZUVycm9yKHRvSlMoY29udGV4dCksICJNdXN0IHNwZWNp
ZnkgdGhlIHRhcmdldCBwcm9jZXNzLCBkZXNpbmF0aW9uIElELCBtZXNzYWdlIElELCBhbmQgdGlt
ZW91dCBhcyB0aGUgZmlyc3QgZm91ciBhcmd1bWVudHMiX3MpKTsKKyAgICAgICAgKmV4Y2VwdGlv
biA9IGNyZWF0ZVR5cGVFcnJvcihjb250ZXh0LCAiTXVzdCBzcGVjaWZ5IHRoZSB0YXJnZXQgcHJv
Y2VzcywgZGVzaW5hdGlvbiBJRCwgYW5kIG1lc3NhZ2UgSUQgYXMgdGhlIGZpcnN0IHRocmVlIGFy
Z3VtZW50cyJfcyk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0
KTsKICAgICB9CiAKQEAgLTQ5NCwyNCArNjM1LDMzIEBAIEpTVmFsdWVSZWYgSlNJUEM6OnNlbmRT
eW5jTWVzc2FnZShKU0NvbnQKICAgICB7CiAgICAgICAgIGF1dG8ganNWYWx1ZSA9IHRvSlMoZ2xv
YmFsT2JqZWN0LCBhcmd1bWVudHNbM10pOwogICAgICAgICBpZiAoIWpzVmFsdWUuaXNOdW1iZXIo
KSkgewotICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKEpTQzo6Y3JlYXRlVHlwZUVycm9y
KGdsb2JhbE9iamVjdCwgInRpbWVvdXQgbXVzdCBiZSBhIG51bWJlciJfcykpOworICAgICAgICAg
ICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJvcihjb250ZXh0LCAiVGltZW91dCBtdXN0IGJl
IGEgbnVtYmVyIl9zKTsKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChj
b250ZXh0KTsKICAgICAgICAgfQogICAgICAgICB0aW1lb3V0ID0gU2Vjb25kcyB7IGpzVmFsdWUu
YXNOdW1iZXIoKSB9OwogICAgIH0KLSAgICAKKwogICAgIC8vIEZJWE1FOiBTdXBwb3J0IHRoZSBv
cHRpb25zLgogCiAgICAgdWludDY0X3Qgc3luY1JlcXVlc3RJRCA9IDA7Ci0gICAgYXV0byBlbmNv
ZGVyID0gY29ubmVjdGlvbi0+Y3JlYXRlU3luY01lc3NhZ2VFbmNvZGVyKHN0YXRpY19jYXN0PElQ
Qzo6TWVzc2FnZU5hbWU+KHN0YXRpY19jYXN0PHVpbnQ2NF90PigqbWVzc2FnZUlEKSksICpkZXN0
aW5hdGlvbklELCBzeW5jUmVxdWVzdElEKTsKKyAgICBhdXRvIG1lc3NhZ2VOYW1lID0gc3RhdGlj
X2Nhc3Q8SVBDOjpNZXNzYWdlTmFtZT4oKm1lc3NhZ2VJRCk7CisgICAgYXV0byBlbmNvZGVyID0g
Y29ubmVjdGlvbi0+Y3JlYXRlU3luY01lc3NhZ2VFbmNvZGVyKG1lc3NhZ2VOYW1lLCAqZGVzdGlu
YXRpb25JRCwgc3luY1JlcXVlc3RJRCk7CiAKICAgICBpZiAoYXJndW1lbnRDb3VudCA+IDQpIHsK
ICAgICAgICAgaWYgKCFlbmNvZGVBcmd1bWVudCgqZW5jb2RlciwgKmpzSVBDLCBjb250ZXh0LCBh
cmd1bWVudHNbNF0sIGV4Y2VwdGlvbikpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCk7CiAgICAgfQogCi0gICAgYXV0byByZXBseURlY29kZXIgPSBjb25u
ZWN0aW9uLT5zZW5kU3luY01lc3NhZ2Uoc3luY1JlcXVlc3RJRCwgV1RGTW92ZShlbmNvZGVyKSwg
dGltZW91dCwgeyB9KTsKLSAgICAvLyBGSVhNRTogRGVjb2RlIHRoZSByZXBseS4KKyAgICBpZiAo
YXV0byByZXBseURlY29kZXIgPSBjb25uZWN0aW9uLT5zZW5kU3luY01lc3NhZ2Uoc3luY1JlcXVl
c3RJRCwgV1RGTW92ZShlbmNvZGVyKSwgdGltZW91dCwgeyB9KSkgeworICAgICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRShnbG9iYWxPYmplY3QtPnZtKCkpOworICAgICAgICBh
dXRvKiBqc1Jlc3VsdCA9IGpzUmVzdWx0RnJvbVJlcGx5RGVjb2RlcihnbG9iYWxPYmplY3QsIG1l
c3NhZ2VOYW1lLCAqcmVwbHlEZWNvZGVyKTsKKyAgICAgICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigp
KSB7CisgICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZ2xvYmFsT2JqZWN0LCBzY29wZS5l
eGNlcHRpb24oKSk7CisgICAgICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOworICAgICAg
ICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiB0b1JlZihnbG9iYWxPYmplY3QsIGpzUmVzdWx0KTsKKyAgICB9CiAKICAg
ICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiB9CkBAIC01MjQsMTcgKzY3
NCwzMSBAQCBKU1ZhbHVlUmVmIEpTSVBDOjp2aXNpdGVkTGlua1N0b3JlSUQoSlNDCiAgICAgfSk7
CiB9CiAKLUpTVmFsdWVSZWYgSlNJUEM6OndlYlBhZ2VQcm94eUlEKEpTQ29udGV4dFJlZiBjb250
ZXh0LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBKU1N0cmluZ1JlZiwgSlNWYWx1ZVJlZiogZXhj
ZXB0aW9uKQorSlNWYWx1ZVJlZiBKU0lQQzo6ZnJhbWVJRChKU0NvbnRleHRSZWYgY29udGV4dCwg
SlNPYmplY3RSZWYgdGhpc09iamVjdCwgSlNTdHJpbmdSZWYsIEpTVmFsdWVSZWYqIGV4Y2VwdGlv
bikKIHsKICAgICByZXR1cm4gcmV0cmlldmVJRChjb250ZXh0LCB0aGlzT2JqZWN0LCBleGNlcHRp
b24sIFtdKEpTSVBDJiB3cmFwcGVkKSB7Ci0gICAgICAgIHJldHVybiB3cmFwcGVkLm1fd2ViUGFn
ZS0+d2ViUGFnZVByb3h5SUQoKTsKKyAgICAgICAgcmV0dXJuIHdyYXBwZWQubV93ZWJGcmFtZS0+
ZnJhbWVJRCgpLnRvVUludDY0KCk7CiAgICAgfSk7CiB9CiAKLUpTVmFsdWVSZWYgSlNJUEM6OmZy
YW1lSWRlbnRpZmllcihKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgdGhpc09iamVj
dCwgSlNTdHJpbmdSZWYsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK0pTVmFsdWVSZWYgSlNJUEM6
OnBhZ2VJRChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgSlNT
dHJpbmdSZWYsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKICAgICByZXR1cm4gcmV0cmlldmVJ
RChjb250ZXh0LCB0aGlzT2JqZWN0LCBleGNlcHRpb24sIFtdKEpTSVBDJiB3cmFwcGVkKSB7Ci0g
ICAgICAgIHJldHVybiB3cmFwcGVkLm1fd2ViRnJhbWUtPmZyYW1lSUQoKS50b1VJbnQ2NCgpOwor
ICAgICAgICByZXR1cm4gd3JhcHBlZC5tX3dlYlBhZ2UtPmlkZW50aWZpZXIoKS50b1VJbnQ2NCgp
OworICAgIH0pOworfQorCitKU1ZhbHVlUmVmIEpTSVBDOjpzZXNzaW9uSUQoSlNDb250ZXh0UmVm
IGNvbnRleHQsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIEpTU3RyaW5nUmVmLCBKU1ZhbHVlUmVm
KiBleGNlcHRpb24pCit7CisgICAgcmV0dXJuIHJldHJpZXZlSUQoY29udGV4dCwgdGhpc09iamVj
dCwgZXhjZXB0aW9uLCBbXShKU0lQQyYgd3JhcHBlZCkgeworICAgICAgICByZXR1cm4gd3JhcHBl
ZC5tX3dlYlBhZ2UtPnNlc3Npb25JRCgpLnRvVUludDY0KCk7CisgICAgfSk7Cit9CisKK0pTVmFs
dWVSZWYgSlNJUEM6OndlYlBhZ2VQcm94eUlEKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVj
dFJlZiB0aGlzT2JqZWN0LCBKU1N0cmluZ1JlZiwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQorewor
ICAgIHJldHVybiByZXRyaWV2ZUlEKGNvbnRleHQsIHRoaXNPYmplY3QsIGV4Y2VwdGlvbiwgW10o
SlNJUEMmIHdyYXBwZWQpIHsKKyAgICAgICAgcmV0dXJuIHdyYXBwZWQubV93ZWJQYWdlLT53ZWJQ
YWdlUHJveHlJRCgpOwogICAgIH0pOwogfQogCkBAIC01NTUsNiArNzE5LDQxIEBAIEpTVmFsdWVS
ZWYgSlNJUEM6OnJldHJpZXZlSUQoSlNDb250ZXh0UmUKICAgICByZXR1cm4gdG9SZWYodm0sIGpz
VmFsdWUpOwogfQogCitzdGF0aWMgSlNDOjpKU1ZhbHVlIGNyZWF0ZUpTQXJyYXlGb3JBcmd1bWVu
dERlc2NyaXB0aW9ucyhKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIE9wdGlvbmFs
PFZlY3RvcjxJUEM6OkFyZ3VtZW50RGVzY3JpcHRpb24+PiYmIGFyZ3VtZW50RGVzY3JpcHRpb25z
KQoreworICAgIGlmICghYXJndW1lbnREZXNjcmlwdGlvbnMpCisgICAgICAgIHJldHVybiBKU0M6
OmpzTnVsbCgpOworCisgICAgYXV0byYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAgIEpTQzo6SlNPYmplY3QqIGFy
Z3VtZW50c0FycmF5ID0gSlNDOjpjb25zdHJ1Y3RFbXB0eUFycmF5KGdsb2JhbE9iamVjdCwgbnVs
bHB0cik7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNDOjpqc1REWlZhbHVlKCkp
OworCisgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudEluZGV4ID0gMDsgYXJndW1lbnRJbmRleCA8
IGFyZ3VtZW50RGVzY3JpcHRpb25zLT5zaXplKCk7ICsrYXJndW1lbnRJbmRleCkgeworICAgICAg
ICBhdXRvJiBkZXNjcmlwdGlvbiA9IGFyZ3VtZW50RGVzY3JpcHRpb25zLT5hdChhcmd1bWVudElu
ZGV4KTsKKyAgICAgICAgSlNDOjpKU09iamVjdCoganNEZXNjcmlwdGlvbnMgPSBjb25zdHJ1Y3RF
bXB0eU9iamVjdChnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCkp
OworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU0M6OmpzVERaVmFsdWUoKSk7
CisKKyAgICAgICAgYXJndW1lbnRzQXJyYXktPnB1dERpcmVjdEluZGV4KGdsb2JhbE9iamVjdCwg
YXJndW1lbnRJbmRleCwganNEZXNjcmlwdGlvbnMpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBKU0M6OmpzVERaVmFsdWUoKSk7CisKKyAgICAgICAganNEZXNjcmlwdGlvbnMt
PnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibmFtZSIpLCBK
U0M6OmpzU3RyaW5nKHZtLCBTdHJpbmcoZGVzY3JpcHRpb24ubmFtZSkpKTsKKyAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNDOjpqc1REWlZhbHVlKCkpOworCisgICAgICAgIGpz
RGVzY3JpcHRpb25zLT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgInR5cGUiKSwgSlNDOjpqc1N0cmluZyh2bSwgU3RyaW5nKGRlc2NyaXB0aW9uLnR5cGUpKSk7
CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTQzo6anNURFpWYWx1ZSgpKTsK
KworICAgICAgICBqc0Rlc2NyaXB0aW9ucy0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6
OmZyb21TdHJpbmcodm0sICJvcHRpb25hbCIpLCBKU0M6OmpzQm9vbGVhbihkZXNjcmlwdGlvbi5p
c09wdGlvbmFsKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTQzo6anNU
RFpWYWx1ZSgpKTsKKworICAgICAgICBpZiAoZGVzY3JpcHRpb24uZW51bU5hbWUpIHsKKyAgICAg
ICAgICAgIGpzRGVzY3JpcHRpb25zLT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgImVudW0iKSwgSlNDOjpqc1N0cmluZyh2bSwgU3RyaW5nKGRlc2NyaXB0aW9u
LmVudW1OYW1lKSkpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlND
Ojpqc1REWlZhbHVlKCkpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBhcmd1bWVudHNB
cnJheTsKK30KKwogSlNWYWx1ZVJlZiBKU0lQQzo6bWVzc2FnZXMoSlNDb250ZXh0UmVmIGNvbnRl
eHQsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIEpTU3RyaW5nUmVmLCBKU1ZhbHVlUmVmKiBleGNl
cHRpb24pCiB7CiAgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gdG9KUyhjb250ZXh0KTsKQEAgLTU2
NywxNyArNzY2LDM1IEBAIEpTVmFsdWVSZWYgSlNJUEM6Om1lc3NhZ2VzKEpTQ29udGV4dFJlZiAK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogICAgIH0KIAor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKICAgICBKU0M6OkpTT2Jq
ZWN0KiBtZXNzYWdlc09iamVjdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGdsb2JhbE9iamVjdCwg
Z2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCkpOworCiAgICAgYXV0byBuYW1l
SWRlbnQgPSBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJuYW1lIik7CisgICAgYXV0
byByZXBseUFyZ3VtZW50c0lkZW50ID0gSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAi
cmVwbHlBcmd1bWVudHMiKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KElQQzo6TWVzc2FnZU5hbWU6Okxhc3QpOyArK2kpIHsKLSAgICAgICAgYXV0
byogbWVzc2FnZU5hbWUgPSBkZXNjcmlwdGlvbihzdGF0aWNfY2FzdDxJUEM6Ok1lc3NhZ2VOYW1l
PihpKSk7CisgICAgICAgIGF1dG8gbmFtZSA9IHN0YXRpY19jYXN0PElQQzo6TWVzc2FnZU5hbWU+
KGkpOwogCiAgICAgICAgIEpTQzo6SlNPYmplY3QqIGRpY3Rpb25hcnkgPSBjb25zdHJ1Y3RFbXB0
eU9iamVjdChnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCkpOwor
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlTWFrZVVuZGVmaW5lZChj
b250ZXh0KSk7CisKICAgICAgICAgZGljdGlvbmFyeS0+cHV0RGlyZWN0KHZtLCBuYW1lSWRlbnQs
IEpTQzo6SlNWYWx1ZShpKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpT
VmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpKTsKIAotICAgICAgICAvLyBGSVhNRTogQWRkIGFy
Z3VtZW50IG5hbWVzLgorICAgICAgICBhdXRvIGFyZ3VtZW50RGVzY3JpcHRpb25zID0gY3JlYXRl
SlNBcnJheUZvckFyZ3VtZW50RGVzY3JpcHRpb25zKGdsb2JhbE9iamVjdCwgSVBDOjptZXNzYWdl
QXJndW1lbnREZXNjcmlwdGlvbnMobmFtZSkpOworICAgICAgICBpZiAoYXJndW1lbnREZXNjcmlw
dGlvbnMuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVk
KGNvbnRleHQpOworICAgICAgICBkaWN0aW9uYXJ5LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5
TmFtZXMtPmFyZ3VtZW50cywgYXJndW1lbnREZXNjcmlwdGlvbnMpOyAgICAgICAgICAgIAorICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250
ZXh0KSk7CisKKyAgICAgICAgYXV0byByZXBseUFyZ3VtZW50RGVzY3JpcHRpb25zID0gY3JlYXRl
SlNBcnJheUZvckFyZ3VtZW50RGVzY3JpcHRpb25zKGdsb2JhbE9iamVjdCwgSVBDOjptZXNzYWdl
UmVwbHlBcmd1bWVudERlc2NyaXB0aW9ucyhuYW1lKSk7CisgICAgICAgIGlmIChyZXBseUFyZ3Vt
ZW50RGVzY3JpcHRpb25zLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFr
ZVVuZGVmaW5lZChjb250ZXh0KTsKKyAgICAgICAgZGljdGlvbmFyeS0+cHV0RGlyZWN0KHZtLCBy
ZXBseUFyZ3VtZW50c0lkZW50LCByZXBseUFyZ3VtZW50RGVzY3JpcHRpb25zKTsgICAgICAgICAg
ICAKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZU1ha2VVbmRlZmlu
ZWQoY29udGV4dCkpOwogCi0gICAgICAgIG1lc3NhZ2VzT2JqZWN0LT5wdXREaXJlY3Qodm0sIEpT
Qzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgbWVzc2FnZU5hbWUpLCBkaWN0aW9uYXJ5KTsK
KyAgICAgICAgbWVzc2FnZXNPYmplY3QtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCBkZXNjcmlwdGlvbihuYW1lKSksIGRpY3Rpb25hcnkpOworICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KSk7
CiAgICAgfQogCiAgICAgcmV0dXJuIHRvUmVmKHZtLCBtZXNzYWdlc09iamVjdCk7CkluZGV4OiBU
b29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAy
NjgzODUpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOSBA
QAorMjAyMC0xMC0xMiAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAg
ICBJUEMgdGVzdGluZyBKUyBBUEkgc2hvdWxkIGV4cG9zZSBhIHJlcGx5IGFuZCBkZXNjcmliZSB0
aGUgbGlzdCBvZiBhcmd1bWVudHMgZm9yIGVhY2ggbWVzc2FnZQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE3NTY1CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgdGVzdHMgZm9yIGRlY29kaW5nIHJl
cGxpZXMgZm9yIHN5bmMgYW5kIGFzeW5jIG1lc3NhZ2VzIGFuZCBvbmUgZm9yIGFyZ3VtZW50IGRl
c2NyaXB0aW9ucy4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
SVBDVGVzdGluZ0FQSS5tbToKKyAgICAgICAgKC1bSVBDVGVzdGluZ0FQSURlbGVnYXRlIHdlYlZp
ZXc6cnVuSmF2YVNjcmlwdFRleHRJbnB1dFBhbmVsV2l0aFByb21wdDpkZWZhdWx0VGV4dDppbml0
aWF0ZWRCeUZyYW1lOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtJUENUZXN0aW5n
QVBJRGVsZWdhdGUgX3dlYlZpZXc6d2ViQ29udGVudFByb2Nlc3NEaWRUZXJtaW5hdGVXaXRoUmVh
c29uOl0pOgorICAgICAgICAoSVBDVGVzdGluZ0FQSS5EZWNvZGVzUmVwbHlBcmd1bWVudHNGb3JQ
cm9tcHQpOgorICAgICAgICAoSVBDVGVzdGluZ0FQSS5EZWNvZGVzUmVwbHlBcmd1bWVudHNGb3JB
c3luY01lc3NhZ2UpOgorICAgICAgICAoSVBDVGVzdGluZ0FQSS5EZXNjcmliZXNBcmd1bWVudHMp
OgorCiAyMDIwLTEwLTEyICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KIAogICAg
ICAgICBDU1MgImFueS1wb2ludGVyOmZpbmUiIG1lZGlhIHF1ZXJ5IGZhbHNlIG9uIGlQYWQvUGVu
Y2lsCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lQQ1Rlc3Rp
bmdBUEkubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9JUENUZXN0aW5nQVBJLm1tCShyZXZpc2lvbiAyNjgyNDYpCisrKyBUb29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lQQ1Rlc3RpbmdBUEkubW0JKHdvcmtpbmcgY29weSkK
QEAgLTM0LDkgKzM0LDEyIEBACiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAKIHN0YXRpYyBi
b29sIGRvbmUgPSBmYWxzZTsKK3N0YXRpYyBib29sIGRpZENyYXNoID0gZmFsc2U7CiBzdGF0aWMg
UmV0YWluUHRyPE5TU3RyaW5nPiBhbGVydE1lc3NhZ2U7CitzdGF0aWMgUmV0YWluUHRyPE5TU3Ry
aW5nPiBwcm9tcHREZWZhdWx0Oworc3RhdGljIFJldGFpblB0cjxOU1N0cmluZz4gcHJvbXB0UmVz
dWx0OwogCi1AaW50ZXJmYWNlIElQQ1Rlc3RpbmdBUElEZWxlZ2F0ZSA6IE5TT2JqZWN0IDxXS1VJ
RGVsZWdhdGU+CitAaW50ZXJmYWNlIElQQ1Rlc3RpbmdBUElEZWxlZ2F0ZSA6IE5TT2JqZWN0IDxX
S1VJRGVsZWdhdGUsIFdLTmF2aWdhdGlvbkRlbGVnYXRlPgogQGVuZAogICAgIAogQGltcGxlbWVu
dGF0aW9uIElQQ1Rlc3RpbmdBUElEZWxlZ2F0ZQpAQCAtNDgsNiArNTEsMTkgQEAgLSAodm9pZCl3
ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IHJ1bgogICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7
CiB9CiAKKy0gKHZvaWQpd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBydW5KYXZhU2NyaXB0
VGV4dElucHV0UGFuZWxXaXRoUHJvbXB0OihOU1N0cmluZyAqKXByb21wdCBkZWZhdWx0VGV4dDoo
TlNTdHJpbmcgKilkZWZhdWx0VGV4dCBpbml0aWF0ZWRCeUZyYW1lOihXS0ZyYW1lSW5mbyAqKWZy
YW1lIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU1N0cmluZyAqIF9OdWxsYWJsZSkpY29t
cGxldGlvbkhhbmRsZXIKK3sKKyAgICBwcm9tcHREZWZhdWx0ID0gZGVmYXVsdFRleHQ7CisgICAg
ZG9uZSA9IHRydWU7CisgICAgY29tcGxldGlvbkhhbmRsZXIocHJvbXB0UmVzdWx0LmdldCgpKTsK
K30KKworLSAodm9pZClfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyB3ZWJDb250ZW50UHJv
Y2Vzc0RpZFRlcm1pbmF0ZVdpdGhSZWFzb246KF9XS1Byb2Nlc3NUZXJtaW5hdGlvblJlYXNvbily
ZWFzb24KK3sKKyAgICBkaWRDcmFzaCA9IGZhbHNlOworICAgIGRvbmUgPSB0cnVlOworfQorCiBA
ZW5kCiAKIFRFU1QoSVBDVGVzdGluZ0FQSSwgSXNEaXNhYmxlZEJ5RGVmYXVsdCkKQEAgLTg3LDQg
KzEwMyw3OSBAQCBURVNUKElQQ1Rlc3RpbmdBUEksIENhblNlbmRBbGVydCkKICAgICBFWFBFQ1Rf
U1RSRVEoW2FsZXJ0TWVzc2FnZSBVVEY4U3RyaW5nXSwgImhpIik7CiB9CiAKK1RFU1QoSVBDVGVz
dGluZ0FQSSwgRGVjb2Rlc1JlcGx5QXJndW1lbnRzRm9yUHJvbXB0KQoreworICAgIFJldGFpblB0
cjxXS1dlYlZpZXdDb25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2Vi
Vmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKKyAgICBmb3IgKF9XS0ludGVybmFsRGVi
dWdGZWF0dXJlICpmZWF0dXJlIGluIFtXS1ByZWZlcmVuY2VzIF9pbnRlcm5hbERlYnVnRmVhdHVy
ZXNdKSB7CisgICAgICAgIGlmIChbZmVhdHVyZS5rZXkgaXNFcXVhbFRvU3RyaW5nOkAiSVBDVGVz
dGluZ0FQSUVuYWJsZWQiXSkgeworICAgICAgICAgICAgW1tjb25maWd1cmF0aW9uIHByZWZlcmVu
Y2VzXSBfc2V0RW5hYmxlZDpZRVMgZm9ySW50ZXJuYWxEZWJ1Z0ZlYXR1cmU6ZmVhdHVyZV07Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBSZXRhaW5QdHI8VGVzdFdL
V2ViVmlldz4gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0
aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgMzAwLCAzMDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJh
dGlvbi5nZXQoKV0pOworCisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tJUENUZXN0aW5n
QVBJRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICBbd2ViVmlldyBzZXRVSURlbGVnYXRlOmRl
bGVnYXRlLmdldCgpXTsKKworICAgIGRvbmUgPSBmYWxzZTsKKyAgICBwcm9tcHRSZXN1bHQgPSBA
ImZvbyI7CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRIVE1MU3RyaW5nOkAiPCFET0NU
WVBFIGh0bWw+PHNjcmlwdD5yZXN1bHQgPSBJUEMuc2VuZFN5bmNNZXNzYWdlKCdVSScsIElQQy53
ZWJQYWdlUHJveHlJRCwgSVBDLm1lc3NhZ2VzLldlYlBhZ2VQcm94eV9SdW5KYXZhU2NyaXB0UHJv
bXB0Lm5hbWUsIDEwMCwiCisgICAgICAgICJbe3R5cGU6ICd1aW50NjRfdCcsIHZhbHVlOiBJUEMu
ZnJhbWVJZGVudGlmaWVyfSwge3R5cGU6ICdGcmFtZUluZm9EYXRhJ30sIHsndHlwZSc6ICdTdHJp
bmcnLCAndmFsdWUnOiAnaGknfSwgeyd0eXBlJzogJ1N0cmluZycsICd2YWx1ZSc6ICdiYXInfV0p
Ozwvc2NyaXB0PiJdOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CisKKyAg
ICBFWFBFQ1RfU1RSRVEoW3Byb21wdERlZmF1bHQgVVRGOFN0cmluZ10sICJiYXIiKTsKKyAgICBF
WFBFQ1RfU1RSRVEoW1t3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJKU09O
LnN0cmluZ2lmeShyZXN1bHQuYXJndW1lbnRzKSJdIFVURjhTdHJpbmddLCAiW3tcInR5cGVcIjpc
IlN0cmluZ1wiLFwidmFsdWVcIjpcImZvb1wifV0iKTsKK30KKworI2lmIEVOQUJMRShSRVNPVVJD
RV9MT0FEX1NUQVRJU1RJQ1MpCitURVNUKElQQ1Rlc3RpbmdBUEksIERlY29kZXNSZXBseUFyZ3Vt
ZW50c0ZvckFzeW5jTWVzc2FnZSkKK3sKKyAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJh
dGlvbj4gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFs
bG9jXSBpbml0XSk7CisgICAgZm9yIChfV0tJbnRlcm5hbERlYnVnRmVhdHVyZSAqZmVhdHVyZSBp
biBbV0tQcmVmZXJlbmNlcyBfaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzXSkgeworICAgICAgICBpZiAo
W2ZlYXR1cmUua2V5IGlzRXF1YWxUb1N0cmluZzpAIklQQ1Rlc3RpbmdBUElFbmFibGVkIl0pIHsK
KyAgICAgICAgICAgIFtbY29uZmlndXJhdGlvbiBwcmVmZXJlbmNlc10gX3NldEVuYWJsZWQ6WUVT
IGZvckludGVybmFsRGVidWdGZWF0dXJlOmZlYXR1cmVdOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgUmV0YWluUHRyPFRlc3RXS1dlYlZpZXc+IHdlYlZpZXcgPSBh
ZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAs
IDAsIDMwMCwgMzAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKKworICAg
IGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbSVBDVGVzdGluZ0FQSURlbGVnYXRlIGFsbG9jXSBp
bml0XSk7CisgICAgW3dlYlZpZXcgc2V0VUlEZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQoKV07CisKKyAg
ICBkb25lID0gZmFsc2U7CisgICAgcHJvbXB0UmVzdWx0ID0gQCJmb28iOworICAgIFt3ZWJWaWV3
IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzpAIjwhRE9DVFlQRSBodG1sPjxzY3JpcHQ+SVBD
LnNlbmRNZXNzYWdlKFwiTmV0d29ya2luZ1wiLCAwLCBJUEMubWVzc2FnZXMuTmV0d29ya0Nvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3NfSGFzU3RvcmFnZUFjY2Vzcy5uYW1lLCIKKyAgICAgICAgIlt7dHlw
ZTogJ1JlZ2lzdHJhYmxlRG9tYWluJywgdmFsdWU6ICdodHRwczovL2lwY3Rlc3RpbmdhcGkuY29t
J30sIHt0eXBlOiAnUmVnaXN0cmFibGVEb21haW4nLCB2YWx1ZTogJ2h0dHBzOi8vd2Via2l0Lm9y
Zyd9LCB7dHlwZTogJ3VpbnQ2NF90JywgdmFsdWU6IElQQy5mcmFtZUlkZW50aWZpZXJ9LCIKKyAg
ICAgICAgInt0eXBlOiAndWludDY0X3QnLCB2YWx1ZTogSVBDLnBhZ2VJZGVudGlmaWVyfV0pLnRo
ZW4oKHJlc3VsdCkgPT4gYWxlcnQoSlNPTi5zdHJpbmdpZnkocmVzdWx0LmFyZ3VtZW50cykpKTs8
L3NjcmlwdD4iXTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOworCisgICAg
RVhQRUNUX1NUUkVRKFthbGVydE1lc3NhZ2UgVVRGOFN0cmluZ10sICJbe1widHlwZVwiOlwiYm9v
bFwiLFwidmFsdWVcIjpmYWxzZX1dIik7Cit9CisjZW5kaWYKKworVEVTVChJUENUZXN0aW5nQVBJ
LCBEZXNjcmliZXNBcmd1bWVudHMpCit7CisgICAgUmV0YWluUHRyPFdLV2ViVmlld0NvbmZpZ3Vy
YXRpb24+IGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBh
bGxvY10gaW5pdF0pOworICAgIGZvciAoX1dLSW50ZXJuYWxEZWJ1Z0ZlYXR1cmUgKmZlYXR1cmUg
aW4gW1dLUHJlZmVyZW5jZXMgX2ludGVybmFsRGVidWdGZWF0dXJlc10pIHsKKyAgICAgICAgaWYg
KFtmZWF0dXJlLmtleSBpc0VxdWFsVG9TdHJpbmc6QCJJUENUZXN0aW5nQVBJRW5hYmxlZCJdKSB7
CisgICAgICAgICAgICBbW2NvbmZpZ3VyYXRpb24gcHJlZmVyZW5jZXNdIF9zZXRFbmFibGVkOllF
UyBmb3JJbnRlcm5hbERlYnVnRmVhdHVyZTpmZWF0dXJlXTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgfQorICAgIFJldGFpblB0cjxUZXN0V0tXZWJWaWV3PiB3ZWJWaWV3ID0g
YWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgw
LCAwLCAzMDAsIDMwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CisKKyAg
ICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW0lQQ1Rlc3RpbmdBUElEZWxlZ2F0ZSBhbGxvY10g
aW5pdF0pOworICAgIFt3ZWJWaWV3IHNldFVJRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOworCisg
ICAgZG9uZSA9IGZhbHNlOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmlu
ZzpAIjwhRE9DVFlQRSBodG1sPjxzY3JpcHQ+d2luZG93LmFyZ3MgPSBJUEMubWVzc2FnZXMuV2Vi
UGFnZVByb3h5X1J1bkphdmFTY3JpcHRBbGVydC5hcmd1bWVudHM7IGFsZXJ0KCdvaycpPC9zY3Jp
cHQ+Il07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKKworICAgIEVYUEVD
VF9TVFJFUShbW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImFyZ3MubGVu
Z3RoIl0gVVRGOFN0cmluZ10sICIzIik7CisgICAgRVhQRUNUX1NUUkVRKFtbd2ViVmlldyBzdHJp
bmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiYXJnc1swXS50eXBlIl0gVVRGOFN0cmluZ10sICJX
ZWJDb3JlOjpGcmFtZUlkZW50aWZpZXIiKTsKKyAgICBFWFBFQ1RfU1RSRVEoW1t3ZWJWaWV3IHN0
cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJhcmdzWzFdLnR5cGUiXSBVVEY4U3RyaW5nXSwg
IldlYktpdDo6RnJhbWVJbmZvRGF0YSIpOworICAgIEVYUEVDVF9TVFJFUShbW3dlYlZpZXcgc3Ry
aW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImFyZ3NbMl0ubmFtZSJdIFVURjhTdHJpbmddLCAi
bWVzc2FnZSIpOworICAgIEVYUEVDVF9TVFJFUShbW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5n
SmF2YVNjcmlwdDpAImFyZ3NbMl0udHlwZSJdIFVURjhTdHJpbmddLCAiU3RyaW5nIik7Cit9CisK
ICNlbmRpZgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>