<?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>147292</bug_id>
          
          <creation_ts>2015-07-24 22:36:38 -0700</creation_ts>
          <short_desc>Let&apos;s rename FunctionBodyNode</short_desc>
          <delta_ts>2015-08-10 13:24:51 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Geoffrey Garen">ggaren</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>oliver</cc>
    
    <cc>saam</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1112200</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-07-24 22:36:38 -0700</bug_when>
    <thetext>I&apos;m not sure what a great name would be, but FunctionBodyNode is really misleading.
It&apos;s definitely not the body of a function. 
It sort of acts like a placeholder for a function to be generated. 
Maybe FunctionPlaceholderNode?
Good names are hard.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1112522</commentid>
    <comment_count>1</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-07-27 15:10:49 -0700</bug_when>
    <thetext>From IRC:

[02:51] &lt;~ggaren&gt;	saamyjoon: some thoughts about this:
[02:51] &lt;~ggaren&gt;	(1) this stuff is super confusing. better names will help. also, one file per class would help.
[02:52] &lt;saamyjoon&gt;	ok
[02:52] &lt;saamyjoon&gt;	one class per file for &quot;FunctionBodyNode&quot; or for others as well?
[02:53] &lt;~ggaren&gt;	(2) Most of the data in FunctionBodyNode just gets copied into UnlinkedFunctionExecutable. It would be nice just to use a copy constructor for this, with UnlinkedFunctionExecutable having a FunctionBodyNode member, or with FunctionBodyNode being heap-allocated, and UnlinkedFunctionExecutable just copying a pointer to it. (Heap allocation would require not allocating out of the parser arena anymore.)
[02:54] &lt;~ggaren&gt;	saamyjoon: one class per file for everything in Executable.*, CodeBlock.*, and UnlinkedCodeBlock.* to start.
[02:55] &lt;~ggaren&gt;	(3) FunctionNode is a tree of nodes for a whole function, and can be used to generate function code. That&apos;s a good name.
[02:55] &lt;saamyjoon&gt;	agree on (3)
[02:55] &lt;saamyjoon&gt;	and (2)
[02:55] &lt;saamyjoon&gt;	and (1)
[02:55] &lt;~ggaren&gt;	(4) FunctionBodyNode is not a tree of nodes and does not pertain solely to the function&apos;s body. That&apos;s a bad name.
[02:55] &lt;saamyjoon&gt;	Also, agree on UnlinkedCodeBlock.* being separated
[02:57] &lt;~ggaren&gt;	(4a) &quot;body&quot; is bad because it&apos;s not just the body
[02:57] &lt;~ggaren&gt;	(4b) &quot;node&quot; is bad because it is not a tree with children
[02:57] &lt;~ggaren&gt;	ideas:
[02:59] &lt;~ggaren&gt;	FunctionRecord; FunctionMetadata; FunctionProxy
[02:59] &lt;~ggaren&gt;	LazyFunctionNode; FunctionPlaceholderNode; FunctionBoundaryNode
[02:59] &lt;~ggaren&gt;	if we take the route of an object that gets copied into an executable, then I don&apos;t like the *Node names
[02:59] &lt;~ggaren&gt;	*Node should be reserved for transient data in the AST, which dies with the AST
[03:00] &lt;saamyjoon&gt;	I think hands down &quot;FunctionMetaData&quot; is the most obvious name
[03:00] &lt;saamyjoon&gt;	Because if you read that
[03:00] &lt;saamyjoon&gt;	you immediately have a sense of wtf the thing is
[03:00] &lt;saamyjoon&gt;	or if you read the name with the fields
[03:00] &lt;saamyjoon&gt;	it makes sense
[03:01] &lt;~ggaren&gt;	one thing i don&apos;t like about FunctionMetaData is that it&apos;s a bit vague: this is a specific kind of data about where a function is in a file, and how to reparse it.
[03:01] &lt;saamyjoon&gt;	I don&apos;t think any of the other names indicate that idea any better than meta data
[03:01] &lt;~ggaren&gt;	FunctionParsingMetadata; ParsedFunctionMetadata; ParserFunctionMetadata
[03:01] &lt;saamyjoon&gt;	&quot;meta data&quot;*
[03:01] &lt;mlam&gt;	FunctionSourceMetaDat?
[03:01] &lt;saamyjoon&gt;	ParsedFunctionMetadata works
[03:02] &lt;mlam&gt;	...Data
[03:02] &lt;saamyjoon&gt;	also FunctionSourceMetaData works
[03:03] &lt;~ggaren&gt;	meh -- i don&apos;t love any of these new suggestions, so maybe FunctionMetadata is best because it is shortest



[03:03] &lt;~ggaren&gt;	so, my proposal is:
[03:03] &lt;~ggaren&gt;	(1) FunctionBodyNode =&gt; FunctionMetadata
[03:03] &lt;~ggaren&gt;	(2) stop using ParserArenaDeletable
[03:04] &lt;~ggaren&gt;	(3) stop heap-allocating and just be a class with a copy constructor, held inline by FuncDeclNode, FuncExprNode, and UnlinkedFunctionExecutable
[03:05] &lt;~ggaren&gt;	(4) stop inheriting from StatementNode
[03:06] &lt;~ggaren&gt;	(5) implied by 3: FuncDeclNode and FuncExprNode must become ParserArenaDeletable</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115849</commentid>
    <comment_count>2</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-08-07 13:01:58 -0700</bug_when>
    <thetext>I&apos;ll take this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115924</commentid>
    <comment_count>3</comment_count>
      <attachid>258541</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-08-07 16:26:35 -0700</bug_when>
    <thetext>Created attachment 258541
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115925</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-08-07 16:29:25 -0700</bug_when>
    <thetext>Attachment 258541 did not pass style-queue:


ERROR: Source/JavaScriptCore/parser/Nodes.cpp:155:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 16 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>1115932</commentid>
    <comment_count>5</comment_count>
      <attachid>258541</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-08-07 16:42:26 -0700</bug_when>
    <thetext>Comment on attachment 258541
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115964</commentid>
    <comment_count>6</comment_count>
      <attachid>258541</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-08-07 19:16:21 -0700</bug_when>
    <thetext>Comment on attachment 258541
Patch

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

This patch makes me happy :)

&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h:715
&gt; +        UnlinkedFunctionExecutable* makeFunction(FunctionMetadataNode* body)

Nit: I think this param name should be &quot;metaData&quot; or something similar.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1116303</commentid>
    <comment_count>7</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-08-10 13:24:51 -0700</bug_when>
    <thetext>Committed r188219: &lt;http://trac.webkit.org/changeset/188219&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>258541</attachid>
            <date>2015-08-07 16:26:35 -0700</date>
            <delta_ts>2015-08-07 16:42:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-147292-20150807162624.patch</filename>
            <type>text/plain</type>
            <size>34136</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg4MTY5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY5IEBA
