<?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>121214</bug_id>
          
          <creation_ts>2013-09-11 23:28:39 -0700</creation_ts>
          <short_desc>Keep sourceID and position info in DebuggerCallFrame instead of the Inspector&apos;s JavaScriptCallFrame</short_desc>
          <delta_ts>2013-09-12 09:29:35 -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>
          
          
          <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>928172</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-09-11 23:28:39 -0700</bug_when>
    <thetext>Currently, our debugger callbacks explicitly passes sourceID and position (line and column) info to the Inspector along with the DebuggerCallFrame.  This info (the DebuggerCallFrame, sourceID, and position) is then stored in the Inspector&apos;s JavaScriptCallFrame.  Technically, we can just get this info from the DebuggerCallFrame.  There&apos;s no need to explicitly pass the sourceID and position info to the Inspector and have it stored in its JavaScriptCallFrame.

For the current implementation, JSC is not getting line and column info from the stack yet.  Instead the line and column number are explicitly passed in as arguments to the debug hooks.  For now, we&apos;ll continue to use the debug hook line and column info.  To do this, we&apos;ll store the values in the DebuggerCallFrame.  At a later date, we should have the DebuggerCallFrame get the info directly from the CallFrame based on its bytecodeOffset.

This refactoring is part of the work to move ScriptDebugServer functionality  into JSC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>928174</commentid>
    <comment_count>1</comment_count>
      <attachid>211403</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-09-11 23:40:03 -0700</bug_when>
    <thetext>Created attachment 211403
the patch.

This patch has run the layout tests with no new failures.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>928284</commentid>
    <comment_count>2</comment_count>
      <attachid>211403</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2013-09-12 07:58:37 -0700</bug_when>
    <thetext>Comment on attachment 211403
the patch.

Can&apos;t we simply kill debuggercallframe and rely on the stack walking instead?  The removes (essentially) a duplicate type, and saves computing/storing line and column info unnecessarily.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>928288</commentid>
    <comment_count>3</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-09-12 08:15:22 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 211403 [details])
&gt; Can&apos;t we simply kill debuggercallframe and rely on the stack walking instead?  The removes (essentially) a duplicate type, and saves computing/storing line and column info unnecessarily.

One step at a time.  I did this refactor because I found it to help organize the data in a way that allows me to move ScriptDebugServer functionality into JSC.  I&apos;m trying to stay focus on changing the Inspector to debugger interface first.  I&apos;ll change the internal implementation of the debugger later after I&apos;ve changed the interface to allow it.  This is a stepping stone to get there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>928306</commentid>
    <comment_count>4</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-09-12 08:44:21 -0700</bug_when>
    <thetext>&gt; Can&apos;t we simply kill debuggercallframe and rely on the stack walking instead?

I think DebuggerCallFrame has one good feature: it distinguishes standard data in CallFrame from data that is only present when a stack frame has been put in debugger mode. For example, I think the debugger should get a &quot;fake&quot; activation, and not the real thing. We could accomplish that through something like CallFrame::debuggerActivation(), and not have two types. But I think it might be valuable to have a separate type for this interface. DebuggerCallFrame implies that everything is in a debuggable state, which will diverge from normal state over time. It also clarifies who relies on debug info.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>928307</commentid>
    <comment_count>5</comment_count>
      <attachid>211403</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-09-12 08:45:41 -0700</bug_when>
    <thetext>Comment on attachment 211403
the patch.

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

r=me

&gt; Source/JavaScriptCore/interpreter/Interpreter.cpp:659
&gt; +        DebuggerCallFrame debuggerCallFrame(callFrame, line, 0, exceptionValue);

Why not provide a real column number here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>928312</commentid>
    <comment_count>6</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-09-12 08:50:30 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 211403 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=211403&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/JavaScriptCore/interpreter/Interpreter.cpp:659
&gt; &gt; +        DebuggerCallFrame debuggerCallFrame(callFrame, line, 0, exceptionValue);
&gt; 
&gt; Why not provide a real column number here?

I was just keeping parity with the pre-existing code, but it should be easy to provide a real column number there.  I&apos;ll change it and run it thru the layout tests again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>928333</commentid>
    <comment_count>7</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-09-12 09:29:35 -0700</bug_when>
    <thetext>Thanks for the review.  Added the change to use the real column number in Interpreter::unwind().  Passes layout tests with no new failures.

Landed in r155622: &lt;http://trac.webkit.org/r155622&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>211403</attachid>
            <date>2013-09-11 23:40:03 -0700</date>
            <delta_ts>2013-09-12 08:45:41 -0700</delta_ts>
            <desc>the patch.</desc>
            <filename>bug-121214.patch</filename>
            <type>text/plain</type>
            <size>33335</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU1NTk1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBA
CisyMDEzLTA5LTExICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBD
aGFuZ2UgZGVidWcgaG9va3MgdG8gcGFzcyBzb3VyY2VJRCBhbmQgcG9zaXRpb24gaW5mbyB2aWEg
dGhlIERlYnVnZ2VyQ2FsbEZyYW1lLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTIxMjE0LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogZGVidWdnZXIvRGVidWdnZXIuaDoKKyAgICAgICAgKiBkZWJ1Z2dl
ci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHA6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1l
Ojpzb3VyY2VJZCk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lOjpjbGVhcik6Cisg
ICAgICAgICogZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuaDoKKyAgICAgICAgKEpTQzo6RGVi
dWdnZXJDYWxsRnJhbWU6OkRlYnVnZ2VyQ2FsbEZyYW1lKToKKyAgICAgICAgKEpTQzo6RGVidWdn
ZXJDYWxsRnJhbWU6OmxpbmUpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlckNhbGxGcmFtZTo6Y29s
dW1uKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAgIChK
U0M6OnVud2luZENhbGxGcmFtZSk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjp1bndpbmQp
OgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6ZGVidWcpOgorCiAyMDEzLTA5LTExICBGaWxp
cCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgUmVuYW1lIGluaXRJbnRlZ2Vy
KCkgdG8gaW5pdEludDMyKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9E
ZWJ1Z2dlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9E
ZWJ1Z2dlci5oCShyZXZpc2lvbiAxNTU1ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVi
dWdnZXIvRGVidWdnZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTQgKzQyLDE0IEBAIHB1Ymxp
YzoKIAogICAgIHZpcnR1YWwgdm9pZCBzb3VyY2VQYXJzZWQoRXhlY1N0YXRlKiwgU291cmNlUHJv
dmlkZXIqLCBpbnQgZXJyb3JMaW5lTnVtYmVyLCBjb25zdCBXVEY6OlN0cmluZyYgZXJyb3JNZXNz
YWdlKSA9IDA7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZXhjZXB0aW9uKGNvbnN0IERlYnVnZ2VyQ2Fs
bEZyYW1lJiwgaW50cHRyX3QsIGludCwgaW50LCBib29sKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lk
IGF0U3RhdGVtZW50KGNvbnN0IERlYnVnZ2VyQ2FsbEZyYW1lJiwgaW50cHRyX3QsIGludCwgaW50
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNhbGxFdmVudChjb25zdCBEZWJ1Z2dlckNhbGxGcmFt
ZSYsIGludHB0cl90LCBpbnQsIGludCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZXR1cm5FdmVu
dChjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYsIGludHB0cl90LCBpbnQsIGludCkgPSAwOwotCi0g
ICAgdmlydHVhbCB2b2lkIHdpbGxFeGVjdXRlUHJvZ3JhbShjb25zdCBEZWJ1Z2dlckNhbGxGcmFt
ZSYsIGludHB0cl90LCBpbnQsIGludCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkaWRFeGVjdXRl
UHJvZ3JhbShjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYsIGludHB0cl90LCBpbnQsIGludCkgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBkaWRSZWFjaEJyZWFrcG9pbnQoY29uc3QgRGVidWdnZXJDYWxs
RnJhbWUmLCBpbnRwdHJfdCwgaW50LCBpbnQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZXhjZXB0
aW9uKGNvbnN0IERlYnVnZ2VyQ2FsbEZyYW1lJiwgYm9vbCkgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBhdFN0YXRlbWVudChjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgY2FsbEV2ZW50KGNvbnN0IERlYnVnZ2VyQ2FsbEZyYW1lJikgPSAwOworICAgIHZpcnR1
YWwgdm9pZCByZXR1cm5FdmVudChjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYpID0gMDsKKworICAg
IHZpcnR1YWwgdm9pZCB3aWxsRXhlY3V0ZVByb2dyYW0oY29uc3QgRGVidWdnZXJDYWxsRnJhbWUm
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpZEV4ZWN1dGVQcm9ncmFtKGNvbnN0IERlYnVnZ2Vy
Q2FsbEZyYW1lJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWFjaEJyZWFrcG9pbnQoY29u
c3QgRGVidWdnZXJDYWxsRnJhbWUmKSA9IDA7CiAKICAgICB2b2lkIHJlY29tcGlsZUFsbEpTRnVu
Y3Rpb25zKFZNKik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1
Z2dlckNhbGxGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rl
YnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcAkocmV2aXNpb24gMTU1NTg0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzcsNiArMzcsMTEgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2ludHB0cl90IERl
YnVnZ2VyQ2FsbEZyYW1lOjpzb3VyY2VJZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY2FsbEZy
YW1lLT5jb2RlQmxvY2soKS0+b3duZXJFeGVjdXRhYmxlKCktPnNvdXJjZUlEKCk7Cit9CisKIFN0
cmluZyBEZWJ1Z2dlckNhbGxGcmFtZTo6ZnVuY3Rpb25OYW1lKCkgY29uc3QKIHsKICAgICBpZiAo
IW1fY2FsbEZyYW1lLT5jb2RlQmxvY2soKSkKQEAgLTEwNiw0ICsxMTEsMTAgQEAgSlNWYWx1ZSBE
ZWJ1Z2dlckNhbGxGcmFtZTo6ZXZhbHVhdGUoY29ucwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
K3ZvaWQgRGVidWdnZXJDYWxsRnJhbWU6OmNsZWFyKCkKK3sKKyAgICBtX2NhbGxGcmFtZSA9IDA7
CisgICAgbV9leGNlcHRpb24gPSBKU1ZhbHVlKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2Fs
bEZyYW1lLmgJKHJldmlzaW9uIDE1NTU4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1
Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxOCArMzcsMjUg
QEAgY2xhc3MgRGVidWdnZXJDYWxsRnJhbWUgewogcHVibGljOgogICAgIGVudW0gVHlwZSB7IFBy
b2dyYW1UeXBlLCBGdW5jdGlvblR5cGUgfTsKIAotICAgIERlYnVnZ2VyQ2FsbEZyYW1lKENhbGxG
cmFtZSogY2FsbEZyYW1lKQorICAgIERlYnVnZ2VyQ2FsbEZyYW1lKENhbGxGcmFtZSogY2FsbEZy
YW1lLCBpbnQgbGluZSwgaW50IGNvbHVtbikKICAgICAgICAgOiBtX2NhbGxGcmFtZShjYWxsRnJh
bWUpCisgICAgICAgICwgbV9saW5lKGxpbmUpCisgICAgICAgICwgbV9jb2x1bW4oY29sdW1uKQog
ICAgIHsKICAgICB9CiAKLSAgICBEZWJ1Z2dlckNhbGxGcmFtZShDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgSlNWYWx1ZSBleGNlcHRpb24pCisgICAgRGVidWdnZXJDYWxsRnJhbWUoQ2FsbEZyYW1lKiBj
YWxsRnJhbWUsIGludCBsaW5lLCBpbnQgY29sdW1uLCBKU1ZhbHVlIGV4Y2VwdGlvbikKICAgICAg
ICAgOiBtX2NhbGxGcmFtZShjYWxsRnJhbWUpCisgICAgICAgICwgbV9saW5lKGxpbmUpCisgICAg
ICAgICwgbV9jb2x1bW4oY29sdW1uKQogICAgICAgICAsIG1fZXhjZXB0aW9uKGV4Y2VwdGlvbikK
ICAgICB7CiAgICAgfQogCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUoKSBjb25zdCB7IHJldHVy
biBtX2NhbGxGcmFtZTsgfQorICAgIEpTX0VYUE9SVF9QUklWQVRFIGludHB0cl90IHNvdXJjZUlk
KCkgY29uc3Q7CisgICAgaW50IGxpbmUoKSBjb25zdCB7IHJldHVybiBtX2xpbmU7IH0KKyAgICBp
bnQgY29sdW1uKCkgY29uc3QgeyByZXR1cm4gbV9jb2x1bW47IH0KICAgICBKU0dsb2JhbE9iamVj
dCogZHluYW1pY0dsb2JhbE9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbEZyYW1lLT5keW5h
bWljR2xvYmFsT2JqZWN0KCk7IH0KICAgICBKU1Njb3BlKiBzY29wZSgpIGNvbnN0IHsgcmV0dXJu
IG1fY2FsbEZyYW1lLT5zY29wZSgpOyB9CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RyaW5nIGZ1
bmN0aW9uTmFtZSgpIGNvbnN0OwpAQCAtNTgsOCArNjUsMTIgQEAgcHVibGljOgogICAgIEpTX0VY
UE9SVF9QUklWQVRFIEpTVmFsdWUgZXZhbHVhdGUoY29uc3QgU3RyaW5nJiwgSlNWYWx1ZSYgZXhj
ZXB0aW9uKSBjb25zdDsKICAgICBKU1ZhbHVlIGV4Y2VwdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1f
ZXhjZXB0aW9uOyB9CiAKKyAgICB2b2lkIGNsZWFyKCk7CisKIHByaXZhdGU6CiAgICAgQ2FsbEZy
YW1lKiBtX2NhbGxGcmFtZTsKKyAgICBpbnQgbV9saW5lOworICAgIGludCBtX2NvbHVtbjsKICAg
ICBKU1ZhbHVlIG1fZXhjZXB0aW9uOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiAxNTU1ODQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOTcsMTEgKzM5NywxMiBAQCBzdGF0aWMgYm9vbCB1bndpbmRDYWxsRnJh
bWUoU3RhY2tWaXNpdG9yCiAgICAgSlNTY29wZSogc2NvcGUgPSBjYWxsRnJhbWUtPnNjb3BlKCk7
CiAKICAgICBpZiAoRGVidWdnZXIqIGRlYnVnZ2VyID0gY2FsbEZyYW1lLT5keW5hbWljR2xvYmFs
T2JqZWN0KCktPmRlYnVnZ2VyKCkpIHsKLSAgICAgICAgRGVidWdnZXJDYWxsRnJhbWUgZGVidWdn
ZXJDYWxsRnJhbWUoY2FsbEZyYW1lLCBleGNlcHRpb25WYWx1ZSk7CisgICAgICAgIGludCBsaW5l
ID0gY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+bGFzdExpbmUoKTsKKyAgICAgICAgRGVi
dWdnZXJDYWxsRnJhbWUgZGVidWdnZXJDYWxsRnJhbWUoY2FsbEZyYW1lLCBsaW5lLCAwLCBleGNl
cHRpb25WYWx1ZSk7CiAgICAgICAgIGlmIChjYWxsRnJhbWUtPmNhbGxlZSgpKQotICAgICAgICAg
ICAgZGVidWdnZXItPnJldHVybkV2ZW50KGRlYnVnZ2VyQ2FsbEZyYW1lLCBjb2RlQmxvY2stPm93
bmVyRXhlY3V0YWJsZSgpLT5zb3VyY2VJRCgpLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgp
LT5sYXN0TGluZSgpLCAwKTsKKyAgICAgICAgICAgIGRlYnVnZ2VyLT5yZXR1cm5FdmVudChkZWJ1
Z2dlckNhbGxGcmFtZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGRlYnVnZ2VyLT5kaWRF
eGVjdXRlUHJvZ3JhbShkZWJ1Z2dlckNhbGxGcmFtZSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFi
bGUoKS0+c291cmNlSUQoKSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+bGFzdExpbmUo
KSwgMCk7CisgICAgICAgICAgICBkZWJ1Z2dlci0+ZGlkRXhlY3V0ZVByb2dyYW0oZGVidWdnZXJD
YWxsRnJhbWUpOwogICAgIH0KIAogICAgIEpTVmFsdWUgYWN0aXZhdGlvbjsKQEAgLTY1NCw3ICs2
NTUsOCBAQCBORVZFUl9JTkxJTkUgSGFuZGxlckluZm8qIEludGVycHJldGVyOjp1CiAgICAgICAg
IC8vIFdlIG5lZWQgdG8gY2xlYXIgdGhlIGV4Y2VwdGlvbiBhbmQgdGhlIGV4Y2VwdGlvbiBzdGFj
ayBoZXJlIGluIG9yZGVyIHRvIHNlZSBpZiBhIG5ldyBleGNlcHRpb24gaGFwcGVucy4KICAgICAg
ICAgLy8gQWZ0ZXJ3YXJkcywgdGhlIHZhbHVlcyBhcmUgcHV0IGJhY2sgdG8gY29udGludWUgcHJv
Y2Vzc2luZyB0aGlzIGVycm9yLgogICAgICAgICBDbGVhckV4Y2VwdGlvblNjb3BlIHNjb3BlKCZj
YWxsRnJhbWUtPnZtKCkpOwotICAgICAgICBEZWJ1Z2dlckNhbGxGcmFtZSBkZWJ1Z2dlckNhbGxG
cmFtZShjYWxsRnJhbWUsIGV4Y2VwdGlvblZhbHVlKTsKKyAgICAgICAgaW50IGxpbmUgPSBjb2Rl
QmxvY2stPmxpbmVOdW1iZXJGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCk7CisgICAg
ICAgIERlYnVnZ2VyQ2FsbEZyYW1lIGRlYnVnZ2VyQ2FsbEZyYW1lKGNhbGxGcmFtZSwgbGluZSwg
MCwgZXhjZXB0aW9uVmFsdWUpOwogCiAgICAgICAgIGJvb2wgaGFzSGFuZGxlcjsKICAgICAgICAg
aWYgKGlzVGVybWluYXRpb24pCkBAIC02NjUsNyArNjY3LDcgQEAgTkVWRVJfSU5MSU5FIEhhbmRs
ZXJJbmZvKiBJbnRlcnByZXRlcjo6dQogICAgICAgICAgICAgaGFzSGFuZGxlciA9ICEhZnVuY3Rv
ci5oYW5kbGVyKCk7CiAgICAgICAgIH0KIAotICAgICAgICBkZWJ1Z2dlci0+ZXhjZXB0aW9uKGRl
YnVnZ2VyQ2FsbEZyYW1lLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5zb3VyY2VJRCgp
LCBjb2RlQmxvY2stPmxpbmVOdW1iZXJGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCks
IDAsIGhhc0hhbmRsZXIpOworICAgICAgICBkZWJ1Z2dlci0+ZXhjZXB0aW9uKGRlYnVnZ2VyQ2Fs
bEZyYW1lLCBoYXNIYW5kbGVyKTsKICAgICB9CiAKICAgICAvLyBDYWxjdWxhdGUgYW4gZXhjZXB0
aW9uIGhhbmRsZXIgdlBDLCB1bndpbmRpbmcgY2FsbCBmcmFtZXMgYXMgbmVjZXNzYXJ5LgpAQCAt
MTI1MywyMiArMTI1NSwyMiBAQCBORVZFUl9JTkxJTkUgdm9pZCBJbnRlcnByZXRlcjo6ZGVidWco
Q2FsCiAKICAgICBzd2l0Y2ggKGRlYnVnSG9va0lEKSB7CiAgICAgICAgIGNhc2UgRGlkRW50ZXJD
YWxsRnJhbWU6Ci0gICAgICAgICAgICBkZWJ1Z2dlci0+Y2FsbEV2ZW50KGNhbGxGcmFtZSwgY2Fs
bEZyYW1lLT5jb2RlQmxvY2soKS0+b3duZXJFeGVjdXRhYmxlKCktPnNvdXJjZUlEKCksIGZpcnN0
TGluZSwgY29sdW1uKTsKKyAgICAgICAgICAgIGRlYnVnZ2VyLT5jYWxsRXZlbnQoRGVidWdnZXJD
YWxsRnJhbWUoY2FsbEZyYW1lLCBmaXJzdExpbmUsIGNvbHVtbikpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICBjYXNlIFdpbGxMZWF2ZUNhbGxGcmFtZToKLSAgICAgICAgICAgIGRlYnVn
Z2VyLT5yZXR1cm5FdmVudChjYWxsRnJhbWUsIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPm93bmVy
RXhlY3V0YWJsZSgpLT5zb3VyY2VJRCgpLCBsYXN0TGluZSwgY29sdW1uKTsKKyAgICAgICAgICAg
IGRlYnVnZ2VyLT5yZXR1cm5FdmVudChEZWJ1Z2dlckNhbGxGcmFtZShjYWxsRnJhbWUsIGxhc3RM
aW5lLCBjb2x1bW4pKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2FzZSBXaWxsRXhl
Y3V0ZVN0YXRlbWVudDoKLSAgICAgICAgICAgIGRlYnVnZ2VyLT5hdFN0YXRlbWVudChjYWxsRnJh
bWUsIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPm93bmVyRXhlY3V0YWJsZSgpLT5zb3VyY2VJRCgp
LCBmaXJzdExpbmUsIGNvbHVtbik7CisgICAgICAgICAgICBkZWJ1Z2dlci0+YXRTdGF0ZW1lbnQo
RGVidWdnZXJDYWxsRnJhbWUoY2FsbEZyYW1lLCBmaXJzdExpbmUsIGNvbHVtbikpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICBjYXNlIFdpbGxFeGVjdXRlUHJvZ3JhbToKLSAgICAgICAg
ICAgIGRlYnVnZ2VyLT53aWxsRXhlY3V0ZVByb2dyYW0oY2FsbEZyYW1lLCBjYWxsRnJhbWUtPmNv
ZGVCbG9jaygpLT5vd25lckV4ZWN1dGFibGUoKS0+c291cmNlSUQoKSwgZmlyc3RMaW5lLCBjb2x1
bW4pOworICAgICAgICAgICAgZGVidWdnZXItPndpbGxFeGVjdXRlUHJvZ3JhbShEZWJ1Z2dlckNh
bGxGcmFtZShjYWxsRnJhbWUsIGZpcnN0TGluZSwgY29sdW1uKSk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIGNhc2UgRGlkRXhlY3V0ZVByb2dyYW06Ci0gICAgICAgICAgICBkZWJ1Z2dl
ci0+ZGlkRXhlY3V0ZVByb2dyYW0oY2FsbEZyYW1lLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5v
d25lckV4ZWN1dGFibGUoKS0+c291cmNlSUQoKSwgbGFzdExpbmUsIGNvbHVtbik7CisgICAgICAg
ICAgICBkZWJ1Z2dlci0+ZGlkRXhlY3V0ZVByb2dyYW0oRGVidWdnZXJDYWxsRnJhbWUoY2FsbEZy
YW1lLCBsYXN0TGluZSwgY29sdW1uKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNh
c2UgRGlkUmVhY2hCcmVha3BvaW50OgotICAgICAgICAgICAgZGVidWdnZXItPmRpZFJlYWNoQnJl
YWtwb2ludChjYWxsRnJhbWUsIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPm93bmVyRXhlY3V0YWJs
ZSgpLT5zb3VyY2VJRCgpLCBsYXN0TGluZSwgY29sdW1uKTsKKyAgICAgICAgICAgIGRlYnVnZ2Vy
LT5kaWRSZWFjaEJyZWFrcG9pbnQoRGVidWdnZXJDYWxsRnJhbWUoY2FsbEZyYW1lLCBsYXN0TGlu
ZSwgY29sdW1uKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogfSAgICAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cJKHJldmlzaW9uIDE1NTU5NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDQwIEBACisyMDEzLTA5LTExICBNYXJrIExhbSAgPG1hcmsu
bGFtQGFwcGxlLmNvbT4KKworICAgICAgICBDaGFuZ2UgZGVidWcgaG9va3MgdG8gcGFzcyBzb3Vy
Y2VJRCBhbmQgcG9zaXRpb24gaW5mbyB2aWEgdGhlIERlYnVnZ2VyQ2FsbEZyYW1lLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIxMjE0LgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4K
KworICAgICAgICBBbHNvIGNoYW5nZWQgdGhlIEluc3BlY3RvcidzIEphdmFTY3JpcHRDYWxsRnJh
bWUgdG8gZ2V0IHRoZSBzb3VyY2VJRCBhbmQKKyAgICAgICAgcG9zaXRpb24gaW5mbyBmcm9tIGl0
cyBEZWJ1Z2dlckNhbGxGcmFtZSBpbnN0ZWFkIG9mIGNhY2hpbmcgdGhvc2UgdmFsdWVzLgorCisg
ICAgICAgICogYmluZGluZ3MvanMvSmF2YVNjcmlwdENhbGxGcmFtZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpKYXZhU2NyaXB0Q2FsbEZyYW1lOjpKYXZhU2NyaXB0Q2FsbEZyYW1lKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KYXZhU2NyaXB0Q2FsbEZyYW1lLmg6CisgICAgICAgIChXZWJDb3Jl
OjpKYXZhU2NyaXB0Q2FsbEZyYW1lOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SmF2YVNj
cmlwdENhbGxGcmFtZTo6aW52YWxpZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpKYXZhU2NyaXB0
Q2FsbEZyYW1lOjpzb3VyY2VJRCk6CisgICAgICAgIChXZWJDb3JlOjpKYXZhU2NyaXB0Q2FsbEZy
YW1lOjpwb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpKYXZhU2NyaXB0Q2FsbEZyYW1lOjps
aW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkphdmFTY3JpcHRDYWxsRnJhbWU6OmNvbHVtbik6Cisg
ICAgICAgIChXZWJDb3JlOjpKYXZhU2NyaXB0Q2FsbEZyYW1lOjp1cGRhdGUpOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNj
cmlwdERlYnVnU2VydmVyOjpjcmVhdGVDYWxsRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
aXB0RGVidWdTZXJ2ZXI6OnVwZGF0ZUNhbGxGcmFtZUFuZFBhdXNlSWZOZWVkZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OmNhbGxFdmVudCk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6YXRTdGF0ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
U2NyaXB0RGVidWdTZXJ2ZXI6OnJldHVybkV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlw
dERlYnVnU2VydmVyOjpleGNlcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdT
ZXJ2ZXI6OndpbGxFeGVjdXRlUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1
Z1NlcnZlcjo6ZGlkRXhlY3V0ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVi
dWdTZXJ2ZXI6OmRpZFJlYWNoQnJlYWtwb2ludCk6CisgICAgICAgICogYmluZGluZ3MvanMvU2Ny
aXB0RGVidWdTZXJ2ZXIuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHREZWJ1
Z1NlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJTY3JpcHREZWJ1Z1NlcnZlcjo6
d2lsbEV4ZWN1dGVQcm9ncmFtKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRE
ZWJ1Z1NlcnZlci5oOgorCiAyMDEzLTA5LTExICBBbmRyZWFzIEtsaW5nICA8YWtsaW5nQGFwcGxl
LmNvbT4KIAogICAgICAgICBGaXggV2luZG93cyBidWlsZC4KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0phdmFTY3JpcHRDYWxsRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0phdmFTY3JpcHRDYWxsRnJhbWUuY3BwCShyZXZpc2lvbiAx
NTU1ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KYXZhU2NyaXB0Q2FsbEZyYW1l
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTEgKzQzLDkgQEAgdXNpbmcgbmFtZXNwYWNlIEpT
QzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAotSmF2YVNjcmlwdENhbGxGcmFtZTo6SmF2
YVNjcmlwdENhbGxGcmFtZShjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYgZGVidWdnZXJDYWxsRnJh
bWUsIFBhc3NSZWZQdHI8SmF2YVNjcmlwdENhbGxGcmFtZT4gY2FsbGVyLCBpbnRwdHJfdCBzb3Vy
Y2VJRCwgY29uc3QgVGV4dFBvc2l0aW9uJiB0ZXh0UG9zaXRpb24pCitKYXZhU2NyaXB0Q2FsbEZy
YW1lOjpKYXZhU2NyaXB0Q2FsbEZyYW1lKGNvbnN0IERlYnVnZ2VyQ2FsbEZyYW1lJiBkZWJ1Z2dl
ckNhbGxGcmFtZSwgUGFzc1JlZlB0cjxKYXZhU2NyaXB0Q2FsbEZyYW1lPiBjYWxsZXIpCiAgICAg
OiBtX2RlYnVnZ2VyQ2FsbEZyYW1lKGRlYnVnZ2VyQ2FsbEZyYW1lKQogICAgICwgbV9jYWxsZXIo
Y2FsbGVyKQotICAgICwgbV9zb3VyY2VJRChzb3VyY2VJRCkKLSAgICAsIG1fdGV4dFBvc2l0aW9u
KHRleHRQb3NpdGlvbikKICAgICAsIG1faXNWYWxpZCh0cnVlKQogewogfQpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSmF2YVNjcmlwdENhbGxGcmFtZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0phdmFTY3JpcHRDYWxsRnJhbWUuaAkocmV2aXNp
b24gMTU1NTg0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSmF2YVNjcmlwdENhbGxG
cmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwzMSArMzksNDAgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBKYXZhU2NyaXB0Q2FsbEZyYW1lIDogcHVibGljIFJlZkNvdW50ZWQ8SmF2
YVNjcmlwdENhbGxGcmFtZT4gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEphdmFT
Y3JpcHRDYWxsRnJhbWU+IGNyZWF0ZShjb25zdCBKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lJiBkZWJ1
Z2dlckNhbGxGcmFtZSwgUGFzc1JlZlB0cjxKYXZhU2NyaXB0Q2FsbEZyYW1lPiBjYWxsZXIsIGlu
dHB0cl90IHNvdXJjZUlELCBjb25zdCBUZXh0UG9zaXRpb24mIHRleHRQb3NpdGlvbikKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxKYXZhU2NyaXB0Q2FsbEZyYW1lPiBjcmVhdGUoY29uc3QgSlNDOjpE
ZWJ1Z2dlckNhbGxGcmFtZSYgZGVidWdnZXJDYWxsRnJhbWUsIFBhc3NSZWZQdHI8SmF2YVNjcmlw
dENhbGxGcmFtZT4gY2FsbGVyKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBK
YXZhU2NyaXB0Q2FsbEZyYW1lKGRlYnVnZ2VyQ2FsbEZyYW1lLCBjYWxsZXIsIHNvdXJjZUlELCB0
ZXh0UG9zaXRpb24pKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBKYXZhU2NyaXB0Q2Fs
bEZyYW1lKGRlYnVnZ2VyQ2FsbEZyYW1lLCBjYWxsZXIpKTsKICAgICB9CiAKICAgICB2b2lkIGlu
dmFsaWRhdGUoKQogICAgIHsKICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgIG1f
ZGVidWdnZXJDYWxsRnJhbWUgPSAwOworICAgICAgICBtX2RlYnVnZ2VyQ2FsbEZyYW1lLmNsZWFy
KCk7CiAgICAgfQogCiAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gbV9pc1ZhbGlk
OyB9CiAKICAgICBKYXZhU2NyaXB0Q2FsbEZyYW1lKiBjYWxsZXIoKTsKIAotICAgIGludHB0cl90
IHNvdXJjZUlEKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VJRDsgfQotICAgIGNvbnN0IFRleHRQ
b3NpdGlvbiYgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3RleHRQb3NpdGlvbjsgfQotICAg
IGludCBsaW5lKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0UG9zaXRpb24ubV9saW5lLnplcm9CYXNl
ZEludCgpOyB9Ci0gICAgaW50IGNvbHVtbigpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dFBvc2l0aW9u
Lm1fY29sdW1uLnplcm9CYXNlZEludCgpOyB9CisgICAgaW50cHRyX3Qgc291cmNlSUQoKSBjb25z
dCB7IHJldHVybiBtX2RlYnVnZ2VyQ2FsbEZyYW1lLnNvdXJjZUlkKCk7IH0KKyAgICBjb25zdCBU
ZXh0UG9zaXRpb24gcG9zaXRpb24oKSBjb25zdAorICAgIHsKKyAgICAgICAgT3JkaW5hbE51bWJl
ciBsaW5lID0gV1RGOjpPcmRpbmFsTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQobV9kZWJ1Z2dlckNh
bGxGcmFtZS5saW5lKCkpOworICAgICAgICBPcmRpbmFsTnVtYmVyIGNvbHVtbiA9IFdURjo6T3Jk
aW5hbE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KG1fZGVidWdnZXJDYWxsRnJhbWUuY29sdW1uKCkp
OworICAgICAgICByZXR1cm4gVGV4dFBvc2l0aW9uKGxpbmUsIGNvbHVtbik7CisgICAgfQorICAg
IGludCBsaW5lKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6Ok9yZGluYWxOdW1i
ZXI6OmZyb21PbmVCYXNlZEludChtX2RlYnVnZ2VyQ2FsbEZyYW1lLmxpbmUoKSkuemVyb0Jhc2Vk
SW50KCk7CisgICAgfQorICAgIGludCBjb2x1bW4oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIFdURjo6T3JkaW5hbE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KG1fZGVidWdnZXJDYWxsRnJh
bWUuY29sdW1uKCkpLnplcm9CYXNlZEludCgpOworICAgIH0KIAotICAgIHZvaWQgdXBkYXRlKGNv
bnN0IEpTQzo6RGVidWdnZXJDYWxsRnJhbWUmIGRlYnVnZ2VyQ2FsbEZyYW1lLCBpbnRwdHJfdCBz
b3VyY2VJRCwgY29uc3QgVGV4dFBvc2l0aW9uJiB0ZXh0UG9zaXRpb24pCisgICAgdm9pZCB1cGRh
dGUoY29uc3QgSlNDOjpEZWJ1Z2dlckNhbGxGcmFtZSYgZGVidWdnZXJDYWxsRnJhbWUpCiAgICAg
ewogICAgICAgICBtX2RlYnVnZ2VyQ2FsbEZyYW1lID0gZGVidWdnZXJDYWxsRnJhbWU7Ci0gICAg
ICAgIG1fdGV4dFBvc2l0aW9uID0gdGV4dFBvc2l0aW9uOwotICAgICAgICBtX3NvdXJjZUlEID0g
c291cmNlSUQ7CiAgICAgICAgIG1faXNWYWxpZCA9IHRydWU7CiAgICAgfQogCkBAIC03NywxMiAr
ODYsMTAgQEAgcHVibGljOgogICAgIEpTQzo6SlNWYWx1ZSBldmFsdWF0ZShjb25zdCBTdHJpbmcm
IHNjcmlwdCwgSlNDOjpKU1ZhbHVlJiBleGNlcHRpb24pIGNvbnN0OwogICAgIAogcHJpdmF0ZToK
LSAgICBKYXZhU2NyaXB0Q2FsbEZyYW1lKGNvbnN0IEpTQzo6RGVidWdnZXJDYWxsRnJhbWUmLCBQ
YXNzUmVmUHRyPEphdmFTY3JpcHRDYWxsRnJhbWU+IGNhbGxlciwgaW50cHRyX3Qgc291cmNlSUQs
IGNvbnN0IFRleHRQb3NpdGlvbiYpOworICAgIEphdmFTY3JpcHRDYWxsRnJhbWUoY29uc3QgSlND
OjpEZWJ1Z2dlckNhbGxGcmFtZSYsIFBhc3NSZWZQdHI8SmF2YVNjcmlwdENhbGxGcmFtZT4gY2Fs
bGVyKTsKIAogICAgIEpTQzo6RGVidWdnZXJDYWxsRnJhbWUgbV9kZWJ1Z2dlckNhbGxGcmFtZTsK
ICAgICBSZWZQdHI8SmF2YVNjcmlwdENhbGxGcmFtZT4gbV9jYWxsZXI7Ci0gICAgaW50cHRyX3Qg
bV9zb3VyY2VJRDsKLSAgICBUZXh0UG9zaXRpb24gbV90ZXh0UG9zaXRpb247CiAgICAgYm9vbCBt
X2lzVmFsaWQ7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRE
ZWJ1Z1NlcnZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
U2NyaXB0RGVidWdTZXJ2ZXIuY3BwCShyZXZpc2lvbiAxNTU1ODQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQy
OSwyNCArNDI5LDIzIEBAIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmRpc3BhdGNoRnVuY3Rpb24K
ICAgICBtX2NhbGxpbmdMaXN0ZW5lcnMgPSBmYWxzZTsKIH0KIAotdm9pZCBTY3JpcHREZWJ1Z1Nl
cnZlcjo6Y3JlYXRlQ2FsbEZyYW1lKGNvbnN0IERlYnVnZ2VyQ2FsbEZyYW1lJiBkZWJ1Z2dlckNh
bGxGcmFtZSwgaW50cHRyX3Qgc291cmNlSUQsIGludCBsaW5lTnVtYmVyLCBpbnQgY29sdW1uTnVt
YmVyKQordm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6Y3JlYXRlQ2FsbEZyYW1lKGNvbnN0IERlYnVn
Z2VyQ2FsbEZyYW1lJiBkZWJ1Z2dlckNhbGxGcmFtZSkKIHsKLSAgICBUZXh0UG9zaXRpb24gdGV4
dFBvc2l0aW9uKE9yZGluYWxOdW1iZXI6OmZyb21PbmVCYXNlZEludChsaW5lTnVtYmVyKSwgT3Jk
aW5hbE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KGNvbHVtbk51bWJlcikpOwotICAgIG1fY3VycmVu
dENhbGxGcmFtZSA9IEphdmFTY3JpcHRDYWxsRnJhbWU6OmNyZWF0ZShkZWJ1Z2dlckNhbGxGcmFt
ZSwgbV9jdXJyZW50Q2FsbEZyYW1lLCBzb3VyY2VJRCwgdGV4dFBvc2l0aW9uKTsKLSAgICBpZiAo
bV9sYXN0RXhlY3V0ZWRTb3VyY2VJZCAhPSBzb3VyY2VJRCkgeworICAgIGludHB0cl90IHNvdXJj
ZUlkID0gZGVidWdnZXJDYWxsRnJhbWUuc291cmNlSWQoKTsKKyAgICBtX2N1cnJlbnRDYWxsRnJh
bWUgPSBKYXZhU2NyaXB0Q2FsbEZyYW1lOjpjcmVhdGUoZGVidWdnZXJDYWxsRnJhbWUsIG1fY3Vy
cmVudENhbGxGcmFtZSk7CisgICAgaWYgKG1fbGFzdEV4ZWN1dGVkU291cmNlSWQgIT0gc291cmNl
SWQpIHsKICAgICAgICAgbV9sYXN0RXhlY3V0ZWRMaW5lID0gLTE7Ci0gICAgICAgIG1fbGFzdEV4
ZWN1dGVkU291cmNlSWQgPSBzb3VyY2VJRDsKKyAgICAgICAgbV9sYXN0RXhlY3V0ZWRTb3VyY2VJ
ZCA9IHNvdXJjZUlkOwogICAgIH0KIH0KIAotdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6dXBkYXRl
Q2FsbEZyYW1lQW5kUGF1c2VJZk5lZWRlZChjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYgZGVidWdn
ZXJDYWxsRnJhbWUsIGludHB0cl90IHNvdXJjZUlELCBpbnQgbGluZU51bWJlciwgaW50IGNvbHVt
bk51bWJlcikKK3ZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnVwZGF0ZUNhbGxGcmFtZUFuZFBhdXNl
SWZOZWVkZWQoY29uc3QgRGVidWdnZXJDYWxsRnJhbWUmIGRlYnVnZ2VyQ2FsbEZyYW1lKQogewog
ICAgIC8vIEFTU0VSVChtX2N1cnJlbnRDYWxsRnJhbWUpOwogICAgIGlmICghbV9jdXJyZW50Q2Fs
bEZyYW1lKQogICAgICAgICByZXR1cm47CiAKLSAgICBUZXh0UG9zaXRpb24gdGV4dFBvc2l0aW9u
KE9yZGluYWxOdW1iZXI6OmZyb21PbmVCYXNlZEludChsaW5lTnVtYmVyKSwgT3JkaW5hbE51bWJl
cjo6ZnJvbU9uZUJhc2VkSW50KGNvbHVtbk51bWJlcikpOwotICAgIG1fY3VycmVudENhbGxGcmFt
ZS0+dXBkYXRlKGRlYnVnZ2VyQ2FsbEZyYW1lLCBzb3VyY2VJRCwgdGV4dFBvc2l0aW9uKTsKKyAg
ICBtX2N1cnJlbnRDYWxsRnJhbWUtPnVwZGF0ZShkZWJ1Z2dlckNhbGxGcmFtZSk7CiAgICAgcGF1
c2VJZk5lZWRlZChkZWJ1Z2dlckNhbGxGcmFtZS5keW5hbWljR2xvYmFsT2JqZWN0KCkpOwogfQog
CkBAIC00OTMsMjYgKzQ5MiwyNiBAQCB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpwYXVzZUlmTmVl
ZGVkKEpTCiAgICAgbV9wYXVzZWQgPSBmYWxzZTsKIH0KIAotdm9pZCBTY3JpcHREZWJ1Z1NlcnZl
cjo6Y2FsbEV2ZW50KGNvbnN0IERlYnVnZ2VyQ2FsbEZyYW1lJiBkZWJ1Z2dlckNhbGxGcmFtZSwg
aW50cHRyX3Qgc291cmNlSUQsIGludCBsaW5lTnVtYmVyLCBpbnQgY29sdW1uTnVtYmVyKQordm9p
ZCBTY3JpcHREZWJ1Z1NlcnZlcjo6Y2FsbEV2ZW50KGNvbnN0IERlYnVnZ2VyQ2FsbEZyYW1lJiBk
ZWJ1Z2dlckNhbGxGcmFtZSkKIHsKICAgICBpZiAoIW1fcGF1c2VkKSB7Ci0gICAgICAgIGNyZWF0
ZUNhbGxGcmFtZShkZWJ1Z2dlckNhbGxGcmFtZSwgc291cmNlSUQsIGxpbmVOdW1iZXIsIGNvbHVt
bk51bWJlcik7CisgICAgICAgIGNyZWF0ZUNhbGxGcmFtZShkZWJ1Z2dlckNhbGxGcmFtZSk7CiAg
ICAgICAgIHBhdXNlSWZOZWVkZWQoZGVidWdnZXJDYWxsRnJhbWUuZHluYW1pY0dsb2JhbE9iamVj
dCgpKTsKICAgICB9CiB9CiAKLXZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmF0U3RhdGVtZW50KGNv
bnN0IERlYnVnZ2VyQ2FsbEZyYW1lJiBkZWJ1Z2dlckNhbGxGcmFtZSwgaW50cHRyX3Qgc291cmNl
SUQsIGludCBsaW5lTnVtYmVyLCBpbnQgY29sdW1uTnVtYmVyKQordm9pZCBTY3JpcHREZWJ1Z1Nl
cnZlcjo6YXRTdGF0ZW1lbnQoY29uc3QgRGVidWdnZXJDYWxsRnJhbWUmIGRlYnVnZ2VyQ2FsbEZy
YW1lKQogewogICAgIGlmICghbV9wYXVzZWQpCi0gICAgICAgIHVwZGF0ZUNhbGxGcmFtZUFuZFBh
dXNlSWZOZWVkZWQoZGVidWdnZXJDYWxsRnJhbWUsIHNvdXJjZUlELCBsaW5lTnVtYmVyLCBjb2x1
bW5OdW1iZXIpOworICAgICAgICB1cGRhdGVDYWxsRnJhbWVBbmRQYXVzZUlmTmVlZGVkKGRlYnVn
Z2VyQ2FsbEZyYW1lKTsKIH0KIAotdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6cmV0dXJuRXZlbnQo
Y29uc3QgRGVidWdnZXJDYWxsRnJhbWUmIGRlYnVnZ2VyQ2FsbEZyYW1lLCBpbnRwdHJfdCBzb3Vy
Y2VJRCwgaW50IGxpbmVOdW1iZXIsIGludCBjb2x1bW5OdW1iZXIpCit2b2lkIFNjcmlwdERlYnVn
U2VydmVyOjpyZXR1cm5FdmVudChjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYgZGVidWdnZXJDYWxs
RnJhbWUpCiB7CiAgICAgaWYgKG1fcGF1c2VkKQogICAgICAgICByZXR1cm47CiAKLSAgICB1cGRh
dGVDYWxsRnJhbWVBbmRQYXVzZUlmTmVlZGVkKGRlYnVnZ2VyQ2FsbEZyYW1lLCBzb3VyY2VJRCwg
bGluZU51bWJlciwgY29sdW1uTnVtYmVyKTsKKyAgICB1cGRhdGVDYWxsRnJhbWVBbmRQYXVzZUlm
TmVlZGVkKGRlYnVnZ2VyQ2FsbEZyYW1lKTsKIAogICAgIC8vIGRldGFjaCBtYXkgaGF2ZSBiZWVu
IGNhbGxlZCBkdXJpbmcgcGF1c2VJZk5lZWRlZAogICAgIGlmICghbV9jdXJyZW50Q2FsbEZyYW1l
KQpAQCAtNTI0LDcgKzUyMyw3IEBAIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnJldHVybkV2ZW50
KGNvbnMKICAgICBtX2N1cnJlbnRDYWxsRnJhbWUgPSBtX2N1cnJlbnRDYWxsRnJhbWUtPmNhbGxl
cigpOwogfQogCi12b2lkIFNjcmlwdERlYnVnU2VydmVyOjpleGNlcHRpb24oY29uc3QgRGVidWdn
ZXJDYWxsRnJhbWUmIGRlYnVnZ2VyQ2FsbEZyYW1lLCBpbnRwdHJfdCBzb3VyY2VJRCwgaW50IGxp
bmVOdW1iZXIsIGludCBjb2x1bW5OdW1iZXIsIGJvb2wgaGFzSGFuZGxlcikKK3ZvaWQgU2NyaXB0
RGVidWdTZXJ2ZXI6OmV4Y2VwdGlvbihjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYgZGVidWdnZXJD
YWxsRnJhbWUsIGJvb2wgaGFzSGFuZGxlcikKIHsKICAgICBpZiAobV9wYXVzZWQpCiAgICAgICAg
IHJldHVybjsKQEAgLTUzMiwyMyArNTMxLDIzIEBAIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmV4
Y2VwdGlvbihjb25zdCAKICAgICBpZiAobV9wYXVzZU9uRXhjZXB0aW9uc1N0YXRlID09IFBhdXNl
T25BbGxFeGNlcHRpb25zIHx8IChtX3BhdXNlT25FeGNlcHRpb25zU3RhdGUgPT0gUGF1c2VPblVu
Y2F1Z2h0RXhjZXB0aW9ucyAmJiAhaGFzSGFuZGxlcikpCiAgICAgICAgIG1fcGF1c2VPbk5leHRT
dGF0ZW1lbnQgPSB0cnVlOwogCi0gICAgdXBkYXRlQ2FsbEZyYW1lQW5kUGF1c2VJZk5lZWRlZChk
ZWJ1Z2dlckNhbGxGcmFtZSwgc291cmNlSUQsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcik7Cisg
ICAgdXBkYXRlQ2FsbEZyYW1lQW5kUGF1c2VJZk5lZWRlZChkZWJ1Z2dlckNhbGxGcmFtZSk7CiB9
CiAKLXZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OndpbGxFeGVjdXRlUHJvZ3JhbShjb25zdCBEZWJ1
Z2dlckNhbGxGcmFtZSYgZGVidWdnZXJDYWxsRnJhbWUsIGludHB0cl90IHNvdXJjZUlELCBpbnQg
bGluZU51bWJlciwgaW50IGNvbHVtbk51bWJlcikKK3ZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6Ondp
bGxFeGVjdXRlUHJvZ3JhbShjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYgZGVidWdnZXJDYWxsRnJh
bWUpCiB7CiAgICAgaWYgKCFtX3BhdXNlZCkgewotICAgICAgICBjcmVhdGVDYWxsRnJhbWUoZGVi
dWdnZXJDYWxsRnJhbWUsIHNvdXJjZUlELCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpOworICAg
ICAgICBjcmVhdGVDYWxsRnJhbWUoZGVidWdnZXJDYWxsRnJhbWUpOwogICAgICAgICBwYXVzZUlm
TmVlZGVkKGRlYnVnZ2VyQ2FsbEZyYW1lLmR5bmFtaWNHbG9iYWxPYmplY3QoKSk7CiAgICAgfQog
fQogCi12b2lkIFNjcmlwdERlYnVnU2VydmVyOjpkaWRFeGVjdXRlUHJvZ3JhbShjb25zdCBEZWJ1
Z2dlckNhbGxGcmFtZSYgZGVidWdnZXJDYWxsRnJhbWUsIGludHB0cl90IHNvdXJjZUlELCBpbnQg
bGluZU51bWJlciwgaW50IGNvbHVtbk51bWJlcikKK3ZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmRp
ZEV4ZWN1dGVQcm9ncmFtKGNvbnN0IERlYnVnZ2VyQ2FsbEZyYW1lJiBkZWJ1Z2dlckNhbGxGcmFt
ZSkKIHsKICAgICBpZiAobV9wYXVzZWQpCiAgICAgICAgIHJldHVybjsKIAotICAgIHVwZGF0ZUNh
bGxGcmFtZUFuZFBhdXNlSWZOZWVkZWQoZGVidWdnZXJDYWxsRnJhbWUsIHNvdXJjZUlELCBsaW5l
TnVtYmVyLCBjb2x1bW5OdW1iZXIpOworICAgIHVwZGF0ZUNhbGxGcmFtZUFuZFBhdXNlSWZOZWVk
ZWQoZGVidWdnZXJDYWxsRnJhbWUpOwogCiAgICAgLy8gVHJlYXQgc3RlcHBpbmcgb3ZlciB0aGUg
ZW5kIG9mIGEgcHJvZ3JhbSBsaWtlIHN0ZXBwaW5nIG91dC4KICAgICBpZiAoIW1fY3VycmVudENh
bGxGcmFtZSkKQEAgLTU2MSwxMyArNTYwLDEzIEBAIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmRp
ZEV4ZWN1dGVQcm9ncmEKICAgICBtX2N1cnJlbnRDYWxsRnJhbWUgPSBtX2N1cnJlbnRDYWxsRnJh
bWUtPmNhbGxlcigpOwogfQogCi12b2lkIFNjcmlwdERlYnVnU2VydmVyOjpkaWRSZWFjaEJyZWFr
cG9pbnQoY29uc3QgRGVidWdnZXJDYWxsRnJhbWUmIGRlYnVnZ2VyQ2FsbEZyYW1lLCBpbnRwdHJf
dCBzb3VyY2VJRCwgaW50IGxpbmVOdW1iZXIsIGludCBjb2x1bW5OdW1iZXIpCit2b2lkIFNjcmlw
dERlYnVnU2VydmVyOjpkaWRSZWFjaEJyZWFrcG9pbnQoY29uc3QgRGVidWdnZXJDYWxsRnJhbWUm
IGRlYnVnZ2VyQ2FsbEZyYW1lKQogewogICAgIGlmIChtX3BhdXNlZCkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgbV9wYXVzZU9uTmV4dFN0YXRlbWVudCA9IHRydWU7Ci0gICAgdXBkYXRlQ2FsbEZy
YW1lQW5kUGF1c2VJZk5lZWRlZChkZWJ1Z2dlckNhbGxGcmFtZSwgc291cmNlSUQsIGxpbmVOdW1i
ZXIsIGNvbHVtbk51bWJlcik7CisgICAgdXBkYXRlQ2FsbEZyYW1lQW5kUGF1c2VJZk5lZWRlZChk
ZWJ1Z2dlckNhbGxGcmFtZSk7CiB9CiAKIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnJlY29tcGls
ZUFsbEpTRnVuY3Rpb25zU29vbigpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9T
Y3JpcHREZWJ1Z1NlcnZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1NjcmlwdERlYnVnU2VydmVyLmgJKHJldmlzaW9uIDE1NTU4NCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEz
NSwyMCArMTM1LDIwIEBAIHByb3RlY3RlZDoKICAgICB2b2lkIGRpc3BhdGNoRGlkUGFyc2VTb3Vy
Y2UoY29uc3QgTGlzdGVuZXJTZXQmIGxpc3RlbmVycywgSlNDOjpTb3VyY2VQcm92aWRlciosIGJv
b2wgaXNDb250ZW50U2NyaXB0KTsKICAgICB2b2lkIGRpc3BhdGNoRmFpbGVkVG9QYXJzZVNvdXJj
ZShjb25zdCBMaXN0ZW5lclNldCYgbGlzdGVuZXJzLCBKU0M6OlNvdXJjZVByb3ZpZGVyKiwgaW50
IGVycm9yTGluZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpOwogCi0gICAgdm9pZCBjcmVh
dGVDYWxsRnJhbWUoY29uc3QgSlNDOjpEZWJ1Z2dlckNhbGxGcmFtZSYsIGludHB0cl90IHNvdXJj
ZUlELCBpbnQgbGluZU51bWJlciwgaW50IGNvbHVtbk51bWJlcik7Ci0gICAgdm9pZCB1cGRhdGVD
YWxsRnJhbWVBbmRQYXVzZUlmTmVlZGVkKGNvbnN0IEpTQzo6RGVidWdnZXJDYWxsRnJhbWUmLCBp
bnRwdHJfdCBzb3VyY2VJRCwgaW50IGxpbmVOdW1iZXIsIGludCBjb2x1bW5OdW1iZXIpOworICAg
IHZvaWQgY3JlYXRlQ2FsbEZyYW1lKGNvbnN0IEpTQzo6RGVidWdnZXJDYWxsRnJhbWUmKTsKKyAg
ICB2b2lkIHVwZGF0ZUNhbGxGcmFtZUFuZFBhdXNlSWZOZWVkZWQoY29uc3QgSlNDOjpEZWJ1Z2dl
ckNhbGxGcmFtZSYpOwogICAgIHZvaWQgcGF1c2VJZk5lZWRlZChKU0M6OkpTR2xvYmFsT2JqZWN0
KiBkeW5hbWljR2xvYmFsT2JqZWN0KTsKIAogICAgIHZpcnR1YWwgdm9pZCBkZXRhY2goSlNDOjpK
U0dsb2JhbE9iamVjdCopOwogCiAgICAgdmlydHVhbCB2b2lkIHNvdXJjZVBhcnNlZChKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6U291cmNlUHJvdmlkZXIqLCBpbnQgZXJyb3JMaW5lLCBjb25zdCBTdHJp
bmcmIGVycm9yTXNnKTsKLSAgICB2aXJ0dWFsIHZvaWQgY2FsbEV2ZW50KGNvbnN0IEpTQzo6RGVi
dWdnZXJDYWxsRnJhbWUmLCBpbnRwdHJfdCBzb3VyY2VJRCwgaW50IGxpbmVOdW1iZXIsIGludCBj
b2x1bW5OdW1iZXIpOwotICAgIHZpcnR1YWwgdm9pZCBhdFN0YXRlbWVudChjb25zdCBKU0M6OkRl
YnVnZ2VyQ2FsbEZyYW1lJiwgaW50cHRyX3Qgc291cmNlSUQsIGludCBmaXJzdExpbmUsIGludCBj
b2x1bW5OdW1iZXIpOwotICAgIHZpcnR1YWwgdm9pZCByZXR1cm5FdmVudChjb25zdCBKU0M6OkRl
YnVnZ2VyQ2FsbEZyYW1lJiwgaW50cHRyX3Qgc291cmNlSUQsIGludCBsaW5lTnVtYmVyLCBpbnQg
Y29sdW1uTnVtYmVyKTsKLSAgICB2aXJ0dWFsIHZvaWQgZXhjZXB0aW9uKGNvbnN0IEpTQzo6RGVi
dWdnZXJDYWxsRnJhbWUmLCBpbnRwdHJfdCBzb3VyY2VJRCwgaW50IGxpbmVOdW1iZXIsIGludCBj
b2x1bW5OdW1iZXIsIGJvb2wgaGFzSGFuZGxlcik7Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxFeGVj
dXRlUHJvZ3JhbShjb25zdCBKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lJiwgaW50cHRyX3Qgc291cmNl
SUQsIGludCBsaW5lbm8sIGludCBjb2x1bW5OdW1iZXIpOwotICAgIHZpcnR1YWwgdm9pZCBkaWRF
eGVjdXRlUHJvZ3JhbShjb25zdCBKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lJiwgaW50cHRyX3Qgc291
cmNlSUQsIGludCBsaW5lbm8sIGludCBjb2x1bW5OdW1iZXIpOwotICAgIHZpcnR1YWwgdm9pZCBk
aWRSZWFjaEJyZWFrcG9pbnQoY29uc3QgSlNDOjpEZWJ1Z2dlckNhbGxGcmFtZSYsIGludHB0cl90
IHNvdXJjZUlELCBpbnQgbGluZW5vLCBpbnQgY29sdW1uTnVtYmVyKTsKKyAgICB2aXJ0dWFsIHZv
aWQgY2FsbEV2ZW50KGNvbnN0IEpTQzo6RGVidWdnZXJDYWxsRnJhbWUmKTsKKyAgICB2aXJ0dWFs
IHZvaWQgYXRTdGF0ZW1lbnQoY29uc3QgSlNDOjpEZWJ1Z2dlckNhbGxGcmFtZSYpOworICAgIHZp
cnR1YWwgdm9pZCByZXR1cm5FdmVudChjb25zdCBKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lJik7Cisg
ICAgdmlydHVhbCB2b2lkIGV4Y2VwdGlvbihjb25zdCBKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lJiwg
Ym9vbCBoYXNIYW5kbGVyKTsKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbEV4ZWN1dGVQcm9ncmFtKGNv
bnN0IEpTQzo6RGVidWdnZXJDYWxsRnJhbWUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRXhlY3V0
ZVByb2dyYW0oY29uc3QgSlNDOjpEZWJ1Z2dlckNhbGxGcmFtZSYpOworICAgIHZpcnR1YWwgdm9p
ZCBkaWRSZWFjaEJyZWFrcG9pbnQoY29uc3QgSlNDOjpEZWJ1Z2dlckNhbGxGcmFtZSYpOwogCiAg
ICAgdHlwZWRlZiBWZWN0b3I8U2NyaXB0QnJlYWtwb2ludD4gQnJlYWtwb2ludHNJbkxpbmU7CiAg
ICAgdHlwZWRlZiBIYXNoTWFwPGxvbmcsIEJyZWFrcG9pbnRzSW5MaW5lPiBMaW5lVG9CcmVha3Bv
aW50TWFwOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0RGVi
dWdTZXJ2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dv
cmtlclNjcmlwdERlYnVnU2VydmVyLmNwcAkocmV2aXNpb24gMTU1NTg0KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02MCwxMCArNjAsMTAgQEAgdm9pZCBXb3JrZXJTY3JpcHREZWJ1Z1NlcnZlcjo6YWRk
TGlzdGVuZQogICAgIHJlY29tcGlsZUFsbEpTRnVuY3Rpb25zKDApOwogfQogCi12b2lkIFdvcmtl
clNjcmlwdERlYnVnU2VydmVyOjp3aWxsRXhlY3V0ZVByb2dyYW0oY29uc3QgSlNDOjpEZWJ1Z2dl
ckNhbGxGcmFtZSYgZGVidWdnZXJDYWxsRnJhbWUsIGludHB0cl90IHNvdXJjZUlELCBpbnQgbGlu
ZU51bWJlciwgaW50IGNvbHVtbk51bWJlcikKK3ZvaWQgV29ya2VyU2NyaXB0RGVidWdTZXJ2ZXI6
OndpbGxFeGVjdXRlUHJvZ3JhbShjb25zdCBKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lJiBkZWJ1Z2dl
ckNhbGxGcmFtZSkKIHsKICAgICBpZiAoIW1fcGF1c2VkKQotICAgICAgICBjcmVhdGVDYWxsRnJh
bWUoZGVidWdnZXJDYWxsRnJhbWUsIHNvdXJjZUlELCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIp
OworICAgICAgICBjcmVhdGVDYWxsRnJhbWUoZGVidWdnZXJDYWxsRnJhbWUpOwogfQogCiB2b2lk
IFdvcmtlclNjcmlwdERlYnVnU2VydmVyOjpyZWNvbXBpbGVBbGxKU0Z1bmN0aW9ucyhUaW1lcjxT
Y3JpcHREZWJ1Z1NlcnZlcj4qKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV29y
a2VyU2NyaXB0RGVidWdTZXJ2ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9Xb3JrZXJTY3JpcHREZWJ1Z1NlcnZlci5oCShyZXZpc2lvbiAxNTU1ODQpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHREZWJ1Z1NlcnZlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIGJvb2wg
aXNDb250ZW50U2NyaXB0KEpTQzo6RXhlY1N0YXRlKikgeyByZXR1cm4gZmFsc2U7IH0KIAotICAg
IHZpcnR1YWwgdm9pZCB3aWxsRXhlY3V0ZVByb2dyYW0oY29uc3QgSlNDOjpEZWJ1Z2dlckNhbGxG
cmFtZSYsIGludHB0cl90IHNvdXJjZUlELCBpbnQgbGluZW5vLCBpbnQgY29sdW1uTnVtYmVyKTsK
KyAgICB2aXJ0dWFsIHZvaWQgd2lsbEV4ZWN1dGVQcm9ncmFtKGNvbnN0IEpTQzo6RGVidWdnZXJD
YWxsRnJhbWUmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBydW5FdmVudExvb3BXaGlsZVBhdXNlZCgp
OwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNTU1OTUpCisrKyBTb3VyY2UvV2Vi
S2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMSBAQAorMjAxMy0w
OS0xMSAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAgQ2hhbmdlIGRl
YnVnIGhvb2tzIHRvIHBhc3Mgc291cmNlSUQgYW5kIHBvc2l0aW9uIGluZm8gdmlhIHRoZSBEZWJ1
Z2dlckNhbGxGcmFtZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEyMTIxNC4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIFdlYlZpZXcvV2ViU2NyaXB0RGVidWdnZXIuaDoKKyAgICAgICAgKiBXZWJWaWV3
L1dlYlNjcmlwdERlYnVnZ2VyLm1tOgorICAgICAgICAoV2ViU2NyaXB0RGVidWdnZXI6OldlYlNj
cmlwdERlYnVnZ2VyKToKKyAgICAgICAgKFdlYlNjcmlwdERlYnVnZ2VyOjpjYWxsRXZlbnQpOgor
ICAgICAgICAoV2ViU2NyaXB0RGVidWdnZXI6OmF0U3RhdGVtZW50KToKKyAgICAgICAgKFdlYlNj
cmlwdERlYnVnZ2VyOjpyZXR1cm5FdmVudCk6CisgICAgICAgIChXZWJTY3JpcHREZWJ1Z2dlcjo6
ZXhjZXB0aW9uKToKKyAgICAgICAgKFdlYlNjcmlwdERlYnVnZ2VyOjp3aWxsRXhlY3V0ZVByb2dy
YW0pOgorICAgICAgICAoV2ViU2NyaXB0RGVidWdnZXI6OmRpZEV4ZWN1dGVQcm9ncmFtKToKKyAg
ICAgICAgKFdlYlNjcmlwdERlYnVnZ2VyOjpkaWRSZWFjaEJyZWFrcG9pbnQpOgorCiAyMDEzLTA5
LTExICBHeXV5b3VuZyBLaW0gIDxneXV5b3VuZy5raW1Ac2Ftc3VuZy5jb20+CiAKICAgICAgICAg
R2VuZXJhdGUgbW9yZSBIVE1MIHR5cGUgY2hlY2tzIGFuZCBjYXN0aW5nCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdERlYnVnZ2VyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJTY3JpcHREZWJ1Z2dlci5oCShyZXZpc2lvbiAxNTU1
ODQpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdERlYnVnZ2VyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTU1LDEzICs1NSwxMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbml0R2xv
YmFsQ2FsbEZyYW1lKGNvbnN0IEpTQzo6RGVidWdnZXJDYWxsRnJhbWUmKTsKIAogICAgIHZpcnR1
YWwgdm9pZCBzb3VyY2VQYXJzZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlNvdXJjZVByb3ZpZGVy
KiwgaW50IGVycm9yTGluZSwgY29uc3QgV1RGOjpTdHJpbmcmIGVycm9yTXNnKTsKLSAgICB2aXJ0
dWFsIHZvaWQgY2FsbEV2ZW50KGNvbnN0IEpTQzo6RGVidWdnZXJDYWxsRnJhbWUmLCBpbnRwdHJf
dCBzb3VyY2VJRCwgaW50IGxpbmVOdW1iZXIsIGludCBjb2x1bW5OdW1iZXIpOwotICAgIHZpcnR1
YWwgdm9pZCBhdFN0YXRlbWVudChjb25zdCBKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lJiwgaW50cHRy
X3Qgc291cmNlSUQsIGludCBsaW5lTnVtYmVyLCBpbnQgY29sdW1uTnVtYmVyKTsKLSAgICB2aXJ0
dWFsIHZvaWQgcmV0dXJuRXZlbnQoY29uc3QgSlNDOjpEZWJ1Z2dlckNhbGxGcmFtZSYsIGludHB0
cl90IHNvdXJjZUlELCBpbnQgbGluZU51bWJlciwgaW50IGNvbHVtbk51bWJlcik7Ci0gICAgdmly
dHVhbCB2b2lkIGV4Y2VwdGlvbihjb25zdCBKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lJiwgaW50cHRy
X3Qgc291cmNlSUQsIGludCBsaW5lTnVtYmVyLCBpbnQgY29sdW1uTnVtYmVyLCBib29sIGhhc0hh
bmRsZXIpOwotICAgIHZpcnR1YWwgdm9pZCB3aWxsRXhlY3V0ZVByb2dyYW0oY29uc3QgSlNDOjpE
ZWJ1Z2dlckNhbGxGcmFtZSYsIGludHB0cl90IHNvdXJjZUlELCBpbnQgbGluZW5vLCBpbnQgY29s
dW1ubm8pOwotICAgIHZpcnR1YWwgdm9pZCBkaWRFeGVjdXRlUHJvZ3JhbShjb25zdCBKU0M6OkRl
YnVnZ2VyQ2FsbEZyYW1lJiwgaW50cHRyX3Qgc291cmNlSUQsIGludCBsaW5lbm8sIGludCBjb2x1
bW5ubyk7Ci0gICAgdmlydHVhbCB2b2lkIGRpZFJlYWNoQnJlYWtwb2ludChjb25zdCBKU0M6OkRl
YnVnZ2VyQ2FsbEZyYW1lJiwgaW50cHRyX3Qgc291cmNlSUQsIGludCBsaW5lbm8sIGludCBjb2x1
bW5ubyk7CisgICAgdmlydHVhbCB2b2lkIGNhbGxFdmVudChjb25zdCBKU0M6OkRlYnVnZ2VyQ2Fs
bEZyYW1lJik7CisgICAgdmlydHVhbCB2b2lkIGF0U3RhdGVtZW50KGNvbnN0IEpTQzo6RGVidWdn
ZXJDYWxsRnJhbWUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmV0dXJuRXZlbnQoY29uc3QgSlNDOjpE
ZWJ1Z2dlckNhbGxGcmFtZSYpOworICAgIHZpcnR1YWwgdm9pZCBleGNlcHRpb24oY29uc3QgSlND
OjpEZWJ1Z2dlckNhbGxGcmFtZSYsIGJvb2wgaGFzSGFuZGxlcik7CisgICAgdmlydHVhbCB2b2lk
IHdpbGxFeGVjdXRlUHJvZ3JhbShjb25zdCBKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lJik7CisgICAg
dmlydHVhbCB2b2lkIGRpZEV4ZWN1dGVQcm9ncmFtKGNvbnN0IEpTQzo6RGVidWdnZXJDYWxsRnJh
bWUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVhY2hCcmVha3BvaW50KGNvbnN0IEpTQzo6RGVi
dWdnZXJDYWxsRnJhbWUmKTsKIAogICAgIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCgpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFsT2JqZWN0LmdldCgpOyB9CiAgICAgV2ViU2NyaXB0
Q2FsbEZyYW1lICpnbG9iYWxDYWxsRnJhbWUoKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbENhbGxG
cmFtZS5nZXQoKTsgfQpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJTY3JpcHRE
ZWJ1Z2dlci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlNj
cmlwdERlYnVnZ2VyLm1tCShyZXZpc2lvbiAxNTU1ODQpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYlNjcmlwdERlYnVnZ2VyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC03OCw3ICs3OCw3
IEBAIFdlYlNjcmlwdERlYnVnZ2VyOjpXZWJTY3JpcHREZWJ1Z2dlcihKU0cKICAgICAsIG1fZ2xv
YmFsT2JqZWN0KGdsb2JhbE9iamVjdC0+dm0oKSwgZ2xvYmFsT2JqZWN0KQogewogICAgIGF0dGFj
aChnbG9iYWxPYmplY3QpOwotICAgIGluaXRHbG9iYWxDYWxsRnJhbWUoZ2xvYmFsT2JqZWN0LT5n
bG9iYWxFeGVjKCkpOworICAgIGluaXRHbG9iYWxDYWxsRnJhbWUoRGVidWdnZXJDYWxsRnJhbWUo
Z2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIDAsIDApKTsKIH0KIAogdm9pZCBXZWJTY3JpcHRE
ZWJ1Z2dlcjo6aW5pdEdsb2JhbENhbGxGcmFtZShjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYgZGVi
dWdnZXJDYWxsRnJhbWUpCkBAIC0xMzYsNyArMTM2LDcgQEAgdm9pZCBXZWJTY3JpcHREZWJ1Z2dl
cjo6c291cmNlUGFyc2VkKEV4ZQogICAgIG1fY2FsbGluZ0RlbGVnYXRlID0gZmFsc2U7CiB9CiAK
LXZvaWQgV2ViU2NyaXB0RGVidWdnZXI6OmNhbGxFdmVudChjb25zdCBEZWJ1Z2dlckNhbGxGcmFt
ZSYgZGVidWdnZXJDYWxsRnJhbWUsIGludHB0cl90IHNvdXJjZUlELCBpbnQgbGluZU51bWJlciwg
aW50IGNvbHVtbk51bWJlcikKK3ZvaWQgV2ViU2NyaXB0RGVidWdnZXI6OmNhbGxFdmVudChjb25z
dCBEZWJ1Z2dlckNhbGxGcmFtZSYgZGVidWdnZXJDYWxsRnJhbWUpCiB7CiAgICAgaWYgKG1fY2Fs
bGluZ0RlbGVnYXRlKQogICAgICAgICByZXR1cm47CkBAIC0xNTAsMTIgKzE1MCwxMiBAQCB2b2lk
IFdlYlNjcmlwdERlYnVnZ2VyOjpjYWxsRXZlbnQoY29uc3QgCiAgICAgV2ViVmlldyAqd2ViVmll
dyA9IFt3ZWJGcmFtZSB3ZWJWaWV3XTsKICAgICBXZWJTY3JpcHREZWJ1Z0RlbGVnYXRlSW1wbGVt
ZW50YXRpb25DYWNoZSogaW1wbGVtZW50YXRpb25zID0gV2ViVmlld0dldFNjcmlwdERlYnVnRGVs
ZWdhdGVJbXBsZW1lbnRhdGlvbnMod2ViVmlldyk7CiAgICAgaWYgKGltcGxlbWVudGF0aW9ucy0+
ZGlkRW50ZXJDYWxsRnJhbWVGdW5jKQotICAgICAgICBDYWxsU2NyaXB0RGVidWdEZWxlZ2F0ZShp
bXBsZW1lbnRhdGlvbnMtPmRpZEVudGVyQ2FsbEZyYW1lRnVuYywgd2ViVmlldywgQHNlbGVjdG9y
KHdlYlZpZXc6ZGlkRW50ZXJDYWxsRnJhbWU6c291cmNlSWQ6bGluZTpmb3JXZWJGcmFtZTopLCBt
X3RvcENhbGxGcmFtZS5nZXQoKSwgc291cmNlSUQsIGxpbmVOdW1iZXIsIHdlYkZyYW1lKTsKKyAg
ICAgICAgQ2FsbFNjcmlwdERlYnVnRGVsZWdhdGUoaW1wbGVtZW50YXRpb25zLT5kaWRFbnRlckNh
bGxGcmFtZUZ1bmMsIHdlYlZpZXcsIEBzZWxlY3Rvcih3ZWJWaWV3OmRpZEVudGVyQ2FsbEZyYW1l
OnNvdXJjZUlkOmxpbmU6Zm9yV2ViRnJhbWU6KSwgbV90b3BDYWxsRnJhbWUuZ2V0KCksIGRlYnVn
Z2VyQ2FsbEZyYW1lLnNvdXJjZUlkKCksIGRlYnVnZ2VyQ2FsbEZyYW1lLmxpbmUoKSwgd2ViRnJh
bWUpOwogCiAgICAgbV9jYWxsaW5nRGVsZWdhdGUgPSBmYWxzZTsKIH0KIAotdm9pZCBXZWJTY3Jp
cHREZWJ1Z2dlcjo6YXRTdGF0ZW1lbnQoY29uc3QgRGVidWdnZXJDYWxsRnJhbWUmIGRlYnVnZ2Vy
Q2FsbEZyYW1lLCBpbnRwdHJfdCBzb3VyY2VJRCwgaW50IGxpbmVOdW1iZXIsIGludCBjb2x1bW5O
dW1iZXIpCit2b2lkIFdlYlNjcmlwdERlYnVnZ2VyOjphdFN0YXRlbWVudChjb25zdCBEZWJ1Z2dl
ckNhbGxGcmFtZSYgZGVidWdnZXJDYWxsRnJhbWUpCiB7CiAgICAgaWYgKG1fY2FsbGluZ0RlbGVn
YXRlKQogICAgICAgICByZXR1cm47CkBAIC0xNjksMTIgKzE2OSwxMiBAQCB2b2lkIFdlYlNjcmlw
dERlYnVnZ2VyOjphdFN0YXRlbWVudChjb25zCiAKICAgICBXZWJTY3JpcHREZWJ1Z0RlbGVnYXRl
SW1wbGVtZW50YXRpb25DYWNoZSogaW1wbGVtZW50YXRpb25zID0gV2ViVmlld0dldFNjcmlwdERl
YnVnRGVsZWdhdGVJbXBsZW1lbnRhdGlvbnMod2ViVmlldyk7CiAgICAgaWYgKGltcGxlbWVudGF0
aW9ucy0+d2lsbEV4ZWN1dGVTdGF0ZW1lbnRGdW5jKQotICAgICAgICBDYWxsU2NyaXB0RGVidWdE
ZWxlZ2F0ZShpbXBsZW1lbnRhdGlvbnMtPndpbGxFeGVjdXRlU3RhdGVtZW50RnVuYywgd2ViVmll
dywgQHNlbGVjdG9yKHdlYlZpZXc6d2lsbEV4ZWN1dGVTdGF0ZW1lbnQ6c291cmNlSWQ6bGluZTpm
b3JXZWJGcmFtZTopLCBtX3RvcENhbGxGcmFtZS5nZXQoKSwgc291cmNlSUQsIGxpbmVOdW1iZXIs
IHdlYkZyYW1lKTsKKyAgICAgICAgQ2FsbFNjcmlwdERlYnVnRGVsZWdhdGUoaW1wbGVtZW50YXRp
b25zLT53aWxsRXhlY3V0ZVN0YXRlbWVudEZ1bmMsIHdlYlZpZXcsIEBzZWxlY3Rvcih3ZWJWaWV3
OndpbGxFeGVjdXRlU3RhdGVtZW50OnNvdXJjZUlkOmxpbmU6Zm9yV2ViRnJhbWU6KSwgbV90b3BD
YWxsRnJhbWUuZ2V0KCksIGRlYnVnZ2VyQ2FsbEZyYW1lLnNvdXJjZUlkKCksIGRlYnVnZ2VyQ2Fs
bEZyYW1lLmxpbmUoKSwgd2ViRnJhbWUpOwogCiAgICAgbV9jYWxsaW5nRGVsZWdhdGUgPSBmYWxz
ZTsKIH0KIAotdm9pZCBXZWJTY3JpcHREZWJ1Z2dlcjo6cmV0dXJuRXZlbnQoY29uc3QgRGVidWdn
ZXJDYWxsRnJhbWUmIGRlYnVnZ2VyQ2FsbEZyYW1lLCBpbnRwdHJfdCBzb3VyY2VJRCwgaW50IGxp
bmVOdW1iZXIsIGludCBjb2x1bW5OdW1iZXIpCit2b2lkIFdlYlNjcmlwdERlYnVnZ2VyOjpyZXR1
cm5FdmVudChjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYgZGVidWdnZXJDYWxsRnJhbWUpCiB7CiAg
ICAgaWYgKG1fY2FsbGluZ0RlbGVnYXRlKQogICAgICAgICByZXR1cm47CkBAIC0xODgsNyArMTg4
LDcgQEAgdm9pZCBXZWJTY3JpcHREZWJ1Z2dlcjo6cmV0dXJuRXZlbnQoY29ucwogCiAgICAgV2Vi
U2NyaXB0RGVidWdEZWxlZ2F0ZUltcGxlbWVudGF0aW9uQ2FjaGUqIGltcGxlbWVudGF0aW9ucyA9
IFdlYlZpZXdHZXRTY3JpcHREZWJ1Z0RlbGVnYXRlSW1wbGVtZW50YXRpb25zKHdlYlZpZXcpOwog
ICAgIGlmIChpbXBsZW1lbnRhdGlvbnMtPndpbGxMZWF2ZUNhbGxGcmFtZUZ1bmMpCi0gICAgICAg
IENhbGxTY3JpcHREZWJ1Z0RlbGVnYXRlKGltcGxlbWVudGF0aW9ucy0+d2lsbExlYXZlQ2FsbEZy
YW1lRnVuYywgd2ViVmlldywgQHNlbGVjdG9yKHdlYlZpZXc6d2lsbExlYXZlQ2FsbEZyYW1lOnNv
dXJjZUlkOmxpbmU6Zm9yV2ViRnJhbWU6KSwgbV90b3BDYWxsRnJhbWUuZ2V0KCksIHNvdXJjZUlE
LCBsaW5lTnVtYmVyLCB3ZWJGcmFtZSk7CisgICAgICAgIENhbGxTY3JpcHREZWJ1Z0RlbGVnYXRl
KGltcGxlbWVudGF0aW9ucy0+d2lsbExlYXZlQ2FsbEZyYW1lRnVuYywgd2ViVmlldywgQHNlbGVj
dG9yKHdlYlZpZXc6d2lsbExlYXZlQ2FsbEZyYW1lOnNvdXJjZUlkOmxpbmU6Zm9yV2ViRnJhbWU6
KSwgbV90b3BDYWxsRnJhbWUuZ2V0KCksIGRlYnVnZ2VyQ2FsbEZyYW1lLnNvdXJjZUlkKCksIGRl
YnVnZ2VyQ2FsbEZyYW1lLmxpbmUoKSwgd2ViRnJhbWUpOwogCiAgICAgW21fdG9wQ2FsbEZyYW1l
LmdldCgpIF9jbGVhckRlYnVnZ2VyQ2FsbEZyYW1lXTsKICAgICBtX3RvcENhbGxGcmFtZSA9IFtt
X3RvcENhbGxGcmFtZS5nZXQoKSBjYWxsZXJdOwpAQCAtMTk2LDcgKzE5Niw3IEBAIHZvaWQgV2Vi
U2NyaXB0RGVidWdnZXI6OnJldHVybkV2ZW50KGNvbnMKICAgICBtX2NhbGxpbmdEZWxlZ2F0ZSA9
IGZhbHNlOwogfQogCi12b2lkIFdlYlNjcmlwdERlYnVnZ2VyOjpleGNlcHRpb24oY29uc3QgRGVi
dWdnZXJDYWxsRnJhbWUmIGRlYnVnZ2VyQ2FsbEZyYW1lLCBpbnRwdHJfdCBzb3VyY2VJRCwgaW50
IGxpbmVOdW1iZXIsIGludCBjb2x1bW5OdW1iZXIsIGJvb2wgaGFzSGFuZGxlcikKK3ZvaWQgV2Vi
U2NyaXB0RGVidWdnZXI6OmV4Y2VwdGlvbihjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYgZGVidWdn
ZXJDYWxsRnJhbWUsIGJvb2wgaGFzSGFuZGxlcikKIHsKICAgICBpZiAobV9jYWxsaW5nRGVsZWdh
dGUpCiAgICAgICAgIHJldHVybjsKQEAgLTIxMCwyNSArMjEwLDI1IEBAIHZvaWQgV2ViU2NyaXB0
RGVidWdnZXI6OmV4Y2VwdGlvbihjb25zdCAKICAgICBXZWJTY3JpcHREZWJ1Z0RlbGVnYXRlSW1w
bGVtZW50YXRpb25DYWNoZSogY2FjaGUgPSBXZWJWaWV3R2V0U2NyaXB0RGVidWdEZWxlZ2F0ZUlt
cGxlbWVudGF0aW9ucyh3ZWJWaWV3KTsKICAgICBpZiAoY2FjaGUtPmV4Y2VwdGlvbldhc1JhaXNl
ZEZ1bmMpIHsKICAgICAgICAgaWYgKGNhY2hlLT5leGNlcHRpb25XYXNSYWlzZWRFeHBlY3RzSGFz
SGFuZGxlckZsYWcpCi0gICAgICAgICAgICBDYWxsU2NyaXB0RGVidWdEZWxlZ2F0ZShjYWNoZS0+
ZXhjZXB0aW9uV2FzUmFpc2VkRnVuYywgd2ViVmlldywgQHNlbGVjdG9yKHdlYlZpZXc6ZXhjZXB0
aW9uV2FzUmFpc2VkOmhhc0hhbmRsZXI6c291cmNlSWQ6bGluZTpmb3JXZWJGcmFtZTopLCBtX3Rv
cENhbGxGcmFtZS5nZXQoKSwgaGFzSGFuZGxlciwgc291cmNlSUQsIGxpbmVOdW1iZXIsIHdlYkZy
YW1lKTsKKyAgICAgICAgICAgIENhbGxTY3JpcHREZWJ1Z0RlbGVnYXRlKGNhY2hlLT5leGNlcHRp
b25XYXNSYWlzZWRGdW5jLCB3ZWJWaWV3LCBAc2VsZWN0b3Iod2ViVmlldzpleGNlcHRpb25XYXNS
YWlzZWQ6aGFzSGFuZGxlcjpzb3VyY2VJZDpsaW5lOmZvcldlYkZyYW1lOiksIG1fdG9wQ2FsbEZy
YW1lLmdldCgpLCBoYXNIYW5kbGVyLCBkZWJ1Z2dlckNhbGxGcmFtZS5zb3VyY2VJZCgpLCBkZWJ1
Z2dlckNhbGxGcmFtZS5saW5lKCksIHdlYkZyYW1lKTsKICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgQ2FsbFNjcmlwdERlYnVnRGVsZWdhdGUoY2FjaGUtPmV4Y2VwdGlvbldhc1JhaXNlZEZ1bmMs
IHdlYlZpZXcsIEBzZWxlY3Rvcih3ZWJWaWV3OmV4Y2VwdGlvbldhc1JhaXNlZDpzb3VyY2VJZDps
aW5lOmZvcldlYkZyYW1lOiksIG1fdG9wQ2FsbEZyYW1lLmdldCgpLCBzb3VyY2VJRCwgbGluZU51
bWJlciwgd2ViRnJhbWUpOworICAgICAgICAgICAgQ2FsbFNjcmlwdERlYnVnRGVsZWdhdGUoY2Fj
aGUtPmV4Y2VwdGlvbldhc1JhaXNlZEZ1bmMsIHdlYlZpZXcsIEBzZWxlY3Rvcih3ZWJWaWV3OmV4
Y2VwdGlvbldhc1JhaXNlZDpzb3VyY2VJZDpsaW5lOmZvcldlYkZyYW1lOiksIG1fdG9wQ2FsbEZy
YW1lLmdldCgpLCBkZWJ1Z2dlckNhbGxGcmFtZS5zb3VyY2VJZCgpLCBkZWJ1Z2dlckNhbGxGcmFt
ZS5saW5lKCksIHdlYkZyYW1lKTsKICAgICB9CiAKICAgICBtX2NhbGxpbmdEZWxlZ2F0ZSA9IGZh
bHNlOwogfQogCi12b2lkIFdlYlNjcmlwdERlYnVnZ2VyOjp3aWxsRXhlY3V0ZVByb2dyYW0oY29u
c3QgRGVidWdnZXJDYWxsRnJhbWUmIGRlYnVnZ2VyQ2FsbEZyYW1lLCBpbnRwdHJfdCBzb3VyY2VJ
RCwgaW50IGxpbmVubywgaW50IGNvbHVtbm5vKQordm9pZCBXZWJTY3JpcHREZWJ1Z2dlcjo6d2ls
bEV4ZWN1dGVQcm9ncmFtKGNvbnN0IERlYnVnZ2VyQ2FsbEZyYW1lJiBkZWJ1Z2dlckNhbGxGcmFt
ZSkKIHsKLSAgICBjYWxsRXZlbnQoZGVidWdnZXJDYWxsRnJhbWUsIHNvdXJjZUlELCBsaW5lbm8s
IGNvbHVtbm5vKTsKKyAgICBjYWxsRXZlbnQoZGVidWdnZXJDYWxsRnJhbWUpOwogfQogCi12b2lk
IFdlYlNjcmlwdERlYnVnZ2VyOjpkaWRFeGVjdXRlUHJvZ3JhbShjb25zdCBEZWJ1Z2dlckNhbGxG
cmFtZSYgZGVidWdnZXJDYWxsRnJhbWUsIGludHB0cl90IHNvdXJjZUlELCBpbnQgbGluZW5vLCBp
bnQgY29sdW1ubm8pCit2b2lkIFdlYlNjcmlwdERlYnVnZ2VyOjpkaWRFeGVjdXRlUHJvZ3JhbShj
b25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYgZGVidWdnZXJDYWxsRnJhbWUpCiB7Ci0gICAgcmV0dXJu
RXZlbnQoZGVidWdnZXJDYWxsRnJhbWUsIHNvdXJjZUlELCBsaW5lbm8sIGNvbHVtbm5vKTsKKyAg
ICByZXR1cm5FdmVudChkZWJ1Z2dlckNhbGxGcmFtZSk7CiB9CiAKLXZvaWQgV2ViU2NyaXB0RGVi
dWdnZXI6OmRpZFJlYWNoQnJlYWtwb2ludChjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYsIGludHB0
cl90LCBpbnQsIGludCkKK3ZvaWQgV2ViU2NyaXB0RGVidWdnZXI6OmRpZFJlYWNoQnJlYWtwb2lu
dChjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYpCiB7CiAgICAgcmV0dXJuOwogfQo=
</data>
<flag name="review"
          id="233488"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>