<?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>95659</bug_id>
          
          <creation_ts>2012-09-02 15:11:02 -0700</creation_ts>
          <short_desc>Named functions should not allocate a scope object for their names</short_desc>
          <delta_ts>2012-10-11 12:14:16 -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>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>
          <dependson>95944</dependson>
    
    <dependson>96065</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Geoffrey Garen">ggaren</reporter>
          <assigned_to name="Geoffrey Garen">ggaren</assigned_to>
          <cc>ctruta</cc>
    
    <cc>ossy</cc>
    
    <cc>yong.li.webkit</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>710358</commentid>
    <comment_count>0</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-09-02 15:11:02 -0700</bug_when>
    <thetext>Named functions should not allocate a scope object for their names</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>710359</commentid>
    <comment_count>1</comment_count>
      <attachid>161850</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-09-02 15:56:10 -0700</bug_when>
    <thetext>Created attachment 161850
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>710384</commentid>
    <comment_count>2</comment_count>
      <attachid>161850</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2012-09-02 20:08:51 -0700</bug_when>
    <thetext>Comment on attachment 161850
Patch

Wow, strict mode actually allowing us to be faster in some cases???? :D</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>710733</commentid>
    <comment_count>3</comment_count>
      <attachid>161850</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-09-03 11:47:19 -0700</bug_when>
    <thetext>Comment on attachment 161850
Patch

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

&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:592
&gt; +        emitOpcode(op_push_name_scope);

What if the function already shadows the function name? - doesn&apos;t this push scoped var override the function&apos;s scope? doesn&apos;t this invert the function name &amp; a var defined within the function? – looking through your test cases, I&apos;m guessing the answer is no, or else I don&apos;t think
    (function closure() { eval(&quot;var closure;&quot;); closure = 1; return closure == 1 &amp;&amp; !this.closure; })()
would work, but I haven&apos;t yet worked out why. :-)  Might be worth adding something like:
   javascript:(function foo(){ var foo = 42; eval(&quot; with({}) { alert(foo); } &quot;); })()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>711632</commentid>
    <comment_count>4</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-09-04 18:19:15 -0700</bug_when>
    <thetext>&gt; doesn&apos;t this invert the function name &amp; a var defined within the function?

Good question -- I got this wrong in an initial version of the patch. Because we push the name scope *before* we push the activation scope, vars in the activation take precedence over the name in the name scope.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>712863</commentid>
    <comment_count>5</comment_count>
      <attachid>162413</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-09-05 21:54:02 -0700</bug_when>
    <thetext>Created attachment 162413
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>712865</commentid>
    <comment_count>6</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-09-05 21:54:43 -0700</bug_when>
    <thetext>Old patch had a bug with constructed named functions (demonstrated by DOM attribute event listeners).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>712917</commentid>
    <comment_count>7</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-09-05 23:17:26 -0700</bug_when>
    <thetext>Committed r127698: &lt;http://trac.webkit.org/changeset/127698&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>712989</commentid>
    <comment_count>8</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-09-06 00:55:16 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Committed r127698: &lt;http://trac.webkit.org/changeset/127698&gt;

It caused a regression - https://bugs.webkit.org/show_bug.cgi?id=95944
Could you check it, please?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713587</commentid>
    <comment_count>9</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-09-06 12:46:04 -0700</bug_when>
    <thetext>Rolled out in &lt;http://trac.webkit.org/changeset/127774&gt; because it broke
fast/dom/HTMLScriptElement/script-reexecution-pretty-diff.html.

Attribute event listeners assume they can blow away a function&apos;s scope chain after the function has been created. Have to think about how to fix this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713986</commentid>
    <comment_count>10</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-09-06 18:42:20 -0700</bug_when>
    <thetext>Committed r127810: &lt;http://trac.webkit.org/changeset/127810&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>714087</commentid>
    <comment_count>11</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-09-06 21:51:18 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; Committed r127810: &lt;http://trac.webkit.org/changeset/127810&gt;

One more confusion: https://bugs.webkit.org/show_bug.cgi?id=96065
Could you check it, please?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>740000</commentid>
    <comment_count>12</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2012-10-11 08:37:23 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; Committed r127810: &lt;http://trac.webkit.org/changeset/127810&gt;

It seems this commit broke Octane pdf.js test. It ends up with either crashes (in DFG::optionValueAdd(), where op1 has CellTag but 0 payload) or freezes. Issue disappears once this commit is reverted. Idea?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>740075</commentid>
    <comment_count>13</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-10-11 09:58:00 -0700</bug_when>
    <thetext>&gt; It seems this commit broke Octane pdf.js test.

On what platform?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>740080</commentid>
    <comment_count>14</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2012-10-11 10:06:57 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; &gt; It seems this commit broke Octane pdf.js test.
&gt; 
&gt; On what platform?

