<?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>38414</bug_id>
          
          <creation_ts>2010-04-30 17:17:41 -0700</creation_ts>
          <short_desc>Auto-generate the callbacks code</short_desc>
          <delta_ts>2010-05-03 15:38:39 -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>New Bugs</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="Dumitru Daniliuc">dumi</reporter>
          <assigned_to name="Dumitru Daniliuc">dumi</assigned_to>
          <cc>abarth</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yaar</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>219657</commentid>
    <comment_count>0</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-04-30 17:17:41 -0700</bug_when>
    <thetext>CodeGenerator{JS|V8}.pm should be able to auto-generate code for most callbacks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219675</commentid>
    <comment_count>1</comment_count>
      <attachid>54842</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-04-30 18:01:37 -0700</bug_when>
    <thetext>Created attachment 54842
patch

Attaching only the CodeGeneratorJS.pm changes for now (will port to CodeGeneratorV8.pm once we have a final CodeGeneratorJS.pm version).

The patch adds support for callbacks that do not return a value.

The developers will be expected to provide the MyCallback.h and MyCallback.idl files as follows:

MyCallback.h:
namespace WebCore {

class MyClass1;
class MyClass2;
class ScriptExecutionContext;

class MyCallback {
public:
    virtual ~MyCallback();
    virtual bool doStuffWithClass1(ScriptExecutionContext* context, MyClass1* obj1) = 0;
    virtual bool doStuffWithClass2(ScriptExecutionContext* context, MyClass2* obj2, ... other input parameters ... ) = 0;
};

} // namespace WebCore


MyCallbacks.idl
module SomeModule {
    interface [
        Callback
    ] MyCallbacks {
        boolean doStuffWithClass1(in ScriptExecutionContext context, in MyClass1 obj1);
        boolean doStuffWithClass2(in ScriptExecutionContext context, in MyClass2 obj2, ... other input parameters ... );
    }
}

Then the code generators will auto-generate a MyCallback implementation that will invoke the callback with the given parameters.

Restrictions:
-- First parameter must be a ScriptExecutionContext.
-- The return type must be bool (but can be ignored). It tells the developer if an exception was thrown while invoking the callback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219754</commentid>
    <comment_count>2</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-05-01 15:25:42 -0700</bug_when>
    <thetext>Excited about this patch.  Will review in the next few days.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219773</commentid>
    <comment_count>3</comment_count>
      <attachid>54842</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-05-01 22:00:53 -0700</bug_when>
    <thetext>Comment on attachment 54842
patch

Please add a test of this to TestObject.idl (used by run-bindings-tests).  That would make this easier to review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219933</commentid>
    <comment_count>4</comment_count>
      <attachid>54895</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-05-02 18:14:04 -0700</bug_when>
    <thetext>Created attachment 54895
patch

Added a test case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219934</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-05-02 18:17:59 -0700</bug_when>
    <thetext>Attachment 54895 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/JS/JSTestCallback.cpp:63:  More than one command on the same line in if  [whitespace/parens] [4]
WebCore/bindings/scripts/test/JS/JSTestCallback.cpp:84:  More than one command on the same line in if  [whitespace/parens] [4]
Total errors found: 2 in 7 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>219946</commentid>
    <comment_count>6</comment_count>
      <attachid>54899</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-05-02 18:41:45 -0700</bug_when>
    <thetext>Created attachment 54899
patch

Fixing the style problem in the auto-generated code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219983</commentid>
    <comment_count>7</comment_count>
      <attachid>54899</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-05-02 19:26:08 -0700</bug_when>
    <thetext>Comment on attachment 54899
patch

This is looking great.  A few small comments below.

