<?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>38279</bug_id>
          
          <creation_ts>2010-04-28 13:22:36 -0700</creation_ts>
          <short_desc>Add CPP bindings generator</short_desc>
          <delta_ts>2010-06-07 08:20:47 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Nikolas Zimmermann">zimmermann</reporter>
          <assigned_to name="Nikolas Zimmermann">zimmermann</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dumi</cc>
    
    <cc>krit</cc>
    
    <cc>lists.bugzilla</cc>
    
    <cc>mjs</cc>
    
    <cc>sam</cc>
    
    <cc>staikos</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zecke</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>218585</commentid>
    <comment_count>0</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-04-28 13:22:36 -0700</bug_when>
    <thetext>Add CPP bindings generator, inspired by chrome hand-written public API, similar to ObjC bindings.
Used in olympia platform since a while, not going to integrate with a specific build system for now.
I tested generation on Mac though, and it compiles just fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218595</commentid>
    <comment_count>1</comment_count>
      <attachid>54614</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-04-28 13:31:50 -0700</bug_when>
    <thetext>Created attachment 54614
Initial patch

Initial version of the CPP bindings generator.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218761</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-28 18:50:26 -0700</bug_when>
    <thetext>Attachment 54614 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/1882123</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218762</commentid>
    <comment_count>3</comment_count>
      <attachid>54614</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-04-28 18:54:02 -0700</bug_when>
    <thetext>Comment on attachment 54614
Initial patch

Cool!  Can you please integrate with run-bindings-tests so we can test the code generator included in this patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218895</commentid>
    <comment_count>4</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-04-29 01:25:35 -0700</bug_when>
    <thetext>Ah great idea! Forgot about this nifty new tool, glad you wrote it Adam. New patch coming, this time also building on Chromium.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218901</commentid>
    <comment_count>5</comment_count>
      <attachid>54683</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-04-29 01:34:58 -0700</bug_when>
    <thetext>Created attachment 54683
Updated patch

Integrated with run-bindings-test, should build on Chromium as well. Let&apos;s see...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218903</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-29 01:39:18 -0700</bug_when>
    <thetext>Attachment 54683 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebCore/bindings/scripts/test/CPP/WebDOMTestObj.cpp:29:  &quot;WebDOMTestObj.h&quot; already included at WebCore/bindings/scripts/test/CPP/WebDOMTestObj.cpp:22  [build/include] [4]
WebCore/bindings/scripts/test/CPP/WebDOMTestObj.cpp:33:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/bindings/scripts/test/CPP/WebDOMTestObj.cpp:391:  More than one command on the same line  [whitespace/newline] [4]
WebCore/bindings/scripts/test/CPP/WebDOMTestObj.h:30:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 4 in 43 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218910</commentid>
    <comment_count>7</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-04-29 01:46:57 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Attachment 54683 [details] did not pass style-queue:
&gt; 
&gt; Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot;
&gt; exit_code: 1
&gt; WebCore/bindings/scripts/test/CPP/WebDOMTestObj.cpp:29:  &quot;WebDOMTestObj.h&quot;
&gt; already included at WebCore/bindings/scripts/test/CPP/WebDOMTestObj.cpp:22 
&gt; [build/include] [4]
&gt; WebCore/bindings/scripts/test/CPP/WebDOMTestObj.cpp:33:  Alphabetical sorting
&gt; problem.  [build/include_order] [4]
&gt; WebCore/bindings/scripts/test/CPP/WebDOMTestObj.cpp:391:  More than one command
&gt; on the same line  [whitespace/newline] [4]
&gt; WebCore/bindings/scripts/test/CPP/WebDOMTestObj.h:30:  Code inside a namespace
&gt; should not be indented.  [whitespace/indent] [4]
&gt; Total errors found: 4 in 43 files

I guesss these style errors are fine. I _could_ tweak code generation to make this file pass, but:
a) it&apos;s not worth it - other files would have other problems
b) the other generated TestObj* files, have style issues as well

All other files don&apos;t show errors, so please ignore the red style bot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219048</commentid>
    <comment_count>8</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-04-29 08:40:17 -0700</bug_when>
    <thetext>&gt; I guesss these style errors are fine. I _could_ tweak code generation to make
&gt; this file pass, but:
&gt; a) it&apos;s not worth it - other files would have other problems
&gt; b) the other generated TestObj* files, have style issues as well

We&apos;ve been fixing style errors is the generated JSC and V8 bindings as we&apos;ve been finding them.  GObject seems to be in Gtk style (not WebKit style).  I think this fall squarely in the &quot;nice to have&quot; category.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219058</commentid>
    <comment_count>9</comment_count>
      <attachid>54683</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-04-29 09:11:29 -0700</bug_when>
    <thetext>Comment on attachment 54683
Updated patch

Looks pretty neat.  These are mostly questions and things to think about.

WebCore/bindings/cpp/WebDOMAttrCustom.cpp:26
 +  WebDOMString WebDOMAttr::value() const
Why can&apos;t this be autogenerated?

WebCore/bindings/cpp/WebDOMAttrCustom.cpp:34
 +  void WebDOMAttr::setValue(const WebDOMString&amp; value)
Ditto.

WebCore/bindings/cpp/WebDOMCString.cpp:34
 +          m_private-&gt;deref();
Manual ref counting is sad face.

WebCore/bindings/cpp/WebDOMCString.h:78
 +      WebDOMCStringPrivate* m_private;
Can&apos;t this be a RefPtr?

WebCore/bindings/cpp/WebDOMElementCustom.cpp:29
 +  void WebDOMElement::setAttribute(const WebDOMString&amp; name, const WebDOMString&amp; value)
Again, seems generatable.

WebCore/bindings/cpp/WebDOMEventListenerCustom.cpp:35
 +  WebDOMEventListener webKit(WebUserEventListener* value)
Maybe toWebKit?  This name seems very generic to put in the global namespace.

WebCore/bindings/cpp/WebDOMEventTarget.cpp:33
 +  WebCore::EventTarget* webCore(const WebDOMEventTarget&amp;)
Also a very generic name.

WebCore/bindings/cpp/WebDOMEventTarget.h:29
 +  class WebDOMEventTarget {
I wonder if you don&apos;t want to put all of this into some namespace...

WebCore/bindings/cpp/WebDOMHTMLDocumentCustom.cpp:28
 +  void WebDOMHTMLDocument::open()
This really seems autogeneratable.

WebCore/bindings/cpp/WebDOMHTMLFrameElementCustom.cpp:26
 +  WebDOMString WebDOMHTMLFrameElement::src() const
No security check, huh?  Interesting.

WebCore/bindings/cpp/WebDOMHTMLFrameElementCustom.cpp:42
 +  void WebDOMHTMLFrameElement::setLocation(const WebDOMString&amp; newLocation)
I think you need an attribute in the IDL that&apos;s like CPPNotCustom so you know that you can autogenerate all this this stuff even though other bindings need custom implementations.

WebCore/bindings/cpp/WebDOMNodeFilterCustom.cpp:26
 +  short WebDOMNodeFilter::acceptNode(const WebDOMNode&amp; n)
I think this recently became not [Custom].  You might need to check at TOT.

WebCore/bindings/cpp/WebDOMObject.h:36
 +  // UTF-16 character type
This seems like the wrong place for this declaration.

WebCore/bindings/cpp/WebDOMString.cpp:80
 +          m_private-&gt;ref();
Again, manual ref counting.

WebCore/bindings/cpp/WebExceptionHandlers.cpp:26
 +      // FIXME: Implement exception handling
I don&apos;t really see how you&apos;re going to do this.

WebCore/bindings/cpp/WebNativeEventListener.cpp:30
 +      m_listener-&gt;ref();
:*(

WebCore/bindings/scripts/CodeGeneratorCPP.pm:126
 +      # Start actual generation..
Extra . here.

WebCore/bindings/scripts/CodeGeneratorCPP.pm:148
 +      return &quot;WebDOMString&quot; if $codeGenerator-&gt;IsStringType($name) or $name eq &quot;SerializedScriptValue&quot;;
Hum...  Representing SerializedScriptValue as a string is an interesting choice.

WebCore/bindings/scripts/CodeGeneratorCPP.pm:203
 +      # TODO: We don&apos;t generate bindings for SVG related interfaces yet
FIXME instead of TODO.

WebCore/bindings/scripts/CodeGeneratorCPP.pm:329
 +  sub GenerateHeader
This function is too large.  Please split into smaller functions.

WebCore/bindings/scripts/CodeGeneratorCPP.pm:487
 +          push(@headerContent, &quot;    ${className}Private* m_d;\n&quot;);
Is it best to hold a raw pointer here?

WebCore/bindings/scripts/CodeGeneratorCPP.pm:589
 +          push(@implContent, &quot;    ${className}Private($implClassNameWithNamespace* _impl = 0)\n&quot;);
This name is out of style.

WebCore/bindings/scripts/CodeGeneratorCPP.pm:590
 +          push(@implContent, &quot;        : impl(_impl)\n&quot;);
Maybe m_impl?

WebCore/bindings/scripts/CodeGeneratorCPP.pm:593
 +          push(@implContent, &quot;    RefPtr&lt;$implClassNameWithNamespace&gt; impl;\n&quot;);
Ah, I see.  You&apos;re using a raw pointer to an object that has a RefPtr.  Why not just hold the RefPtr in the public class?

WebCore/bindings/scripts/CodeGeneratorCPP.pm:614
 +          push(@implContent, &quot;    m_d = copy.impl() ? new ${className}Private(copy.impl()) : 0;\n&quot;);
Manual new/delete is sadness.

WebCore/bindings/scripts/CodeGeneratorCPP.pm:658
 +                  # legacy behavior. (see http://bugs.webkit.org/show_bug.cgi?id=10889)
Why do we have legacy behavior in a new bindings layer?

WebCore/bindings/scripts/test/CPP/WebDOMTestObj.cpp:99
 +      if (!impl())
Calling impl() is slow.  You might consider caching it in a local variable, like we do in the JSC bindings.

WebCore/bindings/scripts/test/CPP/WebDOMTestObj.cpp:121
 +  void WebDOMTestObj::setLongLongAttr(const long long&amp; newLongLongAttr)
const long long&amp; ?  That&apos;s pretty strange.

WebCore/bindings/scripts/test/CPP/WebDOMTestObj.cpp:166
 +      return webKit(WTF::getPtr(impl()-&gt;testObjAttr()));
toWebKit or toCPP seems more consistent with toJS in the JSC bindings.

WebCore/bindings/scripts/test/CPP/WebDOMTestObj.cpp:304
 +      impl()-&gt;withDynamicFrame();
You don&apos;t implement this attribute yet, but that&apos;s fine.

WebCore/bindings/scripts/test/CPP/WebDOMTestObj.cpp:360
 +  void WebDOMTestObj::methodWithOptionalArg(const long&amp; opt)
You don&apos;t seem to implement [Optional] either.

WebCore/bindings/scripts/test/CPP/WebDOMTestObj.cpp:391
 +      { WEBDOM_ASSERT_MAIN_THREAD(); WebCoreThreadViolationCheckRoundOne(); };
These shouldn&apos;t be in the same line.

WebCore/bindings/scripts/test/CPP/WebDOMTestObj.h:99
 +  #endif
Missing namespace comment on #endif

WebCore/page/AbstractView.idl:35
 +          readonly attribute StyleMedia styleMedia;
Is this change correct?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219142</commentid>
    <comment_count>10</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-04-29 12:42:16 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 54683 [details])
&gt; Looks pretty neat.  These are mostly questions and things to think about.
&gt; 
&gt; WebCore/bindings/cpp/WebDOMAttrCustom.cpp:26
&gt;  +  WebDOMString WebDOMAttr::value() const
&gt; Why can&apos;t this be autogenerated?
&gt; 
&gt; WebCore/bindings/cpp/WebDOMAttrCustom.cpp:34
&gt;  +  void WebDOMAttr::setValue(const WebDOMString&amp; value)
&gt; Ditto.

Will investigate.

&gt; 
&gt; WebCore/bindings/cpp/WebDOMCString.cpp:34
&gt;  +          m_private-&gt;deref();
&gt; Manual ref counting is sad face.
&gt; 
&gt; WebCore/bindings/cpp/WebDOMCString.h:78
&gt;  +      WebDOMCStringPrivate* m_private;
&gt; Can&apos;t this be a RefPtr?

No, we can&apos;t use WTF API in those public headers.
Note that WebDOMCString &amp; WebDOMString are copied from chromium, which handles it exactly the same way, see WebKit/chromium/public/.

But I agree manual refcounting is a PITA, fortunately this is a rare place.
 
&gt; WebCore/bindings/cpp/WebDOMElementCustom.cpp:29
&gt;  +  void WebDOMElement::setAttribute(const WebDOMString&amp; name, const
&gt; WebDOMString&amp; value)
&gt; Again, seems generatable.
Will investigate.

&gt; 
&gt; WebCore/bindings/cpp/WebDOMEventListenerCustom.cpp:35
&gt;  +  WebDOMEventListener webKit(WebUserEventListener* value)
&gt; Maybe toWebKit?  This name seems very generic to put in the global namespace.

Oh, chosen to work like ObjC api, which uses the same naming convention (even simpler: core/kit, and I prefixed it with &apos;web&apos; to avoid these very generic names). If you prefer we could add a &apos;to&apos; prefix though. I&apos;m for it :-)

&gt; 
&gt; WebCore/bindings/cpp/WebDOMEventTarget.cpp:33
&gt;  +  WebCore::EventTarget* webCore(const WebDOMEventTarget&amp;)
&gt; Also a very generic name.
See above.

&gt; 
&gt; WebCore/bindings/cpp/WebDOMEventTarget.h:29
&gt;  +  class WebDOMEventTarget {
&gt; I wonder if you don&apos;t want to put all of this into some namespace...
Hm, need to think about it. George, what do you say?

&gt; 
&gt; WebCore/bindings/cpp/WebDOMHTMLDocumentCustom.cpp:28
&gt;  +  void WebDOMHTMLDocument::open()
&gt; This really seems autogeneratable.
True! Must be an old leftover...

&gt; 
&gt; WebCore/bindings/cpp/WebDOMHTMLFrameElementCustom.cpp:26
&gt;  +  WebDOMString WebDOMHTMLFrameElement::src() const
&gt; No security check, huh?  Interesting.
We handle security checks in another layer on top of this....
 
&gt; WebCore/bindings/cpp/WebDOMHTMLFrameElementCustom.cpp:42
&gt;  +  void WebDOMHTMLFrameElement::setLocation(const WebDOMString&amp; newLocation)
&gt; I think you need an attribute in the IDL that&apos;s like CPPNotCustom so you know
&gt; that you can autogenerate all this this stuff even though other bindings need
&gt; custom implementations.
Aha good idea.

&gt; 
&gt; WebCore/bindings/cpp/WebDOMNodeFilterCustom.cpp:26
&gt;  +  short WebDOMNodeFilter::acceptNode(const WebDOMNode&amp; n)
&gt; I think this recently became not [Custom].  You might need to check at TOT.
Yeah, I have an updated patch. Will upload it after I fixed all the other issues :-)

&gt; 
&gt; WebCore/bindings/cpp/WebDOMObject.h:36
&gt;  +  // UTF-16 character type
&gt; This seems like the wrong place for this declaration.
Yeah, but I did not want another header. This is just a convenience place to share between the two string classes.
 
&gt; WebCore/bindings/cpp/WebDOMString.cpp:80
&gt;  +          m_private-&gt;ref();
&gt; Again, manual ref counting.
Same reason as for WebDOMCString.

&gt; 
&gt; WebCore/bindings/cpp/WebExceptionHandlers.cpp:26
&gt;  +      // FIXME: Implement exception handling
&gt; I don&apos;t really see how you&apos;re going to do this.
We could provide a &quot;WebUserExceptionHandler&quot; that gets called here, aka. a callback. Did not yet think about that.

&gt; 
&gt; WebCore/bindings/cpp/WebNativeEventListener.cpp:30
&gt;  +      m_listener-&gt;ref();
&gt; :*(

I know, I know ;-)

&gt; 
&gt; WebCore/bindings/scripts/CodeGeneratorCPP.pm:126
&gt;  +      # Start actual generation..
&gt; Extra . here.
Will remove.

&gt; 
&gt; WebCore/bindings/scripts/CodeGeneratorCPP.pm:148
&gt;  +      return &quot;WebDOMString&quot; if $codeGenerator-&gt;IsStringType($name) or $name
&gt; eq &quot;SerializedScriptValue&quot;;
&gt; Hum...  Representing SerializedScriptValue as a string is an interesting
&gt; choice.
Same as ObjC, IIRC.

 
&gt; WebCore/bindings/scripts/CodeGeneratorCPP.pm:203
&gt;  +      # TODO: We don&apos;t generate bindings for SVG related interfaces yet
&gt; FIXME instead of TODO.
Right.

&gt; 
&gt; WebCore/bindings/scripts/CodeGeneratorCPP.pm:329
&gt;  +  sub GenerateHeader
&gt; This function is too large.  Please split into smaller functions.
Will check.
 
&gt; WebCore/bindings/scripts/CodeGeneratorCPP.pm:487
&gt;  +          push(@headerContent, &quot;    ${className}Private* m_d;\n&quot;);
&gt; Is it best to hold a raw pointer here?
Yeah, definately. We&apos;re not sharing the d-ptrs across other WebDOM* objects.

&gt; 
&gt; WebCore/bindings/scripts/CodeGeneratorCPP.pm:589
&gt;  +          push(@implContent, &quot;   
&gt; ${className}Private($implClassNameWithNamespace* _impl = 0)\n&quot;);
&gt; This name is out of style.
What do you mean?

&gt; 
&gt; WebCore/bindings/scripts/CodeGeneratorCPP.pm:590
&gt;  +          push(@implContent, &quot;        : impl(_impl)\n&quot;);
&gt; Maybe m_impl?
m_d-&gt;m_impl looks odd IMHO, that&apos;s why I&apos;ve used the impl(_impl) hackery here once, instead of deploying m_d-&gt;m_impl everywhere. What do you think, okay this way?


 
&gt; WebCore/bindings/scripts/CodeGeneratorCPP.pm:593
&gt;  +          push(@implContent, &quot;    RefPtr&lt;$implClassNameWithNamespace&gt;
&gt; impl;\n&quot;);
&gt; Ah, I see.  You&apos;re using a raw pointer to an object that has a RefPtr.  Why not
&gt; just hold the RefPtr in the public class?
For the reason mention above, to hide WTF usage. (We can&apos;t use any of WTF/WebCore in olympia, from the outside - WebDOM* API must be self-contained)

&gt; 
&gt; WebCore/bindings/scripts/CodeGeneratorCPP.pm:614
&gt;  +          push(@implContent, &quot;    m_d = copy.impl() ? new
&gt; ${className}Private(copy.impl()) : 0;\n&quot;);
&gt; Manual new/delete is sadness.
:-)

&gt; 
&gt; WebCore/bindings/scripts/CodeGeneratorCPP.pm:658
&gt;  +                  # legacy behavior. (see
&gt; http://bugs.webkit.org/show_bug.cgi?id=10889)
&gt; Why do we have legacy behavior in a new bindings layer?
Copy/Paste :-)

&gt; 
&gt; WebCore/bindings/scripts/test/CPP/WebDOMTestObj.cpp:99
&gt;  +      if (!impl())
&gt; Calling impl() is slow.  You might consider caching it in a local variable,
&gt; like we do in the JSC bindings.
Depends on the compiler, but yes, will investigate.

&gt; 
&gt; WebCore/bindings/scripts/test/CPP/WebDOMTestObj.cpp:121
&gt;  +  void WebDOMTestObj::setLongLongAttr(const long long&amp; newLongLongAttr)
&gt; const long long&amp; ?  That&apos;s pretty strange.
Well, we&apos;re always using &quot;const Type&amp;&quot; everywhere. It may look strange, but it&apos;s completly fine.
Wheter we&apos;re using &quot;long long&quot; or &quot;const long long&amp;&quot; here doesn&apos;t matter.
But I could definately change that, if desired. Would like to hear Georges voice as well here!

&gt; 
&gt; WebCore/bindings/scripts/test/CPP/WebDOMTestObj.cpp:166
&gt;  +      return webKit(WTF::getPtr(impl()-&gt;testObjAttr()));
&gt; toWebKit or toCPP seems more consistent with toJS in the JSC bindings.
Okay. As I said, it&apos;s from the ObjC bindings which use kit/core. But agreed, it&apos;s too confusing.

&gt; 
&gt; WebCore/bindings/scripts/test/CPP/WebDOMTestObj.cpp:304
&gt;  +      impl()-&gt;withDynamicFrame();
&gt; You don&apos;t implement this attribute yet, but that&apos;s fine.
Ok.

&gt; 
&gt; WebCore/bindings/scripts/test/CPP/WebDOMTestObj.cpp:360
&gt;  +  void WebDOMTestObj::methodWithOptionalArg(const long&amp; opt)
&gt; You don&apos;t seem to implement [Optional] either.
Right.

&gt; 
&gt; WebCore/bindings/scripts/test/CPP/WebDOMTestObj.cpp:391
&gt;  +      { WEBDOM_ASSERT_MAIN_THREAD(); WebCoreThreadViolationCheckRoundOne();
&gt; };
&gt; These shouldn&apos;t be in the same line.
Okay. Copy/Paste from ObjC generator.

&gt; 
&gt; WebCore/bindings/scripts/test/CPP/WebDOMTestObj.h:99
&gt;  +  #endif
&gt; Missing namespace comment on #endif
On purpose. It&apos;s not a style rule anymore IIRC. And I dislike it.

&gt; 
&gt; WebCore/page/AbstractView.idl:35
&gt;  +          readonly attribute StyleMedia styleMedia;
&gt; Is this change correct?
Yes &quot;Media.h&quot; does not exist. The generated JS bindings etc won&apos;t compile - but no one compiles JSAbstractView, so no one noticed.

Thanks A LOT for the review! Didn&apos;t expect a fast reply like this!
Going to prepare a new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219279</commentid>
    <comment_count>11</comment_count>
    <who name="George Staikos">staikos</who>
    <bug_when>2010-04-29 16:56:20 -0700</bug_when>
    <thetext>(In reply to comment #10)

&gt; &gt; WebCore/bindings/scripts/test/CPP/WebDOMTestObj.h:99
&gt; &gt;  +  #endif
&gt; &gt; Missing namespace comment on #endif
&gt; On purpose. It&apos;s not a style rule anymore IIRC. And I dislike it.

  And some compilers warn about it which is annoying.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219395</commentid>
    <comment_count>12</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-04-30 00:52:28 -0700</bug_when>
    <thetext>Okay, I take back my comments regarding the style problems:
nikolaszimmermann ~/Coding/WebKit/WebCore/bindings/cpp &gt; check-webkit-style generated/*.*           
Total errors found: 0 in 476 files

Can now generate all files w/o any style problem. Also lots more can be autogenerated, glad for all the comments.... going to upload a new patch soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219449</commentid>
    <comment_count>13</comment_count>
      <attachid>54796</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-04-30 05:01:40 -0700</bug_when>
    <thetext>Created attachment 54796
Updated patch v2

Fixed most issues Adam raised, except splitting up GenerateHeader/Implementation in smaller pieces.
I&apos;d love to do that in a follow-up patch, cleaning up the whole CodeGeneratorCPP.pm module, together with preparing the addition of adding bindings generation for SVG. Would be great if you&apos;d be fine with that.

While I was at it:
* Implemented a callback mechanism to handle exceptions (webInstallExceptionHandler)
* Implement WebDOMEventTarget for real. Only thing missing is a way to find out what&apos;s the underlying object (Node/XMLHttpRequest etc..) -&gt; left for a follow-up patch, because it needs discussion first with other RIM folks
* Fixed all style issues in generated code

nikolaszimmermann ~/Coding/WebKit/WebCore/bindings/cpp &gt; check-webkit-style *.cpp *.h generated/*.cpp generated/*.h
Total errors found: 0 in 491 files</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219502</commentid>
    <comment_count>14</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-04-30 09:19:33 -0700</bug_when>
    <thetext>Awesome thanks.  We should probably have one more bindings expert look at your patch.  Also, I didn&apos;t review the Perl code in much detail because my understanding of Perl is &quot;primitive&quot; to say the least.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220409</commentid>
    <comment_count>15</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-05-03 18:34:53 -0700</bug_when>
    <thetext>Do the .h and .cpp files need to have the svn:executable property?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220460</commentid>
    <comment_count>16</comment_count>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2010-05-03 21:48:48 -0700</bug_when>
    <thetext>Could you consider naming it c++? I am not sure if I am the only one associating CPP with the C Pre Processor and the environment variable which is written in capital letters as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220519</commentid>
    <comment_count>17</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-05-04 01:13:19 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; Do the .h and .cpp files need to have the svn:executable property?
Oops, they don&apos;t. Will remove them before landing.

(In reply to comment #16)
&gt; Could you consider naming it c++? I am not sure if I am the only one
&gt; associating CPP with the C Pre Processor and the environment variable which is
&gt; written in capital letters as well.
I don&apos;t want to risk breaking win platforms. Naming it cpp is safer than c++. I&apos;d vote to leave it as-is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>223815</commentid>
    <comment_count>18</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-05-11 01:41:19 -0700</bug_when>
    <thetext>Any news on this patch?
Sam, do you have some time to check it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>224010</commentid>
    <comment_count>19</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-05-11 10:46:19 -0700</bug_when>
    <thetext>Comments:

- You should probably try to ignore the &quot;Custom&quot; extended attribute to begin with, we have so far gotten away with not having any custom bindings the Objective-C generator.
- Keep it CPP.
- I think the first iteration should try and avoid adding new methods to the IDL. We should follow up with those additions and consider generalizing them (I am referring to functions like isMutationEvent())
- I am not a fan of the name m_d, can we use m_impl?
- I think you want IDL long to map to int
- I don&apos;t think you pass primitives as const references (void setLongLongAttr(const long long&amp;);)
- Why are you doing the threading violation checks? Is that to match objc?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226865</commentid>
    <comment_count>20</comment_count>
    <who name="Kartikaya Gupta">lists.bugzilla</who>
    <bug_when>2010-05-17 12:51:49 -0700</bug_when>
    <thetext>Niko, can you move the following lines from WebExceptionHandler.h into a separate .h file?

+ typedef int WebDOMExceptionCode;
+ typedef void (*WebExceptionHandler)(WebDOMExceptionCode);
+ 
+ // Used from the outside to register a callback that gets fired whenever an exception is raised
+ void webInstallExceptionHandler(WebExceptionHandler);

Otherwse outside code needing to register an exception handler will need to include WebExceptionHandler.h, which includes webkit internals like wtf/Assertions.h and wtf/Threading.h.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230414</commentid>
    <comment_count>21</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-05-25 13:14:14 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; Comments:
&gt; 
&gt; - You should probably try to ignore the &quot;Custom&quot; extended attribute to begin with, we have so far gotten away with not having any custom bindings the Objective-C generator.
I&apos;ve only implemented the few cases, that we actually need in Olympia.

&gt; - Keep it CPP.
Done.

&gt; - I think the first iteration should try and avoid adding new methods to the IDL. We should follow up with those additions and consider generalizing them (I am referring to functions like isMutationEvent())
I&apos;d rather generalize the other way round, landing with those functions. It has no impact on other generators, I think it&apos;s just fine for now, no?

&gt; - I am not a fan of the name m_d, can we use m_impl?
Fixed.

&gt; - I think you want IDL long to map to int
Fixed.

&gt; - I don&apos;t think you pass primitives as const references (void setLongLongAttr(const long long&amp;);)
Looking at it.

&gt; - Why are you doing the threading violation checks? Is that to match objc?
Yeah, they should be removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230415</commentid>
    <comment_count>22</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-05-25 13:15:56 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; Niko, can you move the following lines from WebExceptionHandler.h into a separate .h file?
&gt; 
&gt; + typedef int WebDOMExceptionCode;
&gt; + typedef void (*WebExceptionHandler)(WebDOMExceptionCode);
&gt; + 
&gt; + // Used from the outside to register a callback that gets fired whenever an exception is raised
&gt; + void webInstallExceptionHandler(WebExceptionHandler);
&gt; 
&gt; Otherwse outside code needing to register an exception handler will need to include WebExceptionHandler.h, which includes webkit internals like wtf/Assertions.h and wtf/Threading.h.

I have removed the thread violation checks, it&apos;s not needed for us, and legacy code from the ObjC generator (which was the base for the cpp bindings). The WebExceptionHandler.h file doesn&apos;t include any wtf/ code anymore. That should fix the problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230607</commentid>
    <comment_count>23</comment_count>
      <attachid>57076</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-05-26 01:21:32 -0700</bug_when>
    <thetext>Created attachment 57076
Updated patch v3

Fixed all issues reported by Sam and Kats, except one. I still export the isMutationEvent etc. helper methods, as they&apos;re in use at the moment within Olympia.
We&apos;d like to generalize this, though I&apos;d really love to see the patch upstreamed first. We&apos;ll come back to it for sure. Hope that&apos;s okay, as it does not affect other ports?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233214</commentid>
    <comment_count>24</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-06-02 05:25:49 -0700</bug_when>
    <thetext>Sam, any news on this patch? :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234638</commentid>
    <comment_count>25</comment_count>
      <attachid>57076</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-06-05 16:28:41 -0700</bug_when>
    <thetext>Comment on attachment 57076
Updated patch v3

Looks good. But I don&apos;t see how these files are getting built. Otherwise, r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234856</commentid>
    <comment_count>26</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-06-07 08:11:56 -0700</bug_when>
    <thetext>Landed in r60784.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54614</attachid>
            <date>2010-04-28 13:31:50 -0700</date>
            <delta_ts>2010-04-29 01:34:58 -0700</delta_ts>
            <desc>Initial patch</desc>
            <filename>BindingsPatch.diff</filename>
            <type>text/plain</type>
            <size>100265</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1ODQyMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTI0IEBACisyMDEwLTA0LTI4ICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuemltbWVy
bWFubkByaW0uY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEFkZCBDUFAgYmluZGluZ3MgZ2VuZXJhdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zODI3OQorCisgICAgICAgIEFkZCBDUFAgYmluZGlu
Z3MgZ2VuZXJhdG9yIHVzZWQgaW4gT2x5bXBpYSBwbGF0Zm9ybS4KKyAgICAgICAgR2VuZXJhdGVz
IGNvZGUgZm9yIGFsbCBJRExzIGV4Y2VwdCBTVkcsIHdoaWNoIGFyZSBub3QgbmVlZGVkIGF0IHRo
ZSBtb21lbnQuCisKKyAgICAgICAgTm90IGludGVncmF0ZWQgaW4gYW55IGJ1aWxkIHN5c3RlbSBz
byBmYXIsIHRob3VnaCBJJ3ZlIHN1Y2Nlc3NmdWxseSB0ZXN0ZWQgb24gTWFjLgorCisgICAgICAg
ICogYmluZGluZ3MvY3BwOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9jcHAvV2ViRE9NQXR0
ckN1c3RvbS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViRE9NQXR0cjo6dmFsdWUpOgorICAgICAg
ICAoV2ViRE9NQXR0cjo6c2V0VmFsdWUpOgorICAgICAgICAqIGJpbmRpbmdzL2NwcC9XZWJET01D
U3RyaW5nLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJET01DU3RyaW5nOjpyZXNldCk6CisgICAg
ICAgIChXZWJET01DU3RyaW5nOjphc3NpZ24pOgorICAgICAgICAoV2ViRE9NQ1N0cmluZzo6bGVu
Z3RoKToKKyAgICAgICAgKFdlYkRPTUNTdHJpbmc6OmRhdGEpOgorICAgICAgICAoV2ViRE9NQ1N0
cmluZzo6dXRmMTYpOgorICAgICAgICAoV2ViRE9NQ1N0cmluZzo6ZnJvbVVURjE2KToKKyAgICAg
ICAgKFdlYkRPTUNTdHJpbmc6OldlYkRPTUNTdHJpbmcpOgorICAgICAgICAoV2ViRE9NQ1N0cmlu
Zzo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYkRPTUNTdHJpbmc6Om9wZXJhdG9yIFdURjo6Q1N0
cmluZyk6CisgICAgICAgICogYmluZGluZ3MvY3BwL1dlYkRPTUNTdHJpbmcuaDogQWRkZWQuCisg
ICAgICAgIChXZWJET01DU3RyaW5nOjp+V2ViRE9NQ1N0cmluZyk6CisgICAgICAgIChXZWJET01D
U3RyaW5nOjpXZWJET01DU3RyaW5nKToKKyAgICAgICAgKFdlYkRPTUNTdHJpbmc6Om9wZXJhdG9y
PSk6CisgICAgICAgIChXZWJET01DU3RyaW5nOjppc0VtcHR5KToKKyAgICAgICAgKFdlYkRPTUNT
dHJpbmc6OmlzTnVsbCk6CisgICAgICAgICogYmluZGluZ3MvY3BwL1dlYkRPTUVsZW1lbnRDdXN0
b20uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkRPTUVsZW1lbnQ6OnNldEF0dHJpYnV0ZSk6Cisg
ICAgICAgIChXZWJET01FbGVtZW50OjpzZXRBdHRyaWJ1dGVOb2RlKToKKyAgICAgICAgKFdlYkRP
TUVsZW1lbnQ6OnNldEF0dHJpYnV0ZU5TKToKKyAgICAgICAgKFdlYkRPTUVsZW1lbnQ6OnNldEF0
dHJpYnV0ZU5vZGVOUyk6CisgICAgICAgICogYmluZGluZ3MvY3BwL1dlYkRPTUV2ZW50TGlzdGVu
ZXJDdXN0b20uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkRPTUV2ZW50TGlzdGVuZXI6OmhhbmRs
ZUV2ZW50KToKKyAgICAgICAgKHdlYktpdCk6CisgICAgICAgICogYmluZGluZ3MvY3BwL1dlYkRP
TUV2ZW50VGFyZ2V0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJET01FdmVudFRhcmdldDo6V2Vi
RE9NRXZlbnRUYXJnZXQpOgorICAgICAgICAod2ViQ29yZSk6CisgICAgICAgICh3ZWJLaXQpOgor
ICAgICAgICAqIGJpbmRpbmdzL2NwcC9XZWJET01FdmVudFRhcmdldC5oOiBBZGRlZC4KKyAgICAg
ICAgKiBiaW5kaW5ncy9jcHAvV2ViRE9NSFRNTERvY3VtZW50Q3VzdG9tLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJET01IVE1MRG9jdW1lbnQ6Om9wZW4pOgorICAgICAgICAoZG9jdW1lbnRXcml0
ZSk6CisgICAgICAgIChXZWJET01IVE1MRG9jdW1lbnQ6OndyaXRlKToKKyAgICAgICAgKFdlYkRP
TUhUTUxEb2N1bWVudDo6d3JpdGVsbik6CisgICAgICAgICogYmluZGluZ3MvY3BwL1dlYkRPTUhU
TUxGcmFtZUVsZW1lbnRDdXN0b20uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkRPTUhUTUxGcmFt
ZUVsZW1lbnQ6OnNyYyk6CisgICAgICAgIChXZWJET01IVE1MRnJhbWVFbGVtZW50OjpzZXRTcmMp
OgorICAgICAgICAoV2ViRE9NSFRNTEZyYW1lRWxlbWVudDo6c2V0TG9jYXRpb24pOgorICAgICAg
ICAqIGJpbmRpbmdzL2NwcC9XZWJET01IVE1MSUZyYW1lRWxlbWVudEN1c3RvbS5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViRE9NSFRNTElGcmFtZUVsZW1lbnQ6OnNyYyk6CisgICAgICAgIChXZWJE
T01IVE1MSUZyYW1lRWxlbWVudDo6c2V0U3JjKToKKyAgICAgICAgKiBiaW5kaW5ncy9jcHAvV2Vi
RE9NTm9kZUN1c3RvbS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViRE9NTm9kZTo6aW5zZXJ0QmVm
b3JlKToKKyAgICAgICAgKFdlYkRPTU5vZGU6OnJlcGxhY2VDaGlsZCk6CisgICAgICAgIChXZWJE
T01Ob2RlOjpyZW1vdmVDaGlsZCk6CisgICAgICAgIChXZWJET01Ob2RlOjphcHBlbmRDaGlsZCk6
CisgICAgICAgIChXZWJET01Ob2RlOjphZGRFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkRP
TU5vZGU6OnJlbW92ZUV2ZW50TGlzdGVuZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2NwcC9XZWJE
T01Ob2RlRmlsdGVyQ3VzdG9tLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJET01Ob2RlRmlsdGVy
OjphY2NlcHROb2RlKToKKyAgICAgICAgKiBiaW5kaW5ncy9jcHAvV2ViRE9NT2JqZWN0Lmg6IEFk
ZGVkLgorICAgICAgICAoV2ViRE9NT2JqZWN0OjpXZWJET01PYmplY3QpOgorICAgICAgICAoV2Vi
RE9NT2JqZWN0Ojp+V2ViRE9NT2JqZWN0KToKKyAgICAgICAgKiBiaW5kaW5ncy9jcHAvV2ViRE9N
U3RyaW5nLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJET01TdHJpbmc6OnJlc2V0KToKKyAgICAg
ICAgKFdlYkRPTVN0cmluZzo6YXNzaWduKToKKyAgICAgICAgKFdlYkRPTVN0cmluZzo6bGVuZ3Ro
KToKKyAgICAgICAgKFdlYkRPTVN0cmluZzo6ZGF0YSk6CisgICAgICAgIChXZWJET01TdHJpbmc6
OnV0ZjgpOgorICAgICAgICAoV2ViRE9NU3RyaW5nOjpmcm9tVVRGOCk6CisgICAgICAgIChXZWJE
T01TdHJpbmc6OldlYkRPTVN0cmluZyk6CisgICAgICAgIChXZWJET01TdHJpbmc6Om9wZXJhdG9y
PSk6CisgICAgICAgIChXZWJET01TdHJpbmc6Om9wZXJhdG9yIFdlYkNvcmU6OlN0cmluZyk6Cisg
ICAgICAgIChXZWJET01TdHJpbmc6Om9wZXJhdG9yIFdlYkNvcmU6OkF0b21pY1N0cmluZyk6Cisg
ICAgICAgIChXZWJET01TdHJpbmc6OmVxdWFscyk6CisgICAgICAgICogYmluZGluZ3MvY3BwL1dl
YkRPTVN0cmluZy5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkRPTVN0cmluZzo6fldlYkRPTVN0cmlu
Zyk6CisgICAgICAgIChXZWJET01TdHJpbmc6OldlYkRPTVN0cmluZyk6CisgICAgICAgIChXZWJE
T01TdHJpbmc6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJET01TdHJpbmc6OmlzRW1wdHkpOgor
ICAgICAgICAoV2ViRE9NU3RyaW5nOjppc051bGwpOgorICAgICAgICAqIGJpbmRpbmdzL2NwcC9X
ZWJFeGNlcHRpb25IYW5kbGVycy5jcHA6IEFkZGVkLgorICAgICAgICAod2ViUmFpc2VET01FeGNl
cHRpb24pOgorICAgICAgICAqIGJpbmRpbmdzL2NwcC9XZWJFeGNlcHRpb25IYW5kbGVycy5oOiBB
ZGRlZC4KKyAgICAgICAgKHdlYkRPTVJhaXNlRXJyb3IpOgorICAgICAgICAqIGJpbmRpbmdzL2Nw
cC9XZWJOYXRpdmVFdmVudExpc3RlbmVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJOYXRpdmVF
dmVudExpc3RlbmVyOjpXZWJOYXRpdmVFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYk5hdGl2
ZUV2ZW50TGlzdGVuZXI6On5XZWJOYXRpdmVFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYk5h
dGl2ZUV2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKFdlYk5hdGl2ZUV2ZW50
TGlzdGVuZXI6OnJlcG9ydEVycm9yKToKKyAgICAgICAgKFdlYk5hdGl2ZUV2ZW50TGlzdGVuZXI6
Om9wZXJhdG9yPT0pOgorICAgICAgICAqIGJpbmRpbmdzL2NwcC9XZWJOYXRpdmVFdmVudExpc3Rl
bmVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViTmF0aXZlRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYk5hdGl2ZUV2ZW50TGlzdGVuZXI6OmNhc3QpOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckNQUC5wbTogQWRkZWQuCisgICAgICAgICogY3NzL1N0
eWxlU2hlZXQuaWRsOiBFeHBvcnQgaGVscGVyIG1ldGhvZCBpc0NTU1N0eWxlU2hlZXQoKSBmb3Ig
Y3BwIGJpbmRpbmdzIG9ubHkuCisgICAgICAgICogZG9tL0N1c3RvbUV2ZW50LmlkbDogRGlzYWJs
ZWQgZm9yIGNwcCBiaW5kaW5ncywgbmVlZHMgYXJiaXRhcnkgaW5wdXQgcGFyYW1ldGVyIGhhbmRs
aW5nIHN1cHBvcnQuCisgICAgICAgICogZG9tL0RvY3VtZW50LmlkbDogSWdub3JlIGdldENTU0Nh
bnZhc0NvbnRleHQoKSBmb3IgY3BwIGJpbmRpbmdzIGFuZCBleHBvcnQgaGVscGVyIG1ldGhvZCBp
c0hUTUxEb2N1bWVudCgpIChjcHAgYmluZGluZ3Mgb25seSkuCisgICAgICAgICogZG9tL0V2ZW50
LmlkbDogRXhwb3J0IGlzTXV0YXRpb25FdmVudCgpL2lzTW91c2VFdmVudCgpL2lzVUlFdmVudCgp
IGhlbHBlcnMgZm9yIGNwcCBiaW5kaW5ncyBvbmx5LgorICAgICAgICAqIGRvbS9FdmVudExpc3Rl
bmVyLmg6IEFkZCBDUFBFdmVudExpc3RlbmVyVHlwZS4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50
TGlzdGVuZXI6Oik6CisgICAgICAgICogZG9tL05vZGUuaWRsOiBhZGRFdmVudExpc3RlbmVyL3Jl
bW92ZUV2ZW50TGlzdGVuZXIgbmVlZCBbQ3VzdG9tXSBmbGFnIGZvciBjcHAtYmluZGluZ3MgKHVu
Zm9ydHVuYXRlbHkpLgorICAgICAgICAqIGRvbS9Qb3BTdGF0ZUV2ZW50LmlkbDogRGlzYWJsZWQg
anVzdCBsaWtlIEN1c3RvbUV2ZW50LCBmb3IgdGhlIHNhbWUgcmVhc29uICgiYW55IiBhcmd1bWVu
dCB0eXBlIGhhbmRsaW5nKS4KKyAgICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVtZW50LmlkbDog
RGlzYWJsZSBnZXRDb250ZXh0KCkgbWV0aG9kIGZvciBjcHAgYmluZGluZ3MsIGFzIGl0J3MgZG9u
ZSBmb3Igb2JqYyBiaW5kaW5ncy4KKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuaWRs
OiBEaXNhYmxlIHZhbHVlQXNEYXRlKCkgbWV0aG9kIGZvciBjcHAgYmluZGluZ3MsIGFzIHdlJ3Jl
IG1pc3NpbmcgbmF0aXZlICdEYXRlJyB0eXBlIHN1cHBvcnQgLgorICAgICAgICAqIGh0bWwvSW1h
Z2VEYXRhLmlkbDogRG9uJ3QgZXhwb3NlIGRhdGEgcHJvcGVydHkgZm9yIHRoZSBjcHAgYmluZGlu
Z3MsIENhbnZhc1BpeGVsQXJyYXlEYXRhIG5vdCBhdmFpbGFibGUgYXQgdGhlIG1vbWVudC4KKyAg
ICAgICAgKiBodG1sL01lZGlhRXJyb3IuaDogQWRkIG1pc3NpbmcgUGFzc1JlZlB0ci5oIGluY2x1
ZGUuCisgICAgICAgICogaHRtbC9UZXh0TWV0cmljcy5oOiBEaXR0by4KKyAgICAgICAgKiBodG1s
L2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaWRsOiBEaXNhYmxlIG1ldGhvZHMgKHNl
dExpbmVDYXAsIGV0Yy4uKSBmb3IgY3BwIGJpbmRpbmdzIHdob3NlIG5hbWVzIGNsYXNoIHdpdGgg
cHJvcGVydHkgc2V0dGVycy4KKyAgICAgICAgKiBwYWdlL0Fic3RyYWN0Vmlldy5pZGw6IFJlbmFt
ZSAnTWVkaWEnIHR5cGUgdG8gJ1N0eWxlTWVkaWEnIC0gdGhpcyBzaG91bGQgaGF2ZSBiZWVuIGRv
bmUgYmVmb3JlLgorICAgICAgICAqIHBhZ2UvV2ViS2l0UG9pbnQuaDogQWRkIG1pc3NpbmcgUGFz
c1JlZlB0ci5oIGluY2x1ZGUuCisgICAgICAgICogc3RvcmFnZS9TUUxSZXN1bHRTZXQuaWRsOiBD
b3JyZWN0IHR5cGUgZnJvbSAnbG9uZycgdG8gJ2xvbmcgbG9uZycsIGFzIHRoaXMgaXMgd2hhdCBp
bnNlcnRJZCByZXR1cm5zIChpbnQ2NF90KS4KKyAgICAgICAgKiB3b3JrZXJzL0RlZGljYXRlZFdv
cmtlckNvbnRleHQuaWRsOiBEaXNhYmxlIHBvc3RNZXNzYWdlKCkgZm9yIG5vdyB3aGVuIHVzaW5n
IGNwcCBiaW5kaW5ncywgd291bGQgbmVlZCBjdXN0b20gY29kZSBmb3IgdXMuCisgICAgICAgICog
d29ya2Vycy9Xb3JrZXJDb250ZXh0LmlkbDogSGlkZSBjb25zdHJ1Y3RvcnMgZnJvbSBjcHAgYmlu
ZGluZ3MuCisKIDIwMTAtMDQtMjggIEJldGggRGFraW4gIDxiZGFraW5AYXBwbGUuY29tPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9j
cHAvV2ViRE9NQXR0ckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9j
cHAvV2ViRE9NQXR0ckN1c3RvbS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdz
L2NwcC9XZWJET01BdHRyQ3VzdG9tLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkRPTUF0
dHIuaCIKKworI2luY2x1ZGUgIkF0dHIuaCIKKyNpbmNsdWRlICJXZWJFeGNlcHRpb25IYW5kbGVy
cy5oIgorCitXZWJET01TdHJpbmcgV2ViRE9NQXR0cjo6dmFsdWUoKSBjb25zdAoreworICAgIGlm
ICghaW1wbCgpKQorICAgICAgICByZXR1cm4gV2ViRE9NU3RyaW5nKCk7CisKKyAgICByZXR1cm4g
KGNvbnN0IFdlYkNvcmU6OlN0cmluZyYpIGltcGwoKS0+dmFsdWUoKTsKK30KKwordm9pZCBXZWJE
T01BdHRyOjpzZXRWYWx1ZShjb25zdCBXZWJET01TdHJpbmcmIHZhbHVlKQoreworICAgIGlmICgh
aW1wbCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVj
ID0gMDsKKyAgICBpbXBsKCktPnNldFZhbHVlKHZhbHVlLCBlYyk7CisgICAgd2ViRE9NUmFpc2VF
cnJvcihzdGF0aWNfY2FzdDxXZWJET01FeGNlcHRpb25Db2RlPihlYykpOworfQoKUHJvcGVydHkg
Y2hhbmdlcyBvbjogV2ViQ29yZS9iaW5kaW5ncy9jcHAvV2ViRE9NQXR0ckN1c3RvbS5jcHAKX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCgpJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy9jcHAvV2ViRE9NQ1N0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5n
cy9jcHAvV2ViRE9NQ1N0cmluZy5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdz
L2NwcC9XZWJET01DU3RyaW5nLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkRPTUNTdHJp
bmcuaCIKKworI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgorI2luY2x1ZGUgIldlYkRPTVN0cmlu
Zy5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworY2xhc3MgV2ViRE9NQ1N0cmlu
Z1ByaXZhdGUgOiBwdWJsaWMgV1RGOjpDU3RyaW5nQnVmZmVyIHsKK307CisKK3ZvaWQgV2ViRE9N
Q1N0cmluZzo6cmVzZXQoKQoreworICAgIGlmIChtX3ByaXZhdGUpIHsKKyAgICAgICAgbV9wcml2
YXRlLT5kZXJlZigpOworICAgICAgICBtX3ByaXZhdGUgPSAwOworICAgIH0KK30KKwordm9pZCBX
ZWJET01DU3RyaW5nOjphc3NpZ24oY29uc3QgV2ViRE9NQ1N0cmluZyYgb3RoZXIpCit7CisgICAg
YXNzaWduKGNvbnN0X2Nhc3Q8V2ViRE9NQ1N0cmluZ1ByaXZhdGUqPihvdGhlci5tX3ByaXZhdGUp
KTsKK30KKwordm9pZCBXZWJET01DU3RyaW5nOjphc3NpZ24oY29uc3QgY2hhciogZGF0YSwgc2l6
ZV90IGxlbmd0aCkKK3sKKyAgICBjaGFyKiBuZXdEYXRhOworICAgIFJlZlB0cjxXVEY6OkNTdHJp
bmdCdWZmZXI+IGJ1ZmZlciA9CisgICAgICAgIFdURjo6Q1N0cmluZzo6bmV3VW5pbml0aWFsaXpl
ZChsZW5ndGgsIG5ld0RhdGEpLmJ1ZmZlcigpOworICAgIG1lbWNweShuZXdEYXRhLCBkYXRhLCBs
ZW5ndGgpOworICAgIGFzc2lnbihzdGF0aWNfY2FzdDxXZWJET01DU3RyaW5nUHJpdmF0ZSo+KGJ1
ZmZlci5nZXQoKSkpOworfQorCitzaXplX3QgV2ViRE9NQ1N0cmluZzo6bGVuZ3RoKCkgY29uc3QK
K3sKKyAgICBpZiAoIW1fcHJpdmF0ZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgLy8gTk9URTog
VGhlIGJ1ZmZlcidzIGxlbmd0aCBpbmNsdWRlcyB0aGUgbnVsbCBieXRlLgorICAgIHJldHVybiBj
b25zdF9jYXN0PFdlYkRPTUNTdHJpbmdQcml2YXRlKj4obV9wcml2YXRlKS0+bGVuZ3RoKCkgLSAx
OworfQorCitjb25zdCBjaGFyKiBXZWJET01DU3RyaW5nOjpkYXRhKCkgY29uc3QKK3sKKyAgICBp
ZiAoIW1fcHJpdmF0ZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8
V2ViRE9NQ1N0cmluZ1ByaXZhdGUqPihtX3ByaXZhdGUpLT5kYXRhKCk7Cit9CisKK1dlYkRPTVN0
cmluZyBXZWJET01DU3RyaW5nOjp1dGYxNigpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdlYkNvcmU6
OlVURjhFbmNvZGluZygpLmRlY29kZShkYXRhKCksIGxlbmd0aCgpKTsKK30KKworV2ViRE9NQ1N0
cmluZyBXZWJET01DU3RyaW5nOjpmcm9tVVRGMTYoY29uc3QgV2ViVUNoYXIqIGRhdGEsIHNpemVf
dCBsZW5ndGgpCit7CisgICAgcmV0dXJuIFdlYkNvcmU6OlVURjhFbmNvZGluZygpLmVuY29kZSgK
KyAgICAgICAgZGF0YSwgbGVuZ3RoLCBXZWJDb3JlOjpRdWVzdGlvbk1hcmtzRm9yVW5lbmNvZGFi
bGVzKTsKK30KKworV2ViRE9NQ1N0cmluZyBXZWJET01DU3RyaW5nOjpmcm9tVVRGMTYoY29uc3Qg
V2ViVUNoYXIqIGRhdGEpCit7CisgICAgc2l6ZV90IGxlbiA9IDA7CisgICAgd2hpbGUgKGRhdGFb
bGVuXSAhPSBXZWJVQ2hhcigwKSkKKyAgICAgICAgbGVuKys7CisgICAgcmV0dXJuIGZyb21VVEYx
NihkYXRhLCBsZW4pOworfQorCitXZWJET01DU3RyaW5nOjpXZWJET01DU3RyaW5nKGNvbnN0IFdU
Rjo6Q1N0cmluZyYgcykKKyAgICA6IG1fcHJpdmF0ZShzdGF0aWNfY2FzdDxXZWJET01DU3RyaW5n
UHJpdmF0ZSo+KHMuYnVmZmVyKCkpKQoreworICAgIGlmIChtX3ByaXZhdGUpCisgICAgICAgIG1f
cHJpdmF0ZS0+cmVmKCk7Cit9CisKK1dlYkRPTUNTdHJpbmcmIFdlYkRPTUNTdHJpbmc6Om9wZXJh
dG9yPShjb25zdCBXVEY6OkNTdHJpbmcmIHMpCit7CisgICAgYXNzaWduKHN0YXRpY19jYXN0PFdl
YkRPTUNTdHJpbmdQcml2YXRlKj4ocy5idWZmZXIoKSkpOworICAgIHJldHVybiAqdGhpczsKK30K
KworV2ViRE9NQ1N0cmluZzo6b3BlcmF0b3IgV1RGOjpDU3RyaW5nKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9wcml2YXRlOworfQorCit2b2lkIFdlYkRPTUNTdHJpbmc6OmFzc2lnbihXZWJET01D
U3RyaW5nUHJpdmF0ZSogcCkKK3sKKyAgICAvLyBUYWtlIGNhcmUgdG8gaGFuZGxlIHRoZSBjYXNl
IHdoZXJlIG1fcHJpdmF0ZSA9PSBwCisgICAgaWYgKHApCisgICAgICAgIHAtPnJlZigpOworICAg
IGlmIChtX3ByaXZhdGUpCisgICAgICAgIG1fcHJpdmF0ZS0+ZGVyZWYoKTsKKyAgICBtX3ByaXZh
dGUgPSBwOworfQoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViQ29yZS9iaW5kaW5ncy9jcHAvV2Vi
RE9NQ1N0cmluZy5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCgpJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy9jcHAvV2ViRE9NQ1N0cmluZy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYmluZGluZ3MvY3BwL1dlYkRPTUNTdHJpbmcuaAkocmV2aXNpb24gMCkKKysrIFdl
YkNvcmUvYmluZGluZ3MvY3BwL1dlYkRPTUNTdHJpbmcuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQg
MjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYkRPTUNTdHJpbmdfaAorI2RlZmlu
ZSBXZWJET01DU3RyaW5nX2gKKworI2luY2x1ZGUgPFdlYkRPTU9iamVjdC5oPgorCituYW1lc3Bh
Y2UgV1RGIHsKK2NsYXNzIENTdHJpbmc7Cit9OworCitjbGFzcyBXZWJET01DU3RyaW5nUHJpdmF0
ZTsKK2NsYXNzIFdlYkRPTVN0cmluZzsKKworLy8gQSBzaW5nbGUtYnl0ZSBzdHJpbmcgY29udGFp
bmVyIHdpdGggdW5zcGVjaWZpZWQgZW5jb2RpbmcuICBJdCBpcworLy8gaW5leHBlbnNpdmUgdG8g
Y29weSBhIFdlYkRPTUNTdHJpbmcgb2JqZWN0LgorLy8KKy8vIFdBUk5JTkc6IEl0IGlzIG5vdCBz
YWZlIHRvIHBhc3MgYSBXZWJET01DU3RyaW5nIGFjcm9zcyB0aHJlYWRzISEhCisvLworY2xhc3Mg
V2ViRE9NQ1N0cmluZyB7CitwdWJsaWM6CisgICAgfldlYkRPTUNTdHJpbmcoKSB7IHJlc2V0KCk7
IH0KKworICAgIFdlYkRPTUNTdHJpbmcoKSA6IG1fcHJpdmF0ZSgwKSB7IH0KKworICAgIFdlYkRP
TUNTdHJpbmcoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbikgOiBtX3ByaXZhdGUoMCkKKyAg
ICB7CisgICAgICAgIGFzc2lnbihkYXRhLCBsZW4pOworICAgIH0KKworICAgIFdlYkRPTUNTdHJp
bmcoY29uc3QgV2ViRE9NQ1N0cmluZyYgcykgOiBtX3ByaXZhdGUoMCkgeyBhc3NpZ24ocyk7IH0K
KworICAgIFdlYkRPTUNTdHJpbmcmIG9wZXJhdG9yPShjb25zdCBXZWJET01DU3RyaW5nJiBzKQor
ICAgIHsKKyAgICAgICAgYXNzaWduKHMpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQor
CisgICAgdm9pZCByZXNldCgpOworICAgIHZvaWQgYXNzaWduKGNvbnN0IFdlYkRPTUNTdHJpbmcm
KTsKKyAgICB2b2lkIGFzc2lnbihjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuKTsKKworICAg
IHNpemVfdCBsZW5ndGgoKSBjb25zdDsKKyAgICBjb25zdCBjaGFyKiBkYXRhKCkgY29uc3Q7CisK
KyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiAhbGVuZ3RoKCk7IH0KKyAgICBib29s
IGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuICFtX3ByaXZhdGU7IH0KKworICAgIFdlYkRPTVN0cmlu
ZyB1dGYxNigpIGNvbnN0OworCisgICAgc3RhdGljIFdlYkRPTUNTdHJpbmcgZnJvbVVURjE2KGNv
bnN0IFdlYlVDaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoKTsKKyAgICBzdGF0aWMgV2ViRE9NQ1N0
cmluZyBmcm9tVVRGMTYoY29uc3QgV2ViVUNoYXIqIGRhdGEpOworCisgICAgV2ViRE9NQ1N0cmlu
Zyhjb25zdCBXVEY6OkNTdHJpbmcmKTsKKyAgICBXZWJET01DU3RyaW5nJiBvcGVyYXRvcj0oY29u
c3QgV1RGOjpDU3RyaW5nJik7CisgICAgb3BlcmF0b3IgV1RGOjpDU3RyaW5nKCkgY29uc3Q7CisK
K3ByaXZhdGU6CisgICAgdm9pZCBhc3NpZ24oV2ViRE9NQ1N0cmluZ1ByaXZhdGUqKTsKKyAgICBX
ZWJET01DU3RyaW5nUHJpdmF0ZSogbV9wcml2YXRlOworfTsKKworI2VuZGlmCgpQcm9wZXJ0eSBj
aGFuZ2VzIG9uOiBXZWJDb3JlL2JpbmRpbmdzL2NwcC9XZWJET01DU3RyaW5nLmgKX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
XwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9j
cHAvV2ViRE9NRWxlbWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5n
cy9jcHAvV2ViRE9NRWxlbWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2Jp
bmRpbmdzL2NwcC9XZWJET01FbGVtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQg
MjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IldlYkRPTUVsZW1lbnQuaCIKKworI2luY2x1ZGUgIkF0dHIuaCIKKyNpbmNsdWRlICJFbGVtZW50
LmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIldlYkRPTUF0dHIuaCIK
KyNpbmNsdWRlICJXZWJFeGNlcHRpb25IYW5kbGVycy5oIgorCit2b2lkIFdlYkRPTUVsZW1lbnQ6
OnNldEF0dHJpYnV0ZShjb25zdCBXZWJET01TdHJpbmcmIG5hbWUsIGNvbnN0IFdlYkRPTVN0cmlu
ZyYgdmFsdWUpCit7CisgICAgaWYgKCFpbXBsKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFdl
YkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGltcGwoKS0+c2V0QXR0cmlidXRlKG5h
bWUsIHZhbHVlLCBlYyk7CisgICAgd2ViRE9NUmFpc2VFcnJvcihzdGF0aWNfY2FzdDxXZWJET01F
eGNlcHRpb25Db2RlPihlYykpOworfQorCitXZWJET01BdHRyIFdlYkRPTUVsZW1lbnQ6OnNldEF0
dHJpYnV0ZU5vZGUoY29uc3QgV2ViRE9NQXR0ciYgbmV3QXR0cikKK3sKKyAgICBpZiAoIWltcGwo
KSkKKyAgICAgICAgcmV0dXJuIFdlYkRPTUF0dHIoKTsKKworICAgIFdlYkNvcmU6OkF0dHIqIGF0
dHIgPSB3ZWJDb3JlKG5ld0F0dHIpOworICAgIGlmICghYXR0cikgeworICAgICAgICB3ZWJET01S
YWlzZUVycm9yKHN0YXRpY19jYXN0PFdlYkRPTUV4Y2VwdGlvbkNvZGU+KFdlYkNvcmU6OlRZUEVf
TUlTTUFUQ0hfRVJSKSk7CisgICAgICAgIHJldHVybiBXZWJET01BdHRyKCk7CisgICAgfQorCisg
ICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgV2ViRE9NQXR0ciByZXN1bHQg
PSB3ZWJLaXQoV1RGOjpnZXRQdHIoaW1wbCgpLT5zZXRBdHRyaWJ1dGVOb2RlKGF0dHIsIGVjKSkp
OworICAgIHdlYkRPTVJhaXNlRXJyb3Ioc3RhdGljX2Nhc3Q8V2ViRE9NRXhjZXB0aW9uQ29kZT4o
ZWMpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIFdlYkRPTUVsZW1lbnQ6OnNldEF0
dHJpYnV0ZU5TKGNvbnN0IFdlYkRPTVN0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBXZWJET01T
dHJpbmcmIHF1YWxpZmllZE5hbWUsIGNvbnN0IFdlYkRPTVN0cmluZyYgdmFsdWUpCit7CisgICAg
aWYgKCFpbXBsKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOworICAgIGltcGwoKS0+c2V0QXR0cmlidXRlTlMobmFtZXNwYWNlVVJJLCBxdWFs
aWZpZWROYW1lLCB2YWx1ZSwgZWMpOworICAgIHdlYkRPTVJhaXNlRXJyb3Ioc3RhdGljX2Nhc3Q8
V2ViRE9NRXhjZXB0aW9uQ29kZT4oZWMpKTsKK30KKworV2ViRE9NQXR0ciBXZWJET01FbGVtZW50
OjpzZXRBdHRyaWJ1dGVOb2RlTlMoY29uc3QgV2ViRE9NQXR0ciYgbmV3QXR0cikKK3sKKyAgICBp
ZiAoIWltcGwoKSkKKyAgICAgICAgcmV0dXJuIFdlYkRPTUF0dHIoKTsKKworICAgIFdlYkNvcmU6
OkF0dHIqIGF0dHIgPSB3ZWJDb3JlKG5ld0F0dHIpOworICAgIGlmICghYXR0cikgeworICAgICAg
ICB3ZWJET01SYWlzZUVycm9yKHN0YXRpY19jYXN0PFdlYkRPTUV4Y2VwdGlvbkNvZGU+KFdlYkNv
cmU6OlRZUEVfTUlTTUFUQ0hfRVJSKSk7CisgICAgICAgIHJldHVybiBXZWJET01BdHRyKCk7Cisg
ICAgfQorCisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgV2ViRE9NQXR0
ciByZXN1bHQgPSB3ZWJLaXQoV1RGOjpnZXRQdHIoaW1wbCgpLT5zZXRBdHRyaWJ1dGVOb2RlTlMo
YXR0ciwgZWMpKSk7CisgICAgd2ViRE9NUmFpc2VFcnJvcihzdGF0aWNfY2FzdDxXZWJET01FeGNl
cHRpb25Db2RlPihlYykpOworICAgIHJldHVybiByZXN1bHQ7Cit9CgpQcm9wZXJ0eSBjaGFuZ2Vz
IG9uOiBXZWJDb3JlL2JpbmRpbmdzL2NwcC9XZWJET01FbGVtZW50Q3VzdG9tLmNwcApfX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoKCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L2NwcC9XZWJET01FdmVudExpc3RlbmVyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JpbmRpbmdzL2NwcC9XZWJET01FdmVudExpc3RlbmVyQ3VzdG9tLmNwcAkocmV2aXNpb24gMCkK
KysrIFdlYkNvcmUvYmluZGluZ3MvY3BwL1dlYkRPTUV2ZW50TGlzdGVuZXJDdXN0b20uY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJj
aCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiV2ViRE9NRXZlbnRMaXN0ZW5lci5oIgorCisjaW5jbHVkZSAi
V2ViRE9NRXZlbnQuaCIKKyNpbmNsdWRlICJXZWJOYXRpdmVFdmVudExpc3RlbmVyLmgiCisjaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgorCit2b2lkIFdlYkRPTUV2ZW50TGlzdGVuZXI6OmhhbmRsZUV2
ZW50KGNvbnN0IFdlYkRPTUV2ZW50JiBldnQpCit7CisgICAgaWYgKCFpbXBsKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGltcGwoKS0+aGFuZGxlRXZlbnQoMCwgd2ViQ29yZShldnQpKTsKK30K
KworV2ViRE9NRXZlbnRMaXN0ZW5lciB3ZWJLaXQoV2ViVXNlckV2ZW50TGlzdGVuZXIqIHZhbHVl
KQoreworICAgIFJlZlB0cjxXZWJOYXRpdmVFdmVudExpc3RlbmVyPiBsaXN0ZW5lciA9IFdlYk5h
dGl2ZUV2ZW50TGlzdGVuZXI6OmNyZWF0ZSh2YWx1ZSk7CisgICAgcmV0dXJuIFdlYkRPTUV2ZW50
TGlzdGVuZXIobGlzdGVuZXIuZ2V0KCkpOworfQoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViQ29y
ZS9iaW5kaW5ncy9jcHAvV2ViRE9NRXZlbnRMaXN0ZW5lckN1c3RvbS5jcHAKX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpB
ZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9jcHAv
V2ViRE9NRXZlbnRUYXJnZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvY3Bw
L1dlYkRPTUV2ZW50VGFyZ2V0LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3Mv
Y3BwL1dlYkRPTUV2ZW50VGFyZ2V0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJET01FdmVu
dFRhcmdldC5oIgorCitXZWJET01FdmVudFRhcmdldDo6V2ViRE9NRXZlbnRUYXJnZXQoKQorewor
fQorCitXZWJET01FdmVudFRhcmdldDo6V2ViRE9NRXZlbnRUYXJnZXQoY29uc3QgV2ViRE9NT2Jq
ZWN0JiBkb21PYmplY3QpCisgICAgOiBtX2RvbU9iamVjdChkb21PYmplY3QpCit7Cit9CisKK1dl
YkNvcmU6OkV2ZW50VGFyZ2V0KiB3ZWJDb3JlKGNvbnN0IFdlYkRPTUV2ZW50VGFyZ2V0JikKK3sK
KyAgICAvLyBUT0RPOiBJbXBsZW1lbnQgbWUhCisgICAgcmV0dXJuIDA7Cit9CisKK1dlYkRPTUV2
ZW50VGFyZ2V0IHdlYktpdChXZWJDb3JlOjpFdmVudFRhcmdldCopCit7CisgICAgLy8gVE9ETzog
SW1wbGVtZW50IG1lIQorICAgIHJldHVybiBXZWJET01FdmVudFRhcmdldCgpOworfQoKUHJvcGVy
dHkgY2hhbmdlcyBvbjogV2ViQ29yZS9iaW5kaW5ncy9jcHAvV2ViRE9NRXZlbnRUYXJnZXQuY3Bw
Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsgKgoKSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3MvY3BwL1dlYkRPTUV2ZW50VGFyZ2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy9jcHAvV2ViRE9NRXZlbnRUYXJnZXQuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUv
YmluZGluZ3MvY3BwL1dlYkRPTUV2ZW50VGFyZ2V0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIw
MTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViRE9NRXZlbnRUYXJnZXRfaAorI2Rl
ZmluZSBXZWJET01FdmVudFRhcmdldF9oCisKKyNpbmNsdWRlIDxXZWJET01PYmplY3QuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgRXZlbnRUYXJnZXQ7Cit9CisKK2NsYXNzIFdlYkRP
TUV2ZW50VGFyZ2V0IHsKK3B1YmxpYzoKKyAgICBXZWJET01FdmVudFRhcmdldCgpOworICAgIGV4
cGxpY2l0IFdlYkRPTUV2ZW50VGFyZ2V0KGNvbnN0IFdlYkRPTU9iamVjdCYpOworCitwcml2YXRl
OgorICAgIFdlYkRPTU9iamVjdCBtX2RvbU9iamVjdDsKK307CisKK1dlYkNvcmU6OkV2ZW50VGFy
Z2V0KiB3ZWJDb3JlKGNvbnN0IFdlYkRPTUV2ZW50VGFyZ2V0Jik7CitXZWJET01FdmVudFRhcmdl
dCB3ZWJLaXQoV2ViQ29yZTo6RXZlbnRUYXJnZXQqKTsKKworI2VuZGlmCgpQcm9wZXJ0eSBjaGFu
Z2VzIG9uOiBXZWJDb3JlL2JpbmRpbmdzL2NwcC9XZWJET01FdmVudFRhcmdldC5oCl9fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsgKgoKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mv
Y3BwL1dlYkRPTUhUTUxEb2N1bWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy9jcHAvV2ViRE9NSFRNTERvY3VtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMCkKKysr
IFdlYkNvcmUvYmluZGluZ3MvY3BwL1dlYkRPTUhUTUxEb2N1bWVudEN1c3RvbS5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIElu
IE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJXZWJET01IVE1MRG9jdW1lbnQuaCIKKworI2luY2x1ZGUgIkNoYXJh
Y3Rlck5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCisjaW5jbHVkZSAiU2VnbWVu
dGVkU3RyaW5nLmgiCisjaW5jbHVkZSAiV2ViRXhjZXB0aW9uSGFuZGxlcnMuaCIKKwordm9pZCBX
ZWJET01IVE1MRG9jdW1lbnQ6Om9wZW4oKQoreworICAgIGlmICghaW1wbCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpbXBsKCktPm9wZW4oKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRv
Y3VtZW50V3JpdGUoY29uc3QgV2ViRE9NU3RyaW5nJiB0ZXh0LCBXZWJDb3JlOjpIVE1MRG9jdW1l
bnQqIGRvY3VtZW50LCBib29sIGFkZE5ld2xpbmUpCit7CisgICAgV2ViQ29yZTo6U2VnbWVudGVk
U3RyaW5nIHNlZ21lbnRlZFN0cmluZyA9IFdlYkNvcmU6OlN0cmluZyh0ZXh0KTsKKyAgICBpZiAo
YWRkTmV3bGluZSkKKyAgICAgICAgc2VnbWVudGVkU3RyaW5nLmFwcGVuZChXZWJDb3JlOjpTZWdt
ZW50ZWRTdHJpbmcoJldlYkNvcmU6Om5ld2xpbmVDaGFyYWN0ZXIsIDEpKTsKKyAgICBkb2N1bWVu
dC0+d3JpdGUoc2VnbWVudGVkU3RyaW5nKTsKK30KKwordm9pZCBXZWJET01IVE1MRG9jdW1lbnQ6
OndyaXRlKGNvbnN0IFdlYkRPTVN0cmluZyYgdGV4dCkKK3sKKyAgICBpZiAoIWltcGwoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgZG9jdW1lbnRXcml0ZSh0ZXh0LCBpbXBsKCksIGZhbHNlKTsK
K30KKwordm9pZCBXZWJET01IVE1MRG9jdW1lbnQ6OndyaXRlbG4oY29uc3QgV2ViRE9NU3RyaW5n
JiB0ZXh0KQoreworICAgIGlmICghaW1wbCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBkb2N1
bWVudFdyaXRlKHRleHQsIGltcGwoKSwgdHJ1ZSk7Cit9CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBX
ZWJDb3JlL2JpbmRpbmdzL2NwcC9XZWJET01IVE1MRG9jdW1lbnRDdXN0b20uY3BwCl9fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsgKgoKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mv
Y3BwL1dlYkRPTUhUTUxGcmFtZUVsZW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3MvY3BwL1dlYkRPTUhUTUxGcmFtZUVsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lv
biAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy9jcHAvV2ViRE9NSFRNTEZyYW1lRWxlbWVudEN1c3Rv
bS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJET01IVE1MRnJhbWVFbGVtZW50LmgiCisK
KyNpbmNsdWRlICJIVE1MRnJhbWVFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisK
K1dlYkRPTVN0cmluZyBXZWJET01IVE1MRnJhbWVFbGVtZW50OjpzcmMoKSBjb25zdAoreworICAg
IGlmICghaW1wbCgpKQorICAgICAgICByZXR1cm4gV2ViRE9NU3RyaW5nKCk7CisKKyAgICByZXR1
cm4gKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYpIGltcGwoKS0+Z2V0QXR0cmlidXRlKFdlYkNvcmU6
OkhUTUxOYW1lczo6c3JjQXR0cik7Cit9CisKK3ZvaWQgV2ViRE9NSFRNTEZyYW1lRWxlbWVudDo6
c2V0U3JjKGNvbnN0IFdlYkRPTVN0cmluZyYgbmV3U3JjKQoreworICAgIGlmICghaW1wbCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpbXBsKCktPnNldEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1M
TmFtZXM6OnNyY0F0dHIsIG5ld1NyYyk7Cit9CisKK3ZvaWQgV2ViRE9NSFRNTEZyYW1lRWxlbWVu
dDo6c2V0TG9jYXRpb24oY29uc3QgV2ViRE9NU3RyaW5nJiBuZXdMb2NhdGlvbikKK3sKKyAgICBp
ZiAoIWltcGwoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW1wbCgpLT5zZXRMb2NhdGlvbihu
ZXdMb2NhdGlvbik7Cit9CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL2JpbmRpbmdzL2Nw
cC9XZWJET01IVE1MRnJhbWVFbGVtZW50Q3VzdG9tLmNwcApfX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46
ZXhlY3V0YWJsZQogICArICoKCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2NwcC9XZWJET01IVE1M
SUZyYW1lRWxlbWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9j
cHAvV2ViRE9NSFRNTElGcmFtZUVsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAwKQorKysgV2Vi
Q29yZS9iaW5kaW5ncy9jcHAvV2ViRE9NSFRNTElGcmFtZUVsZW1lbnRDdXN0b20uY3BwCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJ
biBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiV2ViRE9NSFRNTElGcmFtZUVsZW1lbnQuaCIKKworI2luY2x1ZGUg
IkhUTUxJRnJhbWVFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisKK1dlYkRPTVN0
cmluZyBXZWJET01IVE1MSUZyYW1lRWxlbWVudDo6c3JjKCkgY29uc3QKK3sKKyAgICBpZiAoIWlt
cGwoKSkKKyAgICAgICAgcmV0dXJuIFdlYkRPTVN0cmluZygpOworCisgICAgcmV0dXJuIChjb25z
dCBXZWJDb3JlOjpTdHJpbmcmKSBpbXBsKCktPmdldEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFt
ZXM6OnNyY0F0dHIpOworfQorCit2b2lkIFdlYkRPTUhUTUxJRnJhbWVFbGVtZW50OjpzZXRTcmMo
Y29uc3QgV2ViRE9NU3RyaW5nJiBuZXdTcmMpCit7CisgICAgaWYgKCFpbXBsKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGltcGwoKS0+c2V0QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6
c3JjQXR0ciwgbmV3U3JjKTsKK30KClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvYmluZGlu
Z3MvY3BwL1dlYkRPTUhUTUxJRnJhbWVFbGVtZW50Q3VzdG9tLmNwcApfX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVk
OiBzdm46ZXhlY3V0YWJsZQogICArICoKCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2NwcC9XZWJE
T01Ob2RlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2NwcC9XZWJE
T01Ob2RlQ3VzdG9tLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3MvY3BwL1dl
YkRPTU5vZGVDdXN0b20uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViRE9NTm9kZS5oIgor
CisjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIldlYkRPTUV2ZW50TGlzdGVuZXIuaCIKKyNp
bmNsdWRlICJXZWJFeGNlcHRpb25IYW5kbGVycy5oIgorI2luY2x1ZGUgIldlYk5hdGl2ZUV2ZW50
TGlzdGVuZXIuaCIKKworV2ViRE9NTm9kZSBXZWJET01Ob2RlOjppbnNlcnRCZWZvcmUoY29uc3Qg
V2ViRE9NTm9kZSYgbmV3Q2hpbGQsIGNvbnN0IFdlYkRPTU5vZGUmIHJlZkNoaWxkKQoreworICAg
IGlmICghaW1wbCgpKQorICAgICAgICByZXR1cm4gV2ViRE9NTm9kZSgpOworCisgICAgV2ViQ29y
ZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaWYgKGltcGwoKS0+aW5zZXJ0QmVmb3JlKHdl
YkNvcmUobmV3Q2hpbGQpLCB3ZWJDb3JlKHJlZkNoaWxkKSwgZWMsIHRydWUpKQorICAgICAgICBy
ZXR1cm4gbmV3Q2hpbGQ7CisKKyAgICB3ZWJET01SYWlzZUVycm9yKHN0YXRpY19jYXN0PFdlYkRP
TUV4Y2VwdGlvbkNvZGU+KGVjKSk7CisgICAgcmV0dXJuIFdlYkRPTU5vZGUoKTsKK30KKworV2Vi
RE9NTm9kZSBXZWJET01Ob2RlOjpyZXBsYWNlQ2hpbGQoY29uc3QgV2ViRE9NTm9kZSYgbmV3Q2hp
bGQsIGNvbnN0IFdlYkRPTU5vZGUmIG9sZENoaWxkKQoreworICAgIGlmICghaW1wbCgpKQorICAg
ICAgICByZXR1cm4gV2ViRE9NTm9kZSgpOworCisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBl
YyA9IDA7CisgICAgaWYgKGltcGwoKS0+cmVwbGFjZUNoaWxkKHdlYkNvcmUobmV3Q2hpbGQpLCB3
ZWJDb3JlKG9sZENoaWxkKSwgZWMsIHRydWUpKQorICAgICAgICByZXR1cm4gb2xkQ2hpbGQ7CisK
KyAgICB3ZWJET01SYWlzZUVycm9yKHN0YXRpY19jYXN0PFdlYkRPTUV4Y2VwdGlvbkNvZGU+KGVj
KSk7CisgICAgcmV0dXJuIFdlYkRPTU5vZGUoKTsKK30KKworV2ViRE9NTm9kZSBXZWJET01Ob2Rl
OjpyZW1vdmVDaGlsZChjb25zdCBXZWJET01Ob2RlJiBvbGRDaGlsZCkKK3sKKyAgICBpZiAoIWlt
cGwoKSkKKyAgICAgICAgcmV0dXJuIFdlYkRPTU5vZGUoKTsKKworICAgIFdlYkNvcmU6OkV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOworICAgIGlmIChpbXBsKCktPnJlbW92ZUNoaWxkKHdlYkNvcmUob2xk
Q2hpbGQpLCBlYykpCisgICAgICAgIHJldHVybiBvbGRDaGlsZDsKKworICAgIHdlYkRPTVJhaXNl
RXJyb3Ioc3RhdGljX2Nhc3Q8V2ViRE9NRXhjZXB0aW9uQ29kZT4oZWMpKTsKKyAgICByZXR1cm4g
V2ViRE9NTm9kZSgpOworfQorCitXZWJET01Ob2RlIFdlYkRPTU5vZGU6OmFwcGVuZENoaWxkKGNv
bnN0IFdlYkRPTU5vZGUmIG5ld0NoaWxkKQoreworICAgIGlmICghaW1wbCgpKQorICAgICAgICBy
ZXR1cm4gV2ViRE9NTm9kZSgpOworCisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7
CisgICAgaWYgKGltcGwoKS0+YXBwZW5kQ2hpbGQod2ViQ29yZShuZXdDaGlsZCksIGVjLCB0cnVl
KSkKKyAgICAgICAgcmV0dXJuIG5ld0NoaWxkOworCisgICAgd2ViRE9NUmFpc2VFcnJvcihzdGF0
aWNfY2FzdDxXZWJET01FeGNlcHRpb25Db2RlPihlYykpOworICAgIHJldHVybiBXZWJET01Ob2Rl
KCk7Cit9CisKK3ZvaWQgV2ViRE9NTm9kZTo6YWRkRXZlbnRMaXN0ZW5lcihjb25zdCBXZWJET01T
dHJpbmcmIHR5cGUsIGNvbnN0IFdlYkRPTUV2ZW50TGlzdGVuZXImIGxpc3RlbmVyLCBjb25zdCBi
b29sJiB1c2VDYXB0dXJlKQoreworICAgIGlmICghaW1wbCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAod2ViQ29yZShsaXN0ZW5lcikpCisgICAgICAgIGltcGwoKS0+YWRkRXZlbnRMaXN0
ZW5lcih0eXBlLCB3ZWJDb3JlKGxpc3RlbmVyKSwgdXNlQ2FwdHVyZSk7Cit9CisKK3ZvaWQgV2Vi
RE9NTm9kZTo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBXZWJET01TdHJpbmcmIHR5cGUsIGNv
bnN0IFdlYkRPTUV2ZW50TGlzdGVuZXImIGxpc3RlbmVyLCBjb25zdCBib29sJiB1c2VDYXB0dXJl
KQoreworICAgIGlmICghaW1wbCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAod2ViQ29y
ZShsaXN0ZW5lcikpCisgICAgICAgIGltcGwoKS0+cmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCB3
ZWJDb3JlKGxpc3RlbmVyKSwgdXNlQ2FwdHVyZSk7Cit9CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBX
ZWJDb3JlL2JpbmRpbmdzL2NwcC9XZWJET01Ob2RlQ3VzdG9tLmNwcApfX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVk
OiBzdm46ZXhlY3V0YWJsZQogICArICoKCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2NwcC9XZWJE
T01Ob2RlRmlsdGVyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2Nw
cC9XZWJET01Ob2RlRmlsdGVyQ3VzdG9tLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYmlu
ZGluZ3MvY3BwL1dlYkRPTU5vZGVGaWx0ZXJDdXN0b20uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRl
ZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiV2ViRE9NTm9kZUZpbHRlci5oIgorCisjaW5jbHVkZSAiTm9kZUZpbHRlci5oIgorI2luY2x1
ZGUgIldlYkRPTU5vZGUuaCIKKworc2hvcnQgV2ViRE9NTm9kZUZpbHRlcjo6YWNjZXB0Tm9kZShj
b25zdCBXZWJET01Ob2RlJiBuKQoreworICAgIGlmICghaW1wbCgpKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIHJldHVybiBpbXBsKCktPmFjY2VwdE5vZGUod2ViQ29yZShuKSk7Cit9CgpQcm9w
ZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL2JpbmRpbmdzL2NwcC9XZWJET01Ob2RlRmlsdGVyQ3Vz
dG9tLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoKCkluZGV4OiBX
ZWJDb3JlL2JpbmRpbmdzL2NwcC9XZWJET01PYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JpbmRpbmdzL2NwcC9XZWJET01PYmplY3QuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYmlu
ZGluZ3MvY3BwL1dlYkRPTU9iamVjdC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYkRPTU9iamVjdF9oCisjZGVmaW5lIFdlYkRPTU9i
amVjdF9oCisKK2NsYXNzIFdlYkRPTUV2ZW50VGFyZ2V0OworCitjbGFzcyBXZWJET01PYmplY3Qg
eworcHJvdGVjdGVkOgorICAgIGZyaWVuZCBjbGFzcyBXZWJET01FdmVudFRhcmdldDsKKworICAg
IFdlYkRPTU9iamVjdCgpIHsgfQorICAgIH5XZWJET01PYmplY3QoKSB7IH0KK307CisKKy8vIExv
b2tzIGFrd2FyZCwgdGhvdWdoIHdlIHByZWZpeCBhbGwgY2xhc3NlcyB3aXRoIFdlYkRPTQordHlw
ZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgV2ViRE9NRE9NVGltZVN0YW1wOworCisvLyBVVEYtMTYg
Y2hhcmFjdGVyIHR5cGUKKyNpZiBkZWZpbmVkKFdJTjMyKQordHlwZWRlZiB3Y2hhcl90IFdlYlVD
aGFyOworI2Vsc2UKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgV2ViVUNoYXI7CisjZW5kaWYKKwor
CisjZW5kaWYKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvYmluZGluZ3MvY3BwL1dlYkRP
TU9iamVjdC5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsgKgoKSW5kZXg6
IFdlYkNvcmUvYmluZGluZ3MvY3BwL1dlYkRPTVN0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9iaW5kaW5ncy9jcHAvV2ViRE9NU3RyaW5nLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNv
cmUvYmluZGluZ3MvY3BwL1dlYkRPTVN0cmluZy5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MTI0IEBACisvKgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAy
MDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJX
ZWJET01TdHJpbmcuaCIKKworI2luY2x1ZGUgIldlYkRPTUNTdHJpbmcuaCIKKyNpbmNsdWRlIDx3
dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK2NsYXNzIFdlYkRPTVN0cmluZ1ByaXZh
dGUgOiBwdWJsaWMgV2ViQ29yZTo6U3RyaW5nSW1wbCB7Cit9OworCit2b2lkIFdlYkRPTVN0cmlu
Zzo6cmVzZXQoKQoreworICAgIGlmIChtX3ByaXZhdGUpIHsKKyAgICAgICAgbV9wcml2YXRlLT5k
ZXJlZigpOworICAgICAgICBtX3ByaXZhdGUgPSAwOworICAgIH0KK30KKwordm9pZCBXZWJET01T
dHJpbmc6OmFzc2lnbihjb25zdCBXZWJET01TdHJpbmcmIG90aGVyKQoreworICAgIGFzc2lnbihj
b25zdF9jYXN0PFdlYkRPTVN0cmluZ1ByaXZhdGUqPihvdGhlci5tX3ByaXZhdGUpKTsKK30KKwor
dm9pZCBXZWJET01TdHJpbmc6OmFzc2lnbihjb25zdCBXZWJVQ2hhciogZGF0YSwgc2l6ZV90IGxl
bmd0aCkKK3sKKyAgICBhc3NpZ24oc3RhdGljX2Nhc3Q8V2ViRE9NU3RyaW5nUHJpdmF0ZSo+KAor
ICAgICAgICBXZWJDb3JlOjpTdHJpbmdJbXBsOjpjcmVhdGUoZGF0YSwgbGVuZ3RoKS5nZXQoKSkp
OworfQorCitzaXplX3QgV2ViRE9NU3RyaW5nOjpsZW5ndGgoKSBjb25zdAoreworICAgIHJldHVy
biBtX3ByaXZhdGUgPyBjb25zdF9jYXN0PFdlYkRPTVN0cmluZ1ByaXZhdGUqPihtX3ByaXZhdGUp
LT5sZW5ndGgoKSA6IDA7Cit9CisKK2NvbnN0IFdlYlVDaGFyKiBXZWJET01TdHJpbmc6OmRhdGEo
KSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUgPyBjb25zdF9jYXN0PFdlYkRPTVN0cmlu
Z1ByaXZhdGUqPihtX3ByaXZhdGUpLT5jaGFyYWN0ZXJzKCkgOiAwOworfQorCitXZWJET01DU3Ry
aW5nIFdlYkRPTVN0cmluZzo6dXRmOCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdlYkNvcmU6OlN0
cmluZyhtX3ByaXZhdGUpLnV0ZjgoKTsKK30KKworV2ViRE9NU3RyaW5nIFdlYkRPTVN0cmluZzo6
ZnJvbVVURjgoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCkKK3sKKyAgICByZXR1cm4g
V2ViQ29yZTo6U3RyaW5nOjpmcm9tVVRGOChkYXRhLCBsZW5ndGgpOworfQorCitXZWJET01TdHJp
bmcgV2ViRE9NU3RyaW5nOjpmcm9tVVRGOChjb25zdCBjaGFyKiBkYXRhKQoreworICAgIHJldHVy
biBXZWJDb3JlOjpTdHJpbmc6OmZyb21VVEY4KGRhdGEpOworfQorCitXZWJET01TdHJpbmc6Oldl
YkRPTVN0cmluZyhjb25zdCBXZWJDb3JlOjpTdHJpbmcmIHMpCisgICAgOiBtX3ByaXZhdGUoc3Rh
dGljX2Nhc3Q8V2ViRE9NU3RyaW5nUHJpdmF0ZSo+KHMuaW1wbCgpKSkKK3sKKyAgICBpZiAobV9w
cml2YXRlKQorICAgICAgICBtX3ByaXZhdGUtPnJlZigpOworfQorCitXZWJET01TdHJpbmcmIFdl
YkRPTVN0cmluZzo6b3BlcmF0b3I9KGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgcykKK3sKKyAgICBh
c3NpZ24oc3RhdGljX2Nhc3Q8V2ViRE9NU3RyaW5nUHJpdmF0ZSo+KHMuaW1wbCgpKSk7CisgICAg
cmV0dXJuICp0aGlzOworfQorCitXZWJET01TdHJpbmc6Om9wZXJhdG9yIFdlYkNvcmU6OlN0cmlu
ZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZTsKK30KKworV2ViRE9NU3RyaW5nOjpX
ZWJET01TdHJpbmcoY29uc3QgV2ViQ29yZTo6QXRvbWljU3RyaW5nJiBzKQorICAgIDogbV9wcml2
YXRlKDApCit7CisgICAgYXNzaWduKHMuc3RyaW5nKCkpOworfQorCitXZWJET01TdHJpbmcmIFdl
YkRPTVN0cmluZzo6b3BlcmF0b3I9KGNvbnN0IFdlYkNvcmU6OkF0b21pY1N0cmluZyYgcykKK3sK
KyAgICBhc3NpZ24ocy5zdHJpbmcoKSk7CisgICAgcmV0dXJuICp0aGlzOworfQorCitXZWJET01T
dHJpbmc6Om9wZXJhdG9yIFdlYkNvcmU6OkF0b21pY1N0cmluZygpIGNvbnN0Cit7CisgICAgcmV0
dXJuIFdlYkNvcmU6OkF0b21pY1N0cmluZyhzdGF0aWNfY2FzdDxXZWJDb3JlOjpTdHJpbmdJbXBs
ICo+KG1fcHJpdmF0ZSkpOworfQorCitib29sIFdlYkRPTVN0cmluZzo6ZXF1YWxzKGNvbnN0IGNo
YXIqIHN0cmluZykgY29uc3QKK3sKKyAgICByZXR1cm4gV2ViQ29yZTo6ZXF1YWwobV9wcml2YXRl
LCBzdHJpbmcpOworfQorCit2b2lkIFdlYkRPTVN0cmluZzo6YXNzaWduKFdlYkRPTVN0cmluZ1By
aXZhdGUqIHApCit7CisgICAgLy8gVGFrZSBjYXJlIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSBt
X3ByaXZhdGUgPT0gcAorICAgIGlmIChwKQorICAgICAgICBwLT5yZWYoKTsKKyAgICBpZiAobV9w
cml2YXRlKQorICAgICAgICBtX3ByaXZhdGUtPmRlcmVmKCk7CisgICAgbV9wcml2YXRlID0gcDsK
K30KClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvYmluZGluZ3MvY3BwL1dlYkRPTVN0cmlu
Zy5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCgpJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy9jcHAvV2ViRE9NU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy9jcHAvV2ViRE9NU3RyaW5nLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRp
bmdzL2NwcC9XZWJET01TdHJpbmcuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJET01TdHJpbmdfaAorI2RlZmluZSBXZWJET01TdHJp
bmdfaAorCisjaW5jbHVkZSA8V2ViRE9NT2JqZWN0Lmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+IC8v
IEZvciBzaXplX3QKKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgU3RyaW5nOworY2xhc3Mg
QXRvbWljU3RyaW5nOworfQorCitjbGFzcyBXZWJET01DU3RyaW5nOworY2xhc3MgV2ViRE9NU3Ry
aW5nUHJpdmF0ZTsKKworLy8gQSBVVEYtMTYgc3RyaW5nIGNvbnRhaW5lci4gIEl0IGlzIGluZXhw
ZW5zaXZlIHRvIGNvcHkgYSBXZWJET01TdHJpbmcKKy8vIG9iamVjdC4KKy8vCisvLyBXQVJOSU5H
OiBJdCBpcyBub3Qgc2FmZSB0byBwYXNzIGEgV2ViRE9NU3RyaW5nIGFjcm9zcyB0aHJlYWRzISEh
CisvLworY2xhc3MgV2ViRE9NU3RyaW5nIHsKK3B1YmxpYzoKKyAgICB+V2ViRE9NU3RyaW5nKCkg
eyByZXNldCgpOyB9CisKKyAgICBXZWJET01TdHJpbmcoKSA6IG1fcHJpdmF0ZSgwKSB7IH0KKwor
ICAgIFdlYkRPTVN0cmluZyhjb25zdCBXZWJVQ2hhciogZGF0YSwgc2l6ZV90IGxlbikgOiBtX3By
aXZhdGUoMCkKKyAgICB7CisgICAgICAgIGFzc2lnbihkYXRhLCBsZW4pOworICAgIH0KKworICAg
IFdlYkRPTVN0cmluZyhjb25zdCBXZWJET01TdHJpbmcmIHMpIDogbV9wcml2YXRlKDApIHsgYXNz
aWduKHMpOyB9CisKKyAgICBXZWJET01TdHJpbmcmIG9wZXJhdG9yPShjb25zdCBXZWJET01TdHJp
bmcmIHMpCisgICAgeworICAgICAgICBhc3NpZ24ocyk7CisgICAgICAgIHJldHVybiAqdGhpczsK
KyAgICB9CisKKyAgICB2b2lkIHJlc2V0KCk7CisgICAgdm9pZCBhc3NpZ24oY29uc3QgV2ViRE9N
U3RyaW5nJik7CisgICAgdm9pZCBhc3NpZ24oY29uc3QgV2ViVUNoYXIqIGRhdGEsIHNpemVfdCBs
ZW4pOworCisgICAgc2l6ZV90IGxlbmd0aCgpIGNvbnN0OworICAgIGNvbnN0IFdlYlVDaGFyKiBk
YXRhKCkgY29uc3Q7CisKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiAhbGVuZ3Ro
KCk7IH0KKyAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuICFtX3ByaXZhdGU7IH0KKwor
ICAgIFdlYkRPTUNTdHJpbmcgdXRmOCgpIGNvbnN0OworCisgICAgc3RhdGljIFdlYkRPTVN0cmlu
ZyBmcm9tVVRGOChjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoKTsKKyAgICBzdGF0aWMg
V2ViRE9NU3RyaW5nIGZyb21VVEY4KGNvbnN0IGNoYXIqIGRhdGEpOworCisgICAgdGVtcGxhdGUg
PGludCBOPiBXZWJET01TdHJpbmcoY29uc3QgY2hhciAoJmRhdGEpW05dKQorICAgICAgICA6IG1f
cHJpdmF0ZSgwKQorICAgIHsKKyAgICAgICAgYXNzaWduKGZyb21VVEY4KGRhdGEsIE4gLSAxKSk7
CisgICAgfQorCisgICAgdGVtcGxhdGUgPGludCBOPiBXZWJET01TdHJpbmcmIG9wZXJhdG9yPShj
b25zdCBjaGFyICgmZGF0YSlbTl0pCisgICAgeworICAgICAgICBhc3NpZ24oZnJvbVVURjgoZGF0
YSwgTiAtIDEpKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIFdlYkRPTVN0
cmluZyhjb25zdCBXZWJDb3JlOjpTdHJpbmcmKTsKKyAgICBXZWJET01TdHJpbmcmIG9wZXJhdG9y
PShjb25zdCBXZWJDb3JlOjpTdHJpbmcmKTsKKyAgICBvcGVyYXRvciBXZWJDb3JlOjpTdHJpbmco
KSBjb25zdDsKKworICAgIFdlYkRPTVN0cmluZyhjb25zdCBXZWJDb3JlOjpBdG9taWNTdHJpbmcm
KTsKKyAgICBXZWJET01TdHJpbmcmIG9wZXJhdG9yPShjb25zdCBXZWJDb3JlOjpBdG9taWNTdHJp
bmcmKTsKKyAgICBvcGVyYXRvciBXZWJDb3JlOjpBdG9taWNTdHJpbmcoKSBjb25zdDsKKworICAg
IGJvb2wgZXF1YWxzKGNvbnN0IGNoYXIqIHN0cmluZykgY29uc3Q7CisKK3ByaXZhdGU6CisgICAg
dm9pZCBhc3NpZ24oV2ViRE9NU3RyaW5nUHJpdmF0ZSopOworICAgIFdlYkRPTVN0cmluZ1ByaXZh
dGUqIG1fcHJpdmF0ZTsKK307CisKKyNlbmRpZgoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViQ29y
ZS9iaW5kaW5ncy9jcHAvV2ViRE9NU3RyaW5nLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1
dGFibGUKICAgKyAqCgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9jcHAvV2ViRXhjZXB0aW9uSGFu
ZGxlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvY3BwL1dlYkV4Y2VwdGlv
bkhhbmRsZXJzLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3MvY3BwL1dlYkV4
Y2VwdGlvbkhhbmRsZXJzLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJF
eGNlcHRpb25IYW5kbGVycy5oIgorCit2b2lkIHdlYlJhaXNlRE9NRXhjZXB0aW9uKFdlYkRPTUV4
Y2VwdGlvbkNvZGUpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBleGNlcHRpb24gaGFuZGxp
bmcKK30KClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvYmluZGluZ3MvY3BwL1dlYkV4Y2Vw
dGlvbkhhbmRsZXJzLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoK
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2NwcC9XZWJFeGNlcHRpb25IYW5kbGVycy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvY3BwL1dlYkV4Y2VwdGlvbkhhbmRsZXJzLmgJKHJl
dmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL2NwcC9XZWJFeGNlcHRpb25IYW5kbGVycy5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSBSZXNl
YXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2lmbmRlZiBXZWJFeGNlcHRpb25IYW5kbGVyc19oCisjZGVmaW5lIFdlYkV4Y2Vw
dGlvbkhhbmRsZXJzX2gKKworI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8
d3RmL1RocmVhZGluZy5oPgorCisjaWYgIWRlZmluZWQoTkRFQlVHKSAmJiAhZGVmaW5lZChESVNB
QkxFX1RIUkVBRF9DSEVDSykKKyNkZWZpbmUgV0VCRE9NX0FTU0VSVF9NQUlOX1RIUkVBRCgpIGRv
IFwKKyAgICBpZiAoIVdURjo6aXNNYWluVGhyZWFkKCkpIHsgXAorICAgICAgICBXVEZSZXBvcnRB
c3NlcnRpb25GYWlsdXJlKF9fRklMRV9fLCBfX0xJTkVfXywgV1RGX1BSRVRUWV9GVU5DVElPTiwg
IkRPTSBhY2Nlc3Mgb24gbm9uLW1haW4gdGhyZWFkIC0tIHlvdSB3aWxsIHByb2JhYmx5IGNyYXNo
IHNvb24hIik7IFwKKyAgICB9IFwKK3doaWxlICgwKQorI2Vsc2UKKyNkZWZpbmUgV0VCRE9NX0FT
U0VSVF9NQUlOX1RIUkVBRCgpICgodm9pZCkwKQorI2VuZGlmCisKK3R5cGVkZWYgaW50IFdlYkRP
TUV4Y2VwdGlvbkNvZGU7Cit2b2lkIHdlYlJhaXNlRE9NRXhjZXB0aW9uKFdlYkRPTUV4Y2VwdGlv
bkNvZGUpOworCitpbmxpbmUgdm9pZCB3ZWJET01SYWlzZUVycm9yKFdlYkRPTUV4Y2VwdGlvbkNv
ZGUgZWMpIAoreworICAgIGlmIChlYykKKyAgICAgICAgd2ViUmFpc2VET01FeGNlcHRpb24oZWMp
OworfQorCisjZW5kaWYKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvYmluZGluZ3MvY3Bw
L1dlYkV4Y2VwdGlvbkhhbmRsZXJzLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUK
ICAgKyAqCgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9jcHAvV2ViTmF0aXZlRXZlbnRMaXN0ZW5l
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9jcHAvV2ViTmF0aXZlRXZlbnRM
aXN0ZW5lci5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL2NwcC9XZWJOYXRp
dmVFdmVudExpc3RlbmVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYk5hdGl2ZUV2ZW50
TGlzdGVuZXIuaCIKKworI2luY2x1ZGUgIldlYkRPTUV2ZW50LmgiCisKK1dlYk5hdGl2ZUV2ZW50
TGlzdGVuZXI6OldlYk5hdGl2ZUV2ZW50TGlzdGVuZXIoV2ViVXNlckV2ZW50TGlzdGVuZXIqIGxp
c3RlbmVyKQorICAgIDogV2ViQ29yZTo6RXZlbnRMaXN0ZW5lcihDUFBFdmVudExpc3RlbmVyVHlw
ZSksCisgICAgbV9saXN0ZW5lcihsaXN0ZW5lcikKK3sKKyAgICBBU1NFUlQobV9saXN0ZW5lcik7
CisgICAgbV9saXN0ZW5lci0+cmVmKCk7Cit9CisKK1dlYk5hdGl2ZUV2ZW50TGlzdGVuZXI6On5X
ZWJOYXRpdmVFdmVudExpc3RlbmVyKCkKK3sKKyAgICBtX2xpc3RlbmVyLT5kZXJlZigpOworfQor
Cit2b2lkIFdlYk5hdGl2ZUV2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KFdlYkNvcmU6OlNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJDb3JlOjpFdmVudCogZXZlbnQpCit7CisgICAgbV9saXN0
ZW5lci0+aGFuZGxlRXZlbnQod2ViS2l0KGV2ZW50KSk7Cit9CisKK2Jvb2wgV2ViTmF0aXZlRXZl
bnRMaXN0ZW5lcjo6cmVwb3J0RXJyb3IoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IGNvbnN0IFdlYkNvcmU6OlN0cmluZyYsIGNvbnN0IFdlYkNvcmU6OlN0cmluZyYsIGludCkKK3sK
KyAgICAvLyBGSVhNRTogSW1wbGVtZW50IGVycm9yIGhhbmRsaW5nCisgICAgcmV0dXJuIGZhbHNl
OworfQorCitib29sIFdlYk5hdGl2ZUV2ZW50TGlzdGVuZXI6Om9wZXJhdG9yPT0oY29uc3QgV2Vi
Q29yZTo6RXZlbnRMaXN0ZW5lciYgb3RoZXIpCit7CisgICAgY29uc3QgV2ViTmF0aXZlRXZlbnRM
aXN0ZW5lciogcHRyT3RoZXIgPSBjYXN0KCZvdGhlcik7CisgICAgcmV0dXJuIHB0ck90aGVyICYm
IG1fbGlzdGVuZXIgPT0gcHRyT3RoZXItPm1fbGlzdGVuZXI7Cit9CgpQcm9wZXJ0eSBjaGFuZ2Vz
IG9uOiBXZWJDb3JlL2JpbmRpbmdzL2NwcC9XZWJOYXRpdmVFdmVudExpc3RlbmVyLmNwcApfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoKCkluZGV4OiBXZWJDb3JlL2JpbmRp
bmdzL2NwcC9XZWJOYXRpdmVFdmVudExpc3RlbmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy9jcHAvV2ViTmF0aXZlRXZlbnRMaXN0ZW5lci5oCShyZXZpc2lvbiAwKQorKysgV2Vi
Q29yZS9iaW5kaW5ncy9jcHAvV2ViTmF0aXZlRXZlbnRMaXN0ZW5lci5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24g
TGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDAx
IFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDgs
IDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYk5hdGl2ZUV2
ZW50TGlzdGVuZXJfaAorI2RlZmluZSBXZWJOYXRpdmVFdmVudExpc3RlbmVyX2gKKworI2luY2x1
ZGUgIkV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlICJXZWJET01FdmVudExpc3RlbmVyLmgiCisK
K2NsYXNzIFdlYk5hdGl2ZUV2ZW50TGlzdGVuZXIgOiBwdWJsaWMgV2ViQ29yZTo6RXZlbnRMaXN0
ZW5lciB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViTmF0aXZlRXZlbnRMaXN0
ZW5lcj4gY3JlYXRlKFdlYlVzZXJFdmVudExpc3RlbmVyKiBsaXN0ZW5lcikKKyAgICB7CisgICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViTmF0aXZlRXZlbnRMaXN0ZW5lcihsaXN0ZW5lcikp
OworICAgIH0KKworICAgIHN0YXRpYyBjb25zdCBXZWJOYXRpdmVFdmVudExpc3RlbmVyKiBjYXN0
KGNvbnN0IFdlYkNvcmU6OkV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGxpc3RlbmVyLT50eXBlKCkgPT0gQ1BQRXZlbnRMaXN0ZW5lclR5cGUKKyAgICAgICAg
ICAgICAgICA/IHN0YXRpY19jYXN0PGNvbnN0IFdlYk5hdGl2ZUV2ZW50TGlzdGVuZXIqPihsaXN0
ZW5lcikKKyAgICAgICAgICAgICAgICA6IDA7CisgICAgfQorCisgICAgdmlydHVhbCB+V2ViTmF0
aXZlRXZlbnRMaXN0ZW5lcigpOworICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFdl
YkNvcmU6OkV2ZW50TGlzdGVuZXImIG90aGVyKTsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIHZv
aWQgaGFuZGxlRXZlbnQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYkNvcmU6
OkV2ZW50Kik7CisgICAgdmlydHVhbCBib29sIHJlcG9ydEVycm9yKFdlYkNvcmU6OlNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBXZWJDb3JlOjpTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFdl
YkNvcmU6OlN0cmluZyYgdXJsLCBpbnQgbGluZU51bWJlcik7CisKK3Byb3RlY3RlZDoKKyAgICBX
ZWJOYXRpdmVFdmVudExpc3RlbmVyKFdlYlVzZXJFdmVudExpc3RlbmVyKik7CisgICAgV2ViVXNl
ckV2ZW50TGlzdGVuZXIqIG1fbGlzdGVuZXI7Cit9OworCisjZW5kaWYKClByb3BlcnR5IGNoYW5n
ZXMgb246IFdlYkNvcmUvYmluZGluZ3MvY3BwL1dlYk5hdGl2ZUV2ZW50TGlzdGVuZXIuaApfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoKCkluZGV4OiBXZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckNQUC5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckNQUC5wbQkocmV2aXNpb24gMCkKKysrIFdlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yQ1BQLnBtCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDk0OSBAQAorCisjIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBOaWtvbGFzIFppbW1l
cm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyMgQ29weXJpZ2h0IChDKSAyMDA2IEFuZGVycyBD
YXJsc3NvbiA8YW5kZXJzY2FAbWFjLmNvbT4gCisjIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBT
YW11ZWwgV2VpbmlnIDxzYW1Ad2Via2l0Lm9yZz4KKyMgQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhl
eSBQcm9za3VyeWFrb3YgPGFwQHdlYmtpdC5vcmc+CisjIENvcHlyaWdodCAoQykgMjAwNiwgMjAw
NywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdo
dCAoQykgMjAwOSBDYW1lcm9uIE1jQ29ybWFjayA8Y2FtQG1jYy5pZC5hdT4KKyMgQ29weXJpZ2h0
IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorIworIyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjIAorIyBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyMgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisjIAorIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFpbnQgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyMgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyMgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisjCisKK3BhY2thZ2UgQ29kZUdl
bmVyYXRvckNQUDsKKwordXNlIEZpbGU6OnN0YXQ7CisKKyMgR2xvYmFsIFZhcmlhYmxlcworbXkg
JG1vZHVsZSA9ICIiOworbXkgJG91dHB1dERpciA9ICIiOworCitteSBAaGVhZGVyQ29udGVudEhl
YWRlciA9ICgpOworbXkgQGhlYWRlckNvbnRlbnQgPSAoKTsKK215ICVoZWFkZXJGb3J3YXJkRGVj
bGFyYXRpb25zID0gKCk7CisKK215IEBpbXBsQ29udGVudEhlYWRlciA9ICgpOworbXkgQGltcGxD
b250ZW50ID0gKCk7CitteSAlaW1wbEluY2x1ZGVzID0gKCk7CisKKyMgQ29uc3RhbnRzCitteSAk
ZXhjZXB0aW9uSW5pdCA9ICJXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsiOworbXkgJGV4
Y2VwdGlvblJhaXNlT25FcnJvciA9ICJ3ZWJET01SYWlzZUVycm9yKHN0YXRpY19jYXN0PFdlYkRP
TUV4Y2VwdGlvbkNvZGU+KGVjKSk7IjsKK215ICRhc3NlcnRNYWluVGhyZWFkID0gInsgV0VCRE9N
X0FTU0VSVF9NQUlOX1RIUkVBRCgpOyBXZWJDb3JlVGhyZWFkVmlvbGF0aW9uQ2hlY2tSb3VuZE9u
ZSgpOyB9IjsKKworIyBEZWZhdWx0IExpY2Vuc2UgVGVtcGxhdGVzCitteSAkaGVhZGVyTGljZW5z
ZVRlbXBsYXRlID0gPDwgIkVPRiI7CisvKgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBN
b3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIDxzYW0ud2Vp
bmlnXEBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1p
dGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCitFT0YKKworbXkgJGltcGxlbWVudGF0aW9uTGlj
ZW5zZVRlbXBsYXRlID0gPDwgIkVPRiI7CisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVy
YXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KK0VPRgorCisjIERlZmF1
bHQgY29uc3RydWN0b3IKK3N1YiBuZXcKK3sKKyAgICBteSAkb2JqZWN0ID0gc2hpZnQ7CisgICAg
bXkgJHJlZmVyZW5jZSA9IHsgfTsKKworICAgICRjb2RlR2VuZXJhdG9yID0gc2hpZnQ7CisgICAg
JG91dHB1dERpciA9IHNoaWZ0OworICAgIHNoaWZ0OyAjICR1c2VMYXllck9uVG9wCisgICAgc2hp
ZnQ7ICMgJHByZXByb2Nlc3NvcgorICAgIHNoaWZ0OyAjICR3cml0ZURlcGVuZGVuY2llcworCisg
ICAgYmxlc3MoJHJlZmVyZW5jZSwgJG9iamVjdCk7CisgICAgcmV0dXJuICRyZWZlcmVuY2U7Cit9
CisKK3N1YiBmaW5pc2gKK3sKKyAgICBteSAkb2JqZWN0ID0gc2hpZnQ7Cit9CisKKyMgUGFyYW1z
OiAnZG9tQ2xhc3MnIHN0cnVjdAorc3ViIEdlbmVyYXRlSW50ZXJmYWNlCit7CisgICAgbXkgJG9i
amVjdCA9IHNoaWZ0OworICAgIG15ICRkYXRhTm9kZSA9IHNoaWZ0OworICAgIG15ICRkZWZpbmVz
ID0gc2hpZnQ7CisKKyAgICBteSAkbmFtZSA9ICRkYXRhTm9kZS0+bmFtZTsKKyAgICBteSAkY2xh
c3NOYW1lID0gR2V0Q2xhc3NOYW1lKCRuYW1lKTsKKyAgICBteSAkcGFyZW50Q2xhc3NOYW1lID0g
IldlYkRPTSIgLiBHZXRQYXJlbnRJbXBsQ2xhc3NOYW1lKCRkYXRhTm9kZSk7CisKKyAgICAjIFN0
YXJ0IGFjdHVhbCBnZW5lcmF0aW9uLi4KKyAgICAkb2JqZWN0LT5HZW5lcmF0ZUhlYWRlcigkZGF0
YU5vZGUpOworICAgICRvYmplY3QtPkdlbmVyYXRlSW1wbGVtZW50YXRpb24oJGRhdGFOb2RlKTsK
KworICAgICMgV3JpdGUgY2hhbmdlcy4KKyAgICAkb2JqZWN0LT5Xcml0ZURhdGEoIldlYkRPTSIg
LiAkbmFtZSk7Cit9CisKKyMgUGFyYW1zOiAnaWRsRG9jdW1lbnQnIHN0cnVjdAorc3ViIEdlbmVy
YXRlTW9kdWxlCit7CisgICAgbXkgJG9iamVjdCA9IHNoaWZ0OworICAgIG15ICRkYXRhTm9kZSA9
IHNoaWZ0OworCisgICAgJG1vZHVsZSA9ICRkYXRhTm9kZS0+bW9kdWxlOworfQorCitzdWIgR2V0
Q2xhc3NOYW1lCit7CisgICAgbXkgJG5hbWUgPSAkY29kZUdlbmVyYXRvci0+U3RyaXBNb2R1bGUo
c2hpZnQpOworCisgICAgIyBzcGVjaWFsIGNhc2VzCisgICAgcmV0dXJuICJXZWJET01TdHJpbmci
IGlmICRjb2RlR2VuZXJhdG9yLT5Jc1N0cmluZ1R5cGUoJG5hbWUpIG9yICRuYW1lIGVxICJTZXJp
YWxpemVkU2NyaXB0VmFsdWUiOworICAgIHJldHVybiAiV2ViRE9NQWJzdHJhY3RWaWV3IiBpZiAk
bmFtZSBlcSAiRE9NV2luZG93IjsKKyAgICByZXR1cm4gIldlYkRPTU9iamVjdCIgaWYgJG5hbWUg
ZXEgIkRPTU9iamVjdCI7CisgICAgcmV0dXJuICJib29sIiBpZiAkbmFtZSBlcSAiYm9vbGVhbiI7
CisgICAgcmV0dXJuICRuYW1lIGlmICRjb2RlR2VuZXJhdG9yLT5Jc1ByaW1pdGl2ZVR5cGUoJG5h
bWUpOworCisgICAgcmV0dXJuICJXZWJET00kbmFtZSI7Cit9CisKK3N1YiBHZXRJbXBsQ2xhc3NO
YW1lCit7CisgICAgbXkgJG5hbWUgPSAkY29kZUdlbmVyYXRvci0+U3RyaXBNb2R1bGUoc2hpZnQp
OworCisgICAgcmV0dXJuICJET01XaW5kb3ciIGlmICRuYW1lIGVxICJBYnN0cmFjdFZpZXciOwor
ICAgIHJldHVybiAkbmFtZTsKK30KKworc3ViIEdldFBhcmVudEltcGxDbGFzc05hbWUKK3sKKyAg
ICBteSAkZGF0YU5vZGUgPSBzaGlmdDsKKworICAgIHJldHVybiAiT2JqZWN0IiBpZiBAeyRkYXRh
Tm9kZS0+cGFyZW50c30gZXEgMDsKKyAgICByZXR1cm4gJGNvZGVHZW5lcmF0b3ItPlN0cmlwTW9k
dWxlKCRkYXRhTm9kZS0+cGFyZW50cygwKSk7Cit9CisKK3N1YiBHZXRQYXJlbnQKK3sKKyAgICBt
eSAkZGF0YU5vZGUgPSBzaGlmdDsKKyAgICBteSAkbnVtUGFyZW50cyA9IEB7JGRhdGFOb2RlLT5w
YXJlbnRzfTsKKworICAgIG15ICRwYXJlbnQgPSAiIjsKKyAgICBpZiAoJG51bVBhcmVudHMgZXEg
MCkgeworICAgICAgICAkcGFyZW50ID0gIldlYkRPTU9iamVjdCI7CisgICAgfSBlbHNpZiAoJG51
bVBhcmVudHMgZXEgMSkgeworICAgICAgICBteSAkcGFyZW50TmFtZSA9ICRjb2RlR2VuZXJhdG9y
LT5TdHJpcE1vZHVsZSgkZGF0YU5vZGUtPnBhcmVudHMoMCkpOworICAgICAgICAkcGFyZW50ID0g
IldlYkRPTSIgLiAkcGFyZW50TmFtZTsKKyAgICB9IGVsc2UgeworICAgICAgICBteSBAcGFyZW50
cyA9IEB7JGRhdGFOb2RlLT5wYXJlbnRzfTsKKyAgICAgICAgbXkgJGZpcnN0UGFyZW50ID0gJGNv
ZGVHZW5lcmF0b3ItPlN0cmlwTW9kdWxlKHNoaWZ0KEBwYXJlbnRzKSk7CisgICAgICAgICRwYXJl
bnQgPSAiV2ViRE9NIiAuICRmaXJzdFBhcmVudDsKKyAgICB9CisKKyAgICByZXR1cm4gJHBhcmVu
dDsKK30KKworc3ViIFNob3VsZFNraXBUeXBlSW5JbXBsZW1lbnRhdGlvbgoreworICAgIG15ICR0
eXBlSW5mbyA9IHNoaWZ0OworCisgICAgcmV0dXJuIDEgaWYgJHR5cGVJbmZvLT5zaWduYXR1cmUt
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b20ifQorICAgICAgICAgICAgIG9yICR0eXBlSW5m
by0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tQXJndW1lbnRIYW5kbGlu
ZyJ9CisgICAgICAgICAgICAgb3IgJHR5cGVJbmZvLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJDdXN0b21HZXR0ZXIifQorICAgICAgICAgICAgIG9yICR0eXBlSW5mby0+c2lnbmF0
dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tU2V0dGVyIn0KKyAgICAgICAgICAgICBv
ciAkdHlwZUluZm8tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5lZWRzVXNlckdl
c3R1cmVDaGVjayJ9OworCisgICAgIyBUT0RPOiBXZSBkb24ndCBnZW5lcmF0ZSBiaW5kaW5ncyBm
b3IgU1ZHIHJlbGF0ZWQgaW50ZXJmYWNlcyB5ZXQKKyAgICByZXR1cm4gMSBpZiAkdHlwZUluZm8t
PnNpZ25hdHVyZS0+bmFtZSA9fiAvZ2V0U1ZHRG9jdW1lbnQvOworCisgICAgcmV0dXJuIDEgaWYg
JHR5cGVJbmZvLT5zaWduYXR1cmUtPm5hbWUgPX4gL0NvbnN0cnVjdG9yLzsKKyAgICByZXR1cm4g
MDsKK30KKworc3ViIFNob3VsZFNraXBUeXBlSW5IZWFkZXIKK3sKKyAgICBteSAkdHlwZUluZm8g
PSBzaGlmdDsKKworICAgICMgVE9ETzogV2UgY3VycmVudGx5IGlnbm9yZSBhbnkgYXR0cmlidXRl
L2Z1bmN0aW9uIG5lZWRpbmcgY3VzdG9tIGNvZGUKKyAgICByZXR1cm4gMSBpZiAkdHlwZUluZm8t
PnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbUFyZ3VtZW50SGFuZGxpbmci
fQorICAgICAgICAgICAgIG9yICR0eXBlSW5mby0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPnsiQ3VzdG9tR2V0dGVyIn07CisKKyAgICAjIFRPRE86IFdlIGRvbid0IGdlbmVyYXRlIGJp
bmRpbmdzIGZvciBTVkcgcmVsYXRlZCBpbnRlcmZhY2VzIHlldAorICAgIHJldHVybiAxIGlmICR0
eXBlSW5mby0+c2lnbmF0dXJlLT5uYW1lID1+IC9nZXRTVkdEb2N1bWVudC87CisKKyAgICByZXR1
cm4gMSBpZiAkdHlwZUluZm8tPnNpZ25hdHVyZS0+bmFtZSA9fiAvQ29uc3RydWN0b3IvOworICAg
IHJldHVybiAwOworfQorCitzdWIgR2V0Q1BQVHlwZQoreworICAgIG15ICR0eXBlID0gc2hpZnQ7
CisgICAgbXkgJG5hbWUgPSBHZXRDbGFzc05hbWUoJHR5cGUpOworCisgICAgcmV0dXJuICRuYW1l
IGlmICRjb2RlR2VuZXJhdG9yLT5Jc1ByaW1pdGl2ZVR5cGUoJHR5cGUpIG9yICRjb2RlR2VuZXJh
dG9yLT5Jc1N0cmluZ1R5cGUoJHR5cGUpIG9yICR0eXBlIGVxICJET01UaW1lU3RhbXAiOworICAg
IHJldHVybiAidW5zaWduZWQgc2hvcnQiIGlmICR0eXBlIGVxICJDb21wYXJlSG93IjsKKyAgICBy
ZXR1cm4gIiRuYW1lIjsKK30KKworc3ViIENvbnZlcnNpb25OZWVkZWQKK3sKKyAgICBteSAkdHlw
ZSA9ICRjb2RlR2VuZXJhdG9yLT5TdHJpcE1vZHVsZShzaGlmdCk7CisgICAgcmV0dXJuICEkY29k
ZUdlbmVyYXRvci0+SXNOb25Qb2ludGVyVHlwZSgkdHlwZSkgJiYgISRjb2RlR2VuZXJhdG9yLT5J
c1N0cmluZ1R5cGUoJHR5cGUpOworfQorCitzdWIgR2V0Q1BQVHlwZUdldHRlcgoreworICAgIG15
ICRhcmdOYW1lID0gc2hpZnQ7CisgICAgbXkgJHR5cGUgPSAkY29kZUdlbmVyYXRvci0+U3RyaXBN
b2R1bGUoc2hpZnQpOworCisgICAgcmV0dXJuICRhcmdOYW1lIGlmICRjb2RlR2VuZXJhdG9yLT5J
c1ByaW1pdGl2ZVR5cGUoJHR5cGUpIG9yICRjb2RlR2VuZXJhdG9yLT5Jc1N0cmluZ1R5cGUoJHR5
cGUpOworICAgIHJldHVybiAic3RhdGljX2Nhc3Q8V2ViQ29yZTo6UmFuZ2U6OkNvbXBhcmVIb3c+
KCRhcmdOYW1lKSIgaWYgJHR5cGUgZXEgIkNvbXBhcmVIb3ciOworICAgIHJldHVybiAiV2ViQ29y
ZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoV2ViQ29yZTo6U3RyaW5nKCRhcmdOYW1l
KSkiIGlmICR0eXBlIGVxICJTZXJpYWxpemVkU2NyaXB0VmFsdWUiOworICAgIHJldHVybiAid2Vi
Q29yZSgkYXJnTmFtZSkiOworfQorCitzdWIgQWRkRm9yd2FyZERlY2xhcmF0aW9uc0ZvclR5cGUK
K3sKKyAgICBteSAkdHlwZSA9ICRjb2RlR2VuZXJhdG9yLT5TdHJpcE1vZHVsZShzaGlmdCk7Cisg
ICAgbXkgJHB1YmxpYyA9IHNoaWZ0OworCisgICAgcmV0dXJuIGlmICRjb2RlR2VuZXJhdG9yLT5J
c05vblBvaW50ZXJUeXBlKCR0eXBlKSBvciAkY29kZUdlbmVyYXRvci0+SXNTdHJpbmdUeXBlKCR0
eXBlKTsKKworICAgIG15ICRjbGFzcyA9IEdldENsYXNzTmFtZSgkdHlwZSk7CisgICAgJGhlYWRl
ckZvcndhcmREZWNsYXJhdGlvbnN7JGNsYXNzfSA9IDEgaWYgJHB1YmxpYzsKK30KKworc3ViIEFk
ZEluY2x1ZGVzRm9yVHlwZQoreworICAgIG15ICR0eXBlID0gJGNvZGVHZW5lcmF0b3ItPlN0cmlw
TW9kdWxlKHNoaWZ0KTsKKworICAgIHJldHVybiBpZiAkY29kZUdlbmVyYXRvci0+SXNOb25Qb2lu
dGVyVHlwZSgkdHlwZSk7CisgICAgcmV0dXJuIGlmICR0eXBlID1+IC9jY29uc3RydWN0b3IvOwor
CisgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1N0cmluZ1R5cGUoJHR5cGUpKSB7CisgICAgICAg
ICRpbXBsSW5jbHVkZXN7IkF0b21pY1N0cmluZy5oIn0gPSAxOworICAgICAgICAkaW1wbEluY2x1
ZGVzeyJLVVJMLmgifSA9IDE7CisgICAgICAgICRpbXBsSW5jbHVkZXN7IldlYkRPTVN0cmluZy5o
In0gPSAxOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCR0eXBlIGVxICJET01P
YmplY3QiKSB7CisgICAgICAgICRpbXBsSW5jbHVkZXN7IldlYkRPTU9iamVjdC5oIn0gPSAxOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCR0eXBlIGVxICJET01XaW5kb3ciKSB7
CisgICAgICAgICRpbXBsSW5jbHVkZXN7IkRPTVdpbmRvdy5oIn0gPSAxOworICAgICAgICAkaW1w
bEluY2x1ZGVzeyJXZWJET01BYnN0cmFjdFZpZXcuaCJ9ID0gMTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmICgkdHlwZSBlcSAiRXZlbnRMaXN0ZW5lciIpIHsKKyAgICAgICAgJGlt
cGxJbmNsdWRlc3siV2ViTmF0aXZlRXZlbnRMaXN0ZW5lci5oIn0gPSAxOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKCR0eXBlIGVxICJTZXJpYWxpemVkU2NyaXB0VmFsdWUiKSB7
CisgICAgICAgICRpbXBsSW5jbHVkZXN7IlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIn0gPSAxOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgJGltcGxJbmNsdWRlc3siTm9kZS5oIn0gPSAx
IGlmICR0eXBlIGVxICJOb2RlTGlzdCI7CisgICAgJGltcGxJbmNsdWRlc3siQ1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24uaCJ9ID0gMSBpZiAkdHlwZSBlcSAiQ1NTU3R5bGVEZWNsYXJhdGlvbiI7
CisKKyAgICAjIERlZmF1bHQsIGluY2x1ZGUgdGhlIHNhbWUgbmFtZWQgZmlsZSAodGhlIGltcGxl
bWVudGF0aW9uKSBhbmQgdGhlIHNhbWUgbmFtZSBwcmVmaXhlZCB3aXRoICJXZWJET00iLiAKKyAg
ICAkaW1wbEluY2x1ZGVzeyIkdHlwZS5oIn0gPSAxIHVubGVzcyAkdHlwZSBlcSAiRE9NT2JqZWN0
IjsKKyAgICAkaW1wbEluY2x1ZGVzeyJXZWJET00kdHlwZS5oIn0gPSAxOworfQorCitzdWIgR2Vu
ZXJhdGVDb25kaXRpb25hbFN0cmluZ0Zyb21BdHRyaWJ1dGVWYWx1ZQoreworICAgIG15ICRjb25k
aXRpb25hbCA9IHNoaWZ0OworICAgIGlmICgkY29uZGl0aW9uYWwgPX4gLyYvKSB7CisgICAgICAg
IHJldHVybiAiRU5BQkxFKCIgLiBqb2luKCIpICYmIEVOQUJMRSgiLCBzcGxpdCgvJi8sICRjb25k
aXRpb25hbCkpIC4gIikiOworICAgIH0gZWxzaWYgKCRjb25kaXRpb25hbCA9fiAvXHwvKSB7Cisg
ICAgICAgIHJldHVybiAiRU5BQkxFKCIgLiBqb2luKCIpIHx8IEVOQUJMRSgiLCBzcGxpdCgvXHwv
LCAkY29uZGl0aW9uYWwpKSAuICIpIjsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gIkVO
QUJMRSgiIC4gJGNvbmRpdGlvbmFsIC4gIikiOworICAgIH0KK30KKworc3ViIEdlbmVyYXRlQ29u
ZGl0aW9uYWxTdHJpbmcKK3sKKyAgICBteSAkbm9kZSA9IHNoaWZ0OworICAgIG15ICRjb25kaXRp
b25hbCA9ICRub2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29uZGl0aW9uYWwifTsKKyAgICBp
ZiAoJGNvbmRpdGlvbmFsKSB7CisgICAgICAgIHJldHVybiBHZW5lcmF0ZUNvbmRpdGlvbmFsU3Ry
aW5nRnJvbUF0dHJpYnV0ZVZhbHVlKCRjb25kaXRpb25hbCk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgcmV0dXJuICIiOworICAgIH0KK30KKworc3ViIEdlbmVyYXRlSGVhZGVyCit7CisgICAgbXkg
JG9iamVjdCA9IHNoaWZ0OworICAgIG15ICRkYXRhTm9kZSA9IHNoaWZ0OworCisgICAgbXkgJGlu
dGVyZmFjZU5hbWUgPSAkZGF0YU5vZGUtPm5hbWU7CisgICAgbXkgJGNsYXNzTmFtZSA9IEdldENs
YXNzTmFtZSgkaW50ZXJmYWNlTmFtZSk7CisgICAgbXkgJGltcGxDbGFzc05hbWUgPSBHZXRJbXBs
Q2xhc3NOYW1lKCRpbnRlcmZhY2VOYW1lKTsKKyAgICBteSAkaW1wbENsYXNzTmFtZVdpdGhOYW1l
c3BhY2UgPSAiV2ViQ29yZTo6IiAuICRpbXBsQ2xhc3NOYW1lOworCisgICAgbXkgJHBhcmVudE5h
bWUgPSAiIjsKKyAgICAkcGFyZW50TmFtZSA9IEdldFBhcmVudCgkZGF0YU5vZGUpOworCisgICAg
bXkgJG51bUNvbnN0YW50cyA9IEB7JGRhdGFOb2RlLT5jb25zdGFudHN9OworICAgIG15ICRudW1B
dHRyaWJ1dGVzID0gQHskZGF0YU5vZGUtPmF0dHJpYnV0ZXN9OworICAgIG15ICRudW1GdW5jdGlv
bnMgPSBAeyRkYXRhTm9kZS0+ZnVuY3Rpb25zfTsKKworICAgICMgLSBBZGQgZGVmYXVsdCBoZWFk
ZXIgdGVtcGxhdGUKKyAgICBAaGVhZGVyQ29udGVudEhlYWRlciA9IHNwbGl0KCJcciIsICRoZWFk
ZXJMaWNlbnNlVGVtcGxhdGUpOworICAgIHB1c2goQGhlYWRlckNvbnRlbnRIZWFkZXIsICJcbiNp
Zm5kZWYgJGNsYXNzTmFtZSIgLiAiX2giKTsKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50SGVhZGVy
LCAiXG4jZGVmaW5lICRjbGFzc05hbWUiIC4gIl9oXG5cbiIpOworCisgICAgbXkgJGNvbmRpdGlv
bmFsU3RyaW5nID0gR2VuZXJhdGVDb25kaXRpb25hbFN0cmluZygkZGF0YU5vZGUpOworICAgIHB1
c2goQGhlYWRlckNvbnRlbnRIZWFkZXIsICIjaWYgJHtjb25kaXRpb25hbFN0cmluZ31cblxuIikg
aWYgJGNvbmRpdGlvbmFsU3RyaW5nOworCisgICAgIyAtIElOQ0xVREVTIC0KKyAgICBwdXNoKEBo
ZWFkZXJDb250ZW50SGVhZGVyLCAiI2luY2x1ZGUgPCRwYXJlbnROYW1lLmg+XG4iKTsKKyAgICBw
dXNoKEBoZWFkZXJDb250ZW50SGVhZGVyLCAiI2luY2x1ZGUgPFdlYkRPTVN0cmluZy5oPlxuIik7
CisKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiY2xhc3MgJGNsYXNzTmFtZSIpOworICAgIHB1
c2goQGhlYWRlckNvbnRlbnQsICIgOiBwdWJsaWMgJHBhcmVudE5hbWUiKSBpZiAkcGFyZW50TmFt
ZTsKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiIHtcbiIpOworICAgIHB1c2goQGhlYWRlckNv
bnRlbnQsICJwdWJsaWM6XG4iKTsKKworICAgICMgQ29uc3RydWN0b3IKKyAgICBwdXNoKEBoZWFk
ZXJDb250ZW50LCAiICAgICRjbGFzc05hbWUoKTtcbiIpOworICAgIHB1c2goQGhlYWRlckNvbnRl
bnQsICIgICAgZXhwbGljaXQgJGNsYXNzTmFtZSgkaW1wbENsYXNzTmFtZVdpdGhOYW1lc3BhY2Uq
KTtcbiIpOworCisgICAgIyBDb3B5IGNvbnN0cnVjdG9yIG9uIGNsYXNzZXMgd2hpY2ggaGF2ZSB0
aGUgZC1wdHIKKyAgICBpZiAoQHskZGF0YU5vZGUtPnBhcmVudHN9IGVxIDApIHsKKyAgICAgICAg
cHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAkY2xhc3NOYW1lKGNvbnN0ICRjbGFzc05hbWUmKTtc
biIpOworICAgIH0KKworICAgICMgRGVzdHJ1Y3RvcgorICAgIGlmIChAeyRkYXRhTm9kZS0+cGFy
ZW50c30gZXEgMCkgeworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIH4kY2xhc3NO
YW1lKCk7XG4iKTsKKyAgICB9CisKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiXG4iKTsKKyAg
ICAkaGVhZGVyRm9yd2FyZERlY2xhcmF0aW9uc3skaW1wbENsYXNzTmFtZVdpdGhOYW1lc3BhY2V9
ID0gMTsKKworICAgICMgLSBBZGQgY29uc3RhbnRzLgorICAgIGlmICgkbnVtQ29uc3RhbnRzID4g
MCkgeworICAgICAgICBteSBAaGVhZGVyQ29uc3RhbnRzID0gKCk7CisKKyAgICAgICAgIyBGSVhN
RTogd2UgbmVlZCBhIHdheSB0byBpbmNsdWRlIG11bHRpcGxlIGVudW1zLgorICAgICAgICBmb3Jl
YWNoIG15ICRjb25zdGFudCAoQHskZGF0YU5vZGUtPmNvbnN0YW50c30pIHsKKyAgICAgICAgICAg
IG15ICRjb25zdGFudE5hbWUgPSAkY29uc3RhbnQtPm5hbWU7CisgICAgICAgICAgICBteSAkY29u
c3RhbnRWYWx1ZSA9ICRjb25zdGFudC0+dmFsdWU7CisKKyAgICAgICAgICAgIG15ICRvdXRwdXQg
PSAiV0VCRE9NXyIgLiAkY29uc3RhbnROYW1lIC4gIiA9ICIgLiAkY29uc3RhbnRWYWx1ZTsKKyAg
ICAgICAgICAgIHB1c2goQGhlYWRlckNvbnN0YW50cywgIiAgICAgICAgIiAuICRvdXRwdXQpOwor
ICAgICAgICB9CisKKyAgICAgICAgbXkgJGNvbWJpbmVkQ29uc3RhbnRzID0gam9pbigiLFxuIiwg
QGhlYWRlckNvbnN0YW50cyk7CisKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAi
KTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgImVudW0ge1xuIik7CisgICAgICAgIHB1
c2goQGhlYWRlckNvbnRlbnQsICRjb21iaW5lZENvbnN0YW50cyk7CisgICAgICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsICJcbiAgICAiKTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIn07
XG5cbiIpOworICAgIH0KKworICAgIG15IEBoZWFkZXJBdHRyaWJ1dGVzID0gKCk7CisKKyAgICAj
IC0gQWRkIGF0dHJpYnV0ZSBnZXR0ZXJzL3NldHRlcnMuCisgICAgaWYgKCRudW1BdHRyaWJ1dGVz
ID4gMCkgeworICAgICAgICBmb3JlYWNoIG15ICRhdHRyaWJ1dGUgKEB7JGRhdGFOb2RlLT5hdHRy
aWJ1dGVzfSkgeworICAgICAgICAgICAgbmV4dCBpZiBTaG91bGRTa2lwVHlwZUluSGVhZGVyKCRh
dHRyaWJ1dGUpOworCisgICAgICAgICAgICBteSAkYXR0cmlidXRlTmFtZSA9ICRhdHRyaWJ1dGUt
PnNpZ25hdHVyZS0+bmFtZTsKKyAgICAgICAgICAgIG15ICRhdHRyaWJ1dGVUeXBlID0gR2V0Q1BQ
VHlwZSgkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGUpOworICAgICAgICAgICAgbXkgJGF0dHJp
YnV0ZUlzUmVhZG9ubHkgPSAoJGF0dHJpYnV0ZS0+dHlwZSA9fiAvXnJlYWRvbmx5Lyk7CisgICAg
ICAgICAgICBteSAkcHJvcGVydHkgPSAiICAgICIgLiAkYXR0cmlidXRlVHlwZSAuICgkYXR0cmli
dXRlVHlwZSA9fiAvXCokLyA/ICIiIDogIiAiKSAuICRhdHRyaWJ1dGVOYW1lIC4gIigpIGNvbnN0
IjsKKworICAgICAgICAgICAgbXkgJGF2YWlsYWJpbGl0eU1hY3JvID0gIiI7CisgICAgICAgICAg
ICBteSAkZGVjbGFyYXRpb25TdWZmaXggPSAiO1xuIjsKKworICAgICAgICAgICAgQWRkRm9yd2Fy
ZERlY2xhcmF0aW9uc0ZvclR5cGUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT50eXBlLCAxKTsKKwor
ICAgICAgICAgICAgbXkgJHNldHRlck5hbWUgPSAic2V0IiAuIHVjZmlyc3QoJGF0dHJpYnV0ZU5h
bWUpOworCisgICAgICAgICAgICAkcHJvcGVydHkgLj0gJGRlY2xhcmF0aW9uU3VmZml4OworICAg
ICAgICAgICAgcHVzaChAaGVhZGVyQXR0cmlidXRlcywgJHByb3BlcnR5KTsKKyAgICAgICAgICAg
IGlmICghJGF0dHJpYnV0ZUlzUmVhZG9ubHkgYW5kICEkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4
dGVuZGVkQXR0cmlidXRlcy0+eyJSZXBsYWNlYWJsZSJ9KSB7CisgICAgICAgICAgICAgICAgJHBy
b3BlcnR5ID0gIiAgICB2b2lkICRzZXR0ZXJOYW1lKGNvbnN0ICIgLiAkYXR0cmlidXRlVHlwZSAu
ICImKSI7CisgICAgICAgICAgICAgICAgJHByb3BlcnR5IC49ICRkZWNsYXJhdGlvblN1ZmZpeDsK
KyAgICAgICAgICAgICAgICBwdXNoKEBoZWFkZXJBdHRyaWJ1dGVzLCAkcHJvcGVydHkpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgQGhl
YWRlckF0dHJpYnV0ZXMpIGlmIEBoZWFkZXJBdHRyaWJ1dGVzID4gMDsKKyAgICB9CisKKyAgICBt
eSBAaGVhZGVyRnVuY3Rpb25zID0gKCk7CisgICAgbXkgQGRlcHJlY2F0ZWRIZWFkZXJGdW5jdGlv
bnMgPSAoKTsKKyAgICBteSBAaW50ZXJmYWNlRnVuY3Rpb25zID0gKCk7CisKKyAgICAjIC0gQWRk
IGZ1bmN0aW9ucy4KKyAgICBpZiAoJG51bUZ1bmN0aW9ucyA+IDApIHsKKyAgICAgICAgZm9yZWFj
aCBteSAkZnVuY3Rpb24gKEB7JGRhdGFOb2RlLT5mdW5jdGlvbnN9KSB7CisgICAgICAgICAgICBu
ZXh0IGlmIFNob3VsZFNraXBUeXBlSW5IZWFkZXIoJGZ1bmN0aW9uKTsKKyAgICAgICAgICAgIG15
ICRmdW5jdGlvbk5hbWUgPSAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZTsKKworICAgICAgICAg
ICAgbXkgJHJldHVyblR5cGUgPSBHZXRDUFBUeXBlKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT50eXBl
KTsKKyAgICAgICAgICAgIG15ICRudW1iZXJPZlBhcmFtZXRlcnMgPSBAeyRmdW5jdGlvbi0+cGFy
YW1ldGVyc307CisgICAgICAgICAgICBteSAldHlwZXNUb0ZvcndhcmREZWNsYXJlID0gKCRmdW5j
dGlvbi0+c2lnbmF0dXJlLT50eXBlID0+IDEpOworCisgICAgICAgICAgICBteSAkcGFyYW1ldGVy
SW5kZXggPSAwOworICAgICAgICAgICAgbXkgJGZ1bmN0aW9uU2lnID0gIiRyZXR1cm5UeXBlICRm
dW5jdGlvbk5hbWUoIjsKKyAgICAgICAgICAgIG15ICRtZXRob2ROYW1lID0gJGZ1bmN0aW9uTmFt
ZTsKKyAgICAgICAgICAgIGZvcmVhY2ggbXkgJHBhcmFtIChAeyRmdW5jdGlvbi0+cGFyYW1ldGVy
c30pIHsKKyAgICAgICAgICAgICAgICBteSAkcGFyYW1OYW1lID0gJHBhcmFtLT5uYW1lOworICAg
ICAgICAgICAgICAgIG15ICRwYXJhbVR5cGUgPSBHZXRDUFBUeXBlKCRwYXJhbS0+dHlwZSk7Cisg
ICAgICAgICAgICAgICAgJHR5cGVzVG9Gb3J3YXJkRGVjbGFyZXskcGFyYW0tPnR5cGV9ID0gMTsK
KworICAgICAgICAgICAgICAgICRmdW5jdGlvblNpZyAuPSAiLCAiIGlmICRwYXJhbWV0ZXJJbmRl
eCA+PSAxOworICAgICAgICAgICAgICAgICRmdW5jdGlvblNpZyAuPSAiY29uc3QgJHBhcmFtVHlw
ZSYgJHBhcmFtTmFtZSI7CisgICAgICAgICAgICAgICAgJHBhcmFtZXRlckluZGV4Kys7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAkZnVuY3Rpb25TaWcgLj0gIikiOworICAgICAgICAgICAg
aWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlB1cmVJbnRlcmZhY2UifSkgewor
ICAgICAgICAgICAgICAgIHB1c2goQGludGVyZmFjZUZ1bmN0aW9ucywgIiAgICB2aXJ0dWFsICIg
LiAkZnVuY3Rpb25TaWcgLiAiID0gMDtcbiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
bXkgJGZ1bmN0aW9uRGVjbGFyYXRpb24gPSAkZnVuY3Rpb25TaWc7CisgICAgICAgICAgICAkZnVu
Y3Rpb25EZWNsYXJhdGlvbiAuPSAiO1xuIjsKKworICAgICAgICAgICAgZm9yZWFjaCBteSAkdHlw
ZSAoa2V5cyAldHlwZXNUb0ZvcndhcmREZWNsYXJlKSB7CisgICAgICAgICAgICAgICAgIyBhZGQg
YW55IGZvcndhcmQgZGVjbGFyYXRpb25zIHRvIHRoZSBwdWJsaWMgaGVhZGVyIGlmIGEgZGVwcmVj
YXRlZCB2ZXJzaW9uIHdpbGwgYmUgZ2VuZXJhdGVkCisgICAgICAgICAgICAgICAgQWRkRm9yd2Fy
ZERlY2xhcmF0aW9uc0ZvclR5cGUoJHR5cGUsIDEpOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBwdXNoKEBoZWFkZXJGdW5jdGlvbnMsICIgICAgIik7CisgICAgICAgICAgICBwdXNoKEBo
ZWFkZXJGdW5jdGlvbnMsICRmdW5jdGlvbkRlY2xhcmF0aW9uKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChAaGVhZGVyRnVuY3Rpb25zID4gMCkgeworICAgICAgICAgICAgcHVzaChAaGVhZGVy
Q29udGVudCwgIlxuIikgaWYgQGhlYWRlckF0dHJpYnV0ZXMgPiAwOworICAgICAgICAgICAgcHVz
aChAaGVhZGVyQ29udGVudCwgQGhlYWRlckZ1bmN0aW9ucyk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiXG4iKTsKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCAiICAgICRpbXBsQ2xhc3NOYW1lV2l0aE5hbWVzcGFjZSogaW1wbCgpIGNvbnN0O1xuIik7CisK
KyAgICBpZiAoQHskZGF0YU5vZGUtPnBhcmVudHN9IGVxIDApIHsKKyAgICAgICAgcHVzaChAaGVh
ZGVyQ29udGVudCwgIlxucHJvdGVjdGVkOlxuIik7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRl
bnQsICIgICAgc3RydWN0ICR7Y2xhc3NOYW1lfVByaXZhdGU7XG4iKTsKKyAgICAgICAgcHVzaChA
aGVhZGVyQ29udGVudCwgIiAgICAke2NsYXNzTmFtZX1Qcml2YXRlKiBtX2Q7XG4iKTsKKyAgICB9
CisKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAifTtcblxuIik7CisKKyAgICAjIGZvciBQdXJl
SW50ZXJmYWNlIGNsYXNzZXMgYWxzbyBhZGQgdGhlIGludGVyZmFjZSB0aGF0IHRoZSBjbGllbnQg
Y29kZSBuZWVkcyB0bworICAgICMgaW1wbGVtZW50CisgICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57IlB1cmVJbnRlcmZhY2UifSkgeworICAgICAgICBwdXNoKEBoZWFkZXJD
b250ZW50LCAiY2xhc3MgV2ViVXNlciRpbnRlcmZhY2VOYW1lIHtcbiIpOworICAgICAgICBwdXNo
KEBoZWFkZXJDb250ZW50LCAicHVibGljOlxuIik7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRl
bnQsICIgICAgdmlydHVhbCB2b2lkIHJlZigpID0gMDtcbiIpOworICAgICAgICBwdXNoKEBoZWFk
ZXJDb250ZW50LCAiICAgIHZpcnR1YWwgdm9pZCBkZXJlZigpID0gMDtcblxuIik7CisgICAgICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsIEBpbnRlcmZhY2VGdW5jdGlvbnMpOworICAgICAgICBwdXNo
KEBoZWFkZXJDb250ZW50LCAiXG5wcm90ZWN0ZWQ6XG4iKTsKKyAgICAgICAgcHVzaChAaGVhZGVy
Q29udGVudCwgIiAgICB2aXJ0dWFsIH5XZWJVc2VyJGludGVyZmFjZU5hbWUoKSB7fVxuIik7Cisg
ICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJ9O1xuXG4iKTsKKyAgICB9CisKKyAgICBwdXNo
KEBoZWFkZXJDb250ZW50LCAiV2ViQ29yZTo6JGltcGxDbGFzc05hbWUqIHdlYkNvcmUoY29uc3Qg
JGNsYXNzTmFtZSYpO1xuIik7CisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiRjbGFzc05hbWUg
d2ViS2l0KFdlYkNvcmU6OiRpbXBsQ2xhc3NOYW1lKik7XG4iKTsKKyAgICBpZiAoJGRhdGFOb2Rl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiUHVyZUludGVyZmFjZSJ9KSB7CisgICAgICAgIHB1c2go
QGhlYWRlckNvbnRlbnQsICIkY2xhc3NOYW1lIHdlYktpdChXZWJVc2VyJGludGVyZmFjZU5hbWUq
KTtcbiIpOworICAgIH0KKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiXG4jZW5kaWZcbiIpOwor
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIjZW5kaWYgLy8gJHtjb25kaXRpb25hbFN0cmluZ31c
blxuIikgaWYgJGNvbmRpdGlvbmFsU3RyaW5nOworfQorCitzdWIgQWRkRWFybHlSZXR1cm5TdGF0
ZW1lbnQKK3sKKyAgICBteSAkcmV0dXJuVHlwZSA9IHNoaWZ0OworCisgICAgaWYgKCFkZWZpbmVk
KCRyZXR1cm5UeXBlKSBvciAkcmV0dXJuVHlwZSBlcSAidm9pZCIpIHsKKyAgICAgICAgJHJldHVy
blR5cGUgPSAiIjsKKyAgICB9IGVsc2lmICgkY29kZUdlbmVyYXRvci0+SXNQcmltaXRpdmVUeXBl
KCRyZXR1cm5UeXBlKSkgeworICAgICAgICAkcmV0dXJuVHlwZSA9ICIgMCI7CisgICAgfSBlbHNp
ZiAoJHJldHVyblR5cGUgZXEgImJvb2wiKSB7CisgICAgICAgICRyZXR1cm5UeXBlID0gIiBmYWxz
ZSI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgJHJldHVyblR5cGUgPSAiICRyZXR1cm5UeXBlKCki
OworICAgIH0KKworICAgICMgVE9ETzogV2UgY291bGQgc2V0IGV4Y2VwdGlvbnMgaGVyZSwgaWYg
d2Ugd2FudCB0aGF0CisgICAgbXkgJHN0YXRlbWVudCA9ICIgICAgaWYgKCFpbXBsKCkpXG4iOwor
ICAgICRzdGF0ZW1lbnQgLj0gICAiICAgICAgICByZXR1cm4kcmV0dXJuVHlwZTtcblxuIjsKKyAg
ICByZXR1cm4gJHN0YXRlbWVudDsKK30KKworc3ViIEFkZFJldHVyblN0YXRlbWVudAoreworICAg
IG15ICR0eXBlSW5mbyA9IHNoaWZ0OworICAgIG15ICRyZXR1cm5WYWx1ZSA9IHNoaWZ0OworCisg
ICAgIyBVc2VkIHRvIGludm9rZSBLVVJMcyAiY29uc3QgU3RyaW5nJiIgb3BlcmF0b3IKKyAgICBp
ZiAoJGNvZGVHZW5lcmF0b3ItPklzU3RyaW5nVHlwZSgkdHlwZUluZm8tPnNpZ25hdHVyZS0+dHlw
ZSkpIHsKKyAgICAgICAgcmV0dXJuICIgICAgcmV0dXJuIChjb25zdCBXZWJDb3JlOjpTdHJpbmcm
KSAkcmV0dXJuVmFsdWU7XG4iOworICAgIH0KKworICAgIHJldHVybiAiICAgIHJldHVybiAkcmV0
dXJuVmFsdWU7XG4iOworfQorCitzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgoreworICAgIG15
ICRvYmplY3QgPSBzaGlmdDsKKyAgICBteSAkZGF0YU5vZGUgPSBzaGlmdDsKKworICAgIG15IEBh
bmNlc3RvckludGVyZmFjZU5hbWVzID0gKCk7CisKKyAgICBpZiAoQHskZGF0YU5vZGUtPnBhcmVu
dHN9ID4gMSkgeworICAgICAgICAkY29kZUdlbmVyYXRvci0+QWRkTWV0aG9kc0NvbnN0YW50c0Fu
ZEF0dHJpYnV0ZXNGcm9tUGFyZW50Q2xhc3NlcygkZGF0YU5vZGUsIFxAYW5jZXN0b3JJbnRlcmZh
Y2VOYW1lcyk7CisgICAgfQorCisgICAgbXkgJGludGVyZmFjZU5hbWUgPSAkZGF0YU5vZGUtPm5h
bWU7CisgICAgbXkgJGNsYXNzTmFtZSA9IEdldENsYXNzTmFtZSgkaW50ZXJmYWNlTmFtZSk7Cisg
ICAgbXkgJGltcGxDbGFzc05hbWUgPSBHZXRJbXBsQ2xhc3NOYW1lKCRpbnRlcmZhY2VOYW1lKTsK
KyAgICBteSAkcGFyZW50SW1wbENsYXNzTmFtZSA9IEdldFBhcmVudEltcGxDbGFzc05hbWUoJGRh
dGFOb2RlKTsKKyAgICBteSAkaW1wbENsYXNzTmFtZVdpdGhOYW1lc3BhY2UgPSAiV2ViQ29yZTo6
IiAuICRpbXBsQ2xhc3NOYW1lOworICAgIG15ICRiYXNlQ2xhc3MgPSAiV2ViRE9NJHBhcmVudElt
cGxDbGFzc05hbWUiOworICAgIG15ICRjb25kaXRpb25hbCA9ICRkYXRhTm9kZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57IkNvbmRpdGlvbmFsIn07CisKKyAgICBteSAkbnVtQXR0cmlidXRlcyA9IEB7
JGRhdGFOb2RlLT5hdHRyaWJ1dGVzfTsKKyAgICBteSAkbnVtRnVuY3Rpb25zID0gQHskZGF0YU5v
ZGUtPmZ1bmN0aW9uc307CisKKyAgICAjIC0gQWRkIGRlZmF1bHQgaGVhZGVyIHRlbXBsYXRlLgor
ICAgIEBpbXBsQ29udGVudEhlYWRlciA9IHNwbGl0KCJcciIsICRpbXBsZW1lbnRhdGlvbkxpY2Vu
c2VUZW1wbGF0ZSk7CisKKyAgICAjIC0gSU5DTFVERVMgLQorICAgIHB1c2goQGltcGxDb250ZW50
SGVhZGVyLCAiXG4jaW5jbHVkZSBcImNvbmZpZy5oXCJcbiIpOworICAgIG15ICRjb25kaXRpb25h
bFN0cmluZyA9IEdlbmVyYXRlQ29uZGl0aW9uYWxTdHJpbmcoJGRhdGFOb2RlKTsKKyAgICBwdXNo
KEBpbXBsQ29udGVudEhlYWRlciwgIlxuI2lmICR7Y29uZGl0aW9uYWxTdHJpbmd9XG5cbiIpIGlm
ICRjb25kaXRpb25hbFN0cmluZzsKKyAgICBwdXNoKEBpbXBsQ29udGVudEhlYWRlciwgIiNpbmNs
dWRlIFwiJGNsYXNzTmFtZS5oXCJcblxuIik7CisKKyAgICAkaW1wbEluY2x1ZGVzeyJXZWJFeGNl
cHRpb25IYW5kbGVycy5oIn0gPSAxOworICAgICRpbXBsSW5jbHVkZXN7IlRocmVhZENoZWNrLmgi
fSA9IDE7CisgICAgJGltcGxJbmNsdWRlc3siJGltcGxDbGFzc05hbWUuaCJ9ID0gMTsKKyAgICBA
aW1wbENvbnRlbnQgPSAoKTsKKworICAgIHB1c2goQGltcGxDb250ZW50LCAiI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD5cbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiI2luY2x1ZGUgPHd0Zi9H
ZXRQdHIuaD5cblxuIik7CisKKyAgICAjIFByaXZhdGUgZGF0YXN0cnVjdHVyZSwgZW5jYXBzdWxh
dGluZyBXZWJDb3JlIHR5cGVzCisgICAgaWYgKEB7JGRhdGFOb2RlLT5wYXJlbnRzfSBlcSAwKSB7
CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAic3RydWN0ICR7Y2xhc3NOYW1lfTo6JHtjbGFz
c05hbWV9UHJpdmF0ZSB7XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJHtj
bGFzc05hbWV9UHJpdmF0ZSgkaW1wbENsYXNzTmFtZVdpdGhOYW1lc3BhY2UqIF9pbXBsID0gMClc
biIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgOiBpbXBsKF9pbXBsKVxu
Iik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHtcbiIpOworICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICB9XG5cbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICBSZWZQdHI8JGltcGxDbGFzc05hbWVXaXRoTmFtZXNwYWNlPiBpbXBsO1xuIik7CisgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAifTtcblxuIik7CisgICAgfQorCisgICAgIyBDb25zdHJ1
Y3RvcgorICAgIHB1c2goQGltcGxDb250ZW50LCAiJHtjbGFzc05hbWV9OjokY2xhc3NOYW1lKClc
biIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIDogJHtiYXNlQ2xhc3N9KClcbiIpOwor
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICwgbV9kKDApXG4iKSBpZiAoQHskZGF0YU5vZGUt
PnBhcmVudHN9IGVxIDApOworICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CisgICAgcHVz
aChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOworCisgICAgcHVzaChAaW1wbENvbnRlbnQsICIke2Ns
YXNzTmFtZX06OiRjbGFzc05hbWUoJGltcGxDbGFzc05hbWVXaXRoTmFtZXNwYWNlKiBpbXBsKVxu
Iik7CisgICAgaWYgKEB7JGRhdGFOb2RlLT5wYXJlbnRzfSBlcSAwKSB7CisgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgIDogJHtiYXNlQ2xhc3N9KClcbiIpOworICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICAsIG1fZChuZXcgJHtjbGFzc05hbWV9UHJpdmF0ZShpbXBsKSlcbiIp
OworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOworICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIn1cblxuIik7CisKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIke2NsYXNz
TmFtZX06OiR7Y2xhc3NOYW1lfShjb25zdCAke2NsYXNzTmFtZX0mIGNvcHkpXG4iKTsKKyAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgOiAke2Jhc2VDbGFzc30oKVxuIik7CisgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIG1fZCA9IGNvcHkuaW1wbCgpID8gbmV3ICR7Y2xhc3NOYW1lfVByaXZhdGUoY29weS5pbXBs
KCkpIDogMDtcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CisKKyAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIkaW1wbENsYXNzTmFtZVdpdGhOYW1lc3BhY2UqICR7
Y2xhc3NOYW1lfTo6aW1wbCgpIGNvbnN0XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICJ7XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIG1fZCA/IG1f
ZC0+aW1wbC5nZXQoKSA6IDA7XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5c
biIpOworCisgICAgICAgICMgRGVzdHJ1Y3RvcgorICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiR7Y2xhc3NOYW1lfTo6fiRjbGFzc05hbWUoKVxuIik7CisgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAie1xuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGRlbGV0ZSBtX2Q7
XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgbV9kID0gMDtcbiIpOworICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgOiAke2Jhc2VDbGFzc30oaW1wbClcbiIpOworICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
In1cblxuIik7CisKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIkaW1wbENsYXNzTmFtZVdp
dGhOYW1lc3BhY2UqICR7Y2xhc3NOYW1lfTo6aW1wbCgpIGNvbnN0XG4iKTsKKyAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICJ7XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
cmV0dXJuIHN0YXRpY19jYXN0PCRpbXBsQ2xhc3NOYW1lV2l0aE5hbWVzcGFjZSo+KCR7YmFzZUNs
YXNzfTo6aW1wbCgpKTtcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7
CisgICAgfQorCisgICAgIyBTVEFSVCBpbXBsZW1lbnRhdGlvbgorICAgICVhdHRyaWJ1dGVOYW1l
cyA9ICgpOworCisgICAgIyAtIEF0dHJpYnV0ZXMKKyAgICBpZiAoJG51bUF0dHJpYnV0ZXMgPiAw
KSB7CisgICAgICAgIGZvcmVhY2ggbXkgJGF0dHJpYnV0ZSAoQHskZGF0YU5vZGUtPmF0dHJpYnV0
ZXN9KSB7CisgICAgICAgICAgICBuZXh0IGlmIFNob3VsZFNraXBUeXBlSW5JbXBsZW1lbnRhdGlv
bigkYXR0cmlidXRlKTsKKyAgICAgICAgICAgIEFkZEluY2x1ZGVzRm9yVHlwZSgkYXR0cmlidXRl
LT5zaWduYXR1cmUtPnR5cGUpOworCisgICAgICAgICAgICBteSAkaWRsVHlwZSA9ICRjb2RlR2Vu
ZXJhdG9yLT5TdHJpcE1vZHVsZSgkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGUpOworCisgICAg
ICAgICAgICBteSAkYXR0cmlidXRlTmFtZSA9ICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+bmFtZTsK
KyAgICAgICAgICAgIG15ICRhdHRyaWJ1dGVUeXBlID0gR2V0Q1BQVHlwZSgkYXR0cmlidXRlLT5z
aWduYXR1cmUtPnR5cGUpOworICAgICAgICAgICAgbXkgJGF0dHJpYnV0ZUlzUmVhZG9ubHkgPSAo
JGF0dHJpYnV0ZS0+dHlwZSA9fiAvXnJlYWRvbmx5Lyk7CisgICAgICAgICAgICBteSAkYXR0cmli
dXRlQ2xhc3NOYW1lID0gR2V0Q2xhc3NOYW1lKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+dHlwZSk7
CisKKyAgICAgICAgICAgIG15ICRhdHRyaWJ1dGVJbnRlcmZhY2VOYW1lID0gJGF0dHJpYnV0ZU5h
bWU7CisgICAgICAgICAgICBpZiAoJGF0dHJpYnV0ZU5hbWUgZXEgIm93bmVyRG9jdW1lbnQiKSB7
CisgICAgICAgICAgICAgICAgIyBGSVhNRTogZm9yIG5vdyBzcGVjaWFsIGNhc2UgYXR0cmlidXRl
IG93bmVyRG9jdW1lbnQgdG8gY2FsbCBkb2N1bWVudCwgdGhpcyBpcyBpbmNvcnJlY3QKKyAgICAg
ICAgICAgICAgICAjIGxlZ2FjeSBiZWhhdmlvci4gKHNlZSBodHRwOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMDg4OSkKKyAgICAgICAgICAgICAgICAkYXR0cmlidXRlTmFtZSA9
ICJkb2N1bWVudCI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAkYXR0cmlidXRlTmFtZXN7
JGF0dHJpYnV0ZUludGVyZmFjZU5hbWV9ID0gMTsKKworICAgICAgICAgICAgIyAtIEdFVFRFUgor
ICAgICAgICAgICAgbXkgJGdldHRlclNpZyA9ICIkYXR0cmlidXRlVHlwZSAkY2xhc3NOYW1lXDpc
OiRhdHRyaWJ1dGVJbnRlcmZhY2VOYW1lKCkgY29uc3RcbiI7CisgICAgICAgICAgICBteSAkaGFz
R2V0dGVyRXhjZXB0aW9uID0gQHskYXR0cmlidXRlLT5nZXR0ZXJFeGNlcHRpb25zfTsKKyAgICAg
ICAgICAgIG15ICRnZXR0ZXJDb250ZW50SGVhZDsKKyAgICAgICAgICAgIG15ICRyZWZsZWN0ID0g
JGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiUmVmbGVjdCJ9Owor
ICAgICAgICAgICAgbXkgJHJlZmxlY3RVUkwgPSAkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJSZWZsZWN0VVJMIn07CisgICAgICAgICAgICBpZiAoJHJlZmxlY3Qg
fHwgJHJlZmxlY3RVUkwpIHsKKyAgICAgICAgICAgICAgICBteSAkY29udGVudEF0dHJpYnV0ZU5h
bWUgPSAoKCRyZWZsZWN0IHx8ICRyZWZsZWN0VVJMKSBlcSAiMSIpID8gJGF0dHJpYnV0ZU5hbWUg
OiAoJHJlZmxlY3QgfHwgJHJlZmxlY3RVUkwpOworICAgICAgICAgICAgICAgIG15ICRuYW1lc3Bh
Y2UgPSAkY29kZUdlbmVyYXRvci0+TmFtZXNwYWNlRm9yQXR0cmlidXRlTmFtZSgkaW50ZXJmYWNl
TmFtZSwgJGNvbnRlbnRBdHRyaWJ1dGVOYW1lKTsKKyAgICAgICAgICAgICAgICAkaW1wbEluY2x1
ZGVzeyIke25hbWVzcGFjZX0uaCJ9ID0gMTsKKyAgICAgICAgICAgICAgICBteSAkZ2V0QXR0cmli
dXRlRnVuY3Rpb25OYW1lID0gJHJlZmxlY3RVUkwgPyAiZ2V0VVJMQXR0cmlidXRlIiA6ICJnZXRB
dHRyaWJ1dGUiOworICAgICAgICAgICAgICAgICRnZXR0ZXJDb250ZW50SGVhZCA9ICJpbXBsKCkt
PiR7Z2V0QXR0cmlidXRlRnVuY3Rpb25OYW1lfShXZWJDb3JlOjoke25hbWVzcGFjZX06OiR7Y29u
dGVudEF0dHJpYnV0ZU5hbWV9QXR0ciI7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgICRnZXR0ZXJDb250ZW50SGVhZCA9ICJpbXBsKCktPiIgLiAkY29kZUdlbmVyYXRvci0+
V0tfbGNmaXJzdCgkYXR0cmlidXRlTmFtZSkgLiAiKCI7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBteSAkZ2V0dGVyQ29udGVudFRhaWwgPSAiKSI7CisKKyAgICAgICAgICAgICMgU3BlY2lh
bCBjYXNlcworICAgICAgICAgICAgbXkgQGN1c3RvbUdldHRlckNvbnRlbnQgPSAoKTsgCisgICAg
ICAgICAgICBpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
Q29udmVydFRvU3RyaW5nIn0pIHsKKyAgICAgICAgICAgICAgICAkZ2V0dGVyQ29udGVudEhlYWQg
PSAiV2ViQ29yZTo6U3RyaW5nOjpudW1iZXIoIiAuICRnZXR0ZXJDb250ZW50SGVhZDsKKyAgICAg
ICAgICAgICAgICAkZ2V0dGVyQ29udGVudFRhaWwgLj0gIikiOworICAgICAgICAgICAgfSBlbHNp
ZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29udmVydEZy
b21TdHJpbmcifSkgeworICAgICAgICAgICAgICAgICRnZXR0ZXJDb250ZW50VGFpbCAuPSAiLnRv
SW50KCkiOworICAgICAgICAgICAgfSBlbHNpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT50eXBl
IGVxICJTZXJpYWxpemVkU2NyaXB0VmFsdWUiKSB7CisgICAgICAgICAgICAgICAgJGdldHRlckNv
bnRlbnRIZWFkID0gIiRnZXR0ZXJDb250ZW50SGVhZCI7CisgICAgICAgICAgICAgICAgJGdldHRl
ckNvbnRlbnRUYWlsIC49ICItPnRvU3RyaW5nKCkiOyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgIH0gZWxzaWYgKENvbnZlcnNpb25OZWVkZWQoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT50eXBl
KSkgeworICAgICAgICAgICAgICAgICRnZXR0ZXJDb250ZW50SGVhZCA9ICJ3ZWJLaXQoV1RGOjpn
ZXRQdHIoJGdldHRlckNvbnRlbnRIZWFkIjsKKyAgICAgICAgICAgICAgICAkZ2V0dGVyQ29udGVu
dFRhaWwgLj0gIikpIjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbXkgJGdldHRlckNv
bnRlbnQ7CisgICAgICAgICAgICBpZiAoJGhhc0dldHRlckV4Y2VwdGlvbikgeworICAgICAgICAg
ICAgICAgICRnZXR0ZXJDb250ZW50ID0gJGdldHRlckNvbnRlbnRIZWFkIC4gImVjIiAuICRnZXR0
ZXJDb250ZW50VGFpbDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgJGdl
dHRlckNvbnRlbnQgPSAkZ2V0dGVyQ29udGVudEhlYWQgLiAkZ2V0dGVyQ29udGVudFRhaWw7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG15ICRhdHRyaWJ1dGVDb25kaXRpb25hbFN0cmlu
ZyA9IEdlbmVyYXRlQ29uZGl0aW9uYWxTdHJpbmcoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlKTsKKyAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiI2lmICR7YXR0cmlidXRlQ29uZGl0aW9uYWxT
dHJpbmd9XG4iKSBpZiAkYXR0cmlidXRlQ29uZGl0aW9uYWxTdHJpbmc7CisKKyAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAkZ2V0dGVyU2lnKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAie1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgQWRkRWFybHlS
ZXR1cm5TdGF0ZW1lbnQoJGF0dHJpYnV0ZVR5cGUpKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCBAY3VzdG9tR2V0dGVyQ29udGVudCk7CisgICAgICAgICAgICBpZiAoJGhhc0dldHRl
ckV4Y2VwdGlvbikgeworICAgICAgICAgICAgICAgICMgRGlmZmVyZW50aWF0ZWQgYmV0d2VlbiB3
aGVuIHRoZSByZXR1cm4gdHlwZSBpcyBhIHBvaW50ZXIgYW5kCisgICAgICAgICAgICAgICAgIyBu
b3QgZm9yIHdoaXRlIHNwYWNlIGlzc3VlIChpZS4gRm9vICpyZXN1bHQgdnMuIGludCByZXN1bHQp
LgorICAgICAgICAgICAgICAgIGlmICgkYXR0cmlidXRlVHlwZSA9fiAvXCokLykgeworICAgICAg
ICAgICAgICAgICAgICAkZ2V0dGVyQ29udGVudCA9ICRhdHRyaWJ1dGVUeXBlIC4gInJlc3VsdCA9
ICIgLiAkZ2V0dGVyQ29udGVudDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICAkZ2V0dGVyQ29udGVudCA9ICRhdHRyaWJ1dGVUeXBlIC4gIiByZXN1bHQgPSAi
IC4gJGdldHRlckNvbnRlbnQ7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgJGV4Y2VwdGlvbkluaXRcbiIpOworICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICRnZXR0ZXJDb250ZW50O1xuIik7CisgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJGV4Y2VwdGlvblJhaXNlT25FcnJvclxu
Iik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsIEFkZFJldHVyblN0YXRlbWVu
dCgkYXR0cmlidXRlLCAicmVzdWx0IikpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgQWRkUmV0dXJuU3RhdGVtZW50KCRhdHRyaWJ1dGUs
ICRnZXR0ZXJDb250ZW50KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIn1cblxuIik7CisKKyAgICAgICAgICAgICMgLSBTRVRURVIKKyAgICAgICAgICAg
IGlmICghJGF0dHJpYnV0ZUlzUmVhZG9ubHkgYW5kICEkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4
dGVuZGVkQXR0cmlidXRlcy0+eyJSZXBsYWNlYWJsZSJ9KSB7CisgICAgICAgICAgICAgICAgIyBF
eGNlcHRpb24gaGFuZGxpbmcKKyAgICAgICAgICAgICAgICBteSAkaGFzU2V0dGVyRXhjZXB0aW9u
ID0gQHskYXR0cmlidXRlLT5zZXR0ZXJFeGNlcHRpb25zfTsKKworICAgICAgICAgICAgICAgIG15
ICRjb3JlU2V0dGVyTmFtZSA9ICJzZXQiIC4gJGNvZGVHZW5lcmF0b3ItPldLX3VjZmlyc3QoJGF0
dHJpYnV0ZU5hbWUpOworICAgICAgICAgICAgICAgIG15ICRzZXR0ZXJOYW1lID0gInNldCIgLiB1
Y2ZpcnN0KCRhdHRyaWJ1dGVJbnRlcmZhY2VOYW1lKTsKKyAgICAgICAgICAgICAgICBteSAkYXJn
TmFtZSA9ICJuZXciIC4gdWNmaXJzdCgkYXR0cmlidXRlSW50ZXJmYWNlTmFtZSk7CisgICAgICAg
ICAgICAgICAgbXkgJGFyZyA9IEdldENQUFR5cGVHZXR0ZXIoJGFyZ05hbWUsICRpZGxUeXBlKTsK
KworICAgICAgICAgICAgICAgICMgVGhlIGRlZmluaXRpb24gb2YgQ29udmVydEZyb21TdHJpbmcg
YW5kIENvbnZlcnRUb1N0cmluZyBpcyBmbGlwcGVkIGZvciB0aGUgc2V0dGVyCisgICAgICAgICAg
ICAgICAgaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNv
bnZlcnRGcm9tU3RyaW5nIn0pIHsKKyAgICAgICAgICAgICAgICAgICAgJGFyZyA9ICJXZWJDb3Jl
OjpTdHJpbmc6Om51bWJlcigkYXJnKSI7CisgICAgICAgICAgICAgICAgfSBlbHNpZiAoJGF0dHJp
YnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29udmVydFRvU3RyaW5nIn0p
IHsKKyAgICAgICAgICAgICAgICAgICAgJGFyZyA9ICJXZWJDb3JlOjpTdHJpbmcoJGFyZykudG9J
bnQoKSI7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICJ2b2lkICRjbGFzc05hbWVcOlw6JHNldHRlck5hbWUoY29uc3QgJGF0dHJpYnV0ZVR5
cGUmICRhcmdOYW1lKVxuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7
XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgQWRkRWFybHlSZXR1cm5T
dGF0ZW1lbnQoKSk7CisKKyAgICAgICAgICAgICAgICBteSAkcmVmbGVjdCA9ICRhdHRyaWJ1dGUt
PnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlJlZmxlY3QifTsKKyAgICAgICAgICAg
ICAgICBteSAkcmVmbGVjdFVSTCA9ICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57IlJlZmxlY3RVUkwifTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICAkZXhjZXB0aW9uSW5pdFxuIikgaWYgJGhhc1NldHRlckV4Y2VwdGlvbjsKKyAgICAg
ICAgICAgICAgICBteSAkZWMgPSAkaGFzU2V0dGVyRXhjZXB0aW9uID8gIiwgZWMiIDogIiI7Cisg
ICAgICAgICAgICAgICAgaWYgKCRyZWZsZWN0IHx8ICRyZWZsZWN0VVJMKSB7CisgICAgICAgICAg
ICAgICAgICAgIG15ICRjb250ZW50QXR0cmlidXRlTmFtZSA9ICgoJHJlZmxlY3QgfHwgJHJlZmxl
Y3RVUkwpIGVxICIxIikgPyAkYXR0cmlidXRlTmFtZSA6ICgkcmVmbGVjdCB8fCAkcmVmbGVjdFVS
TCk7CisgICAgICAgICAgICAgICAgICAgIG15ICRuYW1lc3BhY2UgPSAkY29kZUdlbmVyYXRvci0+
TmFtZXNwYWNlRm9yQXR0cmlidXRlTmFtZSgkaW50ZXJmYWNlTmFtZSwgJGNvbnRlbnRBdHRyaWJ1
dGVOYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siJHtuYW1lc3BhY2V9
LmgifSA9IDE7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlt
cGwoKS0+c2V0QXR0cmlidXRlKFdlYkNvcmU6OiR7bmFtZXNwYWNlfTo6JHtjb250ZW50QXR0cmli
dXRlTmFtZX1BdHRyLCAkYXJnJGVjKTtcbiIpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGltcGwoKS0+JGNvcmVT
ZXR0ZXJOYW1lKCRhcmckZWMpO1xuIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICRleGNlcHRpb25SYWlzZU9uRXJyb3JcbiIpIGlm
ICRoYXNTZXR0ZXJFeGNlcHRpb247CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICJ9XG5cbiIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiNlbmRpZlxuIikgaWYgJGF0dHJpYnV0ZUNvbmRpdGlvbmFsU3RyaW5nOworICAgICAgICB9
CisgICAgfQorCisgICAgIyAtIEZ1bmN0aW9ucworICAgIGlmICgkbnVtRnVuY3Rpb25zID4gMCkg
eworICAgICAgICBmb3JlYWNoIG15ICRmdW5jdGlvbiAoQHskZGF0YU5vZGUtPmZ1bmN0aW9uc30p
IHsKKyAgICAgICAgICAgICMgVHJlYXQgUHVyZUludGVyZmFjZSBhcyBDdXN0b20gYXMgd2VsbCwg
c2luY2UgdGhlIFdlYkNvcmUgdmVyc2lvbnMgd2lsbCB0YWtlIGEgc2NyaXB0IGNvbnRleHQgYXMg
d2VsbAorICAgICAgICAgICAgbmV4dCBpZiBTaG91bGRTa2lwVHlwZUluSW1wbGVtZW50YXRpb24o
JGZ1bmN0aW9uKSB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJQdXJlSW50ZXJm
YWNlIn07CisgICAgICAgICAgICBBZGRJbmNsdWRlc0ZvclR5cGUoJGZ1bmN0aW9uLT5zaWduYXR1
cmUtPnR5cGUpOworCisgICAgICAgICAgICBteSAkZnVuY3Rpb25OYW1lID0gJGZ1bmN0aW9uLT5z
aWduYXR1cmUtPm5hbWU7CisgICAgICAgICAgICBteSAkcmV0dXJuVHlwZSA9IEdldENQUFR5cGUo
JGZ1bmN0aW9uLT5zaWduYXR1cmUtPnR5cGUpOworICAgICAgICAgICAgbXkgJGhhc1BhcmFtZXRl
cnMgPSBAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc307CisgICAgICAgICAgICBteSAkcmFpc2VzRXhj
ZXB0aW9ucyA9IEB7JGZ1bmN0aW9uLT5yYWlzZXNFeGNlcHRpb25zfTsKKworICAgICAgICAgICAg
bXkgQHBhcmFtZXRlck5hbWVzID0gKCk7CisgICAgICAgICAgICBteSBAbmVlZHNBc3NlcnQgPSAo
KTsKKyAgICAgICAgICAgIG15ICVuZWVkc0N1c3RvbSA9ICgpOworCisgICAgICAgICAgICBteSAk
cGFyYW1ldGVySW5kZXggPSAwOworICAgICAgICAgICAgbXkgJGZ1bmN0aW9uU2lnID0gIiRyZXR1
cm5UeXBlICRjbGFzc05hbWVcOlw6JGZ1bmN0aW9uTmFtZSgiOworICAgICAgICAgICAgZm9yZWFj
aCBteSAkcGFyYW0gKEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfSkgeworICAgICAgICAgICAgICAg
IG15ICRwYXJhbU5hbWUgPSAkcGFyYW0tPm5hbWU7CisgICAgICAgICAgICAgICAgbXkgJHBhcmFt
VHlwZSA9IEdldENQUFR5cGUoJHBhcmFtLT50eXBlKTsKKworICAgICAgICAgICAgICAgICMgbWFr
ZSBhIG5ldyBwYXJhbWV0ZXIgbmFtZSBpZiB0aGUgb3JpZ2luYWwgY29uZmxpY3RzIHdpdGggYSBw
cm9wZXJ0eSBuYW1lCisgICAgICAgICAgICAgICAgJHBhcmFtTmFtZSA9ICJpbiIgLiB1Y2ZpcnN0
KCRwYXJhbU5hbWUpIGlmICRhdHRyaWJ1dGVOYW1lc3skcGFyYW1OYW1lfTsKKworICAgICAgICAg
ICAgICAgIEFkZEluY2x1ZGVzRm9yVHlwZSgkcGFyYW0tPnR5cGUpOworCisgICAgICAgICAgICAg
ICAgbXkgJGlkbFR5cGUgPSAkY29kZUdlbmVyYXRvci0+U3RyaXBNb2R1bGUoJHBhcmFtLT50eXBl
KTsKKyAgICAgICAgICAgICAgICBteSAkaW1wbEdldHRlciA9IEdldENQUFR5cGVHZXR0ZXIoJHBh
cmFtTmFtZSwgJGlkbFR5cGUpOworCisgICAgICAgICAgICAgICAgcHVzaChAcGFyYW1ldGVyTmFt
ZXMsICRpbXBsR2V0dGVyKTsKKyAgICAgICAgICAgICAgICAkbmVlZHNDdXN0b217Ik5vZGVUb1Jl
dHVybiJ9ID0gJHBhcmFtTmFtZSBpZiAkcGFyYW0tPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJSZXR1
cm4ifTsKKworICAgICAgICAgICAgICAgIHVubGVzcyAoJGNvZGVHZW5lcmF0b3ItPklzUHJpbWl0
aXZlVHlwZSgkaWRsVHlwZSkgb3IgJGNvZGVHZW5lcmF0b3ItPklzU3RyaW5nVHlwZSgkaWRsVHlw
ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAbmVlZHNBc3NlcnQsICIgICAgQVNTRVJU
KCRwYXJhbU5hbWUpO1xuIik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
JGZ1bmN0aW9uU2lnIC49ICIsICIgaWYgJHBhcmFtZXRlckluZGV4ID49IDE7CisgICAgICAgICAg
ICAgICAgJGZ1bmN0aW9uU2lnIC49ICJjb25zdCAkcGFyYW1UeXBlJiAkcGFyYW1OYW1lIjsKKyAg
ICAgICAgICAgICAgICAkcGFyYW1ldGVySW5kZXgrKzsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgJGZ1bmN0aW9uU2lnIC49ICIpIjsKKworICAgICAgICAgICAgbXkgQGZ1bmN0aW9uQ29u
dGVudCA9ICgpOworICAgICAgICAgICAgcHVzaChAcGFyYW1ldGVyTmFtZXMsICJlYyIpIGlmICRy
YWlzZXNFeGNlcHRpb25zOworICAgICAgICAgICAgbXkgJGNvbnRlbnQgPSAiaW1wbCgpLT4iIC4g
JGNvZGVHZW5lcmF0b3ItPldLX2xjZmlyc3QoJGZ1bmN0aW9uTmFtZSkgLiAiKCIgLiBqb2luKCIs
ICIsIEBwYXJhbWV0ZXJOYW1lcykgLiAiKSI7IAorCisgICAgICAgICAgICBpZiAoJHJldHVyblR5
cGUgZXEgInZvaWQiKSB7CisgICAgICAgICAgICAgICAgIyBTcGVjaWFsIGNhc2UgJ3ZvaWQnIHJl
dHVybiB0eXBlLgorICAgICAgICAgICAgICAgIGlmICgkcmFpc2VzRXhjZXB0aW9ucykgeworICAg
ICAgICAgICAgICAgICAgICBwdXNoKEBmdW5jdGlvbkNvbnRlbnQsICIgICAgJGV4Y2VwdGlvbklu
aXRcbiIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEBmdW5jdGlvbkNvbnRlbnQsICIgICAg
JGNvbnRlbnQ7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAZnVuY3Rpb25Db250ZW50
LCAiICAgICRleGNlcHRpb25SYWlzZU9uRXJyb3JcbiIpOworICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGZ1bmN0aW9uQ29udGVudCwgIiAgICAkY29u
dGVudDtcbiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzaWYgKGRlZmlu
ZWQgJG5lZWRzQ3VzdG9teyJOb2RlVG9SZXR1cm4ifSkgeworICAgICAgICAgICAgICAgICMgVE9E
TzogVGhpcyBpcyBpbXBvcnRhbnQgdG8gZW5hYmxlLCBvbmNlIHdlIGNhcmUgYWJvdXQgY3VzdG9t
IGNvZGUhCisKKyAgICAgICAgICAgICAgICAjIFNwZWNpYWwgY2FzZSB0aGUgaW5zZXJ0QmVmb3Jl
LCByZXBsYWNlQ2hpbGQsIHJlbW92ZUNoaWxkIAorICAgICAgICAgICAgICAgICMgYW5kIGFwcGVu
ZENoaWxkIGZ1bmN0aW9ucyBmcm9tIERPTU5vZGUgCisgICAgICAgICAgICAgICAgbXkgJHRvUmV0
dXJuID0gJG5lZWRzQ3VzdG9teyJOb2RlVG9SZXR1cm4ifTsKKyAgICAgICAgICAgICAgICBpZiAo
JHJhaXNlc0V4Y2VwdGlvbnMpIHsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAZnVuY3Rpb25D
b250ZW50LCAiICAgICRleGNlcHRpb25Jbml0XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVz
aChAZnVuY3Rpb25Db250ZW50LCAiICAgIGlmICgkY29udGVudClcbiIpOworICAgICAgICAgICAg
ICAgICAgICBwdXNoKEBmdW5jdGlvbkNvbnRlbnQsICIgICAgICAgIHJldHVybiAkdG9SZXR1cm47
XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAZnVuY3Rpb25Db250ZW50LCAiICAgICRl
eGNlcHRpb25SYWlzZU9uRXJyb3JcbiIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEBmdW5j
dGlvbkNvbnRlbnQsICIgICAgcmV0dXJuICRjbGFzc05hbWUoKTtcbiIpOworICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGZ1bmN0aW9uQ29udGVudCwg
IiAgICBpZiAoJGNvbnRlbnQpXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAZnVuY3Rp
b25Db250ZW50LCAiICAgICAgICByZXR1cm4gJHRvUmV0dXJuO1xuIik7CisgICAgICAgICAgICAg
ICAgICAgIHB1c2goQGZ1bmN0aW9uQ29udGVudCwgIiAgICByZXR1cm4gTlVMTDtcbiIpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYg
KENvbnZlcnNpb25OZWVkZWQoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPnR5cGUpKSB7CisgICAgICAg
ICAgICAgICAgICAgICRjb250ZW50ID0gIndlYktpdChXVEY6OmdldFB0cigkY29udGVudCkpIjsK
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoJHJhaXNlc0V4Y2VwdGlv
bnMpIHsKKyAgICAgICAgICAgICAgICAgICAgIyBEaWZmZXJlbnRpYXRlZCBiZXR3ZWVuIHdoZW4g
dGhlIHJldHVybiB0eXBlIGlzIGEgcG9pbnRlciBhbmQKKyAgICAgICAgICAgICAgICAgICAgIyBu
b3QgZm9yIHdoaXRlIHNwYWNlIGlzc3VlIChpZS4gRm9vICpyZXN1bHQgdnMuIGludCByZXN1bHQp
LgorICAgICAgICAgICAgICAgICAgICBpZiAoJHJldHVyblR5cGUgPX4gL1wqJC8pIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICRjb250ZW50ID0gJHJldHVyblR5cGUgLiAicmVzdWx0ID0gIiAu
ICRjb250ZW50OworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICAgICAgJGNvbnRlbnQgPSAkcmV0dXJuVHlwZSAuICIgcmVzdWx0ID0gIiAuICRjb250ZW50
OworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAZnVu
Y3Rpb25Db250ZW50LCAiICAgICRleGNlcHRpb25Jbml0XG4iKTsKKyAgICAgICAgICAgICAgICAg
ICAgcHVzaChAZnVuY3Rpb25Db250ZW50LCAiICAgICRjb250ZW50O1xuIik7CisgICAgICAgICAg
ICAgICAgICAgIHB1c2goQGZ1bmN0aW9uQ29udGVudCwgIiAgICAkZXhjZXB0aW9uUmFpc2VPbkVy
cm9yXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAZnVuY3Rpb25Db250ZW50LCAiICAg
IHJldHVybiByZXN1bHQ7XG4iKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICBwdXNoKEBmdW5jdGlvbkNvbnRlbnQsICIgICAgcmV0dXJuICRjb250ZW50O1xu
Iik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiRmdW5jdGlvblNpZ1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIntcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsIEFkZEVhcmx5
UmV0dXJuU3RhdGVtZW50KCRyZXR1cm5UeXBlKSk7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgQGZ1bmN0aW9uQ29udGVudCk7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
In1cblxuIik7CisKKyAgICAgICAgICAgICMgQ2xlYXIgdGhlIGhhc2gKKyAgICAgICAgICAgICVu
ZWVkc0N1c3RvbSA9ICgpOworICAgICAgICB9CisgICAgfQorCisgICAgIyBFTkQgaW1wbGVtZW50
YXRpb24KKworICAgICMgR2VuZXJhdGUgaW50ZXJuYWwgaW50ZXJmYWNlcworICAgIHB1c2goQGlt
cGxDb250ZW50LCAiV2ViQ29yZTo6JGltcGxDbGFzc05hbWUqIHdlYkNvcmUoY29uc3QgJGNsYXNz
TmFtZSYgd3JhcHBlcilcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CisgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIHdyYXBwZXIuaW1wbCgpO1xuIik7CisgICAg
cHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOworCisgICAgcHVzaChAaW1wbENvbnRlbnQsICIk
Y2xhc3NOYW1lIHdlYktpdChXZWJDb3JlOjokaW1wbENsYXNzTmFtZSogdmFsdWUpXG4iKTsKKyAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
ICRhc3NlcnRNYWluVGhyZWFkO1xuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0
dXJuICRjbGFzc05hbWUodmFsdWUpO1xuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG4i
KTsKKworICAgICMgLSBFbmQgdGhlIGlmZGVmIGNvbmRpdGlvbmFsIGlmIG5lY2Vzc2FyeQorICAg
IHB1c2goQGltcGxDb250ZW50LCAiXG4jZW5kaWYgLy8gJHtjb25kaXRpb25hbFN0cmluZ31cbiIp
IGlmICRjb25kaXRpb25hbFN0cmluZzsKK30KKworIyBJbnRlcm5hbCBoZWxwZXIKK3N1YiBXcml0
ZURhdGEKK3sKKyAgICBteSAkb2JqZWN0ID0gc2hpZnQ7CisgICAgbXkgJG5hbWUgPSBzaGlmdDsK
KworICAgICMgT3BlbiBmaWxlcyBmb3Igd3JpdGluZy4uLgorICAgIG15ICRoZWFkZXJGaWxlTmFt
ZSA9ICIkb3V0cHV0RGlyLyIgLiAkbmFtZSAuICIuaCI7CisgICAgbXkgJGltcGxGaWxlTmFtZSA9
ICIkb3V0cHV0RGlyLyIgLiAkbmFtZSAuICIuY3BwIjsKKworICAgICMgUmVtb3ZlIG9sZCBmaWxl
cy4KKyAgICB1bmxpbmsoJGhlYWRlckZpbGVOYW1lKTsKKyAgICB1bmxpbmsoJGltcGxGaWxlTmFt
ZSk7CisKKyAgICAjIFdyaXRlIHB1YmxpYyBoZWFkZXIuCisgICAgb3BlbihIRUFERVIsICI+JGhl
YWRlckZpbGVOYW1lIikgb3IgZGllICJDb3VsZG4ndCBvcGVuIGZpbGUgJGhlYWRlckZpbGVOYW1l
IjsKKyAgICAKKyAgICBwcmludCBIRUFERVIgQGhlYWRlckNvbnRlbnRIZWFkZXI7CisgICAgcHJp
bnQgSEVBREVSICJcbiI7CisgICAgZm9yZWFjaCBteSAkY2xhc3MgKHNvcnQga2V5cyglaGVhZGVy
Rm9yd2FyZERlY2xhcmF0aW9ucykpIHsKKyAgICAgICAgaWYgKCRjbGFzcyA9fiAvOjovKSB7Cisg
ICAgICAgICAgICBteSAkbmFtZXNwYWNlUGFydCA9ICRjbGFzczsKKyAgICAgICAgICAgICRuYW1l
c3BhY2VQYXJ0ID1+IHMvOjouKi8vOworCisgICAgICAgICAgICBteSAkY2xhc3NQYXJ0ID0gJGNs
YXNzOworICAgICAgICAgICAgJGNsYXNzUGFydCA9fiBzLyR7bmFtZXNwYWNlUGFydH06Oi8vOwor
CisgICAgICAgICAgICBwcmludCBIRUFERVIgIm5hbWVzcGFjZSAkbmFtZXNwYWNlUGFydCB7XG4g
ICAgY2xhc3MgJGNsYXNzUGFydDtcbn07XG5cbiI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBwcmludCBIRUFERVIgImNsYXNzICRjbGFzcztcbiIKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIG15ICRoYXNGb3J3YXJkRGVjbGFyYXRpb25zID0ga2V5cyglaGVhZGVyRm9yd2FyZERlY2xh
cmF0aW9ucyk7CisgICAgcHJpbnQgSEVBREVSICJcbiIgaWYgJGhhc0ZvcndhcmREZWNsYXJhdGlv
bnM7CisgICAgcHJpbnQgSEVBREVSIEBoZWFkZXJDb250ZW50OworICAgIGNsb3NlKEhFQURFUik7
CisKKyAgICBAaGVhZGVyQ29udGVudEhlYWRlciA9ICgpOworICAgIEBoZWFkZXJDb250ZW50ID0g
KCk7CisgICAgJWhlYWRlckZvcndhcmREZWNsYXJhdGlvbnMgPSAoKTsKKworICAgICMgV3JpdGUg
aW1wbGVtZW50YXRpb24gZmlsZS4KKyAgICBvcGVuKElNUEwsICI+JGltcGxGaWxlTmFtZSIpIG9y
IGRpZSAiQ291bGRuJ3Qgb3BlbiBmaWxlICRpbXBsRmlsZU5hbWUiOworCisgICAgcHJpbnQgSU1Q
TCBAaW1wbENvbnRlbnRIZWFkZXI7CisgICAgcHJpbnQgSU1QTCBtYXAgeyAiI2luY2x1ZGUgXCIk
X1wiXG4iIH0gc29ydCBrZXlzKCVpbXBsSW5jbHVkZXMpOworICAgIHByaW50IElNUEwgQGltcGxD
b250ZW50OworICAgIGNsb3NlKElNUEwpOworCisgICAgQGltcGxDb250ZW50SGVhZGVyID0gKCk7
CisgICAgQGltcGxDb250ZW50ID0gKCk7CisgICAgJWltcGxJbmNsdWRlcyA9ICgpOworfQorCisx
OwoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JDUFAucG0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCgpJbmRl
eDogV2ViQ29yZS9jc3MvU3R5bGVTaGVldC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3Mv
U3R5bGVTaGVldC5pZGwJKHJldmlzaW9uIDU4NDIzKQorKysgV2ViQ29yZS9jc3MvU3R5bGVTaGVl
dC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDEyIEBAIG1vZHVsZSBzdHlsZXNoZWV0
cyB7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBbQ29udmVydE51bGxTdHJpbmdUbz1OdWxs
XSBET01TdHJpbmcgICAgICAgIGhyZWY7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBbQ29u
dmVydE51bGxTdHJpbmdUbz1OdWxsXSBET01TdHJpbmcgICAgICAgIHRpdGxlOwogICAgICAgICBy
ZWFkb25seSBhdHRyaWJ1dGUgTWVkaWFMaXN0ICAgICAgICBtZWRpYTsKKworI2lmIGRlZmluZWQo
TEFOR1VBR0VfQ1BQKSAmJiBMQU5HVUFHRV9DUFAKKyAgICAgICAgLy8gRXh0cmEgV2ViQ29yZSBt
ZXRob2RzIGV4cG9zZWQgdG8gYWxsb3dlIGNvbXBpbGUtdGltZSBjYXN0aW5nIGluIEMrKworICAg
ICAgICBib29sZWFuIGlzQ1NTU3R5bGVTaGVldCgpOworI2VuZGlmCisKICAgICB9OwogCiB9Cklu
ZGV4OiBXZWJDb3JlL2RvbS9DdXN0b21FdmVudC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9k
b20vQ3VzdG9tRXZlbnQuaWRsCShyZXZpc2lvbiA1ODQyMykKKysrIFdlYkNvcmUvZG9tL0N1c3Rv
bUV2ZW50LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCiBtb2R1bGUgZXZl
bnRzIHsKIAorI2lmICFkZWZpbmVkKExBTkdVQUdFX0NQUCkgfHwgIUxBTkdVQUdFX0NQUAogICAg
IC8vIEludHJvZHVjZWQgaW4gRE9NIExldmVsIDM6CiAgICAgaW50ZXJmYWNlIEN1c3RvbUV2ZW50
IDogRXZlbnQgewogCkBAIC0zNSw1ICszNiw2IEBAIG1vZHVsZSBldmVudHMgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGluIGJvb2xlYW4gY2FuY2VsYWJsZUFyZywgCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW4gRE9NT2JqZWN0IGRldGFpbEFyZyk7CiAgICAgfTsKKyNlbmRp
ZgogCiB9CkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5pZGwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9kb20vRG9jdW1lbnQuaWRsCShyZXZpc2lvbiA1ODQyMykKKysrIFdlYkNvcmUvZG9tL0Rv
Y3VtZW50LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMjE5LDkgKzIxOSwxMSBAQCBtb2R1bGUgY29y
ZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAog
I2VuZGlmCiAKKyNpZiAhZGVmaW5lZChMQU5HVUFHRV9DUFApIHx8ICFMQU5HVUFHRV9DUFAKICNp
ZiAhZGVmaW5lZChMQU5HVUFHRV9PQkpFQ1RJVkVfQykgfHwgIUxBTkdVQUdFX09CSkVDVElWRV9D
CiAgICAgICAgIFtWOEN1c3RvbV0gRE9NT2JqZWN0IGdldENTU0NhbnZhc0NvbnRleHQoaW4gRE9N
U3RyaW5nIGNvbnRleHRJZCwgaW4gRE9NU3RyaW5nIG5hbWUsIGluIGxvbmcgd2lkdGgsIGluIGxv
bmcgaGVpZ2h0KTsKICNlbmRpZgorI2VuZGlmCiAKICAgICAgICAgLy8gSFRNTCA1CiAgICAgICAg
IE5vZGVMaXN0IGdldEVsZW1lbnRzQnlDbGFzc05hbWUoaW4gRE9NU3RyaW5nIHRhZ25hbWUpOwpA
QCAtMzExLDYgKzMxMywxMiBAQCBtb2R1bGUgY29yZSB7CiAgICAgICAgIGF0dHJpYnV0ZSBbRG9u
dEVudW0sQ29uZGl0aW9uYWw9VE9VQ0hfRVZFTlRTLEVuYWJsZWRBdFJ1bnRpbWVdIEV2ZW50TGlz
dGVuZXIgb250b3VjaGVuZDsKICAgICAgICAgYXR0cmlidXRlIFtEb250RW51bSxDb25kaXRpb25h
bD1UT1VDSF9FVkVOVFMsRW5hYmxlZEF0UnVudGltZV0gRXZlbnRMaXN0ZW5lciBvbnRvdWNoY2Fu
Y2VsOwogI2VuZGlmCisKKyNpZiBkZWZpbmVkKExBTkdVQUdFX0NQUCkgJiYgTEFOR1VBR0VfQ1BQ
CisgICAgICAgIC8vIEV4dHJhIFdlYkNvcmUgbWV0aG9kcyBleHBvc2VkIHRvIGFsbG93IGNvbXBp
bGUtdGltZSBjYXN0aW5nIGluIEMrKworICAgICAgICBib29sZWFuIGlzSFRNTERvY3VtZW50KCk7
CisjZW5kaWYKKwogICAgIH07CiAKIH0KSW5kZXg6IFdlYkNvcmUvZG9tL0V2ZW50LmlkbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9FdmVudC5pZGwJKHJldmlzaW9uIDU4NDIzKQorKysgV2Vi
Q29yZS9kb20vRXZlbnQuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC03OSw2ICs3OSwxMiBAQCBtb2R1
bGUgZXZlbnRzIHsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFtDdXN0b21dIENsaXBib2Fy
ZCAgICAgICAgY2xpcGJvYXJkRGF0YTsKICNlbmRpZgogCisjaWYgZGVmaW5lZChMQU5HVUFHRV9D
UFApICYmIExBTkdVQUdFX0NQUAorICAgICAgICAvLyBFeHRyYSBXZWJDb3JlIG1ldGhvZHMgZXhw
b3NlZCB0byBhbGxvdyBjb21waWxlLXRpbWUgY2FzdGluZyBpbiBDKysKKyAgICAgICAgYm9vbGVh
biBpc011dGF0aW9uRXZlbnQoKTsKKyAgICAgICAgYm9vbGVhbiBpc01vdXNlRXZlbnQoKTsKKyAg
ICAgICAgYm9vbGVhbiBpc1VJRXZlbnQoKTsKKyNlbmRpZgogICAgIH07CiAKIH0KSW5kZXg6IFdl
YkNvcmUvZG9tL0V2ZW50TGlzdGVuZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9FdmVu
dExpc3RlbmVyLmgJKHJldmlzaW9uIDU4NDIzKQorKysgV2ViQ29yZS9kb20vRXZlbnRMaXN0ZW5l
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxMyArMzYsMTYgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiAgICAgY2xhc3MgRXZlbnRMaXN0ZW5lciA6IHB1YmxpYyBSZWZDb3VudGVkPEV2ZW50TGlz
dGVuZXI+IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIGVudW0gVHlwZSB7IEpTRXZlbnRMaXN0ZW5l
clR5cGUsIAotICAgICAgICAgICAgICAgICAgICBJbWFnZUV2ZW50TGlzdGVuZXJUeXBlLCAKLSAg
ICAgICAgICAgICAgICAgICAgSW5zcGVjdG9yRE9NQWdlbnRUeXBlLAotICAgICAgICAgICAgICAg
ICAgICBJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2VUeXBlLAotICAgICAgICAgICAgICAgICAg
ICBPYmpDRXZlbnRMaXN0ZW5lclR5cGUsIAotICAgICAgICAgICAgICAgICAgICBDb25kaXRpb25F
dmVudExpc3RlbmVyVHlwZSB9OwotICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgZW51bSBU
eXBlIHsKKyAgICAgICAgICAgIEpTRXZlbnRMaXN0ZW5lclR5cGUsIAorICAgICAgICAgICAgSW1h
Z2VFdmVudExpc3RlbmVyVHlwZSwgCisgICAgICAgICAgICBJbnNwZWN0b3JET01BZ2VudFR5cGUs
CisgICAgICAgICAgICBJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2VUeXBlLAorICAgICAgICAg
ICAgQ1BQRXZlbnRMaXN0ZW5lclR5cGUsCisgICAgICAgICAgICBPYmpDRXZlbnRMaXN0ZW5lclR5
cGUsIAorICAgICAgICAgICAgQ29uZGl0aW9uRXZlbnRMaXN0ZW5lclR5cGUKKyAgICAgICAgfTsK
KwogICAgICAgICB2aXJ0dWFsIH5FdmVudExpc3RlbmVyKCkgeyB9CiAgICAgICAgIHZpcnR1YWwg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IEV2ZW50TGlzdGVuZXImKSA9IDA7CiAgICAgICAgIHZpcnR1
YWwgdm9pZCBoYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRXZlbnQqKSA9IDA7
CkluZGV4OiBXZWJDb3JlL2RvbS9Ob2RlLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9O
b2RlLmlkbAkocmV2aXNpb24gNTg0MjMpCisrKyBXZWJDb3JlL2RvbS9Ob2RlLmlkbAkod29ya2lu
ZyBjb3B5KQpAQCAtMTM0LDYgKzEzNCw3IEBAIG1vZHVsZSBjb3JlIHsKIAogI2lmICFkZWZpbmVk
KExBTkdVQUdFX09CSkVDVElWRV9DKSB8fCAhTEFOR1VBR0VfT0JKRUNUSVZFX0MKICNpZiAhZGVm
aW5lZChMQU5HVUFHRV9HT0JKRUNUKSB8fCAhTEFOR1VBR0VfR09CSkVDVAorI2lmICFkZWZpbmVk
KExBTkdVQUdFX0NQUCkgfHwgIUxBTkdVQUdFX0NQUAogICAgICAgICB2b2lkIGFkZEV2ZW50TGlz
dGVuZXIoaW4gRE9NU3RyaW5nIHR5cGUsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW4gRXZlbnRMaXN0ZW5lciBsaXN0ZW5lciwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbiBib29sZWFuIHVzZUNhcHR1cmUpOwpAQCAtMTQ0LDYgKzE0NSwxOSBAQCBtb2R1bGUgY29y
ZSB7CiAgICAgICAgICAgICByYWlzZXMoRXZlbnRFeGNlcHRpb24pOwogI2VuZGlmCiAjZW5kaWYK
KyNlbmRpZgorCisjaWYgZGVmaW5lZChMQU5HVUFHRV9DUFApICYmIExBTkdVQUdFX0NQUAorICAg
ICAgICBbQ3VzdG9tXSB2b2lkIGFkZEV2ZW50TGlzdGVuZXIoaW4gRE9NU3RyaW5nIHR5cGUsIAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gRXZlbnRMaXN0ZW5l
ciBsaXN0ZW5lciwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
biBib29sZWFuIHVzZUNhcHR1cmUpOworICAgICAgICBbQ3VzdG9tXSB2b2lkIHJlbW92ZUV2ZW50
TGlzdGVuZXIoaW4gRE9NU3RyaW5nIHR5cGUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW4gRXZlbnRMaXN0ZW5lciBsaXN0ZW5lciwgCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBib29sZWFuIHVzZUNhcHR1cmUp
OworICAgICAgICBib29sZWFuIGRpc3BhdGNoRXZlbnQoaW4gRXZlbnQgZXZlbnQpCisgICAgICAg
ICAgICByYWlzZXMoRXZlbnRFeGNlcHRpb24pOworI2VuZGlmCisKICAgICB9OwogCiB9CkluZGV4
OiBXZWJDb3JlL2RvbS9Qb3BTdGF0ZUV2ZW50LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Rv
bS9Qb3BTdGF0ZUV2ZW50LmlkbAkocmV2aXNpb24gNTg0MjMpCisrKyBXZWJDb3JlL2RvbS9Qb3BT
dGF0ZUV2ZW50LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogCiBtb2R1bGUg
ZXZlbnRzIHsKIAorI2lmICFkZWZpbmVkKExBTkdVQUdFX0NQUCkgfHwgIUxBTkdVQUdFX0NQUAog
ICAgIGludGVyZmFjZSBQb3BTdGF0ZUV2ZW50IDogRXZlbnQgewogICAgICAgICBbQ3VzdG9tXSB2
b2lkIGluaXRQb3BTdGF0ZUV2ZW50KGluIERPTVN0cmluZyB0eXBlQXJnLCAKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbiBib29sZWFuIGNhbkJ1YmJsZUFyZywgCkBAIC0zNCw1ICsz
NSw2IEBAIG1vZHVsZSBldmVudHMgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAog
ICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgW1Y4Q3VzdG9tR2V0dGVyXSBhbnkgc3RhdGU7CiAg
ICAgfTsKKyNlbmRpZgogCiB9CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQu
aWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5pZGwJKHJl
dmlzaW9uIDU4NDIzKQorKysgV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmlkbAkod29y
a2luZyBjb3B5KQpAQCAtMzUsMTAgKzM1LDEyIEBAIG1vZHVsZSBodG1sIHsKICAgICAgICAgRE9N
U3RyaW5nIHRvRGF0YVVSTChpbiBbQ29udmVydFVuZGVmaW5lZE9yTnVsbFRvTnVsbFN0cmluZ10g
RE9NU3RyaW5nIHR5cGUpCiAgICAgICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKIAorI2lm
ICFkZWZpbmVkKExBTkdVQUdFX0NQUCkgfHwgIUxBTkdVQUdFX0NQUAogI2lmICFkZWZpbmVkKExB
TkdVQUdFX09CSkVDVElWRV9DKSB8fCAhTEFOR1VBR0VfT0JKRUNUSVZFX0MKICAgICAgICAgLy8g
VGhlIGN1c3RvbSBiaW5kaW5nIGlzIG5lZWRlZCB0byBoYW5kbGUgY29udGV4dCBjcmVhdGlvbiBh
dHRyaWJ1dGVzLgogICAgICAgICBbQ3VzdG9tXSBET01PYmplY3QgZ2V0Q29udGV4dChpbiBET01T
dHJpbmcgY29udGV4dElkKTsKICNlbmRpZgorI2VuZGlmCiAKICAgICB9OwogCkluZGV4OiBXZWJD
b3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1s
L0hUTUxJbnB1dEVsZW1lbnQuaWRsCShyZXZpc2lvbiA1ODQyMykKKysrIFdlYkNvcmUvaHRtbC9I
VE1MSW5wdXRFbGVtZW50LmlkbAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsMTAgQEAgbW9k
dWxlIGh0bWwgewogICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgW0NvbnZlcnROdWxsVG9OdWxs
U3RyaW5nLCBKU0NDdXN0b21HZXR0ZXJdIERPTVN0cmluZyB0eXBlOyAvLyByZWFkb25seSBkcm9w
cGVkIGFzIHBhcnQgb2YgRE9NIGxldmVsIDIKICAgICAgICAgICAgICAgICAgYXR0cmlidXRlIFtD
b252ZXJ0TnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIHVzZU1hcDsKICAgICAgICAgICAgICAg
ICAgYXR0cmlidXRlIFtDb252ZXJ0TnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIHZhbHVlOwor
CisjaWYgIWRlZmluZWQoTEFOR1VBR0VfQ1BQKSB8fCAhTEFOR1VBR0VfQ1BQCiAgICAgICAgICAg
ICAgICAgIGF0dHJpYnV0ZSBEYXRlICAgICAgICAgICAgdmFsdWVBc0RhdGUgc2V0dGVyIHJhaXNl
cyhET01FeGNlcHRpb24pOworI2VuZGlmCiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBkb3Vi
bGUgICAgICAgICAgdmFsdWVBc051bWJlciBzZXR0ZXIgcmFpc2VzKERPTUV4Y2VwdGlvbik7CiAj
aWYgZGVmaW5lZChFTkFCTEVfREFUQUxJU1QpICYmIEVOQUJMRV9EQVRBTElTVAogICAgICAgICBy
ZWFkb25seSBhdHRyaWJ1dGUgSFRNTE9wdGlvbkVsZW1lbnQgc2VsZWN0ZWRPcHRpb247CkluZGV4
OiBXZWJDb3JlL2h0bWwvSW1hZ2VEYXRhLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwv
SW1hZ2VEYXRhLmlkbAkocmV2aXNpb24gNTg0MjMpCisrKyBXZWJDb3JlL2h0bWwvSW1hZ2VEYXRh
LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMzMsOSArMzMsMTMgQEAgbW9kdWxlIGh0bWwgewogICAg
IF0gSW1hZ2VEYXRhIHsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGxvbmcgd2lkdGg7CiAg
ICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBsb25nIGhlaWdodDsKKworI2lmICFkZWZpbmVkKExB
TkdVQUdFX0NQUCkgfHwgIUxBTkdVQUdFX0NQUAogI2lmICFkZWZpbmVkKExBTkdVQUdFX0pBVkFT
Q1JJUFQpIHx8ICFMQU5HVUFHRV9KQVZBU0NSSVBUIHx8IGRlZmluZWQoVjhfQklORElORykgJiYg
VjhfQklORElORwogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgQ2FudmFzUGl4ZWxBcnJheSBk
YXRhOwogI2VuZGlmCisjZW5kaWYKKwogICAgIH07CiAKIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9N
ZWRpYUVycm9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL01lZGlhRXJyb3IuaAkocmV2
aXNpb24gNTg0MjMpCisrKyBXZWJDb3JlL2h0bWwvTWVkaWFFcnJvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNyw3ICsyNyw3IEBACiAjZGVmaW5lIE1lZGlhRXJyb3JfaAogCiAjaWYgRU5BQkxFKFZJ
REVPKQotCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBXZWJDb3JlL2h0bWwvVGV4dE1l
dHJpY3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvVGV4dE1ldHJpY3MuaAkocmV2aXNp
b24gNTg0MjMpCisrKyBXZWJDb3JlL2h0bWwvVGV4dE1ldHJpY3MuaAkod29ya2luZyBjb3B5KQpA
QCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBUZXh0TWV0cmljc19oCiAjZGVmaW5lIFRleHRNZXRy
aWNzX2gKIAorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZh
cy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmlkbAkocmV2aXNpb24gNTg0MjMpCisr
KyBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5pZGwJKHdvcmtp
bmcgY29weSkKQEAgLTkwLDEwICs5MCwxMiBAQCBtb2R1bGUgaHRtbCB7CiAgICAgICAgIHZvaWQg
c2V0QWxwaGEoaW4gZmxvYXQgYWxwaGEpOwogICAgICAgICB2b2lkIHNldENvbXBvc2l0ZU9wZXJh
dGlvbihpbiBET01TdHJpbmcgY29tcG9zaXRlT3BlcmF0aW9uKTsKIAorI2lmICFkZWZpbmVkKExB
TkdVQUdFX0NQUCkgfHwgIUxBTkdVQUdFX0NQUAogICAgICAgICB2b2lkIHNldExpbmVXaWR0aChp
biBmbG9hdCB3aWR0aCk7CiAgICAgICAgIHZvaWQgc2V0TGluZUNhcChpbiBET01TdHJpbmcgY2Fw
KTsKICAgICAgICAgdm9pZCBzZXRMaW5lSm9pbihpbiBET01TdHJpbmcgam9pbik7CiAgICAgICAg
IHZvaWQgc2V0TWl0ZXJMaW1pdChpbiBmbG9hdCBsaW1pdCk7CisjZW5kaWYKIAogICAgICAgICB2
b2lkIGNsZWFyU2hhZG93KCk7CiAKSW5kZXg6IFdlYkNvcmUvcGFnZS9BYnN0cmFjdFZpZXcuaWRs
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9BYnN0cmFjdFZpZXcuaWRsCShyZXZpc2lvbiA1
ODQyMykKKysrIFdlYkNvcmUvcGFnZS9BYnN0cmFjdFZpZXcuaWRsCSh3b3JraW5nIGNvcHkpCkBA
IC0zMiw3ICszMiw3IEBAIG1vZHVsZSB2aWV3cyB7CiAgICAgICAgIE9taXRDb25zdHJ1Y3Rvcgog
ICAgIF0gQWJzdHJhY3RWaWV3IHsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERvY3VtZW50
IGRvY3VtZW50OwotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgTWVkaWEgc3R5bGVNZWRpYTsK
KyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFN0eWxlTWVkaWEgc3R5bGVNZWRpYTsKICAgICB9
OwogCiB9CkluZGV4OiBXZWJDb3JlL3BhZ2UvV2ViS2l0UG9pbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BhZ2UvV2ViS2l0UG9pbnQuaAkocmV2aXNpb24gNTg0MjMpCisrKyBXZWJDb3JlL3Bh
Z2UvV2ViS2l0UG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRl
ZiBXZWJLaXRQb2ludF9oCiAjZGVmaW5lIFdlYktpdFBvaW50X2gKIAorI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewpJbmRleDogV2ViQ29yZS9zdG9yYWdlL1NRTFJlc3VsdFNldC5pZGwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9zdG9yYWdlL1NRTFJlc3VsdFNldC5pZGwJKHJldmlzaW9uIDU4NDIzKQor
KysgV2ViQ29yZS9zdG9yYWdlL1NRTFJlc3VsdFNldC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTM0
LDcgKzM0LDcgQEAgbW9kdWxlIHN0b3JhZ2UgewogICAgIF0gU1FMUmVzdWx0U2V0IHsKICAgICAg
ICAgcmVhZG9ubHkgYXR0cmlidXRlIFNRTFJlc3VsdFNldFJvd0xpc3Qgcm93czsKIAotICAgICAg
ICByZWFkb25seSBhdHRyaWJ1dGUgbG9uZyBpbnNlcnRJZAorICAgICAgICByZWFkb25seSBhdHRy
aWJ1dGUgbG9uZyBsb25nIGluc2VydElkCiAgICAgICAgICAgICBnZXR0ZXIgcmFpc2VzKERPTUV4
Y2VwdGlvbik7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBsb25nIHJvd3NBZmZlY3RlZDsK
ICAgICB9OwpJbmRleDogV2ViQ29yZS93b3JrZXJzL0RlZGljYXRlZFdvcmtlckNvbnRleHQuaWRs
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd29ya2Vycy9EZWRpY2F0ZWRXb3JrZXJDb250ZXh0Lmlk
bAkocmV2aXNpb24gNTg0MjMpCisrKyBXZWJDb3JlL3dvcmtlcnMvRGVkaWNhdGVkV29ya2VyQ29u
dGV4dC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAgbW9kdWxlIHRocmVhZHMg
ewogICAgICAgICBPbWl0Q29uc3RydWN0b3IKICAgICBdIERlZGljYXRlZFdvcmtlckNvbnRleHQg
OiBXb3JrZXJDb250ZXh0IHsKIAorI2lmICFkZWZpbmVkKExBTkdVQUdFX0NQUCkgfHwgIUxBTkdV
QUdFX0NQUAogI2lmIGRlZmluZWQoTEFOR1VBR0VfSkFWQVNDUklQVCkgJiYgTEFOR1VBR0VfSkFW
QVNDUklQVAogICAgICAgICBbQ3VzdG9tXSB2b2lkIHBvc3RNZXNzYWdlKGluIGFueSBtZXNzYWdl
LCBpbiBbT3B0aW9uYWxdIEFycmF5IG1lc3NhZ2VQb3J0cykKICAgICAgICAgICAgIHJhaXNlcyhE
T01FeGNlcHRpb24pOwpAQCAtNDcsNiArNDgsOCBAQCBtb2R1bGUgdGhyZWFkcyB7CiAgICAgICAg
IHZvaWQgcG9zdE1lc3NhZ2UoaW4gRE9NU3RyaW5nIG1lc3NhZ2UsIGluIFtPcHRpb25hbF0gTWVz
c2FnZVBvcnQgbWVzc2FnZVBvcnQpCiAgICAgICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsK
ICNlbmRpZgorI2VuZGlmCisKICAgICAgICAgICAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVu
ZXIgb25tZXNzYWdlOwogCiAgICAgfTsKSW5kZXg6IFdlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250
ZXh0LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5pZGwJ
KHJldmlzaW9uIDU4NDIzKQorKysgV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaWRsCSh3
b3JraW5nIGNvcHkpCkBAIC03Niw2ICs3Niw3IEBAIG1vZHVsZSB0aHJlYWRzIHsKICAgICAgICAg
cmVhZG9ubHkgYXR0cmlidXRlIFtFbmFibGVkQXRSdW50aW1lXSBOb3RpZmljYXRpb25DZW50ZXIg
d2Via2l0Tm90aWZpY2F0aW9uczsKICNlbmRpZgogCisjaWYgIWRlZmluZWQoTEFOR1VBR0VfQ1BQ
KSB8fCAhTEFOR1VBR0VfQ1BQCiAgICAgICAgIC8vIENvbnN0cnVjdG9ycwogICAgICAgICBhdHRy
aWJ1dGUgTWVzc2FnZUV2ZW50Q29uc3RydWN0b3IgTWVzc2FnZUV2ZW50OwogICAgICAgICBhdHRy
aWJ1dGUgV29ya2VyTG9jYXRpb25Db25zdHJ1Y3RvciBXb3JrZXJMb2NhdGlvbjsKQEAgLTkwLDYg
KzkxLDggQEAgbW9kdWxlIHRocmVhZHMgewogI2lmIGRlZmluZWQoRU5BQkxFX1dFQl9TT0NLRVRT
KSAmJiBFTkFCTEVfV0VCX1NPQ0tFVFMKICAgICAgICAgYXR0cmlidXRlIFtKU0NDdXN0b21HZXR0
ZXIsRW5hYmxlZEF0UnVudGltZV0gV2ViU29ja2V0Q29uc3RydWN0b3IgV2ViU29ja2V0OyAvLyBV
c2FibGUgd2l0aCB0aGUgbmV3IG9wZXJhdG9yCiAjZW5kaWYKKyNlbmRpZgorCiAgICAgfTsKIAog
fQo=
</data>
<flag name="review"
          id="38631"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54683</attachid>
            <date>2010-04-29 01:34:58 -0700</date>
            <delta_ts>2010-04-30 05:01:40 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>BindingsPatch.diff</filename>
            <type>text/plain</type>
            <size>115515</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1ODQ4NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTI3IEBACisyMDEwLTA0LTI5ICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuemltbWVy
bWFubkByaW0uY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEFkZCBDUFAgYmluZGluZ3MgZ2VuZXJhdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zODI3OQorCisgICAgICAgIEFkZCBDUFAgYmluZGlu
Z3MgZ2VuZXJhdG9yIHVzZWQgaW4gT2x5bXBpYSBwbGF0Zm9ybS4KKyAgICAgICAgR2VuZXJhdGVz
IGNvZGUgZm9yIGFsbCBJRExzIGV4Y2VwdCBTVkcsIHdoaWNoIGFyZSBub3QgbmVlZGVkIGF0IHRo
ZSBtb21lbnQuCisKKyAgICAgICAgTm90IGludGVncmF0ZWQgaW4gYW55IGJ1aWxkIHN5c3RlbSBz
byBmYXIsIHRob3VnaCBJJ3ZlIHN1Y2Nlc3NmdWxseSB0ZXN0ZWQgb24gTWFjLgorCisgICAgICAg
ICogYmluZGluZ3MvY3BwOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9jcHAvV2ViRE9NQXR0
ckN1c3RvbS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViRE9NQXR0cjo6dmFsdWUpOgorICAgICAg
ICAoV2ViRE9NQXR0cjo6c2V0VmFsdWUpOgorICAgICAgICAqIGJpbmRpbmdzL2NwcC9XZWJET01D
U3RyaW5nLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJET01DU3RyaW5nOjpyZXNldCk6CisgICAg
ICAgIChXZWJET01DU3RyaW5nOjphc3NpZ24pOgorICAgICAgICAoV2ViRE9NQ1N0cmluZzo6bGVu
Z3RoKToKKyAgICAgICAgKFdlYkRPTUNTdHJpbmc6OmRhdGEpOgorICAgICAgICAoV2ViRE9NQ1N0
cmluZzo6dXRmMTYpOgorICAgICAgICAoV2ViRE9NQ1N0cmluZzo6ZnJvbVVURjE2KToKKyAgICAg
ICAgKFdlYkRPTUNTdHJpbmc6OldlYkRPTUNTdHJpbmcpOgorICAgICAgICAoV2ViRE9NQ1N0cmlu
Zzo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYkRPTUNTdHJpbmc6Om9wZXJhdG9yIFdURjo6Q1N0
cmluZyk6CisgICAgICAgICogYmluZGluZ3MvY3BwL1dlYkRPTUNTdHJpbmcuaDogQWRkZWQuCisg
ICAgICAgIChXZWJET01DU3RyaW5nOjp+V2ViRE9NQ1N0cmluZyk6CisgICAgICAgIChXZWJET01D
U3RyaW5nOjpXZWJET01DU3RyaW5nKToKKyAgICAgICAgKFdlYkRPTUNTdHJpbmc6Om9wZXJhdG9y
PSk6CisgICAgICAgIChXZWJET01DU3RyaW5nOjppc0VtcHR5KToKKyAgICAgICAgKFdlYkRPTUNT
dHJpbmc6OmlzTnVsbCk6CisgICAgICAgICogYmluZGluZ3MvY3BwL1dlYkRPTUVsZW1lbnRDdXN0
b20uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkRPTUVsZW1lbnQ6OnNldEF0dHJpYnV0ZSk6Cisg
ICAgICAgIChXZWJET01FbGVtZW50OjpzZXRBdHRyaWJ1dGVOb2RlKToKKyAgICAgICAgKFdlYkRP
TUVsZW1lbnQ6OnNldEF0dHJpYnV0ZU5TKToKKyAgICAgICAgKFdlYkRPTUVsZW1lbnQ6OnNldEF0
dHJpYnV0ZU5vZGVOUyk6CisgICAgICAgICogYmluZGluZ3MvY3BwL1dlYkRPTUV2ZW50TGlzdGVu
ZXJDdXN0b20uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkRPTUV2ZW50TGlzdGVuZXI6OmhhbmRs
ZUV2ZW50KToKKyAgICAgICAgKHdlYktpdCk6CisgICAgICAgICogYmluZGluZ3MvY3BwL1dlYkRP
TUV2ZW50VGFyZ2V0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJET01FdmVudFRhcmdldDo6V2Vi
RE9NRXZlbnRUYXJnZXQpOgorICAgICAgICAod2ViQ29yZSk6CisgICAgICAgICh3ZWJLaXQpOgor
ICAgICAgICAqIGJpbmRpbmdzL2NwcC9XZWJET01FdmVudFRhcmdldC5oOiBBZGRlZC4KKyAgICAg
ICAgKiBiaW5kaW5ncy9jcHAvV2ViRE9NSFRNTERvY3VtZW50Q3VzdG9tLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJET01IVE1MRG9jdW1lbnQ6Om9wZW4pOgorICAgICAgICAoZG9jdW1lbnRXcml0
ZSk6CisgICAgICAgIChXZWJET01IVE1MRG9jdW1lbnQ6OndyaXRlKToKKyAgICAgICAgKFdlYkRP
TUhUTUxEb2N1bWVudDo6d3JpdGVsbik6CisgICAgICAgICogYmluZGluZ3MvY3BwL1dlYkRPTUhU
TUxGcmFtZUVsZW1lbnRDdXN0b20uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkRPTUhUTUxGcmFt
ZUVsZW1lbnQ6OnNyYyk6CisgICAgICAgIChXZWJET01IVE1MRnJhbWVFbGVtZW50OjpzZXRTcmMp
OgorICAgICAgICAoV2ViRE9NSFRNTEZyYW1lRWxlbWVudDo6c2V0TG9jYXRpb24pOgorICAgICAg
ICAqIGJpbmRpbmdzL2NwcC9XZWJET01IVE1MSUZyYW1lRWxlbWVudEN1c3RvbS5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViRE9NSFRNTElGcmFtZUVsZW1lbnQ6OnNyYyk6CisgICAgICAgIChXZWJE
T01IVE1MSUZyYW1lRWxlbWVudDo6c2V0U3JjKToKKyAgICAgICAgKiBiaW5kaW5ncy9jcHAvV2Vi
RE9NTm9kZUN1c3RvbS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViRE9NTm9kZTo6aW5zZXJ0QmVm
b3JlKToKKyAgICAgICAgKFdlYkRPTU5vZGU6OnJlcGxhY2VDaGlsZCk6CisgICAgICAgIChXZWJE
T01Ob2RlOjpyZW1vdmVDaGlsZCk6CisgICAgICAgIChXZWJET01Ob2RlOjphcHBlbmRDaGlsZCk6
CisgICAgICAgIChXZWJET01Ob2RlOjphZGRFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkRP
TU5vZGU6OnJlbW92ZUV2ZW50TGlzdGVuZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2NwcC9XZWJE
T01Ob2RlRmlsdGVyQ3VzdG9tLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJET01Ob2RlRmlsdGVy
OjphY2NlcHROb2RlKToKKyAgICAgICAgKiBiaW5kaW5ncy9jcHAvV2ViRE9NT2JqZWN0Lmg6IEFk
ZGVkLgorICAgICAgICAoV2ViRE9NT2JqZWN0OjpXZWJET01PYmplY3QpOgorICAgICAgICAoV2Vi
RE9NT2JqZWN0Ojp+V2ViRE9NT2JqZWN0KToKKyAgICAgICAgKiBiaW5kaW5ncy9jcHAvV2ViRE9N
U3RyaW5nLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJET01TdHJpbmc6OnJlc2V0KToKKyAgICAg
ICAgKFdlYkRPTVN0cmluZzo6YXNzaWduKToKKyAgICAgICAgKFdlYkRPTVN0cmluZzo6bGVuZ3Ro
KToKKyAgICAgICAgKFdlYkRPTVN0cmluZzo6ZGF0YSk6CisgICAgICAgIChXZWJET01TdHJpbmc6
OnV0ZjgpOgorICAgICAgICAoV2ViRE9NU3RyaW5nOjpmcm9tVVRGOCk6CisgICAgICAgIChXZWJE
T01TdHJpbmc6OldlYkRPTVN0cmluZyk6CisgICAgICAgIChXZWJET01TdHJpbmc6Om9wZXJhdG9y
PSk6CisgICAgICAgIChXZWJET01TdHJpbmc6Om9wZXJhdG9yIFdlYkNvcmU6OlN0cmluZyk6Cisg
ICAgICAgIChXZWJET01TdHJpbmc6Om9wZXJhdG9yIFdlYkNvcmU6OkF0b21pY1N0cmluZyk6Cisg
ICAgICAgIChXZWJET01TdHJpbmc6OmVxdWFscyk6CisgICAgICAgICogYmluZGluZ3MvY3BwL1dl
YkRPTVN0cmluZy5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkRPTVN0cmluZzo6fldlYkRPTVN0cmlu
Zyk6CisgICAgICAgIChXZWJET01TdHJpbmc6OldlYkRPTVN0cmluZyk6CisgICAgICAgIChXZWJE
T01TdHJpbmc6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJET01TdHJpbmc6OmlzRW1wdHkpOgor
ICAgICAgICAoV2ViRE9NU3RyaW5nOjppc051bGwpOgorICAgICAgICAqIGJpbmRpbmdzL2NwcC9X
ZWJFeGNlcHRpb25IYW5kbGVycy5jcHA6IEFkZGVkLgorICAgICAgICAod2ViUmFpc2VET01FeGNl
cHRpb24pOgorICAgICAgICAqIGJpbmRpbmdzL2NwcC9XZWJFeGNlcHRpb25IYW5kbGVycy5oOiBB
ZGRlZC4KKyAgICAgICAgKHdlYkRPTVJhaXNlRXJyb3IpOgorICAgICAgICAqIGJpbmRpbmdzL2Nw
cC9XZWJOYXRpdmVFdmVudExpc3RlbmVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJOYXRpdmVF
dmVudExpc3RlbmVyOjpXZWJOYXRpdmVFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYk5hdGl2
ZUV2ZW50TGlzdGVuZXI6On5XZWJOYXRpdmVFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYk5h
dGl2ZUV2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKFdlYk5hdGl2ZUV2ZW50
TGlzdGVuZXI6OnJlcG9ydEVycm9yKToKKyAgICAgICAgKFdlYk5hdGl2ZUV2ZW50TGlzdGVuZXI6
Om9wZXJhdG9yPT0pOgorICAgICAgICAqIGJpbmRpbmdzL2NwcC9XZWJOYXRpdmVFdmVudExpc3Rl
bmVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViTmF0aXZlRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYk5hdGl2ZUV2ZW50TGlzdGVuZXI6OmNhc3QpOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckNQUC5wbTogQWRkZWQuCisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0NQUDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0NQUC9XZWJET01UZXN0T2JqLmNwcDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmg6IEFkZGVkLgorICAgICAgICAqIGNzcy9TdHls
ZVNoZWV0LmlkbDogRXhwb3J0IGhlbHBlciBtZXRob2QgaXNDU1NTdHlsZVNoZWV0KCkgZm9yIGNw
cCBiaW5kaW5ncyBvbmx5LgorICAgICAgICAqIGRvbS9DdXN0b21FdmVudC5pZGw6IERpc2FibGVk
IGZvciBjcHAgYmluZGluZ3MsIG5lZWRzIGFyYml0YXJ5IGlucHV0IHBhcmFtZXRlciBoYW5kbGlu
ZyBzdXBwb3J0LgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5pZGw6IElnbm9yZSBnZXRDU1NDYW52
YXNDb250ZXh0KCkgZm9yIGNwcCBiaW5kaW5ncyBhbmQgZXhwb3J0IGhlbHBlciBtZXRob2QgaXNI
VE1MRG9jdW1lbnQoKSAoY3BwIGJpbmRpbmdzIG9ubHkpLgorICAgICAgICAqIGRvbS9FdmVudC5p
ZGw6IEV4cG9ydCBpc011dGF0aW9uRXZlbnQoKS9pc01vdXNlRXZlbnQoKS9pc1VJRXZlbnQoKSBo
ZWxwZXJzIGZvciBjcHAgYmluZGluZ3Mgb25seS4KKyAgICAgICAgKiBkb20vRXZlbnRMaXN0ZW5l
ci5oOiBBZGQgQ1BQRXZlbnRMaXN0ZW5lclR5cGUuCisgICAgICAgIChXZWJDb3JlOjpFdmVudExp
c3RlbmVyOjopOgorICAgICAgICAqIGRvbS9Ob2RlLmlkbDogYWRkRXZlbnRMaXN0ZW5lci9yZW1v
dmVFdmVudExpc3RlbmVyIG5lZWQgW0N1c3RvbV0gZmxhZyBmb3IgY3BwLWJpbmRpbmdzICh1bmZv
cnR1bmF0ZWx5KS4KKyAgICAgICAgKiBkb20vUG9wU3RhdGVFdmVudC5pZGw6IERpc2FibGVkIGp1
c3QgbGlrZSBDdXN0b21FdmVudCwgZm9yIHRoZSBzYW1lIHJlYXNvbiAoImFueSIgYXJndW1lbnQg
dHlwZSBoYW5kbGluZykuCisgICAgICAgICogaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5pZGw6IERp
c2FibGUgZ2V0Q29udGV4dCgpIG1ldGhvZCBmb3IgY3BwIGJpbmRpbmdzLCBhcyBpdCdzIGRvbmUg
Zm9yIG9iamMgYmluZGluZ3MuCisgICAgICAgICogaHRtbC9IVE1MSW5wdXRFbGVtZW50LmlkbDog
RGlzYWJsZSB2YWx1ZUFzRGF0ZSgpIG1ldGhvZCBmb3IgY3BwIGJpbmRpbmdzLCBhcyB3ZSdyZSBt
aXNzaW5nIG5hdGl2ZSAnRGF0ZScgdHlwZSBzdXBwb3J0IC4KKyAgICAgICAgKiBodG1sL0ltYWdl
RGF0YS5pZGw6IERvbid0IGV4cG9zZSBkYXRhIHByb3BlcnR5IGZvciB0aGUgY3BwIGJpbmRpbmdz
LCBDYW52YXNQaXhlbEFycmF5RGF0YSBub3QgYXZhaWxhYmxlIGF0IHRoZSBtb21lbnQuCisgICAg
ICAgICogaHRtbC9NZWRpYUVycm9yLmg6IEFkZCBtaXNzaW5nIFBhc3NSZWZQdHIuaCBpbmNsdWRl
LgorICAgICAgICAqIGh0bWwvVGV4dE1ldHJpY3MuaDogRGl0dG8uCisgICAgICAgICogaHRtbC9j
YW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmlkbDogRGlzYWJsZSBtZXRob2RzIChzZXRM
aW5lQ2FwLCBldGMuLikgZm9yIGNwcCBiaW5kaW5ncyB3aG9zZSBuYW1lcyBjbGFzaCB3aXRoIHBy
b3BlcnR5IHNldHRlcnMuCisgICAgICAgICogcGFnZS9BYnN0cmFjdFZpZXcuaWRsOiBSZW5hbWUg
J01lZGlhJyB0eXBlIHRvICdTdHlsZU1lZGlhJyAtIHRoaXMgc2hvdWxkIGhhdmUgYmVlbiBkb25l
IGJlZm9yZS4KKyAgICAgICAgKiBwYWdlL1dlYktpdFBvaW50Lmg6IEFkZCBtaXNzaW5nIFBhc3NS
ZWZQdHIuaCBpbmNsdWRlLgorICAgICAgICAqIHN0b3JhZ2UvU1FMUmVzdWx0U2V0LmlkbDogQ29y
cmVjdCB0eXBlIGZyb20gJ2xvbmcnIHRvICdsb25nIGxvbmcnLCBmb3IgY3BwIGJpbmRpbmdzIG9u
bHkgdGhvdWdoIGFzIGl0IHdvdWxkbid0IGJ1aWxkIG9uIENocm9taXVtL1Y4LgorICAgICAgICAq
IHdvcmtlcnMvRGVkaWNhdGVkV29ya2VyQ29udGV4dC5pZGw6IERpc2FibGUgcG9zdE1lc3NhZ2Uo
KSBmb3Igbm93IHdoZW4gdXNpbmcgY3BwIGJpbmRpbmdzLCB3b3VsZCBuZWVkIGN1c3RvbSBjb2Rl
IGZvciB1cy4KKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlckNvbnRleHQuaWRsOiBIaWRlIGNvbnN0
cnVjdG9ycyBmcm9tIGNwcCBiaW5kaW5ncy4KKwogMjAxMC0wNC0yOSAgSmFya2tvIFNha2tpbmVu
ICA8amFya2tvLmouc2Fra2luZW5AZ21haWwuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNp
bW9uIEhhdXNtYW5uLgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9jcHAvV2ViRE9NQXR0ckN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9jcHAvV2ViRE9NQXR0ckN1c3Rv
bS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL2NwcC9XZWJET01BdHRyQ3Vz
dG9tLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkRPTUF0dHIuaCIKKworI2luY2x1ZGUg
IkF0dHIuaCIKKyNpbmNsdWRlICJXZWJFeGNlcHRpb25IYW5kbGVycy5oIgorCitXZWJET01TdHJp
bmcgV2ViRE9NQXR0cjo6dmFsdWUoKSBjb25zdAoreworICAgIGlmICghaW1wbCgpKQorICAgICAg
ICByZXR1cm4gV2ViRE9NU3RyaW5nKCk7CisKKyAgICByZXR1cm4gKGNvbnN0IFdlYkNvcmU6OlN0
cmluZyYpIGltcGwoKS0+dmFsdWUoKTsKK30KKwordm9pZCBXZWJET01BdHRyOjpzZXRWYWx1ZShj
b25zdCBXZWJET01TdHJpbmcmIHZhbHVlKQoreworICAgIGlmICghaW1wbCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpbXBsKCkt
PnNldFZhbHVlKHZhbHVlLCBlYyk7CisgICAgd2ViRE9NUmFpc2VFcnJvcihzdGF0aWNfY2FzdDxX
ZWJET01FeGNlcHRpb25Db2RlPihlYykpOworfQoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViQ29y
ZS9iaW5kaW5ncy9jcHAvV2ViRE9NQXR0ckN1c3RvbS5jcHAKX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3Zu
OmV4ZWN1dGFibGUKICAgKyAqCgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9jcHAvV2ViRE9NQ1N0
cmluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9jcHAvV2ViRE9NQ1N0cmlu
Zy5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL2NwcC9XZWJET01DU3RyaW5n
LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkRPTUNTdHJpbmcuaCIKKworI2luY2x1ZGUg
IlRleHRFbmNvZGluZy5oIgorI2luY2x1ZGUgIldlYkRPTVN0cmluZy5oIgorI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KKworY2xhc3MgV2ViRE9NQ1N0cmluZ1ByaXZhdGUgOiBwdWJsaWMg
V1RGOjpDU3RyaW5nQnVmZmVyIHsKK307CisKK3ZvaWQgV2ViRE9NQ1N0cmluZzo6cmVzZXQoKQor
eworICAgIGlmIChtX3ByaXZhdGUpIHsKKyAgICAgICAgbV9wcml2YXRlLT5kZXJlZigpOworICAg
ICAgICBtX3ByaXZhdGUgPSAwOworICAgIH0KK30KKwordm9pZCBXZWJET01DU3RyaW5nOjphc3Np
Z24oY29uc3QgV2ViRE9NQ1N0cmluZyYgb3RoZXIpCit7CisgICAgYXNzaWduKGNvbnN0X2Nhc3Q8
V2ViRE9NQ1N0cmluZ1ByaXZhdGUqPihvdGhlci5tX3ByaXZhdGUpKTsKK30KKwordm9pZCBXZWJE
T01DU3RyaW5nOjphc3NpZ24oY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCkKK3sKKyAg
ICBjaGFyKiBuZXdEYXRhOworICAgIFJlZlB0cjxXVEY6OkNTdHJpbmdCdWZmZXI+IGJ1ZmZlciA9
CisgICAgICAgIFdURjo6Q1N0cmluZzo6bmV3VW5pbml0aWFsaXplZChsZW5ndGgsIG5ld0RhdGEp
LmJ1ZmZlcigpOworICAgIG1lbWNweShuZXdEYXRhLCBkYXRhLCBsZW5ndGgpOworICAgIGFzc2ln
bihzdGF0aWNfY2FzdDxXZWJET01DU3RyaW5nUHJpdmF0ZSo+KGJ1ZmZlci5nZXQoKSkpOworfQor
CitzaXplX3QgV2ViRE9NQ1N0cmluZzo6bGVuZ3RoKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fcHJp
dmF0ZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgLy8gTk9URTogVGhlIGJ1ZmZlcidzIGxlbmd0
aCBpbmNsdWRlcyB0aGUgbnVsbCBieXRlLgorICAgIHJldHVybiBjb25zdF9jYXN0PFdlYkRPTUNT
dHJpbmdQcml2YXRlKj4obV9wcml2YXRlKS0+bGVuZ3RoKCkgLSAxOworfQorCitjb25zdCBjaGFy
KiBXZWJET01DU3RyaW5nOjpkYXRhKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fcHJpdmF0ZSkKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8V2ViRE9NQ1N0cmluZ1ByaXZh
dGUqPihtX3ByaXZhdGUpLT5kYXRhKCk7Cit9CisKK1dlYkRPTVN0cmluZyBXZWJET01DU3RyaW5n
Ojp1dGYxNigpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdlYkNvcmU6OlVURjhFbmNvZGluZygpLmRl
Y29kZShkYXRhKCksIGxlbmd0aCgpKTsKK30KKworV2ViRE9NQ1N0cmluZyBXZWJET01DU3RyaW5n
Ojpmcm9tVVRGMTYoY29uc3QgV2ViVUNoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgpCit7CisgICAg
cmV0dXJuIFdlYkNvcmU6OlVURjhFbmNvZGluZygpLmVuY29kZSgKKyAgICAgICAgZGF0YSwgbGVu
Z3RoLCBXZWJDb3JlOjpRdWVzdGlvbk1hcmtzRm9yVW5lbmNvZGFibGVzKTsKK30KKworV2ViRE9N
Q1N0cmluZyBXZWJET01DU3RyaW5nOjpmcm9tVVRGMTYoY29uc3QgV2ViVUNoYXIqIGRhdGEpCit7
CisgICAgc2l6ZV90IGxlbiA9IDA7CisgICAgd2hpbGUgKGRhdGFbbGVuXSAhPSBXZWJVQ2hhcigw
KSkKKyAgICAgICAgbGVuKys7CisgICAgcmV0dXJuIGZyb21VVEYxNihkYXRhLCBsZW4pOworfQor
CitXZWJET01DU3RyaW5nOjpXZWJET01DU3RyaW5nKGNvbnN0IFdURjo6Q1N0cmluZyYgcykKKyAg
ICA6IG1fcHJpdmF0ZShzdGF0aWNfY2FzdDxXZWJET01DU3RyaW5nUHJpdmF0ZSo+KHMuYnVmZmVy
KCkpKQoreworICAgIGlmIChtX3ByaXZhdGUpCisgICAgICAgIG1fcHJpdmF0ZS0+cmVmKCk7Cit9
CisKK1dlYkRPTUNTdHJpbmcmIFdlYkRPTUNTdHJpbmc6Om9wZXJhdG9yPShjb25zdCBXVEY6OkNT
dHJpbmcmIHMpCit7CisgICAgYXNzaWduKHN0YXRpY19jYXN0PFdlYkRPTUNTdHJpbmdQcml2YXRl
Kj4ocy5idWZmZXIoKSkpOworICAgIHJldHVybiAqdGhpczsKK30KKworV2ViRE9NQ1N0cmluZzo6
b3BlcmF0b3IgV1RGOjpDU3RyaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlOwor
fQorCit2b2lkIFdlYkRPTUNTdHJpbmc6OmFzc2lnbihXZWJET01DU3RyaW5nUHJpdmF0ZSogcCkK
K3sKKyAgICAvLyBUYWtlIGNhcmUgdG8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIG1fcHJpdmF0ZSA9
PSBwCisgICAgaWYgKHApCisgICAgICAgIHAtPnJlZigpOworICAgIGlmIChtX3ByaXZhdGUpCisg
ICAgICAgIG1fcHJpdmF0ZS0+ZGVyZWYoKTsKKyAgICBtX3ByaXZhdGUgPSBwOworfQoKUHJvcGVy
dHkgY2hhbmdlcyBvbjogV2ViQ29yZS9iaW5kaW5ncy9jcHAvV2ViRE9NQ1N0cmluZy5jcHAKX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCgpJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy9jcHAvV2ViRE9NQ1N0cmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
Y3BwL1dlYkRPTUNTdHJpbmcuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3MvY3Bw
L1dlYkRPTUNTdHJpbmcuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaWZuZGVmIFdlYkRPTUNTdHJpbmdfaAorI2RlZmluZSBXZWJET01DU3RyaW5nX2gK
KworI2luY2x1ZGUgPFdlYkRPTU9iamVjdC5oPgorCituYW1lc3BhY2UgV1RGIHsKK2NsYXNzIENT
dHJpbmc7Cit9OworCitjbGFzcyBXZWJET01DU3RyaW5nUHJpdmF0ZTsKK2NsYXNzIFdlYkRPTVN0
cmluZzsKKworLy8gQSBzaW5nbGUtYnl0ZSBzdHJpbmcgY29udGFpbmVyIHdpdGggdW5zcGVjaWZp
ZWQgZW5jb2RpbmcuICBJdCBpcworLy8gaW5leHBlbnNpdmUgdG8gY29weSBhIFdlYkRPTUNTdHJp
bmcgb2JqZWN0LgorLy8KKy8vIFdBUk5JTkc6IEl0IGlzIG5vdCBzYWZlIHRvIHBhc3MgYSBXZWJE
T01DU3RyaW5nIGFjcm9zcyB0aHJlYWRzISEhCisvLworY2xhc3MgV2ViRE9NQ1N0cmluZyB7Citw
dWJsaWM6CisgICAgfldlYkRPTUNTdHJpbmcoKSB7IHJlc2V0KCk7IH0KKworICAgIFdlYkRPTUNT
dHJpbmcoKSA6IG1fcHJpdmF0ZSgwKSB7IH0KKworICAgIFdlYkRPTUNTdHJpbmcoY29uc3QgY2hh
ciogZGF0YSwgc2l6ZV90IGxlbikgOiBtX3ByaXZhdGUoMCkKKyAgICB7CisgICAgICAgIGFzc2ln
bihkYXRhLCBsZW4pOworICAgIH0KKworICAgIFdlYkRPTUNTdHJpbmcoY29uc3QgV2ViRE9NQ1N0
cmluZyYgcykgOiBtX3ByaXZhdGUoMCkgeyBhc3NpZ24ocyk7IH0KKworICAgIFdlYkRPTUNTdHJp
bmcmIG9wZXJhdG9yPShjb25zdCBXZWJET01DU3RyaW5nJiBzKQorICAgIHsKKyAgICAgICAgYXNz
aWduKHMpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgdm9pZCByZXNldCgp
OworICAgIHZvaWQgYXNzaWduKGNvbnN0IFdlYkRPTUNTdHJpbmcmKTsKKyAgICB2b2lkIGFzc2ln
bihjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuKTsKKworICAgIHNpemVfdCBsZW5ndGgoKSBj
b25zdDsKKyAgICBjb25zdCBjaGFyKiBkYXRhKCkgY29uc3Q7CisKKyAgICBib29sIGlzRW1wdHko
KSBjb25zdCB7IHJldHVybiAhbGVuZ3RoKCk7IH0KKyAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsg
cmV0dXJuICFtX3ByaXZhdGU7IH0KKworICAgIFdlYkRPTVN0cmluZyB1dGYxNigpIGNvbnN0Owor
CisgICAgc3RhdGljIFdlYkRPTUNTdHJpbmcgZnJvbVVURjE2KGNvbnN0IFdlYlVDaGFyKiBkYXRh
LCBzaXplX3QgbGVuZ3RoKTsKKyAgICBzdGF0aWMgV2ViRE9NQ1N0cmluZyBmcm9tVVRGMTYoY29u
c3QgV2ViVUNoYXIqIGRhdGEpOworCisgICAgV2ViRE9NQ1N0cmluZyhjb25zdCBXVEY6OkNTdHJp
bmcmKTsKKyAgICBXZWJET01DU3RyaW5nJiBvcGVyYXRvcj0oY29uc3QgV1RGOjpDU3RyaW5nJik7
CisgICAgb3BlcmF0b3IgV1RGOjpDU3RyaW5nKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgdm9p
ZCBhc3NpZ24oV2ViRE9NQ1N0cmluZ1ByaXZhdGUqKTsKKyAgICBXZWJET01DU3RyaW5nUHJpdmF0
ZSogbV9wcml2YXRlOworfTsKKworI2VuZGlmCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3Jl
L2JpbmRpbmdzL2NwcC9XZWJET01DU3RyaW5nLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1
dGFibGUKICAgKyAqCgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9jcHAvV2ViRE9NRWxlbWVudEN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9jcHAvV2ViRE9NRWxlbWVu
dEN1c3RvbS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL2NwcC9XZWJET01F
bGVtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkRPTUVsZW1lbnQuaCIK
KworI2luY2x1ZGUgIkF0dHIuaCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiRXhj
ZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIldlYkRPTUF0dHIuaCIKKyNpbmNsdWRlICJXZWJFeGNl
cHRpb25IYW5kbGVycy5oIgorCit2b2lkIFdlYkRPTUVsZW1lbnQ6OnNldEF0dHJpYnV0ZShjb25z
dCBXZWJET01TdHJpbmcmIG5hbWUsIGNvbnN0IFdlYkRPTVN0cmluZyYgdmFsdWUpCit7CisgICAg
aWYgKCFpbXBsKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOworICAgIGltcGwoKS0+c2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlLCBlYyk7Cisg
ICAgd2ViRE9NUmFpc2VFcnJvcihzdGF0aWNfY2FzdDxXZWJET01FeGNlcHRpb25Db2RlPihlYykp
OworfQorCitXZWJET01BdHRyIFdlYkRPTUVsZW1lbnQ6OnNldEF0dHJpYnV0ZU5vZGUoY29uc3Qg
V2ViRE9NQXR0ciYgbmV3QXR0cikKK3sKKyAgICBpZiAoIWltcGwoKSkKKyAgICAgICAgcmV0dXJu
IFdlYkRPTUF0dHIoKTsKKworICAgIFdlYkNvcmU6OkF0dHIqIGF0dHIgPSB3ZWJDb3JlKG5ld0F0
dHIpOworICAgIGlmICghYXR0cikgeworICAgICAgICB3ZWJET01SYWlzZUVycm9yKHN0YXRpY19j
YXN0PFdlYkRPTUV4Y2VwdGlvbkNvZGU+KFdlYkNvcmU6OlRZUEVfTUlTTUFUQ0hfRVJSKSk7Cisg
ICAgICAgIHJldHVybiBXZWJET01BdHRyKCk7CisgICAgfQorCisgICAgV2ViQ29yZTo6RXhjZXB0
aW9uQ29kZSBlYyA9IDA7CisgICAgV2ViRE9NQXR0ciByZXN1bHQgPSB3ZWJLaXQoV1RGOjpnZXRQ
dHIoaW1wbCgpLT5zZXRBdHRyaWJ1dGVOb2RlKGF0dHIsIGVjKSkpOworICAgIHdlYkRPTVJhaXNl
RXJyb3Ioc3RhdGljX2Nhc3Q8V2ViRE9NRXhjZXB0aW9uQ29kZT4oZWMpKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCit2b2lkIFdlYkRPTUVsZW1lbnQ6OnNldEF0dHJpYnV0ZU5TKGNvbnN0IFdl
YkRPTVN0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBXZWJET01TdHJpbmcmIHF1YWxpZmllZE5h
bWUsIGNvbnN0IFdlYkRPTVN0cmluZyYgdmFsdWUpCit7CisgICAgaWYgKCFpbXBsKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGlt
cGwoKS0+c2V0QXR0cmlidXRlTlMobmFtZXNwYWNlVVJJLCBxdWFsaWZpZWROYW1lLCB2YWx1ZSwg
ZWMpOworICAgIHdlYkRPTVJhaXNlRXJyb3Ioc3RhdGljX2Nhc3Q8V2ViRE9NRXhjZXB0aW9uQ29k
ZT4oZWMpKTsKK30KKworV2ViRE9NQXR0ciBXZWJET01FbGVtZW50OjpzZXRBdHRyaWJ1dGVOb2Rl
TlMoY29uc3QgV2ViRE9NQXR0ciYgbmV3QXR0cikKK3sKKyAgICBpZiAoIWltcGwoKSkKKyAgICAg
ICAgcmV0dXJuIFdlYkRPTUF0dHIoKTsKKworICAgIFdlYkNvcmU6OkF0dHIqIGF0dHIgPSB3ZWJD
b3JlKG5ld0F0dHIpOworICAgIGlmICghYXR0cikgeworICAgICAgICB3ZWJET01SYWlzZUVycm9y
KHN0YXRpY19jYXN0PFdlYkRPTUV4Y2VwdGlvbkNvZGU+KFdlYkNvcmU6OlRZUEVfTUlTTUFUQ0hf
RVJSKSk7CisgICAgICAgIHJldHVybiBXZWJET01BdHRyKCk7CisgICAgfQorCisgICAgV2ViQ29y
ZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgV2ViRE9NQXR0ciByZXN1bHQgPSB3ZWJLaXQo
V1RGOjpnZXRQdHIoaW1wbCgpLT5zZXRBdHRyaWJ1dGVOb2RlTlMoYXR0ciwgZWMpKSk7CisgICAg
d2ViRE9NUmFpc2VFcnJvcihzdGF0aWNfY2FzdDxXZWJET01FeGNlcHRpb25Db2RlPihlYykpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL2JpbmRp
bmdzL2NwcC9XZWJET01FbGVtZW50Q3VzdG9tLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhl
Y3V0YWJsZQogICArICoKCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2NwcC9XZWJET01FdmVudExp
c3RlbmVyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2NwcC9XZWJE
T01FdmVudExpc3RlbmVyQ3VzdG9tLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGlu
Z3MvY3BwL1dlYkRPTUV2ZW50TGlzdGVuZXJDdXN0b20uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRl
ZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiV2ViRE9NRXZlbnRMaXN0ZW5lci5oIgorCisjaW5jbHVkZSAiV2ViRE9NRXZlbnQuaCIKKyNp
bmNsdWRlICJXZWJOYXRpdmVFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgorCit2b2lkIFdlYkRPTUV2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KGNvbnN0IFdlYkRPTUV2
ZW50JiBldnQpCit7CisgICAgaWYgKCFpbXBsKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlt
cGwoKS0+aGFuZGxlRXZlbnQoMCwgd2ViQ29yZShldnQpKTsKK30KKworV2ViRE9NRXZlbnRMaXN0
ZW5lciB3ZWJLaXQoV2ViVXNlckV2ZW50TGlzdGVuZXIqIHZhbHVlKQoreworICAgIFJlZlB0cjxX
ZWJOYXRpdmVFdmVudExpc3RlbmVyPiBsaXN0ZW5lciA9IFdlYk5hdGl2ZUV2ZW50TGlzdGVuZXI6
OmNyZWF0ZSh2YWx1ZSk7CisgICAgcmV0dXJuIFdlYkRPTUV2ZW50TGlzdGVuZXIobGlzdGVuZXIu
Z2V0KCkpOworfQoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViQ29yZS9iaW5kaW5ncy9jcHAvV2Vi
RE9NRXZlbnRMaXN0ZW5lckN1c3RvbS5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFi
bGUKICAgKyAqCgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9jcHAvV2ViRE9NRXZlbnRUYXJnZXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvY3BwL1dlYkRPTUV2ZW50VGFyZ2V0
LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3MvY3BwL1dlYkRPTUV2ZW50VGFy
Z2V0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJET01FdmVudFRhcmdldC5oIgorCitXZWJE
T01FdmVudFRhcmdldDo6V2ViRE9NRXZlbnRUYXJnZXQoKQoreworfQorCitXZWJET01FdmVudFRh
cmdldDo6V2ViRE9NRXZlbnRUYXJnZXQoY29uc3QgV2ViRE9NT2JqZWN0JiBkb21PYmplY3QpCisg
ICAgOiBtX2RvbU9iamVjdChkb21PYmplY3QpCit7Cit9CisKK1dlYkNvcmU6OkV2ZW50VGFyZ2V0
KiB3ZWJDb3JlKGNvbnN0IFdlYkRPTUV2ZW50VGFyZ2V0JikKK3sKKyAgICAvLyBUT0RPOiBJbXBs
ZW1lbnQgbWUhCisgICAgcmV0dXJuIDA7Cit9CisKK1dlYkRPTUV2ZW50VGFyZ2V0IHdlYktpdChX
ZWJDb3JlOjpFdmVudFRhcmdldCopCit7CisgICAgLy8gVE9ETzogSW1wbGVtZW50IG1lIQorICAg
IHJldHVybiBXZWJET01FdmVudFRhcmdldCgpOworfQoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2Vi
Q29yZS9iaW5kaW5ncy9jcHAvV2ViRE9NRXZlbnRUYXJnZXQuY3BwCl9fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6
IHN2bjpleGVjdXRhYmxlCiAgICsgKgoKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvY3BwL1dlYkRP
TUV2ZW50VGFyZ2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9jcHAvV2ViRE9N
RXZlbnRUYXJnZXQuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3MvY3BwL1dlYkRP
TUV2ZW50VGFyZ2V0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpZm5kZWYgV2ViRE9NRXZlbnRUYXJnZXRfaAorI2RlZmluZSBXZWJET01FdmVudFRh
cmdldF9oCisKKyNpbmNsdWRlIDxXZWJET01PYmplY3QuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworY2xhc3MgRXZlbnRUYXJnZXQ7Cit9CisKK2NsYXNzIFdlYkRPTUV2ZW50VGFyZ2V0IHsKK3B1
YmxpYzoKKyAgICBXZWJET01FdmVudFRhcmdldCgpOworICAgIGV4cGxpY2l0IFdlYkRPTUV2ZW50
VGFyZ2V0KGNvbnN0IFdlYkRPTU9iamVjdCYpOworCitwcml2YXRlOgorICAgIFdlYkRPTU9iamVj
dCBtX2RvbU9iamVjdDsKK307CisKK1dlYkNvcmU6OkV2ZW50VGFyZ2V0KiB3ZWJDb3JlKGNvbnN0
IFdlYkRPTUV2ZW50VGFyZ2V0Jik7CitXZWJET01FdmVudFRhcmdldCB3ZWJLaXQoV2ViQ29yZTo6
RXZlbnRUYXJnZXQqKTsKKworI2VuZGlmCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL2Jp
bmRpbmdzL2NwcC9XZWJET01FdmVudFRhcmdldC5oCl9fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVj
dXRhYmxlCiAgICsgKgoKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvY3BwL1dlYkRPTUhUTUxEb2N1
bWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9jcHAvV2ViRE9N
SFRNTERvY3VtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3Mv
Y3BwL1dlYkRPTUhUTUxEb2N1bWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIw
MTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJX
ZWJET01IVE1MRG9jdW1lbnQuaCIKKworI2luY2x1ZGUgIkNoYXJhY3Rlck5hbWVzLmgiCisjaW5j
bHVkZSAiSFRNTERvY3VtZW50LmgiCisjaW5jbHVkZSAiU2VnbWVudGVkU3RyaW5nLmgiCisjaW5j
bHVkZSAiV2ViRXhjZXB0aW9uSGFuZGxlcnMuaCIKKwordm9pZCBXZWJET01IVE1MRG9jdW1lbnQ6
Om9wZW4oKQoreworICAgIGlmICghaW1wbCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpbXBs
KCktPm9wZW4oKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRvY3VtZW50V3JpdGUoY29uc3Qg
V2ViRE9NU3RyaW5nJiB0ZXh0LCBXZWJDb3JlOjpIVE1MRG9jdW1lbnQqIGRvY3VtZW50LCBib29s
IGFkZE5ld2xpbmUpCit7CisgICAgV2ViQ29yZTo6U2VnbWVudGVkU3RyaW5nIHNlZ21lbnRlZFN0
cmluZyA9IFdlYkNvcmU6OlN0cmluZyh0ZXh0KTsKKyAgICBpZiAoYWRkTmV3bGluZSkKKyAgICAg
ICAgc2VnbWVudGVkU3RyaW5nLmFwcGVuZChXZWJDb3JlOjpTZWdtZW50ZWRTdHJpbmcoJldlYkNv
cmU6Om5ld2xpbmVDaGFyYWN0ZXIsIDEpKTsKKyAgICBkb2N1bWVudC0+d3JpdGUoc2VnbWVudGVk
U3RyaW5nKTsKK30KKwordm9pZCBXZWJET01IVE1MRG9jdW1lbnQ6OndyaXRlKGNvbnN0IFdlYkRP
TVN0cmluZyYgdGV4dCkKK3sKKyAgICBpZiAoIWltcGwoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgZG9jdW1lbnRXcml0ZSh0ZXh0LCBpbXBsKCksIGZhbHNlKTsKK30KKwordm9pZCBXZWJET01I
VE1MRG9jdW1lbnQ6OndyaXRlbG4oY29uc3QgV2ViRE9NU3RyaW5nJiB0ZXh0KQoreworICAgIGlm
ICghaW1wbCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBkb2N1bWVudFdyaXRlKHRleHQsIGlt
cGwoKSwgdHJ1ZSk7Cit9CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL2JpbmRpbmdzL2Nw
cC9XZWJET01IVE1MRG9jdW1lbnRDdXN0b20uY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVj
dXRhYmxlCiAgICsgKgoKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvY3BwL1dlYkRPTUhUTUxGcmFt
ZUVsZW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvY3BwL1dl
YkRPTUhUTUxGcmFtZUVsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9i
aW5kaW5ncy9jcHAvV2ViRE9NSFRNTEZyYW1lRWxlbWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlv
biBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJXZWJET01IVE1MRnJhbWVFbGVtZW50LmgiCisKKyNpbmNsdWRlICJIVE1MRnJh
bWVFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisKK1dlYkRPTVN0cmluZyBXZWJE
T01IVE1MRnJhbWVFbGVtZW50OjpzcmMoKSBjb25zdAoreworICAgIGlmICghaW1wbCgpKQorICAg
ICAgICByZXR1cm4gV2ViRE9NU3RyaW5nKCk7CisKKyAgICByZXR1cm4gKGNvbnN0IFdlYkNvcmU6
OlN0cmluZyYpIGltcGwoKS0+Z2V0QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6c3JjQXR0
cik7Cit9CisKK3ZvaWQgV2ViRE9NSFRNTEZyYW1lRWxlbWVudDo6c2V0U3JjKGNvbnN0IFdlYkRP
TVN0cmluZyYgbmV3U3JjKQoreworICAgIGlmICghaW1wbCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBpbXBsKCktPnNldEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnNyY0F0dHIsIG5l
d1NyYyk7Cit9CisKK3ZvaWQgV2ViRE9NSFRNTEZyYW1lRWxlbWVudDo6c2V0TG9jYXRpb24oY29u
c3QgV2ViRE9NU3RyaW5nJiBuZXdMb2NhdGlvbikKK3sKKyAgICBpZiAoIWltcGwoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaW1wbCgpLT5zZXRMb2NhdGlvbihuZXdMb2NhdGlvbik7Cit9CgpQ
cm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL2JpbmRpbmdzL2NwcC9XZWJET01IVE1MRnJhbWVF
bGVtZW50Q3VzdG9tLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoK
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2NwcC9XZWJET01IVE1MSUZyYW1lRWxlbWVudEN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9jcHAvV2ViRE9NSFRNTElGcmFt
ZUVsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy9jcHAv
V2ViRE9NSFRNTElGcmFtZUVsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAy
MDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
V2ViRE9NSFRNTElGcmFtZUVsZW1lbnQuaCIKKworI2luY2x1ZGUgIkhUTUxJRnJhbWVFbGVtZW50
LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisKK1dlYkRPTVN0cmluZyBXZWJET01IVE1MSUZy
YW1lRWxlbWVudDo6c3JjKCkgY29uc3QKK3sKKyAgICBpZiAoIWltcGwoKSkKKyAgICAgICAgcmV0
dXJuIFdlYkRPTVN0cmluZygpOworCisgICAgcmV0dXJuIChjb25zdCBXZWJDb3JlOjpTdHJpbmcm
KSBpbXBsKCktPmdldEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnNyY0F0dHIpOworfQor
Cit2b2lkIFdlYkRPTUhUTUxJRnJhbWVFbGVtZW50OjpzZXRTcmMoY29uc3QgV2ViRE9NU3RyaW5n
JiBuZXdTcmMpCit7CisgICAgaWYgKCFpbXBsKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlt
cGwoKS0+c2V0QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6c3JjQXR0ciwgbmV3U3JjKTsK
K30KClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvYmluZGluZ3MvY3BwL1dlYkRPTUhUTUxJ
RnJhbWVFbGVtZW50Q3VzdG9tLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQog
ICArICoKCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2NwcC9XZWJET01Ob2RlQ3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2NwcC9XZWJET01Ob2RlQ3VzdG9tLmNwcAko
cmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3MvY3BwL1dlYkRPTU5vZGVDdXN0b20uY3Bw
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSBSZXNl
YXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViRE9NTm9kZS5oIgorCisjaW5jbHVkZSAiTm9kZS5o
IgorI2luY2x1ZGUgIldlYkRPTUV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlICJXZWJFeGNlcHRp
b25IYW5kbGVycy5oIgorI2luY2x1ZGUgIldlYk5hdGl2ZUV2ZW50TGlzdGVuZXIuaCIKKworV2Vi
RE9NTm9kZSBXZWJET01Ob2RlOjppbnNlcnRCZWZvcmUoY29uc3QgV2ViRE9NTm9kZSYgbmV3Q2hp
bGQsIGNvbnN0IFdlYkRPTU5vZGUmIHJlZkNoaWxkKQoreworICAgIGlmICghaW1wbCgpKQorICAg
ICAgICByZXR1cm4gV2ViRE9NTm9kZSgpOworCisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBl
YyA9IDA7CisgICAgaWYgKGltcGwoKS0+aW5zZXJ0QmVmb3JlKHdlYkNvcmUobmV3Q2hpbGQpLCB3
ZWJDb3JlKHJlZkNoaWxkKSwgZWMsIHRydWUpKQorICAgICAgICByZXR1cm4gbmV3Q2hpbGQ7CisK
KyAgICB3ZWJET01SYWlzZUVycm9yKHN0YXRpY19jYXN0PFdlYkRPTUV4Y2VwdGlvbkNvZGU+KGVj
KSk7CisgICAgcmV0dXJuIFdlYkRPTU5vZGUoKTsKK30KKworV2ViRE9NTm9kZSBXZWJET01Ob2Rl
OjpyZXBsYWNlQ2hpbGQoY29uc3QgV2ViRE9NTm9kZSYgbmV3Q2hpbGQsIGNvbnN0IFdlYkRPTU5v
ZGUmIG9sZENoaWxkKQoreworICAgIGlmICghaW1wbCgpKQorICAgICAgICByZXR1cm4gV2ViRE9N
Tm9kZSgpOworCisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaWYgKGlt
cGwoKS0+cmVwbGFjZUNoaWxkKHdlYkNvcmUobmV3Q2hpbGQpLCB3ZWJDb3JlKG9sZENoaWxkKSwg
ZWMsIHRydWUpKQorICAgICAgICByZXR1cm4gb2xkQ2hpbGQ7CisKKyAgICB3ZWJET01SYWlzZUVy
cm9yKHN0YXRpY19jYXN0PFdlYkRPTUV4Y2VwdGlvbkNvZGU+KGVjKSk7CisgICAgcmV0dXJuIFdl
YkRPTU5vZGUoKTsKK30KKworV2ViRE9NTm9kZSBXZWJET01Ob2RlOjpyZW1vdmVDaGlsZChjb25z
dCBXZWJET01Ob2RlJiBvbGRDaGlsZCkKK3sKKyAgICBpZiAoIWltcGwoKSkKKyAgICAgICAgcmV0
dXJuIFdlYkRPTU5vZGUoKTsKKworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwor
ICAgIGlmIChpbXBsKCktPnJlbW92ZUNoaWxkKHdlYkNvcmUob2xkQ2hpbGQpLCBlYykpCisgICAg
ICAgIHJldHVybiBvbGRDaGlsZDsKKworICAgIHdlYkRPTVJhaXNlRXJyb3Ioc3RhdGljX2Nhc3Q8
V2ViRE9NRXhjZXB0aW9uQ29kZT4oZWMpKTsKKyAgICByZXR1cm4gV2ViRE9NTm9kZSgpOworfQor
CitXZWJET01Ob2RlIFdlYkRPTU5vZGU6OmFwcGVuZENoaWxkKGNvbnN0IFdlYkRPTU5vZGUmIG5l
d0NoaWxkKQoreworICAgIGlmICghaW1wbCgpKQorICAgICAgICByZXR1cm4gV2ViRE9NTm9kZSgp
OworCisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaWYgKGltcGwoKS0+
YXBwZW5kQ2hpbGQod2ViQ29yZShuZXdDaGlsZCksIGVjLCB0cnVlKSkKKyAgICAgICAgcmV0dXJu
IG5ld0NoaWxkOworCisgICAgd2ViRE9NUmFpc2VFcnJvcihzdGF0aWNfY2FzdDxXZWJET01FeGNl
cHRpb25Db2RlPihlYykpOworICAgIHJldHVybiBXZWJET01Ob2RlKCk7Cit9CisKK3ZvaWQgV2Vi
RE9NTm9kZTo6YWRkRXZlbnRMaXN0ZW5lcihjb25zdCBXZWJET01TdHJpbmcmIHR5cGUsIGNvbnN0
IFdlYkRPTUV2ZW50TGlzdGVuZXImIGxpc3RlbmVyLCBjb25zdCBib29sJiB1c2VDYXB0dXJlKQor
eworICAgIGlmICghaW1wbCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAod2ViQ29yZShs
aXN0ZW5lcikpCisgICAgICAgIGltcGwoKS0+YWRkRXZlbnRMaXN0ZW5lcih0eXBlLCB3ZWJDb3Jl
KGxpc3RlbmVyKSwgdXNlQ2FwdHVyZSk7Cit9CisKK3ZvaWQgV2ViRE9NTm9kZTo6cmVtb3ZlRXZl
bnRMaXN0ZW5lcihjb25zdCBXZWJET01TdHJpbmcmIHR5cGUsIGNvbnN0IFdlYkRPTUV2ZW50TGlz
dGVuZXImIGxpc3RlbmVyLCBjb25zdCBib29sJiB1c2VDYXB0dXJlKQoreworICAgIGlmICghaW1w
bCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAod2ViQ29yZShsaXN0ZW5lcikpCisgICAg
ICAgIGltcGwoKS0+cmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCB3ZWJDb3JlKGxpc3RlbmVyKSwg
dXNlQ2FwdHVyZSk7Cit9CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL2JpbmRpbmdzL2Nw
cC9XZWJET01Ob2RlQ3VzdG9tLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQog
ICArICoKCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2NwcC9XZWJET01Ob2RlRmlsdGVyQ3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2NwcC9XZWJET01Ob2RlRmlsdGVy
Q3VzdG9tLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3MvY3BwL1dlYkRPTU5v
ZGVGaWx0ZXJDdXN0b20uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViRE9NTm9kZUZpbHRl
ci5oIgorCisjaW5jbHVkZSAiTm9kZUZpbHRlci5oIgorI2luY2x1ZGUgIldlYkRPTU5vZGUuaCIK
Kworc2hvcnQgV2ViRE9NTm9kZUZpbHRlcjo6YWNjZXB0Tm9kZShjb25zdCBXZWJET01Ob2RlJiBu
KQoreworICAgIGlmICghaW1wbCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBp
bXBsKCktPmFjY2VwdE5vZGUod2ViQ29yZShuKSk7Cit9CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBX
ZWJDb3JlL2JpbmRpbmdzL2NwcC9XZWJET01Ob2RlRmlsdGVyQ3VzdG9tLmNwcApfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
CkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoKCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2Nw
cC9XZWJET01PYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2NwcC9XZWJE
T01PYmplY3QuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3MvY3BwL1dlYkRPTU9i
amVjdC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aWZuZGVmIFdlYkRPTU9iamVjdF9oCisjZGVmaW5lIFdlYkRPTU9iamVjdF9oCisKK2NsYXNzIFdl
YkRPTUV2ZW50VGFyZ2V0OworCitjbGFzcyBXZWJET01PYmplY3QgeworcHJvdGVjdGVkOgorICAg
IGZyaWVuZCBjbGFzcyBXZWJET01FdmVudFRhcmdldDsKKworICAgIFdlYkRPTU9iamVjdCgpIHsg
fQorICAgIH5XZWJET01PYmplY3QoKSB7IH0KK307CisKKy8vIExvb2tzIGFrd2FyZCwgdGhvdWdo
IHdlIHByZWZpeCBhbGwgY2xhc3NlcyB3aXRoIFdlYkRPTQordHlwZWRlZiB1bnNpZ25lZCBsb25n
IGxvbmcgV2ViRE9NRE9NVGltZVN0YW1wOworCisvLyBVVEYtMTYgY2hhcmFjdGVyIHR5cGUKKyNp
ZiBkZWZpbmVkKFdJTjMyKQordHlwZWRlZiB3Y2hhcl90IFdlYlVDaGFyOworI2Vsc2UKK3R5cGVk
ZWYgdW5zaWduZWQgc2hvcnQgV2ViVUNoYXI7CisjZW5kaWYKKworCisjZW5kaWYKClByb3BlcnR5
IGNoYW5nZXMgb246IFdlYkNvcmUvYmluZGluZ3MvY3BwL1dlYkRPTU9iamVjdC5oCl9fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsgKgoKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mv
Y3BwL1dlYkRPTVN0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9jcHAv
V2ViRE9NU3RyaW5nLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3MvY3BwL1dl
YkRPTVN0cmluZy5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTI0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJET01TdHJpbmcuaCIKKwor
I2luY2x1ZGUgIldlYkRPTUNTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJp
bmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CisKK2NsYXNzIFdlYkRPTVN0cmluZ1ByaXZhdGUgOiBwdWJsaWMgV2ViQ29y
ZTo6U3RyaW5nSW1wbCB7Cit9OworCit2b2lkIFdlYkRPTVN0cmluZzo6cmVzZXQoKQoreworICAg
IGlmIChtX3ByaXZhdGUpIHsKKyAgICAgICAgbV9wcml2YXRlLT5kZXJlZigpOworICAgICAgICBt
X3ByaXZhdGUgPSAwOworICAgIH0KK30KKwordm9pZCBXZWJET01TdHJpbmc6OmFzc2lnbihjb25z
dCBXZWJET01TdHJpbmcmIG90aGVyKQoreworICAgIGFzc2lnbihjb25zdF9jYXN0PFdlYkRPTVN0
cmluZ1ByaXZhdGUqPihvdGhlci5tX3ByaXZhdGUpKTsKK30KKwordm9pZCBXZWJET01TdHJpbmc6
OmFzc2lnbihjb25zdCBXZWJVQ2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCkKK3sKKyAgICBhc3Np
Z24oc3RhdGljX2Nhc3Q8V2ViRE9NU3RyaW5nUHJpdmF0ZSo+KAorICAgICAgICBXZWJDb3JlOjpT
dHJpbmdJbXBsOjpjcmVhdGUoZGF0YSwgbGVuZ3RoKS5nZXQoKSkpOworfQorCitzaXplX3QgV2Vi
RE9NU3RyaW5nOjpsZW5ndGgoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUgPyBjb25z
dF9jYXN0PFdlYkRPTVN0cmluZ1ByaXZhdGUqPihtX3ByaXZhdGUpLT5sZW5ndGgoKSA6IDA7Cit9
CisKK2NvbnN0IFdlYlVDaGFyKiBXZWJET01TdHJpbmc6OmRhdGEoKSBjb25zdAoreworICAgIHJl
dHVybiBtX3ByaXZhdGUgPyBjb25zdF9jYXN0PFdlYkRPTVN0cmluZ1ByaXZhdGUqPihtX3ByaXZh
dGUpLT5jaGFyYWN0ZXJzKCkgOiAwOworfQorCitXZWJET01DU3RyaW5nIFdlYkRPTVN0cmluZzo6
dXRmOCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdlYkNvcmU6OlN0cmluZyhtX3ByaXZhdGUpLnV0
ZjgoKTsKK30KKworV2ViRE9NU3RyaW5nIFdlYkRPTVN0cmluZzo6ZnJvbVVURjgoY29uc3QgY2hh
ciogZGF0YSwgc2l6ZV90IGxlbmd0aCkKK3sKKyAgICByZXR1cm4gV2ViQ29yZTo6U3RyaW5nOjpm
cm9tVVRGOChkYXRhLCBsZW5ndGgpOworfQorCitXZWJET01TdHJpbmcgV2ViRE9NU3RyaW5nOjpm
cm9tVVRGOChjb25zdCBjaGFyKiBkYXRhKQoreworICAgIHJldHVybiBXZWJDb3JlOjpTdHJpbmc6
OmZyb21VVEY4KGRhdGEpOworfQorCitXZWJET01TdHJpbmc6OldlYkRPTVN0cmluZyhjb25zdCBX
ZWJDb3JlOjpTdHJpbmcmIHMpCisgICAgOiBtX3ByaXZhdGUoc3RhdGljX2Nhc3Q8V2ViRE9NU3Ry
aW5nUHJpdmF0ZSo+KHMuaW1wbCgpKSkKK3sKKyAgICBpZiAobV9wcml2YXRlKQorICAgICAgICBt
X3ByaXZhdGUtPnJlZigpOworfQorCitXZWJET01TdHJpbmcmIFdlYkRPTVN0cmluZzo6b3BlcmF0
b3I9KGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgcykKK3sKKyAgICBhc3NpZ24oc3RhdGljX2Nhc3Q8
V2ViRE9NU3RyaW5nUHJpdmF0ZSo+KHMuaW1wbCgpKSk7CisgICAgcmV0dXJuICp0aGlzOworfQor
CitXZWJET01TdHJpbmc6Om9wZXJhdG9yIFdlYkNvcmU6OlN0cmluZygpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fcHJpdmF0ZTsKK30KKworV2ViRE9NU3RyaW5nOjpXZWJET01TdHJpbmcoY29uc3Qg
V2ViQ29yZTo6QXRvbWljU3RyaW5nJiBzKQorICAgIDogbV9wcml2YXRlKDApCit7CisgICAgYXNz
aWduKHMuc3RyaW5nKCkpOworfQorCitXZWJET01TdHJpbmcmIFdlYkRPTVN0cmluZzo6b3BlcmF0
b3I9KGNvbnN0IFdlYkNvcmU6OkF0b21pY1N0cmluZyYgcykKK3sKKyAgICBhc3NpZ24ocy5zdHJp
bmcoKSk7CisgICAgcmV0dXJuICp0aGlzOworfQorCitXZWJET01TdHJpbmc6Om9wZXJhdG9yIFdl
YkNvcmU6OkF0b21pY1N0cmluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdlYkNvcmU6OkF0b21p
Y1N0cmluZyhzdGF0aWNfY2FzdDxXZWJDb3JlOjpTdHJpbmdJbXBsICo+KG1fcHJpdmF0ZSkpOwor
fQorCitib29sIFdlYkRPTVN0cmluZzo6ZXF1YWxzKGNvbnN0IGNoYXIqIHN0cmluZykgY29uc3QK
K3sKKyAgICByZXR1cm4gV2ViQ29yZTo6ZXF1YWwobV9wcml2YXRlLCBzdHJpbmcpOworfQorCit2
b2lkIFdlYkRPTVN0cmluZzo6YXNzaWduKFdlYkRPTVN0cmluZ1ByaXZhdGUqIHApCit7CisgICAg
Ly8gVGFrZSBjYXJlIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSBtX3ByaXZhdGUgPT0gcAorICAg
IGlmIChwKQorICAgICAgICBwLT5yZWYoKTsKKyAgICBpZiAobV9wcml2YXRlKQorICAgICAgICBt
X3ByaXZhdGUtPmRlcmVmKCk7CisgICAgbV9wcml2YXRlID0gcDsKK30KClByb3BlcnR5IGNoYW5n
ZXMgb246IFdlYkNvcmUvYmluZGluZ3MvY3BwL1dlYkRPTVN0cmluZy5jcHAKX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpB
ZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9jcHAv
V2ViRE9NU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9jcHAvV2ViRE9N
U3RyaW5nLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL2NwcC9XZWJET01TdHJp
bmcuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lm
bmRlZiBXZWJET01TdHJpbmdfaAorI2RlZmluZSBXZWJET01TdHJpbmdfaAorCisjaW5jbHVkZSA8
V2ViRE9NT2JqZWN0Lmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+IC8vIEZvciBzaXplX3QKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgU3RyaW5nOworY2xhc3MgQXRvbWljU3RyaW5nOworfQor
CitjbGFzcyBXZWJET01DU3RyaW5nOworY2xhc3MgV2ViRE9NU3RyaW5nUHJpdmF0ZTsKKworLy8g
QSBVVEYtMTYgc3RyaW5nIGNvbnRhaW5lci4gIEl0IGlzIGluZXhwZW5zaXZlIHRvIGNvcHkgYSBX
ZWJET01TdHJpbmcKKy8vIG9iamVjdC4KKy8vCisvLyBXQVJOSU5HOiBJdCBpcyBub3Qgc2FmZSB0
byBwYXNzIGEgV2ViRE9NU3RyaW5nIGFjcm9zcyB0aHJlYWRzISEhCisvLworY2xhc3MgV2ViRE9N
U3RyaW5nIHsKK3B1YmxpYzoKKyAgICB+V2ViRE9NU3RyaW5nKCkgeyByZXNldCgpOyB9CisKKyAg
ICBXZWJET01TdHJpbmcoKSA6IG1fcHJpdmF0ZSgwKSB7IH0KKworICAgIFdlYkRPTVN0cmluZyhj
b25zdCBXZWJVQ2hhciogZGF0YSwgc2l6ZV90IGxlbikgOiBtX3ByaXZhdGUoMCkKKyAgICB7Cisg
ICAgICAgIGFzc2lnbihkYXRhLCBsZW4pOworICAgIH0KKworICAgIFdlYkRPTVN0cmluZyhjb25z
dCBXZWJET01TdHJpbmcmIHMpIDogbV9wcml2YXRlKDApIHsgYXNzaWduKHMpOyB9CisKKyAgICBX
ZWJET01TdHJpbmcmIG9wZXJhdG9yPShjb25zdCBXZWJET01TdHJpbmcmIHMpCisgICAgeworICAg
ICAgICBhc3NpZ24ocyk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICB2b2lk
IHJlc2V0KCk7CisgICAgdm9pZCBhc3NpZ24oY29uc3QgV2ViRE9NU3RyaW5nJik7CisgICAgdm9p
ZCBhc3NpZ24oY29uc3QgV2ViVUNoYXIqIGRhdGEsIHNpemVfdCBsZW4pOworCisgICAgc2l6ZV90
IGxlbmd0aCgpIGNvbnN0OworICAgIGNvbnN0IFdlYlVDaGFyKiBkYXRhKCkgY29uc3Q7CisKKyAg
ICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiAhbGVuZ3RoKCk7IH0KKyAgICBib29sIGlz
TnVsbCgpIGNvbnN0IHsgcmV0dXJuICFtX3ByaXZhdGU7IH0KKworICAgIFdlYkRPTUNTdHJpbmcg
dXRmOCgpIGNvbnN0OworCisgICAgc3RhdGljIFdlYkRPTVN0cmluZyBmcm9tVVRGOChjb25zdCBj
aGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoKTsKKyAgICBzdGF0aWMgV2ViRE9NU3RyaW5nIGZyb21V
VEY4KGNvbnN0IGNoYXIqIGRhdGEpOworCisgICAgdGVtcGxhdGUgPGludCBOPiBXZWJET01TdHJp
bmcoY29uc3QgY2hhciAoJmRhdGEpW05dKQorICAgICAgICA6IG1fcHJpdmF0ZSgwKQorICAgIHsK
KyAgICAgICAgYXNzaWduKGZyb21VVEY4KGRhdGEsIE4gLSAxKSk7CisgICAgfQorCisgICAgdGVt
cGxhdGUgPGludCBOPiBXZWJET01TdHJpbmcmIG9wZXJhdG9yPShjb25zdCBjaGFyICgmZGF0YSlb
Tl0pCisgICAgeworICAgICAgICBhc3NpZ24oZnJvbVVURjgoZGF0YSwgTiAtIDEpKTsKKyAgICAg
ICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIFdlYkRPTVN0cmluZyhjb25zdCBXZWJDb3Jl
OjpTdHJpbmcmKTsKKyAgICBXZWJET01TdHJpbmcmIG9wZXJhdG9yPShjb25zdCBXZWJDb3JlOjpT
dHJpbmcmKTsKKyAgICBvcGVyYXRvciBXZWJDb3JlOjpTdHJpbmcoKSBjb25zdDsKKworICAgIFdl
YkRPTVN0cmluZyhjb25zdCBXZWJDb3JlOjpBdG9taWNTdHJpbmcmKTsKKyAgICBXZWJET01TdHJp
bmcmIG9wZXJhdG9yPShjb25zdCBXZWJDb3JlOjpBdG9taWNTdHJpbmcmKTsKKyAgICBvcGVyYXRv
ciBXZWJDb3JlOjpBdG9taWNTdHJpbmcoKSBjb25zdDsKKworICAgIGJvb2wgZXF1YWxzKGNvbnN0
IGNoYXIqIHN0cmluZykgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgdm9pZCBhc3NpZ24oV2ViRE9N
U3RyaW5nUHJpdmF0ZSopOworICAgIFdlYkRPTVN0cmluZ1ByaXZhdGUqIG1fcHJpdmF0ZTsKK307
CisKKyNlbmRpZgoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViQ29yZS9iaW5kaW5ncy9jcHAvV2Vi
RE9NU3RyaW5nLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCgpJbmRl
eDogV2ViQ29yZS9iaW5kaW5ncy9jcHAvV2ViRXhjZXB0aW9uSGFuZGxlcnMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvY3BwL1dlYkV4Y2VwdGlvbkhhbmRsZXJzLmNwcAkocmV2
aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3MvY3BwL1dlYkV4Y2VwdGlvbkhhbmRsZXJzLmNw
cAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgUmVz
ZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJFeGNlcHRpb25IYW5kbGVycy5o
IgorCit2b2lkIHdlYlJhaXNlRE9NRXhjZXB0aW9uKFdlYkRPTUV4Y2VwdGlvbkNvZGUpCit7Cisg
ICAgLy8gRklYTUU6IEltcGxlbWVudCBleGNlcHRpb24gaGFuZGxpbmcKK30KClByb3BlcnR5IGNo
YW5nZXMgb246IFdlYkNvcmUvYmluZGluZ3MvY3BwL1dlYkV4Y2VwdGlvbkhhbmRsZXJzLmNwcApf
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoKCkluZGV4OiBXZWJDb3JlL2Jp
bmRpbmdzL2NwcC9XZWJFeGNlcHRpb25IYW5kbGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YmluZGluZ3MvY3BwL1dlYkV4Y2VwdGlvbkhhbmRsZXJzLmgJKHJldmlzaW9uIDApCisrKyBXZWJD
b3JlL2JpbmRpbmdzL2NwcC9XZWJFeGNlcHRpb25IYW5kbGVycy5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGlt
aXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBX
ZWJFeGNlcHRpb25IYW5kbGVyc19oCisjZGVmaW5lIFdlYkV4Y2VwdGlvbkhhbmRsZXJzX2gKKwor
I2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgor
CisjaWYgIWRlZmluZWQoTkRFQlVHKSAmJiAhZGVmaW5lZChESVNBQkxFX1RIUkVBRF9DSEVDSykK
KyNkZWZpbmUgV0VCRE9NX0FTU0VSVF9NQUlOX1RIUkVBRCgpIGRvIFwKKyAgICBpZiAoIVdURjo6
aXNNYWluVGhyZWFkKCkpIHsgXAorICAgICAgICBXVEZSZXBvcnRBc3NlcnRpb25GYWlsdXJlKF9f
RklMRV9fLCBfX0xJTkVfXywgV1RGX1BSRVRUWV9GVU5DVElPTiwgIkRPTSBhY2Nlc3Mgb24gbm9u
LW1haW4gdGhyZWFkIC0tIHlvdSB3aWxsIHByb2JhYmx5IGNyYXNoIHNvb24hIik7IFwKKyAgICB9
IFwKK3doaWxlICgwKQorI2Vsc2UKKyNkZWZpbmUgV0VCRE9NX0FTU0VSVF9NQUlOX1RIUkVBRCgp
ICgodm9pZCkwKQorI2VuZGlmCisKK3R5cGVkZWYgaW50IFdlYkRPTUV4Y2VwdGlvbkNvZGU7Cit2
b2lkIHdlYlJhaXNlRE9NRXhjZXB0aW9uKFdlYkRPTUV4Y2VwdGlvbkNvZGUpOworCitpbmxpbmUg
dm9pZCB3ZWJET01SYWlzZUVycm9yKFdlYkRPTUV4Y2VwdGlvbkNvZGUgZWMpIAoreworICAgIGlm
IChlYykKKyAgICAgICAgd2ViUmFpc2VET01FeGNlcHRpb24oZWMpOworfQorCisjZW5kaWYKClBy
b3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvYmluZGluZ3MvY3BwL1dlYkV4Y2VwdGlvbkhhbmRs
ZXJzLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCgpJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy9jcHAvV2ViTmF0aXZlRXZlbnRMaXN0ZW5lci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy9jcHAvV2ViTmF0aXZlRXZlbnRMaXN0ZW5lci5jcHAJKHJldmlz
aW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL2NwcC9XZWJOYXRpdmVFdmVudExpc3RlbmVyLmNw
cAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgUmVz
ZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYk5hdGl2ZUV2ZW50TGlzdGVuZXIuaCIKKworI2lu
Y2x1ZGUgIldlYkRPTUV2ZW50LmgiCisKK1dlYk5hdGl2ZUV2ZW50TGlzdGVuZXI6OldlYk5hdGl2
ZUV2ZW50TGlzdGVuZXIoV2ViVXNlckV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyKQorICAgIDogV2Vi
Q29yZTo6RXZlbnRMaXN0ZW5lcihDUFBFdmVudExpc3RlbmVyVHlwZSksCisgICAgbV9saXN0ZW5l
cihsaXN0ZW5lcikKK3sKKyAgICBBU1NFUlQobV9saXN0ZW5lcik7CisgICAgbV9saXN0ZW5lci0+
cmVmKCk7Cit9CisKK1dlYk5hdGl2ZUV2ZW50TGlzdGVuZXI6On5XZWJOYXRpdmVFdmVudExpc3Rl
bmVyKCkKK3sKKyAgICBtX2xpc3RlbmVyLT5kZXJlZigpOworfQorCit2b2lkIFdlYk5hdGl2ZUV2
ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBXZWJDb3JlOjpFdmVudCogZXZlbnQpCit7CisgICAgbV9saXN0ZW5lci0+aGFuZGxlRXZlbnQo
d2ViS2l0KGV2ZW50KSk7Cit9CisKK2Jvb2wgV2ViTmF0aXZlRXZlbnRMaXN0ZW5lcjo6cmVwb3J0
RXJyb3IoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFdlYkNvcmU6OlN0
cmluZyYsIGNvbnN0IFdlYkNvcmU6OlN0cmluZyYsIGludCkKK3sKKyAgICAvLyBGSVhNRTogSW1w
bGVtZW50IGVycm9yIGhhbmRsaW5nCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFdlYk5h
dGl2ZUV2ZW50TGlzdGVuZXI6Om9wZXJhdG9yPT0oY29uc3QgV2ViQ29yZTo6RXZlbnRMaXN0ZW5l
ciYgb3RoZXIpCit7CisgICAgY29uc3QgV2ViTmF0aXZlRXZlbnRMaXN0ZW5lciogcHRyT3RoZXIg
PSBjYXN0KCZvdGhlcik7CisgICAgcmV0dXJuIHB0ck90aGVyICYmIG1fbGlzdGVuZXIgPT0gcHRy
T3RoZXItPm1fbGlzdGVuZXI7Cit9CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL2JpbmRp
bmdzL2NwcC9XZWJOYXRpdmVFdmVudExpc3RlbmVyLmNwcApfX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46
ZXhlY3V0YWJsZQogICArICoKCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2NwcC9XZWJOYXRpdmVF
dmVudExpc3RlbmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9jcHAvV2ViTmF0
aXZlRXZlbnRMaXN0ZW5lci5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy9jcHAv
V2ViTmF0aXZlRXZlbnRMaXN0ZW5lci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtA
cG9zdC5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYk5hdGl2ZUV2ZW50TGlzdGVuZXJfaAorI2Rl
ZmluZSBXZWJOYXRpdmVFdmVudExpc3RlbmVyX2gKKworI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIu
aCIKKyNpbmNsdWRlICJXZWJET01FdmVudExpc3RlbmVyLmgiCisKK2NsYXNzIFdlYk5hdGl2ZUV2
ZW50TGlzdGVuZXIgOiBwdWJsaWMgV2ViQ29yZTo6RXZlbnRMaXN0ZW5lciB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViTmF0aXZlRXZlbnRMaXN0ZW5lcj4gY3JlYXRlKFdlYlVz
ZXJFdmVudExpc3RlbmVyKiBsaXN0ZW5lcikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgV2ViTmF0aXZlRXZlbnRMaXN0ZW5lcihsaXN0ZW5lcikpOworICAgIH0KKworICAgIHN0
YXRpYyBjb25zdCBXZWJOYXRpdmVFdmVudExpc3RlbmVyKiBjYXN0KGNvbnN0IFdlYkNvcmU6OkV2
ZW50TGlzdGVuZXIqIGxpc3RlbmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGxpc3RlbmVyLT50
eXBlKCkgPT0gQ1BQRXZlbnRMaXN0ZW5lclR5cGUKKyAgICAgICAgICAgICAgICA/IHN0YXRpY19j
YXN0PGNvbnN0IFdlYk5hdGl2ZUV2ZW50TGlzdGVuZXIqPihsaXN0ZW5lcikKKyAgICAgICAgICAg
ICAgICA6IDA7CisgICAgfQorCisgICAgdmlydHVhbCB+V2ViTmF0aXZlRXZlbnRMaXN0ZW5lcigp
OworICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFdlYkNvcmU6OkV2ZW50TGlzdGVu
ZXImIG90aGVyKTsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQoV2Vi
Q29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYkNvcmU6OkV2ZW50Kik7CisgICAgdmly
dHVhbCBib29sIHJlcG9ydEVycm9yKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBj
b25zdCBXZWJDb3JlOjpTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgdXJs
LCBpbnQgbGluZU51bWJlcik7CisKK3Byb3RlY3RlZDoKKyAgICBXZWJOYXRpdmVFdmVudExpc3Rl
bmVyKFdlYlVzZXJFdmVudExpc3RlbmVyKik7CisgICAgV2ViVXNlckV2ZW50TGlzdGVuZXIqIG1f
bGlzdGVuZXI7Cit9OworCisjZW5kaWYKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvYmlu
ZGluZ3MvY3BwL1dlYk5hdGl2ZUV2ZW50TGlzdGVuZXIuaApfX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46
ZXhlY3V0YWJsZQogICArICoKCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvckNQUC5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29k
ZUdlbmVyYXRvckNQUC5wbQkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9yQ1BQLnBtCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk0OSBAQAorCisj
IENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5A
a2RlLm9yZz4KKyMgQ29weXJpZ2h0IChDKSAyMDA2IEFuZGVycyBDYXJsc3NvbiA8YW5kZXJzY2FA
bWFjLmNvbT4gCisjIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBTYW11ZWwgV2VpbmlnIDxzYW1A
d2Via2l0Lm9yZz4KKyMgQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgPGFw
QHdlYmtpdC5vcmc+CisjIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoQykgMjAwOSBDYW1lcm9u
IE1jQ29ybWFjayA8Y2FtQG1jYy5pZC5hdT4KKyMgQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBN
b3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisjIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorIyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisjIAorIyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyMg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjIAorIyBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisjIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyMgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisjCisKK3BhY2thZ2UgQ29kZUdlbmVyYXRvckNQUDsKKwordXNl
IEZpbGU6OnN0YXQ7CisKKyMgR2xvYmFsIFZhcmlhYmxlcworbXkgJG1vZHVsZSA9ICIiOworbXkg
JG91dHB1dERpciA9ICIiOworCitteSBAaGVhZGVyQ29udGVudEhlYWRlciA9ICgpOworbXkgQGhl
YWRlckNvbnRlbnQgPSAoKTsKK215ICVoZWFkZXJGb3J3YXJkRGVjbGFyYXRpb25zID0gKCk7CisK
K215IEBpbXBsQ29udGVudEhlYWRlciA9ICgpOworbXkgQGltcGxDb250ZW50ID0gKCk7CitteSAl
aW1wbEluY2x1ZGVzID0gKCk7CisKKyMgQ29uc3RhbnRzCitteSAkZXhjZXB0aW9uSW5pdCA9ICJX
ZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsiOworbXkgJGV4Y2VwdGlvblJhaXNlT25FcnJv
ciA9ICJ3ZWJET01SYWlzZUVycm9yKHN0YXRpY19jYXN0PFdlYkRPTUV4Y2VwdGlvbkNvZGU+KGVj
KSk7IjsKK215ICRhc3NlcnRNYWluVGhyZWFkID0gInsgV0VCRE9NX0FTU0VSVF9NQUlOX1RIUkVB
RCgpOyBXZWJDb3JlVGhyZWFkVmlvbGF0aW9uQ2hlY2tSb3VuZE9uZSgpOyB9IjsKKworIyBEZWZh
dWx0IExpY2Vuc2UgVGVtcGxhdGVzCitteSAkaGVhZGVyTGljZW5zZVRlbXBsYXRlID0gPDwgIkVP
RiI7CisvKgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEw
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIDxzYW0ud2VpbmlnXEBnbWFpbC5jb20+Cisg
KiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCitFT0YKKworbXkgJGltcGxlbWVudGF0aW9uTGljZW5zZVRlbXBsYXRlID0gPDwg
IkVPRiI7CisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJj
ZSBwcm9qZWN0LgorICogVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1i
aW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KK0VPRgorCisjIERlZmF1bHQgY29uc3RydWN0b3IKK3N1
YiBuZXcKK3sKKyAgICBteSAkb2JqZWN0ID0gc2hpZnQ7CisgICAgbXkgJHJlZmVyZW5jZSA9IHsg
fTsKKworICAgICRjb2RlR2VuZXJhdG9yID0gc2hpZnQ7CisgICAgJG91dHB1dERpciA9IHNoaWZ0
OworICAgIHNoaWZ0OyAjICR1c2VMYXllck9uVG9wCisgICAgc2hpZnQ7ICMgJHByZXByb2Nlc3Nv
cgorICAgIHNoaWZ0OyAjICR3cml0ZURlcGVuZGVuY2llcworCisgICAgYmxlc3MoJHJlZmVyZW5j
ZSwgJG9iamVjdCk7CisgICAgcmV0dXJuICRyZWZlcmVuY2U7Cit9CisKK3N1YiBmaW5pc2gKK3sK
KyAgICBteSAkb2JqZWN0ID0gc2hpZnQ7Cit9CisKKyMgUGFyYW1zOiAnZG9tQ2xhc3MnIHN0cnVj
dAorc3ViIEdlbmVyYXRlSW50ZXJmYWNlCit7CisgICAgbXkgJG9iamVjdCA9IHNoaWZ0OworICAg
IG15ICRkYXRhTm9kZSA9IHNoaWZ0OworICAgIG15ICRkZWZpbmVzID0gc2hpZnQ7CisKKyAgICBt
eSAkbmFtZSA9ICRkYXRhTm9kZS0+bmFtZTsKKyAgICBteSAkY2xhc3NOYW1lID0gR2V0Q2xhc3NO
YW1lKCRuYW1lKTsKKyAgICBteSAkcGFyZW50Q2xhc3NOYW1lID0gIldlYkRPTSIgLiBHZXRQYXJl
bnRJbXBsQ2xhc3NOYW1lKCRkYXRhTm9kZSk7CisKKyAgICAjIFN0YXJ0IGFjdHVhbCBnZW5lcmF0
aW9uLi4KKyAgICAkb2JqZWN0LT5HZW5lcmF0ZUhlYWRlcigkZGF0YU5vZGUpOworICAgICRvYmpl
Y3QtPkdlbmVyYXRlSW1wbGVtZW50YXRpb24oJGRhdGFOb2RlKTsKKworICAgICMgV3JpdGUgY2hh
bmdlcy4KKyAgICAkb2JqZWN0LT5Xcml0ZURhdGEoIldlYkRPTSIgLiAkbmFtZSk7Cit9CisKKyMg
UGFyYW1zOiAnaWRsRG9jdW1lbnQnIHN0cnVjdAorc3ViIEdlbmVyYXRlTW9kdWxlCit7CisgICAg
bXkgJG9iamVjdCA9IHNoaWZ0OworICAgIG15ICRkYXRhTm9kZSA9IHNoaWZ0OworCisgICAgJG1v
ZHVsZSA9ICRkYXRhTm9kZS0+bW9kdWxlOworfQorCitzdWIgR2V0Q2xhc3NOYW1lCit7CisgICAg
bXkgJG5hbWUgPSAkY29kZUdlbmVyYXRvci0+U3RyaXBNb2R1bGUoc2hpZnQpOworCisgICAgIyBz
cGVjaWFsIGNhc2VzCisgICAgcmV0dXJuICJXZWJET01TdHJpbmciIGlmICRjb2RlR2VuZXJhdG9y
LT5Jc1N0cmluZ1R5cGUoJG5hbWUpIG9yICRuYW1lIGVxICJTZXJpYWxpemVkU2NyaXB0VmFsdWUi
OworICAgIHJldHVybiAiV2ViRE9NQWJzdHJhY3RWaWV3IiBpZiAkbmFtZSBlcSAiRE9NV2luZG93
IjsKKyAgICByZXR1cm4gIldlYkRPTU9iamVjdCIgaWYgJG5hbWUgZXEgIkRPTU9iamVjdCI7Cisg
ICAgcmV0dXJuICJib29sIiBpZiAkbmFtZSBlcSAiYm9vbGVhbiI7CisgICAgcmV0dXJuICRuYW1l
IGlmICRjb2RlR2VuZXJhdG9yLT5Jc1ByaW1pdGl2ZVR5cGUoJG5hbWUpOworCisgICAgcmV0dXJu
ICJXZWJET00kbmFtZSI7Cit9CisKK3N1YiBHZXRJbXBsQ2xhc3NOYW1lCit7CisgICAgbXkgJG5h
bWUgPSAkY29kZUdlbmVyYXRvci0+U3RyaXBNb2R1bGUoc2hpZnQpOworCisgICAgcmV0dXJuICJE
T01XaW5kb3ciIGlmICRuYW1lIGVxICJBYnN0cmFjdFZpZXciOworICAgIHJldHVybiAkbmFtZTsK
K30KKworc3ViIEdldFBhcmVudEltcGxDbGFzc05hbWUKK3sKKyAgICBteSAkZGF0YU5vZGUgPSBz
aGlmdDsKKworICAgIHJldHVybiAiT2JqZWN0IiBpZiBAeyRkYXRhTm9kZS0+cGFyZW50c30gZXEg
MDsKKyAgICByZXR1cm4gJGNvZGVHZW5lcmF0b3ItPlN0cmlwTW9kdWxlKCRkYXRhTm9kZS0+cGFy
ZW50cygwKSk7Cit9CisKK3N1YiBHZXRQYXJlbnQKK3sKKyAgICBteSAkZGF0YU5vZGUgPSBzaGlm
dDsKKyAgICBteSAkbnVtUGFyZW50cyA9IEB7JGRhdGFOb2RlLT5wYXJlbnRzfTsKKworICAgIG15
ICRwYXJlbnQgPSAiIjsKKyAgICBpZiAoJG51bVBhcmVudHMgZXEgMCkgeworICAgICAgICAkcGFy
ZW50ID0gIldlYkRPTU9iamVjdCI7CisgICAgfSBlbHNpZiAoJG51bVBhcmVudHMgZXEgMSkgewor
ICAgICAgICBteSAkcGFyZW50TmFtZSA9ICRjb2RlR2VuZXJhdG9yLT5TdHJpcE1vZHVsZSgkZGF0
YU5vZGUtPnBhcmVudHMoMCkpOworICAgICAgICAkcGFyZW50ID0gIldlYkRPTSIgLiAkcGFyZW50
TmFtZTsKKyAgICB9IGVsc2UgeworICAgICAgICBteSBAcGFyZW50cyA9IEB7JGRhdGFOb2RlLT5w
YXJlbnRzfTsKKyAgICAgICAgbXkgJGZpcnN0UGFyZW50ID0gJGNvZGVHZW5lcmF0b3ItPlN0cmlw
TW9kdWxlKHNoaWZ0KEBwYXJlbnRzKSk7CisgICAgICAgICRwYXJlbnQgPSAiV2ViRE9NIiAuICRm
aXJzdFBhcmVudDsKKyAgICB9CisKKyAgICByZXR1cm4gJHBhcmVudDsKK30KKworc3ViIFNob3Vs
ZFNraXBUeXBlSW5JbXBsZW1lbnRhdGlvbgoreworICAgIG15ICR0eXBlSW5mbyA9IHNoaWZ0Owor
CisgICAgcmV0dXJuIDEgaWYgJHR5cGVJbmZvLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyJDdXN0b20ifQorICAgICAgICAgICAgIG9yICR0eXBlSW5mby0+c2lnbmF0dXJlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tQXJndW1lbnRIYW5kbGluZyJ9CisgICAgICAgICAgICAg
b3IgJHR5cGVJbmZvLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21HZXR0
ZXIifQorICAgICAgICAgICAgIG9yICR0eXBlSW5mby0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiQ3VzdG9tU2V0dGVyIn0KKyAgICAgICAgICAgICBvciAkdHlwZUluZm8tPnNpZ25h
dHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5lZWRzVXNlckdlc3R1cmVDaGVjayJ9OworCisg
ICAgIyBUT0RPOiBXZSBkb24ndCBnZW5lcmF0ZSBiaW5kaW5ncyBmb3IgU1ZHIHJlbGF0ZWQgaW50
ZXJmYWNlcyB5ZXQKKyAgICByZXR1cm4gMSBpZiAkdHlwZUluZm8tPnNpZ25hdHVyZS0+bmFtZSA9
fiAvZ2V0U1ZHRG9jdW1lbnQvOworCisgICAgcmV0dXJuIDEgaWYgJHR5cGVJbmZvLT5zaWduYXR1
cmUtPm5hbWUgPX4gL0NvbnN0cnVjdG9yLzsKKyAgICByZXR1cm4gMDsKK30KKworc3ViIFNob3Vs
ZFNraXBUeXBlSW5IZWFkZXIKK3sKKyAgICBteSAkdHlwZUluZm8gPSBzaGlmdDsKKworICAgICMg
VE9ETzogV2UgY3VycmVudGx5IGlnbm9yZSBhbnkgYXR0cmlidXRlL2Z1bmN0aW9uIG5lZWRpbmcg
Y3VzdG9tIGNvZGUKKyAgICByZXR1cm4gMSBpZiAkdHlwZUluZm8tPnNpZ25hdHVyZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57IkN1c3RvbUFyZ3VtZW50SGFuZGxpbmcifQorICAgICAgICAgICAgIG9y
ICR0eXBlSW5mby0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tR2V0dGVy
In07CisKKyAgICAjIFRPRE86IFdlIGRvbid0IGdlbmVyYXRlIGJpbmRpbmdzIGZvciBTVkcgcmVs
YXRlZCBpbnRlcmZhY2VzIHlldAorICAgIHJldHVybiAxIGlmICR0eXBlSW5mby0+c2lnbmF0dXJl
LT5uYW1lID1+IC9nZXRTVkdEb2N1bWVudC87CisKKyAgICByZXR1cm4gMSBpZiAkdHlwZUluZm8t
PnNpZ25hdHVyZS0+bmFtZSA9fiAvQ29uc3RydWN0b3IvOworICAgIHJldHVybiAwOworfQorCitz
dWIgR2V0Q1BQVHlwZQoreworICAgIG15ICR0eXBlID0gc2hpZnQ7CisgICAgbXkgJG5hbWUgPSBH
ZXRDbGFzc05hbWUoJHR5cGUpOworCisgICAgcmV0dXJuICRuYW1lIGlmICRjb2RlR2VuZXJhdG9y
LT5Jc1ByaW1pdGl2ZVR5cGUoJHR5cGUpIG9yICRjb2RlR2VuZXJhdG9yLT5Jc1N0cmluZ1R5cGUo
JHR5cGUpIG9yICR0eXBlIGVxICJET01UaW1lU3RhbXAiOworICAgIHJldHVybiAidW5zaWduZWQg
c2hvcnQiIGlmICR0eXBlIGVxICJDb21wYXJlSG93IjsKKyAgICByZXR1cm4gIiRuYW1lIjsKK30K
Kworc3ViIENvbnZlcnNpb25OZWVkZWQKK3sKKyAgICBteSAkdHlwZSA9ICRjb2RlR2VuZXJhdG9y
LT5TdHJpcE1vZHVsZShzaGlmdCk7CisgICAgcmV0dXJuICEkY29kZUdlbmVyYXRvci0+SXNOb25Q
b2ludGVyVHlwZSgkdHlwZSkgJiYgISRjb2RlR2VuZXJhdG9yLT5Jc1N0cmluZ1R5cGUoJHR5cGUp
OworfQorCitzdWIgR2V0Q1BQVHlwZUdldHRlcgoreworICAgIG15ICRhcmdOYW1lID0gc2hpZnQ7
CisgICAgbXkgJHR5cGUgPSAkY29kZUdlbmVyYXRvci0+U3RyaXBNb2R1bGUoc2hpZnQpOworCisg
ICAgcmV0dXJuICRhcmdOYW1lIGlmICRjb2RlR2VuZXJhdG9yLT5Jc1ByaW1pdGl2ZVR5cGUoJHR5
cGUpIG9yICRjb2RlR2VuZXJhdG9yLT5Jc1N0cmluZ1R5cGUoJHR5cGUpOworICAgIHJldHVybiAi
c3RhdGljX2Nhc3Q8V2ViQ29yZTo6UmFuZ2U6OkNvbXBhcmVIb3c+KCRhcmdOYW1lKSIgaWYgJHR5
cGUgZXEgIkNvbXBhcmVIb3ciOworICAgIHJldHVybiAiV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlw
dFZhbHVlOjpjcmVhdGUoV2ViQ29yZTo6U3RyaW5nKCRhcmdOYW1lKSkiIGlmICR0eXBlIGVxICJT
ZXJpYWxpemVkU2NyaXB0VmFsdWUiOworICAgIHJldHVybiAid2ViQ29yZSgkYXJnTmFtZSkiOwor
fQorCitzdWIgQWRkRm9yd2FyZERlY2xhcmF0aW9uc0ZvclR5cGUKK3sKKyAgICBteSAkdHlwZSA9
ICRjb2RlR2VuZXJhdG9yLT5TdHJpcE1vZHVsZShzaGlmdCk7CisgICAgbXkgJHB1YmxpYyA9IHNo
aWZ0OworCisgICAgcmV0dXJuIGlmICRjb2RlR2VuZXJhdG9yLT5Jc05vblBvaW50ZXJUeXBlKCR0
eXBlKSBvciAkY29kZUdlbmVyYXRvci0+SXNTdHJpbmdUeXBlKCR0eXBlKTsKKworICAgIG15ICRj
bGFzcyA9IEdldENsYXNzTmFtZSgkdHlwZSk7CisgICAgJGhlYWRlckZvcndhcmREZWNsYXJhdGlv
bnN7JGNsYXNzfSA9IDEgaWYgJHB1YmxpYzsKK30KKworc3ViIEFkZEluY2x1ZGVzRm9yVHlwZQor
eworICAgIG15ICR0eXBlID0gJGNvZGVHZW5lcmF0b3ItPlN0cmlwTW9kdWxlKHNoaWZ0KTsKKwor
ICAgIHJldHVybiBpZiAkY29kZUdlbmVyYXRvci0+SXNOb25Qb2ludGVyVHlwZSgkdHlwZSk7Cisg
ICAgcmV0dXJuIGlmICR0eXBlID1+IC9jY29uc3RydWN0b3IvOworCisgICAgaWYgKCRjb2RlR2Vu
ZXJhdG9yLT5Jc1N0cmluZ1R5cGUoJHR5cGUpKSB7CisgICAgICAgICRpbXBsSW5jbHVkZXN7IkF0
b21pY1N0cmluZy5oIn0gPSAxOworICAgICAgICAkaW1wbEluY2x1ZGVzeyJLVVJMLmgifSA9IDE7
CisgICAgICAgICRpbXBsSW5jbHVkZXN7IldlYkRPTVN0cmluZy5oIn0gPSAxOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKCR0eXBlIGVxICJET01PYmplY3QiKSB7CisgICAgICAg
ICRpbXBsSW5jbHVkZXN7IldlYkRPTU9iamVjdC5oIn0gPSAxOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKCR0eXBlIGVxICJET01XaW5kb3ciKSB7CisgICAgICAgICRpbXBsSW5j
bHVkZXN7IkRPTVdpbmRvdy5oIn0gPSAxOworICAgICAgICAkaW1wbEluY2x1ZGVzeyJXZWJET01B
YnN0cmFjdFZpZXcuaCJ9ID0gMTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICgk
dHlwZSBlcSAiRXZlbnRMaXN0ZW5lciIpIHsKKyAgICAgICAgJGltcGxJbmNsdWRlc3siV2ViTmF0
aXZlRXZlbnRMaXN0ZW5lci5oIn0gPSAxOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKCR0eXBlIGVxICJTZXJpYWxpemVkU2NyaXB0VmFsdWUiKSB7CisgICAgICAgICRpbXBsSW5j
bHVkZXN7IlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIn0gPSAxOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgJGltcGxJbmNsdWRlc3siTm9kZS5oIn0gPSAxIGlmICR0eXBlIGVxICJOb2Rl
TGlzdCI7CisgICAgJGltcGxJbmNsdWRlc3siQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uaCJ9
ID0gMSBpZiAkdHlwZSBlcSAiQ1NTU3R5bGVEZWNsYXJhdGlvbiI7CisKKyAgICAjIERlZmF1bHQs
IGluY2x1ZGUgdGhlIHNhbWUgbmFtZWQgZmlsZSAodGhlIGltcGxlbWVudGF0aW9uKSBhbmQgdGhl
IHNhbWUgbmFtZSBwcmVmaXhlZCB3aXRoICJXZWJET00iLiAKKyAgICAkaW1wbEluY2x1ZGVzeyIk
dHlwZS5oIn0gPSAxIHVubGVzcyAkdHlwZSBlcSAiRE9NT2JqZWN0IjsKKyAgICAkaW1wbEluY2x1
ZGVzeyJXZWJET00kdHlwZS5oIn0gPSAxOworfQorCitzdWIgR2VuZXJhdGVDb25kaXRpb25hbFN0
cmluZ0Zyb21BdHRyaWJ1dGVWYWx1ZQoreworICAgIG15ICRjb25kaXRpb25hbCA9IHNoaWZ0Owor
ICAgIGlmICgkY29uZGl0aW9uYWwgPX4gLyYvKSB7CisgICAgICAgIHJldHVybiAiRU5BQkxFKCIg
LiBqb2luKCIpICYmIEVOQUJMRSgiLCBzcGxpdCgvJi8sICRjb25kaXRpb25hbCkpIC4gIikiOwor
ICAgIH0gZWxzaWYgKCRjb25kaXRpb25hbCA9fiAvXHwvKSB7CisgICAgICAgIHJldHVybiAiRU5B
QkxFKCIgLiBqb2luKCIpIHx8IEVOQUJMRSgiLCBzcGxpdCgvXHwvLCAkY29uZGl0aW9uYWwpKSAu
ICIpIjsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gIkVOQUJMRSgiIC4gJGNvbmRpdGlv
bmFsIC4gIikiOworICAgIH0KK30KKworc3ViIEdlbmVyYXRlQ29uZGl0aW9uYWxTdHJpbmcKK3sK
KyAgICBteSAkbm9kZSA9IHNoaWZ0OworICAgIG15ICRjb25kaXRpb25hbCA9ICRub2RlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiQ29uZGl0aW9uYWwifTsKKyAgICBpZiAoJGNvbmRpdGlvbmFsKSB7
CisgICAgICAgIHJldHVybiBHZW5lcmF0ZUNvbmRpdGlvbmFsU3RyaW5nRnJvbUF0dHJpYnV0ZVZh
bHVlKCRjb25kaXRpb25hbCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuICIiOworICAg
IH0KK30KKworc3ViIEdlbmVyYXRlSGVhZGVyCit7CisgICAgbXkgJG9iamVjdCA9IHNoaWZ0Owor
ICAgIG15ICRkYXRhTm9kZSA9IHNoaWZ0OworCisgICAgbXkgJGludGVyZmFjZU5hbWUgPSAkZGF0
YU5vZGUtPm5hbWU7CisgICAgbXkgJGNsYXNzTmFtZSA9IEdldENsYXNzTmFtZSgkaW50ZXJmYWNl
TmFtZSk7CisgICAgbXkgJGltcGxDbGFzc05hbWUgPSBHZXRJbXBsQ2xhc3NOYW1lKCRpbnRlcmZh
Y2VOYW1lKTsKKyAgICBteSAkaW1wbENsYXNzTmFtZVdpdGhOYW1lc3BhY2UgPSAiV2ViQ29yZTo6
IiAuICRpbXBsQ2xhc3NOYW1lOworCisgICAgbXkgJHBhcmVudE5hbWUgPSAiIjsKKyAgICAkcGFy
ZW50TmFtZSA9IEdldFBhcmVudCgkZGF0YU5vZGUpOworCisgICAgbXkgJG51bUNvbnN0YW50cyA9
IEB7JGRhdGFOb2RlLT5jb25zdGFudHN9OworICAgIG15ICRudW1BdHRyaWJ1dGVzID0gQHskZGF0
YU5vZGUtPmF0dHJpYnV0ZXN9OworICAgIG15ICRudW1GdW5jdGlvbnMgPSBAeyRkYXRhTm9kZS0+
ZnVuY3Rpb25zfTsKKworICAgICMgLSBBZGQgZGVmYXVsdCBoZWFkZXIgdGVtcGxhdGUKKyAgICBA
aGVhZGVyQ29udGVudEhlYWRlciA9IHNwbGl0KCJcciIsICRoZWFkZXJMaWNlbnNlVGVtcGxhdGUp
OworICAgIHB1c2goQGhlYWRlckNvbnRlbnRIZWFkZXIsICJcbiNpZm5kZWYgJGNsYXNzTmFtZSIg
LiAiX2giKTsKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50SGVhZGVyLCAiXG4jZGVmaW5lICRjbGFz
c05hbWUiIC4gIl9oXG5cbiIpOworCisgICAgbXkgJGNvbmRpdGlvbmFsU3RyaW5nID0gR2VuZXJh
dGVDb25kaXRpb25hbFN0cmluZygkZGF0YU5vZGUpOworICAgIHB1c2goQGhlYWRlckNvbnRlbnRI
ZWFkZXIsICIjaWYgJHtjb25kaXRpb25hbFN0cmluZ31cblxuIikgaWYgJGNvbmRpdGlvbmFsU3Ry
aW5nOworCisgICAgIyAtIElOQ0xVREVTIC0KKyAgICBwdXNoKEBoZWFkZXJDb250ZW50SGVhZGVy
LCAiI2luY2x1ZGUgPCRwYXJlbnROYW1lLmg+XG4iKTsKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50
SGVhZGVyLCAiI2luY2x1ZGUgPFdlYkRPTVN0cmluZy5oPlxuIik7CisKKyAgICBwdXNoKEBoZWFk
ZXJDb250ZW50LCAiY2xhc3MgJGNsYXNzTmFtZSIpOworICAgIHB1c2goQGhlYWRlckNvbnRlbnQs
ICIgOiBwdWJsaWMgJHBhcmVudE5hbWUiKSBpZiAkcGFyZW50TmFtZTsKKyAgICBwdXNoKEBoZWFk
ZXJDb250ZW50LCAiIHtcbiIpOworICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJwdWJsaWM6XG4i
KTsKKworICAgICMgQ29uc3RydWN0b3IKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICRj
bGFzc05hbWUoKTtcbiIpOworICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgZXhwbGljaXQg
JGNsYXNzTmFtZSgkaW1wbENsYXNzTmFtZVdpdGhOYW1lc3BhY2UqKTtcbiIpOworCisgICAgIyBD
b3B5IGNvbnN0cnVjdG9yIG9uIGNsYXNzZXMgd2hpY2ggaGF2ZSB0aGUgZC1wdHIKKyAgICBpZiAo
QHskZGF0YU5vZGUtPnBhcmVudHN9IGVxIDApIHsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVu
dCwgIiAgICAkY2xhc3NOYW1lKGNvbnN0ICRjbGFzc05hbWUmKTtcbiIpOworICAgIH0KKworICAg
ICMgRGVzdHJ1Y3RvcgorICAgIGlmIChAeyRkYXRhTm9kZS0+cGFyZW50c30gZXEgMCkgeworICAg
ICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIH4kY2xhc3NOYW1lKCk7XG4iKTsKKyAgICB9
CisKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiXG4iKTsKKyAgICAkaGVhZGVyRm9yd2FyZERl
Y2xhcmF0aW9uc3skaW1wbENsYXNzTmFtZVdpdGhOYW1lc3BhY2V9ID0gMTsKKworICAgICMgLSBB
ZGQgY29uc3RhbnRzLgorICAgIGlmICgkbnVtQ29uc3RhbnRzID4gMCkgeworICAgICAgICBteSBA
aGVhZGVyQ29uc3RhbnRzID0gKCk7CisKKyAgICAgICAgIyBGSVhNRTogd2UgbmVlZCBhIHdheSB0
byBpbmNsdWRlIG11bHRpcGxlIGVudW1zLgorICAgICAgICBmb3JlYWNoIG15ICRjb25zdGFudCAo
QHskZGF0YU5vZGUtPmNvbnN0YW50c30pIHsKKyAgICAgICAgICAgIG15ICRjb25zdGFudE5hbWUg
PSAkY29uc3RhbnQtPm5hbWU7CisgICAgICAgICAgICBteSAkY29uc3RhbnRWYWx1ZSA9ICRjb25z
dGFudC0+dmFsdWU7CisKKyAgICAgICAgICAgIG15ICRvdXRwdXQgPSAiV0VCRE9NXyIgLiAkY29u
c3RhbnROYW1lIC4gIiA9ICIgLiAkY29uc3RhbnRWYWx1ZTsKKyAgICAgICAgICAgIHB1c2goQGhl
YWRlckNvbnN0YW50cywgIiAgICAgICAgIiAuICRvdXRwdXQpOworICAgICAgICB9CisKKyAgICAg
ICAgbXkgJGNvbWJpbmVkQ29uc3RhbnRzID0gam9pbigiLFxuIiwgQGhlYWRlckNvbnN0YW50cyk7
CisKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAiKTsKKyAgICAgICAgcHVzaChA
aGVhZGVyQ29udGVudCwgImVudW0ge1xuIik7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQs
ICRjb21iaW5lZENvbnN0YW50cyk7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJcbiAg
ICAiKTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIn07XG5cbiIpOworICAgIH0KKwor
ICAgIG15IEBoZWFkZXJBdHRyaWJ1dGVzID0gKCk7CisKKyAgICAjIC0gQWRkIGF0dHJpYnV0ZSBn
ZXR0ZXJzL3NldHRlcnMuCisgICAgaWYgKCRudW1BdHRyaWJ1dGVzID4gMCkgeworICAgICAgICBm
b3JlYWNoIG15ICRhdHRyaWJ1dGUgKEB7JGRhdGFOb2RlLT5hdHRyaWJ1dGVzfSkgeworICAgICAg
ICAgICAgbmV4dCBpZiBTaG91bGRTa2lwVHlwZUluSGVhZGVyKCRhdHRyaWJ1dGUpOworCisgICAg
ICAgICAgICBteSAkYXR0cmlidXRlTmFtZSA9ICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+bmFtZTsK
KyAgICAgICAgICAgIG15ICRhdHRyaWJ1dGVUeXBlID0gR2V0Q1BQVHlwZSgkYXR0cmlidXRlLT5z
aWduYXR1cmUtPnR5cGUpOworICAgICAgICAgICAgbXkgJGF0dHJpYnV0ZUlzUmVhZG9ubHkgPSAo
JGF0dHJpYnV0ZS0+dHlwZSA9fiAvXnJlYWRvbmx5Lyk7CisgICAgICAgICAgICBteSAkcHJvcGVy
dHkgPSAiICAgICIgLiAkYXR0cmlidXRlVHlwZSAuICgkYXR0cmlidXRlVHlwZSA9fiAvXCokLyA/
ICIiIDogIiAiKSAuICRhdHRyaWJ1dGVOYW1lIC4gIigpIGNvbnN0IjsKKworICAgICAgICAgICAg
bXkgJGF2YWlsYWJpbGl0eU1hY3JvID0gIiI7CisgICAgICAgICAgICBteSAkZGVjbGFyYXRpb25T
dWZmaXggPSAiO1xuIjsKKworICAgICAgICAgICAgQWRkRm9yd2FyZERlY2xhcmF0aW9uc0ZvclR5
cGUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT50eXBlLCAxKTsKKworICAgICAgICAgICAgbXkgJHNl
dHRlck5hbWUgPSAic2V0IiAuIHVjZmlyc3QoJGF0dHJpYnV0ZU5hbWUpOworCisgICAgICAgICAg
ICAkcHJvcGVydHkgLj0gJGRlY2xhcmF0aW9uU3VmZml4OworICAgICAgICAgICAgcHVzaChAaGVh
ZGVyQXR0cmlidXRlcywgJHByb3BlcnR5KTsKKyAgICAgICAgICAgIGlmICghJGF0dHJpYnV0ZUlz
UmVhZG9ubHkgYW5kICEkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJSZXBsYWNlYWJsZSJ9KSB7CisgICAgICAgICAgICAgICAgJHByb3BlcnR5ID0gIiAgICB2b2lk
ICRzZXR0ZXJOYW1lKGNvbnN0ICIgLiAkYXR0cmlidXRlVHlwZSAuICImKSI7CisgICAgICAgICAg
ICAgICAgJHByb3BlcnR5IC49ICRkZWNsYXJhdGlvblN1ZmZpeDsKKyAgICAgICAgICAgICAgICBw
dXNoKEBoZWFkZXJBdHRyaWJ1dGVzLCAkcHJvcGVydHkpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgQGhlYWRlckF0dHJpYnV0ZXMpIGlm
IEBoZWFkZXJBdHRyaWJ1dGVzID4gMDsKKyAgICB9CisKKyAgICBteSBAaGVhZGVyRnVuY3Rpb25z
ID0gKCk7CisgICAgbXkgQGRlcHJlY2F0ZWRIZWFkZXJGdW5jdGlvbnMgPSAoKTsKKyAgICBteSBA
aW50ZXJmYWNlRnVuY3Rpb25zID0gKCk7CisKKyAgICAjIC0gQWRkIGZ1bmN0aW9ucy4KKyAgICBp
ZiAoJG51bUZ1bmN0aW9ucyA+IDApIHsKKyAgICAgICAgZm9yZWFjaCBteSAkZnVuY3Rpb24gKEB7
JGRhdGFOb2RlLT5mdW5jdGlvbnN9KSB7CisgICAgICAgICAgICBuZXh0IGlmIFNob3VsZFNraXBU
eXBlSW5IZWFkZXIoJGZ1bmN0aW9uKTsKKyAgICAgICAgICAgIG15ICRmdW5jdGlvbk5hbWUgPSAk
ZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZTsKKworICAgICAgICAgICAgbXkgJHJldHVyblR5cGUg
PSBHZXRDUFBUeXBlKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT50eXBlKTsKKyAgICAgICAgICAgIG15
ICRudW1iZXJPZlBhcmFtZXRlcnMgPSBAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc307CisgICAgICAg
ICAgICBteSAldHlwZXNUb0ZvcndhcmREZWNsYXJlID0gKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT50
eXBlID0+IDEpOworCisgICAgICAgICAgICBteSAkcGFyYW1ldGVySW5kZXggPSAwOworICAgICAg
ICAgICAgbXkgJGZ1bmN0aW9uU2lnID0gIiRyZXR1cm5UeXBlICRmdW5jdGlvbk5hbWUoIjsKKyAg
ICAgICAgICAgIG15ICRtZXRob2ROYW1lID0gJGZ1bmN0aW9uTmFtZTsKKyAgICAgICAgICAgIGZv
cmVhY2ggbXkgJHBhcmFtIChAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc30pIHsKKyAgICAgICAgICAg
ICAgICBteSAkcGFyYW1OYW1lID0gJHBhcmFtLT5uYW1lOworICAgICAgICAgICAgICAgIG15ICRw
YXJhbVR5cGUgPSBHZXRDUFBUeXBlKCRwYXJhbS0+dHlwZSk7CisgICAgICAgICAgICAgICAgJHR5
cGVzVG9Gb3J3YXJkRGVjbGFyZXskcGFyYW0tPnR5cGV9ID0gMTsKKworICAgICAgICAgICAgICAg
ICRmdW5jdGlvblNpZyAuPSAiLCAiIGlmICRwYXJhbWV0ZXJJbmRleCA+PSAxOworICAgICAgICAg
ICAgICAgICRmdW5jdGlvblNpZyAuPSAiY29uc3QgJHBhcmFtVHlwZSYgJHBhcmFtTmFtZSI7Cisg
ICAgICAgICAgICAgICAgJHBhcmFtZXRlckluZGV4Kys7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAkZnVuY3Rpb25TaWcgLj0gIikiOworICAgICAgICAgICAgaWYgKCRkYXRhTm9kZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57IlB1cmVJbnRlcmZhY2UifSkgeworICAgICAgICAgICAgICAgIHB1
c2goQGludGVyZmFjZUZ1bmN0aW9ucywgIiAgICB2aXJ0dWFsICIgLiAkZnVuY3Rpb25TaWcgLiAi
ID0gMDtcbiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbXkgJGZ1bmN0aW9uRGVjbGFy
YXRpb24gPSAkZnVuY3Rpb25TaWc7CisgICAgICAgICAgICAkZnVuY3Rpb25EZWNsYXJhdGlvbiAu
PSAiO1xuIjsKKworICAgICAgICAgICAgZm9yZWFjaCBteSAkdHlwZSAoa2V5cyAldHlwZXNUb0Zv
cndhcmREZWNsYXJlKSB7CisgICAgICAgICAgICAgICAgIyBhZGQgYW55IGZvcndhcmQgZGVjbGFy
YXRpb25zIHRvIHRoZSBwdWJsaWMgaGVhZGVyIGlmIGEgZGVwcmVjYXRlZCB2ZXJzaW9uIHdpbGwg
YmUgZ2VuZXJhdGVkCisgICAgICAgICAgICAgICAgQWRkRm9yd2FyZERlY2xhcmF0aW9uc0ZvclR5
cGUoJHR5cGUsIDEpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwdXNoKEBoZWFkZXJG
dW5jdGlvbnMsICIgICAgIik7CisgICAgICAgICAgICBwdXNoKEBoZWFkZXJGdW5jdGlvbnMsICRm
dW5jdGlvbkRlY2xhcmF0aW9uKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChAaGVhZGVyRnVu
Y3Rpb25zID4gMCkgeworICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlxuIikgaWYg
QGhlYWRlckF0dHJpYnV0ZXMgPiAwOworICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwg
QGhlYWRlckZ1bmN0aW9ucyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdXNoKEBoZWFkZXJD
b250ZW50LCAiXG4iKTsKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICRpbXBsQ2xhc3NO
YW1lV2l0aE5hbWVzcGFjZSogaW1wbCgpIGNvbnN0O1xuIik7CisKKyAgICBpZiAoQHskZGF0YU5v
ZGUtPnBhcmVudHN9IGVxIDApIHsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlxucHJv
dGVjdGVkOlxuIik7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RydWN0ICR7
Y2xhc3NOYW1lfVByaXZhdGU7XG4iKTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAg
ICAke2NsYXNzTmFtZX1Qcml2YXRlKiBtX2Q7XG4iKTsKKyAgICB9CisKKyAgICBwdXNoKEBoZWFk
ZXJDb250ZW50LCAifTtcblxuIik7CisKKyAgICAjIGZvciBQdXJlSW50ZXJmYWNlIGNsYXNzZXMg
YWxzbyBhZGQgdGhlIGludGVyZmFjZSB0aGF0IHRoZSBjbGllbnQgY29kZSBuZWVkcyB0bworICAg
ICMgaW1wbGVtZW50CisgICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlB1
cmVJbnRlcmZhY2UifSkgeworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiY2xhc3MgV2Vi
VXNlciRpbnRlcmZhY2VOYW1lIHtcbiIpOworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAi
cHVibGljOlxuIik7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgdmlydHVhbCB2
b2lkIHJlZigpID0gMDtcbiIpOworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHZp
cnR1YWwgdm9pZCBkZXJlZigpID0gMDtcblxuIik7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRl
bnQsIEBpbnRlcmZhY2VGdW5jdGlvbnMpOworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAi
XG5wcm90ZWN0ZWQ6XG4iKTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB2aXJ0
dWFsIH5XZWJVc2VyJGludGVyZmFjZU5hbWUoKSB7fVxuIik7CisgICAgICAgIHB1c2goQGhlYWRl
ckNvbnRlbnQsICJ9O1xuXG4iKTsKKyAgICB9CisKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAi
V2ViQ29yZTo6JGltcGxDbGFzc05hbWUqIHdlYkNvcmUoY29uc3QgJGNsYXNzTmFtZSYpO1xuIik7
CisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiRjbGFzc05hbWUgd2ViS2l0KFdlYkNvcmU6OiRp
bXBsQ2xhc3NOYW1lKik7XG4iKTsKKyAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPnsiUHVyZUludGVyZmFjZSJ9KSB7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIk
Y2xhc3NOYW1lIHdlYktpdChXZWJVc2VyJGludGVyZmFjZU5hbWUqKTtcbiIpOworICAgIH0KKyAg
ICBwdXNoKEBoZWFkZXJDb250ZW50LCAiXG4jZW5kaWZcbiIpOworICAgIHB1c2goQGhlYWRlckNv
bnRlbnQsICIjZW5kaWYgLy8gJHtjb25kaXRpb25hbFN0cmluZ31cblxuIikgaWYgJGNvbmRpdGlv
bmFsU3RyaW5nOworfQorCitzdWIgQWRkRWFybHlSZXR1cm5TdGF0ZW1lbnQKK3sKKyAgICBteSAk
cmV0dXJuVHlwZSA9IHNoaWZ0OworCisgICAgaWYgKCFkZWZpbmVkKCRyZXR1cm5UeXBlKSBvciAk
cmV0dXJuVHlwZSBlcSAidm9pZCIpIHsKKyAgICAgICAgJHJldHVyblR5cGUgPSAiIjsKKyAgICB9
IGVsc2lmICgkY29kZUdlbmVyYXRvci0+SXNQcmltaXRpdmVUeXBlKCRyZXR1cm5UeXBlKSkgewor
ICAgICAgICAkcmV0dXJuVHlwZSA9ICIgMCI7CisgICAgfSBlbHNpZiAoJHJldHVyblR5cGUgZXEg
ImJvb2wiKSB7CisgICAgICAgICRyZXR1cm5UeXBlID0gIiBmYWxzZSI7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgJHJldHVyblR5cGUgPSAiICRyZXR1cm5UeXBlKCkiOworICAgIH0KKworICAgICMg
VE9ETzogV2UgY291bGQgc2V0IGV4Y2VwdGlvbnMgaGVyZSwgaWYgd2Ugd2FudCB0aGF0CisgICAg
bXkgJHN0YXRlbWVudCA9ICIgICAgaWYgKCFpbXBsKCkpXG4iOworICAgICRzdGF0ZW1lbnQgLj0g
ICAiICAgICAgICByZXR1cm4kcmV0dXJuVHlwZTtcblxuIjsKKyAgICByZXR1cm4gJHN0YXRlbWVu
dDsKK30KKworc3ViIEFkZFJldHVyblN0YXRlbWVudAoreworICAgIG15ICR0eXBlSW5mbyA9IHNo
aWZ0OworICAgIG15ICRyZXR1cm5WYWx1ZSA9IHNoaWZ0OworCisgICAgIyBVc2VkIHRvIGludm9r
ZSBLVVJMcyAiY29uc3QgU3RyaW5nJiIgb3BlcmF0b3IKKyAgICBpZiAoJGNvZGVHZW5lcmF0b3It
PklzU3RyaW5nVHlwZSgkdHlwZUluZm8tPnNpZ25hdHVyZS0+dHlwZSkpIHsKKyAgICAgICAgcmV0
dXJuICIgICAgcmV0dXJuIChjb25zdCBXZWJDb3JlOjpTdHJpbmcmKSAkcmV0dXJuVmFsdWU7XG4i
OworICAgIH0KKworICAgIHJldHVybiAiICAgIHJldHVybiAkcmV0dXJuVmFsdWU7XG4iOworfQor
CitzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgoreworICAgIG15ICRvYmplY3QgPSBzaGlmdDsK
KyAgICBteSAkZGF0YU5vZGUgPSBzaGlmdDsKKworICAgIG15IEBhbmNlc3RvckludGVyZmFjZU5h
bWVzID0gKCk7CisKKyAgICBpZiAoQHskZGF0YU5vZGUtPnBhcmVudHN9ID4gMSkgeworICAgICAg
ICAkY29kZUdlbmVyYXRvci0+QWRkTWV0aG9kc0NvbnN0YW50c0FuZEF0dHJpYnV0ZXNGcm9tUGFy
ZW50Q2xhc3NlcygkZGF0YU5vZGUsIFxAYW5jZXN0b3JJbnRlcmZhY2VOYW1lcyk7CisgICAgfQor
CisgICAgbXkgJGludGVyZmFjZU5hbWUgPSAkZGF0YU5vZGUtPm5hbWU7CisgICAgbXkgJGNsYXNz
TmFtZSA9IEdldENsYXNzTmFtZSgkaW50ZXJmYWNlTmFtZSk7CisgICAgbXkgJGltcGxDbGFzc05h
bWUgPSBHZXRJbXBsQ2xhc3NOYW1lKCRpbnRlcmZhY2VOYW1lKTsKKyAgICBteSAkcGFyZW50SW1w
bENsYXNzTmFtZSA9IEdldFBhcmVudEltcGxDbGFzc05hbWUoJGRhdGFOb2RlKTsKKyAgICBteSAk
aW1wbENsYXNzTmFtZVdpdGhOYW1lc3BhY2UgPSAiV2ViQ29yZTo6IiAuICRpbXBsQ2xhc3NOYW1l
OworICAgIG15ICRiYXNlQ2xhc3MgPSAiV2ViRE9NJHBhcmVudEltcGxDbGFzc05hbWUiOworICAg
IG15ICRjb25kaXRpb25hbCA9ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNvbmRp
dGlvbmFsIn07CisKKyAgICBteSAkbnVtQXR0cmlidXRlcyA9IEB7JGRhdGFOb2RlLT5hdHRyaWJ1
dGVzfTsKKyAgICBteSAkbnVtRnVuY3Rpb25zID0gQHskZGF0YU5vZGUtPmZ1bmN0aW9uc307CisK
KyAgICAjIC0gQWRkIGRlZmF1bHQgaGVhZGVyIHRlbXBsYXRlLgorICAgIEBpbXBsQ29udGVudEhl
YWRlciA9IHNwbGl0KCJcciIsICRpbXBsZW1lbnRhdGlvbkxpY2Vuc2VUZW1wbGF0ZSk7CisKKyAg
ICAjIC0gSU5DTFVERVMgLQorICAgIHB1c2goQGltcGxDb250ZW50SGVhZGVyLCAiXG4jaW5jbHVk
ZSBcImNvbmZpZy5oXCJcbiIpOworICAgIG15ICRjb25kaXRpb25hbFN0cmluZyA9IEdlbmVyYXRl
Q29uZGl0aW9uYWxTdHJpbmcoJGRhdGFOb2RlKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudEhlYWRl
ciwgIlxuI2lmICR7Y29uZGl0aW9uYWxTdHJpbmd9XG5cbiIpIGlmICRjb25kaXRpb25hbFN0cmlu
ZzsKKyAgICBwdXNoKEBpbXBsQ29udGVudEhlYWRlciwgIiNpbmNsdWRlIFwiJGNsYXNzTmFtZS5o
XCJcblxuIik7CisKKyAgICAkaW1wbEluY2x1ZGVzeyJXZWJFeGNlcHRpb25IYW5kbGVycy5oIn0g
PSAxOworICAgICRpbXBsSW5jbHVkZXN7IlRocmVhZENoZWNrLmgifSA9IDE7CisgICAgJGltcGxJ
bmNsdWRlc3siJGltcGxDbGFzc05hbWUuaCJ9ID0gMTsKKyAgICBAaW1wbENvbnRlbnQgPSAoKTsK
KworICAgIHB1c2goQGltcGxDb250ZW50LCAiI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD5cbiIpOwor
ICAgIHB1c2goQGltcGxDb250ZW50LCAiI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD5cblxuIik7CisK
KyAgICAjIFByaXZhdGUgZGF0YXN0cnVjdHVyZSwgZW5jYXBzdWxhdGluZyBXZWJDb3JlIHR5cGVz
CisgICAgaWYgKEB7JGRhdGFOb2RlLT5wYXJlbnRzfSBlcSAwKSB7CisgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAic3RydWN0ICR7Y2xhc3NOYW1lfTo6JHtjbGFzc05hbWV9UHJpdmF0ZSB7XG4i
KTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJHtjbGFzc05hbWV9UHJpdmF0ZSgk
aW1wbENsYXNzTmFtZVdpdGhOYW1lc3BhY2UqIF9pbXBsID0gMClcbiIpOworICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICAgICAgOiBpbXBsKF9pbXBsKVxuIik7CisgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgIHtcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICB9XG5cbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBSZWZQdHI8JGltcGxD
bGFzc05hbWVXaXRoTmFtZXNwYWNlPiBpbXBsO1xuIik7CisgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAifTtcblxuIik7CisgICAgfQorCisgICAgIyBDb25zdHJ1Y3RvcgorICAgIHB1c2goQGlt
cGxDb250ZW50LCAiJHtjbGFzc05hbWV9OjokY2xhc3NOYW1lKClcbiIpOworICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIDogJHtiYXNlQ2xhc3N9KClcbiIpOworICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgICwgbV9kKDApXG4iKSBpZiAoQHskZGF0YU5vZGUtPnBhcmVudHN9IGVxIDApOwor
ICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9
XG5cbiIpOworCisgICAgcHVzaChAaW1wbENvbnRlbnQsICIke2NsYXNzTmFtZX06OiRjbGFzc05h
bWUoJGltcGxDbGFzc05hbWVXaXRoTmFtZXNwYWNlKiBpbXBsKVxuIik7CisgICAgaWYgKEB7JGRh
dGFOb2RlLT5wYXJlbnRzfSBlcSAwKSB7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IDogJHtiYXNlQ2xhc3N9KClcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAs
IG1fZChuZXcgJHtjbGFzc05hbWV9UHJpdmF0ZShpbXBsKSlcbiIpOworICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIntcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7
CisKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIke2NsYXNzTmFtZX06OiR7Y2xhc3NOYW1l
fShjb25zdCAke2NsYXNzTmFtZX0mIGNvcHkpXG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgOiAke2Jhc2VDbGFzc30oKVxuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAie1xuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIG1fZCA9IGNvcHkuaW1w
bCgpID8gbmV3ICR7Y2xhc3NOYW1lfVByaXZhdGUoY29weS5pbXBsKCkpIDogMDtcbiIpOworICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CisKKyAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIkaW1wbENsYXNzTmFtZVdpdGhOYW1lc3BhY2UqICR7Y2xhc3NOYW1lfTo6aW1wbCgp
IGNvbnN0XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKKyAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIG1fZCA/IG1fZC0+aW1wbC5nZXQoKSA6IDA7
XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOworCisgICAgICAgICMg
RGVzdHJ1Y3RvcgorICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiR7Y2xhc3NOYW1lfTo6fiRj
bGFzc05hbWUoKVxuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CisgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGRlbGV0ZSBtX2Q7XG4iKTsKKyAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgbV9kID0gMDtcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIn1cblxuIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgOiAke2Jhc2VDbGFzc30oaW1wbClcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIntcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CisKKyAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIkaW1wbENsYXNzTmFtZVdpdGhOYW1lc3BhY2UqICR7Y2xh
c3NOYW1lfTo6aW1wbCgpIGNvbnN0XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7
XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIHN0YXRpY19jYXN0
PCRpbXBsQ2xhc3NOYW1lV2l0aE5hbWVzcGFjZSo+KCR7YmFzZUNsYXNzfTo6aW1wbCgpKTtcbiIp
OworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CisgICAgfQorCisgICAgIyBT
VEFSVCBpbXBsZW1lbnRhdGlvbgorICAgICVhdHRyaWJ1dGVOYW1lcyA9ICgpOworCisgICAgIyAt
IEF0dHJpYnV0ZXMKKyAgICBpZiAoJG51bUF0dHJpYnV0ZXMgPiAwKSB7CisgICAgICAgIGZvcmVh
Y2ggbXkgJGF0dHJpYnV0ZSAoQHskZGF0YU5vZGUtPmF0dHJpYnV0ZXN9KSB7CisgICAgICAgICAg
ICBuZXh0IGlmIFNob3VsZFNraXBUeXBlSW5JbXBsZW1lbnRhdGlvbigkYXR0cmlidXRlKTsKKyAg
ICAgICAgICAgIEFkZEluY2x1ZGVzRm9yVHlwZSgkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGUp
OworCisgICAgICAgICAgICBteSAkaWRsVHlwZSA9ICRjb2RlR2VuZXJhdG9yLT5TdHJpcE1vZHVs
ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGUpOworCisgICAgICAgICAgICBteSAkYXR0cmli
dXRlTmFtZSA9ICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+bmFtZTsKKyAgICAgICAgICAgIG15ICRh
dHRyaWJ1dGVUeXBlID0gR2V0Q1BQVHlwZSgkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGUpOwor
ICAgICAgICAgICAgbXkgJGF0dHJpYnV0ZUlzUmVhZG9ubHkgPSAoJGF0dHJpYnV0ZS0+dHlwZSA9
fiAvXnJlYWRvbmx5Lyk7CisgICAgICAgICAgICBteSAkYXR0cmlidXRlQ2xhc3NOYW1lID0gR2V0
Q2xhc3NOYW1lKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+dHlwZSk7CisKKyAgICAgICAgICAgIG15
ICRhdHRyaWJ1dGVJbnRlcmZhY2VOYW1lID0gJGF0dHJpYnV0ZU5hbWU7CisgICAgICAgICAgICBp
ZiAoJGF0dHJpYnV0ZU5hbWUgZXEgIm93bmVyRG9jdW1lbnQiKSB7CisgICAgICAgICAgICAgICAg
IyBGSVhNRTogZm9yIG5vdyBzcGVjaWFsIGNhc2UgYXR0cmlidXRlIG93bmVyRG9jdW1lbnQgdG8g
Y2FsbCBkb2N1bWVudCwgdGhpcyBpcyBpbmNvcnJlY3QKKyAgICAgICAgICAgICAgICAjIGxlZ2Fj
eSBiZWhhdmlvci4gKHNlZSBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MDg4OSkKKyAgICAgICAgICAgICAgICAkYXR0cmlidXRlTmFtZSA9ICJkb2N1bWVudCI7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAkYXR0cmlidXRlTmFtZXN7JGF0dHJpYnV0ZUludGVyZmFj
ZU5hbWV9ID0gMTsKKworICAgICAgICAgICAgIyAtIEdFVFRFUgorICAgICAgICAgICAgbXkgJGdl
dHRlclNpZyA9ICIkYXR0cmlidXRlVHlwZSAkY2xhc3NOYW1lXDpcOiRhdHRyaWJ1dGVJbnRlcmZh
Y2VOYW1lKCkgY29uc3RcbiI7CisgICAgICAgICAgICBteSAkaGFzR2V0dGVyRXhjZXB0aW9uID0g
QHskYXR0cmlidXRlLT5nZXR0ZXJFeGNlcHRpb25zfTsKKyAgICAgICAgICAgIG15ICRnZXR0ZXJD
b250ZW50SGVhZDsKKyAgICAgICAgICAgIG15ICRyZWZsZWN0ID0gJGF0dHJpYnV0ZS0+c2lnbmF0
dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiUmVmbGVjdCJ9OworICAgICAgICAgICAgbXkgJHJl
ZmxlY3RVUkwgPSAkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJS
ZWZsZWN0VVJMIn07CisgICAgICAgICAgICBpZiAoJHJlZmxlY3QgfHwgJHJlZmxlY3RVUkwpIHsK
KyAgICAgICAgICAgICAgICBteSAkY29udGVudEF0dHJpYnV0ZU5hbWUgPSAoKCRyZWZsZWN0IHx8
ICRyZWZsZWN0VVJMKSBlcSAiMSIpID8gJGF0dHJpYnV0ZU5hbWUgOiAoJHJlZmxlY3QgfHwgJHJl
ZmxlY3RVUkwpOworICAgICAgICAgICAgICAgIG15ICRuYW1lc3BhY2UgPSAkY29kZUdlbmVyYXRv
ci0+TmFtZXNwYWNlRm9yQXR0cmlidXRlTmFtZSgkaW50ZXJmYWNlTmFtZSwgJGNvbnRlbnRBdHRy
aWJ1dGVOYW1lKTsKKyAgICAgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyIke25hbWVzcGFjZX0u
aCJ9ID0gMTsKKyAgICAgICAgICAgICAgICBteSAkZ2V0QXR0cmlidXRlRnVuY3Rpb25OYW1lID0g
JHJlZmxlY3RVUkwgPyAiZ2V0VVJMQXR0cmlidXRlIiA6ICJnZXRBdHRyaWJ1dGUiOworICAgICAg
ICAgICAgICAgICRnZXR0ZXJDb250ZW50SGVhZCA9ICJpbXBsKCktPiR7Z2V0QXR0cmlidXRlRnVu
Y3Rpb25OYW1lfShXZWJDb3JlOjoke25hbWVzcGFjZX06OiR7Y29udGVudEF0dHJpYnV0ZU5hbWV9
QXR0ciI7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICRnZXR0ZXJDb250
ZW50SGVhZCA9ICJpbXBsKCktPiIgLiAkY29kZUdlbmVyYXRvci0+V0tfbGNmaXJzdCgkYXR0cmli
dXRlTmFtZSkgLiAiKCI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBteSAkZ2V0dGVyQ29u
dGVudFRhaWwgPSAiKSI7CisKKyAgICAgICAgICAgICMgU3BlY2lhbCBjYXNlcworICAgICAgICAg
ICAgbXkgQGN1c3RvbUdldHRlckNvbnRlbnQgPSAoKTsgCisgICAgICAgICAgICBpZiAoJGF0dHJp
YnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29udmVydFRvU3RyaW5nIn0p
IHsKKyAgICAgICAgICAgICAgICAkZ2V0dGVyQ29udGVudEhlYWQgPSAiV2ViQ29yZTo6U3RyaW5n
OjpudW1iZXIoIiAuICRnZXR0ZXJDb250ZW50SGVhZDsKKyAgICAgICAgICAgICAgICAkZ2V0dGVy
Q29udGVudFRhaWwgLj0gIikiOworICAgICAgICAgICAgfSBlbHNpZiAoJGF0dHJpYnV0ZS0+c2ln
bmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29udmVydEZyb21TdHJpbmcifSkgeworICAg
ICAgICAgICAgICAgICRnZXR0ZXJDb250ZW50VGFpbCAuPSAiLnRvSW50KCkiOworICAgICAgICAg
ICAgfSBlbHNpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT50eXBlIGVxICJTZXJpYWxpemVkU2Ny
aXB0VmFsdWUiKSB7CisgICAgICAgICAgICAgICAgJGdldHRlckNvbnRlbnRIZWFkID0gIiRnZXR0
ZXJDb250ZW50SGVhZCI7CisgICAgICAgICAgICAgICAgJGdldHRlckNvbnRlbnRUYWlsIC49ICIt
PnRvU3RyaW5nKCkiOyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIH0gZWxzaWYgKENvbnZl
cnNpb25OZWVkZWQoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT50eXBlKSkgeworICAgICAgICAgICAg
ICAgICRnZXR0ZXJDb250ZW50SGVhZCA9ICJ3ZWJLaXQoV1RGOjpnZXRQdHIoJGdldHRlckNvbnRl
bnRIZWFkIjsKKyAgICAgICAgICAgICAgICAkZ2V0dGVyQ29udGVudFRhaWwgLj0gIikpIjsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgbXkgJGdldHRlckNvbnRlbnQ7CisgICAgICAgICAg
ICBpZiAoJGhhc0dldHRlckV4Y2VwdGlvbikgeworICAgICAgICAgICAgICAgICRnZXR0ZXJDb250
ZW50ID0gJGdldHRlckNvbnRlbnRIZWFkIC4gImVjIiAuICRnZXR0ZXJDb250ZW50VGFpbDsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgJGdldHRlckNvbnRlbnQgPSAkZ2V0
dGVyQ29udGVudEhlYWQgLiAkZ2V0dGVyQ29udGVudFRhaWw7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIG15ICRhdHRyaWJ1dGVDb25kaXRpb25hbFN0cmluZyA9IEdlbmVyYXRlQ29uZGl0
aW9uYWxTdHJpbmcoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlKTsKKyAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiI2lmICR7YXR0cmlidXRlQ29uZGl0aW9uYWxTdHJpbmd9XG4iKSBpZiAkYXR0
cmlidXRlQ29uZGl0aW9uYWxTdHJpbmc7CisKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAkZ2V0dGVyU2lnKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7Cisg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgQWRkRWFybHlSZXR1cm5TdGF0ZW1lbnQoJGF0
dHJpYnV0ZVR5cGUpKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCBAY3VzdG9tR2V0
dGVyQ29udGVudCk7CisgICAgICAgICAgICBpZiAoJGhhc0dldHRlckV4Y2VwdGlvbikgeworICAg
ICAgICAgICAgICAgICMgRGlmZmVyZW50aWF0ZWQgYmV0d2VlbiB3aGVuIHRoZSByZXR1cm4gdHlw
ZSBpcyBhIHBvaW50ZXIgYW5kCisgICAgICAgICAgICAgICAgIyBub3QgZm9yIHdoaXRlIHNwYWNl
IGlzc3VlIChpZS4gRm9vICpyZXN1bHQgdnMuIGludCByZXN1bHQpLgorICAgICAgICAgICAgICAg
IGlmICgkYXR0cmlidXRlVHlwZSA9fiAvXCokLykgeworICAgICAgICAgICAgICAgICAgICAkZ2V0
dGVyQ29udGVudCA9ICRhdHRyaWJ1dGVUeXBlIC4gInJlc3VsdCA9ICIgLiAkZ2V0dGVyQ29udGVu
dDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAkZ2V0dGVy
Q29udGVudCA9ICRhdHRyaWJ1dGVUeXBlIC4gIiByZXN1bHQgPSAiIC4gJGdldHRlckNvbnRlbnQ7
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgJGV4Y2VwdGlvbkluaXRcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgICRnZXR0ZXJDb250ZW50O1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgJGV4Y2VwdGlvblJhaXNlT25FcnJvclxuIik7CisgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsIEFkZFJldHVyblN0YXRlbWVudCgkYXR0cmlidXRlLCAicmVz
dWx0IikpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgQWRkUmV0dXJuU3RhdGVtZW50KCRhdHRyaWJ1dGUsICRnZXR0ZXJDb250ZW50KSk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7
CisKKyAgICAgICAgICAgICMgLSBTRVRURVIKKyAgICAgICAgICAgIGlmICghJGF0dHJpYnV0ZUlz
UmVhZG9ubHkgYW5kICEkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJSZXBsYWNlYWJsZSJ9KSB7CisgICAgICAgICAgICAgICAgIyBFeGNlcHRpb24gaGFuZGxpbmcK
KyAgICAgICAgICAgICAgICBteSAkaGFzU2V0dGVyRXhjZXB0aW9uID0gQHskYXR0cmlidXRlLT5z
ZXR0ZXJFeGNlcHRpb25zfTsKKworICAgICAgICAgICAgICAgIG15ICRjb3JlU2V0dGVyTmFtZSA9
ICJzZXQiIC4gJGNvZGVHZW5lcmF0b3ItPldLX3VjZmlyc3QoJGF0dHJpYnV0ZU5hbWUpOworICAg
ICAgICAgICAgICAgIG15ICRzZXR0ZXJOYW1lID0gInNldCIgLiB1Y2ZpcnN0KCRhdHRyaWJ1dGVJ
bnRlcmZhY2VOYW1lKTsKKyAgICAgICAgICAgICAgICBteSAkYXJnTmFtZSA9ICJuZXciIC4gdWNm
aXJzdCgkYXR0cmlidXRlSW50ZXJmYWNlTmFtZSk7CisgICAgICAgICAgICAgICAgbXkgJGFyZyA9
IEdldENQUFR5cGVHZXR0ZXIoJGFyZ05hbWUsICRpZGxUeXBlKTsKKworICAgICAgICAgICAgICAg
ICMgVGhlIGRlZmluaXRpb24gb2YgQ29udmVydEZyb21TdHJpbmcgYW5kIENvbnZlcnRUb1N0cmlu
ZyBpcyBmbGlwcGVkIGZvciB0aGUgc2V0dGVyCisgICAgICAgICAgICAgICAgaWYgKCRhdHRyaWJ1
dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNvbnZlcnRGcm9tU3RyaW5nIn0p
IHsKKyAgICAgICAgICAgICAgICAgICAgJGFyZyA9ICJXZWJDb3JlOjpTdHJpbmc6Om51bWJlcigk
YXJnKSI7CisgICAgICAgICAgICAgICAgfSBlbHNpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29udmVydFRvU3RyaW5nIn0pIHsKKyAgICAgICAgICAgICAg
ICAgICAgJGFyZyA9ICJXZWJDb3JlOjpTdHJpbmcoJGFyZykudG9JbnQoKSI7CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ2b2lkICRjbGFz
c05hbWVcOlw6JHNldHRlck5hbWUoY29uc3QgJGF0dHJpYnV0ZVR5cGUmICRhcmdOYW1lKVxuIik7
CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKKyAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgQWRkRWFybHlSZXR1cm5TdGF0ZW1lbnQoKSk7CisKKyAg
ICAgICAgICAgICAgICBteSAkcmVmbGVjdCA9ICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57IlJlZmxlY3QifTsKKyAgICAgICAgICAgICAgICBteSAkcmVmbGVjdFVS
TCA9ICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlJlZmxlY3RV
UkwifTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAkZXhjZXB0aW9u
SW5pdFxuIikgaWYgJGhhc1NldHRlckV4Y2VwdGlvbjsKKyAgICAgICAgICAgICAgICBteSAkZWMg
PSAkaGFzU2V0dGVyRXhjZXB0aW9uID8gIiwgZWMiIDogIiI7CisgICAgICAgICAgICAgICAgaWYg
KCRyZWZsZWN0IHx8ICRyZWZsZWN0VVJMKSB7CisgICAgICAgICAgICAgICAgICAgIG15ICRjb250
ZW50QXR0cmlidXRlTmFtZSA9ICgoJHJlZmxlY3QgfHwgJHJlZmxlY3RVUkwpIGVxICIxIikgPyAk
YXR0cmlidXRlTmFtZSA6ICgkcmVmbGVjdCB8fCAkcmVmbGVjdFVSTCk7CisgICAgICAgICAgICAg
ICAgICAgIG15ICRuYW1lc3BhY2UgPSAkY29kZUdlbmVyYXRvci0+TmFtZXNwYWNlRm9yQXR0cmli
dXRlTmFtZSgkaW50ZXJmYWNlTmFtZSwgJGNvbnRlbnRBdHRyaWJ1dGVOYW1lKTsKKyAgICAgICAg
ICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siJHtuYW1lc3BhY2V9LmgifSA9IDE7CisgICAgICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGltcGwoKS0+c2V0QXR0cmlidXRl
KFdlYkNvcmU6OiR7bmFtZXNwYWNlfTo6JHtjb250ZW50QXR0cmlidXRlTmFtZX1BdHRyLCAkYXJn
JGVjKTtcbiIpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIGltcGwoKS0+JGNvcmVTZXR0ZXJOYW1lKCRhcmckZWMp
O1xuIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgICRleGNlcHRpb25SYWlzZU9uRXJyb3JcbiIpIGlmICRoYXNTZXR0ZXJFeGNlcHRp
b247CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiNlbmRpZlxuIikgaWYg
JGF0dHJpYnV0ZUNvbmRpdGlvbmFsU3RyaW5nOworICAgICAgICB9CisgICAgfQorCisgICAgIyAt
IEZ1bmN0aW9ucworICAgIGlmICgkbnVtRnVuY3Rpb25zID4gMCkgeworICAgICAgICBmb3JlYWNo
IG15ICRmdW5jdGlvbiAoQHskZGF0YU5vZGUtPmZ1bmN0aW9uc30pIHsKKyAgICAgICAgICAgICMg
VHJlYXQgUHVyZUludGVyZmFjZSBhcyBDdXN0b20gYXMgd2VsbCwgc2luY2UgdGhlIFdlYkNvcmUg
dmVyc2lvbnMgd2lsbCB0YWtlIGEgc2NyaXB0IGNvbnRleHQgYXMgd2VsbAorICAgICAgICAgICAg
bmV4dCBpZiBTaG91bGRTa2lwVHlwZUluSW1wbGVtZW50YXRpb24oJGZ1bmN0aW9uKSB8fCAkZGF0
YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJQdXJlSW50ZXJmYWNlIn07CisgICAgICAgICAg
ICBBZGRJbmNsdWRlc0ZvclR5cGUoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPnR5cGUpOworCisgICAg
ICAgICAgICBteSAkZnVuY3Rpb25OYW1lID0gJGZ1bmN0aW9uLT5zaWduYXR1cmUtPm5hbWU7Cisg
ICAgICAgICAgICBteSAkcmV0dXJuVHlwZSA9IEdldENQUFR5cGUoJGZ1bmN0aW9uLT5zaWduYXR1
cmUtPnR5cGUpOworICAgICAgICAgICAgbXkgJGhhc1BhcmFtZXRlcnMgPSBAeyRmdW5jdGlvbi0+
cGFyYW1ldGVyc307CisgICAgICAgICAgICBteSAkcmFpc2VzRXhjZXB0aW9ucyA9IEB7JGZ1bmN0
aW9uLT5yYWlzZXNFeGNlcHRpb25zfTsKKworICAgICAgICAgICAgbXkgQHBhcmFtZXRlck5hbWVz
ID0gKCk7CisgICAgICAgICAgICBteSBAbmVlZHNBc3NlcnQgPSAoKTsKKyAgICAgICAgICAgIG15
ICVuZWVkc0N1c3RvbSA9ICgpOworCisgICAgICAgICAgICBteSAkcGFyYW1ldGVySW5kZXggPSAw
OworICAgICAgICAgICAgbXkgJGZ1bmN0aW9uU2lnID0gIiRyZXR1cm5UeXBlICRjbGFzc05hbWVc
Olw6JGZ1bmN0aW9uTmFtZSgiOworICAgICAgICAgICAgZm9yZWFjaCBteSAkcGFyYW0gKEB7JGZ1
bmN0aW9uLT5wYXJhbWV0ZXJzfSkgeworICAgICAgICAgICAgICAgIG15ICRwYXJhbU5hbWUgPSAk
cGFyYW0tPm5hbWU7CisgICAgICAgICAgICAgICAgbXkgJHBhcmFtVHlwZSA9IEdldENQUFR5cGUo
JHBhcmFtLT50eXBlKTsKKworICAgICAgICAgICAgICAgICMgbWFrZSBhIG5ldyBwYXJhbWV0ZXIg
bmFtZSBpZiB0aGUgb3JpZ2luYWwgY29uZmxpY3RzIHdpdGggYSBwcm9wZXJ0eSBuYW1lCisgICAg
ICAgICAgICAgICAgJHBhcmFtTmFtZSA9ICJpbiIgLiB1Y2ZpcnN0KCRwYXJhbU5hbWUpIGlmICRh
dHRyaWJ1dGVOYW1lc3skcGFyYW1OYW1lfTsKKworICAgICAgICAgICAgICAgIEFkZEluY2x1ZGVz
Rm9yVHlwZSgkcGFyYW0tPnR5cGUpOworCisgICAgICAgICAgICAgICAgbXkgJGlkbFR5cGUgPSAk
Y29kZUdlbmVyYXRvci0+U3RyaXBNb2R1bGUoJHBhcmFtLT50eXBlKTsKKyAgICAgICAgICAgICAg
ICBteSAkaW1wbEdldHRlciA9IEdldENQUFR5cGVHZXR0ZXIoJHBhcmFtTmFtZSwgJGlkbFR5cGUp
OworCisgICAgICAgICAgICAgICAgcHVzaChAcGFyYW1ldGVyTmFtZXMsICRpbXBsR2V0dGVyKTsK
KyAgICAgICAgICAgICAgICAkbmVlZHNDdXN0b217Ik5vZGVUb1JldHVybiJ9ID0gJHBhcmFtTmFt
ZSBpZiAkcGFyYW0tPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJSZXR1cm4ifTsKKworICAgICAgICAg
ICAgICAgIHVubGVzcyAoJGNvZGVHZW5lcmF0b3ItPklzUHJpbWl0aXZlVHlwZSgkaWRsVHlwZSkg
b3IgJGNvZGVHZW5lcmF0b3ItPklzU3RyaW5nVHlwZSgkaWRsVHlwZSkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgcHVzaChAbmVlZHNBc3NlcnQsICIgICAgQVNTRVJUKCRwYXJhbU5hbWUpO1xuIik7
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgJGZ1bmN0aW9uU2lnIC49ICIs
ICIgaWYgJHBhcmFtZXRlckluZGV4ID49IDE7CisgICAgICAgICAgICAgICAgJGZ1bmN0aW9uU2ln
IC49ICJjb25zdCAkcGFyYW1UeXBlJiAkcGFyYW1OYW1lIjsKKyAgICAgICAgICAgICAgICAkcGFy
YW1ldGVySW5kZXgrKzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgJGZ1bmN0aW9uU2ln
IC49ICIpIjsKKworICAgICAgICAgICAgbXkgQGZ1bmN0aW9uQ29udGVudCA9ICgpOworICAgICAg
ICAgICAgcHVzaChAcGFyYW1ldGVyTmFtZXMsICJlYyIpIGlmICRyYWlzZXNFeGNlcHRpb25zOwor
ICAgICAgICAgICAgbXkgJGNvbnRlbnQgPSAiaW1wbCgpLT4iIC4gJGNvZGVHZW5lcmF0b3ItPldL
X2xjZmlyc3QoJGZ1bmN0aW9uTmFtZSkgLiAiKCIgLiBqb2luKCIsICIsIEBwYXJhbWV0ZXJOYW1l
cykgLiAiKSI7IAorCisgICAgICAgICAgICBpZiAoJHJldHVyblR5cGUgZXEgInZvaWQiKSB7Cisg
ICAgICAgICAgICAgICAgIyBTcGVjaWFsIGNhc2UgJ3ZvaWQnIHJldHVybiB0eXBlLgorICAgICAg
ICAgICAgICAgIGlmICgkcmFpc2VzRXhjZXB0aW9ucykgeworICAgICAgICAgICAgICAgICAgICBw
dXNoKEBmdW5jdGlvbkNvbnRlbnQsICIgICAgJGV4Y2VwdGlvbkluaXRcbiIpOworICAgICAgICAg
ICAgICAgICAgICBwdXNoKEBmdW5jdGlvbkNvbnRlbnQsICIgICAgJGNvbnRlbnQ7XG4iKTsKKyAg
ICAgICAgICAgICAgICAgICAgcHVzaChAZnVuY3Rpb25Db250ZW50LCAiICAgICRleGNlcHRpb25S
YWlzZU9uRXJyb3JcbiIpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgIHB1c2goQGZ1bmN0aW9uQ29udGVudCwgIiAgICAkY29udGVudDtcbiIpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzaWYgKGRlZmluZWQgJG5lZWRzQ3VzdG9teyJO
b2RlVG9SZXR1cm4ifSkgeworICAgICAgICAgICAgICAgICMgVE9ETzogVGhpcyBpcyBpbXBvcnRh
bnQgdG8gZW5hYmxlLCBvbmNlIHdlIGNhcmUgYWJvdXQgY3VzdG9tIGNvZGUhCisKKyAgICAgICAg
ICAgICAgICAjIFNwZWNpYWwgY2FzZSB0aGUgaW5zZXJ0QmVmb3JlLCByZXBsYWNlQ2hpbGQsIHJl
bW92ZUNoaWxkIAorICAgICAgICAgICAgICAgICMgYW5kIGFwcGVuZENoaWxkIGZ1bmN0aW9ucyBm
cm9tIERPTU5vZGUgCisgICAgICAgICAgICAgICAgbXkgJHRvUmV0dXJuID0gJG5lZWRzQ3VzdG9t
eyJOb2RlVG9SZXR1cm4ifTsKKyAgICAgICAgICAgICAgICBpZiAoJHJhaXNlc0V4Y2VwdGlvbnMp
IHsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAZnVuY3Rpb25Db250ZW50LCAiICAgICRleGNl
cHRpb25Jbml0XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAZnVuY3Rpb25Db250ZW50
LCAiICAgIGlmICgkY29udGVudClcbiIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEBmdW5j
dGlvbkNvbnRlbnQsICIgICAgICAgIHJldHVybiAkdG9SZXR1cm47XG4iKTsKKyAgICAgICAgICAg
ICAgICAgICAgcHVzaChAZnVuY3Rpb25Db250ZW50LCAiICAgICRleGNlcHRpb25SYWlzZU9uRXJy
b3JcbiIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEBmdW5jdGlvbkNvbnRlbnQsICIgICAg
cmV0dXJuICRjbGFzc05hbWUoKTtcbiIpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgIHB1c2goQGZ1bmN0aW9uQ29udGVudCwgIiAgICBpZiAoJGNvbnRlbnQp
XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAZnVuY3Rpb25Db250ZW50LCAiICAgICAg
ICByZXR1cm4gJHRvUmV0dXJuO1xuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGZ1bmN0
aW9uQ29udGVudCwgIiAgICByZXR1cm4gTlVMTDtcbiIpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKENvbnZlcnNpb25OZWVkZWQo
JGZ1bmN0aW9uLT5zaWduYXR1cmUtPnR5cGUpKSB7CisgICAgICAgICAgICAgICAgICAgICRjb250
ZW50ID0gIndlYktpdChXVEY6OmdldFB0cigkY29udGVudCkpIjsKKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICBpZiAoJHJhaXNlc0V4Y2VwdGlvbnMpIHsKKyAgICAgICAgICAg
ICAgICAgICAgIyBEaWZmZXJlbnRpYXRlZCBiZXR3ZWVuIHdoZW4gdGhlIHJldHVybiB0eXBlIGlz
IGEgcG9pbnRlciBhbmQKKyAgICAgICAgICAgICAgICAgICAgIyBub3QgZm9yIHdoaXRlIHNwYWNl
IGlzc3VlIChpZS4gRm9vICpyZXN1bHQgdnMuIGludCByZXN1bHQpLgorICAgICAgICAgICAgICAg
ICAgICBpZiAoJHJldHVyblR5cGUgPX4gL1wqJC8pIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICRjb250ZW50ID0gJHJldHVyblR5cGUgLiAicmVzdWx0ID0gIiAuICRjb250ZW50OworICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgJGNvbnRlbnQg
PSAkcmV0dXJuVHlwZSAuICIgcmVzdWx0ID0gIiAuICRjb250ZW50OworICAgICAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAZnVuY3Rpb25Db250ZW50LCAiICAg
ICRleGNlcHRpb25Jbml0XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAZnVuY3Rpb25D
b250ZW50LCAiICAgICRjb250ZW50O1xuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGZ1
bmN0aW9uQ29udGVudCwgIiAgICAkZXhjZXB0aW9uUmFpc2VPbkVycm9yXG4iKTsKKyAgICAgICAg
ICAgICAgICAgICAgcHVzaChAZnVuY3Rpb25Db250ZW50LCAiICAgIHJldHVybiByZXN1bHQ7XG4i
KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBwdXNoKEBm
dW5jdGlvbkNvbnRlbnQsICIgICAgcmV0dXJuICRjb250ZW50O1xuIik7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiRm
dW5jdGlvblNpZ1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwor
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsIEFkZEVhcmx5UmV0dXJuU3RhdGVtZW50KCRy
ZXR1cm5UeXBlKSk7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgQGZ1bmN0aW9uQ29u
dGVudCk7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CisKKyAgICAg
ICAgICAgICMgQ2xlYXIgdGhlIGhhc2gKKyAgICAgICAgICAgICVuZWVkc0N1c3RvbSA9ICgpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgIyBFTkQgaW1wbGVtZW50YXRpb24KKworICAgICMgR2Vu
ZXJhdGUgaW50ZXJuYWwgaW50ZXJmYWNlcworICAgIHB1c2goQGltcGxDb250ZW50LCAiV2ViQ29y
ZTo6JGltcGxDbGFzc05hbWUqIHdlYkNvcmUoY29uc3QgJGNsYXNzTmFtZSYgd3JhcHBlcilcbiIp
OworICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgcmV0dXJuIHdyYXBwZXIuaW1wbCgpO1xuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQs
ICJ9XG5cbiIpOworCisgICAgcHVzaChAaW1wbENvbnRlbnQsICIkY2xhc3NOYW1lIHdlYktpdChX
ZWJDb3JlOjokaW1wbENsYXNzTmFtZSogdmFsdWUpXG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIntcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICRhc3NlcnRNYWluVGhyZWFk
O1xuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuICRjbGFzc05hbWUodmFs
dWUpO1xuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG4iKTsKKworICAgICMgLSBFbmQg
dGhlIGlmZGVmIGNvbmRpdGlvbmFsIGlmIG5lY2Vzc2FyeQorICAgIHB1c2goQGltcGxDb250ZW50
LCAiXG4jZW5kaWYgLy8gJHtjb25kaXRpb25hbFN0cmluZ31cbiIpIGlmICRjb25kaXRpb25hbFN0
cmluZzsKK30KKworIyBJbnRlcm5hbCBoZWxwZXIKK3N1YiBXcml0ZURhdGEKK3sKKyAgICBteSAk
b2JqZWN0ID0gc2hpZnQ7CisgICAgbXkgJG5hbWUgPSBzaGlmdDsKKworICAgICMgT3BlbiBmaWxl
cyBmb3Igd3JpdGluZy4uLgorICAgIG15ICRoZWFkZXJGaWxlTmFtZSA9ICIkb3V0cHV0RGlyLyIg
LiAkbmFtZSAuICIuaCI7CisgICAgbXkgJGltcGxGaWxlTmFtZSA9ICIkb3V0cHV0RGlyLyIgLiAk
bmFtZSAuICIuY3BwIjsKKworICAgICMgUmVtb3ZlIG9sZCBmaWxlcy4KKyAgICB1bmxpbmsoJGhl
YWRlckZpbGVOYW1lKTsKKyAgICB1bmxpbmsoJGltcGxGaWxlTmFtZSk7CisKKyAgICAjIFdyaXRl
IHB1YmxpYyBoZWFkZXIuCisgICAgb3BlbihIRUFERVIsICI+JGhlYWRlckZpbGVOYW1lIikgb3Ig
ZGllICJDb3VsZG4ndCBvcGVuIGZpbGUgJGhlYWRlckZpbGVOYW1lIjsKKyAgICAKKyAgICBwcmlu
dCBIRUFERVIgQGhlYWRlckNvbnRlbnRIZWFkZXI7CisgICAgcHJpbnQgSEVBREVSICJcbiI7Cisg
ICAgZm9yZWFjaCBteSAkY2xhc3MgKHNvcnQga2V5cyglaGVhZGVyRm9yd2FyZERlY2xhcmF0aW9u
cykpIHsKKyAgICAgICAgaWYgKCRjbGFzcyA9fiAvOjovKSB7CisgICAgICAgICAgICBteSAkbmFt
ZXNwYWNlUGFydCA9ICRjbGFzczsKKyAgICAgICAgICAgICRuYW1lc3BhY2VQYXJ0ID1+IHMvOjou
Ki8vOworCisgICAgICAgICAgICBteSAkY2xhc3NQYXJ0ID0gJGNsYXNzOworICAgICAgICAgICAg
JGNsYXNzUGFydCA9fiBzLyR7bmFtZXNwYWNlUGFydH06Oi8vOworCisgICAgICAgICAgICBwcmlu
dCBIRUFERVIgIm5hbWVzcGFjZSAkbmFtZXNwYWNlUGFydCB7XG4gICAgY2xhc3MgJGNsYXNzUGFy
dDtcbn07XG5cbiI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwcmludCBIRUFERVIg
ImNsYXNzICRjbGFzcztcbiIKKyAgICAgICAgfQorICAgIH0KKworICAgIG15ICRoYXNGb3J3YXJk
RGVjbGFyYXRpb25zID0ga2V5cyglaGVhZGVyRm9yd2FyZERlY2xhcmF0aW9ucyk7CisgICAgcHJp
bnQgSEVBREVSICJcbiIgaWYgJGhhc0ZvcndhcmREZWNsYXJhdGlvbnM7CisgICAgcHJpbnQgSEVB
REVSIEBoZWFkZXJDb250ZW50OworICAgIGNsb3NlKEhFQURFUik7CisKKyAgICBAaGVhZGVyQ29u
dGVudEhlYWRlciA9ICgpOworICAgIEBoZWFkZXJDb250ZW50ID0gKCk7CisgICAgJWhlYWRlckZv
cndhcmREZWNsYXJhdGlvbnMgPSAoKTsKKworICAgICMgV3JpdGUgaW1wbGVtZW50YXRpb24gZmls
ZS4KKyAgICBvcGVuKElNUEwsICI+JGltcGxGaWxlTmFtZSIpIG9yIGRpZSAiQ291bGRuJ3Qgb3Bl
biBmaWxlICRpbXBsRmlsZU5hbWUiOworCisgICAgcHJpbnQgSU1QTCBAaW1wbENvbnRlbnRIZWFk
ZXI7CisgICAgcHJpbnQgSU1QTCBtYXAgeyAiI2luY2x1ZGUgXCIkX1wiXG4iIH0gc29ydCBrZXlz
KCVpbXBsSW5jbHVkZXMpOworICAgIHByaW50IElNUEwgQGltcGxDb250ZW50OworICAgIGNsb3Nl
KElNUEwpOworCisgICAgQGltcGxDb250ZW50SGVhZGVyID0gKCk7CisgICAgQGltcGxDb250ZW50
ID0gKCk7CisgICAgJWltcGxJbmNsdWRlcyA9ICgpOworfQorCisxOwoKUHJvcGVydHkgY2hhbmdl
cyBvbjogV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JDUFAucG0KX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCgpJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RPYmouY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmNwcAkocmV2aXNpb24g
MCkKKysrIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmNw
cAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzOTMgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFy
dCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiBUaGlzIGZpbGUgaGFzIGJl
ZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViRE9NVGVzdE9iai5oIgorCisjaW5jbHVkZSAi
QXRvbWljU3RyaW5nLmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIlRlc3RPYmouaCIK
KyNpbmNsdWRlICJUaHJlYWRDaGVjay5oIgorI2luY2x1ZGUgIldlYkRPTVN0cmluZy5oIgorI2lu
Y2x1ZGUgIldlYkRPTVRlc3RPYmouaCIKKyNpbmNsdWRlICJXZWJFeGNlcHRpb25IYW5kbGVycy5o
IgorI2luY2x1ZGUgIldlYk5hdGl2ZUV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+CisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorCitzdHJ1Y3QgV2ViRE9NVGVzdE9iajo6
V2ViRE9NVGVzdE9ialByaXZhdGUgeworICAgIFdlYkRPTVRlc3RPYmpQcml2YXRlKFdlYkNvcmU6
OlRlc3RPYmoqIF9pbXBsID0gMCkKKyAgICAgICAgOiBpbXBsKF9pbXBsKQorICAgIHsKKyAgICB9
CisKKyAgICBSZWZQdHI8V2ViQ29yZTo6VGVzdE9iaj4gaW1wbDsKK307CisKK1dlYkRPTVRlc3RP
Ymo6OldlYkRPTVRlc3RPYmooKQorICAgIDogV2ViRE9NT2JqZWN0KCkKKyAgICAsIG1fZCgwKQor
eworfQorCitXZWJET01UZXN0T2JqOjpXZWJET01UZXN0T2JqKFdlYkNvcmU6OlRlc3RPYmoqIGlt
cGwpCisgICAgOiBXZWJET01PYmplY3QoKQorICAgICwgbV9kKG5ldyBXZWJET01UZXN0T2JqUHJp
dmF0ZShpbXBsKSkKK3sKK30KKworV2ViRE9NVGVzdE9iajo6V2ViRE9NVGVzdE9iaihjb25zdCBX
ZWJET01UZXN0T2JqJiBjb3B5KQorICAgIDogV2ViRE9NT2JqZWN0KCkKK3sKKyAgICBtX2QgPSBj
b3B5LmltcGwoKSA/IG5ldyBXZWJET01UZXN0T2JqUHJpdmF0ZShjb3B5LmltcGwoKSkgOiAwOwor
fQorCitXZWJDb3JlOjpUZXN0T2JqKiBXZWJET01UZXN0T2JqOjppbXBsKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9kID8gbV9kLT5pbXBsLmdldCgpIDogMDsKK30KKworV2ViRE9NVGVzdE9iajo6
fldlYkRPTVRlc3RPYmooKQoreworICAgIGRlbGV0ZSBtX2Q7CisgICAgbV9kID0gMDsKK30KKwor
bG9uZyBXZWJET01UZXN0T2JqOjpyZWFkT25seUludEF0dHIoKSBjb25zdAoreworICAgIGlmICgh
aW1wbCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBpbXBsKCktPnJlYWRPbmx5
SW50QXR0cigpOworfQorCitXZWJET01TdHJpbmcgV2ViRE9NVGVzdE9iajo6cmVhZE9ubHlTdHJp
bmdBdHRyKCkgY29uc3QKK3sKKyAgICBpZiAoIWltcGwoKSkKKyAgICAgICAgcmV0dXJuIFdlYkRP
TVN0cmluZygpOworCisgICAgcmV0dXJuIChjb25zdCBXZWJDb3JlOjpTdHJpbmcmKSBpbXBsKCkt
PnJlYWRPbmx5U3RyaW5nQXR0cigpOworfQorCitXZWJET01UZXN0T2JqIFdlYkRPTVRlc3RPYmo6
OnJlYWRPbmx5VGVzdE9iakF0dHIoKSBjb25zdAoreworICAgIGlmICghaW1wbCgpKQorICAgICAg
ICByZXR1cm4gV2ViRE9NVGVzdE9iaigpOworCisgICAgcmV0dXJuIHdlYktpdChXVEY6OmdldFB0
cihpbXBsKCktPnJlYWRPbmx5VGVzdE9iakF0dHIoKSkpOworfQorCitsb25nIFdlYkRPTVRlc3RP
Ymo6OmludEF0dHIoKSBjb25zdAoreworICAgIGlmICghaW1wbCgpKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIHJldHVybiBpbXBsKCktPmludEF0dHIoKTsKK30KKwordm9pZCBXZWJET01UZXN0
T2JqOjpzZXRJbnRBdHRyKGNvbnN0IGxvbmcmIG5ld0ludEF0dHIpCit7CisgICAgaWYgKCFpbXBs
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGltcGwoKS0+c2V0SW50QXR0cihuZXdJbnRBdHRy
KTsKK30KKworbG9uZyBsb25nIFdlYkRPTVRlc3RPYmo6OmxvbmdMb25nQXR0cigpIGNvbnN0Cit7
CisgICAgaWYgKCFpbXBsKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGltcGwo
KS0+bG9uZ0xvbmdBdHRyKCk7Cit9CisKK3ZvaWQgV2ViRE9NVGVzdE9iajo6c2V0TG9uZ0xvbmdB
dHRyKGNvbnN0IGxvbmcgbG9uZyYgbmV3TG9uZ0xvbmdBdHRyKQoreworICAgIGlmICghaW1wbCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBpbXBsKCktPnNldExvbmdMb25nQXR0cihuZXdMb25n
TG9uZ0F0dHIpOworfQorCit1bnNpZ25lZCBsb25nIGxvbmcgV2ViRE9NVGVzdE9iajo6dW5zaWdu
ZWRMb25nTG9uZ0F0dHIoKSBjb25zdAoreworICAgIGlmICghaW1wbCgpKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIHJldHVybiBpbXBsKCktPnVuc2lnbmVkTG9uZ0xvbmdBdHRyKCk7Cit9CisK
K3ZvaWQgV2ViRE9NVGVzdE9iajo6c2V0VW5zaWduZWRMb25nTG9uZ0F0dHIoY29uc3QgdW5zaWdu
ZWQgbG9uZyBsb25nJiBuZXdVbnNpZ25lZExvbmdMb25nQXR0cikKK3sKKyAgICBpZiAoIWltcGwo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW1wbCgpLT5zZXRVbnNpZ25lZExvbmdMb25nQXR0
cihuZXdVbnNpZ25lZExvbmdMb25nQXR0cik7Cit9CisKK1dlYkRPTVN0cmluZyBXZWJET01UZXN0
T2JqOjpzdHJpbmdBdHRyKCkgY29uc3QKK3sKKyAgICBpZiAoIWltcGwoKSkKKyAgICAgICAgcmV0
dXJuIFdlYkRPTVN0cmluZygpOworCisgICAgcmV0dXJuIChjb25zdCBXZWJDb3JlOjpTdHJpbmcm
KSBpbXBsKCktPnN0cmluZ0F0dHIoKTsKK30KKwordm9pZCBXZWJET01UZXN0T2JqOjpzZXRTdHJp
bmdBdHRyKGNvbnN0IFdlYkRPTVN0cmluZyYgbmV3U3RyaW5nQXR0cikKK3sKKyAgICBpZiAoIWlt
cGwoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW1wbCgpLT5zZXRTdHJpbmdBdHRyKG5ld1N0
cmluZ0F0dHIpOworfQorCitXZWJET01UZXN0T2JqIFdlYkRPTVRlc3RPYmo6OnRlc3RPYmpBdHRy
KCkgY29uc3QKK3sKKyAgICBpZiAoIWltcGwoKSkKKyAgICAgICAgcmV0dXJuIFdlYkRPTVRlc3RP
YmooKTsKKworICAgIHJldHVybiB3ZWJLaXQoV1RGOjpnZXRQdHIoaW1wbCgpLT50ZXN0T2JqQXR0
cigpKSk7Cit9CisKK3ZvaWQgV2ViRE9NVGVzdE9iajo6c2V0VGVzdE9iakF0dHIoY29uc3QgV2Vi
RE9NVGVzdE9iaiYgbmV3VGVzdE9iakF0dHIpCit7CisgICAgaWYgKCFpbXBsKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGltcGwoKS0+c2V0VGVzdE9iakF0dHIod2ViQ29yZShuZXdUZXN0T2Jq
QXR0cikpOworfQorCitsb25nIFdlYkRPTVRlc3RPYmo6OmF0dHJXaXRoRXhjZXB0aW9uKCkgY29u
c3QKK3sKKyAgICBpZiAoIWltcGwoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4g
aW1wbCgpLT5hdHRyV2l0aEV4Y2VwdGlvbigpOworfQorCit2b2lkIFdlYkRPTVRlc3RPYmo6OnNl
dEF0dHJXaXRoRXhjZXB0aW9uKGNvbnN0IGxvbmcmIG5ld0F0dHJXaXRoRXhjZXB0aW9uKQorewor
ICAgIGlmICghaW1wbCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpbXBsKCktPnNldEF0dHJX
aXRoRXhjZXB0aW9uKG5ld0F0dHJXaXRoRXhjZXB0aW9uKTsKK30KKworbG9uZyBXZWJET01UZXN0
T2JqOjphdHRyV2l0aFNldHRlckV4Y2VwdGlvbigpIGNvbnN0Cit7CisgICAgaWYgKCFpbXBsKCkp
CisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGltcGwoKS0+YXR0cldpdGhTZXR0ZXJF
eGNlcHRpb24oKTsKK30KKwordm9pZCBXZWJET01UZXN0T2JqOjpzZXRBdHRyV2l0aFNldHRlckV4
Y2VwdGlvbihjb25zdCBsb25nJiBuZXdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbikKK3sKKyAgICBp
ZiAoIWltcGwoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW1wbCgpLT5zZXRBdHRyV2l0aFNl
dHRlckV4Y2VwdGlvbihuZXdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbik7Cit9CisKK2xvbmcgV2Vi
RE9NVGVzdE9iajo6YXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oKSBjb25zdAoreworICAgIGlmICgh
aW1wbCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBpbXBsKCktPmF0dHJXaXRo
R2V0dGVyRXhjZXB0aW9uKCk7Cit9CisKK3ZvaWQgV2ViRE9NVGVzdE9iajo6c2V0QXR0cldpdGhH
ZXR0ZXJFeGNlcHRpb24oY29uc3QgbG9uZyYgbmV3QXR0cldpdGhHZXR0ZXJFeGNlcHRpb24pCit7
CisgICAgaWYgKCFpbXBsKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGltcGwoKS0+c2V0QXR0
cldpdGhHZXR0ZXJFeGNlcHRpb24obmV3QXR0cldpdGhHZXR0ZXJFeGNlcHRpb24pOworfQorCit2
b2lkIFdlYkRPTVRlc3RPYmo6OnZvaWRNZXRob2QoKQoreworICAgIGlmICghaW1wbCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpbXBsKCktPnZvaWRNZXRob2QoKTsKK30KKwordm9pZCBXZWJE
T01UZXN0T2JqOjp2b2lkTWV0aG9kV2l0aEFyZ3MoY29uc3QgbG9uZyYgaW50QXJnLCBjb25zdCBX
ZWJET01TdHJpbmcmIHN0ckFyZywgY29uc3QgV2ViRE9NVGVzdE9iaiYgb2JqQXJnKQoreworICAg
IGlmICghaW1wbCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpbXBsKCktPnZvaWRNZXRob2RX
aXRoQXJncyhpbnRBcmcsIHN0ckFyZywgd2ViQ29yZShvYmpBcmcpKTsKK30KKworbG9uZyBXZWJE
T01UZXN0T2JqOjppbnRNZXRob2QoKQoreworICAgIGlmICghaW1wbCgpKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIHJldHVybiBpbXBsKCktPmludE1ldGhvZCgpOworfQorCitsb25nIFdlYkRP
TVRlc3RPYmo6OmludE1ldGhvZFdpdGhBcmdzKGNvbnN0IGxvbmcmIGludEFyZywgY29uc3QgV2Vi
RE9NU3RyaW5nJiBzdHJBcmcsIGNvbnN0IFdlYkRPTVRlc3RPYmomIG9iakFyZykKK3sKKyAgICBp
ZiAoIWltcGwoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gaW1wbCgpLT5pbnRN
ZXRob2RXaXRoQXJncyhpbnRBcmcsIHN0ckFyZywgd2ViQ29yZShvYmpBcmcpKTsKK30KKworV2Vi
RE9NVGVzdE9iaiBXZWJET01UZXN0T2JqOjpvYmpNZXRob2QoKQoreworICAgIGlmICghaW1wbCgp
KQorICAgICAgICByZXR1cm4gV2ViRE9NVGVzdE9iaigpOworCisgICAgcmV0dXJuIHdlYktpdChX
VEY6OmdldFB0cihpbXBsKCktPm9iak1ldGhvZCgpKSk7Cit9CisKK1dlYkRPTVRlc3RPYmogV2Vi
RE9NVGVzdE9iajo6b2JqTWV0aG9kV2l0aEFyZ3MoY29uc3QgbG9uZyYgaW50QXJnLCBjb25zdCBX
ZWJET01TdHJpbmcmIHN0ckFyZywgY29uc3QgV2ViRE9NVGVzdE9iaiYgb2JqQXJnKQoreworICAg
IGlmICghaW1wbCgpKQorICAgICAgICByZXR1cm4gV2ViRE9NVGVzdE9iaigpOworCisgICAgcmV0
dXJuIHdlYktpdChXVEY6OmdldFB0cihpbXBsKCktPm9iak1ldGhvZFdpdGhBcmdzKGludEFyZywg
c3RyQXJnLCB3ZWJDb3JlKG9iakFyZykpKSk7Cit9CisKK3ZvaWQgV2ViRE9NVGVzdE9iajo6bWV0
aG9kV2l0aEV4Y2VwdGlvbigpCit7CisgICAgaWYgKCFpbXBsKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGltcGwoKS0+bWV0aG9k
V2l0aEV4Y2VwdGlvbihlYyk7CisgICAgd2ViRE9NUmFpc2VFcnJvcihzdGF0aWNfY2FzdDxXZWJE
T01FeGNlcHRpb25Db2RlPihlYykpOworfQorCit2b2lkIFdlYkRPTVRlc3RPYmo6OmFkZEV2ZW50
TGlzdGVuZXIoY29uc3QgV2ViRE9NU3RyaW5nJiB0eXBlLCBjb25zdCBXZWJET01FdmVudExpc3Rl
bmVyJiBsaXN0ZW5lciwgY29uc3QgYm9vbCYgdXNlQ2FwdHVyZSkKK3sKKyAgICBpZiAoIWltcGwo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW1wbCgpLT5hZGRFdmVudExpc3RlbmVyKHR5cGUs
IHdlYkNvcmUobGlzdGVuZXIpLCB1c2VDYXB0dXJlKTsKK30KKwordm9pZCBXZWJET01UZXN0T2Jq
OjpyZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IFdlYkRPTVN0cmluZyYgdHlwZSwgY29uc3QgV2Vi
RE9NRXZlbnRMaXN0ZW5lciYgbGlzdGVuZXIsIGNvbnN0IGJvb2wmIHVzZUNhcHR1cmUpCit7Cisg
ICAgaWYgKCFpbXBsKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGltcGwoKS0+cmVtb3ZlRXZl
bnRMaXN0ZW5lcih0eXBlLCB3ZWJDb3JlKGxpc3RlbmVyKSwgdXNlQ2FwdHVyZSk7Cit9CisKK3Zv
aWQgV2ViRE9NVGVzdE9iajo6d2l0aER5bmFtaWNGcmFtZSgpCit7CisgICAgaWYgKCFpbXBsKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIGltcGwoKS0+d2l0aER5bmFtaWNGcmFtZSgpOworfQor
Cit2b2lkIFdlYkRPTVRlc3RPYmo6OndpdGhEeW5hbWljRnJhbWVBbmRBcmcoY29uc3QgbG9uZyYg
aW50QXJnKQoreworICAgIGlmICghaW1wbCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpbXBs
KCktPndpdGhEeW5hbWljRnJhbWVBbmRBcmcoaW50QXJnKTsKK30KKwordm9pZCBXZWJET01UZXN0
T2JqOjp3aXRoRHluYW1pY0ZyYW1lQW5kT3B0aW9uYWxBcmcoY29uc3QgbG9uZyYgaW50QXJnLCBj
b25zdCBsb25nJiBvcHRpb25hbEFyZykKK3sKKyAgICBpZiAoIWltcGwoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaW1wbCgpLT53aXRoRHluYW1pY0ZyYW1lQW5kT3B0aW9uYWxBcmcoaW50QXJn
LCBvcHRpb25hbEFyZyk7Cit9CisKK3ZvaWQgV2ViRE9NVGVzdE9iajo6d2l0aFNjcmlwdFN0YXRl
Vm9pZCgpCit7CisgICAgaWYgKCFpbXBsKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGltcGwo
KS0+d2l0aFNjcmlwdFN0YXRlVm9pZCgpOworfQorCitXZWJET01UZXN0T2JqIFdlYkRPTVRlc3RP
Ymo6OndpdGhTY3JpcHRTdGF0ZU9iaigpCit7CisgICAgaWYgKCFpbXBsKCkpCisgICAgICAgIHJl
dHVybiBXZWJET01UZXN0T2JqKCk7CisKKyAgICByZXR1cm4gd2ViS2l0KFdURjo6Z2V0UHRyKGlt
cGwoKS0+d2l0aFNjcmlwdFN0YXRlT2JqKCkpKTsKK30KKwordm9pZCBXZWJET01UZXN0T2JqOjp3
aXRoU2NyaXB0U3RhdGVWb2lkRXhjZXB0aW9uKCkKK3sKKyAgICBpZiAoIWltcGwoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaW1w
bCgpLT53aXRoU2NyaXB0U3RhdGVWb2lkRXhjZXB0aW9uKGVjKTsKKyAgICB3ZWJET01SYWlzZUVy
cm9yKHN0YXRpY19jYXN0PFdlYkRPTUV4Y2VwdGlvbkNvZGU+KGVjKSk7Cit9CisKK1dlYkRPTVRl
c3RPYmogV2ViRE9NVGVzdE9iajo6d2l0aFNjcmlwdFN0YXRlT2JqRXhjZXB0aW9uKCkKK3sKKyAg
ICBpZiAoIWltcGwoKSkKKyAgICAgICAgcmV0dXJuIFdlYkRPTVRlc3RPYmooKTsKKworICAgIFdl
YkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFdlYkRPTVRlc3RPYmogcmVzdWx0ID0g
d2ViS2l0KFdURjo6Z2V0UHRyKGltcGwoKS0+d2l0aFNjcmlwdFN0YXRlT2JqRXhjZXB0aW9uKGVj
KSkpOworICAgIHdlYkRPTVJhaXNlRXJyb3Ioc3RhdGljX2Nhc3Q8V2ViRE9NRXhjZXB0aW9uQ29k
ZT4oZWMpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIFdlYkRPTVRlc3RPYmo6Om1l
dGhvZFdpdGhPcHRpb25hbEFyZyhjb25zdCBsb25nJiBvcHQpCit7CisgICAgaWYgKCFpbXBsKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIGltcGwoKS0+bWV0aG9kV2l0aE9wdGlvbmFsQXJnKG9w
dCk7Cit9CisKK3ZvaWQgV2ViRE9NVGVzdE9iajo6bWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5k
T3B0aW9uYWxBcmcoY29uc3QgbG9uZyYgbm9uT3B0LCBjb25zdCBsb25nJiBvcHQpCit7CisgICAg
aWYgKCFpbXBsKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGltcGwoKS0+bWV0aG9kV2l0aE5v
bk9wdGlvbmFsQXJnQW5kT3B0aW9uYWxBcmcobm9uT3B0LCBvcHQpOworfQorCit2b2lkIFdlYkRP
TVRlc3RPYmo6Om1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZFR3b09wdGlvbmFsQXJncyhjb25z
dCBsb25nJiBub25PcHQsIGNvbnN0IGxvbmcmIG9wdDEsIGNvbnN0IGxvbmcmIG9wdDIpCit7Cisg
ICAgaWYgKCFpbXBsKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGltcGwoKS0+bWV0aG9kV2l0
aE5vbk9wdGlvbmFsQXJnQW5kVHdvT3B0aW9uYWxBcmdzKG5vbk9wdCwgb3B0MSwgb3B0Mik7Cit9
CisKK1dlYkNvcmU6OlRlc3RPYmoqIHdlYkNvcmUoY29uc3QgV2ViRE9NVGVzdE9iaiYgd3JhcHBl
cikKK3sKKyAgICByZXR1cm4gd3JhcHBlci5pbXBsKCk7Cit9CisKK1dlYkRPTVRlc3RPYmogd2Vi
S2l0KFdlYkNvcmU6OlRlc3RPYmoqIHZhbHVlKQoreworICAgIHsgV0VCRE9NX0FTU0VSVF9NQUlO
X1RIUkVBRCgpOyBXZWJDb3JlVGhyZWFkVmlvbGF0aW9uQ2hlY2tSb3VuZE9uZSgpOyB9OworICAg
IHJldHVybiBXZWJET01UZXN0T2JqKHZhbHVlKTsKK30KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RPYmouaAkocmV2aXNpb24gMCkKKysr
IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIElu
IE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgPHNhbS53
ZWluaWdAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGlt
aXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYkRPTVRlc3RPYmpfaAor
I2RlZmluZSBXZWJET01UZXN0T2JqX2gKKworI2luY2x1ZGUgPFdlYkRPTU9iamVjdC5oPgorI2lu
Y2x1ZGUgPFdlYkRPTVN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xhc3Mg
VGVzdE9iajsKK307CisKK2NsYXNzIFdlYkRPTUV2ZW50TGlzdGVuZXI7CitjbGFzcyBXZWJET01U
ZXN0T2JqOworCitjbGFzcyBXZWJET01UZXN0T2JqIDogcHVibGljIFdlYkRPTU9iamVjdCB7Citw
dWJsaWM6CisgICAgV2ViRE9NVGVzdE9iaigpOworICAgIGV4cGxpY2l0IFdlYkRPTVRlc3RPYmoo
V2ViQ29yZTo6VGVzdE9iaiopOworICAgIFdlYkRPTVRlc3RPYmooY29uc3QgV2ViRE9NVGVzdE9i
aiYpOworICAgIH5XZWJET01UZXN0T2JqKCk7CisKKyAgICBsb25nIHJlYWRPbmx5SW50QXR0cigp
IGNvbnN0OworICAgIFdlYkRPTVN0cmluZyByZWFkT25seVN0cmluZ0F0dHIoKSBjb25zdDsKKyAg
ICBXZWJET01UZXN0T2JqIHJlYWRPbmx5VGVzdE9iakF0dHIoKSBjb25zdDsKKyAgICBsb25nIGlu
dEF0dHIoKSBjb25zdDsKKyAgICB2b2lkIHNldEludEF0dHIoY29uc3QgbG9uZyYpOworICAgIGxv
bmcgbG9uZyBsb25nTG9uZ0F0dHIoKSBjb25zdDsKKyAgICB2b2lkIHNldExvbmdMb25nQXR0cihj
b25zdCBsb25nIGxvbmcmKTsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgdW5zaWduZWRMb25nTG9u
Z0F0dHIoKSBjb25zdDsKKyAgICB2b2lkIHNldFVuc2lnbmVkTG9uZ0xvbmdBdHRyKGNvbnN0IHVu
c2lnbmVkIGxvbmcgbG9uZyYpOworICAgIFdlYkRPTVN0cmluZyBzdHJpbmdBdHRyKCkgY29uc3Q7
CisgICAgdm9pZCBzZXRTdHJpbmdBdHRyKGNvbnN0IFdlYkRPTVN0cmluZyYpOworICAgIFdlYkRP
TVRlc3RPYmogdGVzdE9iakF0dHIoKSBjb25zdDsKKyAgICB2b2lkIHNldFRlc3RPYmpBdHRyKGNv
bnN0IFdlYkRPTVRlc3RPYmomKTsKKyAgICBsb25nIGF0dHJXaXRoRXhjZXB0aW9uKCkgY29uc3Q7
CisgICAgdm9pZCBzZXRBdHRyV2l0aEV4Y2VwdGlvbihjb25zdCBsb25nJik7CisgICAgbG9uZyBh
dHRyV2l0aFNldHRlckV4Y2VwdGlvbigpIGNvbnN0OworICAgIHZvaWQgc2V0QXR0cldpdGhTZXR0
ZXJFeGNlcHRpb24oY29uc3QgbG9uZyYpOworICAgIGxvbmcgYXR0cldpdGhHZXR0ZXJFeGNlcHRp
b24oKSBjb25zdDsKKyAgICB2b2lkIHNldEF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKGNvbnN0IGxv
bmcmKTsKKyAgICBsb25nIGN1c3RvbUF0dHIoKSBjb25zdDsKKyAgICB2b2lkIHNldEN1c3RvbUF0
dHIoY29uc3QgbG9uZyYpOworCisgICAgdm9pZCB2b2lkTWV0aG9kKCk7CisgICAgdm9pZCB2b2lk
TWV0aG9kV2l0aEFyZ3MoY29uc3QgbG9uZyYgaW50QXJnLCBjb25zdCBXZWJET01TdHJpbmcmIHN0
ckFyZywgY29uc3QgV2ViRE9NVGVzdE9iaiYgb2JqQXJnKTsKKyAgICBsb25nIGludE1ldGhvZCgp
OworICAgIGxvbmcgaW50TWV0aG9kV2l0aEFyZ3MoY29uc3QgbG9uZyYgaW50QXJnLCBjb25zdCBX
ZWJET01TdHJpbmcmIHN0ckFyZywgY29uc3QgV2ViRE9NVGVzdE9iaiYgb2JqQXJnKTsKKyAgICBX
ZWJET01UZXN0T2JqIG9iak1ldGhvZCgpOworICAgIFdlYkRPTVRlc3RPYmogb2JqTWV0aG9kV2l0
aEFyZ3MoY29uc3QgbG9uZyYgaW50QXJnLCBjb25zdCBXZWJET01TdHJpbmcmIHN0ckFyZywgY29u
c3QgV2ViRE9NVGVzdE9iaiYgb2JqQXJnKTsKKyAgICB2b2lkIG1ldGhvZFdpdGhFeGNlcHRpb24o
KTsKKyAgICB2b2lkIGN1c3RvbU1ldGhvZCgpOworICAgIHZvaWQgY3VzdG9tTWV0aG9kV2l0aEFy
Z3MoY29uc3QgbG9uZyYgaW50QXJnLCBjb25zdCBXZWJET01TdHJpbmcmIHN0ckFyZywgY29uc3Qg
V2ViRE9NVGVzdE9iaiYgb2JqQXJnKTsKKyAgICB2b2lkIGFkZEV2ZW50TGlzdGVuZXIoY29uc3Qg
V2ViRE9NU3RyaW5nJiB0eXBlLCBjb25zdCBXZWJET01FdmVudExpc3RlbmVyJiBsaXN0ZW5lciwg
Y29uc3QgYm9vbCYgdXNlQ2FwdHVyZSk7CisgICAgdm9pZCByZW1vdmVFdmVudExpc3RlbmVyKGNv
bnN0IFdlYkRPTVN0cmluZyYgdHlwZSwgY29uc3QgV2ViRE9NRXZlbnRMaXN0ZW5lciYgbGlzdGVu
ZXIsIGNvbnN0IGJvb2wmIHVzZUNhcHR1cmUpOworICAgIHZvaWQgd2l0aER5bmFtaWNGcmFtZSgp
OworICAgIHZvaWQgd2l0aER5bmFtaWNGcmFtZUFuZEFyZyhjb25zdCBsb25nJiBpbnRBcmcpOwor
ICAgIHZvaWQgd2l0aER5bmFtaWNGcmFtZUFuZE9wdGlvbmFsQXJnKGNvbnN0IGxvbmcmIGludEFy
ZywgY29uc3QgbG9uZyYgb3B0aW9uYWxBcmcpOworICAgIHZvaWQgd2l0aER5bmFtaWNGcmFtZUFu
ZFVzZXJHZXN0dXJlKGNvbnN0IGxvbmcmIGludEFyZyk7CisgICAgdm9pZCB3aXRoRHluYW1pY0Zy
YW1lQW5kVXNlckdlc3R1cmVBU0FEKGNvbnN0IGxvbmcmIGludEFyZywgY29uc3QgbG9uZyYgb3B0
aW9uYWxBcmcpOworICAgIHZvaWQgd2l0aFNjcmlwdFN0YXRlVm9pZCgpOworICAgIFdlYkRPTVRl
c3RPYmogd2l0aFNjcmlwdFN0YXRlT2JqKCk7CisgICAgdm9pZCB3aXRoU2NyaXB0U3RhdGVWb2lk
RXhjZXB0aW9uKCk7CisgICAgV2ViRE9NVGVzdE9iaiB3aXRoU2NyaXB0U3RhdGVPYmpFeGNlcHRp
b24oKTsKKyAgICB2b2lkIG1ldGhvZFdpdGhPcHRpb25hbEFyZyhjb25zdCBsb25nJiBvcHQpOwor
ICAgIHZvaWQgbWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kT3B0aW9uYWxBcmcoY29uc3QgbG9u
ZyYgbm9uT3B0LCBjb25zdCBsb25nJiBvcHQpOworICAgIHZvaWQgbWV0aG9kV2l0aE5vbk9wdGlv
bmFsQXJnQW5kVHdvT3B0aW9uYWxBcmdzKGNvbnN0IGxvbmcmIG5vbk9wdCwgY29uc3QgbG9uZyYg
b3B0MSwgY29uc3QgbG9uZyYgb3B0Mik7CisKKyAgICBXZWJDb3JlOjpUZXN0T2JqKiBpbXBsKCkg
Y29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICBzdHJ1Y3QgV2ViRE9NVGVzdE9ialByaXZhdGU7Cisg
ICAgV2ViRE9NVGVzdE9ialByaXZhdGUqIG1fZDsKK307CisKK1dlYkNvcmU6OlRlc3RPYmoqIHdl
YkNvcmUoY29uc3QgV2ViRE9NVGVzdE9iaiYpOworV2ViRE9NVGVzdE9iaiB3ZWJLaXQoV2ViQ29y
ZTo6VGVzdE9iaiopOworCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvY3NzL1N0eWxlU2hlZXQuaWRs
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL1N0eWxlU2hlZXQuaWRsCShyZXZpc2lvbiA1ODQ4
NCkKKysrIFdlYkNvcmUvY3NzL1N0eWxlU2hlZXQuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2
ICszMywxMiBAQCBtb2R1bGUgc3R5bGVzaGVldHMgewogICAgICAgICByZWFkb25seSBhdHRyaWJ1
dGUgW0NvbnZlcnROdWxsU3RyaW5nVG89TnVsbF0gRE9NU3RyaW5nICAgICAgICBocmVmOwogICAg
ICAgICByZWFkb25seSBhdHRyaWJ1dGUgW0NvbnZlcnROdWxsU3RyaW5nVG89TnVsbF0gRE9NU3Ry
aW5nICAgICAgICB0aXRsZTsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIE1lZGlhTGlzdCAg
ICAgICAgbWVkaWE7CisKKyNpZiBkZWZpbmVkKExBTkdVQUdFX0NQUCkgJiYgTEFOR1VBR0VfQ1BQ
CisgICAgICAgIC8vIEV4dHJhIFdlYkNvcmUgbWV0aG9kcyBleHBvc2VkIHRvIGFsbG93ZSBjb21w
aWxlLXRpbWUgY2FzdGluZyBpbiBDKysKKyAgICAgICAgYm9vbGVhbiBpc0NTU1N0eWxlU2hlZXQo
KTsKKyNlbmRpZgorCiAgICAgfTsKIAogfQpJbmRleDogV2ViQ29yZS9kb20vQ3VzdG9tRXZlbnQu
aWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0N1c3RvbUV2ZW50LmlkbAkocmV2aXNpb24g
NTg0ODQpCisrKyBXZWJDb3JlL2RvbS9DdXN0b21FdmVudC5pZGwJKHdvcmtpbmcgY29weSkKQEAg
LTI1LDYgKzI1LDcgQEAKIAogbW9kdWxlIGV2ZW50cyB7CiAKKyNpZiAhZGVmaW5lZChMQU5HVUFH
RV9DUFApIHx8ICFMQU5HVUFHRV9DUFAKICAgICAvLyBJbnRyb2R1Y2VkIGluIERPTSBMZXZlbCAz
OgogICAgIGludGVyZmFjZSBDdXN0b21FdmVudCA6IEV2ZW50IHsKIApAQCAtMzUsNSArMzYsNiBA
QCBtb2R1bGUgZXZlbnRzIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBib29sZWFu
IGNhbmNlbGFibGVBcmcsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIERPTU9iamVj
dCBkZXRhaWxBcmcpOwogICAgIH07CisjZW5kaWYKIAogfQpJbmRleDogV2ViQ29yZS9kb20vRG9j
dW1lbnQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmlkbAkocmV2aXNp
b24gNTg0ODQpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5pZGwJKHdvcmtpbmcgY29weSkKQEAg
LTIxOSw5ICsyMTksMTEgQEAgbW9kdWxlIGNvcmUgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAKICNlbmRpZgogCisjaWYgIWRlZmluZWQoTEFOR1VB
R0VfQ1BQKSB8fCAhTEFOR1VBR0VfQ1BQCiAjaWYgIWRlZmluZWQoTEFOR1VBR0VfT0JKRUNUSVZF
X0MpIHx8ICFMQU5HVUFHRV9PQkpFQ1RJVkVfQwogICAgICAgICBbVjhDdXN0b21dIERPTU9iamVj
dCBnZXRDU1NDYW52YXNDb250ZXh0KGluIERPTVN0cmluZyBjb250ZXh0SWQsIGluIERPTVN0cmlu
ZyBuYW1lLCBpbiBsb25nIHdpZHRoLCBpbiBsb25nIGhlaWdodCk7CiAjZW5kaWYKKyNlbmRpZgog
CiAgICAgICAgIC8vIEhUTUwgNQogICAgICAgICBOb2RlTGlzdCBnZXRFbGVtZW50c0J5Q2xhc3NO
YW1lKGluIERPTVN0cmluZyB0YWduYW1lKTsKQEAgLTMxMSw2ICszMTMsMTIgQEAgbW9kdWxlIGNv
cmUgewogICAgICAgICBhdHRyaWJ1dGUgW0RvbnRFbnVtLENvbmRpdGlvbmFsPVRPVUNIX0VWRU5U
UyxFbmFibGVkQXRSdW50aW1lXSBFdmVudExpc3RlbmVyIG9udG91Y2hlbmQ7CiAgICAgICAgIGF0
dHJpYnV0ZSBbRG9udEVudW0sQ29uZGl0aW9uYWw9VE9VQ0hfRVZFTlRTLEVuYWJsZWRBdFJ1bnRp
bWVdIEV2ZW50TGlzdGVuZXIgb250b3VjaGNhbmNlbDsKICNlbmRpZgorCisjaWYgZGVmaW5lZChM
QU5HVUFHRV9DUFApICYmIExBTkdVQUdFX0NQUAorICAgICAgICAvLyBFeHRyYSBXZWJDb3JlIG1l
dGhvZHMgZXhwb3NlZCB0byBhbGxvdyBjb21waWxlLXRpbWUgY2FzdGluZyBpbiBDKysKKyAgICAg
ICAgYm9vbGVhbiBpc0hUTUxEb2N1bWVudCgpOworI2VuZGlmCisKICAgICB9OwogCiB9CkluZGV4
OiBXZWJDb3JlL2RvbS9FdmVudC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRXZlbnQu
aWRsCShyZXZpc2lvbiA1ODQ4NCkKKysrIFdlYkNvcmUvZG9tL0V2ZW50LmlkbAkod29ya2luZyBj
b3B5KQpAQCAtNzksNiArNzksMTIgQEAgbW9kdWxlIGV2ZW50cyB7CiAgICAgICAgIHJlYWRvbmx5
IGF0dHJpYnV0ZSBbQ3VzdG9tXSBDbGlwYm9hcmQgICAgICAgIGNsaXBib2FyZERhdGE7CiAjZW5k
aWYKIAorI2lmIGRlZmluZWQoTEFOR1VBR0VfQ1BQKSAmJiBMQU5HVUFHRV9DUFAKKyAgICAgICAg
Ly8gRXh0cmEgV2ViQ29yZSBtZXRob2RzIGV4cG9zZWQgdG8gYWxsb3cgY29tcGlsZS10aW1lIGNh
c3RpbmcgaW4gQysrCisgICAgICAgIGJvb2xlYW4gaXNNdXRhdGlvbkV2ZW50KCk7CisgICAgICAg
IGJvb2xlYW4gaXNNb3VzZUV2ZW50KCk7CisgICAgICAgIGJvb2xlYW4gaXNVSUV2ZW50KCk7Cisj
ZW5kaWYKICAgICB9OwogCiB9CkluZGV4OiBXZWJDb3JlL2RvbS9FdmVudExpc3RlbmVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9kb20vRXZlbnRMaXN0ZW5lci5oCShyZXZpc2lvbiA1ODQ4NCkK
KysrIFdlYkNvcmUvZG9tL0V2ZW50TGlzdGVuZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTMg
KzM2LDE2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIEV2ZW50TGlzdGVuZXIg
OiBwdWJsaWMgUmVmQ291bnRlZDxFdmVudExpc3RlbmVyPiB7CiAgICAgcHVibGljOgotICAgICAg
ICBlbnVtIFR5cGUgeyBKU0V2ZW50TGlzdGVuZXJUeXBlLCAKLSAgICAgICAgICAgICAgICAgICAg
SW1hZ2VFdmVudExpc3RlbmVyVHlwZSwgCi0gICAgICAgICAgICAgICAgICAgIEluc3BlY3RvckRP
TUFnZW50VHlwZSwKLSAgICAgICAgICAgICAgICAgICAgSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291
cmNlVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgT2JqQ0V2ZW50TGlzdGVuZXJUeXBlLCAKLSAg
ICAgICAgICAgICAgICAgICAgQ29uZGl0aW9uRXZlbnRMaXN0ZW5lclR5cGUgfTsKLSAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgIGVudW0gVHlwZSB7CisgICAgICAgICAgICBKU0V2ZW50TGlz
dGVuZXJUeXBlLCAKKyAgICAgICAgICAgIEltYWdlRXZlbnRMaXN0ZW5lclR5cGUsIAorICAgICAg
ICAgICAgSW5zcGVjdG9yRE9NQWdlbnRUeXBlLAorICAgICAgICAgICAgSW5zcGVjdG9yRE9NU3Rv
cmFnZVJlc291cmNlVHlwZSwKKyAgICAgICAgICAgIENQUEV2ZW50TGlzdGVuZXJUeXBlLAorICAg
ICAgICAgICAgT2JqQ0V2ZW50TGlzdGVuZXJUeXBlLCAKKyAgICAgICAgICAgIENvbmRpdGlvbkV2
ZW50TGlzdGVuZXJUeXBlCisgICAgICAgIH07CisKICAgICAgICAgdmlydHVhbCB+RXZlbnRMaXN0
ZW5lcigpIHsgfQogICAgICAgICB2aXJ0dWFsIGJvb2wgb3BlcmF0b3I9PShjb25zdCBFdmVudExp
c3RlbmVyJikgPSAwOwogICAgICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIEV2ZW50KikgPSAwOwpJbmRleDogV2ViQ29yZS9kb20vTm9kZS5pZGwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vTm9kZS5pZGwJKHJldmlzaW9uIDU4NDg0KQorKysg
V2ViQ29yZS9kb20vTm9kZS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEzNCw2ICsxMzQsNyBAQCBt
b2R1bGUgY29yZSB7CiAKICNpZiAhZGVmaW5lZChMQU5HVUFHRV9PQkpFQ1RJVkVfQykgfHwgIUxB
TkdVQUdFX09CSkVDVElWRV9DCiAjaWYgIWRlZmluZWQoTEFOR1VBR0VfR09CSkVDVCkgfHwgIUxB
TkdVQUdFX0dPQkpFQ1QKKyNpZiAhZGVmaW5lZChMQU5HVUFHRV9DUFApIHx8ICFMQU5HVUFHRV9D
UFAKICAgICAgICAgdm9pZCBhZGRFdmVudExpc3RlbmVyKGluIERPTVN0cmluZyB0eXBlLCAKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEV2ZW50TGlzdGVuZXIgbGlzdGVuZXIsIAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gYm9vbGVhbiB1c2VDYXB0dXJlKTsKQEAg
LTE0NCw2ICsxNDUsMTkgQEAgbW9kdWxlIGNvcmUgewogICAgICAgICAgICAgcmFpc2VzKEV2ZW50
RXhjZXB0aW9uKTsKICNlbmRpZgogI2VuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoTEFOR1VB
R0VfQ1BQKSAmJiBMQU5HVUFHRV9DUFAKKyAgICAgICAgW0N1c3RvbV0gdm9pZCBhZGRFdmVudExp
c3RlbmVyKGluIERPTVN0cmluZyB0eXBlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGluIEV2ZW50TGlzdGVuZXIgbGlzdGVuZXIsIAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gYm9vbGVhbiB1c2VDYXB0dXJlKTsKKyAgICAg
ICAgW0N1c3RvbV0gdm9pZCByZW1vdmVFdmVudExpc3RlbmVyKGluIERPTVN0cmluZyB0eXBlLCAK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEV2ZW50TGlz
dGVuZXIgbGlzdGVuZXIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW4gYm9vbGVhbiB1c2VDYXB0dXJlKTsKKyAgICAgICAgYm9vbGVhbiBkaXNwYXRjaEV2
ZW50KGluIEV2ZW50IGV2ZW50KQorICAgICAgICAgICAgcmFpc2VzKEV2ZW50RXhjZXB0aW9uKTsK
KyNlbmRpZgorCiAgICAgfTsKIAogfQpJbmRleDogV2ViQ29yZS9kb20vUG9wU3RhdGVFdmVudC5p
ZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vUG9wU3RhdGVFdmVudC5pZGwJKHJldmlzaW9u
IDU4NDg0KQorKysgV2ViQ29yZS9kb20vUG9wU3RhdGVFdmVudC5pZGwJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDYgKzI2LDcgQEAKIAogbW9kdWxlIGV2ZW50cyB7CiAKKyNpZiAhZGVmaW5lZChMQU5H
VUFHRV9DUFApIHx8ICFMQU5HVUFHRV9DUFAKICAgICBpbnRlcmZhY2UgUG9wU3RhdGVFdmVudCA6
IEV2ZW50IHsKICAgICAgICAgW0N1c3RvbV0gdm9pZCBpbml0UG9wU3RhdGVFdmVudChpbiBET01T
dHJpbmcgdHlwZUFyZywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gYm9vbGVh
biBjYW5CdWJibGVBcmcsIApAQCAtMzQsNSArMzUsNiBAQCBtb2R1bGUgZXZlbnRzIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFtW
OEN1c3RvbUdldHRlcl0gYW55IHN0YXRlOwogICAgIH07CisjZW5kaWYKIAogfQpJbmRleDogV2Vi
Q29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0
bWwvSFRNTENhbnZhc0VsZW1lbnQuaWRsCShyZXZpc2lvbiA1ODQ4NCkKKysrIFdlYkNvcmUvaHRt
bC9IVE1MQ2FudmFzRWxlbWVudC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEwICszNSwxMiBA
QCBtb2R1bGUgaHRtbCB7CiAgICAgICAgIERPTVN0cmluZyB0b0RhdGFVUkwoaW4gW0NvbnZlcnRV
bmRlZmluZWRPck51bGxUb051bGxTdHJpbmddIERPTVN0cmluZyB0eXBlKQogICAgICAgICAgICAg
cmFpc2VzKERPTUV4Y2VwdGlvbik7CiAKKyNpZiAhZGVmaW5lZChMQU5HVUFHRV9DUFApIHx8ICFM
QU5HVUFHRV9DUFAKICNpZiAhZGVmaW5lZChMQU5HVUFHRV9PQkpFQ1RJVkVfQykgfHwgIUxBTkdV
QUdFX09CSkVDVElWRV9DCiAgICAgICAgIC8vIFRoZSBjdXN0b20gYmluZGluZyBpcyBuZWVkZWQg
dG8gaGFuZGxlIGNvbnRleHQgY3JlYXRpb24gYXR0cmlidXRlcy4KICAgICAgICAgW0N1c3RvbV0g
RE9NT2JqZWN0IGdldENvbnRleHQoaW4gRE9NU3RyaW5nIGNvbnRleHRJZCk7CiAjZW5kaWYKKyNl
bmRpZgogCiAgICAgfTsKIApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaWRs
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmlkbAkocmV2aXNp
b24gNTg0ODQpCisrKyBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5pZGwJKHdvcmtpbmcg
Y29weSkKQEAgLTU3LDcgKzU3LDEwIEBAIG1vZHVsZSBodG1sIHsKICAgICAgICAgICAgICAgICAg
YXR0cmlidXRlIFtDb252ZXJ0TnVsbFRvTnVsbFN0cmluZywgSlNDQ3VzdG9tR2V0dGVyXSBET01T
dHJpbmcgdHlwZTsgLy8gcmVhZG9ubHkgZHJvcHBlZCBhcyBwYXJ0IG9mIERPTSBsZXZlbCAyCiAg
ICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBbQ29udmVydE51bGxUb051bGxTdHJpbmddIERPTVN0
cmluZyB1c2VNYXA7CiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBbQ29udmVydE51bGxUb051
bGxTdHJpbmddIERPTVN0cmluZyB2YWx1ZTsKKworI2lmICFkZWZpbmVkKExBTkdVQUdFX0NQUCkg
fHwgIUxBTkdVQUdFX0NQUAogICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgRGF0ZSAgICAgICAg
ICAgIHZhbHVlQXNEYXRlIHNldHRlciByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKyNlbmRpZgogICAg
ICAgICAgICAgICAgICBhdHRyaWJ1dGUgZG91YmxlICAgICAgICAgIHZhbHVlQXNOdW1iZXIgc2V0
dGVyIHJhaXNlcyhET01FeGNlcHRpb24pOwogI2lmIGRlZmluZWQoRU5BQkxFX0RBVEFMSVNUKSAm
JiBFTkFCTEVfREFUQUxJU1QKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIEhUTUxPcHRpb25F
bGVtZW50IHNlbGVjdGVkT3B0aW9uOwpJbmRleDogV2ViQ29yZS9odG1sL0ltYWdlRGF0YS5pZGwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0ltYWdlRGF0YS5pZGwJKHJldmlzaW9uIDU4NDg0
KQorKysgV2ViQ29yZS9odG1sL0ltYWdlRGF0YS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTMzLDkg
KzMzLDEzIEBAIG1vZHVsZSBodG1sIHsKICAgICBdIEltYWdlRGF0YSB7CiAgICAgICAgIHJlYWRv
bmx5IGF0dHJpYnV0ZSBsb25nIHdpZHRoOwogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgbG9u
ZyBoZWlnaHQ7CisKKyNpZiAhZGVmaW5lZChMQU5HVUFHRV9DUFApIHx8ICFMQU5HVUFHRV9DUFAK
ICNpZiAhZGVmaW5lZChMQU5HVUFHRV9KQVZBU0NSSVBUKSB8fCAhTEFOR1VBR0VfSkFWQVNDUklQ
VCB8fCBkZWZpbmVkKFY4X0JJTkRJTkcpICYmIFY4X0JJTkRJTkcKICAgICAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIENhbnZhc1BpeGVsQXJyYXkgZGF0YTsKICNlbmRpZgorI2VuZGlmCisKICAgICB9
OwogCiB9CkluZGV4OiBXZWJDb3JlL2h0bWwvTWVkaWFFcnJvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvaHRtbC9NZWRpYUVycm9yLmgJKHJldmlzaW9uIDU4NDg0KQorKysgV2ViQ29yZS9odG1s
L01lZGlhRXJyb3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogI2RlZmluZSBN
ZWRpYUVycm9yX2gKIAogI2lmIEVOQUJMRShWSURFTykKLQorI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewpJbmRleDogV2ViQ29yZS9odG1sL1RleHRNZXRyaWNzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9odG1sL1RleHRNZXRyaWNzLmgJKHJldmlzaW9uIDU4NDg0KQorKysgV2ViQ29yZS9odG1sL1Rl
eHRNZXRyaWNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgVGV4
dE1ldHJpY3NfaAogI2RlZmluZSBUZXh0TWV0cmljc19oCiAKKyNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmlk
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRC5pZGwJKHJldmlzaW9uIDU4NDg0KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC05MCwxMCArOTAsMTIgQEAg
bW9kdWxlIGh0bWwgewogICAgICAgICB2b2lkIHNldEFscGhhKGluIGZsb2F0IGFscGhhKTsKICAg
ICAgICAgdm9pZCBzZXRDb21wb3NpdGVPcGVyYXRpb24oaW4gRE9NU3RyaW5nIGNvbXBvc2l0ZU9w
ZXJhdGlvbik7CiAKKyNpZiAhZGVmaW5lZChMQU5HVUFHRV9DUFApIHx8ICFMQU5HVUFHRV9DUFAK
ICAgICAgICAgdm9pZCBzZXRMaW5lV2lkdGgoaW4gZmxvYXQgd2lkdGgpOwogICAgICAgICB2b2lk
IHNldExpbmVDYXAoaW4gRE9NU3RyaW5nIGNhcCk7CiAgICAgICAgIHZvaWQgc2V0TGluZUpvaW4o
aW4gRE9NU3RyaW5nIGpvaW4pOwogICAgICAgICB2b2lkIHNldE1pdGVyTGltaXQoaW4gZmxvYXQg
bGltaXQpOworI2VuZGlmCiAKICAgICAgICAgdm9pZCBjbGVhclNoYWRvdygpOwogCkluZGV4OiBX
ZWJDb3JlL3BhZ2UvQWJzdHJhY3RWaWV3LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2Uv
QWJzdHJhY3RWaWV3LmlkbAkocmV2aXNpb24gNTg0ODQpCisrKyBXZWJDb3JlL3BhZ2UvQWJzdHJh
Y3RWaWV3LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBtb2R1bGUgdmlld3Mg
ewogICAgICAgICBPbWl0Q29uc3RydWN0b3IKICAgICBdIEFic3RyYWN0VmlldyB7CiAgICAgICAg
IHJlYWRvbmx5IGF0dHJpYnV0ZSBEb2N1bWVudCBkb2N1bWVudDsKLSAgICAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIE1lZGlhIHN0eWxlTWVkaWE7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBT
dHlsZU1lZGlhIHN0eWxlTWVkaWE7CiAgICAgfTsKIAogfQpJbmRleDogV2ViQ29yZS9wYWdlL1dl
YktpdFBvaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL1dlYktpdFBvaW50LmgJKHJl
dmlzaW9uIDU4NDg0KQorKysgV2ViQ29yZS9wYWdlL1dlYktpdFBvaW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgV2ViS2l0UG9pbnRfaAogI2RlZmluZSBXZWJL
aXRQb2ludF9oCiAKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IFdlYkNvcmUvc3RvcmFn
ZS9TUUxSZXN1bHRTZXQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxSZXN1
bHRTZXQuaWRsCShyZXZpc2lvbiA1ODQ4NCkKKysrIFdlYkNvcmUvc3RvcmFnZS9TUUxSZXN1bHRT
ZXQuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw4ICszNCwxNSBAQCBtb2R1bGUgc3RvcmFnZSB7
CiAgICAgXSBTUUxSZXN1bHRTZXQgewogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgU1FMUmVz
dWx0U2V0Um93TGlzdCByb3dzOwogCisjaWYgZGVmaW5lZChMQU5HVUFHRV9DUFApICYmIExBTkdV
QUdFX0NQUAorICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgbG9uZyBsb25nIGluc2VydElkCisg
ICAgICAgICAgICBnZXR0ZXIgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisjZWxzZQorICAgICAgICAv
LyBXZSBzaG91bGQgY2hhbmdlIHRoZSB0eXBlIHRvICdsb25nIGxvbmcnIGhlcmUgYXMgd2VsbCwg
YnV0IENocm9taXVtL1Y4IGJ1aWxkIGZhaWxzIHdpdGggaXQuIFNvbWVvbmUgcGxlYXNlIGludmVz
dGlnYXRlLgogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgbG9uZyBpbnNlcnRJZAogICAgICAg
ICAgICAgZ2V0dGVyIHJhaXNlcyhET01FeGNlcHRpb24pOworI2VuZGlmCisKICAgICAgICAgcmVh
ZG9ubHkgYXR0cmlidXRlIGxvbmcgcm93c0FmZmVjdGVkOwogICAgIH07CiB9CkluZGV4OiBXZWJD
b3JlL3dvcmtlcnMvRGVkaWNhdGVkV29ya2VyQ29udGV4dC5pZGwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS93b3JrZXJzL0RlZGljYXRlZFdvcmtlckNvbnRleHQuaWRsCShyZXZpc2lvbiA1ODQ4NCkK
KysrIFdlYkNvcmUvd29ya2Vycy9EZWRpY2F0ZWRXb3JrZXJDb250ZXh0LmlkbAkod29ya2luZyBj
b3B5KQpAQCAtMzksNiArMzksNyBAQCBtb2R1bGUgdGhyZWFkcyB7CiAgICAgICAgIE9taXRDb25z
dHJ1Y3RvcgogICAgIF0gRGVkaWNhdGVkV29ya2VyQ29udGV4dCA6IFdvcmtlckNvbnRleHQgewog
CisjaWYgIWRlZmluZWQoTEFOR1VBR0VfQ1BQKSB8fCAhTEFOR1VBR0VfQ1BQCiAjaWYgZGVmaW5l
ZChMQU5HVUFHRV9KQVZBU0NSSVBUKSAmJiBMQU5HVUFHRV9KQVZBU0NSSVBUCiAgICAgICAgIFtD
dXN0b21dIHZvaWQgcG9zdE1lc3NhZ2UoaW4gYW55IG1lc3NhZ2UsIGluIFtPcHRpb25hbF0gQXJy
YXkgbWVzc2FnZVBvcnRzKQogICAgICAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7CkBAIC00
Nyw2ICs0OCw4IEBAIG1vZHVsZSB0aHJlYWRzIHsKICAgICAgICAgdm9pZCBwb3N0TWVzc2FnZShp
biBET01TdHJpbmcgbWVzc2FnZSwgaW4gW09wdGlvbmFsXSBNZXNzYWdlUG9ydCBtZXNzYWdlUG9y
dCkKICAgICAgICAgICAgIHJhaXNlcyhET01FeGNlcHRpb24pOwogI2VuZGlmCisjZW5kaWYKKwog
ICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbm1lc3NhZ2U7CiAKICAg
ICB9OwpJbmRleDogV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaWRsCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmlkbAkocmV2aXNpb24gNTg0ODQpCisr
KyBXZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTc2
LDYgKzc2LDcgQEAgbW9kdWxlIHRocmVhZHMgewogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUg
W0VuYWJsZWRBdFJ1bnRpbWVdIE5vdGlmaWNhdGlvbkNlbnRlciB3ZWJraXROb3RpZmljYXRpb25z
OwogI2VuZGlmCiAKKyNpZiAhZGVmaW5lZChMQU5HVUFHRV9DUFApIHx8ICFMQU5HVUFHRV9DUFAK
ICAgICAgICAgLy8gQ29uc3RydWN0b3JzCiAgICAgICAgIGF0dHJpYnV0ZSBNZXNzYWdlRXZlbnRD
b25zdHJ1Y3RvciBNZXNzYWdlRXZlbnQ7CiAgICAgICAgIGF0dHJpYnV0ZSBXb3JrZXJMb2NhdGlv
bkNvbnN0cnVjdG9yIFdvcmtlckxvY2F0aW9uOwpAQCAtOTAsNiArOTEsOCBAQCBtb2R1bGUgdGhy
ZWFkcyB7CiAjaWYgZGVmaW5lZChFTkFCTEVfV0VCX1NPQ0tFVFMpICYmIEVOQUJMRV9XRUJfU09D
S0VUUwogICAgICAgICBhdHRyaWJ1dGUgW0pTQ0N1c3RvbUdldHRlcixFbmFibGVkQXRSdW50aW1l
XSBXZWJTb2NrZXRDb25zdHJ1Y3RvciBXZWJTb2NrZXQ7IC8vIFVzYWJsZSB3aXRoIHRoZSBuZXcg
b3BlcmF0b3IKICNlbmRpZgorI2VuZGlmCisKICAgICB9OwogCiB9CkluZGV4OiBXZWJLaXRUb29s
cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lv
biA1ODQ4NCkKKysrIFdlYktpdFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE0IEBACisyMDEwLTA0LTI5ICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkBy
aW0uY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZCBDUFAgYmluZGluZ3MgZ2VuZXJhdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0zODI3OQorCisgICAgICAgIEludGVncmF0ZSBDUFAgYmluZGlu
Z3MgaW4gcnVuLWJpbmRpbmdzLXRlc3RzLCBzbyB3ZSBjYW4gaW1tZWRpYXRlbHkgc3BvdCBnZW5l
cmF0aW9uIGRpZmZlcmVuY2VzLiBHcmVhdCB0b29sIEFkYW0hCisKKyAgICAgICAgKiBTY3JpcHRz
L3J1bi1iaW5kaW5ncy10ZXN0czoKKwogMjAxMC0wNC0yOCAgQ2hyaXMgSmVyZG9uZWsgIDxjamVy
ZG9uZWtAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KSW5k
ZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvcnVuLWJpbmRpbmdzLXRlc3RzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdFRvb2xzL1NjcmlwdHMvcnVuLWJpbmRpbmdzLXRlc3RzCShyZXZpc2lvbiA1ODQ4NCkK
KysrIFdlYktpdFRvb2xzL1NjcmlwdHMvcnVuLWJpbmRpbmdzLXRlc3RzCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTYsNiArMTE2LDcgQEAgZGVmIG1haW4oYXJndik6CiAgICAgICAgICdWOCcsCiAgICAg
ICAgICdPYmpDJywKICAgICAgICAgJ0dPYmplY3QnLAorICAgICAgICAnQ1BQJwogICAgIF0KIAog
ICAgIGZvciBnZW5lcmF0b3IgaW4gZ2VuZXJhdG9yczoK
</data>
<flag name="review"
          id="38700"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54796</attachid>
            <date>2010-04-30 05:01:40 -0700</date>
            <delta_ts>2010-05-26 01:21:32 -0700</delta_ts>
            <desc>Updated patch v2</desc>
            <filename>BindingsPatch.diff</filename>
            <type>text/plain</type>
            <size>117518</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1ODU3MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTY0IEBACisyMDEwLTA0LTMwICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuemltbWVy
bWFubkByaW0uY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEFkZCBDUFAgYmluZGluZ3MgZ2VuZXJhdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zODI3OQorCisgICAgICAgIEFkZCBDUFAgYmluZGlu
Z3MgZ2VuZXJhdG9yIHVzZWQgaW4gT2x5bXBpYSBwbGF0Zm9ybS4KKyAgICAgICAgR2VuZXJhdGVz
IGNvZGUgZm9yIGFsbCBJRExzIGV4Y2VwdCBTVkcsIHdoaWNoIGFyZSBub3QgbmVlZGVkIGF0IHRo
ZSBtb21lbnQuCisKKyAgICAgICAgTm90IGludGVncmF0ZWQgaW4gYW55IGJ1aWxkIHN5c3RlbSBz
byBmYXIsIHRob3VnaCBJJ3ZlIHN1Y2Nlc3NmdWxseSB0ZXN0ZWQgb24gTWFjLgorCisgICAgICAg
ICogYmluZGluZ3MvY3BwOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9jcHAvV2ViRE9NQ1N0
cmluZy5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViRE9NQ1N0cmluZzo6cmVzZXQpOgorICAgICAg
ICAoV2ViRE9NQ1N0cmluZzo6YXNzaWduKToKKyAgICAgICAgKFdlYkRPTUNTdHJpbmc6Omxlbmd0
aCk6CisgICAgICAgIChXZWJET01DU3RyaW5nOjpkYXRhKToKKyAgICAgICAgKFdlYkRPTUNTdHJp
bmc6OnV0ZjE2KToKKyAgICAgICAgKFdlYkRPTUNTdHJpbmc6OmZyb21VVEYxNik6CisgICAgICAg
IChXZWJET01DU3RyaW5nOjpXZWJET01DU3RyaW5nKToKKyAgICAgICAgKFdlYkRPTUNTdHJpbmc6
Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJET01DU3RyaW5nOjpvcGVyYXRvciBXVEY6OkNTdHJp
bmcpOgorICAgICAgICAqIGJpbmRpbmdzL2NwcC9XZWJET01DU3RyaW5nLmg6IEFkZGVkLgorICAg
ICAgICAoV2ViRE9NQ1N0cmluZzo6fldlYkRPTUNTdHJpbmcpOgorICAgICAgICAoV2ViRE9NQ1N0
cmluZzo6V2ViRE9NQ1N0cmluZyk6CisgICAgICAgIChXZWJET01DU3RyaW5nOjpvcGVyYXRvcj0p
OgorICAgICAgICAoV2ViRE9NQ1N0cmluZzo6aXNFbXB0eSk6CisgICAgICAgIChXZWJET01DU3Ry
aW5nOjppc051bGwpOgorICAgICAgICAqIGJpbmRpbmdzL2NwcC9XZWJET01FbGVtZW50Q3VzdG9t
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJET01FbGVtZW50OjpzZXRBdHRyaWJ1dGVOb2RlKToK
KyAgICAgICAgKFdlYkRPTUVsZW1lbnQ6OnNldEF0dHJpYnV0ZU5vZGVOUyk6CisgICAgICAgICog
YmluZGluZ3MvY3BwL1dlYkRPTUV2ZW50TGlzdGVuZXJDdXN0b20uY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkRPTUV2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKHRvV2ViS2l0
KToKKyAgICAgICAgKiBiaW5kaW5ncy9jcHAvV2ViRE9NRXZlbnRUYXJnZXQuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkRPTUV2ZW50VGFyZ2V0OjpXZWJET01FdmVudFRhcmdldFByaXZhdGU6Oldl
YkRPTUV2ZW50VGFyZ2V0UHJpdmF0ZSk6CisgICAgICAgIChXZWJET01FdmVudFRhcmdldDo6V2Vi
RE9NRXZlbnRUYXJnZXQpOgorICAgICAgICAoV2ViRE9NRXZlbnRUYXJnZXQ6On5XZWJET01FdmVu
dFRhcmdldCk6CisgICAgICAgIChXZWJET01FdmVudFRhcmdldDo6aW1wbCk6CisgICAgICAgICh0
b1dlYkNvcmUpOgorICAgICAgICAodG9XZWJLaXQpOgorICAgICAgICAqIGJpbmRpbmdzL2NwcC9X
ZWJET01FdmVudFRhcmdldC5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9jcHAvV2ViRE9N
SFRNTERvY3VtZW50Q3VzdG9tLmNwcDogQWRkZWQuCisgICAgICAgIChkb2N1bWVudFdyaXRlKToK
KyAgICAgICAgKFdlYkRPTUhUTUxEb2N1bWVudDo6d3JpdGUpOgorICAgICAgICAoV2ViRE9NSFRN
TERvY3VtZW50Ojp3cml0ZWxuKToKKyAgICAgICAgKiBiaW5kaW5ncy9jcHAvV2ViRE9NTm9kZUN1
c3RvbS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViRE9NTm9kZTo6aW5zZXJ0QmVmb3JlKToKKyAg
ICAgICAgKFdlYkRPTU5vZGU6OnJlcGxhY2VDaGlsZCk6CisgICAgICAgIChXZWJET01Ob2RlOjpy
ZW1vdmVDaGlsZCk6CisgICAgICAgIChXZWJET01Ob2RlOjphcHBlbmRDaGlsZCk6CisgICAgICAg
IChXZWJET01Ob2RlOjphZGRFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkRPTU5vZGU6OnJl
bW92ZUV2ZW50TGlzdGVuZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2NwcC9XZWJET01PYmplY3Qu
aDogQWRkZWQuCisgICAgICAgIChXZWJET01PYmplY3Q6OldlYkRPTU9iamVjdCk6CisgICAgICAg
IChXZWJET01PYmplY3Q6On5XZWJET01PYmplY3QpOgorICAgICAgICAqIGJpbmRpbmdzL2NwcC9X
ZWJET01TdHJpbmcuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkRPTVN0cmluZzo6cmVzZXQpOgor
ICAgICAgICAoV2ViRE9NU3RyaW5nOjphc3NpZ24pOgorICAgICAgICAoV2ViRE9NU3RyaW5nOjps
ZW5ndGgpOgorICAgICAgICAoV2ViRE9NU3RyaW5nOjpkYXRhKToKKyAgICAgICAgKFdlYkRPTVN0
cmluZzo6dXRmOCk6CisgICAgICAgIChXZWJET01TdHJpbmc6OmZyb21VVEY4KToKKyAgICAgICAg
KFdlYkRPTVN0cmluZzo6V2ViRE9NU3RyaW5nKToKKyAgICAgICAgKFdlYkRPTVN0cmluZzo6b3Bl
cmF0b3I9KToKKyAgICAgICAgKFdlYkRPTVN0cmluZzo6b3BlcmF0b3IgV2ViQ29yZTo6U3RyaW5n
KToKKyAgICAgICAgKFdlYkRPTVN0cmluZzo6b3BlcmF0b3IgV2ViQ29yZTo6QXRvbWljU3RyaW5n
KToKKyAgICAgICAgKFdlYkRPTVN0cmluZzo6ZXF1YWxzKToKKyAgICAgICAgKiBiaW5kaW5ncy9j
cHAvV2ViRE9NU3RyaW5nLmg6IEFkZGVkLgorICAgICAgICAoV2ViRE9NU3RyaW5nOjp+V2ViRE9N
U3RyaW5nKToKKyAgICAgICAgKFdlYkRPTVN0cmluZzo6V2ViRE9NU3RyaW5nKToKKyAgICAgICAg
KFdlYkRPTVN0cmluZzo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYkRPTVN0cmluZzo6aXNFbXB0
eSk6CisgICAgICAgIChXZWJET01TdHJpbmc6OmlzTnVsbCk6CisgICAgICAgICogYmluZGluZ3Mv
Y3BwL1dlYkV4Y2VwdGlvbkhhbmRsZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKGdsb2JhbEV4Y2Vw
dGlvbkhhbmRsZXIpOgorICAgICAgICAod2ViSW5zdGFsbEV4Y2VwdGlvbkhhbmRsZXIpOgorICAg
ICAgICAod2ViUmFpc2VET01FeGNlcHRpb24pOgorICAgICAgICAqIGJpbmRpbmdzL2NwcC9XZWJF
eGNlcHRpb25IYW5kbGVyLmg6IEFkZGVkLgorICAgICAgICAod2ViRE9NUmFpc2VFcnJvcik6Cisg
ICAgICAgICogYmluZGluZ3MvY3BwL1dlYk5hdGl2ZUV2ZW50TGlzdGVuZXIuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYk5hdGl2ZUV2ZW50TGlzdGVuZXI6OldlYk5hdGl2ZUV2ZW50TGlzdGVuZXIp
OgorICAgICAgICAoV2ViTmF0aXZlRXZlbnRMaXN0ZW5lcjo6fldlYk5hdGl2ZUV2ZW50TGlzdGVu
ZXIpOgorICAgICAgICAoV2ViTmF0aXZlRXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQpOgorICAg
ICAgICAoV2ViTmF0aXZlRXZlbnRMaXN0ZW5lcjo6cmVwb3J0RXJyb3IpOgorICAgICAgICAoV2Vi
TmF0aXZlRXZlbnRMaXN0ZW5lcjo6b3BlcmF0b3I9PSk6CisgICAgICAgICogYmluZGluZ3MvY3Bw
L1dlYk5hdGl2ZUV2ZW50TGlzdGVuZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJOYXRpdmVFdmVu
dExpc3RlbmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViTmF0aXZlRXZlbnRMaXN0ZW5lcjo6Y2Fz
dCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yQ1BQLnBtOiBBZGRl
ZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQOiBBZGRlZC4KKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RPYmouY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkRPTVRlc3RPYmo6OldlYkRPTVRlc3RPYmpQcml2YXRlOjpXZWJET01UZXN0T2Jq
UHJpdmF0ZSk6CisgICAgICAgIChXZWJET01UZXN0T2JqOjpXZWJET01UZXN0T2JqKToKKyAgICAg
ICAgKFdlYkRPTVRlc3RPYmo6OmltcGwpOgorICAgICAgICAoV2ViRE9NVGVzdE9iajo6fldlYkRP
TVRlc3RPYmopOgorICAgICAgICAoV2ViRE9NVGVzdE9iajo6cmVhZE9ubHlJbnRBdHRyKToKKyAg
ICAgICAgKFdlYkRPTVRlc3RPYmo6OnJlYWRPbmx5U3RyaW5nQXR0cik6CisgICAgICAgIChXZWJE
T01UZXN0T2JqOjpyZWFkT25seVRlc3RPYmpBdHRyKToKKyAgICAgICAgKFdlYkRPTVRlc3RPYmo6
OmludEF0dHIpOgorICAgICAgICAoV2ViRE9NVGVzdE9iajo6c2V0SW50QXR0cik6CisgICAgICAg
IChXZWJET01UZXN0T2JqOjpsb25nTG9uZ0F0dHIpOgorICAgICAgICAoV2ViRE9NVGVzdE9iajo6
c2V0TG9uZ0xvbmdBdHRyKToKKyAgICAgICAgKFdlYkRPTVRlc3RPYmo6OnVuc2lnbmVkTG9uZ0xv
bmdBdHRyKToKKyAgICAgICAgKFdlYkRPTVRlc3RPYmo6OnNldFVuc2lnbmVkTG9uZ0xvbmdBdHRy
KToKKyAgICAgICAgKFdlYkRPTVRlc3RPYmo6OnN0cmluZ0F0dHIpOgorICAgICAgICAoV2ViRE9N
VGVzdE9iajo6c2V0U3RyaW5nQXR0cik6CisgICAgICAgIChXZWJET01UZXN0T2JqOjp0ZXN0T2Jq
QXR0cik6CisgICAgICAgIChXZWJET01UZXN0T2JqOjpzZXRUZXN0T2JqQXR0cik6CisgICAgICAg
IChXZWJET01UZXN0T2JqOjphdHRyV2l0aEV4Y2VwdGlvbik6CisgICAgICAgIChXZWJET01UZXN0
T2JqOjpzZXRBdHRyV2l0aEV4Y2VwdGlvbik6CisgICAgICAgIChXZWJET01UZXN0T2JqOjphdHRy
V2l0aFNldHRlckV4Y2VwdGlvbik6CisgICAgICAgIChXZWJET01UZXN0T2JqOjpzZXRBdHRyV2l0
aFNldHRlckV4Y2VwdGlvbik6CisgICAgICAgIChXZWJET01UZXN0T2JqOjphdHRyV2l0aEdldHRl
ckV4Y2VwdGlvbik6CisgICAgICAgIChXZWJET01UZXN0T2JqOjpzZXRBdHRyV2l0aEdldHRlckV4
Y2VwdGlvbik6CisgICAgICAgIChXZWJET01UZXN0T2JqOjp2b2lkTWV0aG9kKToKKyAgICAgICAg
KFdlYkRPTVRlc3RPYmo6OnZvaWRNZXRob2RXaXRoQXJncyk6CisgICAgICAgIChXZWJET01UZXN0
T2JqOjppbnRNZXRob2QpOgorICAgICAgICAoV2ViRE9NVGVzdE9iajo6aW50TWV0aG9kV2l0aEFy
Z3MpOgorICAgICAgICAoV2ViRE9NVGVzdE9iajo6b2JqTWV0aG9kKToKKyAgICAgICAgKFdlYkRP
TVRlc3RPYmo6Om9iak1ldGhvZFdpdGhBcmdzKToKKyAgICAgICAgKFdlYkRPTVRlc3RPYmo6OnNl
cmlhbGl6ZWRWYWx1ZSk6CisgICAgICAgIChXZWJET01UZXN0T2JqOjptZXRob2RXaXRoRXhjZXB0
aW9uKToKKyAgICAgICAgKFdlYkRPTVRlc3RPYmo6OmFkZEV2ZW50TGlzdGVuZXIpOgorICAgICAg
ICAoV2ViRE9NVGVzdE9iajo6cmVtb3ZlRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJET01U
ZXN0T2JqOjp3aXRoRHluYW1pY0ZyYW1lKToKKyAgICAgICAgKFdlYkRPTVRlc3RPYmo6OndpdGhE
eW5hbWljRnJhbWVBbmRBcmcpOgorICAgICAgICAoV2ViRE9NVGVzdE9iajo6d2l0aER5bmFtaWNG
cmFtZUFuZE9wdGlvbmFsQXJnKToKKyAgICAgICAgKFdlYkRPTVRlc3RPYmo6OndpdGhTY3JpcHRT
dGF0ZVZvaWQpOgorICAgICAgICAoV2ViRE9NVGVzdE9iajo6d2l0aFNjcmlwdFN0YXRlT2JqKToK
KyAgICAgICAgKFdlYkRPTVRlc3RPYmo6OndpdGhTY3JpcHRTdGF0ZVZvaWRFeGNlcHRpb24pOgor
ICAgICAgICAoV2ViRE9NVGVzdE9iajo6d2l0aFNjcmlwdFN0YXRlT2JqRXhjZXB0aW9uKToKKyAg
ICAgICAgKFdlYkRPTVRlc3RPYmo6Om1ldGhvZFdpdGhPcHRpb25hbEFyZyk6CisgICAgICAgIChX
ZWJET01UZXN0T2JqOjptZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRPcHRpb25hbEFyZyk6Cisg
ICAgICAgIChXZWJET01UZXN0T2JqOjptZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRUd29PcHRp
b25hbEFyZ3MpOgorICAgICAgICAod2ViQ29yZSk6CisgICAgICAgICh3ZWJLaXQpOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE9iai5oOiBBZGRlZC4KKyAg
ICAgICAgKiBjc3MvU3R5bGVTaGVldC5pZGw6IEV4cG9ydCBoZWxwZXIgbWV0aG9kIGlzQ1NTU3R5
bGVTaGVldCgpIGZvciBjcHAgYmluZGluZ3Mgb25seS4KKyAgICAgICAgKiBkb20vQ3VzdG9tRXZl
bnQuaWRsOiBEaXNhYmxlZCBmb3IgY3BwIGJpbmRpbmdzLCBuZWVkcyBhcmJpdGFyeSBpbnB1dCBw
YXJhbWV0ZXIgaGFuZGxpbmcgc3VwcG9ydC4KKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaWRsOiBJ
Z25vcmUgZ2V0Q1NTQ2FudmFzQ29udGV4dCgpIGZvciBjcHAgYmluZGluZ3MgYW5kIGV4cG9ydCBo
ZWxwZXIgbWV0aG9kIGlzSFRNTERvY3VtZW50KCkgKGNwcCBiaW5kaW5ncyBvbmx5KS4KKyAgICAg
ICAgKiBkb20vRWxlbWVudC5pZGw6IEFkZCBbTm9DUFBDdXN0b21dIG1hcmtlcnMgZm9yIHNldEF0
dHJpYnV0ZShOUyksIGFzIHdlJ3JlIGp1c3QgYXV0b2dlbmVyYXRpbmcgdGhlbS4KKyAgICAgICAg
KiBkb20vRXZlbnQuaWRsOiBFeHBvcnQgaXNNdXRhdGlvbkV2ZW50KCkvaXNNb3VzZUV2ZW50KCkv
aXNVSUV2ZW50KCkgaGVscGVycyBmb3IgY3BwIGJpbmRpbmdzIG9ubHkuCisgICAgICAgICogZG9t
L0V2ZW50TGlzdGVuZXIuaDogQWRkIENQUEV2ZW50TGlzdGVuZXJUeXBlLgorICAgICAgICAqIGRv
bS9Ob2RlLmlkbDogYWRkRXZlbnRMaXN0ZW5lci9yZW1vdmVFdmVudExpc3RlbmVyIG5lZWQgW0N1
c3RvbV0gZmxhZyBmb3IgY3BwIGJpbmRpbmdzLgorICAgICAgICAqIGRvbS9Qb3BTdGF0ZUV2ZW50
LmlkbDogRGlzYWJsZWQganVzdCBsaWtlIEN1c3RvbUV2ZW50LCBmb3IgdGhlIHNhbWUgcmVhc29u
ICgiYW55IiBhcmd1bWVudCB0eXBlIGhhbmRsaW5nKS4gCisgICAgICAgICogaHRtbC9IVE1MQ2Fu
dmFzRWxlbWVudC5pZGw6IERpc2FibGUgZ2V0Q29udGV4dCgpIG1ldGhvZCBmb3IgY3BwIGJpbmRp
bmdzLCBhcyBpdCdzIGRvbmUgZm9yIG9iamMgYmluZGluZ3MuCisgICAgICAgICogaHRtbC9IVE1M
RG9jdW1lbnQuaWRsOiBBZGQgW05vQ1BQQ3VzdG9tXSBtYXJrZXIgZm9yIG9wZW4oKSwgYXMgd2Un
cmUganVzdCBhdXRvZ2VuZXJhdGluZyBpdC4KKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1l
bnQuaWRsOiBEaXNhYmxlIHZhbHVlQXNEYXRlKCkgbWV0aG9kIGZvciBjcHAgYmluZGluZ3MsIGFz
IHdlJ3JlIG1pc3NpbmcgbmF0aXZlICdEYXRlJyB0eXBlIHN1cHBvcnQuCisgICAgICAgICogaHRt
bC9JbWFnZURhdGEuaWRsOiBEb24ndCBleHBvc2UgZGF0YSBwcm9wZXJ0eSBmb3IgdGhlIGNwcCBi
aW5kaW5ncywgQ2FudmFzUGl4ZWxBcnJheURhdGEgbm90IGF2YWlsYWJsZSBhdCB0aGUgbW9tZW50
LgorICAgICAgICAqIGh0bWwvTWVkaWFFcnJvci5oOiBBZGQgbWlzc2luZyBQYXNzUmVmUHRyLmgg
aW5jbHVkZS4KKyAgICAgICAgKiBodG1sL1RleHRNZXRyaWNzLmg6IERpdHRvLgorICAgICAgICAq
IGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5pZGw6IERpc2FibGUgbWV0aG9k
cyAoc2V0TGluZUNhcCwgZXRjLi4pIGZvciBjcHAgYmluZGluZ3Mgd2hvc2UgbmFtZXMgY2xhc2gg
d2l0aCBwcm9wZXJ0eSBzZXR0ZXJzLgorICAgICAgICAqIHBhZ2UvQWJzdHJhY3RWaWV3LmlkbDog
UmVuYW1lICdNZWRpYScgdHlwZSB0byAnU3R5bGVNZWRpYScgLSB0aGlzIHNob3VsZCBoYXZlIGJl
ZW4gZG9uZSBiZWZvcmUuCisgICAgICAgICogcGFnZS9Mb2NhdGlvbi5pZGw6IERpc2FibGUgc2V2
ZXJhbCBtZXRob2RzIHdoaWNoIHdvdWxkIG5lZWQgYSBjdXN0b20gaW1wbGVtZW50YXRpb24gZm9y
IHRoZSBjcHAgYmluZGluZ3MuIAorICAgICAgICAqIHBhZ2UvV2ViS2l0UG9pbnQuaDogQWRkIG1p
c3NpbmcgUGFzc1JlZlB0ci5oIGluY2x1ZGUuCisgICAgICAgICogc3RvcmFnZS9TUUxSZXN1bHRT
ZXQuaWRsOiBDb3JyZWN0IHR5cGUgZnJvbSAnbG9uZycgdG8gJ2xvbmcgbG9uZycsIGZvciBjcHAg
YmluZGluZ3Mgb25seSB0aG91Z2ggYXMgaXQgd291bGRuJ3QgYnVpbGQgb24gQ2hyb21pdW0vVjgu
CisgICAgICAgICogd29ya2Vycy9EZWRpY2F0ZWRXb3JrZXJDb250ZXh0LmlkbDogRGlzYWJsZSBw
b3N0TWVzc2FnZSgpIGZvciBub3cgd2hlbiB1c2luZyBjcHAgYmluZGluZ3MsIHdvdWxkIG5lZWQg
Y3VzdG9tIGNvZGUgZm9yIHVzLgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyQ29udGV4dC5pZGw6
IEhpZGUgY29uc3RydWN0b3JzIGZyb20gY3BwIGJpbmRpbmdzLgorCiAyMDEwLTA0LTI5ICBKZXJl
bXkgT3Jsb3cgIDxqb3Jsb3dAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERh
cmluIEZpc2hlci4KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvY3BwL1dlYkRPTUNTdHJpbmcuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvY3BwL1dlYkRPTUNTdHJpbmcuY3BwCShy
ZXZpc2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy9jcHAvV2ViRE9NQ1N0cmluZy5jcHAJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMTEzIEBACisvKgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJj
aCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJXZWJET01DU3RyaW5nLmgiCisKKyNpbmNsdWRlICJUZXh0RW5j
b2RpbmcuaCIKKyNpbmNsdWRlICJXZWJET01TdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CisKK2NsYXNzIFdlYkRPTUNTdHJpbmdQcml2YXRlIDogcHVibGljIFdURjo6Q1N0
cmluZ0J1ZmZlciB7Cit9OworCit2b2lkIFdlYkRPTUNTdHJpbmc6OnJlc2V0KCkKK3sKKyAgICBp
ZiAobV9wcml2YXRlKSB7CisgICAgICAgIG1fcHJpdmF0ZS0+ZGVyZWYoKTsKKyAgICAgICAgbV9w
cml2YXRlID0gMDsKKyAgICB9Cit9CisKK3ZvaWQgV2ViRE9NQ1N0cmluZzo6YXNzaWduKGNvbnN0
IFdlYkRPTUNTdHJpbmcmIG90aGVyKQoreworICAgIGFzc2lnbihjb25zdF9jYXN0PFdlYkRPTUNT
dHJpbmdQcml2YXRlKj4ob3RoZXIubV9wcml2YXRlKSk7Cit9CisKK3ZvaWQgV2ViRE9NQ1N0cmlu
Zzo6YXNzaWduKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgpCit7CisgICAgY2hhciog
bmV3RGF0YTsKKyAgICBSZWZQdHI8V1RGOjpDU3RyaW5nQnVmZmVyPiBidWZmZXIgPQorICAgICAg
ICBXVEY6OkNTdHJpbmc6Om5ld1VuaW5pdGlhbGl6ZWQobGVuZ3RoLCBuZXdEYXRhKS5idWZmZXIo
KTsKKyAgICBtZW1jcHkobmV3RGF0YSwgZGF0YSwgbGVuZ3RoKTsKKyAgICBhc3NpZ24oc3RhdGlj
X2Nhc3Q8V2ViRE9NQ1N0cmluZ1ByaXZhdGUqPihidWZmZXIuZ2V0KCkpKTsKK30KKworc2l6ZV90
IFdlYkRPTUNTdHJpbmc6Omxlbmd0aCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3ByaXZhdGUpCisg
ICAgICAgIHJldHVybiAwOworICAgIC8vIE5PVEU6IFRoZSBidWZmZXIncyBsZW5ndGggaW5jbHVk
ZXMgdGhlIG51bGwgYnl0ZS4KKyAgICByZXR1cm4gY29uc3RfY2FzdDxXZWJET01DU3RyaW5nUHJp
dmF0ZSo+KG1fcHJpdmF0ZSktPmxlbmd0aCgpIC0gMTsKK30KKworY29uc3QgY2hhciogV2ViRE9N
Q1N0cmluZzo6ZGF0YSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3ByaXZhdGUpCisgICAgICAgIHJl
dHVybiAwOworICAgIHJldHVybiBjb25zdF9jYXN0PFdlYkRPTUNTdHJpbmdQcml2YXRlKj4obV9w
cml2YXRlKS0+ZGF0YSgpOworfQorCitXZWJET01TdHJpbmcgV2ViRE9NQ1N0cmluZzo6dXRmMTYo
KSBjb25zdAoreworICAgIHJldHVybiBXZWJDb3JlOjpVVEY4RW5jb2RpbmcoKS5kZWNvZGUoZGF0
YSgpLCBsZW5ndGgoKSk7Cit9CisKK1dlYkRPTUNTdHJpbmcgV2ViRE9NQ1N0cmluZzo6ZnJvbVVU
RjE2KGNvbnN0IFdlYlVDaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoKQoreworICAgIHJldHVybiBX
ZWJDb3JlOjpVVEY4RW5jb2RpbmcoKS5lbmNvZGUoCisgICAgICAgIGRhdGEsIGxlbmd0aCwgV2Vi
Q29yZTo6UXVlc3Rpb25NYXJrc0ZvclVuZW5jb2RhYmxlcyk7Cit9CisKK1dlYkRPTUNTdHJpbmcg
V2ViRE9NQ1N0cmluZzo6ZnJvbVVURjE2KGNvbnN0IFdlYlVDaGFyKiBkYXRhKQoreworICAgIHNp
emVfdCBsZW4gPSAwOworICAgIHdoaWxlIChkYXRhW2xlbl0gIT0gV2ViVUNoYXIoMCkpCisgICAg
ICAgIGxlbisrOworICAgIHJldHVybiBmcm9tVVRGMTYoZGF0YSwgbGVuKTsKK30KKworV2ViRE9N
Q1N0cmluZzo6V2ViRE9NQ1N0cmluZyhjb25zdCBXVEY6OkNTdHJpbmcmIHMpCisgICAgOiBtX3By
aXZhdGUoc3RhdGljX2Nhc3Q8V2ViRE9NQ1N0cmluZ1ByaXZhdGUqPihzLmJ1ZmZlcigpKSkKK3sK
KyAgICBpZiAobV9wcml2YXRlKQorICAgICAgICBtX3ByaXZhdGUtPnJlZigpOworfQorCitXZWJE
T01DU3RyaW5nJiBXZWJET01DU3RyaW5nOjpvcGVyYXRvcj0oY29uc3QgV1RGOjpDU3RyaW5nJiBz
KQoreworICAgIGFzc2lnbihzdGF0aWNfY2FzdDxXZWJET01DU3RyaW5nUHJpdmF0ZSo+KHMuYnVm
ZmVyKCkpKTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK1dlYkRPTUNTdHJpbmc6Om9wZXJhdG9y
IFdURjo6Q1N0cmluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZTsKK30KKwordm9p
ZCBXZWJET01DU3RyaW5nOjphc3NpZ24oV2ViRE9NQ1N0cmluZ1ByaXZhdGUqIHApCit7CisgICAg
Ly8gVGFrZSBjYXJlIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSBtX3ByaXZhdGUgPT0gcAorICAg
IGlmIChwKQorICAgICAgICBwLT5yZWYoKTsKKyAgICBpZiAobV9wcml2YXRlKQorICAgICAgICBt
X3ByaXZhdGUtPmRlcmVmKCk7CisgICAgbV9wcml2YXRlID0gcDsKK30KClByb3BlcnR5IGNoYW5n
ZXMgb246IFdlYkNvcmUvYmluZGluZ3MvY3BwL1dlYkRPTUNTdHJpbmcuY3BwCl9fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
QWRkZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsgKgoKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvY3Bw
L1dlYkRPTUNTdHJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2NwcC9XZWJE
T01DU3RyaW5nLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL2NwcC9XZWJET01D
U3RyaW5nLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2lmbmRlZiBXZWJET01DU3RyaW5nX2gKKyNkZWZpbmUgV2ViRE9NQ1N0cmluZ19oCisKKyNpbmNs
dWRlIDxXZWJET01PYmplY3QuaD4KKyNpbmNsdWRlIDxzdGRkZWYuaD4gLy8gRm9yIHNpemVfdAor
CituYW1lc3BhY2UgV1RGIHsKK2NsYXNzIENTdHJpbmc7Cit9OworCisvLyBVVEYtMTYgY2hhcmFj
dGVyIHR5cGUKKyNpZiBkZWZpbmVkKFdJTjMyKQordHlwZWRlZiB3Y2hhcl90IFdlYlVDaGFyOwor
I2Vsc2UKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgV2ViVUNoYXI7CisjZW5kaWYKKworY2xhc3Mg
V2ViRE9NQ1N0cmluZ1ByaXZhdGU7CitjbGFzcyBXZWJET01TdHJpbmc7CisKKy8vIEEgc2luZ2xl
LWJ5dGUgc3RyaW5nIGNvbnRhaW5lciB3aXRoIHVuc3BlY2lmaWVkIGVuY29kaW5nLiAgSXQgaXMK
Ky8vIGluZXhwZW5zaXZlIHRvIGNvcHkgYSBXZWJET01DU3RyaW5nIG9iamVjdC4KKy8vCisvLyBX
QVJOSU5HOiBJdCBpcyBub3Qgc2FmZSB0byBwYXNzIGEgV2ViRE9NQ1N0cmluZyBhY3Jvc3MgdGhy
ZWFkcyEhIQorLy8KK2NsYXNzIFdlYkRPTUNTdHJpbmcgeworcHVibGljOgorICAgIH5XZWJET01D
U3RyaW5nKCkgeyByZXNldCgpOyB9CisKKyAgICBXZWJET01DU3RyaW5nKCkgOiBtX3ByaXZhdGUo
MCkgeyB9CisKKyAgICBXZWJET01DU3RyaW5nKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBsZW4p
IDogbV9wcml2YXRlKDApCisgICAgeworICAgICAgICBhc3NpZ24oZGF0YSwgbGVuKTsKKyAgICB9
CisKKyAgICBXZWJET01DU3RyaW5nKGNvbnN0IFdlYkRPTUNTdHJpbmcmIHMpIDogbV9wcml2YXRl
KDApIHsgYXNzaWduKHMpOyB9CisKKyAgICBXZWJET01DU3RyaW5nJiBvcGVyYXRvcj0oY29uc3Qg
V2ViRE9NQ1N0cmluZyYgcykKKyAgICB7CisgICAgICAgIGFzc2lnbihzKTsKKyAgICAgICAgcmV0
dXJuICp0aGlzOworICAgIH0KKworICAgIHZvaWQgcmVzZXQoKTsKKyAgICB2b2lkIGFzc2lnbihj
b25zdCBXZWJET01DU3RyaW5nJik7CisgICAgdm9pZCBhc3NpZ24oY29uc3QgY2hhciogZGF0YSwg
c2l6ZV90IGxlbik7CisKKyAgICBzaXplX3QgbGVuZ3RoKCkgY29uc3Q7CisgICAgY29uc3QgY2hh
ciogZGF0YSgpIGNvbnN0OworCisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIWxl
bmd0aCgpOyB9CisgICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiAhbV9wcml2YXRlOyB9
CisKKyAgICBXZWJET01TdHJpbmcgdXRmMTYoKSBjb25zdDsKKworICAgIHN0YXRpYyBXZWJET01D
U3RyaW5nIGZyb21VVEYxNihjb25zdCBXZWJVQ2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCk7Cisg
ICAgc3RhdGljIFdlYkRPTUNTdHJpbmcgZnJvbVVURjE2KGNvbnN0IFdlYlVDaGFyKiBkYXRhKTsK
KworICAgIFdlYkRPTUNTdHJpbmcoY29uc3QgV1RGOjpDU3RyaW5nJik7CisgICAgV2ViRE9NQ1N0
cmluZyYgb3BlcmF0b3I9KGNvbnN0IFdURjo6Q1N0cmluZyYpOworICAgIG9wZXJhdG9yIFdURjo6
Q1N0cmluZygpIGNvbnN0OworCitwcml2YXRlOgorICAgIHZvaWQgYXNzaWduKFdlYkRPTUNTdHJp
bmdQcml2YXRlKik7CisgICAgV2ViRE9NQ1N0cmluZ1ByaXZhdGUqIG1fcHJpdmF0ZTsKK307CisK
KyNlbmRpZgoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViQ29yZS9iaW5kaW5ncy9jcHAvV2ViRE9N
Q1N0cmluZy5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsgKgoKSW5kZXg6
IFdlYkNvcmUvYmluZGluZ3MvY3BwL1dlYkRPTUVsZW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvYmluZGluZ3MvY3BwL1dlYkRPTUVsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lv
biAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy9jcHAvV2ViRE9NRWxlbWVudEN1c3RvbS5jcHAJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNo
IEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJXZWJET01FbGVtZW50LmgiCisKKyNpbmNsdWRlICJBdHRyLmgi
CisjaW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNs
dWRlICJXZWJET01BdHRyLmgiCisjaW5jbHVkZSAiV2ViRXhjZXB0aW9uSGFuZGxlci5oIgorCitX
ZWJET01BdHRyIFdlYkRPTUVsZW1lbnQ6OnNldEF0dHJpYnV0ZU5vZGUoY29uc3QgV2ViRE9NQXR0
ciYgbmV3QXR0cikKK3sKKyAgICBpZiAoIWltcGwoKSkKKyAgICAgICAgcmV0dXJuIFdlYkRPTUF0
dHIoKTsKKworICAgIFdlYkNvcmU6OkF0dHIqIGF0dHIgPSB0b1dlYkNvcmUobmV3QXR0cik7Cisg
ICAgaWYgKCFhdHRyKSB7CisgICAgICAgIHdlYkRPTVJhaXNlRXJyb3Ioc3RhdGljX2Nhc3Q8V2Vi
RE9NRXhjZXB0aW9uQ29kZT4oV2ViQ29yZTo6VFlQRV9NSVNNQVRDSF9FUlIpKTsKKyAgICAgICAg
cmV0dXJuIFdlYkRPTUF0dHIoKTsKKyAgICB9CisKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2Rl
IGVjID0gMDsKKyAgICBXZWJET01BdHRyIHJlc3VsdCA9IHRvV2ViS2l0KFdURjo6Z2V0UHRyKGlt
cGwoKS0+c2V0QXR0cmlidXRlTm9kZShhdHRyLCBlYykpKTsKKyAgICB3ZWJET01SYWlzZUVycm9y
KHN0YXRpY19jYXN0PFdlYkRPTUV4Y2VwdGlvbkNvZGU+KGVjKSk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworV2ViRE9NQXR0ciBXZWJET01FbGVtZW50OjpzZXRBdHRyaWJ1dGVOb2RlTlMoY29u
c3QgV2ViRE9NQXR0ciYgbmV3QXR0cikKK3sKKyAgICBpZiAoIWltcGwoKSkKKyAgICAgICAgcmV0
dXJuIFdlYkRPTUF0dHIoKTsKKworICAgIFdlYkNvcmU6OkF0dHIqIGF0dHIgPSB0b1dlYkNvcmUo
bmV3QXR0cik7CisgICAgaWYgKCFhdHRyKSB7CisgICAgICAgIHdlYkRPTVJhaXNlRXJyb3Ioc3Rh
dGljX2Nhc3Q8V2ViRE9NRXhjZXB0aW9uQ29kZT4oV2ViQ29yZTo6VFlQRV9NSVNNQVRDSF9FUlIp
KTsKKyAgICAgICAgcmV0dXJuIFdlYkRPTUF0dHIoKTsKKyAgICB9CisKKyAgICBXZWJDb3JlOjpF
eGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBXZWJET01BdHRyIHJlc3VsdCA9IHRvV2ViS2l0KFdU
Rjo6Z2V0UHRyKGltcGwoKS0+c2V0QXR0cmlidXRlTm9kZU5TKGF0dHIsIGVjKSkpOworICAgIHdl
YkRPTVJhaXNlRXJyb3Ioc3RhdGljX2Nhc3Q8V2ViRE9NRXhjZXB0aW9uQ29kZT4oZWMpKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViQ29yZS9iaW5kaW5n
cy9jcHAvV2ViRE9NRWxlbWVudEN1c3RvbS5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1
dGFibGUKICAgKyAqCgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9jcHAvV2ViRE9NRXZlbnRMaXN0
ZW5lckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9jcHAvV2ViRE9N
RXZlbnRMaXN0ZW5lckN1c3RvbS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdz
L2NwcC9XZWJET01FdmVudExpc3RlbmVyQ3VzdG9tLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQg
MjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IldlYkRPTUV2ZW50TGlzdGVuZXIuaCIKKworI2luY2x1ZGUgIldlYkRPTUV2ZW50LmgiCisjaW5j
bHVkZSAiV2ViTmF0aXZlRXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
Kwordm9pZCBXZWJET01FdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudChjb25zdCBXZWJET01FdmVu
dCYgZXZ0KQoreworICAgIGlmICghaW1wbCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpbXBs
KCktPmhhbmRsZUV2ZW50KDAsIHRvV2ViQ29yZShldnQpKTsKK30KKworV2ViRE9NRXZlbnRMaXN0
ZW5lciB0b1dlYktpdChXZWJVc2VyRXZlbnRMaXN0ZW5lciogdmFsdWUpCit7CisgICAgUmVmUHRy
PFdlYk5hdGl2ZUV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gV2ViTmF0aXZlRXZlbnRMaXN0ZW5l
cjo6Y3JlYXRlKHZhbHVlKTsKKyAgICByZXR1cm4gV2ViRE9NRXZlbnRMaXN0ZW5lcihsaXN0ZW5l
ci5nZXQoKSk7Cit9CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL2JpbmRpbmdzL2NwcC9X
ZWJET01FdmVudExpc3RlbmVyQ3VzdG9tLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0
YWJsZQogICArICoKCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2NwcC9XZWJET01FdmVudFRhcmdl
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9jcHAvV2ViRE9NRXZlbnRUYXJn
ZXQuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy9jcHAvV2ViRE9NRXZlbnRU
YXJnZXQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE2MCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJET01FdmVudFRhcmdldC5oIgorCisj
aW5jbHVkZSAiRE9NQXBwbGljYXRpb25DYWNoZS5oIgorI2luY2x1ZGUgIkRlZGljYXRlZFdvcmtl
ckNvbnRleHQuaCIKKyNpbmNsdWRlICJFdmVudFNvdXJjZS5oIgorI2luY2x1ZGUgIk1lc3NhZ2VQ
b3J0LmgiCisjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIk5vdGlmaWNhdGlvbi5oIgorI2lu
Y2x1ZGUgIlNoYXJlZFdvcmtlci5oIgorI2luY2x1ZGUgIlNoYXJlZFdvcmtlckNvbnRleHQuaCIK
KyNpbmNsdWRlICJUaHJlYWRDaGVjay5oIgorI2luY2x1ZGUgIldlYkRPTURPTUFwcGxpY2F0aW9u
Q2FjaGUuaCIKKyNpbmNsdWRlICJXZWJET01EZWRpY2F0ZWRXb3JrZXJDb250ZXh0LmgiCisjaW5j
bHVkZSAiV2ViRE9NRXZlbnRTb3VyY2UuaCIKKyNpbmNsdWRlICJXZWJET01NZXNzYWdlUG9ydC5o
IgorI2luY2x1ZGUgIldlYkRPTU5vZGUuaCIKKyNpbmNsdWRlICJXZWJET01Ob3RpZmljYXRpb24u
aCIKKyNpbmNsdWRlICJXZWJET01TaGFyZWRXb3JrZXIuaCIKKyNpbmNsdWRlICJXZWJET01TaGFy
ZWRXb3JrZXJDb250ZXh0LmgiCisjaW5jbHVkZSAiV2ViRE9NV2ViU29ja2V0LmgiCisjaW5jbHVk
ZSAiV2ViRE9NV29ya2VyLmgiCisjaW5jbHVkZSAiV2ViRE9NWE1MSHR0cFJlcXVlc3QuaCIKKyNp
bmNsdWRlICJXZWJET01YTUxIdHRwUmVxdWVzdFVwbG9hZC5oIgorI2luY2x1ZGUgIldlYkV4Y2Vw
dGlvbkhhbmRsZXIuaCIKKyNpbmNsdWRlICJXZWJTb2NrZXQuaCIKKyNpbmNsdWRlICJXb3JrZXIu
aCIKKyNpbmNsdWRlICJYTUxIdHRwUmVxdWVzdC5oIgorI2luY2x1ZGUgIlhNTEh0dHBSZXF1ZXN0
VXBsb2FkLmgiCisKKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK3N0cnVjdCBXZWJET01FdmVu
dFRhcmdldDo6V2ViRE9NRXZlbnRUYXJnZXRQcml2YXRlIHsKKyAgICBXZWJET01FdmVudFRhcmdl
dFByaXZhdGUoV2ViQ29yZTo6RXZlbnRUYXJnZXQqIG9iamVjdCA9IDApCisgICAgICAgIDogaW1w
bChvYmplY3QpCisgICAgeworICAgIH0KKworICAgIFJlZlB0cjxXZWJDb3JlOjpFdmVudFRhcmdl
dD4gaW1wbDsKK307CisKK1dlYkRPTUV2ZW50VGFyZ2V0OjpXZWJET01FdmVudFRhcmdldCgpCisg
ICAgOiBXZWJET01PYmplY3QoKQorICAgICwgbV9kKDApCit7Cit9CisKK1dlYkRPTUV2ZW50VGFy
Z2V0OjpXZWJET01FdmVudFRhcmdldChXZWJDb3JlOjpFdmVudFRhcmdldCogaW1wbCkKKyAgICA6
IFdlYkRPTU9iamVjdCgpCisgICAgLCBtX2QobmV3IFdlYkRPTUV2ZW50VGFyZ2V0UHJpdmF0ZShp
bXBsKSkKK3sKK30KKworV2ViRE9NRXZlbnRUYXJnZXQ6OldlYkRPTUV2ZW50VGFyZ2V0KGNvbnN0
IFdlYkRPTUV2ZW50VGFyZ2V0JiBjb3B5KQorICAgIDogV2ViRE9NT2JqZWN0KCkKK3sKKyAgICBt
X2QgPSBjb3B5LmltcGwoKSA/IG5ldyBXZWJET01FdmVudFRhcmdldFByaXZhdGUoY29weS5pbXBs
KCkpIDogMDsKK30KKworV2ViRE9NRXZlbnRUYXJnZXQ6On5XZWJET01FdmVudFRhcmdldCgpCit7
CisgICAgZGVsZXRlIG1fZDsKKyAgICBtX2QgPSAwOworfQorCitXZWJDb3JlOjpFdmVudFRhcmdl
dCogV2ViRE9NRXZlbnRUYXJnZXQ6OmltcGwoKSBjb25zdAoreworICAgIHJldHVybiBtX2QgPyBt
X2QtPmltcGwuZ2V0KCkgOiAwOworfQorCitXZWJDb3JlOjpFdmVudFRhcmdldCogdG9XZWJDb3Jl
KGNvbnN0IFdlYkRPTUV2ZW50VGFyZ2V0JiB3cmFwcGVyKQoreworICAgIHJldHVybiB3cmFwcGVy
LmltcGwoKTsKK30KKworV2ViRE9NRXZlbnRUYXJnZXQgdG9XZWJLaXQoV2ViQ29yZTo6RXZlbnRU
YXJnZXQqIHZhbHVlKQoreworICAgIHsKKyAgICAgICAgV0VCRE9NX0FTU0VSVF9NQUlOX1RIUkVB
RCgpOworICAgICAgICBXZWJDb3JlVGhyZWFkVmlvbGF0aW9uQ2hlY2tSb3VuZE9uZSgpOworICAg
IH0KKworI2lmIEVOQUJMRShFVkVOVFNPVVJDRSkKKyAgICBpZiAoV2ViQ29yZTo6RXZlbnRTb3Vy
Y2UqIGV2ZW50U291cmNlID0gdmFsdWUtPnRvRXZlbnRTb3VyY2UoKSkKKyAgICAgICAgcmV0dXJu
IHRvV2ViS2l0KGV2ZW50U291cmNlKTsKKyNlbmRpZgorCisjaWYgRU5BQkxFKFNWRykgJiYgMAor
ICAgIC8vIEZJWE1FOiBFbmFibGUgb25jZSBTVkcgYmluZGluZ3MgYXJlIGdlbmVyYXRlZC4KKyAg
ICAvLyBTVkdFbGVtZW50SW5zdGFuY2Ugc3VwcG9ydHMgYm90aCB0b1NWR0VsZW1lbnRJbnN0YW5j
ZSBhbmQgdG9Ob2RlIHNpbmNlIHNvIG11Y2ggbW91c2UgaGFuZGxpbmcgY29kZSBkZXBlbmRzIG9u
IHRvTm9kZSByZXR1cm5pbmcgYSB2YWxpZCBub2RlLgorICAgIGlmIChXZWJDb3JlOjpTVkdFbGVt
ZW50SW5zdGFuY2UqIGluc3RhbmNlID0gdmFsdWUtPnRvU1ZHRWxlbWVudEluc3RhbmNlKCkpCisg
ICAgICAgIHJldHVybiB0b1dlYktpdChpbnN0YW5jZSk7CisjZW5kaWYKKworICAgIGlmIChXZWJD
b3JlOjpOb2RlKiBub2RlID0gdmFsdWUtPnRvTm9kZSgpKQorICAgICAgICByZXR1cm4gdG9XZWJL
aXQobm9kZSk7CisKKyAgICBpZiAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3QqIHhociA9IHZhbHVl
LT50b1hNTEh0dHBSZXF1ZXN0KCkpCisgICAgICAgIHJldHVybiB0b1dlYktpdCh4aHIpOworCisg
ICAgaWYgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0VXBsb2FkKiB1cGxvYWQgPSB2YWx1ZS0+dG9Y
TUxIdHRwUmVxdWVzdFVwbG9hZCgpKQorICAgICAgICByZXR1cm4gdG9XZWJLaXQodXBsb2FkKTsK
KworI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCisgICAgaWYgKFdlYkNvcmU6
OkRPTUFwcGxpY2F0aW9uQ2FjaGUqIGNhY2hlID0gdmFsdWUtPnRvRE9NQXBwbGljYXRpb25DYWNo
ZSgpKQorICAgICAgICByZXR1cm4gdG9XZWJLaXQoY2FjaGUpOworI2VuZGlmCisKKyAgICBpZiAo
V2ViQ29yZTo6TWVzc2FnZVBvcnQqIG1lc3NhZ2VQb3J0ID0gdmFsdWUtPnRvTWVzc2FnZVBvcnQo
KSkKKyAgICAgICAgcmV0dXJuIHRvV2ViS2l0KG1lc3NhZ2VQb3J0KTsKKworI2lmIEVOQUJMRShX
T1JLRVJTKQorICAgIGlmIChXZWJDb3JlOjpXb3JrZXIqIHdvcmtlciA9IHZhbHVlLT50b1dvcmtl
cigpKQorICAgICAgICByZXR1cm4gdG9XZWJLaXQod29ya2VyKTsKKworICAgIGlmIChXZWJDb3Jl
OjpEZWRpY2F0ZWRXb3JrZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0ID0gdmFsdWUtPnRvRGVkaWNh
dGVkV29ya2VyQ29udGV4dCgpKQorICAgICAgICByZXR1cm4gdG9XZWJLaXQod29ya2VyQ29udGV4
dCk7CisjZW5kaWYKKworI2lmIEVOQUJMRShTSEFSRURfV09SS0VSUykKKyAgICBpZiAoV2ViQ29y
ZTo6U2hhcmVkV29ya2VyKiBzaGFyZWRXb3JrZXIgPSB2YWx1ZS0+dG9TaGFyZWRXb3JrZXIoKSkK
KyAgICAgICAgcmV0dXJuIHRvV2ViS2l0KHNoYXJlZFdvcmtlcik7CisKKyAgICBpZiAoV2ViQ29y
ZTo6U2hhcmVkV29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4dCA9IHZhbHVlLT50b1NoYXJlZFdv
cmtlckNvbnRleHQoKSkKKyAgICAgICAgcmV0dXJuIHRvV2ViS2l0KHdvcmtlckNvbnRleHQpOwor
I2VuZGlmCisKKyNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykKKyAgICBpZiAoV2ViQ29yZTo6Tm90
aWZpY2F0aW9uKiBub3RpZmljYXRpb24gPSB2YWx1ZS0+dG9Ob3RpZmljYXRpb24oKSkKKyAgICAg
ICAgcmV0dXJuIHRvV2ViS2l0KG5vdGlmaWNhdGlvbik7CisjZW5kaWYKKworI2lmIEVOQUJMRShX
RUJfU09DS0VUUykKKyAgICBpZiAoV2ViQ29yZTo6V2ViU29ja2V0KiB3ZWJTb2NrZXQgPSB2YWx1
ZS0+dG9XZWJTb2NrZXQoKSkKKyAgICAgICAgcmV0dXJuIHRvV2ViS2l0KHdlYlNvY2tldCk7Cisj
ZW5kaWYKKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBXZWJET01FdmVu
dFRhcmdldCgpOworfQoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViQ29yZS9iaW5kaW5ncy9jcHAv
V2ViRE9NRXZlbnRUYXJnZXQuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiAg
ICsgKgoKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvY3BwL1dlYkRPTUV2ZW50VGFyZ2V0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9jcHAvV2ViRE9NRXZlbnRUYXJnZXQuaAkocmV2
aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3MvY3BwL1dlYkRPTUV2ZW50VGFyZ2V0LmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNo
IEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2Vi
RE9NRXZlbnRUYXJnZXRfaAorI2RlZmluZSBXZWJET01FdmVudFRhcmdldF9oCisKKyNpbmNsdWRl
IDxXZWJET01PYmplY3QuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgRXZlbnRUYXJn
ZXQ7Cit9OworCitjbGFzcyBXZWJET01FdmVudFRhcmdldCA6IHB1YmxpYyBXZWJET01PYmplY3Qg
eworcHVibGljOgorICAgIFdlYkRPTUV2ZW50VGFyZ2V0KCk7CisgICAgZXhwbGljaXQgV2ViRE9N
RXZlbnRUYXJnZXQoV2ViQ29yZTo6RXZlbnRUYXJnZXQqKTsKKyAgICBXZWJET01FdmVudFRhcmdl
dChjb25zdCBXZWJET01FdmVudFRhcmdldCYpOworICAgIH5XZWJET01FdmVudFRhcmdldCgpOwor
CisgICAgV2ViQ29yZTo6RXZlbnRUYXJnZXQqIGltcGwoKSBjb25zdDsKKworICAgIC8vIEZJWE1F
OiBBZGQgYSBwb3NzaWJpbGl0eSB0byBjaGVjayB3aGF0IGtpbmQgb2YgRXZlbnRUYXJnZXQgd2Ug
aGF2ZSwKKyAgICAvLyB0byBiZSBhYmxlIHRvIGNhc3QgZWcuIGEgV2ViRE9NRXZlbnRUYXJnZXQg
dG8gYSBXZWJET01Ob2RlCisKK3Byb3RlY3RlZDoKKyAgICBzdHJ1Y3QgV2ViRE9NRXZlbnRUYXJn
ZXRQcml2YXRlOworICAgIFdlYkRPTUV2ZW50VGFyZ2V0UHJpdmF0ZSogbV9kOworfTsKKworV2Vi
Q29yZTo6RXZlbnRUYXJnZXQqIHRvV2ViQ29yZShjb25zdCBXZWJET01FdmVudFRhcmdldCYpOwor
V2ViRE9NRXZlbnRUYXJnZXQgdG9XZWJLaXQoV2ViQ29yZTo6RXZlbnRUYXJnZXQqKTsKKworI2Vu
ZGlmCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL2JpbmRpbmdzL2NwcC9XZWJET01FdmVu
dFRhcmdldC5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsgKgoKSW5kZXg6
IFdlYkNvcmUvYmluZGluZ3MvY3BwL1dlYkRPTUhUTUxEb2N1bWVudEN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9jcHAvV2ViRE9NSFRNTERvY3VtZW50Q3VzdG9tLmNw
cAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3MvY3BwL1dlYkRPTUhUTUxEb2N1bWVu
dEN1c3RvbS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJET01IVE1MRG9jdW1lbnQuaCIK
KworI2luY2x1ZGUgIkNoYXJhY3Rlck5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTERvY3VtZW50Lmgi
CisjaW5jbHVkZSAiU2VnbWVudGVkU3RyaW5nLmgiCisjaW5jbHVkZSAiV2ViRXhjZXB0aW9uSGFu
ZGxlci5oIgorCitzdGF0aWMgaW5saW5lIHZvaWQgZG9jdW1lbnRXcml0ZShjb25zdCBXZWJET01T
dHJpbmcmIHRleHQsIFdlYkNvcmU6OkhUTUxEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wgYWRkTmV3
bGluZSkKK3sKKyAgICBXZWJDb3JlOjpTZWdtZW50ZWRTdHJpbmcgc2VnbWVudGVkU3RyaW5nID0g
V2ViQ29yZTo6U3RyaW5nKHRleHQpOworICAgIGlmIChhZGROZXdsaW5lKQorICAgICAgICBzZWdt
ZW50ZWRTdHJpbmcuYXBwZW5kKFdlYkNvcmU6OlNlZ21lbnRlZFN0cmluZygmV2ViQ29yZTo6bmV3
bGluZUNoYXJhY3RlciwgMSkpOworICAgIGRvY3VtZW50LT53cml0ZShzZWdtZW50ZWRTdHJpbmcp
OworfQorCit2b2lkIFdlYkRPTUhUTUxEb2N1bWVudDo6d3JpdGUoY29uc3QgV2ViRE9NU3RyaW5n
JiB0ZXh0KQoreworICAgIGlmICghaW1wbCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBkb2N1
bWVudFdyaXRlKHRleHQsIGltcGwoKSwgZmFsc2UpOworfQorCit2b2lkIFdlYkRPTUhUTUxEb2N1
bWVudDo6d3JpdGVsbihjb25zdCBXZWJET01TdHJpbmcmIHRleHQpCit7CisgICAgaWYgKCFpbXBs
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGRvY3VtZW50V3JpdGUodGV4dCwgaW1wbCgpLCB0
cnVlKTsKK30KClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvYmluZGluZ3MvY3BwL1dlYkRP
TUhUTUxEb2N1bWVudEN1c3RvbS5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUK
ICAgKyAqCgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9jcHAvV2ViRE9NTm9kZUN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9jcHAvV2ViRE9NTm9kZUN1c3RvbS5jcHAJ
KHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL2NwcC9XZWJET01Ob2RlQ3VzdG9tLmNw
cAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgUmVz
ZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkRPTU5vZGUuaCIKKworI2luY2x1ZGUgIk5vZGUu
aCIKKyNpbmNsdWRlICJXZWJET01FdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAiV2ViRXhjZXB0
aW9uSGFuZGxlci5oIgorI2luY2x1ZGUgIldlYk5hdGl2ZUV2ZW50TGlzdGVuZXIuaCIKKworV2Vi
RE9NTm9kZSBXZWJET01Ob2RlOjppbnNlcnRCZWZvcmUoY29uc3QgV2ViRE9NTm9kZSYgbmV3Q2hp
bGQsIGNvbnN0IFdlYkRPTU5vZGUmIHJlZkNoaWxkKQoreworICAgIGlmICghaW1wbCgpKQorICAg
ICAgICByZXR1cm4gV2ViRE9NTm9kZSgpOworCisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBl
YyA9IDA7CisgICAgaWYgKGltcGwoKS0+aW5zZXJ0QmVmb3JlKHRvV2ViQ29yZShuZXdDaGlsZCks
IHRvV2ViQ29yZShyZWZDaGlsZCksIGVjLCB0cnVlKSkKKyAgICAgICAgcmV0dXJuIG5ld0NoaWxk
OworCisgICAgd2ViRE9NUmFpc2VFcnJvcihzdGF0aWNfY2FzdDxXZWJET01FeGNlcHRpb25Db2Rl
PihlYykpOworICAgIHJldHVybiBXZWJET01Ob2RlKCk7Cit9CisKK1dlYkRPTU5vZGUgV2ViRE9N
Tm9kZTo6cmVwbGFjZUNoaWxkKGNvbnN0IFdlYkRPTU5vZGUmIG5ld0NoaWxkLCBjb25zdCBXZWJE
T01Ob2RlJiBvbGRDaGlsZCkKK3sKKyAgICBpZiAoIWltcGwoKSkKKyAgICAgICAgcmV0dXJuIFdl
YkRPTU5vZGUoKTsKKworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGlm
IChpbXBsKCktPnJlcGxhY2VDaGlsZCh0b1dlYkNvcmUobmV3Q2hpbGQpLCB0b1dlYkNvcmUob2xk
Q2hpbGQpLCBlYywgdHJ1ZSkpCisgICAgICAgIHJldHVybiBvbGRDaGlsZDsKKworICAgIHdlYkRP
TVJhaXNlRXJyb3Ioc3RhdGljX2Nhc3Q8V2ViRE9NRXhjZXB0aW9uQ29kZT4oZWMpKTsKKyAgICBy
ZXR1cm4gV2ViRE9NTm9kZSgpOworfQorCitXZWJET01Ob2RlIFdlYkRPTU5vZGU6OnJlbW92ZUNo
aWxkKGNvbnN0IFdlYkRPTU5vZGUmIG9sZENoaWxkKQoreworICAgIGlmICghaW1wbCgpKQorICAg
ICAgICByZXR1cm4gV2ViRE9NTm9kZSgpOworCisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBl
YyA9IDA7CisgICAgaWYgKGltcGwoKS0+cmVtb3ZlQ2hpbGQodG9XZWJDb3JlKG9sZENoaWxkKSwg
ZWMpKQorICAgICAgICByZXR1cm4gb2xkQ2hpbGQ7CisKKyAgICB3ZWJET01SYWlzZUVycm9yKHN0
YXRpY19jYXN0PFdlYkRPTUV4Y2VwdGlvbkNvZGU+KGVjKSk7CisgICAgcmV0dXJuIFdlYkRPTU5v
ZGUoKTsKK30KKworV2ViRE9NTm9kZSBXZWJET01Ob2RlOjphcHBlbmRDaGlsZChjb25zdCBXZWJE
T01Ob2RlJiBuZXdDaGlsZCkKK3sKKyAgICBpZiAoIWltcGwoKSkKKyAgICAgICAgcmV0dXJuIFdl
YkRPTU5vZGUoKTsKKworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGlm
IChpbXBsKCktPmFwcGVuZENoaWxkKHRvV2ViQ29yZShuZXdDaGlsZCksIGVjLCB0cnVlKSkKKyAg
ICAgICAgcmV0dXJuIG5ld0NoaWxkOworCisgICAgd2ViRE9NUmFpc2VFcnJvcihzdGF0aWNfY2Fz
dDxXZWJET01FeGNlcHRpb25Db2RlPihlYykpOworICAgIHJldHVybiBXZWJET01Ob2RlKCk7Cit9
CisKK3ZvaWQgV2ViRE9NTm9kZTo6YWRkRXZlbnRMaXN0ZW5lcihjb25zdCBXZWJET01TdHJpbmcm
IHR5cGUsIGNvbnN0IFdlYkRPTUV2ZW50TGlzdGVuZXImIGxpc3RlbmVyLCBjb25zdCBib29sJiB1
c2VDYXB0dXJlKQoreworICAgIGlmICghaW1wbCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAodG9XZWJDb3JlKGxpc3RlbmVyKSkKKyAgICAgICAgaW1wbCgpLT5hZGRFdmVudExpc3RlbmVy
KHR5cGUsIHRvV2ViQ29yZShsaXN0ZW5lciksIHVzZUNhcHR1cmUpOworfQorCit2b2lkIFdlYkRP
TU5vZGU6OnJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgV2ViRE9NU3RyaW5nJiB0eXBlLCBjb25z
dCBXZWJET01FdmVudExpc3RlbmVyJiBsaXN0ZW5lciwgY29uc3QgYm9vbCYgdXNlQ2FwdHVyZSkK
K3sKKyAgICBpZiAoIWltcGwoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHRvV2ViQ29y
ZShsaXN0ZW5lcikpCisgICAgICAgIGltcGwoKS0+cmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCB0
b1dlYkNvcmUobGlzdGVuZXIpLCB1c2VDYXB0dXJlKTsKK30KClByb3BlcnR5IGNoYW5nZXMgb246
IFdlYkNvcmUvYmluZGluZ3MvY3BwL1dlYkRPTU5vZGVDdXN0b20uY3BwCl9fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRk
ZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsgKgoKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvY3BwL1dl
YkRPTU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvY3BwL1dlYkRPTU9i
amVjdC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy9jcHAvV2ViRE9NT2JqZWN0
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIFJl
c2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5k
ZWYgV2ViRE9NT2JqZWN0X2gKKyNkZWZpbmUgV2ViRE9NT2JqZWN0X2gKKworY2xhc3MgV2ViRE9N
T2JqZWN0IHsKK3Byb3RlY3RlZDoKKyAgICBXZWJET01PYmplY3QoKSB7IH0KKyAgICB+V2ViRE9N
T2JqZWN0KCkgeyB9Cit9OworCisvLyBMb29rcyBha3dhcmQsIHRob3VnaCB3ZSBwcmVmaXggYWxs
IGNsYXNzZXMgd2l0aCBXZWJET00KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIFdlYkRPTURP
TVRpbWVTdGFtcDsKKworI2VuZGlmCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL2JpbmRp
bmdzL2NwcC9XZWJET01PYmplY3QuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQog
ICArICoKCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2NwcC9XZWJET01TdHJpbmcuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvY3BwL1dlYkRPTVN0cmluZy5jcHAJKHJldmlzaW9u
IDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL2NwcC9XZWJET01TdHJpbmcuY3BwCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDEyNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90
aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiV2ViRE9NU3RyaW5nLmgiCisKKyNpbmNsdWRlICJXZWJET01DU3RyaW5nLmgi
CisjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCitjbGFzcyBXZWJE
T01TdHJpbmdQcml2YXRlIDogcHVibGljIFdlYkNvcmU6OlN0cmluZ0ltcGwgeworfTsKKwordm9p
ZCBXZWJET01TdHJpbmc6OnJlc2V0KCkKK3sKKyAgICBpZiAobV9wcml2YXRlKSB7CisgICAgICAg
IG1fcHJpdmF0ZS0+ZGVyZWYoKTsKKyAgICAgICAgbV9wcml2YXRlID0gMDsKKyAgICB9Cit9CisK
K3ZvaWQgV2ViRE9NU3RyaW5nOjphc3NpZ24oY29uc3QgV2ViRE9NU3RyaW5nJiBvdGhlcikKK3sK
KyAgICBhc3NpZ24oY29uc3RfY2FzdDxXZWJET01TdHJpbmdQcml2YXRlKj4ob3RoZXIubV9wcml2
YXRlKSk7Cit9CisKK3ZvaWQgV2ViRE9NU3RyaW5nOjphc3NpZ24oY29uc3QgV2ViVUNoYXIqIGRh
dGEsIHNpemVfdCBsZW5ndGgpCit7CisgICAgYXNzaWduKHN0YXRpY19jYXN0PFdlYkRPTVN0cmlu
Z1ByaXZhdGUqPigKKyAgICAgICAgV2ViQ29yZTo6U3RyaW5nSW1wbDo6Y3JlYXRlKGRhdGEsIGxl
bmd0aCkuZ2V0KCkpKTsKK30KKworc2l6ZV90IFdlYkRPTVN0cmluZzo6bGVuZ3RoKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9wcml2YXRlID8gY29uc3RfY2FzdDxXZWJET01TdHJpbmdQcml2YXRl
Kj4obV9wcml2YXRlKS0+bGVuZ3RoKCkgOiAwOworfQorCitjb25zdCBXZWJVQ2hhciogV2ViRE9N
U3RyaW5nOjpkYXRhKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlID8gY29uc3RfY2Fz
dDxXZWJET01TdHJpbmdQcml2YXRlKj4obV9wcml2YXRlKS0+Y2hhcmFjdGVycygpIDogMDsKK30K
KworV2ViRE9NQ1N0cmluZyBXZWJET01TdHJpbmc6OnV0ZjgoKSBjb25zdAoreworICAgIHJldHVy
biBXZWJDb3JlOjpTdHJpbmcobV9wcml2YXRlKS51dGY4KCk7Cit9CisKK1dlYkRPTVN0cmluZyBX
ZWJET01TdHJpbmc6OmZyb21VVEY4KGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgpCit7
CisgICAgcmV0dXJuIFdlYkNvcmU6OlN0cmluZzo6ZnJvbVVURjgoZGF0YSwgbGVuZ3RoKTsKK30K
KworV2ViRE9NU3RyaW5nIFdlYkRPTVN0cmluZzo6ZnJvbVVURjgoY29uc3QgY2hhciogZGF0YSkK
K3sKKyAgICByZXR1cm4gV2ViQ29yZTo6U3RyaW5nOjpmcm9tVVRGOChkYXRhKTsKK30KKworV2Vi
RE9NU3RyaW5nOjpXZWJET01TdHJpbmcoY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBzKQorICAgIDog
bV9wcml2YXRlKHN0YXRpY19jYXN0PFdlYkRPTVN0cmluZ1ByaXZhdGUqPihzLmltcGwoKSkpCit7
CisgICAgaWYgKG1fcHJpdmF0ZSkKKyAgICAgICAgbV9wcml2YXRlLT5yZWYoKTsKK30KKworV2Vi
RE9NU3RyaW5nJiBXZWJET01TdHJpbmc6Om9wZXJhdG9yPShjb25zdCBXZWJDb3JlOjpTdHJpbmcm
IHMpCit7CisgICAgYXNzaWduKHN0YXRpY19jYXN0PFdlYkRPTVN0cmluZ1ByaXZhdGUqPihzLmlt
cGwoKSkpOworICAgIHJldHVybiAqdGhpczsKK30KKworV2ViRE9NU3RyaW5nOjpvcGVyYXRvciBX
ZWJDb3JlOjpTdHJpbmcoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGU7Cit9CisKK1dl
YkRPTVN0cmluZzo6V2ViRE9NU3RyaW5nKGNvbnN0IFdlYkNvcmU6OkF0b21pY1N0cmluZyYgcykK
KyAgICA6IG1fcHJpdmF0ZSgwKQoreworICAgIGFzc2lnbihzLnN0cmluZygpKTsKK30KKworV2Vi
RE9NU3RyaW5nJiBXZWJET01TdHJpbmc6Om9wZXJhdG9yPShjb25zdCBXZWJDb3JlOjpBdG9taWNT
dHJpbmcmIHMpCit7CisgICAgYXNzaWduKHMuc3RyaW5nKCkpOworICAgIHJldHVybiAqdGhpczsK
K30KKworV2ViRE9NU3RyaW5nOjpvcGVyYXRvciBXZWJDb3JlOjpBdG9taWNTdHJpbmcoKSBjb25z
dAoreworICAgIHJldHVybiBXZWJDb3JlOjpBdG9taWNTdHJpbmcoc3RhdGljX2Nhc3Q8V2ViQ29y
ZTo6U3RyaW5nSW1wbCAqPihtX3ByaXZhdGUpKTsKK30KKworYm9vbCBXZWJET01TdHJpbmc6OmVx
dWFscyhjb25zdCBjaGFyKiBzdHJpbmcpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdlYkNvcmU6OmVx
dWFsKG1fcHJpdmF0ZSwgc3RyaW5nKTsKK30KKwordm9pZCBXZWJET01TdHJpbmc6OmFzc2lnbihX
ZWJET01TdHJpbmdQcml2YXRlKiBwKQoreworICAgIC8vIFRha2UgY2FyZSB0byBoYW5kbGUgdGhl
IGNhc2Ugd2hlcmUgbV9wcml2YXRlID09IHAKKyAgICBpZiAocCkKKyAgICAgICAgcC0+cmVmKCk7
CisgICAgaWYgKG1fcHJpdmF0ZSkKKyAgICAgICAgbV9wcml2YXRlLT5kZXJlZigpOworICAgIG1f
cHJpdmF0ZSA9IHA7Cit9CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL2JpbmRpbmdzL2Nw
cC9XZWJET01TdHJpbmcuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsg
KgoKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvY3BwL1dlYkRPTVN0cmluZy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvYmluZGluZ3MvY3BwL1dlYkRPTVN0cmluZy5oCShyZXZpc2lvbiAwKQorKysg
V2ViQ29yZS9iaW5kaW5ncy9jcHAvV2ViRE9NU3RyaW5nLmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVk
IDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJET01TdHJpbmdfaAorI2RlZmlu
ZSBXZWJET01TdHJpbmdfaAorCisjaW5jbHVkZSA8V2ViRE9NQ1N0cmluZy5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CitjbGFzcyBTdHJpbmc7CitjbGFzcyBBdG9taWNTdHJpbmc7Cit9CisKK2Ns
YXNzIFdlYkRPTVN0cmluZ1ByaXZhdGU7CisKKy8vIEEgVVRGLTE2IHN0cmluZyBjb250YWluZXIu
ICBJdCBpcyBpbmV4cGVuc2l2ZSB0byBjb3B5IGEgV2ViRE9NU3RyaW5nCisvLyBvYmplY3QuCisv
LworLy8gV0FSTklORzogSXQgaXMgbm90IHNhZmUgdG8gcGFzcyBhIFdlYkRPTVN0cmluZyBhY3Jv
c3MgdGhyZWFkcyEhIQorLy8KK2NsYXNzIFdlYkRPTVN0cmluZyB7CitwdWJsaWM6CisgICAgfldl
YkRPTVN0cmluZygpIHsgcmVzZXQoKTsgfQorCisgICAgV2ViRE9NU3RyaW5nKCkgOiBtX3ByaXZh
dGUoMCkgeyB9CisKKyAgICBXZWJET01TdHJpbmcoY29uc3QgV2ViVUNoYXIqIGRhdGEsIHNpemVf
dCBsZW4pIDogbV9wcml2YXRlKDApCisgICAgeworICAgICAgICBhc3NpZ24oZGF0YSwgbGVuKTsK
KyAgICB9CisKKyAgICBXZWJET01TdHJpbmcoY29uc3QgV2ViRE9NU3RyaW5nJiBzKSA6IG1fcHJp
dmF0ZSgwKSB7IGFzc2lnbihzKTsgfQorCisgICAgV2ViRE9NU3RyaW5nJiBvcGVyYXRvcj0oY29u
c3QgV2ViRE9NU3RyaW5nJiBzKQorICAgIHsKKyAgICAgICAgYXNzaWduKHMpOworICAgICAgICBy
ZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgdm9pZCByZXNldCgpOworICAgIHZvaWQgYXNzaWdu
KGNvbnN0IFdlYkRPTVN0cmluZyYpOworICAgIHZvaWQgYXNzaWduKGNvbnN0IFdlYlVDaGFyKiBk
YXRhLCBzaXplX3QgbGVuKTsKKworICAgIHNpemVfdCBsZW5ndGgoKSBjb25zdDsKKyAgICBjb25z
dCBXZWJVQ2hhciogZGF0YSgpIGNvbnN0OworCisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyBy
ZXR1cm4gIWxlbmd0aCgpOyB9CisgICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiAhbV9w
cml2YXRlOyB9CisKKyAgICBXZWJET01DU3RyaW5nIHV0ZjgoKSBjb25zdDsKKworICAgIHN0YXRp
YyBXZWJET01TdHJpbmcgZnJvbVVURjgoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCk7
CisgICAgc3RhdGljIFdlYkRPTVN0cmluZyBmcm9tVVRGOChjb25zdCBjaGFyKiBkYXRhKTsKKwor
ICAgIHRlbXBsYXRlIDxpbnQgTj4gV2ViRE9NU3RyaW5nKGNvbnN0IGNoYXIgKCZkYXRhKVtOXSkK
KyAgICAgICAgOiBtX3ByaXZhdGUoMCkKKyAgICB7CisgICAgICAgIGFzc2lnbihmcm9tVVRGOChk
YXRhLCBOIC0gMSkpOworICAgIH0KKworICAgIHRlbXBsYXRlIDxpbnQgTj4gV2ViRE9NU3RyaW5n
JiBvcGVyYXRvcj0oY29uc3QgY2hhciAoJmRhdGEpW05dKQorICAgIHsKKyAgICAgICAgYXNzaWdu
KGZyb21VVEY4KGRhdGEsIE4gLSAxKSk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisK
KyAgICBXZWJET01TdHJpbmcoY29uc3QgV2ViQ29yZTo6U3RyaW5nJik7CisgICAgV2ViRE9NU3Ry
aW5nJiBvcGVyYXRvcj0oY29uc3QgV2ViQ29yZTo6U3RyaW5nJik7CisgICAgb3BlcmF0b3IgV2Vi
Q29yZTo6U3RyaW5nKCkgY29uc3Q7CisKKyAgICBXZWJET01TdHJpbmcoY29uc3QgV2ViQ29yZTo6
QXRvbWljU3RyaW5nJik7CisgICAgV2ViRE9NU3RyaW5nJiBvcGVyYXRvcj0oY29uc3QgV2ViQ29y
ZTo6QXRvbWljU3RyaW5nJik7CisgICAgb3BlcmF0b3IgV2ViQ29yZTo6QXRvbWljU3RyaW5nKCkg
Y29uc3Q7CisKKyAgICBib29sIGVxdWFscyhjb25zdCBjaGFyKiBzdHJpbmcpIGNvbnN0OworCitw
cml2YXRlOgorICAgIHZvaWQgYXNzaWduKFdlYkRPTVN0cmluZ1ByaXZhdGUqKTsKKyAgICBXZWJE
T01TdHJpbmdQcml2YXRlKiBtX3ByaXZhdGU7Cit9OworCisjZW5kaWYKClByb3BlcnR5IGNoYW5n
ZXMgb246IFdlYkNvcmUvYmluZGluZ3MvY3BwL1dlYkRPTVN0cmluZy5oCl9fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRk
ZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsgKgoKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvY3BwL1dl
YkV4Y2VwdGlvbkhhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvY3Bw
L1dlYkV4Y2VwdGlvbkhhbmRsZXIuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5n
cy9jcHAvV2ViRXhjZXB0aW9uSGFuZGxlci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJF
eGNlcHRpb25IYW5kbGVyLmgiCisKKy8vIFRvIGF2b2lkIGEgZ2xvYmFsIHN0YXRpYyBzeW1ib2ws
IHdlIGRlY2xhcmUgaXQgaW4gYSBmdW5jdGlvbgorc3RhdGljIGlubGluZSBXZWJFeGNlcHRpb25I
YW5kbGVyJiBnbG9iYWxFeGNlcHRpb25IYW5kbGVyKCkKK3sKKyAgICBzdGF0aWMgV2ViRXhjZXB0
aW9uSGFuZGxlciBzX2dsb2JhbEV4Y2VwdGlvbkhhbmRsZXI7CisgICAgcmV0dXJuIHNfZ2xvYmFs
RXhjZXB0aW9uSGFuZGxlcjsKK30KKwordm9pZCB3ZWJJbnN0YWxsRXhjZXB0aW9uSGFuZGxlcihX
ZWJFeGNlcHRpb25IYW5kbGVyIGhhbmRsZXIpCit7CisgICAgQVNTRVJUKGhhbmRsZXIpOworICAg
IGdsb2JhbEV4Y2VwdGlvbkhhbmRsZXIoKSA9IGhhbmRsZXI7Cit9CisKK3ZvaWQgd2ViUmFpc2VE
T01FeGNlcHRpb24oV2ViRE9NRXhjZXB0aW9uQ29kZSBlYykKK3sKKyAgICBBU1NFUlQoZWMpOwor
ICAgIGlmIChXZWJFeGNlcHRpb25IYW5kbGVyJiBoYW5kbGVyID0gZ2xvYmFsRXhjZXB0aW9uSGFu
ZGxlcigpKQorICAgICAgICAoKmhhbmRsZXIpKGVjKTsKK30KClByb3BlcnR5IGNoYW5nZXMgb246
IFdlYkNvcmUvYmluZGluZ3MvY3BwL1dlYkV4Y2VwdGlvbkhhbmRsZXIuY3BwCl9fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
QWRkZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsgKgoKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvY3Bw
L1dlYkV4Y2VwdGlvbkhhbmRsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2Nw
cC9XZWJFeGNlcHRpb25IYW5kbGVyLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdz
L2NwcC9XZWJFeGNlcHRpb25IYW5kbGVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIw
MDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYkV4Y2VwdGlvbkhh
bmRsZXJfaAorI2RlZmluZSBXZWJFeGNlcHRpb25IYW5kbGVyX2gKKworI2luY2x1ZGUgPHd0Zi9B
c3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorCisjaWYgIWRlZmluZWQo
TkRFQlVHKSAmJiAhZGVmaW5lZChESVNBQkxFX1RIUkVBRF9DSEVDSykKKyNkZWZpbmUgV0VCRE9N
X0FTU0VSVF9NQUlOX1RIUkVBRCgpIGRvIFwKKyAgICBpZiAoIVdURjo6aXNNYWluVGhyZWFkKCkp
IHsgXAorICAgICAgICBXVEZSZXBvcnRBc3NlcnRpb25GYWlsdXJlKF9fRklMRV9fLCBfX0xJTkVf
XywgV1RGX1BSRVRUWV9GVU5DVElPTiwgIkRPTSBhY2Nlc3Mgb24gbm9uLW1haW4gdGhyZWFkIC0t
IHlvdSB3aWxsIHByb2JhYmx5IGNyYXNoIHNvb24hIik7IFwKKyAgICB9IFwKK3doaWxlICgwKQor
I2Vsc2UKKyNkZWZpbmUgV0VCRE9NX0FTU0VSVF9NQUlOX1RIUkVBRCgpICgodm9pZCkwKQorI2Vu
ZGlmCisKK3R5cGVkZWYgaW50IFdlYkRPTUV4Y2VwdGlvbkNvZGU7Cit0eXBlZGVmIHZvaWQgKCpX
ZWJFeGNlcHRpb25IYW5kbGVyKShXZWJET01FeGNlcHRpb25Db2RlKTsKKworLy8gVXNlZCBmcm9t
IHRoZSBvdXRzaWRlIHRvIHJlZ2lzdGVyIGEgY2FsbGJhY2sgdGhhdCBnZXRzIGZpcmVkIHdoZW5l
dmVyIGFuIGV4Y2VwdGlvbiBpcyByYWlzZWQKK3ZvaWQgd2ViSW5zdGFsbEV4Y2VwdGlvbkhhbmRs
ZXIoV2ViRXhjZXB0aW9uSGFuZGxlcik7CisKKy8vIE5ldmVyIHVzZWQgYnkgdGhlIGJpbmRpbmdz
LCBvbmx5IGluZGlyZWN0bHkgYnkgd2ViRE9NUmFpc2VFcnJvcgordm9pZCB3ZWJSYWlzZURPTUV4
Y2VwdGlvbihXZWJET01FeGNlcHRpb25Db2RlKTsKKworLy8gVXNlZCBmcm9tIHRoZSBiaW5kaW5n
cworaW5saW5lIHZvaWQgd2ViRE9NUmFpc2VFcnJvcihXZWJET01FeGNlcHRpb25Db2RlIGVjKSAK
K3sKKyAgICBpZiAoZWMpCisgICAgICAgIHdlYlJhaXNlRE9NRXhjZXB0aW9uKGVjKTsKK30KKwor
I2VuZGlmCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL2JpbmRpbmdzL2NwcC9XZWJFeGNl
cHRpb25IYW5kbGVyLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCgpJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy9jcHAvV2ViTmF0aXZlRXZlbnRMaXN0ZW5lci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9jcHAvV2ViTmF0aXZlRXZlbnRMaXN0ZW5lci5j
cHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL2NwcC9XZWJOYXRpdmVFdmVudExp
c3RlbmVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYk5hdGl2ZUV2ZW50TGlzdGVuZXIu
aCIKKworI2luY2x1ZGUgIldlYkRPTUV2ZW50LmgiCisKK1dlYk5hdGl2ZUV2ZW50TGlzdGVuZXI6
OldlYk5hdGl2ZUV2ZW50TGlzdGVuZXIoV2ViVXNlckV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyKQor
ICAgIDogV2ViQ29yZTo6RXZlbnRMaXN0ZW5lcihDUFBFdmVudExpc3RlbmVyVHlwZSksCisgICAg
bV9saXN0ZW5lcihsaXN0ZW5lcikKK3sKKyAgICBBU1NFUlQobV9saXN0ZW5lcik7CisgICAgbV9s
aXN0ZW5lci0+cmVmKCk7Cit9CisKK1dlYk5hdGl2ZUV2ZW50TGlzdGVuZXI6On5XZWJOYXRpdmVF
dmVudExpc3RlbmVyKCkKK3sKKyAgICBtX2xpc3RlbmVyLT5kZXJlZigpOworfQorCit2b2lkIFdl
Yk5hdGl2ZUV2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBXZWJDb3JlOjpFdmVudCogZXZlbnQpCit7CisgICAgbV9saXN0ZW5lci0+aGFu
ZGxlRXZlbnQodG9XZWJLaXQoZXZlbnQpKTsKK30KKworYm9vbCBXZWJOYXRpdmVFdmVudExpc3Rl
bmVyOjpyZXBvcnRFcnJvcihXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3Qg
V2ViQ29yZTo6U3RyaW5nJiwgY29uc3QgV2ViQ29yZTo6U3RyaW5nJiwgaW50KQoreworICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgZXJyb3IgaGFuZGxpbmcKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2Jvb2wgV2ViTmF0aXZlRXZlbnRMaXN0ZW5lcjo6b3BlcmF0b3I9PShjb25zdCBXZWJDb3JlOjpF
dmVudExpc3RlbmVyJiBvdGhlcikKK3sKKyAgICBjb25zdCBXZWJOYXRpdmVFdmVudExpc3RlbmVy
KiBwdHJPdGhlciA9IGNhc3QoJm90aGVyKTsKKyAgICByZXR1cm4gcHRyT3RoZXIgJiYgbV9saXN0
ZW5lciA9PSBwdHJPdGhlci0+bV9saXN0ZW5lcjsKK30KClByb3BlcnR5IGNoYW5nZXMgb246IFdl
YkNvcmUvYmluZGluZ3MvY3BwL1dlYk5hdGl2ZUV2ZW50TGlzdGVuZXIuY3BwCl9fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
QWRkZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsgKgoKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvY3Bw
L1dlYk5hdGl2ZUV2ZW50TGlzdGVuZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L2NwcC9XZWJOYXRpdmVFdmVudExpc3RlbmVyLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2Jp
bmRpbmdzL2NwcC9XZWJOYXRpdmVFdmVudExpc3RlbmVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVk
IDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIg
S2VsbHkgKHBta0Bwb3N0LmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwOCwgMjAwOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViTmF0aXZlRXZlbnRMaXN0
ZW5lcl9oCisjZGVmaW5lIFdlYk5hdGl2ZUV2ZW50TGlzdGVuZXJfaAorCisjaW5jbHVkZSAiRXZl
bnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIldlYkRPTUV2ZW50TGlzdGVuZXIuaCIKKworY2xhc3Mg
V2ViTmF0aXZlRXZlbnRMaXN0ZW5lciA6IHB1YmxpYyBXZWJDb3JlOjpFdmVudExpc3RlbmVyIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJOYXRpdmVFdmVudExpc3RlbmVyPiBj
cmVhdGUoV2ViVXNlckV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBXZWJOYXRpdmVFdmVudExpc3RlbmVyKGxpc3RlbmVyKSk7CisgICAg
fQorCisgICAgc3RhdGljIGNvbnN0IFdlYk5hdGl2ZUV2ZW50TGlzdGVuZXIqIGNhc3QoY29uc3Qg
V2ViQ29yZTo6RXZlbnRMaXN0ZW5lciogbGlzdGVuZXIpCisgICAgeworICAgICAgICByZXR1cm4g
bGlzdGVuZXItPnR5cGUoKSA9PSBDUFBFdmVudExpc3RlbmVyVHlwZQorICAgICAgICAgICAgICAg
ID8gc3RhdGljX2Nhc3Q8Y29uc3QgV2ViTmF0aXZlRXZlbnRMaXN0ZW5lcio+KGxpc3RlbmVyKQor
ICAgICAgICAgICAgICAgIDogMDsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5XZWJOYXRpdmVFdmVu
dExpc3RlbmVyKCk7CisgICAgdmlydHVhbCBib29sIG9wZXJhdG9yPT0oY29uc3QgV2ViQ29yZTo6
RXZlbnRMaXN0ZW5lciYgb3RoZXIpOworCitwcml2YXRlOgorICAgIHZpcnR1YWwgdm9pZCBoYW5k
bGVFdmVudChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViQ29yZTo6RXZlbnQq
KTsKKyAgICB2aXJ0dWFsIGJvb2wgcmVwb3J0RXJyb3IoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgbWVzc2FnZSwgY29uc3QgV2ViQ29yZTo6
U3RyaW5nJiB1cmwsIGludCBsaW5lTnVtYmVyKTsKKworcHJvdGVjdGVkOgorICAgIFdlYk5hdGl2
ZUV2ZW50TGlzdGVuZXIoV2ViVXNlckV2ZW50TGlzdGVuZXIqKTsKKyAgICBXZWJVc2VyRXZlbnRM
aXN0ZW5lciogbV9saXN0ZW5lcjsKK307CisKKyNlbmRpZgoKUHJvcGVydHkgY2hhbmdlcyBvbjog
V2ViQ29yZS9iaW5kaW5ncy9jcHAvV2ViTmF0aXZlRXZlbnRMaXN0ZW5lci5oCl9fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
QWRkZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsgKgoKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9yQ1BQLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9yQ1BQLnBtCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JDUFAucG0JKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
OTYyIEBACisKKyMgQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8
emltbWVybWFubkBrZGUub3JnPgorIyBDb3B5cmlnaHQgKEMpIDIwMDYgQW5kZXJzIENhcmxzc29u
IDxhbmRlcnNjYUBtYWMuY29tPiAKKyMgQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IFNhbXVlbCBX
ZWluaWcgPHNhbUB3ZWJraXQub3JnPgorIyBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3Nr
dXJ5YWtvdiA8YXBAd2Via2l0Lm9yZz4KKyMgQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4
LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChDKSAy
MDA5IENhbWVyb24gTWNDb3JtYWNrIDxjYW1AbWNjLmlkLmF1PgorIyBDb3B5cmlnaHQgKEMpIFJl
c2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisj
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisjIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMgCisjIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorIyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyMgCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworIyB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
IyBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyMKKworcGFja2FnZSBDb2RlR2VuZXJhdG9y
Q1BQOworCit1c2UgRmlsZTo6c3RhdDsKKworIyBHbG9iYWwgVmFyaWFibGVzCitteSAkbW9kdWxl
ID0gIiI7CitteSAkb3V0cHV0RGlyID0gIiI7CisKK215IEBoZWFkZXJDb250ZW50SGVhZGVyID0g
KCk7CitteSBAaGVhZGVyQ29udGVudCA9ICgpOworbXkgJWhlYWRlckZvcndhcmREZWNsYXJhdGlv
bnMgPSAoKTsKKworbXkgQGltcGxDb250ZW50SGVhZGVyID0gKCk7CitteSBAaW1wbENvbnRlbnQg
PSAoKTsKK215ICVpbXBsSW5jbHVkZXMgPSAoKTsKKworIyBDb25zdGFudHMKK215ICRleGNlcHRp
b25Jbml0ID0gIldlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOyI7CitteSAkZXhjZXB0aW9u
UmFpc2VPbkVycm9yID0gIndlYkRPTVJhaXNlRXJyb3Ioc3RhdGljX2Nhc3Q8V2ViRE9NRXhjZXB0
aW9uQ29kZT4oZWMpKTsiOworCisjIERlZmF1bHQgTGljZW5zZSBUZW1wbGF0ZXMKK215ICRoZWFk
ZXJMaWNlbnNlVGVtcGxhdGUgPSA8PCAiRU9GIjsKKy8qCisgKiBDb3B5cmlnaHQgKEMpIFJlc2Vh
cmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcg
PHNhbS53ZWluaWdcQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90
aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KK0VPRgorCitteSAkaW1wbGVtZW50
YXRpb25MaWNlbnNlVGVtcGxhdGUgPSA8PCAiRU9GIjsKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFy
dCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiBUaGlzIGZpbGUgaGFzIGJl
ZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworRU9GCisK
KyMgRGVmYXVsdCBjb25zdHJ1Y3Rvcgorc3ViIG5ldworeworICAgIG15ICRvYmplY3QgPSBzaGlm
dDsKKyAgICBteSAkcmVmZXJlbmNlID0geyB9OworCisgICAgJGNvZGVHZW5lcmF0b3IgPSBzaGlm
dDsKKyAgICAkb3V0cHV0RGlyID0gc2hpZnQ7CisgICAgc2hpZnQ7ICMgJHVzZUxheWVyT25Ub3AK
KyAgICBzaGlmdDsgIyAkcHJlcHJvY2Vzc29yCisgICAgc2hpZnQ7ICMgJHdyaXRlRGVwZW5kZW5j
aWVzCisKKyAgICBibGVzcygkcmVmZXJlbmNlLCAkb2JqZWN0KTsKKyAgICByZXR1cm4gJHJlZmVy
ZW5jZTsKK30KKworc3ViIGZpbmlzaAoreworICAgIG15ICRvYmplY3QgPSBzaGlmdDsKK30KKwor
IyBQYXJhbXM6ICdkb21DbGFzcycgc3RydWN0CitzdWIgR2VuZXJhdGVJbnRlcmZhY2UKK3sKKyAg
ICBteSAkb2JqZWN0ID0gc2hpZnQ7CisgICAgbXkgJGRhdGFOb2RlID0gc2hpZnQ7CisgICAgbXkg
JGRlZmluZXMgPSBzaGlmdDsKKworICAgIG15ICRuYW1lID0gJGRhdGFOb2RlLT5uYW1lOworICAg
IG15ICRjbGFzc05hbWUgPSBHZXRDbGFzc05hbWUoJG5hbWUpOworICAgIG15ICRwYXJlbnRDbGFz
c05hbWUgPSAiV2ViRE9NIiAuIEdldFBhcmVudEltcGxDbGFzc05hbWUoJGRhdGFOb2RlKTsKKwor
ICAgICMgU3RhcnQgYWN0dWFsIGdlbmVyYXRpb24uCisgICAgJG9iamVjdC0+R2VuZXJhdGVIZWFk
ZXIoJGRhdGFOb2RlKTsKKyAgICAkb2JqZWN0LT5HZW5lcmF0ZUltcGxlbWVudGF0aW9uKCRkYXRh
Tm9kZSk7CisKKyAgICAjIFdyaXRlIGNoYW5nZXMuCisgICAgJG9iamVjdC0+V3JpdGVEYXRhKCJX
ZWJET00iIC4gJG5hbWUpOworfQorCisjIFBhcmFtczogJ2lkbERvY3VtZW50JyBzdHJ1Y3QKK3N1
YiBHZW5lcmF0ZU1vZHVsZQoreworICAgIG15ICRvYmplY3QgPSBzaGlmdDsKKyAgICBteSAkZGF0
YU5vZGUgPSBzaGlmdDsKKworICAgICRtb2R1bGUgPSAkZGF0YU5vZGUtPm1vZHVsZTsKK30KKwor
c3ViIEdldENsYXNzTmFtZQoreworICAgIG15ICRuYW1lID0gJGNvZGVHZW5lcmF0b3ItPlN0cmlw
TW9kdWxlKHNoaWZ0KTsKKworICAgICMgc3BlY2lhbCBjYXNlcworICAgIHJldHVybiAiV2ViRE9N
U3RyaW5nIiBpZiAkY29kZUdlbmVyYXRvci0+SXNTdHJpbmdUeXBlKCRuYW1lKSBvciAkbmFtZSBl
cSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlIjsKKyAgICByZXR1cm4gIldlYkRPTUFic3RyYWN0Vmll
dyIgaWYgJG5hbWUgZXEgIkRPTVdpbmRvdyI7CisgICAgcmV0dXJuICJXZWJET01PYmplY3QiIGlm
ICRuYW1lIGVxICJET01PYmplY3QiOworICAgIHJldHVybiAiYm9vbCIgaWYgJG5hbWUgZXEgImJv
b2xlYW4iOworICAgIHJldHVybiAkbmFtZSBpZiAkY29kZUdlbmVyYXRvci0+SXNQcmltaXRpdmVU
eXBlKCRuYW1lKTsKKworICAgIHJldHVybiAiV2ViRE9NJG5hbWUiOworfQorCitzdWIgR2V0SW1w
bENsYXNzTmFtZQoreworICAgIG15ICRuYW1lID0gJGNvZGVHZW5lcmF0b3ItPlN0cmlwTW9kdWxl
KHNoaWZ0KTsKKworICAgIHJldHVybiAiRE9NV2luZG93IiBpZiAkbmFtZSBlcSAiQWJzdHJhY3RW
aWV3IjsKKyAgICByZXR1cm4gJG5hbWU7Cit9CisKK3N1YiBHZXRQYXJlbnRJbXBsQ2xhc3NOYW1l
Cit7CisgICAgbXkgJGRhdGFOb2RlID0gc2hpZnQ7CisKKyAgICBpZiAoQHskZGF0YU5vZGUtPnBh
cmVudHN9IGVxIDApIHsKKyAgICAgICAgcmV0dXJuICJFdmVudFRhcmdldCIgaWYgJGRhdGFOb2Rl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiRXZlbnRUYXJnZXQifTsKKyAgICAgICAgcmV0dXJuICJP
YmplY3QiOworICAgIH0KKworICAgIHJldHVybiAkY29kZUdlbmVyYXRvci0+U3RyaXBNb2R1bGUo
JGRhdGFOb2RlLT5wYXJlbnRzKDApKTsKK30KKworc3ViIEdldFBhcmVudAoreworICAgIG15ICRk
YXRhTm9kZSA9IHNoaWZ0OworICAgIG15ICRudW1QYXJlbnRzID0gQHskZGF0YU5vZGUtPnBhcmVu
dHN9OworCisgICAgbXkgJHBhcmVudCA9ICIiOworICAgIGlmICgkbnVtUGFyZW50cyBlcSAwKSB7
CisgICAgICAgICRwYXJlbnQgPSAiV2ViRE9NT2JqZWN0IjsKKyAgICAgICAgJHBhcmVudCA9ICJX
ZWJET01FdmVudFRhcmdldCIgaWYgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiRXZl
bnRUYXJnZXQifTsKKyAgICB9IGVsc2lmICgkbnVtUGFyZW50cyBlcSAxKSB7CisgICAgICAgIG15
ICRwYXJlbnROYW1lID0gJGNvZGVHZW5lcmF0b3ItPlN0cmlwTW9kdWxlKCRkYXRhTm9kZS0+cGFy
ZW50cygwKSk7CisgICAgICAgICRwYXJlbnQgPSAiV2ViRE9NIiAuICRwYXJlbnROYW1lOworICAg
IH0gZWxzZSB7CisgICAgICAgIG15IEBwYXJlbnRzID0gQHskZGF0YU5vZGUtPnBhcmVudHN9Owor
ICAgICAgICBteSAkZmlyc3RQYXJlbnQgPSAkY29kZUdlbmVyYXRvci0+U3RyaXBNb2R1bGUoc2hp
ZnQoQHBhcmVudHMpKTsKKyAgICAgICAgJHBhcmVudCA9ICJXZWJET00iIC4gJGZpcnN0UGFyZW50
OworICAgIH0KKworICAgIHJldHVybiAkcGFyZW50OworfQorCitzdWIgU2hvdWxkU2tpcFR5cGVJ
bkltcGxlbWVudGF0aW9uCit7CisgICAgbXkgJHR5cGVJbmZvID0gc2hpZnQ7CisKKyAgICByZXR1
cm4gMSBpZiAkdHlwZUluZm8tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3Rv
bSJ9CisgICAgICAgICAgICAgYW5kICEkdHlwZUluZm8tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57Ik5vQ1BQQ3VzdG9tIn07CisKKyAgICByZXR1cm4gMSBpZiAkdHlwZUluZm8tPnNp
Z25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbUFyZ3VtZW50SGFuZGxpbmcifQor
ICAgICAgICAgICAgIG9yICR0eXBlSW5mby0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PnsiQ3VzdG9tR2V0dGVyIn0KKyAgICAgICAgICAgICBvciAkdHlwZUluZm8tPnNpZ25hdHVyZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5lZWRzVXNlckdlc3R1cmVDaGVjayJ9OworCisgICAgIyBG
SVhNRTogV2UgZG9uJ3QgZ2VuZXJhdGUgYmluZGluZ3MgZm9yIFNWRyByZWxhdGVkIGludGVyZmFj
ZXMgeWV0CisgICAgcmV0dXJuIDEgaWYgJHR5cGVJbmZvLT5zaWduYXR1cmUtPm5hbWUgPX4gL2dl
dFNWR0RvY3VtZW50LzsKKworICAgIHJldHVybiAxIGlmICR0eXBlSW5mby0+c2lnbmF0dXJlLT5u
YW1lID1+IC9Db25zdHJ1Y3Rvci87CisgICAgcmV0dXJuIDA7Cit9CisKK3N1YiBTaG91bGRTa2lw
VHlwZUluSGVhZGVyCit7CisgICAgbXkgJHR5cGVJbmZvID0gc2hpZnQ7CisKKyAgICAjIEZJWE1F
OiBXZSBjdXJyZW50bHkgaWdub3JlIGFueSBhdHRyaWJ1dGUvZnVuY3Rpb24gbmVlZGluZyBjdXN0
b20gY29kZQorICAgIHJldHVybiAxIGlmICR0eXBlSW5mby0+c2lnbmF0dXJlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiQ3VzdG9tQXJndW1lbnRIYW5kbGluZyJ9CisgICAgICAgICAgICAgb3IgJHR5
cGVJbmZvLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21HZXR0ZXIifTsK
KworICAgICMgRklYTUU6IFdlIGRvbid0IGdlbmVyYXRlIGJpbmRpbmdzIGZvciBTVkcgcmVsYXRl
ZCBpbnRlcmZhY2VzIHlldAorICAgIHJldHVybiAxIGlmICR0eXBlSW5mby0+c2lnbmF0dXJlLT5u
YW1lID1+IC9nZXRTVkdEb2N1bWVudC87CisKKyAgICByZXR1cm4gMSBpZiAkdHlwZUluZm8tPnNp
Z25hdHVyZS0+bmFtZSA9fiAvQ29uc3RydWN0b3IvOworICAgIHJldHVybiAwOworfQorCitzdWIg
R2V0Q1BQVHlwZQoreworICAgIG15ICR0eXBlID0gc2hpZnQ7CisgICAgbXkgJG5hbWUgPSBHZXRD
bGFzc05hbWUoJHR5cGUpOworCisgICAgcmV0dXJuICRuYW1lIGlmICRjb2RlR2VuZXJhdG9yLT5J
c1ByaW1pdGl2ZVR5cGUoJHR5cGUpIG9yICRjb2RlR2VuZXJhdG9yLT5Jc1N0cmluZ1R5cGUoJHR5
cGUpIG9yICR0eXBlIGVxICJET01UaW1lU3RhbXAiOworICAgIHJldHVybiAidW5zaWduZWQgc2hv
cnQiIGlmICR0eXBlIGVxICJDb21wYXJlSG93IjsKKyAgICByZXR1cm4gIiRuYW1lIjsKK30KKwor
c3ViIENvbnZlcnNpb25OZWVkZWQKK3sKKyAgICBteSAkdHlwZSA9ICRjb2RlR2VuZXJhdG9yLT5T
dHJpcE1vZHVsZShzaGlmdCk7CisgICAgcmV0dXJuICEkY29kZUdlbmVyYXRvci0+SXNOb25Qb2lu
dGVyVHlwZSgkdHlwZSkgJiYgISRjb2RlR2VuZXJhdG9yLT5Jc1N0cmluZ1R5cGUoJHR5cGUpOwor
fQorCitzdWIgR2V0Q1BQVHlwZUdldHRlcgoreworICAgIG15ICRhcmdOYW1lID0gc2hpZnQ7Cisg
ICAgbXkgJHR5cGUgPSAkY29kZUdlbmVyYXRvci0+U3RyaXBNb2R1bGUoc2hpZnQpOworCisgICAg
cmV0dXJuICRhcmdOYW1lIGlmICRjb2RlR2VuZXJhdG9yLT5Jc1ByaW1pdGl2ZVR5cGUoJHR5cGUp
IG9yICRjb2RlR2VuZXJhdG9yLT5Jc1N0cmluZ1R5cGUoJHR5cGUpOworICAgIHJldHVybiAic3Rh
dGljX2Nhc3Q8V2ViQ29yZTo6UmFuZ2U6OkNvbXBhcmVIb3c+KCRhcmdOYW1lKSIgaWYgJHR5cGUg
ZXEgIkNvbXBhcmVIb3ciOworICAgIHJldHVybiAiV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZh
bHVlOjpjcmVhdGUoV2ViQ29yZTo6U3RyaW5nKCRhcmdOYW1lKSkiIGlmICR0eXBlIGVxICJTZXJp
YWxpemVkU2NyaXB0VmFsdWUiOworICAgIHJldHVybiAidG9XZWJDb3JlKCRhcmdOYW1lKSI7Cit9
CisKK3N1YiBBZGRGb3J3YXJkRGVjbGFyYXRpb25zRm9yVHlwZQoreworICAgIG15ICR0eXBlID0g
JGNvZGVHZW5lcmF0b3ItPlN0cmlwTW9kdWxlKHNoaWZ0KTsKKyAgICBteSAkcHVibGljID0gc2hp
ZnQ7CisKKyAgICByZXR1cm4gaWYgJGNvZGVHZW5lcmF0b3ItPklzTm9uUG9pbnRlclR5cGUoJHR5
cGUpIG9yICRjb2RlR2VuZXJhdG9yLT5Jc1N0cmluZ1R5cGUoJHR5cGUpOworCisgICAgbXkgJGNs
YXNzID0gR2V0Q2xhc3NOYW1lKCR0eXBlKTsKKyAgICAkaGVhZGVyRm9yd2FyZERlY2xhcmF0aW9u
c3skY2xhc3N9ID0gMSBpZiAkcHVibGljOworfQorCitzdWIgQWRkSW5jbHVkZXNGb3JUeXBlCit7
CisgICAgbXkgJHR5cGUgPSAkY29kZUdlbmVyYXRvci0+U3RyaXBNb2R1bGUoc2hpZnQpOworCisg
ICAgcmV0dXJuIGlmICRjb2RlR2VuZXJhdG9yLT5Jc05vblBvaW50ZXJUeXBlKCR0eXBlKTsKKyAg
ICByZXR1cm4gaWYgJHR5cGUgPX4gL2Njb25zdHJ1Y3Rvci87CisKKyAgICBpZiAoJGNvZGVHZW5l
cmF0b3ItPklzU3RyaW5nVHlwZSgkdHlwZSkpIHsKKyAgICAgICAgJGltcGxJbmNsdWRlc3siQXRv
bWljU3RyaW5nLmgifSA9IDE7CisgICAgICAgICRpbXBsSW5jbHVkZXN7IktVUkwuaCJ9ID0gMTsK
KyAgICAgICAgJGltcGxJbmNsdWRlc3siV2ViRE9NU3RyaW5nLmgifSA9IDE7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoJHR5cGUgZXEgIkRPTU9iamVjdCIpIHsKKyAgICAgICAg
JGltcGxJbmNsdWRlc3siV2ViRE9NT2JqZWN0LmgifSA9IDE7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAoJHR5cGUgZXEgIkRPTVdpbmRvdyIpIHsKKyAgICAgICAgJGltcGxJbmNs
dWRlc3siRE9NV2luZG93LmgifSA9IDE7CisgICAgICAgICRpbXBsSW5jbHVkZXN7IldlYkRPTUFi
c3RyYWN0Vmlldy5oIn0gPSAxOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCR0
eXBlIGVxICJFdmVudExpc3RlbmVyIikgeworICAgICAgICAkaW1wbEluY2x1ZGVzeyJXZWJOYXRp
dmVFdmVudExpc3RlbmVyLmgifSA9IDE7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAoJHR5cGUgZXEgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSIpIHsKKyAgICAgICAgJGltcGxJbmNs
dWRlc3siU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgifSA9IDE7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICAkaW1wbEluY2x1ZGVzeyJOb2RlLmgifSA9IDEgaWYgJHR5cGUgZXEgIk5vZGVM
aXN0IjsKKyAgICAkaW1wbEluY2x1ZGVzeyJDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5oIn0g
PSAxIGlmICR0eXBlIGVxICJDU1NTdHlsZURlY2xhcmF0aW9uIjsKKworICAgICMgRGVmYXVsdCwg
aW5jbHVkZSB0aGUgc2FtZSBuYW1lZCBmaWxlICh0aGUgaW1wbGVtZW50YXRpb24pIGFuZCB0aGUg
c2FtZSBuYW1lIHByZWZpeGVkIHdpdGggIldlYkRPTSIuIAorICAgICRpbXBsSW5jbHVkZXN7IiR0
eXBlLmgifSA9IDEgdW5sZXNzICR0eXBlIGVxICJET01PYmplY3QiOworICAgICRpbXBsSW5jbHVk
ZXN7IldlYkRPTSR0eXBlLmgifSA9IDE7Cit9CisKK3N1YiBHZW5lcmF0ZUNvbmRpdGlvbmFsU3Ry
aW5nRnJvbUF0dHJpYnV0ZVZhbHVlCit7CisgICAgbXkgJGNvbmRpdGlvbmFsID0gc2hpZnQ7Cisg
ICAgaWYgKCRjb25kaXRpb25hbCA9fiAvJi8pIHsKKyAgICAgICAgcmV0dXJuICJFTkFCTEUoIiAu
IGpvaW4oIikgJiYgRU5BQkxFKCIsIHNwbGl0KC8mLywgJGNvbmRpdGlvbmFsKSkgLiAiKSI7Cisg
ICAgfSBlbHNpZiAoJGNvbmRpdGlvbmFsID1+IC9cfC8pIHsKKyAgICAgICAgcmV0dXJuICJFTkFC
TEUoIiAuIGpvaW4oIikgfHwgRU5BQkxFKCIsIHNwbGl0KC9cfC8sICRjb25kaXRpb25hbCkpIC4g
IikiOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiAiRU5BQkxFKCIgLiAkY29uZGl0aW9u
YWwgLiAiKSI7CisgICAgfQorfQorCitzdWIgR2VuZXJhdGVDb25kaXRpb25hbFN0cmluZworewor
ICAgIG15ICRub2RlID0gc2hpZnQ7CisgICAgbXkgJGNvbmRpdGlvbmFsID0gJG5vZGUtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJDb25kaXRpb25hbCJ9OworICAgIGlmICgkY29uZGl0aW9uYWwpIHsK
KyAgICAgICAgcmV0dXJuIEdlbmVyYXRlQ29uZGl0aW9uYWxTdHJpbmdGcm9tQXR0cmlidXRlVmFs
dWUoJGNvbmRpdGlvbmFsKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gIiI7CisgICAg
fQorfQorCitzdWIgR2VuZXJhdGVIZWFkZXIKK3sKKyAgICBteSAkb2JqZWN0ID0gc2hpZnQ7Cisg
ICAgbXkgJGRhdGFOb2RlID0gc2hpZnQ7CisKKyAgICBteSAkaW50ZXJmYWNlTmFtZSA9ICRkYXRh
Tm9kZS0+bmFtZTsKKyAgICBteSAkY2xhc3NOYW1lID0gR2V0Q2xhc3NOYW1lKCRpbnRlcmZhY2VO
YW1lKTsKKyAgICBteSAkaW1wbENsYXNzTmFtZSA9IEdldEltcGxDbGFzc05hbWUoJGludGVyZmFj
ZU5hbWUpOworICAgIG15ICRpbXBsQ2xhc3NOYW1lV2l0aE5hbWVzcGFjZSA9ICJXZWJDb3JlOjoi
IC4gJGltcGxDbGFzc05hbWU7CisKKyAgICBteSAkcGFyZW50TmFtZSA9ICIiOworICAgICRwYXJl
bnROYW1lID0gR2V0UGFyZW50KCRkYXRhTm9kZSk7CisKKyAgICBteSAkbnVtQ29uc3RhbnRzID0g
QHskZGF0YU5vZGUtPmNvbnN0YW50c307CisgICAgbXkgJG51bUF0dHJpYnV0ZXMgPSBAeyRkYXRh
Tm9kZS0+YXR0cmlidXRlc307CisgICAgbXkgJG51bUZ1bmN0aW9ucyA9IEB7JGRhdGFOb2RlLT5m
dW5jdGlvbnN9OworCisgICAgIyAtIEFkZCBkZWZhdWx0IGhlYWRlciB0ZW1wbGF0ZQorICAgIEBo
ZWFkZXJDb250ZW50SGVhZGVyID0gc3BsaXQoIlxyIiwgJGhlYWRlckxpY2Vuc2VUZW1wbGF0ZSk7
CisgICAgcHVzaChAaGVhZGVyQ29udGVudEhlYWRlciwgIlxuI2lmbmRlZiAkY2xhc3NOYW1lIiAu
ICJfaCIpOworICAgIHB1c2goQGhlYWRlckNvbnRlbnRIZWFkZXIsICJcbiNkZWZpbmUgJGNsYXNz
TmFtZSIgLiAiX2hcblxuIik7CisKKyAgICBteSAkY29uZGl0aW9uYWxTdHJpbmcgPSBHZW5lcmF0
ZUNvbmRpdGlvbmFsU3RyaW5nKCRkYXRhTm9kZSk7CisgICAgcHVzaChAaGVhZGVyQ29udGVudEhl
YWRlciwgIiNpZiAke2NvbmRpdGlvbmFsU3RyaW5nfVxuXG4iKSBpZiAkY29uZGl0aW9uYWxTdHJp
bmc7CisKKyAgICAjIC0gSU5DTFVERVMgLQorCisgICAgbXkgJWhlYWRlckluY2x1ZGVzID0gKCk7
CisgICAgJGhlYWRlckluY2x1ZGVzeyJXZWJET01TdHJpbmcuaCJ9ID0gMTsKKyAgICAkaGVhZGVy
SW5jbHVkZXN7IiRwYXJlbnROYW1lLmgifSA9IDE7CisgICAgZm9yZWFjaCBteSAkaW5jbHVkZSAo
c29ydCBrZXlzKCVoZWFkZXJJbmNsdWRlcykpIHsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVu
dEhlYWRlciwgIiNpbmNsdWRlIDwkaW5jbHVkZT5cbiIpOworICAgIH0KKworICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsICJjbGFzcyAkY2xhc3NOYW1lIik7CisgICAgcHVzaChAaGVhZGVyQ29udGVu
dCwgIiA6IHB1YmxpYyAkcGFyZW50TmFtZSIpIGlmICRwYXJlbnROYW1lOworICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsICIge1xuIik7CisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgInB1YmxpYzpc
biIpOworCisgICAgIyBDb25zdHJ1Y3RvcgorICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAg
JGNsYXNzTmFtZSgpO1xuIik7CisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBleHBsaWNp
dCAkY2xhc3NOYW1lKCRpbXBsQ2xhc3NOYW1lV2l0aE5hbWVzcGFjZSopO1xuIik7CisKKyAgICAj
IENvcHkgY29uc3RydWN0b3Igb24gY2xhc3NlcyB3aGljaCBoYXZlIHRoZSBkLXB0cgorICAgIGlm
IChAeyRkYXRhTm9kZS0+cGFyZW50c30gZXEgMCkgeworICAgICAgICBwdXNoKEBoZWFkZXJDb250
ZW50LCAiICAgICRjbGFzc05hbWUoY29uc3QgJGNsYXNzTmFtZSYpO1xuIik7CisgICAgfQorCisg
ICAgIyBEZXN0cnVjdG9yCisgICAgaWYgKEB7JGRhdGFOb2RlLT5wYXJlbnRzfSBlcSAwKSB7Cisg
ICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgfiRjbGFzc05hbWUoKTtcbiIpOworICAg
IH0KKworICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJcbiIpOworICAgICRoZWFkZXJGb3J3YXJk
RGVjbGFyYXRpb25zeyRpbXBsQ2xhc3NOYW1lV2l0aE5hbWVzcGFjZX0gPSAxOworCisgICAgIyAt
IEFkZCBjb25zdGFudHMuCisgICAgaWYgKCRudW1Db25zdGFudHMgPiAwKSB7CisgICAgICAgIG15
IEBoZWFkZXJDb25zdGFudHMgPSAoKTsKKworICAgICAgICAjIEZJWE1FOiB3ZSBuZWVkIGEgd2F5
IHRvIGluY2x1ZGUgbXVsdGlwbGUgZW51bXMuCisgICAgICAgIGZvcmVhY2ggbXkgJGNvbnN0YW50
IChAeyRkYXRhTm9kZS0+Y29uc3RhbnRzfSkgeworICAgICAgICAgICAgbXkgJGNvbnN0YW50TmFt
ZSA9ICRjb25zdGFudC0+bmFtZTsKKyAgICAgICAgICAgIG15ICRjb25zdGFudFZhbHVlID0gJGNv
bnN0YW50LT52YWx1ZTsKKworICAgICAgICAgICAgbXkgJG91dHB1dCA9ICJXRUJET01fIiAuICRj
b25zdGFudE5hbWUgLiAiID0gIiAuICRjb25zdGFudFZhbHVlOworICAgICAgICAgICAgcHVzaChA
aGVhZGVyQ29uc3RhbnRzLCAiICAgICAgICAiIC4gJG91dHB1dCk7CisgICAgICAgIH0KKworICAg
ICAgICBteSAkY29tYmluZWRDb25zdGFudHMgPSBqb2luKCIsXG4iLCBAaGVhZGVyQ29uc3RhbnRz
KTsKKworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICIpOworICAgICAgICBwdXNo
KEBoZWFkZXJDb250ZW50LCAiZW51bSB7XG4iKTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVu
dCwgJGNvbWJpbmVkQ29uc3RhbnRzKTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlxu
ICAgICIpOworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAifTtcblxuIik7CisgICAgfQor
CisgICAgbXkgQGhlYWRlckF0dHJpYnV0ZXMgPSAoKTsKKworICAgICMgLSBBZGQgYXR0cmlidXRl
IGdldHRlcnMvc2V0dGVycy4KKyAgICBpZiAoJG51bUF0dHJpYnV0ZXMgPiAwKSB7CisgICAgICAg
IGZvcmVhY2ggbXkgJGF0dHJpYnV0ZSAoQHskZGF0YU5vZGUtPmF0dHJpYnV0ZXN9KSB7CisgICAg
ICAgICAgICBuZXh0IGlmIFNob3VsZFNraXBUeXBlSW5IZWFkZXIoJGF0dHJpYnV0ZSk7CisKKyAg
ICAgICAgICAgIG15ICRhdHRyaWJ1dGVOYW1lID0gJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5uYW1l
OworICAgICAgICAgICAgbXkgJGF0dHJpYnV0ZVR5cGUgPSBHZXRDUFBUeXBlKCRhdHRyaWJ1dGUt
PnNpZ25hdHVyZS0+dHlwZSk7CisgICAgICAgICAgICBteSAkYXR0cmlidXRlSXNSZWFkb25seSA9
ICgkYXR0cmlidXRlLT50eXBlID1+IC9ecmVhZG9ubHkvKTsKKyAgICAgICAgICAgIG15ICRwcm9w
ZXJ0eSA9ICIgICAgIiAuICRhdHRyaWJ1dGVUeXBlIC4gKCRhdHRyaWJ1dGVUeXBlID1+IC9cKiQv
ID8gIiIgOiAiICIpIC4gJGF0dHJpYnV0ZU5hbWUgLiAiKCkgY29uc3QiOworCisgICAgICAgICAg
ICBteSAkYXZhaWxhYmlsaXR5TWFjcm8gPSAiIjsKKyAgICAgICAgICAgIG15ICRkZWNsYXJhdGlv
blN1ZmZpeCA9ICI7XG4iOworCisgICAgICAgICAgICBBZGRGb3J3YXJkRGVjbGFyYXRpb25zRm9y
VHlwZSgkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGUsIDEpOworCisgICAgICAgICAgICBteSAk
c2V0dGVyTmFtZSA9ICJzZXQiIC4gdWNmaXJzdCgkYXR0cmlidXRlTmFtZSk7CisKKyAgICAgICAg
ICAgICRwcm9wZXJ0eSAuPSAkZGVjbGFyYXRpb25TdWZmaXg7CisgICAgICAgICAgICBwdXNoKEBo
ZWFkZXJBdHRyaWJ1dGVzLCAkcHJvcGVydHkpOworICAgICAgICAgICAgaWYgKCEkYXR0cmlidXRl
SXNSZWFkb25seSBhbmQgISRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57IlJlcGxhY2VhYmxlIn0pIHsKKyAgICAgICAgICAgICAgICAkcHJvcGVydHkgPSAiICAgIHZv
aWQgJHNldHRlck5hbWUoY29uc3QgIiAuICRhdHRyaWJ1dGVUeXBlIC4gIiYpIjsKKyAgICAgICAg
ICAgICAgICAkcHJvcGVydHkgLj0gJGRlY2xhcmF0aW9uU3VmZml4OworICAgICAgICAgICAgICAg
IHB1c2goQGhlYWRlckF0dHJpYnV0ZXMsICRwcm9wZXJ0eSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCBAaGVhZGVyQXR0cmlidXRlcykg
aWYgQGhlYWRlckF0dHJpYnV0ZXMgPiAwOworICAgIH0KKworICAgIG15IEBoZWFkZXJGdW5jdGlv
bnMgPSAoKTsKKyAgICBteSBAZGVwcmVjYXRlZEhlYWRlckZ1bmN0aW9ucyA9ICgpOworICAgIG15
IEBpbnRlcmZhY2VGdW5jdGlvbnMgPSAoKTsKKworICAgICMgLSBBZGQgZnVuY3Rpb25zLgorICAg
IGlmICgkbnVtRnVuY3Rpb25zID4gMCkgeworICAgICAgICBmb3JlYWNoIG15ICRmdW5jdGlvbiAo
QHskZGF0YU5vZGUtPmZ1bmN0aW9uc30pIHsKKyAgICAgICAgICAgIG5leHQgaWYgU2hvdWxkU2tp
cFR5cGVJbkhlYWRlcigkZnVuY3Rpb24pOworICAgICAgICAgICAgbXkgJGZ1bmN0aW9uTmFtZSA9
ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1lOworCisgICAgICAgICAgICBteSAkcmV0dXJuVHlw
ZSA9IEdldENQUFR5cGUoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPnR5cGUpOworICAgICAgICAgICAg
bXkgJG51bWJlck9mUGFyYW1ldGVycyA9IEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfTsKKyAgICAg
ICAgICAgIG15ICV0eXBlc1RvRm9yd2FyZERlY2xhcmUgPSAoJGZ1bmN0aW9uLT5zaWduYXR1cmUt
PnR5cGUgPT4gMSk7CisKKyAgICAgICAgICAgIG15ICRwYXJhbWV0ZXJJbmRleCA9IDA7CisgICAg
ICAgICAgICBteSAkZnVuY3Rpb25TaWcgPSAiJHJldHVyblR5cGUgJGZ1bmN0aW9uTmFtZSgiOwor
ICAgICAgICAgICAgbXkgJG1ldGhvZE5hbWUgPSAkZnVuY3Rpb25OYW1lOworICAgICAgICAgICAg
Zm9yZWFjaCBteSAkcGFyYW0gKEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfSkgeworICAgICAgICAg
ICAgICAgIG15ICRwYXJhbU5hbWUgPSAkcGFyYW0tPm5hbWU7CisgICAgICAgICAgICAgICAgbXkg
JHBhcmFtVHlwZSA9IEdldENQUFR5cGUoJHBhcmFtLT50eXBlKTsKKyAgICAgICAgICAgICAgICAk
dHlwZXNUb0ZvcndhcmREZWNsYXJleyRwYXJhbS0+dHlwZX0gPSAxOworCisgICAgICAgICAgICAg
ICAgJGZ1bmN0aW9uU2lnIC49ICIsICIgaWYgJHBhcmFtZXRlckluZGV4ID49IDE7CisgICAgICAg
ICAgICAgICAgJGZ1bmN0aW9uU2lnIC49ICJjb25zdCAkcGFyYW1UeXBlJiAkcGFyYW1OYW1lIjsK
KyAgICAgICAgICAgICAgICAkcGFyYW1ldGVySW5kZXgrKzsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICRmdW5jdGlvblNpZyAuPSAiKSI7CisgICAgICAgICAgICBpZiAoJGRhdGFOb2RlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPnsiUHVyZUludGVyZmFjZSJ9KSB7CisgICAgICAgICAgICAgICAg
cHVzaChAaW50ZXJmYWNlRnVuY3Rpb25zLCAiICAgIHZpcnR1YWwgIiAuICRmdW5jdGlvblNpZyAu
ICIgPSAwO1xuIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBteSAkZnVuY3Rpb25EZWNs
YXJhdGlvbiA9ICRmdW5jdGlvblNpZzsKKyAgICAgICAgICAgICRmdW5jdGlvbkRlY2xhcmF0aW9u
IC49ICI7XG4iOworCisgICAgICAgICAgICBmb3JlYWNoIG15ICR0eXBlIChrZXlzICV0eXBlc1Rv
Rm9yd2FyZERlY2xhcmUpIHsKKyAgICAgICAgICAgICAgICAjIGFkZCBhbnkgZm9yd2FyZCBkZWNs
YXJhdGlvbnMgdG8gdGhlIHB1YmxpYyBoZWFkZXIgaWYgYSBkZXByZWNhdGVkIHZlcnNpb24gd2ls
bCBiZSBnZW5lcmF0ZWQKKyAgICAgICAgICAgICAgICBBZGRGb3J3YXJkRGVjbGFyYXRpb25zRm9y
VHlwZSgkdHlwZSwgMSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHB1c2goQGhlYWRl
ckZ1bmN0aW9ucywgIiAgICAiKTsKKyAgICAgICAgICAgIHB1c2goQGhlYWRlckZ1bmN0aW9ucywg
JGZ1bmN0aW9uRGVjbGFyYXRpb24pOworICAgICAgICB9CisKKyAgICAgICAgaWYgKEBoZWFkZXJG
dW5jdGlvbnMgPiAwKSB7CisgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiXG4iKSBp
ZiBAaGVhZGVyQXR0cmlidXRlcyA+IDA7CisgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCBAaGVhZGVyRnVuY3Rpb25zKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1c2goQGhlYWRl
ckNvbnRlbnQsICJcbiIpOworICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgJGltcGxDbGFz
c05hbWVXaXRoTmFtZXNwYWNlKiBpbXBsKCkgY29uc3Q7XG4iKTsKKworICAgIGlmIChAeyRkYXRh
Tm9kZS0+cGFyZW50c30gZXEgMCkgeworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiXG5w
cm90ZWN0ZWQ6XG4iKTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdHJ1Y3Qg
JHtjbGFzc05hbWV9UHJpdmF0ZTtcbiIpOworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAi
ICAgICR7Y2xhc3NOYW1lfVByaXZhdGUqIG1fZDtcbiIpOworICAgIH0KKworICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsICJ9O1xuXG4iKTsKKworICAgICMgZm9yIFB1cmVJbnRlcmZhY2UgY2xhc3Nl
cyBhbHNvIGFkZCB0aGUgaW50ZXJmYWNlIHRoYXQgdGhlIGNsaWVudCBjb2RlIG5lZWRzIHRvCisg
ICAgIyBpbXBsZW1lbnQKKyAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
UHVyZUludGVyZmFjZSJ9KSB7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJjbGFzcyBX
ZWJVc2VyJGludGVyZmFjZU5hbWUge1xuIik7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQs
ICJwdWJsaWM6XG4iKTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB2aXJ0dWFs
IHZvaWQgcmVmKCkgPSAwO1xuIik7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAg
dmlydHVhbCB2b2lkIGRlcmVmKCkgPSAwO1xuXG4iKTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29u
dGVudCwgQGludGVyZmFjZUZ1bmN0aW9ucyk7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQs
ICJcbnByb3RlY3RlZDpcbiIpOworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHZp
cnR1YWwgfldlYlVzZXIkaW50ZXJmYWNlTmFtZSgpIHt9XG4iKTsKKyAgICAgICAgcHVzaChAaGVh
ZGVyQ29udGVudCwgIn07XG5cbiIpOworICAgIH0KKworICAgIHB1c2goQGhlYWRlckNvbnRlbnQs
ICJXZWJDb3JlOjokaW1wbENsYXNzTmFtZSogdG9XZWJDb3JlKGNvbnN0ICRjbGFzc05hbWUmKTtc
biIpOworICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIkY2xhc3NOYW1lIHRvV2ViS2l0KFdlYkNv
cmU6OiRpbXBsQ2xhc3NOYW1lKik7XG4iKTsKKyAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiUHVyZUludGVyZmFjZSJ9KSB7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRl
bnQsICIkY2xhc3NOYW1lIHRvV2ViS2l0KFdlYlVzZXIkaW50ZXJmYWNlTmFtZSopO1xuIik7Cisg
ICAgfQorICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJcbiNlbmRpZlxuIik7CisgICAgcHVzaChA
aGVhZGVyQ29udGVudCwgIiNlbmRpZiAvLyAke2NvbmRpdGlvbmFsU3RyaW5nfVxuXG4iKSBpZiAk
Y29uZGl0aW9uYWxTdHJpbmc7Cit9CisKK3N1YiBBZGRFYXJseVJldHVyblN0YXRlbWVudAorewor
ICAgIG15ICRyZXR1cm5UeXBlID0gc2hpZnQ7CisKKyAgICBpZiAoIWRlZmluZWQoJHJldHVyblR5
cGUpIG9yICRyZXR1cm5UeXBlIGVxICJ2b2lkIikgeworICAgICAgICAkcmV0dXJuVHlwZSA9ICIi
OworICAgIH0gZWxzaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1ByaW1pdGl2ZVR5cGUoJHJldHVyblR5
cGUpKSB7CisgICAgICAgICRyZXR1cm5UeXBlID0gIiAwIjsKKyAgICB9IGVsc2lmICgkcmV0dXJu
VHlwZSBlcSAiYm9vbCIpIHsKKyAgICAgICAgJHJldHVyblR5cGUgPSAiIGZhbHNlIjsKKyAgICB9
IGVsc2UgeworICAgICAgICAkcmV0dXJuVHlwZSA9ICIgJHJldHVyblR5cGUoKSI7CisgICAgfQor
CisgICAgIyBUT0RPOiBXZSBjb3VsZCBzZXQgZXhjZXB0aW9ucyBoZXJlLCBpZiB3ZSB3YW50IHRo
YXQKKyAgICBteSAkc3RhdGVtZW50ID0gIiAgICBpZiAoIWltcGwoKSlcbiI7CisgICAgJHN0YXRl
bWVudCAuPSAgICIgICAgICAgIHJldHVybiRyZXR1cm5UeXBlO1xuXG4iOworICAgIHJldHVybiAk
c3RhdGVtZW50OworfQorCitzdWIgQWRkUmV0dXJuU3RhdGVtZW50Cit7CisgICAgbXkgJHR5cGVJ
bmZvID0gc2hpZnQ7CisgICAgbXkgJHJldHVyblZhbHVlID0gc2hpZnQ7CisKKyAgICAjIFVzZWQg
dG8gaW52b2tlIEtVUkxzICJjb25zdCBTdHJpbmcmIiBvcGVyYXRvcgorICAgIGlmICgkY29kZUdl
bmVyYXRvci0+SXNTdHJpbmdUeXBlKCR0eXBlSW5mby0+c2lnbmF0dXJlLT50eXBlKSkgeworICAg
ICAgICByZXR1cm4gIiAgICByZXR1cm4gKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYpICRyZXR1cm5W
YWx1ZTtcbiI7CisgICAgfQorCisgICAgcmV0dXJuICIgICAgcmV0dXJuICRyZXR1cm5WYWx1ZTtc
biI7Cit9CisKK3N1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCit7CisgICAgbXkgJG9iamVjdCA9
IHNoaWZ0OworICAgIG15ICRkYXRhTm9kZSA9IHNoaWZ0OworCisgICAgbXkgQGFuY2VzdG9ySW50
ZXJmYWNlTmFtZXMgPSAoKTsKKworICAgIGlmIChAeyRkYXRhTm9kZS0+cGFyZW50c30gPiAxKSB7
CisgICAgICAgICRjb2RlR2VuZXJhdG9yLT5BZGRNZXRob2RzQ29uc3RhbnRzQW5kQXR0cmlidXRl
c0Zyb21QYXJlbnRDbGFzc2VzKCRkYXRhTm9kZSwgXEBhbmNlc3RvckludGVyZmFjZU5hbWVzKTsK
KyAgICB9CisKKyAgICBteSAkaW50ZXJmYWNlTmFtZSA9ICRkYXRhTm9kZS0+bmFtZTsKKyAgICBt
eSAkY2xhc3NOYW1lID0gR2V0Q2xhc3NOYW1lKCRpbnRlcmZhY2VOYW1lKTsKKyAgICBteSAkaW1w
bENsYXNzTmFtZSA9IEdldEltcGxDbGFzc05hbWUoJGludGVyZmFjZU5hbWUpOworICAgIG15ICRw
YXJlbnRJbXBsQ2xhc3NOYW1lID0gR2V0UGFyZW50SW1wbENsYXNzTmFtZSgkZGF0YU5vZGUpOwor
ICAgIG15ICRpbXBsQ2xhc3NOYW1lV2l0aE5hbWVzcGFjZSA9ICJXZWJDb3JlOjoiIC4gJGltcGxD
bGFzc05hbWU7CisgICAgbXkgJGJhc2VDbGFzcyA9ICJXZWJET00kcGFyZW50SW1wbENsYXNzTmFt
ZSI7CisgICAgbXkgJGNvbmRpdGlvbmFsID0gJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PnsiQ29uZGl0aW9uYWwifTsKKworICAgIG15ICRudW1BdHRyaWJ1dGVzID0gQHskZGF0YU5vZGUt
PmF0dHJpYnV0ZXN9OworICAgIG15ICRudW1GdW5jdGlvbnMgPSBAeyRkYXRhTm9kZS0+ZnVuY3Rp
b25zfTsKKworICAgICMgLSBBZGQgZGVmYXVsdCBoZWFkZXIgdGVtcGxhdGUuCisgICAgQGltcGxD
b250ZW50SGVhZGVyID0gc3BsaXQoIlxyIiwgJGltcGxlbWVudGF0aW9uTGljZW5zZVRlbXBsYXRl
KTsKKworICAgICMgLSBJTkNMVURFUyAtCisgICAgcHVzaChAaW1wbENvbnRlbnRIZWFkZXIsICJc
biNpbmNsdWRlIFwiY29uZmlnLmhcIlxuIik7CisgICAgbXkgJGNvbmRpdGlvbmFsU3RyaW5nID0g
R2VuZXJhdGVDb25kaXRpb25hbFN0cmluZygkZGF0YU5vZGUpOworICAgIHB1c2goQGltcGxDb250
ZW50SGVhZGVyLCAiXG4jaWYgJHtjb25kaXRpb25hbFN0cmluZ31cblxuIikgaWYgJGNvbmRpdGlv
bmFsU3RyaW5nOworICAgIHB1c2goQGltcGxDb250ZW50SGVhZGVyLCAiI2luY2x1ZGUgXCIkY2xh
c3NOYW1lLmhcIlxuXG4iKTsKKworICAgICRpbXBsSW5jbHVkZXN7IldlYkV4Y2VwdGlvbkhhbmRs
ZXIuaCJ9ID0gMTsKKyAgICAkaW1wbEluY2x1ZGVzeyJUaHJlYWRDaGVjay5oIn0gPSAxOworICAg
ICRpbXBsSW5jbHVkZXN7IiRpbXBsQ2xhc3NOYW1lLmgifSA9IDE7CisgICAgQGltcGxDb250ZW50
ID0gKCk7CisKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+
XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+XG5c
biIpOworCisgICAgIyBQcml2YXRlIGRhdGFzdHJ1Y3R1cmUsIGVuY2Fwc3VsYXRpbmcgV2ViQ29y
ZSB0eXBlcworICAgIGlmIChAeyRkYXRhTm9kZS0+cGFyZW50c30gZXEgMCkgeworICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgInN0cnVjdCAke2NsYXNzTmFtZX06OiR7Y2xhc3NOYW1lfVByaXZh
dGUge1xuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICR7Y2xhc3NOYW1lfVBy
aXZhdGUoJGltcGxDbGFzc05hbWVXaXRoTmFtZXNwYWNlKiBvYmplY3QgPSAwKVxuIik7CisgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICA6IGltcGwob2JqZWN0KVxuIik7CisgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHtcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICB9XG5cbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBSZWZQ
dHI8JGltcGxDbGFzc05hbWVXaXRoTmFtZXNwYWNlPiBpbXBsO1xuIik7CisgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAifTtcblxuIik7CisgICAgfQorCisgICAgIyBDb25zdHJ1Y3RvcgorICAg
IHB1c2goQGltcGxDb250ZW50LCAiJHtjbGFzc05hbWV9OjokY2xhc3NOYW1lKClcbiIpOworICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIDogJHtiYXNlQ2xhc3N9KClcbiIpOworICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgICwgbV9kKDApXG4iKSBpZiAoQHskZGF0YU5vZGUtPnBhcmVudHN9
IGVxIDApOworICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CisgICAgcHVzaChAaW1wbENv
bnRlbnQsICJ9XG5cbiIpOworCisgICAgcHVzaChAaW1wbENvbnRlbnQsICIke2NsYXNzTmFtZX06
OiRjbGFzc05hbWUoJGltcGxDbGFzc05hbWVXaXRoTmFtZXNwYWNlKiBpbXBsKVxuIik7CisgICAg
aWYgKEB7JGRhdGFOb2RlLT5wYXJlbnRzfSBlcSAwKSB7CisgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIDogJHtiYXNlQ2xhc3N9KClcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICAsIG1fZChuZXcgJHtjbGFzc05hbWV9UHJpdmF0ZShpbXBsKSlcbiIpOworICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
In1cblxuIik7CisKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIke2NsYXNzTmFtZX06OiR7
Y2xhc3NOYW1lfShjb25zdCAke2NsYXNzTmFtZX0mIGNvcHkpXG4iKTsKKyAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgOiAke2Jhc2VDbGFzc30oKVxuIik7CisgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAie1xuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIG1fZCA9
IGNvcHkuaW1wbCgpID8gbmV3ICR7Y2xhc3NOYW1lfVByaXZhdGUoY29weS5pbXBsKCkpIDogMDtc
biIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CisKKyAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIkaW1wbENsYXNzTmFtZVdpdGhOYW1lc3BhY2UqICR7Y2xhc3NOYW1l
fTo6aW1wbCgpIGNvbnN0XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsK
KyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIG1fZCA/IG1fZC0+aW1wbC5n
ZXQoKSA6IDA7XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOworCisg
ICAgICAgICMgRGVzdHJ1Y3RvcgorICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiR7Y2xhc3NO
YW1lfTo6fiRjbGFzc05hbWUoKVxuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xu
Iik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGRlbGV0ZSBtX2Q7XG4iKTsKKyAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgbV9kID0gMDtcbiIpOworICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIn1cblxuIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgOiAke2Jhc2VDbGFzc30oaW1wbClcbiIpOworICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIntcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7
CisKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIkaW1wbENsYXNzTmFtZVdpdGhOYW1lc3Bh
Y2UqICR7Y2xhc3NOYW1lfTo6aW1wbCgpIGNvbnN0XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICJ7XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIHN0
YXRpY19jYXN0PCRpbXBsQ2xhc3NOYW1lV2l0aE5hbWVzcGFjZSo+KCR7YmFzZUNsYXNzfTo6aW1w
bCgpKTtcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CisgICAgfQor
CisgICAgIyBTVEFSVCBpbXBsZW1lbnRhdGlvbgorICAgICVhdHRyaWJ1dGVOYW1lcyA9ICgpOwor
CisgICAgIyAtIEF0dHJpYnV0ZXMKKyAgICBpZiAoJG51bUF0dHJpYnV0ZXMgPiAwKSB7CisgICAg
ICAgIGZvcmVhY2ggbXkgJGF0dHJpYnV0ZSAoQHskZGF0YU5vZGUtPmF0dHJpYnV0ZXN9KSB7Cisg
ICAgICAgICAgICBuZXh0IGlmIFNob3VsZFNraXBUeXBlSW5JbXBsZW1lbnRhdGlvbigkYXR0cmli
dXRlKTsKKyAgICAgICAgICAgIEFkZEluY2x1ZGVzRm9yVHlwZSgkYXR0cmlidXRlLT5zaWduYXR1
cmUtPnR5cGUpOworCisgICAgICAgICAgICBteSAkaWRsVHlwZSA9ICRjb2RlR2VuZXJhdG9yLT5T
dHJpcE1vZHVsZSgkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGUpOworCisgICAgICAgICAgICBt
eSAkYXR0cmlidXRlTmFtZSA9ICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+bmFtZTsKKyAgICAgICAg
ICAgIG15ICRhdHRyaWJ1dGVUeXBlID0gR2V0Q1BQVHlwZSgkYXR0cmlidXRlLT5zaWduYXR1cmUt
PnR5cGUpOworICAgICAgICAgICAgbXkgJGF0dHJpYnV0ZUlzUmVhZG9ubHkgPSAoJGF0dHJpYnV0
ZS0+dHlwZSA9fiAvXnJlYWRvbmx5Lyk7CisgICAgICAgICAgICBteSAkYXR0cmlidXRlQ2xhc3NO
YW1lID0gR2V0Q2xhc3NOYW1lKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+dHlwZSk7CisKKyAgICAg
ICAgICAgICRhdHRyaWJ1dGVOYW1lc3skYXR0cmlidXRlTmFtZX0gPSAxOworCisgICAgICAgICAg
ICAjIC0gR0VUVEVSCisgICAgICAgICAgICBteSAkZ2V0dGVyU2lnID0gIiRhdHRyaWJ1dGVUeXBl
ICRjbGFzc05hbWVcOlw6JGF0dHJpYnV0ZU5hbWUoKSBjb25zdFxuIjsKKyAgICAgICAgICAgIG15
ICRoYXNHZXR0ZXJFeGNlcHRpb24gPSBAeyRhdHRyaWJ1dGUtPmdldHRlckV4Y2VwdGlvbnN9Owor
ICAgICAgICAgICAgbXkgJGdldHRlckNvbnRlbnRIZWFkOworICAgICAgICAgICAgbXkgJHJlZmxl
Y3QgPSAkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJSZWZsZWN0
In07CisgICAgICAgICAgICBteSAkcmVmbGVjdFVSTCA9ICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlJlZmxlY3RVUkwifTsKKyAgICAgICAgICAgIGlmICgkcmVm
bGVjdCB8fCAkcmVmbGVjdFVSTCkgeworICAgICAgICAgICAgICAgIG15ICRjb250ZW50QXR0cmli
dXRlTmFtZSA9ICgoJHJlZmxlY3QgfHwgJHJlZmxlY3RVUkwpIGVxICIxIikgPyAkYXR0cmlidXRl
TmFtZSA6ICgkcmVmbGVjdCB8fCAkcmVmbGVjdFVSTCk7CisgICAgICAgICAgICAgICAgbXkgJG5h
bWVzcGFjZSA9ICRjb2RlR2VuZXJhdG9yLT5OYW1lc3BhY2VGb3JBdHRyaWJ1dGVOYW1lKCRpbnRl
cmZhY2VOYW1lLCAkY29udGVudEF0dHJpYnV0ZU5hbWUpOworICAgICAgICAgICAgICAgICRpbXBs
SW5jbHVkZXN7IiR7bmFtZXNwYWNlfS5oIn0gPSAxOworICAgICAgICAgICAgICAgIG15ICRnZXRB
dHRyaWJ1dGVGdW5jdGlvbk5hbWUgPSAkcmVmbGVjdFVSTCA/ICJnZXRVUkxBdHRyaWJ1dGUiIDog
ImdldEF0dHJpYnV0ZSI7CisgICAgICAgICAgICAgICAgJGdldHRlckNvbnRlbnRIZWFkID0gImlt
cGwoKS0+JHtnZXRBdHRyaWJ1dGVGdW5jdGlvbk5hbWV9KFdlYkNvcmU6OiR7bmFtZXNwYWNlfTo6
JHtjb250ZW50QXR0cmlidXRlTmFtZX1BdHRyIjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgJGdldHRlckNvbnRlbnRIZWFkID0gImltcGwoKS0+IiAuICRjb2RlR2VuZXJh
dG9yLT5XS19sY2ZpcnN0KCRhdHRyaWJ1dGVOYW1lKSAuICIoIjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIG15ICRnZXR0ZXJDb250ZW50VGFpbCA9ICIpIjsKKworICAgICAgICAgICAgIyBT
cGVjaWFsIGNhc2VzCisgICAgICAgICAgICBteSBAY3VzdG9tR2V0dGVyQ29udGVudCA9ICgpOyAK
KyAgICAgICAgICAgIGlmICgkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyJDb252ZXJ0VG9TdHJpbmcifSkgeworICAgICAgICAgICAgICAgICRnZXR0ZXJDb250ZW50
SGVhZCA9ICJXZWJDb3JlOjpTdHJpbmc6Om51bWJlcigiIC4gJGdldHRlckNvbnRlbnRIZWFkOwor
ICAgICAgICAgICAgICAgICRnZXR0ZXJDb250ZW50VGFpbCAuPSAiKSI7CisgICAgICAgICAgICB9
IGVsc2lmICgkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDb252
ZXJ0RnJvbVN0cmluZyJ9KSB7CisgICAgICAgICAgICAgICAgJGdldHRlckNvbnRlbnRUYWlsIC49
ICIudG9JbnQoKSI7CisgICAgICAgICAgICB9IGVsc2lmICgkYXR0cmlidXRlLT5zaWduYXR1cmUt
PnR5cGUgZXEgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSIpIHsKKyAgICAgICAgICAgICAgICAkZ2V0
dGVyQ29udGVudEhlYWQgPSAiJGdldHRlckNvbnRlbnRIZWFkIjsKKyAgICAgICAgICAgICAgICAk
Z2V0dGVyQ29udGVudFRhaWwgLj0gIi0+dG9TdHJpbmcoKSI7ICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgfSBlbHNpZiAoQ29udmVyc2lvbk5lZWRlZCgkYXR0cmlidXRlLT5zaWduYXR1cmUt
PnR5cGUpKSB7CisgICAgICAgICAgICAgICAgJGdldHRlckNvbnRlbnRIZWFkID0gInRvV2ViS2l0
KFdURjo6Z2V0UHRyKCRnZXR0ZXJDb250ZW50SGVhZCI7CisgICAgICAgICAgICAgICAgJGdldHRl
ckNvbnRlbnRUYWlsIC49ICIpKSI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG15ICRn
ZXR0ZXJDb250ZW50OworICAgICAgICAgICAgaWYgKCRoYXNHZXR0ZXJFeGNlcHRpb24pIHsKKyAg
ICAgICAgICAgICAgICAkZ2V0dGVyQ29udGVudCA9ICRnZXR0ZXJDb250ZW50SGVhZCAuICJlYyIg
LiAkZ2V0dGVyQ29udGVudFRhaWw7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgICRnZXR0ZXJDb250ZW50ID0gJGdldHRlckNvbnRlbnRIZWFkIC4gJGdldHRlckNvbnRlbnRU
YWlsOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBteSAkYXR0cmlidXRlQ29uZGl0aW9u
YWxTdHJpbmcgPSBHZW5lcmF0ZUNvbmRpdGlvbmFsU3RyaW5nKCRhdHRyaWJ1dGUtPnNpZ25hdHVy
ZSk7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiNpZiAke2F0dHJpYnV0ZUNvbmRp
dGlvbmFsU3RyaW5nfVxuIikgaWYgJGF0dHJpYnV0ZUNvbmRpdGlvbmFsU3RyaW5nOworCisgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgJGdldHRlclNpZyk7CisgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIntcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsIEFk
ZEVhcmx5UmV0dXJuU3RhdGVtZW50KCRhdHRyaWJ1dGVUeXBlKSk7CisgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgQGN1c3RvbUdldHRlckNvbnRlbnQpOworICAgICAgICAgICAgaWYgKCRo
YXNHZXR0ZXJFeGNlcHRpb24pIHsKKyAgICAgICAgICAgICAgICAjIERpZmZlcmVudGlhdGVkIGJl
dHdlZW4gd2hlbiB0aGUgcmV0dXJuIHR5cGUgaXMgYSBwb2ludGVyIGFuZAorICAgICAgICAgICAg
ICAgICMgbm90IGZvciB3aGl0ZSBzcGFjZSBpc3N1ZSAoaWUuIEZvbyAqcmVzdWx0IHZzLiBpbnQg
cmVzdWx0KS4KKyAgICAgICAgICAgICAgICBpZiAoJGF0dHJpYnV0ZVR5cGUgPX4gL1wqJC8pIHsK
KyAgICAgICAgICAgICAgICAgICAgJGdldHRlckNvbnRlbnQgPSAkYXR0cmlidXRlVHlwZSAuICJy
ZXN1bHQgPSAiIC4gJGdldHRlckNvbnRlbnQ7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgJGdldHRlckNvbnRlbnQgPSAkYXR0cmlidXRlVHlwZSAuICIgcmVz
dWx0ID0gIiAuICRnZXR0ZXJDb250ZW50OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICRleGNlcHRpb25Jbml0XG4iKTsKKyAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAkZ2V0dGVyQ29udGVudDtcbiIpOwor
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICRleGNlcHRpb25SYWlzZU9u
RXJyb3JcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCBBZGRSZXR1cm5T
dGF0ZW1lbnQoJGF0dHJpYnV0ZSwgInJlc3VsdCIpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsIEFkZFJldHVyblN0YXRlbWVudCgkYXR0
cmlidXRlLCAkZ2V0dGVyQ29udGVudCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOworCisgICAgICAgICAgICAjIC0gU0VUVEVSCisgICAg
ICAgICAgICBpZiAoISRhdHRyaWJ1dGVJc1JlYWRvbmx5IGFuZCAhJGF0dHJpYnV0ZS0+c2lnbmF0
dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiUmVwbGFjZWFibGUifSkgeworICAgICAgICAgICAg
ICAgICMgRXhjZXB0aW9uIGhhbmRsaW5nCisgICAgICAgICAgICAgICAgbXkgJGhhc1NldHRlckV4
Y2VwdGlvbiA9IEB7JGF0dHJpYnV0ZS0+c2V0dGVyRXhjZXB0aW9uc307CisKKyAgICAgICAgICAg
ICAgICBteSAkY29yZVNldHRlck5hbWUgPSAic2V0IiAuICRjb2RlR2VuZXJhdG9yLT5XS191Y2Zp
cnN0KCRhdHRyaWJ1dGVOYW1lKTsKKyAgICAgICAgICAgICAgICBteSAkc2V0dGVyTmFtZSA9ICJz
ZXQiIC4gdWNmaXJzdCgkYXR0cmlidXRlTmFtZSk7CisgICAgICAgICAgICAgICAgbXkgJGFyZ05h
bWUgPSAibmV3IiAuIHVjZmlyc3QoJGF0dHJpYnV0ZU5hbWUpOworICAgICAgICAgICAgICAgIG15
ICRhcmcgPSBHZXRDUFBUeXBlR2V0dGVyKCRhcmdOYW1lLCAkaWRsVHlwZSk7CisKKyAgICAgICAg
ICAgICAgICAjIFRoZSBkZWZpbml0aW9uIG9mIENvbnZlcnRGcm9tU3RyaW5nIGFuZCBDb252ZXJ0
VG9TdHJpbmcgaXMgZmxpcHBlZCBmb3IgdGhlIHNldHRlcgorICAgICAgICAgICAgICAgIGlmICgk
YXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDb252ZXJ0RnJvbVN0
cmluZyJ9KSB7CisgICAgICAgICAgICAgICAgICAgICRhcmcgPSAiV2ViQ29yZTo6U3RyaW5nOjpu
dW1iZXIoJGFyZykiOworICAgICAgICAgICAgICAgIH0gZWxzaWYgKCRhdHRyaWJ1dGUtPnNpZ25h
dHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNvbnZlcnRUb1N0cmluZyJ9KSB7CisgICAgICAg
ICAgICAgICAgICAgICRhcmcgPSAiV2ViQ29yZTo6U3RyaW5nKCRhcmcpLnRvSW50KCkiOworICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAidm9p
ZCAkY2xhc3NOYW1lXDpcOiRzZXR0ZXJOYW1lKGNvbnN0ICRhdHRyaWJ1dGVUeXBlJiAkYXJnTmFt
ZSlcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CisgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsIEFkZEVhcmx5UmV0dXJuU3RhdGVtZW50KCkp
OworCisgICAgICAgICAgICAgICAgbXkgJHJlZmxlY3QgPSAkYXR0cmlidXRlLT5zaWduYXR1cmUt
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJSZWZsZWN0In07CisgICAgICAgICAgICAgICAgbXkgJHJl
ZmxlY3RVUkwgPSAkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJS
ZWZsZWN0VVJMIn07CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJGV4
Y2VwdGlvbkluaXRcbiIpIGlmICRoYXNTZXR0ZXJFeGNlcHRpb247CisgICAgICAgICAgICAgICAg
bXkgJGVjID0gJGhhc1NldHRlckV4Y2VwdGlvbiA/ICIsIGVjIiA6ICIiOworICAgICAgICAgICAg
ICAgIGlmICgkcmVmbGVjdCB8fCAkcmVmbGVjdFVSTCkgeworICAgICAgICAgICAgICAgICAgICBt
eSAkY29udGVudEF0dHJpYnV0ZU5hbWUgPSAoKCRyZWZsZWN0IHx8ICRyZWZsZWN0VVJMKSBlcSAi
MSIpID8gJGF0dHJpYnV0ZU5hbWUgOiAoJHJlZmxlY3QgfHwgJHJlZmxlY3RVUkwpOworICAgICAg
ICAgICAgICAgICAgICBteSAkbmFtZXNwYWNlID0gJGNvZGVHZW5lcmF0b3ItPk5hbWVzcGFjZUZv
ckF0dHJpYnV0ZU5hbWUoJGludGVyZmFjZU5hbWUsICRjb250ZW50QXR0cmlidXRlTmFtZSk7Cisg
ICAgICAgICAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7IiR7bmFtZXNwYWNlfS5oIn0gPSAxOwor
ICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpbXBsKCktPnNldEF0
dHJpYnV0ZShXZWJDb3JlOjoke25hbWVzcGFjZX06OiR7Y29udGVudEF0dHJpYnV0ZU5hbWV9QXR0
ciwgJGFyZyRlYyk7XG4iKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpbXBsKCktPiRjb3JlU2V0dGVyTmFtZSgk
YXJnJGVjKTtcbiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICAkZXhjZXB0aW9uUmFpc2VPbkVycm9yXG4iKSBpZiAkaGFzU2V0dGVy
RXhjZXB0aW9uOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIjZW5kaWZc
biIpIGlmICRhdHRyaWJ1dGVDb25kaXRpb25hbFN0cmluZzsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgICMgLSBGdW5jdGlvbnMKKyAgICBpZiAoJG51bUZ1bmN0aW9ucyA+IDApIHsKKyAgICAgICAg
Zm9yZWFjaCBteSAkZnVuY3Rpb24gKEB7JGRhdGFOb2RlLT5mdW5jdGlvbnN9KSB7CisgICAgICAg
ICAgICAjIFRyZWF0IFB1cmVJbnRlcmZhY2UgYXMgQ3VzdG9tIGFzIHdlbGwsIHNpbmNlIHRoZSBX
ZWJDb3JlIHZlcnNpb25zIHdpbGwgdGFrZSBhIHNjcmlwdCBjb250ZXh0IGFzIHdlbGwKKyAgICAg
ICAgICAgIG5leHQgaWYgU2hvdWxkU2tpcFR5cGVJbkltcGxlbWVudGF0aW9uKCRmdW5jdGlvbikg
fHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiUHVyZUludGVyZmFjZSJ9OworICAg
ICAgICAgICAgQWRkSW5jbHVkZXNGb3JUeXBlKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT50eXBlKTsK
KworICAgICAgICAgICAgbXkgJGZ1bmN0aW9uTmFtZSA9ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5u
YW1lOworICAgICAgICAgICAgbXkgJHJldHVyblR5cGUgPSBHZXRDUFBUeXBlKCRmdW5jdGlvbi0+
c2lnbmF0dXJlLT50eXBlKTsKKyAgICAgICAgICAgIG15ICRoYXNQYXJhbWV0ZXJzID0gQHskZnVu
Y3Rpb24tPnBhcmFtZXRlcnN9OworICAgICAgICAgICAgbXkgJHJhaXNlc0V4Y2VwdGlvbnMgPSBA
eyRmdW5jdGlvbi0+cmFpc2VzRXhjZXB0aW9uc307CisKKyAgICAgICAgICAgIG15IEBwYXJhbWV0
ZXJOYW1lcyA9ICgpOworICAgICAgICAgICAgbXkgQG5lZWRzQXNzZXJ0ID0gKCk7CisgICAgICAg
ICAgICBteSAlbmVlZHNDdXN0b20gPSAoKTsKKworICAgICAgICAgICAgbXkgJHBhcmFtZXRlcklu
ZGV4ID0gMDsKKyAgICAgICAgICAgIG15ICRmdW5jdGlvblNpZyA9ICIkcmV0dXJuVHlwZSAkY2xh
c3NOYW1lXDpcOiRmdW5jdGlvbk5hbWUoIjsKKyAgICAgICAgICAgIGZvcmVhY2ggbXkgJHBhcmFt
IChAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc30pIHsKKyAgICAgICAgICAgICAgICBteSAkcGFyYW1O
YW1lID0gJHBhcmFtLT5uYW1lOworICAgICAgICAgICAgICAgIG15ICRwYXJhbVR5cGUgPSBHZXRD
UFBUeXBlKCRwYXJhbS0+dHlwZSk7CisKKyAgICAgICAgICAgICAgICAjIG1ha2UgYSBuZXcgcGFy
YW1ldGVyIG5hbWUgaWYgdGhlIG9yaWdpbmFsIGNvbmZsaWN0cyB3aXRoIGEgcHJvcGVydHkgbmFt
ZQorICAgICAgICAgICAgICAgICRwYXJhbU5hbWUgPSAiaW4iIC4gdWNmaXJzdCgkcGFyYW1OYW1l
KSBpZiAkYXR0cmlidXRlTmFtZXN7JHBhcmFtTmFtZX07CisKKyAgICAgICAgICAgICAgICBBZGRJ
bmNsdWRlc0ZvclR5cGUoJHBhcmFtLT50eXBlKTsKKworICAgICAgICAgICAgICAgIG15ICRpZGxU
eXBlID0gJGNvZGVHZW5lcmF0b3ItPlN0cmlwTW9kdWxlKCRwYXJhbS0+dHlwZSk7CisgICAgICAg
ICAgICAgICAgbXkgJGltcGxHZXR0ZXIgPSBHZXRDUFBUeXBlR2V0dGVyKCRwYXJhbU5hbWUsICRp
ZGxUeXBlKTsKKworICAgICAgICAgICAgICAgIHB1c2goQHBhcmFtZXRlck5hbWVzLCAkaW1wbEdl
dHRlcik7CisgICAgICAgICAgICAgICAgJG5lZWRzQ3VzdG9teyJOb2RlVG9SZXR1cm4ifSA9ICRw
YXJhbU5hbWUgaWYgJHBhcmFtLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiUmV0dXJuIn07CisKKyAg
ICAgICAgICAgICAgICB1bmxlc3MgKCRjb2RlR2VuZXJhdG9yLT5Jc1ByaW1pdGl2ZVR5cGUoJGlk
bFR5cGUpIG9yICRjb2RlR2VuZXJhdG9yLT5Jc1N0cmluZ1R5cGUoJGlkbFR5cGUpKSB7CisgICAg
ICAgICAgICAgICAgICAgIHB1c2goQG5lZWRzQXNzZXJ0LCAiICAgIEFTU0VSVCgkcGFyYW1OYW1l
KTtcbiIpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICRmdW5jdGlvblNp
ZyAuPSAiLCAiIGlmICRwYXJhbWV0ZXJJbmRleCA+PSAxOworICAgICAgICAgICAgICAgICRmdW5j
dGlvblNpZyAuPSAiY29uc3QgJHBhcmFtVHlwZSYgJHBhcmFtTmFtZSI7CisgICAgICAgICAgICAg
ICAgJHBhcmFtZXRlckluZGV4Kys7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICRmdW5j
dGlvblNpZyAuPSAiKSI7CisKKyAgICAgICAgICAgIG15IEBmdW5jdGlvbkNvbnRlbnQgPSAoKTsK
KyAgICAgICAgICAgIHB1c2goQHBhcmFtZXRlck5hbWVzLCAiZWMiKSBpZiAkcmFpc2VzRXhjZXB0
aW9uczsKKyAgICAgICAgICAgIG15ICRjb250ZW50ID0gImltcGwoKS0+IiAuICRjb2RlR2VuZXJh
dG9yLT5XS19sY2ZpcnN0KCRmdW5jdGlvbk5hbWUpIC4gIigiIC4gam9pbigiLCAiLCBAcGFyYW1l
dGVyTmFtZXMpIC4gIikiOyAKKworICAgICAgICAgICAgaWYgKCRyZXR1cm5UeXBlIGVxICJ2b2lk
IikgeworICAgICAgICAgICAgICAgICMgU3BlY2lhbCBjYXNlICd2b2lkJyByZXR1cm4gdHlwZS4K
KyAgICAgICAgICAgICAgICBpZiAoJHJhaXNlc0V4Y2VwdGlvbnMpIHsKKyAgICAgICAgICAgICAg
ICAgICAgcHVzaChAZnVuY3Rpb25Db250ZW50LCAiICAgICRleGNlcHRpb25Jbml0XG4iKTsKKyAg
ICAgICAgICAgICAgICAgICAgcHVzaChAZnVuY3Rpb25Db250ZW50LCAiICAgICRjb250ZW50O1xu
Iik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGZ1bmN0aW9uQ29udGVudCwgIiAgICAkZXhj
ZXB0aW9uUmFpc2VPbkVycm9yXG4iKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICBwdXNoKEBmdW5jdGlvbkNvbnRlbnQsICIgICAgJGNvbnRlbnQ7XG4iKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2lmIChkZWZpbmVkICRuZWVkc0N1
c3RvbXsiTm9kZVRvUmV0dXJuIn0pIHsKKyAgICAgICAgICAgICAgICAjIFRPRE86IFRoaXMgaXMg
aW1wb3J0YW50IHRvIGVuYWJsZSwgb25jZSB3ZSBjYXJlIGFib3V0IGN1c3RvbSBjb2RlIQorCisg
ICAgICAgICAgICAgICAgIyBTcGVjaWFsIGNhc2UgdGhlIGluc2VydEJlZm9yZSwgcmVwbGFjZUNo
aWxkLCByZW1vdmVDaGlsZCAKKyAgICAgICAgICAgICAgICAjIGFuZCBhcHBlbmRDaGlsZCBmdW5j
dGlvbnMgZnJvbSBET01Ob2RlIAorICAgICAgICAgICAgICAgIG15ICR0b1JldHVybiA9ICRuZWVk
c0N1c3RvbXsiTm9kZVRvUmV0dXJuIn07CisgICAgICAgICAgICAgICAgaWYgKCRyYWlzZXNFeGNl
cHRpb25zKSB7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGZ1bmN0aW9uQ29udGVudCwgIiAg
ICAkZXhjZXB0aW9uSW5pdFxuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGZ1bmN0aW9u
Q29udGVudCwgIiAgICBpZiAoJGNvbnRlbnQpXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVz
aChAZnVuY3Rpb25Db250ZW50LCAiICAgICAgICByZXR1cm4gJHRvUmV0dXJuO1xuIik7CisgICAg
ICAgICAgICAgICAgICAgIHB1c2goQGZ1bmN0aW9uQ29udGVudCwgIiAgICAkZXhjZXB0aW9uUmFp
c2VPbkVycm9yXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAZnVuY3Rpb25Db250ZW50
LCAiICAgIHJldHVybiAkY2xhc3NOYW1lKCk7XG4iKTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICBwdXNoKEBmdW5jdGlvbkNvbnRlbnQsICIgICAgaWYgKCRj
b250ZW50KVxuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGZ1bmN0aW9uQ29udGVudCwg
IiAgICAgICAgcmV0dXJuICR0b1JldHVybjtcbiIpOworICAgICAgICAgICAgICAgICAgICBwdXNo
KEBmdW5jdGlvbkNvbnRlbnQsICIgICAgcmV0dXJuIE5VTEw7XG4iKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChDb252ZXJzaW9u
TmVlZGVkKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT50eXBlKSkgeworICAgICAgICAgICAgICAgICAg
ICAkY29udGVudCA9ICJ0b1dlYktpdChXVEY6OmdldFB0cigkY29udGVudCkpIjsKKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoJHJhaXNlc0V4Y2VwdGlvbnMpIHsKKyAg
ICAgICAgICAgICAgICAgICAgIyBEaWZmZXJlbnRpYXRlZCBiZXR3ZWVuIHdoZW4gdGhlIHJldHVy
biB0eXBlIGlzIGEgcG9pbnRlciBhbmQKKyAgICAgICAgICAgICAgICAgICAgIyBub3QgZm9yIHdo
aXRlIHNwYWNlIGlzc3VlIChpZS4gRm9vICpyZXN1bHQgdnMuIGludCByZXN1bHQpLgorICAgICAg
ICAgICAgICAgICAgICBpZiAoJHJldHVyblR5cGUgPX4gL1wqJC8pIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICRjb250ZW50ID0gJHJldHVyblR5cGUgLiAicmVzdWx0ID0gIiAuICRjb250ZW50
OworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAg
JGNvbnRlbnQgPSAkcmV0dXJuVHlwZSAuICIgcmVzdWx0ID0gIiAuICRjb250ZW50OworICAgICAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAZnVuY3Rpb25Db250
ZW50LCAiICAgICRleGNlcHRpb25Jbml0XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChA
ZnVuY3Rpb25Db250ZW50LCAiICAgICRjb250ZW50O1xuIik7CisgICAgICAgICAgICAgICAgICAg
IHB1c2goQGZ1bmN0aW9uQ29udGVudCwgIiAgICAkZXhjZXB0aW9uUmFpc2VPbkVycm9yXG4iKTsK
KyAgICAgICAgICAgICAgICAgICAgcHVzaChAZnVuY3Rpb25Db250ZW50LCAiICAgIHJldHVybiBy
ZXN1bHQ7XG4iKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICBwdXNoKEBmdW5jdGlvbkNvbnRlbnQsICIgICAgcmV0dXJuICRjb250ZW50O1xuIik7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiRmdW5jdGlvblNpZ1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IntcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsIEFkZEVhcmx5UmV0dXJuU3Rh
dGVtZW50KCRyZXR1cm5UeXBlKSk7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgQGZ1
bmN0aW9uQ29udGVudCk7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7
CisKKyAgICAgICAgICAgICMgQ2xlYXIgdGhlIGhhc2gKKyAgICAgICAgICAgICVuZWVkc0N1c3Rv
bSA9ICgpOworICAgICAgICB9CisgICAgfQorCisgICAgIyBFTkQgaW1wbGVtZW50YXRpb24KKwor
ICAgICMgR2VuZXJhdGUgaW50ZXJuYWwgaW50ZXJmYWNlcworICAgIHB1c2goQGltcGxDb250ZW50
LCAiV2ViQ29yZTo6JGltcGxDbGFzc05hbWUqIHRvV2ViQ29yZShjb25zdCAkY2xhc3NOYW1lJiB3
cmFwcGVyKVxuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKKyAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICByZXR1cm4gd3JhcHBlci5pbXBsKCk7XG4iKTsKKyAgICBwdXNoKEBp
bXBsQ29udGVudCwgIn1cblxuIik7CisKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiRjbGFzc05h
bWUgdG9XZWJLaXQoV2ViQ29yZTo6JGltcGxDbGFzc05hbWUqIHZhbHVlKVxuIik7CisgICAgcHVz
aChAaW1wbENvbnRlbnQsICJ7XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB7XG4i
KTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgV0VCRE9NX0FTU0VSVF9NQUlOX1RI
UkVBRCgpO1xuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIFdlYkNvcmVUaHJl
YWRWaW9sYXRpb25DaGVja1JvdW5kT25lKCk7XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICB9XG5cbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiAkY2xhc3NO
YW1lKHZhbHVlKTtcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuIik7CisKKyAgICAj
IC0gRW5kIHRoZSBpZmRlZiBjb25kaXRpb25hbCBpZiBuZWNlc3NhcnkKKyAgICBwdXNoKEBpbXBs
Q29udGVudCwgIlxuI2VuZGlmIC8vICR7Y29uZGl0aW9uYWxTdHJpbmd9XG4iKSBpZiAkY29uZGl0
aW9uYWxTdHJpbmc7Cit9CisKKyMgSW50ZXJuYWwgaGVscGVyCitzdWIgV3JpdGVEYXRhCit7Cisg
ICAgbXkgJG9iamVjdCA9IHNoaWZ0OworICAgIG15ICRuYW1lID0gc2hpZnQ7CisKKyAgICAjIE9w
ZW4gZmlsZXMgZm9yIHdyaXRpbmcuLi4KKyAgICBteSAkaGVhZGVyRmlsZU5hbWUgPSAiJG91dHB1
dERpci8iIC4gJG5hbWUgLiAiLmgiOworICAgIG15ICRpbXBsRmlsZU5hbWUgPSAiJG91dHB1dERp
ci8iIC4gJG5hbWUgLiAiLmNwcCI7CisKKyAgICAjIFJlbW92ZSBvbGQgZmlsZXMuCisgICAgdW5s
aW5rKCRoZWFkZXJGaWxlTmFtZSk7CisgICAgdW5saW5rKCRpbXBsRmlsZU5hbWUpOworCisgICAg
IyBXcml0ZSBwdWJsaWMgaGVhZGVyLgorICAgIG9wZW4oSEVBREVSLCAiPiRoZWFkZXJGaWxlTmFt
ZSIpIG9yIGRpZSAiQ291bGRuJ3Qgb3BlbiBmaWxlICRoZWFkZXJGaWxlTmFtZSI7CisgICAgCisg
ICAgcHJpbnQgSEVBREVSIEBoZWFkZXJDb250ZW50SGVhZGVyOworICAgIHByaW50IEhFQURFUiAi
XG4iOworICAgIGZvcmVhY2ggbXkgJGNsYXNzIChzb3J0IGtleXMoJWhlYWRlckZvcndhcmREZWNs
YXJhdGlvbnMpKSB7CisgICAgICAgIGlmICgkY2xhc3MgPX4gLzo6LykgeworICAgICAgICAgICAg
bXkgJG5hbWVzcGFjZVBhcnQgPSAkY2xhc3M7CisgICAgICAgICAgICAkbmFtZXNwYWNlUGFydCA9
fiBzLzo6LiovLzsKKworICAgICAgICAgICAgbXkgJGNsYXNzUGFydCA9ICRjbGFzczsKKyAgICAg
ICAgICAgICRjbGFzc1BhcnQgPX4gcy8ke25hbWVzcGFjZVBhcnR9OjovLzsKKworICAgICAgICAg
ICAgcHJpbnQgSEVBREVSICJuYW1lc3BhY2UgJG5hbWVzcGFjZVBhcnQge1xuY2xhc3MgJGNsYXNz
UGFydDtcbn07XG5cbiI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwcmludCBIRUFE
RVIgImNsYXNzICRjbGFzcztcbiIKKyAgICAgICAgfQorICAgIH0KKworICAgIG15ICRoYXNGb3J3
YXJkRGVjbGFyYXRpb25zID0ga2V5cyglaGVhZGVyRm9yd2FyZERlY2xhcmF0aW9ucyk7CisgICAg
cHJpbnQgSEVBREVSICJcbiIgaWYgJGhhc0ZvcndhcmREZWNsYXJhdGlvbnM7CisgICAgcHJpbnQg
SEVBREVSIEBoZWFkZXJDb250ZW50OworICAgIGNsb3NlKEhFQURFUik7CisKKyAgICBAaGVhZGVy
Q29udGVudEhlYWRlciA9ICgpOworICAgIEBoZWFkZXJDb250ZW50ID0gKCk7CisgICAgJWhlYWRl
ckZvcndhcmREZWNsYXJhdGlvbnMgPSAoKTsKKworICAgICMgV3JpdGUgaW1wbGVtZW50YXRpb24g
ZmlsZS4KKyAgICBvcGVuKElNUEwsICI+JGltcGxGaWxlTmFtZSIpIG9yIGRpZSAiQ291bGRuJ3Qg
b3BlbiBmaWxlICRpbXBsRmlsZU5hbWUiOworCisgICAgcHJpbnQgSU1QTCBAaW1wbENvbnRlbnRI
ZWFkZXI7CisKKyAgICBmb3JlYWNoIG15ICRpbmNsdWRlIChzb3J0IGtleXMoJWltcGxJbmNsdWRl
cykpIHsKKyAgICAgICAgIyAiY2xhc3NOYW1lLmgiIGlzIGFscmVhZHkgaW5jbHVkZWQgcmlnaHQg
YWZ0ZXIgY29uZmlnLmgsIHNpbGVuY2UgY2hlY2std2Via2l0LXN0eWxlCisgICAgICAgIG5leHQg
aWYgJGluY2x1ZGUgZXEgIiRuYW1lLmgiOworICAgICAgICBwcmludCBJTVBMICIjaW5jbHVkZSBc
IiRpbmNsdWRlXCJcbiI7CisgICAgfQorCisgICAgcHJpbnQgSU1QTCBAaW1wbENvbnRlbnQ7Cisg
ICAgY2xvc2UoSU1QTCk7CisKKyAgICBAaW1wbENvbnRlbnRIZWFkZXIgPSAoKTsKKyAgICBAaW1w
bENvbnRlbnQgPSAoKTsKKyAgICAlaW1wbEluY2x1ZGVzID0gKCk7Cit9CisKKzE7CgpQcm9wZXJ0
eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckNQUC5w
bQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoKCkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE9iai5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RPYmouY3BwCShy
ZXZpc2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRl
c3RPYmouY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQwNSBAQAorLyoKKyAqIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqIFRoaXMgZmls
ZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJ
RlkhCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJET01UZXN0T2JqLmgiCisKKyNp
bmNsdWRlICJBdG9taWNTdHJpbmcuaCIKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiU2Vy
aWFsaXplZFNjcmlwdFZhbHVlLmgiCisjaW5jbHVkZSAiVGVzdE9iai5oIgorI2luY2x1ZGUgIlRo
cmVhZENoZWNrLmgiCisjaW5jbHVkZSAiV2ViRE9NU3RyaW5nLmgiCisjaW5jbHVkZSAiV2ViRXhj
ZXB0aW9uSGFuZGxlci5oIgorI2luY2x1ZGUgIldlYk5hdGl2ZUV2ZW50TGlzdGVuZXIuaCIKKyNp
bmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCitzdHJ1Y3Qg
V2ViRE9NVGVzdE9iajo6V2ViRE9NVGVzdE9ialByaXZhdGUgeworICAgIFdlYkRPTVRlc3RPYmpQ
cml2YXRlKFdlYkNvcmU6OlRlc3RPYmoqIG9iamVjdCA9IDApCisgICAgICAgIDogaW1wbChvYmpl
Y3QpCisgICAgeworICAgIH0KKworICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBpbXBsOwor
fTsKKworV2ViRE9NVGVzdE9iajo6V2ViRE9NVGVzdE9iaigpCisgICAgOiBXZWJET01PYmplY3Qo
KQorICAgICwgbV9kKDApCit7Cit9CisKK1dlYkRPTVRlc3RPYmo6OldlYkRPTVRlc3RPYmooV2Vi
Q29yZTo6VGVzdE9iaiogaW1wbCkKKyAgICA6IFdlYkRPTU9iamVjdCgpCisgICAgLCBtX2QobmV3
IFdlYkRPTVRlc3RPYmpQcml2YXRlKGltcGwpKQoreworfQorCitXZWJET01UZXN0T2JqOjpXZWJE
T01UZXN0T2JqKGNvbnN0IFdlYkRPTVRlc3RPYmomIGNvcHkpCisgICAgOiBXZWJET01PYmplY3Qo
KQoreworICAgIG1fZCA9IGNvcHkuaW1wbCgpID8gbmV3IFdlYkRPTVRlc3RPYmpQcml2YXRlKGNv
cHkuaW1wbCgpKSA6IDA7Cit9CisKK1dlYkNvcmU6OlRlc3RPYmoqIFdlYkRPTVRlc3RPYmo6Omlt
cGwoKSBjb25zdAoreworICAgIHJldHVybiBtX2QgPyBtX2QtPmltcGwuZ2V0KCkgOiAwOworfQor
CitXZWJET01UZXN0T2JqOjp+V2ViRE9NVGVzdE9iaigpCit7CisgICAgZGVsZXRlIG1fZDsKKyAg
ICBtX2QgPSAwOworfQorCitsb25nIFdlYkRPTVRlc3RPYmo6OnJlYWRPbmx5SW50QXR0cigpIGNv
bnN0Cit7CisgICAgaWYgKCFpbXBsKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJu
IGltcGwoKS0+cmVhZE9ubHlJbnRBdHRyKCk7Cit9CisKK1dlYkRPTVN0cmluZyBXZWJET01UZXN0
T2JqOjpyZWFkT25seVN0cmluZ0F0dHIoKSBjb25zdAoreworICAgIGlmICghaW1wbCgpKQorICAg
ICAgICByZXR1cm4gV2ViRE9NU3RyaW5nKCk7CisKKyAgICByZXR1cm4gKGNvbnN0IFdlYkNvcmU6
OlN0cmluZyYpIGltcGwoKS0+cmVhZE9ubHlTdHJpbmdBdHRyKCk7Cit9CisKK1dlYkRPTVRlc3RP
YmogV2ViRE9NVGVzdE9iajo6cmVhZE9ubHlUZXN0T2JqQXR0cigpIGNvbnN0Cit7CisgICAgaWYg
KCFpbXBsKCkpCisgICAgICAgIHJldHVybiBXZWJET01UZXN0T2JqKCk7CisKKyAgICByZXR1cm4g
dG9XZWJLaXQoV1RGOjpnZXRQdHIoaW1wbCgpLT5yZWFkT25seVRlc3RPYmpBdHRyKCkpKTsKK30K
KworbG9uZyBXZWJET01UZXN0T2JqOjppbnRBdHRyKCkgY29uc3QKK3sKKyAgICBpZiAoIWltcGwo
KSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gaW1wbCgpLT5pbnRBdHRyKCk7Cit9
CisKK3ZvaWQgV2ViRE9NVGVzdE9iajo6c2V0SW50QXR0cihjb25zdCBsb25nJiBuZXdJbnRBdHRy
KQoreworICAgIGlmICghaW1wbCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpbXBsKCktPnNl
dEludEF0dHIobmV3SW50QXR0cik7Cit9CisKK2xvbmcgbG9uZyBXZWJET01UZXN0T2JqOjpsb25n
TG9uZ0F0dHIoKSBjb25zdAoreworICAgIGlmICghaW1wbCgpKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIHJldHVybiBpbXBsKCktPmxvbmdMb25nQXR0cigpOworfQorCit2b2lkIFdlYkRPTVRl
c3RPYmo6OnNldExvbmdMb25nQXR0cihjb25zdCBsb25nIGxvbmcmIG5ld0xvbmdMb25nQXR0cikK
K3sKKyAgICBpZiAoIWltcGwoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW1wbCgpLT5zZXRM
b25nTG9uZ0F0dHIobmV3TG9uZ0xvbmdBdHRyKTsKK30KKwordW5zaWduZWQgbG9uZyBsb25nIFdl
YkRPTVRlc3RPYmo6OnVuc2lnbmVkTG9uZ0xvbmdBdHRyKCkgY29uc3QKK3sKKyAgICBpZiAoIWlt
cGwoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gaW1wbCgpLT51bnNpZ25lZExv
bmdMb25nQXR0cigpOworfQorCit2b2lkIFdlYkRPTVRlc3RPYmo6OnNldFVuc2lnbmVkTG9uZ0xv
bmdBdHRyKGNvbnN0IHVuc2lnbmVkIGxvbmcgbG9uZyYgbmV3VW5zaWduZWRMb25nTG9uZ0F0dHIp
Cit7CisgICAgaWYgKCFpbXBsKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGltcGwoKS0+c2V0
VW5zaWduZWRMb25nTG9uZ0F0dHIobmV3VW5zaWduZWRMb25nTG9uZ0F0dHIpOworfQorCitXZWJE
T01TdHJpbmcgV2ViRE9NVGVzdE9iajo6c3RyaW5nQXR0cigpIGNvbnN0Cit7CisgICAgaWYgKCFp
bXBsKCkpCisgICAgICAgIHJldHVybiBXZWJET01TdHJpbmcoKTsKKworICAgIHJldHVybiAoY29u
c3QgV2ViQ29yZTo6U3RyaW5nJikgaW1wbCgpLT5zdHJpbmdBdHRyKCk7Cit9CisKK3ZvaWQgV2Vi
RE9NVGVzdE9iajo6c2V0U3RyaW5nQXR0cihjb25zdCBXZWJET01TdHJpbmcmIG5ld1N0cmluZ0F0
dHIpCit7CisgICAgaWYgKCFpbXBsKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGltcGwoKS0+
c2V0U3RyaW5nQXR0cihuZXdTdHJpbmdBdHRyKTsKK30KKworV2ViRE9NVGVzdE9iaiBXZWJET01U
ZXN0T2JqOjp0ZXN0T2JqQXR0cigpIGNvbnN0Cit7CisgICAgaWYgKCFpbXBsKCkpCisgICAgICAg
IHJldHVybiBXZWJET01UZXN0T2JqKCk7CisKKyAgICByZXR1cm4gdG9XZWJLaXQoV1RGOjpnZXRQ
dHIoaW1wbCgpLT50ZXN0T2JqQXR0cigpKSk7Cit9CisKK3ZvaWQgV2ViRE9NVGVzdE9iajo6c2V0
VGVzdE9iakF0dHIoY29uc3QgV2ViRE9NVGVzdE9iaiYgbmV3VGVzdE9iakF0dHIpCit7CisgICAg
aWYgKCFpbXBsKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGltcGwoKS0+c2V0VGVzdE9iakF0
dHIodG9XZWJDb3JlKG5ld1Rlc3RPYmpBdHRyKSk7Cit9CisKK2xvbmcgV2ViRE9NVGVzdE9iajo6
YXR0cldpdGhFeGNlcHRpb24oKSBjb25zdAoreworICAgIGlmICghaW1wbCgpKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIHJldHVybiBpbXBsKCktPmF0dHJXaXRoRXhjZXB0aW9uKCk7Cit9CisK
K3ZvaWQgV2ViRE9NVGVzdE9iajo6c2V0QXR0cldpdGhFeGNlcHRpb24oY29uc3QgbG9uZyYgbmV3
QXR0cldpdGhFeGNlcHRpb24pCit7CisgICAgaWYgKCFpbXBsKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIGltcGwoKS0+c2V0QXR0cldpdGhFeGNlcHRpb24obmV3QXR0cldpdGhFeGNlcHRpb24p
OworfQorCitsb25nIFdlYkRPTVRlc3RPYmo6OmF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKCkgY29u
c3QKK3sKKyAgICBpZiAoIWltcGwoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4g
aW1wbCgpLT5hdHRyV2l0aFNldHRlckV4Y2VwdGlvbigpOworfQorCit2b2lkIFdlYkRPTVRlc3RP
Ymo6OnNldEF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKGNvbnN0IGxvbmcmIG5ld0F0dHJXaXRoU2V0
dGVyRXhjZXB0aW9uKQoreworICAgIGlmICghaW1wbCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBpbXBsKCktPnNldEF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKG5ld0F0dHJXaXRoU2V0dGVyRXhj
ZXB0aW9uKTsKK30KKworbG9uZyBXZWJET01UZXN0T2JqOjphdHRyV2l0aEdldHRlckV4Y2VwdGlv
bigpIGNvbnN0Cit7CisgICAgaWYgKCFpbXBsKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAg
cmV0dXJuIGltcGwoKS0+YXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oKTsKK30KKwordm9pZCBXZWJE
T01UZXN0T2JqOjpzZXRBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihjb25zdCBsb25nJiBuZXdBdHRy
V2l0aEdldHRlckV4Y2VwdGlvbikKK3sKKyAgICBpZiAoIWltcGwoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaW1wbCgpLT5zZXRBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihuZXdBdHRyV2l0aEdl
dHRlckV4Y2VwdGlvbik7Cit9CisKK3ZvaWQgV2ViRE9NVGVzdE9iajo6dm9pZE1ldGhvZCgpCit7
CisgICAgaWYgKCFpbXBsKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGltcGwoKS0+dm9pZE1l
dGhvZCgpOworfQorCit2b2lkIFdlYkRPTVRlc3RPYmo6OnZvaWRNZXRob2RXaXRoQXJncyhjb25z
dCBsb25nJiBpbnRBcmcsIGNvbnN0IFdlYkRPTVN0cmluZyYgc3RyQXJnLCBjb25zdCBXZWJET01U
ZXN0T2JqJiBvYmpBcmcpCit7CisgICAgaWYgKCFpbXBsKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGltcGwoKS0+dm9pZE1ldGhvZFdpdGhBcmdzKGludEFyZywgc3RyQXJnLCB0b1dlYkNvcmUo
b2JqQXJnKSk7Cit9CisKK2xvbmcgV2ViRE9NVGVzdE9iajo6aW50TWV0aG9kKCkKK3sKKyAgICBp
ZiAoIWltcGwoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gaW1wbCgpLT5pbnRN
ZXRob2QoKTsKK30KKworbG9uZyBXZWJET01UZXN0T2JqOjppbnRNZXRob2RXaXRoQXJncyhjb25z
dCBsb25nJiBpbnRBcmcsIGNvbnN0IFdlYkRPTVN0cmluZyYgc3RyQXJnLCBjb25zdCBXZWJET01U
ZXN0T2JqJiBvYmpBcmcpCit7CisgICAgaWYgKCFpbXBsKCkpCisgICAgICAgIHJldHVybiAwOwor
CisgICAgcmV0dXJuIGltcGwoKS0+aW50TWV0aG9kV2l0aEFyZ3MoaW50QXJnLCBzdHJBcmcsIHRv
V2ViQ29yZShvYmpBcmcpKTsKK30KKworV2ViRE9NVGVzdE9iaiBXZWJET01UZXN0T2JqOjpvYmpN
ZXRob2QoKQoreworICAgIGlmICghaW1wbCgpKQorICAgICAgICByZXR1cm4gV2ViRE9NVGVzdE9i
aigpOworCisgICAgcmV0dXJuIHRvV2ViS2l0KFdURjo6Z2V0UHRyKGltcGwoKS0+b2JqTWV0aG9k
KCkpKTsKK30KKworV2ViRE9NVGVzdE9iaiBXZWJET01UZXN0T2JqOjpvYmpNZXRob2RXaXRoQXJn
cyhjb25zdCBsb25nJiBpbnRBcmcsIGNvbnN0IFdlYkRPTVN0cmluZyYgc3RyQXJnLCBjb25zdCBX
ZWJET01UZXN0T2JqJiBvYmpBcmcpCit7CisgICAgaWYgKCFpbXBsKCkpCisgICAgICAgIHJldHVy
biBXZWJET01UZXN0T2JqKCk7CisKKyAgICByZXR1cm4gdG9XZWJLaXQoV1RGOjpnZXRQdHIoaW1w
bCgpLT5vYmpNZXRob2RXaXRoQXJncyhpbnRBcmcsIHN0ckFyZywgdG9XZWJDb3JlKG9iakFyZykp
KSk7Cit9CisKK3ZvaWQgV2ViRE9NVGVzdE9iajo6c2VyaWFsaXplZFZhbHVlKGNvbnN0IFdlYkRP
TVN0cmluZyYgc2VyaWFsaXplZEFyZykKK3sKKyAgICBpZiAoIWltcGwoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaW1wbCgpLT5zZXJpYWxpemVkVmFsdWUoV2ViQ29yZTo6U2VyaWFsaXplZFNj
cmlwdFZhbHVlOjpjcmVhdGUoV2ViQ29yZTo6U3RyaW5nKHNlcmlhbGl6ZWRBcmcpKSk7Cit9CisK
K3ZvaWQgV2ViRE9NVGVzdE9iajo6bWV0aG9kV2l0aEV4Y2VwdGlvbigpCit7CisgICAgaWYgKCFp
bXBsKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMg
PSAwOworICAgIGltcGwoKS0+bWV0aG9kV2l0aEV4Y2VwdGlvbihlYyk7CisgICAgd2ViRE9NUmFp
c2VFcnJvcihzdGF0aWNfY2FzdDxXZWJET01FeGNlcHRpb25Db2RlPihlYykpOworfQorCit2b2lk
IFdlYkRPTVRlc3RPYmo6OmFkZEV2ZW50TGlzdGVuZXIoY29uc3QgV2ViRE9NU3RyaW5nJiB0eXBl
LCBjb25zdCBXZWJET01FdmVudExpc3RlbmVyJiBsaXN0ZW5lciwgY29uc3QgYm9vbCYgdXNlQ2Fw
dHVyZSkKK3sKKyAgICBpZiAoIWltcGwoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW1wbCgp
LT5hZGRFdmVudExpc3RlbmVyKHR5cGUsIHRvV2ViQ29yZShsaXN0ZW5lciksIHVzZUNhcHR1cmUp
OworfQorCit2b2lkIFdlYkRPTVRlc3RPYmo6OnJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgV2Vi
RE9NU3RyaW5nJiB0eXBlLCBjb25zdCBXZWJET01FdmVudExpc3RlbmVyJiBsaXN0ZW5lciwgY29u
c3QgYm9vbCYgdXNlQ2FwdHVyZSkKK3sKKyAgICBpZiAoIWltcGwoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaW1wbCgpLT5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIHRvV2ViQ29yZShsaXN0
ZW5lciksIHVzZUNhcHR1cmUpOworfQorCit2b2lkIFdlYkRPTVRlc3RPYmo6OndpdGhEeW5hbWlj
RnJhbWUoKQoreworICAgIGlmICghaW1wbCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpbXBs
KCktPndpdGhEeW5hbWljRnJhbWUoKTsKK30KKwordm9pZCBXZWJET01UZXN0T2JqOjp3aXRoRHlu
YW1pY0ZyYW1lQW5kQXJnKGNvbnN0IGxvbmcmIGludEFyZykKK3sKKyAgICBpZiAoIWltcGwoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaW1wbCgpLT53aXRoRHluYW1pY0ZyYW1lQW5kQXJnKGlu
dEFyZyk7Cit9CisKK3ZvaWQgV2ViRE9NVGVzdE9iajo6d2l0aER5bmFtaWNGcmFtZUFuZE9wdGlv
bmFsQXJnKGNvbnN0IGxvbmcmIGludEFyZywgY29uc3QgbG9uZyYgb3B0aW9uYWxBcmcpCit7Cisg
ICAgaWYgKCFpbXBsKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGltcGwoKS0+d2l0aER5bmFt
aWNGcmFtZUFuZE9wdGlvbmFsQXJnKGludEFyZywgb3B0aW9uYWxBcmcpOworfQorCit2b2lkIFdl
YkRPTVRlc3RPYmo6OndpdGhTY3JpcHRTdGF0ZVZvaWQoKQoreworICAgIGlmICghaW1wbCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpbXBsKCktPndpdGhTY3JpcHRTdGF0ZVZvaWQoKTsKK30K
KworV2ViRE9NVGVzdE9iaiBXZWJET01UZXN0T2JqOjp3aXRoU2NyaXB0U3RhdGVPYmooKQorewor
ICAgIGlmICghaW1wbCgpKQorICAgICAgICByZXR1cm4gV2ViRE9NVGVzdE9iaigpOworCisgICAg
cmV0dXJuIHRvV2ViS2l0KFdURjo6Z2V0UHRyKGltcGwoKS0+d2l0aFNjcmlwdFN0YXRlT2JqKCkp
KTsKK30KKwordm9pZCBXZWJET01UZXN0T2JqOjp3aXRoU2NyaXB0U3RhdGVWb2lkRXhjZXB0aW9u
KCkKK3sKKyAgICBpZiAoIWltcGwoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2ViQ29yZTo6
RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaW1wbCgpLT53aXRoU2NyaXB0U3RhdGVWb2lkRXhj
ZXB0aW9uKGVjKTsKKyAgICB3ZWJET01SYWlzZUVycm9yKHN0YXRpY19jYXN0PFdlYkRPTUV4Y2Vw
dGlvbkNvZGU+KGVjKSk7Cit9CisKK1dlYkRPTVRlc3RPYmogV2ViRE9NVGVzdE9iajo6d2l0aFNj
cmlwdFN0YXRlT2JqRXhjZXB0aW9uKCkKK3sKKyAgICBpZiAoIWltcGwoKSkKKyAgICAgICAgcmV0
dXJuIFdlYkRPTVRlc3RPYmooKTsKKworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAw
OworICAgIFdlYkRPTVRlc3RPYmogcmVzdWx0ID0gdG9XZWJLaXQoV1RGOjpnZXRQdHIoaW1wbCgp
LT53aXRoU2NyaXB0U3RhdGVPYmpFeGNlcHRpb24oZWMpKSk7CisgICAgd2ViRE9NUmFpc2VFcnJv
cihzdGF0aWNfY2FzdDxXZWJET01FeGNlcHRpb25Db2RlPihlYykpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3ZvaWQgV2ViRE9NVGVzdE9iajo6bWV0aG9kV2l0aE9wdGlvbmFsQXJnKGNvbnN0
IGxvbmcmIG9wdCkKK3sKKyAgICBpZiAoIWltcGwoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aW1wbCgpLT5tZXRob2RXaXRoT3B0aW9uYWxBcmcob3B0KTsKK30KKwordm9pZCBXZWJET01UZXN0
T2JqOjptZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRPcHRpb25hbEFyZyhjb25zdCBsb25nJiBu
b25PcHQsIGNvbnN0IGxvbmcmIG9wdCkKK3sKKyAgICBpZiAoIWltcGwoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaW1wbCgpLT5tZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRPcHRpb25hbEFy
Zyhub25PcHQsIG9wdCk7Cit9CisKK3ZvaWQgV2ViRE9NVGVzdE9iajo6bWV0aG9kV2l0aE5vbk9w
dGlvbmFsQXJnQW5kVHdvT3B0aW9uYWxBcmdzKGNvbnN0IGxvbmcmIG5vbk9wdCwgY29uc3QgbG9u
ZyYgb3B0MSwgY29uc3QgbG9uZyYgb3B0MikKK3sKKyAgICBpZiAoIWltcGwoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaW1wbCgpLT5tZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRUd29PcHRp
b25hbEFyZ3Mobm9uT3B0LCBvcHQxLCBvcHQyKTsKK30KKworV2ViQ29yZTo6VGVzdE9iaiogdG9X
ZWJDb3JlKGNvbnN0IFdlYkRPTVRlc3RPYmomIHdyYXBwZXIpCit7CisgICAgcmV0dXJuIHdyYXBw
ZXIuaW1wbCgpOworfQorCitXZWJET01UZXN0T2JqIHRvV2ViS2l0KFdlYkNvcmU6OlRlc3RPYmoq
IHZhbHVlKQoreworICAgIHsKKyAgICAgICAgV0VCRE9NX0FTU0VSVF9NQUlOX1RIUkVBRCgpOwor
ICAgICAgICBXZWJDb3JlVGhyZWFkVmlvbGF0aW9uQ2hlY2tSb3VuZE9uZSgpOworICAgIH0KKwor
ICAgIHJldHVybiBXZWJET01UZXN0T2JqKHZhbHVlKTsKK30KSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RPYmouaAkocmV2aXNpb24gMCkK
KysrIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJj
aCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIDxz
YW0ud2VpbmlnQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9u
IExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJET01UZXN0T2Jq
X2gKKyNkZWZpbmUgV2ViRE9NVGVzdE9ial9oCisKKyNpbmNsdWRlIDxXZWJET01PYmplY3QuaD4K
KyNpbmNsdWRlIDxXZWJET01TdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3Mg
VGVzdE9iajsKK307CisKK2NsYXNzIFdlYkRPTUV2ZW50TGlzdGVuZXI7CitjbGFzcyBXZWJET01T
dHJpbmc7CitjbGFzcyBXZWJET01UZXN0T2JqOworCitjbGFzcyBXZWJET01UZXN0T2JqIDogcHVi
bGljIFdlYkRPTU9iamVjdCB7CitwdWJsaWM6CisgICAgV2ViRE9NVGVzdE9iaigpOworICAgIGV4
cGxpY2l0IFdlYkRPTVRlc3RPYmooV2ViQ29yZTo6VGVzdE9iaiopOworICAgIFdlYkRPTVRlc3RP
YmooY29uc3QgV2ViRE9NVGVzdE9iaiYpOworICAgIH5XZWJET01UZXN0T2JqKCk7CisKKyAgICBs
b25nIHJlYWRPbmx5SW50QXR0cigpIGNvbnN0OworICAgIFdlYkRPTVN0cmluZyByZWFkT25seVN0
cmluZ0F0dHIoKSBjb25zdDsKKyAgICBXZWJET01UZXN0T2JqIHJlYWRPbmx5VGVzdE9iakF0dHIo
KSBjb25zdDsKKyAgICBsb25nIGludEF0dHIoKSBjb25zdDsKKyAgICB2b2lkIHNldEludEF0dHIo
Y29uc3QgbG9uZyYpOworICAgIGxvbmcgbG9uZyBsb25nTG9uZ0F0dHIoKSBjb25zdDsKKyAgICB2
b2lkIHNldExvbmdMb25nQXR0cihjb25zdCBsb25nIGxvbmcmKTsKKyAgICB1bnNpZ25lZCBsb25n
IGxvbmcgdW5zaWduZWRMb25nTG9uZ0F0dHIoKSBjb25zdDsKKyAgICB2b2lkIHNldFVuc2lnbmVk
TG9uZ0xvbmdBdHRyKGNvbnN0IHVuc2lnbmVkIGxvbmcgbG9uZyYpOworICAgIFdlYkRPTVN0cmlu
ZyBzdHJpbmdBdHRyKCkgY29uc3Q7CisgICAgdm9pZCBzZXRTdHJpbmdBdHRyKGNvbnN0IFdlYkRP
TVN0cmluZyYpOworICAgIFdlYkRPTVRlc3RPYmogdGVzdE9iakF0dHIoKSBjb25zdDsKKyAgICB2
b2lkIHNldFRlc3RPYmpBdHRyKGNvbnN0IFdlYkRPTVRlc3RPYmomKTsKKyAgICBsb25nIGF0dHJX
aXRoRXhjZXB0aW9uKCkgY29uc3Q7CisgICAgdm9pZCBzZXRBdHRyV2l0aEV4Y2VwdGlvbihjb25z
dCBsb25nJik7CisgICAgbG9uZyBhdHRyV2l0aFNldHRlckV4Y2VwdGlvbigpIGNvbnN0OworICAg
IHZvaWQgc2V0QXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oY29uc3QgbG9uZyYpOworICAgIGxvbmcg
YXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oKSBjb25zdDsKKyAgICB2b2lkIHNldEF0dHJXaXRoR2V0
dGVyRXhjZXB0aW9uKGNvbnN0IGxvbmcmKTsKKyAgICBsb25nIGN1c3RvbUF0dHIoKSBjb25zdDsK
KyAgICB2b2lkIHNldEN1c3RvbUF0dHIoY29uc3QgbG9uZyYpOworCisgICAgdm9pZCB2b2lkTWV0
aG9kKCk7CisgICAgdm9pZCB2b2lkTWV0aG9kV2l0aEFyZ3MoY29uc3QgbG9uZyYgaW50QXJnLCBj
b25zdCBXZWJET01TdHJpbmcmIHN0ckFyZywgY29uc3QgV2ViRE9NVGVzdE9iaiYgb2JqQXJnKTsK
KyAgICBsb25nIGludE1ldGhvZCgpOworICAgIGxvbmcgaW50TWV0aG9kV2l0aEFyZ3MoY29uc3Qg
bG9uZyYgaW50QXJnLCBjb25zdCBXZWJET01TdHJpbmcmIHN0ckFyZywgY29uc3QgV2ViRE9NVGVz
dE9iaiYgb2JqQXJnKTsKKyAgICBXZWJET01UZXN0T2JqIG9iak1ldGhvZCgpOworICAgIFdlYkRP
TVRlc3RPYmogb2JqTWV0aG9kV2l0aEFyZ3MoY29uc3QgbG9uZyYgaW50QXJnLCBjb25zdCBXZWJE
T01TdHJpbmcmIHN0ckFyZywgY29uc3QgV2ViRE9NVGVzdE9iaiYgb2JqQXJnKTsKKyAgICB2b2lk
IHNlcmlhbGl6ZWRWYWx1ZShjb25zdCBXZWJET01TdHJpbmcmIHNlcmlhbGl6ZWRBcmcpOworICAg
IHZvaWQgbWV0aG9kV2l0aEV4Y2VwdGlvbigpOworICAgIHZvaWQgY3VzdG9tTWV0aG9kKCk7Cisg
ICAgdm9pZCBjdXN0b21NZXRob2RXaXRoQXJncyhjb25zdCBsb25nJiBpbnRBcmcsIGNvbnN0IFdl
YkRPTVN0cmluZyYgc3RyQXJnLCBjb25zdCBXZWJET01UZXN0T2JqJiBvYmpBcmcpOworICAgIHZv
aWQgYWRkRXZlbnRMaXN0ZW5lcihjb25zdCBXZWJET01TdHJpbmcmIHR5cGUsIGNvbnN0IFdlYkRP
TUV2ZW50TGlzdGVuZXImIGxpc3RlbmVyLCBjb25zdCBib29sJiB1c2VDYXB0dXJlKTsKKyAgICB2
b2lkIHJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgV2ViRE9NU3RyaW5nJiB0eXBlLCBjb25zdCBX
ZWJET01FdmVudExpc3RlbmVyJiBsaXN0ZW5lciwgY29uc3QgYm9vbCYgdXNlQ2FwdHVyZSk7Cisg
ICAgdm9pZCB3aXRoRHluYW1pY0ZyYW1lKCk7CisgICAgdm9pZCB3aXRoRHluYW1pY0ZyYW1lQW5k
QXJnKGNvbnN0IGxvbmcmIGludEFyZyk7CisgICAgdm9pZCB3aXRoRHluYW1pY0ZyYW1lQW5kT3B0
aW9uYWxBcmcoY29uc3QgbG9uZyYgaW50QXJnLCBjb25zdCBsb25nJiBvcHRpb25hbEFyZyk7Cisg
ICAgdm9pZCB3aXRoRHluYW1pY0ZyYW1lQW5kVXNlckdlc3R1cmUoY29uc3QgbG9uZyYgaW50QXJn
KTsKKyAgICB2b2lkIHdpdGhEeW5hbWljRnJhbWVBbmRVc2VyR2VzdHVyZUFTQUQoY29uc3QgbG9u
ZyYgaW50QXJnLCBjb25zdCBsb25nJiBvcHRpb25hbEFyZyk7CisgICAgdm9pZCB3aXRoU2NyaXB0
U3RhdGVWb2lkKCk7CisgICAgV2ViRE9NVGVzdE9iaiB3aXRoU2NyaXB0U3RhdGVPYmooKTsKKyAg
ICB2b2lkIHdpdGhTY3JpcHRTdGF0ZVZvaWRFeGNlcHRpb24oKTsKKyAgICBXZWJET01UZXN0T2Jq
IHdpdGhTY3JpcHRTdGF0ZU9iakV4Y2VwdGlvbigpOworICAgIHZvaWQgbWV0aG9kV2l0aE9wdGlv
bmFsQXJnKGNvbnN0IGxvbmcmIG9wdCk7CisgICAgdm9pZCBtZXRob2RXaXRoTm9uT3B0aW9uYWxB
cmdBbmRPcHRpb25hbEFyZyhjb25zdCBsb25nJiBub25PcHQsIGNvbnN0IGxvbmcmIG9wdCk7Cisg
ICAgdm9pZCBtZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRUd29PcHRpb25hbEFyZ3MoY29uc3Qg
bG9uZyYgbm9uT3B0LCBjb25zdCBsb25nJiBvcHQxLCBjb25zdCBsb25nJiBvcHQyKTsKKworICAg
IFdlYkNvcmU6OlRlc3RPYmoqIGltcGwoKSBjb25zdDsKKworcHJvdGVjdGVkOgorICAgIHN0cnVj
dCBXZWJET01UZXN0T2JqUHJpdmF0ZTsKKyAgICBXZWJET01UZXN0T2JqUHJpdmF0ZSogbV9kOwor
fTsKKworV2ViQ29yZTo6VGVzdE9iaiogdG9XZWJDb3JlKGNvbnN0IFdlYkRPTVRlc3RPYmomKTsK
K1dlYkRPTVRlc3RPYmogdG9XZWJLaXQoV2ViQ29yZTo6VGVzdE9iaiopOworCisjZW5kaWYKSW5k
ZXg6IFdlYkNvcmUvY3NzL1N0eWxlU2hlZXQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3Nz
L1N0eWxlU2hlZXQuaWRsCShyZXZpc2lvbiA1ODU3MSkKKysrIFdlYkNvcmUvY3NzL1N0eWxlU2hl
ZXQuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMywxMiBAQCBtb2R1bGUgc3R5bGVzaGVl
dHMgewogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgW0NvbnZlcnROdWxsU3RyaW5nVG89TnVs
bF0gRE9NU3RyaW5nICAgICAgICBocmVmOwogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgW0Nv
bnZlcnROdWxsU3RyaW5nVG89TnVsbF0gRE9NU3RyaW5nICAgICAgICB0aXRsZTsKICAgICAgICAg
cmVhZG9ubHkgYXR0cmlidXRlIE1lZGlhTGlzdCAgICAgICAgbWVkaWE7CisKKyNpZiBkZWZpbmVk
KExBTkdVQUdFX0NQUCkgJiYgTEFOR1VBR0VfQ1BQCisgICAgICAgIC8vIEV4dHJhIFdlYkNvcmUg
bWV0aG9kcyBleHBvc2VkIHRvIGFsbG93ZSBjb21waWxlLXRpbWUgY2FzdGluZyBpbiBDKysKKyAg
ICAgICAgYm9vbGVhbiBpc0NTU1N0eWxlU2hlZXQoKTsKKyNlbmRpZgorCiAgICAgfTsKIAogfQpJ
bmRleDogV2ViQ29yZS9kb20vQ3VzdG9tRXZlbnQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
ZG9tL0N1c3RvbUV2ZW50LmlkbAkocmV2aXNpb24gNTg1NzEpCisrKyBXZWJDb3JlL2RvbS9DdXN0
b21FdmVudC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAKIAogbW9kdWxlIGV2
ZW50cyB7CiAKKyNpZiAhZGVmaW5lZChMQU5HVUFHRV9DUFApIHx8ICFMQU5HVUFHRV9DUFAKICAg
ICAvLyBJbnRyb2R1Y2VkIGluIERPTSBMZXZlbCAzOgogICAgIGludGVyZmFjZSBDdXN0b21FdmVu
dCA6IEV2ZW50IHsKIApAQCAtMzUsNSArMzYsNiBAQCBtb2R1bGUgZXZlbnRzIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbiBib29sZWFuIGNhbmNlbGFibGVBcmcsIAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGluIERPTU9iamVjdCBkZXRhaWxBcmcpOwogICAgIH07CisjZW5k
aWYKIAogfQpJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuaWRsCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvZG9tL0RvY3VtZW50LmlkbAkocmV2aXNpb24gNTg1NzEpCisrKyBXZWJDb3JlL2RvbS9E
b2N1bWVudC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTIxOSw5ICsyMTksMTEgQEAgbW9kdWxlIGNv
cmUgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK
ICNlbmRpZgogCisjaWYgIWRlZmluZWQoTEFOR1VBR0VfQ1BQKSB8fCAhTEFOR1VBR0VfQ1BQCiAj
aWYgIWRlZmluZWQoTEFOR1VBR0VfT0JKRUNUSVZFX0MpIHx8ICFMQU5HVUFHRV9PQkpFQ1RJVkVf
QwogICAgICAgICBbVjhDdXN0b21dIERPTU9iamVjdCBnZXRDU1NDYW52YXNDb250ZXh0KGluIERP
TVN0cmluZyBjb250ZXh0SWQsIGluIERPTVN0cmluZyBuYW1lLCBpbiBsb25nIHdpZHRoLCBpbiBs
b25nIGhlaWdodCk7CiAjZW5kaWYKKyNlbmRpZgogCiAgICAgICAgIC8vIEhUTUwgNQogICAgICAg
ICBOb2RlTGlzdCBnZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGluIERPTVN0cmluZyB0YWduYW1lKTsK
QEAgLTMxMSw2ICszMTMsMTIgQEAgbW9kdWxlIGNvcmUgewogICAgICAgICBhdHRyaWJ1dGUgW0Rv
bnRFbnVtLENvbmRpdGlvbmFsPVRPVUNIX0VWRU5UUyxFbmFibGVkQXRSdW50aW1lXSBFdmVudExp
c3RlbmVyIG9udG91Y2hlbmQ7CiAgICAgICAgIGF0dHJpYnV0ZSBbRG9udEVudW0sQ29uZGl0aW9u
YWw9VE9VQ0hfRVZFTlRTLEVuYWJsZWRBdFJ1bnRpbWVdIEV2ZW50TGlzdGVuZXIgb250b3VjaGNh
bmNlbDsKICNlbmRpZgorCisjaWYgZGVmaW5lZChMQU5HVUFHRV9DUFApICYmIExBTkdVQUdFX0NQ
UAorICAgICAgICAvLyBFeHRyYSBXZWJDb3JlIG1ldGhvZHMgZXhwb3NlZCB0byBhbGxvdyBjb21w
aWxlLXRpbWUgY2FzdGluZyBpbiBDKysKKyAgICAgICAgYm9vbGVhbiBpc0hUTUxEb2N1bWVudCgp
OworI2VuZGlmCisKICAgICB9OwogCiB9CkluZGV4OiBXZWJDb3JlL2RvbS9FbGVtZW50LmlkbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9FbGVtZW50LmlkbAkocmV2aXNpb24gNTg1NzEpCisr
KyBXZWJDb3JlL2RvbS9FbGVtZW50LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBA
QCBtb2R1bGUgY29yZSB7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBbQ29udmVydE51bGxT
dHJpbmdUbz1OdWxsXSBET01TdHJpbmcgdGFnTmFtZTsKIAogICAgICAgICBbQ29udmVydE51bGxT
dHJpbmdUbz1OdWxsXSBET01TdHJpbmcgZ2V0QXR0cmlidXRlKGluIERPTVN0cmluZyBuYW1lKTsK
LSAgICAgICAgW09sZFN0eWxlT2JqQywgQ3VzdG9tXSB2b2lkIHNldEF0dHJpYnV0ZShpbiBET01T
dHJpbmcgbmFtZSwKKyAgICAgICAgW09sZFN0eWxlT2JqQywgQ3VzdG9tLCBOb0NQUEN1c3RvbV0g
dm9pZCBzZXRBdHRyaWJ1dGUoaW4gRE9NU3RyaW5nIG5hbWUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gRE9NU3RyaW5nIHZhbHVlKQogICAgICAg
ICAgICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7CiAgICAgICAgIHZvaWQgcmVtb3ZlQXR0cmlidXRl
KGluIERPTVN0cmluZyBuYW1lKQpAQCAtNDcsNyArNDcsNyBAQCBtb2R1bGUgY29yZSB7CiAKICAg
ICAgICAgW09sZFN0eWxlT2JqQ10gRE9NU3RyaW5nIGdldEF0dHJpYnV0ZU5TKGluIFtDb252ZXJ0
TnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIG5hbWVzcGFjZVVSSSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIERPTVN0cmluZyBsb2NhbE5hbWUp
OwotICAgICAgICBbT2xkU3R5bGVPYmpDLCBDdXN0b21dIHZvaWQgc2V0QXR0cmlidXRlTlMoaW4g
W0NvbnZlcnROdWxsVG9OdWxsU3RyaW5nXSBET01TdHJpbmcgbmFtZXNwYWNlVVJJLAorICAgICAg
ICBbT2xkU3R5bGVPYmpDLCBDdXN0b20sIE5vQ1BQQ3VzdG9tXSB2b2lkIHNldEF0dHJpYnV0ZU5T
KGluIFtDb252ZXJ0TnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIG5hbWVzcGFjZVVSSSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIERPTVN0
cmluZyBxdWFsaWZpZWROYW1lLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGluIERPTVN0cmluZyB2YWx1ZSkKICAgICAgICAgICAgIHJhaXNlcyhE
T01FeGNlcHRpb24pOwpJbmRleDogV2ViQ29yZS9kb20vRXZlbnQuaWRsCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvZG9tL0V2ZW50LmlkbAkocmV2aXNpb24gNTg1NzEpCisrKyBXZWJDb3JlL2RvbS9F
dmVudC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTc5LDYgKzc5LDEyIEBAIG1vZHVsZSBldmVudHMg
ewogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgW0N1c3RvbV0gQ2xpcGJvYXJkICAgICAgICBj
bGlwYm9hcmREYXRhOwogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKExBTkdVQUdFX0NQUCkgJiYgTEFO
R1VBR0VfQ1BQCisgICAgICAgIC8vIEV4dHJhIFdlYkNvcmUgbWV0aG9kcyBleHBvc2VkIHRvIGFs
bG93IGNvbXBpbGUtdGltZSBjYXN0aW5nIGluIEMrKworICAgICAgICBib29sZWFuIGlzTXV0YXRp
b25FdmVudCgpOworICAgICAgICBib29sZWFuIGlzTW91c2VFdmVudCgpOworICAgICAgICBib29s
ZWFuIGlzVUlFdmVudCgpOworI2VuZGlmCiAgICAgfTsKIAogfQpJbmRleDogV2ViQ29yZS9kb20v
RXZlbnRMaXN0ZW5lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0V2ZW50TGlzdGVuZXIu
aAkocmV2aXNpb24gNTg1NzEpCisrKyBXZWJDb3JlL2RvbS9FdmVudExpc3RlbmVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM2LDEzICszNiwxNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBj
bGFzcyBFdmVudExpc3RlbmVyIDogcHVibGljIFJlZkNvdW50ZWQ8RXZlbnRMaXN0ZW5lcj4gewog
ICAgIHB1YmxpYzoKLSAgICAgICAgZW51bSBUeXBlIHsgSlNFdmVudExpc3RlbmVyVHlwZSwgCi0g
ICAgICAgICAgICAgICAgICAgIEltYWdlRXZlbnRMaXN0ZW5lclR5cGUsIAotICAgICAgICAgICAg
ICAgICAgICBJbnNwZWN0b3JET01BZ2VudFR5cGUsCi0gICAgICAgICAgICAgICAgICAgIEluc3Bl
Y3RvckRPTVN0b3JhZ2VSZXNvdXJjZVR5cGUsCi0gICAgICAgICAgICAgICAgICAgIE9iakNFdmVu
dExpc3RlbmVyVHlwZSwgCi0gICAgICAgICAgICAgICAgICAgIENvbmRpdGlvbkV2ZW50TGlzdGVu
ZXJUeXBlIH07Ci0gICAgICAgICAgICAgICAgICAgIAorICAgICAgICBlbnVtIFR5cGUgeworICAg
ICAgICAgICAgSlNFdmVudExpc3RlbmVyVHlwZSwgCisgICAgICAgICAgICBJbWFnZUV2ZW50TGlz
dGVuZXJUeXBlLCAKKyAgICAgICAgICAgIEluc3BlY3RvckRPTUFnZW50VHlwZSwKKyAgICAgICAg
ICAgIEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZVR5cGUsCisgICAgICAgICAgICBDUFBFdmVu
dExpc3RlbmVyVHlwZSwKKyAgICAgICAgICAgIE9iakNFdmVudExpc3RlbmVyVHlwZSwgCisgICAg
ICAgICAgICBDb25kaXRpb25FdmVudExpc3RlbmVyVHlwZQorICAgICAgICB9OworCiAgICAgICAg
IHZpcnR1YWwgfkV2ZW50TGlzdGVuZXIoKSB7IH0KICAgICAgICAgdmlydHVhbCBib29sIG9wZXJh
dG9yPT0oY29uc3QgRXZlbnRMaXN0ZW5lciYpID0gMDsKICAgICAgICAgdmlydHVhbCB2b2lkIGhh
bmRsZUV2ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBFdmVudCopID0gMDsKSW5kZXg6IFdl
YkNvcmUvZG9tL05vZGUuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL05vZGUuaWRsCShy
ZXZpc2lvbiA1ODU3MSkKKysrIFdlYkNvcmUvZG9tL05vZGUuaWRsCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzQsNiArMTM0LDcgQEAgbW9kdWxlIGNvcmUgewogCiAjaWYgIWRlZmluZWQoTEFOR1VBR0Vf
T0JKRUNUSVZFX0MpIHx8ICFMQU5HVUFHRV9PQkpFQ1RJVkVfQwogI2lmICFkZWZpbmVkKExBTkdV
QUdFX0dPQkpFQ1QpIHx8ICFMQU5HVUFHRV9HT0JKRUNUCisjaWYgIWRlZmluZWQoTEFOR1VBR0Vf
Q1BQKSB8fCAhTEFOR1VBR0VfQ1BQCiAgICAgICAgIHZvaWQgYWRkRXZlbnRMaXN0ZW5lcihpbiBE
T01TdHJpbmcgdHlwZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBFdmVudExp
c3RlbmVyIGxpc3RlbmVyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGJvb2xl
YW4gdXNlQ2FwdHVyZSk7CkBAIC0xNDQsNiArMTQ1LDE5IEBAIG1vZHVsZSBjb3JlIHsKICAgICAg
ICAgICAgIHJhaXNlcyhFdmVudEV4Y2VwdGlvbik7CiAjZW5kaWYKICNlbmRpZgorI2VuZGlmCisK
KyNpZiBkZWZpbmVkKExBTkdVQUdFX0NQUCkgJiYgTEFOR1VBR0VfQ1BQCisgICAgICAgIFtDdXN0
b21dIHZvaWQgYWRkRXZlbnRMaXN0ZW5lcihpbiBET01TdHJpbmcgdHlwZSwgCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBFdmVudExpc3RlbmVyIGxpc3RlbmVy
LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGJvb2xlYW4g
dXNlQ2FwdHVyZSk7CisgICAgICAgIFtDdXN0b21dIHZvaWQgcmVtb3ZlRXZlbnRMaXN0ZW5lcihp
biBET01TdHJpbmcgdHlwZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbiBFdmVudExpc3RlbmVyIGxpc3RlbmVyLCAKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGluIGJvb2xlYW4gdXNlQ2FwdHVyZSk7CisgICAgICAg
IGJvb2xlYW4gZGlzcGF0Y2hFdmVudChpbiBFdmVudCBldmVudCkKKyAgICAgICAgICAgIHJhaXNl
cyhFdmVudEV4Y2VwdGlvbik7CisjZW5kaWYKKwogICAgIH07CiAKIH0KSW5kZXg6IFdlYkNvcmUv
ZG9tL1BvcFN0YXRlRXZlbnQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1BvcFN0YXRl
RXZlbnQuaWRsCShyZXZpc2lvbiA1ODU3MSkKKysrIFdlYkNvcmUvZG9tL1BvcFN0YXRlRXZlbnQu
aWRsCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAKIG1vZHVsZSBldmVudHMgewog
CisjaWYgIWRlZmluZWQoTEFOR1VBR0VfQ1BQKSB8fCAhTEFOR1VBR0VfQ1BQCiAgICAgaW50ZXJm
YWNlIFBvcFN0YXRlRXZlbnQgOiBFdmVudCB7CiAgICAgICAgIHZvaWQgaW5pdFBvcFN0YXRlRXZl
bnQoaW4gRE9NU3RyaW5nIHR5cGVBcmcsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGluIGJvb2xlYW4gY2FuQnViYmxlQXJnLCAKQEAgLTM0LDUgKzM1LDYgQEAgbW9kdWxlIGV2ZW50
cyB7CiAKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFtWOEN1c3RvbUdldHRlcl0gYW55IHN0
YXRlOwogICAgIH07CisjZW5kaWYKIAogfQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxDYW52YXNF
bGVtZW50LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQu
aWRsCShyZXZpc2lvbiA1ODU3MSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5p
ZGwJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEwICszNSwxMiBAQCBtb2R1bGUgaHRtbCB7CiAgICAg
ICAgIERPTVN0cmluZyB0b0RhdGFVUkwoaW4gW0NvbnZlcnRVbmRlZmluZWRPck51bGxUb051bGxT
dHJpbmddIERPTVN0cmluZyB0eXBlKQogICAgICAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7
CiAKKyNpZiAhZGVmaW5lZChMQU5HVUFHRV9DUFApIHx8ICFMQU5HVUFHRV9DUFAKICNpZiAhZGVm
aW5lZChMQU5HVUFHRV9PQkpFQ1RJVkVfQykgfHwgIUxBTkdVQUdFX09CSkVDVElWRV9DCiAgICAg
ICAgIC8vIFRoZSBjdXN0b20gYmluZGluZyBpcyBuZWVkZWQgdG8gaGFuZGxlIGNvbnRleHQgY3Jl
YXRpb24gYXR0cmlidXRlcy4KICAgICAgICAgW0N1c3RvbV0gRE9NT2JqZWN0IGdldENvbnRleHQo
aW4gRE9NU3RyaW5nIGNvbnRleHRJZCk7CiAjZW5kaWYKKyNlbmRpZgogCiAgICAgfTsKIApJbmRl
eDogV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9o
dG1sL0hUTUxEb2N1bWVudC5pZGwJKHJldmlzaW9uIDU4NTcxKQorKysgV2ViQ29yZS9odG1sL0hU
TUxEb2N1bWVudC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTIzLDcgKzIzLDcgQEAgbW9kdWxlIGh0
bWwgewogICAgIGludGVyZmFjZSBbCiAgICAgICAgIEhhc092ZXJyaWRpbmdOYW1lR2V0dGVyCiAg
ICAgXSBIVE1MRG9jdW1lbnQgOiBEb2N1bWVudCB7Ci0gICAgICAgIFtDdXN0b21dIHZvaWQgb3Bl
bigpOworICAgICAgICBbQ3VzdG9tLCBOb0NQUEN1c3RvbV0gdm9pZCBvcGVuKCk7CiAgICAgICAg
IHZvaWQgY2xvc2UoKTsKICAgICAgICAgW0N1c3RvbV0gdm9pZCB3cml0ZShpbiBET01TdHJpbmcg
dGV4dCk7CiAgICAgICAgIFtDdXN0b21dIHZvaWQgd3JpdGVsbihpbiBET01TdHJpbmcgdGV4dCk7
CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5pZGwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaWRsCShyZXZpc2lvbiA1ODU3MSkKKysrIFdl
YkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmlkbAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyAr
NTcsMTAgQEAgbW9kdWxlIGh0bWwgewogICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgW0NvbnZl
cnROdWxsVG9OdWxsU3RyaW5nLCBKU0NDdXN0b21HZXR0ZXJdIERPTVN0cmluZyB0eXBlOyAvLyBy
ZWFkb25seSBkcm9wcGVkIGFzIHBhcnQgb2YgRE9NIGxldmVsIDIKICAgICAgICAgICAgICAgICAg
YXR0cmlidXRlIFtDb252ZXJ0TnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIHVzZU1hcDsKICAg
ICAgICAgICAgICAgICAgYXR0cmlidXRlIFtDb252ZXJ0TnVsbFRvTnVsbFN0cmluZ10gRE9NU3Ry
aW5nIHZhbHVlOworCisjaWYgIWRlZmluZWQoTEFOR1VBR0VfQ1BQKSB8fCAhTEFOR1VBR0VfQ1BQ
CiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBEYXRlICAgICAgICAgICAgdmFsdWVBc0RhdGUg
c2V0dGVyIHJhaXNlcyhET01FeGNlcHRpb24pOworI2VuZGlmCiAgICAgICAgICAgICAgICAgIGF0
dHJpYnV0ZSBkb3VibGUgICAgICAgICAgdmFsdWVBc051bWJlciBzZXR0ZXIgcmFpc2VzKERPTUV4
Y2VwdGlvbik7CiAjaWYgZGVmaW5lZChFTkFCTEVfREFUQUxJU1QpICYmIEVOQUJMRV9EQVRBTElT
VAogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgSFRNTE9wdGlvbkVsZW1lbnQgc2VsZWN0ZWRP
cHRpb247CkluZGV4OiBXZWJDb3JlL2h0bWwvSW1hZ2VEYXRhLmlkbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2h0bWwvSW1hZ2VEYXRhLmlkbAkocmV2aXNpb24gNTg1NzEpCisrKyBXZWJDb3JlL2h0
bWwvSW1hZ2VEYXRhLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMzMsOSArMzMsMTMgQEAgbW9kdWxl
IGh0bWwgewogICAgIF0gSW1hZ2VEYXRhIHsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGxv
bmcgd2lkdGg7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBsb25nIGhlaWdodDsKKworI2lm
ICFkZWZpbmVkKExBTkdVQUdFX0NQUCkgfHwgIUxBTkdVQUdFX0NQUAogI2lmICFkZWZpbmVkKExB
TkdVQUdFX0pBVkFTQ1JJUFQpIHx8ICFMQU5HVUFHRV9KQVZBU0NSSVBUIHx8IGRlZmluZWQoVjhf
QklORElORykgJiYgVjhfQklORElORwogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgQ2FudmFz
UGl4ZWxBcnJheSBkYXRhOwogI2VuZGlmCisjZW5kaWYKKwogICAgIH07CiAKIH0KSW5kZXg6IFdl
YkNvcmUvaHRtbC9NZWRpYUVycm9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL01lZGlh
RXJyb3IuaAkocmV2aXNpb24gNTg1NzEpCisrKyBXZWJDb3JlL2h0bWwvTWVkaWFFcnJvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAjZGVmaW5lIE1lZGlhRXJyb3JfaAogCiAj
aWYgRU5BQkxFKFZJREVPKQotCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBXZWJDb3Jl
L2h0bWwvVGV4dE1ldHJpY3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvVGV4dE1ldHJp
Y3MuaAkocmV2aXNpb24gNTg1NzEpCisrKyBXZWJDb3JlL2h0bWwvVGV4dE1ldHJpY3MuaAkod29y
a2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBUZXh0TWV0cmljc19oCiAjZGVm
aW5lIFRleHRNZXRyaWNzX2gKIAorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogV2ViQ29y
ZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaWRsCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmlkbAkocmV2aXNp
b24gNTg1NzEpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTkwLDEwICs5MCwxMiBAQCBtb2R1bGUgaHRtbCB7CiAg
ICAgICAgIHZvaWQgc2V0QWxwaGEoaW4gZmxvYXQgYWxwaGEpOwogICAgICAgICB2b2lkIHNldENv
bXBvc2l0ZU9wZXJhdGlvbihpbiBET01TdHJpbmcgY29tcG9zaXRlT3BlcmF0aW9uKTsKIAorI2lm
ICFkZWZpbmVkKExBTkdVQUdFX0NQUCkgfHwgIUxBTkdVQUdFX0NQUAogICAgICAgICB2b2lkIHNl
dExpbmVXaWR0aChpbiBmbG9hdCB3aWR0aCk7CiAgICAgICAgIHZvaWQgc2V0TGluZUNhcChpbiBE
T01TdHJpbmcgY2FwKTsKICAgICAgICAgdm9pZCBzZXRMaW5lSm9pbihpbiBET01TdHJpbmcgam9p
bik7CiAgICAgICAgIHZvaWQgc2V0TWl0ZXJMaW1pdChpbiBmbG9hdCBsaW1pdCk7CisjZW5kaWYK
IAogICAgICAgICB2b2lkIGNsZWFyU2hhZG93KCk7CiAKSW5kZXg6IFdlYkNvcmUvcGFnZS9BYnN0
cmFjdFZpZXcuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9BYnN0cmFjdFZpZXcuaWRs
CShyZXZpc2lvbiA1ODU3MSkKKysrIFdlYkNvcmUvcGFnZS9BYnN0cmFjdFZpZXcuaWRsCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBAIG1vZHVsZSB2aWV3cyB7CiAgICAgICAgIE9taXRD
b25zdHJ1Y3RvcgogICAgIF0gQWJzdHJhY3RWaWV3IHsKICAgICAgICAgcmVhZG9ubHkgYXR0cmli
dXRlIERvY3VtZW50IGRvY3VtZW50OwotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgTWVkaWEg
c3R5bGVNZWRpYTsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFN0eWxlTWVkaWEgc3R5bGVN
ZWRpYTsKICAgICB9OwogCiB9CkluZGV4OiBXZWJDb3JlL3BhZ2UvTG9jYXRpb24uaWRsCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9Mb2NhdGlvbi5pZGwJKHJldmlzaW9uIDU4NTcxKQorKysg
V2ViQ29yZS9wYWdlL0xvY2F0aW9uLmlkbAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTMgKzQxLDE3
IEBAIG1vZHVsZSB3aW5kb3cgewogICAgICAgICBDdXN0b21Qcm90b3R5cGVEZWZpbmVHZXR0ZXIs
CiAgICAgICAgIE9taXRDb25zdHJ1Y3RvcgogICAgIF0gTG9jYXRpb24geworCisjaWYgIWRlZmlu
ZWQoTEFOR1VBR0VfQ1BQKSB8fCAhTEFOR1VBR0VfQ1BQCiAgICAgICAgICAgICAgICAgIGF0dHJp
YnV0ZSBbRG9Ob3RDaGVja0RvbWFpblNlY3VyaXR5T25TZXQsIEN1c3RvbVNldHRlciwgVjhEaXNh
bGxvd1NoYWRvd2luZ10gRE9NU3RyaW5nIGhyZWY7CisjZW5kaWYKIAogICAgICAgICBbQ3VzdG9t
LCBWOE9uSW5zdGFuY2VdIHZvaWQgYXNzaWduKGluIERPTVN0cmluZyB1cmwpOwogICAgICAgICBb
Q3VzdG9tLCBWOE9uSW5zdGFuY2VdIHZvaWQgcmVwbGFjZShpbiBET01TdHJpbmcgdXJsKTsKICAg
ICAgICAgW0N1c3RvbSwgVjhPbkluc3RhbmNlXSB2b2lkIHJlbG9hZCgpOwogCiAgICAgICAgIC8v
IFVSSSBkZWNvbXBvc2l0aW9uIGF0dHJpYnV0ZXMKKyNpZiAhZGVmaW5lZChMQU5HVUFHRV9DUFAp
IHx8ICFMQU5HVUFHRV9DUFAKICAgICAgICAgICAgICAgICAgYXR0cmlidXRlIFtDdXN0b21TZXR0
ZXJdIERPTVN0cmluZyBwcm90b2NvbDsKICAgICAgICAgICAgICAgICAgYXR0cmlidXRlIFtDdXN0
b21TZXR0ZXJdIERPTVN0cmluZyBob3N0OwogICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgW0N1
c3RvbVNldHRlcl0gRE9NU3RyaW5nIGhvc3RuYW1lOwpAQCAtNTUsNiArNTksNyBAQCBtb2R1bGUg
d2luZG93IHsKICAgICAgICAgICAgICAgICAgYXR0cmlidXRlIFtDdXN0b21TZXR0ZXJdIERPTVN0
cmluZyBwYXRobmFtZTsKICAgICAgICAgICAgICAgICAgYXR0cmlidXRlIFtDdXN0b21TZXR0ZXJd
IERPTVN0cmluZyBzZWFyY2g7CiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBbQ3VzdG9tU2V0
dGVyXSBET01TdHJpbmcgaGFzaDsKKyNlbmRpZgogCiAjaWYgZGVmaW5lZChMQU5HVUFHRV9KQVZB
U0NSSVBUKSAmJiBMQU5HVUFHRV9KQVZBU0NSSVBUCiAgICAgICAgIFtEb250RW51bSwgQ3VzdG9t
LCBWOE9uSW5zdGFuY2UsIFY4UmVhZE9ubHldIERPTVN0cmluZyB0b1N0cmluZygpOwpJbmRleDog
V2ViQ29yZS9wYWdlL1dlYktpdFBvaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL1dl
YktpdFBvaW50LmgJKHJldmlzaW9uIDU4NTcxKQorKysgV2ViQ29yZS9wYWdlL1dlYktpdFBvaW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgV2ViS2l0UG9pbnRf
aAogI2RlZmluZSBXZWJLaXRQb2ludF9oCiAKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgog
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6
IFdlYkNvcmUvc3RvcmFnZS9TUUxSZXN1bHRTZXQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
c3RvcmFnZS9TUUxSZXN1bHRTZXQuaWRsCShyZXZpc2lvbiA1ODU3MSkKKysrIFdlYkNvcmUvc3Rv
cmFnZS9TUUxSZXN1bHRTZXQuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw4ICszNSwxNSBAQCBt
b2R1bGUgc3RvcmFnZSB7CiAgICAgXSBTUUxSZXN1bHRTZXQgewogICAgICAgICByZWFkb25seSBh
dHRyaWJ1dGUgU1FMUmVzdWx0U2V0Um93TGlzdCByb3dzOwogCisjaWYgZGVmaW5lZChMQU5HVUFH
RV9DUFApICYmIExBTkdVQUdFX0NQUAorICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgbG9uZyBs
b25nIGluc2VydElkCisgICAgICAgICAgICBnZXR0ZXIgcmFpc2VzKERPTUV4Y2VwdGlvbik7Cisj
ZWxzZQorICAgICAgICAvLyBXZSBzaG91bGQgY2hhbmdlIHRoZSB0eXBlIHRvICdsb25nIGxvbmcn
IGhlcmUgYXMgd2VsbCwgYnV0IENocm9taXVtL1Y4IGJ1aWxkIGZhaWxzIHdpdGggaXQuIFNvbWVv
bmUgcGxlYXNlIGludmVzdGlnYXRlLgogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgbG9uZyBp
bnNlcnRJZAogICAgICAgICAgICAgZ2V0dGVyIHJhaXNlcyhET01FeGNlcHRpb24pOworI2VuZGlm
CisKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGxvbmcgcm93c0FmZmVjdGVkOwogICAgIH07
CiB9CkluZGV4OiBXZWJDb3JlL3dvcmtlcnMvRGVkaWNhdGVkV29ya2VyQ29udGV4dC5pZGwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS93b3JrZXJzL0RlZGljYXRlZFdvcmtlckNvbnRleHQuaWRsCShy
ZXZpc2lvbiA1ODU3MSkKKysrIFdlYkNvcmUvd29ya2Vycy9EZWRpY2F0ZWRXb3JrZXJDb250ZXh0
LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQCBtb2R1bGUgdGhyZWFkcyB7CiAg
ICAgICAgIE9taXRDb25zdHJ1Y3RvcgogICAgIF0gRGVkaWNhdGVkV29ya2VyQ29udGV4dCA6IFdv
cmtlckNvbnRleHQgewogCisjaWYgIWRlZmluZWQoTEFOR1VBR0VfQ1BQKSB8fCAhTEFOR1VBR0Vf
Q1BQCiAjaWYgZGVmaW5lZChMQU5HVUFHRV9KQVZBU0NSSVBUKSAmJiBMQU5HVUFHRV9KQVZBU0NS
SVBUCiAgICAgICAgIFtDdXN0b21dIHZvaWQgcG9zdE1lc3NhZ2UoaW4gYW55IG1lc3NhZ2UsIGlu
IFtPcHRpb25hbF0gQXJyYXkgbWVzc2FnZVBvcnRzKQogICAgICAgICAgICAgcmFpc2VzKERPTUV4
Y2VwdGlvbik7CkBAIC00Nyw2ICs0OCw4IEBAIG1vZHVsZSB0aHJlYWRzIHsKICAgICAgICAgdm9p
ZCBwb3N0TWVzc2FnZShpbiBET01TdHJpbmcgbWVzc2FnZSwgaW4gW09wdGlvbmFsXSBNZXNzYWdl
UG9ydCBtZXNzYWdlUG9ydCkKICAgICAgICAgICAgIHJhaXNlcyhET01FeGNlcHRpb24pOwogI2Vu
ZGlmCisjZW5kaWYKKwogICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBv
bm1lc3NhZ2U7CiAKICAgICB9OwpJbmRleDogV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQu
aWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmlkbAkocmV2
aXNpb24gNTg1NzEpCisrKyBXZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5pZGwJKHdvcmtp
bmcgY29weSkKQEAgLTc5LDYgKzc5LDcgQEAgbW9kdWxlIHRocmVhZHMgewogICAgICAgICByZWFk
b25seSBhdHRyaWJ1dGUgW0VuYWJsZWRBdFJ1bnRpbWVdIE5vdGlmaWNhdGlvbkNlbnRlciB3ZWJr
aXROb3RpZmljYXRpb25zOwogI2VuZGlmCiAKKyNpZiAhZGVmaW5lZChMQU5HVUFHRV9DUFApIHx8
ICFMQU5HVUFHRV9DUFAKICAgICAgICAgLy8gQ29uc3RydWN0b3JzCiAgICAgICAgIGF0dHJpYnV0
ZSBNZXNzYWdlRXZlbnRDb25zdHJ1Y3RvciBNZXNzYWdlRXZlbnQ7CiAgICAgICAgIGF0dHJpYnV0
ZSBXb3JrZXJMb2NhdGlvbkNvbnN0cnVjdG9yIFdvcmtlckxvY2F0aW9uOwpAQCAtOTMsNiArOTQs
OCBAQCBtb2R1bGUgdGhyZWFkcyB7CiAjaWYgZGVmaW5lZChFTkFCTEVfV0VCX1NPQ0tFVFMpICYm
IEVOQUJMRV9XRUJfU09DS0VUUwogICAgICAgICBhdHRyaWJ1dGUgW0pTQ0N1c3RvbUdldHRlcixF
bmFibGVkQXRSdW50aW1lXSBXZWJTb2NrZXRDb25zdHJ1Y3RvciBXZWJTb2NrZXQ7IC8vIFVzYWJs
ZSB3aXRoIHRoZSBuZXcgb3BlcmF0b3IKICNlbmRpZgorI2VuZGlmCisKICAgICB9OwogCiB9Cklu
ZGV4OiBXZWJLaXRUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvQ2hh
bmdlTG9nCShyZXZpc2lvbiA1ODU3MSkKKysrIFdlYktpdFRvb2xzL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDEwLTA0LTMwICBOaWtvbGFzIFppbW1lcm1hbm4g
IDxuemltbWVybWFubkByaW0uY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEFkZCBDUFAgYmluZGluZ3MgZ2VuZXJhdG9yCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zODI3OQorCisgICAgICAgIEludGVn
cmF0ZSBDUFAgYmluZGluZ3MgaW4gcnVuLWJpbmRpbmdzLXRlc3RzLCBzbyB3ZSBjYW4gaW1tZWRp
YXRlbHkgc3BvdCBnZW5lcmF0aW9uIGRpZmZlcmVuY2VzLiBHcmVhdCB0b29sIEFkYW0hCisKKyAg
ICAgICAgKiBTY3JpcHRzL3J1bi1iaW5kaW5ncy10ZXN0czoKKwogMjAxMC0wNC0yOCAgT2phbiBW
YWZhaSAgPG9qYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2Vp
ZGVsLgpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy9ydW4tYmluZGluZ3MtdGVzdHMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy9ydW4tYmluZGluZ3MtdGVzdHMJKHJldmlzaW9u
IDU4NTcxKQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy9ydW4tYmluZGluZ3MtdGVzdHMJKHdvcmtp
bmcgY29weSkKQEAgLTExNiw2ICsxMTYsNyBAQCBkZWYgbWFpbihhcmd2KToKICAgICAgICAgJ1Y4
JywKICAgICAgICAgJ09iakMnLAogICAgICAgICAnR09iamVjdCcsCisgICAgICAgICdDUFAnCiAg
ICAgXQogCiAgICAgZm9yIGdlbmVyYXRvciBpbiBnZW5lcmF0b3JzOgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57076</attachid>
            <date>2010-05-26 01:21:32 -0700</date>
            <delta_ts>2010-06-05 16:28:41 -0700</delta_ts>
            <desc>Updated patch v3</desc>
            <filename>FullPatch.diff</filename>
            <type>text/plain</type>
            <size>122751</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MDIyMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTg0IEBACisyMDEwLTA1LTI2ICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuemltbWVy
bWFubkByaW0uY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEFkZCBDUFAgYmluZGluZ3MgZ2VuZXJhdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zODI3OQorCisgICAgICAgIEFkZCBDUFAgYmluZGlu
Z3MgZ2VuZXJhdG9yIHVzZWQgaW4gT2x5bXBpYSBwbGF0Zm9ybS4KKyAgICAgICAgV2UgY2FuIHN1
Y2Nlc2Z1bGx5IGdlbmVyYXRlIGNwcCBiaW5kaW5ncyBmb3IgYWxsIElETHMgZXhjZXB0OgorICAg
ICAgICAtIERPTVdpbmRvdy5pZGwgLyBFdmVudFRhcmdldC5pZGwgKGZpbHRlcmVkIG91dCBpbiB0
aGUgSURMIGxpc3QgaW4gRGVyaXZlZFNvdXJjZXMubWFrZSBmb3Igbm9uLWpzYy92OCBnZW5lcmF0
b3JzIGFueXdheXMsIHNvIG5vIHByb2JsZW0gYXQgYWxsKQorICAgICAgICAtIGluc3BlY3Rvci8g
KG5vdCBuZWVkZWQgZm9yIHVzIGF0IGFsbCkKKyAgICAgICAgLSBzdmcvIChuZWVkcyBjdXN0b20g
aGFuZGxpbmcsIHJlbGF0ZWQgdG8gYW5pbWF0ZWQgYXR0cmlidXRlcykKKworICAgICAgICBBbGwg
Z2VuZXJhdGVkIGZpbGVzIGFyZSBmcmVlIG9mIHN0eWxlIGlzc3VlczogIlRvdGFsIGVycm9ycyBm
b3VuZDogMCBpbiA1MTAgZmlsZXMiCisgICAgICAgIE5vdCBpbnRlZ3JhdGVkIGluIGFueSBidWls
ZCBzeXN0ZW0gc28gZmFyLCB0aG91Z2ggSSd2ZSBzdWNjZXNzZnVsbHkgdGVzdGVkIG9uIE1hYyBh
bmQgaW5zaWRlIE9seW1waWEsIG9mIGNvdXJzZS4KKworICAgICAgICAqIGJpbmRpbmdzL2NwcDog
QWRkZWQuCisgICAgICAgICogYmluZGluZ3MvY3BwL1dlYkRPTUNTdHJpbmcuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkRPTUNTdHJpbmc6OnJlc2V0KToKKyAgICAgICAgKFdlYkRPTUNTdHJpbmc6
OmFzc2lnbik6CisgICAgICAgIChXZWJET01DU3RyaW5nOjpsZW5ndGgpOgorICAgICAgICAoV2Vi
RE9NQ1N0cmluZzo6ZGF0YSk6CisgICAgICAgIChXZWJET01DU3RyaW5nOjp1dGYxNik6CisgICAg
ICAgIChXZWJET01DU3RyaW5nOjpmcm9tVVRGMTYpOgorICAgICAgICAoV2ViRE9NQ1N0cmluZzo6
V2ViRE9NQ1N0cmluZyk6CisgICAgICAgIChXZWJET01DU3RyaW5nOjpvcGVyYXRvcj0pOgorICAg
ICAgICAoV2ViRE9NQ1N0cmluZzo6b3BlcmF0b3IgV1RGOjpDU3RyaW5nKToKKyAgICAgICAgKiBi
aW5kaW5ncy9jcHAvV2ViRE9NQ1N0cmluZy5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkRPTUNTdHJp
bmc6On5XZWJET01DU3RyaW5nKToKKyAgICAgICAgKFdlYkRPTUNTdHJpbmc6OldlYkRPTUNTdHJp
bmcpOgorICAgICAgICAoV2ViRE9NQ1N0cmluZzo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYkRP
TUNTdHJpbmc6OmlzRW1wdHkpOgorICAgICAgICAoV2ViRE9NQ1N0cmluZzo6aXNOdWxsKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9jcHAvV2ViRE9NRXZlbnRMaXN0ZW5lckN1c3RvbS5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViRE9NRXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQpOgorICAgICAgICAo
dG9XZWJLaXQpOgorICAgICAgICAqIGJpbmRpbmdzL2NwcC9XZWJET01FdmVudFRhcmdldC5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViRE9NRXZlbnRUYXJnZXQ6OldlYkRPTUV2ZW50VGFyZ2V0UHJp
dmF0ZTo6V2ViRE9NRXZlbnRUYXJnZXRQcml2YXRlKToKKyAgICAgICAgKFdlYkRPTUV2ZW50VGFy
Z2V0OjpXZWJET01FdmVudFRhcmdldCk6CisgICAgICAgIChXZWJET01FdmVudFRhcmdldDo6fldl
YkRPTUV2ZW50VGFyZ2V0KToKKyAgICAgICAgKFdlYkRPTUV2ZW50VGFyZ2V0OjppbXBsKToKKyAg
ICAgICAgKHRvV2ViQ29yZSk6CisgICAgICAgICh0b1dlYktpdCk6CisgICAgICAgICogYmluZGlu
Z3MvY3BwL1dlYkRPTUV2ZW50VGFyZ2V0Lmg6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL2Nw
cC9XZWJET01IVE1MRG9jdW1lbnRDdXN0b20uY3BwOiBBZGRlZC4KKyAgICAgICAgKGRvY3VtZW50
V3JpdGUpOgorICAgICAgICAoV2ViRE9NSFRNTERvY3VtZW50Ojp3cml0ZSk6CisgICAgICAgIChX
ZWJET01IVE1MRG9jdW1lbnQ6OndyaXRlbG4pOgorICAgICAgICAqIGJpbmRpbmdzL2NwcC9XZWJE
T01Ob2RlQ3VzdG9tLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJET01Ob2RlOjppbnNlcnRCZWZv
cmUpOgorICAgICAgICAoV2ViRE9NTm9kZTo6cmVwbGFjZUNoaWxkKToKKyAgICAgICAgKFdlYkRP
TU5vZGU6OnJlbW92ZUNoaWxkKToKKyAgICAgICAgKFdlYkRPTU5vZGU6OmFwcGVuZENoaWxkKToK
KyAgICAgICAgKFdlYkRPTU5vZGU6OmFkZEV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViRE9N
Tm9kZTo6cmVtb3ZlRXZlbnRMaXN0ZW5lcik6CisgICAgICAgICogYmluZGluZ3MvY3BwL1dlYkRP
TU9iamVjdC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkRPTU9iamVjdDo6V2ViRE9NT2JqZWN0KToK
KyAgICAgICAgKFdlYkRPTU9iamVjdDo6fldlYkRPTU9iamVjdCk6CisgICAgICAgICogYmluZGlu
Z3MvY3BwL1dlYkRPTVN0cmluZy5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViRE9NU3RyaW5nOjpy
ZXNldCk6CisgICAgICAgIChXZWJET01TdHJpbmc6OmFzc2lnbik6CisgICAgICAgIChXZWJET01T
dHJpbmc6Omxlbmd0aCk6CisgICAgICAgIChXZWJET01TdHJpbmc6OmRhdGEpOgorICAgICAgICAo
V2ViRE9NU3RyaW5nOjp1dGY4KToKKyAgICAgICAgKFdlYkRPTVN0cmluZzo6ZnJvbVVURjgpOgor
ICAgICAgICAoV2ViRE9NU3RyaW5nOjpXZWJET01TdHJpbmcpOgorICAgICAgICAoV2ViRE9NU3Ry
aW5nOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViRE9NU3RyaW5nOjpvcGVyYXRvciBXZWJDb3Jl
OjpTdHJpbmcpOgorICAgICAgICAoV2ViRE9NU3RyaW5nOjpvcGVyYXRvciBXZWJDb3JlOjpBdG9t
aWNTdHJpbmcpOgorICAgICAgICAoV2ViRE9NU3RyaW5nOjplcXVhbHMpOgorICAgICAgICAqIGJp
bmRpbmdzL2NwcC9XZWJET01TdHJpbmcuaDogQWRkZWQuCisgICAgICAgIChXZWJET01TdHJpbmc6
On5XZWJET01TdHJpbmcpOgorICAgICAgICAoV2ViRE9NU3RyaW5nOjpXZWJET01TdHJpbmcpOgor
ICAgICAgICAoV2ViRE9NU3RyaW5nOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViRE9NU3RyaW5n
Ojppc0VtcHR5KToKKyAgICAgICAgKFdlYkRPTVN0cmluZzo6aXNOdWxsKToKKyAgICAgICAgKiBi
aW5kaW5ncy9jcHAvV2ViRXhjZXB0aW9uSGFuZGxlci5jcHA6IEFkZGVkLgorICAgICAgICAoZ2xv
YmFsRXhjZXB0aW9uSGFuZGxlcik6CisgICAgICAgICh3ZWJJbnN0YWxsRXhjZXB0aW9uSGFuZGxl
cik6CisgICAgICAgICh3ZWJSYWlzZURPTUV4Y2VwdGlvbik6CisgICAgICAgICogYmluZGluZ3Mv
Y3BwL1dlYkV4Y2VwdGlvbkhhbmRsZXIuaDogQWRkZWQuCisgICAgICAgICh3ZWJET01SYWlzZUVy
cm9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9jcHAvV2ViTmF0aXZlRXZlbnRMaXN0ZW5lci5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViTmF0aXZlRXZlbnRMaXN0ZW5lcjo6V2ViTmF0aXZlRXZlbnRM
aXN0ZW5lcik6CisgICAgICAgIChXZWJOYXRpdmVFdmVudExpc3RlbmVyOjp+V2ViTmF0aXZlRXZl
bnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJOYXRpdmVFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVu
dCk6CisgICAgICAgIChXZWJOYXRpdmVFdmVudExpc3RlbmVyOjpyZXBvcnRFcnJvcik6CisgICAg
ICAgIChXZWJOYXRpdmVFdmVudExpc3RlbmVyOjpvcGVyYXRvcj09KToKKyAgICAgICAgKiBiaW5k
aW5ncy9jcHAvV2ViTmF0aXZlRXZlbnRMaXN0ZW5lci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYk5h
dGl2ZUV2ZW50TGlzdGVuZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJOYXRpdmVFdmVudExpc3Rl
bmVyOjpjYXN0KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JDUFAu
cG06IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFA6IEFkZGVkLgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdENhbGxiYWNrLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJET01UZXN0Q2FsbGJhY2s6OldlYkRPTVRlc3RDYWxsYmFj
a1ByaXZhdGU6OldlYkRPTVRlc3RDYWxsYmFja1ByaXZhdGUpOgorICAgICAgICAoV2ViRE9NVGVz
dENhbGxiYWNrOjpXZWJET01UZXN0Q2FsbGJhY2spOgorICAgICAgICAoV2ViRE9NVGVzdENhbGxi
YWNrOjppbXBsKToKKyAgICAgICAgKFdlYkRPTVRlc3RDYWxsYmFjazo6fldlYkRPTVRlc3RDYWxs
YmFjayk6CisgICAgICAgIChXZWJET01UZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aENsYXNzMVBh
cmFtKToKKyAgICAgICAgKFdlYkRPTVRlc3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoQ2xhc3MyUGFy
YW0pOgorICAgICAgICAoV2ViRE9NVGVzdENhbGxiYWNrOjpjYWxsYmFja1dpdGhOb25Cb29sUmV0
dXJuVHlwZSk6CisgICAgICAgICh0b1dlYkNvcmUpOgorICAgICAgICAodG9XZWJLaXQpOgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdENhbGxiYWNrLmg6IEFk
ZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdEludGVy
ZmFjZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViRE9NVGVzdEludGVyZmFjZTo6V2ViRE9NVGVz
dEludGVyZmFjZVByaXZhdGU6OldlYkRPTVRlc3RJbnRlcmZhY2VQcml2YXRlKToKKyAgICAgICAg
KFdlYkRPTVRlc3RJbnRlcmZhY2U6OldlYkRPTVRlc3RJbnRlcmZhY2UpOgorICAgICAgICAoV2Vi
RE9NVGVzdEludGVyZmFjZTo6aW1wbCk6CisgICAgICAgIChXZWJET01UZXN0SW50ZXJmYWNlOjp+
V2ViRE9NVGVzdEludGVyZmFjZSk6CisgICAgICAgICh0b1dlYkNvcmUpOgorICAgICAgICAodG9X
ZWJLaXQpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdElu
dGVyZmFjZS5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dl
YkRPTVRlc3RPYmouY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkRPTVRlc3RPYmo6OldlYkRPTVRl
c3RPYmpQcml2YXRlOjpXZWJET01UZXN0T2JqUHJpdmF0ZSk6CisgICAgICAgIChXZWJET01UZXN0
T2JqOjpXZWJET01UZXN0T2JqKToKKyAgICAgICAgKFdlYkRPTVRlc3RPYmo6OmltcGwpOgorICAg
ICAgICAoV2ViRE9NVGVzdE9iajo6fldlYkRPTVRlc3RPYmopOgorICAgICAgICAoV2ViRE9NVGVz
dE9iajo6cmVhZE9ubHlJbnRBdHRyKToKKyAgICAgICAgKFdlYkRPTVRlc3RPYmo6OnJlYWRPbmx5
U3RyaW5nQXR0cik6CisgICAgICAgIChXZWJET01UZXN0T2JqOjpyZWFkT25seVRlc3RPYmpBdHRy
KToKKyAgICAgICAgKFdlYkRPTVRlc3RPYmo6OmludEF0dHIpOgorICAgICAgICAoV2ViRE9NVGVz
dE9iajo6c2V0SW50QXR0cik6CisgICAgICAgIChXZWJET01UZXN0T2JqOjpsb25nTG9uZ0F0dHIp
OgorICAgICAgICAoV2ViRE9NVGVzdE9iajo6c2V0TG9uZ0xvbmdBdHRyKToKKyAgICAgICAgKFdl
YkRPTVRlc3RPYmo6OnVuc2lnbmVkTG9uZ0xvbmdBdHRyKToKKyAgICAgICAgKFdlYkRPTVRlc3RP
Ymo6OnNldFVuc2lnbmVkTG9uZ0xvbmdBdHRyKToKKyAgICAgICAgKFdlYkRPTVRlc3RPYmo6OnN0
cmluZ0F0dHIpOgorICAgICAgICAoV2ViRE9NVGVzdE9iajo6c2V0U3RyaW5nQXR0cik6CisgICAg
ICAgIChXZWJET01UZXN0T2JqOjp0ZXN0T2JqQXR0cik6CisgICAgICAgIChXZWJET01UZXN0T2Jq
OjpzZXRUZXN0T2JqQXR0cik6CisgICAgICAgIChXZWJET01UZXN0T2JqOjphdHRyV2l0aEV4Y2Vw
dGlvbik6CisgICAgICAgIChXZWJET01UZXN0T2JqOjpzZXRBdHRyV2l0aEV4Y2VwdGlvbik6Cisg
ICAgICAgIChXZWJET01UZXN0T2JqOjphdHRyV2l0aFNldHRlckV4Y2VwdGlvbik6CisgICAgICAg
IChXZWJET01UZXN0T2JqOjpzZXRBdHRyV2l0aFNldHRlckV4Y2VwdGlvbik6CisgICAgICAgIChX
ZWJET01UZXN0T2JqOjphdHRyV2l0aEdldHRlckV4Y2VwdGlvbik6CisgICAgICAgIChXZWJET01U
ZXN0T2JqOjpzZXRBdHRyV2l0aEdldHRlckV4Y2VwdGlvbik6CisgICAgICAgIChXZWJET01UZXN0
T2JqOjpzY3JpcHRTdHJpbmdBdHRyKToKKyAgICAgICAgKFdlYkRPTVRlc3RPYmo6OnZvaWRNZXRo
b2QpOgorICAgICAgICAoV2ViRE9NVGVzdE9iajo6dm9pZE1ldGhvZFdpdGhBcmdzKToKKyAgICAg
ICAgKFdlYkRPTVRlc3RPYmo6OmludE1ldGhvZCk6CisgICAgICAgIChXZWJET01UZXN0T2JqOjpp
bnRNZXRob2RXaXRoQXJncyk6CisgICAgICAgIChXZWJET01UZXN0T2JqOjpvYmpNZXRob2QpOgor
ICAgICAgICAoV2ViRE9NVGVzdE9iajo6b2JqTWV0aG9kV2l0aEFyZ3MpOgorICAgICAgICAoV2Vi
RE9NVGVzdE9iajo6bWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJncyk6CisgICAgICAgIChXZWJET01U
ZXN0T2JqOjptZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzKToKKyAgICAgICAgKFdl
YkRPTVRlc3RPYmo6OnNlcmlhbGl6ZWRWYWx1ZSk6CisgICAgICAgIChXZWJET01UZXN0T2JqOjpt
ZXRob2RXaXRoRXhjZXB0aW9uKToKKyAgICAgICAgKFdlYkRPTVRlc3RPYmo6OmFkZEV2ZW50TGlz
dGVuZXIpOgorICAgICAgICAoV2ViRE9NVGVzdE9iajo6cmVtb3ZlRXZlbnRMaXN0ZW5lcik6Cisg
ICAgICAgIChXZWJET01UZXN0T2JqOjp3aXRoRHluYW1pY0ZyYW1lKToKKyAgICAgICAgKFdlYkRP
TVRlc3RPYmo6OndpdGhEeW5hbWljRnJhbWVBbmRBcmcpOgorICAgICAgICAoV2ViRE9NVGVzdE9i
ajo6d2l0aER5bmFtaWNGcmFtZUFuZE9wdGlvbmFsQXJnKToKKyAgICAgICAgKFdlYkRPTVRlc3RP
Ymo6OndpdGhTY3JpcHRTdGF0ZVZvaWQpOgorICAgICAgICAoV2ViRE9NVGVzdE9iajo6d2l0aFNj
cmlwdFN0YXRlT2JqKToKKyAgICAgICAgKFdlYkRPTVRlc3RPYmo6OndpdGhTY3JpcHRTdGF0ZVZv
aWRFeGNlcHRpb24pOgorICAgICAgICAoV2ViRE9NVGVzdE9iajo6d2l0aFNjcmlwdFN0YXRlT2Jq
RXhjZXB0aW9uKToKKyAgICAgICAgKFdlYkRPTVRlc3RPYmo6Om1ldGhvZFdpdGhPcHRpb25hbEFy
Zyk6CisgICAgICAgIChXZWJET01UZXN0T2JqOjptZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRP
cHRpb25hbEFyZyk6CisgICAgICAgIChXZWJET01UZXN0T2JqOjptZXRob2RXaXRoTm9uT3B0aW9u
YWxBcmdBbmRUd29PcHRpb25hbEFyZ3MpOgorICAgICAgICAodG9XZWJDb3JlKToKKyAgICAgICAg
KHRvV2ViS2l0KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRl
c3RPYmouaDogQWRkZWQuCisgICAgICAgICogY3NzL1N0eWxlU2hlZXQuaWRsOiBFeHBvcnQgaGVs
cGVyIG1ldGhvZCBpc0NTU1N0eWxlU2hlZXQoKSBmb3IgY3BwIGJpbmRpbmdzIG9ubHkuCisgICAg
ICAgICogZG9tL0N1c3RvbUV2ZW50LmlkbDogRGlzYWJsZWQgZm9yIGNwcCBiaW5kaW5ncywgbmVl
ZHMgYXJiaXRhcnkgaW5wdXQgcGFyYW1ldGVyIGhhbmRsaW5nIHN1cHBvcnQgKCdET01PYmplY3Qn
IHR5cGUpLgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5pZGw6IElnbm9yZSBnZXRDU1NDYW52YXND
b250ZXh0KCkgZm9yIGNwcCBiaW5kaW5ncyBhbmQgZXhwb3J0IGhlbHBlciBtZXRob2QgaXNIVE1M
RG9jdW1lbnQoKSAoY3BwIGJpbmRpbmdzIG9ubHkpLgorICAgICAgICAqIGRvbS9FdmVudC5pZGw6
IEV4cG9ydCBpc011dGF0aW9uRXZlbnQoKS9pc01vdXNlRXZlbnQoKS9pc1VJRXZlbnQoKSBoZWxw
ZXJzIGZvciBjcHAgYmluZGluZ3Mgb25seS4KKyAgICAgICAgKiBkb20vRXZlbnRMaXN0ZW5lci5o
OiBBZGQgQ1BQRXZlbnRMaXN0ZW5lclR5cGUuCisgICAgICAgICogZG9tL05vZGUuaWRsOiBhZGRF
dmVudExpc3RlbmVyL3JlbW92ZUV2ZW50TGlzdGVuZXIgbmVlZCBbQ3VzdG9tXSBmbGFnIGZvciBj
cHAgYmluZGluZ3MuCisgICAgICAgICogZG9tL1BvcFN0YXRlRXZlbnQuaWRsOiBEaXNhYmxlZCBq
dXN0IGxpa2UgQ3VzdG9tRXZlbnQsIGZvciB0aGUgc2FtZSByZWFzb24gKCJhbnkiIGFyZ3VtZW50
IHR5cGUgaGFuZGxpbmcpLgorICAgICAgICAqIGh0bWwvSFRNTENhbnZhc0VsZW1lbnQuaWRsOiBE
aXNhYmxlIGdldENvbnRleHQoKSBtZXRob2QgZm9yIGNwcCBiaW5kaW5ncywgYXMgaXQncyBkb25l
IGZvciBvYmpjIGJpbmRpbmdzLgorICAgICAgICAqIGh0bWwvSFRNTERvY3VtZW50LmlkbDogQWRk
IFtOb0NQUEN1c3RvbV0gbWFya2VyIGZvciBvcGVuKCksIGFzIHdlJ3JlIGp1c3QgYXV0b2dlbmVy
YXRpbmcgaXQuCisgICAgICAgICogaHRtbC9IVE1MSW5wdXRFbGVtZW50LmlkbDogRGlzYWJsZSB2
YWx1ZUFzRGF0ZSgpIG1ldGhvZCBmb3IgY3BwIGJpbmRpbmdzLCBhcyB3ZSdyZSBtaXNzaW5nIG5h
dGl2ZSAnRGF0ZScgdHlwZSBzdXBwb3J0LgorICAgICAgICAqIGh0bWwvVGV4dE1ldHJpY3MuaDog
QWRkIG1pc3NpbmcgUGFzc1JlZlB0ci5oIGluY2x1ZGUuCisgICAgICAgICogaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmlkbDogRGlzYWJsZSBtZXRob2RzIChzZXRMaW5lQ2Fw
LCBldGMuLikgZm9yIGNwcCBiaW5kaW5ncyB3aG9zZSBuYW1lcyBjbGFzaCB3aXRoIHByb3BlcnR5
IHNldHRlcnMuCisgICAgICAgICogcGFnZS9BYnN0cmFjdFZpZXcuaWRsOiBSZW5hbWUgJ01lZGlh
JyB0eXBlIHRvICdTdHlsZU1lZGlhJyAtIHRoaXMgc2hvdWxkIGhhdmUgYmVlbiBkb25lIGJlZm9y
ZS4KKyAgICAgICAgKiBwYWdlL0xvY2F0aW9uLmlkbDogRGlzYWJsZSBzZXZlcmFsIG1ldGhvZHMg
d2hpY2ggd291bGQgbmVlZCBhIGN1c3RvbSBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIGNwcCBiaW5k
aW5ncy4KKyAgICAgICAgKiBwYWdlL1dlYktpdFBvaW50Lmg6IEFkZCBtaXNzaW5nIFBhc3NSZWZQ
dHIuaCBpbmNsdWRlLgorICAgICAgICAqIHN0b3JhZ2UvU1FMUmVzdWx0U2V0LmlkbDogQ29ycmVj
dCB0eXBlIGZyb20gJ2xvbmcnIHRvICdsb25nIGxvbmcnLCBmb3IgY3BwIGJpbmRpbmdzIG9ubHkg
dGhvdWdoIGFzIGl0IHdvdWxkbid0IGJ1aWxkIG9uIENocm9taXVtL1Y4LgorICAgICAgICAqIHdv
cmtlcnMvRGVkaWNhdGVkV29ya2VyQ29udGV4dC5pZGw6IERpc2FibGUgcG9zdE1lc3NhZ2UoKSBm
b3Igbm93IHdoZW4gdXNpbmcgY3BwIGJpbmRpbmdzLCB3b3VsZCBuZWVkIGN1c3RvbSBjb2RlIGZv
ciB1cy4KKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlckNvbnRleHQuaWRsOiBIaWRlIGNvbnN0cnVj
dG9ycyBmcm9tIGNwcCBiaW5kaW5ncy4KKwogMjAxMC0wNS0yNiAgTmlrb2xhcyBaaW1tZXJtYW5u
ICA8bnppbW1lcm1hbm5AcmltLmNvbT4KIAogICAgICAgICBOb3QgcmV2aWV3ZWQuIFVwZGF0ZSB0
ZXN0IGV4cGVjdGF0aW9ucyBmb3IgSlMgZ2VuZXJhdG9yLCB3aGVuIHVzaW5nIHJ1bi13ZWJraXQt
dGVzdHMuIFRoaXMgaGFzIGJlZW4gZm9yZ290dGVuLgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9j
cHAvV2ViRE9NQ1N0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9jcHAv
V2ViRE9NQ1N0cmluZy5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL2NwcC9X
ZWJET01DU3RyaW5nLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkRPTUNTdHJpbmcuaCIK
KworI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgorI2luY2x1ZGUgIldlYkRPTVN0cmluZy5oIgor
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworY2xhc3MgV2ViRE9NQ1N0cmluZ1ByaXZh
dGUgOiBwdWJsaWMgV1RGOjpDU3RyaW5nQnVmZmVyIHsKK307CisKK3ZvaWQgV2ViRE9NQ1N0cmlu
Zzo6cmVzZXQoKQoreworICAgIGlmIChtX3ByaXZhdGUpIHsKKyAgICAgICAgbV9wcml2YXRlLT5k
ZXJlZigpOworICAgICAgICBtX3ByaXZhdGUgPSAwOworICAgIH0KK30KKwordm9pZCBXZWJET01D
U3RyaW5nOjphc3NpZ24oY29uc3QgV2ViRE9NQ1N0cmluZyYgb3RoZXIpCit7CisgICAgYXNzaWdu
KGNvbnN0X2Nhc3Q8V2ViRE9NQ1N0cmluZ1ByaXZhdGUqPihvdGhlci5tX3ByaXZhdGUpKTsKK30K
Kwordm9pZCBXZWJET01DU3RyaW5nOjphc3NpZ24oY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxl
bmd0aCkKK3sKKyAgICBjaGFyKiBuZXdEYXRhOworICAgIFJlZlB0cjxXVEY6OkNTdHJpbmdCdWZm
ZXI+IGJ1ZmZlciA9CisgICAgICAgIFdURjo6Q1N0cmluZzo6bmV3VW5pbml0aWFsaXplZChsZW5n
dGgsIG5ld0RhdGEpLmJ1ZmZlcigpOworICAgIG1lbWNweShuZXdEYXRhLCBkYXRhLCBsZW5ndGgp
OworICAgIGFzc2lnbihzdGF0aWNfY2FzdDxXZWJET01DU3RyaW5nUHJpdmF0ZSo+KGJ1ZmZlci5n
ZXQoKSkpOworfQorCitzaXplX3QgV2ViRE9NQ1N0cmluZzo6bGVuZ3RoKCkgY29uc3QKK3sKKyAg
ICBpZiAoIW1fcHJpdmF0ZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgLy8gTk9URTogVGhlIGJ1
ZmZlcidzIGxlbmd0aCBpbmNsdWRlcyB0aGUgbnVsbCBieXRlLgorICAgIHJldHVybiBjb25zdF9j
YXN0PFdlYkRPTUNTdHJpbmdQcml2YXRlKj4obV9wcml2YXRlKS0+bGVuZ3RoKCkgLSAxOworfQor
Citjb25zdCBjaGFyKiBXZWJET01DU3RyaW5nOjpkYXRhKCkgY29uc3QKK3sKKyAgICBpZiAoIW1f
cHJpdmF0ZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8V2ViRE9N
Q1N0cmluZ1ByaXZhdGUqPihtX3ByaXZhdGUpLT5kYXRhKCk7Cit9CisKK1dlYkRPTVN0cmluZyBX
ZWJET01DU3RyaW5nOjp1dGYxNigpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdlYkNvcmU6OlVURjhF
bmNvZGluZygpLmRlY29kZShkYXRhKCksIGxlbmd0aCgpKTsKK30KKworV2ViRE9NQ1N0cmluZyBX
ZWJET01DU3RyaW5nOjpmcm9tVVRGMTYoY29uc3QgV2ViVUNoYXIqIGRhdGEsIHNpemVfdCBsZW5n
dGgpCit7CisgICAgcmV0dXJuIFdlYkNvcmU6OlVURjhFbmNvZGluZygpLmVuY29kZSgKKyAgICAg
ICAgZGF0YSwgbGVuZ3RoLCBXZWJDb3JlOjpRdWVzdGlvbk1hcmtzRm9yVW5lbmNvZGFibGVzKTsK
K30KKworV2ViRE9NQ1N0cmluZyBXZWJET01DU3RyaW5nOjpmcm9tVVRGMTYoY29uc3QgV2ViVUNo
YXIqIGRhdGEpCit7CisgICAgc2l6ZV90IGxlbiA9IDA7CisgICAgd2hpbGUgKGRhdGFbbGVuXSAh
PSBXZWJVQ2hhcigwKSkKKyAgICAgICAgbGVuKys7CisgICAgcmV0dXJuIGZyb21VVEYxNihkYXRh
LCBsZW4pOworfQorCitXZWJET01DU3RyaW5nOjpXZWJET01DU3RyaW5nKGNvbnN0IFdURjo6Q1N0
cmluZyYgcykKKyAgICA6IG1fcHJpdmF0ZShzdGF0aWNfY2FzdDxXZWJET01DU3RyaW5nUHJpdmF0
ZSo+KHMuYnVmZmVyKCkpKQoreworICAgIGlmIChtX3ByaXZhdGUpCisgICAgICAgIG1fcHJpdmF0
ZS0+cmVmKCk7Cit9CisKK1dlYkRPTUNTdHJpbmcmIFdlYkRPTUNTdHJpbmc6Om9wZXJhdG9yPShj
b25zdCBXVEY6OkNTdHJpbmcmIHMpCit7CisgICAgYXNzaWduKHN0YXRpY19jYXN0PFdlYkRPTUNT
dHJpbmdQcml2YXRlKj4ocy5idWZmZXIoKSkpOworICAgIHJldHVybiAqdGhpczsKK30KKworV2Vi
RE9NQ1N0cmluZzo6b3BlcmF0b3IgV1RGOjpDU3RyaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9wcml2YXRlOworfQorCit2b2lkIFdlYkRPTUNTdHJpbmc6OmFzc2lnbihXZWJET01DU3RyaW5n
UHJpdmF0ZSogcCkKK3sKKyAgICAvLyBUYWtlIGNhcmUgdG8gaGFuZGxlIHRoZSBjYXNlIHdoZXJl
IG1fcHJpdmF0ZSA9PSBwCisgICAgaWYgKHApCisgICAgICAgIHAtPnJlZigpOworICAgIGlmICht
X3ByaXZhdGUpCisgICAgICAgIG1fcHJpdmF0ZS0+ZGVyZWYoKTsKKyAgICBtX3ByaXZhdGUgPSBw
OworfQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9jcHAvV2ViRE9NQ1N0cmluZy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvY3BwL1dlYkRPTUNTdHJpbmcuaAkocmV2aXNpb24gMCkK
KysrIFdlYkNvcmUvYmluZGluZ3MvY3BwL1dlYkRPTUNTdHJpbmcuaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExp
bWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYkRPTUNTdHJpbmdfaAor
I2RlZmluZSBXZWJET01DU3RyaW5nX2gKKworI2luY2x1ZGUgPFdlYkRPTU9iamVjdC5oPgorI2lu
Y2x1ZGUgPHN0ZGRlZi5oPiAvLyBGb3Igc2l6ZV90CisKK25hbWVzcGFjZSBXVEYgeworY2xhc3Mg
Q1N0cmluZzsKK307CisKKy8vIFVURi0xNiBjaGFyYWN0ZXIgdHlwZQorI2lmIGRlZmluZWQoV0lO
MzIpCit0eXBlZGVmIHdjaGFyX3QgV2ViVUNoYXI7CisjZWxzZQordHlwZWRlZiB1bnNpZ25lZCBz
aG9ydCBXZWJVQ2hhcjsKKyNlbmRpZgorCitjbGFzcyBXZWJET01DU3RyaW5nUHJpdmF0ZTsKK2Ns
YXNzIFdlYkRPTVN0cmluZzsKKworLy8gQSBzaW5nbGUtYnl0ZSBzdHJpbmcgY29udGFpbmVyIHdp
dGggdW5zcGVjaWZpZWQgZW5jb2RpbmcuICBJdCBpcworLy8gaW5leHBlbnNpdmUgdG8gY29weSBh
IFdlYkRPTUNTdHJpbmcgb2JqZWN0LgorLy8KKy8vIFdBUk5JTkc6IEl0IGlzIG5vdCBzYWZlIHRv
IHBhc3MgYSBXZWJET01DU3RyaW5nIGFjcm9zcyB0aHJlYWRzISEhCisvLworY2xhc3MgV2ViRE9N
Q1N0cmluZyB7CitwdWJsaWM6CisgICAgfldlYkRPTUNTdHJpbmcoKSB7IHJlc2V0KCk7IH0KKwor
ICAgIFdlYkRPTUNTdHJpbmcoKSA6IG1fcHJpdmF0ZSgwKSB7IH0KKworICAgIFdlYkRPTUNTdHJp
bmcoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbikgOiBtX3ByaXZhdGUoMCkKKyAgICB7Cisg
ICAgICAgIGFzc2lnbihkYXRhLCBsZW4pOworICAgIH0KKworICAgIFdlYkRPTUNTdHJpbmcoY29u
c3QgV2ViRE9NQ1N0cmluZyYgcykgOiBtX3ByaXZhdGUoMCkgeyBhc3NpZ24ocyk7IH0KKworICAg
IFdlYkRPTUNTdHJpbmcmIG9wZXJhdG9yPShjb25zdCBXZWJET01DU3RyaW5nJiBzKQorICAgIHsK
KyAgICAgICAgYXNzaWduKHMpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAg
dm9pZCByZXNldCgpOworICAgIHZvaWQgYXNzaWduKGNvbnN0IFdlYkRPTUNTdHJpbmcmKTsKKyAg
ICB2b2lkIGFzc2lnbihjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuKTsKKworICAgIHNpemVf
dCBsZW5ndGgoKSBjb25zdDsKKyAgICBjb25zdCBjaGFyKiBkYXRhKCkgY29uc3Q7CisKKyAgICBi
b29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiAhbGVuZ3RoKCk7IH0KKyAgICBib29sIGlzTnVs
bCgpIGNvbnN0IHsgcmV0dXJuICFtX3ByaXZhdGU7IH0KKworICAgIFdlYkRPTVN0cmluZyB1dGYx
NigpIGNvbnN0OworCisgICAgc3RhdGljIFdlYkRPTUNTdHJpbmcgZnJvbVVURjE2KGNvbnN0IFdl
YlVDaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoKTsKKyAgICBzdGF0aWMgV2ViRE9NQ1N0cmluZyBm
cm9tVVRGMTYoY29uc3QgV2ViVUNoYXIqIGRhdGEpOworCisgICAgV2ViRE9NQ1N0cmluZyhjb25z
dCBXVEY6OkNTdHJpbmcmKTsKKyAgICBXZWJET01DU3RyaW5nJiBvcGVyYXRvcj0oY29uc3QgV1RG
OjpDU3RyaW5nJik7CisgICAgb3BlcmF0b3IgV1RGOjpDU3RyaW5nKCkgY29uc3Q7CisKK3ByaXZh
dGU6CisgICAgdm9pZCBhc3NpZ24oV2ViRE9NQ1N0cmluZ1ByaXZhdGUqKTsKKyAgICBXZWJET01D
U3RyaW5nUHJpdmF0ZSogbV9wcml2YXRlOworfTsKKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL2Jp
bmRpbmdzL2NwcC9XZWJET01FdmVudExpc3RlbmVyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2JpbmRpbmdzL2NwcC9XZWJET01FdmVudExpc3RlbmVyQ3VzdG9tLmNwcAkocmV2aXNp
b24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3MvY3BwL1dlYkRPTUV2ZW50TGlzdGVuZXJDdXN0b20u
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSBS
ZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViRE9NRXZlbnRMaXN0ZW5lci5oIgorCisjaW5j
bHVkZSAiV2ViRE9NRXZlbnQuaCIKKyNpbmNsdWRlICJXZWJOYXRpdmVFdmVudExpc3RlbmVyLmgi
CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCit2b2lkIFdlYkRPTUV2ZW50TGlzdGVuZXI6Omhh
bmRsZUV2ZW50KGNvbnN0IFdlYkRPTUV2ZW50JiBldnQpCit7CisgICAgaWYgKCFpbXBsKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIGltcGwoKS0+aGFuZGxlRXZlbnQoMCwgdG9XZWJDb3JlKGV2
dCkpOworfQorCitXZWJET01FdmVudExpc3RlbmVyIHRvV2ViS2l0KFdlYlVzZXJFdmVudExpc3Rl
bmVyKiB2YWx1ZSkKK3sKKyAgICBSZWZQdHI8V2ViTmF0aXZlRXZlbnRMaXN0ZW5lcj4gbGlzdGVu
ZXIgPSBXZWJOYXRpdmVFdmVudExpc3RlbmVyOjpjcmVhdGUodmFsdWUpOworICAgIHJldHVybiBX
ZWJET01FdmVudExpc3RlbmVyKGxpc3RlbmVyLmdldCgpKTsKK30KSW5kZXg6IFdlYkNvcmUvYmlu
ZGluZ3MvY3BwL1dlYkRPTUV2ZW50VGFyZ2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jp
bmRpbmdzL2NwcC9XZWJET01FdmVudFRhcmdldC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3Jl
L2JpbmRpbmdzL2NwcC9XZWJET01FdmVudFRhcmdldC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRl
ZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxl
IEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IldlYkRPTUV2ZW50VGFyZ2V0LmgiCisKKyNpbmNsdWRlICJET01BcHBsaWNhdGlvbkNhY2hlLmgi
CisjaW5jbHVkZSAiRGVkaWNhdGVkV29ya2VyQ29udGV4dC5oIgorI2luY2x1ZGUgIkV2ZW50U291
cmNlLmgiCisjaW5jbHVkZSAiTWVzc2FnZVBvcnQuaCIKKyNpbmNsdWRlICJOb2RlLmgiCisjaW5j
bHVkZSAiTm90aWZpY2F0aW9uLmgiCisjaW5jbHVkZSAiU2hhcmVkV29ya2VyLmgiCisjaW5jbHVk
ZSAiU2hhcmVkV29ya2VyQ29udGV4dC5oIgorI2luY2x1ZGUgIlRocmVhZENoZWNrLmgiCisjaW5j
bHVkZSAiV2ViRE9NRE9NQXBwbGljYXRpb25DYWNoZS5oIgorI2luY2x1ZGUgIldlYkRPTURlZGlj
YXRlZFdvcmtlckNvbnRleHQuaCIKKyNpbmNsdWRlICJXZWJET01FdmVudFNvdXJjZS5oIgorI2lu
Y2x1ZGUgIldlYkRPTU1lc3NhZ2VQb3J0LmgiCisjaW5jbHVkZSAiV2ViRE9NTm9kZS5oIgorI2lu
Y2x1ZGUgIldlYkRPTU5vdGlmaWNhdGlvbi5oIgorI2luY2x1ZGUgIldlYkRPTVNoYXJlZFdvcmtl
ci5oIgorI2luY2x1ZGUgIldlYkRPTVNoYXJlZFdvcmtlckNvbnRleHQuaCIKKyNpbmNsdWRlICJX
ZWJET01XZWJTb2NrZXQuaCIKKyNpbmNsdWRlICJXZWJET01Xb3JrZXIuaCIKKyNpbmNsdWRlICJX
ZWJET01YTUxIdHRwUmVxdWVzdC5oIgorI2luY2x1ZGUgIldlYkRPTVhNTEh0dHBSZXF1ZXN0VXBs
b2FkLmgiCisjaW5jbHVkZSAiV2ViRXhjZXB0aW9uSGFuZGxlci5oIgorI2luY2x1ZGUgIldlYlNv
Y2tldC5oIgorI2luY2x1ZGUgIldvcmtlci5oIgorI2luY2x1ZGUgIlhNTEh0dHBSZXF1ZXN0Lmgi
CisjaW5jbHVkZSAiWE1MSHR0cFJlcXVlc3RVcGxvYWQuaCIKKworI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KKworc3RydWN0IFdlYkRPTUV2ZW50VGFyZ2V0OjpXZWJET01FdmVudFRhcmdldFByaXZh
dGUgeworICAgIFdlYkRPTUV2ZW50VGFyZ2V0UHJpdmF0ZShXZWJDb3JlOjpFdmVudFRhcmdldCog
b2JqZWN0ID0gMCkKKyAgICAgICAgOiBpbXBsKG9iamVjdCkKKyAgICB7CisgICAgfQorCisgICAg
UmVmUHRyPFdlYkNvcmU6OkV2ZW50VGFyZ2V0PiBpbXBsOworfTsKKworV2ViRE9NRXZlbnRUYXJn
ZXQ6OldlYkRPTUV2ZW50VGFyZ2V0KCkKKyAgICA6IFdlYkRPTU9iamVjdCgpCisgICAgLCBtX2lt
cGwoMCkKK3sKK30KKworV2ViRE9NRXZlbnRUYXJnZXQ6OldlYkRPTUV2ZW50VGFyZ2V0KFdlYkNv
cmU6OkV2ZW50VGFyZ2V0KiBpbXBsKQorICAgIDogV2ViRE9NT2JqZWN0KCkKKyAgICAsIG1faW1w
bChuZXcgV2ViRE9NRXZlbnRUYXJnZXRQcml2YXRlKGltcGwpKQoreworfQorCitXZWJET01FdmVu
dFRhcmdldDo6V2ViRE9NRXZlbnRUYXJnZXQoY29uc3QgV2ViRE9NRXZlbnRUYXJnZXQmIGNvcHkp
CisgICAgOiBXZWJET01PYmplY3QoKQoreworICAgIG1faW1wbCA9IGNvcHkuaW1wbCgpID8gbmV3
IFdlYkRPTUV2ZW50VGFyZ2V0UHJpdmF0ZShjb3B5LmltcGwoKSkgOiAwOworfQorCitXZWJET01F
dmVudFRhcmdldDo6fldlYkRPTUV2ZW50VGFyZ2V0KCkKK3sKKyAgICBkZWxldGUgbV9pbXBsOwor
ICAgIG1faW1wbCA9IDA7Cit9CisKK1dlYkNvcmU6OkV2ZW50VGFyZ2V0KiBXZWJET01FdmVudFRh
cmdldDo6aW1wbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW1wbCA/IG1faW1wbC0+aW1wbC5n
ZXQoKSA6IDA7Cit9CisKK1dlYkNvcmU6OkV2ZW50VGFyZ2V0KiB0b1dlYkNvcmUoY29uc3QgV2Vi
RE9NRXZlbnRUYXJnZXQmIHdyYXBwZXIpCit7CisgICAgcmV0dXJuIHdyYXBwZXIuaW1wbCgpOwor
fQorCitXZWJET01FdmVudFRhcmdldCB0b1dlYktpdChXZWJDb3JlOjpFdmVudFRhcmdldCogdmFs
dWUpCit7CisjaWYgRU5BQkxFKEVWRU5UU09VUkNFKQorICAgIGlmIChXZWJDb3JlOjpFdmVudFNv
dXJjZSogZXZlbnRTb3VyY2UgPSB2YWx1ZS0+dG9FdmVudFNvdXJjZSgpKQorICAgICAgICByZXR1
cm4gdG9XZWJLaXQoZXZlbnRTb3VyY2UpOworI2VuZGlmCisKKyNpZiBFTkFCTEUoU1ZHKSAmJiAw
CisgICAgLy8gRklYTUU6IEVuYWJsZSBvbmNlIFNWRyBiaW5kaW5ncyBhcmUgZ2VuZXJhdGVkLgor
ICAgIC8vIFNWR0VsZW1lbnRJbnN0YW5jZSBzdXBwb3J0cyBib3RoIHRvU1ZHRWxlbWVudEluc3Rh
bmNlIGFuZCB0b05vZGUgc2luY2Ugc28gbXVjaCBtb3VzZSBoYW5kbGluZyBjb2RlIGRlcGVuZHMg
b24gdG9Ob2RlIHJldHVybmluZyBhIHZhbGlkIG5vZGUuCisgICAgaWYgKFdlYkNvcmU6OlNWR0Vs
ZW1lbnRJbnN0YW5jZSogaW5zdGFuY2UgPSB2YWx1ZS0+dG9TVkdFbGVtZW50SW5zdGFuY2UoKSkK
KyAgICAgICAgcmV0dXJuIHRvV2ViS2l0KGluc3RhbmNlKTsKKyNlbmRpZgorCisgICAgaWYgKFdl
YkNvcmU6Ok5vZGUqIG5vZGUgPSB2YWx1ZS0+dG9Ob2RlKCkpCisgICAgICAgIHJldHVybiB0b1dl
YktpdChub2RlKTsKKworICAgIGlmIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdCogeGhyID0gdmFs
dWUtPnRvWE1MSHR0cFJlcXVlc3QoKSkKKyAgICAgICAgcmV0dXJuIHRvV2ViS2l0KHhocik7CisK
KyAgICBpZiAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3RVcGxvYWQqIHVwbG9hZCA9IHZhbHVlLT50
b1hNTEh0dHBSZXF1ZXN0VXBsb2FkKCkpCisgICAgICAgIHJldHVybiB0b1dlYktpdCh1cGxvYWQp
OworCisjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKKyAgICBpZiAoV2ViQ29y
ZTo6RE9NQXBwbGljYXRpb25DYWNoZSogY2FjaGUgPSB2YWx1ZS0+dG9ET01BcHBsaWNhdGlvbkNh
Y2hlKCkpCisgICAgICAgIHJldHVybiB0b1dlYktpdChjYWNoZSk7CisjZW5kaWYKKworICAgIGlm
IChXZWJDb3JlOjpNZXNzYWdlUG9ydCogbWVzc2FnZVBvcnQgPSB2YWx1ZS0+dG9NZXNzYWdlUG9y
dCgpKQorICAgICAgICByZXR1cm4gdG9XZWJLaXQobWVzc2FnZVBvcnQpOworCisjaWYgRU5BQkxF
KFdPUktFUlMpCisgICAgaWYgKFdlYkNvcmU6Oldvcmtlciogd29ya2VyID0gdmFsdWUtPnRvV29y
a2VyKCkpCisgICAgICAgIHJldHVybiB0b1dlYktpdCh3b3JrZXIpOworCisgICAgaWYgKFdlYkNv
cmU6OkRlZGljYXRlZFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQgPSB2YWx1ZS0+dG9EZWRp
Y2F0ZWRXb3JrZXJDb250ZXh0KCkpCisgICAgICAgIHJldHVybiB0b1dlYktpdCh3b3JrZXJDb250
ZXh0KTsKKyNlbmRpZgorCisjaWYgRU5BQkxFKFNIQVJFRF9XT1JLRVJTKQorICAgIGlmIChXZWJD
b3JlOjpTaGFyZWRXb3JrZXIqIHNoYXJlZFdvcmtlciA9IHZhbHVlLT50b1NoYXJlZFdvcmtlcigp
KQorICAgICAgICByZXR1cm4gdG9XZWJLaXQoc2hhcmVkV29ya2VyKTsKKworICAgIGlmIChXZWJD
b3JlOjpTaGFyZWRXb3JrZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0ID0gdmFsdWUtPnRvU2hhcmVk
V29ya2VyQ29udGV4dCgpKQorICAgICAgICByZXR1cm4gdG9XZWJLaXQod29ya2VyQ29udGV4dCk7
CisjZW5kaWYKKworI2lmIEVOQUJMRShOT1RJRklDQVRJT05TKQorICAgIGlmIChXZWJDb3JlOjpO
b3RpZmljYXRpb24qIG5vdGlmaWNhdGlvbiA9IHZhbHVlLT50b05vdGlmaWNhdGlvbigpKQorICAg
ICAgICByZXR1cm4gdG9XZWJLaXQobm90aWZpY2F0aW9uKTsKKyNlbmRpZgorCisjaWYgRU5BQkxF
KFdFQl9TT0NLRVRTKQorICAgIGlmIChXZWJDb3JlOjpXZWJTb2NrZXQqIHdlYlNvY2tldCA9IHZh
bHVlLT50b1dlYlNvY2tldCgpKQorICAgICAgICByZXR1cm4gdG9XZWJLaXQod2ViU29ja2V0KTsK
KyNlbmRpZgorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFdlYkRPTUV2
ZW50VGFyZ2V0KCk7Cit9CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2NwcC9XZWJET01FdmVudFRh
cmdldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvY3BwL1dlYkRPTUV2ZW50VGFy
Z2V0LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL2NwcC9XZWJET01FdmVudFRh
cmdldC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aWZuZGVmIFdlYkRPTUV2ZW50VGFyZ2V0X2gKKyNkZWZpbmUgV2ViRE9NRXZlbnRUYXJnZXRfaAor
CisjaW5jbHVkZSA8V2ViRE9NT2JqZWN0Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNz
IEV2ZW50VGFyZ2V0OworfTsKKworY2xhc3MgV2ViRE9NRXZlbnRUYXJnZXQgOiBwdWJsaWMgV2Vi
RE9NT2JqZWN0IHsKK3B1YmxpYzoKKyAgICBXZWJET01FdmVudFRhcmdldCgpOworICAgIGV4cGxp
Y2l0IFdlYkRPTUV2ZW50VGFyZ2V0KFdlYkNvcmU6OkV2ZW50VGFyZ2V0Kik7CisgICAgV2ViRE9N
RXZlbnRUYXJnZXQoY29uc3QgV2ViRE9NRXZlbnRUYXJnZXQmKTsKKyAgICB+V2ViRE9NRXZlbnRU
YXJnZXQoKTsKKworICAgIFdlYkNvcmU6OkV2ZW50VGFyZ2V0KiBpbXBsKCkgY29uc3Q7CisKKyAg
ICAvLyBGSVhNRTogQWRkIGEgcG9zc2liaWxpdHkgdG8gY2hlY2sgd2hhdCBraW5kIG9mIEV2ZW50
VGFyZ2V0IHdlIGhhdmUsCisgICAgLy8gdG8gYmUgYWJsZSB0byBjYXN0IGVnLiBhIFdlYkRPTUV2
ZW50VGFyZ2V0IHRvIGEgV2ViRE9NTm9kZQorCitwcm90ZWN0ZWQ6CisgICAgc3RydWN0IFdlYkRP
TUV2ZW50VGFyZ2V0UHJpdmF0ZTsKKyAgICBXZWJET01FdmVudFRhcmdldFByaXZhdGUqIG1faW1w
bDsKK307CisKK1dlYkNvcmU6OkV2ZW50VGFyZ2V0KiB0b1dlYkNvcmUoY29uc3QgV2ViRE9NRXZl
bnRUYXJnZXQmKTsKK1dlYkRPTUV2ZW50VGFyZ2V0IHRvV2ViS2l0KFdlYkNvcmU6OkV2ZW50VGFy
Z2V0Kik7CisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9jcHAvV2ViRE9NSFRNTERv
Y3VtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2NwcC9XZWJE
T01IVE1MRG9jdW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5n
cy9jcHAvV2ViRE9NSFRNTERvY3VtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQg
MjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IldlYkRPTUhUTUxEb2N1bWVudC5oIgorCisjaW5jbHVkZSAiQ2hhcmFjdGVyTmFtZXMuaCIKKyNp
bmNsdWRlICJIVE1MRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJTZWdtZW50ZWRTdHJpbmcuaCIKKyNp
bmNsdWRlICJXZWJFeGNlcHRpb25IYW5kbGVyLmgiCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkb2N1
bWVudFdyaXRlKGNvbnN0IFdlYkRPTVN0cmluZyYgdGV4dCwgV2ViQ29yZTo6SFRNTERvY3VtZW50
KiBkb2N1bWVudCwgYm9vbCBhZGROZXdsaW5lKQoreworICAgIFdlYkNvcmU6OlNlZ21lbnRlZFN0
cmluZyBzZWdtZW50ZWRTdHJpbmcgPSBXZWJDb3JlOjpTdHJpbmcodGV4dCk7CisgICAgaWYgKGFk
ZE5ld2xpbmUpCisgICAgICAgIHNlZ21lbnRlZFN0cmluZy5hcHBlbmQoV2ViQ29yZTo6U2VnbWVu
dGVkU3RyaW5nKCZXZWJDb3JlOjpuZXdsaW5lQ2hhcmFjdGVyLCAxKSk7CisgICAgZG9jdW1lbnQt
PndyaXRlKHNlZ21lbnRlZFN0cmluZyk7Cit9CisKK3ZvaWQgV2ViRE9NSFRNTERvY3VtZW50Ojp3
cml0ZShjb25zdCBXZWJET01TdHJpbmcmIHRleHQpCit7CisgICAgaWYgKCFpbXBsKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGRvY3VtZW50V3JpdGUodGV4dCwgaW1wbCgpLCBmYWxzZSk7Cit9
CisKK3ZvaWQgV2ViRE9NSFRNTERvY3VtZW50Ojp3cml0ZWxuKGNvbnN0IFdlYkRPTVN0cmluZyYg
dGV4dCkKK3sKKyAgICBpZiAoIWltcGwoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZG9jdW1l
bnRXcml0ZSh0ZXh0LCBpbXBsKCksIHRydWUpOworfQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9j
cHAvV2ViRE9NTm9kZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9j
cHAvV2ViRE9NTm9kZUN1c3RvbS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdz
L2NwcC9XZWJET01Ob2RlQ3VzdG9tLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkRPTU5v
ZGUuaCIKKworI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRlICJXZWJET01FdmVudExpc3RlbmVy
LmgiCisjaW5jbHVkZSAiV2ViRXhjZXB0aW9uSGFuZGxlci5oIgorI2luY2x1ZGUgIldlYk5hdGl2
ZUV2ZW50TGlzdGVuZXIuaCIKKworV2ViRE9NTm9kZSBXZWJET01Ob2RlOjppbnNlcnRCZWZvcmUo
Y29uc3QgV2ViRE9NTm9kZSYgbmV3Q2hpbGQsIGNvbnN0IFdlYkRPTU5vZGUmIHJlZkNoaWxkKQor
eworICAgIGlmICghaW1wbCgpKQorICAgICAgICByZXR1cm4gV2ViRE9NTm9kZSgpOworCisgICAg
V2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaWYgKGltcGwoKS0+aW5zZXJ0QmVm
b3JlKHRvV2ViQ29yZShuZXdDaGlsZCksIHRvV2ViQ29yZShyZWZDaGlsZCksIGVjLCB0cnVlKSkK
KyAgICAgICAgcmV0dXJuIG5ld0NoaWxkOworCisgICAgd2ViRE9NUmFpc2VFcnJvcihzdGF0aWNf
Y2FzdDxXZWJET01FeGNlcHRpb25Db2RlPihlYykpOworICAgIHJldHVybiBXZWJET01Ob2RlKCk7
Cit9CisKK1dlYkRPTU5vZGUgV2ViRE9NTm9kZTo6cmVwbGFjZUNoaWxkKGNvbnN0IFdlYkRPTU5v
ZGUmIG5ld0NoaWxkLCBjb25zdCBXZWJET01Ob2RlJiBvbGRDaGlsZCkKK3sKKyAgICBpZiAoIWlt
cGwoKSkKKyAgICAgICAgcmV0dXJuIFdlYkRPTU5vZGUoKTsKKworICAgIFdlYkNvcmU6OkV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOworICAgIGlmIChpbXBsKCktPnJlcGxhY2VDaGlsZCh0b1dlYkNvcmUo
bmV3Q2hpbGQpLCB0b1dlYkNvcmUob2xkQ2hpbGQpLCBlYywgdHJ1ZSkpCisgICAgICAgIHJldHVy
biBvbGRDaGlsZDsKKworICAgIHdlYkRPTVJhaXNlRXJyb3Ioc3RhdGljX2Nhc3Q8V2ViRE9NRXhj
ZXB0aW9uQ29kZT4oZWMpKTsKKyAgICByZXR1cm4gV2ViRE9NTm9kZSgpOworfQorCitXZWJET01O
b2RlIFdlYkRPTU5vZGU6OnJlbW92ZUNoaWxkKGNvbnN0IFdlYkRPTU5vZGUmIG9sZENoaWxkKQor
eworICAgIGlmICghaW1wbCgpKQorICAgICAgICByZXR1cm4gV2ViRE9NTm9kZSgpOworCisgICAg
V2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaWYgKGltcGwoKS0+cmVtb3ZlQ2hp
bGQodG9XZWJDb3JlKG9sZENoaWxkKSwgZWMpKQorICAgICAgICByZXR1cm4gb2xkQ2hpbGQ7CisK
KyAgICB3ZWJET01SYWlzZUVycm9yKHN0YXRpY19jYXN0PFdlYkRPTUV4Y2VwdGlvbkNvZGU+KGVj
KSk7CisgICAgcmV0dXJuIFdlYkRPTU5vZGUoKTsKK30KKworV2ViRE9NTm9kZSBXZWJET01Ob2Rl
OjphcHBlbmRDaGlsZChjb25zdCBXZWJET01Ob2RlJiBuZXdDaGlsZCkKK3sKKyAgICBpZiAoIWlt
cGwoKSkKKyAgICAgICAgcmV0dXJuIFdlYkRPTU5vZGUoKTsKKworICAgIFdlYkNvcmU6OkV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOworICAgIGlmIChpbXBsKCktPmFwcGVuZENoaWxkKHRvV2ViQ29yZShu
ZXdDaGlsZCksIGVjLCB0cnVlKSkKKyAgICAgICAgcmV0dXJuIG5ld0NoaWxkOworCisgICAgd2Vi
RE9NUmFpc2VFcnJvcihzdGF0aWNfY2FzdDxXZWJET01FeGNlcHRpb25Db2RlPihlYykpOworICAg
IHJldHVybiBXZWJET01Ob2RlKCk7Cit9CisKK3ZvaWQgV2ViRE9NTm9kZTo6YWRkRXZlbnRMaXN0
ZW5lcihjb25zdCBXZWJET01TdHJpbmcmIHR5cGUsIGNvbnN0IFdlYkRPTUV2ZW50TGlzdGVuZXIm
IGxpc3RlbmVyLCBib29sIHVzZUNhcHR1cmUpCit7CisgICAgaWYgKCFpbXBsKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmICh0b1dlYkNvcmUobGlzdGVuZXIpKQorICAgICAgICBpbXBsKCkt
PmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgdG9XZWJDb3JlKGxpc3RlbmVyKSwgdXNlQ2FwdHVyZSk7
Cit9CisKK3ZvaWQgV2ViRE9NTm9kZTo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBXZWJET01T
dHJpbmcmIHR5cGUsIGNvbnN0IFdlYkRPTUV2ZW50TGlzdGVuZXImIGxpc3RlbmVyLCBib29sIHVz
ZUNhcHR1cmUpCit7CisgICAgaWYgKCFpbXBsKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
ICh0b1dlYkNvcmUobGlzdGVuZXIpKQorICAgICAgICBpbXBsKCktPnJlbW92ZUV2ZW50TGlzdGVu
ZXIodHlwZSwgdG9XZWJDb3JlKGxpc3RlbmVyKSwgdXNlQ2FwdHVyZSk7Cit9CkluZGV4OiBXZWJD
b3JlL2JpbmRpbmdzL2NwcC9XZWJET01PYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jp
bmRpbmdzL2NwcC9XZWJET01PYmplY3QuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGlu
Z3MvY3BwL1dlYkRPTU9iamVjdC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaWZuZGVmIFdlYkRPTU9iamVjdF9oCisjZGVmaW5lIFdlYkRPTU9iamVj
dF9oCisKK2NsYXNzIFdlYkRPTU9iamVjdCB7Citwcm90ZWN0ZWQ6CisgICAgV2ViRE9NT2JqZWN0
KCkgeyB9CisgICAgfldlYkRPTU9iamVjdCgpIHsgfQorfTsKKworLy8gTG9va3MgYWt3YXJkLCB0
aG91Z2ggd2UgcHJlZml4IGFsbCBjbGFzc2VzIHdpdGggV2ViRE9NCit0eXBlZGVmIHVuc2lnbmVk
IGxvbmcgbG9uZyBXZWJET01ET01UaW1lU3RhbXA7CisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy9jcHAvV2ViRE9NU3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL2NwcC9XZWJET01TdHJpbmcuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5n
cy9jcHAvV2ViRE9NU3RyaW5nLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMjQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkRPTVN0cmlu
Zy5oIgorCisjaW5jbHVkZSAiV2ViRE9NQ1N0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0
b21pY1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworY2xhc3MgV2ViRE9NU3RyaW5nUHJpdmF0ZSA6IHB1Ymxp
YyBXZWJDb3JlOjpTdHJpbmdJbXBsIHsKK307CisKK3ZvaWQgV2ViRE9NU3RyaW5nOjpyZXNldCgp
Cit7CisgICAgaWYgKG1fcHJpdmF0ZSkgeworICAgICAgICBtX3ByaXZhdGUtPmRlcmVmKCk7Cisg
ICAgICAgIG1fcHJpdmF0ZSA9IDA7CisgICAgfQorfQorCit2b2lkIFdlYkRPTVN0cmluZzo6YXNz
aWduKGNvbnN0IFdlYkRPTVN0cmluZyYgb3RoZXIpCit7CisgICAgYXNzaWduKGNvbnN0X2Nhc3Q8
V2ViRE9NU3RyaW5nUHJpdmF0ZSo+KG90aGVyLm1fcHJpdmF0ZSkpOworfQorCit2b2lkIFdlYkRP
TVN0cmluZzo6YXNzaWduKGNvbnN0IFdlYlVDaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoKQorewor
ICAgIGFzc2lnbihzdGF0aWNfY2FzdDxXZWJET01TdHJpbmdQcml2YXRlKj4oCisgICAgICAgIFdl
YkNvcmU6OlN0cmluZ0ltcGw6OmNyZWF0ZShkYXRhLCBsZW5ndGgpLmdldCgpKSk7Cit9CisKK3Np
emVfdCBXZWJET01TdHJpbmc6Omxlbmd0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0
ZSA/IGNvbnN0X2Nhc3Q8V2ViRE9NU3RyaW5nUHJpdmF0ZSo+KG1fcHJpdmF0ZSktPmxlbmd0aCgp
IDogMDsKK30KKworY29uc3QgV2ViVUNoYXIqIFdlYkRPTVN0cmluZzo6ZGF0YSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fcHJpdmF0ZSA/IGNvbnN0X2Nhc3Q8V2ViRE9NU3RyaW5nUHJpdmF0ZSo+
KG1fcHJpdmF0ZSktPmNoYXJhY3RlcnMoKSA6IDA7Cit9CisKK1dlYkRPTUNTdHJpbmcgV2ViRE9N
U3RyaW5nOjp1dGY4KCkgY29uc3QKK3sKKyAgICByZXR1cm4gV2ViQ29yZTo6U3RyaW5nKG1fcHJp
dmF0ZSkudXRmOCgpOworfQorCitXZWJET01TdHJpbmcgV2ViRE9NU3RyaW5nOjpmcm9tVVRGOChj
b25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoKQoreworICAgIHJldHVybiBXZWJDb3JlOjpT
dHJpbmc6OmZyb21VVEY4KGRhdGEsIGxlbmd0aCk7Cit9CisKK1dlYkRPTVN0cmluZyBXZWJET01T
dHJpbmc6OmZyb21VVEY4KGNvbnN0IGNoYXIqIGRhdGEpCit7CisgICAgcmV0dXJuIFdlYkNvcmU6
OlN0cmluZzo6ZnJvbVVURjgoZGF0YSk7Cit9CisKK1dlYkRPTVN0cmluZzo6V2ViRE9NU3RyaW5n
KGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgcykKKyAgICA6IG1fcHJpdmF0ZShzdGF0aWNfY2FzdDxX
ZWJET01TdHJpbmdQcml2YXRlKj4ocy5pbXBsKCkpKQoreworICAgIGlmIChtX3ByaXZhdGUpCisg
ICAgICAgIG1fcHJpdmF0ZS0+cmVmKCk7Cit9CisKK1dlYkRPTVN0cmluZyYgV2ViRE9NU3RyaW5n
OjpvcGVyYXRvcj0oY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBzKQoreworICAgIGFzc2lnbihzdGF0
aWNfY2FzdDxXZWJET01TdHJpbmdQcml2YXRlKj4ocy5pbXBsKCkpKTsKKyAgICByZXR1cm4gKnRo
aXM7Cit9CisKK1dlYkRPTVN0cmluZzo6b3BlcmF0b3IgV2ViQ29yZTo6U3RyaW5nKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9wcml2YXRlOworfQorCitXZWJET01TdHJpbmc6OldlYkRPTVN0cmlu
Zyhjb25zdCBXZWJDb3JlOjpBdG9taWNTdHJpbmcmIHMpCisgICAgOiBtX3ByaXZhdGUoMCkKK3sK
KyAgICBhc3NpZ24ocy5zdHJpbmcoKSk7Cit9CisKK1dlYkRPTVN0cmluZyYgV2ViRE9NU3RyaW5n
OjpvcGVyYXRvcj0oY29uc3QgV2ViQ29yZTo6QXRvbWljU3RyaW5nJiBzKQoreworICAgIGFzc2ln
bihzLnN0cmluZygpKTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK1dlYkRPTVN0cmluZzo6b3Bl
cmF0b3IgV2ViQ29yZTo6QXRvbWljU3RyaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV2ViQ29y
ZTo6QXRvbWljU3RyaW5nKHN0YXRpY19jYXN0PFdlYkNvcmU6OlN0cmluZ0ltcGwgKj4obV9wcml2
YXRlKSk7Cit9CisKK2Jvb2wgV2ViRE9NU3RyaW5nOjplcXVhbHMoY29uc3QgY2hhciogc3RyaW5n
KSBjb25zdAoreworICAgIHJldHVybiBXZWJDb3JlOjplcXVhbChtX3ByaXZhdGUsIHN0cmluZyk7
Cit9CisKK3ZvaWQgV2ViRE9NU3RyaW5nOjphc3NpZ24oV2ViRE9NU3RyaW5nUHJpdmF0ZSogcCkK
K3sKKyAgICAvLyBUYWtlIGNhcmUgdG8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIG1fcHJpdmF0ZSA9
PSBwCisgICAgaWYgKHApCisgICAgICAgIHAtPnJlZigpOworICAgIGlmIChtX3ByaXZhdGUpCisg
ICAgICAgIG1fcHJpdmF0ZS0+ZGVyZWYoKTsKKyAgICBtX3ByaXZhdGUgPSBwOworfQpJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy9jcHAvV2ViRE9NU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9iaW5kaW5ncy9jcHAvV2ViRE9NU3RyaW5nLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2Jp
bmRpbmdzL2NwcC9XZWJET01TdHJpbmcuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5OSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYkRPTVN0cmluZ19oCisjZGVmaW5lIFdlYkRPTVN0
cmluZ19oCisKKyNpbmNsdWRlIDxXZWJET01DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKK2NsYXNzIFN0cmluZzsKK2NsYXNzIEF0b21pY1N0cmluZzsKK30KKworY2xhc3MgV2ViRE9N
U3RyaW5nUHJpdmF0ZTsKKworLy8gQSBVVEYtMTYgc3RyaW5nIGNvbnRhaW5lci4gIEl0IGlzIGlu
ZXhwZW5zaXZlIHRvIGNvcHkgYSBXZWJET01TdHJpbmcKKy8vIG9iamVjdC4KKy8vCisvLyBXQVJO
SU5HOiBJdCBpcyBub3Qgc2FmZSB0byBwYXNzIGEgV2ViRE9NU3RyaW5nIGFjcm9zcyB0aHJlYWRz
ISEhCisvLworY2xhc3MgV2ViRE9NU3RyaW5nIHsKK3B1YmxpYzoKKyAgICB+V2ViRE9NU3RyaW5n
KCkgeyByZXNldCgpOyB9CisKKyAgICBXZWJET01TdHJpbmcoKSA6IG1fcHJpdmF0ZSgwKSB7IH0K
KworICAgIFdlYkRPTVN0cmluZyhjb25zdCBXZWJVQ2hhciogZGF0YSwgc2l6ZV90IGxlbikgOiBt
X3ByaXZhdGUoMCkKKyAgICB7CisgICAgICAgIGFzc2lnbihkYXRhLCBsZW4pOworICAgIH0KKwor
ICAgIFdlYkRPTVN0cmluZyhjb25zdCBXZWJET01TdHJpbmcmIHMpIDogbV9wcml2YXRlKDApIHsg
YXNzaWduKHMpOyB9CisKKyAgICBXZWJET01TdHJpbmcmIG9wZXJhdG9yPShjb25zdCBXZWJET01T
dHJpbmcmIHMpCisgICAgeworICAgICAgICBhc3NpZ24ocyk7CisgICAgICAgIHJldHVybiAqdGhp
czsKKyAgICB9CisKKyAgICB2b2lkIHJlc2V0KCk7CisgICAgdm9pZCBhc3NpZ24oY29uc3QgV2Vi
RE9NU3RyaW5nJik7CisgICAgdm9pZCBhc3NpZ24oY29uc3QgV2ViVUNoYXIqIGRhdGEsIHNpemVf
dCBsZW4pOworCisgICAgc2l6ZV90IGxlbmd0aCgpIGNvbnN0OworICAgIGNvbnN0IFdlYlVDaGFy
KiBkYXRhKCkgY29uc3Q7CisKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiAhbGVu
Z3RoKCk7IH0KKyAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuICFtX3ByaXZhdGU7IH0K
KworICAgIFdlYkRPTUNTdHJpbmcgdXRmOCgpIGNvbnN0OworCisgICAgc3RhdGljIFdlYkRPTVN0
cmluZyBmcm9tVVRGOChjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoKTsKKyAgICBzdGF0
aWMgV2ViRE9NU3RyaW5nIGZyb21VVEY4KGNvbnN0IGNoYXIqIGRhdGEpOworCisgICAgdGVtcGxh
dGUgPGludCBOPiBXZWJET01TdHJpbmcoY29uc3QgY2hhciAoJmRhdGEpW05dKQorICAgICAgICA6
IG1fcHJpdmF0ZSgwKQorICAgIHsKKyAgICAgICAgYXNzaWduKGZyb21VVEY4KGRhdGEsIE4gLSAx
KSk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPGludCBOPiBXZWJET01TdHJpbmcmIG9wZXJhdG9y
PShjb25zdCBjaGFyICgmZGF0YSlbTl0pCisgICAgeworICAgICAgICBhc3NpZ24oZnJvbVVURjgo
ZGF0YSwgTiAtIDEpKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIFdlYkRP
TVN0cmluZyhjb25zdCBXZWJDb3JlOjpTdHJpbmcmKTsKKyAgICBXZWJET01TdHJpbmcmIG9wZXJh
dG9yPShjb25zdCBXZWJDb3JlOjpTdHJpbmcmKTsKKyAgICBvcGVyYXRvciBXZWJDb3JlOjpTdHJp
bmcoKSBjb25zdDsKKworICAgIFdlYkRPTVN0cmluZyhjb25zdCBXZWJDb3JlOjpBdG9taWNTdHJp
bmcmKTsKKyAgICBXZWJET01TdHJpbmcmIG9wZXJhdG9yPShjb25zdCBXZWJDb3JlOjpBdG9taWNT
dHJpbmcmKTsKKyAgICBvcGVyYXRvciBXZWJDb3JlOjpBdG9taWNTdHJpbmcoKSBjb25zdDsKKwor
ICAgIGJvb2wgZXF1YWxzKGNvbnN0IGNoYXIqIHN0cmluZykgY29uc3Q7CisKK3ByaXZhdGU6Cisg
ICAgdm9pZCBhc3NpZ24oV2ViRE9NU3RyaW5nUHJpdmF0ZSopOworICAgIFdlYkRPTVN0cmluZ1By
aXZhdGUqIG1fcHJpdmF0ZTsKK307CisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9j
cHAvV2ViRXhjZXB0aW9uSGFuZGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5n
cy9jcHAvV2ViRXhjZXB0aW9uSGFuZGxlci5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2Jp
bmRpbmdzL2NwcC9XZWJFeGNlcHRpb25IYW5kbGVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQg
MjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IldlYkV4Y2VwdGlvbkhhbmRsZXIuaCIKKworLy8gVG8gYXZvaWQgYSBnbG9iYWwgc3RhdGljIHN5
bWJvbCwgd2UgZGVjbGFyZSBpdCBpbiBhIGZ1bmN0aW9uCitzdGF0aWMgaW5saW5lIFdlYkV4Y2Vw
dGlvbkhhbmRsZXImIGdsb2JhbEV4Y2VwdGlvbkhhbmRsZXIoKQoreworICAgIHN0YXRpYyBXZWJF
eGNlcHRpb25IYW5kbGVyIHNfZ2xvYmFsRXhjZXB0aW9uSGFuZGxlcjsKKyAgICByZXR1cm4gc19n
bG9iYWxFeGNlcHRpb25IYW5kbGVyOworfQorCit2b2lkIHdlYkluc3RhbGxFeGNlcHRpb25IYW5k
bGVyKFdlYkV4Y2VwdGlvbkhhbmRsZXIgaGFuZGxlcikKK3sKKyAgICBBU1NFUlQoaGFuZGxlcik7
CisgICAgZ2xvYmFsRXhjZXB0aW9uSGFuZGxlcigpID0gaGFuZGxlcjsKK30KKwordm9pZCB3ZWJS
YWlzZURPTUV4Y2VwdGlvbihXZWJET01FeGNlcHRpb25Db2RlIGVjKQoreworICAgIEFTU0VSVChl
Yyk7CisgICAgaWYgKFdlYkV4Y2VwdGlvbkhhbmRsZXImIGhhbmRsZXIgPSBnbG9iYWxFeGNlcHRp
b25IYW5kbGVyKCkpCisgICAgICAgICgqaGFuZGxlcikoZWMpOworfQpJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy9jcHAvV2ViRXhjZXB0aW9uSGFuZGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YmluZGluZ3MvY3BwL1dlYkV4Y2VwdGlvbkhhbmRsZXIuaAkocmV2aXNpb24gMCkKKysrIFdlYkNv
cmUvYmluZGluZ3MvY3BwL1dlYkV4Y2VwdGlvbkhhbmRsZXIuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0
ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAw
NSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2Vi
RXhjZXB0aW9uSGFuZGxlcl9oCisjZGVmaW5lIFdlYkV4Y2VwdGlvbkhhbmRsZXJfaAorCit0eXBl
ZGVmIGludCBXZWJET01FeGNlcHRpb25Db2RlOwordHlwZWRlZiB2b2lkICgqV2ViRXhjZXB0aW9u
SGFuZGxlcikoV2ViRE9NRXhjZXB0aW9uQ29kZSk7CisKKy8vIFVzZWQgZnJvbSB0aGUgb3V0c2lk
ZSB0byByZWdpc3RlciBhIGNhbGxiYWNrIHRoYXQgZ2V0cyBmaXJlZCB3aGVuZXZlciBhbiBleGNl
cHRpb24gaXMgcmFpc2VkCit2b2lkIHdlYkluc3RhbGxFeGNlcHRpb25IYW5kbGVyKFdlYkV4Y2Vw
dGlvbkhhbmRsZXIpOworCisvLyBOZXZlciB1c2VkIGJ5IHRoZSBiaW5kaW5ncywgb25seSBpbmRp
cmVjdGx5IGJ5IHdlYkRPTVJhaXNlRXJyb3IKK3ZvaWQgd2ViUmFpc2VET01FeGNlcHRpb24oV2Vi
RE9NRXhjZXB0aW9uQ29kZSk7CisKKy8vIFVzZWQgZnJvbSB0aGUgYmluZGluZ3MKK2lubGluZSB2
b2lkIHdlYkRPTVJhaXNlRXJyb3IoV2ViRE9NRXhjZXB0aW9uQ29kZSBlYykgCit7CisgICAgaWYg
KGVjKQorICAgICAgICB3ZWJSYWlzZURPTUV4Y2VwdGlvbihlYyk7Cit9CisKKyNlbmRpZgpJbmRl
eDogV2ViQ29yZS9iaW5kaW5ncy9jcHAvV2ViTmF0aXZlRXZlbnRMaXN0ZW5lci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9jcHAvV2ViTmF0aXZlRXZlbnRMaXN0ZW5lci5jcHAJ
KHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL2NwcC9XZWJOYXRpdmVFdmVudExpc3Rl
bmVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYk5hdGl2ZUV2ZW50TGlzdGVuZXIuaCIK
KworI2luY2x1ZGUgIldlYkRPTUV2ZW50LmgiCisKK1dlYk5hdGl2ZUV2ZW50TGlzdGVuZXI6Oldl
Yk5hdGl2ZUV2ZW50TGlzdGVuZXIoV2ViVXNlckV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyKQorICAg
IDogV2ViQ29yZTo6RXZlbnRMaXN0ZW5lcihDUFBFdmVudExpc3RlbmVyVHlwZSksCisgICAgbV9s
aXN0ZW5lcihsaXN0ZW5lcikKK3sKKyAgICBBU1NFUlQobV9saXN0ZW5lcik7CisgICAgbV9saXN0
ZW5lci0+cmVmKCk7Cit9CisKK1dlYk5hdGl2ZUV2ZW50TGlzdGVuZXI6On5XZWJOYXRpdmVFdmVu
dExpc3RlbmVyKCkKK3sKKyAgICBtX2xpc3RlbmVyLT5kZXJlZigpOworfQorCit2b2lkIFdlYk5h
dGl2ZUV2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBXZWJDb3JlOjpFdmVudCogZXZlbnQpCit7CisgICAgbV9saXN0ZW5lci0+aGFuZGxl
RXZlbnQodG9XZWJLaXQoZXZlbnQpKTsKK30KKworYm9vbCBXZWJOYXRpdmVFdmVudExpc3RlbmVy
OjpyZXBvcnRFcnJvcihXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgV2Vi
Q29yZTo6U3RyaW5nJiwgY29uc3QgV2ViQ29yZTo6U3RyaW5nJiwgaW50KQoreworICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQgZXJyb3IgaGFuZGxpbmcKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jv
b2wgV2ViTmF0aXZlRXZlbnRMaXN0ZW5lcjo6b3BlcmF0b3I9PShjb25zdCBXZWJDb3JlOjpFdmVu
dExpc3RlbmVyJiBvdGhlcikKK3sKKyAgICBjb25zdCBXZWJOYXRpdmVFdmVudExpc3RlbmVyKiBw
dHJPdGhlciA9IGNhc3QoJm90aGVyKTsKKyAgICByZXR1cm4gcHRyT3RoZXIgJiYgbV9saXN0ZW5l
ciA9PSBwdHJPdGhlci0+bV9saXN0ZW5lcjsKK30KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvY3Bw
L1dlYk5hdGl2ZUV2ZW50TGlzdGVuZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L2NwcC9XZWJOYXRpdmVFdmVudExpc3RlbmVyLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2Jp
bmRpbmdzL2NwcC9XZWJOYXRpdmVFdmVudExpc3RlbmVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVk
IDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIg
S2VsbHkgKHBta0Bwb3N0LmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwOCwgMjAwOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViTmF0aXZlRXZlbnRMaXN0
ZW5lcl9oCisjZGVmaW5lIFdlYk5hdGl2ZUV2ZW50TGlzdGVuZXJfaAorCisjaW5jbHVkZSAiRXZl
bnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIldlYkRPTUV2ZW50TGlzdGVuZXIuaCIKKworY2xhc3Mg
V2ViTmF0aXZlRXZlbnRMaXN0ZW5lciA6IHB1YmxpYyBXZWJDb3JlOjpFdmVudExpc3RlbmVyIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJOYXRpdmVFdmVudExpc3RlbmVyPiBj
cmVhdGUoV2ViVXNlckV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBXZWJOYXRpdmVFdmVudExpc3RlbmVyKGxpc3RlbmVyKSk7CisgICAg
fQorCisgICAgc3RhdGljIGNvbnN0IFdlYk5hdGl2ZUV2ZW50TGlzdGVuZXIqIGNhc3QoY29uc3Qg
V2ViQ29yZTo6RXZlbnRMaXN0ZW5lciogbGlzdGVuZXIpCisgICAgeworICAgICAgICByZXR1cm4g
bGlzdGVuZXItPnR5cGUoKSA9PSBDUFBFdmVudExpc3RlbmVyVHlwZQorICAgICAgICAgICAgICAg
ID8gc3RhdGljX2Nhc3Q8Y29uc3QgV2ViTmF0aXZlRXZlbnRMaXN0ZW5lcio+KGxpc3RlbmVyKQor
ICAgICAgICAgICAgICAgIDogMDsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5XZWJOYXRpdmVFdmVu
dExpc3RlbmVyKCk7CisgICAgdmlydHVhbCBib29sIG9wZXJhdG9yPT0oY29uc3QgV2ViQ29yZTo6
RXZlbnRMaXN0ZW5lciYgb3RoZXIpOworCitwcml2YXRlOgorICAgIHZpcnR1YWwgdm9pZCBoYW5k
bGVFdmVudChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViQ29yZTo6RXZlbnQq
KTsKKyAgICB2aXJ0dWFsIGJvb2wgcmVwb3J0RXJyb3IoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgbWVzc2FnZSwgY29uc3QgV2ViQ29yZTo6
U3RyaW5nJiB1cmwsIGludCBsaW5lTnVtYmVyKTsKKworcHJvdGVjdGVkOgorICAgIFdlYk5hdGl2
ZUV2ZW50TGlzdGVuZXIoV2ViVXNlckV2ZW50TGlzdGVuZXIqKTsKKyAgICBXZWJVc2VyRXZlbnRM
aXN0ZW5lciogbV9saXN0ZW5lcjsKK307CisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JDUFAucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JDUFAucG0JKHJldmlzaW9uIDApCisrKyBXZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckNQUC5wbQkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw5NzUgQEAKKworIyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgTmlrb2xhcyBaaW1tZXJt
YW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisjIENvcHlyaWdodCAoQykgMjAwNiBBbmRlcnMgQ2Fy
bHNzb24gPGFuZGVyc2NhQG1hYy5jb20+IAorIyBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgU2Ft
dWVsIFdlaW5pZyA8c2FtQHdlYmtpdC5vcmc+CisjIENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkg
UHJvc2t1cnlha292IDxhcEB3ZWJraXQub3JnPgorIyBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcs
IDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQg
KEMpIDIwMDkgQ2FtZXJvbiBNY0Nvcm1hY2sgPGNhbUBtY2MuaWQuYXU+CisjIENvcHlyaWdodCAo
QykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyMKKyMgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyMgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIyAKKyMgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisjIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorIyAKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhaW50IHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisjIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisjIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorIworCitwYWNrYWdlIENvZGVHZW5l
cmF0b3JDUFA7CisKK3VzZSBGaWxlOjpzdGF0OworCisjIEdsb2JhbCBWYXJpYWJsZXMKK215ICRt
b2R1bGUgPSAiIjsKK215ICRvdXRwdXREaXIgPSAiIjsKKworbXkgQGhlYWRlckNvbnRlbnRIZWFk
ZXIgPSAoKTsKK215IEBoZWFkZXJDb250ZW50ID0gKCk7CitteSAlaGVhZGVyRm9yd2FyZERlY2xh
cmF0aW9ucyA9ICgpOworCitteSBAaW1wbENvbnRlbnRIZWFkZXIgPSAoKTsKK215IEBpbXBsQ29u
dGVudCA9ICgpOworbXkgJWltcGxJbmNsdWRlcyA9ICgpOworCisjIENvbnN0YW50cworbXkgJGV4
Y2VwdGlvbkluaXQgPSAiV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7IjsKK215ICRleGNl
cHRpb25SYWlzZU9uRXJyb3IgPSAid2ViRE9NUmFpc2VFcnJvcihzdGF0aWNfY2FzdDxXZWJET01F
eGNlcHRpb25Db2RlPihlYykpOyI7CisKKyMgRGVmYXVsdCBMaWNlbnNlIFRlbXBsYXRlcworbXkg
JGhlYWRlckxpY2Vuc2VUZW1wbGF0ZSA9IDw8ICJFT0YiOworLyoKKyAqIENvcHlyaWdodCAoQykg
UmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVsIFdl
aW5pZyA8c2FtLndlaW5pZ1xAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJ
biBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworRU9GCisKK215ICRpbXBs
ZW1lbnRhdGlvbkxpY2Vuc2VUZW1wbGF0ZSA9IDw8ICJFT0YiOworLyoKKyAqIFRoaXMgZmlsZSBp
cyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqIFRoaXMgZmlsZSBo
YXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkh
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCitF
T0YKKworIyBEZWZhdWx0IGNvbnN0cnVjdG9yCitzdWIgbmV3Cit7CisgICAgbXkgJG9iamVjdCA9
IHNoaWZ0OworICAgIG15ICRyZWZlcmVuY2UgPSB7IH07CisKKyAgICAkY29kZUdlbmVyYXRvciA9
IHNoaWZ0OworICAgICRvdXRwdXREaXIgPSBzaGlmdDsKKyAgICBzaGlmdDsgIyAkdXNlTGF5ZXJP
blRvcAorICAgIHNoaWZ0OyAjICRwcmVwcm9jZXNzb3IKKyAgICBzaGlmdDsgIyAkd3JpdGVEZXBl
bmRlbmNpZXMKKworICAgIGJsZXNzKCRyZWZlcmVuY2UsICRvYmplY3QpOworICAgIHJldHVybiAk
cmVmZXJlbmNlOworfQorCitzdWIgZmluaXNoCit7CisgICAgbXkgJG9iamVjdCA9IHNoaWZ0Owor
fQorCisjIFBhcmFtczogJ2RvbUNsYXNzJyBzdHJ1Y3QKK3N1YiBHZW5lcmF0ZUludGVyZmFjZQor
eworICAgIG15ICRvYmplY3QgPSBzaGlmdDsKKyAgICBteSAkZGF0YU5vZGUgPSBzaGlmdDsKKyAg
ICBteSAkZGVmaW5lcyA9IHNoaWZ0OworCisgICAgbXkgJG5hbWUgPSAkZGF0YU5vZGUtPm5hbWU7
CisgICAgbXkgJGNsYXNzTmFtZSA9IEdldENsYXNzTmFtZSgkbmFtZSk7CisgICAgbXkgJHBhcmVu
dENsYXNzTmFtZSA9ICJXZWJET00iIC4gR2V0UGFyZW50SW1wbENsYXNzTmFtZSgkZGF0YU5vZGUp
OworCisgICAgIyBTdGFydCBhY3R1YWwgZ2VuZXJhdGlvbi4KKyAgICAkb2JqZWN0LT5HZW5lcmF0
ZUhlYWRlcigkZGF0YU5vZGUpOworICAgICRvYmplY3QtPkdlbmVyYXRlSW1wbGVtZW50YXRpb24o
JGRhdGFOb2RlKTsKKworICAgICMgV3JpdGUgY2hhbmdlcy4KKyAgICAkb2JqZWN0LT5Xcml0ZURh
dGEoIldlYkRPTSIgLiAkbmFtZSk7Cit9CisKKyMgUGFyYW1zOiAnaWRsRG9jdW1lbnQnIHN0cnVj
dAorc3ViIEdlbmVyYXRlTW9kdWxlCit7CisgICAgbXkgJG9iamVjdCA9IHNoaWZ0OworICAgIG15
ICRkYXRhTm9kZSA9IHNoaWZ0OworCisgICAgJG1vZHVsZSA9ICRkYXRhTm9kZS0+bW9kdWxlOwor
fQorCitzdWIgR2V0Q2xhc3NOYW1lCit7CisgICAgbXkgJG5hbWUgPSAkY29kZUdlbmVyYXRvci0+
U3RyaXBNb2R1bGUoc2hpZnQpOworCisgICAgIyBzcGVjaWFsIGNhc2VzCisgICAgcmV0dXJuICJX
ZWJET01TdHJpbmciIGlmICRjb2RlR2VuZXJhdG9yLT5Jc1N0cmluZ1R5cGUoJG5hbWUpIG9yICRu
YW1lIGVxICJTZXJpYWxpemVkU2NyaXB0VmFsdWUiOworICAgIHJldHVybiAiV2ViRE9NQWJzdHJh
Y3RWaWV3IiBpZiAkbmFtZSBlcSAiRE9NV2luZG93IjsKKyAgICByZXR1cm4gIldlYkRPTU9iamVj
dCIgaWYgJG5hbWUgZXEgIkRPTU9iamVjdCI7CisgICAgcmV0dXJuICJib29sIiBpZiAkbmFtZSBl
cSAiYm9vbGVhbiI7CisgICAgcmV0dXJuICRuYW1lIGlmICRjb2RlR2VuZXJhdG9yLT5Jc1ByaW1p
dGl2ZVR5cGUoJG5hbWUpOworCisgICAgcmV0dXJuICJXZWJET00kbmFtZSI7Cit9CisKK3N1YiBH
ZXRJbXBsQ2xhc3NOYW1lCit7CisgICAgbXkgJG5hbWUgPSAkY29kZUdlbmVyYXRvci0+U3RyaXBN
b2R1bGUoc2hpZnQpOworCisgICAgcmV0dXJuICJET01XaW5kb3ciIGlmICRuYW1lIGVxICJBYnN0
cmFjdFZpZXciOworICAgIHJldHVybiAkbmFtZTsKK30KKworc3ViIEdldFBhcmVudEltcGxDbGFz
c05hbWUKK3sKKyAgICBteSAkZGF0YU5vZGUgPSBzaGlmdDsKKworICAgIGlmIChAeyRkYXRhTm9k
ZS0+cGFyZW50c30gZXEgMCkgeworICAgICAgICByZXR1cm4gIkV2ZW50VGFyZ2V0IiBpZiAkZGF0
YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJFdmVudFRhcmdldCJ9OworICAgICAgICByZXR1
cm4gIk9iamVjdCI7CisgICAgfQorCisgICAgcmV0dXJuICRjb2RlR2VuZXJhdG9yLT5TdHJpcE1v
ZHVsZSgkZGF0YU5vZGUtPnBhcmVudHMoMCkpOworfQorCitzdWIgR2V0UGFyZW50Cit7CisgICAg
bXkgJGRhdGFOb2RlID0gc2hpZnQ7CisgICAgbXkgJG51bVBhcmVudHMgPSBAeyRkYXRhTm9kZS0+
cGFyZW50c307CisKKyAgICBteSAkcGFyZW50ID0gIiI7CisgICAgaWYgKCRudW1QYXJlbnRzIGVx
IDApIHsKKyAgICAgICAgJHBhcmVudCA9ICJXZWJET01PYmplY3QiOworICAgICAgICAkcGFyZW50
ID0gIldlYkRPTUV2ZW50VGFyZ2V0IiBpZiAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJFdmVudFRhcmdldCJ9OworICAgIH0gZWxzaWYgKCRudW1QYXJlbnRzIGVxIDEpIHsKKyAgICAg
ICAgbXkgJHBhcmVudE5hbWUgPSAkY29kZUdlbmVyYXRvci0+U3RyaXBNb2R1bGUoJGRhdGFOb2Rl
LT5wYXJlbnRzKDApKTsKKyAgICAgICAgJHBhcmVudCA9ICJXZWJET00iIC4gJHBhcmVudE5hbWU7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgbXkgQHBhcmVudHMgPSBAeyRkYXRhTm9kZS0+cGFyZW50
c307CisgICAgICAgIG15ICRmaXJzdFBhcmVudCA9ICRjb2RlR2VuZXJhdG9yLT5TdHJpcE1vZHVs
ZShzaGlmdChAcGFyZW50cykpOworICAgICAgICAkcGFyZW50ID0gIldlYkRPTSIgLiAkZmlyc3RQ
YXJlbnQ7CisgICAgfQorCisgICAgcmV0dXJuICRwYXJlbnQ7Cit9CisKK3N1YiBTaG91bGRTa2lw
VHlwZUluSW1wbGVtZW50YXRpb24KK3sKKyAgICBteSAkdHlwZUluZm8gPSBzaGlmdDsKKworICAg
IHJldHVybiAxIGlmICR0eXBlSW5mby0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
Q3VzdG9tIn0KKyAgICAgICAgICAgICBhbmQgISR0eXBlSW5mby0+c2lnbmF0dXJlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiTm9DUFBDdXN0b20ifTsKKworICAgIHJldHVybiAxIGlmICR0eXBlSW5m
by0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tQXJndW1lbnRIYW5kbGlu
ZyJ9CisgICAgICAgICAgICAgb3IgJHR5cGVJbmZvLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJDdXN0b21HZXR0ZXIifQorICAgICAgICAgICAgIG9yICR0eXBlSW5mby0+c2lnbmF0
dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTmVlZHNVc2VyR2VzdHVyZUNoZWNrIn07CisKKyAg
ICAjIEZJWE1FOiBXZSBkb24ndCBnZW5lcmF0ZSBiaW5kaW5ncyBmb3IgU1ZHIHJlbGF0ZWQgaW50
ZXJmYWNlcyB5ZXQKKyAgICByZXR1cm4gMSBpZiAkdHlwZUluZm8tPnNpZ25hdHVyZS0+bmFtZSA9
fiAvZ2V0U1ZHRG9jdW1lbnQvOworCisgICAgcmV0dXJuIDEgaWYgJHR5cGVJbmZvLT5zaWduYXR1
cmUtPm5hbWUgPX4gL0NvbnN0cnVjdG9yLzsKKyAgICByZXR1cm4gMDsKK30KKworc3ViIFNob3Vs
ZFNraXBUeXBlSW5IZWFkZXIKK3sKKyAgICBteSAkdHlwZUluZm8gPSBzaGlmdDsKKworICAgICMg
RklYTUU6IFdlIGN1cnJlbnRseSBpZ25vcmUgYW55IGF0dHJpYnV0ZS9mdW5jdGlvbiBuZWVkaW5n
IGN1c3RvbSBjb2RlCisgICAgcmV0dXJuIDEgaWYgJHR5cGVJbmZvLT5zaWduYXR1cmUtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJDdXN0b21Bcmd1bWVudEhhbmRsaW5nIn0KKyAgICAgICAgICAgICBv
ciAkdHlwZUluZm8tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbUdldHRl
ciJ9OworCisgICAgIyBGSVhNRTogV2UgZG9uJ3QgZ2VuZXJhdGUgYmluZGluZ3MgZm9yIFNWRyBy
ZWxhdGVkIGludGVyZmFjZXMgeWV0CisgICAgcmV0dXJuIDEgaWYgJHR5cGVJbmZvLT5zaWduYXR1
cmUtPm5hbWUgPX4gL2dldFNWR0RvY3VtZW50LzsKKworICAgIHJldHVybiAxIGlmICR0eXBlSW5m
by0+c2lnbmF0dXJlLT5uYW1lID1+IC9Db25zdHJ1Y3Rvci87CisgICAgcmV0dXJuIDA7Cit9CisK
K3N1YiBHZXRDUFBUeXBlCit7CisgICAgbXkgJHR5cGUgPSBzaGlmdDsKKyAgICBteSAkdXNlQ29u
c3RSZWZlcmVuY2UgPSBzaGlmdDsKKyAgICBteSAkbmFtZSA9IEdldENsYXNzTmFtZSgkdHlwZSk7
CisKKyAgICByZXR1cm4gImludCIgaWYgJHR5cGUgZXEgImxvbmciOworICAgIHJldHVybiAidW5z
aWduZWQiIGlmICRuYW1lIGVxICJ1bnNpZ25lZCBsb25nIjsKKyAgICByZXR1cm4gInVuc2lnbmVk
IHNob3J0IiBpZiAkdHlwZSBlcSAiQ29tcGFyZUhvdyI7CisKKyAgICBpZiAoJGNvZGVHZW5lcmF0
b3ItPklzU3RyaW5nVHlwZSgkdHlwZSkpIHsKKyAgICAgICAgaWYgKCR1c2VDb25zdFJlZmVyZW5j
ZSkgeworICAgICAgICAgICAgcmV0dXJuICJjb25zdCAkbmFtZSYiOworICAgICAgICB9CisKKyAg
ICAgICAgcmV0dXJuICRuYW1lOworICAgIH0KKworICAgIHJldHVybiAkbmFtZSBpZiAkY29kZUdl
bmVyYXRvci0+SXNQcmltaXRpdmVUeXBlKCR0eXBlKSBvciAkdHlwZSBlcSAiRE9NVGltZVN0YW1w
IjsKKyAgICByZXR1cm4gImNvbnN0ICRuYW1lJiIgaWYgJHVzZUNvbnN0UmVmZXJlbmNlOworICAg
IHJldHVybiAkbmFtZTsKK30KKworc3ViIENvbnZlcnNpb25OZWVkZWQKK3sKKyAgICBteSAkdHlw
ZSA9ICRjb2RlR2VuZXJhdG9yLT5TdHJpcE1vZHVsZShzaGlmdCk7CisgICAgcmV0dXJuICEkY29k
ZUdlbmVyYXRvci0+SXNOb25Qb2ludGVyVHlwZSgkdHlwZSkgJiYgISRjb2RlR2VuZXJhdG9yLT5J
c1N0cmluZ1R5cGUoJHR5cGUpOworfQorCitzdWIgR2V0Q1BQVHlwZUdldHRlcgoreworICAgIG15
ICRhcmdOYW1lID0gc2hpZnQ7CisgICAgbXkgJHR5cGUgPSAkY29kZUdlbmVyYXRvci0+U3RyaXBN
b2R1bGUoc2hpZnQpOworCisgICAgcmV0dXJuICRhcmdOYW1lIGlmICRjb2RlR2VuZXJhdG9yLT5J
c1ByaW1pdGl2ZVR5cGUoJHR5cGUpIG9yICRjb2RlR2VuZXJhdG9yLT5Jc1N0cmluZ1R5cGUoJHR5
cGUpOworICAgIHJldHVybiAic3RhdGljX2Nhc3Q8V2ViQ29yZTo6UmFuZ2U6OkNvbXBhcmVIb3c+
KCRhcmdOYW1lKSIgaWYgJHR5cGUgZXEgIkNvbXBhcmVIb3ciOworICAgIHJldHVybiAiV2ViQ29y
ZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoV2ViQ29yZTo6U3RyaW5nKCRhcmdOYW1l
KSkiIGlmICR0eXBlIGVxICJTZXJpYWxpemVkU2NyaXB0VmFsdWUiOworICAgIHJldHVybiAidG9X
ZWJDb3JlKCRhcmdOYW1lKSI7Cit9CisKK3N1YiBBZGRGb3J3YXJkRGVjbGFyYXRpb25zRm9yVHlw
ZQoreworICAgIG15ICR0eXBlID0gJGNvZGVHZW5lcmF0b3ItPlN0cmlwTW9kdWxlKHNoaWZ0KTsK
KyAgICBteSAkcHVibGljID0gc2hpZnQ7CisKKyAgICByZXR1cm4gaWYgJGNvZGVHZW5lcmF0b3It
PklzTm9uUG9pbnRlclR5cGUoJHR5cGUpIG9yICRjb2RlR2VuZXJhdG9yLT5Jc1N0cmluZ1R5cGUo
JHR5cGUpOworCisgICAgbXkgJGNsYXNzID0gR2V0Q2xhc3NOYW1lKCR0eXBlKTsKKyAgICAkaGVh
ZGVyRm9yd2FyZERlY2xhcmF0aW9uc3skY2xhc3N9ID0gMSBpZiAkcHVibGljOworfQorCitzdWIg
QWRkSW5jbHVkZXNGb3JUeXBlCit7CisgICAgbXkgJHR5cGUgPSAkY29kZUdlbmVyYXRvci0+U3Ry
aXBNb2R1bGUoc2hpZnQpOworCisgICAgcmV0dXJuIGlmICRjb2RlR2VuZXJhdG9yLT5Jc05vblBv
aW50ZXJUeXBlKCR0eXBlKTsKKyAgICByZXR1cm4gaWYgJHR5cGUgPX4gL2Njb25zdHJ1Y3Rvci87
CisKKyAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPklzU3RyaW5nVHlwZSgkdHlwZSkpIHsKKyAgICAg
ICAgJGltcGxJbmNsdWRlc3siQXRvbWljU3RyaW5nLmgifSA9IDE7CisgICAgICAgICRpbXBsSW5j
bHVkZXN7IktVUkwuaCJ9ID0gMTsKKyAgICAgICAgJGltcGxJbmNsdWRlc3siV2ViRE9NU3RyaW5n
LmgifSA9IDE7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoJHR5cGUgZXEgIkRP
TU9iamVjdCIpIHsKKyAgICAgICAgJGltcGxJbmNsdWRlc3siV2ViRE9NT2JqZWN0LmgifSA9IDE7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoJHR5cGUgZXEgIkRPTVdpbmRvdyIp
IHsKKyAgICAgICAgJGltcGxJbmNsdWRlc3siRE9NV2luZG93LmgifSA9IDE7CisgICAgICAgICRp
bXBsSW5jbHVkZXN7IldlYkRPTUFic3RyYWN0Vmlldy5oIn0gPSAxOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKCR0eXBlIGVxICJFdmVudExpc3RlbmVyIikgeworICAgICAgICAk
aW1wbEluY2x1ZGVzeyJXZWJOYXRpdmVFdmVudExpc3RlbmVyLmgifSA9IDE7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoJHR5cGUgZXEgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSIp
IHsKKyAgICAgICAgJGltcGxJbmNsdWRlc3siU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgifSA9IDE7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAkaW1wbEluY2x1ZGVzeyJOb2RlLmgifSA9
IDEgaWYgJHR5cGUgZXEgIk5vZGVMaXN0IjsKKyAgICAkaW1wbEluY2x1ZGVzeyJDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbi5oIn0gPSAxIGlmICR0eXBlIGVxICJDU1NTdHlsZURlY2xhcmF0aW9u
IjsKKworICAgICMgRGVmYXVsdCwgaW5jbHVkZSB0aGUgc2FtZSBuYW1lZCBmaWxlICh0aGUgaW1w
bGVtZW50YXRpb24pIGFuZCB0aGUgc2FtZSBuYW1lIHByZWZpeGVkIHdpdGggIldlYkRPTSIuIAor
ICAgICRpbXBsSW5jbHVkZXN7IiR0eXBlLmgifSA9IDEgdW5sZXNzICR0eXBlIGVxICJET01PYmpl
Y3QiOworICAgICRpbXBsSW5jbHVkZXN7IldlYkRPTSR0eXBlLmgifSA9IDE7Cit9CisKK3N1YiBH
ZW5lcmF0ZUNvbmRpdGlvbmFsU3RyaW5nRnJvbUF0dHJpYnV0ZVZhbHVlCit7CisgICAgbXkgJGNv
bmRpdGlvbmFsID0gc2hpZnQ7CisgICAgaWYgKCRjb25kaXRpb25hbCA9fiAvJi8pIHsKKyAgICAg
ICAgcmV0dXJuICJFTkFCTEUoIiAuIGpvaW4oIikgJiYgRU5BQkxFKCIsIHNwbGl0KC8mLywgJGNv
bmRpdGlvbmFsKSkgLiAiKSI7CisgICAgfSBlbHNpZiAoJGNvbmRpdGlvbmFsID1+IC9cfC8pIHsK
KyAgICAgICAgcmV0dXJuICJFTkFCTEUoIiAuIGpvaW4oIikgfHwgRU5BQkxFKCIsIHNwbGl0KC9c
fC8sICRjb25kaXRpb25hbCkpIC4gIikiOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiAi
RU5BQkxFKCIgLiAkY29uZGl0aW9uYWwgLiAiKSI7CisgICAgfQorfQorCitzdWIgR2VuZXJhdGVD
b25kaXRpb25hbFN0cmluZworeworICAgIG15ICRub2RlID0gc2hpZnQ7CisgICAgbXkgJGNvbmRp
dGlvbmFsID0gJG5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDb25kaXRpb25hbCJ9OworICAg
IGlmICgkY29uZGl0aW9uYWwpIHsKKyAgICAgICAgcmV0dXJuIEdlbmVyYXRlQ29uZGl0aW9uYWxT
dHJpbmdGcm9tQXR0cmlidXRlVmFsdWUoJGNvbmRpdGlvbmFsKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICByZXR1cm4gIiI7CisgICAgfQorfQorCitzdWIgR2VuZXJhdGVIZWFkZXIKK3sKKyAgICBt
eSAkb2JqZWN0ID0gc2hpZnQ7CisgICAgbXkgJGRhdGFOb2RlID0gc2hpZnQ7CisKKyAgICBteSAk
aW50ZXJmYWNlTmFtZSA9ICRkYXRhTm9kZS0+bmFtZTsKKyAgICBteSAkY2xhc3NOYW1lID0gR2V0
Q2xhc3NOYW1lKCRpbnRlcmZhY2VOYW1lKTsKKyAgICBteSAkaW1wbENsYXNzTmFtZSA9IEdldElt
cGxDbGFzc05hbWUoJGludGVyZmFjZU5hbWUpOworICAgIG15ICRpbXBsQ2xhc3NOYW1lV2l0aE5h
bWVzcGFjZSA9ICJXZWJDb3JlOjoiIC4gJGltcGxDbGFzc05hbWU7CisKKyAgICBteSAkcGFyZW50
TmFtZSA9ICIiOworICAgICRwYXJlbnROYW1lID0gR2V0UGFyZW50KCRkYXRhTm9kZSk7CisKKyAg
ICBteSAkbnVtQ29uc3RhbnRzID0gQHskZGF0YU5vZGUtPmNvbnN0YW50c307CisgICAgbXkgJG51
bUF0dHJpYnV0ZXMgPSBAeyRkYXRhTm9kZS0+YXR0cmlidXRlc307CisgICAgbXkgJG51bUZ1bmN0
aW9ucyA9IEB7JGRhdGFOb2RlLT5mdW5jdGlvbnN9OworCisgICAgIyAtIEFkZCBkZWZhdWx0IGhl
YWRlciB0ZW1wbGF0ZQorICAgIEBoZWFkZXJDb250ZW50SGVhZGVyID0gc3BsaXQoIlxyIiwgJGhl
YWRlckxpY2Vuc2VUZW1wbGF0ZSk7CisgICAgcHVzaChAaGVhZGVyQ29udGVudEhlYWRlciwgIlxu
I2lmbmRlZiAkY2xhc3NOYW1lIiAuICJfaCIpOworICAgIHB1c2goQGhlYWRlckNvbnRlbnRIZWFk
ZXIsICJcbiNkZWZpbmUgJGNsYXNzTmFtZSIgLiAiX2hcblxuIik7CisKKyAgICBteSAkY29uZGl0
aW9uYWxTdHJpbmcgPSBHZW5lcmF0ZUNvbmRpdGlvbmFsU3RyaW5nKCRkYXRhTm9kZSk7CisgICAg
cHVzaChAaGVhZGVyQ29udGVudEhlYWRlciwgIiNpZiAke2NvbmRpdGlvbmFsU3RyaW5nfVxuXG4i
KSBpZiAkY29uZGl0aW9uYWxTdHJpbmc7CisKKyAgICAjIC0gSU5DTFVERVMgLQorCisgICAgbXkg
JWhlYWRlckluY2x1ZGVzID0gKCk7CisgICAgJGhlYWRlckluY2x1ZGVzeyJXZWJET01TdHJpbmcu
aCJ9ID0gMTsKKyAgICAkaGVhZGVySW5jbHVkZXN7IiRwYXJlbnROYW1lLmgifSA9IDE7CisgICAg
Zm9yZWFjaCBteSAkaW5jbHVkZSAoc29ydCBrZXlzKCVoZWFkZXJJbmNsdWRlcykpIHsKKyAgICAg
ICAgcHVzaChAaGVhZGVyQ29udGVudEhlYWRlciwgIiNpbmNsdWRlIDwkaW5jbHVkZT5cbiIpOwor
ICAgIH0KKworICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJjbGFzcyAkY2xhc3NOYW1lIik7Cisg
ICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiA6IHB1YmxpYyAkcGFyZW50TmFtZSIpIGlmICRwYXJl
bnROYW1lOworICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIge1xuIik7CisgICAgcHVzaChAaGVh
ZGVyQ29udGVudCwgInB1YmxpYzpcbiIpOworCisgICAgIyBDb25zdHJ1Y3RvcgorICAgIHB1c2go
QGhlYWRlckNvbnRlbnQsICIgICAgJGNsYXNzTmFtZSgpO1xuIik7CisgICAgcHVzaChAaGVhZGVy
Q29udGVudCwgIiAgICBleHBsaWNpdCAkY2xhc3NOYW1lKCRpbXBsQ2xhc3NOYW1lV2l0aE5hbWVz
cGFjZSopO1xuIik7CisKKyAgICAjIENvcHkgY29uc3RydWN0b3Igb24gY2xhc3NlcyB3aGljaCBo
YXZlIHRoZSBkLXB0cgorICAgIGlmIChAeyRkYXRhTm9kZS0+cGFyZW50c30gZXEgMCkgeworICAg
ICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICRjbGFzc05hbWUoY29uc3QgJGNsYXNzTmFt
ZSYpO1xuIik7CisgICAgfQorCisgICAgIyBEZXN0cnVjdG9yCisgICAgaWYgKEB7JGRhdGFOb2Rl
LT5wYXJlbnRzfSBlcSAwKSB7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgfiRj
bGFzc05hbWUoKTtcbiIpOworICAgIH0KKworICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJcbiIp
OworICAgICRoZWFkZXJGb3J3YXJkRGVjbGFyYXRpb25zeyRpbXBsQ2xhc3NOYW1lV2l0aE5hbWVz
cGFjZX0gPSAxOworCisgICAgIyAtIEFkZCBjb25zdGFudHMuCisgICAgaWYgKCRudW1Db25zdGFu
dHMgPiAwKSB7CisgICAgICAgIG15IEBoZWFkZXJDb25zdGFudHMgPSAoKTsKKworICAgICAgICAj
IEZJWE1FOiB3ZSBuZWVkIGEgd2F5IHRvIGluY2x1ZGUgbXVsdGlwbGUgZW51bXMuCisgICAgICAg
IGZvcmVhY2ggbXkgJGNvbnN0YW50IChAeyRkYXRhTm9kZS0+Y29uc3RhbnRzfSkgeworICAgICAg
ICAgICAgbXkgJGNvbnN0YW50TmFtZSA9ICRjb25zdGFudC0+bmFtZTsKKyAgICAgICAgICAgIG15
ICRjb25zdGFudFZhbHVlID0gJGNvbnN0YW50LT52YWx1ZTsKKworICAgICAgICAgICAgbXkgJG91
dHB1dCA9ICJXRUJET01fIiAuICRjb25zdGFudE5hbWUgLiAiID0gIiAuICRjb25zdGFudFZhbHVl
OworICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29uc3RhbnRzLCAiICAgICAgICAiIC4gJG91dHB1
dCk7CisgICAgICAgIH0KKworICAgICAgICBteSAkY29tYmluZWRDb25zdGFudHMgPSBqb2luKCIs
XG4iLCBAaGVhZGVyQ29uc3RhbnRzKTsKKworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAi
ICAgICIpOworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiZW51bSB7XG4iKTsKKyAgICAg
ICAgcHVzaChAaGVhZGVyQ29udGVudCwgJGNvbWJpbmVkQ29uc3RhbnRzKTsKKyAgICAgICAgcHVz
aChAaGVhZGVyQ29udGVudCwgIlxuICAgICIpOworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCAifTtcblxuIik7CisgICAgfQorCisgICAgbXkgQGhlYWRlckF0dHJpYnV0ZXMgPSAoKTsKKwor
ICAgICMgLSBBZGQgYXR0cmlidXRlIGdldHRlcnMvc2V0dGVycy4KKyAgICBpZiAoJG51bUF0dHJp
YnV0ZXMgPiAwKSB7CisgICAgICAgIGZvcmVhY2ggbXkgJGF0dHJpYnV0ZSAoQHskZGF0YU5vZGUt
PmF0dHJpYnV0ZXN9KSB7CisgICAgICAgICAgICBuZXh0IGlmIFNob3VsZFNraXBUeXBlSW5IZWFk
ZXIoJGF0dHJpYnV0ZSk7CisKKyAgICAgICAgICAgIG15ICRhdHRyaWJ1dGVOYW1lID0gJGF0dHJp
YnV0ZS0+c2lnbmF0dXJlLT5uYW1lOworICAgICAgICAgICAgbXkgJGF0dHJpYnV0ZVR5cGUgPSBH
ZXRDUFBUeXBlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+dHlwZSwgMCk7CisgICAgICAgICAgICBt
eSAkYXR0cmlidXRlSXNSZWFkb25seSA9ICgkYXR0cmlidXRlLT50eXBlID1+IC9ecmVhZG9ubHkv
KTsKKyAgICAgICAgICAgIG15ICRwcm9wZXJ0eSA9ICIgICAgIiAuICRhdHRyaWJ1dGVUeXBlIC4g
KCRhdHRyaWJ1dGVUeXBlID1+IC9cKiQvID8gIiIgOiAiICIpIC4gJGF0dHJpYnV0ZU5hbWUgLiAi
KCkgY29uc3QiOworCisgICAgICAgICAgICBteSAkYXZhaWxhYmlsaXR5TWFjcm8gPSAiIjsKKyAg
ICAgICAgICAgIG15ICRkZWNsYXJhdGlvblN1ZmZpeCA9ICI7XG4iOworCisgICAgICAgICAgICBB
ZGRGb3J3YXJkRGVjbGFyYXRpb25zRm9yVHlwZSgkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGUs
IDEpOworCisgICAgICAgICAgICAkYXR0cmlidXRlVHlwZSA9IEdldENQUFR5cGUoJGF0dHJpYnV0
ZS0+c2lnbmF0dXJlLT50eXBlLCAxKTsKKyAgICAgICAgICAgIG15ICRzZXR0ZXJOYW1lID0gInNl
dCIgLiB1Y2ZpcnN0KCRhdHRyaWJ1dGVOYW1lKTsKKworICAgICAgICAgICAgJHByb3BlcnR5IC49
ICRkZWNsYXJhdGlvblN1ZmZpeDsKKyAgICAgICAgICAgIHB1c2goQGhlYWRlckF0dHJpYnV0ZXMs
ICRwcm9wZXJ0eSk7CisgICAgICAgICAgICBpZiAoISRhdHRyaWJ1dGVJc1JlYWRvbmx5IGFuZCAh
JGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiUmVwbGFjZWFibGUi
fSkgeworICAgICAgICAgICAgICAgICRwcm9wZXJ0eSA9ICIgICAgdm9pZCAkc2V0dGVyTmFtZSgk
YXR0cmlidXRlVHlwZSkiOworICAgICAgICAgICAgICAgICRwcm9wZXJ0eSAuPSAkZGVjbGFyYXRp
b25TdWZmaXg7CisgICAgICAgICAgICAgICAgcHVzaChAaGVhZGVyQXR0cmlidXRlcywgJHByb3Bl
cnR5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHB1c2goQGhlYWRlckNv
bnRlbnQsIEBoZWFkZXJBdHRyaWJ1dGVzKSBpZiBAaGVhZGVyQXR0cmlidXRlcyA+IDA7CisgICAg
fQorCisgICAgbXkgQGhlYWRlckZ1bmN0aW9ucyA9ICgpOworICAgIG15IEBkZXByZWNhdGVkSGVh
ZGVyRnVuY3Rpb25zID0gKCk7CisgICAgbXkgQGludGVyZmFjZUZ1bmN0aW9ucyA9ICgpOworCisg
ICAgIyAtIEFkZCBmdW5jdGlvbnMuCisgICAgaWYgKCRudW1GdW5jdGlvbnMgPiAwKSB7CisgICAg
ICAgIGZvcmVhY2ggbXkgJGZ1bmN0aW9uIChAeyRkYXRhTm9kZS0+ZnVuY3Rpb25zfSkgeworICAg
ICAgICAgICAgbmV4dCBpZiBTaG91bGRTa2lwVHlwZUluSGVhZGVyKCRmdW5jdGlvbik7CisgICAg
ICAgICAgICBteSAkZnVuY3Rpb25OYW1lID0gJGZ1bmN0aW9uLT5zaWduYXR1cmUtPm5hbWU7CisK
KyAgICAgICAgICAgIG15ICRyZXR1cm5UeXBlID0gR2V0Q1BQVHlwZSgkZnVuY3Rpb24tPnNpZ25h
dHVyZS0+dHlwZSwgMCk7CisgICAgICAgICAgICBteSAkbnVtYmVyT2ZQYXJhbWV0ZXJzID0gQHsk
ZnVuY3Rpb24tPnBhcmFtZXRlcnN9OworICAgICAgICAgICAgbXkgJXR5cGVzVG9Gb3J3YXJkRGVj
bGFyZSA9ICgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+dHlwZSA9PiAxKTsKKworICAgICAgICAgICAg
bXkgJHBhcmFtZXRlckluZGV4ID0gMDsKKyAgICAgICAgICAgIG15ICRmdW5jdGlvblNpZyA9ICIk
cmV0dXJuVHlwZSAkZnVuY3Rpb25OYW1lKCI7CisgICAgICAgICAgICBteSAkbWV0aG9kTmFtZSA9
ICRmdW5jdGlvbk5hbWU7CisgICAgICAgICAgICBmb3JlYWNoIG15ICRwYXJhbSAoQHskZnVuY3Rp
b24tPnBhcmFtZXRlcnN9KSB7CisgICAgICAgICAgICAgICAgbXkgJHBhcmFtTmFtZSA9ICRwYXJh
bS0+bmFtZTsKKyAgICAgICAgICAgICAgICBteSAkcGFyYW1UeXBlID0gR2V0Q1BQVHlwZSgkcGFy
YW0tPnR5cGUsIDEpOworICAgICAgICAgICAgICAgICR0eXBlc1RvRm9yd2FyZERlY2xhcmV7JHBh
cmFtLT50eXBlfSA9IDE7CisKKyAgICAgICAgICAgICAgICAkZnVuY3Rpb25TaWcgLj0gIiwgIiBp
ZiAkcGFyYW1ldGVySW5kZXggPj0gMTsKKyAgICAgICAgICAgICAgICAkZnVuY3Rpb25TaWcgLj0g
IiRwYXJhbVR5cGUgJHBhcmFtTmFtZSI7CisgICAgICAgICAgICAgICAgJHBhcmFtZXRlckluZGV4
Kys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAkZnVuY3Rpb25TaWcgLj0gIikiOworICAg
ICAgICAgICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlB1cmVJbnRlcmZh
Y2UifSkgeworICAgICAgICAgICAgICAgIHB1c2goQGludGVyZmFjZUZ1bmN0aW9ucywgIiAgICB2
aXJ0dWFsICIgLiAkZnVuY3Rpb25TaWcgLiAiID0gMDtcbiIpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgbXkgJGZ1bmN0aW9uRGVjbGFyYXRpb24gPSAkZnVuY3Rpb25TaWc7CisgICAgICAg
ICAgICAkZnVuY3Rpb25EZWNsYXJhdGlvbiAuPSAiO1xuIjsKKworICAgICAgICAgICAgZm9yZWFj
aCBteSAkdHlwZSAoa2V5cyAldHlwZXNUb0ZvcndhcmREZWNsYXJlKSB7CisgICAgICAgICAgICAg
ICAgIyBhZGQgYW55IGZvcndhcmQgZGVjbGFyYXRpb25zIHRvIHRoZSBwdWJsaWMgaGVhZGVyIGlm
IGEgZGVwcmVjYXRlZCB2ZXJzaW9uIHdpbGwgYmUgZ2VuZXJhdGVkCisgICAgICAgICAgICAgICAg
QWRkRm9yd2FyZERlY2xhcmF0aW9uc0ZvclR5cGUoJHR5cGUsIDEpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBwdXNoKEBoZWFkZXJGdW5jdGlvbnMsICIgICAgIik7CisgICAgICAgICAg
ICBwdXNoKEBoZWFkZXJGdW5jdGlvbnMsICRmdW5jdGlvbkRlY2xhcmF0aW9uKTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChAaGVhZGVyRnVuY3Rpb25zID4gMCkgeworICAgICAgICAgICAgcHVz
aChAaGVhZGVyQ29udGVudCwgIlxuIikgaWYgQGhlYWRlckF0dHJpYnV0ZXMgPiAwOworICAgICAg
ICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgQGhlYWRlckZ1bmN0aW9ucyk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiXG4iKTsKKyAgICBwdXNoKEBoZWFk
ZXJDb250ZW50LCAiICAgICRpbXBsQ2xhc3NOYW1lV2l0aE5hbWVzcGFjZSogaW1wbCgpIGNvbnN0
O1xuIik7CisKKyAgICBpZiAoQHskZGF0YU5vZGUtPnBhcmVudHN9IGVxIDApIHsKKyAgICAgICAg
cHVzaChAaGVhZGVyQ29udGVudCwgIlxucHJvdGVjdGVkOlxuIik7CisgICAgICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsICIgICAgc3RydWN0ICR7Y2xhc3NOYW1lfVByaXZhdGU7XG4iKTsKKyAgICAg
ICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAke2NsYXNzTmFtZX1Qcml2YXRlKiBtX2ltcGw7
XG4iKTsKKyAgICB9CisKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAifTtcblxuIik7CisKKyAg
ICAjIGZvciBQdXJlSW50ZXJmYWNlIGNsYXNzZXMgYWxzbyBhZGQgdGhlIGludGVyZmFjZSB0aGF0
IHRoZSBjbGllbnQgY29kZSBuZWVkcyB0bworICAgICMgaW1wbGVtZW50CisgICAgaWYgKCRkYXRh
Tm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlB1cmVJbnRlcmZhY2UifSkgeworICAgICAgICBw
dXNoKEBoZWFkZXJDb250ZW50LCAiY2xhc3MgV2ViVXNlciRpbnRlcmZhY2VOYW1lIHtcbiIpOwor
ICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAicHVibGljOlxuIik7CisgICAgICAgIHB1c2go
QGhlYWRlckNvbnRlbnQsICIgICAgdmlydHVhbCB2b2lkIHJlZigpID0gMDtcbiIpOworICAgICAg
ICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHZpcnR1YWwgdm9pZCBkZXJlZigpID0gMDtcblxu
Iik7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsIEBpbnRlcmZhY2VGdW5jdGlvbnMpOwor
ICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiXG5wcm90ZWN0ZWQ6XG4iKTsKKyAgICAgICAg
cHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB2aXJ0dWFsIH5XZWJVc2VyJGludGVyZmFjZU5hbWUo
KSB7fVxuIik7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJ9O1xuXG4iKTsKKyAgICB9
CisKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiV2ViQ29yZTo6JGltcGxDbGFzc05hbWUqIHRv
V2ViQ29yZShjb25zdCAkY2xhc3NOYW1lJik7XG4iKTsKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCAiJGNsYXNzTmFtZSB0b1dlYktpdChXZWJDb3JlOjokaW1wbENsYXNzTmFtZSopO1xuIik7Cisg
ICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlB1cmVJbnRlcmZhY2UifSkg
eworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiJGNsYXNzTmFtZSB0b1dlYktpdChXZWJV
c2VyJGludGVyZmFjZU5hbWUqKTtcbiIpOworICAgIH0KKyAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCAiXG4jZW5kaWZcbiIpOworICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIjZW5kaWYgLy8gJHtj
b25kaXRpb25hbFN0cmluZ31cblxuIikgaWYgJGNvbmRpdGlvbmFsU3RyaW5nOworfQorCitzdWIg
QWRkRWFybHlSZXR1cm5TdGF0ZW1lbnQKK3sKKyAgICBteSAkcmV0dXJuVHlwZSA9IHNoaWZ0Owor
CisgICAgaWYgKCFkZWZpbmVkKCRyZXR1cm5UeXBlKSBvciAkcmV0dXJuVHlwZSBlcSAidm9pZCIp
IHsKKyAgICAgICAgJHJldHVyblR5cGUgPSAiIjsKKyAgICB9IGVsc2lmICgkY29kZUdlbmVyYXRv
ci0+SXNQcmltaXRpdmVUeXBlKCRyZXR1cm5UeXBlKSkgeworICAgICAgICAkcmV0dXJuVHlwZSA9
ICIgMCI7CisgICAgfSBlbHNpZiAoJHJldHVyblR5cGUgZXEgImJvb2wiKSB7CisgICAgICAgICRy
ZXR1cm5UeXBlID0gIiBmYWxzZSI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgJHJldHVyblR5cGUg
PSAiICRyZXR1cm5UeXBlKCkiOworICAgIH0KKworICAgICMgVE9ETzogV2UgY291bGQgc2V0IGV4
Y2VwdGlvbnMgaGVyZSwgaWYgd2Ugd2FudCB0aGF0CisgICAgbXkgJHN0YXRlbWVudCA9ICIgICAg
aWYgKCFpbXBsKCkpXG4iOworICAgICRzdGF0ZW1lbnQgLj0gICAiICAgICAgICByZXR1cm4kcmV0
dXJuVHlwZTtcblxuIjsKKyAgICByZXR1cm4gJHN0YXRlbWVudDsKK30KKworc3ViIEFkZFJldHVy
blN0YXRlbWVudAoreworICAgIG15ICR0eXBlSW5mbyA9IHNoaWZ0OworICAgIG15ICRyZXR1cm5W
YWx1ZSA9IHNoaWZ0OworCisgICAgIyBVc2VkIHRvIGludm9rZSBLVVJMcyAiY29uc3QgU3RyaW5n
JiIgb3BlcmF0b3IKKyAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPklzU3RyaW5nVHlwZSgkdHlwZUlu
Zm8tPnNpZ25hdHVyZS0+dHlwZSkpIHsKKyAgICAgICAgcmV0dXJuICIgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGNvbnN0IFdlYkNvcmU6OlN0cmluZyY+KCRyZXR1cm5WYWx1ZSk7XG4iOworICAgIH0K
KworICAgIHJldHVybiAiICAgIHJldHVybiAkcmV0dXJuVmFsdWU7XG4iOworfQorCitzdWIgR2Vu
ZXJhdGVJbXBsZW1lbnRhdGlvbgoreworICAgIG15ICRvYmplY3QgPSBzaGlmdDsKKyAgICBteSAk
ZGF0YU5vZGUgPSBzaGlmdDsKKworICAgIG15IEBhbmNlc3RvckludGVyZmFjZU5hbWVzID0gKCk7
CisKKyAgICBpZiAoQHskZGF0YU5vZGUtPnBhcmVudHN9ID4gMSkgeworICAgICAgICAkY29kZUdl
bmVyYXRvci0+QWRkTWV0aG9kc0NvbnN0YW50c0FuZEF0dHJpYnV0ZXNGcm9tUGFyZW50Q2xhc3Nl
cygkZGF0YU5vZGUsIFxAYW5jZXN0b3JJbnRlcmZhY2VOYW1lcyk7CisgICAgfQorCisgICAgbXkg
JGludGVyZmFjZU5hbWUgPSAkZGF0YU5vZGUtPm5hbWU7CisgICAgbXkgJGNsYXNzTmFtZSA9IEdl
dENsYXNzTmFtZSgkaW50ZXJmYWNlTmFtZSk7CisgICAgbXkgJGltcGxDbGFzc05hbWUgPSBHZXRJ
bXBsQ2xhc3NOYW1lKCRpbnRlcmZhY2VOYW1lKTsKKyAgICBteSAkcGFyZW50SW1wbENsYXNzTmFt
ZSA9IEdldFBhcmVudEltcGxDbGFzc05hbWUoJGRhdGFOb2RlKTsKKyAgICBteSAkaW1wbENsYXNz
TmFtZVdpdGhOYW1lc3BhY2UgPSAiV2ViQ29yZTo6IiAuICRpbXBsQ2xhc3NOYW1lOworICAgIG15
ICRiYXNlQ2xhc3MgPSAiV2ViRE9NJHBhcmVudEltcGxDbGFzc05hbWUiOworICAgIG15ICRjb25k
aXRpb25hbCA9ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNvbmRpdGlvbmFsIn07
CisKKyAgICBteSAkbnVtQXR0cmlidXRlcyA9IEB7JGRhdGFOb2RlLT5hdHRyaWJ1dGVzfTsKKyAg
ICBteSAkbnVtRnVuY3Rpb25zID0gQHskZGF0YU5vZGUtPmZ1bmN0aW9uc307CisKKyAgICAjIC0g
QWRkIGRlZmF1bHQgaGVhZGVyIHRlbXBsYXRlLgorICAgIEBpbXBsQ29udGVudEhlYWRlciA9IHNw
bGl0KCJcciIsICRpbXBsZW1lbnRhdGlvbkxpY2Vuc2VUZW1wbGF0ZSk7CisKKyAgICAjIC0gSU5D
TFVERVMgLQorICAgIHB1c2goQGltcGxDb250ZW50SGVhZGVyLCAiXG4jaW5jbHVkZSBcImNvbmZp
Zy5oXCJcbiIpOworICAgIG15ICRjb25kaXRpb25hbFN0cmluZyA9IEdlbmVyYXRlQ29uZGl0aW9u
YWxTdHJpbmcoJGRhdGFOb2RlKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudEhlYWRlciwgIlxuI2lm
ICR7Y29uZGl0aW9uYWxTdHJpbmd9XG5cbiIpIGlmICRjb25kaXRpb25hbFN0cmluZzsKKyAgICBw
dXNoKEBpbXBsQ29udGVudEhlYWRlciwgIiNpbmNsdWRlIFwiJGNsYXNzTmFtZS5oXCJcblxuIik7
CisKKyAgICAkaW1wbEluY2x1ZGVzeyJXZWJFeGNlcHRpb25IYW5kbGVyLmgifSA9IDE7CisgICAg
JGltcGxJbmNsdWRlc3siJGltcGxDbGFzc05hbWUuaCJ9ID0gMTsKKyAgICBAaW1wbENvbnRlbnQg
PSAoKTsKKworICAgIHB1c2goQGltcGxDb250ZW50LCAiI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD5c
biIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD5cblxu
Iik7CisKKyAgICAjIFByaXZhdGUgZGF0YXN0cnVjdHVyZSwgZW5jYXBzdWxhdGluZyBXZWJDb3Jl
IHR5cGVzCisgICAgaWYgKEB7JGRhdGFOb2RlLT5wYXJlbnRzfSBlcSAwKSB7CisgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAic3RydWN0ICR7Y2xhc3NOYW1lfTo6JHtjbGFzc05hbWV9UHJpdmF0
ZSB7XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJHtjbGFzc05hbWV9UHJp
dmF0ZSgkaW1wbENsYXNzTmFtZVdpdGhOYW1lc3BhY2UqIG9iamVjdCA9IDApXG4iKTsKKyAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIDogaW1wbChvYmplY3QpXG4iKTsKKyAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAge1xuIik7CisgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIH1cblxuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFJlZlB0
cjwkaW1wbENsYXNzTmFtZVdpdGhOYW1lc3BhY2U+IGltcGw7XG4iKTsKKyAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICJ9O1xuXG4iKTsKKyAgICB9CisKKyAgICAjIENvbnN0cnVjdG9yCisgICAg
cHVzaChAaW1wbENvbnRlbnQsICIke2NsYXNzTmFtZX06OiRjbGFzc05hbWUoKVxuIik7CisgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgOiAke2Jhc2VDbGFzc30oKVxuIik7CisgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgLCBtX2ltcGwoMClcbiIpIGlmIChAeyRkYXRhTm9kZS0+cGFyZW50
c30gZXEgMCk7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKKyAgICBwdXNoKEBpbXBs
Q29udGVudCwgIn1cblxuIik7CisKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiR7Y2xhc3NOYW1l
fTo6JGNsYXNzTmFtZSgkaW1wbENsYXNzTmFtZVdpdGhOYW1lc3BhY2UqIGltcGwpXG4iKTsKKyAg
ICBpZiAoQHskZGF0YU5vZGUtPnBhcmVudHN9IGVxIDApIHsKKyAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgOiAke2Jhc2VDbGFzc30oKVxuIik7CisgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgICwgbV9pbXBsKG5ldyAke2NsYXNzTmFtZX1Qcml2YXRlKGltcGwpKVxuIik7Cisg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CisgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAifVxuXG4iKTsKKworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiR7Y2xhc3NOYW1l
fTo6JHtjbGFzc05hbWV9KGNvbnN0ICR7Y2xhc3NOYW1lfSYgY29weSlcbiIpOworICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICA6ICR7YmFzZUNsYXNzfSgpXG4iKTsKKyAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICJ7XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
bV9pbXBsID0gY29weS5pbXBsKCkgPyBuZXcgJHtjbGFzc05hbWV9UHJpdmF0ZShjb3B5LmltcGwo
KSkgOiAwO1xuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKKworICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiRpbXBsQ2xhc3NOYW1lV2l0aE5hbWVzcGFjZSogJHtj
bGFzc05hbWV9OjppbXBsKCkgY29uc3RcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IntcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gbV9pbXBsID8g
bV9pbXBsLT5pbXBsLmdldCgpIDogMDtcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
In1cblxuIik7CisKKyAgICAgICAgIyBEZXN0cnVjdG9yCisgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiJHtjbGFzc05hbWV9Ojp+JGNsYXNzTmFtZSgpXG4iKTsKKyAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICJ7XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgZGVsZXRl
IG1faW1wbDtcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBtX2ltcGwgPSAw
O1xuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICA6ICR7YmFzZUNsYXNzfShpbXBsKVxu
Iik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CisgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAifVxuXG4iKTsKKworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiRpbXBs
Q2xhc3NOYW1lV2l0aE5hbWVzcGFjZSogJHtjbGFzc05hbWV9OjppbXBsKCkgY29uc3RcbiIpOwor
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8JGltcGxDbGFzc05hbWVXaXRoTmFtZXNwYWNl
Kj4oJHtiYXNlQ2xhc3N9OjppbXBsKCkpO1xuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAifVxuXG4iKTsKKyAgICB9CisKKyAgICAjIFNUQVJUIGltcGxlbWVudGF0aW9uCisgICAgJWF0
dHJpYnV0ZU5hbWVzID0gKCk7CisKKyAgICAjIC0gQXR0cmlidXRlcworICAgIGlmICgkbnVtQXR0
cmlidXRlcyA+IDApIHsKKyAgICAgICAgZm9yZWFjaCBteSAkYXR0cmlidXRlIChAeyRkYXRhTm9k
ZS0+YXR0cmlidXRlc30pIHsKKyAgICAgICAgICAgIG5leHQgaWYgU2hvdWxkU2tpcFR5cGVJbklt
cGxlbWVudGF0aW9uKCRhdHRyaWJ1dGUpOworICAgICAgICAgICAgQWRkSW5jbHVkZXNGb3JUeXBl
KCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+dHlwZSk7CisKKyAgICAgICAgICAgIG15ICRpZGxUeXBl
ID0gJGNvZGVHZW5lcmF0b3ItPlN0cmlwTW9kdWxlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+dHlw
ZSk7CisKKyAgICAgICAgICAgIG15ICRhdHRyaWJ1dGVOYW1lID0gJGF0dHJpYnV0ZS0+c2lnbmF0
dXJlLT5uYW1lOworICAgICAgICAgICAgbXkgJGF0dHJpYnV0ZVR5cGUgPSBHZXRDUFBUeXBlKCRh
dHRyaWJ1dGUtPnNpZ25hdHVyZS0+dHlwZSwgMCk7CisgICAgICAgICAgICBteSAkYXR0cmlidXRl
SXNSZWFkb25seSA9ICgkYXR0cmlidXRlLT50eXBlID1+IC9ecmVhZG9ubHkvKTsKKworICAgICAg
ICAgICAgJGF0dHJpYnV0ZU5hbWVzeyRhdHRyaWJ1dGVOYW1lfSA9IDE7CisKKyAgICAgICAgICAg
ICMgLSBHRVRURVIKKyAgICAgICAgICAgIG15ICRnZXR0ZXJTaWcgPSAiJGF0dHJpYnV0ZVR5cGUg
JGNsYXNzTmFtZVw6XDokYXR0cmlidXRlTmFtZSgpIGNvbnN0XG4iOworICAgICAgICAgICAgbXkg
JGhhc0dldHRlckV4Y2VwdGlvbiA9IEB7JGF0dHJpYnV0ZS0+Z2V0dGVyRXhjZXB0aW9uc307Cisg
ICAgICAgICAgICBteSAkZ2V0dGVyQ29udGVudEhlYWQ7CisgICAgICAgICAgICBteSAkcmVmbGVj
dCA9ICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlJlZmxlY3Qi
fTsKKyAgICAgICAgICAgIG15ICRyZWZsZWN0VVJMID0gJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPnsiUmVmbGVjdFVSTCJ9OworICAgICAgICAgICAgaWYgKCRyZWZs
ZWN0IHx8ICRyZWZsZWN0VVJMKSB7CisgICAgICAgICAgICAgICAgbXkgJGNvbnRlbnRBdHRyaWJ1
dGVOYW1lID0gKCgkcmVmbGVjdCB8fCAkcmVmbGVjdFVSTCkgZXEgIjEiKSA/ICRhdHRyaWJ1dGVO
YW1lIDogKCRyZWZsZWN0IHx8ICRyZWZsZWN0VVJMKTsKKyAgICAgICAgICAgICAgICBteSAkbmFt
ZXNwYWNlID0gJGNvZGVHZW5lcmF0b3ItPk5hbWVzcGFjZUZvckF0dHJpYnV0ZU5hbWUoJGludGVy
ZmFjZU5hbWUsICRjb250ZW50QXR0cmlidXRlTmFtZSk7CisgICAgICAgICAgICAgICAgJGltcGxJ
bmNsdWRlc3siJHtuYW1lc3BhY2V9LmgifSA9IDE7CisgICAgICAgICAgICAgICAgbXkgJGdldEF0
dHJpYnV0ZUZ1bmN0aW9uTmFtZSA9ICRyZWZsZWN0VVJMID8gImdldFVSTEF0dHJpYnV0ZSIgOiAi
Z2V0QXR0cmlidXRlIjsKKyAgICAgICAgICAgICAgICAkZ2V0dGVyQ29udGVudEhlYWQgPSAiaW1w
bCgpLT4ke2dldEF0dHJpYnV0ZUZ1bmN0aW9uTmFtZX0oV2ViQ29yZTo6JHtuYW1lc3BhY2V9Ojok
e2NvbnRlbnRBdHRyaWJ1dGVOYW1lfUF0dHIiOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAkZ2V0dGVyQ29udGVudEhlYWQgPSAiaW1wbCgpLT4iIC4gJGNvZGVHZW5lcmF0
b3ItPldLX2xjZmlyc3QoJGF0dHJpYnV0ZU5hbWUpIC4gIigiOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgbXkgJGdldHRlckNvbnRlbnRUYWlsID0gIikiOworCisgICAgICAgICAgICAjIFNw
ZWNpYWwgY2FzZXMKKyAgICAgICAgICAgIG15IEBjdXN0b21HZXR0ZXJDb250ZW50ID0gKCk7IAor
ICAgICAgICAgICAgaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57IkNvbnZlcnRUb1N0cmluZyJ9KSB7CisgICAgICAgICAgICAgICAgJGdldHRlckNvbnRlbnRI
ZWFkID0gIldlYkNvcmU6OlN0cmluZzo6bnVtYmVyKCIgLiAkZ2V0dGVyQ29udGVudEhlYWQ7Cisg
ICAgICAgICAgICAgICAgJGdldHRlckNvbnRlbnRUYWlsIC49ICIpIjsKKyAgICAgICAgICAgIH0g
ZWxzaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNvbnZl
cnRGcm9tU3RyaW5nIn0pIHsKKyAgICAgICAgICAgICAgICAkZ2V0dGVyQ29udGVudFRhaWwgLj0g
Ii50b0ludCgpIjsKKyAgICAgICAgICAgIH0gZWxzaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+
dHlwZSBlcSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlIikgeworICAgICAgICAgICAgICAgICRnZXR0
ZXJDb250ZW50SGVhZCA9ICIkZ2V0dGVyQ29udGVudEhlYWQiOworICAgICAgICAgICAgICAgICRn
ZXR0ZXJDb250ZW50VGFpbCAuPSAiLT50b1N0cmluZygpIjsgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICB9IGVsc2lmIChDb252ZXJzaW9uTmVlZGVkKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+
dHlwZSkpIHsKKyAgICAgICAgICAgICAgICAkZ2V0dGVyQ29udGVudEhlYWQgPSAidG9XZWJLaXQo
V1RGOjpnZXRQdHIoJGdldHRlckNvbnRlbnRIZWFkIjsKKyAgICAgICAgICAgICAgICAkZ2V0dGVy
Q29udGVudFRhaWwgLj0gIikpIjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbXkgJGdl
dHRlckNvbnRlbnQ7CisgICAgICAgICAgICBpZiAoJGhhc0dldHRlckV4Y2VwdGlvbikgeworICAg
ICAgICAgICAgICAgICRnZXR0ZXJDb250ZW50ID0gJGdldHRlckNvbnRlbnRIZWFkIC4gImVjIiAu
ICRnZXR0ZXJDb250ZW50VGFpbDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgJGdldHRlckNvbnRlbnQgPSAkZ2V0dGVyQ29udGVudEhlYWQgLiAkZ2V0dGVyQ29udGVudFRh
aWw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG15ICRhdHRyaWJ1dGVDb25kaXRpb25h
bFN0cmluZyA9IEdlbmVyYXRlQ29uZGl0aW9uYWxTdHJpbmcoJGF0dHJpYnV0ZS0+c2lnbmF0dXJl
KTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiI2lmICR7YXR0cmlidXRlQ29uZGl0
aW9uYWxTdHJpbmd9XG4iKSBpZiAkYXR0cmlidXRlQ29uZGl0aW9uYWxTdHJpbmc7CisKKyAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAkZ2V0dGVyU2lnKTsKKyAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAie1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgQWRk
RWFybHlSZXR1cm5TdGF0ZW1lbnQoJGF0dHJpYnV0ZVR5cGUpKTsKKyAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCBAY3VzdG9tR2V0dGVyQ29udGVudCk7CisgICAgICAgICAgICBpZiAoJGhh
c0dldHRlckV4Y2VwdGlvbikgeworICAgICAgICAgICAgICAgICMgRGlmZmVyZW50aWF0ZWQgYmV0
d2VlbiB3aGVuIHRoZSByZXR1cm4gdHlwZSBpcyBhIHBvaW50ZXIgYW5kCisgICAgICAgICAgICAg
ICAgIyBub3QgZm9yIHdoaXRlIHNwYWNlIGlzc3VlIChpZS4gRm9vICpyZXN1bHQgdnMuIGludCBy
ZXN1bHQpLgorICAgICAgICAgICAgICAgIGlmICgkYXR0cmlidXRlVHlwZSA9fiAvXCokLykgewor
ICAgICAgICAgICAgICAgICAgICAkZ2V0dGVyQ29udGVudCA9ICRhdHRyaWJ1dGVUeXBlIC4gInJl
c3VsdCA9ICIgLiAkZ2V0dGVyQ29udGVudDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICAkZ2V0dGVyQ29udGVudCA9ICRhdHRyaWJ1dGVUeXBlIC4gIiByZXN1
bHQgPSAiIC4gJGdldHRlckNvbnRlbnQ7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJGV4Y2VwdGlvbkluaXRcbiIpOworICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICRnZXR0ZXJDb250ZW50O1xuIik7Cisg
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJGV4Y2VwdGlvblJhaXNlT25F
cnJvclxuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsIEFkZFJldHVyblN0
YXRlbWVudCgkYXR0cmlidXRlLCAicmVzdWx0IikpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgQWRkUmV0dXJuU3RhdGVtZW50KCRhdHRy
aWJ1dGUsICRnZXR0ZXJDb250ZW50KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIn1cblxuIik7CisKKyAgICAgICAgICAgICMgLSBTRVRURVIKKyAgICAg
ICAgICAgIGlmICghJGF0dHJpYnV0ZUlzUmVhZG9ubHkgYW5kICEkYXR0cmlidXRlLT5zaWduYXR1
cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJSZXBsYWNlYWJsZSJ9KSB7CisgICAgICAgICAgICAg
ICAgIyBFeGNlcHRpb24gaGFuZGxpbmcKKyAgICAgICAgICAgICAgICBteSAkaGFzU2V0dGVyRXhj
ZXB0aW9uID0gQHskYXR0cmlidXRlLT5zZXR0ZXJFeGNlcHRpb25zfTsKKworICAgICAgICAgICAg
ICAgIG15ICRjb3JlU2V0dGVyTmFtZSA9ICJzZXQiIC4gJGNvZGVHZW5lcmF0b3ItPldLX3VjZmly
c3QoJGF0dHJpYnV0ZU5hbWUpOworICAgICAgICAgICAgICAgIG15ICRzZXR0ZXJOYW1lID0gInNl
dCIgLiB1Y2ZpcnN0KCRhdHRyaWJ1dGVOYW1lKTsKKyAgICAgICAgICAgICAgICBteSAkYXJnTmFt
ZSA9ICJuZXciIC4gdWNmaXJzdCgkYXR0cmlidXRlTmFtZSk7CisgICAgICAgICAgICAgICAgbXkg
JGFyZyA9IEdldENQUFR5cGVHZXR0ZXIoJGFyZ05hbWUsICRpZGxUeXBlKTsKKworICAgICAgICAg
ICAgICAgICMgVGhlIGRlZmluaXRpb24gb2YgQ29udmVydEZyb21TdHJpbmcgYW5kIENvbnZlcnRU
b1N0cmluZyBpcyBmbGlwcGVkIGZvciB0aGUgc2V0dGVyCisgICAgICAgICAgICAgICAgaWYgKCRh
dHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNvbnZlcnRGcm9tU3Ry
aW5nIn0pIHsKKyAgICAgICAgICAgICAgICAgICAgJGFyZyA9ICJXZWJDb3JlOjpTdHJpbmc6Om51
bWJlcigkYXJnKSI7CisgICAgICAgICAgICAgICAgfSBlbHNpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0
dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29udmVydFRvU3RyaW5nIn0pIHsKKyAgICAgICAg
ICAgICAgICAgICAgJGFyZyA9ICJXZWJDb3JlOjpTdHJpbmcoJGFyZykudG9JbnQoKSI7CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbXkgJGF0dHJpYnV0ZVR5cGUgPSBHZXRD
UFBUeXBlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+dHlwZSwgMSk7CisgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICJ2b2lkICRjbGFzc05hbWVcOlw6JHNldHRlck5hbWUoJGF0dHJp
YnV0ZVR5cGUgJGFyZ05hbWUpXG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIntcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCBBZGRFYXJseVJl
dHVyblN0YXRlbWVudCgpKTsKKworICAgICAgICAgICAgICAgIG15ICRyZWZsZWN0ID0gJGF0dHJp
YnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiUmVmbGVjdCJ9OworICAgICAg
ICAgICAgICAgIG15ICRyZWZsZWN0VVJMID0gJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiUmVmbGVjdFVSTCJ9OworICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgICRleGNlcHRpb25Jbml0XG4iKSBpZiAkaGFzU2V0dGVyRXhjZXB0aW9uOwor
ICAgICAgICAgICAgICAgIG15ICRlYyA9ICRoYXNTZXR0ZXJFeGNlcHRpb24gPyAiLCBlYyIgOiAi
IjsKKyAgICAgICAgICAgICAgICBpZiAoJHJlZmxlY3QgfHwgJHJlZmxlY3RVUkwpIHsKKyAgICAg
ICAgICAgICAgICAgICAgbXkgJGNvbnRlbnRBdHRyaWJ1dGVOYW1lID0gKCgkcmVmbGVjdCB8fCAk
cmVmbGVjdFVSTCkgZXEgIjEiKSA/ICRhdHRyaWJ1dGVOYW1lIDogKCRyZWZsZWN0IHx8ICRyZWZs
ZWN0VVJMKTsKKyAgICAgICAgICAgICAgICAgICAgbXkgJG5hbWVzcGFjZSA9ICRjb2RlR2VuZXJh
dG9yLT5OYW1lc3BhY2VGb3JBdHRyaWJ1dGVOYW1lKCRpbnRlcmZhY2VOYW1lLCAkY29udGVudEF0
dHJpYnV0ZU5hbWUpOworICAgICAgICAgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyIke25hbWVz
cGFjZX0uaCJ9ID0gMTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgaW1wbCgpLT5zZXRBdHRyaWJ1dGUoV2ViQ29yZTo6JHtuYW1lc3BhY2V9Ojoke2NvbnRlbnRB
dHRyaWJ1dGVOYW1lfUF0dHIsICRhcmckZWMpO1xuIik7CisgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaW1wbCgpLT4k
Y29yZVNldHRlck5hbWUoJGFyZyRlYyk7XG4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJGV4Y2VwdGlvblJhaXNlT25FcnJvclxu
IikgaWYgJGhhc1NldHRlckV4Y2VwdGlvbjsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIn1cblxuIik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiI2VuZGlmXG4iKSBpZiAkYXR0cmlidXRlQ29uZGl0aW9uYWxTdHJpbmc7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICAjIC0gRnVuY3Rpb25zCisgICAgaWYgKCRudW1GdW5jdGlvbnMg
PiAwKSB7CisgICAgICAgIGZvcmVhY2ggbXkgJGZ1bmN0aW9uIChAeyRkYXRhTm9kZS0+ZnVuY3Rp
b25zfSkgeworICAgICAgICAgICAgIyBUcmVhdCBQdXJlSW50ZXJmYWNlIGFzIEN1c3RvbSBhcyB3
ZWxsLCBzaW5jZSB0aGUgV2ViQ29yZSB2ZXJzaW9ucyB3aWxsIHRha2UgYSBzY3JpcHQgY29udGV4
dCBhcyB3ZWxsCisgICAgICAgICAgICBuZXh0IGlmIFNob3VsZFNraXBUeXBlSW5JbXBsZW1lbnRh
dGlvbigkZnVuY3Rpb24pIHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlB1cmVJ
bnRlcmZhY2UifTsKKyAgICAgICAgICAgIEFkZEluY2x1ZGVzRm9yVHlwZSgkZnVuY3Rpb24tPnNp
Z25hdHVyZS0+dHlwZSk7CisKKyAgICAgICAgICAgIG15ICRmdW5jdGlvbk5hbWUgPSAkZnVuY3Rp
b24tPnNpZ25hdHVyZS0+bmFtZTsKKyAgICAgICAgICAgIG15ICRyZXR1cm5UeXBlID0gR2V0Q1BQ
VHlwZSgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+dHlwZSwgMCk7CisgICAgICAgICAgICBteSAkaGFz
UGFyYW1ldGVycyA9IEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfTsKKyAgICAgICAgICAgIG15ICRy
YWlzZXNFeGNlcHRpb25zID0gQHskZnVuY3Rpb24tPnJhaXNlc0V4Y2VwdGlvbnN9OworCisgICAg
ICAgICAgICBteSBAcGFyYW1ldGVyTmFtZXMgPSAoKTsKKyAgICAgICAgICAgIG15IEBuZWVkc0Fz
c2VydCA9ICgpOworICAgICAgICAgICAgbXkgJW5lZWRzQ3VzdG9tID0gKCk7CisKKyAgICAgICAg
ICAgIG15ICRwYXJhbWV0ZXJJbmRleCA9IDA7CisKKyAgICAgICAgICAgICMgRklYTUU6IEhhbmRs
ZSBDYWxsYmFjayBzdXBwb3J0LCB3ZSdyZSBqdXN0IHBhc3NpbmcgMCBhcyBTY3JpcHRFeGVjdXRp
b25Db250ZXh0IGZvciBub3cuCisgICAgICAgICAgICBwdXNoKEBwYXJhbWV0ZXJOYW1lcywgIjAi
KSBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2FsbGJhY2sifSk7CisKKyAg
ICAgICAgICAgIG15ICRmdW5jdGlvblNpZyA9ICIkcmV0dXJuVHlwZSAkY2xhc3NOYW1lXDpcOiRm
dW5jdGlvbk5hbWUoIjsKKyAgICAgICAgICAgIGZvcmVhY2ggbXkgJHBhcmFtIChAeyRmdW5jdGlv
bi0+cGFyYW1ldGVyc30pIHsKKyAgICAgICAgICAgICAgICBteSAkcGFyYW1OYW1lID0gJHBhcmFt
LT5uYW1lOworICAgICAgICAgICAgICAgIG15ICRwYXJhbVR5cGUgPSBHZXRDUFBUeXBlKCRwYXJh
bS0+dHlwZSwgMSk7CisKKyAgICAgICAgICAgICAgICAjIG1ha2UgYSBuZXcgcGFyYW1ldGVyIG5h
bWUgaWYgdGhlIG9yaWdpbmFsIGNvbmZsaWN0cyB3aXRoIGEgcHJvcGVydHkgbmFtZQorICAgICAg
ICAgICAgICAgICRwYXJhbU5hbWUgPSAiaW4iIC4gdWNmaXJzdCgkcGFyYW1OYW1lKSBpZiAkYXR0
cmlidXRlTmFtZXN7JHBhcmFtTmFtZX07CisKKyAgICAgICAgICAgICAgICBBZGRJbmNsdWRlc0Zv
clR5cGUoJHBhcmFtLT50eXBlKTsKKworICAgICAgICAgICAgICAgIG15ICRpZGxUeXBlID0gJGNv
ZGVHZW5lcmF0b3ItPlN0cmlwTW9kdWxlKCRwYXJhbS0+dHlwZSk7CisgICAgICAgICAgICAgICAg
bXkgJGltcGxHZXR0ZXIgPSBHZXRDUFBUeXBlR2V0dGVyKCRwYXJhbU5hbWUsICRpZGxUeXBlKTsK
KworICAgICAgICAgICAgICAgIHB1c2goQHBhcmFtZXRlck5hbWVzLCAkaW1wbEdldHRlcik7Cisg
ICAgICAgICAgICAgICAgJG5lZWRzQ3VzdG9teyJOb2RlVG9SZXR1cm4ifSA9ICRwYXJhbU5hbWUg
aWYgJHBhcmFtLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiUmV0dXJuIn07CisKKyAgICAgICAgICAg
ICAgICB1bmxlc3MgKCRjb2RlR2VuZXJhdG9yLT5Jc1ByaW1pdGl2ZVR5cGUoJGlkbFR5cGUpIG9y
ICRjb2RlR2VuZXJhdG9yLT5Jc1N0cmluZ1R5cGUoJGlkbFR5cGUpKSB7CisgICAgICAgICAgICAg
ICAgICAgIHB1c2goQG5lZWRzQXNzZXJ0LCAiICAgIEFTU0VSVCgkcGFyYW1OYW1lKTtcbiIpOwor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICRmdW5jdGlvblNpZyAuPSAiLCAi
IGlmICRwYXJhbWV0ZXJJbmRleCA+PSAxOworICAgICAgICAgICAgICAgICRmdW5jdGlvblNpZyAu
PSAiJHBhcmFtVHlwZSAkcGFyYW1OYW1lIjsKKyAgICAgICAgICAgICAgICAkcGFyYW1ldGVySW5k
ZXgrKzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgJGZ1bmN0aW9uU2lnIC49ICIpIjsK
KworICAgICAgICAgICAgbXkgQGZ1bmN0aW9uQ29udGVudCA9ICgpOworICAgICAgICAgICAgcHVz
aChAcGFyYW1ldGVyTmFtZXMsICJlYyIpIGlmICRyYWlzZXNFeGNlcHRpb25zOworICAgICAgICAg
ICAgbXkgJGNvbnRlbnQgPSAiaW1wbCgpLT4iIC4gJGNvZGVHZW5lcmF0b3ItPldLX2xjZmlyc3Qo
JGZ1bmN0aW9uTmFtZSkgLiAiKCIgLiBqb2luKCIsICIsIEBwYXJhbWV0ZXJOYW1lcykgLiAiKSI7
IAorCisgICAgICAgICAgICBpZiAoJHJldHVyblR5cGUgZXEgInZvaWQiKSB7CisgICAgICAgICAg
ICAgICAgIyBTcGVjaWFsIGNhc2UgJ3ZvaWQnIHJldHVybiB0eXBlLgorICAgICAgICAgICAgICAg
IGlmICgkcmFpc2VzRXhjZXB0aW9ucykgeworICAgICAgICAgICAgICAgICAgICBwdXNoKEBmdW5j
dGlvbkNvbnRlbnQsICIgICAgJGV4Y2VwdGlvbkluaXRcbiIpOworICAgICAgICAgICAgICAgICAg
ICBwdXNoKEBmdW5jdGlvbkNvbnRlbnQsICIgICAgJGNvbnRlbnQ7XG4iKTsKKyAgICAgICAgICAg
ICAgICAgICAgcHVzaChAZnVuY3Rpb25Db250ZW50LCAiICAgICRleGNlcHRpb25SYWlzZU9uRXJy
b3JcbiIpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHB1
c2goQGZ1bmN0aW9uQ29udGVudCwgIiAgICAkY29udGVudDtcbiIpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0gZWxzaWYgKGRlZmluZWQgJG5lZWRzQ3VzdG9teyJOb2RlVG9SZXR1
cm4ifSkgeworICAgICAgICAgICAgICAgICMgVE9ETzogVGhpcyBpcyBpbXBvcnRhbnQgdG8gZW5h
YmxlLCBvbmNlIHdlIGNhcmUgYWJvdXQgY3VzdG9tIGNvZGUhCisKKyAgICAgICAgICAgICAgICAj
IFNwZWNpYWwgY2FzZSB0aGUgaW5zZXJ0QmVmb3JlLCByZXBsYWNlQ2hpbGQsIHJlbW92ZUNoaWxk
IAorICAgICAgICAgICAgICAgICMgYW5kIGFwcGVuZENoaWxkIGZ1bmN0aW9ucyBmcm9tIERPTU5v
ZGUgCisgICAgICAgICAgICAgICAgbXkgJHRvUmV0dXJuID0gJG5lZWRzQ3VzdG9teyJOb2RlVG9S
ZXR1cm4ifTsKKyAgICAgICAgICAgICAgICBpZiAoJHJhaXNlc0V4Y2VwdGlvbnMpIHsKKyAgICAg
ICAgICAgICAgICAgICAgcHVzaChAZnVuY3Rpb25Db250ZW50LCAiICAgICRleGNlcHRpb25Jbml0
XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAZnVuY3Rpb25Db250ZW50LCAiICAgIGlm
ICgkY29udGVudClcbiIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEBmdW5jdGlvbkNvbnRl
bnQsICIgICAgICAgIHJldHVybiAkdG9SZXR1cm47XG4iKTsKKyAgICAgICAgICAgICAgICAgICAg
cHVzaChAZnVuY3Rpb25Db250ZW50LCAiICAgICRleGNlcHRpb25SYWlzZU9uRXJyb3JcbiIpOwor
ICAgICAgICAgICAgICAgICAgICBwdXNoKEBmdW5jdGlvbkNvbnRlbnQsICIgICAgcmV0dXJuICRj
bGFzc05hbWUoKTtcbiIpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgIHB1c2goQGZ1bmN0aW9uQ29udGVudCwgIiAgICBpZiAoJGNvbnRlbnQpXG4iKTsKKyAg
ICAgICAgICAgICAgICAgICAgcHVzaChAZnVuY3Rpb25Db250ZW50LCAiICAgICAgICByZXR1cm4g
JHRvUmV0dXJuO1xuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGZ1bmN0aW9uQ29udGVu
dCwgIiAgICByZXR1cm4gTlVMTDtcbiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKENvbnZlcnNpb25OZWVkZWQoJGZ1bmN0aW9u
LT5zaWduYXR1cmUtPnR5cGUpKSB7CisgICAgICAgICAgICAgICAgICAgICRjb250ZW50ID0gInRv
V2ViS2l0KFdURjo6Z2V0UHRyKCRjb250ZW50KSkiOworICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIGlmICgkcmFpc2VzRXhjZXB0aW9ucykgeworICAgICAgICAgICAgICAgICAg
ICAjIERpZmZlcmVudGlhdGVkIGJldHdlZW4gd2hlbiB0aGUgcmV0dXJuIHR5cGUgaXMgYSBwb2lu
dGVyIGFuZAorICAgICAgICAgICAgICAgICAgICAjIG5vdCBmb3Igd2hpdGUgc3BhY2UgaXNzdWUg
KGllLiBGb28gKnJlc3VsdCB2cy4gaW50IHJlc3VsdCkuCisgICAgICAgICAgICAgICAgICAgIGlm
ICgkcmV0dXJuVHlwZSA9fiAvXCokLykgeworICAgICAgICAgICAgICAgICAgICAgICAgJGNvbnRl
bnQgPSAkcmV0dXJuVHlwZSAuICJyZXN1bHQgPSAiIC4gJGNvbnRlbnQ7CisgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAkY29udGVudCA9ICRyZXR1
cm5UeXBlIC4gIiByZXN1bHQgPSAiIC4gJGNvbnRlbnQ7CisgICAgICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgICAgICBwdXNoKEBmdW5jdGlvbkNvbnRlbnQsICIgICAgJGV4Y2Vw
dGlvbkluaXRcbiIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEBmdW5jdGlvbkNvbnRlbnQs
ICIgICAgJGNvbnRlbnQ7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAZnVuY3Rpb25D
b250ZW50LCAiICAgICRleGNlcHRpb25SYWlzZU9uRXJyb3JcbiIpOworICAgICAgICAgICAgICAg
ICAgICBwdXNoKEBmdW5jdGlvbkNvbnRlbnQsICIgICAgcmV0dXJuIHJlc3VsdDtcbiIpOworICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGZ1bmN0aW9u
Q29udGVudCwgIiAgICByZXR1cm4gJGNvbnRlbnQ7XG4iKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiJGZ1bmN0aW9u
U2lnXG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CisgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgQWRkRWFybHlSZXR1cm5TdGF0ZW1lbnQoJHJldHVyblR5
cGUpKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCBAZnVuY3Rpb25Db250ZW50KTsK
KyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKKworICAgICAgICAgICAg
IyBDbGVhciB0aGUgaGFzaAorICAgICAgICAgICAgJW5lZWRzQ3VzdG9tID0gKCk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICAjIEVORCBpbXBsZW1lbnRhdGlvbgorCisgICAgIyBHZW5lcmF0ZSBp
bnRlcm5hbCBpbnRlcmZhY2VzCisgICAgcHVzaChAaW1wbENvbnRlbnQsICJXZWJDb3JlOjokaW1w
bENsYXNzTmFtZSogdG9XZWJDb3JlKGNvbnN0ICRjbGFzc05hbWUmIHdyYXBwZXIpXG4iKTsKKyAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IHJldHVybiB3cmFwcGVyLmltcGwoKTtcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAifVxu
XG4iKTsKKworICAgIHB1c2goQGltcGxDb250ZW50LCAiJGNsYXNzTmFtZSB0b1dlYktpdChXZWJD
b3JlOjokaW1wbENsYXNzTmFtZSogdmFsdWUpXG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwg
IntcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiAkY2xhc3NOYW1lKHZh
bHVlKTtcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuIik7CisKKyAgICAjIC0gRW5k
IHRoZSBpZmRlZiBjb25kaXRpb25hbCBpZiBuZWNlc3NhcnkKKyAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIlxuI2VuZGlmIC8vICR7Y29uZGl0aW9uYWxTdHJpbmd9XG4iKSBpZiAkY29uZGl0aW9uYWxT
dHJpbmc7Cit9CisKKyMgSW50ZXJuYWwgaGVscGVyCitzdWIgV3JpdGVEYXRhCit7CisgICAgbXkg
JG9iamVjdCA9IHNoaWZ0OworICAgIG15ICRuYW1lID0gc2hpZnQ7CisKKyAgICAjIE9wZW4gZmls
ZXMgZm9yIHdyaXRpbmcuLi4KKyAgICBteSAkaGVhZGVyRmlsZU5hbWUgPSAiJG91dHB1dERpci8i
IC4gJG5hbWUgLiAiLmgiOworICAgIG15ICRpbXBsRmlsZU5hbWUgPSAiJG91dHB1dERpci8iIC4g
JG5hbWUgLiAiLmNwcCI7CisKKyAgICAjIFJlbW92ZSBvbGQgZmlsZXMuCisgICAgdW5saW5rKCRo
ZWFkZXJGaWxlTmFtZSk7CisgICAgdW5saW5rKCRpbXBsRmlsZU5hbWUpOworCisgICAgIyBXcml0
ZSBwdWJsaWMgaGVhZGVyLgorICAgIG9wZW4oSEVBREVSLCAiPiRoZWFkZXJGaWxlTmFtZSIpIG9y
IGRpZSAiQ291bGRuJ3Qgb3BlbiBmaWxlICRoZWFkZXJGaWxlTmFtZSI7CisgICAgCisgICAgcHJp
bnQgSEVBREVSIEBoZWFkZXJDb250ZW50SGVhZGVyOworICAgIHByaW50IEhFQURFUiAiXG4iOwor
ICAgIGZvcmVhY2ggbXkgJGNsYXNzIChzb3J0IGtleXMoJWhlYWRlckZvcndhcmREZWNsYXJhdGlv
bnMpKSB7CisgICAgICAgIGlmICgkY2xhc3MgPX4gLzo6LykgeworICAgICAgICAgICAgbXkgJG5h
bWVzcGFjZVBhcnQgPSAkY2xhc3M7CisgICAgICAgICAgICAkbmFtZXNwYWNlUGFydCA9fiBzLzo6
LiovLzsKKworICAgICAgICAgICAgbXkgJGNsYXNzUGFydCA9ICRjbGFzczsKKyAgICAgICAgICAg
ICRjbGFzc1BhcnQgPX4gcy8ke25hbWVzcGFjZVBhcnR9OjovLzsKKworICAgICAgICAgICAgcHJp
bnQgSEVBREVSICJuYW1lc3BhY2UgJG5hbWVzcGFjZVBhcnQge1xuY2xhc3MgJGNsYXNzUGFydDtc
bn07XG5cbiI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwcmludCBIRUFERVIgImNs
YXNzICRjbGFzcztcbiIKKyAgICAgICAgfQorICAgIH0KKworICAgIG15ICRoYXNGb3J3YXJkRGVj
bGFyYXRpb25zID0ga2V5cyglaGVhZGVyRm9yd2FyZERlY2xhcmF0aW9ucyk7CisgICAgcHJpbnQg
SEVBREVSICJcbiIgaWYgJGhhc0ZvcndhcmREZWNsYXJhdGlvbnM7CisgICAgcHJpbnQgSEVBREVS
IEBoZWFkZXJDb250ZW50OworICAgIGNsb3NlKEhFQURFUik7CisKKyAgICBAaGVhZGVyQ29udGVu
dEhlYWRlciA9ICgpOworICAgIEBoZWFkZXJDb250ZW50ID0gKCk7CisgICAgJWhlYWRlckZvcndh
cmREZWNsYXJhdGlvbnMgPSAoKTsKKworICAgICMgV3JpdGUgaW1wbGVtZW50YXRpb24gZmlsZS4K
KyAgICBvcGVuKElNUEwsICI+JGltcGxGaWxlTmFtZSIpIG9yIGRpZSAiQ291bGRuJ3Qgb3BlbiBm
aWxlICRpbXBsRmlsZU5hbWUiOworCisgICAgcHJpbnQgSU1QTCBAaW1wbENvbnRlbnRIZWFkZXI7
CisKKyAgICBmb3JlYWNoIG15ICRpbmNsdWRlIChzb3J0IGtleXMoJWltcGxJbmNsdWRlcykpIHsK
KyAgICAgICAgIyAiY2xhc3NOYW1lLmgiIGlzIGFscmVhZHkgaW5jbHVkZWQgcmlnaHQgYWZ0ZXIg
Y29uZmlnLmgsIHNpbGVuY2UgY2hlY2std2Via2l0LXN0eWxlCisgICAgICAgIG5leHQgaWYgJGlu
Y2x1ZGUgZXEgIiRuYW1lLmgiOworICAgICAgICBwcmludCBJTVBMICIjaW5jbHVkZSBcIiRpbmNs
dWRlXCJcbiI7CisgICAgfQorCisgICAgcHJpbnQgSU1QTCBAaW1wbENvbnRlbnQ7CisgICAgY2xv
c2UoSU1QTCk7CisKKyAgICBAaW1wbENvbnRlbnRIZWFkZXIgPSAoKTsKKyAgICBAaW1wbENvbnRl
bnQgPSAoKTsKKyAgICAlaW1wbEluY2x1ZGVzID0gKCk7Cit9CisKKzE7CkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdENhbGxiYWNrLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdENhbGxi
YWNrLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQ
UC9XZWJET01UZXN0Q2FsbGJhY2suY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExMyBAQAor
LyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVj
dC4KKyAqIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3Mu
cGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShEQVRB
QkFTRSkKKworI2luY2x1ZGUgIldlYkRPTVRlc3RDYWxsYmFjay5oIgorCisjaW5jbHVkZSAiQXRv
bWljU3RyaW5nLmgiCisjaW5jbHVkZSAiQ2xhc3MxLmgiCisjaW5jbHVkZSAiQ2xhc3MyLmgiCisj
aW5jbHVkZSAiQ2xhc3MzLmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIlRlc3RDYWxs
YmFjay5oIgorI2luY2x1ZGUgIldlYkRPTUNsYXNzMS5oIgorI2luY2x1ZGUgIldlYkRPTUNsYXNz
Mi5oIgorI2luY2x1ZGUgIldlYkRPTUNsYXNzMy5oIgorI2luY2x1ZGUgIldlYkRPTVN0cmluZy5o
IgorI2luY2x1ZGUgIldlYkV4Y2VwdGlvbkhhbmRsZXIuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCitzdHJ1Y3QgV2ViRE9NVGVzdENhbGxiYWNr
OjpXZWJET01UZXN0Q2FsbGJhY2tQcml2YXRlIHsKKyAgICBXZWJET01UZXN0Q2FsbGJhY2tQcml2
YXRlKFdlYkNvcmU6OlRlc3RDYWxsYmFjayogb2JqZWN0ID0gMCkKKyAgICAgICAgOiBpbXBsKG9i
amVjdCkKKyAgICB7CisgICAgfQorCisgICAgUmVmUHRyPFdlYkNvcmU6OlRlc3RDYWxsYmFjaz4g
aW1wbDsKK307CisKK1dlYkRPTVRlc3RDYWxsYmFjazo6V2ViRE9NVGVzdENhbGxiYWNrKCkKKyAg
ICA6IFdlYkRPTU9iamVjdCgpCisgICAgLCBtX2ltcGwoMCkKK3sKK30KKworV2ViRE9NVGVzdENh
bGxiYWNrOjpXZWJET01UZXN0Q2FsbGJhY2soV2ViQ29yZTo6VGVzdENhbGxiYWNrKiBpbXBsKQor
ICAgIDogV2ViRE9NT2JqZWN0KCkKKyAgICAsIG1faW1wbChuZXcgV2ViRE9NVGVzdENhbGxiYWNr
UHJpdmF0ZShpbXBsKSkKK3sKK30KKworV2ViRE9NVGVzdENhbGxiYWNrOjpXZWJET01UZXN0Q2Fs
bGJhY2soY29uc3QgV2ViRE9NVGVzdENhbGxiYWNrJiBjb3B5KQorICAgIDogV2ViRE9NT2JqZWN0
KCkKK3sKKyAgICBtX2ltcGwgPSBjb3B5LmltcGwoKSA/IG5ldyBXZWJET01UZXN0Q2FsbGJhY2tQ
cml2YXRlKGNvcHkuaW1wbCgpKSA6IDA7Cit9CisKK1dlYkNvcmU6OlRlc3RDYWxsYmFjayogV2Vi
RE9NVGVzdENhbGxiYWNrOjppbXBsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbXBsID8gbV9p
bXBsLT5pbXBsLmdldCgpIDogMDsKK30KKworV2ViRE9NVGVzdENhbGxiYWNrOjp+V2ViRE9NVGVz
dENhbGxiYWNrKCkKK3sKKyAgICBkZWxldGUgbV9pbXBsOworICAgIG1faW1wbCA9IDA7Cit9CisK
K2Jvb2wgV2ViRE9NVGVzdENhbGxiYWNrOjpjYWxsYmFja1dpdGhDbGFzczFQYXJhbShjb25zdCBX
ZWJET01DbGFzczEmIGNsYXNzMVBhcmFtKQoreworICAgIGlmICghaW1wbCgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gaW1wbCgpLT5jYWxsYmFja1dpdGhDbGFzczFQYXJh
bSgwLCB0b1dlYkNvcmUoY2xhc3MxUGFyYW0pKTsKK30KKworYm9vbCBXZWJET01UZXN0Q2FsbGJh
Y2s6OmNhbGxiYWNrV2l0aENsYXNzMlBhcmFtKGNvbnN0IFdlYkRPTUNsYXNzMiYgY2xhc3MyUGFy
YW0sIGNvbnN0IFdlYkRPTVN0cmluZyYgc3RyQXJnKQoreworICAgIGlmICghaW1wbCgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gaW1wbCgpLT5jYWxsYmFja1dpdGhDbGFz
czJQYXJhbSgwLCB0b1dlYkNvcmUoY2xhc3MyUGFyYW0pLCBzdHJBcmcpOworfQorCitpbnQgV2Vi
RE9NVGVzdENhbGxiYWNrOjpjYWxsYmFja1dpdGhOb25Cb29sUmV0dXJuVHlwZShjb25zdCBXZWJE
T01DbGFzczMmIGNsYXNzM1BhcmFtKQoreworICAgIGlmICghaW1wbCgpKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIHJldHVybiBpbXBsKCktPmNhbGxiYWNrV2l0aE5vbkJvb2xSZXR1cm5UeXBl
KDAsIHRvV2ViQ29yZShjbGFzczNQYXJhbSkpOworfQorCitXZWJDb3JlOjpUZXN0Q2FsbGJhY2sq
IHRvV2ViQ29yZShjb25zdCBXZWJET01UZXN0Q2FsbGJhY2smIHdyYXBwZXIpCit7CisgICAgcmV0
dXJuIHdyYXBwZXIuaW1wbCgpOworfQorCitXZWJET01UZXN0Q2FsbGJhY2sgdG9XZWJLaXQoV2Vi
Q29yZTo6VGVzdENhbGxiYWNrKiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gV2ViRE9NVGVzdENhbGxi
YWNrKHZhbHVlKTsKK30KKworI2VuZGlmIC8vIEVOQUJMRShEQVRBQkFTRSkKSW5kZXg6IFdlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0Q2FsbGJhY2suaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdENhbGxi
YWNrLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAv
V2ViRE9NVGVzdENhbGxiYWNrLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIw
MDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA2IFNhbXVlbCBXZWluaWcgPHNhbS53ZWluaWdAZ21haWwuY29tPgorICogQ29weXJpZ2h0
IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaWZuZGVmIFdlYkRPTVRlc3RDYWxsYmFja19oCisjZGVmaW5lIFdlYkRPTVRlc3RDYWxsYmFj
a19oCisKKyNpZiBFTkFCTEUoREFUQUJBU0UpCisKKyNpbmNsdWRlIDxXZWJET01PYmplY3QuaD4K
KyNpbmNsdWRlIDxXZWJET01TdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3Mg
VGVzdENhbGxiYWNrOworfTsKKworY2xhc3MgV2ViRE9NQ2xhc3MxOworY2xhc3MgV2ViRE9NQ2xh
c3MyOworY2xhc3MgV2ViRE9NQ2xhc3MzOworY2xhc3MgV2ViRE9NQ2xhc3M1OworY2xhc3MgV2Vi
RE9NQ2xhc3M2OworCitjbGFzcyBXZWJET01UZXN0Q2FsbGJhY2sgOiBwdWJsaWMgV2ViRE9NT2Jq
ZWN0IHsKK3B1YmxpYzoKKyAgICBXZWJET01UZXN0Q2FsbGJhY2soKTsKKyAgICBleHBsaWNpdCBX
ZWJET01UZXN0Q2FsbGJhY2soV2ViQ29yZTo6VGVzdENhbGxiYWNrKik7CisgICAgV2ViRE9NVGVz
dENhbGxiYWNrKGNvbnN0IFdlYkRPTVRlc3RDYWxsYmFjayYpOworICAgIH5XZWJET01UZXN0Q2Fs
bGJhY2soKTsKKworICAgIGJvb2wgY2FsbGJhY2tXaXRoQ2xhc3MxUGFyYW0oY29uc3QgV2ViRE9N
Q2xhc3MxJiBjbGFzczFQYXJhbSk7CisgICAgYm9vbCBjYWxsYmFja1dpdGhDbGFzczJQYXJhbShj
b25zdCBXZWJET01DbGFzczImIGNsYXNzMlBhcmFtLCBjb25zdCBXZWJET01TdHJpbmcmIHN0ckFy
Zyk7CisgICAgaW50IGNhbGxiYWNrV2l0aE5vbkJvb2xSZXR1cm5UeXBlKGNvbnN0IFdlYkRPTUNs
YXNzMyYgY2xhc3MzUGFyYW0pOworICAgIGludCBjdXN0b21DYWxsYmFjayhjb25zdCBXZWJET01D
bGFzczUmIGNsYXNzNVBhcmFtLCBjb25zdCBXZWJET01DbGFzczYmIGNsYXNzNlBhcmFtKTsKKwor
ICAgIFdlYkNvcmU6OlRlc3RDYWxsYmFjayogaW1wbCgpIGNvbnN0OworCitwcm90ZWN0ZWQ6Cisg
ICAgc3RydWN0IFdlYkRPTVRlc3RDYWxsYmFja1ByaXZhdGU7CisgICAgV2ViRE9NVGVzdENhbGxi
YWNrUHJpdmF0ZSogbV9pbXBsOworfTsKKworV2ViQ29yZTo6VGVzdENhbGxiYWNrKiB0b1dlYkNv
cmUoY29uc3QgV2ViRE9NVGVzdENhbGxiYWNrJik7CitXZWJET01UZXN0Q2FsbGJhY2sgdG9XZWJL
aXQoV2ViQ29yZTo6VGVzdENhbGxiYWNrKik7CisKKyNlbmRpZgorI2VuZGlmIC8vIEVOQUJMRShE
QVRBQkFTRSkKKwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRP
TVRlc3RJbnRlcmZhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0NQUC9XZWJET01UZXN0SW50ZXJmYWNlLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0SW50ZXJmYWNlLmNwcAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo
ZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5l
cmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJXZWJET01UZXN0SW50ZXJmYWNlLmgiCisKKyNpbmNsdWRlICJU
ZXN0SW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiV2ViRXhjZXB0aW9uSGFuZGxlci5oIgorI2luY2x1
ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK3N0cnVjdCBXZWJE
T01UZXN0SW50ZXJmYWNlOjpXZWJET01UZXN0SW50ZXJmYWNlUHJpdmF0ZSB7CisgICAgV2ViRE9N
VGVzdEludGVyZmFjZVByaXZhdGUoV2ViQ29yZTo6VGVzdEludGVyZmFjZSogb2JqZWN0ID0gMCkK
KyAgICAgICAgOiBpbXBsKG9iamVjdCkKKyAgICB7CisgICAgfQorCisgICAgUmVmUHRyPFdlYkNv
cmU6OlRlc3RJbnRlcmZhY2U+IGltcGw7Cit9OworCitXZWJET01UZXN0SW50ZXJmYWNlOjpXZWJE
T01UZXN0SW50ZXJmYWNlKCkKKyAgICA6IFdlYkRPTU9iamVjdCgpCisgICAgLCBtX2ltcGwoMCkK
K3sKK30KKworV2ViRE9NVGVzdEludGVyZmFjZTo6V2ViRE9NVGVzdEludGVyZmFjZShXZWJDb3Jl
OjpUZXN0SW50ZXJmYWNlKiBpbXBsKQorICAgIDogV2ViRE9NT2JqZWN0KCkKKyAgICAsIG1faW1w
bChuZXcgV2ViRE9NVGVzdEludGVyZmFjZVByaXZhdGUoaW1wbCkpCit7Cit9CisKK1dlYkRPTVRl
c3RJbnRlcmZhY2U6OldlYkRPTVRlc3RJbnRlcmZhY2UoY29uc3QgV2ViRE9NVGVzdEludGVyZmFj
ZSYgY29weSkKKyAgICA6IFdlYkRPTU9iamVjdCgpCit7CisgICAgbV9pbXBsID0gY29weS5pbXBs
KCkgPyBuZXcgV2ViRE9NVGVzdEludGVyZmFjZVByaXZhdGUoY29weS5pbXBsKCkpIDogMDsKK30K
KworV2ViQ29yZTo6VGVzdEludGVyZmFjZSogV2ViRE9NVGVzdEludGVyZmFjZTo6aW1wbCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1faW1wbCA/IG1faW1wbC0+aW1wbC5nZXQoKSA6IDA7Cit9CisK
K1dlYkRPTVRlc3RJbnRlcmZhY2U6On5XZWJET01UZXN0SW50ZXJmYWNlKCkKK3sKKyAgICBkZWxl
dGUgbV9pbXBsOworICAgIG1faW1wbCA9IDA7Cit9CisKK1dlYkNvcmU6OlRlc3RJbnRlcmZhY2Uq
IHRvV2ViQ29yZShjb25zdCBXZWJET01UZXN0SW50ZXJmYWNlJiB3cmFwcGVyKQoreworICAgIHJl
dHVybiB3cmFwcGVyLmltcGwoKTsKK30KKworV2ViRE9NVGVzdEludGVyZmFjZSB0b1dlYktpdChX
ZWJDb3JlOjpUZXN0SW50ZXJmYWNlKiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gV2ViRE9NVGVzdElu
dGVyZmFjZSh2YWx1ZSk7Cit9CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9D
UFAvV2ViRE9NVGVzdEludGVyZmFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0SW50ZXJmYWNlLmgJKHJldmlzaW9uIDApCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdEludGVyZmFjZS5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJj
aCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIDxz
YW0ud2VpbmlnQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9u
IExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJET01UZXN0SW50
ZXJmYWNlX2gKKyNkZWZpbmUgV2ViRE9NVGVzdEludGVyZmFjZV9oCisKKyNpbmNsdWRlIDxXZWJE
T01PYmplY3QuaD4KKyNpbmNsdWRlIDxXZWJET01TdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworY2xhc3MgVGVzdEludGVyZmFjZTsKK307CisKKworY2xhc3MgV2ViRE9NVGVzdEludGVy
ZmFjZSA6IHB1YmxpYyBXZWJET01PYmplY3QgeworcHVibGljOgorICAgIFdlYkRPTVRlc3RJbnRl
cmZhY2UoKTsKKyAgICBleHBsaWNpdCBXZWJET01UZXN0SW50ZXJmYWNlKFdlYkNvcmU6OlRlc3RJ
bnRlcmZhY2UqKTsKKyAgICBXZWJET01UZXN0SW50ZXJmYWNlKGNvbnN0IFdlYkRPTVRlc3RJbnRl
cmZhY2UmKTsKKyAgICB+V2ViRE9NVGVzdEludGVyZmFjZSgpOworCisKKyAgICBXZWJDb3JlOjpU
ZXN0SW50ZXJmYWNlKiBpbXBsKCkgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICBzdHJ1Y3QgV2Vi
RE9NVGVzdEludGVyZmFjZVByaXZhdGU7CisgICAgV2ViRE9NVGVzdEludGVyZmFjZVByaXZhdGUq
IG1faW1wbDsKK307CisKK1dlYkNvcmU6OlRlc3RJbnRlcmZhY2UqIHRvV2ViQ29yZShjb25zdCBX
ZWJET01UZXN0SW50ZXJmYWNlJik7CitXZWJET01UZXN0SW50ZXJmYWNlIHRvV2ViS2l0KFdlYkNv
cmU6OlRlc3RJbnRlcmZhY2UqKTsKKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE9iai5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RPYmouY3BwCShyZXZpc2lvbiAwKQor
KysgV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RPYmouY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQzMyBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9m
IHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqIFRoaXMgZmlsZSBoYXMgYmVlbiBn
ZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJET01UZXN0T2JqLmgiCisKKyNpbmNsdWRlICJBdG9t
aWNTdHJpbmcuaCIKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlw
dFZhbHVlLmgiCisjaW5jbHVkZSAiVGVzdE9iai5oIgorI2luY2x1ZGUgIldlYkRPTVN0cmluZy5o
IgorI2luY2x1ZGUgIldlYkV4Y2VwdGlvbkhhbmRsZXIuaCIKKyNpbmNsdWRlICJXZWJOYXRpdmVF
dmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KKworc3RydWN0IFdlYkRPTVRlc3RPYmo6OldlYkRPTVRlc3RPYmpQcml2YXRlIHsK
KyAgICBXZWJET01UZXN0T2JqUHJpdmF0ZShXZWJDb3JlOjpUZXN0T2JqKiBvYmplY3QgPSAwKQor
ICAgICAgICA6IGltcGwob2JqZWN0KQorICAgIHsKKyAgICB9CisKKyAgICBSZWZQdHI8V2ViQ29y
ZTo6VGVzdE9iaj4gaW1wbDsKK307CisKK1dlYkRPTVRlc3RPYmo6OldlYkRPTVRlc3RPYmooKQor
ICAgIDogV2ViRE9NT2JqZWN0KCkKKyAgICAsIG1faW1wbCgwKQoreworfQorCitXZWJET01UZXN0
T2JqOjpXZWJET01UZXN0T2JqKFdlYkNvcmU6OlRlc3RPYmoqIGltcGwpCisgICAgOiBXZWJET01P
YmplY3QoKQorICAgICwgbV9pbXBsKG5ldyBXZWJET01UZXN0T2JqUHJpdmF0ZShpbXBsKSkKK3sK
K30KKworV2ViRE9NVGVzdE9iajo6V2ViRE9NVGVzdE9iaihjb25zdCBXZWJET01UZXN0T2JqJiBj
b3B5KQorICAgIDogV2ViRE9NT2JqZWN0KCkKK3sKKyAgICBtX2ltcGwgPSBjb3B5LmltcGwoKSA/
IG5ldyBXZWJET01UZXN0T2JqUHJpdmF0ZShjb3B5LmltcGwoKSkgOiAwOworfQorCitXZWJDb3Jl
OjpUZXN0T2JqKiBXZWJET01UZXN0T2JqOjppbXBsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9p
bXBsID8gbV9pbXBsLT5pbXBsLmdldCgpIDogMDsKK30KKworV2ViRE9NVGVzdE9iajo6fldlYkRP
TVRlc3RPYmooKQoreworICAgIGRlbGV0ZSBtX2ltcGw7CisgICAgbV9pbXBsID0gMDsKK30KKwor
aW50IFdlYkRPTVRlc3RPYmo6OnJlYWRPbmx5SW50QXR0cigpIGNvbnN0Cit7CisgICAgaWYgKCFp
bXBsKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGltcGwoKS0+cmVhZE9ubHlJ
bnRBdHRyKCk7Cit9CisKK1dlYkRPTVN0cmluZyBXZWJET01UZXN0T2JqOjpyZWFkT25seVN0cmlu
Z0F0dHIoKSBjb25zdAoreworICAgIGlmICghaW1wbCgpKQorICAgICAgICByZXR1cm4gV2ViRE9N
U3RyaW5nKCk7CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgV2ViQ29yZTo6U3RyaW5n
Jj4oaW1wbCgpLT5yZWFkT25seVN0cmluZ0F0dHIoKSk7Cit9CisKK1dlYkRPTVRlc3RPYmogV2Vi
RE9NVGVzdE9iajo6cmVhZE9ubHlUZXN0T2JqQXR0cigpIGNvbnN0Cit7CisgICAgaWYgKCFpbXBs
KCkpCisgICAgICAgIHJldHVybiBXZWJET01UZXN0T2JqKCk7CisKKyAgICByZXR1cm4gdG9XZWJL
aXQoV1RGOjpnZXRQdHIoaW1wbCgpLT5yZWFkT25seVRlc3RPYmpBdHRyKCkpKTsKK30KKworaW50
IFdlYkRPTVRlc3RPYmo6OmludEF0dHIoKSBjb25zdAoreworICAgIGlmICghaW1wbCgpKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBpbXBsKCktPmludEF0dHIoKTsKK30KKwordm9p
ZCBXZWJET01UZXN0T2JqOjpzZXRJbnRBdHRyKGludCBuZXdJbnRBdHRyKQoreworICAgIGlmICgh
aW1wbCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpbXBsKCktPnNldEludEF0dHIobmV3SW50
QXR0cik7Cit9CisKK2xvbmcgbG9uZyBXZWJET01UZXN0T2JqOjpsb25nTG9uZ0F0dHIoKSBjb25z
dAoreworICAgIGlmICghaW1wbCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBp
bXBsKCktPmxvbmdMb25nQXR0cigpOworfQorCit2b2lkIFdlYkRPTVRlc3RPYmo6OnNldExvbmdM
b25nQXR0cihsb25nIGxvbmcgbmV3TG9uZ0xvbmdBdHRyKQoreworICAgIGlmICghaW1wbCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpbXBsKCktPnNldExvbmdMb25nQXR0cihuZXdMb25nTG9u
Z0F0dHIpOworfQorCit1bnNpZ25lZCBsb25nIGxvbmcgV2ViRE9NVGVzdE9iajo6dW5zaWduZWRM
b25nTG9uZ0F0dHIoKSBjb25zdAoreworICAgIGlmICghaW1wbCgpKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIHJldHVybiBpbXBsKCktPnVuc2lnbmVkTG9uZ0xvbmdBdHRyKCk7Cit9CisKK3Zv
aWQgV2ViRE9NVGVzdE9iajo6c2V0VW5zaWduZWRMb25nTG9uZ0F0dHIodW5zaWduZWQgbG9uZyBs
b25nIG5ld1Vuc2lnbmVkTG9uZ0xvbmdBdHRyKQoreworICAgIGlmICghaW1wbCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpbXBsKCktPnNldFVuc2lnbmVkTG9uZ0xvbmdBdHRyKG5ld1Vuc2ln
bmVkTG9uZ0xvbmdBdHRyKTsKK30KKworV2ViRE9NU3RyaW5nIFdlYkRPTVRlc3RPYmo6OnN0cmlu
Z0F0dHIoKSBjb25zdAoreworICAgIGlmICghaW1wbCgpKQorICAgICAgICByZXR1cm4gV2ViRE9N
U3RyaW5nKCk7CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgV2ViQ29yZTo6U3RyaW5n
Jj4oaW1wbCgpLT5zdHJpbmdBdHRyKCkpOworfQorCit2b2lkIFdlYkRPTVRlc3RPYmo6OnNldFN0
cmluZ0F0dHIoY29uc3QgV2ViRE9NU3RyaW5nJiBuZXdTdHJpbmdBdHRyKQoreworICAgIGlmICgh
aW1wbCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpbXBsKCktPnNldFN0cmluZ0F0dHIobmV3
U3RyaW5nQXR0cik7Cit9CisKK1dlYkRPTVRlc3RPYmogV2ViRE9NVGVzdE9iajo6dGVzdE9iakF0
dHIoKSBjb25zdAoreworICAgIGlmICghaW1wbCgpKQorICAgICAgICByZXR1cm4gV2ViRE9NVGVz
dE9iaigpOworCisgICAgcmV0dXJuIHRvV2ViS2l0KFdURjo6Z2V0UHRyKGltcGwoKS0+dGVzdE9i
akF0dHIoKSkpOworfQorCit2b2lkIFdlYkRPTVRlc3RPYmo6OnNldFRlc3RPYmpBdHRyKGNvbnN0
IFdlYkRPTVRlc3RPYmomIG5ld1Rlc3RPYmpBdHRyKQoreworICAgIGlmICghaW1wbCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpbXBsKCktPnNldFRlc3RPYmpBdHRyKHRvV2ViQ29yZShuZXdU
ZXN0T2JqQXR0cikpOworfQorCitpbnQgV2ViRE9NVGVzdE9iajo6YXR0cldpdGhFeGNlcHRpb24o
KSBjb25zdAoreworICAgIGlmICghaW1wbCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJl
dHVybiBpbXBsKCktPmF0dHJXaXRoRXhjZXB0aW9uKCk7Cit9CisKK3ZvaWQgV2ViRE9NVGVzdE9i
ajo6c2V0QXR0cldpdGhFeGNlcHRpb24oaW50IG5ld0F0dHJXaXRoRXhjZXB0aW9uKQoreworICAg
IGlmICghaW1wbCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpbXBsKCktPnNldEF0dHJXaXRo
RXhjZXB0aW9uKG5ld0F0dHJXaXRoRXhjZXB0aW9uKTsKK30KKworaW50IFdlYkRPTVRlc3RPYmo6
OmF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKCkgY29uc3QKK3sKKyAgICBpZiAoIWltcGwoKSkKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAg
ICBpbnQgcmVzdWx0ID0gaW1wbCgpLT5hdHRyV2l0aFNldHRlckV4Y2VwdGlvbihlYyk7CisgICAg
d2ViRE9NUmFpc2VFcnJvcihzdGF0aWNfY2FzdDxXZWJET01FeGNlcHRpb25Db2RlPihlYykpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgV2ViRE9NVGVzdE9iajo6c2V0QXR0cldpdGhT
ZXR0ZXJFeGNlcHRpb24oaW50IG5ld0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKQoreworICAgIGlm
ICghaW1wbCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2Rl
IGVjID0gMDsKKyAgICBpbXBsKCktPnNldEF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKG5ld0F0dHJX
aXRoU2V0dGVyRXhjZXB0aW9uLCBlYyk7CisgICAgd2ViRE9NUmFpc2VFcnJvcihzdGF0aWNfY2Fz
dDxXZWJET01FeGNlcHRpb25Db2RlPihlYykpOworfQorCitpbnQgV2ViRE9NVGVzdE9iajo6YXR0
cldpdGhHZXR0ZXJFeGNlcHRpb24oKSBjb25zdAoreworICAgIGlmICghaW1wbCgpKQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIHJldHVybiBpbXBsKCktPmF0dHJXaXRoR2V0dGVyRXhjZXB0aW9u
KCk7Cit9CisKK3ZvaWQgV2ViRE9NVGVzdE9iajo6c2V0QXR0cldpdGhHZXR0ZXJFeGNlcHRpb24o
aW50IG5ld0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKQoreworICAgIGlmICghaW1wbCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBp
bXBsKCktPnNldEF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKG5ld0F0dHJXaXRoR2V0dGVyRXhjZXB0
aW9uLCBlYyk7CisgICAgd2ViRE9NUmFpc2VFcnJvcihzdGF0aWNfY2FzdDxXZWJET01FeGNlcHRp
b25Db2RlPihlYykpOworfQorCitXZWJET01TdHJpbmcgV2ViRE9NVGVzdE9iajo6c2NyaXB0U3Ry
aW5nQXR0cigpIGNvbnN0Cit7CisgICAgaWYgKCFpbXBsKCkpCisgICAgICAgIHJldHVybiBXZWJE
T01TdHJpbmcoKTsKKworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBXZWJDb3JlOjpTdHJp
bmcmPihpbXBsKCktPnNjcmlwdFN0cmluZ0F0dHIoKSk7Cit9CisKK3ZvaWQgV2ViRE9NVGVzdE9i
ajo6dm9pZE1ldGhvZCgpCit7CisgICAgaWYgKCFpbXBsKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGltcGwoKS0+dm9pZE1ldGhvZCgpOworfQorCit2b2lkIFdlYkRPTVRlc3RPYmo6OnZvaWRN
ZXRob2RXaXRoQXJncyhpbnQgaW50QXJnLCBjb25zdCBXZWJET01TdHJpbmcmIHN0ckFyZywgY29u
c3QgV2ViRE9NVGVzdE9iaiYgb2JqQXJnKQoreworICAgIGlmICghaW1wbCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpbXBsKCktPnZvaWRNZXRob2RXaXRoQXJncyhpbnRBcmcsIHN0ckFyZywg
dG9XZWJDb3JlKG9iakFyZykpOworfQorCitpbnQgV2ViRE9NVGVzdE9iajo6aW50TWV0aG9kKCkK
K3sKKyAgICBpZiAoIWltcGwoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gaW1w
bCgpLT5pbnRNZXRob2QoKTsKK30KKworaW50IFdlYkRPTVRlc3RPYmo6OmludE1ldGhvZFdpdGhB
cmdzKGludCBpbnRBcmcsIGNvbnN0IFdlYkRPTVN0cmluZyYgc3RyQXJnLCBjb25zdCBXZWJET01U
ZXN0T2JqJiBvYmpBcmcpCit7CisgICAgaWYgKCFpbXBsKCkpCisgICAgICAgIHJldHVybiAwOwor
CisgICAgcmV0dXJuIGltcGwoKS0+aW50TWV0aG9kV2l0aEFyZ3MoaW50QXJnLCBzdHJBcmcsIHRv
V2ViQ29yZShvYmpBcmcpKTsKK30KKworV2ViRE9NVGVzdE9iaiBXZWJET01UZXN0T2JqOjpvYmpN
ZXRob2QoKQoreworICAgIGlmICghaW1wbCgpKQorICAgICAgICByZXR1cm4gV2ViRE9NVGVzdE9i
aigpOworCisgICAgcmV0dXJuIHRvV2ViS2l0KFdURjo6Z2V0UHRyKGltcGwoKS0+b2JqTWV0aG9k
KCkpKTsKK30KKworV2ViRE9NVGVzdE9iaiBXZWJET01UZXN0T2JqOjpvYmpNZXRob2RXaXRoQXJn
cyhpbnQgaW50QXJnLCBjb25zdCBXZWJET01TdHJpbmcmIHN0ckFyZywgY29uc3QgV2ViRE9NVGVz
dE9iaiYgb2JqQXJnKQoreworICAgIGlmICghaW1wbCgpKQorICAgICAgICByZXR1cm4gV2ViRE9N
VGVzdE9iaigpOworCisgICAgcmV0dXJuIHRvV2ViS2l0KFdURjo6Z2V0UHRyKGltcGwoKS0+b2Jq
TWV0aG9kV2l0aEFyZ3MoaW50QXJnLCBzdHJBcmcsIHRvV2ViQ29yZShvYmpBcmcpKSkpOworfQor
CitXZWJET01UZXN0T2JqIFdlYkRPTVRlc3RPYmo6Om1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3Mo
Y29uc3QgV2ViRE9NU3RyaW5nJiBzdHJBcmcsIGNvbnN0IFdlYkRPTVRlc3RPYmomIG9iakFyZykK
K3sKKyAgICBpZiAoIWltcGwoKSkKKyAgICAgICAgcmV0dXJuIFdlYkRPTVRlc3RPYmooKTsKKwor
ICAgIHJldHVybiB0b1dlYktpdChXVEY6OmdldFB0cihpbXBsKCktPm1ldGhvZFRoYXRSZXF1aXJl
c0FsbEFyZ3Moc3RyQXJnLCB0b1dlYkNvcmUob2JqQXJnKSkpKTsKK30KKworV2ViRE9NVGVzdE9i
aiBXZWJET01UZXN0T2JqOjptZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzKGNvbnN0
IFdlYkRPTVN0cmluZyYgc3RyQXJnLCBjb25zdCBXZWJET01UZXN0T2JqJiBvYmpBcmcpCit7Cisg
ICAgaWYgKCFpbXBsKCkpCisgICAgICAgIHJldHVybiBXZWJET01UZXN0T2JqKCk7CisKKyAgICBX
ZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBXZWJET01UZXN0T2JqIHJlc3VsdCA9
IHRvV2ViS2l0KFdURjo6Z2V0UHRyKGltcGwoKS0+bWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0Fu
ZFRocm93cyhzdHJBcmcsIHRvV2ViQ29yZShvYmpBcmcpLCBlYykpKTsKKyAgICB3ZWJET01SYWlz
ZUVycm9yKHN0YXRpY19jYXN0PFdlYkRPTUV4Y2VwdGlvbkNvZGU+KGVjKSk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKwordm9pZCBXZWJET01UZXN0T2JqOjpzZXJpYWxpemVkVmFsdWUoY29uc3Qg
V2ViRE9NU3RyaW5nJiBzZXJpYWxpemVkQXJnKQoreworICAgIGlmICghaW1wbCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpbXBsKCktPnNlcmlhbGl6ZWRWYWx1ZShXZWJDb3JlOjpTZXJpYWxp
emVkU2NyaXB0VmFsdWU6OmNyZWF0ZShXZWJDb3JlOjpTdHJpbmcoc2VyaWFsaXplZEFyZykpKTsK
K30KKwordm9pZCBXZWJET01UZXN0T2JqOjptZXRob2RXaXRoRXhjZXB0aW9uKCkKK3sKKyAgICBp
ZiAoIWltcGwoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29k
ZSBlYyA9IDA7CisgICAgaW1wbCgpLT5tZXRob2RXaXRoRXhjZXB0aW9uKGVjKTsKKyAgICB3ZWJE
T01SYWlzZUVycm9yKHN0YXRpY19jYXN0PFdlYkRPTUV4Y2VwdGlvbkNvZGU+KGVjKSk7Cit9CisK
K3ZvaWQgV2ViRE9NVGVzdE9iajo6YWRkRXZlbnRMaXN0ZW5lcihjb25zdCBXZWJET01TdHJpbmcm
IHR5cGUsIGNvbnN0IFdlYkRPTUV2ZW50TGlzdGVuZXImIGxpc3RlbmVyLCBib29sIHVzZUNhcHR1
cmUpCit7CisgICAgaWYgKCFpbXBsKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGltcGwoKS0+
YWRkRXZlbnRMaXN0ZW5lcih0eXBlLCB0b1dlYkNvcmUobGlzdGVuZXIpLCB1c2VDYXB0dXJlKTsK
K30KKwordm9pZCBXZWJET01UZXN0T2JqOjpyZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IFdlYkRP
TVN0cmluZyYgdHlwZSwgY29uc3QgV2ViRE9NRXZlbnRMaXN0ZW5lciYgbGlzdGVuZXIsIGJvb2wg
dXNlQ2FwdHVyZSkKK3sKKyAgICBpZiAoIWltcGwoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aW1wbCgpLT5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIHRvV2ViQ29yZShsaXN0ZW5lciksIHVz
ZUNhcHR1cmUpOworfQorCit2b2lkIFdlYkRPTVRlc3RPYmo6OndpdGhEeW5hbWljRnJhbWUoKQor
eworICAgIGlmICghaW1wbCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpbXBsKCktPndpdGhE
eW5hbWljRnJhbWUoKTsKK30KKwordm9pZCBXZWJET01UZXN0T2JqOjp3aXRoRHluYW1pY0ZyYW1l
QW5kQXJnKGludCBpbnRBcmcpCit7CisgICAgaWYgKCFpbXBsKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIGltcGwoKS0+d2l0aER5bmFtaWNGcmFtZUFuZEFyZyhpbnRBcmcpOworfQorCit2b2lk
IFdlYkRPTVRlc3RPYmo6OndpdGhEeW5hbWljRnJhbWVBbmRPcHRpb25hbEFyZyhpbnQgaW50QXJn
LCBpbnQgb3B0aW9uYWxBcmcpCit7CisgICAgaWYgKCFpbXBsKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIGltcGwoKS0+d2l0aER5bmFtaWNGcmFtZUFuZE9wdGlvbmFsQXJnKGludEFyZywgb3B0
aW9uYWxBcmcpOworfQorCit2b2lkIFdlYkRPTVRlc3RPYmo6OndpdGhTY3JpcHRTdGF0ZVZvaWQo
KQoreworICAgIGlmICghaW1wbCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpbXBsKCktPndp
dGhTY3JpcHRTdGF0ZVZvaWQoKTsKK30KKworV2ViRE9NVGVzdE9iaiBXZWJET01UZXN0T2JqOjp3
aXRoU2NyaXB0U3RhdGVPYmooKQoreworICAgIGlmICghaW1wbCgpKQorICAgICAgICByZXR1cm4g
V2ViRE9NVGVzdE9iaigpOworCisgICAgcmV0dXJuIHRvV2ViS2l0KFdURjo6Z2V0UHRyKGltcGwo
KS0+d2l0aFNjcmlwdFN0YXRlT2JqKCkpKTsKK30KKwordm9pZCBXZWJET01UZXN0T2JqOjp3aXRo
U2NyaXB0U3RhdGVWb2lkRXhjZXB0aW9uKCkKK3sKKyAgICBpZiAoIWltcGwoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaW1wbCgp
LT53aXRoU2NyaXB0U3RhdGVWb2lkRXhjZXB0aW9uKGVjKTsKKyAgICB3ZWJET01SYWlzZUVycm9y
KHN0YXRpY19jYXN0PFdlYkRPTUV4Y2VwdGlvbkNvZGU+KGVjKSk7Cit9CisKK1dlYkRPTVRlc3RP
YmogV2ViRE9NVGVzdE9iajo6d2l0aFNjcmlwdFN0YXRlT2JqRXhjZXB0aW9uKCkKK3sKKyAgICBp
ZiAoIWltcGwoKSkKKyAgICAgICAgcmV0dXJuIFdlYkRPTVRlc3RPYmooKTsKKworICAgIFdlYkNv
cmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFdlYkRPTVRlc3RPYmogcmVzdWx0ID0gdG9X
ZWJLaXQoV1RGOjpnZXRQdHIoaW1wbCgpLT53aXRoU2NyaXB0U3RhdGVPYmpFeGNlcHRpb24oZWMp
KSk7CisgICAgd2ViRE9NUmFpc2VFcnJvcihzdGF0aWNfY2FzdDxXZWJET01FeGNlcHRpb25Db2Rl
PihlYykpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgV2ViRE9NVGVzdE9iajo6bWV0
aG9kV2l0aE9wdGlvbmFsQXJnKGludCBvcHQpCit7CisgICAgaWYgKCFpbXBsKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGltcGwoKS0+bWV0aG9kV2l0aE9wdGlvbmFsQXJnKG9wdCk7Cit9CisK
K3ZvaWQgV2ViRE9NVGVzdE9iajo6bWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kT3B0aW9uYWxB
cmcoaW50IG5vbk9wdCwgaW50IG9wdCkKK3sKKyAgICBpZiAoIWltcGwoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaW1wbCgpLT5tZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRPcHRpb25hbEFy
Zyhub25PcHQsIG9wdCk7Cit9CisKK3ZvaWQgV2ViRE9NVGVzdE9iajo6bWV0aG9kV2l0aE5vbk9w
dGlvbmFsQXJnQW5kVHdvT3B0aW9uYWxBcmdzKGludCBub25PcHQsIGludCBvcHQxLCBpbnQgb3B0
MikKK3sKKyAgICBpZiAoIWltcGwoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW1wbCgpLT5t
ZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRUd29PcHRpb25hbEFyZ3Mobm9uT3B0LCBvcHQxLCBv
cHQyKTsKK30KKworV2ViQ29yZTo6VGVzdE9iaiogdG9XZWJDb3JlKGNvbnN0IFdlYkRPTVRlc3RP
YmomIHdyYXBwZXIpCit7CisgICAgcmV0dXJuIHdyYXBwZXIuaW1wbCgpOworfQorCitXZWJET01U
ZXN0T2JqIHRvV2ViS2l0KFdlYkNvcmU6OlRlc3RPYmoqIHZhbHVlKQoreworICAgIHJldHVybiBX
ZWJET01UZXN0T2JqKHZhbHVlKTsKK30KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0NQUC9XZWJET01UZXN0T2JqLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RPYmouaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTA0IEBACisvKgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24g
TGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIDxzYW0ud2VpbmlnQGdt
YWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAx
MC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJET01UZXN0T2JqX2gKKyNkZWZpbmUg
V2ViRE9NVGVzdE9ial9oCisKKyNpbmNsdWRlIDxXZWJET01PYmplY3QuaD4KKyNpbmNsdWRlIDxX
ZWJET01TdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgVGVzdE9iajsKK307
CisKK2NsYXNzIFdlYkRPTUV2ZW50TGlzdGVuZXI7CitjbGFzcyBXZWJET01TdHJpbmc7CitjbGFz
cyBXZWJET01UZXN0T2JqOworCitjbGFzcyBXZWJET01UZXN0T2JqIDogcHVibGljIFdlYkRPTU9i
amVjdCB7CitwdWJsaWM6CisgICAgV2ViRE9NVGVzdE9iaigpOworICAgIGV4cGxpY2l0IFdlYkRP
TVRlc3RPYmooV2ViQ29yZTo6VGVzdE9iaiopOworICAgIFdlYkRPTVRlc3RPYmooY29uc3QgV2Vi
RE9NVGVzdE9iaiYpOworICAgIH5XZWJET01UZXN0T2JqKCk7CisKKyAgICBpbnQgcmVhZE9ubHlJ
bnRBdHRyKCkgY29uc3Q7CisgICAgV2ViRE9NU3RyaW5nIHJlYWRPbmx5U3RyaW5nQXR0cigpIGNv
bnN0OworICAgIFdlYkRPTVRlc3RPYmogcmVhZE9ubHlUZXN0T2JqQXR0cigpIGNvbnN0OworICAg
IGludCBpbnRBdHRyKCkgY29uc3Q7CisgICAgdm9pZCBzZXRJbnRBdHRyKGludCk7CisgICAgbG9u
ZyBsb25nIGxvbmdMb25nQXR0cigpIGNvbnN0OworICAgIHZvaWQgc2V0TG9uZ0xvbmdBdHRyKGxv
bmcgbG9uZyk7CisgICAgdW5zaWduZWQgbG9uZyBsb25nIHVuc2lnbmVkTG9uZ0xvbmdBdHRyKCkg
Y29uc3Q7CisgICAgdm9pZCBzZXRVbnNpZ25lZExvbmdMb25nQXR0cih1bnNpZ25lZCBsb25nIGxv
bmcpOworICAgIFdlYkRPTVN0cmluZyBzdHJpbmdBdHRyKCkgY29uc3Q7CisgICAgdm9pZCBzZXRT
dHJpbmdBdHRyKGNvbnN0IFdlYkRPTVN0cmluZyYpOworICAgIFdlYkRPTVRlc3RPYmogdGVzdE9i
akF0dHIoKSBjb25zdDsKKyAgICB2b2lkIHNldFRlc3RPYmpBdHRyKGNvbnN0IFdlYkRPTVRlc3RP
YmomKTsKKyAgICBpbnQgYXR0cldpdGhFeGNlcHRpb24oKSBjb25zdDsKKyAgICB2b2lkIHNldEF0
dHJXaXRoRXhjZXB0aW9uKGludCk7CisgICAgaW50IGF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKCkg
Y29uc3Q7CisgICAgdm9pZCBzZXRBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihpbnQpOworICAgIGlu
dCBhdHRyV2l0aEdldHRlckV4Y2VwdGlvbigpIGNvbnN0OworICAgIHZvaWQgc2V0QXR0cldpdGhH
ZXR0ZXJFeGNlcHRpb24oaW50KTsKKyAgICBpbnQgY3VzdG9tQXR0cigpIGNvbnN0OworICAgIHZv
aWQgc2V0Q3VzdG9tQXR0cihpbnQpOworICAgIFdlYkRPTVN0cmluZyBzY3JpcHRTdHJpbmdBdHRy
KCkgY29uc3Q7CisKKyAgICB2b2lkIHZvaWRNZXRob2QoKTsKKyAgICB2b2lkIHZvaWRNZXRob2RX
aXRoQXJncyhpbnQgaW50QXJnLCBjb25zdCBXZWJET01TdHJpbmcmIHN0ckFyZywgY29uc3QgV2Vi
RE9NVGVzdE9iaiYgb2JqQXJnKTsKKyAgICBpbnQgaW50TWV0aG9kKCk7CisgICAgaW50IGludE1l
dGhvZFdpdGhBcmdzKGludCBpbnRBcmcsIGNvbnN0IFdlYkRPTVN0cmluZyYgc3RyQXJnLCBjb25z
dCBXZWJET01UZXN0T2JqJiBvYmpBcmcpOworICAgIFdlYkRPTVRlc3RPYmogb2JqTWV0aG9kKCk7
CisgICAgV2ViRE9NVGVzdE9iaiBvYmpNZXRob2RXaXRoQXJncyhpbnQgaW50QXJnLCBjb25zdCBX
ZWJET01TdHJpbmcmIHN0ckFyZywgY29uc3QgV2ViRE9NVGVzdE9iaiYgb2JqQXJnKTsKKyAgICBX
ZWJET01UZXN0T2JqIG1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3MoY29uc3QgV2ViRE9NU3RyaW5n
JiBzdHJBcmcsIGNvbnN0IFdlYkRPTVRlc3RPYmomIG9iakFyZyk7CisgICAgV2ViRE9NVGVzdE9i
aiBtZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzKGNvbnN0IFdlYkRPTVN0cmluZyYg
c3RyQXJnLCBjb25zdCBXZWJET01UZXN0T2JqJiBvYmpBcmcpOworICAgIHZvaWQgc2VyaWFsaXpl
ZFZhbHVlKGNvbnN0IFdlYkRPTVN0cmluZyYgc2VyaWFsaXplZEFyZyk7CisgICAgdm9pZCBtZXRo
b2RXaXRoRXhjZXB0aW9uKCk7CisgICAgdm9pZCBjdXN0b21NZXRob2QoKTsKKyAgICB2b2lkIGN1
c3RvbU1ldGhvZFdpdGhBcmdzKGludCBpbnRBcmcsIGNvbnN0IFdlYkRPTVN0cmluZyYgc3RyQXJn
LCBjb25zdCBXZWJET01UZXN0T2JqJiBvYmpBcmcpOworICAgIHZvaWQgYWRkRXZlbnRMaXN0ZW5l
cihjb25zdCBXZWJET01TdHJpbmcmIHR5cGUsIGNvbnN0IFdlYkRPTUV2ZW50TGlzdGVuZXImIGxp
c3RlbmVyLCBib29sIHVzZUNhcHR1cmUpOworICAgIHZvaWQgcmVtb3ZlRXZlbnRMaXN0ZW5lcihj
b25zdCBXZWJET01TdHJpbmcmIHR5cGUsIGNvbnN0IFdlYkRPTUV2ZW50TGlzdGVuZXImIGxpc3Rl
bmVyLCBib29sIHVzZUNhcHR1cmUpOworICAgIHZvaWQgd2l0aER5bmFtaWNGcmFtZSgpOworICAg
IHZvaWQgd2l0aER5bmFtaWNGcmFtZUFuZEFyZyhpbnQgaW50QXJnKTsKKyAgICB2b2lkIHdpdGhE
eW5hbWljRnJhbWVBbmRPcHRpb25hbEFyZyhpbnQgaW50QXJnLCBpbnQgb3B0aW9uYWxBcmcpOwor
ICAgIHZvaWQgd2l0aER5bmFtaWNGcmFtZUFuZFVzZXJHZXN0dXJlKGludCBpbnRBcmcpOworICAg
IHZvaWQgd2l0aER5bmFtaWNGcmFtZUFuZFVzZXJHZXN0dXJlQVNBRChpbnQgaW50QXJnLCBpbnQg
b3B0aW9uYWxBcmcpOworICAgIHZvaWQgd2l0aFNjcmlwdFN0YXRlVm9pZCgpOworICAgIFdlYkRP
TVRlc3RPYmogd2l0aFNjcmlwdFN0YXRlT2JqKCk7CisgICAgdm9pZCB3aXRoU2NyaXB0U3RhdGVW
b2lkRXhjZXB0aW9uKCk7CisgICAgV2ViRE9NVGVzdE9iaiB3aXRoU2NyaXB0U3RhdGVPYmpFeGNl
cHRpb24oKTsKKyAgICB2b2lkIG1ldGhvZFdpdGhPcHRpb25hbEFyZyhpbnQgb3B0KTsKKyAgICB2
b2lkIG1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZE9wdGlvbmFsQXJnKGludCBub25PcHQsIGlu
dCBvcHQpOworICAgIHZvaWQgbWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kVHdvT3B0aW9uYWxB
cmdzKGludCBub25PcHQsIGludCBvcHQxLCBpbnQgb3B0Mik7CisKKyAgICBXZWJDb3JlOjpUZXN0
T2JqKiBpbXBsKCkgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICBzdHJ1Y3QgV2ViRE9NVGVzdE9i
alByaXZhdGU7CisgICAgV2ViRE9NVGVzdE9ialByaXZhdGUqIG1faW1wbDsKK307CisKK1dlYkNv
cmU6OlRlc3RPYmoqIHRvV2ViQ29yZShjb25zdCBXZWJET01UZXN0T2JqJik7CitXZWJET01UZXN0
T2JqIHRvV2ViS2l0KFdlYkNvcmU6OlRlc3RPYmoqKTsKKworI2VuZGlmCkluZGV4OiBXZWJDb3Jl
L2Nzcy9TdHlsZVNoZWV0LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9TdHlsZVNoZWV0
LmlkbAkocmV2aXNpb24gNjAxNzcpCisrKyBXZWJDb3JlL2Nzcy9TdHlsZVNoZWV0LmlkbAkod29y
a2luZyBjb3B5KQpAQCAtMzMsNiArMzMsMTIgQEAgbW9kdWxlIHN0eWxlc2hlZXRzIHsKICAgICAg
ICAgcmVhZG9ubHkgYXR0cmlidXRlIFtDb252ZXJ0TnVsbFN0cmluZ1RvPU51bGxdIERPTVN0cmlu
ZyAgICAgICAgaHJlZjsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFtDb252ZXJ0TnVsbFN0
cmluZ1RvPU51bGxdIERPTVN0cmluZyAgICAgICAgdGl0bGU7CiAgICAgICAgIHJlYWRvbmx5IGF0
dHJpYnV0ZSBNZWRpYUxpc3QgICAgICAgIG1lZGlhOworCisjaWYgZGVmaW5lZChMQU5HVUFHRV9D
UFApICYmIExBTkdVQUdFX0NQUAorICAgICAgICAvLyBFeHRyYSBXZWJDb3JlIG1ldGhvZHMgZXhw
b3NlZCB0byBhbGxvd2UgY29tcGlsZS10aW1lIGNhc3RpbmcgaW4gQysrCisgICAgICAgIGJvb2xl
YW4gaXNDU1NTdHlsZVNoZWV0KCk7CisjZW5kaWYKKwogICAgIH07CiAKIH0KSW5kZXg6IFdlYkNv
cmUvZG9tL0N1c3RvbUV2ZW50LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9DdXN0b21F
dmVudC5pZGwJKHJldmlzaW9uIDYwMTc3KQorKysgV2ViQ29yZS9kb20vQ3VzdG9tRXZlbnQuaWRs
CSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAKIG1vZHVsZSBldmVudHMgewogCisj
aWYgIWRlZmluZWQoTEFOR1VBR0VfQ1BQKSB8fCAhTEFOR1VBR0VfQ1BQCiAgICAgLy8gSW50cm9k
dWNlZCBpbiBET00gTGV2ZWwgMzoKICAgICBpbnRlcmZhY2UgQ3VzdG9tRXZlbnQgOiBFdmVudCB7
CiAKQEAgLTM1LDUgKzM2LDYgQEAgbW9kdWxlIGV2ZW50cyB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW4gYm9vbGVhbiBjYW5jZWxhYmxlQXJnLCAKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbiBET01PYmplY3QgZGV0YWlsQXJnKTsKICAgICB9OworI2VuZGlmCiAKIH0KSW5k
ZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9E
b2N1bWVudC5pZGwJKHJldmlzaW9uIDYwMTc3KQorKysgV2ViQ29yZS9kb20vRG9jdW1lbnQuaWRs
CSh3b3JraW5nIGNvcHkpCkBAIC0yMTksOSArMjE5LDExIEBAIG1vZHVsZSBjb3JlIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAjZW5kaWYKIAor
I2lmICFkZWZpbmVkKExBTkdVQUdFX0NQUCkgfHwgIUxBTkdVQUdFX0NQUAogI2lmICFkZWZpbmVk
KExBTkdVQUdFX09CSkVDVElWRV9DKSB8fCAhTEFOR1VBR0VfT0JKRUNUSVZFX0MKICAgICAgICAg
W1Y4Q3VzdG9tXSBET01PYmplY3QgZ2V0Q1NTQ2FudmFzQ29udGV4dChpbiBET01TdHJpbmcgY29u
dGV4dElkLCBpbiBET01TdHJpbmcgbmFtZSwgaW4gbG9uZyB3aWR0aCwgaW4gbG9uZyBoZWlnaHQp
OwogI2VuZGlmCisjZW5kaWYKIAogICAgICAgICAvLyBIVE1MIDUKICAgICAgICAgTm9kZUxpc3Qg
Z2V0RWxlbWVudHNCeUNsYXNzTmFtZShpbiBET01TdHJpbmcgdGFnbmFtZSk7CkBAIC0zMTEsNiAr
MzEzLDEyIEBAIG1vZHVsZSBjb3JlIHsKICAgICAgICAgYXR0cmlidXRlIFtEb250RW51bSxDb25k
aXRpb25hbD1UT1VDSF9FVkVOVFMsRW5hYmxlZEF0UnVudGltZV0gRXZlbnRMaXN0ZW5lciBvbnRv
dWNoZW5kOwogICAgICAgICBhdHRyaWJ1dGUgW0RvbnRFbnVtLENvbmRpdGlvbmFsPVRPVUNIX0VW
RU5UUyxFbmFibGVkQXRSdW50aW1lXSBFdmVudExpc3RlbmVyIG9udG91Y2hjYW5jZWw7CiAjZW5k
aWYKKworI2lmIGRlZmluZWQoTEFOR1VBR0VfQ1BQKSAmJiBMQU5HVUFHRV9DUFAKKyAgICAgICAg
Ly8gRXh0cmEgV2ViQ29yZSBtZXRob2RzIGV4cG9zZWQgdG8gYWxsb3cgY29tcGlsZS10aW1lIGNh
c3RpbmcgaW4gQysrCisgICAgICAgIGJvb2xlYW4gaXNIVE1MRG9jdW1lbnQoKTsKKyNlbmRpZgor
CiAgICAgfTsKIAogfQpJbmRleDogV2ViQ29yZS9kb20vRXZlbnQuaWRsCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvZG9tL0V2ZW50LmlkbAkocmV2aXNpb24gNjAxNzcpCisrKyBXZWJDb3JlL2RvbS9F
dmVudC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTc5LDYgKzc5LDEzIEBAIG1vZHVsZSBldmVudHMg
ewogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgW0N1c3RvbV0gQ2xpcGJvYXJkICAgICAgICBj
bGlwYm9hcmREYXRhOwogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKExBTkdVQUdFX0NQUCkgJiYgTEFO
R1VBR0VfQ1BQCisgICAgICAgIC8vIEV4dHJhIFdlYkNvcmUgbWV0aG9kcyBleHBvc2VkIHRvIGFs
bG93IGNvbXBpbGUtdGltZSBjYXN0aW5nIGluIEMrKworICAgICAgICBib29sZWFuIGlzTXV0YXRp
b25FdmVudCgpOworICAgICAgICBib29sZWFuIGlzTW91c2VFdmVudCgpOworICAgICAgICBib29s
ZWFuIGlzVUlFdmVudCgpOworI2VuZGlmCisKICAgICB9OwogCiB9CkluZGV4OiBXZWJDb3JlL2Rv
bS9FdmVudExpc3RlbmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRXZlbnRMaXN0ZW5l
ci5oCShyZXZpc2lvbiA2MDE3NykKKysrIFdlYkNvcmUvZG9tL0V2ZW50TGlzdGVuZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMzYsMTIgKzM2LDE1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAg
IGNsYXNzIEV2ZW50TGlzdGVuZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxFdmVudExpc3RlbmVyPiB7
CiAgICAgcHVibGljOgotICAgICAgICBlbnVtIFR5cGUgeyBKU0V2ZW50TGlzdGVuZXJUeXBlLCAK
LSAgICAgICAgICAgICAgICAgICAgSW1hZ2VFdmVudExpc3RlbmVyVHlwZSwgCi0gICAgICAgICAg
ICAgICAgICAgIEluc3BlY3RvckRPTUFnZW50VHlwZSwKLSAgICAgICAgICAgICAgICAgICAgSW5z
cGVjdG9yRE9NU3RvcmFnZVJlc291cmNlVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgT2JqQ0V2
ZW50TGlzdGVuZXJUeXBlLCAKLSAgICAgICAgICAgICAgICAgICAgQ29uZGl0aW9uRXZlbnRMaXN0
ZW5lclR5cGUgfTsKKyAgICAgICAgZW51bSBUeXBlIHsKKyAgICAgICAgICAgIEpTRXZlbnRMaXN0
ZW5lclR5cGUsIAorICAgICAgICAgICAgSW1hZ2VFdmVudExpc3RlbmVyVHlwZSwgCisgICAgICAg
ICAgICBJbnNwZWN0b3JET01BZ2VudFR5cGUsCisgICAgICAgICAgICBJbnNwZWN0b3JET01TdG9y
YWdlUmVzb3VyY2VUeXBlLAorICAgICAgICAgICAgT2JqQ0V2ZW50TGlzdGVuZXJUeXBlLCAKKyAg
ICAgICAgICAgIENvbmRpdGlvbkV2ZW50TGlzdGVuZXJUeXBlLAorICAgICAgICAgICAgQ1BQRXZl
bnRMaXN0ZW5lclR5cGUKKyAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
IHZpcnR1YWwgfkV2ZW50TGlzdGVuZXIoKSB7IH0KICAgICAgICAgdmlydHVhbCBib29sIG9wZXJh
dG9yPT0oY29uc3QgRXZlbnRMaXN0ZW5lciYpID0gMDsKSW5kZXg6IFdlYkNvcmUvZG9tL05vZGUu
aWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL05vZGUuaWRsCShyZXZpc2lvbiA2MDE3NykK
KysrIFdlYkNvcmUvZG9tL05vZGUuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xMzIsNiArMTMyLDcg
QEAgbW9kdWxlIGNvcmUgewogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgYm9vbGVhbiAgICAg
ICAgICBpc0NvbnRlbnRFZGl0YWJsZTsKICNlbmRpZiAvKiBkZWZpbmVkKExBTkdVQUdFX09CSkVD
VElWRV9DKSAqLwogCisjaWYgIWRlZmluZWQoTEFOR1VBR0VfQ1BQKSB8fCAhTEFOR1VBR0VfQ1BQ
CiAjaWYgIWRlZmluZWQoTEFOR1VBR0VfT0JKRUNUSVZFX0MpIHx8ICFMQU5HVUFHRV9PQkpFQ1RJ
VkVfQwogI2lmICFkZWZpbmVkKExBTkdVQUdFX0dPQkpFQ1QpIHx8ICFMQU5HVUFHRV9HT0JKRUNU
CiAgICAgICAgIHZvaWQgYWRkRXZlbnRMaXN0ZW5lcihpbiBET01TdHJpbmcgdHlwZSwgCkBAIC0x
NDQsNiArMTQ1LDE5IEBAIG1vZHVsZSBjb3JlIHsKICAgICAgICAgICAgIHJhaXNlcyhFdmVudEV4
Y2VwdGlvbik7CiAjZW5kaWYKICNlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKExBTkdVQUdF
X0NQUCkgJiYgTEFOR1VBR0VfQ1BQCisgICAgICAgIFtDdXN0b21dIHZvaWQgYWRkRXZlbnRMaXN0
ZW5lcihpbiBET01TdHJpbmcgdHlwZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbiBFdmVudExpc3RlbmVyIGxpc3RlbmVyLCAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGluIGJvb2xlYW4gdXNlQ2FwdHVyZSk7CisgICAgICAg
IFtDdXN0b21dIHZvaWQgcmVtb3ZlRXZlbnRMaXN0ZW5lcihpbiBET01TdHJpbmcgdHlwZSwgCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBFdmVudExpc3Rl
bmVyIGxpc3RlbmVyLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGluIGJvb2xlYW4gdXNlQ2FwdHVyZSk7CisgICAgICAgIGJvb2xlYW4gZGlzcGF0Y2hFdmVu
dChpbiBFdmVudCBldmVudCkKKyAgICAgICAgICAgIHJhaXNlcyhFdmVudEV4Y2VwdGlvbik7Cisj
ZW5kaWYKKwogICAgIH07CiAKIH0KSW5kZXg6IFdlYkNvcmUvZG9tL1BvcFN0YXRlRXZlbnQuaWRs
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1BvcFN0YXRlRXZlbnQuaWRsCShyZXZpc2lvbiA2
MDE3NykKKysrIFdlYkNvcmUvZG9tL1BvcFN0YXRlRXZlbnQuaWRsCSh3b3JraW5nIGNvcHkpCkBA
IC0yNiw2ICsyNiw3IEBACiAKIG1vZHVsZSBldmVudHMgewogCisjaWYgIWRlZmluZWQoTEFOR1VB
R0VfQ1BQKSB8fCAhTEFOR1VBR0VfQ1BQCiAgICAgaW50ZXJmYWNlIFBvcFN0YXRlRXZlbnQgOiBF
dmVudCB7CiAgICAgICAgIHZvaWQgaW5pdFBvcFN0YXRlRXZlbnQoaW4gRE9NU3RyaW5nIHR5cGVB
cmcsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGJvb2xlYW4gY2FuQnViYmxl
QXJnLCAKQEAgLTM0LDUgKzM1LDYgQEAgbW9kdWxlIGV2ZW50cyB7CiAKICAgICAgICAgcmVhZG9u
bHkgYXR0cmlidXRlIFtWOEN1c3RvbUdldHRlcl0gYW55IHN0YXRlOwogICAgIH07CisjZW5kaWYK
IAogfQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmlkbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaWRsCShyZXZpc2lvbiA2MDE3NykK
KysrIFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5pZGwJKHdvcmtpbmcgY29weSkKQEAg
LTM1LDEwICszNSwxMiBAQCBtb2R1bGUgaHRtbCB7CiAgICAgICAgIERPTVN0cmluZyB0b0RhdGFV
UkwoaW4gW0NvbnZlcnRVbmRlZmluZWRPck51bGxUb051bGxTdHJpbmddIERPTVN0cmluZyB0eXBl
KQogICAgICAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7CiAKKyNpZiAhZGVmaW5lZChMQU5H
VUFHRV9DUFApIHx8ICFMQU5HVUFHRV9DUFAKICNpZiAhZGVmaW5lZChMQU5HVUFHRV9PQkpFQ1RJ
VkVfQykgfHwgIUxBTkdVQUdFX09CSkVDVElWRV9DCiAgICAgICAgIC8vIFRoZSBjdXN0b20gYmlu
ZGluZyBpcyBuZWVkZWQgdG8gaGFuZGxlIGNvbnRleHQgY3JlYXRpb24gYXR0cmlidXRlcy4KICAg
ICAgICAgW0N1c3RvbV0gRE9NT2JqZWN0IGdldENvbnRleHQoaW4gRE9NU3RyaW5nIGNvbnRleHRJ
ZCk7CiAjZW5kaWYKKyNlbmRpZgogCiAgICAgfTsKIApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxE
b2N1bWVudC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5pZGwJ
KHJldmlzaW9uIDYwMTc3KQorKysgV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5pZGwJKHdvcmtp
bmcgY29weSkKQEAgLTIzLDcgKzIzLDcgQEAgbW9kdWxlIGh0bWwgewogICAgIGludGVyZmFjZSBb
CiAgICAgICAgIEhhc092ZXJyaWRpbmdOYW1lR2V0dGVyCiAgICAgXSBIVE1MRG9jdW1lbnQgOiBE
b2N1bWVudCB7Ci0gICAgICAgIFtDdXN0b21dIHZvaWQgb3BlbigpOworICAgICAgICBbQ3VzdG9t
LCBOb0NQUEN1c3RvbV0gdm9pZCBvcGVuKCk7CiAgICAgICAgIHZvaWQgY2xvc2UoKTsKICAgICAg
ICAgW0N1c3RvbV0gdm9pZCB3cml0ZShpbiBET01TdHJpbmcgdGV4dCk7CiAgICAgICAgIFtDdXN0
b21dIHZvaWQgd3JpdGVsbihpbiBET01TdHJpbmcgdGV4dCk7CkluZGV4OiBXZWJDb3JlL2h0bWwv
SFRNTElucHV0RWxlbWVudC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxJbnB1
dEVsZW1lbnQuaWRsCShyZXZpc2lvbiA2MDE3NykKKysrIFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRF
bGVtZW50LmlkbAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsOSBAQCBtb2R1bGUgaHRtbCB7
CiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBbQ29udmVydE51bGxUb051bGxTdHJpbmcsIEpT
Q0N1c3RvbUdldHRlcl0gRE9NU3RyaW5nIHR5cGU7IC8vIHJlYWRvbmx5IGRyb3BwZWQgYXMgcGFy
dCBvZiBET00gbGV2ZWwgMgogICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgW0NvbnZlcnROdWxs
VG9OdWxsU3RyaW5nXSBET01TdHJpbmcgdXNlTWFwOwogICAgICAgICAgICAgICAgICBhdHRyaWJ1
dGUgW0NvbnZlcnROdWxsVG9OdWxsU3RyaW5nXSBET01TdHJpbmcgdmFsdWU7CisjaWYgIWRlZmlu
ZWQoTEFOR1VBR0VfQ1BQKSB8fCAhTEFOR1VBR0VfQ1BQCiAgICAgICAgICAgICAgICAgIGF0dHJp
YnV0ZSBEYXRlICAgICAgICAgICAgdmFsdWVBc0RhdGUgc2V0dGVyIHJhaXNlcyhET01FeGNlcHRp
b24pOworI2VuZGlmCiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBkb3VibGUgICAgICAgICAg
dmFsdWVBc051bWJlciBzZXR0ZXIgcmFpc2VzKERPTUV4Y2VwdGlvbik7CiAjaWYgZGVmaW5lZChF
TkFCTEVfREFUQUxJU1QpICYmIEVOQUJMRV9EQVRBTElTVAogICAgICAgICByZWFkb25seSBhdHRy
aWJ1dGUgSFRNTE9wdGlvbkVsZW1lbnQgc2VsZWN0ZWRPcHRpb247CkluZGV4OiBXZWJDb3JlL2h0
bWwvVGV4dE1ldHJpY3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvVGV4dE1ldHJpY3Mu
aAkocmV2aXNpb24gNjAxNzcpCisrKyBXZWJDb3JlL2h0bWwvVGV4dE1ldHJpY3MuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBUZXh0TWV0cmljc19oCiAjZGVmaW5l
IFRleHRNZXRyaWNzX2gKIAorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogV2ViQ29yZS9o
dG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaWRsCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmlkbAkocmV2aXNpb24g
NjAxNzcpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5p
ZGwJKHdvcmtpbmcgY29weSkKQEAgLTkwLDEwICs5MCwxMiBAQCBtb2R1bGUgaHRtbCB7CiAgICAg
ICAgIHZvaWQgc2V0QWxwaGEoaW4gZmxvYXQgYWxwaGEpOwogICAgICAgICB2b2lkIHNldENvbXBv
c2l0ZU9wZXJhdGlvbihpbiBET01TdHJpbmcgY29tcG9zaXRlT3BlcmF0aW9uKTsKIAorI2lmICFk
ZWZpbmVkKExBTkdVQUdFX0NQUCkgfHwgIUxBTkdVQUdFX0NQUAogICAgICAgICB2b2lkIHNldExp
bmVXaWR0aChpbiBmbG9hdCB3aWR0aCk7CiAgICAgICAgIHZvaWQgc2V0TGluZUNhcChpbiBET01T
dHJpbmcgY2FwKTsKICAgICAgICAgdm9pZCBzZXRMaW5lSm9pbihpbiBET01TdHJpbmcgam9pbik7
CiAgICAgICAgIHZvaWQgc2V0TWl0ZXJMaW1pdChpbiBmbG9hdCBsaW1pdCk7CisjZW5kaWYKIAog
ICAgICAgICB2b2lkIGNsZWFyU2hhZG93KCk7CiAKSW5kZXg6IFdlYkNvcmUvcGFnZS9BYnN0cmFj
dFZpZXcuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9BYnN0cmFjdFZpZXcuaWRsCShy
ZXZpc2lvbiA2MDE3NykKKysrIFdlYkNvcmUvcGFnZS9BYnN0cmFjdFZpZXcuaWRsCSh3b3JraW5n
IGNvcHkpCkBAIC0zMiw3ICszMiw3IEBAIG1vZHVsZSB2aWV3cyB7CiAgICAgICAgIE9taXRDb25z
dHJ1Y3RvcgogICAgIF0gQWJzdHJhY3RWaWV3IHsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRl
IERvY3VtZW50IGRvY3VtZW50OwotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgTWVkaWEgc3R5
bGVNZWRpYTsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFN0eWxlTWVkaWEgc3R5bGVNZWRp
YTsKICAgICB9OwogCiB9CkluZGV4OiBXZWJDb3JlL3BhZ2UvTG9jYXRpb24uaWRsCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGFnZS9Mb2NhdGlvbi5pZGwJKHJldmlzaW9uIDYwMTc3KQorKysgV2Vi
Q29yZS9wYWdlL0xvY2F0aW9uLmlkbAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTMgKzQxLDE2IEBA
IG1vZHVsZSB3aW5kb3cgewogICAgICAgICBDdXN0b21Qcm90b3R5cGVEZWZpbmVHZXR0ZXIsCiAg
ICAgICAgIE9taXRDb25zdHJ1Y3RvcgogICAgIF0gTG9jYXRpb24geworI2lmICFkZWZpbmVkKExB
TkdVQUdFX0NQUCkgfHwgIUxBTkdVQUdFX0NQUAogICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUg
W0RvTm90Q2hlY2tEb21haW5TZWN1cml0eU9uU2V0LCBDdXN0b21TZXR0ZXIsIFY4RGlzYWxsb3dT
aGFkb3dpbmddIERPTVN0cmluZyBocmVmOworI2VuZGlmCiAKICAgICAgICAgW0N1c3RvbSwgVjhP
bkluc3RhbmNlXSB2b2lkIGFzc2lnbihpbiBET01TdHJpbmcgdXJsKTsKICAgICAgICAgW0N1c3Rv
bSwgVjhPbkluc3RhbmNlXSB2b2lkIHJlcGxhY2UoaW4gRE9NU3RyaW5nIHVybCk7CiAgICAgICAg
IFtDdXN0b20sIFY4T25JbnN0YW5jZV0gdm9pZCByZWxvYWQoKTsKIAogICAgICAgICAvLyBVUkkg
ZGVjb21wb3NpdGlvbiBhdHRyaWJ1dGVzCisjaWYgIWRlZmluZWQoTEFOR1VBR0VfQ1BQKSB8fCAh
TEFOR1VBR0VfQ1BQCiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBbQ3VzdG9tU2V0dGVyXSBE
T01TdHJpbmcgcHJvdG9jb2w7CiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBbQ3VzdG9tU2V0
dGVyXSBET01TdHJpbmcgaG9zdDsKICAgICAgICAgICAgICAgICAgYXR0cmlidXRlIFtDdXN0b21T
ZXR0ZXJdIERPTVN0cmluZyBob3N0bmFtZTsKQEAgLTU1LDYgKzU4LDcgQEAgbW9kdWxlIHdpbmRv
dyB7CiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBbQ3VzdG9tU2V0dGVyXSBET01TdHJpbmcg
cGF0aG5hbWU7CiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBbQ3VzdG9tU2V0dGVyXSBET01T
dHJpbmcgc2VhcmNoOwogICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgW0N1c3RvbVNldHRlcl0g
RE9NU3RyaW5nIGhhc2g7CisjZW5kaWYKIAogI2lmIGRlZmluZWQoTEFOR1VBR0VfSkFWQVNDUklQ
VCkgJiYgTEFOR1VBR0VfSkFWQVNDUklQVAogICAgICAgICBbRG9udEVudW0sIEN1c3RvbSwgVjhP
bkluc3RhbmNlLCBWOFJlYWRPbmx5XSBET01TdHJpbmcgdG9TdHJpbmcoKTsKSW5kZXg6IFdlYkNv
cmUvcGFnZS9XZWJLaXRQb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9XZWJLaXRQ
b2ludC5oCShyZXZpc2lvbiA2MDE3NykKKysrIFdlYkNvcmUvcGFnZS9XZWJLaXRQb2ludC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIFdlYktpdFBvaW50X2gKICNk
ZWZpbmUgV2ViS2l0UG9pbnRfaAogCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBXZWJD
b3JlL3N0b3JhZ2UvU1FMUmVzdWx0U2V0LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3Jh
Z2UvU1FMUmVzdWx0U2V0LmlkbAkocmV2aXNpb24gNjAxNzcpCisrKyBXZWJDb3JlL3N0b3JhZ2Uv
U1FMUmVzdWx0U2V0LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMzUsOCArMzUsMTQgQEAgbW9kdWxl
IHN0b3JhZ2UgewogICAgIF0gU1FMUmVzdWx0U2V0IHsKICAgICAgICAgcmVhZG9ubHkgYXR0cmli
dXRlIFNRTFJlc3VsdFNldFJvd0xpc3Qgcm93czsKIAorI2lmICFkZWZpbmVkKExBTkdVQUdFX0NQ
UCkgfHwgIUxBTkdVQUdFX0NQUAogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgbG9uZyBpbnNl
cnRJZAogICAgICAgICAgICAgZ2V0dGVyIHJhaXNlcyhET01FeGNlcHRpb24pOworI2Vsc2UKKyAg
ICAgICAgLy8gRXhwbGljaXRlbHkgY2hvb3NlICdsb25nIGxvbmcnIGhlcmUgdG8gYXZvaWQgYSA2
NGJpdC0+MzJiaXQgc2hvcnRlbmluZyB3YXJuaW5nIGZvciB1cy4KKyAgICAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIGxvbmcgbG9uZyBpbnNlcnRJZAorICAgICAgICAgICAgZ2V0dGVyIHJhaXNlcyhE
T01FeGNlcHRpb24pOworI2VuZGlmCiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBsb25nIHJv
d3NBZmZlY3RlZDsKICAgICB9OwogfQpJbmRleDogV2ViQ29yZS93b3JrZXJzL0RlZGljYXRlZFdv
cmtlckNvbnRleHQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd29ya2Vycy9EZWRpY2F0ZWRX
b3JrZXJDb250ZXh0LmlkbAkocmV2aXNpb24gNjAxNzcpCisrKyBXZWJDb3JlL3dvcmtlcnMvRGVk
aWNhdGVkV29ya2VyQ29udGV4dC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAg
bW9kdWxlIHRocmVhZHMgewogICAgICAgICBPbWl0Q29uc3RydWN0b3IKICAgICBdIERlZGljYXRl
ZFdvcmtlckNvbnRleHQgOiBXb3JrZXJDb250ZXh0IHsKIAorI2lmICFkZWZpbmVkKExBTkdVQUdF
X0NQUCkgfHwgIUxBTkdVQUdFX0NQUAogI2lmIGRlZmluZWQoTEFOR1VBR0VfSkFWQVNDUklQVCkg
JiYgTEFOR1VBR0VfSkFWQVNDUklQVAogICAgICAgICBbQ3VzdG9tXSB2b2lkIHBvc3RNZXNzYWdl
KGluIGFueSBtZXNzYWdlLCBpbiBbT3B0aW9uYWxdIEFycmF5IG1lc3NhZ2VQb3J0cykKICAgICAg
ICAgICAgIHJhaXNlcyhET01FeGNlcHRpb24pOwpAQCAtNDcsNiArNDgsOCBAQCBtb2R1bGUgdGhy
ZWFkcyB7CiAgICAgICAgIHZvaWQgcG9zdE1lc3NhZ2UoaW4gRE9NU3RyaW5nIG1lc3NhZ2UsIGlu
IFtPcHRpb25hbF0gTWVzc2FnZVBvcnQgbWVzc2FnZVBvcnQpCiAgICAgICAgICAgICByYWlzZXMo
RE9NRXhjZXB0aW9uKTsKICNlbmRpZgorI2VuZGlmCisKICAgICAgICAgICAgICAgICAgYXR0cmli
dXRlIEV2ZW50TGlzdGVuZXIgb25tZXNzYWdlOwogCiAgICAgfTsKSW5kZXg6IFdlYkNvcmUvd29y
a2Vycy9Xb3JrZXJDb250ZXh0LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dvcmtlcnMvV29y
a2VyQ29udGV4dC5pZGwJKHJldmlzaW9uIDYwMTc3KQorKysgV2ViQ29yZS93b3JrZXJzL1dvcmtl
ckNvbnRleHQuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC03OSw2ICs3OSw3IEBAIG1vZHVsZSB0aHJl
YWRzIHsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFtFbmFibGVkQXRSdW50aW1lXSBOb3Rp
ZmljYXRpb25DZW50ZXIgd2Via2l0Tm90aWZpY2F0aW9uczsKICNlbmRpZgogCisjaWYgIWRlZmlu
ZWQoTEFOR1VBR0VfQ1BQKSB8fCAhTEFOR1VBR0VfQ1BQCiAgICAgICAgIC8vIENvbnN0cnVjdG9y
cwogICAgICAgICBhdHRyaWJ1dGUgTWVzc2FnZUV2ZW50Q29uc3RydWN0b3IgTWVzc2FnZUV2ZW50
OwogICAgICAgICBhdHRyaWJ1dGUgV29ya2VyTG9jYXRpb25Db25zdHJ1Y3RvciBXb3JrZXJMb2Nh
dGlvbjsKQEAgLTkzLDYgKzk0LDcgQEAgbW9kdWxlIHRocmVhZHMgewogI2lmIGRlZmluZWQoRU5B
QkxFX1dFQl9TT0NLRVRTKSAmJiBFTkFCTEVfV0VCX1NPQ0tFVFMKICAgICAgICAgYXR0cmlidXRl
IFtKU0NDdXN0b21HZXR0ZXIsRW5hYmxlZEF0UnVudGltZV0gV2ViU29ja2V0Q29uc3RydWN0b3Ig
V2ViU29ja2V0OyAvLyBVc2FibGUgd2l0aCB0aGUgbmV3IG9wZXJhdG9yCiAjZW5kaWYKKyNlbmRp
ZgogICAgIH07CiAKIH0KSW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXRUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDYwMTc3KQorKysgV2ViS2l0VG9vbHMv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTAtMDUtMjYgIE5p
a29sYXMgWmltbWVybWFubiAgPG56aW1tZXJtYW5uQHJpbS5jb20+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIENQUCBiaW5kaW5ncyBnZW5lcmF0
b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM4Mjc5
CisKKyAgICAgICAgSW50ZWdyYXRlIENQUCBiaW5kaW5ncyBpbiBydW4tYmluZGluZ3MtdGVzdHMs
IHNvIHdlIGNhbiBpbW1lZGlhdGVseSBzcG90IGdlbmVyYXRpb24gZGlmZmVyZW5jZXMuCisKKyAg
ICAgICAgKiBTY3JpcHRzL3J1bi1iaW5kaW5ncy10ZXN0czoKKwogMjAxMC0wNS0yNCAgQW50b25p
byBHb21lcyAgPHRvbmlraXRvb0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVy
aWMgU2VpZGVsIGFuZCBLZW50IFRhbXVyYSAoZm9yIHRoZSBDaHJvbWl1bSBwYXJ0KS4KSW5kZXg6
IFdlYktpdFRvb2xzL1NjcmlwdHMvcnVuLWJpbmRpbmdzLXRlc3RzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdFRvb2xzL1NjcmlwdHMvcnVuLWJpbmRpbmdzLXRlc3RzCShyZXZpc2lvbiA2MDE3NykKKysr
IFdlYktpdFRvb2xzL1NjcmlwdHMvcnVuLWJpbmRpbmdzLXRlc3RzCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTYsNiArMTE2LDcgQEAgZGVmIG1haW4oYXJndik6CiAgICAgICAgICdWOCcsCiAgICAgICAg
ICdPYmpDJywKICAgICAgICAgJ0dPYmplY3QnLAorICAgICAgICAnQ1BQJwogICAgIF0KIAogICAg
IGZvciBnZW5lcmF0b3IgaW4gZ2VuZXJhdG9yczoK
</data>
<flag name="review"
          id="41598"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>