<?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>121867</bug_id>
          
          <creation_ts>2013-09-24 14:13:19 -0700</creation_ts>
          <short_desc>Change JSC debug hooks to pass a CallFrame* instead of a DebuggerCallFrame.</short_desc>
          <delta_ts>2013-09-24 16:53:13 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>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>121796</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>joepeck</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>timothy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>932712</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-09-24 14:13:19 -0700</bug_when>
    <thetext>And with this change, we should also:

1. Removed the need for passing the line and column info to the debug hook callbacks. We now get the line and column info from the CallFrame.

2. Simplify BytecodeGenerator::emitDebugHook() to only take 1 line number argument. The caller can determine whether to pass in the first or last line number of the block of source code as appropriate.
    Note: we still need pass in line and column info to emitDebugHook() because it uses this info to emit expression info which is used by the CallFrame to determine the line and column info for its &quot;pc&quot;.

3. Pass the exceptionValue explicitly to the exception() debug hook callback. It should be embedded in the CallFrame / DebuggerCallFrame.

4. Change the op_debug opcode size to 2 (from 5) since we&apos;ve remove 3 arg values. Update LLINT and JIT code to handle this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932716</commentid>
    <comment_count>1</comment_count>
      <attachid>212500</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-09-24 14:20:01 -0700</bug_when>
    <thetext>Created attachment 212500
the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932733</commentid>
    <comment_count>2</comment_count>
      <attachid>212500</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2013-09-24 14:53:56 -0700</bug_when>
    <thetext>Comment on attachment 212500
the patch.

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

Looks good to me. Some nits and I&apos;d prefer a JSC reviewer for the JSC parts.

&gt; Source/JavaScriptCore/debugger/Debugger.h:54
&gt; +    virtual void exception(CallFrame*, JSValue exceptionValue, bool hasHandler) = 0;
&gt; +    virtual void atStatement(CallFrame*) = 0;
&gt; +    virtual void callEvent(CallFrame*) = 0;
&gt; +    virtual void returnEvent(CallFrame*) = 0;
&gt; +
&gt; +    virtual void willExecuteProgram(CallFrame*) = 0;
&gt; +    virtual void didExecuteProgram(CallFrame*) = 0;
&gt; +    virtual void didReachBreakpoint(CallFrame*) = 0;

Nit: Given the recent pointer -&gt; reference effort that has been going on. Can these still take a reference since we know they will never be null? I have no strong preference, but that seems stricter.

&gt; Source/JavaScriptCore/debugger/DebuggerCallFrame.h:59
&gt; +    unsigned line() const
&gt; +    {
&gt; +        unsigned line, column;
&gt; +        computeLineAndColumn(line, column);
&gt; +        return line;
&gt; +    }
&gt; +    unsigned column() const
&gt; +    {
&gt; +        unsigned line, column;
&gt; +        computeLineAndColumn(line, column);
&gt; +        return column;
&gt; +    }