WebCore/bindings/scripts/CodeGeneratorJS.pm:1909
 +      push(@headerContentHeader, &quot;\n#define $className&quot; . &quot;_h\n\n&quot;);
This must be copy/paste from elsewhere in this file.  Can we factor the common code into a subroutine?

WebCore/bindings/scripts/CodeGeneratorJS.pm:2022
 +                  !($params[0]-&gt;type eq &quot;ScriptExecutionContext&quot;)) {
Maybe add a COMPILE_ASSERT(false) to explain that we don&apos;t support these cases yet?

WebCore/bindings/scripts/test/TestCallback.idl:36
 +        boolean callbackWithClass1Param(in ScriptExecutionContext context, in Class1 class1Param);
I wonder if we should omit the ScriptExecutionContext parameter from this declaration.  We can use a [CallWith=ScriptExecutionContext] attribute instead.  You can see examples of how we handled [CallWith=ScriptState] in other IDL files.

WebCore/bindings/scripts/test/JS/JSTestCallback.h:44
 +      // Non-bool return type for non-custom function:    int callbackWithNonBoolReturnType(ScriptExecutionContext* context, Class3* class3Param);
I don&apos;t think we should have commented out code.  If these are an error to use in the IDL file, we should generated COMPILE_ASSERT(false).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220035</commentid>
    <comment_count>8</comment_count>
      <attachid>54908</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-05-03 00:06:01 -0700</bug_when>
    <thetext>Created attachment 54908
patch

Ported the changes to the V8 code generator too.

Question about V8 callbacks: do we still need to store the current frame and protect it? Or should we rather protect the callback instance like we do in the JSC implementation?

&gt; WebCore/bindings/scripts/CodeGeneratorJS.pm:1909
&gt;  +      push(@headerContentHeader, &quot;\n#define $className&quot; . &quot;_h\n\n&quot;);
&gt; This must be copy/paste from elsewhere in this file.  Can we factor the common
&gt; code into a subroutine?

done. added GenerateHeaderContentHeader and GenerateImplementationContentHeader functions to both code generators.

&gt; WebCore/bindings/scripts/CodeGeneratorJS.pm:2022
&gt;  +                  !($params[0]-&gt;type eq &quot;ScriptExecutionContext&quot;)) {
&gt; Maybe add a COMPILE_ASSERT(false) to explain that we don&apos;t support these cases
&gt; yet?

i changed the generators to automatically insert a ScriptExecutionContext* parameter.

&gt; WebCore/bindings/scripts/test/TestCallback.idl:36
&gt;  +        boolean callbackWithClass1Param(in ScriptExecutionContext context, in
&gt; Class1 class1Param);
&gt; I wonder if we should omit the ScriptExecutionContext parameter from this
&gt; declaration.  We can use a [CallWith=ScriptExecutionContext] attribute instead.
&gt;  You can see examples of how we handled [CallWith=ScriptState] in other IDL
&gt; files.

Omitted the ScriptExecutionContext. I don&apos;t think we need a [CallWith] attribute, at least not at this time. It seems to me that all callbacks need to be called with a ScriptExecutionContext parameter (or at least, the auto-generated implementation assumes that). If in the future this assumption needs to change, we can add a [CallWith] attribute then.

&gt; WebCore/bindings/scripts/test/JS/JSTestCallback.h:44
&gt;  +      // Non-bool return type for non-custom function:    int
&gt; callbackWithNonBoolReturnType(ScriptExecutionContext* context, Class3*
&gt; class3Param);
&gt; I don&apos;t think we should have commented out code.  If these are an error to use
&gt; in the IDL file, we should generated COMPILE_ASSERT(false).

Done, but not sure if I did it right. Please take a look at the generated .h files and let me know if I used COMPILE_ASSERT(false) correctly.

By the way, the copyright headers for JSC and V8 generated files have different addresses for FSF (last 2 lines).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220106</commentid>
    <comment_count>9</comment_count>
      <attachid>54908</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-05-03 07:58:12 -0700</bug_when>
    <thetext>Comment on attachment 54908
patch

Thanks so much for writing this patch.  I&apos;m sure we&apos;ll have to iterate on this code as we port more of the callbacks to autogen, but this looks like a great start.


WebCore/bindings/scripts/CodeGeneratorV8.pm:2266
 +              pop(@implContent);  # remove the last comma and newline
Isn&apos;t there some sort of join function that can do this more cleanly?

WebCore/bindings/scripts/CodeGeneratorV8.pm:2761
 +  sub GetNativeTypeForCallbacks
It&apos;s strange that we have this for V8 but not for jsc.

WebCore/bindings/scripts/test/JS/JSTestCallback.h:44
 +      COMPILE_ASSERT(false)    virtual int callbackWithNonBoolReturnType(ScriptExecutionContext*, Class3* class3Param);
I don&apos;t think this is quite right, but it will have the desired effect of not compiling.

WebCore/bindings/scripts/test/V8/V8TestCallback.cpp:37
 +      , m_frame(frame)
I don&apos;t think holding the frame is right, as we discussed earlier.  However I think that&apos;s ok for now given that this is what the custom code does.

WebCore/bindings/scripts/test/V8/V8TestCallback.cpp:66
 +      return !invokeCallback(m_callback, 1, argv, callbackReturnValue);
It&apos;s strange to see this constant here, but I guess it makes sense.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220310</commentid>
    <comment_count>10</comment_count>
      <attachid>54963</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-05-03 15:01:00 -0700</bug_when>
    <thetext>Created attachment 54963
patch

adam, please take another look, just to be sure everything&apos;s fine.

&gt; WebCore/bindings/scripts/CodeGeneratorV8.pm:2266
&gt;  +              pop(@implContent);  # remove the last comma and newline
&gt; Isn&apos;t there some sort of join function that can do this more cleanly?

done:

@argvs = ();
foreach my $param (@params) {
    my $paramName = $param-&gt;name;
    push(@argvs, &quot;        toV8(${paramName})&quot;);
}
push(@implContent, join(&quot;,\n&quot;, @argvs));


&gt; WebCore/bindings/scripts/CodeGeneratorV8.pm:2761
&gt;  +  sub GetNativeTypeForCallbacks
&gt; It&apos;s strange that we have this for V8 but not for jsc.

the GetNativeType() method in the JSC code generator works just fine. the one in the V8 code generator though wants to either convert DOMString to V8Parameter or wrap all pointers in RefPtrs, and i&apos;m not sure how to get around that.

&gt; WebCore/bindings/scripts/test/JS/JSTestCallback.h:44
&gt;  +      COMPILE_ASSERT(false)    virtual int
&gt; callbackWithNonBoolReturnType(ScriptExecutionContext*, Class3* class3Param);
&gt; I don&apos;t think this is quite right, but it will have the desired effect of not
&gt; compiling.

what would be a better way to do this?

&gt; WebCore/bindings/scripts/test/V8/V8TestCallback.cpp:37
&gt;  +      , m_frame(frame)
&gt; I don&apos;t think holding the frame is right, as we discussed earlier.  However I
&gt; think that&apos;s ok for now given that this is what the custom code does.

sounds good.

&gt; WebCore/bindings/scripts/test/V8/V8TestCallback.cpp:66
&gt;  +      return !invokeCallback(m_callback, 1, argv, callbackReturnValue);
&gt; It&apos;s strange to see this constant here, but I guess it makes sense.

oops, this was a bug. instead of 1 it should be the length of &apos;argv&apos;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220312</commentid>
    <comment_count>11</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-05-03 15:01:58 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; @argvs = ();
&gt; foreach my $param (@params) {
&gt;     my $paramName = $param-&gt;name;
&gt;     push(@argvs, &quot;        toV8(${paramName})&quot;);
&gt; }
&gt; push(@implContent, join(&quot;,\n&quot;, @argvs));

hmm, should be &quot;my @argvs&quot;. will fix on landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220315</commentid>
    <comment_count>12</comment_count>
      <attachid>54963</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-05-03 15:10:01 -0700</bug_when>
    <thetext>Comment on attachment 54963
patch

Okiedokes!

WebCore/bindings/scripts/CodeGeneratorJS.pm:525
 +  sub GenerateHeaderContentHeader
The pattern we prefer here is to return a local @code and have the caller push it onto @headerContentHeader.  That way we have fewer mucking with global variables.

WebCore/bindings/scripts/CodeGeneratorV8.pm:2218
 +      push(@implContent, &lt;&lt;END);
It&apos;s unclear when you decide to use this patter and when you use strings directly.  I&apos;m not sure it really matters, but we should aim for consistency in the long term.

WebCore/bindings/scripts/CodeGeneratorV8.pm:2261
 +              @argvs = ();
my @argvs

WebCore/bindings/scripts/CodeGeneratorV8.pm:2761
 +  sub GetNativeTypeForCallbacks
This function continues to make me sad.  We should rationalize how this works in the two generators someday.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220326</commentid>
    <comment_count>13</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-05-03 15:25:35 -0700</bug_when>
    <thetext>&gt; WebCore/bindings/scripts/CodeGeneratorJS.pm:525
&gt;  +  sub GenerateHeaderContentHeader
&gt; The pattern we prefer here is to return a local @code and have the caller push
&gt; it onto @headerContentHeader.  That way we have fewer mucking with global
&gt; variables.

done.

&gt; WebCore/bindings/scripts/CodeGeneratorV8.pm:2218
&gt;  +      push(@implContent, &lt;&lt;END);
&gt; It&apos;s unclear when you decide to use this patter and when you use strings
&gt; directly.  I&apos;m not sure it really matters, but we should aim for consistency in
&gt; the long term.

in the JSC generator push(@implContent, &lt;&lt;END) doesn&apos;t seem to be used at all, so i didn&apos;t use it there. in the V8 generator it seems to be used whenever a large block of code that doesn&apos;t depend on any perl variable needs to be written to a file, so that&apos;s when i tried to use it too.

&gt; WebCore/bindings/scripts/CodeGeneratorV8.pm:2261
&gt;  +              @argvs = ();
&gt; my @argvs

fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220336</commentid>
    <comment_count>14</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-05-03 15:38:39 -0700</bug_when>
    <thetext>Landed as r58710.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54842</attachid>
            <date>2010-04-30 18:01:37 -0700</date>
            <delta_ts>2010-05-02 18:14:04 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>8693</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1ODYyNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTMgQEAKKzIwMTAtMDQtMzAgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGQgdGhlIGFiaWxpdHkgdG8gYXV0by1nZW5lcmF0ZSBjYWxsYmFja3MgY29kZSB0byBDb2Rl
R2VuZXJhdG9ye0pTfFY4fS5wbS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTM4NDE0CisKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JKUy5wbToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5w
bToKKwogMjAxMC0wNC0zMCAgSm9uIEhvbmV5Y3V0dCAgPGpob25leWN1dHRAYXBwbGUuY29tPgog
CiAgICAgICAgIENhcmV0IG1heSBmYWlsIHRvIGJsaW5rIGlmIGEgZm9jdXMgaGFuZGxlciBicmlu
Z3MgdXAgYSBtb2RhbCBkaWFsb2cgCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29k
ZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9D
b2RlR2VuZXJhdG9ySlMucG0JKHJldmlzaW9uIDU4NjI1KQorKysgV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAtMTAxLDggKzEwMSwx
MyBAQCBzdWIgR2VuZXJhdGVJbnRlcmZhY2UKICAgICBteSAkZGVmaW5lcyA9IHNoaWZ0OwogCiAg
ICAgIyBTdGFydCBhY3R1YWwgZ2VuZXJhdGlvbgotICAgICRvYmplY3QtPkdlbmVyYXRlSGVhZGVy
KCRkYXRhTm9kZSk7Ci0gICAgJG9iamVjdC0+R2VuZXJhdGVJbXBsZW1lbnRhdGlvbigkZGF0YU5v
ZGUpOworICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDYWxsYmFjayJ9
KSB7CisgICAgICAgICRvYmplY3QtPkdlbmVyYXRlQ2FsbGJhY2tIZWFkZXIoJGRhdGFOb2RlKTsK
KyAgICAgICAgJG9iamVjdC0+R2VuZXJhdGVDYWxsYmFja0ltcGxlbWVudGF0aW9uKCRkYXRhTm9k
ZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgJG9iamVjdC0+R2VuZXJhdGVIZWFkZXIoJGRhdGFO
b2RlKTsKKyAgICAgICAgJG9iamVjdC0+R2VuZXJhdGVJbXBsZW1lbnRhdGlvbigkZGF0YU5vZGUp
OworICAgIH0KIAogICAgIG15ICRuYW1lID0gJGRhdGFOb2RlLT5uYW1lOwogCkBAIC0xODg4LDYg
KzE4OTMsMTc4IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgcHVzaChAaW1wbENv
bnRlbnQsICJcbiNlbmRpZiAvLyAke2NvbmRpdGlvbmFsU3RyaW5nfVxuIikgaWYgJGNvbmRpdGlv
bmFsU3RyaW5nOwogfQogCitzdWIgR2VuZXJhdGVDYWxsYmFja0hlYWRlcgoreworICAgIG15ICRv
YmplY3QgPSBzaGlmdDsKKyAgICBteSAkZGF0YU5vZGUgPSBzaGlmdDsKKworICAgIG15ICRpbnRl
cmZhY2VOYW1lID0gJGRhdGFOb2RlLT5uYW1lOworICAgIG15ICRjbGFzc05hbWUgPSAiSlMkaW50
ZXJmYWNlTmFtZSI7CisKKyAgICAjIC0gQWRkIGRlZmF1bHQgaGVhZGVyIHRlbXBsYXRlCisgICAg
QGhlYWRlckNvbnRlbnRIZWFkZXIgPSBzcGxpdCgiXHIiLCAkaGVhZGVyVGVtcGxhdGUpOworCisg
ICAgIyAtIEFkZCBoZWFkZXIgcHJvdGVjdGlvbgorICAgIHB1c2goQGhlYWRlckNvbnRlbnRIZWFk
ZXIsICJcbiNpZm5kZWYgJGNsYXNzTmFtZSIgLiAiX2giKTsKKyAgICBwdXNoKEBoZWFkZXJDb250
ZW50SGVhZGVyLCAiXG4jZGVmaW5lICRjbGFzc05hbWUiIC4gIl9oXG5cbiIpOworCisgICAgbXkg
JGNvbmRpdGlvbmFsU3RyaW5nID0gR2VuZXJhdGVDb25kaXRpb25hbFN0cmluZygkZGF0YU5vZGUp
OworICAgIHB1c2goQGhlYWRlckNvbnRlbnRIZWFkZXIsICIjaWYgJHtjb25kaXRpb25hbFN0cmlu
Z31cblxuIikgaWYgJGNvbmRpdGlvbmFsU3RyaW5nOworCisgICAgJGhlYWRlckluY2x1ZGVzeyIk
aW50ZXJmYWNlTmFtZS5oIn0gPSAxOworICAgICRoZWFkZXJJbmNsdWRlc3siSlNDYWxsYmFja0Rh
dGEuaCJ9ID0gMTsKKyAgICAkaGVhZGVySW5jbHVkZXN7Ijx3dGYvRm9yd2FyZC5oPiJ9ID0gMTsK
KworICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJcbm5hbWVzcGFjZSBXZWJDb3JlIHtcblxuIik7
CisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgImNsYXNzICRjbGFzc05hbWUgOiBwdWJsaWMgJGlu
dGVyZmFjZU5hbWUge1xuIik7CisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgInB1YmxpYzpcbiIp
OworCisgICAgIyBUaGUgc3RhdGljIGNyZWF0ZSgpIG1ldGhvZC4KKyAgICBwdXNoKEBoZWFkZXJD
b250ZW50LCAiICAgIHN0YXRpYyBQYXNzUmVmUHRyPCRjbGFzc05hbWU+IGNyZWF0ZShKU0M6OkpT
T2JqZWN0KiBjYWxsYmFjaywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdClcbiIpOwor
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAge1xuIik7CisgICAgcHVzaChAaGVhZGVyQ29u
dGVudCwgIiAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyAkY2xhc3NOYW1lKGNhbGxiYWNrLCBn
bG9iYWxPYmplY3QpKTtcbiIpOworICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgfVxuXG4i
KTsKKworICAgICMgRGVzdHJ1Y3RvcgorICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgdmly
dHVhbCB+JGNsYXNzTmFtZSgpO1xuIik7CisKKyAgICAjIEZ1bmN0aW9ucworICAgIG15ICRudW1G
dW5jdGlvbnMgPSBAeyRkYXRhTm9kZS0+ZnVuY3Rpb25zfTsKKyAgICBpZiAoJG51bUZ1bmN0aW9u
cyA+IDApIHsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlxuICAgIC8vIEZ1bmN0aW9u
c1xuIik7CisgICAgICAgIGZvcmVhY2ggbXkgJGZ1bmN0aW9uIChAeyRkYXRhTm9kZS0+ZnVuY3Rp
b25zfSkgeworICAgICAgICAgICAgbXkgQHBhcmFtcyA9IEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJz
fTsKKyAgICAgICAgICAgIGlmICghJGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJDdXN0b20ifSkgeworICAgICAgICAgICAgICAgIGlmICghKEdldE5hdGl2ZVR5cGUo
JGZ1bmN0aW9uLT5zaWduYXR1cmUtPnR5cGUpIGVxICJib29sIikpIHsKKyAgICAgICAgICAgICAg
ICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAvLyBOb24tYm9vbCByZXR1cm4gdHlwZSBm
b3Igbm9uLWN1c3RvbSBmdW5jdGlvbjoiKTsKKyAgICAgICAgICAgICAgICB9IGVsc2lmICghKCRw
YXJhbXNbMF0tPnR5cGUgZXEgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQiKSkgeworICAgICAgICAg
ICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIC8vIEZpcnN0IHBhcmFtZXRlciBp
cyBub3QgYSBTY3JpcHRFeGVjdXRpb25Db250ZXh0OiIpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAiIC4g
R2V0TmF0aXZlVHlwZSgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+dHlwZSkgLiAiICIgLiAkZnVuY3Rp
b24tPnNpZ25hdHVyZS0+bmFtZSAuICIoIik7CisgICAgICAgICAgICBteSAkZmlyc3RQYXJhbSA9
IDE7CisgICAgICAgICAgICBmb3JlYWNoIG15ICRwYXJhbSAoQHBhcmFtcykgeworICAgICAgICAg
ICAgICAgIGlmICgkZmlyc3RQYXJhbSkgeworICAgICAgICAgICAgICAgICAgICAkZmlyc3RQYXJh
bSA9IDA7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcHVz
aChAaGVhZGVyQ29udGVudCwgIiwgIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsIEdldE5hdGl2ZVR5cGUoJHBhcmFtLT50eXBlKSAuICIg
IiAuICRwYXJhbS0+bmFtZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsICIpO1xuIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdXNoKEBoZWFk
ZXJDb250ZW50LCAicHJpdmF0ZTpcbiIpOworCisgICAgIyBDb25zdHJ1Y3RvcgorICAgIHB1c2go
QGhlYWRlckNvbnRlbnQsICIgICAgJGNsYXNzTmFtZShKU0M6OkpTT2JqZWN0KiBjYWxsYmFjaywg
SlNET01HbG9iYWxPYmplY3QqKTtcbiIpOworCisgICAgIyBQcml2YXRlIG1lbWJlcnMKKyAgICBw
dXNoKEBoZWFkZXJDb250ZW50LCAiICAgIEpTQ2FsbGJhY2tEYXRhKiBtX2RhdGE7XG4iKTsKKyAg
ICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIFJlZlB0cjxET01XcmFwcGVyV29ybGQ+IG1faXNv
bGF0ZWRXb3JsZDtcbiIpOworICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJ9O1xuXG4iKTsKKwor
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJ9IC8vIG5hbWVzcGFjZSBXZWJDb3JlXG5cbiIpOwor
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIjZW5kaWYgLy8gJHtjb25kaXRpb25hbFN0cmluZ31c
blxuIikgaWYgJGNvbmRpdGlvbmFsU3RyaW5nOworICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIj
ZW5kaWZcbiIpOworfQorCitzdWIgR2VuZXJhdGVDYWxsYmFja0ltcGxlbWVudGF0aW9uCit7Cisg
ICAgbXkgKCRvYmplY3QsICRkYXRhTm9kZSkgPSBAXzsKKworICAgIG15ICRpbnRlcmZhY2VOYW1l
ID0gJGRhdGFOb2RlLT5uYW1lOworICAgIG15ICRjbGFzc05hbWUgPSAiSlMkaW50ZXJmYWNlTmFt
ZSI7CisKKyAgICAjIC0gQWRkIGRlZmF1bHQgaGVhZGVyIHRlbXBsYXRlCisgICAgQGltcGxDb250
ZW50SGVhZGVyID0gc3BsaXQoIlxyIiwgJGhlYWRlclRlbXBsYXRlKTsKKworICAgIHB1c2goQGlt
cGxDb250ZW50SGVhZGVyLCAiXG4jaW5jbHVkZSBcImNvbmZpZy5oXCJcbiIpOworICAgIG15ICRj
b25kaXRpb25hbFN0cmluZyA9IEdlbmVyYXRlQ29uZGl0aW9uYWxTdHJpbmcoJGRhdGFOb2RlKTsK
KyAgICBwdXNoKEBpbXBsQ29udGVudEhlYWRlciwgIlxuI2lmICR7Y29uZGl0aW9uYWxTdHJpbmd9
XG5cbiIpIGlmICRjb25kaXRpb25hbFN0cmluZzsKKyAgICBwdXNoKEBpbXBsQ29udGVudEhlYWRl
ciwgIiNpbmNsdWRlIFwiJGNsYXNzTmFtZS5oXCJcblxuIik7CisKKyAgICAkaW1wbEluY2x1ZGVz
eyI8cnVudGltZS9KU0xvY2suaD4ifSA9IDE7CisgICAgJGltcGxJbmNsdWRlc3siPHd0Zi9NYWlu
VGhyZWFkLmg+In0gPSAxOworCisgICAgQGltcGxDb250ZW50ID0gKCk7CisKKyAgICBwdXNoKEBp
bXBsQ29udGVudCwgIlxudXNpbmcgbmFtZXNwYWNlIEpTQztcblxuIik7CisgICAgcHVzaChAaW1w
bENvbnRlbnQsICJuYW1lc3BhY2UgV2ViQ29yZSB7XG5cbiIpOworCisgICAgIyBDb25zdHJ1Y3Rv
cgorICAgIHB1c2goQGltcGxDb250ZW50LCAiJHtjbGFzc05hbWV9Ojoke2NsYXNzTmFtZX0oSlNP
YmplY3QqIGNhbGxiYWNrLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KVxuIik7Cisg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgOiBtX2RhdGEobmV3IEpTQ2FsbGJhY2tEYXRhKGNh
bGxiYWNrLCBnbG9iYWxPYmplY3QpKVxuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
LCBtX2lzb2xhdGVkV29ybGQoZ2xvYmFsT2JqZWN0LT53b3JsZCgpKVxuIik7CisgICAgcHVzaChA
aW1wbENvbnRlbnQsICJ7XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CisK
KyAgICAjIERlc3RydWN0b3IKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiR7Y2xhc3NOYW1lfTo6
fiR7Y2xhc3NOYW1lfSgpXG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOworICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIGNhbGxPbk1haW5UaHJlYWQoSlNDYWxsYmFja0RhdGE6
OmRlbGV0ZURhdGEsIG1fZGF0YSk7XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiNpZm5k
ZWYgTkRFQlVHXG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBtX2RhdGEgPSAwO1xu
Iik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIjZW5kaWZcbiIpOworICAgIHB1c2goQGltcGxD
b250ZW50LCAifVxuIik7CisKKyAgICAjIEZ1bmN0aW9ucworICAgIG15ICRudW1GdW5jdGlvbnMg
PSBAeyRkYXRhTm9kZS0+ZnVuY3Rpb25zfTsKKyAgICBpZiAoJG51bUZ1bmN0aW9ucyA+IDApIHsK
KyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbi8vIEZ1bmN0aW9uc1xuIik7CisgICAgICAg
IGZvcmVhY2ggbXkgJGZ1bmN0aW9uIChAeyRkYXRhTm9kZS0+ZnVuY3Rpb25zfSkgeworICAgICAg
ICAgICAgbXkgQHBhcmFtcyA9IEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfTsKKyAgICAgICAgICAg
IGlmICgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbSJ9
IHx8CisgICAgICAgICAgICAgICAgIShHZXROYXRpdmVUeXBlKCRmdW5jdGlvbi0+c2lnbmF0dXJl
LT50eXBlKSBlcSAiYm9vbCIpIHx8CisgICAgICAgICAgICAgICAgISgkcGFyYW1zWzBdLT50eXBl
IGVxICJTY3JpcHRFeGVjdXRpb25Db250ZXh0IikpIHsKKyAgICAgICAgICAgICAgICBuZXh0Owor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBBZGRJbmNsdWRlc0ZvclR5cGUoJGZ1bmN0aW9u
LT5zaWduYXR1cmUtPnR5cGUpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiIg
LiBHZXROYXRpdmVUeXBlKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT50eXBlKSAuICIgJHtjbGFzc05h
bWV9OjoiIC4gJGZ1bmN0aW9uLT5zaWduYXR1cmUtPm5hbWUgLiAiKCIpOworCisgICAgICAgICAg
ICBteSAkZmlyc3RQYXJhbSA9IDE7CisgICAgICAgICAgICBmb3JlYWNoIG15ICRwYXJhbSAoQHBh
cmFtcykgeworICAgICAgICAgICAgICAgIEFkZEluY2x1ZGVzRm9yVHlwZSgkcGFyYW0tPnR5cGUp
OworICAgICAgICAgICAgICAgIGlmICgkZmlyc3RQYXJhbSkgeworICAgICAgICAgICAgICAgICAg
ICAkZmlyc3RQYXJhbSA9IDA7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIsICIpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgR2V0TmF0aXZlVHlwZSgkcGFyYW0tPnR5
cGUpIC4gIiAiIC4gJHBhcmFtLT5uYW1lKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIpXG4iKTsKKworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICJ7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEFTU0VSVCht
X2RhdGEpO1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBBU1NFUlQo
JHtwYXJhbXNbMF0tPm5hbWV9KTtcblxuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICBSZWZQdHI8JGNsYXNzTmFtZT4gcHJvdGVjdCh0aGlzKTtcblxuIik7CisgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9u
c09ubHkpO1xuXG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEpTRE9N
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pTRE9NR2xvYmFsT2JqZWN0KCR7cGFyYW1z
WzBdLT5uYW1lfSwgbV9pc29sYXRlZFdvcmxkLmdldCgpKTtcbiIpOworICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgaWYgKCFnbG9iYWxPYmplY3QpIHJldHVybiB0cnVlO1xuXG4i
KTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpO1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzO1xuIik7CisKKyAgICAgICAg
ICAgIGZvciAobXkgJGluZGV4ID0gMTsgJGluZGV4IDwgQHBhcmFtczsgJGluZGV4KyspIHsKKyAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhcmdzLmFwcGVuZCh0b0pTKGV4
ZWMsICR7cGFyYW1zWyRpbmRleF0tPm5hbWV9KSk7XG4iKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiAgICBib29sIHJhaXNlZEV4Y2VwdGlvbiA9
IGZhbHNlO1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBtX2RhdGEt
Pmludm9rZUNhbGxiYWNrKGFyZ3MsICZyYWlzZWRFeGNlcHRpb24pO1xuIik7CisgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gIXJhaXNlZEV4Y2VwdGlvbjtcbiIpOwor
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG4iKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHB1c2goQGltcGxDb250ZW50LCAiXG59XG4iKTsKKworICAgIHB1c2goQGltcGxDb250
ZW50LCAiXG4jZW5kaWYgLy8gJHtjb25kaXRpb25hbFN0cmluZ31cbiIpIGlmICRjb25kaXRpb25h
bFN0cmluZzsKK30KKwogc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb25GdW5jdGlvbkNhbGwoKQog
ewogICAgIG15ICRmdW5jdGlvbiA9IHNoaWZ0Owo=
</data>
<flag name="review"
          id="38902"
          type_id="1"
          status="-"
          setter="eric"
    />
    <flag name="commit-queue"
          id="38903"
          type_id="3"
          status="-"
          setter="dumi"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54895</attachid>
            <date>2010-05-02 18:14:04 -0700</date>
            <delta_ts>2010-05-02 18:41:45 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>18535</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1ODY2MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjAgQEAKKzIwMTAtMDUtMDIgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGQgdGhlIGFiaWxpdHkgdG8gYXV0by1nZW5lcmF0ZSBjYWxsYmFja3MgdG8gYWxsIGNvZGUg
Z2VuZXJhdG9ycy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTM4NDE0CisKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5w
bToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2suY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENhbGxiYWNrOjpKU1Rlc3RDYWxsYmFj
ayk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDYWxsYmFjazo6fkpTVGVzdENhbGxiYWNrKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENhbGxiYWNrOjpjYWxsYmFja1dpdGhDbGFzczFQYXJh
bSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoQ2xhc3My
UGFyYW0pOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFj
ay5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENhbGxiYWNrOjpjcmVhdGUpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0Q2FsbGJhY2suaWRsOiBBZGRlZC4K
KwogMjAxMC0wNS0wMiAgVGFzdWt1IFN1enVraSAgPHRhc3VrdS5zdXp1a2lAbm9raWEuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEhhdXNtYW5uLgpJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiA1ODY2MikKKysrIFdl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkK
QEAgLTEwMSw4ICsxMDEsMTMgQEAgc3ViIEdlbmVyYXRlSW50ZXJmYWNlCiAgICAgbXkgJGRlZmlu
ZXMgPSBzaGlmdDsKIAogICAgICMgU3RhcnQgYWN0dWFsIGdlbmVyYXRpb24KLSAgICAkb2JqZWN0
LT5HZW5lcmF0ZUhlYWRlcigkZGF0YU5vZGUpOwotICAgICRvYmplY3QtPkdlbmVyYXRlSW1wbGVt
ZW50YXRpb24oJGRhdGFOb2RlKTsKKyAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPnsiQ2FsbGJhY2sifSkgeworICAgICAgICAkb2JqZWN0LT5HZW5lcmF0ZUNhbGxiYWNrSGVh
ZGVyKCRkYXRhTm9kZSk7CisgICAgICAgICRvYmplY3QtPkdlbmVyYXRlQ2FsbGJhY2tJbXBsZW1l
bnRhdGlvbigkZGF0YU5vZGUpOworICAgIH0gZWxzZSB7CisgICAgICAgICRvYmplY3QtPkdlbmVy
YXRlSGVhZGVyKCRkYXRhTm9kZSk7CisgICAgICAgICRvYmplY3QtPkdlbmVyYXRlSW1wbGVtZW50
YXRpb24oJGRhdGFOb2RlKTsKKyAgICB9CiAKICAgICBteSAkbmFtZSA9ICRkYXRhTm9kZS0+bmFt
ZTsKIApAQCAtMTg4OCw2ICsxODkzLDE3OCBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgog
ICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4jZW5kaWYgLy8gJHtjb25kaXRpb25hbFN0cmluZ31c
biIpIGlmICRjb25kaXRpb25hbFN0cmluZzsKIH0KIAorc3ViIEdlbmVyYXRlQ2FsbGJhY2tIZWFk
ZXIKK3sKKyAgICBteSAkb2JqZWN0ID0gc2hpZnQ7CisgICAgbXkgJGRhdGFOb2RlID0gc2hpZnQ7
CisKKyAgICBteSAkaW50ZXJmYWNlTmFtZSA9ICRkYXRhTm9kZS0+bmFtZTsKKyAgICBteSAkY2xh
c3NOYW1lID0gIkpTJGludGVyZmFjZU5hbWUiOworCisgICAgIyAtIEFkZCBkZWZhdWx0IGhlYWRl
ciB0ZW1wbGF0ZQorICAgIEBoZWFkZXJDb250ZW50SGVhZGVyID0gc3BsaXQoIlxyIiwgJGhlYWRl
clRlbXBsYXRlKTsKKworICAgICMgLSBBZGQgaGVhZGVyIHByb3RlY3Rpb24KKyAgICBwdXNoKEBo
ZWFkZXJDb250ZW50SGVhZGVyLCAiXG4jaWZuZGVmICRjbGFzc05hbWUiIC4gIl9oIik7CisgICAg
cHVzaChAaGVhZGVyQ29udGVudEhlYWRlciwgIlxuI2RlZmluZSAkY2xhc3NOYW1lIiAuICJfaFxu
XG4iKTsKKworICAgIG15ICRjb25kaXRpb25hbFN0cmluZyA9IEdlbmVyYXRlQ29uZGl0aW9uYWxT
dHJpbmcoJGRhdGFOb2RlKTsKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50SGVhZGVyLCAiI2lmICR7
Y29uZGl0aW9uYWxTdHJpbmd9XG5cbiIpIGlmICRjb25kaXRpb25hbFN0cmluZzsKKworICAgICRo
ZWFkZXJJbmNsdWRlc3siJGludGVyZmFjZU5hbWUuaCJ9ID0gMTsKKyAgICAkaGVhZGVySW5jbHVk
ZXN7IkpTQ2FsbGJhY2tEYXRhLmgifSA9IDE7CisgICAgJGhlYWRlckluY2x1ZGVzeyI8d3RmL0Zv
cndhcmQuaD4ifSA9IDE7CisKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiXG5uYW1lc3BhY2Ug
V2ViQ29yZSB7XG5cbiIpOworICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJjbGFzcyAkY2xhc3NO
YW1lIDogcHVibGljICRpbnRlcmZhY2VOYW1lIHtcbiIpOworICAgIHB1c2goQGhlYWRlckNvbnRl
bnQsICJwdWJsaWM6XG4iKTsKKworICAgICMgVGhlIHN0YXRpYyBjcmVhdGUoKSBtZXRob2QuCisg
ICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgUGFzc1JlZlB0cjwkY2xhc3NOYW1l
PiBjcmVhdGUoSlNDOjpKU09iamVjdCogY2FsbGJhY2ssIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QpXG4iKTsKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHtcbiIpOworICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgJGNsYXNz
TmFtZShjYWxsYmFjaywgZ2xvYmFsT2JqZWN0KSk7XG4iKTsKKyAgICBwdXNoKEBoZWFkZXJDb250
ZW50LCAiICAgIH1cblxuIik7CisKKyAgICAjIERlc3RydWN0b3IKKyAgICBwdXNoKEBoZWFkZXJD
b250ZW50LCAiICAgIHZpcnR1YWwgfiRjbGFzc05hbWUoKTtcbiIpOworCisgICAgIyBGdW5jdGlv
bnMKKyAgICBteSAkbnVtRnVuY3Rpb25zID0gQHskZGF0YU5vZGUtPmZ1bmN0aW9uc307CisgICAg
aWYgKCRudW1GdW5jdGlvbnMgPiAwKSB7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJc
biAgICAvLyBGdW5jdGlvbnNcbiIpOworICAgICAgICBmb3JlYWNoIG15ICRmdW5jdGlvbiAoQHsk
ZGF0YU5vZGUtPmZ1bmN0aW9uc30pIHsKKyAgICAgICAgICAgIG15IEBwYXJhbXMgPSBAeyRmdW5j
dGlvbi0+cGFyYW1ldGVyc307CisgICAgICAgICAgICBpZiAoISRmdW5jdGlvbi0+c2lnbmF0dXJl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tIn0pIHsKKyAgICAgICAgICAgICAgICBpZiAo
IShHZXROYXRpdmVUeXBlKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT50eXBlKSBlcSAiYm9vbCIpKSB7
CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgLy8gTm9uLWJv
b2wgcmV0dXJuIHR5cGUgZm9yIG5vbi1jdXN0b20gZnVuY3Rpb246Iik7CisgICAgICAgICAgICAg
ICAgfSBlbHNpZiAoISgkcGFyYW1zWzBdLT50eXBlIGVxICJTY3JpcHRFeGVjdXRpb25Db250ZXh0
IikpIHsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAvLyBG
aXJzdCBwYXJhbWV0ZXIgaXMgbm90IGEgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDoiKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHB1c2goQGhlYWRlckNv
bnRlbnQsICIgICAgIiAuIEdldE5hdGl2ZVR5cGUoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPnR5cGUp
IC4gIiAiIC4gJGZ1bmN0aW9uLT5zaWduYXR1cmUtPm5hbWUgLiAiKCIpOworICAgICAgICAgICAg
bXkgJGZpcnN0UGFyYW0gPSAxOworICAgICAgICAgICAgZm9yZWFjaCBteSAkcGFyYW0gKEBwYXJh
bXMpIHsKKyAgICAgICAgICAgICAgICBpZiAoJGZpcnN0UGFyYW0pIHsKKyAgICAgICAgICAgICAg
ICAgICAgJGZpcnN0UGFyYW0gPSAwOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIsICIpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCBHZXROYXRpdmVUeXBlKCRw
YXJhbS0+dHlwZSkgLiAiICIgLiAkcGFyYW0tPm5hbWUpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiKTtcbiIpOworICAgICAgICB9CisgICAgfQor
CisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlxucHJpdmF0ZTpcbiIpOworCisgICAgIyBDb25z
dHJ1Y3RvcgorICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgJGNsYXNzTmFtZShKU0M6OkpT
T2JqZWN0KiBjYWxsYmFjaywgSlNET01HbG9iYWxPYmplY3QqKTtcblxuIik7CisKKyAgICAjIFBy
aXZhdGUgbWVtYmVycworICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgSlNDYWxsYmFja0Rh
dGEqIG1fZGF0YTtcbiIpOworICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgUmVmUHRyPERP
TVdyYXBwZXJXb3JsZD4gbV9pc29sYXRlZFdvcmxkO1xuIik7CisgICAgcHVzaChAaGVhZGVyQ29u
dGVudCwgIn07XG5cbiIpOworCisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIn0gLy8gbmFtZXNw
YWNlIFdlYkNvcmVcblxuIik7CisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiNlbmRpZiAvLyAk
e2NvbmRpdGlvbmFsU3RyaW5nfVxuXG4iKSBpZiAkY29uZGl0aW9uYWxTdHJpbmc7CisgICAgcHVz
aChAaGVhZGVyQ29udGVudCwgIiNlbmRpZlxuIik7Cit9CisKK3N1YiBHZW5lcmF0ZUNhbGxiYWNr
SW1wbGVtZW50YXRpb24KK3sKKyAgICBteSAoJG9iamVjdCwgJGRhdGFOb2RlKSA9IEBfOworCisg
ICAgbXkgJGludGVyZmFjZU5hbWUgPSAkZGF0YU5vZGUtPm5hbWU7CisgICAgbXkgJGNsYXNzTmFt
ZSA9ICJKUyRpbnRlcmZhY2VOYW1lIjsKKworICAgICMgLSBBZGQgZGVmYXVsdCBoZWFkZXIgdGVt
cGxhdGUKKyAgICBAaW1wbENvbnRlbnRIZWFkZXIgPSBzcGxpdCgiXHIiLCAkaGVhZGVyVGVtcGxh
dGUpOworCisgICAgcHVzaChAaW1wbENvbnRlbnRIZWFkZXIsICJcbiNpbmNsdWRlIFwiY29uZmln
LmhcIlxuIik7CisgICAgbXkgJGNvbmRpdGlvbmFsU3RyaW5nID0gR2VuZXJhdGVDb25kaXRpb25h
bFN0cmluZygkZGF0YU5vZGUpOworICAgIHB1c2goQGltcGxDb250ZW50SGVhZGVyLCAiXG4jaWYg
JHtjb25kaXRpb25hbFN0cmluZ31cblxuIikgaWYgJGNvbmRpdGlvbmFsU3RyaW5nOworICAgIHB1
c2goQGltcGxDb250ZW50SGVhZGVyLCAiI2luY2x1ZGUgXCIkY2xhc3NOYW1lLmhcIlxuXG4iKTsK
KworICAgICRpbXBsSW5jbHVkZXN7IjxydW50aW1lL0pTTG9jay5oPiJ9ID0gMTsKKyAgICAkaW1w
bEluY2x1ZGVzeyI8d3RmL01haW5UaHJlYWQuaD4ifSA9IDE7CisKKyAgICBAaW1wbENvbnRlbnQg
PSAoKTsKKworICAgIHB1c2goQGltcGxDb250ZW50LCAiXG51c2luZyBuYW1lc3BhY2UgSlNDO1xu
XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIm5hbWVzcGFjZSBXZWJDb3JlIHtcblxuIik7
CisKKyAgICAjIENvbnN0cnVjdG9yCisgICAgcHVzaChAaW1wbENvbnRlbnQsICIke2NsYXNzTmFt
ZX06OiR7Y2xhc3NOYW1lfShKU09iamVjdCogY2FsbGJhY2ssIEpTRE9NR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QpXG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICA6IG1fZGF0YShu
ZXcgSlNDYWxsYmFja0RhdGEoY2FsbGJhY2ssIGdsb2JhbE9iamVjdCkpXG4iKTsKKyAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICAsIG1faXNvbGF0ZWRXb3JsZChnbG9iYWxPYmplY3QtPndvcmxk
KCkpXG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOworICAgIHB1c2goQGltcGxD
b250ZW50LCAifVxuXG4iKTsKKworICAgICMgRGVzdHJ1Y3RvcgorICAgIHB1c2goQGltcGxDb250
ZW50LCAiJHtjbGFzc05hbWV9Ojp+JHtjbGFzc05hbWV9KClcbiIpOworICAgIHB1c2goQGltcGxD
b250ZW50LCAie1xuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgY2FsbE9uTWFpblRo
cmVhZChKU0NhbGxiYWNrRGF0YTo6ZGVsZXRlRGF0YSwgbV9kYXRhKTtcbiIpOworICAgIHB1c2go
QGltcGxDb250ZW50LCAiI2lmbmRlZiBOREVCVUdcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIG1fZGF0YSA9IDA7XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiNlbmRpZlxu
Iik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG4iKTsKKworICAgICMgRnVuY3Rpb25zCisg
ICAgbXkgJG51bUZ1bmN0aW9ucyA9IEB7JGRhdGFOb2RlLT5mdW5jdGlvbnN9OworICAgIGlmICgk
bnVtRnVuY3Rpb25zID4gMCkgeworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuLy8gRnVu
Y3Rpb25zXG4iKTsKKyAgICAgICAgZm9yZWFjaCBteSAkZnVuY3Rpb24gKEB7JGRhdGFOb2RlLT5m
dW5jdGlvbnN9KSB7CisgICAgICAgICAgICBteSBAcGFyYW1zID0gQHskZnVuY3Rpb24tPnBhcmFt
ZXRlcnN9OworICAgICAgICAgICAgaWYgKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiQ3VzdG9tIn0gfHwKKyAgICAgICAgICAgICAgICAhKEdldE5hdGl2ZVR5cGUo
JGZ1bmN0aW9uLT5zaWduYXR1cmUtPnR5cGUpIGVxICJib29sIikgfHwKKyAgICAgICAgICAgICAg
ICAhKCRwYXJhbXNbMF0tPnR5cGUgZXEgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQiKSkgeworICAg
ICAgICAgICAgICAgIG5leHQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEFkZEluY2x1
ZGVzRm9yVHlwZSgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+dHlwZSk7CisgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIlxuIiAuIEdldE5hdGl2ZVR5cGUoJGZ1bmN0aW9uLT5zaWduYXR1cmUt
PnR5cGUpIC4gIiAke2NsYXNzTmFtZX06OiIgLiAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZSAu
ICIoIik7CisKKyAgICAgICAgICAgIG15ICRmaXJzdFBhcmFtID0gMTsKKyAgICAgICAgICAgIGZv
cmVhY2ggbXkgJHBhcmFtIChAcGFyYW1zKSB7CisgICAgICAgICAgICAgICAgQWRkSW5jbHVkZXNG
b3JUeXBlKCRwYXJhbS0+dHlwZSk7CisgICAgICAgICAgICAgICAgaWYgKCRmaXJzdFBhcmFtKSB7
CisgICAgICAgICAgICAgICAgICAgICRmaXJzdFBhcmFtID0gMDsKKyAgICAgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiwgIik7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCBHZXRO
YXRpdmVUeXBlKCRwYXJhbS0+dHlwZSkgLiAiICIgLiAkcGFyYW0tPm5hbWUpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIilcbiIpOworCisgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgQVNTRVJUKG1fZGF0YSk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIEFTU0VSVCgke3BhcmFtc1swXS0+bmFtZX0pO1xuXG4iKTsKKyAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFJlZlB0cjwkY2xhc3NOYW1lPiBwcm90ZWN0KHRo
aXMpO1xuXG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEpTTG9jayBs
b2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7XG5cbiIpOworICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRvSlNET01H
bG9iYWxPYmplY3QoJHtwYXJhbXNbMF0tPm5hbWV9LCBtX2lzb2xhdGVkV29ybGQuZ2V0KCkpO1xu
Iik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoIWdsb2JhbE9iamVj
dCkgcmV0dXJuIHRydWU7XG5cbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7XG4iKTsKKyAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFy
Z3M7XG4iKTsKKworICAgICAgICAgICAgZm9yIChteSAkaW5kZXggPSAxOyAkaW5kZXggPCBAcGFy
YW1zOyAkaW5kZXgrKykgeworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IGFyZ3MuYXBwZW5kKHRvSlMoZXhlYywgJHtwYXJhbXNbJGluZGV4XS0+bmFtZX0pKTtcbiIpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuICAgIGJv
b2wgcmFpc2VkRXhjZXB0aW9uID0gZmFsc2U7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIG1fZGF0YS0+aW52b2tlQ2FsbGJhY2soYXJncywgJnJhaXNlZEV4Y2VwdGlv
bik7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiAhcmFp
c2VkRXhjZXB0aW9uO1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cbiIp
OworICAgICAgICB9CisgICAgfQorCisgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbn1cbiIpOwor
CisgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiNlbmRpZiAvLyAke2NvbmRpdGlvbmFsU3RyaW5n
fVxuIikgaWYgJGNvbmRpdGlvbmFsU3RyaW5nOworfQorCiBzdWIgR2VuZXJhdGVJbXBsZW1lbnRh
dGlvbkZ1bmN0aW9uQ2FsbCgpCiB7CiAgICAgbXkgJGZ1bmN0aW9uID0gc2hpZnQ7CkluZGV4OiBX
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0Q2FsbGJhY2suaWRsCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RDYWxsYmFjay5pZGwJKHJldmlz
aW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0Q2FsbGJhY2suaWRs
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtc3RyQXJnLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUi
KSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRXN0ckFyZywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIFRoaXMgSURMIGZp
bGUgaXMgZm9yIHRlc3RpbmcgdGhlIGJpbmRpbmdzIGNvZGUgZ2VuZXJhdG9yIHdpdGggYW4gaW50
ZXJmYWNlCisvLyB0aGF0IGhhcyB0aGUgIkNhbGxiYWNrIiBhdHRyaWJ1dGUgYW5kIGZvciB0cmFj
a2luZyBjaGFuZ2VzIGluIGl0cyBvdXB1dC4KK21vZHVsZSB0ZXN0IHsKKyAgICBpbnRlcmZhY2Ug
WworICAgICAgICBDb25kaXRpb25hbD1EQVRBQkFTRSwKKyAgICAgICAgQ2FsbGJhY2sKKyAgICBd
IFRlc3RDYWxsYmFjayB7CisgICAgICBib29sZWFuIGNhbGxiYWNrV2l0aENsYXNzMVBhcmFtKGlu
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgY29udGV4dCwgaW4gQ2xhc3MxIGNsYXNzMVBhcmFtKTsK
KyAgICAgIGJvb2xlYW4gY2FsbGJhY2tXaXRoQ2xhc3MyUGFyYW0oaW4gU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCBjb250ZXh0LCBpbiBDbGFzczIgY2xhc3MyUGFyYW0sIGluIERPTVN0cmluZyBzdHJB
cmcpOworICAgICAgbG9uZyBjYWxsYmFja1dpdGhOb25Cb29sUmV0dXJuVHlwZShpbiBTY3JpcHRF
eGVjdXRpb25Db250ZXh0IGNvbnRleHQsIGluIENsYXNzMyBjbGFzczNQYXJhbSk7CisgICAgICBi
b29sZWFuIGNhbGxiYWNrV2l0aE5vU2NyaXB0RXhlY3V0aW9uQ29udGV4dFBhcmFtKGluIENsYXNz
NCBjbGFzczRQYXJhbSk7CisgICAgICBbQ3VzdG9tXSBsb25nIGN1c3RvbUNhbGxiYWNrKGluIENs
YXNzNSBjbGFzczVQYXJhbSwgaW4gQ2xhc3M2IGNsYXNzNlBhcmFtKTsKKyAgICB9OworfQpJbmRl
eDogV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2suY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxi
YWNrLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdENhbGxiYWNrLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5OCBAQAorLyoKKyAg
ICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisg
ICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4g
RE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoREFU
QUJBU0UpCisKKyNpbmNsdWRlICJKU1Rlc3RDYWxsYmFjay5oIgorCisjaW5jbHVkZSAiQ2xhc3Mx
LmgiCisjaW5jbHVkZSAiQ2xhc3MyLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4
dC5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+CisjaW5jbHVkZSA8d3RmL01haW5UaHJl
YWQuaD4KKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitK
U1Rlc3RDYWxsYmFjazo6SlNUZXN0Q2FsbGJhY2soSlNPYmplY3QqIGNhbGxiYWNrLCBKU0RPTUds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgIDogbV9kYXRhKG5ldyBKU0NhbGxiYWNrRGF0
YShjYWxsYmFjaywgZ2xvYmFsT2JqZWN0KSkKKyAgICAsIG1faXNvbGF0ZWRXb3JsZChnbG9iYWxP
YmplY3QtPndvcmxkKCkpCit7Cit9CisKK0pTVGVzdENhbGxiYWNrOjp+SlNUZXN0Q2FsbGJhY2so
KQoreworICAgIGNhbGxPbk1haW5UaHJlYWQoSlNDYWxsYmFja0RhdGE6OmRlbGV0ZURhdGEsIG1f
ZGF0YSk7CisjaWZuZGVmIE5ERUJVRworICAgIG1fZGF0YSA9IDA7CisjZW5kaWYKK30KKworLy8g
RnVuY3Rpb25zCisKK2Jvb2wgSlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aENsYXNzMVBhcmFt
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIENsYXNzMSogY2xhc3MxUGFyYW0pCit7
CisgICAgQVNTRVJUKG1fZGF0YSk7CisgICAgQVNTRVJUKGNvbnRleHQpOworCisgICAgUmVmUHRy
PEpTVGVzdENhbGxiYWNrPiBwcm90ZWN0KHRoaXMpOworCisgICAgSlNMb2NrIGxvY2soU2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKKworICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSB0b0pTRE9NR2xvYmFsT2JqZWN0KGNvbnRleHQsIG1faXNvbGF0ZWRXb3JsZC5nZXQoKSk7Cisg
ICAgaWYgKCFnbG9iYWxPYmplY3QpIHJldHVybiB0cnVlOworCisgICAgRXhlY1N0YXRlKiBleGVj
ID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CisgICAgTWFya2VkQXJndW1lbnRCdWZmZXIg
YXJnczsKKyAgICBhcmdzLmFwcGVuZCh0b0pTKGV4ZWMsIGNsYXNzMVBhcmFtKSk7CisKKyAgICBi
b29sIHJhaXNlZEV4Y2VwdGlvbiA9IGZhbHNlOworICAgIG1fZGF0YS0+aW52b2tlQ2FsbGJhY2so
YXJncywgJnJhaXNlZEV4Y2VwdGlvbik7CisgICAgcmV0dXJuICFyYWlzZWRFeGNlcHRpb247Cit9
CisKK2Jvb2wgSlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aENsYXNzMlBhcmFtKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIENsYXNzMiogY2xhc3MyUGFyYW0sIGNvbnN0IFN0cmlu
ZyYgc3RyQXJnKQoreworICAgIEFTU0VSVChtX2RhdGEpOworICAgIEFTU0VSVChjb250ZXh0KTsK
KworICAgIFJlZlB0cjxKU1Rlc3RDYWxsYmFjaz4gcHJvdGVjdCh0aGlzKTsKKworICAgIEpTTG9j
ayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisKKyAgICBKU0RPTUdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0ID0gdG9KU0RPTUdsb2JhbE9iamVjdChjb250ZXh0LCBtX2lzb2xhdGVkV29y
bGQuZ2V0KCkpOworICAgIGlmICghZ2xvYmFsT2JqZWN0KSByZXR1cm4gdHJ1ZTsKKworICAgIEV4
ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOworICAgIE1hcmtlZEFy
Z3VtZW50QnVmZmVyIGFyZ3M7CisgICAgYXJncy5hcHBlbmQodG9KUyhleGVjLCBjbGFzczJQYXJh
bSkpOworICAgIGFyZ3MuYXBwZW5kKHRvSlMoZXhlYywgc3RyQXJnKSk7CisKKyAgICBib29sIHJh
aXNlZEV4Y2VwdGlvbiA9IGZhbHNlOworICAgIG1fZGF0YS0+aW52b2tlQ2FsbGJhY2soYXJncywg
JnJhaXNlZEV4Y2VwdGlvbik7CisgICAgcmV0dXJuICFyYWlzZWRFeGNlcHRpb247Cit9CisKK30K
KworI2VuZGlmIC8vIEVOQUJMRShEQVRBQkFTRSkKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdENhbGxiYWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2suaAkocmV2aXNpb24gMCkKKysrIFdl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxiYWNrLmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdl
YktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0
ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
ICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAg
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBK
U1Rlc3RDYWxsYmFja19oCisjZGVmaW5lIEpTVGVzdENhbGxiYWNrX2gKKworI2lmIEVOQUJMRShE
QVRBQkFTRSkKKworI2luY2x1ZGUgIkpTQ2FsbGJhY2tEYXRhLmgiCisjaW5jbHVkZSAiVGVzdENh
bGxiYWNrLmgiCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBKU1Rlc3RDYWxsYmFjayA6IHB1YmxpYyBUZXN0Q2FsbGJhY2sgeworcHVibGlj
OgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEpTVGVzdENhbGxiYWNrPiBjcmVhdGUoSlNDOjpKU09i
amVjdCogY2FsbGJhY2ssIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAgewor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEpTVGVzdENhbGxiYWNrKGNhbGxiYWNrLCBnbG9i
YWxPYmplY3QpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5KU1Rlc3RDYWxsYmFjaygpOworCisg
ICAgLy8gRnVuY3Rpb25zCisgICAgYm9vbCBjYWxsYmFja1dpdGhDbGFzczFQYXJhbShTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBDbGFzczEqIGNsYXNzMVBhcmFtKTsKKyAgICBib29s
IGNhbGxiYWNrV2l0aENsYXNzMlBhcmFtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQs
IENsYXNzMiogY2xhc3MyUGFyYW0sIGNvbnN0IFN0cmluZyYgc3RyQXJnKTsKKyAgICAvLyBOb24t
Ym9vbCByZXR1cm4gdHlwZSBmb3Igbm9uLWN1c3RvbSBmdW5jdGlvbjogICAgaW50IGNhbGxiYWNr
V2l0aE5vbkJvb2xSZXR1cm5UeXBlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIENs
YXNzMyogY2xhc3MzUGFyYW0pOworICAgIC8vIEZpcnN0IHBhcmFtZXRlciBpcyBub3QgYSBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0OiAgICBib29sIGNhbGxiYWNrV2l0aE5vU2NyaXB0RXhlY3V0aW9u
Q29udGV4dFBhcmFtKENsYXNzNCogY2xhc3M0UGFyYW0pOworICAgIGludCBjdXN0b21DYWxsYmFj
ayhDbGFzczUqIGNsYXNzNVBhcmFtLCBDbGFzczYqIGNsYXNzNlBhcmFtKTsKKworcHJpdmF0ZToK
KyAgICBKU1Rlc3RDYWxsYmFjayhKU0M6OkpTT2JqZWN0KiBjYWxsYmFjaywgSlNET01HbG9iYWxP
YmplY3QqKTsKKworICAgIEpTQ2FsbGJhY2tEYXRhKiBtX2RhdGE7CisgICAgUmVmUHRyPERPTVdy
YXBwZXJXb3JsZD4gbV9pc29sYXRlZFdvcmxkOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKERBVEFCQVNFKQorCisjZW5kaWYKSW5kZXg6IFdlYktpdFRv
b2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9DaGFuZ2VMb2cJKHJldmlz
aW9uIDU4NjYyKQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTIgQEAKKzIwMTAtMDUtMDIgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBE
aWZmIHRoZSBmaWxlcyBvbmNlLCBhZnRlciBhbGwgb2YgdGhlbSBhcmUgZ2VuZXJhdGVkLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzg0MTQKKworICAg
ICAgICAqIFNjcmlwdHMvcnVuLWJpbmRpbmdzLXRlc3RzOgorCiAyMDEwLTA1LTAxICBEYW5pZWwg
QmF0ZXMgIDxkYmF0ZXNAcmltLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBDaHJpcyBKZXJk
b25lay4KSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvcnVuLWJpbmRpbmdzLXRlc3RzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvcnVuLWJpbmRpbmdzLXRlc3RzCShyZXZpc2lv
biA1ODY2MikKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvcnVuLWJpbmRpbmdzLXRlc3RzCSh3b3Jr
aW5nIGNvcHkpCkBAIC04Nyw5ICs4NywxMCBAQCBkZWYgcnVuX3Rlc3RzKGdlbmVyYXRvciwgaW5w
dXRfZGlyZWN0b3J5CiAgICAgICAgIGlmIHJlc2V0X3Jlc3VsdHM6CiAgICAgICAgICAgICBwcmlu
dCAiT3Zlcndyb3RlIHJlZmVyZW5jZSBmaWxlcyIKICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAg
ICAgICMgRGV0ZWN0IGNoYW5nZXMKLSAgICAgICAgaWYgZGV0ZWN0X2NoYW5nZXMod29ya19kaXJl
Y3RvcnksIHJlZmVyZW5jZV9kaXJlY3RvcnkpOgotICAgICAgICAgICAgcGFzc2VkID0gRmFsc2UK
KworICAgICMgRGV0ZWN0IGNoYW5nZXMKKyAgICBpZiBkZXRlY3RfY2hhbmdlcyh3b3JrX2RpcmVj
dG9yeSwgcmVmZXJlbmNlX2RpcmVjdG9yeSk6CisgICAgICAgIHBhc3NlZCA9IEZhbHNlCiAKICAg
ICBpZiBub3QgcGFzc2VkOgogICAgICAgICBwcmludCAnJXMgZ2VuZXJhdG9yIGZhaWxlZC4nICUg
Z2VuZXJhdG9yCg==
</data>
<flag name="commit-queue"
          id="38966"
          type_id="3"
          status="-"
          setter="dumi"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54899</attachid>
            <date>2010-05-02 18:41:45 -0700</date>
            <delta_ts>2010-05-03 00:06:01 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>17378</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1ODY2MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjAgQEAKKzIwMTAtMDUtMDIgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGQgdGhlIGFiaWxpdHkgdG8gYXV0by1nZW5lcmF0ZSBjYWxsYmFja3MgdG8gYWxsIGNvZGUg
Z2VuZXJhdG9ycy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTM4NDE0CisKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5w
bToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2suY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENhbGxiYWNrOjpKU1Rlc3RDYWxsYmFj
ayk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDYWxsYmFjazo6fkpTVGVzdENhbGxiYWNrKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENhbGxiYWNrOjpjYWxsYmFja1dpdGhDbGFzczFQYXJh
bSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoQ2xhc3My
UGFyYW0pOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFj
ay5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENhbGxiYWNrOjpjcmVhdGUpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0Q2FsbGJhY2suaWRsOiBBZGRlZC4K
KwogMjAxMC0wNS0wMiAgVGFzdWt1IFN1enVraSAgPHRhc3VrdS5zdXp1a2lAbm9raWEuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEhhdXNtYW5uLgpJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiA1ODY2MikKKysrIFdl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkK
QEAgLTEwMSw4ICsxMDEsMTMgQEAgc3ViIEdlbmVyYXRlSW50ZXJmYWNlCiAgICAgbXkgJGRlZmlu
ZXMgPSBzaGlmdDsKIAogICAgICMgU3RhcnQgYWN0dWFsIGdlbmVyYXRpb24KLSAgICAkb2JqZWN0
LT5HZW5lcmF0ZUhlYWRlcigkZGF0YU5vZGUpOwotICAgICRvYmplY3QtPkdlbmVyYXRlSW1wbGVt
ZW50YXRpb24oJGRhdGFOb2RlKTsKKyAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPnsiQ2FsbGJhY2sifSkgeworICAgICAgICAkb2JqZWN0LT5HZW5lcmF0ZUNhbGxiYWNrSGVh
ZGVyKCRkYXRhTm9kZSk7CisgICAgICAgICRvYmplY3QtPkdlbmVyYXRlQ2FsbGJhY2tJbXBsZW1l
bnRhdGlvbigkZGF0YU5vZGUpOworICAgIH0gZWxzZSB7CisgICAgICAgICRvYmplY3QtPkdlbmVy
YXRlSGVhZGVyKCRkYXRhTm9kZSk7CisgICAgICAgICRvYmplY3QtPkdlbmVyYXRlSW1wbGVtZW50
YXRpb24oJGRhdGFOb2RlKTsKKyAgICB9CiAKICAgICBteSAkbmFtZSA9ICRkYXRhTm9kZS0+bmFt
ZTsKIApAQCAtMTg4OCw2ICsxODkzLDE3OSBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgog
ICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4jZW5kaWYgLy8gJHtjb25kaXRpb25hbFN0cmluZ31c
biIpIGlmICRjb25kaXRpb25hbFN0cmluZzsKIH0KIAorc3ViIEdlbmVyYXRlQ2FsbGJhY2tIZWFk
ZXIKK3sKKyAgICBteSAkb2JqZWN0ID0gc2hpZnQ7CisgICAgbXkgJGRhdGFOb2RlID0gc2hpZnQ7
CisKKyAgICBteSAkaW50ZXJmYWNlTmFtZSA9ICRkYXRhTm9kZS0+bmFtZTsKKyAgICBteSAkY2xh
c3NOYW1lID0gIkpTJGludGVyZmFjZU5hbWUiOworCisgICAgIyAtIEFkZCBkZWZhdWx0IGhlYWRl
ciB0ZW1wbGF0ZQorICAgIEBoZWFkZXJDb250ZW50SGVhZGVyID0gc3BsaXQoIlxyIiwgJGhlYWRl
clRlbXBsYXRlKTsKKworICAgICMgLSBBZGQgaGVhZGVyIHByb3RlY3Rpb24KKyAgICBwdXNoKEBo
ZWFkZXJDb250ZW50SGVhZGVyLCAiXG4jaWZuZGVmICRjbGFzc05hbWUiIC4gIl9oIik7CisgICAg
cHVzaChAaGVhZGVyQ29udGVudEhlYWRlciwgIlxuI2RlZmluZSAkY2xhc3NOYW1lIiAuICJfaFxu
XG4iKTsKKworICAgIG15ICRjb25kaXRpb25hbFN0cmluZyA9IEdlbmVyYXRlQ29uZGl0aW9uYWxT
dHJpbmcoJGRhdGFOb2RlKTsKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50SGVhZGVyLCAiI2lmICR7
Y29uZGl0aW9uYWxTdHJpbmd9XG5cbiIpIGlmICRjb25kaXRpb25hbFN0cmluZzsKKworICAgICRo
ZWFkZXJJbmNsdWRlc3siJGludGVyZmFjZU5hbWUuaCJ9ID0gMTsKKyAgICAkaGVhZGVySW5jbHVk
ZXN7IkpTQ2FsbGJhY2tEYXRhLmgifSA9IDE7CisgICAgJGhlYWRlckluY2x1ZGVzeyI8d3RmL0Zv
cndhcmQuaD4ifSA9IDE7CisKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiXG5uYW1lc3BhY2Ug
V2ViQ29yZSB7XG5cbiIpOworICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJjbGFzcyAkY2xhc3NO
YW1lIDogcHVibGljICRpbnRlcmZhY2VOYW1lIHtcbiIpOworICAgIHB1c2goQGhlYWRlckNvbnRl
bnQsICJwdWJsaWM6XG4iKTsKKworICAgICMgVGhlIHN0YXRpYyBjcmVhdGUoKSBtZXRob2QuCisg
ICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgUGFzc1JlZlB0cjwkY2xhc3NOYW1l
PiBjcmVhdGUoSlNDOjpKU09iamVjdCogY2FsbGJhY2ssIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QpXG4iKTsKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHtcbiIpOworICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgJGNsYXNz
TmFtZShjYWxsYmFjaywgZ2xvYmFsT2JqZWN0KSk7XG4iKTsKKyAgICBwdXNoKEBoZWFkZXJDb250
ZW50LCAiICAgIH1cblxuIik7CisKKyAgICAjIERlc3RydWN0b3IKKyAgICBwdXNoKEBoZWFkZXJD
b250ZW50LCAiICAgIHZpcnR1YWwgfiRjbGFzc05hbWUoKTtcbiIpOworCisgICAgIyBGdW5jdGlv
bnMKKyAgICBteSAkbnVtRnVuY3Rpb25zID0gQHskZGF0YU5vZGUtPmZ1bmN0aW9uc307CisgICAg
aWYgKCRudW1GdW5jdGlvbnMgPiAwKSB7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJc
biAgICAvLyBGdW5jdGlvbnNcbiIpOworICAgICAgICBmb3JlYWNoIG15ICRmdW5jdGlvbiAoQHsk
ZGF0YU5vZGUtPmZ1bmN0aW9uc30pIHsKKyAgICAgICAgICAgIG15IEBwYXJhbXMgPSBAeyRmdW5j
dGlvbi0+cGFyYW1ldGVyc307CisgICAgICAgICAgICBpZiAoISRmdW5jdGlvbi0+c2lnbmF0dXJl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tIn0pIHsKKyAgICAgICAgICAgICAgICBpZiAo
IShHZXROYXRpdmVUeXBlKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT50eXBlKSBlcSAiYm9vbCIpKSB7
CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgLy8gTm9uLWJv
b2wgcmV0dXJuIHR5cGUgZm9yIG5vbi1jdXN0b20gZnVuY3Rpb246Iik7CisgICAgICAgICAgICAg
ICAgfSBlbHNpZiAoISgkcGFyYW1zWzBdLT50eXBlIGVxICJTY3JpcHRFeGVjdXRpb25Db250ZXh0
IikpIHsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAvLyBG
aXJzdCBwYXJhbWV0ZXIgaXMgbm90IGEgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDoiKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHB1c2goQGhlYWRlckNv
bnRlbnQsICIgICAgIiAuIEdldE5hdGl2ZVR5cGUoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPnR5cGUp
IC4gIiAiIC4gJGZ1bmN0aW9uLT5zaWduYXR1cmUtPm5hbWUgLiAiKCIpOworICAgICAgICAgICAg
bXkgJGZpcnN0UGFyYW0gPSAxOworICAgICAgICAgICAgZm9yZWFjaCBteSAkcGFyYW0gKEBwYXJh
bXMpIHsKKyAgICAgICAgICAgICAgICBpZiAoJGZpcnN0UGFyYW0pIHsKKyAgICAgICAgICAgICAg
ICAgICAgJGZpcnN0UGFyYW0gPSAwOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIsICIpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCBHZXROYXRpdmVUeXBlKCRw
YXJhbS0+dHlwZSkgLiAiICIgLiAkcGFyYW0tPm5hbWUpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiKTtcbiIpOworICAgICAgICB9CisgICAgfQor
CisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlxucHJpdmF0ZTpcbiIpOworCisgICAgIyBDb25z
dHJ1Y3RvcgorICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgJGNsYXNzTmFtZShKU0M6OkpT
T2JqZWN0KiBjYWxsYmFjaywgSlNET01HbG9iYWxPYmplY3QqKTtcblxuIik7CisKKyAgICAjIFBy
aXZhdGUgbWVtYmVycworICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgSlNDYWxsYmFja0Rh
dGEqIG1fZGF0YTtcbiIpOworICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgUmVmUHRyPERP
TVdyYXBwZXJXb3JsZD4gbV9pc29sYXRlZFdvcmxkO1xuIik7CisgICAgcHVzaChAaGVhZGVyQ29u
dGVudCwgIn07XG5cbiIpOworCisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIn0gLy8gbmFtZXNw
YWNlIFdlYkNvcmVcblxuIik7CisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiNlbmRpZiAvLyAk
e2NvbmRpdGlvbmFsU3RyaW5nfVxuXG4iKSBpZiAkY29uZGl0aW9uYWxTdHJpbmc7CisgICAgcHVz
aChAaGVhZGVyQ29udGVudCwgIiNlbmRpZlxuIik7Cit9CisKK3N1YiBHZW5lcmF0ZUNhbGxiYWNr
SW1wbGVtZW50YXRpb24KK3sKKyAgICBteSAoJG9iamVjdCwgJGRhdGFOb2RlKSA9IEBfOworCisg
ICAgbXkgJGludGVyZmFjZU5hbWUgPSAkZGF0YU5vZGUtPm5hbWU7CisgICAgbXkgJGNsYXNzTmFt
ZSA9ICJKUyRpbnRlcmZhY2VOYW1lIjsKKworICAgICMgLSBBZGQgZGVmYXVsdCBoZWFkZXIgdGVt
cGxhdGUKKyAgICBAaW1wbENvbnRlbnRIZWFkZXIgPSBzcGxpdCgiXHIiLCAkaGVhZGVyVGVtcGxh
dGUpOworCisgICAgcHVzaChAaW1wbENvbnRlbnRIZWFkZXIsICJcbiNpbmNsdWRlIFwiY29uZmln
LmhcIlxuIik7CisgICAgbXkgJGNvbmRpdGlvbmFsU3RyaW5nID0gR2VuZXJhdGVDb25kaXRpb25h
bFN0cmluZygkZGF0YU5vZGUpOworICAgIHB1c2goQGltcGxDb250ZW50SGVhZGVyLCAiXG4jaWYg
JHtjb25kaXRpb25hbFN0cmluZ31cblxuIikgaWYgJGNvbmRpdGlvbmFsU3RyaW5nOworICAgIHB1
c2goQGltcGxDb250ZW50SGVhZGVyLCAiI2luY2x1ZGUgXCIkY2xhc3NOYW1lLmhcIlxuXG4iKTsK
KworICAgICRpbXBsSW5jbHVkZXN7IjxydW50aW1lL0pTTG9jay5oPiJ9ID0gMTsKKyAgICAkaW1w
bEluY2x1ZGVzeyI8d3RmL01haW5UaHJlYWQuaD4ifSA9IDE7CisKKyAgICBAaW1wbENvbnRlbnQg
PSAoKTsKKworICAgIHB1c2goQGltcGxDb250ZW50LCAiXG51c2luZyBuYW1lc3BhY2UgSlNDO1xu
XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIm5hbWVzcGFjZSBXZWJDb3JlIHtcblxuIik7
CisKKyAgICAjIENvbnN0cnVjdG9yCisgICAgcHVzaChAaW1wbENvbnRlbnQsICIke2NsYXNzTmFt
ZX06OiR7Y2xhc3NOYW1lfShKU09iamVjdCogY2FsbGJhY2ssIEpTRE9NR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QpXG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICA6IG1fZGF0YShu
ZXcgSlNDYWxsYmFja0RhdGEoY2FsbGJhY2ssIGdsb2JhbE9iamVjdCkpXG4iKTsKKyAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICAsIG1faXNvbGF0ZWRXb3JsZChnbG9iYWxPYmplY3QtPndvcmxk
KCkpXG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOworICAgIHB1c2goQGltcGxD
b250ZW50LCAifVxuXG4iKTsKKworICAgICMgRGVzdHJ1Y3RvcgorICAgIHB1c2goQGltcGxDb250
ZW50LCAiJHtjbGFzc05hbWV9Ojp+JHtjbGFzc05hbWV9KClcbiIpOworICAgIHB1c2goQGltcGxD
b250ZW50LCAie1xuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgY2FsbE9uTWFpblRo
cmVhZChKU0NhbGxiYWNrRGF0YTo6ZGVsZXRlRGF0YSwgbV9kYXRhKTtcbiIpOworICAgIHB1c2go
QGltcGxDb250ZW50LCAiI2lmbmRlZiBOREVCVUdcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIG1fZGF0YSA9IDA7XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiNlbmRpZlxu
Iik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG4iKTsKKworICAgICMgRnVuY3Rpb25zCisg
ICAgbXkgJG51bUZ1bmN0aW9ucyA9IEB7JGRhdGFOb2RlLT5mdW5jdGlvbnN9OworICAgIGlmICgk
bnVtRnVuY3Rpb25zID4gMCkgeworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuLy8gRnVu
Y3Rpb25zXG4iKTsKKyAgICAgICAgZm9yZWFjaCBteSAkZnVuY3Rpb24gKEB7JGRhdGFOb2RlLT5m
dW5jdGlvbnN9KSB7CisgICAgICAgICAgICBteSBAcGFyYW1zID0gQHskZnVuY3Rpb24tPnBhcmFt
ZXRlcnN9OworICAgICAgICAgICAgaWYgKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiQ3VzdG9tIn0gfHwKKyAgICAgICAgICAgICAgICAhKEdldE5hdGl2ZVR5cGUo
JGZ1bmN0aW9uLT5zaWduYXR1cmUtPnR5cGUpIGVxICJib29sIikgfHwKKyAgICAgICAgICAgICAg
ICAhKCRwYXJhbXNbMF0tPnR5cGUgZXEgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQiKSkgeworICAg
ICAgICAgICAgICAgIG5leHQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEFkZEluY2x1
ZGVzRm9yVHlwZSgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+dHlwZSk7CisgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIlxuIiAuIEdldE5hdGl2ZVR5cGUoJGZ1bmN0aW9uLT5zaWduYXR1cmUt
PnR5cGUpIC4gIiAke2NsYXNzTmFtZX06OiIgLiAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZSAu
ICIoIik7CisKKyAgICAgICAgICAgIG15ICRmaXJzdFBhcmFtID0gMTsKKyAgICAgICAgICAgIGZv
cmVhY2ggbXkgJHBhcmFtIChAcGFyYW1zKSB7CisgICAgICAgICAgICAgICAgQWRkSW5jbHVkZXNG
b3JUeXBlKCRwYXJhbS0+dHlwZSk7CisgICAgICAgICAgICAgICAgaWYgKCRmaXJzdFBhcmFtKSB7
CisgICAgICAgICAgICAgICAgICAgICRmaXJzdFBhcmFtID0gMDsKKyAgICAgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiwgIik7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCBHZXRO
YXRpdmVUeXBlKCRwYXJhbS0+dHlwZSkgLiAiICIgLiAkcGFyYW0tPm5hbWUpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIilcbiIpOworCisgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgQVNTRVJUKG1fZGF0YSk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIEFTU0VSVCgke3BhcmFtc1swXS0+bmFtZX0pO1xuXG4iKTsKKyAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFJlZlB0cjwkY2xhc3NOYW1lPiBwcm90ZWN0KHRo
aXMpO1xuXG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEpTTG9jayBs
b2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7XG5cbiIpOworICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRvSlNET01H
bG9iYWxPYmplY3QoJHtwYXJhbXNbMF0tPm5hbWV9LCBtX2lzb2xhdGVkV29ybGQuZ2V0KCkpO1xu
Iik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoIWdsb2JhbE9iamVj
dClcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiB0
cnVlO1xuXG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEV4ZWNTdGF0
ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpO1xuIik7CisgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzO1xuIik7CisK
KyAgICAgICAgICAgIGZvciAobXkgJGluZGV4ID0gMTsgJGluZGV4IDwgQHBhcmFtczsgJGluZGV4
KyspIHsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhcmdzLmFwcGVu
ZCh0b0pTKGV4ZWMsICR7cGFyYW1zWyRpbmRleF0tPm5hbWV9KSk7XG4iKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiAgICBib29sIHJhaXNlZEV4
Y2VwdGlvbiA9IGZhbHNlO1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICBtX2RhdGEtPmludm9rZUNhbGxiYWNrKGFyZ3MsICZyYWlzZWRFeGNlcHRpb24pO1xuIik7Cisg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gIXJhaXNlZEV4Y2VwdGlv
bjtcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG4iKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHB1c2goQGltcGxDb250ZW50LCAiXG59XG4iKTsKKworICAgIHB1c2go
QGltcGxDb250ZW50LCAiXG4jZW5kaWYgLy8gJHtjb25kaXRpb25hbFN0cmluZ31cbiIpIGlmICRj
b25kaXRpb25hbFN0cmluZzsKK30KKwogc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb25GdW5jdGlv
bkNhbGwoKQogewogICAgIG15ICRmdW5jdGlvbiA9IHNoaWZ0OwpJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVGVzdENhbGxiYWNrLmlkbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0Q2FsbGJhY2suaWRsCShyZXZpc2lvbiAwKQorKysg
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdENhbGxiYWNrLmlkbAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXN0ckFyZywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVp
dGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBu
YW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVzdHJBcmcsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBUaGlzIElETCBmaWxlIGlzIGZvciB0
ZXN0aW5nIHRoZSBiaW5kaW5ncyBjb2RlIGdlbmVyYXRvciB3aXRoIGFuIGludGVyZmFjZQorLy8g
dGhhdCBoYXMgdGhlICJDYWxsYmFjayIgYXR0cmlidXRlIGFuZCBmb3IgdHJhY2tpbmcgY2hhbmdl
cyBpbiBpdHMgb3VwdXQuCittb2R1bGUgdGVzdCB7CisgICAgaW50ZXJmYWNlIFsKKyAgICAgICAg
Q29uZGl0aW9uYWw9REFUQUJBU0UsCisgICAgICAgIENhbGxiYWNrCisgICAgXSBUZXN0Q2FsbGJh
Y2sgeworICAgICAgYm9vbGVhbiBjYWxsYmFja1dpdGhDbGFzczFQYXJhbShpbiBTY3JpcHRFeGVj
dXRpb25Db250ZXh0IGNvbnRleHQsIGluIENsYXNzMSBjbGFzczFQYXJhbSk7CisgICAgICBib29s
ZWFuIGNhbGxiYWNrV2l0aENsYXNzMlBhcmFtKGluIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgY29u
dGV4dCwgaW4gQ2xhc3MyIGNsYXNzMlBhcmFtLCBpbiBET01TdHJpbmcgc3RyQXJnKTsKKyAgICAg
IGxvbmcgY2FsbGJhY2tXaXRoTm9uQm9vbFJldHVyblR5cGUoaW4gU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCBjb250ZXh0LCBpbiBDbGFzczMgY2xhc3MzUGFyYW0pOworICAgICAgYm9vbGVhbiBjYWxs
YmFja1dpdGhOb1NjcmlwdEV4ZWN1dGlvbkNvbnRleHRQYXJhbShpbiBDbGFzczQgY2xhc3M0UGFy
YW0pOworICAgICAgW0N1c3RvbV0gbG9uZyBjdXN0b21DYWxsYmFjayhpbiBDbGFzczUgY2xhc3M1
UGFyYW0sIGluIENsYXNzNiBjbGFzczZQYXJhbSk7CisgICAgfTsKK30KSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxiYWNrLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFjay5jcHAJKHJl
dmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxs
YmFjay5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAwIEBACisvKgorICAgIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZp
bGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9E
SUZZIQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShEQVRBQkFTRSkKKwor
I2luY2x1ZGUgIkpTVGVzdENhbGxiYWNrLmgiCisKKyNpbmNsdWRlICJDbGFzczEuaCIKKyNpbmNs
dWRlICJDbGFzczIuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCisjaW5j
bHVkZSA8cnVudGltZS9KU0xvY2suaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorCit1
c2luZyBuYW1lc3BhY2UgSlNDOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0pTVGVzdENhbGxi
YWNrOjpKU1Rlc3RDYWxsYmFjayhKU09iamVjdCogY2FsbGJhY2ssIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QpCisgICAgOiBtX2RhdGEobmV3IEpTQ2FsbGJhY2tEYXRhKGNhbGxiYWNr
LCBnbG9iYWxPYmplY3QpKQorICAgICwgbV9pc29sYXRlZFdvcmxkKGdsb2JhbE9iamVjdC0+d29y
bGQoKSkKK3sKK30KKworSlNUZXN0Q2FsbGJhY2s6On5KU1Rlc3RDYWxsYmFjaygpCit7CisgICAg
Y2FsbE9uTWFpblRocmVhZChKU0NhbGxiYWNrRGF0YTo6ZGVsZXRlRGF0YSwgbV9kYXRhKTsKKyNp
Zm5kZWYgTkRFQlVHCisgICAgbV9kYXRhID0gMDsKKyNlbmRpZgorfQorCisvLyBGdW5jdGlvbnMK
KworYm9vbCBKU1Rlc3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoQ2xhc3MxUGFyYW0oU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwgQ2xhc3MxKiBjbGFzczFQYXJhbSkKK3sKKyAgICBBU1NF
UlQobV9kYXRhKTsKKyAgICBBU1NFUlQoY29udGV4dCk7CisKKyAgICBSZWZQdHI8SlNUZXN0Q2Fs
bGJhY2s+IHByb3RlY3QodGhpcyk7CisKKyAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9u
c09ubHkpOworCisgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRvSlNET01H
bG9iYWxPYmplY3QoY29udGV4dCwgbV9pc29sYXRlZFdvcmxkLmdldCgpKTsKKyAgICBpZiAoIWds
b2JhbE9iamVjdCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBFeGVjU3RhdGUqIGV4ZWMg
PSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKKyAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBh
cmdzOworICAgIGFyZ3MuYXBwZW5kKHRvSlMoZXhlYywgY2xhc3MxUGFyYW0pKTsKKworICAgIGJv
b2wgcmFpc2VkRXhjZXB0aW9uID0gZmFsc2U7CisgICAgbV9kYXRhLT5pbnZva2VDYWxsYmFjayhh
cmdzLCAmcmFpc2VkRXhjZXB0aW9uKTsKKyAgICByZXR1cm4gIXJhaXNlZEV4Y2VwdGlvbjsKK30K
KworYm9vbCBKU1Rlc3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoQ2xhc3MyUGFyYW0oU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwgQ2xhc3MyKiBjbGFzczJQYXJhbSwgY29uc3QgU3RyaW5n
JiBzdHJBcmcpCit7CisgICAgQVNTRVJUKG1fZGF0YSk7CisgICAgQVNTRVJUKGNvbnRleHQpOwor
CisgICAgUmVmUHRyPEpTVGVzdENhbGxiYWNrPiBwcm90ZWN0KHRoaXMpOworCisgICAgSlNMb2Nr
IGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKworICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSB0b0pTRE9NR2xvYmFsT2JqZWN0KGNvbnRleHQsIG1faXNvbGF0ZWRXb3Js
ZC5nZXQoKSk7CisgICAgaWYgKCFnbG9iYWxPYmplY3QpCisgICAgICAgIHJldHVybiB0cnVlOwor
CisgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CisgICAg
TWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKKyAgICBhcmdzLmFwcGVuZCh0b0pTKGV4ZWMsIGNs
YXNzMlBhcmFtKSk7CisgICAgYXJncy5hcHBlbmQodG9KUyhleGVjLCBzdHJBcmcpKTsKKworICAg
IGJvb2wgcmFpc2VkRXhjZXB0aW9uID0gZmFsc2U7CisgICAgbV9kYXRhLT5pbnZva2VDYWxsYmFj
ayhhcmdzLCAmcmFpc2VkRXhjZXB0aW9uKTsKKyAgICByZXR1cm4gIXJhaXNlZEV4Y2VwdGlvbjsK
K30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKERBVEFCQVNFKQpJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFjay5oCShyZXZpc2lvbiAw
KQorKysgV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2suaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBv
ZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVu
IGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAg
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisj
aWZuZGVmIEpTVGVzdENhbGxiYWNrX2gKKyNkZWZpbmUgSlNUZXN0Q2FsbGJhY2tfaAorCisjaWYg
RU5BQkxFKERBVEFCQVNFKQorCisjaW5jbHVkZSAiSlNDYWxsYmFja0RhdGEuaCIKKyNpbmNsdWRl
ICJUZXN0Q2FsbGJhY2suaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIEpTVGVzdENhbGxiYWNrIDogcHVibGljIFRlc3RDYWxsYmFjayB7
CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SlNUZXN0Q2FsbGJhY2s+IGNyZWF0ZShK
U0M6OkpTT2JqZWN0KiBjYWxsYmFjaywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkK
KyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSlNUZXN0Q2FsbGJhY2soY2FsbGJh
Y2ssIGdsb2JhbE9iamVjdCkpOworICAgIH0KKworICAgIHZpcnR1YWwgfkpTVGVzdENhbGxiYWNr
KCk7CisKKyAgICAvLyBGdW5jdGlvbnMKKyAgICBib29sIGNhbGxiYWNrV2l0aENsYXNzMVBhcmFt
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIENsYXNzMSogY2xhc3MxUGFyYW0pOwor
ICAgIGJvb2wgY2FsbGJhY2tXaXRoQ2xhc3MyUGFyYW0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCwgQ2xhc3MyKiBjbGFzczJQYXJhbSwgY29uc3QgU3RyaW5nJiBzdHJBcmcpOworICAg
IC8vIE5vbi1ib29sIHJldHVybiB0eXBlIGZvciBub24tY3VzdG9tIGZ1bmN0aW9uOiAgICBpbnQg
Y2FsbGJhY2tXaXRoTm9uQm9vbFJldHVyblR5cGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCwgQ2xhc3MzKiBjbGFzczNQYXJhbSk7CisgICAgLy8gRmlyc3QgcGFyYW1ldGVyIGlzIG5v
dCBhIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6ICAgIGJvb2wgY2FsbGJhY2tXaXRoTm9TY3JpcHRF
eGVjdXRpb25Db250ZXh0UGFyYW0oQ2xhc3M0KiBjbGFzczRQYXJhbSk7CisgICAgaW50IGN1c3Rv
bUNhbGxiYWNrKENsYXNzNSogY2xhc3M1UGFyYW0sIENsYXNzNiogY2xhc3M2UGFyYW0pOworCitw
cml2YXRlOgorICAgIEpTVGVzdENhbGxiYWNrKEpTQzo6SlNPYmplY3QqIGNhbGxiYWNrLCBKU0RP
TUdsb2JhbE9iamVjdCopOworCisgICAgSlNDYWxsYmFja0RhdGEqIG1fZGF0YTsKKyAgICBSZWZQ
dHI8RE9NV3JhcHBlcldvcmxkPiBtX2lzb2xhdGVkV29ybGQ7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoREFUQUJBU0UpCisKKyNlbmRpZgo=
</data>
<flag name="review"
          id="38968"
          type_id="1"
          status="-"
          setter="abarth"
    />
    <flag name="commit-queue"
          id="38969"
          type_id="3"
          status="-"
          setter="dumi"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54908</attachid>
            <date>2010-05-03 00:06:01 -0700</date>
            <delta_ts>2010-05-03 15:01:00 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>34680</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1ODY2NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjggQEAKKzIwMTAtMDUtMDIgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGQgdGhlIGFiaWxpdHkgdG8gYXV0by1nZW5lcmF0ZSBjYWxsYmFja3MgdG8gYWxsIGNvZGUg
Z2VuZXJhdG9ycy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTM4NDE0CisKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5w
bToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbToKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2suY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENhbGxiYWNrOjpKU1Rlc3RDYWxsYmFjayk6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3RDYWxsYmFjazo6fkpTVGVzdENhbGxiYWNrKToKKyAgICAgICAg
KFdlYkNvcmU6OkpTVGVzdENhbGxiYWNrOjpjYWxsYmFja1dpdGhDbGFzczFQYXJhbSk6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoQ2xhc3MyUGFyYW0pOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFjay5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENhbGxiYWNrOjpjcmVhdGUpOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9KU1Rlc3RDYWxsYmFjay5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6VjhUZXN0Q2FsbGJhY2s6OlY4VGVzdENhbGxiYWNrKToKKyAgICAgICAg
KFdlYkNvcmU6OlY4VGVzdENhbGxiYWNrOjp+VjhUZXN0Q2FsbGJhY2spOgorICAgICAgICAoV2Vi
Q29yZTo6VjhUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aENsYXNzMVBhcmFtKToKKyAgICAgICAg
KFdlYkNvcmU6OlY4VGVzdENhbGxiYWNrOjpjYWxsYmFja1dpdGhDbGFzczJQYXJhbSk6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdENhbGxiYWNrLmg6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6VjhUZXN0Q2FsbGJhY2s6OmNyZWF0ZSk6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RDYWxsYmFjay5pZGw6IEFkZGVkLgorCiAyMDEwLTA1LTAy
ICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
U2ltb24gRnJhc2VyLgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVy
YXRvckpTLnBtCShyZXZpc2lvbiA1ODY2NikKKysrIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9D
b2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTEwMSw4ICsxMDEsMTMgQEAgc3Vi
IEdlbmVyYXRlSW50ZXJmYWNlCiAgICAgbXkgJGRlZmluZXMgPSBzaGlmdDsKIAogICAgICMgU3Rh
cnQgYWN0dWFsIGdlbmVyYXRpb24KLSAgICAkb2JqZWN0LT5HZW5lcmF0ZUhlYWRlcigkZGF0YU5v
ZGUpOwotICAgICRvYmplY3QtPkdlbmVyYXRlSW1wbGVtZW50YXRpb24oJGRhdGFOb2RlKTsKKyAg
ICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2FsbGJhY2sifSkgeworICAg
ICAgICAkb2JqZWN0LT5HZW5lcmF0ZUNhbGxiYWNrSGVhZGVyKCRkYXRhTm9kZSk7CisgICAgICAg
ICRvYmplY3QtPkdlbmVyYXRlQ2FsbGJhY2tJbXBsZW1lbnRhdGlvbigkZGF0YU5vZGUpOworICAg
IH0gZWxzZSB7CisgICAgICAgICRvYmplY3QtPkdlbmVyYXRlSGVhZGVyKCRkYXRhTm9kZSk7Cisg
ICAgICAgICRvYmplY3QtPkdlbmVyYXRlSW1wbGVtZW50YXRpb24oJGRhdGFOb2RlKTsKKyAgICB9
CiAKICAgICBteSAkbmFtZSA9ICRkYXRhTm9kZS0+bmFtZTsKIApAQCAtNTE3LDYgKzUyMiwzNCBA
QCBzdWIgR2VuZXJhdGVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JCb2R5CiAgICAgcmV0dXJuIEBn
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JJbXBsOwogfQogCitzdWIgR2VuZXJhdGVIZWFkZXJDb250
ZW50SGVhZGVyCit7CisgICAgbXkgJGRhdGFOb2RlID0gc2hpZnQ7CisgICAgbXkgJGNsYXNzTmFt
ZSA9ICJKUyIgLiAkZGF0YU5vZGUtPm5hbWU7CisKKyAgICBAaGVhZGVyQ29udGVudEhlYWRlciA9
IHNwbGl0KCJcciIsICRoZWFkZXJUZW1wbGF0ZSk7CisKKyAgICAjIC0gQWRkIGhlYWRlciBwcm90
ZWN0aW9uCisgICAgcHVzaChAaGVhZGVyQ29udGVudEhlYWRlciwgIlxuI2lmbmRlZiAkY2xhc3NO
YW1lIiAuICJfaCIpOworICAgIHB1c2goQGhlYWRlckNvbnRlbnRIZWFkZXIsICJcbiNkZWZpbmUg
JGNsYXNzTmFtZSIgLiAiX2hcblxuIik7CisKKyAgICBteSAkY29uZGl0aW9uYWxTdHJpbmcgPSBH
ZW5lcmF0ZUNvbmRpdGlvbmFsU3RyaW5nKCRkYXRhTm9kZSk7CisgICAgcHVzaChAaGVhZGVyQ29u
dGVudEhlYWRlciwgIiNpZiAke2NvbmRpdGlvbmFsU3RyaW5nfVxuXG4iKSBpZiAkY29uZGl0aW9u
YWxTdHJpbmc7Cit9CisKK3N1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uQ29udGVudEhlYWRlcgor
eworICAgIG15ICRkYXRhTm9kZSA9IHNoaWZ0OworICAgIG15ICRjbGFzc05hbWUgPSAiSlMiIC4g
JGRhdGFOb2RlLT5uYW1lOworCisgICAgQGltcGxDb250ZW50SGVhZGVyID0gc3BsaXQoIlxyIiwg
JGhlYWRlclRlbXBsYXRlKTsKKworICAgIHB1c2goQGltcGxDb250ZW50SGVhZGVyLCAiXG4jaW5j
bHVkZSBcImNvbmZpZy5oXCJcbiIpOworICAgIG15ICRjb25kaXRpb25hbFN0cmluZyA9IEdlbmVy
YXRlQ29uZGl0aW9uYWxTdHJpbmcoJGRhdGFOb2RlKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudEhl
YWRlciwgIlxuI2lmICR7Y29uZGl0aW9uYWxTdHJpbmd9XG5cbiIpIGlmICRjb25kaXRpb25hbFN0
cmluZzsKKyAgICBwdXNoKEBpbXBsQ29udGVudEhlYWRlciwgIiNpbmNsdWRlIFwiJGNsYXNzTmFt
ZS5oXCJcblxuIik7Cit9CisKIHN1YiBHZW5lcmF0ZUhlYWRlcgogewogICAgIG15ICRvYmplY3Qg
PSBzaGlmdDsKQEAgLTU0MSwxNSArNTc0LDggQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgbXkg
JGV2ZW50VGFyZ2V0ID0gJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiRXZlbnRUYXJn
ZXQifTsKICAgICBteSAkbmVlZHNNYXJrQ2hpbGRyZW4gPSAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJDdXN0b21NYXJrRnVuY3Rpb24ifSB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJFdmVudFRhcmdldCJ9OwogICAgIAotICAgICMgLSBBZGQgZGVmYXVsdCBoZWFk
ZXIgdGVtcGxhdGUKLSAgICBAaGVhZGVyQ29udGVudEhlYWRlciA9IHNwbGl0KCJcciIsICRoZWFk
ZXJUZW1wbGF0ZSk7Ci0KLSAgICAjIC0gQWRkIGhlYWRlciBwcm90ZWN0aW9uCi0gICAgcHVzaChA
aGVhZGVyQ29udGVudEhlYWRlciwgIlxuI2lmbmRlZiAkY2xhc3NOYW1lIiAuICJfaCIpOwotICAg
IHB1c2goQGhlYWRlckNvbnRlbnRIZWFkZXIsICJcbiNkZWZpbmUgJGNsYXNzTmFtZSIgLiAiX2hc
blxuIik7Ci0KLSAgICBteSAkY29uZGl0aW9uYWxTdHJpbmcgPSBHZW5lcmF0ZUNvbmRpdGlvbmFs
U3RyaW5nKCRkYXRhTm9kZSk7Ci0gICAgcHVzaChAaGVhZGVyQ29udGVudEhlYWRlciwgIiNpZiAk
e2NvbmRpdGlvbmFsU3RyaW5nfVxuXG4iKSBpZiAkY29uZGl0aW9uYWxTdHJpbmc7CisgICAgIyAt
IEFkZCBkZWZhdWx0IGhlYWRlciB0ZW1wbGF0ZSBhbmQgaGVhZGVyIHByb3RlY3Rpb24KKyAgICBH
ZW5lcmF0ZUhlYWRlckNvbnRlbnRIZWFkZXIoJGRhdGFOb2RlKTsKIAogICAgIGlmICgkaGFzUGFy
ZW50KSB7CiAgICAgICAgICRoZWFkZXJJbmNsdWRlc3siJHBhcmVudENsYXNzTmFtZS5oIn0gPSAx
OwpAQCAtOTQzLDYgKzk2OSw3IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogICAgICAgICB9CiAgICAg
fQogCisgICAgbXkgJGNvbmRpdGlvbmFsU3RyaW5nID0gR2VuZXJhdGVDb25kaXRpb25hbFN0cmlu
ZygkZGF0YU5vZGUpOwogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJcbn0gLy8gbmFtZXNwYWNl
IFdlYkNvcmVcblxuIik7CiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiNlbmRpZiAvLyAke2Nv
bmRpdGlvbmFsU3RyaW5nfVxuXG4iKSBpZiAkY29uZGl0aW9uYWxTdHJpbmc7CiAgICAgcHVzaChA
aGVhZGVyQ29udGVudCwgIiNlbmRpZlxuIik7CkBAIC0xMDM4LDEyICsxMDY1LDcgQEAgc3ViIEdl
bmVyYXRlSW1wbGVtZW50YXRpb24KICAgICBteSAkbmVlZHNNYXJrQ2hpbGRyZW4gPSAkZGF0YU5v
ZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21NYXJrRnVuY3Rpb24ifSB8fCAkZGF0YU5v
ZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJFdmVudFRhcmdldCJ9OwogCiAgICAgIyAtIEFkZCBk
ZWZhdWx0IGhlYWRlciB0ZW1wbGF0ZQotICAgIEBpbXBsQ29udGVudEhlYWRlciA9IHNwbGl0KCJc
ciIsICRoZWFkZXJUZW1wbGF0ZSk7Ci0KLSAgICBwdXNoKEBpbXBsQ29udGVudEhlYWRlciwgIlxu
I2luY2x1ZGUgXCJjb25maWcuaFwiXG4iKTsKLSAgICBteSAkY29uZGl0aW9uYWxTdHJpbmcgPSBH
ZW5lcmF0ZUNvbmRpdGlvbmFsU3RyaW5nKCRkYXRhTm9kZSk7Ci0gICAgcHVzaChAaW1wbENvbnRl
bnRIZWFkZXIsICJcbiNpZiAke2NvbmRpdGlvbmFsU3RyaW5nfVxuXG4iKSBpZiAkY29uZGl0aW9u
YWxTdHJpbmc7Ci0gICAgcHVzaChAaW1wbENvbnRlbnRIZWFkZXIsICIjaW5jbHVkZSBcIiRjbGFz
c05hbWUuaFwiXG5cbiIpOworICAgIEdlbmVyYXRlSW1wbGVtZW50YXRpb25Db250ZW50SGVhZGVy
KCRkYXRhTm9kZSk7CiAKICAgICBBZGRJbmNsdWRlc0ZvclNWR0FuaW1hdGVkVHlwZSgkaW50ZXJm
YWNlTmFtZSkgaWYgJGNsYXNzTmFtZSA9fiAvXkpTU1ZHQW5pbWF0ZWQvOwogCkBAIC0xODg1LDYg
KzE5MDcsMTU1IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAKICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIlxufVxuIik7CiAKKyAgICBteSAkY29uZGl0aW9uYWxTdHJpbmcgPSBHZW5lcmF0
ZUNvbmRpdGlvbmFsU3RyaW5nKCRkYXRhTm9kZSk7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICJc
biNlbmRpZiAvLyAke2NvbmRpdGlvbmFsU3RyaW5nfVxuIikgaWYgJGNvbmRpdGlvbmFsU3RyaW5n
OworfQorCitzdWIgR2VuZXJhdGVDYWxsYmFja0hlYWRlcgoreworICAgIG15ICRvYmplY3QgPSBz
aGlmdDsKKyAgICBteSAkZGF0YU5vZGUgPSBzaGlmdDsKKworICAgIG15ICRpbnRlcmZhY2VOYW1l
ID0gJGRhdGFOb2RlLT5uYW1lOworICAgIG15ICRjbGFzc05hbWUgPSAiSlMkaW50ZXJmYWNlTmFt
ZSI7CisKKyAgICAjIC0gQWRkIGRlZmF1bHQgaGVhZGVyIHRlbXBsYXRlIGFuZCBoZWFkZXIgcHJv
dGVjdGlvbgorICAgIEdlbmVyYXRlSGVhZGVyQ29udGVudEhlYWRlcigkZGF0YU5vZGUpOworCisg
ICAgJGhlYWRlckluY2x1ZGVzeyIkaW50ZXJmYWNlTmFtZS5oIn0gPSAxOworICAgICRoZWFkZXJJ
bmNsdWRlc3siSlNDYWxsYmFja0RhdGEuaCJ9ID0gMTsKKyAgICAkaGVhZGVySW5jbHVkZXN7Ijx3
dGYvRm9yd2FyZC5oPiJ9ID0gMTsKKworICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJcbm5hbWVz
cGFjZSBXZWJDb3JlIHtcblxuIik7CisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgImNsYXNzICRj
bGFzc05hbWUgOiBwdWJsaWMgJGludGVyZmFjZU5hbWUge1xuIik7CisgICAgcHVzaChAaGVhZGVy
Q29udGVudCwgInB1YmxpYzpcbiIpOworCisgICAgIyBUaGUgc3RhdGljIGNyZWF0ZSgpIG1ldGhv
ZC4KKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyBQYXNzUmVmUHRyPCRjbGFz
c05hbWU+IGNyZWF0ZShKU0M6OkpTT2JqZWN0KiBjYWxsYmFjaywgSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdClcbiIpOworICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAge1xuIik7
CisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyAk
Y2xhc3NOYW1lKGNhbGxiYWNrLCBnbG9iYWxPYmplY3QpKTtcbiIpOworICAgIHB1c2goQGhlYWRl
ckNvbnRlbnQsICIgICAgfVxuXG4iKTsKKworICAgICMgRGVzdHJ1Y3RvcgorICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsICIgICAgdmlydHVhbCB+JGNsYXNzTmFtZSgpO1xuIik7CisKKyAgICAjIEZ1
bmN0aW9ucworICAgIG15ICRudW1GdW5jdGlvbnMgPSBAeyRkYXRhTm9kZS0+ZnVuY3Rpb25zfTsK
KyAgICBpZiAoJG51bUZ1bmN0aW9ucyA+IDApIHsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVu
dCwgIlxuICAgIC8vIEZ1bmN0aW9uc1xuIik7CisgICAgICAgIGZvcmVhY2ggbXkgJGZ1bmN0aW9u
IChAeyRkYXRhTm9kZS0+ZnVuY3Rpb25zfSkgeworICAgICAgICAgICAgbXkgQHBhcmFtcyA9IEB7
JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfTsKKyAgICAgICAgICAgIGlmICghJGZ1bmN0aW9uLT5zaWdu
YXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b20ifSAmJgorICAgICAgICAgICAgICAg
ICEoR2V0TmF0aXZlVHlwZSgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+dHlwZSkgZXEgImJvb2wiKSkg
eworICAgICAgICAgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIENPTVBJTEVf
QVNTRVJUKGZhbHNlKSIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwdXNoKEBoZWFk
ZXJDb250ZW50LCAiICAgIHZpcnR1YWwgIiAuIEdldE5hdGl2ZVR5cGUoJGZ1bmN0aW9uLT5zaWdu
YXR1cmUtPnR5cGUpIC4gIiAiIC4gJGZ1bmN0aW9uLT5zaWduYXR1cmUtPm5hbWUgLiAiKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIik7CisgICAgICAgICAgICBmb3JlYWNoIG15ICRwYXJhbSAoQHBh
cmFtcykgeworICAgICAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIsICIgLiBHZXRO
YXRpdmVUeXBlKCRwYXJhbS0+dHlwZSkgLiAiICIgLiAkcGFyYW0tPm5hbWUpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiKTtcbiIpOworICAgICAg
ICB9CisgICAgfQorCisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlxucHJpdmF0ZTpcbiIpOwor
CisgICAgIyBDb25zdHJ1Y3RvcgorICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgJGNsYXNz
TmFtZShKU0M6OkpTT2JqZWN0KiBjYWxsYmFjaywgSlNET01HbG9iYWxPYmplY3QqKTtcblxuIik7
CisKKyAgICAjIFByaXZhdGUgbWVtYmVycworICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAg
SlNDYWxsYmFja0RhdGEqIG1fZGF0YTtcbiIpOworICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIg
ICAgUmVmUHRyPERPTVdyYXBwZXJXb3JsZD4gbV9pc29sYXRlZFdvcmxkO1xuIik7CisgICAgcHVz
aChAaGVhZGVyQ29udGVudCwgIn07XG5cbiIpOworCisgICAgcHVzaChAaGVhZGVyQ29udGVudCwg
In0gLy8gbmFtZXNwYWNlIFdlYkNvcmVcblxuIik7CisgICAgbXkgJGNvbmRpdGlvbmFsU3RyaW5n
ID0gR2VuZXJhdGVDb25kaXRpb25hbFN0cmluZygkZGF0YU5vZGUpOworICAgIHB1c2goQGhlYWRl
ckNvbnRlbnQsICIjZW5kaWYgLy8gJHtjb25kaXRpb25hbFN0cmluZ31cblxuIikgaWYgJGNvbmRp
dGlvbmFsU3RyaW5nOworICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIjZW5kaWZcbiIpOworfQor
CitzdWIgR2VuZXJhdGVDYWxsYmFja0ltcGxlbWVudGF0aW9uCit7CisgICAgbXkgKCRvYmplY3Qs
ICRkYXRhTm9kZSkgPSBAXzsKKworICAgIG15ICRpbnRlcmZhY2VOYW1lID0gJGRhdGFOb2RlLT5u
YW1lOworICAgIG15ICRjbGFzc05hbWUgPSAiSlMkaW50ZXJmYWNlTmFtZSI7CisKKyAgICAjIC0g
QWRkIGRlZmF1bHQgaGVhZGVyIHRlbXBsYXRlCisgICAgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbkNv
bnRlbnRIZWFkZXIoJGRhdGFOb2RlKTsKKworICAgICRpbXBsSW5jbHVkZXN7IlNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQuaCJ9ID0gMTsKKyAgICAkaW1wbEluY2x1ZGVzeyI8cnVudGltZS9KU0xvY2su
aD4ifSA9IDE7CisgICAgJGltcGxJbmNsdWRlc3siPHd0Zi9NYWluVGhyZWFkLmg+In0gPSAxOwor
CisgICAgQGltcGxDb250ZW50ID0gKCk7CisKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxudXNp
bmcgbmFtZXNwYWNlIEpTQztcblxuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICJuYW1lc3Bh
Y2UgV2ViQ29yZSB7XG5cbiIpOworCisgICAgIyBDb25zdHJ1Y3RvcgorICAgIHB1c2goQGltcGxD
b250ZW50LCAiJHtjbGFzc05hbWV9Ojoke2NsYXNzTmFtZX0oSlNPYmplY3QqIGNhbGxiYWNrLCBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KVxuIik7CisgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgOiBtX2RhdGEobmV3IEpTQ2FsbGJhY2tEYXRhKGNhbGxiYWNrLCBnbG9iYWxPYmpl
Y3QpKVxuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgLCBtX2lzb2xhdGVkV29ybGQo
Z2xvYmFsT2JqZWN0LT53b3JsZCgpKVxuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4i
KTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CisKKyAgICAjIERlc3RydWN0b3IK
KyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiR7Y2xhc3NOYW1lfTo6fiR7Y2xhc3NOYW1lfSgpXG4i
KTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIGNhbGxPbk1haW5UaHJlYWQoSlNDYWxsYmFja0RhdGE6OmRlbGV0ZURhdGEsIG1fZGF0
YSk7XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiNpZm5kZWYgTkRFQlVHXG4iKTsKKyAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBtX2RhdGEgPSAwO1xuIik7CisgICAgcHVzaChAaW1w
bENvbnRlbnQsICIjZW5kaWZcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuIik7CisK
KyAgICAjIEZ1bmN0aW9ucworICAgIG15ICRudW1GdW5jdGlvbnMgPSBAeyRkYXRhTm9kZS0+ZnVu
Y3Rpb25zfTsKKyAgICBpZiAoJG51bUZ1bmN0aW9ucyA+IDApIHsKKyAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICJcbi8vIEZ1bmN0aW9uc1xuIik7CisgICAgICAgIGZvcmVhY2ggbXkgJGZ1bmN0
aW9uIChAeyRkYXRhTm9kZS0+ZnVuY3Rpb25zfSkgeworICAgICAgICAgICAgbXkgQHBhcmFtcyA9
IEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfTsKKyAgICAgICAgICAgIGlmICgkZnVuY3Rpb24tPnNp
Z25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbSJ9IHx8CisgICAgICAgICAgICAg
ICAgIShHZXROYXRpdmVUeXBlKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT50eXBlKSBlcSAiYm9vbCIp
KSB7CisgICAgICAgICAgICAgICAgbmV4dDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
QWRkSW5jbHVkZXNGb3JUeXBlKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT50eXBlKTsKKyAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4iIC4gR2V0TmF0aXZlVHlwZSgkZnVuY3Rpb24tPnNp
Z25hdHVyZS0+dHlwZSkgLiAiICR7Y2xhc3NOYW1lfTo6IiAuICRmdW5jdGlvbi0+c2lnbmF0dXJl
LT5uYW1lIC4gIihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0Iik7CisKKyAgICAgICAg
ICAgIGZvcmVhY2ggbXkgJHBhcmFtIChAcGFyYW1zKSB7CisgICAgICAgICAgICAgICAgQWRkSW5j
bHVkZXNGb3JUeXBlKCRwYXJhbS0+dHlwZSk7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIsICIgLiBHZXROYXRpdmVUeXBlKCRwYXJhbS0+dHlwZSkgLiAiICIgLiAkcGFyYW0t
Pm5hbWUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IilcbiIpOworCisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOworICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgQVNTRVJUKG1fZGF0YSk7XG4iKTsKKyAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEFTU0VSVChjb250ZXh0KTtcblxuIik7Cisg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBSZWZQdHI8JGNsYXNzTmFtZT4gcHJv
dGVjdCh0aGlzKTtcblxuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBK
U0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpO1xuXG4iKTsKKyAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0
b0pTRE9NR2xvYmFsT2JqZWN0KGNvbnRleHQsIG1faXNvbGF0ZWRXb3JsZC5nZXQoKSk7XG4iKTsK
KyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICghZ2xvYmFsT2JqZWN0KVxu
Iik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIHRydWU7
XG5cbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgRXhlY1N0YXRlKiBl
eGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7XG4iKTsKKyAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7XG4iKTsKKworICAg
ICAgICAgICAgZm9yZWFjaCBteSAkcGFyYW0gKEBwYXJhbXMpIHsKKyAgICAgICAgICAgICAgICBt
eSAkcGFyYW1OYW1lID0gJHBhcmFtLT5uYW1lOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIGFyZ3MuYXBwZW5kKHRvSlMoZXhlYywgJHtwYXJhbU5hbWV9KSk7XG4iKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiAgICBi
b29sIHJhaXNlZEV4Y2VwdGlvbiA9IGZhbHNlO1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICBtX2RhdGEtPmludm9rZUNhbGxiYWNrKGFyZ3MsICZyYWlzZWRFeGNlcHRp
b24pO1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gIXJh
aXNlZEV4Y2VwdGlvbjtcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG4i
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1c2goQGltcGxDb250ZW50LCAiXG59XG4iKTsK
KyAgICBteSAkY29uZGl0aW9uYWxTdHJpbmcgPSBHZW5lcmF0ZUNvbmRpdGlvbmFsU3RyaW5nKCRk
YXRhTm9kZSk7CiAgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiNlbmRpZiAvLyAke2NvbmRpdGlv
bmFsU3RyaW5nfVxuIikgaWYgJGNvbmRpdGlvbmFsU3RyaW5nOwogfQogCkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0JKHJldmlzaW9uIDU4NjY2KQor
KysgV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQkod29ya2luZyBj
b3B5KQpAQCAtOTksOCArOTksMTMgQEAgc3ViIEdlbmVyYXRlSW50ZXJmYWNlCiAgICAgbXkgJGRl
ZmluZXMgPSBzaGlmdDsKIAogICAgICMgU3RhcnQgYWN0dWFsIGdlbmVyYXRpb24KLSAgICAkb2Jq
ZWN0LT5HZW5lcmF0ZUhlYWRlcigkZGF0YU5vZGUpOwotICAgICRvYmplY3QtPkdlbmVyYXRlSW1w
bGVtZW50YXRpb24oJGRhdGFOb2RlKTsKKyAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiQ2FsbGJhY2sifSkgeworICAgICAgICAkb2JqZWN0LT5HZW5lcmF0ZUNhbGxiYWNr
SGVhZGVyKCRkYXRhTm9kZSk7CisgICAgICAgICRvYmplY3QtPkdlbmVyYXRlQ2FsbGJhY2tJbXBs
ZW1lbnRhdGlvbigkZGF0YU5vZGUpOworICAgIH0gZWxzZSB7CisgICAgICAgICRvYmplY3QtPkdl
bmVyYXRlSGVhZGVyKCRkYXRhTm9kZSk7CisgICAgICAgICRvYmplY3QtPkdlbmVyYXRlSW1wbGVt
ZW50YXRpb24oJGRhdGFOb2RlKTsKKyAgICB9CiAKICAgICBteSAkbmFtZSA9ICRkYXRhTm9kZS0+
bmFtZTsKIApAQCAtMjMyLDE0ICsyMzcsOSBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICAkY29k
ZUdlbmVyYXRvci0+QWRkTWV0aG9kc0NvbnN0YW50c0FuZEF0dHJpYnV0ZXNGcm9tUGFyZW50Q2xh
c3NlcygkZGF0YU5vZGUsIFxAYWxsUGFyZW50cywgMSk7CiAKICAgICBteSAkaGFzTGVnYWN5UGFy
ZW50ID0gJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTGVnYWN5UGFyZW50In07Ci0g
ICAgbXkgJGNvbmRpdGlvbmFsU3RyaW5nID0gR2VuZXJhdGVDb25kaXRpb25hbFN0cmluZygkZGF0
YU5vZGUpOwogCiAgICAgIyAtIEFkZCBkZWZhdWx0IGhlYWRlciB0ZW1wbGF0ZQotICAgIEBoZWFk
ZXJDb250ZW50ID0gc3BsaXQoIlxyIiwgJGhlYWRlclRlbXBsYXRlKTsKLQotICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsICJcbiNpZiAke2NvbmRpdGlvbmFsU3RyaW5nfVxuXG4iKSBpZiAkY29uZGl0
aW9uYWxTdHJpbmc7Ci0gICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlxuI2lmbmRlZiAkY2xhc3NO
YW1lIiAuICJfaCIpOwotICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJcbiNkZWZpbmUgJGNsYXNz
TmFtZSIgLiAiX2hcblxuIik7CisgICAgR2VuZXJhdGVIZWFkZXJDb250ZW50SGVhZGVyKCRkYXRh
Tm9kZSk7CiAKICAgICAjIEdldCBjb3JyZWN0IHBhc3Mvc3RvcmUgdHlwZXMgcmVzcGVjdGluZyBQ
T0RUeXBlIGZsYWcKICAgICBteSAkcG9kVHlwZSA9ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57IlBPRFR5cGUifTsKQEAgLTM1Nyw2ICszNTcsNyBAQCBFTkQKICAgICBwdXNoKEBoZWFk
ZXJDb250ZW50LCAifVxuXG4iKTsKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiI2VuZGlmIC8v
ICRjbGFzc05hbWUiIC4gIl9oXG4iKTsKIAorICAgIG15ICRjb25kaXRpb25hbFN0cmluZyA9IEdl
bmVyYXRlQ29uZGl0aW9uYWxTdHJpbmcoJGRhdGFOb2RlKTsKICAgICBwdXNoKEBoZWFkZXJDb250
ZW50LCAiI2VuZGlmIC8vICR7Y29uZGl0aW9uYWxTdHJpbmd9XG5cbiIpIGlmICRjb25kaXRpb25h
bFN0cmluZzsKIH0KIApAQCAtMTU3NywxNiArMTU3OCw5IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVu
dGF0aW9uCiAgICAgbXkgJGltcGxDbGFzc05hbWUgPSAkaW50ZXJmYWNlTmFtZTsKIAogICAgIG15
ICRoYXNMZWdhY3lQYXJlbnQgPSAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJMZWdh
Y3lQYXJlbnQifTsKLSAgICBteSAkY29uZGl0aW9uYWxTdHJpbmcgPSBHZW5lcmF0ZUNvbmRpdGlv
bmFsU3RyaW5nKCRkYXRhTm9kZSk7CiAKICAgICAjIC0gQWRkIGRlZmF1bHQgaGVhZGVyIHRlbXBs
YXRlCi0gICAgQGltcGxDb250ZW50SGVhZGVyID0gc3BsaXQoIlxyIiwgJGhlYWRlclRlbXBsYXRl
KTsKLQotICAgIHB1c2goQGltcGxGaXhlZEhlYWRlciwKLSAgICAgICAgICJcbiNpbmNsdWRlIFwi
Y29uZmlnLmhcIlxuIiAuCi0gICAgICAgICAiI2luY2x1ZGUgXCIke2NsYXNzTmFtZX0uaFwiXG5c
biIpOwotCi0gICAgcHVzaChAaW1wbEZpeGVkSGVhZGVyLCAiXG4jaWYgJHtjb25kaXRpb25hbFN0
cmluZ31cblxuIikgaWYgJGNvbmRpdGlvbmFsU3RyaW5nOworICAgIEdlbmVyYXRlSW1wbGVtZW50
YXRpb25Db250ZW50SGVhZGVyKCRkYXRhTm9kZSk7CiAgICAgICAgICAKICAgICAkaW1wbEluY2x1
ZGVzeyJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgifSA9IDE7CiAgICAgJGltcGxJbmNsdWRlc3si
VjhQcm94eS5oIn0gPSAxOwpAQCAtMjA5NCw2ICsyMDg4LDcgQEAgRU5ECiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiBFTkQKIAorICAgIG15ICRjb25kaXRpb25hbFN0cmluZyA9IEdlbmVyYXRlQ29u
ZGl0aW9uYWxTdHJpbmcoJGRhdGFOb2RlKTsKICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuI2Vu
ZGlmIC8vICR7Y29uZGl0aW9uYWxTdHJpbmd9XG4iKSBpZiAkY29uZGl0aW9uYWxTdHJpbmc7CiAg
ICAgCiAgICAgIyBXZSd2ZSBhbHJlYWR5IGFkZGVkIHRoZSBoZWFkZXIgZm9yIHRoaXMgZmlsZSBp
biBpbXBsRml4ZWRIZWFkZXIsIHNvIHJlbW92ZQpAQCAtMjEwMSw2ICsyMDk2LDE4OSBAQCBFTkQK
ICAgICBkZWxldGUgJGltcGxJbmNsdWRlc3siJHtjbGFzc05hbWV9LmgifTsKIH0KIAorc3ViIEdl
bmVyYXRlSGVhZGVyQ29udGVudEhlYWRlcgoreworICAgIG15ICRkYXRhTm9kZSA9IHNoaWZ0Owor
ICAgIG15ICRjbGFzc05hbWUgPSAiVjgiIC4gJGRhdGFOb2RlLT5uYW1lOworICAgIG15ICRjb25k
aXRpb25hbFN0cmluZyA9IEdlbmVyYXRlQ29uZGl0aW9uYWxTdHJpbmcoJGRhdGFOb2RlKTsKKwor
ICAgIEBoZWFkZXJDb250ZW50ID0gc3BsaXQoIlxyIiwgJGhlYWRlclRlbXBsYXRlKTsKKworICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsICJcbiNpZiAke2NvbmRpdGlvbmFsU3RyaW5nfVxuIikgaWYg
JGNvbmRpdGlvbmFsU3RyaW5nOworICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJcbiNpZm5kZWYg
JHtjbGFzc05hbWV9IiAuICJfaCIpOworICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJcbiNkZWZp
bmUgJHtjbGFzc05hbWV9IiAuICJfaFxuXG4iKTsKK30KKworc3ViIEdlbmVyYXRlSW1wbGVtZW50
YXRpb25Db250ZW50SGVhZGVyCit7CisgICAgbXkgJGRhdGFOb2RlID0gc2hpZnQ7CisgICAgbXkg
JGNsYXNzTmFtZSA9ICJWOCIgLiAkZGF0YU5vZGUtPm5hbWU7CisgICAgbXkgJGNvbmRpdGlvbmFs
U3RyaW5nID0gR2VuZXJhdGVDb25kaXRpb25hbFN0cmluZygkZGF0YU5vZGUpOworCisgICAgQGlt
cGxDb250ZW50SGVhZGVyID0gc3BsaXQoIlxyIiwgJGhlYWRlclRlbXBsYXRlKTsKKworICAgIHB1
c2goQGltcGxGaXhlZEhlYWRlciwgIlxuI2luY2x1ZGUgXCJjb25maWcuaFwiXG4iKTsKKyAgICBw
dXNoKEBpbXBsRml4ZWRIZWFkZXIsICIjaW5jbHVkZSBcIiR7Y2xhc3NOYW1lfS5oXCJcblxuIik7
CisKKyAgICBwdXNoKEBpbXBsRml4ZWRIZWFkZXIsICIjaWYgJHtjb25kaXRpb25hbFN0cmluZ31c
blxuIikgaWYgJGNvbmRpdGlvbmFsU3RyaW5nOworfQorCitzdWIgR2VuZXJhdGVDYWxsYmFja0hl
YWRlcgoreworICAgIG15ICRvYmplY3QgPSBzaGlmdDsKKyAgICBteSAkZGF0YU5vZGUgPSBzaGlm
dDsKKworICAgIG15ICRpbnRlcmZhY2VOYW1lID0gJGRhdGFOb2RlLT5uYW1lOworICAgIG15ICRj
bGFzc05hbWUgPSAiVjgkaW50ZXJmYWNlTmFtZSI7CisKKworICAgICMgLSBBZGQgZGVmYXVsdCBo
ZWFkZXIgdGVtcGxhdGUKKyAgICBHZW5lcmF0ZUhlYWRlckNvbnRlbnRIZWFkZXIoJGRhdGFOb2Rl
KTsKKworICAgIGlmICgiJGludGVyZmFjZU5hbWUuaCIgbHQgIldvcmxkQ29udGV4dEhhbmRsZS5o
IikgeworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiI2luY2x1ZGUgXCIkaW50ZXJmYWNl
TmFtZS5oXCJcbiIpOworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiI2luY2x1ZGUgXCJX
b3JsZENvbnRleHRIYW5kbGUuaFwiXG4iKTsKKyAgICB9IGVsc2UgeworICAgICAgICBwdXNoKEBo
ZWFkZXJDb250ZW50LCAiI2luY2x1ZGUgXCJXb3JsZENvbnRleHRIYW5kbGUuaFwiXG4iKTsKKyAg
ICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiNpbmNsdWRlIFwiJGludGVyZmFjZU5hbWUuaFwi
XG4iKTsKKyAgICB9CisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiNpbmNsdWRlIDx2OC5oPlxu
Iik7CisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPlxu
Iik7CisgICAgCisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlxubmFtZXNwYWNlIFdlYkNvcmUg
e1xuXG4iKTsKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiY2xhc3MgRnJhbWU7XG5cbiIpOwor
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJjbGFzcyAkY2xhc3NOYW1lIDogcHVibGljICRpbnRl
cmZhY2VOYW1lIHtcbiIpOworCisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgPDxFTkQpOworcHVi
bGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPCR7Y2xhc3NOYW1lfT4gY3JlYXRlKHY4OjpMb2Nh
bDx2ODo6VmFsdWU+IHZhbHVlLCBGcmFtZSogZnJhbWUpCisgICAgeworICAgICAgICBBU1NFUlQo
dmFsdWUtPklzT2JqZWN0KCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3ICR7Y2xhc3NO
YW1lfSh2YWx1ZS0+VG9PYmplY3QoKSwgZnJhbWUpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH4k
e2NsYXNzTmFtZX0oKTsKKworRU5ECisKKyAgICAjIEZ1bmN0aW9ucworICAgIG15ICRudW1GdW5j
dGlvbnMgPSBAeyRkYXRhTm9kZS0+ZnVuY3Rpb25zfTsKKyAgICBpZiAoJG51bUZ1bmN0aW9ucyA+
IDApIHsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAvLyBGdW5jdGlvbnNcbiIp
OworICAgICAgICBmb3JlYWNoIG15ICRmdW5jdGlvbiAoQHskZGF0YU5vZGUtPmZ1bmN0aW9uc30p
IHsKKyAgICAgICAgICAgIG15IEBwYXJhbXMgPSBAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc307Cisg
ICAgICAgICAgICBpZiAoISRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PnsiQ3VzdG9tIn0gJiYKKyAgICAgICAgICAgICAgICAhKEdldE5hdGl2ZVR5cGUoJGZ1bmN0aW9u
LT5zaWduYXR1cmUtPnR5cGUpIGVxICJib29sIikpIHsKKyAgICAgICAgICAgICAgICAgICAgcHVz
aChAaGVhZGVyQ29udGVudCwgIiAgICBDT01QSUxFX0FTU0VSVChmYWxzZSkiKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB2aXJ0dWFsICIg
LiBHZXROYXRpdmVUeXBlRm9yQ2FsbGJhY2tzKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT50eXBlKSAu
ICIgIiAuICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1lIC4gIihTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiIpOworICAgICAgICAgICAgZm9yZWFjaCBteSAkcGFyYW0gKEBwYXJhbXMpIHsKKyAgICAg
ICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiLCAiIC4gR2V0TmF0aXZlVHlwZUZvckNh
bGxiYWNrcygkcGFyYW0tPnR5cGUpIC4gIiAiIC4gJHBhcmFtLT5uYW1lKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIik7XG4iKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHB1c2goQGhlYWRlckNvbnRlbnQsIDw8RU5EKTsKKworcHJpdmF0ZToK
KyAgICAke2NsYXNzTmFtZX0odjg6OkxvY2FsPHY4OjpPYmplY3Q+LCBGcmFtZSopOworCisgICAg
djg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gbV9jYWxsYmFjazsKKyAgICBSZWZQdHI8RnJhbWU+
IG1fZnJhbWU7CisgICAgV29ybGRDb250ZXh0SGFuZGxlIG1fd29ybGRDb250ZXh0OworfTsKKwor
RU5ECisKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAifVxuXG4iKTsKKyAgICBwdXNoKEBoZWFk
ZXJDb250ZW50LCAiI2VuZGlmIC8vICRjbGFzc05hbWUiIC4gIl9oXG5cbiIpOworCisgICAgbXkg
JGNvbmRpdGlvbmFsU3RyaW5nID0gR2VuZXJhdGVDb25kaXRpb25hbFN0cmluZygkZGF0YU5vZGUp
OworICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIjZW5kaWYgLy8gJHtjb25kaXRpb25hbFN0cmlu
Z31cbiIpIGlmICRjb25kaXRpb25hbFN0cmluZzsKK30KKworc3ViIEdlbmVyYXRlQ2FsbGJhY2tJ
bXBsZW1lbnRhdGlvbgoreworICAgIG15ICRvYmplY3QgPSBzaGlmdDsKKyAgICBteSAkZGF0YU5v
ZGUgPSBzaGlmdDsKKyAgICBteSAkaW50ZXJmYWNlTmFtZSA9ICRkYXRhTm9kZS0+bmFtZTsKKyAg
ICBteSAkY2xhc3NOYW1lID0gIlY4JGludGVyZmFjZU5hbWUiOworCisgICAgIyAtIEFkZCBkZWZh
dWx0IGhlYWRlciB0ZW1wbGF0ZQorICAgIEdlbmVyYXRlSW1wbGVtZW50YXRpb25Db250ZW50SGVh
ZGVyKCRkYXRhTm9kZSk7CisgICAgICAgICAKKyAgICAkaW1wbEluY2x1ZGVzeyJGcmFtZS5oIn0g
PSAxOworICAgICRpbXBsSW5jbHVkZXN7IlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCJ9ID0gMTsK
KyAgICAkaW1wbEluY2x1ZGVzeyJWOEN1c3RvbVZvaWRDYWxsYmFjay5oIn0gPSAxOworCisgICAg
cHVzaChAaW1wbENvbnRlbnQsICJuYW1lc3BhY2UgV2ViQ29yZSB7XG5cbiIpOworICAgIHB1c2go
QGltcGxDb250ZW50LCA8PEVORCk7Ciske2NsYXNzTmFtZX06OiR7Y2xhc3NOYW1lfSh2ODo6TG9j
YWw8djg6Ok9iamVjdD4gY2FsbGJhY2ssIEZyYW1lKiBmcmFtZSkKKyAgICA6IG1fY2FsbGJhY2so
djg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46Ok5ldyhjYWxsYmFjaykpCisgICAgLCBtX2ZyYW1l
KGZyYW1lKQorICAgICwgbV93b3JsZENvbnRleHQoVXNlQ3VycmVudFdvcmxkKQoreworfQorCisk
e2NsYXNzTmFtZX06On4ke2NsYXNzTmFtZX0oKQoreworICAgIG1fY2FsbGJhY2suRGlzcG9zZSgp
OworfQorCitFTkQKKworICAgICMgRnVuY3Rpb25zCisgICAgbXkgJG51bUZ1bmN0aW9ucyA9IEB7
JGRhdGFOb2RlLT5mdW5jdGlvbnN9OworICAgIGlmICgkbnVtRnVuY3Rpb25zID4gMCkgeworICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIi8vIEZ1bmN0aW9uc1xuIik7CisgICAgICAgIGZvcmVh
Y2ggbXkgJGZ1bmN0aW9uIChAeyRkYXRhTm9kZS0+ZnVuY3Rpb25zfSkgeworICAgICAgICAgICAg
bXkgQHBhcmFtcyA9IEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfTsKKyAgICAgICAgICAgIGlmICgk
ZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbSJ9IHx8Cisg
ICAgICAgICAgICAgICAgIShHZXROYXRpdmVUeXBlRm9yQ2FsbGJhY2tzKCRmdW5jdGlvbi0+c2ln
bmF0dXJlLT50eXBlKSBlcSAiYm9vbCIpKSB7CisgICAgICAgICAgICAgICAgbmV4dDsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgQWRkSW5jbHVkZXNGb3JUeXBlKCRmdW5jdGlvbi0+c2ln
bmF0dXJlLT50eXBlKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4iIC4gR2V0
TmF0aXZlVHlwZUZvckNhbGxiYWNrcygkZnVuY3Rpb24tPnNpZ25hdHVyZS0+dHlwZSkgLiAiICR7
Y2xhc3NOYW1lfTo6IiAuICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1lIC4gIihTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0Iik7CisKKyAgICAgICAgICAgIGZvcmVhY2ggbXkgJHBhcmFt
IChAcGFyYW1zKSB7CisgICAgICAgICAgICAgICAgQWRkSW5jbHVkZXNGb3JUeXBlKCRwYXJhbS0+
dHlwZSk7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIsICIgLiBHZXROYXRp
dmVUeXBlRm9yQ2FsbGJhY2tzKCRwYXJhbS0+dHlwZSkgLiAiICIgLiAkcGFyYW0tPm5hbWUpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIilcbiIpOwor
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKKyAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTtcblxuIik7Cisg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0
PiB2OENvbnRleHQgPSB0b1Y4Q29udGV4dChjb250ZXh0LCBtX3dvcmxkQ29udGV4dCk7XG4iKTsK
KyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICh2OENvbnRleHQuSXNFbXB0
eSgpKVxuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJu
IHRydWU7XG5cbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgdjg6OkNv
bnRleHQ6OlNjb3BlIHNjb3BlKHY4Q29udGV4dCk7XG5cbiIpOworICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGFyZ3ZbXSA9IHtcbiIpOwor
CisgICAgICAgICAgICBmb3JlYWNoIG15ICRwYXJhbSAoQHBhcmFtcykgeworICAgICAgICAgICAg
ICAgIG15ICRwYXJhbU5hbWUgPSAkcGFyYW0tPm5hbWU7CisgICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgICAgIHRvVjgoJHtwYXJhbU5hbWV9KSIpOworICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiLFxuIik7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBwb3AoQGltcGxDb250ZW50KTsgICMgcmVtb3ZlIHRoZSBsYXN0IGNvbW1hIGFuZCBuZXdsaW5l
CisKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4gICAgfTtcblxuIik7CisgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBSZWZQdHI8RnJhbWU+IHByb3RlY3QobV9m
cmFtZSk7XG5cbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYm9vbCBj
YWxsYmFja1JldHVyblZhbHVlID0gZmFsc2U7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIHJldHVybiAhaW52b2tlQ2FsbGJhY2sobV9jYWxsYmFjaywgMSwgYXJndiwg
Y2FsbGJhY2tSZXR1cm5WYWx1ZSk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAifVxuIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxu
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZVxuXG4iKTsKKworICAgIG15ICRjb25kaXRpb25hbFN0cmlu
ZyA9IEdlbmVyYXRlQ29uZGl0aW9uYWxTdHJpbmcoJGRhdGFOb2RlKTsKKyAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiNlbmRpZiAvLyAke2NvbmRpdGlvbmFsU3RyaW5nfVxuIikgaWYgJGNvbmRpdGlv
bmFsU3RyaW5nOworfQorCiBzdWIgR2VuZXJhdGVUb1Y4Q29udmVydGVycwogewogICAgIG15ICRk
YXRhTm9kZSA9IHNoaWZ0OwpAQCAtMjU4MCw2ICsyNzU4LDE1IEBAIHN1YiBHZXROYXRpdmVUeXBl
CiAgICAgcmV0dXJuICIke3R5cGV9KiI7CiB9CiAKK3N1YiBHZXROYXRpdmVUeXBlRm9yQ2FsbGJh
Y2tzCit7CisgICAgbXkgJHR5cGUgPSBzaGlmdDsKKyAgICByZXR1cm4gImNvbnN0IFN0cmluZyYi
IGlmICR0eXBlIGVxICJET01TdHJpbmciOworCisgICAgIyBDYWxsYmFja3MgdXNlIHJhdyBwb2lu
dGVycywgc28gcGFzcyBpc1BhcmFtZXRlciA9IDEKKyAgICByZXR1cm4gR2V0TmF0aXZlVHlwZSgk
dHlwZSwgMSk7Cit9CisKIHN1YiBUcmFuc2xhdGVQYXJhbWV0ZXIKIHsKICAgICBteSAkc2lnbmF0
dXJlID0gc2hpZnQ7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0Q2Fs
bGJhY2suaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rl
c3RDYWxsYmFjay5pZGwJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9UZXN0Q2FsbGJhY2suaWRsCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtc3Ry
QXJnLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENv
bXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRXN0ckFyZywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
CisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIFRoaXMgSURMIGZpbGUgaXMgZm9yIHRlc3RpbmcgdGhlIGJpbmRpbmdzIGNvZGUg
Z2VuZXJhdG9yIHdpdGggYW4gaW50ZXJmYWNlCisvLyB0aGF0IGhhcyB0aGUgIkNhbGxiYWNrIiBh
dHRyaWJ1dGUgYW5kIGZvciB0cmFja2luZyBjaGFuZ2VzIGluIGl0cyBvdXB1dC4KK21vZHVsZSB0
ZXN0IHsKKyAgICBpbnRlcmZhY2UgWworICAgICAgICBDb25kaXRpb25hbD1EQVRBQkFTRSwKKyAg
ICAgICAgQ2FsbGJhY2sKKyAgICBdIFRlc3RDYWxsYmFjayB7CisgICAgICBib29sZWFuIGNhbGxi
YWNrV2l0aENsYXNzMVBhcmFtKGluIENsYXNzMSBjbGFzczFQYXJhbSk7CisgICAgICBib29sZWFu
IGNhbGxiYWNrV2l0aENsYXNzMlBhcmFtKGluIENsYXNzMiBjbGFzczJQYXJhbSwgaW4gRE9NU3Ry
aW5nIHN0ckFyZyk7CisgICAgICBsb25nIGNhbGxiYWNrV2l0aE5vbkJvb2xSZXR1cm5UeXBlKGlu
IENsYXNzMyBjbGFzczNQYXJhbSk7CisgICAgICBbQ3VzdG9tXSBsb25nIGN1c3RvbUNhbGxiYWNr
KGluIENsYXNzNSBjbGFzczVQYXJhbSwgaW4gQ2xhc3M2IGNsYXNzNlBhcmFtKTsKKyAgICB9Owor
fQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2su
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dENhbGxiYWNrLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdENhbGxiYWNrLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDAgQEAK
Ky8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9q
ZWN0LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGlu
Z3MucGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5B
QkxFKERBVEFCQVNFKQorCisjaW5jbHVkZSAiSlNUZXN0Q2FsbGJhY2suaCIKKworI2luY2x1ZGUg
IkNsYXNzMS5oIgorI2luY2x1ZGUgIkNsYXNzMi5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQuaCIKKyNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgorI2luY2x1ZGUgPHd0Zi9N
YWluVGhyZWFkLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworSlNUZXN0Q2FsbGJhY2s6OkpTVGVzdENhbGxiYWNrKEpTT2JqZWN0KiBjYWxsYmFjaywg
SlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAgICA6IG1fZGF0YShuZXcgSlNDYWxs
YmFja0RhdGEoY2FsbGJhY2ssIGdsb2JhbE9iamVjdCkpCisgICAgLCBtX2lzb2xhdGVkV29ybGQo
Z2xvYmFsT2JqZWN0LT53b3JsZCgpKQoreworfQorCitKU1Rlc3RDYWxsYmFjazo6fkpTVGVzdENh
bGxiYWNrKCkKK3sKKyAgICBjYWxsT25NYWluVGhyZWFkKEpTQ2FsbGJhY2tEYXRhOjpkZWxldGVE
YXRhLCBtX2RhdGEpOworI2lmbmRlZiBOREVCVUcKKyAgICBtX2RhdGEgPSAwOworI2VuZGlmCit9
CisKKy8vIEZ1bmN0aW9ucworCitib29sIEpTVGVzdENhbGxiYWNrOjpjYWxsYmFja1dpdGhDbGFz
czFQYXJhbShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBDbGFzczEqIGNsYXNzMVBh
cmFtKQoreworICAgIEFTU0VSVChtX2RhdGEpOworICAgIEFTU0VSVChjb250ZXh0KTsKKworICAg
IFJlZlB0cjxKU1Rlc3RDYWxsYmFjaz4gcHJvdGVjdCh0aGlzKTsKKworICAgIEpTTG9jayBsb2Nr
KFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisKKyAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0gdG9KU0RPTUdsb2JhbE9iamVjdChjb250ZXh0LCBtX2lzb2xhdGVkV29ybGQuZ2V0
KCkpOworICAgIGlmICghZ2xvYmFsT2JqZWN0KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOworICAgIE1hcmtl
ZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CisgICAgYXJncy5hcHBlbmQodG9KUyhleGVjLCBjbGFzczFQ
YXJhbSkpOworCisgICAgYm9vbCByYWlzZWRFeGNlcHRpb24gPSBmYWxzZTsKKyAgICBtX2RhdGEt
Pmludm9rZUNhbGxiYWNrKGFyZ3MsICZyYWlzZWRFeGNlcHRpb24pOworICAgIHJldHVybiAhcmFp
c2VkRXhjZXB0aW9uOworfQorCitib29sIEpTVGVzdENhbGxiYWNrOjpjYWxsYmFja1dpdGhDbGFz
czJQYXJhbShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBDbGFzczIqIGNsYXNzMlBh
cmFtLCBjb25zdCBTdHJpbmcmIHN0ckFyZykKK3sKKyAgICBBU1NFUlQobV9kYXRhKTsKKyAgICBB
U1NFUlQoY29udGV4dCk7CisKKyAgICBSZWZQdHI8SlNUZXN0Q2FsbGJhY2s+IHByb3RlY3QodGhp
cyk7CisKKyAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworCisgICAgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRvSlNET01HbG9iYWxPYmplY3QoY29udGV4
dCwgbV9pc29sYXRlZFdvcmxkLmdldCgpKTsKKyAgICBpZiAoIWdsb2JhbE9iamVjdCkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmds
b2JhbEV4ZWMoKTsKKyAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOworICAgIGFyZ3MuYXBw
ZW5kKHRvSlMoZXhlYywgY2xhc3MyUGFyYW0pKTsKKyAgICBhcmdzLmFwcGVuZCh0b0pTKGV4ZWMs
IHN0ckFyZykpOworCisgICAgYm9vbCByYWlzZWRFeGNlcHRpb24gPSBmYWxzZTsKKyAgICBtX2Rh
dGEtPmludm9rZUNhbGxiYWNrKGFyZ3MsICZyYWlzZWRFeGNlcHRpb24pOworICAgIHJldHVybiAh
cmFpc2VkRXhjZXB0aW9uOworfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoREFUQUJBU0UpCklu
ZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFjay5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxi
YWNrLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RDYWxsYmFjay5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU4IEBACisvKgorICAgIFRo
aXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgICBU
aGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBO
T1QgTU9ESUZZIQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisg
ICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyovCisKKyNpZm5kZWYgSlNUZXN0Q2FsbGJhY2tfaAorI2RlZmluZSBKU1Rlc3RD
YWxsYmFja19oCisKKyNpZiBFTkFCTEUoREFUQUJBU0UpCisKKyNpbmNsdWRlICJKU0NhbGxiYWNr
RGF0YS5oIgorI2luY2x1ZGUgIlRlc3RDYWxsYmFjay5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSlNUZXN0Q2FsbGJhY2sgOiBwdWJs
aWMgVGVzdENhbGxiYWNrIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxKU1Rlc3RD
YWxsYmFjaz4gY3JlYXRlKEpTQzo6SlNPYmplY3QqIGNhbGxiYWNrLCBKU0RPTUdsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBKU1Rl
c3RDYWxsYmFjayhjYWxsYmFjaywgZ2xvYmFsT2JqZWN0KSk7CisgICAgfQorCisgICAgdmlydHVh
bCB+SlNUZXN0Q2FsbGJhY2soKTsKKworICAgIC8vIEZ1bmN0aW9ucworICAgIHZpcnR1YWwgYm9v
bCBjYWxsYmFja1dpdGhDbGFzczFQYXJhbShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgQ2xhc3Mx
KiBjbGFzczFQYXJhbSk7CisgICAgdmlydHVhbCBib29sIGNhbGxiYWNrV2l0aENsYXNzMlBhcmFt
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBDbGFzczIqIGNsYXNzMlBhcmFtLCBjb25zdCBTdHJp
bmcmIHN0ckFyZyk7CisgICAgQ09NUElMRV9BU1NFUlQoZmFsc2UpICAgIHZpcnR1YWwgaW50IGNh
bGxiYWNrV2l0aE5vbkJvb2xSZXR1cm5UeXBlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBDbGFz
czMqIGNsYXNzM1BhcmFtKTsKKyAgICB2aXJ0dWFsIGludCBjdXN0b21DYWxsYmFjayhTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgQ2xhc3M1KiBjbGFzczVQYXJhbSwgQ2xhc3M2KiBjbGFzczZQYXJh
bSk7CisKK3ByaXZhdGU6CisgICAgSlNUZXN0Q2FsbGJhY2soSlNDOjpKU09iamVjdCogY2FsbGJh
Y2ssIEpTRE9NR2xvYmFsT2JqZWN0Kik7CisKKyAgICBKU0NhbGxiYWNrRGF0YSogbV9kYXRhOwor
ICAgIFJlZlB0cjxET01XcmFwcGVyV29ybGQ+IG1faXNvbGF0ZWRXb3JsZDsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShEQVRBQkFTRSkKKworI2VuZGlm
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RDYWxsYmFjay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0
Q2FsbGJhY2suY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVjgvVjhUZXN0Q2FsbGJhY2suY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkyIEBACisv
KgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVj
dC4KKyAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdz
LnBsLiBETyBOT1QgTU9ESUZZIQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICAgIEJvc3RvbiwgTUEgMDIx
MTEtMTMwNywgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlY4VGVz
dENhbGxiYWNrLmgiCisKKyNpZiBFTkFCTEUoREFUQUJBU0UpCisKKyNpbmNsdWRlICJGcmFtZS5o
IgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJWOENsYXNz
MS5oIgorI2luY2x1ZGUgIlY4Q2xhc3MyLmgiCisjaW5jbHVkZSAiVjhDdXN0b21Wb2lkQ2FsbGJh
Y2suaCIKKyNpbmNsdWRlICJWOERPTVN0cmluZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K1Y4VGVzdENhbGxiYWNrOjpWOFRlc3RDYWxsYmFjayh2ODo6TG9jYWw8djg6Ok9iamVjdD4gY2Fs
bGJhY2ssIEZyYW1lKiBmcmFtZSkKKyAgICA6IG1fY2FsbGJhY2sodjg6OlBlcnNpc3RlbnQ8djg6
Ok9iamVjdD46Ok5ldyhjYWxsYmFjaykpCisgICAgLCBtX2ZyYW1lKGZyYW1lKQorICAgICwgbV93
b3JsZENvbnRleHQoVXNlQ3VycmVudFdvcmxkKQoreworfQorCitWOFRlc3RDYWxsYmFjazo6flY4
VGVzdENhbGxiYWNrKCkKK3sKKyAgICBtX2NhbGxiYWNrLkRpc3Bvc2UoKTsKK30KKworLy8gRnVu
Y3Rpb25zCisKK2Jvb2wgVjhUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aENsYXNzMVBhcmFtKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIENsYXNzMSogY2xhc3MxUGFyYW0pCit7Cisg
ICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOworCisgICAgdjg6OkhhbmRsZTx2ODo6Q29u
dGV4dD4gdjhDb250ZXh0ID0gdG9WOENvbnRleHQoY29udGV4dCwgbV93b3JsZENvbnRleHQpOwor
ICAgIGlmICh2OENvbnRleHQuSXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IHY4OjpDb250ZXh0OjpTY29wZSBzY29wZSh2OENvbnRleHQpOworCisgICAgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IGFyZ3ZbXSA9IHsKKyAgICAgICAgdG9WOChjbGFzczFQYXJhbSkKKyAgICB9Owor
CisgICAgUmVmUHRyPEZyYW1lPiBwcm90ZWN0KG1fZnJhbWUpOworCisgICAgYm9vbCBjYWxsYmFj
a1JldHVyblZhbHVlID0gZmFsc2U7CisgICAgcmV0dXJuICFpbnZva2VDYWxsYmFjayhtX2NhbGxi
YWNrLCAxLCBhcmd2LCBjYWxsYmFja1JldHVyblZhbHVlKTsKK30KKworYm9vbCBWOFRlc3RDYWxs
YmFjazo6Y2FsbGJhY2tXaXRoQ2xhc3MyUGFyYW0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCwgQ2xhc3MyKiBjbGFzczJQYXJhbSwgY29uc3QgU3RyaW5nJiBzdHJBcmcpCit7CisgICAg
djg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOworCisgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4
dD4gdjhDb250ZXh0ID0gdG9WOENvbnRleHQoY29udGV4dCwgbV93b3JsZENvbnRleHQpOworICAg
IGlmICh2OENvbnRleHQuSXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHY4
OjpDb250ZXh0OjpTY29wZSBzY29wZSh2OENvbnRleHQpOworCisgICAgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IGFyZ3ZbXSA9IHsKKyAgICAgICAgdG9WOChjbGFzczJQYXJhbSksCisgICAgICAgIHRv
Vjgoc3RyQXJnKQorICAgIH07CisKKyAgICBSZWZQdHI8RnJhbWU+IHByb3RlY3QobV9mcmFtZSk7
CisKKyAgICBib29sIGNhbGxiYWNrUmV0dXJuVmFsdWUgPSBmYWxzZTsKKyAgICByZXR1cm4gIWlu
dm9rZUNhbGxiYWNrKG1fY2FsbGJhY2ssIDEsIGFyZ3YsIGNhbGxiYWNrUmV0dXJuVmFsdWUpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoREFUQUJBU0Up
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RDYWxsYmFjay5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdENh
bGxiYWNrLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9W
OC9WOFRlc3RDYWxsYmFjay5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYzIEBACisvKgorICAg
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAg
ICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBE
TyBOT1QgTU9ESUZZIQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
CisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICAgIEJvc3RvbiwgTUEgMDIxMTEtMTMw
NywgVVNBLgorKi8KKworI2lmIEVOQUJMRShEQVRBQkFTRSkKKworI2lmbmRlZiBWOFRlc3RDYWxs
YmFja19oCisjZGVmaW5lIFY4VGVzdENhbGxiYWNrX2gKKworI2luY2x1ZGUgIlRlc3RDYWxsYmFj
ay5oIgorI2luY2x1ZGUgIldvcmxkQ29udGV4dEhhbmRsZS5oIgorI2luY2x1ZGUgPHY4Lmg+Cisj
aW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBG
cmFtZTsKKworY2xhc3MgVjhUZXN0Q2FsbGJhY2sgOiBwdWJsaWMgVGVzdENhbGxiYWNrIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxWOFRlc3RDYWxsYmFjaz4gY3JlYXRlKHY4OjpM
b2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBGcmFtZSogZnJhbWUpCisgICAgeworICAgICAgICBBU1NF
UlQodmFsdWUtPklzT2JqZWN0KCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFY4VGVz
dENhbGxiYWNrKHZhbHVlLT5Ub09iamVjdCgpLCBmcmFtZSkpOworICAgIH0KKworICAgIHZpcnR1
YWwgflY4VGVzdENhbGxiYWNrKCk7CisKKyAgICAvLyBGdW5jdGlvbnMKKyAgICB2aXJ0dWFsIGJv
b2wgY2FsbGJhY2tXaXRoQ2xhc3MxUGFyYW0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIENsYXNz
MSogY2xhc3MxUGFyYW0pOworICAgIHZpcnR1YWwgYm9vbCBjYWxsYmFja1dpdGhDbGFzczJQYXJh
bShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgQ2xhc3MyKiBjbGFzczJQYXJhbSwgY29uc3QgU3Ry
aW5nJiBzdHJBcmcpOworICAgIENPTVBJTEVfQVNTRVJUKGZhbHNlKSAgICB2aXJ0dWFsIGludCBj
YWxsYmFja1dpdGhOb25Cb29sUmV0dXJuVHlwZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgQ2xh
c3MzKiBjbGFzczNQYXJhbSk7CisgICAgdmlydHVhbCBpbnQgY3VzdG9tQ2FsbGJhY2soU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIENsYXNzNSogY2xhc3M1UGFyYW0sIENsYXNzNiogY2xhc3M2UGFy
YW0pOworCitwcml2YXRlOgorICAgIFY4VGVzdENhbGxiYWNrKHY4OjpMb2NhbDx2ODo6T2JqZWN0
PiwgRnJhbWUqKTsKKworICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IG1fY2FsbGJhY2s7
CisgICAgUmVmUHRyPEZyYW1lPiBtX2ZyYW1lOworICAgIFdvcmxkQ29udGV4dEhhbmRsZSBtX3dv
cmxkQ29udGV4dDsKK307CisKK30KKworI2VuZGlmIC8vIFY4VGVzdENhbGxiYWNrX2gKKworI2Vu
ZGlmIC8vIEVOQUJMRShEQVRBQkFTRSkK
</data>
<flag name="review"
          id="38979"
          type_id="1"
          status="+"
          setter="abarth"
    />
    <flag name="commit-queue"
          id="38980"
          type_id="3"
          status="-"
          setter="dumi"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54963</attachid>
            <date>2010-05-03 15:01:00 -0700</date>
            <delta_ts>2010-05-03 15:10:01 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>34660</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1ODcwMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjggQEAKKzIwMTAtMDUtMDIgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGQgdGhlIGFiaWxpdHkgdG8gYXV0by1nZW5lcmF0ZSBjYWxsYmFja3MgdG8gYWxsIGNvZGUg
Z2VuZXJhdG9ycy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTM4NDE0CisKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5w
bToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbToKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2suY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENhbGxiYWNrOjpKU1Rlc3RDYWxsYmFjayk6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3RDYWxsYmFjazo6fkpTVGVzdENhbGxiYWNrKToKKyAgICAgICAg
KFdlYkNvcmU6OkpTVGVzdENhbGxiYWNrOjpjYWxsYmFja1dpdGhDbGFzczFQYXJhbSk6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoQ2xhc3MyUGFyYW0pOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFjay5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENhbGxiYWNrOjpjcmVhdGUpOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9KU1Rlc3RDYWxsYmFjay5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6VjhUZXN0Q2FsbGJhY2s6OlY4VGVzdENhbGxiYWNrKToKKyAgICAgICAg
KFdlYkNvcmU6OlY4VGVzdENhbGxiYWNrOjp+VjhUZXN0Q2FsbGJhY2spOgorICAgICAgICAoV2Vi
Q29yZTo6VjhUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aENsYXNzMVBhcmFtKToKKyAgICAgICAg
KFdlYkNvcmU6OlY4VGVzdENhbGxiYWNrOjpjYWxsYmFja1dpdGhDbGFzczJQYXJhbSk6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdENhbGxiYWNrLmg6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6VjhUZXN0Q2FsbGJhY2s6OmNyZWF0ZSk6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RDYWxsYmFjay5pZGw6IEFkZGVkLgorCiAyMDEwLTA1LTAz
ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IEFkYW0gQmFydGguCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVy
YXRvckpTLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9ySlMucG0JKHJldmlzaW9uIDU4NzAyKQorKysgV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAtMTAxLDggKzEwMSwxMyBAQCBz
dWIgR2VuZXJhdGVJbnRlcmZhY2UKICAgICBteSAkZGVmaW5lcyA9IHNoaWZ0OwogCiAgICAgIyBT
dGFydCBhY3R1YWwgZ2VuZXJhdGlvbgotICAgICRvYmplY3QtPkdlbmVyYXRlSGVhZGVyKCRkYXRh
Tm9kZSk7Ci0gICAgJG9iamVjdC0+R2VuZXJhdGVJbXBsZW1lbnRhdGlvbigkZGF0YU5vZGUpOwor
ICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDYWxsYmFjayJ9KSB7Cisg
ICAgICAgICRvYmplY3QtPkdlbmVyYXRlQ2FsbGJhY2tIZWFkZXIoJGRhdGFOb2RlKTsKKyAgICAg
ICAgJG9iamVjdC0+R2VuZXJhdGVDYWxsYmFja0ltcGxlbWVudGF0aW9uKCRkYXRhTm9kZSk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgJG9iamVjdC0+R2VuZXJhdGVIZWFkZXIoJGRhdGFOb2RlKTsK
KyAgICAgICAgJG9iamVjdC0+R2VuZXJhdGVJbXBsZW1lbnRhdGlvbigkZGF0YU5vZGUpOworICAg
IH0KIAogICAgIG15ICRuYW1lID0gJGRhdGFOb2RlLT5uYW1lOwogCkBAIC01MTcsNiArNTIyLDM0
IEBAIHN1YiBHZW5lcmF0ZUdldE93blByb3BlcnR5RGVzY3JpcHRvckJvZHkKICAgICByZXR1cm4g
QGdldE93blByb3BlcnR5RGVzY3JpcHRvckltcGw7CiB9CiAKK3N1YiBHZW5lcmF0ZUhlYWRlckNv
bnRlbnRIZWFkZXIKK3sKKyAgICBteSAkZGF0YU5vZGUgPSBzaGlmdDsKKyAgICBteSAkY2xhc3NO
YW1lID0gIkpTIiAuICRkYXRhTm9kZS0+bmFtZTsKKworICAgIEBoZWFkZXJDb250ZW50SGVhZGVy
ID0gc3BsaXQoIlxyIiwgJGhlYWRlclRlbXBsYXRlKTsKKworICAgICMgLSBBZGQgaGVhZGVyIHBy
b3RlY3Rpb24KKyAgICBwdXNoKEBoZWFkZXJDb250ZW50SGVhZGVyLCAiXG4jaWZuZGVmICRjbGFz
c05hbWUiIC4gIl9oIik7CisgICAgcHVzaChAaGVhZGVyQ29udGVudEhlYWRlciwgIlxuI2RlZmlu
ZSAkY2xhc3NOYW1lIiAuICJfaFxuXG4iKTsKKworICAgIG15ICRjb25kaXRpb25hbFN0cmluZyA9
IEdlbmVyYXRlQ29uZGl0aW9uYWxTdHJpbmcoJGRhdGFOb2RlKTsKKyAgICBwdXNoKEBoZWFkZXJD
b250ZW50SGVhZGVyLCAiI2lmICR7Y29uZGl0aW9uYWxTdHJpbmd9XG5cbiIpIGlmICRjb25kaXRp
b25hbFN0cmluZzsKK30KKworc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb25Db250ZW50SGVhZGVy
Cit7CisgICAgbXkgJGRhdGFOb2RlID0gc2hpZnQ7CisgICAgbXkgJGNsYXNzTmFtZSA9ICJKUyIg
LiAkZGF0YU5vZGUtPm5hbWU7CisKKyAgICBAaW1wbENvbnRlbnRIZWFkZXIgPSBzcGxpdCgiXHIi
LCAkaGVhZGVyVGVtcGxhdGUpOworCisgICAgcHVzaChAaW1wbENvbnRlbnRIZWFkZXIsICJcbiNp
bmNsdWRlIFwiY29uZmlnLmhcIlxuIik7CisgICAgbXkgJGNvbmRpdGlvbmFsU3RyaW5nID0gR2Vu
ZXJhdGVDb25kaXRpb25hbFN0cmluZygkZGF0YU5vZGUpOworICAgIHB1c2goQGltcGxDb250ZW50
SGVhZGVyLCAiXG4jaWYgJHtjb25kaXRpb25hbFN0cmluZ31cblxuIikgaWYgJGNvbmRpdGlvbmFs
U3RyaW5nOworICAgIHB1c2goQGltcGxDb250ZW50SGVhZGVyLCAiI2luY2x1ZGUgXCIkY2xhc3NO
YW1lLmhcIlxuXG4iKTsKK30KKwogc3ViIEdlbmVyYXRlSGVhZGVyCiB7CiAgICAgbXkgJG9iamVj
dCA9IHNoaWZ0OwpAQCAtNTQxLDE1ICs1NzQsOCBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICBt
eSAkZXZlbnRUYXJnZXQgPSAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJFdmVudFRh
cmdldCJ9OwogICAgIG15ICRuZWVkc01hcmtDaGlsZHJlbiA9ICRkYXRhTm9kZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57IkN1c3RvbU1hcmtGdW5jdGlvbiJ9IHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57IkV2ZW50VGFyZ2V0In07CiAgICAgCi0gICAgIyAtIEFkZCBkZWZhdWx0IGhl
YWRlciB0ZW1wbGF0ZQotICAgIEBoZWFkZXJDb250ZW50SGVhZGVyID0gc3BsaXQoIlxyIiwgJGhl
YWRlclRlbXBsYXRlKTsKLQotICAgICMgLSBBZGQgaGVhZGVyIHByb3RlY3Rpb24KLSAgICBwdXNo
KEBoZWFkZXJDb250ZW50SGVhZGVyLCAiXG4jaWZuZGVmICRjbGFzc05hbWUiIC4gIl9oIik7Ci0g
ICAgcHVzaChAaGVhZGVyQ29udGVudEhlYWRlciwgIlxuI2RlZmluZSAkY2xhc3NOYW1lIiAuICJf
aFxuXG4iKTsKLQotICAgIG15ICRjb25kaXRpb25hbFN0cmluZyA9IEdlbmVyYXRlQ29uZGl0aW9u
YWxTdHJpbmcoJGRhdGFOb2RlKTsKLSAgICBwdXNoKEBoZWFkZXJDb250ZW50SGVhZGVyLCAiI2lm
ICR7Y29uZGl0aW9uYWxTdHJpbmd9XG5cbiIpIGlmICRjb25kaXRpb25hbFN0cmluZzsKKyAgICAj
IC0gQWRkIGRlZmF1bHQgaGVhZGVyIHRlbXBsYXRlIGFuZCBoZWFkZXIgcHJvdGVjdGlvbgorICAg
IEdlbmVyYXRlSGVhZGVyQ29udGVudEhlYWRlcigkZGF0YU5vZGUpOwogCiAgICAgaWYgKCRoYXNQ
YXJlbnQpIHsKICAgICAgICAgJGhlYWRlckluY2x1ZGVzeyIkcGFyZW50Q2xhc3NOYW1lLmgifSA9
IDE7CkBAIC05NDMsNiArOTY5LDcgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgICAgIH0KICAg
ICB9CiAKKyAgICBteSAkY29uZGl0aW9uYWxTdHJpbmcgPSBHZW5lcmF0ZUNvbmRpdGlvbmFsU3Ry
aW5nKCRkYXRhTm9kZSk7CiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlxufSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZVxuXG4iKTsKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiI2VuZGlmIC8vICR7
Y29uZGl0aW9uYWxTdHJpbmd9XG5cbiIpIGlmICRjb25kaXRpb25hbFN0cmluZzsKICAgICBwdXNo
KEBoZWFkZXJDb250ZW50LCAiI2VuZGlmXG4iKTsKQEAgLTEwMzgsMTIgKzEwNjUsNyBAQCBzdWIg
R2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgIG15ICRuZWVkc01hcmtDaGlsZHJlbiA9ICRkYXRh
Tm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbU1hcmtGdW5jdGlvbiJ9IHx8ICRkYXRh
Tm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkV2ZW50VGFyZ2V0In07CiAKICAgICAjIC0gQWRk
IGRlZmF1bHQgaGVhZGVyIHRlbXBsYXRlCi0gICAgQGltcGxDb250ZW50SGVhZGVyID0gc3BsaXQo
IlxyIiwgJGhlYWRlclRlbXBsYXRlKTsKLQotICAgIHB1c2goQGltcGxDb250ZW50SGVhZGVyLCAi
XG4jaW5jbHVkZSBcImNvbmZpZy5oXCJcbiIpOwotICAgIG15ICRjb25kaXRpb25hbFN0cmluZyA9
IEdlbmVyYXRlQ29uZGl0aW9uYWxTdHJpbmcoJGRhdGFOb2RlKTsKLSAgICBwdXNoKEBpbXBsQ29u
dGVudEhlYWRlciwgIlxuI2lmICR7Y29uZGl0aW9uYWxTdHJpbmd9XG5cbiIpIGlmICRjb25kaXRp
b25hbFN0cmluZzsKLSAgICBwdXNoKEBpbXBsQ29udGVudEhlYWRlciwgIiNpbmNsdWRlIFwiJGNs
YXNzTmFtZS5oXCJcblxuIik7CisgICAgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbkNvbnRlbnRIZWFk
ZXIoJGRhdGFOb2RlKTsKIAogICAgIEFkZEluY2x1ZGVzRm9yU1ZHQW5pbWF0ZWRUeXBlKCRpbnRl
cmZhY2VOYW1lKSBpZiAkY2xhc3NOYW1lID1+IC9eSlNTVkdBbmltYXRlZC87CiAKQEAgLTE4ODUs
NiArMTkwNywxNTUgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KIAogICAgIHB1c2goQGlt
cGxDb250ZW50LCAiXG59XG4iKTsKIAorICAgIG15ICRjb25kaXRpb25hbFN0cmluZyA9IEdlbmVy
YXRlQ29uZGl0aW9uYWxTdHJpbmcoJGRhdGFOb2RlKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwg
IlxuI2VuZGlmIC8vICR7Y29uZGl0aW9uYWxTdHJpbmd9XG4iKSBpZiAkY29uZGl0aW9uYWxTdHJp
bmc7Cit9CisKK3N1YiBHZW5lcmF0ZUNhbGxiYWNrSGVhZGVyCit7CisgICAgbXkgJG9iamVjdCA9
IHNoaWZ0OworICAgIG15ICRkYXRhTm9kZSA9IHNoaWZ0OworCisgICAgbXkgJGludGVyZmFjZU5h
bWUgPSAkZGF0YU5vZGUtPm5hbWU7CisgICAgbXkgJGNsYXNzTmFtZSA9ICJKUyRpbnRlcmZhY2VO
YW1lIjsKKworICAgICMgLSBBZGQgZGVmYXVsdCBoZWFkZXIgdGVtcGxhdGUgYW5kIGhlYWRlciBw
cm90ZWN0aW9uCisgICAgR2VuZXJhdGVIZWFkZXJDb250ZW50SGVhZGVyKCRkYXRhTm9kZSk7CisK
KyAgICAkaGVhZGVySW5jbHVkZXN7IiRpbnRlcmZhY2VOYW1lLmgifSA9IDE7CisgICAgJGhlYWRl
ckluY2x1ZGVzeyJKU0NhbGxiYWNrRGF0YS5oIn0gPSAxOworICAgICRoZWFkZXJJbmNsdWRlc3si
PHd0Zi9Gb3J3YXJkLmg+In0gPSAxOworCisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlxubmFt
ZXNwYWNlIFdlYkNvcmUge1xuXG4iKTsKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiY2xhc3Mg
JGNsYXNzTmFtZSA6IHB1YmxpYyAkaW50ZXJmYWNlTmFtZSB7XG4iKTsKKyAgICBwdXNoKEBoZWFk
ZXJDb250ZW50LCAicHVibGljOlxuIik7CisKKyAgICAjIFRoZSBzdGF0aWMgY3JlYXRlKCkgbWV0
aG9kLgorICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIFBhc3NSZWZQdHI8JGNs
YXNzTmFtZT4gY3JlYXRlKEpTQzo6SlNPYmplY3QqIGNhbGxiYWNrLCBKU0RPTUdsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0KVxuIik7CisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB7XG4i
KTsKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
ICRjbGFzc05hbWUoY2FsbGJhY2ssIGdsb2JhbE9iamVjdCkpO1xuIik7CisgICAgcHVzaChAaGVh
ZGVyQ29udGVudCwgIiAgICB9XG5cbiIpOworCisgICAgIyBEZXN0cnVjdG9yCisgICAgcHVzaChA
aGVhZGVyQ29udGVudCwgIiAgICB2aXJ0dWFsIH4kY2xhc3NOYW1lKCk7XG4iKTsKKworICAgICMg
RnVuY3Rpb25zCisgICAgbXkgJG51bUZ1bmN0aW9ucyA9IEB7JGRhdGFOb2RlLT5mdW5jdGlvbnN9
OworICAgIGlmICgkbnVtRnVuY3Rpb25zID4gMCkgeworICAgICAgICBwdXNoKEBoZWFkZXJDb250
ZW50LCAiXG4gICAgLy8gRnVuY3Rpb25zXG4iKTsKKyAgICAgICAgZm9yZWFjaCBteSAkZnVuY3Rp
b24gKEB7JGRhdGFOb2RlLT5mdW5jdGlvbnN9KSB7CisgICAgICAgICAgICBteSBAcGFyYW1zID0g
QHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9OworICAgICAgICAgICAgaWYgKCEkZnVuY3Rpb24tPnNp
Z25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbSJ9ICYmCisgICAgICAgICAgICAg
ICAgIShHZXROYXRpdmVUeXBlKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT50eXBlKSBlcSAiYm9vbCIp
KSB7CisgICAgICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBDT01QSUxFX0FT
U0VSVChmYWxzZSkiKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHVzaChAaGVhZGVy
Q29udGVudCwgIiAgICB2aXJ0dWFsICIgLiBHZXROYXRpdmVUeXBlKCRmdW5jdGlvbi0+c2lnbmF0
dXJlLT50eXBlKSAuICIgIiAuICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1lIC4gIihTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiIpOworICAgICAgICAgICAgZm9yZWFjaCBteSAkcGFyYW0gKEBwYXJh
bXMpIHsKKyAgICAgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiLCAiIC4gR2V0TmF0
aXZlVHlwZSgkcGFyYW0tPnR5cGUpIC4gIiAiIC4gJHBhcmFtLT5uYW1lKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIik7XG4iKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJcbnByaXZhdGU6XG4iKTsKKwor
ICAgICMgQ29uc3RydWN0b3IKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICRjbGFzc05h
bWUoSlNDOjpKU09iamVjdCogY2FsbGJhY2ssIEpTRE9NR2xvYmFsT2JqZWN0Kik7XG5cbiIpOwor
CisgICAgIyBQcml2YXRlIG1lbWJlcnMKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIEpT
Q2FsbGJhY2tEYXRhKiBtX2RhdGE7XG4iKTsKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAg
IFJlZlB0cjxET01XcmFwcGVyV29ybGQ+IG1faXNvbGF0ZWRXb3JsZDtcbiIpOworICAgIHB1c2go
QGhlYWRlckNvbnRlbnQsICJ9O1xuXG4iKTsKKworICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJ9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlXG5cbiIpOworICAgIG15ICRjb25kaXRpb25hbFN0cmluZyA9
IEdlbmVyYXRlQ29uZGl0aW9uYWxTdHJpbmcoJGRhdGFOb2RlKTsKKyAgICBwdXNoKEBoZWFkZXJD
b250ZW50LCAiI2VuZGlmIC8vICR7Y29uZGl0aW9uYWxTdHJpbmd9XG5cbiIpIGlmICRjb25kaXRp
b25hbFN0cmluZzsKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiI2VuZGlmXG4iKTsKK30KKwor
c3ViIEdlbmVyYXRlQ2FsbGJhY2tJbXBsZW1lbnRhdGlvbgoreworICAgIG15ICgkb2JqZWN0LCAk
ZGF0YU5vZGUpID0gQF87CisKKyAgICBteSAkaW50ZXJmYWNlTmFtZSA9ICRkYXRhTm9kZS0+bmFt
ZTsKKyAgICBteSAkY2xhc3NOYW1lID0gIkpTJGludGVyZmFjZU5hbWUiOworCisgICAgIyAtIEFk
ZCBkZWZhdWx0IGhlYWRlciB0ZW1wbGF0ZQorICAgIEdlbmVyYXRlSW1wbGVtZW50YXRpb25Db250
ZW50SGVhZGVyKCRkYXRhTm9kZSk7CisKKyAgICAkaW1wbEluY2x1ZGVzeyJTY3JpcHRFeGVjdXRp
b25Db250ZXh0LmgifSA9IDE7CisgICAgJGltcGxJbmNsdWRlc3siPHJ1bnRpbWUvSlNMb2NrLmg+
In0gPSAxOworICAgICRpbXBsSW5jbHVkZXN7Ijx3dGYvTWFpblRocmVhZC5oPiJ9ID0gMTsKKwor
ICAgIEBpbXBsQ29udGVudCA9ICgpOworCisgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbnVzaW5n
IG5hbWVzcGFjZSBKU0M7XG5cbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAibmFtZXNwYWNl
IFdlYkNvcmUge1xuXG4iKTsKKworICAgICMgQ29uc3RydWN0b3IKKyAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiR7Y2xhc3NOYW1lfTo6JHtjbGFzc05hbWV9KEpTT2JqZWN0KiBjYWxsYmFjaywgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdClcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIDogbV9kYXRhKG5ldyBKU0NhbGxiYWNrRGF0YShjYWxsYmFjaywgZ2xvYmFsT2JqZWN0
KSlcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICwgbV9pc29sYXRlZFdvcmxkKGds
b2JhbE9iamVjdC0+d29ybGQoKSlcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7
CisgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOworCisgICAgIyBEZXN0cnVjdG9yCisg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIke2NsYXNzTmFtZX06On4ke2NsYXNzTmFtZX0oKVxuIik7
CisgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICBjYWxsT25NYWluVGhyZWFkKEpTQ2FsbGJhY2tEYXRhOjpkZWxldGVEYXRhLCBtX2RhdGEp
O1xuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIjaWZuZGVmIE5ERUJVR1xuIik7CisgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgbV9kYXRhID0gMDtcbiIpOworICAgIHB1c2goQGltcGxD
b250ZW50LCAiI2VuZGlmXG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cbiIpOworCisg
ICAgIyBGdW5jdGlvbnMKKyAgICBteSAkbnVtRnVuY3Rpb25zID0gQHskZGF0YU5vZGUtPmZ1bmN0
aW9uc307CisgICAgaWYgKCRudW1GdW5jdGlvbnMgPiAwKSB7CisgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiXG4vLyBGdW5jdGlvbnNcbiIpOworICAgICAgICBmb3JlYWNoIG15ICRmdW5jdGlv
biAoQHskZGF0YU5vZGUtPmZ1bmN0aW9uc30pIHsKKyAgICAgICAgICAgIG15IEBwYXJhbXMgPSBA
eyRmdW5jdGlvbi0+cGFyYW1ldGVyc307CisgICAgICAgICAgICBpZiAoJGZ1bmN0aW9uLT5zaWdu
YXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b20ifSB8fAorICAgICAgICAgICAgICAg
ICEoR2V0TmF0aXZlVHlwZSgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+dHlwZSkgZXEgImJvb2wiKSkg
eworICAgICAgICAgICAgICAgIG5leHQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEFk
ZEluY2x1ZGVzRm9yVHlwZSgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+dHlwZSk7CisgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIiAuIEdldE5hdGl2ZVR5cGUoJGZ1bmN0aW9uLT5zaWdu
YXR1cmUtPnR5cGUpIC4gIiAke2NsYXNzTmFtZX06OiIgLiAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+
bmFtZSAuICIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCIpOworCisgICAgICAgICAg
ICBmb3JlYWNoIG15ICRwYXJhbSAoQHBhcmFtcykgeworICAgICAgICAgICAgICAgIEFkZEluY2x1
ZGVzRm9yVHlwZSgkcGFyYW0tPnR5cGUpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiLCAiIC4gR2V0TmF0aXZlVHlwZSgkcGFyYW0tPnR5cGUpIC4gIiAiIC4gJHBhcmFtLT5u
YW1lKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIp
XG4iKTsKKworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKKyAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEFTU0VSVChtX2RhdGEpO1xuIik7CisgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBBU1NFUlQoY29udGV4dCk7XG5cbiIpOworICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgUmVmUHRyPCRjbGFzc05hbWU+IHByb3Rl
Y3QodGhpcyk7XG5cbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNM
b2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTtcblxuIik7CisgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdG9K
U0RPTUdsb2JhbE9iamVjdChjb250ZXh0LCBtX2lzb2xhdGVkV29ybGQuZ2V0KCkpO1xuIik7Cisg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoIWdsb2JhbE9iamVjdClcbiIp
OworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiB0cnVlO1xu
XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEV4ZWNTdGF0ZSogZXhl
YyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpO1xuIik7CisgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzO1xuIik7CisKKyAgICAg
ICAgICAgIGZvcmVhY2ggbXkgJHBhcmFtIChAcGFyYW1zKSB7CisgICAgICAgICAgICAgICAgbXkg
JHBhcmFtTmFtZSA9ICRwYXJhbS0+bmFtZTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICBhcmdzLmFwcGVuZCh0b0pTKGV4ZWMsICR7cGFyYW1OYW1lfSkpO1xuIik7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4gICAgYm9v
bCByYWlzZWRFeGNlcHRpb24gPSBmYWxzZTtcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgbV9kYXRhLT5pbnZva2VDYWxsYmFjayhhcmdzLCAmcmFpc2VkRXhjZXB0aW9u
KTtcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuICFyYWlz
ZWRFeGNlcHRpb247XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuIik7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxufVxuIik7Cisg
ICAgbXkgJGNvbmRpdGlvbmFsU3RyaW5nID0gR2VuZXJhdGVDb25kaXRpb25hbFN0cmluZygkZGF0
YU5vZGUpOwogICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4jZW5kaWYgLy8gJHtjb25kaXRpb25h
bFN0cmluZ31cbiIpIGlmICRjb25kaXRpb25hbFN0cmluZzsKIH0KIApJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCShyZXZpc2lvbiA1ODcwMikKKysr
IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0JKHdvcmtpbmcgY29w
eSkKQEAgLTk5LDggKzk5LDEzIEBAIHN1YiBHZW5lcmF0ZUludGVyZmFjZQogICAgIG15ICRkZWZp
bmVzID0gc2hpZnQ7CiAKICAgICAjIFN0YXJ0IGFjdHVhbCBnZW5lcmF0aW9uCi0gICAgJG9iamVj
dC0+R2VuZXJhdGVIZWFkZXIoJGRhdGFOb2RlKTsKLSAgICAkb2JqZWN0LT5HZW5lcmF0ZUltcGxl
bWVudGF0aW9uKCRkYXRhTm9kZSk7CisgICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57IkNhbGxiYWNrIn0pIHsKKyAgICAgICAgJG9iamVjdC0+R2VuZXJhdGVDYWxsYmFja0hl
YWRlcigkZGF0YU5vZGUpOworICAgICAgICAkb2JqZWN0LT5HZW5lcmF0ZUNhbGxiYWNrSW1wbGVt
ZW50YXRpb24oJGRhdGFOb2RlKTsKKyAgICB9IGVsc2UgeworICAgICAgICAkb2JqZWN0LT5HZW5l
cmF0ZUhlYWRlcigkZGF0YU5vZGUpOworICAgICAgICAkb2JqZWN0LT5HZW5lcmF0ZUltcGxlbWVu
dGF0aW9uKCRkYXRhTm9kZSk7CisgICAgfQogCiAgICAgbXkgJG5hbWUgPSAkZGF0YU5vZGUtPm5h
bWU7CiAKQEAgLTIzMiwxNCArMjM3LDkgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgJGNvZGVH
ZW5lcmF0b3ItPkFkZE1ldGhvZHNDb25zdGFudHNBbmRBdHRyaWJ1dGVzRnJvbVBhcmVudENsYXNz
ZXMoJGRhdGFOb2RlLCBcQGFsbFBhcmVudHMsIDEpOwogCiAgICAgbXkgJGhhc0xlZ2FjeVBhcmVu
dCA9ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkxlZ2FjeVBhcmVudCJ9OwotICAg
IG15ICRjb25kaXRpb25hbFN0cmluZyA9IEdlbmVyYXRlQ29uZGl0aW9uYWxTdHJpbmcoJGRhdGFO
b2RlKTsKIAogICAgICMgLSBBZGQgZGVmYXVsdCBoZWFkZXIgdGVtcGxhdGUKLSAgICBAaGVhZGVy
Q29udGVudCA9IHNwbGl0KCJcciIsICRoZWFkZXJUZW1wbGF0ZSk7Ci0KLSAgICBwdXNoKEBoZWFk
ZXJDb250ZW50LCAiXG4jaWYgJHtjb25kaXRpb25hbFN0cmluZ31cblxuIikgaWYgJGNvbmRpdGlv
bmFsU3RyaW5nOwotICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJcbiNpZm5kZWYgJGNsYXNzTmFt
ZSIgLiAiX2giKTsKLSAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiXG4jZGVmaW5lICRjbGFzc05h
bWUiIC4gIl9oXG5cbiIpOworICAgIEdlbmVyYXRlSGVhZGVyQ29udGVudEhlYWRlcigkZGF0YU5v
ZGUpOwogCiAgICAgIyBHZXQgY29ycmVjdCBwYXNzL3N0b3JlIHR5cGVzIHJlc3BlY3RpbmcgUE9E
VHlwZSBmbGFnCiAgICAgbXkgJHBvZFR5cGUgPSAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyJQT0RUeXBlIn07CkBAIC0zNTcsNiArMzU3LDcgQEAgRU5ECiAgICAgcHVzaChAaGVhZGVy
Q29udGVudCwgIn1cblxuIik7CiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiNlbmRpZiAvLyAk
Y2xhc3NOYW1lIiAuICJfaFxuIik7CiAKKyAgICBteSAkY29uZGl0aW9uYWxTdHJpbmcgPSBHZW5l
cmF0ZUNvbmRpdGlvbmFsU3RyaW5nKCRkYXRhTm9kZSk7CiAgICAgcHVzaChAaGVhZGVyQ29udGVu
dCwgIiNlbmRpZiAvLyAke2NvbmRpdGlvbmFsU3RyaW5nfVxuXG4iKSBpZiAkY29uZGl0aW9uYWxT
dHJpbmc7CiB9CiAKQEAgLTE1NzcsMTYgKzE1NzgsOSBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRh
dGlvbgogICAgIG15ICRpbXBsQ2xhc3NOYW1lID0gJGludGVyZmFjZU5hbWU7CiAKICAgICBteSAk
aGFzTGVnYWN5UGFyZW50ID0gJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTGVnYWN5
UGFyZW50In07Ci0gICAgbXkgJGNvbmRpdGlvbmFsU3RyaW5nID0gR2VuZXJhdGVDb25kaXRpb25h
bFN0cmluZygkZGF0YU5vZGUpOwogCiAgICAgIyAtIEFkZCBkZWZhdWx0IGhlYWRlciB0ZW1wbGF0
ZQotICAgIEBpbXBsQ29udGVudEhlYWRlciA9IHNwbGl0KCJcciIsICRoZWFkZXJUZW1wbGF0ZSk7
Ci0KLSAgICBwdXNoKEBpbXBsRml4ZWRIZWFkZXIsCi0gICAgICAgICAiXG4jaW5jbHVkZSBcImNv
bmZpZy5oXCJcbiIgLgotICAgICAgICAgIiNpbmNsdWRlIFwiJHtjbGFzc05hbWV9LmhcIlxuXG4i
KTsKLQotICAgIHB1c2goQGltcGxGaXhlZEhlYWRlciwgIlxuI2lmICR7Y29uZGl0aW9uYWxTdHJp
bmd9XG5cbiIpIGlmICRjb25kaXRpb25hbFN0cmluZzsKKyAgICBHZW5lcmF0ZUltcGxlbWVudGF0
aW9uQ29udGVudEhlYWRlcigkZGF0YU5vZGUpOwogICAgICAgICAgCiAgICAgJGltcGxJbmNsdWRl
c3siUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIn0gPSAxOwogICAgICRpbXBsSW5jbHVkZXN7IlY4
UHJveHkuaCJ9ID0gMTsKQEAgLTIwOTQsNiArMjA4OCw3IEBAIEVORAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogRU5ECiAKKyAgICBteSAkY29uZGl0aW9uYWxTdHJpbmcgPSBHZW5lcmF0ZUNvbmRp
dGlvbmFsU3RyaW5nKCRkYXRhTm9kZSk7CiAgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiNlbmRp
ZiAvLyAke2NvbmRpdGlvbmFsU3RyaW5nfVxuIikgaWYgJGNvbmRpdGlvbmFsU3RyaW5nOwogICAg
IAogICAgICMgV2UndmUgYWxyZWFkeSBhZGRlZCB0aGUgaGVhZGVyIGZvciB0aGlzIGZpbGUgaW4g
aW1wbEZpeGVkSGVhZGVyLCBzbyByZW1vdmUKQEAgLTIxMDEsNiArMjA5NiwxODkgQEAgRU5ECiAg
ICAgZGVsZXRlICRpbXBsSW5jbHVkZXN7IiR7Y2xhc3NOYW1lfS5oIn07CiB9CiAKK3N1YiBHZW5l
cmF0ZUhlYWRlckNvbnRlbnRIZWFkZXIKK3sKKyAgICBteSAkZGF0YU5vZGUgPSBzaGlmdDsKKyAg
ICBteSAkY2xhc3NOYW1lID0gIlY4IiAuICRkYXRhTm9kZS0+bmFtZTsKKyAgICBteSAkY29uZGl0
aW9uYWxTdHJpbmcgPSBHZW5lcmF0ZUNvbmRpdGlvbmFsU3RyaW5nKCRkYXRhTm9kZSk7CisKKyAg
ICBAaGVhZGVyQ29udGVudCA9IHNwbGl0KCJcciIsICRoZWFkZXJUZW1wbGF0ZSk7CisKKyAgICBw
dXNoKEBoZWFkZXJDb250ZW50LCAiXG4jaWYgJHtjb25kaXRpb25hbFN0cmluZ31cbiIpIGlmICRj
b25kaXRpb25hbFN0cmluZzsKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiXG4jaWZuZGVmICR7
Y2xhc3NOYW1lfSIgLiAiX2giKTsKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiXG4jZGVmaW5l
ICR7Y2xhc3NOYW1lfSIgLiAiX2hcblxuIik7Cit9CisKK3N1YiBHZW5lcmF0ZUltcGxlbWVudGF0
aW9uQ29udGVudEhlYWRlcgoreworICAgIG15ICRkYXRhTm9kZSA9IHNoaWZ0OworICAgIG15ICRj
bGFzc05hbWUgPSAiVjgiIC4gJGRhdGFOb2RlLT5uYW1lOworICAgIG15ICRjb25kaXRpb25hbFN0
cmluZyA9IEdlbmVyYXRlQ29uZGl0aW9uYWxTdHJpbmcoJGRhdGFOb2RlKTsKKworICAgIEBpbXBs
Q29udGVudEhlYWRlciA9IHNwbGl0KCJcciIsICRoZWFkZXJUZW1wbGF0ZSk7CisKKyAgICBwdXNo
KEBpbXBsRml4ZWRIZWFkZXIsICJcbiNpbmNsdWRlIFwiY29uZmlnLmhcIlxuIik7CisgICAgcHVz
aChAaW1wbEZpeGVkSGVhZGVyLCAiI2luY2x1ZGUgXCIke2NsYXNzTmFtZX0uaFwiXG5cbiIpOwor
CisgICAgcHVzaChAaW1wbEZpeGVkSGVhZGVyLCAiI2lmICR7Y29uZGl0aW9uYWxTdHJpbmd9XG5c
biIpIGlmICRjb25kaXRpb25hbFN0cmluZzsKK30KKworc3ViIEdlbmVyYXRlQ2FsbGJhY2tIZWFk
ZXIKK3sKKyAgICBteSAkb2JqZWN0ID0gc2hpZnQ7CisgICAgbXkgJGRhdGFOb2RlID0gc2hpZnQ7
CisKKyAgICBteSAkaW50ZXJmYWNlTmFtZSA9ICRkYXRhTm9kZS0+bmFtZTsKKyAgICBteSAkY2xh
c3NOYW1lID0gIlY4JGludGVyZmFjZU5hbWUiOworCisKKyAgICAjIC0gQWRkIGRlZmF1bHQgaGVh
ZGVyIHRlbXBsYXRlCisgICAgR2VuZXJhdGVIZWFkZXJDb250ZW50SGVhZGVyKCRkYXRhTm9kZSk7
CisKKyAgICBpZiAoIiRpbnRlcmZhY2VOYW1lLmgiIGx0ICJXb3JsZENvbnRleHRIYW5kbGUuaCIp
IHsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiNpbmNsdWRlIFwiJGludGVyZmFjZU5h
bWUuaFwiXG4iKTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiNpbmNsdWRlIFwiV29y
bGRDb250ZXh0SGFuZGxlLmhcIlxuIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcHVzaChAaGVh
ZGVyQ29udGVudCwgIiNpbmNsdWRlIFwiV29ybGRDb250ZXh0SGFuZGxlLmhcIlxuIik7CisgICAg
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIjaW5jbHVkZSBcIiRpbnRlcmZhY2VOYW1lLmhcIlxu
Iik7CisgICAgfQorICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIjaW5jbHVkZSA8djguaD5cbiIp
OworICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD5cbiIp
OworICAgIAorICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJcbm5hbWVzcGFjZSBXZWJDb3JlIHtc
blxuIik7CisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgImNsYXNzIEZyYW1lO1xuXG4iKTsKKyAg
ICBwdXNoKEBoZWFkZXJDb250ZW50LCAiY2xhc3MgJGNsYXNzTmFtZSA6IHB1YmxpYyAkaW50ZXJm
YWNlTmFtZSB7XG4iKTsKKworICAgIHB1c2goQGhlYWRlckNvbnRlbnQsIDw8RU5EKTsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjwke2NsYXNzTmFtZX0+IGNyZWF0ZSh2ODo6TG9jYWw8
djg6OlZhbHVlPiB2YWx1ZSwgRnJhbWUqIGZyYW1lKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHZh
bHVlLT5Jc09iamVjdCgpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyAke2NsYXNzTmFt
ZX0odmFsdWUtPlRvT2JqZWN0KCksIGZyYW1lKSk7CisgICAgfQorCisgICAgdmlydHVhbCB+JHtj
bGFzc05hbWV9KCk7CisKK0VORAorCisgICAgIyBGdW5jdGlvbnMKKyAgICBteSAkbnVtRnVuY3Rp
b25zID0gQHskZGF0YU5vZGUtPmZ1bmN0aW9uc307CisgICAgaWYgKCRudW1GdW5jdGlvbnMgPiAw
KSB7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgLy8gRnVuY3Rpb25zXG4iKTsK
KyAgICAgICAgZm9yZWFjaCBteSAkZnVuY3Rpb24gKEB7JGRhdGFOb2RlLT5mdW5jdGlvbnN9KSB7
CisgICAgICAgICAgICBteSBAcGFyYW1zID0gQHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9OworICAg
ICAgICAgICAgaWYgKCEkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
IkN1c3RvbSJ9ICYmCisgICAgICAgICAgICAgICAgIShHZXROYXRpdmVUeXBlKCRmdW5jdGlvbi0+
c2lnbmF0dXJlLT50eXBlKSBlcSAiYm9vbCIpKSB7CisgICAgICAgICAgICAgICAgICAgIHB1c2go
QGhlYWRlckNvbnRlbnQsICIgICAgQ09NUElMRV9BU1NFUlQoZmFsc2UpIik7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgdmlydHVhbCAiIC4g
R2V0TmF0aXZlVHlwZUZvckNhbGxiYWNrcygkZnVuY3Rpb24tPnNpZ25hdHVyZS0+dHlwZSkgLiAi
ICIgLiAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZSAuICIoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCoiKTsKKyAgICAgICAgICAgIGZvcmVhY2ggbXkgJHBhcmFtIChAcGFyYW1zKSB7CisgICAgICAg
ICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiwgIiAuIEdldE5hdGl2ZVR5cGVGb3JDYWxs
YmFja3MoJHBhcmFtLT50eXBlKSAuICIgIiAuICRwYXJhbS0+bmFtZSk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIpO1xuIik7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCA8PEVORCk7CisKK3ByaXZhdGU6Cisg
ICAgJHtjbGFzc05hbWV9KHY4OjpMb2NhbDx2ODo6T2JqZWN0PiwgRnJhbWUqKTsKKworICAgIHY4
OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IG1fY2FsbGJhY2s7CisgICAgUmVmUHRyPEZyYW1lPiBt
X2ZyYW1lOworICAgIFdvcmxkQ29udGV4dEhhbmRsZSBtX3dvcmxkQ29udGV4dDsKK307CisKK0VO
RAorCisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIn1cblxuIik7CisgICAgcHVzaChAaGVhZGVy
Q29udGVudCwgIiNlbmRpZiAvLyAkY2xhc3NOYW1lIiAuICJfaFxuXG4iKTsKKworICAgIG15ICRj
b25kaXRpb25hbFN0cmluZyA9IEdlbmVyYXRlQ29uZGl0aW9uYWxTdHJpbmcoJGRhdGFOb2RlKTsK
KyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiI2VuZGlmIC8vICR7Y29uZGl0aW9uYWxTdHJpbmd9
XG4iKSBpZiAkY29uZGl0aW9uYWxTdHJpbmc7Cit9CisKK3N1YiBHZW5lcmF0ZUNhbGxiYWNrSW1w
bGVtZW50YXRpb24KK3sKKyAgICBteSAkb2JqZWN0ID0gc2hpZnQ7CisgICAgbXkgJGRhdGFOb2Rl
ID0gc2hpZnQ7CisgICAgbXkgJGludGVyZmFjZU5hbWUgPSAkZGF0YU5vZGUtPm5hbWU7CisgICAg
bXkgJGNsYXNzTmFtZSA9ICJWOCRpbnRlcmZhY2VOYW1lIjsKKworICAgICMgLSBBZGQgZGVmYXVs
dCBoZWFkZXIgdGVtcGxhdGUKKyAgICBHZW5lcmF0ZUltcGxlbWVudGF0aW9uQ29udGVudEhlYWRl
cigkZGF0YU5vZGUpOworICAgICAgICAgCisgICAgJGltcGxJbmNsdWRlc3siRnJhbWUuaCJ9ID0g
MTsKKyAgICAkaW1wbEluY2x1ZGVzeyJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgifSA9IDE7Cisg
ICAgJGltcGxJbmNsdWRlc3siVjhDdXN0b21Wb2lkQ2FsbGJhY2suaCJ9ID0gMTsKKworICAgIHB1
c2goQGltcGxDb250ZW50LCAibmFtZXNwYWNlIFdlYkNvcmUge1xuXG4iKTsKKyAgICBwdXNoKEBp
bXBsQ29udGVudCwgPDxFTkQpOworJHtjbGFzc05hbWV9Ojoke2NsYXNzTmFtZX0odjg6OkxvY2Fs
PHY4OjpPYmplY3Q+IGNhbGxiYWNrLCBGcmFtZSogZnJhbWUpCisgICAgOiBtX2NhbGxiYWNrKHY4
OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpOZXcoY2FsbGJhY2spKQorICAgICwgbV9mcmFtZShm
cmFtZSkKKyAgICAsIG1fd29ybGRDb250ZXh0KFVzZUN1cnJlbnRXb3JsZCkKK3sKK30KKworJHtj
bGFzc05hbWV9Ojp+JHtjbGFzc05hbWV9KCkKK3sKKyAgICBtX2NhbGxiYWNrLkRpc3Bvc2UoKTsK
K30KKworRU5ECisKKyAgICAjIEZ1bmN0aW9ucworICAgIG15ICRudW1GdW5jdGlvbnMgPSBAeyRk
YXRhTm9kZS0+ZnVuY3Rpb25zfTsKKyAgICBpZiAoJG51bUZ1bmN0aW9ucyA+IDApIHsKKyAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIvLyBGdW5jdGlvbnNcbiIpOworICAgICAgICBmb3JlYWNo
IG15ICRmdW5jdGlvbiAoQHskZGF0YU5vZGUtPmZ1bmN0aW9uc30pIHsKKyAgICAgICAgICAgIG15
IEBwYXJhbXMgPSBAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc307CisgICAgICAgICAgICBpZiAoJGZ1
bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b20ifSB8fAorICAg
ICAgICAgICAgICAgICEoR2V0TmF0aXZlVHlwZUZvckNhbGxiYWNrcygkZnVuY3Rpb24tPnNpZ25h
dHVyZS0+dHlwZSkgZXEgImJvb2wiKSkgeworICAgICAgICAgICAgICAgIG5leHQ7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIEFkZEluY2x1ZGVzRm9yVHlwZSgkZnVuY3Rpb24tPnNpZ25h
dHVyZS0+dHlwZSk7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIiAuIEdldE5h
dGl2ZVR5cGVGb3JDYWxsYmFja3MoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPnR5cGUpIC4gIiAke2Ns
YXNzTmFtZX06OiIgLiAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZSAuICIoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCIpOworCisgICAgICAgICAgICBmb3JlYWNoIG15ICRwYXJhbSAo
QHBhcmFtcykgeworICAgICAgICAgICAgICAgIEFkZEluY2x1ZGVzRm9yVHlwZSgkcGFyYW0tPnR5
cGUpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiLCAiIC4gR2V0TmF0aXZl
VHlwZUZvckNhbGxiYWNrcygkcGFyYW0tPnR5cGUpIC4gIiAiIC4gJHBhcmFtLT5uYW1lKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIpXG4iKTsKKyAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CisgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7XG5cbiIpOworICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4g
djhDb250ZXh0ID0gdG9WOENvbnRleHQoY29udGV4dCwgbV93b3JsZENvbnRleHQpO1xuIik7Cisg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAodjhDb250ZXh0LklzRW1wdHko
KSlcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiB0
cnVlO1xuXG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHY4OjpDb250
ZXh0OjpTY29wZSBzY29wZSh2OENvbnRleHQpO1xuXG4iKTsKKyAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBhcmd2W10gPSB7XG4iKTsKKwor
ICAgICAgICAgICAgQGFyZ3ZzID0gKCk7CisgICAgICAgICAgICBmb3JlYWNoIG15ICRwYXJhbSAo
QHBhcmFtcykgeworICAgICAgICAgICAgICAgIG15ICRwYXJhbU5hbWUgPSAkcGFyYW0tPm5hbWU7
CisgICAgICAgICAgICAgICAgcHVzaChAYXJndnMsICIgICAgICAgIHRvVjgoJHtwYXJhbU5hbWV9
KSIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsIGpvaW4o
IixcbiIsIEBhcmd2cykpOworCisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuICAg
IH07XG5cbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgUmVmUHRyPEZy
YW1lPiBwcm90ZWN0KG1fZnJhbWUpO1xuXG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIGJvb2wgY2FsbGJhY2tSZXR1cm5WYWx1ZSA9IGZhbHNlO1xuIik7CisgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gIWludm9rZUNhbGxiYWNrKG1fY2Fs
bGJhY2ssICIgLiBzY2FsYXIoQHBhcmFtcykuICIsIGFyZ3YsIGNhbGxiYWNrUmV0dXJuVmFsdWUp
O1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cbiIpOworICAgICAgICB9
CisgICAgfQorCisgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbn0gLy8gbmFtZXNwYWNlIFdlYkNv
cmVcblxuIik7CisKKyAgICBteSAkY29uZGl0aW9uYWxTdHJpbmcgPSBHZW5lcmF0ZUNvbmRpdGlv
bmFsU3RyaW5nKCRkYXRhTm9kZSk7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIjZW5kaWYgLy8g
JHtjb25kaXRpb25hbFN0cmluZ31cbiIpIGlmICRjb25kaXRpb25hbFN0cmluZzsKK30KKwogc3Vi
IEdlbmVyYXRlVG9WOENvbnZlcnRlcnMKIHsKICAgICBteSAkZGF0YU5vZGUgPSBzaGlmdDsKQEAg
LTI1ODAsNiArMjc1OCwxNSBAQCBzdWIgR2V0TmF0aXZlVHlwZQogICAgIHJldHVybiAiJHt0eXBl
fSoiOwogfQogCitzdWIgR2V0TmF0aXZlVHlwZUZvckNhbGxiYWNrcworeworICAgIG15ICR0eXBl
ID0gc2hpZnQ7CisgICAgcmV0dXJuICJjb25zdCBTdHJpbmcmIiBpZiAkdHlwZSBlcSAiRE9NU3Ry
aW5nIjsKKworICAgICMgQ2FsbGJhY2tzIHVzZSByYXcgcG9pbnRlcnMsIHNvIHBhc3MgaXNQYXJh
bWV0ZXIgPSAxCisgICAgcmV0dXJuIEdldE5hdGl2ZVR5cGUoJHR5cGUsIDEpOworfQorCiBzdWIg
VHJhbnNsYXRlUGFyYW1ldGVyCiB7CiAgICAgbXkgJHNpZ25hdHVyZSA9IHNoaWZ0OwpJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdENhbGxiYWNrLmlkbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0Q2FsbGJhY2suaWRsCShyZXZp
c2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdENhbGxiYWNrLmlk
bAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
OSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXN0ckFyZywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxl
Iikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVzdHJBcmcs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBUaGlzIElETCBm
aWxlIGlzIGZvciB0ZXN0aW5nIHRoZSBiaW5kaW5ncyBjb2RlIGdlbmVyYXRvciB3aXRoIGFuIGlu
dGVyZmFjZQorLy8gdGhhdCBoYXMgdGhlICJDYWxsYmFjayIgYXR0cmlidXRlIGFuZCBmb3IgdHJh
Y2tpbmcgY2hhbmdlcyBpbiBpdHMgb3VwdXQuCittb2R1bGUgdGVzdCB7CisgICAgaW50ZXJmYWNl
IFsKKyAgICAgICAgQ29uZGl0aW9uYWw9REFUQUJBU0UsCisgICAgICAgIENhbGxiYWNrCisgICAg
XSBUZXN0Q2FsbGJhY2sgeworICAgICAgYm9vbGVhbiBjYWxsYmFja1dpdGhDbGFzczFQYXJhbShp
biBDbGFzczEgY2xhc3MxUGFyYW0pOworICAgICAgYm9vbGVhbiBjYWxsYmFja1dpdGhDbGFzczJQ
YXJhbShpbiBDbGFzczIgY2xhc3MyUGFyYW0sIGluIERPTVN0cmluZyBzdHJBcmcpOworICAgICAg
bG9uZyBjYWxsYmFja1dpdGhOb25Cb29sUmV0dXJuVHlwZShpbiBDbGFzczMgY2xhc3MzUGFyYW0p
OworICAgICAgW0N1c3RvbV0gbG9uZyBjdXN0b21DYWxsYmFjayhpbiBDbGFzczUgY2xhc3M1UGFy
YW0sIGluIENsYXNzNiBjbGFzczZQYXJhbSk7CisgICAgfTsKK30KSW5kZXg6IFdlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxiYWNrLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFjay5jcHAJKHJldmlz
aW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFj
ay5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAwIEBACisvKgorICAgIFRoaXMgZmlsZSBp
cyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZpbGUg
aGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZ
IQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShEQVRBQkFTRSkKKworI2lu
Y2x1ZGUgIkpTVGVzdENhbGxiYWNrLmgiCisKKyNpbmNsdWRlICJDbGFzczEuaCIKKyNpbmNsdWRl
ICJDbGFzczIuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCisjaW5jbHVk
ZSA8cnVudGltZS9KU0xvY2suaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorCit1c2lu
ZyBuYW1lc3BhY2UgSlNDOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0pTVGVzdENhbGxiYWNr
OjpKU1Rlc3RDYWxsYmFjayhKU09iamVjdCogY2FsbGJhY2ssIEpTRE9NR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QpCisgICAgOiBtX2RhdGEobmV3IEpTQ2FsbGJhY2tEYXRhKGNhbGxiYWNrLCBn
bG9iYWxPYmplY3QpKQorICAgICwgbV9pc29sYXRlZFdvcmxkKGdsb2JhbE9iamVjdC0+d29ybGQo
KSkKK3sKK30KKworSlNUZXN0Q2FsbGJhY2s6On5KU1Rlc3RDYWxsYmFjaygpCit7CisgICAgY2Fs
bE9uTWFpblRocmVhZChKU0NhbGxiYWNrRGF0YTo6ZGVsZXRlRGF0YSwgbV9kYXRhKTsKKyNpZm5k
ZWYgTkRFQlVHCisgICAgbV9kYXRhID0gMDsKKyNlbmRpZgorfQorCisvLyBGdW5jdGlvbnMKKwor
Ym9vbCBKU1Rlc3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoQ2xhc3MxUGFyYW0oU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwgQ2xhc3MxKiBjbGFzczFQYXJhbSkKK3sKKyAgICBBU1NFUlQo
bV9kYXRhKTsKKyAgICBBU1NFUlQoY29udGV4dCk7CisKKyAgICBSZWZQdHI8SlNUZXN0Q2FsbGJh
Y2s+IHByb3RlY3QodGhpcyk7CisKKyAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09u
bHkpOworCisgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRvSlNET01HbG9i
YWxPYmplY3QoY29udGV4dCwgbV9pc29sYXRlZFdvcmxkLmdldCgpKTsKKyAgICBpZiAoIWdsb2Jh
bE9iamVjdCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSBn
bG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKKyAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdz
OworICAgIGFyZ3MuYXBwZW5kKHRvSlMoZXhlYywgY2xhc3MxUGFyYW0pKTsKKworICAgIGJvb2wg
cmFpc2VkRXhjZXB0aW9uID0gZmFsc2U7CisgICAgbV9kYXRhLT5pbnZva2VDYWxsYmFjayhhcmdz
LCAmcmFpc2VkRXhjZXB0aW9uKTsKKyAgICByZXR1cm4gIXJhaXNlZEV4Y2VwdGlvbjsKK30KKwor
Ym9vbCBKU1Rlc3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoQ2xhc3MyUGFyYW0oU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwgQ2xhc3MyKiBjbGFzczJQYXJhbSwgY29uc3QgU3RyaW5nJiBz
dHJBcmcpCit7CisgICAgQVNTRVJUKG1fZGF0YSk7CisgICAgQVNTRVJUKGNvbnRleHQpOworCisg
ICAgUmVmUHRyPEpTVGVzdENhbGxiYWNrPiBwcm90ZWN0KHRoaXMpOworCisgICAgSlNMb2NrIGxv
Y2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKworICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSB0b0pTRE9NR2xvYmFsT2JqZWN0KGNvbnRleHQsIG1faXNvbGF0ZWRXb3JsZC5n
ZXQoKSk7CisgICAgaWYgKCFnbG9iYWxPYmplY3QpCisgICAgICAgIHJldHVybiB0cnVlOworCisg
ICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CisgICAgTWFy
a2VkQXJndW1lbnRCdWZmZXIgYXJnczsKKyAgICBhcmdzLmFwcGVuZCh0b0pTKGV4ZWMsIGNsYXNz
MlBhcmFtKSk7CisgICAgYXJncy5hcHBlbmQodG9KUyhleGVjLCBzdHJBcmcpKTsKKworICAgIGJv
b2wgcmFpc2VkRXhjZXB0aW9uID0gZmFsc2U7CisgICAgbV9kYXRhLT5pbnZva2VDYWxsYmFjayhh
cmdzLCAmcmFpc2VkRXhjZXB0aW9uKTsKKyAgICByZXR1cm4gIXJhaXNlZEV4Y2VwdGlvbjsKK30K
KworfQorCisjZW5kaWYgLy8gRU5BQkxFKERBVEFCQVNFKQpJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFjay5oCShyZXZpc2lvbiAwKQor
KysgV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2suaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdl
bmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAg
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZu
ZGVmIEpTVGVzdENhbGxiYWNrX2gKKyNkZWZpbmUgSlNUZXN0Q2FsbGJhY2tfaAorCisjaWYgRU5B
QkxFKERBVEFCQVNFKQorCisjaW5jbHVkZSAiSlNDYWxsYmFja0RhdGEuaCIKKyNpbmNsdWRlICJU
ZXN0Q2FsbGJhY2suaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIEpTVGVzdENhbGxiYWNrIDogcHVibGljIFRlc3RDYWxsYmFjayB7Citw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SlNUZXN0Q2FsbGJhY2s+IGNyZWF0ZShKU0M6
OkpTT2JqZWN0KiBjYWxsYmFjaywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSlNUZXN0Q2FsbGJhY2soY2FsbGJhY2ss
IGdsb2JhbE9iamVjdCkpOworICAgIH0KKworICAgIHZpcnR1YWwgfkpTVGVzdENhbGxiYWNrKCk7
CisKKyAgICAvLyBGdW5jdGlvbnMKKyAgICB2aXJ0dWFsIGJvb2wgY2FsbGJhY2tXaXRoQ2xhc3Mx
UGFyYW0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIENsYXNzMSogY2xhc3MxUGFyYW0pOworICAg
IHZpcnR1YWwgYm9vbCBjYWxsYmFja1dpdGhDbGFzczJQYXJhbShTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgQ2xhc3MyKiBjbGFzczJQYXJhbSwgY29uc3QgU3RyaW5nJiBzdHJBcmcpOworICAgIENP
TVBJTEVfQVNTRVJUKGZhbHNlKSAgICB2aXJ0dWFsIGludCBjYWxsYmFja1dpdGhOb25Cb29sUmV0
dXJuVHlwZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgQ2xhc3MzKiBjbGFzczNQYXJhbSk7Cisg
ICAgdmlydHVhbCBpbnQgY3VzdG9tQ2FsbGJhY2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIENs
YXNzNSogY2xhc3M1UGFyYW0sIENsYXNzNiogY2xhc3M2UGFyYW0pOworCitwcml2YXRlOgorICAg
IEpTVGVzdENhbGxiYWNrKEpTQzo6SlNPYmplY3QqIGNhbGxiYWNrLCBKU0RPTUdsb2JhbE9iamVj
dCopOworCisgICAgSlNDYWxsYmFja0RhdGEqIG1fZGF0YTsKKyAgICBSZWZQdHI8RE9NV3JhcHBl
cldvcmxkPiBtX2lzb2xhdGVkV29ybGQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBFTkFCTEUoREFUQUJBU0UpCisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Q2FsbGJhY2suY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdENhbGxiYWNrLmNwcAkocmV2aXNp
b24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdENhbGxiYWNr
LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMg
cGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhh
cyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEK
KworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQ
bGFjZSAtIFN1aXRlIDMzMCwKKyAgICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJWOFRlc3RDYWxsYmFjay5oIgorCisjaWYg
RU5BQkxFKERBVEFCQVNFKQorCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJTY3JpcHRF
eGVjdXRpb25Db250ZXh0LmgiCisjaW5jbHVkZSAiVjhDbGFzczEuaCIKKyNpbmNsdWRlICJWOENs
YXNzMi5oIgorI2luY2x1ZGUgIlY4Q3VzdG9tVm9pZENhbGxiYWNrLmgiCisjaW5jbHVkZSAiVjhE
T01TdHJpbmcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitWOFRlc3RDYWxsYmFjazo6VjhU
ZXN0Q2FsbGJhY2sodjg6OkxvY2FsPHY4OjpPYmplY3Q+IGNhbGxiYWNrLCBGcmFtZSogZnJhbWUp
CisgICAgOiBtX2NhbGxiYWNrKHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpOZXcoY2FsbGJh
Y2spKQorICAgICwgbV9mcmFtZShmcmFtZSkKKyAgICAsIG1fd29ybGRDb250ZXh0KFVzZUN1cnJl
bnRXb3JsZCkKK3sKK30KKworVjhUZXN0Q2FsbGJhY2s6On5WOFRlc3RDYWxsYmFjaygpCit7Cisg
ICAgbV9jYWxsYmFjay5EaXNwb3NlKCk7Cit9CisKKy8vIEZ1bmN0aW9ucworCitib29sIFY4VGVz
dENhbGxiYWNrOjpjYWxsYmFja1dpdGhDbGFzczFQYXJhbShTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCBDbGFzczEqIGNsYXNzMVBhcmFtKQoreworICAgIHY4OjpIYW5kbGVTY29wZSBo
YW5kbGVTY29wZTsKKworICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IHY4Q29udGV4dCA9IHRv
VjhDb250ZXh0KGNvbnRleHQsIG1fd29ybGRDb250ZXh0KTsKKyAgICBpZiAodjhDb250ZXh0Lklz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICB2ODo6Q29udGV4dDo6U2NvcGUg
c2NvcGUodjhDb250ZXh0KTsKKworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBhcmd2W10gPSB7
CisgICAgICAgIHRvVjgoY2xhc3MxUGFyYW0pCisgICAgfTsKKworICAgIFJlZlB0cjxGcmFtZT4g
cHJvdGVjdChtX2ZyYW1lKTsKKworICAgIGJvb2wgY2FsbGJhY2tSZXR1cm5WYWx1ZSA9IGZhbHNl
OworICAgIHJldHVybiAhaW52b2tlQ2FsbGJhY2sobV9jYWxsYmFjaywgMSwgYXJndiwgY2FsbGJh
Y2tSZXR1cm5WYWx1ZSk7Cit9CisKK2Jvb2wgVjhUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aENs
YXNzMlBhcmFtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIENsYXNzMiogY2xhc3My
UGFyYW0sIGNvbnN0IFN0cmluZyYgc3RyQXJnKQoreworICAgIHY4OjpIYW5kbGVTY29wZSBoYW5k
bGVTY29wZTsKKworICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IHY4Q29udGV4dCA9IHRvVjhD
b250ZXh0KGNvbnRleHQsIG1fd29ybGRDb250ZXh0KTsKKyAgICBpZiAodjhDb250ZXh0LklzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICB2ODo6Q29udGV4dDo6U2NvcGUgc2Nv
cGUodjhDb250ZXh0KTsKKworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBhcmd2W10gPSB7Cisg
ICAgICAgIHRvVjgoY2xhc3MyUGFyYW0pLAorICAgICAgICB0b1Y4KHN0ckFyZykKKyAgICB9Owor
CisgICAgUmVmUHRyPEZyYW1lPiBwcm90ZWN0KG1fZnJhbWUpOworCisgICAgYm9vbCBjYWxsYmFj
a1JldHVyblZhbHVlID0gZmFsc2U7CisgICAgcmV0dXJuICFpbnZva2VDYWxsYmFjayhtX2NhbGxi
YWNrLCAyLCBhcmd2LCBjYWxsYmFja1JldHVyblZhbHVlKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKERBVEFCQVNFKQpJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Q2FsbGJhY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RDYWxsYmFjay5oCShyZXZpc2lvbiAw
KQorKysgV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Q2FsbGJhY2suaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBv
ZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVu
IGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAg
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAt
IFN1aXRlIDMzMCwKKyAgICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyovCisKKyNpZiBF
TkFCTEUoREFUQUJBU0UpCisKKyNpZm5kZWYgVjhUZXN0Q2FsbGJhY2tfaAorI2RlZmluZSBWOFRl
c3RDYWxsYmFja19oCisKKyNpbmNsdWRlICJUZXN0Q2FsbGJhY2suaCIKKyNpbmNsdWRlICJXb3Js
ZENvbnRleHRIYW5kbGUuaCIKKyNpbmNsdWRlIDx2OC5oPgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRnJhbWU7CisKK2NsYXNzIFY4VGVz
dENhbGxiYWNrIDogcHVibGljIFRlc3RDYWxsYmFjayB7CitwdWJsaWM6CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8VjhUZXN0Q2FsbGJhY2s+IGNyZWF0ZSh2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1
ZSwgRnJhbWUqIGZyYW1lKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHZhbHVlLT5Jc09iamVjdCgp
KTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBWOFRlc3RDYWxsYmFjayh2YWx1ZS0+VG9P
YmplY3QoKSwgZnJhbWUpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5WOFRlc3RDYWxsYmFjaygp
OworCisgICAgLy8gRnVuY3Rpb25zCisgICAgdmlydHVhbCBib29sIGNhbGxiYWNrV2l0aENsYXNz
MVBhcmFtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBDbGFzczEqIGNsYXNzMVBhcmFtKTsKKyAg
ICB2aXJ0dWFsIGJvb2wgY2FsbGJhY2tXaXRoQ2xhc3MyUGFyYW0oU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIENsYXNzMiogY2xhc3MyUGFyYW0sIGNvbnN0IFN0cmluZyYgc3RyQXJnKTsKKyAgICBD
T01QSUxFX0FTU0VSVChmYWxzZSkgICAgdmlydHVhbCBpbnQgY2FsbGJhY2tXaXRoTm9uQm9vbFJl
dHVyblR5cGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIENsYXNzMyogY2xhc3MzUGFyYW0pOwor
ICAgIHZpcnR1YWwgaW50IGN1c3RvbUNhbGxiYWNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBD
bGFzczUqIGNsYXNzNVBhcmFtLCBDbGFzczYqIGNsYXNzNlBhcmFtKTsKKworcHJpdmF0ZToKKyAg
ICBWOFRlc3RDYWxsYmFjayh2ODo6TG9jYWw8djg6Ok9iamVjdD4sIEZyYW1lKik7CisKKyAgICB2
ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiBtX2NhbGxiYWNrOworICAgIFJlZlB0cjxGcmFtZT4g
bV9mcmFtZTsKKyAgICBXb3JsZENvbnRleHRIYW5kbGUgbV93b3JsZENvbnRleHQ7Cit9OworCit9
CisKKyNlbmRpZiAvLyBWOFRlc3RDYWxsYmFja19oCisKKyNlbmRpZiAvLyBFTkFCTEUoREFUQUJB
U0UpCg==
</data>
<flag name="review"
          id="39048"
          type_id="1"
          status="+"
          setter="abarth"
    />
    <flag name="commit-queue"
          id="39049"
          type_id="3"
          status="-"
          setter="dumi"
    />
          </attachment>
      

    </bug>

</bugzilla>