<?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>163491</bug_id>
          
          <creation_ts>2016-10-15 15:13:13 -0700</creation_ts>
          <short_desc>Use the reject() helper function for conditionally throwing TypeErrors.</short_desc>
          <delta_ts>2016-10-17 10:04:54 -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>JavaScriptCore</component>
          <version>WebKit Local Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>163446</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>alecflett</cc>
    
    <cc>beidson</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>jfbastien</cc>
    
    <cc>jsbell</cc>
    
    <cc>keith_miller</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1240650</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-10-15 15:13:13 -0700</bug_when>
    <thetext>In some places where we may conditionally throw a TypeError (e.g. when in strict mode), we already use the reject() helper function to conditionally throw the TypeError.  Doing so makes the code mode compact.  This patch applies this idiom in all places that throws TypeError where appropriate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1240651</commentid>
    <comment_count>1</comment_count>
      <attachid>291728</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-10-15 15:25:41 -0700</bug_when>
    <thetext>Created attachment 291728
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1240654</commentid>
    <comment_count>2</comment_count>
      <attachid>291728</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-10-15 15:49:19 -0700</bug_when>
    <thetext>Comment on attachment 291728
proposed patch.

I don’t understand why a function that throws an error object is named &quot;reject&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1240660</commentid>
    <comment_count>3</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-10-15 16:04:48 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Comment on attachment 291728 [details]
&gt; proposed patch.
&gt; 
&gt; I don’t understand why a function that throws an error object is named
&gt; &quot;reject&quot;.

I didn&apos;t coin the name.

The name came from https://trac.webkit.org/changeset/104488.  The comment attached to the addition of the reject function states &quot;Helper for the DefineOwnProperty? algorithm.&quot;  The code which uses it in JSArray::defineOwnNumericProperty() (from https://trac.webkit.org/changeset/104488/trunk/Source/JavaScriptCore/runtime/JSArray.cpp) has this comment:
    // 3. If current is undefined and extensible is false, then Reject. 

My guess is that Reject was a term used in the ECMAScript spec back then.  I no longer see the term used in that way in the current spec.

What the function really does is: failAndThrowTypeErrorIfNeeded().  I&apos;m not sure that that&apos;s the best name for it either.  Would you be ok with me moving forward with this patch as is, and renaming the function to a better name in a subsequent patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1240661</commentid>
    <comment_count>4</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-10-15 16:16:40 -0700</bug_when>
    <thetext>This patch has passed the JSC and layout tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1240670</commentid>
    <comment_count>5</comment_count>
      <attachid>291728</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-10-15 16:36:20 -0700</bug_when>
    <thetext>Comment on attachment 291728
proposed patch.

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

Why change many of the calls to explicitly use ASCIILiteral instead of doing it implicitly? The code was inconsistent before, is the implicit one not WebKit style? (follow up: why is that a supported thing)

&gt; Source/JavaScriptCore/runtime/JSArray.cpp:217
&gt; +            return reject(exec, scope, throwException, ASCIILiteral(&quot;Attempting to define numeric property on array with non-writable length property.&quot;));

Why is this string inline? Others above are changed to a predefined thing. Some others bellow are also inline char*.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1240672</commentid>
    <comment_count>6</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-10-15 16:43:47 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Comment on attachment 291728 [details]
&gt; proposed patch.
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=291728&amp;action=review
&gt; 
&gt; Why change many of the calls to explicitly use ASCIILiteral instead of doing
&gt; it implicitly? The code was inconsistent before, is the implicit one not
&gt; WebKit style? (follow up: why is that a supported thing)

This is a performance thing.  Here&apos;s why:
1. The ASCIILiteral(const char* characters) constructor is explicit.
2. The String(const char* characters) constructor can be implicit.
3. The String(const char* characters) constructor will malloc and copy over the string.
   The String(ASCIILiteral characters) constructor will NOT malloc and copy the string.
4. throwTypeError() takes either a ASCIILiteral or a const String&amp;.

Hence, explicitly using the ASCIILiteral saves us unnecessary mallocs and copies.

&gt; &gt; Source/JavaScriptCore/runtime/JSArray.cpp:217
&gt; &gt; +            return reject(exec, scope, throwException, ASCIILiteral(&quot;Attempting to define numeric property on array with non-writable length property.&quot;));
&gt; 
&gt; Why is this string inline? Others above are changed to a predefined thing.
&gt; Some others bellow are also inline char*.

Because there&apos;s only one instance of this string AFAIK.  Hence, it&apos;s not worth the effort to declare it elsewhere.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1240681</commentid>
    <comment_count>7</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-10-15 17:42:33 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; Comment on attachment 291728 [details]
&gt; &gt; proposed patch.
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=291728&amp;action=review
&gt; &gt; 
&gt; &gt; Why change many of the calls to explicitly use ASCIILiteral instead of doing
&gt; &gt; it implicitly? The code was inconsistent before, is the implicit one not
&gt; &gt; WebKit style? (follow up: why is that a supported thing)
&gt; 
&gt; This is a performance thing.  Here&apos;s why:
&gt; 1. The ASCIILiteral(const char* characters) constructor is explicit.
&gt; 2. The String(const char* characters) constructor can be implicit.
&gt; 3. The String(const char* characters) constructor will malloc and copy over
&gt; the string.
&gt;    The String(ASCIILiteral characters) constructor will NOT malloc and copy
&gt; the string.
&gt; 4. throwTypeError() takes either a ASCIILiteral or a const String&amp;.
&gt; 
&gt; Hence, explicitly using the ASCIILiteral saves us unnecessary mallocs and
&gt; copies.

Gotcha, thanks for explaining. It&apos;s a bit surprising that there&apos;s a perf gotcha hiding in the API, but I&apos;m guessing the String version of these is also useful so it can&apos;t just get removed (and an explicit char* -&gt; String is a PITA so it shouldn&apos;t be changed either).

 
&gt; &gt; &gt; Source/JavaScriptCore/runtime/JSArray.cpp:217
&gt; &gt; &gt; +            return reject(exec, scope, throwException, ASCIILiteral(&quot;Attempting to define numeric property on array with non-writable length property.&quot;));
&gt; &gt; 
&gt; &gt; Why is this string inline? Others above are changed to a predefined thing.
&gt; &gt; Some others bellow are also inline char*.
&gt; 
&gt; Because there&apos;s only one instance of this string AFAIK.  Hence, it&apos;s not
&gt; worth the effort to declare it elsewhere.

Ah, makes sense. Ideally the non-unique ones get COMDAT&apos;d away as well, but that requires LTO, so manual COMDAT is sadly / probably safer.


Agreed with the comment on &quot;reject&quot; (only just saw it), probably worth changing separately. Happy to do so if you want.


lgtm with all the power my non-reviewer self has :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1240973</commentid>
    <comment_count>8</comment_count>
      <attachid>291728</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-10-17 09:25:42 -0700</bug_when>
    <thetext>Comment on attachment 291728
proposed patch.

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

Nice.

&gt;&gt;&gt;&gt; Source/JavaScriptCore/runtime/JSArray.cpp:217
&gt;&gt;&gt;&gt; +            return reject(exec, scope, throwException, ASCIILiteral(&quot;Attempting to define numeric property on array with non-writable length property.&quot;));
&gt;&gt;&gt; 
&gt;&gt;&gt; Why is this string inline? Others above are changed to a predefined thing. Some others bellow are also inline char*.
&gt;&gt; 
&gt;&gt; Because there&apos;s only one instance of this string AFAIK.  Hence, it&apos;s not worth the effort to declare it elsewhere.
&gt; 
&gt; Ah, makes sense. Ideally the non-unique ones get COMDAT&apos;d away as well, but that requires LTO, so manual COMDAT is sadly / probably safer.
&gt; 
&gt; 
&gt; Agreed with the comment on &quot;reject&quot; (only just saw it), probably worth changing separately. Happy to do so if you want.
&gt; 
&gt; 
&gt; lgtm with all the power my non-reviewer self has :-)

I agree with the policy that used-once strings should be inline.

&gt; Source/JavaScriptCore/runtime/JSFunction.cpp:548
&gt; +    if (descriptor.configurablePresent() &amp;&amp; descriptor.configurable())
&gt; +        return reject(exec, scope, throwException, ASCIILiteral(UnconfigurablePropertyChangeConfigurabilityError));
&gt; +    if (descriptor.enumerablePresent() &amp;&amp; descriptor.enumerable())
&gt; +        return reject(exec, scope, throwException, ASCIILiteral(UnconfigurablePropertyChangeEnumerabilityError));
&gt; +    if (descriptor.isAccessorDescriptor())
&gt; +        return reject(exec, scope, throwException, ASCIILiteral(UnconfigurablePropertyChangeAccessMechanismError));
&gt; +    if (descriptor.writablePresent() &amp;&amp; descriptor.writable())
&gt; +        return reject(exec, scope, throwException, ASCIILiteral(UnconfigurablePropertyChangeWritabilityError));
&gt; +    if (!valueCheck)
&gt; +        return reject(exec, scope, throwException, ASCIILiteral(ReadonlyPropertyChangeError));

Wow, this is so much cleaner!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1240981</commentid>
    <comment_count>9</comment_count>
      <attachid>291728</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-10-17 09:46:33 -0700</bug_when>
    <thetext>Comment on attachment 291728
proposed patch.

I&apos;ll commit this manually.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1240991</commentid>
    <comment_count>10</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-10-17 10:02:33 -0700</bug_when>
    <thetext>Thanks for the review.  Landed in r207411: &lt;http://trac.webkit.org/r207411&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1240994</commentid>
    <comment_count>11</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-10-17 10:04:54 -0700</bug_when>
    <thetext>FYI, the bug to rename reject() (since Darin pointed out that reject is a weak name for it) is https://bugs.webkit.org/show_bug.cgi?id=163549.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>291728</attachid>
            <date>2016-10-15 15:25:41 -0700</date>
            <delta_ts>2016-10-17 09:46:33 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-163491.patch</filename>
            <type>text/plain</type>
            <size>76359</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA3MzgxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMCBA
QAorMjAxNi0xMC0xNSAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
VXNlIHRoZSByZWplY3QoKSBoZWxwZXIgZnVuY3Rpb24gZm9yIGNvbmRpdGlvbmFsbHkgdGhyb3dp
bmcgVHlwZUVycm9ycy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2MzQ5MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEluIHNvbWUgcGxhY2VzIHdoZXJlIHdlIG1heSBjb25kaXRpb25hbGx5IHRocm93IGEg
VHlwZUVycm9yIChlLmcuIHdoZW4gaW4gc3RyaWN0CisgICAgICAgIG1vZGUpLCB3ZSBhbHJlYWR5
IHVzZSB0aGUgcmVqZWN0KCkgaGVscGVyIGZ1bmN0aW9uIHRvIGNvbmRpdGlvbmFsbHkgdGhyb3cg
dGhlCisgICAgICAgIFR5cGVFcnJvci4gIERvaW5nIHNvIG1ha2VzIHRoZSBjb2RlIG1vZGUgY29t
cGFjdC4gIFRoaXMgcGF0Y2ggYXBwbGllcyB0aGlzIGlkaW9tCisgICAgICAgIGNvbnNpc3RlbnRs
eSBpbiBhbGwgcGxhY2VzIHRoYXQgdGhyb3dzIFR5cGVFcnJvciB3aGVyZSBhcHByb3ByaWF0ZS4K
KworICAgICAgICBUaGlzIHBhdGNoIGFsc28gZG9lcyB0aGUgZm9sbG93aW5nOgorICAgICAgICAx
LiBNYWtlIHRoZSByZWplY3QoKSBoZWxwZXIgZnVuY3Rpb24gdGFrZSBhbiBBU0NJSUxpdGVyYWwg
aW5zdGVhZCBvZiBhIGNvbnN0IGNoYXIqCisgICAgICAgICAgIGJlY2F1c2Ugd2UgYWx3YXlzIHBh
c3MgaXQgYSBsaXRlcmFsIHN0cmluZyBhbnl3YXkuCisgICAgICAgIDIuIENoYW5nZSB0aGUgcmVq
ZWN0IGhlbHBlcigpIHRvIHRha2UgYSBUaHJvd1Njb3BlJi4gIFRoaXMgYWxsb3dzIHRoZSB0aHJv
d24KKyAgICAgICAgICAgZXJyb3IgdG8gYmUgYXR0cmlidXRlZCB0byBpdHMgY2FsbGVyLgorICAg
ICAgICAzLiBXaGVuIGFuIGVycm9yIG1lc3NhZ2Ugc3RyaW5nIGlzIGluc3RhbnRpYXRlZCByZXBl
YXRlZGx5IGluIG1vcmUgdGhhbiAxIHBsYWNlLAorICAgICAgICAgICBjcmVhdGUgYSBjb21tb24g
Y29weSBvZiB0aGF0IGxpdGVyYWwgc3RyaW5nIGluIEpTT2JqZWN0LmNwcCAoaWYgb25lIGRvZXNu
J3QKKyAgICAgICAgICAgYWxyZWFkeSBleGlzdCkgYW5kIHVzZSB0aGF0IGNvbW1vbiBzdHJpbmcg
aW4gYWxsIHRob3NlIHBsYWNlcy4KKyAgICAgICAgNC4gU2luY2UgSSB3YXMgYXVkaXRpbmcgY2Fs
bCBzaXRlcyBvZiB0aHJvd1R5cGVFcnJvcigpIHRvIGNoZWNrIGlmIHRoZXkgc2hvdWxkIGJlCisg
ICAgICAgICAgIHVzaW5nIHRoZSByZWplY3QoKSBoZWxwZXIgaW5zdGVhZCwgSSBhbHNvIGZpeGVk
IHRob3NlIHVwIHRvIHBhc3MgdGhlIGVycm9yCisgICAgICAgICAgIG1lc3NhZ2UgYXMgYW4gQVND
SUlMaXRlcmFsIHdoZXJlIGFwcHJvcHJpYXRlLgorICAgICAgICA1LiBJbiBmdW5jdGlvbnMgdGhh
dCBJIHRvdWNoZWQsIGNoYW5nZSB0aGUgY29kZSB0byBub3QgcmVjb21wdXRlIHRoZSBWTSYgd2hl
biBpdAorICAgICAgICAgICBpcyBhbHJlYWR5IGF2YWlsYWJsZS4KKworICAgICAgICAqIGppdC9K
SVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBsbGludC9MTEludFNsb3dQYXRocy5jcHA6Cisg
ICAgICAgIChKU0M6OkxMSW50OjpMTElOVF9TTE9XX1BBVEhfREVDTCk6CisgICAgICAgICogcnVu
dGltZS9BcnJheVByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OnNoaWZ0KToKKyAgICAgICAg
KEpTQzo6dW5zaGlmdCk6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jUG9wKToKKyAgICAg
ICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNSZXZlcnNlKToKKyAgICAgICAgKiBydW50aW1lL0NvbW1v
blNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6OlNMT1dfUEFUSF9ERUNMKToKKyAgICAgICAg
KiBydW50aW1lL0dldHRlclNldHRlci5jcHA6CisgICAgICAgIChKU0M6OmNhbGxTZXR0ZXIpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5jcHA6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmRl
ZmluZU93blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c2V0TGVuZ3RoV2l0aEFy
cmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnBvcCk6CisgICAgICAgICogcnVu
dGltZS9KU0FycmF5QnVmZmVyLmNwcDoKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlcjo6cHV0
KToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlcjo6ZGVmaW5lT3duUHJvcGVydHkpOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNDSlNWYWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkpTVmFsdWU6OnB1
dFRvUHJpbWl0aXZlKToKKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6cHV0VG9QcmltaXRpdmVCeUlu
ZGV4KToKKyAgICAgICAgKiBydW50aW1lL0pTRGF0YVZpZXcuY3BwOgorICAgICAgICAoSlNDOjpK
U0RhdGFWaWV3OjpwdXQpOgorICAgICAgICAoSlNDOjpKU0RhdGFWaWV3OjpkZWZpbmVPd25Qcm9w
ZXJ0eSk6CisgICAgICAgICogcnVudGltZS9KU0Z1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6
SlNGdW5jdGlvbjo6cHV0KToKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6ZGVmaW5lT3duUHJv
cGVydHkpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaDoKKyAg
ICAgICAgKEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc6OnNldEluZGV4KToKKyAgICAgICAg
KiBydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oOgorICAgICAgICAoSlND
OjpKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6ZGVmaW5lT3duUHJvcGVydHkpOgor
ICAgICAgICAoSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6ZGVsZXRlUHJv
cGVydHkpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5
cGVGdW5jdGlvbnMuaDoKKyAgICAgICAgKEpTQzo6c3BlY2llc0NvbnN0cnVjdCk6CisgICAgICAg
IChKU0M6OmdlbmVyaWNUeXBlZEFycmF5Vmlld1ByaXZhdGVGdW5jU3ViYXJyYXlDcmVhdGUpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuY3BwOgorICAgICAgICAo
SlNDOjpKU01vZHVsZU5hbWVzcGFjZU9iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkpOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpvcmRpbmFyeVNldFNsb3cp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0SW5saW5lU2xvdyk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjpzZXRQcm90b3R5cGVXaXRoQ3ljbGVDaGVjayk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjpkZWZpbmVPd25JbmRleGVkUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJy
YXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6dmFsaWRhdGVBbmRBcHBseVByb3BlcnR5RGVzY3Jp
cHRvcik6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5oOgorICAgICAgICAqIHJ1bnRpbWUv
SlNPYmplY3RJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXRJbmxpbmUpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNQcm94eS5jcHA6CisgICAgICAgIChKU0M6OkpTUHJveHk6OnNl
dFByb3RvdHlwZSk6CisgICAgICAgICogcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0Lmg6Cisg
ICAgICAgIChKU0M6OnN5bWJvbFRhYmxlUHV0KToKKyAgICAgICAgKiBydW50aW1lL0xvb2t1cC5o
OgorICAgICAgICAoSlNDOjpwdXRFbnRyeSk6CisgICAgICAgICogcnVudGltZS9SZWdFeHBPYmpl
Y3QuY3BwOgorICAgICAgICAoSlNDOjpSZWdFeHBPYmplY3Q6OmRlZmluZU93blByb3BlcnR5KToK
KyAgICAgICAgKiBydW50aW1lL1JlZ0V4cE9iamVjdC5oOgorICAgICAgICAoSlNDOjpSZWdFeHBP
YmplY3Q6OnNldExhc3RJbmRleCk6CisgICAgICAgICogcnVudGltZS9SZWplY3QuaDoKKyAgICAg
ICAgKEpTQzo6cmVqZWN0KToKKyAgICAgICAgKiBydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAu
Y3BwOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpwdXRFbnRyeSk6CisgICAg
ICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OnB1dERpcmVjdCk6CisgICAgICAgIChKU0M6
OlNwYXJzZUFycmF5RW50cnk6OnB1dCk6CisgICAgICAgICogcnVudGltZS9TdHJpbmdPYmplY3Qu
Y3BwOgorICAgICAgICAoSlNDOjpTdHJpbmdPYmplY3Q6OnB1dCk6CisgICAgICAgIChKU0M6OlN0
cmluZ09iamVjdDo6cHV0QnlJbmRleCk6CisgICAgICAgICogcnVudGltZS9TeW1ib2xDb25zdHJ1
Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OnN5bWJvbENvbnN0cnVjdG9yS2V5Rm9yKToKKwogMjAx
Ni0xMC0xNSAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KIAogICAgICAgICBBc3Nl
cnRpb24gZmFpbGVkIHVuZGVyIG9wZXJhdGlvblRvTG93ZXJDYXNlIHdpdGggYSByb3BlIHdpdGgg
emVybyBsZW5ndGgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9u
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRp
b25zLmNwcAkocmV2aXNpb24gMjA3Mzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg2Niw3ICsxODY2LDcgQEAgc2l6
ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGVsZXRlQnlJZAogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgYm9vbCBjb3VsZERlbGV0ZSA9IGJhc2VPYmotPm1ldGhvZFRhYmxlKHZtKS0+ZGVs
ZXRlUHJvcGVydHkoYmFzZU9iaiwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbVVpZCgmdm0sIHVpZCkp
OwogICAgIGlmICghY291bGREZWxldGUgJiYgZXhlYy0+Y29kZUJsb2NrKCktPmlzU3RyaWN0TW9k
ZSgpKQotICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJV
bmFibGUgdG8gZGVsZXRlIHByb3BlcnR5LiIpKTsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhl
Yywgc2NvcGUsIEFTQ0lJTGl0ZXJhbChVbmFibGVUb0RlbGV0ZVByb3BlcnR5RXJyb3IpKTsKICAg
ICByZXR1cm4gY291bGREZWxldGU7CiB9CiAKQEAgLTE4OTcsNyArMTg5Nyw3IEBAIHNpemVfdCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRlbGV0ZUJ5VmEKICAgICAgICAgY291bGREZWxldGUgPSBi
YXNlT2JqLT5tZXRob2RUYWJsZSh2bSktPmRlbGV0ZVByb3BlcnR5KGJhc2VPYmosIGV4ZWMsIHBy
b3BlcnR5KTsKICAgICB9CiAgICAgaWYgKCFjb3VsZERlbGV0ZSAmJiBleGVjLT5jb2RlQmxvY2so
KS0+aXNTdHJpY3RNb2RlKCkpCi0gICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBB
U0NJSUxpdGVyYWwoIlVuYWJsZSB0byBkZWxldGUgcHJvcGVydHkuIikpOworICAgICAgICB0aHJv
d1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKFVuYWJsZVRvRGVsZXRlUHJvcGVy
dHlFcnJvcikpOwogICAgIHJldHVybiBjb3VsZERlbGV0ZTsKIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCShyZXZpc2lvbiAyMDcz
NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03ODQsNyArNzg0LDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xv
d19wYXRoX2RlbF9ieV9pZAogICAgIGJvb2wgY291bGREZWxldGUgPSBiYXNlT2JqZWN0LT5tZXRo
b2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShiYXNlT2JqZWN0LCBleGVjLCBjb2RlQmxvY2stPmlk
ZW50aWZpZXIocGNbM10udS5vcGVyYW5kKSk7CiAgICAgTExJTlRfQ0hFQ0tfRVhDRVBUSU9OKCk7
CiAgICAgaWYgKCFjb3VsZERlbGV0ZSAmJiBjb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpKQotICAg
ICAgICBMTElOVF9USFJPVyhjcmVhdGVUeXBlRXJyb3IoZXhlYywgIlVuYWJsZSB0byBkZWxldGUg
cHJvcGVydHkuIikpOworICAgICAgICBMTElOVF9USFJPVyhjcmVhdGVUeXBlRXJyb3IoZXhlYywg
VW5hYmxlVG9EZWxldGVQcm9wZXJ0eUVycm9yKSk7CiAgICAgTExJTlRfUkVUVVJOKGpzQm9vbGVh
bihjb3VsZERlbGV0ZSkpOwogfQogCkBAIC05MTUsNyArOTE1LDcgQEAgTExJTlRfU0xPV19QQVRI
X0RFQ0woc2xvd19wYXRoX2RlbF9ieV92YQogICAgIH0KICAgICAKICAgICBpZiAoIWNvdWxkRGVs
ZXRlICYmIGV4ZWMtPmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKSkKLSAgICAgICAgTExJTlRf
VEhST1coY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJVbmFibGUgdG8gZGVsZXRlIHByb3BlcnR5LiIp
KTsKKyAgICAgICAgTExJTlRfVEhST1coY3JlYXRlVHlwZUVycm9yKGV4ZWMsIFVuYWJsZVRvRGVs
ZXRlUHJvcGVydHlFcnJvcikpOwogICAgIAogICAgIExMSU5UX1JFVFVSTihqc0Jvb2xlYW4oY291
bGREZWxldGUpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5
UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9BcnJheVByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDIwNzM3NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjk5
LDEzICsyOTksMTMgQEAgdm9pZCBzaGlmdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aAog
ICAgICAgICAgICAgdGhpc09iai0+cHV0QnlJbmRleElubGluZShleGVjLCB0bywgdmFsdWUsIHRy
dWUpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAg
ICAgICAgfSBlbHNlIGlmICghdGhpc09iai0+bWV0aG9kVGFibGUodm0pLT5kZWxldGVQcm9wZXJ0
eUJ5SW5kZXgodGhpc09iaiwgZXhlYywgdG8pKSB7Ci0gICAgICAgICAgICB0aHJvd1R5cGVFcnJv
cihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJVbmFibGUgdG8gZGVsZXRlIHByb3BlcnR5LiIp
KTsKKyAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwo
VW5hYmxlVG9EZWxldGVQcm9wZXJ0eUVycm9yKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KICAgICB9CiAgICAgZm9yICh1bnNpZ25lZCBrID0gbGVuZ3RoOyBrID4gbGVuZ3RoIC0g
Y291bnQ7IC0taykgewogICAgICAgICBpZiAoIXRoaXNPYmotPm1ldGhvZFRhYmxlKHZtKS0+ZGVs
ZXRlUHJvcGVydHlCeUluZGV4KHRoaXNPYmosIGV4ZWMsIGsgLSAxKSkgewotICAgICAgICAgICAg
dGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiVW5hYmxlIHRvIGRlbGV0
ZSBwcm9wZXJ0eS4iKSk7CisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwg
QVNDSUlMaXRlcmFsKFVuYWJsZVRvRGVsZXRlUHJvcGVydHlFcnJvcikpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAgICAgfQpAQCAtMzQyLDcgKzM0Miw3IEBAIHZvaWQgdW5zaGlm
dChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiAKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgICAgICAgICB0aGlzT2JqLT5wdXRCeUluZGV4SW5s
aW5lKGV4ZWMsIHRvLCB2YWx1ZSwgdHJ1ZSk7CiAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXNPYmot
Pm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXNPYmosIGV4ZWMsIHRv
KSkgewotICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJh
bCgiVW5hYmxlIHRvIGRlbGV0ZSBwcm9wZXJ0eS4iKSk7CisgICAgICAgICAgICB0aHJvd1R5cGVF
cnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKFVuYWJsZVRvRGVsZXRlUHJvcGVydHlFcnJv
cikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CkBAIC02OTIsNyArNjkyLDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICByZXN1bHQgPSB0aGlzT2JqLT5n
ZXQoZXhlYywgbGVuZ3RoIC0gMSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOwogICAgICAgICBpZiAoIXRoaXNPYmotPm1ldGhvZFRhYmxlKHZt
KS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXNPYmosIGV4ZWMsIGxlbmd0aCAtIDEpKSB7Ci0g
ICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJVbmFi
bGUgdG8gZGVsZXRlIHByb3BlcnR5LiIpKTsKKyAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4
ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoVW5hYmxlVG9EZWxldGVQcm9wZXJ0eUVycm9yKSk7CiAg
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAg
ICB9CiAgICAgICAgIHB1dExlbmd0aChleGVjLCB2bSwgdGhpc09iaiwganNOdW1iZXIobGVuZ3Ro
IC0gMSkpOwpAQCAtODA1LDcgKzgwNSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
YXJyYXlQcm90b0YKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOwogICAgICAgICB9IGVsc2UgaWYgKCF0aGlzT2JqZWN0LT5tZXRob2RUYWJs
ZSh2bSktPmRlbGV0ZVByb3BlcnR5QnlJbmRleCh0aGlzT2JqZWN0LCBleGVjLCBsb3dlcikpIHsK
ICAgICAgICAgICAgIGlmICghc2NvcGUuZXhjZXB0aW9uKCkpCi0gICAgICAgICAgICAgICAgdGhy
b3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiVW5hYmxlIHRvIGRlbGV0ZSBw
cm9wZXJ0eS4iKSk7CisgICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUs
IEFTQ0lJTGl0ZXJhbChVbmFibGVUb0RlbGV0ZVByb3BlcnR5RXJyb3IpKTsKICAgICAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICAgICAgfQogCkBAIC04MTQs
NyArODE0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAg
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAg
ICAgICAgIH0gZWxzZSBpZiAoIXRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJv
cGVydHlCeUluZGV4KHRoaXNPYmplY3QsIGV4ZWMsIHVwcGVyKSkgewogICAgICAgICAgICAgaWYg
KCFzY29wZS5leGNlcHRpb24oKSkKLSAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVj
LCBzY29wZSwgQVNDSUlMaXRlcmFsKCJVbmFibGUgdG8gZGVsZXRlIHByb3BlcnR5LiIpKTsKKyAg
ICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKFVu
YWJsZVRvRGVsZXRlUHJvcGVydHlFcnJvcikpOwogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShKU1ZhbHVlKCkpOwogICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCShyZXZpc2lvbiAy
MDczNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MzEsMTYgKzYzMSwxNiBAQCBTTE9XX1BBVEhfREVDTChz
bG93X3BhdGhfZGVsX2J5X3ZhbCkKICAgICAKICAgICB1aW50MzJfdCBpOwogICAgIGlmIChzdWJz
Y3JpcHQuZ2V0VUludDMyKGkpKQotICAgICAgICBjb3VsZERlbGV0ZSA9IGJhc2VPYmplY3QtPm1l
dGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5QnlJbmRleChiYXNlT2JqZWN0LCBleGVjLCBpKTsK
KyAgICAgICAgY291bGREZWxldGUgPSBiYXNlT2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmRlbGV0
ZVByb3BlcnR5QnlJbmRleChiYXNlT2JqZWN0LCBleGVjLCBpKTsKICAgICBlbHNlIHsKICAgICAg
ICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CiAgICAgICAgIGF1dG8gcHJvcGVydHkgPSBzdWJzY3JpcHQu
dG9Qcm9wZXJ0eUtleShleGVjKTsKICAgICAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7Ci0gICAgICAg
IGNvdWxkRGVsZXRlID0gYmFzZU9iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHko
YmFzZU9iamVjdCwgZXhlYywgcHJvcGVydHkpOworICAgICAgICBjb3VsZERlbGV0ZSA9IGJhc2VP
YmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVydHkoYmFzZU9iamVjdCwgZXhlYywg
cHJvcGVydHkpOwogICAgIH0KICAgICAKICAgICBpZiAoIWNvdWxkRGVsZXRlICYmIGV4ZWMtPmNv
ZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKSkKLSAgICAgICAgVEhST1coY3JlYXRlVHlwZUVycm9y
KGV4ZWMsICJVbmFibGUgdG8gZGVsZXRlIHByb3BlcnR5LiIpKTsKKyAgICAgICAgVEhST1coY3Jl
YXRlVHlwZUVycm9yKGV4ZWMsIFVuYWJsZVRvRGVsZXRlUHJvcGVydHlFcnJvcikpOwogICAgIAog
ICAgIFJFVFVSTihqc0Jvb2xlYW4oY291bGREZWxldGUpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmNwcAkocmV2aXNpb24gMjA3Mzc2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTMsMTEgKzkzLDggQEAgYm9vbCBjYWxsU2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZQogCiAgICAgR2V0dGVyU2V0dGVyKiBnZXR0ZXJTZXR0ZXJPYmogPSBqc0Nh
c3Q8R2V0dGVyU2V0dGVyKj4oZ2V0dGVyU2V0dGVyKTsKIAotICAgIGlmIChnZXR0ZXJTZXR0ZXJP
YmotPmlzU2V0dGVyTnVsbCgpKSB7Ci0gICAgICAgIGlmIChlY21hTW9kZSA9PSBTdHJpY3RNb2Rl
KQotICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIFJlYWRvbmx5UHJvcGVy
dHlXcml0ZUVycm9yKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICBpZiAoZ2V0
dGVyU2V0dGVyT2JqLT5pc1NldHRlck51bGwoKSkKKyAgICAgICAgcmV0dXJuIHJlamVjdChleGVj
LCBzY29wZSwgZWNtYU1vZGUgPT0gU3RyaWN0TW9kZSwgQVNDSUlMaXRlcmFsKFJlYWRvbmx5UHJv
cGVydHlXcml0ZUVycm9yKSk7CiAKICAgICBKU09iamVjdCogc2V0dGVyID0gZ2V0dGVyU2V0dGVy
T2JqLT5zZXR0ZXIoKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
cnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
cnJheS5jcHAJKHJldmlzaW9uIDIwNzM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjksMjIgKzEyOSwyMiBAQCBib29s
IEpTQXJyYXk6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0CiAgICAgSlNBcnJheSogYXJyYXkg
PSBqc0Nhc3Q8SlNBcnJheSo+KG9iamVjdCk7CiAKICAgICAvLyAzLiBJZiBQIGlzICJsZW5ndGgi
LCB0aGVuCi0gICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVu
Z3RoKSB7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgp
IHsKICAgICAgICAgLy8gQWxsIHBhdGhzIHRocm91Z2ggbGVuZ3RoIGRlZmluaXRpb24gY2FsbCB0
aGUgZGVmYXVsdCBbW0RlZmluZU93blByb3BlcnR5XV0sIGhlbmNlOgogICAgICAgICAvLyBmcm9t
IEVTNS4xIDguMTIuOSA3LmEuCiAgICAgICAgIGlmIChkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZVBy
ZXNlbnQoKSAmJiBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSgpKQotICAgICAgICAgICAgcmV0dXJu
IHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIGNvbmZp
Z3VyYWJsZSBhdHRyaWJ1dGUgb2YgdW5jb25maWd1cmFibGUgcHJvcGVydHkuIik7CisgICAgICAg
ICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNjb3BlLCB0aHJvd0V4Y2VwdGlvbiwgQVNDSUlMaXRl
cmFsKFVuY29uZmlndXJhYmxlUHJvcGVydHlDaGFuZ2VDb25maWd1cmFiaWxpdHlFcnJvcikpOwog
ICAgICAgICAvLyBmcm9tIEVTNS4xIDguMTIuOSA3LmIuCiAgICAgICAgIGlmIChkZXNjcmlwdG9y
LmVudW1lcmFibGVQcmVzZW50KCkgJiYgZGVzY3JpcHRvci5lbnVtZXJhYmxlKCkpCi0gICAgICAg
ICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBj
aGFuZ2UgZW51bWVyYWJsZSBhdHRyaWJ1dGUgb2YgdW5jb25maWd1cmFibGUgcHJvcGVydHkuIik7
CisgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNjb3BlLCB0aHJvd0V4Y2VwdGlvbiwg
QVNDSUlMaXRlcmFsKFVuY29uZmlndXJhYmxlUHJvcGVydHlDaGFuZ2VFbnVtZXJhYmlsaXR5RXJy
b3IpKTsKIAogICAgICAgICAvLyBhLiBJZiB0aGUgW1tWYWx1ZV1dIGZpZWxkIG9mIERlc2MgaXMg
YWJzZW50LCB0aGVuCiAgICAgICAgIC8vIGEuaS4gUmV0dXJuIHRoZSByZXN1bHQgb2YgY2FsbGlu
ZyB0aGUgZGVmYXVsdCBbW0RlZmluZU93blByb3BlcnR5XV0gaW50ZXJuYWwgbWV0aG9kICg4LjEy
LjkpIG9uIEEgcGFzc2luZyAibGVuZ3RoIiwgRGVzYywgYW5kIFRocm93IGFzIGFyZ3VtZW50cy4K
ICAgICAgICAgaWYgKGRlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkKLSAgICAgICAg
ICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sIFVuY29uZmlndXJhYmxlUHJv
cGVydHlDaGFuZ2VBY2Nlc3NNZWNoYW5pc21FcnJvcik7CisgICAgICAgICAgICByZXR1cm4gcmVq
ZWN0KGV4ZWMsIHNjb3BlLCB0aHJvd0V4Y2VwdGlvbiwgQVNDSUlMaXRlcmFsKFVuY29uZmlndXJh
YmxlUHJvcGVydHlDaGFuZ2VBY2Nlc3NNZWNoYW5pc21FcnJvcikpOwogICAgICAgICAvLyBmcm9t
IEVTNS4xIDguMTIuOSAxMC5hLgogICAgICAgICBpZiAoIWFycmF5LT5pc0xlbmd0aFdyaXRhYmxl
KCkgJiYgZGVzY3JpcHRvci53cml0YWJsZVByZXNlbnQoKSAmJiBkZXNjcmlwdG9yLndyaXRhYmxl
KCkpCi0gICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0
ZW1wdGluZyB0byBjaGFuZ2Ugd3JpdGFibGUgYXR0cmlidXRlIG9mIHVuY29uZmlndXJhYmxlIHBy
b3BlcnR5LiIpOworICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBzY29wZSwgdGhyb3dF
eGNlcHRpb24sIEFTQ0lJTGl0ZXJhbChVbmNvbmZpZ3VyYWJsZVByb3BlcnR5Q2hhbmdlV3JpdGFi
aWxpdHlFcnJvcikpOwogICAgICAgICAvLyBUaGlzIGRlc2NyaXB0b3IgaXMgZWl0aGVyIGp1c3Qg
bWFraW5nIGxlbmd0aCByZWFkLW9ubHksIG9yIGNoYW5naW5nIG5vdGhpbmchCiAgICAgICAgIGlm
ICghZGVzY3JpcHRvci52YWx1ZSgpKSB7CiAgICAgICAgICAgICBpZiAoZGVzY3JpcHRvci53cml0
YWJsZVByZXNlbnQoKSkKQEAgLTE3NCw3ICsxNzQsNyBAQCBib29sIEpTQXJyYXk6OmRlZmluZU93
blByb3BlcnR5KEpTT2JqZWN0CiAgICAgICAgIC8vIGYuaS4gUmV0dXJuIHRoZSByZXN1bHQgb2Yg
Y2FsbGluZyB0aGUgZGVmYXVsdCBbW0RlZmluZU93blByb3BlcnR5XV0gaW50ZXJuYWwgbWV0aG9k
ICg4LjEyLjkpIG9uIEEgcGFzc2luZyAibGVuZ3RoIiwgbmV3TGVuRGVzYywgYW5kIFRocm93IGFz
IGFyZ3VtZW50cy4KICAgICAgICAgLy8gZy4gUmVqZWN0IGlmIG9sZExlbkRlc2MuW1tXcml0YWJs
ZV1dIGlzIGZhbHNlLgogICAgICAgICBpZiAoIWFycmF5LT5pc0xlbmd0aFdyaXRhYmxlKCkpCi0g
ICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGlu
ZyB0byBjaGFuZ2UgdmFsdWUgb2YgYSByZWFkb25seSBwcm9wZXJ0eS4iKTsKKyAgICAgICAgICAg
IHJldHVybiByZWplY3QoZXhlYywgc2NvcGUsIHRocm93RXhjZXB0aW9uLCBBU0NJSUxpdGVyYWwo
UmVhZG9ubHlQcm9wZXJ0eUNoYW5nZUVycm9yKSk7CiAgICAgICAgIAogICAgICAgICAvLyBoLiBJ
ZiBuZXdMZW5EZXNjLltbV3JpdGFibGVdXSBpcyBhYnNlbnQgb3IgaGFzIHRoZSB2YWx1ZSB0cnVl
LCBsZXQgbmV3V3JpdGFibGUgYmUgdHJ1ZS4KICAgICAgICAgLy8gaS4gRWxzZSwKQEAgLTIxNCw3
ICsyMTQsNyBAQCBib29sIEpTQXJyYXk6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0CiAgICAg
ICAgIHVpbnQzMl90IGluZGV4ID0gb3B0aW9uYWxJbmRleC52YWx1ZSgpOwogICAgICAgICAvLyBG
SVhNRTogTm90aGluZyBwcmV2ZW50cyB0aGlzIGZyb20gYmVpbmcgY2FsbGVkIG9uIGEgUnVudGlt
ZUFycmF5LCBhbmQgdGhlIGxlbmd0aCBmdW5jdGlvbiB3aWxsIGFsd2F5cyByZXR1cm4gMCBpbiB0
aGF0IGNhc2UuCiAgICAgICAgIGlmIChpbmRleCA+PSBhcnJheS0+bGVuZ3RoKCkgJiYgIWFycmF5
LT5pc0xlbmd0aFdyaXRhYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRo
cm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBkZWZpbmUgbnVtZXJpYyBwcm9wZXJ0eSBvbiBh
cnJheSB3aXRoIG5vbi13cml0YWJsZSBsZW5ndGggcHJvcGVydHkuIik7CisgICAgICAgICAgICBy
ZXR1cm4gcmVqZWN0KGV4ZWMsIHNjb3BlLCB0aHJvd0V4Y2VwdGlvbiwgQVNDSUlMaXRlcmFsKCJB
dHRlbXB0aW5nIHRvIGRlZmluZSBudW1lcmljIHByb3BlcnR5IG9uIGFycmF5IHdpdGggbm9uLXdy
aXRhYmxlIGxlbmd0aCBwcm9wZXJ0eS4iKSk7CiAgICAgICAgIC8vIGMuIExldCBzdWNjZWVkZWQg
YmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBkZWZhdWx0IFtbRGVmaW5lT3duUHJvcGVydHld
XSBpbnRlcm5hbCBtZXRob2QgKDguMTIuOSkgb24gQSBwYXNzaW5nIFAsIERlc2MsIGFuZCBmYWxz
ZSBhcyBhcmd1bWVudHMuCiAgICAgICAgIC8vIGQuIFJlamVjdCBpZiBzdWNjZWVkZWQgaXMgZmFs
c2UuCiAgICAgICAgIC8vIGUuIElmIGluZGV4ID49IG9sZExlbgpAQCAtMzk4LDYgKzM5OCw5IEBA
IGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2UoVk0mIHYKIAogYm9vbCBKU0FycmF5
OjpzZXRMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgbmV3
TGVuZ3RoLCBib29sIHRocm93RXhjZXB0aW9uLCBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UpCiB7Cisg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisKICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKICAg
ICAKICAgICAvLyBJZiB0aGUgbGVuZ3RoIGlzIHJlYWQgb25seSB0aGVuIHdlIGVudGVyIHNwYXJz
ZSBtb2RlLCBzbyBzaG91bGQgZW50ZXIgdGhlIGZvbGxvd2luZyAnaWYnLgpAQCAtNDA2LDcgKzQw
OSw3IEBAIGJvb2wgSlNBcnJheTo6c2V0TGVuZ3RoV2l0aEFycmF5U3RvcmFnZSgKICAgICBpZiAo
U3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VNYXAuZ2V0KCkpIHsK
ICAgICAgICAgLy8gRmFpbCBpZiB0aGUgbGVuZ3RoIGlzIG5vdCB3cml0YWJsZS4KICAgICAgICAg
aWYgKG1hcC0+bGVuZ3RoSXNSZWFkT25seSgpKQotICAgICAgICAgICAgcmV0dXJuIHJlamVjdChl
eGVjLCB0aHJvd0V4Y2VwdGlvbiwgUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOworICAgICAg
ICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBzY29wZSwgdGhyb3dFeGNlcHRpb24sIEFTQ0lJTGl0
ZXJhbChSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcikpOwogCiAgICAgICAgIGlmIChuZXdMZW5n
dGggPCBsZW5ndGgpIHsKICAgICAgICAgICAgIC8vIENvcHkgYW55IGtleXMgd2UgbWlnaHQgYmUg
aW50ZXJlc3RlZCBpbiBpbnRvIGEgdmVjdG9yLgpAQCAtNDMxLDcgKzQzNCw3IEBAIGJvb2wgSlNB
cnJheTo6c2V0TGVuZ3RoV2l0aEFycmF5U3RvcmFnZSgKICAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKGl0ICE9IG1hcC0+bm90Rm91bmQoKSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpdC0+
dmFsdWUuYXR0cmlidXRlcyAmIERvbnREZWxldGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
IHN0b3JhZ2UtPnNldExlbmd0aChpbmRleCArIDEpOwotICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIlVuYWJsZSB0byBkZWxldGUgcHJv
cGVydHkuIik7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNj
b3BlLCB0aHJvd0V4Y2VwdGlvbiwgQVNDSUlMaXRlcmFsKFVuYWJsZVRvRGVsZXRlUHJvcGVydHlF
cnJvcikpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIG1hcC0+
cmVtb3ZlKGl0KTsKICAgICAgICAgICAgICAgICB9CkBAIC02MjUsNyArNjI4LDcgQEAgSlNWYWx1
ZSBKU0FycmF5Ojpwb3AoRXhlY1N0YXRlKiBleGVjKQogICAgICAgICB1bnNpZ25lZCBsZW5ndGgg
PSBzdG9yYWdlLT5sZW5ndGgoKTsKICAgICAgICAgaWYgKCFsZW5ndGgpIHsKICAgICAgICAgICAg
IGlmICghaXNMZW5ndGhXcml0YWJsZSgpKQotICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9y
KGV4ZWMsIHNjb3BlLCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CisgICAgICAgICAgICAg
ICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbChSZWFkb25seVByb3Bl
cnR5V3JpdGVFcnJvcikpOwogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAg
ICAgIH0KIApAQCAtNjU2LDcgKzY1OSw3IEBAIEpTVmFsdWUgSlNBcnJheTo6cG9wKEV4ZWNTdGF0
ZSogZXhlYykKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogICAg
IC8vIENhbGwgdGhlIFtbRGVsZXRlXV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBhcmd1bWVu
dHMgaW5keCBhbmQgdHJ1ZS4KICAgICBpZiAoIWRlbGV0ZVByb3BlcnR5QnlJbmRleCh0aGlzLCBl
eGVjLCBpbmRleCkpIHsKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJ
TGl0ZXJhbCgiVW5hYmxlIHRvIGRlbGV0ZSBwcm9wZXJ0eS4iKSk7CisgICAgICAgIHRocm93VHlw
ZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoVW5hYmxlVG9EZWxldGVQcm9wZXJ0eUVy
cm9yKSk7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KICAgICAvLyBDYWxs
IHRoZSBbW1B1dF1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnRzICJsZW5ndGgi
LCBpbmR4LCBhbmQgdHJ1ZS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXlCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQXJyYXlCdWZmZXIuY3BwCShyZXZpc2lvbiAyMDczNzYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTAsMTMg
KzkwLDE1IEBAIGJvb2wgSlNBcnJheUJ1ZmZlcjo6cHV0KAogICAgIEpTQ2VsbCogY2VsbCwgRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLAog
ICAgIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU0FycmF5QnVm
ZmVyKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlCdWZmZXIqPihjZWxsKTsKIAogICAgIGlm
IChVTkxJS0VMWShpc1RoaXNWYWx1ZUFsdGVyZWQoc2xvdCwgdGhpc09iamVjdCkpKQogICAgICAg
ICByZXR1cm4gb3JkaW5hcnlTZXRTbG93KGV4ZWMsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwg
dmFsdWUsIHNsb3QudGhpc1ZhbHVlKCksIHNsb3QuaXNTdHJpY3RNb2RlKCkpOwogICAgIAotICAg
IGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgpCi0g
ICAgICAgIHJldHVybiByZWplY3QoZXhlYywgc2xvdC5pc1N0cmljdE1vZGUoKSwgIkF0dGVtcHRp
bmcgdG8gd3JpdGUgdG8gYSByZWFkLW9ubHkgYXJyYXkgYnVmZmVyIHByb3BlcnR5LiIpOworICAg
IGlmIChwcm9wZXJ0eU5hbWUgPT0gdm0ucHJvcGVydHlOYW1lcy0+Ynl0ZUxlbmd0aCkKKyAgICAg
ICAgcmV0dXJuIHJlamVjdChleGVjLCBzY29wZSwgc2xvdC5pc1N0cmljdE1vZGUoKSwgQVNDSUlM
aXRlcmFsKCJBdHRlbXB0aW5nIHRvIHdyaXRlIHRvIGEgcmVhZC1vbmx5IGFycmF5IGJ1ZmZlciBw
cm9wZXJ0eS4iKSk7CiAgICAgCiAgICAgcmV0dXJuIEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBleGVj
LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKIH0KQEAgLTEwNSwxMCArMTA3LDEyIEBAIGJv
b2wgSlNBcnJheUJ1ZmZlcjo6ZGVmaW5lT3duUHJvcGVydHkoCiAgICAgSlNPYmplY3QqIG9iamVj
dCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLAogICAgIGNvbnN0
IFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgYm9vbCBzaG91bGRUaHJvdykKIHsKKyAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICBKU0FycmF5QnVmZmVyKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlC
dWZmZXIqPihvYmplY3QpOwogICAgIAotICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJv
cGVydHlOYW1lcygpLmJ5dGVMZW5ndGgpCi0gICAgICAgIHJldHVybiByZWplY3QoZXhlYywgc2hv
dWxkVGhyb3csICJBdHRlbXB0aW5nIHRvIGRlZmluZSByZWFkLW9ubHkgYXJyYXkgYnVmZmVyIHBy
b3BlcnR5LiIpOworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gdm0ucHJvcGVydHlOYW1lcy0+Ynl0
ZUxlbmd0aCkKKyAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBzY29wZSwgc2hvdWxkVGhyb3cs
IEFTQ0lJTGl0ZXJhbCgiQXR0ZW1wdGluZyB0byBkZWZpbmUgcmVhZC1vbmx5IGFycmF5IGJ1ZmZl
ciBwcm9wZXJ0eS4iKSk7CiAgICAgCiAgICAgcmV0dXJuIEJhc2U6OmRlZmluZU93blByb3BlcnR5
KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgc2hvdWxkVGhyb3cp
OwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5j
cHAJKHJldmlzaW9uIDIwNzM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
Q0pTVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTgsMTQgKzE1OCwxMSBAQCBib29sIEpT
VmFsdWU6OnB1dFRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSogCiAgICAgaWYgKFVOTElLRUxZKCFvYmop
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgSlNWYWx1ZSBwcm90b3R5cGU7Ci0gICAgaWYg
KHByb3BlcnR5TmFtZSAhPSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudW5kZXJzY29yZVByb3RvKSB7
CisgICAgaWYgKHByb3BlcnR5TmFtZSAhPSB2bS5wcm9wZXJ0eU5hbWVzLT51bmRlcnNjb3JlUHJv
dG8pIHsKICAgICAgICAgZm9yICg7ICFvYmotPnN0cnVjdHVyZSgpLT5oYXNSZWFkT25seU9yR2V0
dGVyU2V0dGVyUHJvcGVydGllc0V4Y2x1ZGluZ1Byb3RvKCk7IG9iaiA9IGFzT2JqZWN0KHByb3Rv
dHlwZSkpIHsKICAgICAgICAgICAgIHByb3RvdHlwZSA9IG9iai0+Z2V0UHJvdG90eXBlRGlyZWN0
KCk7Ci0gICAgICAgICAgICBpZiAocHJvdG90eXBlLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCi0gICAgICAgICAgICAgICAgICAgIHRocm93VHlw
ZUVycm9yKGV4ZWMsIHNjb3BlLCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHBy
b3RvdHlwZS5pc051bGwoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNj
b3BlLCBzbG90LmlzU3RyaWN0TW9kZSgpLCBBU0NJSUxpdGVyYWwoUmVhZG9ubHlQcm9wZXJ0eVdy
aXRlRXJyb3IpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTczLDExICsxNzAsOCBAQCBib29s
IEpTVmFsdWU6OnB1dFRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSogCiAgICAgICAgIHVuc2lnbmVkIGF0
dHJpYnV0ZXM7CiAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IG9iai0+c3RydWN0dXJl
KCktPmdldCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKICAgICAgICAgaWYgKG9mZnNl
dCAhPSBpbnZhbGlkT2Zmc2V0KSB7Ci0gICAgICAgICAgICBpZiAoYXR0cmlidXRlcyAmIFJlYWRP
bmx5KSB7Ci0gICAgICAgICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCi0gICAgICAg
ICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBSZWFkb25seVByb3BlcnR5
V3JpdGVFcnJvcik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBSZWFkT25seSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNjb3BlLCBzbG90LmlzU3RyaWN0TW9kZSgpLCBBU0NJSUxp
dGVyYWwoUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpKTsKIAogICAgICAgICAgICAgSlNWYWx1
ZSBncyA9IG9iai0+Z2V0RGlyZWN0KG9mZnNldCk7CiAgICAgICAgICAgICBpZiAoZ3MuaXNHZXR0
ZXJTZXR0ZXIoKSkKQEAgLTE5Nyw5ICsxOTEsNyBAQCBib29sIEpTVmFsdWU6OnB1dFRvUHJpbWl0
aXZlKEV4ZWNTdGF0ZSogCiAgICAgICAgICAgICBicmVhazsKICAgICB9CiAgICAgCi0gICAgaWYg
KHNsb3QuaXNTdHJpY3RNb2RlKCkpCi0gICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3Bl
LCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJl
dHVybiByZWplY3QoZXhlYywgc2NvcGUsIHNsb3QuaXNTdHJpY3RNb2RlKCksIEFTQ0lJTGl0ZXJh
bChSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcikpOwogfQogCiBib29sIEpTVmFsdWU6OnB1dFRv
UHJpbWl0aXZlQnlJbmRleChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwg
SlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKQEAgLTIyMSw5ICsyMTMsNyBAQCBib29s
IEpTVmFsdWU6OnB1dFRvUHJpbWl0aXZlQnlJbmRleChFeGVjCiAgICAgaWYgKHByb3RvdHlwZS0+
YXR0ZW1wdFRvSW50ZXJjZXB0UHV0QnlJbmRleE9uSG9sZUZvclByb3RvdHlwZShleGVjLCAqdGhp
cywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2hvdWxkVGhyb3csIHB1dFJlc3VsdCkpCiAgICAgICAg
IHJldHVybiBwdXRSZXN1bHQ7CiAgICAgCi0gICAgaWYgKHNob3VsZFRocm93KQotICAgICAgICB0
aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwot
ICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNjb3BlLCBzaG91bGRU
aHJvdywgQVNDSUlMaXRlcmFsKFJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKSk7CiB9CiAKIHZv
aWQgSlNWYWx1ZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlldy5jcHAJKHJldmlzaW9uIDIwNzM3NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXcuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTcsMTQgKzExNywxNiBAQCBib29sIEpTRGF0YVZpZXc6OnB1dCgKICAgICBK
U0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
SlNWYWx1ZSB2YWx1ZSwKICAgICBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CisgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgSlNEYXRhVmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0RhdGFWaWV3Kj4oY2VsbCk7
CiAKICAgICBpZiAoVU5MSUtFTFkoaXNUaGlzVmFsdWVBbHRlcmVkKHNsb3QsIHRoaXNPYmplY3Qp
KSkKICAgICAgICAgcmV0dXJuIG9yZGluYXJ5U2V0U2xvdyhleGVjLCB0aGlzT2JqZWN0LCBwcm9w
ZXJ0eU5hbWUsIHZhbHVlLCBzbG90LnRoaXNWYWx1ZSgpLCBzbG90LmlzU3RyaWN0TW9kZSgpKTsK
IAotICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5n
dGgKLSAgICAgICAgfHwgcHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRl
T2Zmc2V0KQotICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNsb3QuaXNTdHJpY3RNb2RlKCks
ICJBdHRlbXB0aW5nIHRvIHdyaXRlIHRvIHJlYWQtb25seSB0eXBlZCBhcnJheSBwcm9wZXJ0eS4i
KTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IHZtLnByb3BlcnR5TmFtZXMtPmJ5dGVMZW5ndGgK
KyAgICAgICAgfHwgcHJvcGVydHlOYW1lID09IHZtLnByb3BlcnR5TmFtZXMtPmJ5dGVPZmZzZXQp
CisgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgc2NvcGUsIHNsb3QuaXNTdHJpY3RNb2RlKCks
IEFTQ0lJTGl0ZXJhbCgiQXR0ZW1wdGluZyB0byB3cml0ZSB0byByZWFkLW9ubHkgdHlwZWQgYXJy
YXkgcHJvcGVydHkuIikpOwogCiAgICAgcmV0dXJuIEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBleGVj
LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKIH0KQEAgLTEzMywxMCArMTM1LDEyIEBAIGJv
b2wgSlNEYXRhVmlldzo6ZGVmaW5lT3duUHJvcGVydHkoCiAgICAgSlNPYmplY3QqIG9iamVjdCwg
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLAogICAgIGNvbnN0IFBy
b3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgYm9vbCBzaG91bGRUaHJvdykKIHsKKyAgICBW
TSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICBKU0RhdGFWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRGF0YVZpZXcqPihv
YmplY3QpOwotICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5
dGVMZW5ndGgKLSAgICAgICAgfHwgcHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5ieXRlT2Zmc2V0KQotICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNob3VsZFRocm93LCAi
QXR0ZW1wdGluZyB0byBkZWZpbmUgcmVhZC1vbmx5IHR5cGVkIGFycmF5IHByb3BlcnR5LiIpOwor
ICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gdm0ucHJvcGVydHlOYW1lcy0+Ynl0ZUxlbmd0aAorICAg
ICAgICB8fCBwcm9wZXJ0eU5hbWUgPT0gdm0ucHJvcGVydHlOYW1lcy0+Ynl0ZU9mZnNldCkKKyAg
ICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBzY29wZSwgc2hvdWxkVGhyb3csIEFTQ0lJTGl0ZXJh
bCgiQXR0ZW1wdGluZyB0byBkZWZpbmUgcmVhZC1vbmx5IHR5cGVkIGFycmF5IHByb3BlcnR5LiIp
KTsKIAogICAgIHJldHVybiBCYXNlOjpkZWZpbmVPd25Qcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVj
LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHNob3VsZFRocm93KTsKIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyMDcz
NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDQ2LDE4ICs0NDYsMTUgQEAgYm9vbCBKU0Z1bmN0aW9uOjpwdXQoSlND
ZWxsKiBjZWxsLCBFeGVjUwogICAgICAgICByZXR1cm4gQmFzZTo6cHV0KHRoaXNPYmplY3QsIGV4
ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIGRvbnRDYWNoZSk7CiAgICAgfQogCi0gICAgaWYgKCh0
aGlzT2JqZWN0LT5qc0V4ZWN1dGFibGUoKS0+aXNTdHJpY3RNb2RlKCkgfHwgdGhpc09iamVjdC0+
anNFeGVjdXRhYmxlKCktPmlzRVM2RnVuY3Rpb24oKSkgJiYgKHByb3BlcnR5TmFtZSA9PSBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkuYXJndW1lbnRzIHx8IHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkuY2FsbGVyKSkgeworICAgIGlmICgodGhpc09iamVjdC0+anNFeGVjdXRhYmxl
KCktPmlzU3RyaWN0TW9kZSgpIHx8IHRoaXNPYmplY3QtPmpzRXhlY3V0YWJsZSgpLT5pc0VTNkZ1
bmN0aW9uKCkpICYmIChwcm9wZXJ0eU5hbWUgPT0gdm0ucHJvcGVydHlOYW1lcy0+YXJndW1lbnRz
IHx8IHByb3BlcnR5TmFtZSA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZXIpKSB7CiAgICAgICAg
IC8vIFRoaXMgd2lsbCB0cmlnZ2VyIHRoZSBwcm9wZXJ0eSB0byBiZSByZWlmaWVkLCBpZiB0aGlz
IGlzIG5vdCBhbHJlYWR5IHRoZSBjYXNlIQogICAgICAgICBib29sIG9rYXkgPSB0aGlzT2JqZWN0
LT5oYXNQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICBBU1NFUlRfVU5VU0VE
KG9rYXksIG9rYXkpOwogICAgICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgICAgIHJldHVybiBC
YXNlOjpwdXQodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CiAg
ICAgfQotICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gdm0ucHJvcGVydHlOYW1lcy0+YXJndW1lbnRz
IHx8IHByb3BlcnR5TmFtZSA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZXIpIHsKLSAgICAgICAg
aWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCi0gICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVj
LCBzY29wZSwgUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQorICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gdm0ucHJvcGVydHlOYW1lcy0+YXJn
dW1lbnRzIHx8IHByb3BlcnR5TmFtZSA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZXIpCisgICAg
ICAgIHJldHVybiByZWplY3QoZXhlYywgc2NvcGUsIHNsb3QuaXNTdHJpY3RNb2RlKCksIEFTQ0lJ
TGl0ZXJhbChSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcikpOwogICAgIHRoaXNPYmplY3QtPnJl
aWZ5TGF6eVByb3BlcnR5SWZOZWVkZWQodm0sIGV4ZWMsIHByb3BlcnR5TmFtZSk7CiAgICAgc2Nv
cGUucmVsZWFzZSgpOwogICAgIHJldHVybiBCYXNlOjpwdXQodGhpc09iamVjdCwgZXhlYywgcHJv
cGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CkBAIC01MTAsNyArNTA3LDcgQEAgYm9vbCBKU0Z1bmN0
aW9uOjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iagogICAgIH0KIAogICAgIGJvb2wgdmFsdWVDaGVj
azsKLSAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5hcmd1bWVu
dHMpIHsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IHZtLnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50
cykgewogICAgICAgICBpZiAodGhpc09iamVjdC0+anNFeGVjdXRhYmxlKCktPmlzQ2xhc3MoKSkg
ewogICAgICAgICAgICAgdGhpc09iamVjdC0+cmVpZnlMYXp5UHJvcGVydHlJZk5lZWRlZCh2bSwg
ZXhlYywgcHJvcGVydHlOYW1lKTsKICAgICAgICAgICAgIHJldHVybiBCYXNlOjpkZWZpbmVPd25Q
cm9wZXJ0eShvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgdGhyb3dFeGNl
cHRpb24pOwpAQCAtNTIyLDcgKzUxOSw3IEBAIGJvb2wgSlNGdW5jdGlvbjo6ZGVmaW5lT3duUHJv
cGVydHkoSlNPYmoKICAgICAgICAgICAgIHJldHVybiBCYXNlOjpkZWZpbmVPd25Qcm9wZXJ0eShv
YmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgdGhyb3dFeGNlcHRpb24pOwog
ICAgICAgICB9CiAgICAgICAgIHZhbHVlQ2hlY2sgPSAhZGVzY3JpcHRvci52YWx1ZSgpIHx8IHNh
bWVWYWx1ZShleGVjLCBkZXNjcmlwdG9yLnZhbHVlKCksIHJldHJpZXZlQXJndW1lbnRzKGV4ZWMs
IHRoaXNPYmplY3QpKTsKLSAgICB9IGVsc2UgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkuY2FsbGVyKSB7CisgICAgfSBlbHNlIGlmIChwcm9wZXJ0eU5hbWUgPT0gdm0u
cHJvcGVydHlOYW1lcy0+Y2FsbGVyKSB7CiAgICAgICAgIGlmICh0aGlzT2JqZWN0LT5qc0V4ZWN1
dGFibGUoKS0+aXNDbGFzcygpKSB7CiAgICAgICAgICAgICB0aGlzT2JqZWN0LT5yZWlmeUxhenlQ
cm9wZXJ0eUlmTmVlZGVkKHZtLCBleGVjLCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICAgICAgcmV0
dXJuIEJhc2U6OmRlZmluZU93blByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBk
ZXNjcmlwdG9yLCB0aHJvd0V4Y2VwdGlvbik7CkBAIC01MzksMzEgKzUzNiwxNiBAQCBib29sIEpT
RnVuY3Rpb246OmRlZmluZU93blByb3BlcnR5KEpTT2JqCiAgICAgICAgIHJldHVybiBCYXNlOjpk
ZWZpbmVPd25Qcm9wZXJ0eShvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwg
dGhyb3dFeGNlcHRpb24pOwogICAgIH0KICAgICAgCi0gICAgaWYgKGRlc2NyaXB0b3IuY29uZmln
dXJhYmxlUHJlc2VudCgpICYmIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlKCkpIHsKLSAgICAgICAg
aWYgKHRocm93RXhjZXB0aW9uKQotICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2Nv
cGUsIEFTQ0lJTGl0ZXJhbCgiQXR0ZW1wdGluZyB0byBjaGFuZ2UgY29uZmlndXJhYmxlIGF0dHJp
YnV0ZSBvZiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKSk7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0gICAgaWYgKGRlc2NyaXB0b3IuZW51bWVyYWJsZVByZXNlbnQoKSAmJiBkZXNj
cmlwdG9yLmVudW1lcmFibGUoKSkgewotICAgICAgICBpZiAodGhyb3dFeGNlcHRpb24pCi0gICAg
ICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJBdHRlbXB0
aW5nIHRvIGNoYW5nZSBlbnVtZXJhYmxlIGF0dHJpYnV0ZSBvZiB1bmNvbmZpZ3VyYWJsZSBwcm9w
ZXJ0eS4iKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKGRlc2NyaXB0
b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkgewotICAgICAgICBpZiAodGhyb3dFeGNlcHRpb24p
Ci0gICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKFVu
Y29uZmlndXJhYmxlUHJvcGVydHlDaGFuZ2VBY2Nlc3NNZWNoYW5pc21FcnJvcikpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmIChkZXNjcmlwdG9yLndyaXRhYmxlUHJlc2Vu
dCgpICYmIGRlc2NyaXB0b3Iud3JpdGFibGUoKSkgewotICAgICAgICBpZiAodGhyb3dFeGNlcHRp
b24pCi0gICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFs
KCJBdHRlbXB0aW5nIHRvIGNoYW5nZSB3cml0YWJsZSBhdHRyaWJ1dGUgb2YgdW5jb25maWd1cmFi
bGUgcHJvcGVydHkuIikpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmICgh
dmFsdWVDaGVjaykgewotICAgICAgICBpZiAodGhyb3dFeGNlcHRpb24pCi0gICAgICAgICAgICB0
aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJBdHRlbXB0aW5nIHRvIGNo
YW5nZSB2YWx1ZSBvZiBhIHJlYWRvbmx5IHByb3BlcnR5LiIpKTsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KKyAgICBpZiAoZGVzY3JpcHRvci5jb25maWd1cmFibGVQcmVzZW50KCkgJiYg
ZGVzY3JpcHRvci5jb25maWd1cmFibGUoKSkKKyAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBz
Y29wZSwgdGhyb3dFeGNlcHRpb24sIEFTQ0lJTGl0ZXJhbChVbmNvbmZpZ3VyYWJsZVByb3BlcnR5
Q2hhbmdlQ29uZmlndXJhYmlsaXR5RXJyb3IpKTsKKyAgICBpZiAoZGVzY3JpcHRvci5lbnVtZXJh
YmxlUHJlc2VudCgpICYmIGRlc2NyaXB0b3IuZW51bWVyYWJsZSgpKQorICAgICAgICByZXR1cm4g
cmVqZWN0KGV4ZWMsIHNjb3BlLCB0aHJvd0V4Y2VwdGlvbiwgQVNDSUlMaXRlcmFsKFVuY29uZmln
dXJhYmxlUHJvcGVydHlDaGFuZ2VFbnVtZXJhYmlsaXR5RXJyb3IpKTsKKyAgICBpZiAoZGVzY3Jp
cHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKQorICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMs
IHNjb3BlLCB0aHJvd0V4Y2VwdGlvbiwgQVNDSUlMaXRlcmFsKFVuY29uZmlndXJhYmxlUHJvcGVy
dHlDaGFuZ2VBY2Nlc3NNZWNoYW5pc21FcnJvcikpOworICAgIGlmIChkZXNjcmlwdG9yLndyaXRh
YmxlUHJlc2VudCgpICYmIGRlc2NyaXB0b3Iud3JpdGFibGUoKSkKKyAgICAgICAgcmV0dXJuIHJl
amVjdChleGVjLCBzY29wZSwgdGhyb3dFeGNlcHRpb24sIEFTQ0lJTGl0ZXJhbChVbmNvbmZpZ3Vy
YWJsZVByb3BlcnR5Q2hhbmdlV3JpdGFiaWxpdHlFcnJvcikpOworICAgIGlmICghdmFsdWVDaGVj
aykKKyAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBzY29wZSwgdGhyb3dFeGNlcHRpb24sIEFT
Q0lJTGl0ZXJhbChSZWFkb25seVByb3BlcnR5Q2hhbmdlRXJyb3IpKTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCShyZXZpc2lvbiAyMDczNzYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCSh3b3JraW5n
IGNvcHkpCkBAIC04OCw3ICs4OCw3IEBAIGVudW0gY2xhc3MgQ29weVR5cGUgewogICAgIFVub2Jz
ZXJ2YWJsZSwKIH07CiAKLXN0YXRpYyBjb25zdCBjaGFyKiB0eXBlZEFycmF5QnVmZmVySGFzQmVl
bkRldGFjaGVkRXJyb3JNZXNzYWdlID0gIlVuZGVybHlpbmcgQXJyYXlCdWZmZXIgaGFzIGJlZW4g
ZGV0YWNoZWQgZnJvbSB0aGUgdmlldyI7CitzdGF0aWMgY29uc3QgY2hhciogY29uc3QgdHlwZWRB
cnJheUJ1ZmZlckhhc0JlZW5EZXRhY2hlZEVycm9yTWVzc2FnZSA9ICJVbmRlcmx5aW5nIEFycmF5
QnVmZmVyIGhhcyBiZWVuIGRldGFjaGVkIGZyb20gdGhlIHZpZXciOwogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBBZGFwdG9yPgogY2xhc3MgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcgOiBwdWJsaWMgSlNB
cnJheUJ1ZmZlclZpZXcgewpAQCAtMTc2LDcgKzE3Niw3IEBAIHB1YmxpYzoKICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogCiAgICAgICAgIGlmIChpc05ldXRlcmVk
KCkpIHsKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCB0eXBlZEFycmF5
QnVmZmVySGFzQmVlbkRldGFjaGVkRXJyb3JNZXNzYWdlKTsKKyAgICAgICAgICAgIHRocm93VHlw
ZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwodHlwZWRBcnJheUJ1ZmZlckhhc0JlZW5E
ZXRhY2hlZEVycm9yTWVzc2FnZSkpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCShyZXZpc2lvbiAyMDczNzYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmll
d0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzYwLDE3ICszNjAsMTkgQEAgYm9vbCBKU0dl
bmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6ZAogICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4
ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwKICAgICBjb25zdCBQcm9w
ZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgc2hvdWxkVGhyb3cpCiB7CisgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNH
ZW5lcmljVHlwZWRBcnJheVZpZXcqPihvYmplY3QpOwogCiAgICAgaWYgKHBhcnNlSW5kZXgocHJv
cGVydHlOYW1lKSkgewogICAgICAgICBpZiAoZGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRv
cigpKQotICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBzaG91bGRUaHJvdywgIkF0dGVt
cHRpbmcgdG8gc3RvcmUgYWNjZXNzb3IgaW5kZXhlZCBwcm9wZXJ0eSBvbiBhIHR5cGVkIGFycmF5
LiIpOworICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBzY29wZSwgc2hvdWxkVGhyb3cs
IEFTQ0lJTGl0ZXJhbCgiQXR0ZW1wdGluZyB0byBzdG9yZSBhY2Nlc3NvciBpbmRleGVkIHByb3Bl
cnR5IG9uIGEgdHlwZWQgYXJyYXkuIikpOwogCiAgICAgICAgIGlmIChkZXNjcmlwdG9yLmNvbmZp
Z3VyYWJsZSgpKQotICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBzaG91bGRUaHJvdywg
IkF0dGVtcHRpbmcgdG8gY29uZmlndXJlIG5vbi1jb25maWd1cmFibGUgcHJvcGVydHkuIik7Cisg
ICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNjb3BlLCBzaG91bGRUaHJvdywgQVNDSUlM
aXRlcmFsKCJBdHRlbXB0aW5nIHRvIGNvbmZpZ3VyZSBub24tY29uZmlndXJhYmxlIHByb3BlcnR5
LiIpKTsKIAogICAgICAgICBpZiAoIWRlc2NyaXB0b3IuZW51bWVyYWJsZSgpIHx8ICFkZXNjcmlw
dG9yLndyaXRhYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNob3VsZFRo
cm93LCAiQXR0ZW1wdGluZyB0byBzdG9yZSBub24tZW51bWVyYWJsZSBvciBub24td3JpdGFibGUg
aW5kZXhlZCBwcm9wZXJ0eSBvbiBhIHR5cGVkIGFycmF5LiIpOworICAgICAgICAgICAgcmV0dXJu
IHJlamVjdChleGVjLCBzY29wZSwgc2hvdWxkVGhyb3csIEFTQ0lJTGl0ZXJhbCgiQXR0ZW1wdGlu
ZyB0byBzdG9yZSBub24tZW51bWVyYWJsZSBvciBub24td3JpdGFibGUgaW5kZXhlZCBwcm9wZXJ0
eSBvbiBhIHR5cGVkIGFycmF5LiIpKTsKIAogICAgICAgICBpZiAoZGVzY3JpcHRvci52YWx1ZSgp
KSB7CiAgICAgICAgICAgICBQdXRQcm9wZXJ0eVNsb3QgdW51c2VkKEpTVmFsdWUodGhpc09iamVj
dCksIHNob3VsZFRocm93KTsKQEAgLTM4NiwxMCArMzg4LDEyIEBAIHRlbXBsYXRlPHR5cGVuYW1l
IEFkYXB0b3I+CiBib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpkZWxldGVQ
cm9wZXJ0eSgKICAgICBKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
dyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KGNlbGwpOwog
CiAgICAgaWYgKHRoaXNPYmplY3QtPmlzTmV1dGVyZWQoKSkKLSAgICAgICAgcmV0dXJuIHJlamVj
dChleGVjLCB0cnVlLCB0eXBlZEFycmF5QnVmZmVySGFzQmVlbkRldGFjaGVkRXJyb3JNZXNzYWdl
KTsKKyAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBzY29wZSwgdHJ1ZSwgQVNDSUlMaXRlcmFs
KHR5cGVkQXJyYXlCdWZmZXJIYXNCZWVuRGV0YWNoZWRFcnJvck1lc3NhZ2UpKTsKIAogICAgIGlm
IChwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJv
dG90eXBlRnVuY3Rpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVGdW5jdGlvbnMuaAkocmV2aXNp
b24gMjA3Mzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXdQcm90b3R5cGVGdW5jdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNyAr
NDksNyBAQCBpbmxpbmUgSlNBcnJheUJ1ZmZlclZpZXcqIHNwZWNpZXNDb25zdHJ1CiAgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAKLSAgICBKU1ZhbHVlIGNvbnN0cnVjdG9yID0gZXhlbXBsYXItPmdldChleGVjLCBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IpOworICAgIEpTVmFsdWUgY29uc3RydWN0b3Ig
PSBleGVtcGxhci0+Z2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPmNvbnN0cnVjdG9yKTsKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKIAogICAgIGlmIChjb25zdHJ1
Y3Rvci5pc1VuZGVmaW5lZCgpKQpAQCAtNTksNyArNTksNyBAQCBpbmxpbmUgSlNBcnJheUJ1ZmZl
clZpZXcqIHNwZWNpZXNDb25zdHJ1CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAot
ICAgIEpTVmFsdWUgc3BlY2llcyA9IGNvbnN0cnVjdG9yLmdldChleGVjLCBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkuc3BlY2llc1N5bWJvbCk7CisgICAgSlNWYWx1ZSBzcGVjaWVzID0gY29uc3RydWN0
b3IuZ2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPnNwZWNpZXNTeW1ib2wpOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogCiAgICAgaWYgKHNwZWNpZXMuaXNVbmRl
ZmluZWRPck51bGwoKSkKQEAgLTcyLDcgKzcyLDcgQEAgaW5saW5lIEpTQXJyYXlCdWZmZXJWaWV3
KiBzcGVjaWVzQ29uc3RydQogICAgICAgICBpZiAoIXZpZXctPmlzTmV1dGVyZWQoKSkKICAgICAg
ICAgICAgIHJldHVybiB2aWV3OwogCi0gICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3Bl
LCB0eXBlZEFycmF5QnVmZmVySGFzQmVlbkRldGFjaGVkRXJyb3JNZXNzYWdlKTsKKyAgICAgICAg
dGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCh0eXBlZEFycmF5QnVmZmVy
SGFzQmVlbkRldGFjaGVkRXJyb3JNZXNzYWdlKSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgIH0KIApAQCAtNTUyLDcgKzU1Miw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Z2VuZXJpY1R5cGUKICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KHJl
c3VsdCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIAotICAgIHRo
cm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCAic3BlY2llcyBjb25zdHJ1Y3RvciBkaWQgbm90IHJl
dHVybiBhIFR5cGVkQXJyYXkgVmlldyIpOworICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3Bl
LCBBU0NJSUxpdGVyYWwoInNwZWNpZXMgY29uc3RydWN0b3IgZGlkIG5vdCByZXR1cm4gYSBUeXBl
ZEFycmF5IFZpZXciKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwog
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFj
ZU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuY3BwCShyZXZpc2lvbiAyMDczNzYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIwNCw3ICsyMDQsNyBAQCBib29sIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0
OjpkZWZpbmVPd25QCiAKICAgICAvLyBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcv
ZWNtYS0yNjIvNi4wLyNzZWMtbW9kdWxlLW5hbWVzcGFjZS1leG90aWMtb2JqZWN0cy1kZWZpbmVv
d25wcm9wZXJ0eS1wLWRlc2MKICAgICBpZiAoc2hvdWxkVGhyb3cpCi0gICAgICAgIHRocm93VHlw
ZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHBy
b3BlcnR5IG9uIG9iamVjdCB0aGF0IGlzIG5vdCBleHRlbnNpYmxlLiIpKTsKKyAgICAgICAgdGhy
b3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbChOb25FeHRlbnNpYmxlT2JqZWN0
UHJvcGVydHlEZWZpbmVFcnJvcikpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMjA3Mzc2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02MSw4ICs2MSwxNCBAQCBzdGF0aWMgdW5zaWduZWQgbGFzdEFycmF5U2l6ZSA9
IDA7CiBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoSlNPYmplY3QpOwog
U1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKEpTRmluYWxPYmplY3QpOwog
Ci1jb25zdCBjaGFyKiBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvciA9ICJBdHRlbXB0ZWQgdG8g
YXNzaWduIHRvIHJlYWRvbmx5IHByb3BlcnR5LiI7Ci1jb25zdCBjaGFyKiBVbmNvbmZpZ3VyYWJs
ZVByb3BlcnR5Q2hhbmdlQWNjZXNzTWVjaGFuaXNtRXJyb3IgPSAiQXR0ZW1wdGluZyB0byBjaGFu
Z2UgYWNjZXNzIG1lY2hhbmlzbSBmb3IgYW4gdW5jb25maWd1cmFibGUgcHJvcGVydHkuIjsKK2Nv
bnN0IGNoYXIqIGNvbnN0IE5vbkV4dGVuc2libGVPYmplY3RQcm9wZXJ0eURlZmluZUVycm9yID0g
IkF0dGVtcHRpbmcgdG8gZGVmaW5lIHByb3BlcnR5IG9uIG9iamVjdCB0aGF0IGlzIG5vdCBleHRl
bnNpYmxlLiI7Citjb25zdCBjaGFyKiBjb25zdCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvciA9
ICJBdHRlbXB0ZWQgdG8gYXNzaWduIHRvIHJlYWRvbmx5IHByb3BlcnR5LiI7Citjb25zdCBjaGFy
KiBjb25zdCBSZWFkb25seVByb3BlcnR5Q2hhbmdlRXJyb3IgPSAiQXR0ZW1wdGluZyB0byBjaGFu
Z2UgdmFsdWUgb2YgYSByZWFkb25seSBwcm9wZXJ0eS4iOworY29uc3QgY2hhciogY29uc3QgVW5h
YmxlVG9EZWxldGVQcm9wZXJ0eUVycm9yID0gIlVuYWJsZSB0byBkZWxldGUgcHJvcGVydHkuIjsK
K2NvbnN0IGNoYXIqIGNvbnN0IFVuY29uZmlndXJhYmxlUHJvcGVydHlDaGFuZ2VBY2Nlc3NNZWNo
YW5pc21FcnJvciA9ICJBdHRlbXB0aW5nIHRvIGNoYW5nZSBhY2Nlc3MgbWVjaGFuaXNtIGZvciBh
biB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iOworY29uc3QgY2hhciogY29uc3QgVW5jb25maWd1
cmFibGVQcm9wZXJ0eUNoYW5nZUNvbmZpZ3VyYWJpbGl0eUVycm9yID0gIkF0dGVtcHRpbmcgdG8g
Y2hhbmdlIGNvbmZpZ3VyYWJsZSBhdHRyaWJ1dGUgb2YgdW5jb25maWd1cmFibGUgcHJvcGVydHku
IjsKK2NvbnN0IGNoYXIqIGNvbnN0IFVuY29uZmlndXJhYmxlUHJvcGVydHlDaGFuZ2VFbnVtZXJh
YmlsaXR5RXJyb3IgPSAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgZW51bWVyYWJsZSBhdHRyaWJ1dGUg
b2YgdW5jb25maWd1cmFibGUgcHJvcGVydHkuIjsKK2NvbnN0IGNoYXIqIGNvbnN0IFVuY29uZmln
dXJhYmxlUHJvcGVydHlDaGFuZ2VXcml0YWJpbGl0eUVycm9yID0gIkF0dGVtcHRpbmcgdG8gY2hh
bmdlIHdyaXRhYmxlIGF0dHJpYnV0ZSBvZiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iOwogCiBj
b25zdCBDbGFzc0luZm8gSlNPYmplY3Q6OnNfaW5mbyA9IHsgIk9iamVjdCIsIDAsIDAsIENSRUFU
RV9NRVRIT0RfVEFCTEUoSlNPYmplY3QpIH07CiAKQEAgLTM4OSwxMSArMzk1LDExIEBAIGJvb2wg
b3JkaW5hcnlTZXRTbG93KEV4ZWNTdGF0ZSogZXhlYywgSlMKICAgICBpZiAob3duRGVzY3JpcHRv
ci5pc0RhdGFEZXNjcmlwdG9yKCkpIHsKICAgICAgICAgLy8gOS4xLjkuMS00LWEgSWYgb3duRGVz
Yy5bW1dyaXRhYmxlXV0gaXMgZmFsc2UsIHJldHVybiBmYWxzZS4KICAgICAgICAgaWYgKCFvd25E
ZXNjcmlwdG9yLndyaXRhYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNo
b3VsZFRocm93LCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CisgICAgICAgICAgICByZXR1
cm4gcmVqZWN0KGV4ZWMsIHNjb3BlLCBzaG91bGRUaHJvdywgQVNDSUlMaXRlcmFsKFJlYWRvbmx5
UHJvcGVydHlXcml0ZUVycm9yKSk7CiAKICAgICAgICAgLy8gOS4xLjkuMS00LWIgSWYgVHlwZShS
ZWNlaXZlcikgaXMgbm90IE9iamVjdCwgcmV0dXJuIGZhbHNlLgogICAgICAgICBpZiAoIXJlY2Vp
dmVyLmlzT2JqZWN0KCkpCi0gICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNob3VsZFRo
cm93LCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CisgICAgICAgICAgICByZXR1cm4gcmVq
ZWN0KGV4ZWMsIHNjb3BlLCBzaG91bGRUaHJvdywgQVNDSUlMaXRlcmFsKFJlYWRvbmx5UHJvcGVy
dHlXcml0ZUVycm9yKSk7CiAKICAgICAgICAgLy8gSW4gT3JkaW5hcnlTZXQsIHRoZSByZWNlaXZl
ciBtYXkgbm90IGJlIHRoZSBzYW1lIHRvIHRoZSBvYmplY3QuCiAgICAgICAgIC8vIFNvLCB3ZSBw
ZXJmb3JtIFtbR2V0T3duUHJvcGVydHldXSBvbnRvIHRoZSByZWNlaXZlciB3aGlsZSB3ZSBhbHJl
YWR5IHBlcmZvcm0gW1tHZXRPd25Qcm9wZXJ0eV1dIG9udG8gdGhlIG9iamVjdC4KQEAgLTQwOCwx
MSArNDE0LDExIEBAIGJvb2wgb3JkaW5hcnlTZXRTbG93KEV4ZWNTdGF0ZSogZXhlYywgSlMKICAg
ICAgICAgaWYgKGV4aXN0aW5nRGVzY3JpcHRvckZvdW5kKSB7CiAgICAgICAgICAgICAvLyA5LjEu
OS4xLTQtZC1pIElmIElzQWNjZXNzb3JEZXNjcmlwdG9yKGV4aXN0aW5nRGVzY3JpcHRvcikgaXMg
dHJ1ZSwgcmV0dXJuIGZhbHNlLgogICAgICAgICAgICAgaWYgKGV4aXN0aW5nRGVzY3JpcHRvci5p
c0FjY2Vzc29yRGVzY3JpcHRvcigpKQotICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhl
Yywgc2hvdWxkVGhyb3csIFJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNjb3BlLCBzaG91bGRUaHJvdywgQVNDSUlMaXRlcmFs
KFJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKSk7CiAKICAgICAgICAgICAgIC8vIDkuMS45LjEt
NC1kLWlpIElmIGV4aXN0aW5nRGVzY3JpcHRvci5bW1dyaXRhYmxlXV0gaXMgZmFsc2UsIHJldHVy
biBmYWxzZS4KICAgICAgICAgICAgIGlmICghZXhpc3RpbmdEZXNjcmlwdG9yLndyaXRhYmxlKCkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBzaG91bGRUaHJvdywgUmVhZG9u
bHlQcm9wZXJ0eVdyaXRlRXJyb3IpOworICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhl
Yywgc2NvcGUsIHNob3VsZFRocm93LCBBU0NJSUxpdGVyYWwoUmVhZG9ubHlQcm9wZXJ0eVdyaXRl
RXJyb3IpKTsKIAogICAgICAgICAgICAgLy8gOS4xLjkuMS00LWQtaWlpIExldCB2YWx1ZURlc2Mg
YmUgdGhlIFByb3BlcnR5RGVzY3JpcHRvcntbW1ZhbHVlXV06IFZ9LgogICAgICAgICAgICAgUHJv
cGVydHlEZXNjcmlwdG9yIHZhbHVlRGVzY3JpcHRvcjsKQEAgLTQzNCw3ICs0NDAsNyBAQCBib29s
IG9yZGluYXJ5U2V0U2xvdyhFeGVjU3RhdGUqIGV4ZWMsIEpTCiAgICAgLy8gOS4xLjkuMS03IElm
IHNldHRlciBpcyB1bmRlZmluZWQsIHJldHVybiBmYWxzZS4KICAgICBKU1ZhbHVlIHNldHRlciA9
IG93bkRlc2NyaXB0b3Iuc2V0dGVyKCk7CiAgICAgaWYgKCFzZXR0ZXIuaXNPYmplY3QoKSkKLSAg
ICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBzaG91bGRUaHJvdywgUmVhZG9ubHlQcm9wZXJ0eVdy
aXRlRXJyb3IpOworICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNjb3BlLCBzaG91bGRUaHJv
dywgQVNDSUlMaXRlcmFsKFJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKSk7CiAKICAgICAvLyA5
LjEuOS4xLTggUGVyZm9ybSA/IENhbGwoc2V0dGVyLCBSZWNlaXZlciwgPDwgViA+PikuCiAgICAg
SlNPYmplY3QqIHNldHRlck9iamVjdCA9IGFzT2JqZWN0KHNldHRlcik7CkBAIC00NDIsNyArNDQ4
LDcgQEAgYm9vbCBvcmRpbmFyeVNldFNsb3coRXhlY1N0YXRlKiBleGVjLCBKUwogICAgIGFyZ3Mu
YXBwZW5kKHZhbHVlKTsKIAogICAgIENhbGxEYXRhIGNhbGxEYXRhOwotICAgIENhbGxUeXBlIGNh
bGxUeXBlID0gc2V0dGVyT2JqZWN0LT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+Z2V0Q2FsbERh
dGEoc2V0dGVyT2JqZWN0LCBjYWxsRGF0YSk7CisgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBzZXR0
ZXJPYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0Q2FsbERhdGEoc2V0dGVyT2JqZWN0LCBjYWxs
RGF0YSk7CiAgICAgY2FsbChleGVjLCBzZXR0ZXJPYmplY3QsIGNhbGxUeXBlLCBjYWxsRGF0YSwg
cmVjZWl2ZXIsIGFyZ3MpOwogCiAgICAgLy8gOS4xLjkuMS05IFJldHVybiB0cnVlLgpAQCAtNDYw
LDYgKzQ2Niw3IEBAIGJvb2wgSlNPYmplY3Q6OnB1dElubGluZVNsb3coRXhlY1N0YXRlKiAKICAg
ICBBU1NFUlQoIWlzVGhpc1ZhbHVlQWx0ZXJlZChzbG90LCB0aGlzKSk7CiAKICAgICBWTSYgdm0g
PSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
IAogICAgIEpTT2JqZWN0KiBvYmogPSB0aGlzOwogICAgIGZvciAoOzspIHsKQEAgLTQ2Nyw4ICs0
NzQsOCBAQCBib29sIEpTT2JqZWN0OjpwdXRJbmxpbmVTbG93KEV4ZWNTdGF0ZSogCiAgICAgICAg
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IG9iai0+c3RydWN0dXJlKHZtKS0+Z2V0KHZtLCBwcm9w
ZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwogICAgICAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZzZXQp
KSB7CiAgICAgICAgICAgICBpZiAoYXR0cmlidXRlcyAmIFJlYWRPbmx5KSB7Ci0gICAgICAgICAg
ICAgICAgQVNTRVJUKHN0cnVjdHVyZSh2bSktPnByb3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0U3Rv
cmVUbyhleGVjLT52bSgpLCBwcm9wZXJ0eU5hbWUpIHx8IG9iaiA9PSB0aGlzKTsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNsb3QuaXNTdHJpY3RNb2RlKCksIFJlYWRvbmx5
UHJvcGVydHlXcml0ZUVycm9yKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoc3RydWN0dXJlKHZt
KS0+cHJvdG90eXBlQ2hhaW5NYXlJbnRlcmNlcHRTdG9yZVRvKHZtLCBwcm9wZXJ0eU5hbWUpIHx8
IG9iaiA9PSB0aGlzKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNjb3Bl
LCBzbG90LmlzU3RyaWN0TW9kZSgpLCBBU0NJSUxpdGVyYWwoUmVhZG9ubHlQcm9wZXJ0eVdyaXRl
RXJyb3IpKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgSlNWYWx1ZSBncyA9IG9iai0+
Z2V0RGlyZWN0KG9mZnNldCk7CkBAIC01MTEsOSArNTE4LDkgQEAgYm9vbCBKU09iamVjdDo6cHV0
SW5saW5lU2xvdyhFeGVjU3RhdGUqIAogICAgICAgICBvYmogPSBhc09iamVjdChwcm90b3R5cGUp
OwogICAgIH0KIAotICAgIEFTU0VSVCghc3RydWN0dXJlKHZtKS0+cHJvdG90eXBlQ2hhaW5NYXlJ
bnRlcmNlcHRTdG9yZVRvKGV4ZWMtPnZtKCksIHByb3BlcnR5TmFtZSkgfHwgb2JqID09IHRoaXMp
OworICAgIEFTU0VSVCghc3RydWN0dXJlKHZtKS0+cHJvdG90eXBlQ2hhaW5NYXlJbnRlcmNlcHRT
dG9yZVRvKHZtLCBwcm9wZXJ0eU5hbWUpIHx8IG9iaiA9PSB0aGlzKTsKICAgICBpZiAoIXB1dERp
cmVjdEludGVybmFsPFB1dE1vZGVQdXQ+KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCAwLCBzbG90
KSkKLSAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBzbG90LmlzU3RyaWN0TW9kZSgpLCBSZWFk
b25seVByb3BlcnR5V3JpdGVFcnJvcik7CisgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgc2Nv
cGUsIHNsb3QuaXNTdHJpY3RNb2RlKCksIEFTQ0lJTGl0ZXJhbChSZWFkb25seVByb3BlcnR5V3Jp
dGVFcnJvcikpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xMjk1LDE5ICsxMzAyLDEzIEBA
IGJvb2wgSlNPYmplY3Q6OnNldFByb3RvdHlwZVdpdGhDeWNsZUNoZWMKICAgICBib29sIGlzRXh0
ZW5zaWJsZSA9IHRoaXMtPmlzRXh0ZW5zaWJsZShleGVjKTsKICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBmYWxzZSk7CiAKLSAgICBpZiAoIWlzRXh0ZW5zaWJsZSkgewotICAgICAgICBp
ZiAoc2hvdWxkVGhyb3dJZkNhbnRTZXQpCi0gICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVj
LCBzY29wZSwgUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQorICAgIGlmICghaXNFeHRlbnNpYmxlKQorICAgICAgICByZXR1cm4gcmVqZWN0
KGV4ZWMsIHNjb3BlLCBzaG91bGRUaHJvd0lmQ2FudFNldCwgQVNDSUlMaXRlcmFsKFJlYWRvbmx5
UHJvcGVydHlXcml0ZUVycm9yKSk7CiAKICAgICBKU1ZhbHVlIG5leHRQcm90b3R5cGUgPSBwcm90
b3R5cGU7CiAgICAgd2hpbGUgKG5leHRQcm90b3R5cGUgJiYgbmV4dFByb3RvdHlwZS5pc09iamVj
dCgpKSB7Ci0gICAgICAgIGlmIChuZXh0UHJvdG90eXBlID09IHRoaXMpIHsKLSAgICAgICAgICAg
IGlmIChzaG91bGRUaHJvd0lmQ2FudFNldCkKLSAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJv
cihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJjeWNsaWMgX19wcm90b19fIHZhbHVlIikpOwot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9CisgICAgICAgIGlmIChuZXh0UHJv
dG90eXBlID09IHRoaXMpCisgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNjb3BlLCBz
aG91bGRUaHJvd0lmQ2FudFNldCwgQVNDSUlMaXRlcmFsKCJjeWNsaWMgX19wcm90b19fIHZhbHVl
IikpOwogICAgICAgICAvLyBGSVhNRTogVGhlIHNwZWNpZmljYXRpb24gY3VycmVudGx5IHNheXMg
d2Ugc2hvdWxkIGNoZWNrIGlmIHRoZSBbW0dldFByb3RvdHlwZU9mXV0gaW50ZXJuYWwgbWV0aG9k
IG9mIG5leHRQcm90b3R5cGUKICAgICAgICAgLy8gaXMgbm90IHRoZSBvcmRpbmFyeSBvYmplY3Qg
aW50ZXJuYWwgbWV0aG9kLiBIb3dldmVyLCB3ZSBjdXJyZW50bHkgcmVzdHJpY3QgdGhpcyB0byBQ
cm94eSBvYmplY3RzIGFzIGl0IHdvdWxkIGFsbG93CiAgICAgICAgIC8vIGZvciBjeWNsZXMgd2l0
aCBjZXJ0YWluIEhUTUwgb2JqZWN0cyAoV2luZG93UHJveHksIExvY2F0aW9uKSBvdGhlcndpc2Uu
CkBAIC0xOTg3LDYgKzE5ODgsOSBAQCBib29sIEpTT2JqZWN0OjpwdXRJbmRleGVkRGVzY3JpcHRv
cihFeGVjCiAvLyBEZWZpbmVkIGluIEVTNS4xIDguMTIuOQogYm9vbCBKU09iamVjdDo6ZGVmaW5l
T3duSW5kZXhlZFByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW5kZXgsIGNvbnN0
IFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgYm9vbCB0aHJvd0V4Y2VwdGlvbikKIHsK
KyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKwogICAgIEFTU0VSVChpbmRleCA8PSBNQVhfQVJSQVlfSU5ERVgpOwogCiAg
ICAgaWYgKCFpblNwYXJzZUluZGV4aW5nTW9kZSgpKSB7CkBAIC0xOTk5LDExICsyMDAzLDExIEBA
IGJvb2wgSlNPYmplY3Q6OmRlZmluZU93bkluZGV4ZWRQcm9wZXJ0eSgKICAgICAgICAgICAgIHJl
dHVybiBwdXREaXJlY3RJbmRleChleGVjLCBpbmRleCwgZGVzY3JpcHRvci52YWx1ZSgpLCAwLCB0
aHJvd0V4Y2VwdGlvbiA/IFB1dERpcmVjdEluZGV4U2hvdWxkVGhyb3cgOiBQdXREaXJlY3RJbmRl
eFNob3VsZE5vdFRocm93KTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgZW5zdXJlQXJy
YXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKGV4ZWMtPnZtKCkp
OworICAgICAgICBlbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRl
eGluZ01vZGUodm0pOwogICAgIH0KIAogICAgIGlmIChkZXNjcmlwdG9yLmF0dHJpYnV0ZXMoKSAm
IChSZWFkT25seSB8IEFjY2Vzc29yKSkKLSAgICAgICAgbm90aWZ5UHJlc2VuY2VPZkluZGV4ZWRB
Y2Nlc3NvcnMoZXhlYy0+dm0oKSk7CisgICAgICAgIG5vdGlmeVByZXNlbmNlT2ZJbmRleGVkQWNj
ZXNzb3JzKHZtKTsKIAogICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fYnV0dGVyZmx5
LmdldCgpLT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXAuZ2V0KCk7CiAgICAgUkVMRUFTRV9B
U1NFUlQobWFwKTsKQEAgLTIwMTgsNyArMjAyMiw3IEBAIGJvb2wgSlNPYmplY3Q6OmRlZmluZU93
bkluZGV4ZWRQcm9wZXJ0eSgKICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpIHsKICAgICAgICAg
aWYgKCFpc1N0cnVjdHVyZUV4dGVuc2libGUoKSkgewogICAgICAgICAgICAgbWFwLT5yZW1vdmUo
cmVzdWx0Lml0ZXJhdG9yKTsKLSAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dF
eGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGRlZmluZSBwcm9wZXJ0eSBvbiBvYmplY3QgdGhhdCBp
cyBub3QgZXh0ZW5zaWJsZS4iKTsKKyAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgc2Nv
cGUsIHRocm93RXhjZXB0aW9uLCBBU0NJSUxpdGVyYWwoTm9uRXh0ZW5zaWJsZU9iamVjdFByb3Bl
cnR5RGVmaW5lRXJyb3IpKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIDQuYS4gSWYgSXNHZW5l
cmljRGVzY3JpcHRvcihEZXNjKSBvciBJc0RhdGFEZXNjcmlwdG9yKERlc2MpIGlzIHRydWUsIHRo
ZW4gY3JlYXRlIGFuIG93biBkYXRhIHByb3BlcnR5CkBAIC0yMDU0LDEwICsyMDU4LDEwIEBAIGJv
b2wgSlNPYmplY3Q6OmRlZmluZU93bkluZGV4ZWRQcm9wZXJ0eSgKICAgICBpZiAoIWN1cnJlbnQu
Y29uZmlndXJhYmxlKCkpIHsKICAgICAgICAgLy8gNy5hLiBSZWplY3QsIGlmIHRoZSBbW0NvbmZp
Z3VyYWJsZV1dIGZpZWxkIG9mIERlc2MgaXMgdHJ1ZS4KICAgICAgICAgaWYgKGRlc2NyaXB0b3Iu
Y29uZmlndXJhYmxlUHJlc2VudCgpICYmIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlKCkpCi0gICAg
ICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0
byBjaGFuZ2UgY29uZmlndXJhYmxlIGF0dHJpYnV0ZSBvZiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0
eS4iKTsKKyAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgc2NvcGUsIHRocm93RXhjZXB0
aW9uLCBBU0NJSUxpdGVyYWwoVW5jb25maWd1cmFibGVQcm9wZXJ0eUNoYW5nZUNvbmZpZ3VyYWJp
bGl0eUVycm9yKSk7CiAgICAgICAgIC8vIDcuYi4gUmVqZWN0LCBpZiB0aGUgW1tFbnVtZXJhYmxl
XV0gZmllbGQgb2YgRGVzYyBpcyBwcmVzZW50IGFuZCB0aGUgW1tFbnVtZXJhYmxlXV0gZmllbGRz
IG9mIGN1cnJlbnQgYW5kIERlc2MgYXJlIHRoZSBCb29sZWFuIG5lZ2F0aW9uIG9mIGVhY2ggb3Ro
ZXIuCiAgICAgICAgIGlmIChkZXNjcmlwdG9yLmVudW1lcmFibGVQcmVzZW50KCkgJiYgY3VycmVu
dC5lbnVtZXJhYmxlKCkgIT0gZGVzY3JpcHRvci5lbnVtZXJhYmxlKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2Ug
ZW51bWVyYWJsZSBhdHRyaWJ1dGUgb2YgdW5jb25maWd1cmFibGUgcHJvcGVydHkuIik7CisgICAg
ICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNjb3BlLCB0aHJvd0V4Y2VwdGlvbiwgQVNDSUlM
aXRlcmFsKFVuY29uZmlndXJhYmxlUHJvcGVydHlDaGFuZ2VFbnVtZXJhYmlsaXR5RXJyb3IpKTsK
ICAgICB9CiAKICAgICAvLyA4LiBJZiBJc0dlbmVyaWNEZXNjcmlwdG9yKERlc2MpIGlzIHRydWUs
IHRoZW4gbm8gZnVydGhlciB2YWxpZGF0aW9uIGlzIHJlcXVpcmVkLgpAQCAtMjA2Niw3ICsyMDcw
LDcgQEAgYm9vbCBKU09iamVjdDo6ZGVmaW5lT3duSW5kZXhlZFByb3BlcnR5KAogICAgICAgICBp
ZiAoY3VycmVudC5pc0RhdGFEZXNjcmlwdG9yKCkgIT0gZGVzY3JpcHRvci5pc0RhdGFEZXNjcmlw
dG9yKCkpIHsKICAgICAgICAgICAgIC8vIDkuYS4gUmVqZWN0LCBpZiB0aGUgW1tDb25maWd1cmFi
bGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlLgogICAgICAgICAgICAgaWYgKCFjdXJyZW50
LmNvbmZpZ3VyYWJsZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhy
b3dFeGNlcHRpb24sIFVuY29uZmlndXJhYmxlUHJvcGVydHlDaGFuZ2VBY2Nlc3NNZWNoYW5pc21F
cnJvcik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBzY29wZSwgdGhyb3dF
eGNlcHRpb24sIEFTQ0lJTGl0ZXJhbChVbmNvbmZpZ3VyYWJsZVByb3BlcnR5Q2hhbmdlQWNjZXNz
TWVjaGFuaXNtRXJyb3IpKTsKICAgICAgICAgICAgIC8vIDkuYi4gSWYgSXNEYXRhRGVzY3JpcHRv
cihjdXJyZW50KSBpcyB0cnVlLCB0aGVuIGNvbnZlcnQgdGhlIHByb3BlcnR5IG5hbWVkIFAgb2Yg
b2JqZWN0IE8gZnJvbSBhCiAgICAgICAgICAgICAvLyBkYXRhIHByb3BlcnR5IHRvIGFuIGFjY2Vz
c29yIHByb3BlcnR5LiBQcmVzZXJ2ZSB0aGUgZXhpc3RpbmcgdmFsdWVzIG9mIHRoZSBjb252ZXJ0
ZWQgcHJvcGVydHkncwogICAgICAgICAgICAgLy8gW1tDb25maWd1cmFibGVdXSBhbmQgW1tFbnVt
ZXJhYmxlXV0gYXR0cmlidXRlcyBhbmQgc2V0IHRoZSByZXN0IG9mIHRoZSBwcm9wZXJ0eSdzIGF0
dHJpYnV0ZXMgdG8KQEAgLTIwODAsMTEgKzIwODQsMTEgQEAgYm9vbCBKU09iamVjdDo6ZGVmaW5l
T3duSW5kZXhlZFByb3BlcnR5KAogICAgICAgICAgICAgaWYgKCFjdXJyZW50LmNvbmZpZ3VyYWJs
ZSgpICYmICFjdXJyZW50LndyaXRhYmxlKCkpIHsKICAgICAgICAgICAgICAgICAvLyAxMC5hLmku
IFJlamVjdCwgaWYgdGhlIFtbV3JpdGFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlIGFu
ZCB0aGUgW1tXcml0YWJsZV1dIGZpZWxkIG9mIERlc2MgaXMgdHJ1ZS4KICAgICAgICAgICAgICAg
ICBpZiAoZGVzY3JpcHRvci53cml0YWJsZSgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
cmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2Ugd3JpdGFi
bGUgYXR0cmlidXRlIG9mIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNjb3BlLCB0aHJvd0V4Y2VwdGlvbiwgQVNDSUlM
aXRlcmFsKFVuY29uZmlndXJhYmxlUHJvcGVydHlDaGFuZ2VXcml0YWJpbGl0eUVycm9yKSk7CiAg
ICAgICAgICAgICAgICAgLy8gMTAuYS5paS4gSWYgdGhlIFtbV3JpdGFibGVdXSBmaWVsZCBvZiBj
dXJyZW50IGlzIGZhbHNlLCB0aGVuCiAgICAgICAgICAgICAgICAgLy8gMTAuYS5paS4xLiBSZWpl
Y3QsIGlmIHRoZSBbW1ZhbHVlXV0gZmllbGQgb2YgRGVzYyBpcyBwcmVzZW50IGFuZCBTYW1lVmFs
dWUoRGVzYy5bW1ZhbHVlXV0sIGN1cnJlbnQuW1tWYWx1ZV1dKSBpcyBmYWxzZS4KICAgICAgICAg
ICAgICAgICBpZiAoZGVzY3JpcHRvci52YWx1ZSgpICYmICFzYW1lVmFsdWUoZXhlYywgZGVzY3Jp
cHRvci52YWx1ZSgpLCBjdXJyZW50LnZhbHVlKCkpKQotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgdmFs
dWUgb2YgYSByZWFkb25seSBwcm9wZXJ0eS4iKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHJlamVjdChleGVjLCBzY29wZSwgdGhyb3dFeGNlcHRpb24sIEFTQ0lJTGl0ZXJhbChSZWFkb25s
eVByb3BlcnR5Q2hhbmdlRXJyb3IpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8vIDEw
LmIuIGVsc2UsIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgdHJ1ZSwg
c28gYW55IGNoYW5nZSBpcyBhY2NlcHRhYmxlLgogICAgICAgICB9IGVsc2UgewpAQCAtMjA5Mywx
MCArMjA5NywxMCBAQCBib29sIEpTT2JqZWN0OjpkZWZpbmVPd25JbmRleGVkUHJvcGVydHkoCiAg
ICAgICAgICAgICBpZiAoIWN1cnJlbnQuY29uZmlndXJhYmxlKCkpIHsKICAgICAgICAgICAgICAg
ICAvLyAxMS5pLiBSZWplY3QsIGlmIHRoZSBbW1NldF1dIGZpZWxkIG9mIERlc2MgaXMgcHJlc2Vu
dCBhbmQgU2FtZVZhbHVlKERlc2MuW1tTZXRdXSwgY3VycmVudC5bW1NldF1dKSBpcyBmYWxzZS4K
ICAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRvci5zZXR0ZXJQcmVzZW50KCkgJiYgZGVzY3Jp
cHRvci5zZXR0ZXIoKSAhPSBjdXJyZW50LnNldHRlcigpKQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2Ug
dGhlIHNldHRlciBvZiBhbiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBzY29wZSwgdGhyb3dFeGNlcHRpb24sIEFTQ0lJ
TGl0ZXJhbCgiQXR0ZW1wdGluZyB0byBjaGFuZ2UgdGhlIHNldHRlciBvZiBhbiB1bmNvbmZpZ3Vy
YWJsZSBwcm9wZXJ0eS4iKSk7CiAgICAgICAgICAgICAgICAgLy8gMTEuaWkuIFJlamVjdCwgaWYg
dGhlIFtbR2V0XV0gZmllbGQgb2YgRGVzYyBpcyBwcmVzZW50IGFuZCBTYW1lVmFsdWUoRGVzYy5b
W0dldF1dLCBjdXJyZW50LltbR2V0XV0pIGlzIGZhbHNlLgogICAgICAgICAgICAgICAgIGlmIChk
ZXNjcmlwdG9yLmdldHRlclByZXNlbnQoKSAmJiBkZXNjcmlwdG9yLmdldHRlcigpICE9IGN1cnJl
bnQuZ2V0dGVyKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhy
b3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSB0aGUgZ2V0dGVyIG9mIGFuIHVuY29u
ZmlndXJhYmxlIHByb3BlcnR5LiIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0
KGV4ZWMsIHNjb3BlLCB0aHJvd0V4Y2VwdGlvbiwgQVNDSUlMaXRlcmFsKCJBdHRlbXB0aW5nIHRv
IGNoYW5nZSB0aGUgZ2V0dGVyIG9mIGFuIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTIyNjIsMTEgKzIyNjYsOCBAQCBib29s
IEpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuCiAgICAgdW5zaWduZWQgbGVuZ3Ro
ID0gc3RvcmFnZS0+bGVuZ3RoKCk7CiAgICAgaWYgKGkgPj0gbGVuZ3RoKSB7CiAgICAgICAgIC8v
IFByb2hpYml0IGdyb3dpbmcgdGhlIGFycmF5IGlmIGxlbmd0aCBpcyBub3Qgd3JpdGFibGUuCi0g
ICAgICAgIGlmIChtYXAtPmxlbmd0aElzUmVhZE9ubHkoKSB8fCAhaXNTdHJ1Y3R1cmVFeHRlbnNp
YmxlKCkpIHsKLSAgICAgICAgICAgIGlmIChzaG91bGRUaHJvdykKLSAgICAgICAgICAgICAgICB0
aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9CisgICAgICAgIGlmIChtYXAtPmxl
bmd0aElzUmVhZE9ubHkoKSB8fCAhaXNTdHJ1Y3R1cmVFeHRlbnNpYmxlKCkpCisgICAgICAgICAg
ICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNjb3BlLCBzaG91bGRUaHJvdywgQVNDSUlMaXRlcmFsKFJl
YWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKSk7CiAgICAgICAgIGxlbmd0aCA9IGkgKyAxOwogICAg
ICAgICBzdG9yYWdlLT5zZXRMZW5ndGgobGVuZ3RoKTsKICAgICB9CkBAIC0yMzYxLDYgKzIzNjIs
NyBAQCBib29sIEpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuCiBib29sIEpTT2Jq
ZWN0OjpwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhl
Y1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1
dGVzLCBQdXREaXJlY3RJbmRleE1vZGUgbW9kZSwgQXJyYXlTdG9yYWdlKiBzdG9yYWdlKQogewog
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogICAgIAogICAgIC8vIGkgc2hvdWxkIGJlIGEgdmFsaWQgYXJyYXkgaW5kZXgg
dGhhdCBpcyBvdXRzaWRlIG9mIHRoZSBjdXJyZW50IHZlY3Rvci4KICAgICBBU1NFUlQoaGFzQW55
QXJyYXlTdG9yYWdlKGluZGV4aW5nVHlwZSgpKSk7CkBAIC0yMzkyLDcgKzIzOTQsNyBAQCBib29s
IEpTT2JqZWN0OjpwdXREaXJlY3RJbmRleEJleW9uZFZlY3RvCiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgfQogICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRvLCBvciBjYW4ndCB1
c2UgYSB2ZWN0b3IgdG8gaG9sZCB0aGlzIHByb3BlcnR5IC0gYWxsb2NhdGUgYSBzcGFyc2UgbWFw
ICYgYWRkIHRoZSB2YWx1ZS4KLSAgICAgICAgbWFwID0gYWxsb2NhdGVTcGFyc2VJbmRleE1hcChl
eGVjLT52bSgpKTsKKyAgICAgICAgbWFwID0gYWxsb2NhdGVTcGFyc2VJbmRleE1hcCh2bSk7CiAg
ICAgICAgIHJldHVybiBtYXAtPnB1dERpcmVjdChleGVjLCB0aGlzLCBpLCB2YWx1ZSwgYXR0cmli
dXRlcywgbW9kZSk7CiAgICAgfQogCkBAIC0yNDAyLDkgKzI0MDQsOSBAQCBib29sIEpTT2JqZWN0
OjpwdXREaXJlY3RJbmRleEJleW9uZFZlY3RvCiAgICAgICAgIGlmIChtb2RlICE9IFB1dERpcmVj
dEluZGV4TGlrZVB1dERpcmVjdCkgewogICAgICAgICAgICAgLy8gUHJvaGliaXQgZ3Jvd2luZyB0
aGUgYXJyYXkgaWYgbGVuZ3RoIGlzIG5vdCB3cml0YWJsZS4KICAgICAgICAgICAgIGlmIChtYXAt
Pmxlbmd0aElzUmVhZE9ubHkoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMs
IG1vZGUgPT0gUHV0RGlyZWN0SW5kZXhTaG91bGRUaHJvdywgUmVhZG9ubHlQcm9wZXJ0eVdyaXRl
RXJyb3IpOworICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgc2NvcGUsIG1vZGUg
PT0gUHV0RGlyZWN0SW5kZXhTaG91bGRUaHJvdywgQVNDSUlMaXRlcmFsKFJlYWRvbmx5UHJvcGVy
dHlXcml0ZUVycm9yKSk7CiAgICAgICAgICAgICBpZiAoIWlzU3RydWN0dXJlRXh0ZW5zaWJsZSgp
KQotICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgbW9kZSA9PSBQdXREaXJlY3RJ
bmRleFNob3VsZFRocm93LCAiQXR0ZW1wdGluZyB0byBkZWZpbmUgcHJvcGVydHkgb24gb2JqZWN0
IHRoYXQgaXMgbm90IGV4dGVuc2libGUuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVj
dChleGVjLCBzY29wZSwgbW9kZSA9PSBQdXREaXJlY3RJbmRleFNob3VsZFRocm93LCBBU0NJSUxp
dGVyYWwoTm9uRXh0ZW5zaWJsZU9iamVjdFByb3BlcnR5RGVmaW5lRXJyb3IpKTsKICAgICAgICAg
fQogICAgICAgICBsZW5ndGggPSBpICsgMTsKICAgICAgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGxl
bmd0aCk7CkBAIC0yNDEzLDcgKzI0MTUsNyBAQCBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbmRl
eEJleW9uZFZlY3RvCiAgICAgLy8gV2UgYXJlIGN1cnJlbnRseSB1c2luZyBhIG1hcCAtIGNoZWNr
IHdoZXRoZXIgd2Ugc3RpbGwgd2FudCB0byBiZSBkb2luZyBzby4KICAgICAvLyBXZSB3aWxsIGNv
bnRpbnVlICB0byB1c2UgYSBzcGFyc2UgbWFwIGlmIFNwYXJzZU1vZGUgaXMgc2V0LCBhIHZlY3Rv
ciB3b3VsZCBiZSB0b28gc3BhcnNlLCBvciBpZiBhbGxvY2F0aW9uIGZhaWxzLgogICAgIHVuc2ln
bmVkIG51bVZhbHVlc0luQXJyYXkgPSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yICsgbWFw
LT5zaXplKCk7Ci0gICAgaWYgKG1hcC0+c3BhcnNlTW9kZSgpIHx8IGF0dHJpYnV0ZXMgfHwgIWlz
RGVuc2VFbm91Z2hGb3JWZWN0b3IobGVuZ3RoLCBudW1WYWx1ZXNJbkFycmF5KSB8fCAhaW5jcmVh
c2VWZWN0b3JMZW5ndGgoZXhlYy0+dm0oKSwgbGVuZ3RoKSkKKyAgICBpZiAobWFwLT5zcGFyc2VN
b2RlKCkgfHwgYXR0cmlidXRlcyB8fCAhaXNEZW5zZUVub3VnaEZvclZlY3RvcihsZW5ndGgsIG51
bVZhbHVlc0luQXJyYXkpIHx8ICFpbmNyZWFzZVZlY3Rvckxlbmd0aCh2bSwgbGVuZ3RoKSkKICAg
ICAgICAgcmV0dXJuIG1hcC0+cHV0RGlyZWN0KGV4ZWMsIHRoaXMsIGksIHZhbHVlLCBhdHRyaWJ1
dGVzLCBtb2RlKTsKIAogICAgIC8vIFJlcmVhZCBtX3N0b3JhZ2UgYWZ0ZXIgaW5jcmVhc2VWZWN0
b3JMZW5ndGgsIHVwZGF0ZSBtX251bVZhbHVlc0luVmVjdG9yLgpAQCAtMjkxNiwxMSArMjkxOCw4
IEBAIGJvb2wgdmFsaWRhdGVBbmRBcHBseVByb3BlcnR5RGVzY3JpcHRvcigKICAgICBpZiAoIWlz
Q3VycmVudERlZmluZWQpIHsKICAgICAgICAgLy8gdW5sZXNzIGV4dGVuc2lvbnMgYXJlIHByZXZl
bnRlZCEKICAgICAgICAgLy8gU3RlcCAyLmEKLSAgICAgICAgaWYgKCFpc0V4dGVuc2libGUpIHsK
LSAgICAgICAgICAgIGlmICh0aHJvd0V4Y2VwdGlvbikKLSAgICAgICAgICAgICAgICB0aHJvd1R5
cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJBdHRlbXB0aW5nIHRvIGRlZmluZSBw
cm9wZXJ0eSBvbiBvYmplY3QgdGhhdCBpcyBub3QgZXh0ZW5zaWJsZS4iKSk7Ci0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKCFpc0V4dGVuc2libGUpCisg
ICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNjb3BlLCB0aHJvd0V4Y2VwdGlvbiwgQVND
SUlMaXRlcmFsKE5vbkV4dGVuc2libGVPYmplY3RQcm9wZXJ0eURlZmluZUVycm9yKSk7CiAgICAg
ICAgIGlmICghb2JqZWN0KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIC8vIFN0
ZXAgMi5jL2QKQEAgLTI5MzksMTYgKzI5MzgsMTAgQEAgYm9vbCB2YWxpZGF0ZUFuZEFwcGx5UHJv
cGVydHlEZXNjcmlwdG9yKAogICAgIC8vIFN0ZXAgNS4KICAgICAvLyBGaWx0ZXIgb3V0IGludmFs
aWQgY2hhbmdlcwogICAgIGlmICghY3VycmVudC5jb25maWd1cmFibGUoKSkgewotICAgICAgICBp
ZiAoZGVzY3JpcHRvci5jb25maWd1cmFibGUoKSkgewotICAgICAgICAgICAgaWYgKHRocm93RXhj
ZXB0aW9uKQotICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJ
SUxpdGVyYWwoIkF0dGVtcHRpbmcgdG8gY2hhbmdlIGNvbmZpZ3VyYWJsZSBhdHRyaWJ1dGUgb2Yg
dW5jb25maWd1cmFibGUgcHJvcGVydHkuIikpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICB9Ci0gICAgICAgIGlmIChkZXNjcmlwdG9yLmVudW1lcmFibGVQcmVzZW50KCkgJiYg
ZGVzY3JpcHRvci5lbnVtZXJhYmxlKCkgIT0gY3VycmVudC5lbnVtZXJhYmxlKCkpIHsKLSAgICAg
ICAgICAgIGlmICh0aHJvd0V4Y2VwdGlvbikKLSAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJv
cihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJBdHRlbXB0aW5nIHRvIGNoYW5nZSBlbnVtZXJh
YmxlIGF0dHJpYnV0ZSBvZiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKSk7Ci0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKGRlc2NyaXB0b3IuY29uZmln
dXJhYmxlKCkpCisgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNjb3BlLCB0aHJvd0V4
Y2VwdGlvbiwgQVNDSUlMaXRlcmFsKFVuY29uZmlndXJhYmxlUHJvcGVydHlDaGFuZ2VDb25maWd1
cmFiaWxpdHlFcnJvcikpOworICAgICAgICBpZiAoZGVzY3JpcHRvci5lbnVtZXJhYmxlUHJlc2Vu
dCgpICYmIGRlc2NyaXB0b3IuZW51bWVyYWJsZSgpICE9IGN1cnJlbnQuZW51bWVyYWJsZSgpKQor
ICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBzY29wZSwgdGhyb3dFeGNlcHRpb24sIEFT
Q0lJTGl0ZXJhbChVbmNvbmZpZ3VyYWJsZVByb3BlcnR5Q2hhbmdlRW51bWVyYWJpbGl0eUVycm9y
KSk7CiAgICAgfQogICAgIAogICAgIC8vIFN0ZXAgNi4KQEAgLTI5NjQsMTEgKzI5NTcsOCBAQCBi
b29sIHZhbGlkYXRlQW5kQXBwbHlQcm9wZXJ0eURlc2NyaXB0b3IoCiAgICAgLy8gU3RlcCA3Lgog
ICAgIC8vIENoYW5naW5nIGJldHdlZW4gYSBub3JtYWwgcHJvcGVydHkgb3IgYW4gYWNjZXNzb3Ig
cHJvcGVydHkKICAgICBpZiAoZGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkgIT0gY3VycmVu
dC5pc0RhdGFEZXNjcmlwdG9yKCkpIHsKLSAgICAgICAgaWYgKCFjdXJyZW50LmNvbmZpZ3VyYWJs
ZSgpKSB7Ci0gICAgICAgICAgICBpZiAodGhyb3dFeGNlcHRpb24pCi0gICAgICAgICAgICAgICAg
dGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbChVbmNvbmZpZ3VyYWJsZVBy
b3BlcnR5Q2hhbmdlQWNjZXNzTWVjaGFuaXNtRXJyb3IpKTsKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgfQorICAgICAgICBpZiAoIWN1cnJlbnQuY29uZmlndXJhYmxlKCkpCisg
ICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNjb3BlLCB0aHJvd0V4Y2VwdGlvbiwgQVND
SUlMaXRlcmFsKFVuY29uZmlndXJhYmxlUHJvcGVydHlDaGFuZ2VBY2Nlc3NNZWNoYW5pc21FcnJv
cikpOwogCiAgICAgICAgIGlmICghb2JqZWN0KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBA
IC0yOTgxLDE3ICsyOTcxLDExIEBAIGJvb2wgdmFsaWRhdGVBbmRBcHBseVByb3BlcnR5RGVzY3Jp
cHRvcigKICAgICAvLyBDaGFuZ2luZyB0aGUgdmFsdWUgYW5kIGF0dHJpYnV0ZXMgb2YgYW4gZXhp
c3RpbmcgcHJvcGVydHkKICAgICBpZiAoZGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkpIHsK
ICAgICAgICAgaWYgKCFjdXJyZW50LmNvbmZpZ3VyYWJsZSgpKSB7Ci0gICAgICAgICAgICBpZiAo
IWN1cnJlbnQud3JpdGFibGUoKSAmJiBkZXNjcmlwdG9yLndyaXRhYmxlKCkpIHsKLSAgICAgICAg
ICAgICAgICBpZiAodGhyb3dFeGNlcHRpb24pCi0gICAgICAgICAgICAgICAgICAgIHRocm93VHlw
ZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIkF0dGVtcHRpbmcgdG8gY2hhbmdlIHdy
aXRhYmxlIGF0dHJpYnV0ZSBvZiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKSk7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFj
dXJyZW50LndyaXRhYmxlKCkgJiYgZGVzY3JpcHRvci53cml0YWJsZSgpKQorICAgICAgICAgICAg
ICAgIHJldHVybiByZWplY3QoZXhlYywgc2NvcGUsIHRocm93RXhjZXB0aW9uLCBBU0NJSUxpdGVy
YWwoVW5jb25maWd1cmFibGVQcm9wZXJ0eUNoYW5nZVdyaXRhYmlsaXR5RXJyb3IpKTsKICAgICAg
ICAgICAgIGlmICghY3VycmVudC53cml0YWJsZSgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGRl
c2NyaXB0b3IudmFsdWUoKSAmJiAhc2FtZVZhbHVlKGV4ZWMsIGN1cnJlbnQudmFsdWUoKSwgZGVz
Y3JpcHRvci52YWx1ZSgpKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAodGhyb3dFeGNlcHRp
b24pCi0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwg
QVNDSUlMaXRlcmFsKCJBdHRlbXB0aW5nIHRvIGNoYW5nZSB2YWx1ZSBvZiBhIHJlYWRvbmx5IHBy
b3BlcnR5LiIpKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRvci52YWx1ZSgpICYmICFzYW1l
VmFsdWUoZXhlYywgY3VycmVudC52YWx1ZSgpLCBkZXNjcmlwdG9yLnZhbHVlKCkpKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNjb3BlLCB0aHJvd0V4Y2VwdGlvbiwg
QVNDSUlMaXRlcmFsKFJlYWRvbmx5UHJvcGVydHlDaGFuZ2VFcnJvcikpOwogICAgICAgICAgICAg
fQogICAgICAgICB9CiAgICAgICAgIGlmIChjdXJyZW50LmF0dHJpYnV0ZXNFcXVhbChkZXNjcmlw
dG9yKSAmJiAhZGVzY3JpcHRvci52YWx1ZSgpKQpAQCAtMzAwNiwyMSArMjk5MCwxMiBAQCBib29s
IHZhbGlkYXRlQW5kQXBwbHlQcm9wZXJ0eURlc2NyaXB0b3IoCiAgICAgLy8gQ2hhbmdpbmcgdGhl
IGFjY2Vzc29yIGZ1bmN0aW9ucyBvZiBhbiBleGlzdGluZyBhY2Nlc3NvciBwcm9wZXJ0eQogICAg
IEFTU0VSVChkZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpOwogICAgIGlmICghY3Vy
cmVudC5jb25maWd1cmFibGUoKSkgewotICAgICAgICBpZiAoZGVzY3JpcHRvci5zZXR0ZXJQcmVz
ZW50KCkgJiYgIShjdXJyZW50LnNldHRlclByZXNlbnQoKSAmJiBKU1ZhbHVlOjpzdHJpY3RFcXVh
bChleGVjLCBjdXJyZW50LnNldHRlcigpLCBkZXNjcmlwdG9yLnNldHRlcigpKSkpIHsKLSAgICAg
ICAgICAgIGlmICh0aHJvd0V4Y2VwdGlvbikKLSAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJv
cihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJBdHRlbXB0aW5nIHRvIGNoYW5nZSB0aGUgc2V0
dGVyIG9mIGFuIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpKTsKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZGVzY3JpcHRvci5nZXR0ZXJQcmVzZW50
KCkgJiYgIShjdXJyZW50LmdldHRlclByZXNlbnQoKSAmJiBKU1ZhbHVlOjpzdHJpY3RFcXVhbChl
eGVjLCBjdXJyZW50LmdldHRlcigpLCBkZXNjcmlwdG9yLmdldHRlcigpKSkpIHsKLSAgICAgICAg
ICAgIGlmICh0aHJvd0V4Y2VwdGlvbikKLSAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihl
eGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJBdHRlbXB0aW5nIHRvIGNoYW5nZSB0aGUgZ2V0dGVy
IG9mIGFuIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpKTsKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoY3VycmVudC5hdHRyaWJ1dGVzKCkgJiBDdXN0
b21BY2Nlc3NvcikgewotICAgICAgICAgICAgaWYgKHRocm93RXhjZXB0aW9uKQotICAgICAgICAg
ICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoVW5jb25maWd1
cmFibGVQcm9wZXJ0eUNoYW5nZUFjY2Vzc01lY2hhbmlzbUVycm9yKSk7Ci0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKGRlc2NyaXB0b3Iuc2V0dGVyUHJl
c2VudCgpICYmICEoY3VycmVudC5zZXR0ZXJQcmVzZW50KCkgJiYgSlNWYWx1ZTo6c3RyaWN0RXF1
YWwoZXhlYywgY3VycmVudC5zZXR0ZXIoKSwgZGVzY3JpcHRvci5zZXR0ZXIoKSkpKQorICAgICAg
ICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBzY29wZSwgdGhyb3dFeGNlcHRpb24sIEFTQ0lJTGl0
ZXJhbCgiQXR0ZW1wdGluZyB0byBjaGFuZ2UgdGhlIHNldHRlciBvZiBhbiB1bmNvbmZpZ3VyYWJs
ZSBwcm9wZXJ0eS4iKSk7CisgICAgICAgIGlmIChkZXNjcmlwdG9yLmdldHRlclByZXNlbnQoKSAm
JiAhKGN1cnJlbnQuZ2V0dGVyUHJlc2VudCgpICYmIEpTVmFsdWU6OnN0cmljdEVxdWFsKGV4ZWMs
IGN1cnJlbnQuZ2V0dGVyKCksIGRlc2NyaXB0b3IuZ2V0dGVyKCkpKSkKKyAgICAgICAgICAgIHJl
dHVybiByZWplY3QoZXhlYywgc2NvcGUsIHRocm93RXhjZXB0aW9uLCBBU0NJSUxpdGVyYWwoIkF0
dGVtcHRpbmcgdG8gY2hhbmdlIHRoZSBnZXR0ZXIgb2YgYW4gdW5jb25maWd1cmFibGUgcHJvcGVy
dHkuIikpOworICAgICAgICBpZiAoY3VycmVudC5hdHRyaWJ1dGVzKCkgJiBDdXN0b21BY2Nlc3Nv
cikKKyAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgc2NvcGUsIHRocm93RXhjZXB0aW9u
LCBBU0NJSUxpdGVyYWwoVW5jb25maWd1cmFibGVQcm9wZXJ0eUNoYW5nZUFjY2Vzc01lY2hhbmlz
bUVycm9yKSk7CiAgICAgfQogCiAgICAgLy8gU3RlcCAxMC8xMS4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24gMjA3Mzc2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNjgs
OCArNjgsMTQgQEAgc3RydWN0IEhhc2hUYWJsZTsKIHN0cnVjdCBIYXNoVGFibGVWYWx1ZTsKIAog
SlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIHRocm93VHlwZUVycm9yKEV4ZWNTdGF0ZSosIFRo
cm93U2NvcGUmLCBjb25zdCBTdHJpbmcmKTsKLWV4dGVybiBKU19FWFBPUlREQVRBIGNvbnN0IGNo
YXIqIFJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yOwotZXh0ZXJuIEpTX0VYUE9SVERBVEEgY29u
c3QgY2hhciogVW5jb25maWd1cmFibGVQcm9wZXJ0eUNoYW5nZUFjY2Vzc01lY2hhbmlzbUVycm9y
OworZXh0ZXJuIEpTX0VYUE9SVERBVEEgY29uc3QgY2hhciogY29uc3QgTm9uRXh0ZW5zaWJsZU9i
amVjdFByb3BlcnR5RGVmaW5lRXJyb3I7CitleHRlcm4gSlNfRVhQT1JUREFUQSBjb25zdCBjaGFy
KiBjb25zdCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcjsKK2V4dGVybiBKU19FWFBPUlREQVRB
IGNvbnN0IGNoYXIqIGNvbnN0IFJlYWRvbmx5UHJvcGVydHlDaGFuZ2VFcnJvcjsKK2V4dGVybiBK
U19FWFBPUlREQVRBIGNvbnN0IGNoYXIqIGNvbnN0IFVuYWJsZVRvRGVsZXRlUHJvcGVydHlFcnJv
cjsKK2V4dGVybiBKU19FWFBPUlREQVRBIGNvbnN0IGNoYXIqIGNvbnN0IFVuY29uZmlndXJhYmxl
UHJvcGVydHlDaGFuZ2VBY2Nlc3NNZWNoYW5pc21FcnJvcjsKK2V4dGVybiBKU19FWFBPUlREQVRB
IGNvbnN0IGNoYXIqIGNvbnN0IFVuY29uZmlndXJhYmxlUHJvcGVydHlDaGFuZ2VDb25maWd1cmFi
aWxpdHlFcnJvcjsKK2V4dGVybiBKU19FWFBPUlREQVRBIGNvbnN0IGNoYXIqIGNvbnN0IFVuY29u
ZmlndXJhYmxlUHJvcGVydHlDaGFuZ2VFbnVtZXJhYmlsaXR5RXJyb3I7CitleHRlcm4gSlNfRVhQ
T1JUREFUQSBjb25zdCBjaGFyKiBjb25zdCBVbmNvbmZpZ3VyYWJsZVByb3BlcnR5Q2hhbmdlV3Jp
dGFiaWxpdHlFcnJvcjsKIAogQ09NUElMRV9BU1NFUlQoTm9uZSA8IEZpcnN0SW50ZXJuYWxBdHRy
aWJ1dGUsIE5vbmVfaXNfYmVsb3dfRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSk7CiBDT01QSUxFX0FT
U0VSVChSZWFkT25seSA8IEZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUsIFJlYWRPbmx5X2lzX2JlbG93
X0ZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNPYmplY3RJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNPYmplY3RJbmxpbmVzLmgJKHJldmlzaW9uIDIwNzM3NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xNzcsMTEgKzE3Nyw4IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6cHV0SW5s
aW5lKEoKIAogICAgIGlmICh0aGlzT2JqZWN0LT5jYW5QZXJmb3JtRmFzdFB1dElubGluZShleGVj
LCB2bSwgcHJvcGVydHlOYW1lKSkgewogICAgICAgICBBU1NFUlQoIXRoaXNPYmplY3QtPnN0cnVj
dHVyZSh2bSktPnByb3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0U3RvcmVUbyh2bSwgcHJvcGVydHlO
YW1lKSk7Ci0gICAgICAgIGlmICghdGhpc09iamVjdC0+cHV0RGlyZWN0SW50ZXJuYWw8UHV0TW9k
ZVB1dD4odm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIDAsIHNsb3QpKSB7Ci0gICAgICAgICAgICBp
ZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKLSAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihl
eGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKFJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKSk7Ci0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKCF0aGlzT2Jq
ZWN0LT5wdXREaXJlY3RJbnRlcm5hbDxQdXRNb2RlUHV0Pih2bSwgcHJvcGVydHlOYW1lLCB2YWx1
ZSwgMCwgc2xvdCkpCisgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNjb3BlLCBzbG90
LmlzU3RyaWN0TW9kZSgpLCBBU0NJSUxpdGVyYWwoUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3Ip
KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1Byb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1Byb3h5LmNwcAkocmV2aXNpb24gMjA3Mzc2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDEyLCAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMTUwLDEwICsxNTAsNyBAQCBib29sIEpTUHJveHk6OnNldFByb3RvdHlwZShKU09iamVjdCos
IEV4CiB7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoZXhlYy0+dm0oKSk7
CiAKLSAgICBpZiAoc2hvdWxkVGhyb3dJZkNhbnRTZXQpCi0gICAgICAgIHRocm93VHlwZUVycm9y
KGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIkNhbm5vdCBzZXQgcHJvdG90eXBlIG9mIHRoaXMg
b2JqZWN0IikpOwotCi0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiByZWplY3QoZXhlYywg
c2NvcGUsIHNob3VsZFRocm93SWZDYW50U2V0LCBBU0NJSUxpdGVyYWwoIkNhbm5vdCBzZXQgcHJv
dG90eXBlIG9mIHRoaXMgb2JqZWN0IikpOwogfQogCiBKU1ZhbHVlIEpTUHJveHk6OmdldFByb3Rv
dHlwZShKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oCShyZXZp
c2lvbiAyMDczNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRh
YmxlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE4Myw3ICsxODMsNyBAQCBpbmxpbmUgYm9v
bCBzeW1ib2xUYWJsZVB1dChTeW1ib2xUYWJsZU9iCiAgICAgICAgIEFTU0VSVCghZmFzdEVudHJ5
LmlzTnVsbCgpKTsKICAgICAgICAgaWYgKGZhc3RFbnRyeS5pc1JlYWRPbmx5KCkgJiYgIWlnbm9y
ZVJlYWRPbmx5RXJyb3JzKSB7CiAgICAgICAgICAgICBpZiAoc2hvdWxkVGhyb3dSZWFkT25seUVy
cm9yKQotICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBSZWFkb25s
eVByb3BlcnR5V3JpdGVFcnJvcik7CisgICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhl
Yywgc2NvcGUsIEFTQ0lJTGl0ZXJhbChSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcikpOwogICAg
ICAgICAgICAgcHV0UmVzdWx0ID0gZmFsc2U7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTG9va3VwLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTG9va3VwLmgJKHJldmlz
aW9uIDIwNzM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xvb2t1cC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNTQsMTkgKzI1NCwyMiBAQCBpbmxpbmUgYm9vbCByZXBsYWNlU3Rh
dGljUHJvcGVydHlTbG90KFZNCiAvLyAnc2xvdC50aGlzVmFsdWUoKScgaXMgdGhlIG9iamVjdCB0
aGUgcHV0IHdhcyBvcmlnaW5hbGx5IHBlcmZvcm1lZCBvbiAoaW4gdGhlIGNhc2Ugb2YgYSBwcm94
eSwgdGhlIHByb3h5IGl0c2VsZikuCiBpbmxpbmUgYm9vbCBwdXRFbnRyeShFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IEhhc2hUYWJsZVZhbHVlKiBlbnRyeSwgSlNPYmplY3QqIGJhc2UsIEpTT2JqZWN0
KiB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1
dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGlmIChlbnRyeS0+YXR0
cmlidXRlcygpICYgQnVpbHRpbk9yRnVuY3Rpb25PckxhenlQcm9wZXJ0eSkgewogICAgICAgICBp
ZiAoIShlbnRyeS0+YXR0cmlidXRlcygpICYgUmVhZE9ubHkpKSB7CiAgICAgICAgICAgICAvLyBJ
ZiB0aGlzIGlzIGEgZnVuY3Rpb24gb3IgbGF6eSBwcm9wZXJ0eSBwdXQgdGhlbiB3ZSBqdXN0IGRv
IHRoZSBwdXQgYmVjYXVzZQogICAgICAgICAgICAgLy8gbG9naWNhbGx5IHRoZSBvYmplY3QgYWxy
ZWFkeSBoYWQgdGhlIHByb3BlcnR5LCBzbyB0aGlzIGlzIGp1c3QgYSByZXBsYWNlLgogICAgICAg
ICAgICAgaWYgKEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNEeW5hbWljQ2FzdDxKU09iamVjdCo+
KHRoaXNWYWx1ZSkpCi0gICAgICAgICAgICAgICAgdGhpc09iamVjdC0+cHV0RGlyZWN0KGV4ZWMt
PnZtKCksIHByb3BlcnR5TmFtZSwgdmFsdWUpOworICAgICAgICAgICAgICAgIHRoaXNPYmplY3Qt
PnB1dERpcmVjdCh2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSk7CiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNsb3QuaXNTdHJp
Y3RNb2RlKCksIFJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKKyAgICAgICAgcmV0dXJuIHJl
amVjdChleGVjLCBzY29wZSwgc2xvdC5pc1N0cmljdE1vZGUoKSwgQVNDSUlMaXRlcmFsKFJlYWRv
bmx5UHJvcGVydHlXcml0ZUVycm9yKSk7CiAgICAgfQogCiAgICAgaWYgKGVudHJ5LT5hdHRyaWJ1
dGVzKCkgJiBBY2Nlc3NvcikKLSAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBzbG90LmlzU3Ry
aWN0TW9kZSgpLCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CisgICAgICAgIHJldHVybiBy
ZWplY3QoZXhlYywgc2NvcGUsIHNsb3QuaXNTdHJpY3RNb2RlKCksIEFTQ0lJTGl0ZXJhbChSZWFk
b25seVByb3BlcnR5V3JpdGVFcnJvcikpOwogCiAgICAgaWYgKCEoZW50cnktPmF0dHJpYnV0ZXMo
KSAmIFJlYWRPbmx5KSkgewogICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCEoZW50cnktPmF0
dHJpYnV0ZXMoKSAmIERPTUpJVEF0dHJpYnV0ZSksICJET01KSVRBdHRyaWJ1dGUgc3VwcG9ydHMg
cmVhZG9ubHkgYXR0cmlidXRlcyBjdXJyZW50bHkuIik7CkBAIC0yODAsNyArMjgzLDcgQEAgaW5s
aW5lIGJvb2wgcHV0RW50cnkoRXhlY1N0YXRlKiBleGVjLCBjbwogICAgICAgICByZXR1cm4gcmVz
dWx0OwogICAgIH0KIAotICAgIHJldHVybiByZWplY3QoZXhlYywgc2xvdC5pc1N0cmljdE1vZGUo
KSwgUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOworICAgIHJldHVybiByZWplY3QoZXhlYywg
c2NvcGUsIHNsb3QuaXNTdHJpY3RNb2RlKCksIEFTQ0lJTGl0ZXJhbChSZWFkb25seVByb3BlcnR5
V3JpdGVFcnJvcikpOwogfQogCiAvKioKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1JlZ0V4cE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAkocmV2aXNpb24gMjA3Mzc2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTAxLDE5ICsxMDEsMjIgQEAgdm9pZCBSZWdFeHBPYmplY3Q6OmdldEdlbmVyaWNQcm9wZXJ0eU5h
bQogCiBib29sIFJlZ0V4cE9iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqIG9iamVj
dCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9w
ZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgc2hvdWxkVGhyb3cpCiB7Ci0gICAgaWYg
KHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGFzdEluZGV4KSB7CisgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisKKyAgICBpZiAocHJvcGVydHlOYW1lID09IHZtLnByb3BlcnR5TmFtZXMtPmxhc3RJ
bmRleCkgewogICAgICAgICBSZWdFeHBPYmplY3QqIHJlZ0V4cCA9IGFzUmVnRXhwT2JqZWN0KG9i
amVjdCk7CiAgICAgICAgIGlmIChkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZVByZXNlbnQoKSAmJiBk
ZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSgpKQotICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVj
LCBzaG91bGRUaHJvdywgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIGNvbmZpZ3VyYWJsZSBhdHRyaWJ1
dGUgb2YgdW5jb25maWd1cmFibGUgcHJvcGVydHkuIik7CisgICAgICAgICAgICByZXR1cm4gcmVq
ZWN0KGV4ZWMsIHNjb3BlLCBzaG91bGRUaHJvdywgQVNDSUlMaXRlcmFsKFVuY29uZmlndXJhYmxl
UHJvcGVydHlDaGFuZ2VDb25maWd1cmFiaWxpdHlFcnJvcikpOwogICAgICAgICBpZiAoZGVzY3Jp
cHRvci5lbnVtZXJhYmxlUHJlc2VudCgpICYmIGRlc2NyaXB0b3IuZW51bWVyYWJsZSgpKQotICAg
ICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBzaG91bGRUaHJvdywgIkF0dGVtcHRpbmcgdG8g
Y2hhbmdlIGVudW1lcmFibGUgYXR0cmlidXRlIG9mIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIp
OworICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBzY29wZSwgc2hvdWxkVGhyb3csIEFT
Q0lJTGl0ZXJhbChVbmNvbmZpZ3VyYWJsZVByb3BlcnR5Q2hhbmdlRW51bWVyYWJpbGl0eUVycm9y
KSk7CiAgICAgICAgIGlmIChkZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpCi0gICAg
ICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNob3VsZFRocm93LCBVbmNvbmZpZ3VyYWJsZVBy
b3BlcnR5Q2hhbmdlQWNjZXNzTWVjaGFuaXNtRXJyb3IpOworICAgICAgICAgICAgcmV0dXJuIHJl
amVjdChleGVjLCBzY29wZSwgc2hvdWxkVGhyb3csIEFTQ0lJTGl0ZXJhbChVbmNvbmZpZ3VyYWJs
ZVByb3BlcnR5Q2hhbmdlQWNjZXNzTWVjaGFuaXNtRXJyb3IpKTsKICAgICAgICAgaWYgKCFyZWdF
eHAtPm1fbGFzdEluZGV4SXNXcml0YWJsZSkgewogICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3Iu
d3JpdGFibGVQcmVzZW50KCkgJiYgZGVzY3JpcHRvci53cml0YWJsZSgpKQotICAgICAgICAgICAg
ICAgIHJldHVybiByZWplY3QoZXhlYywgc2hvdWxkVGhyb3csICJBdHRlbXB0aW5nIHRvIGNoYW5n
ZSB3cml0YWJsZSBhdHRyaWJ1dGUgb2YgdW5jb25maWd1cmFibGUgcHJvcGVydHkuIik7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBzY29wZSwgc2hvdWxkVGhyb3csIEFTQ0lJ
TGl0ZXJhbChVbmNvbmZpZ3VyYWJsZVByb3BlcnR5Q2hhbmdlV3JpdGFiaWxpdHlFcnJvcikpOwog
ICAgICAgICAgICAgaWYgKCFzYW1lVmFsdWUoZXhlYywgcmVnRXhwLT5nZXRMYXN0SW5kZXgoKSwg
ZGVzY3JpcHRvci52YWx1ZSgpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMs
IHNob3VsZFRocm93LCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgdmFsdWUgb2YgYSByZWFkb25seSBw
cm9wZXJ0eS4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNjb3BlLCBz
aG91bGRUaHJvdywgQVNDSUlMaXRlcmFsKFJlYWRvbmx5UHJvcGVydHlDaGFuZ2VFcnJvcikpOwog
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGRlc2NyaXB0
b3IudmFsdWUoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9i
amVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4
cE9iamVjdC5oCShyZXZpc2lvbiAyMDczNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9SZWdFeHBPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIsNyBAQAogCiAj
aW5jbHVkZSAiSlNPYmplY3QuaCIKICNpbmNsdWRlICJSZWdFeHAuaCIKKyNpbmNsdWRlICJSZWpl
Y3QuaCIKICNpbmNsdWRlICJUaHJvd1Njb3BlLmgiCiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNTAs
NyArNTEsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX2xhc3RJbmRleC5zZXRXaXRob3V0V3Jp
dGVCYXJyaWVyKGpzTnVtYmVyKGxhc3RJbmRleCkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgIH0KLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIFJlYWRvbmx5
UHJvcGVydHlXcml0ZUVycm9yKTsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUs
IEFTQ0lJTGl0ZXJhbChSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcikpOwogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogICAgIGJvb2wgc2V0TGFzdEluZGV4KEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSBsYXN0SW5kZXgsIGJvb2wgc2hvdWxkVGhyb3cpCkBAIC01OSwxMyArNjAsMTEgQEAg
cHVibGljOgogICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAK
ICAgICAgICAgaWYgKExJS0VMWShtX2xhc3RJbmRleElzV3JpdGFibGUpKSB7Ci0gICAgICAgICAg
ICBtX2xhc3RJbmRleC5zZXQoZXhlYy0+dm0oKSwgdGhpcywgbGFzdEluZGV4KTsKKyAgICAgICAg
ICAgIG1fbGFzdEluZGV4LnNldCh2bSwgdGhpcywgbGFzdEluZGV4KTsKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHNob3VsZFRocm93KQotICAgICAg
ICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIFJlYWRvbmx5UHJvcGVydHlXcml0ZUVy
cm9yKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMs
IHNjb3BlLCBzaG91bGRUaHJvdywgQVNDSUlMaXRlcmFsKFJlYWRvbmx5UHJvcGVydHlXcml0ZUVy
cm9yKSk7CiAgICAgfQogICAgIEpTVmFsdWUgZ2V0TGFzdEluZGV4KCkgY29uc3QKICAgICB7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWplY3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWplY3QuaAkocmV2aXNpb24gMjA3Mzc2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVqZWN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDEwICszMCw4IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1pbmxpbmUgYm9vbCBy
ZWplY3QoRXhlY1N0YXRlKiBleGVjLCBib29sIHRocm93RXhjZXB0aW9uLCBjb25zdCBjaGFyKiBt
ZXNzYWdlKQoraW5saW5lIGJvb2wgcmVqZWN0KEV4ZWNTdGF0ZSogZXhlYywgVGhyb3dTY29wZSYg
c2NvcGUsIGJvb2wgdGhyb3dFeGNlcHRpb24sIEFTQ0lJTGl0ZXJhbCBtZXNzYWdlKQogewotICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogICAgIGlmICh0aHJvd0V4Y2VwdGlvbikKICAgICAgICAgdGhyb3dUeXBlRXJyb3Io
ZXhlYywgc2NvcGUsIG1lc3NhZ2UpOwogICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuY3Bw
CShyZXZpc2lvbiAyMDczNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFy
c2VBcnJheVZhbHVlTWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDkgKzEwMiw3IEBAIGJv
b2wgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6cHV0RW50cnkoRXhlY1MKICAgICAvLyBleHRlbnNpYmxl
LCB0aGlzIGlzIG5vdCB0aGUgcmlnaHQgdGhpbmcgdG8gaGF2ZSBkb25lIC0gc28gcmVtb3ZlIGFn
YWluLgogICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSAmJiAhYXJyYXktPmlzU3RydWN0dXJlRXh0
ZW5zaWJsZSgpKSB7CiAgICAgICAgIHJlbW92ZShyZXN1bHQuaXRlcmF0b3IpOwotICAgICAgICBp
ZiAoc2hvdWxkVGhyb3cpCi0gICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwg
UmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIHJldHVybiByZWplY3QoZXhlYywgc2NvcGUsIHNob3VsZFRocm93LCBBU0NJSUxpdGVyYWwo
UmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpKTsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuIGVu
dHJ5LnB1dChleGVjLCBhcnJheSwgdGhpcywgdmFsdWUsIHNob3VsZFRocm93KTsKQEAgLTExMiw4
ICsxMTAsMTIgQEAgYm9vbCBTcGFyc2VBcnJheVZhbHVlTWFwOjpwdXRFbnRyeShFeGVjUwogCiBi
b29sIFNwYXJzZUFycmF5VmFsdWVNYXA6OnB1dERpcmVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiBhcnJheSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRl
cywgUHV0RGlyZWN0SW5kZXhNb2RlIG1vZGUpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgQVNTRVJUKHZh
bHVlKTsKICAgICAKKyAgICBib29sIHNob3VsZFRocm93ID0gKG1vZGUgPT0gUHV0RGlyZWN0SW5k
ZXhTaG91bGRUaHJvdyk7CisKICAgICBBZGRSZXN1bHQgcmVzdWx0ID0gYWRkKGFycmF5LCBpKTsK
ICAgICBTcGFyc2VBcnJheUVudHJ5JiBlbnRyeSA9IHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiAK
QEAgLTEyMywxMyArMTI1LDEzIEBAIGJvb2wgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6cHV0RGlyZWN0
KEV4ZWMKICAgICAgICAgLy8gZXh0ZW5zaWJsZSwgdGhpcyBpcyBub3QgdGhlIHJpZ2h0IHRoaW5n
IHRvIGhhdmUgZG9uZSAtIHNvIHJlbW92ZSBhZ2Fpbi4KICAgICAgICAgaWYgKHJlc3VsdC5pc05l
d0VudHJ5KSB7CiAgICAgICAgICAgICByZW1vdmUocmVzdWx0Lml0ZXJhdG9yKTsKLSAgICAgICAg
ICAgIHJldHVybiByZWplY3QoZXhlYywgbW9kZSA9PSBQdXREaXJlY3RJbmRleFNob3VsZFRocm93
LCAiQXR0ZW1wdGluZyB0byBkZWZpbmUgcHJvcGVydHkgb24gb2JqZWN0IHRoYXQgaXMgbm90IGV4
dGVuc2libGUuIik7CisgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNjb3BlLCBzaG91
bGRUaHJvdywgQVNDSUlMaXRlcmFsKE5vbkV4dGVuc2libGVPYmplY3RQcm9wZXJ0eURlZmluZUVy
cm9yKSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGVudHJ5LmF0dHJpYnV0ZXMgJiBSZWFkT25s
eSkKLSAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgbW9kZSA9PSBQdXREaXJlY3RJbmRl
eFNob3VsZFRocm93LCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CisgICAgICAgICAgICBy
ZXR1cm4gcmVqZWN0KGV4ZWMsIHNjb3BlLCBzaG91bGRUaHJvdywgQVNDSUlMaXRlcmFsKFJlYWRv
bmx5UHJvcGVydHlXcml0ZUVycm9yKSk7CiAgICAgfQogICAgIGVudHJ5LmF0dHJpYnV0ZXMgPSBh
dHRyaWJ1dGVzOwotICAgIGVudHJ5LnNldChleGVjLT52bSgpLCB0aGlzLCB2YWx1ZSk7CisgICAg
ZW50cnkuc2V0KHZtLCB0aGlzLCB2YWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE1
NywxMSArMTU5LDggQEAgYm9vbCBTcGFyc2VBcnJheUVudHJ5OjpwdXQoRXhlY1N0YXRlKiBleAog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGlmICghKGF0
dHJpYnV0ZXMgJiBBY2Nlc3NvcikpIHsKLSAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBSZWFkT25s
eSkgewotICAgICAgICAgICAgaWYgKHNob3VsZFRocm93KQotICAgICAgICAgICAgICAgIHRocm93
VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7Ci0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMg
JiBSZWFkT25seSkKKyAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgc2NvcGUsIHNob3Vs
ZFRocm93LCBBU0NJSUxpdGVyYWwoUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpKTsKIAogICAg
ICAgICBzZXQodm0sIG1hcCwgdmFsdWUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmNwcAkocmV2aXNp
b24gMjA3Mzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsMTEgKzcwLDggQEAgYm9vbCBTdHJpbmdPYmplY3Q6
OnB1dChKU0NlbGwqIGNlbGwsIEV4ZQogICAgIGlmIChVTkxJS0VMWShpc1RoaXNWYWx1ZUFsdGVy
ZWQoc2xvdCwgdGhpc09iamVjdCkpKQogICAgICAgICByZXR1cm4gb3JkaW5hcnlTZXRTbG93KGV4
ZWMsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QudGhpc1ZhbHVlKCksIHNs
b3QuaXNTdHJpY3RNb2RlKCkpOwogCi0gICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkubGVuZ3RoKSB7Ci0gICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQot
ICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIFJlYWRvbmx5UHJvcGVydHlX
cml0ZUVycm9yKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICBpZiAocHJvcGVy
dHlOYW1lID09IHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCkKKyAgICAgICAgcmV0dXJuIHJlamVj
dChleGVjLCBzY29wZSwgc2xvdC5pc1N0cmljdE1vZGUoKSwgQVNDSUlMaXRlcmFsKFJlYWRvbmx5
UHJvcGVydHlXcml0ZUVycm9yKSk7CiAgICAgaWYgKE9wdGlvbmFsPHVpbnQzMl90PiBpbmRleCA9
IHBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSkKICAgICAgICAgcmV0dXJuIHB1dEJ5SW5kZXgoY2Vs
bCwgZXhlYywgaW5kZXgudmFsdWUoKSwgdmFsdWUsIHNsb3QuaXNTdHJpY3RNb2RlKCkpOwogICAg
IHJldHVybiBKU09iamVjdDo6cHV0KGNlbGwsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNs
b3QpOwpAQCAtODYsMTEgKzgzLDggQEAgYm9vbCBTdHJpbmdPYmplY3Q6OnB1dEJ5SW5kZXgoSlND
ZWxsKiBjZQogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAg
IFN0cmluZ09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxTdHJpbmdPYmplY3QqPihjZWxsKTsK
LSAgICBpZiAodGhpc09iamVjdC0+aW50ZXJuYWxWYWx1ZSgpLT5jYW5HZXRJbmRleChwcm9wZXJ0
eU5hbWUpKSB7Ci0gICAgICAgIGlmIChzaG91bGRUaHJvdykKLSAgICAgICAgICAgIHRocm93VHlw
ZUVycm9yKGV4ZWMsIHNjb3BlLCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgaWYgKHRoaXNPYmplY3QtPmludGVybmFsVmFsdWUo
KS0+Y2FuR2V0SW5kZXgocHJvcGVydHlOYW1lKSkKKyAgICAgICAgcmV0dXJuIHJlamVjdChleGVj
LCBzY29wZSwgc2hvdWxkVGhyb3csIEFTQ0lJTGl0ZXJhbChSZWFkb25seVByb3BlcnR5V3JpdGVF
cnJvcikpOwogICAgIHJldHVybiBKU09iamVjdDo6cHV0QnlJbmRleChjZWxsLCBleGVjLCBwcm9w
ZXJ0eU5hbWUsIHZhbHVlLCBzaG91bGRUaHJvdyk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N5bWJvbENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9u
IDIwNzM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbENvbnN0cnVj
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDcgKzEwNyw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgc3ltYm9sQ29uc3QKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKFN5
bWJvbDo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4ZWMtPnZtKCkuc3ltYm9sUmVnaXN0cnkoKS5zeW1i
b2xGb3JLZXkoc3RyaW5nKSkpOwogfQogCi1jb25zdCBjaGFyKiBTeW1ib2xLZXlGb3JUeXBlRXJy
b3IgPSAiU3ltYm9sLmtleUZvciByZXF1aXJlcyB0aGF0IHRoZSBmaXJzdCBhcmd1bWVudCBiZSBh
IHN5bWJvbCI7Citjb25zdCBjaGFyKiBjb25zdCBTeW1ib2xLZXlGb3JUeXBlRXJyb3IgPSAiU3lt
Ym9sLmtleUZvciByZXF1aXJlcyB0aGF0IHRoZSBmaXJzdCBhcmd1bWVudCBiZSBhIHN5bWJvbCI7
CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3ltYm9sQ29uc3RydWN0b3JLZXlGb3Io
RXhlY1N0YXRlKiBleGVjKQogewpAQCAtMTE2LDcgKzExNiw3IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgc3ltYm9sQ29uc3QKIAogICAgIEpTVmFsdWUgc3ltYm9sVmFsdWUgPSBleGVj
LT5hcmd1bWVudCgwKTsKICAgICBpZiAoIXN5bWJvbFZhbHVlLmlzU3ltYm9sKCkpCi0gICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIFN5bWJv
bEtleUZvclR5cGVFcnJvcikpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93
VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoU3ltYm9sS2V5Rm9yVHlwZUVycm9y
KSkpOwogCiAgICAgU3ltYm9sSW1wbCYgdWlkID0gYXNTeW1ib2woc3ltYm9sVmFsdWUpLT5wcml2
YXRlTmFtZSgpLnVpZCgpOwogICAgIGlmICghdWlkLnN5bWJvbFJlZ2lzdHJ5KCkpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyMDczNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwxOSBAQAorMjAxNi0xMC0xNSAgTWFyayBMYW0gIDxtYXJr
LmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIHRoZSByZWplY3QoKSBoZWxwZXIgZnVuY3Rp
b24gZm9yIGNvbmRpdGlvbmFsbHkgdGhyb3dpbmcgVHlwZUVycm9ycy4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzQ5MQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNlIHRo
aXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBiZWhhdmlvci4KKworICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpjcmVhdGVSc2FLZXlHZW5QYXJhbXMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSURC
RGF0YWJhc2VDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNJREJEYXRhYmFzZTo6Y3Jl
YXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAqIGJyaWRnZS9jL2NfaW5zdGFuY2UuY3BwOgorICAg
ICAgICAoSlNDOjpCaW5kaW5nczo6Q0luc3RhbmNlOjppbnZva2VNZXRob2QpOgorCiAyMDE2LTEw
LTE1ICBNaWNoYWVsIENhdGFuemFybyAgPG1jYXRhbnphcm9AaWdhbGlhLmNvbT4KIAogICAgICAg
ICBbR1RLXSBSZXN0b3JlIHVzZXIgYWdlbnQgcXVpcmsgZm9yIFlhaG9vCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvQWxnb3JpdGhtRGlj
dGlvbmFyeS5jcHAJKHJldmlzaW9uIDIwNzM3NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0
NCw3ICsyNDQsNyBAQCBzdGF0aWMgUmVmUHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnNECiAK
ICAgICBSZWZQdHI8VWludDhBcnJheT4gcHVibGljRXhwb25lbnRBcnJheSA9IHRvVWludDhBcnJh
eShwdWJsaWNFeHBvbmVudFZhbHVlKTsKICAgICBpZiAoIXB1YmxpY0V4cG9uZW50QXJyYXkpIHsK
LSAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgIkV4cGVjdGVkIGEgVWludDhB
cnJheSBpbiBwdWJsaWNFeHBvbmVudCIpOworICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUs
IHNjb3BlLCBBU0NJSUxpdGVyYWwoIkV4cGVjdGVkIGEgVWludDhBcnJheSBpbiBwdWJsaWNFeHBv
bmVudCIpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIHJlc3VsdC0+cHVi
bGljRXhwb25lbnQuYXBwZW5kKHB1YmxpY0V4cG9uZW50QXJyYXktPmRhdGEoKSwgcHVibGljRXhw
b25lbnRBcnJheS0+Ynl0ZUxlbmd0aCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTSURCRGF0YWJhc2VDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTSURCRGF0YWJhc2VDdXN0b20uY3BwCShyZXZpc2lvbiAyMDczNzYpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkRhdGFiYXNlQ3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBKU1ZhbHVlIEpTSURCRGF0YWJhc2U6OmNyZWF0
ZU9iamVjdFN0b3JlCiAKICAgICBKU1ZhbHVlIG9wdGlvbnNWYWx1ZSA9IHN0YXRlLmFyZ3VtZW50
KDEpOwogICAgIGlmICghb3B0aW9uc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkgJiYgIW9wdGlv
bnNWYWx1ZS5pc09iamVjdCgpKQotICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoJnN0YXRl
LCBzY29wZSwgIk5vdCBhbiBvYmplY3QuIik7CisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJv
cigmc3RhdGUsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIk5vdCBhbiBvYmplY3QuIikpOwogCiAgICAg
SURCS2V5UGF0aCBrZXlQYXRoOwogICAgIGJvb2wgYXV0b0luY3JlbWVudCA9IGZhbHNlOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY19pbnN0YW5jZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY19pbnN0YW5jZS5jcHAJKHJldmlzaW9uIDIwNzM3NikK
KysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfaW5zdGFuY2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNjAsNyArMTYwLDcgQEAgSlNWYWx1ZSBDSW5zdGFuY2U6Omludm9rZU1ldGhvZChFeGVj
U3RhdAogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGlm
ICghYXNPYmplY3QocnVudGltZU1ldGhvZCktPmluaGVyaXRzKENSdW50aW1lTWV0aG9kOjppbmZv
KCkpKQotICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsICJBdHRlbXB0
IHRvIGludm9rZSBub24tcGx1Zy1pbiBtZXRob2Qgb24gcGx1Zy1pbiBvYmplY3QuIik7CisgICAg
ICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJBdHRl
bXB0IHRvIGludm9rZSBub24tcGx1Zy1pbiBtZXRob2Qgb24gcGx1Zy1pbiBvYmplY3QuIikpOwog
CiAgICAgQ01ldGhvZCogbWV0aG9kID0gc3RhdGljX2Nhc3Q8Q01ldGhvZCo+KHJ1bnRpbWVNZXRo
b2QtPm1ldGhvZCgpKTsKICAgICBBU1NFUlQobWV0aG9kKTsK
</data>
<flag name="review"
          id="314833"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
      

    </bug>

</bugzilla>