CisyMDE1LTA4LTA3ICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAg
ICAgTGV0J3MgcmVuYW1lIEZ1bmN0aW9uQm9keU5vZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NzI5MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEZ1bmN0aW9uQm9keU5vZGUgPT4gRnVuY3Rpb25NZXRh
ZGF0YU5vZGUKKworICAgICAgICBNYWtlIEZ1bmN0aW9uTWV0YWRhdGFOb2RlIGluaGVyaXQgZnJv
bSBOb2RlIGluc3RlYWQgb2YgU3RhdGVtZW50Tm9kZQorICAgICAgICBiZWNhdXNlIGEgRnVuY3Rp
b25NZXRhZGF0YU5vZGUgY2FuIGFwcGVhciBpbiBleHByZXNzaW9uIGNvbnRleHQgYW5kIGRvZXMK
KyAgICAgICAgbm90IGhhdmUgYSBuZXh0IHN0YXRlbWVudC4KKworICAgICAgICAoSSBkZWNpZGVk
IHRvIGNvbnRpbnVlIGFsbG9jYXRpbmcgRnVuY3Rpb25NZXRhZGF0YU5vZGUgaW4gdGhlIEFTVCBh
cmVuYSwKKyAgICAgICAgYW5kIHRvIHJldGFpbiAiTm9kZSIgaW4gaXRzIG5hbWUsIGJlY2F1c2Ug
aXQgcmVhbGx5IGlzIGEgcGFyc2luZworICAgICAgICBjb25zdHJ1Y3QsIGFuZCB3ZSB0cmFuc2Zv
cm0gaXRzIGRhdGEgYmVmb3JlIGNvbnN1bWluZyBpdCBlbHNld2hlcmUuCisKKyAgICAgICAgVGhl
cmUgaXMgc3RpbGwgcm9vbSBmb3IgYSBmdXR1cmUgcGF0Y2ggdG8gZGlzdGlsbCBhbmQgc2ltcGxp
ZnkgdGhlCisgICAgICAgIG1ldGFkYXRhIHdlIHRyYWNrIGFib3V0IGZ1bmN0aW9ucyBiZXR3ZWVu
IEZ1bkRlY2xOb2RlL0Z1bmNFeHByTm9kZSwKKyAgICAgICAgRnVuY3Rpb25NZXRhZGF0YU5vZGUs
IGFuZCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS4gQnV0IHRoaXMgaXMgYSBzdGFydC4pCisK
KyAgICAgICAgKiBidWlsdGlucy9CdWlsdGluRXhlY3V0YWJsZXMuY3BwOgorICAgICAgICAoSlND
OjpCdWlsdGluRXhlY3V0YWJsZXM6OmNyZWF0ZUV4ZWN1dGFibGVJbnRlcm5hbCk6CisgICAgICAg
ICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpnZW5lcmF0
ZUZ1bmN0aW9uQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGU6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKToKKyAgICAgICAgKiBieXRlY29kZS9V
bmxpbmtlZENvZGVCbG9jay5oOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVy
YXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZSk6Cisg
ICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcik6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3QXJyYXkpOgorICAgICAgICAoSlND
OjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE5ld0Z1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6Qnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXROZXdGdW5jdGlvbkV4cHJlc3Npb24pOgorICAgICAgICAqIGJ5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdl
bmVyYXRvcjo6bWFrZUZ1bmN0aW9uKToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvTm9kZXNDb2Rl
Z2VuLmNwcDoKKyAgICAgICAgKEpTQzo6RXZhbE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAg
IChKU0M6OkZ1bmN0aW9uTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rp
b25Cb2R5Tm9kZTo6ZW1pdEJ5dGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwYXJzZXIvQVNU
QnVpbGRlci5oOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVGdW5jdGlvbkV4cHIp
OgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVGdW5jdGlvbkJvZHkpOgorICAgICAg
ICAqIHBhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmg6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uUGFy
YW1ldGVyczo6RnVuY3Rpb25QYXJhbWV0ZXJzKToKKyAgICAgICAgKEpTQzo6RnVuY0V4cHJOb2Rl
OjpGdW5jRXhwck5vZGUpOgorICAgICAgICAoSlNDOjpGdW5jRGVjbE5vZGU6OkZ1bmNEZWNsTm9k
ZSk6CisgICAgICAgICogcGFyc2VyL05vZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6RXZhbE5vZGU6
OkV2YWxOb2RlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25NZXRhZGF0YU5vZGU6OkZ1bmN0aW9u
TWV0YWRhdGFOb2RlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25NZXRhZGF0YU5vZGU6OmZpbmlz
aFBhcnNpbmcpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbk1ldGFkYXRhTm9kZTo6c2V0RW5kUG9z
aXRpb24pOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkJvZHlOb2RlOjpGdW5jdGlvbkJvZHlOb2Rl
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6RnVuY3Rpb25Cb2R5Tm9kZTo6ZmluaXNoUGFyc2lu
Zyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkZ1bmN0aW9uQm9keU5vZGU6OnNldEVuZFBvc2l0
aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBwYXJzZXIvTm9kZXMuaDoKKyAgICAgICAgKEpTQzo6
RnVuY0V4cHJOb2RlOjpib2R5KToKKyAgICAgICAgKEpTQzo6RnVuY0RlY2xOb2RlOjpib2R5KToK
KyAgICAgICAgKiBwYXJzZXIvUGFyc2VyLmg6CisgICAgICAgIChKU0M6OlBhcnNlcjo6aXNGdW5j
dGlvbk1ldGFkYXRhTm9kZSk6CisgICAgICAgIChKU0M6OlBhcnNlcjo6bmV4dCk6CisgICAgICAg
IChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZSk6CisgICAgICAgIChKU0M6OlBhcnNlcjo6
aXNGdW5jdGlvbkJvZHlOb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0NvZGVDYWNo
ZS5jcHA6CisgICAgICAgIChKU0M6OkNvZGVDYWNoZTo6Z2V0RnVuY3Rpb25FeGVjdXRhYmxlRnJv
bUdsb2JhbENvZGUpOgorICAgICAgICAqIHJ1bnRpbWUvQ29kZUNhY2hlLmg6CisKIDIwMTUtMDgt
MDcgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBMaWdodHdlaWdo
dCBsb2NrcyBzaG91bGQgYmUgYWRhcHRpdmUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
dWlsdGlucy9CdWlsdGluRXhlY3V0YWJsZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluRXhlY3V0YWJsZXMuY3BwCShyZXZpc2lvbiAxODgx
NDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbkV4ZWN1dGFibGVz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQsMTYgKzg0LDE2IEBAIFVubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlKiBCdWlsdGluRXhlY3UKICAgICBFeHByZXNzaW9uTm9kZSogZnVuY0V4cHIgPSBz
dGF0aWNfY2FzdDxFeHByU3RhdGVtZW50Tm9kZSo+KGV4cHJTdGF0ZW1lbnQpLT5leHByKCk7CiAg
ICAgUkVMRUFTRV9BU1NFUlQoZnVuY0V4cHIpOwogICAgIFJFTEVBU0VfQVNTRVJUKGZ1bmNFeHBy
LT5pc0Z1bmNFeHByTm9kZSgpKTsKLSAgICBGdW5jdGlvbkJvZHlOb2RlKiBib2R5ID0gc3RhdGlj
X2Nhc3Q8RnVuY0V4cHJOb2RlKj4oZnVuY0V4cHIpLT5ib2R5KCk7CisgICAgRnVuY3Rpb25NZXRh
ZGF0YU5vZGUqIG1ldGFkYXRhID0gc3RhdGljX2Nhc3Q8RnVuY0V4cHJOb2RlKj4oZnVuY0V4cHIp
LT5tZXRhZGF0YSgpOwogICAgIFJFTEVBU0VfQVNTRVJUKCFwcm9ncmFtLT5oYXNDYXB0dXJlZFZh
cmlhYmxlcygpKTsKICAgICAKLSAgICBib2R5LT5zZXRFbmRQb3NpdGlvbihwb3NpdGlvbkJlZm9y
ZUxhc3ROZXdsaW5lKTsKLSAgICBSRUxFQVNFX0FTU0VSVChib2R5KTsKLSAgICBSRUxFQVNFX0FT
U0VSVChib2R5LT5pZGVudCgpLmlzTnVsbCgpKTsKKyAgICBtZXRhZGF0YS0+c2V0RW5kUG9zaXRp
b24ocG9zaXRpb25CZWZvcmVMYXN0TmV3bGluZSk7CisgICAgUkVMRUFTRV9BU1NFUlQobWV0YWRh
dGEpOworICAgIFJFTEVBU0VfQVNTRVJUKG1ldGFkYXRhLT5pZGVudCgpLmlzTnVsbCgpKTsKICAg
ICAKICAgICAvLyBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgYW4gaW5wdXQgc3RyaW5nIHRoYXQgd291
bGQgcmVzdWx0IGluIGEgc2luZ2xlIGFub255bW91cyBmdW5jdGlvbiBleHByZXNzaW9uLgotICAg
IGJvZHktPnNldEVuZFBvc2l0aW9uKHBvc2l0aW9uQmVmb3JlTGFzdE5ld2xpbmUpOwotICAgIFJF
TEVBU0VfQVNTRVJUKGJvZHkpOworICAgIG1ldGFkYXRhLT5zZXRFbmRQb3NpdGlvbihwb3NpdGlv
bkJlZm9yZUxhc3ROZXdsaW5lKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtZXRhZGF0YSk7CiAgICAg
Zm9yIChjb25zdCBhdXRvJiBjbG9zZWRWYXJpYWJsZSA6IHByb2dyYW0tPmNsb3NlZFZhcmlhYmxl
cygpKSB7CiAgICAgICAgIGlmIChjbG9zZWRWYXJpYWJsZSA9PSBtX3ZtLnByb3BlcnR5TmFtZXMt
PmFyZ3VtZW50cy5pbXBsKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTEwMSw5ICsxMDEs
OSBAQCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogQnVpbHRpbkV4ZWN1CiAgICAgICAgIGlm
IChjbG9zZWRWYXJpYWJsZSA9PSBtX3ZtLnByb3BlcnR5TmFtZXMtPnVuZGVmaW5lZEtleXdvcmQu
aW1wbCgpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgfQotICAgIGJvZHktPm92ZXJyaWRl
TmFtZShuYW1lKTsKKyAgICBtZXRhZGF0YS0+b3ZlcnJpZGVOYW1lKG5hbWUpOwogICAgIFZhcmlh
YmxlRW52aXJvbm1lbnQgZHVtbXlURFpWYXJpYWJsZXM7Ci0gICAgVW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
OjpjcmVhdGUoJm1fdm0sIHNvdXJjZSwgYm9keSwga2luZCwgY29uc3RydWN0QWJpbGl0eSwgZHVt
bXlURFpWYXJpYWJsZXMsIFdURjo6bW92ZShzb3VyY2VPdmVycmlkZSkpOworICAgIFVubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBVbmxpbmtlZEZ1bmN0aW9u
RXhlY3V0YWJsZTo6Y3JlYXRlKCZtX3ZtLCBzb3VyY2UsIG1ldGFkYXRhLCBraW5kLCBjb25zdHJ1
Y3RBYmlsaXR5LCBkdW1teVREWlZhcmlhYmxlcywgV1RGOjptb3ZlKHNvdXJjZU92ZXJyaWRlKSk7
CiAgICAgZnVuY3Rpb25FeGVjdXRhYmxlLT5tX25hbWVWYWx1ZS5zZXQobV92bSwgZnVuY3Rpb25F
eGVjdXRhYmxlLCBqc1N0cmluZygmbV92bSwgbmFtZS5zdHJpbmcoKSkpOwogICAgIHJldHVybiBm
dW5jdGlvbkV4ZWN1dGFibGU7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAJKHJldmlzaW9uIDE4ODE0OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDcgQEAgc3RhdGljIFVubGlua2VkRnVuY3Rpb25Db2Rl
QmxvY2sqIGdlbmVyYQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVVubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZShWTSogdm0sIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIFJlZlB0cjxTb3VyY2VQcm92aWRl
cj4mJiBzb3VyY2VPdmVycmlkZSwgRnVuY3Rpb25Cb2R5Tm9kZSogbm9kZSwgVW5saW5rZWRGdW5j
dGlvbktpbmQga2luZCwgQ29uc3RydWN0QWJpbGl0eSBjb25zdHJ1Y3RBYmlsaXR5LCBWYXJpYWJs
ZUVudmlyb25tZW50JiBwYXJlbnRTY29wZVREWlZhcmlhYmxlcykKK1VubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZShWTSogdm0sIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIFJlZlB0cjxTb3VyY2VQcm92aWRl
cj4mJiBzb3VyY2VPdmVycmlkZSwgRnVuY3Rpb25NZXRhZGF0YU5vZGUqIG5vZGUsIFVubGlua2Vk
RnVuY3Rpb25LaW5kIGtpbmQsIENvbnN0cnVjdEFiaWxpdHkgY29uc3RydWN0QWJpbGl0eSwgVmFy
aWFibGVFbnZpcm9ubWVudCYgcGFyZW50U2NvcGVURFpWYXJpYWJsZXMpCiAgICAgOiBCYXNlKCp2
bSwgc3RydWN0dXJlKQogICAgICwgbV9uYW1lKG5vZGUtPmlkZW50KCkpCiAgICAgLCBtX2luZmVy
cmVkTmFtZShub2RlLT5pbmZlcnJlZE5hbWUoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCShyZXZpc2lvbiAxODgxNDgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAko
d29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNz
IERlYnVnZ2VyOwotY2xhc3MgRnVuY3Rpb25Cb2R5Tm9kZTsKK2NsYXNzIEZ1bmN0aW9uTWV0YWRh
dGFOb2RlOwogY2xhc3MgRnVuY3Rpb25FeGVjdXRhYmxlOwogY2xhc3MgSlNTY29wZTsKIGNsYXNz
IFBhcnNlckVycm9yOwpAQCAtMTA4LDcgKzEwOCw3IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIEpT
Q2VsbCBCYXNlOwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJh
c2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKIAotICAgIHN0YXRpYyBV
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogY3JlYXRlKFZNKiB2bSwgY29uc3QgU291cmNlQ29k
ZSYgc291cmNlLCBGdW5jdGlvbkJvZHlOb2RlKiBub2RlLCBVbmxpbmtlZEZ1bmN0aW9uS2luZCB1
bmxpbmtlZEZ1bmN0aW9uS2luZCwgQ29uc3RydWN0QWJpbGl0eSBjb25zdHJ1Y3RBYmlsaXR5LCBW
YXJpYWJsZUVudmlyb25tZW50JiBwYXJlbnRTY29wZVREWlZhcmlhYmxlcywgUmVmUHRyPFNvdXJj
ZVByb3ZpZGVyPiYmIHNvdXJjZU92ZXJyaWRlID0gbnVsbHB0cikKKyAgICBzdGF0aWMgVW5saW5r
ZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGNyZWF0ZShWTSogdm0sIGNvbnN0IFNvdXJjZUNvZGUmIHNv
dXJjZSwgRnVuY3Rpb25NZXRhZGF0YU5vZGUqIG5vZGUsIFVubGlua2VkRnVuY3Rpb25LaW5kIHVu
bGlua2VkRnVuY3Rpb25LaW5kLCBDb25zdHJ1Y3RBYmlsaXR5IGNvbnN0cnVjdEFiaWxpdHksIFZh
cmlhYmxlRW52aXJvbm1lbnQmIHBhcmVudFNjb3BlVERaVmFyaWFibGVzLCBSZWZQdHI8U291cmNl
UHJvdmlkZXI+JiYgc291cmNlT3ZlcnJpZGUgPSBudWxscHRyKQogICAgIHsKICAgICAgICAgVW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0
ZUNlbGw8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+KHZtLT5oZWFwKSkKICAgICAgICAgICAg
IFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKHZtLCB2bS0+dW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGVTdHJ1Y3R1cmUuZ2V0KCksIHNvdXJjZSwgV1RGOjptb3ZlKHNvdXJjZU92ZXJyaWRlKSwg
bm9kZSwgdW5saW5rZWRGdW5jdGlvbktpbmQsIGNvbnN0cnVjdEFiaWxpdHksIHBhcmVudFNjb3Bl
VERaVmFyaWFibGVzKTsKQEAgLTE2OCw3ICsxNjgsNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgVmFy
aWFibGVFbnZpcm9ubWVudCogcGFyZW50U2NvcGVURFpWYXJpYWJsZXMoKSBjb25zdCB7IHJldHVy
biAmbV9wYXJlbnRTY29wZVREWlZhcmlhYmxlczsgfQogCiBwcml2YXRlOgotICAgIFVubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlKFZNKiwgU3RydWN0dXJlKiwgY29uc3QgU291cmNlQ29kZSYsIFJl
ZlB0cjxTb3VyY2VQcm92aWRlcj4mJiBzb3VyY2VPdmVycmlkZSwgRnVuY3Rpb25Cb2R5Tm9kZSos
IFVubGlua2VkRnVuY3Rpb25LaW5kLCBDb25zdHJ1Y3RBYmlsaXR5LCBWYXJpYWJsZUVudmlyb25t
ZW50Jik7CisgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUoVk0qLCBTdHJ1Y3R1cmUqLCBj
b25zdCBTb3VyY2VDb2RlJiwgUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiYmIHNvdXJjZU92ZXJyaWRl
LCBGdW5jdGlvbk1ldGFkYXRhTm9kZSosIFVubGlua2VkRnVuY3Rpb25LaW5kLCBDb25zdHJ1Y3RB
YmlsaXR5LCBWYXJpYWJsZUVudmlyb25tZW50Jik7CiAgICAgV3JpdGVCYXJyaWVyPFVubGlua2Vk
RnVuY3Rpb25Db2RlQmxvY2s+IG1fY29kZUJsb2NrRm9yQ2FsbDsKICAgICBXcml0ZUJhcnJpZXI8
VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jaz4gbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3Q7CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0
ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAxODgxNDgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzYsMTMgKzc2LDEzIEBAIFBhcnNlckVycm9yIEJ5dGVjb2RlR2VuZXJhdG9yOjpnZW5lcmF0
ZSgKICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHRlbXAgPSBuZXdUZW1wb3JhcnkoKTsKICAg
ICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGdsb2JhbFNjb3BlID0gbV90b3BNb3N0U2NvcGU7CiAg
ICAgICAgIGZvciAoYXV0byBmdW5jdGlvblBhaXIgOiBtX2Z1bmN0aW9uc1RvSW5pdGlhbGl6ZSkg
ewotICAgICAgICAgICAgRnVuY3Rpb25Cb2R5Tm9kZSogZnVuY3Rpb25Cb2R5ID0gZnVuY3Rpb25Q
YWlyLmZpcnN0OworICAgICAgICAgICAgRnVuY3Rpb25NZXRhZGF0YU5vZGUqIG1ldGFkYXRhID0g
ZnVuY3Rpb25QYWlyLmZpcnN0OwogICAgICAgICAgICAgRnVuY3Rpb25WYXJpYWJsZVR5cGUgZnVu
Y3Rpb25UeXBlID0gZnVuY3Rpb25QYWlyLnNlY29uZDsKLSAgICAgICAgICAgIGVtaXROZXdGdW5j
dGlvbih0ZW1wLmdldCgpLCBmdW5jdGlvbkJvZHkpOworICAgICAgICAgICAgZW1pdE5ld0Z1bmN0
aW9uKHRlbXAuZ2V0KCksIG1ldGFkYXRhKTsKICAgICAgICAgICAgIGlmIChmdW5jdGlvblR5cGUg
PT0gTm9ybWFsRnVuY3Rpb25WYXJpYWJsZSkKLSAgICAgICAgICAgICAgICBpbml0aWFsaXplVmFy
aWFibGUodmFyaWFibGUoZnVuY3Rpb25Cb2R5LT5pZGVudCgpKSAsIHRlbXAuZ2V0KCkpOworICAg
ICAgICAgICAgICAgIGluaXRpYWxpemVWYXJpYWJsZSh2YXJpYWJsZShtZXRhZGF0YS0+aWRlbnQo
KSkgLCB0ZW1wLmdldCgpKTsKICAgICAgICAgICAgIGVsc2UgaWYgKGZ1bmN0aW9uVHlwZSA9PSBH
bG9iYWxGdW5jdGlvblZhcmlhYmxlKQotICAgICAgICAgICAgICAgIGVtaXRQdXRUb1Njb3BlKGds
b2JhbFNjb3BlLmdldCgpLCBWYXJpYWJsZShmdW5jdGlvbkJvZHktPmlkZW50KCkpLCB0ZW1wLmdl
dCgpLCBUaHJvd0lmTm90Rm91bmQpOworICAgICAgICAgICAgICAgIGVtaXRQdXRUb1Njb3BlKGds
b2JhbFNjb3BlLmdldCgpLCBWYXJpYWJsZShtZXRhZGF0YS0+aWRlbnQoKSksIHRlbXAuZ2V0KCks
IFRocm93SWZOb3RGb3VuZCk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQpAQCAtMTYyLDcgKzE2Miw3IEBA
IEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYKICAgICBjb25zdCBGdW5j
dGlvblN0YWNrJiBmdW5jdGlvblN0YWNrID0gcHJvZ3JhbU5vZGUtPmZ1bmN0aW9uU3RhY2soKTsK
IAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnVuY3Rpb25TdGFjay5zaXplKCk7ICsraSkg
ewotICAgICAgICBGdW5jdGlvbkJvZHlOb2RlKiBmdW5jdGlvbiA9IGZ1bmN0aW9uU3RhY2tbaV07
CisgICAgICAgIEZ1bmN0aW9uTWV0YWRhdGFOb2RlKiBmdW5jdGlvbiA9IGZ1bmN0aW9uU3RhY2tb
aV07CiAgICAgICAgIG1fZnVuY3Rpb25zVG9Jbml0aWFsaXplLmFwcGVuZChzdGQ6Om1ha2VfcGFp
cihmdW5jdGlvbiwgR2xvYmFsRnVuY3Rpb25WYXJpYWJsZSkpOwogICAgIH0KICAgICBpZiAoT3B0
aW9uczo6dmFsaWRhdGVCeXRlY29kZSgpKSB7CkBAIC0yNzEsNyArMjcxLDcgQEAgQnl0ZWNvZGVH
ZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogCiAgICAgLy8gTmVlZCB0byBrbm93IHdo
YXQgb3VyIGZ1bmN0aW9ucyBhcmUgY2FsbGVkLiBQYXJhbWV0ZXJzIGhhdmUgc29tZSBnb29meSBi
ZWhhdmlvcnMgd2hlbiBpdAogICAgIC8vIGNvbWVzIHRvIGZ1bmN0aW9ucyBvZiB0aGUgc2FtZSBu
YW1lLgotICAgIGZvciAoRnVuY3Rpb25Cb2R5Tm9kZSogZnVuY3Rpb24gOiBmdW5jdGlvbk5vZGUt
PmZ1bmN0aW9uU3RhY2soKSkKKyAgICBmb3IgKEZ1bmN0aW9uTWV0YWRhdGFOb2RlKiBmdW5jdGlv
biA6IGZ1bmN0aW9uTm9kZS0+ZnVuY3Rpb25TdGFjaygpKQogICAgICAgICBtX2Z1bmN0aW9ucy5h
ZGQoZnVuY3Rpb24tPmlkZW50KCkuaW1wbCgpKTsKICAgICAKICAgICBpZiAobmVlZHNBcmd1bWVu
dHMpIHsKQEAgLTM3OCw3ICszNzgsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5l
cmF0b3IoVk0mCiAgICAgICAgIEFTU0VSVCghcGFyYW1ldGVycy5oYXNEZWZhdWx0UGFyYW1ldGVy
VmFsdWVzKCkpOwogICAgICAgICBjcmVhdGVWYXJpYWJsZShpZGVudCwgdmFyS2luZChpZGVudC5p
bXBsKCkpLCBmdW5jdGlvblN5bWJvbFRhYmxlKTsKICAgICB9Ci0gICAgZm9yIChGdW5jdGlvbkJv
ZHlOb2RlKiBmdW5jdGlvbiA6IGZ1bmN0aW9uTm9kZS0+ZnVuY3Rpb25TdGFjaygpKSB7CisgICAg
Zm9yIChGdW5jdGlvbk1ldGFkYXRhTm9kZSogZnVuY3Rpb24gOiBmdW5jdGlvbk5vZGUtPmZ1bmN0
aW9uU3RhY2soKSkgewogICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGZ1bmN0aW9u
LT5pZGVudCgpOwogICAgICAgICBjcmVhdGVWYXJpYWJsZShpZGVudCwgdmFyS2luZChpZGVudC5p
bXBsKCkpLCBmdW5jdGlvblN5bWJvbFRhYmxlKTsKICAgICAgICAgbV9mdW5jdGlvbnNUb0luaXRp
YWxpemUuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGZ1bmN0aW9uLCBOb3JtYWxGdW5jdGlvblZhcmlh
YmxlKSk7CkBAIC0yMjMyLDcgKzIyMzIsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRv
cjo6ZW1pdE5ld0FyCiAgICAgcmV0dXJuIGRzdDsKIH0KIAotUmVnaXN0ZXJJRCogQnl0ZWNvZGVH
ZW5lcmF0b3I6OmVtaXROZXdGdW5jdGlvbihSZWdpc3RlcklEKiBkc3QsIEZ1bmN0aW9uQm9keU5v
ZGUqIGZ1bmN0aW9uKQorUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXROZXdGdW5j
dGlvbihSZWdpc3RlcklEKiBkc3QsIEZ1bmN0aW9uTWV0YWRhdGFOb2RlKiBmdW5jdGlvbikKIHsK
ICAgICByZXR1cm4gZW1pdE5ld0Z1bmN0aW9uSW50ZXJuYWwoZHN0LCBtX2NvZGVCbG9jay0+YWRk
RnVuY3Rpb25EZWNsKG1ha2VGdW5jdGlvbihmdW5jdGlvbikpKTsKIH0KQEAgLTIyNTYsOCArMjI1
Niw4IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3UmUKIAogUmVnaXN0
ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXROZXdGdW5jdGlvbkV4cHJlc3Npb24oUmVnaXN0
ZXJJRCogcjAsIEZ1bmNFeHByTm9kZSogbikKIHsKLSAgICBGdW5jdGlvbkJvZHlOb2RlKiBmdW5j
dGlvbiA9IG4tPmJvZHkoKTsKLSAgICB1bnNpZ25lZCBpbmRleCA9IG1fY29kZUJsb2NrLT5hZGRG
dW5jdGlvbkV4cHIobWFrZUZ1bmN0aW9uKGZ1bmN0aW9uKSk7CisgICAgRnVuY3Rpb25NZXRhZGF0
YU5vZGUqIG1ldGFkYXRhID0gbi0+bWV0YWRhdGEoKTsKKyAgICB1bnNpZ25lZCBpbmRleCA9IG1f
Y29kZUJsb2NrLT5hZGRGdW5jdGlvbkV4cHIobWFrZUZ1bmN0aW9uKG1ldGFkYXRhKSk7CiAKICAg
ICBlbWl0T3Bjb2RlKG9wX25ld19mdW5jX2V4cCk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5k
KHIwLT5pbmRleCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDE4ODE0OCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkod29y
a2luZyBjb3B5KQpAQCAtNDc3LDcgKzQ3Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBS
ZWdpc3RlcklEKiBlbWl0TmV3T2JqZWN0KFJlZ2lzdGVySUQqIGRzdCk7CiAgICAgICAgIFJlZ2lz
dGVySUQqIGVtaXROZXdBcnJheShSZWdpc3RlcklEKiBkc3QsIEVsZW1lbnROb2RlKiwgdW5zaWdu
ZWQgbGVuZ3RoKTsgLy8gc3RvcHMgYXQgZmlyc3QgZWxpc2lvbgogCi0gICAgICAgIFJlZ2lzdGVy
SUQqIGVtaXROZXdGdW5jdGlvbihSZWdpc3RlcklEKiBkc3QsIEZ1bmN0aW9uQm9keU5vZGUqKTsK
KyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdE5ld0Z1bmN0aW9uKFJlZ2lzdGVySUQqIGRzdCwgRnVu
Y3Rpb25NZXRhZGF0YU5vZGUqKTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdE5ld0Z1bmN0aW9u
SW50ZXJuYWwoUmVnaXN0ZXJJRCogZHN0LCB1bnNpZ25lZCBpbmRleCk7CiAgICAgICAgIFJlZ2lz
dGVySUQqIGVtaXROZXdGdW5jdGlvbkV4cHJlc3Npb24oUmVnaXN0ZXJJRCogZHN0LCBGdW5jRXhw
ck5vZGUqIGZ1bmMpOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0TmV3RGVmYXVsdENvbnN0cnVj
dG9yKFJlZ2lzdGVySUQqIGRzdCwgQ29uc3RydWN0b3JLaW5kLCBjb25zdCBJZGVudGlmaWVyJiBu
YW1lKTsKQEAgLTcxMiw3ICs3MTIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB1bnNp
Z25lZCBhZGRDb25zdGFudEJ1ZmZlcih1bnNpZ25lZCBsZW5ndGgpOwogICAgICAgICAKLSAgICAg
ICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIG1ha2VGdW5jdGlvbihGdW5jdGlvbkJvZHlO
b2RlKiBib2R5KQorICAgICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogbWFrZUZ1bmN0
aW9uKEZ1bmN0aW9uTWV0YWRhdGFOb2RlKiBib2R5KQogICAgICAgICB7CiAgICAgICAgICAgICBW
YXJpYWJsZUVudmlyb25tZW50IHZhcmlhYmxlc1VuZGVyVERaOwogICAgICAgICAgICAgZ2V0VmFy
aWFibGVzVW5kZXJURFoodmFyaWFibGVzVW5kZXJURFopOwpAQCAtNzkyLDcgKzc5Miw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEZvckluQ29udGV4
dD4+IG1fZm9ySW5Db250ZXh0U3RhY2s7CiAgICAgICAgIFZlY3RvcjxUcnlDb250ZXh0PiBtX3Ry
eUNvbnRleHRTdGFjazsKICAgICAgICAgZW51bSBGdW5jdGlvblZhcmlhYmxlVHlwZSA6IHVpbnQ4
X3QgeyBOb3JtYWxGdW5jdGlvblZhcmlhYmxlLCBHbG9iYWxGdW5jdGlvblZhcmlhYmxlIH07Ci0g
ICAgICAgIFZlY3RvcjxzdGQ6OnBhaXI8RnVuY3Rpb25Cb2R5Tm9kZSosIEZ1bmN0aW9uVmFyaWFi
bGVUeXBlPj4gbV9mdW5jdGlvbnNUb0luaXRpYWxpemU7CisgICAgICAgIFZlY3RvcjxzdGQ6OnBh
aXI8RnVuY3Rpb25NZXRhZGF0YU5vZGUqLCBGdW5jdGlvblZhcmlhYmxlVHlwZT4+IG1fZnVuY3Rp
b25zVG9Jbml0aWFsaXplOwogICAgICAgICBib29sIG1fbmVlZFRvSW5pdGlhbGl6ZUFyZ3VtZW50
cyB7IGZhbHNlIH07CiAgICAgICAgIAogICAgICAgICBWZWN0b3I8VHJ5UmFuZ2U+IG1fdHJ5UmFu
Z2VzOwpAQCAtODAwLDcgKzgwMCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIGludCBt
X25leHRDb25zdGFudE9mZnNldCB7IDAgfTsKIAotICAgICAgICB0eXBlZGVmIEhhc2hNYXA8RnVu
Y3Rpb25Cb2R5Tm9kZSosIHVuc2lnbmVkPiBGdW5jdGlvbk9mZnNldE1hcDsKKyAgICAgICAgdHlw
ZWRlZiBIYXNoTWFwPEZ1bmN0aW9uTWV0YWRhdGFOb2RlKiwgdW5zaWduZWQ+IEZ1bmN0aW9uT2Zm
c2V0TWFwOwogICAgICAgICBGdW5jdGlvbk9mZnNldE1hcCBtX2Z1bmN0aW9uT2Zmc2V0czsKICAg
ICAgICAgCiAgICAgICAgIC8vIENvbnN0YW50IHBvb2wKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAJKHJldmlzaW9uIDE4
ODE0OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2Vu
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjkwNywxMSArMjkwNyw3IEBAIHZvaWQgRXZhbE5vZGU6
OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmUKICAgICBnZW5lcmF0b3IuZW1pdEVuZChkc3RSZWdp
c3Rlci5nZXQoKSk7CiB9CiAKLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5j
dGlvbkJvZHlOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXZvaWQgRnVuY3Rp
b25Cb2R5Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCop
Ci17Ci19CisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb25Ob2RlIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIHZvaWQgRnVuY3Rpb25Ob2RlOjplbWl0Qnl0
ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCopCiB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FTVEJ1aWxkZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FTVEJ1aWxkZXIuaAkocmV2aXNpb24gMTg4
MTQ4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9BU1RCdWlsZGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEwOSw3ICsxMDksNyBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBUZW1wbGF0
ZUxpdGVyYWxOb2RlKiBUZW1wbGF0ZUxpdGVyYWw7CiAjZW5kaWYKICAgICB0eXBlZGVmIEZ1bmN0
aW9uUGFyYW1ldGVycyogRm9ybWFsUGFyYW1ldGVyTGlzdDsKLSAgICB0eXBlZGVmIEZ1bmN0aW9u
Qm9keU5vZGUqIEZ1bmN0aW9uQm9keTsKKyAgICB0eXBlZGVmIEZ1bmN0aW9uTWV0YWRhdGFOb2Rl
KiBGdW5jdGlvbkJvZHk7CiAjaWYgRU5BQkxFKEVTNl9DTEFTU19TWU5UQVgpCiAgICAgdHlwZWRl
ZiBDbGFzc0V4cHJOb2RlKiBDbGFzc0V4cHJlc3Npb247CiAjZW5kaWYKQEAgLTMzNiw3ICszMzYs
NyBAQCBwdWJsaWM6CiAgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZUFzc2lnblJlc29sdmUoY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIEV4
cHJlc3Npb25Ob2RlKiByaHMsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFydCwgY29uc3QgSlNU
ZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZW5kLCBBc3NpZ25tZW50
Q29udGV4dCBhc3NpZ25tZW50Q29udGV4dCkKICAgICB7CiAgICAgICAgIGlmIChyaHMtPmlzRnVu
Y0V4cHJOb2RlKCkpCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxGdW5jRXhwck5vZGUqPihyaHMp
LT5ib2R5KCktPnNldEluZmVycmVkTmFtZShpZGVudCk7CisgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxGdW5jRXhwck5vZGUqPihyaHMpLT5tZXRhZGF0YSgpLT5zZXRJbmZlcnJlZE5hbWUoaWRlbnQp
OwogICAgICAgICBBc3NpZ25SZXNvbHZlTm9kZSogbm9kZSA9IG5ldyAobV9wYXJzZXJBcmVuYSkg
QXNzaWduUmVzb2x2ZU5vZGUobG9jYXRpb24sIGlkZW50LCByaHMsIGFzc2lnbm1lbnRDb250ZXh0
KTsKICAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24obm9kZSwgc3RhcnQsIGRpdm90LCBlbmQp
OwogICAgICAgICByZXR1cm4gbm9kZTsKQEAgLTM1OCwxMyArMzU4LDEzIEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBGdW5jdGlvbkJvZHlOb2RlKiBjcmVh
dGVGdW5jdGlvbkJvZHkoCisgICAgRnVuY3Rpb25NZXRhZGF0YU5vZGUqIGNyZWF0ZUZ1bmN0aW9u
TWV0YWRhdGEoCiAgICAgICAgIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwg
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgCiAgICAgICAgIHVuc2lnbmVkIHN0
YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRDb2x1bW4sIGludCBmdW5jdGlvbktleXdvcmRTdGFydCwg
CiAgICAgICAgIGludCBmdW5jdGlvbk5hbWVTdGFydCwgaW50IHBhcmFtZXRlcnNTdGFydCwgYm9v
bCBpblN0cmljdENvbnRleHQsIAogICAgICAgICBDb25zdHJ1Y3RvcktpbmQgY29uc3RydWN0b3JL
aW5kLCB1bnNpZ25lZCBwYXJhbWV0ZXJDb3VudCwgRnVuY3Rpb25QYXJzZU1vZGUgbW9kZSkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIEZ1bmN0aW9uQm9keU5vZGUo
CisgICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIEZ1bmN0aW9uTWV0YWRhdGFOb2Rl
KAogICAgICAgICAgICAgbV9wYXJzZXJBcmVuYSwgc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRpb24s
IHN0YXJ0Q29sdW1uLCBlbmRDb2x1bW4sIAogICAgICAgICAgICAgZnVuY3Rpb25LZXl3b3JkU3Rh
cnQsIGZ1bmN0aW9uTmFtZVN0YXJ0LCBwYXJhbWV0ZXJzU3RhcnQsIAogICAgICAgICAgICAgaW5T
dHJpY3RDb250ZXh0LCBjb25zdHJ1Y3RvcktpbmQsIHBhcmFtZXRlckNvdW50LCBtb2RlKTsKQEAg
LTQwOCw3ICs0MDgsNyBAQCBwdWJsaWM6CiAgICAgUHJvcGVydHlOb2RlKiBjcmVhdGVQcm9wZXJ0
eShjb25zdCBJZGVudGlmaWVyKiBwcm9wZXJ0eU5hbWUsIEV4cHJlc3Npb25Ob2RlKiBub2RlLCBQ
cm9wZXJ0eU5vZGU6OlR5cGUgdHlwZSwgUHJvcGVydHlOb2RlOjpQdXRUeXBlIHB1dFR5cGUsIGJv
b2wsIFN1cGVyQmluZGluZyBzdXBlckJpbmRpbmcgPSBTdXBlckJpbmRpbmc6Ok5vdE5lZWRlZCkK
ICAgICB7CiAgICAgICAgIGlmIChub2RlLT5pc0Z1bmNFeHByTm9kZSgpKQotICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8RnVuY0V4cHJOb2RlKj4obm9kZSktPmJvZHkoKS0+c2V0SW5mZXJyZWROYW1l
KCpwcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAgc3RhdGljX2Nhc3Q8RnVuY0V4cHJOb2RlKj4o
bm9kZSktPm1ldGFkYXRhKCktPnNldEluZmVycmVkTmFtZSgqcHJvcGVydHlOYW1lKTsKICAgICAg
ICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgUHJvcGVydHlOb2RlKCpwcm9wZXJ0eU5hbWUs
IG5vZGUsIHR5cGUsIHB1dFR5cGUsIHN1cGVyQmluZGluZyk7CiAgICAgfQogICAgIFByb3BlcnR5
Tm9kZSogY3JlYXRlUHJvcGVydHkoVk0qIHZtLCBQYXJzZXJBcmVuYSYgcGFyc2VyQXJlbmEsIGRv
dWJsZSBwcm9wZXJ0eU5hbWUsIEV4cHJlc3Npb25Ob2RlKiBub2RlLCBQcm9wZXJ0eU5vZGU6OlR5
cGUgdHlwZSwgUHJvcGVydHlOb2RlOjpQdXRUeXBlIHB1dFR5cGUsIGJvb2wpCkBAIC00MzgsNyAr
NDM4LDcgQEAgcHVibGljOgogICAgICAgICAgICAgbV9zb3VyY2VDb2RlLT5zdWJFeHByZXNzaW9u
KGZ1bmN0aW9uSW5mby5zdGFydE9mZnNldCwgZnVuY3Rpb25JbmZvLmVuZE9mZnNldCwgZnVuY3Rp
b25JbmZvLnN0YXJ0TGluZSwgZnVuY3Rpb25JbmZvLmJvZHlTdGFydENvbHVtbikpOwogICAgICAg
ICBpZiAoKmZ1bmN0aW9uSW5mby5uYW1lID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50
cykKICAgICAgICAgICAgIHVzZXNBcmd1bWVudHMoKTsKLSAgICAgICAgbV9zY29wZS5tX2Z1bmNE
ZWNsYXJhdGlvbnMuYXBwZW5kKGRlY2wtPmJvZHkoKSk7CisgICAgICAgIG1fc2NvcGUubV9mdW5j
RGVjbGFyYXRpb25zLmFwcGVuZChkZWNsLT5tZXRhZGF0YSgpKTsKICAgICAgICAgZnVuY3Rpb25J
bmZvLmJvZHktPnNldExvYyhmdW5jdGlvbkluZm8uc3RhcnRMaW5lLCBmdW5jdGlvbkluZm8uZW5k
TGluZSwgbG9jYXRpb24uc3RhcnRPZmZzZXQsIGxvY2F0aW9uLmxpbmVTdGFydE9mZnNldCk7CiAg
ICAgICAgIHJldHVybiBkZWNsOwogICAgIH0KQEAgLTEyMTEsNyArMTIxMSw3IEBAIEV4cHJlc3Np
b25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlQXNzaWduTm8KICAgICAgICAgUmVzb2x2ZU5vZGUqIHJl
c29sdmUgPSBzdGF0aWNfY2FzdDxSZXNvbHZlTm9kZSo+KGxvYyk7CiAgICAgICAgIGlmIChvcCA9
PSBPcEVxdWFsKSB7CiAgICAgICAgICAgICBpZiAoZXhwci0+aXNGdW5jRXhwck5vZGUoKSkKLSAg
ICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxGdW5jRXhwck5vZGUqPihleHByKS0+Ym9keSgpLT5z
ZXRJbmZlcnJlZE5hbWUocmVzb2x2ZS0+aWRlbnRpZmllcigpKTsKKyAgICAgICAgICAgICAgICBz
dGF0aWNfY2FzdDxGdW5jRXhwck5vZGUqPihleHByKS0+bWV0YWRhdGEoKS0+c2V0SW5mZXJyZWRO
YW1lKHJlc29sdmUtPmlkZW50aWZpZXIoKSk7CiAgICAgICAgICAgICBBc3NpZ25SZXNvbHZlTm9k
ZSogbm9kZSA9IG5ldyAobV9wYXJzZXJBcmVuYSkgQXNzaWduUmVzb2x2ZU5vZGUobG9jYXRpb24s
IHJlc29sdmUtPmlkZW50aWZpZXIoKSwgZXhwciwgQXNzaWdubWVudENvbnRleHQ6OkFzc2lnbm1l
bnRFeHByZXNzaW9uKTsKICAgICAgICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0aW9uKG5vZGUsIHN0
YXJ0LCBkaXZvdCwgZW5kKTsKICAgICAgICAgICAgIHJldHVybiBub2RlOwpAQCAtMTIzMCw3ICsx
MjMwLDcgQEAgRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VBc3NpZ25ObwogICAgIERv
dEFjY2Vzc29yTm9kZSogZG90ID0gc3RhdGljX2Nhc3Q8RG90QWNjZXNzb3JOb2RlKj4obG9jKTsK
ICAgICBpZiAob3AgPT0gT3BFcXVhbCkgewogICAgICAgICBpZiAoZXhwci0+aXNGdW5jRXhwck5v
ZGUoKSkKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PEZ1bmNFeHByTm9kZSo+KGV4cHIpLT5ib2R5
KCktPnNldEluZmVycmVkTmFtZShkb3QtPmlkZW50aWZpZXIoKSk7CisgICAgICAgICAgICBzdGF0
aWNfY2FzdDxGdW5jRXhwck5vZGUqPihleHByKS0+bWV0YWRhdGEoKS0+c2V0SW5mZXJyZWROYW1l
KGRvdC0+aWRlbnRpZmllcigpKTsKICAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkg
QXNzaWduRG90Tm9kZShsb2NhdGlvbiwgZG90LT5iYXNlKCksIGRvdC0+aWRlbnRpZmllcigpLCBl
eHByLCBleHBySGFzQXNzaWdubWVudHMsIGRvdC0+ZGl2b3QoKSwgc3RhcnQsIGVuZCk7CiAgICAg
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVDb25zdHJ1
Y3RvcnMuaAkocmV2aXNpb24gMTg4MTQ4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9Ob2RlQ29uc3RydWN0b3JzLmgJKHdvcmtpbmcgY29weSkKQEAgLTg4NCwxOCArODg0LDE4IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgRnVuY0V4cHJOb2Rl
OjpGdW5jRXhwck5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgSWRl
bnRpZmllciYgaWRlbnQsIEZ1bmN0aW9uQm9keU5vZGUqIGJvZHksIGNvbnN0IFNvdXJjZUNvZGUm
IHNvdXJjZSkKKyAgICBpbmxpbmUgRnVuY0V4cHJOb2RlOjpGdW5jRXhwck5vZGUoY29uc3QgSlNU
b2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIEZ1bmN0aW9u
TWV0YWRhdGFOb2RlKiBtX21ldGFkYXRhLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UpCiAgICAg
ICAgIDogRXhwcmVzc2lvbk5vZGUobG9jYXRpb24pCi0gICAgICAgICwgbV9ib2R5KGJvZHkpCisg
ICAgICAgICwgbV9tZXRhZGF0YShtX21ldGFkYXRhKQogICAgIHsKLSAgICAgICAgbV9ib2R5LT5m
aW5pc2hQYXJzaW5nKHNvdXJjZSwgaWRlbnQsIEZ1bmN0aW9uRXhwcmVzc2lvbik7CisgICAgICAg
IG1fbWV0YWRhdGEtPmZpbmlzaFBhcnNpbmcoc291cmNlLCBpZGVudCwgRnVuY3Rpb25FeHByZXNz
aW9uKTsKICAgICB9CiAKLSAgICBpbmxpbmUgRnVuY0RlY2xOb2RlOjpGdW5jRGVjbE5vZGUoY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIEZ1
bmN0aW9uQm9keU5vZGUqIGJvZHksIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSkKKyAgICBpbmxp
bmUgRnVuY0RlY2xOb2RlOjpGdW5jRGVjbE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2Nh
dGlvbiwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIEZ1bmN0aW9uTWV0YWRhdGFOb2RlKiBtX21l
dGFkYXRhLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UpCiAgICAgICAgIDogU3RhdGVtZW50Tm9k
ZShsb2NhdGlvbikKLSAgICAgICAgLCBtX2JvZHkoYm9keSkKKyAgICAgICAgLCBtX21ldGFkYXRh
KG1fbWV0YWRhdGEpCiAgICAgewotICAgICAgICBtX2JvZHktPmZpbmlzaFBhcnNpbmcoc291cmNl
LCBpZGVudCwgRnVuY3Rpb25EZWNsYXJhdGlvbik7CisgICAgICAgIG1fbWV0YWRhdGEtPmZpbmlz
aFBhcnNpbmcoc291cmNlLCBpZGVudCwgRnVuY3Rpb25EZWNsYXJhdGlvbik7CiAgICAgfQogCiAj
aWYgRU5BQkxFKEVTNl9DTEFTU19TWU5UQVgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL05vZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL05vZGVzLmNwcAkocmV2aXNpb24gMTg4MTQ4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9Ob2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NSwxNCArMTQ1LDE0IEBAIEV2
YWxOb2RlOjpFdmFsTm9kZShQYXJzZXJBcmVuYSYgcGFyc2VyQXIKIHsKIH0KIAotLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9uQm9keU5vZGUgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlv
bk1ldGFkYXRhTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1GdW5jdGlvbkJv
ZHlOb2RlOjpGdW5jdGlvbkJvZHlOb2RlKAorRnVuY3Rpb25NZXRhZGF0YU5vZGU6OkZ1bmN0aW9u
TWV0YWRhdGFOb2RlKAogICAgIFBhcnNlckFyZW5hJiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBz
dGFydExvY2F0aW9uLCAKICAgICBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZExvY2F0aW9uLCB1
bnNpZ25lZCBzdGFydENvbHVtbiwgdW5zaWduZWQgZW5kQ29sdW1uLCAKICAgICBpbnQgZnVuY3Rp
b25LZXl3b3JkU3RhcnQsIGludCBmdW5jdGlvbk5hbWVTdGFydCwgaW50IHBhcmFtZXRlcnNTdGFy
dCwgYm9vbCBpc0luU3RyaWN0Q29udGV4dCwgCiAgICAgQ29uc3RydWN0b3JLaW5kIGNvbnN0cnVj
dG9yS2luZCwgdW5zaWduZWQgcGFyYW1ldGVyQ291bnQsIEZ1bmN0aW9uUGFyc2VNb2RlIG1vZGUp
Ci0gICAgICAgIDogU3RhdGVtZW50Tm9kZShlbmRMb2NhdGlvbikKKyAgICAgICAgOiBOb2RlKGVu
ZExvY2F0aW9uKQogICAgICAgICAsIG1fc3RhcnRDb2x1bW4oc3RhcnRDb2x1bW4pCiAgICAgICAg
ICwgbV9lbmRDb2x1bW4oZW5kQ29sdW1uKQogICAgICAgICAsIG1fZnVuY3Rpb25LZXl3b3JkU3Rh
cnQoZnVuY3Rpb25LZXl3b3JkU3RhcnQpCkBAIC0xNjcsMTQgKzE2NywxNCBAQCBGdW5jdGlvbkJv
ZHlOb2RlOjpGdW5jdGlvbkJvZHlOb2RlKAogICAgIEFTU0VSVChtX2NvbnN0cnVjdG9yS2luZCA9
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY29uc3RydWN0b3JLaW5kKSk7CiB9CiAKLXZvaWQgRnVu
Y3Rpb25Cb2R5Tm9kZTo6ZmluaXNoUGFyc2luZyhjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIGNv
bnN0IElkZW50aWZpZXImIGlkZW50LCBlbnVtIEZ1bmN0aW9uTW9kZSBmdW5jdGlvbk1vZGUpCit2
b2lkIEZ1bmN0aW9uTWV0YWRhdGFOb2RlOjpmaW5pc2hQYXJzaW5nKGNvbnN0IFNvdXJjZUNvZGUm
IHNvdXJjZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGVudW0gRnVuY3Rpb25Nb2RlIGZ1bmN0
aW9uTW9kZSkKIHsKICAgICBtX3NvdXJjZSA9IHNvdXJjZTsKICAgICBtX2lkZW50ID0gaWRlbnQ7
CiAgICAgbV9mdW5jdGlvbk1vZGUgPSBmdW5jdGlvbk1vZGU7CiB9CiAKLXZvaWQgRnVuY3Rpb25C
b2R5Tm9kZTo6c2V0RW5kUG9zaXRpb24oSlNUZXh0UG9zaXRpb24gcG9zaXRpb24pCit2b2lkIEZ1
bmN0aW9uTWV0YWRhdGFOb2RlOjpzZXRFbmRQb3NpdGlvbihKU1RleHRQb3NpdGlvbiBwb3NpdGlv
bikKIHsKICAgICBtX2xhc3RMaW5lID0gcG9zaXRpb24ubGluZTsKICAgICBtX2VuZENvbHVtbiA9
IHBvc2l0aW9uLm9mZnNldCAtIHBvc2l0aW9uLmxpbmVTdGFydE9mZnNldDsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgJKHJldmlzaW9uIDE4ODE0OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEFyZ3VtZW50TGlzdE5vZGU7CiAgICAg
Y2xhc3MgQnl0ZWNvZGVHZW5lcmF0b3I7Ci0gICAgY2xhc3MgRnVuY3Rpb25Cb2R5Tm9kZTsKKyAg
ICBjbGFzcyBGdW5jdGlvbk1ldGFkYXRhTm9kZTsKICAgICBjbGFzcyBGdW5jdGlvblBhcmFtZXRl
cnM7CiAgICAgY2xhc3MgTGFiZWw7CiAgICAgY2xhc3MgUHJvcGVydHlMaXN0Tm9kZTsKQEAgLTgx
LDcgKzgxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgdHlwZWRlZiBIYXNoU2V0PFJlZlB0cjxV
bmlxdWVkU3RyaW5nSW1wbD4sIElkZW50aWZpZXJSZXBIYXNoPiBJZGVudGlmaWVyU2V0OwogCiAg
ICAgbmFtZXNwYWNlIERlY2xhcmF0aW9uU3RhY2tzIHsKLSAgICAgICAgdHlwZWRlZiBWZWN0b3I8
RnVuY3Rpb25Cb2R5Tm9kZSo+IEZ1bmN0aW9uU3RhY2s7CisgICAgICAgIHR5cGVkZWYgVmVjdG9y
PEZ1bmN0aW9uTWV0YWRhdGFOb2RlKj4gRnVuY3Rpb25TdGFjazsKICAgICB9CiAKICAgICBzdHJ1
Y3QgU3dpdGNoSW5mbyB7CkBAIC0xNzc5LDE4ICsxNzc5LDE2IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBib29sIG1faGFzRGVmYXVsdFBhcmFtZXRlclZhbHVlcyB7IGZhbHNlIH07CiAgICAg
fTsKIAotICAgIGNsYXNzIEZ1bmN0aW9uQm9keU5vZGUgZmluYWwgOiBwdWJsaWMgU3RhdGVtZW50
Tm9kZSwgcHVibGljIFBhcnNlckFyZW5hRGVsZXRhYmxlIHsKKyAgICBjbGFzcyBGdW5jdGlvbk1l
dGFkYXRhTm9kZSBmaW5hbCA6IHB1YmxpYyBOb2RlLCBwdWJsaWMgUGFyc2VyQXJlbmFEZWxldGFi
bGUgewogICAgIHB1YmxpYzoKICAgICAgICAgdXNpbmcgUGFyc2VyQXJlbmFEZWxldGFibGU6Om9w
ZXJhdG9yIG5ldzsKIAotICAgICAgICBGdW5jdGlvbkJvZHlOb2RlKAorICAgICAgICBGdW5jdGlv
bk1ldGFkYXRhTm9kZSgKICAgICAgICAgICAgIFBhcnNlckFyZW5hJiwgY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmQsIAogICAgICAgICAgICAg
dW5zaWduZWQgc3RhcnRDb2x1bW4sIHVuc2lnbmVkIGVuZENvbHVtbiwgaW50IGZ1bmN0aW9uS2V5
d29yZFN0YXJ0LCAKICAgICAgICAgICAgIGludCBmdW5jdGlvbk5hbWVTdGFydCwgaW50IHBhcmFt
ZXRlcnNTdGFydCwgYm9vbCBpc0luU3RyaWN0Q29udGV4dCwgCiAgICAgICAgICAgICBDb25zdHJ1
Y3RvcktpbmQsIHVuc2lnbmVkLCBGdW5jdGlvblBhcnNlTW9kZSk7CiAKLSAgICAgICAgdmlydHVh
bCB2b2lkIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkg
b3ZlcnJpZGU7Ci0KICAgICAgICAgdm9pZCBmaW5pc2hQYXJzaW5nKGNvbnN0IFNvdXJjZUNvZGUm
LCBjb25zdCBJZGVudGlmaWVyJiwgRnVuY3Rpb25Nb2RlKTsKICAgICAgICAgCiAgICAgICAgIHZv
aWQgb3ZlcnJpZGVOYW1lKGNvbnN0IElkZW50aWZpZXImIGlkZW50KSB7IG1faWRlbnQgPSBpZGVu
dDsgfQpAQCAtMTgxNiw2ICsxODE0LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29s
IGlzSW5TdHJpY3RDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9pc0luU3RyaWN0Q29udGV4dDsg
fQogICAgICAgICBDb25zdHJ1Y3RvcktpbmQgY29uc3RydWN0b3JLaW5kKCkgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8Q29uc3RydWN0b3JLaW5kPihtX2NvbnN0cnVjdG9yS2luZCk7IH0KIAorICAgICAg
ICB2b2lkIHNldExvYyh1bnNpZ25lZCBmaXJzdExpbmUsIHVuc2lnbmVkIGxhc3RMaW5lLCBpbnQg
c3RhcnRPZmZzZXQsIGludCBsaW5lU3RhcnRPZmZzZXQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IG1fbGFzdExpbmUgPSBsYXN0TGluZTsKKyAgICAgICAgICAgIG1fcG9zaXRpb24gPSBKU1RleHRQ
b3NpdGlvbihmaXJzdExpbmUsIHN0YXJ0T2Zmc2V0LCBsaW5lU3RhcnRPZmZzZXQpOworICAgICAg
ICAgICAgQVNTRVJUKG1fcG9zaXRpb24ub2Zmc2V0ID49IG1fcG9zaXRpb24ubGluZVN0YXJ0T2Zm
c2V0KTsKKyAgICAgICAgfQorICAgICAgICB1bnNpZ25lZCBsYXN0TGluZSgpIGNvbnN0IHsgcmV0
dXJuIG1fbGFzdExpbmU7IH0KKwogICAgIHByb3RlY3RlZDoKICAgICAgICAgSWRlbnRpZmllciBt
X2lkZW50OwogICAgICAgICBJZGVudGlmaWVyIG1faW5mZXJyZWROYW1lOwpAQCAtMTgyOCw2ICsx
ODM0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFNvdXJjZUNvZGUgbV9zb3VyY2U7CiAg
ICAgICAgIGludCBtX3N0YXJ0U3RhcnRPZmZzZXQ7CiAgICAgICAgIHVuc2lnbmVkIG1fcGFyYW1l
dGVyQ291bnQ7CisgICAgICAgIGludCBtX2xhc3RMaW5lOwogICAgICAgICBGdW5jdGlvblBhcnNl
TW9kZSBtX3BhcnNlTW9kZTsKICAgICAgICAgdW5zaWduZWQgbV9pc0luU3RyaWN0Q29udGV4dCA6
IDE7CiAgICAgICAgIHVuc2lnbmVkIG1fY29uc3RydWN0b3JLaW5kIDogMjsKQEAgLTE4NjIsMTYg
KzE4NjksMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBGdW5jRXhwck5vZGUgOiBw
dWJsaWMgRXhwcmVzc2lvbk5vZGUgewogICAgIHB1YmxpYzoKLSAgICAgICAgRnVuY0V4cHJOb2Rl
KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50aWZpZXImLCBGdW5jdGlvbkJvZHlO
b2RlKiwgY29uc3QgU291cmNlQ29kZSYpOworICAgICAgICBGdW5jRXhwck5vZGUoY29uc3QgSlNU
b2tlbkxvY2F0aW9uJiwgY29uc3QgSWRlbnRpZmllciYsIEZ1bmN0aW9uTWV0YWRhdGFOb2RlKiwg
Y29uc3QgU291cmNlQ29kZSYpOwogCi0gICAgICAgIEZ1bmN0aW9uQm9keU5vZGUqIGJvZHkoKSB7
IHJldHVybiBtX2JvZHk7IH0KKyAgICAgICAgRnVuY3Rpb25NZXRhZGF0YU5vZGUqIG1ldGFkYXRh
KCkgeyByZXR1cm4gbV9tZXRhZGF0YTsgfQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVh
bCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklE
KiA9IDApIG92ZXJyaWRlOwogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0Z1bmNFeHByTm9kZSgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAotICAgICAgICBGdW5jdGlvbkJvZHlO
b2RlKiBtX2JvZHk7CisgICAgICAgIEZ1bmN0aW9uTWV0YWRhdGFOb2RlKiBtX21ldGFkYXRhOwog
ICAgIH07CiAKICNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKQEAgLTE5OTcsMTUgKzIwMDQs
MTUgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBGdW5jRGVjbE5vZGUgOiBwdWJsaWMg
U3RhdGVtZW50Tm9kZSB7CiAgICAgcHVibGljOgotICAgICAgICBGdW5jRGVjbE5vZGUoY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSWRlbnRpZmllciYsIEZ1bmN0aW9uQm9keU5vZGUqLCBj
b25zdCBTb3VyY2VDb2RlJik7CisgICAgICAgIEZ1bmNEZWNsTm9kZShjb25zdCBKU1Rva2VuTG9j
YXRpb24mLCBjb25zdCBJZGVudGlmaWVyJiwgRnVuY3Rpb25NZXRhZGF0YU5vZGUqLCBjb25zdCBT
b3VyY2VDb2RlJik7CiAKICAgICAgICAgdmlydHVhbCBib29sIGlzRnVuY0RlY2xOb2RlKCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotICAgICAgICBGdW5jdGlvbkJvZHlOb2RlKiBi
b2R5KCkgeyByZXR1cm4gbV9ib2R5OyB9CisgICAgICAgIEZ1bmN0aW9uTWV0YWRhdGFOb2RlKiBt
ZXRhZGF0YSgpIHsgcmV0dXJuIG1fbWV0YWRhdGE7IH0KIAogICAgIHByaXZhdGU6CiAgICAgICAg
IHZpcnR1YWwgdm9pZCBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklE
KiA9IDApIG92ZXJyaWRlOwogCi0gICAgICAgIEZ1bmN0aW9uQm9keU5vZGUqIG1fYm9keTsKKyAg
ICAgICAgRnVuY3Rpb25NZXRhZGF0YU5vZGUqIG1fbWV0YWRhdGE7CiAgICAgfTsKIAogI2lmIEVO
QUJMRShFUzZfQ0xBU1NfU1lOVEFYKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9QYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
UGFyc2VyLmNwcAkocmV2aXNpb24gMTg4MTQ4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9QYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTM2LDcgKzE1MzYsNyBAQCB0ZW1w
bGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVGdW5jdGlvCiAgICAgICAgIG5leHQoKTsKICAg
ICAgICAgaWYgKG1hdGNoKENMT1NFQlJBQ0UpKSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBlbmRD
b2x1bW4gPSB0b2tlbkNvbHVtbigpOwotICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRl
RnVuY3Rpb25Cb2R5KHN0YXJ0TG9jYXRpb24sIHRva2VuTG9jYXRpb24oKSwgc3RhcnRDb2x1bW4s
IGVuZENvbHVtbiwgZnVuY3Rpb25LZXl3b3JkU3RhcnQsIGZ1bmN0aW9uTmFtZVN0YXJ0LCBwYXJh
bWV0ZXJzU3RhcnQsIHN0cmljdE1vZGUoKSwgY29uc3RydWN0b3JLaW5kLCBwYXJhbWV0ZXJDb3Vu
dCwgcGFyc2VNb2RlKTsKKyAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUZ1bmN0aW9u
TWV0YWRhdGEoc3RhcnRMb2NhdGlvbiwgdG9rZW5Mb2NhdGlvbigpLCBzdGFydENvbHVtbiwgZW5k
Q29sdW1uLCBmdW5jdGlvbktleXdvcmRTdGFydCwgZnVuY3Rpb25OYW1lU3RhcnQsIHBhcmFtZXRl
cnNTdGFydCwgc3RyaWN0TW9kZSgpLCBjb25zdHJ1Y3RvcktpbmQsIHBhcmFtZXRlckNvdW50LCBw
YXJzZU1vZGUpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xNTQ4LDcgKzE1NDgsNyBAQCB0ZW1w
bGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVGdW5jdGlvCiAgICAgZWxzZQogICAgICAgICBm
YWlsSWZGYWxzZShwYXJzZVNvdXJjZUVsZW1lbnRzKHN5bnRheENoZWNrZXIsIENoZWNrRm9yU3Ry
aWN0TW9kZSksIGJvZHlUeXBlID09IFN0YW5kYXJkRnVuY3Rpb25Cb2R5QmxvY2sgPyAiQ2Fubm90
IHBhcnNlIGJvZHkgb2YgdGhpcyBmdW5jdGlvbiIgOiAiQ2Fubm90IHBhcnNlIGJvZHkgb2YgdGhp
cyBhcnJvdyBmdW5jdGlvbiIpOwogICAgIHVuc2lnbmVkIGVuZENvbHVtbiA9IHRva2VuQ29sdW1u
KCk7Ci0gICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlRnVuY3Rpb25Cb2R5KHN0YXJ0TG9jYXRpb24s
IHRva2VuTG9jYXRpb24oKSwgc3RhcnRDb2x1bW4sIGVuZENvbHVtbiwgZnVuY3Rpb25LZXl3b3Jk
U3RhcnQsIGZ1bmN0aW9uTmFtZVN0YXJ0LCBwYXJhbWV0ZXJzU3RhcnQsIHN0cmljdE1vZGUoKSwg
Y29uc3RydWN0b3JLaW5kLCBwYXJhbWV0ZXJDb3VudCwgcGFyc2VNb2RlKTsKKyAgICByZXR1cm4g
Y29udGV4dC5jcmVhdGVGdW5jdGlvbk1ldGFkYXRhKHN0YXJ0TG9jYXRpb24sIHRva2VuTG9jYXRp
b24oKSwgc3RhcnRDb2x1bW4sIGVuZENvbHVtbiwgZnVuY3Rpb25LZXl3b3JkU3RhcnQsIGZ1bmN0
aW9uTmFtZVN0YXJ0LCBwYXJhbWV0ZXJzU3RhcnQsIHN0cmljdE1vZGUoKSwgY29uc3RydWN0b3JL
aW5kLCBwYXJhbWV0ZXJDb3VudCwgcGFyc2VNb2RlKTsKIH0KIAogc3RhdGljIGNvbnN0IGNoYXIq
IHN0cmluZ0ZvckZ1bmN0aW9uTW9kZShGdW5jdGlvblBhcnNlTW9kZSBtb2RlKQpAQCAtMTc0MSw3
ICsxNzQxLDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBib29sIFBhcnNlcgogICAg
ICAgICAgICAgZW5kTG9jYXRpb24uc3RhcnRPZmZzZXQgLSBlbmRMb2NhdGlvbi5saW5lU3RhcnRP
ZmZzZXQ7CiAgICAgICAgIHVuc2lnbmVkIGN1cnJlbnRMaW5lU3RhcnRPZmZzZXQgPSBtX3Rva2Vu
Lm1fbG9jYXRpb24ubGluZVN0YXJ0T2Zmc2V0OwogCi0gICAgICAgIGZ1bmN0aW9uSW5mby5ib2R5
ID0gY29udGV4dC5jcmVhdGVGdW5jdGlvbkJvZHkoCisgICAgICAgIGZ1bmN0aW9uSW5mby5ib2R5
ID0gY29udGV4dC5jcmVhdGVGdW5jdGlvbk1ldGFkYXRhKAogICAgICAgICAgICAgc3RhcnRMb2Nh
dGlvbiwgZW5kTG9jYXRpb24sIGZ1bmN0aW9uSW5mby5ib2R5U3RhcnRDb2x1bW4sIGJvZHlFbmRD
b2x1bW4sIAogICAgICAgICAgICAgZnVuY3Rpb25LZXl3b3JkU3RhcnQsIGZ1bmN0aW9uTmFtZVN0
YXJ0LCBwYXJhbWV0ZXJzU3RhcnQsIAogICAgICAgICAgICAgY2FjaGVkSW5mby0+c3RyaWN0TW9k
ZSwgY29uc3RydWN0b3JLaW5kLCBjYWNoZWRJbmZvLT5wYXJhbWV0ZXJDb3VudCwgbW9kZSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgJKHJldmlzaW9uIDE4ODE0OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTUzLDcgKzUzLDcgQEAgdGVtcGxhdGUgPD4gc3RydWN0IFZlY3RvclRyYWl0czxKU0M6OlNj
bwogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEV4ZWNTdGF0ZTsKLWNsYXNzIEZ1bmN0aW9uQm9k
eU5vZGU7CitjbGFzcyBGdW5jdGlvbk1ldGFkYXRhTm9kZTsKIGNsYXNzIEZ1bmN0aW9uUGFyYW1l
dGVyczsKIGNsYXNzIElkZW50aWZpZXI7CiBjbGFzcyBWTTsKQEAgLTgzOCw4ICs4MzgsOCBAQCBw
cml2YXRlOgogICAgIHZvaWQgZGlkRmluaXNoUGFyc2luZyhTb3VyY2VFbGVtZW50cyosIERlY2xh
cmF0aW9uU3RhY2tzOjpGdW5jdGlvblN0YWNrJiwgVmFyaWFibGVFbnZpcm9ubWVudCYsIENvZGVG
ZWF0dXJlcywgaW50LCBjb25zdCBWZWN0b3I8UmVmUHRyPFVuaXF1ZWRTdHJpbmdJbXBsPj4mJik7
CiAKICAgICAvLyBVc2VkIHRvIGRldGVybWluZSB0eXBlIG9mIGVycm9yIHRvIHJlcG9ydC4KLSAg
ICBib29sIGlzRnVuY3Rpb25Cb2R5Tm9kZShTY29wZU5vZGUqKSB7IHJldHVybiBmYWxzZTsgfQot
ICAgIGJvb2wgaXNGdW5jdGlvbkJvZHlOb2RlKEZ1bmN0aW9uQm9keU5vZGUqKSB7IHJldHVybiB0
cnVlOyB9CisgICAgYm9vbCBpc0Z1bmN0aW9uTWV0YWRhdGFOb2RlKFNjb3BlTm9kZSopIHsgcmV0
dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc0Z1bmN0aW9uTWV0YWRhdGFOb2RlKEZ1bmN0aW9uTWV0
YWRhdGFOb2RlKikgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgQUxXQVlTX0lOTElORSB2b2lkIG5l
eHQodW5zaWduZWQgbGV4ZXJGbGFncyA9IDApCiAgICAgewpAQCAtMTMxNSw3ICsxMzE1LDcgQEAg
c3RkOjp1bmlxdWVfcHRyPFBhcnNlZE5vZGU+IFBhcnNlcjxMZXhlcgogICAgICAgICAvLyB3ZSBy
YW4gb3V0IG9mIHN0YWNrIHdoaWxlIHBhcnNpbmcuIElmIHdlIHNlZSBhbiBlcnJvciB3aGlsZSBw
YXJzaW5nIGV2YWwgb3IgcHJvZ3JhbQogICAgICAgICAvLyBjb2RlIHdlIGFzc3VtZSB0aGF0IGl0
IHdhcyBhIHN5bnRheCBlcnJvciBzaW5jZSBydW5uaW5nIG91dCBvZiBzdGFjayBpcyBtdWNoIGxl
c3MKICAgICAgICAgLy8gbGlrZWx5LCBhbmQgd2UgYXJlIGN1cnJlbnRseSB1bmFibGUgdG8gZGlz
dGluZ3Vpc2ggYmV0d2VlbiB0aGUgdHdvIGNhc2VzLgotICAgICAgICBpZiAoaXNGdW5jdGlvbkJv
ZHlOb2RlKHN0YXRpY19jYXN0PFBhcnNlZE5vZGUqPigwKSkgfHwgbV9oYXNTdGFja092ZXJmbG93
KQorICAgICAgICBpZiAoaXNGdW5jdGlvbk1ldGFkYXRhTm9kZShzdGF0aWNfY2FzdDxQYXJzZWRO
b2RlKj4oMCkpIHx8IG1faGFzU3RhY2tPdmVyZmxvdykKICAgICAgICAgICAgIGVycm9yID0gUGFy
c2VyRXJyb3IoUGFyc2VyRXJyb3I6OlN0YWNrT3ZlcmZsb3csIFBhcnNlckVycm9yOjpTeW50YXhF
cnJvck5vbmUsIG1fdG9rZW4pOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIFBhcnNlckVy
cm9yOjpTeW50YXhFcnJvclR5cGUgZXJyb3JUeXBlID0gUGFyc2VyRXJyb3I6OlN5bnRheEVycm9y
SXJyZWNvdmVyYWJsZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU3ludGF4
Q2hlY2tlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU3lu
dGF4Q2hlY2tlci5oCShyZXZpc2lvbiAxODgxNDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL1N5bnRheENoZWNrZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTg2LDcgKzE4Niw3IEBA
IHB1YmxpYzoKICAgICBDbGFzc0V4cHJlc3Npb24gY3JlYXRlQ2xhc3NFeHByKGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50aWZpZXImLCBFeHByZXNzaW9uVHlwZSwgRXhwcmVzc2lv
blR5cGUsIFByb3BlcnR5TGlzdCwgUHJvcGVydHlMaXN0KSB7IHJldHVybiBDbGFzc0V4cHI7IH0K
ICNlbmRpZgogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZUZ1bmN0aW9uRXhwcihjb25zdCBKU1Rv
a2VuTG9jYXRpb24mLCBjb25zdCBQYXJzZXJGdW5jdGlvbkluZm88U3ludGF4Q2hlY2tlcj4mKSB7
IHJldHVybiBGdW5jdGlvbkV4cHI7IH0KLSAgICBpbnQgY3JlYXRlRnVuY3Rpb25Cb2R5KGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwgaW50LCBib29s
LCBpbnQsIGludCwgaW50LCBDb25zdHJ1Y3RvcktpbmQsIHVuc2lnbmVkLCBpbnQpIHsgcmV0dXJu
IEZ1bmN0aW9uQm9keVJlc3VsdDsgfQorICAgIGludCBjcmVhdGVGdW5jdGlvbk1ldGFkYXRhKGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwgaW50LCBi
b29sLCBpbnQsIGludCwgaW50LCBDb25zdHJ1Y3RvcktpbmQsIHVuc2lnbmVkLCBpbnQpIHsgcmV0
dXJuIEZ1bmN0aW9uQm9keVJlc3VsdDsgfQogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZUFycm93
RnVuY3Rpb25FeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IFBhcnNlckZ1bmN0aW9u
SW5mbzxTeW50YXhDaGVja2VyPiYpIHsgcmV0dXJuIEZ1bmN0aW9uRXhwcjsgfQogICAgIHZvaWQg
c2V0RnVuY3Rpb25OYW1lU3RhcnQoaW50LCBpbnQpIHsgfQogICAgIGludCBjcmVhdGVBcmd1bWVu
dHMoKSB7IHJldHVybiBBcmd1bWVudHNSZXN1bHQ7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmNwcAkocmV2aXNpb24gMTg4MTQ4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTY2LDE1ICsxNjYsMTUgQEAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIENvZGVDYWNoZTo6
ZwogICAgIGlmICghZnVuY0RlY2wgfHwgIWZ1bmNEZWNsLT5pc0Z1bmNEZWNsTm9kZSgpKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIEZ1bmN0aW9uQm9keU5vZGUqIGJvZHkgPSBzdGF0
aWNfY2FzdDxGdW5jRGVjbE5vZGUqPihmdW5jRGVjbCktPmJvZHkoKTsKLSAgICBBU1NFUlQoYm9k
eSk7Ci0gICAgaWYgKCFib2R5KQorICAgIEZ1bmN0aW9uTWV0YWRhdGFOb2RlKiBtZXRhZGF0YSA9
IHN0YXRpY19jYXN0PEZ1bmNEZWNsTm9kZSo+KGZ1bmNEZWNsKS0+bWV0YWRhdGEoKTsKKyAgICBB
U1NFUlQobWV0YWRhdGEpOworICAgIGlmICghbWV0YWRhdGEpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIAotICAgIGJvZHktPnNldEVuZFBvc2l0aW9uKHBvc2l0aW9uQmVmb3JlTGFzdE5l
d2xpbmUpOworICAgIG1ldGFkYXRhLT5zZXRFbmRQb3NpdGlvbihwb3NpdGlvbkJlZm9yZUxhc3RO
ZXdsaW5lKTsKICAgICAvLyBUaGUgRnVuY3Rpb24gY29uc3RydWN0b3Igb25seSBoYXMgYWNjZXNz
IHRvIGdsb2JhbCB2YXJpYWJsZXMsIHNvIG5vIHZhcmlhYmxlcyB3aWxsIGJlIHVuZGVyIFREWi4K
ICAgICBWYXJpYWJsZUVudmlyb25tZW50IGVtcHR5VERaVmFyaWFibGVzOwotICAgIFVubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBVbmxpbmtlZEZ1bmN0aW9u
RXhlY3V0YWJsZTo6Y3JlYXRlKCZ2bSwgc291cmNlLCBib2R5LCBVbmxpbmtlZE5vcm1hbEZ1bmN0
aW9uLCBDb25zdHJ1Y3RBYmlsaXR5OjpDYW5Db25zdHJ1Y3QsIGVtcHR5VERaVmFyaWFibGVzKTsK
KyAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gVW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZSgmdm0sIHNvdXJjZSwgbWV0YWRhdGEsIFVu
bGlua2VkTm9ybWFsRnVuY3Rpb24sIENvbnN0cnVjdEFiaWxpdHk6OkNhbkNvbnN0cnVjdCwgZW1w
dHlURFpWYXJpYWJsZXMpOwogICAgIGZ1bmN0aW9uRXhlY3V0YWJsZS0+bV9uYW1lVmFsdWUuc2V0
KHZtLCBmdW5jdGlvbkV4ZWN1dGFibGUsIGpzU3RyaW5nKCZ2bSwgbmFtZS5zdHJpbmcoKSkpOwog
CiAgICAgbV9zb3VyY2VDb2RlLmFkZENhY2hlKGtleSwgU291cmNlQ29kZVZhbHVlKHZtLCBmdW5j
dGlvbkV4ZWN1dGFibGUsIG1fc291cmNlQ29kZS5hZ2UoKSkpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmgJKHJldmlzaW9uIDE4ODE0OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00
MCw3ICs0MCw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgRXZhbEV4ZWN1dGFibGU7Ci1j
bGFzcyBGdW5jdGlvbkJvZHlOb2RlOworY2xhc3MgRnVuY3Rpb25NZXRhZGF0YU5vZGU7CiBjbGFz
cyBJZGVudGlmaWVyOwogY2xhc3MgSlNTY29wZTsKIGNsYXNzIFBhcnNlckVycm9yOwo=
</data>
<flag name="review"
          id="283705"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
          </attachment>
      

    </bug>

</bugzilla>