<?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>21735</bug_id>
          
          <creation_ts>2008-10-18 16:18:58 -0700</creation_ts>
          <short_desc>Emit profiling instrumentation only if the Web Inspector&apos;s profiling feature is enabled</short_desc>
          <delta_ts>2008-11-24 17:09:40 -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>Mac</rep_platform>
          <op_sys>OS X 10.5</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="Geoffrey Garen">ggaren</reporter>
          <assigned_to name="Geoffrey Garen">ggaren</assigned_to>
          <cc>zwarich</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>95884</commentid>
    <comment_count>0</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-10-18 16:18:58 -0700</bug_when>
    <thetext>Patch coming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>95888</commentid>
    <comment_count>1</comment_count>
      <attachid>24493</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-10-18 16:50:28 -0700</bug_when>
    <thetext>Created attachment 24493
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>95892</commentid>
    <comment_count>2</comment_count>
      <attachid>24493</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2008-10-18 17:30:22 -0700</bug_when>
    <thetext>Comment on attachment 24493
patch

             // Profiler check
             emitGetCTIParam(CTI_ARGS_profilerReference, X86::eax);

You should remove that comment too.

Maybe recompileAllJSFunctionsSoon() should be on some other class or standalone function? Or moved to JSCore? It seems weird for it to be on the JavaScriptDebugServer now that it is used be the profiler.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>95896</commentid>
    <comment_count>3</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-10-18 17:54:55 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 24493 [edit])
&gt;              // Profiler check
&gt;              emitGetCTIParam(CTI_ARGS_profilerReference, X86::eax);
&gt; 
&gt; You should remove that comment too.

Fixed!

&gt; Maybe recompileAllJSFunctionsSoon() should be on some other class or standalone
&gt; function? Or moved to JSCore? It seems weird for it to be on the
&gt; JavaScriptDebugServer now that it is used be the profiler.

recompileAllJSFunctionsSoon() can&apos;t move to JSCore unless we move the Timer class down to WTF, too.

It can&apos;t be standalone unless we rework the Timer class to support standalone functions in addition to member functions.

Maybe these changes would be worth it, though.

Ideally, I think we&apos;d use a shared object like GCController. JavaScriptDebugServer seemed like that object to me. It&apos;s not the profiler, but it makes sense to me that it knows how to recompile things, and that the profiler / Settings object can use it for that purpose.

But maybe I should just split off a new object -- CompilerController?
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>95897</commentid>
    <comment_count>4</comment_count>
      <attachid>24496</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-10-18 17:55:58 -0700</bug_when>
    <thetext>Created attachment 24496
patch - removed the comment tim mentioned

Updated patch to remove the comment Tim mentioned.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>95918</commentid>
    <comment_count>5</comment_count>
      <attachid>24496</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-10-18 23:06:58 -0700</bug_when>
    <thetext>Comment on attachment 24496
patch - removed the comment tim mentioned

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>96399</commentid>
    <comment_count>6</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2008-10-23 13:34:30 -0700</bug_when>
    <thetext>Geoff landed this in r37730.

http://trac.webkit.org/changeset/37730
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100108</commentid>
    <comment_count>7</comment_count>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-11-24 17:09:40 -0800</bug_when>
    <thetext>*** Bug 21296 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24493</attachid>
            <date>2008-10-18 16:50:28 -0700</date>
            <delta_ts>2008-10-18 17:55:58 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch-profile-opcodes.txt</filename>
            <type>text/plain</type>
            <size>46637</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM3Njc5KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTQgQEAKKzIwMDgtMTAtMTggIEdlb2ZmcmV5
IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIEZpeGVkIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMTczNQorICAgICAgICBFbWl0IHByb2ZpbGluZyBpbnN0cnVtZW50
YXRpb24gb25seSBpZiB0aGUgV2ViIEluc3BlY3RvcidzIHByb2ZpbGluZworICAgICAgICBmZWF0
dXJlIGlzIGVuYWJsZWQgb24gdGhlIHRhcmdldCBwYWdlCisKKyAgICAgICAgMjIuMiUgc3BlZWR1
cCBvbiBlbXB0eSBmdW5jdGlvbiBjYWxsIGJlbmNobWFyay4KKyAgICAgICAgMi45JSBzcGVlZHVw
IG9uIHY4IGJlbmNobWFyay4KKyAgICAgICAgMC43JSBzcGVlZHVwIG9uIFN1blNwaWRlci4KKyAg
ICAgICAgCisgICAgICAgIExlc3NlciBidXQgc2ltaWxhciBzcGVlZHVwcyBpbiBieXRlY29kZS4K
KworICAgICAgICAqIFZNL0NUSS5jcHA6CisgICAgICAgIChKU0M6OkNUSTo6Y29tcGlsZU9wQ2Fs
bCk6CisgICAgICAgIChKU0M6OkNUSTo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcyk6CisgICAgICAg
IChKU0M6OkNUSTo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMpOiBOaXhlZCBKSVRlZCBwcm9maWxl
ciBob29rcy4gUHJvZmlsZXIKKyAgICAgICAgaG9va3Mgbm93IGhhdmUgdGhlaXIgb3duIG9wY29k
ZXMuIEFkZGVkIHN1cHBvcnQgZm9yIGNvbXBpbGluZyBwcm9maWxlcgorICAgICAgICBob29rIG9w
Y29kZXMuCisgICAgICAgIAorICAgICAgICAqIFZNL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6cHJpbnRTdHJ1Y3R1cmVJRHMpOiBGaXhlZCB1cCBhbiBBU1NFUlQgY2F1
c2VkIGJ5CisgICAgICAgIEdhdmluJ3MgbGFzdCBjaGVja2luLiBUaGlzIGlzIGEgdGVtcG9yYXJ5
IGZpeCBzbyBJIGNhbiBrZWVwIG9uIG1vdmluZy4KKyAgICAgICAgSSdsbCBzZW5kIGVtYWlsIGFi
b3V0IHdoYXQgSSB0aGluayBpcyBhbiB1bmRlcmx5aW5nIHByb2JsZW0gc29vbi4KKworICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OmR1bXApOiBEdW1wIHN1cHBvcnQgZm9yIHRoZSBuZXcgcHJvZmls
aW5nIG9wY29kZXMuCisKKyAgICAgICAgKiBWTS9Db2RlR2VuZXJhdG9yLmg6CisgICAgICAgICog
Vk0vQ29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkNvZGVHZW5lcmF0b3I6OkNvZGVH
ZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpDb2RlR2VuZXJhdG9yOjplbWl0Q2FsbCk6CisgICAg
ICAgIChKU0M6OkNvZGVHZW5lcmF0b3I6OmVtaXRDb25zdHJ1Y3QpOiBDb25kaXRpb25hbGx5IGVt
aXQgcHJvZmlsaW5nIGhvb2tzCisgICAgICAgIGFyb3VuZCBjYWxsIGFuZCBjb25zdHJ1Y3QsIGF0
IHRoZSBjYWxsIHNpdGUuIChJdCdzIGVhc2llciB0byBnZXQgdGhpbmdzCisgICAgICAgIHJpZ2h0
IHRoaXMgd2F5LCBpZiB5b3UgaGF2ZSBwcm9maWxlZCBjb2RlIGNhbGxpbmcgbm9uLXByb2ZpbGVk
IGNvZGUuCisgICAgICAgIEFsc28sIHlvdSBnZXQgYSBzbGlnaHRseSBtb3JlIGFjY3VyYXRlIHBy
b2ZpbGUsIHNpbmNlIHlvdSBjaGFyZ2UgdGhlIGZ1bGwKKyAgICAgICAgY29zdCBvZiB0aGUgY2Fs
bCAvIGNvbnN0cnVjdCBvcGVyYXRpb24gdG8gdGhlIGNhbGxlZS4pCisgICAgICAgIAorICAgICAg
ICBBbHNvLCBmaXhlZCBhIGJ1ZyB3aGVyZSBjb25zdHJ1Y3Qgd291bGQgZmV0Y2ggdGhlICIucHJv
dG90eXBlIiBwcm9wZXJ0eQorICAgICAgICBmcm9tIHRoZSBjb25zdHJ1Y3RvciBiZWZvcmUgZXZh
bHVhdGluZyB0aGUgYXJndW1lbnRzIHRvIHRoZSBjb25zdHJ1Y3RvciwKKyAgICAgICAgaW5jb3Jy
ZWN0bHkgYWxsb3dpbmcgYW4gImludmFsaWQgY29uc3RydWN0b3IiIGV4Y2VwdGlvbiB0byBzaG9y
dC1jaXJjdWl0CisgICAgICAgIGFyZ3VtZW50IGV2YWx1YXRpb24uIEkgZW5jb3VudGVyZWQgdGhp
cyBidWcgd2hlbiB0cnlpbmcgdG8gbWFrZQorICAgICAgICBjb25zdHJ1Y3RvciBleGNlcHRpb25z
IHdvcmsgd2l0aCBwcm9maWxpbmcuCisKKyAgICAgICAgKiBWTS9NYWNoaW5lLmNwcDoKKyAgICAg
ICAgKEpTQzo6TWFjaGluZTo6Y2FsbEV2YWwpOiBSZW1vdmVkIG9ic29sZXRlIHByb2ZpbGVyIGhv
b2tzLgorCisgICAgICAgIChKU0M6Ok1hY2hpbmU6OnRocm93RXhjZXB0aW9uKTogQWRkZWQgYSBj
aGVjayBmb3IgYW4gZXhjZXB0aW9uIHRocm93bgorICAgICAgICB3aXRoaW4gYSBjYWxsIGluc3Ry
dWN0aW9uLiBXZSBkaWRuJ3QgbmVlZCB0aGlzIGJlZm9yZSBiZWNhdXNlIHRoZSBjYWxsCisgICAg
ICAgIGluc3RydWN0aW9uIHdvdWxkIGNoZWNrIGZvciBhIHZhbGlkIGNhbGwgYmVmb3JlIGludm9s
aW5nIHRoZSBwcm9maWxlci4KKyAgICAgICAgKEpTQzo6TWFjaGluZTo6ZXhlY3V0ZSk6IEFkZGVk
IGEgZGlkRXhlY3V0ZSBob29rIGF0IHRoZSBlbmQgb2YgdG9wLWxldmVsCisgICAgICAgIGZ1bmN0
aW9uIGludm9jYXRpb24sIHNpbmNlIG9wX3JldCBubyBsb25nZXIgZG9lcyB0aGlzIGZvciB1cy4K
KworICAgICAgICAoSlNDOjpNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZSk6IFJlbW92ZWQgb2Jzb2xl
dGUgcHJvZmlsZXIgaG9va3MuIEFkZGVkCisgICAgICAgIHByb2ZpbGVyIG9wY29kZXMuIENoYW5n
ZWQgc29tZSArK3ZQQyB0byB2UENbeF0gbm90YXRpb24sIHNpbmNlIHRoZQorICAgICAgICBsYXR0
ZXIgaXMgYmV0dGVyIGZvciBwZXJmb3JtYW5jZSwgYW5kIGl0IG1ha2VzIHJlYXNvbmluZyBhYm91
dCB0aGUKKyAgICAgICAgY3VycmVudCBvcGNvZGUgaW4gZXhjZXB0aW9uIGhhbmRsaW5nIG11Y2gg
c2ltcGxlci4KKworICAgICAgICAoSlNDOjpNYWNoaW5lOjpjdGlfb3BfY2FsbF9Ob3RKU0Z1bmN0
aW9uKTogUmVtb3ZlZCBvYnNvbGV0ZSBwcm9maWxlcgorICAgICAgICBob29rcy4KKworICAgICAg
ICAoSlNDOjpNYWNoaW5lOjpjdGlfb3BfY3JlYXRlX2FyZ3VtZW50c19ub19wYXJhbXMpOiBBZGRl
ZCBtaXNzaW5nCisgICAgICAgIENUSV9TVEFDS19IQUNLIHRoYXQgSSBub3RpY2VkIHdoZW4gYWRk
aW5nIENUSV9TVEFDS19IQUNLIHRvIHRoZSBuZXcKKyAgICAgICAgcHJvZmlsZXIgb3Bjb2RlIGZ1
bmN0aW9ucy4KKworICAgICAgICAoSlNDOjpNYWNoaW5lOjpjdGlfb3BfcHJvZmlsZV93aWxsX2Nh
bGwpOgorICAgICAgICAoSlNDOjpNYWNoaW5lOjpjdGlfb3BfcHJvZmlsZV9kaWRfY2FsbCk6IFRo
ZSBuZXcgcHJvZmlsZXIgb3Bjb2RlCisgICAgICAgIGZ1bmN0aW9ucy4KKworICAgICAgICAoSlND
OjpNYWNoaW5lOjpjdGlfb3BfY29uc3RydWN0X05vdEpTQ29uc3RydWN0KTogUmVtb3ZlZCBvYnNv
bGV0ZSBwcm9maWxlcgorICAgICAgICBob29rcy4KKworICAgICAgICAqIFZNL01hY2hpbmUuaDoK
KyAgICAgICAgKEpTQzo6TWFjaGluZTo6aXNDYWxsT3Bjb2RlKTogSGVscGVyIGZvciBleGNlcHRp
b24gaGFuZGxpbmcuCisKKyAgICAgICAgKiBWTS9PcGNvZGUuaDogRGVjbGFyZSBuZXcgb3Bjb2Rl
cy4KKworICAgICAgICAqIGtqcy9KU0dsb2JhbE9iamVjdC5oOgorICAgICAgICAoSlNDOjpKU0ds
b2JhbE9iamVjdDo6c3VwcG9ydHNQcm9maWxpbmcpOiBBZGRlZCB2aXJ0dWFsIGludGVyZmFjZSB0
aGF0CisgICAgICAgIGFsbG93cyBXZWJDb3JlIHRvIHNwZWNpZnkgd2hldGhlciB0aGUgdGFyZ2V0
IGdsb2JhbCBvYmplY3QgaGFzIHRoZSBXZWIKKyAgICAgICAgSW5zcGVjdG9yJ3MgcHJvZmlsaW5n
IGZlYXR1cmUgZW5hYmxlZC4KKworICAgICAgICAqIHByb2ZpbGVyL1Byb2ZpbGVyLmNwcDoKKyAg
ICAgICAgKEpTQzo6UHJvZmlsZXI6OndpbGxFeGVjdXRlKToKKyAgICAgICAgKEpTQzo6UHJvZmls
ZXI6OmRpZEV4ZWN1dGUpOgorICAgICAgICAoSlNDOjpQcm9maWxlcjo6Y3JlYXRlQ2FsbElkZW50
aWZpZXIpOgorICAgICAgICAqIHByb2ZpbGVyL1Byb2ZpbGVyLmg6IEFkZGVkIHN1cHBvcnQgZm9y
IGludm9raW5nIHRoZSBwcm9maWxlciB3aXRoCisgICAgICAgIGFuIGFyYml0cmFyeSBKU1ZhbHVl
KiwgYW5kIG5vdCBhIGtub3duIG9iamVjdC4gV2UgZGlkbid0IG5lZWQgdGhpcworICAgICAgICBi
ZWZvcmUgYmVjYXVzZSB0aGUgY2FsbCBpbnN0cnVjdGlvbiB3b3VsZCBjaGVjayBmb3IgYSB2YWxp
ZCBjYWxsIGJlZm9yZQorICAgICAgICBpbnZvbGluZyB0aGUgcHJvZmlsZXIuCisKIDIwMDgtMTAt
MTggIENhbWVyb24gWndhcmljaCAgPHp3YXJpY2hAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IE9saXZlciBIdW50LgpJbmRleDogSmF2YVNjcmlwdENvcmUvVk0vQ1RJLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9WTS9DVEkuY3BwCShyZXZpc2lvbiAzNzY3OSkKKysr
IEphdmFTY3JpcHRDb3JlL1ZNL0NUSS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwMSwxNCArNjAx
LDYgQEAgdm9pZCBDVEk6OmNvbXBpbGVPcENhbGwoSW5zdHJ1Y3Rpb24qIGlucwogCiAgICAgLy8g
VGhlIGZvbGxvd2luZyBpcyB0aGUgZmFzdCBjYXNlLCBvbmx5IHVzZWQgd2hhbiBhIGNhbGxlZSBj
YW4gYmUgbGlua2VkLgogCi0gICAgZW1pdEdldENUSVBhcmFtKENUSV9BUkdTX3Byb2ZpbGVyUmVm
ZXJlbmNlLCBYODY6OmVheCk7Ci0gICAgbV9qaXQuY21wbF9pMzJtKDAsIFg4Njo6ZWF4KTsKLSAg
ICBYODZBc3NlbWJsZXI6OkptcFNyYyBub1Byb2ZpbGUgPSBtX2ppdC5lbWl0VW5saW5rZWRKZSgp
OwotICAgIGVtaXRQdXRBcmcoWDg2OjplY3gsIDApOwotICAgIGVtaXRDVElDYWxsKGksIE1hY2hp
bmU6OmN0aV9vcF9jYWxsX3Byb2ZpbGVyKTsKLSAgICBlbWl0R2V0QXJnKGNhbGxlZSwgWDg2Ojpl
Y3gpOwotICAgIG1faml0Lmxpbmsobm9Qcm9maWxlLCBtX2ppdC5sYWJlbCgpKTsKLQogICAgIC8v
IEluIHRoZSBjYXNlIG9mIE9wQ29uc3RydWN0LCBjYWxsIG9vdXQgdG8gYSBjdGlfIGZ1bmN0aW9u
IHRvIGNyZWF0ZSB0aGUgbmV3IG9iamVjdC4KICAgICBpZiAodHlwZSA9PSBPcENvbnN0cnVjdCkg
ewogICAgICAgICBlbWl0UHV0QXJnKFg4Njo6ZWN4LCAwKTsKQEAgLTEzMDEsMTIgKzEyOTMsNiBA
QCB2b2lkIENUSTo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX3JldDogewotICAgICAgICAgICAgLy8gQ2hlY2sg
Zm9yIGEgcHJvZmlsZXIgLSBpZiB0aGVyZSBpcyBvbmUsIGp1bXAgdG8gdGhlIGhvb2sgYmVsb3cu
Ci0gICAgICAgICAgICBlbWl0R2V0Q1RJUGFyYW0oQ1RJX0FSR1NfcHJvZmlsZXJSZWZlcmVuY2Us
IFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIG1faml0LmNtcGxfaTMybSgwLCBYODY6OmVheCk7Ci0g
ICAgICAgICAgICBYODZBc3NlbWJsZXI6OkptcFNyYyBwcm9maWxlID0gbV9qaXQuZW1pdFVubGlu
a2VkSm5lKCk7Ci0gICAgICAgICAgICBYODZBc3NlbWJsZXI6OkptcERzdCBwcm9maWxlZCA9IG1f
aml0LmxhYmVsKCk7Ci0KICAgICAgICAgICAgIC8vIFdlIGNvdWxkIEpJVCBnZW5lcmF0ZSB0aGUg
ZGVyZWYsIG9ubHkgY2FsbGluZyBvdXQgdG8gQyB3aGVuIHRoZSByZWZjb3VudCBoaXRzIHplcm8u
CiAgICAgICAgICAgICBpZiAobV9jb2RlQmxvY2stPm5lZWRzRnVsbFNjb3BlQ2hhaW4pCiAgICAg
ICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgTWFjaGluZTo6Y3RpX29wX3JldF9zY29wZUNoYWlu
KTsKQEAgLTEzMjQsMTEgKzEzMTAsNiBAQCB2b2lkIENUSTo6cHJpdmF0ZUNvbXBpbGVNYWluUGFz
cygpCiAgICAgICAgICAgICBtX2ppdC5wdXNobF9yKFg4Njo6ZWR4KTsKICAgICAgICAgICAgIG1f
aml0LnJldCgpOwogCi0gICAgICAgICAgICAvLyBQcm9maWxpbmcgaG9vawotICAgICAgICAgICAg
bV9qaXQubGluayhwcm9maWxlLCBtX2ppdC5sYWJlbCgpKTsKLSAgICAgICAgICAgIGVtaXRDVElD
YWxsKGksIE1hY2hpbmU6OmN0aV9vcF9yZXRfcHJvZmlsZXIpOwotICAgICAgICAgICAgbV9qaXQu
bGluayhtX2ppdC5lbWl0VW5saW5rZWRKbXAoKSwgcHJvZmlsZWQpOwotCiAgICAgICAgICAgICBp
ICs9IDI7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMjA5OSw2ICsyMDgwLDI4
IEBAIHZvaWQgQ1RJOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgICAgIGkgKz0g
MjsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfcHJvZmls
ZV93aWxsX2NhbGw6IHsKKyAgICAgICAgICAgIGVtaXRHZXRDVElQYXJhbShDVElfQVJHU19wcm9m
aWxlclJlZmVyZW5jZSwgWDg2OjplYXgpOworICAgICAgICAgICAgbV9qaXQuY21wbF9pMzJtKDAs
IFg4Njo6ZWF4KTsKKyAgICAgICAgICAgIFg4NkFzc2VtYmxlcjo6Sm1wU3JjIG5vUHJvZmlsZXIg
PSBtX2ppdC5lbWl0VW5saW5rZWRKZSgpOworICAgICAgICAgICAgZW1pdEdldFB1dEFyZyhpbnN0
cnVjdGlvbltpICsgMV0udS5vcGVyYW5kLCAwLCBYODY6OmVheCk7CisgICAgICAgICAgICBlbWl0
Q1RJQ2FsbChpLCBNYWNoaW5lOjpjdGlfb3BfcHJvZmlsZV93aWxsX2NhbGwpOworICAgICAgICAg
ICAgbV9qaXQubGluayhub1Byb2ZpbGVyLCBtX2ppdC5sYWJlbCgpKTsKKworICAgICAgICAgICAg
aSArPSAyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9w
cm9maWxlX2RpZF9jYWxsOiB7CisgICAgICAgICAgICBlbWl0R2V0Q1RJUGFyYW0oQ1RJX0FSR1Nf
cHJvZmlsZXJSZWZlcmVuY2UsIFg4Njo6ZWF4KTsKKyAgICAgICAgICAgIG1faml0LmNtcGxfaTMy
bSgwLCBYODY6OmVheCk7CisgICAgICAgICAgICBYODZBc3NlbWJsZXI6OkptcFNyYyBub1Byb2Zp
bGVyID0gbV9qaXQuZW1pdFVubGlua2VkSmUoKTsKKyAgICAgICAgICAgIGVtaXRHZXRQdXRBcmco
aW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCwgMCwgWDg2OjplYXgpOworICAgICAgICAgICAg
ZW1pdENUSUNhbGwoaSwgTWFjaGluZTo6Y3RpX29wX3Byb2ZpbGVfZGlkX2NhbGwpOworICAgICAg
ICAgICAgbV9qaXQubGluayhub1Byb2ZpbGVyLCBtX2ppdC5sYWJlbCgpKTsKKworICAgICAgICAg
ICAgaSArPSAyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgY2FzZSBv
cF9nZXRfYXJyYXlfbGVuZ3RoOgogICAgICAgICBjYXNlIG9wX2dldF9ieV9pZF9jaGFpbjoKICAg
ICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfZ2VuZXJpYzoKQEAgLTI2MjQsMTIgKzI2MjcsNiBAQCB2
b2lkIENUSTo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICAgICAgWDg2QXNzZW1i
bGVyOjpKbXBTcmMgY2FsbExpbmtGYWlsTm90SlNGdW5jdGlvbiA9IG1faml0LmVtaXRVbmxpbmtl
ZEpuZSgpOwogCiAgICAgICAgICAgICAvLyBUaGlzIGhhbmRsZXMgSlNGdW5jdGlvbnMKLSAgICAg
ICAgICAgIGVtaXRHZXRDVElQYXJhbShDVElfQVJHU19wcm9maWxlclJlZmVyZW5jZSwgWDg2Ojpl
YXgpOwotICAgICAgICAgICAgbV9qaXQuY21wbF9pMzJtKDAsIFg4Njo6ZWF4KTsKLSAgICAgICAg
ICAgIFg4NkFzc2VtYmxlcjo6Sm1wU3JjIG5vUHJvZmlsZTEgPSBtX2ppdC5lbWl0VW5saW5rZWRK
ZSgpOwotICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgTWFjaGluZTo6Y3RpX29wX2NhbGxfcHJv
ZmlsZXIpOwotICAgICAgICAgICAgbV9qaXQubGluayhub1Byb2ZpbGUxLCBtX2ppdC5sYWJlbCgp
KTsKLQogICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgKG9wY29kZUlEID09IG9wX2NvbnN0cnVj
dCkgPyBNYWNoaW5lOjpjdGlfb3BfY29uc3RydWN0X0pTQ29uc3RydWN0IDogTWFjaGluZTo6Y3Rp
X29wX2NhbGxfSlNGdW5jdGlvbik7CiAgICAgICAgICAgICAvLyBpbml0aWFsaXplIHRoZSBuZXcg
Y2FsbCBmcmFtZSAocG9pbnRlZCB0byBieSBlZHgsIGFmdGVyIHRoZSBsYXN0IGNhbGwpLCB0aGVu
IHNldCBlZGkgdG8gcG9pbnQgdG8gaXQuCiAgICAgICAgICAgICBjb21waWxlT3BDYWxsSW5pdGlh
bGl6ZUNhbGxGcmFtZShjYWxsZWUsIGFyZ0NvdW50KTsKQEAgLTI2NjYsMTIgKzI2NjMsNiBAQCB2
b2lkIENUSTo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICAgICAgbV9qaXQubGlu
ayhpc0pTRnVuY3Rpb24sIG1faml0LmxhYmVsKCkpOwogCiAgICAgICAgICAgICAvLyBQcm9maWxl
ciBjaGVjawotICAgICAgICAgICAgZW1pdEdldENUSVBhcmFtKENUSV9BUkdTX3Byb2ZpbGVyUmVm
ZXJlbmNlLCBYODY6OmVheCk7Ci0gICAgICAgICAgICBtX2ppdC5jbXBsX2kzMm0oMCwgWDg2Ojpl
YXgpOwotICAgICAgICAgICAgWDg2QXNzZW1ibGVyOjpKbXBTcmMgbm9Qcm9maWxlID0gbV9qaXQu
ZW1pdFVubGlua2VkSmUoKTsKLSAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIE1hY2hpbmU6OmN0
aV9vcF9jYWxsX3Byb2ZpbGVyKTsKLSAgICAgICAgICAgIG1faml0Lmxpbmsobm9Qcm9maWxlLCBt
X2ppdC5sYWJlbCgpKTsKLQogICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgKG9wY29kZUlEID09
IG9wX2NvbnN0cnVjdCkgPyBNYWNoaW5lOjpjdGlfb3BfY29uc3RydWN0X0pTQ29uc3RydWN0IDog
TWFjaGluZTo6Y3RpX29wX2NhbGxfSlNGdW5jdGlvbik7CiAgICAgICAgICAgICAvLyBpbml0aWFs
aXplIHRoZSBuZXcgY2FsbCBmcmFtZSAocG9pbnRlZCB0byBieSBlZHgsIGFmdGVyIHRoZSBsYXN0
IGNhbGwpLgogICAgICAgICAgICAgY29tcGlsZU9wQ2FsbEluaXRpYWxpemVDYWxsRnJhbWUoY2Fs
bGVlLCBhcmdDb3VudCk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9WTS9Db2RlQmxvY2suY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL1ZNL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDM3
Njc5KQorKysgSmF2YVNjcmlwdENvcmUvVk0vQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjE3LDggKzIxNyw4IEBAIHZvaWQgQ29kZUJsb2NrOjpwcmludFN0cnVjdHVyZUlEcyhjb25z
dCAKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIC8vIFRoZXNlIGluc3RydWN0aW9ucyBk
b2Vzbid0IHJlZiBTdHJ1Y3R1cmVJRHMuCi0gICAgQVNTRVJUKHZQQ1swXS51Lm9wY29kZSA9PSBt
YWNoaW5lLT5nZXRPcGNvZGUob3BfZ2V0X2J5X2lkX2dlbmVyaWMpIHx8IHZQQ1swXS51Lm9wY29k
ZSA9PSBtYWNoaW5lLT5nZXRPcGNvZGUob3BfcHV0X2J5X2lkX2dlbmVyaWMpKTsKKyAgICAvLyBU
aGVzZSBpbnN0cnVjdGlvbnMgZG9uJ3QgcmVmIFN0cnVjdHVyZUlEcy4KKyAgICBBU1NFUlQodlBD
WzBdLnUub3Bjb2RlID09IG1hY2hpbmUtPmdldE9wY29kZShvcF9nZXRfYnlfaWRfZ2VuZXJpYykg
fHwgdlBDWzBdLnUub3Bjb2RlID09IG1hY2hpbmUtPmdldE9wY29kZShvcF9wdXRfYnlfaWRfZ2Vu
ZXJpYykgfHwgdlBDWzBdLnUub3Bjb2RlID09IG1hY2hpbmUtPmdldE9wY29kZShvcF9jYWxsKSB8
fCB2UENbMF0udS5vcGNvZGUgPT0gbWFjaGluZS0+Z2V0T3Bjb2RlKG9wX2NvbnN0cnVjdCkgfHwg
dlBDWzBdLnUub3Bjb2RlID09IG1hY2hpbmUtPmdldE9wY29kZShvcF9jYWxsX2V2YWwpKTsKIH0K
IAogdm9pZCBDb2RlQmxvY2s6OmR1bXAoRXhlY1N0YXRlKiBleGVjKSBjb25zdApAQCAtOTExLDE1
ICs5MTEsMjEgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXAoRXhlY1N0YXRlKiBleGVjLCBjbwogICAg
ICAgICAgICAgcHJpbnRmKCJbJTRkXSBkZWJ1Z1x0XHQgJXMsICVkLCAlZFxuIiwgbG9jYXRpb24s
IGRlYnVnSG9va05hbWUoZGVidWdIb29rSUQpLCBmaXJzdExpbmUsIGxhc3RMaW5lKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfcHJvZmlsZV93aWxsX2Nh
bGw6IHsKKyAgICAgICAgICAgIGludCBmdW5jdGlvbiA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAg
ICAgICAgICAgcHJpbnRmKCJbJTRkXSBwcm9maWxlX3dpbGxfY2FsbCAlc1xuIiwgbG9jYXRpb24s
IHJlZ2lzdGVyTmFtZShmdW5jdGlvbikuY19zdHIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBjYXNlIG9wX3Byb2ZpbGVfZGlkX2NhbGw6IHsKKyAgICAgICAgICAg
IGludCBmdW5jdGlvbiA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRmKCJb
JTRkXSBwcm9maWxlX2RpZF9jYWxsXHQgJXNcbiIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUoZnVu
Y3Rpb24pLmNfc3RyKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAg
Y2FzZSBvcF9lbmQ6IHsKICAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwog
ICAgICAgICAgICAgcHJpbnRmKCJbJTRkXSBlbmRcdFx0ICVzXG4iLCBsb2NhdGlvbiwgcmVnaXN0
ZXJOYW1lKHIwKS5jX3N0cigpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAg
ICAgIGRlZmF1bHQ6IHsKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KICAgICB9CiB9CiAKSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L1ZNL0NvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL1ZNL0Nv
ZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAzNzY3OSkKKysrIEphdmFTY3JpcHRDb3JlL1ZNL0Nv
ZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTUsNiArMTk1LDcgQEAgdm9pZCBD
b2RlR2VuZXJhdG9yOjphbGxvY2F0ZUNvbnN0YW50cyhzaQogCiBDb2RlR2VuZXJhdG9yOjpDb2Rl
R2VuZXJhdG9yKFByb2dyYW1Ob2RlKiBwcm9ncmFtTm9kZSwgY29uc3QgRGVidWdnZXIqIGRlYnVn
Z2VyLCBjb25zdCBTY29wZUNoYWluJiBzY29wZUNoYWluLCBTeW1ib2xUYWJsZSogc3ltYm9sVGFi
bGUsIENvZGVCbG9jayogY29kZUJsb2NrLCBWYXJTdGFjayYgdmFyU3RhY2ssIEZ1bmN0aW9uU3Rh
Y2smIGZ1bmN0aW9uU3RhY2spCiAgICAgOiBtX3Nob3VsZEVtaXREZWJ1Z0hvb2tzKCEhZGVidWdn
ZXIpCisgICAgLCBtX3Nob3VsZEVtaXRQcm9maWxlSG9va3Moc2NvcGVDaGFpbi5nbG9iYWxPYmpl
Y3QoKS0+c3VwcG9ydHNQcm9maWxpbmcoKSkKICAgICAsIG1fc2NvcGVDaGFpbigmc2NvcGVDaGFp
bikKICAgICAsIG1fc3ltYm9sVGFibGUoc3ltYm9sVGFibGUpCiAgICAgLCBtX3Njb3BlTm9kZShw
cm9ncmFtTm9kZSkKQEAgLTI3Myw2ICsyNzQsNyBAQCBDb2RlR2VuZXJhdG9yOjpDb2RlR2VuZXJh
dG9yKFByb2dyYW1Ob2RlCiAKIENvZGVHZW5lcmF0b3I6OkNvZGVHZW5lcmF0b3IoRnVuY3Rpb25C
b2R5Tm9kZSogZnVuY3Rpb25Cb2R5LCBjb25zdCBEZWJ1Z2dlciogZGVidWdnZXIsIGNvbnN0IFNj
b3BlQ2hhaW4mIHNjb3BlQ2hhaW4sIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSwgQ29kZUJsb2Nr
KiBjb2RlQmxvY2spCiAgICAgOiBtX3Nob3VsZEVtaXREZWJ1Z0hvb2tzKCEhZGVidWdnZXIpCisg
ICAgLCBtX3Nob3VsZEVtaXRQcm9maWxlSG9va3Moc2NvcGVDaGFpbi5nbG9iYWxPYmplY3QoKS0+
c3VwcG9ydHNQcm9maWxpbmcoKSkKICAgICAsIG1fc2NvcGVDaGFpbigmc2NvcGVDaGFpbikKICAg
ICAsIG1fc3ltYm9sVGFibGUoc3ltYm9sVGFibGUpCiAgICAgLCBtX3Njb3BlTm9kZShmdW5jdGlv
bkJvZHkpCkBAIC0zNDIsNiArMzQ0LDcgQEAgQ29kZUdlbmVyYXRvcjo6Q29kZUdlbmVyYXRvcihG
dW5jdGlvbkJvZAogCiBDb2RlR2VuZXJhdG9yOjpDb2RlR2VuZXJhdG9yKEV2YWxOb2RlKiBldmFs
Tm9kZSwgY29uc3QgRGVidWdnZXIqIGRlYnVnZ2VyLCBjb25zdCBTY29wZUNoYWluJiBzY29wZUNo
YWluLCBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUsIEV2YWxDb2RlQmxvY2sqIGNvZGVCbG9jaykK
ICAgICA6IG1fc2hvdWxkRW1pdERlYnVnSG9va3MoISFkZWJ1Z2dlcikKKyAgICAsIG1fc2hvdWxk
RW1pdFByb2ZpbGVIb29rcyhzY29wZUNoYWluLmdsb2JhbE9iamVjdCgpLT5zdXBwb3J0c1Byb2Zp
bGluZygpKQogICAgICwgbV9zY29wZUNoYWluKCZzY29wZUNoYWluKQogICAgICwgbV9zeW1ib2xU
YWJsZShzeW1ib2xUYWJsZSkKICAgICAsIG1fc2NvcGVOb2RlKGV2YWxOb2RlKQpAQCAtMTE1Miw2
ICsxMTU1LDExIEBAIFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0b3I6OmVtaXRDYWxsKE9wY28KICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsg
KytpKQogICAgICAgICBjYWxsRnJhbWUuYXBwZW5kKG5ld1RlbXBvcmFyeSgpKTsKIAorICAgIGlm
IChtX3Nob3VsZEVtaXRQcm9maWxlSG9va3MpIHsKKyAgICAgICAgZW1pdE9wY29kZShvcF9wcm9m
aWxlX3dpbGxfY2FsbCk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChmdW5jLT5pbmRl
eCgpKTsKKyAgICB9CisKICAgICBlbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QsIHN0YXJ0T2Zmc2V0
LCBlbmRPZmZzZXQpOwogICAgIG1fY29kZUJsb2NrLT5zdHJ1Y3R1cmVJREluc3RydWN0aW9ucy5h
cHBlbmQoaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKICAgICBlbWl0T3Bjb2RlKG9wY29kZUlEKTsK
QEAgLTExNjEsNiArMTE2OSwxMiBAQCBSZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjplbWl0Q2Fs
bChPcGNvCiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFyZ3ZbMF0tPmluZGV4KCkpOyAvLyBh
cmd2CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFyZ3Yuc2l6ZSgpKTsgLy8gYXJnYwogICAg
IGluc3RydWN0aW9ucygpLmFwcGVuZChhcmd2WzBdLT5pbmRleCgpICsgYXJndi5zaXplKCkgKyBS
ZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUpOyAvLyByZWdpc3Rlck9mZnNldAorCisg
ICAgaWYgKG1fc2hvdWxkRW1pdFByb2ZpbGVIb29rcykgeworICAgICAgICBlbWl0T3Bjb2RlKG9w
X3Byb2ZpbGVfZGlkX2NhbGwpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZnVuYy0+
aW5kZXgoKSk7CisgICAgfQorCiAgICAgcmV0dXJuIGRzdDsKIH0KIApAQCAtMTE4NiwxMCArMTIw
MCw3IEBAIFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0b3I6OmVtaXRDb25zdHJ1Y3QKIHsKICAgICBB
U1NFUlQoZnVuYy0+cmVmQ291bnQoKSk7CiAKLSAgICAvLyBMb2FkIHByb3RvdHlwZS4KLSAgICBl
bWl0RXhwcmVzc2lvbkluZm8oZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOwogICAgIFJl
ZlB0cjxSZWdpc3RlcklEPiBmdW5jUHJvdG8gPSBuZXdUZW1wb3JhcnkoKTsKLSAgICBlbWl0R2V0
QnlJZChmdW5jUHJvdG8uZ2V0KCksIGZ1bmMsIGdsb2JhbERhdGEoKS0+cHJvcGVydHlOYW1lcy0+
cHJvdG90eXBlKTsKIAogICAgIC8vIEdlbmVyYXRlIGNvZGUgZm9yIGFyZ3VtZW50cy4KICAgICBW
ZWN0b3I8UmVmUHRyPFJlZ2lzdGVySUQ+LCAxNj4gYXJndjsKQEAgLTExOTksNiArMTIxMCwxNSBA
QCBSZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjplbWl0Q29uc3RydWN0CiAgICAgICAgIGVtaXRO
b2RlKGFyZ3YubGFzdCgpLmdldCgpLCBuKTsKICAgICB9CiAKKyAgICBpZiAobV9zaG91bGRFbWl0
UHJvZmlsZUhvb2tzKSB7CisgICAgICAgIGVtaXRPcGNvZGUob3BfcHJvZmlsZV93aWxsX2NhbGwp
OworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZnVuYy0+aW5kZXgoKSk7CisgICAgfQor
CisgICAgLy8gTG9hZCBwcm90b3R5cGUuCisgICAgZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90LCBz
dGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKKyAgICBlbWl0R2V0QnlJZChmdW5jUHJvdG8uZ2V0KCks
IGZ1bmMsIGdsb2JhbERhdGEoKS0+cHJvcGVydHlOYW1lcy0+cHJvdG90eXBlKTsKKwogICAgIC8v
IFJlc2VydmUgc3BhY2UgZm9yIGNhbGwgZnJhbWUuCiAgICAgVmVjdG9yPFJlZlB0cjxSZWdpc3Rl
cklEPiwgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplPiBjYWxsRnJhbWU7CiAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemU7ICsr
aSkKQEAgLTEyMTgsNiArMTIzOCwxMSBAQCBSZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjplbWl0
Q29uc3RydWN0CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7CiAgICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFyZ3ZbMF0tPmluZGV4KCkpOwogCisgICAgaWYgKG1fc2hv
dWxkRW1pdFByb2ZpbGVIb29rcykgeworICAgICAgICBlbWl0T3Bjb2RlKG9wX3Byb2ZpbGVfZGlk
X2NhbGwpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZnVuYy0+aW5kZXgoKSk7Cisg
ICAgfQorCiAgICAgcmV0dXJuIGRzdDsKIH0KIApJbmRleDogSmF2YVNjcmlwdENvcmUvVk0vQ29k
ZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL1ZNL0NvZGVHZW5lcmF0
b3IuaAkocmV2aXNpb24gMzc2NzkpCisrKyBKYXZhU2NyaXB0Q29yZS9WTS9Db2RlR2VuZXJhdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwOCw2ICs0MDgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgYm9vbCBjYW5PcHRpbWl6ZU5vbkxvY2FscygpIHsgcmV0dXJuIChtX2NvZGVUeXBlID09
IEZ1bmN0aW9uQ29kZSkgJiYgIW1fZHluYW1pY1Njb3BlRGVwdGggJiYgIW1fY29kZUJsb2NrLT51
c2VzRXZhbDsgfQogCiAgICAgICAgIGJvb2wgbV9zaG91bGRFbWl0RGVidWdIb29rczsKKyAgICAg
ICAgYm9vbCBtX3Nob3VsZEVtaXRQcm9maWxlSG9va3M7CiAKICAgICAgICAgY29uc3QgU2NvcGVD
aGFpbiogbV9zY29wZUNoYWluOwogICAgICAgICBTeW1ib2xUYWJsZSogbV9zeW1ib2xUYWJsZTsK
SW5kZXg6IEphdmFTY3JpcHRDb3JlL1ZNL01hY2hpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL1ZNL01hY2hpbmUuY3BwCShyZXZpc2lvbiAzNzY3OSkKKysrIEphdmFTY3JpcHRD
b3JlL1ZNL01hY2hpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01ODksMTAgKzU4OSw2IEBAIE5F
VkVSX0lOTElORSBKU1ZhbHVlKiBNYWNoaW5lOjpjYWxsRXZhbCgKICAgICBpZiAoIXByb2dyYW0t
PmlzU3RyaW5nKCkpCiAgICAgICAgIHJldHVybiBwcm9ncmFtOwogCi0gICAgUHJvZmlsZXIqKiBw
cm9maWxlciA9IFByb2ZpbGVyOjplbmFibGVkUHJvZmlsZXJSZWZlcmVuY2UoKTsKLSAgICBpZiAo
KnByb2ZpbGVyKQotICAgICAgICAoKnByb2ZpbGVyKS0+d2lsbEV4ZWN1dGUoY2FsbEZyYW1lLCBz
Y29wZUNoYWluLT5nbG9iYWxPYmplY3QoKS0+ZXZhbEZ1bmN0aW9uKCkpOwotCiAgICAgVVN0cmlu
ZyBwcm9ncmFtU291cmNlID0gc3RhdGljX2Nhc3Q8SlNTdHJpbmcqPihwcm9ncmFtKS0+dmFsdWUo
KTsKIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsK
QEAgLTYwMiw5ICs1OTgsNiBAQCBORVZFUl9JTkxJTkUgSlNWYWx1ZSogTWFjaGluZTo6Y2FsbEV2
YWwoCiAgICAgaWYgKGV2YWxOb2RlKQogICAgICAgICByZXN1bHQgPSBjYWxsRnJhbWUtPmdsb2Jh
bERhdGEoKS5tYWNoaW5lLT5leGVjdXRlKGV2YWxOb2RlLmdldCgpLCBjYWxsRnJhbWUsIHRoaXNP
YmosIGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkgLSByZWdpc3RlckZpbGUtPnN0YXJ0KCkgKyBhcmd2
ICsgMSArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSwgc2NvcGVDaGFpbiwgJmV4
Y2VwdGlvblZhbHVlKTsKIAotICAgIGlmICgqcHJvZmlsZXIpCi0gICAgICAgICgqcHJvZmlsZXIp
LT5kaWRFeGVjdXRlKGNhbGxGcmFtZSwgc2NvcGVDaGFpbi0+Z2xvYmFsT2JqZWN0KCktPmV2YWxG
dW5jdGlvbigpKTsKLQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTg0NCw2ICs4MzcsMTYg
QEAgTkVWRVJfSU5MSU5FIEluc3RydWN0aW9uKiBNYWNoaW5lOjp0aHJvdwogICAgICAgICBkZWJ1
Z2dlci0+ZXhjZXB0aW9uKGRlYnVnZ2VyQ2FsbEZyYW1lLCBjb2RlQmxvY2stPm93bmVyTm9kZS0+
c291cmNlSUQoKSwgY29kZUJsb2NrLT5saW5lTnVtYmVyRm9yVlBDKHZQQykpOwogICAgIH0KIAor
ICAgIC8vIElmIHdlIHRocm93IGluIHRoZSBtaWRkbGUgb2YgYSBjYWxsIGluc3RydWN0aW9uLCB3
ZSBuZWVkIHRvIG5vdGlmeQorICAgIC8vIHRoZSBwcm9maWxlciBtYW51YWxseSB0aGF0IHRoZSBj
YWxsIGluc3RydWN0aW9uIGhhcyByZXR1cm5lZCwgc2luY2UKKyAgICAvLyB3ZSdsbCBuZXZlciBy
ZWFjaCB0aGUgcmVsZXZhbnQgb3BfcHJvZmlsZV9kaWRfY2FsbC4KKyAgICBpZiAoUHJvZmlsZXIq
IHByb2ZpbGVyID0gKlByb2ZpbGVyOjplbmFibGVkUHJvZmlsZXJSZWZlcmVuY2UoKSkgeworICAg
ICAgICBpZiAoaXNDYWxsT3Bjb2RlKHZQQ1swXS51Lm9wY29kZSkpCisgICAgICAgICAgICBwcm9m
aWxlci0+ZGlkRXhlY3V0ZShjYWxsRnJhbWUsIGNhbGxGcmFtZVt2UENbMl0udS5vcGVyYW5kXS5q
c1ZhbHVlKGNhbGxGcmFtZSkpOworICAgICAgICBlbHNlIGlmICh2UENbOF0udS5vcGNvZGUgPT0g
Z2V0T3Bjb2RlKG9wX2NvbnN0cnVjdCkpCisgICAgICAgICAgICBwcm9maWxlci0+ZGlkRXhlY3V0
ZShjYWxsRnJhbWUsIGNhbGxGcmFtZVt2UENbMTBdLnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJh
bWUpKTsKKyAgICB9CisKICAgICAvLyBDYWxjdWxhdGUgYW4gZXhjZXB0aW9uIGhhbmRsZXIgdlBD
LCB1bndpbmRpbmcgY2FsbCBmcmFtZXMgYXMgbmVjZXNzYXJ5LgogCiAgICAgaW50IHNjb3BlRGVw
dGg7CkBAIC05OTMsNiArOTk2LDkgQEAgSlNWYWx1ZSogTWFjaGluZTo6ZXhlY3V0ZShGdW5jdGlv
bkJvZHlObwogI2VuZGlmCiAgICAgbV9yZWVudHJ5RGVwdGgtLTsKIAorICAgIGlmICgqcHJvZmls
ZXIpCisgICAgICAgICgqcHJvZmlsZXIpLT5kaWRFeGVjdXRlKG5ld0NhbGxGcmFtZSwgZnVuY3Rp
b24pOworCiAgICAgTUFDSElORV9TQU1QTElOR19wcml2YXRlRXhlY3V0ZVJldHVybmVkKCk7CiAK
ICAgICBtX3JlZ2lzdGVyRmlsZS5zaHJpbmsob2xkRW5kKTsKQEAgLTIxNDgsMTAgKzIxNTQsMTAg
QEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICAgICBS
YWlzZXMgYW4gZXhjZXB0aW9uIGlmIHJlZ2lzdGVyIGNvbnN0cnVjdG9yIGlzIG5vdCBhbgogICAg
ICAgICAgICBvYmplY3QuCiAgICAgICAgICovCi0gICAgICAgIGludCBkc3QgPSAoKyt2UEMpLT51
Lm9wZXJhbmQ7Ci0gICAgICAgIGludCB2YWx1ZSA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAg
ICAgaW50IGJhc2UgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBiYXNlUHJvdG8g
PSAoKyt2UEMpLT51Lm9wZXJhbmQ7CisgICAgICAgIGludCBkc3QgPSB2UENbMV0udS5vcGVyYW5k
OworICAgICAgICBpbnQgdmFsdWUgPSB2UENbMl0udS5vcGVyYW5kOworICAgICAgICBpbnQgYmFz
ZSA9IHZQQ1szXS51Lm9wZXJhbmQ7CisgICAgICAgIGludCBiYXNlUHJvdG8gPSB2UENbNF0udS5v
cGVyYW5kOwogCiAgICAgICAgIEpTVmFsdWUqIGJhc2VWYWwgPSBjYWxsRnJhbWVbYmFzZV0uanNW
YWx1ZShjYWxsRnJhbWUpOwogCkBAIC0yMTYxLDcgKzIxNjcsNyBAQCBKU1ZhbHVlKiBNYWNoaW5l
Ojpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAgIEpTT2JqZWN0KiBiYXNlT2JqID0gc3Rh
dGljX2Nhc3Q8SlNPYmplY3QqPihiYXNlVmFsKTsKICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBq
c0Jvb2xlYW4oYmFzZU9iai0+c3RydWN0dXJlSUQoKS0+dHlwZUluZm8oKS5pbXBsZW1lbnRzSGFz
SW5zdGFuY2UoKSA/IGJhc2VPYmotPmhhc0luc3RhbmNlKGNhbGxGcmFtZSwgY2FsbEZyYW1lW3Zh
bHVlXS5qc1ZhbHVlKGNhbGxGcmFtZSksIGNhbGxGcmFtZVtiYXNlUHJvdG9dLmpzVmFsdWUoY2Fs
bEZyYW1lKSkgOiBmYWxzZSk7CiAKLSAgICAgICAgKyt2UEM7CisgICAgICAgIHZQQyArPSA1Owog
ICAgICAgICBORVhUX09QQ09ERTsKICAgICB9CiAgICAgQkVHSU5fT1BDT0RFKG9wX3R5cGVvZikg
ewpAQCAtMzIwOCwxMiArMzIxNCwxMSBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0
ZShFeGVjdXRpCiAgICAgICAgICAgIG9wY29kZSkuIE90aGVyd2lzZSwgYWN0IGV4YWN0bHkgYXMg
dGhlICJjYWxsIiBvcGNvZGUgd291bGQuCiAgICAgICAgICAqLwogCi0gICAgICAgIGludCBkc3Qg
PSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBmdW5jID0gKCsrdlBDKS0+dS5vcGVy
YW5kOwotICAgICAgICBpbnQgdGhpc1ZhbCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAg
aW50IGZpcnN0QXJnID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBpbnQgYXJnQ291bnQg
PSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICsrdlBDOyAvLyByZWdpc3Rlck9mZnNldAor
ICAgICAgICBpbnQgZHN0ID0gdlBDWzFdLnUub3BlcmFuZDsKKyAgICAgICAgaW50IGZ1bmMgPSB2
UENbMl0udS5vcGVyYW5kOworICAgICAgICBpbnQgdGhpc1ZhbCA9IHZQQ1szXS51Lm9wZXJhbmQ7
CisgICAgICAgIGludCBmaXJzdEFyZyA9IHZQQ1s0XS51Lm9wZXJhbmQ7CisgICAgICAgIGludCBh
cmdDb3VudCA9IHZQQ1s1XS51Lm9wZXJhbmQ7CiAKICAgICAgICAgSlNWYWx1ZSogZnVuY1ZhbCA9
IGNhbGxGcmFtZVtmdW5jXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAgICAgICAgIEpTVmFsdWUqIGJh
c2VWYWwgPSBjYWxsRnJhbWVbdGhpc1ZhbF0uanNWYWx1ZShjYWxsRnJhbWUpOwpAQCAtMzIyNywx
NCArMzIzMiwxMyBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAK
ICAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0gcmVzdWx0OwogCi0gICAgICAgICAgICArK3ZQ
QzsKKyAgICAgICAgICAgIHZQQyArPSA3OwogICAgICAgICAgICAgTkVYVF9PUENPREU7CiAgICAg
ICAgIH0KIAogICAgICAgICAvLyBXZSBkaWRuJ3QgZmluZCB0aGUgYmxlc3NlZCB2ZXJzaW9uIG9m
IGV2YWwsIHNvIHJlc2V0IHZQQyBhbmQgcHJvY2VzcwogICAgICAgICAvLyB0aGlzIGluc3RydWN0
aW9uIGFzIGEgbm9ybWFsIGZ1bmN0aW9uIGNhbGwsIHN1cHBseWluZyB0aGUgcHJvcGVyICd0aGlz
JwogICAgICAgICAvLyB2YWx1ZS4KLSAgICAgICAgdlBDIC09IDY7CiAgICAgICAgIGNhbGxGcmFt
ZVt0aGlzVmFsXSA9IGJhc2VWYWwtPnRvVGhpc09iamVjdChjYWxsRnJhbWUpOwogCiAjaWYgSEFW
RShDT01QVVRFRF9HT1RPKQpAQCAtMzI4MiwxMiArMzI4NiwxMiBAQCBKU1ZhbHVlKiBNYWNoaW5l
Ojpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAgICAgIGVuY291bnRlcmVkLgogICAgICAg
ICAgKi8KIAotICAgICAgICBpbnQgZHN0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBp
bnQgZnVuYyA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAgaW50IHRoaXNWYWwgPSAoKyt2
UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBmaXJzdEFyZyA9ICgrK3ZQQyktPnUub3BlcmFu
ZDsKLSAgICAgICAgaW50IGFyZ0NvdW50ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBp
bnQgcmVnaXN0ZXJPZmZzZXQgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CisgICAgICAgIGludCBkc3Qg
PSB2UENbMV0udS5vcGVyYW5kOworICAgICAgICBpbnQgZnVuYyA9IHZQQ1syXS51Lm9wZXJhbmQ7
CisgICAgICAgIGludCB0aGlzVmFsID0gdlBDWzNdLnUub3BlcmFuZDsKKyAgICAgICAgaW50IGZp
cnN0QXJnID0gdlBDWzRdLnUub3BlcmFuZDsKKyAgICAgICAgaW50IGFyZ0NvdW50ID0gdlBDWzVd
LnUub3BlcmFuZDsKKyAgICAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gdlBDWzZdLnUub3BlcmFu
ZDsKIAogICAgICAgICBKU1ZhbHVlKiB2ID0gY2FsbEZyYW1lW2Z1bmNdLmpzVmFsdWUoY2FsbEZy
YW1lKTsKIApAQCAtMzMxMCwxMSArMzMxNCw3IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVF
eGVjdXRlKEV4ZWN1dGkKICAgICAgICAgICAgICAgICBnb3RvIHZtX3Rocm93OwogICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICBjYWxsRnJhbWUtPmluaXQobmV3Q29kZUJsb2NrLCB2UEMgKyAx
LCBjYWxsRGF0YVNjb3BlQ2hhaW4sIHByZXZpb3VzQ2FsbEZyYW1lLCBkc3QsIGFyZ0NvdW50LCBz
dGF0aWNfY2FzdDxKU0Z1bmN0aW9uKj4odikpOwotICAgIAotICAgICAgICAgICAgaWYgKCplbmFi
bGVkUHJvZmlsZXJSZWZlcmVuY2UpCi0gICAgICAgICAgICAgICAgKCplbmFibGVkUHJvZmlsZXJS
ZWZlcmVuY2UpLT53aWxsRXhlY3V0ZShjYWxsRnJhbWUsIHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4o
dikpOwotCisgICAgICAgICAgICBjYWxsRnJhbWUtPmluaXQobmV3Q29kZUJsb2NrLCB2UEMgKyA3
LCBjYWxsRGF0YVNjb3BlQ2hhaW4sIHByZXZpb3VzQ2FsbEZyYW1lLCBkc3QsIGFyZ0NvdW50LCBz
dGF0aWNfY2FzdDxKU0Z1bmN0aW9uKj4odikpOwogICAgICAgICAgICAgdlBDID0gbmV3Q29kZUJs
b2NrLT5pbnN0cnVjdGlvbnMuYmVnaW4oKTsKIAogI2lmIERVTVBfT1BDT0RFX1NUQVRTCkBAIC0z
MzMwLDEwICszMzMwLDcgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0
aQogCiAgICAgICAgICAgICBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiA9IGNhbGxGcmFtZS0+
c2NvcGVDaGFpbigpOwogICAgICAgICAgICAgQ2FsbEZyYW1lKiBuZXdDYWxsRnJhbWUgPSBDYWxs
RnJhbWU6OmNyZWF0ZShjYWxsRnJhbWUtPnJlZ2lzdGVycygpICsgcmVnaXN0ZXJPZmZzZXQpOwot
ICAgICAgICAgICAgbmV3Q2FsbEZyYW1lLT5pbml0KDAsIHZQQyArIDEsIHNjb3BlQ2hhaW4sIGNh
bGxGcmFtZSwgZHN0LCBhcmdDb3VudCwgc3RhdGljX2Nhc3Q8SlNGdW5jdGlvbio+KHYpKTsKLQot
ICAgICAgICAgICAgaWYgKCplbmFibGVkUHJvZmlsZXJSZWZlcmVuY2UpCi0gICAgICAgICAgICAg
ICAgKCplbmFibGVkUHJvZmlsZXJSZWZlcmVuY2UpLT53aWxsRXhlY3V0ZShuZXdDYWxsRnJhbWUs
IHN0YXRpY19jYXN0PEpTRnVuY3Rpb24qPih2KSk7CisgICAgICAgICAgICBuZXdDYWxsRnJhbWUt
PmluaXQoMCwgdlBDICsgNywgc2NvcGVDaGFpbiwgY2FsbEZyYW1lLCBkc3QsIGFyZ0NvdW50LCBz
dGF0aWNfY2FzdDxKU0Z1bmN0aW9uKj4odikpOwogCiAgICAgICAgICAgICBNQUNISU5FX1NBTVBM
SU5HX2NhbGxpbmdIb3N0RnVuY3Rpb24oKTsKIApAQCAtMzM0MiwxMCArMzMzOSw3IEBAIEpTVmFs
dWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKIAogICAgICAgICAgICAgY2FsbEZy
YW1lW2RzdF0gPSByZXR1cm5WYWx1ZTsKIAotICAgICAgICAgICAgaWYgKCplbmFibGVkUHJvZmls
ZXJSZWZlcmVuY2UpCi0gICAgICAgICAgICAgICAgKCplbmFibGVkUHJvZmlsZXJSZWZlcmVuY2Up
LT5kaWRFeGVjdXRlKGNhbGxGcmFtZSwgc3RhdGljX2Nhc3Q8SlNGdW5jdGlvbio+KHYpKTsKLQot
ICAgICAgICAgICAgKyt2UEM7CisgICAgICAgICAgICB2UEMgKz0gNzsKICAgICAgICAgICAgIE5F
WFRfT1BDT0RFOwogICAgICAgICB9CiAKQEAgLTMzODUsOSArMzM3OSw2IEBAIEpTVmFsdWUqIE1h
Y2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKIAogICAgICAgICBpbnQgcmVzdWx0ID0gKCsr
dlBDKS0+dS5vcGVyYW5kOwogCi0gICAgICAgIGlmICgqZW5hYmxlZFByb2ZpbGVyUmVmZXJlbmNl
KQotICAgICAgICAgICAgKCplbmFibGVkUHJvZmlsZXJSZWZlcmVuY2UpLT5kaWRFeGVjdXRlKGNh
bGxGcmFtZSwgY2FsbEZyYW1lLT5jYWxsZWUoKSk7Ci0KICAgICAgICAgaWYgKGNhbGxGcmFtZS0+
Y29kZUJsb2NrKCktPm5lZWRzRnVsbFNjb3BlQ2hhaW4pCiAgICAgICAgICAgICBjYWxsRnJhbWUt
PnNjb3BlQ2hhaW4oKS0+ZGVyZWYoKTsKIApAQCAtMzQ5OSwxMiArMzQ5MCwxMiBAQCBKU1ZhbHVl
KiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAgICAgIGNhY2hpbmcgb2Yg
dGhpcyBsb29rdXAuCiAgICAgICAgICovCiAKLSAgICAgICAgaW50IGRzdCA9ICgrK3ZQQyktPnUu
b3BlcmFuZDsKLSAgICAgICAgaW50IGNvbnN0ciA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAg
ICAgaW50IGNvbnN0clByb3RvID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBpbnQgZmly
c3RBcmcgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBhcmdDb3VudCA9ICgrK3ZQ
QyktPnUub3BlcmFuZDsKLSAgICAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gKCsrdlBDKS0+dS5v
cGVyYW5kOworICAgICAgICBpbnQgZHN0ID0gdlBDWzFdLnUub3BlcmFuZDsKKyAgICAgICAgaW50
IGNvbnN0ciA9IHZQQ1syXS51Lm9wZXJhbmQ7CisgICAgICAgIGludCBjb25zdHJQcm90byA9IHZQ
Q1szXS51Lm9wZXJhbmQ7CisgICAgICAgIGludCBmaXJzdEFyZyA9IHZQQ1s0XS51Lm9wZXJhbmQ7
CisgICAgICAgIGludCBhcmdDb3VudCA9IHZQQ1s1XS51Lm9wZXJhbmQ7CisgICAgICAgIGludCBy
ZWdpc3Rlck9mZnNldCA9IHZQQ1s2XS51Lm9wZXJhbmQ7CiAKICAgICAgICAgSlNWYWx1ZSogdiA9
IGNhbGxGcmFtZVtjb25zdHJdLmpzVmFsdWUoY2FsbEZyYW1lKTsKIApAQCAtMzUxMiw5ICszNTAz
LDYgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICBD
b25zdHJ1Y3RUeXBlIGNvbnN0cnVjdFR5cGUgPSB2LT5nZXRDb25zdHJ1Y3REYXRhKGNvbnN0cnVj
dERhdGEpOwogCiAgICAgICAgIGlmIChjb25zdHJ1Y3RUeXBlID09IENvbnN0cnVjdFR5cGVKUykg
ewotICAgICAgICAgICAgaWYgKCplbmFibGVkUHJvZmlsZXJSZWZlcmVuY2UpCi0gICAgICAgICAg
ICAgICAgKCplbmFibGVkUHJvZmlsZXJSZWZlcmVuY2UpLT53aWxsRXhlY3V0ZShjYWxsRnJhbWUs
IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4odikpOwotCiAgICAgICAgICAgICBTY29wZUNoYWluTm9k
ZSogY2FsbERhdGFTY29wZUNoYWluID0gY29uc3RydWN0RGF0YS5qcy5zY29wZUNoYWluOwogICAg
ICAgICAgICAgRnVuY3Rpb25Cb2R5Tm9kZSogZnVuY3Rpb25Cb2R5Tm9kZSA9IGNvbnN0cnVjdERh
dGEuanMuZnVuY3Rpb25Cb2R5OwogICAgICAgICAgICAgQ29kZUJsb2NrKiBuZXdDb2RlQmxvY2sg
PSAmZnVuY3Rpb25Cb2R5Tm9kZS0+Ynl0ZUNvZGUoY2FsbERhdGFTY29wZUNoYWluKTsKQEAgLTM1
MzgsMTEgKzM1MjYsOCBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRp
CiAgICAgICAgICAgICAgICAgZ290byB2bV90aHJvdzsKICAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgY2FsbEZyYW1lLT5pbml0KG5ld0NvZGVCbG9jaywgdlBDICsgMSwgY2FsbERhdGFTY29w
ZUNoYWluLCBwcmV2aW91c0NhbGxGcmFtZSwgZHN0LCBhcmdDb3VudCwgc3RhdGljX2Nhc3Q8SlNG
dW5jdGlvbio+KHYpKTsKKyAgICAgICAgICAgIGNhbGxGcmFtZS0+aW5pdChuZXdDb2RlQmxvY2ss
IHZQQyArIDcsIGNhbGxEYXRhU2NvcGVDaGFpbiwgcHJldmlvdXNDYWxsRnJhbWUsIGRzdCwgYXJn
Q291bnQsIHN0YXRpY19jYXN0PEpTRnVuY3Rpb24qPih2KSk7CiAgICAgCi0gICAgICAgICAgICBp
ZiAoKmVuYWJsZWRQcm9maWxlclJlZmVyZW5jZSkKLSAgICAgICAgICAgICAgICAoKmVuYWJsZWRQ
cm9maWxlclJlZmVyZW5jZSktPmRpZEV4ZWN1dGUoY2FsbEZyYW1lLCBzdGF0aWNfY2FzdDxKU09i
amVjdCo+KHYpKTsKLQogICAgICAgICAgICAgdlBDID0gbmV3Q29kZUJsb2NrLT5pbnN0cnVjdGlv
bnMuYmVnaW4oKTsKIAogI2lmIERVTVBfT1BDT0RFX1NUQVRTCkBAIC0zNTU2LDEyICszNTQxLDkg
QEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICAgICAg
QXJnTGlzdCBhcmdzKGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkgKyBmaXJzdEFyZyArIDEsIGFyZ0Nv
dW50IC0gMSk7CiAKICAgICAgICAgICAgIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluID0gY2Fs
bEZyYW1lLT5zY29wZUNoYWluKCk7Ci0gICAgICAgICAgICBDYWxsRnJhbWU6OmNyZWF0ZShjYWxs
RnJhbWUtPnJlZ2lzdGVycygpICsgcmVnaXN0ZXJPZmZzZXQpLT5pbml0KDAsIHZQQyArIDEsIHNj
b3BlQ2hhaW4sIGNhbGxGcmFtZSwgZHN0LCBhcmdDb3VudCwgc3RhdGljX2Nhc3Q8SlNGdW5jdGlv
bio+KHYpKTsKKyAgICAgICAgICAgIENhbGxGcmFtZTo6Y3JlYXRlKGNhbGxGcmFtZS0+cmVnaXN0
ZXJzKCkgKyByZWdpc3Rlck9mZnNldCktPmluaXQoMCwgdlBDICsgNywgc2NvcGVDaGFpbiwgY2Fs
bEZyYW1lLCBkc3QsIGFyZ0NvdW50LCBzdGF0aWNfY2FzdDxKU0Z1bmN0aW9uKj4odikpOwogICAg
ICAgICAgICAgY2FsbEZyYW1lID0gQ2FsbEZyYW1lOjpjcmVhdGUoY2FsbEZyYW1lLT5yZWdpc3Rl
cnMoKSArIHJlZ2lzdGVyT2Zmc2V0KTsKIAotICAgICAgICAgICAgaWYgKCplbmFibGVkUHJvZmls
ZXJSZWZlcmVuY2UpCi0gICAgICAgICAgICAgICAgKCplbmFibGVkUHJvZmlsZXJSZWZlcmVuY2Up
LT53aWxsRXhlY3V0ZShjYWxsRnJhbWUsIHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4odikpOwotCiAg
ICAgICAgICAgICBNQUNISU5FX1NBTVBMSU5HX2NhbGxpbmdIb3N0RnVuY3Rpb24oKTsKIAogICAg
ICAgICAgICAgSlNWYWx1ZSogcmV0dXJuVmFsdWUgPSBjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5j
dGlvbihjYWxsRnJhbWUsIHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4odiksIGFyZ3MpOwpAQCAtMzU3
MCwxMCArMzU1Miw3IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkK
ICAgICAgICAgICAgIFZNX0NIRUNLX0VYQ0VQVElPTigpOwogICAgICAgICAgICAgY2FsbEZyYW1l
W2RzdF0gPSByZXR1cm5WYWx1ZTsKIAotICAgICAgICAgICAgaWYgKCplbmFibGVkUHJvZmlsZXJS
ZWZlcmVuY2UpCi0gICAgICAgICAgICAgICAgKCplbmFibGVkUHJvZmlsZXJSZWZlcmVuY2UpLT5k
aWRFeGVjdXRlKGNhbGxGcmFtZSwgc3RhdGljX2Nhc3Q8SlNPYmplY3QqPih2KSk7Ci0KLSAgICAg
ICAgICAgICsrdlBDOworICAgICAgICAgICAgdlBDICs9IDc7CiAgICAgICAgICAgICBORVhUX09Q
Q09ERTsKICAgICAgICAgfQogCkBAIC0zODg0LDYgKzM4NjMsMzQgQEAgSlNWYWx1ZSogTWFjaGlu
ZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICArK3ZQQzsKICAgICAgICAgTkVYVF9P
UENPREU7CiAgICAgfQorICAgIEJFR0lOX09QQ09ERShvcF9wcm9maWxlX3dpbGxfY2FsbCkgewor
ICAgICAgICAvKiBvcF9wcm9maWxlX3dpbGxfY2FsbCBmdW5jdGlvbihyKQorCisgICAgICAgICBO
b3RpZmllcyB0aGUgcHJvZmlsZXIgb2YgdGhlIGJlZ2lubmluZyBvZiBhIGZ1bmN0aW9uIGNhbGwu
IFRoaXMgb3Bjb2RlCisgICAgICAgICBpcyBvbmx5IGdlbmVyYXRlZCBpZiBkZXZlbG9wZXIgdG9v
bHMgYXJlIGVuYWJsZWQuCisgICAgICAgICovCisgICAgICAgIGludCBmdW5jdGlvbiA9IHZQQ1sx
XS51Lm9wZXJhbmQ7CisKKyAgICAgICAgaWYgKCplbmFibGVkUHJvZmlsZXJSZWZlcmVuY2UpCisg
ICAgICAgICAgICAoKmVuYWJsZWRQcm9maWxlclJlZmVyZW5jZSktPndpbGxFeGVjdXRlKGNhbGxG
cmFtZSwgY2FsbEZyYW1lW2Z1bmN0aW9uXS5qc1ZhbHVlKGNhbGxGcmFtZSkpOworCisgICAgICAg
IHZQQyArPSAyOworICAgICAgICBORVhUX09QQ09ERTsKKyAgICB9CisgICAgQkVHSU5fT1BDT0RF
KG9wX3Byb2ZpbGVfZGlkX2NhbGwpIHsKKyAgICAgICAgLyogb3BfcHJvZmlsZV9kaWRfY2FsbCBm
dW5jdGlvbihyKQorCisgICAgICAgICBOb3RpZmllcyB0aGUgcHJvZmlsZXIgb2YgdGhlIGVuZCBv
ZiBhIGZ1bmN0aW9uIGNhbGwuIFRoaXMgb3Bjb2RlCisgICAgICAgICBpcyBvbmx5IGdlbmVyYXRl
ZCBpZiBkZXZlbG9wZXIgdG9vbHMgYXJlIGVuYWJsZWQuCisgICAgICAgICovCisgICAgICAgIGlu
dCBmdW5jdGlvbiA9IHZQQ1sxXS51Lm9wZXJhbmQ7CisKKyAgICAgICAgaWYgKCplbmFibGVkUHJv
ZmlsZXJSZWZlcmVuY2UpCisgICAgICAgICAgICAoKmVuYWJsZWRQcm9maWxlclJlZmVyZW5jZSkt
PmRpZEV4ZWN1dGUoY2FsbEZyYW1lLCBjYWxsRnJhbWVbZnVuY3Rpb25dLmpzVmFsdWUoY2FsbEZy
YW1lKSk7CisKKyAgICAgICAgdlBDICs9IDI7CisgICAgICAgIE5FWFRfT1BDT0RFOworICAgIH0K
ICAgICB2bV90aHJvdzogewogICAgICAgICBnbG9iYWxEYXRhLT5leGNlcHRpb24gPSAwOwogICAg
ICAgICBpZiAoIXRpY2tDb3VudCkgewpAQCAtNDYyNywxNCArNDYzNCw2IEBAIEpTVmFsdWUqIE1h
Y2hpbmU6OmN0aV9vcF9uZXdfZnVuYyhDVElfQVIKICAgICByZXR1cm4gQVJHX2Z1bmMxLT5tYWtl
RnVuY3Rpb24oQVJHX2NhbGxGcmFtZSwgQVJHX2NhbGxGcmFtZS0+c2NvcGVDaGFpbigpKTsKIH0K
IAotdm9pZCBNYWNoaW5lOjpjdGlfb3BfY2FsbF9wcm9maWxlcihDVElfQVJHUykKLXsKLSAgICBD
VElfU1RBQ0tfSEFDSygpOwotCi0gICAgQVNTRVJUKCpBUkdfcHJvZmlsZXJSZWZlcmVuY2UpOwot
ICAgICgqQVJHX3Byb2ZpbGVyUmVmZXJlbmNlKS0+d2lsbEV4ZWN1dGUoQVJHX2NhbGxGcmFtZSwg
c3RhdGljX2Nhc3Q8SlNGdW5jdGlvbio+KEFSR19zcmMxKSk7Ci19Ci0KIFZvaWRQdHJQYWlyIE1h
Y2hpbmU6OmN0aV9vcF9jYWxsX0pTRnVuY3Rpb24oQ1RJX0FSR1MpCiB7CiAgICAgQ1RJX1NUQUNL
X0hBQ0soKTsKQEAgLTQ3NDIsOSArNDc0MSw2IEBAIEpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9j
YWxsX05vdEpTRnVuY3QKICAgICAgICAgY2FsbEZyYW1lLT5pbml0KDAsIEFSR19pbnN0cjQgKyAx
LCBwcmV2aW91c0NhbGxGcmFtZS0+c2NvcGVDaGFpbigpLCBwcmV2aW91c0NhbGxGcmFtZSwgMCwg
YXJnQ291bnQsIHN0YXRpY19jYXN0PEpTRnVuY3Rpb24qPihmdW5jVmFsKSk7CiAgICAgICAgIEFS
R19zZXRDYWxsRnJhbWUoY2FsbEZyYW1lKTsKIAotICAgICAgICBpZiAoKkFSR19wcm9maWxlclJl
ZmVyZW5jZSkKLSAgICAgICAgICAgICgqQVJHX3Byb2ZpbGVyUmVmZXJlbmNlKS0+d2lsbEV4ZWN1
dGUoY2FsbEZyYW1lLCBzdGF0aWNfY2FzdDxKU0Z1bmN0aW9uKj4oZnVuY1ZhbCkpOwotCiAgICAg
ICAgIFJlZ2lzdGVyKiBhcmd2ID0gQVJHX2NhbGxGcmFtZS0+cmVnaXN0ZXJzKCkgLSBSZWdpc3Rl
ckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUgLSBhcmdDb3VudDsKICAgICAgICAgQXJnTGlzdCBh
cmdMaXN0KGFyZ3YgKyAxLCBhcmdDb3VudCAtIDEpOwogCkBAIC00NzU0LDkgKzQ3NTAsNiBAQCBK
U1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfY2FsbF9Ob3RKU0Z1bmN0CiAgICAgICAgIEFSR19zZXRD
YWxsRnJhbWUocHJldmlvdXNDYWxsRnJhbWUpOwogICAgICAgICBWTV9DSEVDS19FWENFUFRJT04o
KTsKIAotICAgICAgICBpZiAoKkFSR19wcm9maWxlclJlZmVyZW5jZSkKLSAgICAgICAgICAgICgq
QVJHX3Byb2ZpbGVyUmVmZXJlbmNlKS0+ZGlkRXhlY3V0ZShwcmV2aW91c0NhbGxGcmFtZSwgc3Rh
dGljX2Nhc3Q8SlNGdW5jdGlvbio+KGZ1bmNWYWwpKTsKLQogICAgICAgICByZXR1cm4gcmV0dXJu
VmFsdWU7CiAgICAgfQogCkBAIC00Nzc3LDYgKzQ3NzAsOCBAQCB2b2lkIE1hY2hpbmU6OmN0aV9v
cF9jcmVhdGVfYXJndW1lbnRzKENUCiAKIHZvaWQgTWFjaGluZTo6Y3RpX29wX2NyZWF0ZV9hcmd1
bWVudHNfbm9fcGFyYW1zKENUSV9BUkdTKQogeworICAgIENUSV9TVEFDS19IQUNLKCk7CisKICAg
ICBBcmd1bWVudHMqIGFyZ3VtZW50cyA9IG5ldyAoQVJHX2dsb2JhbERhdGEpIEFyZ3VtZW50cyhB
UkdfY2FsbEZyYW1lLCBBcmd1bWVudHM6OkFyZ3VtZW50c05vUGFyYW1ldGVycyk7CiAgICAgQVJH
X2NhbGxGcmFtZS0+c2V0Q2FsbGVlQXJndW1lbnRzKGFyZ3VtZW50cyk7CiAgICAgQVJHX2NhbGxG
cmFtZVtSZWdpc3RlckZpbGU6OkFyZ3VtZW50c1JlZ2lzdGVyXSA9IGFyZ3VtZW50czsKQEAgLTQ3
OTksMTIgKzQ3OTQsMjAgQEAgdm9pZCBNYWNoaW5lOjpjdGlfb3BfdGVhcl9vZmZfYXJndW1lbnRz
KAogICAgIEFSR19jYWxsRnJhbWUtPm9wdGlvbmFsQ2FsbGVlQXJndW1lbnRzKCktPmNvcHlSZWdp
c3RlcnMoKTsKIH0KIAotdm9pZCBNYWNoaW5lOjpjdGlfb3BfcmV0X3Byb2ZpbGVyKENUSV9BUkdT
KQordm9pZCBNYWNoaW5lOjpjdGlfb3BfcHJvZmlsZV93aWxsX2NhbGwoQ1RJX0FSR1MpCiB7CiAg
ICAgQ1RJX1NUQUNLX0hBQ0soKTsKIAogICAgIEFTU0VSVCgqQVJHX3Byb2ZpbGVyUmVmZXJlbmNl
KTsKLSAgICAoKkFSR19wcm9maWxlclJlZmVyZW5jZSktPmRpZEV4ZWN1dGUoQVJHX2NhbGxGcmFt
ZSwgQVJHX2NhbGxGcmFtZS0+Y2FsbGVlKCkpOworICAgICgqQVJHX3Byb2ZpbGVyUmVmZXJlbmNl
KS0+d2lsbEV4ZWN1dGUoQVJHX2NhbGxGcmFtZSwgQVJHX3NyYzEpOworfQorCit2b2lkIE1hY2hp
bmU6OmN0aV9vcF9wcm9maWxlX2RpZF9jYWxsKENUSV9BUkdTKQoreworICAgIENUSV9TVEFDS19I
QUNLKCk7CisKKyAgICBBU1NFUlQoKkFSR19wcm9maWxlclJlZmVyZW5jZSk7CisgICAgKCpBUkdf
cHJvZmlsZXJSZWZlcmVuY2UpLT5kaWRFeGVjdXRlKEFSR19jYWxsRnJhbWUsIEFSR19zcmMxKTsK
IH0KIAogdm9pZCBNYWNoaW5lOjpjdGlfb3BfcmV0X3Njb3BlQ2hhaW4oQ1RJX0FSR1MpCkBAIC00
OTQ3LDkgKzQ5NTAsNiBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfY29uc3RydWN0X05vdEpT
CiAgICAgSlNPYmplY3QqIGNvbnN0cnVjdG9yID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihjb25z
dHJWYWwpOwogCiAgICAgaWYgKGNvbnN0cnVjdFR5cGUgPT0gQ29uc3RydWN0VHlwZUhvc3QpIHsK
LSAgICAgICAgaWYgKCpBUkdfcHJvZmlsZXJSZWZlcmVuY2UpCi0gICAgICAgICAgICAoKkFSR19w
cm9maWxlclJlZmVyZW5jZSktPndpbGxFeGVjdXRlKGNhbGxGcmFtZSwgY29uc3RydWN0b3IpOwot
CiAgICAgICAgIEFyZ0xpc3QgYXJnTGlzdChjYWxsRnJhbWUtPnJlZ2lzdGVycygpICsgZmlyc3RB
cmcgKyAxLCBhcmdDb3VudCAtIDEpOwogCiAgICAgICAgIENUSV9NQUNISU5FX1NBTVBMSU5HX2Nh
bGxpbmdIb3N0RnVuY3Rpb24oKTsKQEAgLTQ5NTcsOSArNDk1Nyw2IEBAIEpTVmFsdWUqIE1hY2hp
bmU6OmN0aV9vcF9jb25zdHJ1Y3RfTm90SlMKICAgICAgICAgSlNWYWx1ZSogcmV0dXJuVmFsdWUg
PSBjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbihjYWxsRnJhbWUsIGNvbnN0cnVjdG9yLCBh
cmdMaXN0KTsKICAgICAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OKCk7CiAKLSAgICAgICAgaWYgKCpB
UkdfcHJvZmlsZXJSZWZlcmVuY2UpCi0gICAgICAgICAgICAoKkFSR19wcm9maWxlclJlZmVyZW5j
ZSktPmRpZEV4ZWN1dGUoY2FsbEZyYW1lLCBjb25zdHJ1Y3Rvcik7Ci0KICAgICAgICAgcmV0dXJu
IHJldHVyblZhbHVlOwogICAgIH0KIApJbmRleDogSmF2YVNjcmlwdENvcmUvVk0vTWFjaGluZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL1ZNL01hY2hpbmUuaAkocmV2aXNpb24gMzc2
NzkpCisrKyBKYXZhU2NyaXB0Q29yZS9WTS9NYWNoaW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4
OSw2ICsxODksOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIHZvaWQgU0ZYX0NB
TEwgY3RpX29wX2NyZWF0ZV9hcmd1bWVudHNfbm9fcGFyYW1zKENUSV9BUkdTKTsKICAgICAgICAg
c3RhdGljIHZvaWQgU0ZYX0NBTEwgY3RpX29wX3RlYXJfb2ZmX2FjdGl2YXRpb24oQ1RJX0FSR1Mp
OwogICAgICAgICBzdGF0aWMgdm9pZCBTRlhfQ0FMTCBjdGlfb3BfdGVhcl9vZmZfYXJndW1lbnRz
KENUSV9BUkdTKTsKKyAgICAgICAgc3RhdGljIHZvaWQgU0ZYX0NBTEwgY3RpX29wX3Byb2ZpbGVf
d2lsbF9jYWxsKENUSV9BUkdTKTsKKyAgICAgICAgc3RhdGljIHZvaWQgU0ZYX0NBTEwgY3RpX29w
X3Byb2ZpbGVfZGlkX2NhbGwoQ1RJX0FSR1MpOwogICAgICAgICBzdGF0aWMgdm9pZCBTRlhfQ0FM
TCBjdGlfb3BfcmV0X3Njb3BlQ2hhaW4oQ1RJX0FSR1MpOwogICAgICAgICBzdGF0aWMgSlNWYWx1
ZSogU0ZYX0NBTEwgY3RpX29wX25ld19hcnJheShDVElfQVJHUyk7CiAgICAgICAgIHN0YXRpYyBK
U1ZhbHVlKiBTRlhfQ0FMTCBjdGlfb3BfcmVzb2x2ZShDVElfQVJHUyk7CkBAIC0yNTYsOSArMjU4
LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBTRlhfQ0FMTCBj
dGlfb3BfbmV3X2Vycm9yKENUSV9BUkdTKTsKICAgICAgICAgc3RhdGljIHZvaWQgU0ZYX0NBTEwg
Y3RpX29wX2RlYnVnKENUSV9BUkdTKTsKIAotICAgICAgICBzdGF0aWMgdm9pZCBTRlhfQ0FMTCBj
dGlfb3BfY2FsbF9wcm9maWxlcihDVElfQVJHUyk7Ci0gICAgICAgIHN0YXRpYyB2b2lkIFNGWF9D
QUxMIGN0aV9vcF9yZXRfcHJvZmlsZXIoQ1RJX0FSR1MpOwotCiAgICAgICAgIHN0YXRpYyB2b2lk
KiBTRlhfQ0FMTCBjdGlfdm1fdGhyb3coQ1RJX0FSR1MpOwogICAgICAgICBzdGF0aWMgdm9pZCog
U0ZYX0NBTEwgY3RpX3ZtX2NvbXBpbGUoQ1RJX0FSR1MpOwogICAgICAgICBzdGF0aWMgdm9pZCog
U0ZYX0NBTEwgY3RpX3ZtX2xhenlMaW5rQ2FsbChDVElfQVJHUyk7CkBAIC0zMDcsNiArMzA2LDgg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgdW5jYWNoZUdldEJ5SUQoQ29kZUJsb2Nr
KiwgSW5zdHJ1Y3Rpb24qIHZQQyk7CiAgICAgICAgIHZvaWQgdHJ5Q2FjaGVQdXRCeUlEKENhbGxG
cmFtZSosIENvZGVCbG9jayosIEluc3RydWN0aW9uKiwgSlNWYWx1ZSogYmFzZVZhbHVlLCBjb25z
dCBQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgdm9pZCB1bmNhY2hlUHV0QnlJRChDb2RlQmxv
Y2sqLCBJbnN0cnVjdGlvbiogdlBDKTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgaXNDYWxsT3Bj
b2RlKE9wY29kZSBvcGNvZGUpIHsgcmV0dXJuIG9wY29kZSA9PSBnZXRPcGNvZGUob3BfY2FsbCkg
fHwgb3Bjb2RlID09IGdldE9wY29kZShvcF9jb25zdHJ1Y3QpIHx8IG9wY29kZSA9PSBnZXRPcGNv
ZGUob3BfY2FsbF9ldmFsKTsgfQogCiAjaWYgRU5BQkxFKENUSSkKICAgICAgICAgdm9pZCB0cnlD
VElDYWNoZUdldEJ5SUQoQ2FsbEZyYW1lKiwgQ29kZUJsb2NrKiwgdm9pZCogcmV0dXJuQWRkcmVz
cywgSlNWYWx1ZSogYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNv
bnN0IFByb3BlcnR5U2xvdCYpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvVk0vT3Bjb2RlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvVk0vT3Bjb2RlLmgJKHJldmlzaW9uIDM3Njc5KQor
KysgSmF2YVNjcmlwdENvcmUvVk0vT3Bjb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1OSw2ICsx
NTksOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgbWFjcm8ob3Bfc3JldCkgXAogICAgICAg
ICBcCiAgICAgICAgIG1hY3JvKG9wX2RlYnVnKSBcCisgICAgICAgIG1hY3JvKG9wX3Byb2ZpbGVf
d2lsbF9jYWxsKSBcCisgICAgICAgIG1hY3JvKG9wX3Byb2ZpbGVfZGlkX2NhbGwpIFwKICAgICAg
ICAgXAogICAgICAgICBtYWNybyhvcF9lbmQpIC8vIGVuZCBtdXN0IGJlIHRoZSBsYXN0IG9wY29k
ZSBpbiB0aGUgbGlzdAogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvSlNHbG9iYWxPYmplY3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvSlNHbG9iYWxPYmplY3QuaAkocmV2
aXNpb24gMzc2NzkpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvSlNHbG9iYWxPYmplY3QuaAkod29y
a2luZyBjb3B5KQpAQCAtMjIyLDYgKzIyMiw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBE
ZWJ1Z2dlciogZGVidWdnZXIoKSBjb25zdCB7IHJldHVybiBkKCktPmRlYnVnZ2VyOyB9CiAgICAg
ICAgIHZvaWQgc2V0RGVidWdnZXIoRGVidWdnZXIqIGRlYnVnZ2VyKSB7IGQoKS0+ZGVidWdnZXIg
PSBkZWJ1Z2dlcjsgfQogICAgICAgICAKKyAgICAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzUHJv
ZmlsaW5nKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAgICAgCiAgICAgICAgIGludCBy
ZWN1cnNpb24oKSB7IHJldHVybiBkKCktPnJlY3Vyc2lvbjsgfQogICAgICAgICB2b2lkIGluY1Jl
Y3Vyc2lvbigpIHsgKytkKCktPnJlY3Vyc2lvbjsgfQogICAgICAgICB2b2lkIGRlY1JlY3Vyc2lv
bigpIHsgLS1kKCktPnJlY3Vyc2lvbjsgfQpJbmRleDogSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIv
UHJvZmlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2Zp
bGVyLmNwcAkocmV2aXNpb24gMzc2NzkpCisrKyBKYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9m
aWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMSwxMSArMTAxLDExIEBAIHN0YXRpYyBpbmxp
bmUgdm9pZCBkaXNwYXRjaEZ1bmN0aW9uVG9Qcm8KICAgICB9CiB9CiAKLXZvaWQgUHJvZmlsZXI6
OndpbGxFeGVjdXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGNhbGxlZEZ1bmN0aW9uKQor
dm9pZCBQcm9maWxlcjo6d2lsbEV4ZWN1dGUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiBmdW5j
dGlvbikKIHsKICAgICBBU1NFUlQoIW1fY3VycmVudFByb2ZpbGVzLmlzRW1wdHkoKSk7CiAKLSAg
ICBkaXNwYXRjaEZ1bmN0aW9uVG9Qcm9maWxlcyhtX2N1cnJlbnRQcm9maWxlcywgJlByb2ZpbGVH
ZW5lcmF0b3I6OndpbGxFeGVjdXRlLCBjcmVhdGVDYWxsSWRlbnRpZmllcigmZXhlYy0+Z2xvYmFs
RGF0YSgpLCBjYWxsZWRGdW5jdGlvbiwgIiIsIDApLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCktPnByb2ZpbGVHcm91cCgpKTsKKyAgICBkaXNwYXRjaEZ1bmN0aW9uVG9Qcm9maWxlcyhtX2N1
cnJlbnRQcm9maWxlcywgJlByb2ZpbGVHZW5lcmF0b3I6OndpbGxFeGVjdXRlLCBjcmVhdGVDYWxs
SWRlbnRpZmllcigmZXhlYy0+Z2xvYmFsRGF0YSgpLCBmdW5jdGlvbiwgIiIsIDApLCBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCktPnByb2ZpbGVHcm91cCgpKTsKIH0KIAogdm9pZCBQcm9maWxl
cjo6d2lsbEV4ZWN1dGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBVU3RyaW5nJiBzb3VyY2VVUkws
IGludCBzdGFydGluZ0xpbmVOdW1iZXIpCkBAIC0xMTcsMTEgKzExNywxMSBAQCB2b2lkIFByb2Zp
bGVyOjp3aWxsRXhlY3V0ZShFeGVjU3RhdGUqIGV4CiAgICAgZGlzcGF0Y2hGdW5jdGlvblRvUHJv
ZmlsZXMobV9jdXJyZW50UHJvZmlsZXMsICZQcm9maWxlR2VuZXJhdG9yOjp3aWxsRXhlY3V0ZSwg
Y2FsbElkZW50aWZpZXIsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cHJvZmlsZUdyb3Vw
KCkpOwogfQogCi12b2lkIFByb2ZpbGVyOjpkaWRFeGVjdXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIGNhbGxlZEZ1bmN0aW9uKQordm9pZCBQcm9maWxlcjo6ZGlkRXhlY3V0ZShFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUqIGZ1bmN0aW9uKQogewogICAgIEFTU0VSVCghbV9jdXJyZW50UHJv
ZmlsZXMuaXNFbXB0eSgpKTsKIAotICAgIGRpc3BhdGNoRnVuY3Rpb25Ub1Byb2ZpbGVzKG1fY3Vy
cmVudFByb2ZpbGVzLCAmUHJvZmlsZUdlbmVyYXRvcjo6ZGlkRXhlY3V0ZSwgY3JlYXRlQ2FsbElk
ZW50aWZpZXIoJmV4ZWMtPmdsb2JhbERhdGEoKSwgY2FsbGVkRnVuY3Rpb24sICIiLCAwKSwgZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5wcm9maWxlR3JvdXAoKSk7CisgICAgZGlzcGF0Y2hG
dW5jdGlvblRvUHJvZmlsZXMobV9jdXJyZW50UHJvZmlsZXMsICZQcm9maWxlR2VuZXJhdG9yOjpk
aWRFeGVjdXRlLCBjcmVhdGVDYWxsSWRlbnRpZmllcigmZXhlYy0+Z2xvYmFsRGF0YSgpLCBmdW5j
dGlvbiwgIiIsIDApLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnByb2ZpbGVHcm91cCgp
KTsKIH0KIAogdm9pZCBQcm9maWxlcjo6ZGlkRXhlY3V0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IFVTdHJpbmcmIHNvdXJjZVVSTCwgaW50IHN0YXJ0aW5nTGluZU51bWJlcikKQEAgLTEzMSwxOCAr
MTMxLDE3IEBAIHZvaWQgUHJvZmlsZXI6OmRpZEV4ZWN1dGUoRXhlY1N0YXRlKiBleGUKICAgICBk
aXNwYXRjaEZ1bmN0aW9uVG9Qcm9maWxlcyhtX2N1cnJlbnRQcm9maWxlcywgJlByb2ZpbGVHZW5l
cmF0b3I6OmRpZEV4ZWN1dGUsIGNyZWF0ZUNhbGxJZGVudGlmaWVyKCZleGVjLT5nbG9iYWxEYXRh
KCksIDAsIHNvdXJjZVVSTCwgc3RhcnRpbmdMaW5lTnVtYmVyKSwgZXhlYy0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpLT5wcm9maWxlR3JvdXAoKSk7CiB9CiAKLUNhbGxJZGVudGlmaWVyIFByb2ZpbGVy
OjpjcmVhdGVDYWxsSWRlbnRpZmllcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEpTT2JqZWN0
KiBjYWxsZWRGdW5jdGlvbiwgY29uc3QgVVN0cmluZyYgZGVmYXVsdFNvdXJjZVVSTCwgaW50IGRl
ZmF1bHRMaW5lTnVtYmVyKQorQ2FsbElkZW50aWZpZXIgUHJvZmlsZXI6OmNyZWF0ZUNhbGxJZGVu
dGlmaWVyKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgSlNWYWx1ZSogZnVuY3Rpb24sIGNvbnN0
IFVTdHJpbmcmIGRlZmF1bHRTb3VyY2VVUkwsIGludCBkZWZhdWx0TGluZU51bWJlcikKIHsKLSAg
ICBpZiAoIWNhbGxlZEZ1bmN0aW9uKQorICAgIGlmICghZnVuY3Rpb24pCiAgICAgICAgIHJldHVy
biBDYWxsSWRlbnRpZmllcihHbG9iYWxDb2RlRXhlY3V0aW9uLCBkZWZhdWx0U291cmNlVVJMLCBk
ZWZhdWx0TGluZU51bWJlcik7Ci0KLSAgICBpZiAoY2FsbGVkRnVuY3Rpb24tPmluaGVyaXRzKCZK
U0Z1bmN0aW9uOjppbmZvKSkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUNhbGxJZGVudGlmaWVyRnJv
bUZ1bmN0aW9uSW1wKGdsb2JhbERhdGEsIHN0YXRpY19jYXN0PEpTRnVuY3Rpb24qPihjYWxsZWRG
dW5jdGlvbikpOwotICAgIGlmIChjYWxsZWRGdW5jdGlvbi0+aW5oZXJpdHMoJkludGVybmFsRnVu
Y3Rpb246OmluZm8pKQotICAgICAgICByZXR1cm4gQ2FsbElkZW50aWZpZXIoc3RhdGljX2Nhc3Q8
SW50ZXJuYWxGdW5jdGlvbio+KGNhbGxlZEZ1bmN0aW9uKS0+bmFtZShnbG9iYWxEYXRhKSwgZGVm
YXVsdFNvdXJjZVVSTCwgZGVmYXVsdExpbmVOdW1iZXIpOwotCi0gICAgVVN0cmluZyBuYW1lID0g
IigiICsgY2FsbGVkRnVuY3Rpb24tPmNsYXNzTmFtZSgpICsgIiBvYmplY3QpIjsKLSAgICByZXR1
cm4gQ2FsbElkZW50aWZpZXIobmFtZSwgZGVmYXVsdFNvdXJjZVVSTCwgZGVmYXVsdExpbmVOdW1i
ZXIpOworICAgIGlmICghZnVuY3Rpb24tPmlzT2JqZWN0KCkpCisgICAgICAgIHJldHVybiBDYWxs
SWRlbnRpZmllcigiKHVua25vd24pIiwgZGVmYXVsdFNvdXJjZVVSTCwgZGVmYXVsdExpbmVOdW1i
ZXIpOworICAgIGlmIChzdGF0aWNfY2FzdDxKU09iamVjdCo+KGZ1bmN0aW9uKS0+aW5oZXJpdHMo
JkpTRnVuY3Rpb246OmluZm8pKQorICAgICAgICByZXR1cm4gY3JlYXRlQ2FsbElkZW50aWZpZXJG
cm9tRnVuY3Rpb25JbXAoZ2xvYmFsRGF0YSwgc3RhdGljX2Nhc3Q8SlNGdW5jdGlvbio+KGZ1bmN0
aW9uKSk7CisgICAgaWYgKHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4oZnVuY3Rpb24pLT5pbmhlcml0
cygmSW50ZXJuYWxGdW5jdGlvbjo6aW5mbykpCisgICAgICAgIHJldHVybiBDYWxsSWRlbnRpZmll
cihzdGF0aWNfY2FzdDxJbnRlcm5hbEZ1bmN0aW9uKj4oZnVuY3Rpb24pLT5uYW1lKGdsb2JhbERh
dGEpLCBkZWZhdWx0U291cmNlVVJMLCBkZWZhdWx0TGluZU51bWJlcik7CisgICAgcmV0dXJuIENh
bGxJZGVudGlmaWVyKCIoIiArIHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4oZnVuY3Rpb24pLT5jbGFz
c05hbWUoKSArICIgb2JqZWN0KSIsIGRlZmF1bHRTb3VyY2VVUkwsIGRlZmF1bHRMaW5lTnVtYmVy
KTsKIH0KIAogQ2FsbElkZW50aWZpZXIgY3JlYXRlQ2FsbElkZW50aWZpZXJGcm9tRnVuY3Rpb25J
bXAoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBKU0Z1bmN0aW9uKiBmdW5jdGlvbikKSW5kZXg6
IEphdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNj
cmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXIuaAkocmV2aXNpb24gMzc2NzkpCisrKyBKYXZhU2Ny
aXB0Q29yZS9wcm9maWxlci9Qcm9maWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSwxNCArNTEs
MTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgUHJvZmls
ZXIqIHByb2ZpbGVyKCk7IAotICAgICAgICBzdGF0aWMgQ2FsbElkZW50aWZpZXIgY3JlYXRlQ2Fs
bElkZW50aWZpZXIoSlNHbG9iYWxEYXRhKiwgSlNPYmplY3QqLCBjb25zdCBVU3RyaW5nJiBzb3Vy
Y2VVUkwsIGludCBsaW5lTnVtYmVyKTsKKyAgICAgICAgc3RhdGljIENhbGxJZGVudGlmaWVyIGNy
ZWF0ZUNhbGxJZGVudGlmaWVyKEpTR2xvYmFsRGF0YSosIEpTVmFsdWUqLCBjb25zdCBVU3RyaW5n
JiBzb3VyY2VVUkwsIGludCBsaW5lTnVtYmVyKTsKIAogICAgICAgICB2b2lkIHN0YXJ0UHJvZmls
aW5nKEV4ZWNTdGF0ZSosIGNvbnN0IFVTdHJpbmcmIHRpdGxlKTsKICAgICAgICAgUGFzc1JlZlB0
cjxQcm9maWxlPiBzdG9wUHJvZmlsaW5nKEV4ZWNTdGF0ZSosIGNvbnN0IFVTdHJpbmcmIHRpdGxl
KTsKIAotICAgICAgICB2b2lkIHdpbGxFeGVjdXRlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiBjYWxs
ZWRGdW5jdGlvbik7CisgICAgICAgIHZvaWQgd2lsbEV4ZWN1dGUoRXhlY1N0YXRlKiwgSlNWYWx1
ZSogZnVuY3Rpb24pOwogICAgICAgICB2b2lkIHdpbGxFeGVjdXRlKEV4ZWNTdGF0ZSosIGNvbnN0
IFVTdHJpbmcmIHNvdXJjZVVSTCwgaW50IHN0YXJ0aW5nTGluZU51bWJlcik7Ci0gICAgICAgIHZv
aWQgZGlkRXhlY3V0ZShFeGVjU3RhdGUqLCBKU09iamVjdCogY2FsbGVkRnVuY3Rpb24pOworICAg
ICAgICB2b2lkIGRpZEV4ZWN1dGUoRXhlY1N0YXRlKiwgSlNWYWx1ZSogZnVuY3Rpb24pOwogICAg
ICAgICB2b2lkIGRpZEV4ZWN1dGUoRXhlY1N0YXRlKiwgY29uc3QgVVN0cmluZyYgc291cmNlVVJM
LCBpbnQgc3RhcnRpbmdMaW5lTnVtYmVyKTsKIAogICAgICAgICBjb25zdCBWZWN0b3I8UmVmUHRy
PFByb2ZpbGVHZW5lcmF0b3I+ID4mIGN1cnJlbnRQcm9maWxlcygpIHsgcmV0dXJuIG1fY3VycmVu
dFByb2ZpbGVzOyB9OwpJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM3NjgyKQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwzMiBAQAorMjAwOC0xMC0xOCAgR2VvZmZyZXkgR2FyZW4g
IDxnZ2FyZW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEZpeGVkIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMTczNQorICAgICAgICBFbWl0IHByb2ZpbGluZyBpbnN0cnVtZW50YXRpb24gb25seSBpZiB0
aGUgV2ViIEluc3BlY3RvcidzIHByb2ZpbGluZworICAgICAgICBmZWF0dXJlIGlzIGVuYWJsZWQg
b24gdGhlIHRhcmdldCBwYWdlCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jh
c2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpzdXBwb3J0c1Byb2Zp
bGluZyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmg6IEltcGxlbWVu
dGVkIHRoZSBpbnRlcmZhY2UgZm9yIHNwZWNpZnlpbmcKKyAgICAgICAgd2hldGhlciBhIHRhcmdl
dCBnbG9iYWwgb2JqZWN0IGhhcyB0aGUgV2ViIEluc3BlY3RvcidzIHByb2ZpbGluZyBmZWF0dXJl
CisgICAgICAgIGVuYWJsZWQuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvSmF2YVNjcmlwdERlYnVn
U2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6cmVj
b21waWxlQWxsSlNGdW5jdGlvbnNTb29uKToKKyAgICAgICAgKFdlYkNvcmU6OkphdmFTY3JpcHRE
ZWJ1Z1NlcnZlcjo6ZGlkQWRkTGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6SmF2YVNjcmlw
dERlYnVnU2VydmVyOjpkaWRSZW1vdmVMaXN0ZW5lcik6CisgICAgICAgICogaW5zcGVjdG9yL0ph
dmFTY3JpcHREZWJ1Z1NlcnZlci5oOiBFeHBvcnRlZCBhbiBBUEkgZm9yIHJlY29tcGlsaW5nLCAK
KyAgICAgICAgdXNlZCBieSB0aGUgU2V0dGluZ3Mgb2JqZWN0LgorCisgICAgICAgICogcGFnZS9T
ZXR0aW5ncy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZXR0aW5nczo6U2V0dGluZ3MpOgorICAg
ICAgICAoV2ViQ29yZTo6U2V0dGluZ3M6OnNldERldmVsb3BlckV4dHJhc0VuYWJsZWQpOgorICAg
ICAgICAqIHBhZ2UvU2V0dGluZ3MuaDogUmVjb21waWxlIHdoZW4gdGhlIGRldmVsb3BlciBtZW51
IGlzIGVuYWJsZWQvZGlzYWJsZWQKKyAgICAgICAgZm9yIHRoZSBmaXJzdCB0aW1lLCB0byBhZGQv
cmVtb3ZlIHByb2ZpbGluZyBob29rcy4gSW4gdGhlIGZ1dHVyZSwgd2l0aAorICAgICAgICBiZXR0
ZXIgV2ViIEluc3BlY3RvciBVSSwgd2UgY2FuIGRvIHRoaXMgb24gYSBwYWdlLWJ5LXBhZ2UgYmFz
aXMsCisgICAgICAgIGluc3RlYWQgb2YgYSBnbG9iYWwgYmFzaXMuCisKIDIwMDgtMTAtMTggIERh
cmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE9saXZl
ciBIdW50LgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAkocmV2
aXNpb24gMzc2NzkpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY5Miw2ICs2OTIsMTkgQEAgRXhlY1N0YXRlKiBKU0RPTVdpbmRv
d0Jhc2U6Omdsb2JhbEV4ZWMoKQogICAgIHJldHVybiBCYXNlOjpnbG9iYWxFeGVjKCk7CiB9CiAK
K2Jvb2wgSlNET01XaW5kb3dCYXNlOjpzdXBwb3J0c1Byb2ZpbGluZygpIGNvbnN0Cit7CisgICAg
RnJhbWUqIGZyYW1lID0gaW1wbCgpLT5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGZyYW1lLT5zZXR0aW5n
cygpOworICAgIGlmICghc2V0dGluZ3MpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAg
ICByZXR1cm4gc2V0dGluZ3MtPmRldmVsb3BlckV4dHJhc0VuYWJsZWQoKTsKK30KKwogYm9vbCBK
U0RPTVdpbmRvd0Jhc2U6OnNob3VsZEludGVycnVwdFNjcmlwdCgpIGNvbnN0CiB7CiAgICAgQVNT
RVJUKGltcGwoKS0+ZnJhbWUoKSk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2lu
ZG93QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dC
YXNlLmgJKHJldmlzaW9uIDM3Njc5KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRv
d0Jhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTEwLDYgKzExMCw4IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKIAogICAg
ICAgICB2aXJ0dWFsIEpTQzo6RXhlY1N0YXRlKiBnbG9iYWxFeGVjKCk7CisgICAgICAgIAorICAg
ICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNQcm9maWxpbmcoKSBjb25zdDsKIAogICAgICAgICB2
aXJ0dWFsIGJvb2wgc2hvdWxkSW50ZXJydXB0U2NyaXB0KCkgY29uc3Q7CiAKSW5kZXg6IFdlYkNv
cmUvaW5zcGVjdG9yL0phdmFTY3JpcHREZWJ1Z1NlcnZlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9pbnNwZWN0b3IvSmF2YVNjcmlwdERlYnVnU2VydmVyLmNwcAkocmV2aXNpb24gMzc2Nzkp
CisrKyBXZWJDb3JlL2luc3BlY3Rvci9KYXZhU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01MjgsNiArNTI4LDExIEBAIHZvaWQgSmF2YVNjcmlwdERlYnVnU2VydmVyOjpk
aWRSZWFjaEJyZWEKICAgICBwYXVzZUlmTmVlZGVkKHRvUGFnZShkZWJ1Z2dlckNhbGxGcmFtZS5k
eW5hbWljR2xvYmFsT2JqZWN0KCkpKTsKIH0KIAordm9pZCBKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6
OnJlY29tcGlsZUFsbEpTRnVuY3Rpb25zU29vbigpCit7CisgICAgbV9yZWNvbXBpbGVUaW1lci5z
dGFydE9uZVNob3QoMCk7Cit9CisKIHZvaWQgSmF2YVNjcmlwdERlYnVnU2VydmVyOjpyZWNvbXBp
bGVBbGxKU0Z1bmN0aW9ucyhUaW1lcjxKYXZhU2NyaXB0RGVidWdTZXJ2ZXI+KikKIHsKICAgICBK
U0xvY2sgbG9jayhmYWxzZSk7CkBAIC01ODMsNyArNTg4LDcgQEAgdm9pZCBKYXZhU2NyaXB0RGVi
dWdTZXJ2ZXI6OnJlY29tcGlsZUFsbAogCiB2b2lkIEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6ZGlk
QWRkTGlzdGVuZXIoUGFnZSogcGFnZSkKIHsKLSAgICBtX3JlY29tcGlsZVRpbWVyLnN0YXJ0T25l
U2hvdCgwKTsKKyAgICByZWNvbXBpbGVBbGxKU0Z1bmN0aW9uc1Nvb24oKTsKIAogICAgIGlmIChw
YWdlKQogICAgICAgICBwYWdlLT5zZXREZWJ1Z2dlcih0aGlzKTsKQEAgLTU5Niw3ICs2MDEsNyBA
QCB2b2lkIEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6ZGlkUmVtb3ZlTGlzCiAgICAgaWYgKGhhc0ds
b2JhbExpc3RlbmVycygpIHx8IChwYWdlICYmIGhhc0xpc3RlbmVyc0ludGVyZXN0ZWRJblBhZ2Uo
cGFnZSkpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3JlY29tcGlsZVRpbWVyLnN0YXJ0T25l
U2hvdCgwKTsKKyAgICByZWNvbXBpbGVBbGxKU0Z1bmN0aW9uc1Nvb24oKTsKIAogICAgIGlmIChw
YWdlKQogICAgICAgICBwYWdlLT5zZXREZWJ1Z2dlcigwKTsKSW5kZXg6IFdlYkNvcmUvaW5zcGVj
dG9yL0phdmFTY3JpcHREZWJ1Z1NlcnZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaW5zcGVj
dG9yL0phdmFTY3JpcHREZWJ1Z1NlcnZlci5oCShyZXZpc2lvbiAzNzY3OSkKKysrIFdlYkNvcmUv
aW5zcGVjdG9yL0phdmFTY3JpcHREZWJ1Z1NlcnZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3
ICs3Myw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBzdGVwT3ZlclN0YXRl
bWVudCgpOwogICAgICAgICB2b2lkIHN0ZXBPdXRPZkZ1bmN0aW9uKCk7CiAKLSAgICAgICAgdm9p
ZCByZWNvbXBpbGVBbGxKU0Z1bmN0aW9ucyhUaW1lcjxKYXZhU2NyaXB0RGVidWdTZXJ2ZXI+Kik7
CisgICAgICAgIHZvaWQgcmVjb21waWxlQWxsSlNGdW5jdGlvbnNTb29uKCk7CisgICAgICAgIHZv
aWQgcmVjb21waWxlQWxsSlNGdW5jdGlvbnMoVGltZXI8SmF2YVNjcmlwdERlYnVnU2VydmVyPiog
PSAwKTsKIAogICAgICAgICBKYXZhU2NyaXB0Q2FsbEZyYW1lKiBjdXJyZW50Q2FsbEZyYW1lKCk7
CiAKSW5kZXg6IFdlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wYWdlL1NldHRpbmdzLmNwcAkocmV2aXNpb24gMzc2NzkpCisrKyBXZWJDb3JlL3BhZ2UvU2V0
dGluZ3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw5ICsyOCwxMCBAQAogCiAjaW5jbHVkZSAi
RnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVRyZWUuaCIKKyNpbmNsdWRlICJIaXN0b3J5SXRlbS5o
IgorI2luY2x1ZGUgIkphdmFTY3JpcHREZWJ1Z1NlcnZlci5oIgogI2luY2x1ZGUgIlBhZ2UuaCIK
ICNpbmNsdWRlICJQYWdlQ2FjaGUuaCIKLSNpbmNsdWRlICJIaXN0b3J5SXRlbS5oIgogCiAjaWYg
RU5BQkxFKERBVEFCQVNFKQogI2luY2x1ZGUgIkRhdGFiYXNlVHJhY2tlci5oIgpAQCAtNzQsNiAr
NzUsNyBAQCBTZXR0aW5nczo6U2V0dGluZ3MoUGFnZSogcGFnZSkKICAgICAsIG1fc2hvd3NVUkxz
SW5Ub29sVGlwcyhmYWxzZSkKICAgICAsIG1fZm9yY2VGVFBEaXJlY3RvcnlMaXN0aW5ncyhmYWxz
ZSkKICAgICAsIG1fZGV2ZWxvcGVyRXh0cmFzRW5hYmxlZChmYWxzZSkKKyAgICAsIG1fZGlkSW5p
dGlhbGl6ZURldmVsb3BlckV4dHJhc0VuYWJsZWQoZmFsc2UpCiAgICAgLCBtX2F1dGhvckFuZFVz
ZXJTdHlsZXNFbmFibGVkKHRydWUpCiAgICAgLCBtX25lZWRzU2l0ZVNwZWNpZmljUXVpcmtzKGZh
bHNlKQogICAgICwgbV9mb250UmVuZGVyaW5nTW9kZSgwKQpAQCAtMzA4LDcgKzMxMCwxOCBAQCB2
b2lkIFNldHRpbmdzOjpzZXRGb3JjZUZUUERpcmVjdG9yeUxpc3RpCiAKIHZvaWQgU2V0dGluZ3M6
OnNldERldmVsb3BlckV4dHJhc0VuYWJsZWQoYm9vbCBkZXZlbG9wZXJFeHRyYXNFbmFibGVkKQog
eworICAgIGlmIChtX2RldmVsb3BlckV4dHJhc0VuYWJsZWQgPT0gZGV2ZWxvcGVyRXh0cmFzRW5h
YmxlZCkKKyAgICAgICAgcmV0dXJuOworCiAgICAgbV9kZXZlbG9wZXJFeHRyYXNFbmFibGVkID0g
ZGV2ZWxvcGVyRXh0cmFzRW5hYmxlZDsKKworICAgIC8vIEF2b2lkIHJlY29tcGlsaW5nIHdoZW4g
aW5pdGlhbGl6aW5nIGEgcGFnZS4KKyAgICBpZiAoIW1fZGlkSW5pdGlhbGl6ZURldmVsb3BlckV4
dHJhc0VuYWJsZWQpIHsKKyAgICAgICAgbV9kaWRJbml0aWFsaXplRGV2ZWxvcGVyRXh0cmFzRW5h
YmxlZCA9IHRydWU7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBKYXZhU2NyaXB0RGVi
dWdTZXJ2ZXI6OnNoYXJlZCgpLnJlY29tcGlsZUFsbEpTRnVuY3Rpb25zU29vbigpOwogfQogCiB2
b2lkIFNldHRpbmdzOjpzZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZChib29sIGF1dGhvckFu
ZFVzZXJTdHlsZXNFbmFibGVkKQpJbmRleDogV2ViQ29yZS9wYWdlL1NldHRpbmdzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wYWdlL1NldHRpbmdzLmgJKHJldmlzaW9uIDM3Njc5KQorKysgV2Vi
Q29yZS9wYWdlL1NldHRpbmdzLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxOCw2ICsyMTgsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgbV9zaG93c1VSTHNJblRvb2xUaXBzIDog
MTsKICAgICAgICAgYm9vbCBtX2ZvcmNlRlRQRGlyZWN0b3J5TGlzdGluZ3MgOiAxOwogICAgICAg
ICBib29sIG1fZGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCA6IDE7CisgICAgICAgIGJvb2wgbV9kaWRJ
bml0aWFsaXplRGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCA6IDE7CiAgICAgICAgIGJvb2wgbV9hdXRo
b3JBbmRVc2VyU3R5bGVzRW5hYmxlZCA6IDE7CiAgICAgICAgIGJvb2wgbV9uZWVkc1NpdGVTcGVj
aWZpY1F1aXJrcyA6IDE7CiAgICAgICAgIHVuc2lnbmVkIG1fZm9udFJlbmRlcmluZ01vZGUgOiAx
OwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L0NoYW5nZUxvZwkocmV2aXNpb24gMzc2ODMpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAwOC0xMC0xOCAgR2VvZmZyZXkgR2FyZW4g
IDxnZ2FyZW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFRlc3QgZm9yIGJ1Z3MgZml4ZWQgd2hpbGUgd29ya2luZyBvbiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE3MzUKKyAgICAgICAgRW1pdCBwcm9m
aWxpbmcgaW5zdHJ1bWVudGF0aW9uIG9ubHkgaWYgdGhlIFdlYiBJbnNwZWN0b3IncyBwcm9maWxp
bmcKKyAgICAgICAgZmVhdHVyZSBpcyBlbmFibGVkIG9uIHRoZSB0YXJnZXQgcGFnZQorCisgICAg
ICAgICogZmFzdC9qcy9leGNlcHRpb24tdGhyb3duLWZyb20tbmV3LWV4cGVjdGVkLnR4dDogQWRk
ZWQuCisgICAgICAgICogZmFzdC9qcy9leGNlcHRpb24tdGhyb3duLWZyb20tbmV3Lmh0bWw6IEFk
ZGVkLgorCiAyMDA4LTEwLTE3ICBQYW1lbGEgR3JlZW5lICA8cGFtQGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBBZGQgYSBudW1iZXIgb2YgbmV3IHRlc3RzLgpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC9qcy9leGNlcHRpb24tdGhyb3duLWZyb20tbmV3LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9mYXN0L2pzL2V4Y2VwdGlvbi10aHJvd24tZnJvbS1uZXctZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9leGNlcHRpb24tdGhyb3du
LWZyb20tbmV3LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1IEBACitUaGlz
IHBhZ2UgdGVzdHMgZXhjZXB0aW9ucyB0aHJvd24gZnJvbSAnbmV3JyBleHByZXNzaW9ucy4gSWYg
dGhlIHRlc3QgcGFzc2VzLCB5b3UnbGwgc2VlIGEgc2VyaWVzIG9mIFBBU1MgbWVzc2FnZXMgYmVs
b3cuCisKK1BBU1M6IGUxIHNob3VsZCBiZSAnVHlwZUVycm9yOiBSZXN1bHQgb2YgZXhwcmVzc2lv
biAnZicgW3VuZGVmaW5lZF0gaXMgbm90IGEgY29uc3RydWN0b3IuJyBhbmQgaXMuCitQQVNTOiBl
MiBzaG91bGQgYmUgJ1R5cGVFcnJvcjogUmVzdWx0IG9mIGV4cHJlc3Npb24gJ2cnIFt1bmRlZmlu
ZWRdIGlzIG5vdCBhIGZ1bmN0aW9uLicgYW5kIGlzLgorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0
L2pzL2V4Y2VwdGlvbi10aHJvd24tZnJvbS1uZXcuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L2pzL2V4Y2VwdGlvbi10aHJvd24tZnJvbS1uZXcuaHRtbAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2Zhc3QvanMvZXhjZXB0aW9uLXRocm93bi1mcm9tLW5ldy5odG1sCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ0IEBACis8cD4KK1RoaXMgcGFnZSB0ZXN0cyBleGNlcHRp
b25zIHRocm93biBmcm9tICduZXcnIGV4cHJlc3Npb25zLiBJZiB0aGUgdGVzdCBwYXNzZXMsCit5
b3UnbGwgc2VlIGEgc2VyaWVzIG9mIFBBU1MgbWVzc2FnZXMgYmVsb3cuCis8L3A+Cis8cHJlIGlk
PSJjb25zb2xlIj48L3ByZT4KKworPHNjcmlwdD4KK2Z1bmN0aW9uIGxvZyhzKQoreworICAgIGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlIikuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3Jl
YXRlVGV4dE5vZGUocyArICJcbiIpKTsKK30KKworZnVuY3Rpb24gc2hvdWxkQmUoYSwgYURlc2Ny
aXB0aW9uLCBiKQoreworICAgIGlmIChhID09IGIpIHsKKyAgICAgICAgbG9nKCJQQVNTOiAiICsg
YURlc2NyaXB0aW9uICsgIiBzaG91bGQgYmUgJyIgKyBTdHJpbmcoYikgKyAiJyBhbmQgaXMuIik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgbG9nICgiRkFJTDogIiArIGFEZXNj
cmlwdGlvbiArICIgc2hvdWxkIGJlICciICsgU3RyaW5nKGIpICsgIicgYnV0IGluc3RlYWQgaXMg
JyIgKyBTdHJpbmcoYSkgKyAiJy4iKTsKK30KKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJv
bGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisKKyhmdW5jdGlv
biAoKSB7CisgICAgdHJ5IHsKKyAgICAgICAgdmFyIGY7CisgICAgICAgIG5ldyBmOworICAgIH0g
Y2F0Y2goZTEpIHsKKyAgICAgICAgc2hvdWxkQmUoZTEsICJlMSIsICJUeXBlRXJyb3I6IFJlc3Vs
dCBvZiBleHByZXNzaW9uICdmJyBbdW5kZWZpbmVkXSBpcyBub3QgYSBjb25zdHJ1Y3Rvci4iKTsK
KyAgICB9Cit9KSgpOworCisoZnVuY3Rpb24gKCkgeworICAgIHRyeSB7CisgICAgICAgIHZhciBm
OworICAgICAgICB2YXIgZzsKKyAgICAgICAgbmV3IGYoZygpKTsKKyAgICB9IGNhdGNoKGUyKSB7
CisgICAgICAgIHNob3VsZEJlKGUyLCAiZTIiLCAiVHlwZUVycm9yOiBSZXN1bHQgb2YgZXhwcmVz
c2lvbiAnZycgW3VuZGVmaW5lZF0gaXMgbm90IGEgZnVuY3Rpb24uIik7CisgICAgfQorfSkoKTsK
Kzwvc2NyaXB0Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24496</attachid>
            <date>2008-10-18 17:55:58 -0700</date>
            <delta_ts>2008-10-18 23:06:58 -0700</delta_ts>
            <desc>patch - removed the comment tim mentioned</desc>
            <filename>patch-profile-opcodes.txt</filename>
            <type>text/plain</type>
            <size>46626</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM3Njc5KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTQgQEAKKzIwMDgtMTAtMTggIEdlb2ZmcmV5
IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIEZpeGVkIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMTczNQorICAgICAgICBFbWl0IHByb2ZpbGluZyBpbnN0cnVtZW50
YXRpb24gb25seSBpZiB0aGUgV2ViIEluc3BlY3RvcidzIHByb2ZpbGluZworICAgICAgICBmZWF0
dXJlIGlzIGVuYWJsZWQKKworICAgICAgICAyMi4yJSBzcGVlZHVwIG9uIGVtcHR5IGZ1bmN0aW9u
IGNhbGwgYmVuY2htYXJrLgorICAgICAgICAyLjklIHNwZWVkdXAgb24gdjggYmVuY2htYXJrLgor
ICAgICAgICAwLjclIHNwZWVkdXAgb24gU3VuU3BpZGVyLgorICAgICAgICAKKyAgICAgICAgTGVz
c2VyIGJ1dCBzaW1pbGFyIHNwZWVkdXBzIGluIGJ5dGVjb2RlLgorCisgICAgICAgICogVk0vQ1RJ
LmNwcDoKKyAgICAgICAgKEpTQzo6Q1RJOjpjb21waWxlT3BDYWxsKToKKyAgICAgICAgKEpTQzo6
Q1RJOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKToKKyAgICAgICAgKEpTQzo6Q1RJOjpwcml2YXRl
Q29tcGlsZVNsb3dDYXNlcyk6IE5peGVkIEpJVGVkIHByb2ZpbGVyIGhvb2tzLiBQcm9maWxlcgor
ICAgICAgICBob29rcyBub3cgaGF2ZSB0aGVpciBvd24gb3Bjb2Rlcy4gQWRkZWQgc3VwcG9ydCBm
b3IgY29tcGlsaW5nIHByb2ZpbGVyCisgICAgICAgIGhvb2sgb3Bjb2Rlcy4KKyAgICAgICAgCisg
ICAgICAgICogVk0vQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpwcmlu
dFN0cnVjdHVyZUlEcyk6IEZpeGVkIHVwIGFuIEFTU0VSVCBjYXVzZWQgYnkKKyAgICAgICAgR2F2
aW4ncyBsYXN0IGNoZWNraW4uIFRoaXMgaXMgYSB0ZW1wb3JhcnkgZml4IHNvIEkgY2FuIGtlZXAg
b24gbW92aW5nLgorICAgICAgICBJJ2xsIHNlbmQgZW1haWwgYWJvdXQgd2hhdCBJIHRoaW5rIGlz
IGFuIHVuZGVybHlpbmcgcHJvYmxlbSBzb29uLgorCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
ZHVtcCk6IER1bXAgc3VwcG9ydCBmb3IgdGhlIG5ldyBwcm9maWxpbmcgb3Bjb2Rlcy4KKworICAg
ICAgICAqIFZNL0NvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKiBWTS9Db2RlR2VuZXJhdG9yLmNw
cDoKKyAgICAgICAgKEpTQzo6Q29kZUdlbmVyYXRvcjo6Q29kZUdlbmVyYXRvcik6CisgICAgICAg
IChKU0M6OkNvZGVHZW5lcmF0b3I6OmVtaXRDYWxsKToKKyAgICAgICAgKEpTQzo6Q29kZUdlbmVy
YXRvcjo6ZW1pdENvbnN0cnVjdCk6IENvbmRpdGlvbmFsbHkgZW1pdCBwcm9maWxpbmcgaG9va3MK
KyAgICAgICAgYXJvdW5kIGNhbGwgYW5kIGNvbnN0cnVjdCwgYXQgdGhlIGNhbGwgc2l0ZS4gKEl0
J3MgZWFzaWVyIHRvIGdldCB0aGluZ3MKKyAgICAgICAgcmlnaHQgdGhpcyB3YXksIGlmIHlvdSBo
YXZlIHByb2ZpbGVkIGNvZGUgY2FsbGluZyBub24tcHJvZmlsZWQgY29kZS4KKyAgICAgICAgQWxz
bywgeW91IGdldCBhIHNsaWdodGx5IG1vcmUgYWNjdXJhdGUgcHJvZmlsZSwgc2luY2UgeW91IGNo
YXJnZSB0aGUgZnVsbAorICAgICAgICBjb3N0IG9mIHRoZSBjYWxsIC8gY29uc3RydWN0IG9wZXJh
dGlvbiB0byB0aGUgY2FsbGVlLikKKyAgICAgICAgCisgICAgICAgIEFsc28sIGZpeGVkIGEgYnVn
IHdoZXJlIGNvbnN0cnVjdCB3b3VsZCBmZXRjaCB0aGUgIi5wcm90b3R5cGUiIHByb3BlcnR5Cisg
ICAgICAgIGZyb20gdGhlIGNvbnN0cnVjdG9yIGJlZm9yZSBldmFsdWF0aW5nIHRoZSBhcmd1bWVu
dHMgdG8gdGhlIGNvbnN0cnVjdG9yLAorICAgICAgICBpbmNvcnJlY3RseSBhbGxvd2luZyBhbiAi
aW52YWxpZCBjb25zdHJ1Y3RvciIgZXhjZXB0aW9uIHRvIHNob3J0LWNpcmN1aXQKKyAgICAgICAg
YXJndW1lbnQgZXZhbHVhdGlvbi4gSSBlbmNvdW50ZXJlZCB0aGlzIGJ1ZyB3aGVuIHRyeWluZyB0
byBtYWtlCisgICAgICAgIGNvbnN0cnVjdG9yIGV4Y2VwdGlvbnMgd29yayB3aXRoIHByb2ZpbGlu
Zy4KKworICAgICAgICAqIFZNL01hY2hpbmUuY3BwOgorICAgICAgICAoSlNDOjpNYWNoaW5lOjpj
YWxsRXZhbCk6IFJlbW92ZWQgb2Jzb2xldGUgcHJvZmlsZXIgaG9va3MuCisKKyAgICAgICAgKEpT
Qzo6TWFjaGluZTo6dGhyb3dFeGNlcHRpb24pOiBBZGRlZCBhIGNoZWNrIGZvciBhbiBleGNlcHRp
b24gdGhyb3duCisgICAgICAgIHdpdGhpbiBhIGNhbGwgaW5zdHJ1Y3Rpb24uIFdlIGRpZG4ndCBu
ZWVkIHRoaXMgYmVmb3JlIGJlY2F1c2UgdGhlIGNhbGwKKyAgICAgICAgaW5zdHJ1Y3Rpb24gd291
bGQgY2hlY2sgZm9yIGEgdmFsaWQgY2FsbCBiZWZvcmUgaW52b2xpbmcgdGhlIHByb2ZpbGVyLgor
ICAgICAgICAoSlNDOjpNYWNoaW5lOjpleGVjdXRlKTogQWRkZWQgYSBkaWRFeGVjdXRlIGhvb2sg
YXQgdGhlIGVuZCBvZiB0b3AtbGV2ZWwKKyAgICAgICAgZnVuY3Rpb24gaW52b2NhdGlvbiwgc2lu
Y2Ugb3BfcmV0IG5vIGxvbmdlciBkb2VzIHRoaXMgZm9yIHVzLgorCisgICAgICAgIChKU0M6Ok1h
Y2hpbmU6OnByaXZhdGVFeGVjdXRlKTogUmVtb3ZlZCBvYnNvbGV0ZSBwcm9maWxlciBob29rcy4g
QWRkZWQKKyAgICAgICAgcHJvZmlsZXIgb3Bjb2Rlcy4gQ2hhbmdlZCBzb21lICsrdlBDIHRvIHZQ
Q1t4XSBub3RhdGlvbiwgc2luY2UgdGhlCisgICAgICAgIGxhdHRlciBpcyBiZXR0ZXIgZm9yIHBl
cmZvcm1hbmNlLCBhbmQgaXQgbWFrZXMgcmVhc29uaW5nIGFib3V0IHRoZQorICAgICAgICBjdXJy
ZW50IG9wY29kZSBpbiBleGNlcHRpb24gaGFuZGxpbmcgbXVjaCBzaW1wbGVyLgorCisgICAgICAg
IChKU0M6Ok1hY2hpbmU6OmN0aV9vcF9jYWxsX05vdEpTRnVuY3Rpb24pOiBSZW1vdmVkIG9ic29s
ZXRlIHByb2ZpbGVyCisgICAgICAgIGhvb2tzLgorCisgICAgICAgIChKU0M6Ok1hY2hpbmU6OmN0
aV9vcF9jcmVhdGVfYXJndW1lbnRzX25vX3BhcmFtcyk6IEFkZGVkIG1pc3NpbmcKKyAgICAgICAg
Q1RJX1NUQUNLX0hBQ0sgdGhhdCBJIG5vdGljZWQgd2hlbiBhZGRpbmcgQ1RJX1NUQUNLX0hBQ0sg
dG8gdGhlIG5ldworICAgICAgICBwcm9maWxlciBvcGNvZGUgZnVuY3Rpb25zLgorCisgICAgICAg
IChKU0M6Ok1hY2hpbmU6OmN0aV9vcF9wcm9maWxlX3dpbGxfY2FsbCk6CisgICAgICAgIChKU0M6
Ok1hY2hpbmU6OmN0aV9vcF9wcm9maWxlX2RpZF9jYWxsKTogVGhlIG5ldyBwcm9maWxlciBvcGNv
ZGUKKyAgICAgICAgZnVuY3Rpb25zLgorCisgICAgICAgIChKU0M6Ok1hY2hpbmU6OmN0aV9vcF9j
b25zdHJ1Y3RfTm90SlNDb25zdHJ1Y3QpOiBSZW1vdmVkIG9ic29sZXRlIHByb2ZpbGVyCisgICAg
ICAgIGhvb2tzLgorCisgICAgICAgICogVk0vTWFjaGluZS5oOgorICAgICAgICAoSlNDOjpNYWNo
aW5lOjppc0NhbGxPcGNvZGUpOiBIZWxwZXIgZm9yIGV4Y2VwdGlvbiBoYW5kbGluZy4KKworICAg
ICAgICAqIFZNL09wY29kZS5oOiBEZWNsYXJlIG5ldyBvcGNvZGVzLgorCisgICAgICAgICoga2pz
L0pTR2xvYmFsT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpzdXBwb3J0
c1Byb2ZpbGluZyk6IEFkZGVkIHZpcnR1YWwgaW50ZXJmYWNlIHRoYXQKKyAgICAgICAgYWxsb3dz
IFdlYkNvcmUgdG8gc3BlY2lmeSB3aGV0aGVyIHRoZSB0YXJnZXQgZ2xvYmFsIG9iamVjdCBoYXMg
dGhlIFdlYgorICAgICAgICBJbnNwZWN0b3IncyBwcm9maWxpbmcgZmVhdHVyZSBlbmFibGVkLgor
CisgICAgICAgICogcHJvZmlsZXIvUHJvZmlsZXIuY3BwOgorICAgICAgICAoSlNDOjpQcm9maWxl
cjo6d2lsbEV4ZWN1dGUpOgorICAgICAgICAoSlNDOjpQcm9maWxlcjo6ZGlkRXhlY3V0ZSk6Cisg
ICAgICAgIChKU0M6OlByb2ZpbGVyOjpjcmVhdGVDYWxsSWRlbnRpZmllcik6CisgICAgICAgICog
cHJvZmlsZXIvUHJvZmlsZXIuaDogQWRkZWQgc3VwcG9ydCBmb3IgaW52b2tpbmcgdGhlIHByb2Zp
bGVyIHdpdGgKKyAgICAgICAgYW4gYXJiaXRyYXJ5IEpTVmFsdWUqLCBhbmQgbm90IGEga25vd24g
b2JqZWN0LiBXZSBkaWRuJ3QgbmVlZCB0aGlzCisgICAgICAgIGJlZm9yZSBiZWNhdXNlIHRoZSBj
YWxsIGluc3RydWN0aW9uIHdvdWxkIGNoZWNrIGZvciBhIHZhbGlkIGNhbGwgYmVmb3JlCisgICAg
ICAgIGludm9saW5nIHRoZSBwcm9maWxlci4KKwogMjAwOC0xMC0xOCAgQ2FtZXJvbiBad2FyaWNo
ICA8endhcmljaEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgT2xpdmVyIEh1bnQu
CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9WTS9DVEkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3Jp
cHRDb3JlL1ZNL0NUSS5jcHAJKHJldmlzaW9uIDM3Njc5KQorKysgSmF2YVNjcmlwdENvcmUvVk0v
Q1RJLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAxLDE0ICs2MDEsNiBAQCB2b2lkIENUSTo6Y29t
cGlsZU9wQ2FsbChJbnN0cnVjdGlvbiogaW5zCiAKICAgICAvLyBUaGUgZm9sbG93aW5nIGlzIHRo
ZSBmYXN0IGNhc2UsIG9ubHkgdXNlZCB3aGFuIGEgY2FsbGVlIGNhbiBiZSBsaW5rZWQuCiAKLSAg
ICBlbWl0R2V0Q1RJUGFyYW0oQ1RJX0FSR1NfcHJvZmlsZXJSZWZlcmVuY2UsIFg4Njo6ZWF4KTsK
LSAgICBtX2ppdC5jbXBsX2kzMm0oMCwgWDg2OjplYXgpOwotICAgIFg4NkFzc2VtYmxlcjo6Sm1w
U3JjIG5vUHJvZmlsZSA9IG1faml0LmVtaXRVbmxpbmtlZEplKCk7Ci0gICAgZW1pdFB1dEFyZyhY
ODY6OmVjeCwgMCk7Ci0gICAgZW1pdENUSUNhbGwoaSwgTWFjaGluZTo6Y3RpX29wX2NhbGxfcHJv
ZmlsZXIpOwotICAgIGVtaXRHZXRBcmcoY2FsbGVlLCBYODY6OmVjeCk7Ci0gICAgbV9qaXQubGlu
ayhub1Byb2ZpbGUsIG1faml0LmxhYmVsKCkpOwotCiAgICAgLy8gSW4gdGhlIGNhc2Ugb2YgT3BD
b25zdHJ1Y3QsIGNhbGwgb291dCB0byBhIGN0aV8gZnVuY3Rpb24gdG8gY3JlYXRlIHRoZSBuZXcg
b2JqZWN0LgogICAgIGlmICh0eXBlID09IE9wQ29uc3RydWN0KSB7CiAgICAgICAgIGVtaXRQdXRB
cmcoWDg2OjplY3gsIDApOwpAQCAtMTMwMSwxMiArMTI5Myw2IEBAIHZvaWQgQ1RJOjpwcml2YXRl
Q29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
IGNhc2Ugb3BfcmV0OiB7Ci0gICAgICAgICAgICAvLyBDaGVjayBmb3IgYSBwcm9maWxlciAtIGlm
IHRoZXJlIGlzIG9uZSwganVtcCB0byB0aGUgaG9vayBiZWxvdy4KLSAgICAgICAgICAgIGVtaXRH
ZXRDVElQYXJhbShDVElfQVJHU19wcm9maWxlclJlZmVyZW5jZSwgWDg2OjplYXgpOwotICAgICAg
ICAgICAgbV9qaXQuY21wbF9pMzJtKDAsIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIFg4NkFzc2Vt
Ymxlcjo6Sm1wU3JjIHByb2ZpbGUgPSBtX2ppdC5lbWl0VW5saW5rZWRKbmUoKTsKLSAgICAgICAg
ICAgIFg4NkFzc2VtYmxlcjo6Sm1wRHN0IHByb2ZpbGVkID0gbV9qaXQubGFiZWwoKTsKLQogICAg
ICAgICAgICAgLy8gV2UgY291bGQgSklUIGdlbmVyYXRlIHRoZSBkZXJlZiwgb25seSBjYWxsaW5n
IG91dCB0byBDIHdoZW4gdGhlIHJlZmNvdW50IGhpdHMgemVyby4KICAgICAgICAgICAgIGlmICht
X2NvZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVDaGFpbikKICAgICAgICAgICAgICAgICBlbWl0Q1RJ
Q2FsbChpLCBNYWNoaW5lOjpjdGlfb3BfcmV0X3Njb3BlQ2hhaW4pOwpAQCAtMTMyNCwxMSArMTMx
MCw2IEBAIHZvaWQgQ1RJOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgICAgIG1f
aml0LnB1c2hsX3IoWDg2OjplZHgpOwogICAgICAgICAgICAgbV9qaXQucmV0KCk7CiAKLSAgICAg
ICAgICAgIC8vIFByb2ZpbGluZyBob29rCi0gICAgICAgICAgICBtX2ppdC5saW5rKHByb2ZpbGUs
IG1faml0LmxhYmVsKCkpOwotICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgTWFjaGluZTo6Y3Rp
X29wX3JldF9wcm9maWxlcik7Ci0gICAgICAgICAgICBtX2ppdC5saW5rKG1faml0LmVtaXRVbmxp
bmtlZEptcCgpLCBwcm9maWxlZCk7Ci0KICAgICAgICAgICAgIGkgKz0gMjsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CkBAIC0yMDk5LDYgKzIwODAsMjggQEAgdm9pZCBDVEk6OnByaXZh
dGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICAgICAgaSArPSAyOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9wcm9maWxlX3dpbGxfY2FsbDogeworICAg
ICAgICAgICAgZW1pdEdldENUSVBhcmFtKENUSV9BUkdTX3Byb2ZpbGVyUmVmZXJlbmNlLCBYODY6
OmVheCk7CisgICAgICAgICAgICBtX2ppdC5jbXBsX2kzMm0oMCwgWDg2OjplYXgpOworICAgICAg
ICAgICAgWDg2QXNzZW1ibGVyOjpKbXBTcmMgbm9Qcm9maWxlciA9IG1faml0LmVtaXRVbmxpbmtl
ZEplKCk7CisgICAgICAgICAgICBlbWl0R2V0UHV0QXJnKGluc3RydWN0aW9uW2kgKyAxXS51Lm9w
ZXJhbmQsIDAsIFg4Njo6ZWF4KTsKKyAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIE1hY2hpbmU6
OmN0aV9vcF9wcm9maWxlX3dpbGxfY2FsbCk7CisgICAgICAgICAgICBtX2ppdC5saW5rKG5vUHJv
ZmlsZXIsIG1faml0LmxhYmVsKCkpOworCisgICAgICAgICAgICBpICs9IDI7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3Byb2ZpbGVfZGlkX2NhbGw6IHsK
KyAgICAgICAgICAgIGVtaXRHZXRDVElQYXJhbShDVElfQVJHU19wcm9maWxlclJlZmVyZW5jZSwg
WDg2OjplYXgpOworICAgICAgICAgICAgbV9qaXQuY21wbF9pMzJtKDAsIFg4Njo6ZWF4KTsKKyAg
ICAgICAgICAgIFg4NkFzc2VtYmxlcjo6Sm1wU3JjIG5vUHJvZmlsZXIgPSBtX2ppdC5lbWl0VW5s
aW5rZWRKZSgpOworICAgICAgICAgICAgZW1pdEdldFB1dEFyZyhpbnN0cnVjdGlvbltpICsgMV0u
dS5vcGVyYW5kLCAwLCBYODY6OmVheCk7CisgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBNYWNo
aW5lOjpjdGlfb3BfcHJvZmlsZV9kaWRfY2FsbCk7CisgICAgICAgICAgICBtX2ppdC5saW5rKG5v
UHJvZmlsZXIsIG1faml0LmxhYmVsKCkpOworCisgICAgICAgICAgICBpICs9IDI7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBjYXNlIG9wX2dldF9hcnJheV9sZW5ndGg6
CiAgICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2NoYWluOgogICAgICAgICBjYXNlIG9wX2dldF9i
eV9pZF9nZW5lcmljOgpAQCAtMjYyNCwxMiArMjYyNyw2IEBAIHZvaWQgQ1RJOjpwcml2YXRlQ29t
cGlsZVNsb3dDYXNlcygpCiAgICAgICAgICAgICBYODZBc3NlbWJsZXI6OkptcFNyYyBjYWxsTGlu
a0ZhaWxOb3RKU0Z1bmN0aW9uID0gbV9qaXQuZW1pdFVubGlua2VkSm5lKCk7CiAKICAgICAgICAg
ICAgIC8vIFRoaXMgaGFuZGxlcyBKU0Z1bmN0aW9ucwotICAgICAgICAgICAgZW1pdEdldENUSVBh
cmFtKENUSV9BUkdTX3Byb2ZpbGVyUmVmZXJlbmNlLCBYODY6OmVheCk7Ci0gICAgICAgICAgICBt
X2ppdC5jbXBsX2kzMm0oMCwgWDg2OjplYXgpOwotICAgICAgICAgICAgWDg2QXNzZW1ibGVyOjpK
bXBTcmMgbm9Qcm9maWxlMSA9IG1faml0LmVtaXRVbmxpbmtlZEplKCk7Ci0gICAgICAgICAgICBl
bWl0Q1RJQ2FsbChpLCBNYWNoaW5lOjpjdGlfb3BfY2FsbF9wcm9maWxlcik7Ci0gICAgICAgICAg
ICBtX2ppdC5saW5rKG5vUHJvZmlsZTEsIG1faml0LmxhYmVsKCkpOwotCiAgICAgICAgICAgICBl
bWl0Q1RJQ2FsbChpLCAob3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0KSA/IE1hY2hpbmU6OmN0aV9v
cF9jb25zdHJ1Y3RfSlNDb25zdHJ1Y3QgOiBNYWNoaW5lOjpjdGlfb3BfY2FsbF9KU0Z1bmN0aW9u
KTsKICAgICAgICAgICAgIC8vIGluaXRpYWxpemUgdGhlIG5ldyBjYWxsIGZyYW1lIChwb2ludGVk
IHRvIGJ5IGVkeCwgYWZ0ZXIgdGhlIGxhc3QgY2FsbCksIHRoZW4gc2V0IGVkaSB0byBwb2ludCB0
byBpdC4KICAgICAgICAgICAgIGNvbXBpbGVPcENhbGxJbml0aWFsaXplQ2FsbEZyYW1lKGNhbGxl
ZSwgYXJnQ291bnQpOwpAQCAtMjY2NCwxNCArMjY2MSw2IEBAIHZvaWQgQ1RJOjpwcml2YXRlQ29t
cGlsZVNsb3dDYXNlcygpCiAKICAgICAgICAgICAgIC8vIE5leHQsIGhhbmRsZSBKU0Z1bmN0aW9u
cy4uLgogICAgICAgICAgICAgbV9qaXQubGluayhpc0pTRnVuY3Rpb24sIG1faml0LmxhYmVsKCkp
OwotCi0gICAgICAgICAgICAvLyBQcm9maWxlciBjaGVjawotICAgICAgICAgICAgZW1pdEdldENU
SVBhcmFtKENUSV9BUkdTX3Byb2ZpbGVyUmVmZXJlbmNlLCBYODY6OmVheCk7Ci0gICAgICAgICAg
ICBtX2ppdC5jbXBsX2kzMm0oMCwgWDg2OjplYXgpOwotICAgICAgICAgICAgWDg2QXNzZW1ibGVy
OjpKbXBTcmMgbm9Qcm9maWxlID0gbV9qaXQuZW1pdFVubGlua2VkSmUoKTsKLSAgICAgICAgICAg
IGVtaXRDVElDYWxsKGksIE1hY2hpbmU6OmN0aV9vcF9jYWxsX3Byb2ZpbGVyKTsKLSAgICAgICAg
ICAgIG1faml0Lmxpbmsobm9Qcm9maWxlLCBtX2ppdC5sYWJlbCgpKTsKLQogICAgICAgICAgICAg
ZW1pdENUSUNhbGwoaSwgKG9wY29kZUlEID09IG9wX2NvbnN0cnVjdCkgPyBNYWNoaW5lOjpjdGlf
b3BfY29uc3RydWN0X0pTQ29uc3RydWN0IDogTWFjaGluZTo6Y3RpX29wX2NhbGxfSlNGdW5jdGlv
bik7CiAgICAgICAgICAgICAvLyBpbml0aWFsaXplIHRoZSBuZXcgY2FsbCBmcmFtZSAocG9pbnRl
ZCB0byBieSBlZHgsIGFmdGVyIHRoZSBsYXN0IGNhbGwpLgogICAgICAgICAgICAgY29tcGlsZU9w
Q2FsbEluaXRpYWxpemVDYWxsRnJhbWUoY2FsbGVlLCBhcmdDb3VudCk7CkluZGV4OiBKYXZhU2Ny
aXB0Q29yZS9WTS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL1ZN
L0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDM3Njc5KQorKysgSmF2YVNjcmlwdENvcmUvVk0vQ29k
ZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE3LDggKzIxNyw4IEBAIHZvaWQgQ29kZUJs
b2NrOjpwcmludFN0cnVjdHVyZUlEcyhjb25zdCAKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIC8vIFRoZXNlIGluc3RydWN0aW9ucyBkb2Vzbid0IHJlZiBTdHJ1Y3R1cmVJRHMuCi0gICAg
QVNTRVJUKHZQQ1swXS51Lm9wY29kZSA9PSBtYWNoaW5lLT5nZXRPcGNvZGUob3BfZ2V0X2J5X2lk
X2dlbmVyaWMpIHx8IHZQQ1swXS51Lm9wY29kZSA9PSBtYWNoaW5lLT5nZXRPcGNvZGUob3BfcHV0
X2J5X2lkX2dlbmVyaWMpKTsKKyAgICAvLyBUaGVzZSBpbnN0cnVjdGlvbnMgZG9uJ3QgcmVmIFN0
cnVjdHVyZUlEcy4KKyAgICBBU1NFUlQodlBDWzBdLnUub3Bjb2RlID09IG1hY2hpbmUtPmdldE9w
Y29kZShvcF9nZXRfYnlfaWRfZ2VuZXJpYykgfHwgdlBDWzBdLnUub3Bjb2RlID09IG1hY2hpbmUt
PmdldE9wY29kZShvcF9wdXRfYnlfaWRfZ2VuZXJpYykgfHwgdlBDWzBdLnUub3Bjb2RlID09IG1h
Y2hpbmUtPmdldE9wY29kZShvcF9jYWxsKSB8fCB2UENbMF0udS5vcGNvZGUgPT0gbWFjaGluZS0+
Z2V0T3Bjb2RlKG9wX2NvbnN0cnVjdCkgfHwgdlBDWzBdLnUub3Bjb2RlID09IG1hY2hpbmUtPmdl
dE9wY29kZShvcF9jYWxsX2V2YWwpKTsKIH0KIAogdm9pZCBDb2RlQmxvY2s6OmR1bXAoRXhlY1N0
YXRlKiBleGVjKSBjb25zdApAQCAtOTExLDE1ICs5MTEsMjEgQEAgdm9pZCBDb2RlQmxvY2s6OmR1
bXAoRXhlY1N0YXRlKiBleGVjLCBjbwogICAgICAgICAgICAgcHJpbnRmKCJbJTRkXSBkZWJ1Z1x0
XHQgJXMsICVkLCAlZFxuIiwgbG9jYXRpb24sIGRlYnVnSG9va05hbWUoZGVidWdIb29rSUQpLCBm
aXJzdExpbmUsIGxhc3RMaW5lKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisgICAg
ICAgIGNhc2Ugb3BfcHJvZmlsZV93aWxsX2NhbGw6IHsKKyAgICAgICAgICAgIGludCBmdW5jdGlv
biA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRmKCJbJTRkXSBwcm9maWxl
X3dpbGxfY2FsbCAlc1xuIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShmdW5jdGlvbikuY19zdHIo
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3Byb2Zp
bGVfZGlkX2NhbGw6IHsKKyAgICAgICAgICAgIGludCBmdW5jdGlvbiA9ICgrK2l0KS0+dS5vcGVy
YW5kOworICAgICAgICAgICAgcHJpbnRmKCJbJTRkXSBwcm9maWxlX2RpZF9jYWxsXHQgJXNcbiIs
IGxvY2F0aW9uLCByZWdpc3Rlck5hbWUoZnVuY3Rpb24pLmNfc3RyKCkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9lbmQ6IHsKICAgICAgICAgICAgIGlu
dCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAgcHJpbnRmKCJbJTRkXSBlbmRc
dFx0ICVzXG4iLCBsb2NhdGlvbiwgcmVnaXN0ZXJOYW1lKHIwKS5jX3N0cigpKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGRlZmF1bHQ6IHsKLSAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KICAgICB9
CiB9CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL1ZNL0NvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRDb3JlL1ZNL0NvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAzNzY3
OSkKKysrIEphdmFTY3JpcHRDb3JlL1ZNL0NvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xOTUsNiArMTk1LDcgQEAgdm9pZCBDb2RlR2VuZXJhdG9yOjphbGxvY2F0ZUNvbnN0YW50
cyhzaQogCiBDb2RlR2VuZXJhdG9yOjpDb2RlR2VuZXJhdG9yKFByb2dyYW1Ob2RlKiBwcm9ncmFt
Tm9kZSwgY29uc3QgRGVidWdnZXIqIGRlYnVnZ2VyLCBjb25zdCBTY29wZUNoYWluJiBzY29wZUNo
YWluLCBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUsIENvZGVCbG9jayogY29kZUJsb2NrLCBWYXJT
dGFjayYgdmFyU3RhY2ssIEZ1bmN0aW9uU3RhY2smIGZ1bmN0aW9uU3RhY2spCiAgICAgOiBtX3No
b3VsZEVtaXREZWJ1Z0hvb2tzKCEhZGVidWdnZXIpCisgICAgLCBtX3Nob3VsZEVtaXRQcm9maWxl
SG9va3Moc2NvcGVDaGFpbi5nbG9iYWxPYmplY3QoKS0+c3VwcG9ydHNQcm9maWxpbmcoKSkKICAg
ICAsIG1fc2NvcGVDaGFpbigmc2NvcGVDaGFpbikKICAgICAsIG1fc3ltYm9sVGFibGUoc3ltYm9s
VGFibGUpCiAgICAgLCBtX3Njb3BlTm9kZShwcm9ncmFtTm9kZSkKQEAgLTI3Myw2ICsyNzQsNyBA
QCBDb2RlR2VuZXJhdG9yOjpDb2RlR2VuZXJhdG9yKFByb2dyYW1Ob2RlCiAKIENvZGVHZW5lcmF0
b3I6OkNvZGVHZW5lcmF0b3IoRnVuY3Rpb25Cb2R5Tm9kZSogZnVuY3Rpb25Cb2R5LCBjb25zdCBE
ZWJ1Z2dlciogZGVidWdnZXIsIGNvbnN0IFNjb3BlQ2hhaW4mIHNjb3BlQ2hhaW4sIFN5bWJvbFRh
YmxlKiBzeW1ib2xUYWJsZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCiAgICAgOiBtX3Nob3VsZEVt
aXREZWJ1Z0hvb2tzKCEhZGVidWdnZXIpCisgICAgLCBtX3Nob3VsZEVtaXRQcm9maWxlSG9va3Mo
c2NvcGVDaGFpbi5nbG9iYWxPYmplY3QoKS0+c3VwcG9ydHNQcm9maWxpbmcoKSkKICAgICAsIG1f
c2NvcGVDaGFpbigmc2NvcGVDaGFpbikKICAgICAsIG1fc3ltYm9sVGFibGUoc3ltYm9sVGFibGUp
CiAgICAgLCBtX3Njb3BlTm9kZShmdW5jdGlvbkJvZHkpCkBAIC0zNDIsNiArMzQ0LDcgQEAgQ29k
ZUdlbmVyYXRvcjo6Q29kZUdlbmVyYXRvcihGdW5jdGlvbkJvZAogCiBDb2RlR2VuZXJhdG9yOjpD
b2RlR2VuZXJhdG9yKEV2YWxOb2RlKiBldmFsTm9kZSwgY29uc3QgRGVidWdnZXIqIGRlYnVnZ2Vy
LCBjb25zdCBTY29wZUNoYWluJiBzY29wZUNoYWluLCBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUs
IEV2YWxDb2RlQmxvY2sqIGNvZGVCbG9jaykKICAgICA6IG1fc2hvdWxkRW1pdERlYnVnSG9va3Mo
ISFkZWJ1Z2dlcikKKyAgICAsIG1fc2hvdWxkRW1pdFByb2ZpbGVIb29rcyhzY29wZUNoYWluLmds
b2JhbE9iamVjdCgpLT5zdXBwb3J0c1Byb2ZpbGluZygpKQogICAgICwgbV9zY29wZUNoYWluKCZz
Y29wZUNoYWluKQogICAgICwgbV9zeW1ib2xUYWJsZShzeW1ib2xUYWJsZSkKICAgICAsIG1fc2Nv
cGVOb2RlKGV2YWxOb2RlKQpAQCAtMTE1Miw2ICsxMTU1LDExIEBAIFJlZ2lzdGVySUQqIENvZGVH
ZW5lcmF0b3I6OmVtaXRDYWxsKE9wY28KICAgICBmb3IgKGludCBpID0gMDsgaSA8IFJlZ2lzdGVy
RmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsgKytpKQogICAgICAgICBjYWxsRnJhbWUuYXBwZW5k
KG5ld1RlbXBvcmFyeSgpKTsKIAorICAgIGlmIChtX3Nob3VsZEVtaXRQcm9maWxlSG9va3MpIHsK
KyAgICAgICAgZW1pdE9wY29kZShvcF9wcm9maWxlX3dpbGxfY2FsbCk7CisgICAgICAgIGluc3Ry
dWN0aW9ucygpLmFwcGVuZChmdW5jLT5pbmRleCgpKTsKKyAgICB9CisKICAgICBlbWl0RXhwcmVz
c2lvbkluZm8oZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOwogICAgIG1fY29kZUJsb2Nr
LT5zdHJ1Y3R1cmVJREluc3RydWN0aW9ucy5hcHBlbmQoaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsK
ICAgICBlbWl0T3Bjb2RlKG9wY29kZUlEKTsKQEAgLTExNjEsNiArMTE2OSwxMiBAQCBSZWdpc3Rl
cklEKiBDb2RlR2VuZXJhdG9yOjplbWl0Q2FsbChPcGNvCiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBw
ZW5kKGFyZ3ZbMF0tPmluZGV4KCkpOyAvLyBhcmd2CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5k
KGFyZ3Yuc2l6ZSgpKTsgLy8gYXJnYwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhcmd2WzBd
LT5pbmRleCgpICsgYXJndi5zaXplKCkgKyBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNp
emUpOyAvLyByZWdpc3Rlck9mZnNldAorCisgICAgaWYgKG1fc2hvdWxkRW1pdFByb2ZpbGVIb29r
cykgeworICAgICAgICBlbWl0T3Bjb2RlKG9wX3Byb2ZpbGVfZGlkX2NhbGwpOworICAgICAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQoZnVuYy0+aW5kZXgoKSk7CisgICAgfQorCiAgICAgcmV0dXJu
IGRzdDsKIH0KIApAQCAtMTE4NiwxMCArMTIwMCw3IEBAIFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0
b3I6OmVtaXRDb25zdHJ1Y3QKIHsKICAgICBBU1NFUlQoZnVuYy0+cmVmQ291bnQoKSk7CiAKLSAg
ICAvLyBMb2FkIHByb3RvdHlwZS4KLSAgICBlbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QsIHN0YXJ0
T2Zmc2V0LCBlbmRPZmZzZXQpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmdW5jUHJvdG8gPSBu
ZXdUZW1wb3JhcnkoKTsKLSAgICBlbWl0R2V0QnlJZChmdW5jUHJvdG8uZ2V0KCksIGZ1bmMsIGds
b2JhbERhdGEoKS0+cHJvcGVydHlOYW1lcy0+cHJvdG90eXBlKTsKIAogICAgIC8vIEdlbmVyYXRl
IGNvZGUgZm9yIGFyZ3VtZW50cy4KICAgICBWZWN0b3I8UmVmUHRyPFJlZ2lzdGVySUQ+LCAxNj4g
YXJndjsKQEAgLTExOTksNiArMTIxMCwxNSBAQCBSZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjpl
bWl0Q29uc3RydWN0CiAgICAgICAgIGVtaXROb2RlKGFyZ3YubGFzdCgpLmdldCgpLCBuKTsKICAg
ICB9CiAKKyAgICBpZiAobV9zaG91bGRFbWl0UHJvZmlsZUhvb2tzKSB7CisgICAgICAgIGVtaXRP
cGNvZGUob3BfcHJvZmlsZV93aWxsX2NhbGwpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQoZnVuYy0+aW5kZXgoKSk7CisgICAgfQorCisgICAgLy8gTG9hZCBwcm90b3R5cGUuCisgICAg
ZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKKyAgICBl
bWl0R2V0QnlJZChmdW5jUHJvdG8uZ2V0KCksIGZ1bmMsIGdsb2JhbERhdGEoKS0+cHJvcGVydHlO
YW1lcy0+cHJvdG90eXBlKTsKKwogICAgIC8vIFJlc2VydmUgc3BhY2UgZm9yIGNhbGwgZnJhbWUu
CiAgICAgVmVjdG9yPFJlZlB0cjxSZWdpc3RlcklEPiwgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVI
ZWFkZXJTaXplPiBjYWxsRnJhbWU7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBSZWdpc3RlckZp
bGU6OkNhbGxGcmFtZUhlYWRlclNpemU7ICsraSkKQEAgLTEyMTgsNiArMTIzOCwxMSBAQCBSZWdp
c3RlcklEKiBDb2RlR2VuZXJhdG9yOjplbWl0Q29uc3RydWN0CiAgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKGRzdC0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFyZ3ZbMF0t
PmluZGV4KCkpOwogCisgICAgaWYgKG1fc2hvdWxkRW1pdFByb2ZpbGVIb29rcykgeworICAgICAg
ICBlbWl0T3Bjb2RlKG9wX3Byb2ZpbGVfZGlkX2NhbGwpOworICAgICAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQoZnVuYy0+aW5kZXgoKSk7CisgICAgfQorCiAgICAgcmV0dXJuIGRzdDsKIH0KIApJ
bmRleDogSmF2YVNjcmlwdENvcmUvVk0vQ29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEph
dmFTY3JpcHRDb3JlL1ZNL0NvZGVHZW5lcmF0b3IuaAkocmV2aXNpb24gMzc2NzkpCisrKyBKYXZh
U2NyaXB0Q29yZS9WTS9Db2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwOCw2ICs0
MDgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBjYW5PcHRpbWl6ZU5vbkxvY2Fs
cygpIHsgcmV0dXJuIChtX2NvZGVUeXBlID09IEZ1bmN0aW9uQ29kZSkgJiYgIW1fZHluYW1pY1Nj
b3BlRGVwdGggJiYgIW1fY29kZUJsb2NrLT51c2VzRXZhbDsgfQogCiAgICAgICAgIGJvb2wgbV9z
aG91bGRFbWl0RGVidWdIb29rczsKKyAgICAgICAgYm9vbCBtX3Nob3VsZEVtaXRQcm9maWxlSG9v
a3M7CiAKICAgICAgICAgY29uc3QgU2NvcGVDaGFpbiogbV9zY29wZUNoYWluOwogICAgICAgICBT
eW1ib2xUYWJsZSogbV9zeW1ib2xUYWJsZTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL1ZNL01hY2hp
bmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL1ZNL01hY2hpbmUuY3BwCShyZXZp
c2lvbiAzNzY3OSkKKysrIEphdmFTY3JpcHRDb3JlL1ZNL01hY2hpbmUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01ODksMTAgKzU4OSw2IEBAIE5FVkVSX0lOTElORSBKU1ZhbHVlKiBNYWNoaW5lOjpj
YWxsRXZhbCgKICAgICBpZiAoIXByb2dyYW0tPmlzU3RyaW5nKCkpCiAgICAgICAgIHJldHVybiBw
cm9ncmFtOwogCi0gICAgUHJvZmlsZXIqKiBwcm9maWxlciA9IFByb2ZpbGVyOjplbmFibGVkUHJv
ZmlsZXJSZWZlcmVuY2UoKTsKLSAgICBpZiAoKnByb2ZpbGVyKQotICAgICAgICAoKnByb2ZpbGVy
KS0+d2lsbEV4ZWN1dGUoY2FsbEZyYW1lLCBzY29wZUNoYWluLT5nbG9iYWxPYmplY3QoKS0+ZXZh
bEZ1bmN0aW9uKCkpOwotCiAgICAgVVN0cmluZyBwcm9ncmFtU291cmNlID0gc3RhdGljX2Nhc3Q8
SlNTdHJpbmcqPihwcm9ncmFtKS0+dmFsdWUoKTsKIAogICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKQEAgLTYwMiw5ICs1OTgsNiBAQCBORVZFUl9JTkxJ
TkUgSlNWYWx1ZSogTWFjaGluZTo6Y2FsbEV2YWwoCiAgICAgaWYgKGV2YWxOb2RlKQogICAgICAg
ICByZXN1bHQgPSBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5tYWNoaW5lLT5leGVjdXRlKGV2YWxO
b2RlLmdldCgpLCBjYWxsRnJhbWUsIHRoaXNPYmosIGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkgLSBy
ZWdpc3RlckZpbGUtPnN0YXJ0KCkgKyBhcmd2ICsgMSArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1l
SGVhZGVyU2l6ZSwgc2NvcGVDaGFpbiwgJmV4Y2VwdGlvblZhbHVlKTsKIAotICAgIGlmICgqcHJv
ZmlsZXIpCi0gICAgICAgICgqcHJvZmlsZXIpLT5kaWRFeGVjdXRlKGNhbGxGcmFtZSwgc2NvcGVD
aGFpbi0+Z2xvYmFsT2JqZWN0KCktPmV2YWxGdW5jdGlvbigpKTsKLQogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKQEAgLTg0NCw2ICs4MzcsMTYgQEAgTkVWRVJfSU5MSU5FIEluc3RydWN0aW9uKiBN
YWNoaW5lOjp0aHJvdwogICAgICAgICBkZWJ1Z2dlci0+ZXhjZXB0aW9uKGRlYnVnZ2VyQ2FsbEZy
YW1lLCBjb2RlQmxvY2stPm93bmVyTm9kZS0+c291cmNlSUQoKSwgY29kZUJsb2NrLT5saW5lTnVt
YmVyRm9yVlBDKHZQQykpOwogICAgIH0KIAorICAgIC8vIElmIHdlIHRocm93IGluIHRoZSBtaWRk
bGUgb2YgYSBjYWxsIGluc3RydWN0aW9uLCB3ZSBuZWVkIHRvIG5vdGlmeQorICAgIC8vIHRoZSBw
cm9maWxlciBtYW51YWxseSB0aGF0IHRoZSBjYWxsIGluc3RydWN0aW9uIGhhcyByZXR1cm5lZCwg
c2luY2UKKyAgICAvLyB3ZSdsbCBuZXZlciByZWFjaCB0aGUgcmVsZXZhbnQgb3BfcHJvZmlsZV9k
aWRfY2FsbC4KKyAgICBpZiAoUHJvZmlsZXIqIHByb2ZpbGVyID0gKlByb2ZpbGVyOjplbmFibGVk
UHJvZmlsZXJSZWZlcmVuY2UoKSkgeworICAgICAgICBpZiAoaXNDYWxsT3Bjb2RlKHZQQ1swXS51
Lm9wY29kZSkpCisgICAgICAgICAgICBwcm9maWxlci0+ZGlkRXhlY3V0ZShjYWxsRnJhbWUsIGNh
bGxGcmFtZVt2UENbMl0udS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSkpOworICAgICAgICBl
bHNlIGlmICh2UENbOF0udS5vcGNvZGUgPT0gZ2V0T3Bjb2RlKG9wX2NvbnN0cnVjdCkpCisgICAg
ICAgICAgICBwcm9maWxlci0+ZGlkRXhlY3V0ZShjYWxsRnJhbWUsIGNhbGxGcmFtZVt2UENbMTBd
LnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpKTsKKyAgICB9CisKICAgICAvLyBDYWxjdWxh
dGUgYW4gZXhjZXB0aW9uIGhhbmRsZXIgdlBDLCB1bndpbmRpbmcgY2FsbCBmcmFtZXMgYXMgbmVj
ZXNzYXJ5LgogCiAgICAgaW50IHNjb3BlRGVwdGg7CkBAIC05OTMsNiArOTk2LDkgQEAgSlNWYWx1
ZSogTWFjaGluZTo6ZXhlY3V0ZShGdW5jdGlvbkJvZHlObwogI2VuZGlmCiAgICAgbV9yZWVudHJ5
RGVwdGgtLTsKIAorICAgIGlmICgqcHJvZmlsZXIpCisgICAgICAgICgqcHJvZmlsZXIpLT5kaWRF
eGVjdXRlKG5ld0NhbGxGcmFtZSwgZnVuY3Rpb24pOworCiAgICAgTUFDSElORV9TQU1QTElOR19w
cml2YXRlRXhlY3V0ZVJldHVybmVkKCk7CiAKICAgICBtX3JlZ2lzdGVyRmlsZS5zaHJpbmsob2xk
RW5kKTsKQEAgLTIxNDgsMTAgKzIxNTQsMTAgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4
ZWN1dGUoRXhlY3V0aQogICAgICAgICAgICBSYWlzZXMgYW4gZXhjZXB0aW9uIGlmIHJlZ2lzdGVy
IGNvbnN0cnVjdG9yIGlzIG5vdCBhbgogICAgICAgICAgICBvYmplY3QuCiAgICAgICAgICovCi0g
ICAgICAgIGludCBkc3QgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCB2YWx1ZSA9
ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAgaW50IGJhc2UgPSAoKyt2UEMpLT51Lm9wZXJh
bmQ7Ci0gICAgICAgIGludCBiYXNlUHJvdG8gPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CisgICAgICAg
IGludCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOworICAgICAgICBpbnQgdmFsdWUgPSB2UENbMl0u
dS5vcGVyYW5kOworICAgICAgICBpbnQgYmFzZSA9IHZQQ1szXS51Lm9wZXJhbmQ7CisgICAgICAg
IGludCBiYXNlUHJvdG8gPSB2UENbNF0udS5vcGVyYW5kOwogCiAgICAgICAgIEpTVmFsdWUqIGJh
c2VWYWwgPSBjYWxsRnJhbWVbYmFzZV0uanNWYWx1ZShjYWxsRnJhbWUpOwogCkBAIC0yMTYxLDcg
KzIxNjcsNyBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAg
ICAgIEpTT2JqZWN0KiBiYXNlT2JqID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihiYXNlVmFsKTsK
ICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBqc0Jvb2xlYW4oYmFzZU9iai0+c3RydWN0dXJlSUQo
KS0+dHlwZUluZm8oKS5pbXBsZW1lbnRzSGFzSW5zdGFuY2UoKSA/IGJhc2VPYmotPmhhc0luc3Rh
bmNlKGNhbGxGcmFtZSwgY2FsbEZyYW1lW3ZhbHVlXS5qc1ZhbHVlKGNhbGxGcmFtZSksIGNhbGxG
cmFtZVtiYXNlUHJvdG9dLmpzVmFsdWUoY2FsbEZyYW1lKSkgOiBmYWxzZSk7CiAKLSAgICAgICAg
Kyt2UEM7CisgICAgICAgIHZQQyArPSA1OwogICAgICAgICBORVhUX09QQ09ERTsKICAgICB9CiAg
ICAgQkVHSU5fT1BDT0RFKG9wX3R5cGVvZikgewpAQCAtMzIwOCwxMiArMzIxNCwxMSBAQCBKU1Zh
bHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAgICAgIG9wY29kZSku
IE90aGVyd2lzZSwgYWN0IGV4YWN0bHkgYXMgdGhlICJjYWxsIiBvcGNvZGUgd291bGQuCiAgICAg
ICAgICAqLwogCi0gICAgICAgIGludCBkc3QgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAg
IGludCBmdW5jID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBpbnQgdGhpc1ZhbCA9ICgr
K3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAgaW50IGZpcnN0QXJnID0gKCsrdlBDKS0+dS5vcGVy
YW5kOwotICAgICAgICBpbnQgYXJnQ291bnQgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAg
ICsrdlBDOyAvLyByZWdpc3Rlck9mZnNldAorICAgICAgICBpbnQgZHN0ID0gdlBDWzFdLnUub3Bl
cmFuZDsKKyAgICAgICAgaW50IGZ1bmMgPSB2UENbMl0udS5vcGVyYW5kOworICAgICAgICBpbnQg
dGhpc1ZhbCA9IHZQQ1szXS51Lm9wZXJhbmQ7CisgICAgICAgIGludCBmaXJzdEFyZyA9IHZQQ1s0
XS51Lm9wZXJhbmQ7CisgICAgICAgIGludCBhcmdDb3VudCA9IHZQQ1s1XS51Lm9wZXJhbmQ7CiAK
ICAgICAgICAgSlNWYWx1ZSogZnVuY1ZhbCA9IGNhbGxGcmFtZVtmdW5jXS5qc1ZhbHVlKGNhbGxG
cmFtZSk7CiAgICAgICAgIEpTVmFsdWUqIGJhc2VWYWwgPSBjYWxsRnJhbWVbdGhpc1ZhbF0uanNW
YWx1ZShjYWxsRnJhbWUpOwpAQCAtMzIyNywxNCArMzIzMiwxMyBAQCBKU1ZhbHVlKiBNYWNoaW5l
Ojpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAKICAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0g
cmVzdWx0OwogCi0gICAgICAgICAgICArK3ZQQzsKKyAgICAgICAgICAgIHZQQyArPSA3OwogICAg
ICAgICAgICAgTkVYVF9PUENPREU7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBXZSBkaWRuJ3Qg
ZmluZCB0aGUgYmxlc3NlZCB2ZXJzaW9uIG9mIGV2YWwsIHNvIHJlc2V0IHZQQyBhbmQgcHJvY2Vz
cwogICAgICAgICAvLyB0aGlzIGluc3RydWN0aW9uIGFzIGEgbm9ybWFsIGZ1bmN0aW9uIGNhbGws
IHN1cHBseWluZyB0aGUgcHJvcGVyICd0aGlzJwogICAgICAgICAvLyB2YWx1ZS4KLSAgICAgICAg
dlBDIC09IDY7CiAgICAgICAgIGNhbGxGcmFtZVt0aGlzVmFsXSA9IGJhc2VWYWwtPnRvVGhpc09i
amVjdChjYWxsRnJhbWUpOwogCiAjaWYgSEFWRShDT01QVVRFRF9HT1RPKQpAQCAtMzI4MiwxMiAr
MzI4NiwxMiBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAg
ICAgICAgIGVuY291bnRlcmVkLgogICAgICAgICAgKi8KIAotICAgICAgICBpbnQgZHN0ID0gKCsr
dlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBpbnQgZnVuYyA9ICgrK3ZQQyktPnUub3BlcmFuZDsK
LSAgICAgICAgaW50IHRoaXNWYWwgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBm
aXJzdEFyZyA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAgaW50IGFyZ0NvdW50ID0gKCsr
dlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAoKyt2UEMpLT51
Lm9wZXJhbmQ7CisgICAgICAgIGludCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOworICAgICAgICBp
bnQgZnVuYyA9IHZQQ1syXS51Lm9wZXJhbmQ7CisgICAgICAgIGludCB0aGlzVmFsID0gdlBDWzNd
LnUub3BlcmFuZDsKKyAgICAgICAgaW50IGZpcnN0QXJnID0gdlBDWzRdLnUub3BlcmFuZDsKKyAg
ICAgICAgaW50IGFyZ0NvdW50ID0gdlBDWzVdLnUub3BlcmFuZDsKKyAgICAgICAgaW50IHJlZ2lz
dGVyT2Zmc2V0ID0gdlBDWzZdLnUub3BlcmFuZDsKIAogICAgICAgICBKU1ZhbHVlKiB2ID0gY2Fs
bEZyYW1lW2Z1bmNdLmpzVmFsdWUoY2FsbEZyYW1lKTsKIApAQCAtMzMxMCwxMSArMzMxNCw3IEBA
IEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAgICAgICAg
ICBnb3RvIHZtX3Rocm93OwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBjYWxsRnJhbWUt
PmluaXQobmV3Q29kZUJsb2NrLCB2UEMgKyAxLCBjYWxsRGF0YVNjb3BlQ2hhaW4sIHByZXZpb3Vz
Q2FsbEZyYW1lLCBkc3QsIGFyZ0NvdW50LCBzdGF0aWNfY2FzdDxKU0Z1bmN0aW9uKj4odikpOwot
ICAgIAotICAgICAgICAgICAgaWYgKCplbmFibGVkUHJvZmlsZXJSZWZlcmVuY2UpCi0gICAgICAg
ICAgICAgICAgKCplbmFibGVkUHJvZmlsZXJSZWZlcmVuY2UpLT53aWxsRXhlY3V0ZShjYWxsRnJh
bWUsIHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4odikpOwotCisgICAgICAgICAgICBjYWxsRnJhbWUt
PmluaXQobmV3Q29kZUJsb2NrLCB2UEMgKyA3LCBjYWxsRGF0YVNjb3BlQ2hhaW4sIHByZXZpb3Vz
Q2FsbEZyYW1lLCBkc3QsIGFyZ0NvdW50LCBzdGF0aWNfY2FzdDxKU0Z1bmN0aW9uKj4odikpOwog
ICAgICAgICAgICAgdlBDID0gbmV3Q29kZUJsb2NrLT5pbnN0cnVjdGlvbnMuYmVnaW4oKTsKIAog
I2lmIERVTVBfT1BDT0RFX1NUQVRTCkBAIC0zMzMwLDEwICszMzMwLDcgQEAgSlNWYWx1ZSogTWFj
aGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogCiAgICAgICAgICAgICBTY29wZUNoYWluTm9k
ZSogc2NvcGVDaGFpbiA9IGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpOwogICAgICAgICAgICAgQ2Fs
bEZyYW1lKiBuZXdDYWxsRnJhbWUgPSBDYWxsRnJhbWU6OmNyZWF0ZShjYWxsRnJhbWUtPnJlZ2lz
dGVycygpICsgcmVnaXN0ZXJPZmZzZXQpOwotICAgICAgICAgICAgbmV3Q2FsbEZyYW1lLT5pbml0
KDAsIHZQQyArIDEsIHNjb3BlQ2hhaW4sIGNhbGxGcmFtZSwgZHN0LCBhcmdDb3VudCwgc3RhdGlj
X2Nhc3Q8SlNGdW5jdGlvbio+KHYpKTsKLQotICAgICAgICAgICAgaWYgKCplbmFibGVkUHJvZmls
ZXJSZWZlcmVuY2UpCi0gICAgICAgICAgICAgICAgKCplbmFibGVkUHJvZmlsZXJSZWZlcmVuY2Up
LT53aWxsRXhlY3V0ZShuZXdDYWxsRnJhbWUsIHN0YXRpY19jYXN0PEpTRnVuY3Rpb24qPih2KSk7
CisgICAgICAgICAgICBuZXdDYWxsRnJhbWUtPmluaXQoMCwgdlBDICsgNywgc2NvcGVDaGFpbiwg
Y2FsbEZyYW1lLCBkc3QsIGFyZ0NvdW50LCBzdGF0aWNfY2FzdDxKU0Z1bmN0aW9uKj4odikpOwog
CiAgICAgICAgICAgICBNQUNISU5FX1NBTVBMSU5HX2NhbGxpbmdIb3N0RnVuY3Rpb24oKTsKIApA
QCAtMzM0MiwxMCArMzMzOSw3IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4
ZWN1dGkKIAogICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSByZXR1cm5WYWx1ZTsKIAotICAg
ICAgICAgICAgaWYgKCplbmFibGVkUHJvZmlsZXJSZWZlcmVuY2UpCi0gICAgICAgICAgICAgICAg
KCplbmFibGVkUHJvZmlsZXJSZWZlcmVuY2UpLT5kaWRFeGVjdXRlKGNhbGxGcmFtZSwgc3RhdGlj
X2Nhc3Q8SlNGdW5jdGlvbio+KHYpKTsKLQotICAgICAgICAgICAgKyt2UEM7CisgICAgICAgICAg
ICB2UEMgKz0gNzsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFOwogICAgICAgICB9CiAKQEAgLTMz
ODUsOSArMzM3OSw2IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkK
IAogICAgICAgICBpbnQgcmVzdWx0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwogCi0gICAgICAgIGlm
ICgqZW5hYmxlZFByb2ZpbGVyUmVmZXJlbmNlKQotICAgICAgICAgICAgKCplbmFibGVkUHJvZmls
ZXJSZWZlcmVuY2UpLT5kaWRFeGVjdXRlKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5jYWxsZWUoKSk7
Ci0KICAgICAgICAgaWYgKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPm5lZWRzRnVsbFNjb3BlQ2hh
aW4pCiAgICAgICAgICAgICBjYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKS0+ZGVyZWYoKTsKIApAQCAt
MzQ5OSwxMiArMzQ5MCwxMiBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVj
dXRpCiAgICAgICAgICAgIGNhY2hpbmcgb2YgdGhpcyBsb29rdXAuCiAgICAgICAgICovCiAKLSAg
ICAgICAgaW50IGRzdCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAgaW50IGNvbnN0ciA9
ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAgaW50IGNvbnN0clByb3RvID0gKCsrdlBDKS0+
dS5vcGVyYW5kOwotICAgICAgICBpbnQgZmlyc3RBcmcgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0g
ICAgICAgIGludCBhcmdDb3VudCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAgaW50IHJl
Z2lzdGVyT2Zmc2V0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOworICAgICAgICBpbnQgZHN0ID0gdlBD
WzFdLnUub3BlcmFuZDsKKyAgICAgICAgaW50IGNvbnN0ciA9IHZQQ1syXS51Lm9wZXJhbmQ7Cisg
ICAgICAgIGludCBjb25zdHJQcm90byA9IHZQQ1szXS51Lm9wZXJhbmQ7CisgICAgICAgIGludCBm
aXJzdEFyZyA9IHZQQ1s0XS51Lm9wZXJhbmQ7CisgICAgICAgIGludCBhcmdDb3VudCA9IHZQQ1s1
XS51Lm9wZXJhbmQ7CisgICAgICAgIGludCByZWdpc3Rlck9mZnNldCA9IHZQQ1s2XS51Lm9wZXJh
bmQ7CiAKICAgICAgICAgSlNWYWx1ZSogdiA9IGNhbGxGcmFtZVtjb25zdHJdLmpzVmFsdWUoY2Fs
bEZyYW1lKTsKIApAQCAtMzUxMiw5ICszNTAzLDYgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0
ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICBDb25zdHJ1Y3RUeXBlIGNvbnN0cnVjdFR5cGUgPSB2
LT5nZXRDb25zdHJ1Y3REYXRhKGNvbnN0cnVjdERhdGEpOwogCiAgICAgICAgIGlmIChjb25zdHJ1
Y3RUeXBlID09IENvbnN0cnVjdFR5cGVKUykgewotICAgICAgICAgICAgaWYgKCplbmFibGVkUHJv
ZmlsZXJSZWZlcmVuY2UpCi0gICAgICAgICAgICAgICAgKCplbmFibGVkUHJvZmlsZXJSZWZlcmVu
Y2UpLT53aWxsRXhlY3V0ZShjYWxsRnJhbWUsIHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4odikpOwot
CiAgICAgICAgICAgICBTY29wZUNoYWluTm9kZSogY2FsbERhdGFTY29wZUNoYWluID0gY29uc3Ry
dWN0RGF0YS5qcy5zY29wZUNoYWluOwogICAgICAgICAgICAgRnVuY3Rpb25Cb2R5Tm9kZSogZnVu
Y3Rpb25Cb2R5Tm9kZSA9IGNvbnN0cnVjdERhdGEuanMuZnVuY3Rpb25Cb2R5OwogICAgICAgICAg
ICAgQ29kZUJsb2NrKiBuZXdDb2RlQmxvY2sgPSAmZnVuY3Rpb25Cb2R5Tm9kZS0+Ynl0ZUNvZGUo
Y2FsbERhdGFTY29wZUNoYWluKTsKQEAgLTM1MzgsMTEgKzM1MjYsOCBAQCBKU1ZhbHVlKiBNYWNo
aW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAgICAgICAgICAgZ290byB2bV90aHJv
dzsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgY2FsbEZyYW1lLT5pbml0KG5ld0NvZGVC
bG9jaywgdlBDICsgMSwgY2FsbERhdGFTY29wZUNoYWluLCBwcmV2aW91c0NhbGxGcmFtZSwgZHN0
LCBhcmdDb3VudCwgc3RhdGljX2Nhc3Q8SlNGdW5jdGlvbio+KHYpKTsKKyAgICAgICAgICAgIGNh
bGxGcmFtZS0+aW5pdChuZXdDb2RlQmxvY2ssIHZQQyArIDcsIGNhbGxEYXRhU2NvcGVDaGFpbiwg
cHJldmlvdXNDYWxsRnJhbWUsIGRzdCwgYXJnQ291bnQsIHN0YXRpY19jYXN0PEpTRnVuY3Rpb24q
Pih2KSk7CiAgICAgCi0gICAgICAgICAgICBpZiAoKmVuYWJsZWRQcm9maWxlclJlZmVyZW5jZSkK
LSAgICAgICAgICAgICAgICAoKmVuYWJsZWRQcm9maWxlclJlZmVyZW5jZSktPmRpZEV4ZWN1dGUo
Y2FsbEZyYW1lLCBzdGF0aWNfY2FzdDxKU09iamVjdCo+KHYpKTsKLQogICAgICAgICAgICAgdlBD
ID0gbmV3Q29kZUJsb2NrLT5pbnN0cnVjdGlvbnMuYmVnaW4oKTsKIAogI2lmIERVTVBfT1BDT0RF
X1NUQVRTCkBAIC0zNTU2LDEyICszNTQxLDkgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4
ZWN1dGUoRXhlY3V0aQogICAgICAgICAgICAgQXJnTGlzdCBhcmdzKGNhbGxGcmFtZS0+cmVnaXN0
ZXJzKCkgKyBmaXJzdEFyZyArIDEsIGFyZ0NvdW50IC0gMSk7CiAKICAgICAgICAgICAgIFNjb3Bl
Q2hhaW5Ob2RlKiBzY29wZUNoYWluID0gY2FsbEZyYW1lLT5zY29wZUNoYWluKCk7Ci0gICAgICAg
ICAgICBDYWxsRnJhbWU6OmNyZWF0ZShjYWxsRnJhbWUtPnJlZ2lzdGVycygpICsgcmVnaXN0ZXJP
ZmZzZXQpLT5pbml0KDAsIHZQQyArIDEsIHNjb3BlQ2hhaW4sIGNhbGxGcmFtZSwgZHN0LCBhcmdD
b3VudCwgc3RhdGljX2Nhc3Q8SlNGdW5jdGlvbio+KHYpKTsKKyAgICAgICAgICAgIENhbGxGcmFt
ZTo6Y3JlYXRlKGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkgKyByZWdpc3Rlck9mZnNldCktPmluaXQo
MCwgdlBDICsgNywgc2NvcGVDaGFpbiwgY2FsbEZyYW1lLCBkc3QsIGFyZ0NvdW50LCBzdGF0aWNf
Y2FzdDxKU0Z1bmN0aW9uKj4odikpOwogICAgICAgICAgICAgY2FsbEZyYW1lID0gQ2FsbEZyYW1l
OjpjcmVhdGUoY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSArIHJlZ2lzdGVyT2Zmc2V0KTsKIAotICAg
ICAgICAgICAgaWYgKCplbmFibGVkUHJvZmlsZXJSZWZlcmVuY2UpCi0gICAgICAgICAgICAgICAg
KCplbmFibGVkUHJvZmlsZXJSZWZlcmVuY2UpLT53aWxsRXhlY3V0ZShjYWxsRnJhbWUsIHN0YXRp
Y19jYXN0PEpTT2JqZWN0Kj4odikpOwotCiAgICAgICAgICAgICBNQUNISU5FX1NBTVBMSU5HX2Nh
bGxpbmdIb3N0RnVuY3Rpb24oKTsKIAogICAgICAgICAgICAgSlNWYWx1ZSogcmV0dXJuVmFsdWUg
PSBjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbihjYWxsRnJhbWUsIHN0YXRpY19jYXN0PEpT
T2JqZWN0Kj4odiksIGFyZ3MpOwpAQCAtMzU3MCwxMCArMzU1Miw3IEBAIEpTVmFsdWUqIE1hY2hp
bmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAgICAgIFZNX0NIRUNLX0VYQ0VQVElP
TigpOwogICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSByZXR1cm5WYWx1ZTsKIAotICAgICAg
ICAgICAgaWYgKCplbmFibGVkUHJvZmlsZXJSZWZlcmVuY2UpCi0gICAgICAgICAgICAgICAgKCpl
bmFibGVkUHJvZmlsZXJSZWZlcmVuY2UpLT5kaWRFeGVjdXRlKGNhbGxGcmFtZSwgc3RhdGljX2Nh
c3Q8SlNPYmplY3QqPih2KSk7Ci0KLSAgICAgICAgICAgICsrdlBDOworICAgICAgICAgICAgdlBD
ICs9IDc7CiAgICAgICAgICAgICBORVhUX09QQ09ERTsKICAgICAgICAgfQogCkBAIC0zODg0LDYg
KzM4NjMsMzQgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAg
ICAgICArK3ZQQzsKICAgICAgICAgTkVYVF9PUENPREU7CiAgICAgfQorICAgIEJFR0lOX09QQ09E
RShvcF9wcm9maWxlX3dpbGxfY2FsbCkgeworICAgICAgICAvKiBvcF9wcm9maWxlX3dpbGxfY2Fs
bCBmdW5jdGlvbihyKQorCisgICAgICAgICBOb3RpZmllcyB0aGUgcHJvZmlsZXIgb2YgdGhlIGJl
Z2lubmluZyBvZiBhIGZ1bmN0aW9uIGNhbGwuIFRoaXMgb3Bjb2RlCisgICAgICAgICBpcyBvbmx5
IGdlbmVyYXRlZCBpZiBkZXZlbG9wZXIgdG9vbHMgYXJlIGVuYWJsZWQuCisgICAgICAgICovCisg
ICAgICAgIGludCBmdW5jdGlvbiA9IHZQQ1sxXS51Lm9wZXJhbmQ7CisKKyAgICAgICAgaWYgKCpl
bmFibGVkUHJvZmlsZXJSZWZlcmVuY2UpCisgICAgICAgICAgICAoKmVuYWJsZWRQcm9maWxlclJl
ZmVyZW5jZSktPndpbGxFeGVjdXRlKGNhbGxGcmFtZSwgY2FsbEZyYW1lW2Z1bmN0aW9uXS5qc1Zh
bHVlKGNhbGxGcmFtZSkpOworCisgICAgICAgIHZQQyArPSAyOworICAgICAgICBORVhUX09QQ09E
RTsKKyAgICB9CisgICAgQkVHSU5fT1BDT0RFKG9wX3Byb2ZpbGVfZGlkX2NhbGwpIHsKKyAgICAg
ICAgLyogb3BfcHJvZmlsZV9kaWRfY2FsbCBmdW5jdGlvbihyKQorCisgICAgICAgICBOb3RpZmll
cyB0aGUgcHJvZmlsZXIgb2YgdGhlIGVuZCBvZiBhIGZ1bmN0aW9uIGNhbGwuIFRoaXMgb3Bjb2Rl
CisgICAgICAgICBpcyBvbmx5IGdlbmVyYXRlZCBpZiBkZXZlbG9wZXIgdG9vbHMgYXJlIGVuYWJs
ZWQuCisgICAgICAgICovCisgICAgICAgIGludCBmdW5jdGlvbiA9IHZQQ1sxXS51Lm9wZXJhbmQ7
CisKKyAgICAgICAgaWYgKCplbmFibGVkUHJvZmlsZXJSZWZlcmVuY2UpCisgICAgICAgICAgICAo
KmVuYWJsZWRQcm9maWxlclJlZmVyZW5jZSktPmRpZEV4ZWN1dGUoY2FsbEZyYW1lLCBjYWxsRnJh
bWVbZnVuY3Rpb25dLmpzVmFsdWUoY2FsbEZyYW1lKSk7CisKKyAgICAgICAgdlBDICs9IDI7Cisg
ICAgICAgIE5FWFRfT1BDT0RFOworICAgIH0KICAgICB2bV90aHJvdzogewogICAgICAgICBnbG9i
YWxEYXRhLT5leGNlcHRpb24gPSAwOwogICAgICAgICBpZiAoIXRpY2tDb3VudCkgewpAQCAtNDYy
NywxNCArNDYzNCw2IEBAIEpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9uZXdfZnVuYyhDVElfQVIK
ICAgICByZXR1cm4gQVJHX2Z1bmMxLT5tYWtlRnVuY3Rpb24oQVJHX2NhbGxGcmFtZSwgQVJHX2Nh
bGxGcmFtZS0+c2NvcGVDaGFpbigpKTsKIH0KIAotdm9pZCBNYWNoaW5lOjpjdGlfb3BfY2FsbF9w
cm9maWxlcihDVElfQVJHUykKLXsKLSAgICBDVElfU1RBQ0tfSEFDSygpOwotCi0gICAgQVNTRVJU
KCpBUkdfcHJvZmlsZXJSZWZlcmVuY2UpOwotICAgICgqQVJHX3Byb2ZpbGVyUmVmZXJlbmNlKS0+
d2lsbEV4ZWN1dGUoQVJHX2NhbGxGcmFtZSwgc3RhdGljX2Nhc3Q8SlNGdW5jdGlvbio+KEFSR19z
cmMxKSk7Ci19Ci0KIFZvaWRQdHJQYWlyIE1hY2hpbmU6OmN0aV9vcF9jYWxsX0pTRnVuY3Rpb24o
Q1RJX0FSR1MpCiB7CiAgICAgQ1RJX1NUQUNLX0hBQ0soKTsKQEAgLTQ3NDIsOSArNDc0MSw2IEBA
IEpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9jYWxsX05vdEpTRnVuY3QKICAgICAgICAgY2FsbEZy
YW1lLT5pbml0KDAsIEFSR19pbnN0cjQgKyAxLCBwcmV2aW91c0NhbGxGcmFtZS0+c2NvcGVDaGFp
bigpLCBwcmV2aW91c0NhbGxGcmFtZSwgMCwgYXJnQ291bnQsIHN0YXRpY19jYXN0PEpTRnVuY3Rp
b24qPihmdW5jVmFsKSk7CiAgICAgICAgIEFSR19zZXRDYWxsRnJhbWUoY2FsbEZyYW1lKTsKIAot
ICAgICAgICBpZiAoKkFSR19wcm9maWxlclJlZmVyZW5jZSkKLSAgICAgICAgICAgICgqQVJHX3By
b2ZpbGVyUmVmZXJlbmNlKS0+d2lsbEV4ZWN1dGUoY2FsbEZyYW1lLCBzdGF0aWNfY2FzdDxKU0Z1
bmN0aW9uKj4oZnVuY1ZhbCkpOwotCiAgICAgICAgIFJlZ2lzdGVyKiBhcmd2ID0gQVJHX2NhbGxG
cmFtZS0+cmVnaXN0ZXJzKCkgLSBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUgLSBh
cmdDb3VudDsKICAgICAgICAgQXJnTGlzdCBhcmdMaXN0KGFyZ3YgKyAxLCBhcmdDb3VudCAtIDEp
OwogCkBAIC00NzU0LDkgKzQ3NTAsNiBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfY2FsbF9O
b3RKU0Z1bmN0CiAgICAgICAgIEFSR19zZXRDYWxsRnJhbWUocHJldmlvdXNDYWxsRnJhbWUpOwog
ICAgICAgICBWTV9DSEVDS19FWENFUFRJT04oKTsKIAotICAgICAgICBpZiAoKkFSR19wcm9maWxl
clJlZmVyZW5jZSkKLSAgICAgICAgICAgICgqQVJHX3Byb2ZpbGVyUmVmZXJlbmNlKS0+ZGlkRXhl
Y3V0ZShwcmV2aW91c0NhbGxGcmFtZSwgc3RhdGljX2Nhc3Q8SlNGdW5jdGlvbio+KGZ1bmNWYWwp
KTsKLQogICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CiAgICAgfQogCkBAIC00Nzc3LDYgKzQ3
NzAsOCBAQCB2b2lkIE1hY2hpbmU6OmN0aV9vcF9jcmVhdGVfYXJndW1lbnRzKENUCiAKIHZvaWQg
TWFjaGluZTo6Y3RpX29wX2NyZWF0ZV9hcmd1bWVudHNfbm9fcGFyYW1zKENUSV9BUkdTKQogewor
ICAgIENUSV9TVEFDS19IQUNLKCk7CisKICAgICBBcmd1bWVudHMqIGFyZ3VtZW50cyA9IG5ldyAo
QVJHX2dsb2JhbERhdGEpIEFyZ3VtZW50cyhBUkdfY2FsbEZyYW1lLCBBcmd1bWVudHM6OkFyZ3Vt
ZW50c05vUGFyYW1ldGVycyk7CiAgICAgQVJHX2NhbGxGcmFtZS0+c2V0Q2FsbGVlQXJndW1lbnRz
KGFyZ3VtZW50cyk7CiAgICAgQVJHX2NhbGxGcmFtZVtSZWdpc3RlckZpbGU6OkFyZ3VtZW50c1Jl
Z2lzdGVyXSA9IGFyZ3VtZW50czsKQEAgLTQ3OTksMTIgKzQ3OTQsMjAgQEAgdm9pZCBNYWNoaW5l
OjpjdGlfb3BfdGVhcl9vZmZfYXJndW1lbnRzKAogICAgIEFSR19jYWxsRnJhbWUtPm9wdGlvbmFs
Q2FsbGVlQXJndW1lbnRzKCktPmNvcHlSZWdpc3RlcnMoKTsKIH0KIAotdm9pZCBNYWNoaW5lOjpj
dGlfb3BfcmV0X3Byb2ZpbGVyKENUSV9BUkdTKQordm9pZCBNYWNoaW5lOjpjdGlfb3BfcHJvZmls
ZV93aWxsX2NhbGwoQ1RJX0FSR1MpCiB7CiAgICAgQ1RJX1NUQUNLX0hBQ0soKTsKIAogICAgIEFT
U0VSVCgqQVJHX3Byb2ZpbGVyUmVmZXJlbmNlKTsKLSAgICAoKkFSR19wcm9maWxlclJlZmVyZW5j
ZSktPmRpZEV4ZWN1dGUoQVJHX2NhbGxGcmFtZSwgQVJHX2NhbGxGcmFtZS0+Y2FsbGVlKCkpOwor
ICAgICgqQVJHX3Byb2ZpbGVyUmVmZXJlbmNlKS0+d2lsbEV4ZWN1dGUoQVJHX2NhbGxGcmFtZSwg
QVJHX3NyYzEpOworfQorCit2b2lkIE1hY2hpbmU6OmN0aV9vcF9wcm9maWxlX2RpZF9jYWxsKENU
SV9BUkdTKQoreworICAgIENUSV9TVEFDS19IQUNLKCk7CisKKyAgICBBU1NFUlQoKkFSR19wcm9m
aWxlclJlZmVyZW5jZSk7CisgICAgKCpBUkdfcHJvZmlsZXJSZWZlcmVuY2UpLT5kaWRFeGVjdXRl
KEFSR19jYWxsRnJhbWUsIEFSR19zcmMxKTsKIH0KIAogdm9pZCBNYWNoaW5lOjpjdGlfb3BfcmV0
X3Njb3BlQ2hhaW4oQ1RJX0FSR1MpCkBAIC00OTQ3LDkgKzQ5NTAsNiBAQCBKU1ZhbHVlKiBNYWNo
aW5lOjpjdGlfb3BfY29uc3RydWN0X05vdEpTCiAgICAgSlNPYmplY3QqIGNvbnN0cnVjdG9yID0g
c3RhdGljX2Nhc3Q8SlNPYmplY3QqPihjb25zdHJWYWwpOwogCiAgICAgaWYgKGNvbnN0cnVjdFR5
cGUgPT0gQ29uc3RydWN0VHlwZUhvc3QpIHsKLSAgICAgICAgaWYgKCpBUkdfcHJvZmlsZXJSZWZl
cmVuY2UpCi0gICAgICAgICAgICAoKkFSR19wcm9maWxlclJlZmVyZW5jZSktPndpbGxFeGVjdXRl
KGNhbGxGcmFtZSwgY29uc3RydWN0b3IpOwotCiAgICAgICAgIEFyZ0xpc3QgYXJnTGlzdChjYWxs
RnJhbWUtPnJlZ2lzdGVycygpICsgZmlyc3RBcmcgKyAxLCBhcmdDb3VudCAtIDEpOwogCiAgICAg
ICAgIENUSV9NQUNISU5FX1NBTVBMSU5HX2NhbGxpbmdIb3N0RnVuY3Rpb24oKTsKQEAgLTQ5NTcs
OSArNDk1Nyw2IEBAIEpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9jb25zdHJ1Y3RfTm90SlMKICAg
ICAgICAgSlNWYWx1ZSogcmV0dXJuVmFsdWUgPSBjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlv
bihjYWxsRnJhbWUsIGNvbnN0cnVjdG9yLCBhcmdMaXN0KTsKICAgICAgICAgVk1fQ0hFQ0tfRVhD
RVBUSU9OKCk7CiAKLSAgICAgICAgaWYgKCpBUkdfcHJvZmlsZXJSZWZlcmVuY2UpCi0gICAgICAg
ICAgICAoKkFSR19wcm9maWxlclJlZmVyZW5jZSktPmRpZEV4ZWN1dGUoY2FsbEZyYW1lLCBjb25z
dHJ1Y3Rvcik7Ci0KICAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOwogICAgIH0KIApJbmRleDog
SmF2YVNjcmlwdENvcmUvVk0vTWFjaGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L1ZNL01hY2hpbmUuaAkocmV2aXNpb24gMzc2NzkpCisrKyBKYXZhU2NyaXB0Q29yZS9WTS9NYWNo
aW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4OSw2ICsxODksOCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgc3RhdGljIHZvaWQgU0ZYX0NBTEwgY3RpX29wX2NyZWF0ZV9hcmd1bWVudHNfbm9f
cGFyYW1zKENUSV9BUkdTKTsKICAgICAgICAgc3RhdGljIHZvaWQgU0ZYX0NBTEwgY3RpX29wX3Rl
YXJfb2ZmX2FjdGl2YXRpb24oQ1RJX0FSR1MpOwogICAgICAgICBzdGF0aWMgdm9pZCBTRlhfQ0FM
TCBjdGlfb3BfdGVhcl9vZmZfYXJndW1lbnRzKENUSV9BUkdTKTsKKyAgICAgICAgc3RhdGljIHZv
aWQgU0ZYX0NBTEwgY3RpX29wX3Byb2ZpbGVfd2lsbF9jYWxsKENUSV9BUkdTKTsKKyAgICAgICAg
c3RhdGljIHZvaWQgU0ZYX0NBTEwgY3RpX29wX3Byb2ZpbGVfZGlkX2NhbGwoQ1RJX0FSR1MpOwog
ICAgICAgICBzdGF0aWMgdm9pZCBTRlhfQ0FMTCBjdGlfb3BfcmV0X3Njb3BlQ2hhaW4oQ1RJX0FS
R1MpOwogICAgICAgICBzdGF0aWMgSlNWYWx1ZSogU0ZYX0NBTEwgY3RpX29wX25ld19hcnJheShD
VElfQVJHUyk7CiAgICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBTRlhfQ0FMTCBjdGlfb3BfcmVzb2x2
ZShDVElfQVJHUyk7CkBAIC0yNTYsOSArMjU4LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHN0YXRpYyBKU1ZhbHVlKiBTRlhfQ0FMTCBjdGlfb3BfbmV3X2Vycm9yKENUSV9BUkdTKTsKICAg
ICAgICAgc3RhdGljIHZvaWQgU0ZYX0NBTEwgY3RpX29wX2RlYnVnKENUSV9BUkdTKTsKIAotICAg
ICAgICBzdGF0aWMgdm9pZCBTRlhfQ0FMTCBjdGlfb3BfY2FsbF9wcm9maWxlcihDVElfQVJHUyk7
Ci0gICAgICAgIHN0YXRpYyB2b2lkIFNGWF9DQUxMIGN0aV9vcF9yZXRfcHJvZmlsZXIoQ1RJX0FS
R1MpOwotCiAgICAgICAgIHN0YXRpYyB2b2lkKiBTRlhfQ0FMTCBjdGlfdm1fdGhyb3coQ1RJX0FS
R1MpOwogICAgICAgICBzdGF0aWMgdm9pZCogU0ZYX0NBTEwgY3RpX3ZtX2NvbXBpbGUoQ1RJX0FS
R1MpOwogICAgICAgICBzdGF0aWMgdm9pZCogU0ZYX0NBTEwgY3RpX3ZtX2xhenlMaW5rQ2FsbChD
VElfQVJHUyk7CkBAIC0zMDcsNiArMzA2LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZv
aWQgdW5jYWNoZUdldEJ5SUQoQ29kZUJsb2NrKiwgSW5zdHJ1Y3Rpb24qIHZQQyk7CiAgICAgICAg
IHZvaWQgdHJ5Q2FjaGVQdXRCeUlEKENhbGxGcmFtZSosIENvZGVCbG9jayosIEluc3RydWN0aW9u
KiwgSlNWYWx1ZSogYmFzZVZhbHVlLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAg
dm9pZCB1bmNhY2hlUHV0QnlJRChDb2RlQmxvY2sqLCBJbnN0cnVjdGlvbiogdlBDKTsKKyAgICAg
ICAgCisgICAgICAgIGJvb2wgaXNDYWxsT3Bjb2RlKE9wY29kZSBvcGNvZGUpIHsgcmV0dXJuIG9w
Y29kZSA9PSBnZXRPcGNvZGUob3BfY2FsbCkgfHwgb3Bjb2RlID09IGdldE9wY29kZShvcF9jb25z
dHJ1Y3QpIHx8IG9wY29kZSA9PSBnZXRPcGNvZGUob3BfY2FsbF9ldmFsKTsgfQogCiAjaWYgRU5B
QkxFKENUSSkKICAgICAgICAgdm9pZCB0cnlDVElDYWNoZUdldEJ5SUQoQ2FsbEZyYW1lKiwgQ29k
ZUJsb2NrKiwgdm9pZCogcmV0dXJuQWRkcmVzcywgSlNWYWx1ZSogYmFzZVZhbHVlLCBjb25zdCBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwpJbmRleDogSmF2
YVNjcmlwdENvcmUvVk0vT3Bjb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvVk0v
T3Bjb2RlLmgJKHJldmlzaW9uIDM3Njc5KQorKysgSmF2YVNjcmlwdENvcmUvVk0vT3Bjb2RlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE1OSw2ICsxNTksOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgbWFjcm8ob3Bfc3JldCkgXAogICAgICAgICBcCiAgICAgICAgIG1hY3JvKG9wX2RlYnVnKSBc
CisgICAgICAgIG1hY3JvKG9wX3Byb2ZpbGVfd2lsbF9jYWxsKSBcCisgICAgICAgIG1hY3JvKG9w
X3Byb2ZpbGVfZGlkX2NhbGwpIFwKICAgICAgICAgXAogICAgICAgICBtYWNybyhvcF9lbmQpIC8v
IGVuZCBtdXN0IGJlIHRoZSBsYXN0IG9wY29kZSBpbiB0aGUgbGlzdAogCkluZGV4OiBKYXZhU2Ny
aXB0Q29yZS9ranMvSlNHbG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS9ranMvSlNHbG9iYWxPYmplY3QuaAkocmV2aXNpb24gMzc2NzkpCisrKyBKYXZhU2NyaXB0Q29y
ZS9ranMvSlNHbG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjIyLDYgKzIyMiw4IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBEZWJ1Z2dlciogZGVidWdnZXIoKSBjb25zdCB7IHJl
dHVybiBkKCktPmRlYnVnZ2VyOyB9CiAgICAgICAgIHZvaWQgc2V0RGVidWdnZXIoRGVidWdnZXIq
IGRlYnVnZ2VyKSB7IGQoKS0+ZGVidWdnZXIgPSBkZWJ1Z2dlcjsgfQogICAgICAgICAKKyAgICAg
ICAgdmlydHVhbCBib29sIHN1cHBvcnRzUHJvZmlsaW5nKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KKyAgICAgICAgCiAgICAgICAgIGludCByZWN1cnNpb24oKSB7IHJldHVybiBkKCktPnJlY3Vy
c2lvbjsgfQogICAgICAgICB2b2lkIGluY1JlY3Vyc2lvbigpIHsgKytkKCktPnJlY3Vyc2lvbjsg
fQogICAgICAgICB2b2lkIGRlY1JlY3Vyc2lvbigpIHsgLS1kKCktPnJlY3Vyc2lvbjsgfQpJbmRl
eDogSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEph
dmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyLmNwcAkocmV2aXNpb24gMzc2NzkpCisrKyBK
YXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEw
MSwxMSArMTAxLDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBkaXNwYXRjaEZ1bmN0aW9uVG9Qcm8K
ICAgICB9CiB9CiAKLXZvaWQgUHJvZmlsZXI6OndpbGxFeGVjdXRlKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqIGNhbGxlZEZ1bmN0aW9uKQordm9pZCBQcm9maWxlcjo6d2lsbEV4ZWN1dGUoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlKiBmdW5jdGlvbikKIHsKICAgICBBU1NFUlQoIW1fY3VycmVu
dFByb2ZpbGVzLmlzRW1wdHkoKSk7CiAKLSAgICBkaXNwYXRjaEZ1bmN0aW9uVG9Qcm9maWxlcyht
X2N1cnJlbnRQcm9maWxlcywgJlByb2ZpbGVHZW5lcmF0b3I6OndpbGxFeGVjdXRlLCBjcmVhdGVD
YWxsSWRlbnRpZmllcigmZXhlYy0+Z2xvYmFsRGF0YSgpLCBjYWxsZWRGdW5jdGlvbiwgIiIsIDAp
LCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnByb2ZpbGVHcm91cCgpKTsKKyAgICBkaXNw
YXRjaEZ1bmN0aW9uVG9Qcm9maWxlcyhtX2N1cnJlbnRQcm9maWxlcywgJlByb2ZpbGVHZW5lcmF0
b3I6OndpbGxFeGVjdXRlLCBjcmVhdGVDYWxsSWRlbnRpZmllcigmZXhlYy0+Z2xvYmFsRGF0YSgp
LCBmdW5jdGlvbiwgIiIsIDApLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnByb2ZpbGVH
cm91cCgpKTsKIH0KIAogdm9pZCBQcm9maWxlcjo6d2lsbEV4ZWN1dGUoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBVU3RyaW5nJiBzb3VyY2VVUkwsIGludCBzdGFydGluZ0xpbmVOdW1iZXIpCkBAIC0x
MTcsMTEgKzExNywxMSBAQCB2b2lkIFByb2ZpbGVyOjp3aWxsRXhlY3V0ZShFeGVjU3RhdGUqIGV4
CiAgICAgZGlzcGF0Y2hGdW5jdGlvblRvUHJvZmlsZXMobV9jdXJyZW50UHJvZmlsZXMsICZQcm9m
aWxlR2VuZXJhdG9yOjp3aWxsRXhlY3V0ZSwgY2FsbElkZW50aWZpZXIsIGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKS0+cHJvZmlsZUdyb3VwKCkpOwogfQogCi12b2lkIFByb2ZpbGVyOjpkaWRF
eGVjdXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGNhbGxlZEZ1bmN0aW9uKQordm9pZCBQ
cm9maWxlcjo6ZGlkRXhlY3V0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIGZ1bmN0aW9uKQog
ewogICAgIEFTU0VSVCghbV9jdXJyZW50UHJvZmlsZXMuaXNFbXB0eSgpKTsKIAotICAgIGRpc3Bh
dGNoRnVuY3Rpb25Ub1Byb2ZpbGVzKG1fY3VycmVudFByb2ZpbGVzLCAmUHJvZmlsZUdlbmVyYXRv
cjo6ZGlkRXhlY3V0ZSwgY3JlYXRlQ2FsbElkZW50aWZpZXIoJmV4ZWMtPmdsb2JhbERhdGEoKSwg
Y2FsbGVkRnVuY3Rpb24sICIiLCAwKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5wcm9m
aWxlR3JvdXAoKSk7CisgICAgZGlzcGF0Y2hGdW5jdGlvblRvUHJvZmlsZXMobV9jdXJyZW50UHJv
ZmlsZXMsICZQcm9maWxlR2VuZXJhdG9yOjpkaWRFeGVjdXRlLCBjcmVhdGVDYWxsSWRlbnRpZmll
cigmZXhlYy0+Z2xvYmFsRGF0YSgpLCBmdW5jdGlvbiwgIiIsIDApLCBleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCktPnByb2ZpbGVHcm91cCgpKTsKIH0KIAogdm9pZCBQcm9maWxlcjo6ZGlkRXhl
Y3V0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFVTdHJpbmcmIHNvdXJjZVVSTCwgaW50IHN0YXJ0
aW5nTGluZU51bWJlcikKQEAgLTEzMSwxOCArMTMxLDE3IEBAIHZvaWQgUHJvZmlsZXI6OmRpZEV4
ZWN1dGUoRXhlY1N0YXRlKiBleGUKICAgICBkaXNwYXRjaEZ1bmN0aW9uVG9Qcm9maWxlcyhtX2N1
cnJlbnRQcm9maWxlcywgJlByb2ZpbGVHZW5lcmF0b3I6OmRpZEV4ZWN1dGUsIGNyZWF0ZUNhbGxJ
ZGVudGlmaWVyKCZleGVjLT5nbG9iYWxEYXRhKCksIDAsIHNvdXJjZVVSTCwgc3RhcnRpbmdMaW5l
TnVtYmVyKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5wcm9maWxlR3JvdXAoKSk7CiB9
CiAKLUNhbGxJZGVudGlmaWVyIFByb2ZpbGVyOjpjcmVhdGVDYWxsSWRlbnRpZmllcihKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEsIEpTT2JqZWN0KiBjYWxsZWRGdW5jdGlvbiwgY29uc3QgVVN0cmlu
ZyYgZGVmYXVsdFNvdXJjZVVSTCwgaW50IGRlZmF1bHRMaW5lTnVtYmVyKQorQ2FsbElkZW50aWZp
ZXIgUHJvZmlsZXI6OmNyZWF0ZUNhbGxJZGVudGlmaWVyKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSwgSlNWYWx1ZSogZnVuY3Rpb24sIGNvbnN0IFVTdHJpbmcmIGRlZmF1bHRTb3VyY2VVUkwsIGlu
dCBkZWZhdWx0TGluZU51bWJlcikKIHsKLSAgICBpZiAoIWNhbGxlZEZ1bmN0aW9uKQorICAgIGlm
ICghZnVuY3Rpb24pCiAgICAgICAgIHJldHVybiBDYWxsSWRlbnRpZmllcihHbG9iYWxDb2RlRXhl
Y3V0aW9uLCBkZWZhdWx0U291cmNlVVJMLCBkZWZhdWx0TGluZU51bWJlcik7Ci0KLSAgICBpZiAo
Y2FsbGVkRnVuY3Rpb24tPmluaGVyaXRzKCZKU0Z1bmN0aW9uOjppbmZvKSkKLSAgICAgICAgcmV0
dXJuIGNyZWF0ZUNhbGxJZGVudGlmaWVyRnJvbUZ1bmN0aW9uSW1wKGdsb2JhbERhdGEsIHN0YXRp
Y19jYXN0PEpTRnVuY3Rpb24qPihjYWxsZWRGdW5jdGlvbikpOwotICAgIGlmIChjYWxsZWRGdW5j
dGlvbi0+aW5oZXJpdHMoJkludGVybmFsRnVuY3Rpb246OmluZm8pKQotICAgICAgICByZXR1cm4g
Q2FsbElkZW50aWZpZXIoc3RhdGljX2Nhc3Q8SW50ZXJuYWxGdW5jdGlvbio+KGNhbGxlZEZ1bmN0
aW9uKS0+bmFtZShnbG9iYWxEYXRhKSwgZGVmYXVsdFNvdXJjZVVSTCwgZGVmYXVsdExpbmVOdW1i
ZXIpOwotCi0gICAgVVN0cmluZyBuYW1lID0gIigiICsgY2FsbGVkRnVuY3Rpb24tPmNsYXNzTmFt
ZSgpICsgIiBvYmplY3QpIjsKLSAgICByZXR1cm4gQ2FsbElkZW50aWZpZXIobmFtZSwgZGVmYXVs
dFNvdXJjZVVSTCwgZGVmYXVsdExpbmVOdW1iZXIpOworICAgIGlmICghZnVuY3Rpb24tPmlzT2Jq
ZWN0KCkpCisgICAgICAgIHJldHVybiBDYWxsSWRlbnRpZmllcigiKHVua25vd24pIiwgZGVmYXVs
dFNvdXJjZVVSTCwgZGVmYXVsdExpbmVOdW1iZXIpOworICAgIGlmIChzdGF0aWNfY2FzdDxKU09i
amVjdCo+KGZ1bmN0aW9uKS0+aW5oZXJpdHMoJkpTRnVuY3Rpb246OmluZm8pKQorICAgICAgICBy
ZXR1cm4gY3JlYXRlQ2FsbElkZW50aWZpZXJGcm9tRnVuY3Rpb25JbXAoZ2xvYmFsRGF0YSwgc3Rh
dGljX2Nhc3Q8SlNGdW5jdGlvbio+KGZ1bmN0aW9uKSk7CisgICAgaWYgKHN0YXRpY19jYXN0PEpT
T2JqZWN0Kj4oZnVuY3Rpb24pLT5pbmhlcml0cygmSW50ZXJuYWxGdW5jdGlvbjo6aW5mbykpCisg
ICAgICAgIHJldHVybiBDYWxsSWRlbnRpZmllcihzdGF0aWNfY2FzdDxJbnRlcm5hbEZ1bmN0aW9u
Kj4oZnVuY3Rpb24pLT5uYW1lKGdsb2JhbERhdGEpLCBkZWZhdWx0U291cmNlVVJMLCBkZWZhdWx0
TGluZU51bWJlcik7CisgICAgcmV0dXJuIENhbGxJZGVudGlmaWVyKCIoIiArIHN0YXRpY19jYXN0
PEpTT2JqZWN0Kj4oZnVuY3Rpb24pLT5jbGFzc05hbWUoKSArICIgb2JqZWN0KSIsIGRlZmF1bHRT
b3VyY2VVUkwsIGRlZmF1bHRMaW5lTnVtYmVyKTsKIH0KIAogQ2FsbElkZW50aWZpZXIgY3JlYXRl
Q2FsbElkZW50aWZpZXJGcm9tRnVuY3Rpb25JbXAoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBK
U0Z1bmN0aW9uKiBmdW5jdGlvbikKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2Zp
bGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXIuaAko
cmV2aXNpb24gMzc2NzkpCisrKyBKYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC01MSwxNCArNTEsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IH0KIAogICAgICAgICBzdGF0aWMgUHJvZmlsZXIqIHByb2ZpbGVyKCk7IAotICAgICAgICBzdGF0
aWMgQ2FsbElkZW50aWZpZXIgY3JlYXRlQ2FsbElkZW50aWZpZXIoSlNHbG9iYWxEYXRhKiwgSlNP
YmplY3QqLCBjb25zdCBVU3RyaW5nJiBzb3VyY2VVUkwsIGludCBsaW5lTnVtYmVyKTsKKyAgICAg
ICAgc3RhdGljIENhbGxJZGVudGlmaWVyIGNyZWF0ZUNhbGxJZGVudGlmaWVyKEpTR2xvYmFsRGF0
YSosIEpTVmFsdWUqLCBjb25zdCBVU3RyaW5nJiBzb3VyY2VVUkwsIGludCBsaW5lTnVtYmVyKTsK
IAogICAgICAgICB2b2lkIHN0YXJ0UHJvZmlsaW5nKEV4ZWNTdGF0ZSosIGNvbnN0IFVTdHJpbmcm
IHRpdGxlKTsKICAgICAgICAgUGFzc1JlZlB0cjxQcm9maWxlPiBzdG9wUHJvZmlsaW5nKEV4ZWNT
dGF0ZSosIGNvbnN0IFVTdHJpbmcmIHRpdGxlKTsKIAotICAgICAgICB2b2lkIHdpbGxFeGVjdXRl
KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiBjYWxsZWRGdW5jdGlvbik7CisgICAgICAgIHZvaWQgd2ls
bEV4ZWN1dGUoRXhlY1N0YXRlKiwgSlNWYWx1ZSogZnVuY3Rpb24pOwogICAgICAgICB2b2lkIHdp
bGxFeGVjdXRlKEV4ZWNTdGF0ZSosIGNvbnN0IFVTdHJpbmcmIHNvdXJjZVVSTCwgaW50IHN0YXJ0
aW5nTGluZU51bWJlcik7Ci0gICAgICAgIHZvaWQgZGlkRXhlY3V0ZShFeGVjU3RhdGUqLCBKU09i
amVjdCogY2FsbGVkRnVuY3Rpb24pOworICAgICAgICB2b2lkIGRpZEV4ZWN1dGUoRXhlY1N0YXRl
KiwgSlNWYWx1ZSogZnVuY3Rpb24pOwogICAgICAgICB2b2lkIGRpZEV4ZWN1dGUoRXhlY1N0YXRl
KiwgY29uc3QgVVN0cmluZyYgc291cmNlVVJMLCBpbnQgc3RhcnRpbmdMaW5lTnVtYmVyKTsKIAog
ICAgICAgICBjb25zdCBWZWN0b3I8UmVmUHRyPFByb2ZpbGVHZW5lcmF0b3I+ID4mIGN1cnJlbnRQ
cm9maWxlcygpIHsgcmV0dXJuIG1fY3VycmVudFByb2ZpbGVzOyB9OwpJbmRleDogV2ViQ29yZS9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM3Njgy
KQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzMiBAQAor
MjAwOC0xMC0xOCAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeGVkIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTczNQorICAgICAgICBFbWl0IHByb2ZpbGlu
ZyBpbnN0cnVtZW50YXRpb24gb25seSBpZiB0aGUgV2ViIEluc3BlY3RvcidzIHByb2ZpbGluZwor
ICAgICAgICBmZWF0dXJlIGlzIGVuYWJsZWQKKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9N
V2luZG93QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvd0Jhc2U6OnN1cHBv
cnRzUHJvZmlsaW5nKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuaDog
SW1wbGVtZW50ZWQgdGhlIGludGVyZmFjZSBmb3Igc3BlY2lmeWluZworICAgICAgICB3aGV0aGVy
IGEgdGFyZ2V0IGdsb2JhbCBvYmplY3QgaGFzIHRoZSBXZWIgSW5zcGVjdG9yJ3MgcHJvZmlsaW5n
IGZlYXR1cmUKKyAgICAgICAgZW5hYmxlZC4KKworICAgICAgICAqIGluc3BlY3Rvci9KYXZhU2Ny
aXB0RGVidWdTZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SmF2YVNjcmlwdERlYnVnU2Vy
dmVyOjpyZWNvbXBpbGVBbGxKU0Z1bmN0aW9uc1Nvb24pOgorICAgICAgICAoV2ViQ29yZTo6SmF2
YVNjcmlwdERlYnVnU2VydmVyOjpkaWRBZGRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpK
YXZhU2NyaXB0RGVidWdTZXJ2ZXI6OmRpZFJlbW92ZUxpc3RlbmVyKToKKyAgICAgICAgKiBpbnNw
ZWN0b3IvSmF2YVNjcmlwdERlYnVnU2VydmVyLmg6IEV4cG9ydGVkIGFuIEFQSSBmb3IgcmVjb21w
aWxpbmcsIAorICAgICAgICB1c2VkIGJ5IHRoZSBTZXR0aW5ncyBvYmplY3QuCisKKyAgICAgICAg
KiBwYWdlL1NldHRpbmdzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNldHRpbmdzOjpTZXR0aW5n
cyk6CisgICAgICAgIChXZWJDb3JlOjpTZXR0aW5nczo6c2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxl
ZCk6CisgICAgICAgICogcGFnZS9TZXR0aW5ncy5oOiBSZWNvbXBpbGUgd2hlbiB0aGUgZGV2ZWxv
cGVyIG1lbnUgaXMgZW5hYmxlZC9kaXNhYmxlZAorICAgICAgICBmb3IgdGhlIGZpcnN0IHRpbWUs
IHRvIGFkZC9yZW1vdmUgcHJvZmlsaW5nIGhvb2tzLiBJbiB0aGUgZnV0dXJlLCB3aXRoCisgICAg
ICAgIGJldHRlciBXZWIgSW5zcGVjdG9yIFVJLCB3ZSBjYW4gZG8gdGhpcyBvbiBhIHBhZ2UtYnkt
cGFnZSBiYXNpcywKKyAgICAgICAgaW5zdGVhZCBvZiBhIGdsb2JhbCBiYXNpcy4KKwogMjAwOC0x
MC0xOCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgT2xpdmVyIEh1bnQuCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2Uu
Y3BwCShyZXZpc2lvbiAzNzY3OSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dC
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjkyLDYgKzY5MiwxOSBAQCBFeGVjU3RhdGUqIEpT
RE9NV2luZG93QmFzZTo6Z2xvYmFsRXhlYygpCiAgICAgcmV0dXJuIEJhc2U6Omdsb2JhbEV4ZWMo
KTsKIH0KIAorYm9vbCBKU0RPTVdpbmRvd0Jhc2U6OnN1cHBvcnRzUHJvZmlsaW5nKCkgY29uc3QK
K3sKKyAgICBGcmFtZSogZnJhbWUgPSBpbXBsKCktPmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gZnJhbWUt
PnNldHRpbmdzKCk7CisgICAgaWYgKCFzZXR0aW5ncykKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIAorICAgIHJldHVybiBzZXR0aW5ncy0+ZGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCgpOworfQor
CiBib29sIEpTRE9NV2luZG93QmFzZTo6c2hvdWxkSW50ZXJydXB0U2NyaXB0KCkgY29uc3QKIHsK
ICAgICBBU1NFUlQoaW1wbCgpLT5mcmFtZSgpKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMv
SlNET01XaW5kb3dCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TVdpbmRvd0Jhc2UuaAkocmV2aXNpb24gMzc2NzkpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NV2luZG93QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTAsNiArMTEwLDggQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZv
OwogCiAgICAgICAgIHZpcnR1YWwgSlNDOjpFeGVjU3RhdGUqIGdsb2JhbEV4ZWMoKTsKKyAgICAg
ICAgCisgICAgICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c1Byb2ZpbGluZygpIGNvbnN0OwogCiAg
ICAgICAgIHZpcnR1YWwgYm9vbCBzaG91bGRJbnRlcnJ1cHRTY3JpcHQoKSBjb25zdDsKIApJbmRl
eDogV2ViQ29yZS9pbnNwZWN0b3IvSmF2YVNjcmlwdERlYnVnU2VydmVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2luc3BlY3Rvci9KYXZhU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCShyZXZpc2lv
biAzNzY3OSkKKysrIFdlYkNvcmUvaW5zcGVjdG9yL0phdmFTY3JpcHREZWJ1Z1NlcnZlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUyOCw2ICs1MjgsMTEgQEAgdm9pZCBKYXZhU2NyaXB0RGVidWdT
ZXJ2ZXI6OmRpZFJlYWNoQnJlYQogICAgIHBhdXNlSWZOZWVkZWQodG9QYWdlKGRlYnVnZ2VyQ2Fs
bEZyYW1lLmR5bmFtaWNHbG9iYWxPYmplY3QoKSkpOwogfQogCit2b2lkIEphdmFTY3JpcHREZWJ1
Z1NlcnZlcjo6cmVjb21waWxlQWxsSlNGdW5jdGlvbnNTb29uKCkKK3sKKyAgICBtX3JlY29tcGls
ZVRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKK30KKwogdm9pZCBKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6
OnJlY29tcGlsZUFsbEpTRnVuY3Rpb25zKFRpbWVyPEphdmFTY3JpcHREZWJ1Z1NlcnZlcj4qKQog
ewogICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKQEAgLTU4Myw3ICs1ODgsNyBAQCB2b2lkIEphdmFT
Y3JpcHREZWJ1Z1NlcnZlcjo6cmVjb21waWxlQWxsCiAKIHZvaWQgSmF2YVNjcmlwdERlYnVnU2Vy
dmVyOjpkaWRBZGRMaXN0ZW5lcihQYWdlKiBwYWdlKQogewotICAgIG1fcmVjb21waWxlVGltZXIu
c3RhcnRPbmVTaG90KDApOworICAgIHJlY29tcGlsZUFsbEpTRnVuY3Rpb25zU29vbigpOwogCiAg
ICAgaWYgKHBhZ2UpCiAgICAgICAgIHBhZ2UtPnNldERlYnVnZ2VyKHRoaXMpOwpAQCAtNTk2LDcg
KzYwMSw3IEBAIHZvaWQgSmF2YVNjcmlwdERlYnVnU2VydmVyOjpkaWRSZW1vdmVMaXMKICAgICBp
ZiAoaGFzR2xvYmFsTGlzdGVuZXJzKCkgfHwgKHBhZ2UgJiYgaGFzTGlzdGVuZXJzSW50ZXJlc3Rl
ZEluUGFnZShwYWdlKSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fcmVjb21waWxlVGltZXIu
c3RhcnRPbmVTaG90KDApOworICAgIHJlY29tcGlsZUFsbEpTRnVuY3Rpb25zU29vbigpOwogCiAg
ICAgaWYgKHBhZ2UpCiAgICAgICAgIHBhZ2UtPnNldERlYnVnZ2VyKDApOwpJbmRleDogV2ViQ29y
ZS9pbnNwZWN0b3IvSmF2YVNjcmlwdERlYnVnU2VydmVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9pbnNwZWN0b3IvSmF2YVNjcmlwdERlYnVnU2VydmVyLmgJKHJldmlzaW9uIDM3Njc5KQorKysg
V2ViQ29yZS9pbnNwZWN0b3IvSmF2YVNjcmlwdERlYnVnU2VydmVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTczLDcgKzczLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHN0ZXBP
dmVyU3RhdGVtZW50KCk7CiAgICAgICAgIHZvaWQgc3RlcE91dE9mRnVuY3Rpb24oKTsKIAotICAg
ICAgICB2b2lkIHJlY29tcGlsZUFsbEpTRnVuY3Rpb25zKFRpbWVyPEphdmFTY3JpcHREZWJ1Z1Nl
cnZlcj4qKTsKKyAgICAgICAgdm9pZCByZWNvbXBpbGVBbGxKU0Z1bmN0aW9uc1Nvb24oKTsKKyAg
ICAgICAgdm9pZCByZWNvbXBpbGVBbGxKU0Z1bmN0aW9ucyhUaW1lcjxKYXZhU2NyaXB0RGVidWdT
ZXJ2ZXI+KiA9IDApOwogCiAgICAgICAgIEphdmFTY3JpcHRDYWxsRnJhbWUqIGN1cnJlbnRDYWxs
RnJhbWUoKTsKIApJbmRleDogV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCShyZXZpc2lvbiAzNzY3OSkKKysrIFdlYkNvcmUv
cGFnZS9TZXR0aW5ncy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDkgKzI4LDEwIEBACiAKICNp
bmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgorI2luY2x1ZGUgIkhpc3Rv
cnlJdGVtLmgiCisjaW5jbHVkZSAiSmF2YVNjcmlwdERlYnVnU2VydmVyLmgiCiAjaW5jbHVkZSAi
UGFnZS5oIgogI2luY2x1ZGUgIlBhZ2VDYWNoZS5oIgotI2luY2x1ZGUgIkhpc3RvcnlJdGVtLmgi
CiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAjaW5jbHVkZSAiRGF0YWJhc2VUcmFja2VyLmgiCkBA
IC03NCw2ICs3NSw3IEBAIFNldHRpbmdzOjpTZXR0aW5ncyhQYWdlKiBwYWdlKQogICAgICwgbV9z
aG93c1VSTHNJblRvb2xUaXBzKGZhbHNlKQogICAgICwgbV9mb3JjZUZUUERpcmVjdG9yeUxpc3Rp
bmdzKGZhbHNlKQogICAgICwgbV9kZXZlbG9wZXJFeHRyYXNFbmFibGVkKGZhbHNlKQorICAgICwg
bV9kaWRJbml0aWFsaXplRGV2ZWxvcGVyRXh0cmFzRW5hYmxlZChmYWxzZSkKICAgICAsIG1fYXV0
aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQodHJ1ZSkKICAgICAsIG1fbmVlZHNTaXRlU3BlY2lmaWNR
dWlya3MoZmFsc2UpCiAgICAgLCBtX2ZvbnRSZW5kZXJpbmdNb2RlKDApCkBAIC0zMDgsNyArMzEw
LDE4IEBAIHZvaWQgU2V0dGluZ3M6OnNldEZvcmNlRlRQRGlyZWN0b3J5TGlzdGkKIAogdm9pZCBT
ZXR0aW5nczo6c2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZChib29sIGRldmVsb3BlckV4dHJhc0Vu
YWJsZWQpCiB7CisgICAgaWYgKG1fZGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCA9PSBkZXZlbG9wZXJF
eHRyYXNFbmFibGVkKQorICAgICAgICByZXR1cm47CisKICAgICBtX2RldmVsb3BlckV4dHJhc0Vu
YWJsZWQgPSBkZXZlbG9wZXJFeHRyYXNFbmFibGVkOworCisgICAgLy8gQXZvaWQgcmVjb21waWxp
bmcgd2hlbiBpbml0aWFsaXppbmcgYSBwYWdlLgorICAgIGlmICghbV9kaWRJbml0aWFsaXplRGV2
ZWxvcGVyRXh0cmFzRW5hYmxlZCkgeworICAgICAgICBtX2RpZEluaXRpYWxpemVEZXZlbG9wZXJF
eHRyYXNFbmFibGVkID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEphdmFT
Y3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkucmVjb21waWxlQWxsSlNGdW5jdGlvbnNTb29uKCk7
CiB9CiAKIHZvaWQgU2V0dGluZ3M6OnNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKGJvb2wg
YXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQpCkluZGV4OiBXZWJDb3JlL3BhZ2UvU2V0dGluZ3Mu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaAkocmV2aXNpb24gMzc2Nzkp
CisrKyBXZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaAkod29ya2luZyBjb3B5KQpAQCAtMjE4LDYgKzIx
OCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBtX3Nob3dzVVJMc0luVG9v
bFRpcHMgOiAxOwogICAgICAgICBib29sIG1fZm9yY2VGVFBEaXJlY3RvcnlMaXN0aW5ncyA6IDE7
CiAgICAgICAgIGJvb2wgbV9kZXZlbG9wZXJFeHRyYXNFbmFibGVkIDogMTsKKyAgICAgICAgYm9v
bCBtX2RpZEluaXRpYWxpemVEZXZlbG9wZXJFeHRyYXNFbmFibGVkIDogMTsKICAgICAgICAgYm9v
bCBtX2F1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkIDogMTsKICAgICAgICAgYm9vbCBtX25lZWRz
U2l0ZVNwZWNpZmljUXVpcmtzIDogMTsKICAgICAgICAgdW5zaWduZWQgbV9mb250UmVuZGVyaW5n
TW9kZSA6IDE7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAzNzY4MykKKysrIExheW91dFRlc3RzL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDA4LTEwLTE4ICBHZW9mZnJl
eSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGVzdCBmb3IgYnVncyBmaXhlZCB3aGlsZSB3b3JraW5nIG9u
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTczNQorICAgICAgICBF
bWl0IHByb2ZpbGluZyBpbnN0cnVtZW50YXRpb24gb25seSBpZiB0aGUgV2ViIEluc3BlY3Rvcidz
IHByb2ZpbGluZworICAgICAgICBmZWF0dXJlIGlzIGVuYWJsZWQKKworICAgICAgICAqIGZhc3Qv
anMvZXhjZXB0aW9uLXRocm93bi1mcm9tLW5ldy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIGZhc3QvanMvZXhjZXB0aW9uLXRocm93bi1mcm9tLW5ldy5odG1sOiBBZGRlZC4KKwogMjAw
OC0xMC0xNyAgUGFtZWxhIEdyZWVuZSAgPHBhbUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQWRk
IGEgbnVtYmVyIG9mIG5ldyB0ZXN0cy4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvZXhjZXB0
aW9uLXRocm93bi1mcm9tLW5ldy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC9qcy9leGNlcHRpb24tdGhyb3duLWZyb20tbmV3LWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvZXhjZXB0aW9uLXRocm93bi1mcm9tLW5ldy1l
eHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNSBAQAorVGhpcyBwYWdlIHRlc3Rz
IGV4Y2VwdGlvbnMgdGhyb3duIGZyb20gJ25ldycgZXhwcmVzc2lvbnMuIElmIHRoZSB0ZXN0IHBh
c3NlcywgeW91J2xsIHNlZSBhIHNlcmllcyBvZiBQQVNTIG1lc3NhZ2VzIGJlbG93LgorCitQQVNT
OiBlMSBzaG91bGQgYmUgJ1R5cGVFcnJvcjogUmVzdWx0IG9mIGV4cHJlc3Npb24gJ2YnIFt1bmRl
ZmluZWRdIGlzIG5vdCBhIGNvbnN0cnVjdG9yLicgYW5kIGlzLgorUEFTUzogZTIgc2hvdWxkIGJl
ICdUeXBlRXJyb3I6IFJlc3VsdCBvZiBleHByZXNzaW9uICdnJyBbdW5kZWZpbmVkXSBpcyBub3Qg
YSBmdW5jdGlvbi4nIGFuZCBpcy4KKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9leGNlcHRp
b24tdGhyb3duLWZyb20tbmV3Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9q
cy9leGNlcHRpb24tdGhyb3duLWZyb20tbmV3Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9mYXN0L2pzL2V4Y2VwdGlvbi10aHJvd24tZnJvbS1uZXcuaHRtbAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw0NCBAQAorPHA+CitUaGlzIHBhZ2UgdGVzdHMgZXhjZXB0aW9ucyB0aHJvd24g
ZnJvbSAnbmV3JyBleHByZXNzaW9ucy4gSWYgdGhlIHRlc3QgcGFzc2VzLAoreW91J2xsIHNlZSBh
IHNlcmllcyBvZiBQQVNTIG1lc3NhZ2VzIGJlbG93LgorPC9wPgorPHByZSBpZD0iY29uc29sZSI+
PC9wcmU+CisKKzxzY3JpcHQ+CitmdW5jdGlvbiBsb2cocykKK3sKKyAgICBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgiY29uc29sZSIpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2Rl
KHMgKyAiXG4iKSk7Cit9CisKK2Z1bmN0aW9uIHNob3VsZEJlKGEsIGFEZXNjcmlwdGlvbiwgYikK
K3sKKyAgICBpZiAoYSA9PSBiKSB7CisgICAgICAgIGxvZygiUEFTUzogIiArIGFEZXNjcmlwdGlv
biArICIgc2hvdWxkIGJlICciICsgU3RyaW5nKGIpICsgIicgYW5kIGlzLiIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIAorICAgIGxvZyAoIkZBSUw6ICIgKyBhRGVzY3JpcHRpb24gKyAi
IHNob3VsZCBiZSAnIiArIFN0cmluZyhiKSArICInIGJ1dCBpbnN0ZWFkIGlzICciICsgU3RyaW5n
KGEpICsgIicuIik7Cit9CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworCisoZnVuY3Rpb24gKCkgeworICAg
IHRyeSB7CisgICAgICAgIHZhciBmOworICAgICAgICBuZXcgZjsKKyAgICB9IGNhdGNoKGUxKSB7
CisgICAgICAgIHNob3VsZEJlKGUxLCAiZTEiLCAiVHlwZUVycm9yOiBSZXN1bHQgb2YgZXhwcmVz
c2lvbiAnZicgW3VuZGVmaW5lZF0gaXMgbm90IGEgY29uc3RydWN0b3IuIik7CisgICAgfQorfSko
KTsKKworKGZ1bmN0aW9uICgpIHsKKyAgICB0cnkgeworICAgICAgICB2YXIgZjsKKyAgICAgICAg
dmFyIGc7CisgICAgICAgIG5ldyBmKGcoKSk7CisgICAgfSBjYXRjaChlMikgeworICAgICAgICBz
aG91bGRCZShlMiwgImUyIiwgIlR5cGVFcnJvcjogUmVzdWx0IG9mIGV4cHJlc3Npb24gJ2cnIFt1
bmRlZmluZWRdIGlzIG5vdCBhIGZ1bmN0aW9uLiIpOworICAgIH0KK30pKCk7Cis8L3NjcmlwdD4K
</data>
<flag name="review"
          id="11152"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>