<?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>128031</bug_id>
          
          <creation_ts>2014-01-31 17:12:56 -0800</creation_ts>
          <short_desc>Simplified name scope creation for function expressions</short_desc>
          <delta_ts>2014-02-03 12:34:47 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Geoffrey Garen">ggaren</reporter>
          <assigned_to name="Geoffrey Garen">ggaren</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>mark.lam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>974538</commentid>
    <comment_count>0</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-01-31 17:12:56 -0800</bug_when>
    <thetext>Simplified name scope creation for function expressions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>974543</commentid>
    <comment_count>1</comment_count>
      <attachid>222866</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-01-31 17:29:40 -0800</bug_when>
    <thetext>Created attachment 222866
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>974544</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-01-31 17:32:21 -0800</bug_when>
    <thetext>Attachment 222866 did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/JSNameScope.h:77:  Comma should be at the beginning of the line in a member initialization list.  [whitespace/init] [4]
Total errors found: 1 in 21 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>974558</commentid>
    <comment_count>3</comment_count>
      <attachid>222866</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-01-31 19:10:30 -0800</bug_when>
    <thetext>Comment on attachment 222866
Patch

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

Other than the part in isNumericCompareFunction() which I&apos;m unsure about, everything else looks good to me.

&gt; Source/JavaScriptCore/runtime/ArrayPrototype.cpp:86
&gt; +    JSScope* scope = callData.js.scope;
&gt;  
&gt; -    JSObject* error = executable-&gt;prepareForExecution(exec, callData.js.scope, CodeForCall);
&gt; +    JSObject* error = executable-&gt;prepareForExecution(exec, jsCast&lt;JSFunction*&gt;(function), &amp;scope, CodeForCall);

Is there a reason you didn&apos;t want prepareForExecution() to update the scope in callData.js.scope?  I&apos;m not sure which (to update or not to update) is the right thing to do yet, but thought I&apos;d bring this to your attention and ask in case this was not intentional.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>974560</commentid>
    <comment_count>4</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-01-31 19:41:16 -0800</bug_when>
    <thetext>&gt; &gt; Source/JavaScriptCore/runtime/ArrayPrototype.cpp:86
&gt; &gt; +    JSScope* scope = callData.js.scope;
&gt; &gt;  
&gt; &gt; -    JSObject* error = executable-&gt;prepareForExecution(exec, callData.js.scope, CodeForCall);
&gt; &gt; +    JSObject* error = executable-&gt;prepareForExecution(exec, jsCast&lt;JSFunction*&gt;(function), &amp;scope, CodeForCall);
&gt; 
&gt; Is there a reason you didn&apos;t want prepareForExecution() to update the scope in callData.js.scope?  I&apos;m not sure which (to update or not to update) is the right thing to do yet, but thought I&apos;d bring this to your attention and ask in case this was not intentional.

callData.js.scope is const, so we can&apos;t update it. It&apos;s const so a class can return the same piece of data each time, if it likes.

In this case, we don&apos;t need to update our scope because we don&apos;t use it. We&apos;re only compiling in order to analyze the code -- we&apos;re not running it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>974575</commentid>
    <comment_count>5</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-01-31 22:06:08 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; callData.js.scope is const, so we can&apos;t update it. It&apos;s const so a class can return the same piece of data each time, if it likes.

I should have noticed the const.

&gt; In this case, we don&apos;t need to update our scope because we don&apos;t use it. We&apos;re only compiling in order to analyze the code -- we&apos;re not running it.

Sounds good.  r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>975965</commentid>
    <comment_count>6</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-02-03 12:34:47 -0800</bug_when>
    <thetext>Committed r163321: &lt;http://trac.webkit.org/changeset/163321&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>222866</attachid>
            <date>2014-01-31 17:29:40 -0800</date>
            <delta_ts>2014-01-31 22:06:30 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-128031-20140131172940.patch</filename>
            <type>text/plain</type>
            <size>34908</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYzMjI0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg0IEBA
