<?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>176707</bug_id>
          
          <creation_ts>2017-09-11 10:08:52 -0700</creation_ts>
          <short_desc>WSL IntLiteralType should become int32 if unified with a type variable</short_desc>
          <delta_ts>2018-10-13 16:47:33 -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>WebGPU</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>176199</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>keith_miller</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1347442</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-11 10:08:52 -0700</bug_when>
    <thetext>This requires two changes:

- TypeVariable in parameter position needs to be happy about being unified with an IntLiteralType.  It probably already is.
- IntLiteralType in argument position needs to be happy with being unified with a TypeVariable or with itself.  In either case, it needs to just become an int32.

Tricky case: if IntLiteralType is unified with a TypeVariable, it needs to check that this type variable is in parameter position.  Otherwise it means this:

void foo&lt;U&gt;(U, U);
void bar&lt;T&gt;(T x) { foo(42, x); } 

Here, 42 will get unified with T.  This is invalid.  If T is the root of the equivalence set then we need to rely on 42&apos;s argument position validation to observe that it got unified with a TypeVariable in argument position, which means constraint failure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348814</commentid>
    <comment_count>1</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-14 09:47:54 -0700</bug_when>
    <thetext>An even easier approach is to teach UnificationContext that during verification, it should ask all literals to select a more specific type.  They don&apos;t have to do it if they don&apos;t want to.

This has to be done in two phases.  First all of the literals that were involved in unification have to be given an opportunity to observe that they are unified with a literal or type variable.  If they are, then they can sign up to be part of a pre-verification pass.

Once all literals have been given a chance to sign up, then we run the pre-verification pass, where they all try to unify themselves with a more specific type of their choosing.  This could fail, if two literals are involved in a unifying call:

void foo&lt;T&gt;(T, T);

foo(0, 0.);

We&apos;ll almost certainly want 0. to be a floatLiteralType that can unify with a variety of different types.  Maybe we want 0u to behave like that also.  So, what could happen here is that both intLiteralType and floatLiteralType observe that they are unified with T, and then they will both want to select their more specific types.  At this point, unless we do a two-phase approach, we could have undecidability: depending on whether intLiteralType or floatLiteralType is picked first, that one could determine the type that T becomes.  This means that the program will either type check and use T=double (if floatLiteralType runs first), or it will not type check because intLiteralType ran first, unified with int32, and then floatLiteralType&apos;s pre-verification would say &quot;oh, OK, I&apos;m unified with something that isn&apos;t a floatLiteralType or TypeVariable so I have nothing to do&quot;. Then during actual verification, floatLiteralType would observe that it got unified with int32, which is wrong.

The two-phase approach ensures that both intLiteralType and floatLiteralType sign up for unifying, and then it&apos;s guaranteed that they will detect the type error no matter what order they run in.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348853</commentid>
    <comment_count>2</comment_count>
      <attachid>320788</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-14 10:52:08 -0700</bug_when>
    <thetext>Created attachment 320788
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348855</commentid>
    <comment_count>3</comment_count>
      <attachid>320788</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-14 10:53:14 -0700</bug_when>
    <thetext>Comment on attachment 320788
the patch

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

&gt; Tools/WebGPUShadingLanguageRI/Type.js:41
&gt; +    // This query assumes that the receiver type is to be used as a substitution for a type variable that was
&gt; +    // declared to inherit this protocol. So, if upon unification with a type variable, the receiver type would
&gt; +    // have chosen a subtype of itself, then it should handle this query by delegating it to that subtype. One
&gt; +    // example is how intLiteralType becomes int32 (a subtype) when it is substituted for a TypeVariable. This
&gt; +    // is not to say that the language supports subtyping everywhere, since declared types never experience
&gt; +    // subtyping. Subtyping only emerges for literal types like nullType and intLiteralType.

I will revert.  This comment is wrong; I wrote it as I was exploring an alternate approach.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348860</commentid>
    <comment_count>4</comment_count>
      <attachid>320791</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-14 10:54:41 -0700</bug_when>
    <thetext>Created attachment 320791
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348893</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-14 11:34:50 -0700</bug_when>
    <thetext>Landed in https://trac.webkit.org/changeset/222038/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348895</commentid>
    <comment_count>6</comment_count>
      <attachid>320791</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-09-14 11:37:46 -0700</bug_when>
    <thetext>Comment on attachment 320791
the patch

seems reasonable. r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1353768</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-09-27 13:01:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/34694485&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1468939</commentid>
    <comment_count>8</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2018-10-13 16:47:33 -0700</bug_when>
    <thetext>Migrated to https://github.com/gpuweb/WHLSL/issues/140</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>320788</attachid>
            <date>2017-09-14 10:52:08 -0700</date>
            <delta_ts>2017-09-14 10:54:41 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>38988</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIyMjAzMCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE1MiBAQAorMjAxNy0wOS0xNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgor
CisgICAgICAgIFdTTCBJbnRMaXRlcmFsVHlwZSBzaG91bGQgYmVjb21lIGludDMyIGlmIHVuaWZp
ZWQgd2l0aCBhIHR5cGUgdmFyaWFibGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE3NjcwNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorICAgICAgICAKKyAgICAgICAgVGhpcyBtYWtlcyBpdCBzbyB0aGF0IHRoaXMgd29ya3M6
CisgICAgICAgIAorICAgICAgICAgICAgVCBmb288VD4oVCB4KSB7IHJldHVybiB4OyB9CisgICAg
ICAgICAgICBmb28oNDIpOyAvLyBUIGJlY29tZXMgaW50MzIKKyAgICAgICAgCisgICAgICAgIFBy
ZXZpb3VzbHksIGl0IGRpZCBub3Qgd29yayBiZWNhdXNlIEludExpdGVyYWxUeXBlIGRpZCBub3Qg
cmVjb2duaXplIFR5cGVWYXJpYWJsZSBhcyBhIG51bWJlci4gQWxzbywKKyAgICAgICAgVHlwZVZh
cmlhYmxlIHdvdWxkIHRyeSB0byBldmFsdWF0ZSBwcm90b2NvbCBpbmhlcml0YW5jZSBvZiBJbnRM
aXRlcmFsVHlwZSwgd2hpY2ggd291bGQgbm90IGdvIHdlbGwuIE9uZQorICAgICAgICBvZiB0aGUg
dGVzdHMgdGhhdCB0aGlzIHBhdGNoIGFkZHMgZGlkbid0IGp1c3QgZmFpbDsgaXQgZ2F2ZSBzdWNo
IGFuIGFic3VyZCA3LWxpbmUgdHlwZSBlcnJvciB0aGF0IEkgZmVsdAorICAgICAgICBsaWtlIEkg
d2FzIHVzaW5nIFNNTC4KKyAgICAgICAgCisgICAgICAgIFRoaXMgZml4ZXMgdGhlIHByb2JsZW0g
YnkgaW50cm9kdWNpbmcgd2hhdCBJIHRoaW5rIGlzIGEgc3VwZXIgZGV0ZXJtaW5pc3RpYyB3YXkg
b2YgaGFuZGxpbmcgbGl0ZXJhbHMgYW5kCisgICAgICAgIHR5cGUgdmFyaWFibGVzOgorICAgICAg
ICAKKyAgICAgICAgQmVmb3JlIHZlcmlmeWluZyBhIHVuaWZpY2F0aW9uIGNvbnRleHQsIHdlIG5v
dyBnaXZlIGFsbCBsaXRlcmFscyBhIGNoYW5jZSB0byBwZXJmb3JtIGFuIGV4dHJhIAorICAgICAg
ICB1bmlmaWNhdGlvbiBzdGVwLiBUaGlzIGlzIGEgdHdvLXBoYXNlIHByb2Nlc3MuIFRoaXMgZW5z
dXJlcyB0aGF0IHRoZSB1bmlmaWNhdGlvbiBwZXJmb3JtZWQgYnkgb25lIAorICAgICAgICBsaXRl
cmFsIGRvZXMgbm90IHRocm93IG9mZiB0aGUgbG9naWMgb2Ygc29tZSBvdGhlciBsaXRlcmFsLiBG
b3IgZXhhbXBsZSwgaWYgd2UgZG86CisgICAgICAgIAorICAgICAgICAgICAgdm9pZCBmb288VD4o
VCwgVCkgeyB9CisgICAgICAgICAgICBmb28oNDIsIDQydSk7CisgICAgICAgIAorICAgICAgICBU
aGVuIHdlIHdhbnQgdG8gYWx3YXlzIGZhaWwgdG8gY29tcGlsZSwgcmF0aGVyIHRoYW4gc29tZXRp
bWVzIHN1Y2NlZWRpbmcuIFNvLCB3ZSBmaXJzdCBhc2sgZWFjaCBsaXRlcmFsCisgICAgICAgIGlm
IGl0IHRoaW5rcyB0aGF0IGl0IG5lZWRzIHRvIGRvIGV4dHJhIHVuaWZpY2F0aW9uLiBCb3RoIG9m
IHRoZSBsaXRlcmFscyB3aWxsIHJlcG9ydCB0aGF0IHRoZXkgd2FudCB0bworICAgICAgICBpbiB0
aGlzIGNhc2UsIGJlY2F1c2UgdGhleSB3aWxsIG5vdGljZSB0aGF0IHRoZXkgZ290IHVuaWZpZWQg
d2l0aCBlaXRoZXIgYXQgdHlwZSB2YXJpYWJsZSBvciBhIGxpdGVyYWwsCisgICAgICAgIHdoaWNo
IGlzbid0IHNwZWNpZmljIGVub3VnaC4gVGhlbiBhZnRlciB0aGV5IGFsbCByZWdpc3RlciB0byBk
byBleHRyYSB1bmlmaWNhdGlvbiwgdGhleSB3aWxsIGJvdGggdHJ5IHRvCisgICAgICAgIHVuaWZ5
IHdpdGggdGhlaXIgcHJlZmVycmVkIHR5cGVzIChpbnQzMiBmb3IgNDIsIHVpbnQzMiBmb3IgNDJ1
KS4gVGhlIGZpcnN0IG9uZSB3aWxsIHN1Y2NlZWQsIGFuZCB0aGUKKyAgICAgICAgc2Vjb25kIHdp
bGwgZ2l2ZSBhbiBlcnJvci4KKyAgICAgICAgCisgICAgICAgIFdpdGhvdXQgdGhlIHNwZWNpYWwg
dHdvLXBoYXNlIGFycmFuZ2VtZW50LCBpdCB3YXMgcG9zc2libGUgdG8gZWl0aGVyIGdldCBhIHR5
cGUgZXJyb3Igb3Igbm90IGRlcGVuZGluZyAKKyAgICAgICAgb24gdGhlIG9yZGVyIC0gZm9yIGV4
YW1wbGUgZm9vKDQyLCA0MnUpIG1pZ2h0IGZhaWwgd2hpbGUgZm9vKDQydSwgNDIpIHN1Y2NlZWRz
LiBJdCB3YXMgZGVmaW5pdGVseSBub3QKKyAgICAgICAgZGVjaWRhYmxlLCBhdCBsZWFzdCBub3Qg
dW5sZXNzIHlvdSBtYW5kYXRlIHRoZSB1bmlmaWNhdGlvbiBvcmRlciBhcyBwYXJ0IG9mIHRoZSB0
eXBlIHN5c3RlbSBzcGVjLiBJIAorICAgICAgICB0aGluayB0aGF0IHdvdWxkIGhhdmUgYmVlbiBu
dXRzLgorICAgICAgICAKKyAgICAgICAgQm90aCBJbnRMaXRlcmFsIGFuZCBVaW50TGl0ZXJhbCBh
cmUgbm93ICJmbGV4aWJsZSI7IHRoZSB1aW50IG9uZSB3aWxsIHJlamVjdCBub24taW50IG9yIHNp
Z25lZCBpbnQKKyAgICAgICAgdHlwZXMgYW5kIHdpbGwgcHJlZmVyIHVpbnQsIGJ1dCBvdGhlcndp
c2UgaXQncyB0aGUgc2FtZSBsb2dpYy4gVGhpcyBtZWFucyB0aGF0IHRoaXMgd2lsbCBiZSB2YWxp
ZDoKKyAgICAgICAgCisgICAgICAgICAgICB1aW50OCB4ID0gNXU7CisgICAgICAgIAorICAgICAg
ICBCdXQgdGhpcyBpcyBzdGlsbCB3cm9uZzoKKyAgICAgICAgCisgICAgICAgICAgICBpbnQgeCA9
IDV1OworICAgICAgICAKKyAgICAgICAgVG8gbWFrZSB0aGlzIGVhc3ksIEkgdHVybmVkIEludExp
dGVyYWwgYW5kIFVpbnRMaXRlcmFsIChhbmQgSW50TGl0ZXJhbFR5cGUgYW5kIFVpbnRMaXRlcmFs
VHlwZSkgaW50bworICAgICAgICBmYWN0b3J5LWJ1aWx0IGdlbmVyaWMgdHlwZXMgKHNlZSBjcmVh
dGVMaXRlcmFsKCkgYW5kIGNyZWF0ZUxpdGVyYWxUeXBlKCkpLiBCZWNhdXNlIHZpc2l0b3JzIHVz
ZSB0aGUKKyAgICAgICAgY29uc3RydWN0b3IncyBkZWNsYXJlZCBuYW1lIChHZW5lcmljTGl0ZXJh
bCBhbmQgR2VuZXJpY0xpdGVyYWxUeXBlIGluIHRoaXMgY2FzZSksIGl0IG1lYW5zIHRoYXQgd2Ug
Y2FuCisgICAgICAgIHNoYXJlIGEgdG9uIG9mIGNvZGUgYmV0d2VlbiB0aGUgZGlmZmVyZW50IGxp
dGVyYWxzLiBJIGxvdmUgdGhhdCBFUzYgbGV0cyB5b3UgZG8gdGhhdC4KKworICAgICAgICAqIFdl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FsbC5qczoKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9DaGVja2VyLmpzOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Ny
ZWF0ZUxpdGVyYWwuanM6IEFkZGVkLgorICAgICAgICAoY3JlYXRlTGl0ZXJhbC5HZW5lcmljTGl0
ZXJhbCk6CisgICAgICAgIChjcmVhdGVMaXRlcmFsLkdlbmVyaWNMaXRlcmFsLnByb3RvdHlwZS5n
ZXQgdmFsdWUpOgorICAgICAgICAoY3JlYXRlTGl0ZXJhbC5HZW5lcmljTGl0ZXJhbC5wcm90b3R5
cGUuZ2V0IGlzQ29uc3RleHByKToKKyAgICAgICAgKGNyZWF0ZUxpdGVyYWwuR2VuZXJpY0xpdGVy
YWwucHJvdG90eXBlLnRvU3RyaW5nKToKKyAgICAgICAgKGNyZWF0ZUxpdGVyYWwpOgorICAgICAg
ICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NyZWF0ZUxpdGVyYWxUeXBlLmpzOiBBZGRlZC4K
KyAgICAgICAgKGNyZWF0ZUxpdGVyYWxUeXBlLkdlbmVyaWNMaXRlcmFsVHlwZSk6CisgICAgICAg
IChjcmVhdGVMaXRlcmFsVHlwZS5HZW5lcmljTGl0ZXJhbFR5cGUucHJvdG90eXBlLmdldCBvcmln
aW4pOgorICAgICAgICAoY3JlYXRlTGl0ZXJhbFR5cGUuR2VuZXJpY0xpdGVyYWxUeXBlLnByb3Rv
dHlwZS5nZXQgdmFsdWUpOgorICAgICAgICAoY3JlYXRlTGl0ZXJhbFR5cGUuR2VuZXJpY0xpdGVy
YWxUeXBlLnByb3RvdHlwZS5nZXQgaXNQcmltaXRpdmUpOgorICAgICAgICAoY3JlYXRlTGl0ZXJh
bFR5cGUuR2VuZXJpY0xpdGVyYWxUeXBlLnByb3RvdHlwZS5nZXQgaXNVbmlmaWFibGUpOgorICAg
ICAgICAoY3JlYXRlTGl0ZXJhbFR5cGUuR2VuZXJpY0xpdGVyYWxUeXBlLnByb3RvdHlwZS5nZXQg
aXNMaXRlcmFsKToKKyAgICAgICAgKGNyZWF0ZUxpdGVyYWxUeXBlLkdlbmVyaWNMaXRlcmFsVHlw
ZS5wcm90b3R5cGUudHlwZVZhcmlhYmxlVW5pZnkpOgorICAgICAgICAoY3JlYXRlTGl0ZXJhbFR5
cGUuR2VuZXJpY0xpdGVyYWxUeXBlLnByb3RvdHlwZS51bmlmeUltcGwpOgorICAgICAgICAoY3Jl
YXRlTGl0ZXJhbFR5cGUuR2VuZXJpY0xpdGVyYWxUeXBlLnByb3RvdHlwZS5wcmVwYXJlVG9WZXJp
ZnkpOgorICAgICAgICAoY3JlYXRlTGl0ZXJhbFR5cGUuR2VuZXJpY0xpdGVyYWxUeXBlLnByb3Rv
dHlwZS52ZXJpZnlBc0FyZ3VtZW50KToKKyAgICAgICAgKGNyZWF0ZUxpdGVyYWxUeXBlLkdlbmVy
aWNMaXRlcmFsVHlwZS5wcm90b3R5cGUudmVyaWZ5QXNQYXJhbWV0ZXIpOgorICAgICAgICAoY3Jl
YXRlTGl0ZXJhbFR5cGUuR2VuZXJpY0xpdGVyYWxUeXBlLnByb3RvdHlwZS5jb252ZXJzaW9uQ29z
dCk6CisgICAgICAgIChjcmVhdGVMaXRlcmFsVHlwZS5HZW5lcmljTGl0ZXJhbFR5cGUucHJvdG90
eXBlLmNvbW1pdFVuaWZpY2F0aW9uKToKKyAgICAgICAgKGNyZWF0ZUxpdGVyYWxUeXBlLkdlbmVy
aWNMaXRlcmFsVHlwZS5wcm90b3R5cGUudG9TdHJpbmcpOgorICAgICAgICAoY3JlYXRlTGl0ZXJh
bFR5cGUpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0V2YWx1YXRvci5qczoK
KyAgICAgICAgKEV2YWx1YXRvci5wcm90b3R5cGUudmlzaXRJbnRMaXRlcmFsKTogRGVsZXRlZC4K
KyAgICAgICAgKEV2YWx1YXRvci5wcm90b3R5cGUudmlzaXRVaW50TGl0ZXJhbCk6IERlbGV0ZWQu
CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW50TGl0ZXJhbC5qczoKKyAgICAg
ICAgKGxldC5JbnRMaXRlcmFsLmNyZWF0ZUxpdGVyYWwuY3JlYXRlVHlwZSk6CisgICAgICAgIChJ
bnRMaXRlcmFsKTogRGVsZXRlZC4KKyAgICAgICAgKEludExpdGVyYWwucHJvdG90eXBlLmdldCB2
YWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChJbnRMaXRlcmFsLnByb3RvdHlwZS5nZXQgaXNDb25z
dGV4cHIpOiBEZWxldGVkLgorICAgICAgICAoSW50TGl0ZXJhbC5wcm90b3R5cGUudG9TdHJpbmcp
OiBEZWxldGVkLgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0ludExpdGVyYWxU
eXBlLmpzOgorICAgICAgICAoSW50TGl0ZXJhbFR5cGUpOiBEZWxldGVkLgorICAgICAgICAoSW50
TGl0ZXJhbFR5cGUucHJvdG90eXBlLmdldCBvcmlnaW4pOiBEZWxldGVkLgorICAgICAgICAoSW50
TGl0ZXJhbFR5cGUucHJvdG90eXBlLmdldCB2YWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChJbnRM
aXRlcmFsVHlwZS5wcm90b3R5cGUuZ2V0IGlzUHJpbWl0aXZlKTogRGVsZXRlZC4KKyAgICAgICAg
KEludExpdGVyYWxUeXBlLnByb3RvdHlwZS5nZXQgaXNVbmlmaWFibGUpOiBEZWxldGVkLgorICAg
ICAgICAoSW50TGl0ZXJhbFR5cGUucHJvdG90eXBlLnR5cGVWYXJpYWJsZVVuaWZ5KTogRGVsZXRl
ZC4KKyAgICAgICAgKEludExpdGVyYWxUeXBlLnByb3RvdHlwZS51bmlmeUltcGwpOiBEZWxldGVk
LgorICAgICAgICAoSW50TGl0ZXJhbFR5cGUucHJvdG90eXBlLnZlcmlmeUFzQXJndW1lbnQpOiBE
ZWxldGVkLgorICAgICAgICAoSW50TGl0ZXJhbFR5cGUucHJvdG90eXBlLnZlcmlmeUFzUGFyYW1l
dGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEludExpdGVyYWxUeXBlLnByb3RvdHlwZS5jb252ZXJz
aW9uQ29zdCk6IERlbGV0ZWQuCisgICAgICAgIChJbnRMaXRlcmFsVHlwZS5wcm90b3R5cGUuY29t
bWl0VW5pZmljYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoSW50TGl0ZXJhbFR5cGUucHJvdG90
eXBlLnRvU3RyaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9JbnRyaW5zaWNzLmpzOgorICAgICAgICAoSW50cmluc2ljcyk6CisgICAgICAgICogV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvTGl0ZXJhbFR5cGVDaGVja2VyLmpzOgorICAgICAgICAoTGl0ZXJh
bFR5cGVDaGVja2VyLnByb3RvdHlwZS52aXNpdEludExpdGVyYWxUeXBlKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Ob2RlLmpzOgorICAgICAgICAoTm9kZS5w
cm90b3R5cGUucHJlcGFyZVRvVmVyaWZ5KToKKyAgICAgICAgKE5vZGUucHJvdG90eXBlLmNvbW1p
dFVuaWZpY2F0aW9uKToKKyAgICAgICAgKE5vZGUucHJvdG90eXBlLmdldCBpc0xpdGVyYWwpOgor
ICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL051bGxUeXBlLmpzOgorICAgICAgICAo
TnVsbFR5cGUucHJvdG90eXBlLmdldCBpc0xpdGVyYWwpOgorICAgICAgICAoTnVsbFR5cGUucHJv
dG90eXBlLnRvU3RyaW5nKToKKyAgICAgICAgKE51bGxUeXBlKToKKyAgICAgICAgKiBXZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9QYXJzZS5qczoKKyAgICAgICAgKHBhcnNlVGVybSk6CisgICAgICAg
ICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmV3cml0ZXIuanM6CisgICAgICAgIChSZXdyaXRl
ci5wcm90b3R5cGUudmlzaXRHZW5lcmljTGl0ZXJhbFR5cGUpOgorICAgICAgICAoUmV3cml0ZXIu
cHJvdG90eXBlLnZpc2l0SW50TGl0ZXJhbCk6IERlbGV0ZWQuCisgICAgICAgIChSZXdyaXRlci5w
cm90b3R5cGUudmlzaXRJbnRMaXRlcmFsVHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChSZXdyaXRl
ci5wcm90b3R5cGUudmlzaXRVaW50TGl0ZXJhbCk6IERlbGV0ZWQuCisgICAgICAgIChSZXdyaXRl
ci5wcm90b3R5cGUudmlzaXRCb29sTGl0ZXJhbCk6IERlbGV0ZWQuCisgICAgICAgICogV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5odG1sOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL1Rlc3QuanM6CisgICAgICAgIChtYWtlVWludCk6CisgICAgICAgIChjaGVja1VpbnQp
OgorICAgICAgICAoVEVTVF91aW50U2ltcGxlTWF0aCk6CisgICAgICAgIChURVNUX2VxdWFsaXR5
KToKKyAgICAgICAgKFRFU1Rfbm90RXF1YWxpdHkpOgorICAgICAgICAoVEVTVF9pbnRMaXRlcmFs
R2VuZXJpYyk6CisgICAgICAgIChURVNUX2ludExpdGVyYWxHZW5lcmljV2l0aFByb3RvY29scyk6
CisgICAgICAgIChURVNUX3VpbnRMaXRlcmFsR2VuZXJpYyk6CisgICAgICAgIChURVNUX3VpbnRM
aXRlcmFsR2VuZXJpY1dpdGhQcm90b2NvbHMpOgorICAgICAgICAoVEVTVF9pbnRMaXRlcmFsR2Vu
ZXJpY1NwZWNpZmljKToKKyAgICAgICAgKFRFU1RfdHdvSW50TGl0ZXJhbHMpOgorICAgICAgICAo
VEVTVF91bmlmeURpZmZlcmVudExpdGVyYWxzKToKKyAgICAgICAgKG1ha2VVSW50KTogRGVsZXRl
ZC4KKyAgICAgICAgKGNoZWNrVUludCk6IERlbGV0ZWQuCisgICAgICAgICogV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvVHlwZS5qczoKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9V
aW50TGl0ZXJhbC5qczoKKyAgICAgICAgKGxldC5VaW50TGl0ZXJhbC5jcmVhdGVMaXRlcmFsLmNy
ZWF0ZVR5cGUpOgorICAgICAgICAoVWludExpdGVyYWwpOiBEZWxldGVkLgorICAgICAgICAoVWlu
dExpdGVyYWwucHJvdG90eXBlLmdldCB2YWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChVaW50TGl0
ZXJhbC5wcm90b3R5cGUuZ2V0IGlzQ29uc3RleHByKTogRGVsZXRlZC4KKyAgICAgICAgKFVpbnRM
aXRlcmFsLnByb3RvdHlwZS50b1N0cmluZyk6IERlbGV0ZWQuCisgICAgICAgICogV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvVWludExpdGVyYWxUeXBlLmpzOiBBZGRlZC4KKyAgICAgICAgKGxldC5V
aW50TGl0ZXJhbFR5cGUuY3JlYXRlTGl0ZXJhbFR5cGUudmVyaWZ5QXNBcmd1bWVudCk6CisgICAg
ICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVW5pZmljYXRpb25Db250ZXh0LmpzOgorICAg
ICAgICAoVW5pZmljYXRpb25Db250ZXh0LnByb3RvdHlwZS52ZXJpZnkpOgorICAgICAgICAqIFdl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Zpc2l0b3IuanM6CisgICAgICAgIChWaXNpdG9yLnByb3Rv
dHlwZS52aXNpdFByb3RvY29sRGVjbCk6CisKIDIwMTctMDktMTQgIEZpbGlwIFBpemxvICA8ZnBp
emxvQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBmaXggYSB0eXBvIHRoYXQgd2Fz
IHByZXZlbnRpbmcgYSB0ZXN0IGZyb20gcnVubmluZy4KSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL0FsbC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9BbGwuanMJKHJldmlzaW9uIDIyMjAyMSkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL0FsbC5qcwkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsOCBAQCBsb2FkKCJF
eHByZXNzaW9uLmpzIik7CiBsb2FkKCJWaXNpdG9yQmFzZS5qcyIpOwogbG9hZCgiUmV3cml0ZXIu
anMiKTsKIGxvYWQoIlZpc2l0b3IuanMiKTsKK2xvYWQoIkNyZWF0ZUxpdGVyYWwuanMiKTsKK2xv
YWQoIkNyZWF0ZUxpdGVyYWxUeXBlLmpzIik7CiAKIGxvYWQoIkFkZHJlc3NTcGFjZS5qcyIpOwog
bG9hZCgiQXJyYXlSZWZUeXBlLmpzIik7CkBAIC0xMjMsNiArMTI1LDcgQEAgbG9hZCgiVHlwZVJl
Zi5qcyIpOwogbG9hZCgiVHlwZVZhcmlhYmxlLmpzIik7CiBsb2FkKCJUeXBlZFZhbHVlLmpzIik7
CiBsb2FkKCJVaW50TGl0ZXJhbC5qcyIpOworbG9hZCgiVWludExpdGVyYWxUeXBlLmpzIik7CiBs
b2FkKCJVbmlmaWNhdGlvbkNvbnRleHQuanMiKTsKIGxvYWQoIlVucmVhY2hhYmxlQ29kZUNoZWNr
ZXIuanMiKTsKIGxvYWQoIlZhcmlhYmxlRGVjbC5qcyIpOwpJbmRleDogVG9vbHMvV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvQ2hlY2tlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9DaGVja2VyLmpzCShyZXZpc2lvbiAyMjIwMjEpCisrKyBUb29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9DaGVja2VyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xOTcsMTYg
KzE5NywxMSBAQCBjbGFzcyBDaGVja2VyIGV4dGVuZHMgVmlzaXRvciB7CiAgICAgICAgICAgICB0
aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJOb24tdm9pZCBm
dW5jdGlvbiBtdXN0IHJldHVybiBhIHZhbHVlIik7CiAgICAgfQogICAgIAotICAgIHZpc2l0SW50
TGl0ZXJhbChub2RlKQorICAgIHZpc2l0R2VuZXJpY0xpdGVyYWwobm9kZSkKICAgICB7CiAgICAg
ICAgIHJldHVybiBub2RlLnR5cGU7CiAgICAgfQogICAgIAotICAgIHZpc2l0VWludExpdGVyYWwo
bm9kZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9wcm9ncmFtLmludHJpbnNpY3MudWlu
dDMyOwotICAgIH0KLSAgICAKICAgICB2aXNpdE51bGxMaXRlcmFsKG5vZGUpCiAgICAgewogICAg
ICAgICByZXR1cm4gbm9kZS50eXBlOwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvQ3JlYXRlTGl0ZXJhbC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9DcmVhdGVMaXRlcmFsLmpzCShub25leGlzdGVudCkKKysrIFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL0NyZWF0ZUxpdGVyYWwuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworInVz
ZSBzdHJpY3QiOworCitmdW5jdGlvbiBjcmVhdGVMaXRlcmFsKGNvbmZpZykKK3sKKyAgICBjbGFz
cyBHZW5lcmljTGl0ZXJhbCBleHRlbmRzIEV4cHJlc3Npb24geworICAgICAgICBjb25zdHJ1Y3Rv
cihvcmlnaW4sIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBzdXBlcihvcmlnaW4pOwor
ICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgICAgIHRoaXMudHlwZSA9
IGNvbmZpZy5jcmVhdGVUeXBlLmNhbGwodGhpcywgb3JpZ2luLCB2YWx1ZSk7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIGdldCB2YWx1ZSgpIHsgcmV0dXJuIHRoaXMuX3ZhbHVlOyB9Cisg
ICAgICAgIGdldCBpc0NvbnN0ZXhwcigpIHsgcmV0dXJuIHRydWU7IH0KKyAgICAgICAgCisgICAg
ICAgIHRvU3RyaW5nKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGNvbmZpZy5wcmVm
ZXJyZWRUeXBlTmFtZSArICJMaXRlcmFsPCIgKyB0aGlzLnZhbHVlICsgIj4iOworICAgICAgICB9
CisgICAgfQorICAgIAorICAgIHJldHVybiBHZW5lcmljTGl0ZXJhbDsKK30KKwpJbmRleDogVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ3JlYXRlTGl0ZXJhbFR5cGUuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ3JlYXRlTGl0ZXJhbFR5cGUuanMJ
KG5vbmV4aXN0ZW50KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ3JlYXRlTGl0
ZXJhbFR5cGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworZnVuY3Rp
b24gY3JlYXRlTGl0ZXJhbFR5cGUoY29uZmlnKQoreworICAgIGNsYXNzIEdlbmVyaWNMaXRlcmFs
VHlwZSBleHRlbmRzIFR5cGUgeworICAgICAgICBjb25zdHJ1Y3RvcihvcmlnaW4sIHZhbHVlKQor
ICAgICAgICB7CisgICAgICAgICAgICBzdXBlcigpOworICAgICAgICAgICAgdGhpcy5fb3JpZ2lu
ID0gb3JpZ2luOworICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgICAg
IHRoaXMucHJlZmVycmVkVHlwZSA9IG5ldyBUeXBlUmVmKG9yaWdpbiwgY29uZmlnLnByZWZlcnJl
ZFR5cGVOYW1lLCBbXSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGdldCBvcmlnaW4o
KSB7IHJldHVybiB0aGlzLl9vcmlnaW47IH0KKyAgICAgICAgZ2V0IHZhbHVlKCkgeyByZXR1cm4g
dGhpcy5fdmFsdWU7IH0KKyAgICAgICAgCisgICAgICAgIGdldCBpc1ByaW1pdGl2ZSgpIHsgcmV0
dXJuIHRydWU7IH0KKyAgICAgICAgZ2V0IGlzVW5pZmlhYmxlKCkgeyByZXR1cm4gdHJ1ZTsgfQor
ICAgICAgICBnZXQgaXNMaXRlcmFsKCkgeyByZXR1cm4gdHJ1ZTsgfQorICAgICAgICAKKyAgICAg
ICAgdHlwZVZhcmlhYmxlVW5pZnkodW5pZmljYXRpb25Db250ZXh0LCBvdGhlcikKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKCEob3RoZXIgaW5zdGFuY2VvZiBUeXBlKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiB0aGlz
Ll90eXBlVmFyaWFibGVVbmlmeUltcGwodW5pZmljYXRpb25Db250ZXh0LCBvdGhlcik7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIHVuaWZ5SW1wbCh1bmlmaWNhdGlvbkNvbnRleHQsIG90
aGVyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy50eXBlVmFyaWFibGVVbmlm
eSh1bmlmaWNhdGlvbkNvbnRleHQsIG90aGVyKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgcHJlcGFyZVRvVmVyaWZ5KHVuaWZpY2F0aW9uQ29udGV4dCkKKyAgICAgICAgeworICAgICAg
ICAgICAgbGV0IHJlYWxUaGlzID0gdW5pZmljYXRpb25Db250ZXh0LmZpbmQodGhpcyk7CisgICAg
ICAgICAgICBpZiAocmVhbFRoaXMgaW5zdGFuY2VvZiBUeXBlVmFyaWFibGUgfHwgcmVhbFRoaXMu
aXNMaXRlcmFsKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICgpID0+IHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHJlYWxUaGlzLnVuaWZ5KHVuaWZpY2F0aW9uQ29udGV4dCwgdGhpcy5wcmVm
ZXJyZWRUeXBlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7cmVzdWx0OiB0cnVl
fTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtyZXN1bHQ6IGZhbHNlLCByZWFzb246ICJU
eXBlIG1pc21hdGNoIGJldHdlZW4gIiArIHVuaWZpY2F0aW9uQ29udGV4dC5maW5kKHJlYWxUaGlz
KSArICIgYW5kICIgKyB0aGlzLnByZWZlcnJlZFR5cGV9OworICAgICAgICAgICAgICAgIH07Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZlcmlmeUFzQXJndW1l
bnQodW5pZmljYXRpb25Db250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gY29u
ZmlnLnZlcmlmeUFzQXJndW1lbnQuY2FsbCh0aGlzLCB1bmlmaWNhdGlvbkNvbnRleHQpOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICB2ZXJpZnlBc1BhcmFtZXRlcih1bmlmaWNhdGlvbkNv
bnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiR2VuZXJpY0xp
dGVyYWxUeXBlIHNob3VsZCBuZXZlciBiZSB1c2VkIGFzIGEgdHlwZSBwYXJhbWV0ZXIiKTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgY29udmVyc2lvbkNvc3QodW5pZmljYXRpb25Db250
ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBsZXQgcmVhbFRoaXMgPSB1bmlmaWNhdGlvbkNv
bnRleHQuZmluZCh0aGlzKTsKKyAgICAgICAgICAgIGlmIChyZWFsVGhpcy5lcXVhbHModGhpcy5w
cmVmZXJyZWRUeXBlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJl
dHVybiAxOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBjb21taXRVbmlmaWNhdGlvbih1
bmlmaWNhdGlvbkNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRoaXMudHlwZSA9IFR5
cGVSZWYud3JhcCh1bmlmaWNhdGlvbkNvbnRleHQuZmluZCh0aGlzKSk7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIHRvU3RyaW5nKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGNvbmZpZy5wcmVmZXJyZWRUeXBlTmFtZSArICJMaXRlcmFsVHlwZTwiICsgdGhpcy52YWx1ZSAr
ICI+IjsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICByZXR1cm4gR2VuZXJpY0xpdGVyYWxU
eXBlOworfQorCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FdmFsdWF0b3Iu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRXZhbHVhdG9y
LmpzCShyZXZpc2lvbiAyMjIwMjEpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9F
dmFsdWF0b3IuanMJKHdvcmtpbmcgY29weSkKQEAgLTEyNiwxMiArMTI2LDcgQEAgY2xhc3MgRXZh
bHVhdG9yIGV4dGVuZHMgVmlzaXRvciB7CiAgICAgICAgIHJldHVybiBub2RlLnZhcmlhYmxlLmVQ
dHI7CiAgICAgfQogICAgIAotICAgIHZpc2l0SW50TGl0ZXJhbChub2RlKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIEVQdHIuYm94KG5vZGUudmFsdWUpOwotICAgIH0KLSAgICAKLSAgICB2aXNpdFVp
bnRMaXRlcmFsKG5vZGUpCisgICAgdmlzaXRHZW5lcmljTGl0ZXJhbChub2RlKQogICAgIHsKICAg
ICAgICAgcmV0dXJuIEVQdHIuYm94KG5vZGUudmFsdWUpOwogICAgIH0KSW5kZXg6IFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL0ludExpdGVyYWwuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW50TGl0ZXJhbC5qcwkocmV2aXNpb24gMjIyMDIxKQor
KysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW50TGl0ZXJhbC5qcwkod29ya2luZyBj
b3B5KQpAQCAtMjQsMjAgKzI0LDEyIEBACiAgKi8KICJ1c2Ugc3RyaWN0IjsKIAotY2xhc3MgSW50
TGl0ZXJhbCBleHRlbmRzIEV4cHJlc3Npb24gewotICAgIGNvbnN0cnVjdG9yKG9yaWdpbiwgdmFs
dWUpCi0gICAgewotICAgICAgICBzdXBlcihvcmlnaW4pOwotICAgICAgICB0aGlzLl92YWx1ZSA9
IHZhbHVlOwotICAgICAgICB0aGlzLnR5cGUgPSBuZXcgSW50TGl0ZXJhbFR5cGUob3JpZ2luLCB2
YWx1ZSk7Ci0gICAgfQotICAgIAotICAgIGdldCB2YWx1ZSgpIHsgcmV0dXJuIHRoaXMuX3ZhbHVl
OyB9Ci0gICAgZ2V0IGlzQ29uc3RleHByKCkgeyByZXR1cm4gdHJ1ZTsgfQorbGV0IEludExpdGVy
YWwgPSBjcmVhdGVMaXRlcmFsKHsKKyAgICBwcmVmZXJyZWRUeXBlTmFtZTogImludCIsCiAgICAg
Ci0gICAgdG9TdHJpbmcoKQorICAgIGNyZWF0ZVR5cGUob3JpZ2luLCB2YWx1ZSkKICAgICB7Ci0g
ICAgICAgIHJldHVybiAiIiArIHRoaXMudmFsdWU7CisgICAgICAgIHJldHVybiBuZXcgSW50TGl0
ZXJhbFR5cGUob3JpZ2luLCB2YWx1ZSk7CiAgICAgfQotfQorfSk7CiAKSW5kZXg6IFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL0ludExpdGVyYWxUeXBlLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0ludExpdGVyYWxUeXBlLmpzCShyZXZpc2lvbiAy
MjIwMjEpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9JbnRMaXRlcmFsVHlwZS5q
cwkod29ya2luZyBjb3B5KQpAQCAtMjQsMzMgKzI0LDggQEAKICAqLwogInVzZSBzdHJpY3QiOwog
Ci1jbGFzcyBJbnRMaXRlcmFsVHlwZSBleHRlbmRzIFR5cGUgewotICAgIGNvbnN0cnVjdG9yKG9y
aWdpbiwgdmFsdWUpCi0gICAgewotICAgICAgICBzdXBlcigpOwotICAgICAgICB0aGlzLl9vcmln
aW4gPSBvcmlnaW47Ci0gICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7Ci0gICAgICAgIHRoaXMu
aW50VHlwZSA9IG5ldyBUeXBlUmVmKG9yaWdpbiwgImludCIsIFtdKTsKLSAgICB9Ci0gICAgCi0g
ICAgZ2V0IG9yaWdpbigpIHsgcmV0dXJuIHRoaXMuX29yaWdpbjsgfQotICAgIGdldCB2YWx1ZSgp
IHsgcmV0dXJuIHRoaXMuX3ZhbHVlOyB9Ci0gICAgCi0gICAgZ2V0IGlzUHJpbWl0aXZlKCkgeyBy
ZXR1cm4gdHJ1ZTsgfQotICAgIGdldCBpc1VuaWZpYWJsZSgpIHsgcmV0dXJuIHRydWU7IH0KLSAg
ICAKLSAgICB0eXBlVmFyaWFibGVVbmlmeSh1bmlmaWNhdGlvbkNvbnRleHQsIG90aGVyKQotICAg
IHsKLSAgICAgICAgaWYgKCEob3RoZXIgaW5zdGFuY2VvZiBUeXBlKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiB0aGlzLl90eXBlVmFyaWFibGVV
bmlmeUltcGwodW5pZmljYXRpb25Db250ZXh0LCBvdGhlcik7Ci0gICAgfQotICAgIAotICAgIHVu
aWZ5SW1wbCh1bmlmaWNhdGlvbkNvbnRleHQsIG90aGVyKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IHRoaXMudHlwZVZhcmlhYmxlVW5pZnkodW5pZmljYXRpb25Db250ZXh0LCBvdGhlcik7Ci0gICAg
fQorbGV0IEludExpdGVyYWxUeXBlID0gY3JlYXRlTGl0ZXJhbFR5cGUoeworICAgIHByZWZlcnJl
ZFR5cGVOYW1lOiAiaW50IiwKICAgICAKICAgICB2ZXJpZnlBc0FyZ3VtZW50KHVuaWZpY2F0aW9u
Q29udGV4dCkKICAgICB7CkBAIC02MSwyOCArMzYsNCBAQCBjbGFzcyBJbnRMaXRlcmFsVHlwZSBl
eHRlbmRzIFR5cGUgewogICAgICAgICAgICAgcmV0dXJuIHtyZXN1bHQ6IGZhbHNlLCByZWFzb246
ICJJbnQgbGl0ZXJhbCAiICsgdGhpcy52YWx1ZSArICIgdG9vIGxhcmdlIHRvIGJlIHJlcHJlc2Vu
dGVkIGJ5IHR5cGUgIiArIHJlYWxUaGlzfTsKICAgICAgICAgcmV0dXJuIHtyZXN1bHQ6IHRydWV9
OwogICAgIH0KLSAgICAKLSAgICB2ZXJpZnlBc1BhcmFtZXRlcih1bmlmaWNhdGlvbkNvbnRleHQp
Ci0gICAgewotICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkludExpdGVyYWxUeXBlIHNob3VsZCBu
ZXZlciBiZSB1c2VkIGFzIGEgdHlwZSBwYXJhbWV0ZXIiKTsKLSAgICB9Ci0gICAgCi0gICAgY29u
dmVyc2lvbkNvc3QodW5pZmljYXRpb25Db250ZXh0KQotICAgIHsKLSAgICAgICAgbGV0IHJlYWxU
aGlzID0gdW5pZmljYXRpb25Db250ZXh0LmZpbmQodGhpcyk7Ci0gICAgICAgIGlmIChyZWFsVGhp
cy5lcXVhbHModGhpcy5pbnRUeXBlKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBy
ZXR1cm4gMTsKLSAgICB9Ci0gICAgCi0gICAgY29tbWl0VW5pZmljYXRpb24odW5pZmljYXRpb25D
b250ZXh0KQotICAgIHsKLSAgICAgICAgdGhpcy50eXBlID0gVHlwZVJlZi53cmFwKHVuaWZpY2F0
aW9uQ29udGV4dC5maW5kKHRoaXMpKTsKLSAgICB9Ci0gICAgCi0gICAgdG9TdHJpbmcoKQotICAg
IHsKLSAgICAgICAgcmV0dXJuICJpbnRMaXRlcmFsVHlwZTwiICsgdGhpcy52YWx1ZSArICI+IjsK
LSAgICB9Ci19Ci0KK30pOwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW50
cmluc2ljcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9J
bnRyaW5zaWNzLmpzCShyZXZpc2lvbiAyMjIwMjEpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9JbnRyaW5zaWNzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2Niw3IEBAIGNs
YXNzIEludHJpbnNpY3MgewogICAgICAgICAgICAgICAgIHRoaXMuaW50MzIgPSB0eXBlOwogICAg
ICAgICAgICAgICAgIHR5cGUuaXNJbnQgPSB0cnVlOwogICAgICAgICAgICAgICAgIHR5cGUuaXNO
dW1iZXIgPSB0cnVlOworICAgICAgICAgICAgICAgIHR5cGUuaXNTaWduZWQgPSB0cnVlOwogICAg
ICAgICAgICAgICAgIHR5cGUuY2FuUmVwcmVzZW50ID0gdmFsdWUgPT4gaXNCaXR3aXNlRXF1aXZh
bGVudCh2YWx1ZSB8IDAsIHZhbHVlKTsKICAgICAgICAgICAgICAgICB0eXBlLnNpemUgPSAxOwog
ICAgICAgICAgICAgICAgIHR5cGUucG9wdWxhdGVEZWZhdWx0VmFsdWUgPSAoYnVmZmVyLCBvZmZz
ZXQpID0+IGJ1ZmZlci5zZXQob2Zmc2V0LCAwKTsKQEAgLTc3LDYgKzc4LDcgQEAgY2xhc3MgSW50
cmluc2ljcyB7CiAgICAgICAgICAgICAgICAgdGhpcy51aW50MzIgPSB0eXBlOwogICAgICAgICAg
ICAgICAgIHR5cGUuaXNJbnQgPSB0cnVlOwogICAgICAgICAgICAgICAgIHR5cGUuaXNOdW1iZXIg
PSB0cnVlOworICAgICAgICAgICAgICAgIHR5cGUuaXNTaWduZWQgPSBmYWxzZTsKICAgICAgICAg
ICAgICAgICB0eXBlLmNhblJlcHJlc2VudCA9IHZhbHVlID0+IGlzQml0d2lzZUVxdWl2YWxlbnQo
dmFsdWUgPj4+IDAsIHZhbHVlKTsKICAgICAgICAgICAgICAgICB0eXBlLnNpemUgPSAxOwogICAg
ICAgICAgICAgICAgIHR5cGUucG9wdWxhdGVEZWZhdWx0VmFsdWUgPSAoYnVmZmVyLCBvZmZzZXQp
ID0+IGJ1ZmZlci5zZXQob2Zmc2V0LCAwKTsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL0xpdGVyYWxUeXBlQ2hlY2tlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9MaXRlcmFsVHlwZUNoZWNrZXIuanMJKHJldmlzaW9uIDIyMjAyMSkK
KysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0xpdGVyYWxUeXBlQ2hlY2tlci5qcwko
d29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQCBjbGFzcyBMaXRlcmFsVHlwZUNoZWNrZXIg
ZXh0ZW5kcyBWaXNpdG9yCiAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk51bGwgYXQgIiAr
IG5vZGUub3JpZ2luLm9yaWdpblN0cmluZyArICIgZG9lcyBub3QgaGF2ZSB0eXBlIik7CiAgICAg
fQogICAgIAotICAgIHZpc2l0SW50TGl0ZXJhbFR5cGUobm9kZSkKKyAgICB2aXNpdEdlbmVyaWNM
aXRlcmFsVHlwZShub2RlKQogICAgIHsKICAgICAgICAgaWYgKCFub2RlLnR5cGUpCiAgICAgICAg
ICAgICB0aHJvdyBuZXcgRXJyb3Iobm9kZSArICIgYXQgIiArIG5vZGUub3JpZ2luLm9yaWdpblN0
cmluZyArICIgZG9lcyBub3QgaGF2ZSB0eXBlIik7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9Ob2RlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL05vZGUuanMJKHJldmlzaW9uIDIyMjAyMSkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL05vZGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTcyLDEwICs3MiwxMiBAQCBjbGFz
cyBOb2RlIHsKICAgICB9CiAgICAgCiAgICAgLy8gTW9zdCB0eXBlIHZhcmlhYmxlcyBkb24ndCBj
YXJlIGFib3V0IHRoaXMuCi0gICAgY29tbWl0VW5pZmljYXRpb24odW5pZmljYXRvaW5Db250ZXh0
KSB7IH0KKyAgICBwcmVwYXJlVG9WZXJpZnkodW5pZmljYXRpb25Db250ZXh0KSB7IH0KKyAgICBj
b21taXRVbmlmaWNhdGlvbih1bmlmaWNhdGlvbkNvbnRleHQpIHsgfQogICAgIAogICAgIGdldCB1
bmlmeU5vZGUoKSB7IHJldHVybiB0aGlzOyB9CiAgICAgZ2V0IGlzVW5pZmlhYmxlKCkgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICBnZXQgaXNMaXRlcmFsKCkgeyByZXR1cm4gZmFsc2U7IH0KICAgICAK
ICAgICBnZXQgaXNOYXRpdmUoKSB7IHJldHVybiBmYWxzZTsgfQogICAgIApJbmRleDogVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTnVsbFR5cGUuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTnVsbFR5cGUuanMJKHJldmlzaW9uIDIyMjAyMSkKKysr
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL051bGxUeXBlLmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0zOSw2ICszOSw3IEBAIGNsYXNzIE51bGxUeXBlIGV4dGVuZHMgVHlwZSB7CiAgICAgCiAg
ICAgZ2V0IGlzUHJpbWl0aXZlKCkgeyByZXR1cm4gdHJ1ZTsgfQogICAgIGdldCBpc1VuaWZpYWJs
ZSgpIHsgcmV0dXJuIHRydWU7IH0KKyAgICBnZXQgaXNMaXRlcmFsKCkgeyByZXR1cm4gdHJ1ZTsg
fQogICAgIAogICAgIHR5cGVWYXJpYWJsZVVuaWZ5KHVuaWZpY2F0aW9uQ29udGV4dCwgb3RoZXIp
CiAgICAgewpAQCAtNzMsNyArNzQsNyBAQCBjbGFzcyBOdWxsVHlwZSBleHRlbmRzIFR5cGUgewog
ICAgIAogICAgIHRvU3RyaW5nKCkKICAgICB7Ci0gICAgICAgIHJldHVybiAibnVsbCI7CisgICAg
ICAgIHJldHVybiAibnVsbFR5cGUiOwogICAgIH0KIH0KIApJbmRleDogVG9vbHMvV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvUGFyc2UuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvUGFyc2UuanMJKHJldmlzaW9uIDIyMjAyMSkKKysrIFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL1BhcnNlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xNzgsNyArMTc4LDcg
QEAgZnVuY3Rpb24gcGFyc2UocHJvZ3JhbSwgb3JpZ2luLCBvcmlnaW5LaQogICAgICAgICAgICAg
cmV0dXJuIG5ldyBJbnRMaXRlcmFsKHRva2VuLCBpbnRWZXJzaW9uKTsKICAgICAgICAgfQogICAg
ICAgICBpZiAodG9rZW4gPSB0cnlDb25zdW1lS2luZCgidWludExpdGVyYWwiKSkgewotICAgICAg
ICAgICAgbGV0IHVpbnRWZXJzaW9uID0gdG9rZW4udGV4dCA+Pj4gMDsKKyAgICAgICAgICAgIGxl
dCB1aW50VmVyc2lvbiA9IHRva2VuLnRleHQuc3Vic3RyKDAsIHRva2VuLnRleHQubGVuZ3RoIC0g
MSkgPj4+IDA7CiAgICAgICAgICAgICBpZiAodWludFZlcnNpb24gKyAidSIgIT09IHRva2VuLnRl
eHQpCiAgICAgICAgICAgICAgICAgbGV4ZXIuZmFpbCgiSW50ZWdlciBsaXRlcmFsIGlzIG5vdCAz
Mi1iaXQgdW5zaWduZWQgaW50ZWdlciIpOwogICAgICAgICAgICAgcmV0dXJuIG5ldyBVaW50TGl0
ZXJhbCh0b2tlbiwgdWludFZlcnNpb24pOwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvUmV3cml0ZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvUmV3cml0ZXIuanMJKHJldmlzaW9uIDIyMjAyMSkKKysrIFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL1Jld3JpdGVyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yMTEsMjYgKzIxMSwy
MSBAQCBjbGFzcyBSZXdyaXRlciBleHRlbmRzIFZpc2l0b3JCYXNlIHsKICAgICAgICAgcmV0dXJu
IG5ldyBCcmVhayhub2RlLm9yaWdpbik7CiAgICAgfQogICAgIAotICAgIHZpc2l0SW50TGl0ZXJh
bChub2RlKQorICAgIHZpc2l0R2VuZXJpY0xpdGVyYWwobm9kZSkKICAgICB7CiAgICAgICAgIGxl
dCByZXN1bHQgPSBuZXcgSW50TGl0ZXJhbChub2RlLm9yaWdpbiwgbm9kZS52YWx1ZSk7CiAgICAg
ICAgIHJlc3VsdC50eXBlID0gbm9kZS50eXBlLnZpc2l0KHRoaXMpOwogICAgICAgICByZXR1cm4g
cmVzdWx0OwogICAgIH0KICAgICAKLSAgICB2aXNpdEludExpdGVyYWxUeXBlKG5vZGUpCisgICAg
dmlzaXRHZW5lcmljTGl0ZXJhbFR5cGUobm9kZSkKICAgICB7Ci0gICAgICAgIGxldCByZXN1bHQg
PSBuZXcgSW50TGl0ZXJhbFR5cGUobm9kZS5vcmlnaW4sIG5vZGUudmFsdWUpOworICAgICAgICBs
ZXQgcmVzdWx0ID0gbmV3IG5vZGUuY29uc3RydWN0b3Iobm9kZS5vcmlnaW4sIG5vZGUudmFsdWUp
OwogICAgICAgICByZXN1bHQudHlwZSA9IG5vZGUudHlwZSA/IG5vZGUudHlwZS52aXNpdCh0aGlz
KSA6IG51bGw7Ci0gICAgICAgIHJlc3VsdC5pbnRUeXBlID0gbm9kZS5pbnRUeXBlLnZpc2l0KHRo
aXMpOworICAgICAgICByZXN1bHQucHJlZmVycmVkVHlwZSA9IG5vZGUucHJlZmVycmVkVHlwZS52
aXNpdCh0aGlzKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICB2aXNpdFVp
bnRMaXRlcmFsKG5vZGUpCi0gICAgewotICAgICAgICByZXR1cm4gbm9kZTsKLSAgICB9Ci0KICAg
ICB2aXNpdEJvb2xMaXRlcmFsKG5vZGUpCiAgICAgewogICAgICAgICByZXR1cm4gbm9kZTsKSW5k
ZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0Lmh0bWwJKHJldmlzaW9uIDIyMjAy
MSkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuaHRtbAkod29ya2luZyBj
b3B5KQpAQCAtOSw2ICs5LDkgQEAKIDxzY3JpcHQgc3JjPSJWaXNpdG9yQmFzZS5qcyI+PC9zY3Jp
cHQ+CiA8c2NyaXB0IHNyYz0iUmV3cml0ZXIuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlZp
c2l0b3IuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IkNyZWF0ZUxpdGVyYWwuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9IkNyZWF0ZUxpdGVyYWxUeXBlLmpzIj48L3NjcmlwdD4KKwogPHNj
cmlwdCBzcmM9IkFkZHJlc3NTcGFjZS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iQXJyYXlS
ZWZUeXBlLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJBcnJheVR5cGUuanMiPjwvc2NyaXB0
PgpAQCAtOTksNiArMTAyLDcgQEAKIDxzY3JpcHQgc3JjPSJUeXBlVmFyaWFibGUuanMiPjwvc2Ny
aXB0PgogPHNjcmlwdCBzcmM9IlR5cGVkVmFsdWUuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9
IlVpbnRMaXRlcmFsLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJVaW50TGl0ZXJhbFR5cGUu
anMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlVuaWZpY2F0aW9uQ29udGV4dC5qcyI+PC9zY3Jp
cHQ+CiA8c2NyaXB0IHNyYz0iVW5yZWFjaGFibGVDb2RlQ2hlY2tlci5qcyI+PC9zY3JpcHQ+CiA8
c2NyaXB0IHNyYz0iVmFyaWFibGVEZWNsLmpzIj48L3NjcmlwdD4KSW5kZXg6IFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvVGVzdC5qcwkocmV2aXNpb24gMjIyMDIxKQorKysgVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5qcwkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBA
QCBmdW5jdGlvbiBjaGVja051bWJlcihwcm9ncmFtLCByZXN1bHQsIGV4CiAgICAgICAgIHRocm93
IG5ldyBFcnJvcigiV3JvbmcgcmVzdWx0OiAiICsgcmVzdWx0ICsgIiAoZXhwZWN0ZWQgIiArIGV4
cGVjdGVkICsgIikiKTsKIH0KIAotZnVuY3Rpb24gbWFrZVVJbnQocHJvZ3JhbSwgdmFsdWUpCitm
dW5jdGlvbiBtYWtlVWludChwcm9ncmFtLCB2YWx1ZSkKIHsKICAgICByZXR1cm4gVHlwZWRWYWx1
ZS5ib3gocHJvZ3JhbS5pbnRyaW5zaWNzLnVpbnQzMiwgdmFsdWUpOwogfQpAQCAtODIsNyArODIs
NyBAQCBmdW5jdGlvbiBjaGVja0ludChwcm9ncmFtLCByZXN1bHQsIGV4cGVjCiAgICAgY2hlY2tO
dW1iZXIocHJvZ3JhbSwgcmVzdWx0LCBleHBlY3RlZCk7CiB9CiAKLWZ1bmN0aW9uIGNoZWNrVUlu
dChwcm9ncmFtLCByZXN1bHQsIGV4cGVjdGVkKQorZnVuY3Rpb24gY2hlY2tVaW50KHByb2dyYW0s
IHJlc3VsdCwgZXhwZWN0ZWQpCiB7CiAgICAgaWYgKCFyZXN1bHQudHlwZS5lcXVhbHMocHJvZ3Jh
bS5pbnRyaW5zaWNzLnVpbnQzMikpCiAgICAgICAgIHRocm93IG5ldyBFcnJvcigiV3JvbmcgcmVz
dWx0IHR5cGU6ICIgKyByZXN1bHQudHlwZSk7CkBAIC0xNDksMjAgKzE0OSwyMCBAQCBmdW5jdGlv
biBURVNUX2ludFNpbXBsZU1hdGgoKSB7CiAKIGZ1bmN0aW9uIFRFU1RfdWludFNpbXBsZU1hdGgo
KSB7CiAgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoInVpbnQgZm9vKHVpbnQgeCwgdWludCB5KSB7
IHJldHVybiB4ICsgeTsgfSIpOwotICAgIGNoZWNrVUludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24o
cHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZVVJbnQocHJvZ3JhbSwgNyksIG1ha2VVSW50KHByb2dy
YW0sIDUpXSksIDEyKTsKKyAgICBjaGVja1VpbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dy
YW0sICJmb28iLCBbXSwgW21ha2VVaW50KHByb2dyYW0sIDcpLCBtYWtlVWludChwcm9ncmFtLCA1
KV0pLCAxMik7CiAgICAgcHJvZ3JhbSA9IGRvUHJlcCgidWludCBmb28odWludCB4LCB1aW50IHkp
IHsgcmV0dXJuIHggLSB5OyB9Iik7Ci0gICAgY2hlY2tVSW50KHByb2dyYW0sIGNhbGxGdW5jdGlv
bihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlVUludChwcm9ncmFtLCA3KSwgbWFrZVVJbnQocHJv
Z3JhbSwgNSldKSwgMik7Ci0gICAgY2hlY2tVSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9n
cmFtLCAiZm9vIiwgW10sIFttYWtlVUludChwcm9ncmFtLCA1KSwgbWFrZVVJbnQocHJvZ3JhbSwg
NyldKSwgNDI5NDk2NzI5NCk7CisgICAgY2hlY2tVaW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihw
cm9ncmFtLCAiZm9vIiwgW10sIFttYWtlVWludChwcm9ncmFtLCA3KSwgbWFrZVVpbnQocHJvZ3Jh
bSwgNSldKSwgMik7CisgICAgY2hlY2tVaW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFt
LCAiZm9vIiwgW10sIFttYWtlVWludChwcm9ncmFtLCA1KSwgbWFrZVVpbnQocHJvZ3JhbSwgNyld
KSwgNDI5NDk2NzI5NCk7CiAgICAgcHJvZ3JhbSA9IGRvUHJlcCgidWludCBmb28odWludCB4LCB1
aW50IHkpIHsgcmV0dXJuIHggKiB5OyB9Iik7Ci0gICAgY2hlY2tVSW50KHByb2dyYW0sIGNhbGxG
dW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlVUludChwcm9ncmFtLCA3KSwgbWFrZVVJ
bnQocHJvZ3JhbSwgNSldKSwgMzUpOworICAgIGNoZWNrVWludChwcm9ncmFtLCBjYWxsRnVuY3Rp
b24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZVVpbnQocHJvZ3JhbSwgNyksIG1ha2VVaW50KHBy
b2dyYW0sIDUpXSksIDM1KTsKICAgICBwcm9ncmFtID0gZG9QcmVwKCJ1aW50IGZvbyh1aW50IHgs
IHVpbnQgeSkgeyByZXR1cm4geCAvIHk7IH0iKTsKLSAgICBjaGVja1VJbnQocHJvZ3JhbSwgY2Fs
bEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VVSW50KHByb2dyYW0sIDcpLCBtYWtl
VUludChwcm9ncmFtLCAyKV0pLCAzKTsKKyAgICBjaGVja1VpbnQocHJvZ3JhbSwgY2FsbEZ1bmN0
aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VVaW50KHByb2dyYW0sIDcpLCBtYWtlVWludChw
cm9ncmFtLCAyKV0pLCAzKTsKIH0KIAogZnVuY3Rpb24gVEVTVF9lcXVhbGl0eSgpIHsKICAgICBs
ZXQgcHJvZ3JhbSA9IGRvUHJlcCgiYm9vbCBmb28odWludCB4LCB1aW50IHkpIHsgcmV0dXJuIHgg
PT0geTsgfSIpOwotICAgIGNoZWNrQm9vbChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwg
ImZvbyIsIFtdLCBbbWFrZVVJbnQocHJvZ3JhbSwgNyksIG1ha2VVSW50KHByb2dyYW0sIDUpXSks
IGZhbHNlKTsKLSAgICBjaGVja0Jvb2wocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJm
b28iLCBbXSwgW21ha2VVSW50KHByb2dyYW0sIDcpLCBtYWtlVUludChwcm9ncmFtLCA3KV0pLCB0
cnVlKTsKKyAgICBjaGVja0Jvb2wocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28i
LCBbXSwgW21ha2VVaW50KHByb2dyYW0sIDcpLCBtYWtlVWludChwcm9ncmFtLCA1KV0pLCBmYWxz
ZSk7CisgICAgY2hlY2tCb29sKHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwg
W10sIFttYWtlVWludChwcm9ncmFtLCA3KSwgbWFrZVVpbnQocHJvZ3JhbSwgNyldKSwgdHJ1ZSk7
CiAgICAgcHJvZ3JhbSA9IGRvUHJlcCgiYm9vbCBmb28oaW50IHgsIGludCB5KSB7IHJldHVybiB4
ID09IHk7IH0iKTsKICAgICBjaGVja0Jvb2wocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0s
ICJmb28iLCBbXSwgW21ha2VJbnQocHJvZ3JhbSwgNyksIG1ha2VJbnQocHJvZ3JhbSwgNSldKSwg
ZmFsc2UpOwogICAgIGNoZWNrQm9vbChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZv
byIsIFtdLCBbbWFrZUludChwcm9ncmFtLCA3KSwgbWFrZUludChwcm9ncmFtLCA3KV0pLCB0cnVl
KTsKQEAgLTE4Miw4ICsxODIsOCBAQCBmdW5jdGlvbiBURVNUX2xvZ2ljYWxOZWdhdGlvbigpCiAK
IGZ1bmN0aW9uIFRFU1Rfbm90RXF1YWxpdHkoKSB7CiAgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAo
ImJvb2wgZm9vKHVpbnQgeCwgdWludCB5KSB7IHJldHVybiB4ICE9IHk7IH0iKTsKLSAgICBjaGVj
a0Jvb2wocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VVSW50
KHByb2dyYW0sIDcpLCBtYWtlVUludChwcm9ncmFtLCA1KV0pLCB0cnVlKTsKLSAgICBjaGVja0Jv
b2wocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VVSW50KHBy
b2dyYW0sIDcpLCBtYWtlVUludChwcm9ncmFtLCA3KV0pLCBmYWxzZSk7CisgICAgY2hlY2tCb29s
KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlVWludChwcm9n
cmFtLCA3KSwgbWFrZVVpbnQocHJvZ3JhbSwgNSldKSwgdHJ1ZSk7CisgICAgY2hlY2tCb29sKHBy
b2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlVWludChwcm9ncmFt
LCA3KSwgbWFrZVVpbnQocHJvZ3JhbSwgNyldKSwgZmFsc2UpOwogICAgIHByb2dyYW0gPSBkb1By
ZXAoImJvb2wgZm9vKGludCB4LCBpbnQgeSkgeyByZXR1cm4geCAhPSB5OyB9Iik7CiAgICAgY2hl
Y2tCb29sKHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlSW50
KHByb2dyYW0sIDcpLCBtYWtlSW50KHByb2dyYW0sIDUpXSksIHRydWUpOwogICAgIGNoZWNrQm9v
bChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZUludChwcm9n
cmFtLCA3KSwgbWFrZUludChwcm9ncmFtLCA3KV0pLCBmYWxzZSk7CkBAIC0xNDU3LDE1ICsxNDU3
LDQ3IEBAIGZ1bmN0aW9uIFRFU1RfaW50T3ZlcmxvYWRSZXNvbHV0aW9uR2VuZXIKIAogZnVuY3Rp
b24gVEVTVF9pbnRMaXRlcmFsR2VuZXJpYygpCiB7Ci0gICAgY2hlY2tGYWlsKAotICAgICAgICAo
KSA9PiBkb1ByZXAoYAotICAgICAgICAgICAgaW50IGZvbzxUPihUKSB7IHJldHVybiAxOyB9Ci0g
ICAgICAgICAgICBpbnQgYmFyKCkgeyByZXR1cm4gZm9vKDQyKTsgfQotICAgICAgICBgKSwKLSAg
ICAgICAgKGUpID0+IGUgaW5zdGFuY2VvZiBXVHlwZUVycm9yKTsKKyAgICBsZXQgcHJvZ3JhbSA9
IGRvUHJlcChgCisgICAgICAgIGludCBmb288VD4oVCB4KSB7IHJldHVybiAzNDc4OyB9CisgICAg
ICAgIGludCBiYXIoKSB7IHJldHVybiBmb28oNDIpOyB9CisgICAgYCk7CisgICAgY2hlY2tJbnQo
cHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJiYXIiLCBbXSwgW10pLCAzNDc4KTsKIH0K
IAotZnVuY3Rpb24gVEVTVF9pbnRMaXRlcmFsR2VuZXJpYygpCitmdW5jdGlvbiBURVNUX2ludExp
dGVyYWxHZW5lcmljV2l0aFByb3RvY29scygpCit7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAo
YAorICAgICAgICBwcm90b2NvbCBDb252ZXJ0aWJsZVRvSW50IHsKKyAgICAgICAgICAgIG9wZXJh
dG9yIGludChDb252ZXJ0aWJsZVRvSW50KTsKKyAgICAgICAgfQorICAgICAgICBpbnQgZm9vPFQ6
Q29udmVydGlibGVUb0ludD4oVCB4KSB7IHJldHVybiBpbnQoeCk7IH0KKyAgICAgICAgaW50IGJh
cigpIHsgcmV0dXJuIGZvbyg0Mik7IH0KKyAgICBgKTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBj
YWxsRnVuY3Rpb24ocHJvZ3JhbSwgImJhciIsIFtdLCBbXSksIDQyKTsKK30KKworZnVuY3Rpb24g
VEVTVF91aW50TGl0ZXJhbEdlbmVyaWMoKQoreworICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAK
KyAgICAgICAgaW50IGZvbzxUPihUIHgpIHsgcmV0dXJuIDM0Nzg7IH0KKyAgICAgICAgaW50IGJh
cigpIHsgcmV0dXJuIGZvbyg0MnUpOyB9CisgICAgYCk7CisgICAgY2hlY2tJbnQocHJvZ3JhbSwg
Y2FsbEZ1bmN0aW9uKHByb2dyYW0sICJiYXIiLCBbXSwgW10pLCAzNDc4KTsKK30KKworZnVuY3Rp
b24gVEVTVF91aW50TGl0ZXJhbEdlbmVyaWNXaXRoUHJvdG9jb2xzKCkKK3sKKyAgICBsZXQgcHJv
Z3JhbSA9IGRvUHJlcChgCisgICAgICAgIHByb3RvY29sIENvbnZlcnRpYmxlVG9VaW50IHsKKyAg
ICAgICAgICAgIG9wZXJhdG9yIHVpbnQoQ29udmVydGlibGVUb1VpbnQpOworICAgICAgICB9Cisg
ICAgICAgIHVpbnQgZm9vPFQ6Q29udmVydGlibGVUb1VpbnQ+KFQgeCkgeyByZXR1cm4gdWludCh4
KTsgfQorICAgICAgICB1aW50IGJhcigpIHsgcmV0dXJuIGZvbyg0MnUpOyB9CisgICAgYCk7Cisg
ICAgY2hlY2tVaW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiYmFyIiwgW10sIFtd
KSwgNDIpOworfQorCitmdW5jdGlvbiBURVNUX2ludExpdGVyYWxHZW5lcmljU3BlY2lmaWMoKQog
ewogICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKICAgICAgICAgVCBmb288VD4oVCB4KSB7IHJl
dHVybiB4OyB9CkBAIC0yMDU5LDYgKzIwOTEsODkgQEAgZnVuY3Rpb24gVEVTVF9wcm90b2NvbEV4
dGVuZHNUd28oKQogICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAi
dGhpbmd5IiwgW10sIFttYWtlSW50KHByb2dyYW0sIDY0MildKSwgNjQyICsgNzQzICsgOTEgKyAz
OSk7CiB9CiAKK2Z1bmN0aW9uIFRFU1RfdHdvSW50TGl0ZXJhbHMoKQoreworICAgIGxldCBwcm9n
cmFtID0gZG9QcmVwKGAKKyAgICAgICAgYm9vbCBmb28oKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gNDIgPT0gNDI7CisgICAgICAgIH0KKyAgICBgKTsKKyAgICBjaGVja0Jvb2wocHJv
Z3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW10pLCB0cnVlKTsKK30KKwor
ZnVuY3Rpb24gVEVTVF91bmlmeURpZmZlcmVudExpdGVyYWxzKCkKK3sKKyAgICBjaGVja0ZhaWwo
CisgICAgICAgICgpID0+IGRvUHJlcChgCisgICAgICAgICAgICB2b2lkIGJhcjxUPihULCBUKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgfQorICAgICAgICAgICAgdm9pZCBmb28oKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGJhcig0MiwgNDJ1KTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgYCksCisgICAgICAgIChlKSA9PiBlIGluc3RhbmNlb2YgV1R5cGVFcnJvcik7Cit9
CisKK2Z1bmN0aW9uIFRFU1RfdW5pZnlEaWZmZXJlbnRMaXRlcmFsc0JhY2t3YXJkcygpCit7Cisg
ICAgY2hlY2tGYWlsKAorICAgICAgICAoKSA9PiBkb1ByZXAoYAorICAgICAgICAgICAgdm9pZCBi
YXI8VD4oVCwgVCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZv
aWQgZm9vKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBiYXIoNDJ1LCA0Mik7Cisg
ICAgICAgICAgICB9CisgICAgICAgIGApLAorICAgICAgICAoZSkgPT4gZSBpbnN0YW5jZW9mIFdU
eXBlRXJyb3IpOworfQorCitmdW5jdGlvbiBURVNUX3VuaWZ5VmVyeURpZmZlcmVudExpdGVyYWxz
KCkKK3sKKyAgICBjaGVja0ZhaWwoCisgICAgICAgICgpID0+IGRvUHJlcChgCisgICAgICAgICAg
ICB2b2lkIGJhcjxUPihULCBUKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgdm9pZCBmb28oKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJhcig0Miwg
bnVsbCk7CisgICAgICAgICAgICB9CisgICAgICAgIGApLAorICAgICAgICAoZSkgPT4gZSBpbnN0
YW5jZW9mIFdUeXBlRXJyb3IpOworfQorCitmdW5jdGlvbiBURVNUX3VuaWZ5VmVyeURpZmZlcmVu
dExpdGVyYWxzQmFja3dhcmRzKCkKK3sKKyAgICBjaGVja0ZhaWwoCisgICAgICAgICgpID0+IGRv
UHJlcChgCisgICAgICAgICAgICB2b2lkIGJhcjxUPihULCBUKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgdm9pZCBmb28oKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGJhcihudWxsLCA0Mik7CisgICAgICAgICAgICB9CisgICAgICAgIGApLAorICAg
ICAgICAoZSkgPT4gZSBpbnN0YW5jZW9mIFdUeXBlRXJyb3IpOworfQorCitmdW5jdGlvbiBURVNU
X2Fzc2lnblVpbnRUb0ludCgpCit7CisgICAgY2hlY2tGYWlsKAorICAgICAgICAoKSA9PiBkb1By
ZXAoYAorICAgICAgICAgICAgdm9pZCBmb28oKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGludCB4ID0gNDJ1OworICAgICAgICAgICAgfQorICAgICAgICBgKSwKKyAgICAgICAgKGUp
ID0+IGUgaW5zdGFuY2VvZiBXVHlwZUVycm9yICYmIGUubWVzc2FnZS5pbmRleE9mKCJUeXBlIG1p
c21hdGNoIGluIHZhcmlhYmxlIGluaXRpYWxpemF0aW9uIikgIT0gLTEpOworfQorCiBsZXQgZmls
dGVyID0gLy4qLzsgLy8gcnVuIGV2ZXJ5dGhpbmcgYnkgZGVmYXVsdAogaWYgKHRoaXNbImFyZ3Vt
ZW50cyJdKSB7CiAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKysp
IHsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1R5cGUuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVHlwZS5qcwkocmV2aXNpb24gMjIy
MDIxKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVHlwZS5qcwkod29ya2luZyBj
b3B5KQpAQCAtMzMsNiArMzMsMTIgQEAgY2xhc3MgVHlwZSBleHRlbmRzIE5vZGUgewogICAgIGdl
dCBpc0ludCgpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgZ2V0IGlzRmxvYXQoKSB7IHJldHVybiBm
YWxzZTsgfQogICAgIAorICAgIC8vIFRoaXMgcXVlcnkgYXNzdW1lcyB0aGF0IHRoZSByZWNlaXZl
ciB0eXBlIGlzIHRvIGJlIHVzZWQgYXMgYSBzdWJzdGl0dXRpb24gZm9yIGEgdHlwZSB2YXJpYWJs
ZSB0aGF0IHdhcworICAgIC8vIGRlY2xhcmVkIHRvIGluaGVyaXQgdGhpcyBwcm90b2NvbC4gU28s
IGlmIHVwb24gdW5pZmljYXRpb24gd2l0aCBhIHR5cGUgdmFyaWFibGUsIHRoZSByZWNlaXZlciB0
eXBlIHdvdWxkCisgICAgLy8gaGF2ZSBjaG9zZW4gYSBzdWJ0eXBlIG9mIGl0c2VsZiwgdGhlbiBp
dCBzaG91bGQgaGFuZGxlIHRoaXMgcXVlcnkgYnkgZGVsZWdhdGluZyBpdCB0byB0aGF0IHN1YnR5
cGUuIE9uZQorICAgIC8vIGV4YW1wbGUgaXMgaG93IGludExpdGVyYWxUeXBlIGJlY29tZXMgaW50
MzIgKGEgc3VidHlwZSkgd2hlbiBpdCBpcyBzdWJzdGl0dXRlZCBmb3IgYSBUeXBlVmFyaWFibGUu
IFRoaXMKKyAgICAvLyBpcyBub3QgdG8gc2F5IHRoYXQgdGhlIGxhbmd1YWdlIHN1cHBvcnRzIHN1
YnR5cGluZyBldmVyeXdoZXJlLCBzaW5jZSBkZWNsYXJlZCB0eXBlcyBuZXZlciBleHBlcmllbmNl
CisgICAgLy8gc3VidHlwaW5nLiBTdWJ0eXBpbmcgb25seSBlbWVyZ2VzIGZvciBsaXRlcmFsIHR5
cGVzIGxpa2UgbnVsbFR5cGUgYW5kIGludExpdGVyYWxUeXBlLgogICAgIGluaGVyaXRzKHByb3Rv
Y29sKQogICAgIHsKICAgICAgICAgaWYgKCFwcm90b2NvbCkKSW5kZXg6IFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL1VpbnRMaXRlcmFsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL1VpbnRMaXRlcmFsLmpzCShyZXZpc2lvbiAyMjIwMjEpCisrKyBU
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9VaW50TGl0ZXJhbC5qcwkod29ya2luZyBjb3B5
KQpAQCAtMjQsMTkgKzI0LDEyIEBACiAgKi8KICJ1c2Ugc3RyaWN0IjsKIAotY2xhc3MgVWludExp
dGVyYWwgZXh0ZW5kcyBFeHByZXNzaW9uIHsKLSAgICBjb25zdHJ1Y3RvcihvcmlnaW4sIHZhbHVl
KQotICAgIHsKLSAgICAgICAgc3VwZXIob3JpZ2luKTsKLSAgICAgICAgdGhpcy5fdmFsdWUgPSB2
YWx1ZTsKLSAgICB9Ci0gICAgCi0gICAgZ2V0IHZhbHVlKCkgeyByZXR1cm4gdGhpcy5fdmFsdWU7
IH0KLSAgICBnZXQgaXNDb25zdGV4cHIoKSB7IHJldHVybiB0cnVlOyB9CitsZXQgVWludExpdGVy
YWwgPSBjcmVhdGVMaXRlcmFsKHsKKyAgICBwcmVmZXJyZWRUeXBlTmFtZTogInVpbnQiLAogICAg
IAotICAgIHRvU3RyaW5nKCkKKyAgICBjcmVhdGVUeXBlKG9yaWdpbiwgdmFsdWUpCiAgICAgewot
ICAgICAgICByZXR1cm4gIiIgKyB0aGlzLl92YWx1ZSArICJ1IjsKKyAgICAgICAgcmV0dXJuIG5l
dyBVaW50TGl0ZXJhbFR5cGUob3JpZ2luLCB2YWx1ZSk7CiAgICAgfQotfQorfSk7CiAKSW5kZXg6
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1VpbnRMaXRlcmFsVHlwZS5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9VaW50TGl0ZXJhbFR5cGUuanMJ
KG5vbmV4aXN0ZW50KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVWludExpdGVy
YWxUeXBlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworbGV0IFVpbnRM
aXRlcmFsVHlwZSA9IGNyZWF0ZUxpdGVyYWxUeXBlKHsKKyAgICBwcmVmZXJyZWRUeXBlTmFtZTog
InVpbnQiLAorICAgIAorICAgIHZlcmlmeUFzQXJndW1lbnQodW5pZmljYXRpb25Db250ZXh0KQor
ICAgIHsKKyAgICAgICAgbGV0IHJlYWxUaGlzID0gdW5pZmljYXRpb25Db250ZXh0LmZpbmQodGhp
cyk7CisgICAgICAgIGlmICghcmVhbFRoaXMuaXNJbnQpCisgICAgICAgICAgICByZXR1cm4ge3Jl
c3VsdDogZmFsc2UsIHJlYXNvbjogIkNhbm5vdCB1c2UgdWludCBsaXRlcmFsIHdpdGggbm9uLWlu
dGVnZXIgdHlwZSAiICsgcmVhbFRoaXN9OworICAgICAgICBpZiAocmVhbFRoaXMuaXNTaWduZWQp
CisgICAgICAgICAgICByZXR1cm4ge3Jlc3VsdDogZmFsc2UsIHJlYXNvbjogIkNhbm5vdCB1c2Ug
dWludCBsaXRlcmFsIHdpdGggc2lnbmVkIHR5cGUgIiArIHJlYWxUaGlzfTsKKyAgICAgICAgaWYg
KCFyZWFsVGhpcy5jYW5SZXByZXNlbnQodGhpcy52YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4g
e3Jlc3VsdDogZmFsc2UsIHJlYXNvbjogIlVpbnQgbGl0ZXJhbCAiICsgdGhpcy52YWx1ZSArICIg
dG9vIGxhcmdlIHRvIGJlIHJlcHJlc2VudGVkIGJ5IHR5cGUgIiArIHJlYWxUaGlzfTsKKyAgICAg
ICAgcmV0dXJuIHtyZXN1bHQ6IHRydWV9OworICAgIH0KK30pOwpJbmRleDogVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvVW5pZmljYXRpb25Db250ZXh0LmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1VuaWZpY2F0aW9uQ29udGV4dC5qcwkocmV2aXNp
b24gMjIyMDIxKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVW5pZmljYXRpb25D
b250ZXh0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC05MSw2ICs5MSwxOSBAQCBjbGFzcyBVbmlmaWNh
dGlvbkNvbnRleHQgewogICAgIAogICAgIHZlcmlmeSgpCiAgICAgeworICAgICAgICAvLyBXZSBk
byBhIHR3by1waGFzZSBwcmUtdmVyaWZpY2F0aW9uLiBUaGlzIGdpdmVzIGxpdGVyYWxzIGEgY2hh
bmNlIHRvIHNlbGVjdCBhIG1vcmUgc3BlY2lmaWMgdHlwZS4KKyAgICAgICAgbGV0IHByZXBhcmF0
aW9ucyA9IFtdOworICAgICAgICBmb3IgKGxldCBub2RlIG9mIHRoaXMubm9kZXMpIHsKKyAgICAg
ICAgICAgIGxldCBwcmVwYXJhdGlvbiA9IG5vZGUucHJlcGFyZVRvVmVyaWZ5KHRoaXMpOworICAg
ICAgICAgICAgaWYgKHByZXBhcmF0aW9uKQorICAgICAgICAgICAgICAgIHByZXBhcmF0aW9ucy5w
dXNoKHByZXBhcmF0aW9uKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKGxldCBwcmVwYXJhdGlv
biBvZiBwcmVwYXJhdGlvbnMpIHsKKyAgICAgICAgICAgIGxldCByZXN1bHQgPSBwcmVwYXJhdGlv
bigpOworICAgICAgICAgICAgaWYgKCFyZXN1bHQucmVzdWx0KQorICAgICAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIGZvciAobGV0IHR5cGVQ
YXJhbWV0ZXIgb2YgdGhpcy5fdHlwZVBhcmFtZXRlcnMpIHsKICAgICAgICAgICAgIGxldCByZXN1
bHQgPSB0eXBlUGFyYW1ldGVyLnZlcmlmeUFzUGFyYW1ldGVyKHRoaXMpOwogICAgICAgICAgICAg
aWYgKCFyZXN1bHQucmVzdWx0KQpAQCAtMTAyLDEyICsxMTUsMTQgQEAgY2xhc3MgVW5pZmljYXRp
b25Db250ZXh0IHsKICAgICAgICAgICAgIGxldCByZXN1bHQgPSB0eXBlQXJndW1lbnQudmVyaWZ5
QXNBcmd1bWVudCh0aGlzKTsKICAgICAgICAgICAgIGlmICghcmVzdWx0LnJlc3VsdCkKICAgICAg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgaWYgKHR5cGVBcmd1bWVudC5p
c0xpdGVyYWwpCisgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBhcmd1bWVu
dFNldC5hZGQodGhpcy5maW5kKHR5cGVBcmd1bWVudCkpOwogICAgICAgICAgICAgbnVtVHlwZVZh
cmlhYmxlQXJndW1lbnRzKys7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGFyZ3VtZW50U2V0LnNp
emUgPT0gbnVtVHlwZVZhcmlhYmxlQXJndW1lbnRzKQogICAgICAgICAgICAgcmV0dXJuIHtyZXN1
bHQ6IHRydWV9OwotICAgICAgICByZXR1cm4ge3Jlc3VsdDogZmFsc2UsIHJlYXNvbjogIlR5cGUg
dmFyaWFibGVzIHVzZWQgYXMgYXJndW1lbnRzIGdvdCB1bmlmaWVkIn07CisgICAgICAgIHJldHVy
biB7cmVzdWx0OiBmYWxzZSwgcmVhc29uOiAiVHlwZSB2YXJpYWJsZXMgdXNlZCBhcyBhcmd1bWVu
dHMgZ290IHVuaWZpZWQgd2l0aCBlYWNoIG90aGVyIn07CiAgICAgfQogICAgIAogICAgIGdldCBj
b252ZXJzaW9uQ29zdCgpCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9WaXNp
dG9yLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Zpc2l0
b3IuanMJKHJldmlzaW9uIDIyMjAyMSkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L1Zpc2l0b3IuanMJKHdvcmtpbmcgY29weSkKQEAgLTI1NSwyMCArMjU1LDE2IEBAIGNsYXNzIFZp
c2l0b3IgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CiAgICAgewogICAgIH0KICAgICAKLSAgICB2aXNp
dEludExpdGVyYWwobm9kZSkKKyAgICB2aXNpdEdlbmVyaWNMaXRlcmFsKG5vZGUpCiAgICAgewog
ICAgICAgICBub2RlLnR5cGUudmlzaXQodGhpcyk7CiAgICAgfQogICAgIAotICAgIHZpc2l0SW50
TGl0ZXJhbFR5cGUobm9kZSkKKyAgICB2aXNpdEdlbmVyaWNMaXRlcmFsVHlwZShub2RlKQogICAg
IHsKICAgICAgICAgaWYgKG5vZGUudHlwZSkKICAgICAgICAgICAgIG5vZGUudHlwZS52aXNpdCh0
aGlzKTsKLSAgICAgICAgbm9kZS5pbnRUeXBlLnZpc2l0KHRoaXMpOwotICAgIH0KLSAgICAKLSAg
ICB2aXNpdFVpbnRMaXRlcmFsKG5vZGUpCi0gICAgeworICAgICAgICBub2RlLnByZWZlcnJlZFR5
cGUudmlzaXQodGhpcyk7CiAgICAgfQogICAgIAogICAgIHZpc2l0TnVsbExpdGVyYWwobm9kZSkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>320791</attachid>
            <date>2017-09-14 10:54:41 -0700</date>
            <delta_ts>2017-09-14 11:13:27 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>37843</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIyMjAzMikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE1MiBAQAorMjAxNy0wOS0xNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgor
CisgICAgICAgIFdTTCBJbnRMaXRlcmFsVHlwZSBzaG91bGQgYmVjb21lIGludDMyIGlmIHVuaWZp
ZWQgd2l0aCBhIHR5cGUgdmFyaWFibGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE3NjcwNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorICAgICAgICAKKyAgICAgICAgVGhpcyBtYWtlcyBpdCBzbyB0aGF0IHRoaXMgd29ya3M6
CisgICAgICAgIAorICAgICAgICAgICAgVCBmb288VD4oVCB4KSB7IHJldHVybiB4OyB9CisgICAg
ICAgICAgICBmb28oNDIpOyAvLyBUIGJlY29tZXMgaW50MzIKKyAgICAgICAgCisgICAgICAgIFBy
ZXZpb3VzbHksIGl0IGRpZCBub3Qgd29yayBiZWNhdXNlIEludExpdGVyYWxUeXBlIGRpZCBub3Qg
cmVjb2duaXplIFR5cGVWYXJpYWJsZSBhcyBhIG51bWJlci4gQWxzbywKKyAgICAgICAgVHlwZVZh
cmlhYmxlIHdvdWxkIHRyeSB0byBldmFsdWF0ZSBwcm90b2NvbCBpbmhlcml0YW5jZSBvZiBJbnRM
aXRlcmFsVHlwZSwgd2hpY2ggd291bGQgbm90IGdvIHdlbGwuIE9uZQorICAgICAgICBvZiB0aGUg
dGVzdHMgdGhhdCB0aGlzIHBhdGNoIGFkZHMgZGlkbid0IGp1c3QgZmFpbDsgaXQgZ2F2ZSBzdWNo
IGFuIGFic3VyZCA3LWxpbmUgdHlwZSBlcnJvciB0aGF0IEkgZmVsdAorICAgICAgICBsaWtlIEkg
d2FzIHVzaW5nIFNNTC4KKyAgICAgICAgCisgICAgICAgIFRoaXMgZml4ZXMgdGhlIHByb2JsZW0g
YnkgaW50cm9kdWNpbmcgd2hhdCBJIHRoaW5rIGlzIGEgc3VwZXIgZGV0ZXJtaW5pc3RpYyB3YXkg
b2YgaGFuZGxpbmcgbGl0ZXJhbHMgYW5kCisgICAgICAgIHR5cGUgdmFyaWFibGVzOgorICAgICAg
ICAKKyAgICAgICAgQmVmb3JlIHZlcmlmeWluZyBhIHVuaWZpY2F0aW9uIGNvbnRleHQsIHdlIG5v
dyBnaXZlIGFsbCBsaXRlcmFscyBhIGNoYW5jZSB0byBwZXJmb3JtIGFuIGV4dHJhIAorICAgICAg
ICB1bmlmaWNhdGlvbiBzdGVwLiBUaGlzIGlzIGEgdHdvLXBoYXNlIHByb2Nlc3MuIFRoaXMgZW5z
dXJlcyB0aGF0IHRoZSB1bmlmaWNhdGlvbiBwZXJmb3JtZWQgYnkgb25lIAorICAgICAgICBsaXRl
cmFsIGRvZXMgbm90IHRocm93IG9mZiB0aGUgbG9naWMgb2Ygc29tZSBvdGhlciBsaXRlcmFsLiBG
b3IgZXhhbXBsZSwgaWYgd2UgZG86CisgICAgICAgIAorICAgICAgICAgICAgdm9pZCBmb288VD4o
VCwgVCkgeyB9CisgICAgICAgICAgICBmb28oNDIsIDQydSk7CisgICAgICAgIAorICAgICAgICBU
aGVuIHdlIHdhbnQgdG8gYWx3YXlzIGZhaWwgdG8gY29tcGlsZSwgcmF0aGVyIHRoYW4gc29tZXRp
bWVzIHN1Y2NlZWRpbmcuIFNvLCB3ZSBmaXJzdCBhc2sgZWFjaCBsaXRlcmFsCisgICAgICAgIGlm
IGl0IHRoaW5rcyB0aGF0IGl0IG5lZWRzIHRvIGRvIGV4dHJhIHVuaWZpY2F0aW9uLiBCb3RoIG9m
IHRoZSBsaXRlcmFscyB3aWxsIHJlcG9ydCB0aGF0IHRoZXkgd2FudCB0bworICAgICAgICBpbiB0
aGlzIGNhc2UsIGJlY2F1c2UgdGhleSB3aWxsIG5vdGljZSB0aGF0IHRoZXkgZ290IHVuaWZpZWQg
d2l0aCBlaXRoZXIgYXQgdHlwZSB2YXJpYWJsZSBvciBhIGxpdGVyYWwsCisgICAgICAgIHdoaWNo
IGlzbid0IHNwZWNpZmljIGVub3VnaC4gVGhlbiBhZnRlciB0aGV5IGFsbCByZWdpc3RlciB0byBk
byBleHRyYSB1bmlmaWNhdGlvbiwgdGhleSB3aWxsIGJvdGggdHJ5IHRvCisgICAgICAgIHVuaWZ5
IHdpdGggdGhlaXIgcHJlZmVycmVkIHR5cGVzIChpbnQzMiBmb3IgNDIsIHVpbnQzMiBmb3IgNDJ1
KS4gVGhlIGZpcnN0IG9uZSB3aWxsIHN1Y2NlZWQsIGFuZCB0aGUKKyAgICAgICAgc2Vjb25kIHdp
bGwgZ2l2ZSBhbiBlcnJvci4KKyAgICAgICAgCisgICAgICAgIFdpdGhvdXQgdGhlIHNwZWNpYWwg
dHdvLXBoYXNlIGFycmFuZ2VtZW50LCBpdCB3YXMgcG9zc2libGUgdG8gZWl0aGVyIGdldCBhIHR5
cGUgZXJyb3Igb3Igbm90IGRlcGVuZGluZyAKKyAgICAgICAgb24gdGhlIG9yZGVyIC0gZm9yIGV4
YW1wbGUgZm9vKDQyLCA0MnUpIG1pZ2h0IGZhaWwgd2hpbGUgZm9vKDQydSwgNDIpIHN1Y2NlZWRz
LiBJdCB3YXMgZGVmaW5pdGVseSBub3QKKyAgICAgICAgZGVjaWRhYmxlLCBhdCBsZWFzdCBub3Qg
dW5sZXNzIHlvdSBtYW5kYXRlIHRoZSB1bmlmaWNhdGlvbiBvcmRlciBhcyBwYXJ0IG9mIHRoZSB0
eXBlIHN5c3RlbSBzcGVjLiBJIAorICAgICAgICB0aGluayB0aGF0IHdvdWxkIGhhdmUgYmVlbiBu
dXRzLgorICAgICAgICAKKyAgICAgICAgQm90aCBJbnRMaXRlcmFsIGFuZCBVaW50TGl0ZXJhbCBh
cmUgbm93ICJmbGV4aWJsZSI7IHRoZSB1aW50IG9uZSB3aWxsIHJlamVjdCBub24taW50IG9yIHNp
Z25lZCBpbnQKKyAgICAgICAgdHlwZXMgYW5kIHdpbGwgcHJlZmVyIHVpbnQsIGJ1dCBvdGhlcndp
c2UgaXQncyB0aGUgc2FtZSBsb2dpYy4gVGhpcyBtZWFucyB0aGF0IHRoaXMgd2lsbCBiZSB2YWxp
ZDoKKyAgICAgICAgCisgICAgICAgICAgICB1aW50OCB4ID0gNXU7CisgICAgICAgIAorICAgICAg
ICBCdXQgdGhpcyBpcyBzdGlsbCB3cm9uZzoKKyAgICAgICAgCisgICAgICAgICAgICBpbnQgeCA9
IDV1OworICAgICAgICAKKyAgICAgICAgVG8gbWFrZSB0aGlzIGVhc3ksIEkgdHVybmVkIEludExp
dGVyYWwgYW5kIFVpbnRMaXRlcmFsIChhbmQgSW50TGl0ZXJhbFR5cGUgYW5kIFVpbnRMaXRlcmFs
VHlwZSkgaW50bworICAgICAgICBmYWN0b3J5LWJ1aWx0IGdlbmVyaWMgdHlwZXMgKHNlZSBjcmVh
dGVMaXRlcmFsKCkgYW5kIGNyZWF0ZUxpdGVyYWxUeXBlKCkpLiBCZWNhdXNlIHZpc2l0b3JzIHVz
ZSB0aGUKKyAgICAgICAgY29uc3RydWN0b3IncyBkZWNsYXJlZCBuYW1lIChHZW5lcmljTGl0ZXJh
bCBhbmQgR2VuZXJpY0xpdGVyYWxUeXBlIGluIHRoaXMgY2FzZSksIGl0IG1lYW5zIHRoYXQgd2Ug
Y2FuCisgICAgICAgIHNoYXJlIGEgdG9uIG9mIGNvZGUgYmV0d2VlbiB0aGUgZGlmZmVyZW50IGxp
dGVyYWxzLiBJIGxvdmUgdGhhdCBFUzYgbGV0cyB5b3UgZG8gdGhhdC4KKworICAgICAgICAqIFdl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FsbC5qczoKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9DaGVja2VyLmpzOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Ny
ZWF0ZUxpdGVyYWwuanM6IEFkZGVkLgorICAgICAgICAoY3JlYXRlTGl0ZXJhbC5HZW5lcmljTGl0
ZXJhbCk6CisgICAgICAgIChjcmVhdGVMaXRlcmFsLkdlbmVyaWNMaXRlcmFsLnByb3RvdHlwZS5n
ZXQgdmFsdWUpOgorICAgICAgICAoY3JlYXRlTGl0ZXJhbC5HZW5lcmljTGl0ZXJhbC5wcm90b3R5
cGUuZ2V0IGlzQ29uc3RleHByKToKKyAgICAgICAgKGNyZWF0ZUxpdGVyYWwuR2VuZXJpY0xpdGVy
YWwucHJvdG90eXBlLnRvU3RyaW5nKToKKyAgICAgICAgKGNyZWF0ZUxpdGVyYWwpOgorICAgICAg
ICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NyZWF0ZUxpdGVyYWxUeXBlLmpzOiBBZGRlZC4K
KyAgICAgICAgKGNyZWF0ZUxpdGVyYWxUeXBlLkdlbmVyaWNMaXRlcmFsVHlwZSk6CisgICAgICAg
IChjcmVhdGVMaXRlcmFsVHlwZS5HZW5lcmljTGl0ZXJhbFR5cGUucHJvdG90eXBlLmdldCBvcmln
aW4pOgorICAgICAgICAoY3JlYXRlTGl0ZXJhbFR5cGUuR2VuZXJpY0xpdGVyYWxUeXBlLnByb3Rv
dHlwZS5nZXQgdmFsdWUpOgorICAgICAgICAoY3JlYXRlTGl0ZXJhbFR5cGUuR2VuZXJpY0xpdGVy
YWxUeXBlLnByb3RvdHlwZS5nZXQgaXNQcmltaXRpdmUpOgorICAgICAgICAoY3JlYXRlTGl0ZXJh
bFR5cGUuR2VuZXJpY0xpdGVyYWxUeXBlLnByb3RvdHlwZS5nZXQgaXNVbmlmaWFibGUpOgorICAg
ICAgICAoY3JlYXRlTGl0ZXJhbFR5cGUuR2VuZXJpY0xpdGVyYWxUeXBlLnByb3RvdHlwZS5nZXQg
aXNMaXRlcmFsKToKKyAgICAgICAgKGNyZWF0ZUxpdGVyYWxUeXBlLkdlbmVyaWNMaXRlcmFsVHlw
ZS5wcm90b3R5cGUudHlwZVZhcmlhYmxlVW5pZnkpOgorICAgICAgICAoY3JlYXRlTGl0ZXJhbFR5
cGUuR2VuZXJpY0xpdGVyYWxUeXBlLnByb3RvdHlwZS51bmlmeUltcGwpOgorICAgICAgICAoY3Jl
YXRlTGl0ZXJhbFR5cGUuR2VuZXJpY0xpdGVyYWxUeXBlLnByb3RvdHlwZS5wcmVwYXJlVG9WZXJp
ZnkpOgorICAgICAgICAoY3JlYXRlTGl0ZXJhbFR5cGUuR2VuZXJpY0xpdGVyYWxUeXBlLnByb3Rv
dHlwZS52ZXJpZnlBc0FyZ3VtZW50KToKKyAgICAgICAgKGNyZWF0ZUxpdGVyYWxUeXBlLkdlbmVy
aWNMaXRlcmFsVHlwZS5wcm90b3R5cGUudmVyaWZ5QXNQYXJhbWV0ZXIpOgorICAgICAgICAoY3Jl
YXRlTGl0ZXJhbFR5cGUuR2VuZXJpY0xpdGVyYWxUeXBlLnByb3RvdHlwZS5jb252ZXJzaW9uQ29z
dCk6CisgICAgICAgIChjcmVhdGVMaXRlcmFsVHlwZS5HZW5lcmljTGl0ZXJhbFR5cGUucHJvdG90
eXBlLmNvbW1pdFVuaWZpY2F0aW9uKToKKyAgICAgICAgKGNyZWF0ZUxpdGVyYWxUeXBlLkdlbmVy
aWNMaXRlcmFsVHlwZS5wcm90b3R5cGUudG9TdHJpbmcpOgorICAgICAgICAoY3JlYXRlTGl0ZXJh
bFR5cGUpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0V2YWx1YXRvci5qczoK
KyAgICAgICAgKEV2YWx1YXRvci5wcm90b3R5cGUudmlzaXRJbnRMaXRlcmFsKTogRGVsZXRlZC4K
KyAgICAgICAgKEV2YWx1YXRvci5wcm90b3R5cGUudmlzaXRVaW50TGl0ZXJhbCk6IERlbGV0ZWQu
CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW50TGl0ZXJhbC5qczoKKyAgICAg
ICAgKGxldC5JbnRMaXRlcmFsLmNyZWF0ZUxpdGVyYWwuY3JlYXRlVHlwZSk6CisgICAgICAgIChJ
bnRMaXRlcmFsKTogRGVsZXRlZC4KKyAgICAgICAgKEludExpdGVyYWwucHJvdG90eXBlLmdldCB2
YWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChJbnRMaXRlcmFsLnByb3RvdHlwZS5nZXQgaXNDb25z
dGV4cHIpOiBEZWxldGVkLgorICAgICAgICAoSW50TGl0ZXJhbC5wcm90b3R5cGUudG9TdHJpbmcp
OiBEZWxldGVkLgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0ludExpdGVyYWxU
eXBlLmpzOgorICAgICAgICAoSW50TGl0ZXJhbFR5cGUpOiBEZWxldGVkLgorICAgICAgICAoSW50
TGl0ZXJhbFR5cGUucHJvdG90eXBlLmdldCBvcmlnaW4pOiBEZWxldGVkLgorICAgICAgICAoSW50
TGl0ZXJhbFR5cGUucHJvdG90eXBlLmdldCB2YWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChJbnRM
aXRlcmFsVHlwZS5wcm90b3R5cGUuZ2V0IGlzUHJpbWl0aXZlKTogRGVsZXRlZC4KKyAgICAgICAg
KEludExpdGVyYWxUeXBlLnByb3RvdHlwZS5nZXQgaXNVbmlmaWFibGUpOiBEZWxldGVkLgorICAg
ICAgICAoSW50TGl0ZXJhbFR5cGUucHJvdG90eXBlLnR5cGVWYXJpYWJsZVVuaWZ5KTogRGVsZXRl
ZC4KKyAgICAgICAgKEludExpdGVyYWxUeXBlLnByb3RvdHlwZS51bmlmeUltcGwpOiBEZWxldGVk
LgorICAgICAgICAoSW50TGl0ZXJhbFR5cGUucHJvdG90eXBlLnZlcmlmeUFzQXJndW1lbnQpOiBE
ZWxldGVkLgorICAgICAgICAoSW50TGl0ZXJhbFR5cGUucHJvdG90eXBlLnZlcmlmeUFzUGFyYW1l
dGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEludExpdGVyYWxUeXBlLnByb3RvdHlwZS5jb252ZXJz
aW9uQ29zdCk6IERlbGV0ZWQuCisgICAgICAgIChJbnRMaXRlcmFsVHlwZS5wcm90b3R5cGUuY29t
bWl0VW5pZmljYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoSW50TGl0ZXJhbFR5cGUucHJvdG90
eXBlLnRvU3RyaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9JbnRyaW5zaWNzLmpzOgorICAgICAgICAoSW50cmluc2ljcyk6CisgICAgICAgICogV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvTGl0ZXJhbFR5cGVDaGVja2VyLmpzOgorICAgICAgICAoTGl0ZXJh
bFR5cGVDaGVja2VyLnByb3RvdHlwZS52aXNpdEludExpdGVyYWxUeXBlKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Ob2RlLmpzOgorICAgICAgICAoTm9kZS5w
cm90b3R5cGUucHJlcGFyZVRvVmVyaWZ5KToKKyAgICAgICAgKE5vZGUucHJvdG90eXBlLmNvbW1p
dFVuaWZpY2F0aW9uKToKKyAgICAgICAgKE5vZGUucHJvdG90eXBlLmdldCBpc0xpdGVyYWwpOgor
ICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL051bGxUeXBlLmpzOgorICAgICAgICAo
TnVsbFR5cGUucHJvdG90eXBlLmdldCBpc0xpdGVyYWwpOgorICAgICAgICAoTnVsbFR5cGUucHJv
dG90eXBlLnRvU3RyaW5nKToKKyAgICAgICAgKE51bGxUeXBlKToKKyAgICAgICAgKiBXZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9QYXJzZS5qczoKKyAgICAgICAgKHBhcnNlVGVybSk6CisgICAgICAg
ICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmV3cml0ZXIuanM6CisgICAgICAgIChSZXdyaXRl
ci5wcm90b3R5cGUudmlzaXRHZW5lcmljTGl0ZXJhbFR5cGUpOgorICAgICAgICAoUmV3cml0ZXIu
cHJvdG90eXBlLnZpc2l0SW50TGl0ZXJhbCk6IERlbGV0ZWQuCisgICAgICAgIChSZXdyaXRlci5w
cm90b3R5cGUudmlzaXRJbnRMaXRlcmFsVHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChSZXdyaXRl
ci5wcm90b3R5cGUudmlzaXRVaW50TGl0ZXJhbCk6IERlbGV0ZWQuCisgICAgICAgIChSZXdyaXRl
ci5wcm90b3R5cGUudmlzaXRCb29sTGl0ZXJhbCk6IERlbGV0ZWQuCisgICAgICAgICogV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5odG1sOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL1Rlc3QuanM6CisgICAgICAgIChtYWtlVWludCk6CisgICAgICAgIChjaGVja1VpbnQp
OgorICAgICAgICAoVEVTVF91aW50U2ltcGxlTWF0aCk6CisgICAgICAgIChURVNUX2VxdWFsaXR5
KToKKyAgICAgICAgKFRFU1Rfbm90RXF1YWxpdHkpOgorICAgICAgICAoVEVTVF9pbnRMaXRlcmFs
R2VuZXJpYyk6CisgICAgICAgIChURVNUX2ludExpdGVyYWxHZW5lcmljV2l0aFByb3RvY29scyk6
CisgICAgICAgIChURVNUX3VpbnRMaXRlcmFsR2VuZXJpYyk6CisgICAgICAgIChURVNUX3VpbnRM
aXRlcmFsR2VuZXJpY1dpdGhQcm90b2NvbHMpOgorICAgICAgICAoVEVTVF9pbnRMaXRlcmFsR2Vu
ZXJpY1NwZWNpZmljKToKKyAgICAgICAgKFRFU1RfdHdvSW50TGl0ZXJhbHMpOgorICAgICAgICAo
VEVTVF91bmlmeURpZmZlcmVudExpdGVyYWxzKToKKyAgICAgICAgKG1ha2VVSW50KTogRGVsZXRl
ZC4KKyAgICAgICAgKGNoZWNrVUludCk6IERlbGV0ZWQuCisgICAgICAgICogV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvVHlwZS5qczoKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9V
aW50TGl0ZXJhbC5qczoKKyAgICAgICAgKGxldC5VaW50TGl0ZXJhbC5jcmVhdGVMaXRlcmFsLmNy
ZWF0ZVR5cGUpOgorICAgICAgICAoVWludExpdGVyYWwpOiBEZWxldGVkLgorICAgICAgICAoVWlu
dExpdGVyYWwucHJvdG90eXBlLmdldCB2YWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChVaW50TGl0
ZXJhbC5wcm90b3R5cGUuZ2V0IGlzQ29uc3RleHByKTogRGVsZXRlZC4KKyAgICAgICAgKFVpbnRM
aXRlcmFsLnByb3RvdHlwZS50b1N0cmluZyk6IERlbGV0ZWQuCisgICAgICAgICogV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvVWludExpdGVyYWxUeXBlLmpzOiBBZGRlZC4KKyAgICAgICAgKGxldC5V
aW50TGl0ZXJhbFR5cGUuY3JlYXRlTGl0ZXJhbFR5cGUudmVyaWZ5QXNBcmd1bWVudCk6CisgICAg
ICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVW5pZmljYXRpb25Db250ZXh0LmpzOgorICAg
ICAgICAoVW5pZmljYXRpb25Db250ZXh0LnByb3RvdHlwZS52ZXJpZnkpOgorICAgICAgICAqIFdl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Zpc2l0b3IuanM6CisgICAgICAgIChWaXNpdG9yLnByb3Rv
dHlwZS52aXNpdFByb3RvY29sRGVjbCk6CisKIDIwMTctMDktMTQgIENhcmxvcyBBbGJlcnRvIExv
cGV6IFBlcmV6ICA8Y2xvcGV6QGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gQWRkIGEgc3dp
dGNoIHRvIHN0YXJ0IHRoZSBtaW5pLWJyb3dzZXIgaW4gZnVsbC1zY3JlZW4gbW9kZQpJbmRleDog
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWxsLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FsbC5qcwkocmV2aXNpb24gMjIyMDMyKQorKysgVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWxsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2
ICszMiw4IEBAIGxvYWQoIkV4cHJlc3Npb24uanMiKTsKIGxvYWQoIlZpc2l0b3JCYXNlLmpzIik7
CiBsb2FkKCJSZXdyaXRlci5qcyIpOwogbG9hZCgiVmlzaXRvci5qcyIpOworbG9hZCgiQ3JlYXRl
TGl0ZXJhbC5qcyIpOworbG9hZCgiQ3JlYXRlTGl0ZXJhbFR5cGUuanMiKTsKIAogbG9hZCgiQWRk
cmVzc1NwYWNlLmpzIik7CiBsb2FkKCJBcnJheVJlZlR5cGUuanMiKTsKQEAgLTEyMyw2ICsxMjUs
NyBAQCBsb2FkKCJUeXBlUmVmLmpzIik7CiBsb2FkKCJUeXBlVmFyaWFibGUuanMiKTsKIGxvYWQo
IlR5cGVkVmFsdWUuanMiKTsKIGxvYWQoIlVpbnRMaXRlcmFsLmpzIik7Citsb2FkKCJVaW50TGl0
ZXJhbFR5cGUuanMiKTsKIGxvYWQoIlVuaWZpY2F0aW9uQ29udGV4dC5qcyIpOwogbG9hZCgiVW5y
ZWFjaGFibGVDb2RlQ2hlY2tlci5qcyIpOwogbG9hZCgiVmFyaWFibGVEZWNsLmpzIik7CkluZGV4
OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9DaGVja2VyLmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NoZWNrZXIuanMJKHJldmlzaW9uIDIyMjAz
MikKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NoZWNrZXIuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTE5NywxNiArMTk3LDExIEBAIGNsYXNzIENoZWNrZXIgZXh0ZW5kcyBWaXNpdG9y
IHsKICAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0
cmluZywgIk5vbi12b2lkIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGEgdmFsdWUiKTsKICAgICB9CiAg
ICAgCi0gICAgdmlzaXRJbnRMaXRlcmFsKG5vZGUpCisgICAgdmlzaXRHZW5lcmljTGl0ZXJhbChu
b2RlKQogICAgIHsKICAgICAgICAgcmV0dXJuIG5vZGUudHlwZTsKICAgICB9CiAgICAgCi0gICAg
dmlzaXRVaW50TGl0ZXJhbChub2RlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2dy
YW0uaW50cmluc2ljcy51aW50MzI7Ci0gICAgfQotICAgIAogICAgIHZpc2l0TnVsbExpdGVyYWwo
bm9kZSkKICAgICB7CiAgICAgICAgIHJldHVybiBub2RlLnR5cGU7CkluZGV4OiBUb29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9DcmVhdGVMaXRlcmFsLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NyZWF0ZUxpdGVyYWwuanMJKG5vbmV4aXN0ZW50KQor
KysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ3JlYXRlTGl0ZXJhbC5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisidXNlIHN0cmljdCI7CisKK2Z1bmN0aW9uIGNyZWF0ZUxpdGVyYWwoY29u
ZmlnKQoreworICAgIGNsYXNzIEdlbmVyaWNMaXRlcmFsIGV4dGVuZHMgRXhwcmVzc2lvbiB7Cisg
ICAgICAgIGNvbnN0cnVjdG9yKG9yaWdpbiwgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHN1cGVyKG9yaWdpbik7CisgICAgICAgICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlOworICAgICAg
ICAgICAgdGhpcy50eXBlID0gY29uZmlnLmNyZWF0ZVR5cGUuY2FsbCh0aGlzLCBvcmlnaW4sIHZh
bHVlKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZ2V0IHZhbHVlKCkgeyByZXR1cm4g
dGhpcy5fdmFsdWU7IH0KKyAgICAgICAgZ2V0IGlzQ29uc3RleHByKCkgeyByZXR1cm4gdHJ1ZTsg
fQorICAgICAgICAKKyAgICAgICAgdG9TdHJpbmcoKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gY29uZmlnLnByZWZlcnJlZFR5cGVOYW1lICsgIkxpdGVyYWw8IiArIHRoaXMudmFsdWUg
KyAiPiI7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcmV0dXJuIEdlbmVyaWNMaXRlcmFs
OworfQorCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9DcmVhdGVMaXRlcmFs
VHlwZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9DcmVh
dGVMaXRlcmFsVHlwZS5qcwkobm9uZXhpc3RlbnQpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9DcmVhdGVMaXRlcmFsVHlwZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEw
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworInVzZSBz
dHJpY3QiOworCitmdW5jdGlvbiBjcmVhdGVMaXRlcmFsVHlwZShjb25maWcpCit7CisgICAgY2xh
c3MgR2VuZXJpY0xpdGVyYWxUeXBlIGV4dGVuZHMgVHlwZSB7CisgICAgICAgIGNvbnN0cnVjdG9y
KG9yaWdpbiwgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN1cGVyKCk7CisgICAgICAg
ICAgICB0aGlzLl9vcmlnaW4gPSBvcmlnaW47CisgICAgICAgICAgICB0aGlzLl92YWx1ZSA9IHZh
bHVlOworICAgICAgICAgICAgdGhpcy5wcmVmZXJyZWRUeXBlID0gbmV3IFR5cGVSZWYob3JpZ2lu
LCBjb25maWcucHJlZmVycmVkVHlwZU5hbWUsIFtdKTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgZ2V0IG9yaWdpbigpIHsgcmV0dXJuIHRoaXMuX29yaWdpbjsgfQorICAgICAgICBnZXQg
dmFsdWUoKSB7IHJldHVybiB0aGlzLl92YWx1ZTsgfQorICAgICAgICAKKyAgICAgICAgZ2V0IGlz
UHJpbWl0aXZlKCkgeyByZXR1cm4gdHJ1ZTsgfQorICAgICAgICBnZXQgaXNVbmlmaWFibGUoKSB7
IHJldHVybiB0cnVlOyB9CisgICAgICAgIGdldCBpc0xpdGVyYWwoKSB7IHJldHVybiB0cnVlOyB9
CisgICAgICAgIAorICAgICAgICB0eXBlVmFyaWFibGVVbmlmeSh1bmlmaWNhdGlvbkNvbnRleHQs
IG90aGVyKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIShvdGhlciBpbnN0YW5jZW9mIFR5
cGUpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuX3R5cGVWYXJpYWJsZVVuaWZ5SW1wbCh1bmlmaWNhdGlvbkNvbnRl
eHQsIG90aGVyKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdW5pZnlJbXBsKHVuaWZp
Y2F0aW9uQ29udGV4dCwgb3RoZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlz
LnR5cGVWYXJpYWJsZVVuaWZ5KHVuaWZpY2F0aW9uQ29udGV4dCwgb3RoZXIpOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBwcmVwYXJlVG9WZXJpZnkodW5pZmljYXRpb25Db250ZXh0KQor
ICAgICAgICB7CisgICAgICAgICAgICBsZXQgcmVhbFRoaXMgPSB1bmlmaWNhdGlvbkNvbnRleHQu
ZmluZCh0aGlzKTsKKyAgICAgICAgICAgIGlmIChyZWFsVGhpcyBpbnN0YW5jZW9mIFR5cGVWYXJp
YWJsZSB8fCByZWFsVGhpcy5pc0xpdGVyYWwpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gKCkg
PT4geworICAgICAgICAgICAgICAgICAgICBpZiAocmVhbFRoaXMudW5pZnkodW5pZmljYXRpb25D
b250ZXh0LCB0aGlzLnByZWZlcnJlZFR5cGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHtyZXN1bHQ6IHRydWV9OworICAgICAgICAgICAgICAgICAgICByZXR1cm4ge3Jlc3VsdDog
ZmFsc2UsIHJlYXNvbjogIlR5cGUgbWlzbWF0Y2ggYmV0d2VlbiAiICsgdW5pZmljYXRpb25Db250
ZXh0LmZpbmQocmVhbFRoaXMpICsgIiBhbmQgIiArIHRoaXMucHJlZmVycmVkVHlwZX07CisgICAg
ICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgdmVyaWZ5QXNBcmd1bWVudCh1bmlmaWNhdGlvbkNvbnRleHQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBjb25maWcudmVyaWZ5QXNBcmd1bWVudC5jYWxsKHRoaXMsIHVuaWZpY2F0
aW9uQ29udGV4dCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZlcmlmeUFzUGFyYW1l
dGVyKHVuaWZpY2F0aW9uQ29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgdGhyb3cgbmV3
IEVycm9yKCJHZW5lcmljTGl0ZXJhbFR5cGUgc2hvdWxkIG5ldmVyIGJlIHVzZWQgYXMgYSB0eXBl
IHBhcmFtZXRlciIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBjb252ZXJzaW9uQ29z
dCh1bmlmaWNhdGlvbkNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGxldCByZWFsVGhp
cyA9IHVuaWZpY2F0aW9uQ29udGV4dC5maW5kKHRoaXMpOworICAgICAgICAgICAgaWYgKHJlYWxU
aGlzLmVxdWFscyh0aGlzLnByZWZlcnJlZFR5cGUpKQorICAgICAgICAgICAgICAgIHJldHVybiAw
OworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGNv
bW1pdFVuaWZpY2F0aW9uKHVuaWZpY2F0aW9uQ29udGV4dCkKKyAgICAgICAgeworICAgICAgICAg
ICAgdGhpcy50eXBlID0gVHlwZVJlZi53cmFwKHVuaWZpY2F0aW9uQ29udGV4dC5maW5kKHRoaXMp
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdG9TdHJpbmcoKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gY29uZmlnLnByZWZlcnJlZFR5cGVOYW1lICsgIkxpdGVyYWxUeXBl
PCIgKyB0aGlzLnZhbHVlICsgIj4iOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHJldHVy
biBHZW5lcmljTGl0ZXJhbFR5cGU7Cit9CisKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL0V2YWx1YXRvci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9FdmFsdWF0b3IuanMJKHJldmlzaW9uIDIyMjAzMikKKysrIFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL0V2YWx1YXRvci5qcwkod29ya2luZyBjb3B5KQpAQCAtMTI2LDEyICsx
MjYsNyBAQCBjbGFzcyBFdmFsdWF0b3IgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAgICAgcmV0dXJu
IG5vZGUudmFyaWFibGUuZVB0cjsKICAgICB9CiAgICAgCi0gICAgdmlzaXRJbnRMaXRlcmFsKG5v
ZGUpCi0gICAgewotICAgICAgICByZXR1cm4gRVB0ci5ib3gobm9kZS52YWx1ZSk7Ci0gICAgfQot
ICAgIAotICAgIHZpc2l0VWludExpdGVyYWwobm9kZSkKKyAgICB2aXNpdEdlbmVyaWNMaXRlcmFs
KG5vZGUpCiAgICAgewogICAgICAgICByZXR1cm4gRVB0ci5ib3gobm9kZS52YWx1ZSk7CiAgICAg
fQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW50TGl0ZXJhbC5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9JbnRMaXRlcmFsLmpzCShy
ZXZpc2lvbiAyMjIwMzIpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9JbnRMaXRl
cmFsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwyMCArMjQsMTIgQEAKICAqLwogInVzZSBzdHJp
Y3QiOwogCi1jbGFzcyBJbnRMaXRlcmFsIGV4dGVuZHMgRXhwcmVzc2lvbiB7Ci0gICAgY29uc3Ry
dWN0b3Iob3JpZ2luLCB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHN1cGVyKG9yaWdpbik7Ci0gICAg
ICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7Ci0gICAgICAgIHRoaXMudHlwZSA9IG5ldyBJbnRMaXRl
cmFsVHlwZShvcmlnaW4sIHZhbHVlKTsKLSAgICB9Ci0gICAgCi0gICAgZ2V0IHZhbHVlKCkgeyBy
ZXR1cm4gdGhpcy5fdmFsdWU7IH0KLSAgICBnZXQgaXNDb25zdGV4cHIoKSB7IHJldHVybiB0cnVl
OyB9CitsZXQgSW50TGl0ZXJhbCA9IGNyZWF0ZUxpdGVyYWwoeworICAgIHByZWZlcnJlZFR5cGVO
YW1lOiAiaW50IiwKICAgICAKLSAgICB0b1N0cmluZygpCisgICAgY3JlYXRlVHlwZShvcmlnaW4s
IHZhbHVlKQogICAgIHsKLSAgICAgICAgcmV0dXJuICIiICsgdGhpcy52YWx1ZTsKKyAgICAgICAg
cmV0dXJuIG5ldyBJbnRMaXRlcmFsVHlwZShvcmlnaW4sIHZhbHVlKTsKICAgICB9Ci19Cit9KTsK
IApJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW50TGl0ZXJhbFR5cGUuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW50TGl0ZXJhbFR5
cGUuanMJKHJldmlzaW9uIDIyMjAzMikKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L0ludExpdGVyYWxUeXBlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwzMyArMjQsOCBAQAogICov
CiAidXNlIHN0cmljdCI7CiAKLWNsYXNzIEludExpdGVyYWxUeXBlIGV4dGVuZHMgVHlwZSB7Ci0g
ICAgY29uc3RydWN0b3Iob3JpZ2luLCB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHN1cGVyKCk7Ci0g
ICAgICAgIHRoaXMuX29yaWdpbiA9IG9yaWdpbjsKLSAgICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1
ZTsKLSAgICAgICAgdGhpcy5pbnRUeXBlID0gbmV3IFR5cGVSZWYob3JpZ2luLCAiaW50IiwgW10p
OwotICAgIH0KLSAgICAKLSAgICBnZXQgb3JpZ2luKCkgeyByZXR1cm4gdGhpcy5fb3JpZ2luOyB9
Ci0gICAgZ2V0IHZhbHVlKCkgeyByZXR1cm4gdGhpcy5fdmFsdWU7IH0KLSAgICAKLSAgICBnZXQg
aXNQcmltaXRpdmUoKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgZ2V0IGlzVW5pZmlhYmxlKCkgeyBy
ZXR1cm4gdHJ1ZTsgfQotICAgIAotICAgIHR5cGVWYXJpYWJsZVVuaWZ5KHVuaWZpY2F0aW9uQ29u
dGV4dCwgb3RoZXIpCi0gICAgewotICAgICAgICBpZiAoIShvdGhlciBpbnN0YW5jZW9mIFR5cGUp
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIHRo
aXMuX3R5cGVWYXJpYWJsZVVuaWZ5SW1wbCh1bmlmaWNhdGlvbkNvbnRleHQsIG90aGVyKTsKLSAg
ICB9Ci0gICAgCi0gICAgdW5pZnlJbXBsKHVuaWZpY2F0aW9uQ29udGV4dCwgb3RoZXIpCi0gICAg
ewotICAgICAgICByZXR1cm4gdGhpcy50eXBlVmFyaWFibGVVbmlmeSh1bmlmaWNhdGlvbkNvbnRl
eHQsIG90aGVyKTsKLSAgICB9CitsZXQgSW50TGl0ZXJhbFR5cGUgPSBjcmVhdGVMaXRlcmFsVHlw
ZSh7CisgICAgcHJlZmVycmVkVHlwZU5hbWU6ICJpbnQiLAogICAgIAogICAgIHZlcmlmeUFzQXJn
dW1lbnQodW5pZmljYXRpb25Db250ZXh0KQogICAgIHsKQEAgLTYxLDI4ICszNiw0IEBAIGNsYXNz
IEludExpdGVyYWxUeXBlIGV4dGVuZHMgVHlwZSB7CiAgICAgICAgICAgICByZXR1cm4ge3Jlc3Vs
dDogZmFsc2UsIHJlYXNvbjogIkludCBsaXRlcmFsICIgKyB0aGlzLnZhbHVlICsgIiB0b28gbGFy
Z2UgdG8gYmUgcmVwcmVzZW50ZWQgYnkgdHlwZSAiICsgcmVhbFRoaXN9OwogICAgICAgICByZXR1
cm4ge3Jlc3VsdDogdHJ1ZX07CiAgICAgfQotICAgIAotICAgIHZlcmlmeUFzUGFyYW1ldGVyKHVu
aWZpY2F0aW9uQ29udGV4dCkKLSAgICB7Ci0gICAgICAgIHRocm93IG5ldyBFcnJvcigiSW50TGl0
ZXJhbFR5cGUgc2hvdWxkIG5ldmVyIGJlIHVzZWQgYXMgYSB0eXBlIHBhcmFtZXRlciIpOwotICAg
IH0KLSAgICAKLSAgICBjb252ZXJzaW9uQ29zdCh1bmlmaWNhdGlvbkNvbnRleHQpCi0gICAgewot
ICAgICAgICBsZXQgcmVhbFRoaXMgPSB1bmlmaWNhdGlvbkNvbnRleHQuZmluZCh0aGlzKTsKLSAg
ICAgICAgaWYgKHJlYWxUaGlzLmVxdWFscyh0aGlzLmludFR5cGUpKQotICAgICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLSAgICAKLSAgICBjb21taXRVbmlmaWNh
dGlvbih1bmlmaWNhdGlvbkNvbnRleHQpCi0gICAgewotICAgICAgICB0aGlzLnR5cGUgPSBUeXBl
UmVmLndyYXAodW5pZmljYXRpb25Db250ZXh0LmZpbmQodGhpcykpOwotICAgIH0KLSAgICAKLSAg
ICB0b1N0cmluZygpCi0gICAgewotICAgICAgICByZXR1cm4gImludExpdGVyYWxUeXBlPCIgKyB0
aGlzLnZhbHVlICsgIj4iOwotICAgIH0KLX0KLQorfSk7CkluZGV4OiBUb29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9JbnRyaW5zaWNzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL0ludHJpbnNpY3MuanMJKHJldmlzaW9uIDIyMjAzMikKKysrIFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0ludHJpbnNpY3MuanMJKHdvcmtpbmcgY29weSkKQEAg
LTY2LDYgKzY2LDcgQEAgY2xhc3MgSW50cmluc2ljcyB7CiAgICAgICAgICAgICAgICAgdGhpcy5p
bnQzMiA9IHR5cGU7CiAgICAgICAgICAgICAgICAgdHlwZS5pc0ludCA9IHRydWU7CiAgICAgICAg
ICAgICAgICAgdHlwZS5pc051bWJlciA9IHRydWU7CisgICAgICAgICAgICAgICAgdHlwZS5pc1Np
Z25lZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgdHlwZS5jYW5SZXByZXNlbnQgPSB2YWx1ZSA9
PiBpc0JpdHdpc2VFcXVpdmFsZW50KHZhbHVlIHwgMCwgdmFsdWUpOwogICAgICAgICAgICAgICAg
IHR5cGUuc2l6ZSA9IDE7CiAgICAgICAgICAgICAgICAgdHlwZS5wb3B1bGF0ZURlZmF1bHRWYWx1
ZSA9IChidWZmZXIsIG9mZnNldCkgPT4gYnVmZmVyLnNldChvZmZzZXQsIDApOwpAQCAtNzcsNiAr
NzgsNyBAQCBjbGFzcyBJbnRyaW5zaWNzIHsKICAgICAgICAgICAgICAgICB0aGlzLnVpbnQzMiA9
IHR5cGU7CiAgICAgICAgICAgICAgICAgdHlwZS5pc0ludCA9IHRydWU7CiAgICAgICAgICAgICAg
ICAgdHlwZS5pc051bWJlciA9IHRydWU7CisgICAgICAgICAgICAgICAgdHlwZS5pc1NpZ25lZCA9
IGZhbHNlOwogICAgICAgICAgICAgICAgIHR5cGUuY2FuUmVwcmVzZW50ID0gdmFsdWUgPT4gaXNC
aXR3aXNlRXF1aXZhbGVudCh2YWx1ZSA+Pj4gMCwgdmFsdWUpOwogICAgICAgICAgICAgICAgIHR5
cGUuc2l6ZSA9IDE7CiAgICAgICAgICAgICAgICAgdHlwZS5wb3B1bGF0ZURlZmF1bHRWYWx1ZSA9
IChidWZmZXIsIG9mZnNldCkgPT4gYnVmZmVyLnNldChvZmZzZXQsIDApOwpJbmRleDogVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTGl0ZXJhbFR5cGVDaGVja2VyLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0xpdGVyYWxUeXBlQ2hlY2tlci5qcwko
cmV2aXNpb24gMjIyMDMyKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTGl0ZXJh
bFR5cGVDaGVja2VyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBAIGNsYXNzIExp
dGVyYWxUeXBlQ2hlY2tlciBleHRlbmRzIFZpc2l0b3IKICAgICAgICAgICAgIHRocm93IG5ldyBF
cnJvcigiTnVsbCBhdCAiICsgbm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nICsgIiBkb2VzIG5vdCBo
YXZlIHR5cGUiKTsKICAgICB9CiAgICAgCi0gICAgdmlzaXRJbnRMaXRlcmFsVHlwZShub2RlKQor
ICAgIHZpc2l0R2VuZXJpY0xpdGVyYWxUeXBlKG5vZGUpCiAgICAgewogICAgICAgICBpZiAoIW5v
ZGUudHlwZSkKICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihub2RlICsgIiBhdCAiICsgbm9k
ZS5vcmlnaW4ub3JpZ2luU3RyaW5nICsgIiBkb2VzIG5vdCBoYXZlIHR5cGUiKTsKSW5kZXg6IFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05vZGUuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTm9kZS5qcwkocmV2aXNpb24gMjIyMDMyKQorKysgVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTm9kZS5qcwkod29ya2luZyBjb3B5KQpAQCAtNzIs
MTAgKzcyLDEyIEBAIGNsYXNzIE5vZGUgewogICAgIH0KICAgICAKICAgICAvLyBNb3N0IHR5cGUg
dmFyaWFibGVzIGRvbid0IGNhcmUgYWJvdXQgdGhpcy4KLSAgICBjb21taXRVbmlmaWNhdGlvbih1
bmlmaWNhdG9pbkNvbnRleHQpIHsgfQorICAgIHByZXBhcmVUb1ZlcmlmeSh1bmlmaWNhdGlvbkNv
bnRleHQpIHsgfQorICAgIGNvbW1pdFVuaWZpY2F0aW9uKHVuaWZpY2F0aW9uQ29udGV4dCkgeyB9
CiAgICAgCiAgICAgZ2V0IHVuaWZ5Tm9kZSgpIHsgcmV0dXJuIHRoaXM7IH0KICAgICBnZXQgaXNV
bmlmaWFibGUoKSB7IHJldHVybiBmYWxzZTsgfQorICAgIGdldCBpc0xpdGVyYWwoKSB7IHJldHVy
biBmYWxzZTsgfQogICAgIAogICAgIGdldCBpc05hdGl2ZSgpIHsgcmV0dXJuIGZhbHNlOyB9CiAg
ICAgCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OdWxsVHlwZS5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OdWxsVHlwZS5qcwkocmV2
aXNpb24gMjIyMDMyKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTnVsbFR5cGUu
anMJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAgY2xhc3MgTnVsbFR5cGUgZXh0ZW5k
cyBUeXBlIHsKICAgICAKICAgICBnZXQgaXNQcmltaXRpdmUoKSB7IHJldHVybiB0cnVlOyB9CiAg
ICAgZ2V0IGlzVW5pZmlhYmxlKCkgeyByZXR1cm4gdHJ1ZTsgfQorICAgIGdldCBpc0xpdGVyYWwo
KSB7IHJldHVybiB0cnVlOyB9CiAgICAgCiAgICAgdHlwZVZhcmlhYmxlVW5pZnkodW5pZmljYXRp
b25Db250ZXh0LCBvdGhlcikKICAgICB7CkBAIC03Myw3ICs3NCw3IEBAIGNsYXNzIE51bGxUeXBl
IGV4dGVuZHMgVHlwZSB7CiAgICAgCiAgICAgdG9TdHJpbmcoKQogICAgIHsKLSAgICAgICAgcmV0
dXJuICJudWxsIjsKKyAgICAgICAgcmV0dXJuICJudWxsVHlwZSI7CiAgICAgfQogfQogCkluZGV4
OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QYXJzZS5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QYXJzZS5qcwkocmV2aXNpb24gMjIyMDMyKQor
KysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUGFyc2UuanMJKHdvcmtpbmcgY29weSkK
QEAgLTE3OCw3ICsxNzgsNyBAQCBmdW5jdGlvbiBwYXJzZShwcm9ncmFtLCBvcmlnaW4sIG9yaWdp
bktpCiAgICAgICAgICAgICByZXR1cm4gbmV3IEludExpdGVyYWwodG9rZW4sIGludFZlcnNpb24p
OwogICAgICAgICB9CiAgICAgICAgIGlmICh0b2tlbiA9IHRyeUNvbnN1bWVLaW5kKCJ1aW50TGl0
ZXJhbCIpKSB7Ci0gICAgICAgICAgICBsZXQgdWludFZlcnNpb24gPSB0b2tlbi50ZXh0ID4+PiAw
OworICAgICAgICAgICAgbGV0IHVpbnRWZXJzaW9uID0gdG9rZW4udGV4dC5zdWJzdHIoMCwgdG9r
ZW4udGV4dC5sZW5ndGggLSAxKSA+Pj4gMDsKICAgICAgICAgICAgIGlmICh1aW50VmVyc2lvbiAr
ICJ1IiAhPT0gdG9rZW4udGV4dCkKICAgICAgICAgICAgICAgICBsZXhlci5mYWlsKCJJbnRlZ2Vy
IGxpdGVyYWwgaXMgbm90IDMyLWJpdCB1bnNpZ25lZCBpbnRlZ2VyIik7CiAgICAgICAgICAgICBy
ZXR1cm4gbmV3IFVpbnRMaXRlcmFsKHRva2VuLCB1aW50VmVyc2lvbik7CkluZGV4OiBUb29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXdyaXRlci5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXdyaXRlci5qcwkocmV2aXNpb24gMjIyMDMyKQorKysg
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmV3cml0ZXIuanMJKHdvcmtpbmcgY29weSkK
QEAgLTIxMSwyNiArMjExLDIxIEBAIGNsYXNzIFJld3JpdGVyIGV4dGVuZHMgVmlzaXRvckJhc2Ug
ewogICAgICAgICByZXR1cm4gbmV3IEJyZWFrKG5vZGUub3JpZ2luKTsKICAgICB9CiAgICAgCi0g
ICAgdmlzaXRJbnRMaXRlcmFsKG5vZGUpCisgICAgdmlzaXRHZW5lcmljTGl0ZXJhbChub2RlKQog
ICAgIHsKICAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBJbnRMaXRlcmFsKG5vZGUub3JpZ2luLCBu
b2RlLnZhbHVlKTsKICAgICAgICAgcmVzdWx0LnR5cGUgPSBub2RlLnR5cGUudmlzaXQodGhpcyk7
CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIAotICAgIHZpc2l0SW50TGl0ZXJh
bFR5cGUobm9kZSkKKyAgICB2aXNpdEdlbmVyaWNMaXRlcmFsVHlwZShub2RlKQogICAgIHsKLSAg
ICAgICAgbGV0IHJlc3VsdCA9IG5ldyBJbnRMaXRlcmFsVHlwZShub2RlLm9yaWdpbiwgbm9kZS52
YWx1ZSk7CisgICAgICAgIGxldCByZXN1bHQgPSBuZXcgbm9kZS5jb25zdHJ1Y3Rvcihub2RlLm9y
aWdpbiwgbm9kZS52YWx1ZSk7CiAgICAgICAgIHJlc3VsdC50eXBlID0gbm9kZS50eXBlID8gbm9k
ZS50eXBlLnZpc2l0KHRoaXMpIDogbnVsbDsKLSAgICAgICAgcmVzdWx0LmludFR5cGUgPSBub2Rl
LmludFR5cGUudmlzaXQodGhpcyk7CisgICAgICAgIHJlc3VsdC5wcmVmZXJyZWRUeXBlID0gbm9k
ZS5wcmVmZXJyZWRUeXBlLnZpc2l0KHRoaXMpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
IH0KIAotICAgIHZpc2l0VWludExpdGVyYWwobm9kZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBu
b2RlOwotICAgIH0KLQogICAgIHZpc2l0Qm9vbExpdGVyYWwobm9kZSkKICAgICB7CiAgICAgICAg
IHJldHVybiBub2RlOwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5o
dG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuaHRt
bAkocmV2aXNpb24gMjIyMDMyKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVz
dC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC05LDYgKzksOSBAQAogPHNjcmlwdCBzcmM9IlZpc2l0
b3JCYXNlLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJSZXdyaXRlci5qcyI+PC9zY3JpcHQ+
CiA8c2NyaXB0IHNyYz0iVmlzaXRvci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iQ3JlYXRl
TGl0ZXJhbC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iQ3JlYXRlTGl0ZXJhbFR5cGUuanMi
Pjwvc2NyaXB0PgorCiA8c2NyaXB0IHNyYz0iQWRkcmVzc1NwYWNlLmpzIj48L3NjcmlwdD4KIDxz
Y3JpcHQgc3JjPSJBcnJheVJlZlR5cGUuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkFycmF5
VHlwZS5qcyI+PC9zY3JpcHQ+CkBAIC05OSw2ICsxMDIsNyBAQAogPHNjcmlwdCBzcmM9IlR5cGVW
YXJpYWJsZS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iVHlwZWRWYWx1ZS5qcyI+PC9zY3Jp
cHQ+CiA8c2NyaXB0IHNyYz0iVWludExpdGVyYWwuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
IlVpbnRMaXRlcmFsVHlwZS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iVW5pZmljYXRpb25D
b250ZXh0LmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJVbnJlYWNoYWJsZUNvZGVDaGVja2Vy
LmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJWYXJpYWJsZURlY2wuanMiPjwvc2NyaXB0PgpJ
bmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0LmpzCShyZXZpc2lvbiAyMjIwMzIp
CisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0LmpzCSh3b3JraW5nIGNvcHkp
CkBAIC02NSw3ICs2NSw3IEBAIGZ1bmN0aW9uIGNoZWNrTnVtYmVyKHByb2dyYW0sIHJlc3VsdCwg
ZXgKICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJXcm9uZyByZXN1bHQ6ICIgKyByZXN1bHQgKyAi
IChleHBlY3RlZCAiICsgZXhwZWN0ZWQgKyAiKSIpOwogfQogCi1mdW5jdGlvbiBtYWtlVUludChw
cm9ncmFtLCB2YWx1ZSkKK2Z1bmN0aW9uIG1ha2VVaW50KHByb2dyYW0sIHZhbHVlKQogewogICAg
IHJldHVybiBUeXBlZFZhbHVlLmJveChwcm9ncmFtLmludHJpbnNpY3MudWludDMyLCB2YWx1ZSk7
CiB9CkBAIC04Miw3ICs4Miw3IEBAIGZ1bmN0aW9uIGNoZWNrSW50KHByb2dyYW0sIHJlc3VsdCwg
ZXhwZWMKICAgICBjaGVja051bWJlcihwcm9ncmFtLCByZXN1bHQsIGV4cGVjdGVkKTsKIH0KIAot
ZnVuY3Rpb24gY2hlY2tVSW50KHByb2dyYW0sIHJlc3VsdCwgZXhwZWN0ZWQpCitmdW5jdGlvbiBj
aGVja1VpbnQocHJvZ3JhbSwgcmVzdWx0LCBleHBlY3RlZCkKIHsKICAgICBpZiAoIXJlc3VsdC50
eXBlLmVxdWFscyhwcm9ncmFtLmludHJpbnNpY3MudWludDMyKSkKICAgICAgICAgdGhyb3cgbmV3
IEVycm9yKCJXcm9uZyByZXN1bHQgdHlwZTogIiArIHJlc3VsdC50eXBlKTsKQEAgLTE0OSwyMCAr
MTQ5LDIwIEBAIGZ1bmN0aW9uIFRFU1RfaW50U2ltcGxlTWF0aCgpIHsKIAogZnVuY3Rpb24gVEVT
VF91aW50U2ltcGxlTWF0aCgpIHsKICAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcCgidWludCBmb28o
dWludCB4LCB1aW50IHkpIHsgcmV0dXJuIHggKyB5OyB9Iik7Ci0gICAgY2hlY2tVSW50KHByb2dy
YW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlVUludChwcm9ncmFtLCA3
KSwgbWFrZVVJbnQocHJvZ3JhbSwgNSldKSwgMTIpOworICAgIGNoZWNrVWludChwcm9ncmFtLCBj
YWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZVVpbnQocHJvZ3JhbSwgNyksIG1h
a2VVaW50KHByb2dyYW0sIDUpXSksIDEyKTsKICAgICBwcm9ncmFtID0gZG9QcmVwKCJ1aW50IGZv
byh1aW50IHgsIHVpbnQgeSkgeyByZXR1cm4geCAtIHk7IH0iKTsKLSAgICBjaGVja1VJbnQocHJv
Z3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VVSW50KHByb2dyYW0s
IDcpLCBtYWtlVUludChwcm9ncmFtLCA1KV0pLCAyKTsKLSAgICBjaGVja1VJbnQocHJvZ3JhbSwg
Y2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VVSW50KHByb2dyYW0sIDUpLCBt
YWtlVUludChwcm9ncmFtLCA3KV0pLCA0Mjk0OTY3Mjk0KTsKKyAgICBjaGVja1VpbnQocHJvZ3Jh
bSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VVaW50KHByb2dyYW0sIDcp
LCBtYWtlVWludChwcm9ncmFtLCA1KV0pLCAyKTsKKyAgICBjaGVja1VpbnQocHJvZ3JhbSwgY2Fs
bEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VVaW50KHByb2dyYW0sIDUpLCBtYWtl
VWludChwcm9ncmFtLCA3KV0pLCA0Mjk0OTY3Mjk0KTsKICAgICBwcm9ncmFtID0gZG9QcmVwKCJ1
aW50IGZvbyh1aW50IHgsIHVpbnQgeSkgeyByZXR1cm4geCAqIHk7IH0iKTsKLSAgICBjaGVja1VJ
bnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VVSW50KHBy
b2dyYW0sIDcpLCBtYWtlVUludChwcm9ncmFtLCA1KV0pLCAzNSk7CisgICAgY2hlY2tVaW50KHBy
b2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlVWludChwcm9ncmFt
LCA3KSwgbWFrZVVpbnQocHJvZ3JhbSwgNSldKSwgMzUpOwogICAgIHByb2dyYW0gPSBkb1ByZXAo
InVpbnQgZm9vKHVpbnQgeCwgdWludCB5KSB7IHJldHVybiB4IC8geTsgfSIpOwotICAgIGNoZWNr
VUludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZVVJbnQo
cHJvZ3JhbSwgNyksIG1ha2VVSW50KHByb2dyYW0sIDIpXSksIDMpOworICAgIGNoZWNrVWludChw
cm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZVVpbnQocHJvZ3Jh
bSwgNyksIG1ha2VVaW50KHByb2dyYW0sIDIpXSksIDMpOwogfQogCiBmdW5jdGlvbiBURVNUX2Vx
dWFsaXR5KCkgewogICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKCJib29sIGZvbyh1aW50IHgsIHVp
bnQgeSkgeyByZXR1cm4geCA9PSB5OyB9Iik7Ci0gICAgY2hlY2tCb29sKHByb2dyYW0sIGNhbGxG
dW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlVUludChwcm9ncmFtLCA3KSwgbWFrZVVJ
bnQocHJvZ3JhbSwgNSldKSwgZmFsc2UpOwotICAgIGNoZWNrQm9vbChwcm9ncmFtLCBjYWxsRnVu
Y3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZVVJbnQocHJvZ3JhbSwgNyksIG1ha2VVSW50
KHByb2dyYW0sIDcpXSksIHRydWUpOworICAgIGNoZWNrQm9vbChwcm9ncmFtLCBjYWxsRnVuY3Rp
b24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZVVpbnQocHJvZ3JhbSwgNyksIG1ha2VVaW50KHBy
b2dyYW0sIDUpXSksIGZhbHNlKTsKKyAgICBjaGVja0Jvb2wocHJvZ3JhbSwgY2FsbEZ1bmN0aW9u
KHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VVaW50KHByb2dyYW0sIDcpLCBtYWtlVWludChwcm9n
cmFtLCA3KV0pLCB0cnVlKTsKICAgICBwcm9ncmFtID0gZG9QcmVwKCJib29sIGZvbyhpbnQgeCwg
aW50IHkpIHsgcmV0dXJuIHggPT0geTsgfSIpOwogICAgIGNoZWNrQm9vbChwcm9ncmFtLCBjYWxs
RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZUludChwcm9ncmFtLCA3KSwgbWFrZUlu
dChwcm9ncmFtLCA1KV0pLCBmYWxzZSk7CiAgICAgY2hlY2tCb29sKHByb2dyYW0sIGNhbGxGdW5j
dGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlSW50KHByb2dyYW0sIDcpLCBtYWtlSW50KHBy
b2dyYW0sIDcpXSksIHRydWUpOwpAQCAtMTgyLDggKzE4Miw4IEBAIGZ1bmN0aW9uIFRFU1RfbG9n
aWNhbE5lZ2F0aW9uKCkKIAogZnVuY3Rpb24gVEVTVF9ub3RFcXVhbGl0eSgpIHsKICAgICBsZXQg
cHJvZ3JhbSA9IGRvUHJlcCgiYm9vbCBmb28odWludCB4LCB1aW50IHkpIHsgcmV0dXJuIHggIT0g
eTsgfSIpOwotICAgIGNoZWNrQm9vbChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZv
byIsIFtdLCBbbWFrZVVJbnQocHJvZ3JhbSwgNyksIG1ha2VVSW50KHByb2dyYW0sIDUpXSksIHRy
dWUpOwotICAgIGNoZWNrQm9vbChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIs
IFtdLCBbbWFrZVVJbnQocHJvZ3JhbSwgNyksIG1ha2VVSW50KHByb2dyYW0sIDcpXSksIGZhbHNl
KTsKKyAgICBjaGVja0Jvb2wocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBb
XSwgW21ha2VVaW50KHByb2dyYW0sIDcpLCBtYWtlVWludChwcm9ncmFtLCA1KV0pLCB0cnVlKTsK
KyAgICBjaGVja0Jvb2wocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwg
W21ha2VVaW50KHByb2dyYW0sIDcpLCBtYWtlVWludChwcm9ncmFtLCA3KV0pLCBmYWxzZSk7CiAg
ICAgcHJvZ3JhbSA9IGRvUHJlcCgiYm9vbCBmb28oaW50IHgsIGludCB5KSB7IHJldHVybiB4ICE9
IHk7IH0iKTsKICAgICBjaGVja0Jvb2wocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJm
b28iLCBbXSwgW21ha2VJbnQocHJvZ3JhbSwgNyksIG1ha2VJbnQocHJvZ3JhbSwgNSldKSwgdHJ1
ZSk7CiAgICAgY2hlY2tCb29sKHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwg
W10sIFttYWtlSW50KHByb2dyYW0sIDcpLCBtYWtlSW50KHByb2dyYW0sIDcpXSksIGZhbHNlKTsK
QEAgLTE0NTcsMTIgKzE0NTcsNDQgQEAgZnVuY3Rpb24gVEVTVF9pbnRPdmVybG9hZFJlc29sdXRp
b25HZW5lcgogCiBmdW5jdGlvbiBURVNUX2ludExpdGVyYWxHZW5lcmljKCkKIHsKLSAgICBjaGVj
a0ZhaWwoCi0gICAgICAgICgpID0+IGRvUHJlcChgCi0gICAgICAgICAgICBpbnQgZm9vPFQ+KFQp
IHsgcmV0dXJuIDE7IH0KLSAgICAgICAgICAgIGludCBiYXIoKSB7IHJldHVybiBmb28oNDIpOyB9
Ci0gICAgICAgIGApLAotICAgICAgICAoZSkgPT4gZSBpbnN0YW5jZW9mIFdUeXBlRXJyb3IpOwor
ICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKKyAgICAgICAgaW50IGZvbzxUPihUIHgpIHsgcmV0
dXJuIDM0Nzg7IH0KKyAgICAgICAgaW50IGJhcigpIHsgcmV0dXJuIGZvbyg0Mik7IH0KKyAgICBg
KTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImJhciIsIFtd
LCBbXSksIDM0NzgpOworfQorCitmdW5jdGlvbiBURVNUX2ludExpdGVyYWxHZW5lcmljV2l0aFBy
b3RvY29scygpCit7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAgICAgICBwcm90b2Nv
bCBDb252ZXJ0aWJsZVRvSW50IHsKKyAgICAgICAgICAgIG9wZXJhdG9yIGludChDb252ZXJ0aWJs
ZVRvSW50KTsKKyAgICAgICAgfQorICAgICAgICBpbnQgZm9vPFQ6Q29udmVydGlibGVUb0ludD4o
VCB4KSB7IHJldHVybiBpbnQoeCk7IH0KKyAgICAgICAgaW50IGJhcigpIHsgcmV0dXJuIGZvbyg0
Mik7IH0KKyAgICBgKTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3Jh
bSwgImJhciIsIFtdLCBbXSksIDQyKTsKK30KKworZnVuY3Rpb24gVEVTVF91aW50TGl0ZXJhbEdl
bmVyaWMoKQoreworICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKKyAgICAgICAgaW50IGZvbzxU
PihUIHgpIHsgcmV0dXJuIDM0Nzg7IH0KKyAgICAgICAgaW50IGJhcigpIHsgcmV0dXJuIGZvbyg0
MnUpOyB9CisgICAgYCk7CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dy
YW0sICJiYXIiLCBbXSwgW10pLCAzNDc4KTsKK30KKworZnVuY3Rpb24gVEVTVF91aW50TGl0ZXJh
bEdlbmVyaWNXaXRoUHJvdG9jb2xzKCkKK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisg
ICAgICAgIHByb3RvY29sIENvbnZlcnRpYmxlVG9VaW50IHsKKyAgICAgICAgICAgIG9wZXJhdG9y
IHVpbnQoQ29udmVydGlibGVUb1VpbnQpOworICAgICAgICB9CisgICAgICAgIHVpbnQgZm9vPFQ6
Q29udmVydGlibGVUb1VpbnQ+KFQgeCkgeyByZXR1cm4gdWludCh4KTsgfQorICAgICAgICB1aW50
IGJhcigpIHsgcmV0dXJuIGZvbyg0MnUpOyB9CisgICAgYCk7CisgICAgY2hlY2tVaW50KHByb2dy
YW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiYmFyIiwgW10sIFtdKSwgNDIpOwogfQogCiBmdW5j
dGlvbiBURVNUX2ludExpdGVyYWxHZW5lcmljU3BlY2lmaWMoKQpAQCAtMjA1OSw2ICsyMDkxLDg5
IEBAIGZ1bmN0aW9uIFRFU1RfcHJvdG9jb2xFeHRlbmRzVHdvKCkKICAgICBjaGVja0ludChwcm9n
cmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgInRoaW5neSIsIFtdLCBbbWFrZUludChwcm9ncmFt
LCA2NDIpXSksIDY0MiArIDc0MyArIDkxICsgMzkpOwogfQogCitmdW5jdGlvbiBURVNUX3R3b0lu
dExpdGVyYWxzKCkKK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisgICAgICAgIGJvb2wg
Zm9vKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIDQyID09IDQyOworICAgICAgICB9
CisgICAgYCk7CisgICAgY2hlY2tCb29sKHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAi
Zm9vIiwgW10sIFtdKSwgdHJ1ZSk7Cit9CisKK2Z1bmN0aW9uIFRFU1RfdW5pZnlEaWZmZXJlbnRM
aXRlcmFscygpCit7CisgICAgY2hlY2tGYWlsKAorICAgICAgICAoKSA9PiBkb1ByZXAoYAorICAg
ICAgICAgICAgdm9pZCBiYXI8VD4oVCwgVCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHZvaWQgZm9vKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBi
YXIoNDIsIDQydSk7CisgICAgICAgICAgICB9CisgICAgICAgIGApLAorICAgICAgICAoZSkgPT4g
ZSBpbnN0YW5jZW9mIFdUeXBlRXJyb3IpOworfQorCitmdW5jdGlvbiBURVNUX3VuaWZ5RGlmZmVy
ZW50TGl0ZXJhbHNCYWNrd2FyZHMoKQoreworICAgIGNoZWNrRmFpbCgKKyAgICAgICAgKCkgPT4g
ZG9QcmVwKGAKKyAgICAgICAgICAgIHZvaWQgYmFyPFQ+KFQsIFQpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICB2b2lkIGZvbygpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgYmFyKDQydSwgNDIpOworICAgICAgICAgICAgfQorICAgICAgICBgKSwKKyAg
ICAgICAgKGUpID0+IGUgaW5zdGFuY2VvZiBXVHlwZUVycm9yKTsKK30KKworZnVuY3Rpb24gVEVT
VF91bmlmeVZlcnlEaWZmZXJlbnRMaXRlcmFscygpCit7CisgICAgY2hlY2tGYWlsKAorICAgICAg
ICAoKSA9PiBkb1ByZXAoYAorICAgICAgICAgICAgdm9pZCBiYXI8VD4oVCwgVCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZvaWQgZm9vKCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBiYXIoNDIsIG51bGwpOworICAgICAgICAgICAgfQorICAgICAg
ICBgKSwKKyAgICAgICAgKGUpID0+IGUgaW5zdGFuY2VvZiBXVHlwZUVycm9yKTsKK30KKworZnVu
Y3Rpb24gVEVTVF91bmlmeVZlcnlEaWZmZXJlbnRMaXRlcmFsc0JhY2t3YXJkcygpCit7CisgICAg
Y2hlY2tGYWlsKAorICAgICAgICAoKSA9PiBkb1ByZXAoYAorICAgICAgICAgICAgdm9pZCBiYXI8
VD4oVCwgVCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZvaWQg
Zm9vKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBiYXIobnVsbCwgNDIpOworICAg
ICAgICAgICAgfQorICAgICAgICBgKSwKKyAgICAgICAgKGUpID0+IGUgaW5zdGFuY2VvZiBXVHlw
ZUVycm9yKTsKK30KKworZnVuY3Rpb24gVEVTVF9hc3NpZ25VaW50VG9JbnQoKQoreworICAgIGNo
ZWNrRmFpbCgKKyAgICAgICAgKCkgPT4gZG9QcmVwKGAKKyAgICAgICAgICAgIHZvaWQgZm9vKCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbnQgeCA9IDQydTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgYCksCisgICAgICAgIChlKSA9PiBlIGluc3RhbmNlb2YgV1R5cGVFcnJvciAm
JiBlLm1lc3NhZ2UuaW5kZXhPZigiVHlwZSBtaXNtYXRjaCBpbiB2YXJpYWJsZSBpbml0aWFsaXph
dGlvbiIpICE9IC0xKTsKK30KKwogbGV0IGZpbHRlciA9IC8uKi87IC8vIHJ1biBldmVyeXRoaW5n
IGJ5IGRlZmF1bHQKIGlmICh0aGlzWyJhcmd1bWVudHMiXSkgewogICAgIGZvciAobGV0IGkgPSAw
OyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9VaW50TGl0ZXJhbC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9VaW50TGl0ZXJhbC5qcwkocmV2aXNpb24gMjIyMDMyKQorKysgVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVWludExpdGVyYWwuanMJKHdvcmtpbmcgY29weSkKQEAg
LTI0LDE5ICsyNCwxMiBAQAogICovCiAidXNlIHN0cmljdCI7CiAKLWNsYXNzIFVpbnRMaXRlcmFs
IGV4dGVuZHMgRXhwcmVzc2lvbiB7Ci0gICAgY29uc3RydWN0b3Iob3JpZ2luLCB2YWx1ZSkKLSAg
ICB7Ci0gICAgICAgIHN1cGVyKG9yaWdpbik7Ci0gICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7
Ci0gICAgfQotICAgIAotICAgIGdldCB2YWx1ZSgpIHsgcmV0dXJuIHRoaXMuX3ZhbHVlOyB9Ci0g
ICAgZ2V0IGlzQ29uc3RleHByKCkgeyByZXR1cm4gdHJ1ZTsgfQorbGV0IFVpbnRMaXRlcmFsID0g
Y3JlYXRlTGl0ZXJhbCh7CisgICAgcHJlZmVycmVkVHlwZU5hbWU6ICJ1aW50IiwKICAgICAKLSAg
ICB0b1N0cmluZygpCisgICAgY3JlYXRlVHlwZShvcmlnaW4sIHZhbHVlKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuICIiICsgdGhpcy5fdmFsdWUgKyAidSI7CisgICAgICAgIHJldHVybiBuZXcgVWlu
dExpdGVyYWxUeXBlKG9yaWdpbiwgdmFsdWUpOwogICAgIH0KLX0KK30pOwogCkluZGV4OiBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9VaW50TGl0ZXJhbFR5cGUuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVWludExpdGVyYWxUeXBlLmpzCShub25l
eGlzdGVudCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1VpbnRMaXRlcmFsVHlw
ZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisidXNlIHN0cmljdCI7CisKK2xldCBVaW50TGl0ZXJh
bFR5cGUgPSBjcmVhdGVMaXRlcmFsVHlwZSh7CisgICAgcHJlZmVycmVkVHlwZU5hbWU6ICJ1aW50
IiwKKyAgICAKKyAgICB2ZXJpZnlBc0FyZ3VtZW50KHVuaWZpY2F0aW9uQ29udGV4dCkKKyAgICB7
CisgICAgICAgIGxldCByZWFsVGhpcyA9IHVuaWZpY2F0aW9uQ29udGV4dC5maW5kKHRoaXMpOwor
ICAgICAgICBpZiAoIXJlYWxUaGlzLmlzSW50KQorICAgICAgICAgICAgcmV0dXJuIHtyZXN1bHQ6
IGZhbHNlLCByZWFzb246ICJDYW5ub3QgdXNlIHVpbnQgbGl0ZXJhbCB3aXRoIG5vbi1pbnRlZ2Vy
IHR5cGUgIiArIHJlYWxUaGlzfTsKKyAgICAgICAgaWYgKHJlYWxUaGlzLmlzU2lnbmVkKQorICAg
ICAgICAgICAgcmV0dXJuIHtyZXN1bHQ6IGZhbHNlLCByZWFzb246ICJDYW5ub3QgdXNlIHVpbnQg
bGl0ZXJhbCB3aXRoIHNpZ25lZCB0eXBlICIgKyByZWFsVGhpc307CisgICAgICAgIGlmICghcmVh
bFRoaXMuY2FuUmVwcmVzZW50KHRoaXMudmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIHtyZXN1
bHQ6IGZhbHNlLCByZWFzb246ICJVaW50IGxpdGVyYWwgIiArIHRoaXMudmFsdWUgKyAiIHRvbyBs
YXJnZSB0byBiZSByZXByZXNlbnRlZCBieSB0eXBlICIgKyByZWFsVGhpc307CisgICAgICAgIHJl
dHVybiB7cmVzdWx0OiB0cnVlfTsKKyAgICB9Cit9KTsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL1VuaWZpY2F0aW9uQ29udGV4dC5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9VbmlmaWNhdGlvbkNvbnRleHQuanMJKHJldmlzaW9uIDIy
MjAzMikKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1VuaWZpY2F0aW9uQ29udGV4
dC5qcwkod29ya2luZyBjb3B5KQpAQCAtOTEsNiArOTEsMTkgQEAgY2xhc3MgVW5pZmljYXRpb25D
b250ZXh0IHsKICAgICAKICAgICB2ZXJpZnkoKQogICAgIHsKKyAgICAgICAgLy8gV2UgZG8gYSB0
d28tcGhhc2UgcHJlLXZlcmlmaWNhdGlvbi4gVGhpcyBnaXZlcyBsaXRlcmFscyBhIGNoYW5jZSB0
byBzZWxlY3QgYSBtb3JlIHNwZWNpZmljIHR5cGUuCisgICAgICAgIGxldCBwcmVwYXJhdGlvbnMg
PSBbXTsKKyAgICAgICAgZm9yIChsZXQgbm9kZSBvZiB0aGlzLm5vZGVzKSB7CisgICAgICAgICAg
ICBsZXQgcHJlcGFyYXRpb24gPSBub2RlLnByZXBhcmVUb1ZlcmlmeSh0aGlzKTsKKyAgICAgICAg
ICAgIGlmIChwcmVwYXJhdGlvbikKKyAgICAgICAgICAgICAgICBwcmVwYXJhdGlvbnMucHVzaChw
cmVwYXJhdGlvbik7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChsZXQgcHJlcGFyYXRpb24gb2Yg
cHJlcGFyYXRpb25zKSB7CisgICAgICAgICAgICBsZXQgcmVzdWx0ID0gcHJlcGFyYXRpb24oKTsK
KyAgICAgICAgICAgIGlmICghcmVzdWx0LnJlc3VsdCkKKyAgICAgICAgICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBmb3IgKGxldCB0eXBlUGFyYW1l
dGVyIG9mIHRoaXMuX3R5cGVQYXJhbWV0ZXJzKSB7CiAgICAgICAgICAgICBsZXQgcmVzdWx0ID0g
dHlwZVBhcmFtZXRlci52ZXJpZnlBc1BhcmFtZXRlcih0aGlzKTsKICAgICAgICAgICAgIGlmICgh
cmVzdWx0LnJlc3VsdCkKQEAgLTEwMiwxMiArMTE1LDE0IEBAIGNsYXNzIFVuaWZpY2F0aW9uQ29u
dGV4dCB7CiAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gdHlwZUFyZ3VtZW50LnZlcmlmeUFzQXJn
dW1lbnQodGhpcyk7CiAgICAgICAgICAgICBpZiAoIXJlc3VsdC5yZXN1bHQpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIGlmICh0eXBlQXJndW1lbnQuaXNMaXRl
cmFsKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgYXJndW1lbnRTZXQu
YWRkKHRoaXMuZmluZCh0eXBlQXJndW1lbnQpKTsKICAgICAgICAgICAgIG51bVR5cGVWYXJpYWJs
ZUFyZ3VtZW50cysrOwogICAgICAgICB9CiAgICAgICAgIGlmIChhcmd1bWVudFNldC5zaXplID09
IG51bVR5cGVWYXJpYWJsZUFyZ3VtZW50cykKICAgICAgICAgICAgIHJldHVybiB7cmVzdWx0OiB0
cnVlfTsKLSAgICAgICAgcmV0dXJuIHtyZXN1bHQ6IGZhbHNlLCByZWFzb246ICJUeXBlIHZhcmlh
YmxlcyB1c2VkIGFzIGFyZ3VtZW50cyBnb3QgdW5pZmllZCJ9OworICAgICAgICByZXR1cm4ge3Jl
c3VsdDogZmFsc2UsIHJlYXNvbjogIlR5cGUgdmFyaWFibGVzIHVzZWQgYXMgYXJndW1lbnRzIGdv
dCB1bmlmaWVkIHdpdGggZWFjaCBvdGhlciJ9OwogICAgIH0KICAgICAKICAgICBnZXQgY29udmVy
c2lvbkNvc3QoKQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmlzaXRvci5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9WaXNpdG9yLmpz
CShyZXZpc2lvbiAyMjIwMzIpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9WaXNp
dG9yLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yNTUsMjAgKzI1NSwxNiBAQCBjbGFzcyBWaXNpdG9y
IGV4dGVuZHMgVmlzaXRvckJhc2UgewogICAgIHsKICAgICB9CiAgICAgCi0gICAgdmlzaXRJbnRM
aXRlcmFsKG5vZGUpCisgICAgdmlzaXRHZW5lcmljTGl0ZXJhbChub2RlKQogICAgIHsKICAgICAg
ICAgbm9kZS50eXBlLnZpc2l0KHRoaXMpOwogICAgIH0KICAgICAKLSAgICB2aXNpdEludExpdGVy
YWxUeXBlKG5vZGUpCisgICAgdmlzaXRHZW5lcmljTGl0ZXJhbFR5cGUobm9kZSkKICAgICB7CiAg
ICAgICAgIGlmIChub2RlLnR5cGUpCiAgICAgICAgICAgICBub2RlLnR5cGUudmlzaXQodGhpcyk7
Ci0gICAgICAgIG5vZGUuaW50VHlwZS52aXNpdCh0aGlzKTsKLSAgICB9Ci0gICAgCi0gICAgdmlz
aXRVaW50TGl0ZXJhbChub2RlKQotICAgIHsKKyAgICAgICAgbm9kZS5wcmVmZXJyZWRUeXBlLnZp
c2l0KHRoaXMpOwogICAgIH0KICAgICAKICAgICB2aXNpdE51bGxMaXRlcmFsKG5vZGUpCg==
</data>
<flag name="review"
          id="340868"
          type_id="1"
          status="+"
          setter="mmaxfield"
    />
          </attachment>
      

    </bug>

</bugzilla>