<?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>230258</bug_id>
          
          <creation_ts>2021-09-14 05:39:08 -0700</creation_ts>
          <short_desc>[GTK][a11y] Add implementation of text interface when building with ATSPI</short_desc>
          <delta_ts>2021-10-29 10:14:32 -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>WebKitGTK</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>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>230255</dependson>
    
    <dependson>231950</dependson>
          <blocked>230253</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>andresg_22</cc>
    
    <cc>aperez</cc>
    
    <cc>apinheiro</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>cdumez</cc>
    
    <cc>cfleizach</cc>
    
    <cc>changseok</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>mifenton</cc>
    
    <cc>samuel_white</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1793262</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-09-14 05:39:08 -0700</bug_when>
    <thetext>Implement text interface</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1806549</commentid>
    <comment_count>1</comment_count>
      <attachid>441860</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-10-20 02:16:34 -0700</bug_when>
    <thetext>Created attachment 441860
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1806573</commentid>
    <comment_count>2</comment_count>
      <attachid>441869</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-10-20 04:59:58 -0700</bug_when>
    <thetext>Created attachment 441869
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1806598</commentid>
    <comment_count>3</comment_count>
    <who name="Andres Gonzalez">andresg_22</who>
    <bug_when>2021-10-20 06:41:17 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #2)
&gt; Created attachment 441869 [details]
&gt; Patch

--- a/Source/WebCore/accessibility/AXObjectCache.cpp
+++ a/Source/WebCore/accessibility/AXObjectCache.cpp

@@ -1428,9 +1428,10 @@ void AXObjectCache::postTextStateChangeNotification(const Position&amp; position, co

     stopCachingComputedObjectAttributes();

-#if PLATFORM(COCOA)
+#if PLATFORM(COCOA) || USE(ATSPI)
     AccessibilityObject* object = getOrCreate(node);
     if (object &amp;&amp; object-&gt;accessibilityIsIgnored()) {
+#if PLATFORM(COCOA)
         if (position.atLastEditingPositionForNode()) {
             if (AccessibilityObject* nextSibling = object-&gt;nextSiblingUnignored(1))
                 object = nextSibling;
@@ -1438,6 +1439,11 @@ void AXObjectCache::postTextStateChangeNotification(const Position&amp; position, co
             if (AccessibilityObject* previousSibling = object-&gt;previousSiblingUnignored(1))
                 object = previousSibling;
         }
+#elif USE(ATSPI)
+        auto* parent = object-&gt;parentObjectUnignored();
+        if (is&lt;AccessibilityObject&gt;(parent))
+            object = downcast&lt;AccessibilityObject&gt;(parent);
+#endif
     }

     postTextStateChangeNotification(object, intent, selection);

Why the target should be parentObjectUnignored and not the prev/next sibling?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1807031</commentid>
    <comment_count>4</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-10-21 00:07:58 -0700</bug_when>
    <thetext>(In reply to Andres Gonzalez from comment #3)
&gt; (In reply to Carlos Garcia Campos from comment #2)
&gt; &gt; Created attachment 441869 [details]
&gt; &gt; Patch
&gt; 
&gt; --- a/Source/WebCore/accessibility/AXObjectCache.cpp
&gt; +++ a/Source/WebCore/accessibility/AXObjectCache.cpp
&gt; 
&gt; @@ -1428,9 +1428,10 @@ void
&gt; AXObjectCache::postTextStateChangeNotification(const Position&amp; position, co
&gt; 
&gt;      stopCachingComputedObjectAttributes();
&gt; 
&gt; -#if PLATFORM(COCOA)
&gt; +#if PLATFORM(COCOA) || USE(ATSPI)
&gt;      AccessibilityObject* object = getOrCreate(node);
&gt;      if (object &amp;&amp; object-&gt;accessibilityIsIgnored()) {
&gt; +#if PLATFORM(COCOA)
&gt;          if (position.atLastEditingPositionForNode()) {
&gt;              if (AccessibilityObject* nextSibling =
&gt; object-&gt;nextSiblingUnignored(1))
&gt;                  object = nextSibling;
&gt; @@ -1438,6 +1439,11 @@ void
&gt; AXObjectCache::postTextStateChangeNotification(const Position&amp; position, co
&gt;              if (AccessibilityObject* previousSibling =
&gt; object-&gt;previousSiblingUnignored(1))
&gt;                  object = previousSibling;
&gt;          }
&gt; +#elif USE(ATSPI)
&gt; +        auto* parent = object-&gt;parentObjectUnignored();
&gt; +        if (is&lt;AccessibilityObject&gt;(parent))
&gt; +            object = downcast&lt;AccessibilityObject&gt;(parent);
&gt; +#endif
&gt;      }
&gt; 
&gt;      postTextStateChangeNotification(object, intent, selection);
&gt; 
&gt; Why the target should be parentObjectUnignored and not the prev/next sibling?

Because in linux we don&apos;t expose text nodes in the tree, so it&apos;s the parent the one implementing the text interface.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1807112</commentid>
    <comment_count>5</comment_count>
    <who name="Andres Gonzalez">andresg_22</who>
    <bug_when>2021-10-21 06:24:28 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #4)
&gt; (In reply to Andres Gonzalez from comment #3)
&gt; &gt; (In reply to Carlos Garcia Campos from comment #2)
&gt; &gt; &gt; Created attachment 441869 [details]
&gt; &gt; &gt; Patch
&gt; &gt; 
&gt; &gt; --- a/Source/WebCore/accessibility/AXObjectCache.cpp
&gt; &gt; +++ a/Source/WebCore/accessibility/AXObjectCache.cpp
&gt; &gt; 
&gt; &gt; @@ -1428,9 +1428,10 @@ void
&gt; &gt; AXObjectCache::postTextStateChangeNotification(const Position&amp; position, co
&gt; &gt; 
&gt; &gt;      stopCachingComputedObjectAttributes();
&gt; &gt; 
&gt; &gt; -#if PLATFORM(COCOA)
&gt; &gt; +#if PLATFORM(COCOA) || USE(ATSPI)
&gt; &gt;      AccessibilityObject* object = getOrCreate(node);
&gt; &gt;      if (object &amp;&amp; object-&gt;accessibilityIsIgnored()) {
&gt; &gt; +#if PLATFORM(COCOA)
&gt; &gt;          if (position.atLastEditingPositionForNode()) {
&gt; &gt;              if (AccessibilityObject* nextSibling =
&gt; &gt; object-&gt;nextSiblingUnignored(1))
&gt; &gt;                  object = nextSibling;
&gt; &gt; @@ -1438,6 +1439,11 @@ void
&gt; &gt; AXObjectCache::postTextStateChangeNotification(const Position&amp; position, co
&gt; &gt;              if (AccessibilityObject* previousSibling =
&gt; &gt; object-&gt;previousSiblingUnignored(1))
&gt; &gt;                  object = previousSibling;
&gt; &gt;          }
&gt; &gt; +#elif USE(ATSPI)
&gt; &gt; +        auto* parent = object-&gt;parentObjectUnignored();
&gt; &gt; +        if (is&lt;AccessibilityObject&gt;(parent))
&gt; &gt; +            object = downcast&lt;AccessibilityObject&gt;(parent);
&gt; &gt; +#endif
&gt; &gt;      }
&gt; &gt; 
&gt; &gt;      postTextStateChangeNotification(object, intent, selection);
&gt; &gt; 
&gt; &gt; Why the target should be parentObjectUnignored and not the prev/next sibling?
&gt; 
&gt; Because in linux we don&apos;t expose text nodes in the tree, so it&apos;s the parent
&gt; the one implementing the text interface.

Thanks, makes sense. A comment in the code stating this would be helpful.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1807589</commentid>
    <comment_count>6</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-10-22 01:51:14 -0700</bug_when>
    <thetext>Committed r284675 (243395@main): &lt;https://commits.webkit.org/243395@main&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1810124</commentid>
    <comment_count>7</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2021-10-29 10:14:32 -0700</bug_when>
    <thetext>It introduced this warning:

[824/1963] Building CXX object Source/...sources/UnifiedSource-aba958d6-1.cpp.o
In file included from /home/mcatanzaro/Projects/WebKit/WebKitBuild/GNOME/WebCore/DerivedSources/unified-sources/UnifiedSource-aba958d6-1.cpp:3:
/home/mcatanzaro/Projects/WebKit/Source/WebCore/accessibility/AXObjectCache.cpp:1404:13: warning: ‘bool WebCore::isPasswordFieldOrContainedByPasswordField(WebCore::AccessibilityObject*)’ defined but not used [-Wunused-function]
 1404 | static bool isPasswordFieldOrContainedByPasswordField(AccessibilityObject* object)
      |             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Can you check the #if guards, please? It&apos;s easy enough to guard the newly-unused function, but I&apos;m not sure whether your change in AXObjectCache::enqueuePasswordValueChangeNotification was intentional.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>441860</attachid>
            <date>2021-10-20 02:16:34 -0700</date>
            <delta_ts>2021-10-20 04:59:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wcore-a11y-text-atspi.diff</filename>
            <type>text/plain</type>
            <size>113558</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA2ZTM2ODMwNzc3ZDYuLmFjNmQ1MjFiYjIwZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDczIEBACisyMDIxLTEwLTIwICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFA
aWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXVthMTF5XSBBZGQgaW1wbGVtZW50YXRpb24gb2Yg
dGV4dCBpbnRlcmZhY2Ugd2hlbiBidWlsZGluZyB3aXRoIEFUU1BJCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzAyNTgKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNvdXJjZXNHVEsudHh0OgorICAgICAg
ICAqIGFjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpB
WE9iamVjdENhY2hlOjpwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnBvc3RUZXh0UmVwbGFjZW1lbnROb3RpZmljYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6cG9zdFRleHRSZXBsYWNlbWVudE5v
dGlmaWNhdGlvbkZvclRleHRDb250cm9sKToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2Fj
aGU6OmVucXVldWVQYXNzd29yZFZhbHVlQ2hhbmdlTm90aWZpY2F0aW9uKToKKyAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaDoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9i
amVjdDo6dGV4dEl0ZXJhdG9yQmVoYXZpb3JGb3JUZXh0UmFuZ2UgY29uc3QpOgorICAgICAgICAq
IGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oOgorICAgICAgICAqIGFjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjppbmRleEZvclZpc2libGVQb3NpdGlvbiBjb25zdCk6
CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hdHNwaS9BWE9iamVjdENhY2hlQXRzcGkuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6cG9zdFRleHRTdGF0ZUNoYW5nZVBsYXRm
b3JtTm90aWZpY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnBvc3RU
ZXh0UmVwbGFjZW1lbnRQbGF0Zm9ybU5vdGlmaWNhdGlvbkZvclRleHRDb250cm9sKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnBvc3RUZXh0UmVwbGFjZW1lbnRQbGF0Zm9ybU5v
dGlmaWNhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpub2RlVGV4dENo
YW5nZVBsYXRmb3JtTm90aWZpY2F0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBhY2Nlc3NpYmls
aXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlBdHNwaS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5QXRzcGk6OnRleHRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlBdHNwaTo6dGV4dEF0dHJpYnV0ZXNDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2Vzc2liaWxpdHlBdHNwaTo6dGV4dENhcmV0TW92ZWQpOgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eUF0c3BpOjp0ZXh0U2VsZWN0aW9uQ2hhbmdlZCk6CisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5QXRzcGkuaDoKKyAgICAgICAgKiBhY2Nlc3NpYmls
aXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlBdHNwaUVudW1zLmg6CisgICAgICAgICogYWNjZXNzaWJp
bGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6cm9sZUlzVGV4dFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVj
dEF0c3BpOjppbnRlcmZhY2VzRm9yT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlPYmplY3RBdHNwaTo6cGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
T2JqZWN0QXRzcGk6OmJ1aWxkSW50ZXJmYWNlcyBjb25zdCk6CisgICAgICAgICogYWNjZXNzaWJp
bGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkuaDoKKyAgICAgICAgKiBhY2Nlc3Np
YmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RUZXh0QXRzcGkuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6YXRzcGlCb3VuZGFyeVRv
VGV4dEdyYW51bGFyaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RB
dHNwaTo6YXRzcGlHcmFudWxhcml0eVRvVGV4dEdyYW51bGFyaXR5KToKKyAgICAgICAgKFdlYkNv
cmU6Om9mZnNldE1hcHBpbmcpOgorICAgICAgICAoV2ViQ29yZTo6VVRGMTZPZmZzZXRUb1VURjgp
OgorICAgICAgICAoV2ViQ29yZTo6VVRGOE9mZnNldFRvVVRGMTYpOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjp0ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OmdldExlbmd0aEZvclRleHRSYW5nZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjphbGxvd3NUZXh0UmFuZ2VzIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6dGV4dElu
c2VydGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6dGV4
dERlbGV0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpi
b3VuZGFyeU9mZnNldCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2Jq
ZWN0QXRzcGk6OnRleHRBdE9mZnNldCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3Np
YmlsaXR5T2JqZWN0QXRzcGk6OmNoYXJhY3RlckF0T2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6Ym91bmRzRm9yUmFuZ2UgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjp0ZXh0RXh0ZW50cyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6Om9mZnNl
dEF0UG9pbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0
c3BpOjpib3VuZHNGb3JTZWxlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNz
aWJpbGl0eU9iamVjdEF0c3BpOjpzZWxlY3RlZFJhbmdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6c2VsZWN0aW9uQm91bmRzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6c2V0U2VsZWN0ZWRSYW5n
ZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OnNlbGVjdFJh
bmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6c2VsZWN0
aW9uQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6
OnRleHRBdHRyaWJ1dGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlP
YmplY3RBdHNwaTo6dGV4dEF0dHJpYnV0ZXNXaXRoVVRGOE9mZnNldCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OnRleHRBdHRyaWJ1dGVzQ2hhbmdl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OnNjcm9sbFRv
TWFrZVZpc2libGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVj
dEF0c3BpOjpzY3JvbGxUb1BvaW50IGNvbnN0KToKKyAgICAgICAgKiBlZGl0aW5nL2F0c3BpL0Zy
YW1lU2VsZWN0aW9uQXRzcGkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246
Om5vdGlmeUFjY2Vzc2liaWxpdHlGb3JTZWxlY3Rpb25DaGFuZ2UpOgorICAgICAgICAqIGh0bWwv
SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRl
eHRGb3JtQ29udHJvbEVsZW1lbnQ6OnNldElubmVyVGV4dFZhbHVlKToKKwogMjAyMS0xMC0xMyAg
Q2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgQVg6
IEJ1aWxkIHdpdGggaXNvbGF0ZWQgdHJlZSBlbmFibGUgaXMgYnJva2VuIHNpbmNlIHIyODQwNzUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNHVEsudHh0IGIvU291cmNlL1dlYkNv
cmUvU291cmNlc0dUSy50eHQKaW5kZXggNjAzNzM2MzVjMTM1Li42ZmExYzFhZjgzMjMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNHVEsudHh0CisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1NvdXJjZXNHVEsudHh0CkBAIC00Miw2ICs0Miw3IEBAIGFjY2Vzc2liaWxpdHkvYXRrL1dlYktp
dEFjY2Vzc2libGVVdGlsLmNwcAogYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5QXRz
cGkuY3BwCiBhY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RBdHNwaS5jcHAK
IGFjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eU9iamVjdENvbXBvbmVudEF0c3BpLmNw
cAorYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5T2JqZWN0VGV4dEF0c3BpLmNwcAog
YWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5Um9vdEF0c3BpLmNwcAogYWNjZXNzaWJp
bGl0eS9hdHNwaS9BWE9iamVjdENhY2hlQXRzcGkuY3BwCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCmluZGV4IDRkMWI0YjIxODA3OS4uOTcxZmVm
Y2I2ZTgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0
Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNo
ZS5jcHAKQEAgLTE0MDksNyArMTQwOSw3IEBAIHZvaWQgQVhPYmplY3RDYWNoZTo6cG9zdFRleHRT
dGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihOb2RlKiBub2RlLCBjb25zdCBBWFRleHRTdGF0CiAgICAg
aWYgKCFub2RlKQogICAgICAgICByZXR1cm47CiAKLSNpZiBQTEFURk9STShDT0NPQSkKKyNpZiBQ
TEFURk9STShDT0NPQSkgfHwgVVNFKEFUU1BJKQogICAgIHN0b3BDYWNoaW5nQ29tcHV0ZWRPYmpl
Y3RBdHRyaWJ1dGVzKCk7CiAKICAgICBwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKGdl
dE9yQ3JlYXRlKG5vZGUpLCBpbnRlbnQsIHNlbGVjdGlvbik7CkBAIC0xNDI4LDkgKzE0MjgsMTAg
QEAgdm9pZCBBWE9iamVjdENhY2hlOjpwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKGNv
bnN0IFBvc2l0aW9uJiBwb3NpdGlvbiwgY28KIAogICAgIHN0b3BDYWNoaW5nQ29tcHV0ZWRPYmpl
Y3RBdHRyaWJ1dGVzKCk7CiAKLSNpZiBQTEFURk9STShDT0NPQSkKKyNpZiBQTEFURk9STShDT0NP
QSkgfHwgVVNFKEFUU1BJKQogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCA9IGdldE9y
Q3JlYXRlKG5vZGUpOwogICAgIGlmIChvYmplY3QgJiYgb2JqZWN0LT5hY2Nlc3NpYmlsaXR5SXNJ
Z25vcmVkKCkpIHsKKyNpZiBQTEFURk9STShDT0NPQSkKICAgICAgICAgaWYgKHBvc2l0aW9uLmF0
TGFzdEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoKSkgewogICAgICAgICAgICAgaWYgKEFjY2Vzc2li
aWxpdHlPYmplY3QqIG5leHRTaWJsaW5nID0gb2JqZWN0LT5uZXh0U2libGluZ1VuaWdub3JlZCgx
KSkKICAgICAgICAgICAgICAgICBvYmplY3QgPSBuZXh0U2libGluZzsKQEAgLTE0MzgsNiArMTQz
OSwxMSBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6OnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRp
b24oY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uLCBjbwogICAgICAgICAgICAgaWYgKEFjY2Vzc2li
aWxpdHlPYmplY3QqIHByZXZpb3VzU2libGluZyA9IG9iamVjdC0+cHJldmlvdXNTaWJsaW5nVW5p
Z25vcmVkKDEpKQogICAgICAgICAgICAgICAgIG9iamVjdCA9IHByZXZpb3VzU2libGluZzsKICAg
ICAgICAgfQorI2VsaWYgVVNFKEFUU1BJKQorICAgICAgICBhdXRvKiBwYXJlbnQgPSBvYmplY3Qt
PnBhcmVudE9iamVjdFVuaWdub3JlZCgpOworICAgICAgICBpZiAoaXM8QWNjZXNzaWJpbGl0eU9i
amVjdD4ocGFyZW50KSkKKyAgICAgICAgICAgIG9iamVjdCA9IGRvd25jYXN0PEFjY2Vzc2liaWxp
dHlPYmplY3Q+KHBhcmVudCk7CisjZW5kaWYKICAgICB9CiAKICAgICBwb3N0VGV4dFN0YXRlQ2hh
bmdlTm90aWZpY2F0aW9uKG9iamVjdCwgaW50ZW50LCBzZWxlY3Rpb24pOwpAQCAtMTQ1MSw3ICsx
NDU3LDcgQEAgdm9pZCBBWE9iamVjdENhY2hlOjpwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0
aW9uKEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCwKICAgICBBWFRSQUNFKCJBWE9iamVjdENh
Y2hlOjpwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uIik7CiAgICAgc3RvcENhY2hpbmdD
b21wdXRlZE9iamVjdEF0dHJpYnV0ZXMoKTsKIAotI2lmIFBMQVRGT1JNKENPQ09BKQorI2lmIFBM
QVRGT1JNKENPQ09BKSB8fCBVU0UoQVRTUEkpCiAgICAgaWYgKG9iamVjdCkgewogICAgICAgICBp
ZiAoaXNQYXNzd29yZEZpZWxkT3JDb250YWluZWRCeVBhc3N3b3JkRmllbGQob2JqZWN0KSkKICAg
ICAgICAgICAgIHJldHVybjsKQEAgLTE0OTAsNyArMTQ5Niw3IEBAIHZvaWQgQVhPYmplY3RDYWNo
ZTo6cG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihOb2RlKiBub2RlLCBBWFRleHRFZGl0
VHlwZSB0CiAgICAgc3RvcENhY2hpbmdDb21wdXRlZE9iamVjdEF0dHJpYnV0ZXMoKTsKIAogICAg
IEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCA9IGdldE9yQ3JlYXRlKG5vZGUpOwotI2lmIFBM
QVRGT1JNKENPQ09BKQorI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBVU0UoQVRTUEkpCiAgICAgaWYg
KG9iamVjdCkgewogICAgICAgICBpZiAoZW5xdWV1ZVBhc3N3b3JkVmFsdWVDaGFuZ2VOb3RpZmlj
YXRpb24ob2JqZWN0KSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE1MjUsNyArMTUzMSw3IEBA
IHZvaWQgQVhPYmplY3RDYWNoZTo6cG9zdFRleHRSZXBsYWNlbWVudE5vdGlmaWNhdGlvbihOb2Rl
KiBub2RlLCBBWFRleHRFZGl0VHlwZSBkCiAgICAgc3RvcENhY2hpbmdDb21wdXRlZE9iamVjdEF0
dHJpYnV0ZXMoKTsKIAogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCA9IGdldE9yQ3Jl
YXRlKG5vZGUpOwotI2lmIFBMQVRGT1JNKENPQ09BKQorI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBV
U0UoQVRTUEkpCiAgICAgaWYgKG9iamVjdCkgewogICAgICAgICBpZiAoZW5xdWV1ZVBhc3N3b3Jk
VmFsdWVDaGFuZ2VOb3RpZmljYXRpb24ob2JqZWN0KSkKICAgICAgICAgICAgIHJldHVybjsKQEAg
LTE1NDQsNyArMTU1MCw3IEBAIHZvaWQgQVhPYmplY3RDYWNoZTo6cG9zdFRleHRSZXBsYWNlbWVu
dE5vdGlmaWNhdGlvbkZvclRleHRDb250cm9sKEhUTUxUZXh0Rm9ybUNvCiAgICAgc3RvcENhY2hp
bmdDb21wdXRlZE9iamVjdEF0dHJpYnV0ZXMoKTsKIAogICAgIEFjY2Vzc2liaWxpdHlPYmplY3Qq
IG9iamVjdCA9IGdldE9yQ3JlYXRlKCZ0ZXh0Q29udHJvbCk7Ci0jaWYgUExBVEZPUk0oQ09DT0Ep
CisjaWYgUExBVEZPUk0oQ09DT0EpIHx8IFVTRShBVFNQSSkKICAgICBpZiAob2JqZWN0KSB7CiAg
ICAgICAgIGlmIChlbnF1ZXVlUGFzc3dvcmRWYWx1ZUNoYW5nZU5vdGlmaWNhdGlvbihvYmplY3Qp
KQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTU2MCw2ICsxNTY2LDcgQEAgdm9pZCBBWE9iamVj
dENhY2hlOjpwb3N0VGV4dFJlcGxhY2VtZW50Tm90aWZpY2F0aW9uRm9yVGV4dENvbnRyb2woSFRN
TFRleHRGb3JtQ28KIAogYm9vbCBBWE9iamVjdENhY2hlOjplbnF1ZXVlUGFzc3dvcmRWYWx1ZUNo
YW5nZU5vdGlmaWNhdGlvbihBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QpCiB7CisjaWYgUExB
VEZPUk0oQ09DT0EpCiAgICAgaWYgKCFpc1Bhc3N3b3JkRmllbGRPckNvbnRhaW5lZEJ5UGFzc3dv
cmRGaWVsZChvYmplY3QpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTE1NzUsNiArMTU4
MiwxMCBAQCBib29sIEFYT2JqZWN0Q2FjaGU6OmVucXVldWVQYXNzd29yZFZhbHVlQ2hhbmdlTm90
aWZpY2F0aW9uKEFjY2Vzc2liaWxpdHlPYmplY3QqCiAgICAgICAgIG1fcGFzc3dvcmROb3RpZmlj
YXRpb25Qb3N0VGltZXIuc3RhcnRPbmVTaG90KGFjY2Vzc2liaWxpdHlQYXNzd29yZFZhbHVlQ2hh
bmdlTm90aWZpY2F0aW9uSW50ZXJ2YWwpOwogCiAgICAgcmV0dXJuIHRydWU7CisjZWxzZQorICAg
IFVOVVNFRF9QQVJBTShvYmplY3QpOworICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgogfQogCiB2
b2lkIEFYT2JqZWN0Q2FjaGU6OmZyYW1lTG9hZGluZ0V2ZW50Tm90aWZpY2F0aW9uKEZyYW1lKiBm
cmFtZSwgQVhMb2FkaW5nRXZlbnQgbG9hZGluZ0V2ZW50KQpAQCAtMzQ2Myw3ICszNDc0LDcgQEAg
QVhBdHRyaWJ1dGVDYWNoZUVuYWJsZXI6On5BWEF0dHJpYnV0ZUNhY2hlRW5hYmxlcigpCiAgICAg
ICAgIG1fY2FjaGUtPnN0b3BDYWNoaW5nQ29tcHV0ZWRPYmplY3RBdHRyaWJ1dGVzKCk7CiB9CiAK
LSNpZiAhUExBVEZPUk0oQ09DT0EpCisjaWYgIVBMQVRGT1JNKENPQ09BKSAmJiAhVVNFKEFUU1BJ
KQogQVhUZXh0Q2hhbmdlIEFYT2JqZWN0Q2FjaGU6OnRleHRDaGFuZ2VGb3JFZGl0VHlwZShBWFRl
eHRFZGl0VHlwZSB0eXBlKQogewogICAgIHN3aXRjaCAodHlwZSkgewpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaAppbmRleCBhMjU1YzlhN2Y4ZmQuLjM1YWM5
NTdjYmVhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVj
dENhY2hlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hl
LmgKQEAgLTM5OCw3ICszOTgsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICB2b2lkIHBsYXRmb3JtUGVy
Zm9ybURlZmVycmVkQ2FjaGVVcGRhdGUoKTsKIAotI2lmIFBMQVRGT1JNKENPQ09BKQorI2lmIFBM
QVRGT1JNKENPQ09BKSB8fCBVU0UoQVRTUEkpCiAgICAgdm9pZCBwb3N0VGV4dFN0YXRlQ2hhbmdl
UGxhdGZvcm1Ob3RpZmljYXRpb24oQVhDb3JlT2JqZWN0KiwgY29uc3QgQVhUZXh0U3RhdGVDaGFu
Z2VJbnRlbnQmLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJik7CiAgICAgdm9pZCBwb3N0VGV4dFN0
YXRlQ2hhbmdlUGxhdGZvcm1Ob3RpZmljYXRpb24oQWNjZXNzaWJpbGl0eU9iamVjdCosIEFYVGV4
dEVkaXRUeXBlLCBjb25zdCBTdHJpbmcmLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKICAgICB2
b2lkIHBvc3RUZXh0UmVwbGFjZW1lbnRQbGF0Zm9ybU5vdGlmaWNhdGlvbkZvclRleHRDb250cm9s
KEFYQ29yZU9iamVjdCosIGNvbnN0IFN0cmluZyYgZGVsZXRlZFRleHQsIGNvbnN0IFN0cmluZyYg
aW5zZXJ0ZWRUZXh0LCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCYpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKaW5kZXgg
MWE3MGIyZWZkNjIxLi5jYThiZjYwMWUxNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcApAQCAtMzI2NCw4ICszMjY0LDgg
QEAgYm9vbCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpwcmVzc2VkSXNQcmVzZW50KCkgY29uc3QKIFRl
eHRJdGVyYXRvckJlaGF2aW9ycyBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojp0ZXh0SXRlcmF0b3JCZWhh
dmlvckZvclRleHRSYW5nZSgpIGNvbnN0CiB7CiAgICAgVGV4dEl0ZXJhdG9yQmVoYXZpb3JzIGJl
aGF2aW9ycyB7IFRleHRJdGVyYXRvckJlaGF2aW9yOjpJZ25vcmVzU3R5bGVWaXNpYmlsaXR5IH07
Ci0gICAgCi0jaWYgVVNFKEFUSykKKworI2lmIFVTRShBVEspIHx8IFVTRShBVFNQSSkKICAgICAv
LyBXZSBuZWVkIHRvIGVtaXQgcmVwbGFjZWQgZWxlbWVudHMgZm9yIEdUSywgYW5kIHByZXNlbnQK
ICAgICAvLyB0aGVtIHdpdGggdGhlICdvYmplY3QgcmVwbGFjZW1lbnQgY2hhcmFjdGVyJyAoMHhG
RkZDKS4KICAgICBiZWhhdmlvcnMuYWRkKFRleHRJdGVyYXRvckJlaGF2aW9yOjpFbWl0c09iamVj
dFJlcGxhY2VtZW50Q2hhcmFjdGVycyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oCmluZGV4IDcxMzI0MDlhZWVjMy4uZjk4OGZiYzFj
NDE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlPYmplY3QuaApAQCAtODMzLDcgKzgzMyw3IEBAIGlubGluZSB2b2lkIEFjY2Vzc2liaWxpdHlP
YmplY3Q6OnVwZGF0ZUJhY2tpbmdTdG9yZSgpIHsgfQogaW5saW5lIHZvaWQgQWNjZXNzaWJpbGl0
eU9iamVjdDo6ZGV0YWNoUGxhdGZvcm1XcmFwcGVyKEFjY2Vzc2liaWxpdHlEZXRhY2htZW50VHlw
ZSkgeyB9CiAjZW5kaWYKIAotI2lmICEoRU5BQkxFKEFDQ0VTU0lCSUxJVFkpICYmIFVTRShBVEsp
KQorI2lmICEoRU5BQkxFKEFDQ0VTU0lCSUxJVFkpICYmIChVU0UoQVRLKSB8fCBVU0UoQVRTUEkp
KSkKIGlubGluZSBib29sIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmFsbG93c1RleHRSYW5nZXMoKSBj
b25zdCB7IHJldHVybiB0cnVlOyB9CiBpbmxpbmUgdW5zaWduZWQgQWNjZXNzaWJpbGl0eU9iamVj
dDo6Z2V0TGVuZ3RoRm9yVGV4dFJhbmdlKCkgY29uc3QgeyByZXR1cm4gdGV4dCgpLmxlbmd0aCgp
OyB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCmluZGV4IGUyODk1NDlmMDA2ZC4uMzk0ZjVm
NWYyMjgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKQEAgLTIxNjAsNyArMjE2MCw3IEBAIGludCBB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjppbmRleEZvclZpc2libGVQb3NpdGlvbihjb25zdCBW
aXNpYmxlUG9zaXRpb24mIHBvCiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gMDsKIAot
I2lmIFVTRShBVEspCisjaWYgVVNFKEFUSykgfHwgVVNFKEFUU1BJKQogICAgIC8vIFdlIG5lZWQg
dG8gY29uc2lkZXIgcmVwbGFjZWQgZWxlbWVudHMgZm9yIEdUSywgYXMgdGhleSB3aWxsIGJlCiAg
ICAgLy8gcHJlc2VudGVkIHdpdGggdGhlICdvYmplY3QgcmVwbGFjZW1lbnQgY2hhcmFjdGVyJyAo
MHhGRkZDKS4KICAgICBib29sIGZvclNlbGVjdGlvblByZXNlcnZhdGlvbiA9IHRydWU7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FYT2JqZWN0Q2FjaGVB
dHNwaS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FYT2JqZWN0Q2Fj
aGVBdHNwaS5jcHAKaW5kZXggNGE0NzZkNzgyN2I3Li42OGVmMGQ2MmFiMGEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRzcGkvQVhPYmplY3RDYWNoZUF0c3BpLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FYT2JqZWN0Q2FjaGVB
dHNwaS5jcHAKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlICJBWE9iamVjdENhY2hlLmgiCiAK
ICNpZiBFTkFCTEUoQUNDRVNTSUJJTElUWSkgJiYgVVNFKEFUU1BJKQorI2luY2x1ZGUgIkFYVGV4
dFN0YXRlQ2hhbmdlSW50ZW50LmgiCiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eU9iamVjdC5oIgog
I2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaS5oIgogI2luY2x1ZGUgIkFjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QuaCIKQEAgLTE4NSw4ICsxODYsOTMgQEAgdm9pZCBBWE9iamVjdENh
Y2hlOjpwb3N0UGxhdGZvcm1Ob3RpZmljYXRpb24oQVhDb3JlT2JqZWN0KiBjb3JlT2JqZWN0LCBB
WE5vdGlmaWMKICAgICB9CiB9CiAKLXZvaWQgQVhPYmplY3RDYWNoZTo6bm9kZVRleHRDaGFuZ2VQ
bGF0Zm9ybU5vdGlmaWNhdGlvbihBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QsIEFYVGV4dENo
YW5nZSB0ZXh0Q2hhbmdlLCB1bnNpZ25lZCBvZmZzZXQsIGNvbnN0IFN0cmluZyYgdGV4dCkKK3Zv
aWQgQVhPYmplY3RDYWNoZTo6cG9zdFRleHRTdGF0ZUNoYW5nZVBsYXRmb3JtTm90aWZpY2F0aW9u
KEFYQ29yZU9iamVjdCogY29yZU9iamVjdCwgY29uc3QgQVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQm
IGludGVudCwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQogeworICAgIFJFTEVB
U0VfQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAoIWNvcmVPYmplY3QpCisgICAgICAg
IGNvcmVPYmplY3QgPSByb290V2ViQXJlYSgpOworCisgICAgaWYgKCFjb3JlT2JqZWN0KQorICAg
ICAgICByZXR1cm47CisKKyAgICBhdXRvKiB3cmFwcGVyID0gY29yZU9iamVjdC0+d3JhcHBlcigp
OworICAgIGlmICghd3JhcHBlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgd3JhcHBlci0+c2Vs
ZWN0aW9uQ2hhbmdlZChzZWxlY3Rpb24pOworfQorCit2b2lkIEFYT2JqZWN0Q2FjaGU6OnBvc3RU
ZXh0U3RhdGVDaGFuZ2VQbGF0Zm9ybU5vdGlmaWNhdGlvbihBY2Nlc3NpYmlsaXR5T2JqZWN0KiBj
b3JlT2JqZWN0LCBBWFRleHRFZGl0VHlwZSBlZGl0VHlwZSwgY29uc3QgU3RyaW5nJiB0ZXh0LCBj
b25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uKQoreworICAgIFJFTEVBU0VfQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKKyAgICBpZiAodGV4dC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIGF1dG8qIHdyYXBwZXIgPSBjb3JlT2JqZWN0LT53cmFwcGVyKCk7CisgICAgaWYgKCF3
cmFwcGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBzd2l0Y2ggKGVkaXRUeXBlKSB7CisgICAg
Y2FzZSBBWFRleHRFZGl0VHlwZURlbGV0ZToKKyAgICBjYXNlIEFYVGV4dEVkaXRUeXBlQ3V0Ogor
ICAgICAgICB3cmFwcGVyLT50ZXh0RGVsZXRlZCh0ZXh0LCBwb3NpdGlvbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQVhUZXh0RWRpdFR5cGVJbnNlcnQ6CisgICAgY2FzZSBBWFRleHRFZGl0
VHlwZVR5cGluZzoKKyAgICBjYXNlIEFYVGV4dEVkaXRUeXBlRGljdGF0aW9uOgorICAgIGNhc2Ug
QVhUZXh0RWRpdFR5cGVQYXN0ZToKKyAgICAgICAgd3JhcHBlci0+dGV4dEluc2VydGVkKHRleHQs
IHBvc2l0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBWFRleHRFZGl0VHlwZUF0dHJp
YnV0ZXNDaGFuZ2U6CisgICAgICAgIHdyYXBwZXItPnRleHRBdHRyaWJ1dGVzQ2hhbmdlZCgpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEFYVGV4dEVkaXRUeXBlVW5rbm93bjoKKyAgICAgICAg
YnJlYWs7CisgICAgfQorfQorCit2b2lkIEFYT2JqZWN0Q2FjaGU6OnBvc3RUZXh0UmVwbGFjZW1l
bnRQbGF0Zm9ybU5vdGlmaWNhdGlvbkZvclRleHRDb250cm9sKEFYQ29yZU9iamVjdCogY29yZU9i
amVjdCwgY29uc3QgU3RyaW5nJiBkZWxldGVkVGV4dCwgY29uc3QgU3RyaW5nJiBpbnNlcnRlZFRl
eHQsIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50JikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChp
c01haW5UaHJlYWQoKSk7CisgICAgaWYgKCFjb3JlT2JqZWN0KQorICAgICAgICBjb3JlT2JqZWN0
ID0gcm9vdFdlYkFyZWEoKTsKKworICAgIGlmICghY29yZU9iamVjdCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKGRlbGV0ZWRUZXh0LmlzRW1wdHkoKSAmJiBpbnNlcnRlZFRleHQuaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvKiB3cmFwcGVyID0gY29yZU9iamVjdC0+
d3JhcHBlcigpOworICAgIGlmICghd3JhcHBlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KCFkZWxldGVkVGV4dC5pc0VtcHR5KCkpCisgICAgICAgIHdyYXBwZXItPnRleHREZWxldGVkKGRl
bGV0ZWRUZXh0LCBjb3JlT2JqZWN0LT52aXNpYmxlUG9zaXRpb25Gb3JJbmRleCgwKSk7CisgICAg
aWYgKCFpbnNlcnRlZFRleHQuaXNFbXB0eSgpKQorICAgICAgICB3cmFwcGVyLT50ZXh0SW5zZXJ0
ZWQoaW5zZXJ0ZWRUZXh0LCBjb3JlT2JqZWN0LT52aXNpYmxlUG9zaXRpb25Gb3JJbmRleChpbnNl
cnRlZFRleHQubGVuZ3RoKCkpKTsKK30KKwordm9pZCBBWE9iamVjdENhY2hlOjpwb3N0VGV4dFJl
cGxhY2VtZW50UGxhdGZvcm1Ob3RpZmljYXRpb24oQVhDb3JlT2JqZWN0KiBjb3JlT2JqZWN0LCBB
WFRleHRFZGl0VHlwZSwgY29uc3QgU3RyaW5nJiBkZWxldGVkVGV4dCwgQVhUZXh0RWRpdFR5cGUs
IGNvbnN0IFN0cmluZyYgaW5zZXJ0ZWRUZXh0LCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0
aW9uKQoreworICAgIFJFTEVBU0VfQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAoIWNv
cmVPYmplY3QpCisgICAgICAgIGNvcmVPYmplY3QgPSByb290V2ViQXJlYSgpOworCisgICAgaWYg
KCFjb3JlT2JqZWN0KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoZGVsZXRlZFRleHQuaXNF
bXB0eSgpICYmIGluc2VydGVkVGV4dC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAg
IGF1dG8qIHdyYXBwZXIgPSBjb3JlT2JqZWN0LT53cmFwcGVyKCk7CisgICAgaWYgKCF3cmFwcGVy
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIWRlbGV0ZWRUZXh0LmlzRW1wdHkoKSkKKyAg
ICAgICAgd3JhcHBlci0+dGV4dERlbGV0ZWQoZGVsZXRlZFRleHQsIHBvc2l0aW9uKTsKKyAgICBp
ZiAoIWluc2VydGVkVGV4dC5pc0VtcHR5KCkpCisgICAgICAgIHdyYXBwZXItPnRleHRJbnNlcnRl
ZChpbnNlcnRlZFRleHQsIHBvc2l0aW9uKTsKIH0KIAogdm9pZCBBWE9iamVjdENhY2hlOjpmcmFt
ZUxvYWRpbmdFdmVudFBsYXRmb3JtTm90aWZpY2F0aW9uKEFjY2Vzc2liaWxpdHlPYmplY3QqIG9i
amVjdCwgQVhMb2FkaW5nRXZlbnQgbG9hZGluZ0V2ZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5QXRzcGkuY3BwIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5QXRzcGkuY3BwCmluZGV4
IDZmNDQ5YzExMTRjOC4uZDU1NzlmZDcwYjFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlBdHNwaS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5QXRzcGkuY3BwCkBAIC0xNjcs
NiArMTY3LDU0IEBAIHZvaWQgQWNjZXNzaWJpbGl0eUF0c3BpOjpzdGF0ZUNoYW5nZWQoQWNjZXNz
aWJpbGl0eU9iamVjdEF0c3BpJiBhdHNwaU9iamVjdCwgY29uCiAgICAgfSk7CiB9CiAKK3ZvaWQg
QWNjZXNzaWJpbGl0eUF0c3BpOjp0ZXh0Q2hhbmdlZChBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkm
IGF0c3BpT2JqZWN0LCBjb25zdCBjaGFyKiBjaGFuZ2VUeXBlLCBDU3RyaW5nJiYgdGV4dCwgdW5z
aWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoaXNN
YWluVGhyZWFkKCkpOworICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0aGlzLCBhdHNwaU9iamVjdCA9
IFJlZiB7IGF0c3BpT2JqZWN0IH0sIGNoYW5nZVR5cGUgPSBDU3RyaW5nKGNoYW5nZVR5cGUpLCB0
ZXh0ID0gV1RGTW92ZSh0ZXh0KSwgb2Zmc2V0LCBsZW5ndGhdIHsKKyAgICAgICAgaWYgKCFtX2Nv
bm5lY3Rpb24pCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgZ19kYnVzX2Nvbm5lY3Rp
b25fZW1pdF9zaWduYWwobV9jb25uZWN0aW9uLmdldCgpLCBudWxscHRyLCBhdHNwaU9iamVjdC0+
cGF0aCgpLnV0ZjgoKS5kYXRhKCksICJvcmcuYTExeS5hdHNwaS5FdmVudC5PYmplY3QiLCAiVGV4
dENoYW5nZWQiLAorICAgICAgICAgICAgZ192YXJpYW50X25ldygiKHNpaXZhe3N2fSkiLCBjaGFu
Z2VUeXBlLmRhdGEoKSwgb2Zmc2V0LCBsZW5ndGgsIGdfdmFyaWFudF9uZXdfc3RyaW5nKHRleHQu
ZGF0YSgpKSwgbnVsbHB0ciksIG51bGxwdHIpOworICAgIH0pOworfQorCit2b2lkIEFjY2Vzc2li
aWxpdHlBdHNwaTo6dGV4dEF0dHJpYnV0ZXNDaGFuZ2VkKEFjY2Vzc2liaWxpdHlPYmplY3RBdHNw
aSYgYXRzcGlPYmplY3QpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoaXNNYWluVGhyZWFkKCkpOwor
ICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0aGlzLCBhdHNwaU9iamVjdCA9IFJlZiB7IGF0c3BpT2Jq
ZWN0IH1dIHsKKyAgICAgICAgaWYgKCFtX2Nvbm5lY3Rpb24pCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgZ19kYnVzX2Nvbm5lY3Rpb25fZW1pdF9zaWduYWwobV9jb25uZWN0aW9uLmdl
dCgpLCBudWxscHRyLCBhdHNwaU9iamVjdC0+cGF0aCgpLnV0ZjgoKS5kYXRhKCksICJvcmcuYTEx
eS5hdHNwaS5FdmVudC5PYmplY3QiLCAiVGV4dEF0dHJpYnV0ZXNDaGFuZ2VkIiwKKyAgICAgICAg
ICAgIGdfdmFyaWFudF9uZXcoIihzaWl2YXtzdn0pIiwgIiIsIDAsIDAsIGdfdmFyaWFudF9uZXdf
c3RyaW5nKCIiKSwgbnVsbHB0ciksIG51bGxwdHIpOworICAgIH0pOworfQorCit2b2lkIEFjY2Vz
c2liaWxpdHlBdHNwaTo6dGV4dENhcmV0TW92ZWQoQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpJiBh
dHNwaU9iamVjdCwgdW5zaWduZWQgY2FyZXRPZmZzZXQpCit7CisgICAgUkVMRUFTRV9BU1NFUlQo
aXNNYWluVGhyZWFkKCkpOworICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0aGlzLCBhdHNwaU9iamVj
dCA9IFJlZiB7IGF0c3BpT2JqZWN0IH0sIGNhcmV0T2Zmc2V0XSB7CisgICAgICAgIGlmICghbV9j
b25uZWN0aW9uKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGdfZGJ1c19jb25uZWN0
aW9uX2VtaXRfc2lnbmFsKG1fY29ubmVjdGlvbi5nZXQoKSwgbnVsbHB0ciwgYXRzcGlPYmplY3Qt
PnBhdGgoKS51dGY4KCkuZGF0YSgpLCAib3JnLmExMXkuYXRzcGkuRXZlbnQuT2JqZWN0IiwgIlRl
eHRDYXJldE1vdmVkIiwKKyAgICAgICAgICAgIGdfdmFyaWFudF9uZXcoIihzaWl2YXtzdn0pIiwg
IiIsIGNhcmV0T2Zmc2V0LCAwLCBnX3ZhcmlhbnRfbmV3X3N0cmluZygiIiksIG51bGxwdHIpLCBu
dWxscHRyKTsKKyAgICB9KTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5QXRzcGk6OnRleHRTZWxl
Y3Rpb25DaGFuZ2VkKEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaSYgYXRzcGlPYmplY3QpCit7Cisg
ICAgUkVMRUFTRV9BU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIG1fcXVldWUtPmRpc3BhdGNo
KFt0aGlzLCBhdHNwaU9iamVjdCA9IFJlZiB7IGF0c3BpT2JqZWN0IH1dIHsKKyAgICAgICAgaWYg
KCFtX2Nvbm5lY3Rpb24pCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgZ19kYnVzX2Nv
bm5lY3Rpb25fZW1pdF9zaWduYWwobV9jb25uZWN0aW9uLmdldCgpLCBudWxscHRyLCBhdHNwaU9i
amVjdC0+cGF0aCgpLnV0ZjgoKS5kYXRhKCksICJvcmcuYTExeS5hdHNwaS5FdmVudC5PYmplY3Qi
LCAiVGV4dFNlbGVjdGlvbkNoYW5nZWQiLAorICAgICAgICAgICAgZ192YXJpYW50X25ldygiKHNp
aXZhe3N2fSkiLCAiIiwgMCwgMCwgZ192YXJpYW50X25ld19zdHJpbmcoIiIpLCBudWxscHRyKSwg
bnVsbHB0cik7CisgICAgfSk7Cit9CisKIHN0cnVjdCBSb2xlTmFtZUVudHJ5IHsKICAgICBjb25z
dCBjaGFyKiBuYW1lOwogICAgIGNvbnN0IGNoYXIqIGxvY2FsaXplZE5hbWU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlBdHNwaS5o
IGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5QXRzcGku
aAppbmRleCBjZTM3ZjkzZTM4MzEuLjgyNmZkNDQ1ZjhiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5QXRzcGkuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlBdHNwaS5oCkBAIC01
Niw2ICs1NiwxMSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHN0YXRlQ2hhbmdlZChBY2Nlc3NpYmls
aXR5T2JqZWN0QXRzcGkmLCBjb25zdCBjaGFyKiwgYm9vbCk7CiAKKyAgICB2b2lkIHRleHRDaGFu
Z2VkKEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaSYsIGNvbnN0IGNoYXIqLCBDU3RyaW5nJiYsIHVu
c2lnbmVkLCB1bnNpZ25lZCk7CisgICAgdm9pZCB0ZXh0QXR0cmlidXRlc0NoYW5nZWQoQWNjZXNz
aWJpbGl0eU9iamVjdEF0c3BpJik7CisgICAgdm9pZCB0ZXh0Q2FyZXRNb3ZlZChBY2Nlc3NpYmls
aXR5T2JqZWN0QXRzcGkmLCB1bnNpZ25lZCk7CisgICAgdm9pZCB0ZXh0U2VsZWN0aW9uQ2hhbmdl
ZChBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkmKTsKKwogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBs
b2NhbGl6ZWRSb2xlTmFtZShBY2Nlc3NpYmlsaXR5Um9sZSk7CiAKIHByaXZhdGU6CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlBdHNw
aUVudW1zLmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxp
dHlBdHNwaUVudW1zLmgKaW5kZXggMGVhYTI1YjE5YTg4Li5iYzM0ZDFlNzdlZjMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eUF0c3Bp
RW51bXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2li
aWxpdHlBdHNwaUVudW1zLmgKQEAgLTI1OCw2ICsyNTgsMjQgQEAgZW51bSBTY3JvbGxUeXBlIHsK
ICAgICBBbnl3aGVyZQogfTsKIAorZW51bSBUZXh0Qm91bmRhcnlUeXBlIHsKKyAgICBDaGFyQm91
bmRhcnksCisgICAgV29yZFN0YXJ0Qm91bmRhcnksCisgICAgV29yZEVuZEJvdW5kYXJ5LAorICAg
IFNlbnRlbmNlU3RhcnRCb3VuZGFyeSwKKyAgICBTZW50ZW5jZUVuZEJvdW5kYXJ5LAorICAgIExp
bmVTdGFydEJvdW5kYXJ5LAorICAgIExpbmVFbmRCb3VuZGFyeQorfTsKKworZW51bSBUZXh0R3Jh
bnVsYXJpdHlUeXBlIHsKKyAgICBDaGFyR3JhbnVsYXJpdHksCisgICAgV29yZEdyYW51bGFyaXR5
LAorICAgIFNlbnRlbmNlR3JhbnVsYXJpdHksCisgICAgTGluZUdyYW51bGFyaXR5LAorICAgIFBh
cmFncmFwaEdyYW51bGFyaXR5Cit9OworCiB9IC8vIG5hbWVzcGFjZSBBdHNwaQogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RBdHNwaS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RBdHNwaS5jcHAKaW5kZXggMjRmZTVk
NTMzN2ZhLi43MDNjOTc4M2M4MjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RBdHNwaS5jcHAKQEAg
LTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkuaCIKIAog
I2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZKSAmJiBVU0UoQVRTUEkpCisjaW5jbHVkZSAiQVhJc29s
YXRlZE9iamVjdC5oIgogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlBdHNwaUVudW1zLmgiCiAjaW5j
bHVkZSAiQWNjZXNzaWJpbGl0eU9iamVjdEludGVyZmFjZS5oIgogI2luY2x1ZGUgIkFjY2Vzc2li
aWxpdHlSb290QXRzcGkuaCIKQEAgLTI4LDYgKzI5LDcgQEAKICNpbmNsdWRlICJFbGVtZW50SW5s
aW5lcy5oIgogI2luY2x1ZGUgIlJlbmRlckFuY2VzdG9ySXRlcmF0b3IuaCIKICNpbmNsdWRlICJS
ZW5kZXJCbG9jay5oIgorI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogI2luY2x1ZGUgPGdsaWIv
Z2kxOG4tbGliLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYv
VVVJRC5oPgpAQCAtMzksMTAgKzQxLDQ4IEBAIFJlZjxBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk+
IEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6Y3JlYXRlKEFYQ29yZU9iamVjdCogY29yCiAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpKGNvcmVPYmplY3Qp
KTsKIH0KIAorc3RhdGljIGlubGluZSBib29sIHJvbGVJc1RleHRUeXBlKEFjY2Vzc2liaWxpdHlS
b2xlIHJvbGUpCit7CisgICAgcmV0dXJuIHJvbGUgPT0gQWNjZXNzaWJpbGl0eVJvbGU6OlBhcmFn
cmFwaAorICAgICAgICB8fCByb2xlID09IEFjY2Vzc2liaWxpdHlSb2xlOjpIZWFkaW5nCisgICAg
ICAgIHx8IHJvbGUgPT0gQWNjZXNzaWJpbGl0eVJvbGU6OkRpdgorICAgICAgICB8fCByb2xlID09
IEFjY2Vzc2liaWxpdHlSb2xlOjpDZWxsCisgICAgICAgIHx8IHJvbGUgPT0gQWNjZXNzaWJpbGl0
eVJvbGU6OkxpbmsKKyAgICAgICAgfHwgcm9sZSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6V2ViQ29y
ZUxpbmsKKyAgICAgICAgfHwgcm9sZSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6TGlzdEl0ZW0KKyAg
ICAgICAgfHwgcm9sZSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6UHJlCisgICAgICAgIHx8IHJvbGUg
PT0gQWNjZXNzaWJpbGl0eVJvbGU6OkdyaWRDZWxsCisgICAgICAgIHx8IHJvbGUgPT0gQWNjZXNz
aWJpbGl0eVJvbGU6OlRleHRHcm91cAorICAgICAgICB8fCByb2xlID09IEFjY2Vzc2liaWxpdHlS
b2xlOjpBcHBsaWNhdGlvblRleHRHcm91cAorICAgICAgICB8fCByb2xlID09IEFjY2Vzc2liaWxp
dHlSb2xlOjpBcHBsaWNhdGlvbkdyb3VwOworfQorCiBPcHRpb25TZXQ8QWNjZXNzaWJpbGl0eU9i
amVjdEF0c3BpOjpJbnRlcmZhY2U+IEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6aW50ZXJmYWNl
c0Zvck9iamVjdChBWENvcmVPYmplY3QmIGNvcmVPYmplY3QpCiB7CiAgICAgT3B0aW9uU2V0PElu
dGVyZmFjZT4gaW50ZXJmYWNlcyA9IHsgSW50ZXJmYWNlOjpBY2Nlc3NpYmxlLCBJbnRlcmZhY2U6
OkNvbXBvbmVudCB9OwogCisgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGNvcmVPYmplY3Qu
aXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkgPyBjb3JlT2JqZWN0LnJlbmRlcmVyKCkgOiBu
dWxscHRyOworICAgIGlmIChjb3JlT2JqZWN0LnJvbGVWYWx1ZSgpID09IEFjY2Vzc2liaWxpdHlS
b2xlOjpTdGF0aWNUZXh0IHx8IGNvcmVPYmplY3Qucm9sZVZhbHVlKCkgPT0gQWNjZXNzaWJpbGl0
eVJvbGU6OkNvbG9yV2VsbCkKKyAgICAgICAgaW50ZXJmYWNlcy5hZGQoSW50ZXJmYWNlOjpUZXh0
KTsKKyAgICBlbHNlIGlmIChjb3JlT2JqZWN0LmlzVGV4dENvbnRyb2woKSB8fCBjb3JlT2JqZWN0
LmlzTm9uTmF0aXZlVGV4dENvbnRyb2woKSkKKyAgICAgICAgaW50ZXJmYWNlcy5hZGQoSW50ZXJm
YWNlOjpUZXh0KTsKKyAgICBlbHNlIGlmICghY29yZU9iamVjdC5pc1dlYkFyZWEoKSkgeworICAg
ICAgICBpZiAoY29yZU9iamVjdC5yb2xlVmFsdWUoKSAhPSBBY2Nlc3NpYmlsaXR5Um9sZTo6VGFi
bGUpIHsKKyAgICAgICAgICAgIGlmICgocmVuZGVyZXIgJiYgcmVuZGVyZXItPmNoaWxkcmVuSW5s
aW5lKCkpIHx8IHJvbGVJc1RleHRUeXBlKGNvcmVPYmplY3Qucm9sZVZhbHVlKCkpIHx8IGNvcmVP
YmplY3QuaXNNYXRoVG9rZW4oKSkKKyAgICAgICAgICAgICAgICBpbnRlcmZhY2VzLmFkZChJbnRl
cmZhY2U6OlRleHQpOworICAgICAgICB9CisKKyAgICAgICAgLy8gQWRkIHRoZSBUZXh0IGludGVy
ZmFjZSBmb3IgbGlzdCBpdGVtcyB3aG9zZSBmaXJzdCBhY2Nlc3NpYmxlIGNoaWxkIGhhcyBhIHRl
eHQgcmVuZGVyZXIuCisgICAgICAgIGlmIChjb3JlT2JqZWN0LnJvbGVWYWx1ZSgpID09IEFjY2Vz
c2liaWxpdHlSb2xlOjpMaXN0SXRlbSkgeworICAgICAgICAgICAgY29uc3QgYXV0byYgY2hpbGRy
ZW4gPSBjb3JlT2JqZWN0LmNoaWxkcmVuKCk7CisgICAgICAgICAgICBpZiAoIWNoaWxkcmVuLmlz
RW1wdHkoKSkgeworICAgICAgICAgICAgICAgIGF1dG8gY2hpbGRJbnRlcmZhY2VzID0gaW50ZXJm
YWNlc0Zvck9iamVjdCgqY2hpbGRyZW5bMF0pOworICAgICAgICAgICAgICAgIGlmIChjaGlsZElu
dGVyZmFjZXMuY29udGFpbnMoSW50ZXJmYWNlOjpUZXh0KSkKKyAgICAgICAgICAgICAgICAgICAg
aW50ZXJmYWNlcy5hZGQoSW50ZXJmYWNlOjpUZXh0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKwogICAgIHJldHVybiBpbnRlcmZhY2VzOwogfQogCkBAIC00MjcsNiArNDY3LDgg
QEAgY29uc3QgU3RyaW5nJiBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OnBhdGgoKQogICAgICAg
ICAgICAgaW50ZXJmYWNlcy5hcHBlbmQoeyBjb25zdF9jYXN0PEdEQnVzSW50ZXJmYWNlSW5mbyo+
KCZ3ZWJraXRfYWNjZXNzaWJsZV9pbnRlcmZhY2UpLCAmc19hY2Nlc3NpYmxlRnVuY3Rpb25zIH0p
OwogICAgICAgICBpZiAobV9pbnRlcmZhY2VzLmNvbnRhaW5zKEludGVyZmFjZTo6Q29tcG9uZW50
KSkKICAgICAgICAgICAgIGludGVyZmFjZXMuYXBwZW5kKHsgY29uc3RfY2FzdDxHREJ1c0ludGVy
ZmFjZUluZm8qPigmd2Via2l0X2NvbXBvbmVudF9pbnRlcmZhY2UpLCAmc19jb21wb25lbnRGdW5j
dGlvbnMgfSk7CisgICAgICAgIGlmIChtX2ludGVyZmFjZXMuY29udGFpbnMoSW50ZXJmYWNlOjpU
ZXh0KSkKKyAgICAgICAgICAgIGludGVyZmFjZXMuYXBwZW5kKHsgY29uc3RfY2FzdDxHREJ1c0lu
dGVyZmFjZUluZm8qPigmd2Via2l0X3RleHRfaW50ZXJmYWNlKSwgJnNfdGV4dEZ1bmN0aW9ucyB9
KTsKICAgICAgICAgbV9wYXRoID0gYXRzcGlSb290LT5hdHNwaSgpLnJlZ2lzdGVyT2JqZWN0KCp0
aGlzLCBXVEZNb3ZlKGludGVyZmFjZXMpKTsKICAgICB9CiAKQEAgLTEwNDAsNiArMTA4Miw4IEBA
IHZvaWQgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpidWlsZEludGVyZmFjZXMoR1ZhcmlhbnRC
dWlsZGVyKiBidWlsZGVyKSBjb25zdAogICAgICAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQoYnVp
bGRlciwgInMiLCB3ZWJraXRfYWNjZXNzaWJsZV9pbnRlcmZhY2UubmFtZSk7CiAgICAgaWYgKG1f
aW50ZXJmYWNlcy5jb250YWlucyhJbnRlcmZhY2U6OkNvbXBvbmVudCkpCiAgICAgICAgIGdfdmFy
aWFudF9idWlsZGVyX2FkZChidWlsZGVyLCAicyIsIHdlYmtpdF9jb21wb25lbnRfaW50ZXJmYWNl
Lm5hbWUpOworICAgIGlmIChtX2ludGVyZmFjZXMuY29udGFpbnMoSW50ZXJmYWNlOjpUZXh0KSkK
KyAgICAgICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKGJ1aWxkZXIsICJzIiwgd2Via2l0X3RleHRf
aW50ZXJmYWNlLm5hbWUpOwogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6c2Vy
aWFsaXplKEdWYXJpYW50QnVpbGRlciogYnVpbGRlcikgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RB
dHNwaS5oCmluZGV4IDU4OTA1YTI4MzgwYi4uOTY5NzdjYjNiMGZlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RBdHNwaS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eU9i
amVjdEF0c3BpLmgKQEAgLTQ0LDcgKzQ0LDggQEAgcHVibGljOgogCiAgICAgZW51bSBjbGFzcyBJ
bnRlcmZhY2UgOiB1aW50OF90IHsKICAgICAgICAgQWNjZXNzaWJsZSA9IDEgPDwgMCwKLSAgICAg
ICAgQ29tcG9uZW50ID0gMSA8PCAxCisgICAgICAgIENvbXBvbmVudCA9IDEgPDwgMSwKKyAgICAg
ICAgVGV4dCA9IDEgPDwgMgogICAgIH07CiAgICAgY29uc3QgT3B0aW9uU2V0PEludGVyZmFjZT4m
IGludGVyZmFjZXMoKSBjb25zdCB7IHJldHVybiBtX2ludGVyZmFjZXM7IH0KIApAQCAtODIsNiAr
ODMsMzIgQEAgcHVibGljOgogICAgIHZvaWQgc2Nyb2xsVG9NYWtlVmlzaWJsZSh1aW50MzJfdCkg
Y29uc3Q7CiAgICAgdm9pZCBzY3JvbGxUb1BvaW50KGNvbnN0IEludFBvaW50JiwgdWludDMyX3Qp
IGNvbnN0OwogCisgICAgU3RyaW5nIHRleHQoKSBjb25zdDsKKyAgICBlbnVtIGNsYXNzIFRleHRH
cmFudWxhcml0eSB7CisgICAgICAgIENoYXJhY3RlciwKKyAgICAgICAgV29yZFN0YXJ0LAorICAg
ICAgICBXb3JkRW5kLAorICAgICAgICBTZW50ZW5jZVN0YXJ0LAorICAgICAgICBTZW50ZW5jZUVu
ZCwKKyAgICAgICAgTGluZVN0YXJ0LAorICAgICAgICBMaW5lRW5kLAorICAgICAgICBQYXJhZ3Jh
cGgKKyAgICB9OworICAgIEludFBvaW50IGJvdW5kYXJ5T2Zmc2V0KHVuc2lnbmVkLCBUZXh0R3Jh
bnVsYXJpdHkpIGNvbnN0OworICAgIEludFJlY3QgYm91bmRzRm9yUmFuZ2UodW5zaWduZWQsIHVu
c2lnbmVkLCB1aW50MzJfdCkgY29uc3Q7CisgICAgc3RydWN0IFRleHRBdHRyaWJ1dGVzIHsKKyAg
ICAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gYXR0cmlidXRlczsKKyAgICAgICAgaW50IHN0
YXJ0T2Zmc2V0OworICAgICAgICBpbnQgZW5kT2Zmc2V0OworICAgIH07CisgICAgVGV4dEF0dHJp
YnV0ZXMgdGV4dEF0dHJpYnV0ZXMoc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gPSBzdGQ6Om51bGxv
cHQsIGJvb2wgPSBmYWxzZSkgY29uc3Q7CisgICAgSW50UG9pbnQgc2VsZWN0ZWRSYW5nZSgpIGNv
bnN0OworICAgIHZvaWQgc2V0U2VsZWN0ZWRSYW5nZSh1bnNpZ25lZCwgdW5zaWduZWQpOworICAg
IHZvaWQgdGV4dEluc2VydGVkKGNvbnN0IFN0cmluZyYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYp
OworICAgIHZvaWQgdGV4dERlbGV0ZWQoY29uc3QgU3RyaW5nJiwgY29uc3QgVmlzaWJsZVBvc2l0
aW9uJik7CisgICAgdm9pZCB0ZXh0QXR0cmlidXRlc0NoYW5nZWQoKTsKKyAgICB2b2lkIHNlbGVj
dGlvbkNoYW5nZWQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpOworCiBwcml2YXRlOgogICAgIGV4
cGxpY2l0IEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaShBWENvcmVPYmplY3QqKTsKIApAQCAtOTks
MTAgKzEyNiwyNSBAQCBwcml2YXRlOgogICAgIGJvb2wgZm9jdXMoKSBjb25zdDsKICAgICBmbG9h
dCBvcGFjaXR5KCkgY29uc3Q7CiAKKyAgICBzdGF0aWMgVGV4dEdyYW51bGFyaXR5IGF0c3BpQm91
bmRhcnlUb1RleHRHcmFudWxhcml0eSh1aW50MzJfdCk7CisgICAgc3RhdGljIFRleHRHcmFudWxh
cml0eSBhdHNwaUdyYW51bGFyaXR5VG9UZXh0R3JhbnVsYXJpdHkodWludDMyX3QpOworICAgIENT
dHJpbmcgdGV4dChpbnQsIGludCkgY29uc3Q7CisgICAgQ1N0cmluZyB0ZXh0QXRPZmZzZXQoaW50
LCBUZXh0R3JhbnVsYXJpdHksIGludCYsIGludCYpIGNvbnN0OworICAgIGludCBjaGFyYWN0ZXJB
dE9mZnNldChpbnQpIGNvbnN0OworICAgIEludFJlY3QgdGV4dEV4dGVudHMoaW50LCBpbnQsIHVp
bnQzMl90KSBjb25zdDsKKyAgICBpbnQgb2Zmc2V0QXRQb2ludChjb25zdCBJbnRQb2ludCYsIHVp
bnQzMl90KSBjb25zdDsKKyAgICBJbnRQb2ludCBib3VuZHNGb3JTZWxlY3Rpb24oY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYpIGNvbnN0OworICAgIGJvb2wgc2VsZWN0aW9uQm91bmRzKGludCYsIGlu
dCYpIGNvbnN0OworICAgIGJvb2wgc2VsZWN0UmFuZ2UoaW50LCBpbnQpOworICAgIFRleHRBdHRy
aWJ1dGVzIHRleHRBdHRyaWJ1dGVzV2l0aFVURjhPZmZzZXQoc3RkOjpvcHRpb25hbDxpbnQ+ID0g
c3RkOjpudWxsb3B0LCBib29sID0gZmFsc2UpIGNvbnN0OworICAgIGJvb2wgc2Nyb2xsVG9NYWtl
VmlzaWJsZShpbnQsIGludCwgdWludDMyX3QpIGNvbnN0OworICAgIGJvb2wgc2Nyb2xsVG9Qb2lu
dChpbnQsIGludCwgdWludDMyX3QsIGludCwgaW50KSBjb25zdDsKKwogICAgIHN0YXRpYyBPcHRp
b25TZXQ8SW50ZXJmYWNlPiBpbnRlcmZhY2VzRm9yT2JqZWN0KEFYQ29yZU9iamVjdCYpOwogCiAg
ICAgc3RhdGljIEdEQnVzSW50ZXJmYWNlVlRhYmxlIHNfYWNjZXNzaWJsZUZ1bmN0aW9uczsKICAg
ICBzdGF0aWMgR0RCdXNJbnRlcmZhY2VWVGFibGUgc19jb21wb25lbnRGdW5jdGlvbnM7CisgICAg
c3RhdGljIEdEQnVzSW50ZXJmYWNlVlRhYmxlIHNfdGV4dEZ1bmN0aW9uczsKIAogICAgIEFYQ29y
ZU9iamVjdCogbV9heE9iamVjdCB7IG51bGxwdHIgfTsKICAgICBBWENvcmVPYmplY3QqIG1fY29y
ZU9iamVjdCB7IG51bGxwdHIgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eU9iamVjdFRleHRBdHNwaS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RUZXh0QXRzcGkuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYjEzY2VlMWI3Y2Y2Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nl
c3NpYmlsaXR5T2JqZWN0VGV4dEF0c3BpLmNwcApAQCAtMCwwICsxLDEwMDggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaS5oIgorCisjaWYgRU5BQkxFKEFDQ0VTU0lCSUxJ
VFkpICYmIFVTRShBVFNQSSkKKyNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5QXRzcGlFbnVtcy5oIgor
I2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlPYmplY3RJbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJFZGl0
aW5nLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TY3JlZW4uaCIKKyNpbmNsdWRlICJTdXJyb2dhdGVQ
YWlyQXdhcmVUZXh0SXRlcmF0b3IuaCIKKyNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKKyNpbmNs
dWRlICJWaXNpYmxlVW5pdHMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitBY2Nlc3NpYmls
aXR5T2JqZWN0QXRzcGk6OlRleHRHcmFudWxhcml0eSBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6
OmF0c3BpQm91bmRhcnlUb1RleHRHcmFudWxhcml0eSh1aW50MzJfdCBib3VuZGFyeVR5cGUpCit7
CisgICAgc3dpdGNoIChib3VuZGFyeVR5cGUpIHsKKyAgICBjYXNlIEF0c3BpOjpUZXh0Qm91bmRh
cnlUeXBlOjpDaGFyQm91bmRhcnk6CisgICAgICAgIHJldHVybiBUZXh0R3JhbnVsYXJpdHk6OkNo
YXJhY3RlcjsKKyAgICBjYXNlIEF0c3BpOjpUZXh0Qm91bmRhcnlUeXBlOjpXb3JkU3RhcnRCb3Vu
ZGFyeToKKyAgICAgICAgcmV0dXJuIFRleHRHcmFudWxhcml0eTo6V29yZFN0YXJ0OworICAgIGNh
c2UgQXRzcGk6OlRleHRCb3VuZGFyeVR5cGU6OldvcmRFbmRCb3VuZGFyeToKKyAgICAgICAgcmV0
dXJuIFRleHRHcmFudWxhcml0eTo6V29yZEVuZDsKKyAgICBjYXNlIEF0c3BpOjpUZXh0Qm91bmRh
cnlUeXBlOjpTZW50ZW5jZVN0YXJ0Qm91bmRhcnk6CisgICAgICAgIHJldHVybiBUZXh0R3JhbnVs
YXJpdHk6OlNlbnRlbmNlU3RhcnQ7CisgICAgY2FzZSBBdHNwaTo6VGV4dEJvdW5kYXJ5VHlwZTo6
U2VudGVuY2VFbmRCb3VuZGFyeToKKyAgICAgICAgcmV0dXJuIFRleHRHcmFudWxhcml0eTo6U2Vu
dGVuY2VFbmQ7CisgICAgY2FzZSBBdHNwaTo6VGV4dEJvdW5kYXJ5VHlwZTo6TGluZVN0YXJ0Qm91
bmRhcnk6CisgICAgICAgIHJldHVybiBUZXh0R3JhbnVsYXJpdHk6OkxpbmVTdGFydDsKKyAgICBj
YXNlIEF0c3BpOjpUZXh0Qm91bmRhcnlUeXBlOjpMaW5lRW5kQm91bmRhcnk6CisgICAgICAgIHJl
dHVybiBUZXh0R3JhbnVsYXJpdHk6OkxpbmVFbmQ7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Cit9CisKK0FjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6VGV4dEdyYW51
bGFyaXR5IEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6YXRzcGlHcmFudWxhcml0eVRvVGV4dEdy
YW51bGFyaXR5KHVpbnQzMl90IGJvdW5kYXJ5VHlwZSkKK3sKKyAgICBzd2l0Y2ggKGJvdW5kYXJ5
VHlwZSkgeworICAgIGNhc2UgQXRzcGk6OlRleHRHcmFudWxhcml0eVR5cGU6OkNoYXJHcmFudWxh
cml0eToKKyAgICAgICAgcmV0dXJuIFRleHRHcmFudWxhcml0eTo6Q2hhcmFjdGVyOworICAgIGNh
c2UgQXRzcGk6OlRleHRHcmFudWxhcml0eVR5cGU6OldvcmRHcmFudWxhcml0eToKKyAgICAgICAg
cmV0dXJuIFRleHRHcmFudWxhcml0eTo6V29yZFN0YXJ0OworICAgIGNhc2UgQXRzcGk6OlRleHRH
cmFudWxhcml0eVR5cGU6OlNlbnRlbmNlR3JhbnVsYXJpdHk6CisgICAgICAgIHJldHVybiBUZXh0
R3JhbnVsYXJpdHk6OlNlbnRlbmNlU3RhcnQ7CisgICAgY2FzZSBBdHNwaTo6VGV4dEdyYW51bGFy
aXR5VHlwZTo6TGluZUdyYW51bGFyaXR5OgorICAgICAgICByZXR1cm4gVGV4dEdyYW51bGFyaXR5
OjpMaW5lU3RhcnQ7CisgICAgY2FzZSBBdHNwaTo6VGV4dEdyYW51bGFyaXR5VHlwZTo6UGFyYWdy
YXBoR3JhbnVsYXJpdHk6CisgICAgICAgIHJldHVybiBUZXh0R3JhbnVsYXJpdHk6OlBhcmFncmFw
aDsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworR0RCdXNJ
bnRlcmZhY2VWVGFibGUgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpzX3RleHRGdW5jdGlvbnMg
PSB7CisgICAgLy8gbWV0aG9kX2NhbGwKKyAgICBbXShHREJ1c0Nvbm5lY3Rpb24qLCBjb25zdCBn
Y2hhciosIGNvbnN0IGdjaGFyKiwgY29uc3QgZ2NoYXIqLCBjb25zdCBnY2hhciogbWV0aG9kTmFt
ZSwgR1ZhcmlhbnQqIHBhcmFtZXRlcnMsIEdEQnVzTWV0aG9kSW52b2NhdGlvbiogaW52b2NhdGlv
biwgZ3BvaW50ZXIgdXNlckRhdGEpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWlzTWFpblRo
cmVhZCgpKTsKKyAgICAgICAgYXV0byBhdHNwaU9iamVjdCA9IFJlZiB7ICpzdGF0aWNfY2FzdDxB
Y2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkqPih1c2VyRGF0YSkgfTsKKyAgICAgICAgYXRzcGlPYmpl
Y3QtPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOworCisgICAgICAgIGlmICghZ19zdHJjbXAwKG1ldGhv
ZE5hbWUsICJHZXRTdHJpbmdBdE9mZnNldCIpKSB7CisgICAgICAgICAgICBpbnQgb2Zmc2V0Owor
ICAgICAgICAgICAgdWludDMyX3QgZ3JhbnVsYXJpdHlUeXBlOworICAgICAgICAgICAgZ192YXJp
YW50X2dldChwYXJhbWV0ZXJzLCAiKGl1KSIsICZvZmZzZXQsICZncmFudWxhcml0eVR5cGUpOwor
ICAgICAgICAgICAgaW50IHN0YXJ0ID0gMCwgZW5kID0gMDsKKyAgICAgICAgICAgIGF1dG8gdGV4
dCA9IGF0c3BpT2JqZWN0LT50ZXh0QXRPZmZzZXQob2Zmc2V0LCBhdHNwaUdyYW51bGFyaXR5VG9U
ZXh0R3JhbnVsYXJpdHkoZ3JhbnVsYXJpdHlUeXBlKSwgc3RhcnQsIGVuZCk7CisgICAgICAgICAg
ICBnX2RidXNfbWV0aG9kX2ludm9jYXRpb25fcmV0dXJuX3ZhbHVlKGludm9jYXRpb24sIGdfdmFy
aWFudF9uZXcoIihzaWkpIiwgdGV4dC5pc051bGwoKSA/ICIiIDogdGV4dC5kYXRhKCksIHN0YXJ0
LCBlbmQpKTsKKyAgICAgICAgfSBlbHNlIGlmICghZ19zdHJjbXAwKG1ldGhvZE5hbWUsICJHZXRU
ZXh0IikpIHsKKyAgICAgICAgICAgIGludCBzdGFydCwgZW5kOworICAgICAgICAgICAgZ192YXJp
YW50X2dldChwYXJhbWV0ZXJzLCAiKGlpKSIsICZzdGFydCwgJmVuZCk7CisgICAgICAgICAgICBh
dXRvIHRleHQgPSBhdHNwaU9iamVjdC0+dGV4dChzdGFydCwgZW5kKTsKKyAgICAgICAgICAgIGdf
ZGJ1c19tZXRob2RfaW52b2NhdGlvbl9yZXR1cm5fdmFsdWUoaW52b2NhdGlvbiwgZ192YXJpYW50
X25ldygiKHMpIiwgdGV4dC5pc051bGwoKSA/ICIiIDogdGV4dC5kYXRhKCkpKTsKKyAgICAgICAg
fSBlbHNlIGlmICghZ19zdHJjbXAwKG1ldGhvZE5hbWUsICJTZXRDYXJldE9mZnNldCIpKSB7Cisg
ICAgICAgICAgICBpbnQgb2Zmc2V0OworICAgICAgICAgICAgZ192YXJpYW50X2dldChwYXJhbWV0
ZXJzLCAiKGkpIiwgJm9mZnNldCk7CisgICAgICAgICAgICBnX2RidXNfbWV0aG9kX2ludm9jYXRp
b25fcmV0dXJuX3ZhbHVlKGludm9jYXRpb24sIGdfdmFyaWFudF9uZXcoIihiKSIsIGF0c3BpT2Jq
ZWN0LT5zZWxlY3RSYW5nZShvZmZzZXQsIG9mZnNldCkpKTsKKyAgICAgICAgfSBlbHNlIGlmICgh
Z19zdHJjbXAwKG1ldGhvZE5hbWUsICJHZXRUZXh0QmVmb3JlT2Zmc2V0IikpIHsKKyAgICAgICAg
ICAgIGdfZGJ1c19tZXRob2RfaW52b2NhdGlvbl9yZXR1cm5fZXJyb3JfbGl0ZXJhbChpbnZvY2F0
aW9uLCBHX0RCVVNfRVJST1IsIEdfREJVU19FUlJPUl9OT1RfU1VQUE9SVEVELCAiIik7CisgICAg
ICAgIH0gZWxzZSBpZiAoIWdfc3RyY21wMChtZXRob2ROYW1lLCAiR2V0VGV4dEF0T2Zmc2V0Iikp
IHsKKyAgICAgICAgICAgIGludCBvZmZzZXQ7CisgICAgICAgICAgICB1aW50MzJfdCBib3VuZGFy
eVR5cGU7CisgICAgICAgICAgICBnX3ZhcmlhbnRfZ2V0KHBhcmFtZXRlcnMsICIoaXUpIiwgJm9m
ZnNldCwgJmJvdW5kYXJ5VHlwZSk7CisgICAgICAgICAgICBpbnQgc3RhcnQgPSAwLCBlbmQgPSAw
OworICAgICAgICAgICAgYXV0byB0ZXh0ID0gYXRzcGlPYmplY3QtPnRleHRBdE9mZnNldChvZmZz
ZXQsIGF0c3BpQm91bmRhcnlUb1RleHRHcmFudWxhcml0eShib3VuZGFyeVR5cGUpLCBzdGFydCwg
ZW5kKTsKKyAgICAgICAgICAgIGdfZGJ1c19tZXRob2RfaW52b2NhdGlvbl9yZXR1cm5fdmFsdWUo
aW52b2NhdGlvbiwgZ192YXJpYW50X25ldygiKHNpaSkiLCB0ZXh0LmlzTnVsbCgpID8gIiIgOiB0
ZXh0LmRhdGEoKSwgc3RhcnQsIGVuZCkpOworICAgICAgICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAo
bWV0aG9kTmFtZSwgIkdldFRleHRBZnRlck9mZnNldCIpKQorICAgICAgICAgICAgZ19kYnVzX21l
dGhvZF9pbnZvY2F0aW9uX3JldHVybl9lcnJvcl9saXRlcmFsKGludm9jYXRpb24sIEdfREJVU19F
UlJPUiwgR19EQlVTX0VSUk9SX05PVF9TVVBQT1JURUQsICIiKTsKKyAgICAgICAgZWxzZSBpZiAo
IWdfc3RyY21wMChtZXRob2ROYW1lLCAiR2V0Q2hhcmFjdGVyQXRPZmZzZXQiKSkgeworICAgICAg
ICAgICAgaW50IG9mZnNldDsKKyAgICAgICAgICAgIGdfdmFyaWFudF9nZXQocGFyYW1ldGVycywg
IihpKSIsICZvZmZzZXQpOworICAgICAgICAgICAgZ19kYnVzX21ldGhvZF9pbnZvY2F0aW9uX3Jl
dHVybl92YWx1ZShpbnZvY2F0aW9uLCBnX3ZhcmlhbnRfbmV3KCIoaSkiLCBhdHNwaU9iamVjdC0+
Y2hhcmFjdGVyQXRPZmZzZXQob2Zmc2V0KSkpOworICAgICAgICB9IGVsc2UgaWYgKCFnX3N0cmNt
cDAobWV0aG9kTmFtZSwgIkdldEF0dHJpYnV0ZVZhbHVlIikpIHsKKyAgICAgICAgICAgIGludCBv
ZmZzZXQ7CisgICAgICAgICAgICBjb25zdCBjaGFyKiBuYW1lOworICAgICAgICAgICAgZ192YXJp
YW50X2dldChwYXJhbWV0ZXJzLCAiKGkmcykiLCAmb2Zmc2V0LCAmbmFtZSk7CisgICAgICAgICAg
ICBhdXRvIGF0dHJpYnV0ZXMgPSBhdHNwaU9iamVjdC0+dGV4dEF0dHJpYnV0ZXNXaXRoVVRGOE9m
ZnNldChvZmZzZXQpOworICAgICAgICAgICAgZ19kYnVzX21ldGhvZF9pbnZvY2F0aW9uX3JldHVy
bl92YWx1ZShpbnZvY2F0aW9uLCBnX3ZhcmlhbnRfbmV3KCIocykiLCBhdHRyaWJ1dGVzLmF0dHJp
YnV0ZXMuZ2V0KFN0cmluZzo6ZnJvbVVURjgobmFtZSkpLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICAg
ICAgfSBlbHNlIGlmICghZ19zdHJjbXAwKG1ldGhvZE5hbWUsICJHZXRBdHRyaWJ1dGVzIikpIHsK
KyAgICAgICAgICAgIGludCBvZmZzZXQ7CisgICAgICAgICAgICBnX3ZhcmlhbnRfZ2V0KHBhcmFt
ZXRlcnMsICIoaSkiLCAmb2Zmc2V0KTsKKyAgICAgICAgICAgIGF1dG8gYXR0cmlidXRlcyA9IGF0
c3BpT2JqZWN0LT50ZXh0QXR0cmlidXRlc1dpdGhVVEY4T2Zmc2V0KG9mZnNldCk7CisgICAgICAg
ICAgICBHVmFyaWFudEJ1aWxkZXIgYnVpbGRlciA9IEdfVkFSSUFOVF9CVUlMREVSX0lOSVQoR19W
QVJJQU5UX1RZUEUoImF7c3N9IikpOworICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBpdCA6
IGF0dHJpYnV0ZXMuYXR0cmlidXRlcykKKyAgICAgICAgICAgICAgICBnX3ZhcmlhbnRfYnVpbGRl
cl9hZGQoJmJ1aWxkZXIsICJ7c3N9IiwgaXQua2V5LnV0ZjgoKS5kYXRhKCksIGl0LnZhbHVlLnV0
ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgZ19kYnVzX21ldGhvZF9pbnZvY2F0aW9uX3JldHVy
bl92YWx1ZShpbnZvY2F0aW9uLCBnX3ZhcmlhbnRfbmV3KCIoYXtzc31paSkiLCAmYnVpbGRlciwg
YXR0cmlidXRlcy5zdGFydE9mZnNldCwgYXR0cmlidXRlcy5lbmRPZmZzZXQpKTsKKyAgICAgICAg
fSBlbHNlIGlmICghZ19zdHJjbXAwKG1ldGhvZE5hbWUsICJHZXRBdHRyaWJ1dGVSdW4iKSkgewor
ICAgICAgICAgICAgaW50IG9mZnNldDsKKyAgICAgICAgICAgIGdib29sZWFuIGluY2x1ZGVEZWZh
dWx0czsKKyAgICAgICAgICAgIGdfdmFyaWFudF9nZXQocGFyYW1ldGVycywgIihpYikiLCAmb2Zm
c2V0LCAmaW5jbHVkZURlZmF1bHRzKTsKKyAgICAgICAgICAgIGF1dG8gYXR0cmlidXRlcyA9IGF0
c3BpT2JqZWN0LT50ZXh0QXR0cmlidXRlc1dpdGhVVEY4T2Zmc2V0KG9mZnNldCwgaW5jbHVkZURl
ZmF1bHRzKTsKKyAgICAgICAgICAgIEdWYXJpYW50QnVpbGRlciBidWlsZGVyID0gR19WQVJJQU5U
X0JVSUxERVJfSU5JVChHX1ZBUklBTlRfVFlQRSgiYXtzc30iKSk7CisgICAgICAgICAgICBmb3Ig
KGNvbnN0IGF1dG8mIGl0IDogYXR0cmlidXRlcy5hdHRyaWJ1dGVzKQorICAgICAgICAgICAgICAg
IGdfdmFyaWFudF9idWlsZGVyX2FkZCgmYnVpbGRlciwgIntzc30iLCBpdC5rZXkudXRmOCgpLmRh
dGEoKSwgaXQudmFsdWUudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICBnX2RidXNfbWV0aG9k
X2ludm9jYXRpb25fcmV0dXJuX3ZhbHVlKGludm9jYXRpb24sIGdfdmFyaWFudF9uZXcoIihhe3Nz
fWlpKSIsICZidWlsZGVyLCBhdHRyaWJ1dGVzLnN0YXJ0T2Zmc2V0LCBhdHRyaWJ1dGVzLmVuZE9m
ZnNldCkpOworICAgICAgICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAobWV0aG9kTmFtZSwgIkdldERl
ZmF1bHRBdHRyaWJ1dGVzIikgfHwgIWdfc3RyY21wMChtZXRob2ROYW1lLCAiR2V0RGVmYXVsdEF0
dHJpYnV0ZVNldCIpKSB7CisgICAgICAgICAgICBhdXRvIGF0dHJpYnV0ZXMgPSBhdHNwaU9iamVj
dC0+dGV4dEF0dHJpYnV0ZXNXaXRoVVRGOE9mZnNldCgpOworICAgICAgICAgICAgR1ZhcmlhbnRC
dWlsZGVyIGJ1aWxkZXIgPSBHX1ZBUklBTlRfQlVJTERFUl9JTklUKEdfVkFSSUFOVF9UWVBFKCJh
e3NzfSIpKTsKKyAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgaXQgOiBhdHRyaWJ1dGVzLmF0
dHJpYnV0ZXMpCisgICAgICAgICAgICAgICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKCZidWlsZGVy
LCAie3NzfSIsIGl0LmtleS51dGY4KCkuZGF0YSgpLCBpdC52YWx1ZS51dGY4KCkuZGF0YSgpKTsK
KyAgICAgICAgICAgIGdfZGJ1c19tZXRob2RfaW52b2NhdGlvbl9yZXR1cm5fdmFsdWUoaW52b2Nh
dGlvbiwgZ192YXJpYW50X25ldygiKGF7c3N9KSIsICZidWlsZGVyKSk7CisgICAgICAgIH0gZWxz
ZSBpZiAoIWdfc3RyY21wMChtZXRob2ROYW1lLCAiR2V0Q2hhcmFjdGVyRXh0ZW50cyIpKSB7Cisg
ICAgICAgICAgICBpbnQgb2Zmc2V0OworICAgICAgICAgICAgdWludDMyX3QgY29vcmRpbmF0ZVR5
cGU7CisgICAgICAgICAgICBnX3ZhcmlhbnRfZ2V0KHBhcmFtZXRlcnMsICIoaXUpIiwgJm9mZnNl
dCwgJmNvb3JkaW5hdGVUeXBlKTsKKyAgICAgICAgICAgIGF1dG8gZXh0ZW50cyA9IGF0c3BpT2Jq
ZWN0LT50ZXh0RXh0ZW50cyhvZmZzZXQsIG9mZnNldCArIDEsIGNvb3JkaW5hdGVUeXBlKTsKKyAg
ICAgICAgICAgIGdfZGJ1c19tZXRob2RfaW52b2NhdGlvbl9yZXR1cm5fdmFsdWUoaW52b2NhdGlv
biwgZ192YXJpYW50X25ldygiKGlpaWkpIiwgZXh0ZW50cy54KCksIGV4dGVudHMueSgpLCBleHRl
bnRzLndpZHRoKCksIGV4dGVudHMuaGVpZ2h0KCkpKTsKKyAgICAgICAgfSBlbHNlIGlmICghZ19z
dHJjbXAwKG1ldGhvZE5hbWUsICJHZXRSYW5nZUV4dGVudHMiKSkgeworICAgICAgICAgICAgaW50
IHN0YXJ0LCBlbmQ7CisgICAgICAgICAgICB1aW50MzJfdCBjb29yZGluYXRlVHlwZTsKKyAgICAg
ICAgICAgIGdfdmFyaWFudF9nZXQocGFyYW1ldGVycywgIihpaXUpIiwgJnN0YXJ0LCAmZW5kLCAm
Y29vcmRpbmF0ZVR5cGUpOworICAgICAgICAgICAgYXV0byBleHRlbnRzID0gYXRzcGlPYmplY3Qt
PnRleHRFeHRlbnRzKHN0YXJ0LCBlbmQsIGNvb3JkaW5hdGVUeXBlKTsKKyAgICAgICAgICAgIGdf
ZGJ1c19tZXRob2RfaW52b2NhdGlvbl9yZXR1cm5fdmFsdWUoaW52b2NhdGlvbiwgZ192YXJpYW50
X25ldygiKGlpaWkpIiwgZXh0ZW50cy54KCksIGV4dGVudHMueSgpLCBleHRlbnRzLndpZHRoKCks
IGV4dGVudHMuaGVpZ2h0KCkpKTsKKyAgICAgICAgfSBlbHNlIGlmICghZ19zdHJjbXAwKG1ldGhv
ZE5hbWUsICJHZXRPZmZzZXRBdFBvaW50IikpIHsKKyAgICAgICAgICAgIGludCB4LCB5OworICAg
ICAgICAgICAgdWludDMyX3QgY29vcmRpbmF0ZVR5cGU7CisgICAgICAgICAgICBnX3ZhcmlhbnRf
Z2V0KHBhcmFtZXRlcnMsICIoaWl1KSIsICZ4LCAmeSwgJmNvb3JkaW5hdGVUeXBlKTsKKyAgICAg
ICAgICAgIGdfZGJ1c19tZXRob2RfaW52b2NhdGlvbl9yZXR1cm5fdmFsdWUoaW52b2NhdGlvbiwg
Z192YXJpYW50X25ldygiKGkpIiwgYXRzcGlPYmplY3QtPm9mZnNldEF0UG9pbnQoSW50UG9pbnQo
eCwgeSksIGNvb3JkaW5hdGVUeXBlKSkpOworICAgICAgICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAo
bWV0aG9kTmFtZSwgIkdldE5TZWxlY3Rpb25zIikpIHsKKyAgICAgICAgICAgIGludCBzdGFydCwg
ZW5kOworICAgICAgICAgICAgZ19kYnVzX21ldGhvZF9pbnZvY2F0aW9uX3JldHVybl92YWx1ZShp
bnZvY2F0aW9uLCBnX3ZhcmlhbnRfbmV3KCIoaSkiLCBhdHNwaU9iamVjdC0+c2VsZWN0aW9uQm91
bmRzKHN0YXJ0LCBlbmQpICYmIHN0YXJ0ICE9IGVuZCA/IDEgOiAwKSk7CisgICAgICAgIH0gZWxz
ZSBpZiAoIWdfc3RyY21wMChtZXRob2ROYW1lLCAiR2V0U2VsZWN0aW9uIikpIHsKKyAgICAgICAg
ICAgIGludCBzZWxlY3Rpb25OdW1iZXI7CisgICAgICAgICAgICBnX3ZhcmlhbnRfZ2V0KHBhcmFt
ZXRlcnMsICIoaSkiLCAmc2VsZWN0aW9uTnVtYmVyKTsKKyAgICAgICAgICAgIGlmIChzZWxlY3Rp
b25OdW1iZXIpCisgICAgICAgICAgICAgICAgZ19kYnVzX21ldGhvZF9pbnZvY2F0aW9uX3JldHVy
bl9lcnJvcihpbnZvY2F0aW9uLCBHX0RCVVNfRVJST1IsIEdfREJVU19FUlJPUl9JTlZBTElEX0FS
R1MsICJOb3QgYSB2YWxpZCBzZWxlY3Rpb246ICVkIiwgc2VsZWN0aW9uTnVtYmVyKTsKKyAgICAg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGludCBzdGFydCA9IDAsIGVuZCA9IDA7Cisg
ICAgICAgICAgICAgICAgaWYgKGF0c3BpT2JqZWN0LT5zZWxlY3Rpb25Cb3VuZHMoc3RhcnQsIGVu
ZCkgJiYgc3RhcnQgPT0gZW5kKQorICAgICAgICAgICAgICAgICAgICBzdGFydCA9IGVuZCA9IDA7
CisgICAgICAgICAgICAgICAgZ19kYnVzX21ldGhvZF9pbnZvY2F0aW9uX3JldHVybl92YWx1ZShp
bnZvY2F0aW9uLCBnX3ZhcmlhbnRfbmV3KCIoaWkpIiwgc3RhcnQsIGVuZCkpOworICAgICAgICAg
ICAgfQorICAgICAgICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAobWV0aG9kTmFtZSwgIkFkZFNlbGVj
dGlvbiIpKSB7CisgICAgICAgICAgICBpbnQgc3RhcnQsIGVuZDsKKyAgICAgICAgICAgIGdfdmFy
aWFudF9nZXQocGFyYW1ldGVycywgIihpaSkiLCAmc3RhcnQsICZlbmQpOworICAgICAgICAgICAg
Z19kYnVzX21ldGhvZF9pbnZvY2F0aW9uX3JldHVybl92YWx1ZShpbnZvY2F0aW9uLCBnX3Zhcmlh
bnRfbmV3KCIoYikiLCBhdHNwaU9iamVjdC0+c2VsZWN0UmFuZ2Uoc3RhcnQsIGVuZCkpKTsKKyAg
ICAgICAgfSBlbHNlIGlmICghZ19zdHJjbXAwKG1ldGhvZE5hbWUsICJTZXRTZWxlY3Rpb24iKSkg
eworICAgICAgICAgICAgaW50IHN0YXJ0LCBlbmQsIHNlbGVjdGlvbk51bWJlcjsKKyAgICAgICAg
ICAgIGdfdmFyaWFudF9nZXQocGFyYW1ldGVycywgIihpaWkpIiwgJnNlbGVjdGlvbk51bWJlciwg
JnN0YXJ0LCAmZW5kKTsKKyAgICAgICAgICAgIGlmIChzZWxlY3Rpb25OdW1iZXIpCisgICAgICAg
ICAgICAgICAgZ19kYnVzX21ldGhvZF9pbnZvY2F0aW9uX3JldHVybl9lcnJvcihpbnZvY2F0aW9u
LCBHX0RCVVNfRVJST1IsIEdfREJVU19FUlJPUl9JTlZBTElEX0FSR1MsICJOb3QgYSB2YWxpZCBz
ZWxlY3Rpb246ICVkIiwgc2VsZWN0aW9uTnVtYmVyKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBnX2RidXNfbWV0aG9kX2ludm9jYXRpb25fcmV0dXJuX3ZhbHVlKGludm9jYXRp
b24sIGdfdmFyaWFudF9uZXcoIihiKSIsIGF0c3BpT2JqZWN0LT5zZWxlY3RSYW5nZShzdGFydCwg
ZW5kKSkpOworICAgICAgICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAobWV0aG9kTmFtZSwgIlJlbW92
ZVNlbGVjdGlvbiIpKSB7CisgICAgICAgICAgICBpbnQgc2VsZWN0aW9uTnVtYmVyOworICAgICAg
ICAgICAgaW50IGNhcmV0T2Zmc2V0ID0gLTE7CisgICAgICAgICAgICBpZiAoIXNlbGVjdGlvbk51
bWJlcikgeworICAgICAgICAgICAgICAgIGludCBzdGFydCwgZW5kOworICAgICAgICAgICAgICAg
IGlmIChhdHNwaU9iamVjdC0+c2VsZWN0aW9uQm91bmRzKHN0YXJ0LCBlbmQpKQorICAgICAgICAg
ICAgICAgICAgICBjYXJldE9mZnNldCA9IGVuZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGdfZGJ1c19tZXRob2RfaW52b2NhdGlvbl9yZXR1cm5fdmFsdWUoaW52b2NhdGlvbiwgZ192YXJp
YW50X25ldygiKGIpIiwgY2FyZXRPZmZzZXQgIT0gLTEgPyBhdHNwaU9iamVjdC0+c2VsZWN0UmFu
Z2UoY2FyZXRPZmZzZXQsIGNhcmV0T2Zmc2V0KSA6IEZBTFNFKSk7CisgICAgICAgIH0gZWxzZSBp
ZiAoIWdfc3RyY21wMChtZXRob2ROYW1lLCAiU2Nyb2xsU3Vic3RyaW5nVG8iKSkgeworICAgICAg
ICAgICAgaW50IHN0YXJ0LCBlbmQ7CisgICAgICAgICAgICB1aW50MzJfdCBzY3JvbGxUeXBlOwor
ICAgICAgICAgICAgZ192YXJpYW50X2dldChwYXJhbWV0ZXJzLCAiKGlpdSkiLCAmc3RhcnQsICZl
bmQsICZzY3JvbGxUeXBlKTsKKyAgICAgICAgICAgIGdfZGJ1c19tZXRob2RfaW52b2NhdGlvbl9y
ZXR1cm5fdmFsdWUoaW52b2NhdGlvbiwgZ192YXJpYW50X25ldygiKGIpIiwgYXRzcGlPYmplY3Qt
PnNjcm9sbFRvTWFrZVZpc2libGUoc3RhcnQsIGVuZCwgc2Nyb2xsVHlwZSkpKTsKKyAgICAgICAg
fSBlbHNlIGlmICghZ19zdHJjbXAwKG1ldGhvZE5hbWUsICJTY3JvbGxTdWJzdHJpbmdUb1BvaW50
IikpIHsKKyAgICAgICAgICAgIGludCBzdGFydCwgZW5kLCB4LCB5OworICAgICAgICAgICAgdWlu
dDMyX3QgY29vcmRpbmF0ZVR5cGU7CisgICAgICAgICAgICBnX3ZhcmlhbnRfZ2V0KHBhcmFtZXRl
cnMsICIoaWl1aWkpIiwgJnN0YXJ0LCAmZW5kLCAmY29vcmRpbmF0ZVR5cGUsICZ4LCAmeSk7Cisg
ICAgICAgICAgICBnX2RidXNfbWV0aG9kX2ludm9jYXRpb25fcmV0dXJuX3ZhbHVlKGludm9jYXRp
b24sIGdfdmFyaWFudF9uZXcoIihiKSIsIGF0c3BpT2JqZWN0LT5zY3JvbGxUb1BvaW50KHN0YXJ0
LCBlbmQsIGNvb3JkaW5hdGVUeXBlLCB4LCB5KSkpOworICAgICAgICB9IGVsc2UgaWYgKCFnX3N0
cmNtcDAobWV0aG9kTmFtZSwgIkdldEJvdW5kZWRSYW5nZXMiKSB8fCAhZ19zdHJjbXAwKG1ldGhv
ZE5hbWUsICJTY3JvbGxTdWJzdHJpbmdUb1BvaW50IikpCisgICAgICAgICAgICBnX2RidXNfbWV0
aG9kX2ludm9jYXRpb25fcmV0dXJuX2Vycm9yX2xpdGVyYWwoaW52b2NhdGlvbiwgR19EQlVTX0VS
Uk9SLCBHX0RCVVNfRVJST1JfTk9UX1NVUFBPUlRFRCwgIiIpOworICAgIH0sCisgICAgLy8gZ2V0
X3Byb3BlcnR5CisgICAgW10oR0RCdXNDb25uZWN0aW9uKiwgY29uc3QgZ2NoYXIqLCBjb25zdCBn
Y2hhciosIGNvbnN0IGdjaGFyKiwgY29uc3QgZ2NoYXIqIHByb3BlcnR5TmFtZSwgR0Vycm9yKiog
ZXJyb3IsIGdwb2ludGVyIHVzZXJEYXRhKSAtPiBHVmFyaWFudCogeworICAgICAgICBSRUxFQVNF
X0FTU0VSVCghaXNNYWluVGhyZWFkKCkpOworICAgICAgICBhdXRvIGF0c3BpT2JqZWN0ID0gUmVm
IHsgKnN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaSo+KHVzZXJEYXRhKSB9Owor
ICAgICAgICBhdHNwaU9iamVjdC0+dXBkYXRlQmFja2luZ1N0b3JlKCk7CisKKyAgICAgICAgaWYg
KCFnX3N0cmNtcDAocHJvcGVydHlOYW1lLCAiQ2hhcmFjdGVyQ291bnQiKSkKKyAgICAgICAgICAg
IHJldHVybiBnX3ZhcmlhbnRfbmV3X2ludDMyKGdfdXRmOF9zdHJsZW4oYXRzcGlPYmplY3QtPnRl
eHQoKS51dGY4KCkuZGF0YSgpLCAtMSkpOworICAgICAgICBpZiAoIWdfc3RyY21wMChwcm9wZXJ0
eU5hbWUsICJDYXJldE9mZnNldCIpKSB7CisgICAgICAgICAgICBpbnQgc3RhcnQgPSAwLCBlbmQg
PSAwOworICAgICAgICAgICAgcmV0dXJuIGdfdmFyaWFudF9uZXdfaW50MzIoYXRzcGlPYmplY3Qt
PnNlbGVjdGlvbkJvdW5kcyhzdGFydCwgZW5kKSA/IGVuZCA6IC0xKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGdfc2V0X2Vycm9yKGVycm9yLCBHX0lPX0VSUk9SLCBHX0lPX0VSUk9SX05PVF9TVVBQ
T1JURUQsICJVbmtub3duIHByb3BlcnR5ICclcyciLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICB9LAorICAgIC8vIHNldF9wcm9wZXJ0eSwKKyAgICBudWxscHRy
LAorICAgIC8vIHBhZGRpbmcKKyAgICBudWxscHRyCit9OworCitzdGF0aWMgVmVjdG9yPHVuc2ln
bmVkLCAxMjg+IG9mZnNldE1hcHBpbmcoY29uc3QgU3RyaW5nJiB0ZXh0KQoreworICAgIGlmICh0
ZXh0LmlzOEJpdCgpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgVmVjdG9yPHVuc2lnbmVk
LCAxMjg+IG9mZnNldHM7CisgICAgU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yIGl0ZXJh
dG9yKHRleHQuY2hhcmFjdGVyczE2KCksIDAsIHRleHQubGVuZ3RoKCksIHRleHQubGVuZ3RoKCkp
OworICAgIFVDaGFyMzIgY2hhcmFjdGVyOworICAgIHVuc2lnbmVkIGNsdXN0ZXJMZW5ndGggPSAw
OworICAgIHVuc2lnbmVkIGk7CisgICAgZm9yIChpID0gMDsgaXRlcmF0b3IuY29uc3VtZShjaGFy
YWN0ZXIsIGNsdXN0ZXJMZW5ndGgpOyBpdGVyYXRvci5hZHZhbmNlKGNsdXN0ZXJMZW5ndGgpLCAr
K2kpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IGNsdXN0ZXJMZW5ndGg7ICsr
aikKKyAgICAgICAgICAgIG9mZnNldHMuYXBwZW5kKGkpOworICAgIH0KKyAgICBvZmZzZXRzLmFw
cGVuZChpKyspOworICAgIHJldHVybiBvZmZzZXRzOworfQorCitzdGF0aWMgaW5saW5lIHVuc2ln
bmVkIFVURjE2T2Zmc2V0VG9VVEY4KGNvbnN0IFZlY3Rvcjx1bnNpZ25lZCwgMTI4PiYgbWFwcGlu
ZywgdW5zaWduZWQgb2Zmc2V0KQoreworICAgIHJldHVybiBtYXBwaW5nLmlzRW1wdHkoKSA/IG9m
ZnNldCA6IG1hcHBpbmdbb2Zmc2V0XTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBVVEY4
T2Zmc2V0VG9VVEYxNihjb25zdCBWZWN0b3I8dW5zaWduZWQsIDEyOD4mIG1hcHBpbmcsIHVuc2ln
bmVkIG9mZnNldCkKK3sKKyAgICBpZiAobWFwcGluZy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
biBvZmZzZXQ7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBvZmZzZXQ7IGkgPCBtYXBwaW5nLnNp
emUoKTsgKytpKSB7CisgICAgICAgIGlmIChtYXBwaW5nW2ldID09IG9mZnNldCkKKyAgICAgICAg
ICAgIHJldHVybiBpOworICAgIH0KKyAgICByZXR1cm4gbWFwcGluZy5zaXplKCk7Cit9CisKK1N0
cmluZyBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OnRleHQoKSBjb25zdAoreworICAgIEFYQ29y
ZU9iamVjdCogYXhPYmplY3QgPSBpc01haW5UaHJlYWQoKSA/IG1fY29yZU9iamVjdCA6IG1fYXhP
YmplY3Q7CisgICAgaWYgKCFheE9iamVjdCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworI2lmIEVO
QUJMRShJTlBVVF9UWVBFX0NPTE9SKQorICAgIGlmIChheE9iamVjdC0+cm9sZVZhbHVlKCkgPT0g
QWNjZXNzaWJpbGl0eVJvbGU6OkNvbG9yV2VsbCkgeworICAgICAgICBhdXRvIGNvbG9yID0gY29u
dmVydENvbG9yPFNSR0JBPGZsb2F0Pj4oYXhPYmplY3QtPmNvbG9yVmFsdWUoKSk7CisgICAgICAg
IEdVbmlxdWVQdHI8Y2hhcj4gY29sb3JTdHJpbmcoZ19zdHJkdXBfcHJpbnRmKCJyZ2IgJTcuNWYg
JTcuNWYgJTcuNWYgMSIsIGNvbG9yLnJlZCwgY29sb3IuZ3JlZW4sIGNvbG9yLmJsdWUpKTsKKyAg
ICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoY29sb3JTdHJpbmcuZ2V0KCkpOworICAgIH0K
KyNlbmRpZgorCisgICAgaWYgKGF4T2JqZWN0LT5pc1RleHRDb250cm9sKCkpCisgICAgICAgIHJl
dHVybiBheE9iamVjdC0+ZG9BWFN0cmluZ0ZvclJhbmdlKHsgMCwgU3RyaW5nOjpNYXhMZW5ndGgg
fSk7CisKKyAgICBhdXRvIHZhbHVlID0gYXhPYmplY3QtPnN0cmluZ1ZhbHVlKCk7CisgICAgaWYg
KCF2YWx1ZS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlOworCisgICAgaWYgKGF4T2Jq
ZWN0ID09IG1fY29yZU9iamVjdCkKKyAgICAgICAgcmV0dXJuIG1fY29yZU9iamVjdC0+dGV4dFVu
ZGVyRWxlbWVudChBY2Nlc3NpYmlsaXR5VGV4dFVuZGVyRWxlbWVudE1vZGUoQWNjZXNzaWJpbGl0
eVRleHRVbmRlckVsZW1lbnRNb2RlOjpUZXh0VW5kZXJFbGVtZW50TW9kZUluY2x1ZGVBbGxDaGls
ZHJlbikpOworCisgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHk6OnJldHJpZXZlVmFsdWVGcm9tTWFp
blRocmVhZDxTdHJpbmc+KFt0aGlzXSgpIC0+IFN0cmluZyB7CisgICAgICAgIGlmIChtX2NvcmVP
YmplY3QpCisgICAgICAgICAgICBtX2NvcmVPYmplY3QtPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOwor
CisgICAgICAgIGlmICghbV9jb3JlT2JqZWN0KQorICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAg
ICAgICAgcmV0dXJuIG1fY29yZU9iamVjdC0+dGV4dFVuZGVyRWxlbWVudChBY2Nlc3NpYmlsaXR5
VGV4dFVuZGVyRWxlbWVudE1vZGUoQWNjZXNzaWJpbGl0eVRleHRVbmRlckVsZW1lbnRNb2RlOjpU
ZXh0VW5kZXJFbGVtZW50TW9kZUluY2x1ZGVBbGxDaGlsZHJlbikpLmlzb2xhdGVkQ29weSgpOwor
ICAgIH0pOworfQorCit1bnNpZ25lZCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpnZXRMZW5ndGhGb3JU
ZXh0UmFuZ2UoKSBjb25zdAoreworICAgIFJFTEVBU0VfQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
KyAgICAvLyBGSVhNRTogdGhpcyBzaG91bGQgcHJvYmFibHkgYmUgaW4gc3luYyB3aXRoIEFjY2Vz
c2liaWxpdHlPYmplY3RBdHNwaTo6dGV4dCgpLgorICAgIHVuc2lnbmVkIHRleHRMZW5ndGggPSB0
ZXh0KCkubGVuZ3RoKCk7CisgICAgaWYgKHRleHRMZW5ndGgpCisgICAgICAgIHJldHVybiB0ZXh0
TGVuZ3RoOworCisgICAgTm9kZSogbm9kZSA9IHRoaXMtPm5vZGUoKTsKKyAgICBSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyID0gbm9kZSA/IG5vZGUtPnJlbmRlcmVyKCkgOiBudWxscHRyOworICAgIGlm
IChpczxSZW5kZXJUZXh0PihyZW5kZXJlcikpCisgICAgICAgIHRleHRMZW5ndGggPSBkb3duY2Fz
dDxSZW5kZXJUZXh0PigqcmVuZGVyZXIpLnRleHQoKS5sZW5ndGgoKTsKKworICAgIGlmICghdGV4
dExlbmd0aCAmJiBhbGxvd3NUZXh0UmFuZ2VzKCkpCisgICAgICAgIHRleHRMZW5ndGggPSB0ZXh0
VW5kZXJFbGVtZW50KEFjY2Vzc2liaWxpdHlUZXh0VW5kZXJFbGVtZW50TW9kZShBY2Nlc3NpYmls
aXR5VGV4dFVuZGVyRWxlbWVudE1vZGU6OlRleHRVbmRlckVsZW1lbnRNb2RlSW5jbHVkZUFsbENo
aWxkcmVuKSkubGVuZ3RoKCk7CisKKyAgICByZXR1cm4gdGV4dExlbmd0aDsKK30KKworYm9vbCBB
Y2Nlc3NpYmlsaXR5T2JqZWN0OjphbGxvd3NUZXh0UmFuZ2VzKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworQ1N0cmluZyBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OnRleHQoaW50
IHN0YXJ0T2Zmc2V0LCBpbnQgZW5kT2Zmc2V0KSBjb25zdAoreworICAgIFJFTEVBU0VfQVNTRVJU
KCFpc01haW5UaHJlYWQoKSk7CisgICAgYXV0byB1dGYxNlRleHQgPSB0ZXh0KCk7CisgICAgYXV0
byB1dGY4VGV4dCA9IHV0ZjE2VGV4dC51dGY4KCk7CisgICAgaWYgKHV0ZjhUZXh0LmlzTnVsbCgp
KQorICAgICAgICByZXR1cm4geyB9OworCisgICAgYXV0byBsZW5ndGggPSBzdGF0aWNfY2FzdDxp
bnQ+KGdfdXRmOF9zdHJsZW4odXRmOFRleHQuZGF0YSgpLCAtMSkpOworICAgIHN0YXJ0T2Zmc2V0
ID0gc3RkOjpjbGFtcChzdGFydE9mZnNldCwgMCwgbGVuZ3RoKTsKKyAgICBpZiAoZW5kT2Zmc2V0
ID09IC0xKQorICAgICAgICBlbmRPZmZzZXQgPSBsZW5ndGg7CisgICAgZWxzZQorICAgICAgICBl
bmRPZmZzZXQgPSBzdGQ6OmNsYW1wKGVuZE9mZnNldCwgMCwgbGVuZ3RoKTsKKyAgICBpZiAoZW5k
T2Zmc2V0IDw9IHN0YXJ0T2Zmc2V0KQorICAgICAgICByZXR1cm4geyB9OworCisgICAgaWYgKCFz
dGFydE9mZnNldCAmJiBlbmRPZmZzZXQgPT0gbGVuZ3RoKQorICAgICAgICByZXR1cm4gdXRmOFRl
eHQ7CisKKyAgICBHVW5pcXVlUHRyPGNoYXI+IHN1YnN0cmluZyhnX3V0Zjhfc3Vic3RyaW5nKHV0
ZjhUZXh0LmRhdGEoKSwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCkpOworICAgIHJldHVybiBzdWJz
dHJpbmcuZ2V0KCk7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjp0ZXh0SW5z
ZXJ0ZWQoY29uc3QgU3RyaW5nJiBpbnNlcnRlZFRleHQsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYg
cG9zaXRpb24pCit7CisgICAgUkVMRUFTRV9BU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGlm
ICghbV9pc1JlZ2lzdGVyZWQubG9hZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1f
aW50ZXJmYWNlcy5jb250YWlucyhJbnRlcmZhY2U6OlRleHQpKQorICAgICAgICByZXR1cm47CisK
KyAgICBhdXRvIHV0ZjE2VGV4dCA9IHRleHQoKTsKKyAgICBhdXRvIHV0ZjhUZXh0ID0gdXRmMTZU
ZXh0LnV0ZjgoKTsKKyAgICBhdXRvIHV0ZjE2T2Zmc2V0ID0gbV9jb3JlT2JqZWN0LT5pbmRleEZv
clZpc2libGVQb3NpdGlvbihwb3NpdGlvbik7CisgICAgYXV0byBtYXBwaW5nID0gb2Zmc2V0TWFw
cGluZyh1dGYxNlRleHQpOworICAgIGF1dG8gb2Zmc2V0ID0gVVRGMTZPZmZzZXRUb1VURjgobWFw
cGluZywgdXRmMTZPZmZzZXQpOworICAgIGF1dG8gdXRmOEluc2VydGVkVGV4dCA9IGluc2VydGVk
VGV4dC51dGY4KCk7CisgICAgYXV0byBpbnNlcnRlZFRleHRMZW5ndGggPSBnX3V0Zjhfc3RybGVu
KHV0ZjhJbnNlcnRlZFRleHQuZGF0YSgpLCAtMSk7CisgICAgcm9vdCgpLT5hdHNwaSgpLnRleHRD
aGFuZ2VkKCp0aGlzLCAiaW5zZXJ0IiwgV1RGTW92ZSh1dGY4SW5zZXJ0ZWRUZXh0KSwgb2Zmc2V0
IC0gaW5zZXJ0ZWRUZXh0TGVuZ3RoLCBpbnNlcnRlZFRleHRMZW5ndGgpOworfQorCit2b2lkIEFj
Y2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6dGV4dERlbGV0ZWQoY29uc3QgU3RyaW5nJiBkZWxldGVk
VGV4dCwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbikKK3sKKyAgICBSRUxFQVNFX0FT
U0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKCFtX2lzUmVnaXN0ZXJlZC5sb2FkKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9pbnRlcmZhY2VzLmNvbnRhaW5zKEludGVyZmFj
ZTo6VGV4dCkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gdXRmMTZUZXh0ID0gdGV4dCgp
OworICAgIGF1dG8gdXRmOFRleHQgPSB1dGYxNlRleHQudXRmOCgpOworICAgIGF1dG8gdXRmMTZP
ZmZzZXQgPSBtX2NvcmVPYmplY3QtPmluZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKHBvc2l0aW9uKTsK
KyAgICBhdXRvIG1hcHBpbmcgPSBvZmZzZXRNYXBwaW5nKHV0ZjE2VGV4dCk7CisgICAgYXV0byBv
ZmZzZXQgPSBVVEYxNk9mZnNldFRvVVRGOChtYXBwaW5nLCB1dGYxNk9mZnNldCk7CisgICAgYXV0
byB1dGY4RGVsZXRlZFRleHQgPSBkZWxldGVkVGV4dC51dGY4KCk7CisgICAgYXV0byBkZWxldGVk
VGV4dExlbmd0aCA9IGdfdXRmOF9zdHJsZW4odXRmOERlbGV0ZWRUZXh0LmRhdGEoKSwgLTEpOwor
ICAgIHJvb3QoKS0+YXRzcGkoKS50ZXh0Q2hhbmdlZCgqdGhpcywgImRlbGV0ZSIsIFdURk1vdmUo
dXRmOERlbGV0ZWRUZXh0KSwgb2Zmc2V0LCBkZWxldGVkVGV4dExlbmd0aCk7Cit9CisKK0ludFBv
aW50IEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6Ym91bmRhcnlPZmZzZXQodW5zaWduZWQgdXRm
MTZPZmZzZXQsIFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSkgY29uc3QKK3sKKyAgICByZXR1
cm4gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVWYWx1ZUZyb21NYWluVGhyZWFkPEludFBvaW50Pihb
dGhpcywgdXRmMTZPZmZzZXQsIGdyYW51bGFyaXR5XSgpIC0+IEludFBvaW50IHsKKyAgICAgICAg
aWYgKG1fY29yZU9iamVjdCkKKyAgICAgICAgICAgIG1fY29yZU9iamVjdC0+dXBkYXRlQmFja2lu
Z1N0b3JlKCk7CisKKyAgICAgICAgaWYgKCFtX2NvcmVPYmplY3QpCisgICAgICAgICAgICByZXR1
cm4geyB9OworCisgICAgICAgIFZpc2libGVQb3NpdGlvbiBvZmZzZXRQb3NpdGlvbiA9IG1fY29y
ZU9iamVjdC0+dmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgodXRmMTZPZmZzZXQpOworICAgICAgICBW
aXNpYmxlUG9zaXRpb24gc3RhcnRQb3NpdGlvbiwgZW5kUG9zdGlvbjsKKyAgICAgICAgc3dpdGNo
IChncmFudWxhcml0eSkgeworICAgICAgICBjYXNlIFRleHRHcmFudWxhcml0eTo6Q2hhcmFjdGVy
OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgY2Fz
ZSBUZXh0R3JhbnVsYXJpdHk6OldvcmRTdGFydDogeworICAgICAgICAgICAgc3RhcnRQb3NpdGlv
biA9IGlzU3RhcnRPZldvcmQob2Zmc2V0UG9zaXRpb24pICYmIGRlcHJlY2F0ZWRJc0VkaXRpbmdX
aGl0ZXNwYWNlKG9mZnNldFBvc2l0aW9uLmNoYXJhY3RlckJlZm9yZSgpKSA/IG9mZnNldFBvc2l0
aW9uIDogc3RhcnRPZldvcmQob2Zmc2V0UG9zaXRpb24sIExlZnRXb3JkSWZPbkJvdW5kYXJ5KTsK
KyAgICAgICAgICAgIGVuZFBvc3Rpb24gPSBuZXh0V29yZFBvc2l0aW9uKHN0YXJ0UG9zaXRpb24p
OworICAgICAgICAgICAgYXV0byBwb3NpdGlvbkFmdGVyU3BhY2luZ0FuZEZvbGxvd2luZ1dvcmQg
PSBuZXh0V29yZFBvc2l0aW9uKGVuZFBvc3Rpb24pOworICAgICAgICAgICAgaWYgKHBvc2l0aW9u
QWZ0ZXJTcGFjaW5nQW5kRm9sbG93aW5nV29yZCAhPSBlbmRQb3N0aW9uKSB7CisgICAgICAgICAg
ICAgICAgYXV0byBwcmV2aW91c1Bvc2l0aW9uID0gcHJldmlvdXNXb3JkUG9zaXRpb24ocG9zaXRp
b25BZnRlclNwYWNpbmdBbmRGb2xsb3dpbmdXb3JkKTsKKyAgICAgICAgICAgICAgICBpZiAocHJl
dmlvdXNQb3NpdGlvbiA9PSBzdGFydFBvc2l0aW9uKQorICAgICAgICAgICAgICAgICAgICBlbmRQ
b3N0aW9uID0gcG9zaXRpb25BZnRlclNwYWNpbmdBbmRGb2xsb3dpbmdXb3JkOworICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZW5kUG9zdGlvbiA9IHByZXZpb3VzUG9z
aXRpb247CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIFRleHRHcmFudWxhcml0eTo6V29yZEVuZDogeworICAgICAgICAgICAgc3RhcnRQ
b3NpdGlvbiA9IHByZXZpb3VzV29yZFBvc2l0aW9uKG9mZnNldFBvc2l0aW9uKTsKKyAgICAgICAg
ICAgIGF1dG8gcG9zaXRpb25CZWZvcmVTcGFjaW5nQW5kUHJldmlvdXNXb3JkID0gcHJldmlvdXNX
b3JkUG9zaXRpb24oc3RhcnRQb3NpdGlvbik7CisgICAgICAgICAgICBpZiAocG9zaXRpb25CZWZv
cmVTcGFjaW5nQW5kUHJldmlvdXNXb3JkICE9IHN0YXJ0UG9zaXRpb24pCisgICAgICAgICAgICAg
ICAgc3RhcnRQb3NpdGlvbiA9IG5leHRXb3JkUG9zaXRpb24ocG9zaXRpb25CZWZvcmVTcGFjaW5n
QW5kUHJldmlvdXNXb3JkKTsKKyAgICAgICAgICAgIGVuZFBvc3Rpb24gPSBlbmRPZldvcmQob2Zm
c2V0UG9zaXRpb24pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSBUZXh0R3JhbnVsYXJpdHk6OlNlbnRlbmNlU3RhcnQ6IHsKKyAgICAgICAgICAgIHN0YXJ0UG9z
aXRpb24gPSBzdGFydE9mU2VudGVuY2Uob2Zmc2V0UG9zaXRpb24pOworICAgICAgICAgICAgZW5k
UG9zdGlvbiA9IGVuZE9mU2VudGVuY2Uoc3RhcnRQb3NpdGlvbik7CisgICAgICAgICAgICBpZiAo
b2Zmc2V0UG9zaXRpb24gPT0gZW5kUG9zdGlvbikgeworICAgICAgICAgICAgICAgIHN0YXJ0UG9z
aXRpb24gPSBuZXh0U2VudGVuY2VQb3NpdGlvbihzdGFydFBvc2l0aW9uKTsKKyAgICAgICAgICAg
ICAgICBlbmRQb3N0aW9uID0gZW5kT2ZTZW50ZW5jZShzdGFydFBvc2l0aW9uKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgVGV4dEdy
YW51bGFyaXR5OjpTZW50ZW5jZUVuZDoKKyAgICAgICAgICAgIHN0YXJ0UG9zaXRpb24gPSBwcmV2
aW91c1NlbnRlbmNlUG9zaXRpb24ob2Zmc2V0UG9zaXRpb24pOworICAgICAgICAgICAgZW5kUG9z
dGlvbiA9IGVuZE9mU2VudGVuY2Uob2Zmc2V0UG9zaXRpb24pOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgVGV4dEdyYW51bGFyaXR5OjpMaW5lU3RhcnQ6CisgICAgICAgICAgICBz
dGFydFBvc2l0aW9uID0gbG9naWNhbFN0YXJ0T2ZMaW5lKG9mZnNldFBvc2l0aW9uKTsKKyAgICAg
ICAgICAgIGVuZFBvc3Rpb24gPSBuZXh0TGluZVBvc2l0aW9uKG9mZnNldFBvc2l0aW9uLCAwKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFRleHRHcmFudWxhcml0eTo6TGluZUVu
ZDoKKyAgICAgICAgICAgIHN0YXJ0UG9zaXRpb24gPSBsb2dpY2FsU3RhcnRPZkxpbmUob2Zmc2V0
UG9zaXRpb24pOworICAgICAgICAgICAgZW5kUG9zdGlvbiA9IGxvZ2ljYWxFbmRPZkxpbmUob2Zm
c2V0UG9zaXRpb24pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVGV4dEdyYW51
bGFyaXR5OjpQYXJhZ3JhcGg6CisgICAgICAgICAgICBzdGFydFBvc2l0aW9uID0gc3RhcnRPZlBh
cmFncmFwaChvZmZzZXRQb3NpdGlvbik7CisgICAgICAgICAgICBlbmRQb3N0aW9uID0gZW5kT2ZQ
YXJhZ3JhcGgob2Zmc2V0UG9zaXRpb24pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHsgbV9jb3JlT2JqZWN0LT5pbmRleEZvclZpc2libGVQb3NpdGlvbihz
dGFydFBvc2l0aW9uKSwgbV9jb3JlT2JqZWN0LT5pbmRleEZvclZpc2libGVQb3NpdGlvbihlbmRQ
b3N0aW9uKSB9OworICAgIH0pOworfQorCitDU3RyaW5nIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNw
aTo6dGV4dEF0T2Zmc2V0KGludCBvZmZzZXQsIFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwg
aW50JiBzdGFydE9mZnNldCwgaW50JiBlbmRPZmZzZXQpIGNvbnN0Cit7CisgICAgUkVMRUFTRV9B
U1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKyAgICBhdXRvIHV0ZjE2VGV4dCA9IHRleHQoKTsKKyAg
ICBhdXRvIHV0ZjhUZXh0ID0gdXRmMTZUZXh0LnV0ZjgoKTsKKyAgICBpZiAodXRmOFRleHQuaXNO
dWxsKCkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBhdXRvIGxlbmd0aCA9IHN0YXRpY19j
YXN0PGludD4oZ191dGY4X3N0cmxlbih1dGY4VGV4dC5kYXRhKCksIC0xKSk7CisgICAgaWYgKG9m
ZnNldCA8IDAgfHwgb2Zmc2V0ID4gbGVuZ3RoKQorICAgICAgICByZXR1cm4geyB9OworCisgICAg
aWYgKGdyYW51bGFyaXR5ID09IFRleHRHcmFudWxhcml0eTo6Q2hhcmFjdGVyKSB7CisgICAgICAg
IHN0YXJ0T2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICBlbmRPZmZzZXQgPSBzdGQ6Om1pbihvZmZz
ZXQgKyAxLCBsZW5ndGgpOworICAgIH0gZWxzZSB7CisgICAgICAgIGF1dG8gbWFwcGluZyA9IG9m
ZnNldE1hcHBpbmcodXRmMTZUZXh0KTsKKyAgICAgICAgYXV0byB1dGYxNk9mZnNldCA9IFVURjhP
ZmZzZXRUb1VURjE2KG1hcHBpbmcsIG9mZnNldCk7CisgICAgICAgIGF1dG8gYm91bmRhcnlPZmZz
ZXQgPSB0aGlzLT5ib3VuZGFyeU9mZnNldCh1dGYxNk9mZnNldCwgZ3JhbnVsYXJpdHkpOworICAg
ICAgICBzdGFydE9mZnNldCA9IFVURjE2T2Zmc2V0VG9VVEY4KG1hcHBpbmcsIHN0ZDo6bWF4PGlu
dD4oYm91bmRhcnlPZmZzZXQueCgpLCAwKSk7CisgICAgICAgIGVuZE9mZnNldCA9IFVURjE2T2Zm
c2V0VG9VVEY4KG1hcHBpbmcsIHN0ZDo6bWluPGludD4oYm91bmRhcnlPZmZzZXQueSgpLCB1dGYx
NlRleHQubGVuZ3RoKCkpKTsKKyAgICB9CisKKyAgICBHVW5pcXVlUHRyPGNoYXI+IHN1YnN0cmlu
ZyhnX3V0Zjhfc3Vic3RyaW5nKHV0ZjhUZXh0LmRhdGEoKSwgc3RhcnRPZmZzZXQsIGVuZE9mZnNl
dCkpOworICAgIHJldHVybiBzdWJzdHJpbmcuZ2V0KCk7Cit9CisKK2ludCBBY2Nlc3NpYmlsaXR5
T2JqZWN0QXRzcGk6OmNoYXJhY3RlckF0T2Zmc2V0KGludCBvZmZzZXQpIGNvbnN0Cit7CisgICAg
UkVMRUFTRV9BU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKyAgICBhdXRvIHV0ZjhUZXh0ID0gdGV4
dCgpLnV0ZjgoKTsKKyAgICBpZiAodXRmOFRleHQuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiAw
OworCisgICAgYXV0byBsZW5ndGggPSBzdGF0aWNfY2FzdDxpbnQ+KGdfdXRmOF9zdHJsZW4odXRm
OFRleHQuZGF0YSgpLCAtMSkpOworICAgIGlmIChvZmZzZXQgPCAwIHx8IG9mZnNldCA+PSBsZW5n
dGgpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGdfdXRmOF9nZXRfY2hhcihnX3V0
Zjhfb2Zmc2V0X3RvX3BvaW50ZXIodXRmOFRleHQuZGF0YSgpLCBvZmZzZXQpKTsKK30KKworSW50
UmVjdCBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OmJvdW5kc0ZvclJhbmdlKHVuc2lnbmVkIHV0
ZjE2T2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIHVpbnQzMl90IGNvb3JkaW5hdGVUeXBlKSBjb25z
dAoreworICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZVZhbHVlRnJvbU1haW5UaHJl
YWQ8SW50UmVjdD4oW3RoaXMsIHV0ZjE2T2Zmc2V0LCBsZW5ndGgsIGNvb3JkaW5hdGVUeXBlXSgp
IC0+IEludFJlY3QgeworICAgICAgICBpZiAobV9jb3JlT2JqZWN0KQorICAgICAgICAgICAgbV9j
b3JlT2JqZWN0LT51cGRhdGVCYWNraW5nU3RvcmUoKTsKKworICAgICAgICBpZiAoIW1fY29yZU9i
amVjdCkKKyAgICAgICAgICAgIHJldHVybiB7IH07CisKKyAgICAgICAgYXV0byBleHRlbnRzID0g
bV9jb3JlT2JqZWN0LT5kb0FYQm91bmRzRm9yUmFuZ2UoUGxhaW5UZXh0UmFuZ2UodXRmMTZPZmZz
ZXQsIGxlbmd0aCkpOworCisgICAgICAgIGF1dG8qIGZyYW1lVmlldyA9IG1fY29yZU9iamVjdC0+
ZG9jdW1lbnRGcmFtZVZpZXcoKTsKKyAgICAgICAgaWYgKCFmcmFtZVZpZXcpCisgICAgICAgICAg
ICByZXR1cm4gZXh0ZW50czsKKworICAgICAgICBzd2l0Y2ggKGNvb3JkaW5hdGVUeXBlKSB7Cisg
ICAgICAgIGNhc2UgQXRzcGk6OkNvb3JkaW5hdGVUeXBlOjpTY3JlZW5Db29yZGluYXRlczoKKyAg
ICAgICAgICAgIHJldHVybiBmcmFtZVZpZXctPmNvbnRlbnRzVG9TY3JlZW4oZXh0ZW50cyk7Cisg
ICAgICAgIGNhc2UgQXRzcGk6OkNvb3JkaW5hdGVUeXBlOjpXaW5kb3dDb29yZGluYXRlczoKKyAg
ICAgICAgICAgIHJldHVybiBmcmFtZVZpZXctPmNvbnRlbnRzVG9XaW5kb3coZXh0ZW50cyk7Cisg
ICAgICAgIGNhc2UgQXRzcGk6OkNvb3JkaW5hdGVUeXBlOjpQYXJlbnRDb29yZGluYXRlczoKKyAg
ICAgICAgICAgIHJldHVybiBleHRlbnRzOworICAgICAgICB9CisKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9KTsKK30KKworSW50UmVjdCBBY2Nlc3NpYmlsaXR5
T2JqZWN0QXRzcGk6OnRleHRFeHRlbnRzKGludCBzdGFydE9mZnNldCwgaW50IGVuZE9mZnNldCwg
dWludDMyX3QgY29vcmRpbmF0ZVR5cGUpIGNvbnN0Cit7CisgICAgUkVMRUFTRV9BU1NFUlQoIWlz
TWFpblRocmVhZCgpKTsKKyAgICBhdXRvIHV0ZjE2VGV4dCA9IHRleHQoKTsKKyAgICBhdXRvIHV0
ZjhUZXh0ID0gdXRmMTZUZXh0LnV0ZjgoKTsKKyAgICBpZiAodXRmOFRleHQuaXNOdWxsKCkpCisg
ICAgICAgIHJldHVybiB7IH07CisKKyAgICBhdXRvIGxlbmd0aCA9IHN0YXRpY19jYXN0PGludD4o
Z191dGY4X3N0cmxlbih1dGY4VGV4dC5kYXRhKCksIC0xKSk7CisgICAgc3RhcnRPZmZzZXQgPSBz
dGQ6OmNsYW1wKHN0YXJ0T2Zmc2V0LCAwLCBsZW5ndGgpOworICAgIGlmIChlbmRPZmZzZXQgPT0g
LTEpCisgICAgICAgIGVuZE9mZnNldCA9IGxlbmd0aDsKKyAgICBlbHNlCisgICAgICAgIGVuZE9m
ZnNldCA9IHN0ZDo6Y2xhbXAoZW5kT2Zmc2V0LCAwLCBsZW5ndGgpOworICAgIGlmIChlbmRPZmZz
ZXQgPD0gc3RhcnRPZmZzZXQpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBhdXRvIG1hcHBp
bmcgPSBvZmZzZXRNYXBwaW5nKHV0ZjE2VGV4dCk7CisgICAgYXV0byB1dGYxNlN0YXJ0T2Zmc2V0
ID0gVVRGOE9mZnNldFRvVVRGMTYobWFwcGluZywgc3RhcnRPZmZzZXQpOworICAgIGF1dG8gdXRm
MTZFbmRPZmZzZXQgPSBVVEY4T2Zmc2V0VG9VVEYxNihtYXBwaW5nLCBlbmRPZmZzZXQpOworICAg
IHJldHVybiBib3VuZHNGb3JSYW5nZSh1dGYxNlN0YXJ0T2Zmc2V0LCB1dGYxNkVuZE9mZnNldCAt
IHV0ZjE2U3RhcnRPZmZzZXQsIGNvb3JkaW5hdGVUeXBlKTsKK30KKworaW50IEFjY2Vzc2liaWxp
dHlPYmplY3RBdHNwaTo6b2Zmc2V0QXRQb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQsIHVpbnQz
Ml90IGNvb3JkaW5hdGVUeXBlKSBjb25zdAoreworICAgIFJFTEVBU0VfQVNTRVJUKCFpc01haW5U
aHJlYWQoKSk7CisgICAgYXV0byB1dGYxNlRleHQgPSB0ZXh0KCk7CisgICAgYXV0byB1dGY4VGV4
dCA9IHV0ZjE2VGV4dC51dGY4KCk7CisgICAgaWYgKHV0ZjhUZXh0LmlzTnVsbCgpKQorICAgICAg
ICByZXR1cm4gLTE7CisKKyAgICBhdXRvIHV0ZjE2T2Zmc2V0ID0gQWNjZXNzaWJpbGl0eTo6cmV0
cmlldmVWYWx1ZUZyb21NYWluVGhyZWFkPGludD4oW3RoaXMsICZwb2ludCwgY29vcmRpbmF0ZVR5
cGVdKCkgLT4gaW50IHsKKyAgICAgICAgaWYgKG1fY29yZU9iamVjdCkKKyAgICAgICAgICAgIG1f
Y29yZU9iamVjdC0+dXBkYXRlQmFja2luZ1N0b3JlKCk7CisKKyAgICAgICAgaWYgKCFtX2NvcmVP
YmplY3QpCisgICAgICAgICAgICByZXR1cm4gLTE7CisKKyAgICAgICAgYXV0byBjb252ZXJ0ZWRQ
b2ludCA9IHBvaW50OworICAgICAgICBpZiAoYXV0byogZnJhbWVWaWV3ID0gbV9jb3JlT2JqZWN0
LT5kb2N1bWVudEZyYW1lVmlldygpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKGNvb3JkaW5hdGVU
eXBlKSB7CisgICAgICAgICAgICBjYXNlIEF0c3BpOjpDb29yZGluYXRlVHlwZTo6U2NyZWVuQ29v
cmRpbmF0ZXM6CisgICAgICAgICAgICAgICAgY29udmVydGVkUG9pbnQgPSBmcmFtZVZpZXctPnNj
cmVlblRvQ29udGVudHMocG9pbnQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgY2FzZSBBdHNwaTo6Q29vcmRpbmF0ZVR5cGU6OldpbmRvd0Nvb3JkaW5hdGVzOgorICAgICAg
ICAgICAgICAgIGNvbnZlcnRlZFBvaW50ID0gZnJhbWVWaWV3LT53aW5kb3dUb0NvbnRlbnRzKHBv
aW50KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQXRzcGk6OkNv
b3JkaW5hdGVUeXBlOjpQYXJlbnRDb29yZGluYXRlczoKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gcG9zaXRpb24gPSBtX2Nv
cmVPYmplY3QtPnZpc2libGVQb3NpdGlvbkZvclBvaW50KGNvbnZlcnRlZFBvaW50KTsKKyAgICAg
ICAgaWYgKHBvc2l0aW9uLmlzTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIC0xOworCisgICAg
ICAgIHJldHVybiBtX2NvcmVPYmplY3QtPmluZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKHBvc2l0aW9u
KTsKKyAgICB9KTsKKworICAgIGlmICh1dGYxNk9mZnNldCA9PSAtMSkKKyAgICAgICAgcmV0dXJu
IC0xOworCisgICAgcmV0dXJuIFVURjE2T2Zmc2V0VG9VVEY4KG9mZnNldE1hcHBpbmcodXRmMTZU
ZXh0KSwgdXRmMTZPZmZzZXQpOworfQorCitJbnRQb2ludCBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRz
cGk6OmJvdW5kc0ZvclNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24p
IGNvbnN0Cit7CisgICAgUkVMRUFTRV9BU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGlmIChz
ZWxlY3Rpb24uaXNOb25lKCkpCisgICAgICAgIHJldHVybiB7IC0xLCAtMSB9OworCisgICAgTm9k
ZSogbm9kZSA9IG51bGxwdHI7CisgICAgaWYgKCFtX2NvcmVPYmplY3QtPmlzTmF0aXZlVGV4dENv
bnRyb2woKSkKKyAgICAgICAgbm9kZSA9IG1fY29yZU9iamVjdC0+bm9kZSgpOworICAgIGVsc2Ug
eworICAgICAgICBhdXRvIHBvc2l0aW9uSW5UZXh0Q29udHJvbElubmVyRWxlbWVudCA9IG1fY29y
ZU9iamVjdC0+dmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgoMCk7CisgICAgICAgIGlmIChhdXRvKiBp
bm5lck1vc3ROb2RlID0gcG9zaXRpb25JblRleHRDb250cm9sSW5uZXJFbGVtZW50LmRlZXBFcXVp
dmFsZW50KCkuYW5jaG9yTm9kZSgpKQorICAgICAgICAgICAgbm9kZSA9IGlubmVyTW9zdE5vZGUt
PnBhcmVudE5vZGUoKTsKKyAgICB9CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4geyAt
MSwgLTEgfTsKKworICAgIC8vIFdlIG5lZWQgdG8gbGltaXQgb3VyIHNlYXJjaCB0byBwb3NpdGlv
bnMgdGhhdCBmYWxsIGluc2lkZSB0aGUgZG9tYWluIG9mIHRoZSBjdXJyZW50IG9iamVjdC4KKyAg
ICBhdXRvIGZpcnN0VmFsaWRQb3NpdGlvbiA9IGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShu
b2RlLT5maXJzdERlc2NlbmRhbnQoKSk7CisgICAgYXV0byBsYXN0VmFsaWRQb3NpdGlvbiA9IGxh
c3RQb3NpdGlvbkluT3JBZnRlck5vZGUobm9kZS0+bGFzdERlc2NlbmRhbnQoKSk7CisKKyAgICBp
ZiAoIWludGVyc2VjdHMobWFrZVZpc2libGVQb3NpdGlvblJhbmdlKG1ha2VTaW1wbGVSYW5nZShm
aXJzdFZhbGlkUG9zaXRpb24sIGxhc3RWYWxpZFBvc2l0aW9uKSksIFZpc2libGVQb3NpdGlvblJh
bmdlKHNlbGVjdGlvbikpKQorICAgICAgICByZXR1cm4geyAtMSwgLTEgfTsKKworICAgIC8vIEZp
bmQgdGhlIHByb3BlciByYW5nZSBmb3IgdGhlIHNlbGVjdGlvbiB0aGF0IGZhbGxzIGluc2lkZSB0
aGUgb2JqZWN0LgorICAgIGF1dG8gbm9kZVJhbmdlU3RhcnQgPSBzdGQ6Om1heChzZWxlY3Rpb24u
c3RhcnQoKSwgZmlyc3RWYWxpZFBvc2l0aW9uKTsKKyAgICBhdXRvIG5vZGVSYW5nZUVuZCA9IHN0
ZDo6bWluKHNlbGVjdGlvbi5lbmQoKSwgbGFzdFZhbGlkUG9zaXRpb24pOworCisgICAgLy8gQ2Fs
Y3VsYXRlIHBvc2l0aW9uIG9mIHRoZSBzZWxlY3RlZCByYW5nZSBpbnNpZGUgdGhlIG9iamVjdC4K
KyAgICBhdXRvIHBhcmVudEZpcnN0UG9zaXRpb24gPSBmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5v
ZGUobm9kZSk7CisgICAgYXV0byByYW5nZUluUGFyZW50ID0gKm1ha2VTaW1wbGVSYW5nZShwYXJl
bnRGaXJzdFBvc2l0aW9uLCBub2RlUmFuZ2VTdGFydCk7CisKKyAgICAvLyBTZXQgdmFsdWVzIGZv
ciBzdGFydCBvZmZzZXRzIGFuZCBjYWxjdWxhdGUgaW5pdGlhbCByYW5nZSBsZW5ndGguCisgICAg
aW50IHN0YXJ0T2Zmc2V0ID0gY2hhcmFjdGVyQ291bnQocmFuZ2VJblBhcmVudCwgVGV4dEl0ZXJh
dG9yQmVoYXZpb3I6OkVtaXRzQ2hhcmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25zKTsK
KyAgICBhdXRvIG5vZGVSYW5nZSA9ICptYWtlU2ltcGxlUmFuZ2Uobm9kZVJhbmdlU3RhcnQsIG5v
ZGVSYW5nZUVuZCk7CisgICAgaW50IHJhbmdlTGVuZ3RoID0gY2hhcmFjdGVyQ291bnQobm9kZVJh
bmdlLCBUZXh0SXRlcmF0b3JCZWhhdmlvcjo6RW1pdHNDaGFyYWN0ZXJzQmV0d2VlbkFsbFZpc2li
bGVQb3NpdGlvbnMpOworICAgIHJldHVybiB7IHN0YXJ0T2Zmc2V0LCBzdGFydE9mZnNldCArIHJh
bmdlTGVuZ3RoIH07Cit9CisKK0ludFBvaW50IEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6c2Vs
ZWN0ZWRSYW5nZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHk6OnJldHJpZXZl
VmFsdWVGcm9tTWFpblRocmVhZDxJbnRQb2ludD4oW3RoaXNdKCkgLT4gSW50UG9pbnQgeworICAg
ICAgICBpZiAobV9jb3JlT2JqZWN0KQorICAgICAgICAgICAgbV9jb3JlT2JqZWN0LT51cGRhdGVC
YWNraW5nU3RvcmUoKTsKKworICAgICAgICBpZiAoIW1fY29yZU9iamVjdCkKKyAgICAgICAgICAg
IHJldHVybiB7IC0xLCAtMSB9OworCisgICAgICAgIHJldHVybiBib3VuZHNGb3JTZWxlY3Rpb24o
bV9jb3JlT2JqZWN0LT5zZWxlY3Rpb24oKSk7CisgICAgfSk7Cit9CisKK2Jvb2wgQWNjZXNzaWJp
bGl0eU9iamVjdEF0c3BpOjpzZWxlY3Rpb25Cb3VuZHMoaW50JiBzdGFydE9mZnNldCwgaW50JiBl
bmRPZmZzZXQpIGNvbnN0Cit7CisgICAgUkVMRUFTRV9BU1NFUlQoIWlzTWFpblRocmVhZCgpKTsK
KyAgICBhdXRvIHV0ZjE2VGV4dCA9IHRleHQoKTsKKyAgICBhdXRvIHV0ZjhUZXh0ID0gdXRmMTZU
ZXh0LnV0ZjgoKTsKKyAgICBpZiAodXRmOFRleHQuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGF1dG8gYm91bmRzID0gc2VsZWN0ZWRSYW5nZSgpOworICAgIGlmIChib3Vu
ZHMueCgpIDwgMCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBtYXBwaW5nID0g
b2Zmc2V0TWFwcGluZyh1dGYxNlRleHQpOworICAgIHN0YXJ0T2Zmc2V0ID0gVVRGMTZPZmZzZXRU
b1VURjgobWFwcGluZywgYm91bmRzLngoKSk7CisgICAgZW5kT2Zmc2V0ID0gVVRGMTZPZmZzZXRU
b1VURjgobWFwcGluZywgYm91bmRzLnkoKSk7CisKKyAgICBhdXRvIGxlbmd0aCA9IHN0YXRpY19j
YXN0PGludD4oZ191dGY4X3N0cmxlbih1dGY4VGV4dC5kYXRhKCksIC0xKSk7CisgICAgZW5kT2Zm
c2V0ID0gc3RkOjpjbGFtcChlbmRPZmZzZXQsIDAsIGxlbmd0aCk7CisgICAgaWYgKGVuZE9mZnNl
dCA8IHN0YXJ0T2Zmc2V0KSB7CisgICAgICAgIHN0YXJ0T2Zmc2V0ID0gZW5kT2Zmc2V0ID0gMDsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit2
b2lkIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6c2V0U2VsZWN0ZWRSYW5nZSh1bnNpZ25lZCB1
dGYxNk9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIEFjY2Vzc2liaWxpdHk6OnBlcmZv
cm1GdW5jdGlvbk9uTWFpblRocmVhZChbdGhpcywgdXRmMTZPZmZzZXQsIGxlbmd0aF0geworICAg
ICAgICBpZiAobV9jb3JlT2JqZWN0KQorICAgICAgICAgICAgbV9jb3JlT2JqZWN0LT51cGRhdGVC
YWNraW5nU3RvcmUoKTsKKworICAgICAgICBpZiAoIW1fY29yZU9iamVjdCkKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICBhdXRvIHJhbmdlID0gbV9jb3JlT2JqZWN0LT52aXNpYmxlUG9z
aXRpb25SYW5nZUZvclJhbmdlKFBsYWluVGV4dFJhbmdlKHV0ZjE2T2Zmc2V0LCBsZW5ndGgpKTsK
KyAgICAgICAgbV9jb3JlT2JqZWN0LT5zZXRTZWxlY3RlZFZpc2libGVQb3NpdGlvblJhbmdlKHJh
bmdlKTsKKyAgICB9KTsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OnNlbGVj
dFJhbmdlKGludCBzdGFydE9mZnNldCwgaW50IGVuZE9mZnNldCkKK3sKKyAgICBSRUxFQVNFX0FT
U0VSVCghaXNNYWluVGhyZWFkKCkpOworICAgIGF1dG8gdXRmMTZUZXh0ID0gdGV4dCgpOworICAg
IGF1dG8gdXRmOFRleHQgPSB1dGYxNlRleHQudXRmOCgpOworICAgIGlmICh1dGY4VGV4dC5pc051
bGwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBsZW5ndGggPSBzdGF0aWNf
Y2FzdDxpbnQ+KGdfdXRmOF9zdHJsZW4odXRmOFRleHQuZGF0YSgpLCAtMSkpOworICAgIHN0YXJ0
T2Zmc2V0ID0gc3RkOjpjbGFtcChzdGFydE9mZnNldCwgMCwgbGVuZ3RoKTsKKyAgICBpZiAoZW5k
T2Zmc2V0ID09IC0xKQorICAgICAgICBlbmRPZmZzZXQgPSBsZW5ndGg7CisgICAgZWxzZQorICAg
ICAgICBlbmRPZmZzZXQgPSBzdGQ6OmNsYW1wKGVuZE9mZnNldCwgMCwgbGVuZ3RoKTsKKworICAg
IGF1dG8gbWFwcGluZyA9IG9mZnNldE1hcHBpbmcodXRmMTZUZXh0KTsKKyAgICBhdXRvIHV0ZjE2
U3RhcnRPZmZzZXQgPSBVVEY4T2Zmc2V0VG9VVEYxNihtYXBwaW5nLCBzdGFydE9mZnNldCk7Cisg
ICAgYXV0byB1dGYxNkVuZE9mZnNldCA9IHN0YXJ0T2Zmc2V0ID09IGVuZE9mZnNldCA/IHV0ZjE2
U3RhcnRPZmZzZXQgOiBVVEY4T2Zmc2V0VG9VVEYxNihtYXBwaW5nLCBlbmRPZmZzZXQpOworICAg
IHNldFNlbGVjdGVkUmFuZ2UodXRmMTZTdGFydE9mZnNldCwgdXRmMTZFbmRPZmZzZXQgLSB1dGYx
NlN0YXJ0T2Zmc2V0KTsKKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEFjY2Vzc2liaWxp
dHlPYmplY3RBdHNwaTo6c2VsZWN0aW9uQ2hhbmdlZChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBz
ZWxlY3Rpb24pCit7CisgICAgUkVMRUFTRV9BU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGlm
ICghbV9pc1JlZ2lzdGVyZWQubG9hZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1f
aW50ZXJmYWNlcy5jb250YWlucyhJbnRlcmZhY2U6OlRleHQpKQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAoc2VsZWN0aW9uLmlzTm9uZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRv
IHV0ZjE2VGV4dCA9IHRleHQoKTsKKyAgICBhdXRvIHV0ZjhUZXh0ID0gdXRmMTZUZXh0LnV0Zjgo
KTsKKyAgICBpZiAodXRmOFRleHQuaXNOdWxsKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1
dG8gYm91bmRzID0gYm91bmRzRm9yU2VsZWN0aW9uKHNlbGVjdGlvbik7CisgICAgaWYgKGJvdW5k
cy55KCkgPCAwKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIGxlbmd0aCA9IGdfdXRmOF9z
dHJsZW4odXRmOFRleHQuZGF0YSgpLCAtMSk7CisgICAgYXV0byBtYXBwaW5nID0gb2Zmc2V0TWFw
cGluZyh1dGYxNlRleHQpOworICAgIGF1dG8gY2FyZXRPZmZzZXQgPSBVVEYxNk9mZnNldFRvVVRG
OChtYXBwaW5nLCBib3VuZHMueSgpKTsKKyAgICBpZiAoY2FyZXRPZmZzZXQgPD0gbGVuZ3RoKQor
ICAgICAgICByb290KCktPmF0c3BpKCkudGV4dENhcmV0TW92ZWQoKnRoaXMsIGNhcmV0T2Zmc2V0
KTsKKworICAgIGlmIChzZWxlY3Rpb24uaXNSYW5nZSgpKQorICAgICAgICByb290KCktPmF0c3Bp
KCkudGV4dFNlbGVjdGlvbkNoYW5nZWQoKnRoaXMpOworfQorCitBY2Nlc3NpYmlsaXR5T2JqZWN0
QXRzcGk6OlRleHRBdHRyaWJ1dGVzIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6dGV4dEF0dHJp
YnV0ZXMoc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gdXRmMTZPZmZzZXQsIGJvb2wgaW5jbHVkZURl
ZmF1bHQpIGNvbnN0Cit7CisgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHk6OnJldHJpZXZlVmFsdWVG
cm9tTWFpblRocmVhZDxUZXh0QXR0cmlidXRlcz4oW3RoaXMsIHV0ZjE2T2Zmc2V0LCBpbmNsdWRl
RGVmYXVsdF0oKSAtPiBUZXh0QXR0cmlidXRlcyB7CisgICAgICAgIGlmIChtX2NvcmVPYmplY3Qp
CisgICAgICAgICAgICBtX2NvcmVPYmplY3QtPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOworCisgICAg
ICAgIGlmICghbV9jb3JlT2JqZWN0IHx8ICFtX2NvcmVPYmplY3QtPnJlbmRlcmVyKCkgfHwgIW1f
Y29yZU9iamVjdC0+bm9kZSgpKQorICAgICAgICAgICAgcmV0dXJuIHsgfTsKKworICAgICAgICBh
dXRvIGFjY2Vzc2liaWxpdHlUZXh0QXR0cmlidXRlcyA9IFt0aGlzXShBWENvcmVPYmplY3QqIGF4
T2JqZWN0LCBjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYgZGVmYXVsdEF0dHJpYnV0ZXMp
IC0+IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IHsKKyAgICAgICAgICAgIEhhc2hNYXA8U3RyaW5n
LCBTdHJpbmc+IGF0dHJpYnV0ZXM7CisgICAgICAgICAgICBhdXRvJiBzdHlsZSA9IGF4T2JqZWN0
LT5yZW5kZXJlcigpLT5zdHlsZSgpOworCisgICAgICAgICAgICBhdXRvIGFkZEF0dHJpYnV0ZUlm
TmVlZGVkID0gWyZdKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkgewor
ICAgICAgICAgICAgICAgIGlmIChkZWZhdWx0QXR0cmlidXRlcy5pc0VtcHR5KCkgfHwgZGVmYXVs
dEF0dHJpYnV0ZXMuZ2V0KG5hbWUpICE9IHZhbHVlKQorICAgICAgICAgICAgICAgICAgICBhdHRy
aWJ1dGVzLmFkZChuYW1lLCB2YWx1ZSk7CisgICAgICAgICAgICB9OworCisgICAgICAgICAgICBh
dXRvIGJnQ29sb3IgPSBzdHlsZS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNr
Z3JvdW5kQ29sb3IpOworICAgICAgICAgICAgaWYgKGJnQ29sb3IuaXNWYWxpZCgpICYmIGJnQ29s
b3IuaXNWaXNpYmxlKCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGJn
Q29sb3IudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgICAgICAgICAgICAgYWRkQXR0cmli
dXRlSWZOZWVkZWQoImJnLWNvbG9yIl9zLCBtYWtlU3RyaW5nKHIsICcsJywgZywgJywnLCBiKSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGF1dG8gZmdDb2xvciA9IHN0eWxlLnZpc2l0
ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKTsKKyAgICAgICAgICAgIGlmIChmZ0Nv
bG9yLmlzVmFsaWQoKSAmJiBmZ0NvbG9yLmlzVmlzaWJsZSgpKSB7CisgICAgICAgICAgICAgICAg
YXV0byBbciwgZywgYiwgYV0gPSBmZ0NvbG9yLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOworICAg
ICAgICAgICAgICAgIGFkZEF0dHJpYnV0ZUlmTmVlZGVkKCJmZy1jb2xvciJfcywgbWFrZVN0cmlu
ZyhyLCAnLCcsIGcsICcsJywgYikpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBhZGRB
dHRyaWJ1dGVJZk5lZWRlZCgiZmFtaWx5LW5hbWUiX3MsIHN0eWxlLmZvbnRDYXNjYWRlKCkuZmly
c3RGYW1pbHkoKSk7CisgICAgICAgICAgICBhZGRBdHRyaWJ1dGVJZk5lZWRlZCgic2l6ZSJfcywg
bWFrZVN0cmluZyhzdGQ6OnJvdW5kKHN0eWxlLmNvbXB1dGVkRm9udFBpeGVsU2l6ZSgpICogNzIg
LyBXZWJDb3JlOjpzY3JlZW5EUEkoKSksICJwdCIpKTsKKyAgICAgICAgICAgIGFkZEF0dHJpYnV0
ZUlmTmVlZGVkKCJ3ZWlnaHQiX3MsIG1ha2VTdHJpbmcoc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0eWxl
LmZvbnRDYXNjYWRlKCkud2VpZ2h0KCkpKSk7CisgICAgICAgICAgICBhZGRBdHRyaWJ1dGVJZk5l
ZWRlZCgic3R5bGUiX3MsIHN0eWxlLmZvbnRDYXNjYWRlKCkuaXRhbGljKCkgPyAiaXRhbGljIiA6
ICJub3JtYWwiKTsKKyAgICAgICAgICAgIGFkZEF0dHJpYnV0ZUlmTmVlZGVkKCJzdHJpa2V0aHJv
dWdoIl9zLCBzdHlsZS50ZXh0RGVjb3JhdGlvbigpICYgVGV4dERlY29yYXRpb246OkxpbmVUaHJv
dWdoID8gInRydWUiIDogImZhbHNlIik7CisgICAgICAgICAgICBhZGRBdHRyaWJ1dGVJZk5lZWRl
ZCgidW5kZXJsaW5lIl9zLCBzdHlsZS50ZXh0RGVjb3JhdGlvbigpICYgVGV4dERlY29yYXRpb246
OlVuZGVybGluZSA/ICJzaW5nbGUiIDogIm5vbmUiKTsKKyAgICAgICAgICAgIGFkZEF0dHJpYnV0
ZUlmTmVlZGVkKCJpbnZpc2libGUiX3MsIHN0eWxlLnZpc2liaWxpdHkoKSA9PSBWaXNpYmlsaXR5
OjpIaWRkZW4gPyAidHJ1ZSIgOiAiZmFsc2UiKTsKKyAgICAgICAgICAgIGFkZEF0dHJpYnV0ZUlm
TmVlZGVkKCJlZGl0YWJsZSJfcywgbV9jb3JlT2JqZWN0LT5jYW5TZXRWYWx1ZUF0dHJpYnV0ZSgp
ID8gInRydWUiIDogImZhbHNlIik7CisgICAgICAgICAgICBhZGRBdHRyaWJ1dGVJZk5lZWRlZCgi
ZGlyZWN0aW9uIl9zLCBzdHlsZS5kaXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpMVFIgPyAi
bHRyIiA6ICJydGwiKTsKKworICAgICAgICAgICAgaWYgKCFzdHlsZS50ZXh0SW5kZW50KCkuaXNV
bmRlZmluZWQoKSkKKyAgICAgICAgICAgICAgICBhZGRBdHRyaWJ1dGVJZk5lZWRlZCgiaW5kZW50
Il9zLCBtYWtlU3RyaW5nKHZhbHVlRm9yTGVuZ3RoKHN0eWxlLnRleHRJbmRlbnQoKSwgbV9jb3Jl
T2JqZWN0LT5zaXplKCkud2lkdGgoKSkudG9JbnQoKSkpOworCisgICAgICAgICAgICBzd2l0Y2gg
KHN0eWxlLnRleHRBbGlnbigpKSB7CisgICAgICAgICAgICBjYXNlIFRleHRBbGlnbk1vZGU6OlN0
YXJ0OgorICAgICAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpFbmQ6CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFRleHRBbGlnbk1vZGU6OkxlZnQ6CisgICAgICAg
ICAgICBjYXNlIFRleHRBbGlnbk1vZGU6OldlYktpdExlZnQ6CisgICAgICAgICAgICAgICAgYWRk
QXR0cmlidXRlSWZOZWVkZWQoImp1c3RpZmljYXRpb24iX3MsICJsZWZ0Iik7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFRleHRBbGlnbk1vZGU6OlJpZ2h0OgorICAg
ICAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRSaWdodDoKKyAgICAgICAgICAgICAg
ICBhZGRBdHRyaWJ1dGVJZk5lZWRlZCgianVzdGlmaWNhdGlvbiJfcywgInJpZ2h0Iik7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFRleHRBbGlnbk1vZGU6OkNlbnRl
cjoKKyAgICAgICAgICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6V2ViS2l0Q2VudGVyOgorICAgICAg
ICAgICAgICAgIGFkZEF0dHJpYnV0ZUlmTmVlZGVkKCJqdXN0aWZpY2F0aW9uIl9zLCAiY2VudGVy
Iik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFRleHRBbGlnbk1v
ZGU6Okp1c3RpZnk6CisgICAgICAgICAgICAgICAgYWRkQXR0cmlidXRlSWZOZWVkZWQoImp1c3Rp
ZmljYXRpb24iX3MsICJmaWxsIik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIFN0cmluZyBpbnZhbGlkU3RhdHVzID0gbV9jb3JlT2JqZWN0LT5p
bnZhbGlkU3RhdHVzKCk7CisgICAgICAgICAgICBpZiAoaW52YWxpZFN0YXR1cyAhPSAiZmFsc2Ui
KQorICAgICAgICAgICAgICAgIGFkZEF0dHJpYnV0ZUlmTmVlZGVkKCJpbnZhbGlkIl9zLCBpbnZh
bGlkU3RhdHVzKTsKKworICAgICAgICAgICAgU3RyaW5nIGxhbmd1YWdlID0gbV9jb3JlT2JqZWN0
LT5sYW5ndWFnZSgpOworICAgICAgICAgICAgaWYgKCFsYW5ndWFnZS5pc0VtcHR5KCkpCisgICAg
ICAgICAgICAgICAgYWRkQXR0cmlidXRlSWZOZWVkZWQoImxhbmd1YWdlIl9zLCBsYW5ndWFnZSk7
CisKKyAgICAgICAgICAgIHJldHVybiBhdHRyaWJ1dGVzOworICAgICAgICB9OworCisgICAgICAg
IGF1dG8gZGVmYXVsdEF0dHJpYnV0ZXMgPSBhY2Nlc3NpYmlsaXR5VGV4dEF0dHJpYnV0ZXMobV9j
b3JlT2JqZWN0LCB7IH0pOworICAgICAgICBpZiAoIXV0ZjE2T2Zmc2V0KQorICAgICAgICAgICAg
cmV0dXJuIHsgZGVmYXVsdEF0dHJpYnV0ZXMsIC0xLCAtMSB9OworCisgICAgICAgIFZpc2libGVQ
b3NpdGlvbiBvZmZzZXRQb3NpdGlvbiA9IG1fY29yZU9iamVjdC0+dmlzaWJsZVBvc2l0aW9uRm9y
SW5kZXgoKnV0ZjE2T2Zmc2V0KTsKKyAgICAgICAgYXV0byogY2hpbGROb2RlID0gb2Zmc2V0UG9z
aXRpb24uZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpOworICAgICAgICBpZiAoIWNo
aWxkTm9kZSkKKyAgICAgICAgICAgIHJldHVybiB7IGRlZmF1bHRBdHRyaWJ1dGVzLCAtMSwgLTEg
fTsKKworICAgICAgICBhdXRvKiBjaGlsZFJlbmRlcmVyID0gY2hpbGROb2RlLT5yZW5kZXJlcigp
OworICAgICAgICBpZiAoIWNoaWxkUmVuZGVyZXIpCisgICAgICAgICAgICByZXR1cm4geyBkZWZh
dWx0QXR0cmlidXRlcywgLTEsIC0xIH07CisKKyAgICAgICAgYXV0byogY2hpbGRBeE9iamVjdCA9
IGNoaWxkUmVuZGVyZXItPmRvY3VtZW50KCkuYXhPYmplY3RDYWNoZSgpLT5nZXQoY2hpbGRSZW5k
ZXJlcik7CisgICAgICAgIGlmICghY2hpbGRBeE9iamVjdCB8fCBjaGlsZEF4T2JqZWN0ID09IG1f
Y29yZU9iamVjdCkKKyAgICAgICAgICAgIHJldHVybiB7IGRlZmF1bHRBdHRyaWJ1dGVzLCAtMSwg
LTEgfTsKKworICAgICAgICBhdXRvIGF0dHJpYnV0ZXMgPSBhY2Nlc3NpYmlsaXR5VGV4dEF0dHJp
YnV0ZXMoY2hpbGRBeE9iamVjdCwgZGVmYXVsdEF0dHJpYnV0ZXMpOworICAgICAgICBhdXRvIGZp
cnN0VmFsaWRQb3NpdGlvbiA9IGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShtX2NvcmVPYmpl
Y3QtPm5vZGUoKS0+Zmlyc3REZXNjZW5kYW50KCkpOworICAgICAgICBhdXRvIGxhc3RWYWxpZFBv
c2l0aW9uID0gbGFzdFBvc2l0aW9uSW5PckFmdGVyTm9kZShtX2NvcmVPYmplY3QtPm5vZGUoKS0+
bGFzdERlc2NlbmRhbnQoKSk7CisKKyAgICAgICAgYXV0byogc3RhcnRSZW5kZXJlciA9IGNoaWxk
UmVuZGVyZXI7CisgICAgICAgIGF1dG8gc3RhcnRQb3NpdGlvbiA9IGZpcnN0UG9zaXRpb25Jbk9y
QmVmb3JlTm9kZShzdGFydFJlbmRlcmVyLT5ub2RlKCkpOworICAgICAgICBmb3IgKFJlbmRlck9i
amVjdCogciA9IGNoaWxkUmVuZGVyZXItPnByZXZpb3VzSW5QcmVPcmRlcigpOyByICYmIHN0YXJ0
UG9zaXRpb24gPiBmaXJzdFZhbGlkUG9zaXRpb247IHIgPSByLT5wcmV2aW91c0luUHJlT3JkZXIo
KSkgeworICAgICAgICAgICAgaWYgKHItPmZpcnN0Q2hpbGRTbG93KCkpCisgICAgICAgICAgICAg
ICAgY29udGludWU7CisKKyAgICAgICAgICAgIGF1dG8gY2hpbGRBdHRyaWJ1dGVzID0gYWNjZXNz
aWJpbGl0eVRleHRBdHRyaWJ1dGVzKHItPmRvY3VtZW50KCkuYXhPYmplY3RDYWNoZSgpLT5nZXQo
ciksIGRlZmF1bHRBdHRyaWJ1dGVzKTsKKyAgICAgICAgICAgIGlmIChjaGlsZEF0dHJpYnV0ZXMg
IT0gYXR0cmlidXRlcykKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgc3Rh
cnRSZW5kZXJlciA9IHI7CisgICAgICAgICAgICBzdGFydFBvc2l0aW9uID0gZmlyc3RQb3NpdGlv
bkluT3JCZWZvcmVOb2RlKHN0YXJ0UmVuZGVyZXItPm5vZGUoKSk7CisgICAgICAgIH0KKworICAg
ICAgICBhdXRvKiBlbmRSZW5kZXJlciA9IGNoaWxkUmVuZGVyZXI7CisgICAgICAgIGF1dG8gZW5k
UG9zaXRpb24gPSBsYXN0UG9zaXRpb25Jbk9yQWZ0ZXJOb2RlKGVuZFJlbmRlcmVyLT5ub2RlKCkp
OworICAgICAgICBmb3IgKFJlbmRlck9iamVjdCogciA9IGNoaWxkUmVuZGVyZXItPm5leHRJblBy
ZU9yZGVyKCk7IHIgJiYgZW5kUG9zaXRpb24gPCBsYXN0VmFsaWRQb3NpdGlvbjsgciA9IHItPm5l
eHRJblByZU9yZGVyKCkpIHsKKyAgICAgICAgICAgIGlmIChyLT5maXJzdENoaWxkU2xvdygpKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBhdXRvIGNoaWxkQXR0cmli
dXRlcyA9IGFjY2Vzc2liaWxpdHlUZXh0QXR0cmlidXRlcyhyLT5kb2N1bWVudCgpLmF4T2JqZWN0
Q2FjaGUoKS0+Z2V0KHIpLCBkZWZhdWx0QXR0cmlidXRlcyk7CisgICAgICAgICAgICBpZiAoY2hp
bGRBdHRyaWJ1dGVzICE9IGF0dHJpYnV0ZXMpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgICAgIGVuZFJlbmRlcmVyID0gcjsKKyAgICAgICAgICAgIGVuZFBvc2l0aW9uID0gbGFz
dFBvc2l0aW9uSW5PckFmdGVyTm9kZShlbmRSZW5kZXJlci0+bm9kZSgpKTsKKyAgICAgICAgfQor
CisgICAgICAgIGlmICghaW5jbHVkZURlZmF1bHQpCisgICAgICAgICAgICByZXR1cm4geyBhdHRy
aWJ1dGVzLCBtX2NvcmVPYmplY3QtPmluZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKHN0YXJ0UG9zaXRp
b24pLCBtX2NvcmVPYmplY3QtPmluZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKGVuZFBvc2l0aW9uKSB9
OworCisgICAgICAgIGZvciAoY29uc3QgYXV0byYgaXQgOiBhdHRyaWJ1dGVzKQorICAgICAgICAg
ICAgZGVmYXVsdEF0dHJpYnV0ZXMuc2V0KGl0LmtleSwgaXQudmFsdWUpOworCisgICAgICAgIHJl
dHVybiB7IGRlZmF1bHRBdHRyaWJ1dGVzLCBtX2NvcmVPYmplY3QtPmluZGV4Rm9yVmlzaWJsZVBv
c2l0aW9uKHN0YXJ0UG9zaXRpb24pLCBtX2NvcmVPYmplY3QtPmluZGV4Rm9yVmlzaWJsZVBvc2l0
aW9uKGVuZFBvc2l0aW9uKSB9OworICAgIH0pOworfQorCitBY2Nlc3NpYmlsaXR5T2JqZWN0QXRz
cGk6OlRleHRBdHRyaWJ1dGVzIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6dGV4dEF0dHJpYnV0
ZXNXaXRoVVRGOE9mZnNldChzdGQ6Om9wdGlvbmFsPGludD4gb2Zmc2V0LCBib29sIGluY2x1ZGVE
ZWZhdWx0KSBjb25zdAoreworICAgIFJFTEVBU0VfQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7Cisg
ICAgYXV0byB1dGYxNlRleHQgPSB0ZXh0KCk7CisgICAgYXV0byB1dGY4VGV4dCA9IHV0ZjE2VGV4
dC51dGY4KCk7CisgICAgaWYgKHV0ZjhUZXh0LmlzTnVsbCgpKQorICAgICAgICByZXR1cm4geyB9
OworCisgICAgYXV0byBtYXBwaW5nID0gb2Zmc2V0TWFwcGluZyh1dGYxNlRleHQpOworICAgIHN0
ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHV0ZjE2T2Zmc2V0OworICAgIGlmIChvZmZzZXQpIHsKKyAg
ICAgICAgYXV0byBsZW5ndGggPSBzdGF0aWNfY2FzdDxpbnQ+KGdfdXRmOF9zdHJsZW4odXRmOFRl
eHQuZGF0YSgpLCAtMSkpOworICAgICAgICBpZiAoKm9mZnNldCA8IDAgfHwgKm9mZnNldCA+PSBs
ZW5ndGgpCisgICAgICAgICAgICByZXR1cm4geyB9OworCisgICAgICAgIHV0ZjE2T2Zmc2V0ID0g
VVRGOE9mZnNldFRvVVRGMTYobWFwcGluZywgKm9mZnNldCk7CisgICAgfQorCisgICAgYXV0byBh
dHRyaWJ1dGVzID0gdGV4dEF0dHJpYnV0ZXModXRmMTZPZmZzZXQsIGluY2x1ZGVEZWZhdWx0KTsK
KyAgICBpZiAoYXR0cmlidXRlcy5zdGFydE9mZnNldCAhPSAtMSkKKyAgICAgICAgYXR0cmlidXRl
cy5zdGFydE9mZnNldCA9IFVURjE2T2Zmc2V0VG9VVEY4KG1hcHBpbmcsIGF0dHJpYnV0ZXMuc3Rh
cnRPZmZzZXQpOworICAgIGlmIChhdHRyaWJ1dGVzLmVuZE9mZnNldCAhPSAtMSkKKyAgICAgICAg
YXR0cmlidXRlcy5lbmRPZmZzZXQgPSBVVEYxNk9mZnNldFRvVVRGOChtYXBwaW5nLCBhdHRyaWJ1
dGVzLmVuZE9mZnNldCk7CisKKyAgICByZXR1cm4gYXR0cmlidXRlczsKK30KKwordm9pZCBBY2Nl
c3NpYmlsaXR5T2JqZWN0QXRzcGk6OnRleHRBdHRyaWJ1dGVzQ2hhbmdlZCgpCit7CisgICAgUkVM
RUFTRV9BU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGlmICghbV9pc1JlZ2lzdGVyZWQubG9h
ZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1faW50ZXJmYWNlcy5jb250YWlucyhJ
bnRlcmZhY2U6OlRleHQpKQorICAgICAgICByZXR1cm47CisKKyAgICByb290KCktPmF0c3BpKCku
dGV4dEF0dHJpYnV0ZXNDaGFuZ2VkKCp0aGlzKTsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0QXRzcGk6OnNjcm9sbFRvTWFrZVZpc2libGUoaW50IHN0YXJ0T2Zmc2V0LCBpbnQgZW5kT2Zm
c2V0LCB1aW50MzJfdCBzY3JvbGxUeXBlKSBjb25zdAoreworICAgIFJFTEVBU0VfQVNTRVJUKCFp
c01haW5UaHJlYWQoKSk7CisgICAgYXV0byB1dGYxNlRleHQgPSB0ZXh0KCk7CisgICAgYXV0byB1
dGY4VGV4dCA9IHV0ZjE2VGV4dC51dGY4KCk7CisgICAgaWYgKHV0ZjhUZXh0LmlzTnVsbCgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGxlbmd0aCA9IHN0YXRpY19jYXN0PGlu
dD4oZ191dGY4X3N0cmxlbih1dGY4VGV4dC5kYXRhKCksIC0xKSk7CisgICAgaWYgKHN0YXJ0T2Zm
c2V0IDwgMCB8fCBzdGFydE9mZnNldCA+IGxlbmd0aCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGlmIChlbmRPZmZzZXQgPCAwIHx8IGVuZE9mZnNldCA+IGxlbmd0aCkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGlmIChlbmRPZmZzZXQgPCBzdGFydE9mZnNldCkKKyAgICAgICAgc3Rk
Ojpzd2FwKHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOworCisgICAgYXV0byBtYXBwaW5nID0gb2Zm
c2V0TWFwcGluZyh1dGYxNlRleHQpOworICAgIGF1dG8gdXRmMTZTdGFydE9mZnNldCA9IFVURjhP
ZmZzZXRUb1VURjE2KG1hcHBpbmcsIHN0YXJ0T2Zmc2V0KTsKKyAgICBhdXRvIHV0ZjE2RW5kT2Zm
c2V0ID0gVVRGOE9mZnNldFRvVVRGMTYobWFwcGluZywgZW5kT2Zmc2V0KTsKKyAgICBBY2Nlc3Np
YmlsaXR5OjpwZXJmb3JtRnVuY3Rpb25Pbk1haW5UaHJlYWQoW3RoaXMsIHV0ZjE2U3RhcnRPZmZz
ZXQsIHV0ZjE2RW5kT2Zmc2V0LCBzY3JvbGxUeXBlXSB7CisgICAgICAgIGlmIChtX2NvcmVPYmpl
Y3QpCisgICAgICAgICAgICBtX2NvcmVPYmplY3QtPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOworCisg
ICAgICAgIGlmICghbV9jb3JlT2JqZWN0IHx8ICFtX2NvcmVPYmplY3QtPnJlbmRlcmVyKCkpCisg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgSW50UmVjdCByZWN0ID0gbV9jb3JlT2JqZWN0
LT5kb0FYQm91bmRzRm9yUmFuZ2UoUGxhaW5UZXh0UmFuZ2UodXRmMTZTdGFydE9mZnNldCwgdXRm
MTZFbmRPZmZzZXQgLSB1dGYxNlN0YXJ0T2Zmc2V0KSk7CisKKyAgICAgICAgaWYgKG1fY29yZU9i
amVjdC0+aXNTY3JvbGxWaWV3KCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBwYXJlbnQgPSBt
X2NvcmVPYmplY3QtPnBhcmVudE9iamVjdCgpKQorICAgICAgICAgICAgICAgIHBhcmVudC0+c2Ny
b2xsVG9NYWtlVmlzaWJsZSgpOworICAgICAgICB9CisKKyAgICAgICAgU2Nyb2xsQWxpZ25tZW50
IGFsaWduWDsKKyAgICAgICAgU2Nyb2xsQWxpZ25tZW50IGFsaWduWTsKKyAgICAgICAgc3dpdGNo
IChzY3JvbGxUeXBlKSB7CisgICAgICAgIGNhc2UgQXRzcGk6OlNjcm9sbFR5cGU6OlRvcExlZnQ6
CisgICAgICAgICAgICBhbGlnblggPSBTY3JvbGxBbGlnbm1lbnQ6OmFsaWduTGVmdEFsd2F5czsK
KyAgICAgICAgICAgIGFsaWduWSA9IFNjcm9sbEFsaWdubWVudDo6YWxpZ25Ub3BBbHdheXM7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBdHNwaTo6U2Nyb2xsVHlwZTo6Qm90dG9t
UmlnaHQ6CisgICAgICAgICAgICBhbGlnblggPSBTY3JvbGxBbGlnbm1lbnQ6OmFsaWduUmlnaHRB
bHdheXM7CisgICAgICAgICAgICBhbGlnblkgPSBTY3JvbGxBbGlnbm1lbnQ6OmFsaWduQm90dG9t
QWx3YXlzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXRzcGk6OlNjcm9sbFR5
cGU6OlRvcEVkZ2U6CisgICAgICAgIGNhc2UgQXRzcGk6OlNjcm9sbFR5cGU6OkJvdHRvbUVkZ2U6
CisgICAgICAgICAgICAvLyBBbGlnbiB0byBhIHBhcnRpY3VsYXIgZWRnZSBpcyBub3Qgc3VwcG9y
dGVkLCBpdCdzIGFsd2F5cyB0aGUgY2xvc2VzdCBlZGdlLgorICAgICAgICAgICAgYWxpZ25YID0g
U2Nyb2xsQWxpZ25tZW50OjphbGlnbkNlbnRlcklmTmVlZGVkOworICAgICAgICAgICAgYWxpZ25Z
ID0gU2Nyb2xsQWxpZ25tZW50OjphbGlnblRvRWRnZUlmTmVlZGVkOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgQXRzcGk6OlNjcm9sbFR5cGU6OkxlZnRFZGdlOgorICAgICAgICBj
YXNlIEF0c3BpOjpTY3JvbGxUeXBlOjpSaWdodEVkZ2U6CisgICAgICAgICAgICAvLyBBbGlnbiB0
byBhIHBhcnRpY3VsYXIgZWRnZSBpcyBub3Qgc3VwcG9ydGVkLCBpdCdzIGFsd2F5cyB0aGUgY2xv
c2VzdCBlZGdlLgorICAgICAgICAgICAgYWxpZ25YID0gU2Nyb2xsQWxpZ25tZW50OjphbGlnblRv
RWRnZUlmTmVlZGVkOworICAgICAgICAgICAgYWxpZ25ZID0gU2Nyb2xsQWxpZ25tZW50OjphbGln
bkNlbnRlcklmTmVlZGVkOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXRzcGk6
OlNjcm9sbFR5cGU6OkFueXdoZXJlOgorICAgICAgICAgICAgYWxpZ25YID0gU2Nyb2xsQWxpZ25t
ZW50OjphbGlnbkNlbnRlcklmTmVlZGVkOworICAgICAgICAgICAgYWxpZ25ZID0gU2Nyb2xsQWxp
Z25tZW50OjphbGlnbkNlbnRlcklmTmVlZGVkOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKworICAgICAgICBtX2NvcmVPYmplY3QtPnJlbmRlcmVyKCktPnNjcm9sbFJlY3RUb1Zpc2li
bGUocmVjdCwgZmFsc2UsIHsgU2VsZWN0aW9uUmV2ZWFsTW9kZTo6UmV2ZWFsLCBhbGlnblgsIGFs
aWduWSwgU2hvdWxkQWxsb3dDcm9zc09yaWdpblNjcm9sbGluZzo6WWVzIH0pOworICAgIH0pOwor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpz
Y3JvbGxUb1BvaW50KGludCBzdGFydE9mZnNldCwgaW50IGVuZE9mZnNldCwgdWludDMyX3QgY29v
cmRpbmF0ZVR5cGUsIGludCB4LCBpbnQgeSkgY29uc3QKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCgh
aXNNYWluVGhyZWFkKCkpOworICAgIGF1dG8gdXRmMTZUZXh0ID0gdGV4dCgpOworICAgIGF1dG8g
dXRmOFRleHQgPSB1dGYxNlRleHQudXRmOCgpOworICAgIGlmICh1dGY4VGV4dC5pc051bGwoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBsZW5ndGggPSBzdGF0aWNfY2FzdDxp
bnQ+KGdfdXRmOF9zdHJsZW4odXRmOFRleHQuZGF0YSgpLCAtMSkpOworICAgIGlmIChzdGFydE9m
ZnNldCA8IDAgfHwgc3RhcnRPZmZzZXQgPiBsZW5ndGgpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBpZiAoZW5kT2Zmc2V0IDwgMCB8fCBlbmRPZmZzZXQgPiBsZW5ndGgpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBpZiAoZW5kT2Zmc2V0IDwgc3RhcnRPZmZzZXQpCisgICAgICAgIHN0
ZDo6c3dhcChzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKKworICAgIGF1dG8gbWFwcGluZyA9IG9m
ZnNldE1hcHBpbmcodXRmMTZUZXh0KTsKKyAgICBhdXRvIHV0ZjE2U3RhcnRPZmZzZXQgPSBVVEY4
T2Zmc2V0VG9VVEYxNihtYXBwaW5nLCBzdGFydE9mZnNldCk7CisgICAgYXV0byB1dGYxNkVuZE9m
ZnNldCA9IFVURjhPZmZzZXRUb1VURjE2KG1hcHBpbmcsIGVuZE9mZnNldCk7CisgICAgQWNjZXNz
aWJpbGl0eTo6cGVyZm9ybUZ1bmN0aW9uT25NYWluVGhyZWFkKFt0aGlzLCB1dGYxNlN0YXJ0T2Zm
c2V0LCB1dGYxNkVuZE9mZnNldCwgY29vcmRpbmF0ZVR5cGUsIHgsIHldIHsKKyAgICAgICAgaWYg
KG1fY29yZU9iamVjdCkKKyAgICAgICAgICAgIG1fY29yZU9iamVjdC0+dXBkYXRlQmFja2luZ1N0
b3JlKCk7CisKKyAgICAgICAgaWYgKCFtX2NvcmVPYmplY3QpCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgSW50UG9pbnQgcG9pbnQoeCwgeSk7CisgICAgICAgIGlmIChjb29yZGluYXRl
VHlwZSA9PSBBdHNwaTo6Q29vcmRpbmF0ZVR5cGU6OlNjcmVlbkNvb3JkaW5hdGVzKSB7CisgICAg
ICAgICAgICBpZiAoYXV0byogZnJhbWVWaWV3ID0gbV9jb3JlT2JqZWN0LT5kb2N1bWVudEZyYW1l
VmlldygpKQorICAgICAgICAgICAgICAgIHBvaW50ID0gZnJhbWVWaWV3LT5jb250ZW50c1RvV2lu
ZG93KGZyYW1lVmlldy0+c2NyZWVuVG9Db250ZW50cyhwb2ludCkpOworICAgICAgICB9CisKKyAg
ICAgICAgSW50UmVjdCByZWN0ID0gbV9jb3JlT2JqZWN0LT5kb0FYQm91bmRzRm9yUmFuZ2UoUGxh
aW5UZXh0UmFuZ2UodXRmMTZTdGFydE9mZnNldCwgdXRmMTZFbmRPZmZzZXQgLSB1dGYxNlN0YXJ0
T2Zmc2V0KSk7CisgICAgICAgIHBvaW50Lm1vdmUoLXJlY3QueCgpLCAtcmVjdC55KCkpOworICAg
ICAgICBtX2NvcmVPYmplY3QtPnNjcm9sbFRvR2xvYmFsUG9pbnQocG9pbnQpOworICAgIH0pOwor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIEVOQUJMRShBQ0NFU1NJQklMSVRZKSAmJiBVU0UoQVRTUEkpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL2F0c3BpL0ZyYW1lU2VsZWN0aW9uQXRzcGkuY3BwIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9hdHNwaS9GcmFtZVNlbGVjdGlvbkF0c3BpLmNwcAppbmRleCA0OTlm
ZDE5ODQyYzIuLjUzYmQ4ZmYyZTljOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9hdHNwaS9GcmFtZVNlbGVjdGlvbkF0c3BpLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL2F0c3BpL0ZyYW1lU2VsZWN0aW9uQXRzcGkuY3BwCkBAIC0yMywxMyArMjMsMjAgQEAKICNp
ZiBFTkFCTEUoQUNDRVNTSUJJTElUWSkgJiYgVVNFKEFUU1BJKQogCiAjaW5jbHVkZSAiQVhPYmpl
Y3RDYWNoZS5oIgorI2luY2x1ZGUgIkRvY3VtZW50SW5saW5lcy5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLXZvaWQgRnJhbWVTZWxlY3Rpb246Om5vdGlmeUFjY2Vzc2liaWxpdHlGb3JTZWxl
Y3Rpb25DaGFuZ2UoY29uc3QgQVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQmKQordm9pZCBGcmFtZVNl
bGVjdGlvbjo6bm90aWZ5QWNjZXNzaWJpbGl0eUZvclNlbGVjdGlvbkNoYW5nZShjb25zdCBBWFRl
eHRTdGF0ZUNoYW5nZUludGVudCYgaW50ZW50KQogewogICAgIGlmICghQVhPYmplY3RDYWNoZTo6
YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX3Nl
bGVjdGlvbi5zdGFydCgpLmlzTm90TnVsbCgpIHx8ICFtX3NlbGVjdGlvbi5lbmQoKS5pc05vdE51
bGwoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0g
bV9kb2N1bWVudC0+ZXhpc3RpbmdBWE9iamVjdENhY2hlKCkpCisgICAgICAgIGNhY2hlLT5wb3N0
VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKG1fc2VsZWN0aW9uLnN0YXJ0KCksIGludGVudCwg
bV9zZWxlY3Rpb24pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwCmluZGV4IDBlMzQ4
NmQ0ZjcxMC4uMTdjMWYzZTA1Yzk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmNwcApAQCAtNjAzLDcgKzYwMyw3IEBAIHZvaWQgSFRN
TFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnNldElubmVyVGV4dFZhbHVlKGNvbnN0IFN0cmluZyYg
dmFsdWUpCiAgICAgICAgICAgICAgICAgaW5uZXJUZXh0LT5hcHBlbmRDaGlsZChIVE1MQlJFbGVt
ZW50OjpjcmVhdGUoZG9jdW1lbnQoKSkpOwogICAgICAgICB9CiAKLSNpZiBFTkFCTEUoQUNDRVNT
SUJJTElUWSkgJiYgUExBVEZPUk0oQ09DT0EpCisjaWYgRU5BQkxFKEFDQ0VTU0lCSUxJVFkpICYm
IChQTEFURk9STShDT0NPQSkgfHwgVVNFKEFUU1BJKSkKICAgICAgICAgaWYgKHRleHRJc0NoYW5n
ZWQgJiYgcmVuZGVyZXIoKSkgewogICAgICAgICAgICAgaWYgKEFYT2JqZWN0Q2FjaGUqIGNhY2hl
ID0gZG9jdW1lbnQoKS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSkKICAgICAgICAgICAgICAgICBj
YWNoZS0+ZGVmZXJUZXh0UmVwbGFjZW1lbnROb3RpZmljYXRpb25Gb3JUZXh0Q29udHJvbCgqdGhp
cywgcHJldmlvdXNWYWx1ZSk7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9D
aGFuZ2VMb2cKaW5kZXggNjZhYjNmZTgzYTlmLi44MzkxNTNmNmIyYjkgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNiBAQAorMjAy
MS0xMC0yMCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAg
ICAgICAgW0dUS11bYTExeV0gQWRkIGltcGxlbWVudGF0aW9uIG9mIHRleHQgaW50ZXJmYWNlIHdo
ZW4gYnVpbGRpbmcgd2l0aCBBVFNQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjMwMjU4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQWRkIHVuaXQgdGVzdHMgZm9yIHRoZSB0ZXh0IGludGVyZmFjZS4KKwor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL1Rlc3RXZWJLaXRBY2Nlc3Np
YmlsaXR5LmNwcDoKKyAgICAgICAgKEF0c3BpVGV4dFJhbmdlRGVsZXRlcjo6b3BlcmF0b3IoKSBj
b25zdCk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VGVzdDo6c3RhcnRFdmVudE1vbml0b3IpOgor
ICAgICAgICAoQWNjZXNzaWJpbGl0eVRlc3Q6OnN0b3BFdmVudE1vbml0b3IpOgorICAgICAgICAo
QWNjZXNzaWJpbGl0eVRlc3Q6OmZpbmRFdmVudCk6CisgICAgICAgICh0ZXN0VGV4dEJhc2ljKToK
KyAgICAgICAgKHRlc3RUZXh0U3Vycm9nYXRlUGFpcik6CisgICAgICAgICh0ZXN0VGV4dEl0ZXJh
dG9yKToKKyAgICAgICAgKHRlc3RUZXh0RXh0ZW50cyk6CisgICAgICAgICh0ZXN0VGV4dFNlbGVj
dGlvbnMpOgorICAgICAgICAodGVzdFRleHRBdHRyaWJ1dGVzKToKKyAgICAgICAgKHRlc3RUZXh0
U3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKGJlZm9yZUFsbCk6CisKIDIwMjEtMTAtMjAgIEtpbW1v
IEtpbm51bmVuICA8a2tpbm51bmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBJdCBzaG91bGQgYmUg
cG9zc2libGUgdG8gZm9ybWF0IEMrKyBjb2RlIHRvIHByb2plY3Qgc3R5bGUgd2l0aCBXZWJLaXQg
dG9vbHMKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL1Rl
c3RXZWJLaXRBY2Nlc3NpYmlsaXR5LmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0R3RrL1Rlc3RXZWJLaXRBY2Nlc3NpYmlsaXR5LmNwcAppbmRleCBmOGUzNWRlYWM4ZGQuLmM4
YzRjZDhhYmEyZiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRH
dGsvVGVzdFdlYktpdEFjY2Vzc2liaWxpdHkuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0R3RrL1Rlc3RXZWJLaXRBY2Nlc3NpYmlsaXR5LmNwcApAQCAtMzQsNyArMzQs
MTUgQEAgc3RydWN0IEF0c3BpRXZlbnREZWxldGVyIHsKICAgICB9CiB9OwogCitzdHJ1Y3QgQXRz
cGlUZXh0UmFuZ2VEZWxldGVyIHsKKyAgICB2b2lkIG9wZXJhdG9yKCkoQXRzcGlUZXh0UmFuZ2Uq
IHJhbmdlKSBjb25zdAorICAgIHsKKyAgICAgICAgZ19ib3hlZF9mcmVlKEFUU1BJX1RZUEVfVEVY
VF9SQU5HRSwgcmFuZ2UpOworICAgIH0KK307CisKIHVzaW5nIFVuaXF1ZUF0c3BpRXZlbnQgPSBz
dGQ6OnVuaXF1ZV9wdHI8QXRzcGlFdmVudCwgQXRzcGlFdmVudERlbGV0ZXI+OwordXNpbmcgVW5p
cXVlQXRzcGlUZXh0UmFuZ2UgPSBzdGQ6OnVuaXF1ZV9wdHI8QXRzcGlUZXh0UmFuZ2UsIEF0c3Bp
VGV4dFJhbmdlRGVsZXRlcj47CiAKIGNsYXNzIEFjY2Vzc2liaWxpdHlUZXN0IDogcHVibGljIFdl
YlZpZXdUZXN0IHsKIHB1YmxpYzoKQEAgLTk4LDE3ICsxMDYsMTggQEAgcHVibGljOgogICAgICAg
ICBtX2V2ZW50U291cmNlID0gbnVsbHB0cjsKICAgICB9CiAKLSAgICB2b2lkIHN0YXJ0RXZlbnRN
b25pdG9yKEF0c3BpQWNjZXNzaWJsZSogc291cmNlLCBjb25zdCBWZWN0b3I8Y29uc3QgY2hhcio+
JiBldmVudHMpCisgICAgdm9pZCBzdGFydEV2ZW50TW9uaXRvcihBdHNwaUFjY2Vzc2libGUqIHNv
dXJjZSwgVmVjdG9yPENTdHJpbmc+JiYgZXZlbnRzKQogICAgIHsKICAgICAgICAgbV9ldmVudE1v
bml0b3Iuc291cmNlID0gc291cmNlOworICAgICAgICBtX2V2ZW50TW9uaXRvci5ldmVudFR5cGVz
ID0gV1RGTW92ZShldmVudHMpOwogICAgICAgICBtX2V2ZW50TW9uaXRvci5saXN0ZW5lciA9IGFk
b3B0R1JlZihhdHNwaV9ldmVudF9saXN0ZW5lcl9uZXcoW10oQXRzcGlFdmVudCogZXZlbnQsIGdw
b2ludGVyIHVzZXJEYXRhKSB7CiAgICAgICAgICAgICBhdXRvKiB0ZXN0ID0gc3RhdGljX2Nhc3Q8
QWNjZXNzaWJpbGl0eVRlc3QqPih1c2VyRGF0YSk7CiAgICAgICAgICAgICBpZiAoZXZlbnQtPnNv
dXJjZSA9PSB0ZXN0LT5tX2V2ZW50TW9uaXRvci5zb3VyY2UpCiAgICAgICAgICAgICAgICAgdGVz
dC0+bV9ldmVudE1vbml0b3IuZXZlbnRzLmFwcGVuZChzdGF0aWNfY2FzdDxBdHNwaUV2ZW50Kj4o
Z19ib3hlZF9jb3B5KEFUU1BJX1RZUEVfRVZFTlQsIGV2ZW50KSkpOwogICAgICAgICB9LCB0aGlz
LCBudWxscHRyKSk7CiAKLSAgICAgICAgZm9yIChjb25zdCBhdXRvKiBldmVudCA6IGV2ZW50cykK
LSAgICAgICAgICAgIGF0c3BpX2V2ZW50X2xpc3RlbmVyX3JlZ2lzdGVyKG1fZXZlbnRNb25pdG9y
Lmxpc3RlbmVyLmdldCgpLCBldmVudCwgbnVsbHB0cik7CisgICAgICAgIGZvciAoY29uc3QgYXV0
byYgZXZlbnQgOiBtX2V2ZW50TW9uaXRvci5ldmVudFR5cGVzKQorICAgICAgICAgICAgYXRzcGlf
ZXZlbnRfbGlzdGVuZXJfcmVnaXN0ZXIobV9ldmVudE1vbml0b3IubGlzdGVuZXIuZ2V0KCksIGV2
ZW50LmRhdGEoKSwgbnVsbHB0cik7CiAgICAgfQogCiAgICAgVmVjdG9yPFVuaXF1ZUF0c3BpRXZl
bnQ+IHN0b3BFdmVudE1vbml0b3IodW5zaWduZWQgZXhwZWN0ZWRFdmVudHMsIHN0ZDo6b3B0aW9u
YWw8U2Vjb25kcz4gdGltZW91dCA9IHN0ZDo6bnVsbG9wdCkKQEAgLTExOSwxMCArMTI4LDIyIEBA
IHB1YmxpYzoKICAgICAgICAgICAgIGdfbWFpbl9jb250ZXh0X2l0ZXJhdGlvbihudWxscHRyLCB0
aW1lb3V0ID8gRkFMU0UgOiBUUlVFKTsKIAogICAgICAgICBhdXRvIGV2ZW50cyA9IFdURk1vdmUo
bV9ldmVudE1vbml0b3IuZXZlbnRzKTsKLSAgICAgICAgbV9ldmVudE1vbml0b3IgPSB7IG51bGxw
dHIsIHsgfSwgbnVsbHB0ciB9OworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGV2ZW50IDogbV9l
dmVudE1vbml0b3IuZXZlbnRUeXBlcykKKyAgICAgICAgICAgIGF0c3BpX2V2ZW50X2xpc3RlbmVy
X2RlcmVnaXN0ZXIobV9ldmVudE1vbml0b3IubGlzdGVuZXIuZ2V0KCksIGV2ZW50LmRhdGEoKSwg
bnVsbHB0cik7CisgICAgICAgIG1fZXZlbnRNb25pdG9yID0geyBudWxscHRyLCB7IH0sIHsgfSwg
bnVsbHB0ciB9OwogICAgICAgICByZXR1cm4gZXZlbnRzOwogICAgIH0KIAorICAgIHN0YXRpYyBB
dHNwaUV2ZW50KiBmaW5kRXZlbnQoY29uc3QgVmVjdG9yPFVuaXF1ZUF0c3BpRXZlbnQ+JiBldmVu
dHMsIGNvbnN0IGNoYXIqIGV2ZW50VHlwZSkKKyAgICB7CisgICAgICAgIGZvciAoY29uc3QgYXV0
byYgZXZlbnQgOiBldmVudHMpIHsKKyAgICAgICAgICAgIGlmICghZ19zdHJjbXAwKGV2ZW50LT50
eXBlLCBldmVudFR5cGUpKQorICAgICAgICAgICAgICAgIHJldHVybiBldmVudC5nZXQoKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKwogICAgIHN0YXRpYyB1
bnNpZ25lZCBzdGF0ZVNldFNpemUoQXRzcGlTdGF0ZVNldCogc3RhdGVTZXQpCiAgICAgewogICAg
ICAgICBHQXJyYXkqIHN0YXRlcyA9IGF0c3BpX3N0YXRlX3NldF9nZXRfc3RhdGVzKHN0YXRlU2V0
KTsKQEAgLTEzNiw2ICsxNTcsNyBAQCBwcml2YXRlOgogCiAgICAgc3RydWN0IHsKICAgICAgICAg
R1JlZlB0cjxBdHNwaUV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyOworICAgICAgICBWZWN0b3I8Q1N0
cmluZz4gZXZlbnRUeXBlczsKICAgICAgICAgVmVjdG9yPFVuaXF1ZUF0c3BpRXZlbnQ+IGV2ZW50
czsKICAgICAgICAgQXRzcGlBY2Nlc3NpYmxlKiBzb3VyY2UgeyBudWxscHRyIH07CiAgICAgfSBt
X2V2ZW50TW9uaXRvcjsKQEAgLTgwMyw2ICs4MjUsNjY2IEBAIHN0YXRpYyB2b2lkIHRlc3RDb21w
b25lbnRTY3JvbGxUbyhBY2Nlc3NpYmlsaXR5VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKICAg
ICBnX2Fzc2VydF9jbXBpbnQodG9wUG9zaXRpb25CZWZvcmVTY3JvbGxpbmctPnksID09LCB0b3BQ
b3NpdGlvbkFmdGVyU2Nyb2xsaW5nLT55KTsKIH0KIAorc3RhdGljIHZvaWQgdGVzdFRleHRCYXNp
YyhBY2Nlc3NpYmlsaXR5VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5z
aG93SW5XaW5kb3coKTsKKyAgICB0ZXN0LT5sb2FkSHRtbCgKKyAgICAgICAgIjxodG1sPiIKKyAg
ICAgICAgIiAgPGJvZHk+IgorICAgICAgICAiICAgIDxwPlRoaXMgaXMgYSBsaW5lIG9mIHRleHQ8
L3A+IgorICAgICAgICAiICA8L2JvZHk+IgorICAgICAgICAiPC9odG1sPiIsCisgICAgICAgIG51
bGxwdHIpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgYXV0byB0
ZXN0QXBwID0gdGVzdC0+ZmluZFRlc3RBcHBsaWNhdGlvbigpOworICAgIGdfYXNzZXJ0X3RydWUo
QVRTUElfSVNfQUNDRVNTSUJMRSh0ZXN0QXBwLmdldCgpKSk7CisKKyAgICBhdXRvIGRvY3VtZW50
V2ViID0gdGVzdC0+ZmluZERvY3VtZW50V2ViKHRlc3RBcHAuZ2V0KCkpOworICAgIGdfYXNzZXJ0
X3RydWUoQVRTUElfSVNfQUNDRVNTSUJMRShkb2N1bWVudFdlYi5nZXQoKSkpOworICAgIGdfYXNz
ZXJ0X2NtcGludChhdHNwaV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9jb3VudChkb2N1bWVudFdlYi5n
ZXQoKSwgbnVsbHB0ciksID09LCAxKTsKKworICAgIGF1dG8gcCA9IGFkb3B0R1JlZihhdHNwaV9h
Y2Nlc3NpYmxlX2dldF9jaGlsZF9hdF9pbmRleChkb2N1bWVudFdlYi5nZXQoKSwgMCwgbnVsbHB0
cikpOworICAgIGdfYXNzZXJ0X3RydWUoQVRTUElfSVNfVEVYVChwLmdldCgpKSk7CisgICAgYXV0
byBsZW5ndGggPSBhdHNwaV90ZXh0X2dldF9jaGFyYWN0ZXJfY291bnQoQVRTUElfVEVYVChwLmdl
dCgpKSwgbnVsbHB0cik7CisgICAgZ19hc3NlcnRfY21waW50KGxlbmd0aCwgPT0sIDIyKTsKKyAg
ICBHVW5pcXVlUHRyPGNoYXI+IHRleHQoYXRzcGlfdGV4dF9nZXRfdGV4dChBVFNQSV9URVhUKHAu
Z2V0KCkpLCAwLCBsZW5ndGgsIG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodGV4dC5n
ZXQoKSwgPT0sICJUaGlzIGlzIGEgbGluZSBvZiB0ZXh0Iik7CisgICAgdGV4dC5yZXNldChhdHNw
aV90ZXh0X2dldF90ZXh0KEFUU1BJX1RFWFQocC5nZXQoKSksIDAsIC0xLCBudWxscHRyKSk7Cisg
ICAgZ19hc3NlcnRfY21wc3RyKHRleHQuZ2V0KCksID09LCAiVGhpcyBpcyBhIGxpbmUgb2YgdGV4
dCIpOworICAgIHRleHQucmVzZXQoYXRzcGlfdGV4dF9nZXRfdGV4dChBVFNQSV9URVhUKHAuZ2V0
KCkpLCA1LCA3LCBudWxscHRyKSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHRleHQuZ2V0KCksID09
LCAiaXMiKTsKKyAgICB0ZXh0LnJlc2V0KGF0c3BpX3RleHRfZ2V0X3RleHQoQVRTUElfVEVYVChw
LmdldCgpKSwgLTUsIDIzLCBudWxscHRyKSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHRleHQuZ2V0
KCksID09LCAiVGhpcyBpcyBhIGxpbmUgb2YgdGV4dCIpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0
VGV4dFN1cnJvZ2F0ZVBhaXIoQWNjZXNzaWJpbGl0eVRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIp
Cit7CisjaWYgVVNFKEFUSykKKyAgICBnX3Rlc3Rfc2tpcCgiU3Vycm9nYXRlIHBhaXJzIGFyZSBu
b3QgY29ycmVjdGx5IGhhbmRsZWQgYnkgV2ViS2l0IHdoZW4gdXNpbmcgQVRLIik7CisgICAgcmV0
dXJuOworI2VuZGlmCisKKyAgICB0ZXN0LT5zaG93SW5XaW5kb3coKTsKKyAgICB0ZXN0LT5sb2Fk
SHRtbCgKKyAgICAgICAgIjxodG1sPiIKKyAgICAgICAgIiAgPGJvZHk+IgorICAgICAgICAiICAg
IDxwPlRoaXMgY29udGFpbnMgYSAmI3gxRDMwNjsgc3ltYm9sPC9wPiIKKyAgICAgICAgIiAgICA8
aW5wdXQgdmFsdWU9J1RoaXMgY29udGFpbnMgYSAmI3gxRDMwNjsgc3ltYm9sJy8+IgorICAgICAg
ICAiICA8L2JvZHk+IgorICAgICAgICAiPC9odG1sPiIsCisgICAgICAgIG51bGxwdHIpOworICAg
IHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgYXV0byB0ZXN0QXBwID0gdGVz
dC0+ZmluZFRlc3RBcHBsaWNhdGlvbigpOworICAgIGdfYXNzZXJ0X3RydWUoQVRTUElfSVNfQUND
RVNTSUJMRSh0ZXN0QXBwLmdldCgpKSk7CisKKyAgICBhdXRvIGRvY3VtZW50V2ViID0gdGVzdC0+
ZmluZERvY3VtZW50V2ViKHRlc3RBcHAuZ2V0KCkpOworICAgIGdfYXNzZXJ0X3RydWUoQVRTUElf
SVNfQUNDRVNTSUJMRShkb2N1bWVudFdlYi5nZXQoKSkpOworICAgIGdfYXNzZXJ0X2NtcGludChh
dHNwaV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9jb3VudChkb2N1bWVudFdlYi5nZXQoKSwgbnVsbHB0
ciksID09LCAyKTsKKworICAgIGF1dG8gcCA9IGFkb3B0R1JlZihhdHNwaV9hY2Nlc3NpYmxlX2dl
dF9jaGlsZF9hdF9pbmRleChkb2N1bWVudFdlYi5nZXQoKSwgMCwgbnVsbHB0cikpOworICAgIGdf
YXNzZXJ0X3RydWUoQVRTUElfSVNfVEVYVChwLmdldCgpKSk7CisgICAgYXV0byBsZW5ndGggPSBh
dHNwaV90ZXh0X2dldF9jaGFyYWN0ZXJfY291bnQoQVRTUElfVEVYVChwLmdldCgpKSwgbnVsbHB0
cik7CisgICAgZ19hc3NlcnRfY21waW50KGxlbmd0aCwgPT0sIDI0KTsKKyAgICBHVW5pcXVlUHRy
PGNoYXI+IHRleHQoYXRzcGlfdGV4dF9nZXRfdGV4dChBVFNQSV9URVhUKHAuZ2V0KCkpLCAwLCBs
ZW5ndGgsIG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodGV4dC5nZXQoKSwgPT0sICJU
aGlzIGNvbnRhaW5zIGEg8J2MhiBzeW1ib2wiKTsKKyAgICB0ZXh0LnJlc2V0KGF0c3BpX3RleHRf
Z2V0X3RleHQoQVRTUElfVEVYVChwLmdldCgpKSwgMTYsIDE3LCBudWxscHRyKSk7CisgICAgZ19h
c3NlcnRfY21wc3RyKHRleHQuZ2V0KCksID09LCAi8J2MhiIpOworCisgICAgYXV0byBzZWN0aW9u
ID0gYWRvcHRHUmVmKGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0X2luZGV4KGRvY3VtZW50
V2ViLmdldCgpLCAxLCBudWxscHRyKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShBVFNQSV9JU19BQ0NF
U1NJQkxFKHNlY3Rpb24uZ2V0KCkpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRzcGlfYWNjZXNz
aWJsZV9nZXRfY2hpbGRfY291bnQoc2VjdGlvbi5nZXQoKSwgbnVsbHB0ciksID09LCAxKTsKKyAg
ICBhdXRvIGlucHV0ID0gYWRvcHRHUmVmKGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0X2lu
ZGV4KHNlY3Rpb24uZ2V0KCksIDAsIG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF90cnVlKEFUU1BJ
X0lTX1RFWFQoaW5wdXQuZ2V0KCkpKTsKKyAgICBsZW5ndGggPSBhdHNwaV90ZXh0X2dldF9jaGFy
YWN0ZXJfY291bnQoQVRTUElfVEVYVChpbnB1dC5nZXQoKSksIG51bGxwdHIpOworICAgIGdfYXNz
ZXJ0X2NtcGludChsZW5ndGgsID09LCAyNCk7CisgICAgdGV4dC5yZXNldChhdHNwaV90ZXh0X2dl
dF90ZXh0KEFUU1BJX1RFWFQoaW5wdXQuZ2V0KCkpLCAwLCBsZW5ndGgsIG51bGxwdHIpKTsKKyAg
ICBnX2Fzc2VydF9jbXBzdHIodGV4dC5nZXQoKSwgPT0sICJUaGlzIGNvbnRhaW5zIGEg8J2MhiBz
eW1ib2wiKTsKKyAgICB0ZXh0LnJlc2V0KGF0c3BpX3RleHRfZ2V0X3RleHQoQVRTUElfVEVYVChp
bnB1dC5nZXQoKSksIDE2LCAxNywgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0
LmdldCgpLCA9PSwgIvCdjIYiKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFRleHRJdGVyYXRvcihB
Y2Nlc3NpYmlsaXR5VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5zaG93
SW5XaW5kb3coODAwLCA2MDApOworICAgIHRlc3QtPmxvYWRIdG1sKAorICAgICAgICAiPGh0bWw+
IgorICAgICAgICAiICA8Ym9keT4iCisgICAgICAgICIgICAgPHA+VGV4dCBvZiBmaXJzdCBzZW50
ZW5jZS4gICBUaGlzIGlzIHRoZSBzZWNvbmQgc2VudGVuY2UuPGJyPkFuZCB0aGlzIGlzIHRoZSBu
ZXh0IHBhcmFncmFwaC48L3A+IgorICAgICAgICAiICA8L2JvZHk+IgorICAgICAgICAiPC9odG1s
PiIsCisgICAgICAgIG51bGxwdHIpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgp
OworCisgICAgYXV0byB0ZXN0QXBwID0gdGVzdC0+ZmluZFRlc3RBcHBsaWNhdGlvbigpOworICAg
IGdfYXNzZXJ0X3RydWUoQVRTUElfSVNfQUNDRVNTSUJMRSh0ZXN0QXBwLmdldCgpKSk7CisKKyAg
ICBhdXRvIGRvY3VtZW50V2ViID0gdGVzdC0+ZmluZERvY3VtZW50V2ViKHRlc3RBcHAuZ2V0KCkp
OworICAgIGdfYXNzZXJ0X3RydWUoQVRTUElfSVNfQUNDRVNTSUJMRShkb2N1bWVudFdlYi5nZXQo
KSkpOworICAgIGdfYXNzZXJ0X2NtcGludChhdHNwaV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9jb3Vu
dChkb2N1bWVudFdlYi5nZXQoKSwgbnVsbHB0ciksID09LCAxKTsKKworICAgIGF1dG8gcCA9IGFk
b3B0R1JlZihhdHNwaV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9hdF9pbmRleChkb2N1bWVudFdlYi5n
ZXQoKSwgMCwgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0X3RydWUoQVRTUElfSVNfVEVYVChwLmdl
dCgpKSk7CisgICAgYXV0byBsZW5ndGggPSBhdHNwaV90ZXh0X2dldF9jaGFyYWN0ZXJfY291bnQo
QVRTUElfVEVYVChwLmdldCgpKSwgbnVsbHB0cik7CisgICAgZ19hc3NlcnRfY21waW50KGxlbmd0
aCwgPT0sIDg0KTsKKyAgICBHVW5pcXVlUHRyPGNoYXI+IHRleHQoYXRzcGlfdGV4dF9nZXRfdGV4
dChBVFNQSV9URVhUKHAuZ2V0KCkpLCAwLCBsZW5ndGgsIG51bGxwdHIpKTsKKyAgICBnX2Fzc2Vy
dF9jbXBzdHIodGV4dC5nZXQoKSwgPT0sICJUZXh0IG9mIGZpcnN0IHNlbnRlbmNlLiBUaGlzIGlz
IHRoZSBzZWNvbmQgc2VudGVuY2UuXG5BbmQgdGhpcyBpcyB0aGUgbmV4dCBwYXJhZ3JhcGguIik7
CisKKyAgICAvLyBDaGFyYWN0ZXIgZ3JhbnVsYXJpdHkuCisgICAgVW5pcXVlQXRzcGlUZXh0UmFu
Z2UgcmFuZ2UoYXRzcGlfdGV4dF9nZXRfc3RyaW5nX2F0X29mZnNldChBVFNQSV9URVhUKHAuZ2V0
KCkpLCAwLCBBVFNQSV9URVhUX0dSQU5VTEFSSVRZX0NIQVIsIG51bGxwdHIpKTsKKyAgICBnX2Fz
c2VydF9jbXBzdHIocmFuZ2UtPmNvbnRlbnQsID09LCAiVCIpOworICAgIGdfYXNzZXJ0X2NtcGlu
dChyYW5nZS0+c3RhcnRfb2Zmc2V0LCA9PSwgMCk7CisgICAgZ19hc3NlcnRfY21waW50KHJhbmdl
LT5lbmRfb2Zmc2V0LCA9PSwgMSk7CisgICAgcmFuZ2UucmVzZXQoYXRzcGlfdGV4dF9nZXRfc3Ry
aW5nX2F0X29mZnNldChBVFNQSV9URVhUKHAuZ2V0KCkpLCA4MywgQVRTUElfVEVYVF9HUkFOVUxB
UklUWV9DSEFSLCBudWxscHRyKSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHJhbmdlLT5jb250ZW50
LCA9PSwgIi4iKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQocmFuZ2UtPnN0YXJ0X29mZnNldCwgPT0s
IDgzKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQocmFuZ2UtPmVuZF9vZmZzZXQsID09LCA4NCk7Cisg
ICAgcmFuZ2UucmVzZXQoYXRzcGlfdGV4dF9nZXRfc3RyaW5nX2F0X29mZnNldChBVFNQSV9URVhU
KHAuZ2V0KCkpLCA4NCwgQVRTUElfVEVYVF9HUkFOVUxBUklUWV9DSEFSLCBudWxscHRyKSk7Cisg
ICAgZ19hc3NlcnRfY21wc3RyKHJhbmdlLT5jb250ZW50LCA9PSwgIiIpOworICAgIGdfYXNzZXJ0
X2NtcGludChyYW5nZS0+c3RhcnRfb2Zmc2V0LCA9PSwgODQpOworICAgIGdfYXNzZXJ0X2NtcGlu
dChyYW5nZS0+ZW5kX29mZnNldCwgPT0sIDg0KTsKKyAgICByYW5nZS5yZXNldChhdHNwaV90ZXh0
X2dldF9zdHJpbmdfYXRfb2Zmc2V0KEFUU1BJX1RFWFQocC5nZXQoKSksIDg1LCBBVFNQSV9URVhU
X0dSQU5VTEFSSVRZX0NIQVIsIG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIocmFuZ2Ut
PmNvbnRlbnQsID09LCAiIik7CisgICAgZ19hc3NlcnRfY21waW50KHJhbmdlLT5zdGFydF9vZmZz
ZXQsID09LCAwKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQocmFuZ2UtPmVuZF9vZmZzZXQsID09LCAw
KTsKKyAgICByYW5nZS5yZXNldChhdHNwaV90ZXh0X2dldF9zdHJpbmdfYXRfb2Zmc2V0KEFUU1BJ
X1RFWFQocC5nZXQoKSksIC0xLCBBVFNQSV9URVhUX0dSQU5VTEFSSVRZX0NIQVIsIG51bGxwdHIp
KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIocmFuZ2UtPmNvbnRlbnQsID09LCAiIik7CisgICAgZ19h
c3NlcnRfY21waW50KHJhbmdlLT5zdGFydF9vZmZzZXQsID09LCAwKTsKKyAgICBnX2Fzc2VydF9j
bXBpbnQocmFuZ2UtPmVuZF9vZmZzZXQsID09LCAwKTsKKworICAgIC8vIFdvcmQgZ3JhbnVsYXJp
dHkuCisgICAgcmFuZ2UucmVzZXQoYXRzcGlfdGV4dF9nZXRfc3RyaW5nX2F0X29mZnNldChBVFNQ
SV9URVhUKHAuZ2V0KCkpLCAwLCBBVFNQSV9URVhUX0dSQU5VTEFSSVRZX1dPUkQsIG51bGxwdHIp
KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIocmFuZ2UtPmNvbnRlbnQsID09LCAiVGV4dCAiKTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQocmFuZ2UtPnN0YXJ0X29mZnNldCwgPT0sIDApOworICAgIGdfYXNz
ZXJ0X2NtcGludChyYW5nZS0+ZW5kX29mZnNldCwgPT0sIDUpOworICAgIHJhbmdlLnJlc2V0KGF0
c3BpX3RleHRfZ2V0X3N0cmluZ19hdF9vZmZzZXQoQVRTUElfVEVYVChwLmdldCgpKSwgNCwgQVRT
UElfVEVYVF9HUkFOVUxBUklUWV9XT1JELCBudWxscHRyKSk7CisgICAgZ19hc3NlcnRfY21wc3Ry
KHJhbmdlLT5jb250ZW50LCA9PSwgIlRleHQgIik7CisgICAgZ19hc3NlcnRfY21waW50KHJhbmdl
LT5zdGFydF9vZmZzZXQsID09LCAwKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQocmFuZ2UtPmVuZF9v
ZmZzZXQsID09LCA1KTsKKyAgICByYW5nZS5yZXNldChhdHNwaV90ZXh0X2dldF9zdHJpbmdfYXRf
b2Zmc2V0KEFUU1BJX1RFWFQocC5nZXQoKSksIDUsIEFUU1BJX1RFWFRfR1JBTlVMQVJJVFlfV09S
RCwgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0X2NtcHN0cihyYW5nZS0+Y29udGVudCwgPT0sICJv
ZiAiKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQocmFuZ2UtPnN0YXJ0X29mZnNldCwgPT0sIDUpOwor
ICAgIGdfYXNzZXJ0X2NtcGludChyYW5nZS0+ZW5kX29mZnNldCwgPT0sIDgpOworICAgIHJhbmdl
LnJlc2V0KGF0c3BpX3RleHRfZ2V0X3N0cmluZ19hdF9vZmZzZXQoQVRTUElfVEVYVChwLmdldCgp
KSwgNDAsIEFUU1BJX1RFWFRfR1JBTlVMQVJJVFlfV09SRCwgbnVsbHB0cikpOworICAgIGdfYXNz
ZXJ0X2NtcHN0cihyYW5nZS0+Y29udGVudCwgPT0sICJzZWNvbmQgIik7CisgICAgZ19hc3NlcnRf
Y21waW50KHJhbmdlLT5zdGFydF9vZmZzZXQsID09LCAzNik7CisgICAgZ19hc3NlcnRfY21waW50
KHJhbmdlLT5lbmRfb2Zmc2V0LCA9PSwgNDMpOworICAgIHJhbmdlLnJlc2V0KGF0c3BpX3RleHRf
Z2V0X3N0cmluZ19hdF9vZmZzZXQoQVRTUElfVEVYVChwLmdldCgpKSwgMTYsIEFUU1BJX1RFWFRf
R1JBTlVMQVJJVFlfV09SRCwgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0X2NtcHN0cihyYW5nZS0+
Y29udGVudCwgPT0sICJzZW50ZW5jZS4gIik7CisgICAgZ19hc3NlcnRfY21waW50KHJhbmdlLT5z
dGFydF9vZmZzZXQsID09LCAxNCk7CisgICAgZ19hc3NlcnRfY21waW50KHJhbmdlLT5lbmRfb2Zm
c2V0LCA9PSwgMjQpOworICAgIHJhbmdlLnJlc2V0KGF0c3BpX3RleHRfZ2V0X3N0cmluZ19hdF9v
ZmZzZXQoQVRTUElfVEVYVChwLmdldCgpKSwgNzQsIEFUU1BJX1RFWFRfR1JBTlVMQVJJVFlfV09S
RCwgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0X2NtcHN0cihyYW5nZS0+Y29udGVudCwgPT0sICJw
YXJhZ3JhcGguIik7CisgICAgZ19hc3NlcnRfY21waW50KHJhbmdlLT5zdGFydF9vZmZzZXQsID09
LCA3NCk7CisgICAgZ19hc3NlcnRfY21waW50KHJhbmdlLT5lbmRfb2Zmc2V0LCA9PSwgODQpOwor
ICAgIHJhbmdlLnJlc2V0KGF0c3BpX3RleHRfZ2V0X3N0cmluZ19hdF9vZmZzZXQoQVRTUElfVEVY
VChwLmdldCgpKSwgODMsIEFUU1BJX1RFWFRfR1JBTlVMQVJJVFlfV09SRCwgbnVsbHB0cikpOwor
ICAgIGdfYXNzZXJ0X2NtcHN0cihyYW5nZS0+Y29udGVudCwgPT0sICJwYXJhZ3JhcGguIik7Cisg
ICAgZ19hc3NlcnRfY21waW50KHJhbmdlLT5zdGFydF9vZmZzZXQsID09LCA3NCk7CisgICAgZ19h
c3NlcnRfY21waW50KHJhbmdlLT5lbmRfb2Zmc2V0LCA9PSwgODQpOworICAgIHJhbmdlLnJlc2V0
KGF0c3BpX3RleHRfZ2V0X3N0cmluZ19hdF9vZmZzZXQoQVRTUElfVEVYVChwLmdldCgpKSwgODAs
IEFUU1BJX1RFWFRfR1JBTlVMQVJJVFlfV09SRCwgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0X2Nt
cHN0cihyYW5nZS0+Y29udGVudCwgPT0sICJwYXJhZ3JhcGguIik7CisgICAgZ19hc3NlcnRfY21w
aW50KHJhbmdlLT5zdGFydF9vZmZzZXQsID09LCA3NCk7CisgICAgZ19hc3NlcnRfY21waW50KHJh
bmdlLT5lbmRfb2Zmc2V0LCA9PSwgODQpOworCisgICAgLy8gU2VudGVuY2UgZ3JhbnVsYXJpdHku
CisgICAgcmFuZ2UucmVzZXQoYXRzcGlfdGV4dF9nZXRfc3RyaW5nX2F0X29mZnNldChBVFNQSV9U
RVhUKHAuZ2V0KCkpLCAwLCBBVFNQSV9URVhUX0dSQU5VTEFSSVRZX1NFTlRFTkNFLCBudWxscHRy
KSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHJhbmdlLT5jb250ZW50LCA9PSwgIlRleHQgb2YgZmly
c3Qgc2VudGVuY2UuICIpOworICAgIGdfYXNzZXJ0X2NtcGludChyYW5nZS0+c3RhcnRfb2Zmc2V0
LCA9PSwgMCk7CisgICAgZ19hc3NlcnRfY21waW50KHJhbmdlLT5lbmRfb2Zmc2V0LCA9PSwgMjQp
OworICAgIHJhbmdlLnJlc2V0KGF0c3BpX3RleHRfZ2V0X3N0cmluZ19hdF9vZmZzZXQoQVRTUElf
VEVYVChwLmdldCgpKSwgMjMsIEFUU1BJX1RFWFRfR1JBTlVMQVJJVFlfU0VOVEVOQ0UsIG51bGxw
dHIpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIocmFuZ2UtPmNvbnRlbnQsID09LCAiVGV4dCBvZiBm
aXJzdCBzZW50ZW5jZS4gIik7CisgICAgZ19hc3NlcnRfY21waW50KHJhbmdlLT5zdGFydF9vZmZz
ZXQsID09LCAwKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQocmFuZ2UtPmVuZF9vZmZzZXQsID09LCAy
NCk7CisgICAgcmFuZ2UucmVzZXQoYXRzcGlfdGV4dF9nZXRfc3RyaW5nX2F0X29mZnNldChBVFNQ
SV9URVhUKHAuZ2V0KCkpLCAyNCwgQVRTUElfVEVYVF9HUkFOVUxBUklUWV9TRU5URU5DRSwgbnVs
bHB0cikpOworICAgIGdfYXNzZXJ0X2NtcHN0cihyYW5nZS0+Y29udGVudCwgPT0sICJUaGlzIGlz
IHRoZSBzZWNvbmQgc2VudGVuY2UuXG4iKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQocmFuZ2UtPnN0
YXJ0X29mZnNldCwgPT0sIDI0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQocmFuZ2UtPmVuZF9vZmZz
ZXQsID09LCA1Myk7CisgICAgcmFuZ2UucmVzZXQoYXRzcGlfdGV4dF9nZXRfc3RyaW5nX2F0X29m
ZnNldChBVFNQSV9URVhUKHAuZ2V0KCkpLCA0MCwgQVRTUElfVEVYVF9HUkFOVUxBUklUWV9TRU5U
RU5DRSwgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0X2NtcHN0cihyYW5nZS0+Y29udGVudCwgPT0s
ICJUaGlzIGlzIHRoZSBzZWNvbmQgc2VudGVuY2UuXG4iKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQo
cmFuZ2UtPnN0YXJ0X29mZnNldCwgPT0sIDI0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQocmFuZ2Ut
PmVuZF9vZmZzZXQsID09LCA1Myk7CisgICAgcmFuZ2UucmVzZXQoYXRzcGlfdGV4dF9nZXRfc3Ry
aW5nX2F0X29mZnNldChBVFNQSV9URVhUKHAuZ2V0KCkpLCA1MywgQVRTUElfVEVYVF9HUkFOVUxB
UklUWV9TRU5URU5DRSwgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0X2NtcHN0cihyYW5nZS0+Y29u
dGVudCwgPT0sICJBbmQgdGhpcyBpcyB0aGUgbmV4dCBwYXJhZ3JhcGguIik7CisgICAgZ19hc3Nl
cnRfY21waW50KHJhbmdlLT5zdGFydF9vZmZzZXQsID09LCA1Myk7CisgICAgZ19hc3NlcnRfY21w
aW50KHJhbmdlLT5lbmRfb2Zmc2V0LCA9PSwgODQpOworICAgIHJhbmdlLnJlc2V0KGF0c3BpX3Rl
eHRfZ2V0X3N0cmluZ19hdF9vZmZzZXQoQVRTUElfVEVYVChwLmdldCgpKSwgODMsIEFUU1BJX1RF
WFRfR1JBTlVMQVJJVFlfU0VOVEVOQ0UsIG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIo
cmFuZ2UtPmNvbnRlbnQsID09LCAiQW5kIHRoaXMgaXMgdGhlIG5leHQgcGFyYWdyYXBoLiIpOwor
ICAgIGdfYXNzZXJ0X2NtcGludChyYW5nZS0+c3RhcnRfb2Zmc2V0LCA9PSwgNTMpOworICAgIGdf
YXNzZXJ0X2NtcGludChyYW5nZS0+ZW5kX29mZnNldCwgPT0sIDg0KTsKKworICAgIC8vIExpbmUg
Z3JhbnVsYXJpdHkuCisgICAgcmFuZ2UucmVzZXQoYXRzcGlfdGV4dF9nZXRfc3RyaW5nX2F0X29m
ZnNldChBVFNQSV9URVhUKHAuZ2V0KCkpLCAwLCBBVFNQSV9URVhUX0dSQU5VTEFSSVRZX0xJTkUs
IG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIocmFuZ2UtPmNvbnRlbnQsID09LCAiVGV4
dCBvZiBmaXJzdCBzZW50ZW5jZS4gVGhpcyBpcyB0aGUgc2Vjb25kIHNlbnRlbmNlLlxuIik7Cisg
ICAgZ19hc3NlcnRfY21waW50KHJhbmdlLT5zdGFydF9vZmZzZXQsID09LCAwKTsKKyAgICBnX2Fz
c2VydF9jbXBpbnQocmFuZ2UtPmVuZF9vZmZzZXQsID09LCA1Myk7CisgICAgcmFuZ2UucmVzZXQo
YXRzcGlfdGV4dF9nZXRfc3RyaW5nX2F0X29mZnNldChBVFNQSV9URVhUKHAuZ2V0KCkpLCA4Mywg
QVRTUElfVEVYVF9HUkFOVUxBUklUWV9MSU5FLCBudWxscHRyKSk7CisgICAgZ19hc3NlcnRfY21w
c3RyKHJhbmdlLT5jb250ZW50LCA9PSwgIkFuZCB0aGlzIGlzIHRoZSBuZXh0IHBhcmFncmFwaC4i
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQocmFuZ2UtPnN0YXJ0X29mZnNldCwgPT0sIDUzKTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQocmFuZ2UtPmVuZF9vZmZzZXQsID09LCA4NCk7CisKKyAgICAvLyBQ
YXJhZ3JhcGggZ3JhbnVsYXJpdHkuCisgICAgcmFuZ2UucmVzZXQoYXRzcGlfdGV4dF9nZXRfc3Ry
aW5nX2F0X29mZnNldChBVFNQSV9URVhUKHAuZ2V0KCkpLCAwLCBBVFNQSV9URVhUX0dSQU5VTEFS
SVRZX1BBUkFHUkFQSCwgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0X2NtcHN0cihyYW5nZS0+Y29u
dGVudCwgPT0sICJUZXh0IG9mIGZpcnN0IHNlbnRlbmNlLiBUaGlzIGlzIHRoZSBzZWNvbmQgc2Vu
dGVuY2UuIik7CisgICAgZ19hc3NlcnRfY21waW50KHJhbmdlLT5zdGFydF9vZmZzZXQsID09LCAw
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQocmFuZ2UtPmVuZF9vZmZzZXQsID09LCA1Mik7CisgICAg
cmFuZ2UucmVzZXQoYXRzcGlfdGV4dF9nZXRfc3RyaW5nX2F0X29mZnNldChBVFNQSV9URVhUKHAu
Z2V0KCkpLCA4MywgQVRTUElfVEVYVF9HUkFOVUxBUklUWV9QQVJBR1JBUEgsIG51bGxwdHIpKTsK
KyAgICBnX2Fzc2VydF9jbXBzdHIocmFuZ2UtPmNvbnRlbnQsID09LCAiQW5kIHRoaXMgaXMgdGhl
IG5leHQgcGFyYWdyYXBoLiIpOworICAgIGdfYXNzZXJ0X2NtcGludChyYW5nZS0+c3RhcnRfb2Zm
c2V0LCA9PSwgNTMpOworICAgIGdfYXNzZXJ0X2NtcGludChyYW5nZS0+ZW5kX29mZnNldCwgPT0s
IDg0KTsKKworICAgIC8vIFVzaW5nIGEgdGV4dCBjb250cm9sIG5vdy4KKyAgICB0ZXN0LT5sb2Fk
SHRtbCgKKyAgICAgICAgIjxodG1sPiIKKyAgICAgICAgIiAgPGJvZHk+IgorICAgICAgICAiICAg
IDxpbnB1dCB2YWx1ZT0nVGV4dCBvZiBpbnB1dCBmaWVsZCcvPiIKKyAgICAgICAgIiAgPC9ib2R5
PiIKKyAgICAgICAgIjwvaHRtbD4iLAorICAgICAgICBudWxscHRyKTsKKyAgICB0ZXN0LT53YWl0
VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIGRvY3VtZW50V2ViID0gdGVzdC0+ZmluZERvY3Vt
ZW50V2ViKHRlc3RBcHAuZ2V0KCkpOworICAgIGdfYXNzZXJ0X3RydWUoQVRTUElfSVNfQUNDRVNT
SUJMRShkb2N1bWVudFdlYi5nZXQoKSkpOworICAgIGdfYXNzZXJ0X2NtcGludChhdHNwaV9hY2Nl
c3NpYmxlX2dldF9jaGlsZF9jb3VudChkb2N1bWVudFdlYi5nZXQoKSwgbnVsbHB0ciksID09LCAx
KTsKKworICAgIGF1dG8gc2VjdGlvbiA9IGFkb3B0R1JlZihhdHNwaV9hY2Nlc3NpYmxlX2dldF9j
aGlsZF9hdF9pbmRleChkb2N1bWVudFdlYi5nZXQoKSwgMCwgbnVsbHB0cikpOworICAgIGdfYXNz
ZXJ0X3RydWUoQVRTUElfSVNfQUNDRVNTSUJMRShzZWN0aW9uLmdldCgpKSk7CisgICAgZ19hc3Nl
cnRfY21waW50KGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2NvdW50KHNlY3Rpb24uZ2V0KCks
IG51bGxwdHIpLCA9PSwgMSk7CisgICAgYXV0byBpbnB1dCA9IGFkb3B0R1JlZihhdHNwaV9hY2Nl
c3NpYmxlX2dldF9jaGlsZF9hdF9pbmRleChzZWN0aW9uLmdldCgpLCAwLCBudWxscHRyKSk7Cisg
ICAgZ19hc3NlcnRfdHJ1ZShBVFNQSV9JU19URVhUKGlucHV0LmdldCgpKSk7CisgICAgbGVuZ3Ro
ID0gYXRzcGlfdGV4dF9nZXRfY2hhcmFjdGVyX2NvdW50KEFUU1BJX1RFWFQoaW5wdXQuZ2V0KCkp
LCBudWxscHRyKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQobGVuZ3RoLCA9PSwgMTkpOworICAgIHRl
eHQucmVzZXQoYXRzcGlfdGV4dF9nZXRfdGV4dChBVFNQSV9URVhUKGlucHV0LmdldCgpKSwgMCwg
bGVuZ3RoLCBudWxscHRyKSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHRleHQuZ2V0KCksID09LCAi
VGV4dCBvZiBpbnB1dCBmaWVsZCIpOworCisgICAgcmFuZ2UucmVzZXQoYXRzcGlfdGV4dF9nZXRf
c3RyaW5nX2F0X29mZnNldChBVFNQSV9URVhUKGlucHV0LmdldCgpKSwgMCwgQVRTUElfVEVYVF9H
UkFOVUxBUklUWV9DSEFSLCBudWxscHRyKSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHJhbmdlLT5j
b250ZW50LCA9PSwgIlQiKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQocmFuZ2UtPnN0YXJ0X29mZnNl
dCwgPT0sIDApOworICAgIGdfYXNzZXJ0X2NtcGludChyYW5nZS0+ZW5kX29mZnNldCwgPT0sIDEp
OworICAgIHJhbmdlLnJlc2V0KGF0c3BpX3RleHRfZ2V0X3N0cmluZ19hdF9vZmZzZXQoQVRTUElf
VEVYVChpbnB1dC5nZXQoKSksIDE4LCBBVFNQSV9URVhUX0dSQU5VTEFSSVRZX0NIQVIsIG51bGxw
dHIpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIocmFuZ2UtPmNvbnRlbnQsID09LCAiZCIpOworICAg
IGdfYXNzZXJ0X2NtcGludChyYW5nZS0+c3RhcnRfb2Zmc2V0LCA9PSwgMTgpOworICAgIGdfYXNz
ZXJ0X2NtcGludChyYW5nZS0+ZW5kX29mZnNldCwgPT0sIDE5KTsKKworICAgIHJhbmdlLnJlc2V0
KGF0c3BpX3RleHRfZ2V0X3N0cmluZ19hdF9vZmZzZXQoQVRTUElfVEVYVChpbnB1dC5nZXQoKSks
IDAsIEFUU1BJX1RFWFRfR1JBTlVMQVJJVFlfV09SRCwgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0
X2NtcHN0cihyYW5nZS0+Y29udGVudCwgPT0sICJUZXh0ICIpOworICAgIGdfYXNzZXJ0X2NtcGlu
dChyYW5nZS0+c3RhcnRfb2Zmc2V0LCA9PSwgMCk7CisgICAgZ19hc3NlcnRfY21waW50KHJhbmdl
LT5lbmRfb2Zmc2V0LCA9PSwgNSk7CisgICAgcmFuZ2UucmVzZXQoYXRzcGlfdGV4dF9nZXRfc3Ry
aW5nX2F0X29mZnNldChBVFNQSV9URVhUKGlucHV0LmdldCgpKSwgMTYsIEFUU1BJX1RFWFRfR1JB
TlVMQVJJVFlfV09SRCwgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0X2NtcHN0cihyYW5nZS0+Y29u
dGVudCwgPT0sICJmaWVsZCIpOworICAgIGdfYXNzZXJ0X2NtcGludChyYW5nZS0+c3RhcnRfb2Zm
c2V0LCA9PSwgMTQpOworICAgIGdfYXNzZXJ0X2NtcGludChyYW5nZS0+ZW5kX29mZnNldCwgPT0s
IDE5KTsKK30KKworc3RhdGljIHZvaWQgdGVzdFRleHRFeHRlbnRzKEFjY2Vzc2liaWxpdHlUZXN0
KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPnNob3dJbldpbmRvdygpOworICAg
IHRlc3QtPmxvYWRIdG1sKAorICAgICAgICAiPGh0bWw+IgorICAgICAgICAiICA8Ym9keT4iCisg
ICAgICAgICIgICAgPHA+VGV4dDwvcD4iCisgICAgICAgICIgIDwvYm9keT4iCisgICAgICAgICI8
L2h0bWw+IiwKKyAgICAgICAgbnVsbHB0cik7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlz
aGVkKCk7CisKKyAgICBhdXRvIHRlc3RBcHAgPSB0ZXN0LT5maW5kVGVzdEFwcGxpY2F0aW9uKCk7
CisgICAgZ19hc3NlcnRfdHJ1ZShBVFNQSV9JU19BQ0NFU1NJQkxFKHRlc3RBcHAuZ2V0KCkpKTsK
KworICAgIGF1dG8gZG9jdW1lbnRXZWIgPSB0ZXN0LT5maW5kRG9jdW1lbnRXZWIodGVzdEFwcC5n
ZXQoKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShBVFNQSV9JU19BQ0NFU1NJQkxFKGRvY3VtZW50V2Vi
LmdldCgpKSk7CisgICAgZ19hc3NlcnRfY21waW50KGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxk
X2NvdW50KGRvY3VtZW50V2ViLmdldCgpLCBudWxscHRyKSwgPT0sIDEpOworCisgICAgYXV0byBw
ID0gYWRvcHRHUmVmKGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0X2luZGV4KGRvY3VtZW50
V2ViLmdldCgpLCAwLCBudWxscHRyKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShBVFNQSV9JU19URVhU
KHAuZ2V0KCkpKTsKKyAgICBHVW5pcXVlUHRyPEF0c3BpUmVjdD4gZmlyc3RDaGFyUmVjdChhdHNw
aV90ZXh0X2dldF9jaGFyYWN0ZXJfZXh0ZW50cyhBVFNQSV9URVhUKHAuZ2V0KCkpLCAwLCBBVFNQ
SV9DT09SRF9UWVBFX1dJTkRPVywgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0X25vbm51bGwoZmly
c3RDaGFyUmVjdC5nZXQoKSk7CisgICAgZ19hc3NlcnRfY21wdWludChmaXJzdENoYXJSZWN0LT54
LCA+LCAwKTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KGZpcnN0Q2hhclJlY3QtPnksID4sIDApOwor
ICAgIGdfYXNzZXJ0X2NtcHVpbnQoZmlyc3RDaGFyUmVjdC0+d2lkdGgsID4sIDApOworICAgIGdf
YXNzZXJ0X2NtcHVpbnQoZmlyc3RDaGFyUmVjdC0+aGVpZ2h0LCA+LCAwKTsKKyAgICBHVW5pcXVl
UHRyPEF0c3BpUmVjdD4gbGFzdENoYXJSZWN0KGF0c3BpX3RleHRfZ2V0X2NoYXJhY3Rlcl9leHRl
bnRzKEFUU1BJX1RFWFQocC5nZXQoKSksIDMsIEFUU1BJX0NPT1JEX1RZUEVfV0lORE9XLCBudWxs
cHRyKSk7CisgICAgZ19hc3NlcnRfbm9ubnVsbChsYXN0Q2hhclJlY3QuZ2V0KCkpOworICAgIGdf
YXNzZXJ0X2NtcHVpbnQobGFzdENoYXJSZWN0LT54LCA+LCBmaXJzdENoYXJSZWN0LT54KTsKKyAg
ICBnX2Fzc2VydF9jbXB1aW50KGxhc3RDaGFyUmVjdC0+eSwgPT0sIGZpcnN0Q2hhclJlY3QtPnkp
OworICAgIGdfYXNzZXJ0X2NtcHVpbnQobGFzdENoYXJSZWN0LT53aWR0aCwgPiwgMCk7CisgICAg
Z19hc3NlcnRfY21wdWludChsYXN0Q2hhclJlY3QtPmhlaWdodCwgPiwgMCk7CisgICAgR1VuaXF1
ZVB0cjxBdHNwaVJlY3Q+IHJhbmdlUmVjdChhdHNwaV90ZXh0X2dldF9yYW5nZV9leHRlbnRzKEFU
U1BJX1RFWFQocC5nZXQoKSksIDAsIDQsIEFUU1BJX0NPT1JEX1RZUEVfV0lORE9XLCBudWxscHRy
KSk7CisgICAgZ19hc3NlcnRfbm9ubnVsbChyYW5nZVJlY3QuZ2V0KCkpOworICAgIGdfYXNzZXJ0
X2NtcHVpbnQocmFuZ2VSZWN0LT54LCA9PSwgZmlyc3RDaGFyUmVjdC0+eCk7CisgICAgZ19hc3Nl
cnRfY21wdWludChyYW5nZVJlY3QtPnksID09LCBmaXJzdENoYXJSZWN0LT55KTsKKyAgICBnX2Fz
c2VydF9jbXB1aW50KHJhbmdlUmVjdC0+d2lkdGgsID4sIDApOworICAgIGdfYXNzZXJ0X2NtcHVp
bnQocmFuZ2VSZWN0LT5oZWlnaHQsID4sIDApOworICAgIGF1dG8gb2Zmc2V0ID0gYXRzcGlfdGV4
dF9nZXRfb2Zmc2V0X2F0X3BvaW50KEFUU1BJX1RFWFQocC5nZXQoKSksIGZpcnN0Q2hhclJlY3Qt
PngsIGZpcnN0Q2hhclJlY3QtPnksIEFUU1BJX0NPT1JEX1RZUEVfV0lORE9XLCBudWxscHRyKTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQob2Zmc2V0LCA9PSwgMCk7CisgICAgb2Zmc2V0ID0gYXRzcGlf
dGV4dF9nZXRfb2Zmc2V0X2F0X3BvaW50KEFUU1BJX1RFWFQocC5nZXQoKSksIGZpcnN0Q2hhclJl
Y3QtPnggKyBmaXJzdENoYXJSZWN0LT53aWR0aCwgZmlyc3RDaGFyUmVjdC0+eSwgQVRTUElfQ09P
UkRfVFlQRV9XSU5ET1csIG51bGxwdHIpOworICAgIGdfYXNzZXJ0X2NtcGludChvZmZzZXQsID09
LCAxKTsKKyAgICBvZmZzZXQgPSBhdHNwaV90ZXh0X2dldF9vZmZzZXRfYXRfcG9pbnQoQVRTUElf
VEVYVChwLmdldCgpKSwgbGFzdENoYXJSZWN0LT54LCBsYXN0Q2hhclJlY3QtPnksIEFUU1BJX0NP
T1JEX1RZUEVfV0lORE9XLCBudWxscHRyKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQob2Zmc2V0LCA9
PSwgMyk7CisgICAgb2Zmc2V0ID0gYXRzcGlfdGV4dF9nZXRfb2Zmc2V0X2F0X3BvaW50KEFUU1BJ
X1RFWFQocC5nZXQoKSksIGxhc3RDaGFyUmVjdC0+eCArIGxhc3RDaGFyUmVjdC0+d2lkdGgsIGxh
c3RDaGFyUmVjdC0+eSwgQVRTUElfQ09PUkRfVFlQRV9XSU5ET1csIG51bGxwdHIpOworICAgIGdf
YXNzZXJ0X2NtcGludChvZmZzZXQsID09LCA0KTsKK30KKworc3RhdGljIHZvaWQgdGVzdFRleHRT
ZWxlY3Rpb25zKEFjY2Vzc2liaWxpdHlUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAg
IHRlc3QtPnNob3dJbldpbmRvdyg4MDAsIDYwMCk7CisgICAgdGVzdC0+bG9hZEh0bWwoCisgICAg
ICAgICI8aHRtbD4iCisgICAgICAgICIgIDxib2R5PiIKKyAgICAgICAgIiAgICA8cD5UaGlzIGlz
IGEgbGluZSBvZiB0ZXh0PC9wPiIKKyAgICAgICAgIiAgICA8aW5wdXQgdmFsdWU9J1RoaXMgaXMg
dGV4dCBpbnB1dCB2YWx1ZScvPiIKKyAgICAgICAgIiAgPC9ib2R5PiIKKyAgICAgICAgIjwvaHRt
bD4iLAorICAgICAgICBudWxscHRyKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQo
KTsKKworICAgIGF1dG8gdGVzdEFwcCA9IHRlc3QtPmZpbmRUZXN0QXBwbGljYXRpb24oKTsKKyAg
ICBnX2Fzc2VydF90cnVlKEFUU1BJX0lTX0FDQ0VTU0lCTEUodGVzdEFwcC5nZXQoKSkpOworCisg
ICAgYXV0byBkb2N1bWVudFdlYiA9IHRlc3QtPmZpbmREb2N1bWVudFdlYih0ZXN0QXBwLmdldCgp
KTsKKyAgICBnX2Fzc2VydF90cnVlKEFUU1BJX0lTX0FDQ0VTU0lCTEUoZG9jdW1lbnRXZWIuZ2V0
KCkpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfY291
bnQoZG9jdW1lbnRXZWIuZ2V0KCksIG51bGxwdHIpLCA9PSwgMik7CisKKyAgICBhdXRvIHAgPSBh
ZG9wdEdSZWYoYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfYXRfaW5kZXgoZG9jdW1lbnRXZWIu
Z2V0KCksIDAsIG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF90cnVlKEFUU1BJX0lTX1RFWFQocC5n
ZXQoKSkpOworCisgICAgYXV0byBzZWxlY3Rpb25Db3VudCA9IGF0c3BpX3RleHRfZ2V0X25fc2Vs
ZWN0aW9ucyhBVFNQSV9URVhUKHAuZ2V0KCkpLCBudWxscHRyKTsKKyAgICBnX2Fzc2VydF9jbXB1
aW50KHNlbGVjdGlvbkNvdW50LCA9PSwgMCk7CisgICAgYXV0byBjYXJldE9mZnNldCA9IGF0c3Bp
X3RleHRfZ2V0X2NhcmV0X29mZnNldChBVFNQSV9URVhUKHAuZ2V0KCkpLCBudWxscHRyKTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQoY2FyZXRPZmZzZXQsID09LCAtMSk7CisKKyAgICBHVW5pcXVlUHRy
PEF0c3BpUmFuZ2U+IHNlbGVjdGlvbihhdHNwaV90ZXh0X2dldF9zZWxlY3Rpb24oQVRTUElfVEVY
VChwLmdldCgpKSwgMCwgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0X25vbm51bGwoc2VsZWN0aW9u
LmdldCgpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoc2VsZWN0aW9uLT5zdGFydF9vZmZzZXQsID09
LCAwKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoc2VsZWN0aW9uLT5lbmRfb2Zmc2V0LCA9PSwgMCk7
CisKKyAgICBnX2Fzc2VydF90cnVlKGF0c3BpX3RleHRfc2V0X3NlbGVjdGlvbihBVFNQSV9URVhU
KHAuZ2V0KCkpLCAwLCA1LCAxNCwgbnVsbHB0cikpOworICAgIHNlbGVjdGlvbkNvdW50ID0gYXRz
cGlfdGV4dF9nZXRfbl9zZWxlY3Rpb25zKEFUU1BJX1RFWFQocC5nZXQoKSksIG51bGxwdHIpOwor
ICAgIGdfYXNzZXJ0X2NtcHVpbnQoc2VsZWN0aW9uQ291bnQsID09LCAxKTsKKyAgICBjYXJldE9m
ZnNldCA9IGF0c3BpX3RleHRfZ2V0X2NhcmV0X29mZnNldChBVFNQSV9URVhUKHAuZ2V0KCkpLCBu
dWxscHRyKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoY2FyZXRPZmZzZXQsID09LCAxNCk7CisgICAg
c2VsZWN0aW9uLnJlc2V0KGF0c3BpX3RleHRfZ2V0X3NlbGVjdGlvbihBVFNQSV9URVhUKHAuZ2V0
KCkpLCAwLCBudWxscHRyKSk7CisgICAgZ19hc3NlcnRfbm9ubnVsbChzZWxlY3Rpb24uZ2V0KCkp
OworICAgIGdfYXNzZXJ0X2NtcGludChzZWxlY3Rpb24tPnN0YXJ0X29mZnNldCwgPT0sIDUpOwor
ICAgIGdfYXNzZXJ0X2NtcGludChzZWxlY3Rpb24tPmVuZF9vZmZzZXQsID09LCAxNCk7CisgICAg
R1VuaXF1ZVB0cjxjaGFyPiB0ZXh0KGF0c3BpX3RleHRfZ2V0X3RleHQoQVRTUElfVEVYVChwLmdl
dCgpKSwgc2VsZWN0aW9uLT5zdGFydF9vZmZzZXQsIHNlbGVjdGlvbi0+ZW5kX29mZnNldCwgbnVs
bHB0cikpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0LmdldCgpLCA9PSwgImlzIGEgbGluZSIp
OworCisgICAgZ19hc3NlcnRfdHJ1ZShhdHNwaV90ZXh0X3JlbW92ZV9zZWxlY3Rpb24oQVRTUElf
VEVYVChwLmdldCgpKSwgMCwgbnVsbHB0cikpOworICAgIHNlbGVjdGlvbkNvdW50ID0gYXRzcGlf
dGV4dF9nZXRfbl9zZWxlY3Rpb25zKEFUU1BJX1RFWFQocC5nZXQoKSksIG51bGxwdHIpOworICAg
IGdfYXNzZXJ0X2NtcHVpbnQoc2VsZWN0aW9uQ291bnQsID09LCAwKTsKKyAgICBjYXJldE9mZnNl
dCA9IGF0c3BpX3RleHRfZ2V0X2NhcmV0X29mZnNldChBVFNQSV9URVhUKHAuZ2V0KCkpLCBudWxs
cHRyKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoY2FyZXRPZmZzZXQsID09LCAxNCk7CisgICAgZ19h
c3NlcnRfdHJ1ZShhdHNwaV90ZXh0X3NldF9jYXJldF9vZmZzZXQoQVRTUElfVEVYVChwLmdldCgp
KSwgMCwgbnVsbHB0cikpOworICAgIGNhcmV0T2Zmc2V0ID0gYXRzcGlfdGV4dF9nZXRfY2FyZXRf
b2Zmc2V0KEFUU1BJX1RFWFQocC5nZXQoKSksIG51bGxwdHIpOworICAgIGdfYXNzZXJ0X2NtcGlu
dChjYXJldE9mZnNldCwgPT0sIDApOworCisgICAgYXV0byBzZWN0aW9uID0gYWRvcHRHUmVmKGF0
c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0X2luZGV4KGRvY3VtZW50V2ViLmdldCgpLCAxLCBu
dWxscHRyKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShBVFNQSV9JU19BQ0NFU1NJQkxFKHNlY3Rpb24u
Z2V0KCkpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRf
Y291bnQoc2VjdGlvbi5nZXQoKSwgbnVsbHB0ciksID09LCAxKTsKKyAgICBhdXRvIGlucHV0ID0g
YWRvcHRHUmVmKGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0X2luZGV4KHNlY3Rpb24uZ2V0
KCksIDAsIG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF90cnVlKEFUU1BJX0lTX1RFWFQoaW5wdXQu
Z2V0KCkpKTsKKyAgICBnX2Fzc2VydF90cnVlKGF0c3BpX3RleHRfc2V0X2NhcmV0X29mZnNldChB
VFNQSV9URVhUKGlucHV0LmdldCgpKSwgNSwgbnVsbHB0cikpOworICAgIGNhcmV0T2Zmc2V0ID0g
YXRzcGlfdGV4dF9nZXRfY2FyZXRfb2Zmc2V0KEFUU1BJX1RFWFQoaW5wdXQuZ2V0KCkpLCBudWxs
cHRyKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoY2FyZXRPZmZzZXQsID09LCA1KTsKKyAgICBnX2Fz
c2VydF90cnVlKGF0c3BpX3RleHRfc2V0X3NlbGVjdGlvbihBVFNQSV9URVhUKGlucHV0LmdldCgp
KSwgMCwgNSwgMTIsIG51bGxwdHIpKTsKKyAgICBzZWxlY3Rpb25Db3VudCA9IGF0c3BpX3RleHRf
Z2V0X25fc2VsZWN0aW9ucyhBVFNQSV9URVhUKGlucHV0LmdldCgpKSwgbnVsbHB0cik7CisgICAg
Z19hc3NlcnRfY21wdWludChzZWxlY3Rpb25Db3VudCwgPT0sIDEpOworICAgIGNhcmV0T2Zmc2V0
ID0gYXRzcGlfdGV4dF9nZXRfY2FyZXRfb2Zmc2V0KEFUU1BJX1RFWFQoaW5wdXQuZ2V0KCkpLCBu
dWxscHRyKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoY2FyZXRPZmZzZXQsID09LCAxMik7CisgICAg
c2VsZWN0aW9uLnJlc2V0KGF0c3BpX3RleHRfZ2V0X3NlbGVjdGlvbihBVFNQSV9URVhUKGlucHV0
LmdldCgpKSwgMCwgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0X25vbm51bGwoc2VsZWN0aW9uLmdl
dCgpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoc2VsZWN0aW9uLT5zdGFydF9vZmZzZXQsID09LCA1
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoc2VsZWN0aW9uLT5lbmRfb2Zmc2V0LCA9PSwgMTIpOwor
ICAgIHRleHQucmVzZXQoYXRzcGlfdGV4dF9nZXRfdGV4dChBVFNQSV9URVhUKGlucHV0LmdldCgp
KSwgc2VsZWN0aW9uLT5zdGFydF9vZmZzZXQsIHNlbGVjdGlvbi0+ZW5kX29mZnNldCwgbnVsbHB0
cikpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0LmdldCgpLCA9PSwgImlzIHRleHQiKTsKK30K
Kworc3RhdGljIHZvaWQgdGVzdFRleHRBdHRyaWJ1dGVzKEFjY2Vzc2liaWxpdHlUZXN0KiB0ZXN0
LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPnNob3dJbldpbmRvdyg4MDAsIDYwMCk7Cisg
ICAgdGVzdC0+bG9hZEh0bWwoCisgICAgICAgICI8aHRtbD4iCisgICAgICAgICIgIDxib2R5PiIK
KyAgICAgICAgIiAgICA8cD5UaGlzIGlzIGEgPGI+bGluZTwvYj4gb2YgdGV4dDwvcD4iCisgICAg
ICAgICIgIDwvYm9keT4iCisgICAgICAgICI8L2h0bWw+IiwKKyAgICAgICAgbnVsbHB0cik7Cisg
ICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBhdXRvIHRlc3RBcHAgPSB0
ZXN0LT5maW5kVGVzdEFwcGxpY2F0aW9uKCk7CisgICAgZ19hc3NlcnRfdHJ1ZShBVFNQSV9JU19B
Q0NFU1NJQkxFKHRlc3RBcHAuZ2V0KCkpKTsKKworICAgIGF1dG8gZG9jdW1lbnRXZWIgPSB0ZXN0
LT5maW5kRG9jdW1lbnRXZWIodGVzdEFwcC5nZXQoKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShBVFNQ
SV9JU19BQ0NFU1NJQkxFKGRvY3VtZW50V2ViLmdldCgpKSk7CisgICAgZ19hc3NlcnRfY21waW50
KGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2NvdW50KGRvY3VtZW50V2ViLmdldCgpLCBudWxs
cHRyKSwgPT0sIDEpOworCisgICAgYXV0byBwID0gYWRvcHRHUmVmKGF0c3BpX2FjY2Vzc2libGVf
Z2V0X2NoaWxkX2F0X2luZGV4KGRvY3VtZW50V2ViLmdldCgpLCAwLCBudWxscHRyKSk7CisgICAg
Z19hc3NlcnRfdHJ1ZShBVFNQSV9JU19URVhUKHAuZ2V0KCkpKTsKKworICAgIC8vIEluY2x1ZGlu
ZyBkZWZhdWx0IGF0dHJpYnV0ZXMuCisgICAgaW50IHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQ7Cisg
ICAgR1JlZlB0cjxHSGFzaFRhYmxlPiBhdHRyaWJ1dGVzID0gYWRvcHRHUmVmKGF0c3BpX3RleHRf
Z2V0X2F0dHJpYnV0ZV9ydW4oQVRTUElfVEVYVChwLmdldCgpKSwgMCwgVFJVRSwgJnN0YXJ0T2Zm
c2V0LCAmZW5kT2Zmc2V0LCBudWxscHRyKSk7CisgICAgZ19hc3NlcnRfbm9ubnVsbChhdHRyaWJ1
dGVzLmdldCgpKTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KGdfaGFzaF90YWJsZV9zaXplKGF0dHJp
YnV0ZXMuZ2V0KCkpLCA+LCAxKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc3RhdGljX2Nhc3Q8Y29u
c3QgY2hhcio+KGdfaGFzaF90YWJsZV9sb29rdXAoYXR0cmlidXRlcy5nZXQoKSwgIndlaWdodCIp
KSwgPT0sICI0MDAiKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCAwKTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgMTApOworCisgICAgYXR0cmlidXRl
cyA9IGFkb3B0R1JlZihhdHNwaV90ZXh0X2dldF9hdHRyaWJ1dGVfcnVuKEFUU1BJX1RFWFQocC5n
ZXQoKSksIDEyLCBUUlVFLCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQsIG51bGxwdHIpKTsKKyAg
ICBnX2Fzc2VydF9ub25udWxsKGF0dHJpYnV0ZXMuZ2V0KCkpOworICAgIGdfYXNzZXJ0X2NtcHVp
bnQoZ19oYXNoX3RhYmxlX3NpemUoYXR0cmlidXRlcy5nZXQoKSksID4sIDEpOworICAgIGdfYXNz
ZXJ0X2NtcHN0cihzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZ19oYXNoX3RhYmxlX2xvb2t1cChh
dHRyaWJ1dGVzLmdldCgpLCAid2VpZ2h0IikpLCA9PSwgIjcwMCIpOworICAgIEdVbmlxdWVQdHI8
Y2hhcj4gdmFsdWUoYXRzcGlfdGV4dF9nZXRfYXR0cmlidXRlX3ZhbHVlKEFUU1BJX1RFWFQocC5n
ZXQoKSksIDExLCBjb25zdF9jYXN0PGNoYXIqPigid2VpZ2h0IiksIG51bGxwdHIpKTsKKyAgICBn
X2Fzc2VydF9jbXBzdHIodmFsdWUuZ2V0KCksID09LCAiNzAwIik7CisgICAgZ19hc3NlcnRfY21w
aW50KHN0YXJ0T2Zmc2V0LCA9PSwgMTApOworICAgIGdfYXNzZXJ0X2NtcGludChlbmRPZmZzZXQs
ID09LCAxNCk7CisKKyAgICBhdHRyaWJ1dGVzID0gYWRvcHRHUmVmKGF0c3BpX3RleHRfZ2V0X2F0
dHJpYnV0ZV9ydW4oQVRTUElfVEVYVChwLmdldCgpKSwgMTYsIFRSVUUsICZzdGFydE9mZnNldCwg
JmVuZE9mZnNldCwgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0X25vbm51bGwoYXR0cmlidXRlcy5n
ZXQoKSk7CisgICAgZ19hc3NlcnRfY21wdWludChnX2hhc2hfdGFibGVfc2l6ZShhdHRyaWJ1dGVz
LmdldCgpKSwgPiwgMSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHN0YXRpY19jYXN0PGNvbnN0IGNo
YXIqPihnX2hhc2hfdGFibGVfbG9va3VwKGF0dHJpYnV0ZXMuZ2V0KCksICJ3ZWlnaHQiKSksID09
LCAiNDAwIik7CisgICAgZ19hc3NlcnRfY21waW50KHN0YXJ0T2Zmc2V0LCA9PSwgMTQpOworICAg
IGdfYXNzZXJ0X2NtcGludChlbmRPZmZzZXQsID09LCAyMik7CisKKyAgICAvLyBXaXRob3V0IGRl
ZmF1bHQgYXR0cmlidXRlcy4KKyAgICBhdHRyaWJ1dGVzID0gYWRvcHRHUmVmKGF0c3BpX3RleHRf
Z2V0X2F0dHJpYnV0ZV9ydW4oQVRTUElfVEVYVChwLmdldCgpKSwgMCwgRkFMU0UsICZzdGFydE9m
ZnNldCwgJmVuZE9mZnNldCwgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0X25vbm51bGwoYXR0cmli
dXRlcy5nZXQoKSk7CisgICAgZ19hc3NlcnRfY21wdWludChnX2hhc2hfdGFibGVfc2l6ZShhdHRy
aWJ1dGVzLmdldCgpKSwgPT0sIDApOworICAgIGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNldCwg
PT0sIDApOworICAgIGdfYXNzZXJ0X2NtcGludChlbmRPZmZzZXQsID09LCAxMCk7CisKKyAgICBh
dHRyaWJ1dGVzID0gYWRvcHRHUmVmKGF0c3BpX3RleHRfZ2V0X2F0dHJpYnV0ZV9ydW4oQVRTUElf
VEVYVChwLmdldCgpKSwgMTIsIEZBTFNFLCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQsIG51bGxw
dHIpKTsKKyAgICBnX2Fzc2VydF9ub25udWxsKGF0dHJpYnV0ZXMuZ2V0KCkpOworICAgIGdfYXNz
ZXJ0X2NtcHVpbnQoZ19oYXNoX3RhYmxlX3NpemUoYXR0cmlidXRlcy5nZXQoKSksID09LCAxKTsK
KyAgICBnX2Fzc2VydF9jbXBzdHIoc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGdfaGFzaF90YWJs
ZV9sb29rdXAoYXR0cmlidXRlcy5nZXQoKSwgIndlaWdodCIpKSwgPT0sICI3MDAiKTsKKyAgICBn
X2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCAxMCk7CisgICAgZ19hc3NlcnRfY21waW50
KGVuZE9mZnNldCwgPT0sIDE0KTsKKworICAgIGF0dHJpYnV0ZXMgPSBhZG9wdEdSZWYoYXRzcGlf
dGV4dF9nZXRfYXR0cmlidXRlX3J1bihBVFNQSV9URVhUKHAuZ2V0KCkpLCAxNiwgRkFMU0UsICZz
dGFydE9mZnNldCwgJmVuZE9mZnNldCwgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0X25vbm51bGwo
YXR0cmlidXRlcy5nZXQoKSk7CisgICAgZ19hc3NlcnRfY21wdWludChnX2hhc2hfdGFibGVfc2l6
ZShhdHRyaWJ1dGVzLmdldCgpKSwgPT0sIDApOworICAgIGdfYXNzZXJ0X2NtcGludChzdGFydE9m
ZnNldCwgPT0sIDE0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgMjIpOwor
CisgICAgLy8gT25seSBkZWZhdWx0IGF0dHJpYnV0ZXMuCisgICAgYXR0cmlidXRlcyA9IGFkb3B0
R1JlZihhdHNwaV90ZXh0X2dldF9kZWZhdWx0X2F0dHJpYnV0ZXMoQVRTUElfVEVYVChwLmdldCgp
KSwgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0X25vbm51bGwoYXR0cmlidXRlcy5nZXQoKSk7Cisg
ICAgZ19hc3NlcnRfY21wdWludChnX2hhc2hfdGFibGVfc2l6ZShhdHRyaWJ1dGVzLmdldCgpKSwg
PiwgMSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihnX2hh
c2hfdGFibGVfbG9va3VwKGF0dHJpYnV0ZXMuZ2V0KCksICJ3ZWlnaHQiKSksID09LCAiNDAwIik7
CisKKyNpZiBVU0UoQVRTUEkpCisgICAgLy8gQXRzcGkgaW1wbGVtZW50YXRpb24gaGFuZGxlcyBy
YW5nZXMgd2l0aCB0aGUgc2FtZSBhdHRyaWJ1dGVzIGFzIG9uZSBydW4uCisgICAgdGVzdC0+bG9h
ZEh0bWwoCisgICAgICAgICI8aHRtbD4iCisgICAgICAgICIgIDxib2R5PiIKKyAgICAgICAgIiAg
ICA8cD5UaGlzIGlzIGEgPGI+bGk8L2I+PGI+bmU8L2I+IG9mIHRleHQ8L3A+IgorICAgICAgICAi
ICA8L2JvZHk+IgorICAgICAgICAiPC9odG1sPiIsCisgICAgICAgIG51bGxwdHIpOworICAgIHRl
c3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgZG9jdW1lbnRXZWIgPSB0ZXN0LT5m
aW5kRG9jdW1lbnRXZWIodGVzdEFwcC5nZXQoKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShBVFNQSV9J
U19BQ0NFU1NJQkxFKGRvY3VtZW50V2ViLmdldCgpKSk7CisgICAgZ19hc3NlcnRfY21waW50KGF0
c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2NvdW50KGRvY3VtZW50V2ViLmdldCgpLCBudWxscHRy
KSwgPT0sIDEpOworCisgICAgcCA9IGFkb3B0R1JlZihhdHNwaV9hY2Nlc3NpYmxlX2dldF9jaGls
ZF9hdF9pbmRleChkb2N1bWVudFdlYi5nZXQoKSwgMCwgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0
X3RydWUoQVRTUElfSVNfVEVYVChwLmdldCgpKSk7CisKKyAgICBhdHRyaWJ1dGVzID0gYWRvcHRH
UmVmKGF0c3BpX3RleHRfZ2V0X2F0dHJpYnV0ZV9ydW4oQVRTUElfVEVYVChwLmdldCgpKSwgMCwg
VFJVRSwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0LCBudWxscHRyKSk7CisgICAgZ19hc3NlcnRf
bm9ubnVsbChhdHRyaWJ1dGVzLmdldCgpKTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KGdfaGFzaF90
YWJsZV9zaXplKGF0dHJpYnV0ZXMuZ2V0KCkpLCA+LCAxKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIo
c3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGdfaGFzaF90YWJsZV9sb29rdXAoYXR0cmlidXRlcy5n
ZXQoKSwgIndlaWdodCIpKSwgPT0sICI0MDAiKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRP
ZmZzZXQsID09LCAwKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgMTApOwor
CisgICAgYXR0cmlidXRlcyA9IGFkb3B0R1JlZihhdHNwaV90ZXh0X2dldF9hdHRyaWJ1dGVfcnVu
KEFUU1BJX1RFWFQocC5nZXQoKSksIDEyLCBUUlVFLCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQs
IG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF9ub25udWxsKGF0dHJpYnV0ZXMuZ2V0KCkpOworICAg
IGdfYXNzZXJ0X2NtcHVpbnQoZ19oYXNoX3RhYmxlX3NpemUoYXR0cmlidXRlcy5nZXQoKSksID4s
IDEpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZ19oYXNo
X3RhYmxlX2xvb2t1cChhdHRyaWJ1dGVzLmdldCgpLCAid2VpZ2h0IikpLCA9PSwgIjcwMCIpOwor
ICAgIGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNldCwgPT0sIDEwKTsKKyAgICBnX2Fzc2VydF9j
bXBpbnQoZW5kT2Zmc2V0LCA9PSwgMTQpOworCisgICAgYXR0cmlidXRlcyA9IGFkb3B0R1JlZihh
dHNwaV90ZXh0X2dldF9hdHRyaWJ1dGVfcnVuKEFUU1BJX1RFWFQocC5nZXQoKSksIDE2LCBUUlVF
LCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQsIG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF9ub25u
dWxsKGF0dHJpYnV0ZXMuZ2V0KCkpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQoZ19oYXNoX3RhYmxl
X3NpemUoYXR0cmlidXRlcy5nZXQoKSksID4sIDEpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzdGF0
aWNfY2FzdDxjb25zdCBjaGFyKj4oZ19oYXNoX3RhYmxlX2xvb2t1cChhdHRyaWJ1dGVzLmdldCgp
LCAid2VpZ2h0IikpLCA9PSwgIjQwMCIpOworICAgIGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNl
dCwgPT0sIDE0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgMjIpOworCisj
ZW5kaWYKK30KKworc3RhdGljIHZvaWQgdGVzdFRleHRTdGF0ZUNoYW5nZWQoQWNjZXNzaWJpbGl0
eVRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+c2hvd0luV2luZG93KDgw
MCwgNjAwKTsKKyAgICB0ZXN0LT5sb2FkSHRtbCgKKyAgICAgICAgIjxodG1sPiIKKyAgICAgICAg
IiAgPGJvZHk+IgorICAgICAgICAiICAgIDxwPlRoaXMgaXMgYSBsaW5lIG9mIHRleHQ8L3A+Igor
ICAgICAgICAiICAgIDxpbnB1dCB2YWx1ZT0nVGhpcyBpcyBhIHRleHQgZmllbGQnLz4iCisgICAg
ICAgICIgICAgPGRpdiBjb250ZW50ZWRpdGFibGU9dHJ1ZT5UaGlzIGlzIGNvbnRlbnQgZWRpdGFi
bGU8L2Rpdj4iCisgICAgICAgICIgIDwvYm9keT4iCisgICAgICAgICI8L2h0bWw+IiwKKyAgICAg
ICAgbnVsbHB0cik7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBh
dXRvIHRlc3RBcHAgPSB0ZXN0LT5maW5kVGVzdEFwcGxpY2F0aW9uKCk7CisgICAgZ19hc3NlcnRf
dHJ1ZShBVFNQSV9JU19BQ0NFU1NJQkxFKHRlc3RBcHAuZ2V0KCkpKTsKKworICAgIGF1dG8gZG9j
dW1lbnRXZWIgPSB0ZXN0LT5maW5kRG9jdW1lbnRXZWIodGVzdEFwcC5nZXQoKSk7CisgICAgZ19h
c3NlcnRfdHJ1ZShBVFNQSV9JU19BQ0NFU1NJQkxFKGRvY3VtZW50V2ViLmdldCgpKSk7CisgICAg
Z19hc3NlcnRfY21waW50KGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2NvdW50KGRvY3VtZW50
V2ViLmdldCgpLCBudWxscHRyKSwgPT0sIDMpOworCisgICAgLy8gVGV4dCBjYXJldCBtb3ZlZC4K
KyAgICBhdXRvIHAgPSBhZG9wdEdSZWYoYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfYXRfaW5k
ZXgoZG9jdW1lbnRXZWIuZ2V0KCksIDAsIG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF90cnVlKEFU
U1BJX0lTX1RFWFQocC5nZXQoKSkpOworICAgIHRlc3QtPnN0YXJ0RXZlbnRNb25pdG9yKHAuZ2V0
KCksIHsgIm9iamVjdDp0ZXh0LWNhcmV0LW1vdmVkIiB9KTsKKyAgICBnX2Fzc2VydF90cnVlKGF0
c3BpX3RleHRfc2V0X2NhcmV0X29mZnNldChBVFNQSV9URVhUKHAuZ2V0KCkpLCAxMCwgbnVsbHB0
cikpOworICAgIGF1dG8gZXZlbnRzID0gdGVzdC0+c3RvcEV2ZW50TW9uaXRvcigxKTsKKyAgICBn
X2Fzc2VydF9jbXB1aW50KGV2ZW50cy5zaXplKCksID09LCAxKTsKKyAgICBnX2Fzc2VydF9jbXBz
dHIoZXZlbnRzWzBdLT50eXBlLCA9PSwgIm9iamVjdDp0ZXh0LWNhcmV0LW1vdmVkIik7CisgICAg
Z19hc3NlcnRfY21wdWludChldmVudHNbMF0tPmRldGFpbDEsID09LCAxMCk7CisKKyAgICBhdXRv
IHNlY3Rpb24gPSBhZG9wdEdSZWYoYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfYXRfaW5kZXgo
ZG9jdW1lbnRXZWIuZ2V0KCksIDEsIG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF90cnVlKEFUU1BJ
X0lTX0FDQ0VTU0lCTEUoc2VjdGlvbi5nZXQoKSkpOworICAgIGdfYXNzZXJ0X2NtcGludChhdHNw
aV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9jb3VudChzZWN0aW9uLmdldCgpLCBudWxscHRyKSwgPT0s
IDEpOworICAgIGF1dG8gaW5wdXQgPSBhZG9wdEdSZWYoYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hp
bGRfYXRfaW5kZXgoc2VjdGlvbi5nZXQoKSwgMCwgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0X3Ry
dWUoQVRTUElfSVNfVEVYVChpbnB1dC5nZXQoKSkpOworICAgIHRlc3QtPnN0YXJ0RXZlbnRNb25p
dG9yKGlucHV0LmdldCgpLCB7ICJvYmplY3Q6dGV4dC1jYXJldC1tb3ZlZCIgfSk7CisgICAgZ19h
c3NlcnRfdHJ1ZShhdHNwaV90ZXh0X3NldF9jYXJldF9vZmZzZXQoQVRTUElfVEVYVChpbnB1dC5n
ZXQoKSksIDUsIG51bGxwdHIpKTsKKyAgICBldmVudHMgPSB0ZXN0LT5zdG9wRXZlbnRNb25pdG9y
KDEpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDEpOworICAgIGdf
YXNzZXJ0X2NtcHN0cihldmVudHNbMF0tPnR5cGUsID09LCAib2JqZWN0OnRleHQtY2FyZXQtbW92
ZWQiKTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KGV2ZW50c1swXS0+ZGV0YWlsMSwgPT0sIDUpOwor
CisgICAgYXV0byBkaXYgPSBhZG9wdEdSZWYoYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfYXRf
aW5kZXgoZG9jdW1lbnRXZWIuZ2V0KCksIDIsIG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF90cnVl
KEFUU1BJX0lTX1RFWFQoZGl2LmdldCgpKSk7CisgICAgdGVzdC0+c3RhcnRFdmVudE1vbml0b3Io
ZGl2LmdldCgpLCB7ICJvYmplY3Q6dGV4dC1jYXJldC1tb3ZlZCIgfSk7CisgICAgZ19hc3NlcnRf
dHJ1ZShhdHNwaV90ZXh0X3NldF9jYXJldF9vZmZzZXQoQVRTUElfVEVYVChkaXYuZ2V0KCkpLCAx
NSwgbnVsbHB0cikpOworICAgIGV2ZW50cyA9IHRlc3QtPnN0b3BFdmVudE1vbml0b3IoMSk7Cisg
ICAgZ19hc3NlcnRfY21wdWludChldmVudHMuc2l6ZSgpLCA9PSwgMSk7CisgICAgZ19hc3NlcnRf
Y21wc3RyKGV2ZW50c1swXS0+dHlwZSwgPT0sICJvYmplY3Q6dGV4dC1jYXJldC1tb3ZlZCIpOwor
ICAgIGdfYXNzZXJ0X2NtcHVpbnQoZXZlbnRzWzBdLT5kZXRhaWwxLCA9PSwgMTUpOworCisgICAg
Ly8gU2VsZWN0aW9uIGNoYW5nZWQuCisgICAgdGVzdC0+c3RhcnRFdmVudE1vbml0b3IocC5nZXQo
KSwgeyAib2JqZWN0OnRleHQtc2VsZWN0aW9uLWNoYW5nZWQiLCAib2JqZWN0OnRleHQtY2FyZXQt
bW92ZWQiIH0pOworICAgIGdfYXNzZXJ0X3RydWUoYXRzcGlfdGV4dF9zZXRfc2VsZWN0aW9uKEFU
U1BJX1RFWFQocC5nZXQoKSksIDAsIDEwLCAxNSwgbnVsbHB0cikpOworICAgIGV2ZW50cyA9IHRl
c3QtPnN0b3BFdmVudE1vbml0b3IoMik7CisgICAgZ19hc3NlcnRfY21wdWludChldmVudHMuc2l6
ZSgpLCA9PSwgMik7CisgICAgYXV0byogZXZlbnQgPSBBY2Nlc3NpYmlsaXR5VGVzdDo6ZmluZEV2
ZW50KGV2ZW50cywgIm9iamVjdDp0ZXh0LWNhcmV0LW1vdmVkIik7CisgICAgZ19hc3NlcnRfbm9u
bnVsbChldmVudCk7CisgICAgZ19hc3NlcnRfY21wdWludChldmVudC0+ZGV0YWlsMSwgPT0sIDE1
KTsKKyAgICBnX2Fzc2VydF9ub25udWxsKEFjY2Vzc2liaWxpdHlUZXN0OjpmaW5kRXZlbnQoZXZl
bnRzLCAib2JqZWN0OnRleHQtc2VsZWN0aW9uLWNoYW5nZWQiKSk7CisKKyAgICB0ZXN0LT5zdGFy
dEV2ZW50TW9uaXRvcihpbnB1dC5nZXQoKSwgeyAib2JqZWN0OnRleHQtc2VsZWN0aW9uLWNoYW5n
ZWQiLCAib2JqZWN0OnRleHQtY2FyZXQtbW92ZWQiIH0pOworICAgIGdfYXNzZXJ0X3RydWUoYXRz
cGlfdGV4dF9zZXRfc2VsZWN0aW9uKEFUU1BJX1RFWFQoaW5wdXQuZ2V0KCkpLCAwLCA1LCAxMCwg
bnVsbHB0cikpOworICAgIGV2ZW50cyA9IHRlc3QtPnN0b3BFdmVudE1vbml0b3IoMik7CisgICAg
Z19hc3NlcnRfY21wdWludChldmVudHMuc2l6ZSgpLCA9PSwgMik7CisgICAgZXZlbnQgPSBBY2Nl
c3NpYmlsaXR5VGVzdDo6ZmluZEV2ZW50KGV2ZW50cywgIm9iamVjdDp0ZXh0LWNhcmV0LW1vdmVk
Iik7CisgICAgZ19hc3NlcnRfbm9ubnVsbChldmVudCk7CisgICAgZ19hc3NlcnRfY21wdWludChl
dmVudC0+ZGV0YWlsMSwgPT0sIDEwKTsKKyAgICBnX2Fzc2VydF9ub25udWxsKEFjY2Vzc2liaWxp
dHlUZXN0OjpmaW5kRXZlbnQoZXZlbnRzLCAib2JqZWN0OnRleHQtc2VsZWN0aW9uLWNoYW5nZWQi
KSk7CisKKyAgICB0ZXN0LT5zdGFydEV2ZW50TW9uaXRvcihkaXYuZ2V0KCksIHsgIm9iamVjdDp0
ZXh0LXNlbGVjdGlvbi1jaGFuZ2VkIiwgIm9iamVjdDp0ZXh0LWNhcmV0LW1vdmVkIiB9KTsKKyAg
ICBnX2Fzc2VydF90cnVlKGF0c3BpX3RleHRfc2V0X3NlbGVjdGlvbihBVFNQSV9URVhUKGRpdi5n
ZXQoKSksIDAsIDE1LCAxOCwgbnVsbHB0cikpOworICAgIGV2ZW50cyA9IHRlc3QtPnN0b3BFdmVu
dE1vbml0b3IoMik7CisgICAgZ19hc3NlcnRfY21wdWludChldmVudHMuc2l6ZSgpLCA9PSwgMik7
CisgICAgZXZlbnQgPSBBY2Nlc3NpYmlsaXR5VGVzdDo6ZmluZEV2ZW50KGV2ZW50cywgIm9iamVj
dDp0ZXh0LWNhcmV0LW1vdmVkIik7CisgICAgZ19hc3NlcnRfbm9ubnVsbChldmVudCk7CisgICAg
Z19hc3NlcnRfY21wdWludChldmVudC0+ZGV0YWlsMSwgPT0sIDE4KTsKKyAgICBnX2Fzc2VydF9u
b25udWxsKEFjY2Vzc2liaWxpdHlUZXN0OjpmaW5kRXZlbnQoZXZlbnRzLCAib2JqZWN0OnRleHQt
c2VsZWN0aW9uLWNoYW5nZWQiKSk7CisKKyAgICAvLyBUZXh0IGNoYW5nZWQuCisgICAgZ19hc3Nl
cnRfdHJ1ZShhdHNwaV90ZXh0X3NldF9jYXJldF9vZmZzZXQoQVRTUElfVEVYVChpbnB1dC5nZXQo
KSksIDUsIG51bGxwdHIpKTsKKyAgICB0ZXN0LT5zdGFydEV2ZW50TW9uaXRvcihpbnB1dC5nZXQo
KSwgeyAib2JqZWN0OnRleHQtY2hhbmdlZDppbnNlcnQiLCAib2JqZWN0OnRleHQtY2hhbmdlZDpk
ZWxldGUiIH0pOworICAgIHRlc3QtPmtleVN0cm9rZShHREtfS0VZX2EpOworICAgIGV2ZW50cyA9
IHRlc3QtPnN0b3BFdmVudE1vbml0b3IoMSk7CisgICAgZ19hc3NlcnRfY21wdWludChldmVudHMu
c2l6ZSgpLCA9PSwgMSk7CisgICAgZ19hc3NlcnRfY21wc3RyKGV2ZW50c1swXS0+dHlwZSwgPT0s
ICJvYmplY3Q6dGV4dC1jaGFuZ2VkOmluc2VydCIpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQoZXZl
bnRzWzBdLT5kZXRhaWwxLCA9PSwgNSk7CisgICAgZ19hc3NlcnRfY21wdWludChldmVudHNbMF0t
PmRldGFpbDIsID09LCAxKTsKKyAgICBnX2Fzc2VydF90cnVlKEdfVkFMVUVfSE9MRFNfU1RSSU5H
KCZldmVudHNbMF0tPmFueV9kYXRhKSk7CisgICAgZ19hc3NlcnRfY21wc3RyKGdfdmFsdWVfZ2V0
X3N0cmluZygmZXZlbnRzWzBdLT5hbnlfZGF0YSksID09LCAiYSIpOworICAgIGdfYXNzZXJ0X3Ry
dWUoYXRzcGlfdGV4dF9zZXRfY2FyZXRfb2Zmc2V0KEFUU1BJX1RFWFQoaW5wdXQuZ2V0KCkpLCAw
LCBudWxscHRyKSk7CisgICAgdGVzdC0+c3RhcnRFdmVudE1vbml0b3IoaW5wdXQuZ2V0KCksIHsg
Im9iamVjdDp0ZXh0LWNoYW5nZWQ6aW5zZXJ0IiwgIm9iamVjdDp0ZXh0LWNoYW5nZWQ6ZGVsZXRl
IiB9KTsKKyAgICB0ZXN0LT5rZXlTdHJva2UoR0RLX0tFWV9EZWxldGUpOworICAgIGV2ZW50cyA9
IHRlc3QtPnN0b3BFdmVudE1vbml0b3IoMSk7CisgICAgZ19hc3NlcnRfY21wdWludChldmVudHMu
c2l6ZSgpLCA9PSwgMSk7CisgICAgZ19hc3NlcnRfY21wc3RyKGV2ZW50c1swXS0+dHlwZSwgPT0s
ICJvYmplY3Q6dGV4dC1jaGFuZ2VkOmRlbGV0ZSIpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQoZXZl
bnRzWzBdLT5kZXRhaWwxLCA9PSwgMCk7CisgICAgZ19hc3NlcnRfY21wdWludChldmVudHNbMF0t
PmRldGFpbDIsID09LCAxKTsKKyAgICBnX2Fzc2VydF90cnVlKEdfVkFMVUVfSE9MRFNfU1RSSU5H
KCZldmVudHNbMF0tPmFueV9kYXRhKSk7CisgICAgZ19hc3NlcnRfY21wc3RyKGdfdmFsdWVfZ2V0
X3N0cmluZygmZXZlbnRzWzBdLT5hbnlfZGF0YSksID09LCAiVCIpOworCisgICAgZ19hc3NlcnRf
dHJ1ZShhdHNwaV90ZXh0X3NldF9jYXJldF9vZmZzZXQoQVRTUElfVEVYVChkaXYuZ2V0KCkpLCAx
MCwgbnVsbHB0cikpOworICAgIHRlc3QtPnN0YXJ0RXZlbnRNb25pdG9yKGRpdi5nZXQoKSwgeyAi
b2JqZWN0OnRleHQtY2hhbmdlZDppbnNlcnQiLCAib2JqZWN0OnRleHQtY2hhbmdlZDpkZWxldGUi
IH0pOworICAgIHRlc3QtPmtleVN0cm9rZShHREtfS0VZX2IpOworICAgIGV2ZW50cyA9IHRlc3Qt
PnN0b3BFdmVudE1vbml0b3IoMSk7CisgICAgZ19hc3NlcnRfY21wdWludChldmVudHMuc2l6ZSgp
LCA9PSwgMSk7CisgICAgZ19hc3NlcnRfY21wc3RyKGV2ZW50c1swXS0+dHlwZSwgPT0sICJvYmpl
Y3Q6dGV4dC1jaGFuZ2VkOmluc2VydCIpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQoZXZlbnRzWzBd
LT5kZXRhaWwxLCA9PSwgMTApOworICAgIGdfYXNzZXJ0X2NtcHVpbnQoZXZlbnRzWzBdLT5kZXRh
aWwyLCA9PSwgMSk7CisgICAgZ19hc3NlcnRfdHJ1ZShHX1ZBTFVFX0hPTERTX1NUUklORygmZXZl
bnRzWzBdLT5hbnlfZGF0YSkpOworICAgIGdfYXNzZXJ0X2NtcHN0cihnX3ZhbHVlX2dldF9zdHJp
bmcoJmV2ZW50c1swXS0+YW55X2RhdGEpLCA9PSwgImIiKTsKKyAgICBnX2Fzc2VydF90cnVlKGF0
c3BpX3RleHRfc2V0X2NhcmV0X29mZnNldChBVFNQSV9URVhUKGRpdi5nZXQoKSksIDE1LCBudWxs
cHRyKSk7CisgICAgdGVzdC0+c3RhcnRFdmVudE1vbml0b3IoZGl2LmdldCgpLCB7ICJvYmplY3Q6
dGV4dC1jaGFuZ2VkOmluc2VydCIsICJvYmplY3Q6dGV4dC1jaGFuZ2VkOmRlbGV0ZSIgfSk7Cisg
ICAgdGVzdC0+a2V5U3Ryb2tlKEdES19LRVlfQmFja1NwYWNlKTsKKyAgICBldmVudHMgPSB0ZXN0
LT5zdG9wRXZlbnRNb25pdG9yKDEpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQoZXZlbnRzLnNpemUo
KSwgPT0sIDEpOworICAgIGdfYXNzZXJ0X2NtcHN0cihldmVudHNbMF0tPnR5cGUsID09LCAib2Jq
ZWN0OnRleHQtY2hhbmdlZDpkZWxldGUiKTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KGV2ZW50c1sw
XS0+ZGV0YWlsMSwgPT0sIDE0KTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KGV2ZW50c1swXS0+ZGV0
YWlsMiwgPT0sIDEpOworICAgIGdfYXNzZXJ0X3RydWUoR19WQUxVRV9IT0xEU19TVFJJTkcoJmV2
ZW50c1swXS0+YW55X2RhdGEpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoZ192YWx1ZV9nZXRfc3Ry
aW5nKCZldmVudHNbMF0tPmFueV9kYXRhKSwgPT0sICJuIik7CisKKyAgICAvLyBUZXh0IHJlcGxh
Y2VkLgorICAgIGdfYXNzZXJ0X3RydWUoYXRzcGlfdGV4dF9zZXRfc2VsZWN0aW9uKEFUU1BJX1RF
WFQoaW5wdXQuZ2V0KCkpLCAwLCA1LCAxMCwgbnVsbHB0cikpOworICAgIHRlc3QtPnN0YXJ0RXZl
bnRNb25pdG9yKGlucHV0LmdldCgpLCB7ICJvYmplY3Q6dGV4dC1jaGFuZ2VkOmluc2VydCIsICJv
YmplY3Q6dGV4dC1jaGFuZ2VkOmRlbGV0ZSIgfSk7CisgICAgdGVzdC0+a2V5U3Ryb2tlKEdES19L
RVlfYyk7CisgICAgZXZlbnRzID0gdGVzdC0+c3RvcEV2ZW50TW9uaXRvcigyKTsKKyAgICBnX2Fz
c2VydF9jbXB1aW50KGV2ZW50cy5zaXplKCksID09LCAyKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIo
ZXZlbnRzWzBdLT50eXBlLCA9PSwgIm9iamVjdDp0ZXh0LWNoYW5nZWQ6ZGVsZXRlIik7CisgICAg
Z19hc3NlcnRfY21wdWludChldmVudHNbMF0tPmRldGFpbDEsID09LCA2KTsKKyAgICBnX2Fzc2Vy
dF9jbXB1aW50KGV2ZW50c1swXS0+ZGV0YWlsMiwgPT0sIDUpOworICAgIGdfYXNzZXJ0X3RydWUo
R19WQUxVRV9IT0xEU19TVFJJTkcoJmV2ZW50c1swXS0+YW55X2RhdGEpKTsKKyAgICBnX2Fzc2Vy
dF9jbXBzdHIoZ192YWx1ZV9nZXRfc3RyaW5nKCZldmVudHNbMF0tPmFueV9kYXRhKSwgPT0sICJp
cyBhICIpOworICAgIGdfYXNzZXJ0X2NtcHN0cihldmVudHNbMV0tPnR5cGUsID09LCAib2JqZWN0
OnRleHQtY2hhbmdlZDppbnNlcnQiKTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KGV2ZW50c1sxXS0+
ZGV0YWlsMSwgPT0sIDUpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQoZXZlbnRzWzFdLT5kZXRhaWwy
LCA9PSwgMSk7CisgICAgZ19hc3NlcnRfdHJ1ZShHX1ZBTFVFX0hPTERTX1NUUklORygmZXZlbnRz
WzFdLT5hbnlfZGF0YSkpOworICAgIGdfYXNzZXJ0X2NtcHN0cihnX3ZhbHVlX2dldF9zdHJpbmco
JmV2ZW50c1sxXS0+YW55X2RhdGEpLCA9PSwgImMiKTsKKworICAgIGdfYXNzZXJ0X3RydWUoYXRz
cGlfdGV4dF9zZXRfc2VsZWN0aW9uKEFUU1BJX1RFWFQoZGl2LmdldCgpKSwgMCwgMTAsIDE4LCBu
dWxscHRyKSk7CisgICAgdGVzdC0+c3RhcnRFdmVudE1vbml0b3IoZGl2LmdldCgpLCB7ICJvYmpl
Y3Q6dGV4dC1jaGFuZ2VkOmluc2VydCIsICJvYmplY3Q6dGV4dC1jaGFuZ2VkOmRlbGV0ZSIgfSk7
CisgICAgdGVzdC0+a2V5U3Ryb2tlKEdES19LRVlfRGVsZXRlKTsKKyAgICBldmVudHMgPSB0ZXN0
LT5zdG9wRXZlbnRNb25pdG9yKDEpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQoZXZlbnRzLnNpemUo
KSwgPT0sIDEpOworICAgIGdfYXNzZXJ0X2NtcHN0cihldmVudHNbMF0tPnR5cGUsID09LCAib2Jq
ZWN0OnRleHQtY2hhbmdlZDpkZWxldGUiKTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KGV2ZW50c1sw
XS0+ZGV0YWlsMSwgPT0sIDEwKTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KGV2ZW50c1swXS0+ZGV0
YWlsMiwgPT0sIDgpOworICAgIGdfYXNzZXJ0X3RydWUoR19WQUxVRV9IT0xEU19TVFJJTkcoJmV2
ZW50c1swXS0+YW55X2RhdGEpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoZ192YWx1ZV9nZXRfc3Ry
aW5nKCZldmVudHNbMF0tPmFueV9kYXRhKSwgPT0sICJibnRldCBlZCIpOworCisjaWYgVVNFKEFU
U1BJKQorICAgIC8vIFRleHQgaW5wdXQgdmFsdWUgY2hhbmdlZC4KKyAgICB0ZXN0LT5zdGFydEV2
ZW50TW9uaXRvcihpbnB1dC5nZXQoKSwgeyAib2JqZWN0OnRleHQtY2hhbmdlZDppbnNlcnQiLCAi
b2JqZWN0OnRleHQtY2hhbmdlZDpkZWxldGUiIH0pOworICAgIHRlc3QtPnJ1bkphdmFTY3JpcHRB
bmRXYWl0VW50aWxGaW5pc2hlZCgiZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0
JylbMF0udmFsdWUgPSAnZm9vJzsiLCBudWxscHRyKTsKKyAgICBldmVudHMgPSB0ZXN0LT5zdG9w
RXZlbnRNb25pdG9yKDIpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQoZXZlbnRzLnNpemUoKSwgPT0s
IDIpOworICAgIGdfYXNzZXJ0X2NtcHN0cihldmVudHNbMF0tPnR5cGUsID09LCAib2JqZWN0OnRl
eHQtY2hhbmdlZDpkZWxldGUiKTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KGV2ZW50c1swXS0+ZGV0
YWlsMSwgPT0sIDApOworICAgIGdfYXNzZXJ0X2NtcHVpbnQoZXZlbnRzWzBdLT5kZXRhaWwyLCA9
PSwgMTYpOworICAgIGdfYXNzZXJ0X3RydWUoR19WQUxVRV9IT0xEU19TVFJJTkcoJmV2ZW50c1sw
XS0+YW55X2RhdGEpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoZ192YWx1ZV9nZXRfc3RyaW5nKCZl
dmVudHNbMF0tPmFueV9kYXRhKSwgPT0sICJoaXMgYWN0ZXh0IGZpZWxkIik7CisgICAgZ19hc3Nl
cnRfY21wc3RyKGV2ZW50c1sxXS0+dHlwZSwgPT0sICJvYmplY3Q6dGV4dC1jaGFuZ2VkOmluc2Vy
dCIpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQoZXZlbnRzWzFdLT5kZXRhaWwxLCA9PSwgMCk7Cisg
ICAgZ19hc3NlcnRfY21wdWludChldmVudHNbMV0tPmRldGFpbDIsID09LCAzKTsKKyAgICBnX2Fz
c2VydF90cnVlKEdfVkFMVUVfSE9MRFNfU1RSSU5HKCZldmVudHNbMV0tPmFueV9kYXRhKSk7Cisg
ICAgZ19hc3NlcnRfY21wc3RyKGdfdmFsdWVfZ2V0X3N0cmluZygmZXZlbnRzWzFdLT5hbnlfZGF0
YSksID09LCAiZm9vIik7CisjZW5kaWYKK30KKwogdm9pZCBiZWZvcmVBbGwoKQogewogICAgIEFj
Y2Vzc2liaWxpdHlUZXN0OjphZGQoIldlYktpdEFjY2Vzc2liaWxpdHkiLCAiYWNjZXNzaWJsZS9i
YXNpYy1oaWVyYXJjaHkiLCB0ZXN0QWNjZXNzaWJsZUJhc2ljSGllcmFyY2h5KTsKQEAgLTgxMyw2
ICsxNDk1LDEzIEBAIHZvaWQgYmVmb3JlQWxsKCkKICAgICBBY2Nlc3NpYmlsaXR5VGVzdDo6YWRk
KCJXZWJLaXRBY2Nlc3NpYmlsaXR5IiwgImFjY2Vzc2libGUvc3RhdGUtY2hhbmdlZCIsIHRlc3RB
Y2Nlc3NpYmxlU3RhdGVDaGFuZ2VkKTsKICAgICBBY2Nlc3NpYmlsaXR5VGVzdDo6YWRkKCJXZWJL
aXRBY2Nlc3NpYmlsaXR5IiwgImNvbXBvbmVudC9oaXQtdGVzdCIsIHRlc3RDb21wb25lbnRIaXRU
ZXN0KTsKICAgICBBY2Nlc3NpYmlsaXR5VGVzdDo6YWRkKCJXZWJLaXRBY2Nlc3NpYmlsaXR5Iiwg
ImNvbXBvbmVudC9zY3JvbGwtdG8iLCB0ZXN0Q29tcG9uZW50U2Nyb2xsVG8pOworICAgIEFjY2Vz
c2liaWxpdHlUZXN0OjphZGQoIldlYktpdEFjY2Vzc2liaWxpdHkiLCAidGV4dC9iYXNpYyIsIHRl
c3RUZXh0QmFzaWMpOworICAgIEFjY2Vzc2liaWxpdHlUZXN0OjphZGQoIldlYktpdEFjY2Vzc2li
aWxpdHkiLCAidGV4dC9zdXJyb2dhdGUtcGFpciIsIHRlc3RUZXh0U3Vycm9nYXRlUGFpcik7Cisg
ICAgQWNjZXNzaWJpbGl0eVRlc3Q6OmFkZCgiV2ViS2l0QWNjZXNzaWJpbGl0eSIsICJ0ZXh0L2l0
ZXJhdG9yIiwgdGVzdFRleHRJdGVyYXRvcik7CisgICAgQWNjZXNzaWJpbGl0eVRlc3Q6OmFkZCgi
V2ViS2l0QWNjZXNzaWJpbGl0eSIsICJ0ZXh0L2V4dGVudHMiLCB0ZXN0VGV4dEV4dGVudHMpOwor
ICAgIEFjY2Vzc2liaWxpdHlUZXN0OjphZGQoIldlYktpdEFjY2Vzc2liaWxpdHkiLCAidGV4dC9z
ZWxlY3Rpb25zIiwgdGVzdFRleHRTZWxlY3Rpb25zKTsKKyAgICBBY2Nlc3NpYmlsaXR5VGVzdDo6
YWRkKCJXZWJLaXRBY2Nlc3NpYmlsaXR5IiwgInRleHQvYXR0cmlidXRlcyIsIHRlc3RUZXh0QXR0
cmlidXRlcyk7CisgICAgQWNjZXNzaWJpbGl0eVRlc3Q6OmFkZCgiV2ViS2l0QWNjZXNzaWJpbGl0
eSIsICJ0ZXh0L3N0YXRlLWNoYW5nZWQiLCB0ZXN0VGV4dFN0YXRlQ2hhbmdlZCk7CiB9CiAKIHZv
aWQgYWZ0ZXJBbGwoKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>441869</attachid>
            <date>2021-10-20 04:59:58 -0700</date>
            <delta_ts>2021-10-21 05:44:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wcore-a11y-text-atspi.diff</filename>
            <type>text/plain</type>
            <size>114189</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA2ZTM2ODMwNzc3ZDYuLmFjNmQ1MjFiYjIwZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDczIEBACisyMDIxLTEwLTIwICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFA
aWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXVthMTF5XSBBZGQgaW1wbGVtZW50YXRpb24gb2Yg
dGV4dCBpbnRlcmZhY2Ugd2hlbiBidWlsZGluZyB3aXRoIEFUU1BJCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzAyNTgKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNvdXJjZXNHVEsudHh0OgorICAgICAg
ICAqIGFjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpB
WE9iamVjdENhY2hlOjpwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnBvc3RUZXh0UmVwbGFjZW1lbnROb3RpZmljYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6cG9zdFRleHRSZXBsYWNlbWVudE5v
dGlmaWNhdGlvbkZvclRleHRDb250cm9sKToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2Fj
aGU6OmVucXVldWVQYXNzd29yZFZhbHVlQ2hhbmdlTm90aWZpY2F0aW9uKToKKyAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaDoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9i
amVjdDo6dGV4dEl0ZXJhdG9yQmVoYXZpb3JGb3JUZXh0UmFuZ2UgY29uc3QpOgorICAgICAgICAq
IGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oOgorICAgICAgICAqIGFjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjppbmRleEZvclZpc2libGVQb3NpdGlvbiBjb25zdCk6
CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hdHNwaS9BWE9iamVjdENhY2hlQXRzcGkuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6cG9zdFRleHRTdGF0ZUNoYW5nZVBsYXRm
b3JtTm90aWZpY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnBvc3RU
ZXh0UmVwbGFjZW1lbnRQbGF0Zm9ybU5vdGlmaWNhdGlvbkZvclRleHRDb250cm9sKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnBvc3RUZXh0UmVwbGFjZW1lbnRQbGF0Zm9ybU5v
dGlmaWNhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpub2RlVGV4dENo
YW5nZVBsYXRmb3JtTm90aWZpY2F0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBhY2Nlc3NpYmls
aXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlBdHNwaS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5QXRzcGk6OnRleHRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlBdHNwaTo6dGV4dEF0dHJpYnV0ZXNDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2Vzc2liaWxpdHlBdHNwaTo6dGV4dENhcmV0TW92ZWQpOgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eUF0c3BpOjp0ZXh0U2VsZWN0aW9uQ2hhbmdlZCk6CisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5QXRzcGkuaDoKKyAgICAgICAgKiBhY2Nlc3NpYmls
aXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlBdHNwaUVudW1zLmg6CisgICAgICAgICogYWNjZXNzaWJp
bGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6cm9sZUlzVGV4dFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVj
dEF0c3BpOjppbnRlcmZhY2VzRm9yT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlPYmplY3RBdHNwaTo6cGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
T2JqZWN0QXRzcGk6OmJ1aWxkSW50ZXJmYWNlcyBjb25zdCk6CisgICAgICAgICogYWNjZXNzaWJp
bGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkuaDoKKyAgICAgICAgKiBhY2Nlc3Np
YmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RUZXh0QXRzcGkuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6YXRzcGlCb3VuZGFyeVRv
VGV4dEdyYW51bGFyaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RB
dHNwaTo6YXRzcGlHcmFudWxhcml0eVRvVGV4dEdyYW51bGFyaXR5KToKKyAgICAgICAgKFdlYkNv
cmU6Om9mZnNldE1hcHBpbmcpOgorICAgICAgICAoV2ViQ29yZTo6VVRGMTZPZmZzZXRUb1VURjgp
OgorICAgICAgICAoV2ViQ29yZTo6VVRGOE9mZnNldFRvVVRGMTYpOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjp0ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OmdldExlbmd0aEZvclRleHRSYW5nZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjphbGxvd3NUZXh0UmFuZ2VzIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6dGV4dElu
c2VydGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6dGV4
dERlbGV0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpi
b3VuZGFyeU9mZnNldCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2Jq
ZWN0QXRzcGk6OnRleHRBdE9mZnNldCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3Np
YmlsaXR5T2JqZWN0QXRzcGk6OmNoYXJhY3RlckF0T2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6Ym91bmRzRm9yUmFuZ2UgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjp0ZXh0RXh0ZW50cyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6Om9mZnNl
dEF0UG9pbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0
c3BpOjpib3VuZHNGb3JTZWxlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNz
aWJpbGl0eU9iamVjdEF0c3BpOjpzZWxlY3RlZFJhbmdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6c2VsZWN0aW9uQm91bmRzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6c2V0U2VsZWN0ZWRSYW5n
ZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OnNlbGVjdFJh
bmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6c2VsZWN0
aW9uQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6
OnRleHRBdHRyaWJ1dGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlP
YmplY3RBdHNwaTo6dGV4dEF0dHJpYnV0ZXNXaXRoVVRGOE9mZnNldCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OnRleHRBdHRyaWJ1dGVzQ2hhbmdl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OnNjcm9sbFRv
TWFrZVZpc2libGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVj
dEF0c3BpOjpzY3JvbGxUb1BvaW50IGNvbnN0KToKKyAgICAgICAgKiBlZGl0aW5nL2F0c3BpL0Zy
YW1lU2VsZWN0aW9uQXRzcGkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246
Om5vdGlmeUFjY2Vzc2liaWxpdHlGb3JTZWxlY3Rpb25DaGFuZ2UpOgorICAgICAgICAqIGh0bWwv
SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRl
eHRGb3JtQ29udHJvbEVsZW1lbnQ6OnNldElubmVyVGV4dFZhbHVlKToKKwogMjAyMS0xMC0xMyAg
Q2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgQVg6
IEJ1aWxkIHdpdGggaXNvbGF0ZWQgdHJlZSBlbmFibGUgaXMgYnJva2VuIHNpbmNlIHIyODQwNzUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNHVEsudHh0IGIvU291cmNlL1dlYkNv
cmUvU291cmNlc0dUSy50eHQKaW5kZXggNjAzNzM2MzVjMTM1Li42ZmExYzFhZjgzMjMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNHVEsudHh0CisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1NvdXJjZXNHVEsudHh0CkBAIC00Miw2ICs0Miw3IEBAIGFjY2Vzc2liaWxpdHkvYXRrL1dlYktp
dEFjY2Vzc2libGVVdGlsLmNwcAogYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5QXRz
cGkuY3BwCiBhY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RBdHNwaS5jcHAK
IGFjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eU9iamVjdENvbXBvbmVudEF0c3BpLmNw
cAorYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5T2JqZWN0VGV4dEF0c3BpLmNwcAog
YWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5Um9vdEF0c3BpLmNwcAogYWNjZXNzaWJp
bGl0eS9hdHNwaS9BWE9iamVjdENhY2hlQXRzcGkuY3BwCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCmluZGV4IDRkMWI0YjIxODA3OS4uOTcxZmVm
Y2I2ZTgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0
Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNo
ZS5jcHAKQEAgLTE0MDksNyArMTQwOSw3IEBAIHZvaWQgQVhPYmplY3RDYWNoZTo6cG9zdFRleHRT
dGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihOb2RlKiBub2RlLCBjb25zdCBBWFRleHRTdGF0CiAgICAg
aWYgKCFub2RlKQogICAgICAgICByZXR1cm47CiAKLSNpZiBQTEFURk9STShDT0NPQSkKKyNpZiBQ
TEFURk9STShDT0NPQSkgfHwgVVNFKEFUU1BJKQogICAgIHN0b3BDYWNoaW5nQ29tcHV0ZWRPYmpl
Y3RBdHRyaWJ1dGVzKCk7CiAKICAgICBwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKGdl
dE9yQ3JlYXRlKG5vZGUpLCBpbnRlbnQsIHNlbGVjdGlvbik7CkBAIC0xNDI4LDkgKzE0MjgsMTAg
QEAgdm9pZCBBWE9iamVjdENhY2hlOjpwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKGNv
bnN0IFBvc2l0aW9uJiBwb3NpdGlvbiwgY28KIAogICAgIHN0b3BDYWNoaW5nQ29tcHV0ZWRPYmpl
Y3RBdHRyaWJ1dGVzKCk7CiAKLSNpZiBQTEFURk9STShDT0NPQSkKKyNpZiBQTEFURk9STShDT0NP
QSkgfHwgVVNFKEFUU1BJKQogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCA9IGdldE9y
Q3JlYXRlKG5vZGUpOwogICAgIGlmIChvYmplY3QgJiYgb2JqZWN0LT5hY2Nlc3NpYmlsaXR5SXNJ
Z25vcmVkKCkpIHsKKyNpZiBQTEFURk9STShDT0NPQSkKICAgICAgICAgaWYgKHBvc2l0aW9uLmF0
TGFzdEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoKSkgewogICAgICAgICAgICAgaWYgKEFjY2Vzc2li
aWxpdHlPYmplY3QqIG5leHRTaWJsaW5nID0gb2JqZWN0LT5uZXh0U2libGluZ1VuaWdub3JlZCgx
KSkKICAgICAgICAgICAgICAgICBvYmplY3QgPSBuZXh0U2libGluZzsKQEAgLTE0MzgsNiArMTQz
OSwxMSBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6OnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRp
b24oY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uLCBjbwogICAgICAgICAgICAgaWYgKEFjY2Vzc2li
aWxpdHlPYmplY3QqIHByZXZpb3VzU2libGluZyA9IG9iamVjdC0+cHJldmlvdXNTaWJsaW5nVW5p
Z25vcmVkKDEpKQogICAgICAgICAgICAgICAgIG9iamVjdCA9IHByZXZpb3VzU2libGluZzsKICAg
ICAgICAgfQorI2VsaWYgVVNFKEFUU1BJKQorICAgICAgICBhdXRvKiBwYXJlbnQgPSBvYmplY3Qt
PnBhcmVudE9iamVjdFVuaWdub3JlZCgpOworICAgICAgICBpZiAoaXM8QWNjZXNzaWJpbGl0eU9i
amVjdD4ocGFyZW50KSkKKyAgICAgICAgICAgIG9iamVjdCA9IGRvd25jYXN0PEFjY2Vzc2liaWxp
dHlPYmplY3Q+KHBhcmVudCk7CisjZW5kaWYKICAgICB9CiAKICAgICBwb3N0VGV4dFN0YXRlQ2hh
bmdlTm90aWZpY2F0aW9uKG9iamVjdCwgaW50ZW50LCBzZWxlY3Rpb24pOwpAQCAtMTQ1MSw3ICsx
NDU3LDcgQEAgdm9pZCBBWE9iamVjdENhY2hlOjpwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0
aW9uKEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCwKICAgICBBWFRSQUNFKCJBWE9iamVjdENh
Y2hlOjpwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uIik7CiAgICAgc3RvcENhY2hpbmdD
b21wdXRlZE9iamVjdEF0dHJpYnV0ZXMoKTsKIAotI2lmIFBMQVRGT1JNKENPQ09BKQorI2lmIFBM
QVRGT1JNKENPQ09BKSB8fCBVU0UoQVRTUEkpCiAgICAgaWYgKG9iamVjdCkgewogICAgICAgICBp
ZiAoaXNQYXNzd29yZEZpZWxkT3JDb250YWluZWRCeVBhc3N3b3JkRmllbGQob2JqZWN0KSkKICAg
ICAgICAgICAgIHJldHVybjsKQEAgLTE0OTAsNyArMTQ5Niw3IEBAIHZvaWQgQVhPYmplY3RDYWNo
ZTo6cG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihOb2RlKiBub2RlLCBBWFRleHRFZGl0
VHlwZSB0CiAgICAgc3RvcENhY2hpbmdDb21wdXRlZE9iamVjdEF0dHJpYnV0ZXMoKTsKIAogICAg
IEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCA9IGdldE9yQ3JlYXRlKG5vZGUpOwotI2lmIFBM
QVRGT1JNKENPQ09BKQorI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBVU0UoQVRTUEkpCiAgICAgaWYg
KG9iamVjdCkgewogICAgICAgICBpZiAoZW5xdWV1ZVBhc3N3b3JkVmFsdWVDaGFuZ2VOb3RpZmlj
YXRpb24ob2JqZWN0KSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE1MjUsNyArMTUzMSw3IEBA
IHZvaWQgQVhPYmplY3RDYWNoZTo6cG9zdFRleHRSZXBsYWNlbWVudE5vdGlmaWNhdGlvbihOb2Rl
KiBub2RlLCBBWFRleHRFZGl0VHlwZSBkCiAgICAgc3RvcENhY2hpbmdDb21wdXRlZE9iamVjdEF0
dHJpYnV0ZXMoKTsKIAogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCA9IGdldE9yQ3Jl
YXRlKG5vZGUpOwotI2lmIFBMQVRGT1JNKENPQ09BKQorI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBV
U0UoQVRTUEkpCiAgICAgaWYgKG9iamVjdCkgewogICAgICAgICBpZiAoZW5xdWV1ZVBhc3N3b3Jk
VmFsdWVDaGFuZ2VOb3RpZmljYXRpb24ob2JqZWN0KSkKICAgICAgICAgICAgIHJldHVybjsKQEAg
LTE1NDQsNyArMTU1MCw3IEBAIHZvaWQgQVhPYmplY3RDYWNoZTo6cG9zdFRleHRSZXBsYWNlbWVu
dE5vdGlmaWNhdGlvbkZvclRleHRDb250cm9sKEhUTUxUZXh0Rm9ybUNvCiAgICAgc3RvcENhY2hp
bmdDb21wdXRlZE9iamVjdEF0dHJpYnV0ZXMoKTsKIAogICAgIEFjY2Vzc2liaWxpdHlPYmplY3Qq
IG9iamVjdCA9IGdldE9yQ3JlYXRlKCZ0ZXh0Q29udHJvbCk7Ci0jaWYgUExBVEZPUk0oQ09DT0Ep
CisjaWYgUExBVEZPUk0oQ09DT0EpIHx8IFVTRShBVFNQSSkKICAgICBpZiAob2JqZWN0KSB7CiAg
ICAgICAgIGlmIChlbnF1ZXVlUGFzc3dvcmRWYWx1ZUNoYW5nZU5vdGlmaWNhdGlvbihvYmplY3Qp
KQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTU2MCw2ICsxNTY2LDcgQEAgdm9pZCBBWE9iamVj
dENhY2hlOjpwb3N0VGV4dFJlcGxhY2VtZW50Tm90aWZpY2F0aW9uRm9yVGV4dENvbnRyb2woSFRN
TFRleHRGb3JtQ28KIAogYm9vbCBBWE9iamVjdENhY2hlOjplbnF1ZXVlUGFzc3dvcmRWYWx1ZUNo
YW5nZU5vdGlmaWNhdGlvbihBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QpCiB7CisjaWYgUExB
VEZPUk0oQ09DT0EpCiAgICAgaWYgKCFpc1Bhc3N3b3JkRmllbGRPckNvbnRhaW5lZEJ5UGFzc3dv
cmRGaWVsZChvYmplY3QpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTE1NzUsNiArMTU4
MiwxMCBAQCBib29sIEFYT2JqZWN0Q2FjaGU6OmVucXVldWVQYXNzd29yZFZhbHVlQ2hhbmdlTm90
aWZpY2F0aW9uKEFjY2Vzc2liaWxpdHlPYmplY3QqCiAgICAgICAgIG1fcGFzc3dvcmROb3RpZmlj
YXRpb25Qb3N0VGltZXIuc3RhcnRPbmVTaG90KGFjY2Vzc2liaWxpdHlQYXNzd29yZFZhbHVlQ2hh
bmdlTm90aWZpY2F0aW9uSW50ZXJ2YWwpOwogCiAgICAgcmV0dXJuIHRydWU7CisjZWxzZQorICAg
IFVOVVNFRF9QQVJBTShvYmplY3QpOworICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgogfQogCiB2
b2lkIEFYT2JqZWN0Q2FjaGU6OmZyYW1lTG9hZGluZ0V2ZW50Tm90aWZpY2F0aW9uKEZyYW1lKiBm
cmFtZSwgQVhMb2FkaW5nRXZlbnQgbG9hZGluZ0V2ZW50KQpAQCAtMzQ2Myw3ICszNDc0LDcgQEAg
QVhBdHRyaWJ1dGVDYWNoZUVuYWJsZXI6On5BWEF0dHJpYnV0ZUNhY2hlRW5hYmxlcigpCiAgICAg
ICAgIG1fY2FjaGUtPnN0b3BDYWNoaW5nQ29tcHV0ZWRPYmplY3RBdHRyaWJ1dGVzKCk7CiB9CiAK
LSNpZiAhUExBVEZPUk0oQ09DT0EpCisjaWYgIVBMQVRGT1JNKENPQ09BKSAmJiAhVVNFKEFUU1BJ
KQogQVhUZXh0Q2hhbmdlIEFYT2JqZWN0Q2FjaGU6OnRleHRDaGFuZ2VGb3JFZGl0VHlwZShBWFRl
eHRFZGl0VHlwZSB0eXBlKQogewogICAgIHN3aXRjaCAodHlwZSkgewpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaAppbmRleCBhMjU1YzlhN2Y4ZmQuLjM1YWM5
NTdjYmVhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVj
dENhY2hlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hl
LmgKQEAgLTM5OCw3ICszOTgsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICB2b2lkIHBsYXRmb3JtUGVy
Zm9ybURlZmVycmVkQ2FjaGVVcGRhdGUoKTsKIAotI2lmIFBMQVRGT1JNKENPQ09BKQorI2lmIFBM
QVRGT1JNKENPQ09BKSB8fCBVU0UoQVRTUEkpCiAgICAgdm9pZCBwb3N0VGV4dFN0YXRlQ2hhbmdl
UGxhdGZvcm1Ob3RpZmljYXRpb24oQVhDb3JlT2JqZWN0KiwgY29uc3QgQVhUZXh0U3RhdGVDaGFu
Z2VJbnRlbnQmLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJik7CiAgICAgdm9pZCBwb3N0VGV4dFN0
YXRlQ2hhbmdlUGxhdGZvcm1Ob3RpZmljYXRpb24oQWNjZXNzaWJpbGl0eU9iamVjdCosIEFYVGV4
dEVkaXRUeXBlLCBjb25zdCBTdHJpbmcmLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKICAgICB2
b2lkIHBvc3RUZXh0UmVwbGFjZW1lbnRQbGF0Zm9ybU5vdGlmaWNhdGlvbkZvclRleHRDb250cm9s
KEFYQ29yZU9iamVjdCosIGNvbnN0IFN0cmluZyYgZGVsZXRlZFRleHQsIGNvbnN0IFN0cmluZyYg
aW5zZXJ0ZWRUZXh0LCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCYpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKaW5kZXgg
MWE3MGIyZWZkNjIxLi5jYThiZjYwMWUxNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcApAQCAtMzI2NCw4ICszMjY0LDgg
QEAgYm9vbCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpwcmVzc2VkSXNQcmVzZW50KCkgY29uc3QKIFRl
eHRJdGVyYXRvckJlaGF2aW9ycyBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojp0ZXh0SXRlcmF0b3JCZWhh
dmlvckZvclRleHRSYW5nZSgpIGNvbnN0CiB7CiAgICAgVGV4dEl0ZXJhdG9yQmVoYXZpb3JzIGJl
aGF2aW9ycyB7IFRleHRJdGVyYXRvckJlaGF2aW9yOjpJZ25vcmVzU3R5bGVWaXNpYmlsaXR5IH07
Ci0gICAgCi0jaWYgVVNFKEFUSykKKworI2lmIFVTRShBVEspIHx8IFVTRShBVFNQSSkKICAgICAv
LyBXZSBuZWVkIHRvIGVtaXQgcmVwbGFjZWQgZWxlbWVudHMgZm9yIEdUSywgYW5kIHByZXNlbnQK
ICAgICAvLyB0aGVtIHdpdGggdGhlICdvYmplY3QgcmVwbGFjZW1lbnQgY2hhcmFjdGVyJyAoMHhG
RkZDKS4KICAgICBiZWhhdmlvcnMuYWRkKFRleHRJdGVyYXRvckJlaGF2aW9yOjpFbWl0c09iamVj
dFJlcGxhY2VtZW50Q2hhcmFjdGVycyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oCmluZGV4IDcxMzI0MDlhZWVjMy4uZjk4OGZiYzFj
NDE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlPYmplY3QuaApAQCAtODMzLDcgKzgzMyw3IEBAIGlubGluZSB2b2lkIEFjY2Vzc2liaWxpdHlP
YmplY3Q6OnVwZGF0ZUJhY2tpbmdTdG9yZSgpIHsgfQogaW5saW5lIHZvaWQgQWNjZXNzaWJpbGl0
eU9iamVjdDo6ZGV0YWNoUGxhdGZvcm1XcmFwcGVyKEFjY2Vzc2liaWxpdHlEZXRhY2htZW50VHlw
ZSkgeyB9CiAjZW5kaWYKIAotI2lmICEoRU5BQkxFKEFDQ0VTU0lCSUxJVFkpICYmIFVTRShBVEsp
KQorI2lmICEoRU5BQkxFKEFDQ0VTU0lCSUxJVFkpICYmIChVU0UoQVRLKSB8fCBVU0UoQVRTUEkp
KSkKIGlubGluZSBib29sIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmFsbG93c1RleHRSYW5nZXMoKSBj
b25zdCB7IHJldHVybiB0cnVlOyB9CiBpbmxpbmUgdW5zaWduZWQgQWNjZXNzaWJpbGl0eU9iamVj
dDo6Z2V0TGVuZ3RoRm9yVGV4dFJhbmdlKCkgY29uc3QgeyByZXR1cm4gdGV4dCgpLmxlbmd0aCgp
OyB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCmluZGV4IGUyODk1NDlmMDA2ZC4uMzk0ZjVm
NWYyMjgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKQEAgLTIxNjAsNyArMjE2MCw3IEBAIGludCBB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjppbmRleEZvclZpc2libGVQb3NpdGlvbihjb25zdCBW
aXNpYmxlUG9zaXRpb24mIHBvCiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gMDsKIAot
I2lmIFVTRShBVEspCisjaWYgVVNFKEFUSykgfHwgVVNFKEFUU1BJKQogICAgIC8vIFdlIG5lZWQg
dG8gY29uc2lkZXIgcmVwbGFjZWQgZWxlbWVudHMgZm9yIEdUSywgYXMgdGhleSB3aWxsIGJlCiAg
ICAgLy8gcHJlc2VudGVkIHdpdGggdGhlICdvYmplY3QgcmVwbGFjZW1lbnQgY2hhcmFjdGVyJyAo
MHhGRkZDKS4KICAgICBib29sIGZvclNlbGVjdGlvblByZXNlcnZhdGlvbiA9IHRydWU7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FYT2JqZWN0Q2FjaGVB
dHNwaS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FYT2JqZWN0Q2Fj
aGVBdHNwaS5jcHAKaW5kZXggNGE0NzZkNzgyN2I3Li42OGVmMGQ2MmFiMGEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRzcGkvQVhPYmplY3RDYWNoZUF0c3BpLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FYT2JqZWN0Q2FjaGVB
dHNwaS5jcHAKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlICJBWE9iamVjdENhY2hlLmgiCiAK
ICNpZiBFTkFCTEUoQUNDRVNTSUJJTElUWSkgJiYgVVNFKEFUU1BJKQorI2luY2x1ZGUgIkFYVGV4
dFN0YXRlQ2hhbmdlSW50ZW50LmgiCiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eU9iamVjdC5oIgog
I2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaS5oIgogI2luY2x1ZGUgIkFjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QuaCIKQEAgLTE4NSw4ICsxODYsOTMgQEAgdm9pZCBBWE9iamVjdENh
Y2hlOjpwb3N0UGxhdGZvcm1Ob3RpZmljYXRpb24oQVhDb3JlT2JqZWN0KiBjb3JlT2JqZWN0LCBB
WE5vdGlmaWMKICAgICB9CiB9CiAKLXZvaWQgQVhPYmplY3RDYWNoZTo6bm9kZVRleHRDaGFuZ2VQ
bGF0Zm9ybU5vdGlmaWNhdGlvbihBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QsIEFYVGV4dENo
YW5nZSB0ZXh0Q2hhbmdlLCB1bnNpZ25lZCBvZmZzZXQsIGNvbnN0IFN0cmluZyYgdGV4dCkKK3Zv
aWQgQVhPYmplY3RDYWNoZTo6cG9zdFRleHRTdGF0ZUNoYW5nZVBsYXRmb3JtTm90aWZpY2F0aW9u
KEFYQ29yZU9iamVjdCogY29yZU9iamVjdCwgY29uc3QgQVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQm
IGludGVudCwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQogeworICAgIFJFTEVB
U0VfQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAoIWNvcmVPYmplY3QpCisgICAgICAg
IGNvcmVPYmplY3QgPSByb290V2ViQXJlYSgpOworCisgICAgaWYgKCFjb3JlT2JqZWN0KQorICAg
ICAgICByZXR1cm47CisKKyAgICBhdXRvKiB3cmFwcGVyID0gY29yZU9iamVjdC0+d3JhcHBlcigp
OworICAgIGlmICghd3JhcHBlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgd3JhcHBlci0+c2Vs
ZWN0aW9uQ2hhbmdlZChzZWxlY3Rpb24pOworfQorCit2b2lkIEFYT2JqZWN0Q2FjaGU6OnBvc3RU
ZXh0U3RhdGVDaGFuZ2VQbGF0Zm9ybU5vdGlmaWNhdGlvbihBY2Nlc3NpYmlsaXR5T2JqZWN0KiBj
b3JlT2JqZWN0LCBBWFRleHRFZGl0VHlwZSBlZGl0VHlwZSwgY29uc3QgU3RyaW5nJiB0ZXh0LCBj
b25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uKQoreworICAgIFJFTEVBU0VfQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKKyAgICBpZiAodGV4dC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIGF1dG8qIHdyYXBwZXIgPSBjb3JlT2JqZWN0LT53cmFwcGVyKCk7CisgICAgaWYgKCF3
cmFwcGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBzd2l0Y2ggKGVkaXRUeXBlKSB7CisgICAg
Y2FzZSBBWFRleHRFZGl0VHlwZURlbGV0ZToKKyAgICBjYXNlIEFYVGV4dEVkaXRUeXBlQ3V0Ogor
ICAgICAgICB3cmFwcGVyLT50ZXh0RGVsZXRlZCh0ZXh0LCBwb3NpdGlvbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQVhUZXh0RWRpdFR5cGVJbnNlcnQ6CisgICAgY2FzZSBBWFRleHRFZGl0
VHlwZVR5cGluZzoKKyAgICBjYXNlIEFYVGV4dEVkaXRUeXBlRGljdGF0aW9uOgorICAgIGNhc2Ug
QVhUZXh0RWRpdFR5cGVQYXN0ZToKKyAgICAgICAgd3JhcHBlci0+dGV4dEluc2VydGVkKHRleHQs
IHBvc2l0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBWFRleHRFZGl0VHlwZUF0dHJp
YnV0ZXNDaGFuZ2U6CisgICAgICAgIHdyYXBwZXItPnRleHRBdHRyaWJ1dGVzQ2hhbmdlZCgpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEFYVGV4dEVkaXRUeXBlVW5rbm93bjoKKyAgICAgICAg
YnJlYWs7CisgICAgfQorfQorCit2b2lkIEFYT2JqZWN0Q2FjaGU6OnBvc3RUZXh0UmVwbGFjZW1l
bnRQbGF0Zm9ybU5vdGlmaWNhdGlvbkZvclRleHRDb250cm9sKEFYQ29yZU9iamVjdCogY29yZU9i
amVjdCwgY29uc3QgU3RyaW5nJiBkZWxldGVkVGV4dCwgY29uc3QgU3RyaW5nJiBpbnNlcnRlZFRl
eHQsIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50JikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChp
c01haW5UaHJlYWQoKSk7CisgICAgaWYgKCFjb3JlT2JqZWN0KQorICAgICAgICBjb3JlT2JqZWN0
ID0gcm9vdFdlYkFyZWEoKTsKKworICAgIGlmICghY29yZU9iamVjdCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKGRlbGV0ZWRUZXh0LmlzRW1wdHkoKSAmJiBpbnNlcnRlZFRleHQuaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvKiB3cmFwcGVyID0gY29yZU9iamVjdC0+
d3JhcHBlcigpOworICAgIGlmICghd3JhcHBlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KCFkZWxldGVkVGV4dC5pc0VtcHR5KCkpCisgICAgICAgIHdyYXBwZXItPnRleHREZWxldGVkKGRl
bGV0ZWRUZXh0LCBjb3JlT2JqZWN0LT52aXNpYmxlUG9zaXRpb25Gb3JJbmRleCgwKSk7CisgICAg
aWYgKCFpbnNlcnRlZFRleHQuaXNFbXB0eSgpKQorICAgICAgICB3cmFwcGVyLT50ZXh0SW5zZXJ0
ZWQoaW5zZXJ0ZWRUZXh0LCBjb3JlT2JqZWN0LT52aXNpYmxlUG9zaXRpb25Gb3JJbmRleChpbnNl
cnRlZFRleHQubGVuZ3RoKCkpKTsKK30KKwordm9pZCBBWE9iamVjdENhY2hlOjpwb3N0VGV4dFJl
cGxhY2VtZW50UGxhdGZvcm1Ob3RpZmljYXRpb24oQVhDb3JlT2JqZWN0KiBjb3JlT2JqZWN0LCBB
WFRleHRFZGl0VHlwZSwgY29uc3QgU3RyaW5nJiBkZWxldGVkVGV4dCwgQVhUZXh0RWRpdFR5cGUs
IGNvbnN0IFN0cmluZyYgaW5zZXJ0ZWRUZXh0LCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0
aW9uKQoreworICAgIFJFTEVBU0VfQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAoIWNv
cmVPYmplY3QpCisgICAgICAgIGNvcmVPYmplY3QgPSByb290V2ViQXJlYSgpOworCisgICAgaWYg
KCFjb3JlT2JqZWN0KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoZGVsZXRlZFRleHQuaXNF
bXB0eSgpICYmIGluc2VydGVkVGV4dC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAg
IGF1dG8qIHdyYXBwZXIgPSBjb3JlT2JqZWN0LT53cmFwcGVyKCk7CisgICAgaWYgKCF3cmFwcGVy
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIWRlbGV0ZWRUZXh0LmlzRW1wdHkoKSkKKyAg
ICAgICAgd3JhcHBlci0+dGV4dERlbGV0ZWQoZGVsZXRlZFRleHQsIHBvc2l0aW9uKTsKKyAgICBp
ZiAoIWluc2VydGVkVGV4dC5pc0VtcHR5KCkpCisgICAgICAgIHdyYXBwZXItPnRleHRJbnNlcnRl
ZChpbnNlcnRlZFRleHQsIHBvc2l0aW9uKTsKIH0KIAogdm9pZCBBWE9iamVjdENhY2hlOjpmcmFt
ZUxvYWRpbmdFdmVudFBsYXRmb3JtTm90aWZpY2F0aW9uKEFjY2Vzc2liaWxpdHlPYmplY3QqIG9i
amVjdCwgQVhMb2FkaW5nRXZlbnQgbG9hZGluZ0V2ZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5QXRzcGkuY3BwIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5QXRzcGkuY3BwCmluZGV4
IDZmNDQ5YzExMTRjOC4uZDU1NzlmZDcwYjFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlBdHNwaS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5QXRzcGkuY3BwCkBAIC0xNjcs
NiArMTY3LDU0IEBAIHZvaWQgQWNjZXNzaWJpbGl0eUF0c3BpOjpzdGF0ZUNoYW5nZWQoQWNjZXNz
aWJpbGl0eU9iamVjdEF0c3BpJiBhdHNwaU9iamVjdCwgY29uCiAgICAgfSk7CiB9CiAKK3ZvaWQg
QWNjZXNzaWJpbGl0eUF0c3BpOjp0ZXh0Q2hhbmdlZChBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkm
IGF0c3BpT2JqZWN0LCBjb25zdCBjaGFyKiBjaGFuZ2VUeXBlLCBDU3RyaW5nJiYgdGV4dCwgdW5z
aWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoaXNN
YWluVGhyZWFkKCkpOworICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0aGlzLCBhdHNwaU9iamVjdCA9
IFJlZiB7IGF0c3BpT2JqZWN0IH0sIGNoYW5nZVR5cGUgPSBDU3RyaW5nKGNoYW5nZVR5cGUpLCB0
ZXh0ID0gV1RGTW92ZSh0ZXh0KSwgb2Zmc2V0LCBsZW5ndGhdIHsKKyAgICAgICAgaWYgKCFtX2Nv
bm5lY3Rpb24pCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgZ19kYnVzX2Nvbm5lY3Rp
b25fZW1pdF9zaWduYWwobV9jb25uZWN0aW9uLmdldCgpLCBudWxscHRyLCBhdHNwaU9iamVjdC0+
cGF0aCgpLnV0ZjgoKS5kYXRhKCksICJvcmcuYTExeS5hdHNwaS5FdmVudC5PYmplY3QiLCAiVGV4
dENoYW5nZWQiLAorICAgICAgICAgICAgZ192YXJpYW50X25ldygiKHNpaXZhe3N2fSkiLCBjaGFu
Z2VUeXBlLmRhdGEoKSwgb2Zmc2V0LCBsZW5ndGgsIGdfdmFyaWFudF9uZXdfc3RyaW5nKHRleHQu
ZGF0YSgpKSwgbnVsbHB0ciksIG51bGxwdHIpOworICAgIH0pOworfQorCit2b2lkIEFjY2Vzc2li
aWxpdHlBdHNwaTo6dGV4dEF0dHJpYnV0ZXNDaGFuZ2VkKEFjY2Vzc2liaWxpdHlPYmplY3RBdHNw
aSYgYXRzcGlPYmplY3QpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoaXNNYWluVGhyZWFkKCkpOwor
ICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0aGlzLCBhdHNwaU9iamVjdCA9IFJlZiB7IGF0c3BpT2Jq
ZWN0IH1dIHsKKyAgICAgICAgaWYgKCFtX2Nvbm5lY3Rpb24pCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgZ19kYnVzX2Nvbm5lY3Rpb25fZW1pdF9zaWduYWwobV9jb25uZWN0aW9uLmdl
dCgpLCBudWxscHRyLCBhdHNwaU9iamVjdC0+cGF0aCgpLnV0ZjgoKS5kYXRhKCksICJvcmcuYTEx
eS5hdHNwaS5FdmVudC5PYmplY3QiLCAiVGV4dEF0dHJpYnV0ZXNDaGFuZ2VkIiwKKyAgICAgICAg
ICAgIGdfdmFyaWFudF9uZXcoIihzaWl2YXtzdn0pIiwgIiIsIDAsIDAsIGdfdmFyaWFudF9uZXdf
c3RyaW5nKCIiKSwgbnVsbHB0ciksIG51bGxwdHIpOworICAgIH0pOworfQorCit2b2lkIEFjY2Vz
c2liaWxpdHlBdHNwaTo6dGV4dENhcmV0TW92ZWQoQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpJiBh
dHNwaU9iamVjdCwgdW5zaWduZWQgY2FyZXRPZmZzZXQpCit7CisgICAgUkVMRUFTRV9BU1NFUlQo
aXNNYWluVGhyZWFkKCkpOworICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0aGlzLCBhdHNwaU9iamVj
dCA9IFJlZiB7IGF0c3BpT2JqZWN0IH0sIGNhcmV0T2Zmc2V0XSB7CisgICAgICAgIGlmICghbV9j
b25uZWN0aW9uKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGdfZGJ1c19jb25uZWN0
aW9uX2VtaXRfc2lnbmFsKG1fY29ubmVjdGlvbi5nZXQoKSwgbnVsbHB0ciwgYXRzcGlPYmplY3Qt
PnBhdGgoKS51dGY4KCkuZGF0YSgpLCAib3JnLmExMXkuYXRzcGkuRXZlbnQuT2JqZWN0IiwgIlRl
eHRDYXJldE1vdmVkIiwKKyAgICAgICAgICAgIGdfdmFyaWFudF9uZXcoIihzaWl2YXtzdn0pIiwg
IiIsIGNhcmV0T2Zmc2V0LCAwLCBnX3ZhcmlhbnRfbmV3X3N0cmluZygiIiksIG51bGxwdHIpLCBu
dWxscHRyKTsKKyAgICB9KTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5QXRzcGk6OnRleHRTZWxl
Y3Rpb25DaGFuZ2VkKEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaSYgYXRzcGlPYmplY3QpCit7Cisg
ICAgUkVMRUFTRV9BU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIG1fcXVldWUtPmRpc3BhdGNo
KFt0aGlzLCBhdHNwaU9iamVjdCA9IFJlZiB7IGF0c3BpT2JqZWN0IH1dIHsKKyAgICAgICAgaWYg
KCFtX2Nvbm5lY3Rpb24pCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgZ19kYnVzX2Nv
bm5lY3Rpb25fZW1pdF9zaWduYWwobV9jb25uZWN0aW9uLmdldCgpLCBudWxscHRyLCBhdHNwaU9i
amVjdC0+cGF0aCgpLnV0ZjgoKS5kYXRhKCksICJvcmcuYTExeS5hdHNwaS5FdmVudC5PYmplY3Qi
LCAiVGV4dFNlbGVjdGlvbkNoYW5nZWQiLAorICAgICAgICAgICAgZ192YXJpYW50X25ldygiKHNp
aXZhe3N2fSkiLCAiIiwgMCwgMCwgZ192YXJpYW50X25ld19zdHJpbmcoIiIpLCBudWxscHRyKSwg
bnVsbHB0cik7CisgICAgfSk7Cit9CisKIHN0cnVjdCBSb2xlTmFtZUVudHJ5IHsKICAgICBjb25z
dCBjaGFyKiBuYW1lOwogICAgIGNvbnN0IGNoYXIqIGxvY2FsaXplZE5hbWU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlBdHNwaS5o
IGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5QXRzcGku
aAppbmRleCBjZTM3ZjkzZTM4MzEuLjgyNmZkNDQ1ZjhiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5QXRzcGkuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlBdHNwaS5oCkBAIC01
Niw2ICs1NiwxMSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHN0YXRlQ2hhbmdlZChBY2Nlc3NpYmls
aXR5T2JqZWN0QXRzcGkmLCBjb25zdCBjaGFyKiwgYm9vbCk7CiAKKyAgICB2b2lkIHRleHRDaGFu
Z2VkKEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaSYsIGNvbnN0IGNoYXIqLCBDU3RyaW5nJiYsIHVu
c2lnbmVkLCB1bnNpZ25lZCk7CisgICAgdm9pZCB0ZXh0QXR0cmlidXRlc0NoYW5nZWQoQWNjZXNz
aWJpbGl0eU9iamVjdEF0c3BpJik7CisgICAgdm9pZCB0ZXh0Q2FyZXRNb3ZlZChBY2Nlc3NpYmls
aXR5T2JqZWN0QXRzcGkmLCB1bnNpZ25lZCk7CisgICAgdm9pZCB0ZXh0U2VsZWN0aW9uQ2hhbmdl
ZChBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkmKTsKKwogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBs
b2NhbGl6ZWRSb2xlTmFtZShBY2Nlc3NpYmlsaXR5Um9sZSk7CiAKIHByaXZhdGU6CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlBdHNw
aUVudW1zLmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxp
dHlBdHNwaUVudW1zLmgKaW5kZXggMGVhYTI1YjE5YTg4Li5iYzM0ZDFlNzdlZjMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eUF0c3Bp
RW51bXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2li
aWxpdHlBdHNwaUVudW1zLmgKQEAgLTI1OCw2ICsyNTgsMjQgQEAgZW51bSBTY3JvbGxUeXBlIHsK
ICAgICBBbnl3aGVyZQogfTsKIAorZW51bSBUZXh0Qm91bmRhcnlUeXBlIHsKKyAgICBDaGFyQm91
bmRhcnksCisgICAgV29yZFN0YXJ0Qm91bmRhcnksCisgICAgV29yZEVuZEJvdW5kYXJ5LAorICAg
IFNlbnRlbmNlU3RhcnRCb3VuZGFyeSwKKyAgICBTZW50ZW5jZUVuZEJvdW5kYXJ5LAorICAgIExp
bmVTdGFydEJvdW5kYXJ5LAorICAgIExpbmVFbmRCb3VuZGFyeQorfTsKKworZW51bSBUZXh0R3Jh
bnVsYXJpdHlUeXBlIHsKKyAgICBDaGFyR3JhbnVsYXJpdHksCisgICAgV29yZEdyYW51bGFyaXR5
LAorICAgIFNlbnRlbmNlR3JhbnVsYXJpdHksCisgICAgTGluZUdyYW51bGFyaXR5LAorICAgIFBh
cmFncmFwaEdyYW51bGFyaXR5Cit9OworCiB9IC8vIG5hbWVzcGFjZSBBdHNwaQogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RBdHNwaS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RBdHNwaS5jcHAKaW5kZXggMjRmZTVk
NTMzN2ZhLi43MDNjOTc4M2M4MjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RBdHNwaS5jcHAKQEAg
LTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkuaCIKIAog
I2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZKSAmJiBVU0UoQVRTUEkpCisjaW5jbHVkZSAiQVhJc29s
YXRlZE9iamVjdC5oIgogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlBdHNwaUVudW1zLmgiCiAjaW5j
bHVkZSAiQWNjZXNzaWJpbGl0eU9iamVjdEludGVyZmFjZS5oIgogI2luY2x1ZGUgIkFjY2Vzc2li
aWxpdHlSb290QXRzcGkuaCIKQEAgLTI4LDYgKzI5LDcgQEAKICNpbmNsdWRlICJFbGVtZW50SW5s
aW5lcy5oIgogI2luY2x1ZGUgIlJlbmRlckFuY2VzdG9ySXRlcmF0b3IuaCIKICNpbmNsdWRlICJS
ZW5kZXJCbG9jay5oIgorI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogI2luY2x1ZGUgPGdsaWIv
Z2kxOG4tbGliLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYv
VVVJRC5oPgpAQCAtMzksMTAgKzQxLDQ4IEBAIFJlZjxBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk+
IEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6Y3JlYXRlKEFYQ29yZU9iamVjdCogY29yCiAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpKGNvcmVPYmplY3Qp
KTsKIH0KIAorc3RhdGljIGlubGluZSBib29sIHJvbGVJc1RleHRUeXBlKEFjY2Vzc2liaWxpdHlS
b2xlIHJvbGUpCit7CisgICAgcmV0dXJuIHJvbGUgPT0gQWNjZXNzaWJpbGl0eVJvbGU6OlBhcmFn
cmFwaAorICAgICAgICB8fCByb2xlID09IEFjY2Vzc2liaWxpdHlSb2xlOjpIZWFkaW5nCisgICAg
ICAgIHx8IHJvbGUgPT0gQWNjZXNzaWJpbGl0eVJvbGU6OkRpdgorICAgICAgICB8fCByb2xlID09
IEFjY2Vzc2liaWxpdHlSb2xlOjpDZWxsCisgICAgICAgIHx8IHJvbGUgPT0gQWNjZXNzaWJpbGl0
eVJvbGU6OkxpbmsKKyAgICAgICAgfHwgcm9sZSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6V2ViQ29y
ZUxpbmsKKyAgICAgICAgfHwgcm9sZSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6TGlzdEl0ZW0KKyAg
ICAgICAgfHwgcm9sZSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6UHJlCisgICAgICAgIHx8IHJvbGUg
PT0gQWNjZXNzaWJpbGl0eVJvbGU6OkdyaWRDZWxsCisgICAgICAgIHx8IHJvbGUgPT0gQWNjZXNz
aWJpbGl0eVJvbGU6OlRleHRHcm91cAorICAgICAgICB8fCByb2xlID09IEFjY2Vzc2liaWxpdHlS
b2xlOjpBcHBsaWNhdGlvblRleHRHcm91cAorICAgICAgICB8fCByb2xlID09IEFjY2Vzc2liaWxp
dHlSb2xlOjpBcHBsaWNhdGlvbkdyb3VwOworfQorCiBPcHRpb25TZXQ8QWNjZXNzaWJpbGl0eU9i
amVjdEF0c3BpOjpJbnRlcmZhY2U+IEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6aW50ZXJmYWNl
c0Zvck9iamVjdChBWENvcmVPYmplY3QmIGNvcmVPYmplY3QpCiB7CiAgICAgT3B0aW9uU2V0PElu
dGVyZmFjZT4gaW50ZXJmYWNlcyA9IHsgSW50ZXJmYWNlOjpBY2Nlc3NpYmxlLCBJbnRlcmZhY2U6
OkNvbXBvbmVudCB9OwogCisgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGNvcmVPYmplY3Qu
aXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkgPyBjb3JlT2JqZWN0LnJlbmRlcmVyKCkgOiBu
dWxscHRyOworICAgIGlmIChjb3JlT2JqZWN0LnJvbGVWYWx1ZSgpID09IEFjY2Vzc2liaWxpdHlS
b2xlOjpTdGF0aWNUZXh0IHx8IGNvcmVPYmplY3Qucm9sZVZhbHVlKCkgPT0gQWNjZXNzaWJpbGl0
eVJvbGU6OkNvbG9yV2VsbCkKKyAgICAgICAgaW50ZXJmYWNlcy5hZGQoSW50ZXJmYWNlOjpUZXh0
KTsKKyAgICBlbHNlIGlmIChjb3JlT2JqZWN0LmlzVGV4dENvbnRyb2woKSB8fCBjb3JlT2JqZWN0
LmlzTm9uTmF0aXZlVGV4dENvbnRyb2woKSkKKyAgICAgICAgaW50ZXJmYWNlcy5hZGQoSW50ZXJm
YWNlOjpUZXh0KTsKKyAgICBlbHNlIGlmICghY29yZU9iamVjdC5pc1dlYkFyZWEoKSkgeworICAg
ICAgICBpZiAoY29yZU9iamVjdC5yb2xlVmFsdWUoKSAhPSBBY2Nlc3NpYmlsaXR5Um9sZTo6VGFi
bGUpIHsKKyAgICAgICAgICAgIGlmICgocmVuZGVyZXIgJiYgcmVuZGVyZXItPmNoaWxkcmVuSW5s
aW5lKCkpIHx8IHJvbGVJc1RleHRUeXBlKGNvcmVPYmplY3Qucm9sZVZhbHVlKCkpIHx8IGNvcmVP
YmplY3QuaXNNYXRoVG9rZW4oKSkKKyAgICAgICAgICAgICAgICBpbnRlcmZhY2VzLmFkZChJbnRl
cmZhY2U6OlRleHQpOworICAgICAgICB9CisKKyAgICAgICAgLy8gQWRkIHRoZSBUZXh0IGludGVy
ZmFjZSBmb3IgbGlzdCBpdGVtcyB3aG9zZSBmaXJzdCBhY2Nlc3NpYmxlIGNoaWxkIGhhcyBhIHRl
eHQgcmVuZGVyZXIuCisgICAgICAgIGlmIChjb3JlT2JqZWN0LnJvbGVWYWx1ZSgpID09IEFjY2Vz
c2liaWxpdHlSb2xlOjpMaXN0SXRlbSkgeworICAgICAgICAgICAgY29uc3QgYXV0byYgY2hpbGRy
ZW4gPSBjb3JlT2JqZWN0LmNoaWxkcmVuKCk7CisgICAgICAgICAgICBpZiAoIWNoaWxkcmVuLmlz
RW1wdHkoKSkgeworICAgICAgICAgICAgICAgIGF1dG8gY2hpbGRJbnRlcmZhY2VzID0gaW50ZXJm
YWNlc0Zvck9iamVjdCgqY2hpbGRyZW5bMF0pOworICAgICAgICAgICAgICAgIGlmIChjaGlsZElu
dGVyZmFjZXMuY29udGFpbnMoSW50ZXJmYWNlOjpUZXh0KSkKKyAgICAgICAgICAgICAgICAgICAg
aW50ZXJmYWNlcy5hZGQoSW50ZXJmYWNlOjpUZXh0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKwogICAgIHJldHVybiBpbnRlcmZhY2VzOwogfQogCkBAIC00MjcsNiArNDY3LDgg
QEAgY29uc3QgU3RyaW5nJiBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OnBhdGgoKQogICAgICAg
ICAgICAgaW50ZXJmYWNlcy5hcHBlbmQoeyBjb25zdF9jYXN0PEdEQnVzSW50ZXJmYWNlSW5mbyo+
KCZ3ZWJraXRfYWNjZXNzaWJsZV9pbnRlcmZhY2UpLCAmc19hY2Nlc3NpYmxlRnVuY3Rpb25zIH0p
OwogICAgICAgICBpZiAobV9pbnRlcmZhY2VzLmNvbnRhaW5zKEludGVyZmFjZTo6Q29tcG9uZW50
KSkKICAgICAgICAgICAgIGludGVyZmFjZXMuYXBwZW5kKHsgY29uc3RfY2FzdDxHREJ1c0ludGVy
ZmFjZUluZm8qPigmd2Via2l0X2NvbXBvbmVudF9pbnRlcmZhY2UpLCAmc19jb21wb25lbnRGdW5j
dGlvbnMgfSk7CisgICAgICAgIGlmIChtX2ludGVyZmFjZXMuY29udGFpbnMoSW50ZXJmYWNlOjpU
ZXh0KSkKKyAgICAgICAgICAgIGludGVyZmFjZXMuYXBwZW5kKHsgY29uc3RfY2FzdDxHREJ1c0lu
dGVyZmFjZUluZm8qPigmd2Via2l0X3RleHRfaW50ZXJmYWNlKSwgJnNfdGV4dEZ1bmN0aW9ucyB9
KTsKICAgICAgICAgbV9wYXRoID0gYXRzcGlSb290LT5hdHNwaSgpLnJlZ2lzdGVyT2JqZWN0KCp0
aGlzLCBXVEZNb3ZlKGludGVyZmFjZXMpKTsKICAgICB9CiAKQEAgLTEwNDAsNiArMTA4Miw4IEBA
IHZvaWQgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpidWlsZEludGVyZmFjZXMoR1ZhcmlhbnRC
dWlsZGVyKiBidWlsZGVyKSBjb25zdAogICAgICAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQoYnVp
bGRlciwgInMiLCB3ZWJraXRfYWNjZXNzaWJsZV9pbnRlcmZhY2UubmFtZSk7CiAgICAgaWYgKG1f
aW50ZXJmYWNlcy5jb250YWlucyhJbnRlcmZhY2U6OkNvbXBvbmVudCkpCiAgICAgICAgIGdfdmFy
aWFudF9idWlsZGVyX2FkZChidWlsZGVyLCAicyIsIHdlYmtpdF9jb21wb25lbnRfaW50ZXJmYWNl
Lm5hbWUpOworICAgIGlmIChtX2ludGVyZmFjZXMuY29udGFpbnMoSW50ZXJmYWNlOjpUZXh0KSkK
KyAgICAgICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKGJ1aWxkZXIsICJzIiwgd2Via2l0X3RleHRf
aW50ZXJmYWNlLm5hbWUpOwogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6c2Vy
aWFsaXplKEdWYXJpYW50QnVpbGRlciogYnVpbGRlcikgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RB
dHNwaS5oCmluZGV4IDU4OTA1YTI4MzgwYi4uOTY5NzdjYjNiMGZlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RBdHNwaS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eU9i
amVjdEF0c3BpLmgKQEAgLTQ0LDcgKzQ0LDggQEAgcHVibGljOgogCiAgICAgZW51bSBjbGFzcyBJ
bnRlcmZhY2UgOiB1aW50OF90IHsKICAgICAgICAgQWNjZXNzaWJsZSA9IDEgPDwgMCwKLSAgICAg
ICAgQ29tcG9uZW50ID0gMSA8PCAxCisgICAgICAgIENvbXBvbmVudCA9IDEgPDwgMSwKKyAgICAg
ICAgVGV4dCA9IDEgPDwgMgogICAgIH07CiAgICAgY29uc3QgT3B0aW9uU2V0PEludGVyZmFjZT4m
IGludGVyZmFjZXMoKSBjb25zdCB7IHJldHVybiBtX2ludGVyZmFjZXM7IH0KIApAQCAtODIsNiAr
ODMsMzIgQEAgcHVibGljOgogICAgIHZvaWQgc2Nyb2xsVG9NYWtlVmlzaWJsZSh1aW50MzJfdCkg
Y29uc3Q7CiAgICAgdm9pZCBzY3JvbGxUb1BvaW50KGNvbnN0IEludFBvaW50JiwgdWludDMyX3Qp
IGNvbnN0OwogCisgICAgU3RyaW5nIHRleHQoKSBjb25zdDsKKyAgICBlbnVtIGNsYXNzIFRleHRH
cmFudWxhcml0eSB7CisgICAgICAgIENoYXJhY3RlciwKKyAgICAgICAgV29yZFN0YXJ0LAorICAg
ICAgICBXb3JkRW5kLAorICAgICAgICBTZW50ZW5jZVN0YXJ0LAorICAgICAgICBTZW50ZW5jZUVu
ZCwKKyAgICAgICAgTGluZVN0YXJ0LAorICAgICAgICBMaW5lRW5kLAorICAgICAgICBQYXJhZ3Jh
cGgKKyAgICB9OworICAgIEludFBvaW50IGJvdW5kYXJ5T2Zmc2V0KHVuc2lnbmVkLCBUZXh0R3Jh
bnVsYXJpdHkpIGNvbnN0OworICAgIEludFJlY3QgYm91bmRzRm9yUmFuZ2UodW5zaWduZWQsIHVu
c2lnbmVkLCB1aW50MzJfdCkgY29uc3Q7CisgICAgc3RydWN0IFRleHRBdHRyaWJ1dGVzIHsKKyAg
ICAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gYXR0cmlidXRlczsKKyAgICAgICAgaW50IHN0
YXJ0T2Zmc2V0OworICAgICAgICBpbnQgZW5kT2Zmc2V0OworICAgIH07CisgICAgVGV4dEF0dHJp
YnV0ZXMgdGV4dEF0dHJpYnV0ZXMoc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gPSBzdGQ6Om51bGxv
cHQsIGJvb2wgPSBmYWxzZSkgY29uc3Q7CisgICAgSW50UG9pbnQgc2VsZWN0ZWRSYW5nZSgpIGNv
bnN0OworICAgIHZvaWQgc2V0U2VsZWN0ZWRSYW5nZSh1bnNpZ25lZCwgdW5zaWduZWQpOworICAg
IHZvaWQgdGV4dEluc2VydGVkKGNvbnN0IFN0cmluZyYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYp
OworICAgIHZvaWQgdGV4dERlbGV0ZWQoY29uc3QgU3RyaW5nJiwgY29uc3QgVmlzaWJsZVBvc2l0
aW9uJik7CisgICAgdm9pZCB0ZXh0QXR0cmlidXRlc0NoYW5nZWQoKTsKKyAgICB2b2lkIHNlbGVj
dGlvbkNoYW5nZWQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpOworCiBwcml2YXRlOgogICAgIGV4
cGxpY2l0IEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaShBWENvcmVPYmplY3QqKTsKIApAQCAtOTks
MTAgKzEyNiwyNSBAQCBwcml2YXRlOgogICAgIGJvb2wgZm9jdXMoKSBjb25zdDsKICAgICBmbG9h
dCBvcGFjaXR5KCkgY29uc3Q7CiAKKyAgICBzdGF0aWMgVGV4dEdyYW51bGFyaXR5IGF0c3BpQm91
bmRhcnlUb1RleHRHcmFudWxhcml0eSh1aW50MzJfdCk7CisgICAgc3RhdGljIFRleHRHcmFudWxh
cml0eSBhdHNwaUdyYW51bGFyaXR5VG9UZXh0R3JhbnVsYXJpdHkodWludDMyX3QpOworICAgIENT
dHJpbmcgdGV4dChpbnQsIGludCkgY29uc3Q7CisgICAgQ1N0cmluZyB0ZXh0QXRPZmZzZXQoaW50
LCBUZXh0R3JhbnVsYXJpdHksIGludCYsIGludCYpIGNvbnN0OworICAgIGludCBjaGFyYWN0ZXJB
dE9mZnNldChpbnQpIGNvbnN0OworICAgIEludFJlY3QgdGV4dEV4dGVudHMoaW50LCBpbnQsIHVp
bnQzMl90KSBjb25zdDsKKyAgICBpbnQgb2Zmc2V0QXRQb2ludChjb25zdCBJbnRQb2ludCYsIHVp
bnQzMl90KSBjb25zdDsKKyAgICBJbnRQb2ludCBib3VuZHNGb3JTZWxlY3Rpb24oY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYpIGNvbnN0OworICAgIGJvb2wgc2VsZWN0aW9uQm91bmRzKGludCYsIGlu
dCYpIGNvbnN0OworICAgIGJvb2wgc2VsZWN0UmFuZ2UoaW50LCBpbnQpOworICAgIFRleHRBdHRy
aWJ1dGVzIHRleHRBdHRyaWJ1dGVzV2l0aFVURjhPZmZzZXQoc3RkOjpvcHRpb25hbDxpbnQ+ID0g
c3RkOjpudWxsb3B0LCBib29sID0gZmFsc2UpIGNvbnN0OworICAgIGJvb2wgc2Nyb2xsVG9NYWtl
VmlzaWJsZShpbnQsIGludCwgdWludDMyX3QpIGNvbnN0OworICAgIGJvb2wgc2Nyb2xsVG9Qb2lu
dChpbnQsIGludCwgdWludDMyX3QsIGludCwgaW50KSBjb25zdDsKKwogICAgIHN0YXRpYyBPcHRp
b25TZXQ8SW50ZXJmYWNlPiBpbnRlcmZhY2VzRm9yT2JqZWN0KEFYQ29yZU9iamVjdCYpOwogCiAg
ICAgc3RhdGljIEdEQnVzSW50ZXJmYWNlVlRhYmxlIHNfYWNjZXNzaWJsZUZ1bmN0aW9uczsKICAg
ICBzdGF0aWMgR0RCdXNJbnRlcmZhY2VWVGFibGUgc19jb21wb25lbnRGdW5jdGlvbnM7CisgICAg
c3RhdGljIEdEQnVzSW50ZXJmYWNlVlRhYmxlIHNfdGV4dEZ1bmN0aW9uczsKIAogICAgIEFYQ29y
ZU9iamVjdCogbV9heE9iamVjdCB7IG51bGxwdHIgfTsKICAgICBBWENvcmVPYmplY3QqIG1fY29y
ZU9iamVjdCB7IG51bGxwdHIgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eU9iamVjdFRleHRBdHNwaS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RUZXh0QXRzcGkuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZTA3M2MxNWJjMDE1Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nl
c3NpYmlsaXR5T2JqZWN0VGV4dEF0c3BpLmNwcApAQCAtMCwwICsxLDEwMDkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaS5oIgorCisjaWYgRU5BQkxFKEFDQ0VTU0lCSUxJ
VFkpICYmIFVTRShBVFNQSSkKKyNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5QXRzcGlFbnVtcy5oIgor
I2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlPYmplY3RJbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJFZGl0
aW5nLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TY3JlZW4uaCIKKyNpbmNsdWRlICJTdXJyb2dhdGVQ
YWlyQXdhcmVUZXh0SXRlcmF0b3IuaCIKKyNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKKyNpbmNs
dWRlICJWaXNpYmxlVW5pdHMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitBY2Nlc3NpYmls
aXR5T2JqZWN0QXRzcGk6OlRleHRHcmFudWxhcml0eSBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6
OmF0c3BpQm91bmRhcnlUb1RleHRHcmFudWxhcml0eSh1aW50MzJfdCBib3VuZGFyeVR5cGUpCit7
CisgICAgc3dpdGNoIChib3VuZGFyeVR5cGUpIHsKKyAgICBjYXNlIEF0c3BpOjpUZXh0Qm91bmRh
cnlUeXBlOjpDaGFyQm91bmRhcnk6CisgICAgICAgIHJldHVybiBUZXh0R3JhbnVsYXJpdHk6OkNo
YXJhY3RlcjsKKyAgICBjYXNlIEF0c3BpOjpUZXh0Qm91bmRhcnlUeXBlOjpXb3JkU3RhcnRCb3Vu
ZGFyeToKKyAgICAgICAgcmV0dXJuIFRleHRHcmFudWxhcml0eTo6V29yZFN0YXJ0OworICAgIGNh
c2UgQXRzcGk6OlRleHRCb3VuZGFyeVR5cGU6OldvcmRFbmRCb3VuZGFyeToKKyAgICAgICAgcmV0
dXJuIFRleHRHcmFudWxhcml0eTo6V29yZEVuZDsKKyAgICBjYXNlIEF0c3BpOjpUZXh0Qm91bmRh
cnlUeXBlOjpTZW50ZW5jZVN0YXJ0Qm91bmRhcnk6CisgICAgICAgIHJldHVybiBUZXh0R3JhbnVs
YXJpdHk6OlNlbnRlbmNlU3RhcnQ7CisgICAgY2FzZSBBdHNwaTo6VGV4dEJvdW5kYXJ5VHlwZTo6
U2VudGVuY2VFbmRCb3VuZGFyeToKKyAgICAgICAgcmV0dXJuIFRleHRHcmFudWxhcml0eTo6U2Vu
dGVuY2VFbmQ7CisgICAgY2FzZSBBdHNwaTo6VGV4dEJvdW5kYXJ5VHlwZTo6TGluZVN0YXJ0Qm91
bmRhcnk6CisgICAgICAgIHJldHVybiBUZXh0R3JhbnVsYXJpdHk6OkxpbmVTdGFydDsKKyAgICBj
YXNlIEF0c3BpOjpUZXh0Qm91bmRhcnlUeXBlOjpMaW5lRW5kQm91bmRhcnk6CisgICAgICAgIHJl
dHVybiBUZXh0R3JhbnVsYXJpdHk6OkxpbmVFbmQ7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Cit9CisKK0FjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6VGV4dEdyYW51
bGFyaXR5IEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6YXRzcGlHcmFudWxhcml0eVRvVGV4dEdy
YW51bGFyaXR5KHVpbnQzMl90IGJvdW5kYXJ5VHlwZSkKK3sKKyAgICBzd2l0Y2ggKGJvdW5kYXJ5
VHlwZSkgeworICAgIGNhc2UgQXRzcGk6OlRleHRHcmFudWxhcml0eVR5cGU6OkNoYXJHcmFudWxh
cml0eToKKyAgICAgICAgcmV0dXJuIFRleHRHcmFudWxhcml0eTo6Q2hhcmFjdGVyOworICAgIGNh
c2UgQXRzcGk6OlRleHRHcmFudWxhcml0eVR5cGU6OldvcmRHcmFudWxhcml0eToKKyAgICAgICAg
cmV0dXJuIFRleHRHcmFudWxhcml0eTo6V29yZFN0YXJ0OworICAgIGNhc2UgQXRzcGk6OlRleHRH
cmFudWxhcml0eVR5cGU6OlNlbnRlbmNlR3JhbnVsYXJpdHk6CisgICAgICAgIHJldHVybiBUZXh0
R3JhbnVsYXJpdHk6OlNlbnRlbmNlU3RhcnQ7CisgICAgY2FzZSBBdHNwaTo6VGV4dEdyYW51bGFy
aXR5VHlwZTo6TGluZUdyYW51bGFyaXR5OgorICAgICAgICByZXR1cm4gVGV4dEdyYW51bGFyaXR5
OjpMaW5lU3RhcnQ7CisgICAgY2FzZSBBdHNwaTo6VGV4dEdyYW51bGFyaXR5VHlwZTo6UGFyYWdy
YXBoR3JhbnVsYXJpdHk6CisgICAgICAgIHJldHVybiBUZXh0R3JhbnVsYXJpdHk6OlBhcmFncmFw
aDsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworR0RCdXNJ
bnRlcmZhY2VWVGFibGUgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpzX3RleHRGdW5jdGlvbnMg
PSB7CisgICAgLy8gbWV0aG9kX2NhbGwKKyAgICBbXShHREJ1c0Nvbm5lY3Rpb24qLCBjb25zdCBn
Y2hhciosIGNvbnN0IGdjaGFyKiwgY29uc3QgZ2NoYXIqLCBjb25zdCBnY2hhciogbWV0aG9kTmFt
ZSwgR1ZhcmlhbnQqIHBhcmFtZXRlcnMsIEdEQnVzTWV0aG9kSW52b2NhdGlvbiogaW52b2NhdGlv
biwgZ3BvaW50ZXIgdXNlckRhdGEpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWlzTWFpblRo
cmVhZCgpKTsKKyAgICAgICAgYXV0byBhdHNwaU9iamVjdCA9IFJlZiB7ICpzdGF0aWNfY2FzdDxB
Y2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkqPih1c2VyRGF0YSkgfTsKKyAgICAgICAgYXRzcGlPYmpl
Y3QtPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOworCisgICAgICAgIGlmICghZ19zdHJjbXAwKG1ldGhv
ZE5hbWUsICJHZXRTdHJpbmdBdE9mZnNldCIpKSB7CisgICAgICAgICAgICBpbnQgb2Zmc2V0Owor
ICAgICAgICAgICAgdWludDMyX3QgZ3JhbnVsYXJpdHlUeXBlOworICAgICAgICAgICAgZ192YXJp
YW50X2dldChwYXJhbWV0ZXJzLCAiKGl1KSIsICZvZmZzZXQsICZncmFudWxhcml0eVR5cGUpOwor
ICAgICAgICAgICAgaW50IHN0YXJ0ID0gMCwgZW5kID0gMDsKKyAgICAgICAgICAgIGF1dG8gdGV4
dCA9IGF0c3BpT2JqZWN0LT50ZXh0QXRPZmZzZXQob2Zmc2V0LCBhdHNwaUdyYW51bGFyaXR5VG9U
ZXh0R3JhbnVsYXJpdHkoZ3JhbnVsYXJpdHlUeXBlKSwgc3RhcnQsIGVuZCk7CisgICAgICAgICAg
ICBnX2RidXNfbWV0aG9kX2ludm9jYXRpb25fcmV0dXJuX3ZhbHVlKGludm9jYXRpb24sIGdfdmFy
aWFudF9uZXcoIihzaWkpIiwgdGV4dC5pc051bGwoKSA/ICIiIDogdGV4dC5kYXRhKCksIHN0YXJ0
LCBlbmQpKTsKKyAgICAgICAgfSBlbHNlIGlmICghZ19zdHJjbXAwKG1ldGhvZE5hbWUsICJHZXRU
ZXh0IikpIHsKKyAgICAgICAgICAgIGludCBzdGFydCwgZW5kOworICAgICAgICAgICAgZ192YXJp
YW50X2dldChwYXJhbWV0ZXJzLCAiKGlpKSIsICZzdGFydCwgJmVuZCk7CisgICAgICAgICAgICBh
dXRvIHRleHQgPSBhdHNwaU9iamVjdC0+dGV4dChzdGFydCwgZW5kKTsKKyAgICAgICAgICAgIGdf
ZGJ1c19tZXRob2RfaW52b2NhdGlvbl9yZXR1cm5fdmFsdWUoaW52b2NhdGlvbiwgZ192YXJpYW50
X25ldygiKHMpIiwgdGV4dC5pc051bGwoKSA/ICIiIDogdGV4dC5kYXRhKCkpKTsKKyAgICAgICAg
fSBlbHNlIGlmICghZ19zdHJjbXAwKG1ldGhvZE5hbWUsICJTZXRDYXJldE9mZnNldCIpKSB7Cisg
ICAgICAgICAgICBpbnQgb2Zmc2V0OworICAgICAgICAgICAgZ192YXJpYW50X2dldChwYXJhbWV0
ZXJzLCAiKGkpIiwgJm9mZnNldCk7CisgICAgICAgICAgICBnX2RidXNfbWV0aG9kX2ludm9jYXRp
b25fcmV0dXJuX3ZhbHVlKGludm9jYXRpb24sIGdfdmFyaWFudF9uZXcoIihiKSIsIGF0c3BpT2Jq
ZWN0LT5zZWxlY3RSYW5nZShvZmZzZXQsIG9mZnNldCkpKTsKKyAgICAgICAgfSBlbHNlIGlmICgh
Z19zdHJjbXAwKG1ldGhvZE5hbWUsICJHZXRUZXh0QmVmb3JlT2Zmc2V0IikpIHsKKyAgICAgICAg
ICAgIGdfZGJ1c19tZXRob2RfaW52b2NhdGlvbl9yZXR1cm5fZXJyb3JfbGl0ZXJhbChpbnZvY2F0
aW9uLCBHX0RCVVNfRVJST1IsIEdfREJVU19FUlJPUl9OT1RfU1VQUE9SVEVELCAiIik7CisgICAg
ICAgIH0gZWxzZSBpZiAoIWdfc3RyY21wMChtZXRob2ROYW1lLCAiR2V0VGV4dEF0T2Zmc2V0Iikp
IHsKKyAgICAgICAgICAgIGludCBvZmZzZXQ7CisgICAgICAgICAgICB1aW50MzJfdCBib3VuZGFy
eVR5cGU7CisgICAgICAgICAgICBnX3ZhcmlhbnRfZ2V0KHBhcmFtZXRlcnMsICIoaXUpIiwgJm9m
ZnNldCwgJmJvdW5kYXJ5VHlwZSk7CisgICAgICAgICAgICBpbnQgc3RhcnQgPSAwLCBlbmQgPSAw
OworICAgICAgICAgICAgYXV0byB0ZXh0ID0gYXRzcGlPYmplY3QtPnRleHRBdE9mZnNldChvZmZz
ZXQsIGF0c3BpQm91bmRhcnlUb1RleHRHcmFudWxhcml0eShib3VuZGFyeVR5cGUpLCBzdGFydCwg
ZW5kKTsKKyAgICAgICAgICAgIGdfZGJ1c19tZXRob2RfaW52b2NhdGlvbl9yZXR1cm5fdmFsdWUo
aW52b2NhdGlvbiwgZ192YXJpYW50X25ldygiKHNpaSkiLCB0ZXh0LmlzTnVsbCgpID8gIiIgOiB0
ZXh0LmRhdGEoKSwgc3RhcnQsIGVuZCkpOworICAgICAgICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAo
bWV0aG9kTmFtZSwgIkdldFRleHRBZnRlck9mZnNldCIpKQorICAgICAgICAgICAgZ19kYnVzX21l
dGhvZF9pbnZvY2F0aW9uX3JldHVybl9lcnJvcl9saXRlcmFsKGludm9jYXRpb24sIEdfREJVU19F
UlJPUiwgR19EQlVTX0VSUk9SX05PVF9TVVBQT1JURUQsICIiKTsKKyAgICAgICAgZWxzZSBpZiAo
IWdfc3RyY21wMChtZXRob2ROYW1lLCAiR2V0Q2hhcmFjdGVyQXRPZmZzZXQiKSkgeworICAgICAg
ICAgICAgaW50IG9mZnNldDsKKyAgICAgICAgICAgIGdfdmFyaWFudF9nZXQocGFyYW1ldGVycywg
IihpKSIsICZvZmZzZXQpOworICAgICAgICAgICAgZ19kYnVzX21ldGhvZF9pbnZvY2F0aW9uX3Jl
dHVybl92YWx1ZShpbnZvY2F0aW9uLCBnX3ZhcmlhbnRfbmV3KCIoaSkiLCBhdHNwaU9iamVjdC0+
Y2hhcmFjdGVyQXRPZmZzZXQob2Zmc2V0KSkpOworICAgICAgICB9IGVsc2UgaWYgKCFnX3N0cmNt
cDAobWV0aG9kTmFtZSwgIkdldEF0dHJpYnV0ZVZhbHVlIikpIHsKKyAgICAgICAgICAgIGludCBv
ZmZzZXQ7CisgICAgICAgICAgICBjb25zdCBjaGFyKiBuYW1lOworICAgICAgICAgICAgZ192YXJp
YW50X2dldChwYXJhbWV0ZXJzLCAiKGkmcykiLCAmb2Zmc2V0LCAmbmFtZSk7CisgICAgICAgICAg
ICBhdXRvIGF0dHJpYnV0ZXMgPSBhdHNwaU9iamVjdC0+dGV4dEF0dHJpYnV0ZXNXaXRoVVRGOE9m
ZnNldChvZmZzZXQpOworICAgICAgICAgICAgZ19kYnVzX21ldGhvZF9pbnZvY2F0aW9uX3JldHVy
bl92YWx1ZShpbnZvY2F0aW9uLCBnX3ZhcmlhbnRfbmV3KCIocykiLCBhdHRyaWJ1dGVzLmF0dHJp
YnV0ZXMuZ2V0KFN0cmluZzo6ZnJvbVVURjgobmFtZSkpLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICAg
ICAgfSBlbHNlIGlmICghZ19zdHJjbXAwKG1ldGhvZE5hbWUsICJHZXRBdHRyaWJ1dGVzIikpIHsK
KyAgICAgICAgICAgIGludCBvZmZzZXQ7CisgICAgICAgICAgICBnX3ZhcmlhbnRfZ2V0KHBhcmFt
ZXRlcnMsICIoaSkiLCAmb2Zmc2V0KTsKKyAgICAgICAgICAgIGF1dG8gYXR0cmlidXRlcyA9IGF0
c3BpT2JqZWN0LT50ZXh0QXR0cmlidXRlc1dpdGhVVEY4T2Zmc2V0KG9mZnNldCk7CisgICAgICAg
ICAgICBHVmFyaWFudEJ1aWxkZXIgYnVpbGRlciA9IEdfVkFSSUFOVF9CVUlMREVSX0lOSVQoR19W
QVJJQU5UX1RZUEUoImF7c3N9IikpOworICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBpdCA6
IGF0dHJpYnV0ZXMuYXR0cmlidXRlcykKKyAgICAgICAgICAgICAgICBnX3ZhcmlhbnRfYnVpbGRl
cl9hZGQoJmJ1aWxkZXIsICJ7c3N9IiwgaXQua2V5LnV0ZjgoKS5kYXRhKCksIGl0LnZhbHVlLnV0
ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgZ19kYnVzX21ldGhvZF9pbnZvY2F0aW9uX3JldHVy
bl92YWx1ZShpbnZvY2F0aW9uLCBnX3ZhcmlhbnRfbmV3KCIoYXtzc31paSkiLCAmYnVpbGRlciwg
YXR0cmlidXRlcy5zdGFydE9mZnNldCwgYXR0cmlidXRlcy5lbmRPZmZzZXQpKTsKKyAgICAgICAg
fSBlbHNlIGlmICghZ19zdHJjbXAwKG1ldGhvZE5hbWUsICJHZXRBdHRyaWJ1dGVSdW4iKSkgewor
ICAgICAgICAgICAgaW50IG9mZnNldDsKKyAgICAgICAgICAgIGdib29sZWFuIGluY2x1ZGVEZWZh
dWx0czsKKyAgICAgICAgICAgIGdfdmFyaWFudF9nZXQocGFyYW1ldGVycywgIihpYikiLCAmb2Zm
c2V0LCAmaW5jbHVkZURlZmF1bHRzKTsKKyAgICAgICAgICAgIGF1dG8gYXR0cmlidXRlcyA9IGF0
c3BpT2JqZWN0LT50ZXh0QXR0cmlidXRlc1dpdGhVVEY4T2Zmc2V0KG9mZnNldCwgaW5jbHVkZURl
ZmF1bHRzKTsKKyAgICAgICAgICAgIEdWYXJpYW50QnVpbGRlciBidWlsZGVyID0gR19WQVJJQU5U
X0JVSUxERVJfSU5JVChHX1ZBUklBTlRfVFlQRSgiYXtzc30iKSk7CisgICAgICAgICAgICBmb3Ig
KGNvbnN0IGF1dG8mIGl0IDogYXR0cmlidXRlcy5hdHRyaWJ1dGVzKQorICAgICAgICAgICAgICAg
IGdfdmFyaWFudF9idWlsZGVyX2FkZCgmYnVpbGRlciwgIntzc30iLCBpdC5rZXkudXRmOCgpLmRh
dGEoKSwgaXQudmFsdWUudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICBnX2RidXNfbWV0aG9k
X2ludm9jYXRpb25fcmV0dXJuX3ZhbHVlKGludm9jYXRpb24sIGdfdmFyaWFudF9uZXcoIihhe3Nz
fWlpKSIsICZidWlsZGVyLCBhdHRyaWJ1dGVzLnN0YXJ0T2Zmc2V0LCBhdHRyaWJ1dGVzLmVuZE9m
ZnNldCkpOworICAgICAgICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAobWV0aG9kTmFtZSwgIkdldERl
ZmF1bHRBdHRyaWJ1dGVzIikgfHwgIWdfc3RyY21wMChtZXRob2ROYW1lLCAiR2V0RGVmYXVsdEF0
dHJpYnV0ZVNldCIpKSB7CisgICAgICAgICAgICBhdXRvIGF0dHJpYnV0ZXMgPSBhdHNwaU9iamVj
dC0+dGV4dEF0dHJpYnV0ZXNXaXRoVVRGOE9mZnNldCgpOworICAgICAgICAgICAgR1ZhcmlhbnRC
dWlsZGVyIGJ1aWxkZXIgPSBHX1ZBUklBTlRfQlVJTERFUl9JTklUKEdfVkFSSUFOVF9UWVBFKCJh
e3NzfSIpKTsKKyAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgaXQgOiBhdHRyaWJ1dGVzLmF0
dHJpYnV0ZXMpCisgICAgICAgICAgICAgICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKCZidWlsZGVy
LCAie3NzfSIsIGl0LmtleS51dGY4KCkuZGF0YSgpLCBpdC52YWx1ZS51dGY4KCkuZGF0YSgpKTsK
KyAgICAgICAgICAgIGdfZGJ1c19tZXRob2RfaW52b2NhdGlvbl9yZXR1cm5fdmFsdWUoaW52b2Nh
dGlvbiwgZ192YXJpYW50X25ldygiKGF7c3N9KSIsICZidWlsZGVyKSk7CisgICAgICAgIH0gZWxz
ZSBpZiAoIWdfc3RyY21wMChtZXRob2ROYW1lLCAiR2V0Q2hhcmFjdGVyRXh0ZW50cyIpKSB7Cisg
ICAgICAgICAgICBpbnQgb2Zmc2V0OworICAgICAgICAgICAgdWludDMyX3QgY29vcmRpbmF0ZVR5
cGU7CisgICAgICAgICAgICBnX3ZhcmlhbnRfZ2V0KHBhcmFtZXRlcnMsICIoaXUpIiwgJm9mZnNl
dCwgJmNvb3JkaW5hdGVUeXBlKTsKKyAgICAgICAgICAgIGF1dG8gZXh0ZW50cyA9IGF0c3BpT2Jq
ZWN0LT50ZXh0RXh0ZW50cyhvZmZzZXQsIG9mZnNldCArIDEsIGNvb3JkaW5hdGVUeXBlKTsKKyAg
ICAgICAgICAgIGdfZGJ1c19tZXRob2RfaW52b2NhdGlvbl9yZXR1cm5fdmFsdWUoaW52b2NhdGlv
biwgZ192YXJpYW50X25ldygiKGlpaWkpIiwgZXh0ZW50cy54KCksIGV4dGVudHMueSgpLCBleHRl
bnRzLndpZHRoKCksIGV4dGVudHMuaGVpZ2h0KCkpKTsKKyAgICAgICAgfSBlbHNlIGlmICghZ19z
dHJjbXAwKG1ldGhvZE5hbWUsICJHZXRSYW5nZUV4dGVudHMiKSkgeworICAgICAgICAgICAgaW50
IHN0YXJ0LCBlbmQ7CisgICAgICAgICAgICB1aW50MzJfdCBjb29yZGluYXRlVHlwZTsKKyAgICAg
ICAgICAgIGdfdmFyaWFudF9nZXQocGFyYW1ldGVycywgIihpaXUpIiwgJnN0YXJ0LCAmZW5kLCAm
Y29vcmRpbmF0ZVR5cGUpOworICAgICAgICAgICAgYXV0byBleHRlbnRzID0gYXRzcGlPYmplY3Qt
PnRleHRFeHRlbnRzKHN0YXJ0LCBlbmQsIGNvb3JkaW5hdGVUeXBlKTsKKyAgICAgICAgICAgIGdf
ZGJ1c19tZXRob2RfaW52b2NhdGlvbl9yZXR1cm5fdmFsdWUoaW52b2NhdGlvbiwgZ192YXJpYW50
X25ldygiKGlpaWkpIiwgZXh0ZW50cy54KCksIGV4dGVudHMueSgpLCBleHRlbnRzLndpZHRoKCks
IGV4dGVudHMuaGVpZ2h0KCkpKTsKKyAgICAgICAgfSBlbHNlIGlmICghZ19zdHJjbXAwKG1ldGhv
ZE5hbWUsICJHZXRPZmZzZXRBdFBvaW50IikpIHsKKyAgICAgICAgICAgIGludCB4LCB5OworICAg
ICAgICAgICAgdWludDMyX3QgY29vcmRpbmF0ZVR5cGU7CisgICAgICAgICAgICBnX3ZhcmlhbnRf
Z2V0KHBhcmFtZXRlcnMsICIoaWl1KSIsICZ4LCAmeSwgJmNvb3JkaW5hdGVUeXBlKTsKKyAgICAg
ICAgICAgIGdfZGJ1c19tZXRob2RfaW52b2NhdGlvbl9yZXR1cm5fdmFsdWUoaW52b2NhdGlvbiwg
Z192YXJpYW50X25ldygiKGkpIiwgYXRzcGlPYmplY3QtPm9mZnNldEF0UG9pbnQoSW50UG9pbnQo
eCwgeSksIGNvb3JkaW5hdGVUeXBlKSkpOworICAgICAgICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAo
bWV0aG9kTmFtZSwgIkdldE5TZWxlY3Rpb25zIikpIHsKKyAgICAgICAgICAgIGludCBzdGFydCwg
ZW5kOworICAgICAgICAgICAgZ19kYnVzX21ldGhvZF9pbnZvY2F0aW9uX3JldHVybl92YWx1ZShp
bnZvY2F0aW9uLCBnX3ZhcmlhbnRfbmV3KCIoaSkiLCBhdHNwaU9iamVjdC0+c2VsZWN0aW9uQm91
bmRzKHN0YXJ0LCBlbmQpICYmIHN0YXJ0ICE9IGVuZCA/IDEgOiAwKSk7CisgICAgICAgIH0gZWxz
ZSBpZiAoIWdfc3RyY21wMChtZXRob2ROYW1lLCAiR2V0U2VsZWN0aW9uIikpIHsKKyAgICAgICAg
ICAgIGludCBzZWxlY3Rpb25OdW1iZXI7CisgICAgICAgICAgICBnX3ZhcmlhbnRfZ2V0KHBhcmFt
ZXRlcnMsICIoaSkiLCAmc2VsZWN0aW9uTnVtYmVyKTsKKyAgICAgICAgICAgIGlmIChzZWxlY3Rp
b25OdW1iZXIpCisgICAgICAgICAgICAgICAgZ19kYnVzX21ldGhvZF9pbnZvY2F0aW9uX3JldHVy
bl9lcnJvcihpbnZvY2F0aW9uLCBHX0RCVVNfRVJST1IsIEdfREJVU19FUlJPUl9JTlZBTElEX0FS
R1MsICJOb3QgYSB2YWxpZCBzZWxlY3Rpb246ICVkIiwgc2VsZWN0aW9uTnVtYmVyKTsKKyAgICAg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGludCBzdGFydCA9IDAsIGVuZCA9IDA7Cisg
ICAgICAgICAgICAgICAgaWYgKGF0c3BpT2JqZWN0LT5zZWxlY3Rpb25Cb3VuZHMoc3RhcnQsIGVu
ZCkgJiYgc3RhcnQgPT0gZW5kKQorICAgICAgICAgICAgICAgICAgICBzdGFydCA9IGVuZCA9IDA7
CisgICAgICAgICAgICAgICAgZ19kYnVzX21ldGhvZF9pbnZvY2F0aW9uX3JldHVybl92YWx1ZShp
bnZvY2F0aW9uLCBnX3ZhcmlhbnRfbmV3KCIoaWkpIiwgc3RhcnQsIGVuZCkpOworICAgICAgICAg
ICAgfQorICAgICAgICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAobWV0aG9kTmFtZSwgIkFkZFNlbGVj
dGlvbiIpKSB7CisgICAgICAgICAgICBpbnQgc3RhcnQsIGVuZDsKKyAgICAgICAgICAgIGdfdmFy
aWFudF9nZXQocGFyYW1ldGVycywgIihpaSkiLCAmc3RhcnQsICZlbmQpOworICAgICAgICAgICAg
Z19kYnVzX21ldGhvZF9pbnZvY2F0aW9uX3JldHVybl92YWx1ZShpbnZvY2F0aW9uLCBnX3Zhcmlh
bnRfbmV3KCIoYikiLCBhdHNwaU9iamVjdC0+c2VsZWN0UmFuZ2Uoc3RhcnQsIGVuZCkpKTsKKyAg
ICAgICAgfSBlbHNlIGlmICghZ19zdHJjbXAwKG1ldGhvZE5hbWUsICJTZXRTZWxlY3Rpb24iKSkg
eworICAgICAgICAgICAgaW50IHN0YXJ0LCBlbmQsIHNlbGVjdGlvbk51bWJlcjsKKyAgICAgICAg
ICAgIGdfdmFyaWFudF9nZXQocGFyYW1ldGVycywgIihpaWkpIiwgJnNlbGVjdGlvbk51bWJlciwg
JnN0YXJ0LCAmZW5kKTsKKyAgICAgICAgICAgIGlmIChzZWxlY3Rpb25OdW1iZXIpCisgICAgICAg
ICAgICAgICAgZ19kYnVzX21ldGhvZF9pbnZvY2F0aW9uX3JldHVybl9lcnJvcihpbnZvY2F0aW9u
LCBHX0RCVVNfRVJST1IsIEdfREJVU19FUlJPUl9JTlZBTElEX0FSR1MsICJOb3QgYSB2YWxpZCBz
ZWxlY3Rpb246ICVkIiwgc2VsZWN0aW9uTnVtYmVyKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBnX2RidXNfbWV0aG9kX2ludm9jYXRpb25fcmV0dXJuX3ZhbHVlKGludm9jYXRp
b24sIGdfdmFyaWFudF9uZXcoIihiKSIsIGF0c3BpT2JqZWN0LT5zZWxlY3RSYW5nZShzdGFydCwg
ZW5kKSkpOworICAgICAgICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAobWV0aG9kTmFtZSwgIlJlbW92
ZVNlbGVjdGlvbiIpKSB7CisgICAgICAgICAgICBpbnQgc2VsZWN0aW9uTnVtYmVyOworICAgICAg
ICAgICAgaW50IGNhcmV0T2Zmc2V0ID0gLTE7CisgICAgICAgICAgICBpZiAoIXNlbGVjdGlvbk51
bWJlcikgeworICAgICAgICAgICAgICAgIGludCBzdGFydCwgZW5kOworICAgICAgICAgICAgICAg
IGlmIChhdHNwaU9iamVjdC0+c2VsZWN0aW9uQm91bmRzKHN0YXJ0LCBlbmQpKQorICAgICAgICAg
ICAgICAgICAgICBjYXJldE9mZnNldCA9IGVuZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGdfZGJ1c19tZXRob2RfaW52b2NhdGlvbl9yZXR1cm5fdmFsdWUoaW52b2NhdGlvbiwgZ192YXJp
YW50X25ldygiKGIpIiwgY2FyZXRPZmZzZXQgIT0gLTEgPyBhdHNwaU9iamVjdC0+c2VsZWN0UmFu
Z2UoY2FyZXRPZmZzZXQsIGNhcmV0T2Zmc2V0KSA6IEZBTFNFKSk7CisgICAgICAgIH0gZWxzZSBp
ZiAoIWdfc3RyY21wMChtZXRob2ROYW1lLCAiU2Nyb2xsU3Vic3RyaW5nVG8iKSkgeworICAgICAg
ICAgICAgaW50IHN0YXJ0LCBlbmQ7CisgICAgICAgICAgICB1aW50MzJfdCBzY3JvbGxUeXBlOwor
ICAgICAgICAgICAgZ192YXJpYW50X2dldChwYXJhbWV0ZXJzLCAiKGlpdSkiLCAmc3RhcnQsICZl
bmQsICZzY3JvbGxUeXBlKTsKKyAgICAgICAgICAgIGdfZGJ1c19tZXRob2RfaW52b2NhdGlvbl9y
ZXR1cm5fdmFsdWUoaW52b2NhdGlvbiwgZ192YXJpYW50X25ldygiKGIpIiwgYXRzcGlPYmplY3Qt
PnNjcm9sbFRvTWFrZVZpc2libGUoc3RhcnQsIGVuZCwgc2Nyb2xsVHlwZSkpKTsKKyAgICAgICAg
fSBlbHNlIGlmICghZ19zdHJjbXAwKG1ldGhvZE5hbWUsICJTY3JvbGxTdWJzdHJpbmdUb1BvaW50
IikpIHsKKyAgICAgICAgICAgIGludCBzdGFydCwgZW5kLCB4LCB5OworICAgICAgICAgICAgdWlu
dDMyX3QgY29vcmRpbmF0ZVR5cGU7CisgICAgICAgICAgICBnX3ZhcmlhbnRfZ2V0KHBhcmFtZXRl
cnMsICIoaWl1aWkpIiwgJnN0YXJ0LCAmZW5kLCAmY29vcmRpbmF0ZVR5cGUsICZ4LCAmeSk7Cisg
ICAgICAgICAgICBnX2RidXNfbWV0aG9kX2ludm9jYXRpb25fcmV0dXJuX3ZhbHVlKGludm9jYXRp
b24sIGdfdmFyaWFudF9uZXcoIihiKSIsIGF0c3BpT2JqZWN0LT5zY3JvbGxUb1BvaW50KHN0YXJ0
LCBlbmQsIGNvb3JkaW5hdGVUeXBlLCB4LCB5KSkpOworICAgICAgICB9IGVsc2UgaWYgKCFnX3N0
cmNtcDAobWV0aG9kTmFtZSwgIkdldEJvdW5kZWRSYW5nZXMiKSB8fCAhZ19zdHJjbXAwKG1ldGhv
ZE5hbWUsICJTY3JvbGxTdWJzdHJpbmdUb1BvaW50IikpCisgICAgICAgICAgICBnX2RidXNfbWV0
aG9kX2ludm9jYXRpb25fcmV0dXJuX2Vycm9yX2xpdGVyYWwoaW52b2NhdGlvbiwgR19EQlVTX0VS
Uk9SLCBHX0RCVVNfRVJST1JfTk9UX1NVUFBPUlRFRCwgIiIpOworICAgIH0sCisgICAgLy8gZ2V0
X3Byb3BlcnR5CisgICAgW10oR0RCdXNDb25uZWN0aW9uKiwgY29uc3QgZ2NoYXIqLCBjb25zdCBn
Y2hhciosIGNvbnN0IGdjaGFyKiwgY29uc3QgZ2NoYXIqIHByb3BlcnR5TmFtZSwgR0Vycm9yKiog
ZXJyb3IsIGdwb2ludGVyIHVzZXJEYXRhKSAtPiBHVmFyaWFudCogeworICAgICAgICBSRUxFQVNF
X0FTU0VSVCghaXNNYWluVGhyZWFkKCkpOworICAgICAgICBhdXRvIGF0c3BpT2JqZWN0ID0gUmVm
IHsgKnN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaSo+KHVzZXJEYXRhKSB9Owor
ICAgICAgICBhdHNwaU9iamVjdC0+dXBkYXRlQmFja2luZ1N0b3JlKCk7CisKKyAgICAgICAgaWYg
KCFnX3N0cmNtcDAocHJvcGVydHlOYW1lLCAiQ2hhcmFjdGVyQ291bnQiKSkKKyAgICAgICAgICAg
IHJldHVybiBnX3ZhcmlhbnRfbmV3X2ludDMyKGdfdXRmOF9zdHJsZW4oYXRzcGlPYmplY3QtPnRl
eHQoKS51dGY4KCkuZGF0YSgpLCAtMSkpOworICAgICAgICBpZiAoIWdfc3RyY21wMChwcm9wZXJ0
eU5hbWUsICJDYXJldE9mZnNldCIpKSB7CisgICAgICAgICAgICBpbnQgc3RhcnQgPSAwLCBlbmQg
PSAwOworICAgICAgICAgICAgcmV0dXJuIGdfdmFyaWFudF9uZXdfaW50MzIoYXRzcGlPYmplY3Qt
PnNlbGVjdGlvbkJvdW5kcyhzdGFydCwgZW5kKSA/IGVuZCA6IC0xKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGdfc2V0X2Vycm9yKGVycm9yLCBHX0lPX0VSUk9SLCBHX0lPX0VSUk9SX05PVF9TVVBQ
T1JURUQsICJVbmtub3duIHByb3BlcnR5ICclcyciLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICB9LAorICAgIC8vIHNldF9wcm9wZXJ0eSwKKyAgICBudWxscHRy
LAorICAgIC8vIHBhZGRpbmcKKyAgICBudWxscHRyCit9OworCitzdGF0aWMgVmVjdG9yPHVuc2ln
bmVkLCAxMjg+IG9mZnNldE1hcHBpbmcoY29uc3QgU3RyaW5nJiB0ZXh0KQoreworICAgIGlmICh0
ZXh0LmlzOEJpdCgpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgVmVjdG9yPHVuc2lnbmVk
LCAxMjg+IG9mZnNldHM7CisgICAgU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yIGl0ZXJh
dG9yKHRleHQuY2hhcmFjdGVyczE2KCksIDAsIHRleHQubGVuZ3RoKCksIHRleHQubGVuZ3RoKCkp
OworICAgIFVDaGFyMzIgY2hhcmFjdGVyOworICAgIHVuc2lnbmVkIGNsdXN0ZXJMZW5ndGggPSAw
OworICAgIHVuc2lnbmVkIGk7CisgICAgZm9yIChpID0gMDsgaXRlcmF0b3IuY29uc3VtZShjaGFy
YWN0ZXIsIGNsdXN0ZXJMZW5ndGgpOyBpdGVyYXRvci5hZHZhbmNlKGNsdXN0ZXJMZW5ndGgpLCAr
K2kpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IGNsdXN0ZXJMZW5ndGg7ICsr
aikKKyAgICAgICAgICAgIG9mZnNldHMuYXBwZW5kKGkpOworICAgIH0KKyAgICBvZmZzZXRzLmFw
cGVuZChpKyspOworICAgIHJldHVybiBvZmZzZXRzOworfQorCitzdGF0aWMgaW5saW5lIHVuc2ln
bmVkIFVURjE2T2Zmc2V0VG9VVEY4KGNvbnN0IFZlY3Rvcjx1bnNpZ25lZCwgMTI4PiYgbWFwcGlu
ZywgdW5zaWduZWQgb2Zmc2V0KQoreworICAgIHJldHVybiBtYXBwaW5nLmlzRW1wdHkoKSA/IG9m
ZnNldCA6IG1hcHBpbmdbb2Zmc2V0XTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBVVEY4
T2Zmc2V0VG9VVEYxNihjb25zdCBWZWN0b3I8dW5zaWduZWQsIDEyOD4mIG1hcHBpbmcsIHVuc2ln
bmVkIG9mZnNldCkKK3sKKyAgICBpZiAobWFwcGluZy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
biBvZmZzZXQ7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBvZmZzZXQ7IGkgPCBtYXBwaW5nLnNp
emUoKTsgKytpKSB7CisgICAgICAgIGlmIChtYXBwaW5nW2ldID09IG9mZnNldCkKKyAgICAgICAg
ICAgIHJldHVybiBpOworICAgIH0KKyAgICByZXR1cm4gbWFwcGluZy5zaXplKCk7Cit9CisKK1N0
cmluZyBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OnRleHQoKSBjb25zdAoreworICAgIEFYQ29y
ZU9iamVjdCogYXhPYmplY3QgPSBpc01haW5UaHJlYWQoKSA/IG1fY29yZU9iamVjdCA6IG1fYXhP
YmplY3Q7CisgICAgaWYgKCFheE9iamVjdCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworI2lmIEVO
QUJMRShJTlBVVF9UWVBFX0NPTE9SKQorICAgIGlmIChheE9iamVjdC0+cm9sZVZhbHVlKCkgPT0g
QWNjZXNzaWJpbGl0eVJvbGU6OkNvbG9yV2VsbCkgeworICAgICAgICBhdXRvIGNvbG9yID0gY29u
dmVydENvbG9yPFNSR0JBPGZsb2F0Pj4oYXhPYmplY3QtPmNvbG9yVmFsdWUoKSk7CisgICAgICAg
IEdVbmlxdWVQdHI8Y2hhcj4gY29sb3JTdHJpbmcoZ19zdHJkdXBfcHJpbnRmKCJyZ2IgJTcuNWYg
JTcuNWYgJTcuNWYgMSIsIGNvbG9yLnJlZCwgY29sb3IuZ3JlZW4sIGNvbG9yLmJsdWUpKTsKKyAg
ICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoY29sb3JTdHJpbmcuZ2V0KCkpOworICAgIH0K
KyNlbmRpZgorCisgICAgaWYgKGF4T2JqZWN0LT5pc1RleHRDb250cm9sKCkpCisgICAgICAgIHJl
dHVybiBheE9iamVjdC0+ZG9BWFN0cmluZ0ZvclJhbmdlKHsgMCwgU3RyaW5nOjpNYXhMZW5ndGgg
fSk7CisKKyAgICBhdXRvIHZhbHVlID0gYXhPYmplY3QtPnN0cmluZ1ZhbHVlKCk7CisgICAgaWYg
KCF2YWx1ZS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlOworCisgICAgaWYgKGF4T2Jq
ZWN0ID09IG1fY29yZU9iamVjdCkKKyAgICAgICAgcmV0dXJuIG1fY29yZU9iamVjdC0+dGV4dFVu
ZGVyRWxlbWVudChBY2Nlc3NpYmlsaXR5VGV4dFVuZGVyRWxlbWVudE1vZGUoQWNjZXNzaWJpbGl0
eVRleHRVbmRlckVsZW1lbnRNb2RlOjpUZXh0VW5kZXJFbGVtZW50TW9kZUluY2x1ZGVBbGxDaGls
ZHJlbikpOworCisgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHk6OnJldHJpZXZlVmFsdWVGcm9tTWFp
blRocmVhZDxTdHJpbmc+KFt0aGlzXSgpIC0+IFN0cmluZyB7CisgICAgICAgIGlmIChtX2NvcmVP
YmplY3QpCisgICAgICAgICAgICBtX2NvcmVPYmplY3QtPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOwor
CisgICAgICAgIGlmICghbV9jb3JlT2JqZWN0KQorICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAg
ICAgICAgcmV0dXJuIG1fY29yZU9iamVjdC0+dGV4dFVuZGVyRWxlbWVudChBY2Nlc3NpYmlsaXR5
VGV4dFVuZGVyRWxlbWVudE1vZGUoQWNjZXNzaWJpbGl0eVRleHRVbmRlckVsZW1lbnRNb2RlOjpU
ZXh0VW5kZXJFbGVtZW50TW9kZUluY2x1ZGVBbGxDaGlsZHJlbikpLmlzb2xhdGVkQ29weSgpOwor
ICAgIH0pOworfQorCit1bnNpZ25lZCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpnZXRMZW5ndGhGb3JU
ZXh0UmFuZ2UoKSBjb25zdAoreworICAgIFJFTEVBU0VfQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
KyAgICAvLyBGSVhNRTogdGhpcyBzaG91bGQgcHJvYmFibHkgYmUgaW4gc3luYyB3aXRoIEFjY2Vz
c2liaWxpdHlPYmplY3RBdHNwaTo6dGV4dCgpLgorICAgIHVuc2lnbmVkIHRleHRMZW5ndGggPSB0
ZXh0KCkubGVuZ3RoKCk7CisgICAgaWYgKHRleHRMZW5ndGgpCisgICAgICAgIHJldHVybiB0ZXh0
TGVuZ3RoOworCisgICAgTm9kZSogbm9kZSA9IHRoaXMtPm5vZGUoKTsKKyAgICBSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyID0gbm9kZSA/IG5vZGUtPnJlbmRlcmVyKCkgOiBudWxscHRyOworICAgIGlm
IChpczxSZW5kZXJUZXh0PihyZW5kZXJlcikpCisgICAgICAgIHRleHRMZW5ndGggPSBkb3duY2Fz
dDxSZW5kZXJUZXh0PigqcmVuZGVyZXIpLnRleHQoKS5sZW5ndGgoKTsKKworICAgIGlmICghdGV4
dExlbmd0aCAmJiBhbGxvd3NUZXh0UmFuZ2VzKCkpCisgICAgICAgIHRleHRMZW5ndGggPSB0ZXh0
VW5kZXJFbGVtZW50KEFjY2Vzc2liaWxpdHlUZXh0VW5kZXJFbGVtZW50TW9kZShBY2Nlc3NpYmls
aXR5VGV4dFVuZGVyRWxlbWVudE1vZGU6OlRleHRVbmRlckVsZW1lbnRNb2RlSW5jbHVkZUFsbENo
aWxkcmVuKSkubGVuZ3RoKCk7CisKKyAgICByZXR1cm4gdGV4dExlbmd0aDsKK30KKworYm9vbCBB
Y2Nlc3NpYmlsaXR5T2JqZWN0OjphbGxvd3NUZXh0UmFuZ2VzKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworQ1N0cmluZyBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OnRleHQoaW50
IHN0YXJ0T2Zmc2V0LCBpbnQgZW5kT2Zmc2V0KSBjb25zdAoreworICAgIFJFTEVBU0VfQVNTRVJU
KCFpc01haW5UaHJlYWQoKSk7CisgICAgYXV0byB1dGYxNlRleHQgPSB0ZXh0KCk7CisgICAgYXV0
byB1dGY4VGV4dCA9IHV0ZjE2VGV4dC51dGY4KCk7CisgICAgaWYgKHV0ZjhUZXh0LmlzTnVsbCgp
KQorICAgICAgICByZXR1cm4geyB9OworCisgICAgYXV0byBsZW5ndGggPSBzdGF0aWNfY2FzdDxp
bnQ+KGdfdXRmOF9zdHJsZW4odXRmOFRleHQuZGF0YSgpLCAtMSkpOworICAgIGlmIChlbmRPZmZz
ZXQgPT0gLTEpCisgICAgICAgIGVuZE9mZnNldCA9IGxlbmd0aDsKKworICAgIGlmIChzdGFydE9m
ZnNldCA8IDAgfHwgZW5kT2Zmc2V0IDwgMCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGlm
IChlbmRPZmZzZXQgPD0gc3RhcnRPZmZzZXQpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBp
ZiAoIXN0YXJ0T2Zmc2V0ICYmIGVuZE9mZnNldCA9PSBsZW5ndGgpCisgICAgICAgIHJldHVybiB1
dGY4VGV4dDsKKworICAgIEdVbmlxdWVQdHI8Y2hhcj4gc3Vic3RyaW5nKGdfdXRmOF9zdWJzdHJp
bmcodXRmOFRleHQuZGF0YSgpLCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KSk7CisgICAgcmV0dXJu
IHN1YnN0cmluZy5nZXQoKTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OnRl
eHRJbnNlcnRlZChjb25zdCBTdHJpbmcmIGluc2VydGVkVGV4dCwgY29uc3QgVmlzaWJsZVBvc2l0
aW9uJiBwb3NpdGlvbikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChpc01haW5UaHJlYWQoKSk7Cisg
ICAgaWYgKCFtX2lzUmVnaXN0ZXJlZC5sb2FkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
ICghbV9pbnRlcmZhY2VzLmNvbnRhaW5zKEludGVyZmFjZTo6VGV4dCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGF1dG8gdXRmMTZUZXh0ID0gdGV4dCgpOworICAgIGF1dG8gdXRmOFRleHQgPSB1
dGYxNlRleHQudXRmOCgpOworICAgIGF1dG8gdXRmMTZPZmZzZXQgPSBtX2NvcmVPYmplY3QtPmlu
ZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKHBvc2l0aW9uKTsKKyAgICBhdXRvIG1hcHBpbmcgPSBvZmZz
ZXRNYXBwaW5nKHV0ZjE2VGV4dCk7CisgICAgYXV0byBvZmZzZXQgPSBVVEYxNk9mZnNldFRvVVRG
OChtYXBwaW5nLCB1dGYxNk9mZnNldCk7CisgICAgYXV0byB1dGY4SW5zZXJ0ZWRUZXh0ID0gaW5z
ZXJ0ZWRUZXh0LnV0ZjgoKTsKKyAgICBhdXRvIGluc2VydGVkVGV4dExlbmd0aCA9IGdfdXRmOF9z
dHJsZW4odXRmOEluc2VydGVkVGV4dC5kYXRhKCksIC0xKTsKKyAgICByb290KCktPmF0c3BpKCku
dGV4dENoYW5nZWQoKnRoaXMsICJpbnNlcnQiLCBXVEZNb3ZlKHV0ZjhJbnNlcnRlZFRleHQpLCBv
ZmZzZXQgLSBpbnNlcnRlZFRleHRMZW5ndGgsIGluc2VydGVkVGV4dExlbmd0aCk7Cit9CisKK3Zv
aWQgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjp0ZXh0RGVsZXRlZChjb25zdCBTdHJpbmcmIGRl
bGV0ZWRUZXh0LCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uKQoreworICAgIFJFTEVB
U0VfQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAoIW1faXNSZWdpc3RlcmVkLmxvYWQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX2ludGVyZmFjZXMuY29udGFpbnMoSW50
ZXJmYWNlOjpUZXh0KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byB1dGYxNlRleHQgPSB0
ZXh0KCk7CisgICAgYXV0byB1dGY4VGV4dCA9IHV0ZjE2VGV4dC51dGY4KCk7CisgICAgYXV0byB1
dGYxNk9mZnNldCA9IG1fY29yZU9iamVjdC0+aW5kZXhGb3JWaXNpYmxlUG9zaXRpb24ocG9zaXRp
b24pOworICAgIGF1dG8gbWFwcGluZyA9IG9mZnNldE1hcHBpbmcodXRmMTZUZXh0KTsKKyAgICBh
dXRvIG9mZnNldCA9IFVURjE2T2Zmc2V0VG9VVEY4KG1hcHBpbmcsIHV0ZjE2T2Zmc2V0KTsKKyAg
ICBhdXRvIHV0ZjhEZWxldGVkVGV4dCA9IGRlbGV0ZWRUZXh0LnV0ZjgoKTsKKyAgICBhdXRvIGRl
bGV0ZWRUZXh0TGVuZ3RoID0gZ191dGY4X3N0cmxlbih1dGY4RGVsZXRlZFRleHQuZGF0YSgpLCAt
MSk7CisgICAgcm9vdCgpLT5hdHNwaSgpLnRleHRDaGFuZ2VkKCp0aGlzLCAiZGVsZXRlIiwgV1RG
TW92ZSh1dGY4RGVsZXRlZFRleHQpLCBvZmZzZXQsIGRlbGV0ZWRUZXh0TGVuZ3RoKTsKK30KKwor
SW50UG9pbnQgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpib3VuZGFyeU9mZnNldCh1bnNpZ25l
ZCB1dGYxNk9mZnNldCwgVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KSBjb25zdAoreworICAg
IHJldHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZVZhbHVlRnJvbU1haW5UaHJlYWQ8SW50UG9p
bnQ+KFt0aGlzLCB1dGYxNk9mZnNldCwgZ3JhbnVsYXJpdHldKCkgLT4gSW50UG9pbnQgeworICAg
ICAgICBpZiAobV9jb3JlT2JqZWN0KQorICAgICAgICAgICAgbV9jb3JlT2JqZWN0LT51cGRhdGVC
YWNraW5nU3RvcmUoKTsKKworICAgICAgICBpZiAoIW1fY29yZU9iamVjdCkKKyAgICAgICAgICAg
IHJldHVybiB7IH07CisKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIG9mZnNldFBvc2l0aW9uID0g
bV9jb3JlT2JqZWN0LT52aXNpYmxlUG9zaXRpb25Gb3JJbmRleCh1dGYxNk9mZnNldCk7CisgICAg
ICAgIFZpc2libGVQb3NpdGlvbiBzdGFydFBvc2l0aW9uLCBlbmRQb3N0aW9uOworICAgICAgICBz
d2l0Y2ggKGdyYW51bGFyaXR5KSB7CisgICAgICAgIGNhc2UgVGV4dEdyYW51bGFyaXR5OjpDaGFy
YWN0ZXI6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICBjYXNlIFRleHRHcmFudWxhcml0eTo6V29yZFN0YXJ0OiB7CisgICAgICAgICAgICBzdGFydFBv
c2l0aW9uID0gaXNTdGFydE9mV29yZChvZmZzZXRQb3NpdGlvbikgJiYgZGVwcmVjYXRlZElzRWRp
dGluZ1doaXRlc3BhY2Uob2Zmc2V0UG9zaXRpb24uY2hhcmFjdGVyQmVmb3JlKCkpID8gb2Zmc2V0
UG9zaXRpb24gOiBzdGFydE9mV29yZChvZmZzZXRQb3NpdGlvbiwgTGVmdFdvcmRJZk9uQm91bmRh
cnkpOworICAgICAgICAgICAgZW5kUG9zdGlvbiA9IG5leHRXb3JkUG9zaXRpb24oc3RhcnRQb3Np
dGlvbik7CisgICAgICAgICAgICBhdXRvIHBvc2l0aW9uQWZ0ZXJTcGFjaW5nQW5kRm9sbG93aW5n
V29yZCA9IG5leHRXb3JkUG9zaXRpb24oZW5kUG9zdGlvbik7CisgICAgICAgICAgICBpZiAocG9z
aXRpb25BZnRlclNwYWNpbmdBbmRGb2xsb3dpbmdXb3JkICE9IGVuZFBvc3Rpb24pIHsKKyAgICAg
ICAgICAgICAgICBhdXRvIHByZXZpb3VzUG9zaXRpb24gPSBwcmV2aW91c1dvcmRQb3NpdGlvbihw
b3NpdGlvbkFmdGVyU3BhY2luZ0FuZEZvbGxvd2luZ1dvcmQpOworICAgICAgICAgICAgICAgIGlm
IChwcmV2aW91c1Bvc2l0aW9uID09IHN0YXJ0UG9zaXRpb24pCisgICAgICAgICAgICAgICAgICAg
IGVuZFBvc3Rpb24gPSBwb3NpdGlvbkFmdGVyU3BhY2luZ0FuZEZvbGxvd2luZ1dvcmQ7CisgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBlbmRQb3N0aW9uID0gcHJldmlv
dXNQb3NpdGlvbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGNhc2UgVGV4dEdyYW51bGFyaXR5OjpXb3JkRW5kOiB7CisgICAgICAgICAgICBz
dGFydFBvc2l0aW9uID0gcHJldmlvdXNXb3JkUG9zaXRpb24ob2Zmc2V0UG9zaXRpb24pOworICAg
ICAgICAgICAgYXV0byBwb3NpdGlvbkJlZm9yZVNwYWNpbmdBbmRQcmV2aW91c1dvcmQgPSBwcmV2
aW91c1dvcmRQb3NpdGlvbihzdGFydFBvc2l0aW9uKTsKKyAgICAgICAgICAgIGlmIChwb3NpdGlv
bkJlZm9yZVNwYWNpbmdBbmRQcmV2aW91c1dvcmQgIT0gc3RhcnRQb3NpdGlvbikKKyAgICAgICAg
ICAgICAgICBzdGFydFBvc2l0aW9uID0gbmV4dFdvcmRQb3NpdGlvbihwb3NpdGlvbkJlZm9yZVNw
YWNpbmdBbmRQcmV2aW91c1dvcmQpOworICAgICAgICAgICAgZW5kUG9zdGlvbiA9IGVuZE9mV29y
ZChvZmZzZXRQb3NpdGlvbik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBjYXNlIFRleHRHcmFudWxhcml0eTo6U2VudGVuY2VTdGFydDogeworICAgICAgICAgICAgc3Rh
cnRQb3NpdGlvbiA9IHN0YXJ0T2ZTZW50ZW5jZShvZmZzZXRQb3NpdGlvbik7CisgICAgICAgICAg
ICBlbmRQb3N0aW9uID0gZW5kT2ZTZW50ZW5jZShzdGFydFBvc2l0aW9uKTsKKyAgICAgICAgICAg
IGlmIChvZmZzZXRQb3NpdGlvbiA9PSBlbmRQb3N0aW9uKSB7CisgICAgICAgICAgICAgICAgc3Rh
cnRQb3NpdGlvbiA9IG5leHRTZW50ZW5jZVBvc2l0aW9uKHN0YXJ0UG9zaXRpb24pOworICAgICAg
ICAgICAgICAgIGVuZFBvc3Rpb24gPSBlbmRPZlNlbnRlbmNlKHN0YXJ0UG9zaXRpb24pOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBU
ZXh0R3JhbnVsYXJpdHk6OlNlbnRlbmNlRW5kOgorICAgICAgICAgICAgc3RhcnRQb3NpdGlvbiA9
IHByZXZpb3VzU2VudGVuY2VQb3NpdGlvbihvZmZzZXRQb3NpdGlvbik7CisgICAgICAgICAgICBl
bmRQb3N0aW9uID0gZW5kT2ZTZW50ZW5jZShvZmZzZXRQb3NpdGlvbik7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBUZXh0R3JhbnVsYXJpdHk6OkxpbmVTdGFydDoKKyAgICAgICAg
ICAgIHN0YXJ0UG9zaXRpb24gPSBsb2dpY2FsU3RhcnRPZkxpbmUob2Zmc2V0UG9zaXRpb24pOwor
ICAgICAgICAgICAgZW5kUG9zdGlvbiA9IG5leHRMaW5lUG9zaXRpb24ob2Zmc2V0UG9zaXRpb24s
IDApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVGV4dEdyYW51bGFyaXR5OjpM
aW5lRW5kOgorICAgICAgICAgICAgc3RhcnRQb3NpdGlvbiA9IGxvZ2ljYWxTdGFydE9mTGluZShv
ZmZzZXRQb3NpdGlvbik7CisgICAgICAgICAgICBlbmRQb3N0aW9uID0gbG9naWNhbEVuZE9mTGlu
ZShvZmZzZXRQb3NpdGlvbik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUZXh0
R3JhbnVsYXJpdHk6OlBhcmFncmFwaDoKKyAgICAgICAgICAgIHN0YXJ0UG9zaXRpb24gPSBzdGFy
dE9mUGFyYWdyYXBoKG9mZnNldFBvc2l0aW9uKTsKKyAgICAgICAgICAgIGVuZFBvc3Rpb24gPSBl
bmRPZlBhcmFncmFwaChvZmZzZXRQb3NpdGlvbik7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4geyBtX2NvcmVPYmplY3QtPmluZGV4Rm9yVmlzaWJsZVBvc2l0
aW9uKHN0YXJ0UG9zaXRpb24pLCBtX2NvcmVPYmplY3QtPmluZGV4Rm9yVmlzaWJsZVBvc2l0aW9u
KGVuZFBvc3Rpb24pIH07CisgICAgfSk7Cit9CisKK0NTdHJpbmcgQWNjZXNzaWJpbGl0eU9iamVj
dEF0c3BpOjp0ZXh0QXRPZmZzZXQoaW50IG9mZnNldCwgVGV4dEdyYW51bGFyaXR5IGdyYW51bGFy
aXR5LCBpbnQmIHN0YXJ0T2Zmc2V0LCBpbnQmIGVuZE9mZnNldCkgY29uc3QKK3sKKyAgICBSRUxF
QVNFX0FTU0VSVCghaXNNYWluVGhyZWFkKCkpOworICAgIGF1dG8gdXRmMTZUZXh0ID0gdGV4dCgp
OworICAgIGF1dG8gdXRmOFRleHQgPSB1dGYxNlRleHQudXRmOCgpOworICAgIGlmICh1dGY4VGV4
dC5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGF1dG8gbGVuZ3RoID0gc3Rh
dGljX2Nhc3Q8aW50PihnX3V0Zjhfc3RybGVuKHV0ZjhUZXh0LmRhdGEoKSwgLTEpKTsKKyAgICBp
ZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgPiBsZW5ndGgpCisgICAgICAgIHJldHVybiB7IH07CisK
KyAgICBpZiAoZ3JhbnVsYXJpdHkgPT0gVGV4dEdyYW51bGFyaXR5OjpDaGFyYWN0ZXIpIHsKKyAg
ICAgICAgc3RhcnRPZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgIGVuZE9mZnNldCA9IHN0ZDo6bWlu
KG9mZnNldCArIDEsIGxlbmd0aCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXV0byBtYXBwaW5n
ID0gb2Zmc2V0TWFwcGluZyh1dGYxNlRleHQpOworICAgICAgICBhdXRvIHV0ZjE2T2Zmc2V0ID0g
VVRGOE9mZnNldFRvVVRGMTYobWFwcGluZywgb2Zmc2V0KTsKKyAgICAgICAgYXV0byBib3VuZGFy
eU9mZnNldCA9IHRoaXMtPmJvdW5kYXJ5T2Zmc2V0KHV0ZjE2T2Zmc2V0LCBncmFudWxhcml0eSk7
CisgICAgICAgIHN0YXJ0T2Zmc2V0ID0gVVRGMTZPZmZzZXRUb1VURjgobWFwcGluZywgc3RkOjpt
YXg8aW50Pihib3VuZGFyeU9mZnNldC54KCksIDApKTsKKyAgICAgICAgZW5kT2Zmc2V0ID0gVVRG
MTZPZmZzZXRUb1VURjgobWFwcGluZywgc3RkOjptaW48aW50Pihib3VuZGFyeU9mZnNldC55KCks
IHV0ZjE2VGV4dC5sZW5ndGgoKSkpOworICAgIH0KKworICAgIEdVbmlxdWVQdHI8Y2hhcj4gc3Vi
c3RyaW5nKGdfdXRmOF9zdWJzdHJpbmcodXRmOFRleHQuZGF0YSgpLCBzdGFydE9mZnNldCwgZW5k
T2Zmc2V0KSk7CisgICAgcmV0dXJuIHN1YnN0cmluZy5nZXQoKTsKK30KKworaW50IEFjY2Vzc2li
aWxpdHlPYmplY3RBdHNwaTo6Y2hhcmFjdGVyQXRPZmZzZXQoaW50IG9mZnNldCkgY29uc3QKK3sK
KyAgICBSRUxFQVNFX0FTU0VSVCghaXNNYWluVGhyZWFkKCkpOworICAgIGF1dG8gdXRmOFRleHQg
PSB0ZXh0KCkudXRmOCgpOworICAgIGlmICh1dGY4VGV4dC5pc051bGwoKSkKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICBhdXRvIGxlbmd0aCA9IHN0YXRpY19jYXN0PGludD4oZ191dGY4X3N0cmxl
bih1dGY4VGV4dC5kYXRhKCksIC0xKSk7CisgICAgaWYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ID49
IGxlbmd0aCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gZ191dGY4X2dldF9jaGFy
KGdfdXRmOF9vZmZzZXRfdG9fcG9pbnRlcih1dGY4VGV4dC5kYXRhKCksIG9mZnNldCkpOworfQor
CitJbnRSZWN0IEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6Ym91bmRzRm9yUmFuZ2UodW5zaWdu
ZWQgdXRmMTZPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgdWludDMyX3QgY29vcmRpbmF0ZVR5cGUp
IGNvbnN0Cit7CisgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHk6OnJldHJpZXZlVmFsdWVGcm9tTWFp
blRocmVhZDxJbnRSZWN0PihbdGhpcywgdXRmMTZPZmZzZXQsIGxlbmd0aCwgY29vcmRpbmF0ZVR5
cGVdKCkgLT4gSW50UmVjdCB7CisgICAgICAgIGlmIChtX2NvcmVPYmplY3QpCisgICAgICAgICAg
ICBtX2NvcmVPYmplY3QtPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOworCisgICAgICAgIGlmICghbV9j
b3JlT2JqZWN0KQorICAgICAgICAgICAgcmV0dXJuIHsgfTsKKworICAgICAgICBhdXRvIGV4dGVu
dHMgPSBtX2NvcmVPYmplY3QtPmRvQVhCb3VuZHNGb3JSYW5nZShQbGFpblRleHRSYW5nZSh1dGYx
Nk9mZnNldCwgbGVuZ3RoKSk7CisKKyAgICAgICAgYXV0byogZnJhbWVWaWV3ID0gbV9jb3JlT2Jq
ZWN0LT5kb2N1bWVudEZyYW1lVmlldygpOworICAgICAgICBpZiAoIWZyYW1lVmlldykKKyAgICAg
ICAgICAgIHJldHVybiBleHRlbnRzOworCisgICAgICAgIHN3aXRjaCAoY29vcmRpbmF0ZVR5cGUp
IHsKKyAgICAgICAgY2FzZSBBdHNwaTo6Q29vcmRpbmF0ZVR5cGU6OlNjcmVlbkNvb3JkaW5hdGVz
OgorICAgICAgICAgICAgcmV0dXJuIGZyYW1lVmlldy0+Y29udGVudHNUb1NjcmVlbihleHRlbnRz
KTsKKyAgICAgICAgY2FzZSBBdHNwaTo6Q29vcmRpbmF0ZVR5cGU6OldpbmRvd0Nvb3JkaW5hdGVz
OgorICAgICAgICAgICAgcmV0dXJuIGZyYW1lVmlldy0+Y29udGVudHNUb1dpbmRvdyhleHRlbnRz
KTsKKyAgICAgICAgY2FzZSBBdHNwaTo6Q29vcmRpbmF0ZVR5cGU6OlBhcmVudENvb3JkaW5hdGVz
OgorICAgICAgICAgICAgcmV0dXJuIGV4dGVudHM7CisgICAgICAgIH0KKworICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0pOworfQorCitJbnRSZWN0IEFjY2Vzc2li
aWxpdHlPYmplY3RBdHNwaTo6dGV4dEV4dGVudHMoaW50IHN0YXJ0T2Zmc2V0LCBpbnQgZW5kT2Zm
c2V0LCB1aW50MzJfdCBjb29yZGluYXRlVHlwZSkgY29uc3QKK3sKKyAgICBSRUxFQVNFX0FTU0VS
VCghaXNNYWluVGhyZWFkKCkpOworICAgIGF1dG8gdXRmMTZUZXh0ID0gdGV4dCgpOworICAgIGF1
dG8gdXRmOFRleHQgPSB1dGYxNlRleHQudXRmOCgpOworICAgIGlmICh1dGY4VGV4dC5pc051bGwo
KSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGF1dG8gbGVuZ3RoID0gc3RhdGljX2Nhc3Q8
aW50PihnX3V0Zjhfc3RybGVuKHV0ZjhUZXh0LmRhdGEoKSwgLTEpKTsKKyAgICBzdGFydE9mZnNl
dCA9IHN0ZDo6Y2xhbXAoc3RhcnRPZmZzZXQsIDAsIGxlbmd0aCk7CisgICAgaWYgKGVuZE9mZnNl
dCA9PSAtMSkKKyAgICAgICAgZW5kT2Zmc2V0ID0gbGVuZ3RoOworICAgIGVsc2UKKyAgICAgICAg
ZW5kT2Zmc2V0ID0gc3RkOjpjbGFtcChlbmRPZmZzZXQsIDAsIGxlbmd0aCk7CisgICAgaWYgKGVu
ZE9mZnNldCA8PSBzdGFydE9mZnNldCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGF1dG8g
bWFwcGluZyA9IG9mZnNldE1hcHBpbmcodXRmMTZUZXh0KTsKKyAgICBhdXRvIHV0ZjE2U3RhcnRP
ZmZzZXQgPSBVVEY4T2Zmc2V0VG9VVEYxNihtYXBwaW5nLCBzdGFydE9mZnNldCk7CisgICAgYXV0
byB1dGYxNkVuZE9mZnNldCA9IFVURjhPZmZzZXRUb1VURjE2KG1hcHBpbmcsIGVuZE9mZnNldCk7
CisgICAgcmV0dXJuIGJvdW5kc0ZvclJhbmdlKHV0ZjE2U3RhcnRPZmZzZXQsIHV0ZjE2RW5kT2Zm
c2V0IC0gdXRmMTZTdGFydE9mZnNldCwgY29vcmRpbmF0ZVR5cGUpOworfQorCitpbnQgQWNjZXNz
aWJpbGl0eU9iamVjdEF0c3BpOjpvZmZzZXRBdFBvaW50KGNvbnN0IEludFBvaW50JiBwb2ludCwg
dWludDMyX3QgY29vcmRpbmF0ZVR5cGUpIGNvbnN0Cit7CisgICAgUkVMRUFTRV9BU1NFUlQoIWlz
TWFpblRocmVhZCgpKTsKKyAgICBhdXRvIHV0ZjE2VGV4dCA9IHRleHQoKTsKKyAgICBhdXRvIHV0
ZjhUZXh0ID0gdXRmMTZUZXh0LnV0ZjgoKTsKKyAgICBpZiAodXRmOFRleHQuaXNOdWxsKCkpCisg
ICAgICAgIHJldHVybiAtMTsKKworICAgIGF1dG8gdXRmMTZPZmZzZXQgPSBBY2Nlc3NpYmlsaXR5
OjpyZXRyaWV2ZVZhbHVlRnJvbU1haW5UaHJlYWQ8aW50PihbdGhpcywgJnBvaW50LCBjb29yZGlu
YXRlVHlwZV0oKSAtPiBpbnQgeworICAgICAgICBpZiAobV9jb3JlT2JqZWN0KQorICAgICAgICAg
ICAgbV9jb3JlT2JqZWN0LT51cGRhdGVCYWNraW5nU3RvcmUoKTsKKworICAgICAgICBpZiAoIW1f
Y29yZU9iamVjdCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKworICAgICAgICBhdXRvIGNvbnZl
cnRlZFBvaW50ID0gcG9pbnQ7CisgICAgICAgIGlmIChhdXRvKiBmcmFtZVZpZXcgPSBtX2NvcmVP
YmplY3QtPmRvY3VtZW50RnJhbWVWaWV3KCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoY29vcmRp
bmF0ZVR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgQXRzcGk6OkNvb3JkaW5hdGVUeXBlOjpTY3Jl
ZW5Db29yZGluYXRlczoKKyAgICAgICAgICAgICAgICBjb252ZXJ0ZWRQb2ludCA9IGZyYW1lVmll
dy0+c2NyZWVuVG9Db250ZW50cyhwb2ludCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIEF0c3BpOjpDb29yZGluYXRlVHlwZTo6V2luZG93Q29vcmRpbmF0ZXM6Cisg
ICAgICAgICAgICAgICAgY29udmVydGVkUG9pbnQgPSBmcmFtZVZpZXctPndpbmRvd1RvQ29udGVu
dHMocG9pbnQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBBdHNw
aTo6Q29vcmRpbmF0ZVR5cGU6OlBhcmVudENvb3JkaW5hdGVzOgorICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgYXV0byBwb3NpdGlvbiA9
IG1fY29yZU9iamVjdC0+dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoY29udmVydGVkUG9pbnQpOwor
ICAgICAgICBpZiAocG9zaXRpb24uaXNOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gLTE7CisK
KyAgICAgICAgcmV0dXJuIG1fY29yZU9iamVjdC0+aW5kZXhGb3JWaXNpYmxlUG9zaXRpb24ocG9z
aXRpb24pOworICAgIH0pOworCisgICAgaWYgKHV0ZjE2T2Zmc2V0ID09IC0xKQorICAgICAgICBy
ZXR1cm4gLTE7CisKKyAgICByZXR1cm4gVVRGMTZPZmZzZXRUb1VURjgob2Zmc2V0TWFwcGluZyh1
dGYxNlRleHQpLCB1dGYxNk9mZnNldCk7Cit9CisKK0ludFBvaW50IEFjY2Vzc2liaWxpdHlPYmpl
Y3RBdHNwaTo6Ym91bmRzRm9yU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVj
dGlvbikgY29uc3QKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAg
aWYgKHNlbGVjdGlvbi5pc05vbmUoKSkKKyAgICAgICAgcmV0dXJuIHsgLTEsIC0xIH07CisKKyAg
ICBOb2RlKiBub2RlID0gbnVsbHB0cjsKKyAgICBpZiAoIW1fY29yZU9iamVjdC0+aXNOYXRpdmVU
ZXh0Q29udHJvbCgpKQorICAgICAgICBub2RlID0gbV9jb3JlT2JqZWN0LT5ub2RlKCk7CisgICAg
ZWxzZSB7CisgICAgICAgIGF1dG8gcG9zaXRpb25JblRleHRDb250cm9sSW5uZXJFbGVtZW50ID0g
bV9jb3JlT2JqZWN0LT52aXNpYmxlUG9zaXRpb25Gb3JJbmRleCgwKTsKKyAgICAgICAgaWYgKGF1
dG8qIGlubmVyTW9zdE5vZGUgPSBwb3NpdGlvbkluVGV4dENvbnRyb2xJbm5lckVsZW1lbnQuZGVl
cEVxdWl2YWxlbnQoKS5hbmNob3JOb2RlKCkpCisgICAgICAgICAgICBub2RlID0gaW5uZXJNb3N0
Tm9kZS0+cGFyZW50Tm9kZSgpOworICAgIH0KKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVy
biB7IC0xLCAtMSB9OworCisgICAgLy8gV2UgbmVlZCB0byBsaW1pdCBvdXIgc2VhcmNoIHRvIHBv
c2l0aW9ucyB0aGF0IGZhbGwgaW5zaWRlIHRoZSBkb21haW4gb2YgdGhlIGN1cnJlbnQgb2JqZWN0
LgorICAgIGF1dG8gZmlyc3RWYWxpZFBvc2l0aW9uID0gZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVO
b2RlKG5vZGUtPmZpcnN0RGVzY2VuZGFudCgpKTsKKyAgICBhdXRvIGxhc3RWYWxpZFBvc2l0aW9u
ID0gbGFzdFBvc2l0aW9uSW5PckFmdGVyTm9kZShub2RlLT5sYXN0RGVzY2VuZGFudCgpKTsKKwor
ICAgIGlmICghaW50ZXJzZWN0cyhtYWtlVmlzaWJsZVBvc2l0aW9uUmFuZ2UobWFrZVNpbXBsZVJh
bmdlKGZpcnN0VmFsaWRQb3NpdGlvbiwgbGFzdFZhbGlkUG9zaXRpb24pKSwgVmlzaWJsZVBvc2l0
aW9uUmFuZ2Uoc2VsZWN0aW9uKSkpCisgICAgICAgIHJldHVybiB7IC0xLCAtMSB9OworCisgICAg
Ly8gRmluZCB0aGUgcHJvcGVyIHJhbmdlIGZvciB0aGUgc2VsZWN0aW9uIHRoYXQgZmFsbHMgaW5z
aWRlIHRoZSBvYmplY3QuCisgICAgYXV0byBub2RlUmFuZ2VTdGFydCA9IHN0ZDo6bWF4KHNlbGVj
dGlvbi5zdGFydCgpLCBmaXJzdFZhbGlkUG9zaXRpb24pOworICAgIGF1dG8gbm9kZVJhbmdlRW5k
ID0gc3RkOjptaW4oc2VsZWN0aW9uLmVuZCgpLCBsYXN0VmFsaWRQb3NpdGlvbik7CisKKyAgICAv
LyBDYWxjdWxhdGUgcG9zaXRpb24gb2YgdGhlIHNlbGVjdGVkIHJhbmdlIGluc2lkZSB0aGUgb2Jq
ZWN0LgorICAgIGF1dG8gcGFyZW50Rmlyc3RQb3NpdGlvbiA9IGZpcnN0UG9zaXRpb25Jbk9yQmVm
b3JlTm9kZShub2RlKTsKKyAgICBhdXRvIHJhbmdlSW5QYXJlbnQgPSAqbWFrZVNpbXBsZVJhbmdl
KHBhcmVudEZpcnN0UG9zaXRpb24sIG5vZGVSYW5nZVN0YXJ0KTsKKworICAgIC8vIFNldCB2YWx1
ZXMgZm9yIHN0YXJ0IG9mZnNldHMgYW5kIGNhbGN1bGF0ZSBpbml0aWFsIHJhbmdlIGxlbmd0aC4K
KyAgICBpbnQgc3RhcnRPZmZzZXQgPSBjaGFyYWN0ZXJDb3VudChyYW5nZUluUGFyZW50LCBUZXh0
SXRlcmF0b3JCZWhhdmlvcjo6RW1pdHNDaGFyYWN0ZXJzQmV0d2VlbkFsbFZpc2libGVQb3NpdGlv
bnMpOworICAgIGF1dG8gbm9kZVJhbmdlID0gKm1ha2VTaW1wbGVSYW5nZShub2RlUmFuZ2VTdGFy
dCwgbm9kZVJhbmdlRW5kKTsKKyAgICBpbnQgcmFuZ2VMZW5ndGggPSBjaGFyYWN0ZXJDb3VudChu
b2RlUmFuZ2UsIFRleHRJdGVyYXRvckJlaGF2aW9yOjpFbWl0c0NoYXJhY3RlcnNCZXR3ZWVuQWxs
VmlzaWJsZVBvc2l0aW9ucyk7CisgICAgcmV0dXJuIHsgc3RhcnRPZmZzZXQsIHN0YXJ0T2Zmc2V0
ICsgcmFuZ2VMZW5ndGggfTsKK30KKworSW50UG9pbnQgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3Bp
OjpzZWxlY3RlZFJhbmdlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gQWNjZXNzaWJpbGl0eTo6cmV0
cmlldmVWYWx1ZUZyb21NYWluVGhyZWFkPEludFBvaW50PihbdGhpc10oKSAtPiBJbnRQb2ludCB7
CisgICAgICAgIGlmIChtX2NvcmVPYmplY3QpCisgICAgICAgICAgICBtX2NvcmVPYmplY3QtPnVw
ZGF0ZUJhY2tpbmdTdG9yZSgpOworCisgICAgICAgIGlmICghbV9jb3JlT2JqZWN0KQorICAgICAg
ICAgICAgcmV0dXJuIHsgLTEsIC0xIH07CisKKyAgICAgICAgcmV0dXJuIGJvdW5kc0ZvclNlbGVj
dGlvbihtX2NvcmVPYmplY3QtPnNlbGVjdGlvbigpKTsKKyAgICB9KTsKK30KKworYm9vbCBBY2Nl
c3NpYmlsaXR5T2JqZWN0QXRzcGk6OnNlbGVjdGlvbkJvdW5kcyhpbnQmIHN0YXJ0T2Zmc2V0LCBp
bnQmIGVuZE9mZnNldCkgY29uc3QKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCghaXNNYWluVGhyZWFk
KCkpOworICAgIGF1dG8gdXRmMTZUZXh0ID0gdGV4dCgpOworICAgIGF1dG8gdXRmOFRleHQgPSB1
dGYxNlRleHQudXRmOCgpOworICAgIGlmICh1dGY4VGV4dC5pc051bGwoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgYXV0byBib3VuZHMgPSBzZWxlY3RlZFJhbmdlKCk7CisgICAgaWYg
KGJvdW5kcy54KCkgPCAwKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIG1hcHBp
bmcgPSBvZmZzZXRNYXBwaW5nKHV0ZjE2VGV4dCk7CisgICAgc3RhcnRPZmZzZXQgPSBVVEYxNk9m
ZnNldFRvVVRGOChtYXBwaW5nLCBib3VuZHMueCgpKTsKKyAgICBlbmRPZmZzZXQgPSBVVEYxNk9m
ZnNldFRvVVRGOChtYXBwaW5nLCBib3VuZHMueSgpKTsKKworICAgIGF1dG8gbGVuZ3RoID0gc3Rh
dGljX2Nhc3Q8aW50PihnX3V0Zjhfc3RybGVuKHV0ZjhUZXh0LmRhdGEoKSwgLTEpKTsKKyAgICBl
bmRPZmZzZXQgPSBzdGQ6OmNsYW1wKGVuZE9mZnNldCwgMCwgbGVuZ3RoKTsKKyAgICBpZiAoZW5k
T2Zmc2V0IDwgc3RhcnRPZmZzZXQpIHsKKyAgICAgICAgc3RhcnRPZmZzZXQgPSBlbmRPZmZzZXQg
PSAwOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3ZvaWQgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpzZXRTZWxlY3RlZFJhbmdlKHVuc2ln
bmVkIHV0ZjE2T2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgQWNjZXNzaWJpbGl0eTo6
cGVyZm9ybUZ1bmN0aW9uT25NYWluVGhyZWFkKFt0aGlzLCB1dGYxNk9mZnNldCwgbGVuZ3RoXSB7
CisgICAgICAgIGlmIChtX2NvcmVPYmplY3QpCisgICAgICAgICAgICBtX2NvcmVPYmplY3QtPnVw
ZGF0ZUJhY2tpbmdTdG9yZSgpOworCisgICAgICAgIGlmICghbV9jb3JlT2JqZWN0KQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIGF1dG8gcmFuZ2UgPSBtX2NvcmVPYmplY3QtPnZpc2li
bGVQb3NpdGlvblJhbmdlRm9yUmFuZ2UoUGxhaW5UZXh0UmFuZ2UodXRmMTZPZmZzZXQsIGxlbmd0
aCkpOworICAgICAgICBtX2NvcmVPYmplY3QtPnNldFNlbGVjdGVkVmlzaWJsZVBvc2l0aW9uUmFu
Z2UocmFuZ2UpOworICAgIH0pOworfQorCitib29sIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6
c2VsZWN0UmFuZ2UoaW50IHN0YXJ0T2Zmc2V0LCBpbnQgZW5kT2Zmc2V0KQoreworICAgIFJFTEVB
U0VfQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisgICAgYXV0byB1dGYxNlRleHQgPSB0ZXh0KCk7
CisgICAgYXV0byB1dGY4VGV4dCA9IHV0ZjE2VGV4dC51dGY4KCk7CisgICAgaWYgKHV0ZjhUZXh0
LmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGxlbmd0aCA9IHN0
YXRpY19jYXN0PGludD4oZ191dGY4X3N0cmxlbih1dGY4VGV4dC5kYXRhKCksIC0xKSk7CisgICAg
c3RhcnRPZmZzZXQgPSBzdGQ6OmNsYW1wKHN0YXJ0T2Zmc2V0LCAwLCBsZW5ndGgpOworICAgIGlm
IChlbmRPZmZzZXQgPT0gLTEpCisgICAgICAgIGVuZE9mZnNldCA9IGxlbmd0aDsKKyAgICBlbHNl
CisgICAgICAgIGVuZE9mZnNldCA9IHN0ZDo6Y2xhbXAoZW5kT2Zmc2V0LCAwLCBsZW5ndGgpOwor
CisgICAgYXV0byBtYXBwaW5nID0gb2Zmc2V0TWFwcGluZyh1dGYxNlRleHQpOworICAgIGF1dG8g
dXRmMTZTdGFydE9mZnNldCA9IFVURjhPZmZzZXRUb1VURjE2KG1hcHBpbmcsIHN0YXJ0T2Zmc2V0
KTsKKyAgICBhdXRvIHV0ZjE2RW5kT2Zmc2V0ID0gc3RhcnRPZmZzZXQgPT0gZW5kT2Zmc2V0ID8g
dXRmMTZTdGFydE9mZnNldCA6IFVURjhPZmZzZXRUb1VURjE2KG1hcHBpbmcsIGVuZE9mZnNldCk7
CisgICAgc2V0U2VsZWN0ZWRSYW5nZSh1dGYxNlN0YXJ0T2Zmc2V0LCB1dGYxNkVuZE9mZnNldCAt
IHV0ZjE2U3RhcnRPZmZzZXQpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQWNjZXNz
aWJpbGl0eU9iamVjdEF0c3BpOjpzZWxlY3Rpb25DaGFuZ2VkKGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mIHNlbGVjdGlvbikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChpc01haW5UaHJlYWQoKSk7Cisg
ICAgaWYgKCFtX2lzUmVnaXN0ZXJlZC5sb2FkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
ICghbV9pbnRlcmZhY2VzLmNvbnRhaW5zKEludGVyZmFjZTo6VGV4dCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmIChzZWxlY3Rpb24uaXNOb25lKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IGF1dG8gdXRmMTZUZXh0ID0gdGV4dCgpOworICAgIGF1dG8gdXRmOFRleHQgPSB1dGYxNlRleHQu
dXRmOCgpOworICAgIGlmICh1dGY4VGV4dC5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgYXV0byBib3VuZHMgPSBib3VuZHNGb3JTZWxlY3Rpb24oc2VsZWN0aW9uKTsKKyAgICBpZiAo
Ym91bmRzLnkoKSA8IDApCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gbGVuZ3RoID0gZ191
dGY4X3N0cmxlbih1dGY4VGV4dC5kYXRhKCksIC0xKTsKKyAgICBhdXRvIG1hcHBpbmcgPSBvZmZz
ZXRNYXBwaW5nKHV0ZjE2VGV4dCk7CisgICAgYXV0byBjYXJldE9mZnNldCA9IFVURjE2T2Zmc2V0
VG9VVEY4KG1hcHBpbmcsIGJvdW5kcy55KCkpOworICAgIGlmIChjYXJldE9mZnNldCA8PSBsZW5n
dGgpCisgICAgICAgIHJvb3QoKS0+YXRzcGkoKS50ZXh0Q2FyZXRNb3ZlZCgqdGhpcywgY2FyZXRP
ZmZzZXQpOworCisgICAgaWYgKHNlbGVjdGlvbi5pc1JhbmdlKCkpCisgICAgICAgIHJvb3QoKS0+
YXRzcGkoKS50ZXh0U2VsZWN0aW9uQ2hhbmdlZCgqdGhpcyk7Cit9CisKK0FjY2Vzc2liaWxpdHlP
YmplY3RBdHNwaTo6VGV4dEF0dHJpYnV0ZXMgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjp0ZXh0
QXR0cmlidXRlcyhzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB1dGYxNk9mZnNldCwgYm9vbCBpbmNs
dWRlRGVmYXVsdCkgY29uc3QKK3sKKyAgICByZXR1cm4gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVW
YWx1ZUZyb21NYWluVGhyZWFkPFRleHRBdHRyaWJ1dGVzPihbdGhpcywgdXRmMTZPZmZzZXQsIGlu
Y2x1ZGVEZWZhdWx0XSgpIC0+IFRleHRBdHRyaWJ1dGVzIHsKKyAgICAgICAgaWYgKG1fY29yZU9i
amVjdCkKKyAgICAgICAgICAgIG1fY29yZU9iamVjdC0+dXBkYXRlQmFja2luZ1N0b3JlKCk7CisK
KyAgICAgICAgaWYgKCFtX2NvcmVPYmplY3QgfHwgIW1fY29yZU9iamVjdC0+cmVuZGVyZXIoKSB8
fCAhbV9jb3JlT2JqZWN0LT5ub2RlKCkpCisgICAgICAgICAgICByZXR1cm4geyB9OworCisgICAg
ICAgIGF1dG8gYWNjZXNzaWJpbGl0eVRleHRBdHRyaWJ1dGVzID0gW3RoaXNdKEFYQ29yZU9iamVj
dCogYXhPYmplY3QsIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBkZWZhdWx0QXR0cmli
dXRlcykgLT4gSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4geworICAgICAgICAgICAgSGFzaE1hcDxT
dHJpbmcsIFN0cmluZz4gYXR0cmlidXRlczsKKyAgICAgICAgICAgIGF1dG8mIHN0eWxlID0gYXhP
YmplY3QtPnJlbmRlcmVyKCktPnN0eWxlKCk7CisKKyAgICAgICAgICAgIGF1dG8gYWRkQXR0cmli
dXRlSWZOZWVkZWQgPSBbJl0oY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVl
KSB7CisgICAgICAgICAgICAgICAgaWYgKGRlZmF1bHRBdHRyaWJ1dGVzLmlzRW1wdHkoKSB8fCBk
ZWZhdWx0QXR0cmlidXRlcy5nZXQobmFtZSkgIT0gdmFsdWUpCisgICAgICAgICAgICAgICAgICAg
IGF0dHJpYnV0ZXMuYWRkKG5hbWUsIHZhbHVlKTsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAg
ICAgIGF1dG8gYmdDb2xvciA9IHN0eWxlLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0
eUJhY2tncm91bmRDb2xvcik7CisgICAgICAgICAgICBpZiAoYmdDb2xvci5pc1ZhbGlkKCkgJiYg
YmdDb2xvci5pc1Zpc2libGUoKSkgeworICAgICAgICAgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFd
ID0gYmdDb2xvci50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKKyAgICAgICAgICAgICAgICBhZGRB
dHRyaWJ1dGVJZk5lZWRlZCgiYmctY29sb3IiX3MsIG1ha2VTdHJpbmcociwgJywnLCBnLCAnLCcs
IGIpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYXV0byBmZ0NvbG9yID0gc3R5bGUu
dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpOworICAgICAgICAgICAgaWYg
KGZnQ29sb3IuaXNWYWxpZCgpICYmIGZnQ29sb3IuaXNWaXNpYmxlKCkpIHsKKyAgICAgICAgICAg
ICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGZnQ29sb3IudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7
CisgICAgICAgICAgICAgICAgYWRkQXR0cmlidXRlSWZOZWVkZWQoImZnLWNvbG9yIl9zLCBtYWtl
U3RyaW5nKHIsICcsJywgZywgJywnLCBiKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGFkZEF0dHJpYnV0ZUlmTmVlZGVkKCJmYW1pbHktbmFtZSJfcywgc3R5bGUuZm9udENhc2NhZGUo
KS5maXJzdEZhbWlseSgpKTsKKyAgICAgICAgICAgIGFkZEF0dHJpYnV0ZUlmTmVlZGVkKCJzaXpl
Il9zLCBtYWtlU3RyaW5nKHN0ZDo6cm91bmQoc3R5bGUuY29tcHV0ZWRGb250UGl4ZWxTaXplKCkg
KiA3MiAvIFdlYkNvcmU6OnNjcmVlbkRQSSgpKSwgInB0IikpOworICAgICAgICAgICAgYWRkQXR0
cmlidXRlSWZOZWVkZWQoIndlaWdodCJfcywgbWFrZVN0cmluZyhzdGF0aWNfY2FzdDxmbG9hdD4o
c3R5bGUuZm9udENhc2NhZGUoKS53ZWlnaHQoKSkpKTsKKyAgICAgICAgICAgIGFkZEF0dHJpYnV0
ZUlmTmVlZGVkKCJzdHlsZSJfcywgc3R5bGUuZm9udENhc2NhZGUoKS5pdGFsaWMoKSA/ICJpdGFs
aWMiIDogIm5vcm1hbCIpOworICAgICAgICAgICAgYWRkQXR0cmlidXRlSWZOZWVkZWQoInN0cmlr
ZXRocm91Z2giX3MsIHN0eWxlLnRleHREZWNvcmF0aW9uKCkgJiBUZXh0RGVjb3JhdGlvbjo6TGlu
ZVRocm91Z2ggPyAidHJ1ZSIgOiAiZmFsc2UiKTsKKyAgICAgICAgICAgIGFkZEF0dHJpYnV0ZUlm
TmVlZGVkKCJ1bmRlcmxpbmUiX3MsIHN0eWxlLnRleHREZWNvcmF0aW9uKCkgJiBUZXh0RGVjb3Jh
dGlvbjo6VW5kZXJsaW5lID8gInNpbmdsZSIgOiAibm9uZSIpOworICAgICAgICAgICAgYWRkQXR0
cmlidXRlSWZOZWVkZWQoImludmlzaWJsZSJfcywgc3R5bGUudmlzaWJpbGl0eSgpID09IFZpc2li
aWxpdHk6OkhpZGRlbiA/ICJ0cnVlIiA6ICJmYWxzZSIpOworICAgICAgICAgICAgYWRkQXR0cmli
dXRlSWZOZWVkZWQoImVkaXRhYmxlIl9zLCBtX2NvcmVPYmplY3QtPmNhblNldFZhbHVlQXR0cmli
dXRlKCkgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKKyAgICAgICAgICAgIGFkZEF0dHJpYnV0ZUlmTmVl
ZGVkKCJkaXJlY3Rpb24iX3MsIHN0eWxlLmRpcmVjdGlvbigpID09IFRleHREaXJlY3Rpb246OkxU
UiA/ICJsdHIiIDogInJ0bCIpOworCisgICAgICAgICAgICBpZiAoIXN0eWxlLnRleHRJbmRlbnQo
KS5pc1VuZGVmaW5lZCgpKQorICAgICAgICAgICAgICAgIGFkZEF0dHJpYnV0ZUlmTmVlZGVkKCJp
bmRlbnQiX3MsIG1ha2VTdHJpbmcodmFsdWVGb3JMZW5ndGgoc3R5bGUudGV4dEluZGVudCgpLCBt
X2NvcmVPYmplY3QtPnNpemUoKS53aWR0aCgpKS50b0ludCgpKSk7CisKKyAgICAgICAgICAgIHN3
aXRjaCAoc3R5bGUudGV4dEFsaWduKCkpIHsKKyAgICAgICAgICAgIGNhc2UgVGV4dEFsaWduTW9k
ZTo6U3RhcnQ6CisgICAgICAgICAgICBjYXNlIFRleHRBbGlnbk1vZGU6OkVuZDoKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6TGVmdDoKKyAg
ICAgICAgICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6V2ViS2l0TGVmdDoKKyAgICAgICAgICAgICAg
ICBhZGRBdHRyaWJ1dGVJZk5lZWRlZCgianVzdGlmaWNhdGlvbiJfcywgImxlZnQiKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6UmlnaHQ6
CisgICAgICAgICAgICBjYXNlIFRleHRBbGlnbk1vZGU6OldlYktpdFJpZ2h0OgorICAgICAgICAg
ICAgICAgIGFkZEF0dHJpYnV0ZUlmTmVlZGVkKCJqdXN0aWZpY2F0aW9uIl9zLCAicmlnaHQiKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6
Q2VudGVyOgorICAgICAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRDZW50ZXI6Cisg
ICAgICAgICAgICAgICAgYWRkQXR0cmlidXRlSWZOZWVkZWQoImp1c3RpZmljYXRpb24iX3MsICJj
ZW50ZXIiKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVGV4dEFs
aWduTW9kZTo6SnVzdGlmeToKKyAgICAgICAgICAgICAgICBhZGRBdHRyaWJ1dGVJZk5lZWRlZCgi
anVzdGlmaWNhdGlvbiJfcywgImZpbGwiKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgU3RyaW5nIGludmFsaWRTdGF0dXMgPSBtX2NvcmVPYmpl
Y3QtPmludmFsaWRTdGF0dXMoKTsKKyAgICAgICAgICAgIGlmIChpbnZhbGlkU3RhdHVzICE9ICJm
YWxzZSIpCisgICAgICAgICAgICAgICAgYWRkQXR0cmlidXRlSWZOZWVkZWQoImludmFsaWQiX3Ms
IGludmFsaWRTdGF0dXMpOworCisgICAgICAgICAgICBTdHJpbmcgbGFuZ3VhZ2UgPSBtX2NvcmVP
YmplY3QtPmxhbmd1YWdlKCk7CisgICAgICAgICAgICBpZiAoIWxhbmd1YWdlLmlzRW1wdHkoKSkK
KyAgICAgICAgICAgICAgICBhZGRBdHRyaWJ1dGVJZk5lZWRlZCgibGFuZ3VhZ2UiX3MsIGxhbmd1
YWdlKTsKKworICAgICAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZXM7CisgICAgICAgIH07CisKKyAg
ICAgICAgYXV0byBkZWZhdWx0QXR0cmlidXRlcyA9IGFjY2Vzc2liaWxpdHlUZXh0QXR0cmlidXRl
cyhtX2NvcmVPYmplY3QsIHsgfSk7CisgICAgICAgIGlmICghdXRmMTZPZmZzZXQpCisgICAgICAg
ICAgICByZXR1cm4geyBkZWZhdWx0QXR0cmlidXRlcywgLTEsIC0xIH07CisKKyAgICAgICAgVmlz
aWJsZVBvc2l0aW9uIG9mZnNldFBvc2l0aW9uID0gbV9jb3JlT2JqZWN0LT52aXNpYmxlUG9zaXRp
b25Gb3JJbmRleCgqdXRmMTZPZmZzZXQpOworICAgICAgICBhdXRvKiBjaGlsZE5vZGUgPSBvZmZz
ZXRQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCk7CisgICAgICAgIGlm
ICghY2hpbGROb2RlKQorICAgICAgICAgICAgcmV0dXJuIHsgZGVmYXVsdEF0dHJpYnV0ZXMsIC0x
LCAtMSB9OworCisgICAgICAgIGF1dG8qIGNoaWxkUmVuZGVyZXIgPSBjaGlsZE5vZGUtPnJlbmRl
cmVyKCk7CisgICAgICAgIGlmICghY2hpbGRSZW5kZXJlcikKKyAgICAgICAgICAgIHJldHVybiB7
IGRlZmF1bHRBdHRyaWJ1dGVzLCAtMSwgLTEgfTsKKworICAgICAgICBhdXRvKiBjaGlsZEF4T2Jq
ZWN0ID0gY2hpbGRSZW5kZXJlci0+ZG9jdW1lbnQoKS5heE9iamVjdENhY2hlKCktPmdldChjaGls
ZFJlbmRlcmVyKTsKKyAgICAgICAgaWYgKCFjaGlsZEF4T2JqZWN0IHx8IGNoaWxkQXhPYmplY3Qg
PT0gbV9jb3JlT2JqZWN0KQorICAgICAgICAgICAgcmV0dXJuIHsgZGVmYXVsdEF0dHJpYnV0ZXMs
IC0xLCAtMSB9OworCisgICAgICAgIGF1dG8gYXR0cmlidXRlcyA9IGFjY2Vzc2liaWxpdHlUZXh0
QXR0cmlidXRlcyhjaGlsZEF4T2JqZWN0LCBkZWZhdWx0QXR0cmlidXRlcyk7CisgICAgICAgIGF1
dG8gZmlyc3RWYWxpZFBvc2l0aW9uID0gZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG1fY29y
ZU9iamVjdC0+bm9kZSgpLT5maXJzdERlc2NlbmRhbnQoKSk7CisgICAgICAgIGF1dG8gbGFzdFZh
bGlkUG9zaXRpb24gPSBsYXN0UG9zaXRpb25Jbk9yQWZ0ZXJOb2RlKG1fY29yZU9iamVjdC0+bm9k
ZSgpLT5sYXN0RGVzY2VuZGFudCgpKTsKKworICAgICAgICBhdXRvKiBzdGFydFJlbmRlcmVyID0g
Y2hpbGRSZW5kZXJlcjsKKyAgICAgICAgYXV0byBzdGFydFBvc2l0aW9uID0gZmlyc3RQb3NpdGlv
bkluT3JCZWZvcmVOb2RlKHN0YXJ0UmVuZGVyZXItPm5vZGUoKSk7CisgICAgICAgIGZvciAoUmVu
ZGVyT2JqZWN0KiByID0gY2hpbGRSZW5kZXJlci0+cHJldmlvdXNJblByZU9yZGVyKCk7IHIgJiYg
c3RhcnRQb3NpdGlvbiA+IGZpcnN0VmFsaWRQb3NpdGlvbjsgciA9IHItPnByZXZpb3VzSW5QcmVP
cmRlcigpKSB7CisgICAgICAgICAgICBpZiAoci0+Zmlyc3RDaGlsZFNsb3coKSkKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgYXV0byBjaGlsZEF0dHJpYnV0ZXMgPSBh
Y2Nlc3NpYmlsaXR5VGV4dEF0dHJpYnV0ZXMoci0+ZG9jdW1lbnQoKS5heE9iamVjdENhY2hlKCkt
PmdldChyKSwgZGVmYXVsdEF0dHJpYnV0ZXMpOworICAgICAgICAgICAgaWYgKGNoaWxkQXR0cmli
dXRlcyAhPSBhdHRyaWJ1dGVzKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAg
ICBzdGFydFJlbmRlcmVyID0gcjsKKyAgICAgICAgICAgIHN0YXJ0UG9zaXRpb24gPSBmaXJzdFBv
c2l0aW9uSW5PckJlZm9yZU5vZGUoc3RhcnRSZW5kZXJlci0+bm9kZSgpKTsKKyAgICAgICAgfQor
CisgICAgICAgIGF1dG8qIGVuZFJlbmRlcmVyID0gY2hpbGRSZW5kZXJlcjsKKyAgICAgICAgYXV0
byBlbmRQb3NpdGlvbiA9IGxhc3RQb3NpdGlvbkluT3JBZnRlck5vZGUoZW5kUmVuZGVyZXItPm5v
ZGUoKSk7CisgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiByID0gY2hpbGRSZW5kZXJlci0+bmV4
dEluUHJlT3JkZXIoKTsgciAmJiBlbmRQb3NpdGlvbiA8IGxhc3RWYWxpZFBvc2l0aW9uOyByID0g
ci0+bmV4dEluUHJlT3JkZXIoKSkgeworICAgICAgICAgICAgaWYgKHItPmZpcnN0Q2hpbGRTbG93
KCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGF1dG8gY2hpbGRB
dHRyaWJ1dGVzID0gYWNjZXNzaWJpbGl0eVRleHRBdHRyaWJ1dGVzKHItPmRvY3VtZW50KCkuYXhP
YmplY3RDYWNoZSgpLT5nZXQociksIGRlZmF1bHRBdHRyaWJ1dGVzKTsKKyAgICAgICAgICAgIGlm
IChjaGlsZEF0dHJpYnV0ZXMgIT0gYXR0cmlidXRlcykKKyAgICAgICAgICAgICAgICBicmVhazsK
KworICAgICAgICAgICAgZW5kUmVuZGVyZXIgPSByOworICAgICAgICAgICAgZW5kUG9zaXRpb24g
PSBsYXN0UG9zaXRpb25Jbk9yQWZ0ZXJOb2RlKGVuZFJlbmRlcmVyLT5ub2RlKCkpOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKCFpbmNsdWRlRGVmYXVsdCkKKyAgICAgICAgICAgIHJldHVybiB7
IGF0dHJpYnV0ZXMsIG1fY29yZU9iamVjdC0+aW5kZXhGb3JWaXNpYmxlUG9zaXRpb24oc3RhcnRQ
b3NpdGlvbiksIG1fY29yZU9iamVjdC0+aW5kZXhGb3JWaXNpYmxlUG9zaXRpb24oZW5kUG9zaXRp
b24pIH07CisKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiBpdCA6IGF0dHJpYnV0ZXMpCisgICAg
ICAgICAgICBkZWZhdWx0QXR0cmlidXRlcy5zZXQoaXQua2V5LCBpdC52YWx1ZSk7CisKKyAgICAg
ICAgcmV0dXJuIHsgZGVmYXVsdEF0dHJpYnV0ZXMsIG1fY29yZU9iamVjdC0+aW5kZXhGb3JWaXNp
YmxlUG9zaXRpb24oc3RhcnRQb3NpdGlvbiksIG1fY29yZU9iamVjdC0+aW5kZXhGb3JWaXNpYmxl
UG9zaXRpb24oZW5kUG9zaXRpb24pIH07CisgICAgfSk7Cit9CisKK0FjY2Vzc2liaWxpdHlPYmpl
Y3RBdHNwaTo6VGV4dEF0dHJpYnV0ZXMgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjp0ZXh0QXR0
cmlidXRlc1dpdGhVVEY4T2Zmc2V0KHN0ZDo6b3B0aW9uYWw8aW50PiBvZmZzZXQsIGJvb2wgaW5j
bHVkZURlZmF1bHQpIGNvbnN0Cit7CisgICAgUkVMRUFTRV9BU1NFUlQoIWlzTWFpblRocmVhZCgp
KTsKKyAgICBhdXRvIHV0ZjE2VGV4dCA9IHRleHQoKTsKKyAgICBhdXRvIHV0ZjhUZXh0ID0gdXRm
MTZUZXh0LnV0ZjgoKTsKKyAgICBpZiAodXRmOFRleHQuaXNOdWxsKCkpCisgICAgICAgIHJldHVy
biB7IH07CisKKyAgICBhdXRvIG1hcHBpbmcgPSBvZmZzZXRNYXBwaW5nKHV0ZjE2VGV4dCk7Cisg
ICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gdXRmMTZPZmZzZXQ7CisgICAgaWYgKG9mZnNldCkg
eworICAgICAgICBhdXRvIGxlbmd0aCA9IHN0YXRpY19jYXN0PGludD4oZ191dGY4X3N0cmxlbih1
dGY4VGV4dC5kYXRhKCksIC0xKSk7CisgICAgICAgIGlmICgqb2Zmc2V0IDwgMCB8fCAqb2Zmc2V0
ID49IGxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybiB7IH07CisKKyAgICAgICAgdXRmMTZPZmZz
ZXQgPSBVVEY4T2Zmc2V0VG9VVEYxNihtYXBwaW5nLCAqb2Zmc2V0KTsKKyAgICB9CisKKyAgICBh
dXRvIGF0dHJpYnV0ZXMgPSB0ZXh0QXR0cmlidXRlcyh1dGYxNk9mZnNldCwgaW5jbHVkZURlZmF1
bHQpOworICAgIGlmIChhdHRyaWJ1dGVzLnN0YXJ0T2Zmc2V0ICE9IC0xKQorICAgICAgICBhdHRy
aWJ1dGVzLnN0YXJ0T2Zmc2V0ID0gVVRGMTZPZmZzZXRUb1VURjgobWFwcGluZywgYXR0cmlidXRl
cy5zdGFydE9mZnNldCk7CisgICAgaWYgKGF0dHJpYnV0ZXMuZW5kT2Zmc2V0ICE9IC0xKQorICAg
ICAgICBhdHRyaWJ1dGVzLmVuZE9mZnNldCA9IFVURjE2T2Zmc2V0VG9VVEY4KG1hcHBpbmcsIGF0
dHJpYnV0ZXMuZW5kT2Zmc2V0KTsKKworICAgIHJldHVybiBhdHRyaWJ1dGVzOworfQorCit2b2lk
IEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6dGV4dEF0dHJpYnV0ZXNDaGFuZ2VkKCkKK3sKKyAg
ICBSRUxFQVNFX0FTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKCFtX2lzUmVnaXN0ZXJl
ZC5sb2FkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9pbnRlcmZhY2VzLmNvbnRh
aW5zKEludGVyZmFjZTo6VGV4dCkpCisgICAgICAgIHJldHVybjsKKworICAgIHJvb3QoKS0+YXRz
cGkoKS50ZXh0QXR0cmlidXRlc0NoYW5nZWQoKnRoaXMpOworfQorCitib29sIEFjY2Vzc2liaWxp
dHlPYmplY3RBdHNwaTo6c2Nyb2xsVG9NYWtlVmlzaWJsZShpbnQgc3RhcnRPZmZzZXQsIGludCBl
bmRPZmZzZXQsIHVpbnQzMl90IHNjcm9sbFR5cGUpIGNvbnN0Cit7CisgICAgUkVMRUFTRV9BU1NF
UlQoIWlzTWFpblRocmVhZCgpKTsKKyAgICBhdXRvIHV0ZjE2VGV4dCA9IHRleHQoKTsKKyAgICBh
dXRvIHV0ZjhUZXh0ID0gdXRmMTZUZXh0LnV0ZjgoKTsKKyAgICBpZiAodXRmOFRleHQuaXNOdWxs
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gbGVuZ3RoID0gc3RhdGljX2Nh
c3Q8aW50PihnX3V0Zjhfc3RybGVuKHV0ZjhUZXh0LmRhdGEoKSwgLTEpKTsKKyAgICBpZiAoc3Rh
cnRPZmZzZXQgPCAwIHx8IHN0YXJ0T2Zmc2V0ID4gbGVuZ3RoKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgaWYgKGVuZE9mZnNldCA8IDAgfHwgZW5kT2Zmc2V0ID4gbGVuZ3RoKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGVuZE9mZnNldCA8IHN0YXJ0T2Zmc2V0KQorICAgICAg
ICBzdGQ6OnN3YXAoc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7CisKKyAgICBhdXRvIG1hcHBpbmcg
PSBvZmZzZXRNYXBwaW5nKHV0ZjE2VGV4dCk7CisgICAgYXV0byB1dGYxNlN0YXJ0T2Zmc2V0ID0g
VVRGOE9mZnNldFRvVVRGMTYobWFwcGluZywgc3RhcnRPZmZzZXQpOworICAgIGF1dG8gdXRmMTZF
bmRPZmZzZXQgPSBVVEY4T2Zmc2V0VG9VVEYxNihtYXBwaW5nLCBlbmRPZmZzZXQpOworICAgIEFj
Y2Vzc2liaWxpdHk6OnBlcmZvcm1GdW5jdGlvbk9uTWFpblRocmVhZChbdGhpcywgdXRmMTZTdGFy
dE9mZnNldCwgdXRmMTZFbmRPZmZzZXQsIHNjcm9sbFR5cGVdIHsKKyAgICAgICAgaWYgKG1fY29y
ZU9iamVjdCkKKyAgICAgICAgICAgIG1fY29yZU9iamVjdC0+dXBkYXRlQmFja2luZ1N0b3JlKCk7
CisKKyAgICAgICAgaWYgKCFtX2NvcmVPYmplY3QgfHwgIW1fY29yZU9iamVjdC0+cmVuZGVyZXIo
KSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBJbnRSZWN0IHJlY3QgPSBtX2NvcmVP
YmplY3QtPmRvQVhCb3VuZHNGb3JSYW5nZShQbGFpblRleHRSYW5nZSh1dGYxNlN0YXJ0T2Zmc2V0
LCB1dGYxNkVuZE9mZnNldCAtIHV0ZjE2U3RhcnRPZmZzZXQpKTsKKworICAgICAgICBpZiAobV9j
b3JlT2JqZWN0LT5pc1Njcm9sbFZpZXcoKSkgeworICAgICAgICAgICAgaWYgKGF1dG8qIHBhcmVu
dCA9IG1fY29yZU9iamVjdC0+cGFyZW50T2JqZWN0KCkpCisgICAgICAgICAgICAgICAgcGFyZW50
LT5zY3JvbGxUb01ha2VWaXNpYmxlKCk7CisgICAgICAgIH0KKworICAgICAgICBTY3JvbGxBbGln
bm1lbnQgYWxpZ25YOworICAgICAgICBTY3JvbGxBbGlnbm1lbnQgYWxpZ25ZOworICAgICAgICBz
d2l0Y2ggKHNjcm9sbFR5cGUpIHsKKyAgICAgICAgY2FzZSBBdHNwaTo6U2Nyb2xsVHlwZTo6VG9w
TGVmdDoKKyAgICAgICAgICAgIGFsaWduWCA9IFNjcm9sbEFsaWdubWVudDo6YWxpZ25MZWZ0QWx3
YXlzOworICAgICAgICAgICAgYWxpZ25ZID0gU2Nyb2xsQWxpZ25tZW50OjphbGlnblRvcEFsd2F5
czsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEF0c3BpOjpTY3JvbGxUeXBlOjpC
b3R0b21SaWdodDoKKyAgICAgICAgICAgIGFsaWduWCA9IFNjcm9sbEFsaWdubWVudDo6YWxpZ25S
aWdodEFsd2F5czsKKyAgICAgICAgICAgIGFsaWduWSA9IFNjcm9sbEFsaWdubWVudDo6YWxpZ25C
b3R0b21BbHdheXM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBdHNwaTo6U2Ny
b2xsVHlwZTo6VG9wRWRnZToKKyAgICAgICAgY2FzZSBBdHNwaTo6U2Nyb2xsVHlwZTo6Qm90dG9t
RWRnZToKKyAgICAgICAgICAgIC8vIEFsaWduIHRvIGEgcGFydGljdWxhciBlZGdlIGlzIG5vdCBz
dXBwb3J0ZWQsIGl0J3MgYWx3YXlzIHRoZSBjbG9zZXN0IGVkZ2UuCisgICAgICAgICAgICBhbGln
blggPSBTY3JvbGxBbGlnbm1lbnQ6OmFsaWduQ2VudGVySWZOZWVkZWQ7CisgICAgICAgICAgICBh
bGlnblkgPSBTY3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQ7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBBdHNwaTo6U2Nyb2xsVHlwZTo6TGVmdEVkZ2U6CisgICAg
ICAgIGNhc2UgQXRzcGk6OlNjcm9sbFR5cGU6OlJpZ2h0RWRnZToKKyAgICAgICAgICAgIC8vIEFs
aWduIHRvIGEgcGFydGljdWxhciBlZGdlIGlzIG5vdCBzdXBwb3J0ZWQsIGl0J3MgYWx3YXlzIHRo
ZSBjbG9zZXN0IGVkZ2UuCisgICAgICAgICAgICBhbGlnblggPSBTY3JvbGxBbGlnbm1lbnQ6OmFs
aWduVG9FZGdlSWZOZWVkZWQ7CisgICAgICAgICAgICBhbGlnblkgPSBTY3JvbGxBbGlnbm1lbnQ6
OmFsaWduQ2VudGVySWZOZWVkZWQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBB
dHNwaTo6U2Nyb2xsVHlwZTo6QW55d2hlcmU6CisgICAgICAgICAgICBhbGlnblggPSBTY3JvbGxB
bGlnbm1lbnQ6OmFsaWduQ2VudGVySWZOZWVkZWQ7CisgICAgICAgICAgICBhbGlnblkgPSBTY3Jv
bGxBbGlnbm1lbnQ6OmFsaWduQ2VudGVySWZOZWVkZWQ7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorCisgICAgICAgIG1fY29yZU9iamVjdC0+cmVuZGVyZXIoKS0+c2Nyb2xsUmVjdFRv
VmlzaWJsZShyZWN0LCBmYWxzZSwgeyBTZWxlY3Rpb25SZXZlYWxNb2RlOjpSZXZlYWwsIGFsaWdu
WCwgYWxpZ25ZLCBTaG91bGRBbGxvd0Nyb3NzT3JpZ2luU2Nyb2xsaW5nOjpZZXMgfSk7CisgICAg
fSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRz
cGk6OnNjcm9sbFRvUG9pbnQoaW50IHN0YXJ0T2Zmc2V0LCBpbnQgZW5kT2Zmc2V0LCB1aW50MzJf
dCBjb29yZGluYXRlVHlwZSwgaW50IHgsIGludCB5KSBjb25zdAoreworICAgIFJFTEVBU0VfQVNT
RVJUKCFpc01haW5UaHJlYWQoKSk7CisgICAgYXV0byB1dGYxNlRleHQgPSB0ZXh0KCk7CisgICAg
YXV0byB1dGY4VGV4dCA9IHV0ZjE2VGV4dC51dGY4KCk7CisgICAgaWYgKHV0ZjhUZXh0LmlzTnVs
bCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGxlbmd0aCA9IHN0YXRpY19j
YXN0PGludD4oZ191dGY4X3N0cmxlbih1dGY4VGV4dC5kYXRhKCksIC0xKSk7CisgICAgaWYgKHN0
YXJ0T2Zmc2V0IDwgMCB8fCBzdGFydE9mZnNldCA+IGxlbmd0aCkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGlmIChlbmRPZmZzZXQgPCAwIHx8IGVuZE9mZnNldCA+IGxlbmd0aCkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChlbmRPZmZzZXQgPCBzdGFydE9mZnNldCkKKyAgICAg
ICAgc3RkOjpzd2FwKHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOworCisgICAgYXV0byBtYXBwaW5n
ID0gb2Zmc2V0TWFwcGluZyh1dGYxNlRleHQpOworICAgIGF1dG8gdXRmMTZTdGFydE9mZnNldCA9
IFVURjhPZmZzZXRUb1VURjE2KG1hcHBpbmcsIHN0YXJ0T2Zmc2V0KTsKKyAgICBhdXRvIHV0ZjE2
RW5kT2Zmc2V0ID0gVVRGOE9mZnNldFRvVVRGMTYobWFwcGluZywgZW5kT2Zmc2V0KTsKKyAgICBB
Y2Nlc3NpYmlsaXR5OjpwZXJmb3JtRnVuY3Rpb25Pbk1haW5UaHJlYWQoW3RoaXMsIHV0ZjE2U3Rh
cnRPZmZzZXQsIHV0ZjE2RW5kT2Zmc2V0LCBjb29yZGluYXRlVHlwZSwgeCwgeV0geworICAgICAg
ICBpZiAobV9jb3JlT2JqZWN0KQorICAgICAgICAgICAgbV9jb3JlT2JqZWN0LT51cGRhdGVCYWNr
aW5nU3RvcmUoKTsKKworICAgICAgICBpZiAoIW1fY29yZU9iamVjdCkKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICBJbnRQb2ludCBwb2ludCh4LCB5KTsKKyAgICAgICAgaWYgKGNvb3Jk
aW5hdGVUeXBlID09IEF0c3BpOjpDb29yZGluYXRlVHlwZTo6U2NyZWVuQ29vcmRpbmF0ZXMpIHsK
KyAgICAgICAgICAgIGlmIChhdXRvKiBmcmFtZVZpZXcgPSBtX2NvcmVPYmplY3QtPmRvY3VtZW50
RnJhbWVWaWV3KCkpCisgICAgICAgICAgICAgICAgcG9pbnQgPSBmcmFtZVZpZXctPmNvbnRlbnRz
VG9XaW5kb3coZnJhbWVWaWV3LT5zY3JlZW5Ub0NvbnRlbnRzKHBvaW50KSk7CisgICAgICAgIH0K
KworICAgICAgICBJbnRSZWN0IHJlY3QgPSBtX2NvcmVPYmplY3QtPmRvQVhCb3VuZHNGb3JSYW5n
ZShQbGFpblRleHRSYW5nZSh1dGYxNlN0YXJ0T2Zmc2V0LCB1dGYxNkVuZE9mZnNldCAtIHV0ZjE2
U3RhcnRPZmZzZXQpKTsKKyAgICAgICAgcG9pbnQubW92ZSgtcmVjdC54KCksIC1yZWN0LnkoKSk7
CisgICAgICAgIG1fY29yZU9iamVjdC0+c2Nyb2xsVG9HbG9iYWxQb2ludChwb2ludCk7CisgICAg
fSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gRU5BQkxFKEFDQ0VTU0lCSUxJVFkpICYmIFVTRShBVFNQSSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvYXRzcGkvRnJhbWVTZWxlY3Rpb25BdHNwaS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL2F0c3BpL0ZyYW1lU2VsZWN0aW9uQXRzcGkuY3BwCmluZGV4
IDQ5OWZkMTk4NDJjMi4uNTNiZDhmZjJlOWM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL2F0c3BpL0ZyYW1lU2VsZWN0aW9uQXRzcGkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvYXRzcGkvRnJhbWVTZWxlY3Rpb25BdHNwaS5jcHAKQEAgLTIzLDEzICsyMywyMCBA
QAogI2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZKSAmJiBVU0UoQVRTUEkpCiAKICNpbmNsdWRlICJB
WE9iamVjdENhY2hlLmgiCisjaW5jbHVkZSAiRG9jdW1lbnRJbmxpbmVzLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotdm9pZCBGcmFtZVNlbGVjdGlvbjo6bm90aWZ5QWNjZXNzaWJpbGl0eUZv
clNlbGVjdGlvbkNoYW5nZShjb25zdCBBWFRleHRTdGF0ZUNoYW5nZUludGVudCYpCit2b2lkIEZy
YW1lU2VsZWN0aW9uOjpub3RpZnlBY2Nlc3NpYmlsaXR5Rm9yU2VsZWN0aW9uQ2hhbmdlKGNvbnN0
IEFYVGV4dFN0YXRlQ2hhbmdlSW50ZW50JiBpbnRlbnQpCiB7CiAgICAgaWYgKCFBWE9iamVjdENh
Y2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKQogICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
IW1fc2VsZWN0aW9uLnN0YXJ0KCkuaXNOb3ROdWxsKCkgfHwgIW1fc2VsZWN0aW9uLmVuZCgpLmlz
Tm90TnVsbCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoQVhPYmplY3RDYWNoZSogY2Fj
aGUgPSBtX2RvY3VtZW50LT5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSkKKyAgICAgICAgY2FjaGUt
PnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24obV9zZWxlY3Rpb24uc3RhcnQoKSwgaW50
ZW50LCBtX3NlbGVjdGlvbik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5jcHAKaW5kZXgg
MGUzNDg2ZDRmNzEwLi4xN2MxZjNlMDVjOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwCkBAIC02MDMsNyArNjAzLDcgQEAgdm9p
ZCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2V0SW5uZXJUZXh0VmFsdWUoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKICAgICAgICAgICAgICAgICBpbm5lclRleHQtPmFwcGVuZENoaWxkKEhUTUxC
UkVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCgpKSk7CiAgICAgICAgIH0KIAotI2lmIEVOQUJMRShB
Q0NFU1NJQklMSVRZKSAmJiBQTEFURk9STShDT0NPQSkKKyNpZiBFTkFCTEUoQUNDRVNTSUJJTElU
WSkgJiYgKFBMQVRGT1JNKENPQ09BKSB8fCBVU0UoQVRTUEkpKQogICAgICAgICBpZiAodGV4dElz
Q2hhbmdlZCAmJiByZW5kZXJlcigpKSB7CiAgICAgICAgICAgICBpZiAoQVhPYmplY3RDYWNoZSog
Y2FjaGUgPSBkb2N1bWVudCgpLmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpKQogICAgICAgICAgICAg
ICAgIGNhY2hlLT5kZWZlclRleHRSZXBsYWNlbWVudE5vdGlmaWNhdGlvbkZvclRleHRDb250cm9s
KCp0aGlzLCBwcmV2aW91c1ZhbHVlKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rv
b2xzL0NoYW5nZUxvZwppbmRleCA2NmFiM2ZlODNhOWYuLjgzOTE1M2Y2YjJiOSAxMDA2NDQKLS0t
IGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBA
CisyMDIxLTEwLTIwICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4K
KworICAgICAgICBbR1RLXVthMTF5XSBBZGQgaW1wbGVtZW50YXRpb24gb2YgdGV4dCBpbnRlcmZh
Y2Ugd2hlbiBidWlsZGluZyB3aXRoIEFUU1BJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMzAyNTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGQgdW5pdCB0ZXN0cyBmb3IgdGhlIHRleHQgaW50ZXJmYWNl
LgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvVGVzdFdlYktpdEFj
Y2Vzc2liaWxpdHkuY3BwOgorICAgICAgICAoQXRzcGlUZXh0UmFuZ2VEZWxldGVyOjpvcGVyYXRv
cigpIGNvbnN0KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlUZXN0OjpzdGFydEV2ZW50TW9uaXRv
cik6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VGVzdDo6c3RvcEV2ZW50TW9uaXRvcik6CisgICAg
ICAgIChBY2Nlc3NpYmlsaXR5VGVzdDo6ZmluZEV2ZW50KToKKyAgICAgICAgKHRlc3RUZXh0QmFz
aWMpOgorICAgICAgICAodGVzdFRleHRTdXJyb2dhdGVQYWlyKToKKyAgICAgICAgKHRlc3RUZXh0
SXRlcmF0b3IpOgorICAgICAgICAodGVzdFRleHRFeHRlbnRzKToKKyAgICAgICAgKHRlc3RUZXh0
U2VsZWN0aW9ucyk6CisgICAgICAgICh0ZXN0VGV4dEF0dHJpYnV0ZXMpOgorICAgICAgICAodGVz
dFRleHRTdGF0ZUNoYW5nZWQpOgorICAgICAgICAoYmVmb3JlQWxsKToKKwogMjAyMS0xMC0yMCAg
S2ltbW8gS2lubnVuZW4gIDxra2lubnVuZW5AYXBwbGUuY29tPgogCiAgICAgICAgIEl0IHNob3Vs
ZCBiZSBwb3NzaWJsZSB0byBmb3JtYXQgQysrIGNvZGUgdG8gcHJvamVjdCBzdHlsZSB3aXRoIFdl
YktpdCB0b29scwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRH
dGsvVGVzdFdlYktpdEFjY2Vzc2liaWxpdHkuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRHdGsvVGVzdFdlYktpdEFjY2Vzc2liaWxpdHkuY3BwCmluZGV4IGY4ZTM1ZGVhYzhk
ZC4uNWMyOWU2YzZjOWNlIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdEd0ay9UZXN0V2ViS2l0QWNjZXNzaWJpbGl0eS5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRHdGsvVGVzdFdlYktpdEFjY2Vzc2liaWxpdHkuY3BwCkBAIC0zNCw3
ICszNCwxNSBAQCBzdHJ1Y3QgQXRzcGlFdmVudERlbGV0ZXIgewogICAgIH0KIH07CiAKK3N0cnVj
dCBBdHNwaVRleHRSYW5nZURlbGV0ZXIgeworICAgIHZvaWQgb3BlcmF0b3IoKShBdHNwaVRleHRS
YW5nZSogcmFuZ2UpIGNvbnN0CisgICAgeworICAgICAgICBnX2JveGVkX2ZyZWUoQVRTUElfVFlQ
RV9URVhUX1JBTkdFLCByYW5nZSk7CisgICAgfQorfTsKKwogdXNpbmcgVW5pcXVlQXRzcGlFdmVu
dCA9IHN0ZDo6dW5pcXVlX3B0cjxBdHNwaUV2ZW50LCBBdHNwaUV2ZW50RGVsZXRlcj47Cit1c2lu
ZyBVbmlxdWVBdHNwaVRleHRSYW5nZSA9IHN0ZDo6dW5pcXVlX3B0cjxBdHNwaVRleHRSYW5nZSwg
QXRzcGlUZXh0UmFuZ2VEZWxldGVyPjsKIAogY2xhc3MgQWNjZXNzaWJpbGl0eVRlc3QgOiBwdWJs
aWMgV2ViVmlld1Rlc3QgewogcHVibGljOgpAQCAtOTgsMTcgKzEwNiwxOCBAQCBwdWJsaWM6CiAg
ICAgICAgIG1fZXZlbnRTb3VyY2UgPSBudWxscHRyOwogICAgIH0KIAotICAgIHZvaWQgc3RhcnRF
dmVudE1vbml0b3IoQXRzcGlBY2Nlc3NpYmxlKiBzb3VyY2UsIGNvbnN0IFZlY3Rvcjxjb25zdCBj
aGFyKj4mIGV2ZW50cykKKyAgICB2b2lkIHN0YXJ0RXZlbnRNb25pdG9yKEF0c3BpQWNjZXNzaWJs
ZSogc291cmNlLCBWZWN0b3I8Q1N0cmluZz4mJiBldmVudHMpCiAgICAgewogICAgICAgICBtX2V2
ZW50TW9uaXRvci5zb3VyY2UgPSBzb3VyY2U7CisgICAgICAgIG1fZXZlbnRNb25pdG9yLmV2ZW50
VHlwZXMgPSBXVEZNb3ZlKGV2ZW50cyk7CiAgICAgICAgIG1fZXZlbnRNb25pdG9yLmxpc3RlbmVy
ID0gYWRvcHRHUmVmKGF0c3BpX2V2ZW50X2xpc3RlbmVyX25ldyhbXShBdHNwaUV2ZW50KiBldmVu
dCwgZ3BvaW50ZXIgdXNlckRhdGEpIHsKICAgICAgICAgICAgIGF1dG8qIHRlc3QgPSBzdGF0aWNf
Y2FzdDxBY2Nlc3NpYmlsaXR5VGVzdCo+KHVzZXJEYXRhKTsKICAgICAgICAgICAgIGlmIChldmVu
dC0+c291cmNlID09IHRlc3QtPm1fZXZlbnRNb25pdG9yLnNvdXJjZSkKICAgICAgICAgICAgICAg
ICB0ZXN0LT5tX2V2ZW50TW9uaXRvci5ldmVudHMuYXBwZW5kKHN0YXRpY19jYXN0PEF0c3BpRXZl
bnQqPihnX2JveGVkX2NvcHkoQVRTUElfVFlQRV9FVkVOVCwgZXZlbnQpKSk7CiAgICAgICAgIH0s
IHRoaXMsIG51bGxwdHIpKTsKIAotICAgICAgICBmb3IgKGNvbnN0IGF1dG8qIGV2ZW50IDogZXZl
bnRzKQotICAgICAgICAgICAgYXRzcGlfZXZlbnRfbGlzdGVuZXJfcmVnaXN0ZXIobV9ldmVudE1v
bml0b3IubGlzdGVuZXIuZ2V0KCksIGV2ZW50LCBudWxscHRyKTsKKyAgICAgICAgZm9yIChjb25z
dCBhdXRvJiBldmVudCA6IG1fZXZlbnRNb25pdG9yLmV2ZW50VHlwZXMpCisgICAgICAgICAgICBh
dHNwaV9ldmVudF9saXN0ZW5lcl9yZWdpc3RlcihtX2V2ZW50TW9uaXRvci5saXN0ZW5lci5nZXQo
KSwgZXZlbnQuZGF0YSgpLCBudWxscHRyKTsKICAgICB9CiAKICAgICBWZWN0b3I8VW5pcXVlQXRz
cGlFdmVudD4gc3RvcEV2ZW50TW9uaXRvcih1bnNpZ25lZCBleHBlY3RlZEV2ZW50cywgc3RkOjpv
cHRpb25hbDxTZWNvbmRzPiB0aW1lb3V0ID0gc3RkOjpudWxsb3B0KQpAQCAtMTE5LDEwICsxMjgs
MjIgQEAgcHVibGljOgogICAgICAgICAgICAgZ19tYWluX2NvbnRleHRfaXRlcmF0aW9uKG51bGxw
dHIsIHRpbWVvdXQgPyBGQUxTRSA6IFRSVUUpOwogCiAgICAgICAgIGF1dG8gZXZlbnRzID0gV1RG
TW92ZShtX2V2ZW50TW9uaXRvci5ldmVudHMpOwotICAgICAgICBtX2V2ZW50TW9uaXRvciA9IHsg
bnVsbHB0ciwgeyB9LCBudWxscHRyIH07CisgICAgICAgIGZvciAoY29uc3QgYXV0byYgZXZlbnQg
OiBtX2V2ZW50TW9uaXRvci5ldmVudFR5cGVzKQorICAgICAgICAgICAgYXRzcGlfZXZlbnRfbGlz
dGVuZXJfZGVyZWdpc3RlcihtX2V2ZW50TW9uaXRvci5saXN0ZW5lci5nZXQoKSwgZXZlbnQuZGF0
YSgpLCBudWxscHRyKTsKKyAgICAgICAgbV9ldmVudE1vbml0b3IgPSB7IG51bGxwdHIsIHsgfSwg
eyB9LCBudWxscHRyIH07CiAgICAgICAgIHJldHVybiBldmVudHM7CiAgICAgfQogCisgICAgc3Rh
dGljIEF0c3BpRXZlbnQqIGZpbmRFdmVudChjb25zdCBWZWN0b3I8VW5pcXVlQXRzcGlFdmVudD4m
IGV2ZW50cywgY29uc3QgY2hhciogZXZlbnRUeXBlKQorICAgIHsKKyAgICAgICAgZm9yIChjb25z
dCBhdXRvJiBldmVudCA6IGV2ZW50cykgeworICAgICAgICAgICAgaWYgKCFnX3N0cmNtcDAoZXZl
bnQtPnR5cGUsIGV2ZW50VHlwZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50LmdldCgp
OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCiAgICAgc3Rh
dGljIHVuc2lnbmVkIHN0YXRlU2V0U2l6ZShBdHNwaVN0YXRlU2V0KiBzdGF0ZVNldCkKICAgICB7
CiAgICAgICAgIEdBcnJheSogc3RhdGVzID0gYXRzcGlfc3RhdGVfc2V0X2dldF9zdGF0ZXMoc3Rh
dGVTZXQpOwpAQCAtMTM2LDYgKzE1Nyw3IEBAIHByaXZhdGU6CiAKICAgICBzdHJ1Y3QgewogICAg
ICAgICBHUmVmUHRyPEF0c3BpRXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXI7CisgICAgICAgIFZlY3Rv
cjxDU3RyaW5nPiBldmVudFR5cGVzOwogICAgICAgICBWZWN0b3I8VW5pcXVlQXRzcGlFdmVudD4g
ZXZlbnRzOwogICAgICAgICBBdHNwaUFjY2Vzc2libGUqIHNvdXJjZSB7IG51bGxwdHIgfTsKICAg
ICB9IG1fZXZlbnRNb25pdG9yOwpAQCAtODAzLDYgKzgyNSw2OTQgQEAgc3RhdGljIHZvaWQgdGVz
dENvbXBvbmVudFNjcm9sbFRvKEFjY2Vzc2liaWxpdHlUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVy
KQogICAgIGdfYXNzZXJ0X2NtcGludCh0b3BQb3NpdGlvbkJlZm9yZVNjcm9sbGluZy0+eSwgPT0s
IHRvcFBvc2l0aW9uQWZ0ZXJTY3JvbGxpbmctPnkpOwogfQogCitzdGF0aWMgdm9pZCB0ZXN0VGV4
dEJhc2ljKEFjY2Vzc2liaWxpdHlUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRl
c3QtPnNob3dJbldpbmRvdygpOworICAgIHRlc3QtPmxvYWRIdG1sKAorICAgICAgICAiPGh0bWw+
IgorICAgICAgICAiICA8Ym9keT4iCisgICAgICAgICIgICAgPHA+VGhpcyBpcyBhIGxpbmUgb2Yg
dGV4dDwvcD4iCisgICAgICAgICIgIDwvYm9keT4iCisgICAgICAgICI8L2h0bWw+IiwKKyAgICAg
ICAgbnVsbHB0cik7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBh
dXRvIHRlc3RBcHAgPSB0ZXN0LT5maW5kVGVzdEFwcGxpY2F0aW9uKCk7CisgICAgZ19hc3NlcnRf
dHJ1ZShBVFNQSV9JU19BQ0NFU1NJQkxFKHRlc3RBcHAuZ2V0KCkpKTsKKworICAgIGF1dG8gZG9j
dW1lbnRXZWIgPSB0ZXN0LT5maW5kRG9jdW1lbnRXZWIodGVzdEFwcC5nZXQoKSk7CisgICAgZ19h
c3NlcnRfdHJ1ZShBVFNQSV9JU19BQ0NFU1NJQkxFKGRvY3VtZW50V2ViLmdldCgpKSk7CisgICAg
Z19hc3NlcnRfY21waW50KGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2NvdW50KGRvY3VtZW50
V2ViLmdldCgpLCBudWxscHRyKSwgPT0sIDEpOworCisgICAgYXV0byBwID0gYWRvcHRHUmVmKGF0
c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0X2luZGV4KGRvY3VtZW50V2ViLmdldCgpLCAwLCBu
dWxscHRyKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShBVFNQSV9JU19URVhUKHAuZ2V0KCkpKTsKKyAg
ICBhdXRvIGxlbmd0aCA9IGF0c3BpX3RleHRfZ2V0X2NoYXJhY3Rlcl9jb3VudChBVFNQSV9URVhU
KHAuZ2V0KCkpLCBudWxscHRyKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQobGVuZ3RoLCA9PSwgMjIp
OworICAgIEdVbmlxdWVQdHI8Y2hhcj4gdGV4dChhdHNwaV90ZXh0X2dldF90ZXh0KEFUU1BJX1RF
WFQocC5nZXQoKSksIDAsIGxlbmd0aCwgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0
ZXh0LmdldCgpLCA9PSwgIlRoaXMgaXMgYSBsaW5lIG9mIHRleHQiKTsKKyAgICB0ZXh0LnJlc2V0
KGF0c3BpX3RleHRfZ2V0X3RleHQoQVRTUElfVEVYVChwLmdldCgpKSwgMCwgLTEsIG51bGxwdHIp
KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodGV4dC5nZXQoKSwgPT0sICJUaGlzIGlzIGEgbGluZSBv
ZiB0ZXh0Iik7CisgICAgdGV4dC5yZXNldChhdHNwaV90ZXh0X2dldF90ZXh0KEFUU1BJX1RFWFQo
cC5nZXQoKSksIDUsIDcsIG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodGV4dC5nZXQo
KSwgPT0sICJpcyIpOworICAgIHRleHQucmVzZXQoYXRzcGlfdGV4dF9nZXRfdGV4dChBVFNQSV9U
RVhUKHAuZ2V0KCkpLCAwLCAtMiwgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0
LmdldCgpLCA9PSwgIiIpOworICAgIHRleHQucmVzZXQoYXRzcGlfdGV4dF9nZXRfdGV4dChBVFNQ
SV9URVhUKHAuZ2V0KCkpLCAtNSwgMjMsIG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIo
dGV4dC5nZXQoKSwgPT0sICIiKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFRleHRTdXJyb2dhdGVQ
YWlyKEFjY2Vzc2liaWxpdHlUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworI2lmIFVTRShB
VEspCisgICAgZ190ZXN0X3NraXAoIlN1cnJvZ2F0ZSBwYWlycyBhcmUgbm90IGNvcnJlY3RseSBo
YW5kbGVkIGJ5IFdlYktpdCB3aGVuIHVzaW5nIEFUSyIpOworICAgIHJldHVybjsKKyNlbmRpZgor
CisgICAgdGVzdC0+c2hvd0luV2luZG93KCk7CisgICAgdGVzdC0+bG9hZEh0bWwoCisgICAgICAg
ICI8aHRtbD4iCisgICAgICAgICIgIDxib2R5PiIKKyAgICAgICAgIiAgICA8cD5UaGlzIGNvbnRh
aW5zIGEgJiN4MUQzMDY7IHN5bWJvbDwvcD4iCisgICAgICAgICIgICAgPGlucHV0IHZhbHVlPSdU
aGlzIGNvbnRhaW5zIGEgJiN4MUQzMDY7IHN5bWJvbCcvPiIKKyAgICAgICAgIiAgPC9ib2R5PiIK
KyAgICAgICAgIjwvaHRtbD4iLAorICAgICAgICBudWxscHRyKTsKKyAgICB0ZXN0LT53YWl0VW50
aWxMb2FkRmluaXNoZWQoKTsKKworICAgIGF1dG8gdGVzdEFwcCA9IHRlc3QtPmZpbmRUZXN0QXBw
bGljYXRpb24oKTsKKyAgICBnX2Fzc2VydF90cnVlKEFUU1BJX0lTX0FDQ0VTU0lCTEUodGVzdEFw
cC5nZXQoKSkpOworCisgICAgYXV0byBkb2N1bWVudFdlYiA9IHRlc3QtPmZpbmREb2N1bWVudFdl
Yih0ZXN0QXBwLmdldCgpKTsKKyAgICBnX2Fzc2VydF90cnVlKEFUU1BJX0lTX0FDQ0VTU0lCTEUo
ZG9jdW1lbnRXZWIuZ2V0KCkpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRzcGlfYWNjZXNzaWJs
ZV9nZXRfY2hpbGRfY291bnQoZG9jdW1lbnRXZWIuZ2V0KCksIG51bGxwdHIpLCA9PSwgMik7CisK
KyAgICBhdXRvIHAgPSBhZG9wdEdSZWYoYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfYXRfaW5k
ZXgoZG9jdW1lbnRXZWIuZ2V0KCksIDAsIG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF90cnVlKEFU
U1BJX0lTX1RFWFQocC5nZXQoKSkpOworICAgIGF1dG8gbGVuZ3RoID0gYXRzcGlfdGV4dF9nZXRf
Y2hhcmFjdGVyX2NvdW50KEFUU1BJX1RFWFQocC5nZXQoKSksIG51bGxwdHIpOworICAgIGdfYXNz
ZXJ0X2NtcGludChsZW5ndGgsID09LCAyNCk7CisgICAgR1VuaXF1ZVB0cjxjaGFyPiB0ZXh0KGF0
c3BpX3RleHRfZ2V0X3RleHQoQVRTUElfVEVYVChwLmdldCgpKSwgMCwgbGVuZ3RoLCBudWxscHRy
KSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHRleHQuZ2V0KCksID09LCAiVGhpcyBjb250YWlucyBh
IPCdjIYgc3ltYm9sIik7CisgICAgdGV4dC5yZXNldChhdHNwaV90ZXh0X2dldF90ZXh0KEFUU1BJ
X1RFWFQocC5nZXQoKSksIDE2LCAxNywgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0
ZXh0LmdldCgpLCA9PSwgIvCdjIYiKTsKKworICAgIGF1dG8gc2VjdGlvbiA9IGFkb3B0R1JlZihh
dHNwaV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9hdF9pbmRleChkb2N1bWVudFdlYi5nZXQoKSwgMSwg
bnVsbHB0cikpOworICAgIGdfYXNzZXJ0X3RydWUoQVRTUElfSVNfQUNDRVNTSUJMRShzZWN0aW9u
LmdldCgpKSk7CisgICAgZ19hc3NlcnRfY21waW50KGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxk
X2NvdW50KHNlY3Rpb24uZ2V0KCksIG51bGxwdHIpLCA9PSwgMSk7CisgICAgYXV0byBpbnB1dCA9
IGFkb3B0R1JlZihhdHNwaV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9hdF9pbmRleChzZWN0aW9uLmdl
dCgpLCAwLCBudWxscHRyKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShBVFNQSV9JU19URVhUKGlucHV0
LmdldCgpKSk7CisgICAgbGVuZ3RoID0gYXRzcGlfdGV4dF9nZXRfY2hhcmFjdGVyX2NvdW50KEFU
U1BJX1RFWFQoaW5wdXQuZ2V0KCkpLCBudWxscHRyKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQobGVu
Z3RoLCA9PSwgMjQpOworICAgIHRleHQucmVzZXQoYXRzcGlfdGV4dF9nZXRfdGV4dChBVFNQSV9U
RVhUKGlucHV0LmdldCgpKSwgMCwgbGVuZ3RoLCBudWxscHRyKSk7CisgICAgZ19hc3NlcnRfY21w
c3RyKHRleHQuZ2V0KCksID09LCAiVGhpcyBjb250YWlucyBhIPCdjIYgc3ltYm9sIik7CisgICAg
dGV4dC5yZXNldChhdHNwaV90ZXh0X2dldF90ZXh0KEFUU1BJX1RFWFQoaW5wdXQuZ2V0KCkpLCAx
NiwgMTcsIG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodGV4dC5nZXQoKSwgPT0sICLw
nYyGIik7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RUZXh0SXRlcmF0b3IoQWNjZXNzaWJpbGl0eVRl
c3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+c2hvd0luV2luZG93KDgwMCwg
NjAwKTsKKyAgICB0ZXN0LT5sb2FkSHRtbCgKKyAgICAgICAgIjxodG1sPiIKKyAgICAgICAgIiAg
PGJvZHk+IgorICAgICAgICAiICAgIDxwPlRleHQgb2YgZmlyc3Qgc2VudGVuY2UuICAgVGhpcyBp
cyB0aGUgc2Vjb25kIHNlbnRlbmNlLjxicj5BbmQgdGhpcyBpcyB0aGUgbmV4dCBwYXJhZ3JhcGgu
PC9wPiIKKyAgICAgICAgIiAgPC9ib2R5PiIKKyAgICAgICAgIjwvaHRtbD4iLAorICAgICAgICBu
dWxscHRyKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIGF1dG8g
dGVzdEFwcCA9IHRlc3QtPmZpbmRUZXN0QXBwbGljYXRpb24oKTsKKyAgICBnX2Fzc2VydF90cnVl
KEFUU1BJX0lTX0FDQ0VTU0lCTEUodGVzdEFwcC5nZXQoKSkpOworCisgICAgYXV0byBkb2N1bWVu
dFdlYiA9IHRlc3QtPmZpbmREb2N1bWVudFdlYih0ZXN0QXBwLmdldCgpKTsKKyAgICBnX2Fzc2Vy
dF90cnVlKEFUU1BJX0lTX0FDQ0VTU0lCTEUoZG9jdW1lbnRXZWIuZ2V0KCkpKTsKKyAgICBnX2Fz
c2VydF9jbXBpbnQoYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfY291bnQoZG9jdW1lbnRXZWIu
Z2V0KCksIG51bGxwdHIpLCA9PSwgMSk7CisKKyAgICBhdXRvIHAgPSBhZG9wdEdSZWYoYXRzcGlf
YWNjZXNzaWJsZV9nZXRfY2hpbGRfYXRfaW5kZXgoZG9jdW1lbnRXZWIuZ2V0KCksIDAsIG51bGxw
dHIpKTsKKyAgICBnX2Fzc2VydF90cnVlKEFUU1BJX0lTX1RFWFQocC5nZXQoKSkpOworICAgIGF1
dG8gbGVuZ3RoID0gYXRzcGlfdGV4dF9nZXRfY2hhcmFjdGVyX2NvdW50KEFUU1BJX1RFWFQocC5n
ZXQoKSksIG51bGxwdHIpOworICAgIGdfYXNzZXJ0X2NtcGludChsZW5ndGgsID09LCA4NCk7Cisg
ICAgR1VuaXF1ZVB0cjxjaGFyPiB0ZXh0KGF0c3BpX3RleHRfZ2V0X3RleHQoQVRTUElfVEVYVChw
LmdldCgpKSwgMCwgbGVuZ3RoLCBudWxscHRyKSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHRleHQu
Z2V0KCksID09LCAiVGV4dCBvZiBmaXJzdCBzZW50ZW5jZS4gVGhpcyBpcyB0aGUgc2Vjb25kIHNl
bnRlbmNlLlxuQW5kIHRoaXMgaXMgdGhlIG5leHQgcGFyYWdyYXBoLiIpOworCisgICAgLy8gQ2hh
cmFjdGVyIGdyYW51bGFyaXR5LgorICAgIFVuaXF1ZUF0c3BpVGV4dFJhbmdlIHJhbmdlKGF0c3Bp
X3RleHRfZ2V0X3N0cmluZ19hdF9vZmZzZXQoQVRTUElfVEVYVChwLmdldCgpKSwgMCwgQVRTUElf
VEVYVF9HUkFOVUxBUklUWV9DSEFSLCBudWxscHRyKSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHJh
bmdlLT5jb250ZW50LCA9PSwgIlQiKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQocmFuZ2UtPnN0YXJ0
X29mZnNldCwgPT0sIDApOworICAgIGdfYXNzZXJ0X2NtcGludChyYW5nZS0+ZW5kX29mZnNldCwg
PT0sIDEpOworICAgIHJhbmdlLnJlc2V0KGF0c3BpX3RleHRfZ2V0X3N0cmluZ19hdF9vZmZzZXQo
QVRTUElfVEVYVChwLmdldCgpKSwgODMsIEFUU1BJX1RFWFRfR1JBTlVMQVJJVFlfQ0hBUiwgbnVs
bHB0cikpOworICAgIGdfYXNzZXJ0X2NtcHN0cihyYW5nZS0+Y29udGVudCwgPT0sICIuIik7Cisg
ICAgZ19hc3NlcnRfY21waW50KHJhbmdlLT5zdGFydF9vZmZzZXQsID09LCA4Myk7CisgICAgZ19h
c3NlcnRfY21waW50KHJhbmdlLT5lbmRfb2Zmc2V0LCA9PSwgODQpOworICAgIHJhbmdlLnJlc2V0
KGF0c3BpX3RleHRfZ2V0X3N0cmluZ19hdF9vZmZzZXQoQVRTUElfVEVYVChwLmdldCgpKSwgODQs
IEFUU1BJX1RFWFRfR1JBTlVMQVJJVFlfQ0hBUiwgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0X2Nt
cHN0cihyYW5nZS0+Y29udGVudCwgPT0sICIiKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQocmFuZ2Ut
PnN0YXJ0X29mZnNldCwgPT0sIDg0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQocmFuZ2UtPmVuZF9v
ZmZzZXQsID09LCA4NCk7CisgICAgcmFuZ2UucmVzZXQoYXRzcGlfdGV4dF9nZXRfc3RyaW5nX2F0
X29mZnNldChBVFNQSV9URVhUKHAuZ2V0KCkpLCA4NSwgQVRTUElfVEVYVF9HUkFOVUxBUklUWV9D
SEFSLCBudWxscHRyKSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHJhbmdlLT5jb250ZW50LCA9PSwg
IiIpOworI2lmIFVTRShBVFNQSSkKKyAgICBnX2Fzc2VydF9jbXBpbnQocmFuZ2UtPnN0YXJ0X29m
ZnNldCwgPT0sIDApOworICAgIGdfYXNzZXJ0X2NtcGludChyYW5nZS0+ZW5kX29mZnNldCwgPT0s
IDApOworI2Vsc2UKKyAgICAvLyBGSVhNRTogQVRLIHJldHVybnMgd3Jvbmcgb2Zmc2V0cyBpbiB0
aGlzIGNhc2UuCisgICAgZ19hc3NlcnRfY21waW50KHJhbmdlLT5zdGFydF9vZmZzZXQsID09LCA4
NCk7CisgICAgZ19hc3NlcnRfY21waW50KHJhbmdlLT5lbmRfb2Zmc2V0LCA9PSwgODQpOworI2Vu
ZGlmCisgICAgcmFuZ2UucmVzZXQoYXRzcGlfdGV4dF9nZXRfc3RyaW5nX2F0X29mZnNldChBVFNQ
SV9URVhUKHAuZ2V0KCkpLCAtMSwgQVRTUElfVEVYVF9HUkFOVUxBUklUWV9DSEFSLCBudWxscHRy
KSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHJhbmdlLT5jb250ZW50LCA9PSwgIiIpOworICAgIGdf
YXNzZXJ0X2NtcGludChyYW5nZS0+c3RhcnRfb2Zmc2V0LCA9PSwgMCk7CisgICAgZ19hc3NlcnRf
Y21waW50KHJhbmdlLT5lbmRfb2Zmc2V0LCA9PSwgMCk7CisKKyAgICAvLyBXb3JkIGdyYW51bGFy
aXR5LgorICAgIHJhbmdlLnJlc2V0KGF0c3BpX3RleHRfZ2V0X3N0cmluZ19hdF9vZmZzZXQoQVRT
UElfVEVYVChwLmdldCgpKSwgMCwgQVRTUElfVEVYVF9HUkFOVUxBUklUWV9XT1JELCBudWxscHRy
KSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHJhbmdlLT5jb250ZW50LCA9PSwgIlRleHQgIik7Cisg
ICAgZ19hc3NlcnRfY21waW50KHJhbmdlLT5zdGFydF9vZmZzZXQsID09LCAwKTsKKyAgICBnX2Fz
c2VydF9jbXBpbnQocmFuZ2UtPmVuZF9vZmZzZXQsID09LCA1KTsKKyAgICByYW5nZS5yZXNldChh
dHNwaV90ZXh0X2dldF9zdHJpbmdfYXRfb2Zmc2V0KEFUU1BJX1RFWFQocC5nZXQoKSksIDQsIEFU
U1BJX1RFWFRfR1JBTlVMQVJJVFlfV09SRCwgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0X2NtcHN0
cihyYW5nZS0+Y29udGVudCwgPT0sICJUZXh0ICIpOworICAgIGdfYXNzZXJ0X2NtcGludChyYW5n
ZS0+c3RhcnRfb2Zmc2V0LCA9PSwgMCk7CisgICAgZ19hc3NlcnRfY21waW50KHJhbmdlLT5lbmRf
b2Zmc2V0LCA9PSwgNSk7CisgICAgcmFuZ2UucmVzZXQoYXRzcGlfdGV4dF9nZXRfc3RyaW5nX2F0
X29mZnNldChBVFNQSV9URVhUKHAuZ2V0KCkpLCA1LCBBVFNQSV9URVhUX0dSQU5VTEFSSVRZX1dP
UkQsIG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIocmFuZ2UtPmNvbnRlbnQsID09LCAi
b2YgIik7CisgICAgZ19hc3NlcnRfY21waW50KHJhbmdlLT5zdGFydF9vZmZzZXQsID09LCA1KTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQocmFuZ2UtPmVuZF9vZmZzZXQsID09LCA4KTsKKyAgICByYW5n
ZS5yZXNldChhdHNwaV90ZXh0X2dldF9zdHJpbmdfYXRfb2Zmc2V0KEFUU1BJX1RFWFQocC5nZXQo
KSksIDQwLCBBVFNQSV9URVhUX0dSQU5VTEFSSVRZX1dPUkQsIG51bGxwdHIpKTsKKyAgICBnX2Fz
c2VydF9jbXBzdHIocmFuZ2UtPmNvbnRlbnQsID09LCAic2Vjb25kICIpOworICAgIGdfYXNzZXJ0
X2NtcGludChyYW5nZS0+c3RhcnRfb2Zmc2V0LCA9PSwgMzYpOworICAgIGdfYXNzZXJ0X2NtcGlu
dChyYW5nZS0+ZW5kX29mZnNldCwgPT0sIDQzKTsKKyAgICByYW5nZS5yZXNldChhdHNwaV90ZXh0
X2dldF9zdHJpbmdfYXRfb2Zmc2V0KEFUU1BJX1RFWFQocC5nZXQoKSksIDE2LCBBVFNQSV9URVhU
X0dSQU5VTEFSSVRZX1dPUkQsIG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIocmFuZ2Ut
PmNvbnRlbnQsID09LCAic2VudGVuY2UuICIpOworICAgIGdfYXNzZXJ0X2NtcGludChyYW5nZS0+
c3RhcnRfb2Zmc2V0LCA9PSwgMTQpOworICAgIGdfYXNzZXJ0X2NtcGludChyYW5nZS0+ZW5kX29m
ZnNldCwgPT0sIDI0KTsKKyAgICByYW5nZS5yZXNldChhdHNwaV90ZXh0X2dldF9zdHJpbmdfYXRf
b2Zmc2V0KEFUU1BJX1RFWFQocC5nZXQoKSksIDc0LCBBVFNQSV9URVhUX0dSQU5VTEFSSVRZX1dP
UkQsIG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIocmFuZ2UtPmNvbnRlbnQsID09LCAi
cGFyYWdyYXBoLiIpOworICAgIGdfYXNzZXJ0X2NtcGludChyYW5nZS0+c3RhcnRfb2Zmc2V0LCA9
PSwgNzQpOworICAgIGdfYXNzZXJ0X2NtcGludChyYW5nZS0+ZW5kX29mZnNldCwgPT0sIDg0KTsK
KyAgICByYW5nZS5yZXNldChhdHNwaV90ZXh0X2dldF9zdHJpbmdfYXRfb2Zmc2V0KEFUU1BJX1RF
WFQocC5nZXQoKSksIDgzLCBBVFNQSV9URVhUX0dSQU5VTEFSSVRZX1dPUkQsIG51bGxwdHIpKTsK
KyAgICBnX2Fzc2VydF9jbXBzdHIocmFuZ2UtPmNvbnRlbnQsID09LCAicGFyYWdyYXBoLiIpOwor
ICAgIGdfYXNzZXJ0X2NtcGludChyYW5nZS0+c3RhcnRfb2Zmc2V0LCA9PSwgNzQpOworICAgIGdf
YXNzZXJ0X2NtcGludChyYW5nZS0+ZW5kX29mZnNldCwgPT0sIDg0KTsKKyAgICByYW5nZS5yZXNl
dChhdHNwaV90ZXh0X2dldF9zdHJpbmdfYXRfb2Zmc2V0KEFUU1BJX1RFWFQocC5nZXQoKSksIDgw
LCBBVFNQSV9URVhUX0dSQU5VTEFSSVRZX1dPUkQsIG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF9j
bXBzdHIocmFuZ2UtPmNvbnRlbnQsID09LCAicGFyYWdyYXBoLiIpOworICAgIGdfYXNzZXJ0X2Nt
cGludChyYW5nZS0+c3RhcnRfb2Zmc2V0LCA9PSwgNzQpOworICAgIGdfYXNzZXJ0X2NtcGludChy
YW5nZS0+ZW5kX29mZnNldCwgPT0sIDg0KTsKKworICAgIC8vIFNlbnRlbmNlIGdyYW51bGFyaXR5
LgorICAgIHJhbmdlLnJlc2V0KGF0c3BpX3RleHRfZ2V0X3N0cmluZ19hdF9vZmZzZXQoQVRTUElf
VEVYVChwLmdldCgpKSwgMCwgQVRTUElfVEVYVF9HUkFOVUxBUklUWV9TRU5URU5DRSwgbnVsbHB0
cikpOworICAgIGdfYXNzZXJ0X2NtcHN0cihyYW5nZS0+Y29udGVudCwgPT0sICJUZXh0IG9mIGZp
cnN0IHNlbnRlbmNlLiAiKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQocmFuZ2UtPnN0YXJ0X29mZnNl
dCwgPT0sIDApOworICAgIGdfYXNzZXJ0X2NtcGludChyYW5nZS0+ZW5kX29mZnNldCwgPT0sIDI0
KTsKKyAgICByYW5nZS5yZXNldChhdHNwaV90ZXh0X2dldF9zdHJpbmdfYXRfb2Zmc2V0KEFUU1BJ
X1RFWFQocC5nZXQoKSksIDIzLCBBVFNQSV9URVhUX0dSQU5VTEFSSVRZX1NFTlRFTkNFLCBudWxs
cHRyKSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHJhbmdlLT5jb250ZW50LCA9PSwgIlRleHQgb2Yg
Zmlyc3Qgc2VudGVuY2UuICIpOworICAgIGdfYXNzZXJ0X2NtcGludChyYW5nZS0+c3RhcnRfb2Zm
c2V0LCA9PSwgMCk7CisgICAgZ19hc3NlcnRfY21waW50KHJhbmdlLT5lbmRfb2Zmc2V0LCA9PSwg
MjQpOworICAgIHJhbmdlLnJlc2V0KGF0c3BpX3RleHRfZ2V0X3N0cmluZ19hdF9vZmZzZXQoQVRT
UElfVEVYVChwLmdldCgpKSwgMjQsIEFUU1BJX1RFWFRfR1JBTlVMQVJJVFlfU0VOVEVOQ0UsIG51
bGxwdHIpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIocmFuZ2UtPmNvbnRlbnQsID09LCAiVGhpcyBp
cyB0aGUgc2Vjb25kIHNlbnRlbmNlLlxuIik7CisgICAgZ19hc3NlcnRfY21waW50KHJhbmdlLT5z
dGFydF9vZmZzZXQsID09LCAyNCk7CisgICAgZ19hc3NlcnRfY21waW50KHJhbmdlLT5lbmRfb2Zm
c2V0LCA9PSwgNTMpOworICAgIHJhbmdlLnJlc2V0KGF0c3BpX3RleHRfZ2V0X3N0cmluZ19hdF9v
ZmZzZXQoQVRTUElfVEVYVChwLmdldCgpKSwgNDAsIEFUU1BJX1RFWFRfR1JBTlVMQVJJVFlfU0VO
VEVOQ0UsIG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIocmFuZ2UtPmNvbnRlbnQsID09
LCAiVGhpcyBpcyB0aGUgc2Vjb25kIHNlbnRlbmNlLlxuIik7CisgICAgZ19hc3NlcnRfY21waW50
KHJhbmdlLT5zdGFydF9vZmZzZXQsID09LCAyNCk7CisgICAgZ19hc3NlcnRfY21waW50KHJhbmdl
LT5lbmRfb2Zmc2V0LCA9PSwgNTMpOworICAgIHJhbmdlLnJlc2V0KGF0c3BpX3RleHRfZ2V0X3N0
cmluZ19hdF9vZmZzZXQoQVRTUElfVEVYVChwLmdldCgpKSwgNTMsIEFUU1BJX1RFWFRfR1JBTlVM
QVJJVFlfU0VOVEVOQ0UsIG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIocmFuZ2UtPmNv
bnRlbnQsID09LCAiQW5kIHRoaXMgaXMgdGhlIG5leHQgcGFyYWdyYXBoLiIpOworICAgIGdfYXNz
ZXJ0X2NtcGludChyYW5nZS0+c3RhcnRfb2Zmc2V0LCA9PSwgNTMpOworICAgIGdfYXNzZXJ0X2Nt
cGludChyYW5nZS0+ZW5kX29mZnNldCwgPT0sIDg0KTsKKyAgICByYW5nZS5yZXNldChhdHNwaV90
ZXh0X2dldF9zdHJpbmdfYXRfb2Zmc2V0KEFUU1BJX1RFWFQocC5nZXQoKSksIDgzLCBBVFNQSV9U
RVhUX0dSQU5VTEFSSVRZX1NFTlRFTkNFLCBudWxscHRyKSk7CisgICAgZ19hc3NlcnRfY21wc3Ry
KHJhbmdlLT5jb250ZW50LCA9PSwgIkFuZCB0aGlzIGlzIHRoZSBuZXh0IHBhcmFncmFwaC4iKTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQocmFuZ2UtPnN0YXJ0X29mZnNldCwgPT0sIDUzKTsKKyAgICBn
X2Fzc2VydF9jbXBpbnQocmFuZ2UtPmVuZF9vZmZzZXQsID09LCA4NCk7CisKKyAgICAvLyBMaW5l
IGdyYW51bGFyaXR5LgorICAgIHJhbmdlLnJlc2V0KGF0c3BpX3RleHRfZ2V0X3N0cmluZ19hdF9v
ZmZzZXQoQVRTUElfVEVYVChwLmdldCgpKSwgMCwgQVRTUElfVEVYVF9HUkFOVUxBUklUWV9MSU5F
LCBudWxscHRyKSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHJhbmdlLT5jb250ZW50LCA9PSwgIlRl
eHQgb2YgZmlyc3Qgc2VudGVuY2UuIFRoaXMgaXMgdGhlIHNlY29uZCBzZW50ZW5jZS5cbiIpOwor
ICAgIGdfYXNzZXJ0X2NtcGludChyYW5nZS0+c3RhcnRfb2Zmc2V0LCA9PSwgMCk7CisgICAgZ19h
c3NlcnRfY21waW50KHJhbmdlLT5lbmRfb2Zmc2V0LCA9PSwgNTMpOworICAgIHJhbmdlLnJlc2V0
KGF0c3BpX3RleHRfZ2V0X3N0cmluZ19hdF9vZmZzZXQoQVRTUElfVEVYVChwLmdldCgpKSwgODMs
IEFUU1BJX1RFWFRfR1JBTlVMQVJJVFlfTElORSwgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0X2Nt
cHN0cihyYW5nZS0+Y29udGVudCwgPT0sICJBbmQgdGhpcyBpcyB0aGUgbmV4dCBwYXJhZ3JhcGgu
Iik7CisgICAgZ19hc3NlcnRfY21waW50KHJhbmdlLT5zdGFydF9vZmZzZXQsID09LCA1Myk7Cisg
ICAgZ19hc3NlcnRfY21waW50KHJhbmdlLT5lbmRfb2Zmc2V0LCA9PSwgODQpOworCisjaWYgVVNF
KEFUU1BJKSAvLyBBVEsgZG9lc24ndCBpbXBsZW1lbnQgcGFyYWdyYXBoIGdyYW51bGFyaXR5Lgor
ICAgIC8vIFBhcmFncmFwaCBncmFudWxhcml0eS4KKyAgICByYW5nZS5yZXNldChhdHNwaV90ZXh0
X2dldF9zdHJpbmdfYXRfb2Zmc2V0KEFUU1BJX1RFWFQocC5nZXQoKSksIDAsIEFUU1BJX1RFWFRf
R1JBTlVMQVJJVFlfUEFSQUdSQVBILCBudWxscHRyKSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHJh
bmdlLT5jb250ZW50LCA9PSwgIlRleHQgb2YgZmlyc3Qgc2VudGVuY2UuIFRoaXMgaXMgdGhlIHNl
Y29uZCBzZW50ZW5jZS4iKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQocmFuZ2UtPnN0YXJ0X29mZnNl
dCwgPT0sIDApOworICAgIGdfYXNzZXJ0X2NtcGludChyYW5nZS0+ZW5kX29mZnNldCwgPT0sIDUy
KTsKKyAgICByYW5nZS5yZXNldChhdHNwaV90ZXh0X2dldF9zdHJpbmdfYXRfb2Zmc2V0KEFUU1BJ
X1RFWFQocC5nZXQoKSksIDgzLCBBVFNQSV9URVhUX0dSQU5VTEFSSVRZX1BBUkFHUkFQSCwgbnVs
bHB0cikpOworICAgIGdfYXNzZXJ0X2NtcHN0cihyYW5nZS0+Y29udGVudCwgPT0sICJBbmQgdGhp
cyBpcyB0aGUgbmV4dCBwYXJhZ3JhcGguIik7CisgICAgZ19hc3NlcnRfY21waW50KHJhbmdlLT5z
dGFydF9vZmZzZXQsID09LCA1Myk7CisgICAgZ19hc3NlcnRfY21waW50KHJhbmdlLT5lbmRfb2Zm
c2V0LCA9PSwgODQpOworI2VuZGlmCisKKyAgICAvLyBVc2luZyBhIHRleHQgY29udHJvbCBub3cu
CisgICAgdGVzdC0+bG9hZEh0bWwoCisgICAgICAgICI8aHRtbD4iCisgICAgICAgICIgIDxib2R5
PiIKKyAgICAgICAgIiAgICA8aW5wdXQgdmFsdWU9J1RleHQgb2YgaW5wdXQgZmllbGQnLz4iCisg
ICAgICAgICIgIDwvYm9keT4iCisgICAgICAgICI8L2h0bWw+IiwKKyAgICAgICAgbnVsbHB0cik7
CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBkb2N1bWVudFdlYiA9
IHRlc3QtPmZpbmREb2N1bWVudFdlYih0ZXN0QXBwLmdldCgpKTsKKyAgICBnX2Fzc2VydF90cnVl
KEFUU1BJX0lTX0FDQ0VTU0lCTEUoZG9jdW1lbnRXZWIuZ2V0KCkpKTsKKyAgICBnX2Fzc2VydF9j
bXBpbnQoYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfY291bnQoZG9jdW1lbnRXZWIuZ2V0KCks
IG51bGxwdHIpLCA9PSwgMSk7CisKKyAgICBhdXRvIHNlY3Rpb24gPSBhZG9wdEdSZWYoYXRzcGlf
YWNjZXNzaWJsZV9nZXRfY2hpbGRfYXRfaW5kZXgoZG9jdW1lbnRXZWIuZ2V0KCksIDAsIG51bGxw
dHIpKTsKKyAgICBnX2Fzc2VydF90cnVlKEFUU1BJX0lTX0FDQ0VTU0lCTEUoc2VjdGlvbi5nZXQo
KSkpOworICAgIGdfYXNzZXJ0X2NtcGludChhdHNwaV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9jb3Vu
dChzZWN0aW9uLmdldCgpLCBudWxscHRyKSwgPT0sIDEpOworICAgIGF1dG8gaW5wdXQgPSBhZG9w
dEdSZWYoYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfYXRfaW5kZXgoc2VjdGlvbi5nZXQoKSwg
MCwgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0X3RydWUoQVRTUElfSVNfVEVYVChpbnB1dC5nZXQo
KSkpOworICAgIGxlbmd0aCA9IGF0c3BpX3RleHRfZ2V0X2NoYXJhY3Rlcl9jb3VudChBVFNQSV9U
RVhUKGlucHV0LmdldCgpKSwgbnVsbHB0cik7CisgICAgZ19hc3NlcnRfY21waW50KGxlbmd0aCwg
PT0sIDE5KTsKKyAgICB0ZXh0LnJlc2V0KGF0c3BpX3RleHRfZ2V0X3RleHQoQVRTUElfVEVYVChp
bnB1dC5nZXQoKSksIDAsIGxlbmd0aCwgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0
ZXh0LmdldCgpLCA9PSwgIlRleHQgb2YgaW5wdXQgZmllbGQiKTsKKworICAgIHJhbmdlLnJlc2V0
KGF0c3BpX3RleHRfZ2V0X3N0cmluZ19hdF9vZmZzZXQoQVRTUElfVEVYVChpbnB1dC5nZXQoKSks
IDAsIEFUU1BJX1RFWFRfR1JBTlVMQVJJVFlfQ0hBUiwgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0
X2NtcHN0cihyYW5nZS0+Y29udGVudCwgPT0sICJUIik7CisgICAgZ19hc3NlcnRfY21waW50KHJh
bmdlLT5zdGFydF9vZmZzZXQsID09LCAwKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQocmFuZ2UtPmVu
ZF9vZmZzZXQsID09LCAxKTsKKyAgICByYW5nZS5yZXNldChhdHNwaV90ZXh0X2dldF9zdHJpbmdf
YXRfb2Zmc2V0KEFUU1BJX1RFWFQoaW5wdXQuZ2V0KCkpLCAxOCwgQVRTUElfVEVYVF9HUkFOVUxB
UklUWV9DSEFSLCBudWxscHRyKSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHJhbmdlLT5jb250ZW50
LCA9PSwgImQiKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQocmFuZ2UtPnN0YXJ0X29mZnNldCwgPT0s
IDE4KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQocmFuZ2UtPmVuZF9vZmZzZXQsID09LCAxOSk7CisK
KyAgICByYW5nZS5yZXNldChhdHNwaV90ZXh0X2dldF9zdHJpbmdfYXRfb2Zmc2V0KEFUU1BJX1RF
WFQoaW5wdXQuZ2V0KCkpLCAwLCBBVFNQSV9URVhUX0dSQU5VTEFSSVRZX1dPUkQsIG51bGxwdHIp
KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIocmFuZ2UtPmNvbnRlbnQsID09LCAiVGV4dCAiKTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQocmFuZ2UtPnN0YXJ0X29mZnNldCwgPT0sIDApOworICAgIGdfYXNz
ZXJ0X2NtcGludChyYW5nZS0+ZW5kX29mZnNldCwgPT0sIDUpOworICAgIHJhbmdlLnJlc2V0KGF0
c3BpX3RleHRfZ2V0X3N0cmluZ19hdF9vZmZzZXQoQVRTUElfVEVYVChpbnB1dC5nZXQoKSksIDE2
LCBBVFNQSV9URVhUX0dSQU5VTEFSSVRZX1dPUkQsIG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF9j
bXBzdHIocmFuZ2UtPmNvbnRlbnQsID09LCAiZmllbGQiKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQo
cmFuZ2UtPnN0YXJ0X29mZnNldCwgPT0sIDE0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQocmFuZ2Ut
PmVuZF9vZmZzZXQsID09LCAxOSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RUZXh0RXh0ZW50cyhB
Y2Nlc3NpYmlsaXR5VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5zaG93
SW5XaW5kb3coKTsKKyAgICB0ZXN0LT5sb2FkSHRtbCgKKyAgICAgICAgIjxodG1sPiIKKyAgICAg
ICAgIiAgPGJvZHk+IgorICAgICAgICAiICAgIDxwPlRleHQ8L3A+IgorICAgICAgICAiICA8L2Jv
ZHk+IgorICAgICAgICAiPC9odG1sPiIsCisgICAgICAgIG51bGxwdHIpOworICAgIHRlc3QtPndh
aXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgYXV0byB0ZXN0QXBwID0gdGVzdC0+ZmluZFRl
c3RBcHBsaWNhdGlvbigpOworICAgIGdfYXNzZXJ0X3RydWUoQVRTUElfSVNfQUNDRVNTSUJMRSh0
ZXN0QXBwLmdldCgpKSk7CisKKyAgICBhdXRvIGRvY3VtZW50V2ViID0gdGVzdC0+ZmluZERvY3Vt
ZW50V2ViKHRlc3RBcHAuZ2V0KCkpOworICAgIGdfYXNzZXJ0X3RydWUoQVRTUElfSVNfQUNDRVNT
SUJMRShkb2N1bWVudFdlYi5nZXQoKSkpOworICAgIGdfYXNzZXJ0X2NtcGludChhdHNwaV9hY2Nl
c3NpYmxlX2dldF9jaGlsZF9jb3VudChkb2N1bWVudFdlYi5nZXQoKSwgbnVsbHB0ciksID09LCAx
KTsKKworICAgIGF1dG8gcCA9IGFkb3B0R1JlZihhdHNwaV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9h
dF9pbmRleChkb2N1bWVudFdlYi5nZXQoKSwgMCwgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0X3Ry
dWUoQVRTUElfSVNfVEVYVChwLmdldCgpKSk7CisgICAgR1VuaXF1ZVB0cjxBdHNwaVJlY3Q+IGZp
cnN0Q2hhclJlY3QoYXRzcGlfdGV4dF9nZXRfY2hhcmFjdGVyX2V4dGVudHMoQVRTUElfVEVYVChw
LmdldCgpKSwgMCwgQVRTUElfQ09PUkRfVFlQRV9XSU5ET1csIG51bGxwdHIpKTsKKyAgICBnX2Fz
c2VydF9ub25udWxsKGZpcnN0Q2hhclJlY3QuZ2V0KCkpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQo
Zmlyc3RDaGFyUmVjdC0+eCwgPiwgMCk7CisgICAgZ19hc3NlcnRfY21wdWludChmaXJzdENoYXJS
ZWN0LT55LCA+LCAwKTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KGZpcnN0Q2hhclJlY3QtPndpZHRo
LCA+LCAwKTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KGZpcnN0Q2hhclJlY3QtPmhlaWdodCwgPiwg
MCk7CisgICAgR1VuaXF1ZVB0cjxBdHNwaVJlY3Q+IGxhc3RDaGFyUmVjdChhdHNwaV90ZXh0X2dl
dF9jaGFyYWN0ZXJfZXh0ZW50cyhBVFNQSV9URVhUKHAuZ2V0KCkpLCAzLCBBVFNQSV9DT09SRF9U
WVBFX1dJTkRPVywgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0X25vbm51bGwobGFzdENoYXJSZWN0
LmdldCgpKTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KGxhc3RDaGFyUmVjdC0+eCwgPiwgZmlyc3RD
aGFyUmVjdC0+eCk7CisgICAgZ19hc3NlcnRfY21wdWludChsYXN0Q2hhclJlY3QtPnksID09LCBm
aXJzdENoYXJSZWN0LT55KTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KGxhc3RDaGFyUmVjdC0+d2lk
dGgsID4sIDApOworICAgIGdfYXNzZXJ0X2NtcHVpbnQobGFzdENoYXJSZWN0LT5oZWlnaHQsID4s
IDApOworICAgIEdVbmlxdWVQdHI8QXRzcGlSZWN0PiByYW5nZVJlY3QoYXRzcGlfdGV4dF9nZXRf
cmFuZ2VfZXh0ZW50cyhBVFNQSV9URVhUKHAuZ2V0KCkpLCAwLCA0LCBBVFNQSV9DT09SRF9UWVBF
X1dJTkRPVywgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0X25vbm51bGwocmFuZ2VSZWN0LmdldCgp
KTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KHJhbmdlUmVjdC0+eCwgPT0sIGZpcnN0Q2hhclJlY3Qt
PngpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQocmFuZ2VSZWN0LT55LCA9PSwgZmlyc3RDaGFyUmVj
dC0+eSk7CisgICAgZ19hc3NlcnRfY21wdWludChyYW5nZVJlY3QtPndpZHRoLCA+LCAwKTsKKyAg
ICBnX2Fzc2VydF9jbXB1aW50KHJhbmdlUmVjdC0+aGVpZ2h0LCA+LCAwKTsKKyNpZiBVU0UoQVRT
UEkpIC8vIE9mZnNldCBhdCBwb2ludCBpcyBicm9rZW4gd2l0aCBBVEsuCisgICAgYXV0byBvZmZz
ZXQgPSBhdHNwaV90ZXh0X2dldF9vZmZzZXRfYXRfcG9pbnQoQVRTUElfVEVYVChwLmdldCgpKSwg
Zmlyc3RDaGFyUmVjdC0+eCwgZmlyc3RDaGFyUmVjdC0+eSwgQVRTUElfQ09PUkRfVFlQRV9XSU5E
T1csIG51bGxwdHIpOworICAgIGdfYXNzZXJ0X2NtcGludChvZmZzZXQsID09LCAwKTsKKyAgICBv
ZmZzZXQgPSBhdHNwaV90ZXh0X2dldF9vZmZzZXRfYXRfcG9pbnQoQVRTUElfVEVYVChwLmdldCgp
KSwgZmlyc3RDaGFyUmVjdC0+eCArIGZpcnN0Q2hhclJlY3QtPndpZHRoLCBmaXJzdENoYXJSZWN0
LT55LCBBVFNQSV9DT09SRF9UWVBFX1dJTkRPVywgbnVsbHB0cik7CisgICAgZ19hc3NlcnRfY21w
aW50KG9mZnNldCwgPT0sIDEpOworICAgIG9mZnNldCA9IGF0c3BpX3RleHRfZ2V0X29mZnNldF9h
dF9wb2ludChBVFNQSV9URVhUKHAuZ2V0KCkpLCBsYXN0Q2hhclJlY3QtPngsIGxhc3RDaGFyUmVj
dC0+eSwgQVRTUElfQ09PUkRfVFlQRV9XSU5ET1csIG51bGxwdHIpOworICAgIGdfYXNzZXJ0X2Nt
cGludChvZmZzZXQsID09LCAzKTsKKyAgICBvZmZzZXQgPSBhdHNwaV90ZXh0X2dldF9vZmZzZXRf
YXRfcG9pbnQoQVRTUElfVEVYVChwLmdldCgpKSwgbGFzdENoYXJSZWN0LT54ICsgbGFzdENoYXJS
ZWN0LT53aWR0aCwgbGFzdENoYXJSZWN0LT55LCBBVFNQSV9DT09SRF9UWVBFX1dJTkRPVywgbnVs
bHB0cik7CisgICAgZ19hc3NlcnRfY21waW50KG9mZnNldCwgPT0sIDQpOworI2VuZGlmCit9CisK
K3N0YXRpYyB2b2lkIHRlc3RUZXh0U2VsZWN0aW9ucyhBY2Nlc3NpYmlsaXR5VGVzdCogdGVzdCwg
Z2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5zaG93SW5XaW5kb3coODAwLCA2MDApOworICAg
IHRlc3QtPmxvYWRIdG1sKAorICAgICAgICAiPGh0bWw+IgorICAgICAgICAiICA8Ym9keT4iCisg
ICAgICAgICIgICAgPHA+VGhpcyBpcyBhIGxpbmUgb2YgdGV4dDwvcD4iCisgICAgICAgICIgICAg
PGlucHV0IHZhbHVlPSdUaGlzIGlzIHRleHQgaW5wdXQgdmFsdWUnLz4iCisgICAgICAgICIgIDwv
Ym9keT4iCisgICAgICAgICI8L2h0bWw+IiwKKyAgICAgICAgbnVsbHB0cik7CisgICAgdGVzdC0+
d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBhdXRvIHRlc3RBcHAgPSB0ZXN0LT5maW5k
VGVzdEFwcGxpY2F0aW9uKCk7CisgICAgZ19hc3NlcnRfdHJ1ZShBVFNQSV9JU19BQ0NFU1NJQkxF
KHRlc3RBcHAuZ2V0KCkpKTsKKworICAgIGF1dG8gZG9jdW1lbnRXZWIgPSB0ZXN0LT5maW5kRG9j
dW1lbnRXZWIodGVzdEFwcC5nZXQoKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShBVFNQSV9JU19BQ0NF
U1NJQkxFKGRvY3VtZW50V2ViLmdldCgpKSk7CisgICAgZ19hc3NlcnRfY21waW50KGF0c3BpX2Fj
Y2Vzc2libGVfZ2V0X2NoaWxkX2NvdW50KGRvY3VtZW50V2ViLmdldCgpLCBudWxscHRyKSwgPT0s
IDIpOworCisgICAgYXV0byBwID0gYWRvcHRHUmVmKGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxk
X2F0X2luZGV4KGRvY3VtZW50V2ViLmdldCgpLCAwLCBudWxscHRyKSk7CisgICAgZ19hc3NlcnRf
dHJ1ZShBVFNQSV9JU19URVhUKHAuZ2V0KCkpKTsKKworICAgIGF1dG8gc2VsZWN0aW9uQ291bnQg
PSBhdHNwaV90ZXh0X2dldF9uX3NlbGVjdGlvbnMoQVRTUElfVEVYVChwLmdldCgpKSwgbnVsbHB0
cik7CisgICAgZ19hc3NlcnRfY21wdWludChzZWxlY3Rpb25Db3VudCwgPT0sIDApOworICAgIGF1
dG8gY2FyZXRPZmZzZXQgPSBhdHNwaV90ZXh0X2dldF9jYXJldF9vZmZzZXQoQVRTUElfVEVYVChw
LmdldCgpKSwgbnVsbHB0cik7CisjaWYgVVNFKEFUU1BJKQorICAgIGdfYXNzZXJ0X2NtcGludChj
YXJldE9mZnNldCwgPT0sIC0xKTsKKyNlbHNlCisgICAgZ19hc3NlcnRfY21waW50KGNhcmV0T2Zm
c2V0LCA9PSwgMCk7CisjZW5kaWYKKworICAgIEdVbmlxdWVQdHI8QXRzcGlSYW5nZT4gc2VsZWN0
aW9uKGF0c3BpX3RleHRfZ2V0X3NlbGVjdGlvbihBVFNQSV9URVhUKHAuZ2V0KCkpLCAwLCBudWxs
cHRyKSk7CisgICAgZ19hc3NlcnRfbm9ubnVsbChzZWxlY3Rpb24uZ2V0KCkpOworICAgIGdfYXNz
ZXJ0X2NtcGludChzZWxlY3Rpb24tPnN0YXJ0X29mZnNldCwgPT0sIDApOworICAgIGdfYXNzZXJ0
X2NtcGludChzZWxlY3Rpb24tPmVuZF9vZmZzZXQsID09LCAwKTsKKworICAgIGdfYXNzZXJ0X3Ry
dWUoYXRzcGlfdGV4dF9zZXRfc2VsZWN0aW9uKEFUU1BJX1RFWFQocC5nZXQoKSksIDAsIDUsIDE0
LCBudWxscHRyKSk7CisgICAgc2VsZWN0aW9uQ291bnQgPSBhdHNwaV90ZXh0X2dldF9uX3NlbGVj
dGlvbnMoQVRTUElfVEVYVChwLmdldCgpKSwgbnVsbHB0cik7CisgICAgZ19hc3NlcnRfY21wdWlu
dChzZWxlY3Rpb25Db3VudCwgPT0sIDEpOworICAgIGNhcmV0T2Zmc2V0ID0gYXRzcGlfdGV4dF9n
ZXRfY2FyZXRfb2Zmc2V0KEFUU1BJX1RFWFQocC5nZXQoKSksIG51bGxwdHIpOworICAgIGdfYXNz
ZXJ0X2NtcGludChjYXJldE9mZnNldCwgPT0sIDE0KTsKKyAgICBzZWxlY3Rpb24ucmVzZXQoYXRz
cGlfdGV4dF9nZXRfc2VsZWN0aW9uKEFUU1BJX1RFWFQocC5nZXQoKSksIDAsIG51bGxwdHIpKTsK
KyAgICBnX2Fzc2VydF9ub25udWxsKHNlbGVjdGlvbi5nZXQoKSk7CisgICAgZ19hc3NlcnRfY21w
aW50KHNlbGVjdGlvbi0+c3RhcnRfb2Zmc2V0LCA9PSwgNSk7CisgICAgZ19hc3NlcnRfY21waW50
KHNlbGVjdGlvbi0+ZW5kX29mZnNldCwgPT0sIDE0KTsKKyAgICBHVW5pcXVlUHRyPGNoYXI+IHRl
eHQoYXRzcGlfdGV4dF9nZXRfdGV4dChBVFNQSV9URVhUKHAuZ2V0KCkpLCBzZWxlY3Rpb24tPnN0
YXJ0X29mZnNldCwgc2VsZWN0aW9uLT5lbmRfb2Zmc2V0LCBudWxscHRyKSk7CisgICAgZ19hc3Nl
cnRfY21wc3RyKHRleHQuZ2V0KCksID09LCAiaXMgYSBsaW5lIik7CisKKyAgICBnX2Fzc2VydF90
cnVlKGF0c3BpX3RleHRfcmVtb3ZlX3NlbGVjdGlvbihBVFNQSV9URVhUKHAuZ2V0KCkpLCAwLCBu
dWxscHRyKSk7CisgICAgc2VsZWN0aW9uQ291bnQgPSBhdHNwaV90ZXh0X2dldF9uX3NlbGVjdGlv
bnMoQVRTUElfVEVYVChwLmdldCgpKSwgbnVsbHB0cik7CisgICAgZ19hc3NlcnRfY21wdWludChz
ZWxlY3Rpb25Db3VudCwgPT0sIDApOworICAgIGNhcmV0T2Zmc2V0ID0gYXRzcGlfdGV4dF9nZXRf
Y2FyZXRfb2Zmc2V0KEFUU1BJX1RFWFQocC5nZXQoKSksIG51bGxwdHIpOworICAgIGdfYXNzZXJ0
X2NtcGludChjYXJldE9mZnNldCwgPT0sIDE0KTsKKyAgICBnX2Fzc2VydF90cnVlKGF0c3BpX3Rl
eHRfc2V0X2NhcmV0X29mZnNldChBVFNQSV9URVhUKHAuZ2V0KCkpLCAwLCBudWxscHRyKSk7Cisg
ICAgY2FyZXRPZmZzZXQgPSBhdHNwaV90ZXh0X2dldF9jYXJldF9vZmZzZXQoQVRTUElfVEVYVChw
LmdldCgpKSwgbnVsbHB0cik7CisgICAgZ19hc3NlcnRfY21waW50KGNhcmV0T2Zmc2V0LCA9PSwg
MCk7CisKKyAgICBhdXRvIHNlY3Rpb24gPSBhZG9wdEdSZWYoYXRzcGlfYWNjZXNzaWJsZV9nZXRf
Y2hpbGRfYXRfaW5kZXgoZG9jdW1lbnRXZWIuZ2V0KCksIDEsIG51bGxwdHIpKTsKKyAgICBnX2Fz
c2VydF90cnVlKEFUU1BJX0lTX0FDQ0VTU0lCTEUoc2VjdGlvbi5nZXQoKSkpOworICAgIGdfYXNz
ZXJ0X2NtcGludChhdHNwaV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9jb3VudChzZWN0aW9uLmdldCgp
LCBudWxscHRyKSwgPT0sIDEpOworICAgIGF1dG8gaW5wdXQgPSBhZG9wdEdSZWYoYXRzcGlfYWNj
ZXNzaWJsZV9nZXRfY2hpbGRfYXRfaW5kZXgoc2VjdGlvbi5nZXQoKSwgMCwgbnVsbHB0cikpOwor
ICAgIGdfYXNzZXJ0X3RydWUoQVRTUElfSVNfVEVYVChpbnB1dC5nZXQoKSkpOworICAgIGdfYXNz
ZXJ0X3RydWUoYXRzcGlfdGV4dF9zZXRfY2FyZXRfb2Zmc2V0KEFUU1BJX1RFWFQoaW5wdXQuZ2V0
KCkpLCA1LCBudWxscHRyKSk7CisgICAgY2FyZXRPZmZzZXQgPSBhdHNwaV90ZXh0X2dldF9jYXJl
dF9vZmZzZXQoQVRTUElfVEVYVChpbnB1dC5nZXQoKSksIG51bGxwdHIpOworICAgIGdfYXNzZXJ0
X2NtcGludChjYXJldE9mZnNldCwgPT0sIDUpOworICAgIGdfYXNzZXJ0X3RydWUoYXRzcGlfdGV4
dF9zZXRfc2VsZWN0aW9uKEFUU1BJX1RFWFQoaW5wdXQuZ2V0KCkpLCAwLCA1LCAxMiwgbnVsbHB0
cikpOworICAgIHNlbGVjdGlvbkNvdW50ID0gYXRzcGlfdGV4dF9nZXRfbl9zZWxlY3Rpb25zKEFU
U1BJX1RFWFQoaW5wdXQuZ2V0KCkpLCBudWxscHRyKTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KHNl
bGVjdGlvbkNvdW50LCA9PSwgMSk7CisgICAgY2FyZXRPZmZzZXQgPSBhdHNwaV90ZXh0X2dldF9j
YXJldF9vZmZzZXQoQVRTUElfVEVYVChpbnB1dC5nZXQoKSksIG51bGxwdHIpOworICAgIGdfYXNz
ZXJ0X2NtcGludChjYXJldE9mZnNldCwgPT0sIDEyKTsKKyAgICBzZWxlY3Rpb24ucmVzZXQoYXRz
cGlfdGV4dF9nZXRfc2VsZWN0aW9uKEFUU1BJX1RFWFQoaW5wdXQuZ2V0KCkpLCAwLCBudWxscHRy
KSk7CisgICAgZ19hc3NlcnRfbm9ubnVsbChzZWxlY3Rpb24uZ2V0KCkpOworICAgIGdfYXNzZXJ0
X2NtcGludChzZWxlY3Rpb24tPnN0YXJ0X29mZnNldCwgPT0sIDUpOworICAgIGdfYXNzZXJ0X2Nt
cGludChzZWxlY3Rpb24tPmVuZF9vZmZzZXQsID09LCAxMik7CisgICAgdGV4dC5yZXNldChhdHNw
aV90ZXh0X2dldF90ZXh0KEFUU1BJX1RFWFQoaW5wdXQuZ2V0KCkpLCBzZWxlY3Rpb24tPnN0YXJ0
X29mZnNldCwgc2VsZWN0aW9uLT5lbmRfb2Zmc2V0LCBudWxscHRyKSk7CisgICAgZ19hc3NlcnRf
Y21wc3RyKHRleHQuZ2V0KCksID09LCAiaXMgdGV4dCIpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0
VGV4dEF0dHJpYnV0ZXMoQWNjZXNzaWJpbGl0eVRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7
CisgICAgdGVzdC0+c2hvd0luV2luZG93KDgwMCwgNjAwKTsKKyAgICB0ZXN0LT5sb2FkSHRtbCgK
KyAgICAgICAgIjxodG1sPiIKKyAgICAgICAgIiAgPGJvZHk+IgorICAgICAgICAiICAgIDxwPlRo
aXMgaXMgYSA8Yj5saW5lPC9iPiBvZiB0ZXh0PC9wPiIKKyAgICAgICAgIiAgPC9ib2R5PiIKKyAg
ICAgICAgIjwvaHRtbD4iLAorICAgICAgICBudWxscHRyKTsKKyAgICB0ZXN0LT53YWl0VW50aWxM
b2FkRmluaXNoZWQoKTsKKworICAgIGF1dG8gdGVzdEFwcCA9IHRlc3QtPmZpbmRUZXN0QXBwbGlj
YXRpb24oKTsKKyAgICBnX2Fzc2VydF90cnVlKEFUU1BJX0lTX0FDQ0VTU0lCTEUodGVzdEFwcC5n
ZXQoKSkpOworCisgICAgYXV0byBkb2N1bWVudFdlYiA9IHRlc3QtPmZpbmREb2N1bWVudFdlYih0
ZXN0QXBwLmdldCgpKTsKKyAgICBnX2Fzc2VydF90cnVlKEFUU1BJX0lTX0FDQ0VTU0lCTEUoZG9j
dW1lbnRXZWIuZ2V0KCkpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRzcGlfYWNjZXNzaWJsZV9n
ZXRfY2hpbGRfY291bnQoZG9jdW1lbnRXZWIuZ2V0KCksIG51bGxwdHIpLCA9PSwgMSk7CisKKyAg
ICBhdXRvIHAgPSBhZG9wdEdSZWYoYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfYXRfaW5kZXgo
ZG9jdW1lbnRXZWIuZ2V0KCksIDAsIG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF90cnVlKEFUU1BJ
X0lTX1RFWFQocC5nZXQoKSkpOworCisgICAgLy8gSW5jbHVkaW5nIGRlZmF1bHQgYXR0cmlidXRl
cy4KKyAgICBpbnQgc3RhcnRPZmZzZXQsIGVuZE9mZnNldDsKKyAgICBHUmVmUHRyPEdIYXNoVGFi
bGU+IGF0dHJpYnV0ZXMgPSBhZG9wdEdSZWYoYXRzcGlfdGV4dF9nZXRfYXR0cmlidXRlX3J1bihB
VFNQSV9URVhUKHAuZ2V0KCkpLCAwLCBUUlVFLCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQsIG51
bGxwdHIpKTsKKyAgICBnX2Fzc2VydF9ub25udWxsKGF0dHJpYnV0ZXMuZ2V0KCkpOworICAgIGdf
YXNzZXJ0X2NtcHVpbnQoZ19oYXNoX3RhYmxlX3NpemUoYXR0cmlidXRlcy5nZXQoKSksID4sIDEp
OworICAgIGdfYXNzZXJ0X2NtcHN0cihzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZ19oYXNoX3Rh
YmxlX2xvb2t1cChhdHRyaWJ1dGVzLmdldCgpLCAid2VpZ2h0IikpLCA9PSwgIjQwMCIpOworICAg
IGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNldCwgPT0sIDApOworICAgIGdfYXNzZXJ0X2NtcGlu
dChlbmRPZmZzZXQsID09LCAxMCk7CisKKyAgICBhdHRyaWJ1dGVzID0gYWRvcHRHUmVmKGF0c3Bp
X3RleHRfZ2V0X2F0dHJpYnV0ZV9ydW4oQVRTUElfVEVYVChwLmdldCgpKSwgMTIsIFRSVUUsICZz
dGFydE9mZnNldCwgJmVuZE9mZnNldCwgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0X25vbm51bGwo
YXR0cmlidXRlcy5nZXQoKSk7CisgICAgZ19hc3NlcnRfY21wdWludChnX2hhc2hfdGFibGVfc2l6
ZShhdHRyaWJ1dGVzLmdldCgpKSwgPiwgMSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHN0YXRpY19j
YXN0PGNvbnN0IGNoYXIqPihnX2hhc2hfdGFibGVfbG9va3VwKGF0dHJpYnV0ZXMuZ2V0KCksICJ3
ZWlnaHQiKSksID09LCAiNzAwIik7CisgICAgR1VuaXF1ZVB0cjxjaGFyPiB2YWx1ZShhdHNwaV90
ZXh0X2dldF9hdHRyaWJ1dGVfdmFsdWUoQVRTUElfVEVYVChwLmdldCgpKSwgMTEsIGNvbnN0X2Nh
c3Q8Y2hhcio+KCJ3ZWlnaHQiKSwgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0X2NtcHN0cih2YWx1
ZS5nZXQoKSwgPT0sICI3MDAiKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09
LCAxMCk7CisgICAgZ19hc3NlcnRfY21waW50KGVuZE9mZnNldCwgPT0sIDE0KTsKKworICAgIGF0
dHJpYnV0ZXMgPSBhZG9wdEdSZWYoYXRzcGlfdGV4dF9nZXRfYXR0cmlidXRlX3J1bihBVFNQSV9U
RVhUKHAuZ2V0KCkpLCAxNiwgVFJVRSwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0LCBudWxscHRy
KSk7CisgICAgZ19hc3NlcnRfbm9ubnVsbChhdHRyaWJ1dGVzLmdldCgpKTsKKyAgICBnX2Fzc2Vy
dF9jbXB1aW50KGdfaGFzaF90YWJsZV9zaXplKGF0dHJpYnV0ZXMuZ2V0KCkpLCA+LCAxKTsKKyAg
ICBnX2Fzc2VydF9jbXBzdHIoc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGdfaGFzaF90YWJsZV9s
b29rdXAoYXR0cmlidXRlcy5nZXQoKSwgIndlaWdodCIpKSwgPT0sICI0MDAiKTsKKyAgICBnX2Fz
c2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCAxNCk7CisgICAgZ19hc3NlcnRfY21waW50KGVu
ZE9mZnNldCwgPT0sIDIyKTsKKworICAgIC8vIFdpdGhvdXQgZGVmYXVsdCBhdHRyaWJ1dGVzLgor
ICAgIGF0dHJpYnV0ZXMgPSBhZG9wdEdSZWYoYXRzcGlfdGV4dF9nZXRfYXR0cmlidXRlX3J1bihB
VFNQSV9URVhUKHAuZ2V0KCkpLCAwLCBGQUxTRSwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0LCBu
dWxscHRyKSk7CisgICAgZ19hc3NlcnRfbm9ubnVsbChhdHRyaWJ1dGVzLmdldCgpKTsKKyAgICBn
X2Fzc2VydF9jbXB1aW50KGdfaGFzaF90YWJsZV9zaXplKGF0dHJpYnV0ZXMuZ2V0KCkpLCA9PSwg
MCk7CisgICAgZ19hc3NlcnRfY21waW50KHN0YXJ0T2Zmc2V0LCA9PSwgMCk7CisgICAgZ19hc3Nl
cnRfY21waW50KGVuZE9mZnNldCwgPT0sIDEwKTsKKworICAgIGF0dHJpYnV0ZXMgPSBhZG9wdEdS
ZWYoYXRzcGlfdGV4dF9nZXRfYXR0cmlidXRlX3J1bihBVFNQSV9URVhUKHAuZ2V0KCkpLCAxMiwg
RkFMU0UsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCwgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0
X25vbm51bGwoYXR0cmlidXRlcy5nZXQoKSk7CisgICAgZ19hc3NlcnRfY21wdWludChnX2hhc2hf
dGFibGVfc2l6ZShhdHRyaWJ1dGVzLmdldCgpKSwgPT0sIDEpOworICAgIGdfYXNzZXJ0X2NtcHN0
cihzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZ19oYXNoX3RhYmxlX2xvb2t1cChhdHRyaWJ1dGVz
LmdldCgpLCAid2VpZ2h0IikpLCA9PSwgIjcwMCIpOworICAgIGdfYXNzZXJ0X2NtcGludChzdGFy
dE9mZnNldCwgPT0sIDEwKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgMTQp
OworCisgICAgYXR0cmlidXRlcyA9IGFkb3B0R1JlZihhdHNwaV90ZXh0X2dldF9hdHRyaWJ1dGVf
cnVuKEFUU1BJX1RFWFQocC5nZXQoKSksIDE2LCBGQUxTRSwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zm
c2V0LCBudWxscHRyKSk7CisgICAgZ19hc3NlcnRfbm9ubnVsbChhdHRyaWJ1dGVzLmdldCgpKTsK
KyAgICBnX2Fzc2VydF9jbXB1aW50KGdfaGFzaF90YWJsZV9zaXplKGF0dHJpYnV0ZXMuZ2V0KCkp
LCA9PSwgMCk7CisgICAgZ19hc3NlcnRfY21waW50KHN0YXJ0T2Zmc2V0LCA9PSwgMTQpOworICAg
IGdfYXNzZXJ0X2NtcGludChlbmRPZmZzZXQsID09LCAyMik7CisKKyAgICAvLyBPbmx5IGRlZmF1
bHQgYXR0cmlidXRlcy4KKyAgICBhdHRyaWJ1dGVzID0gYWRvcHRHUmVmKGF0c3BpX3RleHRfZ2V0
X2RlZmF1bHRfYXR0cmlidXRlcyhBVFNQSV9URVhUKHAuZ2V0KCkpLCBudWxscHRyKSk7CisgICAg
Z19hc3NlcnRfbm9ubnVsbChhdHRyaWJ1dGVzLmdldCgpKTsKKyAgICBnX2Fzc2VydF9jbXB1aW50
KGdfaGFzaF90YWJsZV9zaXplKGF0dHJpYnV0ZXMuZ2V0KCkpLCA+LCAxKTsKKyAgICBnX2Fzc2Vy
dF9jbXBzdHIoc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGdfaGFzaF90YWJsZV9sb29rdXAoYXR0
cmlidXRlcy5nZXQoKSwgIndlaWdodCIpKSwgPT0sICI0MDAiKTsKKworI2lmIFVTRShBVFNQSSkK
KyAgICAvLyBBdHNwaSBpbXBsZW1lbnRhdGlvbiBoYW5kbGVzIHJhbmdlcyB3aXRoIHRoZSBzYW1l
IGF0dHJpYnV0ZXMgYXMgb25lIHJ1bi4KKyAgICB0ZXN0LT5sb2FkSHRtbCgKKyAgICAgICAgIjxo
dG1sPiIKKyAgICAgICAgIiAgPGJvZHk+IgorICAgICAgICAiICAgIDxwPlRoaXMgaXMgYSA8Yj5s
aTwvYj48Yj5uZTwvYj4gb2YgdGV4dDwvcD4iCisgICAgICAgICIgIDwvYm9keT4iCisgICAgICAg
ICI8L2h0bWw+IiwKKyAgICAgICAgbnVsbHB0cik7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZp
bmlzaGVkKCk7CisKKyAgICBkb2N1bWVudFdlYiA9IHRlc3QtPmZpbmREb2N1bWVudFdlYih0ZXN0
QXBwLmdldCgpKTsKKyAgICBnX2Fzc2VydF90cnVlKEFUU1BJX0lTX0FDQ0VTU0lCTEUoZG9jdW1l
bnRXZWIuZ2V0KCkpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRzcGlfYWNjZXNzaWJsZV9nZXRf
Y2hpbGRfY291bnQoZG9jdW1lbnRXZWIuZ2V0KCksIG51bGxwdHIpLCA9PSwgMSk7CisKKyAgICBw
ID0gYWRvcHRHUmVmKGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0X2luZGV4KGRvY3VtZW50
V2ViLmdldCgpLCAwLCBudWxscHRyKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShBVFNQSV9JU19URVhU
KHAuZ2V0KCkpKTsKKworICAgIGF0dHJpYnV0ZXMgPSBhZG9wdEdSZWYoYXRzcGlfdGV4dF9nZXRf
YXR0cmlidXRlX3J1bihBVFNQSV9URVhUKHAuZ2V0KCkpLCAwLCBUUlVFLCAmc3RhcnRPZmZzZXQs
ICZlbmRPZmZzZXQsIG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF9ub25udWxsKGF0dHJpYnV0ZXMu
Z2V0KCkpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQoZ19oYXNoX3RhYmxlX3NpemUoYXR0cmlidXRl
cy5nZXQoKSksID4sIDEpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzdGF0aWNfY2FzdDxjb25zdCBj
aGFyKj4oZ19oYXNoX3RhYmxlX2xvb2t1cChhdHRyaWJ1dGVzLmdldCgpLCAid2VpZ2h0IikpLCA9
PSwgIjQwMCIpOworICAgIGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNldCwgPT0sIDApOworICAg
IGdfYXNzZXJ0X2NtcGludChlbmRPZmZzZXQsID09LCAxMCk7CisKKyAgICBhdHRyaWJ1dGVzID0g
YWRvcHRHUmVmKGF0c3BpX3RleHRfZ2V0X2F0dHJpYnV0ZV9ydW4oQVRTUElfVEVYVChwLmdldCgp
KSwgMTIsIFRSVUUsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCwgbnVsbHB0cikpOworICAgIGdf
YXNzZXJ0X25vbm51bGwoYXR0cmlidXRlcy5nZXQoKSk7CisgICAgZ19hc3NlcnRfY21wdWludChn
X2hhc2hfdGFibGVfc2l6ZShhdHRyaWJ1dGVzLmdldCgpKSwgPiwgMSk7CisgICAgZ19hc3NlcnRf
Y21wc3RyKHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihnX2hhc2hfdGFibGVfbG9va3VwKGF0dHJp
YnV0ZXMuZ2V0KCksICJ3ZWlnaHQiKSksID09LCAiNzAwIik7CisgICAgZ19hc3NlcnRfY21waW50
KHN0YXJ0T2Zmc2V0LCA9PSwgMTApOworICAgIGdfYXNzZXJ0X2NtcGludChlbmRPZmZzZXQsID09
LCAxNCk7CisKKyAgICBhdHRyaWJ1dGVzID0gYWRvcHRHUmVmKGF0c3BpX3RleHRfZ2V0X2F0dHJp
YnV0ZV9ydW4oQVRTUElfVEVYVChwLmdldCgpKSwgMTYsIFRSVUUsICZzdGFydE9mZnNldCwgJmVu
ZE9mZnNldCwgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0X25vbm51bGwoYXR0cmlidXRlcy5nZXQo
KSk7CisgICAgZ19hc3NlcnRfY21wdWludChnX2hhc2hfdGFibGVfc2l6ZShhdHRyaWJ1dGVzLmdl
dCgpKSwgPiwgMSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHN0YXRpY19jYXN0PGNvbnN0IGNoYXIq
PihnX2hhc2hfdGFibGVfbG9va3VwKGF0dHJpYnV0ZXMuZ2V0KCksICJ3ZWlnaHQiKSksID09LCAi
NDAwIik7CisgICAgZ19hc3NlcnRfY21waW50KHN0YXJ0T2Zmc2V0LCA9PSwgMTQpOworICAgIGdf
YXNzZXJ0X2NtcGludChlbmRPZmZzZXQsID09LCAyMik7CisKKyNlbmRpZgorfQorCitzdGF0aWMg
dm9pZCB0ZXN0VGV4dFN0YXRlQ2hhbmdlZChBY2Nlc3NpYmlsaXR5VGVzdCogdGVzdCwgZ2NvbnN0
cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5zaG93SW5XaW5kb3coODAwLCA2MDApOworICAgIHRlc3Qt
PmxvYWRIdG1sKAorICAgICAgICAiPGh0bWw+IgorICAgICAgICAiICA8Ym9keT4iCisgICAgICAg
ICIgICAgPHA+VGhpcyBpcyBhIGxpbmUgb2YgdGV4dDwvcD4iCisgICAgICAgICIgICAgPGlucHV0
IHZhbHVlPSdUaGlzIGlzIGEgdGV4dCBmaWVsZCcvPiIKKyAgICAgICAgIiAgICA8ZGl2IGNvbnRl
bnRlZGl0YWJsZT10cnVlPlRoaXMgaXMgY29udGVudCBlZGl0YWJsZTwvZGl2PiIKKyAgICAgICAg
IiAgPC9ib2R5PiIKKyAgICAgICAgIjwvaHRtbD4iLAorICAgICAgICBudWxscHRyKTsKKyAgICB0
ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIGF1dG8gdGVzdEFwcCA9IHRlc3Qt
PmZpbmRUZXN0QXBwbGljYXRpb24oKTsKKyAgICBnX2Fzc2VydF90cnVlKEFUU1BJX0lTX0FDQ0VT
U0lCTEUodGVzdEFwcC5nZXQoKSkpOworCisgICAgYXV0byBkb2N1bWVudFdlYiA9IHRlc3QtPmZp
bmREb2N1bWVudFdlYih0ZXN0QXBwLmdldCgpKTsKKyAgICBnX2Fzc2VydF90cnVlKEFUU1BJX0lT
X0FDQ0VTU0lCTEUoZG9jdW1lbnRXZWIuZ2V0KCkpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRz
cGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfY291bnQoZG9jdW1lbnRXZWIuZ2V0KCksIG51bGxwdHIp
LCA9PSwgMyk7CisKKyAgICAvLyBUZXh0IGNhcmV0IG1vdmVkLgorICAgIGF1dG8gcCA9IGFkb3B0
R1JlZihhdHNwaV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9hdF9pbmRleChkb2N1bWVudFdlYi5nZXQo
KSwgMCwgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0X3RydWUoQVRTUElfSVNfVEVYVChwLmdldCgp
KSk7CisgICAgdGVzdC0+c3RhcnRFdmVudE1vbml0b3IocC5nZXQoKSwgeyAib2JqZWN0OnRleHQt
Y2FyZXQtbW92ZWQiIH0pOworICAgIGdfYXNzZXJ0X3RydWUoYXRzcGlfdGV4dF9zZXRfY2FyZXRf
b2Zmc2V0KEFUU1BJX1RFWFQocC5nZXQoKSksIDEwLCBudWxscHRyKSk7CisgICAgYXV0byBldmVu
dHMgPSB0ZXN0LT5zdG9wRXZlbnRNb25pdG9yKDEpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQoZXZl
bnRzLnNpemUoKSwgPT0sIDEpOworICAgIGdfYXNzZXJ0X2NtcHN0cihldmVudHNbMF0tPnR5cGUs
ID09LCAib2JqZWN0OnRleHQtY2FyZXQtbW92ZWQiKTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KGV2
ZW50c1swXS0+ZGV0YWlsMSwgPT0sIDEwKTsKKworICAgIGF1dG8gc2VjdGlvbiA9IGFkb3B0R1Jl
ZihhdHNwaV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9hdF9pbmRleChkb2N1bWVudFdlYi5nZXQoKSwg
MSwgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0X3RydWUoQVRTUElfSVNfQUNDRVNTSUJMRShzZWN0
aW9uLmdldCgpKSk7CisgICAgZ19hc3NlcnRfY21waW50KGF0c3BpX2FjY2Vzc2libGVfZ2V0X2No
aWxkX2NvdW50KHNlY3Rpb24uZ2V0KCksIG51bGxwdHIpLCA9PSwgMSk7CisgICAgYXV0byBpbnB1
dCA9IGFkb3B0R1JlZihhdHNwaV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9hdF9pbmRleChzZWN0aW9u
LmdldCgpLCAwLCBudWxscHRyKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShBVFNQSV9JU19URVhUKGlu
cHV0LmdldCgpKSk7CisgICAgdGVzdC0+c3RhcnRFdmVudE1vbml0b3IoaW5wdXQuZ2V0KCksIHsg
Im9iamVjdDp0ZXh0LWNhcmV0LW1vdmVkIiB9KTsKKyAgICBnX2Fzc2VydF90cnVlKGF0c3BpX3Rl
eHRfc2V0X2NhcmV0X29mZnNldChBVFNQSV9URVhUKGlucHV0LmdldCgpKSwgNSwgbnVsbHB0cikp
OworICAgIGV2ZW50cyA9IHRlc3QtPnN0b3BFdmVudE1vbml0b3IoMSk7CisgICAgZ19hc3NlcnRf
Y21wdWludChldmVudHMuc2l6ZSgpLCA9PSwgMSk7CisgICAgZ19hc3NlcnRfY21wc3RyKGV2ZW50
c1swXS0+dHlwZSwgPT0sICJvYmplY3Q6dGV4dC1jYXJldC1tb3ZlZCIpOworICAgIGdfYXNzZXJ0
X2NtcHVpbnQoZXZlbnRzWzBdLT5kZXRhaWwxLCA9PSwgNSk7CisKKyAgICBhdXRvIGRpdiA9IGFk
b3B0R1JlZihhdHNwaV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9hdF9pbmRleChkb2N1bWVudFdlYi5n
ZXQoKSwgMiwgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0X3RydWUoQVRTUElfSVNfVEVYVChkaXYu
Z2V0KCkpKTsKKyAgICB0ZXN0LT5zdGFydEV2ZW50TW9uaXRvcihkaXYuZ2V0KCksIHsgIm9iamVj
dDp0ZXh0LWNhcmV0LW1vdmVkIiB9KTsKKyAgICBnX2Fzc2VydF90cnVlKGF0c3BpX3RleHRfc2V0
X2NhcmV0X29mZnNldChBVFNQSV9URVhUKGRpdi5nZXQoKSksIDE1LCBudWxscHRyKSk7CisgICAg
ZXZlbnRzID0gdGVzdC0+c3RvcEV2ZW50TW9uaXRvcigxKTsKKyAgICBnX2Fzc2VydF9jbXB1aW50
KGV2ZW50cy5zaXplKCksID09LCAxKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoZXZlbnRzWzBdLT50
eXBlLCA9PSwgIm9iamVjdDp0ZXh0LWNhcmV0LW1vdmVkIik7CisgICAgZ19hc3NlcnRfY21wdWlu
dChldmVudHNbMF0tPmRldGFpbDEsID09LCAxNSk7CisKKyNpZiBVU0UoQVRTUEkpIC8vIFNlbGVj
dGlvbiBjaGFuZ2VkIHNlZW1zIHRvIGJlIGJyb2tlbiB3aXRoIEFUSy4KKyAgICAvLyBTZWxlY3Rp
b24gY2hhbmdlZC4KKyAgICB0ZXN0LT5zdGFydEV2ZW50TW9uaXRvcihwLmdldCgpLCB7ICJvYmpl
Y3Q6dGV4dC1zZWxlY3Rpb24tY2hhbmdlZCIsICJvYmplY3Q6dGV4dC1jYXJldC1tb3ZlZCIgfSk7
CisgICAgZ19hc3NlcnRfdHJ1ZShhdHNwaV90ZXh0X3NldF9zZWxlY3Rpb24oQVRTUElfVEVYVChw
LmdldCgpKSwgMCwgMTAsIDE1LCBudWxscHRyKSk7CisgICAgZXZlbnRzID0gdGVzdC0+c3RvcEV2
ZW50TW9uaXRvcigyKTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KGV2ZW50cy5zaXplKCksID09LCAy
KTsKKyAgICBhdXRvKiBldmVudCA9IEFjY2Vzc2liaWxpdHlUZXN0OjpmaW5kRXZlbnQoZXZlbnRz
LCAib2JqZWN0OnRleHQtY2FyZXQtbW92ZWQiKTsKKyAgICBnX2Fzc2VydF9ub25udWxsKGV2ZW50
KTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KGV2ZW50LT5kZXRhaWwxLCA9PSwgMTUpOworICAgIGdf
YXNzZXJ0X25vbm51bGwoQWNjZXNzaWJpbGl0eVRlc3Q6OmZpbmRFdmVudChldmVudHMsICJvYmpl
Y3Q6dGV4dC1zZWxlY3Rpb24tY2hhbmdlZCIpKTsKKworICAgIHRlc3QtPnN0YXJ0RXZlbnRNb25p
dG9yKGlucHV0LmdldCgpLCB7ICJvYmplY3Q6dGV4dC1zZWxlY3Rpb24tY2hhbmdlZCIsICJvYmpl
Y3Q6dGV4dC1jYXJldC1tb3ZlZCIgfSk7CisgICAgZ19hc3NlcnRfdHJ1ZShhdHNwaV90ZXh0X3Nl
dF9zZWxlY3Rpb24oQVRTUElfVEVYVChpbnB1dC5nZXQoKSksIDAsIDUsIDEwLCBudWxscHRyKSk7
CisgICAgZXZlbnRzID0gdGVzdC0+c3RvcEV2ZW50TW9uaXRvcigyKTsKKyAgICBnX2Fzc2VydF9j
bXB1aW50KGV2ZW50cy5zaXplKCksID09LCAyKTsKKyAgICBldmVudCA9IEFjY2Vzc2liaWxpdHlU
ZXN0OjpmaW5kRXZlbnQoZXZlbnRzLCAib2JqZWN0OnRleHQtY2FyZXQtbW92ZWQiKTsKKyAgICBn
X2Fzc2VydF9ub25udWxsKGV2ZW50KTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KGV2ZW50LT5kZXRh
aWwxLCA9PSwgMTApOworICAgIGdfYXNzZXJ0X25vbm51bGwoQWNjZXNzaWJpbGl0eVRlc3Q6OmZp
bmRFdmVudChldmVudHMsICJvYmplY3Q6dGV4dC1zZWxlY3Rpb24tY2hhbmdlZCIpKTsKKworICAg
IHRlc3QtPnN0YXJ0RXZlbnRNb25pdG9yKGRpdi5nZXQoKSwgeyAib2JqZWN0OnRleHQtc2VsZWN0
aW9uLWNoYW5nZWQiLCAib2JqZWN0OnRleHQtY2FyZXQtbW92ZWQiIH0pOworICAgIGdfYXNzZXJ0
X3RydWUoYXRzcGlfdGV4dF9zZXRfc2VsZWN0aW9uKEFUU1BJX1RFWFQoZGl2LmdldCgpKSwgMCwg
MTUsIDE4LCBudWxscHRyKSk7CisgICAgZXZlbnRzID0gdGVzdC0+c3RvcEV2ZW50TW9uaXRvcigy
KTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KGV2ZW50cy5zaXplKCksID09LCAyKTsKKyAgICBldmVu
dCA9IEFjY2Vzc2liaWxpdHlUZXN0OjpmaW5kRXZlbnQoZXZlbnRzLCAib2JqZWN0OnRleHQtY2Fy
ZXQtbW92ZWQiKTsKKyAgICBnX2Fzc2VydF9ub25udWxsKGV2ZW50KTsKKyAgICBnX2Fzc2VydF9j
bXB1aW50KGV2ZW50LT5kZXRhaWwxLCA9PSwgMTgpOworICAgIGdfYXNzZXJ0X25vbm51bGwoQWNj
ZXNzaWJpbGl0eVRlc3Q6OmZpbmRFdmVudChldmVudHMsICJvYmplY3Q6dGV4dC1zZWxlY3Rpb24t
Y2hhbmdlZCIpKTsKKyNlbmRpZgorCisgICAgLy8gVGV4dCBjaGFuZ2VkLgorICAgIGdfYXNzZXJ0
X3RydWUoYXRzcGlfdGV4dF9zZXRfY2FyZXRfb2Zmc2V0KEFUU1BJX1RFWFQoaW5wdXQuZ2V0KCkp
LCA1LCBudWxscHRyKSk7CisgICAgdGVzdC0+c3RhcnRFdmVudE1vbml0b3IoaW5wdXQuZ2V0KCks
IHsgIm9iamVjdDp0ZXh0LWNoYW5nZWQ6aW5zZXJ0IiwgIm9iamVjdDp0ZXh0LWNoYW5nZWQ6ZGVs
ZXRlIiB9KTsKKyAgICB0ZXN0LT5rZXlTdHJva2UoR0RLX0tFWV9hKTsKKyAgICBldmVudHMgPSB0
ZXN0LT5zdG9wRXZlbnRNb25pdG9yKDEpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQoZXZlbnRzLnNp
emUoKSwgPT0sIDEpOworICAgIGdfYXNzZXJ0X2NtcHN0cihldmVudHNbMF0tPnR5cGUsID09LCAi
b2JqZWN0OnRleHQtY2hhbmdlZDppbnNlcnQiKTsKKyNpZiBVU0UoQVRTUEkpCisgICAgZ19hc3Nl
cnRfY21wdWludChldmVudHNbMF0tPmRldGFpbDEsID09LCA1KTsKKyNlbmRpZgorICAgIGdfYXNz
ZXJ0X2NtcHVpbnQoZXZlbnRzWzBdLT5kZXRhaWwyLCA9PSwgMSk7CisgICAgZ19hc3NlcnRfdHJ1
ZShHX1ZBTFVFX0hPTERTX1NUUklORygmZXZlbnRzWzBdLT5hbnlfZGF0YSkpOworICAgIGdfYXNz
ZXJ0X2NtcHN0cihnX3ZhbHVlX2dldF9zdHJpbmcoJmV2ZW50c1swXS0+YW55X2RhdGEpLCA9PSwg
ImEiKTsKKyAgICBnX2Fzc2VydF90cnVlKGF0c3BpX3RleHRfc2V0X2NhcmV0X29mZnNldChBVFNQ
SV9URVhUKGlucHV0LmdldCgpKSwgMCwgbnVsbHB0cikpOworICAgIHRlc3QtPnN0YXJ0RXZlbnRN
b25pdG9yKGlucHV0LmdldCgpLCB7ICJvYmplY3Q6dGV4dC1jaGFuZ2VkOmluc2VydCIsICJvYmpl
Y3Q6dGV4dC1jaGFuZ2VkOmRlbGV0ZSIgfSk7CisgICAgdGVzdC0+a2V5U3Ryb2tlKEdES19LRVlf
RGVsZXRlKTsKKyAgICBldmVudHMgPSB0ZXN0LT5zdG9wRXZlbnRNb25pdG9yKDEpOworICAgIGdf
YXNzZXJ0X2NtcHVpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDEpOworICAgIGdfYXNzZXJ0X2NtcHN0
cihldmVudHNbMF0tPnR5cGUsID09LCAib2JqZWN0OnRleHQtY2hhbmdlZDpkZWxldGUiKTsKKyAg
ICBnX2Fzc2VydF9jbXB1aW50KGV2ZW50c1swXS0+ZGV0YWlsMSwgPT0sIDApOworICAgIGdfYXNz
ZXJ0X2NtcHVpbnQoZXZlbnRzWzBdLT5kZXRhaWwyLCA9PSwgMSk7CisgICAgZ19hc3NlcnRfdHJ1
ZShHX1ZBTFVFX0hPTERTX1NUUklORygmZXZlbnRzWzBdLT5hbnlfZGF0YSkpOworICAgIGdfYXNz
ZXJ0X2NtcHN0cihnX3ZhbHVlX2dldF9zdHJpbmcoJmV2ZW50c1swXS0+YW55X2RhdGEpLCA9PSwg
IlQiKTsKKworICAgIGdfYXNzZXJ0X3RydWUoYXRzcGlfdGV4dF9zZXRfY2FyZXRfb2Zmc2V0KEFU
U1BJX1RFWFQoZGl2LmdldCgpKSwgMTAsIG51bGxwdHIpKTsKKyAgICB0ZXN0LT5zdGFydEV2ZW50
TW9uaXRvcihkaXYuZ2V0KCksIHsgIm9iamVjdDp0ZXh0LWNoYW5nZWQ6aW5zZXJ0IiwgIm9iamVj
dDp0ZXh0LWNoYW5nZWQ6ZGVsZXRlIiB9KTsKKyAgICB0ZXN0LT5rZXlTdHJva2UoR0RLX0tFWV9i
KTsKKyAgICBldmVudHMgPSB0ZXN0LT5zdG9wRXZlbnRNb25pdG9yKDEpOworICAgIGdfYXNzZXJ0
X2NtcHVpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDEpOworICAgIGdfYXNzZXJ0X2NtcHN0cihldmVu
dHNbMF0tPnR5cGUsID09LCAib2JqZWN0OnRleHQtY2hhbmdlZDppbnNlcnQiKTsKKyNpZiBVU0Uo
QVRTUEkpCisgICAgZ19hc3NlcnRfY21wdWludChldmVudHNbMF0tPmRldGFpbDEsID09LCAxMCk7
CisjZW5kaWYKKyAgICBnX2Fzc2VydF9jbXB1aW50KGV2ZW50c1swXS0+ZGV0YWlsMiwgPT0sIDEp
OworICAgIGdfYXNzZXJ0X3RydWUoR19WQUxVRV9IT0xEU19TVFJJTkcoJmV2ZW50c1swXS0+YW55
X2RhdGEpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoZ192YWx1ZV9nZXRfc3RyaW5nKCZldmVudHNb
MF0tPmFueV9kYXRhKSwgPT0sICJiIik7CisgICAgZ19hc3NlcnRfdHJ1ZShhdHNwaV90ZXh0X3Nl
dF9jYXJldF9vZmZzZXQoQVRTUElfVEVYVChkaXYuZ2V0KCkpLCAxNSwgbnVsbHB0cikpOworICAg
IHRlc3QtPnN0YXJ0RXZlbnRNb25pdG9yKGRpdi5nZXQoKSwgeyAib2JqZWN0OnRleHQtY2hhbmdl
ZDppbnNlcnQiLCAib2JqZWN0OnRleHQtY2hhbmdlZDpkZWxldGUiIH0pOworICAgIHRlc3QtPmtl
eVN0cm9rZShHREtfS0VZX0JhY2tTcGFjZSk7CisgICAgZXZlbnRzID0gdGVzdC0+c3RvcEV2ZW50
TW9uaXRvcigxKTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KGV2ZW50cy5zaXplKCksID09LCAxKTsK
KyAgICBnX2Fzc2VydF9jbXBzdHIoZXZlbnRzWzBdLT50eXBlLCA9PSwgIm9iamVjdDp0ZXh0LWNo
YW5nZWQ6ZGVsZXRlIik7CisjaWYgVVNFKEFUU1BJKQorICAgIGdfYXNzZXJ0X2NtcHVpbnQoZXZl
bnRzWzBdLT5kZXRhaWwxLCA9PSwgMTQpOworI2VuZGlmCisgICAgZ19hc3NlcnRfY21wdWludChl
dmVudHNbMF0tPmRldGFpbDIsID09LCAxKTsKKyAgICBnX2Fzc2VydF90cnVlKEdfVkFMVUVfSE9M
RFNfU1RSSU5HKCZldmVudHNbMF0tPmFueV9kYXRhKSk7CisgICAgZ19hc3NlcnRfY21wc3RyKGdf
dmFsdWVfZ2V0X3N0cmluZygmZXZlbnRzWzBdLT5hbnlfZGF0YSksID09LCAibiIpOworCisgICAg
Ly8gVGV4dCByZXBsYWNlZC4KKyAgICBnX2Fzc2VydF90cnVlKGF0c3BpX3RleHRfc2V0X3NlbGVj
dGlvbihBVFNQSV9URVhUKGlucHV0LmdldCgpKSwgMCwgNSwgMTAsIG51bGxwdHIpKTsKKyAgICB0
ZXN0LT5zdGFydEV2ZW50TW9uaXRvcihpbnB1dC5nZXQoKSwgeyAib2JqZWN0OnRleHQtY2hhbmdl
ZDppbnNlcnQiLCAib2JqZWN0OnRleHQtY2hhbmdlZDpkZWxldGUiIH0pOworICAgIHRlc3QtPmtl
eVN0cm9rZShHREtfS0VZX2MpOworICAgIGV2ZW50cyA9IHRlc3QtPnN0b3BFdmVudE1vbml0b3Io
Mik7CisgICAgZ19hc3NlcnRfY21wdWludChldmVudHMuc2l6ZSgpLCA9PSwgMik7CisgICAgZ19h
c3NlcnRfY21wc3RyKGV2ZW50c1swXS0+dHlwZSwgPT0sICJvYmplY3Q6dGV4dC1jaGFuZ2VkOmRl
bGV0ZSIpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQoZXZlbnRzWzBdLT5kZXRhaWwxLCA9PSwgNik7
CisgICAgZ19hc3NlcnRfY21wdWludChldmVudHNbMF0tPmRldGFpbDIsID09LCA1KTsKKyAgICBn
X2Fzc2VydF90cnVlKEdfVkFMVUVfSE9MRFNfU1RSSU5HKCZldmVudHNbMF0tPmFueV9kYXRhKSk7
CisgICAgZ19hc3NlcnRfY21wc3RyKGdfdmFsdWVfZ2V0X3N0cmluZygmZXZlbnRzWzBdLT5hbnlf
ZGF0YSksID09LCAiaXMgYSAiKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoZXZlbnRzWzFdLT50eXBl
LCA9PSwgIm9iamVjdDp0ZXh0LWNoYW5nZWQ6aW5zZXJ0Iik7CisjaWYgVVNFKEFUU1BJKQorICAg
IGdfYXNzZXJ0X2NtcHVpbnQoZXZlbnRzWzFdLT5kZXRhaWwxLCA9PSwgNSk7CisjZW5kaWYKKyAg
ICBnX2Fzc2VydF9jbXB1aW50KGV2ZW50c1sxXS0+ZGV0YWlsMiwgPT0sIDEpOworICAgIGdfYXNz
ZXJ0X3RydWUoR19WQUxVRV9IT0xEU19TVFJJTkcoJmV2ZW50c1sxXS0+YW55X2RhdGEpKTsKKyAg
ICBnX2Fzc2VydF9jbXBzdHIoZ192YWx1ZV9nZXRfc3RyaW5nKCZldmVudHNbMV0tPmFueV9kYXRh
KSwgPT0sICJjIik7CisKKyAgICBnX2Fzc2VydF90cnVlKGF0c3BpX3RleHRfc2V0X3NlbGVjdGlv
bihBVFNQSV9URVhUKGRpdi5nZXQoKSksIDAsIDEwLCAxOCwgbnVsbHB0cikpOworICAgIHRlc3Qt
PnN0YXJ0RXZlbnRNb25pdG9yKGRpdi5nZXQoKSwgeyAib2JqZWN0OnRleHQtY2hhbmdlZDppbnNl
cnQiLCAib2JqZWN0OnRleHQtY2hhbmdlZDpkZWxldGUiIH0pOworICAgIHRlc3QtPmtleVN0cm9r
ZShHREtfS0VZX0RlbGV0ZSk7CisgICAgZXZlbnRzID0gdGVzdC0+c3RvcEV2ZW50TW9uaXRvcigx
KTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KGV2ZW50cy5zaXplKCksID09LCAxKTsKKyAgICBnX2Fz
c2VydF9jbXBzdHIoZXZlbnRzWzBdLT50eXBlLCA9PSwgIm9iamVjdDp0ZXh0LWNoYW5nZWQ6ZGVs
ZXRlIik7CisjaWYgVVNFKEFUU1BJKQorICAgIGdfYXNzZXJ0X2NtcHVpbnQoZXZlbnRzWzBdLT5k
ZXRhaWwxLCA9PSwgMTApOworI2VuZGlmCisgICAgZ19hc3NlcnRfY21wdWludChldmVudHNbMF0t
PmRldGFpbDIsID09LCA4KTsKKyAgICBnX2Fzc2VydF90cnVlKEdfVkFMVUVfSE9MRFNfU1RSSU5H
KCZldmVudHNbMF0tPmFueV9kYXRhKSk7CisgICAgZ19hc3NlcnRfY21wc3RyKGdfdmFsdWVfZ2V0
X3N0cmluZygmZXZlbnRzWzBdLT5hbnlfZGF0YSksID09LCAiYm50ZXQgZWQiKTsKKworI2lmIFVT
RShBVFNQSSkKKyAgICAvLyBUZXh0IGlucHV0IHZhbHVlIGNoYW5nZWQuCisgICAgdGVzdC0+c3Rh
cnRFdmVudE1vbml0b3IoaW5wdXQuZ2V0KCksIHsgIm9iamVjdDp0ZXh0LWNoYW5nZWQ6aW5zZXJ0
IiwgIm9iamVjdDp0ZXh0LWNoYW5nZWQ6ZGVsZXRlIiB9KTsKKyAgICB0ZXN0LT5ydW5KYXZhU2Ny
aXB0QW5kV2FpdFVudGlsRmluaXNoZWQoImRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdp
bnB1dCcpWzBdLnZhbHVlID0gJ2Zvbyc7IiwgbnVsbHB0cik7CisgICAgZXZlbnRzID0gdGVzdC0+
c3RvcEV2ZW50TW9uaXRvcigyKTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KGV2ZW50cy5zaXplKCks
ID09LCAyKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoZXZlbnRzWzBdLT50eXBlLCA9PSwgIm9iamVj
dDp0ZXh0LWNoYW5nZWQ6ZGVsZXRlIik7CisgICAgZ19hc3NlcnRfY21wdWludChldmVudHNbMF0t
PmRldGFpbDEsID09LCAwKTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KGV2ZW50c1swXS0+ZGV0YWls
MiwgPT0sIDE2KTsKKyAgICBnX2Fzc2VydF90cnVlKEdfVkFMVUVfSE9MRFNfU1RSSU5HKCZldmVu
dHNbMF0tPmFueV9kYXRhKSk7CisgICAgZ19hc3NlcnRfY21wc3RyKGdfdmFsdWVfZ2V0X3N0cmlu
ZygmZXZlbnRzWzBdLT5hbnlfZGF0YSksID09LCAiaGlzIGFjdGV4dCBmaWVsZCIpOworICAgIGdf
YXNzZXJ0X2NtcHN0cihldmVudHNbMV0tPnR5cGUsID09LCAib2JqZWN0OnRleHQtY2hhbmdlZDpp
bnNlcnQiKTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KGV2ZW50c1sxXS0+ZGV0YWlsMSwgPT0sIDAp
OworICAgIGdfYXNzZXJ0X2NtcHVpbnQoZXZlbnRzWzFdLT5kZXRhaWwyLCA9PSwgMyk7CisgICAg
Z19hc3NlcnRfdHJ1ZShHX1ZBTFVFX0hPTERTX1NUUklORygmZXZlbnRzWzFdLT5hbnlfZGF0YSkp
OworICAgIGdfYXNzZXJ0X2NtcHN0cihnX3ZhbHVlX2dldF9zdHJpbmcoJmV2ZW50c1sxXS0+YW55
X2RhdGEpLCA9PSwgImZvbyIpOworI2VuZGlmCit9CisKIHZvaWQgYmVmb3JlQWxsKCkKIHsKICAg
ICBBY2Nlc3NpYmlsaXR5VGVzdDo6YWRkKCJXZWJLaXRBY2Nlc3NpYmlsaXR5IiwgImFjY2Vzc2li
bGUvYmFzaWMtaGllcmFyY2h5IiwgdGVzdEFjY2Vzc2libGVCYXNpY0hpZXJhcmNoeSk7CkBAIC04
MTMsNiArMTUyMywxMyBAQCB2b2lkIGJlZm9yZUFsbCgpCiAgICAgQWNjZXNzaWJpbGl0eVRlc3Q6
OmFkZCgiV2ViS2l0QWNjZXNzaWJpbGl0eSIsICJhY2Nlc3NpYmxlL3N0YXRlLWNoYW5nZWQiLCB0
ZXN0QWNjZXNzaWJsZVN0YXRlQ2hhbmdlZCk7CiAgICAgQWNjZXNzaWJpbGl0eVRlc3Q6OmFkZCgi
V2ViS2l0QWNjZXNzaWJpbGl0eSIsICJjb21wb25lbnQvaGl0LXRlc3QiLCB0ZXN0Q29tcG9uZW50
SGl0VGVzdCk7CiAgICAgQWNjZXNzaWJpbGl0eVRlc3Q6OmFkZCgiV2ViS2l0QWNjZXNzaWJpbGl0
eSIsICJjb21wb25lbnQvc2Nyb2xsLXRvIiwgdGVzdENvbXBvbmVudFNjcm9sbFRvKTsKKyAgICBB
Y2Nlc3NpYmlsaXR5VGVzdDo6YWRkKCJXZWJLaXRBY2Nlc3NpYmlsaXR5IiwgInRleHQvYmFzaWMi
LCB0ZXN0VGV4dEJhc2ljKTsKKyAgICBBY2Nlc3NpYmlsaXR5VGVzdDo6YWRkKCJXZWJLaXRBY2Nl
c3NpYmlsaXR5IiwgInRleHQvc3Vycm9nYXRlLXBhaXIiLCB0ZXN0VGV4dFN1cnJvZ2F0ZVBhaXIp
OworICAgIEFjY2Vzc2liaWxpdHlUZXN0OjphZGQoIldlYktpdEFjY2Vzc2liaWxpdHkiLCAidGV4
dC9pdGVyYXRvciIsIHRlc3RUZXh0SXRlcmF0b3IpOworICAgIEFjY2Vzc2liaWxpdHlUZXN0Ojph
ZGQoIldlYktpdEFjY2Vzc2liaWxpdHkiLCAidGV4dC9leHRlbnRzIiwgdGVzdFRleHRFeHRlbnRz
KTsKKyAgICBBY2Nlc3NpYmlsaXR5VGVzdDo6YWRkKCJXZWJLaXRBY2Nlc3NpYmlsaXR5IiwgInRl
eHQvc2VsZWN0aW9ucyIsIHRlc3RUZXh0U2VsZWN0aW9ucyk7CisgICAgQWNjZXNzaWJpbGl0eVRl
c3Q6OmFkZCgiV2ViS2l0QWNjZXNzaWJpbGl0eSIsICJ0ZXh0L2F0dHJpYnV0ZXMiLCB0ZXN0VGV4
dEF0dHJpYnV0ZXMpOworICAgIEFjY2Vzc2liaWxpdHlUZXN0OjphZGQoIldlYktpdEFjY2Vzc2li
aWxpdHkiLCAidGV4dC9zdGF0ZS1jaGFuZ2VkIiwgdGVzdFRleHRTdGF0ZUNoYW5nZWQpOwogfQog
CiB2b2lkIGFmdGVyQWxsKCkK
</data>
<flag name="review"
          id="466242"
          type_id="1"
          status="+"
          setter="aperez"
    />
    <flag name="commit-queue"
          id="466249"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>