<?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>83093</bug_id>
          
          <creation_ts>2012-04-03 16:29:02 -0700</creation_ts>
          <short_desc>[V8] Add a per context data store and use that for caching boiler plates as well as constructor functions</short_desc>
          <delta_ts>2012-04-04 15:31:07 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>81573</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Erik Arvidsson">arv</reporter>
          <assigned_to name="Erik Arvidsson">arv</assigned_to>
          <cc>abarth</cc>
    
    <cc>antonm</cc>
    
    <cc>dglazkov</cc>
    
    <cc>haraken</cc>
    
    <cc>japhet</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>595018</commentid>
    <comment_count>0</comment_count>
    <who name="Erik Arvidsson">arv</who>
    <bug_when>2012-04-03 16:29:02 -0700</bug_when>
    <thetext>[V8] Add a per context data store and use that for caching boiler plates as well as constructor functions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>595042</commentid>
    <comment_count>1</comment_count>
      <attachid>135460</attachid>
    <who name="Erik Arvidsson">arv</who>
    <bug_when>2012-04-03 17:02:41 -0700</bug_when>
    <thetext>Created attachment 135460
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>595112</commentid>
    <comment_count>2</comment_count>
      <attachid>135460</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-03 18:37:15 -0700</bug_when>
    <thetext>Comment on attachment 135460
Patch

Attachment 135460 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/12320540</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>595243</commentid>
    <comment_count>3</comment_count>
      <attachid>135460</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-04-03 21:55:38 -0700</bug_when>
    <thetext>Comment on attachment 135460
Patch

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

I&apos;m being a bit more picky about naming than usual because the V8 bindings are a style disaster.  I&apos;m hoping that through this sort of work we can improve the style and patterns in the code so that future folks working on this code will have good examples to work from.

One thing that&apos;s important is that v8::Persistent&lt;T&gt;::New must always be balanced with v8::Persistent&lt;T&gt;::Dispose.  They&apos;re like new and delete in C++.  It&apos;s lame that V8 invite us to manually call new and delete.  We have SharedPersistent and OwnHandle (maybe should be called OwnPersistent?) to help us here.  They&apos;re not widely used, but it would be good to use these rather than calling New and Dispose manually when convenient.

&gt; Source/WebCore/bindings/v8/V8BindingPerContextData.cpp:47
&gt; +            wrapper.Clear();

I don&apos;t think there&apos;s any need to call Clear() here.  That just sets the local variable to zero.

&gt; Source/WebCore/bindings/v8/V8BindingPerContextData.cpp:63
&gt; +bool V8BindingPerContextData::installHiddenObjectPrototype()

