<?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>122847</bug_id>
          
          <creation_ts>2013-10-15 11:12:03 -0700</creation_ts>
          <short_desc>Enable DFG for the Debugger and Profiler</short_desc>
          <delta_ts>2014-01-23 15:11:20 -0800</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>122836</dependson>
    
    <dependson>122844</dependson>
          
          <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>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>940042</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-10-15 11:12:03 -0700</bug_when>
    <thetext>With https://bugs.webkit.org/show_bug.cgi?id=122844, we no longer need to constantly check if we&apos;re stepping when the Debugger is in Running mode.  Hence, we should be able to enable the DFG.  However, there are a few changes that still need to be made:

1. Prevent a function from being DFG compiled if there&apos;s a breakpoint set in it.
2. Prevent a function from being inlined by the DFG if there&apos;s a breakpoint set in it.

3. When in Stepping mode and stepping into the a function call, in the call slow path, the Debugger should de-opt the callee if it is DFG compiled and mark is as temporarily not compilable and inlineable by the DFG.

4. When in Stepping mode and stepping out (i.e. returning to a caller),  OSR de-opt the caller if it is DFG compiled and mark is as temporarily not compilable and inlineable by the DFG.

The philosophy here is that script that is being debugged will not run DFG generated code.  If we&apos;re done stepping through that script, the DFG may optimize it again thereafter if needed provided that there is not a breakpoint set in it.

This approach has several benefits:

1. the DFG compiled code like it normally does.  op_debugs are phantom nodes.
2. the Debugger is simpler: no need to support breakpoints in the DFG compiled code.

Hence, we should be able to performance get near parity with the Debugger not enabled when we&apos;re not in Stepping mode.  The assumption here is that there are no breakpoints set in fast path functions.  If there are, then we&apos;ll get baseline JIT speeds for those functions. 

The challenging part:

1. We need to be able OSR de-opt a DFG function at the point where we return to it.
    1.1 This includes the case where the caller frame is an inlined frame.

If it is too difficult to support OSR de-opt of inlined frames on returns, then we&apos;ll only enable the DFG without inlining for a first pass.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>940043</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2013-10-15 11:12:12 -0700</bug_when>
    <thetext>&lt;rdar://problem/15232637&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>971315</commentid>
    <comment_count>2</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-01-23 13:28:40 -0800</bug_when>
    <thetext>We&apos;re changing strategy from the one previously documented.  Here&apos;s the current strategy for this first step in turning on the DFG:

We will implement DFG op_debug as a series of 3 checks:
 1. Check if the debugger pointer is non-null.  This is needed in case the debugger has been detached but the DFG code is still running on the stack.
2. Check if Debugger::m_shouldPause is true.
3. Check if CodeBlock::m_numBreakpoints is non-zero.

These are the same 3 checks done in the LLINT and baselineJIT.  But unlike the LLINT and baselineJIT, these DFG checks are implemented as speculationChecks.  If the check fails, we OSR exit to the baselineJIT and let it do the work of servicing the op_debug callback.

Stepping through code in the debugger would work the same way.  The top function being debugged has to be a LLINT or baselineJIT function because we would have OSR exited if there is a breakpoint in that function.  When we step out of that function to its caller, we expect that the caller will call back to the debugger at the next op_debug.  If the caller function is a DFG function, the op_debug site will fail its speculation check on Debugger::m_shouldPause and deopt into a baselineJIT function.  Execution continues from there as usual, and the debugger gets its callback.

For the profile, op_profile_will_call and op_profile_did_call are implemented as simple runtime calls to service the profiler.

With this patch, Octane performance with the WebInspector open (with or without breakpoints set) jump from ~2000 to ~2500 (25% progression). YMMV.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>971317</commentid>
    <comment_count>3</comment_count>
      <attachid>222022</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-01-23 13:30:15 -0800</bug_when>
    <thetext>Created attachment 222022
the patch.

This patch has passed all layout tests on X86_64.  It is currently being built and tested on 32-bit X86.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>971334</commentid>
    <comment_count>4</comment_count>
      <attachid>222022</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-01-23 14:04:23 -0800</bug_when>
    <thetext>Comment on attachment 222022
the patch.

r=me

The next two improvements you should make are:

(1) Remove the speculation checks for debugger and &quot;shouldPause&quot;, and change the debugger to add a breakpoint to every code block when it starts stepping, and remove them all when it stops stepping.