CisyMDE0LTAxLTMxICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAg
ICAgU2ltcGxpZmllZCBuYW1lIHNjb3BlIGNyZWF0aW9uIGZvciBmdW5jdGlvbiBleHByZXNzaW9u
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI4MDMx
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgM1ggc3Bl
ZWR1cCBvbiBqcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9mdW5jdGlvbi13aXRoLWV2YWwuanMuCisK
KyAgICAgICAgV2UgdXNlZCB0byBlbWl0IGJ5dGVjb2RlIHRvIHB1c2ggYSBuYW1lIGludG8gbG9j
YWwgc2NvcGUgZXZlcnkKKyAgICAgICAgdGltZSBhIGZ1bmN0aW9uIHRoYXQgbmVlZGVkIHN1Y2gg
YSBuYW1lIGV4ZWN1dGVkLiBOb3csIHdlIHB1c2ggdGhlIG5hbWUKKyAgICAgICAgaW50byBzY29w
ZSBvbmNlIG9uIHRoZSBmdW5jdGlvbiBvYmplY3QsIGFuZCBsZWF2ZSBpdCB0aGVyZS4KKworICAg
ICAgICBUaGlzIGlzIGZhc3RlciwgYW5kIGl0IGFsc28gcmVkdWNlcyB0aGUgbnVtYmVyIG9mIHZh
cmlhYmxlIHJlc29sdXRpb24KKyAgICAgICAgbW9kZXMgeW91IGhhdmUgdG8gd29ycnkgYWJvdXQg
d2hlbiB0aGlua2luZyBhYm91dCBieXRlY29kZSBhbmQgdGhlCisgICAgICAgIGRlYnVnZ2VyLgor
CisgICAgICAgIFRoaXMgcGF0Y2ggaXMgc2xpZ2h0bHkgY29tcGxpY2F0ZWQgYnkgdGhlIGZhY3Qg
dGhhdCB3ZSBkb24ndCBrbm93IGlmCisgICAgICAgIGEgZnVuY3Rpb24gbmVlZHMgYSBuYW1lIHNj
b3BlIHVudGlsIHdlIHBhcnNlIGl0cyBib2R5LiBTbywgdGhlcmUncyBzb21lCisgICAgICAgIGds
dWUgY29kZSBpbiBoZXJlIHRvIGRlbGF5IGZpbGxpbmcgaW4gYSBmdW5jdGlvbidzIHNjb3BlIHVu
dGlsIHdlIHBhcnNlCisgICAgICAgIGl0cyBib2R5IGZvciB0aGUgZmlyc3QgdGltZS4KKworICAg
ICAgICAqIGJ5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Z2Vu
ZXJhdGVGdW5jdGlvbkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OlVubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSk6CisgICAgICAgICogYnl0ZWNv
ZGUvVW5saW5rZWRDb2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6VW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGU6OmZ1bmN0aW9uTW9kZSk6IFJlbmFtZWQKKyAgICAgICAgZnVuY3Rpb25OYW1lSXNJ
blNjb3BlVG9nZ2xlIHRvIGZ1bmN0aW9uTW9kZS4KKworICAgICAgICAqIGJ5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpC
eXRlY29kZUdlbmVyYXRvcik6IE5vIG5lZWQgdG8gZW1pdCBjb252ZXJ0X3RoaXMKKyAgICAgICAg
d2hlbiBkZWJ1Z2dpbmcuIFRoZSBkZWJ1Z2dlciB3aWxsIHBlcmZvcm0gdGhlIGNvbnZlcnNpb24g
YXMgbmVlZGVkLgorCisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpyZXNvbHZlQ2Fs
bGVlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmFkZENhbGxlZSk6IFNpbXBs
aWZpZWQgdGhpcyBjb2RlIGJ5IHJlbW92aW5nCisgICAgICAgIHRoZSAibXkgZnVuY3Rpb24gbmVl
ZHMgYSBuYW1lIHNjb3BlLCBidXQgZGlkbid0IGFsbG9jYXRlIG9uZSIgbW9kZS4KKworICAgICAg
ICAqIGludGVycHJldGVyL0ludGVycHJldGVyLmNwcDoKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0
ZXI6OmV4ZWN1dGUpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6ZXhlY3V0ZUNhbGwpOgor
ICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6ZXhlY3V0ZUNvbnN0cnVjdCk6CisgICAgICAgIChK
U0M6OkludGVycHJldGVyOjpwcmVwYXJlRm9yUmVwZWF0Q2FsbCk6IFBhc3MgYSBzY29wZSBzbG90
IHRocm91Z2ggdG8KKyAgICAgICAgQ29kZUJsb2NrIGdlbmVyYXRpb24sIHNvIHdlIGNhbiBhZGQg
YSBmdW5jdGlvbiBuYW1lIHNjb3BlIGlmIHRoZSBwYXJzZWQKKyAgICAgICAgZnVuY3Rpb24gYm9k
eSByZXF1aXJlcyBvbmUuCisKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAg
ICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6c2V0
VXBDYWxsKTogRGl0dG8uCisKKyAgICAgICAgKiBwYXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5oOgor
ICAgICAgICAoSlNDOjpGdW5jRXhwck5vZGU6OkZ1bmNFeHByTm9kZSk6CisgICAgICAgIChKU0M6
OkZ1bmNEZWNsTm9kZTo6RnVuY0RlY2xOb2RlKToKKyAgICAgICAgKiBwYXJzZXIvTm9kZXMuY3Bw
OgorICAgICAgICAoSlNDOjpGdW5jdGlvbkJvZHlOb2RlOjpmaW5pc2hQYXJzaW5nKToKKyAgICAg
ICAgKiBwYXJzZXIvTm9kZXMuaDoKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25Cb2R5Tm9kZTo6ZnVu
Y3Rpb25Nb2RlKTogVXBkYXRlZCBmb3IgcmVuYW1lLgorCisgICAgICAgICogcGFyc2VyL1BhcnNl
ck1vZGVzLmg6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uTmFtZUlzSW5TY29wZSk6CisgICAgICAg
IChKU0M6OmZ1bmN0aW9uTmFtZVNjb3BlSXNEeW5hbWljKTogSGVscGVyIGZ1bmN0aW9ucyBmb3Ig
cmVhc29uaW5nIGFib3V0CisgICAgICAgIGhvdyBjcmF6eSBKYXZhU2NyaXB0IGxhbmd1YWdlIHNl
bWFudGljcyBhcmUuCisKKyAgICAgICAgKiBydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcDoKKyAg
ICAgICAgKEpTQzo6aXNOdW1lcmljQ29tcGFyZUZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6YXR0
ZW1wdEZhc3RTb3J0KTogVXBkYXRlZCBmb3IgaW50ZXJmYWNlIGNoYW5nZXMgYWJvdmUuCisKKyAg
ICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpTY3JpcHRFeGVj
dXRhYmxlOjpuZXdDb2RlQmxvY2tGb3IpOgorICAgICAgICAoSlNDOjpTY3JpcHRFeGVjdXRhYmxl
OjpwcmVwYXJlRm9yRXhlY3V0aW9uSW1wbCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0
YWJsZTo6RnVuY3Rpb25FeGVjdXRhYmxlKToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUu
aDoKKyAgICAgICAgKEpTQzo6U2NyaXB0RXhlY3V0YWJsZTo6cHJlcGFyZUZvckV4ZWN1dGlvbik6
CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6ZnVuY3Rpb25Nb2RlKToKKyAgICAg
ICAgKiBydW50aW1lL0pTRnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjph
ZGROYW1lU2NvcGVJZk5lZWRlZCk6CisgICAgICAgICogcnVudGltZS9KU0Z1bmN0aW9uLmg6Cisg
ICAgICAgICogcnVudGltZS9KU05hbWVTY29wZS5oOgorICAgICAgICAoSlNDOjpKU05hbWVTY29w
ZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNOYW1lU2NvcGU6OkpTTmFtZVNjb3BlKTogQWRk
ZWQgbWFjaGluZXJ5IGZvciBwdXNoaW5nIGEgZnVuY3Rpb24KKyAgICAgICAgbmFtZSBzY29wZSBv
bnRvIGEgZnVuY3Rpb24gd2hlbiB3ZSBmaXJzdCBkaXNjb3ZlciB0aGF0IGl0J3MgbmVlZGVkLgor
CiAyMDE0LTAxLTMxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAg
REZHLT5GVEwgdGllci11cCBzaG91bGRuJ3QgYXNzdW1lIHRoYXQgTG9vcEhpbnRzIHN0YXkgYXQg
dGhlIHRvcHMgb2YgbG9vcHMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9V
bmxpbmtlZENvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTYzMjI0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQCBzdGF0aWMgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9j
ayogZ2VuZXJhCiAKICAgICBpZiAoZXhlY3V0YWJsZS0+Zm9yY2VVc2VzQXJndW1lbnRzKCkpCiAg
ICAgICAgIGJvZHktPnNldFVzZXNBcmd1bWVudHMoKTsKLSAgICBib2R5LT5maW5pc2hQYXJzaW5n
KGV4ZWN1dGFibGUtPnBhcmFtZXRlcnMoKSwgZXhlY3V0YWJsZS0+bmFtZSgpLCBleGVjdXRhYmxl
LT5mdW5jdGlvbk5hbWVJc0luU2NvcGVUb2dnbGUoKSk7CisgICAgYm9keS0+ZmluaXNoUGFyc2lu
ZyhleGVjdXRhYmxlLT5wYXJhbWV0ZXJzKCksIGV4ZWN1dGFibGUtPm5hbWUoKSwgZXhlY3V0YWJs
ZS0+ZnVuY3Rpb25Nb2RlKCkpOwogICAgIGV4ZWN1dGFibGUtPnJlY29yZFBhcnNlKGJvZHktPmZl
YXR1cmVzKCksIGJvZHktPmhhc0NhcHR1cmVkVmFyaWFibGVzKCkpOwogICAgIAogICAgIFVubGlu
a2VkRnVuY3Rpb25Db2RlQmxvY2sqIHJlc3VsdCA9IFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s6
OmNyZWF0ZSgmdm0sIEZ1bmN0aW9uQ29kZSwgRXhlY3V0YWJsZUluZm8oYm9keS0+bmVlZHNBY3Rp
dmF0aW9uKCksIGJvZHktPnVzZXNFdmFsKCksIGJvZHktPmlzU3RyaWN0TW9kZSgpLCBraW5kID09
IENvZGVGb3JDb25zdHJ1Y3QsIGZ1bmN0aW9uS2luZCA9PSBVbmxpbmtlZEJ1aWx0aW5GdW5jdGlv
bikpOwpAQCAtMTAxLDcgKzEwMSw3IEBAIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpVbmxp
bmtlZEZ1bmMKICAgICAsIG1fc3RhcnRPZmZzZXQobm9kZS0+c291cmNlKCkuc3RhcnRPZmZzZXQo
KSAtIHNvdXJjZS5zdGFydE9mZnNldCgpKQogICAgICwgbV9zb3VyY2VMZW5ndGgobm9kZS0+c291
cmNlKCkubGVuZ3RoKCkpCiAgICAgLCBtX2ZlYXR1cmVzKG5vZGUtPmZlYXR1cmVzKCkpCi0gICAg
LCBtX2Z1bmN0aW9uTmFtZUlzSW5TY29wZVRvZ2dsZShub2RlLT5mdW5jdGlvbk5hbWVJc0luU2Nv
cGVUb2dnbGUoKSkKKyAgICAsIG1fZnVuY3Rpb25Nb2RlKG5vZGUtPmZ1bmN0aW9uTW9kZSgpKQog
ewogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2Rl
QmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5s
aW5rZWRDb2RlQmxvY2suaAkocmV2aXNpb24gMTYzMjI0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNiw3
ICsxMTYsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gSlNQYXJzZVN0cmljdDsKICAg
ICAgICAgcmV0dXJuIEpTUGFyc2VOb3JtYWw7CiAgICAgfQotICAgIEZ1bmN0aW9uTmFtZUlzSW5T
Y29wZVRvZ2dsZSBmdW5jdGlvbk5hbWVJc0luU2NvcGVUb2dnbGUoKSBjb25zdCB7IHJldHVybiBt
X2Z1bmN0aW9uTmFtZUlzSW5TY29wZVRvZ2dsZTsgfQorICAgIEZ1bmN0aW9uTW9kZSBmdW5jdGlv
bk1vZGUoKSBjb25zdCB7IHJldHVybiBtX2Z1bmN0aW9uTW9kZTsgfQogCiAgICAgdW5zaWduZWQg
Zmlyc3RMaW5lT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9maXJzdExpbmVPZmZzZXQ7IH0KICAg
ICB1bnNpZ25lZCBsaW5lQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2xpbmVDb3VudDsgfQpAQCAt
MTg5LDcgKzE4OSw3IEBAIHByaXZhdGU6CiAKICAgICBDb2RlRmVhdHVyZXMgbV9mZWF0dXJlczsK
IAotICAgIEZ1bmN0aW9uTmFtZUlzSW5TY29wZVRvZ2dsZSBtX2Z1bmN0aW9uTmFtZUlzSW5TY29w
ZVRvZ2dsZTsKKyAgICBGdW5jdGlvbk1vZGUgbV9mdW5jdGlvbk1vZGU7CiAKIHByb3RlY3RlZDoK
ICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiB2bSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShy
ZXZpc2lvbiAxNjMyMjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5
dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzkwLDcgKzM5MCw3IEBAIEJ5
dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYKIAogICAgIGlmIChpc0NvbnN0
cnVjdG9yKCkpIHsKICAgICAgICAgZW1pdENyZWF0ZVRoaXMoJm1fdGhpc1JlZ2lzdGVyKTsKLSAg
ICB9IGVsc2UgaWYgKGZ1bmN0aW9uQm9keS0+dXNlc1RoaXMoKSB8fCBjb2RlQmxvY2stPnVzZXNF
dmFsKCkgfHwgbV9zaG91bGRFbWl0RGVidWdIb29rcykgeworICAgIH0gZWxzZSBpZiAoZnVuY3Rp
b25Cb2R5LT51c2VzVGhpcygpIHx8IGNvZGVCbG9jay0+dXNlc0V2YWwoKSkgewogICAgICAgICBt
X2NvZGVCbG9jay0+YWRkUHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbihpbnN0cnVjdGlvbnMoKS5z
aXplKCkpOwogICAgICAgICBlbWl0T3Bjb2RlKG9wX3RvX3RoaXMpOwogICAgICAgICBpbnN0cnVj
dGlvbnMoKS5hcHBlbmQoa2lsbCgmbV90aGlzUmVnaXN0ZXIpKTsKQEAgLTQ2NCwzMiArNDY0LDI0
IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SW5pdEwKIAogUmVnaXN0ZXJJ
RCogQnl0ZWNvZGVHZW5lcmF0b3I6OnJlc29sdmVDYWxsZWUoRnVuY3Rpb25Cb2R5Tm9kZSogZnVu
Y3Rpb25Cb2R5Tm9kZSkKIHsKLSAgICBpZiAoZnVuY3Rpb25Cb2R5Tm9kZS0+aWRlbnQoKS5pc051
bGwoKSB8fCAhZnVuY3Rpb25Cb2R5Tm9kZS0+ZnVuY3Rpb25OYW1lSXNJblNjb3BlKCkpCisgICAg
aWYgKCFmdW5jdGlvbk5hbWVJc0luU2NvcGUoZnVuY3Rpb25Cb2R5Tm9kZS0+aWRlbnQoKSwgZnVu
Y3Rpb25Cb2R5Tm9kZS0+ZnVuY3Rpb25Nb2RlKCkpKQogICAgICAgICByZXR1cm4gMDsKIAotICAg
IG1fY2FsbGVlUmVnaXN0ZXIuc2V0SW5kZXgoSlNTdGFjazo6Q2FsbGVlKTsKLQotICAgIC8vIElm
IG5vbi1zdHJpY3QgZXZhbCBpcyBpbiBwbGF5LCB3ZSB1c2UgYSBzZXBhcmF0ZSBvYmplY3QgaW4g
dGhlIHNjb3BlIGNoYWluIGZvciB0aGUgY2FsbGVlJ3MgbmFtZS4KLSAgICBpZiAobV9jb2RlQmxv
Y2stPnVzZXNFdmFsKCkgJiYgIW1fY29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSkKLSAgICAgICAg
ZW1pdFB1c2hGdW5jdGlvbk5hbWVTY29wZShmdW5jdGlvbkJvZHlOb2RlLT5pZGVudCgpLCAmbV9j
YWxsZWVSZWdpc3RlciwgUmVhZE9ubHkgfCBEb250RGVsZXRlKTsKKyAgICBpZiAoZnVuY3Rpb25O
YW1lU2NvcGVJc0R5bmFtaWMobV9jb2RlQmxvY2stPnVzZXNFdmFsKCksIG1fY29kZUJsb2NrLT5p
c1N0cmljdE1vZGUoKSkpCisgICAgICAgIHJldHVybiAwOwogCi0gICAgaWYgKCFmdW5jdGlvbkJv
ZHlOb2RlLT5jYXB0dXJlcyhmdW5jdGlvbkJvZHlOb2RlLT5pZGVudCgpKSkKLSAgICAgICAgcmV0
dXJuICZtX2NhbGxlZVJlZ2lzdGVyOworICAgIG1fY2FsbGVlUmVnaXN0ZXIuc2V0SW5kZXgoSlNT
dGFjazo6Q2FsbGVlKTsKKyAgICBpZiAoZnVuY3Rpb25Cb2R5Tm9kZS0+Y2FwdHVyZXMoZnVuY3Rp
b25Cb2R5Tm9kZS0+aWRlbnQoKSkpCisgICAgICAgIHJldHVybiBlbWl0TW92ZShhZGRWYXIoKSwg
SXNDYXB0dXJlZCwgJm1fY2FsbGVlUmVnaXN0ZXIpOwogCi0gICAgLy8gTW92ZSB0aGUgY2FsbGVl
IGludG8gdGhlIGNhcHR1cmVkIHNlY3Rpb24gb2YgdGhlIHN0YWNrLgotICAgIHJldHVybiBlbWl0
TW92ZShhZGRWYXIoKSwgSXNDYXB0dXJlZCwgJm1fY2FsbGVlUmVnaXN0ZXIpOworICAgIHJldHVy
biAmbV9jYWxsZWVSZWdpc3RlcjsKIH0KIAogdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6YWRkQ2Fs
bGVlKEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9uQm9keU5vZGUsIFJlZ2lzdGVySUQqIGNhbGxl
ZVJlZ2lzdGVyKQogewotICAgIGlmIChmdW5jdGlvbkJvZHlOb2RlLT5pZGVudCgpLmlzTnVsbCgp
IHx8ICFmdW5jdGlvbkJvZHlOb2RlLT5mdW5jdGlvbk5hbWVJc0luU2NvcGUoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgLy8gSWYgbm9uLXN0cmljdCBldmFsIGlzIGluIHBsYXksIHdlIHVzZSBh
IHNlcGFyYXRlIG9iamVjdCBpbiB0aGUgc2NvcGUgY2hhaW4gZm9yIHRoZSBjYWxsZWUncyBuYW1l
LgotICAgIGlmIChtX2NvZGVCbG9jay0+dXNlc0V2YWwoKSAmJiAhbV9jb2RlQmxvY2stPmlzU3Ry
aWN0TW9kZSgpKQorICAgIGlmICghY2FsbGVlUmVnaXN0ZXIpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIEFTU0VSVChjYWxsZWVSZWdpc3Rlcik7CiAgICAgc3ltYm9sVGFibGUoKS5hZGQoZnVuY3Rp
b25Cb2R5Tm9kZS0+aWRlbnQoKS5pbXBsKCksIFN5bWJvbFRhYmxlRW50cnkoY2FsbGVlUmVnaXN0
ZXItPmluZGV4KCksIFJlYWRPbmx5KSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkocmV2aXNpb24gMTYzMjI0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODc2LDcgKzg3Niw3IEBAIGZhaWxlZEpTT05QOgogICAgIGlmIChKU09i
amVjdCogZXJyb3IgPSBwcm9ncmFtLT5pbml0aWFsaXplR2xvYmFsUHJvcGVydGllcyh2bSwgY2Fs
bEZyYW1lLCBzY29wZSkpCiAgICAgICAgIHJldHVybiBjaGVja2VkUmV0dXJuKGNhbGxGcmFtZS0+
dm0oKS50aHJvd0V4Y2VwdGlvbihjYWxsRnJhbWUsIGVycm9yKSk7CiAKLSAgICBpZiAoSlNPYmpl
Y3QqIGVycm9yID0gcHJvZ3JhbS0+cHJlcGFyZUZvckV4ZWN1dGlvbihjYWxsRnJhbWUsIHNjb3Bl
LCBDb2RlRm9yQ2FsbCkpCisgICAgaWYgKEpTT2JqZWN0KiBlcnJvciA9IHByb2dyYW0tPnByZXBh
cmVGb3JFeGVjdXRpb24oY2FsbEZyYW1lLCBudWxscHRyLCAmc2NvcGUsIENvZGVGb3JDYWxsKSkK
ICAgICAgICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4oY2FsbEZyYW1lLT52bSgpLnRocm93RXhjZXB0
aW9uKGNhbGxGcmFtZSwgZXJyb3IpKTsKIAogICAgIFByb2dyYW1Db2RlQmxvY2sqIGNvZGVCbG9j
ayA9IHByb2dyYW0tPmNvZGVCbG9jaygpOwpAQCAtOTMzLDcgKzkzMyw3IEBAIEpTVmFsdWUgSW50
ZXJwcmV0ZXI6OmV4ZWN1dGVDYWxsKENhbGxGcmEKIAogICAgIGlmIChpc0pTQ2FsbCkgewogICAg
ICAgICAvLyBDb21waWxlIHRoZSBjYWxsZWU6Ci0gICAgICAgIEpTT2JqZWN0KiBjb21waWxlRXJy
b3IgPSBjYWxsRGF0YS5qcy5mdW5jdGlvbkV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb24o
Y2FsbEZyYW1lLCBzY29wZSwgQ29kZUZvckNhbGwpOworICAgICAgICBKU09iamVjdCogY29tcGls
ZUVycm9yID0gY2FsbERhdGEuanMuZnVuY3Rpb25FeGVjdXRhYmxlLT5wcmVwYXJlRm9yRXhlY3V0
aW9uKGNhbGxGcmFtZSwganNDYXN0PEpTRnVuY3Rpb24qPihmdW5jdGlvbiksICZzY29wZSwgQ29k
ZUZvckNhbGwpOwogICAgICAgICBpZiAoVU5MSUtFTFkoISFjb21waWxlRXJyb3IpKSB7CiAgICAg
ICAgICAgICByZXR1cm4gY2hlY2tlZFJldHVybihjYWxsRnJhbWUtPnZtKCkudGhyb3dFeGNlcHRp
b24oY2FsbEZyYW1lLCBjb21waWxlRXJyb3IpKTsKICAgICAgICAgfQpAQCAtMTAwMSw3ICsxMDAx
LDcgQEAgSlNPYmplY3QqIEludGVycHJldGVyOjpleGVjdXRlQ29uc3RydWN0KAogCiAgICAgaWYg
KGlzSlNDb25zdHJ1Y3QpIHsKICAgICAgICAgLy8gQ29tcGlsZSB0aGUgY2FsbGVlOgotICAgICAg
ICBKU09iamVjdCogY29tcGlsZUVycm9yID0gY29uc3RydWN0RGF0YS5qcy5mdW5jdGlvbkV4ZWN1
dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb24oY2FsbEZyYW1lLCBzY29wZSwgQ29kZUZvckNvbnN0
cnVjdCk7CisgICAgICAgIEpTT2JqZWN0KiBjb21waWxlRXJyb3IgPSBjb25zdHJ1Y3REYXRhLmpz
LmZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlvbihjYWxsRnJhbWUsIGpzQ2Fz
dDxKU0Z1bmN0aW9uKj4oY29uc3RydWN0b3IpLCAmc2NvcGUsIENvZGVGb3JDb25zdHJ1Y3QpOwog
ICAgICAgICBpZiAoVU5MSUtFTFkoISFjb21waWxlRXJyb3IpKSB7CiAgICAgICAgICAgICByZXR1
cm4gY2hlY2tlZFJldHVybihjYWxsRnJhbWUtPnZtKCkudGhyb3dFeGNlcHRpb24oY2FsbEZyYW1l
LCBjb21waWxlRXJyb3IpKTsKICAgICAgICAgfQpAQCAtMTA1NCw3ICsxMDU0LDcgQEAgQ2FsbEZy
YW1lQ2xvc3VyZSBJbnRlcnByZXRlcjo6cHJlcGFyZUZvcgogICAgICAgICByZXR1cm4gQ2FsbEZy
YW1lQ2xvc3VyZSgpOwogCiAgICAgLy8gQ29tcGlsZSB0aGUgY2FsbGVlOgotICAgIEpTT2JqZWN0
KiBlcnJvciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlvbihjYWxsRnJh
bWUsIHNjb3BlLCBDb2RlRm9yQ2FsbCk7CisgICAgSlNPYmplY3QqIGVycm9yID0gZnVuY3Rpb25F
eGVjdXRhYmxlLT5wcmVwYXJlRm9yRXhlY3V0aW9uKGNhbGxGcmFtZSwgZnVuY3Rpb24sICZzY29w
ZSwgQ29kZUZvckNhbGwpOwogICAgIGlmIChlcnJvcikgewogICAgICAgICBjYWxsRnJhbWUtPnZt
KCkudGhyb3dFeGNlcHRpb24oY2FsbEZyYW1lLCBlcnJvcik7CiAgICAgICAgIHJldHVybiBDYWxs
RnJhbWVDbG9zdXJlKCk7CkBAIC0xMTM1LDcgKzExMzUsNyBAQCBKU1ZhbHVlIEludGVycHJldGVy
OjpleGVjdXRlKEV2YWxFeGVjdXRhCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBKU09iamVjdCog
Y29tcGlsZUVycm9yID0gZXZhbC0+cHJlcGFyZUZvckV4ZWN1dGlvbihjYWxsRnJhbWUsIHNjb3Bl
LCBDb2RlRm9yQ2FsbCk7CisgICAgSlNPYmplY3QqIGNvbXBpbGVFcnJvciA9IGV2YWwtPnByZXBh
cmVGb3JFeGVjdXRpb24oY2FsbEZyYW1lLCBudWxscHRyLCAmc2NvcGUsIENvZGVGb3JDYWxsKTsK
ICAgICBpZiAoVU5MSUtFTFkoISFjb21waWxlRXJyb3IpKQogICAgICAgICByZXR1cm4gY2hlY2tl
ZFJldHVybihjYWxsRnJhbWUtPnZtKCkudGhyb3dFeGNlcHRpb24oY2FsbEZyYW1lLCBjb21waWxl
RXJyb3IpKTsKICAgICBFdmFsQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBldmFsLT5jb2RlQmxvY2so
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAko
cmV2aXNpb24gMTYzMjI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRp
b25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjk2LDcgKzY5Niw4IEBAIGlubGluZSBjaGFyKiBs
aW5rRm9yKAogICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oaGFuZGxlSG9z
dENhbGwoZXhlY0NhbGxlZSwgY2FsbGVlQXNWYWx1ZSwga2luZCkpOwogCiAgICAgSlNGdW5jdGlv
biogY2FsbGVlID0ganNDYXN0PEpTRnVuY3Rpb24qPihjYWxsZWVBc0Z1bmN0aW9uQ2VsbCk7Ci0g
ICAgZXhlY0NhbGxlZS0+c2V0U2NvcGUoY2FsbGVlLT5zY29wZVVuY2hlY2tlZCgpKTsKKyAgICBK
U1Njb3BlKiBzY29wZSA9IGNhbGxlZS0+c2NvcGVVbmNoZWNrZWQoKTsKKyAgICBleGVjQ2FsbGVl
LT5zZXRTY29wZShzY29wZSk7CiAgICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSBjYWxs
ZWUtPmV4ZWN1dGFibGUoKTsKIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyOwpA
QCAtNzA2LDcgKzcwNyw4IEBAIGlubGluZSBjaGFyKiBsaW5rRm9yKAogICAgICAgICBjb2RlUHRy
ID0gZXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcigqdm0sIGtpbmQsIE11c3RDaGVja0FyaXR5LCBy
ZWdpc3RlcnMpOwogICAgIGVsc2UgewogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0
aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFi
bGUpOwotICAgICAgICBKU09iamVjdCogZXJyb3IgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPnByZXBh
cmVGb3JFeGVjdXRpb24oZXhlY0NhbGxlZSwgY2FsbGVlLT5zY29wZSgpLCBraW5kKTsKKyAgICAg
ICAgSlNPYmplY3QqIGVycm9yID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5wcmVwYXJlRm9yRXhlY3V0
aW9uKGV4ZWNDYWxsZWUsIGNhbGxlZSwgJnNjb3BlLCBraW5kKTsKKyAgICAgICAgZXhlY0NhbGxl
ZS0+c2V0U2NvcGUoc2NvcGUpOwogICAgICAgICBpZiAoZXJyb3IpIHsKICAgICAgICAgICAgIHRo
cm93U3RhY2tPdmVyZmxvd0Vycm9yKGV4ZWMpOwogICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93
UGF0aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwpAQCAtNzYwLDExICs3
NjIsMTMgQEAgaW5saW5lIGNoYXIqIHZpcnR1YWxGb3JXaXRoRnVuY3Rpb24oCiAgICAgICAgIHJl
dHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihoYW5kbGVIb3N0Q2FsbChleGVjQ2FsbGVlLCBj
YWxsZWVBc1ZhbHVlLCBraW5kKSk7CiAgICAgCiAgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBq
c0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxlZUFzRnVuY3Rpb25DZWxsKTsKLSAgICBleGVjQ2FsbGVl
LT5zZXRTY29wZShmdW5jdGlvbi0+c2NvcGVVbmNoZWNrZWQoKSk7CisgICAgSlNTY29wZSogc2Nv
cGUgPSBmdW5jdGlvbi0+c2NvcGVVbmNoZWNrZWQoKTsKKyAgICBleGVjQ2FsbGVlLT5zZXRTY29w
ZShzY29wZSk7CiAgICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSBmdW5jdGlvbi0+ZXhl
Y3V0YWJsZSgpOwogICAgIGlmIChVTkxJS0VMWSghZXhlY3V0YWJsZS0+aGFzSklUQ29kZUZvcihr
aW5kKSkpIHsKICAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUg
PSBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKTsKLSAgICAgICAg
SlNPYmplY3QqIGVycm9yID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5wcmVwYXJlRm9yRXhlY3V0aW9u
KGV4ZWNDYWxsZWUsIGZ1bmN0aW9uLT5zY29wZSgpLCBraW5kKTsKKyAgICAgICAgSlNPYmplY3Qq
IGVycm9yID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5wcmVwYXJlRm9yRXhlY3V0aW9uKGV4ZWNDYWxs
ZWUsIGZ1bmN0aW9uLCAmc2NvcGUsIGtpbmQpOworICAgICAgICBleGVjQ2FsbGVlLT5zZXRTY29w
ZShzY29wZSk7CiAgICAgICAgIGlmIChlcnJvcikgewogICAgICAgICAgICAgZXhlYy0+dm0oKS50
aHJvd0V4Y2VwdGlvbihleGVjQ2FsbGVlLCBlcnJvcik7CiAgICAgICAgICAgICByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDxjaGFyKj4odm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2Fs
bFNsb3dQYXRoR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHJldmlz
aW9uIDE2MzIyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRo
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwODEsNyArMTA4MSw4IEBAIGlubGluZSBTbG93UGF0
aFJldHVyblR5cGUgc2V0VXBDYWxsKEV4ZWMKICAgICAgICAgY29kZVB0ciA9IGV4ZWN1dGFibGUt
PmVudHJ5cG9pbnRGb3Iodm0sIGtpbmQsIE11c3RDaGVja0FyaXR5LCBSZWdpc3RlclByZXNlcnZh
dGlvbk5vdFJlcXVpcmVkKTsKICAgICBlbHNlIHsKICAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxl
KiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihl
eGVjdXRhYmxlKTsKLSAgICAgICAgSlNPYmplY3QqIGVycm9yID0gZnVuY3Rpb25FeGVjdXRhYmxl
LT5wcmVwYXJlRm9yRXhlY3V0aW9uKGV4ZWNDYWxsZWUsIGNhbGxlZS0+c2NvcGUoKSwga2luZCk7
CisgICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFyZUZv
ckV4ZWN1dGlvbihleGVjQ2FsbGVlLCBjYWxsZWUsICZzY29wZSwga2luZCk7CisgICAgICAgIGV4
ZWNDYWxsZWUtPnNldFNjb3BlKHNjb3BlKTsKICAgICAgICAgaWYgKGVycm9yKQogICAgICAgICAg
ICAgTExJTlRfQ0FMTF9USFJPVyhleGVjQ2FsbGVlLT5jYWxsZXJGcmFtZSgpLCBlcnJvcik7CiAg
ICAgICAgIGNvZGVCbG9jayA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+Y29kZUJsb2NrRm9yKGtpbmQp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0
b3JzLmgJKHJldmlzaW9uIDE2MzIyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
Tm9kZUNvbnN0cnVjdG9ycy5oCSh3b3JraW5nIGNvcHkpCkBAIC03NjksMTQgKzc2OSwxNCBAQCBp
bmxpbmUgUmVzb2x2ZU5vZGU6OlJlc29sdmVOb2RlKGNvbnN0IEpTCiAgICAgICAgIDogRXhwcmVz
c2lvbk5vZGUobG9jYXRpb24pCiAgICAgICAgICwgbV9ib2R5KGJvZHkpCiAgICAgewotICAgICAg
ICBtX2JvZHktPmZpbmlzaFBhcnNpbmcoc291cmNlLCBwYXJhbWV0ZXIsIGlkZW50LCBGdW5jdGlv
bk5hbWVJc0luU2NvcGUpOworICAgICAgICBtX2JvZHktPmZpbmlzaFBhcnNpbmcoc291cmNlLCBw
YXJhbWV0ZXIsIGlkZW50LCBGdW5jdGlvbkV4cHJlc3Npb24pOwogICAgIH0KIAogICAgIGlubGlu
ZSBGdW5jRGVjbE5vZGU6OkZ1bmNEZWNsTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0
aW9uLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgRnVuY3Rpb25Cb2R5Tm9kZSogYm9keSwgY29u
c3QgU291cmNlQ29kZSYgc291cmNlLCBQYXJhbWV0ZXJOb2RlKiBwYXJhbWV0ZXIpCiAgICAgICAg
IDogU3RhdGVtZW50Tm9kZShsb2NhdGlvbikKICAgICAgICAgLCBtX2JvZHkoYm9keSkKICAgICB7
Ci0gICAgICAgIG1fYm9keS0+ZmluaXNoUGFyc2luZyhzb3VyY2UsIHBhcmFtZXRlciwgaWRlbnQs
IEZ1bmN0aW9uTmFtZUlzTm90SW5TY29wZSk7CisgICAgICAgIG1fYm9keS0+ZmluaXNoUGFyc2lu
Zyhzb3VyY2UsIHBhcmFtZXRlciwgaWRlbnQsIEZ1bmN0aW9uRGVjbGFyYXRpb24pOwogICAgIH0K
IAogICAgIGlubGluZSBDYXNlQ2xhdXNlTm9kZTo6Q2FzZUNsYXVzZU5vZGUoRXhwcmVzc2lvbk5v
ZGUqIGV4cHIsIFNvdXJjZUVsZW1lbnRzKiBzdGF0ZW1lbnRzKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9Ob2Rlcy5jcHAJKHJldmlzaW9uIDE2MzIyNCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDEsMTggKzIw
MSwxOCBAQCBpbmxpbmUgRnVuY3Rpb25Cb2R5Tm9kZTo6RnVuY3Rpb25Cb2R5Tm9kCiB7CiB9CiAK
LXZvaWQgRnVuY3Rpb25Cb2R5Tm9kZTo6ZmluaXNoUGFyc2luZyhjb25zdCBTb3VyY2VDb2RlJiBz
b3VyY2UsIFBhcmFtZXRlck5vZGUqIGZpcnN0UGFyYW1ldGVyLCBjb25zdCBJZGVudGlmaWVyJiBp
ZGVudCwgRnVuY3Rpb25OYW1lSXNJblNjb3BlVG9nZ2xlIGZ1bmN0aW9uTmFtZUlzSW5TY29wZVRv
Z2dsZSkKK3ZvaWQgRnVuY3Rpb25Cb2R5Tm9kZTo6ZmluaXNoUGFyc2luZyhjb25zdCBTb3VyY2VD
b2RlJiBzb3VyY2UsIFBhcmFtZXRlck5vZGUqIGZpcnN0UGFyYW1ldGVyLCBjb25zdCBJZGVudGlm
aWVyJiBpZGVudCwgZW51bSBGdW5jdGlvbk1vZGUgZnVuY3Rpb25Nb2RlKQogewogICAgIHNldFNv
dXJjZShzb3VyY2UpOwotICAgIGZpbmlzaFBhcnNpbmcoRnVuY3Rpb25QYXJhbWV0ZXJzOjpjcmVh
dGUoZmlyc3RQYXJhbWV0ZXIpLCBpZGVudCwgZnVuY3Rpb25OYW1lSXNJblNjb3BlVG9nZ2xlKTsK
KyAgICBmaW5pc2hQYXJzaW5nKEZ1bmN0aW9uUGFyYW1ldGVyczo6Y3JlYXRlKGZpcnN0UGFyYW1l
dGVyKSwgaWRlbnQsIGZ1bmN0aW9uTW9kZSk7CiB9CiAKLXZvaWQgRnVuY3Rpb25Cb2R5Tm9kZTo6
ZmluaXNoUGFyc2luZyhQYXNzUmVmUHRyPEZ1bmN0aW9uUGFyYW1ldGVycz4gcGFyYW1ldGVycywg
Y29uc3QgSWRlbnRpZmllciYgaWRlbnQsIEZ1bmN0aW9uTmFtZUlzSW5TY29wZVRvZ2dsZSBmdW5j
dGlvbk5hbWVJc0luU2NvcGVUb2dnbGUpCit2b2lkIEZ1bmN0aW9uQm9keU5vZGU6OmZpbmlzaFBh
cnNpbmcoUGFzc1JlZlB0cjxGdW5jdGlvblBhcmFtZXRlcnM+IHBhcmFtZXRlcnMsIGNvbnN0IElk
ZW50aWZpZXImIGlkZW50LCBlbnVtIEZ1bmN0aW9uTW9kZSBmdW5jdGlvbk1vZGUpCiB7CiAgICAg
QVNTRVJUKCFzb3VyY2UoKS5pc051bGwoKSk7CiAgICAgbV9wYXJhbWV0ZXJzID0gcGFyYW1ldGVy
czsKICAgICBtX2lkZW50ID0gaWRlbnQ7Ci0gICAgbV9mdW5jdGlvbk5hbWVJc0luU2NvcGVUb2dn
bGUgPSBmdW5jdGlvbk5hbWVJc0luU2NvcGVUb2dnbGU7CisgICAgbV9mdW5jdGlvbk1vZGUgPSBm
dW5jdGlvbk1vZGU7CiB9CiAKIEZ1bmN0aW9uQm9keU5vZGUqIEZ1bmN0aW9uQm9keU5vZGU6OmNy
ZWF0ZShWTSogdm0sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIHVuc2ln
bmVkIGVuZENvbHVtbiwgYm9vbCBpblN0cmljdENvbnRleHQpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL05vZGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9Ob2Rlcy5oCShyZXZpc2lvbiAxNjMyMjQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL05vZGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1MzcsMTUgKzE1MzcsMTQg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIGVtaXRCeXRlY29kZShC
eXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgb3ZlcnJpZGU7CiAKLSAgICAgICAg
dm9pZCBmaW5pc2hQYXJzaW5nKGNvbnN0IFNvdXJjZUNvZGUmLCBQYXJhbWV0ZXJOb2RlKiwgY29u
c3QgSWRlbnRpZmllciYsIEZ1bmN0aW9uTmFtZUlzSW5TY29wZVRvZ2dsZSk7Ci0gICAgICAgIHZv
aWQgZmluaXNoUGFyc2luZyhQYXNzUmVmUHRyPEZ1bmN0aW9uUGFyYW1ldGVycz4sIGNvbnN0IElk
ZW50aWZpZXImLCBGdW5jdGlvbk5hbWVJc0luU2NvcGVUb2dnbGUpOworICAgICAgICB2b2lkIGZp
bmlzaFBhcnNpbmcoY29uc3QgU291cmNlQ29kZSYsIFBhcmFtZXRlck5vZGUqLCBjb25zdCBJZGVu
dGlmaWVyJiwgRnVuY3Rpb25Nb2RlKTsKKyAgICAgICAgdm9pZCBmaW5pc2hQYXJzaW5nKFBhc3NS
ZWZQdHI8RnVuY3Rpb25QYXJhbWV0ZXJzPiwgY29uc3QgSWRlbnRpZmllciYsIEZ1bmN0aW9uTW9k
ZSk7CiAgICAgICAgIAogICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCgpIHsgcmV0dXJu
IG1faWRlbnQ7IH0KICAgICAgICAgdm9pZCBzZXRJbmZlcnJlZE5hbWUoY29uc3QgSWRlbnRpZmll
ciYgaW5mZXJyZWROYW1lKSB7IEFTU0VSVCghaW5mZXJyZWROYW1lLmlzTnVsbCgpKTsgbV9pbmZl
cnJlZE5hbWUgPSBpbmZlcnJlZE5hbWU7IH0KICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaW5m
ZXJyZWROYW1lKCkgeyByZXR1cm4gbV9pbmZlcnJlZE5hbWUuaXNFbXB0eSgpID8gbV9pZGVudCA6
IG1faW5mZXJyZWROYW1lOyB9CiAKLSAgICAgICAgYm9vbCBmdW5jdGlvbk5hbWVJc0luU2NvcGUo
KSB7IHJldHVybiBtX2Z1bmN0aW9uTmFtZUlzSW5TY29wZVRvZ2dsZSA9PSBGdW5jdGlvbk5hbWVJ
c0luU2NvcGU7IH0KLSAgICAgICAgRnVuY3Rpb25OYW1lSXNJblNjb3BlVG9nZ2xlIGZ1bmN0aW9u
TmFtZUlzSW5TY29wZVRvZ2dsZSgpIHsgcmV0dXJuIG1fZnVuY3Rpb25OYW1lSXNJblNjb3BlVG9n
Z2xlOyB9CisgICAgICAgIEZ1bmN0aW9uTW9kZSBmdW5jdGlvbk1vZGUoKSB7IHJldHVybiBtX2Z1
bmN0aW9uTW9kZTsgfQogCiAgICAgICAgIHZvaWQgc2V0RnVuY3Rpb25OYW1lU3RhcnQoaW50IGZ1
bmN0aW9uTmFtZVN0YXJ0KSB7IG1fZnVuY3Rpb25OYW1lU3RhcnQgPSBmdW5jdGlvbk5hbWVTdGFy
dDsgfQogICAgICAgICBpbnQgZnVuY3Rpb25OYW1lU3RhcnQoKSBjb25zdCB7IHJldHVybiBtX2Z1
bmN0aW9uTmFtZVN0YXJ0OyB9CkBAIC0xNTYyLDcgKzE1NjEsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogICAgICAgICBJZGVudGlmaWVyIG1faWRlbnQ7CiAgICAgICAgIElkZW50aWZpZXIgbV9pbmZl
cnJlZE5hbWU7Ci0gICAgICAgIEZ1bmN0aW9uTmFtZUlzSW5TY29wZVRvZ2dsZSBtX2Z1bmN0aW9u
TmFtZUlzSW5TY29wZVRvZ2dsZTsKKyAgICAgICAgRnVuY3Rpb25Nb2RlIG1fZnVuY3Rpb25Nb2Rl
OwogICAgICAgICBSZWZQdHI8RnVuY3Rpb25QYXJhbWV0ZXJzPiBtX3BhcmFtZXRlcnM7CiAgICAg
ICAgIGludCBtX2Z1bmN0aW9uTmFtZVN0YXJ0OwogICAgICAgICB1bnNpZ25lZCBtX3N0YXJ0Q29s
dW1uOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJNb2Rlcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyTW9kZXMuaAko
cmV2aXNpb24gMTYzMjI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJN
b2Rlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw4IEBACiAjaWZuZGVmIFBhcnNlck1v
ZGVzX2gKICNkZWZpbmUgUGFyc2VyTW9kZXNfaAogCisjaW5jbHVkZSAiSWRlbnRpZmllci5oIgor
CiBuYW1lc3BhY2UgSlNDIHsKIAogZW51bSBKU1BhcnNlclN0cmljdG5lc3MgeyBKU1BhcnNlTm9y
bWFsLCBKU1BhcnNlQnVpbHRpbiwgSlNQYXJzZVN0cmljdCB9OwpAQCAtMzUsNyArMzcsMzIgQEAg
ZW51bSBKU1BhcnNlck1vZGUgeyBKU1BhcnNlUHJvZ3JhbUNvZGUsIAogZW51bSBQcm9maWxlck1v
ZGUgeyBQcm9maWxlck9mZiwgUHJvZmlsZXJPbiB9OwogZW51bSBEZWJ1Z2dlck1vZGUgeyBEZWJ1
Z2dlck9mZiwgRGVidWdnZXJPbiB9OwogCi1lbnVtIEZ1bmN0aW9uTmFtZUlzSW5TY29wZVRvZ2ds
ZSB7IEZ1bmN0aW9uTmFtZUlzTm90SW5TY29wZSwgRnVuY3Rpb25OYW1lSXNJblNjb3BlIH07Citl
bnVtIEZ1bmN0aW9uTW9kZSB7IEZ1bmN0aW9uRXhwcmVzc2lvbiwgRnVuY3Rpb25EZWNsYXJhdGlv
biB9OworCitpbmxpbmUgYm9vbCBmdW5jdGlvbk5hbWVJc0luU2NvcGUoY29uc3QgSWRlbnRpZmll
ciYgbmFtZSwgRnVuY3Rpb25Nb2RlIGZ1bmN0aW9uTW9kZSkKK3sKKyAgICBpZiAobmFtZS5pc051
bGwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGZ1bmN0aW9uTW9kZSAhPSBG
dW5jdGlvbkV4cHJlc3Npb24pCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0
cnVlOworfQorCitpbmxpbmUgYm9vbCBmdW5jdGlvbk5hbWVTY29wZUlzRHluYW1pYyhib29sIHVz
ZXNFdmFsLCBib29sIGlzU3RyaWN0TW9kZSkKK3sKKyAgICAvLyBJZiBub24tc3RyaWN0IGV2YWwg
aXMgaW4gcGxheSwgYSBmdW5jdGlvbiBnZXRzIGEgc2VwYXJhdGUgb2JqZWN0IGluIHRoZSBzY29w
ZSBjaGFpbiBmb3IgaXRzIG5hbWUuCisgICAgLy8gVGhpcyBlbmFibGVzIGV2YWwgdG8gZGVjbGFy
ZSBhbmQgdGhlbiBkZWxldGUgYSBuYW1lIHRoYXQgc2hhZG93cyB0aGUgZnVuY3Rpb24ncyBuYW1l
LgorCisgICAgaWYgKCF1c2VzRXZhbCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYg
KGlzU3RyaWN0TW9kZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7
Cit9CiAKIHR5cGVkZWYgdW5zaWduZWQgQ29kZUZlYXR1cmVzOwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAx
NjMyMjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTc1LDE0ICs3NSwxNSBAQCBzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBhcnJhCiAKIG5hbWVzcGFjZSBKU0MgewogCi1zdGF0aWMgaW5saW5l
IGJvb2wgaXNOdW1lcmljQ29tcGFyZUZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgQ2FsbFR5cGUg
Y2FsbFR5cGUsIGNvbnN0IENhbGxEYXRhJiBjYWxsRGF0YSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBp
c051bWVyaWNDb21wYXJlRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGZ1bmN0aW9u
LCBDYWxsVHlwZSBjYWxsVHlwZSwgY29uc3QgQ2FsbERhdGEmIGNhbGxEYXRhKQogewogICAgIGlm
IChjYWxsVHlwZSAhPSBDYWxsVHlwZUpTKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBG
dW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBjYWxsRGF0YS5qcy5mdW5jdGlvbkV4ZWN1
dGFibGU7CisgICAgSlNTY29wZSogc2NvcGUgPSBjYWxsRGF0YS5qcy5zY29wZTsKIAotICAgIEpT
T2JqZWN0KiBlcnJvciA9IGV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb24oZXhlYywgY2Fs
bERhdGEuanMuc2NvcGUsIENvZGVGb3JDYWxsKTsKKyAgICBKU09iamVjdCogZXJyb3IgPSBleGVj
dXRhYmxlLT5wcmVwYXJlRm9yRXhlY3V0aW9uKGV4ZWMsIGpzQ2FzdDxKU0Z1bmN0aW9uKj4oZnVu
Y3Rpb24pLCAmc2NvcGUsIENvZGVGb3JDYWxsKTsKICAgICBpZiAoZXJyb3IpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIApAQCAtNjE0LDcgKzYxNSw3IEBAIHN0YXRpYyBib29sIGF0dGVtcHRGYXN0
U29ydChFeGVjU3RhdGUqIGUKICAgICAgICAgfHwgc2hvdWxkVXNlU2xvd1B1dCh0aGlzT2JqLT5z
dHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
Ci0gICAgaWYgKGlzTnVtZXJpY0NvbXBhcmVGdW5jdGlvbihleGVjLCBjYWxsVHlwZSwgY2FsbERh
dGEpKQorICAgIGlmIChpc051bWVyaWNDb21wYXJlRnVuY3Rpb24oZXhlYywgZnVuY3Rpb24sIGNh
bGxUeXBlLCBjYWxsRGF0YSkpCiAgICAgICAgIGFzQXJyYXkodGhpc09iaiktPnNvcnROdW1lcmlj
KGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEpOwogICAgIGVsc2UgaWYgKGNhbGxU
eXBlICE9IENhbGxUeXBlTm9uZSkKICAgICAgICAgYXNBcnJheSh0aGlzT2JqKS0+c29ydChleGVj
LCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAxNjMyMjQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTgwLDkgKzE4MCw5IEBAIHZvaWQgU2NyaXB0RXhlY3V0YWJsZTo6aW5zdGFsbENvZGUoQ29k
ZUIKIH0KIAogUGFzc1JlZlB0cjxDb2RlQmxvY2s+IFNjcmlwdEV4ZWN1dGFibGU6Om5ld0NvZGVC
bG9ja0ZvcigKLSAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIEpTU2NvcGUqIHNjb3Bl
LCBKU09iamVjdComIGV4Y2VwdGlvbikKKyAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQs
IEpTRnVuY3Rpb24qIGZ1bmN0aW9uLCBKU1Njb3BlKiogc2NvcGUsIEpTT2JqZWN0KiYgZXhjZXB0
aW9uKQogewotICAgIFZNKiB2bSA9IHNjb3BlLT52bSgpOworICAgIFZNKiB2bSA9ICgqc2NvcGUp
LT52bSgpOwogCiAgICAgQVNTRVJUKHZtLT5oZWFwLmlzRGVmZXJyZWQoKSk7CiAgICAgQVNTRVJU
KHN0YXJ0Q29sdW1uKCkgIT0gVUlOVF9NQVgpOwpAQCAtMTkyLDggKzE5Miw5IEBAIFBhc3NSZWZQ
dHI8Q29kZUJsb2NrPiBTY3JpcHRFeGVjdXRhYmxlOjoKICAgICAgICAgRXZhbEV4ZWN1dGFibGUq
IGV4ZWN1dGFibGUgPSBqc0Nhc3Q8RXZhbEV4ZWN1dGFibGUqPih0aGlzKTsKICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoa2luZCA9PSBDb2RlRm9yQ2FsbCk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KCFleGVjdXRhYmxlLT5tX2V2YWxDb2RlQmxvY2spOworICAgICAgICBSRUxFQVNFX0FTU0VSVCgh
ZnVuY3Rpb24pOwogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEV2YWxDb2RlQmxvY2soCi0g
ICAgICAgICAgICBleGVjdXRhYmxlLCBleGVjdXRhYmxlLT5tX3VubGlua2VkRXZhbENvZGVCbG9j
ay5nZXQoKSwgc2NvcGUsCisgICAgICAgICAgICBleGVjdXRhYmxlLCBleGVjdXRhYmxlLT5tX3Vu
bGlua2VkRXZhbENvZGVCbG9jay5nZXQoKSwgKnNjb3BlLAogICAgICAgICAgICAgZXhlY3V0YWJs
ZS0+c291cmNlKCkucHJvdmlkZXIoKSkpOwogICAgIH0KICAgICAKQEAgLTIwMSwxNSArMjAyLDE3
IEBAIFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBTY3JpcHRFeGVjdXRhYmxlOjoKICAgICAgICAgUHJv
Z3JhbUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBqc0Nhc3Q8UHJvZ3JhbUV4ZWN1dGFibGUqPih0
aGlzKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoa2luZCA9PSBDb2RlRm9yQ2FsbCk7CiAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKCFleGVjdXRhYmxlLT5tX3Byb2dyYW1Db2RlQmxvY2spOworICAg
ICAgICBSRUxFQVNFX0FTU0VSVCghZnVuY3Rpb24pOwogICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFByb2dyYW1Db2RlQmxvY2soCi0gICAgICAgICAgICBleGVjdXRhYmxlLCBleGVjdXRhYmxl
LT5tX3VubGlua2VkUHJvZ3JhbUNvZGVCbG9jay5nZXQoKSwgc2NvcGUsCisgICAgICAgICAgICBl
eGVjdXRhYmxlLCBleGVjdXRhYmxlLT5tX3VubGlua2VkUHJvZ3JhbUNvZGVCbG9jay5nZXQoKSwg
KnNjb3BlLAogICAgICAgICAgICAgZXhlY3V0YWJsZS0+c291cmNlKCkucHJvdmlkZXIoKSwgZXhl
Y3V0YWJsZS0+c291cmNlKCkuc3RhcnRDb2x1bW4oKSkpOwogICAgIH0KICAgICAKICAgICBSRUxF
QVNFX0FTU0VSVChjbGFzc0luZm8oKSA9PSBGdW5jdGlvbkV4ZWN1dGFibGU6OmluZm8oKSk7Cisg
ICAgUkVMRUFTRV9BU1NFUlQoZnVuY3Rpb24pOwogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhl
Y3V0YWJsZSA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPih0aGlzKTsKICAgICBSRUxFQVNF
X0FTU0VSVCghZXhlY3V0YWJsZS0+Y29kZUJsb2NrRm9yKGtpbmQpKTsKLSAgICBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0ID0gc2NvcGUtPmdsb2JhbE9iamVjdCgpOworICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSAoKnNjb3BlKS0+Z2xvYmFsT2JqZWN0KCk7CiAgICAgUGFy
c2VyRXJyb3IgZXJyb3I7CiAgICAgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSA9IGdsb2JhbE9i
amVjdC0+aGFzRGVidWdnZXIoKSA/IERlYnVnZ2VyT24gOiBEZWJ1Z2dlck9mZjsKICAgICBQcm9m
aWxlck1vZGUgcHJvZmlsZXJNb2RlID0gZ2xvYmFsT2JqZWN0LT5oYXNQcm9maWxlcigpID8gUHJv
ZmlsZXJPbiA6IFByb2ZpbGVyT2ZmOwpAQCAtMjIzLDEzICsyMjYsMjEgQEAgUGFzc1JlZlB0cjxD
b2RlQmxvY2s+IFNjcmlwdEV4ZWN1dGFibGU6OgogICAgICAgICAgICAgZXJyb3IudG9FcnJvck9i
amVjdChnbG9iYWxPYmplY3QsIGV4ZWN1dGFibGUtPm1fc291cmNlKSk7CiAgICAgICAgIHJldHVy
biAwOwogICAgIH0KKworICAgIC8vIFBhcnNpbmcgcmV2ZWFscyB3aGV0aGVyIG91ciBmdW5jdGlv
biB1c2VzIGZlYXR1cmVzIHRoYXQgcmVxdWlyZSBhIHNlcGFyYXRlIGZ1bmN0aW9uIG5hbWUgb2Jq
ZWN0IGluIHRoZSBzY29wZSBjaGFpbi4KKyAgICAvLyBCZSBzdXJlIHRvIGFkZCB0aGlzIHNjb3Bl
IGJlZm9yZSBsaW5raW5nIHRoZSBieXRlY29kZSBiZWNhdXNlIHRoaXMgc2NvcGUgd2lsbCBjaGFu
Z2UgdGhlIHJlc29sdXRpb24gZGVwdGggb2Ygbm9uLWxvY2FsIHZhcmlhYmxlcy4KKyAgICBpZiAo
IWV4ZWN1dGFibGUtPm1fZGlkUGFyc2VGb3JUaGVGaXJzdFRpbWUpIHsKKyAgICAgICAgZXhlY3V0
YWJsZS0+bV9kaWRQYXJzZUZvclRoZUZpcnN0VGltZSA9IHRydWU7CisgICAgICAgIGZ1bmN0aW9u
LT5hZGROYW1lU2NvcGVJZk5lZWRlZCgqdm0pOworICAgICAgICAqc2NvcGUgPSBmdW5jdGlvbi0+
c2NvcGUoKTsKKyAgICB9CiAgICAgCiAgICAgU291cmNlUHJvdmlkZXIqIHByb3ZpZGVyID0gZXhl
Y3V0YWJsZS0+c291cmNlKCkucHJvdmlkZXIoKTsKICAgICB1bnNpZ25lZCBzb3VyY2VPZmZzZXQg
PSBleGVjdXRhYmxlLT5zb3VyY2UoKS5zdGFydE9mZnNldCgpOwogICAgIHVuc2lnbmVkIHN0YXJ0
Q29sdW1uID0gZXhlY3V0YWJsZS0+c291cmNlKCkuc3RhcnRDb2x1bW4oKTsKIAogICAgIHJldHVy
biBhZG9wdFJlZihuZXcgRnVuY3Rpb25Db2RlQmxvY2soCi0gICAgICAgIGV4ZWN1dGFibGUsIHVu
bGlua2VkQ29kZUJsb2NrLCBzY29wZSwgcHJvdmlkZXIsIHNvdXJjZU9mZnNldCwgc3RhcnRDb2x1
bW4pKTsKKyAgICAgICAgZXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssICpzY29wZSwgcHJv
dmlkZXIsIHNvdXJjZU9mZnNldCwgc3RhcnRDb2x1bW4pKTsKIH0KIAogUGFzc1JlZlB0cjxDb2Rl
QmxvY2s+IFNjcmlwdEV4ZWN1dGFibGU6Om5ld1JlcGxhY2VtZW50Q29kZUJsb2NrRm9yKApAQCAt
MjkxLDEzICszMDIsMTMgQEAgc3RhdGljIHZvaWQgc2V0dXBKSVQoVk0mIHZtLCBDb2RlQmxvY2sq
IAogfQogCiBKU09iamVjdCogU2NyaXB0RXhlY3V0YWJsZTo6cHJlcGFyZUZvckV4ZWN1dGlvbklt
cGwoCi0gICAgRXhlY1N0YXRlKiBleGVjLCBKU1Njb3BlKiBzY29wZSwgQ29kZVNwZWNpYWxpemF0
aW9uS2luZCBraW5kKQorICAgIEV4ZWNTdGF0ZSogZXhlYywgSlNGdW5jdGlvbiogZnVuY3Rpb24s
IEpTU2NvcGUqKiBzY29wZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQogewogICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwogICAgIAog
ICAgIEpTT2JqZWN0KiBleGNlcHRpb24gPSAwOwotICAgIFJlZlB0cjxDb2RlQmxvY2s+IGNvZGVC
bG9jayA9IG5ld0NvZGVCbG9ja0ZvcihraW5kLCBzY29wZSwgZXhjZXB0aW9uKTsKKyAgICBSZWZQ
dHI8Q29kZUJsb2NrPiBjb2RlQmxvY2sgPSBuZXdDb2RlQmxvY2tGb3Ioa2luZCwgZnVuY3Rpb24s
IHNjb3BlLCBleGNlcHRpb24pOwogICAgIGlmICghY29kZUJsb2NrKSB7CiAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGV4Y2VwdGlvbik7CiAgICAgICAgIHJldHVybiBleGNlcHRpb247CkBAIC0zNzYs
NiArMzg3LDcgQEAgRnVuY3Rpb25FeGVjdXRhYmxlOjpGdW5jdGlvbkV4ZWN1dGFibGUoVgogICAg
IDogU2NyaXB0RXhlY3V0YWJsZSh2bS5mdW5jdGlvbkV4ZWN1dGFibGVTdHJ1Y3R1cmUuZ2V0KCks
IHZtLCBzb3VyY2UsIHVubGlua2VkRXhlY3V0YWJsZS0+aXNJblN0cmljdENvbnRleHQoKSkKICAg
ICAsIG1fdW5saW5rZWRFeGVjdXRhYmxlKHZtLCB0aGlzLCB1bmxpbmtlZEV4ZWN1dGFibGUpCiAg
ICAgLCBtX2JvZHlJbmNsdWRlc0JyYWNlcyhib2R5SW5jbHVkZXNCcmFjZXMpCisgICAgLCBtX2Rp
ZFBhcnNlRm9yVGhlRmlyc3RUaW1lKGZhbHNlKQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFzb3Vy
Y2UuaXNOdWxsKCkpOwogICAgIEFTU0VSVChzb3VyY2UubGVuZ3RoKCkpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkocmV2aXNpb24gMTYzMjI0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC00MTksMTggKzQxOSwxOCBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdm9pZCBpbnN0
YWxsQ29kZShDb2RlQmxvY2sqKTsKLSAgICBQYXNzUmVmUHRyPENvZGVCbG9jaz4gbmV3Q29kZUJs
b2NrRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQsIEpTU2NvcGUqLCBKU09iamVjdComIGV4Y2Vw
dGlvbik7CisgICAgUGFzc1JlZlB0cjxDb2RlQmxvY2s+IG5ld0NvZGVCbG9ja0ZvcihDb2RlU3Bl
Y2lhbGl6YXRpb25LaW5kLCBKU0Z1bmN0aW9uKiwgSlNTY29wZSoqLCBKU09iamVjdComIGV4Y2Vw
dGlvbik7CiAgICAgUGFzc1JlZlB0cjxDb2RlQmxvY2s+IG5ld1JlcGxhY2VtZW50Q29kZUJsb2Nr
Rm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwogICAgIAotICAgIEpTT2JqZWN0KiBwcmVwYXJl
Rm9yRXhlY3V0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogc2NvcGUsIENvZGVTcGVjaWFs
aXphdGlvbktpbmQga2luZCkKKyAgICBKU09iamVjdCogcHJlcGFyZUZvckV4ZWN1dGlvbihFeGVj
U3RhdGUqIGV4ZWMsIEpTRnVuY3Rpb24qIGZ1bmN0aW9uLCBKU1Njb3BlKiogc2NvcGUsIENvZGVT
cGVjaWFsaXphdGlvbktpbmQga2luZCkKICAgICB7CiAgICAgICAgIGlmIChoYXNKSVRDb2RlRm9y
KGtpbmQpKQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiBwcmVwYXJlRm9y
RXhlY3V0aW9uSW1wbChleGVjLCBzY29wZSwga2luZCk7CisgICAgICAgIHJldHVybiBwcmVwYXJl
Rm9yRXhlY3V0aW9uSW1wbChleGVjLCBmdW5jdGlvbiwgc2NvcGUsIGtpbmQpOwogICAgIH0KIAog
cHJpdmF0ZToKLSAgICBKU09iamVjdCogcHJlcGFyZUZvckV4ZWN1dGlvbkltcGwoRXhlY1N0YXRl
KiwgSlNTY29wZSosIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOworICAgIEpTT2JqZWN0KiBwcmVw
YXJlRm9yRXhlY3V0aW9uSW1wbChFeGVjU3RhdGUqLCBKU0Z1bmN0aW9uKiwgSlNTY29wZSoqLCBD
b2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKIAogcHJvdGVjdGVkOgogICAgIHZvaWQgZmluaXNoQ3Jl
YXRpb24oVk0mIHZtKQpAQCAtNjMwLDYgKzYzMCw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBi
b29sIGlzQnVpbHRpbkZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZEV4ZWN1dGFi
bGUtPmlzQnVpbHRpbkZ1bmN0aW9uKCk7IH0KKyAgICBGdW5jdGlvbk1vZGUgZnVuY3Rpb25Nb2Rl
KCkgeyByZXR1cm4gbV91bmxpbmtlZEV4ZWN1dGFibGUtPmZ1bmN0aW9uTW9kZSgpOyB9CiAgICAg
Y29uc3QgSWRlbnRpZmllciYgbmFtZSgpIHsgcmV0dXJuIG1fdW5saW5rZWRFeGVjdXRhYmxlLT5u
YW1lKCk7IH0KICAgICBjb25zdCBJZGVudGlmaWVyJiBpbmZlcnJlZE5hbWUoKSB7IHJldHVybiBt
X3VubGlua2VkRXhlY3V0YWJsZS0+aW5mZXJyZWROYW1lKCk7IH0KICAgICBKU1N0cmluZyogbmFt
ZVZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZEV4ZWN1dGFibGUtPm5hbWVWYWx1ZSgp
OyB9CkBAIC02NzQsNiArNjc1LDcgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8RnVuY3Rpb25Db2Rl
QmxvY2s+IG1fY29kZUJsb2NrRm9yQ2FsbDsKICAgICBSZWZQdHI8RnVuY3Rpb25Db2RlQmxvY2s+
IG1fY29kZUJsb2NrRm9yQ29uc3RydWN0OwogICAgIGJvb2wgbV9ib2R5SW5jbHVkZXNCcmFjZXM7
CisgICAgYm9vbCBtX2RpZFBhcnNlRm9yVGhlRmlyc3RUaW1lOwogfTsKIAogaW5saW5lIHZvaWQg
RXhlY3V0YWJsZUJhc2U6OmNsZWFyQ29kZVZpcnR1YWwoRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFi
bGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNw
cAkocmV2aXNpb24gMTYzMjI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNG
dW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJK
U0JvdW5kRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uSW5saW5lcy5oIgogI2luY2x1
ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNOYW1lU2NvcGUuaCIgCiAjaW5jbHVk
ZSAiSlNOb3RBbk9iamVjdC5oIgogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCiAjaW5jbHVkZSAi
T2JqZWN0Q29uc3RydWN0b3IuaCIKQEAgLTExMCw2ICsxMTEsMTYgQEAgdm9pZCBKU0Z1bmN0aW9u
OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIAogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlO
YW1lcy0+bGVuZ3RoLCBqc051bWJlcihsZW5ndGgpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBE
b250RW51bSk7CiB9CiAKK3ZvaWQgSlNGdW5jdGlvbjo6YWRkTmFtZVNjb3BlSWZOZWVkZWQoVk0m
IHZtKQoreworICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxGdW5j
dGlvbkV4ZWN1dGFibGUqPihtX2V4ZWN1dGFibGUuZ2V0KCkpOworICAgIGlmICghZnVuY3Rpb25O
YW1lSXNJblNjb3BlKGV4ZWN1dGFibGUtPm5hbWUoKSwgZXhlY3V0YWJsZS0+ZnVuY3Rpb25Nb2Rl
KCkpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFmdW5jdGlvbk5hbWVTY29wZUlzRHluYW1p
YyhleGVjdXRhYmxlLT51c2VzRXZhbCgpLCBleGVjdXRhYmxlLT5pc1N0cmljdE1vZGUoKSkpCisg
ICAgICAgIHJldHVybjsKKyAgICBtX3Njb3BlLnNldCh2bSwgdGhpcywgSlNOYW1lU2NvcGU6OmNy
ZWF0ZSh2bSwgbV9zY29wZS0+Z2xvYmFsT2JqZWN0KCksIGV4ZWN1dGFibGUtPm5hbWUoKSwgdGhp
cywgUmVhZE9ubHkgfCBEb250RGVsZXRlLCBtX3Njb3BlLmdldCgpKSk7Cit9CisKIEpTRnVuY3Rp
b24qIEpTRnVuY3Rpb246OmNyZWF0ZUJ1aWx0aW5GdW5jdGlvbihWTSYgdm0sIEZ1bmN0aW9uRXhl
Y3V0YWJsZSogZXhlY3V0YWJsZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKICAg
ICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGNyZWF0ZSh2bSwgZXhlY3V0YWJsZSwgZ2xvYmFsT2Jq
ZWN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJ
KHJldmlzaW9uIDE2MzIyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVu
Y3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtOTUsNiArOTUsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgICAgIEFTU0VSVCghaXNIb3N0RnVuY3Rpb25Ob25JbmxpbmUoKSk7CiAgICAgICAg
ICAgICBtX3Njb3BlLnNldCh2bSwgdGhpcywgc2NvcGUpOwogICAgICAgICB9CisgICAgICAgIHZv
aWQgYWRkTmFtZVNjb3BlSWZOZWVkZWQoVk0mKTsKIAogICAgICAgICBFeGVjdXRhYmxlQmFzZSog
ZXhlY3V0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fZXhlY3V0YWJsZS5nZXQoKTsgfQogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hbWVTY29wZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmFtZVNjb3BlLmgJKHJldmlzaW9u
IDE2MzIyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmFtZVNjb3BlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM5LDE1ICszOSwxNCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpT
TmFtZVNjb3BlKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBpZGVu
dGlmaWVyLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQogICAgIHsKICAgICAg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICAgICAgSlNOYW1lU2NvcGUqIHNjb3BlT2JqZWN0
ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNOYW1lU2NvcGU+KHZtLmhlYXApKSBKU05h
bWVTY29wZShleGVjLCBleGVjLT5zY29wZSgpKTsKKyAgICAgICAgSlNOYW1lU2NvcGUqIHNjb3Bl
T2JqZWN0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNOYW1lU2NvcGU+KHZtLmhlYXAp
KSBKU05hbWVTY29wZSh2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBleGVjLT5zY29w
ZSgpKTsKICAgICAgICAgc2NvcGVPYmplY3QtPmZpbmlzaENyZWF0aW9uKHZtLCBpZGVudGlmaWVy
LCB2YWx1ZSwgYXR0cmlidXRlcyk7CiAgICAgICAgIHJldHVybiBzY29wZU9iamVjdDsKICAgICB9
CiAKLSAgICBzdGF0aWMgSlNOYW1lU2NvcGUqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IElkZW50aWZpZXImIGlkZW50aWZpZXIsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0
ZXMsIEpTU2NvcGUqIG5leHQpCisgICAgc3RhdGljIEpTTmFtZVNjb3BlKiBjcmVhdGUoVk0mIHZt
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlm
aWVyLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBKU1Njb3BlKiBuZXh0KQog
ICAgIHsKLSAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICAgICAgSlNOYW1lU2NvcGUq
IHNjb3BlT2JqZWN0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNOYW1lU2NvcGU+KHZt
LmhlYXApKSBKU05hbWVTY29wZShleGVjLCBuZXh0KTsKKyAgICAgICAgSlNOYW1lU2NvcGUqIHNj
b3BlT2JqZWN0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNOYW1lU2NvcGU+KHZtLmhl
YXApKSBKU05hbWVTY29wZSh2bSwgZ2xvYmFsT2JqZWN0LCBuZXh0KTsKICAgICAgICAgc2NvcGVP
YmplY3QtPmZpbmlzaENyZWF0aW9uKHZtLCBpZGVudGlmaWVyLCB2YWx1ZSwgYXR0cmlidXRlcyk7
CiAgICAgICAgIHJldHVybiBzY29wZU9iamVjdDsKICAgICB9CkBAIC03MiwxMCArNzEsMTAgQEAg
cHJvdGVjdGVkOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92
ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBCYXNl
OjpTdHJ1Y3R1cmVGbGFnczsKIAogcHJpdmF0ZToKLSAgICBKU05hbWVTY29wZShFeGVjU3RhdGUq
IGV4ZWMsIEpTU2NvcGUqIG5leHQpCisgICAgSlNOYW1lU2NvcGUoVk0mIHZtLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU1Njb3BlKiBuZXh0KQogICAgICAgICA6IEJhc2UoCi0gICAg
ICAgICAgICBleGVjLT52bSgpLAotICAgICAgICAgICAgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpLT5uYW1lU2NvcGVTdHJ1Y3R1cmUoKSwKKyAgICAgICAgICAgIHZtLAorICAgICAgICAgICAg
Z2xvYmFsT2JqZWN0LT5uYW1lU2NvcGVTdHJ1Y3R1cmUoKSwKICAgICAgICAgICAgIHJlaW50ZXJw
cmV0X2Nhc3Q8UmVnaXN0ZXIqPigmbV9yZWdpc3RlclN0b3JlICsgMSksCiAgICAgICAgICAgICBu
ZXh0CiAgICAgICAgICkKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2MzIyNCkKKysrIExheW91dFRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDE0LTAxLTMxICBH
ZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAgICAgU2ltcGxpZmllZCBu
YW1lIHNjb3BlIGNyZWF0aW9uIGZvciBmdW5jdGlvbiBleHByZXNzaW9ucworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI4MDMxCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgYSBwZXJmb3JtYW5jZSBy
ZWdyZXNzaW9uIHRlc3QuCisKKyAgICAgICAgKiBqcy9yZWdyZXNzL2Z1bmN0aW9uLXdpdGgtZXZh
bC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvZnVuY3Rpb24td2l0
aC1ldmFsLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2Z1
bmN0aW9uLXdpdGgtZXZhbC5qczogQWRkZWQuCisgICAgICAgIChmb28pOgorICAgICAgICAoYmFy
KToKKwogMjAxNC0wMS0zMSAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KIAog
ICAgICAgICBVcGRhdGUgdGVzdCByZXN1bHRzIGZvciBhIG5ldyBET00gVVJMIHRlc3QgKHdlIG5v
dyBwYXNzIG1vcmUpLgpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9mdW5jdGlvbi13aXRo
LWV2YWwtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mv
ZnVuY3Rpb24td2l0aC1ldmFsLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2pzL3JlZ3Jlc3MvZnVuY3Rpb24td2l0aC1ldmFsLWV4cGVjdGVkLnR4dAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3MvZnVuY3Rpb24td2l0aC1ldmFsCisKK09u
IHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxv
d2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BB
U1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBM
YXlvdXRUZXN0cy9qcy9yZWdyZXNzL2Z1bmN0aW9uLXdpdGgtZXZhbC5odG1sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZnVuY3Rpb24td2l0aC1ldmFsLmh0bWwJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2Z1bmN0aW9uLXdpdGgtZXZhbC5odG1s
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAi
LS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5Pgor
PHNjcmlwdCBzcmM9InJlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0ic2NyaXB0LXRlc3RzL2Z1bmN0aW9uLXdpdGgtZXZhbC5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0icmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8
L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9mdW5jdGlv
bi13aXRoLWV2YWwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3Jp
cHQtdGVzdHMvZnVuY3Rpb24td2l0aC1ldmFsLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZnVuY3Rpb24td2l0aC1ldmFsLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTggQEAKK3ZhciBmb28gPSBmdW5jdGlvbiBmb28odW5saWtlbHkp
IHsKKyAgICBpZiAodW5saWtlbHkpCisgICAgICAgIHJldHVybiBldmFsKCIwIik7CisgICAgcmV0
dXJuIDE7Cit9CisKK25vSW5saW5lKGZvbyk7CisKK2Z1bmN0aW9uIGJhcigpIHsKKyAgICB2YXIg
cmVzdWx0ID0gMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDA7ICsraSkKKyAgICAg
ICAgcmVzdWx0ICs9IGZvbyhmYWxzZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordmFyIHJl
c3VsdCA9IGJhcigpOworaWYgKHJlc3VsdCAhPSAxMDAwMDAwKQorICAgIHRocm93ICJFcnJvcjog
YmFkIHJlc3VsdDogIiArIHJlc3VsdDsK
</data>
<flag name="review"
          id="246893"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
          </attachment>
      

    </bug>

</bugzilla>