install probably isn&apos;t the right verb for this function anymore now that we&apos;re storing the object prototype ourselves (rather than &quot;installing&quot; it into a hidden variable in the context.

&gt; Source/WebCore/bindings/v8/V8BindingPerContextData.cpp:79
&gt; +    m_objectPrototype = v8::Persistent&lt;v8::Value&gt;::New(objectPrototype);

Where is the Dispose that balances this New?  Should we use http://trac.webkit.org/browser/trunk/Source/WebCore/bindings/v8/OwnHandle.h to make sure we don&apos;t leak?

&gt; Source/WebCore/bindings/v8/V8BindingPerContextData.cpp:88
&gt; +    v8::Local&lt;v8::Function&gt; function = getConstructor(type);

Is there a better verb we can use than &quot;get&quot; for getConstructor?

&gt; Source/WebCore/bindings/v8/V8BindingPerContextData.cpp:97
&gt; +v8::Local&lt;v8::Function&gt; V8BindingPerContextData::getConstructorSlowCase(WrapperTypeInfo* type)

Another &quot;get&quot;.

&gt; Source/WebCore/bindings/v8/V8BindingPerContextData.cpp:121
&gt; +    // Hotmail fix, see comments above.

Is this comment still needed?  I would remove it and rely on our test coverage to explain to us why this is needed.

&gt; Source/WebCore/bindings/v8/V8BindingPerContextData.h:53
&gt; +    // WARNING: Call |installHiddenObjectPrototype| only on fresh contexts!

This comment is out of date.  Rather than having this comment, perhaps the function should just ASSERT(m_objectPrototype.isEmpty()) ?

&gt; Source/WebCore/bindings/v8/V8BindingPerContextData.h:65
&gt; +    v8::Local&lt;v8::Function&gt; getConstructor(WrapperTypeInfo* type)

Ok, so I would call this function constructorForType

&gt; Source/WebCore/bindings/v8/V8BindingPerContextData.h:70
&gt; +        return getConstructorSlowCase(type);

getConstructorSlowCase =&gt; constructorForTypeSlowCase ?

&gt; Source/WebCore/bindings/v8/V8BindingPerContextData.h:75
&gt; +    V8BindingPerContextData(v8::Handle&lt;v8::Context&gt; context)
&gt; +      : m_context(context) { }

Please mark one-argument constructors &quot;explicit&quot;.  Also, these { } should be on their own lines.

&gt; Source/WebCore/bindings/v8/V8BindingPerContextData.h:90
&gt; +    v8::Persistent&lt;v8::Context&gt; m_context;

Where are the New() and Dispose() calls for this persistent handle?  Should we use http://trac.webkit.org/browser/trunk/Source/WebCore/bindings/v8/SharedPersistent.h to make sure the context doesn&apos;t get Disposed out from under us?

&gt; Source/WebCore/bindings/v8/V8DOMWindowShell.h:83
&gt; +    V8BindingPerContextData* perContextData() { return m_perContextData.get(); }

I was hoping we could get this from a v8::Context itself rather than hanging it off the window shell.  This might be a good intermediate state though.

&gt; Source/WebCore/bindings/v8/V8DOMWrapper.cpp:107
&gt; +    if (UNLIKELY(!!(isolatedContext = V8IsolatedContext::getEntered())))
&gt; +        perContextData = isolatedContext-&gt;perContextData();
&gt; +    else
&gt; +        perContextData = V8Proxy::retrieve(frame)-&gt;windowShell()-&gt;perContextData();

Wouldn&apos;t this be better if we could get the perContextData directly from the v8::Context?

&gt; Source/WebCore/bindings/v8/V8DOMWrapper.h:152
&gt; +        static V8BindingPerContextData* getPerContextData(V8Proxy*);
&gt; +#if ENABLE(WORKERS)
&gt; +        static V8BindingPerContextData* getPerContextData(WorkerContext*);
&gt; +#endif

Can we drop the &quot;get&quot; prefix?

&gt; Source/WebCore/bindings/v8/WorkerContextExecutionProxy.cpp:155
&gt; +    if (!m_perContextData-&gt;installHiddenObjectPrototype()) {

Why isn&apos;t this work done by the constructor?  It seems like everyone calls it immediately.  I guess they&apos;d all need to check for failure...  Maybe this function should just be called init().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>595720</commentid>
    <comment_count>4</comment_count>
    <who name="Erik Arvidsson">arv</who>
    <bug_when>2012-04-04 11:09:28 -0700</bug_when>
    <thetext>Thanks for the detailed comments.

(In reply to comment #3)
&gt; (From update of attachment 135460 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=135460&amp;action=review
&gt; 
&gt; I&apos;m being a bit more picky about naming than usual because the V8 bindings are a style disaster.  I&apos;m hoping that through this sort of work we can improve the style and patterns in the code so that future folks working on this code will have good examples to work from.

Make sense. I was just trying to keep the change small but I agree that there is a lot of room for improvement here.


&gt; One thing that&apos;s important is that v8::Persistent&lt;T&gt;::New must always be balanced with v8::Persistent&lt;T&gt;::Dispose.  They&apos;re like new and delete in C++.  It&apos;s lame that V8 invite us to manually call new and delete.  We have SharedPersistent and OwnHandle (maybe should be called OwnPersistent?) to help us here.  They&apos;re not widely used, but it would be good to use these rather than calling New and Dispose manually when convenient.

Wow, I didn&apos;t get this before. I incorrectly assumed v8::Persistent worked like OwnHandle. I don&apos;t think we need to rename OwnHandle. It kind of is implied since the handle has to be persistent to be kept alive.
 
&gt; &gt; Source/WebCore/bindings/v8/V8BindingPerContextData.cpp:63
&gt; &gt; +bool V8BindingPerContextData::installHiddenObjectPrototype()
&gt; 
&gt; install probably isn&apos;t the right verb for this function anymore now that we&apos;re storing the object prototype ourselves (rather than &quot;installing&quot; it into a hidden variable in the context.

I had it as init at one point but went for smaller change. I was a bit split on the design here. Your vote has convinced me for the init pattern.

&gt; &gt; Source/WebCore/bindings/v8/V8BindingPerContextData.cpp:79
&gt; &gt; +    m_objectPrototype = v8::Persistent&lt;v8::Value&gt;::New(objectPrototype);
&gt; 
&gt; Where is the Dispose that balances this New?  Should we use http://trac.webkit.org/browser/trunk/Source/WebCore/bindings/v8/OwnHandle.h to make sure we don&apos;t leak?

Change to OwnHandle
 
&gt; &gt; Source/WebCore/bindings/v8/V8BindingPerContextData.cpp:88
&gt; &gt; +    v8::Local&lt;v8::Function&gt; function = getConstructor(type);
&gt; 
&gt; Is there a better verb we can use than &quot;get&quot; for getConstructor?

Changing to constructorForType

&gt; &gt; Source/WebCore/bindings/v8/V8BindingPerContextData.cpp:121
&gt; &gt; +    // Hotmail fix, see comments above.
&gt; 
&gt; Is this comment still needed?  I would remove it and rely on our test coverage to explain to us why this is needed.

Do you want me to remove the comment and add the comment to the tests?


&gt; &gt; Source/WebCore/bindings/v8/V8DOMWindowShell.h:83
&gt; &gt; +    V8BindingPerContextData* perContextData() { return m_perContextData.get(); }
&gt; 
&gt; I was hoping we could get this from a v8::Context itself rather than hanging it off the window shell.  This might be a good intermediate state though.

That was my initial plan too. However, v8::Context does not have a way to add meta data. v8::Context has a SetData but it takes a v8::String which is used for debugging. v8::Isolate has a SetData(void*) and v8::Object has internal properties. Maybe the right thing would be to set this on the global object of the context?

&gt; 
&gt; &gt; Source/WebCore/bindings/v8/V8DOMWrapper.cpp:107
&gt; &gt; +    if (UNLIKELY(!!(isolatedContext = V8IsolatedContext::getEntered())))
&gt; &gt; +        perContextData = isolatedContext-&gt;perContextData();
&gt; &gt; +    else
&gt; &gt; +        perContextData = V8Proxy::retrieve(frame)-&gt;windowShell()-&gt;perContextData();
&gt; 
&gt; Wouldn&apos;t this be better if we could get the perContextData directly from the v8::Context?

I&apos;ll try and see what it ends up like.

&gt; &gt; Source/WebCore/bindings/v8/WorkerContextExecutionProxy.cpp:155
&gt; &gt; +    if (!m_perContextData-&gt;installHiddenObjectPrototype()) {
&gt; 
&gt; Why isn&apos;t this work done by the constructor?  It seems like everyone calls it immediately.  I guess they&apos;d all need to check for failure...  Maybe this function should just be called init().

The reason it is not done in the constructor was because it might fail. I renamed it to init()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>595831</commentid>
    <comment_count>5</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-04-04 13:09:43 -0700</bug_when>
    <thetext>&gt; Do you want me to remove the comment and add the comment to the tests?

That would be great.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>596013</commentid>
    <comment_count>6</comment_count>
      <attachid>135695</attachid>
    <who name="Erik Arvidsson">arv</who>
    <bug_when>2012-04-04 15:14:40 -0700</bug_when>
    <thetext>Created attachment 135695
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>596023</commentid>
    <comment_count>7</comment_count>
      <attachid>135695</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-04-04 15:25:17 -0700</bug_when>
    <thetext>Comment on attachment 135695
Patch

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

&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:746
&gt; -    return V8DOMWrapper::getConstructor(type, V8DOMWindow::toNative(info.Holder()));
&gt; +    return V8DOMWrapper::constructorForType(type, V8DOMWindow::toNative(info.Holder()));

Make sure to run-bindings-tests --reset-results before landing.

&gt; Source/WebCore/bindings/v8/V8BindingPerContextData.h:75
&gt; +      : m_context(context)

Four-space indent.

&gt; Source/WebCore/bindings/v8/V8BindingPerContextData.h:76
&gt; +    { }

nit: Technically each of { and } should be on its own lines.

&gt; Source/WebCore/bindings/v8/V8BindingPerContextData.h:91
&gt; +    v8::Handle&lt;v8::Context&gt; m_context;

I&apos;m unclear who is responsible for keeping this handle alive.  This needs to be a v8::Persistent handle because this object outlives the current HandleScope.  Is there a reason not to use SharedPersistent ?

&gt; Source/WebCore/bindings/v8/V8DOMWindowShell.h:104
&gt;      v8::Persistent&lt;v8::Context&gt; m_context;

I see.  This is where we have the strong reference to the context.  Hum...  So, I think this is ok, but not ideal.  It&apos;s like having two raw pointers to one piece of memory and having one of the folks be in charge of deleting it.  We can take this approach in this patch and add more automated memory management in a later patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>596031</commentid>
    <comment_count>8</comment_count>
    <who name="Erik Arvidsson">arv</who>
    <bug_when>2012-04-04 15:31:07 -0700</bug_when>
    <thetext>Committed r113250: &lt;http://trac.webkit.org/changeset/113250&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>135460</attachid>
            <date>2012-04-03 17:02:41 -0700</date>
            <delta_ts>2012-04-04 15:14:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-83093-20120403170240.patch</filename>
            <type>text/plain</type>
            <size>38087</size>
            <attacher name="Erik Arvidsson">arv</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEzMDg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTM0NWU3YjQ0MjcwM2Zm
ZTExOWViYjkwMzJhMDgwMjc2NjI3NTkyOC4uM2RkMmY2YTk3NzFkMmNhNzAzZmJlZjUzMzczMDIx
N2FiMjdmYTAzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDY3IEBACiAyMDEyLTA0LTAzICBFcmlr
IEFydmlkc3NvbiAgPGFydkBjaHJvbWl1bS5vcmc+CiAKKyAgICAgICAgW1Y4XSBBZGQgYSBwZXIg
Y29udGV4dCBkYXRhIHN0b3JlIGFuZCB1c2UgdGhhdCBmb3IgY2FjaGluZyBib2lsZXIgcGxhdGVz
IGFzIHdlbGwgYXMgY29uc3RydWN0b3IgZnVuY3Rpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MzA5MworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgaW50cm9kdWNlcyBhIFY4QmluZGluZ1BlckNv
bnRleHREYXRhIGNsYXNzLiBBZnRlciBjcmVhdGluZyBhIG5ldyB2ODo6Q29udGV4dCB3ZSBhbHNv
IGNyZWF0ZSBhIG5ldworICAgICAgICBwZXIgY29udGV4dCBkYXRhIGluc3RhbmNlLiBUaGlzIGlu
c3RhbmNlIG1haW50YWlucyB0aGUgYm9pbGVyIHBsYXRlIGFuZCBjb25zdHJ1Y3RvciBjYWNoZXMu
IFY4RE9NV3JhcHBlcgorICAgICAgICBub3cgZGVsZWdhdGVzIHRoZSBjYWNoaW5nIHRvIHRoaXMg
bmV3IGNsYXNzLiBQcmV2aW91c2x5IHRoZSBjYWNoaW5nIHdhcyBvbmx5IGRvbmUgaW4gVjhET01X
aW5kb3dTaGVsbCB3aGljaAorICAgICAgICBtYWRlIHdvcmtlcnMgYW5kIGlzb2xhdGVkIHdvcmxk
cyBiZWhhdmUgc2xpZ2h0bHkgZGlmZmVyZW50LgorCisgICAgICAgIFRlc3RzOiBmYXN0L2RvbS9j
b25zdHJ1Y3Rvci1wcm90by5odG1sCisgICAgICAgICAgICAgICBmYXN0L3dvcmtlcnMvY29uc3Ry
dWN0b3ItcHJvdG8uaHRtbAorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L1Y4QmluZGluZ1BlckNvbnRleHREYXRhLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4QmluZGluZ1BlckNvbnRleHREYXRhOjpkaXNw
b3NlQ29udGV4dEhhbmRsZXMpOiBUaGlzIGNsZWFycyB0aGUgcGVyc2lzdGVudCBoYW5kbGVzIHN0
b3JlZCBpbiB0aGUgbWFwLgorICAgICAgICAoV2ViQ29yZTo6VjhCaW5kaW5nUGVyQ29udGV4dERh
dGE6Omluc3RhbGxIaWRkZW5PYmplY3RQcm90b3R5cGUpOiBUaGlzIGluc3RhbGxzIHRoZSBoaWRk
ZW4gcHJvdG90eXBlIHdoaWNoIGlzIHVzZWQKKyAgICAgICAgYXMgdGhlIFtbUHJvdG90eXBlXV0g
Zm9yIHRoZSBjb25zdHJ1Y3RvciBmdW5jdGlvbnMgKGZvciBIb3RNYWlsIGNvbXBhdCkuCisgICAg
ICAgIChXZWJDb3JlOjpWOEJpbmRpbmdQZXJDb250ZXh0RGF0YTo6Y3JlYXRlV3JhcHBlckZyb21D
YWNoZVNsb3dDYXNlKTogSW5zdGFudGlhdGVzIGEgbmV3IG9iamVjdCBhbmQgc3RvcmVzIGl0IGlu
IHRoZQorICAgICAgICBib2lsZXJwbGF0ZSBtYXAsIGFuZCByZXR1cm5zIGEgY2xvbmUuCisgICAg
ICAgIChXZWJDb3JlOjpWOEJpbmRpbmdQZXJDb250ZXh0RGF0YTo6Z2V0Q29uc3RydWN0b3JTbG93
Q2FzZSk6IENyZWF0ZXMgdGhlIGZ1bmN0aW9uIGZvciB0aGUgY29uc3RydWN0b3IgYW5kIHN0b3Jl
cyBpdCBpbgorICAgICAgICB0aGUgY29uc3RydWN0b3IgbWFwLgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L1Y4QmluZGluZ1BlckNvbnRleHREYXRhLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hlbGwuaC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoVjhCaW5kaW5nUGVyQ29udGV4dERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VjhCaW5k
aW5nUGVyQ29udGV4dERhdGE6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOEJpbmRpbmdQ
ZXJDb250ZXh0RGF0YTo6flY4QmluZGluZ1BlckNvbnRleHREYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OlY4QmluZGluZ1BlckNvbnRleHREYXRhOjpjcmVhdGVXcmFwcGVyRnJvbUNhY2hlKTogQ3Jl
YXRlcyBhIG5ldyB3cmFwcGVyLCB1c2luZyB0aGUgY2FjaGUgaWYgcG9zc2libGUuCisgICAgICAg
IChXZWJDb3JlOjpWOEJpbmRpbmdQZXJDb250ZXh0RGF0YTo6Z2V0Q29uc3RydWN0b3IpOiBSZXR1
cm5zIHRoZSBjb25zdHJ1Y3RvciBhbmQgY2FjaGVzIGl0IGlmIG5lZWRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlY4QmluZGluZ1BlckNvbnRleHREYXRhOjpWOEJpbmRpbmdQZXJDb250ZXh0RGF0YSk6
CisgICAgICAgICogYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpWOERPTVdpbmRvd1NoZWxsOjpkaXNwb3NlQ29udGV4dEhhbmRsZXMpOiBDbGVhciB0
aGUgcGVyIGNvbnRleHQgZGF0YSB3aGVuIGRpc3Bvc2luZyB0aGUgaGFuZGxlcy4KKyAgICAgICAg
KFdlYkNvcmU6OlY4RE9NV2luZG93U2hlbGw6OmluaXRDb250ZXh0SWZOZWVkZWQpOiBDcmVhdGUg
YW5kIGluaXRpYWxpemUgdGhlIHBlciBjb250ZXh0IGRhdGEuCisgICAgICAgIChXZWJDb3JlOjpW
OERPTVdpbmRvd1NoZWxsOjppbnN0YWxsRE9NV2luZG93KToKKyAgICAgICAgKiBiaW5kaW5ncy92
OC9WOERPTVdpbmRvd1NoZWxsLmg6CisgICAgICAgIChWOERPTVdpbmRvd1NoZWxsKToKKyAgICAg
ICAgKFdlYkNvcmU6OlY4RE9NV2luZG93U2hlbGw6OnBlckNvbnRleHREYXRhKToKKyAgICAgICAg
KiBiaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhET01X
cmFwcGVyOjpnZXRDb25zdHJ1Y3Rvcik6IFN0YXRpYyBtZXRob2QgdG8gZ2V0IHRoZSBjb25zdHJ1
Y3Rvci4gVGhlIHBlciBjb250ZXh0IGRhdGEgaXMgZGV0ZXJtaW5lZCBiYXNlZAorICAgICAgICBv
biB0aGUgdHlwZSBvZiB0aGUgcGFyYW1ldGVycy4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6VjhET01XcmFwcGVyOjppbnN0YW50aWF0ZVY4T2JqZWN0KTogVXNlIHRoZSBw
ZXIgY29udGV4dCBkYXRhIHRvIHVuaWZ5IHRoZSBjb2RlIHBhdGhzLgorICAgICAgICAqIGJpbmRp
bmdzL3Y4L1Y4RE9NV3JhcHBlci5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChWOERP
TVdyYXBwZXIpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRDb250ZXh0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlY4SXNvbGF0ZWRDb250ZXh0OjpWOElzb2xhdGVkQ29udGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpWOElzb2xhdGVkQ29udGV4dDo6ZGVzdHJveSk6CisgICAgICAg
ICogYmluZGluZ3MvdjgvVjhJc29sYXRlZENvbnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlY4
SXNvbGF0ZWRDb250ZXh0OjpwZXJDb250ZXh0RGF0YSk6CisgICAgICAgIChWOElzb2xhdGVkQ29u
dGV4dCk6CisgICAgICAgICogYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6ZGlz
cG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6Omlu
aXRDb250ZXh0SWZOZWVkZWQpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRF
eGVjdXRpb25Qcm94eS5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpX
b3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OnBlckNvbnRleHREYXRhKToKKyAgICAgICAgKFdv
cmtlckNvbnRleHRFeGVjdXRpb25Qcm94eSk6CisKKzIwMTItMDQtMDMgIEVyaWsgQXJ2aWRzc29u
ICA8YXJ2QGNocm9taXVtLm9yZz4KKwogICAgICAgICBbdjhdIEZpeCBtZW1vcnkgbGVhayBpbiBW
OExhenlFdmVudExpc3RlbmVyCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD04MzA1NwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggYmE0NjMwZGI5ZWQ3ZmE2NGY0
ZjJjYTcyZDE3YTRmMDFhZjU3MTBjYi4uYjQ3Njg5MGU3ZTAzYTgwNGE1YTc4ZWYwZGVhMzdkYWI5
NzgwNjNhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMjEzMCw2ICsyMTMwLDggQEAKICAgICAgICAg
ICAgICdiaW5kaW5ncy92OC9WOEFic3RyYWN0RXZlbnRMaXN0ZW5lci5oJywKICAgICAgICAgICAg
ICdiaW5kaW5ncy92OC9WOEJpbmRpbmcuY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9W
OEJpbmRpbmcuaCcsCisgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhCaW5kaW5nUGVyQ29udGV4
dERhdGEuY3BwJywKKyAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOEJpbmRpbmdQZXJDb250ZXh0
RGF0YS5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOENvbGxlY3Rpb24uY3BwJywKICAg
ICAgICAgICAgICdiaW5kaW5ncy92OC9WOENvbGxlY3Rpb24uaCcsCiAgICAgICAgICAgICAnYmlu
ZGluZ3MvdjgvVjhET01NYXAuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4QmluZGluZ1BlckNvbnRleHREYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4QmluZGluZ1BlckNvbnRleHREYXRhLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MWI3Y2RhODVh
YzBhNWUwZTFhZWMzYmNlMGRkNzBiOTkxYmRkOTNjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nUGVyQ29udGV4dERhdGEuY3BwCkBAIC0wLDAg
KzEsMTI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6
CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlY4QmluZGluZ1BlckNvbnRl
eHREYXRhLmgiCisKKyNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOERPTVdyYXBw
ZXIuaCIKKyNpbmNsdWRlICJWOEhpZGRlblByb3BlcnR5TmFtZS5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK3ZvaWQgVjhCaW5kaW5nUGVyQ29udGV4dERhdGE6OmRpc3Bvc2VDb250ZXh0SGFu
ZGxlcygpCit7CisgICAgeworICAgICAgICBXcmFwcGVyQm9pbGVycGxhdGVNYXA6Oml0ZXJhdG9y
IGl0ID0gbV93cmFwcGVyQm9pbGVycGxhdGVzLmJlZ2luKCk7CisgICAgICAgIGZvciAoOyBpdCAh
PSBtX3dyYXBwZXJCb2lsZXJwbGF0ZXMuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgICAgIHY4OjpQ
ZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAg
d3JhcHBlci5EaXNwb3NlKCk7CisgICAgICAgICAgICB3cmFwcGVyLkNsZWFyKCk7CisgICAgICAg
IH0KKyAgICAgICAgbV93cmFwcGVyQm9pbGVycGxhdGVzLmNsZWFyKCk7CisgICAgfQorCisgICAg
eworICAgICAgICBDb25zdHJ1Y3Rvck1hcDo6aXRlcmF0b3IgaXQgPSBtX2NvbnN0cnVjdG9yTWFw
LmJlZ2luKCk7CisgICAgICAgIGZvciAoOyBpdCAhPSBtX2NvbnN0cnVjdG9yTWFwLmVuZCgpOyAr
K2l0KSB7CisgICAgICAgICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb24+IHdyYXBwZXIg
PSBpdC0+c2Vjb25kOworICAgICAgICAgICAgd3JhcHBlci5EaXNwb3NlKCk7CisgICAgICAgICAg
ICB3cmFwcGVyLkNsZWFyKCk7CisgICAgICAgIH0KKyAgICAgICAgbV9jb25zdHJ1Y3Rvck1hcC5j
bGVhcigpOworICAgIH0KK30KKworYm9vbCBWOEJpbmRpbmdQZXJDb250ZXh0RGF0YTo6aW5zdGFs
bEhpZGRlbk9iamVjdFByb3RvdHlwZSgpCit7CisgICAgQVNTRVJUKG1fb2JqZWN0UHJvdG90eXBl
LklzRW1wdHkoKSk7CisKKyAgICB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IG9iamVjdFN0cmluZyA9
IHY4OjpTdHJpbmc6Ok5ldygiT2JqZWN0Iik7CisgICAgdjg6OkhhbmRsZTx2ODo6U3RyaW5nPiBw
cm90b3R5cGVTdHJpbmcgPSB2ODo6U3RyaW5nOjpOZXcoInByb3RvdHlwZSIpOworICAgIGlmIChv
YmplY3RTdHJpbmcuSXNFbXB0eSgpIHx8IHByb3RvdHlwZVN0cmluZy5Jc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0ID0g
djg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChtX2NvbnRleHQtPkdsb2JhbCgpLT5HZXQob2Jq
ZWN0U3RyaW5nKSk7CisgICAgaWYgKG9iamVjdC5Jc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gb2JqZWN0UHJvdG90eXBlID0gb2JqZWN0
LT5HZXQocHJvdG90eXBlU3RyaW5nKTsKKyAgICBpZiAob2JqZWN0UHJvdG90eXBlLklzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbV9vYmplY3RQcm90b3R5cGUgPSB2ODo6
UGVyc2lzdGVudDx2ODo6VmFsdWU+OjpOZXcob2JqZWN0UHJvdG90eXBlKTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordjg6OkxvY2FsPHY4OjpPYmplY3Q+IFY4QmluZGluZ1BlckNvbnRleHREYXRh
OjpjcmVhdGVXcmFwcGVyRnJvbUNhY2hlU2xvd0Nhc2UoV3JhcHBlclR5cGVJbmZvKiB0eXBlKQor
eworICAgIEFTU0VSVCghbV9vYmplY3RQcm90b3R5cGUuSXNFbXB0eSgpKTsKKworICAgIHY4OjpD
b250ZXh0OjpTY29wZSBzY29wZShtX2NvbnRleHQpOworICAgIHY4OjpMb2NhbDx2ODo6RnVuY3Rp
b24+IGZ1bmN0aW9uID0gZ2V0Q29uc3RydWN0b3IodHlwZSk7CisgICAgdjg6OkxvY2FsPHY4OjpP
YmplY3Q+IGluc3RhbmNlID0gU2FmZUFsbG9jYXRpb246Om5ld0luc3RhbmNlKGZ1bmN0aW9uKTsK
KyAgICBpZiAoIWluc3RhbmNlLklzRW1wdHkoKSkgeworICAgICAgICBtX3dyYXBwZXJCb2lsZXJw
bGF0ZXMuc2V0KHR5cGUsIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpOZXcoaW5zdGFuY2Up
KTsKKyAgICAgICAgcmV0dXJuIGluc3RhbmNlLT5DbG9uZSgpOworICAgIH0KKyAgICByZXR1cm4g
djg6OkxvY2FsPHY4OjpPYmplY3Q+KCk7Cit9CisKK3Y4OjpMb2NhbDx2ODo6RnVuY3Rpb24+IFY4
QmluZGluZ1BlckNvbnRleHREYXRhOjpnZXRDb25zdHJ1Y3RvclNsb3dDYXNlKFdyYXBwZXJUeXBl
SW5mbyogdHlwZSkKK3sKKyAgICBBU1NFUlQoIW1fb2JqZWN0UHJvdG90eXBlLklzRW1wdHkoKSk7
CisKKyAgICAvLyBFbnRlciB0aGUgc2NvcGUgZm9yIHRoaXMgY29udGV4dCB0byBnZXQgdGhlIGNv
cnJlY3QgY29uc3RydWN0b3IuCisgICAgdjg6OkNvbnRleHQ6OlNjb3BlIHNjb3BlKG1fY29udGV4
dCk7CisKKyAgICAvLyBBIERPTSBjb25zdHJ1Y3RvciBpcyBhIGZ1bmN0aW9uIGluc3RhbmNlIGNy
ZWF0ZWQgZnJvbSBhIERPTSBjb25zdHJ1Y3RvcgorICAgIC8vIHRlbXBsYXRlLiBUaGVyZSBpcyBv
bmUgaW5zdGFuY2UgcGVyIGNvbnRleHQuIEEgRE9NIGNvbnN0cnVjdG9yIGlzCisgICAgLy8gZGlm
ZmVyZW50IGZyb20gYSBub3JtYWwgZnVuY3Rpb24gaW4gdHdvIHdheXM6CisgICAgLy8gICAxKSBp
dCBjYW5ub3QgYmUgY2FsbGVkIGFzIGNvbnN0cnVjdG9yIChha2EsIHVzZWQgdG8gY3JlYXRlIGEg
RE9NIG9iamVjdCkKKyAgICAvLyAgIDIpIGl0cyBfX3Byb3RvX18gcG9pbnRzIHRvIE9iamVjdC5w
cm90b3R5cGUgcmF0aGVyIHRoYW4KKyAgICAvLyAgICAgIEZ1bmN0aW9uLnByb3RvdHlwZS4KKyAg
ICAvLyBUaGUgcmVhc29uIGZvciAyKSBpcyB0aGF0LCBpbiBTYWZhcmksIGEgRE9NIGNvbnN0cnVj
dG9yIGlzIGEgbm9ybWFsIEpTCisgICAgLy8gb2JqZWN0LCBidXQgbm90IGEgZnVuY3Rpb24uIEhv
dG1haWwgcmVsaWVzIG9uIHRoZSBmYWN0IHRoYXQsIGluIFNhZmFyaSwKKyAgICAvLyBIVE1MRWxl
bWVudC5fX3Byb3RvX18gPT0gT2JqZWN0LnByb3RvdHlwZS4KKyAgICB2ODo6SGFuZGxlPHY4OjpG
dW5jdGlvblRlbXBsYXRlPiBmdW5jdGlvblRlbXBsYXRlID0gdHlwZS0+Z2V0VGVtcGxhdGUoKTsK
KyAgICAvLyBHZXR0aW5nIHRoZSBmdW5jdGlvbiBtaWdodCBmYWlsIGlmIHdlJ3JlIHJ1bm5pbmcg
b3V0IG9mCisgICAgLy8gc3RhY2sgb3IgbWVtb3J5LgorICAgIHY4OjpUcnlDYXRjaCB0cnlDYXRj
aDsKKyAgICB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPiBmdW5jdGlvbiA9IGZ1bmN0aW9uVGVtcGxh
dGUtPkdldEZ1bmN0aW9uKCk7CisgICAgaWYgKGZ1bmN0aW9uLklzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuIHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+KCk7CisKKyAgICAvLyBIb3RtYWlsIGZpeCwg
c2VlIGNvbW1lbnRzIGFib3ZlLgorICAgIGZ1bmN0aW9uLT5TZXRQcm90b3R5cGUobV9vYmplY3RQ
cm90b3R5cGUpOworCisgICAgbV9jb25zdHJ1Y3Rvck1hcC5zZXQodHlwZSwgdjg6OlBlcnNpc3Rl
bnQ8djg6OkZ1bmN0aW9uPjo6TmV3KGZ1bmN0aW9uKSk7CisKKyAgICByZXR1cm4gZnVuY3Rpb247
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1Y4QmluZGluZ1BlckNvbnRleHREYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9WOEJpbmRpbmdQZXJDb250ZXh0RGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI0Mjg3MmUw
NmYzZDU3ZjcwZjJjMjdiZmI2YzY4YTNiOWE1NzM2NGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmdQZXJDb250ZXh0RGF0YS5oCkBAIC0wLDAg
KzEsOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoK
KyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIFY4QmluZGluZ1BlckNvbnRleHREYXRhX2gKKyNkZWZpbmUgVjhCaW5k
aW5nUGVyQ29udGV4dERhdGFfaAorCisjaW5jbHVkZSAiV3JhcHBlclR5cGVJbmZvLmgiCisjaW5j
bHVkZSA8djguaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNz
T3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgVjhCaW5kaW5nUGVyQ29u
dGV4dERhdGEgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPFY4QmluZGluZ1BlckNv
bnRleHREYXRhPiBjcmVhdGUodjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCkKKyAgICB7
CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgVjhCaW5kaW5nUGVyQ29udGV4dERhdGEoY29u
dGV4dCkpOworICAgIH0KKworICAgIH5WOEJpbmRpbmdQZXJDb250ZXh0RGF0YSgpCisgICAgewor
ICAgICAgICBkaXNwb3NlQ29udGV4dEhhbmRsZXMoKTsKKyAgICB9CisKKyAgICAvLyBXQVJOSU5H
OiBDYWxsIHxpbnN0YWxsSGlkZGVuT2JqZWN0UHJvdG90eXBlfCBvbmx5IG9uIGZyZXNoIGNvbnRl
eHRzIQorICAgIGJvb2wgaW5zdGFsbEhpZGRlbk9iamVjdFByb3RvdHlwZSgpOworCisgICAgLy8g
VG8gY3JlYXRlIEpTIFdyYXBwZXIgb2JqZWN0cywgd2UgY3JlYXRlIGEgY2FjaGUgb2YgYSAnYm9p
bGVyIHBsYXRlJworICAgIC8vIG9iamVjdCwgYW5kIHRoZW4gc2ltcGx5IENsb25lIHRoYXQgb2Jq
ZWN0IGVhY2ggdGltZSB3ZSBuZWVkIGEgbmV3IG9uZS4KKyAgICAvLyBUaGlzIGlzIGZhc3RlciB0
aGFuIGdvaW5nIHRocm91Z2ggdGhlIGZ1bGwgb2JqZWN0IGNyZWF0aW9uIHByb2Nlc3MuCisgICAg
djg6OkxvY2FsPHY4OjpPYmplY3Q+IGNyZWF0ZVdyYXBwZXJGcm9tQ2FjaGUoV3JhcHBlclR5cGVJ
bmZvKiB0eXBlKQorICAgIHsKKyAgICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gYm9p
bGVycGxhdGUgPSBtX3dyYXBwZXJCb2lsZXJwbGF0ZXMuZ2V0KHR5cGUpOworICAgICAgICByZXR1
cm4gIWJvaWxlcnBsYXRlLklzRW1wdHkoKSA/IGJvaWxlcnBsYXRlLT5DbG9uZSgpIDogY3JlYXRl
V3JhcHBlckZyb21DYWNoZVNsb3dDYXNlKHR5cGUpOworICAgIH0KKworICAgIHY4OjpMb2NhbDx2
ODo6RnVuY3Rpb24+IGdldENvbnN0cnVjdG9yKFdyYXBwZXJUeXBlSW5mbyogdHlwZSkKKyAgICB7
CisgICAgICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvbj4gZnVuY3Rpb24gPSBtX2NvbnN0
cnVjdG9yTWFwLmdldCh0eXBlKTsKKyAgICAgICAgaWYgKCFmdW5jdGlvbi5Jc0VtcHR5KCkpCisg
ICAgICAgICAgICByZXR1cm4gdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj46Ok5ldyhmdW5jdGlvbik7
CisgICAgICAgIHJldHVybiBnZXRDb25zdHJ1Y3RvclNsb3dDYXNlKHR5cGUpOworICAgIH0KKwor
cHJpdmF0ZToKKyAgICBWOEJpbmRpbmdQZXJDb250ZXh0RGF0YSh2ODo6SGFuZGxlPHY4OjpDb250
ZXh0PiBjb250ZXh0KQorICAgICAgOiBtX2NvbnRleHQoY29udGV4dCkgeyB9CisKKyAgICB2b2lk
IGRpc3Bvc2VDb250ZXh0SGFuZGxlcygpOworCisgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IGNy
ZWF0ZVdyYXBwZXJGcm9tQ2FjaGVTbG93Q2FzZShXcmFwcGVyVHlwZUluZm8qKTsKKyAgICB2ODo6
TG9jYWw8djg6OkZ1bmN0aW9uPiBnZXRDb25zdHJ1Y3RvclNsb3dDYXNlKFdyYXBwZXJUeXBlSW5m
byopOworCisgICAgLy8gRm9yIGVhY2ggcG9zc2libGUgdHlwZSBvZiB3cmFwcGVyLCB3ZSBrZWVw
IGEgYm9pbGVycGxhdGUgb2JqZWN0LgorICAgIC8vIFRoZSBib2lsZXJwbGF0ZSBpcyB1c2VkIHRv
IGNyZWF0ZSBhZGRpdGlvbmFsIHdyYXBwZXJzIG9mIHRoZSBzYW1lIHR5cGUuCisgICAgdHlwZWRl
ZiBXVEY6Okhhc2hNYXA8V3JhcHBlclR5cGVJbmZvKiwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVj
dD4gPiBXcmFwcGVyQm9pbGVycGxhdGVNYXA7CisgICAgV3JhcHBlckJvaWxlcnBsYXRlTWFwIG1f
d3JhcHBlckJvaWxlcnBsYXRlczsKKworICAgIHR5cGVkZWYgV1RGOjpIYXNoTWFwPFdyYXBwZXJU
eXBlSW5mbyosIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvbj4gPiBDb25zdHJ1Y3Rvck1hcDsK
KyAgICBDb25zdHJ1Y3Rvck1hcCBtX2NvbnN0cnVjdG9yTWFwOworCisgICAgdjg6OlBlcnNpc3Rl
bnQ8djg6OkNvbnRleHQ+IG1fY29udGV4dDsKKyAgICB2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+
IG1fb2JqZWN0UHJvdG90eXBlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gVjhCaW5kaW5nUGVyQ29udGV4dERhdGFfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9WOERPTVdpbmRvd1NoZWxsLmNwcAppbmRleCBkNTEyZDJhOTE5MDE2ZWQ3NWMyZGNh
YjFjOTE0NGNjYTZkNTNkNThiLi40ZTE2ZTVmMDZkNGE1NjkwNGJmY2ZiMDdiMjM4NTBhMmYyMTU5
ZWJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdpbmRvd1No
ZWxsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxs
LmNwcApAQCAtNDYsNiArNDYsNyBAQAogI2luY2x1ZGUgIlN0b3JhZ2VOYW1lc3BhY2UuaCIKICNp
bmNsdWRlICJTdHlsZVByb3BlcnR5U2V0LmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5j
bHVkZSAiVjhCaW5kaW5nUGVyQ29udGV4dERhdGEuaCIKICNpbmNsdWRlICJWOEJpbmRpbmdTdGF0
ZS5oIgogI2luY2x1ZGUgIlY4Q29sbGVjdGlvbi5oIgogI2luY2x1ZGUgIlY4RE9NTWFwLmgiCkBA
IC0xODQsMTMgKzE4NSw3IEBAIHZvaWQgVjhET01XaW5kb3dTaGVsbDo6ZGlzcG9zZUNvbnRleHRI
YW5kbGVzKCkKICAgICAgICAgVjhHQ0ZvckNvbnRleHREaXNwb3NlOjppbnN0YW5jZSgpLm5vdGlm
eUNvbnRleHREaXNwb3NlZChpc01haW5GcmFtZSk7CiAgICAgfQogCi0gICAgV3JhcHBlckJvaWxl
cnBsYXRlTWFwOjppdGVyYXRvciBpdCA9IG1fd3JhcHBlckJvaWxlcnBsYXRlcy5iZWdpbigpOwot
ICAgIGZvciAoOyBpdCAhPSBtX3dyYXBwZXJCb2lsZXJwbGF0ZXMuZW5kKCk7ICsraXQpIHsKLSAg
ICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlciA9IGl0LT5zZWNvbmQ7Ci0g
ICAgICAgIHdyYXBwZXIuRGlzcG9zZSgpOwotICAgICAgICB3cmFwcGVyLkNsZWFyKCk7Ci0gICAg
fQotICAgIG1fd3JhcHBlckJvaWxlcnBsYXRlcy5jbGVhcigpOworICAgIG1fcGVyQ29udGV4dERh
dGEuY2xlYXIoKTsKIH0KIAogdm9pZCBWOERPTVdpbmRvd1NoZWxsOjpkZXN0cm95R2xvYmFsKCkK
QEAgLTMyNiw3ICszMjEsOCBAQCBib29sIFY4RE9NV2luZG93U2hlbGw6OmluaXRDb250ZXh0SWZO
ZWVkZWQoKQogI2VuZGlmCiAgICAgfQogCi0gICAgaWYgKCFpbnN0YWxsSGlkZGVuT2JqZWN0UHJv
dG90eXBlKHY4Q29udGV4dCkpIHsKKyAgICBtX3BlckNvbnRleHREYXRhID0gVjhCaW5kaW5nUGVy
Q29udGV4dERhdGE6OmNyZWF0ZShtX2NvbnRleHQpOworICAgIGlmICghbV9wZXJDb250ZXh0RGF0
YS0+aW5zdGFsbEhpZGRlbk9iamVjdFByb3RvdHlwZSgpKSB7CiAgICAgICAgIGRpc3Bvc2VDb250
ZXh0SGFuZGxlcygpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtNDA0LDcgKzQw
MCw3IEBAIHZvaWQgVjhET01XaW5kb3dTaGVsbDo6c2V0Q29udGV4dCh2ODo6SGFuZGxlPHY4OjpD
b250ZXh0PiBjb250ZXh0KQogYm9vbCBWOERPTVdpbmRvd1NoZWxsOjppbnN0YWxsRE9NV2luZG93
KHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQsIERPTVdpbmRvdyogd2luZG93KQogewog
ICAgIC8vIENyZWF0ZSBhIG5ldyBKUyB3aW5kb3cgb2JqZWN0IGFuZCB1c2UgaXQgYXMgdGhlIHBy
b3RvdHlwZSBmb3IgdGhlICBzaGFkb3cgZ2xvYmFsIG9iamVjdC4KLSAgICB2ODo6SGFuZGxlPHY4
OjpGdW5jdGlvbj4gd2luZG93Q29uc3RydWN0b3IgPSBWOERPTVdyYXBwZXI6OmdldENvbnN0cnVj
dG9yKCZWOERPTVdpbmRvdzo6aW5mbywgZ2V0SGlkZGVuT2JqZWN0UHJvdG90eXBlKGNvbnRleHQp
KTsKKyAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gd2luZG93Q29uc3RydWN0b3IgPSBWOERP
TVdyYXBwZXI6OmdldENvbnN0cnVjdG9yKCZWOERPTVdpbmRvdzo6aW5mbywgd2luZG93KTsKICAg
ICB2ODo6TG9jYWw8djg6Ok9iamVjdD4ganNXaW5kb3cgPSBTYWZlQWxsb2NhdGlvbjo6bmV3SW5z
dGFuY2Uod2luZG93Q29uc3RydWN0b3IpOwogICAgIC8vIEJhaWwgb3V0IGlmIGFsbG9jYXRpb24g
ZmFpbGVkLgogICAgIGlmIChqc1dpbmRvdy5Jc0VtcHR5KCkpCkBAIC01OTgsNTAgKzU5NCw2IEBA
IHZvaWQgVjhET01XaW5kb3dTaGVsbDo6dXBkYXRlU2VjdXJpdHlPcmlnaW4oKQogICAgIHNldFNl
Y3VyaXR5VG9rZW4oKTsKIH0KIAotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4RE9NV2luZG93U2hl
bGw6OmdldEhpZGRlbk9iamVjdFByb3RvdHlwZSh2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250
ZXh0KQotewotICAgIHJldHVybiBjb250ZXh0LT5HbG9iYWwoKS0+R2V0SGlkZGVuVmFsdWUoVjhI
aWRkZW5Qcm9wZXJ0eU5hbWU6Om9iamVjdFByb3RvdHlwZSgpKTsKLX0KLQotYm9vbCBWOERPTVdp
bmRvd1NoZWxsOjppbnN0YWxsSGlkZGVuT2JqZWN0UHJvdG90eXBlKHY4OjpIYW5kbGU8djg6OkNv
bnRleHQ+IGNvbnRleHQpCi17Ci0gICAgdjg6OkhhbmRsZTx2ODo6U3RyaW5nPiBvYmplY3RTdHJp
bmcgPSB2ODo6U3RyaW5nOjpOZXcoIk9iamVjdCIpOwotICAgIHY4OjpIYW5kbGU8djg6OlN0cmlu
Zz4gcHJvdG90eXBlU3RyaW5nID0gdjg6OlN0cmluZzo6TmV3KCJwcm90b3R5cGUiKTsKLSAgICB2
ODo6SGFuZGxlPHY4OjpTdHJpbmc+IGhpZGRlbk9iamVjdFByb3RvdHlwZVN0cmluZyA9IFY4SGlk
ZGVuUHJvcGVydHlOYW1lOjpvYmplY3RQcm90b3R5cGUoKTsKLSAgICAvLyBCYWlsIG91dCBpZiBh
bGxvY2F0aW9uIGZhaWxlZC4KLSAgICBpZiAob2JqZWN0U3RyaW5nLklzRW1wdHkoKSB8fCBwcm90
b3R5cGVTdHJpbmcuSXNFbXB0eSgpIHx8IGhpZGRlbk9iamVjdFByb3RvdHlwZVN0cmluZy5Jc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4gb2JqZWN0ID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChjb250ZXh0LT5HbG9iYWwo
KS0+R2V0KG9iamVjdFN0cmluZykpOwotICAgIC8vIEJhaWwgb3V0IGlmIGZldGNoaW5nIGZhaWxl
ZC4KLSAgICBpZiAob2JqZWN0LklzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBvYmplY3RQcm90b3R5cGUgPSBvYmplY3QtPkdldChwcm90
b3R5cGVTdHJpbmcpOwotICAgIC8vIEJhaWwgb3V0IGlmIGZldGNoaW5nIGZhaWxlZC4KLSAgICBp
ZiAob2JqZWN0UHJvdG90eXBlLklzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgY29udGV4dC0+R2xvYmFsKCktPlNldEhpZGRlblZhbHVlKGhpZGRlbk9iamVjdFByb3RvdHlw
ZVN0cmluZywgb2JqZWN0UHJvdG90eXBlKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi12ODo6
TG9jYWw8djg6Ok9iamVjdD4gVjhET01XaW5kb3dTaGVsbDo6Y3JlYXRlV3JhcHBlckZyb21DYWNo
ZVNsb3dDYXNlKFdyYXBwZXJUeXBlSW5mbyogdHlwZSkKLXsKLSAgICAvLyBOb3QgaW4gY2FjaGUu
Ci0gICAgaWYgKCFpbml0Q29udGV4dElmTmVlZGVkKCkpCi0gICAgICAgIHJldHVybiBub3RIYW5k
bGVkQnlJbnRlcmNlcHRvcigpOwotCi0gICAgdjg6OkNvbnRleHQ6OlNjb3BlIHNjb3BlKG1fY29u
dGV4dCk7Ci0gICAgdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj4gZnVuY3Rpb24gPSBWOERPTVdyYXBw
ZXI6OmdldENvbnN0cnVjdG9yKHR5cGUsIGdldEhpZGRlbk9iamVjdFByb3RvdHlwZShtX2NvbnRl
eHQpKTsKLSAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gaW5zdGFuY2UgPSBTYWZlQWxsb2NhdGlv
bjo6bmV3SW5zdGFuY2UoZnVuY3Rpb24pOwotICAgIGlmICghaW5zdGFuY2UuSXNFbXB0eSgpKSB7
Ci0gICAgICAgIG1fd3JhcHBlckJvaWxlcnBsYXRlcy5zZXQodHlwZSwgdjg6OlBlcnNpc3RlbnQ8
djg6Ok9iamVjdD46Ok5ldyhpbnN0YW5jZSkpOwotICAgICAgICByZXR1cm4gaW5zdGFuY2UtPkNs
b25lKCk7Ci0gICAgfQotICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOwotfQot
CiB2b2lkIFY4RE9NV2luZG93U2hlbGw6OnNldExvY2F0aW9uKERPTVdpbmRvdyogd2luZG93LCBj
b25zdCBTdHJpbmcmIGxvY2F0aW9uU3RyaW5nKQogewogICAgIFN0YXRlPFY4QmluZGluZz4qIHN0
YXRlID0gVjhCaW5kaW5nU3RhdGU6Ok9ubHkoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hlbGwuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4RE9NV2luZG93U2hlbGwuaAppbmRleCA1OTc3NDk5YmQyMDgwODg1NmJhOTlmMzIwMWU3
OGYzMmUxZTVjNGFmLi43M2NiNTM5M2M3ZDVjNTkxNGQyOGI4NjdkMGU2Y2RhNjc3ZmYxNzk5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxsLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5oCkBAIC0z
MSw2ICszMSw3IEBACiAjaWZuZGVmIFY4RE9NV2luZG93U2hlbGxfaAogI2RlZmluZSBWOERPTVdp
bmRvd1NoZWxsX2gKIAorI2luY2x1ZGUgIlY4QmluZGluZ1BlckNvbnRleHREYXRhLmgiCiAjaW5j
bHVkZSAiV3JhcHBlclR5cGVJbmZvLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgpAQCAtNzcsMjEgKzc4LDEwIEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgZGVzdHJveUdsb2JhbCgpOwogCi0gICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBn
ZXRIaWRkZW5PYmplY3RQcm90b3R5cGUodjg6OkhhbmRsZTx2ODo6Q29udGV4dD4pOwotICAgIC8v
IFdBUk5JTkc6IENhbGwgfGluc3RhbGxIaWRkZW5PYmplY3RQcm90b3R5cGV8IG9ubHkgb24gZnJl
c2ggY29udGV4dHMhCi0gICAgc3RhdGljIGJvb2wgaW5zdGFsbEhpZGRlbk9iamVjdFByb3RvdHlw
ZSh2ODo6SGFuZGxlPHY4OjpDb250ZXh0Pik7Ci0KLSAgICAvLyBUbyBjcmVhdGUgSlMgV3JhcHBl
ciBvYmplY3RzLCB3ZSBjcmVhdGUgYSBjYWNoZSBvZiBhICdib2lsZXIgcGxhdGUnCi0gICAgLy8g
b2JqZWN0LCBhbmQgdGhlbiBzaW1wbHkgQ2xvbmUgdGhhdCBvYmplY3QgZWFjaCB0aW1lIHdlIG5l
ZWQgYSBuZXcgb25lLgotICAgIC8vIFRoaXMgaXMgZmFzdGVyIHRoYW4gZ29pbmcgdGhyb3VnaCB0
aGUgZnVsbCBvYmplY3QgY3JlYXRpb24gcHJvY2Vzcy4KLSAgICB2ODo6TG9jYWw8djg6Ok9iamVj
dD4gY3JlYXRlV3JhcHBlckZyb21DYWNoZShXcmFwcGVyVHlwZUluZm8qIHR5cGUpCi0gICAgewot
ICAgICAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiBib2lsZXJwbGF0ZSA9IG1fd3JhcHBl
ckJvaWxlcnBsYXRlcy5nZXQodHlwZSk7Ci0gICAgICAgIHJldHVybiBib2lsZXJwbGF0ZS5Jc0Vt
cHR5KCkgPyBjcmVhdGVXcmFwcGVyRnJvbUNhY2hlU2xvd0Nhc2UodHlwZSkgOiBib2lsZXJwbGF0
ZS0+Q2xvbmUoKTsKLSAgICB9Ci0KICAgICBzdGF0aWMgdm9pZCBzZXRMb2NhdGlvbihET01XaW5k
b3cqLCBjb25zdCBTdHJpbmcmIHJlbGF0aXZlVVJMKTsKIAorICAgIFY4QmluZGluZ1BlckNvbnRl
eHREYXRhKiBwZXJDb250ZXh0RGF0YSgpIHsgcmV0dXJuIG1fcGVyQ29udGV4dERhdGEuZ2V0KCk7
IH0KKwogcHJpdmF0ZToKICAgICBWOERPTVdpbmRvd1NoZWxsKEZyYW1lKik7CiAKQEAgLTEwNywx
NCArOTcsOSBAQCBwcml2YXRlOgogICAgIHZvaWQgdXBkYXRlRG9jdW1lbnRXcmFwcGVyQ2FjaGUo
KTsKICAgICB2b2lkIGNsZWFyRG9jdW1lbnRXcmFwcGVyQ2FjaGUoKTsKIAotICAgIHY4OjpMb2Nh
bDx2ODo6T2JqZWN0PiBjcmVhdGVXcmFwcGVyRnJvbUNhY2hlU2xvd0Nhc2UoV3JhcHBlclR5cGVJ
bmZvKik7Ci0KICAgICBGcmFtZSogbV9mcmFtZTsKIAotICAgIC8vIEZvciBlYWNoIHBvc3NpYmxl
IHR5cGUgb2Ygd3JhcHBlciwgd2Uga2VlcCBhIGJvaWxlcnBsYXRlIG9iamVjdC4KLSAgICAvLyBU
aGUgYm9pbGVycGxhdGUgaXMgdXNlZCB0byBjcmVhdGUgYWRkaXRpb25hbCB3cmFwcGVycyBvZiB0
aGUgc2FtZSB0eXBlLgotICAgIHR5cGVkZWYgV1RGOjpIYXNoTWFwPFdyYXBwZXJUeXBlSW5mbyos
IHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+ID4gV3JhcHBlckJvaWxlcnBsYXRlTWFwOwotICAg
IFdyYXBwZXJCb2lsZXJwbGF0ZU1hcCBtX3dyYXBwZXJCb2lsZXJwbGF0ZXM7CisgICAgT3duUHRy
PFY4QmluZGluZ1BlckNvbnRleHREYXRhPiBtX3BlckNvbnRleHREYXRhOwogCiAgICAgdjg6OlBl
cnNpc3RlbnQ8djg6OkNvbnRleHQ+IG1fY29udGV4dDsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6
T2JqZWN0PiBtX2dsb2JhbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1Y4RE9NV3JhcHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBw
ZXIuY3BwCmluZGV4IDMwZTczMDYxMzM1NmVkNTYzM2RkOWYzZGY5ZWU1NzA1NWEzZTIyNWEuLjc4
MzM0YmZlNTA3YjU2NjE1YjJiZTgwNWNlODljMGIzZDY3ZGRkNDYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcApAQCAtMzksNiArMzksNyBAQAogI2luY2x1
ZGUgIlN0eWxlUHJvcGVydHlTZXQuaCIKICNpbmNsdWRlICJWOEFic3RyYWN0RXZlbnRMaXN0ZW5l
ci5oIgogI2luY2x1ZGUgIlY4QmluZGluZy5oIgorI2luY2x1ZGUgIlY4QmluZGluZ1BlckNvbnRl
eHREYXRhLmgiCiAjaW5jbHVkZSAiVjhDb2xsZWN0aW9uLmgiCiAjaW5jbHVkZSAiVjhFdmVudExp
c3RlbmVyLmgiCiAjaW5jbHVkZSAiVjhFdmVudExpc3RlbmVyTGlzdC5oIgpAQCAtOTIsNDkgKzkz
LDIwIEBAIHZvaWQgVjhET01XcmFwcGVyOjpzZXRKU1dyYXBwZXJGb3JET01Ob2RlKE5vZGUqIG5v
ZGUsIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+CiAgICAgICAgIGdldERPTU5vZGVNYXAoKS5z
ZXQobm9kZSwgd3JhcHBlcik7CiB9CiAKLXY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+IFY4RE9NV3Jh
cHBlcjo6Z2V0Q29uc3RydWN0b3IoV3JhcHBlclR5cGVJbmZvKiB0eXBlLCB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gb2JqZWN0UHJvdG90eXBlKQotewotICAgIC8vIEEgRE9NIGNvbnN0cnVjdG9yIGlz
IGEgZnVuY3Rpb24gaW5zdGFuY2UgY3JlYXRlZCBmcm9tIGEgRE9NIGNvbnN0cnVjdG9yCi0gICAg
Ly8gdGVtcGxhdGUuIFRoZXJlIGlzIG9uZSBpbnN0YW5jZSBwZXIgY29udGV4dC4gQSBET00gY29u
c3RydWN0b3IgaXMKLSAgICAvLyBkaWZmZXJlbnQgZnJvbSBhIG5vcm1hbCBmdW5jdGlvbiBpbiB0
d28gd2F5czoKLSAgICAvLyAgIDEpIGl0IGNhbm5vdCBiZSBjYWxsZWQgYXMgY29uc3RydWN0b3Ig
KGFrYSwgdXNlZCB0byBjcmVhdGUgYSBET00gb2JqZWN0KQotICAgIC8vICAgMikgaXRzIF9fcHJv
dG9fXyBwb2ludHMgdG8gT2JqZWN0LnByb3RvdHlwZSByYXRoZXIgdGhhbgotICAgIC8vICAgICAg
RnVuY3Rpb24ucHJvdG90eXBlLgotICAgIC8vIFRoZSByZWFzb24gZm9yIDIpIGlzIHRoYXQsIGlu
IFNhZmFyaSwgYSBET00gY29uc3RydWN0b3IgaXMgYSBub3JtYWwgSlMKLSAgICAvLyBvYmplY3Qs
IGJ1dCBub3QgYSBmdW5jdGlvbi4gSG90bWFpbCByZWxpZXMgb24gdGhlIGZhY3QgdGhhdCwgaW4g
U2FmYXJpLAotICAgIC8vIEhUTUxFbGVtZW50Ll9fcHJvdG9fXyA9PSBPYmplY3QucHJvdG90eXBl
LgotICAgIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IGZ1bmN0aW9uVGVtcGxhdGUg
PSB0eXBlLT5nZXRUZW1wbGF0ZSgpOwotICAgIC8vIEdldHRpbmcgdGhlIGZ1bmN0aW9uIG1pZ2h0
IGZhaWwgaWYgd2UncmUgcnVubmluZyBvdXQgb2YKLSAgICAvLyBzdGFjayBvciBtZW1vcnkuCi0g
ICAgdjg6OlRyeUNhdGNoIHRyeUNhdGNoOwotICAgIHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+IHZh
bHVlID0gZnVuY3Rpb25UZW1wbGF0ZS0+R2V0RnVuY3Rpb24oKTsKLSAgICBpZiAodmFsdWUuSXNF
bXB0eSgpKQotICAgICAgICByZXR1cm4gdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj4oKTsKLSAgICAv
LyBIb3RtYWlsIGZpeCwgc2VlIGNvbW1lbnRzIGFib3ZlLgotICAgIGlmICghb2JqZWN0UHJvdG90
eXBlLklzRW1wdHkoKSkKLSAgICAgICAgdmFsdWUtPlNldFByb3RvdHlwZShvYmplY3RQcm90b3R5
cGUpOwotICAgIHJldHVybiB2YWx1ZTsKLX0KLQotdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj4gVjhE
T01XcmFwcGVyOjpnZXRDb25zdHJ1Y3RvckZvckNvbnRleHQoV3JhcHBlclR5cGVJbmZvKiB0eXBl
LCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0KQotewotICAgIC8vIEVudGVyIHRoZSBz
Y29wZSBmb3IgdGhpcyBjb250ZXh0IHRvIGdldCB0aGUgY29ycmVjdCBjb25zdHJ1Y3Rvci4KLSAg
ICB2ODo6Q29udGV4dDo6U2NvcGUgc2NvcGUoY29udGV4dCk7Ci0KLSAgICByZXR1cm4gZ2V0Q29u
c3RydWN0b3IodHlwZSwgVjhET01XaW5kb3dTaGVsbDo6Z2V0SGlkZGVuT2JqZWN0UHJvdG90eXBl
KGNvbnRleHQpKTsKLX0KLQogdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj4gVjhET01XcmFwcGVyOjpn
ZXRDb25zdHJ1Y3RvcihXcmFwcGVyVHlwZUluZm8qIHR5cGUsIERPTVdpbmRvdyogd2luZG93KQog
ewogICAgIEZyYW1lKiBmcmFtZSA9IHdpbmRvdy0+ZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQog
ICAgICAgICByZXR1cm4gdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj4oKTsKIAotICAgIHY4OjpIYW5k
bGU8djg6OkNvbnRleHQ+IGNvbnRleHQgPSBWOFByb3h5Ojpjb250ZXh0KGZyYW1lKTsKLSAgICBp
ZiAoY29udGV4dC5Jc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB2ODo6TG9jYWw8djg6OkZ1bmN0
aW9uPigpOworICAgIFY4QmluZGluZ1BlckNvbnRleHREYXRhKiBwZXJDb250ZXh0RGF0YTsKKyAg
ICBWOElzb2xhdGVkQ29udGV4dCogaXNvbGF0ZWRDb250ZXh0OworICAgIGlmIChVTkxJS0VMWSgh
IShpc29sYXRlZENvbnRleHQgPSBWOElzb2xhdGVkQ29udGV4dDo6Z2V0RW50ZXJlZCgpKSkpCisg
ICAgICAgIHBlckNvbnRleHREYXRhID0gaXNvbGF0ZWRDb250ZXh0LT5wZXJDb250ZXh0RGF0YSgp
OworICAgIGVsc2UKKyAgICAgICAgcGVyQ29udGV4dERhdGEgPSBWOFByb3h5OjpyZXRyaWV2ZShm
cmFtZSktPndpbmRvd1NoZWxsKCktPnBlckNvbnRleHREYXRhKCk7CiAKLSAgICByZXR1cm4gZ2V0
Q29uc3RydWN0b3JGb3JDb250ZXh0KHR5cGUsIGNvbnRleHQpOworICAgIHJldHVybiBwZXJDb250
ZXh0RGF0YS0+Z2V0Q29uc3RydWN0b3IodHlwZSk7CiB9CiAKICNpZiBFTkFCTEUoV09SS0VSUykK
QEAgLTE0MiwxOCArMTE0LDI1IEBAIHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+IFY4RE9NV3JhcHBl
cjo6Z2V0Q29uc3RydWN0b3IoV3JhcHBlclR5cGVJbmZvKiB0eXBlLCBXb3JrCiB7CiAgICAgV29y
a2VyU2NyaXB0Q29udHJvbGxlciogY29udHJvbGxlciA9IFdvcmtlclNjcmlwdENvbnRyb2xsZXI6
OmNvbnRyb2xsZXJGb3JDb250ZXh0KCk7CiAgICAgV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5
KiBwcm94eSA9IGNvbnRyb2xsZXIgPyBjb250cm9sbGVyLT5wcm94eSgpIDogMDsKLSAgICBpZiAo
IXByb3h5KQotICAgICAgICByZXR1cm4gdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj4oKTsKKyAgICBy
ZXR1cm4gcHJveHkgPyBwcm94eS0+cGVyQ29udGV4dERhdGEoKS0+Z2V0Q29uc3RydWN0b3IodHlw
ZSkgOiB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPigpOworfQorI2VuZGlmCiAKLSAgICB2ODo6SGFu
ZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0ID0gcHJveHktPmNvbnRleHQoKTsKLSAgICBpZiAoY29u
dGV4dC5Jc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPigp
OworVjhCaW5kaW5nUGVyQ29udGV4dERhdGEqIFY4RE9NV3JhcHBlcjo6Z2V0UGVyQ29udGV4dERh
dGEoVjhQcm94eSogcHJveHkpCit7CisgICAgVjhET01XaW5kb3dTaGVsbCogc2hlbGwgPSBwcm94
eS0+d2luZG93U2hlbGwoKTsKKyAgICByZXR1cm4gc2hlbGwgPyBzaGVsbC0+cGVyQ29udGV4dERh
dGEoKSA6IDA7Cit9CiAKLSAgICByZXR1cm4gZ2V0Q29uc3RydWN0b3JGb3JDb250ZXh0KHR5cGUs
IGNvbnRleHQpOworI2lmIEVOQUJMRShXT1JLRVJTKQorVjhCaW5kaW5nUGVyQ29udGV4dERhdGEq
IFY4RE9NV3JhcHBlcjo6Z2V0UGVyQ29udGV4dERhdGEoV29ya2VyQ29udGV4dCopCit7CisgICAg
V29ya2VyU2NyaXB0Q29udHJvbGxlciogY29udHJvbGxlciA9IFdvcmtlclNjcmlwdENvbnRyb2xs
ZXI6OmNvbnRyb2xsZXJGb3JDb250ZXh0KCk7CisgICAgV29ya2VyQ29udGV4dEV4ZWN1dGlvblBy
b3h5KiBwcm94eSA9IGNvbnRyb2xsZXIgPyBjb250cm9sbGVyLT5wcm94eSgpIDogMDsKKyAgICBy
ZXR1cm4gcHJveHkgPyBwcm94eS0+cGVyQ29udGV4dERhdGEoKSA6IDA7CiB9CiAjZW5kaWYKIAot
CiB2b2lkIFY4RE9NV3JhcHBlcjo6c2V0TmFtZWRIaWRkZW5SZWZlcmVuY2Uodjg6OkhhbmRsZTx2
ODo6T2JqZWN0PiBwYXJlbnQsIGNvbnN0IGNoYXIqIG5hbWUsIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBjaGlsZCkKIHsKICAgICBwYXJlbnQtPlNldEhpZGRlblZhbHVlKFY4SGlkZGVuUHJvcGVydHlO
YW1lOjpoaWRkZW5SZWZlcmVuY2VOYW1lKG5hbWUpLCBjaGlsZCk7CkBAIC0yMDAsMTIgKzE3OSwx
MCBAQCB2ODo6TG9jYWw8djg6Ok9iamVjdD4gVjhET01XcmFwcGVyOjppbnN0YW50aWF0ZVY4T2Jq
ZWN0KFY4UHJveHkqIHByb3h5LCBXcmFwcGVyVAogI2lmIEVOQUJMRShXT1JLRVJTKQogICAgIFdv
cmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQgPSAwOwogI2VuZGlmCi0gICAgaWYgKFY4SXNvbGF0
ZWRDb250ZXh0OjpnZXRFbnRlcmVkKCkpIHsKLSAgICAgICAgLy8gVGhpcyBlZmZlY3RpdmVseSBk
aXNhYmxlcyB0aGUgd3JhcHBlciBjYWNoZSBmb3IgaXNvbGF0ZWQgd29ybGRzLgotICAgICAgICBw
cm94eSA9IDA7Ci0gICAgICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVkIGEgd3JhcHBlciBjYWNoZSBm
b3IgdGhlIGlzb2xhdGVkIHdvcmxkPyAgV2Ugc2hvdWxkCi0gICAgICAgIC8vICAgICAgICBzZWUg
aWYgdGhlIHBlcmZvcm1hbmNlIGdhaW5zIGFyZSB3b3J0aCB3aGlsZS4KLSAgICAgICAgLy8gV2Un
bGwgZ2V0IG9uZSBvbmNlIHdlIGdpdmUgdGhlIGlzb2xhdGVkIGNvbnRleHQgYSBwcm9wZXIgd2lu
ZG93IHNoZWxsLgorICAgIFY4QmluZGluZ1BlckNvbnRleHREYXRhKiBwZXJDb250ZXh0RGF0YSA9
IDA7CisgICAgVjhJc29sYXRlZENvbnRleHQqIGlzb2xhdGVkQ29udGV4dDsKKyAgICBpZiAoVU5M
SUtFTFkoISEoaXNvbGF0ZWRDb250ZXh0ID0gVjhJc29sYXRlZENvbnRleHQ6OmdldEVudGVyZWQo
KSkpKSB7CisgICAgICAgIHBlckNvbnRleHREYXRhID0gaXNvbGF0ZWRDb250ZXh0LT5wZXJDb250
ZXh0RGF0YSgpOwogICAgIH0gZWxzZSBpZiAoIXByb3h5KSB7CiAgICAgICAgIHY4OjpIYW5kbGU8
djg6OkNvbnRleHQ+IGNvbnRleHQgPSB2ODo6Q29udGV4dDo6R2V0Q3VycmVudCgpOwogICAgICAg
ICBpZiAoIWNvbnRleHQuSXNFbXB0eSgpKSB7CkBAIC0yMjMsMTkgKzIwMCwyMiBAQCB2ODo6TG9j
YWw8djg6Ok9iamVjdD4gVjhET01XcmFwcGVyOjppbnN0YW50aWF0ZVY4T2JqZWN0KFY4UHJveHkq
IHByb3h5LCBXcmFwcGVyVAogICAgIH0KIAogICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBpbnN0
YW5jZTsKLSAgICBpZiAocHJveHkpCi0gICAgICAgIC8vIEZJWE1FOiBGaXggdGhpcyB0byB3b3Jr
IHByb3Blcmx5IHdpdGggaXNvbGF0ZWQgd29ybGRzIChzZWUgYWJvdmUpLgotICAgICAgICBpbnN0
YW5jZSA9IHByb3h5LT53aW5kb3dTaGVsbCgpLT5jcmVhdGVXcmFwcGVyRnJvbUNhY2hlKHR5cGUp
OwotICAgIGVsc2UgewotICAgICAgICB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPiBmdW5jdGlvbjsK
KyAgICBpZiAoIXBlckNvbnRleHREYXRhKSB7CisgICAgICAgIGlmIChwcm94eSkKKyAgICAgICAg
ICAgIHBlckNvbnRleHREYXRhID0gZ2V0UGVyQ29udGV4dERhdGEocHJveHkpOwogI2lmIEVOQUJM
RShXT1JLRVJTKQotICAgICAgICBpZiAod29ya2VyQ29udGV4dCkKLSAgICAgICAgICAgIGZ1bmN0
aW9uID0gZ2V0Q29uc3RydWN0b3IodHlwZSwgd29ya2VyQ29udGV4dCk7Ci0gICAgICAgIGVsc2UK
KyAgICAgICAgZWxzZSBpZiAod29ya2VyQ29udGV4dCkKKyAgICAgICAgICAgIHBlckNvbnRleHRE
YXRhID0gZ2V0UGVyQ29udGV4dERhdGEod29ya2VyQ29udGV4dCk7CiAjZW5kaWYKLSAgICAgICAg
ICAgIGZ1bmN0aW9uID0gdHlwZS0+Z2V0VGVtcGxhdGUoKS0+R2V0RnVuY3Rpb24oKTsKKyAgICB9
CisKKyAgICBpZiAocGVyQ29udGV4dERhdGEpCisgICAgICAgIGluc3RhbmNlID0gcGVyQ29udGV4
dERhdGEtPmNyZWF0ZVdyYXBwZXJGcm9tQ2FjaGUodHlwZSk7CisgICAgZWxzZSB7CisgICAgICAg
IHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+IGZ1bmN0aW9uID0gdHlwZS0+Z2V0VGVtcGxhdGUoKS0+
R2V0RnVuY3Rpb24oKTsKICAgICAgICAgaW5zdGFuY2UgPSBTYWZlQWxsb2NhdGlvbjo6bmV3SW5z
dGFuY2UoZnVuY3Rpb24pOwogICAgIH0KKwogICAgIGlmICghaW5zdGFuY2UuSXNFbXB0eSgpKSB7
CiAgICAgICAgIC8vIEF2b2lkIHNldHRpbmcgdGhlIERPTSB3cmFwcGVyIGZvciBmYWlsZWQgYWxs
b2NhdGlvbnMuCiAgICAgICAgIHNldERPTVdyYXBwZXIoaW5zdGFuY2UsIHR5cGUsIGltcGwpOwpA
QCAtMzMxLDQgKzMxMSw1IEBAIFJlZlB0cjxYUGF0aE5TUmVzb2x2ZXI+IFY4RE9NV3JhcHBlcjo6
Z2V0WFBhdGhOU1Jlc29sdmVyKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2CiAgICAgcmV0dXJuIHJl
c29sdmVyOwogfQogCisKIH0gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5oCmluZGV4IDBlODBiMjI5Njk1ZjlkOWM4ZmM5ZTMyZDJm
ZWVhOGQyYjM0NWFmMzIuLmZkMDM5MjU1YzI4Nzk1YjU3ZDdjMzUyYjRkM2M3NzI3NGZiZjQwMDkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5oCkBAIC01Myw2ICs1
Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBFdmVudFRhcmdldDsKICAgICBj
bGFzcyBGcmFtZTsKICAgICBjbGFzcyBOb2RlOworICAgIGNsYXNzIFY4QmluZGluZ1BlckNvbnRl
eHREYXRhOwogICAgIGNsYXNzIFY4UHJveHk7CiAgICAgY2xhc3MgV29ya2VyQ29udGV4dDsKIApA
QCAtOTgsOCArOTksNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIFdyYXAgSlMg
bm9kZSBmaWx0ZXIgaW4gQysrLgogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxOb2RlRmlsdGVy
PiB3cmFwTmF0aXZlTm9kZUZpbHRlcih2ODo6SGFuZGxlPHY4OjpWYWx1ZT4pOwogCi0gICAgICAg
IHN0YXRpYyB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPiBnZXRDb25zdHJ1Y3RvckZvckNvbnRleHQo
V3JhcHBlclR5cGVJbmZvKiwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4pOwotICAgICAgICBzdGF0
aWMgdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj4gZ2V0Q29uc3RydWN0b3IoV3JhcHBlclR5cGVJbmZv
Kiwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG9iamVjdFByb3RvdHlwZSk7CiAgICAgICAgIHN0YXRp
YyB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPiBnZXRDb25zdHJ1Y3RvcihXcmFwcGVyVHlwZUluZm8q
LCBET01XaW5kb3cqKTsKICNpZiBFTkFCTEUoV09SS0VSUykKICAgICAgICAgc3RhdGljIHY4OjpM
b2NhbDx2ODo6RnVuY3Rpb24+IGdldENvbnN0cnVjdG9yKFdyYXBwZXJUeXBlSW5mbyosIFdvcmtl
ckNvbnRleHQqKTsKQEAgLTE0Niw4ICsxNDUsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICAgICAgRE9NTm9kZU1hcHBpbmcmIGRvbU5vZGVNYXAgPSBub2RlLT5pc0FjdGl2ZU5vZGUo
KSA/IHN0b3JlLT5hY3RpdmVEb21Ob2RlTWFwKCkgOiBzdG9yZS0+ZG9tTm9kZU1hcCgpOwogICAg
ICAgICAgICAgcmV0dXJuIGRvbU5vZGVNYXAuZ2V0KG5vZGUpOwogICAgICAgICB9CisgICAgcHJp
dmF0ZToKKyAgICAgICAgc3RhdGljIFY4QmluZGluZ1BlckNvbnRleHREYXRhKiBnZXRQZXJDb250
ZXh0RGF0YShWOFByb3h5Kik7CisjaWYgRU5BQkxFKFdPUktFUlMpCisgICAgICAgIHN0YXRpYyBW
OEJpbmRpbmdQZXJDb250ZXh0RGF0YSogZ2V0UGVyQ29udGV4dERhdGEoV29ya2VyQ29udGV4dCop
OworI2VuZGlmCiAgICAgfTsKLQogfQogCiAjZW5kaWYgLy8gVjhET01XcmFwcGVyX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRDb250ZXh0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRDb250ZXh0LmNwcAppbmRleCAz
NGMxNzAzODQ0OGI5YTYxOTU3YTBlNWNjZTM2ZWE0MjU3NTlhZGRlLi4xMTRmYWIzNWFjZjljNTBl
ODdkYmVkMDg2NWU4ZmE0ZDhhMWZjNDExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9WOElzb2xhdGVkQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvVjhJc29sYXRlZENvbnRleHQuY3BwCkBAIC02OCw3ICs2OCw5IEBAIFY4SXNvbGF0ZWRD
b250ZXh0OjpWOElzb2xhdGVkQ29udGV4dChWOFByb3h5KiBwcm94eSwgaW50IGV4dGVuc2lvbkdy
b3VwLCBpbnQgd29yCiAKICAgICBnZXRHbG9iYWxPYmplY3QobV9jb250ZXh0LT5nZXQoKSktPlNl
dFBvaW50ZXJJbkludGVybmFsRmllbGQoVjhET01XaW5kb3c6OmVudGVyZWRJc29sYXRlZFdvcmxk
SW5kZXgsIHRoaXMpOwogCi0gICAgVjhET01XaW5kb3dTaGVsbDo6aW5zdGFsbEhpZGRlbk9iamVj
dFByb3RvdHlwZShtX2NvbnRleHQtPmdldCgpKTsKKyAgICBtX3BlckNvbnRleHREYXRhID0gVjhC
aW5kaW5nUGVyQ29udGV4dERhdGE6OmNyZWF0ZShtX2NvbnRleHQtPmdldCgpKTsKKyAgICBtX3Bl
ckNvbnRleHREYXRhLT5pbnN0YWxsSGlkZGVuT2JqZWN0UHJvdG90eXBlKCk7CisKICAgICAvLyBG
SVhNRTogVGhpcyB3aWxsIGdvIGF3YXkgb25jZSB3ZSBoYXZlIGEgd2luZG93U2hlbGwgZm9yIHRo
ZSBpc29sYXRlZCB3b3JsZC4KICAgICBwcm94eS0+d2luZG93U2hlbGwoKS0+aW5zdGFsbERPTVdp
bmRvdyhtX2NvbnRleHQtPmdldCgpLCBtX2ZyYW1lLT5kb21XaW5kb3coKSk7CiAKQEAgLTg1LDYg
Kzg3LDcgQEAgVjhJc29sYXRlZENvbnRleHQ6OlY4SXNvbGF0ZWRDb250ZXh0KFY4UHJveHkqIHBy
b3h5LCBpbnQgZXh0ZW5zaW9uR3JvdXAsIGludCB3b3IKIAogdm9pZCBWOElzb2xhdGVkQ29udGV4
dDo6ZGVzdHJveSgpCiB7CisgICAgbV9wZXJDb250ZXh0RGF0YS5jbGVhcigpOwogICAgIG1fZnJh
bWUtPmxvYWRlcigpLT5jbGllbnQoKS0+d2lsbFJlbGVhc2VTY3JpcHRDb250ZXh0KGNvbnRleHQo
KSwgbV93b3JsZC0+aWQoKSk7CiAgICAgbV9jb250ZXh0LT5nZXQoKS5NYWtlV2Vhayh0aGlzLCAm
Y29udGV4dFdlYWtSZWZlcmVuY2VDYWxsYmFjayk7CiAgICAgbV9mcmFtZSA9IDA7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOElzb2xhdGVkQ29udGV4dC5oIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhJc29sYXRlZENvbnRleHQuaAppbmRleCAyMjdhNzNk
OTNlNzZkZmQzYjM0MjdmZDMxZTBmYjk3OTFlNmFmMGUyLi4zZGVhZmNlYWZlMGM1MTFmYWU1M2Nl
YjQzYjgzMTVkOTZmNTkwMzNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9WOElzb2xhdGVkQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
SXNvbGF0ZWRDb250ZXh0LmgKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJJc29sYXRlZFdv
cmxkLmgiCiAjaW5jbHVkZSAiU2NyaXB0U291cmNlQ29kZS5oIiAvLyBmb3IgV2ViQ29yZTo6U2Ny
aXB0U291cmNlQ29kZQogI2luY2x1ZGUgIlNoYXJlZFBlcnNpc3RlbnQuaCIKKyNpbmNsdWRlICJW
OEJpbmRpbmdQZXJDb250ZXh0RGF0YS5oIgogI2luY2x1ZGUgIlY4VXRpbGl0aWVzLmgiCiAjaW5j
bHVkZSA8djguaD4KIApAQCAtOTYsNiArOTcsOCBAQCBwdWJsaWM6CiAgICAgU2VjdXJpdHlPcmln
aW4qIHNlY3VyaXR5T3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9zZWN1cml0eU9yaWdpbi5nZXQo
KTsgfQogICAgIHZvaWQgc2V0U2VjdXJpdHlPcmlnaW4oUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdp
bj4pOwogCisgICAgVjhCaW5kaW5nUGVyQ29udGV4dERhdGEqIHBlckNvbnRleHREYXRhKCkgeyBy
ZXR1cm4gbV9wZXJDb250ZXh0RGF0YS5nZXQoKTsgfQorCiBwcml2YXRlOgogICAgIHN0YXRpYyB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGdldEdsb2JhbE9iamVjdCh2ODo6SGFuZGxlPHY4OjpDb250
ZXh0PiBjb250ZXh0KQogICAgIHsKQEAgLTExNyw2ICsxMjAsOCBAQCBwcml2YXRlOgogICAgIFJl
ZlB0cjxTZWN1cml0eU9yaWdpbj4gbV9zZWN1cml0eU9yaWdpbjsKIAogICAgIEZyYW1lKiBtX2Zy
YW1lOworCisgICAgT3duUHRyPFY4QmluZGluZ1BlckNvbnRleHREYXRhPiBtX3BlckNvbnRleHRE
YXRhOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5jcHAKaW5k
ZXggNTFiZTVjYTgzZjcwNzljNzRhMjQ3ZDMyNTNmMDU1NzdjOGNjODQxNy4uODE3YWIzMmQ3M2Fj
NDE1OGJmZTNlY2Q1ZTZhOWNlMGI4NDcyMDZlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuY3BwCkBAIC00
Miw2ICs0Miw3IEBACiAjaW5jbHVkZSAiU2hhcmVkV29ya2VyQ29udGV4dC5oIgogI2luY2x1ZGUg
IlY4QmluZGluZy5oIgogI2luY2x1ZGUgIlY4RE9NTWFwLmgiCisjaW5jbHVkZSAiVjhET01XaW5k
b3dTaGVsbC5oIgogI2luY2x1ZGUgIlY4RGVkaWNhdGVkV29ya2VyQ29udGV4dC5oIgogI2luY2x1
ZGUgIlY4UHJveHkuaCIKICNpbmNsdWRlICJWOFJlY3Vyc2lvblNjb3BlLmgiCkBAIC0xMDEsNiAr
MTAyLDggQEAgdm9pZCBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OmRpc3Bvc2UoKQogICAg
IH0KICAgICBtX2V2ZW50cy5jbGVhcigpOwogCisgICAgbV9wZXJDb250ZXh0RGF0YS5jbGVhcigp
OworCiAgICAgLy8gRGlzcG9zZSB0aGUgY29udGV4dC4KICAgICBpZiAoIW1fY29udGV4dC5Jc0Vt
cHR5KCkpIHsKICAgICAgICAgbV9jb250ZXh0LkRpc3Bvc2UoKTsKQEAgLTE0OCw2ICsxNTEsMTIg
QEAgYm9vbCBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OmluaXRDb250ZXh0SWZOZWVkZWQo
KQogCiAgICAgdjg6OkNvbnRleHQ6OlNjb3BlIHNjb3BlKGNvbnRleHQpOwogCisgICAgbV9wZXJD
b250ZXh0RGF0YSA9IFY4QmluZGluZ1BlckNvbnRleHREYXRhOjpjcmVhdGUobV9jb250ZXh0KTsK
KyAgICBpZiAoIW1fcGVyQ29udGV4dERhdGEtPmluc3RhbGxIaWRkZW5PYmplY3RQcm90b3R5cGUo
KSkgeworICAgICAgICBkaXNwb3NlKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
ICAgICAvLyBTZXQgRGVidWdJZCBmb3IgdGhlIG5ldyBjb250ZXh0LgogICAgIGNvbnRleHQtPlNl
dERhdGEodjg6OlN0cmluZzo6TmV3KCJ3b3JrZXIiKSk7CiAKQEAgLTE1Nyw3ICsxNjYsNyBAQCBi
b29sIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6aW5pdENvbnRleHRJZk5lZWRlZCgpCiAg
ICAgaWYgKCFtX3dvcmtlckNvbnRleHQtPmlzRGVkaWNhdGVkV29ya2VyQ29udGV4dCgpKQogICAg
ICAgICBjb250ZXh0VHlwZSA9ICZWOFNoYXJlZFdvcmtlckNvbnRleHQ6OmluZm87CiAjZW5kaWYK
LSAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gd29ya2VyQ29udGV4dENvbnN0cnVjdG9yID0g
VjhET01XcmFwcGVyOjpnZXRDb25zdHJ1Y3RvckZvckNvbnRleHQoY29udGV4dFR5cGUsIGNvbnRl
eHQpOworICAgIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiB3b3JrZXJDb250ZXh0Q29uc3RydWN0
b3IgPSBtX3BlckNvbnRleHREYXRhLT5nZXRDb25zdHJ1Y3Rvcihjb250ZXh0VHlwZSk7CiAgICAg
djg6OkxvY2FsPHY4OjpPYmplY3Q+IGpzV29ya2VyQ29udGV4dCA9IFNhZmVBbGxvY2F0aW9uOjpu
ZXdJbnN0YW5jZSh3b3JrZXJDb250ZXh0Q29uc3RydWN0b3IpOwogICAgIC8vIEJhaWwgb3V0IGlm
IGFsbG9jYXRpb24gZmFpbGVkLgogICAgIGlmIChqc1dvcmtlckNvbnRleHQuSXNFbXB0eSgpKSB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhl
Y3V0aW9uUHJveHkuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRF
eGVjdXRpb25Qcm94eS5oCmluZGV4IGU2YzE2MDU0NDliMDliOGIxNTI1NmM0MTYzYWUyZDMxMWVm
MGE2ZWQuLmE3NmRmY2YxMzhiYzExMWUzYWZiYmQ2ZmJiNjZlMGJhMzhkYjgwM2IgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94
eS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRp
b25Qcm94eS5oCkBAIC0zNSw2ICszNSw3IEBACiAjaWYgRU5BQkxFKFdPUktFUlMpCiAKICNpbmNs
dWRlICJTY3JpcHRWYWx1ZS5oIgorI2luY2x1ZGUgIlY4QmluZGluZ1BlckNvbnRleHREYXRhLmgi
CiAjaW5jbHVkZSA8djguaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0UG9zaXRpb24uaD4KICNp
bmNsdWRlIDx3dGYvT3duUHRyLmg+CkBAIC00NSw2ICs0Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICBjbGFzcyBFdmVudDsKICAgICBjbGFzcyBFdmVudFRhcmdldDsKICAgICBjbGFzcyBX
b3JrZXJDb250ZXh0OworICAgIHN0cnVjdCBXcmFwcGVyVHlwZUluZm87CiAKICAgICBzdHJ1Y3Qg
V29ya2VyQ29udGV4dEV4ZWN1dGlvblN0YXRlIHsKICAgICAgICAgV29ya2VyQ29udGV4dEV4ZWN1
dGlvblN0YXRlKCkgOiBoYWRFeGNlcHRpb24oZmFsc2UpLCBsaW5lTnVtYmVyKDApIHsgfQpAQCAt
NzIsNiArNzQsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIFJldHVybnMgYSBs
b2NhbCBoYW5kbGUgb2YgdGhlIGNvbnRleHQuCiAgICAgICAgIHY4OjpMb2NhbDx2ODo6Q29udGV4
dD4gY29udGV4dCgpIHsgcmV0dXJuIHY4OjpMb2NhbDx2ODo6Q29udGV4dD46Ok5ldyhtX2NvbnRl
eHQpOyB9CiAKKyAgICAgICAgVjhCaW5kaW5nUGVyQ29udGV4dERhdGEqIHBlckNvbnRleHREYXRh
KCkgeyByZXR1cm4gbV9wZXJDb250ZXh0RGF0YS5nZXQoKTsgfQorCiAgICAgcHJpdmF0ZToKICAg
ICAgICAgdm9pZCBpbml0SXNvbGF0ZSgpOwogICAgICAgICBib29sIGluaXRDb250ZXh0SWZOZWVk
ZWQoKTsKQEAgLTg4LDYgKzkyLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2ODo6
UGVyc2lzdGVudDx2ODo6Q29udGV4dD4gbV9jb250ZXh0OwogCiAgICAgICAgIFZlY3RvcjxFdmVu
dCo+IG1fZXZlbnRzOworCisgICAgICAgIE93blB0cjxWOEJpbmRpbmdQZXJDb250ZXh0RGF0YT4g
bV9wZXJDb250ZXh0RGF0YTsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5k
ZXggNWIwMjg5MDNjM2UzODM0ZjQ0OTQ5NDAxNTM0Mjk0ODgxZmI5OTBlYi4uNDAxYjViYWQ3MTI1
YmVhYjgwYzY0NTRjODIwNTBmYWI1YmE1ZWUwZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE3IEBACiAyMDEy
LTA0LTAzICBFcmlrIEFydmlkc3NvbiAgPGFydkBjaHJvbWl1bS5vcmc+CiAKKyAgICAgICAgW1Y4
XSBBZGQgYSBwZXIgY29udGV4dCBkYXRhIHN0b3JlIGFuZCB1c2UgdGhhdCBmb3IgY2FjaGluZyBi
b2lsZXIgcGxhdGVzIGFzIHdlbGwgYXMgY29uc3RydWN0b3IgZnVuY3Rpb25zCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MzA5MworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZmFzdC9kb20vY29uc3RydWN0
b3ItcHJvdG8tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9jb25zdHJ1
Y3Rvci1wcm90by5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvY29uc3RydWN0
b3ItcHJvdG8tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvY29u
c3RydWN0b3ItcHJvdG8uaHRtbDogQWRkZWQuCisKKzIwMTItMDQtMDMgIEVyaWsgQXJ2aWRzc29u
ICA8YXJ2QGNocm9taXVtLm9yZz4KKwogICAgICAgICBbdjhdIEZpeCBtZW1vcnkgbGVhayBpbiBW
OExhenlFdmVudExpc3RlbmVyCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD04MzA1NwogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9jb25z
dHJ1Y3Rvci1wcm90by1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9jb25zdHJ1
Y3Rvci1wcm90by1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzQ4YzljM2MxOGU1OWU4MjAxNjgz
YTY3YjljYTgyY2E0MWU1MWI5NQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qv
ZG9tL2NvbnN0cnVjdG9yLXByb3RvLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEwIEBACitUaGlz
IHRlc3RzIHRoYXQgc2V0dGluZyB0aGUgcHJvdG8gb2YgYSBidWlsdCBpbiBjb25zdHJ1Y3RvciBp
cyBub3QgcmVzZXQKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNT
IiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgSFRNTEVs
ZW1lbnQuX19wcm90b19fIGlzIHByb3RvCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVl
CisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vY29u
c3RydWN0b3ItcHJvdG8uaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL2NvbnN0cnVjdG9yLXBy
b3RvLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNjAzNmZkMmU0MDc4MmU2Nzg3NjQwOGVlNDMxZjY2Y2MxZjBk
YjQwYwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL2NvbnN0cnVjdG9y
LXByb3RvLmh0bWwKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIGh0bWw+Cis8c2NyaXB0IHNy
Yz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CisK
K2Rlc2NyaXB0aW9uKCdUaGlzIHRlc3RzIHRoYXQgc2V0dGluZyB0aGUgcHJvdG8gb2YgYSBidWls
dCBpbiBjb25zdHJ1Y3RvciBpcyBub3QgcmVzZXQnKTsKKwordmFyIHByb3RvID0gbmV3IE51bWJl
cig0Mik7CitIVE1MRWxlbWVudC5fX3Byb3RvX18gPSBwcm90bzsKK3Nob3VsZEJlKCdIVE1MRWxl
bWVudC5fX3Byb3RvX18nLCAncHJvdG8nKTsKKworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4v
anMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9mYXN0L3dvcmtlcnMvY29uc3RydWN0b3ItcHJvdG8tZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvZmFzdC93b3JrZXJzL2NvbnN0cnVjdG9yLXByb3RvLWV4cGVjdGVkLnR4dApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5iNjcyZTg4MzU2MmI5NTQ0M2MzNDFhMjNmMGU3NmM2MDZjNjJmNDczCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL2NvbnN0cnVjdG9yLXByb3RvLWV4
cGVjdGVkLnR4dApAQCAtMCwwICsxLDEzIEBACitUaGlzIHRlc3RzIHRoYXQgc2V0dGluZyB0aGUg
cHJvdG8gb2YgYSBidWlsdCBpbiBjb25zdHJ1Y3RvciBpcyBub3QgcmVzZXQKKworT24gc3VjY2Vz
cywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkg
IlRFU1QgQ09NUExFVEUiLgorCisKK3Byb3RvID0gbmV3IE51bWJlcig0Mik6IDQyCitXb3JrZXJM
b2NhdGlvbi5fX3Byb3RvX186IFtvYmplY3QgT2JqZWN0XQorV29ya2VyTG9jYXRpb24uX19wcm90
b19fID0gcHJvdG86IDQyCitXb3JrZXJMb2NhdGlvbi5fX3Byb3RvX186IDQyCitQQVNTIHN1Y2Nl
c3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZmFzdC93b3JrZXJzL2NvbnN0cnVjdG9yLXByb3RvLmh0bWwgYi9MYXlvdXRUZXN0
cy9mYXN0L3dvcmtlcnMvY29uc3RydWN0b3ItcHJvdG8uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41M2NiNzg0
YzlhZDNmOGQ2OGI1MzFiOGY3YmJiNjllNTAwZDZiZmQ4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvZmFzdC93b3JrZXJzL2NvbnN0cnVjdG9yLXByb3RvLmh0bWwKQEAgLTAsMCArMSwy
NSBAQAorPCFET0NUWVBFIGh0bWw+Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRl
c3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvd29ya2VyLWNyZWF0
ZS1jb21tb24uanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KKwordmFyIGpzVGVzdElzQXN5bmMgPSB0
cnVlOworCitkZXNjcmlwdGlvbignVGhpcyB0ZXN0cyB0aGF0IHNldHRpbmcgdGhlIHByb3RvIG9m
IGEgYnVpbHQgaW4gY29uc3RydWN0b3IgaXMgbm90IHJlc2V0Jyk7CisKK3ZhciB3b3JrZXIgPSBj
cmVhdGVXb3JrZXIoKTsKK3dvcmtlci5wb3N0TWVzc2FnZSgiZXZhbCBwcm90byA9IG5ldyBOdW1i
ZXIoNDIpIik7Cit3b3JrZXIucG9zdE1lc3NhZ2UoImV2YWwgV29ya2VyTG9jYXRpb24uX19wcm90
b19fIik7Cit3b3JrZXIucG9zdE1lc3NhZ2UoImV2YWwgV29ya2VyTG9jYXRpb24uX19wcm90b19f
ID0gcHJvdG8iKTsKK3dvcmtlci5wb3N0TWVzc2FnZSgiZXZhbCBXb3JrZXJMb2NhdGlvbi5fX3By
b3RvX18iKTsKK3dvcmtlci5wb3N0TWVzc2FnZSgiZXZhbCBET05FIik7CisKK3dvcmtlci5vbm1l
c3NhZ2UgPSBmdW5jdGlvbihldnQpIHsKKyAgICBpZiAoIS9ET05FLy50ZXN0KGV2dC5kYXRhKSkK
KyAgICAgICAgZGVidWcoZXZ0LmRhdGEucmVwbGFjZShuZXcgUmVnRXhwKCIvLipMYXlvdXRUZXN0
cyIpLCAiPC4uLj4iKSk7CisgICAgZWxzZQorICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKK307CisK
Kzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMi
Pjwvc2NyaXB0Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>135695</attachid>
            <date>2012-04-04 15:14:40 -0700</date>
            <delta_ts>2012-04-04 15:25:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-83093-20120404151439.patch</filename>
            <type>text/plain</type>
            <size>41033</size>
            <attacher name="Erik Arvidsson">arv</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEzMjM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTU2NTFlNmY4OTFmZjg2
MWJjN2U3MGMzNzZmM2ZhNTRjN2M2ODQ4MS4uZGM2OWJiZDU2YjczMTg0NjRiNmZiYjdlMzliNmU0
M2YzZmJhYjVmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDc5IEBACiAyMDEyLTA0LTA0ICBFcmlr
IEFydmlkc3NvbiAgPGFydkBjaHJvbWl1bS5vcmc+CiAKKyAgICAgICAgW1Y4XSBBZGQgYSBwZXIg
Y29udGV4dCBkYXRhIHN0b3JlIGFuZCB1c2UgdGhhdCBmb3IgY2FjaGluZyBib2lsZXIgcGxhdGVz
IGFzIHdlbGwgYXMgY29uc3RydWN0b3IgZnVuY3Rpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MzA5MworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgaW50cm9kdWNlcyBhIFY4QmluZGluZ1BlckNv
bnRleHREYXRhIGNsYXNzLiBBZnRlciBjcmVhdGluZyBhIG5ldyB2ODo6Q29udGV4dCB3ZSBhbHNv
IGNyZWF0ZSBhIG5ldworICAgICAgICBwZXIgY29udGV4dCBkYXRhIGluc3RhbmNlLiBUaGlzIGlu
c3RhbmNlIG1haW50YWlucyB0aGUgYm9pbGVyIHBsYXRlIGFuZCBjb25zdHJ1Y3RvciBjYWNoZXMu
IFY4RE9NV3JhcHBlcgorICAgICAgICBub3cgZGVsZWdhdGVzIHRoZSBjYWNoaW5nIHRvIHRoaXMg
bmV3IGNsYXNzLiBQcmV2aW91c2x5IHRoZSBjYWNoaW5nIHdhcyBvbmx5IGRvbmUgaW4gVjhET01X
aW5kb3dTaGVsbCB3aGljaAorICAgICAgICBtYWRlIHdvcmtlcnMgYW5kIGlzb2xhdGVkIHdvcmxk
cyBiZWhhdmUgc2xpZ2h0bHkgZGlmZmVyZW50LgorCisgICAgICAgIFRlc3RzOiBmYXN0L2RvbS9j
b25zdHJ1Y3Rvci1wcm90by5odG1sCisgICAgICAgICAgICAgICBmYXN0L3dvcmtlcnMvY29uc3Ry
dWN0b3ItcHJvdG8uaHRtbAorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtOgorICAgICAgICAoR2VuZXJhdGVDb25z
dHJ1Y3RvckdldHRlcik6IFJlbmFtZWQgZ2V0Q29uc3RydWN0b3IgdG8gY29uc3RydWN0b3JGb3JU
eXBlLgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4QmluZGluZ1BlckNvbnRleHREYXRhLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4QmluZGluZ1Bl
ckNvbnRleHREYXRhOjpkaXNwb3NlKTogVGhpcyBjbGVhcnMgdGhlIHBlcnNpc3RlbnQgaGFuZGxl
cyBzdG9yZWQgaW4gdGhlIG1hcHMuCisgICAgICAgIChXZWJDb3JlOjpWOEJpbmRpbmdQZXJDb250
ZXh0RGF0YTo6aW5pdCk6IFRoaXMgaW5zdGFsbHMgdGhlIGhpZGRlbiBwcm90b3R5cGUgd2hpY2gg
aXMgdXNlZCBhcyB0aGUKKyAgICAgICAgW1tQcm90b3R5cGVdXSBmb3IgdGhlIGNvbnN0cnVjdG9y
IGZ1bmN0aW9ucyAoZm9yIEhvdE1haWwgY29tcGF0KS4KKyAgICAgICAgKFdlYkNvcmU6OlY4Qmlu
ZGluZ1BlckNvbnRleHREYXRhOjpjcmVhdGVXcmFwcGVyRnJvbUNhY2hlU2xvd0Nhc2UpOiBJbnN0
YW50aWF0ZXMgYSBuZXcgb2JqZWN0IGFuZAorICAgICAgICBzdG9yZXMgaXQgaW4gdGhlIGJvaWxl
cnBsYXRlIG1hcCwgYW5kIHJldHVybnMgYSBjbG9uZS4KKyAgICAgICAgKFdlYkNvcmU6OlY4Qmlu
ZGluZ1BlckNvbnRleHREYXRhOjpjb25zdHJ1Y3RvckZvclR5cGVTbG93Q2FzZSk6IENyZWF0ZXMg
dGhlIGZ1bmN0aW9uIGZvciB0aGUgY29uc3RydWN0b3IKKyAgICAgICAgYW5kIHN0b3JlcyBpdCBp
biB0aGUgY29uc3RydWN0b3IgbWFwLgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4QmluZGluZ1Bl
ckNvbnRleHREYXRhLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChWOEJp
bmRpbmdQZXJDb250ZXh0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpWOEJpbmRpbmdQZXJDb250
ZXh0RGF0YTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4QmluZGluZ1BlckNvbnRleHRE
YXRhOjp+VjhCaW5kaW5nUGVyQ29udGV4dERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VjhCaW5k
aW5nUGVyQ29udGV4dERhdGE6OmNyZWF0ZVdyYXBwZXJGcm9tQ2FjaGUpOiBDaGVja3MgdGhlIGNh
Y2hlIGFuZCBjbG9uZXMgdGhlIHdyYXBwZXIgaW4KKyAgICAgICAgdGhlIGNhY2hlLiBJZiBubyBi
b2lsZXIgcGxhdGUgZXhpc3RzIG9uZSBpcyBjcmVhdGVkIGFuZCBjYWNoZWQuCisgICAgICAgIChX
ZWJDb3JlOjpWOEJpbmRpbmdQZXJDb250ZXh0RGF0YTo6Y29uc3RydWN0b3JGb3JUeXBlKTogSWYg
dGhlIGNvbnN0cnVjdG9yIGFscmVhZHkgZXhpc3RzIHRoZSBjYWNoZWQKKyAgICAgICAgY29uc3Ry
dWN0b3IgZnVuY3Rpb24gaXMgcmV0dXJuZWQsIG90aGVyd2lzZSBhIG5ldyBjb25zdHJ1Y3RvciBm
dW5jdGlvbiBpcyBjcmVhdGVkIGFuZCBjYWNoZWQuCisgICAgICAgIChXZWJDb3JlOjpWOEJpbmRp
bmdQZXJDb250ZXh0RGF0YTo6VjhCaW5kaW5nUGVyQ29udGV4dERhdGEpOgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hlbGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhET01X
aW5kb3dTaGVsbDo6ZGlzcG9zZUNvbnRleHRIYW5kbGVzKTogQ2xlYXIgdGhlIHBlciBjb250ZXh0
IGRhdGEgd2hlbiBkaXNwb3NpbmcgdGhlIGhhbmRsZXMuCisgICAgICAgIChXZWJDb3JlOjpWOERP
TVdpbmRvd1NoZWxsOjppbml0Q29udGV4dElmTmVlZGVkKTogQ3JlYXRlIGFuZCBpbml0aWFsaXpl
IHRoZSBwZXIgY29udGV4dCBkYXRhLgorICAgICAgICAoV2ViQ29yZTo6VjhET01XaW5kb3dTaGVs
bDo6aW5zdGFsbERPTVdpbmRvdyk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhET01XaW5kb3dT
aGVsbC5oOgorICAgICAgICAoVjhET01XaW5kb3dTaGVsbCk6CisgICAgICAgIChXZWJDb3JlOjpW
OERPTVdpbmRvd1NoZWxsOjpwZXJDb250ZXh0RGF0YSk6CisgICAgICAgICogYmluZGluZ3Mvdjgv
VjhET01XcmFwcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV3JhcHBlcjo6Y29uc3Ry
dWN0b3JGb3JUeXBlKTogU3RhdGljIG1ldGhvZCB0byBnZXQgdGhlIGNvbnN0cnVjdG9yLiBUaGUg
cGVyIGNvbnRleHQgZGF0YQorICAgICAgICBpcyBkZXRlcm1pbmVkIGJhc2VkIG9uIHRoZSB0eXBl
IG9mIHRoZSBwYXJhbWV0ZXJzLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpWOERPTVdyYXBwZXI6OnBlckNvbnRleHREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9N
V3JhcHBlcjo6aW5zdGFudGlhdGVWOE9iamVjdCk6IFVzZSB0aGUgcGVyIGNvbnRleHQgZGF0YSB0
byB1bmlmeSB0aGUgY29kZSBwYXRocy4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOERPTVdyYXBw
ZXIuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoVjhET01XcmFwcGVyKToKKyAgICAg
ICAgKiBiaW5kaW5ncy92OC9WOElzb2xhdGVkQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpWOElzb2xhdGVkQ29udGV4dDo6VjhJc29sYXRlZENvbnRleHQpOiBDcmVhdGUgYW5kIGluaXRp
YWxpemUgdGhlIHBlciBjb250ZXh0IGRhdGEuCisgICAgICAgIChXZWJDb3JlOjpWOElzb2xhdGVk
Q29udGV4dDo6ZGVzdHJveSk6IENsZWFyIHRoZSBwZXIgY29udGV4dCBkYXRhLgorICAgICAgICAq
IGJpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRDb250ZXh0Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlY4SXNvbGF0ZWRDb250ZXh0OjpwZXJDb250ZXh0RGF0YSk6CisgICAg
ICAgIChWOElzb2xhdGVkQ29udGV4dCk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhQcm94eS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpWOFByb3h5OjpyZXRyaWV2ZVBlckNvbnRleHREYXRhKToK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4UHJveHkuaDoKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoVjhQcm94eSk6CisgICAgICAgICogYmluZGluZ3Mv
djgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oldv
cmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6ZGlzcG9zZSk6IENsZWFyIHRoZSBwZXIgY29udGV4
dCBkYXRhCisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6Omlu
aXRDb250ZXh0SWZOZWVkZWQpOiBDcmVhdGUgYW5kIGluaXRpYWxpemUgdGhlIHBlciBjb250ZXh0
IGRhdGEuCisgICAgICAgICogYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5
Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckNvbnRleHRF
eGVjdXRpb25Qcm94eTo6cGVyQ29udGV4dERhdGEpOgorICAgICAgICAoV29ya2VyQ29udGV4dEV4
ZWN1dGlvblByb3h5KToKKworMjAxMi0wNC0wNCAgRXJpayBBcnZpZHNzb24gIDxhcnZAY2hyb21p
dW0ub3JnPgorCiAgICAgICAgIFJlYmFzZWxpbmUgYmluZGluZyB0ZXN0cy4KIAogICAgICAgICBV
bnJldmlld2VkLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDI1M2I4ZWFiYjk4ZTRlNzQ4MzdlYmNjMGY0
ZmUwMzUxMTY3YTFiNjguLjYyYWM2OGMyYzY2ZTUwZmI2MzA3N2YzZWU4NjIyZjE1ZDZkOTY2OWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKQEAgLTIxMzIsNiArMjEzMiw4IEBACiAgICAgICAgICAgICAnYmlu
ZGluZ3MvdjgvVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIuaCcsCiAgICAgICAgICAgICAnYmluZGlu
Z3MvdjgvVjhCaW5kaW5nLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhCaW5kaW5n
LmgnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4QmluZGluZ1BlckNvbnRleHREYXRhLmNw
cCcsCisgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhCaW5kaW5nUGVyQ29udGV4dERhdGEuaCcs
CiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhDb2xsZWN0aW9uLmNwcCcsCiAgICAgICAgICAg
ICAnYmluZGluZ3MvdjgvVjhDb2xsZWN0aW9uLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4
L1Y4RE9NTWFwLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JWOC5wbSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
Q29kZUdlbmVyYXRvclY4LnBtCmluZGV4IDM1YzgzMDMwYWU0MzNiYjE4ZjJmZGFiNjVkYjczMWEw
OWIxNzAxYTguLmQ4ZTIxMmQ1MTU3MzcxMjdkZGY4Njk4ZDYyNDJiNzcwYjE4YzI5N2IgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBt
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBt
CkBAIC03NDMsMTEgKzc0MywxMSBAQCBFTkQKICAgICAvLyBHZXQgdGhlIHByb3h5IGNvcnJlc3Bv
bmRpbmcgdG8gdGhlIERPTVdpbmRvdyBpZiBwb3NzaWJsZSB0bwogICAgIC8vIG1ha2Ugc3VyZSB0
aGF0IHRoZSBjb25zdHJ1Y3RvciBmdW5jdGlvbiBpcyBjb25zdHJ1Y3RlZCBpbiB0aGUKICAgICAv
LyBjb250ZXh0IG9mIHRoZSBET01XaW5kb3cgYW5kIG5vdCBpbiB0aGUgY29udGV4dCBvZiB0aGUg
Y2FsbGVyLgotICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmdldENvbnN0cnVjdG9yKHR5cGUsIFY4
RE9NV2luZG93Ojp0b05hdGl2ZShpbmZvLkhvbGRlcigpKSk7CisgICAgcmV0dXJuIFY4RE9NV3Jh
cHBlcjo6Y29uc3RydWN0b3JGb3JUeXBlKHR5cGUsIFY4RE9NV2luZG93Ojp0b05hdGl2ZShpbmZv
LkhvbGRlcigpKSk7CiBFTkQKICAgICB9IGVsc2lmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJJc1dvcmtlckNvbnRleHQifSkgewogICAgICAgICBwdXNoKEBpbXBsQ29udGVudERl
Y2xzLCA8PEVORCk7Ci0gICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Z2V0Q29uc3RydWN0b3IodHlw
ZSwgVjhXb3JrZXJDb250ZXh0Ojp0b05hdGl2ZShpbmZvLkhvbGRlcigpKSk7CisgICAgcmV0dXJu
IFY4RE9NV3JhcHBlcjo6Y29uc3RydWN0b3JGb3JUeXBlKHR5cGUsIFY4V29ya2VyQ29udGV4dDo6
dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSkpOwogRU5ECiAgICAgfSBlbHNlIHsKICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnREZWNscywgIiAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7
Iik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmdQZXJD
b250ZXh0RGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmdQZXJD
b250ZXh0RGF0YS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTAxMGVmYTc4ZDU2YzYwMDBlYTAyZWY3ZmRlNTJk
YmZhZjY0Njk2ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1Y4QmluZGluZ1BlckNvbnRleHREYXRhLmNwcApAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmli
dXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJWOEJpbmRpbmdQZXJDb250ZXh0RGF0YS5oIgorCisjaW5jbHVk
ZSAiU2FmZUFsbG9jYXRpb24uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIFY4Qmlu
ZGluZ1BlckNvbnRleHREYXRhOjpkaXNwb3NlKCkKK3sKKyAgICB7CisgICAgICAgIFdyYXBwZXJC
b2lsZXJwbGF0ZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3dyYXBwZXJCb2lsZXJwbGF0ZXMuYmVnaW4o
KTsKKyAgICAgICAgZm9yICg7IGl0ICE9IG1fd3JhcHBlckJvaWxlcnBsYXRlcy5lbmQoKTsgKytp
dCkgeworICAgICAgICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlciA9IGl0
LT5zZWNvbmQ7CisgICAgICAgICAgICB3cmFwcGVyLkRpc3Bvc2UoKTsKKyAgICAgICAgfQorICAg
ICAgICBtX3dyYXBwZXJCb2lsZXJwbGF0ZXMuY2xlYXIoKTsKKyAgICB9CisKKyAgICB7CisgICAg
ICAgIENvbnN0cnVjdG9yTWFwOjppdGVyYXRvciBpdCA9IG1fY29uc3RydWN0b3JNYXAuYmVnaW4o
KTsKKyAgICAgICAgZm9yICg7IGl0ICE9IG1fY29uc3RydWN0b3JNYXAuZW5kKCk7ICsraXQpIHsK
KyAgICAgICAgICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvbj4gd3JhcHBlciA9IGl0LT5z
ZWNvbmQ7CisgICAgICAgICAgICB3cmFwcGVyLkRpc3Bvc2UoKTsKKyAgICAgICAgfQorICAgICAg
ICBtX2NvbnN0cnVjdG9yTWFwLmNsZWFyKCk7CisgICAgfQorfQorCitib29sIFY4QmluZGluZ1Bl
ckNvbnRleHREYXRhOjppbml0KCkKK3sKKyAgICBBU1NFUlQobV9vYmplY3RQcm90b3R5cGUuZ2V0
KCkuSXNFbXB0eSgpKTsKKworICAgIHY4OjpIYW5kbGU8djg6OlN0cmluZz4gb2JqZWN0U3RyaW5n
ID0gdjg6OlN0cmluZzo6TmV3KCJPYmplY3QiKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+
IHByb3RvdHlwZVN0cmluZyA9IHY4OjpTdHJpbmc6Ok5ldygicHJvdG90eXBlIik7CisgICAgaWYg
KG9iamVjdFN0cmluZy5Jc0VtcHR5KCkgfHwgcHJvdG90eXBlU3RyaW5nLklzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBvYmplY3Qg
PSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KG1fY29udGV4dC0+R2xvYmFsKCktPkdldChv
YmplY3RTdHJpbmcpKTsKKyAgICBpZiAob2JqZWN0LklzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBvYmplY3RQcm90b3R5cGUgPSBvYmpl
Y3QtPkdldChwcm90b3R5cGVTdHJpbmcpOworICAgIGlmIChvYmplY3RQcm90b3R5cGUuSXNFbXB0
eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX29iamVjdFByb3RvdHlwZS5zZXQo
b2JqZWN0UHJvdG90eXBlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordjg6OkxvY2FsPHY4OjpP
YmplY3Q+IFY4QmluZGluZ1BlckNvbnRleHREYXRhOjpjcmVhdGVXcmFwcGVyRnJvbUNhY2hlU2xv
d0Nhc2UoV3JhcHBlclR5cGVJbmZvKiB0eXBlKQoreworICAgIEFTU0VSVCghbV9vYmplY3RQcm90
b3R5cGUuZ2V0KCkuSXNFbXB0eSgpKTsKKworICAgIHY4OjpDb250ZXh0OjpTY29wZSBzY29wZSht
X2NvbnRleHQpOworICAgIHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+IGZ1bmN0aW9uID0gY29uc3Ry
dWN0b3JGb3JUeXBlKHR5cGUpOworICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBpbnN0YW5jZSA9
IFNhZmVBbGxvY2F0aW9uOjpuZXdJbnN0YW5jZShmdW5jdGlvbik7CisgICAgaWYgKCFpbnN0YW5j
ZS5Jc0VtcHR5KCkpIHsKKyAgICAgICAgbV93cmFwcGVyQm9pbGVycGxhdGVzLnNldCh0eXBlLCB2
ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6TmV3KGluc3RhbmNlKSk7CisgICAgICAgIHJldHVy
biBpbnN0YW5jZS0+Q2xvbmUoKTsKKyAgICB9CisgICAgcmV0dXJuIHY4OjpMb2NhbDx2ODo6T2Jq
ZWN0PigpOworfQorCit2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPiBWOEJpbmRpbmdQZXJDb250ZXh0
RGF0YTo6Y29uc3RydWN0b3JGb3JUeXBlU2xvd0Nhc2UoV3JhcHBlclR5cGVJbmZvKiB0eXBlKQor
eworICAgIEFTU0VSVCghbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkuSXNFbXB0eSgpKTsKKworICAg
IHY4OjpDb250ZXh0OjpTY29wZSBzY29wZShtX2NvbnRleHQpOworICAgIHY4OjpIYW5kbGU8djg6
OkZ1bmN0aW9uVGVtcGxhdGU+IGZ1bmN0aW9uVGVtcGxhdGUgPSB0eXBlLT5nZXRUZW1wbGF0ZSgp
OworICAgIC8vIEdldHRpbmcgdGhlIGZ1bmN0aW9uIG1pZ2h0IGZhaWwgaWYgd2UncmUgcnVubmlu
ZyBvdXQgb2Ygc3RhY2sgb3IgbWVtb3J5LgorICAgIHY4OjpUcnlDYXRjaCB0cnlDYXRjaDsKKyAg
ICB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPiBmdW5jdGlvbiA9IGZ1bmN0aW9uVGVtcGxhdGUtPkdl
dEZ1bmN0aW9uKCk7CisgICAgaWYgKGZ1bmN0aW9uLklzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+KCk7CisKKyAgICBmdW5jdGlvbi0+U2V0UHJvdG90eXBl
KG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKTsKKworICAgIG1fY29uc3RydWN0b3JNYXAuc2V0KHR5
cGUsIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvbj46Ok5ldyhmdW5jdGlvbikpOworCisgICAg
cmV0dXJuIGZ1bmN0aW9uOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmdQZXJDb250ZXh0RGF0YS5oIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nUGVyQ29udGV4dERhdGEuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4xYjc4NjBkMGRmZDNmNmQ3NGU2Yjc4YzIzMDkyMzVmNWI4MjAxNWU1Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nUGVyQ29udGV4
dERhdGEuaApAQCAtMCwwICsxLDk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBWOEJpbmRpbmdQZXJDb250ZXh0RGF0YV9o
CisjZGVmaW5lIFY4QmluZGluZ1BlckNvbnRleHREYXRhX2gKKworI2luY2x1ZGUgIk93bkhhbmRs
ZS5oIgorI2luY2x1ZGUgIldyYXBwZXJUeXBlSW5mby5oIgorI2luY2x1ZGUgPHY4Lmg+CisjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFY4QmluZGluZ1BlckNvbnRleHREYXRhIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxWOEJpbmRpbmdQZXJDb250ZXh0RGF0YT4gY3JlYXRl
KHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQpCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRQdHIobmV3IFY4QmluZGluZ1BlckNvbnRleHREYXRhKGNvbnRleHQpKTsKKyAgICB9CisK
KyAgICB+VjhCaW5kaW5nUGVyQ29udGV4dERhdGEoKQorICAgIHsKKyAgICAgICAgZGlzcG9zZSgp
OworICAgIH0KKworICAgIGJvb2wgaW5pdCgpOworCisgICAgLy8gVG8gY3JlYXRlIEpTIFdyYXBw
ZXIgb2JqZWN0cywgd2UgY3JlYXRlIGEgY2FjaGUgb2YgYSAnYm9pbGVyIHBsYXRlJworICAgIC8v
IG9iamVjdCwgYW5kIHRoZW4gc2ltcGx5IENsb25lIHRoYXQgb2JqZWN0IGVhY2ggdGltZSB3ZSBu
ZWVkIGEgbmV3IG9uZS4KKyAgICAvLyBUaGlzIGlzIGZhc3RlciB0aGFuIGdvaW5nIHRocm91Z2gg
dGhlIGZ1bGwgb2JqZWN0IGNyZWF0aW9uIHByb2Nlc3MuCisgICAgdjg6OkxvY2FsPHY4OjpPYmpl
Y3Q+IGNyZWF0ZVdyYXBwZXJGcm9tQ2FjaGUoV3JhcHBlclR5cGVJbmZvKiB0eXBlKQorICAgIHsK
KyAgICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gYm9pbGVycGxhdGUgPSBtX3dyYXBw
ZXJCb2lsZXJwbGF0ZXMuZ2V0KHR5cGUpOworICAgICAgICByZXR1cm4gIWJvaWxlcnBsYXRlLklz
RW1wdHkoKSA/IGJvaWxlcnBsYXRlLT5DbG9uZSgpIDogY3JlYXRlV3JhcHBlckZyb21DYWNoZVNs
b3dDYXNlKHR5cGUpOworICAgIH0KKworICAgIHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+IGNvbnN0
cnVjdG9yRm9yVHlwZShXcmFwcGVyVHlwZUluZm8qIHR5cGUpCisgICAgeworICAgICAgICB2ODo6
UGVyc2lzdGVudDx2ODo6RnVuY3Rpb24+IGZ1bmN0aW9uID0gbV9jb25zdHJ1Y3Rvck1hcC5nZXQo
dHlwZSk7CisgICAgICAgIGlmICghZnVuY3Rpb24uSXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0
dXJuIHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+OjpOZXcoZnVuY3Rpb24pOworICAgICAgICByZXR1
cm4gY29uc3RydWN0b3JGb3JUeXBlU2xvd0Nhc2UodHlwZSk7CisgICAgfQorCitwcml2YXRlOgor
ICAgIGV4cGxpY2l0IFY4QmluZGluZ1BlckNvbnRleHREYXRhKHY4OjpIYW5kbGU8djg6OkNvbnRl
eHQ+IGNvbnRleHQpCisgICAgICA6IG1fY29udGV4dChjb250ZXh0KQorICAgIHsgfQorCisgICAg
dm9pZCBkaXNwb3NlKCk7CisKKyAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gY3JlYXRlV3JhcHBl
ckZyb21DYWNoZVNsb3dDYXNlKFdyYXBwZXJUeXBlSW5mbyopOworICAgIHY4OjpMb2NhbDx2ODo6
RnVuY3Rpb24+IGNvbnN0cnVjdG9yRm9yVHlwZVNsb3dDYXNlKFdyYXBwZXJUeXBlSW5mbyopOwor
CisgICAgLy8gRm9yIGVhY2ggcG9zc2libGUgdHlwZSBvZiB3cmFwcGVyLCB3ZSBrZWVwIGEgYm9p
bGVycGxhdGUgb2JqZWN0LgorICAgIC8vIFRoZSBib2lsZXJwbGF0ZSBpcyB1c2VkIHRvIGNyZWF0
ZSBhZGRpdGlvbmFsIHdyYXBwZXJzIG9mIHRoZSBzYW1lIHR5cGUuCisgICAgdHlwZWRlZiBXVEY6
Okhhc2hNYXA8V3JhcHBlclR5cGVJbmZvKiwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gPiBX
cmFwcGVyQm9pbGVycGxhdGVNYXA7CisgICAgV3JhcHBlckJvaWxlcnBsYXRlTWFwIG1fd3JhcHBl
ckJvaWxlcnBsYXRlczsKKworICAgIHR5cGVkZWYgV1RGOjpIYXNoTWFwPFdyYXBwZXJUeXBlSW5m
byosIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvbj4gPiBDb25zdHJ1Y3Rvck1hcDsKKyAgICBD
b25zdHJ1Y3Rvck1hcCBtX2NvbnN0cnVjdG9yTWFwOworCisgICAgdjg6OkhhbmRsZTx2ODo6Q29u
dGV4dD4gbV9jb250ZXh0OworICAgIE93bkhhbmRsZTx2ODo6VmFsdWU+IG1fb2JqZWN0UHJvdG90
eXBlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVjhCaW5kaW5n
UGVyQ29udGV4dERhdGFfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
VjhET01XaW5kb3dTaGVsbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdp
bmRvd1NoZWxsLmNwcAppbmRleCA5YjU2MTFiZmI5NDQzZjMxNDM4ZmM2MmViYTg5YWEyNmRjM2Nh
Mjk0Li4zZTE2OTA0NTgzZTFjYjFhMTU4YmYxNDdmMzRiNTdiN2EzMzhjZjMyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxsLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxsLmNwcApAQCAtNDcsNiAr
NDcsNyBAQAogI2luY2x1ZGUgIlN0b3JhZ2VOYW1lc3BhY2UuaCIKICNpbmNsdWRlICJTdHlsZVBy
b3BlcnR5U2V0LmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhCaW5kaW5n
UGVyQ29udGV4dERhdGEuaCIKICNpbmNsdWRlICJWOEJpbmRpbmdTdGF0ZS5oIgogI2luY2x1ZGUg
IlY4Q29sbGVjdGlvbi5oIgogI2luY2x1ZGUgIlY4RE9NTWFwLmgiCkBAIC0xODUsMTMgKzE4Niw3
IEBAIHZvaWQgVjhET01XaW5kb3dTaGVsbDo6ZGlzcG9zZUNvbnRleHRIYW5kbGVzKCkKICAgICAg
ICAgVjhHQ0ZvckNvbnRleHREaXNwb3NlOjppbnN0YW5jZSgpLm5vdGlmeUNvbnRleHREaXNwb3Nl
ZChpc01haW5GcmFtZSk7CiAgICAgfQogCi0gICAgV3JhcHBlckJvaWxlcnBsYXRlTWFwOjppdGVy
YXRvciBpdCA9IG1fd3JhcHBlckJvaWxlcnBsYXRlcy5iZWdpbigpOwotICAgIGZvciAoOyBpdCAh
PSBtX3dyYXBwZXJCb2lsZXJwbGF0ZXMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgdjg6OlBlcnNp
c3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlciA9IGl0LT5zZWNvbmQ7Ci0gICAgICAgIHdyYXBwZXIu
RGlzcG9zZSgpOwotICAgICAgICB3cmFwcGVyLkNsZWFyKCk7Ci0gICAgfQotICAgIG1fd3JhcHBl
ckJvaWxlcnBsYXRlcy5jbGVhcigpOworICAgIG1fcGVyQ29udGV4dERhdGEuY2xlYXIoKTsKIH0K
IAogdm9pZCBWOERPTVdpbmRvd1NoZWxsOjpkZXN0cm95R2xvYmFsKCkKQEAgLTMyNyw3ICszMjIs
OCBAQCBib29sIFY4RE9NV2luZG93U2hlbGw6OmluaXRDb250ZXh0SWZOZWVkZWQoKQogI2VuZGlm
CiAgICAgfQogCi0gICAgaWYgKCFpbnN0YWxsSGlkZGVuT2JqZWN0UHJvdG90eXBlKHY4Q29udGV4
dCkpIHsKKyAgICBtX3BlckNvbnRleHREYXRhID0gVjhCaW5kaW5nUGVyQ29udGV4dERhdGE6OmNy
ZWF0ZShtX2NvbnRleHQpOworICAgIGlmICghbV9wZXJDb250ZXh0RGF0YS0+aW5pdCgpKSB7CiAg
ICAgICAgIGRpc3Bvc2VDb250ZXh0SGFuZGxlcygpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQpAQCAtNDA1LDcgKzQwMSw3IEBAIHZvaWQgVjhET01XaW5kb3dTaGVsbDo6c2V0Q29udGV4
dCh2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0KQogYm9vbCBWOERPTVdpbmRvd1NoZWxs
OjppbnN0YWxsRE9NV2luZG93KHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQsIERPTVdp
bmRvdyogd2luZG93KQogewogICAgIC8vIENyZWF0ZSBhIG5ldyBKUyB3aW5kb3cgb2JqZWN0IGFu
ZCB1c2UgaXQgYXMgdGhlIHByb3RvdHlwZSBmb3IgdGhlICBzaGFkb3cgZ2xvYmFsIG9iamVjdC4K
LSAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gd2luZG93Q29uc3RydWN0b3IgPSBWOERPTVdy
YXBwZXI6OmdldENvbnN0cnVjdG9yKCZWOERPTVdpbmRvdzo6aW5mbywgZ2V0SGlkZGVuT2JqZWN0
UHJvdG90eXBlKGNvbnRleHQpKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gd2luZG93
Q29uc3RydWN0b3IgPSBWOERPTVdyYXBwZXI6OmNvbnN0cnVjdG9yRm9yVHlwZSgmVjhET01XaW5k
b3c6OmluZm8sIHdpbmRvdyk7CiAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IGpzV2luZG93ID0g
U2FmZUFsbG9jYXRpb246Om5ld0luc3RhbmNlKHdpbmRvd0NvbnN0cnVjdG9yKTsKICAgICAvLyBC
YWlsIG91dCBpZiBhbGxvY2F0aW9uIGZhaWxlZC4KICAgICBpZiAoanNXaW5kb3cuSXNFbXB0eSgp
KQpAQCAtNTk5LDUwICs1OTUsNiBAQCB2b2lkIFY4RE9NV2luZG93U2hlbGw6OnVwZGF0ZVNlY3Vy
aXR5T3JpZ2luKCkKICAgICBzZXRTZWN1cml0eVRva2VuKCk7CiB9CiAKLXY4OjpIYW5kbGU8djg6
OlZhbHVlPiBWOERPTVdpbmRvd1NoZWxsOjpnZXRIaWRkZW5PYmplY3RQcm90b3R5cGUodjg6Okhh
bmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCkKLXsKLSAgICByZXR1cm4gY29udGV4dC0+R2xvYmFs
KCktPkdldEhpZGRlblZhbHVlKFY4SGlkZGVuUHJvcGVydHlOYW1lOjpvYmplY3RQcm90b3R5cGUo
KSk7Ci19Ci0KLWJvb2wgVjhET01XaW5kb3dTaGVsbDo6aW5zdGFsbEhpZGRlbk9iamVjdFByb3Rv
dHlwZSh2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0KQotewotICAgIHY4OjpIYW5kbGU8
djg6OlN0cmluZz4gb2JqZWN0U3RyaW5nID0gdjg6OlN0cmluZzo6TmV3KCJPYmplY3QiKTsKLSAg
ICB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IHByb3RvdHlwZVN0cmluZyA9IHY4OjpTdHJpbmc6Ok5l
dygicHJvdG90eXBlIik7Ci0gICAgdjg6OkhhbmRsZTx2ODo6U3RyaW5nPiBoaWRkZW5PYmplY3RQ
cm90b3R5cGVTdHJpbmcgPSBWOEhpZGRlblByb3BlcnR5TmFtZTo6b2JqZWN0UHJvdG90eXBlKCk7
Ci0gICAgLy8gQmFpbCBvdXQgaWYgYWxsb2NhdGlvbiBmYWlsZWQuCi0gICAgaWYgKG9iamVjdFN0
cmluZy5Jc0VtcHR5KCkgfHwgcHJvdG90eXBlU3RyaW5nLklzRW1wdHkoKSB8fCBoaWRkZW5PYmpl
Y3RQcm90b3R5cGVTdHJpbmcuSXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjdCA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD46
OkNhc3QoY29udGV4dC0+R2xvYmFsKCktPkdldChvYmplY3RTdHJpbmcpKTsKLSAgICAvLyBCYWls
IG91dCBpZiBmZXRjaGluZyBmYWlsZWQuCi0gICAgaWYgKG9iamVjdC5Jc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gb2JqZWN0UHJvdG90
eXBlID0gb2JqZWN0LT5HZXQocHJvdG90eXBlU3RyaW5nKTsKLSAgICAvLyBCYWlsIG91dCBpZiBm
ZXRjaGluZyBmYWlsZWQuCi0gICAgaWYgKG9iamVjdFByb3RvdHlwZS5Jc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIGNvbnRleHQtPkdsb2JhbCgpLT5TZXRIaWRkZW5WYWx1
ZShoaWRkZW5PYmplY3RQcm90b3R5cGVTdHJpbmcsIG9iamVjdFByb3RvdHlwZSk7Ci0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotdjg6OkxvY2FsPHY4OjpPYmplY3Q+IFY4RE9NV2luZG93U2hlbGw6
OmNyZWF0ZVdyYXBwZXJGcm9tQ2FjaGVTbG93Q2FzZShXcmFwcGVyVHlwZUluZm8qIHR5cGUpCi17
Ci0gICAgLy8gTm90IGluIGNhY2hlLgotICAgIGlmICghaW5pdENvbnRleHRJZk5lZWRlZCgpKQot
ICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKLQotICAgIHY4OjpDb250
ZXh0OjpTY29wZSBzY29wZShtX2NvbnRleHQpOwotICAgIHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+
IGZ1bmN0aW9uID0gVjhET01XcmFwcGVyOjpnZXRDb25zdHJ1Y3Rvcih0eXBlLCBnZXRIaWRkZW5P
YmplY3RQcm90b3R5cGUobV9jb250ZXh0KSk7Ci0gICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IGlu
c3RhbmNlID0gU2FmZUFsbG9jYXRpb246Om5ld0luc3RhbmNlKGZ1bmN0aW9uKTsKLSAgICBpZiAo
IWluc3RhbmNlLklzRW1wdHkoKSkgewotICAgICAgICBtX3dyYXBwZXJCb2lsZXJwbGF0ZXMuc2V0
KHR5cGUsIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpOZXcoaW5zdGFuY2UpKTsKLSAgICAg
ICAgcmV0dXJuIGluc3RhbmNlLT5DbG9uZSgpOwotICAgIH0KLSAgICByZXR1cm4gbm90SGFuZGxl
ZEJ5SW50ZXJjZXB0b3IoKTsKLX0KLQogdm9pZCBWOERPTVdpbmRvd1NoZWxsOjpzZXRMb2NhdGlv
bihET01XaW5kb3cqIHdpbmRvdywgY29uc3QgU3RyaW5nJiBsb2NhdGlvblN0cmluZykKIHsKICAg
ICBTdGF0ZTxWOEJpbmRpbmc+KiBzdGF0ZSA9IFY4QmluZGluZ1N0YXRlOjpPbmx5KCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxsLmggYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxsLmgKaW5kZXggNTk3NzQ5
OWJkMjA4MDg4NTZiYTk5ZjMyMDFlNzhmMzJlMWU1YzRhZi4uNzNjYjUzOTNjN2Q1YzU5MTRkMjhi
ODY3ZDBlNmNkYTY3N2ZmMTc5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvVjhET01XaW5kb3dTaGVsbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
RE9NV2luZG93U2hlbGwuaApAQCAtMzEsNiArMzEsNyBAQAogI2lmbmRlZiBWOERPTVdpbmRvd1No
ZWxsX2gKICNkZWZpbmUgVjhET01XaW5kb3dTaGVsbF9oCiAKKyNpbmNsdWRlICJWOEJpbmRpbmdQ
ZXJDb250ZXh0RGF0YS5oIgogI2luY2x1ZGUgIldyYXBwZXJUeXBlSW5mby5oIgogI2luY2x1ZGUg
PHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTc3LDIxICs3OCwx
MCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGRlc3Ryb3lHbG9iYWwoKTsKIAotICAgIHN0YXRpYyB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZ2V0SGlkZGVuT2JqZWN0UHJvdG90eXBlKHY4OjpIYW5kbGU8
djg6OkNvbnRleHQ+KTsKLSAgICAvLyBXQVJOSU5HOiBDYWxsIHxpbnN0YWxsSGlkZGVuT2JqZWN0
UHJvdG90eXBlfCBvbmx5IG9uIGZyZXNoIGNvbnRleHRzIQotICAgIHN0YXRpYyBib29sIGluc3Rh
bGxIaWRkZW5PYmplY3RQcm90b3R5cGUodjg6OkhhbmRsZTx2ODo6Q29udGV4dD4pOwotCi0gICAg
Ly8gVG8gY3JlYXRlIEpTIFdyYXBwZXIgb2JqZWN0cywgd2UgY3JlYXRlIGEgY2FjaGUgb2YgYSAn
Ym9pbGVyIHBsYXRlJwotICAgIC8vIG9iamVjdCwgYW5kIHRoZW4gc2ltcGx5IENsb25lIHRoYXQg
b2JqZWN0IGVhY2ggdGltZSB3ZSBuZWVkIGEgbmV3IG9uZS4KLSAgICAvLyBUaGlzIGlzIGZhc3Rl
ciB0aGFuIGdvaW5nIHRocm91Z2ggdGhlIGZ1bGwgb2JqZWN0IGNyZWF0aW9uIHByb2Nlc3MuCi0g
ICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IGNyZWF0ZVdyYXBwZXJGcm9tQ2FjaGUoV3JhcHBlclR5
cGVJbmZvKiB0eXBlKQotICAgIHsKLSAgICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4g
Ym9pbGVycGxhdGUgPSBtX3dyYXBwZXJCb2lsZXJwbGF0ZXMuZ2V0KHR5cGUpOwotICAgICAgICBy
ZXR1cm4gYm9pbGVycGxhdGUuSXNFbXB0eSgpID8gY3JlYXRlV3JhcHBlckZyb21DYWNoZVNsb3dD
YXNlKHR5cGUpIDogYm9pbGVycGxhdGUtPkNsb25lKCk7Ci0gICAgfQotCiAgICAgc3RhdGljIHZv
aWQgc2V0TG9jYXRpb24oRE9NV2luZG93KiwgY29uc3QgU3RyaW5nJiByZWxhdGl2ZVVSTCk7CiAK
KyAgICBWOEJpbmRpbmdQZXJDb250ZXh0RGF0YSogcGVyQ29udGV4dERhdGEoKSB7IHJldHVybiBt
X3BlckNvbnRleHREYXRhLmdldCgpOyB9CisKIHByaXZhdGU6CiAgICAgVjhET01XaW5kb3dTaGVs
bChGcmFtZSopOwogCkBAIC0xMDcsMTQgKzk3LDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIHVwZGF0
ZURvY3VtZW50V3JhcHBlckNhY2hlKCk7CiAgICAgdm9pZCBjbGVhckRvY3VtZW50V3JhcHBlckNh
Y2hlKCk7CiAKLSAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gY3JlYXRlV3JhcHBlckZyb21DYWNo
ZVNsb3dDYXNlKFdyYXBwZXJUeXBlSW5mbyopOwotCiAgICAgRnJhbWUqIG1fZnJhbWU7CiAKLSAg
ICAvLyBGb3IgZWFjaCBwb3NzaWJsZSB0eXBlIG9mIHdyYXBwZXIsIHdlIGtlZXAgYSBib2lsZXJw
bGF0ZSBvYmplY3QuCi0gICAgLy8gVGhlIGJvaWxlcnBsYXRlIGlzIHVzZWQgdG8gY3JlYXRlIGFk
ZGl0aW9uYWwgd3JhcHBlcnMgb2YgdGhlIHNhbWUgdHlwZS4KLSAgICB0eXBlZGVmIFdURjo6SGFz
aE1hcDxXcmFwcGVyVHlwZUluZm8qLCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiA+IFdyYXBw
ZXJCb2lsZXJwbGF0ZU1hcDsKLSAgICBXcmFwcGVyQm9pbGVycGxhdGVNYXAgbV93cmFwcGVyQm9p
bGVycGxhdGVzOworICAgIE93blB0cjxWOEJpbmRpbmdQZXJDb250ZXh0RGF0YT4gbV9wZXJDb250
ZXh0RGF0YTsKIAogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpDb250ZXh0PiBtX2NvbnRleHQ7CiAg
ICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gbV9nbG9iYWw7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcAppbmRleCA4Y2U2NGRiZDdmN2VhM2NmMDBjYmY0
YjhkNGYwYmVkMjVkNTEyNmJhLi5hMDNjYmI4MTVjYzFhZjQyMjFjNzQ5NmIyOTkwMjlkNzI3YjI4
ZTdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHAKQEAg
LTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlICJTdHlsZVByb3BlcnR5U2V0LmgiCiAjaW5jbHVkZSAi
VjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNs
dWRlICJWOEJpbmRpbmdQZXJDb250ZXh0RGF0YS5oIgogI2luY2x1ZGUgIlY4Q29sbGVjdGlvbi5o
IgogI2luY2x1ZGUgIlY4RXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIlY4RXZlbnRMaXN0ZW5l
ckxpc3QuaCIKQEAgLTk0LDY4ICs5NSwzOCBAQCB2b2lkIFY4RE9NV3JhcHBlcjo6c2V0SlNXcmFw
cGVyRm9yRE9NTm9kZShOb2RlKiBub2RlLCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PgogICAg
ICAgICBnZXRET01Ob2RlTWFwKCkuc2V0KG5vZGUsIHdyYXBwZXIpOwogfQogCi12ODo6TG9jYWw8
djg6OkZ1bmN0aW9uPiBWOERPTVdyYXBwZXI6OmdldENvbnN0cnVjdG9yKFdyYXBwZXJUeXBlSW5m
byogdHlwZSwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG9iamVjdFByb3RvdHlwZSkKK3Y4OjpMb2Nh
bDx2ODo6RnVuY3Rpb24+IFY4RE9NV3JhcHBlcjo6Y29uc3RydWN0b3JGb3JUeXBlKFdyYXBwZXJU
eXBlSW5mbyogdHlwZSwgRE9NV2luZG93KiB3aW5kb3cpCiB7Ci0gICAgLy8gQSBET00gY29uc3Ry
dWN0b3IgaXMgYSBmdW5jdGlvbiBpbnN0YW5jZSBjcmVhdGVkIGZyb20gYSBET00gY29uc3RydWN0
b3IKLSAgICAvLyB0ZW1wbGF0ZS4gVGhlcmUgaXMgb25lIGluc3RhbmNlIHBlciBjb250ZXh0LiBB
IERPTSBjb25zdHJ1Y3RvciBpcwotICAgIC8vIGRpZmZlcmVudCBmcm9tIGEgbm9ybWFsIGZ1bmN0
aW9uIGluIHR3byB3YXlzOgotICAgIC8vICAgMSkgaXQgY2Fubm90IGJlIGNhbGxlZCBhcyBjb25z
dHJ1Y3RvciAoYWthLCB1c2VkIHRvIGNyZWF0ZSBhIERPTSBvYmplY3QpCi0gICAgLy8gICAyKSBp
dHMgX19wcm90b19fIHBvaW50cyB0byBPYmplY3QucHJvdG90eXBlIHJhdGhlciB0aGFuCi0gICAg
Ly8gICAgICBGdW5jdGlvbi5wcm90b3R5cGUuCi0gICAgLy8gVGhlIHJlYXNvbiBmb3IgMikgaXMg
dGhhdCwgaW4gU2FmYXJpLCBhIERPTSBjb25zdHJ1Y3RvciBpcyBhIG5vcm1hbCBKUwotICAgIC8v
IG9iamVjdCwgYnV0IG5vdCBhIGZ1bmN0aW9uLiBIb3RtYWlsIHJlbGllcyBvbiB0aGUgZmFjdCB0
aGF0LCBpbiBTYWZhcmksCi0gICAgLy8gSFRNTEVsZW1lbnQuX19wcm90b19fID09IE9iamVjdC5w
cm90b3R5cGUuCi0gICAgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gZnVuY3Rpb25U
ZW1wbGF0ZSA9IHR5cGUtPmdldFRlbXBsYXRlKCk7Ci0gICAgLy8gR2V0dGluZyB0aGUgZnVuY3Rp
b24gbWlnaHQgZmFpbCBpZiB3ZSdyZSBydW5uaW5nIG91dCBvZgotICAgIC8vIHN0YWNrIG9yIG1l
bW9yeS4KLSAgICB2ODo6VHJ5Q2F0Y2ggdHJ5Q2F0Y2g7Ci0gICAgdjg6OkxvY2FsPHY4OjpGdW5j
dGlvbj4gdmFsdWUgPSBmdW5jdGlvblRlbXBsYXRlLT5HZXRGdW5jdGlvbigpOwotICAgIGlmICh2
YWx1ZS5Jc0VtcHR5KCkpCisgICAgRnJhbWUqIGZyYW1lID0gd2luZG93LT5mcmFtZSgpOworICAg
IGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPigpOwot
ICAgIC8vIEhvdG1haWwgZml4LCBzZWUgY29tbWVudHMgYWJvdmUuCi0gICAgaWYgKCFvYmplY3RQ
cm90b3R5cGUuSXNFbXB0eSgpKQotICAgICAgICB2YWx1ZS0+U2V0UHJvdG90eXBlKG9iamVjdFBy
b3RvdHlwZSk7Ci0gICAgcmV0dXJuIHZhbHVlOworICAgIHJldHVybiBWOFByb3h5OjpyZXRyaWV2
ZVBlckNvbnRleHREYXRhKGZyYW1lKS0+Y29uc3RydWN0b3JGb3JUeXBlKHR5cGUpOwogfQogCi12
ODo6TG9jYWw8djg6OkZ1bmN0aW9uPiBWOERPTVdyYXBwZXI6OmdldENvbnN0cnVjdG9yRm9yQ29u
dGV4dChXcmFwcGVyVHlwZUluZm8qIHR5cGUsIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRl
eHQpCisjaWYgRU5BQkxFKFdPUktFUlMpCit2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPiBWOERPTVdy
YXBwZXI6OmNvbnN0cnVjdG9yRm9yVHlwZShXcmFwcGVyVHlwZUluZm8qIHR5cGUsIFdvcmtlckNv
bnRleHQqKQogewotICAgIC8vIEVudGVyIHRoZSBzY29wZSBmb3IgdGhpcyBjb250ZXh0IHRvIGdl
dCB0aGUgY29ycmVjdCBjb25zdHJ1Y3Rvci4KLSAgICB2ODo6Q29udGV4dDo6U2NvcGUgc2NvcGUo
Y29udGV4dCk7Ci0KLSAgICByZXR1cm4gZ2V0Q29uc3RydWN0b3IodHlwZSwgVjhET01XaW5kb3dT
aGVsbDo6Z2V0SGlkZGVuT2JqZWN0UHJvdG90eXBlKGNvbnRleHQpKTsKKyAgICBXb3JrZXJTY3Jp
cHRDb250cm9sbGVyKiBjb250cm9sbGVyID0gV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6Y29udHJv
bGxlckZvckNvbnRleHQoKTsKKyAgICBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkqIHByb3h5
ID0gY29udHJvbGxlciA/IGNvbnRyb2xsZXItPnByb3h5KCkgOiAwOworICAgIHJldHVybiBwcm94
eSA/IHByb3h5LT5wZXJDb250ZXh0RGF0YSgpLT5jb25zdHJ1Y3RvckZvclR5cGUodHlwZSkgOiB2
ODo6TG9jYWw8djg6OkZ1bmN0aW9uPigpOwogfQorI2VuZGlmCiAKLXY4OjpMb2NhbDx2ODo6RnVu
Y3Rpb24+IFY4RE9NV3JhcHBlcjo6Z2V0Q29uc3RydWN0b3IoV3JhcHBlclR5cGVJbmZvKiB0eXBl
LCBET01XaW5kb3cqIHdpbmRvdykKK1Y4QmluZGluZ1BlckNvbnRleHREYXRhKiBWOERPTVdyYXBw
ZXI6OnBlckNvbnRleHREYXRhKFY4UHJveHkqIHByb3h5KQogewotICAgIEZyYW1lKiBmcmFtZSA9
IHdpbmRvdy0+ZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gdjg6Okxv
Y2FsPHY4OjpGdW5jdGlvbj4oKTsKLQotICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRl
eHQgPSBWOFByb3h5Ojpjb250ZXh0KGZyYW1lKTsKLSAgICBpZiAoY29udGV4dC5Jc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybiB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPigpOwotCi0gICAgcmV0dXJu
IGdldENvbnN0cnVjdG9yRm9yQ29udGV4dCh0eXBlLCBjb250ZXh0KTsKKyAgICBWOERPTVdpbmRv
d1NoZWxsKiBzaGVsbCA9IHByb3h5LT53aW5kb3dTaGVsbCgpOworICAgIHJldHVybiBzaGVsbCA/
IHNoZWxsLT5wZXJDb250ZXh0RGF0YSgpIDogMDsKIH0KIAogI2lmIEVOQUJMRShXT1JLRVJTKQot
djg6OkxvY2FsPHY4OjpGdW5jdGlvbj4gVjhET01XcmFwcGVyOjpnZXRDb25zdHJ1Y3RvcihXcmFw
cGVyVHlwZUluZm8qIHR5cGUsIFdvcmtlckNvbnRleHQqKQorVjhCaW5kaW5nUGVyQ29udGV4dERh
dGEqIFY4RE9NV3JhcHBlcjo6cGVyQ29udGV4dERhdGEoV29ya2VyQ29udGV4dCopCiB7CiAgICAg
V29ya2VyU2NyaXB0Q29udHJvbGxlciogY29udHJvbGxlciA9IFdvcmtlclNjcmlwdENvbnRyb2xs
ZXI6OmNvbnRyb2xsZXJGb3JDb250ZXh0KCk7CiAgICAgV29ya2VyQ29udGV4dEV4ZWN1dGlvblBy
b3h5KiBwcm94eSA9IGNvbnRyb2xsZXIgPyBjb250cm9sbGVyLT5wcm94eSgpIDogMDsKLSAgICBp
ZiAoIXByb3h5KQotICAgICAgICByZXR1cm4gdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj4oKTsKLQot
ICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQgPSBwcm94eS0+Y29udGV4dCgpOwot
ICAgIGlmIChjb250ZXh0LklzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHY4OjpMb2NhbDx2ODo6
RnVuY3Rpb24+KCk7Ci0KLSAgICByZXR1cm4gZ2V0Q29uc3RydWN0b3JGb3JDb250ZXh0KHR5cGUs
IGNvbnRleHQpOworICAgIHJldHVybiBwcm94eSA/IHByb3h5LT5wZXJDb250ZXh0RGF0YSgpIDog
MDsKIH0KICNlbmRpZgogCi0KIHZvaWQgVjhET01XcmFwcGVyOjpzZXROYW1lZEhpZGRlblJlZmVy
ZW5jZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHBhcmVudCwgY29uc3QgY2hhciogbmFtZSwgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IGNoaWxkKQogewogICAgIHBhcmVudC0+U2V0SGlkZGVuVmFsdWUo
VjhIaWRkZW5Qcm9wZXJ0eU5hbWU6OmhpZGRlblJlZmVyZW5jZU5hbWUobmFtZSksIGNoaWxkKTsK
QEAgLTIwMiwxMiArMTczLDEwIEBAIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBWOERPTVdyYXBwZXI6
Omluc3RhbnRpYXRlVjhPYmplY3QoVjhQcm94eSogcHJveHksIFdyYXBwZXJUCiAjaWYgRU5BQkxF
KFdPUktFUlMpCiAgICAgV29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4dCA9IDA7CiAjZW5kaWYK
LSAgICBpZiAoVjhJc29sYXRlZENvbnRleHQ6OmdldEVudGVyZWQoKSkgewotICAgICAgICAvLyBU
aGlzIGVmZmVjdGl2ZWx5IGRpc2FibGVzIHRoZSB3cmFwcGVyIGNhY2hlIGZvciBpc29sYXRlZCB3
b3JsZHMuCi0gICAgICAgIHByb3h5ID0gMDsKLSAgICAgICAgLy8gRklYTUU6IERvIHdlIG5lZWQg
YSB3cmFwcGVyIGNhY2hlIGZvciB0aGUgaXNvbGF0ZWQgd29ybGQ/ICBXZSBzaG91bGQKLSAgICAg
ICAgLy8gICAgICAgIHNlZSBpZiB0aGUgcGVyZm9ybWFuY2UgZ2FpbnMgYXJlIHdvcnRoIHdoaWxl
LgotICAgICAgICAvLyBXZSdsbCBnZXQgb25lIG9uY2Ugd2UgZ2l2ZSB0aGUgaXNvbGF0ZWQgY29u
dGV4dCBhIHByb3BlciB3aW5kb3cgc2hlbGwuCisgICAgVjhCaW5kaW5nUGVyQ29udGV4dERhdGEq
IGNvbnRleHREYXRhID0gMDsKKyAgICBWOElzb2xhdGVkQ29udGV4dCogaXNvbGF0ZWRDb250ZXh0
OworICAgIGlmIChVTkxJS0VMWSghIShpc29sYXRlZENvbnRleHQgPSBWOElzb2xhdGVkQ29udGV4
dDo6Z2V0RW50ZXJlZCgpKSkpIHsKKyAgICAgICAgY29udGV4dERhdGEgPSBpc29sYXRlZENvbnRl
eHQtPnBlckNvbnRleHREYXRhKCk7CiAgICAgfSBlbHNlIGlmICghcHJveHkpIHsKICAgICAgICAg
djg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCA9IHY4OjpDb250ZXh0OjpHZXRDdXJyZW50
KCk7CiAgICAgICAgIGlmICghY29udGV4dC5Jc0VtcHR5KCkpIHsKQEAgLTIyNSwxOSArMTk0LDIy
IEBAIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBWOERPTVdyYXBwZXI6Omluc3RhbnRpYXRlVjhPYmpl
Y3QoVjhQcm94eSogcHJveHksIFdyYXBwZXJUCiAgICAgfQogCiAgICAgdjg6OkxvY2FsPHY4OjpP
YmplY3Q+IGluc3RhbmNlOwotICAgIGlmIChwcm94eSkKLSAgICAgICAgLy8gRklYTUU6IEZpeCB0
aGlzIHRvIHdvcmsgcHJvcGVybHkgd2l0aCBpc29sYXRlZCB3b3JsZHMgKHNlZSBhYm92ZSkuCi0g
ICAgICAgIGluc3RhbmNlID0gcHJveHktPndpbmRvd1NoZWxsKCktPmNyZWF0ZVdyYXBwZXJGcm9t
Q2FjaGUodHlwZSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+
IGZ1bmN0aW9uOworICAgIGlmICghY29udGV4dERhdGEpIHsKKyAgICAgICAgaWYgKHByb3h5KQor
ICAgICAgICAgICAgY29udGV4dERhdGEgPSBwZXJDb250ZXh0RGF0YShwcm94eSk7CiAjaWYgRU5B
QkxFKFdPUktFUlMpCi0gICAgICAgIGlmICh3b3JrZXJDb250ZXh0KQotICAgICAgICAgICAgZnVu
Y3Rpb24gPSBnZXRDb25zdHJ1Y3Rvcih0eXBlLCB3b3JrZXJDb250ZXh0KTsKLSAgICAgICAgZWxz
ZQorICAgICAgICBlbHNlIGlmICh3b3JrZXJDb250ZXh0KQorICAgICAgICAgICAgY29udGV4dERh
dGEgPSBwZXJDb250ZXh0RGF0YSh3b3JrZXJDb250ZXh0KTsKICNlbmRpZgotICAgICAgICAgICAg
ZnVuY3Rpb24gPSB0eXBlLT5nZXRUZW1wbGF0ZSgpLT5HZXRGdW5jdGlvbigpOworICAgIH0KKwor
ICAgIGlmIChjb250ZXh0RGF0YSkKKyAgICAgICAgaW5zdGFuY2UgPSBjb250ZXh0RGF0YS0+Y3Jl
YXRlV3JhcHBlckZyb21DYWNoZSh0eXBlKTsKKyAgICBlbHNlIHsKKyAgICAgICAgdjg6OkxvY2Fs
PHY4OjpGdW5jdGlvbj4gZnVuY3Rpb24gPSB0eXBlLT5nZXRUZW1wbGF0ZSgpLT5HZXRGdW5jdGlv
bigpOwogICAgICAgICBpbnN0YW5jZSA9IFNhZmVBbGxvY2F0aW9uOjpuZXdJbnN0YW5jZShmdW5j
dGlvbik7CiAgICAgfQorCiAgICAgaWYgKCFpbnN0YW5jZS5Jc0VtcHR5KCkpIHsKICAgICAgICAg
Ly8gQXZvaWQgc2V0dGluZyB0aGUgRE9NIHdyYXBwZXIgZm9yIGZhaWxlZCBhbGxvY2F0aW9ucy4K
ICAgICAgICAgc2V0RE9NV3JhcHBlcihpbnN0YW5jZSwgdHlwZSwgaW1wbCk7CkBAIC0zMzMsNCAr
MzA1LDUgQEAgUmVmUHRyPFhQYXRoTlNSZXNvbHZlcj4gVjhET01XcmFwcGVyOjpnZXRYUGF0aE5T
UmVzb2x2ZXIodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHYKICAgICByZXR1cm4gcmVzb2x2ZXI7CiB9
CiAKKwogfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
VjhET01XcmFwcGVyLmgKaW5kZXggMGU4MGIyMjk2OTVmOWQ5YzhmYzllMzJkMmZlZWE4ZDJiMzQ1
YWYzMi4uNjZlNzI2OTQ2NGM0ZjBjNWJlMmFhNzJhZmI2MmI0NTM3MDllY2MyOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmgKQEAgLTUzLDYgKzUzLDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEV2ZW50VGFyZ2V0OwogICAgIGNsYXNzIEZyYW1l
OwogICAgIGNsYXNzIE5vZGU7CisgICAgY2xhc3MgVjhCaW5kaW5nUGVyQ29udGV4dERhdGE7CiAg
ICAgY2xhc3MgVjhQcm94eTsKICAgICBjbGFzcyBXb3JrZXJDb250ZXh0OwogCkBAIC05OCwxMSAr
OTksOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIFdyYXAgSlMgbm9kZSBmaWx0
ZXIgaW4gQysrLgogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxOb2RlRmlsdGVyPiB3cmFwTmF0
aXZlTm9kZUZpbHRlcih2ODo6SGFuZGxlPHY4OjpWYWx1ZT4pOwogCi0gICAgICAgIHN0YXRpYyB2
ODo6TG9jYWw8djg6OkZ1bmN0aW9uPiBnZXRDb25zdHJ1Y3RvckZvckNvbnRleHQoV3JhcHBlclR5
cGVJbmZvKiwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4pOwotICAgICAgICBzdGF0aWMgdjg6Okxv
Y2FsPHY4OjpGdW5jdGlvbj4gZ2V0Q29uc3RydWN0b3IoV3JhcHBlclR5cGVJbmZvKiwgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IG9iamVjdFByb3RvdHlwZSk7Ci0gICAgICAgIHN0YXRpYyB2ODo6TG9j
YWw8djg6OkZ1bmN0aW9uPiBnZXRDb25zdHJ1Y3RvcihXcmFwcGVyVHlwZUluZm8qLCBET01XaW5k
b3cqKTsKKyAgICAgICAgc3RhdGljIHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+IGNvbnN0cnVjdG9y
Rm9yVHlwZShXcmFwcGVyVHlwZUluZm8qLCBET01XaW5kb3cqKTsKICNpZiBFTkFCTEUoV09SS0VS
UykKLSAgICAgICAgc3RhdGljIHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+IGdldENvbnN0cnVjdG9y
KFdyYXBwZXJUeXBlSW5mbyosIFdvcmtlckNvbnRleHQqKTsKKyAgICAgICAgc3RhdGljIHY4OjpM
b2NhbDx2ODo6RnVuY3Rpb24+IGNvbnN0cnVjdG9yRm9yVHlwZShXcmFwcGVyVHlwZUluZm8qLCBX
b3JrZXJDb250ZXh0Kik7CiAjZW5kaWYKIAogICAgICAgICAvLyBTZXQgSlMgd3JhcHBlciBvZiBh
IERPTSBvYmplY3QsIHRoZSBjYWxsZXIgaW4gY2hhcmdlIG9mIGluY3JlYXNlIHJlZi4KQEAgLTE0
Niw4ICsxNDUsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgRE9NTm9kZU1h
cHBpbmcmIGRvbU5vZGVNYXAgPSBub2RlLT5pc0FjdGl2ZU5vZGUoKSA/IHN0b3JlLT5hY3RpdmVE
b21Ob2RlTWFwKCkgOiBzdG9yZS0+ZG9tTm9kZU1hcCgpOwogICAgICAgICAgICAgcmV0dXJuIGRv
bU5vZGVNYXAuZ2V0KG5vZGUpOwogICAgICAgICB9CisgICAgcHJpdmF0ZToKKyAgICAgICAgc3Rh
dGljIFY4QmluZGluZ1BlckNvbnRleHREYXRhKiBwZXJDb250ZXh0RGF0YShWOFByb3h5Kik7Cisj
aWYgRU5BQkxFKFdPUktFUlMpCisgICAgICAgIHN0YXRpYyBWOEJpbmRpbmdQZXJDb250ZXh0RGF0
YSogcGVyQ29udGV4dERhdGEoV29ya2VyQ29udGV4dCopOworI2VuZGlmCiAgICAgfTsKLQogfQog
CiAjZW5kaWYgLy8gVjhET01XcmFwcGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1Y4SXNvbGF0ZWRDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4SXNvbGF0ZWRDb250ZXh0LmNwcAppbmRleCAzNGMxNzAzODQ0OGI5YTYxOTU3YTBlNWNj
ZTM2ZWE0MjU3NTlhZGRlLi5iMzhlY2U2NjgxZDliNTg4MDYzYzVlNTQxYzg4MmMyODM5MjBmY2Iw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOElzb2xhdGVkQ29udGV4
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhJc29sYXRlZENvbnRleHQu
Y3BwCkBAIC0zNSw4ICszNSw4IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFt
ZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisjaW5jbHVkZSAi
VjhCaW5kaW5nUGVyQ29udGV4dERhdGEuaCIKICNpbmNsdWRlICJWOERPTVdpbmRvdy5oIgotI2lu
Y2x1ZGUgIlY4SGlkZGVuUHJvcGVydHlOYW1lLmgiCiAjaW5jbHVkZSAiVjhQcm94eS5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CkBAIC02OCw3ICs2OCw5IEBAIFY4SXNvbGF0ZWRDb250ZXh0OjpW
OElzb2xhdGVkQ29udGV4dChWOFByb3h5KiBwcm94eSwgaW50IGV4dGVuc2lvbkdyb3VwLCBpbnQg
d29yCiAKICAgICBnZXRHbG9iYWxPYmplY3QobV9jb250ZXh0LT5nZXQoKSktPlNldFBvaW50ZXJJ
bkludGVybmFsRmllbGQoVjhET01XaW5kb3c6OmVudGVyZWRJc29sYXRlZFdvcmxkSW5kZXgsIHRo
aXMpOwogCi0gICAgVjhET01XaW5kb3dTaGVsbDo6aW5zdGFsbEhpZGRlbk9iamVjdFByb3RvdHlw
ZShtX2NvbnRleHQtPmdldCgpKTsKKyAgICBtX3BlckNvbnRleHREYXRhID0gVjhCaW5kaW5nUGVy
Q29udGV4dERhdGE6OmNyZWF0ZShtX2NvbnRleHQtPmdldCgpKTsKKyAgICBtX3BlckNvbnRleHRE
YXRhLT5pbml0KCk7CisKICAgICAvLyBGSVhNRTogVGhpcyB3aWxsIGdvIGF3YXkgb25jZSB3ZSBo
YXZlIGEgd2luZG93U2hlbGwgZm9yIHRoZSBpc29sYXRlZCB3b3JsZC4KICAgICBwcm94eS0+d2lu
ZG93U2hlbGwoKS0+aW5zdGFsbERPTVdpbmRvdyhtX2NvbnRleHQtPmdldCgpLCBtX2ZyYW1lLT5k
b21XaW5kb3coKSk7CiAKQEAgLTg1LDYgKzg3LDcgQEAgVjhJc29sYXRlZENvbnRleHQ6OlY4SXNv
bGF0ZWRDb250ZXh0KFY4UHJveHkqIHByb3h5LCBpbnQgZXh0ZW5zaW9uR3JvdXAsIGludCB3b3IK
IAogdm9pZCBWOElzb2xhdGVkQ29udGV4dDo6ZGVzdHJveSgpCiB7CisgICAgbV9wZXJDb250ZXh0
RGF0YS5jbGVhcigpOwogICAgIG1fZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+d2lsbFJlbGVh
c2VTY3JpcHRDb250ZXh0KGNvbnRleHQoKSwgbV93b3JsZC0+aWQoKSk7CiAgICAgbV9jb250ZXh0
LT5nZXQoKS5NYWtlV2Vhayh0aGlzLCAmY29udGV4dFdlYWtSZWZlcmVuY2VDYWxsYmFjayk7CiAg
ICAgbV9mcmFtZSA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9W
OElzb2xhdGVkQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhJc29sYXRl
ZENvbnRleHQuaAppbmRleCAyMjdhNzNkOTNlNzZkZmQzYjM0MjdmZDMxZTBmYjk3OTFlNmFmMGUy
Li45YmZlOGIxMGI2ZGM1MjlmOTZiNzIxY2IwZTIzZDQ3NzQwMjhjNDIwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOElzb2xhdGVkQ29udGV4dC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRDb250ZXh0LmgKQEAgLTQwLDYgKzQwLDcg
QEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU2VjdXJpdHlPcmlnaW47CitjbGFzcyBW
OEJpbmRpbmdQZXJDb250ZXh0RGF0YTsKIGNsYXNzIFY4UHJveHk7CiAKIC8vIFY4SXNvbGF0ZWRD
b250ZXh0CkBAIC05Niw2ICs5Nyw4IEBAIHB1YmxpYzoKICAgICBTZWN1cml0eU9yaWdpbiogc2Vj
dXJpdHlPcmlnaW4oKSBjb25zdCB7IHJldHVybiBtX3NlY3VyaXR5T3JpZ2luLmdldCgpOyB9CiAg
ICAgdm9pZCBzZXRTZWN1cml0eU9yaWdpbihQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPik7CiAK
KyAgICBWOEJpbmRpbmdQZXJDb250ZXh0RGF0YSogcGVyQ29udGV4dERhdGEoKSB7IHJldHVybiBt
X3BlckNvbnRleHREYXRhLmdldCgpOyB9CisKIHByaXZhdGU6CiAgICAgc3RhdGljIHY4OjpIYW5k
bGU8djg6Ok9iamVjdD4gZ2V0R2xvYmFsT2JqZWN0KHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNv
bnRleHQpCiAgICAgewpAQCAtMTE3LDYgKzEyMCw4IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFNl
Y3VyaXR5T3JpZ2luPiBtX3NlY3VyaXR5T3JpZ2luOwogCiAgICAgRnJhbWUqIG1fZnJhbWU7CisK
KyAgICBPd25QdHI8VjhCaW5kaW5nUGVyQ29udGV4dERhdGE+IG1fcGVyQ29udGV4dERhdGE7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9WOFByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJv
eHkuY3BwCmluZGV4IDQyNjYzMzQ4YTJiNmZiYWFhZDU2ODU1YTQ5Yjg0ODE5YjgyMzcwMWEuLjI0
ZGFhZTQyMjQyNTdjOGUxNTE4YjdlMjZiODExODEyM2Q0NzUwOTQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1Y4UHJveHkuY3BwCkBAIC01MzYsNiArNTM2LDE0IEBAIFY4UHJveHkqIFY4UHJv
eHk6OnJldHJpZXZlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCiAgICAgcmV0dXJu
IHJldHJpZXZlKHN0YXRpY19jYXN0PERvY3VtZW50Kj4oY29udGV4dCktPmZyYW1lKCkpOwogfQog
CitWOEJpbmRpbmdQZXJDb250ZXh0RGF0YSogVjhQcm94eTo6cmV0cmlldmVQZXJDb250ZXh0RGF0
YShGcmFtZSogZnJhbWUpCit7CisgICAgVjhJc29sYXRlZENvbnRleHQqIGlzb2xhdGVkQ29udGV4
dDsKKyAgICBpZiAoVU5MSUtFTFkoISEoaXNvbGF0ZWRDb250ZXh0ID0gVjhJc29sYXRlZENvbnRl
eHQ6OmdldEVudGVyZWQoKSkpKQorICAgICAgICByZXR1cm4gaXNvbGF0ZWRDb250ZXh0LT5wZXJD
b250ZXh0RGF0YSgpOworICAgIHJldHVybiBWOFByb3h5OjpyZXRyaWV2ZShmcmFtZSktPndpbmRv
d1NoZWxsKCktPnBlckNvbnRleHREYXRhKCk7Cit9CisKIHZvaWQgVjhQcm94eTo6cmVzZXRJc29s
YXRlZFdvcmxkcygpCiB7CiAgICAgZm9yIChJc29sYXRlZFdvcmxkTWFwOjppdGVyYXRvciBpdGVy
ID0gbV9pc29sYXRlZFdvcmxkcy5iZWdpbigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvVjhQcm94eS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94
eS5oCmluZGV4IDhiMjY5ZTQxZmZmZTBkYTcxNTJjZDA5MmZmNThjOTk5NmQ0MmM1N2UuLjQ5NGNh
M2NkN2ExMzhmYTM5MWU3Zjc5NGVjZWFkNWYzZjM2MTBiOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9WOFByb3h5LmgKQEAgLTYwLDYgKzYwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
IGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAgICAgY2xhc3MgU2NyaXB0U291cmNlQ29k
ZTsKICAgICBjbGFzcyBTZWN1cml0eU9yaWdpbjsKKyAgICBjbGFzcyBWOEJpbmRpbmdQZXJDb250
ZXh0RGF0YTsKICAgICBjbGFzcyBWOEV2ZW50TGlzdGVuZXI7CiAgICAgY2xhc3MgVjhJc29sYXRl
ZENvbnRleHQ7CiAgICAgY2xhc3MgV29ybGRDb250ZXh0SGFuZGxlOwpAQCAtMTgyLDYgKzE4Myw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gYSBjb250ZXh0LgogICAgICAgICBz
dGF0aWMgRnJhbWUqIHJldHJpZXZlRnJhbWUodjg6OkhhbmRsZTx2ODo6Q29udGV4dD4pOwogCisg
ICAgICAgIHN0YXRpYyBWOEJpbmRpbmdQZXJDb250ZXh0RGF0YSogcmV0cmlldmVQZXJDb250ZXh0
RGF0YShGcmFtZSopOwogCiAgICAgICAgIC8vIFRoZSB0aHJlZSBmdW5jdGlvbnMgYmVsb3cgcmV0
cmlldmUgV2ViRnJhbWUgaW5zdGFuY2VzIHJlbGF0aW5nIHRoZQogICAgICAgICAvLyBjdXJyZW50
bHkgZXhlY3V0aW5nIEphdmFTY3JpcHQuIFNpbmNlIEphdmFTY3JpcHQgY2FuIG1ha2UgZnVuY3Rp
b24gY2FsbHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNv
bnRleHRFeGVjdXRpb25Qcm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3Jr
ZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuY3BwCmluZGV4IDE2MmQ3OTQyODVmYmJhM2U4MjU3ODA3
YTNhMzU1MWU4ZTgxMjI1OGMuLmNjNWMxZjg2MDQwMDhmYWExOTUzYzQ5NDU1NzJmMGQyZTU1YzEz
OWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRF
eGVjdXRpb25Qcm94eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2Vy
Q29udGV4dEV4ZWN1dGlvblByb3h5LmNwcApAQCAtNDIsNyArNDIsOSBAQAogI2luY2x1ZGUgIlNo
YXJlZFdvcmtlci5oIgogI2luY2x1ZGUgIlNoYXJlZFdvcmtlckNvbnRleHQuaCIKICNpbmNsdWRl
ICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOEJpbmRpbmdQZXJDb250ZXh0RGF0YS5oIgogI2lu
Y2x1ZGUgIlY4RE9NTWFwLmgiCisjaW5jbHVkZSAiVjhET01XaW5kb3dTaGVsbC5oIgogI2luY2x1
ZGUgIlY4RGVkaWNhdGVkV29ya2VyQ29udGV4dC5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIKICNp
bmNsdWRlICJWOFJlY3Vyc2lvblNjb3BlLmgiCkBAIC0xMDIsNiArMTA0LDggQEAgdm9pZCBXb3Jr
ZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OmRpc3Bvc2UoKQogICAgIH0KICAgICBtX2V2ZW50cy5j
bGVhcigpOwogCisgICAgbV9wZXJDb250ZXh0RGF0YS5jbGVhcigpOworCiAgICAgLy8gRGlzcG9z
ZSB0aGUgY29udGV4dC4KICAgICBpZiAoIW1fY29udGV4dC5Jc0VtcHR5KCkpIHsKICAgICAgICAg
bV9jb250ZXh0LkRpc3Bvc2UoKTsKQEAgLTE0OSw2ICsxNTMsMTIgQEAgYm9vbCBXb3JrZXJDb250
ZXh0RXhlY3V0aW9uUHJveHk6OmluaXRDb250ZXh0SWZOZWVkZWQoKQogCiAgICAgdjg6OkNvbnRl
eHQ6OlNjb3BlIHNjb3BlKGNvbnRleHQpOwogCisgICAgbV9wZXJDb250ZXh0RGF0YSA9IFY4Qmlu
ZGluZ1BlckNvbnRleHREYXRhOjpjcmVhdGUobV9jb250ZXh0KTsKKyAgICBpZiAoIW1fcGVyQ29u
dGV4dERhdGEtPmluaXQoKSkgeworICAgICAgICBkaXNwb3NlKCk7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKICAgICAvLyBTZXQgRGVidWdJZCBmb3IgdGhlIG5ldyBjb250ZXh0Lgog
ICAgIGNvbnRleHQtPlNldERhdGEodjg6OlN0cmluZzo6TmV3KCJ3b3JrZXIiKSk7CiAKQEAgLTE1
OCw3ICsxNjgsNyBAQCBib29sIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6aW5pdENvbnRl
eHRJZk5lZWRlZCgpCiAgICAgaWYgKCFtX3dvcmtlckNvbnRleHQtPmlzRGVkaWNhdGVkV29ya2Vy
Q29udGV4dCgpKQogICAgICAgICBjb250ZXh0VHlwZSA9ICZWOFNoYXJlZFdvcmtlckNvbnRleHQ6
OmluZm87CiAjZW5kaWYKLSAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gd29ya2VyQ29udGV4
dENvbnN0cnVjdG9yID0gVjhET01XcmFwcGVyOjpnZXRDb25zdHJ1Y3RvckZvckNvbnRleHQoY29u
dGV4dFR5cGUsIGNvbnRleHQpOworICAgIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiB3b3JrZXJD
b250ZXh0Q29uc3RydWN0b3IgPSBtX3BlckNvbnRleHREYXRhLT5jb25zdHJ1Y3RvckZvclR5cGUo
Y29udGV4dFR5cGUpOwogICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBqc1dvcmtlckNvbnRleHQg
PSBTYWZlQWxsb2NhdGlvbjo6bmV3SW5zdGFuY2Uod29ya2VyQ29udGV4dENvbnN0cnVjdG9yKTsK
ICAgICAvLyBCYWlsIG91dCBpZiBhbGxvY2F0aW9uIGZhaWxlZC4KICAgICBpZiAoanNXb3JrZXJD
b250ZXh0LklzRW1wdHkoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuaAppbmRleCBlNmMxNjA1NDQ5YjA5Yjhi
MTUyNTZjNDE2M2FlMmQzMTFlZjBhNmVkLi4wZGY1YTNhZTcyYzFhYjI0YWM0ZTM1M2MxMjBhMzM0
Mjg0M2I5Mjk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJD
b250ZXh0RXhlY3V0aW9uUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9X
b3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuaApAQCAtNDQsNyArNDQsOSBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKICAgICBjbGFzcyBFdmVudDsKICAgICBjbGFzcyBFdmVudFRhcmdldDsKKyAg
ICBjbGFzcyBWOEJpbmRpbmdQZXJDb250ZXh0RGF0YTsKICAgICBjbGFzcyBXb3JrZXJDb250ZXh0
OworICAgIHN0cnVjdCBXcmFwcGVyVHlwZUluZm87CiAKICAgICBzdHJ1Y3QgV29ya2VyQ29udGV4
dEV4ZWN1dGlvblN0YXRlIHsKICAgICAgICAgV29ya2VyQ29udGV4dEV4ZWN1dGlvblN0YXRlKCkg
OiBoYWRFeGNlcHRpb24oZmFsc2UpLCBsaW5lTnVtYmVyKDApIHsgfQpAQCAtNzIsNiArNzQsOCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIFJldHVybnMgYSBsb2NhbCBoYW5kbGUg
b2YgdGhlIGNvbnRleHQuCiAgICAgICAgIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4gY29udGV4dCgp
IHsgcmV0dXJuIHY4OjpMb2NhbDx2ODo6Q29udGV4dD46Ok5ldyhtX2NvbnRleHQpOyB9CiAKKyAg
ICAgICAgVjhCaW5kaW5nUGVyQ29udGV4dERhdGEqIHBlckNvbnRleHREYXRhKCkgeyByZXR1cm4g
bV9wZXJDb250ZXh0RGF0YS5nZXQoKTsgfQorCiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBp
bml0SXNvbGF0ZSgpOwogICAgICAgICBib29sIGluaXRDb250ZXh0SWZOZWVkZWQoKTsKQEAgLTg4
LDYgKzkyLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2ODo6UGVyc2lzdGVudDx2
ODo6Q29udGV4dD4gbV9jb250ZXh0OwogCiAgICAgICAgIFZlY3RvcjxFdmVudCo+IG1fZXZlbnRz
OworCisgICAgICAgIE93blB0cjxWOEJpbmRpbmdQZXJDb250ZXh0RGF0YT4gbV9wZXJDb250ZXh0
RGF0YTsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNTUwYzQxYzQw
ZWMzMzA2OTY5MDNmZTA5MzUxYjYzN2MyZWM4ZTkyOS4uMjVlYTAwZjMwNjMzN2Y4ODczMGZjOWNl
MzFmZmIzMTI2ZmRiYzczOCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBi
L0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEyLTA0LTA0ICBFcmlr
IEFydmlkc3NvbiAgPGFydkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW1Y4XSBBZGQgYSBwZXIg
Y29udGV4dCBkYXRhIHN0b3JlIGFuZCB1c2UgdGhhdCBmb3IgY2FjaGluZyBib2lsZXIgcGxhdGVz
IGFzIHdlbGwgYXMgY29uc3RydWN0b3IgZnVuY3Rpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MzA5MworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogZmFzdC9kb20vY29uc3RydWN0b3ItcHJvdG8tZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9jb25zdHJ1Y3Rvci1wcm90by5o
dG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvY29uc3RydWN0b3ItcHJvdG8tZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvY29uc3RydWN0b3ItcHJv
dG8uaHRtbDogQWRkZWQuCisKIDIwMTItMDQtMDQgIERtaXRyeSBMb21vdiAgPGRzbG9tb3ZAZ29v
Z2xlLmNvbT4KIAogICAgICAgICBbSlNDXSBBcnJheUJ1ZmZlclZpZXcgYW5kIGl0cyBBcnJheUJ1
ZmZlciBhcmUgYXBwZW5kZWQgdG8gb2JqZWN0IHBvb2wgaW4gd3Jvbmcgb3JkZXIKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL2NvbnN0cnVjdG9yLXByb3RvLWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL2Zhc3QvZG9tL2NvbnN0cnVjdG9yLXByb3RvLWV4cGVjdGVkLnR4dApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5lYWFhNmFkOTVkOGNhYmE2YjUyNWZlZmM1MmI0NTM5ZjlkNjdhZThlCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vY29uc3RydWN0b3ItcHJvdG8tZXhwZWN0
ZWQudHh0CkBAIC0wLDAgKzEsMTEgQEAKK1RoaXMgdGVzdHMgdGhhdCBzZXR0aW5nIHRoZSBwcm90
byBvZiBhIGJ1aWx0IGluIGNvbnN0cnVjdG9yIGlzIG5vdCByZXNldAorCitPbiBzdWNjZXNzLCB5
b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVT
VCBDT01QTEVURSIuCisKKworUEFTUyBPYmplY3QuZ2V0UHJvdG90eXBlT2YoSFRNTEVsZW1lbnQp
IGlzIE9iamVjdC5wcm90b3R5cGUKK1BBU1MgT2JqZWN0LmdldFByb3RvdHlwZU9mKEhUTUxFbGVt
ZW50KSBpcyBwcm90bworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENP
TVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL2NvbnN0cnVjdG9yLXBy
b3RvLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9jb25zdHJ1Y3Rvci1wcm90by5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmI4MTE5OWRkOGNkZDhhYTNiYjZjNjEyNTE1MjViMTkxMjVmNTI2ODMKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9jb25zdHJ1Y3Rvci1wcm90by5odG1s
CkBAIC0wLDAgKzEsMTUgQEAKKzwhRE9DVFlQRSBodG1sPgorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jl
c291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorCitkZXNjcmlwdGlv
bignVGhpcyB0ZXN0cyB0aGF0IHNldHRpbmcgdGhlIHByb3RvIG9mIGEgYnVpbHQgaW4gY29uc3Ry
dWN0b3IgaXMgbm90IHJlc2V0Jyk7CisKKy8vIEhvdG1haWwgZGVwZW5kcyBvbiB0aGUgW1tQcm90
b3R5cGVdXSBvZiBET00gY29uc3RydWN0b3JzIHRvIGJlIE9iamVjdC5wcm90b3R5cGUuCitzaG91
bGRCZSgnT2JqZWN0LmdldFByb3RvdHlwZU9mKEhUTUxFbGVtZW50KScsICdPYmplY3QucHJvdG90
eXBlJyk7CisKK3ZhciBwcm90byA9IG5ldyBOdW1iZXIoNDIpOworSFRNTEVsZW1lbnQuX19wcm90
b19fID0gcHJvdG87CitzaG91bGRCZSgnT2JqZWN0LmdldFByb3RvdHlwZU9mKEhUTUxFbGVtZW50
KScsICdwcm90bycpOworCis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMv
anMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qv
d29ya2Vycy9jb25zdHJ1Y3Rvci1wcm90by1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0
L3dvcmtlcnMvY29uc3RydWN0b3ItcHJvdG8tZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjliZjlj
MTUwOTBjN2FkNjQxMTZlNzg4ZDAwN2Y5ZTlkMzc3ZDQ1NzkKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvY29uc3RydWN0b3ItcHJvdG8tZXhwZWN0ZWQudHh0CkBA
IC0wLDAgKzEsMTMgQEAKK1RoaXMgdGVzdHMgdGhhdCBzZXR0aW5nIHRoZSBwcm90byBvZiBhIGJ1
aWx0IGluIGNvbnN0cnVjdG9yIGlzIG5vdCByZXNldAorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBz
ZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVU
RSIuCisKKworcHJvdG8gPSBuZXcgTnVtYmVyKDQyKTogNDIKK09iamVjdC5nZXRQcm90b3R5cGVP
ZihXb3JrZXJMb2NhdGlvbik6IFtvYmplY3QgT2JqZWN0XQorV29ya2VyTG9jYXRpb24uX19wcm90
b19fID0gcHJvdG86IDQyCitPYmplY3QuZ2V0UHJvdG90eXBlT2YoV29ya2VyTG9jYXRpb24pOiA0
MgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9jb25zdHJ1Y3Rvci1wcm90by5odG1s
IGIvTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL2NvbnN0cnVjdG9yLXByb3RvLmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZThjNzg3M2ExOWRlNTMwODkwOGY4ZGIzYzEwOTM3MGMyNGEyNzAzNwotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9jb25zdHJ1Y3Rvci1wcm90by5odG1s
CkBAIC0wLDAgKzEsMjUgQEAKKzwhRE9DVFlQRSBodG1sPgorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jl
c291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2Vz
L3dvcmtlci1jcmVhdGUtY29tbW9uLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CisKK3ZhciBqc1Rl
c3RJc0FzeW5jID0gdHJ1ZTsKKworZGVzY3JpcHRpb24oJ1RoaXMgdGVzdHMgdGhhdCBzZXR0aW5n
IHRoZSBwcm90byBvZiBhIGJ1aWx0IGluIGNvbnN0cnVjdG9yIGlzIG5vdCByZXNldCcpOworCit2
YXIgd29ya2VyID0gY3JlYXRlV29ya2VyKCk7Cit3b3JrZXIucG9zdE1lc3NhZ2UoImV2YWwgcHJv
dG8gPSBuZXcgTnVtYmVyKDQyKSIpOword29ya2VyLnBvc3RNZXNzYWdlKCJldmFsIE9iamVjdC5n
ZXRQcm90b3R5cGVPZihXb3JrZXJMb2NhdGlvbikiKTsKK3dvcmtlci5wb3N0TWVzc2FnZSgiZXZh
bCBXb3JrZXJMb2NhdGlvbi5fX3Byb3RvX18gPSBwcm90byIpOword29ya2VyLnBvc3RNZXNzYWdl
KCJldmFsIE9iamVjdC5nZXRQcm90b3R5cGVPZihXb3JrZXJMb2NhdGlvbikiKTsKK3dvcmtlci5w
b3N0TWVzc2FnZSgiZXZhbCBET05FIik7CisKK3dvcmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlvbihl
dnQpIHsKKyAgICBpZiAoIS9ET05FLy50ZXN0KGV2dC5kYXRhKSkKKyAgICAgICAgZGVidWcoZXZ0
LmRhdGEucmVwbGFjZShuZXcgUmVnRXhwKCIvLipMYXlvdXRUZXN0cyIpLCAiPC4uLj4iKSk7Cisg
ICAgZWxzZQorICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKK307CisKKzwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0Pgo=
</data>
<flag name="review"
          id="140284"
          type_id="1"
          status="+"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>