(2) Change the *_profile_* opcodes to speculation check a boolean that indicates whether a profiler is currently recording. (i.e., an attached profiler that is not currently recording should take the fast path.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>971338</commentid>
    <comment_count>5</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-01-23 14:19:27 -0800</bug_when>
    <thetext>(3) Change the speculation checks into watchpoints.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>971359</commentid>
    <comment_count>6</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-01-23 15:11:20 -0800</bug_when>
    <thetext>Thanks.  Landed in r162652: &lt;http://trac.webkit.org/r162652&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>222022</attachid>
            <date>2014-01-23 13:30:15 -0800</date>
            <delta_ts>2014-01-23 14:04:23 -0800</delta_ts>
            <desc>the patch.</desc>
            <filename>bug-122847.patch</filename>
            <type>text/plain</type>
            <size>23963</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYyNjMzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcxIEBA
CisyMDE0LTAxLTIzICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBF
bmFibGUgREZHIGZvciB0aGUgRGVidWdnZXIgYW5kIFByb2ZpbGVyLgorICAgICAgICA8aHR0cHM6
Ly93ZWJraXQub3JnL2IvMTIyODQ3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEluIHRoaXMgcGF0Y2gsIHdlIGltcGxlbWVudCBERkcgb3BfZGVidWcg
YXMgYSBzZXJpZXMgb2YgMyBjaGVja3M6CisgICAgICAgIDEuIENoZWNrIGlmIHRoZSBkZWJ1Z2dl
ciBwb2ludGVyIGlzIG5vbi1udWxsLiBUaGlzIGlzIG5lZWRlZCBpbiBjYXNlCisgICAgICAgICAg
IHRoZSBkZWJ1Z2dlciBoYXMgYmVlbiBkZXRhY2hlZCBidXQgdGhlIERGRyBjb2RlIGlzIHN0aWxs
IHJ1bm5pbmcKKyAgICAgICAgICAgb24gdGhlIHN0YWNrLgorICAgICAgICAyLiBDaGVjayBpZiBE
ZWJ1Z2dlcjo6bV9zaG91bGRQYXVzZSBpcyB0cnVlLgorICAgICAgICAzLiBDaGVjayBpZiBDb2Rl
QmxvY2s6Om1fbnVtQnJlYWtwb2ludHMgaXMgbm9uLXplcm8uCisKKyAgICAgICAgVGhlc2UgYXJl
IHRoZSBzYW1lIDMgY2hlY2tzIGRvbmUgaW4gdGhlIExMSU5UIGFuZCBiYXNlbGluZUpJVC4gQnV0
IHVubGlrZQorICAgICAgICB0aGUgTExJTlQgYW5kIGJhc2VsaW5lSklULCB0aGVzZSBERkcgY2hl
Y2tzIGFyZSBpbXBsZW1lbnRlZCBhcworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrcy4gSWYgdGhl
IGNoZWNrIGZhaWxzLCB3ZSBPU1IgZXhpdCB0byB0aGUgYmFzZWxpbmVKSVQgYW5kCisgICAgICAg
IGxldCBpdCBkbyB0aGUgd29yayBvZiBzZXJ2aWNpbmcgdGhlIG9wX2RlYnVnIGNhbGxiYWNrLgor
CisgICAgICAgIFN0ZXBwaW5nIHRocm91Z2ggY29kZSBpbiB0aGUgZGVidWdnZXIgd291bGQgd29y
ayB0aGUgc2FtZSB3YXkuIFRoZSB0b3AKKyAgICAgICAgZnVuY3Rpb24gYmVpbmcgZGVidWdnZWQg
aGFzIHRvIGJlIGEgTExJTlQgb3IgYmFzZWxpbmVKSVQgZnVuY3Rpb24gYmVjYXVzZQorICAgICAg
ICB3ZSB3b3VsZCBoYXZlIE9TUiBleGl0ZWQgaWYgdGhlcmUgaXMgYSBicmVha3BvaW50IGluIHRo
YXQgZnVuY3Rpb24uIFdoZW4KKyAgICAgICAgd2Ugc3RlcCBvdXQgb2YgdGhhdCBmdW5jdGlvbiB0
byBpdHMgY2FsbGVyLCB3ZSBleHBlY3QgdGhhdCB0aGUgY2FsbGVyIHdpbGwKKyAgICAgICAgY2Fs
bCBiYWNrIHRvIHRoZSBkZWJ1Z2dlciBhdCB0aGUgbmV4dCBvcF9kZWJ1Zy4gSWYgdGhlIGNhbGxl
ciBmdW5jdGlvbiBpcworICAgICAgICBhIERGRyBmdW5jdGlvbiwgdGhlIG9wX2RlYnVnIHNpdGUg
d2lsbCBmYWlsIGl0cyBzcGVjdWxhdGlvbiBjaGVjayBvbgorICAgICAgICBEZWJ1Z2dlcjo6bV9z
aG91bGRQYXVzZSBhbmQgZGVvcHQgaW50byBhIGJhc2VsaW5lSklUIGZ1bmN0aW9uLiBFeGVjdXRp
b24KKyAgICAgICAgY29udGludWVzIGZyb20gdGhlcmUgYXMgdXN1YWwsIGFuZCB0aGUgZGVidWdn
ZXIgZ2V0cyBpdHMgY2FsbGJhY2suCisKKyAgICAgICAgRm9yIHRoZSBwcm9maWxlLCBvcF9wcm9m
aWxlX3dpbGxfY2FsbCBhbmQgb3BfcHJvZmlsZV9kaWRfY2FsbCBhcmUKKyAgICAgICAgaW1wbGVt
ZW50ZWQgYXMgc2ltcGxlIHJ1bnRpbWUgY2FsbHMgdG8gc2VydmljZSB0aGUgcHJvZmlsZXIuCisK
KyAgICAgICAgV2l0aCB0aGlzIHBhdGNoLCBPY3RhbmUgcGVyZm9ybWFuY2Ugd2l0aCB0aGUgV2Vi
SW5zcGVjdG9yIG9wZW4ganVtcCBmcm9tCisgICAgICAgIH4yMDAwIHRvIH4yNTAwICgyNSUgcHJv
Z3Jlc3Npb24pLgorCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6bnVtQnJlYWtwb2ludHNBZGRyZXNzKToKKyAgICAgICAgKiBieXRlY29k
ZS9FeGl0S2luZC5jcHA6CisgICAgICAgIChKU0M6OmV4aXRLaW5kVG9TdHJpbmcpOgorICAgICAg
ICAqIGJ5dGVjb2RlL0V4aXRLaW5kLmg6CisgICAgICAgICogZGVidWdnZXIvRGVidWdnZXIuY3Bw
OgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6dG9nZ2xlQnJlYWtwb2ludCk6CisgICAgICAgIC0g
cmVtb3ZlZCBhbiBvYnNvbGV0ZSBhc3NlcnRpb24uIFRoZSBkZWJ1Z2dlciBjYW4gbm93IGhhbmRs
ZSBERkcKKyAgICAgICAgICBDb2RlQmxvY2tzIHRvby4KKyAgICAgICAgKiBkZWJ1Z2dlci9EZWJ1
Z2dlci5oOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oOgor
ICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+
OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAg
ICogZGZnL0RGR0NhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Y2FwYWJpbGl0
eUxldmVsKToKKyAgICAgICAgKiBkZmcvREZHQ2xvYmJlcml6ZS5oOgorICAgICAgICAoSlNDOjpE
Rkc6OmNsb2JiZXJpemUpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdO
b2RlVHlwZS5oOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U6OnByb3Bh
Z2F0ZSk6CisgICAgICAgICogZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6
REZHOjpzYWZlVG9FeGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FsbE9wZXJhdGlvbik6CisgICAg
ICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNHbG9i
YWxPYmplY3Q6OmRlYnVnZ2VyQWRkcmVzcyk6CisKIDIwMTQtMDEtMjIgIEJyZW50IEZ1bGdoYW0g
IDxiZnVsZ2hhbUBhcHBsZS5jb20+CiAKICAgICAgICAgW1dpbl0gVXBkYXRlIHByb2plY3QgYW5k
IHNvbHV0aW9uIGZpbGVzIGZvciA2NC1iaXQgYnVpbGRzLgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTYyNTk5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC04
NzMsNiArODczLDcgQEAgcHVibGljOgogCiAgICAgaW50IG51bUJyZWFrcG9pbnRzKCkgY29uc3Qg
eyByZXR1cm4gbV9udW1CcmVha3BvaW50czsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3QgbnVtQnJl
YWtwb2ludHNPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX251
bUJyZWFrcG9pbnRzKTsgfQorICAgIHZvaWQqIG51bUJyZWFrcG9pbnRzQWRkcmVzcygpIHsgcmV0
dXJuICZtX251bUJyZWFrcG9pbnRzOyB9CiAKICAgICB2b2lkIGFkZEJyZWFrcG9pbnQoaW50IG51
bUJyZWFrcG9pbnRzKSB7IG1fbnVtQnJlYWtwb2ludHMgKz0gbnVtQnJlYWtwb2ludHM7IH0KICAg
ICB2b2lkIHJlbW92ZUJyZWFrcG9pbnQoaW50IG51bUJyZWFrcG9pbnRzKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRLaW5kLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhpdEtpbmQuY3BwCShyZXZpc2lvbiAxNjI1OTkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhpdEtpbmQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIw
MTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC03OCw2ICs3OCw4IEBAIGNvbnN0IGNoYXIqIGV4aXRLaW5kVG9T
dHJpbmcoRXhpdEtpbmQga2kKICAgICAgICAgcmV0dXJuICJVbmNvdW50YWJsZUludmFsaWRhdGlv
biI7CiAgICAgY2FzZSBXYXRjaGRvZ1RpbWVyRmlyZWQ6CiAgICAgICAgIHJldHVybiAiV2F0Y2hk
b2dUaW1lckZpcmVkIjsKKyAgICBjYXNlIERlYnVnZ2VyRXZlbnQ6CisgICAgICAgIHJldHVybiAi
RGVidWdnZXJFdmVudCI7CiAgICAgfQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgcmV0dXJuICJVbmtub3duIjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9FeGl0S2luZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9FeGl0S2luZC5oCShyZXZpc2lvbiAxNjI1OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvRXhpdEtpbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTAsNyAr
NTAsOCBAQCBlbnVtIEV4aXRLaW5kIHsKICAgICBVbmNvdW50YWJsZSwgLy8gV2UgZXhpdGVkIGZv
ciBub25lIG9mIHRoZSBhYm92ZSByZWFzb25zLCBhbmQgd2Ugc2hvdWxkIG5vdCBjb3VudCBpdC4g
TW9zdCB1c2VzIG9mIHRoaXMgc2hvdWxkIGJlIHZpZXdlZCBhcyBhIEZJWE1FLgogICAgIFVuY291
bnRhYmxlSW52YWxpZGF0aW9uLCAvLyBXZSBleGl0ZWQgYmVjYXVzZSB0aGUgY29kZSBibG9jayB3
YXMgaW52YWxpZGF0ZWQ7IHRoaXMgbWVhbnMgdGhhdCB3ZSd2ZSBhbHJlYWR5IGNvdW50ZWQgdGhl
IHJlYXNvbnMgd2h5IHRoZSBjb2RlIGJsb2NrIHdhcyBpbnZhbGlkYXRlZC4KICAgICBVbmNvdW50
YWJsZVdhdGNocG9pbnQsIC8vIFdlIGV4aXRlZCBiZWNhdXNlIG9mIGEgd2F0Y2hwb2ludCwgd2hp
Y2ggaXNuJ3QgY291bnRlZCBiZWNhdXNlIHdhdGNocG9pbnRzIGRvIHRyYWNraW5nIHRoZW1zZWx2
ZXMuCi0gICAgV2F0Y2hkb2dUaW1lckZpcmVkIC8vIFdlIGV4aXRlZCBiZWNhdXNlIHdlIG5lZWQg
dG8gc2VydmljZSB0aGUgd2F0Y2hkb2cgdGltZXIuCisgICAgV2F0Y2hkb2dUaW1lckZpcmVkLCAv
LyBXZSBleGl0ZWQgYmVjYXVzZSB3ZSBuZWVkIHRvIHNlcnZpY2UgdGhlIHdhdGNoZG9nIHRpbWVy
LgorICAgIERlYnVnZ2VyRXZlbnQgLy8gV2UgZXhpdGVkIGJlY2F1c2Ugd2UgbmVlZCB0byBzZXJ2
aWNlIHRoZSBkZWJ1Z2dlci4KIH07CiAKIGNvbnN0IGNoYXIqIGV4aXRLaW5kVG9TdHJpbmcoRXhp
dEtpbmQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIu
Y3BwCShyZXZpc2lvbiAxNjI1OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIv
RGVidWdnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTEsOSArMjExLDYgQEAgdm9pZCBEZWJ1
Z2dlcjo6dW5yZWdpc3RlckNvZGVCbG9jayhDb2RlQgogCiB2b2lkIERlYnVnZ2VyOjp0b2dnbGVC
cmVha3BvaW50KENvZGVCbG9jayogY29kZUJsb2NrLCBCcmVha3BvaW50JiBicmVha3BvaW50LCBC
cmVha3BvaW50U3RhdGUgZW5hYmxlZE9yTm90KQogewotICAgIEFTU0VSVChjb2RlQmxvY2stPmpp
dENvZGUoKS0+aml0VHlwZSgpID09IEpJVENvZGU6OkludGVycHJldGVyVGh1bmsKLSAgICAgICAg
fHwgY29kZUJsb2NrLT5qaXRDb2RlKCktPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJ
VCk7Ci0KICAgICBTY3JpcHRFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gY29kZUJsb2NrLT5vd25l
ckV4ZWN1dGFibGUoKTsKIAogICAgIFNvdXJjZUlEIHNvdXJjZUlEID0gc3RhdGljX2Nhc3Q8U291
cmNlSUQ+KGV4ZWN1dGFibGUtPnNvdXJjZUlEKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmgJKHJldmlzaW9uIDE2MjU5OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1
MCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgc2hvdWxkUGF1c2UoKSBjb25zdCB7IHJldHVybiBt
X3Nob3VsZFBhdXNlOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBzaG91bGRQYXVzZU9mZnNldCgp
IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihEZWJ1Z2dlciwgbV9zaG91bGRQYXVzZSk7IH0KKyAg
ICB2b2lkKiBzaG91bGRQYXVzZUFkZHJlc3MoKSB7IHJldHVybiAmbV9zaG91bGRQYXVzZTsgfQog
CiAgICAgSlNDOjpEZWJ1Z2dlckNhbGxGcmFtZSogY3VycmVudERlYnVnZ2VyQ2FsbEZyYW1lKCkg
Y29uc3Q7CiAgICAgYm9vbCBoYXNIYW5kbGVyRm9yRXhjZXB0aW9uQ2FsbGJhY2soKSBjb25zdApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5s
aW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJh
Y3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMTYyNTk5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0xNzM2LDcgKzE3MzYsNiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RT
dGF0ZVR5CiAgICAgICAgIAogICAgIGNhc2UgRmx1c2g6CiAgICAgY2FzZSBQaGFudG9tTG9jYWw6
Ci0gICAgY2FzZSBCcmVha3BvaW50OgogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAg
IGNhc2UgQ2FsbDoKQEAgLTE3NTQsMTEgKzE3NTMsMTQgQEAgYm9vbCBBYnN0cmFjdEludGVycHJl
dGVyPEFic3RyYWN0U3RhdGVUeQogICAgIGNhc2UgSW52YWxpZGF0aW9uUG9pbnQ6CiAgICAgICAg
IG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCisK
KyAgICBjYXNlIEJyZWFrcG9pbnQ6CiAgICAgY2FzZSBDaGVja1dhdGNoZG9nVGltZXI6CiAgICAg
ICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
CisKKyAgICBjYXNlIFByb2ZpbGVXaWxsQ2FsbDoKKyAgICBjYXNlIFByb2ZpbGVEaWRDYWxsOgog
ICAgIGNhc2UgUGhhbnRvbToKICAgICBjYXNlIENoZWNrOgogICAgIGNhc2UgQ291bnRFeGVjdXRp
b246CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFy
c2VyLmNwcAkocmV2aXNpb24gMTYyNTk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTIxNDYsMTEgKzIxNDYsMjIgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1
bnNpZ25lZAogCiAgICAgICAgIC8vID09PSBNaXNjIG9wZXJhdGlvbnMgPT09CiAKLSNpZiBFTkFC
TEUoREVCVUdfV0lUSF9CUkVBS1BPSU5UKQogICAgICAgICBjYXNlIG9wX2RlYnVnOgogICAgICAg
ICAgICAgYWRkVG9HcmFwaChCcmVha3BvaW50KTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9w
X2RlYnVnKTsKLSNlbmRpZgorCisgICAgICAgIGNhc2Ugb3BfcHJvZmlsZV93aWxsX2NhbGw6IHsK
KyAgICAgICAgICAgIE5vZGUqIHByb2ZpbGUgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKTsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoUHJvZmls
ZVdpbGxDYWxsLCBwcm9maWxlKTsKKyAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3Byb2ZpbGVf
d2lsbF9jYWxsKTsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2Ugb3BfcHJvZmlsZV9kaWRfY2Fs
bDogeworICAgICAgICAgICAgTm9kZSogcHJvZmlsZSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpOworICAgICAgICAgICAgYWRkVG9HcmFwaChQ
cm9maWxlRGlkQ2FsbCwgcHJvZmlsZSk7CisgICAgICAgICAgICBORVhUX09QQ09ERShvcF9wcm9m
aWxlX2RpZF9jYWxsKTsKKyAgICAgICAgfQorCiAgICAgICAgIGNhc2Ugb3BfbW92OiB7CiAgICAg
ICAgICAgICBOb2RlKiBvcCA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9u
WzJdLnUub3BlcmFuZCkpOwogICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwgb3ApOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMTYyNTk5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMsIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0xMDAsOSArMTAwLDkgQEAgQ2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlM
ZXZlbChPcGNvZGVJRAogICAgIGNhc2Ugb3BfbXVsOgogICAgIGNhc2Ugb3BfbW9kOgogICAgIGNh
c2Ugb3BfZGl2OgotI2lmIEVOQUJMRShERUJVR19XSVRIX0JSRUFLUE9JTlQpCiAgICAgY2FzZSBv
cF9kZWJ1ZzoKLSNlbmRpZgorICAgIGNhc2Ugb3BfcHJvZmlsZV93aWxsX2NhbGw6CisgICAgY2Fz
ZSBvcF9wcm9maWxlX2RpZF9jYWxsOgogICAgIGNhc2Ugb3BfbW92OgogICAgIGNhc2Ugb3BfY2Fw
dHVyZWRfbW92OgogICAgIGNhc2Ugb3BfY2hlY2tfaGFzX2luc3RhbmNlOgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDE2MjU5OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0xMzksNyArMTM5LDggQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9k
ZQogICAgIGNhc2UgRmx1c2g6CiAgICAgY2FzZSBQaGFudG9tTG9jYWw6CiAgICAgY2FzZSBTZXRB
cmd1bWVudDoKLSAgICBjYXNlIEJyZWFrcG9pbnQ6CisgICAgY2FzZSBQcm9maWxlV2lsbENhbGw6
CisgICAgY2FzZSBQcm9maWxlRGlkQ2FsbDoKICAgICBjYXNlIFBoYW50b21Bcmd1bWVudHM6CiAg
ICAgY2FzZSBKdW1wOgogICAgIGNhc2UgQnJhbmNoOgpAQCAtNjE5LDYgKzYyMCw3IEBAIHZvaWQg
Y2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgY2xvYmJlcml6ZUZv
ckFsbG9jYXRpb24ocmVhZCwgd3JpdGUpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAorICAg
IGNhc2UgQnJlYWtwb2ludDoKICAgICBjYXNlIENvdW50RXhlY3V0aW9uOgogICAgIGNhc2UgQ2hl
Y2tXYXRjaGRvZ1RpbWVyOgogICAgICAgICByZWFkKEludGVybmFsU3RhdGUpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxNjI1
OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIs
IDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC05OTEsNiArOTkxLDggQEAgcHJpdmF0ZToKICAgICAgICAg
Y2FzZSBOZXdBcnJheUJ1ZmZlcjoKICAgICAgICAgY2FzZSBOZXdSZWdleHA6CiAgICAgICAgIGNh
c2UgQnJlYWtwb2ludDoKKyAgICAgICAgY2FzZSBQcm9maWxlV2lsbENhbGw6CisgICAgICAgIGNh
c2UgUHJvZmlsZURpZENhbGw6CiAgICAgICAgIGNhc2UgSXNVbmRlZmluZWQ6CiAgICAgICAgIGNh
c2UgSXNCb29sZWFuOgogICAgICAgICBjYXNlIElzTnVtYmVyOgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMTYyNTk5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0yMzAsNyArMjMwLDkgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1h
Y3JvKE5ld1JlZ2V4cCwgTm9kZVJlc3VsdEpTKSBcCiAgICAgXAogICAgIC8qIE5vZGVzIGZvciBt
aXNjIG9wZXJhdGlvbnMuICovXAotICAgIG1hY3JvKEJyZWFrcG9pbnQsIE5vZGVNdXN0R2VuZXJh
dGUgfCBOb2RlQ2xvYmJlcnNXb3JsZCkgXAorICAgIG1hY3JvKEJyZWFrcG9pbnQsIE5vZGVNdXN0
R2VuZXJhdGUpIFwKKyAgICBtYWNybyhQcm9maWxlV2lsbENhbGwsIE5vZGVNdXN0R2VuZXJhdGUg
fCBOb2RlQ2xvYmJlcnNXb3JsZCkgXAorICAgIG1hY3JvKFByb2ZpbGVEaWRDYWxsLCBOb2RlTXVz
dEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJzV29ybGQpIFwKICAgICBtYWNybyhDaGVja0hhc0luc3Rh
bmNlLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oSW5zdGFuY2VPZiwgTm9kZVJlc3Vs
dEJvb2xlYW4pIFwKICAgICBtYWNybyhJc1VuZGVmaW5lZCwgTm9kZVJlc3VsdEJvb2xlYW4pIFwK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9u
UGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJl
ZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNjI1OTkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIw
MTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDExLCAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTU0LDYgKzU1NCw4IEBAIHByaXZh
dGU6CiAgICAgICAgIGNhc2UgQnJhbmNoOgogICAgICAgICBjYXNlIFN3aXRjaDoKICAgICAgICAg
Y2FzZSBCcmVha3BvaW50OgorICAgICAgICBjYXNlIFByb2ZpbGVXaWxsQ2FsbDoKKyAgICAgICAg
Y2FzZSBQcm9maWxlRGlkQ2FsbDoKICAgICAgICAgY2FzZSBDaGVja0hhc0luc3RhbmNlOgogICAg
ICAgICBjYXNlIFRocm93UmVmZXJlbmNlRXJyb3I6CiAgICAgICAgIGNhc2UgRm9yY2VPU1JFeGl0
OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJ
KHJldmlzaW9uIDE2MjU5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRv
RXhlY3V0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xOTMsNiArMTkzLDggQEAgYm9vbCBzYWZlVG9FeGVj
dXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdAogICAgIGNhc2UgTmV3QXJyYXlCdWZmZXI6CiAgICAg
Y2FzZSBOZXdSZWdleHA6CiAgICAgY2FzZSBCcmVha3BvaW50OgorICAgIGNhc2UgUHJvZmlsZVdp
bGxDYWxsOgorICAgIGNhc2UgUHJvZmlsZURpZENhbGw6CiAgICAgY2FzZSBDaGVja0hhc0luc3Rh
bmNlOgogICAgIGNhc2UgSW5zdGFuY2VPZjoKICAgICBjYXNlIElzVW5kZWZpbmVkOgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJf
NjQuY3BwCShyZXZpc2lvbiAxNjI1OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMsIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDExIEludGVs
IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAt
MzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkRGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2Vu
ZXJhdG9yLmgiCiAjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkRGR1Nsb3dQ
YXRoR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiRGVidWdnZXIuaCIKICNpbmNsdWRlICJKU0FjdGl2
YXRpb24uaCIKICNpbmNsdWRlICJPYmplY3RQcm90b3R5cGUuaCIKICNpbmNsdWRlICJPcGVyYXRp
b25zLmgiCkBAIC00MjMxLDE0ICs0MjMyLDUxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSogbm9kZSkKICAgICBjYXNlIEZsdXNoOgogICAgICAgICBicmVhazsKIAotICAgIGNh
c2UgQnJlYWtwb2ludDoKLSNpZiBFTkFCTEUoREVCVUdfV0lUSF9CUkVBS1BPSU5UKQotICAgICAg
ICBtX2ppdC5icmVha3BvaW50KCk7Ci0jZWxzZQotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotI2VuZGlmCisgICAgY2FzZSBCcmVha3BvaW50OiB7CisgICAgICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvciht
X2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhp
cyk7CisgICAgICAgIG1faml0LmxvYWRQdHIoZ2xvYmFsT2JqZWN0LT5kZWJ1Z2dlckFkZHJlc3Mo
KSwgdGVtcC5ncHIoKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBE
ZWJ1Z2dlckV2ZW50LCBKU1ZhbHVlUmVncygpLCAwLAorICAgICAgICAgICAgbV9qaXQuYnJhbmNo
VGVzdFB0cihKSVRDb21waWxlcjo6WmVybywgdGVtcC5ncHIoKSkpOworCisgICAgICAgIEFTU0VS
VChnbG9iYWxPYmplY3QtPmhhc0RlYnVnZ2VyKCkpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KAorICAgICAgICAgICAgRGVidWdnZXJFdmVudCwgSlNWYWx1ZVJlZ3MoKSwgMCwKKyAgICAgICAg
ICAgIG1faml0LmJyYW5jaFRlc3Q4KAorICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb25a
ZXJvLAorICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpBYnNvbHV0ZUFkZHJlc3MoZ2xvYmFs
T2JqZWN0LT5kZWJ1Z2dlcigpLT5zaG91bGRQYXVzZUFkZHJlc3MoKSkpKTsKKworICAgICAgICBH
UFJSZWcgbnVtQnJlYWtwb2ludHNHUFIgPSB0ZW1wLmdwcigpOworICAgICAgICBtX2ppdC5sb2Fk
MzIobV9qaXQuY29kZUJsb2NrKCktPm51bUJyZWFrcG9pbnRzQWRkcmVzcygpLCBudW1CcmVha3Bv
aW50c0dQUik7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBEZWJ1Z2dl
ckV2ZW50LCBKU1ZhbHVlUmVncygpLCAwLAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDMy
KEpJVENvbXBpbGVyOjpOb25aZXJvLCBudW1CcmVha3BvaW50c0dQUikpOwogICAgICAgICBicmVh
azsKKyAgICB9CiAgICAgICAgIAorICAgIGNhc2UgUHJvZmlsZVdpbGxDYWxsOiB7CisgICAgICAg
IEpTVmFsdWVPcGVyYW5kIHByb2ZpbGUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBH
UFJSZWcgcHJvZmlsZVRhZ0dQUiA9IHByb2ZpbGUudGFnR1BSKCk7CisgICAgICAgIEdQUlJlZyBw
cm9maWxlUGF5bG9hZEdQUiA9IHByb2ZpbGUucGF5bG9hZEdQUigpOworICAgICAgICBzaWxlbnRT
cGlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Qcm9maWxlV2lsbENhbGwsIHByb2ZpbGVUYWdHUFIsIHByb2ZpbGVQYXlsb2FkR1BS
KTsKKyAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVnKTsKKyAgICAg
ICAgbm9SZXN1bHQobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgUHJv
ZmlsZURpZENhbGw6IHsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgcHJvZmlsZSh0aGlzLCBub2Rl
LT5jaGlsZDEoKSk7CisgICAgICAgIEdQUlJlZyBwcm9maWxlVGFnR1BSID0gcHJvZmlsZS50YWdH
UFIoKTsKKyAgICAgICAgR1BSUmVnIHByb2ZpbGVQYXlsb2FkR1BSID0gcHJvZmlsZS5wYXlsb2Fk
R1BSKCk7CisgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOwor
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblByb2ZpbGVXaWxsQ2FsbCwgcHJvZmlsZVRh
Z0dQUiwgcHJvZmlsZVBheWxvYWRHUFIpOworICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJz
KEludmFsaWRHUFJSZWcpOworICAgICAgICBub1Jlc3VsdChub2RlKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorCiAgICAgY2FzZSBDYWxsOgogICAgIGNhc2UgQ29uc3RydWN0OgogICAgICAgICBl
bWl0Q2FsbChub2RlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTYyNTk5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAy
MDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkRGR0NhbGxBcnJh
eUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5o
IgogI2luY2x1ZGUgIkRGR1Nsb3dQYXRoR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiRGVidWdnZXIu
aCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgogI2luY2x1ZGUgIk9iamVjdFByb3Rv
dHlwZS5oIgogCkBAIC00NTA4LDE0ICs0NTA5LDUwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSogbm9kZSkKICAgICBjYXNlIEZsdXNoOgogICAgICAgICBicmVhazsKIAotICAg
IGNhc2UgQnJlYWtwb2ludDoKLSNpZiBFTkFCTEUoREVCVUdfV0lUSF9CUkVBS1BPSU5UKQotICAg
ICAgICBtX2ppdC5icmVha3BvaW50KCk7Ci0jZWxzZQotICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotI2VuZGlmCisgICAgY2FzZSBCcmVha3BvaW50OiB7CisgICAgICAgIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZv
cihtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjaygK
KyAgICAgICAgICAgIERlYnVnZ2VyRXZlbnQsIEpTVmFsdWVSZWdzKCksIDAsCisgICAgICAgICAg
ICBtX2ppdC5icmFuY2hUZXN0UHRyKAorICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpaZXJv
LAorICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpBYnNvbHV0ZUFkZHJlc3MoZ2xvYmFsT2Jq
ZWN0LT5kZWJ1Z2dlckFkZHJlc3MoKSkpKTsKKworICAgICAgICBBU1NFUlQoZ2xvYmFsT2JqZWN0
LT5oYXNEZWJ1Z2dlcigpKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgICAg
IERlYnVnZ2VyRXZlbnQsIEpTVmFsdWVSZWdzKCksIDAsCisgICAgICAgICAgICBtX2ppdC5icmFu
Y2hUZXN0OCgKKyAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6Tm9uWmVybywKKyAgICAgICAg
ICAgICAgICBKSVRDb21waWxlcjo6QWJzb2x1dGVBZGRyZXNzKGdsb2JhbE9iamVjdC0+ZGVidWdn
ZXIoKS0+c2hvdWxkUGF1c2VBZGRyZXNzKCkpKSk7CisKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHRl
bXAodGhpcyk7CisgICAgICAgIEdQUlJlZyBudW1CcmVha3BvaW50c0dQUiA9IHRlbXAuZ3ByKCk7
CisgICAgICAgIG1faml0LmxvYWQzMihtX2ppdC5jb2RlQmxvY2soKS0+bnVtQnJlYWtwb2ludHNB
ZGRyZXNzKCksIG51bUJyZWFrcG9pbnRzR1BSKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjaygK
KyAgICAgICAgICAgIERlYnVnZ2VyRXZlbnQsIEpTVmFsdWVSZWdzKCksIDAsCisgICAgICAgICAg
ICBtX2ppdC5icmFuY2hUZXN0MzIoSklUQ29tcGlsZXI6Ok5vblplcm8sIG51bUJyZWFrcG9pbnRz
R1BSKSk7CiAgICAgICAgIGJyZWFrOworICAgIH0KICAgICAgICAgCisgICAgY2FzZSBQcm9maWxl
V2lsbENhbGw6IHsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgcHJvZmlsZSh0aGlzLCBub2RlLT5j
aGlsZDEoKSk7CisgICAgICAgIEdQUlJlZyBwcm9maWxlR1BSID0gcHJvZmlsZS5ncHIoKTsKKyAg
ICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoSW52YWxpZEdQUlJlZyk7CisgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uUHJvZmlsZVdpbGxDYWxsLCBwcm9maWxlR1BSKTsKKyAgICAg
ICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgbm9SZXN1
bHQobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgUHJvZmlsZURpZENh
bGw6IHsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgcHJvZmlsZSh0aGlzLCBub2RlLT5jaGlsZDEo
KSk7CisgICAgICAgIEdQUlJlZyBwcm9maWxlR1BSID0gcHJvZmlsZS5ncHIoKTsKKyAgICAgICAg
c2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoSW52YWxpZEdQUlJlZyk7CisgICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uUHJvZmlsZURpZENhbGwsIHByb2ZpbGVHUFIpOworICAgICAgICBzaWxl
bnRGaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOworICAgICAgICBub1Jlc3VsdChub2Rl
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCiAgICAgY2FzZSBDYWxsOgogICAgIGNhc2UgQ29u
c3RydWN0OgogICAgICAgICBlbWl0Q2FsbChub2RlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDE2MjU5OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAy
MDEyLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTM3Miw2ICsxMzcyLDExIEBAIHB1YmxpYzoKICAg
ICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIGFyZzMp
OwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24p
OwogICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0
aW9uX0VKIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CisgICAgfQogICAgIEpJVENvbXBpbGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRUpQUCBvcGVyYXRpb24sIEdQUlJlZyBh
cmcxLCBHUFJSZWcgYXJnMiwgdm9pZCogcG9pbnRlcikKICAgICB7CiAgICAgICAgIG1faml0LnNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBUcnVzdGVkSW1tUHRyKHBvaW50
ZXIpKTsKQEAgLTE2MzAsNiArMTYzNSwxMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiAgICAgfQogCisgICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FSiBvcGVyYXRpb24sIEdQ
UlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQpCisgICAgeworICAgICAgICBtX2ppdC5z
ZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMVRhZywgYXJnMVBheWxvYWQpOworICAgICAg
ICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOworICAgIH0K
KwogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRUpQ
UCBvcGVyYXRpb24sIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQsIEdQUlJlZyBh
cmcyLCB2b2lkKiBwb2ludGVyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlKEVBQklfMzJCSVRfRFVNTVlfQVJHIGFyZzFQYXlsb2FkLCBhcmcxVGFnLCBh
cmcyLCBUcnVzdGVkSW1tUHRyKHBvaW50ZXIpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkocmV2aXNpb24gMTYyNTk5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IEVyaWMgU2VpZGVs
IDxlcmljQHdlYmtpdC5vcmc+Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcsIDIw
MDgsIDIwMDksIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTQ3Myw2ICs0NzMsNyBAQCBwdWJsaWM6CiAgICAgRGVidWdnZXIqIGRl
YnVnZ2VyKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z2dlcjsgfQogICAgIHZvaWQgc2V0RGVidWdn
ZXIoRGVidWdnZXIqIGRlYnVnZ2VyKSB7IG1fZGVidWdnZXIgPSBkZWJ1Z2dlcjsgfQogICAgIHN0
YXRpYyBwdHJkaWZmX3QgZGVidWdnZXJPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0Yo
SlNHbG9iYWxPYmplY3QsIG1fZGVidWdnZXIpOyB9CisgICAgdm9pZCogZGVidWdnZXJBZGRyZXNz
KCkgeyByZXR1cm4gJm1fZGVidWdnZXI7IH0KIAogICAgIGNvbnN0IEdsb2JhbE9iamVjdE1ldGhv
ZFRhYmxlKiBnbG9iYWxPYmplY3RNZXRob2RUYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFs
T2JqZWN0TWV0aG9kVGFibGU7IH0KIAo=
</data>
<flag name="review"
          id="246005"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>