On QNX, ARMv7, DFG JIT. Seems classic JIT works well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>740166</commentid>
    <comment_count>15</comment_count>
    <who name="Cosmin Truta">ctruta</who>
    <bug_when>2012-10-11 12:14:16 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (In reply to comment #13)
&gt; &gt; &gt; It seems this commit broke Octane pdf.js test.
&gt; &gt; 
&gt; &gt; On what platform?
&gt; 
&gt; On QNX, ARMv7, DFG JIT. Seems classic JIT works well.

In case this may be of help: sometimes it also assert-fails at
JSC::DFG::RegisterBank&lt;JSC::DFG::GPRInfo&gt;::retain
(this=0x77dfc4a0, reg=JSC::ARMRegisters::r2, name=4, spillOrder=5) at
Source/JavaScriptCore/dfg/DFGRegisterBank.h:187
    // &apos;index&apos; should not currently be named, the new name must be valid.
    ASSERT(m_data[index].name == InvalidVirtualRegister);</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>161850</attachid>
            <date>2012-09-02 15:56:10 -0700</date>
            <delta_ts>2012-09-05 21:53:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-95659-20120902155559.patch</filename>
            <type>text/plain</type>
            <size>33347</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTI3MzkzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgxIEBA
CisyMDEyLTA5LTAyICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAg
ICAgTmFtZWQgZnVuY3Rpb25zIHNob3VsZCBub3QgYWxsb2NhdGUgc2NvcGUgb2JqZWN0cyBmb3Ig
dGhlaXIgbmFtZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTk1NjU5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgSW4gbW9zdCBjYXNlcywgd2UgY2FuIG1lcmdlIGEgZnVuY3Rpb24gZXhwcmVzc2lvbidzIG5h
bWUgaW50byBpdHMgc3ltYm9sCisgICAgICAgIHRhYmxlLiBUaGlzIHJlZHVjZXMgbWVtb3J5IGZv
b3RwcmludCBwZXIgY2xvc3VyZSBmcm9tIHRocmVlIG9iamVjdHMKKyAgICAgICAgKGZ1bmN0aW9u
ICsgYWN0aXZhdGlvbiArIG5hbWUgc2NvcGUpIHRvIHR3byAoZnVuY3Rpb24gKyBhY3RpdmF0aW9u
KSwKKyAgICAgICAgc3BlZWRzIHVwIGNsb3N1cmUgYWxsb2NhdGlvbiwgYW5kIHNwZWVkcyB1cCBy
ZWN1cnNpdmUgY2FsbHMuCisKKyAgICAgICAgSW4gdGhlIGNhc2Ugb2YgYSBuYW1lZCBmdW5jdGlv
biBleHByZXNzaW9uIHRoYXQgY29udGFpbnMgYSBub24tc3RyaWN0CisgICAgICAgIGV2YWwsIHRo
ZSBydWxlcyBhcmUgc28gYmF0LXBvb3AgY3JhenkgdGhhdCBJIGRvbid0IGtub3cgaG93IHRvIG1v
ZGVsCisgICAgICAgIHRoZW0gd2l0aG91dCBhbiBleHRyYSBvYmplY3QuIFNpbmNlIGZ1bmN0aW9u
cyBub3cgZGVmYXVsdCB0byBub3QgaGF2aW5nCisgICAgICAgIHN1Y2ggYW4gb2JqZWN0LCB0aGlz
IGNhc2UgbmVlZHMgdG8gYWxsb2NhdGUgdGhlIG9iamVjdCBvbiBmdW5jdGlvbgorICAgICAgICBl
bnRyeS4KKworICAgICAgICBUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggbWFrZXMgdGhlIHNsb3cgY2Fz
ZSBhIGJpdCBzbG93ZXIgc28gdGhlIGZhc3QgY2FzZQorICAgICAgICBjYW4gYmUgZmFzdGVyIGFu
ZCBtb3JlIG1lbW9yeS1lZmZpY2llbnQuIChOb3RlIHRoYXQgdGhlIHNsb3cgY2FzZSBhbHJlYWR5
CisgICAgICAgIGFsbG9jYXRlcyBhbiBhY3RpdmF0aW9uIG9uIGVudHJ5LCBhbmQgdW50aWwgcmVj
ZW50bHkgYWxzbyBhbGxvY2F0ZWQgYQorICAgICAgICBzY29wZSBjaGFpbiBub2RlIG9uIGVudHJ5
LCBzbyBhZGRpbmcgb25lIGFsbG9jYXRpb24gb24gZW50cnkgc2hvdWxkbid0CisgICAgICAgIGJy
ZWFrIHRoZSBiYW5rLikKKworICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6Q29kZUJsb2NrKTogQ2F1Z2h0IGEgbWlzc2VkIGluaXRpYWxp
emVyLiBObyBiZWhhdmlvciBjaGFuZ2UuCisKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNv
ZGVHZW5lcmF0b3IpOiBQdXQgdGhlIGNhbGxlZSBpbiBzdGF0aWMgc2NvcGUKKyAgICAgICAgZHVy
aW5nIGNvbXBpbGF0aW9uIHNvIGl0IGRvZXNuJ3QgbmVlZCB0byBiZSBpbiBkeW5hbWljIHNjb3Bl
IGF0IHJ1bnRpbWUuCisKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnJlc29sdmVD
YWxsZWUpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6YWRkQ2FsbGVlKTogSGVs
cGVyIGZ1bmN0aW9ucyBmb3IgZWl0aGVyIHN0YXRpY2FsbHkKKyAgICAgICAgcmVzb2x2aW5nIHRo
ZSBjYWxsZWUgb3IgYWRkaW5nIGEgZHluYW1pYyBzY29wZSB0aGF0IHdpbGwgcmVzb2x2ZSB0byBp
dCwKKyAgICAgICAgZGVwZW5kaW5nIG9uIHdoZXRoZXIgeW91J3JlIGluIHRoZSBmYXN0IHBhdGgu
CisKKyAgICAgICAgV2UgbW92ZSB0aGUgY2FsbGVlIGludG8gYSB2YXIgbG9jYXRpb24gaWYgaXQn
cyBjYXB0dXJlZCBiZWNhdXNlIGFjdGl2YXRpb25zCisgICAgICAgIHByZWZlciB0byBoYXZlIGNv
bnRpZ3VvdXMgcmFuZ2VzIG9mIGNhcHR1cmVkIHZhcmlhYmxlcy4KKworICAgICAgICAqIGJ5dGVj
b21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVy
YXRvcjo6cmVnaXN0ZXJGb3IpOgorICAgICAgICAoQnl0ZWNvZGVHZW5lcmF0b3IpOgorICAgICAg
ICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVQYXJzZXI6OmdldERpcmVjdCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6
OmdldENhbGxlZSk6CisgICAgICAgIChCeXRlQ29kZVBhcnNlcik6IEFkZGVkIHN1cHBvcnQgZm9y
IGEgbmVnYXRpdmVseSBpbmRleGVkIG9wZXJhbmQgdGhhdCBpcworICAgICAgICBub3QgYW4gYXJn
dW1lbnQuIFdlIG5lZWQgdGhpcyBmb3IgdGhlIGNhbGxlZSwgc2luY2UgaXQncyBsb2NhdGVkIGlu
IHRoZSBjYWxsCisgICAgICAgIGZyYW1lIGhlYWRlci4KKworICAgICAgICAqIGRmZy9ERkdPcGVy
YXRpb25zLmNwcDoKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAg
ICAgIChKU0M6OkludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZSk6CisgICAgICAgICogaml0L0pJ
VFN0dWJzLmNwcDoKKyAgICAgICAgKEpTQzo6REVGSU5FX1NUVUJfRlVOQ1RJT04pOgorICAgICAg
ICAqIGxsaW50L0xMSW50U2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OkxMSU5U
X1NMT1dfUEFUSF9ERUNMKTogVGhpcyBpcyB0aGUgcG9pbnQgb2YgdGhlIHBhdGNoOiByZW1vdmUK
KyAgICAgICAgb25lIGFsbG9jYXRpb24gaW4gdGhlIGNhc2Ugb2YgYSBuYW1lZCBmdW5jdGlvbiBl
eHByZXNzaW9uLgorCisgICAgICAgICogcGFyc2VyL1BhcnNlci5jcHA6CisgICAgICAgIChKU0M6
Ojo6UGFyc2VyKToKKyAgICAgICAgKiBwYXJzZXIvUGFyc2VyLmg6CisgICAgICAgIChKU0M6OlNj
b3BlOjpkZWNsYXJlQ2FsbGVlKToKKyAgICAgICAgKFNjb3BlKToKKyAgICAgICAgKFBhcnNlcik6
CisgICAgICAgIChKU0M6OnBhcnNlKToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuY3Bw
OgorICAgICAgICAoSlNDOjpFdmFsRXhlY3V0YWJsZTo6Y29tcGlsZUludGVybmFsKToKKyAgICAg
ICAgKEpTQzo6UHJvZ3JhbUV4ZWN1dGFibGU6OmNoZWNrU3ludGF4KToKKyAgICAgICAgKEpTQzo6
UHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OkZ1bmN0
aW9uRXhlY3V0YWJsZTo6cHJvZHVjZUNvZGVCbG9ja0Zvcik6CisgICAgICAgIChKU0M6OkZ1bmN0
aW9uRXhlY3V0YWJsZTo6ZnJvbUdsb2JhbENvZGUpOiBQaXBlIHRoZSBjYWxsZWUncyBuYW1lIHRo
cm91Z2gKKyAgICAgICAgdGhlIHBhcnNlciBzbyB3ZSBnZXQgYWNjdXJhdGUgaW5mb3JtYXRpb24g
b24gd2hldGhlciB0aGUgY2FsbGVlIHdhcyBjYXB0dXJlZC4KKworICAgICAgICAqIHJ1bnRpbWUv
SlNOYW1lU2NvcGUuaDoKKyAgICAgICAgKEpTQzo6SlNOYW1lU2NvcGU6OmNyZWF0ZSk6CisgICAg
ICAgIChKU0M6OkpTTmFtZVNjb3BlOjpKU05hbWVTY29wZSk6IEFkZGVkIHN1cHBvcnQgZm9yIGV4
cGxpY2l0bHkgc3BlY2lmeWluZworICAgICAgICB5b3VyIGNvbnRhaW5lciBzY29wZS4gVGhlIGNv
bXBpbGVyIHVzZXMgdGhpcyBmb3IgbmFtZWQgZnVuY3Rpb24gZXhwcmVzc2lvbnMuCisKIDIwMTIt
MDktMDIgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBSZWZh
Y3RvcmVkIHNjb3BlIGNoYWluIG9wY29kZXMgdG8gc3VwcG9ydCBvcHRpbWl6YXRpb24gZm9yIG5h
bWVkIGZ1bmN0aW9uIGV4cHJlc3Npb25zCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTI3MzkzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3NTIs
NiArMTc1Miw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KICAg
ICAsIG1faGVhcCgmbV9nbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKS5oZWFwKQogICAgICwgbV9u
dW1DYWxsZWVSZWdpc3RlcnMoMCkKICAgICAsIG1fbnVtVmFycygwKQorICAgICwgbV9udW1DYXB0
dXJlZFZhcnMoMCkKICAgICAsIG1faXNDb25zdHJ1Y3Rvcihpc0NvbnN0cnVjdG9yKQogICAgICwg
bV9udW1QYXJhbWV0ZXJzKDApCiAgICAgLCBtX293bmVyRXhlY3V0YWJsZShnbG9iYWxPYmplY3Qt
Pmdsb2JhbERhdGEoKSwgb3duZXJFeGVjdXRhYmxlLCBvd25lckV4ZWN1dGFibGUpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMTI3MzkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMz
LDExICszMywxMSBAQAogCiAjaW5jbHVkZSAiQmF0Y2hlZFRyYW5zaXRpb25PcHRpbWl6ZXIuaCIK
ICNpbmNsdWRlICJDb21tZW50LmgiCisjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRl
ICJKU0FjdGl2YXRpb24uaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCi0jaW5jbHVkZSAiSW50
ZXJwcmV0ZXIuaCIKKyNpbmNsdWRlICJKU05hbWVTY29wZS5oIgogI2luY2x1ZGUgIkxvd0xldmVs
SW50ZXJwcmV0ZXIuaCIKLQogI2luY2x1ZGUgIlN0cm9uZ0lubGluZXMuaCIKICNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtNDE5LDYgKzQxOSw4IEBAIEJ5dGVjb2RlR2VuZXJh
dG9yOjpCeXRlY29kZUdlbmVyYXRvcihGdW4KICAgICAgICAgfQogICAgIH0KIAorICAgIFJlZ2lz
dGVySUQqIGNhbGxlZVJlZ2lzdGVyID0gcmVzb2x2ZUNhbGxlZShmdW5jdGlvbkJvZHkpOyAvLyBN
YXkgcHVzaCB0byB0aGUgc2NvcGUgY2hhaW4gYW5kL29yIGFkZCBhIGNhcHR1cmVkIHZhci4KKwog
ICAgIGNvbnN0IERlY2xhcmF0aW9uU3RhY2tzOjpGdW5jdGlvblN0YWNrJiBmdW5jdGlvblN0YWNr
ID0gZnVuY3Rpb25Cb2R5LT5mdW5jdGlvblN0YWNrKCk7CiAgICAgY29uc3QgRGVjbGFyYXRpb25T
dGFja3M6OlZhclN0YWNrJiB2YXJTdGFjayA9IGZ1bmN0aW9uQm9keS0+dmFyU3RhY2soKTsKIApA
QCAtNDU2LDYgKzQ1OCw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihG
dW4KICAgICB9CiAKICAgICBjb2RlQmxvY2stPm1fbnVtQ2FwdHVyZWRWYXJzID0gY29kZUJsb2Nr
LT5tX251bVZhcnM7CisKICAgICBtX2ZpcnN0TGF6eUZ1bmN0aW9uID0gY29kZUJsb2NrLT5tX251
bVZhcnM7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmdW5jdGlvblN0YWNrLnNpemUoKTsg
KytpKSB7CiAgICAgICAgIEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9uID0gZnVuY3Rpb25TdGFj
a1tpXTsKQEAgLTQ5Nyw2ICs1MDAsOSBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5l
cmF0b3IoRnVuCiAKICAgICBwcmVzZXJ2ZUxhc3RWYXIoKTsKIAorICAgIC8vIFdlIGRlY2xhcmUg
dGhlIGNhbGxlZSdzIG5hbWUgbGFzdCBiZWNhdXNlIGl0IHNob3VsZCBsb3NlIHRvIGEgdmFyLCBm
dW5jdGlvbiwgYW5kL29yIHBhcmFtZXRlciBkZWNsYXJhdGlvbi4KKyAgICBhZGRDYWxsZWUoZnVu
Y3Rpb25Cb2R5LCBjYWxsZWVSZWdpc3Rlcik7CisKICAgICBpZiAoaXNDb25zdHJ1Y3RvcigpKSB7
CiAgICAgICAgIHByZXBlbmRDb21tZW50KCIndGhpcycgYmVjYXVzZSB3ZSBhcmUgYSBDb25zdHJ1
Y3RvciBmdW5jdGlvbiIpOwogICAgICAgICBlbWl0T3Bjb2RlKG9wX2NyZWF0ZV90aGlzKTsKQEAg
LTU3NCw2ICs1ODAsNTMgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJbml0
TAogICAgIHJldHVybiByZWc7CiB9CiAKK1JlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjpy
ZXNvbHZlQ2FsbGVlKEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9uQm9keU5vZGUpCit7CisgICAg
aWYgKGZ1bmN0aW9uQm9keU5vZGUtPmlkZW50KCkuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiAw
OworCisgICAgbV9jYWxsZWVSZWdpc3Rlci5zZXRJbmRleChSZWdpc3RlckZpbGU6OkNhbGxlZSk7
CisKKyAgICAvLyBJZiBub24tc3RyaWN0IGV2YWwgaXMgaW4gcGxheSwgd2UgdXNlIGEgc2VwYXJh
dGUgb2JqZWN0IGluIHRoZSBzY29wZSBjaGFpbiBmb3IgdGhlIGNhbGxlZSdzIG5hbWUuCisgICAg
aWYgKChtX2NvZGVCbG9jay0+dXNlc0V2YWwoKSAmJiAhbV9jb2RlQmxvY2stPmlzU3RyaWN0TW9k
ZSgpKSB8fCBtX3Nob3VsZEVtaXREZWJ1Z0hvb2tzKSB7CisgICAgICAgIGVtaXRPcGNvZGUob3Bf
cHVzaF9uYW1lX3Njb3BlKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENvbnN0
YW50KGZ1bmN0aW9uQm9keU5vZGUtPmlkZW50KCkpKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKG1fY2FsbGVlUmVnaXN0ZXIuaW5kZXgoKSk7CisgICAgICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZChSZWFkT25seSB8IERvbnREZWxldGUpOworCisgICAgICAgIC8vIFB1dCBhIG1pcnJv
ciBvYmplY3QgaW4gY29tcGlsYXRpb24gc2NvcGUsIHNvIGNvbXBpbGUtdGltZSB2YXJpYWJsZSBy
ZXNvbHV0aW9uIHNlZXMgdGhlIHByb3BlcnR5IG5hbWUgd2UnbGwgc2VlIGF0IHJ1bnRpbWUuCisg
ICAgICAgIG1fc2NvcGUuc2V0KCpnbG9iYWxEYXRhKCksCisgICAgICAgICAgICBKU05hbWVTY29w
ZTo6Y3JlYXRlKAorICAgICAgICAgICAgICAgIG1fc2NvcGUtPmdsb2JhbE9iamVjdCgpLT5nbG9i
YWxFeGVjKCksCisgICAgICAgICAgICAgICAgZnVuY3Rpb25Cb2R5Tm9kZS0+aWRlbnQoKSwKKyAg
ICAgICAgICAgICAgICBqc1VuZGVmaW5lZCgpLAorICAgICAgICAgICAgICAgIFJlYWRPbmx5IHwg
RG9udERlbGV0ZSwKKyAgICAgICAgICAgICAgICBtX3Njb3BlLmdldCgpCisgICAgICAgICAgICAp
CisgICAgICAgICk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGlmICghZnVuY3Rp
b25Cb2R5Tm9kZS0+Y2FwdHVyZXMoZnVuY3Rpb25Cb2R5Tm9kZS0+aWRlbnQoKSkpCisgICAgICAg
IHJldHVybiAmbV9jYWxsZWVSZWdpc3RlcjsKKworICAgIC8vIE1vdmUgdGhlIGNhbGxlZSBpbnRv
IHRoZSBjYXB0dXJlZCBzZWN0aW9uIG9mIHRoZSBzdGFjay4KKyAgICByZXR1cm4gZW1pdE1vdmUo
YWRkVmFyKCksICZtX2NhbGxlZVJlZ2lzdGVyKTsKK30KKwordm9pZCBCeXRlY29kZUdlbmVyYXRv
cjo6YWRkQ2FsbGVlKEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9uQm9keU5vZGUsIFJlZ2lzdGVy
SUQqIGNhbGxlZVJlZ2lzdGVyKQoreworICAgIGlmIChmdW5jdGlvbkJvZHlOb2RlLT5pZGVudCgp
LmlzTnVsbCgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBJZiBub24tc3RyaWN0IGV2YWwg
aXMgaW4gcGxheSwgd2UgdXNlIGEgc2VwYXJhdGUgb2JqZWN0IGluIHRoZSBzY29wZSBjaGFpbiBm
b3IgdGhlIGNhbGxlZSdzIG5hbWUuCisgICAgaWYgKChtX2NvZGVCbG9jay0+dXNlc0V2YWwoKSAm
JiAhbV9jb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpKSB8fCBtX3Nob3VsZEVtaXREZWJ1Z0hvb2tz
KQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQoY2FsbGVlUmVnaXN0ZXIpOworICAgIHN5
bWJvbFRhYmxlKCkuYWRkKGZ1bmN0aW9uQm9keU5vZGUtPmlkZW50KCkuaW1wbCgpLCBTeW1ib2xU
YWJsZUVudHJ5KGNhbGxlZVJlZ2lzdGVyLT5pbmRleCgpLCBSZWFkT25seSkpOworfQorCiB2b2lk
IEJ5dGVjb2RlR2VuZXJhdG9yOjphZGRQYXJhbWV0ZXIoY29uc3QgSWRlbnRpZmllciYgaWRlbnQs
IGludCBwYXJhbWV0ZXJJbmRleCkKIHsKICAgICAvLyBQYXJhbWV0ZXJzIG92ZXJ3cml0ZSB2YXIg
ZGVjbGFyYXRpb25zLCBidXQgbm90IGZ1bmN0aW9uIGRlY2xhcmF0aW9ucy4KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmgJKHJldmlzaW9uIDEyNzM5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjE1LDcgKzYxNSw5
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBpbnQgYWRkR2xvYmFsVmFyKGNvbnN0IElkZW50
aWZpZXImLCBDb25zdGFudE1vZGUsIEZ1bmN0aW9uTW9kZSk7CiAKICAgICAgICAgdm9pZCBhZGRQ
YXJhbWV0ZXIoY29uc3QgSWRlbnRpZmllciYsIGludCBwYXJhbWV0ZXJJbmRleCk7Ci0gICAgICAg
IAorICAgICAgICBSZWdpc3RlcklEKiByZXNvbHZlQ2FsbGVlKEZ1bmN0aW9uQm9keU5vZGUqKTsK
KyAgICAgICAgdm9pZCBhZGRDYWxsZWUoRnVuY3Rpb25Cb2R5Tm9kZSosIFJlZ2lzdGVySUQqKTsK
KwogICAgICAgICB2b2lkIHByZXNlcnZlTGFzdFZhcigpOwogICAgICAgICBib29sIHNob3VsZEF2
b2lkUmVzb2x2ZUdsb2JhbCgpOwogCkBAIC02MjQsNiArNjI2LDkgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkKICAgICAgICAgICAgICAgICByZXR1cm4gbV9j
YWxsZWVSZWdpc3RlcnNbaW5kZXhdOwogCisgICAgICAgICAgICBpZiAoaW5kZXggPT0gUmVnaXN0
ZXJGaWxlOjpDYWxsZWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1fY2FsbGVlUmVnaXN0ZXI7
CisKICAgICAgICAgICAgIEFTU0VSVChtX3BhcmFtZXRlcnMuc2l6ZSgpKTsKICAgICAgICAgICAg
IHJldHVybiBtX3BhcmFtZXRlcnNbaW5kZXggKyBtX3BhcmFtZXRlcnMuc2l6ZSgpICsgUmVnaXN0
ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplXTsKICAgICAgICAgfQpAQCAtNzE0LDYgKzcxOSw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBIYXNoU2V0PFJlZlB0cjxTdHJpbmdJbXBsPiwg
SWRlbnRpZmllclJlcEhhc2g+IG1fZnVuY3Rpb25zOwogICAgICAgICBSZWdpc3RlcklEIG1faWdu
b3JlZFJlc3VsdFJlZ2lzdGVyOwogICAgICAgICBSZWdpc3RlcklEIG1fdGhpc1JlZ2lzdGVyOwor
ICAgICAgICBSZWdpc3RlcklEIG1fY2FsbGVlUmVnaXN0ZXI7CiAgICAgICAgIFJlZ2lzdGVySUQq
IG1fYWN0aXZhdGlvblJlZ2lzdGVyOwogICAgICAgICBTZWdtZW50ZWRWZWN0b3I8UmVnaXN0ZXJJ
RCwgMzI+IG1fY29uc3RhbnRQb29sUmVnaXN0ZXJzOwogICAgICAgICBTZWdtZW50ZWRWZWN0b3I8
UmVnaXN0ZXJJRCwgMzI+IG1fY2FsbGVlUmVnaXN0ZXJzOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDEyNzM5MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNDIsNiArMTQyLDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVy
biBnZXRKU0NvbnN0YW50KGNvbnN0YW50KTsKICAgICAgICAgfQogCisgICAgICAgIGlmIChvcGVy
YW5kID09IFJlZ2lzdGVyRmlsZTo6Q2FsbGVlKQorICAgICAgICAgICAgcmV0dXJuIGdldENhbGxl
ZSgpOworCiAgICAgICAgIC8vIElzIHRoaXMgYW4gYXJndW1lbnQ/CiAgICAgICAgIGlmIChvcGVy
YW5kSXNBcmd1bWVudChvcGVyYW5kKSkKICAgICAgICAgICAgIHJldHVybiBnZXRBcmd1bWVudChv
cGVyYW5kKTsKQEAgLTUyMSw2ICs1MjQsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHJl
c3VsdEluZGV4OwogICAgIH0KIAorICAgIE5vZGVJbmRleCBnZXRDYWxsZWUoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGFkZFRvR3JhcGgoR2V0Q2FsbGVlKTsKKyAgICB9CisKICAgICAvLyBIZWxw
ZXIgZnVuY3Rpb25zIHRvIGdldC9zZXQgdGhlIHRoaXMgdmFsdWUuCiAgICAgTm9kZUluZGV4IGdl
dFRoaXMoKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0
aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVy
YXRpb25zLmNwcAkocmV2aXNpb24gMTI3MzkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIzNywxNCArMTIzNyw3IEBA
IEpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdGdW5jdGkKICAgICBBU1NFUlQoZnVu
Y3Rpb25FeGVjdXRhYmxlQXNDZWxsLT5pbmhlcml0cygmRnVuY3Rpb25FeGVjdXRhYmxlOjpzX2lu
Zm8pKTsKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9CiAgICAg
ICAgIHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGZ1bmN0aW9uRXhlY3V0YWJsZUFz
Q2VsbCk7Ci0gICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBmdW5jdGlvbkV4ZWN1dGFibGUtPm1h
a2UoZXhlYywgZXhlYy0+c2NvcGUoKSk7Ci0gICAgaWYgKCFmdW5jdGlvbkV4ZWN1dGFibGUtPm5h
bWUoKS5pc051bGwoKSkgewotICAgICAgICBKU05hbWVTY29wZSogZnVuY3Rpb25TY29wZU9iamVj
dCA9Ci0gICAgICAgICAgICBKU05hbWVTY29wZTo6Y3JlYXRlKAotICAgICAgICAgICAgICAgIGV4
ZWMsIGZ1bmN0aW9uRXhlY3V0YWJsZS0+bmFtZSgpLCBmdW5jdGlvbiwgUmVhZE9ubHkgfCBEb250
RGVsZXRlKTsKLSAgICAgICAgZnVuY3Rpb24tPnNldFNjb3BlKGV4ZWMtPmdsb2JhbERhdGEoKSwg
ZnVuY3Rpb25TY29wZU9iamVjdCk7Ci0gICAgfQotICAgIHJldHVybiBmdW5jdGlvbjsKKyAgICBy
ZXR1cm4gZnVuY3Rpb25FeGVjdXRhYmxlLT5tYWtlKGV4ZWMsIGV4ZWMtPnNjb3BlKCkpOwogfQog
CiBzaXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25Jc09iamVjdChFeGVjU3RhdGUqIGV4ZWMs
IEVuY29kZWRKU1ZhbHVlIHZhbHVlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0ludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiAxMjczOTMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00Mjc3LDE4ICs0Mjc3LDYgQEAgc2tpcF9pZF9jdXN0b21fc2VsZjoKICAgICAgICAg
RnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbiA9IGNvZGVCbG9jay0+ZnVuY3Rpb25FeHByKGZ1
bmNJbmRleCk7CiAgICAgICAgIEpTRnVuY3Rpb24qIGZ1bmMgPSBmdW5jdGlvbi0+bWFrZShjYWxs
RnJhbWUsIGNhbGxGcmFtZS0+c2NvcGUoKSk7CiAKLSAgICAgICAgLyogCi0gICAgICAgICAgICBU
aGUgSWRlbnRpZmllciBpbiBhIEZ1bmN0aW9uRXhwcmVzc2lvbiBjYW4gYmUgcmVmZXJlbmNlZCBm
cm9tIGluc2lkZQotICAgICAgICAgICAgdGhlIEZ1bmN0aW9uRXhwcmVzc2lvbidzIEZ1bmN0aW9u
Qm9keSB0byBhbGxvdyB0aGUgZnVuY3Rpb24gdG8gY2FsbAotICAgICAgICAgICAgaXRzZWxmIHJl
Y3Vyc2l2ZWx5LiBIb3dldmVyLCB1bmxpa2UgaW4gYSBGdW5jdGlvbkRlY2xhcmF0aW9uLCB0aGUK
LSAgICAgICAgICAgIElkZW50aWZpZXIgaW4gYSBGdW5jdGlvbkV4cHJlc3Npb24gY2Fubm90IGJl
IHJlZmVyZW5jZWQgZnJvbSBhbmQKLSAgICAgICAgICAgIGRvZXMgbm90IGFmZmVjdCB0aGUgc2Nv
cGUgZW5jbG9zaW5nIHRoZSBGdW5jdGlvbkV4cHJlc3Npb24uCi0gICAgICAgICAqLwotICAgICAg
ICBpZiAoIWZ1bmN0aW9uLT5uYW1lKCkuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIEpTTmFtZVNj
b3BlKiBmdW5jdGlvblNjb3BlT2JqZWN0ID0gSlNOYW1lU2NvcGU6OmNyZWF0ZShjYWxsRnJhbWUs
IGZ1bmN0aW9uLT5uYW1lKCksIGZ1bmMsIFJlYWRPbmx5IHwgRG9udERlbGV0ZSk7Ci0gICAgICAg
ICAgICBmdW5jLT5zZXRTY29wZSgqZ2xvYmFsRGF0YSwgZnVuY3Rpb25TY29wZU9iamVjdCk7Ci0g
ICAgICAgIH0KLQogICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IEpTVmFsdWUo
ZnVuYyk7CiAKICAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfbmV3X2Z1bmNfZXhwKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCShyZXZpc2lvbiAxMjcz
OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjk4NSwxOCArMjk4NSw2IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEpTT2JqZWN0
Kiwgb3BfbmV3X2YKICAgICBKU0Z1bmN0aW9uKiBmdW5jID0gZnVuY3Rpb24tPm1ha2UoY2FsbEZy
YW1lLCBjYWxsRnJhbWUtPnNjb3BlKCkpOwogICAgIEFTU0VSVChjYWxsRnJhbWUtPmNvZGVCbG9j
aygpLT5jb2RlVHlwZSgpICE9IEZ1bmN0aW9uQ29kZSB8fCAhY2FsbEZyYW1lLT5jb2RlQmxvY2so
KS0+bmVlZHNGdWxsU2NvcGVDaGFpbigpIHx8IGNhbGxGcmFtZS0+dW5jaGVja2VkUihjYWxsRnJh
bWUtPmNvZGVCbG9jaygpLT5hY3RpdmF0aW9uUmVnaXN0ZXIoKSkuanNWYWx1ZSgpKTsKIAotICAg
IC8qIAotICAgICAgICBUaGUgSWRlbnRpZmllciBpbiBhIEZ1bmN0aW9uRXhwcmVzc2lvbiBjYW4g
YmUgcmVmZXJlbmNlZCBmcm9tIGluc2lkZQotICAgICAgICB0aGUgRnVuY3Rpb25FeHByZXNzaW9u
J3MgRnVuY3Rpb25Cb2R5IHRvIGFsbG93IHRoZSBmdW5jdGlvbiB0byBjYWxsCi0gICAgICAgIGl0
c2VsZiByZWN1cnNpdmVseS4gSG93ZXZlciwgdW5saWtlIGluIGEgRnVuY3Rpb25EZWNsYXJhdGlv
biwgdGhlCi0gICAgICAgIElkZW50aWZpZXIgaW4gYSBGdW5jdGlvbkV4cHJlc3Npb24gY2Fubm90
IGJlIHJlZmVyZW5jZWQgZnJvbSBhbmQKLSAgICAgICAgZG9lcyBub3QgYWZmZWN0IHRoZSBzY29w
ZSBlbmNsb3NpbmcgdGhlIEZ1bmN0aW9uRXhwcmVzc2lvbi4KLSAgICAgKi8KLSAgICBpZiAoIWZ1
bmN0aW9uLT5uYW1lKCkuaXNOdWxsKCkpIHsKLSAgICAgICAgSlNOYW1lU2NvcGUqIGZ1bmN0aW9u
U2NvcGVPYmplY3QgPSBKU05hbWVTY29wZTo6Y3JlYXRlKGNhbGxGcmFtZSwgZnVuY3Rpb24tPm5h
bWUoKSwgZnVuYywgUmVhZE9ubHkgfCBEb250RGVsZXRlKTsKLSAgICAgICAgZnVuYy0+c2V0U2Nv
cGUoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGZ1bmN0aW9uU2NvcGVPYmplY3QpOwotICAgIH0K
LQogICAgIHJldHVybiBmdW5jOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTExJbnRTbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDEyNzM5MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEyNzAsMTEgKzEyNzAsNiBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbmV3X2Z1
bmNfCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbiA9IGNvZGVCbG9jay0+ZnVuY3Rp
b25FeHByKHBjWzJdLnUub3BlcmFuZCk7CiAgICAgSlNGdW5jdGlvbiogZnVuYyA9IGZ1bmN0aW9u
LT5tYWtlKGV4ZWMsIGV4ZWMtPnNjb3BlKCkpOwogICAgIAotICAgIGlmICghZnVuY3Rpb24tPm5h
bWUoKS5pc051bGwoKSkgewotICAgICAgICBKU05hbWVTY29wZSogZnVuY3Rpb25TY29wZU9iamVj
dCA9IEpTTmFtZVNjb3BlOjpjcmVhdGUoZXhlYywgZnVuY3Rpb24tPm5hbWUoKSwgZnVuYywgUmVh
ZE9ubHkgfCBEb250RGVsZXRlKTsKLSAgICAgICAgZnVuYy0+c2V0U2NvcGUoZ2xvYmFsRGF0YSwg
ZnVuY3Rpb25TY29wZU9iamVjdCk7Ci0gICAgfQotICAgIAogICAgIExMSU5UX1JFVFVSTihmdW5j
KTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAkocmV2
aXNpb24gMTI3MzkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiBu
YW1lc3BhY2UgSlNDIHsKIAogdGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KLVBhcnNlcjxM
ZXhlclR5cGU+OjpQYXJzZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBTb3VyY2VD
b2RlJiBzb3VyY2UsIEZ1bmN0aW9uUGFyYW1ldGVycyogcGFyYW1ldGVycywgSlNQYXJzZXJTdHJp
Y3RuZXNzIHN0cmljdG5lc3MsIEpTUGFyc2VyTW9kZSBwYXJzZXJNb2RlKQorUGFyc2VyPExleGVy
VHlwZT46OlBhcnNlcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IFNvdXJjZUNvZGUm
IHNvdXJjZSwgRnVuY3Rpb25QYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzLCBjb25zdCBJZGVudGlmaWVy
JiBuYW1lLCBKU1BhcnNlclN0cmljdG5lc3Mgc3RyaWN0bmVzcywgSlNQYXJzZXJNb2RlIHBhcnNl
ck1vZGUpCiAgICAgOiBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKICAgICAsIG1fc291cmNlKCZz
b3VyY2UpCiAgICAgLCBtX3N0YWNrKHd0ZlRocmVhZERhdGEoKS5zdGFjaygpKQpAQCAtNzEsNiAr
NzEsOCBAQCBQYXJzZXI8TGV4ZXJUeXBlPjo6UGFyc2VyKEpTR2xvYmFsRGF0YSogCiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwYXJhbWV0ZXJzLT5zaXplKCk7IGkrKykKICAgICAg
ICAgICAgIHNjb3BlLT5kZWNsYXJlUGFyYW1ldGVyKCZwYXJhbWV0ZXJzLT5hdChpKSk7CiAgICAg
fQorICAgIGlmICghbmFtZS5pc051bGwoKSkKKyAgICAgICAgc2NvcGUtPmRlY2xhcmVDYWxsZWUo
Jm5hbWUpOwogICAgIG5leHQoKTsKICAgICBtX2xleGVyLT5zZXRMYXN0TGluZU51bWJlcih0b2tl
bkxpbmUoKSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgJKHJl
dmlzaW9uIDEyNzM5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIwOCw2ICsyMDgsMTEgQEAgc3RydWN0IFNjb3BlIHsKICAgICBi
b29sIGlzRnVuY3Rpb24oKSB7IHJldHVybiBtX2lzRnVuY3Rpb247IH0KICAgICBib29sIGlzRnVu
Y3Rpb25Cb3VuZGFyeSgpIHsgcmV0dXJuIG1faXNGdW5jdGlvbkJvdW5kYXJ5OyB9CiAKKyAgICB2
b2lkIGRlY2xhcmVDYWxsZWUoY29uc3QgSWRlbnRpZmllciogaWRlbnQpCisgICAgeworICAgICAg
ICBtX2RlY2xhcmVkVmFyaWFibGVzLmFkZChpZGVudC0+dXN0cmluZygpLmltcGwoKSk7CisgICAg
fQorCiAgICAgYm9vbCBkZWNsYXJlVmFyaWFibGUoY29uc3QgSWRlbnRpZmllciogaWRlbnQpCiAg
ICAgewogICAgICAgICBib29sIGlzVmFsaWRTdHJpY3RNb2RlID0gbV9nbG9iYWxEYXRhLT5wcm9w
ZXJ0eU5hbWVzLT5ldmFsICE9ICppZGVudCAmJiBtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMt
PmFyZ3VtZW50cyAhPSAqaWRlbnQ7CkBAIC0zODIsNyArMzg3LDcgQEAgY2xhc3MgUGFyc2VyIHsK
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIAogcHVibGljOgotICAgIFBhcnNlcihKU0ds
b2JhbERhdGEqLCBjb25zdCBTb3VyY2VDb2RlJiwgRnVuY3Rpb25QYXJhbWV0ZXJzKiwgSlNQYXJz
ZXJTdHJpY3RuZXNzLCBKU1BhcnNlck1vZGUpOworICAgIFBhcnNlcihKU0dsb2JhbERhdGEqLCBj
b25zdCBTb3VyY2VDb2RlJiwgRnVuY3Rpb25QYXJhbWV0ZXJzKiwgY29uc3QgSWRlbnRpZmllciYs
IEpTUGFyc2VyU3RyaWN0bmVzcywgSlNQYXJzZXJNb2RlKTsKICAgICB+UGFyc2VyKCk7CiAKICAg
ICB0ZW1wbGF0ZSA8Y2xhc3MgUGFyc2VkTm9kZT4KQEAgLTEwNDQsMTcgKzEwNDksMTcgQEAgUGFz
c1JlZlB0cjxQYXJzZWROb2RlPiBQYXJzZXI8TGV4ZXJUeXBlPgogfQogCiB0ZW1wbGF0ZSA8Y2xh
c3MgUGFyc2VkTm9kZT4KLVBhc3NSZWZQdHI8UGFyc2VkTm9kZT4gcGFyc2UoSlNHbG9iYWxEYXRh
KiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgY29uc3Qg
U291cmNlQ29kZSYgc291cmNlLCBGdW5jdGlvblBhcmFtZXRlcnMqIHBhcmFtZXRlcnMsIEpTUGFy
c2VyU3RyaWN0bmVzcyBzdHJpY3RuZXNzLCBKU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgRGVidWdn
ZXIqIGRlYnVnZ2VyLCBFeGVjU3RhdGUqIGV4ZWNTdGF0ZSwgSlNPYmplY3QqKiBleGNlcHRpb24p
CitQYXNzUmVmUHRyPFBhcnNlZE5vZGU+IHBhcnNlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwg
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIGNvbnN0IFNvdXJjZUNvZGUmIHNv
dXJjZSwgRnVuY3Rpb25QYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzLCBjb25zdCBJZGVudGlmaWVyJiBu
YW1lLCBKU1BhcnNlclN0cmljdG5lc3Mgc3RyaWN0bmVzcywgSlNQYXJzZXJNb2RlIHBhcnNlck1v
ZGUsIERlYnVnZ2VyKiBkZWJ1Z2dlciwgRXhlY1N0YXRlKiBleGVjU3RhdGUsIEpTT2JqZWN0Kiog
ZXhjZXB0aW9uKQogewogICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJQYXJzaW5n
Iik7CiAKICAgICBBU1NFUlQoc291cmNlLnByb3ZpZGVyKCktPmRhdGEoKSk7CiAKICAgICBpZiAo
c291cmNlLnByb3ZpZGVyKCktPmRhdGEoKS0+aXM4Qml0KCkpIHsKLSAgICAgICAgUGFyc2VyPCBM
ZXhlcjxMQ2hhcj4gPiBwYXJzZXIoZ2xvYmFsRGF0YSwgc291cmNlLCBwYXJhbWV0ZXJzLCBzdHJp
Y3RuZXNzLCBwYXJzZXJNb2RlKTsKKyAgICAgICAgUGFyc2VyPCBMZXhlcjxMQ2hhcj4gPiBwYXJz
ZXIoZ2xvYmFsRGF0YSwgc291cmNlLCBwYXJhbWV0ZXJzLCBuYW1lLCBzdHJpY3RuZXNzLCBwYXJz
ZXJNb2RlKTsKICAgICAgICAgcmV0dXJuIHBhcnNlci5wYXJzZTxQYXJzZWROb2RlPihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBkZWJ1Z2dlciwgZXhlY1N0YXRlLCBleGNlcHRpb24pOwogICAgIH0KLSAg
ICBQYXJzZXI8IExleGVyPFVDaGFyPiA+IHBhcnNlcihnbG9iYWxEYXRhLCBzb3VyY2UsIHBhcmFt
ZXRlcnMsIHN0cmljdG5lc3MsIHBhcnNlck1vZGUpOworICAgIFBhcnNlcjwgTGV4ZXI8VUNoYXI+
ID4gcGFyc2VyKGdsb2JhbERhdGEsIHNvdXJjZSwgcGFyYW1ldGVycywgbmFtZSwgc3RyaWN0bmVz
cywgcGFyc2VyTW9kZSk7CiAgICAgcmV0dXJuIHBhcnNlci5wYXJzZTxQYXJzZWROb2RlPihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBkZWJ1Z2dlciwgZXhlY1N0YXRlLCBleGNlcHRpb24pOwogfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkocmV2
aXNpb24gMTI3MzkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJs
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMCw3ICsyMTAsNyBAQCBKU09iamVjdCogRXZhbEV4
ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5hCiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKCFsZXhp
Y2FsR2xvYmFsT2JqZWN0LT5ldmFsRW5hYmxlZCgpKQogICAgICAgICAgICAgcmV0dXJuIHRocm93
RXJyb3IoZXhlYywgY3JlYXRlRXZhbEVycm9yKGV4ZWMsICJFdmFsIGlzIGRpc2FibGVkIikpOwot
ICAgICAgICBSZWZQdHI8RXZhbE5vZGU+IGV2YWxOb2RlID0gcGFyc2U8RXZhbE5vZGU+KGdsb2Jh
bERhdGEsIGxleGljYWxHbG9iYWxPYmplY3QsIG1fc291cmNlLCAwLCBpc1N0cmljdE1vZGUoKSA/
IEpTUGFyc2VTdHJpY3QgOiBKU1BhcnNlTm9ybWFsLCBFdmFsTm9kZTo6aXNGdW5jdGlvbk5vZGUg
PyBKU1BhcnNlRnVuY3Rpb25Db2RlIDogSlNQYXJzZVByb2dyYW1Db2RlLCBsZXhpY2FsR2xvYmFs
T2JqZWN0LT5kZWJ1Z2dlcigpLCBleGVjLCAmZXhjZXB0aW9uKTsKKyAgICAgICAgUmVmUHRyPEV2
YWxOb2RlPiBldmFsTm9kZSA9IHBhcnNlPEV2YWxOb2RlPihnbG9iYWxEYXRhLCBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBtX3NvdXJjZSwgMCwgSWRlbnRpZmllcigpLCBpc1N0cmljdE1vZGUoKSA/IEpT
UGFyc2VTdHJpY3QgOiBKU1BhcnNlTm9ybWFsLCBFdmFsTm9kZTo6aXNGdW5jdGlvbk5vZGUgPyBK
U1BhcnNlRnVuY3Rpb25Db2RlIDogSlNQYXJzZVByb2dyYW1Db2RlLCBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LT5kZWJ1Z2dlcigpLCBleGVjLCAmZXhjZXB0aW9uKTsKICAgICAgICAgaWYgKCFldmFsTm9k
ZSkgewogICAgICAgICAgICAgQVNTRVJUKGV4Y2VwdGlvbik7CiAgICAgICAgICAgICByZXR1cm4g
ZXhjZXB0aW9uOwpAQCAtMjkzLDcgKzI5Myw3IEBAIEpTT2JqZWN0KiBQcm9ncmFtRXhlY3V0YWJs
ZTo6Y2hlY2tTeW50YXgKICAgICBKU09iamVjdCogZXhjZXB0aW9uID0gMDsKICAgICBKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwogICAgIEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwot
ICAgIFJlZlB0cjxQcm9ncmFtTm9kZT4gcHJvZ3JhbU5vZGUgPSBwYXJzZTxQcm9ncmFtTm9kZT4o
Z2xvYmFsRGF0YSwgbGV4aWNhbEdsb2JhbE9iamVjdCwgbV9zb3VyY2UsIDAsIEpTUGFyc2VOb3Jt
YWwsIFByb2dyYW1Ob2RlOjppc0Z1bmN0aW9uTm9kZSA/IEpTUGFyc2VGdW5jdGlvbkNvZGUgOiBK
U1BhcnNlUHJvZ3JhbUNvZGUsIGxleGljYWxHbG9iYWxPYmplY3QtPmRlYnVnZ2VyKCksIGV4ZWMs
ICZleGNlcHRpb24pOworICAgIFJlZlB0cjxQcm9ncmFtTm9kZT4gcHJvZ3JhbU5vZGUgPSBwYXJz
ZTxQcm9ncmFtTm9kZT4oZ2xvYmFsRGF0YSwgbGV4aWNhbEdsb2JhbE9iamVjdCwgbV9zb3VyY2Us
IDAsIElkZW50aWZpZXIoKSwgSlNQYXJzZU5vcm1hbCwgUHJvZ3JhbU5vZGU6OmlzRnVuY3Rpb25O
b2RlID8gSlNQYXJzZUZ1bmN0aW9uQ29kZSA6IEpTUGFyc2VQcm9ncmFtQ29kZSwgbGV4aWNhbEds
b2JhbE9iamVjdC0+ZGVidWdnZXIoKSwgZXhlYywgJmV4Y2VwdGlvbik7CiAgICAgaWYgKHByb2dy
YW1Ob2RlKQogICAgICAgICByZXR1cm4gMDsKICAgICBBU1NFUlQoZXhjZXB0aW9uKTsKQEAgLTMz
NSw3ICszMzUsNyBAQCBKU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlCiAg
ICAgICAgIG5ld0NvZGVCbG9jay0+c2V0QWx0ZXJuYXRpdmUoc3RhdGljX3BvaW50ZXJfY2FzdDxD
b2RlQmxvY2s+KG1fcHJvZ3JhbUNvZGVCbG9jay5yZWxlYXNlKCkpKTsKICAgICAgICAgbV9wcm9n
cmFtQ29kZUJsb2NrID0gbmV3Q29kZUJsb2NrLnJlbGVhc2UoKTsKICAgICB9IGVsc2UgewotICAg
ICAgICBSZWZQdHI8UHJvZ3JhbU5vZGU+IHByb2dyYW1Ob2RlID0gcGFyc2U8UHJvZ3JhbU5vZGU+
KGdsb2JhbERhdGEsIGxleGljYWxHbG9iYWxPYmplY3QsIG1fc291cmNlLCAwLCBpc1N0cmljdE1v
ZGUoKSA/IEpTUGFyc2VTdHJpY3QgOiBKU1BhcnNlTm9ybWFsLCBQcm9ncmFtTm9kZTo6aXNGdW5j
dGlvbk5vZGUgPyBKU1BhcnNlRnVuY3Rpb25Db2RlIDogSlNQYXJzZVByb2dyYW1Db2RlLCBsZXhp
Y2FsR2xvYmFsT2JqZWN0LT5kZWJ1Z2dlcigpLCBleGVjLCAmZXhjZXB0aW9uKTsKKyAgICAgICAg
UmVmUHRyPFByb2dyYW1Ob2RlPiBwcm9ncmFtTm9kZSA9IHBhcnNlPFByb2dyYW1Ob2RlPihnbG9i
YWxEYXRhLCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBtX3NvdXJjZSwgMCwgSWRlbnRpZmllcigpLCBp
c1N0cmljdE1vZGUoKSA/IEpTUGFyc2VTdHJpY3QgOiBKU1BhcnNlTm9ybWFsLCBQcm9ncmFtTm9k
ZTo6aXNGdW5jdGlvbk5vZGUgPyBKU1BhcnNlRnVuY3Rpb25Db2RlIDogSlNQYXJzZVByb2dyYW1D
b2RlLCBsZXhpY2FsR2xvYmFsT2JqZWN0LT5kZWJ1Z2dlcigpLCBleGVjLCAmZXhjZXB0aW9uKTsK
ICAgICAgICAgaWYgKCFwcm9ncmFtTm9kZSkgewogICAgICAgICAgICAgQVNTRVJUKGV4Y2VwdGlv
bik7CiAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uOwpAQCAtNDc4LDcgKzQ3OCw3IEBAIFBh
c3NPd25QdHI8RnVuY3Rpb25Db2RlQmxvY2s+IEZ1bmN0aW9uRXgKICAgICBleGNlcHRpb24gPSAw
OwogICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9IHNjb3BlLT5nbG9iYWxEYXRhKCk7CiAg
ICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHNjb3BlLT5nbG9iYWxPYmplY3QoKTsK
LSAgICBSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4gYm9keSA9IHBhcnNlPEZ1bmN0aW9uQm9keU5v
ZGU+KGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgbV9zb3VyY2UsIG1fcGFyYW1ldGVycy5nZXQo
KSwgaXNTdHJpY3RNb2RlKCkgPyBKU1BhcnNlU3RyaWN0IDogSlNQYXJzZU5vcm1hbCwgRnVuY3Rp
b25Cb2R5Tm9kZTo6aXNGdW5jdGlvbk5vZGUgPyBKU1BhcnNlRnVuY3Rpb25Db2RlIDogSlNQYXJz
ZVByb2dyYW1Db2RlLCAwLCAwLCAmZXhjZXB0aW9uKTsKKyAgICBSZWZQdHI8RnVuY3Rpb25Cb2R5
Tm9kZT4gYm9keSA9IHBhcnNlPEZ1bmN0aW9uQm9keU5vZGU+KGdsb2JhbERhdGEsIGdsb2JhbE9i
amVjdCwgbV9zb3VyY2UsIG1fcGFyYW1ldGVycy5nZXQoKSwgbmFtZSgpLCBpc1N0cmljdE1vZGUo
KSA/IEpTUGFyc2VTdHJpY3QgOiBKU1BhcnNlTm9ybWFsLCBGdW5jdGlvbkJvZHlOb2RlOjppc0Z1
bmN0aW9uTm9kZSA/IEpTUGFyc2VGdW5jdGlvbkNvZGUgOiBKU1BhcnNlUHJvZ3JhbUNvZGUsIDAs
IDAsICZleGNlcHRpb24pOwogCiAgICAgaWYgKCFib2R5KSB7CiAgICAgICAgIEFTU0VSVChleGNl
cHRpb24pOwpAQCAtNjUwLDcgKzY1MCw3IEBAIHZvaWQgRnVuY3Rpb25FeGVjdXRhYmxlOjp1bmxp
bmtDYWxscygpCiBGdW5jdGlvbkV4ZWN1dGFibGUqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZnJvbUds
b2JhbENvZGUoY29uc3QgSWRlbnRpZmllciYgZnVuY3Rpb25OYW1lLCBFeGVjU3RhdGUqIGV4ZWMs
IERlYnVnZ2VyKiBkZWJ1Z2dlciwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBKU09iamVjdCoq
IGV4Y2VwdGlvbikKIHsKICAgICBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCA9
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKLSAgICBSZWZQdHI8UHJvZ3JhbU5vZGU+IHBy
b2dyYW0gPSBwYXJzZTxQcm9ncmFtTm9kZT4oJmV4ZWMtPmdsb2JhbERhdGEoKSwgbGV4aWNhbEds
b2JhbE9iamVjdCwgc291cmNlLCAwLCBKU1BhcnNlTm9ybWFsLCBQcm9ncmFtTm9kZTo6aXNGdW5j
dGlvbk5vZGUgPyBKU1BhcnNlRnVuY3Rpb25Db2RlIDogSlNQYXJzZVByb2dyYW1Db2RlLCBkZWJ1
Z2dlciwgZXhlYywgZXhjZXB0aW9uKTsKKyAgICBSZWZQdHI8UHJvZ3JhbU5vZGU+IHByb2dyYW0g
PSBwYXJzZTxQcm9ncmFtTm9kZT4oJmV4ZWMtPmdsb2JhbERhdGEoKSwgbGV4aWNhbEdsb2JhbE9i
amVjdCwgc291cmNlLCAwLCBJZGVudGlmaWVyKCksIEpTUGFyc2VOb3JtYWwsIFByb2dyYW1Ob2Rl
Ojppc0Z1bmN0aW9uTm9kZSA/IEpTUGFyc2VGdW5jdGlvbkNvZGUgOiBKU1BhcnNlUHJvZ3JhbUNv
ZGUsIGRlYnVnZ2VyLCBleGVjLCBleGNlcHRpb24pOwogICAgIGlmICghcHJvZ3JhbSkgewogICAg
ICAgICBBU1NFUlQoKmV4Y2VwdGlvbik7CiAgICAgICAgIHJldHVybiAwOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYW1lU2NvcGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hbWVTY29wZS5oCShyZXZpc2lvbiAxMjczOTIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hbWVTY29wZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zOCw3ICszOCwxNCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgSlNOYW1lU2Nv
cGUqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIs
IEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCiAgICAgewotICAgICAgICBKU05h
bWVTY29wZSogc2NvcGVPYmplY3QgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU05hbWVT
Y29wZT4oKmV4ZWMtPmhlYXAoKSkpIEpTTmFtZVNjb3BlKGV4ZWMpOworICAgICAgICBKU05hbWVT
Y29wZSogc2NvcGVPYmplY3QgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU05hbWVTY29w
ZT4oKmV4ZWMtPmhlYXAoKSkpIEpTTmFtZVNjb3BlKGV4ZWMsIGV4ZWMtPnNjb3BlKCkpOworICAg
ICAgICBzY29wZU9iamVjdC0+ZmluaXNoQ3JlYXRpb24oZXhlYywgaWRlbnRpZmllciwgdmFsdWUs
IGF0dHJpYnV0ZXMpOworICAgICAgICByZXR1cm4gc2NvcGVPYmplY3Q7CisgICAgfQorCisgICAg
c3RhdGljIEpTTmFtZVNjb3BlKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlm
aWVyJiBpZGVudGlmaWVyLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBKU1Nj
b3BlKiBuZXh0KQorICAgIHsKKyAgICAgICAgSlNOYW1lU2NvcGUqIHNjb3BlT2JqZWN0ID0gbmV3
IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNOYW1lU2NvcGU+KCpleGVjLT5oZWFwKCkpKSBKU05h
bWVTY29wZShleGVjLCBuZXh0KTsKICAgICAgICAgc2NvcGVPYmplY3QtPmZpbmlzaENyZWF0aW9u
KGV4ZWMsIGlkZW50aWZpZXIsIHZhbHVlLCBhdHRyaWJ1dGVzKTsKICAgICAgICAgcmV0dXJuIHNj
b3BlT2JqZWN0OwogICAgIH0KQEAgLTY0LDEyICs3MSwxMiBAQCBwcm90ZWN0ZWQ6CiAgICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0T3duUHJvcGVy
dHlTbG90IHwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwog
CiBwcml2YXRlOgotICAgIEpTTmFtZVNjb3BlKEV4ZWNTdGF0ZSogZXhlYykKKyAgICBKU05hbWVT
Y29wZShFeGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUqIG5leHQpCiAgICAgICAgIDogQmFzZSgKICAg
ICAgICAgICAgIGV4ZWMtPmdsb2JhbERhdGEoKSwKICAgICAgICAgICAgIGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKS0+bmFtZVNjb3BlU3RydWN0dXJlKCksCiAgICAgICAgICAgICByZWludGVy
cHJldF9jYXN0PFJlZ2lzdGVyKj4oJm1fcmVnaXN0ZXJTdG9yZSArIDEpLAotICAgICAgICAgICAg
ZXhlYy0+c2NvcGUoKQorICAgICAgICAgICAgbmV4dAogICAgICAgICApCiAgICAgewogICAgIH0K
SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDEyNzM5MykKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDEyLTA5LTAyICBHZW9mZnJleSBHYXJlbiAg
PGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAgICAgTmFtZWQgZnVuY3Rpb25zIHNob3VsZCBub3Qg
YWxsb2NhdGUgc2NvcGUgb2JqZWN0cyBmb3IgdGhlaXIgbmFtZXMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1NjU5CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgY292ZXJhZ2UgZm9yIHNvbWUgZXh0
cmEtdHJpY2t5IGNhc2VzLgorCisgICAgICAgICogZmFzdC9qcy9uYW1lZC1mdW5jdGlvbi1leHBy
ZXNzaW9uLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBmYXN0L2pzL3NjcmlwdC10ZXN0cy9uYW1l
ZC1mdW5jdGlvbi1leHByZXNzaW9uLmpzOgorICAgICAgICAoc2hvdWxkQmVUcnVlV2l0aERlc2Ny
aXB0aW9uKTogSSByb2xsZWQgbXkgb3duIHNob3VsZEJlVHJ1ZSgpIGhlcmUgdG8gYXZvaWQgdGhl
CisgICAgICAgIGJ1aWx0LWluIHNob3VsZEJlKCkncyBldmFsIHNjb3BpbmcsIHdoaWNoIGNhbiBj
aGFuZ2UgdGhlIHZhcmlhYmxlCisgICAgICAgIHJlc29sdXRpb24gcnVsZXMgSSdtIHRyeWluZyB0
byB0ZXN0LgorCiAyMDEyLTA5LTAyICBKZXNzaWUgQmVybGluICA8amJlcmxpbkBhcHBsZS5jb20+
CiAKICAgICAgICAgZmFzdC9odG1sL21hcnF1ZWUtYWx0ZXJuYXRlLmh0bWwgaXMgZmxha3kKSW5k
ZXg6IExheW91dFRlc3RzL2Zhc3QvanMvbmFtZWQtZnVuY3Rpb24tZXhwcmVzc2lvbi1leHBlY3Rl
ZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9uYW1lZC1mdW5jdGlvbi1l
eHByZXNzaW9uLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMTI3MzkyKQorKysgTGF5b3V0VGVzdHMv
ZmFzdC9qcy9uYW1lZC1mdW5jdGlvbi1leHByZXNzaW9uLWV4cGVjdGVkLnR4dAkod29ya2luZyBj
b3B5KQpAQCAtMSw0ICsxLDQgQEAKLUJ1ZyA0Njk4IC0ga2pzIGRvZXMgbm90IGFsbG93IG5hbWVk
IGZ1bmN0aW9ucyBpbiBmdW5jdGlvbiBleHByZXNzaW9ucy4KK1Rlc3RzIHZhcmlhYmxlIHJlc29s
dXRpb24gcnVsZXMgZm9yIG5hbWVkIGZ1bmN0aW9uIGV4cHJlc3Npb25zLgogCiBPbiBzdWNjZXNz
LCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAi
VEVTVCBDT01QTEVURSIuCiAKQEAgLTE3LDYgKzE3LDI0IEBAIHJlY3Vyc2lvbiBpcyBwb3NzaWJs
ZSwgdGhvdWdoCiBQQVNTIHZhciBjdHIgPSAzOyB2YXIgeCA9IChmdW5jdGlvbiBOYW1lZChhLGIp
eyBpZigtLWN0cikgcmV0dXJuIDIgKiBOYW1lZChhLGIpOyBlbHNlIHJldHVybiBhICsgYjsgfSk7
IHgoNSw2KSBpcyA0NAogcmVncmVzc2lvbiB0ZXN0IHdoZXJlIGtqcyByZWdhcmRlZCBhbiBhbm9u
eW1vdXMgZnVuY3Rpb24gZGVjbGFyYXRpb24gKHdoaWNoIGlzIGlsbGVnYWwpIGFzIGEgRnVuY3Rp
b25FeHByCiBQQVNTIHZhciBoYWRFcnJvciA9IDA7IHRyeSB7IGV2YWwoImZ1bmN0aW9uKCl7IHJl
dHVybiAyOyB9OyIpOyB9IGNhdGNoKGUpIHsgaGFkRXJyb3IgPSAxOyB9OyBoYWRFcnJvcjsgaXMg
MQorCistLS0tLQorCitQQVNTOiAoZnVuY3Rpb24gY2xvc3VyZSgpIHsgcmV0dXJuIGNsb3N1cmUg
PT0gYXJndW1lbnRzLmNhbGxlZSAmJiAhdGhpcy5jbG9zdXJlOyB9KSgpIHNob3VsZCBiZSB0cnVl
IGFuZCBpcy4KK1BBU1M6IChmdW5jdGlvbiBjbG9zdXJlKCkgeyBjbG9zdXJlID0gMTsgcmV0dXJu
IGNsb3N1cmUgPT0gYXJndW1lbnRzLmNhbGxlZSAmJiAhdGhpcy5jbG9zdXJlOyB9KSgpIHNob3Vs
ZCBiZSB0cnVlIGFuZCBpcy4KK1BBU1M6IChmdW5jdGlvbiBjbG9zdXJlKGNsb3N1cmUpIHsgcmV0
dXJuIGNsb3N1cmUgPT0gMSAmJiAhdGhpcy5jbG9zdXJlOyB9KSgxKSBzaG91bGQgYmUgdHJ1ZSBh
bmQgaXMuCitQQVNTOiAoZnVuY3Rpb24gY2xvc3VyZSgpIHsgdmFyIGNsb3N1cmUgPSAxOyByZXR1
cm4gY2xvc3VyZSA9PSAxICYmICF0aGlzLmNsb3N1cmU7IH0pKCkgc2hvdWxkIGJlIHRydWUgYW5k
IGlzLgorUEFTUzogKGZ1bmN0aW9uIGNsb3N1cmUoKSB7IGZ1bmN0aW9uIGNsb3N1cmUoKSB7IH07
IHJldHVybiBjbG9zdXJlICE9IGFyZ3VtZW50cy5jYWxsZWUgJiYgIXRoaXMuY2xvc3VyZTsgfSko
KSBzaG91bGQgYmUgdHJ1ZSBhbmQgaXMuCitQQVNTOiAoZnVuY3Rpb24gY2xvc3VyZSgpIHsgcmV0
dXJuIChmdW5jdGlvbigpIHsgcmV0dXJuIGNsb3N1cmUgJiYgIXRoaXMuY2xvc3VyZTsgfSkoKTsg
fSkoKSBzaG91bGQgYmUgdHJ1ZSBhbmQgaXMuCitQQVNTOiAoZnVuY3Rpb24gY2xvc3VyZSgpIHsg
cmV0dXJuIChmdW5jdGlvbigpIHsgY2xvc3VyZSA9IG51bGw7IHJldHVybiBjbG9zdXJlICYmICF0
aGlzLmNsb3N1cmU7IH0pKCk7IH0pKCkgc2hvdWxkIGJlIHRydWUgYW5kIGlzLgorUEFTUzogKGZ1
bmN0aW9uIGNsb3N1cmUoKSB7IHJldHVybiAoZnVuY3Rpb24oKSB7IHJldHVybiBjbG9zdXJlICYm
ICF0aGlzLmNsb3N1cmU7IH0pOyB9KSgpKCkgc2hvdWxkIGJlIHRydWUgYW5kIGlzLgorUEFTUzog
KGZ1bmN0aW9uIGNsb3N1cmUoKSB7IHJldHVybiAoZnVuY3Rpb24oKSB7IGNsb3N1cmUgPSBudWxs
OyByZXR1cm4gY2xvc3VyZSAmJiAhdGhpcy5jbG9zdXJlOyB9KTsgfSkoKSgpIHNob3VsZCBiZSB0
cnVlIGFuZCBpcy4KK1BBU1M6IChmdW5jdGlvbiBjbG9zdXJlKCkgeyBldmFsKCJ2YXIgY2xvc3Vy
ZSIpOyByZXR1cm4gY2xvc3VyZSA9PSB1bmRlZmluZWQgJiYgIXRoaXMuY2xvc3VyZTsgfSkoKSBz
aG91bGQgYmUgdHJ1ZSBhbmQgaXMuCitQQVNTOiAoZnVuY3Rpb24gY2xvc3VyZSgpIHsgZXZhbCgi
ZnVuY3Rpb24gY2xvc3VyZSgpIHsgfSIpOyByZXR1cm4gY2xvc3VyZSAhPSBhcmd1bWVudHMuY2Fs
bGVlICYmICF0aGlzLmNsb3N1cmU7IH0pKCkgc2hvdWxkIGJlIHRydWUgYW5kIGlzLgorUEFTUzog
KGZ1bmN0aW9uIGNsb3N1cmUoKSB7IGV2YWwoInZhciBjbG9zdXJlOyIpOyBjbG9zdXJlID0gMTsg
cmV0dXJuIGNsb3N1cmUgPT0gMSAmJiAhdGhpcy5jbG9zdXJlOyB9KSgpIHNob3VsZCBiZSB0cnVl
IGFuZCBpcy4KK1BBU1M6IChmdW5jdGlvbiBjbG9zdXJlKCkgeyBldmFsKCJ2YXIgY2xvc3VyZSIp
OyBkZWxldGUgY2xvc3VyZTsgcmV0dXJuIGNsb3N1cmUgPT0gYXJndW1lbnRzLmNhbGxlZSAmJiAh
dGhpcy5jbG9zdXJlOyB9KSgpIHNob3VsZCBiZSB0cnVlIGFuZCBpcy4KK1BBU1M6IChmdW5jdGlv
biBjbG9zdXJlKCkgeyBldmFsKCJmdW5jdGlvbiBjbG9zdXJlKCkgeyB9Iik7IGRlbGV0ZSBjbG9z
dXJlOyByZXR1cm4gY2xvc3VyZSA9PSBhcmd1bWVudHMuY2FsbGVlICYmICF0aGlzLmNsb3N1cmU7
IH0pKCkgc2hvdWxkIGJlIHRydWUgYW5kIGlzLgorUEFTUzogKGZ1bmN0aW9uIGNsb3N1cmUoKSB7
IGV2YWwoImNsb3N1cmUgPSAxOyIpOyByZXR1cm4gY2xvc3VyZSA9PSBhcmd1bWVudHMuY2FsbGVl
ICYmICF0aGlzLmNsb3N1cmU7IH0pKCkgc2hvdWxkIGJlIHRydWUgYW5kIGlzLgogUEFTUyBzdWNj
ZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L2pzL3NjcmlwdC10ZXN0cy9uYW1lZC1mdW5jdGlvbi1leHByZXNzaW9uLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvc2NyaXB0LXRlc3RzL25hbWVkLWZ1bmN0aW9u
LWV4cHJlc3Npb24uanMJKHJldmlzaW9uIDEyNzM5MikKKysrIExheW91dFRlc3RzL2Zhc3QvanMv
c2NyaXB0LXRlc3RzL25hbWVkLWZ1bmN0aW9uLWV4cHJlc3Npb24uanMJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiBkZXNjcmlwdGlvbigKLSJCdWcgNDY5OCAtIGtqcyBkb2VzIG5vdCBh
bGxvdyBuYW1lZCBmdW5jdGlvbnMgaW4gZnVuY3Rpb24gZXhwcmVzc2lvbnMuIgorIlRlc3RzIHZh
cmlhYmxlIHJlc29sdXRpb24gcnVsZXMgZm9yIG5hbWVkIGZ1bmN0aW9uIGV4cHJlc3Npb25zLiIK
ICk7CiAKIGZ1bmN0aW9uIENhbGwobGFtYmRhKSB7IHJldHVybiBsYW1iZGEoKTsgfQpAQCAtMjQs
MyArMjQsMTA1IEBAIHNob3VsZEJlKCJ2YXIgY3RyID0gMzsgdmFyIHggPSAoZnVuY3Rpb24KIAog
ZGVidWcoInJlZ3Jlc3Npb24gdGVzdCB3aGVyZSBranMgcmVnYXJkZWQgYW4gYW5vbnltb3VzIGZ1
bmN0aW9uIGRlY2xhcmF0aW9uICh3aGljaCBpcyBpbGxlZ2FsKSBhcyBhIEZ1bmN0aW9uRXhwciIp
Owogc2hvdWxkQmUoJ3ZhciBoYWRFcnJvciA9IDA7IHRyeSB7IGV2YWwoImZ1bmN0aW9uKCl7IHJl
dHVybiAyOyB9OyIpOyB9IGNhdGNoKGUpIHsgaGFkRXJyb3IgPSAxOyB9OyBoYWRFcnJvcjsnLCAi
MSIpOworCitkZWJ1ZygiXG4tLS0tLVxuIik7CisKK2Z1bmN0aW9uIHNob3VsZEJlVHJ1ZVdpdGhE
ZXNjcmlwdGlvbih4LCB4RGVzY3JpcHRpb24pCit7CisJaWYgKHgpIHsKKwkJZGVidWcoIlBBU1M6
ICIgKyB4RGVzY3JpcHRpb24gKyAiIHNob3VsZCBiZSB0cnVlIGFuZCBpcy4iKTsKKwkJcmV0dXJu
OworCX0KKworCWRlYnVnKCJGQUlMOiAiICsgeERlc2NyaXB0aW9uICsgIiBzaG91bGQgYmUgdHJ1
ZSBidXQgaXNuJ3QuIik7Cit9CisKKy8vIFJlY3Vyc2lvbi4KK3Nob3VsZEJlVHJ1ZVdpdGhEZXNj
cmlwdGlvbigKKwkoZnVuY3Rpb24gY2xvc3VyZSgpIHsgcmV0dXJuIGNsb3N1cmUgPT0gYXJndW1l
bnRzLmNhbGxlZSAmJiAhdGhpcy5jbG9zdXJlOyB9KSgpLAorCSIoZnVuY3Rpb24gY2xvc3VyZSgp
IHsgcmV0dXJuIGNsb3N1cmUgPT0gYXJndW1lbnRzLmNhbGxlZSAmJiAhdGhpcy5jbG9zdXJlOyB9
KSgpIgorKTsKKworLy8gQXNzaWdubWVudC4KK3Nob3VsZEJlVHJ1ZVdpdGhEZXNjcmlwdGlvbigK
KwkoZnVuY3Rpb24gY2xvc3VyZSgpIHsgY2xvc3VyZSA9IDE7IHJldHVybiBjbG9zdXJlID09IGFy
Z3VtZW50cy5jYWxsZWUgJiYgIXRoaXMuY2xvc3VyZTsgfSkoKSwKKwkiKGZ1bmN0aW9uIGNsb3N1
cmUoKSB7IGNsb3N1cmUgPSAxOyByZXR1cm4gY2xvc3VyZSA9PSBhcmd1bWVudHMuY2FsbGVlICYm
ICF0aGlzLmNsb3N1cmU7IH0pKCkiCispOworCisvLyBGdW5jdGlvbiBuYW1lIHZzIHBhcmFtZXRl
ci4KK3Nob3VsZEJlVHJ1ZVdpdGhEZXNjcmlwdGlvbigKKwkoZnVuY3Rpb24gY2xvc3VyZShjbG9z
dXJlKSB7IHJldHVybiBjbG9zdXJlID09IDEgJiYgIXRoaXMuY2xvc3VyZTsgfSkoMSksCisJIihm
dW5jdGlvbiBjbG9zdXJlKGNsb3N1cmUpIHsgcmV0dXJuIGNsb3N1cmUgPT0gMSAmJiAhdGhpcy5j
bG9zdXJlOyB9KSgxKSIKKyk7CisKKy8vIEZ1bmN0aW9uIG5hbWUgdnMgdmFyLgorc2hvdWxkQmVU
cnVlV2l0aERlc2NyaXB0aW9uKAorCShmdW5jdGlvbiBjbG9zdXJlKCkgeyB2YXIgY2xvc3VyZSA9
IDE7IHJldHVybiBjbG9zdXJlID09IDEgJiYgIXRoaXMuY2xvc3VyZTsgfSkoKSwKKwkiKGZ1bmN0
aW9uIGNsb3N1cmUoKSB7IHZhciBjbG9zdXJlID0gMTsgcmV0dXJuIGNsb3N1cmUgPT0gMSAmJiAh
dGhpcy5jbG9zdXJlOyB9KSgpIgorKTsKKworLy8gRnVuY3Rpb24gbmFtZSB2cyBkZWNsYXJlZCBm
dW5jdGlvbi4KK3Nob3VsZEJlVHJ1ZVdpdGhEZXNjcmlwdGlvbigKKwkoZnVuY3Rpb24gY2xvc3Vy
ZSgpIHsgZnVuY3Rpb24gY2xvc3VyZSgpIHsgfTsgcmV0dXJuIGNsb3N1cmUgIT0gYXJndW1lbnRz
LmNhbGxlZSAmJiAhdGhpcy5jbG9zdXJlOyB9KSgpLAorCSIoZnVuY3Rpb24gY2xvc3VyZSgpIHsg
ZnVuY3Rpb24gY2xvc3VyZSgpIHsgfTsgcmV0dXJuIGNsb3N1cmUgIT0gYXJndW1lbnRzLmNhbGxl
ZSAmJiAhdGhpcy5jbG9zdXJlOyB9KSgpIgorKTsKKworLy8gUmVzb2x2ZSBiZWZvcmUgdGVhci1v
ZmYuCitzaG91bGRCZVRydWVXaXRoRGVzY3JpcHRpb24oCisJKGZ1bmN0aW9uIGNsb3N1cmUoKSB7
IHJldHVybiAoZnVuY3Rpb24oKSB7IHJldHVybiBjbG9zdXJlICYmICF0aGlzLmNsb3N1cmU7IH0p
KCk7IH0pKCksCisJIihmdW5jdGlvbiBjbG9zdXJlKCkgeyByZXR1cm4gKGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gY2xvc3VyZSAmJiAhdGhpcy5jbG9zdXJlOyB9KSgpOyB9KSgpIgorKTsKKworLy8gUmVz
b2x2ZSBhc3NpZ25tZW50IGJlZm9yZSB0ZWFyLW9mZi4KK3Nob3VsZEJlVHJ1ZVdpdGhEZXNjcmlw
dGlvbigKKwkoZnVuY3Rpb24gY2xvc3VyZSgpIHsgcmV0dXJuIChmdW5jdGlvbigpIHsgY2xvc3Vy
ZSA9IG51bGw7IHJldHVybiBjbG9zdXJlICYmICF0aGlzLmNsb3N1cmU7IH0pKCk7IH0pKCksCisJ
IihmdW5jdGlvbiBjbG9zdXJlKCkgeyByZXR1cm4gKGZ1bmN0aW9uKCkgeyBjbG9zdXJlID0gbnVs
bDsgcmV0dXJuIGNsb3N1cmUgJiYgIXRoaXMuY2xvc3VyZTsgfSkoKTsgfSkoKSIKKyk7CisKKy8v
IFJlc29sdmUgYWZ0ZXIgdGVhci1vZmYuCitzaG91bGRCZVRydWVXaXRoRGVzY3JpcHRpb24oCisJ
KGZ1bmN0aW9uIGNsb3N1cmUoKSB7IHJldHVybiAoZnVuY3Rpb24oKSB7IHJldHVybiBjbG9zdXJl
ICYmICF0aGlzLmNsb3N1cmU7IH0pOyB9KSgpKCksCisJIihmdW5jdGlvbiBjbG9zdXJlKCkgeyBy
ZXR1cm4gKGZ1bmN0aW9uKCkgeyByZXR1cm4gY2xvc3VyZSAmJiAhdGhpcy5jbG9zdXJlOyB9KTsg
fSkoKSgpIgorKTsKKworLy8gUmVzb2x2ZSBhc3NpZ25tZW50IGFmdGVyIHRlYXItb2ZmLgorc2hv
dWxkQmVUcnVlV2l0aERlc2NyaXB0aW9uKAorCShmdW5jdGlvbiBjbG9zdXJlKCkgeyByZXR1cm4g
KGZ1bmN0aW9uKCkgeyBjbG9zdXJlID0gbnVsbDsgcmV0dXJuIGNsb3N1cmUgJiYgIXRoaXMuY2xv
c3VyZTsgfSk7IH0pKCkoKSwKKwkiKGZ1bmN0aW9uIGNsb3N1cmUoKSB7IHJldHVybiAoZnVuY3Rp
b24oKSB7IGNsb3N1cmUgPSBudWxsOyByZXR1cm4gY2xvc3VyZSAmJiAhdGhpcy5jbG9zdXJlOyB9
KTsgfSkoKSgpIgorKTsKKworLy8gRXZhbCB2YXIgc2hhZG93aW5nIChzaG91bGQgb3ZlcndyaXRl
KS4KK3Nob3VsZEJlVHJ1ZVdpdGhEZXNjcmlwdGlvbigKKwkoZnVuY3Rpb24gY2xvc3VyZSgpIHsg
ZXZhbCgidmFyIGNsb3N1cmUiKTsgcmV0dXJuIGNsb3N1cmUgPT0gdW5kZWZpbmVkICYmICF0aGlz
LmNsb3N1cmU7IH0pKCksCisJIihmdW5jdGlvbiBjbG9zdXJlKCkgeyBldmFsKFwidmFyIGNsb3N1
cmVcIik7IHJldHVybiBjbG9zdXJlID09IHVuZGVmaW5lZCAmJiAhdGhpcy5jbG9zdXJlOyB9KSgp
IgorKTsKKworLy8gRXZhbCBmdW5jdGlvbiBzaGFkb3dpbmcgKHNob3VsZCBvdmVyd3JpdGUpLgor
c2hvdWxkQmVUcnVlV2l0aERlc2NyaXB0aW9uKAorCShmdW5jdGlvbiBjbG9zdXJlKCkgeyBldmFs
KCJmdW5jdGlvbiBjbG9zdXJlKCkgeyB9Iik7IHJldHVybiBjbG9zdXJlICE9IGFyZ3VtZW50cy5j
YWxsZWUgJiYgIXRoaXMuY2xvc3VyZTsgfSkoKSwKKwkiKGZ1bmN0aW9uIGNsb3N1cmUoKSB7IGV2
YWwoXCJmdW5jdGlvbiBjbG9zdXJlKCkgeyB9XCIpOyByZXR1cm4gY2xvc3VyZSAhPSBhcmd1bWVu
dHMuY2FsbGVlICYmICF0aGlzLmNsb3N1cmU7IH0pKCkiCispOworCisvLyBFdmFsIHNoYWRvd2lu
ZyAoc2hvdWxkIG92ZXJ3cml0ZSksIGZvbGxvd2VkIGJ5IHB1dCAoc2hvdWxkIG92ZXJ3cml0ZSku
CitzaG91bGRCZVRydWVXaXRoRGVzY3JpcHRpb24oCisJKGZ1bmN0aW9uIGNsb3N1cmUoKSB7IGV2
YWwoInZhciBjbG9zdXJlOyIpOyBjbG9zdXJlID0gMTsgcmV0dXJuIGNsb3N1cmUgPT0gMSAmJiAh
dGhpcy5jbG9zdXJlOyB9KSgpLAorCSIoZnVuY3Rpb24gY2xvc3VyZSgpIHsgZXZhbChcInZhciBj
bG9zdXJlO1wiKTsgY2xvc3VyZSA9IDE7IHJldHVybiBjbG9zdXJlID09IDEgJiYgIXRoaXMuY2xv
c3VyZTsgfSkoKSIKKyk7CisKKy8vIEV2YWwgdmFyIHNoYWRvd2luZywgZm9sbG93ZWQgYnkgZGVs
ZXRlIChzaG91bGQgbm90IG92ZXJ3cml0ZSkuCitzaG91bGRCZVRydWVXaXRoRGVzY3JpcHRpb24o
CisJKGZ1bmN0aW9uIGNsb3N1cmUoKSB7IGV2YWwoInZhciBjbG9zdXJlIik7IGRlbGV0ZSBjbG9z
dXJlOyByZXR1cm4gY2xvc3VyZSA9PSBhcmd1bWVudHMuY2FsbGVlICYmICF0aGlzLmNsb3N1cmU7
IH0pKCksCisJIihmdW5jdGlvbiBjbG9zdXJlKCkgeyBldmFsKFwidmFyIGNsb3N1cmVcIik7IGRl
bGV0ZSBjbG9zdXJlOyByZXR1cm4gY2xvc3VyZSA9PSBhcmd1bWVudHMuY2FsbGVlICYmICF0aGlz
LmNsb3N1cmU7IH0pKCkiCispOworCisvLyBFdmFsIGZ1bmN0aW9uIHNoYWRvd2luZywgZm9sbG93
ZWQgYnkgZGVsZXRlIChzaG91bGQgbm90IG92ZXJ3cml0ZSkuCitzaG91bGRCZVRydWVXaXRoRGVz
Y3JpcHRpb24oCisJKGZ1bmN0aW9uIGNsb3N1cmUoKSB7IGV2YWwoImZ1bmN0aW9uIGNsb3N1cmUo
KSB7IH0iKTsgZGVsZXRlIGNsb3N1cmU7IHJldHVybiBjbG9zdXJlID09IGFyZ3VtZW50cy5jYWxs
ZWUgJiYgIXRoaXMuY2xvc3VyZTsgfSkoKSwKKwkiKGZ1bmN0aW9uIGNsb3N1cmUoKSB7IGV2YWwo
XCJmdW5jdGlvbiBjbG9zdXJlKCkgeyB9XCIpOyBkZWxldGUgY2xvc3VyZTsgcmV0dXJuIGNsb3N1
cmUgPT0gYXJndW1lbnRzLmNhbGxlZSAmJiAhdGhpcy5jbG9zdXJlOyB9KSgpIgorKTsKKworLy8g
RXZhbCBhc3NpZ25tZW50IChzaG91bGQgbm90IG92ZXJ3cml0ZSkuCitzaG91bGRCZVRydWVXaXRo
RGVzY3JpcHRpb24oCisJKGZ1bmN0aW9uIGNsb3N1cmUoKSB7IGV2YWwoImNsb3N1cmUgPSAxOyIp
OyByZXR1cm4gY2xvc3VyZSA9PSBhcmd1bWVudHMuY2FsbGVlICYmICF0aGlzLmNsb3N1cmU7IH0p
KCksCisJIihmdW5jdGlvbiBjbG9zdXJlKCkgeyBldmFsKFwiY2xvc3VyZSA9IDE7XCIpOyByZXR1
cm4gY2xvc3VyZSA9PSBhcmd1bWVudHMuY2FsbGVlICYmICF0aGlzLmNsb3N1cmU7IH0pKCkiCisp
Owo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>162413</attachid>
            <date>2012-09-05 21:54:02 -0700</date>
            <delta_ts>2012-09-05 21:58:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-95659-20120905215343.patch</filename>
            <type>text/plain</type>
            <size>46898</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTI3Njg5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk0IEBA
CisyMDEyLTA5LTA1ICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAg
ICAgTmFtZWQgZnVuY3Rpb25zIHNob3VsZCBub3QgYWxsb2NhdGUgc2NvcGUgb2JqZWN0cyBmb3Ig
dGhlaXIgbmFtZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTk1NjU5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgT2xpdmVyIEh1bnQuCisKKyAgICAgICAg
SW4gbW9zdCBjYXNlcywgd2UgY2FuIG1lcmdlIGEgZnVuY3Rpb24gZXhwcmVzc2lvbidzIG5hbWUg
aW50byBpdHMgc3ltYm9sCisgICAgICAgIHRhYmxlLiBUaGlzIHJlZHVjZXMgbWVtb3J5IGZvb3Rw
cmludCBwZXIgY2xvc3VyZSBmcm9tIHRocmVlIG9iamVjdHMKKyAgICAgICAgKGZ1bmN0aW9uICsg
YWN0aXZhdGlvbiArIG5hbWUgc2NvcGUpIHRvIHR3byAoZnVuY3Rpb24gKyBhY3RpdmF0aW9uKSwK
KyAgICAgICAgc3BlZWRzIHVwIGNsb3N1cmUgYWxsb2NhdGlvbiwgYW5kIHNwZWVkcyB1cCByZWN1
cnNpdmUgY2FsbHMuCisKKyAgICAgICAgSW4gdGhlIGNhc2Ugb2YgYSBuYW1lZCBmdW5jdGlvbiBl
eHByZXNzaW9uIHRoYXQgY29udGFpbnMgYSBub24tc3RyaWN0CisgICAgICAgIGV2YWwsIHRoZSBy
dWxlcyBhcmUgc28gYmF0LXBvb3AgY3JhenkgdGhhdCBJIGRvbid0IGtub3cgaG93IHRvIG1vZGVs
CisgICAgICAgIHRoZW0gd2l0aG91dCBhbiBleHRyYSBvYmplY3QuIFNpbmNlIGZ1bmN0aW9ucyBu
b3cgZGVmYXVsdCB0byBub3QgaGF2aW5nCisgICAgICAgIHN1Y2ggYW4gb2JqZWN0LCB0aGlzIGNh
c2UgbmVlZHMgdG8gYWxsb2NhdGUgdGhlIG9iamVjdCBvbiBmdW5jdGlvbgorICAgICAgICBlbnRy
eS4KKworICAgICAgICBUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggbWFrZXMgdGhlIHNsb3cgY2FzZSBh
IGJpdCBzbG93ZXIgc28gdGhlIGZhc3QgY2FzZQorICAgICAgICBjYW4gYmUgZmFzdGVyIGFuZCBt
b3JlIG1lbW9yeS1lZmZpY2llbnQuIChOb3RlIHRoYXQgdGhlIHNsb3cgY2FzZSBhbHJlYWR5Cisg
ICAgICAgIGFsbG9jYXRlcyBhbiBhY3RpdmF0aW9uIG9uIGVudHJ5LCBhbmQgdW50aWwgcmVjZW50
bHkgYWxzbyBhbGxvY2F0ZWQgYQorICAgICAgICBzY29wZSBjaGFpbiBub2RlIG9uIGVudHJ5LCBz
byBhZGRpbmcgb25lIGFsbG9jYXRpb24gb24gZW50cnkgc2hvdWxkbid0CisgICAgICAgIGJyZWFr
IHRoZSBiYW5rLikKKworICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6Q29kZUJsb2NrKTogQ2F1Z2h0IGEgbWlzc2VkIGluaXRpYWxpemVy
LiBObyBiZWhhdmlvciBjaGFuZ2UuCisKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVH
ZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVH
ZW5lcmF0b3IpOiBQdXQgdGhlIGNhbGxlZSBpbiBzdGF0aWMgc2NvcGUKKyAgICAgICAgZHVyaW5n
IGNvbXBpbGF0aW9uIHNvIGl0IGRvZXNuJ3QgbmVlZCB0byBiZSBpbiBkeW5hbWljIHNjb3BlIGF0
IHJ1bnRpbWUuCisKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnJlc29sdmVDYWxs
ZWUpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6YWRkQ2FsbGVlKTogSGVscGVy
IGZ1bmN0aW9ucyBmb3IgZWl0aGVyIHN0YXRpY2FsbHkKKyAgICAgICAgcmVzb2x2aW5nIHRoZSBj
YWxsZWUgb3IgYWRkaW5nIGEgZHluYW1pYyBzY29wZSB0aGF0IHdpbGwgcmVzb2x2ZSB0byBpdCwK
KyAgICAgICAgZGVwZW5kaW5nIG9uIHdoZXRoZXIgeW91J3JlIGluIHRoZSBmYXN0IHBhdGguCisK
KyAgICAgICAgV2UgbW92ZSB0aGUgY2FsbGVlIGludG8gYSB2YXIgbG9jYXRpb24gaWYgaXQncyBj
YXB0dXJlZCBiZWNhdXNlIGFjdGl2YXRpb25zCisgICAgICAgIHByZWZlciB0byBoYXZlIGNvbnRp
Z3VvdXMgcmFuZ2VzIG9mIGNhcHR1cmVkIHZhcmlhYmxlcy4KKworICAgICAgICAqIGJ5dGVjb21w
aWxlci9CeXRlY29kZUdlbmVyYXRvci5oOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRv
cjo6cmVnaXN0ZXJGb3IpOgorICAgICAgICAoQnl0ZWNvZGVHZW5lcmF0b3IpOgorCisgICAgICAg
ICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJl
dGVyLmNwcDoKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKToKKyAg
ICAgICAgKiBqaXQvSklUU3R1YnMuY3BwOgorICAgICAgICAoSlNDOjpERUZJTkVfU1RVQl9GVU5D
VElPTik6CisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlND
OjpMTEludDo6TExJTlRfU0xPV19QQVRIX0RFQ0wpOiBUaGlzIGlzIHRoZSBwb2ludCBvZiB0aGUg
cGF0Y2g6IHJlbW92ZQorICAgICAgICBvbmUgYWxsb2NhdGlvbiBpbiB0aGUgY2FzZSBvZiBhIG5h
bWVkIGZ1bmN0aW9uIGV4cHJlc3Npb24uCisKKyAgICAgICAgKiBwYXJzZXIvUGFyc2VyLmNwcDoK
KyAgICAgICAgKEpTQzo6OjpQYXJzZXIpOgorICAgICAgICAqIHBhcnNlci9QYXJzZXIuaDoKKyAg
ICAgICAgKEpTQzo6U2NvcGU6OmRlY2xhcmVDYWxsZWUpOgorICAgICAgICAoU2NvcGUpOgorICAg
ICAgICAoUGFyc2VyKToKKyAgICAgICAgKEpTQzo6cGFyc2UpOgorICAgICAgICAqIHJ1bnRpbWUv
RXhlY3V0YWJsZS5jcHA6CisgICAgICAgIChKU0M6OkV2YWxFeGVjdXRhYmxlOjpjb21waWxlSW50
ZXJuYWwpOgorICAgICAgICAoSlNDOjpQcm9ncmFtRXhlY3V0YWJsZTo6Y2hlY2tTeW50YXgpOgor
ICAgICAgICAoSlNDOjpQcm9ncmFtRXhlY3V0YWJsZTo6Y29tcGlsZUludGVybmFsKToKKyAgICAg
ICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpwcm9kdWNlQ29kZUJsb2NrRm9yKToKKyAgICAg
ICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpmcm9tR2xvYmFsQ29kZSk6IFBpcGUgdGhlIGNh
bGxlZSdzIG5hbWUgdGhyb3VnaAorICAgICAgICB0aGUgcGFyc2VyIHNvIHdlIGdldCBhY2N1cmF0
ZSBpbmZvcm1hdGlvbiBvbiB3aGV0aGVyIHRoZSBjYWxsZWUgd2FzIGNhcHR1cmVkLgorCisgICAg
ICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6RnVuY3Rpb25FeGVjdXRhYmxlKToKKyAgICAg
ICAgKEpTQzo6RXZhbEV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5hbCk6CisgICAgICAgIChKU0M6
OlByb2dyYW1FeGVjdXRhYmxlOjpjaGVja1N5bnRheCk6CisgICAgICAgIChKU0M6OlByb2dyYW1F
eGVjdXRhYmxlOjpjb21waWxlSW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1
dGFibGU6OnByb2R1Y2VDb2RlQmxvY2tGb3IpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1
dGFibGU6OmZyb21HbG9iYWxDb2RlKToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuaDoK
KyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGUpOgorICAgICAgICAoRnVu
Y3Rpb25FeGVjdXRhYmxlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpmaW5p
c2hDcmVhdGlvbik6IEkgaGFkIHRvIHJlZmFjdG9yIGZ1bmN0aW9uCisgICAgICAgIGNyZWF0aW9u
IHRvIHN1cHBvcnQgdGhlIGZvbGxvd2luZyBmdW5jdGlvbiBjb25zdHJ1Y3RvciBxdWlyazogdGhl
IGZ1bmN0aW9uCisgICAgICAgIGdldHMgYSBuYW1lLCBidXQgaXRzIG5hbWUgaXMgbm90IGluIGxl
eGljYWwgc2NvcGUuCisKKyAgICAgICAgVG8gc2ltcGxpZnkgdGhpcywgRnVuY3Rpb25FeGVjdXRh
YmxlIG5vdyBhdXRvbWF0aWNhbGx5IGV4dHJhY3RzIGFsbCB0aGUKKyAgICAgICAgZGF0YSBpdCBu
ZWVkcyBmcm9tIHRoZSBwYXJzZWQgbm9kZS4gVGhlIHNwZWNpYWwgImZyb21HbG9iYWxDb2RlIiBw
YXRoCisgICAgICAgIHVzZWQgYnkgdGhlIGZ1bmN0aW9uIGNvbnN0cnVjdG9yIGNyZWF0ZXMgYW4g
YW5vbnltb3VzIGZ1bmN0aW9uLCBhbmQgdGhlbgorICAgICAgICBxdWlya2lseSBzZXRzIHRoZSB2
YWx1ZSB1c2VkIGJ5IHRoZSAubmFtZSBwcm9wZXJ0eSB0byBiZSBub24tbnVsbCwgZXZlbgorICAg
ICAgICB0aG91Z2ggdGhlIHBhcnNlZCBuYW1lIGlzIG51bGwuCisKKyAgICAgICAgKiBydW50aW1l
L0pTTmFtZVNjb3BlLmg6CisgICAgICAgIChKU0M6OkpTTmFtZVNjb3BlOjpjcmVhdGUpOgorICAg
ICAgICAoSlNDOjpKU05hbWVTY29wZTo6SlNOYW1lU2NvcGUpOiBBZGRlZCBzdXBwb3J0IGZvciBl
eHBsaWNpdGx5IHNwZWNpZnlpbmcKKyAgICAgICAgeW91ciBjb250YWluZXIgc2NvcGUuIFRoZSBj
b21waWxlciB1c2VzIHRoaXMgZm9yIG5hbWVkIGZ1bmN0aW9uIGV4cHJlc3Npb25zLgorCiAyMDEy
LTA5LTA1ICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4KIAogICAg
ICAgICBhID0gZGF0YVthXSsrOyBzZXRzIHRoZSB3cm9uZyBrZXkgaW4gZGF0YQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDEy
NzY0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNzUyLDYgKzE3NTIsNyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhT
Y3JpcHRFeGVjdXRhYmxlKiBvCiAgICAgLCBtX2hlYXAoJm1fZ2xvYmFsT2JqZWN0LT5nbG9iYWxE
YXRhKCkuaGVhcCkKICAgICAsIG1fbnVtQ2FsbGVlUmVnaXN0ZXJzKDApCiAgICAgLCBtX251bVZh
cnMoMCkKKyAgICAsIG1fbnVtQ2FwdHVyZWRWYXJzKDApCiAgICAgLCBtX2lzQ29uc3RydWN0b3Io
aXNDb25zdHJ1Y3RvcikKICAgICAsIG1fbnVtUGFyYW1ldGVycygwKQogICAgICwgbV9vd25lckV4
ZWN1dGFibGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCksIG93bmVyRXhlY3V0YWJsZSwgb3du
ZXJFeGVjdXRhYmxlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDEyNzY0OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMSArMzMsMTEgQEAKIAogI2luY2x1ZGUgIkJhdGNoZWRU
cmFuc2l0aW9uT3B0aW1pemVyLmgiCiAjaW5jbHVkZSAiQ29tbWVudC5oIgorI2luY2x1ZGUgIklu
dGVycHJldGVyLmgiCiAjaW5jbHVkZSAiSlNBY3RpdmF0aW9uLmgiCiAjaW5jbHVkZSAiSlNGdW5j
dGlvbi5oIgotI2luY2x1ZGUgIkludGVycHJldGVyLmgiCisjaW5jbHVkZSAiSlNOYW1lU2NvcGUu
aCIKICNpbmNsdWRlICJMb3dMZXZlbEludGVycHJldGVyLmgiCi0KICNpbmNsdWRlICJTdHJvbmdJ
bmxpbmVzLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTMyNCw3ICsz
MjQsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoUHJvCiAgICAgICAg
IGJvb2wgcHJvcGVydHlEaWRFeGlzdCA9IAogICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT5yZW1v
dmVEaXJlY3QoKm1fZ2xvYmFsRGF0YSwgZnVuY3Rpb24tPmlkZW50KCkpOyAvLyBOZXdseSBkZWNs
YXJlZCBmdW5jdGlvbnMgb3ZlcndyaXRlIGV4aXN0aW5nIHByb3BlcnRpZXMuCiAgICAgICAgIAot
ICAgICAgICBKU1ZhbHVlIHZhbHVlID0gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIG1ha2VGdW5j
dGlvbihleGVjLCBmdW5jdGlvbiksIHNjb3BlKTsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpT
RnVuY3Rpb246OmNyZWF0ZShleGVjLCBGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZSgqbV9nbG9i
YWxEYXRhLCBmdW5jdGlvbiksIHNjb3BlKTsKICAgICAgICAgaW50IGluZGV4ID0gYWRkR2xvYmFs
VmFyKAogICAgICAgICAgICAgZnVuY3Rpb24tPmlkZW50KCksIElzVmFyaWFibGUsCiAgICAgICAg
ICAgICAhcHJvcGVydHlEaWRFeGlzdCA/IElzRnVuY3Rpb25Ub1NwZWNpYWxpemUgOiBOb3RGdW5j
dGlvbk9yTm90U3BlY2lhbGl6YWJsZSk7CkBAIC00MTksNiArNDE5LDggQEAgQnl0ZWNvZGVHZW5l
cmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKEZ1bgogICAgICAgICB9CiAgICAgfQogCisgICAgUmVn
aXN0ZXJJRCogY2FsbGVlUmVnaXN0ZXIgPSByZXNvbHZlQ2FsbGVlKGZ1bmN0aW9uQm9keSk7IC8v
IE1heSBwdXNoIHRvIHRoZSBzY29wZSBjaGFpbiBhbmQvb3IgYWRkIGEgY2FwdHVyZWQgdmFyLgor
CiAgICAgY29uc3QgRGVjbGFyYXRpb25TdGFja3M6OkZ1bmN0aW9uU3RhY2smIGZ1bmN0aW9uU3Rh
Y2sgPSBmdW5jdGlvbkJvZHktPmZ1bmN0aW9uU3RhY2soKTsKICAgICBjb25zdCBEZWNsYXJhdGlv
blN0YWNrczo6VmFyU3RhY2smIHZhclN0YWNrID0gZnVuY3Rpb25Cb2R5LT52YXJTdGFjaygpOwog
CkBAIC00NTYsNiArNDU4LDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9y
KEZ1bgogICAgIH0KIAogICAgIGNvZGVCbG9jay0+bV9udW1DYXB0dXJlZFZhcnMgPSBjb2RlQmxv
Y2stPm1fbnVtVmFyczsKKwogICAgIG1fZmlyc3RMYXp5RnVuY3Rpb24gPSBjb2RlQmxvY2stPm1f
bnVtVmFyczsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZ1bmN0aW9uU3RhY2suc2l6ZSgp
OyArK2kpIHsKICAgICAgICAgRnVuY3Rpb25Cb2R5Tm9kZSogZnVuY3Rpb24gPSBmdW5jdGlvblN0
YWNrW2ldOwpAQCAtNDk3LDYgKzUwMCw5IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdl
bmVyYXRvcihGdW4KIAogICAgIHByZXNlcnZlTGFzdFZhcigpOwogCisgICAgLy8gV2UgZGVjbGFy
ZSB0aGUgY2FsbGVlJ3MgbmFtZSBsYXN0IGJlY2F1c2UgaXQgc2hvdWxkIGxvc2UgdG8gYSB2YXIs
IGZ1bmN0aW9uLCBhbmQvb3IgcGFyYW1ldGVyIGRlY2xhcmF0aW9uLgorICAgIGFkZENhbGxlZShm
dW5jdGlvbkJvZHksIGNhbGxlZVJlZ2lzdGVyKTsKKwogICAgIGlmIChpc0NvbnN0cnVjdG9yKCkp
IHsKICAgICAgICAgcHJlcGVuZENvbW1lbnQoIid0aGlzJyBiZWNhdXNlIHdlIGFyZSBhIENvbnN0
cnVjdG9yIGZ1bmN0aW9uIik7CiAgICAgICAgIGVtaXRPcGNvZGUob3BfY3JlYXRlX3RoaXMpOwpA
QCAtNTQ5LDcgKzU1NSw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihF
dmEKIAogICAgIGNvbnN0IERlY2xhcmF0aW9uU3RhY2tzOjpGdW5jdGlvblN0YWNrJiBmdW5jdGlv
blN0YWNrID0gZXZhbE5vZGUtPmZ1bmN0aW9uU3RhY2soKTsKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGZ1bmN0aW9uU3RhY2suc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fY29kZUJsb2NrLT5h
ZGRGdW5jdGlvbkRlY2wobWFrZUZ1bmN0aW9uKG1fZ2xvYmFsRGF0YSwgZnVuY3Rpb25TdGFja1tp
XSkpOworICAgICAgICBtX2NvZGVCbG9jay0+YWRkRnVuY3Rpb25EZWNsKEZ1bmN0aW9uRXhlY3V0
YWJsZTo6Y3JlYXRlKCptX2dsb2JhbERhdGEsIGZ1bmN0aW9uU3RhY2tbaV0pKTsKIAogICAgIGNv
bnN0IERlY2xhcmF0aW9uU3RhY2tzOjpWYXJTdGFjayYgdmFyU3RhY2sgPSBldmFsTm9kZS0+dmFy
U3RhY2soKTsKICAgICB1bnNpZ25lZCBudW1WYXJpYWJsZXMgPSB2YXJTdGFjay5zaXplKCk7CkBA
IC01NzQsNiArNTgwLDUzIEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SW5p
dEwKICAgICByZXR1cm4gcmVnOwogfQogCitSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6
cmVzb2x2ZUNhbGxlZShGdW5jdGlvbkJvZHlOb2RlKiBmdW5jdGlvbkJvZHlOb2RlKQoreworICAg
IGlmIChmdW5jdGlvbkJvZHlOb2RlLT5pZGVudCgpLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIG1fY2FsbGVlUmVnaXN0ZXIuc2V0SW5kZXgoUmVnaXN0ZXJGaWxlOjpDYWxsZWUp
OworCisgICAgLy8gSWYgbm9uLXN0cmljdCBldmFsIGlzIGluIHBsYXksIHdlIHVzZSBhIHNlcGFy
YXRlIG9iamVjdCBpbiB0aGUgc2NvcGUgY2hhaW4gZm9yIHRoZSBjYWxsZWUncyBuYW1lLgorICAg
IGlmICgobV9jb2RlQmxvY2stPnVzZXNFdmFsKCkgJiYgIW1fY29kZUJsb2NrLT5pc1N0cmljdE1v
ZGUoKSkgfHwgbV9zaG91bGRFbWl0RGVidWdIb29rcykgeworICAgICAgICBlbWl0T3Bjb2RlKG9w
X3B1c2hfbmFtZV9zY29wZSk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25z
dGFudChmdW5jdGlvbkJvZHlOb2RlLT5pZGVudCgpKSk7CisgICAgICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZChtX2NhbGxlZVJlZ2lzdGVyLmluZGV4KCkpOworICAgICAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQoUmVhZE9ubHkgfCBEb250RGVsZXRlKTsKKworICAgICAgICAvLyBQdXQgYSBtaXJy
b3Igb2JqZWN0IGluIGNvbXBpbGF0aW9uIHNjb3BlLCBzbyBjb21waWxlLXRpbWUgdmFyaWFibGUg
cmVzb2x1dGlvbiBzZWVzIHRoZSBwcm9wZXJ0eSBuYW1lIHdlJ2xsIHNlZSBhdCBydW50aW1lLgor
ICAgICAgICBtX3Njb3BlLnNldCgqZ2xvYmFsRGF0YSgpLAorICAgICAgICAgICAgSlNOYW1lU2Nv
cGU6OmNyZWF0ZSgKKyAgICAgICAgICAgICAgICBtX3Njb3BlLT5nbG9iYWxPYmplY3QoKS0+Z2xv
YmFsRXhlYygpLAorICAgICAgICAgICAgICAgIGZ1bmN0aW9uQm9keU5vZGUtPmlkZW50KCksCisg
ICAgICAgICAgICAgICAganNVbmRlZmluZWQoKSwKKyAgICAgICAgICAgICAgICBSZWFkT25seSB8
IERvbnREZWxldGUsCisgICAgICAgICAgICAgICAgbV9zY29wZS5nZXQoKQorICAgICAgICAgICAg
KQorICAgICAgICApOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAoIWZ1bmN0
aW9uQm9keU5vZGUtPmNhcHR1cmVzKGZ1bmN0aW9uQm9keU5vZGUtPmlkZW50KCkpKQorICAgICAg
ICByZXR1cm4gJm1fY2FsbGVlUmVnaXN0ZXI7CisKKyAgICAvLyBNb3ZlIHRoZSBjYWxsZWUgaW50
byB0aGUgY2FwdHVyZWQgc2VjdGlvbiBvZiB0aGUgc3RhY2suCisgICAgcmV0dXJuIGVtaXRNb3Zl
KGFkZFZhcigpLCAmbV9jYWxsZWVSZWdpc3Rlcik7Cit9CisKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0
b3I6OmFkZENhbGxlZShGdW5jdGlvbkJvZHlOb2RlKiBmdW5jdGlvbkJvZHlOb2RlLCBSZWdpc3Rl
cklEKiBjYWxsZWVSZWdpc3RlcikKK3sKKyAgICBpZiAoZnVuY3Rpb25Cb2R5Tm9kZS0+aWRlbnQo
KS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gSWYgbm9uLXN0cmljdCBldmFs
IGlzIGluIHBsYXksIHdlIHVzZSBhIHNlcGFyYXRlIG9iamVjdCBpbiB0aGUgc2NvcGUgY2hhaW4g
Zm9yIHRoZSBjYWxsZWUncyBuYW1lLgorICAgIGlmICgobV9jb2RlQmxvY2stPnVzZXNFdmFsKCkg
JiYgIW1fY29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSkgfHwgbV9zaG91bGRFbWl0RGVidWdIb29r
cykKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKGNhbGxlZVJlZ2lzdGVyKTsKKyAgICBz
eW1ib2xUYWJsZSgpLmFkZChmdW5jdGlvbkJvZHlOb2RlLT5pZGVudCgpLmltcGwoKSwgU3ltYm9s
VGFibGVFbnRyeShjYWxsZWVSZWdpc3Rlci0+aW5kZXgoKSwgUmVhZE9ubHkpKTsKK30KKwogdm9p
ZCBCeXRlY29kZUdlbmVyYXRvcjo6YWRkUGFyYW1ldGVyKGNvbnN0IElkZW50aWZpZXImIGlkZW50
LCBpbnQgcGFyYW1ldGVySW5kZXgpCiB7CiAgICAgLy8gUGFyYW1ldGVycyBvdmVyd3JpdGUgdmFy
IGRlY2xhcmF0aW9ucywgYnV0IG5vdCBmdW5jdGlvbiBkZWNsYXJhdGlvbnMuCkBAIC0xODMwLDE0
ICsxODgzLDE0IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3QXIKIAog
UmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXROZXdGdW5jdGlvbihSZWdpc3RlcklE
KiBkc3QsIEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9uKQogewotICAgIHJldHVybiBlbWl0TmV3
RnVuY3Rpb25JbnRlcm5hbChkc3QsIG1fY29kZUJsb2NrLT5hZGRGdW5jdGlvbkRlY2wobWFrZUZ1
bmN0aW9uKG1fZ2xvYmFsRGF0YSwgZnVuY3Rpb24pKSwgZmFsc2UpOworICAgIHJldHVybiBlbWl0
TmV3RnVuY3Rpb25JbnRlcm5hbChkc3QsIG1fY29kZUJsb2NrLT5hZGRGdW5jdGlvbkRlY2woRnVu
Y3Rpb25FeGVjdXRhYmxlOjpjcmVhdGUoKm1fZ2xvYmFsRGF0YSwgZnVuY3Rpb24pKSwgZmFsc2Up
OwogfQogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdExhenlOZXdGdW5jdGlv
bihSZWdpc3RlcklEKiBkc3QsIEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9uKQogewogICAgIEZ1
bmN0aW9uT2Zmc2V0TWFwOjpBZGRSZXN1bHQgcHRyID0gbV9mdW5jdGlvbk9mZnNldHMuYWRkKGZ1
bmN0aW9uLCAwKTsKICAgICBpZiAocHRyLmlzTmV3RW50cnkpCi0gICAgICAgIHB0ci5pdGVyYXRv
ci0+c2Vjb25kID0gbV9jb2RlQmxvY2stPmFkZEZ1bmN0aW9uRGVjbChtYWtlRnVuY3Rpb24obV9n
bG9iYWxEYXRhLCBmdW5jdGlvbikpOworICAgICAgICBwdHIuaXRlcmF0b3ItPnNlY29uZCA9IG1f
Y29kZUJsb2NrLT5hZGRGdW5jdGlvbkRlY2woRnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGUoKm1f
Z2xvYmFsRGF0YSwgZnVuY3Rpb24pKTsKICAgICByZXR1cm4gZW1pdE5ld0Z1bmN0aW9uSW50ZXJu
YWwoZHN0LCBwdHIuaXRlcmF0b3ItPnNlY29uZCwgdHJ1ZSk7CiB9CiAKQEAgLTE4NjIsNyArMTkx
NSw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3UmUKIFJlZ2lzdGVy
SUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3RnVuY3Rpb25FeHByZXNzaW9uKFJlZ2lzdGVy
SUQqIHIwLCBGdW5jRXhwck5vZGUqIG4pCiB7CiAgICAgRnVuY3Rpb25Cb2R5Tm9kZSogZnVuY3Rp
b24gPSBuLT5ib2R5KCk7Ci0gICAgdW5zaWduZWQgaW5kZXggPSBtX2NvZGVCbG9jay0+YWRkRnVu
Y3Rpb25FeHByKG1ha2VGdW5jdGlvbihtX2dsb2JhbERhdGEsIGZ1bmN0aW9uKSk7CisgICAgdW5z
aWduZWQgaW5kZXggPSBtX2NvZGVCbG9jay0+YWRkRnVuY3Rpb25FeHByKEZ1bmN0aW9uRXhlY3V0
YWJsZTo6Y3JlYXRlKCptX2dsb2JhbERhdGEsIGZ1bmN0aW9uKSk7CiAgICAgCiAgICAgY3JlYXRl
QWN0aXZhdGlvbklmTmVjZXNzYXJ5KCk7CiAgICAgZW1pdE9wY29kZShvcF9uZXdfZnVuY19leHAp
OwpAQCAtMjU5OSw3ICsyNjUyLDcgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFJlYWRP
bmx5RXhjZQogICAgIGlmICghaXNTdHJpY3RNb2RlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IFJlZlB0cjxSZWdpc3RlcklEPiBlcnJvciA9IGVtaXRMb2FkKG5ld1RlbXBvcmFyeSgpLCBjcmVh
dGVUeXBlRXJyb3Ioc2NvcGUoKS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSwgU3RyaWN0
TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKSk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IGVycm9yID0gZW1pdExvYWQobmV3VGVtcG9yYXJ5KCksIEpTVmFsdWUoY3JlYXRlVHlwZUVycm9y
KHNjb3BlKCktPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCksIFN0cmljdE1vZGVSZWFkb25s
eVByb3BlcnR5V3JpdGVFcnJvcikpKTsKICAgICBlbWl0VGhyb3coZXJyb3IuZ2V0KCkpOwogfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiAxMjc2NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTYxNyw3ICs2MTcsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgaW50IGFkZEdsb2JhbFZh
cihjb25zdCBJZGVudGlmaWVyJiwgQ29uc3RhbnRNb2RlLCBGdW5jdGlvbk1vZGUpOwogCiAgICAg
ICAgIHZvaWQgYWRkUGFyYW1ldGVyKGNvbnN0IElkZW50aWZpZXImLCBpbnQgcGFyYW1ldGVySW5k
ZXgpOwotICAgICAgICAKKyAgICAgICAgUmVnaXN0ZXJJRCogcmVzb2x2ZUNhbGxlZShGdW5jdGlv
bkJvZHlOb2RlKik7CisgICAgICAgIHZvaWQgYWRkQ2FsbGVlKEZ1bmN0aW9uQm9keU5vZGUqLCBS
ZWdpc3RlcklEKik7CisKICAgICAgICAgdm9pZCBwcmVzZXJ2ZUxhc3RWYXIoKTsKICAgICAgICAg
Ym9vbCBzaG91bGRBdm9pZFJlc29sdmVHbG9iYWwoKTsKIApAQCAtNjI2LDYgKzYyOCw5IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICAgICAgaWYgKGluZGV4ID49IDApCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIG1fY2FsbGVlUmVnaXN0ZXJzW2luZGV4XTsKIAorICAgICAgICAgICAgaWYgKGlu
ZGV4ID09IFJlZ2lzdGVyRmlsZTo6Q2FsbGVlKQorICAgICAgICAgICAgICAgIHJldHVybiBtX2Nh
bGxlZVJlZ2lzdGVyOworCiAgICAgICAgICAgICBBU1NFUlQobV9wYXJhbWV0ZXJzLnNpemUoKSk7
CiAgICAgICAgICAgICByZXR1cm4gbV9wYXJhbWV0ZXJzW2luZGV4ICsgbV9wYXJhbWV0ZXJzLnNp
emUoKSArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZV07CiAgICAgICAgIH0KQEAg
LTYzNiwxNiArNjQxLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdW5zaWduZWQgYWRk
Q29uc3RhbnRCdWZmZXIodW5zaWduZWQgbGVuZ3RoKTsKICAgICAgICAgCi0gICAgICAgIEZ1bmN0
aW9uRXhlY3V0YWJsZSogbWFrZUZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgRnVuY3Rpb25Cb2R5
Tm9kZSogYm9keSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uRXhlY3V0
YWJsZTo6Y3JlYXRlKGV4ZWMsIGJvZHktPmlkZW50KCksIGJvZHktPmluZmVycmVkTmFtZSgpLCBi
b2R5LT5zb3VyY2UoKSwgYm9keS0+dXNlc0FyZ3VtZW50cygpLCBib2R5LT5wYXJhbWV0ZXJzKCks
IGJvZHktPmlzU3RyaWN0TW9kZSgpLCBib2R5LT5saW5lTm8oKSwgYm9keS0+bGFzdExpbmUoKSk7
Ci0gICAgICAgIH0KLQotICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIG1ha2VGdW5jdGlvbihK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEZ1bmN0aW9uQm9keU5vZGUqIGJvZHkpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZSgqZ2xvYmFs
RGF0YSwgYm9keS0+aWRlbnQoKSwgYm9keS0+aW5mZXJyZWROYW1lKCksIGJvZHktPnNvdXJjZSgp
LCBib2R5LT51c2VzQXJndW1lbnRzKCksIGJvZHktPnBhcmFtZXRlcnMoKSwgYm9keS0+aXNTdHJp
Y3RNb2RlKCksIGJvZHktPmxpbmVObygpLCBib2R5LT5sYXN0TGluZSgpKTsKLSAgICAgICAgfQot
CiAgICAgICAgIEpTU3RyaW5nKiBhZGRTdHJpbmdDb25zdGFudChjb25zdCBJZGVudGlmaWVyJik7
CiAKICAgICAgICAgdm9pZCBhZGRMaW5lSW5mbyh1bnNpZ25lZCBsaW5lTm8pCkBAIC03MTYsNiAr
NzExLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEhhc2hTZXQ8UmVmUHRyPFN0cmluZ0lt
cGw+LCBJZGVudGlmaWVyUmVwSGFzaD4gbV9mdW5jdGlvbnM7CiAgICAgICAgIFJlZ2lzdGVySUQg
bV9pZ25vcmVkUmVzdWx0UmVnaXN0ZXI7CiAgICAgICAgIFJlZ2lzdGVySUQgbV90aGlzUmVnaXN0
ZXI7CisgICAgICAgIFJlZ2lzdGVySUQgbV9jYWxsZWVSZWdpc3RlcjsKICAgICAgICAgUmVnaXN0
ZXJJRCogbV9hY3RpdmF0aW9uUmVnaXN0ZXI7CiAgICAgICAgIFNlZ21lbnRlZFZlY3RvcjxSZWdp
c3RlcklELCAzMj4gbV9jb25zdGFudFBvb2xSZWdpc3RlcnM7CiAgICAgICAgIFNlZ21lbnRlZFZl
Y3RvcjxSZWdpc3RlcklELCAzMj4gbV9jYWxsZWVSZWdpc3RlcnM7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDEyNzY0OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEyNDMsNyArMTI0Myw3IEBAIEpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25O
ZXdGdW5jdGkKICAgICBBU1NFUlQoZnVuY3Rpb25FeGVjdXRhYmxlLT5pbmhlcml0cygmRnVuY3Rp
b25FeGVjdXRhYmxlOjpzX2luZm8pKTsKICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBl
eGVjLT5nbG9iYWxEYXRhKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmZ2xv
YmFsRGF0YSwgZXhlYyk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJs
ZSo+KGZ1bmN0aW9uRXhlY3V0YWJsZSktPm1ha2UoZXhlYywgZXhlYy0+c2NvcGUoKSk7CisgICAg
cmV0dXJuIEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLCBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1
dGFibGUqPihmdW5jdGlvbkV4ZWN1dGFibGUpLCBleGVjLT5zY29wZSgpKTsKIH0KIAogSlNDZWxs
KiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Z1bmN0aW9uRXhwcmVzc2lvbihFeGVjU3RhdGUq
IGV4ZWMsIEpTQ2VsbCogZnVuY3Rpb25FeGVjdXRhYmxlQXNDZWxsKQpAQCAtMTI1MSwxNCArMTI1
MSw3IEBAIEpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdGdW5jdGkKICAgICBBU1NF
UlQoZnVuY3Rpb25FeGVjdXRhYmxlQXNDZWxsLT5pbmhlcml0cygmRnVuY3Rpb25FeGVjdXRhYmxl
OjpzX2luZm8pKTsKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9
CiAgICAgICAgIHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGZ1bmN0aW9uRXhlY3V0
YWJsZUFzQ2VsbCk7Ci0gICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBmdW5jdGlvbkV4ZWN1dGFi
bGUtPm1ha2UoZXhlYywgZXhlYy0+c2NvcGUoKSk7Ci0gICAgaWYgKCFmdW5jdGlvbkV4ZWN1dGFi
bGUtPm5hbWUoKS5pc051bGwoKSkgewotICAgICAgICBKU05hbWVTY29wZSogZnVuY3Rpb25TY29w
ZU9iamVjdCA9Ci0gICAgICAgICAgICBKU05hbWVTY29wZTo6Y3JlYXRlKAotICAgICAgICAgICAg
ICAgIGV4ZWMsIGZ1bmN0aW9uRXhlY3V0YWJsZS0+bmFtZSgpLCBmdW5jdGlvbiwgUmVhZE9ubHkg
fCBEb250RGVsZXRlKTsKLSAgICAgICAgZnVuY3Rpb24tPnNldFNjb3BlKGV4ZWMtPmdsb2JhbERh
dGEoKSwgZnVuY3Rpb25TY29wZU9iamVjdCk7Ci0gICAgfQotICAgIHJldHVybiBmdW5jdGlvbjsK
KyAgICByZXR1cm4gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIGZ1bmN0aW9uRXhlY3V0YWJsZSwg
ZXhlYy0+c2NvcGUoKSk7CiB9CiAKIHNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbklzT2Jq
ZWN0KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgdmFsdWUpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHJldmlz
aW9uIDEyNzY0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnBy
ZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNDcsNyArMTM0Nyw3IEBAIEpTVmFsdWUgSW50
ZXJwcmV0ZXI6OmV4ZWN1dGUoRXZhbEV4ZWN1dGEKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBudW1GdW5jdGlvbnM7ICsraSkgewogICAgICAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBm
dW5jdGlvbiA9IGNvZGVCbG9jay0+ZnVuY3Rpb25EZWNsKGkpOwogICAgICAgICAgICAgUHV0UHJv
cGVydHlTbG90IHNsb3Q7Ci0gICAgICAgICAgICB2YXJpYWJsZU9iamVjdC0+bWV0aG9kVGFibGUo
KS0+cHV0KHZhcmlhYmxlT2JqZWN0LCBjYWxsRnJhbWUsIGZ1bmN0aW9uLT5uYW1lKCksIGZ1bmN0
aW9uLT5tYWtlKGNhbGxGcmFtZSwgc2NvcGUpLCBzbG90KTsKKyAgICAgICAgICAgIHZhcmlhYmxl
T2JqZWN0LT5tZXRob2RUYWJsZSgpLT5wdXQodmFyaWFibGVPYmplY3QsIGNhbGxGcmFtZSwgZnVu
Y3Rpb24tPm5hbWUoKSwgSlNGdW5jdGlvbjo6Y3JlYXRlKGNhbGxGcmFtZSwgZnVuY3Rpb24sIHNj
b3BlKSwgc2xvdCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTQyNzksMTggKzQyNzksNiBAQCBz
a2lwX2lkX2N1c3RvbV9zZWxmOgogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9u
ID0gY29kZUJsb2NrLT5mdW5jdGlvbkV4cHIoZnVuY0luZGV4KTsKICAgICAgICAgSlNGdW5jdGlv
biogZnVuYyA9IGZ1bmN0aW9uLT5tYWtlKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5zY29wZSgpKTsK
IAotICAgICAgICAvKiAKLSAgICAgICAgICAgIFRoZSBJZGVudGlmaWVyIGluIGEgRnVuY3Rpb25F
eHByZXNzaW9uIGNhbiBiZSByZWZlcmVuY2VkIGZyb20gaW5zaWRlCi0gICAgICAgICAgICB0aGUg
RnVuY3Rpb25FeHByZXNzaW9uJ3MgRnVuY3Rpb25Cb2R5IHRvIGFsbG93IHRoZSBmdW5jdGlvbiB0
byBjYWxsCi0gICAgICAgICAgICBpdHNlbGYgcmVjdXJzaXZlbHkuIEhvd2V2ZXIsIHVubGlrZSBp
biBhIEZ1bmN0aW9uRGVjbGFyYXRpb24sIHRoZQotICAgICAgICAgICAgSWRlbnRpZmllciBpbiBh
IEZ1bmN0aW9uRXhwcmVzc2lvbiBjYW5ub3QgYmUgcmVmZXJlbmNlZCBmcm9tIGFuZAotICAgICAg
ICAgICAgZG9lcyBub3QgYWZmZWN0IHRoZSBzY29wZSBlbmNsb3NpbmcgdGhlIEZ1bmN0aW9uRXhw
cmVzc2lvbi4KLSAgICAgICAgICovCi0gICAgICAgIGlmICghZnVuY3Rpb24tPm5hbWUoKS5pc051
bGwoKSkgewotICAgICAgICAgICAgSlNOYW1lU2NvcGUqIGZ1bmN0aW9uU2NvcGVPYmplY3QgPSBK
U05hbWVTY29wZTo6Y3JlYXRlKGNhbGxGcmFtZSwgZnVuY3Rpb24tPm5hbWUoKSwgZnVuYywgUmVh
ZE9ubHkgfCBEb250RGVsZXRlKTsKLSAgICAgICAgICAgIGZ1bmMtPnNldFNjb3BlKCpnbG9iYWxE
YXRhLCBmdW5jdGlvblNjb3BlT2JqZWN0KTsKLSAgICAgICAgfQotCiAgICAgICAgIGNhbGxGcmFt
ZS0+dW5jaGVja2VkUihkc3QpID0gSlNWYWx1ZShmdW5jKTsKIAogICAgICAgICB2UEMgKz0gT1BD
T0RFX0xFTkdUSChvcF9uZXdfZnVuY19leHApOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRTdHVicy5jcHAJKHJldmlzaW9uIDEyNzY0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTQxLDcgKzIxNDEsNyBAQCBE
RUZJTkVfU1RVQl9GVU5DVElPTihKU09iamVjdCosIG9wX25ld19mCiAgICAgU1RVQl9JTklUX1NU
QUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwogICAgIAogICAgIEFTU0VSVChzdGFja0ZyYW1lLmNhbGxG
cmFtZS0+Y29kZUJsb2NrKCktPmNvZGVUeXBlKCkgIT0gRnVuY3Rpb25Db2RlIHx8ICFzdGFja0Zy
YW1lLmNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPm5lZWRzRnVsbFNjb3BlQ2hhaW4oKSB8fCBzdGFj
a0ZyYW1lLmNhbGxGcmFtZS0+dW5jaGVja2VkUihzdGFja0ZyYW1lLmNhbGxGcmFtZS0+Y29kZUJs
b2NrKCktPmFjdGl2YXRpb25SZWdpc3RlcigpKS5qc1ZhbHVlKCkpOwotICAgIHJldHVybiBzdGFj
a0ZyYW1lLmFyZ3NbMF0uZnVuY3Rpb24oKS0+bWFrZShzdGFja0ZyYW1lLmNhbGxGcmFtZSwgc3Rh
Y2tGcmFtZS5jYWxsRnJhbWUtPnNjb3BlKCkpOworICAgIHJldHVybiBKU0Z1bmN0aW9uOjpjcmVh
dGUoc3RhY2tGcmFtZS5jYWxsRnJhbWUsIHN0YWNrRnJhbWUuYXJnc1swXS5mdW5jdGlvbigpLCBz
dGFja0ZyYW1lLmNhbGxGcmFtZS0+c2NvcGUoKSk7CiB9CiAKIGlubGluZSB2b2lkKiBqaXRDb21w
aWxlRm9yKENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQp
CkBAIC0yOTgyLDIxICsyOTgyLDkgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oSlNPYmplY3QqLCBv
cF9uZXdfZgogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7
CiAKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uID0gc3RhY2tGcmFtZS5hcmdzWzBd
LmZ1bmN0aW9uKCk7Ci0gICAgSlNGdW5jdGlvbiogZnVuYyA9IGZ1bmN0aW9uLT5tYWtlKGNhbGxG
cmFtZSwgY2FsbEZyYW1lLT5zY29wZSgpKTsKKyAgICBKU0Z1bmN0aW9uKiBmdW5jID0gSlNGdW5j
dGlvbjo6Y3JlYXRlKGNhbGxGcmFtZSwgZnVuY3Rpb24sIGNhbGxGcmFtZS0+c2NvcGUoKSk7CiAg
ICAgQVNTRVJUKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmNvZGVUeXBlKCkgIT0gRnVuY3Rpb25D
b2RlIHx8ICFjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5uZWVkc0Z1bGxTY29wZUNoYWluKCkgfHwg
Y2FsbEZyYW1lLT51bmNoZWNrZWRSKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmFjdGl2YXRpb25S
ZWdpc3RlcigpKS5qc1ZhbHVlKCkpOwogCi0gICAgLyogCi0gICAgICAgIFRoZSBJZGVudGlmaWVy
IGluIGEgRnVuY3Rpb25FeHByZXNzaW9uIGNhbiBiZSByZWZlcmVuY2VkIGZyb20gaW5zaWRlCi0g
ICAgICAgIHRoZSBGdW5jdGlvbkV4cHJlc3Npb24ncyBGdW5jdGlvbkJvZHkgdG8gYWxsb3cgdGhl
IGZ1bmN0aW9uIHRvIGNhbGwKLSAgICAgICAgaXRzZWxmIHJlY3Vyc2l2ZWx5LiBIb3dldmVyLCB1
bmxpa2UgaW4gYSBGdW5jdGlvbkRlY2xhcmF0aW9uLCB0aGUKLSAgICAgICAgSWRlbnRpZmllciBp
biBhIEZ1bmN0aW9uRXhwcmVzc2lvbiBjYW5ub3QgYmUgcmVmZXJlbmNlZCBmcm9tIGFuZAotICAg
ICAgICBkb2VzIG5vdCBhZmZlY3QgdGhlIHNjb3BlIGVuY2xvc2luZyB0aGUgRnVuY3Rpb25FeHBy
ZXNzaW9uLgotICAgICAqLwotICAgIGlmICghZnVuY3Rpb24tPm5hbWUoKS5pc051bGwoKSkgewot
ICAgICAgICBKU05hbWVTY29wZSogZnVuY3Rpb25TY29wZU9iamVjdCA9IEpTTmFtZVNjb3BlOjpj
cmVhdGUoY2FsbEZyYW1lLCBmdW5jdGlvbi0+bmFtZSgpLCBmdW5jLCBSZWFkT25seSB8IERvbnRE
ZWxldGUpOwotICAgICAgICBmdW5jLT5zZXRTY29wZShjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwg
ZnVuY3Rpb25TY29wZU9iamVjdCk7Ci0gICAgfQotCiAgICAgcmV0dXJuIGZ1bmM7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAko
cmV2aXNpb24gMTI3NjQ5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xv
d1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI2MCw3ICsxMjYwLDcgQEAgTExJTlRfU0xP
V19QQVRIX0RFQ0woc2xvd19wYXRoX25ld19mdW5jKQogI2lmIExMSU5UX1NMT1dfUEFUSF9UUkFD
SU5HCiAgICAgZGF0YUxvZygiQ3JlYXRpbmcgZnVuY3Rpb24hXG4iKTsKICNlbmRpZgotICAgIExM
SU5UX1JFVFVSTihjb2RlQmxvY2stPmZ1bmN0aW9uRGVjbChwY1syXS51Lm9wZXJhbmQpLT5tYWtl
KGV4ZWMsIGV4ZWMtPnNjb3BlKCkpKTsKKyAgICBMTElOVF9SRVRVUk4oSlNGdW5jdGlvbjo6Y3Jl
YXRlKGV4ZWMsIGNvZGVCbG9jay0+ZnVuY3Rpb25EZWNsKHBjWzJdLnUub3BlcmFuZCksIGV4ZWMt
PnNjb3BlKCkpKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX25ld19mdW5j
X2V4cCkKQEAgLTEyNjgsMTIgKzEyNjgsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3Bh
dGhfbmV3X2Z1bmNfCiAgICAgTExJTlRfQkVHSU4oKTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
ayA9IGV4ZWMtPmNvZGVCbG9jaygpOwogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb24g
PSBjb2RlQmxvY2stPmZ1bmN0aW9uRXhwcihwY1syXS51Lm9wZXJhbmQpOwotICAgIEpTRnVuY3Rp
b24qIGZ1bmMgPSBmdW5jdGlvbi0+bWFrZShleGVjLCBleGVjLT5zY29wZSgpKTsKLSAgICAKLSAg
ICBpZiAoIWZ1bmN0aW9uLT5uYW1lKCkuaXNOdWxsKCkpIHsKLSAgICAgICAgSlNOYW1lU2NvcGUq
IGZ1bmN0aW9uU2NvcGVPYmplY3QgPSBKU05hbWVTY29wZTo6Y3JlYXRlKGV4ZWMsIGZ1bmN0aW9u
LT5uYW1lKCksIGZ1bmMsIFJlYWRPbmx5IHwgRG9udERlbGV0ZSk7Ci0gICAgICAgIGZ1bmMtPnNl
dFNjb3BlKGdsb2JhbERhdGEsIGZ1bmN0aW9uU2NvcGVPYmplY3QpOwotICAgIH0KKyAgICBKU0Z1
bmN0aW9uKiBmdW5jID0gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIGZ1bmN0aW9uLCBleGVjLT5z
Y29wZSgpKTsKICAgICAKICAgICBMTElOVF9SRVRVUk4oZnVuYyk7CiB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCShyZXZpc2lvbiAxMjc2NDkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQw
LDcgKzQwLDcgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIG5hbWVzcGFjZSBKU0MgewogCiB0ZW1w
bGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgotUGFyc2VyPExleGVyVHlwZT46OlBhcnNlcihKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgRnVuY3Rpb25Q
YXJhbWV0ZXJzKiBwYXJhbWV0ZXJzLCBKU1BhcnNlclN0cmljdG5lc3Mgc3RyaWN0bmVzcywgSlNQ
YXJzZXJNb2RlIHBhcnNlck1vZGUpCitQYXJzZXI8TGV4ZXJUeXBlPjo6UGFyc2VyKEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBGdW5jdGlvblBhcmFt
ZXRlcnMqIHBhcmFtZXRlcnMsIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIEpTUGFyc2VyU3RyaWN0
bmVzcyBzdHJpY3RuZXNzLCBKU1BhcnNlck1vZGUgcGFyc2VyTW9kZSkKICAgICA6IG1fZ2xvYmFs
RGF0YShnbG9iYWxEYXRhKQogICAgICwgbV9zb3VyY2UoJnNvdXJjZSkKICAgICAsIG1fc3RhY2so
d3RmVGhyZWFkRGF0YSgpLnN0YWNrKCkpCkBAIC03MSw2ICs3MSw4IEBAIFBhcnNlcjxMZXhlclR5
cGU+OjpQYXJzZXIoSlNHbG9iYWxEYXRhKiAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHBhcmFtZXRlcnMtPnNpemUoKTsgaSsrKQogICAgICAgICAgICAgc2NvcGUtPmRlY2xhcmVQ
YXJhbWV0ZXIoJnBhcmFtZXRlcnMtPmF0KGkpKTsKICAgICB9CisgICAgaWYgKCFuYW1lLmlzTnVs
bCgpKQorICAgICAgICBzY29wZS0+ZGVjbGFyZUNhbGxlZSgmbmFtZSk7CiAgICAgbmV4dCgpOwog
ICAgIG1fbGV4ZXItPnNldExhc3RMaW5lTnVtYmVyKHRva2VuTGluZSgpKTsKIH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAkocmV2aXNpb24gMTI3NjQ5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjA4
LDYgKzIwOCwxMSBAQCBzdHJ1Y3QgU2NvcGUgewogICAgIGJvb2wgaXNGdW5jdGlvbigpIHsgcmV0
dXJuIG1faXNGdW5jdGlvbjsgfQogICAgIGJvb2wgaXNGdW5jdGlvbkJvdW5kYXJ5KCkgeyByZXR1
cm4gbV9pc0Z1bmN0aW9uQm91bmRhcnk7IH0KIAorICAgIHZvaWQgZGVjbGFyZUNhbGxlZShjb25z
dCBJZGVudGlmaWVyKiBpZGVudCkKKyAgICB7CisgICAgICAgIG1fZGVjbGFyZWRWYXJpYWJsZXMu
YWRkKGlkZW50LT51c3RyaW5nKCkuaW1wbCgpKTsKKyAgICB9CisKICAgICBib29sIGRlY2xhcmVW
YXJpYWJsZShjb25zdCBJZGVudGlmaWVyKiBpZGVudCkKICAgICB7CiAgICAgICAgIGJvb2wgaXNW
YWxpZFN0cmljdE1vZGUgPSBtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPmV2YWwgIT0gKmlk
ZW50ICYmIG1fZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+YXJndW1lbnRzICE9ICppZGVudDsK
QEAgLTM4Miw3ICszODcsNyBAQCBjbGFzcyBQYXJzZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwogCiBwdWJsaWM6Ci0gICAgUGFyc2VyKEpTR2xvYmFsRGF0YSosIGNvbnN0IFNvdXJj
ZUNvZGUmLCBGdW5jdGlvblBhcmFtZXRlcnMqLCBKU1BhcnNlclN0cmljdG5lc3MsIEpTUGFyc2Vy
TW9kZSk7CisgICAgUGFyc2VyKEpTR2xvYmFsRGF0YSosIGNvbnN0IFNvdXJjZUNvZGUmLCBGdW5j
dGlvblBhcmFtZXRlcnMqLCBjb25zdCBJZGVudGlmaWVyJiwgSlNQYXJzZXJTdHJpY3RuZXNzLCBK
U1BhcnNlck1vZGUpOwogICAgIH5QYXJzZXIoKTsKIAogICAgIHRlbXBsYXRlIDxjbGFzcyBQYXJz
ZWROb2RlPgpAQCAtMTAyMCwxNyArMTAyNSwxNyBAQCBQYXNzUmVmUHRyPFBhcnNlZE5vZGU+IFBh
cnNlcjxMZXhlclR5cGU+CiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBQYXJzZWROb2RlPgotUGFzc1Jl
ZlB0cjxQYXJzZWROb2RlPiBwYXJzZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEZ1
bmN0aW9uUGFyYW1ldGVycyogcGFyYW1ldGVycywgSlNQYXJzZXJTdHJpY3RuZXNzIHN0cmljdG5l
c3MsIEpTUGFyc2VyTW9kZSBwYXJzZXJNb2RlLCBEZWJ1Z2dlciogZGVidWdnZXIsIEV4ZWNTdGF0
ZSogZXhlY1N0YXRlLCBKU09iamVjdCoqIGV4Y2VwdGlvbikKK1Bhc3NSZWZQdHI8UGFyc2VkTm9k
ZT4gcGFyc2UoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogbGV4aWNh
bEdsb2JhbE9iamVjdCwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBGdW5jdGlvblBhcmFtZXRl
cnMqIHBhcmFtZXRlcnMsIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIEpTUGFyc2VyU3RyaWN0bmVz
cyBzdHJpY3RuZXNzLCBKU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgRGVidWdnZXIqIGRlYnVnZ2Vy
LCBFeGVjU3RhdGUqIGV4ZWNTdGF0ZSwgSlNPYmplY3QqKiBleGNlcHRpb24pCiB7CiAgICAgU2Ft
cGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIlBhcnNpbmciKTsKIAogICAgIEFTU0VSVChzb3Vy
Y2UucHJvdmlkZXIoKS0+ZGF0YSgpKTsKIAogICAgIGlmIChzb3VyY2UucHJvdmlkZXIoKS0+ZGF0
YSgpLT5pczhCaXQoKSkgewotICAgICAgICBQYXJzZXI8IExleGVyPExDaGFyPiA+IHBhcnNlcihn
bG9iYWxEYXRhLCBzb3VyY2UsIHBhcmFtZXRlcnMsIHN0cmljdG5lc3MsIHBhcnNlck1vZGUpOwor
ICAgICAgICBQYXJzZXI8IExleGVyPExDaGFyPiA+IHBhcnNlcihnbG9iYWxEYXRhLCBzb3VyY2Us
IHBhcmFtZXRlcnMsIG5hbWUsIHN0cmljdG5lc3MsIHBhcnNlck1vZGUpOwogICAgICAgICByZXR1
cm4gcGFyc2VyLnBhcnNlPFBhcnNlZE5vZGU+KGxleGljYWxHbG9iYWxPYmplY3QsIGRlYnVnZ2Vy
LCBleGVjU3RhdGUsIGV4Y2VwdGlvbik7CiAgICAgfQotICAgIFBhcnNlcjwgTGV4ZXI8VUNoYXI+
ID4gcGFyc2VyKGdsb2JhbERhdGEsIHNvdXJjZSwgcGFyYW1ldGVycywgc3RyaWN0bmVzcywgcGFy
c2VyTW9kZSk7CisgICAgUGFyc2VyPCBMZXhlcjxVQ2hhcj4gPiBwYXJzZXIoZ2xvYmFsRGF0YSwg
c291cmNlLCBwYXJhbWV0ZXJzLCBuYW1lLCBzdHJpY3RuZXNzLCBwYXJzZXJNb2RlKTsKICAgICBy
ZXR1cm4gcGFyc2VyLnBhcnNlPFBhcnNlZE5vZGU+KGxleGljYWxHbG9iYWxPYmplY3QsIGRlYnVn
Z2VyLCBleGVjU3RhdGUsIGV4Y2VwdGlvbik7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAxMjc2NDkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTMzLDIzICsxMzMsMTMgQEAgdm9pZCBQcm9ncmFtRXhlY3V0YWJsZTo6ZGVzdHJveShKU0Nl
bGwqIAogCiBjb25zdCBDbGFzc0luZm8gRnVuY3Rpb25FeGVjdXRhYmxlOjpzX2luZm8gPSB7ICJG
dW5jdGlvbkV4ZWN1dGFibGUiLCAmU2NyaXB0RXhlY3V0YWJsZTo6c19pbmZvLCAwLCAwLCBDUkVB
VEVfTUVUSE9EX1RBQkxFKEZ1bmN0aW9uRXhlY3V0YWJsZSkgfTsKIAotRnVuY3Rpb25FeGVjdXRh
YmxlOjpGdW5jdGlvbkV4ZWN1dGFibGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBJ
ZGVudGlmaWVyJiBuYW1lLCBjb25zdCBJZGVudGlmaWVyJiBpbmZlcnJlZE5hbWUsIGNvbnN0IFNv
dXJjZUNvZGUmIHNvdXJjZSwgYm9vbCBmb3JjZVVzZXNBcmd1bWVudHMsIEZ1bmN0aW9uUGFyYW1l
dGVycyogcGFyYW1ldGVycywgYm9vbCBpblN0cmljdENvbnRleHQpCi0gICAgOiBTY3JpcHRFeGVj
dXRhYmxlKGdsb2JhbERhdGEuZnVuY3Rpb25FeGVjdXRhYmxlU3RydWN0dXJlLmdldCgpLCBnbG9i
YWxEYXRhLCBzb3VyY2UsIGluU3RyaWN0Q29udGV4dCkKK0Z1bmN0aW9uRXhlY3V0YWJsZTo6RnVu
Y3Rpb25FeGVjdXRhYmxlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgRnVuY3Rpb25Cb2R5Tm9k
ZSogbm9kZSkKKyAgICA6IFNjcmlwdEV4ZWN1dGFibGUoZ2xvYmFsRGF0YS5mdW5jdGlvbkV4ZWN1
dGFibGVTdHJ1Y3R1cmUuZ2V0KCksIGdsb2JhbERhdGEsIG5vZGUtPnNvdXJjZSgpLCBub2RlLT5p
c1N0cmljdE1vZGUoKSkKICAgICAsIG1fbnVtQ2FwdHVyZWRWYXJpYWJsZXMoMCkKLSAgICAsIG1f
Zm9yY2VVc2VzQXJndW1lbnRzKGZvcmNlVXNlc0FyZ3VtZW50cykKLSAgICAsIG1fcGFyYW1ldGVy
cyhwYXJhbWV0ZXJzKQotICAgICwgbV9uYW1lKG5hbWUpCi0gICAgLCBtX2luZmVycmVkTmFtZShp
bmZlcnJlZE5hbWUuaXNOdWxsKCkgPyBnbG9iYWxEYXRhLnByb3BlcnR5TmFtZXMtPmVtcHR5SWRl
bnRpZmllciA6IGluZmVycmVkTmFtZSkKLXsKLX0KLQotRnVuY3Rpb25FeGVjdXRhYmxlOjpGdW5j
dGlvbkV4ZWN1dGFibGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBj
b25zdCBJZGVudGlmaWVyJiBpbmZlcnJlZE5hbWUsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwg
Ym9vbCBmb3JjZVVzZXNBcmd1bWVudHMsIEZ1bmN0aW9uUGFyYW1ldGVycyogcGFyYW1ldGVycywg
Ym9vbCBpblN0cmljdENvbnRleHQpCi0gICAgOiBTY3JpcHRFeGVjdXRhYmxlKGV4ZWMtPmdsb2Jh
bERhdGEoKS5mdW5jdGlvbkV4ZWN1dGFibGVTdHJ1Y3R1cmUuZ2V0KCksIGV4ZWMsIHNvdXJjZSwg
aW5TdHJpY3RDb250ZXh0KQotICAgICwgbV9udW1DYXB0dXJlZFZhcmlhYmxlcygwKQotICAgICwg
bV9mb3JjZVVzZXNBcmd1bWVudHMoZm9yY2VVc2VzQXJndW1lbnRzKQotICAgICwgbV9wYXJhbWV0
ZXJzKHBhcmFtZXRlcnMpCi0gICAgLCBtX25hbWUobmFtZSkKLSAgICAsIG1faW5mZXJyZWROYW1l
KGluZmVycmVkTmFtZS5pc051bGwoKSA/IGV4ZWMtPmdsb2JhbERhdGEoKS5wcm9wZXJ0eU5hbWVz
LT5lbXB0eUlkZW50aWZpZXIgOiBpbmZlcnJlZE5hbWUpCisgICAgLCBtX2ZvcmNlVXNlc0FyZ3Vt
ZW50cyhub2RlLT51c2VzQXJndW1lbnRzKCkpCisgICAgLCBtX3BhcmFtZXRlcnMobm9kZS0+cGFy
YW1ldGVycygpKQorICAgICwgbV9uYW1lKG5vZGUtPmlkZW50KCkpCisgICAgLCBtX2luZmVycmVk
TmFtZShub2RlLT5pbmZlcnJlZE5hbWUoKS5pc051bGwoKSA/IGdsb2JhbERhdGEucHJvcGVydHlO
YW1lcy0+ZW1wdHlJZGVudGlmaWVyIDogbm9kZS0+aW5mZXJyZWROYW1lKCkpCiB7CiB9CiAKQEAg
LTIxMCw3ICsyMDAsNyBAQCBKU09iamVjdCogRXZhbEV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5h
CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKCFsZXhpY2FsR2xvYmFsT2JqZWN0LT5ldmFsRW5h
YmxlZCgpKQogICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgY3JlYXRlRXZhbEVy
cm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiRXZhbCBpcyBkaXNhYmxlZCIpKSk7Ci0gICAgICAgIFJl
ZlB0cjxFdmFsTm9kZT4gZXZhbE5vZGUgPSBwYXJzZTxFdmFsTm9kZT4oZ2xvYmFsRGF0YSwgbGV4
aWNhbEdsb2JhbE9iamVjdCwgbV9zb3VyY2UsIDAsIGlzU3RyaWN0TW9kZSgpID8gSlNQYXJzZVN0
cmljdCA6IEpTUGFyc2VOb3JtYWwsIEV2YWxOb2RlOjppc0Z1bmN0aW9uTm9kZSA/IEpTUGFyc2VG
dW5jdGlvbkNvZGUgOiBKU1BhcnNlUHJvZ3JhbUNvZGUsIGxleGljYWxHbG9iYWxPYmplY3QtPmRl
YnVnZ2VyKCksIGV4ZWMsICZleGNlcHRpb24pOworICAgICAgICBSZWZQdHI8RXZhbE5vZGU+IGV2
YWxOb2RlID0gcGFyc2U8RXZhbE5vZGU+KGdsb2JhbERhdGEsIGxleGljYWxHbG9iYWxPYmplY3Qs
IG1fc291cmNlLCAwLCBJZGVudGlmaWVyKCksIGlzU3RyaWN0TW9kZSgpID8gSlNQYXJzZVN0cmlj
dCA6IEpTUGFyc2VOb3JtYWwsIEV2YWxOb2RlOjppc0Z1bmN0aW9uTm9kZSA/IEpTUGFyc2VGdW5j
dGlvbkNvZGUgOiBKU1BhcnNlUHJvZ3JhbUNvZGUsIGxleGljYWxHbG9iYWxPYmplY3QtPmRlYnVn
Z2VyKCksIGV4ZWMsICZleGNlcHRpb24pOwogICAgICAgICBpZiAoIWV2YWxOb2RlKSB7CiAgICAg
ICAgICAgICBBU1NFUlQoZXhjZXB0aW9uKTsKICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb247
CkBAIC0yOTMsNyArMjgzLDcgQEAgSlNPYmplY3QqIFByb2dyYW1FeGVjdXRhYmxlOjpjaGVja1N5
bnRheAogICAgIEpTT2JqZWN0KiBleGNlcHRpb24gPSAwOwogICAgIEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CiAgICAgSlNHbG9iYWxPYmplY3QqIGxleGlj
YWxHbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7Ci0gICAgUmVmUHRy
PFByb2dyYW1Ob2RlPiBwcm9ncmFtTm9kZSA9IHBhcnNlPFByb2dyYW1Ob2RlPihnbG9iYWxEYXRh
LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBtX3NvdXJjZSwgMCwgSlNQYXJzZU5vcm1hbCwgUHJvZ3Jh
bU5vZGU6OmlzRnVuY3Rpb25Ob2RlID8gSlNQYXJzZUZ1bmN0aW9uQ29kZSA6IEpTUGFyc2VQcm9n
cmFtQ29kZSwgbGV4aWNhbEdsb2JhbE9iamVjdC0+ZGVidWdnZXIoKSwgZXhlYywgJmV4Y2VwdGlv
bik7CisgICAgUmVmUHRyPFByb2dyYW1Ob2RlPiBwcm9ncmFtTm9kZSA9IHBhcnNlPFByb2dyYW1O
b2RlPihnbG9iYWxEYXRhLCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBtX3NvdXJjZSwgMCwgSWRlbnRp
ZmllcigpLCBKU1BhcnNlTm9ybWFsLCBQcm9ncmFtTm9kZTo6aXNGdW5jdGlvbk5vZGUgPyBKU1Bh
cnNlRnVuY3Rpb25Db2RlIDogSlNQYXJzZVByb2dyYW1Db2RlLCBsZXhpY2FsR2xvYmFsT2JqZWN0
LT5kZWJ1Z2dlcigpLCBleGVjLCAmZXhjZXB0aW9uKTsKICAgICBpZiAocHJvZ3JhbU5vZGUpCiAg
ICAgICAgIHJldHVybiAwOwogICAgIEFTU0VSVChleGNlcHRpb24pOwpAQCAtMzM1LDcgKzMyNSw3
IEBAIEpTT2JqZWN0KiBQcm9ncmFtRXhlY3V0YWJsZTo6Y29tcGlsZUludGUKICAgICAgICAgbmV3
Q29kZUJsb2NrLT5zZXRBbHRlcm5hdGl2ZShzdGF0aWNfcG9pbnRlcl9jYXN0PENvZGVCbG9jaz4o
bV9wcm9ncmFtQ29kZUJsb2NrLnJlbGVhc2UoKSkpOwogICAgICAgICBtX3Byb2dyYW1Db2RlQmxv
Y2sgPSBuZXdDb2RlQmxvY2sucmVsZWFzZSgpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIFJlZlB0
cjxQcm9ncmFtTm9kZT4gcHJvZ3JhbU5vZGUgPSBwYXJzZTxQcm9ncmFtTm9kZT4oZ2xvYmFsRGF0
YSwgbGV4aWNhbEdsb2JhbE9iamVjdCwgbV9zb3VyY2UsIDAsIGlzU3RyaWN0TW9kZSgpID8gSlNQ
YXJzZVN0cmljdCA6IEpTUGFyc2VOb3JtYWwsIFByb2dyYW1Ob2RlOjppc0Z1bmN0aW9uTm9kZSA/
IEpTUGFyc2VGdW5jdGlvbkNvZGUgOiBKU1BhcnNlUHJvZ3JhbUNvZGUsIGxleGljYWxHbG9iYWxP
YmplY3QtPmRlYnVnZ2VyKCksIGV4ZWMsICZleGNlcHRpb24pOworICAgICAgICBSZWZQdHI8UHJv
Z3JhbU5vZGU+IHByb2dyYW1Ob2RlID0gcGFyc2U8UHJvZ3JhbU5vZGU+KGdsb2JhbERhdGEsIGxl
eGljYWxHbG9iYWxPYmplY3QsIG1fc291cmNlLCAwLCBJZGVudGlmaWVyKCksIGlzU3RyaWN0TW9k
ZSgpID8gSlNQYXJzZVN0cmljdCA6IEpTUGFyc2VOb3JtYWwsIFByb2dyYW1Ob2RlOjppc0Z1bmN0
aW9uTm9kZSA/IEpTUGFyc2VGdW5jdGlvbkNvZGUgOiBKU1BhcnNlUHJvZ3JhbUNvZGUsIGxleGlj
YWxHbG9iYWxPYmplY3QtPmRlYnVnZ2VyKCksIGV4ZWMsICZleGNlcHRpb24pOwogICAgICAgICBp
ZiAoIXByb2dyYW1Ob2RlKSB7CiAgICAgICAgICAgICBBU1NFUlQoZXhjZXB0aW9uKTsKICAgICAg
ICAgICAgIHJldHVybiBleGNlcHRpb247CkBAIC00NzgsNyArNDY4LDE4IEBAIFBhc3NPd25QdHI8
RnVuY3Rpb25Db2RlQmxvY2s+IEZ1bmN0aW9uRXgKICAgICBleGNlcHRpb24gPSAwOwogICAgIEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9IHNjb3BlLT5nbG9iYWxEYXRhKCk7CiAgICAgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHNjb3BlLT5nbG9iYWxPYmplY3QoKTsKLSAgICBSZWZQ
dHI8RnVuY3Rpb25Cb2R5Tm9kZT4gYm9keSA9IHBhcnNlPEZ1bmN0aW9uQm9keU5vZGU+KGdsb2Jh
bERhdGEsIGdsb2JhbE9iamVjdCwgbV9zb3VyY2UsIG1fcGFyYW1ldGVycy5nZXQoKSwgaXNTdHJp
Y3RNb2RlKCkgPyBKU1BhcnNlU3RyaWN0IDogSlNQYXJzZU5vcm1hbCwgRnVuY3Rpb25Cb2R5Tm9k
ZTo6aXNGdW5jdGlvbk5vZGUgPyBKU1BhcnNlRnVuY3Rpb25Db2RlIDogSlNQYXJzZVByb2dyYW1D
b2RlLCAwLCAwLCAmZXhjZXB0aW9uKTsKKyAgICBSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4gYm9k
eSA9IHBhcnNlPEZ1bmN0aW9uQm9keU5vZGU+KAorICAgICAgICBnbG9iYWxEYXRhLAorICAgICAg
ICBnbG9iYWxPYmplY3QsCisgICAgICAgIG1fc291cmNlLAorICAgICAgICBtX3BhcmFtZXRlcnMu
Z2V0KCksCisgICAgICAgIG5hbWUoKSwKKyAgICAgICAgaXNTdHJpY3RNb2RlKCkgPyBKU1BhcnNl
U3RyaWN0IDogSlNQYXJzZU5vcm1hbCwKKyAgICAgICAgRnVuY3Rpb25Cb2R5Tm9kZTo6aXNGdW5j
dGlvbk5vZGUgPyBKU1BhcnNlRnVuY3Rpb25Db2RlIDogSlNQYXJzZVByb2dyYW1Db2RlLAorICAg
ICAgICAwLAorICAgICAgICAwLAorICAgICAgICAmZXhjZXB0aW9uCisgICAgKTsKIAogICAgIGlm
ICghYm9keSkgewogICAgICAgICBBU1NFUlQoZXhjZXB0aW9uKTsKQEAgLTY0NywxNiArNjQ4LDE2
IEBAIHZvaWQgRnVuY3Rpb25FeGVjdXRhYmxlOjp1bmxpbmtDYWxscygpCiAjZW5kaWYKIH0KIAot
RnVuY3Rpb25FeGVjdXRhYmxlKiBGdW5jdGlvbkV4ZWN1dGFibGU6OmZyb21HbG9iYWxDb2RlKGNv
bnN0IElkZW50aWZpZXImIGZ1bmN0aW9uTmFtZSwgRXhlY1N0YXRlKiBleGVjLCBEZWJ1Z2dlciog
ZGVidWdnZXIsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgSlNPYmplY3QqKiBleGNlcHRpb24p
CitGdW5jdGlvbkV4ZWN1dGFibGUqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZnJvbUdsb2JhbENvZGUo
Y29uc3QgSWRlbnRpZmllciYgbmFtZSwgRXhlY1N0YXRlKiBleGVjLCBEZWJ1Z2dlciogZGVidWdn
ZXIsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgSlNPYmplY3QqKiBleGNlcHRpb24pCiB7CiAg
ICAgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCk7Ci0gICAgUmVmUHRyPFByb2dyYW1Ob2RlPiBwcm9ncmFtID0gcGFyc2U8UHJv
Z3JhbU5vZGU+KCZleGVjLT5nbG9iYWxEYXRhKCksIGxleGljYWxHbG9iYWxPYmplY3QsIHNvdXJj
ZSwgMCwgSlNQYXJzZU5vcm1hbCwgUHJvZ3JhbU5vZGU6OmlzRnVuY3Rpb25Ob2RlID8gSlNQYXJz
ZUZ1bmN0aW9uQ29kZSA6IEpTUGFyc2VQcm9ncmFtQ29kZSwgZGVidWdnZXIsIGV4ZWMsIGV4Y2Vw
dGlvbik7CisgICAgUmVmUHRyPFByb2dyYW1Ob2RlPiBwcm9ncmFtID0gcGFyc2U8UHJvZ3JhbU5v
ZGU+KCZleGVjLT5nbG9iYWxEYXRhKCksIGxleGljYWxHbG9iYWxPYmplY3QsIHNvdXJjZSwgMCwg
SWRlbnRpZmllcigpLCBKU1BhcnNlTm9ybWFsLCBQcm9ncmFtTm9kZTo6aXNGdW5jdGlvbk5vZGUg
PyBKU1BhcnNlRnVuY3Rpb25Db2RlIDogSlNQYXJzZVByb2dyYW1Db2RlLCBkZWJ1Z2dlciwgZXhl
YywgZXhjZXB0aW9uKTsKICAgICBpZiAoIXByb2dyYW0pIHsKICAgICAgICAgQVNTRVJUKCpleGNl
cHRpb24pOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICAvLyBVc2VzIG9mIHRoaXMg
ZnVuY3Rpb24gdGhhdCB3b3VsZCBub3QgcmVzdWx0IGluIGEgc2luZ2xlIGZ1bmN0aW9uIGV4cHJl
c3Npb24gYXJlIGludmFsaWQuCisgICAgLy8gVGhpcyBmdW5jdGlvbiBhc3N1bWVzIGFuIGlucHV0
IHN0cmluZyB0aGF0IHdvdWxkIHJlc3VsdCBpbiBhIHNpbmdsZSBhbm9ueW1vdXMgZnVuY3Rpb24g
ZXhwcmVzc2lvbi4KICAgICBTdGF0ZW1lbnROb2RlKiBleHByU3RhdGVtZW50ID0gcHJvZ3JhbS0+
c2luZ2xlU3RhdGVtZW50KCk7CiAgICAgQVNTRVJUKGV4cHJTdGF0ZW1lbnQpOwogICAgIEFTU0VS
VChleHByU3RhdGVtZW50LT5pc0V4cHJTdGF0ZW1lbnQoKSk7CkBAIC02NjUsOCArNjY2LDExIEBA
IEZ1bmN0aW9uRXhlY3V0YWJsZSogRnVuY3Rpb25FeGVjdXRhYmxlOjoKICAgICBBU1NFUlQoZnVu
Y0V4cHItPmlzRnVuY0V4cHJOb2RlKCkpOwogICAgIEZ1bmN0aW9uQm9keU5vZGUqIGJvZHkgPSBz
dGF0aWNfY2FzdDxGdW5jRXhwck5vZGUqPihmdW5jRXhwciktPmJvZHkoKTsKICAgICBBU1NFUlQo
Ym9keSk7CisgICAgQVNTRVJUKGJvZHktPmlkZW50KCkuaXNOdWxsKCkpOwogCi0gICAgcmV0dXJu
IEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgZnVuY3Rpb25O
YW1lLCBmdW5jdGlvbk5hbWUsIGJvZHktPnNvdXJjZSgpLCBib2R5LT51c2VzQXJndW1lbnRzKCks
IGJvZHktPnBhcmFtZXRlcnMoKSwgYm9keS0+aXNTdHJpY3RNb2RlKCksIGJvZHktPmxpbmVObygp
LCBib2R5LT5sYXN0TGluZSgpKTsKKyAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhl
Y3V0YWJsZSA9IEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwg
Ym9keSk7CisgICAgZnVuY3Rpb25FeGVjdXRhYmxlLT5tX25hbWVWYWx1ZS5zZXQoZXhlYy0+Z2xv
YmFsRGF0YSgpLCBmdW5jdGlvbkV4ZWN1dGFibGUsIGpzU3RyaW5nKCZleGVjLT5nbG9iYWxEYXRh
KCksIG5hbWUudXN0cmluZygpKSk7CisgICAgcmV0dXJuIGZ1bmN0aW9uRXhlY3V0YWJsZTsKIH0K
IAogU3RyaW5nIEZ1bmN0aW9uRXhlY3V0YWJsZTo6cGFyYW1TdHJpbmcoKSBjb25zdApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkocmV2aXNpb24gMTI3
NjQ5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MzksMjcgKzUzOSwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBwdWJs
aWM6CiAgICAgICAgIHR5cGVkZWYgU2NyaXB0RXhlY3V0YWJsZSBCYXNlOwogCi0gICAgICAgIHN0
YXRpYyBGdW5jdGlvbkV4ZWN1dGFibGUqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElk
ZW50aWZpZXImIG5hbWUsIGNvbnN0IElkZW50aWZpZXImIGluZmVycmVkTmFtZSwgY29uc3QgU291
cmNlQ29kZSYgc291cmNlLCBib29sIGZvcmNlVXNlc0FyZ3VtZW50cywgRnVuY3Rpb25QYXJhbWV0
ZXJzKiBwYXJhbWV0ZXJzLCBib29sIGlzSW5TdHJpY3RDb250ZXh0LCBpbnQgZmlyc3RMaW5lLCBp
bnQgbGFzdExpbmUpCisgICAgICAgIHN0YXRpYyBGdW5jdGlvbkV4ZWN1dGFibGUqIGNyZWF0ZShK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEZ1bmN0aW9uQm9keU5vZGUqIG5vZGUpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IG5ldyAoTm90
TnVsbCwgYWxsb2NhdGVDZWxsPEZ1bmN0aW9uRXhlY3V0YWJsZT4oKmV4ZWMtPmhlYXAoKSkpIEZ1
bmN0aW9uRXhlY3V0YWJsZShleGVjLCBuYW1lLCBpbmZlcnJlZE5hbWUsIHNvdXJjZSwgZm9yY2VV
c2VzQXJndW1lbnRzLCBwYXJhbWV0ZXJzLCBpc0luU3RyaWN0Q29udGV4dCk7Ci0gICAgICAgICAg
ICBleGVjdXRhYmxlLT5maW5pc2hDcmVhdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIG5hbWUsIGZp
cnN0TGluZSwgbGFzdExpbmUpOwotICAgICAgICAgICAgcmV0dXJuIGV4ZWN1dGFibGU7Ci0gICAg
ICAgIH0KLQotICAgICAgICBzdGF0aWMgRnVuY3Rpb25FeGVjdXRhYmxlKiBjcmVhdGUoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBjb25zdCBJZGVudGlm
aWVyJiBpbmZlcnJlZE5hbWUsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgYm9vbCBmb3JjZVVz
ZXNBcmd1bWVudHMsIEZ1bmN0aW9uUGFyYW1ldGVycyogcGFyYW1ldGVycywgYm9vbCBpc0luU3Ry
aWN0Q29udGV4dCwgaW50IGZpcnN0TGluZSwgaW50IGxhc3RMaW5lKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBuZXcgKE5vdE51bGwsIGFs
bG9jYXRlQ2VsbDxGdW5jdGlvbkV4ZWN1dGFibGU+KGdsb2JhbERhdGEuaGVhcCkpIEZ1bmN0aW9u
RXhlY3V0YWJsZShnbG9iYWxEYXRhLCBuYW1lLCBpbmZlcnJlZE5hbWUsIHNvdXJjZSwgZm9yY2VV
c2VzQXJndW1lbnRzLCBwYXJhbWV0ZXJzLCBpc0luU3RyaWN0Q29udGV4dCk7Ci0gICAgICAgICAg
ICBleGVjdXRhYmxlLT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhLCBuYW1lLCBmaXJzdExpbmUs
IGxhc3RMaW5lKTsKKyAgICAgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9
IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEZ1bmN0aW9uRXhlY3V0YWJsZT4oZ2xvYmFsRGF0
YS5oZWFwKSkgRnVuY3Rpb25FeGVjdXRhYmxlKGdsb2JhbERhdGEsIG5vZGUpOworICAgICAgICAg
ICAgZXhlY3V0YWJsZS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CiAgICAgICAgICAgICBy
ZXR1cm4gZXhlY3V0YWJsZTsKICAgICAgICAgfQorICAgICAgICBzdGF0aWMgRnVuY3Rpb25FeGVj
dXRhYmxlKiBmcm9tR2xvYmFsQ29kZShjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBFeGVjU3RhdGUq
LCBEZWJ1Z2dlciosIGNvbnN0IFNvdXJjZUNvZGUmLCBKU09iamVjdCoqIGV4Y2VwdGlvbik7CiAK
ICAgICAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAotICAgICAgICBKU0Z1bmN0
aW9uKiBtYWtlKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogc2NvcGUpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgdGhpcywgc2NvcGUpOwot
ICAgICAgICB9Ci0gICAgICAgIAogICAgICAgICAvLyBSZXR1cm5zIGVpdGhlciBjYWxsIG9yIGNv
bnN0cnVjdCBieXRlY29kZS4gVGhpcyBjYW4gYmUgYXBwcm9wcmlhdGUKICAgICAgICAgLy8gZm9y
IGFuc3dlcmluZyBxdWVzdGlvbnMgdGhhdCB0aGF0IGRvbid0IHZhcnkgYmV0d2VlbiBjYWxsIGFu
ZCBjb25zdHJ1Y3QgLS0KICAgICAgICAgLy8gZm9yIGV4YW1wbGUsIGFyZ3VtZW50c1JlZ2lzdGVy
KCkuCkBAIC03MDgsNyArNjk3LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBj
bGVhckNvZGVJZk5vdENvbXBpbGluZygpOwogICAgICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0gICAgICAgIHN0YXRpYyBGdW5jdGlvbkV4ZWN1
dGFibGUqIGZyb21HbG9iYWxDb2RlKGNvbnN0IElkZW50aWZpZXImLCBFeGVjU3RhdGUqLCBEZWJ1
Z2dlciosIGNvbnN0IFNvdXJjZUNvZGUmLCBKU09iamVjdCoqIGV4Y2VwdGlvbik7CiAgICAgICAg
IHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pCiAgICAgICAg
IHsKICAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9i
YWxPYmplY3QsIHByb3RvLCBUeXBlSW5mbyhGdW5jdGlvbkV4ZWN1dGFibGVUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksICZzX2luZm8pOwpAQCAtNzIxLDE3ICs3MDksMTQgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHZvaWQgY2xlYXJDb2RlKCk7CiAKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBJZGVudGlm
aWVyJiBuYW1lLCBpbnQgZmlyc3RMaW5lLCBpbnQgbGFzdExpbmUpCisgICAgICAgIHZvaWQgZmlu
aXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogICAgICAgICB7CiAgICAgICAg
ICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKLSAgICAgICAgICAgIG1fZmly
c3RMaW5lID0gZmlyc3RMaW5lOwotICAgICAgICAgICAgbV9sYXN0TGluZSA9IGxhc3RMaW5lOwot
ICAgICAgICAgICAgbV9uYW1lVmFsdWUuc2V0KGdsb2JhbERhdGEsIHRoaXMsIGpzU3RyaW5nKCZn
bG9iYWxEYXRhLCBuYW1lLnVzdHJpbmcoKSkpOworICAgICAgICAgICAgbV9uYW1lVmFsdWUuc2V0
KGdsb2JhbERhdGEsIHRoaXMsIGpzU3RyaW5nKCZnbG9iYWxEYXRhLCBuYW1lKCkudXN0cmluZygp
KSk7CiAgICAgICAgIH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJs
ZShKU0dsb2JhbERhdGEmLCBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBjb25zdCBJZGVudGlmaWVy
JiBpbmZlcnJlZE5hbWUsIGNvbnN0IFNvdXJjZUNvZGUmLCBib29sIGZvcmNlVXNlc0FyZ3VtZW50
cywgRnVuY3Rpb25QYXJhbWV0ZXJzKiwgYm9vbCk7Ci0gICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJs
ZShFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBjb25zdCBJZGVudGlmaWVyJiBp
bmZlcnJlZE5hbWUsIGNvbnN0IFNvdXJjZUNvZGUmLCBib29sIGZvcmNlVXNlc0FyZ3VtZW50cywg
RnVuY3Rpb25QYXJhbWV0ZXJzKiwgYm9vbCk7CisgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZShK
U0dsb2JhbERhdGEmLCBGdW5jdGlvbkJvZHlOb2RlKik7CiAKICAgICAgICAgSlNPYmplY3QqIGNv
bXBpbGVGb3JDYWxsSW50ZXJuYWwoRXhlY1N0YXRlKiwgSlNTY29wZSosIEpJVENvZGU6OkpJVFR5
cGUsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXggPSBVSU5UX01BWCk7CiAgICAgICAgIEpTT2JqZWN0
KiBjb21waWxlRm9yQ29uc3RydWN0SW50ZXJuYWwoRXhlY1N0YXRlKiwgSlNTY29wZSosIEpJVENv
ZGU6OkpJVFR5cGUsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXggPSBVSU5UX01BWCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hbWVTY29wZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmFtZVNjb3BlLmgJKHJldmlzaW9uIDEy
NzY0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmFtZVNjb3BlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDE0IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBKU05h
bWVTY29wZSogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgaWRlbnRp
ZmllciwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKICAgICB7Ci0gICAgICAg
IEpTTmFtZVNjb3BlKiBzY29wZU9iamVjdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpT
TmFtZVNjb3BlPigqZXhlYy0+aGVhcCgpKSkgSlNOYW1lU2NvcGUoZXhlYyk7CisgICAgICAgIEpT
TmFtZVNjb3BlKiBzY29wZU9iamVjdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTTmFt
ZVNjb3BlPigqZXhlYy0+aGVhcCgpKSkgSlNOYW1lU2NvcGUoZXhlYywgZXhlYy0+c2NvcGUoKSk7
CisgICAgICAgIHNjb3BlT2JqZWN0LT5maW5pc2hDcmVhdGlvbihleGVjLCBpZGVudGlmaWVyLCB2
YWx1ZSwgYXR0cmlidXRlcyk7CisgICAgICAgIHJldHVybiBzY29wZU9iamVjdDsKKyAgICB9CisK
KyAgICBzdGF0aWMgSlNOYW1lU2NvcGUqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElk
ZW50aWZpZXImIGlkZW50aWZpZXIsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMs
IEpTU2NvcGUqIG5leHQpCisgICAgeworICAgICAgICBKU05hbWVTY29wZSogc2NvcGVPYmplY3Qg
PSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU05hbWVTY29wZT4oKmV4ZWMtPmhlYXAoKSkp
IEpTTmFtZVNjb3BlKGV4ZWMsIG5leHQpOwogICAgICAgICBzY29wZU9iamVjdC0+ZmluaXNoQ3Jl
YXRpb24oZXhlYywgaWRlbnRpZmllciwgdmFsdWUsIGF0dHJpYnV0ZXMpOwogICAgICAgICByZXR1
cm4gc2NvcGVPYmplY3Q7CiAgICAgfQpAQCAtNjQsMTIgKzcxLDEyIEBAIHByb3RlY3RlZDoKICAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRPd25Q
cm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgQmFzZTo6U3RydWN0dXJlRmxh
Z3M7CiAKIHByaXZhdGU6Ci0gICAgSlNOYW1lU2NvcGUoRXhlY1N0YXRlKiBleGVjKQorICAgIEpT
TmFtZVNjb3BlKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogbmV4dCkKICAgICAgICAgOiBCYXNl
KAogICAgICAgICAgICAgZXhlYy0+Z2xvYmFsRGF0YSgpLAogICAgICAgICAgICAgZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpLT5uYW1lU2NvcGVTdHJ1Y3R1cmUoKSwKICAgICAgICAgICAgIHJl
aW50ZXJwcmV0X2Nhc3Q8UmVnaXN0ZXIqPigmbV9yZWdpc3RlclN0b3JlICsgMSksCi0gICAgICAg
ICAgICBleGVjLT5zY29wZSgpCisgICAgICAgICAgICBuZXh0CiAgICAgICAgICkKICAgICB7CiAg
ICAgfQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTI3NjQ4KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMTItMDktMDMgIEdlb2ZmcmV5IEdh
cmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KKworICAgICAgICBOYW1lZCBmdW5jdGlvbnMgc2hvdWxk
IG5vdCBhbGxvY2F0ZSBzY29wZSBvYmplY3RzIGZvciB0aGVpciBuYW1lcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTU2NTkKKworICAgICAgICBSZXZp
ZXdlZCBieSBPbGl2ZXIgSHVudC4KKworICAgICAgICBBZGRlZCBjb3ZlcmFnZSBmb3Igc29tZSBl
eHRyYS10cmlja3kgY2FzZXMuCisKKyAgICAgICAgKiBmYXN0L2pzL25hbWVkLWZ1bmN0aW9uLWV4
cHJlc3Npb24tZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZhc3QvanMvc2NyaXB0LXRlc3RzL25h
bWVkLWZ1bmN0aW9uLWV4cHJlc3Npb24uanM6CisgICAgICAgIChzaG91bGRCZVRydWVXaXRoRGVz
Y3JpcHRpb24pOiBJIHJvbGxlZCBteSBvd24gc2hvdWxkQmVUcnVlKCkgaGVyZSB0byBhdm9pZCB0
aGUKKyAgICAgICAgYnVpbHQtaW4gc2hvdWxkQmUoKSdzIGV2YWwgc2NvcGluZywgd2hpY2ggY2Fu
IGNoYW5nZSB0aGUgdmFyaWFibGUKKyAgICAgICAgcmVzb2x1dGlvbiBydWxlcyBJJ20gdHJ5aW5n
IHRvIHRlc3QuCisKIDIwMTItMDktMDUgIFJvZ2VyIEZvbmcgIDxyb2dlcl9mb25nQGFwcGxlLmNv
bT4KIAogICAgICAgICBVbnJldmlld2VkLiBTb21lIGZsYWt5IGh0dHAvdGVzdHMvc2VjdXJpdHkg
dGVzdHMgb24gV2luZG93cy4gQWRkaW5nIHRvIHNraXAgbGlzdC4KSW5kZXg6IExheW91dFRlc3Rz
L2Zhc3QvanMvbmFtZWQtZnVuY3Rpb24tZXhwcmVzc2lvbi1leHBlY3RlZC50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9uYW1lZC1mdW5jdGlvbi1leHByZXNzaW9uLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMTI3NjQ4KQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9uYW1lZC1m
dW5jdGlvbi1leHByZXNzaW9uLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsx
LDQgQEAKLUJ1ZyA0Njk4IC0ga2pzIGRvZXMgbm90IGFsbG93IG5hbWVkIGZ1bmN0aW9ucyBpbiBm
dW5jdGlvbiBleHByZXNzaW9ucy4KK1Rlc3RzIHZhcmlhYmxlIHJlc29sdXRpb24gcnVsZXMgZm9y
IG5hbWVkIGZ1bmN0aW9uIGV4cHJlc3Npb25zLgogCiBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUg
YSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIu
CiAKQEAgLTE3LDYgKzE3LDI0IEBAIHJlY3Vyc2lvbiBpcyBwb3NzaWJsZSwgdGhvdWdoCiBQQVNT
IHZhciBjdHIgPSAzOyB2YXIgeCA9IChmdW5jdGlvbiBOYW1lZChhLGIpeyBpZigtLWN0cikgcmV0
dXJuIDIgKiBOYW1lZChhLGIpOyBlbHNlIHJldHVybiBhICsgYjsgfSk7IHgoNSw2KSBpcyA0NAog
cmVncmVzc2lvbiB0ZXN0IHdoZXJlIGtqcyByZWdhcmRlZCBhbiBhbm9ueW1vdXMgZnVuY3Rpb24g
ZGVjbGFyYXRpb24gKHdoaWNoIGlzIGlsbGVnYWwpIGFzIGEgRnVuY3Rpb25FeHByCiBQQVNTIHZh
ciBoYWRFcnJvciA9IDA7IHRyeSB7IGV2YWwoImZ1bmN0aW9uKCl7IHJldHVybiAyOyB9OyIpOyB9
IGNhdGNoKGUpIHsgaGFkRXJyb3IgPSAxOyB9OyBoYWRFcnJvcjsgaXMgMQorCistLS0tLQorCitQ
QVNTOiAoZnVuY3Rpb24gY2xvc3VyZSgpIHsgcmV0dXJuIGNsb3N1cmUgPT0gYXJndW1lbnRzLmNh
bGxlZSAmJiAhdGhpcy5jbG9zdXJlOyB9KSgpIHNob3VsZCBiZSB0cnVlIGFuZCBpcy4KK1BBU1M6
IChmdW5jdGlvbiBjbG9zdXJlKCkgeyBjbG9zdXJlID0gMTsgcmV0dXJuIGNsb3N1cmUgPT0gYXJn
dW1lbnRzLmNhbGxlZSAmJiAhdGhpcy5jbG9zdXJlOyB9KSgpIHNob3VsZCBiZSB0cnVlIGFuZCBp
cy4KK1BBU1M6IChmdW5jdGlvbiBjbG9zdXJlKGNsb3N1cmUpIHsgcmV0dXJuIGNsb3N1cmUgPT0g
MSAmJiAhdGhpcy5jbG9zdXJlOyB9KSgxKSBzaG91bGQgYmUgdHJ1ZSBhbmQgaXMuCitQQVNTOiAo
ZnVuY3Rpb24gY2xvc3VyZSgpIHsgdmFyIGNsb3N1cmUgPSAxOyByZXR1cm4gY2xvc3VyZSA9PSAx
ICYmICF0aGlzLmNsb3N1cmU7IH0pKCkgc2hvdWxkIGJlIHRydWUgYW5kIGlzLgorUEFTUzogKGZ1
bmN0aW9uIGNsb3N1cmUoKSB7IGZ1bmN0aW9uIGNsb3N1cmUoKSB7IH07IHJldHVybiBjbG9zdXJl
ICE9IGFyZ3VtZW50cy5jYWxsZWUgJiYgIXRoaXMuY2xvc3VyZTsgfSkoKSBzaG91bGQgYmUgdHJ1
ZSBhbmQgaXMuCitQQVNTOiAoZnVuY3Rpb24gY2xvc3VyZSgpIHsgcmV0dXJuIChmdW5jdGlvbigp
IHsgcmV0dXJuIGNsb3N1cmUgJiYgIXRoaXMuY2xvc3VyZTsgfSkoKTsgfSkoKSBzaG91bGQgYmUg
dHJ1ZSBhbmQgaXMuCitQQVNTOiAoZnVuY3Rpb24gY2xvc3VyZSgpIHsgcmV0dXJuIChmdW5jdGlv
bigpIHsgY2xvc3VyZSA9IG51bGw7IHJldHVybiBjbG9zdXJlICYmICF0aGlzLmNsb3N1cmU7IH0p
KCk7IH0pKCkgc2hvdWxkIGJlIHRydWUgYW5kIGlzLgorUEFTUzogKGZ1bmN0aW9uIGNsb3N1cmUo
KSB7IHJldHVybiAoZnVuY3Rpb24oKSB7IHJldHVybiBjbG9zdXJlICYmICF0aGlzLmNsb3N1cmU7
IH0pOyB9KSgpKCkgc2hvdWxkIGJlIHRydWUgYW5kIGlzLgorUEFTUzogKGZ1bmN0aW9uIGNsb3N1
cmUoKSB7IHJldHVybiAoZnVuY3Rpb24oKSB7IGNsb3N1cmUgPSBudWxsOyByZXR1cm4gY2xvc3Vy
ZSAmJiAhdGhpcy5jbG9zdXJlOyB9KTsgfSkoKSgpIHNob3VsZCBiZSB0cnVlIGFuZCBpcy4KK1BB
U1M6IChmdW5jdGlvbiBjbG9zdXJlKCkgeyBldmFsKCJ2YXIgY2xvc3VyZSIpOyByZXR1cm4gY2xv
c3VyZSA9PSB1bmRlZmluZWQgJiYgIXRoaXMuY2xvc3VyZTsgfSkoKSBzaG91bGQgYmUgdHJ1ZSBh
bmQgaXMuCitQQVNTOiAoZnVuY3Rpb24gY2xvc3VyZSgpIHsgZXZhbCgiZnVuY3Rpb24gY2xvc3Vy
ZSgpIHsgfSIpOyByZXR1cm4gY2xvc3VyZSAhPSBhcmd1bWVudHMuY2FsbGVlICYmICF0aGlzLmNs
b3N1cmU7IH0pKCkgc2hvdWxkIGJlIHRydWUgYW5kIGlzLgorUEFTUzogKGZ1bmN0aW9uIGNsb3N1
cmUoKSB7IGV2YWwoInZhciBjbG9zdXJlOyIpOyBjbG9zdXJlID0gMTsgcmV0dXJuIGNsb3N1cmUg
PT0gMSAmJiAhdGhpcy5jbG9zdXJlOyB9KSgpIHNob3VsZCBiZSB0cnVlIGFuZCBpcy4KK1BBU1M6
IChmdW5jdGlvbiBjbG9zdXJlKCkgeyBldmFsKCJ2YXIgY2xvc3VyZSIpOyBkZWxldGUgY2xvc3Vy
ZTsgcmV0dXJuIGNsb3N1cmUgPT0gYXJndW1lbnRzLmNhbGxlZSAmJiAhdGhpcy5jbG9zdXJlOyB9
KSgpIHNob3VsZCBiZSB0cnVlIGFuZCBpcy4KK1BBU1M6IChmdW5jdGlvbiBjbG9zdXJlKCkgeyBl
dmFsKCJmdW5jdGlvbiBjbG9zdXJlKCkgeyB9Iik7IGRlbGV0ZSBjbG9zdXJlOyByZXR1cm4gY2xv
c3VyZSA9PSBhcmd1bWVudHMuY2FsbGVlICYmICF0aGlzLmNsb3N1cmU7IH0pKCkgc2hvdWxkIGJl
IHRydWUgYW5kIGlzLgorUEFTUzogKGZ1bmN0aW9uIGNsb3N1cmUoKSB7IGV2YWwoImNsb3N1cmUg
PSAxOyIpOyByZXR1cm4gY2xvc3VyZSA9PSBhcmd1bWVudHMuY2FsbGVlICYmICF0aGlzLmNsb3N1
cmU7IH0pKCkgc2hvdWxkIGJlIHRydWUgYW5kIGlzLgogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQg
aXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL3Njcmlw
dC10ZXN0cy9uYW1lZC1mdW5jdGlvbi1leHByZXNzaW9uLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2Zhc3QvanMvc2NyaXB0LXRlc3RzL25hbWVkLWZ1bmN0aW9uLWV4cHJlc3Npb24uanMJ
KHJldmlzaW9uIDEyNzY0OCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvc2NyaXB0LXRlc3RzL25h
bWVkLWZ1bmN0aW9uLWV4cHJlc3Npb24uanMJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiBkZXNjcmlwdGlvbigKLSJCdWcgNDY5OCAtIGtqcyBkb2VzIG5vdCBhbGxvdyBuYW1lZCBmdW5j
dGlvbnMgaW4gZnVuY3Rpb24gZXhwcmVzc2lvbnMuIgorIlRlc3RzIHZhcmlhYmxlIHJlc29sdXRp
b24gcnVsZXMgZm9yIG5hbWVkIGZ1bmN0aW9uIGV4cHJlc3Npb25zLiIKICk7CiAKIGZ1bmN0aW9u
IENhbGwobGFtYmRhKSB7IHJldHVybiBsYW1iZGEoKTsgfQpAQCAtMjQsMyArMjQsMTA1IEBAIHNo
b3VsZEJlKCJ2YXIgY3RyID0gMzsgdmFyIHggPSAoZnVuY3Rpb24KIAogZGVidWcoInJlZ3Jlc3Np
b24gdGVzdCB3aGVyZSBranMgcmVnYXJkZWQgYW4gYW5vbnltb3VzIGZ1bmN0aW9uIGRlY2xhcmF0
aW9uICh3aGljaCBpcyBpbGxlZ2FsKSBhcyBhIEZ1bmN0aW9uRXhwciIpOwogc2hvdWxkQmUoJ3Zh
ciBoYWRFcnJvciA9IDA7IHRyeSB7IGV2YWwoImZ1bmN0aW9uKCl7IHJldHVybiAyOyB9OyIpOyB9
IGNhdGNoKGUpIHsgaGFkRXJyb3IgPSAxOyB9OyBoYWRFcnJvcjsnLCAiMSIpOworCitkZWJ1Zygi
XG4tLS0tLVxuIik7CisKK2Z1bmN0aW9uIHNob3VsZEJlVHJ1ZVdpdGhEZXNjcmlwdGlvbih4LCB4
RGVzY3JpcHRpb24pCit7CisJaWYgKHgpIHsKKwkJZGVidWcoIlBBU1M6ICIgKyB4RGVzY3JpcHRp
b24gKyAiIHNob3VsZCBiZSB0cnVlIGFuZCBpcy4iKTsKKwkJcmV0dXJuOworCX0KKworCWRlYnVn
KCJGQUlMOiAiICsgeERlc2NyaXB0aW9uICsgIiBzaG91bGQgYmUgdHJ1ZSBidXQgaXNuJ3QuIik7
Cit9CisKKy8vIFJlY3Vyc2lvbi4KK3Nob3VsZEJlVHJ1ZVdpdGhEZXNjcmlwdGlvbigKKwkoZnVu
Y3Rpb24gY2xvc3VyZSgpIHsgcmV0dXJuIGNsb3N1cmUgPT0gYXJndW1lbnRzLmNhbGxlZSAmJiAh
dGhpcy5jbG9zdXJlOyB9KSgpLAorCSIoZnVuY3Rpb24gY2xvc3VyZSgpIHsgcmV0dXJuIGNsb3N1
cmUgPT0gYXJndW1lbnRzLmNhbGxlZSAmJiAhdGhpcy5jbG9zdXJlOyB9KSgpIgorKTsKKworLy8g
QXNzaWdubWVudC4KK3Nob3VsZEJlVHJ1ZVdpdGhEZXNjcmlwdGlvbigKKwkoZnVuY3Rpb24gY2xv
c3VyZSgpIHsgY2xvc3VyZSA9IDE7IHJldHVybiBjbG9zdXJlID09IGFyZ3VtZW50cy5jYWxsZWUg
JiYgIXRoaXMuY2xvc3VyZTsgfSkoKSwKKwkiKGZ1bmN0aW9uIGNsb3N1cmUoKSB7IGNsb3N1cmUg
PSAxOyByZXR1cm4gY2xvc3VyZSA9PSBhcmd1bWVudHMuY2FsbGVlICYmICF0aGlzLmNsb3N1cmU7
IH0pKCkiCispOworCisvLyBGdW5jdGlvbiBuYW1lIHZzIHBhcmFtZXRlci4KK3Nob3VsZEJlVHJ1
ZVdpdGhEZXNjcmlwdGlvbigKKwkoZnVuY3Rpb24gY2xvc3VyZShjbG9zdXJlKSB7IHJldHVybiBj
bG9zdXJlID09IDEgJiYgIXRoaXMuY2xvc3VyZTsgfSkoMSksCisJIihmdW5jdGlvbiBjbG9zdXJl
KGNsb3N1cmUpIHsgcmV0dXJuIGNsb3N1cmUgPT0gMSAmJiAhdGhpcy5jbG9zdXJlOyB9KSgxKSIK
Kyk7CisKKy8vIEZ1bmN0aW9uIG5hbWUgdnMgdmFyLgorc2hvdWxkQmVUcnVlV2l0aERlc2NyaXB0
aW9uKAorCShmdW5jdGlvbiBjbG9zdXJlKCkgeyB2YXIgY2xvc3VyZSA9IDE7IHJldHVybiBjbG9z
dXJlID09IDEgJiYgIXRoaXMuY2xvc3VyZTsgfSkoKSwKKwkiKGZ1bmN0aW9uIGNsb3N1cmUoKSB7
IHZhciBjbG9zdXJlID0gMTsgcmV0dXJuIGNsb3N1cmUgPT0gMSAmJiAhdGhpcy5jbG9zdXJlOyB9
KSgpIgorKTsKKworLy8gRnVuY3Rpb24gbmFtZSB2cyBkZWNsYXJlZCBmdW5jdGlvbi4KK3Nob3Vs
ZEJlVHJ1ZVdpdGhEZXNjcmlwdGlvbigKKwkoZnVuY3Rpb24gY2xvc3VyZSgpIHsgZnVuY3Rpb24g
Y2xvc3VyZSgpIHsgfTsgcmV0dXJuIGNsb3N1cmUgIT0gYXJndW1lbnRzLmNhbGxlZSAmJiAhdGhp
cy5jbG9zdXJlOyB9KSgpLAorCSIoZnVuY3Rpb24gY2xvc3VyZSgpIHsgZnVuY3Rpb24gY2xvc3Vy
ZSgpIHsgfTsgcmV0dXJuIGNsb3N1cmUgIT0gYXJndW1lbnRzLmNhbGxlZSAmJiAhdGhpcy5jbG9z
dXJlOyB9KSgpIgorKTsKKworLy8gUmVzb2x2ZSBiZWZvcmUgdGVhci1vZmYuCitzaG91bGRCZVRy
dWVXaXRoRGVzY3JpcHRpb24oCisJKGZ1bmN0aW9uIGNsb3N1cmUoKSB7IHJldHVybiAoZnVuY3Rp
b24oKSB7IHJldHVybiBjbG9zdXJlICYmICF0aGlzLmNsb3N1cmU7IH0pKCk7IH0pKCksCisJIihm
dW5jdGlvbiBjbG9zdXJlKCkgeyByZXR1cm4gKGZ1bmN0aW9uKCkgeyByZXR1cm4gY2xvc3VyZSAm
JiAhdGhpcy5jbG9zdXJlOyB9KSgpOyB9KSgpIgorKTsKKworLy8gUmVzb2x2ZSBhc3NpZ25tZW50
IGJlZm9yZSB0ZWFyLW9mZi4KK3Nob3VsZEJlVHJ1ZVdpdGhEZXNjcmlwdGlvbigKKwkoZnVuY3Rp
b24gY2xvc3VyZSgpIHsgcmV0dXJuIChmdW5jdGlvbigpIHsgY2xvc3VyZSA9IG51bGw7IHJldHVy
biBjbG9zdXJlICYmICF0aGlzLmNsb3N1cmU7IH0pKCk7IH0pKCksCisJIihmdW5jdGlvbiBjbG9z
dXJlKCkgeyByZXR1cm4gKGZ1bmN0aW9uKCkgeyBjbG9zdXJlID0gbnVsbDsgcmV0dXJuIGNsb3N1
cmUgJiYgIXRoaXMuY2xvc3VyZTsgfSkoKTsgfSkoKSIKKyk7CisKKy8vIFJlc29sdmUgYWZ0ZXIg
dGVhci1vZmYuCitzaG91bGRCZVRydWVXaXRoRGVzY3JpcHRpb24oCisJKGZ1bmN0aW9uIGNsb3N1
cmUoKSB7IHJldHVybiAoZnVuY3Rpb24oKSB7IHJldHVybiBjbG9zdXJlICYmICF0aGlzLmNsb3N1
cmU7IH0pOyB9KSgpKCksCisJIihmdW5jdGlvbiBjbG9zdXJlKCkgeyByZXR1cm4gKGZ1bmN0aW9u
KCkgeyByZXR1cm4gY2xvc3VyZSAmJiAhdGhpcy5jbG9zdXJlOyB9KTsgfSkoKSgpIgorKTsKKwor
Ly8gUmVzb2x2ZSBhc3NpZ25tZW50IGFmdGVyIHRlYXItb2ZmLgorc2hvdWxkQmVUcnVlV2l0aERl
c2NyaXB0aW9uKAorCShmdW5jdGlvbiBjbG9zdXJlKCkgeyByZXR1cm4gKGZ1bmN0aW9uKCkgeyBj
bG9zdXJlID0gbnVsbDsgcmV0dXJuIGNsb3N1cmUgJiYgIXRoaXMuY2xvc3VyZTsgfSk7IH0pKCko
KSwKKwkiKGZ1bmN0aW9uIGNsb3N1cmUoKSB7IHJldHVybiAoZnVuY3Rpb24oKSB7IGNsb3N1cmUg
PSBudWxsOyByZXR1cm4gY2xvc3VyZSAmJiAhdGhpcy5jbG9zdXJlOyB9KTsgfSkoKSgpIgorKTsK
KworLy8gRXZhbCB2YXIgc2hhZG93aW5nIChzaG91bGQgb3ZlcndyaXRlKS4KK3Nob3VsZEJlVHJ1
ZVdpdGhEZXNjcmlwdGlvbigKKwkoZnVuY3Rpb24gY2xvc3VyZSgpIHsgZXZhbCgidmFyIGNsb3N1
cmUiKTsgcmV0dXJuIGNsb3N1cmUgPT0gdW5kZWZpbmVkICYmICF0aGlzLmNsb3N1cmU7IH0pKCks
CisJIihmdW5jdGlvbiBjbG9zdXJlKCkgeyBldmFsKFwidmFyIGNsb3N1cmVcIik7IHJldHVybiBj
bG9zdXJlID09IHVuZGVmaW5lZCAmJiAhdGhpcy5jbG9zdXJlOyB9KSgpIgorKTsKKworLy8gRXZh
bCBmdW5jdGlvbiBzaGFkb3dpbmcgKHNob3VsZCBvdmVyd3JpdGUpLgorc2hvdWxkQmVUcnVlV2l0
aERlc2NyaXB0aW9uKAorCShmdW5jdGlvbiBjbG9zdXJlKCkgeyBldmFsKCJmdW5jdGlvbiBjbG9z
dXJlKCkgeyB9Iik7IHJldHVybiBjbG9zdXJlICE9IGFyZ3VtZW50cy5jYWxsZWUgJiYgIXRoaXMu
Y2xvc3VyZTsgfSkoKSwKKwkiKGZ1bmN0aW9uIGNsb3N1cmUoKSB7IGV2YWwoXCJmdW5jdGlvbiBj
bG9zdXJlKCkgeyB9XCIpOyByZXR1cm4gY2xvc3VyZSAhPSBhcmd1bWVudHMuY2FsbGVlICYmICF0
aGlzLmNsb3N1cmU7IH0pKCkiCispOworCisvLyBFdmFsIHNoYWRvd2luZyAoc2hvdWxkIG92ZXJ3
cml0ZSksIGZvbGxvd2VkIGJ5IHB1dCAoc2hvdWxkIG92ZXJ3cml0ZSkuCitzaG91bGRCZVRydWVX
aXRoRGVzY3JpcHRpb24oCisJKGZ1bmN0aW9uIGNsb3N1cmUoKSB7IGV2YWwoInZhciBjbG9zdXJl
OyIpOyBjbG9zdXJlID0gMTsgcmV0dXJuIGNsb3N1cmUgPT0gMSAmJiAhdGhpcy5jbG9zdXJlOyB9
KSgpLAorCSIoZnVuY3Rpb24gY2xvc3VyZSgpIHsgZXZhbChcInZhciBjbG9zdXJlO1wiKTsgY2xv
c3VyZSA9IDE7IHJldHVybiBjbG9zdXJlID09IDEgJiYgIXRoaXMuY2xvc3VyZTsgfSkoKSIKKyk7
CisKKy8vIEV2YWwgdmFyIHNoYWRvd2luZywgZm9sbG93ZWQgYnkgZGVsZXRlIChzaG91bGQgbm90
IG92ZXJ3cml0ZSkuCitzaG91bGRCZVRydWVXaXRoRGVzY3JpcHRpb24oCisJKGZ1bmN0aW9uIGNs
b3N1cmUoKSB7IGV2YWwoInZhciBjbG9zdXJlIik7IGRlbGV0ZSBjbG9zdXJlOyByZXR1cm4gY2xv
c3VyZSA9PSBhcmd1bWVudHMuY2FsbGVlICYmICF0aGlzLmNsb3N1cmU7IH0pKCksCisJIihmdW5j
dGlvbiBjbG9zdXJlKCkgeyBldmFsKFwidmFyIGNsb3N1cmVcIik7IGRlbGV0ZSBjbG9zdXJlOyBy
ZXR1cm4gY2xvc3VyZSA9PSBhcmd1bWVudHMuY2FsbGVlICYmICF0aGlzLmNsb3N1cmU7IH0pKCki
CispOworCisvLyBFdmFsIGZ1bmN0aW9uIHNoYWRvd2luZywgZm9sbG93ZWQgYnkgZGVsZXRlIChz
aG91bGQgbm90IG92ZXJ3cml0ZSkuCitzaG91bGRCZVRydWVXaXRoRGVzY3JpcHRpb24oCisJKGZ1
bmN0aW9uIGNsb3N1cmUoKSB7IGV2YWwoImZ1bmN0aW9uIGNsb3N1cmUoKSB7IH0iKTsgZGVsZXRl
IGNsb3N1cmU7IHJldHVybiBjbG9zdXJlID09IGFyZ3VtZW50cy5jYWxsZWUgJiYgIXRoaXMuY2xv
c3VyZTsgfSkoKSwKKwkiKGZ1bmN0aW9uIGNsb3N1cmUoKSB7IGV2YWwoXCJmdW5jdGlvbiBjbG9z
dXJlKCkgeyB9XCIpOyBkZWxldGUgY2xvc3VyZTsgcmV0dXJuIGNsb3N1cmUgPT0gYXJndW1lbnRz
LmNhbGxlZSAmJiAhdGhpcy5jbG9zdXJlOyB9KSgpIgorKTsKKworLy8gRXZhbCBhc3NpZ25tZW50
IChzaG91bGQgbm90IG92ZXJ3cml0ZSkuCitzaG91bGRCZVRydWVXaXRoRGVzY3JpcHRpb24oCisJ
KGZ1bmN0aW9uIGNsb3N1cmUoKSB7IGV2YWwoImNsb3N1cmUgPSAxOyIpOyByZXR1cm4gY2xvc3Vy
ZSA9PSBhcmd1bWVudHMuY2FsbGVlICYmICF0aGlzLmNsb3N1cmU7IH0pKCksCisJIihmdW5jdGlv
biBjbG9zdXJlKCkgeyBldmFsKFwiY2xvc3VyZSA9IDE7XCIpOyByZXR1cm4gY2xvc3VyZSA9PSBh
cmd1bWVudHMuY2FsbGVlICYmICF0aGlzLmNsb3N1cmU7IH0pKCkiCispOwo=
</data>
<flag name="review"
          id="173523"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>