This seems like a recipe for duplicated work. (foo(frame-&gt;line(), frame-&gt;column() computes twice). Is this going away? Or maybe it is very efficient?

How about just computing them once lazily and storing the values in member variables?

&gt; Source/WebCore/bindings/js/ScriptDebugServer.h:151
&gt; +    virtual void callEvent(JSC::CallFrame*);
&gt; +    virtual void atStatement(JSC::CallFrame*);
&gt; +    virtual void returnEvent(JSC::CallFrame*);
&gt; +    virtual void exception(JSC::CallFrame*, JSC::JSValue exceptionValue, bool hasHandler);
&gt; +    virtual void willExecuteProgram(JSC::CallFrame*);
&gt; +    virtual void didExecuteProgram(JSC::CallFrame*);
&gt; +    virtual void didReachBreakpoint(JSC::CallFrame*);

Nit: Add OVERRIDE to all virtual methods.

&gt; Source/WebCore/bindings/js/WorkerScriptDebugServer.h:62
&gt;      virtual bool isContentScript(JSC::ExecState*) { return false; }
&gt;  
&gt; -    virtual void willExecuteProgram(const JSC::DebuggerCallFrame&amp;);
&gt; +    virtual void willExecuteProgram(JSC::CallFrame*);

Nit: Add OVERRIDE to the virtual methods and probably FINAL to the class.

&gt; Source/WebKit/mac/WebView/WebScriptDebugger.h:65
&gt; +    virtual void callEvent(JSC::CallFrame*) { }
&gt; +    virtual void atStatement(JSC::CallFrame*) { }
&gt; +    virtual void returnEvent(JSC::CallFrame*) { }
&gt; +    virtual void exception(JSC::CallFrame*, JSC::JSValue exceptionValue, bool hasHandler);
&gt; +    virtual void willExecuteProgram(JSC::CallFrame*) { }
&gt; +    virtual void didExecuteProgram(JSC::CallFrame*) { }
&gt; +    virtual void didReachBreakpoint(JSC::CallFrame*) { }

Nit: Add OVERRIDE / FINAL. FINAL on the class seems appropriate since these virtual methods are all private.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932744</commentid>
    <comment_count>3</comment_count>
      <attachid>212500</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-09-24 15:18:35 -0700</bug_when>
    <thetext>Comment on attachment 212500
the patch.

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

&gt;&gt; Source/JavaScriptCore/debugger/DebuggerCallFrame.h:59
&gt;&gt; +    }
&gt; 
&gt; This seems like a recipe for duplicated work. (foo(frame-&gt;line(), frame-&gt;column() computes twice). Is this going away? Or maybe it is very efficient?
&gt; 
&gt; How about just computing them once lazily and storing the values in member variables?

I agree. Even better would be to compute these values eagerly, so we don&apos;t have to bother with a state variable telling us where we&apos;ve computed them yet. The client debugger will always want to know which line and column it&apos;s on, so there&apos;s no savings to being lazy.

Mark, was this change motivated by some kind of performance measurement?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932746</commentid>
    <comment_count>4</comment_count>
      <attachid>212500</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-09-24 15:19:47 -0700</bug_when>
    <thetext>Comment on attachment 212500
the patch.

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

&gt; Source/WebCore/bindings/js/JavaScriptCallFrame.h:89
&gt; -    JavaScriptCallFrame(const JSC::DebuggerCallFrame&amp;, PassRefPtr&lt;JavaScriptCallFrame&gt; caller);
&gt; +    JavaScriptCallFrame(JSC::CallFrame*, PassRefPtr&lt;JavaScriptCallFrame&gt; caller);

DebuggerCallFrame is an essential abstraction barrier. Please don&apos;t remove it!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932754</commentid>
    <comment_count>5</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-09-24 15:28:18 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 212500 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=212500&amp;action=review
&gt; 
&gt; &gt;&gt; Source/JavaScriptCore/debugger/DebuggerCallFrame.h:59
&gt; &gt;&gt; +    }
&gt; &gt; 
&gt; &gt; This seems like a recipe for duplicated work. (foo(frame-&gt;line(), frame-&gt;column() computes twice). Is this going away? Or maybe it is very efficient?
&gt; &gt; 
&gt; &gt; How about just computing them once lazily and storing the values in member variables?
&gt; 
&gt; I agree. Even better would be to compute these values eagerly, so we don&apos;t have to bother with a state variable telling us where we&apos;ve computed them yet. The client debugger will always want to know which line and column it&apos;s on, so there&apos;s no savings to being lazy.
&gt; 
&gt; Mark, was this change motivated by some kind of performance measurement?

No, not for performance reasons.  This was just so that we get the line and column info from the CallFrame as the single source of where we&apos;re executing instead of having to pass them via the debug hooks.  For now, I didn&apos;t bother optimizing it.  But sure, I can compute them eagerly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932788</commentid>
    <comment_count>6</comment_count>
      <attachid>212519</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-09-24 16:33:38 -0700</bug_when>
    <thetext>Created attachment 212519
JavaScriptCallFrame is now constructed with DebuggerCallFrame as an arg again. Added all the suggested FINAL and OVERRIDE clauses. Also cached line and column in DebuggerCallFrame.

However, I did not change the JSC debug hooks to pass a CallFrame&amp; instead of the CallFrame*.  This is in keeping with the convention of how we pass CallFrames in JSC.  Eventually, these debug hook code should move back into JSC::Debugger, and no one outside of JSC will see them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932798</commentid>
    <comment_count>7</comment_count>
      <attachid>212519</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-09-24 16:45:57 -0700</bug_when>
    <thetext>Comment on attachment 212519
JavaScriptCallFrame is now constructed with DebuggerCallFrame as an arg again. Added all the suggested FINAL and OVERRIDE clauses. Also cached line and column in DebuggerCallFrame.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932804</commentid>
    <comment_count>8</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-09-24 16:53:13 -0700</bug_when>
    <thetext>Thanks for all the feedback and review.  Landed in r156374: &lt;http://trac.webkit.org/r156374&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>212500</attachid>
            <date>2013-09-24 14:20:01 -0700</date>
            <delta_ts>2013-09-24 16:33:38 -0700</delta_ts>
            <desc>the patch.</desc>
            <filename>bug-121867.patch</filename>
            <type>text/plain</type>
            <size>53574</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU2MzU2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg1IEBA
CisyMDEzLTA5LTI0ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBD
aGFuZ2UgSlNDIGRlYnVnIGhvb2tzIHRvIHBhc3MgYSBDYWxsRnJhbWUqIGluc3RlYWQgb2YgYSBE
ZWJ1Z2dlckNhbGxGcmFtZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEyMTg2Ny4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAxLiBSZW1vdmVkIHRoZSBuZWVkIGZvciBwYXNzaW5nIHRoZSBsaW5lIGFuZCBj
b2x1bW4gaW5mbyB0byB0aGUgZGVidWcgaG9vaworICAgICAgICAgICBjYWxsYmFja3MuIFdlIG5v
dyBnZXQgdGhlIGxpbmUgYW5kIGNvbHVtbiBpbmZvIGZyb20gdGhlIENhbGxGcmFtZS4KKworICAg
ICAgICAyLiBTaW1wbGlmeSBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdERlYnVnSG9vaygpIHRvIG9u
bHkgdGFrZSAxIGxpbmUgbnVtYmVyCisgICAgICAgICAgIGFyZ3VtZW50LiBUaGUgY2FsbGVyIGNh
biBkZXRlcm1pbmUgd2hldGhlciB0byBwYXNzIGluIHRoZSBmaXJzdCBvciBsYXN0CisgICAgICAg
ICAgIGxpbmUgbnVtYmVyIG9mIHRoZSBibG9jayBvZiBzb3VyY2UgY29kZSBhcyBhcHByb3ByaWF0
ZS4KKyAgICAgICAgICAgTm90ZTogd2Ugc3RpbGwgbmVlZCBwYXNzIGluIGxpbmUgYW5kIGNvbHVt
biBpbmZvIHRvIGVtaXREZWJ1Z0hvb2soKQorICAgICAgICAgICBiZWNhdXNlIGl0IHVzZXMgdGhp
cyBpbmZvIHRvIGVtaXQgZXhwcmVzc2lvbiBpbmZvIHdoaWNoIGlzIHVzZWQgYnkgdGhlCisgICAg
ICAgICAgIENhbGxGcmFtZSB0byBkZXRlcm1pbmUgdGhlIGxpbmUgYW5kIGNvbHVtbiBpbmZvIGZv
ciBpdHMgInBjIi4KKworICAgICAgICAzLiBQYXNzIHRoZSBleGNlcHRpb25WYWx1ZSBleHBsaWNp
dGx5IHRvIHRoZSBleGNlcHRpb24oKSBkZWJ1ZyBob29rCisgICAgICAgICAgIGNhbGxiYWNrLiBJ
dCBzaG91bGQgYmUgZW1iZWRkZWQgaW4gdGhlIENhbGxGcmFtZSAvIERlYnVnZ2VyQ2FsbEZyYW1l
LgorCisgICAgICAgIDQuIENoYW5nZSB0aGUgb3BfZGVidWcgb3Bjb2RlIHNpemUgdG8gMiAoZnJv
bSA1KSBzaW5jZSB3ZSd2ZSByZW1vdmUgMyBhcmcKKyAgICAgICAgICAgdmFsdWVzLiBVcGRhdGUg
TExJTlQgYW5kIEpJVCBjb2RlIHRvIGhhbmRsZSB0aGlzLgorCisgICAgICAgICogYnl0ZWNvZGUv
Q29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUpOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OkNvZGVCbG9jayk6CisgICAgICAgICogYnl0ZWNvZGUv
T3Bjb2RlLmg6CisgICAgICAgIChKU0M6OnBhZE9wY29kZU5hbWUpOgorICAgICAgICAqIGJ5dGVj
b21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2Vu
ZXJhdG9yOjplbWl0RGVidWdIb29rKToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVH
ZW5lcmF0b3IuaDoKKyAgICAgICAgKiBieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcDoKKyAg
ICAgICAgKEpTQzo6Q29uc3RTdGF0ZW1lbnROb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAo
SlNDOjpFbXB0eVN0YXRlbWVudE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkRl
YnVnZ2VyU3RhdGVtZW50Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6RXhwclN0
YXRlbWVudE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OlZhclN0YXRlbWVudE5v
ZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OklmRWxzZU5vZGU6OmVtaXRCeXRlY29k
ZSk6CisgICAgICAgIChKU0M6OkRvV2hpbGVOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAo
SlNDOjpXaGlsZU5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkZvck5vZGU6OmVt
aXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkZvckluTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAg
ICAgICAgKEpTQzo6Q29udGludWVOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpC
cmVha05vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OlJldHVybk5vZGU6OmVtaXRC
eXRlY29kZSk6CisgICAgICAgIChKU0M6OldpdGhOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAg
ICAoSlNDOjpTd2l0Y2hOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpMYWJlbE5v
ZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OlRocm93Tm9kZTo6ZW1pdEJ5dGVjb2Rl
KToKKyAgICAgICAgKEpTQzo6VHJ5Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6
UHJvZ3JhbU5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkV2YWxOb2RlOjplbWl0
Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkJvZHlOb2RlOjplbWl0Qnl0ZWNvZGUp
OgorICAgICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2VyLmg6CisgICAgICAgICogZGVidWdnZXIvRGVi
dWdnZXJDYWxsRnJhbWUuY3BwOgorICAgICAgICAoSlNDOjpMaW5lQW5kQ29sdW1uRnVuY3Rvcjo6
b3BlcmF0b3IoKSk6CisgICAgICAgIChKU0M6OkxpbmVBbmRDb2x1bW5GdW5jdG9yOjpsaW5lKToK
KyAgICAgICAgKEpTQzo6TGluZUFuZENvbHVtbkZ1bmN0b3I6OmNvbHVtbik6CisgICAgICAgIChK
U0M6OkRlYnVnZ2VyQ2FsbEZyYW1lOjpjb21wdXRlTGluZUFuZENvbHVtbik6CisgICAgICAgIChK
U0M6OkRlYnVnZ2VyQ2FsbEZyYW1lOjpjbGVhcik6CisgICAgICAgICogZGVidWdnZXIvRGVidWdn
ZXJDYWxsRnJhbWUuaDoKKyAgICAgICAgKEpTQzo6RGVidWdnZXJDYWxsRnJhbWU6OkRlYnVnZ2Vy
Q2FsbEZyYW1lKToKKyAgICAgICAgKEpTQzo6RGVidWdnZXJDYWxsRnJhbWU6OmxpbmUpOgorICAg
ICAgICAoSlNDOjpEZWJ1Z2dlckNhbGxGcmFtZTo6Y29sdW1uKToKKyAgICAgICAgKiBpbnRlcnBy
ZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAgIChKU0M6OnVud2luZENhbGxGcmFtZSk6Cisg
ICAgICAgIChKU0M6OlVud2luZEZ1bmN0b3I6OlVud2luZEZ1bmN0b3IpOgorICAgICAgICAoSlND
OjpVbndpbmRGdW5jdG9yOjpvcGVyYXRvcigpKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6
OnVud2luZCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpkZWJ1Zyk6CisgICAgICAgICog
aW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaDoKKyAgICAgICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kZWJ1Zyk6CisgICAgICAgICogaml0L0pJVE9w
Y29kZXMzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kZWJ1Zyk6CisgICAg
ICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAgKEpTQzo6REVGSU5FX1NUVUJfRlVOQ1RJ
T04pOgorICAgICAgICAqIGxsaW50L0xMSW50U2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6
TExJbnQ6OkxMSU5UX1NMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbElu
dGVycHJldGVyLmFzbToKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKwogMjAxMy0wOS0yNCAg
TWFyayBSb3dlICA8bXJvd2VAYXBwbGUuY29tPgogCiAgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8x
NDk3MTUxOD4gV2ViS2l0IHNob3VsZCBidWlsZCBhZ2FpbnN0IHRoZSBYY29kZSBkZWZhdWx0IHRv
b2xjaGFpbiB3aGVuIHRhcmdldGluZyBPUyBYIDEwLjgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxNTYzNTYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTMyNSwxMSArMTMyNSw4IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoUHJpbnRT
dHJlYW0KICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX2RlYnVnOiB7CiAgICAgICAgICAgICBp
bnQgZGVidWdIb29rSUQgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBmaXJz
dExpbmUgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBsYXN0TGluZSA9ICgr
K2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IGNvbHVtbiA9ICgrK2l0KS0+dS5vcGVy
YW5kOwogICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24s
IGl0LCAiZGVidWciKTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlZCwgJWQsICVkIiwg
ZGVidWdIb29rTmFtZShkZWJ1Z0hvb2tJRCksIGZpcnN0TGluZSwgbGFzdExpbmUsIGNvbHVtbik7
CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcyIsIGRlYnVnSG9va05hbWUoZGVidWdIb29rSUQp
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfcHJvZmls
ZV93aWxsX2NhbGw6IHsKQEAgLTE4NzQsMTEgKzE4NzEsNiBAQCBDb2RlQmxvY2s6OkNvZGVCbG9j
ayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0g
ICAgICAgIGNhc2Ugb3BfZGVidWc6IHsKLSAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNF0g
PSBjb2x1bW5OdW1iZXJGb3JCeXRlY29kZU9mZnNldChpKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0KICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCShyZXZpc2lv
biAxNTYzNTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTE4MCw3ICsxODAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBtYWNy
byhvcF90aHJvdywgMikgXAogICAgIG1hY3JvKG9wX3Rocm93X3N0YXRpY19lcnJvciwgMykgXAog
ICAgIFwKLSAgICBtYWNybyhvcF9kZWJ1ZywgNSkgXAorICAgIG1hY3JvKG9wX2RlYnVnLCAyKSBc
CiAgICAgbWFjcm8ob3BfcHJvZmlsZV93aWxsX2NhbGwsIDIpIFwKICAgICBtYWNybyhvcF9wcm9m
aWxlX2RpZF9jYWxsLCAyKSBcCiAgICAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9u
IDE1NjM1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVH
ZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODU4LDcgKzE4NTgsNyBAQCB2b2lkIEJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0UG9wU2NvcGUoKQogICAgIG1fbG9jYWxTY29wZURlcHRoLS07
CiB9CiAKLXZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXREZWJ1Z0hvb2soRGVidWdIb29rSUQg
ZGVidWdIb29rSUQsIHVuc2lnbmVkIGZpcnN0TGluZSwgdW5zaWduZWQgbGFzdExpbmUsIHVuc2ln
bmVkIGNoYXJPZmZzZXQsIHVuc2lnbmVkIGxpbmVTdGFydCkKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0
b3I6OmVtaXREZWJ1Z0hvb2soRGVidWdIb29rSUQgZGVidWdIb29rSUQsIHVuc2lnbmVkIGxpbmUs
IHVuc2lnbmVkIGNoYXJPZmZzZXQsIHVuc2lnbmVkIGxpbmVTdGFydCkKIHsKICNpZiBFTkFCTEUo
REVCVUdfV0lUSF9CUkVBS1BPSU5UKQogICAgIGlmIChkZWJ1Z0hvb2tJRCAhPSBEaWRSZWFjaEJy
ZWFrcG9pbnQpCkBAIC0xODY3LDE0ICsxODY3LDEwIEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXREZWJ1Z0hvb2soRGUKICAgICBpZiAoIW1fc2hvdWxkRW1pdERlYnVnSG9va3MpCiAgICAg
ICAgIHJldHVybjsKICNlbmRpZgotICAgIEpTVGV4dFBvc2l0aW9uIGRpdm90KGZpcnN0TGluZSwg
Y2hhck9mZnNldCwgbGluZVN0YXJ0KTsKKyAgICBKU1RleHRQb3NpdGlvbiBkaXZvdChsaW5lLCBj
aGFyT2Zmc2V0LCBsaW5lU3RhcnQpOwogICAgIGVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCwgZGl2
b3QsIGRpdm90KTsKLSAgICB1bnNpZ25lZCBjaGFyUG9zaXRpb24gPSBjaGFyT2Zmc2V0IC0gbV9z
Y29wZU5vZGUtPnNvdXJjZSgpLnN0YXJ0T2Zmc2V0KCk7CiAgICAgZW1pdE9wY29kZShvcF9kZWJ1
Zyk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRlYnVnSG9va0lEKTsKLSAgICBpbnN0cnVj
dGlvbnMoKS5hcHBlbmQoZmlyc3RMaW5lKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobGFz
dExpbmUpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChjaGFyUG9zaXRpb24pOwogfQogCiB2
b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwdXNoRmluYWxseUNvbnRleHQoU3RhdGVtZW50Tm9kZSog
ZmluYWxseUJsb2NrKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkocmV2aXNpb24gMTU2MzU2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MDUsNyArNDA1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFJl
Z2lzdGVySUQqIGVtaXRQdXNoV2l0aFNjb3BlKFJlZ2lzdGVySUQqIHNjb3BlKTsKICAgICAgICAg
dm9pZCBlbWl0UG9wU2NvcGUoKTsKIAotICAgICAgICB2b2lkIGVtaXREZWJ1Z0hvb2soRGVidWdI
b29rSUQsIHVuc2lnbmVkIGZpcnN0TGluZSwgdW5zaWduZWQgbGFzdExpbmUsIHVuc2lnbmVkIGNo
YXJPZmZzZXQsIHVuc2lnbmVkIGxpbmVTdGFydCk7CisgICAgICAgIHZvaWQgZW1pdERlYnVnSG9v
ayhEZWJ1Z0hvb2tJRCwgdW5zaWduZWQgbGluZSwgdW5zaWduZWQgY2hhck9mZnNldCwgdW5zaWdu
ZWQgbGluZVN0YXJ0KTsKIAogICAgICAgICBpbnQgc2NvcGVEZXB0aCgpIHsgcmV0dXJuIG1fbG9j
YWxTY29wZURlcHRoICsgbV9maW5hbGx5RGVwdGg7IH0KICAgICAgICAgYm9vbCBoYXNGaW5hbGlz
ZXIoKSB7IHJldHVybiBtX2ZpbmFsbHlEZXB0aCAhPSAwOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCShyZXZpc2lv
biAxNTYzNTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29k
ZWdlbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NDQsNyArMTQ0NCw3IEBAIFJlZ2lzdGVySUQq
IENvbnN0RGVjbE5vZGU6OmVtaXRCeXRlY29kZSgKIAogdm9pZCBDb25zdFN0YXRlbWVudE5vZGU6
OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKikK
IHsKLSAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhXaWxsRXhlY3V0ZVN0YXRlbWVudCwgZmly
c3RMaW5lKCksIGxhc3RMaW5lKCksIHN0YXJ0T2Zmc2V0KCksIGxpbmVTdGFydE9mZnNldCgpKTsK
KyAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhXaWxsRXhlY3V0ZVN0YXRlbWVudCwgZmlyc3RM
aW5lKCksIHN0YXJ0T2Zmc2V0KCksIGxpbmVTdGFydE9mZnNldCgpKTsKICAgICBnZW5lcmF0b3Iu
ZW1pdE5vZGUobV9uZXh0KTsKIH0KIApAQCAtMTQ4NywxNCArMTQ4NywxNCBAQCB2b2lkIEJsb2Nr
Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuCiAKIHZvaWQgRW1wdHlTdGF0ZW1lbnROb2Rl
OjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCop
CiB7Ci0gICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2soV2lsbEV4ZWN1dGVTdGF0ZW1lbnQsIGZp
cnN0TGluZSgpLCBsYXN0TGluZSgpLCBzdGFydE9mZnNldCgpLCBsaW5lU3RhcnRPZmZzZXQoKSk7
CisgICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2soV2lsbEV4ZWN1dGVTdGF0ZW1lbnQsIGZpcnN0
TGluZSgpLCBzdGFydE9mZnNldCgpLCBsaW5lU3RhcnRPZmZzZXQoKSk7CiB9CiAKIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEZWJ1Z2dlclN0YXRlbWVudE5vZGUgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCiAKIHZvaWQgRGVidWdnZXJTdGF0ZW1lbnROb2RlOjplbWl0Qnl0
ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCopCiB7Ci0gICAg
Z2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2soRGlkUmVhY2hCcmVha3BvaW50LCBmaXJzdExpbmUoKSwg
bGFzdExpbmUoKSwgc3RhcnRPZmZzZXQoKSwgbGluZVN0YXJ0T2Zmc2V0KCkpOworICAgIGdlbmVy
YXRvci5lbWl0RGVidWdIb29rKERpZFJlYWNoQnJlYWtwb2ludCwgbGFzdExpbmUoKSwgc3RhcnRP
ZmZzZXQoKSwgbGluZVN0YXJ0T2Zmc2V0KCkpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0gRXhwclN0YXRlbWVudE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQpAQCAtMTUwMiw3ICsxNTAyLDcgQEAgdm9pZCBEZWJ1Z2dlclN0YXRlbWVudE5vZGU6OmVtaXRC
eXRlY29kZQogdm9pZCBFeHByU3RhdGVtZW50Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2Vu
ZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKICAgICBBU1NFUlQobV9leHBy
KTsKLSAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhXaWxsRXhlY3V0ZVN0YXRlbWVudCwgZmly
c3RMaW5lKCksIGxhc3RMaW5lKCksIHN0YXJ0T2Zmc2V0KCksIGxpbmVTdGFydE9mZnNldCgpKTsK
KyAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhXaWxsRXhlY3V0ZVN0YXRlbWVudCwgZmlyc3RM
aW5lKCksIHN0YXJ0T2Zmc2V0KCksIGxpbmVTdGFydE9mZnNldCgpKTsKICAgICBnZW5lcmF0b3Iu
ZW1pdE5vZGUoZHN0LCBtX2V4cHIpOwogfQogCkBAIC0xNTExLDcgKzE1MTEsNyBAQCB2b2lkIEV4
cHJTdGF0ZW1lbnROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0CiB2b2lkIFZhclN0YXRlbWVudE5vZGU6
OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKikK
IHsKICAgICBBU1NFUlQobV9leHByKTsKLSAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhXaWxs
RXhlY3V0ZVN0YXRlbWVudCwgZmlyc3RMaW5lKCksIGxhc3RMaW5lKCksIHN0YXJ0T2Zmc2V0KCks
IGxpbmVTdGFydE9mZnNldCgpKTsKKyAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhXaWxsRXhl
Y3V0ZVN0YXRlbWVudCwgZmlyc3RMaW5lKCksIHN0YXJ0T2Zmc2V0KCksIGxpbmVTdGFydE9mZnNl
dCgpKTsKICAgICBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHByKTsKIH0KIApAQCAtMTU1Niw3ICsx
NTU2LDcgQEAgYm9vbCBJZkVsc2VOb2RlOjp0cnlGb2xkQnJlYWtBbmRDb250aW51ZQogCiB2b2lk
IElmRWxzZU5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBS
ZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2soV2lsbEV4ZWN1
dGVTdGF0ZW1lbnQsIGZpcnN0TGluZSgpLCBsYXN0TGluZSgpLCBzdGFydE9mZnNldCgpLCBsaW5l
U3RhcnRPZmZzZXQoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2soV2lsbEV4ZWN1dGVT
dGF0ZW1lbnQsIGZpcnN0TGluZSgpLCBzdGFydE9mZnNldCgpLCBsaW5lU3RhcnRPZmZzZXQoKSk7
CiAgICAgCiAgICAgUmVmUHRyPExhYmVsPiBiZWZvcmVUaGVuID0gZ2VuZXJhdG9yLm5ld0xhYmVs
KCk7CiAgICAgUmVmUHRyPExhYmVsPiBiZWZvcmVFbHNlID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7
CkBAIC0xNTkzLDEyICsxNTkzLDEyIEBAIHZvaWQgRG9XaGlsZU5vZGU6OmVtaXRCeXRlY29kZShC
eXRlY29kZUcKICAgICBSZWZQdHI8TGFiZWw+IHRvcE9mTG9vcCA9IGdlbmVyYXRvci5uZXdMYWJl
bCgpOwogICAgIGdlbmVyYXRvci5lbWl0TGFiZWwodG9wT2ZMb29wLmdldCgpKTsKICAgICBnZW5l
cmF0b3IuZW1pdExvb3BIaW50KCk7Ci0gICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2soV2lsbEV4
ZWN1dGVTdGF0ZW1lbnQsIGxhc3RMaW5lKCksIGxhc3RMaW5lKCksIHN0YXJ0T2Zmc2V0KCksIGxp
bmVTdGFydE9mZnNldCgpKTsKKyAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhXaWxsRXhlY3V0
ZVN0YXRlbWVudCwgbGFzdExpbmUoKSwgc3RhcnRPZmZzZXQoKSwgbGluZVN0YXJ0T2Zmc2V0KCkp
OwogCiAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGRzdCwgbV9zdGF0ZW1lbnQpOwogCiAgICAgZ2Vu
ZXJhdG9yLmVtaXRMYWJlbChzY29wZS0+Y29udGludWVUYXJnZXQoKSk7Ci0gICAgZ2VuZXJhdG9y
LmVtaXREZWJ1Z0hvb2soV2lsbEV4ZWN1dGVTdGF0ZW1lbnQsIGxhc3RMaW5lKCksIGxhc3RMaW5l
KCksIHN0YXJ0T2Zmc2V0KCksIGxpbmVTdGFydE9mZnNldCgpKTsKKyAgICBnZW5lcmF0b3IuZW1p
dERlYnVnSG9vayhXaWxsRXhlY3V0ZVN0YXRlbWVudCwgbGFzdExpbmUoKSwgc3RhcnRPZmZzZXQo
KSwgbGluZVN0YXJ0T2Zmc2V0KCkpOwogICAgIGdlbmVyYXRvci5lbWl0Tm9kZUluQ29uZGl0aW9u
Q29udGV4dChtX2V4cHIsIHRvcE9mTG9vcC5nZXQoKSwgc2NvcGUtPmJyZWFrVGFyZ2V0KCksIEZh
bGxUaHJvdWdoTWVhbnNGYWxzZSk7CiAKICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKHNjb3BlLT5i
cmVha1RhcmdldCgpKTsKQEAgLTE2MTEsNyArMTYxMSw3IEBAIHZvaWQgV2hpbGVOb2RlOjplbWl0
Qnl0ZWNvZGUoQnl0ZWNvZGVHZW4KICAgICBMYWJlbFNjb3BlUHRyIHNjb3BlID0gZ2VuZXJhdG9y
Lm5ld0xhYmVsU2NvcGUoTGFiZWxTY29wZTo6TG9vcCk7CiAgICAgUmVmUHRyPExhYmVsPiB0b3BP
Zkxvb3AgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKIAotICAgIGdlbmVyYXRvci5lbWl0RGVidWdI
b29rKFdpbGxFeGVjdXRlU3RhdGVtZW50LCBtX2V4cHItPmxpbmVObygpLCBtX2V4cHItPmxpbmVO
bygpLCBtX2V4cHItPnN0YXJ0T2Zmc2V0KCksIG1fZXhwci0+bGluZVN0YXJ0T2Zmc2V0KCkpOwor
ICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKFdpbGxFeGVjdXRlU3RhdGVtZW50LCBtX2V4cHIt
PmxpbmVObygpLCBtX2V4cHItPnN0YXJ0T2Zmc2V0KCksIG1fZXhwci0+bGluZVN0YXJ0T2Zmc2V0
KCkpOwogICAgIGdlbmVyYXRvci5lbWl0Tm9kZUluQ29uZGl0aW9uQ29udGV4dChtX2V4cHIsIHRv
cE9mTG9vcC5nZXQoKSwgc2NvcGUtPmJyZWFrVGFyZ2V0KCksIEZhbGxUaHJvdWdoTWVhbnNUcnVl
KTsKIAogICAgIGdlbmVyYXRvci5lbWl0TGFiZWwodG9wT2ZMb29wLmdldCgpKTsKQEAgLTE2MjAs
NyArMTYyMCw3IEBAIHZvaWQgV2hpbGVOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW4KICAg
ICBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBtX3N0YXRlbWVudCk7CiAKICAgICBnZW5lcmF0b3Iu
ZW1pdExhYmVsKHNjb3BlLT5jb250aW51ZVRhcmdldCgpKTsKLSAgICBnZW5lcmF0b3IuZW1pdERl
YnVnSG9vayhXaWxsRXhlY3V0ZVN0YXRlbWVudCwgZmlyc3RMaW5lKCksIGxhc3RMaW5lKCksIHN0
YXJ0T2Zmc2V0KCksIGxpbmVTdGFydE9mZnNldCgpKTsKKyAgICBnZW5lcmF0b3IuZW1pdERlYnVn
SG9vayhXaWxsRXhlY3V0ZVN0YXRlbWVudCwgZmlyc3RMaW5lKCksIHN0YXJ0T2Zmc2V0KCksIGxp
bmVTdGFydE9mZnNldCgpKTsKIAogICAgIGdlbmVyYXRvci5lbWl0Tm9kZUluQ29uZGl0aW9uQ29u
dGV4dChtX2V4cHIsIHRvcE9mTG9vcC5nZXQoKSwgc2NvcGUtPmJyZWFrVGFyZ2V0KCksIEZhbGxU
aHJvdWdoTWVhbnNGYWxzZSk7CiAKQEAgLTE2MzMsNyArMTYzMyw3IEBAIHZvaWQgRm9yTm9kZTo6
ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXIKIHsKICAgICBMYWJlbFNjb3BlUHRyIHNjb3BlID0g
Z2VuZXJhdG9yLm5ld0xhYmVsU2NvcGUoTGFiZWxTY29wZTo6TG9vcCk7CiAKLSAgICBnZW5lcmF0
b3IuZW1pdERlYnVnSG9vayhXaWxsRXhlY3V0ZVN0YXRlbWVudCwgZmlyc3RMaW5lKCksIGxhc3RM
aW5lKCksIHN0YXJ0T2Zmc2V0KCksIGxpbmVTdGFydE9mZnNldCgpKTsKKyAgICBnZW5lcmF0b3Iu
ZW1pdERlYnVnSG9vayhXaWxsRXhlY3V0ZVN0YXRlbWVudCwgZmlyc3RMaW5lKCksIHN0YXJ0T2Zm
c2V0KCksIGxpbmVTdGFydE9mZnNldCgpKTsKIAogICAgIGlmIChtX2V4cHIxKQogICAgICAgICBn
ZW5lcmF0b3IuZW1pdE5vZGUoZ2VuZXJhdG9yLmlnbm9yZWRSZXN1bHQoKSwgbV9leHByMSk7CkBA
IC0xNjQ4LDcgKzE2NDgsNyBAQCB2b2lkIEZvck5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdl
bmVyCiAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGRzdCwgbV9zdGF0ZW1lbnQpOwogCiAgICAgZ2Vu
ZXJhdG9yLmVtaXRMYWJlbChzY29wZS0+Y29udGludWVUYXJnZXQoKSk7Ci0gICAgZ2VuZXJhdG9y
LmVtaXREZWJ1Z0hvb2soV2lsbEV4ZWN1dGVTdGF0ZW1lbnQsIGZpcnN0TGluZSgpLCBsYXN0TGlu
ZSgpLCBzdGFydE9mZnNldCgpLCBsaW5lU3RhcnRPZmZzZXQoKSk7CisgICAgZ2VuZXJhdG9yLmVt
aXREZWJ1Z0hvb2soV2lsbEV4ZWN1dGVTdGF0ZW1lbnQsIGZpcnN0TGluZSgpLCBzdGFydE9mZnNl
dCgpLCBsaW5lU3RhcnRPZmZzZXQoKSk7CiAgICAgaWYgKG1fZXhwcjMpCiAgICAgICAgIGdlbmVy
YXRvci5lbWl0Tm9kZShnZW5lcmF0b3IuaWdub3JlZFJlc3VsdCgpLCBtX2V4cHIzKTsKIApAQCAt
MTY3MSw3ICsxNjcxLDcgQEAgdm9pZCBGb3JJbk5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdl
bgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2so
V2lsbEV4ZWN1dGVTdGF0ZW1lbnQsIGZpcnN0TGluZSgpLCBsYXN0TGluZSgpLCBzdGFydE9mZnNl
dCgpLCBsaW5lU3RhcnRPZmZzZXQoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2soV2ls
bEV4ZWN1dGVTdGF0ZW1lbnQsIGZpcnN0TGluZSgpLCBzdGFydE9mZnNldCgpLCBsaW5lU3RhcnRP
ZmZzZXQoKSk7CiAKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5uZXdU
ZW1wb3JhcnkoKTsKICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoYmFzZS5nZXQoKSwgbV9leHByKTsK
QEAgLTE3MzIsNyArMTczMiw3IEBAIHZvaWQgRm9ySW5Ob2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNv
ZGVHZW4KIAogICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoc2NvcGUtPmNvbnRpbnVlVGFyZ2V0KCkp
OwogICAgIGdlbmVyYXRvci5lbWl0TmV4dFByb3BlcnR5TmFtZShwcm9wZXJ0eU5hbWUsIGJhc2Uu
Z2V0KCksIGkuZ2V0KCksIHNpemUuZ2V0KCksIGl0ZXIuZ2V0KCksIGxvb3BTdGFydC5nZXQoKSk7
Ci0gICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2soV2lsbEV4ZWN1dGVTdGF0ZW1lbnQsIGZpcnN0
TGluZSgpLCBsYXN0TGluZSgpLCBzdGFydE9mZnNldCgpLCBsaW5lU3RhcnRPZmZzZXQoKSk7Cisg
ICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2soV2lsbEV4ZWN1dGVTdGF0ZW1lbnQsIGZpcnN0TGlu
ZSgpLCBzdGFydE9mZnNldCgpLCBsaW5lU3RhcnRPZmZzZXQoKSk7CiAgICAgZ2VuZXJhdG9yLmVt
aXRMYWJlbChzY29wZS0+YnJlYWtUYXJnZXQoKSk7CiB9CiAKQEAgLTE3NTQsNyArMTc1NCw3IEBA
IExhYmVsKiBDb250aW51ZU5vZGU6OnRyaXZpYWxUYXJnZXQoQnl0ZWMKIAogdm9pZCBDb250aW51
ZU5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3Rl
cklEKikKIHsKLSAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhXaWxsRXhlY3V0ZVN0YXRlbWVu
dCwgZmlyc3RMaW5lKCksIGxhc3RMaW5lKCksIHN0YXJ0T2Zmc2V0KCksIGxpbmVTdGFydE9mZnNl
dCgpKTsKKyAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhXaWxsRXhlY3V0ZVN0YXRlbWVudCwg
Zmlyc3RMaW5lKCksIHN0YXJ0T2Zmc2V0KCksIGxpbmVTdGFydE9mZnNldCgpKTsKICAgICAKICAg
ICBMYWJlbFNjb3BlKiBzY29wZSA9IGdlbmVyYXRvci5jb250aW51ZVRhcmdldChtX2lkZW50KTsK
ICAgICBBU1NFUlQoc2NvcGUpOwpAQCAtMTc4MSw3ICsxNzgxLDcgQEAgTGFiZWwqIEJyZWFrTm9k
ZTo6dHJpdmlhbFRhcmdldChCeXRlY29kZQogCiB2b2lkIEJyZWFrTm9kZTo6ZW1pdEJ5dGVjb2Rl
KEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqKQogewotICAgIGdlbmVy
YXRvci5lbWl0RGVidWdIb29rKFdpbGxFeGVjdXRlU3RhdGVtZW50LCBmaXJzdExpbmUoKSwgbGFz
dExpbmUoKSwgc3RhcnRPZmZzZXQoKSwgbGluZVN0YXJ0T2Zmc2V0KCkpOworICAgIGdlbmVyYXRv
ci5lbWl0RGVidWdIb29rKFdpbGxFeGVjdXRlU3RhdGVtZW50LCBmaXJzdExpbmUoKSwgc3RhcnRP
ZmZzZXQoKSwgbGluZVN0YXJ0T2Zmc2V0KCkpOwogICAgIAogICAgIExhYmVsU2NvcGUqIHNjb3Bl
ID0gZ2VuZXJhdG9yLmJyZWFrVGFyZ2V0KG1faWRlbnQpOwogICAgIEFTU0VSVChzY29wZSk7CkBA
IC0xNzk0LDcgKzE3OTQsNyBAQCB2b2lkIEJyZWFrTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2Rl
R2VuCiAKIHZvaWQgUmV0dXJuTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBn
ZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKLSAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9v
ayhXaWxsRXhlY3V0ZVN0YXRlbWVudCwgZmlyc3RMaW5lKCksIGxhc3RMaW5lKCksIHN0YXJ0T2Zm
c2V0KCksIGxpbmVTdGFydE9mZnNldCgpKTsKKyAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhX
aWxsRXhlY3V0ZVN0YXRlbWVudCwgZmlyc3RMaW5lKCksIHN0YXJ0T2Zmc2V0KCksIGxpbmVTdGFy
dE9mZnNldCgpKTsKICAgICBBU1NFUlQoZ2VuZXJhdG9yLmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25D
b2RlKTsKIAogICAgIGlmIChkc3QgPT0gZ2VuZXJhdG9yLmlnbm9yZWRSZXN1bHQoKSkKQEAgLTE4
MDYsNyArMTgwNiw3IEBAIHZvaWQgUmV0dXJuTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2UK
ICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQb3BTY29wZXMoMCk7CiAgICAgfQogCi0gICAgZ2VuZXJh
dG9yLmVtaXREZWJ1Z0hvb2soV2lsbExlYXZlQ2FsbEZyYW1lLCBmaXJzdExpbmUoKSwgbGFzdExp
bmUoKSwgc3RhcnRPZmZzZXQoKSwgbGluZVN0YXJ0T2Zmc2V0KCkpOworICAgIGdlbmVyYXRvci5l
bWl0RGVidWdIb29rKFdpbGxMZWF2ZUNhbGxGcmFtZSwgbGFzdExpbmUoKSwgc3RhcnRPZmZzZXQo
KSwgbGluZVN0YXJ0T2Zmc2V0KCkpOwogICAgIGdlbmVyYXRvci5lbWl0UmV0dXJuKHJldHVyblJl
Z2lzdGVyLmdldCgpKTsKIH0KIApAQCAtMTgxNCw3ICsxODE0LDcgQEAgdm9pZCBSZXR1cm5Ob2Rl
OjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZQogCiB2b2lkIFdpdGhOb2RlOjplbWl0Qnl0ZWNvZGUo
Qnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewotICAgIGdl
bmVyYXRvci5lbWl0RGVidWdIb29rKFdpbGxFeGVjdXRlU3RhdGVtZW50LCBmaXJzdExpbmUoKSwg
bGFzdExpbmUoKSwgc3RhcnRPZmZzZXQoKSwgbGluZVN0YXJ0T2Zmc2V0KCkpOworICAgIGdlbmVy
YXRvci5lbWl0RGVidWdIb29rKFdpbGxFeGVjdXRlU3RhdGVtZW50LCBmaXJzdExpbmUoKSwgc3Rh
cnRPZmZzZXQoKSwgbGluZVN0YXJ0T2Zmc2V0KCkpOwogCiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IHNjb3BlID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fZXhwcik7CiAgICAgZ2VuZXJhdG9yLmVtaXRF
eHByZXNzaW9uSW5mbyhtX2Rpdm90LCBtX2Rpdm90IC0gbV9leHByZXNzaW9uTGVuZ3RoLCBtX2Rp
dm90KTsKQEAgLTE5ODgsNyArMTk4OCw3IEBAIHZvaWQgQ2FzZUJsb2NrTm9kZTo6ZW1pdEJ5dGVj
b2RlRm9yQmxvY2sKIAogdm9pZCBTd2l0Y2hOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5l
cmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewotICAgIGdlbmVyYXRvci5lbWl0
RGVidWdIb29rKFdpbGxFeGVjdXRlU3RhdGVtZW50LCBmaXJzdExpbmUoKSwgbGFzdExpbmUoKSwg
c3RhcnRPZmZzZXQoKSwgbGluZVN0YXJ0T2Zmc2V0KCkpOworICAgIGdlbmVyYXRvci5lbWl0RGVi
dWdIb29rKFdpbGxFeGVjdXRlU3RhdGVtZW50LCBmaXJzdExpbmUoKSwgc3RhcnRPZmZzZXQoKSwg
bGluZVN0YXJ0T2Zmc2V0KCkpOwogICAgIAogICAgIExhYmVsU2NvcGVQdHIgc2NvcGUgPSBnZW5l
cmF0b3IubmV3TGFiZWxTY29wZShMYWJlbFNjb3BlOjpTd2l0Y2gpOwogCkBAIC0yMDAyLDcgKzIw
MDIsNyBAQCB2b2lkIFN3aXRjaE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlCiAKIHZvaWQg
TGFiZWxOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVn
aXN0ZXJJRCogZHN0KQogewotICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKFdpbGxFeGVjdXRl
U3RhdGVtZW50LCBmaXJzdExpbmUoKSwgbGFzdExpbmUoKSwgc3RhcnRPZmZzZXQoKSwgbGluZVN0
YXJ0T2Zmc2V0KCkpOworICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKFdpbGxFeGVjdXRlU3Rh
dGVtZW50LCBmaXJzdExpbmUoKSwgc3RhcnRPZmZzZXQoKSwgbGluZVN0YXJ0T2Zmc2V0KCkpOwog
CiAgICAgQVNTRVJUKCFnZW5lcmF0b3IuYnJlYWtUYXJnZXQobV9uYW1lKSk7CiAKQEAgLTIwMTYs
NyArMjAxNiw3IEBAIHZvaWQgTGFiZWxOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW4KIAog
dm9pZCBUaHJvd05vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9y
LCBSZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2soV2lsbEV4
ZWN1dGVTdGF0ZW1lbnQsIGZpcnN0TGluZSgpLCBsYXN0TGluZSgpLCBzdGFydE9mZnNldCgpLCBs
aW5lU3RhcnRPZmZzZXQoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2soV2lsbEV4ZWN1
dGVTdGF0ZW1lbnQsIGZpcnN0TGluZSgpLCBzdGFydE9mZnNldCgpLCBsaW5lU3RhcnRPZmZzZXQo
KSk7CiAKICAgICBpZiAoZHN0ID09IGdlbmVyYXRvci5pZ25vcmVkUmVzdWx0KCkpCiAgICAgICAg
IGRzdCA9IDA7CkBAIC0yMDMyLDcgKzIwMzIsNyBAQCB2b2lkIFRyeU5vZGU6OmVtaXRCeXRlY29k
ZShCeXRlY29kZUdlbmVyCiAgICAgLy8gTk9URTogVGhlIGNhdGNoIGFuZCBmaW5hbGx5IGJsb2Nr
cyBtdXN0IGJlIGxhYmVsZWQgZXhwbGljaXRseSwgc28gdGhlCiAgICAgLy8gb3B0aW1pemVyIGtu
b3dzIHRoZXkgbWF5IGJlIGp1bXBlZCB0byBmcm9tIGFueXdoZXJlLgogCi0gICAgZ2VuZXJhdG9y
LmVtaXREZWJ1Z0hvb2soV2lsbEV4ZWN1dGVTdGF0ZW1lbnQsIGZpcnN0TGluZSgpLCBsYXN0TGlu
ZSgpLCBzdGFydE9mZnNldCgpLCBsaW5lU3RhcnRPZmZzZXQoKSk7CisgICAgZ2VuZXJhdG9yLmVt
aXREZWJ1Z0hvb2soV2lsbEV4ZWN1dGVTdGF0ZW1lbnQsIGZpcnN0TGluZSgpLCBzdGFydE9mZnNl
dCgpLCBsaW5lU3RhcnRPZmZzZXQoKSk7CiAKICAgICBBU1NFUlQobV9jYXRjaEJsb2NrIHx8IG1f
ZmluYWxseUJsb2NrKTsKIApAQCAtMjEwMCwxMyArMjEwMCwxMyBAQCBpbmxpbmUgdm9pZCBTY29w
ZU5vZGU6OmVtaXRTdGF0ZW1lbnRzQnl0CiAKIHZvaWQgUHJvZ3JhbU5vZGU6OmVtaXRCeXRlY29k
ZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKikKIHsKLSAgICBnZW5l
cmF0b3IuZW1pdERlYnVnSG9vayhXaWxsRXhlY3V0ZVByb2dyYW0sIHN0YXJ0TGluZSgpLCBzdGFy
dExpbmUoKSwgc3RhcnRTdGFydE9mZnNldCgpLCBzdGFydExpbmVTdGFydE9mZnNldCgpKTsKKyAg
ICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhXaWxsRXhlY3V0ZVByb2dyYW0sIHN0YXJ0TGluZSgp
LCBzdGFydFN0YXJ0T2Zmc2V0KCksIHN0YXJ0TGluZVN0YXJ0T2Zmc2V0KCkpOwogCiAgICAgUmVm
UHRyPFJlZ2lzdGVySUQ+IGRzdFJlZ2lzdGVyID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOwog
ICAgIGdlbmVyYXRvci5lbWl0TG9hZChkc3RSZWdpc3Rlci5nZXQoKSwganNVbmRlZmluZWQoKSk7
CiAgICAgZW1pdFN0YXRlbWVudHNCeXRlY29kZShnZW5lcmF0b3IsIGRzdFJlZ2lzdGVyLmdldCgp
KTsKIAotICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKERpZEV4ZWN1dGVQcm9ncmFtLCBsYXN0
TGluZSgpLCBsYXN0TGluZSgpLCBzdGFydE9mZnNldCgpLCBsaW5lU3RhcnRPZmZzZXQoKSk7Cisg
ICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2soRGlkRXhlY3V0ZVByb2dyYW0sIGxhc3RMaW5lKCks
IHN0YXJ0T2Zmc2V0KCksIGxpbmVTdGFydE9mZnNldCgpKTsKICAgICBnZW5lcmF0b3IuZW1pdEVu
ZChkc3RSZWdpc3Rlci5nZXQoKSk7CiB9CiAKQEAgLTIxMTQsMTMgKzIxMTQsMTMgQEAgdm9pZCBQ
cm9ncmFtTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlRwogCiB2b2lkIEV2YWxOb2RlOjplbWl0
Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCopCiB7Ci0g
ICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2soV2lsbEV4ZWN1dGVQcm9ncmFtLCBzdGFydExpbmUo
KSwgc3RhcnRMaW5lKCksIHN0YXJ0U3RhcnRPZmZzZXQoKSwgc3RhcnRMaW5lU3RhcnRPZmZzZXQo
KSk7CisgICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2soV2lsbEV4ZWN1dGVQcm9ncmFtLCBzdGFy
dExpbmUoKSwgc3RhcnRTdGFydE9mZnNldCgpLCBzdGFydExpbmVTdGFydE9mZnNldCgpKTsKIAog
ICAgIFJlZlB0cjxSZWdpc3RlcklEPiBkc3RSZWdpc3RlciA9IGdlbmVyYXRvci5uZXdUZW1wb3Jh
cnkoKTsKICAgICBnZW5lcmF0b3IuZW1pdExvYWQoZHN0UmVnaXN0ZXIuZ2V0KCksIGpzVW5kZWZp
bmVkKCkpOwogICAgIGVtaXRTdGF0ZW1lbnRzQnl0ZWNvZGUoZ2VuZXJhdG9yLCBkc3RSZWdpc3Rl
ci5nZXQoKSk7CiAKLSAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhEaWRFeGVjdXRlUHJvZ3Jh
bSwgbGFzdExpbmUoKSwgbGFzdExpbmUoKSwgc3RhcnRPZmZzZXQoKSwgbGluZVN0YXJ0T2Zmc2V0
KCkpOworICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKERpZEV4ZWN1dGVQcm9ncmFtLCBsYXN0
TGluZSgpLCBzdGFydE9mZnNldCgpLCBsaW5lU3RhcnRPZmZzZXQoKSk7CiAgICAgZ2VuZXJhdG9y
LmVtaXRFbmQoZHN0UmVnaXN0ZXIuZ2V0KCkpOwogfQogCkBAIC0yMTI4LDcgKzIxMjgsNyBAQCB2
b2lkIEV2YWxOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lCiAKIHZvaWQgRnVuY3Rpb25C
b2R5Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lz
dGVySUQqKQogewotICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKERpZEVudGVyQ2FsbEZyYW1l
LCBzdGFydExpbmUoKSwgc3RhcnRMaW5lKCksIHN0YXJ0U3RhcnRPZmZzZXQoKSwgc3RhcnRMaW5l
U3RhcnRPZmZzZXQoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2soRGlkRW50ZXJDYWxs
RnJhbWUsIHN0YXJ0TGluZSgpLCBzdGFydFN0YXJ0T2Zmc2V0KCksIHN0YXJ0TGluZVN0YXJ0T2Zm
c2V0KCkpOwogICAgIGVtaXRTdGF0ZW1lbnRzQnl0ZWNvZGUoZ2VuZXJhdG9yLCBnZW5lcmF0b3Iu
aWdub3JlZFJlc3VsdCgpKTsKIAogICAgIFN0YXRlbWVudE5vZGUqIHNpbmdsZVN0YXRlbWVudCA9
IHRoaXMtPnNpbmdsZVN0YXRlbWVudCgpOwpAQCAtMjE0NSw3ICsyMTQ1LDcgQEAgdm9pZCBGdW5j
dGlvbkJvZHlOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZQogICAgIGlmICghcmV0dXJuTm9kZSkgewog
ICAgICAgICBSZWdpc3RlcklEKiByMCA9IGdlbmVyYXRvci5pc0NvbnN0cnVjdG9yKCkgPyBnZW5l
cmF0b3IudGhpc1JlZ2lzdGVyKCkgOiBnZW5lcmF0b3IuZW1pdExvYWQoMCwganNVbmRlZmluZWQo
KSk7CiAgICAgICAgIEFTU0VSVCgoc3RhcnRPZmZzZXQoKSAtICAxKSA+PSBsaW5lU3RhcnRPZmZz
ZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKFdpbGxMZWF2ZUNhbGxGcmFt
ZSwgbGFzdExpbmUoKSwgbGFzdExpbmUoKSwgc3RhcnRPZmZzZXQoKSAtIDEsIGxpbmVTdGFydE9m
ZnNldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2soV2lsbExlYXZlQ2FsbEZy
YW1lLCBsYXN0TGluZSgpLCBzdGFydE9mZnNldCgpIC0gMSwgbGluZVN0YXJ0T2Zmc2V0KCkpOwog
ICAgICAgICBnZW5lcmF0b3IuZW1pdFJldHVybihyMCk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuaAkocmV2aXNp
b24gMTU2MzU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDggQEAgY2xhc3MgSlNHbG9iYWxPYmplY3Q7CiBj
bGFzcyBKU1ZhbHVlOwogY2xhc3MgU291cmNlUHJvdmlkZXI7CiAKK3R5cGVkZWYgRXhlY1N0YXRl
IENhbGxGcmFtZTsKKwogY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgRGVidWdnZXIgewogcHVibGlj
OgogICAgIHZpcnR1YWwgfkRlYnVnZ2VyKCk7CkBAIC00MiwxNCArNDQsMTQgQEAgcHVibGljOgog
CiAgICAgdmlydHVhbCB2b2lkIHNvdXJjZVBhcnNlZChFeGVjU3RhdGUqLCBTb3VyY2VQcm92aWRl
ciosIGludCBlcnJvckxpbmVOdW1iZXIsIGNvbnN0IFdURjo6U3RyaW5nJiBlcnJvck1lc3NhZ2Up
ID0gMDsKIAotICAgIHZpcnR1YWwgdm9pZCBleGNlcHRpb24oY29uc3QgRGVidWdnZXJDYWxsRnJh
bWUmLCBib29sKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGF0U3RhdGVtZW50KGNvbnN0IERlYnVn
Z2VyQ2FsbEZyYW1lJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjYWxsRXZlbnQoY29uc3QgRGVi
dWdnZXJDYWxsRnJhbWUmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJldHVybkV2ZW50KGNvbnN0
IERlYnVnZ2VyQ2FsbEZyYW1lJikgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHdpbGxFeGVjdXRl
UHJvZ3JhbShjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
ZGlkRXhlY3V0ZVByb2dyYW0oY29uc3QgRGVidWdnZXJDYWxsRnJhbWUmKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIGRpZFJlYWNoQnJlYWtwb2ludChjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgZXhjZXB0aW9uKENhbGxGcmFtZSosIEpTVmFsdWUgZXhjZXB0
aW9uVmFsdWUsIGJvb2wgaGFzSGFuZGxlcikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhdFN0YXRl
bWVudChDYWxsRnJhbWUqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNhbGxFdmVudChDYWxsRnJh
bWUqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJldHVybkV2ZW50KENhbGxGcmFtZSopID0gMDsK
KworICAgIHZpcnR1YWwgdm9pZCB3aWxsRXhlY3V0ZVByb2dyYW0oQ2FsbEZyYW1lKikgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBkaWRFeGVjdXRlUHJvZ3JhbShDYWxsRnJhbWUqKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGRpZFJlYWNoQnJlYWtwb2ludChDYWxsRnJhbWUqKSA9IDA7CiAKICAgICB2
b2lkIHJlY29tcGlsZUFsbEpTRnVuY3Rpb25zKFZNKik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcAkocmV2aXNp
b24gMTU2MzU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2Fs
bEZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIklu
dGVycHJldGVyLmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIlBhcnNlci5o
IgorI2luY2x1ZGUgIlN0YWNrVmlzaXRvci5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtNDIs
NiArNDMsMzAgQEAgaW50cHRyX3QgRGVidWdnZXJDYWxsRnJhbWU6OnNvdXJjZUlkKCkgYwogICAg
IHJldHVybiBtX2NhbGxGcmFtZS0+Y29kZUJsb2NrKCktPm93bmVyRXhlY3V0YWJsZSgpLT5zb3Vy
Y2VJRCgpOwogfQogCitjbGFzcyBMaW5lQW5kQ29sdW1uRnVuY3RvciB7CitwdWJsaWM6CisgICAg
U3RhY2tWaXNpdG9yOjpTdGF0dXMgb3BlcmF0b3IoKShTdGFja1Zpc2l0b3ImIHZpc2l0b3IpCisg
ICAgeworICAgICAgICB2aXNpdG9yLT5jb21wdXRlTGluZUFuZENvbHVtbihtX2xpbmUsIG1fY29s
dW1uKTsKKyAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsKKyAgICB9CisKKyAgICB1
bnNpZ25lZCBsaW5lKCkgY29uc3QgeyByZXR1cm4gbV9saW5lOyB9CisgICAgdW5zaWduZWQgY29s
dW1uKCkgY29uc3QgeyByZXR1cm4gbV9jb2x1bW47IH0KKworcHJpdmF0ZToKKyAgICB1bnNpZ25l
ZCBtX2xpbmU7CisgICAgdW5zaWduZWQgbV9jb2x1bW47Cit9OworCit2b2lkIERlYnVnZ2VyQ2Fs
bEZyYW1lOjpjb21wdXRlTGluZUFuZENvbHVtbih1bnNpZ25lZCYgbGluZSwgdW5zaWduZWQmIGNv
bHVtbikgY29uc3QKK3sKKyAgICBMaW5lQW5kQ29sdW1uRnVuY3RvciBmdW5jdG9yOworICAgIG1f
Y2FsbEZyYW1lLT5pdGVyYXRlKGZ1bmN0b3IpOworICAgIGxpbmUgPSBmdW5jdG9yLmxpbmUoKTsK
KyAgICBjb2x1bW4gPSBmdW5jdG9yLmNvbHVtbigpOworfQorCiBTdHJpbmcgRGVidWdnZXJDYWxs
RnJhbWU6OmZ1bmN0aW9uTmFtZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2NhbGxGcmFtZS0+Y29k
ZUJsb2NrKCkpCkBAIC0xMTQsNyArMTM5LDYgQEAgSlNWYWx1ZSBEZWJ1Z2dlckNhbGxGcmFtZTo6
ZXZhbHVhdGUoY29ucwogdm9pZCBEZWJ1Z2dlckNhbGxGcmFtZTo6Y2xlYXIoKQogewogICAgIG1f
Y2FsbEZyYW1lID0gMDsKLSAgICBtX2V4Y2VwdGlvbiA9IEpTVmFsdWUoKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdn
ZXJDYWxsRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdn
ZXIvRGVidWdnZXJDYWxsRnJhbWUuaAkocmV2aXNpb24gMTU2MzU2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM3LDI1ICszNywyNiBAQCBjbGFzcyBEZWJ1Z2dlckNhbGxGcmFtZSB7CiBwdWJsaWM6CiAgICAg
ZW51bSBUeXBlIHsgUHJvZ3JhbVR5cGUsIEZ1bmN0aW9uVHlwZSB9OwogCi0gICAgRGVidWdnZXJD
YWxsRnJhbWUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIGludCBsaW5lLCBpbnQgY29sdW1uKQorICAg
IGV4cGxpY2l0IERlYnVnZ2VyQ2FsbEZyYW1lKENhbGxGcmFtZSogY2FsbEZyYW1lKQogICAgICAg
ICA6IG1fY2FsbEZyYW1lKGNhbGxGcmFtZSkKLSAgICAgICAgLCBtX2xpbmUobGluZSkKLSAgICAg
ICAgLCBtX2NvbHVtbihjb2x1bW4pCi0gICAgewotICAgIH0KLQotICAgIERlYnVnZ2VyQ2FsbEZy
YW1lKENhbGxGcmFtZSogY2FsbEZyYW1lLCBpbnQgbGluZSwgaW50IGNvbHVtbiwgSlNWYWx1ZSBl
eGNlcHRpb24pCi0gICAgICAgIDogbV9jYWxsRnJhbWUoY2FsbEZyYW1lKQotICAgICAgICAsIG1f
bGluZShsaW5lKQotICAgICAgICAsIG1fY29sdW1uKGNvbHVtbikKLSAgICAgICAgLCBtX2V4Y2Vw
dGlvbihleGNlcHRpb24pCiAgICAgewogICAgIH0KIAogICAgIENhbGxGcmFtZSogY2FsbEZyYW1l
KCkgY29uc3QgeyByZXR1cm4gbV9jYWxsRnJhbWU7IH0KICAgICBKU19FWFBPUlRfUFJJVkFURSBp
bnRwdHJfdCBzb3VyY2VJZCgpIGNvbnN0OwotICAgIGludCBsaW5lKCkgY29uc3QgeyByZXR1cm4g
bV9saW5lOyB9Ci0gICAgaW50IGNvbHVtbigpIGNvbnN0IHsgcmV0dXJuIG1fY29sdW1uOyB9Cisg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBjb21wdXRlTGluZUFuZENvbHVtbih1bnNpZ25lZCYg
bGluZSwgdW5zaWduZWQmIGNvbHVtbikgY29uc3Q7CisgICAgdW5zaWduZWQgbGluZSgpIGNvbnN0
CisgICAgeworICAgICAgICB1bnNpZ25lZCBsaW5lLCBjb2x1bW47CisgICAgICAgIGNvbXB1dGVM
aW5lQW5kQ29sdW1uKGxpbmUsIGNvbHVtbik7CisgICAgICAgIHJldHVybiBsaW5lOworICAgIH0K
KyAgICB1bnNpZ25lZCBjb2x1bW4oKSBjb25zdAorICAgIHsKKyAgICAgICAgdW5zaWduZWQgbGlu
ZSwgY29sdW1uOworICAgICAgICBjb21wdXRlTGluZUFuZENvbHVtbihsaW5lLCBjb2x1bW4pOwor
ICAgICAgICByZXR1cm4gY29sdW1uOworICAgIH0KICAgICBKU0dsb2JhbE9iamVjdCogZHluYW1p
Y0dsb2JhbE9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbEZyYW1lLT5keW5hbWljR2xvYmFs
T2JqZWN0KCk7IH0KICAgICBKU1Njb3BlKiBzY29wZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbEZy
YW1lLT5zY29wZSgpOyB9CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RyaW5nIGZ1bmN0aW9uTmFt
ZSgpIGNvbnN0OwpAQCAtNjMsMTUgKzY0LDExIEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJ
VkFURSBUeXBlIHR5cGUoKSBjb25zdDsKICAgICBKU19FWFBPUlRfUFJJVkFURSBKU09iamVjdCog
dGhpc09iamVjdCgpIGNvbnN0OwogICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTVmFsdWUgZXZhbHVh
dGUoY29uc3QgU3RyaW5nJiwgSlNWYWx1ZSYgZXhjZXB0aW9uKSBjb25zdDsKLSAgICBKU1ZhbHVl
IGV4Y2VwdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZXhjZXB0aW9uOyB9CiAKICAgICB2b2lkIGNs
ZWFyKCk7CiAKIHByaXZhdGU6CiAgICAgQ2FsbEZyYW1lKiBtX2NhbGxGcmFtZTsKLSAgICBpbnQg
bV9saW5lOwotICAgIGludCBtX2NvbHVtbjsKLSAgICBKU1ZhbHVlIG1fZXhjZXB0aW9uOwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHJldmlzaW9uIDE1NjM1NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM4OSw3ICszODksNyBAQCBib29sIEludGVycHJldGVyOjppc09wY29kZShPcGNvZGUg
b3Bjb2RlCiAjZW5kaWYKIH0KIAotc3RhdGljIGJvb2wgdW53aW5kQ2FsbEZyYW1lKFN0YWNrVmlz
aXRvciYgdmlzaXRvciwgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSkKK3N0YXRpYyBib29sIHVud2lu
ZENhbGxGcmFtZShTdGFja1Zpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUgPSB2aXNpdG9yLT5jYWxsRnJhbWUoKTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IHZpc2l0b3ItPmNvZGVCbG9jaygpOwpAQCAtMzk3LDEyICszOTcsMTAgQEAgc3RhdGljIGJvb2wg
dW53aW5kQ2FsbEZyYW1lKFN0YWNrVmlzaXRvcgogICAgIEpTU2NvcGUqIHNjb3BlID0gY2FsbEZy
YW1lLT5zY29wZSgpOwogCiAgICAgaWYgKERlYnVnZ2VyKiBkZWJ1Z2dlciA9IGNhbGxGcmFtZS0+
ZHluYW1pY0dsb2JhbE9iamVjdCgpLT5kZWJ1Z2dlcigpKSB7Ci0gICAgICAgIGludCBsaW5lID0g
Y29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+bGFzdExpbmUoKTsKLSAgICAgICAgRGVidWdn
ZXJDYWxsRnJhbWUgZGVidWdnZXJDYWxsRnJhbWUoY2FsbEZyYW1lLCBsaW5lLCAwLCBleGNlcHRp
b25WYWx1ZSk7CiAgICAgICAgIGlmIChjYWxsRnJhbWUtPmNhbGxlZSgpKQotICAgICAgICAgICAg
ZGVidWdnZXItPnJldHVybkV2ZW50KGRlYnVnZ2VyQ2FsbEZyYW1lKTsKKyAgICAgICAgICAgIGRl
YnVnZ2VyLT5yZXR1cm5FdmVudChjYWxsRnJhbWUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBkZWJ1Z2dlci0+ZGlkRXhlY3V0ZVByb2dyYW0oZGVidWdnZXJDYWxsRnJhbWUpOworICAgICAg
ICAgICAgZGVidWdnZXItPmRpZEV4ZWN1dGVQcm9ncmFtKGNhbGxGcmFtZSk7CiAgICAgfQogCiAg
ICAgSlNWYWx1ZSBhY3RpdmF0aW9uOwpAQCAtNjAzLDkgKzYwMSw4IEBAIHByaXZhdGU6CiAKIGNs
YXNzIFVud2luZEZ1bmN0b3IgewogcHVibGljOgotICAgIFVud2luZEZ1bmN0b3IoQ2FsbEZyYW1l
KiYgY2FsbEZyYW1lLCBKU1ZhbHVlJiBleGNlcHRpb25WYWx1ZSwgYm9vbCBpc1Rlcm1pbmF0aW9u
LCBDb2RlQmxvY2sqJiBjb2RlQmxvY2ssIEhhbmRsZXJJbmZvKiYgaGFuZGxlcikKKyAgICBVbndp
bmRGdW5jdG9yKENhbGxGcmFtZSomIGNhbGxGcmFtZSwgYm9vbCBpc1Rlcm1pbmF0aW9uLCBDb2Rl
QmxvY2sqJiBjb2RlQmxvY2ssIEhhbmRsZXJJbmZvKiYgaGFuZGxlcikKICAgICAgICAgOiBtX2Nh
bGxGcmFtZShjYWxsRnJhbWUpCi0gICAgICAgICwgbV9leGNlcHRpb25WYWx1ZShleGNlcHRpb25W
YWx1ZSkKICAgICAgICAgLCBtX2lzVGVybWluYXRpb24oaXNUZXJtaW5hdGlvbikKICAgICAgICAg
LCBtX2NvZGVCbG9jayhjb2RlQmxvY2spCiAgICAgICAgICwgbV9oYW5kbGVyKGhhbmRsZXIpCkBA
IC02MjAsNyArNjE3LDcgQEAgcHVibGljOgogICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNl
dCA9IHZpc2l0b3ItPmJ5dGVjb2RlT2Zmc2V0KCk7CiAKICAgICAgICAgaWYgKG1faXNUZXJtaW5h
dGlvbiB8fCAhKG1faGFuZGxlciA9IG1fY29kZUJsb2NrLT5oYW5kbGVyRm9yQnl0ZWNvZGVPZmZz
ZXQoYnl0ZWNvZGVPZmZzZXQpKSkgewotICAgICAgICAgICAgaWYgKCF1bndpbmRDYWxsRnJhbWUo
dmlzaXRvciwgbV9leGNlcHRpb25WYWx1ZSkpIHsKKyAgICAgICAgICAgIGlmICghdW53aW5kQ2Fs
bEZyYW1lKHZpc2l0b3IpKSB7CiAgICAgICAgICAgICAgICAgaWYgKExlZ2FjeVByb2ZpbGVyKiBw
cm9maWxlciA9IHZtLmVuYWJsZWRQcm9maWxlcigpKQogICAgICAgICAgICAgICAgICAgICBwcm9m
aWxlci0+ZXhjZXB0aW9uVW53aW5kKG1fY2FsbEZyYW1lKTsKICAgICAgICAgICAgICAgICByZXR1
cm4gU3RhY2tWaXNpdG9yOjpEb25lOwpAQCAtNjMzLDcgKzYzMCw2IEBAIHB1YmxpYzoKIAogcHJp
dmF0ZToKICAgICBDYWxsRnJhbWUqJiBtX2NhbGxGcmFtZTsKLSAgICBKU1ZhbHVlJiBtX2V4Y2Vw
dGlvblZhbHVlOwogICAgIGJvb2wgbV9pc1Rlcm1pbmF0aW9uOwogICAgIENvZGVCbG9jayomIG1f
Y29kZUJsb2NrOwogICAgIEhhbmRsZXJJbmZvKiYgbV9oYW5kbGVyOwpAQCAtNjY2LDEwICs2NjIs
NiBAQCBORVZFUl9JTkxJTkUgSGFuZGxlckluZm8qIEludGVycHJldGVyOjp1CiAgICAgICAgIC8v
IElmIHRoYXQgYXNzdW1wdGlvbiB0dXJucyBvdXQgdG8gYmUgZmFsc2UgdGhlbiB3ZSdsbCBpZ25v
cmUgdGhlIGlubGluZWQgY2FsbAogICAgICAgICAvLyBmcmFtZXMuCiAgICAgICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjE3NTQKLSAgICAgICAgdW5zaWdu
ZWQgYnl0ZWNvZGVPZmZzZXQgPSBjYWxsRnJhbWUtPmJ5dGVjb2RlT2Zmc2V0KCk7Ci0gICAgICAg
IGludCBsaW5lID0gY29kZUJsb2NrLT5saW5lTnVtYmVyRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNv
ZGVPZmZzZXQpOwotICAgICAgICBpbnQgY29sdW1uID0gY29kZUJsb2NrLT5jb2x1bW5OdW1iZXJG
b3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCk7Ci0gICAgICAgIERlYnVnZ2VyQ2FsbEZy
YW1lIGRlYnVnZ2VyQ2FsbEZyYW1lKGNhbGxGcmFtZSwgbGluZSwgY29sdW1uLCBleGNlcHRpb25W
YWx1ZSk7CiAKICAgICAgICAgYm9vbCBoYXNIYW5kbGVyOwogICAgICAgICBpZiAoaXNUZXJtaW5h
dGlvbikKQEAgLTY4MCwxNCArNjcyLDE0IEBAIE5FVkVSX0lOTElORSBIYW5kbGVySW5mbyogSW50
ZXJwcmV0ZXI6OnUKICAgICAgICAgICAgIGhhc0hhbmRsZXIgPSAhIWZ1bmN0b3IuaGFuZGxlcigp
OwogICAgICAgICB9CiAKLSAgICAgICAgZGVidWdnZXItPmV4Y2VwdGlvbihkZWJ1Z2dlckNhbGxG
cmFtZSwgaGFzSGFuZGxlcik7CisgICAgICAgIGRlYnVnZ2VyLT5leGNlcHRpb24oY2FsbEZyYW1l
LCBleGNlcHRpb25WYWx1ZSwgaGFzSGFuZGxlcik7CiAgICAgfQogCiAgICAgLy8gQ2FsY3VsYXRl
IGFuIGV4Y2VwdGlvbiBoYW5kbGVyIHZQQywgdW53aW5kaW5nIGNhbGwgZnJhbWVzIGFzIG5lY2Vz
c2FyeS4KICAgICBIYW5kbGVySW5mbyogaGFuZGxlciA9IDA7CiAgICAgVk0mIHZtID0gY2FsbEZy
YW1lLT52bSgpOwogICAgIEFTU0VSVChjYWxsRnJhbWUgPT0gdm0udG9wQ2FsbEZyYW1lKTsKLSAg
ICBVbndpbmRGdW5jdG9yIGZ1bmN0b3IoY2FsbEZyYW1lLCBleGNlcHRpb25WYWx1ZSwgaXNUZXJt
aW5hdGlvbiwgY29kZUJsb2NrLCBoYW5kbGVyKTsKKyAgICBVbndpbmRGdW5jdG9yIGZ1bmN0b3Io
Y2FsbEZyYW1lLCBpc1Rlcm1pbmF0aW9uLCBjb2RlQmxvY2ssIGhhbmRsZXIpOwogICAgIGNhbGxG
cmFtZS0+aXRlcmF0ZShmdW5jdG9yKTsKICAgICBpZiAoIWhhbmRsZXIpCiAgICAgICAgIHJldHVy
biAwOwpAQCAtMTI2MCw3ICsxMjUyLDcgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShF
dmFsRXhlY3V0YQogICAgIHJldHVybiBjaGVja2VkUmV0dXJuKHJlc3VsdCk7CiB9CiAKLU5FVkVS
X0lOTElORSB2b2lkIEludGVycHJldGVyOjpkZWJ1ZyhDYWxsRnJhbWUqIGNhbGxGcmFtZSwgRGVi
dWdIb29rSUQgZGVidWdIb29rSUQsIGludCBmaXJzdExpbmUsIGludCBsYXN0TGluZSwgaW50IGNv
bHVtbikKK05FVkVSX0lOTElORSB2b2lkIEludGVycHJldGVyOjpkZWJ1ZyhDYWxsRnJhbWUqIGNh
bGxGcmFtZSwgRGVidWdIb29rSUQgZGVidWdIb29rSUQpCiB7CiAgICAgRGVidWdnZXIqIGRlYnVn
Z2VyID0gY2FsbEZyYW1lLT5keW5hbWljR2xvYmFsT2JqZWN0KCktPmRlYnVnZ2VyKCk7CiAgICAg
aWYgKCFkZWJ1Z2dlcikKQEAgLTEyNjgsMjIgKzEyNjAsMjIgQEAgTkVWRVJfSU5MSU5FIHZvaWQg
SW50ZXJwcmV0ZXI6OmRlYnVnKENhbAogCiAgICAgc3dpdGNoIChkZWJ1Z0hvb2tJRCkgewogICAg
ICAgICBjYXNlIERpZEVudGVyQ2FsbEZyYW1lOgotICAgICAgICAgICAgZGVidWdnZXItPmNhbGxF
dmVudChEZWJ1Z2dlckNhbGxGcmFtZShjYWxsRnJhbWUsIGZpcnN0TGluZSwgY29sdW1uKSk7Cisg
ICAgICAgICAgICBkZWJ1Z2dlci0+Y2FsbEV2ZW50KGNhbGxGcmFtZSk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIGNhc2UgV2lsbExlYXZlQ2FsbEZyYW1lOgotICAgICAgICAgICAgZGVi
dWdnZXItPnJldHVybkV2ZW50KERlYnVnZ2VyQ2FsbEZyYW1lKGNhbGxGcmFtZSwgbGFzdExpbmUs
IGNvbHVtbikpOworICAgICAgICAgICAgZGVidWdnZXItPnJldHVybkV2ZW50KGNhbGxGcmFtZSk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNhc2UgV2lsbEV4ZWN1dGVTdGF0ZW1lbnQ6
Ci0gICAgICAgICAgICBkZWJ1Z2dlci0+YXRTdGF0ZW1lbnQoRGVidWdnZXJDYWxsRnJhbWUoY2Fs
bEZyYW1lLCBmaXJzdExpbmUsIGNvbHVtbikpOworICAgICAgICAgICAgZGVidWdnZXItPmF0U3Rh
dGVtZW50KGNhbGxGcmFtZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNhc2UgV2ls
bEV4ZWN1dGVQcm9ncmFtOgotICAgICAgICAgICAgZGVidWdnZXItPndpbGxFeGVjdXRlUHJvZ3Jh
bShEZWJ1Z2dlckNhbGxGcmFtZShjYWxsRnJhbWUsIGZpcnN0TGluZSwgY29sdW1uKSk7CisgICAg
ICAgICAgICBkZWJ1Z2dlci0+d2lsbEV4ZWN1dGVQcm9ncmFtKGNhbGxGcmFtZSk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIGNhc2UgRGlkRXhlY3V0ZVByb2dyYW06Ci0gICAgICAgICAg
ICBkZWJ1Z2dlci0+ZGlkRXhlY3V0ZVByb2dyYW0oRGVidWdnZXJDYWxsRnJhbWUoY2FsbEZyYW1l
LCBsYXN0TGluZSwgY29sdW1uKSk7CisgICAgICAgICAgICBkZWJ1Z2dlci0+ZGlkRXhlY3V0ZVBy
b2dyYW0oY2FsbEZyYW1lKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2FzZSBEaWRS
ZWFjaEJyZWFrcG9pbnQ6Ci0gICAgICAgICAgICBkZWJ1Z2dlci0+ZGlkUmVhY2hCcmVha3BvaW50
KERlYnVnZ2VyQ2FsbEZyYW1lKGNhbGxGcmFtZSwgbGFzdExpbmUsIGNvbHVtbikpOworICAgICAg
ICAgICAgZGVidWdnZXItPmRpZFJlYWNoQnJlYWtwb2ludChjYWxsRnJhbWUpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIH0gICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAkocmV2aXNpb24gMTU2MzU2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTIzOSw3ICsyMzksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBpc0luRXJy
b3JIYW5kbGluZ01vZGUoKSB7IHJldHVybiBtX2Vycm9ySGFuZGxpbmdNb2RlUmVlbnRyeTsgfQog
CiAgICAgICAgIE5FVkVSX0lOTElORSBIYW5kbGVySW5mbyogdW53aW5kKENhbGxGcmFtZSomLCBK
U1ZhbHVlJik7Ci0gICAgICAgIE5FVkVSX0lOTElORSB2b2lkIGRlYnVnKENhbGxGcmFtZSosIERl
YnVnSG9va0lELCBpbnQgZmlyc3RMaW5lLCBpbnQgbGFzdExpbmUsIGludCBjb2x1bW4pOworICAg
ICAgICBORVZFUl9JTkxJTkUgdm9pZCBkZWJ1ZyhDYWxsRnJhbWUqLCBEZWJ1Z0hvb2tJRCk7CiAg
ICAgICAgIEpTU3RyaW5nKiBzdGFja1RyYWNlQXNTdHJpbmcoRXhlY1N0YXRlKiwgVmVjdG9yPFN0
YWNrRnJhbWU+KTsKIAogICAgICAgICBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBjb25zdHJ1Y3RXaXRoRXJyb3JDb25zdHJ1Y3RvcihFeGVjU3RhdGUqKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJldmlzaW9uIDE1
NjM1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTA4Myw5ICsxMDgzLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVi
dWcoSW5zdHJ1Y3Rpb24qIGN1cgogI2Vsc2UKICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlz
LCBjdGlfb3BfZGVidWcpOwogICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KEltbTMyKGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChJbW0z
MihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSk7Ci0gICAgc3R1YkNhbGwuYWRkQXJn
dW1lbnQoSW1tMzIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkpOwotICAgIHN0dWJD
YWxsLmFkZEFyZ3VtZW50KEltbTMyKGN1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQpKTsK
ICAgICBzdHViQ2FsbC5jYWxsKCk7CiAjZW5kaWYKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMTU2MzU2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzU3LDkgKzc1
Nyw2IEBAIHZvaWQgSklUOjplbWl0X29wX2RlYnVnKEluc3RydWN0aW9uKiBjdXIKICNlbHNlCiAg
ICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX2RlYnVnKTsKICAgICBzdHViQ2Fs
bC5hZGRBcmd1bWVudChUcnVzdGVkSW1tMzIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZCkpOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW0zMihjdXJyZW50SW5zdHJ1
Y3Rpb25bMl0udS5vcGVyYW5kKSk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZElt
bTMyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKTsKLSAgICBzdHViQ2FsbC5hZGRB
cmd1bWVudChUcnVzdGVkSW1tMzIoY3VycmVudEluc3RydWN0aW9uWzRdLnUub3BlcmFuZCkpOwog
ICAgIHN0dWJDYWxsLmNhbGwoKTsKICNlbmRpZgogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRTdHVicy5jcHAJKHJldmlzaW9uIDE1NjM1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTQ3LDExICsyMTQ3LDcg
QEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3BfZGVidWcpCiAgICAgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsKIAogICAgIGludCBkZWJ1Z0hvb2tJRCA9
IHN0YWNrRnJhbWUuYXJnc1swXS5pbnQzMigpOwotICAgIGludCBmaXJzdExpbmUgPSBzdGFja0Zy
YW1lLmFyZ3NbMV0uaW50MzIoKTsKLSAgICBpbnQgbGFzdExpbmUgPSBzdGFja0ZyYW1lLmFyZ3Nb
Ml0uaW50MzIoKTsKLSAgICBpbnQgY29sdW1uID0gc3RhY2tGcmFtZS5hcmdzWzNdLmludDMyKCk7
Ci0KLSAgICBzdGFja0ZyYW1lLnZtLT5pbnRlcnByZXRlci0+ZGVidWcoY2FsbEZyYW1lLCBzdGF0
aWNfY2FzdDxEZWJ1Z0hvb2tJRD4oZGVidWdIb29rSUQpLCBmaXJzdExpbmUsIGxhc3RMaW5lLCBj
b2x1bW4pOworICAgIHN0YWNrRnJhbWUudm0tPmludGVycHJldGVyLT5kZWJ1ZyhjYWxsRnJhbWUs
IHN0YXRpY19jYXN0PERlYnVnSG9va0lEPihkZWJ1Z0hvb2tJRCkpOwogfQogCiBERUZJTkVfU1RV
Ql9GVU5DVElPTih2b2lkKiwgdm1fdGhyb3cpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDE1NjM1NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEyMzksMTEgKzEyMzksNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfZGVi
dWcpCiB7CiAgICAgTExJTlRfQkVHSU4oKTsKICAgICBpbnQgZGVidWdIb29rSUQgPSBwY1sxXS51
Lm9wZXJhbmQ7Ci0gICAgaW50IGZpcnN0TGluZSA9IHBjWzJdLnUub3BlcmFuZDsKLSAgICBpbnQg
bGFzdExpbmUgPSBwY1szXS51Lm9wZXJhbmQ7Ci0gICAgaW50IGNvbHVtbiA9IHBjWzRdLnUub3Bl
cmFuZDsKLQotICAgIHZtLmludGVycHJldGVyLT5kZWJ1ZyhleGVjLCBzdGF0aWNfY2FzdDxEZWJ1
Z0hvb2tJRD4oZGVidWdIb29rSUQpLCBmaXJzdExpbmUsIGxhc3RMaW5lLCBjb2x1bW4pOworICAg
IHZtLmludGVycHJldGVyLT5kZWJ1ZyhleGVjLCBzdGF0aWNfY2FzdDxEZWJ1Z0hvb2tJRD4oZGVi
dWdIb29rSUQpKTsKICAgICAKICAgICBMTElOVF9FTkQoKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHJldmlz
aW9uIDE1NjM1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVy
cHJldGVyLmFzbQkod29ya2luZyBjb3B5KQpAQCAtNzk1LDcgKzc5NSw3IEBAIF9sbGludF9vcF9w
cm9maWxlX2RpZF9jYWxsOgogX2xsaW50X29wX2RlYnVnOgogICAgIHRyYWNlRXhlY3V0aW9uKCkK
ICAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF9kZWJ1ZykKLSAgICBkaXNwYXRjaCg1
KQorICAgIGRpc3BhdGNoKDIpCiAKIAogX2xsaW50X25hdGl2ZV9jYWxsX3RyYW1wb2xpbmU6Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNTYzNTYpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzMSBAQAorMjAxMy0wOS0yNCAgTWFyayBMYW0g
IDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAgQ2hhbmdlIEpTQyBkZWJ1ZyBob29rcyB0
byBwYXNzIGEgQ2FsbEZyYW1lKiBpbnN0ZWFkIG9mIGEgRGVidWdnZXJDYWxsRnJhbWUuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjE4NjcuCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3Rz
IChPT1BTISkuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KYXZhU2NyaXB0Q2FsbEZyYW1lLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkphdmFTY3JpcHRDYWxsRnJhbWU6OkphdmFTY3JpcHRDYWxs
RnJhbWUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0phdmFTY3JpcHRDYWxsRnJhbWUuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkphdmFTY3JpcHRDYWxsRnJhbWU6OmNyZWF0ZSk6CisgICAgICAgICog
YmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
aXB0RGVidWdTZXJ2ZXI6OmNyZWF0ZUNhbGxGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jp
cHREZWJ1Z1NlcnZlcjo6dXBkYXRlQ2FsbEZyYW1lQW5kUGF1c2VJZk5lZWRlZCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6Y2FsbEV2ZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcmlwdERlYnVnU2VydmVyOjphdFN0YXRlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JpcHREZWJ1Z1NlcnZlcjo6cmV0dXJuRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0
RGVidWdTZXJ2ZXI6OmV4Y2VwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1Nl
cnZlcjo6d2lsbEV4ZWN1dGVQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVn
U2VydmVyOjpkaWRFeGVjdXRlUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1
Z1NlcnZlcjo6ZGlkUmVhY2hCcmVha3BvaW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3Jp
cHREZWJ1Z1NlcnZlci5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1dvcmtlclNjcmlwdERlYnVn
U2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclNjcmlwdERlYnVnU2VydmVyOjp3
aWxsRXhlY3V0ZVByb2dyYW0pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1dvcmtlclNjcmlwdERl
YnVnU2VydmVyLmg6CisKIDIwMTMtMDktMjQgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUu
Y29tPgogCiAgICAgICAgIFRpZ2h0ZW4gdGFibGUgcmVuZGVyaW5nIGNvZGUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0phdmFTY3JpcHRDYWxsRnJhbWUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0phdmFTY3JpcHRDYWxsRnJhbWUuY3BwCShy
ZXZpc2lvbiAxNTYzNTYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KYXZhU2NyaXB0
Q2FsbEZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsOCArNDMsOCBAQCB1c2luZyBuYW1l
c3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCi1KYXZhU2NyaXB0Q2FsbEZy
YW1lOjpKYXZhU2NyaXB0Q2FsbEZyYW1lKGNvbnN0IERlYnVnZ2VyQ2FsbEZyYW1lJiBkZWJ1Z2dl
ckNhbGxGcmFtZSwgUGFzc1JlZlB0cjxKYXZhU2NyaXB0Q2FsbEZyYW1lPiBjYWxsZXIpCi0gICAg
OiBtX2RlYnVnZ2VyQ2FsbEZyYW1lKGRlYnVnZ2VyQ2FsbEZyYW1lKQorSmF2YVNjcmlwdENhbGxG
cmFtZTo6SmF2YVNjcmlwdENhbGxGcmFtZShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgUGFzc1JlZlB0
cjxKYXZhU2NyaXB0Q2FsbEZyYW1lPiBjYWxsZXIpCisgICAgOiBtX2RlYnVnZ2VyQ2FsbEZyYW1l
KGNhbGxGcmFtZSkKICAgICAsIG1fY2FsbGVyKGNhbGxlcikKICAgICAsIG1faXNWYWxpZCh0cnVl
KQogewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSmF2YVNjcmlwdENhbGxGcmFt
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0phdmFTY3JpcHRD
YWxsRnJhbWUuaAkocmV2aXNpb24gMTU2MzU2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSmF2YVNjcmlwdENhbGxGcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw5ICszOSw5IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSmF2YVNjcmlwdENhbGxGcmFtZSA6IHB1Ymxp
YyBSZWZDb3VudGVkPEphdmFTY3JpcHRDYWxsRnJhbWU+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UGFzc1JlZlB0cjxKYXZhU2NyaXB0Q2FsbEZyYW1lPiBjcmVhdGUoY29uc3QgSlNDOjpEZWJ1Z2dl
ckNhbGxGcmFtZSYgZGVidWdnZXJDYWxsRnJhbWUsIFBhc3NSZWZQdHI8SmF2YVNjcmlwdENhbGxG
cmFtZT4gY2FsbGVyKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEphdmFTY3JpcHRDYWxsRnJhbWU+
IGNyZWF0ZShKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCBQYXNzUmVmUHRyPEphdmFTY3JpcHRD
YWxsRnJhbWU+IGNhbGxlcikKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSmF2
YVNjcmlwdENhbGxGcmFtZShkZWJ1Z2dlckNhbGxGcmFtZSwgY2FsbGVyKSk7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgSmF2YVNjcmlwdENhbGxGcmFtZShjYWxsRnJhbWUsIGNhbGxlcikp
OwogICAgIH0KIAogICAgIHZvaWQgaW52YWxpZGF0ZSgpCkBAIC04Niw3ICs4Niw3IEBAIHB1Ymxp
YzoKICAgICBKU0M6OkpTVmFsdWUgZXZhbHVhdGUoY29uc3QgU3RyaW5nJiBzY3JpcHQsIEpTQzo6
SlNWYWx1ZSYgZXhjZXB0aW9uKSBjb25zdDsKICAgICAKIHByaXZhdGU6Ci0gICAgSmF2YVNjcmlw
dENhbGxGcmFtZShjb25zdCBKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lJiwgUGFzc1JlZlB0cjxKYXZh
U2NyaXB0Q2FsbEZyYW1lPiBjYWxsZXIpOworICAgIEphdmFTY3JpcHRDYWxsRnJhbWUoSlNDOjpD
YWxsRnJhbWUqLCBQYXNzUmVmUHRyPEphdmFTY3JpcHRDYWxsRnJhbWU+IGNhbGxlcik7CiAKICAg
ICBKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lIG1fZGVidWdnZXJDYWxsRnJhbWU7CiAgICAgUmVmUHRy
PEphdmFTY3JpcHRDYWxsRnJhbWU+IG1fY2FsbGVyOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmNwcAkocmV2aXNpb24gMTU2MzU2KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MjksMjQgKzQyOSwyNCBAQCB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpk
aXNwYXRjaEZ1bmN0aW9uCiAgICAgbV9jYWxsaW5nTGlzdGVuZXJzID0gZmFsc2U7CiB9CiAKLXZv
aWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmNyZWF0ZUNhbGxGcmFtZShjb25zdCBEZWJ1Z2dlckNhbGxG
cmFtZSYgZGVidWdnZXJDYWxsRnJhbWUpCit2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpjcmVhdGVD
YWxsRnJhbWUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgaW50cHRyX3Qgc291cmNlSWQg
PSBkZWJ1Z2dlckNhbGxGcmFtZS5zb3VyY2VJZCgpOwotICAgIG1fY3VycmVudENhbGxGcmFtZSA9
IEphdmFTY3JpcHRDYWxsRnJhbWU6OmNyZWF0ZShkZWJ1Z2dlckNhbGxGcmFtZSwgbV9jdXJyZW50
Q2FsbEZyYW1lKTsKKyAgICBtX2N1cnJlbnRDYWxsRnJhbWUgPSBKYXZhU2NyaXB0Q2FsbEZyYW1l
OjpjcmVhdGUoY2FsbEZyYW1lLCBtX2N1cnJlbnRDYWxsRnJhbWUpOworICAgIGludHB0cl90IHNv
dXJjZUlkID0gbV9jdXJyZW50Q2FsbEZyYW1lLT5zb3VyY2VJRCgpOwogICAgIGlmIChtX2xhc3RF
eGVjdXRlZFNvdXJjZUlkICE9IHNvdXJjZUlkKSB7CiAgICAgICAgIG1fbGFzdEV4ZWN1dGVkTGlu
ZSA9IC0xOwogICAgICAgICBtX2xhc3RFeGVjdXRlZFNvdXJjZUlkID0gc291cmNlSWQ7CiAgICAg
fQogfQogCi12b2lkIFNjcmlwdERlYnVnU2VydmVyOjp1cGRhdGVDYWxsRnJhbWVBbmRQYXVzZUlm
TmVlZGVkKGNvbnN0IERlYnVnZ2VyQ2FsbEZyYW1lJiBkZWJ1Z2dlckNhbGxGcmFtZSkKK3ZvaWQg
U2NyaXB0RGVidWdTZXJ2ZXI6OnVwZGF0ZUNhbGxGcmFtZUFuZFBhdXNlSWZOZWVkZWQoQ2FsbEZy
YW1lKiBjYWxsRnJhbWUpCiB7CiAgICAgLy8gQVNTRVJUKG1fY3VycmVudENhbGxGcmFtZSk7CiAg
ICAgaWYgKCFtX2N1cnJlbnRDYWxsRnJhbWUpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fY3Vy
cmVudENhbGxGcmFtZS0+dXBkYXRlKGRlYnVnZ2VyQ2FsbEZyYW1lKTsKLSAgICBwYXVzZUlmTmVl
ZGVkKGRlYnVnZ2VyQ2FsbEZyYW1lLmR5bmFtaWNHbG9iYWxPYmplY3QoKSk7CisgICAgbV9jdXJy
ZW50Q2FsbEZyYW1lLT51cGRhdGUoRGVidWdnZXJDYWxsRnJhbWUoY2FsbEZyYW1lKSk7CisgICAg
cGF1c2VJZk5lZWRlZChjYWxsRnJhbWUtPmR5bmFtaWNHbG9iYWxPYmplY3QoKSk7CiB9CiAKIHZv
aWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnBhdXNlSWZOZWVkZWQoSlNHbG9iYWxPYmplY3QqIGR5bmFt
aWNHbG9iYWxPYmplY3QpCkBAIC00OTIsMjYgKzQ5MiwyNiBAQCB2b2lkIFNjcmlwdERlYnVnU2Vy
dmVyOjpwYXVzZUlmTmVlZGVkKEpTCiAgICAgbV9wYXVzZWQgPSBmYWxzZTsKIH0KIAotdm9pZCBT
Y3JpcHREZWJ1Z1NlcnZlcjo6Y2FsbEV2ZW50KGNvbnN0IERlYnVnZ2VyQ2FsbEZyYW1lJiBkZWJ1
Z2dlckNhbGxGcmFtZSkKK3ZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmNhbGxFdmVudChDYWxsRnJh
bWUqIGNhbGxGcmFtZSkKIHsKICAgICBpZiAoIW1fcGF1c2VkKSB7Ci0gICAgICAgIGNyZWF0ZUNh
bGxGcmFtZShkZWJ1Z2dlckNhbGxGcmFtZSk7Ci0gICAgICAgIHBhdXNlSWZOZWVkZWQoZGVidWdn
ZXJDYWxsRnJhbWUuZHluYW1pY0dsb2JhbE9iamVjdCgpKTsKKyAgICAgICAgY3JlYXRlQ2FsbEZy
YW1lKGNhbGxGcmFtZSk7CisgICAgICAgIHBhdXNlSWZOZWVkZWQoY2FsbEZyYW1lLT5keW5hbWlj
R2xvYmFsT2JqZWN0KCkpOwogICAgIH0KIH0KIAotdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6YXRT
dGF0ZW1lbnQoY29uc3QgRGVidWdnZXJDYWxsRnJhbWUmIGRlYnVnZ2VyQ2FsbEZyYW1lKQordm9p
ZCBTY3JpcHREZWJ1Z1NlcnZlcjo6YXRTdGF0ZW1lbnQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7
CiAgICAgaWYgKCFtX3BhdXNlZCkKLSAgICAgICAgdXBkYXRlQ2FsbEZyYW1lQW5kUGF1c2VJZk5l
ZWRlZChkZWJ1Z2dlckNhbGxGcmFtZSk7CisgICAgICAgIHVwZGF0ZUNhbGxGcmFtZUFuZFBhdXNl
SWZOZWVkZWQoY2FsbEZyYW1lKTsKIH0KIAotdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6cmV0dXJu
RXZlbnQoY29uc3QgRGVidWdnZXJDYWxsRnJhbWUmIGRlYnVnZ2VyQ2FsbEZyYW1lKQordm9pZCBT
Y3JpcHREZWJ1Z1NlcnZlcjo6cmV0dXJuRXZlbnQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7CiAg
ICAgaWYgKG1fcGF1c2VkKQogICAgICAgICByZXR1cm47CiAKLSAgICB1cGRhdGVDYWxsRnJhbWVB
bmRQYXVzZUlmTmVlZGVkKGRlYnVnZ2VyQ2FsbEZyYW1lKTsKKyAgICB1cGRhdGVDYWxsRnJhbWVB
bmRQYXVzZUlmTmVlZGVkKGNhbGxGcmFtZSk7CiAKICAgICAvLyBkZXRhY2ggbWF5IGhhdmUgYmVl
biBjYWxsZWQgZHVyaW5nIHBhdXNlSWZOZWVkZWQKICAgICBpZiAoIW1fY3VycmVudENhbGxGcmFt
ZSkKQEAgLTUyMyw3ICs1MjMsNyBAQCB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpyZXR1cm5FdmVu
dChjb25zCiAgICAgbV9jdXJyZW50Q2FsbEZyYW1lID0gbV9jdXJyZW50Q2FsbEZyYW1lLT5jYWxs
ZXIoKTsKIH0KIAotdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6ZXhjZXB0aW9uKGNvbnN0IERlYnVn
Z2VyQ2FsbEZyYW1lJiBkZWJ1Z2dlckNhbGxGcmFtZSwgYm9vbCBoYXNIYW5kbGVyKQordm9pZCBT
Y3JpcHREZWJ1Z1NlcnZlcjo6ZXhjZXB0aW9uKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVl
LCBib29sIGhhc0hhbmRsZXIpCiB7CiAgICAgaWYgKG1fcGF1c2VkKQogICAgICAgICByZXR1cm47
CkBAIC01MzEsMjMgKzUzMSwyMyBAQCB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpleGNlcHRpb24o
Y29uc3QgCiAgICAgaWYgKG1fcGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSA9PSBQYXVzZU9uQWxsRXhj
ZXB0aW9ucyB8fCAobV9wYXVzZU9uRXhjZXB0aW9uc1N0YXRlID09IFBhdXNlT25VbmNhdWdodEV4
Y2VwdGlvbnMgJiYgIWhhc0hhbmRsZXIpKQogICAgICAgICBtX3BhdXNlT25OZXh0U3RhdGVtZW50
ID0gdHJ1ZTsKIAotICAgIHVwZGF0ZUNhbGxGcmFtZUFuZFBhdXNlSWZOZWVkZWQoZGVidWdnZXJD
YWxsRnJhbWUpOworICAgIHVwZGF0ZUNhbGxGcmFtZUFuZFBhdXNlSWZOZWVkZWQoY2FsbEZyYW1l
KTsKIH0KIAotdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6d2lsbEV4ZWN1dGVQcm9ncmFtKGNvbnN0
IERlYnVnZ2VyQ2FsbEZyYW1lJiBkZWJ1Z2dlckNhbGxGcmFtZSkKK3ZvaWQgU2NyaXB0RGVidWdT
ZXJ2ZXI6OndpbGxFeGVjdXRlUHJvZ3JhbShDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKICAgICBp
ZiAoIW1fcGF1c2VkKSB7Ci0gICAgICAgIGNyZWF0ZUNhbGxGcmFtZShkZWJ1Z2dlckNhbGxGcmFt
ZSk7Ci0gICAgICAgIHBhdXNlSWZOZWVkZWQoZGVidWdnZXJDYWxsRnJhbWUuZHluYW1pY0dsb2Jh
bE9iamVjdCgpKTsKKyAgICAgICAgY3JlYXRlQ2FsbEZyYW1lKGNhbGxGcmFtZSk7CisgICAgICAg
IHBhdXNlSWZOZWVkZWQoY2FsbEZyYW1lLT5keW5hbWljR2xvYmFsT2JqZWN0KCkpOwogICAgIH0K
IH0KIAotdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6ZGlkRXhlY3V0ZVByb2dyYW0oY29uc3QgRGVi
dWdnZXJDYWxsRnJhbWUmIGRlYnVnZ2VyQ2FsbEZyYW1lKQordm9pZCBTY3JpcHREZWJ1Z1NlcnZl
cjo6ZGlkRXhlY3V0ZVByb2dyYW0oQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7CiAgICAgaWYgKG1f
cGF1c2VkKQogICAgICAgICByZXR1cm47CiAKLSAgICB1cGRhdGVDYWxsRnJhbWVBbmRQYXVzZUlm
TmVlZGVkKGRlYnVnZ2VyQ2FsbEZyYW1lKTsKKyAgICB1cGRhdGVDYWxsRnJhbWVBbmRQYXVzZUlm
TmVlZGVkKGNhbGxGcmFtZSk7CiAKICAgICAvLyBUcmVhdCBzdGVwcGluZyBvdmVyIHRoZSBlbmQg
b2YgYSBwcm9ncmFtIGxpa2Ugc3RlcHBpbmcgb3V0LgogICAgIGlmICghbV9jdXJyZW50Q2FsbEZy
YW1lKQpAQCAtNTYwLDEzICs1NjAsMTMgQEAgdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6ZGlkRXhl
Y3V0ZVByb2dyYQogICAgIG1fY3VycmVudENhbGxGcmFtZSA9IG1fY3VycmVudENhbGxGcmFtZS0+
Y2FsbGVyKCk7CiB9CiAKLXZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmRpZFJlYWNoQnJlYWtwb2lu
dChjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYgZGVidWdnZXJDYWxsRnJhbWUpCit2b2lkIFNjcmlw
dERlYnVnU2VydmVyOjpkaWRSZWFjaEJyZWFrcG9pbnQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7
CiAgICAgaWYgKG1fcGF1c2VkKQogICAgICAgICByZXR1cm47CiAKICAgICBtX3BhdXNlT25OZXh0
U3RhdGVtZW50ID0gdHJ1ZTsKLSAgICB1cGRhdGVDYWxsRnJhbWVBbmRQYXVzZUlmTmVlZGVkKGRl
YnVnZ2VyQ2FsbEZyYW1lKTsKKyAgICB1cGRhdGVDYWxsRnJhbWVBbmRQYXVzZUlmTmVlZGVkKGNh
bGxGcmFtZSk7CiB9CiAKIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnJlY29tcGlsZUFsbEpTRnVu
Y3Rpb25zU29vbigpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1
Z1NlcnZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Njcmlw
dERlYnVnU2VydmVyLmgJKHJldmlzaW9uIDE1NjM1NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNSwyMCArMTM1
LDIwIEBAIHByb3RlY3RlZDoKICAgICB2b2lkIGRpc3BhdGNoRGlkUGFyc2VTb3VyY2UoY29uc3Qg
TGlzdGVuZXJTZXQmIGxpc3RlbmVycywgSlNDOjpTb3VyY2VQcm92aWRlciosIGJvb2wgaXNDb250
ZW50U2NyaXB0KTsKICAgICB2b2lkIGRpc3BhdGNoRmFpbGVkVG9QYXJzZVNvdXJjZShjb25zdCBM
aXN0ZW5lclNldCYgbGlzdGVuZXJzLCBKU0M6OlNvdXJjZVByb3ZpZGVyKiwgaW50IGVycm9yTGlu
ZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpOwogCi0gICAgdm9pZCBjcmVhdGVDYWxsRnJh
bWUoY29uc3QgSlNDOjpEZWJ1Z2dlckNhbGxGcmFtZSYpOwotICAgIHZvaWQgdXBkYXRlQ2FsbEZy
YW1lQW5kUGF1c2VJZk5lZWRlZChjb25zdCBKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lJik7CisgICAg
dm9pZCBjcmVhdGVDYWxsRnJhbWUoSlNDOjpDYWxsRnJhbWUqKTsKKyAgICB2b2lkIHVwZGF0ZUNh
bGxGcmFtZUFuZFBhdXNlSWZOZWVkZWQoSlNDOjpDYWxsRnJhbWUqKTsKICAgICB2b2lkIHBhdXNl
SWZOZWVkZWQoSlNDOjpKU0dsb2JhbE9iamVjdCogZHluYW1pY0dsb2JhbE9iamVjdCk7CiAKICAg
ICB2aXJ0dWFsIHZvaWQgZGV0YWNoKEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKIAogICAgIHZpcnR1
YWwgdm9pZCBzb3VyY2VQYXJzZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlNvdXJjZVByb3ZpZGVy
KiwgaW50IGVycm9yTGluZSwgY29uc3QgU3RyaW5nJiBlcnJvck1zZyk7Ci0gICAgdmlydHVhbCB2
b2lkIGNhbGxFdmVudChjb25zdCBKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lJik7Ci0gICAgdmlydHVh
bCB2b2lkIGF0U3RhdGVtZW50KGNvbnN0IEpTQzo6RGVidWdnZXJDYWxsRnJhbWUmKTsKLSAgICB2
aXJ0dWFsIHZvaWQgcmV0dXJuRXZlbnQoY29uc3QgSlNDOjpEZWJ1Z2dlckNhbGxGcmFtZSYpOwot
ICAgIHZpcnR1YWwgdm9pZCBleGNlcHRpb24oY29uc3QgSlNDOjpEZWJ1Z2dlckNhbGxGcmFtZSYs
IGJvb2wgaGFzSGFuZGxlcik7Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxFeGVjdXRlUHJvZ3JhbShj
b25zdCBKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lJik7Ci0gICAgdmlydHVhbCB2b2lkIGRpZEV4ZWN1
dGVQcm9ncmFtKGNvbnN0IEpTQzo6RGVidWdnZXJDYWxsRnJhbWUmKTsKLSAgICB2aXJ0dWFsIHZv
aWQgZGlkUmVhY2hCcmVha3BvaW50KGNvbnN0IEpTQzo6RGVidWdnZXJDYWxsRnJhbWUmKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgY2FsbEV2ZW50KEpTQzo6Q2FsbEZyYW1lKik7CisgICAgdmlydHVhbCB2
b2lkIGF0U3RhdGVtZW50KEpTQzo6Q2FsbEZyYW1lKik7CisgICAgdmlydHVhbCB2b2lkIHJldHVy
bkV2ZW50KEpTQzo6Q2FsbEZyYW1lKik7CisgICAgdmlydHVhbCB2b2lkIGV4Y2VwdGlvbihKU0M6
OkNhbGxGcmFtZSosIEpTQzo6SlNWYWx1ZSBleGNlcHRpb25WYWx1ZSwgYm9vbCBoYXNIYW5kbGVy
KTsKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbEV4ZWN1dGVQcm9ncmFtKEpTQzo6Q2FsbEZyYW1lKik7
CisgICAgdmlydHVhbCB2b2lkIGRpZEV4ZWN1dGVQcm9ncmFtKEpTQzo6Q2FsbEZyYW1lKik7Cisg
ICAgdmlydHVhbCB2b2lkIGRpZFJlYWNoQnJlYWtwb2ludChKU0M6OkNhbGxGcmFtZSopOwogCiAg
ICAgdHlwZWRlZiBWZWN0b3I8U2NyaXB0QnJlYWtwb2ludD4gQnJlYWtwb2ludHNJbkxpbmU7CiAg
ICAgdHlwZWRlZiBIYXNoTWFwPGxvbmcsIEJyZWFrcG9pbnRzSW5MaW5lPiBMaW5lVG9CcmVha3Bv
aW50TWFwOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0RGVi
dWdTZXJ2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dv
cmtlclNjcmlwdERlYnVnU2VydmVyLmNwcAkocmV2aXNpb24gMTU2MzU2KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02MCwxMCArNjAsMTAgQEAgdm9pZCBXb3JrZXJTY3JpcHREZWJ1Z1NlcnZlcjo6YWRk
TGlzdGVuZQogICAgIHJlY29tcGlsZUFsbEpTRnVuY3Rpb25zKDApOwogfQogCi12b2lkIFdvcmtl
clNjcmlwdERlYnVnU2VydmVyOjp3aWxsRXhlY3V0ZVByb2dyYW0oY29uc3QgSlNDOjpEZWJ1Z2dl
ckNhbGxGcmFtZSYgZGVidWdnZXJDYWxsRnJhbWUpCit2b2lkIFdvcmtlclNjcmlwdERlYnVnU2Vy
dmVyOjp3aWxsRXhlY3V0ZVByb2dyYW0oSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKICAg
ICBpZiAoIW1fcGF1c2VkKQotICAgICAgICBjcmVhdGVDYWxsRnJhbWUoZGVidWdnZXJDYWxsRnJh
bWUpOworICAgICAgICBjcmVhdGVDYWxsRnJhbWUoY2FsbEZyYW1lKTsKIH0KIAogdm9pZCBXb3Jr
ZXJTY3JpcHREZWJ1Z1NlcnZlcjo6cmVjb21waWxlQWxsSlNGdW5jdGlvbnMoVGltZXI8U2NyaXB0
RGVidWdTZXJ2ZXI+KikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNj
cmlwdERlYnVnU2VydmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvV29ya2VyU2NyaXB0RGVidWdTZXJ2ZXIuaAkocmV2aXNpb24gMTU2MzU2KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0RGVidWdTZXJ2ZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtNTksNyArNTksNyBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCBib29sIGlzQ29u
dGVudFNjcmlwdChKU0M6OkV4ZWNTdGF0ZSopIHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICB2aXJ0
dWFsIHZvaWQgd2lsbEV4ZWN1dGVQcm9ncmFtKGNvbnN0IEpTQzo6RGVidWdnZXJDYWxsRnJhbWUm
KTsKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbEV4ZWN1dGVQcm9ncmFtKEpTQzo6Q2FsbEZyYW1lKik7
CiAKICAgICB2aXJ0dWFsIHZvaWQgcnVuRXZlbnRMb29wV2hpbGVQYXVzZWQoKTsKIApJbmRleDog
U291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
bWFjL0NoYW5nZUxvZwkocmV2aXNpb24gMTU2MzU2KQorKysgU291cmNlL1dlYktpdC9tYWMvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTMtMDktMjQgIE1hcmsg
TGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisgICAgICAgIENoYW5nZSBKU0MgZGVidWcgaG9v
a3MgdG8gcGFzcyBhIENhbGxGcmFtZSogaW5zdGVhZCBvZiBhIERlYnVnZ2VyQ2FsbEZyYW1lLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIxODY3Lgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViVmll
dy9XZWJTY3JpcHREZWJ1Z0RlbGVnYXRlLm1tOgorICAgICAgICAoLVtXZWJTY3JpcHRDYWxsRnJh
bWUgX2luaXRXaXRoR2xvYmFsT2JqZWN0OmRlYnVnZ2VyQ2FsbEZyYW1lOmV4Y2VwdGlvblZhbHVl
OkpTQzo6XSk6CisgICAgICAgICgtW1dlYlNjcmlwdENhbGxGcmFtZSBleGNlcHRpb25dKToKKyAg
ICAgICAgKiBXZWJWaWV3L1dlYlNjcmlwdERlYnVnZ2VyLmg6CisgICAgICAgIChXZWJTY3JpcHRE
ZWJ1Z2dlcjo6Y2FsbEV2ZW50KToKKyAgICAgICAgKFdlYlNjcmlwdERlYnVnZ2VyOjphdFN0YXRl
bWVudCk6CisgICAgICAgIChXZWJTY3JpcHREZWJ1Z2dlcjo6cmV0dXJuRXZlbnQpOgorICAgICAg
ICAoV2ViU2NyaXB0RGVidWdnZXI6OndpbGxFeGVjdXRlUHJvZ3JhbSk6CisgICAgICAgIChXZWJT
Y3JpcHREZWJ1Z2dlcjo6ZGlkRXhlY3V0ZVByb2dyYW0pOgorICAgICAgICAoV2ViU2NyaXB0RGVi
dWdnZXI6OmRpZFJlYWNoQnJlYWtwb2ludCk6CisgICAgICAgICogV2ViVmlldy9XZWJTY3JpcHRE
ZWJ1Z2dlci5tbToKKyAgICAgICAgKFdlYlNjcmlwdERlYnVnZ2VyOjpleGNlcHRpb24pOgorCiAy
MDEzLTA5LTI0ICBFbnJpY2EgQ2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CiAKICAgICAgICAg
VXBzdHJlYW0gY2hhbmdlcyB0byBQYXN0ZWJvYXJkIGltcGxlbWVudGF0aW9uIGZvciBpT1MuCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdERlYnVnRGVsZWdhdGUubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJTY3JpcHREZWJ1Z0Rl
bGVnYXRlLm1tCShyZXZpc2lvbiAxNTYzNTYpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3
L1dlYlNjcmlwdERlYnVnRGVsZWdhdGUubW0JKHdvcmtpbmcgY29weSkKQEAgLTYzLDYgKzYzLDcg
QEAgQGludGVyZmFjZSBXZWJTY3JpcHRDYWxsRnJhbWVQcml2YXRlIDogTgogQHB1YmxpYwogICAg
IFdlYlNjcmlwdE9iamVjdCAgICAgICAgKmdsb2JhbE9iamVjdDsgICAvLyB0aGUgZ2xvYmFsIG9i
amVjdCdzIHByb3h5IChub3QgcmV0YWluZWQpCiAgICAgRGVidWdnZXJDYWxsRnJhbWUqIGRlYnVn
Z2VyQ2FsbEZyYW1lOworICAgIEpTQzo6SlNWYWx1ZSBleGNlcHRpb25WYWx1ZTsKIH0KIEBlbmQK
IApAQCAtODUsMTIgKzg2LDEzIEBAIC8vIG93biBleHBvcnRlZCBpbnRlcmZhY2UuICBUaGlzIGNs
YXNzIGkKIAogQGltcGxlbWVudGF0aW9uIFdlYlNjcmlwdENhbGxGcmFtZSAoV2ViU2NyaXB0RGVi
dWdEZWxlZ2F0ZUludGVybmFsKQogCi0tIChXZWJTY3JpcHRDYWxsRnJhbWUgKilfaW5pdFdpdGhH
bG9iYWxPYmplY3Q6KFdlYlNjcmlwdE9iamVjdCAqKWdsb2JhbE9iaiBkZWJ1Z2dlckNhbGxGcmFt
ZTooY29uc3QgRGVidWdnZXJDYWxsRnJhbWUmKWRlYnVnZ2VyQ2FsbEZyYW1lCistIChXZWJTY3Jp
cHRDYWxsRnJhbWUgKilfaW5pdFdpdGhHbG9iYWxPYmplY3Q6KFdlYlNjcmlwdE9iamVjdCAqKWds
b2JhbE9iaiBkZWJ1Z2dlckNhbGxGcmFtZTooY29uc3QgRGVidWdnZXJDYWxsRnJhbWUmKWRlYnVn
Z2VyQ2FsbEZyYW1lIGV4Y2VwdGlvblZhbHVlOihKU0M6OkpTVmFsdWUpZXhjZXB0aW9uVmFsdWUK
IHsKICAgICBpZiAoKHNlbGYgPSBbc3VwZXIgaW5pdF0pKSB7CiAgICAgICAgIF9wcml2YXRlID0g
W1tXZWJTY3JpcHRDYWxsRnJhbWVQcml2YXRlIGFsbG9jXSBpbml0XTsKICAgICAgICAgX3ByaXZh
dGUtPmdsb2JhbE9iamVjdCA9IGdsb2JhbE9iajsKICAgICAgICAgX3ByaXZhdGUtPmRlYnVnZ2Vy
Q2FsbEZyYW1lID0gbmV3IERlYnVnZ2VyQ2FsbEZyYW1lKGRlYnVnZ2VyQ2FsbEZyYW1lKTsKKyAg
ICAgICAgX3ByaXZhdGUtPmV4Y2VwdGlvblZhbHVlID0gZXhjZXB0aW9uVmFsdWU7CiAgICAgfQog
ICAgIHJldHVybiBzZWxmOwogfQpAQCAtMTYwLDcgKzE2Miw3IEBAIC0gKGlkKWV4Y2VwdGlvbgog
ICAgIGlmICghX3ByaXZhdGUtPmRlYnVnZ2VyQ2FsbEZyYW1lKQogICAgICAgICByZXR1cm4gbmls
OwogCi0gICAgSlNDOjpKU1ZhbHVlIGV4Y2VwdGlvbiA9IF9wcml2YXRlLT5kZWJ1Z2dlckNhbGxG
cmFtZS0+ZXhjZXB0aW9uKCk7CisgICAgSlNDOjpKU1ZhbHVlIGV4Y2VwdGlvbiA9IF9wcml2YXRl
LT5leGNlcHRpb25WYWx1ZTsKICAgICByZXR1cm4gZXhjZXB0aW9uID8gW3NlbGYgX2NvbnZlcnRW
YWx1ZVRvT2JqY1ZhbHVlOmV4Y2VwdGlvbl0gOiBuaWw7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvbWFjL1dlYlZpZXcvV2ViU2NyaXB0RGVidWdnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdERlYnVnZ2VyLmgJKHJldmlzaW9uIDE1NjM1NikK
KysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViU2NyaXB0RGVidWdnZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTYsMTMgKzU2LDEzIEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICB2aXJ0
dWFsIHZvaWQgc291cmNlUGFyc2VkKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpTb3VyY2VQcm92aWRl
ciosIGludCBlcnJvckxpbmUsIGNvbnN0IFdURjo6U3RyaW5nJiBlcnJvck1zZyk7Ci0gICAgdmly
dHVhbCB2b2lkIGNhbGxFdmVudChjb25zdCBKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lJikgeyB9Ci0g
ICAgdmlydHVhbCB2b2lkIGF0U3RhdGVtZW50KGNvbnN0IEpTQzo6RGVidWdnZXJDYWxsRnJhbWUm
KSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcmV0dXJuRXZlbnQoY29uc3QgSlNDOjpEZWJ1Z2dlckNh
bGxGcmFtZSYpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBleGNlcHRpb24oY29uc3QgSlNDOjpEZWJ1
Z2dlckNhbGxGcmFtZSYsIGJvb2wgaGFzSGFuZGxlcik7Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxF
eGVjdXRlUHJvZ3JhbShjb25zdCBKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lJikgeyB9Ci0gICAgdmly
dHVhbCB2b2lkIGRpZEV4ZWN1dGVQcm9ncmFtKGNvbnN0IEpTQzo6RGVidWdnZXJDYWxsRnJhbWUm
KSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVhY2hCcmVha3BvaW50KGNvbnN0IEpTQzo6RGVi
dWdnZXJDYWxsRnJhbWUmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY2FsbEV2ZW50KEpTQzo6Q2Fs
bEZyYW1lKikgeyB9CisgICAgdmlydHVhbCB2b2lkIGF0U3RhdGVtZW50KEpTQzo6Q2FsbEZyYW1l
KikgeyB9CisgICAgdmlydHVhbCB2b2lkIHJldHVybkV2ZW50KEpTQzo6Q2FsbEZyYW1lKikgeyB9
CisgICAgdmlydHVhbCB2b2lkIGV4Y2VwdGlvbihKU0M6OkNhbGxGcmFtZSosIEpTQzo6SlNWYWx1
ZSBleGNlcHRpb25WYWx1ZSwgYm9vbCBoYXNIYW5kbGVyKTsKKyAgICB2aXJ0dWFsIHZvaWQgd2ls
bEV4ZWN1dGVQcm9ncmFtKEpTQzo6Q2FsbEZyYW1lKikgeyB9CisgICAgdmlydHVhbCB2b2lkIGRp
ZEV4ZWN1dGVQcm9ncmFtKEpTQzo6Q2FsbEZyYW1lKikgeyB9CisgICAgdmlydHVhbCB2b2lkIGRp
ZFJlYWNoQnJlYWtwb2ludChKU0M6OkNhbGxGcmFtZSopIHsgfQogCiAgICAgYm9vbCBtX2NhbGxp
bmdEZWxlZ2F0ZTsKIApJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJTY3JpcHRE
ZWJ1Z2dlci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlNj
cmlwdERlYnVnZ2VyLm1tCShyZXZpc2lvbiAxNTYzNTYpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYlNjcmlwdERlYnVnZ2VyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3
IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogQGlu
dGVyZmFjZSBXZWJTY3JpcHRDYWxsRnJhbWUgKFdlYlNjcmlwdERlYnVnRGVsZWdhdGVJbnRlcm5h
bCkKLS0gKFdlYlNjcmlwdENhbGxGcmFtZSAqKV9pbml0V2l0aEdsb2JhbE9iamVjdDooV2ViU2Ny
aXB0T2JqZWN0ICopZ2xvYmFsT2JqIGRlYnVnZ2VyQ2FsbEZyYW1lOihjb25zdCBEZWJ1Z2dlckNh
bGxGcmFtZSYpZGVidWdnZXJDYWxsRnJhbWU7CistIChXZWJTY3JpcHRDYWxsRnJhbWUgKilfaW5p
dFdpdGhHbG9iYWxPYmplY3Q6KFdlYlNjcmlwdE9iamVjdCAqKWdsb2JhbE9iaiBkZWJ1Z2dlckNh
bGxGcmFtZTooY29uc3QgRGVidWdnZXJDYWxsRnJhbWUmKWRlYnVnZ2VyQ2FsbEZyYW1lIGV4Y2Vw
dGlvblZhbHVlOihKU0M6OkpTVmFsdWUpZXhjZXB0aW9uVmFsdWU7CiBAZW5kCiAKIHN0YXRpYyBO
U1N0cmluZyAqdG9OU1N0cmluZyhTb3VyY2VQcm92aWRlciogc291cmNlUHJvdmlkZXIpCkBAIC0x
MTYsMjMgKzExNiwyNCBAQCB2b2lkIFdlYlNjcmlwdERlYnVnZ2VyOjpzb3VyY2VQYXJzZWQoRXhl
CiAgICAgbV9jYWxsaW5nRGVsZWdhdGUgPSBmYWxzZTsKIH0KIAotdm9pZCBXZWJTY3JpcHREZWJ1
Z2dlcjo6ZXhjZXB0aW9uKGNvbnN0IERlYnVnZ2VyQ2FsbEZyYW1lJiBkZWJ1Z2dlckNhbGxGcmFt
ZSwgYm9vbCBoYXNIYW5kbGVyKQordm9pZCBXZWJTY3JpcHREZWJ1Z2dlcjo6ZXhjZXB0aW9uKEpT
Qzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTQzo6SlNWYWx1ZSBleGNlcHRpb25WYWx1ZSwgYm9v
bCBoYXNIYW5kbGVyKQogewogICAgIGlmIChtX2NhbGxpbmdEZWxlZ2F0ZSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgbV9jYWxsaW5nRGVsZWdhdGUgPSB0cnVlOwogCi0gICAgV2ViRnJhbWUgKndl
YkZyYW1lID0gdG9XZWJGcmFtZShkZWJ1Z2dlckNhbGxGcmFtZS5keW5hbWljR2xvYmFsT2JqZWN0
KCkpOworICAgIFdlYkZyYW1lICp3ZWJGcmFtZSA9IHRvV2ViRnJhbWUoY2FsbEZyYW1lLT5keW5h
bWljR2xvYmFsT2JqZWN0KCkpOwogICAgIFdlYlZpZXcgKndlYlZpZXcgPSBbd2ViRnJhbWUgd2Vi
Vmlld107Ci0gICAgUmV0YWluUHRyPFdlYlNjcmlwdENhbGxGcmFtZT4gY2FsbEZyYW1lID0gYWRv
cHROUyhbW1dlYlNjcmlwdENhbGxGcmFtZSBhbGxvY10gX2luaXRXaXRoR2xvYmFsT2JqZWN0OmNv
cmUod2ViRnJhbWUpLT5zY3JpcHQoKS53aW5kb3dTY3JpcHRPYmplY3QoKSBkZWJ1Z2dlckNhbGxG
cmFtZTpkZWJ1Z2dlckNhbGxGcmFtZV0pOworICAgIERlYnVnZ2VyQ2FsbEZyYW1lIGRlYnVnZ2Vy
Q2FsbEZyYW1lKGNhbGxGcmFtZSk7CisgICAgUmV0YWluUHRyPFdlYlNjcmlwdENhbGxGcmFtZT4g
d2ViQ2FsbEZyYW1lID0gYWRvcHROUyhbW1dlYlNjcmlwdENhbGxGcmFtZSBhbGxvY10gX2luaXRX
aXRoR2xvYmFsT2JqZWN0OmNvcmUod2ViRnJhbWUpLT5zY3JpcHQoKS53aW5kb3dTY3JpcHRPYmpl
Y3QoKSBkZWJ1Z2dlckNhbGxGcmFtZTpkZWJ1Z2dlckNhbGxGcmFtZSBleGNlcHRpb25WYWx1ZTpl
eGNlcHRpb25WYWx1ZV0pOwogCiAgICAgV2ViU2NyaXB0RGVidWdEZWxlZ2F0ZUltcGxlbWVudGF0
aW9uQ2FjaGUqIGNhY2hlID0gV2ViVmlld0dldFNjcmlwdERlYnVnRGVsZWdhdGVJbXBsZW1lbnRh
dGlvbnMod2ViVmlldyk7CiAgICAgaWYgKGNhY2hlLT5leGNlcHRpb25XYXNSYWlzZWRGdW5jKSB7
CiAgICAgICAgIGlmIChjYWNoZS0+ZXhjZXB0aW9uV2FzUmFpc2VkRXhwZWN0c0hhc0hhbmRsZXJG
bGFnKQotICAgICAgICAgICAgQ2FsbFNjcmlwdERlYnVnRGVsZWdhdGUoY2FjaGUtPmV4Y2VwdGlv
bldhc1JhaXNlZEZ1bmMsIHdlYlZpZXcsIEBzZWxlY3Rvcih3ZWJWaWV3OmV4Y2VwdGlvbldhc1Jh
aXNlZDpoYXNIYW5kbGVyOnNvdXJjZUlkOmxpbmU6Zm9yV2ViRnJhbWU6KSwgY2FsbEZyYW1lLmdl
dCgpLCBoYXNIYW5kbGVyLCBkZWJ1Z2dlckNhbGxGcmFtZS5zb3VyY2VJZCgpLCBkZWJ1Z2dlckNh
bGxGcmFtZS5saW5lKCksIHdlYkZyYW1lKTsKKyAgICAgICAgICAgIENhbGxTY3JpcHREZWJ1Z0Rl
bGVnYXRlKGNhY2hlLT5leGNlcHRpb25XYXNSYWlzZWRGdW5jLCB3ZWJWaWV3LCBAc2VsZWN0b3Io
d2ViVmlldzpleGNlcHRpb25XYXNSYWlzZWQ6aGFzSGFuZGxlcjpzb3VyY2VJZDpsaW5lOmZvcldl
YkZyYW1lOiksIHdlYkNhbGxGcmFtZS5nZXQoKSwgaGFzSGFuZGxlciwgZGVidWdnZXJDYWxsRnJh
bWUuc291cmNlSWQoKSwgZGVidWdnZXJDYWxsRnJhbWUubGluZSgpLCB3ZWJGcmFtZSk7CiAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIENhbGxTY3JpcHREZWJ1Z0RlbGVnYXRlKGNhY2hlLT5leGNl
cHRpb25XYXNSYWlzZWRGdW5jLCB3ZWJWaWV3LCBAc2VsZWN0b3Iod2ViVmlldzpleGNlcHRpb25X
YXNSYWlzZWQ6c291cmNlSWQ6bGluZTpmb3JXZWJGcmFtZTopLCBjYWxsRnJhbWUuZ2V0KCksIGRl
YnVnZ2VyQ2FsbEZyYW1lLnNvdXJjZUlkKCksIGRlYnVnZ2VyQ2FsbEZyYW1lLmxpbmUoKSwgd2Vi
RnJhbWUpOworICAgICAgICAgICAgQ2FsbFNjcmlwdERlYnVnRGVsZWdhdGUoY2FjaGUtPmV4Y2Vw
dGlvbldhc1JhaXNlZEZ1bmMsIHdlYlZpZXcsIEBzZWxlY3Rvcih3ZWJWaWV3OmV4Y2VwdGlvbldh
c1JhaXNlZDpzb3VyY2VJZDpsaW5lOmZvcldlYkZyYW1lOiksIHdlYkNhbGxGcmFtZS5nZXQoKSwg
ZGVidWdnZXJDYWxsRnJhbWUuc291cmNlSWQoKSwgZGVidWdnZXJDYWxsRnJhbWUubGluZSgpLCB3
ZWJGcmFtZSk7CiAgICAgfQogCiAgICAgbV9jYWxsaW5nRGVsZWdhdGUgPSBmYWxzZTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>212519</attachid>
            <date>2013-09-24 16:33:38 -0700</date>
            <delta_ts>2013-09-24 16:45:56 -0700</delta_ts>
            <desc>JavaScriptCallFrame is now constructed with DebuggerCallFrame as an arg again. Added all the suggested FINAL and OVERRIDE clauses. Also cached line and column in DebuggerCallFrame.</desc>
            <filename>bug-121867.patch</filename>
            <type>text/plain</type>
            <size>52572</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU2MzcwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgzIEBA
CisyMDEzLTA5LTI0ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBD
aGFuZ2UgSlNDIGRlYnVnIGhvb2tzIHRvIHBhc3MgYSBDYWxsRnJhbWUqIGluc3RlYWQgb2YgYSBE
ZWJ1Z2dlckNhbGxGcmFtZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEyMTg2Ny4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAxLiBSZW1vdmVkIHRoZSBuZWVkIGZvciBwYXNzaW5nIHRoZSBsaW5lIGFuZCBj
b2x1bW4gaW5mbyB0byB0aGUgZGVidWcgaG9vaworICAgICAgICAgICBjYWxsYmFja3MuIFdlIG5v
dyBnZXQgdGhlIGxpbmUgYW5kIGNvbHVtbiBpbmZvIGZyb20gdGhlIENhbGxGcmFtZS4KKworICAg
ICAgICAyLiBTaW1wbGlmeSBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdERlYnVnSG9vaygpIHRvIG9u
bHkgdGFrZSAxIGxpbmUgbnVtYmVyCisgICAgICAgICAgIGFyZ3VtZW50LiBUaGUgY2FsbGVyIGNh
biBkZXRlcm1pbmUgd2hldGhlciB0byBwYXNzIGluIHRoZSBmaXJzdCBvciBsYXN0CisgICAgICAg
ICAgIGxpbmUgbnVtYmVyIG9mIHRoZSBibG9jayBvZiBzb3VyY2UgY29kZSBhcyBhcHByb3ByaWF0
ZS4KKyAgICAgICAgICAgTm90ZTogd2Ugc3RpbGwgbmVlZCB0byBwYXNzIGluIHRoZSBsaW5lIGFu
ZCBjb2x1bW4gaW5mbyB0byBlbWl0RGVidWdIb29rKCkKKyAgICAgICAgICAgYmVjYXVzZSBpdCB1
c2VzIHRoaXMgaW5mbyB0byBlbWl0IGV4cHJlc3Npb24gaW5mbyB3aGljaCBpcyBsYXRlciB1c2Vk
IGJ5CisgICAgICAgICAgIHRoZSBTdGFja1Zpc2l0b3IgdG8gZGV0ZXJtaW5lIHRoZSBsaW5lIGFu
ZCBjb2x1bW4gaW5mbyBmb3IgaXRzICJwYyIuCisKKyAgICAgICAgMy4gUGFzcyB0aGUgZXhjZXB0
aW9uVmFsdWUgZXhwbGljaXRseSB0byB0aGUgZXhjZXB0aW9uKCkgZGVidWcgaG9vaworICAgICAg
ICAgICBjYWxsYmFjay4gSXQgc2hvdWxkIG5vdCBiZSBlbWJlZGRlZCBpbiB0aGUgQ2FsbEZyYW1l
IC8gRGVidWdnZXJDYWxsRnJhbWUuCisKKyAgICAgICAgNC4gQ2hhbmdlIHRoZSBvcF9kZWJ1ZyBv
cGNvZGUgc2l6ZSB0byAyIChmcm9tIDUpIHNpbmNlIHdlJ3ZlIHJlbW92aW5nIDMgYXJnCisgICAg
ICAgICAgIHZhbHVlcy4gVXBkYXRlIHRoZSBMTElOVCBhbmQgSklUIGNvZGUgdG8gaGFuZGxlIHRo
aXMuCisKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OmR1bXBCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Q29kZUJs
b2NrKToKKyAgICAgICAgKiBieXRlY29kZS9PcGNvZGUuaDoKKyAgICAgICAgKEpTQzo6cGFkT3Bj
b2RlTmFtZSk6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoK
KyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXREZWJ1Z0hvb2spOgorICAgICAg
ICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oOgorICAgICAgICAqIGJ5dGVjb21w
aWxlci9Ob2Rlc0NvZGVnZW4uY3BwOgorICAgICAgICAoSlNDOjpDb25zdFN0YXRlbWVudE5vZGU6
OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkVtcHR5U3RhdGVtZW50Tm9kZTo6ZW1pdEJ5
dGVjb2RlKToKKyAgICAgICAgKEpTQzo6RGVidWdnZXJTdGF0ZW1lbnROb2RlOjplbWl0Qnl0ZWNv
ZGUpOgorICAgICAgICAoSlNDOjpFeHByU3RhdGVtZW50Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAg
ICAgICAgKEpTQzo6VmFyU3RhdGVtZW50Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpT
Qzo6SWZFbHNlTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6RG9XaGlsZU5vZGU6
OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OldoaWxlTm9kZTo6ZW1pdEJ5dGVjb2RlKToK
KyAgICAgICAgKEpTQzo6Rm9yTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6Rm9y
SW5Ob2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpDb250aW51ZU5vZGU6OmVtaXRC
eXRlY29kZSk6CisgICAgICAgIChKU0M6OkJyZWFrTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAg
ICAgKEpTQzo6UmV0dXJuTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6V2l0aE5v
ZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OlN3aXRjaE5vZGU6OmVtaXRCeXRlY29k
ZSk6CisgICAgICAgIChKU0M6OkxhYmVsTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpT
Qzo6VGhyb3dOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpUcnlOb2RlOjplbWl0
Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpQcm9ncmFtTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAg
ICAgICAgKEpTQzo6RXZhbE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkZ1bmN0
aW9uQm9keU5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgICogZGVidWdnZXIvRGVidWdnZXIu
aDoKKyAgICAgICAgKiBkZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHA6CisgICAgICAgIChK
U0M6OkxpbmVBbmRDb2x1bW5GdW5jdG9yOjpvcGVyYXRvcigpKToKKyAgICAgICAgKEpTQzo6TGlu
ZUFuZENvbHVtbkZ1bmN0b3I6OmxpbmUpOgorICAgICAgICAoSlNDOjpMaW5lQW5kQ29sdW1uRnVu
Y3Rvcjo6Y29sdW1uKToKKyAgICAgICAgKEpTQzo6RGVidWdnZXJDYWxsRnJhbWU6OkRlYnVnZ2Vy
Q2FsbEZyYW1lKToKKyAgICAgICAgKEpTQzo6RGVidWdnZXJDYWxsRnJhbWU6OmNsZWFyKToKKyAg
ICAgICAgKiBkZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5oOgorICAgICAgICAoSlNDOjpEZWJ1
Z2dlckNhbGxGcmFtZTo6bGluZSk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lOjpj
b2x1bW4pOgorICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJldGVyLmNwcDoKKyAgICAgICAg
KEpTQzo6dW53aW5kQ2FsbEZyYW1lKToKKyAgICAgICAgKEpTQzo6VW53aW5kRnVuY3Rvcjo6VW53
aW5kRnVuY3Rvcik6CisgICAgICAgIChKU0M6OlVud2luZEZ1bmN0b3I6Om9wZXJhdG9yKCkpOgor
ICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6dW53aW5kKToKKyAgICAgICAgKEpTQzo6SW50ZXJw
cmV0ZXI6OmRlYnVnKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5oOgorICAg
ICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2Rl
YnVnKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2RlczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2RlYnVnKToKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuY3BwOgorICAgICAg
ICAoSlNDOjpERUZJTkVfU1RVQl9GVU5DVElPTik6CisgICAgICAgICogbGxpbnQvTExJbnRTbG93
UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6TExJTlRfU0xPV19QQVRIX0RFQ0wpOgor
ICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtOgorCiAyMDEzLTA5LTI0ICBN
YXJrIFJvd2UgIDxtcm93ZUBhcHBsZS5jb20+CiAKICAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzE0
OTcxNTE4PiBXZWJLaXQgc2hvdWxkIGJ1aWxkIGFnYWluc3QgdGhlIFhjb2RlIGRlZmF1bHQgdG9v
bGNoYWluIHdoZW4gdGFyZ2V0aW5nIE9TIFggMTAuOApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDE1NjM1NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzI1LDExICsxMzI1LDggQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBCeXRlY29kZShQcmludFN0
cmVhbQogICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfZGVidWc6IHsKICAgICAgICAgICAgIGlu
dCBkZWJ1Z0hvb2tJRCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IGZpcnN0
TGluZSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IGxhc3RMaW5lID0gKCsr
aXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgY29sdW1uID0gKCsraXQpLT51Lm9wZXJh
bmQ7CiAgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwg
aXQsICJkZWJ1ZyIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVkLCAlZCwgJWQiLCBk
ZWJ1Z0hvb2tOYW1lKGRlYnVnSG9va0lEKSwgZmlyc3RMaW5lLCBsYXN0TGluZSwgY29sdW1uKTsK
KyAgICAgICAgICAgIG91dC5wcmludGYoIiVzIiwgZGVidWdIb29rTmFtZShkZWJ1Z0hvb2tJRCkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9wcm9maWxl
X3dpbGxfY2FsbDogewpAQCAtMTg3NCwxMSArMTg3MSw2IEBAIENvZGVCbG9jazo6Q29kZUJsb2Nr
KFNjcmlwdEV4ZWN1dGFibGUqIG8KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAg
ICAgICAgY2FzZSBvcF9kZWJ1ZzogewotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA0XSA9
IGNvbHVtbk51bWJlckZvckJ5dGVjb2RlT2Zmc2V0KGkpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLQogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgJKHJldmlzaW9u
IDE1NjM1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMTgwLDcgKzE4MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIG1hY3Jv
KG9wX3Rocm93LCAyKSBcCiAgICAgbWFjcm8ob3BfdGhyb3dfc3RhdGljX2Vycm9yLCAzKSBcCiAg
ICAgXAotICAgIG1hY3JvKG9wX2RlYnVnLCA1KSBcCisgICAgbWFjcm8ob3BfZGVidWcsIDIpIFwK
ICAgICBtYWNybyhvcF9wcm9maWxlX3dpbGxfY2FsbCwgMikgXAogICAgIG1hY3JvKG9wX3Byb2Zp
bGVfZGlkX2NhbGwsIDIpIFwKICAgICBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24g
MTU2MzU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdl
bmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NTgsNyArMTg1OCw3IEBAIHZvaWQgQnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXRQb3BTY29wZSgpCiAgICAgbV9sb2NhbFNjb3BlRGVwdGgtLTsK
IH0KIAotdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdERlYnVnSG9vayhEZWJ1Z0hvb2tJRCBk
ZWJ1Z0hvb2tJRCwgdW5zaWduZWQgZmlyc3RMaW5lLCB1bnNpZ25lZCBsYXN0TGluZSwgdW5zaWdu
ZWQgY2hhck9mZnNldCwgdW5zaWduZWQgbGluZVN0YXJ0KQordm9pZCBCeXRlY29kZUdlbmVyYXRv
cjo6ZW1pdERlYnVnSG9vayhEZWJ1Z0hvb2tJRCBkZWJ1Z0hvb2tJRCwgdW5zaWduZWQgbGluZSwg
dW5zaWduZWQgY2hhck9mZnNldCwgdW5zaWduZWQgbGluZVN0YXJ0KQogewogI2lmIEVOQUJMRShE
RUJVR19XSVRIX0JSRUFLUE9JTlQpCiAgICAgaWYgKGRlYnVnSG9va0lEICE9IERpZFJlYWNoQnJl
YWtwb2ludCkKQEAgLTE4NjcsMTQgKzE4NjcsMTAgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdERlYnVnSG9vayhEZQogICAgIGlmICghbV9zaG91bGRFbWl0RGVidWdIb29rcykKICAgICAg
ICAgcmV0dXJuOwogI2VuZGlmCi0gICAgSlNUZXh0UG9zaXRpb24gZGl2b3QoZmlyc3RMaW5lLCBj
aGFyT2Zmc2V0LCBsaW5lU3RhcnQpOworICAgIEpTVGV4dFBvc2l0aW9uIGRpdm90KGxpbmUsIGNo
YXJPZmZzZXQsIGxpbmVTdGFydCk7CiAgICAgZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90LCBkaXZv
dCwgZGl2b3QpOwotICAgIHVuc2lnbmVkIGNoYXJQb3NpdGlvbiA9IGNoYXJPZmZzZXQgLSBtX3Nj
b3BlTm9kZS0+c291cmNlKCkuc3RhcnRPZmZzZXQoKTsKICAgICBlbWl0T3Bjb2RlKG9wX2RlYnVn
KTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZGVidWdIb29rSUQpOwotICAgIGluc3RydWN0
aW9ucygpLmFwcGVuZChmaXJzdExpbmUpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChsYXN0
TGluZSk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGNoYXJQb3NpdGlvbik7CiB9CiAKIHZv
aWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hGaW5hbGx5Q29udGV4dChTdGF0ZW1lbnROb2RlKiBm
aW5hbGx5QmxvY2spCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5
dGVjb2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiAxNTYzNTYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQwNSw3ICs0MDUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgUmVn
aXN0ZXJJRCogZW1pdFB1c2hXaXRoU2NvcGUoUmVnaXN0ZXJJRCogc2NvcGUpOwogICAgICAgICB2
b2lkIGVtaXRQb3BTY29wZSgpOwogCi0gICAgICAgIHZvaWQgZW1pdERlYnVnSG9vayhEZWJ1Z0hv
b2tJRCwgdW5zaWduZWQgZmlyc3RMaW5lLCB1bnNpZ25lZCBsYXN0TGluZSwgdW5zaWduZWQgY2hh
ck9mZnNldCwgdW5zaWduZWQgbGluZVN0YXJ0KTsKKyAgICAgICAgdm9pZCBlbWl0RGVidWdIb29r
KERlYnVnSG9va0lELCB1bnNpZ25lZCBsaW5lLCB1bnNpZ25lZCBjaGFyT2Zmc2V0LCB1bnNpZ25l
ZCBsaW5lU3RhcnQpOwogCiAgICAgICAgIGludCBzY29wZURlcHRoKCkgeyByZXR1cm4gbV9sb2Nh
bFNjb3BlRGVwdGggKyBtX2ZpbmFsbHlEZXB0aDsgfQogICAgICAgICBib29sIGhhc0ZpbmFsaXNl
cigpIHsgcmV0dXJuIG1fZmluYWxseURlcHRoICE9IDA7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAJKHJldmlzaW9u
IDE1NjM1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2Rl
Z2VuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ0NCw3ICsxNDQ0LDcgQEAgUmVnaXN0ZXJJRCog
Q29uc3REZWNsTm9kZTo6ZW1pdEJ5dGVjb2RlKAogCiB2b2lkIENvbnN0U3RhdGVtZW50Tm9kZTo6
ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqKQog
ewotICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKFdpbGxFeGVjdXRlU3RhdGVtZW50LCBmaXJz
dExpbmUoKSwgbGFzdExpbmUoKSwgc3RhcnRPZmZzZXQoKSwgbGluZVN0YXJ0T2Zmc2V0KCkpOwor
ICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKFdpbGxFeGVjdXRlU3RhdGVtZW50LCBmaXJzdExp
bmUoKSwgc3RhcnRPZmZzZXQoKSwgbGluZVN0YXJ0T2Zmc2V0KCkpOwogICAgIGdlbmVyYXRvci5l
bWl0Tm9kZShtX25leHQpOwogfQogCkBAIC0xNDg3LDE0ICsxNDg3LDE0IEBAIHZvaWQgQmxvY2tO
b2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW4KIAogdm9pZCBFbXB0eVN0YXRlbWVudE5vZGU6
OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKikK
IHsKLSAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhXaWxsRXhlY3V0ZVN0YXRlbWVudCwgZmly
c3RMaW5lKCksIGxhc3RMaW5lKCksIHN0YXJ0T2Zmc2V0KCksIGxpbmVTdGFydE9mZnNldCgpKTsK
KyAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhXaWxsRXhlY3V0ZVN0YXRlbWVudCwgZmlyc3RM
aW5lKCksIHN0YXJ0T2Zmc2V0KCksIGxpbmVTdGFydE9mZnNldCgpKTsKIH0KIAogLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERlYnVnZ2VyU3RhdGVtZW50Tm9kZSAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KIAogdm9pZCBEZWJ1Z2dlclN0YXRlbWVudE5vZGU6OmVtaXRCeXRl
Y29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKikKIHsKLSAgICBn
ZW5lcmF0b3IuZW1pdERlYnVnSG9vayhEaWRSZWFjaEJyZWFrcG9pbnQsIGZpcnN0TGluZSgpLCBs
YXN0TGluZSgpLCBzdGFydE9mZnNldCgpLCBsaW5lU3RhcnRPZmZzZXQoKSk7CisgICAgZ2VuZXJh
dG9yLmVtaXREZWJ1Z0hvb2soRGlkUmVhY2hCcmVha3BvaW50LCBsYXN0TGluZSgpLCBzdGFydE9m
ZnNldCgpLCBsaW5lU3RhcnRPZmZzZXQoKSk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSBFeHByU3RhdGVtZW50Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CkBAIC0xNTAyLDcgKzE1MDIsNyBAQCB2b2lkIERlYnVnZ2VyU3RhdGVtZW50Tm9kZTo6ZW1pdEJ5
dGVjb2RlCiB2b2lkIEV4cHJTdGF0ZW1lbnROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5l
cmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewogICAgIEFTU0VSVChtX2V4cHIp
OwotICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKFdpbGxFeGVjdXRlU3RhdGVtZW50LCBmaXJz
dExpbmUoKSwgbGFzdExpbmUoKSwgc3RhcnRPZmZzZXQoKSwgbGluZVN0YXJ0T2Zmc2V0KCkpOwor
ICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKFdpbGxFeGVjdXRlU3RhdGVtZW50LCBmaXJzdExp
bmUoKSwgc3RhcnRPZmZzZXQoKSwgbGluZVN0YXJ0T2Zmc2V0KCkpOwogICAgIGdlbmVyYXRvci5l
bWl0Tm9kZShkc3QsIG1fZXhwcik7CiB9CiAKQEAgLTE1MTEsNyArMTUxMSw3IEBAIHZvaWQgRXhw
clN0YXRlbWVudE5vZGU6OmVtaXRCeXRlY29kZShCeXQKIHZvaWQgVmFyU3RhdGVtZW50Tm9kZTo6
ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqKQog
ewogICAgIEFTU0VSVChtX2V4cHIpOwotICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKFdpbGxF
eGVjdXRlU3RhdGVtZW50LCBmaXJzdExpbmUoKSwgbGFzdExpbmUoKSwgc3RhcnRPZmZzZXQoKSwg
bGluZVN0YXJ0T2Zmc2V0KCkpOworICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKFdpbGxFeGVj
dXRlU3RhdGVtZW50LCBmaXJzdExpbmUoKSwgc3RhcnRPZmZzZXQoKSwgbGluZVN0YXJ0T2Zmc2V0
KCkpOwogICAgIGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4cHIpOwogfQogCkBAIC0xNTU2LDcgKzE1
NTYsNyBAQCBib29sIElmRWxzZU5vZGU6OnRyeUZvbGRCcmVha0FuZENvbnRpbnVlCiAKIHZvaWQg
SWZFbHNlTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJl
Z2lzdGVySUQqIGRzdCkKIHsKLSAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhXaWxsRXhlY3V0
ZVN0YXRlbWVudCwgZmlyc3RMaW5lKCksIGxhc3RMaW5lKCksIHN0YXJ0T2Zmc2V0KCksIGxpbmVT
dGFydE9mZnNldCgpKTsKKyAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhXaWxsRXhlY3V0ZVN0
YXRlbWVudCwgZmlyc3RMaW5lKCksIHN0YXJ0T2Zmc2V0KCksIGxpbmVTdGFydE9mZnNldCgpKTsK
ICAgICAKICAgICBSZWZQdHI8TGFiZWw+IGJlZm9yZVRoZW4gPSBnZW5lcmF0b3IubmV3TGFiZWwo
KTsKICAgICBSZWZQdHI8TGFiZWw+IGJlZm9yZUVsc2UgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsK
QEAgLTE1OTMsMTIgKzE1OTMsMTIgQEAgdm9pZCBEb1doaWxlTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5
dGVjb2RlRwogICAgIFJlZlB0cjxMYWJlbD4gdG9wT2ZMb29wID0gZ2VuZXJhdG9yLm5ld0xhYmVs
KCk7CiAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbCh0b3BPZkxvb3AuZ2V0KCkpOwogICAgIGdlbmVy
YXRvci5lbWl0TG9vcEhpbnQoKTsKLSAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhXaWxsRXhl
Y3V0ZVN0YXRlbWVudCwgbGFzdExpbmUoKSwgbGFzdExpbmUoKSwgc3RhcnRPZmZzZXQoKSwgbGlu
ZVN0YXJ0T2Zmc2V0KCkpOworICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKFdpbGxFeGVjdXRl
U3RhdGVtZW50LCBsYXN0TGluZSgpLCBzdGFydE9mZnNldCgpLCBsaW5lU3RhcnRPZmZzZXQoKSk7
CiAKICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBtX3N0YXRlbWVudCk7CiAKICAgICBnZW5l
cmF0b3IuZW1pdExhYmVsKHNjb3BlLT5jb250aW51ZVRhcmdldCgpKTsKLSAgICBnZW5lcmF0b3Iu
ZW1pdERlYnVnSG9vayhXaWxsRXhlY3V0ZVN0YXRlbWVudCwgbGFzdExpbmUoKSwgbGFzdExpbmUo
KSwgc3RhcnRPZmZzZXQoKSwgbGluZVN0YXJ0T2Zmc2V0KCkpOworICAgIGdlbmVyYXRvci5lbWl0
RGVidWdIb29rKFdpbGxFeGVjdXRlU3RhdGVtZW50LCBsYXN0TGluZSgpLCBzdGFydE9mZnNldCgp
LCBsaW5lU3RhcnRPZmZzZXQoKSk7CiAgICAgZ2VuZXJhdG9yLmVtaXROb2RlSW5Db25kaXRpb25D
b250ZXh0KG1fZXhwciwgdG9wT2ZMb29wLmdldCgpLCBzY29wZS0+YnJlYWtUYXJnZXQoKSwgRmFs
bFRocm91Z2hNZWFuc0ZhbHNlKTsKIAogICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoc2NvcGUtPmJy
ZWFrVGFyZ2V0KCkpOwpAQCAtMTYxMSw3ICsxNjExLDcgQEAgdm9pZCBXaGlsZU5vZGU6OmVtaXRC
eXRlY29kZShCeXRlY29kZUdlbgogICAgIExhYmVsU2NvcGVQdHIgc2NvcGUgPSBnZW5lcmF0b3Iu
bmV3TGFiZWxTY29wZShMYWJlbFNjb3BlOjpMb29wKTsKICAgICBSZWZQdHI8TGFiZWw+IHRvcE9m
TG9vcCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOwogCi0gICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hv
b2soV2lsbEV4ZWN1dGVTdGF0ZW1lbnQsIG1fZXhwci0+bGluZU5vKCksIG1fZXhwci0+bGluZU5v
KCksIG1fZXhwci0+c3RhcnRPZmZzZXQoKSwgbV9leHByLT5saW5lU3RhcnRPZmZzZXQoKSk7Cisg
ICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2soV2lsbEV4ZWN1dGVTdGF0ZW1lbnQsIG1fZXhwci0+
bGluZU5vKCksIG1fZXhwci0+c3RhcnRPZmZzZXQoKSwgbV9leHByLT5saW5lU3RhcnRPZmZzZXQo
KSk7CiAgICAgZ2VuZXJhdG9yLmVtaXROb2RlSW5Db25kaXRpb25Db250ZXh0KG1fZXhwciwgdG9w
T2ZMb29wLmdldCgpLCBzY29wZS0+YnJlYWtUYXJnZXQoKSwgRmFsbFRocm91Z2hNZWFuc1RydWUp
OwogCiAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbCh0b3BPZkxvb3AuZ2V0KCkpOwpAQCAtMTYyMCw3
ICsxNjIwLDcgQEAgdm9pZCBXaGlsZU5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbgogICAg
IGdlbmVyYXRvci5lbWl0Tm9kZShkc3QsIG1fc3RhdGVtZW50KTsKIAogICAgIGdlbmVyYXRvci5l
bWl0TGFiZWwoc2NvcGUtPmNvbnRpbnVlVGFyZ2V0KCkpOwotICAgIGdlbmVyYXRvci5lbWl0RGVi
dWdIb29rKFdpbGxFeGVjdXRlU3RhdGVtZW50LCBmaXJzdExpbmUoKSwgbGFzdExpbmUoKSwgc3Rh
cnRPZmZzZXQoKSwgbGluZVN0YXJ0T2Zmc2V0KCkpOworICAgIGdlbmVyYXRvci5lbWl0RGVidWdI
b29rKFdpbGxFeGVjdXRlU3RhdGVtZW50LCBmaXJzdExpbmUoKSwgc3RhcnRPZmZzZXQoKSwgbGlu
ZVN0YXJ0T2Zmc2V0KCkpOwogCiAgICAgZ2VuZXJhdG9yLmVtaXROb2RlSW5Db25kaXRpb25Db250
ZXh0KG1fZXhwciwgdG9wT2ZMb29wLmdldCgpLCBzY29wZS0+YnJlYWtUYXJnZXQoKSwgRmFsbFRo
cm91Z2hNZWFuc0ZhbHNlKTsKIApAQCAtMTYzMyw3ICsxNjMzLDcgQEAgdm9pZCBGb3JOb2RlOjpl
bWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcgogewogICAgIExhYmVsU2NvcGVQdHIgc2NvcGUgPSBn
ZW5lcmF0b3IubmV3TGFiZWxTY29wZShMYWJlbFNjb3BlOjpMb29wKTsKIAotICAgIGdlbmVyYXRv
ci5lbWl0RGVidWdIb29rKFdpbGxFeGVjdXRlU3RhdGVtZW50LCBmaXJzdExpbmUoKSwgbGFzdExp
bmUoKSwgc3RhcnRPZmZzZXQoKSwgbGluZVN0YXJ0T2Zmc2V0KCkpOworICAgIGdlbmVyYXRvci5l
bWl0RGVidWdIb29rKFdpbGxFeGVjdXRlU3RhdGVtZW50LCBmaXJzdExpbmUoKSwgc3RhcnRPZmZz
ZXQoKSwgbGluZVN0YXJ0T2Zmc2V0KCkpOwogCiAgICAgaWYgKG1fZXhwcjEpCiAgICAgICAgIGdl
bmVyYXRvci5lbWl0Tm9kZShnZW5lcmF0b3IuaWdub3JlZFJlc3VsdCgpLCBtX2V4cHIxKTsKQEAg
LTE2NDgsNyArMTY0OCw3IEBAIHZvaWQgRm9yTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2Vu
ZXIKICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBtX3N0YXRlbWVudCk7CiAKICAgICBnZW5l
cmF0b3IuZW1pdExhYmVsKHNjb3BlLT5jb250aW51ZVRhcmdldCgpKTsKLSAgICBnZW5lcmF0b3Iu
ZW1pdERlYnVnSG9vayhXaWxsRXhlY3V0ZVN0YXRlbWVudCwgZmlyc3RMaW5lKCksIGxhc3RMaW5l
KCksIHN0YXJ0T2Zmc2V0KCksIGxpbmVTdGFydE9mZnNldCgpKTsKKyAgICBnZW5lcmF0b3IuZW1p
dERlYnVnSG9vayhXaWxsRXhlY3V0ZVN0YXRlbWVudCwgZmlyc3RMaW5lKCksIHN0YXJ0T2Zmc2V0
KCksIGxpbmVTdGFydE9mZnNldCgpKTsKICAgICBpZiAobV9leHByMykKICAgICAgICAgZ2VuZXJh
dG9yLmVtaXROb2RlKGdlbmVyYXRvci5pZ25vcmVkUmVzdWx0KCksIG1fZXhwcjMpOwogCkBAIC0x
NjcxLDcgKzE2NzEsNyBAQCB2b2lkIEZvckluTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2Vu
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhX
aWxsRXhlY3V0ZVN0YXRlbWVudCwgZmlyc3RMaW5lKCksIGxhc3RMaW5lKCksIHN0YXJ0T2Zmc2V0
KCksIGxpbmVTdGFydE9mZnNldCgpKTsKKyAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhXaWxs
RXhlY3V0ZVN0YXRlbWVudCwgZmlyc3RMaW5lKCksIHN0YXJ0T2Zmc2V0KCksIGxpbmVTdGFydE9m
ZnNldCgpKTsKIAogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLm5ld1Rl
bXBvcmFyeSgpOwogICAgIGdlbmVyYXRvci5lbWl0Tm9kZShiYXNlLmdldCgpLCBtX2V4cHIpOwpA
QCAtMTczMiw3ICsxNzMyLDcgQEAgdm9pZCBGb3JJbk5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29k
ZUdlbgogCiAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChzY29wZS0+Y29udGludWVUYXJnZXQoKSk7
CiAgICAgZ2VuZXJhdG9yLmVtaXROZXh0UHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZSwgYmFzZS5n
ZXQoKSwgaS5nZXQoKSwgc2l6ZS5nZXQoKSwgaXRlci5nZXQoKSwgbG9vcFN0YXJ0LmdldCgpKTsK
LSAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhXaWxsRXhlY3V0ZVN0YXRlbWVudCwgZmlyc3RM
aW5lKCksIGxhc3RMaW5lKCksIHN0YXJ0T2Zmc2V0KCksIGxpbmVTdGFydE9mZnNldCgpKTsKKyAg
ICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhXaWxsRXhlY3V0ZVN0YXRlbWVudCwgZmlyc3RMaW5l
KCksIHN0YXJ0T2Zmc2V0KCksIGxpbmVTdGFydE9mZnNldCgpKTsKICAgICBnZW5lcmF0b3IuZW1p
dExhYmVsKHNjb3BlLT5icmVha1RhcmdldCgpKTsKIH0KIApAQCAtMTc1NCw3ICsxNzU0LDcgQEAg
TGFiZWwqIENvbnRpbnVlTm9kZTo6dHJpdmlhbFRhcmdldChCeXRlYwogCiB2b2lkIENvbnRpbnVl
Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVy
SUQqKQogewotICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKFdpbGxFeGVjdXRlU3RhdGVtZW50
LCBmaXJzdExpbmUoKSwgbGFzdExpbmUoKSwgc3RhcnRPZmZzZXQoKSwgbGluZVN0YXJ0T2Zmc2V0
KCkpOworICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKFdpbGxFeGVjdXRlU3RhdGVtZW50LCBm
aXJzdExpbmUoKSwgc3RhcnRPZmZzZXQoKSwgbGluZVN0YXJ0T2Zmc2V0KCkpOwogICAgIAogICAg
IExhYmVsU2NvcGUqIHNjb3BlID0gZ2VuZXJhdG9yLmNvbnRpbnVlVGFyZ2V0KG1faWRlbnQpOwog
ICAgIEFTU0VSVChzY29wZSk7CkBAIC0xNzgxLDcgKzE3ODEsNyBAQCBMYWJlbCogQnJlYWtOb2Rl
Ojp0cml2aWFsVGFyZ2V0KEJ5dGVjb2RlCiAKIHZvaWQgQnJlYWtOb2RlOjplbWl0Qnl0ZWNvZGUo
Qnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCopCiB7Ci0gICAgZ2VuZXJh
dG9yLmVtaXREZWJ1Z0hvb2soV2lsbEV4ZWN1dGVTdGF0ZW1lbnQsIGZpcnN0TGluZSgpLCBsYXN0
TGluZSgpLCBzdGFydE9mZnNldCgpLCBsaW5lU3RhcnRPZmZzZXQoKSk7CisgICAgZ2VuZXJhdG9y
LmVtaXREZWJ1Z0hvb2soV2lsbEV4ZWN1dGVTdGF0ZW1lbnQsIGZpcnN0TGluZSgpLCBzdGFydE9m
ZnNldCgpLCBsaW5lU3RhcnRPZmZzZXQoKSk7CiAgICAgCiAgICAgTGFiZWxTY29wZSogc2NvcGUg
PSBnZW5lcmF0b3IuYnJlYWtUYXJnZXQobV9pZGVudCk7CiAgICAgQVNTRVJUKHNjb3BlKTsKQEAg
LTE3OTQsNyArMTc5NCw3IEBAIHZvaWQgQnJlYWtOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVH
ZW4KIAogdm9pZCBSZXR1cm5Ob2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdl
bmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewotICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29r
KFdpbGxFeGVjdXRlU3RhdGVtZW50LCBmaXJzdExpbmUoKSwgbGFzdExpbmUoKSwgc3RhcnRPZmZz
ZXQoKSwgbGluZVN0YXJ0T2Zmc2V0KCkpOworICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKFdp
bGxFeGVjdXRlU3RhdGVtZW50LCBmaXJzdExpbmUoKSwgc3RhcnRPZmZzZXQoKSwgbGluZVN0YXJ0
T2Zmc2V0KCkpOwogICAgIEFTU0VSVChnZW5lcmF0b3IuY29kZVR5cGUoKSA9PSBGdW5jdGlvbkNv
ZGUpOwogCiAgICAgaWYgKGRzdCA9PSBnZW5lcmF0b3IuaWdub3JlZFJlc3VsdCgpKQpAQCAtMTgw
Niw3ICsxODA2LDcgQEAgdm9pZCBSZXR1cm5Ob2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZQog
ICAgICAgICBnZW5lcmF0b3IuZW1pdFBvcFNjb3BlcygwKTsKICAgICB9CiAKLSAgICBnZW5lcmF0
b3IuZW1pdERlYnVnSG9vayhXaWxsTGVhdmVDYWxsRnJhbWUsIGZpcnN0TGluZSgpLCBsYXN0TGlu
ZSgpLCBzdGFydE9mZnNldCgpLCBsaW5lU3RhcnRPZmZzZXQoKSk7CisgICAgZ2VuZXJhdG9yLmVt
aXREZWJ1Z0hvb2soV2lsbExlYXZlQ2FsbEZyYW1lLCBsYXN0TGluZSgpLCBzdGFydE9mZnNldCgp
LCBsaW5lU3RhcnRPZmZzZXQoKSk7CiAgICAgZ2VuZXJhdG9yLmVtaXRSZXR1cm4ocmV0dXJuUmVn
aXN0ZXIuZ2V0KCkpOwogfQogCkBAIC0xODE0LDcgKzE4MTQsNyBAQCB2b2lkIFJldHVybk5vZGU6
OmVtaXRCeXRlY29kZShCeXRlY29kZUdlCiAKIHZvaWQgV2l0aE5vZGU6OmVtaXRCeXRlY29kZShC
eXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAgZ2Vu
ZXJhdG9yLmVtaXREZWJ1Z0hvb2soV2lsbEV4ZWN1dGVTdGF0ZW1lbnQsIGZpcnN0TGluZSgpLCBs
YXN0TGluZSgpLCBzdGFydE9mZnNldCgpLCBsaW5lU3RhcnRPZmZzZXQoKSk7CisgICAgZ2VuZXJh
dG9yLmVtaXREZWJ1Z0hvb2soV2lsbEV4ZWN1dGVTdGF0ZW1lbnQsIGZpcnN0TGluZSgpLCBzdGFy
dE9mZnNldCgpLCBsaW5lU3RhcnRPZmZzZXQoKSk7CiAKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4g
c2NvcGUgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHByKTsKICAgICBnZW5lcmF0b3IuZW1pdEV4
cHJlc3Npb25JbmZvKG1fZGl2b3QsIG1fZGl2b3QgLSBtX2V4cHJlc3Npb25MZW5ndGgsIG1fZGl2
b3QpOwpAQCAtMTk4OCw3ICsxOTg4LDcgQEAgdm9pZCBDYXNlQmxvY2tOb2RlOjplbWl0Qnl0ZWNv
ZGVGb3JCbG9jawogCiB2b2lkIFN3aXRjaE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVy
YXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAgZ2VuZXJhdG9yLmVtaXRE
ZWJ1Z0hvb2soV2lsbEV4ZWN1dGVTdGF0ZW1lbnQsIGZpcnN0TGluZSgpLCBsYXN0TGluZSgpLCBz
dGFydE9mZnNldCgpLCBsaW5lU3RhcnRPZmZzZXQoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXREZWJ1
Z0hvb2soV2lsbEV4ZWN1dGVTdGF0ZW1lbnQsIGZpcnN0TGluZSgpLCBzdGFydE9mZnNldCgpLCBs
aW5lU3RhcnRPZmZzZXQoKSk7CiAgICAgCiAgICAgTGFiZWxTY29wZVB0ciBzY29wZSA9IGdlbmVy
YXRvci5uZXdMYWJlbFNjb3BlKExhYmVsU2NvcGU6OlN3aXRjaCk7CiAKQEAgLTIwMDIsNyArMjAw
Miw3IEBAIHZvaWQgU3dpdGNoTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2UKIAogdm9pZCBM
YWJlbE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdp
c3RlcklEKiBkc3QpCiB7Ci0gICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2soV2lsbEV4ZWN1dGVT
dGF0ZW1lbnQsIGZpcnN0TGluZSgpLCBsYXN0TGluZSgpLCBzdGFydE9mZnNldCgpLCBsaW5lU3Rh
cnRPZmZzZXQoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2soV2lsbEV4ZWN1dGVTdGF0
ZW1lbnQsIGZpcnN0TGluZSgpLCBzdGFydE9mZnNldCgpLCBsaW5lU3RhcnRPZmZzZXQoKSk7CiAK
ICAgICBBU1NFUlQoIWdlbmVyYXRvci5icmVha1RhcmdldChtX25hbWUpKTsKIApAQCAtMjAxNiw3
ICsyMDE2LDcgQEAgdm9pZCBMYWJlbE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbgogCiB2
b2lkIFRocm93Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3Is
IFJlZ2lzdGVySUQqIGRzdCkKIHsKLSAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhXaWxsRXhl
Y3V0ZVN0YXRlbWVudCwgZmlyc3RMaW5lKCksIGxhc3RMaW5lKCksIHN0YXJ0T2Zmc2V0KCksIGxp
bmVTdGFydE9mZnNldCgpKTsKKyAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhXaWxsRXhlY3V0
ZVN0YXRlbWVudCwgZmlyc3RMaW5lKCksIHN0YXJ0T2Zmc2V0KCksIGxpbmVTdGFydE9mZnNldCgp
KTsKIAogICAgIGlmIChkc3QgPT0gZ2VuZXJhdG9yLmlnbm9yZWRSZXN1bHQoKSkKICAgICAgICAg
ZHN0ID0gMDsKQEAgLTIwMzIsNyArMjAzMiw3IEBAIHZvaWQgVHJ5Tm9kZTo6ZW1pdEJ5dGVjb2Rl
KEJ5dGVjb2RlR2VuZXIKICAgICAvLyBOT1RFOiBUaGUgY2F0Y2ggYW5kIGZpbmFsbHkgYmxvY2tz
IG11c3QgYmUgbGFiZWxlZCBleHBsaWNpdGx5LCBzbyB0aGUKICAgICAvLyBvcHRpbWl6ZXIga25v
d3MgdGhleSBtYXkgYmUganVtcGVkIHRvIGZyb20gYW55d2hlcmUuCiAKLSAgICBnZW5lcmF0b3Iu
ZW1pdERlYnVnSG9vayhXaWxsRXhlY3V0ZVN0YXRlbWVudCwgZmlyc3RMaW5lKCksIGxhc3RMaW5l
KCksIHN0YXJ0T2Zmc2V0KCksIGxpbmVTdGFydE9mZnNldCgpKTsKKyAgICBnZW5lcmF0b3IuZW1p
dERlYnVnSG9vayhXaWxsRXhlY3V0ZVN0YXRlbWVudCwgZmlyc3RMaW5lKCksIHN0YXJ0T2Zmc2V0
KCksIGxpbmVTdGFydE9mZnNldCgpKTsKIAogICAgIEFTU0VSVChtX2NhdGNoQmxvY2sgfHwgbV9m
aW5hbGx5QmxvY2spOwogCkBAIC0yMTAwLDEzICsyMTAwLDEzIEBAIGlubGluZSB2b2lkIFNjb3Bl
Tm9kZTo6ZW1pdFN0YXRlbWVudHNCeXQKIAogdm9pZCBQcm9ncmFtTm9kZTo6ZW1pdEJ5dGVjb2Rl
KEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqKQogewotICAgIGdlbmVy
YXRvci5lbWl0RGVidWdIb29rKFdpbGxFeGVjdXRlUHJvZ3JhbSwgc3RhcnRMaW5lKCksIHN0YXJ0
TGluZSgpLCBzdGFydFN0YXJ0T2Zmc2V0KCksIHN0YXJ0TGluZVN0YXJ0T2Zmc2V0KCkpOworICAg
IGdlbmVyYXRvci5lbWl0RGVidWdIb29rKFdpbGxFeGVjdXRlUHJvZ3JhbSwgc3RhcnRMaW5lKCks
IHN0YXJ0U3RhcnRPZmZzZXQoKSwgc3RhcnRMaW5lU3RhcnRPZmZzZXQoKSk7CiAKICAgICBSZWZQ
dHI8UmVnaXN0ZXJJRD4gZHN0UmVnaXN0ZXIgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CiAg
ICAgZ2VuZXJhdG9yLmVtaXRMb2FkKGRzdFJlZ2lzdGVyLmdldCgpLCBqc1VuZGVmaW5lZCgpKTsK
ICAgICBlbWl0U3RhdGVtZW50c0J5dGVjb2RlKGdlbmVyYXRvciwgZHN0UmVnaXN0ZXIuZ2V0KCkp
OwogCi0gICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2soRGlkRXhlY3V0ZVByb2dyYW0sIGxhc3RM
aW5lKCksIGxhc3RMaW5lKCksIHN0YXJ0T2Zmc2V0KCksIGxpbmVTdGFydE9mZnNldCgpKTsKKyAg
ICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhEaWRFeGVjdXRlUHJvZ3JhbSwgbGFzdExpbmUoKSwg
c3RhcnRPZmZzZXQoKSwgbGluZVN0YXJ0T2Zmc2V0KCkpOwogICAgIGdlbmVyYXRvci5lbWl0RW5k
KGRzdFJlZ2lzdGVyLmdldCgpKTsKIH0KIApAQCAtMjExNCwxMyArMjExNCwxMyBAQCB2b2lkIFBy
b2dyYW1Ob2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHCiAKIHZvaWQgRXZhbE5vZGU6OmVtaXRC
eXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKikKIHsKLSAg
ICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhXaWxsRXhlY3V0ZVByb2dyYW0sIHN0YXJ0TGluZSgp
LCBzdGFydExpbmUoKSwgc3RhcnRTdGFydE9mZnNldCgpLCBzdGFydExpbmVTdGFydE9mZnNldCgp
KTsKKyAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhXaWxsRXhlY3V0ZVByb2dyYW0sIHN0YXJ0
TGluZSgpLCBzdGFydFN0YXJ0T2Zmc2V0KCksIHN0YXJ0TGluZVN0YXJ0T2Zmc2V0KCkpOwogCiAg
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGRzdFJlZ2lzdGVyID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFy
eSgpOwogICAgIGdlbmVyYXRvci5lbWl0TG9hZChkc3RSZWdpc3Rlci5nZXQoKSwganNVbmRlZmlu
ZWQoKSk7CiAgICAgZW1pdFN0YXRlbWVudHNCeXRlY29kZShnZW5lcmF0b3IsIGRzdFJlZ2lzdGVy
LmdldCgpKTsKIAotICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKERpZEV4ZWN1dGVQcm9ncmFt
LCBsYXN0TGluZSgpLCBsYXN0TGluZSgpLCBzdGFydE9mZnNldCgpLCBsaW5lU3RhcnRPZmZzZXQo
KSk7CisgICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2soRGlkRXhlY3V0ZVByb2dyYW0sIGxhc3RM
aW5lKCksIHN0YXJ0T2Zmc2V0KCksIGxpbmVTdGFydE9mZnNldCgpKTsKICAgICBnZW5lcmF0b3Iu
ZW1pdEVuZChkc3RSZWdpc3Rlci5nZXQoKSk7CiB9CiAKQEAgLTIxMjgsNyArMjEyOCw3IEBAIHZv
aWQgRXZhbE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmUKIAogdm9pZCBGdW5jdGlvbkJv
ZHlOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0
ZXJJRCopCiB7Ci0gICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2soRGlkRW50ZXJDYWxsRnJhbWUs
IHN0YXJ0TGluZSgpLCBzdGFydExpbmUoKSwgc3RhcnRTdGFydE9mZnNldCgpLCBzdGFydExpbmVT
dGFydE9mZnNldCgpKTsKKyAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhEaWRFbnRlckNhbGxG
cmFtZSwgc3RhcnRMaW5lKCksIHN0YXJ0U3RhcnRPZmZzZXQoKSwgc3RhcnRMaW5lU3RhcnRPZmZz
ZXQoKSk7CiAgICAgZW1pdFN0YXRlbWVudHNCeXRlY29kZShnZW5lcmF0b3IsIGdlbmVyYXRvci5p
Z25vcmVkUmVzdWx0KCkpOwogCiAgICAgU3RhdGVtZW50Tm9kZSogc2luZ2xlU3RhdGVtZW50ID0g
dGhpcy0+c2luZ2xlU3RhdGVtZW50KCk7CkBAIC0yMTQ1LDcgKzIxNDUsNyBAQCB2b2lkIEZ1bmN0
aW9uQm9keU5vZGU6OmVtaXRCeXRlY29kZShCeXRlCiAgICAgaWYgKCFyZXR1cm5Ob2RlKSB7CiAg
ICAgICAgIFJlZ2lzdGVySUQqIHIwID0gZ2VuZXJhdG9yLmlzQ29uc3RydWN0b3IoKSA/IGdlbmVy
YXRvci50aGlzUmVnaXN0ZXIoKSA6IGdlbmVyYXRvci5lbWl0TG9hZCgwLCBqc1VuZGVmaW5lZCgp
KTsKICAgICAgICAgQVNTRVJUKChzdGFydE9mZnNldCgpIC0gIDEpID49IGxpbmVTdGFydE9mZnNl
dCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2soV2lsbExlYXZlQ2FsbEZyYW1l
LCBsYXN0TGluZSgpLCBsYXN0TGluZSgpLCBzdGFydE9mZnNldCgpIC0gMSwgbGluZVN0YXJ0T2Zm
c2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhXaWxsTGVhdmVDYWxsRnJh
bWUsIGxhc3RMaW5lKCksIHN0YXJ0T2Zmc2V0KCkgLSAxLCBsaW5lU3RhcnRPZmZzZXQoKSk7CiAg
ICAgICAgIGdlbmVyYXRvci5lbWl0UmV0dXJuKHIwKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5oCShyZXZpc2lv
biAxNTYzNTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsOCBAQCBjbGFzcyBKU0dsb2JhbE9iamVjdDsKIGNs
YXNzIEpTVmFsdWU7CiBjbGFzcyBTb3VyY2VQcm92aWRlcjsKIAordHlwZWRlZiBFeGVjU3RhdGUg
Q2FsbEZyYW1lOworCiBjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBEZWJ1Z2dlciB7CiBwdWJsaWM6
CiAgICAgdmlydHVhbCB+RGVidWdnZXIoKTsKQEAgLTQyLDE0ICs0NCwxNCBAQCBwdWJsaWM6CiAK
ICAgICB2aXJ0dWFsIHZvaWQgc291cmNlUGFyc2VkKEV4ZWNTdGF0ZSosIFNvdXJjZVByb3ZpZGVy
KiwgaW50IGVycm9yTGluZU51bWJlciwgY29uc3QgV1RGOjpTdHJpbmcmIGVycm9yTWVzc2FnZSkg
PSAwOwogCi0gICAgdmlydHVhbCB2b2lkIGV4Y2VwdGlvbihjb25zdCBEZWJ1Z2dlckNhbGxGcmFt
ZSYsIGJvb2wpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYXRTdGF0ZW1lbnQoY29uc3QgRGVidWdn
ZXJDYWxsRnJhbWUmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNhbGxFdmVudChjb25zdCBEZWJ1
Z2dlckNhbGxGcmFtZSYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmV0dXJuRXZlbnQoY29uc3Qg
RGVidWdnZXJDYWxsRnJhbWUmKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgd2lsbEV4ZWN1dGVQ
cm9ncmFtKGNvbnN0IERlYnVnZ2VyQ2FsbEZyYW1lJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBk
aWRFeGVjdXRlUHJvZ3JhbShjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgZGlkUmVhY2hCcmVha3BvaW50KGNvbnN0IERlYnVnZ2VyQ2FsbEZyYW1lJikgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBleGNlcHRpb24oQ2FsbEZyYW1lKiwgSlNWYWx1ZSBleGNlcHRp
b25WYWx1ZSwgYm9vbCBoYXNIYW5kbGVyKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGF0U3RhdGVt
ZW50KENhbGxGcmFtZSopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2FsbEV2ZW50KENhbGxGcmFt
ZSopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmV0dXJuRXZlbnQoQ2FsbEZyYW1lKikgPSAwOwor
CisgICAgdmlydHVhbCB2b2lkIHdpbGxFeGVjdXRlUHJvZ3JhbShDYWxsRnJhbWUqKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGRpZEV4ZWN1dGVQcm9ncmFtKENhbGxGcmFtZSopID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgZGlkUmVhY2hCcmVha3BvaW50KENhbGxGcmFtZSopID0gMDsKIAogICAgIHZv
aWQgcmVjb21waWxlQWxsSlNGdW5jdGlvbnMoVk0qKTsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuY3BwCShyZXZpc2lv
biAxNTYzNTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJDYWxs
RnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw5ICszNCwzNSBAQAogI2luY2x1ZGUgIklu
dGVycHJldGVyLmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIlBhcnNlci5o
IgorI2luY2x1ZGUgIlN0YWNrVmlzaXRvci5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3Mg
TGluZUFuZENvbHVtbkZ1bmN0b3IgeworcHVibGljOgorICAgIFN0YWNrVmlzaXRvcjo6U3RhdHVz
IG9wZXJhdG9yKCkoU3RhY2tWaXNpdG9yJiB2aXNpdG9yKQorICAgIHsKKyAgICAgICAgdmlzaXRv
ci0+Y29tcHV0ZUxpbmVBbmRDb2x1bW4obV9saW5lLCBtX2NvbHVtbik7CisgICAgICAgIHJldHVy
biBTdGFja1Zpc2l0b3I6OkRvbmU7CisgICAgfQorCisgICAgdW5zaWduZWQgbGluZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbGluZTsgfQorICAgIHVuc2lnbmVkIGNvbHVtbigpIGNvbnN0IHsgcmV0dXJu
IG1fY29sdW1uOyB9CisKK3ByaXZhdGU6CisgICAgdW5zaWduZWQgbV9saW5lOworICAgIHVuc2ln
bmVkIG1fY29sdW1uOworfTsKKworRGVidWdnZXJDYWxsRnJhbWU6OkRlYnVnZ2VyQ2FsbEZyYW1l
KENhbGxGcmFtZSogY2FsbEZyYW1lKQorICAgIDogbV9jYWxsRnJhbWUoY2FsbEZyYW1lKQorewor
ICAgIExpbmVBbmRDb2x1bW5GdW5jdG9yIGZ1bmN0b3I7CisgICAgbV9jYWxsRnJhbWUtPml0ZXJh
dGUoZnVuY3Rvcik7CisgICAgbV9saW5lID0gZnVuY3Rvci5saW5lKCk7CisgICAgbV9jb2x1bW4g
PSBmdW5jdG9yLmNvbHVtbigpOworfQorCiBpbnRwdHJfdCBEZWJ1Z2dlckNhbGxGcmFtZTo6c291
cmNlSWQoKSBjb25zdAogewogICAgIHJldHVybiBtX2NhbGxGcmFtZS0+Y29kZUJsb2NrKCktPm93
bmVyRXhlY3V0YWJsZSgpLT5zb3VyY2VJRCgpOwpAQCAtMTE0LDcgKzE0MCw2IEBAIEpTVmFsdWUg
RGVidWdnZXJDYWxsRnJhbWU6OmV2YWx1YXRlKGNvbnMKIHZvaWQgRGVidWdnZXJDYWxsRnJhbWU6
OmNsZWFyKCkKIHsKICAgICBtX2NhbGxGcmFtZSA9IDA7Ci0gICAgbV9leGNlcHRpb24gPSBKU1Zh
bHVlKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmgJKHJldmlzaW9uIDE1NjM1
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNywyNSArMzcsMTIgQEAgY2xhc3MgRGVidWdnZXJDYWxsRnJh
bWUgewogcHVibGljOgogICAgIGVudW0gVHlwZSB7IFByb2dyYW1UeXBlLCBGdW5jdGlvblR5cGUg
fTsKIAotICAgIERlYnVnZ2VyQ2FsbEZyYW1lKENhbGxGcmFtZSogY2FsbEZyYW1lLCBpbnQgbGlu
ZSwgaW50IGNvbHVtbikKLSAgICAgICAgOiBtX2NhbGxGcmFtZShjYWxsRnJhbWUpCi0gICAgICAg
ICwgbV9saW5lKGxpbmUpCi0gICAgICAgICwgbV9jb2x1bW4oY29sdW1uKQotICAgIHsKLSAgICB9
Ci0KLSAgICBEZWJ1Z2dlckNhbGxGcmFtZShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgaW50IGxpbmUs
IGludCBjb2x1bW4sIEpTVmFsdWUgZXhjZXB0aW9uKQotICAgICAgICA6IG1fY2FsbEZyYW1lKGNh
bGxGcmFtZSkKLSAgICAgICAgLCBtX2xpbmUobGluZSkKLSAgICAgICAgLCBtX2NvbHVtbihjb2x1
bW4pCi0gICAgICAgICwgbV9leGNlcHRpb24oZXhjZXB0aW9uKQotICAgIHsKLSAgICB9CisgICAg
SlNfRVhQT1JUX1BSSVZBVEUgZXhwbGljaXQgRGVidWdnZXJDYWxsRnJhbWUoQ2FsbEZyYW1lKik7
CiAKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbEZyYW1l
OyB9CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgaW50cHRyX3Qgc291cmNlSWQoKSBjb25zdDsKLSAg
ICBpbnQgbGluZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZTsgfQotICAgIGludCBjb2x1bW4oKSBj
b25zdCB7IHJldHVybiBtX2NvbHVtbjsgfQorICAgIHVuc2lnbmVkIGxpbmUoKSBjb25zdCB7IHJl
dHVybiBtX2xpbmU7IH0KKyAgICB1bnNpZ25lZCBjb2x1bW4oKSBjb25zdCB7IHJldHVybiBtX2Nv
bHVtbjsgfQogICAgIEpTR2xvYmFsT2JqZWN0KiBkeW5hbWljR2xvYmFsT2JqZWN0KCkgY29uc3Qg
eyByZXR1cm4gbV9jYWxsRnJhbWUtPmR5bmFtaWNHbG9iYWxPYmplY3QoKTsgfQogICAgIEpTU2Nv
cGUqIHNjb3BlKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsRnJhbWUtPnNjb3BlKCk7IH0KICAgICBK
U19FWFBPUlRfUFJJVkFURSBTdHJpbmcgZnVuY3Rpb25OYW1lKCkgY29uc3Q7CkBAIC02MywxNSAr
NTAsMTMgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIFR5cGUgdHlwZSgpIGNvbnN0
OwogICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0KiB0aGlzT2JqZWN0KCkgY29uc3Q7CiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSBldmFsdWF0ZShjb25zdCBTdHJpbmcmLCBKU1Zh
bHVlJiBleGNlcHRpb24pIGNvbnN0OwotICAgIEpTVmFsdWUgZXhjZXB0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9leGNlcHRpb247IH0KIAogICAgIHZvaWQgY2xlYXIoKTsKIAogcHJpdmF0ZToKICAg
ICBDYWxsRnJhbWUqIG1fY2FsbEZyYW1lOwotICAgIGludCBtX2xpbmU7Ci0gICAgaW50IG1fY29s
dW1uOwotICAgIEpTVmFsdWUgbV9leGNlcHRpb247CisgICAgdW5zaWduZWQgbV9saW5lOworICAg
IHVuc2lnbmVkIG1fY29sdW1uOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHJl
dmlzaW9uIDE1NjM1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRl
cnByZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4OSw3ICszODksNyBAQCBib29sIEludGVy
cHJldGVyOjppc09wY29kZShPcGNvZGUgb3Bjb2RlCiAjZW5kaWYKIH0KIAotc3RhdGljIGJvb2wg
dW53aW5kQ2FsbEZyYW1lKFN0YWNrVmlzaXRvciYgdmlzaXRvciwgSlNWYWx1ZSBleGNlcHRpb25W
YWx1ZSkKK3N0YXRpYyBib29sIHVud2luZENhbGxGcmFtZShTdGFja1Zpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSB2aXNpdG9yLT5jYWxsRnJhbWUoKTsKICAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHZpc2l0b3ItPmNvZGVCbG9jaygpOwpAQCAtMzk3LDEy
ICszOTcsMTAgQEAgc3RhdGljIGJvb2wgdW53aW5kQ2FsbEZyYW1lKFN0YWNrVmlzaXRvcgogICAg
IEpTU2NvcGUqIHNjb3BlID0gY2FsbEZyYW1lLT5zY29wZSgpOwogCiAgICAgaWYgKERlYnVnZ2Vy
KiBkZWJ1Z2dlciA9IGNhbGxGcmFtZS0+ZHluYW1pY0dsb2JhbE9iamVjdCgpLT5kZWJ1Z2dlcigp
KSB7Ci0gICAgICAgIGludCBsaW5lID0gY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+bGFz
dExpbmUoKTsKLSAgICAgICAgRGVidWdnZXJDYWxsRnJhbWUgZGVidWdnZXJDYWxsRnJhbWUoY2Fs
bEZyYW1lLCBsaW5lLCAwLCBleGNlcHRpb25WYWx1ZSk7CiAgICAgICAgIGlmIChjYWxsRnJhbWUt
PmNhbGxlZSgpKQotICAgICAgICAgICAgZGVidWdnZXItPnJldHVybkV2ZW50KGRlYnVnZ2VyQ2Fs
bEZyYW1lKTsKKyAgICAgICAgICAgIGRlYnVnZ2VyLT5yZXR1cm5FdmVudChjYWxsRnJhbWUpOwog
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBkZWJ1Z2dlci0+ZGlkRXhlY3V0ZVByb2dyYW0oZGVi
dWdnZXJDYWxsRnJhbWUpOworICAgICAgICAgICAgZGVidWdnZXItPmRpZEV4ZWN1dGVQcm9ncmFt
KGNhbGxGcmFtZSk7CiAgICAgfQogCiAgICAgSlNWYWx1ZSBhY3RpdmF0aW9uOwpAQCAtNjAzLDkg
KzYwMSw4IEBAIHByaXZhdGU6CiAKIGNsYXNzIFVud2luZEZ1bmN0b3IgewogcHVibGljOgotICAg
IFVud2luZEZ1bmN0b3IoQ2FsbEZyYW1lKiYgY2FsbEZyYW1lLCBKU1ZhbHVlJiBleGNlcHRpb25W
YWx1ZSwgYm9vbCBpc1Rlcm1pbmF0aW9uLCBDb2RlQmxvY2sqJiBjb2RlQmxvY2ssIEhhbmRsZXJJ
bmZvKiYgaGFuZGxlcikKKyAgICBVbndpbmRGdW5jdG9yKENhbGxGcmFtZSomIGNhbGxGcmFtZSwg
Ym9vbCBpc1Rlcm1pbmF0aW9uLCBDb2RlQmxvY2sqJiBjb2RlQmxvY2ssIEhhbmRsZXJJbmZvKiYg
aGFuZGxlcikKICAgICAgICAgOiBtX2NhbGxGcmFtZShjYWxsRnJhbWUpCi0gICAgICAgICwgbV9l
eGNlcHRpb25WYWx1ZShleGNlcHRpb25WYWx1ZSkKICAgICAgICAgLCBtX2lzVGVybWluYXRpb24o
aXNUZXJtaW5hdGlvbikKICAgICAgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxvY2spCiAgICAgICAg
ICwgbV9oYW5kbGVyKGhhbmRsZXIpCkBAIC02MjAsNyArNjE3LDcgQEAgcHVibGljOgogICAgICAg
ICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IHZpc2l0b3ItPmJ5dGVjb2RlT2Zmc2V0KCk7CiAK
ICAgICAgICAgaWYgKG1faXNUZXJtaW5hdGlvbiB8fCAhKG1faGFuZGxlciA9IG1fY29kZUJsb2Nr
LT5oYW5kbGVyRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpKSkgewotICAgICAgICAg
ICAgaWYgKCF1bndpbmRDYWxsRnJhbWUodmlzaXRvciwgbV9leGNlcHRpb25WYWx1ZSkpIHsKKyAg
ICAgICAgICAgIGlmICghdW53aW5kQ2FsbEZyYW1lKHZpc2l0b3IpKSB7CiAgICAgICAgICAgICAg
ICAgaWYgKExlZ2FjeVByb2ZpbGVyKiBwcm9maWxlciA9IHZtLmVuYWJsZWRQcm9maWxlcigpKQog
ICAgICAgICAgICAgICAgICAgICBwcm9maWxlci0+ZXhjZXB0aW9uVW53aW5kKG1fY2FsbEZyYW1l
KTsKICAgICAgICAgICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpEb25lOwpAQCAtNjMzLDcg
KzYzMCw2IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBDYWxsRnJhbWUqJiBtX2NhbGxGcmFt
ZTsKLSAgICBKU1ZhbHVlJiBtX2V4Y2VwdGlvblZhbHVlOwogICAgIGJvb2wgbV9pc1Rlcm1pbmF0
aW9uOwogICAgIENvZGVCbG9jayomIG1fY29kZUJsb2NrOwogICAgIEhhbmRsZXJJbmZvKiYgbV9o
YW5kbGVyOwpAQCAtNjY2LDEwICs2NjIsNiBAQCBORVZFUl9JTkxJTkUgSGFuZGxlckluZm8qIElu
dGVycHJldGVyOjp1CiAgICAgICAgIC8vIElmIHRoYXQgYXNzdW1wdGlvbiB0dXJucyBvdXQgdG8g
YmUgZmFsc2UgdGhlbiB3ZSdsbCBpZ25vcmUgdGhlIGlubGluZWQgY2FsbAogICAgICAgICAvLyBm
cmFtZXMuCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMjE3NTQKLSAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBjYWxsRnJhbWUtPmJ5
dGVjb2RlT2Zmc2V0KCk7Ci0gICAgICAgIGludCBsaW5lID0gY29kZUJsb2NrLT5saW5lTnVtYmVy
Rm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpOwotICAgICAgICBpbnQgY29sdW1uID0g
Y29kZUJsb2NrLT5jb2x1bW5OdW1iZXJGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCk7
Ci0gICAgICAgIERlYnVnZ2VyQ2FsbEZyYW1lIGRlYnVnZ2VyQ2FsbEZyYW1lKGNhbGxGcmFtZSwg
bGluZSwgY29sdW1uLCBleGNlcHRpb25WYWx1ZSk7CiAKICAgICAgICAgYm9vbCBoYXNIYW5kbGVy
OwogICAgICAgICBpZiAoaXNUZXJtaW5hdGlvbikKQEAgLTY4MCwxNCArNjcyLDE0IEBAIE5FVkVS
X0lOTElORSBIYW5kbGVySW5mbyogSW50ZXJwcmV0ZXI6OnUKICAgICAgICAgICAgIGhhc0hhbmRs
ZXIgPSAhIWZ1bmN0b3IuaGFuZGxlcigpOwogICAgICAgICB9CiAKLSAgICAgICAgZGVidWdnZXIt
PmV4Y2VwdGlvbihkZWJ1Z2dlckNhbGxGcmFtZSwgaGFzSGFuZGxlcik7CisgICAgICAgIGRlYnVn
Z2VyLT5leGNlcHRpb24oY2FsbEZyYW1lLCBleGNlcHRpb25WYWx1ZSwgaGFzSGFuZGxlcik7CiAg
ICAgfQogCiAgICAgLy8gQ2FsY3VsYXRlIGFuIGV4Y2VwdGlvbiBoYW5kbGVyIHZQQywgdW53aW5k
aW5nIGNhbGwgZnJhbWVzIGFzIG5lY2Vzc2FyeS4KICAgICBIYW5kbGVySW5mbyogaGFuZGxlciA9
IDA7CiAgICAgVk0mIHZtID0gY2FsbEZyYW1lLT52bSgpOwogICAgIEFTU0VSVChjYWxsRnJhbWUg
PT0gdm0udG9wQ2FsbEZyYW1lKTsKLSAgICBVbndpbmRGdW5jdG9yIGZ1bmN0b3IoY2FsbEZyYW1l
LCBleGNlcHRpb25WYWx1ZSwgaXNUZXJtaW5hdGlvbiwgY29kZUJsb2NrLCBoYW5kbGVyKTsKKyAg
ICBVbndpbmRGdW5jdG9yIGZ1bmN0b3IoY2FsbEZyYW1lLCBpc1Rlcm1pbmF0aW9uLCBjb2RlQmxv
Y2ssIGhhbmRsZXIpOwogICAgIGNhbGxGcmFtZS0+aXRlcmF0ZShmdW5jdG9yKTsKICAgICBpZiAo
IWhhbmRsZXIpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMTI2MCw3ICsxMjUyLDcgQEAgSlNWYWx1
ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShFdmFsRXhlY3V0YQogICAgIHJldHVybiBjaGVja2VkUmV0
dXJuKHJlc3VsdCk7CiB9CiAKLU5FVkVSX0lOTElORSB2b2lkIEludGVycHJldGVyOjpkZWJ1ZyhD
YWxsRnJhbWUqIGNhbGxGcmFtZSwgRGVidWdIb29rSUQgZGVidWdIb29rSUQsIGludCBmaXJzdExp
bmUsIGludCBsYXN0TGluZSwgaW50IGNvbHVtbikKK05FVkVSX0lOTElORSB2b2lkIEludGVycHJl
dGVyOjpkZWJ1ZyhDYWxsRnJhbWUqIGNhbGxGcmFtZSwgRGVidWdIb29rSUQgZGVidWdIb29rSUQp
CiB7CiAgICAgRGVidWdnZXIqIGRlYnVnZ2VyID0gY2FsbEZyYW1lLT5keW5hbWljR2xvYmFsT2Jq
ZWN0KCktPmRlYnVnZ2VyKCk7CiAgICAgaWYgKCFkZWJ1Z2dlcikKQEAgLTEyNjgsMjIgKzEyNjAs
MjIgQEAgTkVWRVJfSU5MSU5FIHZvaWQgSW50ZXJwcmV0ZXI6OmRlYnVnKENhbAogCiAgICAgc3dp
dGNoIChkZWJ1Z0hvb2tJRCkgewogICAgICAgICBjYXNlIERpZEVudGVyQ2FsbEZyYW1lOgotICAg
ICAgICAgICAgZGVidWdnZXItPmNhbGxFdmVudChEZWJ1Z2dlckNhbGxGcmFtZShjYWxsRnJhbWUs
IGZpcnN0TGluZSwgY29sdW1uKSk7CisgICAgICAgICAgICBkZWJ1Z2dlci0+Y2FsbEV2ZW50KGNh
bGxGcmFtZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNhc2UgV2lsbExlYXZlQ2Fs
bEZyYW1lOgotICAgICAgICAgICAgZGVidWdnZXItPnJldHVybkV2ZW50KERlYnVnZ2VyQ2FsbEZy
YW1lKGNhbGxGcmFtZSwgbGFzdExpbmUsIGNvbHVtbikpOworICAgICAgICAgICAgZGVidWdnZXIt
PnJldHVybkV2ZW50KGNhbGxGcmFtZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNh
c2UgV2lsbEV4ZWN1dGVTdGF0ZW1lbnQ6Ci0gICAgICAgICAgICBkZWJ1Z2dlci0+YXRTdGF0ZW1l
bnQoRGVidWdnZXJDYWxsRnJhbWUoY2FsbEZyYW1lLCBmaXJzdExpbmUsIGNvbHVtbikpOworICAg
ICAgICAgICAgZGVidWdnZXItPmF0U3RhdGVtZW50KGNhbGxGcmFtZSk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIGNhc2UgV2lsbEV4ZWN1dGVQcm9ncmFtOgotICAgICAgICAgICAgZGVi
dWdnZXItPndpbGxFeGVjdXRlUHJvZ3JhbShEZWJ1Z2dlckNhbGxGcmFtZShjYWxsRnJhbWUsIGZp
cnN0TGluZSwgY29sdW1uKSk7CisgICAgICAgICAgICBkZWJ1Z2dlci0+d2lsbEV4ZWN1dGVQcm9n
cmFtKGNhbGxGcmFtZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNhc2UgRGlkRXhl
Y3V0ZVByb2dyYW06Ci0gICAgICAgICAgICBkZWJ1Z2dlci0+ZGlkRXhlY3V0ZVByb2dyYW0oRGVi
dWdnZXJDYWxsRnJhbWUoY2FsbEZyYW1lLCBsYXN0TGluZSwgY29sdW1uKSk7CisgICAgICAgICAg
ICBkZWJ1Z2dlci0+ZGlkRXhlY3V0ZVByb2dyYW0oY2FsbEZyYW1lKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgY2FzZSBEaWRSZWFjaEJyZWFrcG9pbnQ6Ci0gICAgICAgICAgICBkZWJ1
Z2dlci0+ZGlkUmVhY2hCcmVha3BvaW50KERlYnVnZ2VyQ2FsbEZyYW1lKGNhbGxGcmFtZSwgbGFz
dExpbmUsIGNvbHVtbikpOworICAgICAgICAgICAgZGVidWdnZXItPmRpZFJlYWNoQnJlYWtwb2lu
dChjYWxsRnJhbWUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIH0gICAgCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAkocmV2
aXNpb24gMTU2MzU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVy
cHJldGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzOSw3ICsyMzksNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgYm9vbCBpc0luRXJyb3JIYW5kbGluZ01vZGUoKSB7IHJldHVybiBtX2Vycm9y
SGFuZGxpbmdNb2RlUmVlbnRyeTsgfQogCiAgICAgICAgIE5FVkVSX0lOTElORSBIYW5kbGVySW5m
byogdW53aW5kKENhbGxGcmFtZSomLCBKU1ZhbHVlJik7Ci0gICAgICAgIE5FVkVSX0lOTElORSB2
b2lkIGRlYnVnKENhbGxGcmFtZSosIERlYnVnSG9va0lELCBpbnQgZmlyc3RMaW5lLCBpbnQgbGFz
dExpbmUsIGludCBjb2x1bW4pOworICAgICAgICBORVZFUl9JTkxJTkUgdm9pZCBkZWJ1ZyhDYWxs
RnJhbWUqLCBEZWJ1Z0hvb2tJRCk7CiAgICAgICAgIEpTU3RyaW5nKiBzdGFja1RyYWNlQXNTdHJp
bmcoRXhlY1N0YXRlKiwgVmVjdG9yPFN0YWNrRnJhbWU+KTsKIAogICAgICAgICBzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RXaXRoRXJyb3JDb25zdHJ1Y3RvcihF
eGVjU3RhdGUqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMy
XzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29k
ZXMzMl82NC5jcHAJKHJldmlzaW9uIDE1NjM1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3Bjb2RlczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4Myw5ICsxMDgzLDYg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVidWcoSW5zdHJ1Y3Rpb24qIGN1cgogI2Vsc2UKICAgICBK
SVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfZGVidWcpOwogICAgIHN0dWJDYWxsLmFk
ZEFyZ3VtZW50KEltbTMyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKTsKLSAgICBz
dHViQ2FsbC5hZGRBcmd1bWVudChJbW0zMihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
KSk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoSW1tMzIoY3VycmVudEluc3RydWN0aW9uWzNd
LnUub3BlcmFuZCkpOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KEltbTMyKGN1cnJlbnRJbnN0
cnVjdGlvbls0XS51Lm9wZXJhbmQpKTsKICAgICBzdHViQ2FsbC5jYWxsKCk7CiAjZW5kaWYKIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24g
MTU2MzU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzU3LDkgKzc1Nyw2IEBAIHZvaWQgSklUOjplbWl0X29wX2RlYnVnKElu
c3RydWN0aW9uKiBjdXIKICNlbHNlCiAgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3Rp
X29wX2RlYnVnKTsKICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tMzIoY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRy
dXN0ZWRJbW0zMihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSk7Ci0gICAgc3R1YkNh
bGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbTMyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJh
bmQpKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tMzIoY3VycmVudEluc3Ry
dWN0aW9uWzRdLnUub3BlcmFuZCkpOwogICAgIHN0dWJDYWxsLmNhbGwoKTsKICNlbmRpZgogfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHJldmlzaW9uIDE1NjM1
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMTQ3LDExICsyMTQ3LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3Bf
ZGVidWcpCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsK
IAogICAgIGludCBkZWJ1Z0hvb2tJRCA9IHN0YWNrRnJhbWUuYXJnc1swXS5pbnQzMigpOwotICAg
IGludCBmaXJzdExpbmUgPSBzdGFja0ZyYW1lLmFyZ3NbMV0uaW50MzIoKTsKLSAgICBpbnQgbGFz
dExpbmUgPSBzdGFja0ZyYW1lLmFyZ3NbMl0uaW50MzIoKTsKLSAgICBpbnQgY29sdW1uID0gc3Rh
Y2tGcmFtZS5hcmdzWzNdLmludDMyKCk7Ci0KLSAgICBzdGFja0ZyYW1lLnZtLT5pbnRlcnByZXRl
ci0+ZGVidWcoY2FsbEZyYW1lLCBzdGF0aWNfY2FzdDxEZWJ1Z0hvb2tJRD4oZGVidWdIb29rSUQp
LCBmaXJzdExpbmUsIGxhc3RMaW5lLCBjb2x1bW4pOworICAgIHN0YWNrRnJhbWUudm0tPmludGVy
cHJldGVyLT5kZWJ1ZyhjYWxsRnJhbWUsIHN0YXRpY19jYXN0PERlYnVnSG9va0lEPihkZWJ1Z0hv
b2tJRCkpOwogfQogCiBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkKiwgdm1fdGhyb3cpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHJl
dmlzaW9uIDE1NjM1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQ
YXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMzksMTEgKzEyMzksNyBAQCBMTElOVF9TTE9X
X1BBVEhfREVDTChzbG93X3BhdGhfZGVidWcpCiB7CiAgICAgTExJTlRfQkVHSU4oKTsKICAgICBp
bnQgZGVidWdIb29rSUQgPSBwY1sxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IGZpcnN0TGluZSA9IHBj
WzJdLnUub3BlcmFuZDsKLSAgICBpbnQgbGFzdExpbmUgPSBwY1szXS51Lm9wZXJhbmQ7Ci0gICAg
aW50IGNvbHVtbiA9IHBjWzRdLnUub3BlcmFuZDsKLQotICAgIHZtLmludGVycHJldGVyLT5kZWJ1
ZyhleGVjLCBzdGF0aWNfY2FzdDxEZWJ1Z0hvb2tJRD4oZGVidWdIb29rSUQpLCBmaXJzdExpbmUs
IGxhc3RMaW5lLCBjb2x1bW4pOworICAgIHZtLmludGVycHJldGVyLT5kZWJ1ZyhleGVjLCBzdGF0
aWNfY2FzdDxEZWJ1Z0hvb2tJRD4oZGVidWdIb29rSUQpKTsKICAgICAKICAgICBMTElOVF9FTkQo
KTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyLmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlci5hc20JKHJldmlzaW9uIDE1NjM1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkod29ya2luZyBjb3B5KQpAQCAtNzk1
LDcgKzc5NSw3IEBAIF9sbGludF9vcF9wcm9maWxlX2RpZF9jYWxsOgogX2xsaW50X29wX2RlYnVn
OgogICAgIHRyYWNlRXhlY3V0aW9uKCkKICAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0
aF9kZWJ1ZykKLSAgICBkaXNwYXRjaCg1KQorICAgIGRpc3BhdGNoKDIpCiAKIAogX2xsaW50X25h
dGl2ZV9jYWxsX3RyYW1wb2xpbmU6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNTYzNzApCisr
KyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNyBA
QAorMjAxMy0wOS0yNCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
Q2hhbmdlIEpTQyBkZWJ1ZyBob29rcyB0byBwYXNzIGEgQ2FsbEZyYW1lKiBpbnN0ZWFkIG9mIGEg
RGVidWdnZXJDYWxsRnJhbWUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMjE4NjcuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgTm8gbmV3IHRlc3RzLgorCisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0
RGVidWdTZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OmNy
ZWF0ZUNhbGxGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6dXBk
YXRlQ2FsbEZyYW1lQW5kUGF1c2VJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRE
ZWJ1Z1NlcnZlcjo6Y2FsbEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2Vy
dmVyOjphdFN0YXRlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6
cmV0dXJuRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OmV4Y2Vw
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6d2lsbEV4ZWN1dGVQ
cm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpkaWRFeGVjdXRl
UHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6ZGlkUmVhY2hC
cmVha3BvaW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5oOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL1dvcmtlclNjcmlwdERlYnVnU2VydmVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OldvcmtlclNjcmlwdERlYnVnU2VydmVyOjp3aWxsRXhlY3V0ZVByb2dyYW0p
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL1dvcmtlclNjcmlwdERlYnVnU2VydmVyLmg6CisKIDIw
MTMtMDktMjQgIFpvbHRhbiBIb3J2YXRoICA8em9sdGFuQHdlYmtpdC5vcmc+CiAKICAgICAgICAg
W0NTUyBTaGFwZXNdIE1vZGlmeSB1cGRhdGVTZWdtZW50c0ZvclNoYXBlcyBmdW5jdGlvbiB0byB1
c2UgbG9naWNhbCBjb29yZGluYXRlcwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
U2NyaXB0RGVidWdTZXJ2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmNwcAkocmV2aXNpb24gMTU2MzU2KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00MjksMjQgKzQyOSwyNSBAQCB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpkaXNwYXRjaEZ1
bmN0aW9uCiAgICAgbV9jYWxsaW5nTGlzdGVuZXJzID0gZmFsc2U7CiB9CiAKLXZvaWQgU2NyaXB0
RGVidWdTZXJ2ZXI6OmNyZWF0ZUNhbGxGcmFtZShjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYgZGVi
dWdnZXJDYWxsRnJhbWUpCit2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpjcmVhdGVDYWxsRnJhbWUo
Q2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgaW50cHRyX3Qgc291cmNlSWQgPSBkZWJ1Z2dl
ckNhbGxGcmFtZS5zb3VyY2VJZCgpOworICAgIERlYnVnZ2VyQ2FsbEZyYW1lIGRlYnVnZ2VyQ2Fs
bEZyYW1lKGNhbGxGcmFtZSk7CiAgICAgbV9jdXJyZW50Q2FsbEZyYW1lID0gSmF2YVNjcmlwdENh
bGxGcmFtZTo6Y3JlYXRlKGRlYnVnZ2VyQ2FsbEZyYW1lLCBtX2N1cnJlbnRDYWxsRnJhbWUpOwor
ICAgIGludHB0cl90IHNvdXJjZUlkID0gbV9jdXJyZW50Q2FsbEZyYW1lLT5zb3VyY2VJRCgpOwog
ICAgIGlmIChtX2xhc3RFeGVjdXRlZFNvdXJjZUlkICE9IHNvdXJjZUlkKSB7CiAgICAgICAgIG1f
bGFzdEV4ZWN1dGVkTGluZSA9IC0xOwogICAgICAgICBtX2xhc3RFeGVjdXRlZFNvdXJjZUlkID0g
c291cmNlSWQ7CiAgICAgfQogfQogCi12b2lkIFNjcmlwdERlYnVnU2VydmVyOjp1cGRhdGVDYWxs
RnJhbWVBbmRQYXVzZUlmTmVlZGVkKGNvbnN0IERlYnVnZ2VyQ2FsbEZyYW1lJiBkZWJ1Z2dlckNh
bGxGcmFtZSkKK3ZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnVwZGF0ZUNhbGxGcmFtZUFuZFBhdXNl
SWZOZWVkZWQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7CiAgICAgLy8gQVNTRVJUKG1fY3VycmVu
dENhbGxGcmFtZSk7CiAgICAgaWYgKCFtX2N1cnJlbnRDYWxsRnJhbWUpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIG1fY3VycmVudENhbGxGcmFtZS0+dXBkYXRlKGRlYnVnZ2VyQ2FsbEZyYW1lKTsK
LSAgICBwYXVzZUlmTmVlZGVkKGRlYnVnZ2VyQ2FsbEZyYW1lLmR5bmFtaWNHbG9iYWxPYmplY3Qo
KSk7CisgICAgbV9jdXJyZW50Q2FsbEZyYW1lLT51cGRhdGUoRGVidWdnZXJDYWxsRnJhbWUoY2Fs
bEZyYW1lKSk7CisgICAgcGF1c2VJZk5lZWRlZChjYWxsRnJhbWUtPmR5bmFtaWNHbG9iYWxPYmpl
Y3QoKSk7CiB9CiAKIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnBhdXNlSWZOZWVkZWQoSlNHbG9i
YWxPYmplY3QqIGR5bmFtaWNHbG9iYWxPYmplY3QpCkBAIC00OTIsMjYgKzQ5MywyNiBAQCB2b2lk
IFNjcmlwdERlYnVnU2VydmVyOjpwYXVzZUlmTmVlZGVkKEpTCiAgICAgbV9wYXVzZWQgPSBmYWxz
ZTsKIH0KIAotdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6Y2FsbEV2ZW50KGNvbnN0IERlYnVnZ2Vy
Q2FsbEZyYW1lJiBkZWJ1Z2dlckNhbGxGcmFtZSkKK3ZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmNh
bGxFdmVudChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKICAgICBpZiAoIW1fcGF1c2VkKSB7Ci0g
ICAgICAgIGNyZWF0ZUNhbGxGcmFtZShkZWJ1Z2dlckNhbGxGcmFtZSk7Ci0gICAgICAgIHBhdXNl
SWZOZWVkZWQoZGVidWdnZXJDYWxsRnJhbWUuZHluYW1pY0dsb2JhbE9iamVjdCgpKTsKKyAgICAg
ICAgY3JlYXRlQ2FsbEZyYW1lKGNhbGxGcmFtZSk7CisgICAgICAgIHBhdXNlSWZOZWVkZWQoY2Fs
bEZyYW1lLT5keW5hbWljR2xvYmFsT2JqZWN0KCkpOwogICAgIH0KIH0KIAotdm9pZCBTY3JpcHRE
ZWJ1Z1NlcnZlcjo6YXRTdGF0ZW1lbnQoY29uc3QgRGVidWdnZXJDYWxsRnJhbWUmIGRlYnVnZ2Vy
Q2FsbEZyYW1lKQordm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6YXRTdGF0ZW1lbnQoQ2FsbEZyYW1l
KiBjYWxsRnJhbWUpCiB7CiAgICAgaWYgKCFtX3BhdXNlZCkKLSAgICAgICAgdXBkYXRlQ2FsbEZy
YW1lQW5kUGF1c2VJZk5lZWRlZChkZWJ1Z2dlckNhbGxGcmFtZSk7CisgICAgICAgIHVwZGF0ZUNh
bGxGcmFtZUFuZFBhdXNlSWZOZWVkZWQoY2FsbEZyYW1lKTsKIH0KIAotdm9pZCBTY3JpcHREZWJ1
Z1NlcnZlcjo6cmV0dXJuRXZlbnQoY29uc3QgRGVidWdnZXJDYWxsRnJhbWUmIGRlYnVnZ2VyQ2Fs
bEZyYW1lKQordm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6cmV0dXJuRXZlbnQoQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpCiB7CiAgICAgaWYgKG1fcGF1c2VkKQogICAgICAgICByZXR1cm47CiAKLSAgICB1
cGRhdGVDYWxsRnJhbWVBbmRQYXVzZUlmTmVlZGVkKGRlYnVnZ2VyQ2FsbEZyYW1lKTsKKyAgICB1
cGRhdGVDYWxsRnJhbWVBbmRQYXVzZUlmTmVlZGVkKGNhbGxGcmFtZSk7CiAKICAgICAvLyBkZXRh
Y2ggbWF5IGhhdmUgYmVlbiBjYWxsZWQgZHVyaW5nIHBhdXNlSWZOZWVkZWQKICAgICBpZiAoIW1f
Y3VycmVudENhbGxGcmFtZSkKQEAgLTUyMyw3ICs1MjQsNyBAQCB2b2lkIFNjcmlwdERlYnVnU2Vy
dmVyOjpyZXR1cm5FdmVudChjb25zCiAgICAgbV9jdXJyZW50Q2FsbEZyYW1lID0gbV9jdXJyZW50
Q2FsbEZyYW1lLT5jYWxsZXIoKTsKIH0KIAotdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6ZXhjZXB0
aW9uKGNvbnN0IERlYnVnZ2VyQ2FsbEZyYW1lJiBkZWJ1Z2dlckNhbGxGcmFtZSwgYm9vbCBoYXNI
YW5kbGVyKQordm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6ZXhjZXB0aW9uKENhbGxGcmFtZSogY2Fs
bEZyYW1lLCBKU1ZhbHVlLCBib29sIGhhc0hhbmRsZXIpCiB7CiAgICAgaWYgKG1fcGF1c2VkKQog
ICAgICAgICByZXR1cm47CkBAIC01MzEsMjMgKzUzMiwyMyBAQCB2b2lkIFNjcmlwdERlYnVnU2Vy
dmVyOjpleGNlcHRpb24oY29uc3QgCiAgICAgaWYgKG1fcGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSA9
PSBQYXVzZU9uQWxsRXhjZXB0aW9ucyB8fCAobV9wYXVzZU9uRXhjZXB0aW9uc1N0YXRlID09IFBh
dXNlT25VbmNhdWdodEV4Y2VwdGlvbnMgJiYgIWhhc0hhbmRsZXIpKQogICAgICAgICBtX3BhdXNl
T25OZXh0U3RhdGVtZW50ID0gdHJ1ZTsKIAotICAgIHVwZGF0ZUNhbGxGcmFtZUFuZFBhdXNlSWZO
ZWVkZWQoZGVidWdnZXJDYWxsRnJhbWUpOworICAgIHVwZGF0ZUNhbGxGcmFtZUFuZFBhdXNlSWZO
ZWVkZWQoY2FsbEZyYW1lKTsKIH0KIAotdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6d2lsbEV4ZWN1
dGVQcm9ncmFtKGNvbnN0IERlYnVnZ2VyQ2FsbEZyYW1lJiBkZWJ1Z2dlckNhbGxGcmFtZSkKK3Zv
aWQgU2NyaXB0RGVidWdTZXJ2ZXI6OndpbGxFeGVjdXRlUHJvZ3JhbShDYWxsRnJhbWUqIGNhbGxG
cmFtZSkKIHsKICAgICBpZiAoIW1fcGF1c2VkKSB7Ci0gICAgICAgIGNyZWF0ZUNhbGxGcmFtZShk
ZWJ1Z2dlckNhbGxGcmFtZSk7Ci0gICAgICAgIHBhdXNlSWZOZWVkZWQoZGVidWdnZXJDYWxsRnJh
bWUuZHluYW1pY0dsb2JhbE9iamVjdCgpKTsKKyAgICAgICAgY3JlYXRlQ2FsbEZyYW1lKGNhbGxG
cmFtZSk7CisgICAgICAgIHBhdXNlSWZOZWVkZWQoY2FsbEZyYW1lLT5keW5hbWljR2xvYmFsT2Jq
ZWN0KCkpOwogICAgIH0KIH0KIAotdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6ZGlkRXhlY3V0ZVBy
b2dyYW0oY29uc3QgRGVidWdnZXJDYWxsRnJhbWUmIGRlYnVnZ2VyQ2FsbEZyYW1lKQordm9pZCBT
Y3JpcHREZWJ1Z1NlcnZlcjo6ZGlkRXhlY3V0ZVByb2dyYW0oQ2FsbEZyYW1lKiBjYWxsRnJhbWUp
CiB7CiAgICAgaWYgKG1fcGF1c2VkKQogICAgICAgICByZXR1cm47CiAKLSAgICB1cGRhdGVDYWxs
RnJhbWVBbmRQYXVzZUlmTmVlZGVkKGRlYnVnZ2VyQ2FsbEZyYW1lKTsKKyAgICB1cGRhdGVDYWxs
RnJhbWVBbmRQYXVzZUlmTmVlZGVkKGNhbGxGcmFtZSk7CiAKICAgICAvLyBUcmVhdCBzdGVwcGlu
ZyBvdmVyIHRoZSBlbmQgb2YgYSBwcm9ncmFtIGxpa2Ugc3RlcHBpbmcgb3V0LgogICAgIGlmICgh
bV9jdXJyZW50Q2FsbEZyYW1lKQpAQCAtNTYwLDEzICs1NjEsMTMgQEAgdm9pZCBTY3JpcHREZWJ1
Z1NlcnZlcjo6ZGlkRXhlY3V0ZVByb2dyYQogICAgIG1fY3VycmVudENhbGxGcmFtZSA9IG1fY3Vy
cmVudENhbGxGcmFtZS0+Y2FsbGVyKCk7CiB9CiAKLXZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmRp
ZFJlYWNoQnJlYWtwb2ludChjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYgZGVidWdnZXJDYWxsRnJh
bWUpCit2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpkaWRSZWFjaEJyZWFrcG9pbnQoQ2FsbEZyYW1l
KiBjYWxsRnJhbWUpCiB7CiAgICAgaWYgKG1fcGF1c2VkKQogICAgICAgICByZXR1cm47CiAKICAg
ICBtX3BhdXNlT25OZXh0U3RhdGVtZW50ID0gdHJ1ZTsKLSAgICB1cGRhdGVDYWxsRnJhbWVBbmRQ
YXVzZUlmTmVlZGVkKGRlYnVnZ2VyQ2FsbEZyYW1lKTsKKyAgICB1cGRhdGVDYWxsRnJhbWVBbmRQ
YXVzZUlmTmVlZGVkKGNhbGxGcmFtZSk7CiB9CiAKIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnJl
Y29tcGlsZUFsbEpTRnVuY3Rpb25zU29vbigpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmgJKHJldmlzaW9uIDE1NjM1NikKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEzNSwyMCArMTM1LDIwIEBAIHByb3RlY3RlZDoKICAgICB2b2lkIGRpc3BhdGNoRGlkUGFy
c2VTb3VyY2UoY29uc3QgTGlzdGVuZXJTZXQmIGxpc3RlbmVycywgSlNDOjpTb3VyY2VQcm92aWRl
ciosIGJvb2wgaXNDb250ZW50U2NyaXB0KTsKICAgICB2b2lkIGRpc3BhdGNoRmFpbGVkVG9QYXJz
ZVNvdXJjZShjb25zdCBMaXN0ZW5lclNldCYgbGlzdGVuZXJzLCBKU0M6OlNvdXJjZVByb3ZpZGVy
KiwgaW50IGVycm9yTGluZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpOwogCi0gICAgdm9p
ZCBjcmVhdGVDYWxsRnJhbWUoY29uc3QgSlNDOjpEZWJ1Z2dlckNhbGxGcmFtZSYpOwotICAgIHZv
aWQgdXBkYXRlQ2FsbEZyYW1lQW5kUGF1c2VJZk5lZWRlZChjb25zdCBKU0M6OkRlYnVnZ2VyQ2Fs
bEZyYW1lJik7CisgICAgdm9pZCBjcmVhdGVDYWxsRnJhbWUoSlNDOjpDYWxsRnJhbWUqKTsKKyAg
ICB2b2lkIHVwZGF0ZUNhbGxGcmFtZUFuZFBhdXNlSWZOZWVkZWQoSlNDOjpDYWxsRnJhbWUqKTsK
ICAgICB2b2lkIHBhdXNlSWZOZWVkZWQoSlNDOjpKU0dsb2JhbE9iamVjdCogZHluYW1pY0dsb2Jh
bE9iamVjdCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoKEpTQzo6SlNHbG9iYWxPYmplY3Qq
KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoKEpTQzo6SlNHbG9iYWxPYmplY3QqKSBPVkVSUklE
RTsKIAotICAgIHZpcnR1YWwgdm9pZCBzb3VyY2VQYXJzZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OlNvdXJjZVByb3ZpZGVyKiwgaW50IGVycm9yTGluZSwgY29uc3QgU3RyaW5nJiBlcnJvck1zZyk7
Ci0gICAgdmlydHVhbCB2b2lkIGNhbGxFdmVudChjb25zdCBKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1l
Jik7Ci0gICAgdmlydHVhbCB2b2lkIGF0U3RhdGVtZW50KGNvbnN0IEpTQzo6RGVidWdnZXJDYWxs
RnJhbWUmKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmV0dXJuRXZlbnQoY29uc3QgSlNDOjpEZWJ1Z2dl
ckNhbGxGcmFtZSYpOwotICAgIHZpcnR1YWwgdm9pZCBleGNlcHRpb24oY29uc3QgSlNDOjpEZWJ1
Z2dlckNhbGxGcmFtZSYsIGJvb2wgaGFzSGFuZGxlcik7Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxF
eGVjdXRlUHJvZ3JhbShjb25zdCBKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lJik7Ci0gICAgdmlydHVh
bCB2b2lkIGRpZEV4ZWN1dGVQcm9ncmFtKGNvbnN0IEpTQzo6RGVidWdnZXJDYWxsRnJhbWUmKTsK
LSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVhY2hCcmVha3BvaW50KGNvbnN0IEpTQzo6RGVidWdnZXJD
YWxsRnJhbWUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc291cmNlUGFyc2VkKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpTb3VyY2VQcm92aWRlciosIGludCBlcnJvckxpbmUsIGNvbnN0IFN0cmluZyYgZXJy
b3JNc2cpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBjYWxsRXZlbnQoSlNDOjpDYWxsRnJh
bWUqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgYXRTdGF0ZW1lbnQoSlNDOjpDYWxsRnJh
bWUqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgcmV0dXJuRXZlbnQoSlNDOjpDYWxsRnJh
bWUqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZXhjZXB0aW9uKEpTQzo6Q2FsbEZyYW1l
KiwgSlNDOjpKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlLCBib29sIGhhc0hhbmRsZXIpIE9WRVJSSURF
OworICAgIHZpcnR1YWwgdm9pZCB3aWxsRXhlY3V0ZVByb2dyYW0oSlNDOjpDYWxsRnJhbWUqKSBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRXhlY3V0ZVByb2dyYW0oSlNDOjpDYWxsRnJh
bWUqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVhY2hCcmVha3BvaW50KEpTQzo6
Q2FsbEZyYW1lKikgT1ZFUlJJREU7CiAKICAgICB0eXBlZGVmIFZlY3RvcjxTY3JpcHRCcmVha3Bv
aW50PiBCcmVha3BvaW50c0luTGluZTsKICAgICB0eXBlZGVmIEhhc2hNYXA8bG9uZywgQnJlYWtw
b2ludHNJbkxpbmU+IExpbmVUb0JyZWFrcG9pbnRNYXA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHREZWJ1Z1NlcnZlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCShyZXZp
c2lvbiAxNTYzNTYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRE
ZWJ1Z1NlcnZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwLDEwICs2MCwxMCBAQCB2b2lkIFdv
cmtlclNjcmlwdERlYnVnU2VydmVyOjphZGRMaXN0ZW5lCiAgICAgcmVjb21waWxlQWxsSlNGdW5j
dGlvbnMoMCk7CiB9CiAKLXZvaWQgV29ya2VyU2NyaXB0RGVidWdTZXJ2ZXI6OndpbGxFeGVjdXRl
UHJvZ3JhbShjb25zdCBKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lJiBkZWJ1Z2dlckNhbGxGcmFtZSkK
K3ZvaWQgV29ya2VyU2NyaXB0RGVidWdTZXJ2ZXI6OndpbGxFeGVjdXRlUHJvZ3JhbShKU0M6OkNh
bGxGcmFtZSogY2FsbEZyYW1lKQogewogICAgIGlmICghbV9wYXVzZWQpCi0gICAgICAgIGNyZWF0
ZUNhbGxGcmFtZShkZWJ1Z2dlckNhbGxGcmFtZSk7CisgICAgICAgIGNyZWF0ZUNhbGxGcmFtZShj
YWxsRnJhbWUpOwogfQogCiB2b2lkIFdvcmtlclNjcmlwdERlYnVnU2VydmVyOjpyZWNvbXBpbGVB
bGxKU0Z1bmN0aW9ucyhUaW1lcjxTY3JpcHREZWJ1Z1NlcnZlcj4qKQpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0RGVidWdTZXJ2ZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHREZWJ1Z1NlcnZlci5oCShy
ZXZpc2lvbiAxNTYzNTYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3Jp
cHREZWJ1Z1NlcnZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogY2xhc3MgV29ya2VyR2xvYmFsU2NvcGU7CiAKLWNsYXNzIFdvcmtlclNj
cmlwdERlYnVnU2VydmVyIDogcHVibGljIFNjcmlwdERlYnVnU2VydmVyIHsKK2NsYXNzIFdvcmtl
clNjcmlwdERlYnVnU2VydmVyIEZJTkFMIDogcHVibGljIFNjcmlwdERlYnVnU2VydmVyIHsKICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShXb3JrZXJTY3JpcHREZWJ1Z1NlcnZlcik7CiBwdWJsaWM6
CiAgICAgV29ya2VyU2NyaXB0RGVidWdTZXJ2ZXIoV29ya2VyR2xvYmFsU2NvcGUqLCBjb25zdCBT
dHJpbmcmKTsKQEAgLTUzLDE1ICs1MywxNSBAQCBwdWJsaWM6CiAgICAgdm9pZCByZWNvbXBpbGVB
bGxKU0Z1bmN0aW9ucyhUaW1lcjxTY3JpcHREZWJ1Z1NlcnZlcj4qKTsKIAogcHJpdmF0ZToKLSAg
ICB2aXJ0dWFsIExpc3RlbmVyU2V0KiBnZXRMaXN0ZW5lcnNGb3JHbG9iYWxPYmplY3QoSlNDOjpK
U0dsb2JhbE9iamVjdCopIHsgcmV0dXJuICZtX2xpc3RlbmVyczsgfQotICAgIHZpcnR1YWwgdm9p
ZCBkaWRQYXVzZShKU0M6OkpTR2xvYmFsT2JqZWN0KikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRp
ZENvbnRpbnVlKEpTQzo6SlNHbG9iYWxPYmplY3QqKSB7IH0KKyAgICB2aXJ0dWFsIExpc3RlbmVy
U2V0KiBnZXRMaXN0ZW5lcnNGb3JHbG9iYWxPYmplY3QoSlNDOjpKU0dsb2JhbE9iamVjdCopIE9W
RVJSSURFIHsgcmV0dXJuICZtX2xpc3RlbmVyczsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRQYXVz
ZShKU0M6OkpTR2xvYmFsT2JqZWN0KikgT1ZFUlJJREUgeyB9CisgICAgdmlydHVhbCB2b2lkIGRp
ZENvbnRpbnVlKEpTQzo6SlNHbG9iYWxPYmplY3QqKSBPVkVSUklERSB7IH0KIAotICAgIHZpcnR1
YWwgYm9vbCBpc0NvbnRlbnRTY3JpcHQoSlNDOjpFeGVjU3RhdGUqKSB7IHJldHVybiBmYWxzZTsg
fQorICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRlbnRTY3JpcHQoSlNDOjpFeGVjU3RhdGUqKSBPVkVS
UklERSB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgdmlydHVhbCB2b2lkIHdpbGxFeGVjdXRlUHJv
Z3JhbShjb25zdCBKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lJik7CisgICAgdmlydHVhbCB2b2lkIHdp
bGxFeGVjdXRlUHJvZ3JhbShKU0M6OkNhbGxGcmFtZSopIE9WRVJSSURFOwogCi0gICAgdmlydHVh
bCB2b2lkIHJ1bkV2ZW50TG9vcFdoaWxlUGF1c2VkKCk7CisgICAgdmlydHVhbCB2b2lkIHJ1bkV2
ZW50TG9vcFdoaWxlUGF1c2VkKCkgT1ZFUlJJREU7CiAKICAgICBXb3JrZXJHbG9iYWxTY29wZSog
bV93b3JrZXJHbG9iYWxTY29wZTsKICAgICBMaXN0ZW5lclNldCBtX2xpc3RlbmVyczsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NjM3MCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDEzLTA5LTI0ICBNYXJr
IExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBDaGFuZ2UgSlNDIGRlYnVnIGhv
b2tzIHRvIHBhc3MgYSBDYWxsRnJhbWUqIGluc3RlYWQgb2YgYSBEZWJ1Z2dlckNhbGxGcmFtZS4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMTg2Ny4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYlZp
ZXcvV2ViU2NyaXB0RGVidWdEZWxlZ2F0ZS5tbToKKyAgICAgICAgKC1bV2ViU2NyaXB0Q2FsbEZy
YW1lIF9pbml0V2l0aEdsb2JhbE9iamVjdDpkZWJ1Z2dlckNhbGxGcmFtZTpleGNlcHRpb25WYWx1
ZTpKU0M6Ol0pOgorICAgICAgICAoLVtXZWJTY3JpcHRDYWxsRnJhbWUgZXhjZXB0aW9uXSk6Cisg
ICAgICAgICogV2ViVmlldy9XZWJTY3JpcHREZWJ1Z2dlci5oOgorICAgICAgICAqIFdlYlZpZXcv
V2ViU2NyaXB0RGVidWdnZXIubW06CisgICAgICAgIChXZWJTY3JpcHREZWJ1Z2dlcjo6ZXhjZXB0
aW9uKToKKwogMjAxMy0wOS0yNCAgRW5yaWNhIENhc3VjY2kgIDxlbnJpY2FAYXBwbGUuY29tPgog
CiAgICAgICAgIFVwc3RyZWFtIGNoYW5nZXMgdG8gUGFzdGVib2FyZCBpbXBsZW1lbnRhdGlvbiBm
b3IgaU9TLgpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJTY3JpcHREZWJ1Z0Rl
bGVnYXRlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViU2Ny
aXB0RGVidWdEZWxlZ2F0ZS5tbQkocmV2aXNpb24gMTU2MzU2KQorKysgU291cmNlL1dlYktpdC9t
YWMvV2ViVmlldy9XZWJTY3JpcHREZWJ1Z0RlbGVnYXRlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02
Myw2ICs2Myw3IEBAIEBpbnRlcmZhY2UgV2ViU2NyaXB0Q2FsbEZyYW1lUHJpdmF0ZSA6IE4KIEBw
dWJsaWMKICAgICBXZWJTY3JpcHRPYmplY3QgICAgICAgICpnbG9iYWxPYmplY3Q7ICAgLy8gdGhl
IGdsb2JhbCBvYmplY3QncyBwcm94eSAobm90IHJldGFpbmVkKQogICAgIERlYnVnZ2VyQ2FsbEZy
YW1lKiBkZWJ1Z2dlckNhbGxGcmFtZTsKKyAgICBKU0M6OkpTVmFsdWUgZXhjZXB0aW9uVmFsdWU7
CiB9CiBAZW5kCiAKQEAgLTg1LDEyICs4NiwxMyBAQCAvLyBvd24gZXhwb3J0ZWQgaW50ZXJmYWNl
LiAgVGhpcyBjbGFzcyBpCiAKIEBpbXBsZW1lbnRhdGlvbiBXZWJTY3JpcHRDYWxsRnJhbWUgKFdl
YlNjcmlwdERlYnVnRGVsZWdhdGVJbnRlcm5hbCkKIAotLSAoV2ViU2NyaXB0Q2FsbEZyYW1lICop
X2luaXRXaXRoR2xvYmFsT2JqZWN0OihXZWJTY3JpcHRPYmplY3QgKilnbG9iYWxPYmogZGVidWdn
ZXJDYWxsRnJhbWU6KGNvbnN0IERlYnVnZ2VyQ2FsbEZyYW1lJilkZWJ1Z2dlckNhbGxGcmFtZQor
LSAoV2ViU2NyaXB0Q2FsbEZyYW1lICopX2luaXRXaXRoR2xvYmFsT2JqZWN0OihXZWJTY3JpcHRP
YmplY3QgKilnbG9iYWxPYmogZGVidWdnZXJDYWxsRnJhbWU6KGNvbnN0IERlYnVnZ2VyQ2FsbEZy
YW1lJilkZWJ1Z2dlckNhbGxGcmFtZSBleGNlcHRpb25WYWx1ZTooSlNDOjpKU1ZhbHVlKWV4Y2Vw
dGlvblZhbHVlCiB7CiAgICAgaWYgKChzZWxmID0gW3N1cGVyIGluaXRdKSkgewogICAgICAgICBf
cHJpdmF0ZSA9IFtbV2ViU2NyaXB0Q2FsbEZyYW1lUHJpdmF0ZSBhbGxvY10gaW5pdF07CiAgICAg
ICAgIF9wcml2YXRlLT5nbG9iYWxPYmplY3QgPSBnbG9iYWxPYmo7CiAgICAgICAgIF9wcml2YXRl
LT5kZWJ1Z2dlckNhbGxGcmFtZSA9IG5ldyBEZWJ1Z2dlckNhbGxGcmFtZShkZWJ1Z2dlckNhbGxG
cmFtZSk7CisgICAgICAgIF9wcml2YXRlLT5leGNlcHRpb25WYWx1ZSA9IGV4Y2VwdGlvblZhbHVl
OwogICAgIH0KICAgICByZXR1cm4gc2VsZjsKIH0KQEAgLTE2MCw3ICsxNjIsNyBAQCAtIChpZCll
eGNlcHRpb24KICAgICBpZiAoIV9wcml2YXRlLT5kZWJ1Z2dlckNhbGxGcmFtZSkKICAgICAgICAg
cmV0dXJuIG5pbDsKIAotICAgIEpTQzo6SlNWYWx1ZSBleGNlcHRpb24gPSBfcHJpdmF0ZS0+ZGVi
dWdnZXJDYWxsRnJhbWUtPmV4Y2VwdGlvbigpOworICAgIEpTQzo6SlNWYWx1ZSBleGNlcHRpb24g
PSBfcHJpdmF0ZS0+ZXhjZXB0aW9uVmFsdWU7CiAgICAgcmV0dXJuIGV4Y2VwdGlvbiA/IFtzZWxm
IF9jb252ZXJ0VmFsdWVUb09iamNWYWx1ZTpleGNlcHRpb25dIDogbmlsOwogfQogCkluZGV4OiBT
b3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdERlYnVnZ2VyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJTY3JpcHREZWJ1Z2dlci5oCShyZXZpc2lv
biAxNTYzNTYpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdERlYnVnZ2Vy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDIxICs0OCwyMSBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
QGNsYXNzIFdlYlNjcmlwdENhbGxGcmFtZTsKIAotY2xhc3MgV2ViU2NyaXB0RGVidWdnZXIgOiBw
dWJsaWMgSlNDOjpEZWJ1Z2dlciB7CitjbGFzcyBXZWJTY3JpcHREZWJ1Z2dlciBGSU5BTCA6IHB1
YmxpYyBKU0M6OkRlYnVnZ2VyIHsKIHB1YmxpYzoKICAgICBXZWJTY3JpcHREZWJ1Z2dlcihKU0M6
OkpTR2xvYmFsT2JqZWN0Kik7CiAKICAgICBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QoKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbE9iamVjdC5nZXQoKTsgfQogCiBwcml2YXRlOgot
ICAgIHZpcnR1YWwgdm9pZCBzb3VyY2VQYXJzZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlNvdXJj
ZVByb3ZpZGVyKiwgaW50IGVycm9yTGluZSwgY29uc3QgV1RGOjpTdHJpbmcmIGVycm9yTXNnKTsK
LSAgICB2aXJ0dWFsIHZvaWQgY2FsbEV2ZW50KGNvbnN0IEpTQzo6RGVidWdnZXJDYWxsRnJhbWUm
KSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgYXRTdGF0ZW1lbnQoY29uc3QgSlNDOjpEZWJ1Z2dlckNh
bGxGcmFtZSYpIHsgfQotICAgIHZpcnR1YWwgdm9pZCByZXR1cm5FdmVudChjb25zdCBKU0M6OkRl
YnVnZ2VyQ2FsbEZyYW1lJikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGV4Y2VwdGlvbihjb25zdCBK
U0M6OkRlYnVnZ2VyQ2FsbEZyYW1lJiwgYm9vbCBoYXNIYW5kbGVyKTsKLSAgICB2aXJ0dWFsIHZv
aWQgd2lsbEV4ZWN1dGVQcm9ncmFtKGNvbnN0IEpTQzo6RGVidWdnZXJDYWxsRnJhbWUmKSB7IH0K
LSAgICB2aXJ0dWFsIHZvaWQgZGlkRXhlY3V0ZVByb2dyYW0oY29uc3QgSlNDOjpEZWJ1Z2dlckNh
bGxGcmFtZSYpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBkaWRSZWFjaEJyZWFrcG9pbnQoY29uc3Qg
SlNDOjpEZWJ1Z2dlckNhbGxGcmFtZSYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzb3VyY2VQYXJz
ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlNvdXJjZVByb3ZpZGVyKiwgaW50IGVycm9yTGluZSwg
Y29uc3QgV1RGOjpTdHJpbmcmIGVycm9yTXNnKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQg
Y2FsbEV2ZW50KEpTQzo6Q2FsbEZyYW1lKikgT1ZFUlJJREUgeyB9CisgICAgdmlydHVhbCB2b2lk
IGF0U3RhdGVtZW50KEpTQzo6Q2FsbEZyYW1lKikgT1ZFUlJJREUgeyB9CisgICAgdmlydHVhbCB2
b2lkIHJldHVybkV2ZW50KEpTQzo6Q2FsbEZyYW1lKikgT1ZFUlJJREUgeyB9CisgICAgdmlydHVh
bCB2b2lkIGV4Y2VwdGlvbihKU0M6OkNhbGxGcmFtZSosIEpTQzo6SlNWYWx1ZSBleGNlcHRpb25W
YWx1ZSwgYm9vbCBoYXNIYW5kbGVyKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbEV4
ZWN1dGVQcm9ncmFtKEpTQzo6Q2FsbEZyYW1lKikgT1ZFUlJJREUgeyB9CisgICAgdmlydHVhbCB2
b2lkIGRpZEV4ZWN1dGVQcm9ncmFtKEpTQzo6Q2FsbEZyYW1lKikgT1ZFUlJJREUgeyB9CisgICAg
dmlydHVhbCB2b2lkIGRpZFJlYWNoQnJlYWtwb2ludChKU0M6OkNhbGxGcmFtZSopIE9WRVJSSURF
IHsgfQogCiAgICAgYm9vbCBtX2NhbGxpbmdEZWxlZ2F0ZTsKIApJbmRleDogU291cmNlL1dlYktp
dC9tYWMvV2ViVmlldy9XZWJTY3JpcHREZWJ1Z2dlci5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdERlYnVnZ2VyLm1tCShyZXZpc2lvbiAxNTYzNTYp
CisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdERlYnVnZ2VyLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiB1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKIAogQGludGVyZmFjZSBXZWJTY3JpcHRDYWxsRnJhbWUgKFdlYlNj
cmlwdERlYnVnRGVsZWdhdGVJbnRlcm5hbCkKLS0gKFdlYlNjcmlwdENhbGxGcmFtZSAqKV9pbml0
V2l0aEdsb2JhbE9iamVjdDooV2ViU2NyaXB0T2JqZWN0ICopZ2xvYmFsT2JqIGRlYnVnZ2VyQ2Fs
bEZyYW1lOihjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYpZGVidWdnZXJDYWxsRnJhbWU7CistIChX
ZWJTY3JpcHRDYWxsRnJhbWUgKilfaW5pdFdpdGhHbG9iYWxPYmplY3Q6KFdlYlNjcmlwdE9iamVj
dCAqKWdsb2JhbE9iaiBkZWJ1Z2dlckNhbGxGcmFtZTooY29uc3QgRGVidWdnZXJDYWxsRnJhbWUm
KWRlYnVnZ2VyQ2FsbEZyYW1lIGV4Y2VwdGlvblZhbHVlOihKU0M6OkpTVmFsdWUpZXhjZXB0aW9u
VmFsdWU7CiBAZW5kCiAKIHN0YXRpYyBOU1N0cmluZyAqdG9OU1N0cmluZyhTb3VyY2VQcm92aWRl
ciogc291cmNlUHJvdmlkZXIpCkBAIC0xMTYsMjMgKzExNiwyNCBAQCB2b2lkIFdlYlNjcmlwdERl
YnVnZ2VyOjpzb3VyY2VQYXJzZWQoRXhlCiAgICAgbV9jYWxsaW5nRGVsZWdhdGUgPSBmYWxzZTsK
IH0KIAotdm9pZCBXZWJTY3JpcHREZWJ1Z2dlcjo6ZXhjZXB0aW9uKGNvbnN0IERlYnVnZ2VyQ2Fs
bEZyYW1lJiBkZWJ1Z2dlckNhbGxGcmFtZSwgYm9vbCBoYXNIYW5kbGVyKQordm9pZCBXZWJTY3Jp
cHREZWJ1Z2dlcjo6ZXhjZXB0aW9uKEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTQzo6SlNW
YWx1ZSBleGNlcHRpb25WYWx1ZSwgYm9vbCBoYXNIYW5kbGVyKQogewogICAgIGlmIChtX2NhbGxp
bmdEZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9jYWxsaW5nRGVsZWdhdGUgPSB0
cnVlOwogCi0gICAgV2ViRnJhbWUgKndlYkZyYW1lID0gdG9XZWJGcmFtZShkZWJ1Z2dlckNhbGxG
cmFtZS5keW5hbWljR2xvYmFsT2JqZWN0KCkpOworICAgIFdlYkZyYW1lICp3ZWJGcmFtZSA9IHRv
V2ViRnJhbWUoY2FsbEZyYW1lLT5keW5hbWljR2xvYmFsT2JqZWN0KCkpOwogICAgIFdlYlZpZXcg
KndlYlZpZXcgPSBbd2ViRnJhbWUgd2ViVmlld107Ci0gICAgUmV0YWluUHRyPFdlYlNjcmlwdENh
bGxGcmFtZT4gY2FsbEZyYW1lID0gYWRvcHROUyhbW1dlYlNjcmlwdENhbGxGcmFtZSBhbGxvY10g
X2luaXRXaXRoR2xvYmFsT2JqZWN0OmNvcmUod2ViRnJhbWUpLT5zY3JpcHQoKS53aW5kb3dTY3Jp
cHRPYmplY3QoKSBkZWJ1Z2dlckNhbGxGcmFtZTpkZWJ1Z2dlckNhbGxGcmFtZV0pOworICAgIERl
YnVnZ2VyQ2FsbEZyYW1lIGRlYnVnZ2VyQ2FsbEZyYW1lKGNhbGxGcmFtZSk7CisgICAgUmV0YWlu
UHRyPFdlYlNjcmlwdENhbGxGcmFtZT4gd2ViQ2FsbEZyYW1lID0gYWRvcHROUyhbW1dlYlNjcmlw
dENhbGxGcmFtZSBhbGxvY10gX2luaXRXaXRoR2xvYmFsT2JqZWN0OmNvcmUod2ViRnJhbWUpLT5z
Y3JpcHQoKS53aW5kb3dTY3JpcHRPYmplY3QoKSBkZWJ1Z2dlckNhbGxGcmFtZTpkZWJ1Z2dlckNh
bGxGcmFtZSBleGNlcHRpb25WYWx1ZTpleGNlcHRpb25WYWx1ZV0pOwogCiAgICAgV2ViU2NyaXB0
RGVidWdEZWxlZ2F0ZUltcGxlbWVudGF0aW9uQ2FjaGUqIGNhY2hlID0gV2ViVmlld0dldFNjcmlw
dERlYnVnRGVsZWdhdGVJbXBsZW1lbnRhdGlvbnMod2ViVmlldyk7CiAgICAgaWYgKGNhY2hlLT5l
eGNlcHRpb25XYXNSYWlzZWRGdW5jKSB7CiAgICAgICAgIGlmIChjYWNoZS0+ZXhjZXB0aW9uV2Fz
UmFpc2VkRXhwZWN0c0hhc0hhbmRsZXJGbGFnKQotICAgICAgICAgICAgQ2FsbFNjcmlwdERlYnVn
RGVsZWdhdGUoY2FjaGUtPmV4Y2VwdGlvbldhc1JhaXNlZEZ1bmMsIHdlYlZpZXcsIEBzZWxlY3Rv
cih3ZWJWaWV3OmV4Y2VwdGlvbldhc1JhaXNlZDpoYXNIYW5kbGVyOnNvdXJjZUlkOmxpbmU6Zm9y
V2ViRnJhbWU6KSwgY2FsbEZyYW1lLmdldCgpLCBoYXNIYW5kbGVyLCBkZWJ1Z2dlckNhbGxGcmFt
ZS5zb3VyY2VJZCgpLCBkZWJ1Z2dlckNhbGxGcmFtZS5saW5lKCksIHdlYkZyYW1lKTsKKyAgICAg
ICAgICAgIENhbGxTY3JpcHREZWJ1Z0RlbGVnYXRlKGNhY2hlLT5leGNlcHRpb25XYXNSYWlzZWRG
dW5jLCB3ZWJWaWV3LCBAc2VsZWN0b3Iod2ViVmlldzpleGNlcHRpb25XYXNSYWlzZWQ6aGFzSGFu
ZGxlcjpzb3VyY2VJZDpsaW5lOmZvcldlYkZyYW1lOiksIHdlYkNhbGxGcmFtZS5nZXQoKSwgaGFz
SGFuZGxlciwgZGVidWdnZXJDYWxsRnJhbWUuc291cmNlSWQoKSwgZGVidWdnZXJDYWxsRnJhbWUu
bGluZSgpLCB3ZWJGcmFtZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIENhbGxTY3JpcHRE
ZWJ1Z0RlbGVnYXRlKGNhY2hlLT5leGNlcHRpb25XYXNSYWlzZWRGdW5jLCB3ZWJWaWV3LCBAc2Vs
ZWN0b3Iod2ViVmlldzpleGNlcHRpb25XYXNSYWlzZWQ6c291cmNlSWQ6bGluZTpmb3JXZWJGcmFt
ZTopLCBjYWxsRnJhbWUuZ2V0KCksIGRlYnVnZ2VyQ2FsbEZyYW1lLnNvdXJjZUlkKCksIGRlYnVn
Z2VyQ2FsbEZyYW1lLmxpbmUoKSwgd2ViRnJhbWUpOworICAgICAgICAgICAgQ2FsbFNjcmlwdERl
YnVnRGVsZWdhdGUoY2FjaGUtPmV4Y2VwdGlvbldhc1JhaXNlZEZ1bmMsIHdlYlZpZXcsIEBzZWxl
Y3Rvcih3ZWJWaWV3OmV4Y2VwdGlvbldhc1JhaXNlZDpzb3VyY2VJZDpsaW5lOmZvcldlYkZyYW1l
OiksIHdlYkNhbGxGcmFtZS5nZXQoKSwgZGVidWdnZXJDYWxsRnJhbWUuc291cmNlSWQoKSwgZGVi
dWdnZXJDYWxsRnJhbWUubGluZSgpLCB3ZWJGcmFtZSk7CiAgICAgfQogCiAgICAgbV9jYWxsaW5n
RGVsZWdhdGUgPSBmYWxzZTsK
</data>
<flag name="review"
          id="234757"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>