<?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>22378</bug_id>
          
          <creation_ts>2008-11-20 00:35:52 -0800</creation_ts>
          <short_desc>Crash submitting a form when parsing an XHTML document</short_desc>
          <delta_ts>2024-12-03 22:39:30 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>Security</product>
          <component>Security</component>
          <version>525.x (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>HasReduction, InRadar</keywords>
          <priority>P1</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>24922</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Raghu">raghavendra.deshpande</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>ap</cc>
    
    <cc>chchkchk236</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>mihnea</cc>
    
    <cc>tibor.pacaj2</cc>
    
    <cc>yong.li.webkit</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>99436</commentid>
    <comment_count>0</comment_count>
    <who name="Raghu">raghavendra.deshpande</who>
    <bug_when>2008-11-20 00:35:52 -0800</bug_when>
    <thetext>I have pasted the test content below.
If this content is present in a .xhtml file, the webkit crashes. (Verified in Safari on Win XP with latest nightly, and in Chrome - It crashes there too.)

But, if the same content is served in a .html file, It works fine.

I am afraid, the XHTML content &lt;--&gt; JS bindings have serious issues in webkit.

Here&apos;s the test content:
-------------------------------
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;!DOCTYPE html PUBLIC 
&quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; 
&quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; xml:lang=&quot;en&quot; lang=&quot;en&quot;&gt;
&lt;head&gt;
&lt;meta http-equiv=&quot;content-type&quot; content=&quot;application/xhtml+xml; charset=UTF-8&quot;/&gt;
&lt;title&gt;Form access &lt;/title&gt;
&lt;/head&gt;
&lt;body style=&quot;background-color:white;border-left:0px;border-top:0px;overflow:hidden;&quot; &gt;
&lt;form name=&quot;MyForm&quot; method=&quot;POST&quot; action=&quot;about:blank&quot;&gt;
&lt;input type=&quot;hidden&quot; name=&quot;name&quot; value=&quot;&quot;&gt;&lt;/input&gt;
&lt;/form&gt;

&lt;script type=&quot;text/javascript&quot;&gt;
document.MyForm.name.value=&quot;test&quot;;
document.MyForm.setAttribute(&quot;action&quot;,&quot;about:blank&quot;);
document.MyForm.submit();
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;
------------------------------------------------------------------</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99439</commentid>
    <comment_count>1</comment_count>
      <attachid>25305</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-11-20 02:02:25 -0800</bug_when>
    <thetext>Created attachment 25305
test case as attachment -- did not crash for me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99440</commentid>
    <comment_count>2</comment_count>
      <attachid>25306</attachid>
    <who name="Raghu">raghavendra.deshpande</who>
    <bug_when>2008-11-20 02:13:50 -0800</bug_when>
    <thetext>Created attachment 25306
Test content, that crashes the webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99444</commentid>
    <comment_count>3</comment_count>
    <who name="Raghu">raghavendra.deshpande</who>
    <bug_when>2008-11-20 02:34:24 -0800</bug_when>
    <thetext>Hi All,

You are right Eric.

   Sorry.. I found that, on Safari &amp; Chrome...
accessing forms as:
  document.forms.MyForm.name.value= &quot;something&quot;;
causes the crash...

But, 

document.MyForm.name.value= &quot;something&quot;;
doesn&apos;t crash, but doesn&apos;t work either.

I see that, the &apos;form submit&apos; action is NOT happening in .xhtml file.
If you change the file name to .html, it works.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99448</commentid>
    <comment_count>4</comment_count>
      <attachid>25309</attachid>
    <who name="Raghu">raghavendra.deshpande</who>
    <bug_when>2008-11-20 03:02:49 -0800</bug_when>
    <thetext>Created attachment 25309
Test page: Form Submit action Doesn&apos;t work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99449</commentid>
    <comment_count>5</comment_count>
      <attachid>25310</attachid>
    <who name="Raghu">raghavendra.deshpande</who>
    <bug_when>2008-11-20 03:04:06 -0800</bug_when>
    <thetext>Created attachment 25310
HTML: Asserts, may crash</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99457</commentid>
    <comment_count>6</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-11-20 05:23:02 -0800</bug_when>
    <thetext>Confirmed with r38590.

Marking attachments that do not demonstrate the problem as obsolete. This is not related to &quot;document.MyForm&quot; not being a proper way to access elements in XHTML documents in any way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99461</commentid>
    <comment_count>7</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-11-20 05:48:31 -0800</bug_when>
    <thetext>&lt;rdar://problem/6388377&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110205</commentid>
    <comment_count>8</comment_count>
      <attachid>25310</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-02-19 05:15:07 -0800</bug_when>
    <thetext>Comment on attachment 25310
HTML: Asserts, may crash

In fact, the HTML version doesn&apos;t work right either - an assertion fails in debug builds, and looking at the code, we have the same problem with using a destroyed object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>115164</commentid>
    <comment_count>9</comment_count>
      <attachid>28932</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-03-25 10:09:30 -0700</bug_when>
    <thetext>Created attachment 28932
some work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>115339</commentid>
    <comment_count>10</comment_count>
      <attachid>28971</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-03-26 09:46:38 -0700</bug_when>
    <thetext>Created attachment 28971
more work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>115576</commentid>
    <comment_count>11</comment_count>
      <attachid>29017</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-03-27 11:31:45 -0700</bug_when>
    <thetext>Created attachment 29017
more work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>115596</commentid>
    <comment_count>12</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-03-27 14:18:47 -0700</bug_when>
    <thetext>Alexey thinks there may be security impact, so moving to the security product.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>115758</commentid>
    <comment_count>13</comment_count>
      <attachid>29047</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-03-29 12:29:45 -0700</bug_when>
    <thetext>Created attachment 29047
almost done

This patch is almost ready to go.

Here&apos;s what remains:

    1) A few layout tests are failing. Two of them are failing because our behavior now matches Firefox, tests for a crash when submitting a form from an onunload handler. Not sure how to fix those two. One other is failing because back/forward is working differently. Not sure if it&apos;s a regression or progression, and how to fix it if it&apos;s a progression.

    2) No change log yet.

    3) Haven&apos;t changed the test case into a regression test yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116119</commentid>
    <comment_count>14</comment_count>
      <attachid>29149</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-03-31 18:01:14 -0700</bug_when>
    <thetext>Created attachment 29149
event closer to done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116178</commentid>
    <comment_count>15</comment_count>
      <attachid>29161</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-04-01 09:47:30 -0700</bug_when>
    <thetext>Created attachment 29161
even closer</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116221</commentid>
    <comment_count>16</comment_count>
      <attachid>29178</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-04-01 14:23:51 -0700</bug_when>
    <thetext>Created attachment 29178
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116225</commentid>
    <comment_count>17</comment_count>
      <attachid>29178</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2009-04-01 14:47:05 -0700</bug_when>
    <thetext>Comment on attachment 29178
patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116240</commentid>
    <comment_count>18</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-04-01 18:02:29 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/42158</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>25305</attachid>
            <date>2008-11-20 02:02:25 -0800</date>
            <delta_ts>2008-11-20 05:23:21 -0800</delta_ts>
            <desc>test case as attachment -- did not crash for me</desc>
            <filename>form-crash.xhtml</filename>
            <type>application/xhtml+xml</type>
            <size>731</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCFET0NUWVBFIGh0bWwgUFVC
TElDIAoiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iIAoiaHR0cDovL3d3
dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+CjxodG1sIHht
bG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVu
Ij4KPGhlYWQ+CjxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0iYXBwbGlj
YXRpb24veGh0bWwreG1sOwpjaGFyc2V0PVVURi04Ii8+Cjx0aXRsZT5Gb3JtIGFjY2VzcyA8L3Rp
dGxlPgo8L2hlYWQ+Cjxib2R5CnN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOndoaXRlO2JvcmRlci1s
ZWZ0OjBweDtib3JkZXItdG9wOjBweDtvdmVyZmxvdzpoaWRkZW47Igo+Cjxmb3JtIG5hbWU9Ik15
Rm9ybSIgbWV0aG9kPSJQT1NUIiBhY3Rpb249ImFib3V0OmJsYW5rIj4KPGlucHV0IHR5cGU9Imhp
ZGRlbiIgbmFtZT0ibmFtZSIgdmFsdWU9IiI+PC9pbnB1dD4KPC9mb3JtPgoKPHNjcmlwdCB0eXBl
PSJ0ZXh0L2phdmFzY3JpcHQiPgpkb2N1bWVudC5NeUZvcm0ubmFtZS52YWx1ZT0idGVzdCI7CmRv
Y3VtZW50Lk15Rm9ybS5zZXRBdHRyaWJ1dGUoImFjdGlvbiIsImFib3V0OmJsYW5rIik7CmRvY3Vt
ZW50Lk15Rm9ybS5zdWJtaXQoKTsKPC9zY3JpcHQ+CjwvYm9keT4KPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>25306</attachid>
            <date>2008-11-20 02:13:50 -0800</date>
            <delta_ts>2008-11-20 02:13:50 -0800</delta_ts>
            <desc>Test content, that crashes the webkit</desc>
            <filename>forms.xhtml</filename>
            <type>application/xhtml+xml</type>
            <size>788</size>
            <attacher name="Raghu">raghavendra.deshpande</attacher>
            
              <data encoding="base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhRE9DVFlQRSBodG1sIFBV
QkxJQyANCiItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgDQoiaHR0cDov
L3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+DQo8aHRt
bCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9ImVuIiBsYW5n
PSJlbiI+DQo8aGVhZD4NCjxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0i
YXBwbGljYXRpb24veGh0bWwreG1sOyBjaGFyc2V0PVVURi04Ii8+DQo8dGl0bGU+Rm9ybXMgdGVz
dDwvdGl0bGU+DQo8L2hlYWQ+DQo8Ym9keSBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjp3aGl0ZTti
b3JkZXItbGVmdDowcHg7Ym9yZGVyLXRvcDowcHg7b3ZlcmZsb3c6aGlkZGVuOyIgPg0KPGZvcm0g
bmFtZT0iTXlGb3JtIiBtZXRob2Q9IlBPU1QiIGFjdGlvbj0iYWJvdXQ6YmxhbmsiPg0KPGlucHV0
IHR5cGU9ImhpZGRlbiIgbmFtZT0ibmFtZSIgdmFsdWU9IiI+PC9pbnB1dD4NCjwvZm9ybT4NCg0K
PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KPCFbQ0RBVEFbDQpkb2N1bWVudC5mb3Jt
cy5NeUZvcm0ubmFtZS52YWx1ZT0idGVzdCI7DQpkb2N1bWVudC5mb3Jtcy5NeUZvcm0uc2V0QXR0
cmlidXRlKCJhY3Rpb24iLCJhYm91dDpibGFuayIpOw0KZG9jdW1lbnQuZm9ybXMuTXlGb3JtLnN1
Ym1pdCgpOw0KXV0+DQo8L3NjcmlwdD4NCg0KPC9ib2R5Pg0KPC9odG1sPg0KDQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>25309</attachid>
            <date>2008-11-20 03:02:49 -0800</date>
            <delta_ts>2008-11-20 05:23:34 -0800</delta_ts>
            <desc>Test page: Form Submit action Doesn&apos;t work. </desc>
            <filename>forms_test.xhtml</filename>
            <type>application/xhtml+xml</type>
            <size>768</size>
            <attacher name="Raghu">raghavendra.deshpande</attacher>
            
              <data encoding="base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCFET0NUWVBFIGh0bWwgUFVC
TElDIAoiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iIAoiaHR0cDovL3d3
dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+CjxodG1sIHht
bG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVu
Ij4KICA8aGVhZD4KICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0i
YXBwbGljYXRpb24veGh0bWwreG1sOwpjaGFyc2V0PVVURi04Ii8+CiAgICA8dGl0bGU+Rm9ybSBh
Y2Nlc3MgPC90aXRsZT4KICA8L2hlYWQ+DQo8Ym9keSANCiAgc3R5bGU9ImJhY2tncm91bmQtY29s
b3I6d2hpdGU7Ym9yZGVyLWxlZnQ6MHB4O2JvcmRlci10b3A6MHB4O292ZXJmbG93OmhpZGRlbjsi
IA0KICA+DQo8Zm9ybSBuYW1lPSJNeUZvcm0iIG1ldGhvZD0iUE9TVCIgYWN0aW9uPSJhYm91dDpi
bGFuayI+DQo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJuYW1lIiB2YWx1ZT0iIj48L2lucHV0
Pg0KPC9mb3JtPg0KDQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQpkb2N1bWVudC5N
eUZvcm0ubmFtZS52YWx1ZT0idGVzdCI7DQpkb2N1bWVudC5NeUZvcm0uc2V0QXR0cmlidXRlKCJh
Y3Rpb24iLCJhYm91dDpibGFuayIpOw0KZG9jdW1lbnQuTXlGb3JtLnN1Ym1pdCgpOw0KPC9zY3Jp
cHQ+DQoNCjwvYm9keT4NCjwvaHRtbD4NCg0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>25310</attachid>
            <date>2008-11-20 03:04:06 -0800</date>
            <delta_ts>2009-02-19 05:15:07 -0800</delta_ts>
            <desc>HTML: Asserts, may crash</desc>
            <filename>forms_test.html</filename>
            <type>text/html</type>
            <size>768</size>
            <attacher name="Raghu">raghavendra.deshpande</attacher>
            
              <data encoding="base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCFET0NUWVBFIGh0bWwgUFVC
TElDIAoiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iIAoiaHR0cDovL3d3
dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+CjxodG1sIHht
bG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVu
Ij4KICA8aGVhZD4KICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0i
YXBwbGljYXRpb24veGh0bWwreG1sOwpjaGFyc2V0PVVURi04Ii8+CiAgICA8dGl0bGU+Rm9ybSBh
Y2Nlc3MgPC90aXRsZT4KICA8L2hlYWQ+DQo8Ym9keSANCiAgc3R5bGU9ImJhY2tncm91bmQtY29s
b3I6d2hpdGU7Ym9yZGVyLWxlZnQ6MHB4O2JvcmRlci10b3A6MHB4O292ZXJmbG93OmhpZGRlbjsi
IA0KICA+DQo8Zm9ybSBuYW1lPSJNeUZvcm0iIG1ldGhvZD0iUE9TVCIgYWN0aW9uPSJhYm91dDpi
bGFuayI+DQo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJuYW1lIiB2YWx1ZT0iIj48L2lucHV0
Pg0KPC9mb3JtPg0KDQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQpkb2N1bWVudC5N
eUZvcm0ubmFtZS52YWx1ZT0idGVzdCI7DQpkb2N1bWVudC5NeUZvcm0uc2V0QXR0cmlidXRlKCJh
Y3Rpb24iLCJhYm91dDpibGFuayIpOw0KZG9jdW1lbnQuTXlGb3JtLnN1Ym1pdCgpOw0KPC9zY3Jp
cHQ+DQoNCjwvYm9keT4NCjwvaHRtbD4NCg0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28932</attachid>
            <date>2009-03-25 10:09:30 -0700</date>
            <delta_ts>2009-03-26 09:46:38 -0700</delta_ts>
            <desc>some work in progress</desc>
            <filename>FormWorkInProgress.txt</filename>
            <type>text/plain</type>
            <size>24988</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCShyZXZpc2lvbiA0MTk3NSkKKysrIFdlYkNv
cmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTYsMTQgKzI5
NiwxNCBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudDo6c3VibWl0KEV2ZW50KiBldmVuCiAgICAgSFRN
TEZvcm1Db250cm9sRWxlbWVudCogZmlyc3RTdWNjZXNzZnVsU3VibWl0QnV0dG9uID0gMDsKICAg
ICBib29sIG5lZWRCdXR0b25BY3RpdmF0aW9uID0gYWN0aXZhdGVTdWJtaXRCdXR0b247IC8vIGRv
IHdlIG5lZWQgdG8gYWN0aXZhdGUgYSBzdWJtaXQgYnV0dG9uPwogICAgIAotICAgIGZyYW1lLT5s
b2FkZXIoKS0+Y2xlYXJSZWNvcmRlZEZvcm1WYWx1ZXMoKTsKLSAgICBmcmFtZS0+bG9hZGVyKCkt
PnNldEZvcm1BYm91dFRvQmVTdWJtaXR0ZWQodGhpcyk7CisgICAgSGFzaE1hcDxTdHJpbmcsIFN0
cmluZz4gZm9ybVZhbHVlczsKKwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmb3JtRWxl
bWVudHMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogY29u
dHJvbCA9IGZvcm1FbGVtZW50c1tpXTsKICAgICAgICAgaWYgKGNvbnRyb2wtPmhhc0xvY2FsTmFt
ZShpbnB1dFRhZykpIHsKICAgICAgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gc3Rh
dGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KGNvbnRyb2wpOwogICAgICAgICAgICAgaWYgKGlu
cHV0LT5pc1RleHRGaWVsZCgpKSB7Ci0gICAgICAgICAgICAgICAgZnJhbWUtPmxvYWRlcigpLT5y
ZWNvcmRGb3JtVmFsdWUoaW5wdXQtPm5hbWUoKSwgaW5wdXQtPnZhbHVlKCkpOworICAgICAgICAg
ICAgICAgIGZvcm1WYWx1ZXMuc2V0KGlucHV0LT5uYW1lKCksIGlucHV0LT52YWx1ZSgpKTsKICAg
ICAgICAgICAgICAgICBpZiAoaW5wdXQtPmlzU2VhcmNoRmllbGQoKSkKICAgICAgICAgICAgICAg
ICAgICAgaW5wdXQtPmFkZFNlYXJjaFJlc3VsdCgpOwogICAgICAgICAgICAgfQpAQCAtMzQxLDE0
ICszNDEsMTQgQEAgdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnN1Ym1pdChFdmVudCogZXZlbgogICAg
ICAgICAgICAgICAgIEZvcm1EYXRhQnVpbGRlcjo6ZW5jb2RlU3RyaW5nQXNGb3JtRGF0YShib2R5
RGF0YSwgYm9keS51dGY4KCkpOwogICAgICAgICAgICAgICAgIGRhdGEgPSBGb3JtRGF0YTo6Y3Jl
YXRlKFN0cmluZyhib2R5RGF0YS5kYXRhKCksIGJvZHlEYXRhLnNpemUoKSkucmVwbGFjZSgnKycs
ICIlMjAiKS5sYXRpbjEoKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBmcmFtZS0+bG9h
ZGVyKCktPnN1Ym1pdEZvcm0oIlBPU1QiLCBtX3VybCwgZGF0YSwgbV90YXJnZXQsIG1fZm9ybURh
dGFCdWlsZGVyLmVuY29kaW5nVHlwZSgpLCBTdHJpbmcoKSwgZXZlbnQsIGxvY2tIaXN0b3J5LCBs
b2NrQmFja0ZvcndhcmRMaXN0KTsKKyAgICAgICAgICAgIGZyYW1lLT5sb2FkZXIoKS0+c2NoZWR1
bGVGb3JtU3VibWlzc2lvbih0aGlzLCBGb3JtUG9zdCwgbV91cmwsIGRhdGEsIGZvcm1WYWx1ZXMs
IG1fdGFyZ2V0LCBtX2Zvcm1EYXRhQnVpbGRlci5lbmNvZGluZ1R5cGUoKSwgU3RyaW5nKCksIGV2
ZW50LCBsb2NrSGlzdG9yeSwgbG9ja0JhY2tGb3J3YXJkTGlzdCk7CiAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICBWZWN0b3I8Y2hhcj4gYm91bmRhcnkgPSBtX2Zvcm1EYXRhQnVpbGRlci5n
ZW5lcmF0ZVVuaXF1ZUJvdW5kYXJ5U3RyaW5nKCk7Ci0gICAgICAgICAgICBmcmFtZS0+bG9hZGVy
KCktPnN1Ym1pdEZvcm0oIlBPU1QiLCBtX3VybCwgY3JlYXRlRm9ybURhdGEoYm91bmRhcnkuZGF0
YSgpKSwgbV90YXJnZXQsIG1fZm9ybURhdGFCdWlsZGVyLmVuY29kaW5nVHlwZSgpLCBib3VuZGFy
eS5kYXRhKCksIGV2ZW50LCBsb2NrSGlzdG9yeSwgbG9ja0JhY2tGb3J3YXJkTGlzdCk7CisgICAg
ICAgICAgICBmcmFtZS0+bG9hZGVyKCktPnNjaGVkdWxlRm9ybVN1Ym1pc3Npb24odGhpcywgRm9y
bVBvc3QsIG1fdXJsLCBjcmVhdGVGb3JtRGF0YShib3VuZGFyeS5kYXRhKCkpLCBmb3JtVmFsdWVz
LCBtX3RhcmdldCwgbV9mb3JtRGF0YUJ1aWxkZXIuZW5jb2RpbmdUeXBlKCksIGJvdW5kYXJ5LmRh
dGEoKSwgZXZlbnQsIGxvY2tIaXN0b3J5LCBsb2NrQmFja0ZvcndhcmRMaXN0KTsKICAgICAgICAg
fQogICAgIH0gZWxzZSB7CiAgICAgICAgIG1fZm9ybURhdGFCdWlsZGVyLnNldElzTXVsdGlQYXJ0
Rm9ybShmYWxzZSk7Ci0gICAgICAgIGZyYW1lLT5sb2FkZXIoKS0+c3VibWl0Rm9ybSgiR0VUIiwg
bV91cmwsIGNyZWF0ZUZvcm1EYXRhKENTdHJpbmcoKSksIG1fdGFyZ2V0LCBTdHJpbmcoKSwgU3Ry
aW5nKCksIGV2ZW50LCBsb2NrSGlzdG9yeSwgbG9ja0JhY2tGb3J3YXJkTGlzdCk7CisgICAgICAg
IGZyYW1lLT5sb2FkZXIoKS0+c2NoZWR1bGVGb3JtU3VibWlzc2lvbih0aGlzLCBGb3JtR2V0LCBt
X3VybCwgY3JlYXRlRm9ybURhdGEoQ1N0cmluZygpKSwgZm9ybVZhbHVlcywgbV90YXJnZXQsIFN0
cmluZygpLCBTdHJpbmcoKSwgZXZlbnQsIGxvY2tIaXN0b3J5LCBsb2NrQmFja0ZvcndhcmRMaXN0
KTsKICAgICB9CiAKICAgICBpZiAobmVlZEJ1dHRvbkFjdGl2YXRpb24gJiYgZmlyc3RTdWNjZXNz
ZnVsU3VibWl0QnV0dG9uKQpJbmRleDogV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkocmV2aXNpb24gNDE5
NzUpCisrKyBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE0Myw0OCArMTQzLDMxIEBAIHN0YXRpYyBVUkxTY2hlbWVzTWFwJiBub0FjY2Vzc1NjaGVtZXMo
KQogICAgIHJldHVybiBub0FjY2Vzc1NjaGVtZXM7CiB9CiAKLXN0cnVjdCBGb3JtU3VibWlzc2lv
biB7Ci0gICAgRm9ybVN1Ym1pc3Npb24oY29uc3QgY2hhciogYWN0aW9uLCBjb25zdCBTdHJpbmcm
IHVybCwgUGFzc1JlZlB0cjxGb3JtRGF0YT4gZm9ybURhdGEsCi0gICAgICAgICAgICAgICAgICAg
Y29uc3QgU3RyaW5nJiB0YXJnZXQsIGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUsIGNvbnN0IFN0
cmluZyYgYm91bmRhcnksCi0gICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxFdmVudD4gZXZl
bnQsIGJvb2wgbG9ja0hpc3RvcnksIGJvb2wgbG9ja0JhY2tGb3J3YXJkTGlzdCkKLSAgICAgICAg
OiBhY3Rpb24oYWN0aW9uKQotICAgICAgICAsIHVybCh1cmwpCi0gICAgICAgICwgZm9ybURhdGEo
Zm9ybURhdGEpCi0gICAgICAgICwgdGFyZ2V0KHRhcmdldCkKLSAgICAgICAgLCBjb250ZW50VHlw
ZShjb250ZW50VHlwZSkKLSAgICAgICAgLCBib3VuZGFyeShib3VuZGFyeSkKLSAgICAgICAgLCBl
dmVudChldmVudCkKLSAgICAgICAgLCBsb2NrSGlzdG9yeShsb2NrSGlzdG9yeSkKLSAgICAgICAg
LCBsb2NrQmFja0ZvcndhcmRMaXN0KGxvY2tCYWNrRm9yd2FyZExpc3QpCi0gICAgewotICAgIH0K
LQotICAgIGNvbnN0IGNoYXIqIGFjdGlvbjsKLSAgICBTdHJpbmcgdXJsOwotICAgIFJlZlB0cjxG
b3JtRGF0YT4gZm9ybURhdGE7Ci0gICAgU3RyaW5nIHRhcmdldDsKLSAgICBTdHJpbmcgY29udGVu
dFR5cGU7Ci0gICAgU3RyaW5nIGJvdW5kYXJ5OwotICAgIFJlZlB0cjxFdmVudD4gZXZlbnQ7Ci0g
ICAgYm9vbCBsb2NrSGlzdG9yeTsKLSAgICBib29sIGxvY2tCYWNrRm9yd2FyZExpc3Q7Ci19Owot
CiBzdHJ1Y3QgU2NoZWR1bGVkUmVkaXJlY3Rpb24gewotICAgIGVudW0gVHlwZSB7IHJlZGlyZWN0
aW9uLCBsb2NhdGlvbkNoYW5nZSwgaGlzdG9yeU5hdmlnYXRpb24sIGxvY2F0aW9uQ2hhbmdlRHVy
aW5nTG9hZCB9OworICAgIGVudW0gVHlwZSB7IHJlZGlyZWN0aW9uLCBsb2NhdGlvbkNoYW5nZSwg
aGlzdG9yeU5hdmlnYXRpb24sIGZvcm1TdWJtaXNzaW9uIH07CiAKICAgICBjb25zdCBUeXBlIHR5
cGU7CisgICAgY29uc3QgRm9ybVN1Ym1pc3Npb25UeXBlIGZvcm1TdWJtaXNzaW9uVHlwZTsKICAg
ICBjb25zdCBkb3VibGUgZGVsYXk7CiAgICAgY29uc3QgU3RyaW5nIHVybDsKICAgICBjb25zdCBT
dHJpbmcgcmVmZXJyZXI7CisgICAgY29uc3QgU3RyaW5nIHRhcmdldDsKKyAgICBjb25zdCBTdHJp
bmcgY29udGVudFR5cGU7CisgICAgY29uc3QgU3RyaW5nIGJvdW5kYXJ5OworICAgIGNvbnN0IFJl
ZlB0cjxFdmVudD4gZXZlbnQ7CisgICAgY29uc3QgUmVmUHRyPEhUTUxGb3JtRWxlbWVudD4gZm9y
bTsKKyAgICBjb25zdCBSZWZQdHI8Rm9ybURhdGE+IGZvcm1EYXRhOworICAgIGNvbnN0IEhhc2hN
YXA8U3RyaW5nLCBTdHJpbmc+IGZvcm1WYWx1ZXM7CiAgICAgY29uc3QgaW50IGhpc3RvcnlTdGVw
czsKICAgICBjb25zdCBib29sIGxvY2tIaXN0b3J5OwogICAgIGNvbnN0IGJvb2wgbG9ja0JhY2tG
b3J3YXJkTGlzdDsKICAgICBjb25zdCBib29sIHdhc1VzZXJHZXN0dXJlOwogICAgIGNvbnN0IGJv
b2wgd2FzUmVmcmVzaDsKKyAgICBjb25zdCBib29sIHdhc0R1cmluZ0xvYWQ7CiAKICAgICBTY2hl
ZHVsZWRSZWRpcmVjdGlvbihkb3VibGUgZGVsYXksIGNvbnN0IFN0cmluZyYgdXJsLCBib29sIGxv
Y2tIaXN0b3J5LCBib29sIGxvY2tCYWNrRm9yd2FyZExpc3QsIGJvb2wgd2FzVXNlckdlc3R1cmUs
IGJvb2wgcmVmcmVzaCkKICAgICAgICAgOiB0eXBlKHJlZGlyZWN0aW9uKQorICAgICAgICAsIGZv
cm1TdWJtaXNzaW9uVHlwZSgpCiAgICAgICAgICwgZGVsYXkoZGVsYXkpCiAgICAgICAgICwgdXJs
KHVybCkKICAgICAgICAgLCBoaXN0b3J5U3RlcHMoMCkKQEAgLTE5MiwxMiArMTc1LDE0IEBAIHN0
cnVjdCBTY2hlZHVsZWRSZWRpcmVjdGlvbiB7CiAgICAgICAgICwgbG9ja0JhY2tGb3J3YXJkTGlz
dChsb2NrQmFja0ZvcndhcmRMaXN0KQogICAgICAgICAsIHdhc1VzZXJHZXN0dXJlKHdhc1VzZXJH
ZXN0dXJlKQogICAgICAgICAsIHdhc1JlZnJlc2gocmVmcmVzaCkKKyAgICAgICAgLCB3YXNEdXJp
bmdMb2FkKGZhbHNlKQogICAgIHsKICAgICAgICAgQVNTRVJUKCF1cmwuaXNFbXB0eSgpKTsKICAg
ICB9CiAKLSAgICBTY2hlZHVsZWRSZWRpcmVjdGlvbihUeXBlIGxvY2F0aW9uQ2hhbmdlVHlwZSwg
Y29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgcmVmZXJyZXIsIGJvb2wgbG9ja0hpc3Rv
cnksIGJvb2wgbG9ja0JhY2tGb3J3YXJkTGlzdCwgYm9vbCB3YXNVc2VyR2VzdHVyZSwgYm9vbCBy
ZWZyZXNoKQotICAgICAgICA6IHR5cGUobG9jYXRpb25DaGFuZ2VUeXBlKQorICAgIFNjaGVkdWxl
ZFJlZGlyZWN0aW9uKGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHJlZmVycmVyLCBi
b29sIGxvY2tIaXN0b3J5LCBib29sIGxvY2tCYWNrRm9yd2FyZExpc3QsIGJvb2wgd2FzVXNlckdl
c3R1cmUsIGJvb2wgcmVmcmVzaCwgYm9vbCBkdXJpbmdMb2FkKQorICAgICAgICA6IHR5cGUobG9j
YXRpb25DaGFuZ2UpCisgICAgICAgICwgZm9ybVN1Ym1pc3Npb25UeXBlKCkKICAgICAgICAgLCBk
ZWxheSgwKQogICAgICAgICAsIHVybCh1cmwpCiAgICAgICAgICwgcmVmZXJyZXIocmVmZXJyZXIp
CkBAIC0yMDYsMjEgKzE5MSw0OCBAQCBzdHJ1Y3QgU2NoZWR1bGVkUmVkaXJlY3Rpb24gewogICAg
ICAgICAsIGxvY2tCYWNrRm9yd2FyZExpc3QobG9ja0JhY2tGb3J3YXJkTGlzdCkKICAgICAgICAg
LCB3YXNVc2VyR2VzdHVyZSh3YXNVc2VyR2VzdHVyZSkKICAgICAgICAgLCB3YXNSZWZyZXNoKHJl
ZnJlc2gpCisgICAgICAgICwgd2FzRHVyaW5nTG9hZChkdXJpbmdMb2FkKQogICAgIHsKLSAgICAg
ICAgQVNTRVJUKGxvY2F0aW9uQ2hhbmdlVHlwZSA9PSBsb2NhdGlvbkNoYW5nZSB8fCBsb2NhdGlv
bkNoYW5nZVR5cGUgPT0gbG9jYXRpb25DaGFuZ2VEdXJpbmdMb2FkKTsKICAgICAgICAgQVNTRVJU
KCF1cmwuaXNFbXB0eSgpKTsKICAgICB9CiAKICAgICBleHBsaWNpdCBTY2hlZHVsZWRSZWRpcmVj
dGlvbihpbnQgaGlzdG9yeU5hdmlnYXRpb25TdGVwcykKICAgICAgICAgOiB0eXBlKGhpc3RvcnlO
YXZpZ2F0aW9uKQorICAgICAgICAsIGZvcm1TdWJtaXNzaW9uVHlwZSgpCiAgICAgICAgICwgZGVs
YXkoMCkKICAgICAgICAgLCBoaXN0b3J5U3RlcHMoaGlzdG9yeU5hdmlnYXRpb25TdGVwcykKICAg
ICAgICAgLCBsb2NrSGlzdG9yeShmYWxzZSkKICAgICAgICAgLCBsb2NrQmFja0ZvcndhcmRMaXN0
KGZhbHNlKQogICAgICAgICAsIHdhc1VzZXJHZXN0dXJlKGZhbHNlKQogICAgICAgICAsIHdhc1Jl
ZnJlc2goZmFsc2UpCisgICAgICAgICwgd2FzRHVyaW5nTG9hZChmYWxzZSkKICAgICB7CiAgICAg
fQorCisgICAgU2NoZWR1bGVkUmVkaXJlY3Rpb24oUGFzc1JlZlB0cjxIVE1MRm9ybUVsZW1lbnQ+
IGZvcm0sIEZvcm1TdWJtaXNzaW9uVHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3Qg
U3RyaW5nJiByZWZlcnJlciwKKyAgICAgICAgICAgIFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50LCBQ
YXNzUmVmUHRyPEZvcm1EYXRhPiBkYXRhLCBjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYg
Zm9ybVZhbHVlcywKKyAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBjb25zdCBTdHJp
bmcmIGNvbnRlbnRUeXBlLCBjb25zdCBTdHJpbmcmIGJvdW5kYXJ5LCBib29sIGxvY2tIaXN0b3J5
LCBib29sIGxvY2tCYWNrRm9yd2FyZExpc3QsIGJvb2wgZHVyaW5nTG9hZCkKKyAgICAgICAgOiB0
eXBlKGZvcm1TdWJtaXNzaW9uKQorICAgICAgICAsIGZvcm1TdWJtaXNzaW9uVHlwZSh0eXBlKQor
ICAgICAgICAsIGRlbGF5KDApCisgICAgICAgICwgdXJsKHVybCkKKyAgICAgICAgLCByZWZlcnJl
cihyZWZlcnJlcikKKyAgICAgICAgLCB0YXJnZXQodGFyZ2V0KQorICAgICAgICAsIGNvbnRlbnRU
eXBlKGNvbnRlbnRUeXBlKQorICAgICAgICAsIGJvdW5kYXJ5KGJvdW5kYXJ5KQorICAgICAgICAs
IGV2ZW50KGV2ZW50KQorICAgICAgICAsIGZvcm0oZm9ybSkKKyAgICAgICAgLCBmb3JtRGF0YShk
YXRhKQorICAgICAgICAsIGZvcm1WYWx1ZXMoZm9ybVZhbHVlcykKKyAgICAgICAgLCBoaXN0b3J5
U3RlcHMoMCkKKyAgICAgICAgLCBsb2NrSGlzdG9yeShsb2NrSGlzdG9yeSkKKyAgICAgICAgLCBs
b2NrQmFja0ZvcndhcmRMaXN0KGxvY2tCYWNrRm9yd2FyZExpc3QpCisgICAgICAgICwgd2FzVXNl
ckdlc3R1cmUoZmFsc2UpCisgICAgICAgICwgd2FzUmVmcmVzaChmYWxzZSkKKyAgICAgICAgLCB3
YXNEdXJpbmdMb2FkKGR1cmluZ0xvYWQpCisgICAgeworICAgICAgICBBU1NFUlQoIXVybC5pc0Vt
cHR5KCkpOworICAgIH0KIH07CiAKIHN0YXRpYyBkb3VibGUgc3RvcmVkVGltZU9mTGFzdENvbXBs
ZXRlZExvYWQ7CkBAIC01MTYsMjcgKzUyOCwyMCBAQCBGcmFtZSogRnJhbWVMb2FkZXI6OmxvYWRT
dWJmcmFtZShIVE1MRnJhCiAgICAgcmV0dXJuIGZyYW1lLmdldCgpOwogfQogCi12b2lkIEZyYW1l
TG9hZGVyOjpzdWJtaXRGb3JtQWdhaW4oKQotewotICAgIGlmIChtX2lzUnVubmluZ1NjcmlwdCkK
LSAgICAgICAgcmV0dXJuOwotICAgIE93blB0cjxGb3JtU3VibWlzc2lvbj4gZm9ybShtX2RlZmVy
cmVkRm9ybVN1Ym1pc3Npb24ucmVsZWFzZSgpKTsKLSAgICBpZiAoIWZvcm0pCi0gICAgICAgIHJl
dHVybjsKLSAgICBzdWJtaXRGb3JtKGZvcm0tPmFjdGlvbiwgZm9ybS0+dXJsLCBmb3JtLT5mb3Jt
RGF0YSwgZm9ybS0+dGFyZ2V0LCBmb3JtLT5jb250ZW50VHlwZSwgZm9ybS0+Ym91bmRhcnksIGZv
cm0tPmV2ZW50LmdldCgpLCBmb3JtLT5sb2NrSGlzdG9yeSwgZm9ybS0+bG9ja0JhY2tGb3J3YXJk
TGlzdCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXI6OnN1Ym1pdEZvcm0oY29uc3QgY2hhciogYWN0
aW9uLCBjb25zdCBTdHJpbmcmIHVybCwgUGFzc1JlZlB0cjxGb3JtRGF0YT4gZm9ybURhdGEsCit2
b2lkIEZyYW1lTG9hZGVyOjpzdWJtaXRGb3JtKEhUTUxGb3JtRWxlbWVudCogZm9ybSwgRm9ybVN1
Ym1pc3Npb25UeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgdXJsLAorICAgIFBhc3NSZWZQdHI8Rm9y
bURhdGE+IGZvcm1EYXRhLCBjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYgZm9ybVZhbHVl
cywKICAgICBjb25zdCBTdHJpbmcmIHRhcmdldCwgY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSwg
Y29uc3QgU3RyaW5nJiBib3VuZGFyeSwgRXZlbnQqIGV2ZW50LCBib29sIGxvY2tIaXN0b3J5LCBi
b29sIGxvY2tCYWNrRm9yd2FyZExpc3QpCiB7CiAgICAgQVNTRVJUKGZvcm1EYXRhKTsKICAgICAK
ICAgICBpZiAoIW1fZnJhbWUtPnBhZ2UoKSkKICAgICAgICAgcmV0dXJuOworCisgICAgLy8gRklY
TUU6IEhvdyBtdWNoIG9mIHRoaXMgc2hvdWxkIG1vdmUgdG8gc2NoZWR1bGVGb3JtU3VibWlzc2lv
bj8KICAgICAKICAgICBLVVJMIHUgPSBjb21wbGV0ZVVSTCh1cmwuaXNOdWxsKCkgPyAiIiA6IHVy
bCk7CiAgICAgLy8gRklYTUU6IERvIHdlIHJlYWxseSBuZWVkIHRvIHNwZWNpYWwtY2FzZSBhbiBl
bXB0eSBVUkw/Ci0gICAgLy8gV291bGQgaXQgYmUgYmV0dGVyIHRvIGp1c3QgZ28gb24gd2l0aCB0
aGUgZm9ybSBzdWJtaXNzb24gYW5kIGxldCB0aGUgSS9PIGZhaWw/CisgICAgLy8gV291bGQgaXQg
YmUgYmV0dGVyIHRvIGp1c3QgZ28gb24gd2l0aCB0aGUgZm9ybSBzdWJtaXNzaW9uIGFuZCBsZXQg
dGhlIEkvTyBmYWlsPwogICAgIGlmICh1LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCkBA
IC01NDcsMTMgKzU1Miw2IEBAIHZvaWQgRnJhbWVMb2FkZXI6OnN1Ym1pdEZvcm0oY29uc3QgY2hh
cioKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChtX2lzUnVubmluZ1NjcmlwdCkg
ewotICAgICAgICBpZiAobV9kZWZlcnJlZEZvcm1TdWJtaXNzaW9uKQotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICBtX2RlZmVycmVkRm9ybVN1Ym1pc3Npb24uc2V0KG5ldyBGb3JtU3VibWlz
c2lvbihhY3Rpb24sIHVybCwgZm9ybURhdGEsIHRhcmdldCwgY29udGVudFR5cGUsIGJvdW5kYXJ5
LCBldmVudCwgbG9ja0hpc3RvcnksIGxvY2tCYWNrRm9yd2FyZExpc3QpKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQogICAgIGZvcm1EYXRhLT5nZW5lcmF0ZUZpbGVzKG1fZnJhbWUtPnBhZ2Uo
KS0+Y2hyb21lKCktPmNsaWVudCgpKTsKICAgICAKICAgICBGcmFtZUxvYWRSZXF1ZXN0IGZyYW1l
UmVxdWVzdDsKQEAgLTU2NSw3ICs1NjMsNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpzdWJtaXRGb3Jt
KGNvbnN0IGNoYXIqCiAKICAgICAvLyBIYW5kbGUgbWFpbHRvOiBmb3JtcwogICAgIGJvb2wgaXNN
YWlsdG9Gb3JtID0gZXF1YWxJZ25vcmluZ0Nhc2UodS5wcm90b2NvbCgpLCAibWFpbHRvIik7Ci0g
ICAgaWYgKGlzTWFpbHRvRm9ybSAmJiBzdHJjbXAoYWN0aW9uLCAiR0VUIikgIT0gMCkgeworICAg
IGlmIChpc01haWx0b0Zvcm0gJiYgdHlwZSA9PSBGb3JtUG9zdCkgewogICAgICAgICAvLyBBcHBl
bmQgYm9keT0gZm9yIFBPU1QgbWFpbHRvLCByZXBsYWNlIHRoZSB3aG9sZSBxdWVyeSBzdHJpbmcg
Zm9yIEdFVCBvbmUuCiAgICAgICAgIFN0cmluZyBib2R5ID0gZm9ybURhdGEtPmZsYXR0ZW5Ub1N0
cmluZygpOwogICAgICAgICBTdHJpbmcgcXVlcnkgPSB1LnF1ZXJ5KCk7CkBAIC01NzQsOSArNTcy
LDkgQEAgdm9pZCBGcmFtZUxvYWRlcjo6c3VibWl0Rm9ybShjb25zdCBjaGFyKgogICAgICAgICB1
LnNldFF1ZXJ5KHF1ZXJ5ICsgYm9keSk7CiAgICAgfQogCi0gICAgaWYgKHN0cmNtcChhY3Rpb24s
ICJHRVQiKSA9PSAwKSB7CisgICAgaWYgKHR5cGUgPT0gRm9ybUdldCkKICAgICAgICAgdS5zZXRR
dWVyeShmb3JtRGF0YS0+ZmxhdHRlblRvU3RyaW5nKCkpOwotICAgIH0gZWxzZSB7CisgICAgZWxz
ZSB7CiAgICAgICAgIGlmICghaXNNYWlsdG9Gb3JtKQogICAgICAgICAgICAgZnJhbWVSZXF1ZXN0
LnJlc291cmNlUmVxdWVzdCgpLnNldEhUVFBCb2R5KGZvcm1EYXRhLmdldCgpKTsKICAgICAgICAg
ZnJhbWVSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldEhUVFBNZXRob2QoIlBPU1QiKTsKQEAg
LTU5MSw3ICs1ODksNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpzdWJtaXRGb3JtKGNvbnN0IGNoYXIq
CiAgICAgZnJhbWVSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldFVSTCh1KTsKICAgICBhZGRI
VFRQT3JpZ2luSWZOZWVkZWQoZnJhbWVSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLCBvdXRnb2lu
Z09yaWdpbigpKTsKIAotICAgIHN1Ym1pdEZvcm0oZnJhbWVSZXF1ZXN0LCBldmVudCwgbG9ja0hp
c3RvcnksIGxvY2tCYWNrRm9yd2FyZExpc3QpOworICAgIHN1Ym1pdEZvcm0oZm9ybSwgZm9ybVZh
bHVlcywgZnJhbWVSZXF1ZXN0LCBldmVudCwgbG9ja0hpc3RvcnksIGxvY2tCYWNrRm9yd2FyZExp
c3QpOwogfQogCiB2b2lkIEZyYW1lTG9hZGVyOjpzdG9wTG9hZGluZyhib29sIHNlbmRVbmxvYWQp
CkBAIC03MDIsMTAgKzcwMCwxMSBAQCBLVVJMIEZyYW1lTG9hZGVyOjppY29uVVJMKCkKIAogYm9v
bCBGcmFtZUxvYWRlcjo6ZGlkT3BlblVSTChjb25zdCBLVVJMJiB1cmwpCiB7Ci0gICAgaWYgKG1f
c2NoZWR1bGVkUmVkaXJlY3Rpb24gJiYgbV9zY2hlZHVsZWRSZWRpcmVjdGlvbi0+dHlwZSA9PSBT
Y2hlZHVsZWRSZWRpcmVjdGlvbjo6bG9jYXRpb25DaGFuZ2VEdXJpbmdMb2FkKQorICAgIGlmICht
X3NjaGVkdWxlZFJlZGlyZWN0aW9uICYmIG1fc2NoZWR1bGVkUmVkaXJlY3Rpb24tPndhc0R1cmlu
Z0xvYWQpIHsKICAgICAgICAgLy8gQSByZWRpcmVjdCB3YXMgc2NoZWR1bGVkIGJlZm9yZSB0aGUg
ZG9jdW1lbnQgd2FzIGNyZWF0ZWQuCiAgICAgICAgIC8vIFRoaXMgY2FuIGhhcHBlbiB3aGVuIG9u
ZSBmcmFtZSBjaGFuZ2VzIGFub3RoZXIgZnJhbWUncyBsb2NhdGlvbi4KICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KIAogICAgIGNhbmNlbFJlZGlyZWN0aW9uKCk7CiAgICAgbV9mcmFtZS0+
ZWRpdG9yKCktPmNsZWFyTGFzdEVkaXRDb21tYW5kKCk7CkBAIC03OTMsNyArNzkyLDYgQEAgU2Ny
aXB0VmFsdWUgRnJhbWVMb2FkZXI6OmV4ZWN1dGVTY3JpcHQoYwogCiAgICAgaWYgKCF3YXNSdW5u
aW5nU2NyaXB0KSB7CiAgICAgICAgIG1faXNSdW5uaW5nU2NyaXB0ID0gZmFsc2U7Ci0gICAgICAg
IHN1Ym1pdEZvcm1BZ2FpbigpOwogICAgICAgICBEb2N1bWVudDo6dXBkYXRlRG9jdW1lbnRzUmVu
ZGVyaW5nKCk7CiAgICAgfQogCkBAIC0xMzY2LDkgKzEzNjQsNDIgQEAgdm9pZCBGcmFtZUxvYWRl
cjo6c2NoZWR1bGVMb2NhdGlvbkNoYW5nZQogICAgICAgICBzdG9wTG9hZGluZyh0cnVlKTsgICAK
ICAgICB9CiAKLSAgICBTY2hlZHVsZWRSZWRpcmVjdGlvbjo6VHlwZSB0eXBlID0gZHVyaW5nTG9h
ZAotICAgICAgICA/IFNjaGVkdWxlZFJlZGlyZWN0aW9uOjpsb2NhdGlvbkNoYW5nZUR1cmluZ0xv
YWQgOiBTY2hlZHVsZWRSZWRpcmVjdGlvbjo6bG9jYXRpb25DaGFuZ2U7Ci0gICAgc2NoZWR1bGVS
ZWRpcmVjdGlvbihuZXcgU2NoZWR1bGVkUmVkaXJlY3Rpb24odHlwZSwgdXJsLCByZWZlcnJlciwg
bG9ja0hpc3RvcnksIGxvY2tCYWNrRm9yd2FyZExpc3QsIHdhc1VzZXJHZXN0dXJlLCBmYWxzZSkp
OworICAgIHNjaGVkdWxlUmVkaXJlY3Rpb24obmV3IFNjaGVkdWxlZFJlZGlyZWN0aW9uKHVybCwg
cmVmZXJyZXIsIGxvY2tIaXN0b3J5LCBsb2NrQmFja0ZvcndhcmRMaXN0LCB3YXNVc2VyR2VzdHVy
ZSwgZmFsc2UsIGR1cmluZ0xvYWQpKTsKK30KKworLy8gRklYTUU6IFNob3VsZCBiZSBQYXNzUmVm
UHRyPEV2ZW50Pi4KKy8vIEZJWE1FOiBUaGVyZSBhcmUgc28gbWFueSBhcmd1bWVudHMgaGVyZSBp
dCB3b3VsZCBiZSBiZXR0ZXIgdG8gdXNlIGEgY2xhc3MgdG8gaG9sZCB0aGVtIGFsbC4KKy8vIEZJ
WE1FOiBIb3cgbWFueSBvZiB0aGVzZSBhcmd1bWVudHMgY2FuIGluc3RlYWQgYmUgZmV0Y2hlZCBm
cm9tIHRoZSBmb3JtIGVsZW1lbnQgaGVyZT8gV291bGQgdGhhdCBiZSBiZXR0ZXIgdGhhbiBkb2lu
ZyBpdCBhdCB0aGUgY2FsbCBzaXRlPwordm9pZCBGcmFtZUxvYWRlcjo6c2NoZWR1bGVGb3JtU3Vi
bWlzc2lvbihQYXNzUmVmUHRyPEhUTUxGb3JtRWxlbWVudD4gZm9ybSwgRm9ybVN1Ym1pc3Npb25U
eXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgdXJsLAorICAgIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGRh
dGEsIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBmb3JtVmFsdWVzLAorICAgIGNvbnN0
IFN0cmluZyYgdGFyZ2V0LCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlLCBjb25zdCBTdHJpbmcm
IGJvdW5kYXJ5LCBFdmVudCogZXZlbnQsIGJvb2wgbG9ja0hpc3RvcnksIGJvb2wgbG9ja0JhY2tG
b3J3YXJkTGlzdCkKK3sKKyAgICBpZiAoIW1fZnJhbWUtPnBhZ2UoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKHVybC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEZJ
WE1FOiBEbyB3ZSBuZWVkIHNwZWNpYWwgaGFuZGxpbmcgZm9yIGZvcm0gc3VibWlzc2lvbnMgd2hl
cmUgdGhlIFVSTCBpcyB0aGUgc2FtZQorICAgIC8vIGFzIHRoZSBjdXJyZW50IG9uZSBleGNlcHQg
Zm9yIHRoZSBmcmFnbWVudCBwYXJ0PyBTZWUgc2NoZWR1bGVMb2NhdGlvbkNoYW5nZSBhYm92ZS4K
KworICAgIC8vIEZJWE1FOiBJdCdzIGJhZCB0byBoYXZlIHRoZSBmb2xsb3dpbmcgY29kZSBjb3Bp
ZWQgYW5kIHBhc3RlZCBmcm9tIHNjaGVkdWxlTG9jYXRpb25DaGFuZ2UgYWJvdmUuCisgICAgLy8g
RG8gd2UgbmVlZCBpdD8gQ2FuIHdlIHNoYXJlIGl0PworCisgICAgLy8gSGFuZGxlIGEgbG9jYXRp
b24gY2hhbmdlIG9mIGEgcGFnZSB3aXRoIG5vIGRvY3VtZW50IGFzIGEgc3BlY2lhbCBjYXNlLgor
ICAgIC8vIFRoaXMgbWF5IGhhcHBlbiB3aGVuIGEgZnJhbWUgY2hhbmdlcyB0aGUgbG9jYXRpb24g
b2YgYW5vdGhlciBmcmFtZS4KKyAgICBib29sIGR1cmluZ0xvYWQgPSAhbV9jb21taXR0ZWRGaXJz
dFJlYWxEb2N1bWVudExvYWQ7CisKKyAgICAvLyBJZiBhIHJlZGlyZWN0IHdhcyBzY2hlZHVsZWQg
ZHVyaW5nIGEgbG9hZCwgdGhlbiBzdG9wIHRoZSBjdXJyZW50IGxvYWQuCisgICAgLy8gT3RoZXJ3
aXNlIHdoZW4gdGhlIGN1cnJlbnQgbG9hZCB0cmFuc2l0aW9ucyBmcm9tIGEgcHJvdmlzaW9uYWwg
dG8gYSAKKyAgICAvLyBjb21taXR0ZWQgc3RhdGUsIHBlbmRpbmcgcmVkaXJlY3RzIG1heSBiZSBj
YW5jZWxsZWQuIAorICAgIGlmIChkdXJpbmdMb2FkKSB7CisgICAgICAgIGlmIChtX3Byb3Zpc2lv
bmFsRG9jdW1lbnRMb2FkZXIpCisgICAgICAgICAgICBtX3Byb3Zpc2lvbmFsRG9jdW1lbnRMb2Fk
ZXItPnN0b3BMb2FkaW5nKCk7CisgICAgICAgIHN0b3BMb2FkaW5nKHRydWUpOyAgIAorICAgIH0K
KworICAgIHNjaGVkdWxlUmVkaXJlY3Rpb24obmV3IFNjaGVkdWxlZFJlZGlyZWN0aW9uKGZvcm0s
IHR5cGUsIHVybCwgcmVmZXJyZXIoKSwgZXZlbnQsIGRhdGEsIGZvcm1WYWx1ZXMsIHRhcmdldCwg
Y29udGVudFR5cGUsIGJvdW5kYXJ5LCBsb2NrSGlzdG9yeSwgbG9ja0JhY2tGb3J3YXJkTGlzdCwg
ZHVyaW5nTG9hZCkpOwogfQogCiB2b2lkIEZyYW1lTG9hZGVyOjpzY2hlZHVsZVJlZnJlc2goYm9v
bCB3YXNVc2VyR2VzdHVyZSkKQEAgLTEzNzksOCArMTQxMCw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6
OnNjaGVkdWxlUmVmcmVzaChib29sIHcKICAgICBpZiAobV9VUkwuaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBTY2hlZHVsZWRSZWRpcmVjdGlvbjo6VHlwZSB0eXBlID0gU2NoZWR1
bGVkUmVkaXJlY3Rpb246OmxvY2F0aW9uQ2hhbmdlOwotICAgIHNjaGVkdWxlUmVkaXJlY3Rpb24o
bmV3IFNjaGVkdWxlZFJlZGlyZWN0aW9uKHR5cGUsIG1fVVJMLnN0cmluZygpLCBtX291dGdvaW5n
UmVmZXJyZXIsIHRydWUsIHRydWUsIHdhc1VzZXJHZXN0dXJlLCB0cnVlKSk7CisgICAgc2NoZWR1
bGVSZWRpcmVjdGlvbihuZXcgU2NoZWR1bGVkUmVkaXJlY3Rpb24obV9VUkwuc3RyaW5nKCksIG1f
b3V0Z29pbmdSZWZlcnJlciwgdHJ1ZSwgdHJ1ZSwgd2FzVXNlckdlc3R1cmUsIHRydWUsIGZhbHNl
KSk7CiB9CiAKIGJvb2wgRnJhbWVMb2FkZXI6OmlzTG9jYXRpb25DaGFuZ2UoY29uc3QgU2NoZWR1
bGVkUmVkaXJlY3Rpb24mIHJlZGlyZWN0aW9uKQpAQCAtMTM5MCw3ICsxNDIwLDcgQEAgYm9vbCBG
cmFtZUxvYWRlcjo6aXNMb2NhdGlvbkNoYW5nZShjb25zdAogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICBjYXNlIFNjaGVkdWxlZFJlZGlyZWN0aW9uOjpoaXN0b3J5TmF2aWdhdGlv
bjoKICAgICAgICAgY2FzZSBTY2hlZHVsZWRSZWRpcmVjdGlvbjo6bG9jYXRpb25DaGFuZ2U6Ci0g
ICAgICAgIGNhc2UgU2NoZWR1bGVkUmVkaXJlY3Rpb246OmxvY2F0aW9uQ2hhbmdlRHVyaW5nTG9h
ZDoKKyAgICAgICAgY2FzZSBTY2hlZHVsZWRSZWRpcmVjdGlvbjo6Zm9ybVN1Ym1pc3Npb246CiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CkBAIC0xNDYyLDcgKzE0OTIsNiBAQCB2b2lkIEZyYW1lTG9hZGVyOjpyZWRpcmVjdGlvblRpbWVy
RmlyZWQoCiAgICAgc3dpdGNoIChyZWRpcmVjdGlvbi0+dHlwZSkgewogICAgICAgICBjYXNlIFNj
aGVkdWxlZFJlZGlyZWN0aW9uOjpyZWRpcmVjdGlvbjoKICAgICAgICAgY2FzZSBTY2hlZHVsZWRS
ZWRpcmVjdGlvbjo6bG9jYXRpb25DaGFuZ2U6Ci0gICAgICAgIGNhc2UgU2NoZWR1bGVkUmVkaXJl
Y3Rpb246OmxvY2F0aW9uQ2hhbmdlRHVyaW5nTG9hZDoKICAgICAgICAgICAgIGNoYW5nZUxvY2F0
aW9uKHJlZGlyZWN0aW9uLT51cmwsIHJlZGlyZWN0aW9uLT5yZWZlcnJlciwKICAgICAgICAgICAg
ICAgICByZWRpcmVjdGlvbi0+bG9ja0hpc3RvcnksIHJlZGlyZWN0aW9uLT5sb2NrQmFja0Zvcndh
cmRMaXN0LCByZWRpcmVjdGlvbi0+d2FzVXNlckdlc3R1cmUsIHJlZGlyZWN0aW9uLT53YXNSZWZy
ZXNoKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE0NzYsNiArMTUwNSwxMiBAQCB2b2lkIEZy
YW1lTG9hZGVyOjpyZWRpcmVjdGlvblRpbWVyRmlyZWQoCiAgICAgICAgICAgICAvLyBpbiBib3Ro
IElFIGFuZCBOUyAoYnV0IG5vdCBpbiBNb3ppbGxhKS4gV2UgY2FuJ3QgZWFzaWx5IGRvIHRoYXQu
CiAgICAgICAgICAgICBnb0JhY2tPckZvcndhcmQocmVkaXJlY3Rpb24tPmhpc3RvcnlTdGVwcyk7
CiAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgU2NoZWR1bGVkUmVkaXJlY3Rpb246
OmZvcm1TdWJtaXNzaW9uOgorICAgICAgICAgICAgLy8gRklYTUU6IFJlZmVycmVyIGlzIG5vdCBz
ZW50IGhlcmUuCisgICAgICAgICAgICBzdWJtaXRGb3JtKHJlZGlyZWN0aW9uLT5mb3JtLmdldCgp
LCByZWRpcmVjdGlvbi0+Zm9ybVN1Ym1pc3Npb25UeXBlLCByZWRpcmVjdGlvbi0+dXJsLCByZWRp
cmVjdGlvbi0+Zm9ybURhdGEsIHJlZGlyZWN0aW9uLT5mb3JtVmFsdWVzLAorICAgICAgICAgICAg
ICAgIHJlZGlyZWN0aW9uLT50YXJnZXQsIHJlZGlyZWN0aW9uLT5jb250ZW50VHlwZSwgcmVkaXJl
Y3Rpb24tPmJvdW5kYXJ5LAorICAgICAgICAgICAgICAgIHJlZGlyZWN0aW9uLT5ldmVudC5nZXQo
KSwgcmVkaXJlY3Rpb24tPmxvY2tIaXN0b3J5LCByZWRpcmVjdGlvbi0+bG9ja0JhY2tGb3J3YXJk
TGlzdCk7CisgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CkBAIC0xNzA2LDIyICsxNzQxLDYgQEAgYm9vbCBGcmFtZUxvYWRlcjo6bG9hZFBsdWdp
bihSZW5kZXJQYXJ0KgogICAgIHJldHVybiB3aWRnZXQgIT0gMDsKIH0KIAotdm9pZCBGcmFtZUxv
YWRlcjo6Y2xlYXJSZWNvcmRlZEZvcm1WYWx1ZXMoKQotewotICAgIG1fZm9ybUFib3V0VG9CZVN1
Ym1pdHRlZCA9IDA7Ci0gICAgbV9mb3JtVmFsdWVzQWJvdXRUb0JlU3VibWl0dGVkLmNsZWFyKCk7
Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXI6OnNldEZvcm1BYm91dFRvQmVTdWJtaXR0ZWQoUGFzc1Jl
ZlB0cjxIVE1MRm9ybUVsZW1lbnQ+IGVsZW1lbnQpCi17Ci0gICAgbV9mb3JtQWJvdXRUb0JlU3Vi
bWl0dGVkID0gZWxlbWVudDsKLX0KLQotdm9pZCBGcmFtZUxvYWRlcjo6cmVjb3JkRm9ybVZhbHVl
KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBtX2Zvcm1W
YWx1ZXNBYm91dFRvQmVTdWJtaXR0ZWQuc2V0KG5hbWUsIHZhbHVlKTsKLX0KLQogdm9pZCBGcmFt
ZUxvYWRlcjo6cGFyZW50Q29tcGxldGVkKCkKIHsKICAgICBpZiAobV9zY2hlZHVsZWRSZWRpcmVj
dGlvbiAmJiAhbV9yZWRpcmVjdGlvblRpbWVyLmlzQWN0aXZlKCkpCkBAIC0yMDc5LDkgKzIwOTgs
OSBAQCB2b2lkIEZyYW1lTG9hZGVyOjpzdGFydFJlZGlyZWN0aW9uVGltZXIoCiAgICAgbV9yZWRp
cmVjdGlvblRpbWVyLnN0YXJ0T25lU2hvdChtX3NjaGVkdWxlZFJlZGlyZWN0aW9uLT5kZWxheSk7
CiAKICAgICBzd2l0Y2ggKG1fc2NoZWR1bGVkUmVkaXJlY3Rpb24tPnR5cGUpIHsKLSAgICAgICAg
Y2FzZSBTY2hlZHVsZWRSZWRpcmVjdGlvbjo6cmVkaXJlY3Rpb246CisgICAgICAgIGNhc2UgU2No
ZWR1bGVkUmVkaXJlY3Rpb246OmZvcm1TdWJtaXNzaW9uOgogICAgICAgICBjYXNlIFNjaGVkdWxl
ZFJlZGlyZWN0aW9uOjpsb2NhdGlvbkNoYW5nZToKLSAgICAgICAgY2FzZSBTY2hlZHVsZWRSZWRp
cmVjdGlvbjo6bG9jYXRpb25DaGFuZ2VEdXJpbmdMb2FkOgorICAgICAgICBjYXNlIFNjaGVkdWxl
ZFJlZGlyZWN0aW9uOjpyZWRpcmVjdGlvbjoKICAgICAgICAgICAgIGNsaWVudFJlZGlyZWN0ZWQo
S1VSTChtX3NjaGVkdWxlZFJlZGlyZWN0aW9uLT51cmwpLAogICAgICAgICAgICAgICAgIG1fc2No
ZWR1bGVkUmVkaXJlY3Rpb24tPmRlbGF5LAogICAgICAgICAgICAgICAgIGN1cnJlbnRUaW1lKCkg
KyBtX3JlZGlyZWN0aW9uVGltZXIubmV4dEZpcmVJbnRlcnZhbCgpLApAQCAtMjEwNCw5ICsyMTIz
LDkgQEAgdm9pZCBGcmFtZUxvYWRlcjo6c3RvcFJlZGlyZWN0aW9uVGltZXIoKQogCiAgICAgaWYg
KG1fc2NoZWR1bGVkUmVkaXJlY3Rpb24pIHsKICAgICAgICAgc3dpdGNoIChtX3NjaGVkdWxlZFJl
ZGlyZWN0aW9uLT50eXBlKSB7Ci0gICAgICAgICAgICBjYXNlIFNjaGVkdWxlZFJlZGlyZWN0aW9u
OjpyZWRpcmVjdGlvbjoKKyAgICAgICAgICAgIGNhc2UgU2NoZWR1bGVkUmVkaXJlY3Rpb246OmZv
cm1TdWJtaXNzaW9uOgogICAgICAgICAgICAgY2FzZSBTY2hlZHVsZWRSZWRpcmVjdGlvbjo6bG9j
YXRpb25DaGFuZ2U6Ci0gICAgICAgICAgICBjYXNlIFNjaGVkdWxlZFJlZGlyZWN0aW9uOjpsb2Nh
dGlvbkNoYW5nZUR1cmluZ0xvYWQ6CisgICAgICAgICAgICBjYXNlIFNjaGVkdWxlZFJlZGlyZWN0
aW9uOjpyZWRpcmVjdGlvbjoKICAgICAgICAgICAgICAgICBjbGllbnRSZWRpcmVjdENhbmNlbGxl
ZE9yRmluaXNoZWQobV9jYW5jZWxsaW5nV2l0aExvYWRJblByb2dyZXNzKTsKICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICBjYXNlIFNjaGVkdWxlZFJlZGlyZWN0aW9uOjpoaXN0
b3J5TmF2aWdhdGlvbjoKQEAgLTIxMjQsNyArMjE0Myw2IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmNv
bXBsZXRlZCgpCiAgICAgICAgIGNoaWxkLT5sb2FkZXIoKS0+cGFyZW50Q29tcGxldGVkKCk7CiAg
ICAgaWYgKEZyYW1lKiBwYXJlbnQgPSBtX2ZyYW1lLT50cmVlKCktPnBhcmVudCgpKQogICAgICAg
ICBwYXJlbnQtPmxvYWRlcigpLT5jaGVja0NvbXBsZXRlZCgpOwotICAgIHN1Ym1pdEZvcm1BZ2Fp
bigpOwogfQogCiB2b2lkIEZyYW1lTG9hZGVyOjpzdGFydGVkKCkKQEAgLTM0NjEsNyArMzQ3OSw3
IEBAIGludCBGcmFtZUxvYWRlcjo6bnVtUGVuZGluZ09yTG9hZGluZ1JlcXUKICAgICByZXR1cm4g
Y291bnQ7CiB9CiAKLXZvaWQgRnJhbWVMb2FkZXI6OnN1Ym1pdEZvcm0oY29uc3QgRnJhbWVMb2Fk
UmVxdWVzdCYgcmVxdWVzdCwgRXZlbnQqIGV2ZW50LCBib29sIGxvY2tIaXN0b3J5LCBib29sIGxv
Y2tCYWNrRm9yd2FyZExpc3QpCit2b2lkIEZyYW1lTG9hZGVyOjpzdWJtaXRGb3JtKEhUTUxGb3Jt
RWxlbWVudCogZm9ybSwgY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIGZvcm1WYWx1ZXMs
IGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmIHJlcXVlc3QsIEV2ZW50KiBldmVudCwgYm9vbCBsb2Nr
SGlzdG9yeSwgYm9vbCBsb2NrQmFja0ZvcndhcmRMaXN0KQogewogICAgIC8vIEZJWE1FOiBXZSdk
IGxpa2UgdG8gcmVtb3ZlIHRoaXMgYWx0b2dldGhlciBhbmQgZml4IHRoZSBtdWx0aXBsZSBmb3Jt
IHN1Ym1pc3Npb24gaXNzdWUgYW5vdGhlciB3YXkuCiAgICAgLy8gV2UgZG8gbm90IHdhbnQgdG8g
c3VibWl0IG1vcmUgdGhhbiBvbmUgZm9ybSBmcm9tIHRoZSBzYW1lIHBhZ2UsCkBAIC0zNDgwLDkg
KzM0OTgsNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpzdWJtaXRGb3JtKGNvbnN0IEZyYW1lCiAgICAg
ICAgIG1fc3VibWl0dGVkRm9ybVVSTCA9IHJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkudXJsKCk7
CiAgICAgfQogCi0gICAgbG9hZEZyYW1lUmVxdWVzdFdpdGhGb3JtQW5kVmFsdWVzKHJlcXVlc3Qs
IGxvY2tIaXN0b3J5LCBsb2NrQmFja0ZvcndhcmRMaXN0LCBldmVudCwgbV9mb3JtQWJvdXRUb0Jl
U3VibWl0dGVkLmdldCgpLCBtX2Zvcm1WYWx1ZXNBYm91dFRvQmVTdWJtaXR0ZWQpOwotCi0gICAg
Y2xlYXJSZWNvcmRlZEZvcm1WYWx1ZXMoKTsKKyAgICBsb2FkRnJhbWVSZXF1ZXN0V2l0aEZvcm1B
bmRWYWx1ZXMocmVxdWVzdCwgbG9ja0hpc3RvcnksIGxvY2tCYWNrRm9yd2FyZExpc3QsIGV2ZW50
LCBmb3JtLCBmb3JtVmFsdWVzKTsKIH0KIAogU3RyaW5nIEZyYW1lTG9hZGVyOjp1c2VyQWdlbnQo
Y29uc3QgS1VSTCYgdXJsKSBjb25zdApJbmRleDogV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCShyZXZpc2lvbiA0
MTk3NSkKKysrIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ1LDcgKzQ1LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIENhY2hlZFJlc291
cmNlOwogICAgIGNsYXNzIERvY3VtZW50OwogICAgIGNsYXNzIERvY3VtZW50TG9hZGVyOwotICAg
IGNsYXNzIEVsZW1lbnQ7CiAgICAgY2xhc3MgRXZlbnQ7CiAgICAgY2xhc3MgRm9ybURhdGE7CiAg
ICAgY2xhc3MgRnJhbWU7CkBAIC02OSwxMSArNjgsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgIGNsYXNzIFRleHRSZXNvdXJjZURlY29kZXI7CiAgICAgY2xhc3MgV2lkZ2V0OwogCi0gICAg
c3RydWN0IEZvcm1TdWJtaXNzaW9uOwogICAgIHN0cnVjdCBGcmFtZUxvYWRSZXF1ZXN0OwogICAg
IHN0cnVjdCBTY2hlZHVsZWRSZWRpcmVjdGlvbjsKICAgICBzdHJ1Y3QgV2luZG93RmVhdHVyZXM7
CiAKKyAgICBlbnVtIEZvcm1TdWJtaXNzaW9uVHlwZSB7IEZvcm1HZXQsIEZvcm1Qb3N0IH07CisK
ICAgICBib29sIGlzQmFja0ZvcndhcmRMb2FkVHlwZShGcmFtZUxvYWRUeXBlKTsKIAogICAgIHR5
cGVkZWYgdm9pZCAoKk5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbkZ1bmN0aW9uKSh2b2lkKiBhcmd1
bWVudCwKQEAgLTEzOSwxNCArMTM5LDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
ICAgIGJvb2wgbG9ja0hpc3RvcnksIEZyYW1lTG9hZFR5cGUsIEV2ZW50KiwgUGFzc1JlZlB0cjxG
b3JtU3RhdGU+KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAKICAgICAgICAgdm9pZCBsb2FkVVJMSW50b0NoaWxkRnJhbWUoY29uc3QgS1VS
TCYsIGNvbnN0IFN0cmluZyYgcmVmZXJlciwgRnJhbWUqKTsKIAotICAgICAgICB2b2lkIGxvYWRG
cmFtZVJlcXVlc3RXaXRoRm9ybUFuZFZhbHVlcyhjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiwgYm9v
bCBsb2NrSGlzdG9yeSwgYm9vbCBsb2NrQmFja0ZvcndhcmRMaXN0LCAgICAgICAgICAgLy8gQ2Fs
bGVkIGJ5IHN1Ym1pdEZvcm0sIGNhbGxzIGxvYWRQb3N0UmVxdWVzdCgpCisgICAgICAgIHZvaWQg
bG9hZEZyYW1lUmVxdWVzdFdpdGhGb3JtQW5kVmFsdWVzKGNvbnN0IEZyYW1lTG9hZFJlcXVlc3Qm
LCBib29sIGxvY2tIaXN0b3J5LCBib29sIGxvY2tCYWNrRm9yd2FyZExpc3QsICAgLy8gQ2FsbGVk
IGJ5IHN1Ym1pdEZvcm0sIGNhbGxzIGxvYWRQb3N0UmVxdWVzdCgpCiAgICAgICAgICAgICBFdmVu
dCosIEhUTUxGb3JtRWxlbWVudCosIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBmb3Jt
VmFsdWVzKTsKIAogICAgICAgICB2b2lkIGxvYWQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgYm9v
bCBsb2NrSGlzdG9yeSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIENhbGxlZCBieSBXZWJGcmFtZSwgY2FsbHMgKFJlc291cmNlUmVx
dWVzdCwgU3Vic3RpdHV0ZURhdGEpCiAgICAgICAgIHZvaWQgbG9hZChjb25zdCBSZXNvdXJjZVJl
cXVlc3QmLCBjb25zdCBTdWJzdGl0dXRlRGF0YSYsIGJvb2wgbG9ja0hpc3RvcnkpOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FsbGVkIGJvdGggYnkgV2ViRnJhbWUgYW5k
IGludGVybmFsbHksIGNhbGxzIChEb2N1bWVudExvYWRlciopCiAgICAgICAgIHZvaWQgbG9hZChj
b25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBTdHJpbmcmIGZyYW1lTmFtZSwgYm9vbCBsb2Nr
SGlzdG9yeSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FsbGVkIGJ5IFdl
YlBsdWdpbkNvbnRyb2xsZXIKICAgICAgICAgCi0gICAgICAgIHZvaWQgbG9hZEFyY2hpdmUoUGFz
c1JlZlB0cjxBcmNoaXZlPiBhcmNoaXZlKTsKKyAgICAgICAgdm9pZCBsb2FkQXJjaGl2ZShQYXNz
UmVmUHRyPEFyY2hpdmU+KTsKIAogICAgICAgICAvLyBSZXR1cm5zIHRydWUgZm9yIGFueSBub24t
bG9jYWwgVVJMLiBJZiBEb2N1bWVudCBwYXJhbWV0ZXIgaXMgc3VwcGxpZWQsIGl0cyBsb2NhbCBs
b2FkIHBvbGljeSBkaWN0YXRlcywKICAgICAgICAgLy8gb3RoZXJ3aXNlIGlmIHJlZmVycmVyIGlz
IG5vbi1lbXB0eSBhbmQgcmVwcmVzZW50cyBhIGxvY2FsIGZpbGUsIHRoZW4gdGhlIGxvY2FsIGxv
YWQgaXMgYWxsb3dlZC4KQEAgLTI4MywxMCArMjgzLDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgYm9vbCByZXF1ZXN0RnJhbWUoSFRNTEZyYW1lT3duZXJFbGVtZW50KiwgY29uc3Qg
U3RyaW5nJiB1cmwsIGNvbnN0IEF0b21pY1N0cmluZyYgZnJhbWVOYW1lKTsKICAgICAgICAgRnJh
bWUqIGxvYWRTdWJmcmFtZShIVE1MRnJhbWVPd25lckVsZW1lbnQqLCBjb25zdCBLVVJMJiwgY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHJlZmVycmVyKTsKIAotICAgICAgICB2b2lk
IHN1Ym1pdEZvcm0oY29uc3QgY2hhciogYWN0aW9uLCBjb25zdCBTdHJpbmcmIHVybCwgUGFzc1Jl
ZlB0cjxGb3JtRGF0YT4sIGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBjb25zdCBTdHJpbmcmIGNvbnRl
bnRUeXBlLCBjb25zdCBTdHJpbmcmIGJvdW5kYXJ5LCBFdmVudCosIGJvb2wgbG9ja0hpc3Rvcnks
IGJvb2wgbG9ja0JhY2tGb3J3YXJkTGlzdCk7Ci0gICAgICAgIHZvaWQgc3VibWl0Rm9ybUFnYWlu
KCk7Ci0gICAgICAgIHZvaWQgc3VibWl0Rm9ybShjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiwgRXZl
bnQqLCBib29sIGxvY2tIaXN0b3J5LCBib29sIGxvY2tCYWNrRm9yd2FyZExpc3QpOworICAgIHBy
aXZhdGU6CisgICAgICAgIHZvaWQgc3VibWl0Rm9ybShIVE1MRm9ybUVsZW1lbnQqLCBGb3JtU3Vi
bWlzc2lvblR5cGUsIGNvbnN0IFN0cmluZyYgdXJsLCBQYXNzUmVmUHRyPEZvcm1EYXRhPiwgY29u
c3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIGZvcm1WYWx1ZXMsIGNvbnN0IFN0cmluZyYgdGFy
Z2V0LCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlLCBjb25zdCBTdHJpbmcmIGJvdW5kYXJ5LCBF
dmVudCosIGJvb2wgbG9ja0hpc3RvcnksIGJvb2wgbG9ja0JhY2tGb3J3YXJkTGlzdCk7CisgICAg
ICAgIHZvaWQgc3VibWl0Rm9ybShIVE1MRm9ybUVsZW1lbnQqLCBjb25zdCBIYXNoTWFwPFN0cmlu
ZywgU3RyaW5nPiYgZm9ybVZhbHVlcywgY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYsIEV2ZW50Kiwg
Ym9vbCBsb2NrSGlzdG9yeSwgYm9vbCBsb2NrQmFja0ZvcndhcmRMaXN0KTsKIAorICAgIHB1Ymxp
YzoKICAgICAgICAgdm9pZCBzdG9wKCk7CiAgICAgICAgIHZvaWQgc3RvcExvYWRpbmcoYm9vbCBz
ZW5kVW5sb2FkKTsKICAgICAgICAgYm9vbCBjbG9zZVVSTCgpOwpAQCAtMzA1LDYgKzMwNiw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBzY2hlZHVsZUxvY2F0aW9uQ2hhbmdl
KGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHJlZmVycmVyLCBib29sIGxvY2tIaXN0
b3J5ID0gdHJ1ZSwgYm9vbCBsb2NrQmFja0ZvcndhcmRMaXN0ID0gdHJ1ZSwgYm9vbCB1c2VyR2Vz
dHVyZSA9IGZhbHNlKTsKICAgICAgICAgdm9pZCBzY2hlZHVsZVJlZnJlc2goYm9vbCB1c2VyR2Vz
dHVyZSA9IGZhbHNlKTsKICAgICAgICAgdm9pZCBzY2hlZHVsZUhpc3RvcnlOYXZpZ2F0aW9uKGlu
dCBzdGVwcyk7CisgICAgICAgIHZvaWQgc2NoZWR1bGVGb3JtU3VibWlzc2lvbihQYXNzUmVmUHRy
PEhUTUxGb3JtRWxlbWVudD4sIEZvcm1TdWJtaXNzaW9uVHlwZSwgY29uc3QgU3RyaW5nJiB1cmws
IFBhc3NSZWZQdHI8Rm9ybURhdGE+LCBjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYgZm9y
bVZhbHVlcywgY29uc3QgU3RyaW5nJiB0YXJnZXQsIGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUs
IGNvbnN0IFN0cmluZyYgYm91bmRhcnksIEV2ZW50KiwgYm9vbCBsb2NrSGlzdG9yeSwgYm9vbCBs
b2NrQmFja0ZvcndhcmRMaXN0KTsKIAogICAgICAgICBib29sIGNhbkdvQmFja09yRm9yd2FyZChp
bnQgZGlzdGFuY2UpIGNvbnN0OwogICAgICAgICB2b2lkIGdvQmFja09yRm9yd2FyZChpbnQgZGlz
dGFuY2UpOwpAQCAtMzE0LDcgKzMxNiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
dm9pZCBiZWdpbigpOwogICAgICAgICB2b2lkIGJlZ2luKGNvbnN0IEtVUkwmLCBib29sIGRpc3Bh
dGNoV2luZG93T2JqZWN0QXZhaWxhYmxlID0gdHJ1ZSwgU2VjdXJpdHlPcmlnaW4qIGZvcmNlZFNl
Y3VyaXR5T3JpZ2luID0gMCk7CiAKLSAgICAgICAgdm9pZCB3cml0ZShjb25zdCBjaGFyKiBzdHIs
IGludCBsZW4gPSAtMSwgYm9vbCBmbHVzaCA9IGZhbHNlKTsKKyAgICAgICAgdm9pZCB3cml0ZShj
b25zdCBjaGFyKiBzdHJpbmcsIGludCBsZW5ndGggPSAtMSwgYm9vbCBmbHVzaCA9IGZhbHNlKTsK
ICAgICAgICAgdm9pZCB3cml0ZShjb25zdCBTdHJpbmcmKTsKICAgICAgICAgdm9pZCBlbmQoKTsK
ICAgICAgICAgdm9pZCBlbmRJZk5vdExvYWRpbmdNYWluUmVzb3VyY2UoKTsKQEAgLTM3OSwxMCAr
MzgxLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHNjaGVkdWxlQ2hlY2tD
b21wbGV0ZWQoKTsKICAgICAgICAgdm9pZCBzY2hlZHVsZUNoZWNrTG9hZENvbXBsZXRlKCk7CiAK
LSAgICAgICAgdm9pZCBjbGVhclJlY29yZGVkRm9ybVZhbHVlcygpOwotICAgICAgICB2b2lkIHNl
dEZvcm1BYm91dFRvQmVTdWJtaXR0ZWQoUGFzc1JlZlB0cjxIVE1MRm9ybUVsZW1lbnQ+IGVsZW1l
bnQpOwotICAgICAgICB2b2lkIHJlY29yZEZvcm1WYWx1ZShjb25zdCBTdHJpbmcmIG5hbWUsIGNv
bnN0IFN0cmluZyYgdmFsdWUpOwotCiAgICAgICAgIGJvb2wgaXNDb21wbGV0ZSgpIGNvbnN0Owog
CiAgICAgICAgIGJvb2wgcmVxdWVzdE9iamVjdChSZW5kZXJQYXJ0KiBmcmFtZSwgY29uc3QgU3Ry
aW5nJiB1cmwsIGNvbnN0IEF0b21pY1N0cmluZyYgZnJhbWVOYW1lLApAQCAtNTkwLDggKzU4OCw2
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBTdHJpbmcgbV9vdXRnb2luZ1JlZmVy
cmVyOwogCi0gICAgICAgIE93blB0cjxGb3JtU3VibWlzc2lvbj4gbV9kZWZlcnJlZEZvcm1TdWJt
aXNzaW9uOwotCiAgICAgICAgIGJvb2wgbV9pc0V4ZWN1dGluZ0phdmFTY3JpcHRGb3JtQWN0aW9u
OwogICAgICAgICBib29sIG1faXNSdW5uaW5nU2NyaXB0OwogCkBAIC02MjEsOCArNjE3LDYgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIGJvb2wgbV9jb250YWluc1BsdWdJbnM7CiAK
LSAgICAgICAgUmVmUHRyPEhUTUxGb3JtRWxlbWVudD4gbV9mb3JtQWJvdXRUb0JlU3VibWl0dGVk
OwotICAgICAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBtX2Zvcm1WYWx1ZXNBYm91dFRvQmVT
dWJtaXR0ZWQ7CiAgICAgICAgIEtVUkwgbV9zdWJtaXR0ZWRGb3JtVVJMOwogICAgIAogICAgICAg
ICBUaW1lcjxGcmFtZUxvYWRlcj4gbV9yZWRpcmVjdGlvblRpbWVyOwpJbmRleDogV2ViQ29yZS9w
YWdlL0ZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCShyZXZp
c2lvbiA0MTk3NSkKKysrIFdlYkNvcmUvcGFnZS9GcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE3Myw3ICsxNzMsNiBAQCBGcmFtZTo6RnJhbWUoUGFnZSogcGFnZSwgSFRNTEZyYW1lT3duZXJF
CiBGcmFtZTo6fkZyYW1lKCkKIHsKICAgICBzZXRWaWV3KDApOwotICAgIGxvYWRlcigpLT5jbGVh
clJlY29yZGVkRm9ybVZhbHVlcygpOwogICAgIGxvYWRlcigpLT5jYW5jZWxBbmRDbGVhcigpOwog
ICAgIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbm90IGJlIGRvaW5nIGFsbCB0aGlzIHdvcmsg
aW5zaWRlIHRoZSBkZXN0cnVjdG9yCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28971</attachid>
            <date>2009-03-26 09:46:38 -0700</date>
            <delta_ts>2009-03-27 11:31:45 -0700</delta_ts>
            <desc>more work in progress</desc>
            <filename>FormWorkInProgress.txt</filename>
            <type>text/plain</type>
            <size>41745</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Rv
bS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDQxOTc1KQorKysgV2ViQ29yZS9kb20vRG9jdW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzIwLDEwICsxMzIwLDExIEBAIHZvaWQgRG9jdW1lbnQ6
OmRldGFjaCgpCiAgICAgICAgIHJlbmRlci0+ZGVzdHJveSgpOwogICAgIAogICAgIC8vIFRoaXMg
aXMgcmVxdWlyZWQsIGFzIG91ciBGcmFtZSBtaWdodCBkZWxldGUgaXRzZWxmIGFzIHNvb24gYXMg
aXQgZGV0YWNoZXMKLSAgICAvLyB1cy4gIEhvd2V2ZXIsIHRoaXMgdmlvbGF0ZXMgTm9kZTo6ZGV0
YWNoKCkgc3ltYW50aWNzLCBhcyBpdCdzIG5ldmVyCi0gICAgLy8gcG9zc2libGUgdG8gcmUtYXR0
YWNoLiAgRXZlbnR1YWxseSBEb2N1bWVudDo6ZGV0YWNoKCkgc2hvdWxkIGJlIHJlbmFtZWQKLSAg
ICAvLyBvciB0aGlzIGNhbGwgbWFkZSBleHBsaWNpdCBpbiBlYWNoIG9mIHRoZSBjYWxsZXJzIG9m
IERvY3VtZW50OjpkZXRhY2goKS4KLSAgICBjbGVhckZyYW1lUG9pbnRlcigpOworICAgIC8vIHVz
LiBIb3dldmVyLCB0aGlzIHZpb2xhdGVzIE5vZGU6OmRldGFjaCgpIHN5bWFudGljcywgYXMgaXQn
cyBuZXZlcgorICAgIC8vIHBvc3NpYmxlIHRvIHJlLWF0dGFjaC4gRXZlbnR1YWxseSBEb2N1bWVu
dDo6ZGV0YWNoKCkgc2hvdWxkIGJlIHJlbmFtZWQsCisgICAgLy8gb3IgdGhpcyBzZXR0aW5nIG9m
IHRoZSBmcmFtZSB0byAwIGNvdWxkIGJlIG1hZGUgZXhwbGljaXQgaW4gZWFjaCBvZiB0aGUKKyAg
ICAvLyBjYWxsZXJzIG9mIERvY3VtZW50OjpkZXRhY2goKS4KKyAgICBtX2ZyYW1lID0gMDsKICAg
ICAKICAgICBpZiAobV9yZW5kZXJBcmVuYSkgewogICAgICAgICBkZWxldGUgbV9yZW5kZXJBcmVu
YTsKQEAgLTEzMzEsMTEgKzEzMzIsNiBAQCB2b2lkIERvY3VtZW50OjpkZXRhY2goKQogICAgIH0K
IH0KIAotdm9pZCBEb2N1bWVudDo6Y2xlYXJGcmFtZVBvaW50ZXIoKQotewotICAgIG1fZnJhbWUg
PSAwOwotfQotCiB2b2lkIERvY3VtZW50OjpyZW1vdmVBbGxFdmVudExpc3RlbmVyc0Zyb21BbGxO
b2RlcygpCiB7CiAgICAgc2l6ZV90IHNpemUgPSBtX3dpbmRvd0V2ZW50TGlzdGVuZXJzLnNpemUo
KTsKSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9k
b20vRG9jdW1lbnQuaAkocmV2aXNpb24gNDE5NzUpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC00MDUsOCArNDA1LDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCBhdHRhY2goKTsKICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoKCk7CiAKLSAgICB2b2lkIGNs
ZWFyRnJhbWVQb2ludGVyKCk7Ci0KICAgICBSZW5kZXJBcmVuYSogcmVuZGVyQXJlbmEoKSB7IHJl
dHVybiBtX3JlbmRlckFyZW5hOyB9CiAKICAgICBSZW5kZXJWaWV3KiByZW5kZXJWaWV3KCkgY29u
c3Q7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAkocmV2aXNpb24gNDE5NzUpCisrKyBX
ZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMiw3ICsy
LDcgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQog
ICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQog
ICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAw
NywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgICAgICAg
ICAgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAbnlwb3AuY29tKQogICoKICAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAi
Rm9ybURhdGEuaCIKICNpbmNsdWRlICJGb3JtRGF0YUxpc3QuaCIKKyNpbmNsdWRlICJGb3JtU3Rh
dGUuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5j
bHVkZSAiSFRNTERvY3VtZW50LmgiCkBAIC00NCwxMSArNDUsMTAgQEAKICNpbmNsdWRlICJNSU1F
VHlwZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJlbmRlclRleHRD
b250cm9sLmgiCisjaW5jbHVkZSA8bGltaXRzPgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5o
PgogI2luY2x1ZGUgPHd0Zi9SYW5kb21OdW1iZXIuaD4KIAotI2luY2x1ZGUgPGxpbWl0cz4KLQog
I2lmIFBMQVRGT1JNKFdYKQogI2luY2x1ZGUgPHd4L2RlZnMuaD4KICNpbmNsdWRlIDx3eC9maWxl
bmFtZS5oPgpAQCAtNTgsNiArNTgsOCBAQAogI2luY2x1ZGUgPHNobHdhcGkuaD4KICNlbmRpZgog
Cit1c2luZyBuYW1lc3BhY2Ugc3RkOworCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5h
bWVzcGFjZSBIVE1MTmFtZXM7CkBAIC0yOTYsMTQgKzI5OCwxNCBAQCB2b2lkIEhUTUxGb3JtRWxl
bWVudDo6c3VibWl0KEV2ZW50KiBldmVuCiAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogZmly
c3RTdWNjZXNzZnVsU3VibWl0QnV0dG9uID0gMDsKICAgICBib29sIG5lZWRCdXR0b25BY3RpdmF0
aW9uID0gYWN0aXZhdGVTdWJtaXRCdXR0b247IC8vIGRvIHdlIG5lZWQgdG8gYWN0aXZhdGUgYSBz
dWJtaXQgYnV0dG9uPwogICAgIAotICAgIGZyYW1lLT5sb2FkZXIoKS0+Y2xlYXJSZWNvcmRlZEZv
cm1WYWx1ZXMoKTsKLSAgICBmcmFtZS0+bG9hZGVyKCktPnNldEZvcm1BYm91dFRvQmVTdWJtaXR0
ZWQodGhpcyk7CisgICAgVmVjdG9yPHBhaXI8U3RyaW5nLCBTdHJpbmc+ID4gZm9ybVZhbHVlczsK
KwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmb3JtRWxlbWVudHMuc2l6ZSgpOyArK2kp
IHsKICAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogY29udHJvbCA9IGZvcm1FbGVtZW50
c1tpXTsKICAgICAgICAgaWYgKGNvbnRyb2wtPmhhc0xvY2FsTmFtZShpbnB1dFRhZykpIHsKICAg
ICAgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0
RWxlbWVudCo+KGNvbnRyb2wpOwogICAgICAgICAgICAgaWYgKGlucHV0LT5pc1RleHRGaWVsZCgp
KSB7Ci0gICAgICAgICAgICAgICAgZnJhbWUtPmxvYWRlcigpLT5yZWNvcmRGb3JtVmFsdWUoaW5w
dXQtPm5hbWUoKSwgaW5wdXQtPnZhbHVlKCkpOworICAgICAgICAgICAgICAgIGZvcm1WYWx1ZXMu
YXBwZW5kKHBhaXI8U3RyaW5nLCBTdHJpbmc+KGlucHV0LT5uYW1lKCksIGlucHV0LT52YWx1ZSgp
KSk7CiAgICAgICAgICAgICAgICAgaWYgKGlucHV0LT5pc1NlYXJjaEZpZWxkKCkpCiAgICAgICAg
ICAgICAgICAgICAgIGlucHV0LT5hZGRTZWFyY2hSZXN1bHQoKTsKICAgICAgICAgICAgIH0KQEAg
LTMxNiw2ICszMTgsOCBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudDo6c3VibWl0KEV2ZW50KiBldmVu
CiAgICAgICAgIH0KICAgICB9CiAKKyAgICBSZWZQdHI8Rm9ybVN0YXRlPiBmb3JtU3RhdGUgPSBG
b3JtU3RhdGU6OmNyZWF0ZSh0aGlzLCBmb3JtVmFsdWVzLCBmcmFtZSk7CisKICAgICBpZiAobmVl
ZEJ1dHRvbkFjdGl2YXRpb24gJiYgZmlyc3RTdWNjZXNzZnVsU3VibWl0QnV0dG9uKQogICAgICAg
ICBmaXJzdFN1Y2Nlc3NmdWxTdWJtaXRCdXR0b24tPnNldEFjdGl2YXRlZFN1Ym1pdCh0cnVlKTsK
ICAgICAKQEAgLTM0MSwxNCArMzQ1LDE0IEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50OjpzdWJtaXQo
RXZlbnQqIGV2ZW4KICAgICAgICAgICAgICAgICBGb3JtRGF0YUJ1aWxkZXI6OmVuY29kZVN0cmlu
Z0FzRm9ybURhdGEoYm9keURhdGEsIGJvZHkudXRmOCgpKTsKICAgICAgICAgICAgICAgICBkYXRh
ID0gRm9ybURhdGE6OmNyZWF0ZShTdHJpbmcoYm9keURhdGEuZGF0YSgpLCBib2R5RGF0YS5zaXpl
KCkpLnJlcGxhY2UoJysnLCAiJTIwIikubGF0aW4xKCkpOwogICAgICAgICAgICAgfQotICAgICAg
ICAgICAgZnJhbWUtPmxvYWRlcigpLT5zdWJtaXRGb3JtKCJQT1NUIiwgbV91cmwsIGRhdGEsIG1f
dGFyZ2V0LCBtX2Zvcm1EYXRhQnVpbGRlci5lbmNvZGluZ1R5cGUoKSwgU3RyaW5nKCksIGV2ZW50
LCBsb2NrSGlzdG9yeSwgbG9ja0JhY2tGb3J3YXJkTGlzdCk7CisgICAgICAgICAgICBmcmFtZS0+
bG9hZGVyKCktPnNjaGVkdWxlRm9ybVN1Ym1pc3Npb24oRm9ybVBvc3QsIG1fdXJsLCBkYXRhLCBt
X3RhcmdldCwgbV9mb3JtRGF0YUJ1aWxkZXIuZW5jb2RpbmdUeXBlKCksIFN0cmluZygpLCBldmVu
dCwgZm9ybVN0YXRlLnJlbGVhc2UoKSwgbG9ja0hpc3RvcnksIGxvY2tCYWNrRm9yd2FyZExpc3Qp
OwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGJvdW5kYXJ5ID0g
bV9mb3JtRGF0YUJ1aWxkZXIuZ2VuZXJhdGVVbmlxdWVCb3VuZGFyeVN0cmluZygpOwotICAgICAg
ICAgICAgZnJhbWUtPmxvYWRlcigpLT5zdWJtaXRGb3JtKCJQT1NUIiwgbV91cmwsIGNyZWF0ZUZv
cm1EYXRhKGJvdW5kYXJ5LmRhdGEoKSksIG1fdGFyZ2V0LCBtX2Zvcm1EYXRhQnVpbGRlci5lbmNv
ZGluZ1R5cGUoKSwgYm91bmRhcnkuZGF0YSgpLCBldmVudCwgbG9ja0hpc3RvcnksIGxvY2tCYWNr
Rm9yd2FyZExpc3QpOworICAgICAgICAgICAgZnJhbWUtPmxvYWRlcigpLT5zY2hlZHVsZUZvcm1T
dWJtaXNzaW9uKEZvcm1Qb3N0LCBtX3VybCwgY3JlYXRlRm9ybURhdGEoYm91bmRhcnkuZGF0YSgp
KSwgbV90YXJnZXQsIG1fZm9ybURhdGFCdWlsZGVyLmVuY29kaW5nVHlwZSgpLCBib3VuZGFyeS5k
YXRhKCksIGV2ZW50LCBmb3JtU3RhdGUucmVsZWFzZSgpLCBsb2NrSGlzdG9yeSwgbG9ja0JhY2tG
b3J3YXJkTGlzdCk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBtX2Zvcm1EYXRh
QnVpbGRlci5zZXRJc011bHRpUGFydEZvcm0oZmFsc2UpOwotICAgICAgICBmcmFtZS0+bG9hZGVy
KCktPnN1Ym1pdEZvcm0oIkdFVCIsIG1fdXJsLCBjcmVhdGVGb3JtRGF0YShDU3RyaW5nKCkpLCBt
X3RhcmdldCwgU3RyaW5nKCksIFN0cmluZygpLCBldmVudCwgbG9ja0hpc3RvcnksIGxvY2tCYWNr
Rm9yd2FyZExpc3QpOworICAgICAgICBmcmFtZS0+bG9hZGVyKCktPnNjaGVkdWxlRm9ybVN1Ym1p
c3Npb24oRm9ybUdldCwgbV91cmwsIGNyZWF0ZUZvcm1EYXRhKENTdHJpbmcoKSksIG1fdGFyZ2V0
LCBTdHJpbmcoKSwgU3RyaW5nKCksIGV2ZW50LCBmb3JtU3RhdGUucmVsZWFzZSgpLCAgbG9ja0hp
c3RvcnksIGxvY2tCYWNrRm9yd2FyZExpc3QpOwogICAgIH0KIAogICAgIGlmIChuZWVkQnV0dG9u
QWN0aXZhdGlvbiAmJiBmaXJzdFN1Y2Nlc3NmdWxTdWJtaXRCdXR0b24pCkluZGV4OiBXZWJDb3Jl
L2xvYWRlci9Gb3JtU3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0Zvcm1T
dGF0ZS5jcHAJKHJldmlzaW9uIDQxOTc1KQorKysgV2ViQ29yZS9sb2FkZXIvRm9ybVN0YXRlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDYsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNCwxNiArMzQsMTYgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1QYXNzUmVmUHRyPEZvcm1TdGF0ZT4gRm9ybVN0YXRlOjpjcmVhdGUoUGFz
c1JlZlB0cjxIVE1MRm9ybUVsZW1lbnQ+IGZvcm0sIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJp
bmc+JiB2YWx1ZXMsIFBhc3NSZWZQdHI8RnJhbWU+IHNvdXJjZUZyYW1lKQoraW5saW5lIEZvcm1T
dGF0ZTo6Rm9ybVN0YXRlKFBhc3NSZWZQdHI8SFRNTEZvcm1FbGVtZW50PiBmb3JtLCBTdHJpbmdQ
YWlyVmVjdG9yJiB0ZXh0RmllbGRWYWx1ZXNUb0Fkb3B0LCBQYXNzUmVmUHRyPEZyYW1lPiBzb3Vy
Y2VGcmFtZSkKKyAgICA6IG1fZm9ybShmb3JtKQorICAgICwgbV9zb3VyY2VGcmFtZShzb3VyY2VG
cmFtZSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZvcm1TdGF0ZShmb3JtLCB2YWx1ZXMs
IHNvdXJjZUZyYW1lKSk7CisgICAgbV90ZXh0RmllbGRWYWx1ZXMuc3dhcCh0ZXh0RmllbGRWYWx1
ZXNUb0Fkb3B0KTsKIH0KIAotRm9ybVN0YXRlOjpGb3JtU3RhdGUoUGFzc1JlZlB0cjxIVE1MRm9y
bUVsZW1lbnQ+IGZvcm0sIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiB2YWx1ZXMsIFBh
c3NSZWZQdHI8RnJhbWU+IHNvdXJjZUZyYW1lKQotICAgIDogbV9mb3JtKGZvcm0pCi0gICAgLCBt
X3ZhbHVlcyh2YWx1ZXMpCi0gICAgLCBtX3NvdXJjZUZyYW1lKHNvdXJjZUZyYW1lKQorUGFzc1Jl
ZlB0cjxGb3JtU3RhdGU+IEZvcm1TdGF0ZTo6Y3JlYXRlKFBhc3NSZWZQdHI8SFRNTEZvcm1FbGVt
ZW50PiBmb3JtLCBTdHJpbmdQYWlyVmVjdG9yJiB0ZXh0RmllbGRWYWx1ZXNUb0Fkb3B0LCBQYXNz
UmVmUHRyPEZyYW1lPiBzb3VyY2VGcmFtZSkKIHsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZv
cm1TdGF0ZShmb3JtLCB0ZXh0RmllbGRWYWx1ZXNUb0Fkb3B0LCBzb3VyY2VGcmFtZSkpOwogfQog
CiB9CkluZGV4OiBXZWJDb3JlL2xvYWRlci9Gb3JtU3RhdGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2xvYWRlci9Gb3JtU3RhdGUuaAkocmV2aXNpb24gNDE5NzUpCisrKyBXZWJDb3JlL2xvYWRl
ci9Gb3JtU3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSwyOCArMjksMjggQEAK
ICNpZm5kZWYgRm9ybVN0YXRlX2gKICNkZWZpbmUgRm9ybVN0YXRlX2gKIAotI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgotI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+CisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiAgICAgY2xhc3MgRnJhbWU7CiAgICAgY2xhc3MgSFRNTEZvcm1FbGVtZW50OwogCisg
ICAgdHlwZWRlZiBWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPiA+IFN0cmluZ1BhaXJW
ZWN0b3I7CisKICAgICBjbGFzcyBGb3JtU3RhdGUgOiBwdWJsaWMgUmVmQ291bnRlZDxGb3JtU3Rh
dGU+IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4g
Y3JlYXRlKFBhc3NSZWZQdHI8SFRNTEZvcm1FbGVtZW50PiBmb3JtLCBjb25zdCBIYXNoTWFwPFN0
cmluZywgU3RyaW5nPiYgdmFsdWVzLCBQYXNzUmVmUHRyPEZyYW1lPiBzb3VyY2VGcmFtZSk7Cisg
ICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4gY3JlYXRlKFBhc3NSZWZQdHI8SFRN
TEZvcm1FbGVtZW50PiwgU3RyaW5nUGFpclZlY3RvciYgdGV4dEZpZWxkVmFsdWVzVG9BZG9wdCwg
UGFzc1JlZlB0cjxGcmFtZT4pOwogCiAgICAgICAgIEhUTUxGb3JtRWxlbWVudCogZm9ybSgpIGNv
bnN0IHsgcmV0dXJuIG1fZm9ybS5nZXQoKTsgfQotICAgICAgICBjb25zdCBIYXNoTWFwPFN0cmlu
ZywgU3RyaW5nPiYgdmFsdWVzKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXM7IH0KKyAgICAgICAg
Y29uc3QgU3RyaW5nUGFpclZlY3RvciYgdGV4dEZpZWxkVmFsdWVzKCkgY29uc3QgeyByZXR1cm4g
bV90ZXh0RmllbGRWYWx1ZXM7IH0KICAgICAgICAgRnJhbWUqIHNvdXJjZUZyYW1lKCkgY29uc3Qg
eyByZXR1cm4gbV9zb3VyY2VGcmFtZS5nZXQoKTsgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAg
Rm9ybVN0YXRlKFBhc3NSZWZQdHI8SFRNTEZvcm1FbGVtZW50PiBmb3JtLCBjb25zdCBIYXNoTWFw
PFN0cmluZywgU3RyaW5nPiYgdmFsdWVzLCBQYXNzUmVmUHRyPEZyYW1lPiBzb3VyY2VGcmFtZSk7
CisgICAgICAgIEZvcm1TdGF0ZShQYXNzUmVmUHRyPEhUTUxGb3JtRWxlbWVudD4sIFN0cmluZ1Bh
aXJWZWN0b3ImIHRleHRGaWVsZFZhbHVlc1RvQWRvcHQsIFBhc3NSZWZQdHI8RnJhbWU+KTsKIAog
ICAgICAgICBSZWZQdHI8SFRNTEZvcm1FbGVtZW50PiBtX2Zvcm07Ci0gICAgICAgIEhhc2hNYXA8
U3RyaW5nLCBTdHJpbmc+IG1fdmFsdWVzOworICAgICAgICBTdHJpbmdQYWlyVmVjdG9yIG1fdGV4
dEZpZWxkVmFsdWVzOwogICAgICAgICBSZWZQdHI8RnJhbWU+IG1fc291cmNlRnJhbWU7CiAgICAg
fTsKIApJbmRleDogV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkocmV2aXNpb24gNDE5NzUpCisrKyBXZWJD
b3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0Myw0OCArMTQz
LDMwIEBAIHN0YXRpYyBVUkxTY2hlbWVzTWFwJiBub0FjY2Vzc1NjaGVtZXMoKQogICAgIHJldHVy
biBub0FjY2Vzc1NjaGVtZXM7CiB9CiAKLXN0cnVjdCBGb3JtU3VibWlzc2lvbiB7Ci0gICAgRm9y
bVN1Ym1pc3Npb24oY29uc3QgY2hhciogYWN0aW9uLCBjb25zdCBTdHJpbmcmIHVybCwgUGFzc1Jl
ZlB0cjxGb3JtRGF0YT4gZm9ybURhdGEsCi0gICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5n
JiB0YXJnZXQsIGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUsIGNvbnN0IFN0cmluZyYgYm91bmRh
cnksCi0gICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQsIGJvb2wgbG9j
a0hpc3RvcnksIGJvb2wgbG9ja0JhY2tGb3J3YXJkTGlzdCkKLSAgICAgICAgOiBhY3Rpb24oYWN0
aW9uKQotICAgICAgICAsIHVybCh1cmwpCi0gICAgICAgICwgZm9ybURhdGEoZm9ybURhdGEpCi0g
ICAgICAgICwgdGFyZ2V0KHRhcmdldCkKLSAgICAgICAgLCBjb250ZW50VHlwZShjb250ZW50VHlw
ZSkKLSAgICAgICAgLCBib3VuZGFyeShib3VuZGFyeSkKLSAgICAgICAgLCBldmVudChldmVudCkK
LSAgICAgICAgLCBsb2NrSGlzdG9yeShsb2NrSGlzdG9yeSkKLSAgICAgICAgLCBsb2NrQmFja0Zv
cndhcmRMaXN0KGxvY2tCYWNrRm9yd2FyZExpc3QpCi0gICAgewotICAgIH0KLQotICAgIGNvbnN0
IGNoYXIqIGFjdGlvbjsKLSAgICBTdHJpbmcgdXJsOwotICAgIFJlZlB0cjxGb3JtRGF0YT4gZm9y
bURhdGE7Ci0gICAgU3RyaW5nIHRhcmdldDsKLSAgICBTdHJpbmcgY29udGVudFR5cGU7Ci0gICAg
U3RyaW5nIGJvdW5kYXJ5OwotICAgIFJlZlB0cjxFdmVudD4gZXZlbnQ7Ci0gICAgYm9vbCBsb2Nr
SGlzdG9yeTsKLSAgICBib29sIGxvY2tCYWNrRm9yd2FyZExpc3Q7Ci19OwotCiBzdHJ1Y3QgU2No
ZWR1bGVkUmVkaXJlY3Rpb24gewotICAgIGVudW0gVHlwZSB7IHJlZGlyZWN0aW9uLCBsb2NhdGlv
bkNoYW5nZSwgaGlzdG9yeU5hdmlnYXRpb24sIGxvY2F0aW9uQ2hhbmdlRHVyaW5nTG9hZCB9Owor
ICAgIGVudW0gVHlwZSB7IHJlZGlyZWN0aW9uLCBsb2NhdGlvbkNoYW5nZSwgaGlzdG9yeU5hdmln
YXRpb24sIGZvcm1TdWJtaXNzaW9uIH07CiAKICAgICBjb25zdCBUeXBlIHR5cGU7CisgICAgY29u
c3QgRm9ybVN1Ym1pc3Npb25UeXBlIGZvcm1TdWJtaXNzaW9uVHlwZTsKICAgICBjb25zdCBkb3Vi
bGUgZGVsYXk7CiAgICAgY29uc3QgU3RyaW5nIHVybDsKICAgICBjb25zdCBTdHJpbmcgcmVmZXJy
ZXI7CisgICAgY29uc3QgU3RyaW5nIHRhcmdldDsKKyAgICBjb25zdCBTdHJpbmcgY29udGVudFR5
cGU7CisgICAgY29uc3QgU3RyaW5nIGJvdW5kYXJ5OworICAgIGNvbnN0IFJlZlB0cjxFdmVudD4g
ZXZlbnQ7CisgICAgY29uc3QgUmVmUHRyPEZvcm1EYXRhPiBmb3JtRGF0YTsKKyAgICBjb25zdCBS
ZWZQdHI8Rm9ybVN0YXRlPiBmb3JtU3RhdGU7CiAgICAgY29uc3QgaW50IGhpc3RvcnlTdGVwczsK
ICAgICBjb25zdCBib29sIGxvY2tIaXN0b3J5OwogICAgIGNvbnN0IGJvb2wgbG9ja0JhY2tGb3J3
YXJkTGlzdDsKICAgICBjb25zdCBib29sIHdhc1VzZXJHZXN0dXJlOwogICAgIGNvbnN0IGJvb2wg
d2FzUmVmcmVzaDsKKyAgICBjb25zdCBib29sIHdhc0R1cmluZ0xvYWQ7CiAKICAgICBTY2hlZHVs
ZWRSZWRpcmVjdGlvbihkb3VibGUgZGVsYXksIGNvbnN0IFN0cmluZyYgdXJsLCBib29sIGxvY2tI
aXN0b3J5LCBib29sIGxvY2tCYWNrRm9yd2FyZExpc3QsIGJvb2wgd2FzVXNlckdlc3R1cmUsIGJv
b2wgcmVmcmVzaCkKICAgICAgICAgOiB0eXBlKHJlZGlyZWN0aW9uKQorICAgICAgICAsIGZvcm1T
dWJtaXNzaW9uVHlwZSgpCiAgICAgICAgICwgZGVsYXkoZGVsYXkpCiAgICAgICAgICwgdXJsKHVy
bCkKICAgICAgICAgLCBoaXN0b3J5U3RlcHMoMCkKQEAgLTE5MiwxMiArMTc0LDE0IEBAIHN0cnVj
dCBTY2hlZHVsZWRSZWRpcmVjdGlvbiB7CiAgICAgICAgICwgbG9ja0JhY2tGb3J3YXJkTGlzdChs
b2NrQmFja0ZvcndhcmRMaXN0KQogICAgICAgICAsIHdhc1VzZXJHZXN0dXJlKHdhc1VzZXJHZXN0
dXJlKQogICAgICAgICAsIHdhc1JlZnJlc2gocmVmcmVzaCkKKyAgICAgICAgLCB3YXNEdXJpbmdM
b2FkKGZhbHNlKQogICAgIHsKICAgICAgICAgQVNTRVJUKCF1cmwuaXNFbXB0eSgpKTsKICAgICB9
CiAKLSAgICBTY2hlZHVsZWRSZWRpcmVjdGlvbihUeXBlIGxvY2F0aW9uQ2hhbmdlVHlwZSwgY29u
c3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgcmVmZXJyZXIsIGJvb2wgbG9ja0hpc3Rvcnks
IGJvb2wgbG9ja0JhY2tGb3J3YXJkTGlzdCwgYm9vbCB3YXNVc2VyR2VzdHVyZSwgYm9vbCByZWZy
ZXNoKQotICAgICAgICA6IHR5cGUobG9jYXRpb25DaGFuZ2VUeXBlKQorICAgIFNjaGVkdWxlZFJl
ZGlyZWN0aW9uKGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHJlZmVycmVyLCBib29s
IGxvY2tIaXN0b3J5LCBib29sIGxvY2tCYWNrRm9yd2FyZExpc3QsIGJvb2wgd2FzVXNlckdlc3R1
cmUsIGJvb2wgcmVmcmVzaCwgYm9vbCBkdXJpbmdMb2FkKQorICAgICAgICA6IHR5cGUobG9jYXRp
b25DaGFuZ2UpCisgICAgICAgICwgZm9ybVN1Ym1pc3Npb25UeXBlKCkKICAgICAgICAgLCBkZWxh
eSgwKQogICAgICAgICAsIHVybCh1cmwpCiAgICAgICAgICwgcmVmZXJyZXIocmVmZXJyZXIpCkBA
IC0yMDYsMjAgKzE5MCw0NyBAQCBzdHJ1Y3QgU2NoZWR1bGVkUmVkaXJlY3Rpb24gewogICAgICAg
ICAsIGxvY2tCYWNrRm9yd2FyZExpc3QobG9ja0JhY2tGb3J3YXJkTGlzdCkKICAgICAgICAgLCB3
YXNVc2VyR2VzdHVyZSh3YXNVc2VyR2VzdHVyZSkKICAgICAgICAgLCB3YXNSZWZyZXNoKHJlZnJl
c2gpCisgICAgICAgICwgd2FzRHVyaW5nTG9hZChkdXJpbmdMb2FkKQogICAgIHsKLSAgICAgICAg
QVNTRVJUKGxvY2F0aW9uQ2hhbmdlVHlwZSA9PSBsb2NhdGlvbkNoYW5nZSB8fCBsb2NhdGlvbkNo
YW5nZVR5cGUgPT0gbG9jYXRpb25DaGFuZ2VEdXJpbmdMb2FkKTsKICAgICAgICAgQVNTRVJUKCF1
cmwuaXNFbXB0eSgpKTsKICAgICB9CiAKICAgICBleHBsaWNpdCBTY2hlZHVsZWRSZWRpcmVjdGlv
bihpbnQgaGlzdG9yeU5hdmlnYXRpb25TdGVwcykKICAgICAgICAgOiB0eXBlKGhpc3RvcnlOYXZp
Z2F0aW9uKQorICAgICAgICAsIGZvcm1TdWJtaXNzaW9uVHlwZSgpCiAgICAgICAgICwgZGVsYXko
MCkKICAgICAgICAgLCBoaXN0b3J5U3RlcHMoaGlzdG9yeU5hdmlnYXRpb25TdGVwcykKICAgICAg
ICAgLCBsb2NrSGlzdG9yeShmYWxzZSkKICAgICAgICAgLCBsb2NrQmFja0ZvcndhcmRMaXN0KGZh
bHNlKQogICAgICAgICAsIHdhc1VzZXJHZXN0dXJlKGZhbHNlKQogICAgICAgICAsIHdhc1JlZnJl
c2goZmFsc2UpCisgICAgICAgICwgd2FzRHVyaW5nTG9hZChmYWxzZSkKKyAgICB7CisgICAgfQor
CisgICAgU2NoZWR1bGVkUmVkaXJlY3Rpb24oRm9ybVN1Ym1pc3Npb25UeXBlIHR5cGUsIGNvbnN0
IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHJlZmVycmVyLCBQYXNzUmVmUHRyPEZvcm1EYXRh
PiBmb3JtRGF0YSwKKyAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBjb25zdCBTdHJp
bmcmIGNvbnRlbnRUeXBlLCBjb25zdCBTdHJpbmcmIGJvdW5kYXJ5LAorICAgICAgICAgICAgUGFz
c1JlZlB0cjxFdmVudD4gZXZlbnQsIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPiBmb3JtU3RhdGUsCisg
ICAgICAgICAgICBib29sIGxvY2tIaXN0b3J5LCBib29sIGxvY2tCYWNrRm9yd2FyZExpc3QsIGJv
b2wgZHVyaW5nTG9hZCkKKyAgICAgICAgOiB0eXBlKGZvcm1TdWJtaXNzaW9uKQorICAgICAgICAs
IGZvcm1TdWJtaXNzaW9uVHlwZSh0eXBlKQorICAgICAgICAsIGRlbGF5KDApCisgICAgICAgICwg
dXJsKHVybCkKKyAgICAgICAgLCByZWZlcnJlcihyZWZlcnJlcikKKyAgICAgICAgLCB0YXJnZXQo
dGFyZ2V0KQorICAgICAgICAsIGNvbnRlbnRUeXBlKGNvbnRlbnRUeXBlKQorICAgICAgICAsIGJv
dW5kYXJ5KGJvdW5kYXJ5KQorICAgICAgICAsIGV2ZW50KGV2ZW50KQorICAgICAgICAsIGZvcm1E
YXRhKGZvcm1EYXRhKQorICAgICAgICAsIGZvcm1TdGF0ZShmb3JtU3RhdGUpCisgICAgICAgICwg
aGlzdG9yeVN0ZXBzKDApCisgICAgICAgICwgbG9ja0hpc3RvcnkobG9ja0hpc3RvcnkpCisgICAg
ICAgICwgbG9ja0JhY2tGb3J3YXJkTGlzdChsb2NrQmFja0ZvcndhcmRMaXN0KQorICAgICAgICAs
IHdhc1VzZXJHZXN0dXJlKGZhbHNlKQorICAgICAgICAsIHdhc1JlZnJlc2goZmFsc2UpCisgICAg
ICAgICwgd2FzRHVyaW5nTG9hZChkdXJpbmdMb2FkKQogICAgIHsKKyAgICAgICAgQVNTRVJUKCF1
cmwuaXNFbXB0eSgpKTsKICAgICB9CiB9OwogCkBAIC0zNDIsNyArMzUzLDcgQEAgRnJhbWUqIEZy
YW1lTG9hZGVyOjpjcmVhdGVXaW5kb3coRnJhbWVMbwogICAgICAgICBGcmFtZSogZnJhbWUgPSBm
cmFtZUxvYWRlckZvckZyYW1lTG9va3VwLT5mcmFtZSgpLT50cmVlKCktPmZpbmQocmVxdWVzdC5m
cmFtZU5hbWUoKSk7CiAgICAgICAgIGlmIChmcmFtZSAmJiBzaG91bGRBbGxvd05hdmlnYXRpb24o
ZnJhbWUpKSB7CiAgICAgICAgICAgICBpZiAoIXJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkudXJs
KCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIGZyYW1lLT5sb2FkZXIoKS0+bG9hZEZyYW1l
UmVxdWVzdFdpdGhGb3JtQW5kVmFsdWVzKHJlcXVlc3QsIGZhbHNlLCBmYWxzZSwgMCwgMCwgSGFz
aE1hcDxTdHJpbmcsIFN0cmluZz4oKSk7CisgICAgICAgICAgICAgICAgZnJhbWUtPmxvYWRlcigp
LT5sb2FkRnJhbWVSZXF1ZXN0KHJlcXVlc3QsIGZhbHNlLCBmYWxzZSwgMCwgMCk7CiAgICAgICAg
ICAgICBpZiAoUGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCkpCiAgICAgICAgICAgICAgICAgcGFn
ZS0+Y2hyb21lKCktPmZvY3VzKCk7CiAgICAgICAgICAgICBjcmVhdGVkID0gZmFsc2U7CkBAIC00
MTcsMjIgKzQyOCwyMiBAQCB2b2lkIEZyYW1lTG9hZGVyOjpjaGFuZ2VMb2NhdGlvbihjb25zdCBL
CiAgICAgdXJsU2VsZWN0ZWQocmVxdWVzdCwgIl9zZWxmIiwgMCwgbG9ja0hpc3RvcnksIGxvY2tC
YWNrRm9yd2FyZExpc3QsIHVzZXJHZXN0dXJlKTsKIH0KIAotdm9pZCBGcmFtZUxvYWRlcjo6dXJs
U2VsZWN0ZWQoY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYgcmVxdWVzdCwgRXZlbnQqIGV2ZW50LCBi
b29sIGxvY2tIaXN0b3J5LCBib29sIGxvY2tCYWNrRm9yd2FyZExpc3QpCit2b2lkIEZyYW1lTG9h
ZGVyOjp1cmxTZWxlY3RlZChjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiByZXF1ZXN0LCBQYXNzUmVm
UHRyPEV2ZW50PiBldmVudCwgYm9vbCBsb2NrSGlzdG9yeSwgYm9vbCBsb2NrQmFja0ZvcndhcmRM
aXN0KQogewogICAgIEZyYW1lTG9hZFJlcXVlc3QgY29weSA9IHJlcXVlc3Q7CiAgICAgaWYgKGNv
cHkucmVzb3VyY2VSZXF1ZXN0KCkuaHR0cFJlZmVycmVyKCkuaXNFbXB0eSgpKQogICAgICAgICBj
b3B5LnJlc291cmNlUmVxdWVzdCgpLnNldEhUVFBSZWZlcnJlcihtX291dGdvaW5nUmVmZXJyZXIp
OwogICAgIGFkZEhUVFBPcmlnaW5JZk5lZWRlZChjb3B5LnJlc291cmNlUmVxdWVzdCgpLCBvdXRn
b2luZ09yaWdpbigpKTsKIAotICAgIGxvYWRGcmFtZVJlcXVlc3RXaXRoRm9ybUFuZFZhbHVlcyhj
b3B5LCBsb2NrSGlzdG9yeSwgbG9ja0JhY2tGb3J3YXJkTGlzdCwgZXZlbnQsIDAsIEhhc2hNYXA8
U3RyaW5nLCBTdHJpbmc+KCkpOworICAgIGxvYWRGcmFtZVJlcXVlc3QoY29weSwgbG9ja0hpc3Rv
cnksIGxvY2tCYWNrRm9yd2FyZExpc3QsIGV2ZW50LCAwKTsKIH0KICAgICAKLXZvaWQgRnJhbWVM
b2FkZXI6OnVybFNlbGVjdGVkKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3Qg
U3RyaW5nJiBfdGFyZ2V0LCBFdmVudCogdHJpZ2dlcmluZ0V2ZW50LCBib29sIGxvY2tIaXN0b3J5
LCBib29sIGxvY2tCYWNrRm9yd2FyZExpc3QsIGJvb2wgdXNlckdlc3R1cmUpCit2b2lkIEZyYW1l
TG9hZGVyOjp1cmxTZWxlY3RlZChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0
IFN0cmluZyYgcGFzc2VkVGFyZ2V0LCBQYXNzUmVmUHRyPEV2ZW50PiB0cmlnZ2VyaW5nRXZlbnQs
IGJvb2wgbG9ja0hpc3RvcnksIGJvb2wgbG9ja0JhY2tGb3J3YXJkTGlzdCwgYm9vbCB1c2VyR2Vz
dHVyZSkKIHsKICAgICBpZiAoZXhlY3V0ZUlmSmF2YVNjcmlwdFVSTChyZXF1ZXN0LnVybCgpLCB1
c2VyR2VzdHVyZSwgZmFsc2UpKQogICAgICAgICByZXR1cm47CiAKLSAgICBTdHJpbmcgdGFyZ2V0
ID0gX3RhcmdldDsKKyAgICBTdHJpbmcgdGFyZ2V0ID0gcGFzc2VkVGFyZ2V0OwogICAgIGlmICh0
YXJnZXQuaXNFbXB0eSgpKQogICAgICAgICB0YXJnZXQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5i
YXNlVGFyZ2V0KCk7CiAKQEAgLTUxNiwyNyArNTI3LDIxIEBAIEZyYW1lKiBGcmFtZUxvYWRlcjo6
bG9hZFN1YmZyYW1lKEhUTUxGcmEKICAgICByZXR1cm4gZnJhbWUuZ2V0KCk7CiB9CiAKLXZvaWQg
RnJhbWVMb2FkZXI6OnN1Ym1pdEZvcm1BZ2FpbigpCi17Ci0gICAgaWYgKG1faXNSdW5uaW5nU2Ny
aXB0KQotICAgICAgICByZXR1cm47Ci0gICAgT3duUHRyPEZvcm1TdWJtaXNzaW9uPiBmb3JtKG1f
ZGVmZXJyZWRGb3JtU3VibWlzc2lvbi5yZWxlYXNlKCkpOwotICAgIGlmICghZm9ybSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIHN1Ym1pdEZvcm0oZm9ybS0+YWN0aW9uLCBmb3JtLT51cmwsIGZvcm0t
PmZvcm1EYXRhLCBmb3JtLT50YXJnZXQsIGZvcm0tPmNvbnRlbnRUeXBlLCBmb3JtLT5ib3VuZGFy
eSwgZm9ybS0+ZXZlbnQuZ2V0KCksIGZvcm0tPmxvY2tIaXN0b3J5LCBmb3JtLT5sb2NrQmFja0Zv
cndhcmRMaXN0KTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlcjo6c3VibWl0Rm9ybShjb25zdCBjaGFy
KiBhY3Rpb24sIGNvbnN0IFN0cmluZyYgdXJsLCBQYXNzUmVmUHRyPEZvcm1EYXRhPiBmb3JtRGF0
YSwKLSAgICBjb25zdCBTdHJpbmcmIHRhcmdldCwgY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSwg
Y29uc3QgU3RyaW5nJiBib3VuZGFyeSwgRXZlbnQqIGV2ZW50LCBib29sIGxvY2tIaXN0b3J5LCBi
b29sIGxvY2tCYWNrRm9yd2FyZExpc3QpCit2b2lkIEZyYW1lTG9hZGVyOjpzdWJtaXRGb3JtKEZv
cm1TdWJtaXNzaW9uVHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIHVybCwgUGFzc1JlZlB0cjxGb3Jt
RGF0YT4gZm9ybURhdGEsCisgICAgY29uc3QgU3RyaW5nJiB0YXJnZXQsIGNvbnN0IFN0cmluZyYg
Y29udGVudFR5cGUsIGNvbnN0IFN0cmluZyYgYm91bmRhcnksCisgICAgUGFzc1JlZlB0cjxFdmVu
dD4gZXZlbnQsIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPiBmb3JtU3RhdGUsIGJvb2wgbG9ja0hpc3Rv
cnksIGJvb2wgbG9ja0JhY2tGb3J3YXJkTGlzdCkKIHsKICAgICBBU1NFUlQoZm9ybURhdGEpOwog
ICAgIAogICAgIGlmICghbV9mcmFtZS0+cGFnZSgpKQogICAgICAgICByZXR1cm47CisKKyAgICAv
LyBGSVhNRTogSG93IG11Y2ggb2YgdGhpcyBzaG91bGQgbW92ZSB0byBzY2hlZHVsZUZvcm1TdWJt
aXNzaW9uPwogICAgIAogICAgIEtVUkwgdSA9IGNvbXBsZXRlVVJMKHVybC5pc051bGwoKSA/ICIi
IDogdXJsKTsKKwogICAgIC8vIEZJWE1FOiBEbyB3ZSByZWFsbHkgbmVlZCB0byBzcGVjaWFsLWNh
c2UgYW4gZW1wdHkgVVJMPwotICAgIC8vIFdvdWxkIGl0IGJlIGJldHRlciB0byBqdXN0IGdvIG9u
IHdpdGggdGhlIGZvcm0gc3VibWlzc29uIGFuZCBsZXQgdGhlIEkvTyBmYWlsPworICAgIC8vIFdv
dWxkIGl0IGJlIGJldHRlciB0byBqdXN0IGdvIG9uIHdpdGggdGhlIGZvcm0gc3VibWlzc2lvbiBh
bmQgbGV0IHRoZSBJL08gZmFpbD8KICAgICBpZiAodS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
bjsKIApAQCAtNTQ3LDEzICs1NTIsNiBAQCB2b2lkIEZyYW1lTG9hZGVyOjpzdWJtaXRGb3JtKGNv
bnN0IGNoYXIqCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAobV9pc1J1bm5pbmdT
Y3JpcHQpIHsKLSAgICAgICAgaWYgKG1fZGVmZXJyZWRGb3JtU3VibWlzc2lvbikKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgbV9kZWZlcnJlZEZvcm1TdWJtaXNzaW9uLnNldChuZXcgRm9y
bVN1Ym1pc3Npb24oYWN0aW9uLCB1cmwsIGZvcm1EYXRhLCB0YXJnZXQsIGNvbnRlbnRUeXBlLCBi
b3VuZGFyeSwgZXZlbnQsIGxvY2tIaXN0b3J5LCBsb2NrQmFja0ZvcndhcmRMaXN0KSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBmb3JtRGF0YS0+Z2VuZXJhdGVGaWxlcyhtX2ZyYW1l
LT5wYWdlKCktPmNocm9tZSgpLT5jbGllbnQoKSk7CiAgICAgCiAgICAgRnJhbWVMb2FkUmVxdWVz
dCBmcmFtZVJlcXVlc3Q7CkBAIC01NjUsNyArNTYzLDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6c3Vi
bWl0Rm9ybShjb25zdCBjaGFyKgogCiAgICAgLy8gSGFuZGxlIG1haWx0bzogZm9ybXMKICAgICBi
b29sIGlzTWFpbHRvRm9ybSA9IGVxdWFsSWdub3JpbmdDYXNlKHUucHJvdG9jb2woKSwgIm1haWx0
byIpOwotICAgIGlmIChpc01haWx0b0Zvcm0gJiYgc3RyY21wKGFjdGlvbiwgIkdFVCIpICE9IDAp
IHsKKyAgICBpZiAoaXNNYWlsdG9Gb3JtICYmIHR5cGUgPT0gRm9ybVBvc3QpIHsKICAgICAgICAg
Ly8gQXBwZW5kIGJvZHk9IGZvciBQT1NUIG1haWx0bywgcmVwbGFjZSB0aGUgd2hvbGUgcXVlcnkg
c3RyaW5nIGZvciBHRVQgb25lLgogICAgICAgICBTdHJpbmcgYm9keSA9IGZvcm1EYXRhLT5mbGF0
dGVuVG9TdHJpbmcoKTsKICAgICAgICAgU3RyaW5nIHF1ZXJ5ID0gdS5xdWVyeSgpOwpAQCAtNTc0
LDkgKzU3Miw5IEBAIHZvaWQgRnJhbWVMb2FkZXI6OnN1Ym1pdEZvcm0oY29uc3QgY2hhcioKICAg
ICAgICAgdS5zZXRRdWVyeShxdWVyeSArIGJvZHkpOwogICAgIH0KIAotICAgIGlmIChzdHJjbXAo
YWN0aW9uLCAiR0VUIikgPT0gMCkgeworICAgIGlmICh0eXBlID09IEZvcm1HZXQpCiAgICAgICAg
IHUuc2V0UXVlcnkoZm9ybURhdGEtPmZsYXR0ZW5Ub1N0cmluZygpKTsKLSAgICB9IGVsc2Ugewor
ICAgIGVsc2UgewogICAgICAgICBpZiAoIWlzTWFpbHRvRm9ybSkKICAgICAgICAgICAgIGZyYW1l
UmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRIVFRQQm9keShmb3JtRGF0YS5nZXQoKSk7CiAg
ICAgICAgIGZyYW1lUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRIVFRQTWV0aG9kKCJQT1NU
Iik7CkBAIC01OTEsNyArNTg5LDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6c3VibWl0Rm9ybShjb25z
dCBjaGFyKgogICAgIGZyYW1lUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRVUkwodSk7CiAg
ICAgYWRkSFRUUE9yaWdpbklmTmVlZGVkKGZyYW1lUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKSwg
b3V0Z29pbmdPcmlnaW4oKSk7CiAKLSAgICBzdWJtaXRGb3JtKGZyYW1lUmVxdWVzdCwgZXZlbnQs
IGxvY2tIaXN0b3J5LCBsb2NrQmFja0ZvcndhcmRMaXN0KTsKKyAgICBzdWJtaXRGb3JtKGZyYW1l
UmVxdWVzdCwgZXZlbnQsIGZvcm1TdGF0ZSwgbG9ja0hpc3RvcnksIGxvY2tCYWNrRm9yd2FyZExp
c3QpOwogfQogCiB2b2lkIEZyYW1lTG9hZGVyOjpzdG9wTG9hZGluZyhib29sIHNlbmRVbmxvYWQp
CkBAIC03MDIsMTAgKzcwMCwxMSBAQCBLVVJMIEZyYW1lTG9hZGVyOjppY29uVVJMKCkKIAogYm9v
bCBGcmFtZUxvYWRlcjo6ZGlkT3BlblVSTChjb25zdCBLVVJMJiB1cmwpCiB7Ci0gICAgaWYgKG1f
c2NoZWR1bGVkUmVkaXJlY3Rpb24gJiYgbV9zY2hlZHVsZWRSZWRpcmVjdGlvbi0+dHlwZSA9PSBT
Y2hlZHVsZWRSZWRpcmVjdGlvbjo6bG9jYXRpb25DaGFuZ2VEdXJpbmdMb2FkKQorICAgIGlmICht
X3NjaGVkdWxlZFJlZGlyZWN0aW9uICYmIG1fc2NoZWR1bGVkUmVkaXJlY3Rpb24tPndhc0R1cmlu
Z0xvYWQpIHsKICAgICAgICAgLy8gQSByZWRpcmVjdCB3YXMgc2NoZWR1bGVkIGJlZm9yZSB0aGUg
ZG9jdW1lbnQgd2FzIGNyZWF0ZWQuCiAgICAgICAgIC8vIFRoaXMgY2FuIGhhcHBlbiB3aGVuIG9u
ZSBmcmFtZSBjaGFuZ2VzIGFub3RoZXIgZnJhbWUncyBsb2NhdGlvbi4KICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KIAogICAgIGNhbmNlbFJlZGlyZWN0aW9uKCk7CiAgICAgbV9mcmFtZS0+
ZWRpdG9yKCktPmNsZWFyTGFzdEVkaXRDb21tYW5kKCk7CkBAIC03OTMsNyArNzkyLDYgQEAgU2Ny
aXB0VmFsdWUgRnJhbWVMb2FkZXI6OmV4ZWN1dGVTY3JpcHQoYwogCiAgICAgaWYgKCF3YXNSdW5u
aW5nU2NyaXB0KSB7CiAgICAgICAgIG1faXNSdW5uaW5nU2NyaXB0ID0gZmFsc2U7Ci0gICAgICAg
IHN1Ym1pdEZvcm1BZ2FpbigpOwogICAgICAgICBEb2N1bWVudDo6dXBkYXRlRG9jdW1lbnRzUmVu
ZGVyaW5nKCk7CiAgICAgfQogCkBAIC0xMzY2LDkgKzEzNjQsNDAgQEAgdm9pZCBGcmFtZUxvYWRl
cjo6c2NoZWR1bGVMb2NhdGlvbkNoYW5nZQogICAgICAgICBzdG9wTG9hZGluZyh0cnVlKTsgICAK
ICAgICB9CiAKLSAgICBTY2hlZHVsZWRSZWRpcmVjdGlvbjo6VHlwZSB0eXBlID0gZHVyaW5nTG9h
ZAotICAgICAgICA/IFNjaGVkdWxlZFJlZGlyZWN0aW9uOjpsb2NhdGlvbkNoYW5nZUR1cmluZ0xv
YWQgOiBTY2hlZHVsZWRSZWRpcmVjdGlvbjo6bG9jYXRpb25DaGFuZ2U7Ci0gICAgc2NoZWR1bGVS
ZWRpcmVjdGlvbihuZXcgU2NoZWR1bGVkUmVkaXJlY3Rpb24odHlwZSwgdXJsLCByZWZlcnJlciwg
bG9ja0hpc3RvcnksIGxvY2tCYWNrRm9yd2FyZExpc3QsIHdhc1VzZXJHZXN0dXJlLCBmYWxzZSkp
OworICAgIHNjaGVkdWxlUmVkaXJlY3Rpb24obmV3IFNjaGVkdWxlZFJlZGlyZWN0aW9uKHVybCwg
cmVmZXJyZXIsIGxvY2tIaXN0b3J5LCBsb2NrQmFja0ZvcndhcmRMaXN0LCB3YXNVc2VyR2VzdHVy
ZSwgZmFsc2UsIGR1cmluZ0xvYWQpKTsKK30KKwordm9pZCBGcmFtZUxvYWRlcjo6c2NoZWR1bGVG
b3JtU3VibWlzc2lvbihGb3JtU3VibWlzc2lvblR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiB1cmws
IFBhc3NSZWZQdHI8Rm9ybURhdGE+IGZvcm1EYXRhLAorICAgIGNvbnN0IFN0cmluZyYgdGFyZ2V0
LCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlLCBjb25zdCBTdHJpbmcmIGJvdW5kYXJ5LAorICAg
IFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50LCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4gZm9ybVN0YXRl
LAorICAgIGJvb2wgbG9ja0hpc3RvcnksIGJvb2wgbG9ja0JhY2tGb3J3YXJkTGlzdCkKK3sKKyAg
ICBpZiAoIW1fZnJhbWUtPnBhZ2UoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHVybC5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVkIHNw
ZWNpYWwgaGFuZGxpbmcgZm9yIGZvcm0gc3VibWlzc2lvbnMgd2hlcmUgdGhlIFVSTCBpcyB0aGUg
c2FtZQorICAgIC8vIGFzIHRoZSBjdXJyZW50IG9uZSBleGNlcHQgZm9yIHRoZSBmcmFnbWVudCBw
YXJ0PyBTZWUgc2NoZWR1bGVMb2NhdGlvbkNoYW5nZSBhYm92ZS4KKworICAgIC8vIEZJWE1FOiBJ
dCdzIGJhZCB0byBoYXZlIHRoZSBmb2xsb3dpbmcgY29kZSBjb3BpZWQgYW5kIHBhc3RlZCBmcm9t
IHNjaGVkdWxlTG9jYXRpb25DaGFuZ2UgYWJvdmUuCisgICAgLy8gRG8gd2UgbmVlZCBpdD8gQ2Fu
IHdlIHNoYXJlIGl0PworCisgICAgLy8gSGFuZGxlIGEgbG9jYXRpb24gY2hhbmdlIG9mIGEgcGFn
ZSB3aXRoIG5vIGRvY3VtZW50IGFzIGEgc3BlY2lhbCBjYXNlLgorICAgIC8vIFRoaXMgbWF5IGhh
cHBlbiB3aGVuIGEgZnJhbWUgY2hhbmdlcyB0aGUgbG9jYXRpb24gb2YgYW5vdGhlciBmcmFtZS4K
KyAgICBib29sIGR1cmluZ0xvYWQgPSAhbV9jb21taXR0ZWRGaXJzdFJlYWxEb2N1bWVudExvYWQ7
CisKKyAgICAvLyBJZiBhIHJlZGlyZWN0IHdhcyBzY2hlZHVsZWQgZHVyaW5nIGEgbG9hZCwgdGhl
biBzdG9wIHRoZSBjdXJyZW50IGxvYWQuCisgICAgLy8gT3RoZXJ3aXNlIHdoZW4gdGhlIGN1cnJl
bnQgbG9hZCB0cmFuc2l0aW9ucyBmcm9tIGEgcHJvdmlzaW9uYWwgdG8gYSAKKyAgICAvLyBjb21t
aXR0ZWQgc3RhdGUsIHBlbmRpbmcgcmVkaXJlY3RzIG1heSBiZSBjYW5jZWxsZWQuIAorICAgIGlm
IChkdXJpbmdMb2FkKSB7CisgICAgICAgIGlmIChtX3Byb3Zpc2lvbmFsRG9jdW1lbnRMb2FkZXIp
CisgICAgICAgICAgICBtX3Byb3Zpc2lvbmFsRG9jdW1lbnRMb2FkZXItPnN0b3BMb2FkaW5nKCk7
CisgICAgICAgIHN0b3BMb2FkaW5nKHRydWUpOyAgIAorICAgIH0KKworICAgIHNjaGVkdWxlUmVk
aXJlY3Rpb24obmV3IFNjaGVkdWxlZFJlZGlyZWN0aW9uKHR5cGUsIHVybCwgcmVmZXJyZXIoKSwg
Zm9ybURhdGEsIHRhcmdldCwgY29udGVudFR5cGUsIGJvdW5kYXJ5LCBldmVudCwgZm9ybVN0YXRl
LCBsb2NrSGlzdG9yeSwgbG9ja0JhY2tGb3J3YXJkTGlzdCwgZHVyaW5nTG9hZCkpOwogfQogCiB2
b2lkIEZyYW1lTG9hZGVyOjpzY2hlZHVsZVJlZnJlc2goYm9vbCB3YXNVc2VyR2VzdHVyZSkKQEAg
LTEzNzksOCArMTQwOCw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6OnNjaGVkdWxlUmVmcmVzaChib29s
IHcKICAgICBpZiAobV9VUkwuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBTY2hl
ZHVsZWRSZWRpcmVjdGlvbjo6VHlwZSB0eXBlID0gU2NoZWR1bGVkUmVkaXJlY3Rpb246OmxvY2F0
aW9uQ2hhbmdlOwotICAgIHNjaGVkdWxlUmVkaXJlY3Rpb24obmV3IFNjaGVkdWxlZFJlZGlyZWN0
aW9uKHR5cGUsIG1fVVJMLnN0cmluZygpLCBtX291dGdvaW5nUmVmZXJyZXIsIHRydWUsIHRydWUs
IHdhc1VzZXJHZXN0dXJlLCB0cnVlKSk7CisgICAgc2NoZWR1bGVSZWRpcmVjdGlvbihuZXcgU2No
ZWR1bGVkUmVkaXJlY3Rpb24obV9VUkwuc3RyaW5nKCksIG1fb3V0Z29pbmdSZWZlcnJlciwgdHJ1
ZSwgdHJ1ZSwgd2FzVXNlckdlc3R1cmUsIHRydWUsIGZhbHNlKSk7CiB9CiAKIGJvb2wgRnJhbWVM
b2FkZXI6OmlzTG9jYXRpb25DaGFuZ2UoY29uc3QgU2NoZWR1bGVkUmVkaXJlY3Rpb24mIHJlZGly
ZWN0aW9uKQpAQCAtMTM5MCw3ICsxNDE4LDcgQEAgYm9vbCBGcmFtZUxvYWRlcjo6aXNMb2NhdGlv
bkNoYW5nZShjb25zdAogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBjYXNlIFNj
aGVkdWxlZFJlZGlyZWN0aW9uOjpoaXN0b3J5TmF2aWdhdGlvbjoKICAgICAgICAgY2FzZSBTY2hl
ZHVsZWRSZWRpcmVjdGlvbjo6bG9jYXRpb25DaGFuZ2U6Ci0gICAgICAgIGNhc2UgU2NoZWR1bGVk
UmVkaXJlY3Rpb246OmxvY2F0aW9uQ2hhbmdlRHVyaW5nTG9hZDoKKyAgICAgICAgY2FzZSBTY2hl
ZHVsZWRSZWRpcmVjdGlvbjo6Zm9ybVN1Ym1pc3Npb246CiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xNDYyLDcgKzE0OTAsNiBA
QCB2b2lkIEZyYW1lTG9hZGVyOjpyZWRpcmVjdGlvblRpbWVyRmlyZWQoCiAgICAgc3dpdGNoIChy
ZWRpcmVjdGlvbi0+dHlwZSkgewogICAgICAgICBjYXNlIFNjaGVkdWxlZFJlZGlyZWN0aW9uOjpy
ZWRpcmVjdGlvbjoKICAgICAgICAgY2FzZSBTY2hlZHVsZWRSZWRpcmVjdGlvbjo6bG9jYXRpb25D
aGFuZ2U6Ci0gICAgICAgIGNhc2UgU2NoZWR1bGVkUmVkaXJlY3Rpb246OmxvY2F0aW9uQ2hhbmdl
RHVyaW5nTG9hZDoKICAgICAgICAgICAgIGNoYW5nZUxvY2F0aW9uKHJlZGlyZWN0aW9uLT51cmws
IHJlZGlyZWN0aW9uLT5yZWZlcnJlciwKICAgICAgICAgICAgICAgICByZWRpcmVjdGlvbi0+bG9j
a0hpc3RvcnksIHJlZGlyZWN0aW9uLT5sb2NrQmFja0ZvcndhcmRMaXN0LCByZWRpcmVjdGlvbi0+
d2FzVXNlckdlc3R1cmUsIHJlZGlyZWN0aW9uLT53YXNSZWZyZXNoKTsKICAgICAgICAgICAgIHJl
dHVybjsKQEAgLTE0NzYsNiArMTUwMywxMyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpyZWRpcmVjdGlv
blRpbWVyRmlyZWQoCiAgICAgICAgICAgICAvLyBpbiBib3RoIElFIGFuZCBOUyAoYnV0IG5vdCBp
biBNb3ppbGxhKS4gV2UgY2FuJ3QgZWFzaWx5IGRvIHRoYXQuCiAgICAgICAgICAgICBnb0JhY2tP
ckZvcndhcmQocmVkaXJlY3Rpb24tPmhpc3RvcnlTdGVwcyk7CiAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIGNhc2UgU2NoZWR1bGVkUmVkaXJlY3Rpb246OmZvcm1TdWJtaXNzaW9uOgorICAg
ICAgICAgICAgLy8gRklYTUU6IFJlZmVycmVyIGlzIG5vdCBzZW50IGhlcmUuCisgICAgICAgICAg
ICBzdWJtaXRGb3JtKHJlZGlyZWN0aW9uLT5mb3JtU3VibWlzc2lvblR5cGUsIHJlZGlyZWN0aW9u
LT51cmwsIHJlZGlyZWN0aW9uLT5mb3JtRGF0YSwKKyAgICAgICAgICAgICAgICByZWRpcmVjdGlv
bi0+dGFyZ2V0LCByZWRpcmVjdGlvbi0+Y29udGVudFR5cGUsIHJlZGlyZWN0aW9uLT5ib3VuZGFy
eSwKKyAgICAgICAgICAgICAgICByZWRpcmVjdGlvbi0+ZXZlbnQsIHJlZGlyZWN0aW9uLT5mb3Jt
U3RhdGUsCisgICAgICAgICAgICAgICAgcmVkaXJlY3Rpb24tPmxvY2tIaXN0b3J5LCByZWRpcmVj
dGlvbi0+bG9ja0JhY2tGb3J3YXJkTGlzdCk7CisgICAgICAgICAgICByZXR1cm47CiAgICAgfQog
CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xNzA2LDIyICsxNzQwLDYgQEAgYm9vbCBG
cmFtZUxvYWRlcjo6bG9hZFBsdWdpbihSZW5kZXJQYXJ0KgogICAgIHJldHVybiB3aWRnZXQgIT0g
MDsKIH0KIAotdm9pZCBGcmFtZUxvYWRlcjo6Y2xlYXJSZWNvcmRlZEZvcm1WYWx1ZXMoKQotewot
ICAgIG1fZm9ybUFib3V0VG9CZVN1Ym1pdHRlZCA9IDA7Ci0gICAgbV9mb3JtVmFsdWVzQWJvdXRU
b0JlU3VibWl0dGVkLmNsZWFyKCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXI6OnNldEZvcm1BYm91
dFRvQmVTdWJtaXR0ZWQoUGFzc1JlZlB0cjxIVE1MRm9ybUVsZW1lbnQ+IGVsZW1lbnQpCi17Ci0g
ICAgbV9mb3JtQWJvdXRUb0JlU3VibWl0dGVkID0gZWxlbWVudDsKLX0KLQotdm9pZCBGcmFtZUxv
YWRlcjo6cmVjb3JkRm9ybVZhbHVlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2
YWx1ZSkKLXsKLSAgICBtX2Zvcm1WYWx1ZXNBYm91dFRvQmVTdWJtaXR0ZWQuc2V0KG5hbWUsIHZh
bHVlKTsKLX0KLQogdm9pZCBGcmFtZUxvYWRlcjo6cGFyZW50Q29tcGxldGVkKCkKIHsKICAgICBp
ZiAobV9zY2hlZHVsZWRSZWRpcmVjdGlvbiAmJiAhbV9yZWRpcmVjdGlvblRpbWVyLmlzQWN0aXZl
KCkpCkBAIC0yMDc5LDkgKzIwOTcsOSBAQCB2b2lkIEZyYW1lTG9hZGVyOjpzdGFydFJlZGlyZWN0
aW9uVGltZXIoCiAgICAgbV9yZWRpcmVjdGlvblRpbWVyLnN0YXJ0T25lU2hvdChtX3NjaGVkdWxl
ZFJlZGlyZWN0aW9uLT5kZWxheSk7CiAKICAgICBzd2l0Y2ggKG1fc2NoZWR1bGVkUmVkaXJlY3Rp
b24tPnR5cGUpIHsKLSAgICAgICAgY2FzZSBTY2hlZHVsZWRSZWRpcmVjdGlvbjo6cmVkaXJlY3Rp
b246CisgICAgICAgIGNhc2UgU2NoZWR1bGVkUmVkaXJlY3Rpb246OmZvcm1TdWJtaXNzaW9uOgog
ICAgICAgICBjYXNlIFNjaGVkdWxlZFJlZGlyZWN0aW9uOjpsb2NhdGlvbkNoYW5nZToKLSAgICAg
ICAgY2FzZSBTY2hlZHVsZWRSZWRpcmVjdGlvbjo6bG9jYXRpb25DaGFuZ2VEdXJpbmdMb2FkOgor
ICAgICAgICBjYXNlIFNjaGVkdWxlZFJlZGlyZWN0aW9uOjpyZWRpcmVjdGlvbjoKICAgICAgICAg
ICAgIGNsaWVudFJlZGlyZWN0ZWQoS1VSTChtX3NjaGVkdWxlZFJlZGlyZWN0aW9uLT51cmwpLAog
ICAgICAgICAgICAgICAgIG1fc2NoZWR1bGVkUmVkaXJlY3Rpb24tPmRlbGF5LAogICAgICAgICAg
ICAgICAgIGN1cnJlbnRUaW1lKCkgKyBtX3JlZGlyZWN0aW9uVGltZXIubmV4dEZpcmVJbnRlcnZh
bCgpLApAQCAtMjEwNCw5ICsyMTIyLDkgQEAgdm9pZCBGcmFtZUxvYWRlcjo6c3RvcFJlZGlyZWN0
aW9uVGltZXIoKQogCiAgICAgaWYgKG1fc2NoZWR1bGVkUmVkaXJlY3Rpb24pIHsKICAgICAgICAg
c3dpdGNoIChtX3NjaGVkdWxlZFJlZGlyZWN0aW9uLT50eXBlKSB7Ci0gICAgICAgICAgICBjYXNl
IFNjaGVkdWxlZFJlZGlyZWN0aW9uOjpyZWRpcmVjdGlvbjoKKyAgICAgICAgICAgIGNhc2UgU2No
ZWR1bGVkUmVkaXJlY3Rpb246OmZvcm1TdWJtaXNzaW9uOgogICAgICAgICAgICAgY2FzZSBTY2hl
ZHVsZWRSZWRpcmVjdGlvbjo6bG9jYXRpb25DaGFuZ2U6Ci0gICAgICAgICAgICBjYXNlIFNjaGVk
dWxlZFJlZGlyZWN0aW9uOjpsb2NhdGlvbkNoYW5nZUR1cmluZ0xvYWQ6CisgICAgICAgICAgICBj
YXNlIFNjaGVkdWxlZFJlZGlyZWN0aW9uOjpyZWRpcmVjdGlvbjoKICAgICAgICAgICAgICAgICBj
bGllbnRSZWRpcmVjdENhbmNlbGxlZE9yRmluaXNoZWQobV9jYW5jZWxsaW5nV2l0aExvYWRJblBy
b2dyZXNzKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICBjYXNlIFNjaGVk
dWxlZFJlZGlyZWN0aW9uOjpoaXN0b3J5TmF2aWdhdGlvbjoKQEAgLTIxMjQsNyArMjE0Miw2IEBA
IHZvaWQgRnJhbWVMb2FkZXI6OmNvbXBsZXRlZCgpCiAgICAgICAgIGNoaWxkLT5sb2FkZXIoKS0+
cGFyZW50Q29tcGxldGVkKCk7CiAgICAgaWYgKEZyYW1lKiBwYXJlbnQgPSBtX2ZyYW1lLT50cmVl
KCktPnBhcmVudCgpKQogICAgICAgICBwYXJlbnQtPmxvYWRlcigpLT5jaGVja0NvbXBsZXRlZCgp
OwotICAgIHN1Ym1pdEZvcm1BZ2FpbigpOwogfQogCiB2b2lkIEZyYW1lTG9hZGVyOjpzdGFydGVk
KCkKQEAgLTIxNTgsMTMgKzIxNzUsMTAgQEAgdm9pZCBGcmFtZUxvYWRlcjo6c2V0dXBGb3JSZXBs
YWNlQnlNSU1FVAogICAgIGFjdGl2ZURvY3VtZW50TG9hZGVyKCktPnNldHVwRm9yUmVwbGFjZUJ5
TUlNRVR5cGUobmV3TUlNRVR5cGUpOwogfQogCi12b2lkIEZyYW1lTG9hZGVyOjpsb2FkRnJhbWVS
ZXF1ZXN0V2l0aEZvcm1BbmRWYWx1ZXMoY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYgcmVxdWVzdCwg
Ym9vbCBsb2NrSGlzdG9yeSwgYm9vbCBsb2NrQmFja0ZvcndhcmRMaXN0LCBFdmVudCogZXZlbnQs
Ci0gICAgSFRNTEZvcm1FbGVtZW50KiBzdWJtaXRGb3JtLCBjb25zdCBIYXNoTWFwPFN0cmluZywg
U3RyaW5nPiYgZm9ybVZhbHVlcykKLXsKLSAgICBSZWZQdHI8Rm9ybVN0YXRlPiBmb3JtU3RhdGU7
Ci0gICAgaWYgKHN1Ym1pdEZvcm0pCi0gICAgICAgIGZvcm1TdGF0ZSA9IEZvcm1TdGF0ZTo6Y3Jl
YXRlKHN1Ym1pdEZvcm0sIGZvcm1WYWx1ZXMsIG1fZnJhbWUpOwotICAgIAorLy8gRklYTUU6IEFs
bCB0aGVzZSBvdGhlciBhcmd1bWVudHMgc2hvdWxkIGJlIG1hZGUgbWVtYmVycyBvZiBGcmFtZUxv
YWRSZXF1ZXN0Lgordm9pZCBGcmFtZUxvYWRlcjo6bG9hZEZyYW1lUmVxdWVzdChjb25zdCBGcmFt
ZUxvYWRSZXF1ZXN0JiByZXF1ZXN0LCBib29sIGxvY2tIaXN0b3J5LCBib29sIGxvY2tCYWNrRm9y
d2FyZExpc3QsCisgICAgUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQsIFBhc3NSZWZQdHI8Rm9ybVN0
YXRlPiBmb3JtU3RhdGUpCit7ICAgIAogICAgIEtVUkwgdXJsID0gcmVxdWVzdC5yZXNvdXJjZVJl
cXVlc3QoKS51cmwoKTsKIAogICAgIFN0cmluZyByZWZlcnJlcjsKQEAgLTIxOTQsOSArMjIwOCw5
IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmxvYWRGcmFtZVJlcXVlc3RXaXRoRm8KICAgICAgICAgbG9h
ZFR5cGUgPSBGcmFtZUxvYWRUeXBlU3RhbmRhcmQ7CiAKICAgICBpZiAocmVxdWVzdC5yZXNvdXJj
ZVJlcXVlc3QoKS5odHRwTWV0aG9kKCkgPT0gIlBPU1QiKQotICAgICAgICBsb2FkUG9zdFJlcXVl
c3QocmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKSwgcmVmZXJyZXIsIHJlcXVlc3QuZnJhbWVOYW1l
KCksIGxvY2tIaXN0b3J5LCBsb2FkVHlwZSwgZXZlbnQsIGZvcm1TdGF0ZS5yZWxlYXNlKCkpOwor
ICAgICAgICBsb2FkUG9zdFJlcXVlc3QocmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKSwgcmVmZXJy
ZXIsIHJlcXVlc3QuZnJhbWVOYW1lKCksIGxvY2tIaXN0b3J5LCBsb2FkVHlwZSwgZXZlbnQsIGZv
cm1TdGF0ZSk7CiAgICAgZWxzZQotICAgICAgICBsb2FkVVJMKHJlcXVlc3QucmVzb3VyY2VSZXF1
ZXN0KCkudXJsKCksIHJlZmVycmVyLCByZXF1ZXN0LmZyYW1lTmFtZSgpLCBsb2NrSGlzdG9yeSwg
bG9hZFR5cGUsIGV2ZW50LCBmb3JtU3RhdGUucmVsZWFzZSgpKTsKKyAgICAgICAgbG9hZFVSTChy
ZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnVybCgpLCByZWZlcnJlciwgcmVxdWVzdC5mcmFtZU5h
bWUoKSwgbG9ja0hpc3RvcnksIGxvYWRUeXBlLCBldmVudCwgZm9ybVN0YXRlKTsKIAogICAgIEZy
YW1lKiB0YXJnZXRGcmFtZSA9IGZpbmRGcmFtZUZvck5hdmlnYXRpb24ocmVxdWVzdC5mcmFtZU5h
bWUoKSk7CiAgICAgaWYgKHRhcmdldEZyYW1lICYmIHRhcmdldEZyYW1lICE9IG1fZnJhbWUpCkBA
IC0yMjA1LDcgKzIyMTksNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpsb2FkRnJhbWVSZXF1ZXN0V2l0
aEZvCiB9CiAKIHZvaWQgRnJhbWVMb2FkZXI6OmxvYWRVUkwoY29uc3QgS1VSTCYgbmV3VVJMLCBj
b25zdCBTdHJpbmcmIHJlZmVycmVyLCBjb25zdCBTdHJpbmcmIGZyYW1lTmFtZSwgYm9vbCBsb2Nr
SGlzdG9yeSwgRnJhbWVMb2FkVHlwZSBuZXdMb2FkVHlwZSwKLSAgICBFdmVudCogZXZlbnQsIFBh
c3NSZWZQdHI8Rm9ybVN0YXRlPiBwcnBGb3JtU3RhdGUpCisgICAgUGFzc1JlZlB0cjxFdmVudD4g
ZXZlbnQsIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPiBwcnBGb3JtU3RhdGUpCiB7CiAgICAgUmVmUHRy
PEZvcm1TdGF0ZT4gZm9ybVN0YXRlID0gcHJwRm9ybVN0YXRlOwogICAgIGJvb2wgaXNGb3JtU3Vi
bWlzc2lvbiA9IGZvcm1TdGF0ZTsKQEAgLTM0NjEsNyArMzQ3NSw4IEBAIGludCBGcmFtZUxvYWRl
cjo6bnVtUGVuZGluZ09yTG9hZGluZ1JlcXUKICAgICByZXR1cm4gY291bnQ7CiB9CiAKLXZvaWQg
RnJhbWVMb2FkZXI6OnN1Ym1pdEZvcm0oY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYgcmVxdWVzdCwg
RXZlbnQqIGV2ZW50LCBib29sIGxvY2tIaXN0b3J5LCBib29sIGxvY2tCYWNrRm9yd2FyZExpc3Qp
CisvLyBGSVhNRTogQWxsIHRoZXNlIG90aGVyIGFyZ3VtZW50cyBzaG91bGQgYmUgbWFkZSBtZW1i
ZXJzIG9mIEZyYW1lTG9hZFJlcXVlc3QuCit2b2lkIEZyYW1lTG9hZGVyOjpzdWJtaXRGb3JtKGNv
bnN0IEZyYW1lTG9hZFJlcXVlc3QmIHJlcXVlc3QsIFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50LCBQ
YXNzUmVmUHRyPEZvcm1TdGF0ZT4gZm9ybVN0YXRlLCBib29sIGxvY2tIaXN0b3J5LCBib29sIGxv
Y2tCYWNrRm9yd2FyZExpc3QpCiB7CiAgICAgLy8gRklYTUU6IFdlJ2QgbGlrZSB0byByZW1vdmUg
dGhpcyBhbHRvZ2V0aGVyIGFuZCBmaXggdGhlIG11bHRpcGxlIGZvcm0gc3VibWlzc2lvbiBpc3N1
ZSBhbm90aGVyIHdheS4KICAgICAvLyBXZSBkbyBub3Qgd2FudCB0byBzdWJtaXQgbW9yZSB0aGFu
IG9uZSBmb3JtIGZyb20gdGhlIHNhbWUgcGFnZSwKQEAgLTM0ODAsOSArMzQ5NSw3IEBAIHZvaWQg
RnJhbWVMb2FkZXI6OnN1Ym1pdEZvcm0oY29uc3QgRnJhbWUKICAgICAgICAgbV9zdWJtaXR0ZWRG
b3JtVVJMID0gcmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS51cmwoKTsKICAgICB9CiAKLSAgICBs
b2FkRnJhbWVSZXF1ZXN0V2l0aEZvcm1BbmRWYWx1ZXMocmVxdWVzdCwgbG9ja0hpc3RvcnksIGxv
Y2tCYWNrRm9yd2FyZExpc3QsIGV2ZW50LCBtX2Zvcm1BYm91dFRvQmVTdWJtaXR0ZWQuZ2V0KCks
IG1fZm9ybVZhbHVlc0Fib3V0VG9CZVN1Ym1pdHRlZCk7Ci0KLSAgICBjbGVhclJlY29yZGVkRm9y
bVZhbHVlcygpOworICAgIGxvYWRGcmFtZVJlcXVlc3QocmVxdWVzdCwgbG9ja0hpc3RvcnksIGxv
Y2tCYWNrRm9yd2FyZExpc3QsIGV2ZW50LCBmb3JtU3RhdGUpOwogfQogCiBTdHJpbmcgRnJhbWVM
b2FkZXI6OnVzZXJBZ2VudChjb25zdCBLVVJMJiB1cmwpIGNvbnN0CkBAIC0zNjE1LDcgKzM2Mjgs
NyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpjb21taXR0ZWRMb2FkKERvY3VtZW50CiAgICAgbV9jbGll
bnQtPmNvbW1pdHRlZExvYWQobG9hZGVyLCBkYXRhLCBsZW5ndGgpOwogfQogCi12b2lkIEZyYW1l
TG9hZGVyOjpsb2FkUG9zdFJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBpblJlcXVlc3Qs
IGNvbnN0IFN0cmluZyYgcmVmZXJyZXIsIGNvbnN0IFN0cmluZyYgZnJhbWVOYW1lLCBib29sIGxv
Y2tIaXN0b3J5LCBGcmFtZUxvYWRUeXBlIGxvYWRUeXBlLCBFdmVudCogZXZlbnQsIFBhc3NSZWZQ
dHI8Rm9ybVN0YXRlPiBwcnBGb3JtU3RhdGUpCit2b2lkIEZyYW1lTG9hZGVyOjpsb2FkUG9zdFJl
cXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBpblJlcXVlc3QsIGNvbnN0IFN0cmluZyYgcmVm
ZXJyZXIsIGNvbnN0IFN0cmluZyYgZnJhbWVOYW1lLCBib29sIGxvY2tIaXN0b3J5LCBGcmFtZUxv
YWRUeXBlIGxvYWRUeXBlLCBQYXNzUmVmUHRyPEV2ZW50PiBldmVudCwgUGFzc1JlZlB0cjxGb3Jt
U3RhdGU+IHBycEZvcm1TdGF0ZSkKIHsKICAgICBSZWZQdHI8Rm9ybVN0YXRlPiBmb3JtU3RhdGUg
PSBwcnBGb3JtU3RhdGU7CiAKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuaAkocmV2aXNpb24gNDE5NzUp
CisrKyBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3
ICszMSw2IEBACiAjZGVmaW5lIEZyYW1lTG9hZGVyX2gKIAogI2luY2x1ZGUgIkNhY2hlUG9saWN5
LmgiCi0jaW5jbHVkZSAiRm9ybVN0YXRlLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJUeXBlcy5o
IgogI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCkBAIC00
NSw5ICs0NCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBDYWNoZWRSZXNvdXJj
ZTsKICAgICBjbGFzcyBEb2N1bWVudDsKICAgICBjbGFzcyBEb2N1bWVudExvYWRlcjsKLSAgICBj
bGFzcyBFbGVtZW50OwogICAgIGNsYXNzIEV2ZW50OwogICAgIGNsYXNzIEZvcm1EYXRhOworICAg
IGNsYXNzIEZvcm1TdGF0ZTsKICAgICBjbGFzcyBGcmFtZTsKICAgICBjbGFzcyBGcmFtZUxvYWRl
ckNsaWVudDsKICAgICBjbGFzcyBIaXN0b3J5SXRlbTsKQEAgLTY5LDExICs2OCwxMiBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgVGV4dFJlc291cmNlRGVjb2RlcjsKICAgICBjbGFz
cyBXaWRnZXQ7CiAKLSAgICBzdHJ1Y3QgRm9ybVN1Ym1pc3Npb247CiAgICAgc3RydWN0IEZyYW1l
TG9hZFJlcXVlc3Q7CiAgICAgc3RydWN0IFNjaGVkdWxlZFJlZGlyZWN0aW9uOwogICAgIHN0cnVj
dCBXaW5kb3dGZWF0dXJlczsKIAorICAgIGVudW0gRm9ybVN1Ym1pc3Npb25UeXBlIHsgRm9ybUdl
dCwgRm9ybVBvc3QgfTsKKwogICAgIGJvb2wgaXNCYWNrRm9yd2FyZExvYWRUeXBlKEZyYW1lTG9h
ZFR5cGUpOwogCiAgICAgdHlwZWRlZiB2b2lkICgqTmF2aWdhdGlvblBvbGljeURlY2lzaW9uRnVu
Y3Rpb24pKHZvaWQqIGFyZ3VtZW50LApAQCAtMTI5LDI0ICsxMjksMjQgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICB2b2lkIGxvYWRXaXRoRG9jdW1lbnRMb2FkZXIoRG9jdW1lbnRMb2Fk
ZXIqLCBGcmFtZUxvYWRUeXBlLCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4pOyAgICAgICAgIC8vIENh
bGxzIGNvbnRpbnVlTG9hZEFmdGVyTmF2aWdhdGlvblBvbGljeQogICAgICAgICB2b2lkIGxvYWQo
RG9jdW1lbnRMb2FkZXIqKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhbGxzIGxvYWRXaXRoRG9jdW1lbnRMb2FkZXIg
ICAKIAotICAgICAgICB2b2lkIGxvYWRXaXRoTmF2aWdhdGlvbkFjdGlvbihjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmLCBjb25zdCBOYXZpZ2F0aW9uQWN0aW9uJiwgICAgICAgICAgICAgIC8vIENhbGxz
IGxvYWRXaXRoRG9jdW1lbnRMb2FkZXIoKQorICAgICAgICB2b2lkIGxvYWRXaXRoTmF2aWdhdGlv
bkFjdGlvbihjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBOYXZpZ2F0aW9uQWN0aW9uJiwg
ICAgICAgICAgICAgIC8vIENhbGxzIGxvYWRXaXRoRG9jdW1lbnRMb2FkZXIKICAgICAgICAgICAg
IGJvb2wgbG9ja0hpc3RvcnksIEZyYW1lTG9hZFR5cGUsIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPik7
CiAKLSAgICAgICAgdm9pZCBsb2FkUG9zdFJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jiwg
Y29uc3QgU3RyaW5nJiByZWZlcnJlciwgICAgICAgICAgICAgICAgICAgICAgICAvLyBDYWxsZWQg
YnkgbG9hZEZyYW1lUmVxdWVzdFdpdGhGb3JtQW5kVmFsdWVzKCksIGNhbGxzIGxvYWRXaXRoTmF2
aWdhdGlvbkFjdGlvbgotICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBmcmFtZU5hbWUsIGJvb2wg
bG9ja0hpc3RvcnksIEZyYW1lTG9hZFR5cGUsIEV2ZW50KiwgUGFzc1JlZlB0cjxGb3JtU3RhdGU+
KTsKKyAgICAgICAgdm9pZCBsb2FkUG9zdFJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jiwg
Y29uc3QgU3RyaW5nJiByZWZlcnJlciwgICAgICAgICAgICAgICAgICAgICAgICAvLyBDYWxsZWQg
YnkgbG9hZEZyYW1lUmVxdWVzdCwgY2FsbHMgbG9hZFdpdGhOYXZpZ2F0aW9uQWN0aW9uCisgICAg
ICAgICAgICBjb25zdCBTdHJpbmcmIGZyYW1lTmFtZSwgYm9vbCBsb2NrSGlzdG9yeSwgRnJhbWVM
b2FkVHlwZSwgUGFzc1JlZlB0cjxFdmVudD4sIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPik7CiAKLSAg
ICAgICAgdm9pZCBsb2FkVVJMKGNvbnN0IEtVUkwmIG5ld1VSTCwgY29uc3QgU3RyaW5nJiByZWZl
cnJlciwgY29uc3QgU3RyaW5nJiBmcmFtZU5hbWUsICAgICAgICAgICAvLyBDYWxsZWQgYnkgbG9h
ZEZyYW1lUmVxdWVzdFdpdGhGb3JtQW5kVmFsdWVzKCksIGNhbGxzIGxvYWRXaXRoTmF2aWdhdGlv
bkFjdGlvbiBvciBlbHNlIGRpc3BhdGNoZXMgdG8gbmF2aWdhdGlvbiBwb2xpY3kgZGVsZWdhdGUg
ICAgCi0gICAgICAgICAgICBib29sIGxvY2tIaXN0b3J5LCBGcmFtZUxvYWRUeXBlLCBFdmVudCos
IFBhc3NSZWZQdHI8Rm9ybVN0YXRlPik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgIHZvaWQgbG9hZFVSTEludG9DaGlsZEZy
YW1lKGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIHJlZmVyZXIsIEZyYW1lKik7Ci0KLSAgICAg
ICAgdm9pZCBsb2FkRnJhbWVSZXF1ZXN0V2l0aEZvcm1BbmRWYWx1ZXMoY29uc3QgRnJhbWVMb2Fk
UmVxdWVzdCYsIGJvb2wgbG9ja0hpc3RvcnksIGJvb2wgbG9ja0JhY2tGb3J3YXJkTGlzdCwgICAg
ICAgICAgIC8vIENhbGxlZCBieSBzdWJtaXRGb3JtLCBjYWxscyBsb2FkUG9zdFJlcXVlc3QoKQot
ICAgICAgICAgICAgRXZlbnQqLCBIVE1MRm9ybUVsZW1lbnQqLCBjb25zdCBIYXNoTWFwPFN0cmlu
ZywgU3RyaW5nPiYgZm9ybVZhbHVlcyk7Ci0KLSAgICAgICAgdm9pZCBsb2FkKGNvbnN0IFJlc291
cmNlUmVxdWVzdCYsIGJvb2wgbG9ja0hpc3RvcnkpOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDYWxsZWQgYnkgV2ViRnJhbWUsIGNh
bGxzIChSZXNvdXJjZVJlcXVlc3QsIFN1YnN0aXR1dGVEYXRhKQotICAgICAgICB2b2lkIGxvYWQo
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgU3Vic3RpdHV0ZURhdGEmLCBib29sIGxvY2tI
aXN0b3J5KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhbGxlZCBib3Ro
IGJ5IFdlYkZyYW1lIGFuZCBpbnRlcm5hbGx5LCBjYWxscyAoRG9jdW1lbnRMb2FkZXIqKQotICAg
ICAgICB2b2lkIGxvYWQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgU3RyaW5nJiBmcmFt
ZU5hbWUsIGJvb2wgbG9ja0hpc3RvcnkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIENhbGxlZCBieSBXZWJQbHVnaW5Db250cm9sbGVyCisgICAgICAgIHZvaWQgbG9hZFVSTChj
b25zdCBLVVJMJiBuZXdVUkwsIGNvbnN0IFN0cmluZyYgcmVmZXJyZXIsIGNvbnN0IFN0cmluZyYg
ZnJhbWVOYW1lLCAgICAgICAgICAgLy8gQ2FsbGVkIGJ5IGxvYWRGcmFtZVJlcXVlc3QsIGNhbGxz
IGxvYWRXaXRoTmF2aWdhdGlvbkFjdGlvbiBvciBlbHNlIGRpc3BhdGNoZXMgdG8gbmF2aWdhdGlv
biBwb2xpY3kgZGVsZWdhdGUgICAgCisgICAgICAgICAgICBib29sIGxvY2tIaXN0b3J5LCBGcmFt
ZUxvYWRUeXBlLCBQYXNzUmVmUHRyPEV2ZW50PiwgUGFzc1JlZlB0cjxGb3JtU3RhdGU+KTsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgdm9pZCBsb2FkVVJMSW50b0NoaWxkRnJhbWUoY29uc3QgS1VSTCYsIGNvbnN0IFN0cmlu
ZyYgcmVmZXJyZXIsIEZyYW1lKik7CisKKyAgICAgICAgdm9pZCBsb2FkRnJhbWVSZXF1ZXN0KGNv
bnN0IEZyYW1lTG9hZFJlcXVlc3QmLCBib29sIGxvY2tIaXN0b3J5LCBib29sIGxvY2tCYWNrRm9y
d2FyZExpc3QsICAvLyBDYWxsZWQgYnkgc3VibWl0Rm9ybSwgY2FsbHMgbG9hZFBvc3RSZXF1ZXN0
IGFuZCBsb2FkVVJMLgorICAgICAgICAgICAgUGFzc1JlZlB0cjxFdmVudD4sIFBhc3NSZWZQdHI8
Rm9ybVN0YXRlPik7CisKKyAgICAgICAgdm9pZCBsb2FkKGNvbnN0IFJlc291cmNlUmVxdWVzdCYs
IGJvb2wgbG9ja0hpc3RvcnkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBDYWxsZWQgYnkgV2ViRnJhbWUsIGNhbGxzIChSZXNvdXJjZVJlcXVlc3QsIFN1YnN0aXR1
dGVEYXRhKQorICAgICAgICB2b2lkIGxvYWQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3Qg
U3Vic3RpdHV0ZURhdGEmLCBib29sIGxvY2tIaXN0b3J5KTsgICAgICAgICAgICAgICAgIC8vIENh
bGxlZCBib3RoIGJ5IFdlYkZyYW1lIGFuZCBpbnRlcm5hbGx5LCBjYWxscyAoRG9jdW1lbnRMb2Fk
ZXIqKQorICAgICAgICB2b2lkIGxvYWQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgU3Ry
aW5nJiBmcmFtZU5hbWUsIGJvb2wgbG9ja0hpc3RvcnkpOyAgICAgICAgICAgICAgIC8vIENhbGxl
ZCBieSBXZWJQbHVnaW5Db250cm9sbGVyCiAgICAgICAgIAotICAgICAgICB2b2lkIGxvYWRBcmNo
aXZlKFBhc3NSZWZQdHI8QXJjaGl2ZT4gYXJjaGl2ZSk7CisgICAgICAgIHZvaWQgbG9hZEFyY2hp
dmUoUGFzc1JlZlB0cjxBcmNoaXZlPik7CiAKICAgICAgICAgLy8gUmV0dXJucyB0cnVlIGZvciBh
bnkgbm9uLWxvY2FsIFVSTC4gSWYgRG9jdW1lbnQgcGFyYW1ldGVyIGlzIHN1cHBsaWVkLCBpdHMg
bG9jYWwgbG9hZCBwb2xpY3kgZGljdGF0ZXMsCiAgICAgICAgIC8vIG90aGVyd2lzZSBpZiByZWZl
cnJlciBpcyBub24tZW1wdHkgYW5kIHJlcHJlc2VudHMgYSBsb2NhbCBmaWxlLCB0aGVuIHRoZSBs
b2NhbCBsb2FkIGlzIGFsbG93ZWQuCkBAIC0yNzcsMTYgKzI3NywxNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKICAgICAgICAgdm9pZCBjaGFuZ2VMb2NhdGlvbihjb25zdCBTdHJpbmcmIHVybCwg
Y29uc3QgU3RyaW5nJiByZWZlcnJlciwgYm9vbCBsb2NrSGlzdG9yeSA9IHRydWUsIGJvb2wgbG9j
a0JhY2tGb3J3YXJkTGlzdCA9IHRydWUsIGJvb2wgdXNlckdlc3R1cmUgPSBmYWxzZSwgYm9vbCBy
ZWZyZXNoID0gZmFsc2UpOwogICAgICAgICB2b2lkIGNoYW5nZUxvY2F0aW9uKGNvbnN0IEtVUkwm
LCBjb25zdCBTdHJpbmcmIHJlZmVycmVyLCBib29sIGxvY2tIaXN0b3J5ID0gdHJ1ZSwgYm9vbCBs
b2NrQmFja0ZvcndhcmRMaXN0ID0gdHJ1ZSwgYm9vbCB1c2VyR2VzdHVyZSA9IGZhbHNlLCBib29s
IHJlZnJlc2ggPSBmYWxzZSk7Ci0gICAgICAgIHZvaWQgdXJsU2VsZWN0ZWQoY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiwgY29uc3QgU3RyaW5nJiB0YXJnZXQsIEV2ZW50KiwgYm9vbCBsb2NrSGlzdG9y
eSwgYm9vbCBsb2NrQmFja0ZvcndhcmRMaXN0LCBib29sIHVzZXJHZXN0dXJlKTsKLSAgICAgICAg
dm9pZCB1cmxTZWxlY3RlZChjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiwgRXZlbnQqLCBib29sIGxv
Y2tIaXN0b3J5LCBib29sIGxvY2tCYWNrRm9yd2FyZExpc3QpOworICAgICAgICB2b2lkIHVybFNl
bGVjdGVkKGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBQYXNz
UmVmUHRyPEV2ZW50PiwgYm9vbCBsb2NrSGlzdG9yeSwgYm9vbCBsb2NrQmFja0ZvcndhcmRMaXN0
LCBib29sIHVzZXJHZXN0dXJlKTsKKyAgICAgICAgdm9pZCB1cmxTZWxlY3RlZChjb25zdCBGcmFt
ZUxvYWRSZXF1ZXN0JiwgUGFzc1JlZlB0cjxFdmVudD4sIGJvb2wgbG9ja0hpc3RvcnksIGJvb2wg
bG9ja0JhY2tGb3J3YXJkTGlzdCk7CiAgICAgICAKICAgICAgICAgYm9vbCByZXF1ZXN0RnJhbWUo
SFRNTEZyYW1lT3duZXJFbGVtZW50KiwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IEF0b21pY1N0
cmluZyYgZnJhbWVOYW1lKTsKICAgICAgICAgRnJhbWUqIGxvYWRTdWJmcmFtZShIVE1MRnJhbWVP
d25lckVsZW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJp
bmcmIHJlZmVycmVyKTsKIAotICAgICAgICB2b2lkIHN1Ym1pdEZvcm0oY29uc3QgY2hhciogYWN0
aW9uLCBjb25zdCBTdHJpbmcmIHVybCwgUGFzc1JlZlB0cjxGb3JtRGF0YT4sIGNvbnN0IFN0cmlu
ZyYgdGFyZ2V0LCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlLCBjb25zdCBTdHJpbmcmIGJvdW5k
YXJ5LCBFdmVudCosIGJvb2wgbG9ja0hpc3RvcnksIGJvb2wgbG9ja0JhY2tGb3J3YXJkTGlzdCk7
Ci0gICAgICAgIHZvaWQgc3VibWl0Rm9ybUFnYWluKCk7Ci0gICAgICAgIHZvaWQgc3VibWl0Rm9y
bShjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiwgRXZlbnQqLCBib29sIGxvY2tIaXN0b3J5LCBib29s
IGxvY2tCYWNrRm9yd2FyZExpc3QpOworICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgc3VibWl0
Rm9ybShGb3JtU3VibWlzc2lvblR5cGUsIGNvbnN0IFN0cmluZyYgdXJsLCBQYXNzUmVmUHRyPEZv
cm1EYXRhPiwgY29uc3QgU3RyaW5nJiB0YXJnZXQsIGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUs
IGNvbnN0IFN0cmluZyYgYm91bmRhcnksIFBhc3NSZWZQdHI8RXZlbnQ+LCBQYXNzUmVmUHRyPEZv
cm1TdGF0ZT4sIGJvb2wgbG9ja0hpc3RvcnksIGJvb2wgbG9ja0JhY2tGb3J3YXJkTGlzdCk7Cisg
ICAgICAgIHZvaWQgc3VibWl0Rm9ybShjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiwgUGFzc1JlZlB0
cjxFdmVudD4sIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPiwgYm9vbCBsb2NrSGlzdG9yeSwgYm9vbCBs
b2NrQmFja0ZvcndhcmRMaXN0KTsKIAorICAgIHB1YmxpYzoKICAgICAgICAgdm9pZCBzdG9wKCk7
CiAgICAgICAgIHZvaWQgc3RvcExvYWRpbmcoYm9vbCBzZW5kVW5sb2FkKTsKICAgICAgICAgYm9v
bCBjbG9zZVVSTCgpOwpAQCAtMzA1LDYgKzMwNiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgdm9pZCBzY2hlZHVsZUxvY2F0aW9uQ2hhbmdlKGNvbnN0IFN0cmluZyYgdXJsLCBjb25z
dCBTdHJpbmcmIHJlZmVycmVyLCBib29sIGxvY2tIaXN0b3J5ID0gdHJ1ZSwgYm9vbCBsb2NrQmFj
a0ZvcndhcmRMaXN0ID0gdHJ1ZSwgYm9vbCB1c2VyR2VzdHVyZSA9IGZhbHNlKTsKICAgICAgICAg
dm9pZCBzY2hlZHVsZVJlZnJlc2goYm9vbCB1c2VyR2VzdHVyZSA9IGZhbHNlKTsKICAgICAgICAg
dm9pZCBzY2hlZHVsZUhpc3RvcnlOYXZpZ2F0aW9uKGludCBzdGVwcyk7CisgICAgICAgIHZvaWQg
c2NoZWR1bGVGb3JtU3VibWlzc2lvbihGb3JtU3VibWlzc2lvblR5cGUsIGNvbnN0IFN0cmluZyYg
dXJsLCBQYXNzUmVmUHRyPEZvcm1EYXRhPiwgY29uc3QgU3RyaW5nJiB0YXJnZXQsIGNvbnN0IFN0
cmluZyYgY29udGVudFR5cGUsIGNvbnN0IFN0cmluZyYgYm91bmRhcnksIFBhc3NSZWZQdHI8RXZl
bnQ+LCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4sIGJvb2wgbG9ja0hpc3RvcnksIGJvb2wgbG9ja0Jh
Y2tGb3J3YXJkTGlzdCk7CiAKICAgICAgICAgYm9vbCBjYW5Hb0JhY2tPckZvcndhcmQoaW50IGRp
c3RhbmNlKSBjb25zdDsKICAgICAgICAgdm9pZCBnb0JhY2tPckZvcndhcmQoaW50IGRpc3RhbmNl
KTsKQEAgLTMxNCw3ICszMTYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQg
YmVnaW4oKTsKICAgICAgICAgdm9pZCBiZWdpbihjb25zdCBLVVJMJiwgYm9vbCBkaXNwYXRjaFdp
bmRvd09iamVjdEF2YWlsYWJsZSA9IHRydWUsIFNlY3VyaXR5T3JpZ2luKiBmb3JjZWRTZWN1cml0
eU9yaWdpbiA9IDApOwogCi0gICAgICAgIHZvaWQgd3JpdGUoY29uc3QgY2hhciogc3RyLCBpbnQg
bGVuID0gLTEsIGJvb2wgZmx1c2ggPSBmYWxzZSk7CisgICAgICAgIHZvaWQgd3JpdGUoY29uc3Qg
Y2hhciogc3RyaW5nLCBpbnQgbGVuZ3RoID0gLTEsIGJvb2wgZmx1c2ggPSBmYWxzZSk7CiAgICAg
ICAgIHZvaWQgd3JpdGUoY29uc3QgU3RyaW5nJik7CiAgICAgICAgIHZvaWQgZW5kKCk7CiAgICAg
ICAgIHZvaWQgZW5kSWZOb3RMb2FkaW5nTWFpblJlc291cmNlKCk7CkBAIC0zNzksMTAgKzM4MSw2
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBzY2hlZHVsZUNoZWNrQ29tcGxl
dGVkKCk7CiAgICAgICAgIHZvaWQgc2NoZWR1bGVDaGVja0xvYWRDb21wbGV0ZSgpOwogCi0gICAg
ICAgIHZvaWQgY2xlYXJSZWNvcmRlZEZvcm1WYWx1ZXMoKTsKLSAgICAgICAgdm9pZCBzZXRGb3Jt
QWJvdXRUb0JlU3VibWl0dGVkKFBhc3NSZWZQdHI8SFRNTEZvcm1FbGVtZW50PiBlbGVtZW50KTsK
LSAgICAgICAgdm9pZCByZWNvcmRGb3JtVmFsdWUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBT
dHJpbmcmIHZhbHVlKTsKLQogICAgICAgICBib29sIGlzQ29tcGxldGUoKSBjb25zdDsKIAogICAg
ICAgICBib29sIHJlcXVlc3RPYmplY3QoUmVuZGVyUGFydCogZnJhbWUsIGNvbnN0IFN0cmluZyYg
dXJsLCBjb25zdCBBdG9taWNTdHJpbmcmIGZyYW1lTmFtZSwKQEAgLTU5MCw4ICs1ODgsNiBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgU3RyaW5nIG1fb3V0Z29pbmdSZWZlcnJlcjsK
IAotICAgICAgICBPd25QdHI8Rm9ybVN1Ym1pc3Npb24+IG1fZGVmZXJyZWRGb3JtU3VibWlzc2lv
bjsKLQogICAgICAgICBib29sIG1faXNFeGVjdXRpbmdKYXZhU2NyaXB0Rm9ybUFjdGlvbjsKICAg
ICAgICAgYm9vbCBtX2lzUnVubmluZ1NjcmlwdDsKIApAQCAtNjIxLDggKzYxNyw2IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBib29sIG1fY29udGFpbnNQbHVnSW5zOwogCi0gICAg
ICAgIFJlZlB0cjxIVE1MRm9ybUVsZW1lbnQ+IG1fZm9ybUFib3V0VG9CZVN1Ym1pdHRlZDsKLSAg
ICAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gbV9mb3JtVmFsdWVzQWJvdXRUb0JlU3VibWl0
dGVkOwogICAgICAgICBLVVJMIG1fc3VibWl0dGVkRm9ybVVSTDsKICAgICAKICAgICAgICAgVGlt
ZXI8RnJhbWVMb2FkZXI+IG1fcmVkaXJlY3Rpb25UaW1lcjsKSW5kZXg6IFdlYkNvcmUvcGFnZS9D
b250ZXh0TWVudUNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9Db250
ZXh0TWVudUNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA0MTk3NSkKKysrIFdlYkNvcmUvcGFnZS9D
b250ZXh0TWVudUNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBA
CiAjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKICNpbmNsdWRl
ICJFdmVudE5hbWVzLmgiCisjaW5jbHVkZSAiRm9ybVN0YXRlLmgiCiAjaW5jbHVkZSAiRnJhbWUu
aCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZFJlcXVlc3Qu
aCIKQEAgLTIxMiwxMCArMjEzLDEwIEBAIHZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVyOjpjb250
ZXh0TWVudUkKICAgICAgICAgICAgIG1fY2xpZW50LT5sb29rVXBJbkRpY3Rpb25hcnkoZnJhbWUp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnT3Bl
bkxpbms6Ci0gICAgICAgICAgICBpZiAoRnJhbWUqIHRhcmdldEZyYW1lID0gcmVzdWx0LnRhcmdl
dEZyYW1lKCkpCi0gICAgICAgICAgICAgICAgdGFyZ2V0RnJhbWUtPmxvYWRlcigpLT5sb2FkRnJh
bWVSZXF1ZXN0V2l0aEZvcm1BbmRWYWx1ZXMoRnJhbWVMb2FkUmVxdWVzdChSZXNvdXJjZVJlcXVl
c3QocmVzdWx0LmFic29sdXRlTGlua1VSTCgpLCAKLSAgICAgICAgICAgICAgICAgICAgZnJhbWUt
PmxvYWRlcigpLT5vdXRnb2luZ1JlZmVycmVyKCkpKSwgZmFsc2UsIGZhbHNlLCAwLCAwLCBIYXNo
TWFwPFN0cmluZywgU3RyaW5nPigpKTsKLSAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlm
IChGcmFtZSogdGFyZ2V0RnJhbWUgPSByZXN1bHQudGFyZ2V0RnJhbWUoKSkgeworICAgICAgICAg
ICAgICAgIHRhcmdldEZyYW1lLT5sb2FkZXIoKS0+bG9hZEZyYW1lUmVxdWVzdChGcmFtZUxvYWRS
ZXF1ZXN0KFJlc291cmNlUmVxdWVzdChyZXN1bHQuYWJzb2x1dGVMaW5rVVJMKCksIAorICAgICAg
ICAgICAgICAgICAgICBmcmFtZS0+bG9hZGVyKCktPm91dGdvaW5nUmVmZXJyZXIoKSkpLCBmYWxz
ZSwgZmFsc2UsIDAsIDApOworICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgb3Bl
bk5ld1dpbmRvdyhyZXN1bHQuYWJzb2x1dGVMaW5rVVJMKCksIGZyYW1lKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0JvbGQ6CkluZGV4OiBXZWJD
b3JlL3BhZ2UvRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9GcmFtZS5jcHAJ
KHJldmlzaW9uIDQxOTc1KQorKysgV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTczLDcgKzE3Myw2IEBAIEZyYW1lOjpGcmFtZShQYWdlKiBwYWdlLCBIVE1MRnJhbWVP
d25lckUKIEZyYW1lOjp+RnJhbWUoKQogewogICAgIHNldFZpZXcoMCk7Ci0gICAgbG9hZGVyKCkt
PmNsZWFyUmVjb3JkZWRGb3JtVmFsdWVzKCk7CiAgICAgbG9hZGVyKCktPmNhbmNlbEFuZENsZWFy
KCk7CiAgICAgCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBub3QgYmUgZG9pbmcgYWxsIHRoaXMg
d29yayBpbnNpZGUgdGhlIGRlc3RydWN0b3IKSW5kZXg6IFdlYktpdC9tYWMvV2ViQ29yZVN1cHBv
cnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJD
b3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5tbQkocmV2aXNpb24gNDE5NzUpCisrKyBX
ZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tCSh3b3JraW5n
IGNvcHkpCkBAIC02OTksMTAgKzY5OSwxMSBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojpk
aXNwYXRjaFdpbGxTCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBOU011dGFibGVEaWN0
aW9uYXJ5ICpkaWN0aW9uYXJ5ID0gW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0V2l0
aENhcGFjaXR5OmZvcm1TdGF0ZS0+dmFsdWVzKCkuc2l6ZSgpXTsKLSAgICBIYXNoTWFwPFN0cmlu
ZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gZm9ybVN0YXRlLT52YWx1ZXMoKS5lbmQo
KTsKLSAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9
IGZvcm1TdGF0ZS0+dmFsdWVzKCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBb
ZGljdGlvbmFyeSBzZXRPYmplY3Q6aXQtPnNlY29uZCBmb3JLZXk6aXQtPmZpcnN0XTsKKyAgICBj
b25zdCBTdHJpbmdQYWlyVmVjdG9yJiB0ZXh0RmllbGRWYWx1ZXMgPSBmb3JtU3RhdGUtPnRleHRG
aWVsZFZhbHVlcygpOworICAgIHNpemVfdCBzaXplID0gdGV4dEZpZWxkVmFsdWVzLnNpemUoKTsK
KyAgICBOU011dGFibGVEaWN0aW9uYXJ5ICpkaWN0aW9uYXJ5ID0gW1tOU011dGFibGVEaWN0aW9u
YXJ5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OnNpemVdOworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgc2l6ZTsgKytpKQorICAgICAgICBbZGljdGlvbmFyeSBzZXRPYmplY3Q6dGV4dEZpZWxk
VmFsdWVzW2ldLnNlY29uZCBmb3JLZXk6dGV4dEZpZWxkVmFsdWVzW2ldLmZpcnN0XTsKIAogICAg
IENhbGxGb3JtRGVsZWdhdGUoZ2V0V2ViVmlldyhtX3dlYkZyYW1lLmdldCgpKSwgQHNlbGVjdG9y
KGZyYW1lOnNvdXJjZUZyYW1lOndpbGxTdWJtaXRGb3JtOndpdGhWYWx1ZXM6c3VibWlzc2lvbkxp
c3RlbmVyOiksIG1fd2ViRnJhbWUuZ2V0KCksIGtpdChmb3JtU3RhdGUtPnNvdXJjZUZyYW1lKCkp
LCBraXQoZm9ybVN0YXRlLT5mb3JtKCkpLCBkaWN0aW9uYXJ5LCBzZXRVcFBvbGljeUxpc3RlbmVy
KGZ1bmN0aW9uKS5nZXQoKSk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29017</attachid>
            <date>2009-03-27 11:31:45 -0700</date>
            <delta_ts>2009-03-29 12:29:45 -0700</delta_ts>
            <desc>more work in progress</desc>
            <filename>FormWorkInProgress.txt</filename>
            <type>text/plain</type>
            <size>127014</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dl
YkNvcmUuYmFzZS5leHAJKHJldmlzaW9uIDQyMDQ0KQorKysgV2ViQ29yZS9XZWJDb3JlLmJhc2Uu
ZXhwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTIsMjAgKzE1MiwxNyBAQCBfX1pON1dlYkNvcmUxMUZy
YW1lTG9hZGVyMTRkZXRhY2hDaGlsZHJlCiBfX1pON1dlYkNvcmUxMUZyYW1lTG9hZGVyMTRzY3Jv
bGxUb0FuY2hvckVSS05TXzRLVVJMRQogX19aTjdXZWJDb3JlMTFGcmFtZUxvYWRlcjE0c3RvcEFs
bExvYWRlcnNFdgogX19aTjdXZWJDb3JlMTFGcmFtZUxvYWRlcjE2ZGV0YWNoRnJvbVBhcmVudEV2
CitfX1pON1dlYkNvcmUxMUZyYW1lTG9hZGVyMTZsb2FkRnJhbWVSZXF1ZXN0RVJLTlNfMTZGcmFt
ZUxvYWRSZXF1ZXN0RWJiTjNXVEYxMFBhc3NSZWZQdHJJTlNfNUV2ZW50RUVFTlM1X0lOU185Rm9y
bVN0YXRlRUVFCiBfX1pON1dlYkNvcmUxMUZyYW1lTG9hZGVyMTdzdG9wRm9yVXNlckNhbmNlbEVi
CiBfX1pON1dlYkNvcmUxMUZyYW1lTG9hZGVyMThjdXJyZW50SGlzdG9yeUl0ZW1FdgogX19aTjdX
ZWJDb3JlMTFGcmFtZUxvYWRlcjE4c2V0TG9jYWxMb2FkUG9saWN5RU5TMF8xNUxvY2FsTG9hZFBv
bGljeUUKIF9fWk43V2ViQ29yZTExRnJhbWVMb2FkZXIxOHNob3VsZEhpZGVSZWZlcnJlckVSS05T
XzRLVVJMRVJLTlNfNlN0cmluZ0UKLV9fWk43V2ViQ29yZTExRnJhbWVMb2FkZXIyMGNvbnRpbnVl
TG9hZFdpdGhEYXRhRVBOU18xMlNoYXJlZEJ1ZmZlckVSS05TXzZTdHJpbmdFUzVfUktOU180S1VS
TEUKIF9fWk43V2ViQ29yZTExRnJhbWVMb2FkZXIyMWxvYWRVUkxJbnRvQ2hpbGRGcmFtZUVSS05T
XzRLVVJMRVJLTlNfNlN0cmluZ0VQTlNfNUZyYW1lRQotX19aTjdXZWJDb3JlMTFGcmFtZUxvYWRl
cjIxc2V0Q3VycmVudEhpc3RvcnlJdGVtRU4zV1RGMTBQYXNzUmVmUHRySU5TXzExSGlzdG9yeUl0
ZW1FRUUKIF9fWk43V2ViQ29yZTExRnJhbWVMb2FkZXIyMmZpbmRGcmFtZUZvck5hdmlnYXRpb25F
UktOU18xMkF0b21pY1N0cmluZ0UKIF9fWk43V2ViQ29yZTExRnJhbWVMb2FkZXIyM3RpbWVPZkxh
c3RDb21wbGV0ZWRMb2FkRXYKIF9fWk43V2ViQ29yZTExRnJhbWVMb2FkZXIyNHJlZ2lzdGVyVVJM
U2NoZW1lQXNMb2NhbEVSS05TXzZTdHJpbmdFCi1fX1pON1dlYkNvcmUxMUZyYW1lTG9hZGVyMjVz
ZXRQcm92aXNpb25hbEhpc3RvcnlJdGVtRU4zV1RGMTBQYXNzUmVmUHRySU5TXzExSGlzdG9yeUl0
ZW1FRUUKIF9fWk43V2ViQ29yZTExRnJhbWVMb2FkZXIyNnJlbG9hZFdpdGhPdmVycmlkZUVuY29k
aW5nRVJLTlNfNlN0cmluZ0UKIF9fWk43V2ViQ29yZTExRnJhbWVMb2FkZXIyNnNhdmVEb2N1bWVu
dEFuZFNjcm9sbFN0YXRlRXYKLV9fWk43V2ViQ29yZTExRnJhbWVMb2FkZXIzM2xvYWRGcmFtZVJl
cXVlc3RXaXRoRm9ybUFuZFZhbHVlc0VSS05TXzE2RnJhbWVMb2FkUmVxdWVzdEViYlBOU181RXZl
bnRFUE5TXzE1SFRNTEZvcm1FbGVtZW50RVJLTjNXVEY3SGFzaE1hcElOU182U3RyaW5nRVNBX05T
XzEwU3RyaW5nSGFzaEVOUzhfMTBIYXNoVHJhaXRzSVNBX0VFU0RfRUUKIF9fWk43V2ViQ29yZTEx
RnJhbWVMb2FkZXIzNnNhdmVTY3JvbGxQb3NpdGlvbkFuZFZpZXdTdGF0ZVRvSXRlbUVQTlNfMTFI
aXN0b3J5SXRlbUUKIF9fWk43V2ViQ29yZTExRnJhbWVMb2FkZXI0bG9hZEVSS05TXzE1UmVzb3Vy
Y2VSZXF1ZXN0RVJLTlNfMTRTdWJzdGl0dXRlRGF0YUViCiBfX1pON1dlYkNvcmUxMUZyYW1lTG9h
ZGVyNGxvYWRFUktOU18xNVJlc291cmNlUmVxdWVzdEVSS05TXzZTdHJpbmdFYgpAQCAtNzE4LDcg
KzcxNSw2IEBAIF9fWk5LN1dlYkNvcmUxMUZyYW1lTG9hZGVyMTVmaXJzdExheW91dEQKIF9fWk5L
N1dlYkNvcmUxMUZyYW1lTG9hZGVyMTZvdXRnb2luZ1JlZmVycmVyRXYKIF9fWk5LN1dlYkNvcmUx
MUZyYW1lTG9hZGVyMTZyZXNwb25zZU1JTUVUeXBlRXYKIF9fWk5LN1dlYkNvcmUxMUZyYW1lTG9h
ZGVyMjBhY3RpdmVEb2N1bWVudExvYWRlckV2Ci1fX1pOSzdXZWJDb3JlMTFGcmFtZUxvYWRlcjIx
aXNRdWlja1JlZGlyZWN0Q29taW5nRXYKIF9fWk5LN1dlYkNvcmUxMUZyYW1lTG9hZGVyMjdudW1Q
ZW5kaW5nT3JMb2FkaW5nUmVxdWVzdHNFYgogX19aTks3V2ViQ29yZTExRnJhbWVMb2FkZXI4bG9h
ZFR5cGVFdgogX19aTks3V2ViQ29yZTExSGlzdG9yeUl0ZW0xMHZpc2l0Q291bnRFdgpJbmRleDog
V2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3Vt
ZW50LmNwcAkocmV2aXNpb24gNDIwNDQpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEzMTgsMTAgKzEzMTgsMTEgQEAgdm9pZCBEb2N1bWVudDo6ZGV0YWNo
KCkKICAgICAgICAgcmVuZGVyLT5kZXN0cm95KCk7CiAgICAgCiAgICAgLy8gVGhpcyBpcyByZXF1
aXJlZCwgYXMgb3VyIEZyYW1lIG1pZ2h0IGRlbGV0ZSBpdHNlbGYgYXMgc29vbiBhcyBpdCBkZXRh
Y2hlcwotICAgIC8vIHVzLiAgSG93ZXZlciwgdGhpcyB2aW9sYXRlcyBOb2RlOjpkZXRhY2goKSBz
eW1hbnRpY3MsIGFzIGl0J3MgbmV2ZXIKLSAgICAvLyBwb3NzaWJsZSB0byByZS1hdHRhY2guICBF
dmVudHVhbGx5IERvY3VtZW50OjpkZXRhY2goKSBzaG91bGQgYmUgcmVuYW1lZAotICAgIC8vIG9y
IHRoaXMgY2FsbCBtYWRlIGV4cGxpY2l0IGluIGVhY2ggb2YgdGhlIGNhbGxlcnMgb2YgRG9jdW1l
bnQ6OmRldGFjaCgpLgotICAgIGNsZWFyRnJhbWVQb2ludGVyKCk7CisgICAgLy8gdXMuIEhvd2V2
ZXIsIHRoaXMgdmlvbGF0ZXMgTm9kZTo6ZGV0YWNoKCkgc3ltYW50aWNzLCBhcyBpdCdzIG5ldmVy
CisgICAgLy8gcG9zc2libGUgdG8gcmUtYXR0YWNoLiBFdmVudHVhbGx5IERvY3VtZW50OjpkZXRh
Y2goKSBzaG91bGQgYmUgcmVuYW1lZCwKKyAgICAvLyBvciB0aGlzIHNldHRpbmcgb2YgdGhlIGZy
YW1lIHRvIDAgY291bGQgYmUgbWFkZSBleHBsaWNpdCBpbiBlYWNoIG9mIHRoZQorICAgIC8vIGNh
bGxlcnMgb2YgRG9jdW1lbnQ6OmRldGFjaCgpLgorICAgIG1fZnJhbWUgPSAwOwogICAgIAogICAg
IGlmIChtX3JlbmRlckFyZW5hKSB7CiAgICAgICAgIGRlbGV0ZSBtX3JlbmRlckFyZW5hOwpAQCAt
MTMyOSwxMSArMTMzMCw2IEBAIHZvaWQgRG9jdW1lbnQ6OmRldGFjaCgpCiAgICAgfQogfQogCi12
b2lkIERvY3VtZW50OjpjbGVhckZyYW1lUG9pbnRlcigpCi17Ci0gICAgbV9mcmFtZSA9IDA7Ci19
Ci0KIHZvaWQgRG9jdW1lbnQ6OnJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzRnJvbUFsbE5vZGVzKCkK
IHsKICAgICBzaXplX3Qgc2l6ZSA9IG1fd2luZG93RXZlbnRMaXN0ZW5lcnMuc2l6ZSgpOwpJbmRl
eDogV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1
bWVudC5oCShyZXZpc2lvbiA0MjA0NCkKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTQwNSw4ICs0MDUsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGF0
dGFjaCgpOwogICAgIHZpcnR1YWwgdm9pZCBkZXRhY2goKTsKIAotICAgIHZvaWQgY2xlYXJGcmFt
ZVBvaW50ZXIoKTsKLQogICAgIFJlbmRlckFyZW5hKiByZW5kZXJBcmVuYSgpIHsgcmV0dXJuIG1f
cmVuZGVyQXJlbmE7IH0KIAogICAgIFJlbmRlclZpZXcqIHJlbmRlclZpZXcoKSBjb25zdDsKSW5k
ZXg6IFdlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCShyZXZpc2lvbiA0MjA0NCkKKysrIFdlYkNvcmUv
aHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yLDcgKzIsNyBAQAog
ICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAg
ICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAg
ICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4
LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICAgICAgICAgICAoQykg
MjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEBueXBvcC5jb20pCiAgKgogICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAt
MzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJGb3JtRGF0
YS5oIgogI2luY2x1ZGUgIkZvcm1EYXRhTGlzdC5oIgorI2luY2x1ZGUgIkZvcm1TdGF0ZS5oIgog
I2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJI
VE1MRG9jdW1lbnQuaCIKQEAgLTQ0LDExICs0NSwxMCBAQAogI2luY2x1ZGUgIk1JTUVUeXBlUmVn
aXN0cnkuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dENvbnRyb2wu
aCIKKyNpbmNsdWRlIDxsaW1pdHM+CiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAjaW5j
bHVkZSA8d3RmL1JhbmRvbU51bWJlci5oPgogCi0jaW5jbHVkZSA8bGltaXRzPgotCiAjaWYgUExB
VEZPUk0oV1gpCiAjaW5jbHVkZSA8d3gvZGVmcy5oPgogI2luY2x1ZGUgPHd4L2ZpbGVuYW1lLmg+
CkBAIC01OCw2ICs1OCw4IEBACiAjaW5jbHVkZSA8c2hsd2FwaS5oPgogI2VuZGlmCiAKK3VzaW5n
IG5hbWVzcGFjZSBzdGQ7CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNl
IEhUTUxOYW1lczsKQEAgLTI5NywxNCArMjk5LDE0IEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50Ojpz
dWJtaXQoRXZlbnQqIGV2ZW4KICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBmaXJzdFN1Y2Nl
c3NmdWxTdWJtaXRCdXR0b24gPSAwOwogICAgIGJvb2wgbmVlZEJ1dHRvbkFjdGl2YXRpb24gPSBh
Y3RpdmF0ZVN1Ym1pdEJ1dHRvbjsgLy8gZG8gd2UgbmVlZCB0byBhY3RpdmF0ZSBhIHN1Ym1pdCBi
dXR0b24/CiAgICAgCi0gICAgZnJhbWUtPmxvYWRlcigpLT5jbGVhclJlY29yZGVkRm9ybVZhbHVl
cygpOwotICAgIGZyYW1lLT5sb2FkZXIoKS0+c2V0Rm9ybUFib3V0VG9CZVN1Ym1pdHRlZCh0aGlz
KTsKKyAgICBWZWN0b3I8cGFpcjxTdHJpbmcsIFN0cmluZz4gPiBmb3JtVmFsdWVzOworCiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZvcm1FbGVtZW50cy5zaXplKCk7ICsraSkgewogICAg
ICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBjb250cm9sID0gZm9ybUVsZW1lbnRzW2ldOwog
ICAgICAgICBpZiAoY29udHJvbC0+aGFzTG9jYWxOYW1lKGlucHV0VGFnKSkgewogICAgICAgICAg
ICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50
Kj4oY29udHJvbCk7CiAgICAgICAgICAgICBpZiAoaW5wdXQtPmlzVGV4dEZpZWxkKCkpIHsKLSAg
ICAgICAgICAgICAgICBmcmFtZS0+bG9hZGVyKCktPnJlY29yZEZvcm1WYWx1ZShpbnB1dC0+bmFt
ZSgpLCBpbnB1dC0+dmFsdWUoKSk7CisgICAgICAgICAgICAgICAgZm9ybVZhbHVlcy5hcHBlbmQo
cGFpcjxTdHJpbmcsIFN0cmluZz4oaW5wdXQtPm5hbWUoKSwgaW5wdXQtPnZhbHVlKCkpKTsKICAg
ICAgICAgICAgICAgICBpZiAoaW5wdXQtPmlzU2VhcmNoRmllbGQoKSkKICAgICAgICAgICAgICAg
ICAgICAgaW5wdXQtPmFkZFNlYXJjaFJlc3VsdCgpOwogICAgICAgICAgICAgfQpAQCAtMzE3LDYg
KzMxOSw4IEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50OjpzdWJtaXQoRXZlbnQqIGV2ZW4KICAgICAg
ICAgfQogICAgIH0KIAorICAgIFJlZlB0cjxGb3JtU3RhdGU+IGZvcm1TdGF0ZSA9IEZvcm1TdGF0
ZTo6Y3JlYXRlKHRoaXMsIGZvcm1WYWx1ZXMsIGZyYW1lKTsKKwogICAgIGlmIChuZWVkQnV0dG9u
QWN0aXZhdGlvbiAmJiBmaXJzdFN1Y2Nlc3NmdWxTdWJtaXRCdXR0b24pCiAgICAgICAgIGZpcnN0
U3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRvbi0+c2V0QWN0aXZhdGVkU3VibWl0KHRydWUpOwogICAgIApA
QCAtMzQyLDE0ICszNDYsMTQgQEAgdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnN1Ym1pdChFdmVudCog
ZXZlbgogICAgICAgICAgICAgICAgIEZvcm1EYXRhQnVpbGRlcjo6ZW5jb2RlU3RyaW5nQXNGb3Jt
RGF0YShib2R5RGF0YSwgYm9keS51dGY4KCkpOwogICAgICAgICAgICAgICAgIGRhdGEgPSBGb3Jt
RGF0YTo6Y3JlYXRlKFN0cmluZyhib2R5RGF0YS5kYXRhKCksIGJvZHlEYXRhLnNpemUoKSkucmVw
bGFjZSgnKycsICIlMjAiKS5sYXRpbjEoKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBm
cmFtZS0+bG9hZGVyKCktPnN1Ym1pdEZvcm0oIlBPU1QiLCBtX3VybCwgZGF0YSwgbV90YXJnZXQs
IG1fZm9ybURhdGFCdWlsZGVyLmVuY29kaW5nVHlwZSgpLCBTdHJpbmcoKSwgZXZlbnQsIGxvY2tI
aXN0b3J5LCBsb2NrQmFja0ZvcndhcmRMaXN0KTsKKyAgICAgICAgICAgIGZyYW1lLT5sb2FkZXIo
KS0+c2NoZWR1bGVGb3JtU3VibWlzc2lvbihGb3JtUG9zdCwgbV91cmwsIGRhdGEsIG1fdGFyZ2V0
LCBtX2Zvcm1EYXRhQnVpbGRlci5lbmNvZGluZ1R5cGUoKSwgU3RyaW5nKCksIGV2ZW50LCBmb3Jt
U3RhdGUucmVsZWFzZSgpLCBsb2NrSGlzdG9yeSwgbG9ja0JhY2tGb3J3YXJkTGlzdCk7CiAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBWZWN0b3I8Y2hhcj4gYm91bmRhcnkgPSBtX2Zvcm1E
YXRhQnVpbGRlci5nZW5lcmF0ZVVuaXF1ZUJvdW5kYXJ5U3RyaW5nKCk7Ci0gICAgICAgICAgICBm
cmFtZS0+bG9hZGVyKCktPnN1Ym1pdEZvcm0oIlBPU1QiLCBtX3VybCwgY3JlYXRlRm9ybURhdGEo
Ym91bmRhcnkuZGF0YSgpKSwgbV90YXJnZXQsIG1fZm9ybURhdGFCdWlsZGVyLmVuY29kaW5nVHlw
ZSgpLCBib3VuZGFyeS5kYXRhKCksIGV2ZW50LCBsb2NrSGlzdG9yeSwgbG9ja0JhY2tGb3J3YXJk
TGlzdCk7CisgICAgICAgICAgICBmcmFtZS0+bG9hZGVyKCktPnNjaGVkdWxlRm9ybVN1Ym1pc3Np
b24oRm9ybVBvc3QsIG1fdXJsLCBjcmVhdGVGb3JtRGF0YShib3VuZGFyeS5kYXRhKCkpLCBtX3Rh
cmdldCwgbV9mb3JtRGF0YUJ1aWxkZXIuZW5jb2RpbmdUeXBlKCksIGJvdW5kYXJ5LmRhdGEoKSwg
ZXZlbnQsIGZvcm1TdGF0ZS5yZWxlYXNlKCksIGxvY2tIaXN0b3J5LCBsb2NrQmFja0ZvcndhcmRM
aXN0KTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIG1fZm9ybURhdGFCdWlsZGVy
LnNldElzTXVsdGlQYXJ0Rm9ybShmYWxzZSk7Ci0gICAgICAgIGZyYW1lLT5sb2FkZXIoKS0+c3Vi
bWl0Rm9ybSgiR0VUIiwgbV91cmwsIGNyZWF0ZUZvcm1EYXRhKENTdHJpbmcoKSksIG1fdGFyZ2V0
LCBTdHJpbmcoKSwgU3RyaW5nKCksIGV2ZW50LCBsb2NrSGlzdG9yeSwgbG9ja0JhY2tGb3J3YXJk
TGlzdCk7CisgICAgICAgIGZyYW1lLT5sb2FkZXIoKS0+c2NoZWR1bGVGb3JtU3VibWlzc2lvbihG
b3JtR2V0LCBtX3VybCwgY3JlYXRlRm9ybURhdGEoQ1N0cmluZygpKSwgbV90YXJnZXQsIFN0cmlu
ZygpLCBTdHJpbmcoKSwgZXZlbnQsIGZvcm1TdGF0ZS5yZWxlYXNlKCksICBsb2NrSGlzdG9yeSwg
bG9ja0JhY2tGb3J3YXJkTGlzdCk7CiAgICAgfQogCiAgICAgaWYgKG5lZWRCdXR0b25BY3RpdmF0
aW9uICYmIGZpcnN0U3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRvbikKSW5kZXg6IFdlYkNvcmUvbG9hZGVy
L0Zvcm1TdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRm9ybVN0YXRlLmNw
cAkocmV2aXNpb24gNDIwNDQpCisrKyBXZWJDb3JlL2xvYWRlci9Gb3JtU3RhdGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBs
ZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwNiwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDE2ICszNCwxNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLVBhc3NSZWZQdHI8Rm9ybVN0YXRlPiBGb3JtU3RhdGU6OmNyZWF0ZShQYXNzUmVmUHRy
PEhUTUxGb3JtRWxlbWVudD4gZm9ybSwgY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIHZh
bHVlcywgUGFzc1JlZlB0cjxGcmFtZT4gc291cmNlRnJhbWUpCitpbmxpbmUgRm9ybVN0YXRlOjpG
b3JtU3RhdGUoUGFzc1JlZlB0cjxIVE1MRm9ybUVsZW1lbnQ+IGZvcm0sIFN0cmluZ1BhaXJWZWN0
b3ImIHRleHRGaWVsZFZhbHVlc1RvQWRvcHQsIFBhc3NSZWZQdHI8RnJhbWU+IHNvdXJjZUZyYW1l
KQorICAgIDogbV9mb3JtKGZvcm0pCisgICAgLCBtX3NvdXJjZUZyYW1lKHNvdXJjZUZyYW1lKQog
ewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgRm9ybVN0YXRlKGZvcm0sIHZhbHVlcywgc291cmNl
RnJhbWUpKTsKKyAgICBtX3RleHRGaWVsZFZhbHVlcy5zd2FwKHRleHRGaWVsZFZhbHVlc1RvQWRv
cHQpOwogfQogCi1Gb3JtU3RhdGU6OkZvcm1TdGF0ZShQYXNzUmVmUHRyPEhUTUxGb3JtRWxlbWVu
dD4gZm9ybSwgY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIHZhbHVlcywgUGFzc1JlZlB0
cjxGcmFtZT4gc291cmNlRnJhbWUpCi0gICAgOiBtX2Zvcm0oZm9ybSkKLSAgICAsIG1fdmFsdWVz
KHZhbHVlcykKLSAgICAsIG1fc291cmNlRnJhbWUoc291cmNlRnJhbWUpCitQYXNzUmVmUHRyPEZv
cm1TdGF0ZT4gRm9ybVN0YXRlOjpjcmVhdGUoUGFzc1JlZlB0cjxIVE1MRm9ybUVsZW1lbnQ+IGZv
cm0sIFN0cmluZ1BhaXJWZWN0b3ImIHRleHRGaWVsZFZhbHVlc1RvQWRvcHQsIFBhc3NSZWZQdHI8
RnJhbWU+IHNvdXJjZUZyYW1lKQogeworICAgIHJldHVybiBhZG9wdFJlZihuZXcgRm9ybVN0YXRl
KGZvcm0sIHRleHRGaWVsZFZhbHVlc1RvQWRvcHQsIHNvdXJjZUZyYW1lKSk7CiB9CiAKIH0KSW5k
ZXg6IFdlYkNvcmUvbG9hZGVyL0Zvcm1TdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9h
ZGVyL0Zvcm1TdGF0ZS5oCShyZXZpc2lvbiA0MjA0NCkKKysrIFdlYkNvcmUvbG9hZGVyL0Zvcm1T
dGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNiwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDI4ICsyOSwyOCBAQAogI2lmbmRl
ZiBGb3JtU3RhdGVfaAogI2RlZmluZSBGb3JtU3RhdGVfaAogCi0jaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KLSNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
ICAgICBjbGFzcyBGcmFtZTsKICAgICBjbGFzcyBIVE1MRm9ybUVsZW1lbnQ7CiAKKyAgICB0eXBl
ZGVmIFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+ID4gU3RyaW5nUGFpclZlY3RvcjsK
KwogICAgIGNsYXNzIEZvcm1TdGF0ZSA6IHB1YmxpYyBSZWZDb3VudGVkPEZvcm1TdGF0ZT4gewog
ICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPiBjcmVhdGUo
UGFzc1JlZlB0cjxIVE1MRm9ybUVsZW1lbnQ+IGZvcm0sIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBT
dHJpbmc+JiB2YWx1ZXMsIFBhc3NSZWZQdHI8RnJhbWU+IHNvdXJjZUZyYW1lKTsKKyAgICAgICAg
c3RhdGljIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPiBjcmVhdGUoUGFzc1JlZlB0cjxIVE1MRm9ybUVs
ZW1lbnQ+LCBTdHJpbmdQYWlyVmVjdG9yJiB0ZXh0RmllbGRWYWx1ZXNUb0Fkb3B0LCBQYXNzUmVm
UHRyPEZyYW1lPik7CiAKICAgICAgICAgSFRNTEZvcm1FbGVtZW50KiBmb3JtKCkgY29uc3QgeyBy
ZXR1cm4gbV9mb3JtLmdldCgpOyB9Ci0gICAgICAgIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJp
bmc+JiB2YWx1ZXMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlczsgfQorICAgICAgICBjb25zdCBT
dHJpbmdQYWlyVmVjdG9yJiB0ZXh0RmllbGRWYWx1ZXMoKSBjb25zdCB7IHJldHVybiBtX3RleHRG
aWVsZFZhbHVlczsgfQogICAgICAgICBGcmFtZSogc291cmNlRnJhbWUoKSBjb25zdCB7IHJldHVy
biBtX3NvdXJjZUZyYW1lLmdldCgpOyB9CiAKICAgICBwcml2YXRlOgotICAgICAgICBGb3JtU3Rh
dGUoUGFzc1JlZlB0cjxIVE1MRm9ybUVsZW1lbnQ+IGZvcm0sIGNvbnN0IEhhc2hNYXA8U3RyaW5n
LCBTdHJpbmc+JiB2YWx1ZXMsIFBhc3NSZWZQdHI8RnJhbWU+IHNvdXJjZUZyYW1lKTsKKyAgICAg
ICAgRm9ybVN0YXRlKFBhc3NSZWZQdHI8SFRNTEZvcm1FbGVtZW50PiwgU3RyaW5nUGFpclZlY3Rv
ciYgdGV4dEZpZWxkVmFsdWVzVG9BZG9wdCwgUGFzc1JlZlB0cjxGcmFtZT4pOwogCiAgICAgICAg
IFJlZlB0cjxIVE1MRm9ybUVsZW1lbnQ+IG1fZm9ybTsKLSAgICAgICAgSGFzaE1hcDxTdHJpbmcs
IFN0cmluZz4gbV92YWx1ZXM7CisgICAgICAgIFN0cmluZ1BhaXJWZWN0b3IgbV90ZXh0RmllbGRW
YWx1ZXM7CiAgICAgICAgIFJlZlB0cjxGcmFtZT4gbV9zb3VyY2VGcmFtZTsKICAgICB9OwogCklu
ZGV4OiBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCShyZXZpc2lvbiA0MjA0NCkKKysrIFdlYkNvcmUvbG9h
ZGVyL0ZyYW1lTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQzLDQ4ICsxNDMsMzAgQEAg
c3RhdGljIFVSTFNjaGVtZXNNYXAmIG5vQWNjZXNzU2NoZW1lcygpCiAgICAgcmV0dXJuIG5vQWNj
ZXNzU2NoZW1lczsKIH0KIAotc3RydWN0IEZvcm1TdWJtaXNzaW9uIHsKLSAgICBGb3JtU3VibWlz
c2lvbihjb25zdCBjaGFyKiBhY3Rpb24sIGNvbnN0IFN0cmluZyYgdXJsLCBQYXNzUmVmUHRyPEZv
cm1EYXRhPiBmb3JtRGF0YSwKLSAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHRhcmdl
dCwgY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSwgY29uc3QgU3RyaW5nJiBib3VuZGFyeSwKLSAg
ICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPEV2ZW50PiBldmVudCwgYm9vbCBsb2NrSGlzdG9y
eSwgYm9vbCBsb2NrQmFja0ZvcndhcmRMaXN0KQotICAgICAgICA6IGFjdGlvbihhY3Rpb24pCi0g
ICAgICAgICwgdXJsKHVybCkKLSAgICAgICAgLCBmb3JtRGF0YShmb3JtRGF0YSkKLSAgICAgICAg
LCB0YXJnZXQodGFyZ2V0KQotICAgICAgICAsIGNvbnRlbnRUeXBlKGNvbnRlbnRUeXBlKQotICAg
ICAgICAsIGJvdW5kYXJ5KGJvdW5kYXJ5KQotICAgICAgICAsIGV2ZW50KGV2ZW50KQotICAgICAg
ICAsIGxvY2tIaXN0b3J5KGxvY2tIaXN0b3J5KQotICAgICAgICAsIGxvY2tCYWNrRm9yd2FyZExp
c3QobG9ja0JhY2tGb3J3YXJkTGlzdCkKLSAgICB7Ci0gICAgfQotCi0gICAgY29uc3QgY2hhciog
YWN0aW9uOwotICAgIFN0cmluZyB1cmw7Ci0gICAgUmVmUHRyPEZvcm1EYXRhPiBmb3JtRGF0YTsK
LSAgICBTdHJpbmcgdGFyZ2V0OwotICAgIFN0cmluZyBjb250ZW50VHlwZTsKLSAgICBTdHJpbmcg
Ym91bmRhcnk7Ci0gICAgUmVmUHRyPEV2ZW50PiBldmVudDsKLSAgICBib29sIGxvY2tIaXN0b3J5
OwotICAgIGJvb2wgbG9ja0JhY2tGb3J3YXJkTGlzdDsKLX07Ci0KIHN0cnVjdCBTY2hlZHVsZWRS
ZWRpcmVjdGlvbiB7Ci0gICAgZW51bSBUeXBlIHsgcmVkaXJlY3Rpb24sIGxvY2F0aW9uQ2hhbmdl
LCBoaXN0b3J5TmF2aWdhdGlvbiwgbG9jYXRpb25DaGFuZ2VEdXJpbmdMb2FkIH07CisgICAgZW51
bSBUeXBlIHsgcmVkaXJlY3Rpb24sIGxvY2F0aW9uQ2hhbmdlLCBoaXN0b3J5TmF2aWdhdGlvbiwg
Zm9ybVN1Ym1pc3Npb24gfTsKIAogICAgIGNvbnN0IFR5cGUgdHlwZTsKKyAgICBjb25zdCBGb3Jt
U3VibWlzc2lvblR5cGUgZm9ybVN1Ym1pc3Npb25UeXBlOwogICAgIGNvbnN0IGRvdWJsZSBkZWxh
eTsKICAgICBjb25zdCBTdHJpbmcgdXJsOwogICAgIGNvbnN0IFN0cmluZyByZWZlcnJlcjsKKyAg
ICBjb25zdCBTdHJpbmcgdGFyZ2V0OworICAgIGNvbnN0IFN0cmluZyBjb250ZW50VHlwZTsKKyAg
ICBjb25zdCBTdHJpbmcgYm91bmRhcnk7CisgICAgY29uc3QgUmVmUHRyPEV2ZW50PiBldmVudDsK
KyAgICBjb25zdCBSZWZQdHI8Rm9ybURhdGE+IGZvcm1EYXRhOworICAgIGNvbnN0IFJlZlB0cjxG
b3JtU3RhdGU+IGZvcm1TdGF0ZTsKICAgICBjb25zdCBpbnQgaGlzdG9yeVN0ZXBzOwogICAgIGNv
bnN0IGJvb2wgbG9ja0hpc3Rvcnk7CiAgICAgY29uc3QgYm9vbCBsb2NrQmFja0ZvcndhcmRMaXN0
OwogICAgIGNvbnN0IGJvb2wgd2FzVXNlckdlc3R1cmU7CiAgICAgY29uc3QgYm9vbCB3YXNSZWZy
ZXNoOworICAgIGNvbnN0IGJvb2wgd2FzRHVyaW5nTG9hZDsKIAogICAgIFNjaGVkdWxlZFJlZGly
ZWN0aW9uKGRvdWJsZSBkZWxheSwgY29uc3QgU3RyaW5nJiB1cmwsIGJvb2wgbG9ja0hpc3Rvcnks
IGJvb2wgbG9ja0JhY2tGb3J3YXJkTGlzdCwgYm9vbCB3YXNVc2VyR2VzdHVyZSwgYm9vbCByZWZy
ZXNoKQogICAgICAgICA6IHR5cGUocmVkaXJlY3Rpb24pCisgICAgICAgICwgZm9ybVN1Ym1pc3Np
b25UeXBlKCkKICAgICAgICAgLCBkZWxheShkZWxheSkKICAgICAgICAgLCB1cmwodXJsKQogICAg
ICAgICAsIGhpc3RvcnlTdGVwcygwKQpAQCAtMTkyLDEyICsxNzQsMTQgQEAgc3RydWN0IFNjaGVk
dWxlZFJlZGlyZWN0aW9uIHsKICAgICAgICAgLCBsb2NrQmFja0ZvcndhcmRMaXN0KGxvY2tCYWNr
Rm9yd2FyZExpc3QpCiAgICAgICAgICwgd2FzVXNlckdlc3R1cmUod2FzVXNlckdlc3R1cmUpCiAg
ICAgICAgICwgd2FzUmVmcmVzaChyZWZyZXNoKQorICAgICAgICAsIHdhc0R1cmluZ0xvYWQoZmFs
c2UpCiAgICAgewogICAgICAgICBBU1NFUlQoIXVybC5pc0VtcHR5KCkpOwogICAgIH0KIAotICAg
IFNjaGVkdWxlZFJlZGlyZWN0aW9uKFR5cGUgbG9jYXRpb25DaGFuZ2VUeXBlLCBjb25zdCBTdHJp
bmcmIHVybCwgY29uc3QgU3RyaW5nJiByZWZlcnJlciwgYm9vbCBsb2NrSGlzdG9yeSwgYm9vbCBs
b2NrQmFja0ZvcndhcmRMaXN0LCBib29sIHdhc1VzZXJHZXN0dXJlLCBib29sIHJlZnJlc2gpCi0g
ICAgICAgIDogdHlwZShsb2NhdGlvbkNoYW5nZVR5cGUpCisgICAgU2NoZWR1bGVkUmVkaXJlY3Rp
b24oY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgcmVmZXJyZXIsIGJvb2wgbG9ja0hp
c3RvcnksIGJvb2wgbG9ja0JhY2tGb3J3YXJkTGlzdCwgYm9vbCB3YXNVc2VyR2VzdHVyZSwgYm9v
bCByZWZyZXNoLCBib29sIGR1cmluZ0xvYWQpCisgICAgICAgIDogdHlwZShsb2NhdGlvbkNoYW5n
ZSkKKyAgICAgICAgLCBmb3JtU3VibWlzc2lvblR5cGUoKQogICAgICAgICAsIGRlbGF5KDApCiAg
ICAgICAgICwgdXJsKHVybCkKICAgICAgICAgLCByZWZlcnJlcihyZWZlcnJlcikKQEAgLTIwNiwy
MSArMTkwLDQ4IEBAIHN0cnVjdCBTY2hlZHVsZWRSZWRpcmVjdGlvbiB7CiAgICAgICAgICwgbG9j
a0JhY2tGb3J3YXJkTGlzdChsb2NrQmFja0ZvcndhcmRMaXN0KQogICAgICAgICAsIHdhc1VzZXJH
ZXN0dXJlKHdhc1VzZXJHZXN0dXJlKQogICAgICAgICAsIHdhc1JlZnJlc2gocmVmcmVzaCkKKyAg
ICAgICAgLCB3YXNEdXJpbmdMb2FkKGR1cmluZ0xvYWQpCiAgICAgewotICAgICAgICBBU1NFUlQo
bG9jYXRpb25DaGFuZ2VUeXBlID09IGxvY2F0aW9uQ2hhbmdlIHx8IGxvY2F0aW9uQ2hhbmdlVHlw
ZSA9PSBsb2NhdGlvbkNoYW5nZUR1cmluZ0xvYWQpOwogICAgICAgICBBU1NFUlQoIXVybC5pc0Vt
cHR5KCkpOwogICAgIH0KIAogICAgIGV4cGxpY2l0IFNjaGVkdWxlZFJlZGlyZWN0aW9uKGludCBo
aXN0b3J5TmF2aWdhdGlvblN0ZXBzKQogICAgICAgICA6IHR5cGUoaGlzdG9yeU5hdmlnYXRpb24p
CisgICAgICAgICwgZm9ybVN1Ym1pc3Npb25UeXBlKCkKICAgICAgICAgLCBkZWxheSgwKQogICAg
ICAgICAsIGhpc3RvcnlTdGVwcyhoaXN0b3J5TmF2aWdhdGlvblN0ZXBzKQogICAgICAgICAsIGxv
Y2tIaXN0b3J5KGZhbHNlKQogICAgICAgICAsIGxvY2tCYWNrRm9yd2FyZExpc3QoZmFsc2UpCiAg
ICAgICAgICwgd2FzVXNlckdlc3R1cmUoZmFsc2UpCiAgICAgICAgICwgd2FzUmVmcmVzaChmYWxz
ZSkKKyAgICAgICAgLCB3YXNEdXJpbmdMb2FkKGZhbHNlKQogICAgIHsKICAgICB9CisKKyAgICBT
Y2hlZHVsZWRSZWRpcmVjdGlvbihGb3JtU3VibWlzc2lvblR5cGUgdHlwZSwgY29uc3QgU3RyaW5n
JiB1cmwsIGNvbnN0IFN0cmluZyYgcmVmZXJyZXIsIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGZvcm1E
YXRhLAorICAgICAgICAgICAgY29uc3QgU3RyaW5nJiB0YXJnZXQsIGNvbnN0IFN0cmluZyYgY29u
dGVudFR5cGUsIGNvbnN0IFN0cmluZyYgYm91bmRhcnksCisgICAgICAgICAgICBQYXNzUmVmUHRy
PEV2ZW50PiBldmVudCwgUGFzc1JlZlB0cjxGb3JtU3RhdGU+IGZvcm1TdGF0ZSwKKyAgICAgICAg
ICAgIGJvb2wgbG9ja0hpc3RvcnksIGJvb2wgbG9ja0JhY2tGb3J3YXJkTGlzdCwgYm9vbCBkdXJp
bmdMb2FkKQorICAgICAgICA6IHR5cGUoZm9ybVN1Ym1pc3Npb24pCisgICAgICAgICwgZm9ybVN1
Ym1pc3Npb25UeXBlKHR5cGUpCisgICAgICAgICwgZGVsYXkoMCkKKyAgICAgICAgLCB1cmwodXJs
KQorICAgICAgICAsIHJlZmVycmVyKHJlZmVycmVyKQorICAgICAgICAsIHRhcmdldCh0YXJnZXQp
CisgICAgICAgICwgY29udGVudFR5cGUoY29udGVudFR5cGUpCisgICAgICAgICwgYm91bmRhcnko
Ym91bmRhcnkpCisgICAgICAgICwgZXZlbnQoZXZlbnQpCisgICAgICAgICwgZm9ybURhdGEoZm9y
bURhdGEpCisgICAgICAgICwgZm9ybVN0YXRlKGZvcm1TdGF0ZSkKKyAgICAgICAgLCBoaXN0b3J5
U3RlcHMoMCkKKyAgICAgICAgLCBsb2NrSGlzdG9yeShsb2NrSGlzdG9yeSkKKyAgICAgICAgLCBs
b2NrQmFja0ZvcndhcmRMaXN0KGxvY2tCYWNrRm9yd2FyZExpc3QpCisgICAgICAgICwgd2FzVXNl
ckdlc3R1cmUoZmFsc2UpCisgICAgICAgICwgd2FzUmVmcmVzaChmYWxzZSkKKyAgICAgICAgLCB3
YXNEdXJpbmdMb2FkKGR1cmluZ0xvYWQpCisgICAgeworICAgICAgICBBU1NFUlQoIXVybC5pc0Vt
cHR5KCkpOworICAgIH0KIH07CiAKIHN0YXRpYyBkb3VibGUgc3RvcmVkVGltZU9mTGFzdENvbXBs
ZXRlZExvYWQ7CkBAIC0zNDcsNyArMzU4LDcgQEAgRnJhbWUqIEZyYW1lTG9hZGVyOjpjcmVhdGVX
aW5kb3coRnJhbWVMbwogICAgICAgICBGcmFtZSogZnJhbWUgPSBmcmFtZUxvYWRlckZvckZyYW1l
TG9va3VwLT5mcmFtZSgpLT50cmVlKCktPmZpbmQocmVxdWVzdC5mcmFtZU5hbWUoKSk7CiAgICAg
ICAgIGlmIChmcmFtZSAmJiBzaG91bGRBbGxvd05hdmlnYXRpb24oZnJhbWUpKSB7CiAgICAgICAg
ICAgICBpZiAoIXJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkudXJsKCkuaXNFbXB0eSgpKQotICAg
ICAgICAgICAgICAgIGZyYW1lLT5sb2FkZXIoKS0+bG9hZEZyYW1lUmVxdWVzdFdpdGhGb3JtQW5k
VmFsdWVzKHJlcXVlc3QsIGZhbHNlLCBmYWxzZSwgMCwgMCwgSGFzaE1hcDxTdHJpbmcsIFN0cmlu
Zz4oKSk7CisgICAgICAgICAgICAgICAgZnJhbWUtPmxvYWRlcigpLT5sb2FkRnJhbWVSZXF1ZXN0
KHJlcXVlc3QsIGZhbHNlLCBmYWxzZSwgMCwgMCk7CiAgICAgICAgICAgICBpZiAoUGFnZSogcGFn
ZSA9IGZyYW1lLT5wYWdlKCkpCiAgICAgICAgICAgICAgICAgcGFnZS0+Y2hyb21lKCktPmZvY3Vz
KCk7CiAgICAgICAgICAgICBjcmVhdGVkID0gZmFsc2U7CkBAIC00MDUsMTEgKzQxNiw2IEBAIGJv
b2wgRnJhbWVMb2FkZXI6OmNhbkhhbmRsZVJlcXVlc3QoY29uc3QKICAgICByZXR1cm4gbV9jbGll
bnQtPmNhbkhhbmRsZVJlcXVlc3QocmVxdWVzdCk7CiB9CiAKLXZvaWQgRnJhbWVMb2FkZXI6OmNo
YW5nZUxvY2F0aW9uKGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHJlZmVycmVyLCBi
b29sIGxvY2tIaXN0b3J5LCBib29sIGxvY2tCYWNrRm9yd2FyZExpc3QsIGJvb2wgdXNlckdlc3R1
cmUsIGJvb2wgcmVmcmVzaCkKLXsKLSAgICBjaGFuZ2VMb2NhdGlvbihjb21wbGV0ZVVSTCh1cmwp
LCByZWZlcnJlciwgbG9ja0hpc3RvcnksIGxvY2tCYWNrRm9yd2FyZExpc3QsIHVzZXJHZXN0dXJl
LCByZWZyZXNoKTsKLX0KLQogdm9pZCBGcmFtZUxvYWRlcjo6Y2hhbmdlTG9jYXRpb24oY29uc3Qg
S1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHJlZmVycmVyLCBib29sIGxvY2tIaXN0b3J5LCBib29s
IGxvY2tCYWNrRm9yd2FyZExpc3QsIGJvb2wgdXNlckdlc3R1cmUsIGJvb2wgcmVmcmVzaCkKIHsK
ICAgICBSZWZQdHI8RnJhbWU+IHByb3RlY3QobV9mcmFtZSk7CkBAIC00MjIsMjggKzQyOCwyMiBA
QCB2b2lkIEZyYW1lTG9hZGVyOjpjaGFuZ2VMb2NhdGlvbihjb25zdCBLCiAgICAgdXJsU2VsZWN0
ZWQocmVxdWVzdCwgIl9zZWxmIiwgMCwgbG9ja0hpc3RvcnksIGxvY2tCYWNrRm9yd2FyZExpc3Qs
IHVzZXJHZXN0dXJlKTsKIH0KIAotdm9pZCBGcmFtZUxvYWRlcjo6dXJsU2VsZWN0ZWQoY29uc3Qg
RnJhbWVMb2FkUmVxdWVzdCYgcmVxdWVzdCwgRXZlbnQqIGV2ZW50LCBib29sIGxvY2tIaXN0b3J5
LCBib29sIGxvY2tCYWNrRm9yd2FyZExpc3QpCi17Ci0gICAgRnJhbWVMb2FkUmVxdWVzdCBjb3B5
ID0gcmVxdWVzdDsKLSAgICBpZiAoY29weS5yZXNvdXJjZVJlcXVlc3QoKS5odHRwUmVmZXJyZXIo
KS5pc0VtcHR5KCkpCi0gICAgICAgIGNvcHkucmVzb3VyY2VSZXF1ZXN0KCkuc2V0SFRUUFJlZmVy
cmVyKG1fb3V0Z29pbmdSZWZlcnJlcik7Ci0gICAgYWRkSFRUUE9yaWdpbklmTmVlZGVkKGNvcHku
cmVzb3VyY2VSZXF1ZXN0KCksIG91dGdvaW5nT3JpZ2luKCkpOwotCi0gICAgbG9hZEZyYW1lUmVx
dWVzdFdpdGhGb3JtQW5kVmFsdWVzKGNvcHksIGxvY2tIaXN0b3J5LCBsb2NrQmFja0ZvcndhcmRM
aXN0LCBldmVudCwgMCwgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4oKSk7Ci19Ci0gICAgCi12b2lk
IEZyYW1lTG9hZGVyOjp1cmxTZWxlY3RlZChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qs
IGNvbnN0IFN0cmluZyYgX3RhcmdldCwgRXZlbnQqIHRyaWdnZXJpbmdFdmVudCwgYm9vbCBsb2Nr
SGlzdG9yeSwgYm9vbCBsb2NrQmFja0ZvcndhcmRMaXN0LCBib29sIHVzZXJHZXN0dXJlKQordm9p
ZCBGcmFtZUxvYWRlcjo6dXJsU2VsZWN0ZWQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0
LCBjb25zdCBTdHJpbmcmIHBhc3NlZFRhcmdldCwgUGFzc1JlZlB0cjxFdmVudD4gdHJpZ2dlcmlu
Z0V2ZW50LCBib29sIGxvY2tIaXN0b3J5LCBib29sIGxvY2tCYWNrRm9yd2FyZExpc3QsIGJvb2wg
dXNlckdlc3R1cmUpCiB7CiAgICAgaWYgKGV4ZWN1dGVJZkphdmFTY3JpcHRVUkwocmVxdWVzdC51
cmwoKSwgdXNlckdlc3R1cmUsIGZhbHNlKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU3RyaW5n
IHRhcmdldCA9IF90YXJnZXQ7CisgICAgU3RyaW5nIHRhcmdldCA9IHBhc3NlZFRhcmdldDsKICAg
ICBpZiAodGFyZ2V0LmlzRW1wdHkoKSkKICAgICAgICAgdGFyZ2V0ID0gbV9mcmFtZS0+ZG9jdW1l
bnQoKS0+YmFzZVRhcmdldCgpOwogCiAgICAgRnJhbWVMb2FkUmVxdWVzdCBmcmFtZVJlcXVlc3Qo
cmVxdWVzdCwgdGFyZ2V0KTsKIAotICAgIHVybFNlbGVjdGVkKGZyYW1lUmVxdWVzdCwgdHJpZ2dl
cmluZ0V2ZW50LCBsb2NrSGlzdG9yeSwgbG9ja0JhY2tGb3J3YXJkTGlzdCk7CisgICAgaWYgKGZy
YW1lUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5odHRwUmVmZXJyZXIoKS5pc0VtcHR5KCkpCisg
ICAgICAgIGZyYW1lUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRIVFRQUmVmZXJyZXIobV9v
dXRnb2luZ1JlZmVycmVyKTsKKyAgICBhZGRIVFRQT3JpZ2luSWZOZWVkZWQoZnJhbWVSZXF1ZXN0
LnJlc291cmNlUmVxdWVzdCgpLCBvdXRnb2luZ09yaWdpbigpKTsKKworICAgIGxvYWRGcmFtZVJl
cXVlc3QoZnJhbWVSZXF1ZXN0LCBsb2NrSGlzdG9yeSwgbG9ja0JhY2tGb3J3YXJkTGlzdCwgdHJp
Z2dlcmluZ0V2ZW50LCAwKTsKIH0KIAogYm9vbCBGcmFtZUxvYWRlcjo6cmVxdWVzdEZyYW1lKEhU
TUxGcmFtZU93bmVyRWxlbWVudCogb3duZXJFbGVtZW50LCBjb25zdCBTdHJpbmcmIHVybFN0cmlu
ZywgY29uc3QgQXRvbWljU3RyaW5nJiBmcmFtZU5hbWUpCkBAIC01MjEsNDMgKzUyMSwxNyBAQCBG
cmFtZSogRnJhbWVMb2FkZXI6OmxvYWRTdWJmcmFtZShIVE1MRnJhCiAgICAgcmV0dXJuIGZyYW1l
LmdldCgpOwogfQogCi12b2lkIEZyYW1lTG9hZGVyOjpzdWJtaXRGb3JtQWdhaW4oKQotewotICAg
IGlmIChtX2lzUnVubmluZ1NjcmlwdCkKLSAgICAgICAgcmV0dXJuOwotICAgIE93blB0cjxGb3Jt
U3VibWlzc2lvbj4gZm9ybShtX2RlZmVycmVkRm9ybVN1Ym1pc3Npb24ucmVsZWFzZSgpKTsKLSAg
ICBpZiAoIWZvcm0pCi0gICAgICAgIHJldHVybjsKLSAgICBzdWJtaXRGb3JtKGZvcm0tPmFjdGlv
biwgZm9ybS0+dXJsLCBmb3JtLT5mb3JtRGF0YSwgZm9ybS0+dGFyZ2V0LCBmb3JtLT5jb250ZW50
VHlwZSwgZm9ybS0+Ym91bmRhcnksIGZvcm0tPmV2ZW50LmdldCgpLCBmb3JtLT5sb2NrSGlzdG9y
eSwgZm9ybS0+bG9ja0JhY2tGb3J3YXJkTGlzdCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXI6OnN1
Ym1pdEZvcm0oY29uc3QgY2hhciogYWN0aW9uLCBjb25zdCBTdHJpbmcmIHVybCwgUGFzc1JlZlB0
cjxGb3JtRGF0YT4gZm9ybURhdGEsCi0gICAgY29uc3QgU3RyaW5nJiB0YXJnZXQsIGNvbnN0IFN0
cmluZyYgY29udGVudFR5cGUsIGNvbnN0IFN0cmluZyYgYm91bmRhcnksIEV2ZW50KiBldmVudCwg
Ym9vbCBsb2NrSGlzdG9yeSwgYm9vbCBsb2NrQmFja0ZvcndhcmRMaXN0KQordm9pZCBGcmFtZUxv
YWRlcjo6c3VibWl0Rm9ybShGb3JtU3VibWlzc2lvblR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiB1
cmwsIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGZvcm1EYXRhLAorICAgIGNvbnN0IFN0cmluZyYgdGFy
Z2V0LCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlLCBjb25zdCBTdHJpbmcmIGJvdW5kYXJ5LAor
ICAgIFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50LCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4gZm9ybVN0
YXRlLCBib29sIGxvY2tIaXN0b3J5LCBib29sIGxvY2tCYWNrRm9yd2FyZExpc3QpCiB7CiAgICAg
QVNTRVJUKGZvcm1EYXRhKTsKLSAgICAKLSAgICBpZiAoIW1fZnJhbWUtPnBhZ2UoKSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIAotICAgIEtVUkwgdSA9IGNvbXBsZXRlVVJMKHVybC5pc051bGwoKSA/
ICIiIDogdXJsKTsKLSAgICAvLyBGSVhNRTogRG8gd2UgcmVhbGx5IG5lZWQgdG8gc3BlY2lhbC1j
YXNlIGFuIGVtcHR5IFVSTD8KLSAgICAvLyBXb3VsZCBpdCBiZSBiZXR0ZXIgdG8ganVzdCBnbyBv
biB3aXRoIHRoZSBmb3JtIHN1Ym1pc3NvbiBhbmQgbGV0IHRoZSBJL08gZmFpbD8KLSAgICBpZiAo
dS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQoIXVybC5pc0VtcHR5KCkp
OwogCi0gICAgaWYgKHUucHJvdG9jb2xJcygiamF2YXNjcmlwdCIpKSB7Ci0gICAgICAgIG1faXNF
eGVjdXRpbmdKYXZhU2NyaXB0Rm9ybUFjdGlvbiA9IHRydWU7Ci0gICAgICAgIGV4ZWN1dGVJZkph
dmFTY3JpcHRVUkwodSwgZmFsc2UsIGZhbHNlKTsKLSAgICAgICAgbV9pc0V4ZWN1dGluZ0phdmFT
Y3JpcHRGb3JtQWN0aW9uID0gZmFsc2U7CisgICAgaWYgKCFtX2ZyYW1lLT5wYWdlKCkpCiAgICAg
ICAgIHJldHVybjsKLSAgICB9CiAKLSAgICBpZiAobV9pc1J1bm5pbmdTY3JpcHQpIHsKLSAgICAg
ICAgaWYgKG1fZGVmZXJyZWRGb3JtU3VibWlzc2lvbikKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgbV9kZWZlcnJlZEZvcm1TdWJtaXNzaW9uLnNldChuZXcgRm9ybVN1Ym1pc3Npb24oYWN0
aW9uLCB1cmwsIGZvcm1EYXRhLCB0YXJnZXQsIGNvbnRlbnRUeXBlLCBib3VuZGFyeSwgZXZlbnQs
IGxvY2tIaXN0b3J5LCBsb2NrQmFja0ZvcndhcmRMaXN0KSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9CisgICAgS1VSTCB1ID0gY29tcGxldGVVUkwodXJsKTsKIAogICAgIGZvcm1EYXRhLT5nZW5l
cmF0ZUZpbGVzKG1fZnJhbWUtPnBhZ2UoKS0+Y2hyb21lKCktPmNsaWVudCgpKTsKICAgICAKQEAg
LTU2OCwyMyArNTQyLDIyIEBAIHZvaWQgRnJhbWVMb2FkZXI6OnN1Ym1pdEZvcm0oY29uc3QgY2hh
cioKIAogICAgIGZyYW1lUmVxdWVzdC5zZXRGcmFtZU5hbWUodGFyZ2V0LmlzRW1wdHkoKSA/IG1f
ZnJhbWUtPmRvY3VtZW50KCktPmJhc2VUYXJnZXQoKSA6IHRhcmdldCk7CiAKLSAgICAvLyBIYW5k
bGUgbWFpbHRvOiBmb3JtcwotICAgIGJvb2wgaXNNYWlsdG9Gb3JtID0gZXF1YWxJZ25vcmluZ0Nh
c2UodS5wcm90b2NvbCgpLCAibWFpbHRvIik7Ci0gICAgaWYgKGlzTWFpbHRvRm9ybSAmJiBzdHJj
bXAoYWN0aW9uLCAiR0VUIikgIT0gMCkgewotICAgICAgICAvLyBBcHBlbmQgYm9keT0gZm9yIFBP
U1QgbWFpbHRvLCByZXBsYWNlIHRoZSB3aG9sZSBxdWVyeSBzdHJpbmcgZm9yIEdFVCBvbmUuCi0g
ICAgICAgIFN0cmluZyBib2R5ID0gZm9ybURhdGEtPmZsYXR0ZW5Ub1N0cmluZygpOwotICAgICAg
ICBTdHJpbmcgcXVlcnkgPSB1LnF1ZXJ5KCk7Ci0gICAgICAgIGlmICghcXVlcnkuaXNFbXB0eSgp
KQotICAgICAgICAgICAgcXVlcnkuYXBwZW5kKCcmJyk7Ci0gICAgICAgIHUuc2V0UXVlcnkocXVl
cnkgKyBib2R5KTsKLSAgICB9CisgICAgYm9vbCBpc01haWx0b0Zvcm0gPSB1LnByb3RvY29sSXMo
Im1haWx0byIpOwogCi0gICAgaWYgKHN0cmNtcChhY3Rpb24sICJHRVQiKSA9PSAwKSB7CisgICAg
aWYgKHR5cGUgPT0gRm9ybUdldCkKICAgICAgICAgdS5zZXRRdWVyeShmb3JtRGF0YS0+ZmxhdHRl
blRvU3RyaW5nKCkpOwotICAgIH0gZWxzZSB7CisgICAgZWxzZSB7CisgICAgICAgIGZyYW1lUmVx
dWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRIVFRQTWV0aG9kKCJQT1NUIik7CisKICAgICAgICAg
aWYgKCFpc01haWx0b0Zvcm0pCiAgICAgICAgICAgICBmcmFtZVJlcXVlc3QucmVzb3VyY2VSZXF1
ZXN0KCkuc2V0SFRUUEJvZHkoZm9ybURhdGEuZ2V0KCkpOwotICAgICAgICBmcmFtZVJlcXVlc3Qu
cmVzb3VyY2VSZXF1ZXN0KCkuc2V0SFRUUE1ldGhvZCgiUE9TVCIpOworICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIFN0cmluZyBxdWVyeSA9IHUucXVlcnkoKTsKKyAgICAgICAgICAgIGlmICgh
cXVlcnkuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIHF1ZXJ5LmFwcGVuZCgnJicpOworICAg
ICAgICAgICAgcXVlcnkuYXBwZW5kKGZvcm1EYXRhLT5mbGF0dGVuVG9TdHJpbmcoKSk7CisgICAg
ICAgICAgICB1LnNldFF1ZXJ5KHF1ZXJ5KTsKKyAgICAgICAgfQogCiAgICAgICAgIC8vIGNvbnN0
cnVjdCBzb21lIHVzZXIgaGVhZGVycyBpZiBuZWNlc3NhcnkKICAgICAgICAgaWYgKGNvbnRlbnRU
eXBlLmlzTnVsbCgpIHx8IGNvbnRlbnRUeXBlID09ICJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVy
bGVuY29kZWQiKQpAQCAtNTk2LDcgKzU2OSwyNiBAQCB2b2lkIEZyYW1lTG9hZGVyOjpzdWJtaXRG
b3JtKGNvbnN0IGNoYXIqCiAgICAgZnJhbWVSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldFVS
TCh1KTsKICAgICBhZGRIVFRQT3JpZ2luSWZOZWVkZWQoZnJhbWVSZXF1ZXN0LnJlc291cmNlUmVx
dWVzdCgpLCBvdXRnb2luZ09yaWdpbigpKTsKIAotICAgIHN1Ym1pdEZvcm0oZnJhbWVSZXF1ZXN0
LCBldmVudCwgbG9ja0hpc3RvcnksIGxvY2tCYWNrRm9yd2FyZExpc3QpOworICAgIC8vIEZJWE1F
OiBXZSdkIGxpa2UgdG8gcmVtb3ZlIHRoaXMgYWx0b2dldGhlciBhbmQgZml4IHRoZSBtdWx0aXBs
ZSBmb3JtIHN1Ym1pc3Npb24gaXNzdWUgYW5vdGhlciB3YXkuCisKKyAgICAvLyBXZSBkbyBub3Qg
d2FudCB0byBzdWJtaXQgbW9yZSB0aGFuIG9uZSBmb3JtIGZyb20gdGhlIHNhbWUgcGFnZSwgbm9y
IGRvIHdlIHdhbnQgdG8gc3VibWl0IGEgc2luZ2xlCisgICAgLy8gZm9ybSBtb3JlIHRoYW4gb25j
ZS4gVGhpcyBmbGFnIHByZXZlbnRzIHRoZXNlIGZyb20gaGFwcGVuaW5nOyBub3Qgc3VyZSBob3cg
b3RoZXIgYnJvd3NlcnMgcHJldmVudCB0aGlzLgorICAgIC8vIFRoZSBmbGFnIGlzIHJlc2V0IGlu
IGVhY2ggdGltZSB3ZSBzdGFydCBoYW5kbGUgYSBuZXcgbW91c2Ugb3Iga2V5IGRvd24gZXZlbnQs
IGFuZAorICAgIC8vIGFsc28gaW4gc2V0VmlldyBzaW5jZSB0aGlzIHBhcnQgbWF5IGdldCByZXVz
ZWQgZm9yIGEgcGFnZSBmcm9tIHRoZSBiYWNrL2ZvcndhcmQgY2FjaGUuCisgICAgLy8gVGhlIGZv
cm0gbXVsdGktc3VibWl0IGxvZ2ljIGhlcmUgaXMgb25seSBuZWVkZWQgd2hlbiB3ZSBhcmUgc3Vi
bWl0dGluZyBhIGZvcm0gdGhhdCBhZmZlY3RzIHRoaXMgZnJhbWUuCisKKyAgICAvLyBGSVhNRTog
RnJhbWUgdGFyZ2V0aW5nIGlzIG9ubHkgb25lIG9mIHRoZSB3YXlzIHRoZSBzdWJtaXNzaW9uIGNv
dWxkIGVuZCB1cCBkb2luZyBzb21ldGhpbmcgb3RoZXIKKyAgICAvLyB0aGFuIHJlcGxhY2luZyB0
aGlzIGZyYW1lJ3MgY29udGVudCwgc28gdGhpcyBjaGVjayBpcyBmbGF3ZWQuIE9uIHRoZSBvdGhl
ciBoYW5kLCB0aGUgY2hlY2sgaXMgaGFyZGx5CisgICAgLy8gbmVlZGVkIGFueSBtb3JlIG5vdyB0
aGF0IHdlIHJlc2V0IG1fc3VibWl0dGVkRm9ybVVSTCBvbiBlYWNoIG1vdXNlIG9yIGtleSBkb3du
IGV2ZW50LgorCisgICAgRnJhbWUqIHRhcmdldEZyYW1lID0gbV9mcmFtZS0+dHJlZSgpLT5maW5k
KGZyYW1lUmVxdWVzdC5mcmFtZU5hbWUoKSk7CisgICAgaWYgKG1fZnJhbWUtPnRyZWUoKS0+aXNE
ZXNjZW5kYW50T2YodGFyZ2V0RnJhbWUpKSB7CisgICAgICAgIGlmIChtX3N1Ym1pdHRlZEZvcm1V
UkwgPT0gZnJhbWVSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnVybCgpKQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBtX3N1Ym1pdHRlZEZvcm1VUkwgPSBmcmFtZVJlcXVlc3QucmVzb3Vy
Y2VSZXF1ZXN0KCkudXJsKCk7CisgICAgfQorCisgICAgbG9hZEZyYW1lUmVxdWVzdChmcmFtZVJl
cXVlc3QsIGxvY2tIaXN0b3J5LCBsb2NrQmFja0ZvcndhcmRMaXN0LCBldmVudCwgZm9ybVN0YXRl
KTsKIH0KIAogdm9pZCBGcmFtZUxvYWRlcjo6c3RvcExvYWRpbmcoYm9vbCBzZW5kVW5sb2FkKQpA
QCAtNzA3LDEwICs2OTksMTEgQEAgS1VSTCBGcmFtZUxvYWRlcjo6aWNvblVSTCgpCiAKIGJvb2wg
RnJhbWVMb2FkZXI6OmRpZE9wZW5VUkwoY29uc3QgS1VSTCYgdXJsKQogewotICAgIGlmIChtX3Nj
aGVkdWxlZFJlZGlyZWN0aW9uICYmIG1fc2NoZWR1bGVkUmVkaXJlY3Rpb24tPnR5cGUgPT0gU2No
ZWR1bGVkUmVkaXJlY3Rpb246OmxvY2F0aW9uQ2hhbmdlRHVyaW5nTG9hZCkKKyAgICBpZiAobV9z
Y2hlZHVsZWRSZWRpcmVjdGlvbiAmJiBtX3NjaGVkdWxlZFJlZGlyZWN0aW9uLT53YXNEdXJpbmdM
b2FkKSB7CiAgICAgICAgIC8vIEEgcmVkaXJlY3Qgd2FzIHNjaGVkdWxlZCBiZWZvcmUgdGhlIGRv
Y3VtZW50IHdhcyBjcmVhdGVkLgogICAgICAgICAvLyBUaGlzIGNhbiBoYXBwZW4gd2hlbiBvbmUg
ZnJhbWUgY2hhbmdlcyBhbm90aGVyIGZyYW1lJ3MgbG9jYXRpb24uCiAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CiAKICAgICBjYW5jZWxSZWRpcmVjdGlvbigpOwogICAgIG1fZnJhbWUtPmVk
aXRvcigpLT5jbGVhckxhc3RFZGl0Q29tbWFuZCgpOwpAQCAtNzk4LDcgKzc5MSw2IEBAIFNjcmlw
dFZhbHVlIEZyYW1lTG9hZGVyOjpleGVjdXRlU2NyaXB0KGMKIAogICAgIGlmICghd2FzUnVubmlu
Z1NjcmlwdCkgewogICAgICAgICBtX2lzUnVubmluZ1NjcmlwdCA9IGZhbHNlOwotICAgICAgICBz
dWJtaXRGb3JtQWdhaW4oKTsKICAgICAgICAgRG9jdW1lbnQ6OnVwZGF0ZURvY3VtZW50c1JlbmRl
cmluZygpOwogICAgIH0KIApAQCAtMTMzMCwxMiArMTMyMiw2IEBAIEtVUkwgRnJhbWVMb2FkZXI6
OmJhc2VVUkwoKSBjb25zdAogICAgIHJldHVybiBtX2ZyYW1lLT5kb2N1bWVudCgpLT5iYXNlVVJM
KCk7CiB9CiAKLVN0cmluZyBGcmFtZUxvYWRlcjo6YmFzZVRhcmdldCgpIGNvbnN0Ci17Ci0gICAg
QVNTRVJUKG1fZnJhbWUtPmRvY3VtZW50KCkpOwotICAgIHJldHVybiBtX2ZyYW1lLT5kb2N1bWVu
dCgpLT5iYXNlVGFyZ2V0KCk7Ci19Ci0KIEtVUkwgRnJhbWVMb2FkZXI6OmNvbXBsZXRlVVJMKGNv
bnN0IFN0cmluZyYgdXJsKQogewogICAgIEFTU0VSVChtX2ZyYW1lLT5kb2N1bWVudCgpKTsKQEAg
LTEzNzAsMTAgKzEzNTYsNTAgQEAgdm9pZCBGcmFtZUxvYWRlcjo6c2NoZWR1bGVMb2NhdGlvbkNo
YW5nZQogICAgIC8vIGZyYWdtZW50IHBhcnQsIHdlIGRvbid0IG5lZWQgdG8gc2NoZWR1bGUgdGhl
IGxvY2F0aW9uIGNoYW5nZS4KICAgICBLVVJMIHBhcnNlZFVSTCh1cmwpOwogICAgIGlmIChwYXJz
ZWRVUkwuaGFzUmVmKCkgJiYgZXF1YWxJZ25vcmluZ1JlZihtX1VSTCwgcGFyc2VkVVJMKSkgewot
ICAgICAgICBjaGFuZ2VMb2NhdGlvbih1cmwsIHJlZmVycmVyLCBsb2NrSGlzdG9yeSwgbG9ja0Jh
Y2tGb3J3YXJkTGlzdCwgd2FzVXNlckdlc3R1cmUpOworICAgICAgICBjaGFuZ2VMb2NhdGlvbihj
b21wbGV0ZVVSTCh1cmwpLCByZWZlcnJlciwgbG9ja0hpc3RvcnksIGxvY2tCYWNrRm9yd2FyZExp
c3QsIHdhc1VzZXJHZXN0dXJlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEhh
bmRsZSBhIGxvY2F0aW9uIGNoYW5nZSBvZiBhIHBhZ2Ugd2l0aCBubyBkb2N1bWVudCBhcyBhIHNw
ZWNpYWwgY2FzZS4KKyAgICAvLyBUaGlzIG1heSBoYXBwZW4gd2hlbiBhIGZyYW1lIGNoYW5nZXMg
dGhlIGxvY2F0aW9uIG9mIGFub3RoZXIgZnJhbWUuCisgICAgYm9vbCBkdXJpbmdMb2FkID0gIW1f
Y29tbWl0dGVkRmlyc3RSZWFsRG9jdW1lbnRMb2FkOworCisgICAgLy8gSWYgYSByZWRpcmVjdCB3
YXMgc2NoZWR1bGVkIGR1cmluZyBhIGxvYWQsIHRoZW4gc3RvcCB0aGUgY3VycmVudCBsb2FkLgor
ICAgIC8vIE90aGVyd2lzZSB3aGVuIHRoZSBjdXJyZW50IGxvYWQgdHJhbnNpdGlvbnMgZnJvbSBh
IHByb3Zpc2lvbmFsIHRvIGEgCisgICAgLy8gY29tbWl0dGVkIHN0YXRlLCBwZW5kaW5nIHJlZGly
ZWN0cyBtYXkgYmUgY2FuY2VsbGVkLiAKKyAgICBpZiAoZHVyaW5nTG9hZCkgeworICAgICAgICBp
ZiAobV9wcm92aXNpb25hbERvY3VtZW50TG9hZGVyKQorICAgICAgICAgICAgbV9wcm92aXNpb25h
bERvY3VtZW50TG9hZGVyLT5zdG9wTG9hZGluZygpOworICAgICAgICBzdG9wTG9hZGluZyh0cnVl
KTsgICAKKyAgICB9CisKKyAgICBzY2hlZHVsZVJlZGlyZWN0aW9uKG5ldyBTY2hlZHVsZWRSZWRp
cmVjdGlvbih1cmwsIHJlZmVycmVyLCBsb2NrSGlzdG9yeSwgbG9ja0JhY2tGb3J3YXJkTGlzdCwg
d2FzVXNlckdlc3R1cmUsIGZhbHNlLCBkdXJpbmdMb2FkKSk7Cit9CisKK3ZvaWQgRnJhbWVMb2Fk
ZXI6OnNjaGVkdWxlRm9ybVN1Ym1pc3Npb24oRm9ybVN1Ym1pc3Npb25UeXBlIHR5cGUsIGNvbnN0
IFN0cmluZyYgdXJsLCBQYXNzUmVmUHRyPEZvcm1EYXRhPiBmb3JtRGF0YSwKKyAgICBjb25zdCBT
dHJpbmcmIHRhcmdldCwgY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSwgY29uc3QgU3RyaW5nJiBi
b3VuZGFyeSwKKyAgICBQYXNzUmVmUHRyPEV2ZW50PiBldmVudCwgUGFzc1JlZlB0cjxGb3JtU3Rh
dGU+IGZvcm1TdGF0ZSwKKyAgICBib29sIGxvY2tIaXN0b3J5LCBib29sIGxvY2tCYWNrRm9yd2Fy
ZExpc3QpCit7CisgICAgaWYgKCFtX2ZyYW1lLT5wYWdlKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmICh1cmwuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAocHJvdG9j
b2xJcyh1cmwsICJqYXZhc2NyaXB0IikpIHsKKyAgICAgICAgbV9pc0V4ZWN1dGluZ0phdmFTY3Jp
cHRGb3JtQWN0aW9uID0gdHJ1ZTsKKyAgICAgICAgZXhlY3V0ZUlmSmF2YVNjcmlwdFVSTChjb21w
bGV0ZVVSTCh1cmwpLCBmYWxzZSwgZmFsc2UpOworICAgICAgICBtX2lzRXhlY3V0aW5nSmF2YVNj
cmlwdEZvcm1BY3Rpb24gPSBmYWxzZTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIC8v
IEZJWE1FOiBEbyB3ZSBuZWVkIHNwZWNpYWwgaGFuZGxpbmcgZm9yIGZvcm0gc3VibWlzc2lvbnMg
d2hlcmUgdGhlIFVSTCBpcyB0aGUgc2FtZQorICAgIC8vIGFzIHRoZSBjdXJyZW50IG9uZSBleGNl
cHQgZm9yIHRoZSBmcmFnbWVudCBwYXJ0PyBTZWUgc2NoZWR1bGVMb2NhdGlvbkNoYW5nZSBhYm92
ZS4KKworICAgIC8vIEZJWE1FOiBJdCdzIGJhZCB0byBoYXZlIHRoZSBmb2xsb3dpbmcgY29kZSBj
b3BpZWQgYW5kIHBhc3RlZCBmcm9tIHNjaGVkdWxlTG9jYXRpb25DaGFuZ2UgYWJvdmUuCisgICAg
Ly8gRG8gd2UgbmVlZCBpdD8gQ2FuIHdlIHNoYXJlIGl0PworCiAgICAgLy8gSGFuZGxlIGEgbG9j
YXRpb24gY2hhbmdlIG9mIGEgcGFnZSB3aXRoIG5vIGRvY3VtZW50IGFzIGEgc3BlY2lhbCBjYXNl
LgogICAgIC8vIFRoaXMgbWF5IGhhcHBlbiB3aGVuIGEgZnJhbWUgY2hhbmdlcyB0aGUgbG9jYXRp
b24gb2YgYW5vdGhlciBmcmFtZS4KICAgICBib29sIGR1cmluZ0xvYWQgPSAhbV9jb21taXR0ZWRG
aXJzdFJlYWxEb2N1bWVudExvYWQ7CkBAIC0xMzg3LDkgKzE0MTMsNyBAQCB2b2lkIEZyYW1lTG9h
ZGVyOjpzY2hlZHVsZUxvY2F0aW9uQ2hhbmdlCiAgICAgICAgIHN0b3BMb2FkaW5nKHRydWUpOyAg
IAogICAgIH0KIAotICAgIFNjaGVkdWxlZFJlZGlyZWN0aW9uOjpUeXBlIHR5cGUgPSBkdXJpbmdM
b2FkCi0gICAgICAgID8gU2NoZWR1bGVkUmVkaXJlY3Rpb246OmxvY2F0aW9uQ2hhbmdlRHVyaW5n
TG9hZCA6IFNjaGVkdWxlZFJlZGlyZWN0aW9uOjpsb2NhdGlvbkNoYW5nZTsKLSAgICBzY2hlZHVs
ZVJlZGlyZWN0aW9uKG5ldyBTY2hlZHVsZWRSZWRpcmVjdGlvbih0eXBlLCB1cmwsIHJlZmVycmVy
LCBsb2NrSGlzdG9yeSwgbG9ja0JhY2tGb3J3YXJkTGlzdCwgd2FzVXNlckdlc3R1cmUsIGZhbHNl
KSk7CisgICAgc2NoZWR1bGVSZWRpcmVjdGlvbihuZXcgU2NoZWR1bGVkUmVkaXJlY3Rpb24odHlw
ZSwgdXJsLCByZWZlcnJlcigpLCBmb3JtRGF0YSwgdGFyZ2V0LCBjb250ZW50VHlwZSwgYm91bmRh
cnksIGV2ZW50LCBmb3JtU3RhdGUsIGxvY2tIaXN0b3J5LCBsb2NrQmFja0ZvcndhcmRMaXN0LCBk
dXJpbmdMb2FkKSk7CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXI6OnNjaGVkdWxlUmVmcmVzaChib29s
IHdhc1VzZXJHZXN0dXJlKQpAQCAtMTQwMCw4ICsxNDI0LDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6
c2NoZWR1bGVSZWZyZXNoKGJvb2wgdwogICAgIGlmIChtX1VSTC5pc0VtcHR5KCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIFNjaGVkdWxlZFJlZGlyZWN0aW9uOjpUeXBlIHR5cGUgPSBTY2hlZHVs
ZWRSZWRpcmVjdGlvbjo6bG9jYXRpb25DaGFuZ2U7Ci0gICAgc2NoZWR1bGVSZWRpcmVjdGlvbihu
ZXcgU2NoZWR1bGVkUmVkaXJlY3Rpb24odHlwZSwgbV9VUkwuc3RyaW5nKCksIG1fb3V0Z29pbmdS
ZWZlcnJlciwgdHJ1ZSwgdHJ1ZSwgd2FzVXNlckdlc3R1cmUsIHRydWUpKTsKKyAgICBzY2hlZHVs
ZVJlZGlyZWN0aW9uKG5ldyBTY2hlZHVsZWRSZWRpcmVjdGlvbihtX1VSTC5zdHJpbmcoKSwgbV9v
dXRnb2luZ1JlZmVycmVyLCB0cnVlLCB0cnVlLCB3YXNVc2VyR2VzdHVyZSwgdHJ1ZSwgZmFsc2Up
KTsKIH0KIAogYm9vbCBGcmFtZUxvYWRlcjo6aXNMb2NhdGlvbkNoYW5nZShjb25zdCBTY2hlZHVs
ZWRSZWRpcmVjdGlvbiYgcmVkaXJlY3Rpb24pCkBAIC0xNDExLDcgKzE0MzQsNyBAQCBib29sIEZy
YW1lTG9hZGVyOjppc0xvY2F0aW9uQ2hhbmdlKGNvbnN0CiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIGNhc2UgU2NoZWR1bGVkUmVkaXJlY3Rpb246Omhpc3RvcnlOYXZpZ2F0aW9u
OgogICAgICAgICBjYXNlIFNjaGVkdWxlZFJlZGlyZWN0aW9uOjpsb2NhdGlvbkNoYW5nZToKLSAg
ICAgICAgY2FzZSBTY2hlZHVsZWRSZWRpcmVjdGlvbjo6bG9jYXRpb25DaGFuZ2VEdXJpbmdMb2Fk
OgorICAgICAgICBjYXNlIFNjaGVkdWxlZFJlZGlyZWN0aW9uOjpmb3JtU3VibWlzc2lvbjoKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
QEAgLTE0ODMsOCArMTUwNiw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6OnJlZGlyZWN0aW9uVGltZXJG
aXJlZCgKICAgICBzd2l0Y2ggKHJlZGlyZWN0aW9uLT50eXBlKSB7CiAgICAgICAgIGNhc2UgU2No
ZWR1bGVkUmVkaXJlY3Rpb246OnJlZGlyZWN0aW9uOgogICAgICAgICBjYXNlIFNjaGVkdWxlZFJl
ZGlyZWN0aW9uOjpsb2NhdGlvbkNoYW5nZToKLSAgICAgICAgY2FzZSBTY2hlZHVsZWRSZWRpcmVj
dGlvbjo6bG9jYXRpb25DaGFuZ2VEdXJpbmdMb2FkOgotICAgICAgICAgICAgY2hhbmdlTG9jYXRp
b24ocmVkaXJlY3Rpb24tPnVybCwgcmVkaXJlY3Rpb24tPnJlZmVycmVyLAorICAgICAgICAgICAg
Y2hhbmdlTG9jYXRpb24oY29tcGxldGVVUkwocmVkaXJlY3Rpb24tPnVybCksIHJlZGlyZWN0aW9u
LT5yZWZlcnJlciwKICAgICAgICAgICAgICAgICByZWRpcmVjdGlvbi0+bG9ja0hpc3RvcnksIHJl
ZGlyZWN0aW9uLT5sb2NrQmFja0ZvcndhcmRMaXN0LCByZWRpcmVjdGlvbi0+d2FzVXNlckdlc3R1
cmUsIHJlZGlyZWN0aW9uLT53YXNSZWZyZXNoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgY2FzZSBTY2hlZHVsZWRSZWRpcmVjdGlvbjo6aGlzdG9yeU5hdmlnYXRpb246CkBAIC0xNDk3
LDYgKzE1MTksMTMgQEAgdm9pZCBGcmFtZUxvYWRlcjo6cmVkaXJlY3Rpb25UaW1lckZpcmVkKAog
ICAgICAgICAgICAgLy8gaW4gYm90aCBJRSBhbmQgTlMgKGJ1dCBub3QgaW4gTW96aWxsYSkuIFdl
IGNhbid0IGVhc2lseSBkbyB0aGF0LgogICAgICAgICAgICAgZ29CYWNrT3JGb3J3YXJkKHJlZGly
ZWN0aW9uLT5oaXN0b3J5U3RlcHMpOwogICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNl
IFNjaGVkdWxlZFJlZGlyZWN0aW9uOjpmb3JtU3VibWlzc2lvbjoKKyAgICAgICAgICAgIC8vIEZJ
WE1FOiBSZWZlcnJlciBpcyBub3Qgc2VudCBoZXJlLgorICAgICAgICAgICAgc3VibWl0Rm9ybShy
ZWRpcmVjdGlvbi0+Zm9ybVN1Ym1pc3Npb25UeXBlLCByZWRpcmVjdGlvbi0+dXJsLCByZWRpcmVj
dGlvbi0+Zm9ybURhdGEsCisgICAgICAgICAgICAgICAgcmVkaXJlY3Rpb24tPnRhcmdldCwgcmVk
aXJlY3Rpb24tPmNvbnRlbnRUeXBlLCByZWRpcmVjdGlvbi0+Ym91bmRhcnksCisgICAgICAgICAg
ICAgICAgcmVkaXJlY3Rpb24tPmV2ZW50LCByZWRpcmVjdGlvbi0+Zm9ybVN0YXRlLAorICAgICAg
ICAgICAgICAgIHJlZGlyZWN0aW9uLT5sb2NrSGlzdG9yeSwgcmVkaXJlY3Rpb24tPmxvY2tCYWNr
Rm9yd2FyZExpc3QpOworICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwpAQCAtMTUyOCw3ICsxNTU3LDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6bG9h
ZFVSTEludG9DaGlsZEZyYW1lKAogICAgICAgICAgICAgLy8gdGhpcyBpcyBuZWVkZWQgaXMgUmFk
YXIgMzIxMzU1Ni4KICAgICAgICAgICAgIHdvcmtpbmdVUkwgPSBLVVJMKGNoaWxkSXRlbS0+b3Jp
Z2luYWxVUkxTdHJpbmcoKSk7CiAgICAgICAgICAgICBjaGlsZExvYWRUeXBlID0gbG9hZFR5cGU7
Ci0gICAgICAgICAgICBjaGlsZEZyYW1lLT5sb2FkZXIoKS0+c2V0UHJvdmlzaW9uYWxIaXN0b3J5
SXRlbShjaGlsZEl0ZW0pOworICAgICAgICAgICAgY2hpbGRGcmFtZS0+bG9hZGVyKCktPm1fcHJv
dmlzaW9uYWxIaXN0b3J5SXRlbSA9IGNoaWxkSXRlbTsKICAgICAgICAgfQogICAgIH0KIApAQCAt
MTcyNywyMiArMTc1Niw2IEBAIGJvb2wgRnJhbWVMb2FkZXI6OmxvYWRQbHVnaW4oUmVuZGVyUGFy
dCoKICAgICByZXR1cm4gd2lkZ2V0ICE9IDA7CiB9CiAKLXZvaWQgRnJhbWVMb2FkZXI6OmNsZWFy
UmVjb3JkZWRGb3JtVmFsdWVzKCkKLXsKLSAgICBtX2Zvcm1BYm91dFRvQmVTdWJtaXR0ZWQgPSAw
OwotICAgIG1fZm9ybVZhbHVlc0Fib3V0VG9CZVN1Ym1pdHRlZC5jbGVhcigpOwotfQotCi12b2lk
IEZyYW1lTG9hZGVyOjpzZXRGb3JtQWJvdXRUb0JlU3VibWl0dGVkKFBhc3NSZWZQdHI8SFRNTEZv
cm1FbGVtZW50PiBlbGVtZW50KQotewotICAgIG1fZm9ybUFib3V0VG9CZVN1Ym1pdHRlZCA9IGVs
ZW1lbnQ7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXI6OnJlY29yZEZvcm1WYWx1ZShjb25zdCBTdHJp
bmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgbV9mb3JtVmFsdWVzQWJvdXRU
b0JlU3VibWl0dGVkLnNldChuYW1lLCB2YWx1ZSk7Ci19Ci0KIHZvaWQgRnJhbWVMb2FkZXI6OnBh
cmVudENvbXBsZXRlZCgpCiB7CiAgICAgaWYgKG1fc2NoZWR1bGVkUmVkaXJlY3Rpb24gJiYgIW1f
cmVkaXJlY3Rpb25UaW1lci5pc0FjdGl2ZSgpKQpAQCAtMTgyMSwxMiArMTgzNCw2IEBAIGJvb2wg
RnJhbWVMb2FkZXI6OnVzZXJHZXN0dXJlSGludCgpCiAgICAgcmV0dXJuIGZyYW1lLT5zY3JpcHQo
KS0+cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCk7IC8vIEZJWE1FOiBVc2UgcGFnZUlzUHJvY2Vzc2lu
Z1VzZXJHZXN0dXJlLgogfQogCi12b2lkIEZyYW1lTG9hZGVyOjpkaWROb3RPcGVuVVJMKGNvbnN0
IEtVUkwmIHVybCkKLXsKLSAgICBpZiAobV9zdWJtaXR0ZWRGb3JtVVJMID09IHVybCkKLSAgICAg
ICAgbV9zdWJtaXR0ZWRGb3JtVVJMID0gS1VSTCgpOwotfQotCiB2b2lkIEZyYW1lTG9hZGVyOjpy
ZXNldE11bHRpcGxlRm9ybVN1Ym1pc3Npb25Qcm90ZWN0aW9uKCkKIHsKICAgICBtX3N1Ym1pdHRl
ZEZvcm1VUkwgPSBLVVJMKCk7CkBAIC0xODY2LDcgKzE4NzMsNyBAQCBib29sIEZyYW1lTG9hZGVy
OjpjYW5DYWNoZVBhZ2VDb250YWluaW5nCiAjZW5kaWYKICAgICAgICAgJiYgIW1fZnJhbWUtPmRv
Y3VtZW50KCktPnVzaW5nR2VvbG9jYXRpb24oKQogICAgICAgICAmJiBtX2N1cnJlbnRIaXN0b3J5
SXRlbQotICAgICAgICAmJiAhaXNRdWlja1JlZGlyZWN0Q29taW5nKCkKKyAgICAgICAgJiYgIW1f
cXVpY2tSZWRpcmVjdENvbWluZwogICAgICAgICAmJiAhbV9kb2N1bWVudExvYWRlci0+aXNMb2Fk
aW5nSW5BUElTZW5zZSgpCiAgICAgICAgICYmICFtX2RvY3VtZW50TG9hZGVyLT5pc1N0b3BwaW5n
KCkKICAgICAgICAgJiYgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+Y2FuU3VzcGVuZEFjdGl2ZURPTU9i
amVjdHMoKQpAQCAtMjAxMiw3ICsyMDE5LDcgQEAgYm9vbCBGcmFtZUxvYWRlcjo6bG9nQ2FuQ2Fj
aGVGcmFtZURlY2lzaQogICAgICAgICAgICAgeyBQQ0xPRygiICAgLUZyYW1lIHVzZXMgR2VvbG9j
YXRpb24iKTsgY2Fubm90Q2FjaGUgPSB0cnVlOyB9CiAgICAgICAgIGlmICghbV9jdXJyZW50SGlz
dG9yeUl0ZW0pCiAgICAgICAgICAgICB7IFBDTE9HKCIgICAtTm8gY3VycmVudCBoaXN0b3J5IGl0
ZW0iKTsgY2Fubm90Q2FjaGUgPSB0cnVlOyB9Ci0gICAgICAgIGlmIChpc1F1aWNrUmVkaXJlY3RD
b21pbmcoKSkKKyAgICAgICAgaWYgKG1fcXVpY2tSZWRpcmVjdENvbWluZykKICAgICAgICAgICAg
IHsgUENMT0coIiAgIC1RdWljayByZWRpcmVjdCBpcyBjb21pbmciKTsgY2Fubm90Q2FjaGUgPSB0
cnVlOyB9CiAgICAgICAgIGlmIChtX2RvY3VtZW50TG9hZGVyLT5pc0xvYWRpbmdJbkFQSVNlbnNl
KCkpCiAgICAgICAgICAgICB7IFBDTE9HKCIgICAtRG9jdW1lbnRMb2FkZXIgaXMgc3RpbGwgbG9h
ZGluZyBpbiBBUEkgc2Vuc2UiKTsgY2Fubm90Q2FjaGUgPSB0cnVlOyB9CkBAIC0yMTAwLDE1ICsy
MTA3LDE2IEBAIHZvaWQgRnJhbWVMb2FkZXI6OnN0YXJ0UmVkaXJlY3Rpb25UaW1lcigKICAgICBt
X3JlZGlyZWN0aW9uVGltZXIuc3RhcnRPbmVTaG90KG1fc2NoZWR1bGVkUmVkaXJlY3Rpb24tPmRl
bGF5KTsKIAogICAgIHN3aXRjaCAobV9zY2hlZHVsZWRSZWRpcmVjdGlvbi0+dHlwZSkgewotICAg
ICAgICBjYXNlIFNjaGVkdWxlZFJlZGlyZWN0aW9uOjpyZWRpcmVjdGlvbjoKICAgICAgICAgY2Fz
ZSBTY2hlZHVsZWRSZWRpcmVjdGlvbjo6bG9jYXRpb25DaGFuZ2U6Ci0gICAgICAgIGNhc2UgU2No
ZWR1bGVkUmVkaXJlY3Rpb246OmxvY2F0aW9uQ2hhbmdlRHVyaW5nTG9hZDoKKyAgICAgICAgY2Fz
ZSBTY2hlZHVsZWRSZWRpcmVjdGlvbjo6cmVkaXJlY3Rpb246CiAgICAgICAgICAgICBjbGllbnRS
ZWRpcmVjdGVkKEtVUkwobV9zY2hlZHVsZWRSZWRpcmVjdGlvbi0+dXJsKSwKICAgICAgICAgICAg
ICAgICBtX3NjaGVkdWxlZFJlZGlyZWN0aW9uLT5kZWxheSwKICAgICAgICAgICAgICAgICBjdXJy
ZW50VGltZSgpICsgbV9yZWRpcmVjdGlvblRpbWVyLm5leHRGaXJlSW50ZXJ2YWwoKSwKICAgICAg
ICAgICAgICAgICBtX3NjaGVkdWxlZFJlZGlyZWN0aW9uLT5sb2NrQmFja0ZvcndhcmRMaXN0LAog
ICAgICAgICAgICAgICAgIG1faXNFeGVjdXRpbmdKYXZhU2NyaXB0Rm9ybUFjdGlvbik7CiAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgU2NoZWR1bGVkUmVkaXJlY3Rpb246OmZvcm1T
dWJtaXNzaW9uOgorICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBjYXNlIFNjaGVkdWxlZFJl
ZGlyZWN0aW9uOjpoaXN0b3J5TmF2aWdhdGlvbjoKICAgICAgICAgICAgIC8vIERvbid0IHJlcG9y
dCBoaXN0b3J5IG5hdmlnYXRpb25zLgogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjEyNSwxMSAr
MjEzMywxMiBAQCB2b2lkIEZyYW1lTG9hZGVyOjpzdG9wUmVkaXJlY3Rpb25UaW1lcigpCiAKICAg
ICBpZiAobV9zY2hlZHVsZWRSZWRpcmVjdGlvbikgewogICAgICAgICBzd2l0Y2ggKG1fc2NoZWR1
bGVkUmVkaXJlY3Rpb24tPnR5cGUpIHsKLSAgICAgICAgICAgIGNhc2UgU2NoZWR1bGVkUmVkaXJl
Y3Rpb246OnJlZGlyZWN0aW9uOgogICAgICAgICAgICAgY2FzZSBTY2hlZHVsZWRSZWRpcmVjdGlv
bjo6bG9jYXRpb25DaGFuZ2U6Ci0gICAgICAgICAgICBjYXNlIFNjaGVkdWxlZFJlZGlyZWN0aW9u
Ojpsb2NhdGlvbkNoYW5nZUR1cmluZ0xvYWQ6CisgICAgICAgICAgICBjYXNlIFNjaGVkdWxlZFJl
ZGlyZWN0aW9uOjpyZWRpcmVjdGlvbjoKICAgICAgICAgICAgICAgICBjbGllbnRSZWRpcmVjdENh
bmNlbGxlZE9yRmluaXNoZWQobV9jYW5jZWxsaW5nV2l0aExvYWRJblByb2dyZXNzKTsKICAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBjYXNlIFNjaGVkdWxlZFJlZGlyZWN0aW9u
Ojpmb3JtU3VibWlzc2lvbjoKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICBj
YXNlIFNjaGVkdWxlZFJlZGlyZWN0aW9uOjpoaXN0b3J5TmF2aWdhdGlvbjoKICAgICAgICAgICAg
ICAgICAvLyBEb24ndCByZXBvcnQgaGlzdG9yeSBuYXZpZ2F0aW9ucy4KICAgICAgICAgICAgICAg
ICByZXR1cm47CkBAIC0yMTQ1LDcgKzIxNTQsNiBAQCB2b2lkIEZyYW1lTG9hZGVyOjpjb21wbGV0
ZWQoKQogICAgICAgICBjaGlsZC0+bG9hZGVyKCktPnBhcmVudENvbXBsZXRlZCgpOwogICAgIGlm
IChGcmFtZSogcGFyZW50ID0gbV9mcmFtZS0+dHJlZSgpLT5wYXJlbnQoKSkKICAgICAgICAgcGFy
ZW50LT5sb2FkZXIoKS0+Y2hlY2tDb21wbGV0ZWQoKTsKLSAgICBzdWJtaXRGb3JtQWdhaW4oKTsK
IH0KIAogdm9pZCBGcmFtZUxvYWRlcjo6c3RhcnRlZCgpCkBAIC0yMTc5LDEzICsyMTg3LDEwIEBA
IHZvaWQgRnJhbWVMb2FkZXI6OnNldHVwRm9yUmVwbGFjZUJ5TUlNRVQKICAgICBhY3RpdmVEb2N1
bWVudExvYWRlcigpLT5zZXR1cEZvclJlcGxhY2VCeU1JTUVUeXBlKG5ld01JTUVUeXBlKTsKIH0K
IAotdm9pZCBGcmFtZUxvYWRlcjo6bG9hZEZyYW1lUmVxdWVzdFdpdGhGb3JtQW5kVmFsdWVzKGNv
bnN0IEZyYW1lTG9hZFJlcXVlc3QmIHJlcXVlc3QsIGJvb2wgbG9ja0hpc3RvcnksIGJvb2wgbG9j
a0JhY2tGb3J3YXJkTGlzdCwgRXZlbnQqIGV2ZW50LAotICAgIEhUTUxGb3JtRWxlbWVudCogc3Vi
bWl0Rm9ybSwgY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIGZvcm1WYWx1ZXMpCi17Ci0g
ICAgUmVmUHRyPEZvcm1TdGF0ZT4gZm9ybVN0YXRlOwotICAgIGlmIChzdWJtaXRGb3JtKQotICAg
ICAgICBmb3JtU3RhdGUgPSBGb3JtU3RhdGU6OmNyZWF0ZShzdWJtaXRGb3JtLCBmb3JtVmFsdWVz
LCBtX2ZyYW1lKTsKLSAgICAKKy8vIEZJWE1FOiBBbGwgdGhlc2Ugb3RoZXIgYXJndW1lbnRzIHNo
b3VsZCBiZSBtYWRlIG1lbWJlcnMgb2YgRnJhbWVMb2FkUmVxdWVzdC4KK3ZvaWQgRnJhbWVMb2Fk
ZXI6OmxvYWRGcmFtZVJlcXVlc3QoY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYgcmVxdWVzdCwgYm9v
bCBsb2NrSGlzdG9yeSwgYm9vbCBsb2NrQmFja0ZvcndhcmRMaXN0LAorICAgIFBhc3NSZWZQdHI8
RXZlbnQ+IGV2ZW50LCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4gZm9ybVN0YXRlKQoreyAgICAKICAg
ICBLVVJMIHVybCA9IHJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkudXJsKCk7CiAKICAgICBTdHJp
bmcgcmVmZXJyZXI7CkBAIC0yMjE1LDE4ICsyMjIwLDE5IEBAIHZvaWQgRnJhbWVMb2FkZXI6Omxv
YWRGcmFtZVJlcXVlc3RXaXRoRm8KICAgICAgICAgbG9hZFR5cGUgPSBGcmFtZUxvYWRUeXBlU3Rh
bmRhcmQ7CiAKICAgICBpZiAocmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5odHRwTWV0aG9kKCkg
PT0gIlBPU1QiKQotICAgICAgICBsb2FkUG9zdFJlcXVlc3QocmVxdWVzdC5yZXNvdXJjZVJlcXVl
c3QoKSwgcmVmZXJyZXIsIHJlcXVlc3QuZnJhbWVOYW1lKCksIGxvY2tIaXN0b3J5LCBsb2FkVHlw
ZSwgZXZlbnQsIGZvcm1TdGF0ZS5yZWxlYXNlKCkpOworICAgICAgICBsb2FkUG9zdFJlcXVlc3Qo
cmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKSwgcmVmZXJyZXIsIHJlcXVlc3QuZnJhbWVOYW1lKCks
IGxvY2tIaXN0b3J5LCBsb2FkVHlwZSwgZXZlbnQsIGZvcm1TdGF0ZSk7CiAgICAgZWxzZQotICAg
ICAgICBsb2FkVVJMKHJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkudXJsKCksIHJlZmVycmVyLCBy
ZXF1ZXN0LmZyYW1lTmFtZSgpLCBsb2NrSGlzdG9yeSwgbG9hZFR5cGUsIGV2ZW50LCBmb3JtU3Rh
dGUucmVsZWFzZSgpKTsKKyAgICAgICAgbG9hZFVSTChyZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgp
LnVybCgpLCByZWZlcnJlciwgcmVxdWVzdC5mcmFtZU5hbWUoKSwgbG9ja0hpc3RvcnksIGxvYWRU
eXBlLCBldmVudCwgZm9ybVN0YXRlKTsKIAogICAgIEZyYW1lKiB0YXJnZXRGcmFtZSA9IGZpbmRG
cmFtZUZvck5hdmlnYXRpb24ocmVxdWVzdC5mcmFtZU5hbWUoKSk7Ci0gICAgaWYgKHRhcmdldEZy
YW1lICYmIHRhcmdldEZyYW1lICE9IG1fZnJhbWUpCisgICAgaWYgKHRhcmdldEZyYW1lICYmIHRh
cmdldEZyYW1lICE9IG1fZnJhbWUpIHsKICAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSB0YXJnZXRG
cmFtZS0+cGFnZSgpKQogICAgICAgICAgICAgcGFnZS0+Y2hyb21lKCktPmZvY3VzKCk7CisgICAg
fQogfQogCiB2b2lkIEZyYW1lTG9hZGVyOjpsb2FkVVJMKGNvbnN0IEtVUkwmIG5ld1VSTCwgY29u
c3QgU3RyaW5nJiByZWZlcnJlciwgY29uc3QgU3RyaW5nJiBmcmFtZU5hbWUsIGJvb2wgbG9ja0hp
c3RvcnksIEZyYW1lTG9hZFR5cGUgbmV3TG9hZFR5cGUsCi0gICAgRXZlbnQqIGV2ZW50LCBQYXNz
UmVmUHRyPEZvcm1TdGF0ZT4gcHJwRm9ybVN0YXRlKQorICAgIFBhc3NSZWZQdHI8RXZlbnQ+IGV2
ZW50LCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4gcHJwRm9ybVN0YXRlKQogewogICAgIFJlZlB0cjxG
b3JtU3RhdGU+IGZvcm1TdGF0ZSA9IHBycEZvcm1TdGF0ZTsKICAgICBib29sIGlzRm9ybVN1Ym1p
c3Npb24gPSBmb3JtU3RhdGU7CkBAIC0zMTc3LDcgKzMxODMsMjEgQEAgdm9pZCBGcmFtZUxvYWRl
cjo6ZmluaXNoZWRMb2FkaW5nRG9jdW1lbgogICAgIAogICAgIEFyY2hpdmVSZXNvdXJjZSogbWFp
blJlc291cmNlID0gYXJjaGl2ZS0+bWFpblJlc291cmNlKCk7CiAgICAgbG9hZGVyLT5zZXRQYXJz
ZWRBcmNoaXZlRGF0YShtYWluUmVzb3VyY2UtPmRhdGEoKSk7Ci0gICAgY29udGludWVMb2FkV2l0
aERhdGEobWFpblJlc291cmNlLT5kYXRhKCksIG1haW5SZXNvdXJjZS0+bWltZVR5cGUoKSwgbWFp
blJlc291cmNlLT50ZXh0RW5jb2RpbmcoKSwgbWFpblJlc291cmNlLT51cmwoKSk7CisKKyAgICBt
X3Jlc3BvbnNlTUlNRVR5cGUgPSBtYWluUmVzb3VyY2UtPm1pbWVUeXBlKCk7CisgICAgZGlkT3Bl
blVSTChtYWluUmVzb3VyY2UtPnVybCgpKTsKKworICAgIFN0cmluZyBlbmNvZGluZzsKKyAgICBp
ZiAobV9mcmFtZSkKKyAgICAgICAgZW5jb2RpbmcgPSBkb2N1bWVudExvYWRlcigpLT5vdmVycmlk
ZUVuY29kaW5nKCk7CisgICAgYm9vbCB1c2VyQ2hvc2VuID0gIWVuY29kaW5nLmlzTnVsbCgpOwor
ICAgIGlmIChlbmNvZGluZy5pc051bGwoKSkKKyAgICAgICAgZW5jb2RpbmcgPSBtYWluUmVzb3Vy
Y2UtPnRleHRFbmNvZGluZygpOworICAgIHNldEVuY29kaW5nKGVuY29kaW5nLCB1c2VyQ2hvc2Vu
KTsKKworICAgIEFTU0VSVChtX2ZyYW1lLT5kb2N1bWVudCgpKTsKKworICAgIGFkZERhdGEobWFp
blJlc291cmNlLT5kYXRhKCktPmRhdGEoKSwgbWFpblJlc291cmNlLT5kYXRhKCktPnNpemUoKSk7
CiB9CiAKIGJvb2wgRnJhbWVMb2FkZXI6OmlzUmVwbGFjaW5nKCkgY29uc3QKQEAgLTM0MTksMTEg
KzM0MzksNiBAQCBib29sIEZyYW1lTG9hZGVyOjpmaXJzdExheW91dERvbmUoKSBjb25zCiAgICAg
cmV0dXJuIG1fZmlyc3RMYXlvdXREb25lOwogfQogCi1ib29sIEZyYW1lTG9hZGVyOjppc1F1aWNr
UmVkaXJlY3RDb21pbmcoKSBjb25zdAotewotICAgIHJldHVybiBtX3F1aWNrUmVkaXJlY3RDb21p
bmc7Ci19Ci0KIHZvaWQgRnJhbWVMb2FkZXI6OmRldGFjaENoaWxkcmVuKCkKIHsKICAgICAvLyBG
SVhNRTogSXMgaXQgcmVhbGx5IG5lY2Vzc2FyeSB0byBkbyB0aGlzIGluIHJldmVyc2Ugb3JkZXI/
CkBAIC0zNDgyLDMwICszNDk3LDYgQEAgaW50IEZyYW1lTG9hZGVyOjpudW1QZW5kaW5nT3JMb2Fk
aW5nUmVxdQogICAgIHJldHVybiBjb3VudDsKIH0KIAotdm9pZCBGcmFtZUxvYWRlcjo6c3VibWl0
Rm9ybShjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiByZXF1ZXN0LCBFdmVudCogZXZlbnQsIGJvb2wg
bG9ja0hpc3RvcnksIGJvb2wgbG9ja0JhY2tGb3J3YXJkTGlzdCkKLXsKLSAgICAvLyBGSVhNRTog
V2UnZCBsaWtlIHRvIHJlbW92ZSB0aGlzIGFsdG9nZXRoZXIgYW5kIGZpeCB0aGUgbXVsdGlwbGUg
Zm9ybSBzdWJtaXNzaW9uIGlzc3VlIGFub3RoZXIgd2F5LgotICAgIC8vIFdlIGRvIG5vdCB3YW50
IHRvIHN1Ym1pdCBtb3JlIHRoYW4gb25lIGZvcm0gZnJvbSB0aGUgc2FtZSBwYWdlLAotICAgIC8v
IG5vciBkbyB3ZSB3YW50IHRvIHN1Ym1pdCBhIHNpbmdsZSBmb3JtIG1vcmUgdGhhbiBvbmNlLgot
ICAgIC8vIFRoaXMgZmxhZyBwcmV2ZW50cyB0aGVzZSBmcm9tIGhhcHBlbmluZzsgbm90IHN1cmUg
aG93IG90aGVyIGJyb3dzZXJzIHByZXZlbnQgdGhpcy4KLSAgICAvLyBUaGUgZmxhZyBpcyByZXNl
dCBpbiBlYWNoIHRpbWUgd2Ugc3RhcnQgaGFuZGxlIGEgbmV3IG1vdXNlIG9yIGtleSBkb3duIGV2
ZW50LCBhbmQKLSAgICAvLyBhbHNvIGluIHNldFZpZXcgc2luY2UgdGhpcyBwYXJ0IG1heSBnZXQg
cmV1c2VkIGZvciBhIHBhZ2UgZnJvbSB0aGUgYmFjay9mb3J3YXJkIGNhY2hlLgotICAgIC8vIFRo
ZSBmb3JtIG11bHRpLXN1Ym1pdCBsb2dpYyBoZXJlIGlzIG9ubHkgbmVlZGVkIHdoZW4gd2UgYXJl
IHN1Ym1pdHRpbmcgYSBmb3JtIHRoYXQgYWZmZWN0cyB0aGlzIGZyYW1lLgotICAgIC8vIEZJWE1F
OiBGcmFtZSB0YXJnZXRpbmcgaXMgb25seSBvbmUgb2YgdGhlIHdheXMgdGhlIHN1Ym1pc3Npb24g
Y291bGQgZW5kIHVwIGRvaW5nIHNvbWV0aGluZyBvdGhlcgotICAgIC8vIHRoYW4gcmVwbGFjaW5n
IHRoaXMgZnJhbWUncyBjb250ZW50LCBzbyB0aGlzIGNoZWNrIGlzIGZsYXdlZC4gT24gdGhlIG90
aGVyIGhhbmQsIHRoZSBjaGVjayBpcyBoYXJkbHkKLSAgICAvLyBuZWVkZWQgYW55IG1vcmUgbm93
IHRoYXQgd2UgcmVzZXQgbV9zdWJtaXR0ZWRGb3JtVVJMIG9uIGVhY2ggbW91c2Ugb3Iga2V5IGRv
d24gZXZlbnQuCi0gICAgRnJhbWUqIHRhcmdldCA9IG1fZnJhbWUtPnRyZWUoKS0+ZmluZChyZXF1
ZXN0LmZyYW1lTmFtZSgpKTsKLSAgICBpZiAobV9mcmFtZS0+dHJlZSgpLT5pc0Rlc2NlbmRhbnRP
Zih0YXJnZXQpKSB7Ci0gICAgICAgIGlmIChtX3N1Ym1pdHRlZEZvcm1VUkwgPT0gcmVxdWVzdC5y
ZXNvdXJjZVJlcXVlc3QoKS51cmwoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9z
dWJtaXR0ZWRGb3JtVVJMID0gcmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS51cmwoKTsKLSAgICB9
Ci0KLSAgICBsb2FkRnJhbWVSZXF1ZXN0V2l0aEZvcm1BbmRWYWx1ZXMocmVxdWVzdCwgbG9ja0hp
c3RvcnksIGxvY2tCYWNrRm9yd2FyZExpc3QsIGV2ZW50LCBtX2Zvcm1BYm91dFRvQmVTdWJtaXR0
ZWQuZ2V0KCksIG1fZm9ybVZhbHVlc0Fib3V0VG9CZVN1Ym1pdHRlZCk7Ci0KLSAgICBjbGVhclJl
Y29yZGVkRm9ybVZhbHVlcygpOwotfQotCiBTdHJpbmcgRnJhbWVMb2FkZXI6OnVzZXJBZ2VudChj
b25zdCBLVVJMJiB1cmwpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fY2xpZW50LT51c2VyQWdlbnQo
dXJsKTsKQEAgLTM2MzYsNyArMzYyNyw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmNvbW1pdHRlZExv
YWQoRG9jdW1lbnQKICAgICBtX2NsaWVudC0+Y29tbWl0dGVkTG9hZChsb2FkZXIsIGRhdGEsIGxl
bmd0aCk7CiB9CiAKLXZvaWQgRnJhbWVMb2FkZXI6OmxvYWRQb3N0UmVxdWVzdChjb25zdCBSZXNv
dXJjZVJlcXVlc3QmIGluUmVxdWVzdCwgY29uc3QgU3RyaW5nJiByZWZlcnJlciwgY29uc3QgU3Ry
aW5nJiBmcmFtZU5hbWUsIGJvb2wgbG9ja0hpc3RvcnksIEZyYW1lTG9hZFR5cGUgbG9hZFR5cGUs
IEV2ZW50KiBldmVudCwgUGFzc1JlZlB0cjxGb3JtU3RhdGU+IHBycEZvcm1TdGF0ZSkKK3ZvaWQg
RnJhbWVMb2FkZXI6OmxvYWRQb3N0UmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIGluUmVx
dWVzdCwgY29uc3QgU3RyaW5nJiByZWZlcnJlciwgY29uc3QgU3RyaW5nJiBmcmFtZU5hbWUsIGJv
b2wgbG9ja0hpc3RvcnksIEZyYW1lTG9hZFR5cGUgbG9hZFR5cGUsIFBhc3NSZWZQdHI8RXZlbnQ+
IGV2ZW50LCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4gcHJwRm9ybVN0YXRlKQogewogICAgIFJlZlB0
cjxGb3JtU3RhdGU+IGZvcm1TdGF0ZSA9IHBycEZvcm1TdGF0ZTsKIApAQCAtMzY3NiwxMiArMzY2
Nyw2IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmxvYWRQb3N0UmVxdWVzdChjb25zdCAKICAgICAgICAg
bG9hZFdpdGhOYXZpZ2F0aW9uQWN0aW9uKHdvcmtpbmdSZXNvdXJjZVJlcXVlc3QsIGFjdGlvbiwg
bG9ja0hpc3RvcnksIGxvYWRUeXBlLCBmb3JtU3RhdGUucmVsZWFzZSgpKTsgICAgCiB9CiAKLXZv
aWQgRnJhbWVMb2FkZXI6OmxvYWRFbXB0eURvY3VtZW50U3luY2hyb25vdXNseSgpCi17Ci0gICAg
UmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QoS1VSTCgiIikpOwotICAgIGxvYWQocmVxdWVzdCwgZmFs
c2UpOwotfQotCiB1bnNpZ25lZCBsb25nIEZyYW1lTG9hZGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJv
bm91c2x5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgUmVzb3VyY2VFcnJvciYgZXJy
b3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8Y2hhcj4mIGRhdGEpCiB7CiAg
ICAgLy8gU2luY2UgdGhpcyBpcyBhIHN1YnJlc291cmNlLCB3ZSBjYW4gbG9hZCBhbnkgVVJMICh3
ZSBpZ25vcmUgdGhlIHJldHVybiB2YWx1ZSkuCkBAIC0zODAyLDggKzM3ODcsOCBAQCB2b2lkIEZy
YW1lTG9hZGVyOjpyZWNlaXZlZE1haW5SZXNvdXJjZUVyCiAgICAgfQogICAgIAogICAgIGlmICht
X3N0YXRlID09IEZyYW1lU3RhdGVQcm92aXNpb25hbCAmJiBtX3Byb3Zpc2lvbmFsRG9jdW1lbnRM
b2FkZXIpIHsKLSAgICAgICAgS1VSTCBmYWlsZWRVUkwgPSBtX3Byb3Zpc2lvbmFsRG9jdW1lbnRM
b2FkZXItPm9yaWdpbmFsUmVxdWVzdENvcHkoKS51cmwoKTsKLSAgICAgICAgZGlkTm90T3BlblVS
TChmYWlsZWRVUkwpOworICAgICAgICBpZiAobV9zdWJtaXR0ZWRGb3JtVVJMID09IG1fcHJvdmlz
aW9uYWxEb2N1bWVudExvYWRlci0+b3JpZ2luYWxSZXF1ZXN0Q29weSgpLnVybCgpKQorICAgICAg
ICAgICAgbV9zdWJtaXR0ZWRGb3JtVVJMID0gS1VSTCgpOwogICAgICAgICAgICAgCiAgICAgICAg
IC8vIFdlIG1pZ2h0IGhhdmUgbWFkZSBhIHBhZ2UgY2FjaGUgaXRlbSwgYnV0IG5vdyB3ZSdyZSBi
YWlsaW5nIG91dCBkdWUgdG8gYW4gZXJyb3IgYmVmb3JlIHdlIGV2ZXIKICAgICAgICAgLy8gdHJh
bnNpdGlvbmVkIHRvIHRoZSBuZXcgcGFnZSAoYmVmb3JlIFdlYkZyYW1lU3RhdGUgPT0gY29tbWl0
KS4gIFRoZSBnb2FsIGhlcmUgaXMgdG8gcmVzdG9yZSBhbnkgc3RhdGUKQEAgLTQ4OTEsMTYgKzQ4
NzYsNiBAQCBIaXN0b3J5SXRlbSogRnJhbWVMb2FkZXI6OmN1cnJlbnRIaXN0b3J5CiAgICAgcmV0
dXJuIG1fY3VycmVudEhpc3RvcnlJdGVtLmdldCgpOwogfQogCi12b2lkIEZyYW1lTG9hZGVyOjpz
ZXRDdXJyZW50SGlzdG9yeUl0ZW0oUGFzc1JlZlB0cjxIaXN0b3J5SXRlbT4gaXRlbSkKLXsKLSAg
ICBtX2N1cnJlbnRIaXN0b3J5SXRlbSA9IGl0ZW07Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXI6OnNl
dFByb3Zpc2lvbmFsSGlzdG9yeUl0ZW0oUGFzc1JlZlB0cjxIaXN0b3J5SXRlbT4gaXRlbSkKLXsK
LSAgICBtX3Byb3Zpc2lvbmFsSGlzdG9yeUl0ZW0gPSBpdGVtOwotfQotCiB2b2lkIEZyYW1lTG9h
ZGVyOjpzZXRNYWluRG9jdW1lbnRFcnJvcihEb2N1bWVudExvYWRlciogbG9hZGVyLCBjb25zdCBS
ZXNvdXJjZUVycm9yJiBlcnJvcikKIHsKICAgICBtX2NsaWVudC0+c2V0TWFpbkRvY3VtZW50RXJy
b3IobG9hZGVyLCBlcnJvcik7CkBAIC01MTM0LDI0ICs1MTA5LDYgQEAgdm9pZCBGcmFtZUxvYWRl
cjo6ZGlkQ2hhbmdlVGl0bGUoRG9jdW1lbgogICAgIH0KIH0KIAotdm9pZCBGcmFtZUxvYWRlcjo6
Y29udGludWVMb2FkV2l0aERhdGEoU2hhcmVkQnVmZmVyKiBidWZmZXIsIGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIGNvbnN0IFN0cmluZyYgdGV4dEVuY29kaW5nLCBjb25zdCBLVVJMJiB1cmwpCi17
Ci0gICAgbV9yZXNwb25zZU1JTUVUeXBlID0gbWltZVR5cGU7Ci0gICAgZGlkT3BlblVSTCh1cmwp
OwotCi0gICAgU3RyaW5nIGVuY29kaW5nOwotICAgIGlmIChtX2ZyYW1lKQotICAgICAgICBlbmNv
ZGluZyA9IGRvY3VtZW50TG9hZGVyKCktPm92ZXJyaWRlRW5jb2RpbmcoKTsKLSAgICBib29sIHVz
ZXJDaG9zZW4gPSAhZW5jb2RpbmcuaXNOdWxsKCk7Ci0gICAgaWYgKGVuY29kaW5nLmlzTnVsbCgp
KQotICAgICAgICBlbmNvZGluZyA9IHRleHRFbmNvZGluZzsKLSAgICBzZXRFbmNvZGluZyhlbmNv
ZGluZywgdXNlckNob3Nlbik7Ci0KLSAgICBBU1NFUlQobV9mcmFtZS0+ZG9jdW1lbnQoKSk7Ci0K
LSAgICBhZGREYXRhKGJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPnNpemUoKSk7Ci19Ci0KIHZvaWQg
RnJhbWVMb2FkZXI6OnJlZ2lzdGVyVVJMU2NoZW1lQXNMb2NhbChjb25zdCBTdHJpbmcmIHNjaGVt
ZSkKIHsKICAgICBsb2NhbFNjaGVtZXMoKS5hZGQoc2NoZW1lKTsKSW5kZXg6IFdlYkNvcmUvbG9h
ZGVyL0ZyYW1lTG9hZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2Fk
ZXIuaAkocmV2aXNpb24gNDIwNDQpCisrKyBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw2IEBACiAjZGVmaW5lIEZyYW1lTG9hZGVyX2gKIAog
I2luY2x1ZGUgIkNhY2hlUG9saWN5LmgiCi0jaW5jbHVkZSAiRm9ybVN0YXRlLmgiCiAjaW5jbHVk
ZSAiRnJhbWVMb2FkZXJUeXBlcy5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgogI2lu
Y2x1ZGUgIlRpbWVyLmgiCkBAIC00NSw5ICs0NCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICBjbGFzcyBDYWNoZWRSZXNvdXJjZTsKICAgICBjbGFzcyBEb2N1bWVudDsKICAgICBjbGFzcyBE
b2N1bWVudExvYWRlcjsKLSAgICBjbGFzcyBFbGVtZW50OwogICAgIGNsYXNzIEV2ZW50OwogICAg
IGNsYXNzIEZvcm1EYXRhOworICAgIGNsYXNzIEZvcm1TdGF0ZTsKICAgICBjbGFzcyBGcmFtZTsK
ICAgICBjbGFzcyBGcmFtZUxvYWRlckNsaWVudDsKICAgICBjbGFzcyBIaXN0b3J5SXRlbTsKQEAg
LTY5LDExICs2OCwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgVGV4dFJlc291
cmNlRGVjb2RlcjsKICAgICBjbGFzcyBXaWRnZXQ7CiAKLSAgICBzdHJ1Y3QgRm9ybVN1Ym1pc3Np
b247CiAgICAgc3RydWN0IEZyYW1lTG9hZFJlcXVlc3Q7CiAgICAgc3RydWN0IFNjaGVkdWxlZFJl
ZGlyZWN0aW9uOwogICAgIHN0cnVjdCBXaW5kb3dGZWF0dXJlczsKIAorICAgIGVudW0gRm9ybVN1
Ym1pc3Npb25UeXBlIHsgRm9ybUdldCwgRm9ybVBvc3QgfTsKKwogICAgIGJvb2wgaXNCYWNrRm9y
d2FyZExvYWRUeXBlKEZyYW1lTG9hZFR5cGUpOwogCiAgICAgdHlwZWRlZiB2b2lkICgqTmF2aWdh
dGlvblBvbGljeURlY2lzaW9uRnVuY3Rpb24pKHZvaWQqIGFyZ3VtZW50LApAQCAtMTI2LDMxICsx
MjYsMzUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHNldHVwRm9yUmVwbGFj
ZSgpOwogICAgICAgICB2b2lkIHNldHVwRm9yUmVwbGFjZUJ5TUlNRVR5cGUoY29uc3QgU3RyaW5n
JiBuZXdNSU1FVHlwZSk7CiAKKyAgICBwcml2YXRlOgogICAgICAgICB2b2lkIGxvYWRXaXRoRG9j
dW1lbnRMb2FkZXIoRG9jdW1lbnRMb2FkZXIqLCBGcmFtZUxvYWRUeXBlLCBQYXNzUmVmUHRyPEZv
cm1TdGF0ZT4pOyAgICAgICAgIC8vIENhbGxzIGNvbnRpbnVlTG9hZEFmdGVyTmF2aWdhdGlvblBv
bGljeQogICAgICAgICB2b2lkIGxvYWQoRG9jdW1lbnRMb2FkZXIqKTsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhbGxz
IGxvYWRXaXRoRG9jdW1lbnRMb2FkZXIgICAKIAotICAgICAgICB2b2lkIGxvYWRXaXRoTmF2aWdh
dGlvbkFjdGlvbihjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBOYXZpZ2F0aW9uQWN0aW9u
JiwgICAgICAgICAgICAgIC8vIENhbGxzIGxvYWRXaXRoRG9jdW1lbnRMb2FkZXIoKQorICAgICAg
ICB2b2lkIGxvYWRXaXRoTmF2aWdhdGlvbkFjdGlvbihjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBj
b25zdCBOYXZpZ2F0aW9uQWN0aW9uJiwgICAgICAgICAgICAgIC8vIENhbGxzIGxvYWRXaXRoRG9j
dW1lbnRMb2FkZXIKICAgICAgICAgICAgIGJvb2wgbG9ja0hpc3RvcnksIEZyYW1lTG9hZFR5cGUs
IFBhc3NSZWZQdHI8Rm9ybVN0YXRlPik7CiAKLSAgICAgICAgdm9pZCBsb2FkUG9zdFJlcXVlc3Qo
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgU3RyaW5nJiByZWZlcnJlciwgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBDYWxsZWQgYnkgbG9hZEZyYW1lUmVxdWVzdFdpdGhGb3JtQW5kVmFs
dWVzKCksIGNhbGxzIGxvYWRXaXRoTmF2aWdhdGlvbkFjdGlvbgotICAgICAgICAgICAgY29uc3Qg
U3RyaW5nJiBmcmFtZU5hbWUsIGJvb2wgbG9ja0hpc3RvcnksIEZyYW1lTG9hZFR5cGUsIEV2ZW50
KiwgUGFzc1JlZlB0cjxGb3JtU3RhdGU+KTsKKyAgICAgICAgdm9pZCBsb2FkUG9zdFJlcXVlc3Qo
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgU3RyaW5nJiByZWZlcnJlciwgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBDYWxsZWQgYnkgbG9hZEZyYW1lUmVxdWVzdCwgY2FsbHMgbG9hZFdp
dGhOYXZpZ2F0aW9uQWN0aW9uCisgICAgICAgICAgICBjb25zdCBTdHJpbmcmIGZyYW1lTmFtZSwg
Ym9vbCBsb2NrSGlzdG9yeSwgRnJhbWVMb2FkVHlwZSwgUGFzc1JlZlB0cjxFdmVudD4sIFBhc3NS
ZWZQdHI8Rm9ybVN0YXRlPik7CisKKyAgICAgICAgdm9pZCBsb2FkVVJMKGNvbnN0IEtVUkwmIG5l
d1VSTCwgY29uc3QgU3RyaW5nJiByZWZlcnJlciwgY29uc3QgU3RyaW5nJiBmcmFtZU5hbWUsICAg
ICAgICAgICAvLyBDYWxsZWQgYnkgbG9hZEZyYW1lUmVxdWVzdCwgY2FsbHMgbG9hZFdpdGhOYXZp
Z2F0aW9uQWN0aW9uIG9yIGVsc2UgZGlzcGF0Y2hlcyB0byBuYXZpZ2F0aW9uIHBvbGljeSBkZWxl
Z2F0ZSAgICAKKyAgICAgICAgICAgIGJvb2wgbG9ja0hpc3RvcnksIEZyYW1lTG9hZFR5cGUsIFBh
c3NSZWZQdHI8RXZlbnQ+LCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4pOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCisgICAgcHVibGljOgor
ICAgICAgICB2b2lkIGxvYWRVUkxJbnRvQ2hpbGRGcmFtZShjb25zdCBLVVJMJiwgY29uc3QgU3Ry
aW5nJiByZWZlcnJlciwgRnJhbWUqKTsKIAotICAgICAgICB2b2lkIGxvYWRVUkwoY29uc3QgS1VS
TCYgbmV3VVJMLCBjb25zdCBTdHJpbmcmIHJlZmVycmVyLCBjb25zdCBTdHJpbmcmIGZyYW1lTmFt
ZSwgICAgICAgICAgIC8vIENhbGxlZCBieSBsb2FkRnJhbWVSZXF1ZXN0V2l0aEZvcm1BbmRWYWx1
ZXMoKSwgY2FsbHMgbG9hZFdpdGhOYXZpZ2F0aW9uQWN0aW9uIG9yIGVsc2UgZGlzcGF0Y2hlcyB0
byBuYXZpZ2F0aW9uIHBvbGljeSBkZWxlZ2F0ZSAgICAKLSAgICAgICAgICAgIGJvb2wgbG9ja0hp
c3RvcnksIEZyYW1lTG9hZFR5cGUsIEV2ZW50KiwgUGFzc1JlZlB0cjxGb3JtU3RhdGU+KTsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgdm9pZCBsb2FkVVJMSW50b0NoaWxkRnJhbWUoY29uc3QgS1VSTCYsIGNvbnN0IFN0cmlu
ZyYgcmVmZXJlciwgRnJhbWUqKTsKLQotICAgICAgICB2b2lkIGxvYWRGcmFtZVJlcXVlc3RXaXRo
Rm9ybUFuZFZhbHVlcyhjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiwgYm9vbCBsb2NrSGlzdG9yeSwg
Ym9vbCBsb2NrQmFja0ZvcndhcmRMaXN0LCAgICAgICAgICAgLy8gQ2FsbGVkIGJ5IHN1Ym1pdEZv
cm0sIGNhbGxzIGxvYWRQb3N0UmVxdWVzdCgpCi0gICAgICAgICAgICBFdmVudCosIEhUTUxGb3Jt
RWxlbWVudCosIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBmb3JtVmFsdWVzKTsKLQot
ICAgICAgICB2b2lkIGxvYWQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgYm9vbCBsb2NrSGlzdG9y
eSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIENhbGxlZCBieSBXZWJGcmFtZSwgY2FsbHMgKFJlc291cmNlUmVxdWVzdCwgU3Vic3Rp
dHV0ZURhdGEpCi0gICAgICAgIHZvaWQgbG9hZChjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25z
dCBTdWJzdGl0dXRlRGF0YSYsIGJvb2wgbG9ja0hpc3RvcnkpOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gQ2FsbGVkIGJvdGggYnkgV2ViRnJhbWUgYW5kIGludGVybmFsbHks
IGNhbGxzIChEb2N1bWVudExvYWRlciopCi0gICAgICAgIHZvaWQgbG9hZChjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmLCBjb25zdCBTdHJpbmcmIGZyYW1lTmFtZSwgYm9vbCBsb2NrSGlzdG9yeSk7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FsbGVkIGJ5IFdlYlBsdWdpbkNvbnRy
b2xsZXIKKyAgICAgICAgdm9pZCBsb2FkRnJhbWVSZXF1ZXN0KGNvbnN0IEZyYW1lTG9hZFJlcXVl
c3QmLCBib29sIGxvY2tIaXN0b3J5LCBib29sIGxvY2tCYWNrRm9yd2FyZExpc3QsICAvLyBDYWxs
ZWQgYnkgc3VibWl0Rm9ybSwgY2FsbHMgbG9hZFBvc3RSZXF1ZXN0IGFuZCBsb2FkVVJMLgorICAg
ICAgICAgICAgUGFzc1JlZlB0cjxFdmVudD4sIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPik7CisKKyAg
ICAgICAgdm9pZCBsb2FkKGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGJvb2wgbG9ja0hpc3Rvcnkp
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDYWxsZWQgYnkgV2Vi
RnJhbWUsIGNhbGxzIChSZXNvdXJjZVJlcXVlc3QsIFN1YnN0aXR1dGVEYXRhKQorICAgICAgICB2
b2lkIGxvYWQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgU3Vic3RpdHV0ZURhdGEmLCBi
b29sIGxvY2tIaXN0b3J5KTsgICAgICAgICAgICAgICAgIC8vIENhbGxlZCBib3RoIGJ5IFdlYkZy
YW1lIGFuZCBpbnRlcm5hbGx5LCBjYWxscyAoRG9jdW1lbnRMb2FkZXIqKQorICAgICAgICB2b2lk
IGxvYWQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgU3RyaW5nJiBmcmFtZU5hbWUsIGJv
b2wgbG9ja0hpc3RvcnkpOyAgICAgICAgICAgICAgIC8vIENhbGxlZCBieSBXZWJQbHVnaW5Db250
cm9sbGVyCiAgICAgICAgIAotICAgICAgICB2b2lkIGxvYWRBcmNoaXZlKFBhc3NSZWZQdHI8QXJj
aGl2ZT4gYXJjaGl2ZSk7CisgICAgICAgIHZvaWQgbG9hZEFyY2hpdmUoUGFzc1JlZlB0cjxBcmNo
aXZlPik7CiAKLSAgICAgICAgLy8gUmV0dXJucyB0cnVlIGZvciBhbnkgbm9uLWxvY2FsIFVSTC4g
SWYgRG9jdW1lbnQgcGFyYW1ldGVyIGlzIHN1cHBsaWVkLCBpdHMgbG9jYWwgbG9hZCBwb2xpY3kg
ZGljdGF0ZXMsCisgICAgcHVibGljOgorICAgICAgICAvLyBSZXR1cm5zIHRydWUgZm9yIGFueSBu
b24tbG9jYWwgVVJMLiBJZiBkb2N1bWVudCBwYXJhbWV0ZXIgaXMgc3VwcGxpZWQsIGl0cyBsb2Nh
bCBsb2FkIHBvbGljeSBkaWN0YXRlcywKICAgICAgICAgLy8gb3RoZXJ3aXNlIGlmIHJlZmVycmVy
IGlzIG5vbi1lbXB0eSBhbmQgcmVwcmVzZW50cyBhIGxvY2FsIGZpbGUsIHRoZW4gdGhlIGxvY2Fs
IGxvYWQgaXMgYWxsb3dlZC4KLSAgICAgICAgc3RhdGljIGJvb2wgY2FuTG9hZChjb25zdCBLVVJM
JiwgY29uc3QgU3RyaW5nJiByZWZlcnJlciwgY29uc3QgRG9jdW1lbnQqIHRoZURvY3VtZW50ID0g
MCk7CisgICAgICAgIHN0YXRpYyBib29sIGNhbkxvYWQoY29uc3QgS1VSTCYsIGNvbnN0IFN0cmlu
ZyYgcmVmZXJyZXIsIGNvbnN0IERvY3VtZW50KiA9IDApOwogICAgICAgICBzdGF0aWMgdm9pZCBy
ZXBvcnRMb2NhbExvYWRGYWlsZWQoRnJhbWUqLCBjb25zdCBTdHJpbmcmIHVybCk7CiAKICAgICAg
ICAgc3RhdGljIGJvb2wgc2hvdWxkSGlkZVJlZmVycmVyKGNvbnN0IEtVUkwmIHVybCwgY29uc3Qg
U3RyaW5nJiByZWZlcnJlcik7CkBAIC0xNzQsMTUgKzE3OCwxNCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIFN0cmluZyByZWZlcnJlcigpIGNvbnN0OwogICAgICAgICBTdHJpbmcgb3V0
Z29pbmdSZWZlcnJlcigpIGNvbnN0OwogICAgICAgICBTdHJpbmcgb3V0Z29pbmdPcmlnaW4oKSBj
b25zdDsKLSAgICAgICAgdm9pZCBsb2FkRW1wdHlEb2N1bWVudFN5bmNocm9ub3VzbHkoKTsKIAog
ICAgICAgICBEb2N1bWVudExvYWRlciogYWN0aXZlRG9jdW1lbnRMb2FkZXIoKSBjb25zdDsKICAg
ICAgICAgRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyKCkgY29uc3QgeyByZXR1cm4gbV9k
b2N1bWVudExvYWRlci5nZXQoKTsgfQotICAgICAgICBEb2N1bWVudExvYWRlciogcG9saWN5RG9j
dW1lbnRMb2FkZXIoKSBjb25zdCB7IHJldHVybiBtX3BvbGljeURvY3VtZW50TG9hZGVyLmdldCgp
OyB9CiAgICAgICAgIERvY3VtZW50TG9hZGVyKiBwcm92aXNpb25hbERvY3VtZW50TG9hZGVyKCkg
Y29uc3QgeyByZXR1cm4gbV9wcm92aXNpb25hbERvY3VtZW50TG9hZGVyLmdldCgpOyB9CiAgICAg
ICAgIEZyYW1lU3RhdGUgc3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlOyB9CiAgICAgICAg
IHN0YXRpYyBkb3VibGUgdGltZU9mTGFzdENvbXBsZXRlZExvYWQoKTsKIAorICAgIHB1YmxpYzoK
ICAgICAgICAgYm9vbCBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZShSZXNvdXJjZUxvYWRlciop
OwogICAgICAgICB2b2lkIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShSZXNvdXJj
ZUxvYWRlciosIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7CiAgICAgICAgIHZvaWQg
ZGlkQ2FuY2VsQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoUmVzb3VyY2VMb2FkZXIqLCBjb25zdCBB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpOwpAQCAtMjE3LDggKzIyMCw2IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgYm9vbCByZXByZXNlbnRhdGlvbkV4aXN0c0ZvclVSTFNjaGVtZShj
b25zdCBTdHJpbmcmIFVSTFNjaGVtZSk7CiAgICAgICAgIFN0cmluZyBnZW5lcmF0ZWRNSU1FVHlw
ZUZvclVSTFNjaGVtZShjb25zdCBTdHJpbmcmIFVSTFNjaGVtZSk7CiAKLSAgICAgICAgdm9pZCBu
b3RpZnlJY29uQ2hhbmdlZCgpOwotCiAgICAgICAgIHZvaWQgY2hlY2tOYXZpZ2F0aW9uUG9saWN5
KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbkZ1bmN0aW9u
IGZ1bmN0aW9uLCB2b2lkKiBhcmd1bWVudCk7CiAgICAgICAgIHZvaWQgY2hlY2tDb250ZW50UG9s
aWN5KGNvbnN0IFN0cmluZyYgTUlNRVR5cGUsIENvbnRlbnRQb2xpY3lEZWNpc2lvbkZ1bmN0aW9u
LCB2b2lkKiBhcmd1bWVudCk7CiAgICAgICAgIHZvaWQgY2FuY2VsQ29udGVudFBvbGljeUNoZWNr
KCk7CkBAIC0yNDYsNzUgKzI0Nyw4OSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAg
dm9pZCBkaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXQoKTsKIAorICAgIHByaXZhdGU6CiAg
ICAgICAgIHZvaWQgY2xpZW50UmVkaXJlY3RDYW5jZWxsZWRPckZpbmlzaGVkKGJvb2wgY2FuY2Vs
V2l0aExvYWRJblByb2dyZXNzKTsKICAgICAgICAgdm9pZCBjbGllbnRSZWRpcmVjdGVkKGNvbnN0
IEtVUkwmLCBkb3VibGUgZGVsYXksIGRvdWJsZSBmaXJlRGF0ZSwgYm9vbCBsb2NrQmFja0Zvcndh
cmRMaXN0LCBib29sIGlzSmF2YVNjcmlwdEZvcm1BY3Rpb24pOwogICAgICAgICBib29sIHNob3Vs
ZFJlbG9hZChjb25zdCBLVVJMJiBjdXJyZW50VVJMLCBjb25zdCBLVVJMJiBkZXN0aW5hdGlvblVS
TCk7CisKKyAgICBwdWJsaWM6CiAjaWYgRU5BQkxFKFdNTCkKICAgICAgICAgdm9pZCBzZXRGb3Jj
ZVJlbG9hZFdtbERlY2soYm9vbCk7CiAjZW5kaWYKIAotICAgICAgICBib29sIGlzUXVpY2tSZWRp
cmVjdENvbWluZygpIGNvbnN0OwotCisgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBzZW5kUmVt
YWluaW5nRGVsZWdhdGVNZXNzYWdlcyh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFJl
c291cmNlUmVzcG9uc2UmLCBpbnQgbGVuZ3RoLCBjb25zdCBSZXNvdXJjZUVycm9yJik7CiAgICAg
ICAgIHZvaWQgcmVxdWVzdEZyb21EZWxlZ2F0ZShSZXNvdXJjZVJlcXVlc3QmLCB1bnNpZ25lZCBs
b25nJiBpZGVudGlmaWVyLCBSZXNvdXJjZUVycm9yJik7CisKKyAgICBwdWJsaWM6CiAgICAgICAg
IHZvaWQgbG9hZGVkUmVzb3VyY2VGcm9tTWVtb3J5Q2FjaGUoY29uc3QgQ2FjaGVkUmVzb3VyY2Uq
KTsKICAgICAgICAgdm9pZCB0ZWxsQ2xpZW50QWJvdXRQYXN0TWVtb3J5Q2FjaGVMb2FkcygpOwog
CisgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCByZWN1cnNpdmVDaGVja0xvYWRDb21wbGV0ZSgp
OworCisgICAgcHVibGljOgogICAgICAgICB2b2lkIGNoZWNrTG9hZENvbXBsZXRlKCk7CiAgICAg
ICAgIHZvaWQgZGV0YWNoRnJvbVBhcmVudCgpOworCisgICAgcHJpdmF0ZToKICAgICAgICAgdm9p
ZCBkZXRhY2hDaGlsZHJlbigpOwogICAgICAgICB2b2lkIGNsb3NlQW5kUmVtb3ZlQ2hpbGQoRnJh
bWUqKTsKIAorICAgIHB1YmxpYzoKICAgICAgICAgdm9pZCBhZGRFeHRyYUZpZWxkc1RvU3VicmVz
b3VyY2VSZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYpOwogICAgICAgICB2b2lkIGFkZEV4dHJhRmll
bGRzVG9NYWluUmVzb3VyY2VSZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYpOwotICAgICAgICAKKyAg
ICAKICAgICAgICAgc3RhdGljIHZvaWQgYWRkSFRUUE9yaWdpbklmTmVlZGVkKFJlc291cmNlUmVx
dWVzdCYsIFN0cmluZyBvcmlnaW4pOwogCiAgICAgICAgIEZyYW1lTG9hZGVyQ2xpZW50KiBjbGll
bnQoKSBjb25zdCB7IHJldHVybiBtX2NsaWVudDsgfQogCiAgICAgICAgIHZvaWQgc2V0RGVmZXJz
TG9hZGluZyhib29sKTsKIAotICAgICAgICB2b2lkIGNoYW5nZUxvY2F0aW9uKGNvbnN0IFN0cmlu
ZyYgdXJsLCBjb25zdCBTdHJpbmcmIHJlZmVycmVyLCBib29sIGxvY2tIaXN0b3J5ID0gdHJ1ZSwg
Ym9vbCBsb2NrQmFja0ZvcndhcmRMaXN0ID0gdHJ1ZSwgYm9vbCB1c2VyR2VzdHVyZSA9IGZhbHNl
LCBib29sIHJlZnJlc2ggPSBmYWxzZSk7CiAgICAgICAgIHZvaWQgY2hhbmdlTG9jYXRpb24oY29u
c3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgcmVmZXJyZXIsIGJvb2wgbG9ja0hpc3RvcnkgPSB0cnVl
LCBib29sIGxvY2tCYWNrRm9yd2FyZExpc3QgPSB0cnVlLCBib29sIHVzZXJHZXN0dXJlID0gZmFs
c2UsIGJvb2wgcmVmcmVzaCA9IGZhbHNlKTsKLSAgICAgICAgdm9pZCB1cmxTZWxlY3RlZChjb25z
dCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBTdHJpbmcmIHRhcmdldCwgRXZlbnQqLCBib29sIGxv
Y2tIaXN0b3J5LCBib29sIGxvY2tCYWNrRm9yd2FyZExpc3QsIGJvb2wgdXNlckdlc3R1cmUpOwot
ICAgICAgICB2b2lkIHVybFNlbGVjdGVkKGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmLCBFdmVudCos
IGJvb2wgbG9ja0hpc3RvcnksIGJvb2wgbG9ja0JhY2tGb3J3YXJkTGlzdCk7Ci0gICAgICAKKyAg
ICAgICAgdm9pZCB1cmxTZWxlY3RlZChjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBTdHJp
bmcmIHRhcmdldCwgUGFzc1JlZlB0cjxFdmVudD4sIGJvb2wgbG9ja0hpc3RvcnksIGJvb2wgbG9j
a0JhY2tGb3J3YXJkTGlzdCwgYm9vbCB1c2VyR2VzdHVyZSk7CisKICAgICAgICAgYm9vbCByZXF1
ZXN0RnJhbWUoSFRNTEZyYW1lT3duZXJFbGVtZW50KiwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0
IEF0b21pY1N0cmluZyYgZnJhbWVOYW1lKTsKKworICAgIHByaXZhdGU6CiAgICAgICAgIEZyYW1l
KiBsb2FkU3ViZnJhbWUoSFRNTEZyYW1lT3duZXJFbGVtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiByZWZlcnJlcik7CiAKLSAgICAgICAgdm9pZCBz
dWJtaXRGb3JtKGNvbnN0IGNoYXIqIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB1cmwsIFBhc3NSZWZQ
dHI8Rm9ybURhdGE+LCBjb25zdCBTdHJpbmcmIHRhcmdldCwgY29uc3QgU3RyaW5nJiBjb250ZW50
VHlwZSwgY29uc3QgU3RyaW5nJiBib3VuZGFyeSwgRXZlbnQqLCBib29sIGxvY2tIaXN0b3J5LCBi
b29sIGxvY2tCYWNrRm9yd2FyZExpc3QpOwotICAgICAgICB2b2lkIHN1Ym1pdEZvcm1BZ2Fpbigp
OwotICAgICAgICB2b2lkIHN1Ym1pdEZvcm0oY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYsIEV2ZW50
KiwgYm9vbCBsb2NrSGlzdG9yeSwgYm9vbCBsb2NrQmFja0ZvcndhcmRMaXN0KTsKKyAgICAgICAg
dm9pZCBzdWJtaXRGb3JtKEZvcm1TdWJtaXNzaW9uVHlwZSwgY29uc3QgU3RyaW5nJiB1cmwsIFBh
c3NSZWZQdHI8Rm9ybURhdGE+LCBjb25zdCBTdHJpbmcmIHRhcmdldCwgY29uc3QgU3RyaW5nJiBj
b250ZW50VHlwZSwgY29uc3QgU3RyaW5nJiBib3VuZGFyeSwgUGFzc1JlZlB0cjxFdmVudD4sIFBh
c3NSZWZQdHI8Rm9ybVN0YXRlPiwgYm9vbCBsb2NrSGlzdG9yeSwgYm9vbCBsb2NrQmFja0Zvcndh
cmRMaXN0KTsKIAorICAgIHB1YmxpYzoKICAgICAgICAgdm9pZCBzdG9wKCk7CiAgICAgICAgIHZv
aWQgc3RvcExvYWRpbmcoYm9vbCBzZW5kVW5sb2FkKTsKKworICAgIHByaXZhdGU6CiAgICAgICAg
IGJvb2wgY2xvc2VVUkwoKTsKIAorICAgIHB1YmxpYzoKICAgICAgICAgdm9pZCBkaWRFeHBsaWNp
dE9wZW4oKTsKIAogICAgICAgICBLVVJMIGljb25VUkwoKTsKICAgICAgICAgdm9pZCBjb21taXRJ
Y29uVVJMVG9JY29uRGF0YWJhc2UoY29uc3QgS1VSTCYpOwogCiAgICAgICAgIEtVUkwgYmFzZVVS
TCgpIGNvbnN0OwotICAgICAgICBTdHJpbmcgYmFzZVRhcmdldCgpIGNvbnN0OwotICAgICAgICBL
VVJMIGRhdGFVUkxCYXNlRnJvbVJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0
KSBjb25zdDsKIAogICAgICAgICBib29sIGlzU2NoZWR1bGVkTG9jYXRpb25DaGFuZ2VQZW5kaW5n
KCkgY29uc3QgeyByZXR1cm4gbV9zY2hlZHVsZWRSZWRpcmVjdGlvbiAmJiBpc0xvY2F0aW9uQ2hh
bmdlKCptX3NjaGVkdWxlZFJlZGlyZWN0aW9uKTsgfQogICAgICAgICB2b2lkIHNjaGVkdWxlSFRU
UFJlZGlyZWN0aW9uKGRvdWJsZSBkZWxheSwgY29uc3QgU3RyaW5nJiB1cmwpOwogICAgICAgICB2
b2lkIHNjaGVkdWxlTG9jYXRpb25DaGFuZ2UoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmlu
ZyYgcmVmZXJyZXIsIGJvb2wgbG9ja0hpc3RvcnkgPSB0cnVlLCBib29sIGxvY2tCYWNrRm9yd2Fy
ZExpc3QgPSB0cnVlLCBib29sIHVzZXJHZXN0dXJlID0gZmFsc2UpOwogICAgICAgICB2b2lkIHNj
aGVkdWxlUmVmcmVzaChib29sIHVzZXJHZXN0dXJlID0gZmFsc2UpOwogICAgICAgICB2b2lkIHNj
aGVkdWxlSGlzdG9yeU5hdmlnYXRpb24oaW50IHN0ZXBzKTsKKyAgICAgICAgdm9pZCBzY2hlZHVs
ZUZvcm1TdWJtaXNzaW9uKEZvcm1TdWJtaXNzaW9uVHlwZSwgY29uc3QgU3RyaW5nJiB1cmwsIFBh
c3NSZWZQdHI8Rm9ybURhdGE+LCBjb25zdCBTdHJpbmcmIHRhcmdldCwgY29uc3QgU3RyaW5nJiBj
b250ZW50VHlwZSwgY29uc3QgU3RyaW5nJiBib3VuZGFyeSwgUGFzc1JlZlB0cjxFdmVudD4sIFBh
c3NSZWZQdHI8Rm9ybVN0YXRlPiwgYm9vbCBsb2NrSGlzdG9yeSwgYm9vbCBsb2NrQmFja0Zvcndh
cmRMaXN0KTsKIAogICAgICAgICBib29sIGNhbkdvQmFja09yRm9yd2FyZChpbnQgZGlzdGFuY2Up
IGNvbnN0OwogICAgICAgICB2b2lkIGdvQmFja09yRm9yd2FyZChpbnQgZGlzdGFuY2UpOwogICAg
ICAgICBpbnQgZ2V0SGlzdG9yeUxlbmd0aCgpOworCisgICAgcHJpdmF0ZToKICAgICAgICAgS1VS
TCBoaXN0b3J5VVJMKGludCBkaXN0YW5jZSk7CiAKKyAgICBwdWJsaWM6CiAgICAgICAgIHZvaWQg
YmVnaW4oKTsKICAgICAgICAgdm9pZCBiZWdpbihjb25zdCBLVVJMJiwgYm9vbCBkaXNwYXRjaFdp
bmRvd09iamVjdEF2YWlsYWJsZSA9IHRydWUsIFNlY3VyaXR5T3JpZ2luKiBmb3JjZWRTZWN1cml0
eU9yaWdpbiA9IDApOwogCi0gICAgICAgIHZvaWQgd3JpdGUoY29uc3QgY2hhciogc3RyLCBpbnQg
bGVuID0gLTEsIGJvb2wgZmx1c2ggPSBmYWxzZSk7CisgICAgICAgIHZvaWQgd3JpdGUoY29uc3Qg
Y2hhciogc3RyaW5nLCBpbnQgbGVuZ3RoID0gLTEsIGJvb2wgZmx1c2ggPSBmYWxzZSk7CiAgICAg
ICAgIHZvaWQgd3JpdGUoY29uc3QgU3RyaW5nJik7CiAgICAgICAgIHZvaWQgZW5kKCk7CiAgICAg
ICAgIHZvaWQgZW5kSWZOb3RMb2FkaW5nTWFpblJlc291cmNlKCk7CkBAIC0zMjIsMTYgKzMzNywy
MSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgc2V0RW5jb2RpbmcoY29uc3Qg
U3RyaW5nJiBlbmNvZGluZywgYm9vbCB1c2VyQ2hvc2VuKTsKICAgICAgICAgU3RyaW5nIGVuY29k
aW5nKCkgY29uc3Q7CiAKKyAgICBwcml2YXRlOgogICAgICAgICAvLyBSZXR1cm5zIHRydWUgaWYg
dXJsIGlzIGEgSmF2YVNjcmlwdCBVUkwuCiAgICAgICAgIGJvb2wgZXhlY3V0ZUlmSmF2YVNjcmlw
dFVSTChjb25zdCBLVVJMJiB1cmwsIGJvb2wgdXNlckdlc3R1cmUgPSBmYWxzZSwgYm9vbCByZXBs
YWNlRG9jdW1lbnQgPSB0cnVlKTsKIAorICAgIHB1YmxpYzoKICAgICAgICAgU2NyaXB0VmFsdWUg
ZXhlY3V0ZVNjcmlwdChjb25zdCBTY3JpcHRTb3VyY2VDb2RlJik7CiAgICAgICAgIFNjcmlwdFZh
bHVlIGV4ZWN1dGVTY3JpcHQoY29uc3QgU3RyaW5nJiBzY3JpcHQsIGJvb2wgZm9yY2VVc2VyR2Vz
dHVyZSA9IGZhbHNlKTsKIAogICAgICAgICB2b2lkIGdvdG9BbmNob3IoKTsKKworICAgIHByaXZh
dGU6CiAgICAgICAgIGJvb2wgZ290b0FuY2hvcihjb25zdCBTdHJpbmcmIG5hbWUpOyAvLyByZXR1
cm5zIHRydWUgaWYgdGhlIGFuY2hvciB3YXMgZm91bmQKICAgICAgICAgdm9pZCBzY3JvbGxUb0Fu
Y2hvcihjb25zdCBLVVJMJik7CiAKKyAgICBwdWJsaWM6CiAgICAgICAgIHZvaWQgdG9rZW5pemVy
UHJvY2Vzc2VkRGF0YSgpOwogCiAgICAgICAgIHZvaWQgaGFuZGxlZE9ubG9hZEV2ZW50cygpOwpA
QCAtMzQxLDMzICszNjEsNDAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZvaWQg
ZGlzcGF0Y2hXaW5kb3dPYmplY3RBdmFpbGFibGUoKTsKICAgICAgICAgdm9pZCBkaXNwYXRjaERv
Y3VtZW50RWxlbWVudEF2YWlsYWJsZSgpOworCisgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBy
ZXN0b3JlRG9jdW1lbnRTdGF0ZSgpOwogCisgICAgcHVibGljOgogICAgICAgICBGcmFtZSogb3Bl
bmVyKCk7CiAgICAgICAgIHZvaWQgc2V0T3BlbmVyKEZyYW1lKik7CiAgICAgICAgIGJvb2wgb3Bl
bmVkQnlET00oKSBjb25zdDsKICAgICAgICAgdm9pZCBzZXRPcGVuZWRCeURPTSgpOwogCisgICAg
cHJpdmF0ZToKICAgICAgICAgdm9pZCBwcm92aXNpb25hbExvYWRTdGFydGVkKCk7CiAKKyAgICBw
dWJsaWM6CiAgICAgICAgIGJvb2wgdXNlckdlc3R1cmVIaW50KCk7CiAKICAgICAgICAgdm9pZCBy
ZXNldE11bHRpcGxlRm9ybVN1Ym1pc3Npb25Qcm90ZWN0aW9uKCk7Ci0gICAgICAgIHZvaWQgZGlk
Tm90T3BlblVSTChjb25zdCBLVVJMJik7CiAKICAgICAgICAgdm9pZCBhZGREYXRhKGNvbnN0IGNo
YXIqIGJ5dGVzLCBpbnQgbGVuZ3RoKTsKIAorICAgIHByaXZhdGU6CiAgICAgICAgIGJvb2wgY2Fu
Q2FjaGVQYWdlKCk7CiAKKyAgICBwdWJsaWM6CiAgICAgICAgIHZvaWQgY2hlY2tDYWxsSW1wbGlj
aXRDbG9zZSgpOworCisgICAgcHJpdmF0ZToKICAgICAgICAgYm9vbCBkaWRPcGVuVVJMKGNvbnN0
IEtVUkwmKTsKIAorICAgIHB1YmxpYzoKICAgICAgICAgdm9pZCBmcmFtZURldGFjaGVkKCk7CiAK
ICAgICAgICAgY29uc3QgS1VSTCYgdXJsKCkgY29uc3QgeyByZXR1cm4gbV9VUkw7IH0KIAotICAg
ICAgICB2b2lkIHVwZGF0ZUJhc2VVUkxGb3JFbXB0eURvY3VtZW50KCk7Ci0KICAgICAgICAgdm9p
ZCBzZXRSZXNwb25zZU1JTUVUeXBlKGNvbnN0IFN0cmluZyYpOwogICAgICAgICBjb25zdCBTdHJp
bmcmIHJlc3BvbnNlTUlNRVR5cGUoKSBjb25zdDsKIApAQCAtMzc2LDEzICs0MDMsMTIgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIGxvYWREb25lKCk7CiAgICAgICAgIHZvaWQg
ZmluaXNoZWRQYXJzaW5nKCk7CiAgICAgICAgIHZvaWQgY2hlY2tDb21wbGV0ZWQoKTsKKworICAg
IHByaXZhdGU6CiAgICAgICAgIHZvaWQgc2NoZWR1bGVDaGVja0NvbXBsZXRlZCgpOwogICAgICAg
ICB2b2lkIHNjaGVkdWxlQ2hlY2tMb2FkQ29tcGxldGUoKTsKIAotICAgICAgICB2b2lkIGNsZWFy
UmVjb3JkZWRGb3JtVmFsdWVzKCk7Ci0gICAgICAgIHZvaWQgc2V0Rm9ybUFib3V0VG9CZVN1Ym1p
dHRlZChQYXNzUmVmUHRyPEhUTUxGb3JtRWxlbWVudD4gZWxlbWVudCk7Ci0gICAgICAgIHZvaWQg
cmVjb3JkRm9ybVZhbHVlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7
Ci0KKyAgICBwdWJsaWM6CiAgICAgICAgIGJvb2wgaXNDb21wbGV0ZSgpIGNvbnN0OwogCiAgICAg
ICAgIGJvb2wgcmVxdWVzdE9iamVjdChSZW5kZXJQYXJ0KiBmcmFtZSwgY29uc3QgU3RyaW5nJiB1
cmwsIGNvbnN0IEF0b21pY1N0cmluZyYgZnJhbWVOYW1lLApAQCAtMzkwLDI3ICs0MTYsMjggQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIEtVUkwgY29tcGxldGVVUkwoY29uc3QgU3Ry
aW5nJiB1cmwpOwogCisgICAgcHJpdmF0ZToKICAgICAgICAgS1VSTCBvcmlnaW5hbFJlcXVlc3RV
UkwoKSBjb25zdDsKIAorICAgIHB1YmxpYzoKICAgICAgICAgdm9pZCBjYW5jZWxBbmRDbGVhcigp
OwogCiAgICAgICAgIHZvaWQgc2V0VGl0bGUoY29uc3QgU3RyaW5nJik7CiAgICAgICAgIAorICAg
IHByaXZhdGU6CiAgICAgICAgIGJvb2wgc2hvdWxkVHJlYXRVUkxBc1NhbWVBc0N1cnJlbnQoY29u
c3QgS1VSTCYpIGNvbnN0OwogCisgICAgcHVibGljOgogICAgICAgICB2b2lkIGNvbW1pdFByb3Zp
c2lvbmFsTG9hZChQYXNzUmVmUHRyPENhY2hlZFBhZ2U+KTsKIAogICAgICAgICB2b2lkIGdvVG9J
dGVtKEhpc3RvcnlJdGVtKiwgRnJhbWVMb2FkVHlwZSk7CiAgICAgICAgIHZvaWQgc2F2ZURvY3Vt
ZW50QW5kU2Nyb2xsU3RhdGUoKTsKKworICAgIHByaXZhdGU6CiAgICAgICAgIHZvaWQgc2F2ZVNj
cm9sbFBvc2l0aW9uQW5kVmlld1N0YXRlVG9JdGVtKEhpc3RvcnlJdGVtKik7CiAKLSAgICAgICAg
Ly8gRklYTUU6IFRoZXNlIGFjY2Vzc29ycyBhcmUgaGVyZSBmb3IgYSBkd2luZGxpbmcgbnVtYmVy
IG9mIHVzZXJzIGluIFdlYktpdCwgV2ViRnJhbWUKLSAgICAgICAgLy8gYmVpbmcgdGhlIHByaW1h
cnkgb25lLiAgQWZ0ZXIgdGhleSdyZSBubyBsb25nZXIgbmVlZGVkIHRoZXJlLCB0aGV5IGNhbiBi
ZSByZW1vdmVkIQorICAgIHB1YmxpYzoKICAgICAgICAgSGlzdG9yeUl0ZW0qIGN1cnJlbnRIaXN0
b3J5SXRlbSgpOwotICAgICAgICB2b2lkIHNldEN1cnJlbnRIaXN0b3J5SXRlbShQYXNzUmVmUHRy
PEhpc3RvcnlJdGVtPik7Ci0gICAgICAgIHZvaWQgc2V0UHJvdmlzaW9uYWxIaXN0b3J5SXRlbShQ
YXNzUmVmUHRyPEhpc3RvcnlJdGVtPik7Ci0KLSAgICAgICAgdm9pZCBjb250aW51ZUxvYWRXaXRo
RGF0YShTaGFyZWRCdWZmZXIqLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBTdHJpbmcm
IHRleHRFbmNvZGluZywgY29uc3QgS1VSTCYpOyAKIAogICAgICAgICBlbnVtIExvY2FsTG9hZFBv
bGljeSB7CiAgICAgICAgICAgQWxsb3dMb2NhbExvYWRzRm9yQWxsLCAgLy8gTm8gcmVzdHJpY3Rp
b24gb24gbG9jYWwgbG9hZHMuCkBAIC01MDMsMTAgKzUzMCwxMSBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKICAgICAgICAgdm9pZCBzZXRMb2FkVHlwZShGcmFtZUxvYWRUeXBlKTsKIAotICAgICAg
ICB2b2lkIGNoZWNrTmF2aWdhdGlvblBvbGljeShjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBEb2N1
bWVudExvYWRlciosIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgTmF2aWdhdGlvblBvbGljeURlY2lzaW9uRnVuY3Rpb24sIHZvaWQqIGFy
Z3VtZW50KTsKLSAgICAgICAgdm9pZCBjaGVja05ld1dpbmRvd1BvbGljeShjb25zdCBOYXZpZ2F0
aW9uQWN0aW9uJiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxGb3JtU3RhdGU+LCBjb25zdCBTdHJpbmcmIGZyYW1l
TmFtZSk7CisgICAgcHVibGljOgorICAgICAgICB2b2lkIGNoZWNrTmF2aWdhdGlvblBvbGljeShj
b25zdCBSZXNvdXJjZVJlcXVlc3QmLCBEb2N1bWVudExvYWRlciosIFBhc3NSZWZQdHI8Rm9ybVN0
YXRlPiwgTmF2aWdhdGlvblBvbGljeURlY2lzaW9uRnVuY3Rpb24sIHZvaWQqIGFyZ3VtZW50KTsK
KworICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgY2hlY2tOZXdXaW5kb3dQb2xpY3koY29uc3Qg
TmF2aWdhdGlvbkFjdGlvbiYsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFBhc3NSZWZQdHI8Rm9y
bVN0YXRlPiwgY29uc3QgU3RyaW5nJiBmcmFtZU5hbWUpOwogCiAgICAgICAgIHZvaWQgY29udGlu
dWVBZnRlck5hdmlnYXRpb25Qb2xpY3koUG9saWN5QWN0aW9uKTsKICAgICAgICAgdm9pZCBjb250
aW51ZUFmdGVyTmV3V2luZG93UG9saWN5KFBvbGljeUFjdGlvbik7CkBAIC01MTksMTMgKzU0Nywx
MSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgY29udGludWVMb2FkQWZ0ZXJO
ZXdXaW5kb3dQb2xpY3koY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgUGFzc1JlZlB0cjxGb3JtU3Rh
dGU+LCBjb25zdCBTdHJpbmcmIGZyYW1lTmFtZSwgYm9vbCBzaG91bGRDb250aW51ZSk7CiAgICAg
ICAgIHN0YXRpYyB2b2lkIGNhbGxDb250aW51ZUZyYWdtZW50U2Nyb2xsQWZ0ZXJOYXZpZ2F0aW9u
UG9saWN5KHZvaWQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBQYXNzUmVmUHRyPEZvcm1TdGF0
ZT4sIGJvb2wgc2hvdWxkQ29udGludWUpOwogICAgICAgICB2b2lkIGNvbnRpbnVlRnJhZ21lbnRT
Y3JvbGxBZnRlck5hdmlnYXRpb25Qb2xpY3koY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgYm9vbCBz
aG91bGRDb250aW51ZSk7Ci0gICAgICAgIGJvb2wgc2hvdWxkU2Nyb2xsVG9BbmNob3IoYm9vbCBp
c0Zvcm1TdWJtaXNzaW9uLCBGcmFtZUxvYWRUeXBlIGxvYWRUeXBlLCBjb25zdCBLVVJMJiB1cmwp
OworICAgICAgICBib29sIHNob3VsZFNjcm9sbFRvQW5jaG9yKGJvb2wgaXNGb3JtU3VibWlzc2lv
biwgRnJhbWVMb2FkVHlwZSwgY29uc3QgS1VSTCYpOwogICAgICAgICB2b2lkIGFkZEhpc3RvcnlJ
dGVtRm9yRnJhZ21lbnRTY3JvbGwoKTsKIAogICAgICAgICB2b2lkIHN0b3BQb2xpY3lDaGVjaygp
OwogCi0gICAgICAgIHZvaWQgY2xvc2VEb2N1bWVudCgpOwotICAgICAgICAKICAgICAgICAgdm9p
ZCBjaGVja0xvYWRDb21wbGV0ZUZvclRoaXNGcmFtZSgpOwogCiAgICAgICAgIHZvaWQgc2V0RG9j
dW1lbnRMb2FkZXIoRG9jdW1lbnRMb2FkZXIqKTsKQEAgLTU5MCw4ICs2MTYsNiBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKICAgICAgICAgU3RyaW5nIG1fb3V0Z29pbmdSZWZlcnJlcjsKIAotICAg
ICAgICBPd25QdHI8Rm9ybVN1Ym1pc3Npb24+IG1fZGVmZXJyZWRGb3JtU3VibWlzc2lvbjsKLQog
ICAgICAgICBib29sIG1faXNFeGVjdXRpbmdKYXZhU2NyaXB0Rm9ybUFjdGlvbjsKICAgICAgICAg
Ym9vbCBtX2lzUnVubmluZ1NjcmlwdDsKIApAQCAtNjIxLDggKzY0NSw2IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogICAgICAgICBib29sIG1fY29udGFpbnNQbHVnSW5zOwogCi0gICAgICAgIFJl
ZlB0cjxIVE1MRm9ybUVsZW1lbnQ+IG1fZm9ybUFib3V0VG9CZVN1Ym1pdHRlZDsKLSAgICAgICAg
SGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gbV9mb3JtVmFsdWVzQWJvdXRUb0JlU3VibWl0dGVkOwog
ICAgICAgICBLVVJMIG1fc3VibWl0dGVkRm9ybVVSTDsKICAgICAKICAgICAgICAgVGltZXI8RnJh
bWVMb2FkZXI+IG1fcmVkaXJlY3Rpb25UaW1lcjsKSW5kZXg6IFdlYkNvcmUvcGFnZS9Db250ZXh0
TWVudUNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9Db250ZXh0TWVu
dUNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA0MjA0NCkKKysrIFdlYkNvcmUvcGFnZS9Db250ZXh0
TWVudUNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAjaW5j
bHVkZSAiRXZlbnQuaCIKICNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKICNpbmNsdWRlICJFdmVu
dE5hbWVzLmgiCisjaW5jbHVkZSAiRm9ybVN0YXRlLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNp
bmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZFJlcXVlc3QuaCIKQEAg
LTIxMiwxMCArMjEzLDEwIEBAIHZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVyOjpjb250ZXh0TWVu
dUkKICAgICAgICAgICAgIG1fY2xpZW50LT5sb29rVXBJbkRpY3Rpb25hcnkoZnJhbWUpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnT3Blbkxpbms6
Ci0gICAgICAgICAgICBpZiAoRnJhbWUqIHRhcmdldEZyYW1lID0gcmVzdWx0LnRhcmdldEZyYW1l
KCkpCi0gICAgICAgICAgICAgICAgdGFyZ2V0RnJhbWUtPmxvYWRlcigpLT5sb2FkRnJhbWVSZXF1
ZXN0V2l0aEZvcm1BbmRWYWx1ZXMoRnJhbWVMb2FkUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QocmVz
dWx0LmFic29sdXRlTGlua1VSTCgpLCAKLSAgICAgICAgICAgICAgICAgICAgZnJhbWUtPmxvYWRl
cigpLT5vdXRnb2luZ1JlZmVycmVyKCkpKSwgZmFsc2UsIGZhbHNlLCAwLCAwLCBIYXNoTWFwPFN0
cmluZywgU3RyaW5nPigpKTsKLSAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlmIChGcmFt
ZSogdGFyZ2V0RnJhbWUgPSByZXN1bHQudGFyZ2V0RnJhbWUoKSkgeworICAgICAgICAgICAgICAg
IHRhcmdldEZyYW1lLT5sb2FkZXIoKS0+bG9hZEZyYW1lUmVxdWVzdChGcmFtZUxvYWRSZXF1ZXN0
KFJlc291cmNlUmVxdWVzdChyZXN1bHQuYWJzb2x1dGVMaW5rVVJMKCksIAorICAgICAgICAgICAg
ICAgICAgICBmcmFtZS0+bG9hZGVyKCktPm91dGdvaW5nUmVmZXJyZXIoKSkpLCBmYWxzZSwgZmFs
c2UsIDAsIDApOworICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgb3Blbk5ld1dp
bmRvdyhyZXN1bHQuYWJzb2x1dGVMaW5rVVJMKCksIGZyYW1lKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0JvbGQ6CkluZGV4OiBXZWJDb3JlL3Bh
Z2UvRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9GcmFtZS5jcHAJKHJldmlz
aW9uIDQyMDQ0KQorKysgV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTczLDcgKzE3Myw2IEBAIEZyYW1lOjpGcmFtZShQYWdlKiBwYWdlLCBIVE1MRnJhbWVPd25lckUK
IEZyYW1lOjp+RnJhbWUoKQogewogICAgIHNldFZpZXcoMCk7Ci0gICAgbG9hZGVyKCktPmNsZWFy
UmVjb3JkZWRGb3JtVmFsdWVzKCk7CiAgICAgbG9hZGVyKCktPmNhbmNlbEFuZENsZWFyKCk7CiAg
ICAgCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBub3QgYmUgZG9pbmcgYWxsIHRoaXMgd29yayBp
bnNpZGUgdGhlIGRlc3RydWN0b3IKSW5kZXg6IFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2Vi
RnJhbWVMb2FkZXJDbGllbnQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJDb3JlU3Vw
cG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5tbQkocmV2aXNpb24gNDIwNDQpCisrKyBXZWJLaXQv
bWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tCSh3b3JraW5nIGNvcHkp
CkBAIC02OTksMTAgKzY5OSwxMSBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRj
aFdpbGxTCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBOU011dGFibGVEaWN0aW9uYXJ5
ICpkaWN0aW9uYXJ5ID0gW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0V2l0aENhcGFj
aXR5OmZvcm1TdGF0ZS0+dmFsdWVzKCkuc2l6ZSgpXTsKLSAgICBIYXNoTWFwPFN0cmluZywgU3Ry
aW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gZm9ybVN0YXRlLT52YWx1ZXMoKS5lbmQoKTsKLSAg
ICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGZvcm1T
dGF0ZS0+dmFsdWVzKCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBbZGljdGlv
bmFyeSBzZXRPYmplY3Q6aXQtPnNlY29uZCBmb3JLZXk6aXQtPmZpcnN0XTsKKyAgICBjb25zdCBT
dHJpbmdQYWlyVmVjdG9yJiB0ZXh0RmllbGRWYWx1ZXMgPSBmb3JtU3RhdGUtPnRleHRGaWVsZFZh
bHVlcygpOworICAgIHNpemVfdCBzaXplID0gdGV4dEZpZWxkVmFsdWVzLnNpemUoKTsKKyAgICBO
U011dGFibGVEaWN0aW9uYXJ5ICpkaWN0aW9uYXJ5ID0gW1tOU011dGFibGVEaWN0aW9uYXJ5IGFs
bG9jXSBpbml0V2l0aENhcGFjaXR5OnNpemVdOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
c2l6ZTsgKytpKQorICAgICAgICBbZGljdGlvbmFyeSBzZXRPYmplY3Q6dGV4dEZpZWxkVmFsdWVz
W2ldLnNlY29uZCBmb3JLZXk6dGV4dEZpZWxkVmFsdWVzW2ldLmZpcnN0XTsKIAogICAgIENhbGxG
b3JtRGVsZWdhdGUoZ2V0V2ViVmlldyhtX3dlYkZyYW1lLmdldCgpKSwgQHNlbGVjdG9yKGZyYW1l
OnNvdXJjZUZyYW1lOndpbGxTdWJtaXRGb3JtOndpdGhWYWx1ZXM6c3VibWlzc2lvbkxpc3RlbmVy
OiksIG1fd2ViRnJhbWUuZ2V0KCksIGtpdChmb3JtU3RhdGUtPnNvdXJjZUZyYW1lKCkpLCBraXQo
Zm9ybVN0YXRlLT5mb3JtKCkpLCBkaWN0aW9uYXJ5LCBzZXRVcFBvbGljeUxpc3RlbmVyKGZ1bmN0
aW9uKS5nZXQoKSk7CiAKSW5kZXg6IFdlYktpdC9tYWMvV2ViVmlldy9XZWJQREZWaWV3Lm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViVmlldy9XZWJQREZWaWV3Lm1tCShyZXZpc2lvbiA0
MjA0NCkKKysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJQREZWaWV3Lm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywg
MjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Nyw2ICs0Nyw3IEBACiAjaW1w
b3J0ICJXZWJWaWV3SW50ZXJuYWwuaCIKICNpbXBvcnQgPFBERktpdC9QREZLaXQuaD4KICNpbXBv
cnQgPFdlYkNvcmUvRXZlbnROYW1lcy5oPgorI2ltcG9ydCA8V2ViQ29yZS9Gb3JtU3RhdGUuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvRnJhbWUuaD4KICNpbXBvcnQgPFdlYkNvcmUvRnJhbWVMb2FkZXIu
aD4KICNpbXBvcnQgPFdlYkNvcmUvRnJhbWVMb2FkUmVxdWVzdC5oPgpAQCAtOTQxLDE2ICs5NDIs
MTcgQEAgc3RhdGljIEJPT0wgX1BERlNlbGVjdGlvbnNBcmVFcXVhbChQREZTZQogICAgICAgICBk
ZWZhdWx0OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGlmIChidXR0b24gIT0gbm9C
dXR0b24pCisgICAgaWYgKGJ1dHRvbiAhPSBub0J1dHRvbikgewogICAgICAgICBldmVudCA9IE1v
dXNlRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuY2xpY2tFdmVudCwgdHJ1ZSwgdHJ1ZSwgMCwg
W25zRXZlbnQgY2xpY2tDb3VudF0sIDAsIDAsIDAsIDAsCiAgICAgICAgICAgICBbbnNFdmVudCBt
b2RpZmllckZsYWdzXSAmIE5TQ29udHJvbEtleU1hc2ssCiAgICAgICAgICAgICBbbnNFdmVudCBt
b2RpZmllckZsYWdzXSAmIE5TQWx0ZXJuYXRlS2V5TWFzaywKICAgICAgICAgICAgIFtuc0V2ZW50
IG1vZGlmaWVyRmxhZ3NdICYgTlNTaGlmdEtleU1hc2ssCiAgICAgICAgICAgICBbbnNFdmVudCBt
b2RpZmllckZsYWdzXSAmIE5TQ29tbWFuZEtleU1hc2ssCiAgICAgICAgICAgICBidXR0b24sIDAs
IDAsIHRydWUpOworICAgIH0KIAogICAgIC8vIENhbGwgdG8gdGhlIGZyYW1lIGxvYWRlciBiZWNh
dXNlIHRoaXMgaXMgd2hlcmUgb3VyIHNlY3VyaXR5IGNoZWNrcyBhcmUgbWFkZS4KLSAgICBjb3Jl
KFtkYXRhU291cmNlIHdlYkZyYW1lXSktPmxvYWRlcigpLT5sb2FkRnJhbWVSZXF1ZXN0V2l0aEZv
cm1BbmRWYWx1ZXMoUmVzb3VyY2VSZXF1ZXN0KFVSTCksIGZhbHNlLCBmYWxzZSwgZXZlbnQuZ2V0
KCksIDAsIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+KCkpOworICAgIGNvcmUoW2RhdGFTb3VyY2Ug
d2ViRnJhbWVdKS0+bG9hZGVyKCktPmxvYWRGcmFtZVJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0KFVS
TCksIGZhbHNlLCBmYWxzZSwgZXZlbnQuZ2V0KCksIDApOwogfQogCiAtICh2b2lkKVBERlZpZXdP
cGVuUERGSW5OYXRpdmVBcHBsaWNhdGlvbjooUERGVmlldyAqKXNlbmRlcgpJbmRleDogV2ViS2l0
VG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcAko
cmV2aXNpb24gNDIwNDQpCisrKyBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0
Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDkxICs2OSw5MSBAQCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6TGF5b3V0VGVzdENvbnRyb2xsCiAKIHN0YXRpYyBKU1ZhbHVlUmVmIGR1
bXBBc1RleHRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rp
b24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBK
U1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7Ci0gICAgTGF5
b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSByZWludGVycHJldF9jYXN0PExheW91dFRl
c3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBMYXlv
dXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250
cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAgICBjb250cm9sbGVy
LT5zZXREdW1wQXNUZXh0KHRydWUpOwogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChj
b250ZXh0KTsKIH0KIAogc3RhdGljIEpTVmFsdWVSZWYgZHVtcEFzUERGQ2FsbGJhY2soSlNDb250
ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2Jq
ZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwg
SlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250
cm9sbGVyID0gcmVpbnRlcnByZXRfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0
R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRy
b2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJp
dmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgY29udHJvbGxlci0+c2V0RHVtcEFzUERGKHRydWUpOwog
ICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIH0KIAogc3RhdGljIEpT
VmFsdWVSZWYgZHVtcEJhY2tGb3J3YXJkTGlzdENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0
LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFy
Z3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4
Y2VwdGlvbikKIHsKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHJlaW50
ZXJwcmV0X2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhp
c09iamVjdCkpOworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGlj
X2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVj
dCkpOwogICAgIGNvbnRyb2xsZXItPnNldER1bXBCYWNrRm9yd2FyZExpc3QodHJ1ZSk7CiAgICAg
cmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogfQogCiBzdGF0aWMgSlNWYWx1
ZVJlZiBkdW1wQ2hpbGRGcmFtZXNBc1RleHRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwg
SlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1
bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNl
cHRpb24pCiB7Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSByZWludGVy
cHJldF9jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNP
YmplY3QpKTsKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19j
YXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3Qp
KTsKICAgICBjb250cm9sbGVyLT5zZXREdW1wQ2hpbGRGcmFtZXNBc1RleHQodHJ1ZSk7CiAgICAg
cmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogfQogCiBzdGF0aWMgSlNWYWx1
ZVJlZiBkdW1wQ2hpbGRGcmFtZVNjcm9sbFBvc2l0aW9uc0NhbGxiYWNrKEpTQ29udGV4dFJlZiBj
b250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6
ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVS
ZWYqIGV4Y2VwdGlvbikKIHsKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9
IHJlaW50ZXJwcmV0X2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZh
dGUodGhpc09iamVjdCkpOworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0g
c3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhp
c09iamVjdCkpOwogICAgIGNvbnRyb2xsZXItPnNldER1bXBDaGlsZEZyYW1lU2Nyb2xsUG9zaXRp
b25zKHRydWUpOwogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIH0K
IAogc3RhdGljIEpTVmFsdWVSZWYgZHVtcERhdGFiYXNlQ2FsbGJhY2tzQ2FsbGJhY2soSlNDb250
ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2Jq
ZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwg
SlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250
cm9sbGVyID0gcmVpbnRlcnByZXRfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0
R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRy
b2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJp
dmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgY29udHJvbGxlci0+c2V0RHVtcERhdGFiYXNlQ2FsbGJh
Y2tzKHRydWUpOwogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIH0K
IAogc3RhdGljIEpTVmFsdWVSZWYgZHVtcERPTUFzV2ViQXJjaGl2ZUNhbGxiYWNrKEpTQ29udGV4
dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVj
dCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpT
VmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJv
bGxlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdl
dFByaXZhdGUodGhpc09iamVjdCkpOworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9s
bGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZh
dGUodGhpc09iamVjdCkpOwogICAgIGNvbnRyb2xsZXItPnNldER1bXBET01Bc1dlYkFyY2hpdmUo
dHJ1ZSk7CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogfQogCiBz
dGF0aWMgSlNWYWx1ZVJlZiBkdW1wRWRpdGluZ0NhbGxiYWNrc0NhbGxiYWNrKEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwg
c2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbikKIHsKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxl
ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFBy
aXZhdGUodGhpc09iamVjdCkpOworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVy
ID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUo
dGhpc09iamVjdCkpOwogICAgIGNvbnRyb2xsZXItPnNldER1bXBFZGl0aW5nQ2FsbGJhY2tzKHRy
dWUpOwogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIH0KIAogc3Rh
dGljIEpTVmFsdWVSZWYgZHVtcFJlc291cmNlTG9hZENhbGxiYWNrc0NhbGxiYWNrKEpTQ29udGV4
dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVj
dCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpT
VmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJv
bGxlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdl
dFByaXZhdGUodGhpc09iamVjdCkpOworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9s
bGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZh
dGUodGhpc09iamVjdCkpOwogICAgIGNvbnRyb2xsZXItPnNldER1bXBSZXNvdXJjZUxvYWRDYWxs
YmFja3ModHJ1ZSk7CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwog
fQogCiBzdGF0aWMgSlNWYWx1ZVJlZiBkdW1wU2VsZWN0aW9uUmVjdENhbGxiYWNrKEpTQ29udGV4
dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVj
dCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpT
VmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJv
bGxlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdl
dFByaXZhdGUodGhpc09iamVjdCkpOworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9s
bGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZh
dGUodGhpc09iamVjdCkpOwogICAgIGNvbnRyb2xsZXItPnNldER1bXBTZWxlY3Rpb25SZWN0KHRy
dWUpOwogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIH0KIAogc3Rh
dGljIEpTVmFsdWVSZWYgZHVtcFNvdXJjZUFzV2ViQXJjaGl2ZUNhbGxiYWNrKEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwg
c2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbikKIHsKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxl
ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFBy
aXZhdGUodGhpc09iamVjdCkpOworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVy
ID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUo
dGhpc09iamVjdCkpOwogICAgIGNvbnRyb2xsZXItPnNldER1bXBTb3VyY2VBc1dlYkFyY2hpdmUo
dHJ1ZSk7CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogfQogCiBz
dGF0aWMgSlNWYWx1ZVJlZiBkdW1wU3RhdHVzQ2FsbGJhY2tzQ2FsbGJhY2soSlNDb250ZXh0UmVm
IGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBz
aXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1
ZVJlZiogZXhjZXB0aW9uKQogewotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVy
ID0gcmVpbnRlcnByZXRfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJp
dmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIg
PSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0
aGlzT2JqZWN0KSk7CiAgICAgY29udHJvbGxlci0+c2V0RHVtcFN0YXR1c0NhbGxiYWNrcyh0cnVl
KTsKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiB9CiAKIHN0YXRp
YyBKU1ZhbHVlUmVmIGR1bXBUaXRsZUNoYW5nZXNDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4
dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBh
cmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBl
eGNlcHRpb24pCiB7Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSByZWlu
dGVycHJldF9jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRo
aXNPYmplY3QpKTsKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRp
Y19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmpl
Y3QpKTsKICAgICBjb250cm9sbGVyLT5zZXREdW1wVGl0bGVDaGFuZ2VzKHRydWUpOwogICAgIHJl
dHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIH0KQEAgLTE2Myw3ICsxNjMsNyBA
QCBzdGF0aWMgSlNWYWx1ZVJlZiBwYXRoVG9Mb2NhbFJlc291cmNlQ2FsCiAgICAgaWYgKGFyZ3Vt
ZW50Q291bnQgPCAxKQogICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4
dCk7CiAKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHJlaW50ZXJwcmV0
X2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVj
dCkpOworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8
TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwog
ICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBsb2NhbFBhdGgoQWRvcHQsIEpTVmFsdWVUb1N0
cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKICAgICBBU1NFUlQo
ISpleGNlcHRpb24pOwogCkBAIC0xNzYsNyArMTc2LDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgcGF0
aFRvTG9jYWxSZXNvdXJjZUNhbAogCiBzdGF0aWMgSlNWYWx1ZVJlZiByZXBhaW50U3dlZXBIb3Jp
em9udGFsbHlDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rp
b24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBK
U1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7Ci0gICAgTGF5
b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSByZWludGVycHJldF9jYXN0PExheW91dFRl
c3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBMYXlv
dXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250
cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAgICBjb250cm9sbGVy
LT5zZXRUZXN0UmVwYWludFN3ZWVwSG9yaXpvbnRhbGx5KHRydWUpOwogICAgIHJldHVybiBKU1Zh
bHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIH0KQEAgLTE4NiwxNCArMTg2LDE0IEBAIHN0YXRp
YyBKU1ZhbHVlUmVmIHNldENhbGxDbG9zZU9uV2ViVmlld3MKICAgICBpZiAoYXJndW1lbnRDb3Vu
dCA8IDEpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIAot
ICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gcmVpbnRlcnByZXRfY2FzdDxM
YXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Cisg
ICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRU
ZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgY29u
dHJvbGxlci0+c2V0Q2FsbENsb3NlT25XZWJWaWV3cyhKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQs
IGFyZ3VtZW50c1swXSkpOwogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0
KTsKIH0KIAogc3RhdGljIEpTVmFsdWVSZWYgc2V0Q2FuT3BlbldpbmRvd3NDYWxsYmFjayhKU0Nv
bnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNP
YmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1td
LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNv
bnRyb2xsZXIgPSByZWludGVycHJldF9jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmpl
Y3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29u
dHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQ
cml2YXRlKHRoaXNPYmplY3QpKTsKICAgICBjb250cm9sbGVyLT5zZXRDYW5PcGVuV2luZG93cyh0
cnVlKTsKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiB9CkBAIC0y
MDMsMjggKzIwMywyOCBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBzZXRDbG9zZVJlbWFpbmluZ1dpbmRv
CiAgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQogICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCk7CiAKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxl
ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFBy
aXZhdGUodGhpc09iamVjdCkpOworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVy
ID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUo
dGhpc09iamVjdCkpOwogICAgIGNvbnRyb2xsZXItPnNldENsb3NlUmVtYWluaW5nV2luZG93c1do
ZW5Db21wbGV0ZShKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsIGFyZ3VtZW50c1swXSkpOwogICAg
IHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIH0KIAogc3RhdGljIEpTVmFs
dWVSZWYgdGVzdE9uc2NyZWVuQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0
UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3Vu
dCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQog
ewotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gcmVpbnRlcnByZXRfY2Fz
dDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7
CisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlv
dXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAg
Y29udHJvbGxlci0+c2V0VGVzdE9uc2NyZWVuKHRydWUpOwogICAgIHJldHVybiBKU1ZhbHVlTWFr
ZVVuZGVmaW5lZChjb250ZXh0KTsKIH0KIAogc3RhdGljIEpTVmFsdWVSZWYgdGVzdFJlcGFpbnRD
YWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2Jq
ZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVm
IGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7Ci0gICAgTGF5b3V0VGVzdENv
bnRyb2xsZXIqIGNvbnRyb2xsZXIgPSByZWludGVycHJldF9jYXN0PExheW91dFRlc3RDb250cm9s
bGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBMYXlvdXRUZXN0Q29u
dHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4o
SlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAgICBjb250cm9sbGVyLT5zZXRUZXN0
UmVwYWludCh0cnVlKTsKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7
CiB9CiAKIHN0YXRpYyBKU1ZhbHVlUmVmIGFkZEZpbGVUb1Bhc3RlYm9hcmRPbkRyYWdDYWxsYmFj
ayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVm
IHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3Vt
ZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xs
ZXIqIGNvbnRyb2xsZXIgPSByZWludGVycHJldF9jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4o
SlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxl
ciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmpl
Y3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAgICBjb250cm9sbGVyLT5zZXRBZGRGaWxlVG9Q
YXN0ZWJvYXJkT25EcmFnKHRydWUpOwogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChj
b250ZXh0KTsKIH0KQEAgLTIzOCw3ICsyMzgsNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBhZGREaXNh
bGxvd2VkVVJMQ2FsbGJhCiAgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHVybChBZG9wdCwg
SlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOwog
ICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CiAKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29u
dHJvbGxlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVj
dEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250
cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFBy
aXZhdGUodGhpc09iamVjdCkpOwogICAgIGNvbnRyb2xsZXItPmFkZERpc2FsbG93ZWRVUkwodXJs
LmdldCgpKTsKIAogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKQEAg
LTI0Nyw3ICsyNDcsNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBhZGREaXNhbGxvd2VkVVJMQ2FsbGJh
CiBzdGF0aWMgSlNWYWx1ZVJlZiBjbGVhckFsbERhdGFiYXNlc0NhbGxiYWNrKEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwg
c2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbikKIHsKICAgICAvLyBIYXMgbWFjICYgd2luZG93cyBpbXBsZW1lbnRh
dGlvbgotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gcmVpbnRlcnByZXRf
Y2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0
KSk7CisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxM
YXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAg
ICAgY29udHJvbGxlci0+Y2xlYXJBbGxEYXRhYmFzZXMoKTsKIAogICAgIHJldHVybiBKU1ZhbHVl
TWFrZVVuZGVmaW5lZChjb250ZXh0KTsKQEAgLTI1Niw3ICsyNTYsNyBAQCBzdGF0aWMgSlNWYWx1
ZVJlZiBjbGVhckFsbERhdGFiYXNlc0NhbGxiCiBzdGF0aWMgSlNWYWx1ZVJlZiBjbGVhckJhY2tG
b3J3YXJkTGlzdENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5j
dGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0
IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKICAgICAv
LyBIYXMgbWFjICYgd2luZG93cyBpbXBsZW1lbnRhdGlvbgotICAgIExheW91dFRlc3RDb250cm9s
bGVyKiBjb250cm9sbGVyID0gcmVpbnRlcnByZXRfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+
KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgTGF5b3V0VGVzdENvbnRyb2xs
ZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2Jq
ZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgY29udHJvbGxlci0+Y2xlYXJCYWNrRm9y
d2FyZExpc3QoKTsKIAogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsK
QEAgLTI2NSw3ICsyNjUsNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBjbGVhckJhY2tGb3J3YXJkTGlz
dENhCiBzdGF0aWMgSlNWYWx1ZVJlZiBjbGVhclBlcnNpc3RlbnRVc2VyU3R5bGVTaGVldENhbGxi
YWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RS
ZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJn
dW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKICAgICAvLyBIYXMgbWFjICYgd2lu
ZG93cyBpbXBsZW1lbnRhdGlvbgotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVy
ID0gcmVpbnRlcnByZXRfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJp
dmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIg
PSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0
aGlzT2JqZWN0KSk7CiAgICAgY29udHJvbGxlci0+Y2xlYXJQZXJzaXN0ZW50VXNlclN0eWxlU2hl
ZXQoKTsKIAogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKQEAgLTI4
MCw3ICsyODAsNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBkZWNvZGVIb3N0TmFtZUNhbGxiYWNrCiAg
ICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IG5hbWUoQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0Nv
cHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKICAgICBBU1NFUlQoISpleGNl
cHRpb24pOwogCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSByZWludGVy
cHJldF9jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNP
YmplY3QpKTsKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19j
YXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3Qp
KTsKICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gZGVjb2RlZEhvc3ROYW1lKEFkb3B0LCBj
b250cm9sbGVyLT5jb3B5RGVjb2RlZEhvc3ROYW1lKG5hbWUuZ2V0KCkpKTsKICAgICByZXR1cm4g
SlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4dCwgZGVjb2RlZEhvc3ROYW1lLmdldCgpKTsKIH0KQEAg
LTI4OCw3ICsyODgsNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBkZWNvZGVIb3N0TmFtZUNhbGxiYWNr
CiBzdGF0aWMgSlNWYWx1ZVJlZiBkaXNwbGF5Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQs
IEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJn
dW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhj
ZXB0aW9uKQogewogICAgIC8vIEhhcyBtYWMgJiB3aW5kb3dzIGltcGxlbWVudGF0aW9uCi0gICAg
TGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSByZWludGVycHJldF9jYXN0PExheW91
dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBM
YXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RD
b250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAgICBjb250cm9s
bGVyLT5kaXNwbGF5KCk7CiAKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4
dCk7CkBAIC0zMDMsNyArMzAzLDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgZW5jb2RlSG9zdE5hbWVD
YWxsYmFjawogICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBuYW1lKEFkb3B0LCBKU1ZhbHVl
VG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7CiAgICAgQVNT
RVJUKCEqZXhjZXB0aW9uKTsKIAotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVy
ID0gcmVpbnRlcnByZXRfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJp
dmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIg
PSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0
aGlzT2JqZWN0KSk7CiAgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGVuY29kZWRIb3N0TmFt
ZShBZG9wdCwgY29udHJvbGxlci0+Y29weUVuY29kZWRIb3N0TmFtZShuYW1lLmdldCgpKSk7CiAg
ICAgcmV0dXJuIEpTVmFsdWVNYWtlU3RyaW5nKGNvbnRleHQsIGVuY29kZWRIb3N0TmFtZS5nZXQo
KSk7CiB9CkBAIC0zMjcsNyArMzI3LDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgZXhlY0NvbW1hbmRD
YWxsYmFjayhKUwogICAgICAgICB2YWx1ZS5hZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiIikpOwogCiAKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHJl
aW50ZXJwcmV0X2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUo
dGhpc09iamVjdCkpOworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3Rh
dGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09i
amVjdCkpOwogICAgIGNvbnRyb2xsZXItPmV4ZWNDb21tYW5kKG5hbWUuZ2V0KCksIHZhbHVlLmdl
dCgpKTsKIAogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKQEAgLTM0
Myw3ICszNDMsNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBpc0NvbW1hbmRFbmFibGVkQ2FsbGJhCiAg
ICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IG5hbWUoQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0Nv
cHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKICAgICBBU1NFUlQoISpleGNl
cHRpb24pOwogCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSByZWludGVy
cHJldF9jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNP
YmplY3QpKTsKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19j
YXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3Qp
KTsKIAogICAgIHJldHVybiBKU1ZhbHVlTWFrZUJvb2xlYW4oY29udGV4dCwgY29udHJvbGxlci0+
aXNDb21tYW5kRW5hYmxlZChuYW1lLmdldCgpKSk7CiB9CkBAIC0zNTEsNyArMzUxLDcgQEAgc3Rh
dGljIEpTVmFsdWVSZWYgaXNDb21tYW5kRW5hYmxlZENhbGxiYQogc3RhdGljIEpTVmFsdWVSZWYg
a2VlcFdlYkhpc3RvcnlDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYg
ZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBj
b25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7CiAg
ICAgLy8gSGFzIG1hYyBpbXBsZW1lbnRhdGlvbgotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBj
b250cm9sbGVyID0gcmVpbnRlcnByZXRfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2Jq
ZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNv
bnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0
UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgY29udHJvbGxlci0+a2VlcFdlYkhpc3RvcnkoKTsK
IAogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKQEAgLTM2MSw3ICsz
NjEsNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBub3RpZnlEb25lQ2FsbGJhY2soSlNDCiB7CiAgICAg
Ly8gSGFzIG1hYyAmIHdpbmRvd3MgaW1wbGVtZW50YXRpb24KICAgICAvLyBNYXkgYmUgYWJsZSB0
byBiZSBtYWRlIHBsYXRmb3JtIGluZGVwZW5kYW50IGJ5IHVzaW5nIHNoYXJlZCBXb3JrUXVldWUK
LSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8
TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwor
ICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0
VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwogICAgIGNv
bnRyb2xsZXItPm5vdGlmeURvbmUoKTsKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQo
Y29udGV4dCk7CiB9CkBAIC0zNzYsNyArMzc2LDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgcXVldWVC
YWNrTmF2aWdhdGlvbkNhbAogICAgIGRvdWJsZSBob3dGYXJCYWNrRG91YmxlID0gSlNWYWx1ZVRv
TnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKTsKICAgICBBU1NFUlQoISpl
eGNlcHRpb24pOwogCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSByZWlu
dGVycHJldF9jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRo
aXNPYmplY3QpKTsKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRp
Y19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmpl
Y3QpKTsKICAgICBjb250cm9sbGVyLT5xdWV1ZUJhY2tOYXZpZ2F0aW9uKHN0YXRpY19jYXN0PGlu
dD4oaG93RmFyQmFja0RvdWJsZSkpOwogCiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVk
KGNvbnRleHQpOwpAQCAtMzkyLDcgKzM5Miw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIHF1ZXVlRm9y
d2FyZE5hdmlnYXRpb24KICAgICBkb3VibGUgaG93RmFyRm9yd2FyZERvdWJsZSA9IEpTVmFsdWVU
b051bWJlcihjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbik7CiAgICAgQVNTRVJUKCEq
ZXhjZXB0aW9uKTsKIAotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gcmVp
bnRlcnByZXRfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0
aGlzT2JqZWN0KSk7CisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0
aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2Jq
ZWN0KSk7CiAgICAgY29udHJvbGxlci0+cXVldWVGb3J3YXJkTmF2aWdhdGlvbihzdGF0aWNfY2Fz
dDxpbnQ+KGhvd0ZhckZvcndhcmREb3VibGUpKTsKIAogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVu
ZGVmaW5lZChjb250ZXh0KTsKQEAgLTQxNSw3ICs0MTUsNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBx
dWV1ZUxvYWRDYWxsYmFjayhKU0NvCiAgICAgfSBlbHNlCiAgICAgICAgIHRhcmdldC5hZG9wdChK
U1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiIikpOwogCi0gICAgTGF5b3V0VGVzdENvbnRy
b2xsZXIqIGNvbnRyb2xsZXIgPSByZWludGVycHJldF9jYXN0PExheW91dFRlc3RDb250cm9sbGVy
Kj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBMYXlvdXRUZXN0Q29udHJv
bGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNP
YmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAgICBjb250cm9sbGVyLT5xdWV1ZUxvYWQo
dXJsLmdldCgpLCB0YXJnZXQuZ2V0KCkpOwogCiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZp
bmVkKGNvbnRleHQpOwpAQCAtNDI2LDcgKzQyNiw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIHF1ZXVl
UmVsb2FkQ2FsbGJhY2soSlMKICAgICAvLyBIYXMgbWFjICYgd2luZG93cyBpbXBsZW1lbnRhdGlv
bgogICAgIC8vIE1heSBiZSBhYmxlIHRvIGJlIG1hZGUgcGxhdGZvcm0gaW5kZXBlbmRhbnQgYnkg
dXNpbmcgc2hhcmVkIFdvcmtRdWV1ZQogCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRy
b2xsZXIgPSByZWludGVycHJldF9jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RH
ZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJv
bGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2
YXRlKHRoaXNPYmplY3QpKTsKICAgICBjb250cm9sbGVyLT5xdWV1ZVJlbG9hZCgpOwogCiAgICAg
cmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwpAQCAtNDQyLDcgKzQ0Miw3IEBA
IHN0YXRpYyBKU1ZhbHVlUmVmIHF1ZXVlU2NyaXB0Q2FsbGJhY2soSlMKICAgICBKU1JldGFpblB0
cjxKU1N0cmluZ1JlZj4gc2NyaXB0KEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQs
IGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7CiAgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKIAot
ICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gcmVpbnRlcnByZXRfY2FzdDxM
YXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Cisg
ICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRU
ZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgY29u
dHJvbGxlci0+cXVldWVTY3JpcHQoc2NyaXB0LmdldCgpKTsKIAogICAgIHJldHVybiBKU1ZhbHVl
TWFrZVVuZGVmaW5lZChjb250ZXh0KTsKQEAgLTQ1NCw3ICs0NTQsNyBAQCBzdGF0aWMgSlNWYWx1
ZVJlZiBzZXRBY2NlcHRzRWRpdGluZ0NhbGxiCiAgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAKLSAgICBMYXlv
dXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8TGF5b3V0VGVz
dENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIExheW91
dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRy
b2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwogICAgIGNvbnRyb2xsZXIt
PnNldEFjY2VwdHNFZGl0aW5nKEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzBd
KSk7CiAKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CkBAIC00NjYs
NyArNDY2LDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgc2V0QXV0aG9yQW5kVXNlclN0eWxlcwogICAg
IGlmIChhcmd1bWVudENvdW50IDwgMSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZp
bmVkKGNvbnRleHQpOwogCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBy
ZWludGVycHJldF9jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRl
KHRoaXNPYmplY3QpKTsKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0
YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNP
YmplY3QpKTsKICAgICBjb250cm9sbGVyLT5zZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZChK
U1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsIGFyZ3VtZW50c1swXSkpOwogCiAgICAgcmV0dXJuIEpT
VmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwpAQCAtNDgyLDcgKzQ4Miw3IEBAIHN0YXRpYyBK
U1ZhbHVlUmVmIHNldEN1c3RvbVBvbGljeURlbGVnYXQKICAgICBpZiAoYXJndW1lbnRDb3VudCA+
PSAyKQogICAgICAgICBwZXJtaXNzaXZlID0gSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1
bWVudHNbMV0pOwogCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSByZWlu
dGVycHJldF9jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRo
aXNPYmplY3QpKTsKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRp
Y19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmpl
Y3QpKTsKICAgICBjb250cm9sbGVyLT5zZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZShKU1ZhbHVlVG9C
b29sZWFuKGNvbnRleHQsIGFyZ3VtZW50c1swXSksIHBlcm1pc3NpdmUpOwogCiAgICAgcmV0dXJu
IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwpAQCAtNDk0LDcgKzQ5NCw3IEBAIHN0YXRp
YyBKU1ZhbHVlUmVmIHNldERhdGFiYXNlUXVvdGFDYWxsYmEKICAgICBpZiAoYXJndW1lbnRDb3Vu
dCA8IDEpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIAot
ICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gcmVpbnRlcnByZXRfY2FzdDxM
YXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Cisg
ICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRU
ZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAKICAgICBk
b3VibGUgcXVvdGEgPSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzBdLCBOVUxM
KTsKICAgICBpZiAoIWlzbmFuKHF1b3RhKSkKQEAgLTUxMCw3ICs1MTAsNyBAQCBzdGF0aWMgSlNW
YWx1ZVJlZiBzZXRJY29uRGF0YWJhc2VFbmFibGVkCiAgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAx
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAKLSAgICBM
YXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8TGF5b3V0
VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIExh
eW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENv
bnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwogICAgIGNvbnRyb2xs
ZXItPnNldEljb25EYXRhYmFzZUVuYWJsZWQoSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1
bWVudHNbMF0pKTsKIAogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsK
QEAgLTUyMSw3ICs1MjEsNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBzZXRKYXZhU2NyaXB0UHJvZmls
aW5nCiAgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQogICAgICAgICByZXR1cm4gSlNWYWx1ZU1h
a2VVbmRlZmluZWQoY29udGV4dCk7CiAKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJv
bGxlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdl
dFByaXZhdGUodGhpc09iamVjdCkpOworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9s
bGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZh
dGUodGhpc09iamVjdCkpOwogICAgIGNvbnRyb2xsZXItPnNldEphdmFTY3JpcHRQcm9maWxpbmdF
bmFibGVkKEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzBdKSk7CiAKICAgICBy
ZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CkBAIC01MzMsNyArNTMzLDcgQEAg
c3RhdGljIEpTVmFsdWVSZWYgc2V0TWFpbkZyYW1lSXNGaXJzdFJlcwogICAgIGlmIChhcmd1bWVu
dENvdW50IDwgMSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQp
OwogCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSByZWludGVycHJldF9j
YXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3Qp
KTsKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExh
eW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAg
ICBjb250cm9sbGVyLT5zZXRNYWluRnJhbWVJc0ZpcnN0UmVzcG9uZGVyKEpTVmFsdWVUb0Jvb2xl
YW4oY29udGV4dCwgYXJndW1lbnRzWzBdKSk7CiAKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRl
ZmluZWQoY29udGV4dCk7CkBAIC01NDgsNyArNTQ4LDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgc2V0
UGVyc2lzdGVudFVzZXJTdHlsZQogICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBwYXRoKEFk
b3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9u
KSk7CiAgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKIAotICAgIExheW91dFRlc3RDb250cm9sbGVy
KiBjb250cm9sbGVyID0gcmVpbnRlcnByZXRfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpT
T2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIq
IGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0
R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgY29udHJvbGxlci0+c2V0UGVyc2lzdGVudFVz
ZXJTdHlsZVNoZWV0TG9jYXRpb24ocGF0aC5nZXQoKSk7CiAKICAgICByZXR1cm4gSlNWYWx1ZU1h
a2VVbmRlZmluZWQoY29udGV4dCk7CkBAIC01NjAsNyArNTYwLDcgQEAgc3RhdGljIEpTVmFsdWVS
ZWYgc2V0UHJpdmF0ZUJyb3dzaW5nRW5hYgogICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogCi0gICAgTGF5b3V0
VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSByZWludGVycHJldF9jYXN0PExheW91dFRlc3RD
b250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBMYXlvdXRU
ZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9s
bGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAgICBjb250cm9sbGVyLT5z
ZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkKEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgYXJndW1l
bnRzWzBdKSk7CiAKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CkBA
IC01NzIsNyArNTcyLDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgc2V0VGFiS2V5Q3ljbGVzVGhyb3Vn
aAogICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtl
VW5kZWZpbmVkKGNvbnRleHQpOwogCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xs
ZXIgPSByZWludGVycHJldF9jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQ
cml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxl
ciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRl
KHRoaXNPYmplY3QpKTsKICAgICBjb250cm9sbGVyLT5zZXRUYWJLZXlDeWNsZXNUaHJvdWdoRWxl
bWVudHMoSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNbMF0pKTsKIAogICAgIHJl
dHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKQEAgLTU4NCw3ICs1ODQsNyBAQCBz
dGF0aWMgSlNWYWx1ZVJlZiBzZXRVc2VEYXNoYm9hcmRDb21wYXRpCiAgICAgaWYgKGFyZ3VtZW50
Q291bnQgPCAxKQogICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7
CiAKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHJlaW50ZXJwcmV0X2Nh
c3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkp
OworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5
b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwogICAg
IGNvbnRyb2xsZXItPnNldFVzZURhc2hib2FyZENvbXBhdGliaWxpdHlNb2RlKEpTVmFsdWVUb0Jv
b2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzBdKSk7CiAKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCk7CkBAIC01OTYsNyArNTk2LDcgQEAgc3RhdGljIEpTVmFsdWVSZWYg
c2V0VXNlclN0eWxlU2hlZXRFbmFibAogICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogCi0gICAgTGF5b3V0VGVz
dENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSByZWludGVycHJldF9jYXN0PExheW91dFRlc3RDb250
cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBMYXlvdXRUZXN0
Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVy
Kj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAgICBjb250cm9sbGVyLT5zZXRV
c2VyU3R5bGVTaGVldEVuYWJsZWQoSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNb
MF0pKTsKIAogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKQEAgLTYx
MSw3ICs2MTEsNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBzZXRVc2VyU3R5bGVTaGVldExvY2F0CiAg
ICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHBhdGgoQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0Nv
cHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKICAgICBBU1NFUlQoISpleGNl
cHRpb24pOwogCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSByZWludGVy
cHJldF9jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNP
YmplY3QpKTsKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19j
YXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3Qp
KTsKICAgICBjb250cm9sbGVyLT5zZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKHBhdGguZ2V0KCkp
OwogCiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwpAQCAtNjIzLDcg
KzYyMyw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIHNldFdpbmRvd0lzS2V5Q2FsbGJhY2sKICAgICBp
ZiAoYXJndW1lbnRDb3VudCA8IDEpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5l
ZChjb250ZXh0KTsKIAotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gcmVp
bnRlcnByZXRfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0
aGlzT2JqZWN0KSk7CisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0
aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2Jq
ZWN0KSk7CiAgICAgY29udHJvbGxlci0+c2V0V2luZG93SXNLZXkoSlNWYWx1ZVRvQm9vbGVhbihj
b250ZXh0LCBhcmd1bWVudHNbMF0pKTsKIAogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5l
ZChjb250ZXh0KTsKQEAgLTYzMiw3ICs2MzIsNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBzZXRXaW5k
b3dJc0tleUNhbGxiYWNrCiBzdGF0aWMgSlNWYWx1ZVJlZiB3YWl0VW50aWxEb25lQ2FsbGJhY2so
SlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0
aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVu
dHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewogICAgIC8vIEhhcyBtYWMgJiB3aW5kb3dz
IGltcGxlbWVudGF0aW9uCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBy
ZWludGVycHJldF9jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRl
KHRoaXNPYmplY3QpKTsKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0
YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNP
YmplY3QpKTsKICAgICBjb250cm9sbGVyLT5zZXRXYWl0VG9EdW1wKHRydWUpOwogCiAgICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwpAQCAtNjQxLDcgKzY0MSw3IEBAIHN0
YXRpYyBKU1ZhbHVlUmVmIHdhaXRVbnRpbERvbmVDYWxsYmFjaygKIHN0YXRpYyBKU1ZhbHVlUmVm
IHdpbmRvd0NvdW50Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1
bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29u
c3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewogICAg
IC8vIEhhcyBtYWMgaW1wbGVtZW50YXRpb24KLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29u
dHJvbGxlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVj
dEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250
cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFBy
aXZhdGUodGhpc09iamVjdCkpOwogICAgIGludCB3aW5kb3dzID0gY29udHJvbGxlci0+d2luZG93
Q291bnQoKTsKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dCwgd2luZG93cyk7
CiB9CkBAIC02NTIsNyArNjUyLDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgc2V0UG9wdXBCbG9ja2lu
Z0VuYWJsZQogICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNv
bnRyb2xsZXIgPSByZWludGVycHJldF9jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmpl
Y3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29u
dHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQ
cml2YXRlKHRoaXNPYmplY3QpKTsKICAgICBjb250cm9sbGVyLT5zZXRQb3B1cEJsb2NraW5nRW5h
YmxlZChKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsIGFyZ3VtZW50c1swXSkpOwogCiAgICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwpAQCAtNjYzLDcgKzY2Myw3IEBAIHN0
YXRpYyBKU1ZhbHVlUmVmIHNldFNtYXJ0SW5zZXJ0RGVsZXRlRW4KICAgICBpZiAoYXJndW1lbnRD
b3VudCA8IDEpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsK
IAotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gcmVpbnRlcnByZXRfY2Fz
dDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7
CisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlv
dXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAg
Y29udHJvbGxlci0+c2V0U21hcnRJbnNlcnREZWxldGVFbmFibGVkKEpTVmFsdWVUb0Jvb2xlYW4o
Y29udGV4dCwgYXJndW1lbnRzWzBdKSk7CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVk
KGNvbnRleHQpOwogfQpAQCAtNjczLDIxICs2NzMsMjEgQEAgc3RhdGljIEpTVmFsdWVSZWYgc2V0
U2VsZWN0VHJhaWxpbmdXaGl0ZQogICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogCi0gICAgTGF5b3V0VGVzdENv
bnRyb2xsZXIqIGNvbnRyb2xsZXIgPSByZWludGVycHJldF9jYXN0PExheW91dFRlc3RDb250cm9s
bGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBMYXlvdXRUZXN0Q29u
dHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4o
SlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAgICBjb250cm9sbGVyLT5zZXRTZWxl
Y3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVkKEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgYXJn
dW1lbnRzWzBdKSk7CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwog
fQogCiBzdGF0aWMgSlNWYWx1ZVJlZiBzZXRTdG9wUHJvdmlzaW9uYWxGcmFtZUxvYWRzQ2FsbGJh
Y2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJl
ZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1
bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewotICAgIExheW91dFRlc3RDb250cm9s
bGVyKiBjb250cm9sbGVyID0gcmVpbnRlcnByZXRfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+
KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgTGF5b3V0VGVzdENvbnRyb2xs
ZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2Jq
ZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgY29udHJvbGxlci0+c2V0U3RvcFByb3Zp
c2lvbmFsRnJhbWVMb2Fkcyh0cnVlKTsKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQo
Y29udGV4dCk7CiB9CiAKIHN0YXRpYyBKU1ZhbHVlUmVmIGVsZW1lbnREb2VzQXV0b0NvbXBsZXRl
Rm9yRWxlbWVudFdpdGhJZENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJl
ZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQs
IGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsK
LSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8
TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwor
ICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0
VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwogICAgIEpT
UmV0YWluUHRyPEpTU3RyaW5nUmVmPiBlbGVtZW50SWQoQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0Nv
cHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKICAgICBBU1NFUlQoISpleGNl
cHRpb24pOwogCkBAIC03MDgsNyArNzA4LDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgcGF1c2VBbmlt
YXRpb25BdFRpbWVPbgogICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBlbGVtZW50SWQoQWRv
cHQsIEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzJdLCBleGNlcHRpb24p
KTsKICAgICBBU1NFUlQoISpleGNlcHRpb24pOwogCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIq
IGNvbnRyb2xsZXIgPSByZWludGVycHJldF9jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNP
YmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciog
Y29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RH
ZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VCb29sZWFuKGNv
bnRleHQsIGNvbnRyb2xsZXItPnBhdXNlQW5pbWF0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKGFu
aW1hdGlvbk5hbWUuZ2V0KCksIHRpbWUsIGVsZW1lbnRJZC5nZXQoKSkpOwogfQogCkBAIC03MjQs
NyArNzI0LDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgcGF1c2VUcmFuc2l0aW9uQXRUaW1lTwogICAg
IEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBlbGVtZW50SWQoQWRvcHQsIEpTVmFsdWVUb1N0cmlu
Z0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzJdLCBleGNlcHRpb24pKTsKICAgICBBU1NFUlQoISpl
eGNlcHRpb24pOwogCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSByZWlu
dGVycHJldF9jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRo
aXNPYmplY3QpKTsKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRp
Y19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmpl
Y3QpKTsKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VCb29sZWFuKGNvbnRleHQsIGNvbnRyb2xsZXIt
PnBhdXNlVHJhbnNpdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZChwcm9wZXJ0eU5hbWUuZ2V0KCks
IHRpbWUsIGVsZW1lbnRJZC5nZXQoKSkpOwogfQogCkBAIC03MzMsMzQgKzczMyw0MSBAQCBzdGF0
aWMgSlNWYWx1ZVJlZiBudW1iZXJPZkFjdGl2ZUFuaW1hdGlvCiAgICAgaWYgKGFyZ3VtZW50Q291
bnQgIT0gMCkKICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwog
Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSByZWludGVycHJldF9jYXN0
PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsK
KyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91
dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAgICBy
ZXR1cm4gSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dCwgY29udHJvbGxlci0+bnVtYmVyT2ZBY3Rp
dmVBbmltYXRpb25zKCkpOwogfQogCitzdGF0aWMgSlNWYWx1ZVJlZiB3YWl0Rm9yUG9saWN5RGVs
ZWdhdGVDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0
UmVmIHRoaXNPYmplY3QsIHNpemVfdCwgY29uc3QgSlNWYWx1ZVJlZltdLCBKU1ZhbHVlUmVmKikK
K3sKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExh
eW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAg
ICBjb250cm9sbGVyLT53YWl0Rm9yUG9saWN5RGVsZWdhdGUoKTsKKyAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKIC8vIFN0YXRpYyBWYWx1ZXMKIAogc3RhdGlj
IEpTVmFsdWVSZWYgZ2V0R2xvYmFsRmxhZ0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBK
U09iamVjdFJlZiB0aGlzT2JqZWN0LCBKU1N0cmluZ1JlZiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVS
ZWYqIGV4Y2VwdGlvbikKIHsKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9
IHJlaW50ZXJwcmV0X2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZh
dGUodGhpc09iamVjdCkpOworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0g
c3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhp
c09iamVjdCkpOwogICAgIHJldHVybiBKU1ZhbHVlTWFrZUJvb2xlYW4oY29udGV4dCwgY29udHJv
bGxlci0+Z2xvYmFsRmxhZygpKTsKIH0KIAogc3RhdGljIEpTVmFsdWVSZWYgZ2V0V2ViSGlzdG9y
eUl0ZW1Db3VudENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiB0aGlz
T2JqZWN0LCBKU1N0cmluZ1JlZiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikK
IHsKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHJlaW50ZXJwcmV0X2Nh
c3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkp
OworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5
b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwogICAg
IHJldHVybiBKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCBjb250cm9sbGVyLT53ZWJIaXN0b3J5
SXRlbUNvdW50KCkpOwogfQogCiBzdGF0aWMgYm9vbCBzZXRHbG9iYWxGbGFnQ2FsbGJhY2soSlND
b250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIEpTU3RyaW5nUmVmIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZVJlZiB2YWx1ZSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewot
ICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gcmVpbnRlcnByZXRfY2FzdDxM
YXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Cisg
ICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRU
ZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgY29u
dHJvbGxlci0+c2V0R2xvYmFsRmxhZyhKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsIHZhbHVlKSk7
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIHN0YXRpYyB2b2lkIGxheW91dFRlc3RDb250cm9sbGVy
T2JqZWN0RmluYWxpemUoSlNPYmplY3RSZWYgb2JqZWN0KQogewotICAgIExheW91dFRlc3RDb250
cm9sbGVyKiBjb250cm9sbGVyID0gcmVpbnRlcnByZXRfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxl
cio+KEpTT2JqZWN0R2V0UHJpdmF0ZShvYmplY3QpKTsKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxl
ciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmpl
Y3RHZXRQcml2YXRlKG9iamVjdCkpOwogICAgIGNvbnRyb2xsZXItPmRlcmVmKCk7CiB9CiAKQEAg
LTgxNCwyNCArODIxLDI4IEBAIEpTU3RhdGljRnVuY3Rpb24qIExheW91dFRlc3RDb250cm9sbGVy
OjoKICAgICAgICAgeyAiZGVjb2RlSG9zdE5hbWUiLCBkZWNvZGVIb3N0TmFtZUNhbGxiYWNrLCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVs
ZXRlIH0sCiAgICAgICAgIHsgImRpc3BsYXkiLCBkaXNwbGF5Q2FsbGJhY2ssIGtKU1Byb3BlcnR5
QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAg
ICAgICAgeyAiZHVtcEFzVGV4dCIsIGR1bXBBc1RleHRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRy
aWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgICAg
ICB7ICJwcmludFRvUERGIiwgZHVtcEFzUERGQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRl
UmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAi
ZHVtcEJhY2tGb3J3YXJkTGlzdCIsIGR1bXBCYWNrRm9yd2FyZExpc3RDYWxsYmFjaywga0pTUHJv
cGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9
LAotICAgICAgICB7ICJkdW1wQ2hpbGRGcmFtZXNBc1RleHQiLCBkdW1wQ2hpbGRGcmFtZXNBc1Rl
eHRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0
cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJkdW1wQ2hpbGRGcmFtZVNjcm9sbFBvc2l0
aW9ucyIsIGR1bXBDaGlsZEZyYW1lU2Nyb2xsUG9zaXRpb25zQ2FsbGJhY2ssIGtKU1Byb3BlcnR5
QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAg
ICAgICAgeyAiZHVtcERhdGFiYXNlQ2FsbGJhY2tzIiwgZHVtcERhdGFiYXNlQ2FsbGJhY2tzQ2Fs
bGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAiZHVtcENoaWxkRnJhbWVzQXNUZXh0IiwgZHVtcENo
aWxkRnJhbWVzQXNUZXh0Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAiZHVtcERPTUFzV2Vi
QXJjaGl2ZSIsIGR1bXBET01Bc1dlYkFyY2hpdmVDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1
dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7
ICJkdW1wRGF0YWJhc2VDYWxsYmFja3MiLCBkdW1wRGF0YWJhc2VDYWxsYmFja3NDYWxsYmFjaywg
a0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERl
bGV0ZSB9LAogICAgICAgICB7ICJkdW1wRWRpdGluZ0NhbGxiYWNrcyIsIGR1bXBFZGl0aW5nQ2Fs
bGJhY2tzQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAiZHVtcFJlc291cmNlTG9hZENhbGxi
YWNrcyIsIGR1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3NDYWxsYmFjaywga0pTUHJvcGVydHlBdHRy
aWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAg
ICB7ICJkdW1wU2VsZWN0aW9uUmVjdCIsIGR1bXBTZWxlY3Rpb25SZWN0Q2FsbGJhY2ssIGtKU1By
b3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUg
fSwKICAgICAgICAgeyAiZHVtcFNvdXJjZUFzV2ViQXJjaGl2ZSIsIGR1bXBTb3VyY2VBc1dlYkFy
Y2hpdmVDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5
QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJkdW1wU3RhdHVzQ2FsbGJhY2tzIiwg
ZHVtcFN0YXR1c0NhbGxiYWNrc0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5
IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgImR1bXBUaXRs
ZUNoYW5nZXMiLCBkdW1wVGl0bGVDaGFuZ2VzQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRl
UmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAi
ZWxlbWVudERvZXNBdXRvQ29tcGxldGVGb3JFbGVtZW50V2l0aElkIiwgZWxlbWVudERvZXNBdXRv
Q29tcGxldGVGb3JFbGVtZW50V2l0aElkQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVh
ZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAiZW5j
b2RlSG9zdE5hbWUiLCBlbmNvZGVIb3N0TmFtZUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsg
ImV4ZWNDb21tYW5kIiwgZXhlY0NvbW1hbmRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVS
ZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJp
c0NvbW1hbmRFbmFibGVkIiwgaXNDb21tYW5kRW5hYmxlZENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAg
ICAgIHsgImtlZXBXZWJIaXN0b3J5Iiwga2VlcFdlYkhpc3RvcnlDYWxsYmFjaywga0pTUHJvcGVy
dHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAog
ICAgICAgICB7ICJub3RpZnlEb25lIiwgbm90aWZ5RG9uZUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAg
ICAgIHsgIm51bWJlck9mQWN0aXZlQW5pbWF0aW9ucyIsIG51bWJlck9mQWN0aXZlQW5pbWF0aW9u
c0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRy
aWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgInBhdGhUb0xvY2FsUmVzb3VyY2UiLCBwYXRo
VG9Mb2NhbFJlc291cmNlQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAicGF1c2VBbmltYXRp
b25BdFRpbWVPbkVsZW1lbnRXaXRoSWQiLCBwYXVzZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVudFdp
dGhJZENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlB
dHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgInBhdXNlVHJhbnNpdGlvbkF0VGltZU9u
RWxlbWVudFdpdGhJZCIsIHBhdXNlVHJhbnNpdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZENhbGxi
YWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVE
b250RGVsZXRlIH0sCisgICAgICAgIHsgInByaW50VG9QREYiLCBkdW1wQXNQREZDYWxsYmFjaywg
a0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERl
bGV0ZSB9LAogICAgICAgICB7ICJxdWV1ZUJhY2tOYXZpZ2F0aW9uIiwgcXVldWVCYWNrTmF2aWdh
dGlvbkNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlB
dHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgInF1ZXVlRm9yd2FyZE5hdmlnYXRpb24i
LCBxdWV1ZUZvcndhcmROYXZpZ2F0aW9uQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVh
ZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAicXVl
dWVMb2FkIiwgcXVldWVMb2FkQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkg
fCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKQEAgLTg0OSwxMCArODYwLDEwIEBA
IEpTU3RhdGljRnVuY3Rpb24qIExheW91dFRlc3RDb250cm9sbGVyOjoKICAgICAgICAgeyAic2V0
SmF2YVNjcmlwdFByb2ZpbGluZ0VuYWJsZWQiLCBzZXRKYXZhU2NyaXB0UHJvZmlsaW5nRW5hYmxl
ZENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRy
aWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgInNldE1haW5GcmFtZUlzRmlyc3RSZXNwb25k
ZXIiLCBzZXRNYWluRnJhbWVJc0ZpcnN0UmVzcG9uZGVyQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0
cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAg
ICAgeyAic2V0UGVyc2lzdGVudFVzZXJTdHlsZVNoZWV0TG9jYXRpb24iLCBzZXRQZXJzaXN0ZW50
VXNlclN0eWxlU2hlZXRMb2NhdGlvbkNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRP
bmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgInNldFBy
aXZhdGVCcm93c2luZ0VuYWJsZWQiLCBzZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkQ2FsbGJhY2ss
IGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnRE
ZWxldGUgfSwKICAgICAgICAgeyAic2V0UG9wdXBCbG9ja2luZ0VuYWJsZWQiLCBzZXRQb3B1cEJs
b2NraW5nRW5hYmxlZENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pT
UHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgInNldFNtYXJ0SW5zZXJ0
RGVsZXRlRW5hYmxlZCIsIHNldFNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZENhbGxiYWNrLCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRl
IH0sCisgICAgICAgIHsgInNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQiLCBzZXRQcml2YXRlQnJv
d3NpbmdFbmFibGVkQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAic2V0U2VsZWN0VHJhaWxp
bmdXaGl0ZXNwYWNlRW5hYmxlZCIsIHNldFNlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWRD
YWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmli
dXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJzZXRTbWFydEluc2VydERlbGV0ZUVuYWJsZWQi
LCBzZXRTbWFydEluc2VydERlbGV0ZUVuYWJsZWRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1
dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7
ICJzZXRTdG9wUHJvdmlzaW9uYWxGcmFtZUxvYWRzIiwgc2V0U3RvcFByb3Zpc2lvbmFsRnJhbWVM
b2Fkc0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlB
dHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgInNldFRhYktleUN5Y2xlc1Rocm91Z2hF
bGVtZW50cyIsIHNldFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50c0NhbGxiYWNrLCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0s
CiAgICAgICAgIHsgInNldFVzZURhc2hib2FyZENvbXBhdGliaWxpdHlNb2RlIiwgc2V0VXNlRGFz
aGJvYXJkQ29tcGF0aWJpbGl0eU1vZGVDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFk
T25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LApAQCAtODYxLDEyICs4NzIs
OSBAQCBKU1N0YXRpY0Z1bmN0aW9uKiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6CiAgICAgICAgIHsg
InNldFdpbmRvd0lzS2V5Iiwgc2V0V2luZG93SXNLZXlDYWxsYmFjaywga0pTUHJvcGVydHlBdHRy
aWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAg
ICB7ICJ0ZXN0T25zY3JlZW4iLCB0ZXN0T25zY3JlZW5DYWxsYmFjaywga0pTUHJvcGVydHlBdHRy
aWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAg
ICB7ICJ0ZXN0UmVwYWludCIsIHRlc3RSZXBhaW50Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmli
dXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAg
eyAid2FpdEZvclBvbGljeURlbGVnYXRlIiwgd2FpdEZvclBvbGljeURlbGVnYXRlQ2FsbGJhY2ss
IGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnRE
ZWxldGUgfSwKICAgICAgICAgeyAid2FpdFVudGlsRG9uZSIsIHdhaXRVbnRpbERvbmVDYWxsYmFj
aywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9u
dERlbGV0ZSB9LAogICAgICAgICB7ICJ3aW5kb3dDb3VudCIsIHdpbmRvd0NvdW50Q2FsbGJhY2ss
IGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnRE
ZWxldGUgfSwKLSAgICAgICAgeyAiZWxlbWVudERvZXNBdXRvQ29tcGxldGVGb3JFbGVtZW50V2l0
aElkIiwgZWxlbWVudERvZXNBdXRvQ29tcGxldGVGb3JFbGVtZW50V2l0aElkQ2FsbGJhY2ssIGtK
U1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxl
dGUgfSwKLSAgICAgICAgeyAicGF1c2VBbmltYXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQiLCBw
YXVzZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAg
ICAgIHsgInBhdXNlVHJhbnNpdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZCIsIHBhdXNlVHJhbnNp
dGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJl
YWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgIm51
bWJlck9mQWN0aXZlQW5pbWF0aW9ucyIsIG51bWJlck9mQWN0aXZlQW5pbWF0aW9uc0NhbGxiYWNr
LCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250
RGVsZXRlIH0sCiAgICAgICAgIHsgMCwgMCwgMCB9CiAgICAgfTsKIApJbmRleDogV2ViS2l0VG9v
bHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCShyZXZpc2lv
biA0MjA0NCkKKysrIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9s
bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDEzICs0MywxMyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBhZGREaXNhbGxvd2VkVVJMKEpTU3RyaW5nUmVmIHVybCk7CiAgICAgdm9pZCBjbGVhckFsbERh
dGFiYXNlcygpOwogICAgIHZvaWQgY2xlYXJCYWNrRm9yd2FyZExpc3QoKTsKKyAgICB2b2lkIGNs
ZWFyUGVyc2lzdGVudFVzZXJTdHlsZVNoZWV0KCk7CiAgICAgSlNTdHJpbmdSZWYgY29weURlY29k
ZWRIb3N0TmFtZShKU1N0cmluZ1JlZiBuYW1lKTsKICAgICBKU1N0cmluZ1JlZiBjb3B5RW5jb2Rl
ZEhvc3ROYW1lKEpTU3RyaW5nUmVmIG5hbWUpOwotICAgIHZvaWQgZXhlY0NvbW1hbmQoSlNTdHJp
bmdSZWYgbmFtZSwgSlNTdHJpbmdSZWYgdmFsdWUpOwogICAgIHZvaWQgZGlzcGxheSgpOworICAg
IHZvaWQgZXhlY0NvbW1hbmQoSlNTdHJpbmdSZWYgbmFtZSwgSlNTdHJpbmdSZWYgdmFsdWUpOwog
ICAgIGJvb2wgaXNDb21tYW5kRW5hYmxlZChKU1N0cmluZ1JlZiBuYW1lKTsKICAgICB2b2lkIGtl
ZXBXZWJIaXN0b3J5KCk7Ci0gICAgc2l6ZV90IHdlYkhpc3RvcnlJdGVtQ291bnQoKTsKICAgICB2
b2lkIG5vdGlmeURvbmUoKTsKICAgICBKU1N0cmluZ1JlZiBwYXRoVG9Mb2NhbFJlc291cmNlKEpT
Q29udGV4dFJlZiwgSlNTdHJpbmdSZWYgdXJsKTsKICAgICB2b2lkIHF1ZXVlQmFja05hdmlnYXRp
b24oaW50IGhvd0ZhckJhY2t3YXJkKTsKQEAgLTY0LDE2ICs2NCwxNyBAQCBwdWJsaWM6CiAgICAg
dm9pZCBzZXRJY29uRGF0YWJhc2VFbmFibGVkKGJvb2wgaWNvbkRhdGFiYXNlRW5hYmxlZCk7CiAg
ICAgdm9pZCBzZXRKYXZhU2NyaXB0UHJvZmlsaW5nRW5hYmxlZChib29sIHByb2ZpbGluZ0VuYWJs
ZWQpOwogICAgIHZvaWQgc2V0TWFpbkZyYW1lSXNGaXJzdFJlc3BvbmRlcihib29sIGZsYWcpOwot
ICAgIHZvaWQgc2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChib29sIGZsYWcpOworICAgIHZvaWQg
c2V0UGVyc2lzdGVudFVzZXJTdHlsZVNoZWV0TG9jYXRpb24oSlNTdHJpbmdSZWYgcGF0aCk7CiAg
ICAgdm9pZCBzZXRQb3B1cEJsb2NraW5nRW5hYmxlZChib29sIGZsYWcpOwotICAgIHZvaWQgc2V0
VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKGJvb2wgY3ljbGVzKTsKLSAgICB2b2lkIHNldFNt
YXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZChib29sIGZsYWcpOworICAgIHZvaWQgc2V0UHJpdmF0ZUJy
b3dzaW5nRW5hYmxlZChib29sIGZsYWcpOwogICAgIHZvaWQgc2V0U2VsZWN0VHJhaWxpbmdXaGl0
ZXNwYWNlRW5hYmxlZChib29sIGZsYWcpOworICAgIHZvaWQgc2V0U21hcnRJbnNlcnREZWxldGVF
bmFibGVkKGJvb2wgZmxhZyk7CisgICAgdm9pZCBzZXRUYWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVu
dHMoYm9vbCBjeWNsZXMpOwogICAgIHZvaWQgc2V0VXNlRGFzaGJvYXJkQ29tcGF0aWJpbGl0eU1v
ZGUoYm9vbCBmbGFnKTsKICAgICB2b2lkIHNldFVzZXJTdHlsZVNoZWV0RW5hYmxlZChib29sIGZs
YWcpOwogICAgIHZvaWQgc2V0VXNlclN0eWxlU2hlZXRMb2NhdGlvbihKU1N0cmluZ1JlZiBwYXRo
KTsKLSAgICB2b2lkIHNldFBlcnNpc3RlbnRVc2VyU3R5bGVTaGVldExvY2F0aW9uKEpTU3RyaW5n
UmVmIHBhdGgpOwotICAgIHZvaWQgY2xlYXJQZXJzaXN0ZW50VXNlclN0eWxlU2hlZXQoKTsKKyAg
ICB2b2lkIHdhaXRGb3JQb2xpY3lEZWxlZ2F0ZSgpOworICAgIHNpemVfdCB3ZWJIaXN0b3J5SXRl
bUNvdW50KCk7CiAgICAgaW50IHdpbmRvd0NvdW50KCk7CiAgICAgCiAgICAgYm9vbCBlbGVtZW50
RG9lc0F1dG9Db21wbGV0ZUZvckVsZW1lbnRXaXRoSWQoSlNTdHJpbmdSZWYgaWQpOwpJbmRleDog
V2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbQko
cmV2aXNpb24gNDIwNDQpCisrKyBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJl
bmRlclRyZWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTExMzEsNyArMTEzMSw5IEBAIHN0YXRpYyB2
b2lkIHJ1blRlc3QoY29uc3Qgc3RyaW5nJiB0ZXN0UGEKICAgICAgICAgICAgIFt3aW5kb3cgY2xv
c2VdOwogICAgICAgICB9CiAgICAgfQotICAgIAorCisgICAgcmVzZXRXZWJWaWV3VG9Db25zaXN0
ZW50U3RhdGVCZWZvcmVUZXN0aW5nKCk7CisKICAgICBbbWFpbkZyYW1lIGxvYWRIVE1MU3RyaW5n
OkAiPGh0bWw+PC9odG1sPiIgYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImFib3V0OmJs
YW5rIl1dOwogICAgIFttYWluRnJhbWUgc3RvcExvYWRpbmddOwogICAgIApJbmRleDogV2ViS2l0
VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0xheW91dFRlc3RDb250cm9sbGVyTWFjLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9MYXlvdXRUZXN0Q29udHJv
bGxlck1hYy5tbQkocmV2aXNpb24gNDIwNDQpCisrKyBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJl
ZS9tYWMvTGF5b3V0VGVzdENvbnRyb2xsZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQyMCwz
ICs0MjAsMTAgQEAgdW5zaWduZWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om51bWJlck9mQQogewog
ICAgIHJldHVybiBbbWFpbkZyYW1lIF9udW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnNdOwogfQorCit2
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjp3YWl0Rm9yUG9saWN5RGVsZWdhdGUoKQoreworICAg
IHNldFdhaXRUb0R1bXAodHJ1ZSk7CisgICAgW3BvbGljeURlbGVnYXRlIHNldENvbnRyb2xsZXJU
b05vdGlmeURvbmU6dGhpc107CisgICAgW1ttYWluRnJhbWUgd2ViVmlld10gc2V0UG9saWN5RGVs
ZWdhdGU6cG9saWN5RGVsZWdhdGVdOworfQpJbmRleDogV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRy
ZWUvbWFjL1BvbGljeURlbGVnYXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvRHVtcFJl
bmRlclRyZWUvbWFjL1BvbGljeURlbGVnYXRlLmgJKHJldmlzaW9uIDQyMDQ0KQorKysgV2ViS2l0
VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1BvbGljeURlbGVnYXRlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0yOCwxMSArMjgsMTQgQEAKIAogI2ltcG9ydCA8Q29jb2EvQ29jb2EuaD4KIAorY2xhc3MgTGF5
b3V0VGVzdENvbnRyb2xsZXI7CiAKIEBpbnRlcmZhY2UgUG9saWN5RGVsZWdhdGUgOiBOU09iamVj
dCB7CiAgICAgQk9PTCBwZXJtaXNzaXZlRGVsZWdhdGU7CisgICAgTGF5b3V0VGVzdENvbnRyb2xs
ZXIqIGNvbnRyb2xsZXJUb05vdGlmeURvbmU7CiB9CiAKIC0gKHZvaWQpc2V0UGVybWlzc2l2ZToo
Qk9PTClwZXJtaXNzaXZlOworLSAodm9pZClzZXRDb250cm9sbGVyVG9Ob3RpZnlEb25lOihMYXlv
dXRUZXN0Q29udHJvbGxlciopY29udHJvbGxlcjsKIAogQGVuZApJbmRleDogV2ViS2l0VG9vbHMv
RHVtcFJlbmRlclRyZWUvbWFjL1BvbGljeURlbGVnYXRlLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9Qb2xpY3lEZWxlZ2F0ZS5tbQkocmV2aXNpb24gNDIw
NDQpCisrKyBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvUG9saWN5RGVsZWdhdGUubW0J
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcs
IDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0yOSwxMCArMjksMTEgQEAKICNpbXBvcnQgIlBvbGljeURlbGVnYXRl
LmgiCiAKICNpbXBvcnQgIkR1bXBSZW5kZXJUcmVlLmgiCi0jaW1wb3J0ICJEdW1wUmVuZGVyVHJl
ZURyYWdnaW5nSW5mby5oIgorI2ltcG9ydCAiTGF5b3V0VGVzdENvbnRyb2xsZXIuaCIKICNpbXBv
cnQgPFdlYktpdC9XZWJQb2xpY3lEZWxlZ2F0ZS5oPgogCiBAaW1wbGVtZW50YXRpb24gUG9saWN5
RGVsZWdhdGUKKwogLSAodm9pZCl3ZWJWaWV3OihXZWJWaWV3ICopd2ViVmlldyBkZWNpZGVQb2xp
Y3lGb3JOYXZpZ2F0aW9uQWN0aW9uOihOU0RpY3Rpb25hcnkgKilhY3Rpb25JbmZvcm1hdGlvbgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXF1ZXN0OihOU1VSTFJlcXVlc3QgKilyZXF1ZXN0CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWU6KFdlYkZyYW1lICop
ZnJhbWUKQEAgLTcwLDYgKzcxLDExIEBACiAgICAgICAgIFtsaXN0ZW5lciB1c2VdOwogICAgIGVs
c2UKICAgICAgICAgW2xpc3RlbmVyIGlnbm9yZV07CisKKyAgICBpZiAoY29udHJvbGxlclRvTm90
aWZ5RG9uZSkgeworICAgICAgICBjb250cm9sbGVyVG9Ob3RpZnlEb25lLT5ub3RpZnlEb25lKCk7
CisgICAgICAgIGNvbnRyb2xsZXJUb05vdGlmeURvbmUgPSAwOworICAgIH0KIH0KIAogLSAodm9p
ZClzZXRQZXJtaXNzaXZlOihCT09MKXBlcm1pc3NpdmUKQEAgLTc3LDUgKzgzLDkgQEAKICAgICBw
ZXJtaXNzaXZlRGVsZWdhdGUgPSBwZXJtaXNzaXZlOwogfQogCistICh2b2lkKXNldENvbnRyb2xs
ZXJUb05vdGlmeURvbmU6KExheW91dFRlc3RDb250cm9sbGVyKiljb250cm9sbGVyCit7CisgICAg
Y29udHJvbGxlclRvTm90aWZ5RG9uZSA9IGNvbnRyb2xsZXI7Cit9CiAKIEBlbmQKSW5kZXg6IFdl
YktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVyVHJlZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVlLmNwcAko
cmV2aXNpb24gNDIwNDQpCisrKyBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vRHVtcFJl
bmRlclRyZWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NDMsNiArNjQzLDggQEAgc3RhdGljIHZv
aWQgcmVzZXRXZWJWaWV3VG9Db25zaXN0ZW50U3RhdAogICAgICAgICByZXR1cm47CiAKICAgICB3
ZWJWaWV3LT5zZXRQb2xpY3lEZWxlZ2F0ZSgwKTsKKyAgICBwb2xpY3lEZWxlZ2F0ZS0+c2V0UGVy
bWlzc2l2ZShmYWxzZSk7CisgICAgcG9saWN5RGVsZWdhdGUtPnNldFNob3VsZE5vdGlmeURvbmUo
ZmFsc2UpOwogCiAgICAgQ09NUHRyPElXZWJJQkFjdGlvbnM+IHdlYklCQWN0aW9ucyhRdWVyeSwg
d2ViVmlldyk7CiAgICAgaWYgKHdlYklCQWN0aW9ucykgewpJbmRleDogV2ViS2l0VG9vbHMvRHVt
cFJlbmRlclRyZWUvd2luL0xheW91dFRlc3RDb250cm9sbGVyV2luLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vTGF5b3V0VGVzdENvbnRyb2xsZXJXaW4u
Y3BwCShyZXZpc2lvbiA0MjA0NCkKKysrIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9M
YXlvdXRUZXN0Q29udHJvbGxlcldpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4NSw3ICsyODUs
NyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRDdXN0b21Qb2xpCiAgICAgICAgIHBv
bGljeURlbGVnYXRlLT5zZXRQZXJtaXNzaXZlKHBlcm1pc3NpdmUpOwogICAgICAgICB3ZWJWaWV3
LT5zZXRQb2xpY3lEZWxlZ2F0ZShwb2xpY3lEZWxlZ2F0ZSk7CiAgICAgfSBlbHNlCi0gICAgICAg
IHdlYlZpZXctPnNldFBvbGljeURlbGVnYXRlKE5VTEwpOworICAgICAgICB3ZWJWaWV3LT5zZXRQ
b2xpY3lEZWxlZ2F0ZSgwKTsKIH0KIAogdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0SWNv
bkRhdGFiYXNlRW5hYmxlZChib29sIGljb25EYXRhYmFzZUVuYWJsZWQpCkluZGV4OiBXZWJLaXRU
b29scy9EdW1wUmVuZGVyVHJlZS93aW4vUG9saWN5RGVsZWdhdGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9Qb2xpY3lEZWxlZ2F0ZS5jcHAJKHJldmlz
aW9uIDQyMDQ0KQorKysgV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL1BvbGljeURlbGVn
YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwNywgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlICJQb2xpY3lE
ZWxlZ2F0ZS5oIgogCiAjaW5jbHVkZSAiRHVtcFJlbmRlclRyZWUuaCIKLQorI2luY2x1ZGUgIkxh
eW91dFRlc3RDb250cm9sbGVyLmgiCiAjaW5jbHVkZSA8c3RyaW5nPgogCiB1c2luZyBzdGQ6Ondz
dHJpbmc7CkBAIC0zOCw2ICszOCw3IEBAIHVzaW5nIHN0ZDo6d3N0cmluZzsKIFBvbGljeURlbGVn
YXRlOjpQb2xpY3lEZWxlZ2F0ZSgpCiAgICAgOiBtX3JlZkNvdW50KDEpCiAgICAgLCBtX3Blcm1p
c3NpdmVEZWxlZ2F0ZShmYWxzZSkKKyAgICAsIG1fY29udHJvbGxlclRvTm90aWZ5RG9uZSgwKQog
ewogfQogCkBAIC0xMjAsNSArMTIxLDEwIEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgUG9s
aWN5RGVsZWdhdGUKICAgICBlbHNlCiAgICAgICAgIGxpc3RlbmVyLT5pZ25vcmUoKTsKIAorICAg
IGlmIChtX2NvbnRyb2xsZXJUb05vdGlmeURvbmUpIHsKKyAgICAgICAgbV9jb250cm9sbGVyVG9O
b3RpZnlEb25lLT5ub3RpZnlEb25lKCk7CisgICAgICAgIG1fY29udHJvbGxlclRvTm90aWZ5RG9u
ZSA9IDA7CisgICAgfQorCiAgICAgcmV0dXJuIFNfT0s7CiB9CkluZGV4OiBXZWJLaXRUb29scy9E
dW1wUmVuZGVyVHJlZS93aW4vUG9saWN5RGVsZWdhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRU
b29scy9EdW1wUmVuZGVyVHJlZS93aW4vUG9saWN5RGVsZWdhdGUuaAkocmV2aXNpb24gNDIwNDQp
CisrKyBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vUG9saWN5RGVsZWdhdGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAw
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTMxLDYgKzMxLDggQEAKIAogI2luY2x1ZGUgPFdlYktpdC9XZWJLaXQuaD4K
IAorY2xhc3MgTGF5b3V0VGVzdENvbnRyb2xsZXI7CisKIGNsYXNzIFBvbGljeURlbGVnYXRlIDog
cHVibGljIElXZWJQb2xpY3lEZWxlZ2F0ZSB7CiBwdWJsaWM6CiAgICAgUG9saWN5RGVsZWdhdGUo
KTsKQEAgLTY5LDEwICs3MSwxMiBAQCBwdWJsaWM6CiAKICAgICAvLyBQb2xpY3lEZWxlZ2F0ZQog
ICAgIHZvaWQgc2V0UGVybWlzc2l2ZShib29sIHBlcm1pc3NpdmUpIHsgbV9wZXJtaXNzaXZlRGVs
ZWdhdGUgPSBwZXJtaXNzaXZlOyB9CisgICAgdm9pZCBzZXRDb250cm9sbGVyVG9Ob3RpZnlEb25l
KExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyKSB7IG1fY29udHJvbGxlclRvTm90aWZ5
RG9uZSA9IGNvbnRyb2xsZXI7IH0KIAogcHJpdmF0ZToKICAgICBVTE9ORyBtX3JlZkNvdW50Owog
ICAgIGJvb2wgbV9wZXJtaXNzaXZlRGVsZWdhdGU7CisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIq
IG1fY29udHJvbGxlclRvTm90aWZ5RG9uZTsKIH07CiAKICNlbmRpZiAvLyBQb2xpY3lEZWxlZ2F0
ZV9oCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2VuY29kaW5nL21haWx0by1hbHdheXMtdXRmLTgu
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2VuY29kaW5nL21haWx0by1hbHdh
eXMtdXRmLTguaHRtbAkocmV2aXNpb24gNDIwNDQpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2VuY29k
aW5nL21haWx0by1hbHdheXMtdXRmLTguaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMTUsMTIgKzE1
LDExIEBACiBmdW5jdGlvbiB0ZXN0KCkgewogICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKSB7CiAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOwotICAgIGxheW91
dFRlc3RDb250cm9sbGVyLnNldEN1c3RvbVBvbGljeURlbGVnYXRlKHRydWUpOworICAgIGxheW91
dFRlc3RDb250cm9sbGVyLndhaXRGb3JQb2xpY3lEZWxlZ2F0ZSgpOwogICAgIHZhciBhID0gZG9j
dW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImEiKVswXTsKICAgICBldmVudFNlbmRlci5tb3Vz
ZU1vdmVUbyhhLm9mZnNldExlZnQgKyA1LCBhLm9mZnNldFRvcCArIDUpOwogICAgIGV2ZW50U2Vu
ZGVyLm1vdXNlRG93bigpOwogICAgIGV2ZW50U2VuZGVyLm1vdXNlVXAoKTsKLSAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci5zZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZShmYWxzZSk7CiAgIH0KIH0KIDwv
c2NyaXB0PgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9tYWlsdG8vYWR2YW5jZWQtZ2V0
Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9tYWlsdG8vYWR2YW5j
ZWQtZ2V0Lmh0bWwJKHJldmlzaW9uIDQyMDQ0KQorKysgTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9t
YWlsdG8vYWR2YW5jZWQtZ2V0Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTYsOSArNiw4IEBACiAg
ICAgICAgICAgICBmdW5jdGlvbiB0ZXN0KCkgewogICAgICAgICAgICAgICBpZiAod2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKSB7CiAgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIuZHVtcEFzVGV4dCgpOwotICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLnNl
dEN1c3RvbVBvbGljeURlbGVnYXRlKHRydWUpOworICAgICAgICAgICAgICAgIGxheW91dFRlc3RD
b250cm9sbGVyLndhaXRGb3JQb2xpY3lEZWxlZ2F0ZSgpOwogICAgICAgICAgICAgICAgIGRvY3Vt
ZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJmb3JtIilbMF0uc3VibWl0KCk7Ci0gICAgICAgICAg
ICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUoZmFsc2Up
OwogICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIDwvc2NyaXB0PgpJbmRl
eDogTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9tYWlsdG8vYWR2YW5jZWQtcHV0Lmh0bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9tYWlsdG8vYWR2YW5jZWQtcHV0Lmh0bWwJ
KHJldmlzaW9uIDQyMDQ0KQorKysgTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9tYWlsdG8vYWR2YW5j
ZWQtcHV0Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTYsOSArNiw4IEBACiAgICAgICAgICAgICBm
dW5jdGlvbiB0ZXN0KCkgewogICAgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250
cm9sbGVyKSB7CiAgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4
dCgpOwotICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLnNldEN1c3RvbVBvbGlj
eURlbGVnYXRlKHRydWUpOworICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndh
aXRGb3JQb2xpY3lEZWxlZ2F0ZSgpOwogICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1l
bnRzQnlUYWdOYW1lKCJmb3JtIilbMF0uc3VibWl0KCk7Ci0gICAgICAgICAgICAgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIuc2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUoZmFsc2UpOwogICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIDwvc2NyaXB0PgpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC9mb3Jtcy9tYWlsdG8vZ2V0LW11bHRpcGxlLWl0ZW1zLXRleHQtcGxhaW4uaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL21haWx0by9nZXQtbXVsdGlwbGUt
aXRlbXMtdGV4dC1wbGFpbi5odG1sCShyZXZpc2lvbiA0MjA0NCkKKysrIExheW91dFRlc3RzL2Zh
c3QvZm9ybXMvbWFpbHRvL2dldC1tdWx0aXBsZS1pdGVtcy10ZXh0LXBsYWluLmh0bWwJKHdvcmtp
bmcgY29weSkKQEAgLTEwLDkgKzEwLDggQEAgTGluZSAyCiBmdW5jdGlvbiB0ZXN0KCkgewogICBp
ZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CiAgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIuZHVtcEFzVGV4dCgpOwotICAgIGxheW91dFRlc3RDb250cm9sbGVyLnNldEN1c3RvbVBvbGlj
eURlbGVnYXRlKHRydWUpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRGb3JQb2xpY3lE
ZWxlZ2F0ZSgpOwogICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJmb3JtIilbMF0u
c3VibWl0KCk7Ci0gICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0Q3VzdG9tUG9saWN5RGVsZWdh
dGUoZmFsc2UpOwogICB9CiB9CiA8L3NjcmlwdD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZm9y
bXMvbWFpbHRvL2dldC1tdWx0aXBsZS1pdGVtcy14LXd3dy1mb3JtLXVybGVuY29kZWQuaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL21haWx0by9nZXQtbXVsdGlwbGUt
aXRlbXMteC13d3ctZm9ybS11cmxlbmNvZGVkLmh0bWwJKHJldmlzaW9uIDQyMDQ0KQorKysgTGF5
b3V0VGVzdHMvZmFzdC9mb3Jtcy9tYWlsdG8vZ2V0LW11bHRpcGxlLWl0ZW1zLXgtd3d3LWZvcm0t
dXJsZW5jb2RlZC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC04LDkgKzgsOCBAQCBGaWVsZCAyOiA8
aW5wdXQgdHlwZT0idGV4dCIgc2l6ZT0iMTAiIG1hCiBmdW5jdGlvbiB0ZXN0KCkgewogICBpZiAo
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CiAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
ZHVtcEFzVGV4dCgpOwotICAgIGxheW91dFRlc3RDb250cm9sbGVyLnNldEN1c3RvbVBvbGljeURl
bGVnYXRlKHRydWUpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRGb3JQb2xpY3lEZWxl
Z2F0ZSgpOwogICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJmb3JtIilbMF0uc3Vi
bWl0KCk7Ci0gICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUo
ZmFsc2UpOwogICB9CiB9CiA8L3NjcmlwdD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZm9ybXMv
bWFpbHRvL2dldC1tdWx0aXBsZS1pdGVtcy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2Zhc3QvZm9ybXMvbWFpbHRvL2dldC1tdWx0aXBsZS1pdGVtcy5odG1sCShyZXZpc2lvbiA0MjA0
NCkKKysrIExheW91dFRlc3RzL2Zhc3QvZm9ybXMvbWFpbHRvL2dldC1tdWx0aXBsZS1pdGVtcy5o
dG1sCSh3b3JraW5nIGNvcHkpCkBAIC05LDkgKzksOCBAQCBGaWVsZCAyOiA8aW5wdXQgdHlwZT0i
dGV4dCIgc2l6ZT0iMTAiIG1hCiBmdW5jdGlvbiB0ZXN0KCkgewogICBpZiAod2luZG93LmxheW91
dFRlc3RDb250cm9sbGVyKSB7CiAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgp
OwotICAgIGxheW91dFRlc3RDb250cm9sbGVyLnNldEN1c3RvbVBvbGljeURlbGVnYXRlKHRydWUp
OworICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRGb3JQb2xpY3lEZWxlZ2F0ZSgpOwogICAg
IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJmb3JtIilbMF0uc3VibWl0KCk7Ci0gICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUoZmFsc2UpOwogICB9
CiB9CiA8L3NjcmlwdD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZm9ybXMvbWFpbHRvL2dldC1u
b24tYXNjaWktYWx3YXlzLXV0Zi04Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC9mb3Jtcy9tYWlsdG8vZ2V0LW5vbi1hc2NpaS1hbHdheXMtdXRmLTguaHRtbAkocmV2aXNpb24g
NDIwNDQpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL21haWx0by9nZXQtbm9uLWFzY2lpLWFs
d2F5cy11dGYtOC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC05LDkgKzksOCBAQAogZnVuY3Rpb24g
dGVzdCgpIHsKICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgewogICAgIGxheW91
dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKLSAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5z
ZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZSh0cnVlKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53
YWl0Rm9yUG9saWN5RGVsZWdhdGUoKTsKICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFt
ZSgiZm9ybSIpWzBdLnN1Ym1pdCgpOwotICAgIGxheW91dFRlc3RDb250cm9sbGVyLnNldEN1c3Rv
bVBvbGljeURlbGVnYXRlKGZhbHNlKTsKICAgfQogfQogPC9zY3JpcHQ+CkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L2Zvcm1zL21haWx0by9nZXQtbm9uLWFzY2lpLXRleHQtcGxhaW4tbGF0aW4tMS5o
dG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZm9ybXMvbWFpbHRvL2dldC1ub24t
YXNjaWktdGV4dC1wbGFpbi1sYXRpbi0xLmh0bWwJKHJldmlzaW9uIDQyMDQ0KQorKysgTGF5b3V0
VGVzdHMvZmFzdC9mb3Jtcy9tYWlsdG8vZ2V0LW5vbi1hc2NpaS10ZXh0LXBsYWluLWxhdGluLTEu
aHRtbAkod29ya2luZyBjb3B5KQpAQCAtOSw5ICs5LDggQEAKIGZ1bmN0aW9uIHRlc3QoKSB7CiAg
IGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKICAgICBsYXlvdXRUZXN0Q29udHJv
bGxlci5kdW1wQXNUZXh0KCk7Ci0gICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0Q3VzdG9tUG9s
aWN5RGVsZWdhdGUodHJ1ZSk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdEZvclBvbGlj
eURlbGVnYXRlKCk7CiAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImZvcm0iKVsw
XS5zdWJtaXQoKTsKLSAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5zZXRDdXN0b21Qb2xpY3lEZWxl
Z2F0ZShmYWxzZSk7CiAgIH0KIH0KIDwvc2NyaXB0PgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9m
b3Jtcy9tYWlsdG8vZ2V0LW5vbi1hc2NpaS10ZXh0LXBsYWluLmh0bWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9tYWlsdG8vZ2V0LW5vbi1hc2NpaS10ZXh0LXBsYWluLmh0
bWwJKHJldmlzaW9uIDQyMDQ0KQorKysgTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9tYWlsdG8vZ2V0
LW5vbi1hc2NpaS10ZXh0LXBsYWluLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTksOSArOSw4IEBA
CiBmdW5jdGlvbiB0ZXN0KCkgewogICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7
CiAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOwotICAgIGxheW91dFRlc3RD
b250cm9sbGVyLnNldEN1c3RvbVBvbGljeURlbGVnYXRlKHRydWUpOworICAgIGxheW91dFRlc3RD
b250cm9sbGVyLndhaXRGb3JQb2xpY3lEZWxlZ2F0ZSgpOwogICAgIGRvY3VtZW50LmdldEVsZW1l
bnRzQnlUYWdOYW1lKCJmb3JtIilbMF0uc3VibWl0KCk7Ci0gICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIuc2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUoZmFsc2UpOwogICB9CiB9CiA8L3NjcmlwdD4KSW5k
ZXg6IExheW91dFRlc3RzL2Zhc3QvZm9ybXMvbWFpbHRvL2dldC1ub24tYXNjaWkuaHRtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL21haWx0by9nZXQtbm9uLWFzY2lpLmh0
bWwJKHJldmlzaW9uIDQyMDQ0KQorKysgTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9tYWlsdG8vZ2V0
LW5vbi1hc2NpaS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC05LDkgKzksOCBAQAogZnVuY3Rpb24g
dGVzdCgpIHsKICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgewogICAgIGxheW91
dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKLSAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5z
ZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZSh0cnVlKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53
YWl0Rm9yUG9saWN5RGVsZWdhdGUoKTsKICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFt
ZSgiZm9ybSIpWzBdLnN1Ym1pdCgpOwotICAgIGxheW91dFRlc3RDb250cm9sbGVyLnNldEN1c3Rv
bVBvbGljeURlbGVnYXRlKGZhbHNlKTsKICAgfQogfQogPC9zY3JpcHQ+CkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L2Zvcm1zL21haWx0by9nZXQtb3ZlcndyaXRlLXF1ZXJ5Lmh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9tYWlsdG8vZ2V0LW92ZXJ3cml0ZS1xdWVyeS5o
dG1sCShyZXZpc2lvbiA0MjA0NCkKKysrIExheW91dFRlc3RzL2Zhc3QvZm9ybXMvbWFpbHRvL2dl
dC1vdmVyd3JpdGUtcXVlcnkuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtOCw5ICs4LDggQEAKIGZ1
bmN0aW9uIHRlc3QoKSB7CiAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKICAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7Ci0gICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIuc2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUodHJ1ZSk7CisgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIud2FpdEZvclBvbGljeURlbGVnYXRlKCk7CiAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNC
eVRhZ05hbWUoImZvcm0iKVswXS5zdWJtaXQoKTsKLSAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5z
ZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZShmYWxzZSk7CiAgIH0KIH0KIDwvc2NyaXB0PgpJbmRleDog
TGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9tYWlsdG8vcG9zdC1hcHBlbmQtcXVlcnkuaHRtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL21haWx0by9wb3N0LWFwcGVuZC1xdWVy
eS5odG1sCShyZXZpc2lvbiA0MjA0NCkKKysrIExheW91dFRlc3RzL2Zhc3QvZm9ybXMvbWFpbHRv
L3Bvc3QtYXBwZW5kLXF1ZXJ5Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTgsOSArOCw4IEBACiBm
dW5jdGlvbiB0ZXN0KCkgewogICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CiAg
ICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOwotICAgIGxheW91dFRlc3RDb250
cm9sbGVyLnNldEN1c3RvbVBvbGljeURlbGVnYXRlKHRydWUpOworICAgIGxheW91dFRlc3RDb250
cm9sbGVyLndhaXRGb3JQb2xpY3lEZWxlZ2F0ZSgpOwogICAgIGRvY3VtZW50LmdldEVsZW1lbnRz
QnlUYWdOYW1lKCJmb3JtIilbMF0uc3VibWl0KCk7Ci0gICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
c2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUoZmFsc2UpOwogICB9CiB9CiA8L3NjcmlwdD4KSW5kZXg6
IExheW91dFRlc3RzL2Zhc3QvZm9ybXMvbWFpbHRvL3Bvc3QtbXVsdGlwbGUtaXRlbXMtbXVsdGlw
YXJ0LWZvcm0tZGF0YS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZm9ybXMv
bWFpbHRvL3Bvc3QtbXVsdGlwbGUtaXRlbXMtbXVsdGlwYXJ0LWZvcm0tZGF0YS5odG1sCShyZXZp
c2lvbiA0MjA0NCkKKysrIExheW91dFRlc3RzL2Zhc3QvZm9ybXMvbWFpbHRvL3Bvc3QtbXVsdGlw
bGUtaXRlbXMtbXVsdGlwYXJ0LWZvcm0tZGF0YS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0xMCw5
ICsxMCw4IEBAIExpbmUgMgogZnVuY3Rpb24gdGVzdCgpIHsKICAgaWYgKHdpbmRvdy5sYXlvdXRU
ZXN0Q29udHJvbGxlcikgewogICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsK
LSAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5zZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZSh0cnVlKTsK
KyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0Rm9yUG9saWN5RGVsZWdhdGUoKTsKICAgICBk
b2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZm9ybSIpWzBdLnN1Ym1pdCgpOwotICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLnNldEN1c3RvbVBvbGljeURlbGVnYXRlKGZhbHNlKTsKICAgfQog
fQogPC9zY3JpcHQ+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL21haWx0by9wb3N0LW11
bHRpcGxlLWl0ZW1zLXRleHQtcGxhaW4uaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L2Zvcm1zL21haWx0by9wb3N0LW11bHRpcGxlLWl0ZW1zLXRleHQtcGxhaW4uaHRtbAkocmV2
aXNpb24gNDIwNDQpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL21haWx0by9wb3N0LW11bHRp
cGxlLWl0ZW1zLXRleHQtcGxhaW4uaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMTAsOSArMTAsOCBA
QCBMaW5lIDIKIGZ1bmN0aW9uIHRlc3QoKSB7CiAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpIHsKICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7Ci0gICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIuc2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUodHJ1ZSk7CisgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIud2FpdEZvclBvbGljeURlbGVnYXRlKCk7CiAgICAgZG9jdW1lbnQu
Z2V0RWxlbWVudHNCeVRhZ05hbWUoImZvcm0iKVswXS5zdWJtaXQoKTsKLSAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci5zZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZShmYWxzZSk7CiAgIH0KIH0KIDwvc2Ny
aXB0PgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9tYWlsdG8vcG9zdC1tdWx0aXBsZS1p
dGVtcy14LXd3dy1mb3JtLXVybGVuY29kZWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9mYXN0L2Zvcm1zL21haWx0by9wb3N0LW11bHRpcGxlLWl0ZW1zLXgtd3d3LWZvcm0tdXJsZW5j
b2RlZC5odG1sCShyZXZpc2lvbiA0MjA0NCkKKysrIExheW91dFRlc3RzL2Zhc3QvZm9ybXMvbWFp
bHRvL3Bvc3QtbXVsdGlwbGUtaXRlbXMteC13d3ctZm9ybS11cmxlbmNvZGVkLmh0bWwJKHdvcmtp
bmcgY29weSkKQEAgLTEwLDkgKzEwLDggQEAgTGluZSAyCiBmdW5jdGlvbiB0ZXN0KCkgewogICBp
ZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CiAgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIuZHVtcEFzVGV4dCgpOwotICAgIGxheW91dFRlc3RDb250cm9sbGVyLnNldEN1c3RvbVBvbGlj
eURlbGVnYXRlKHRydWUpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRGb3JQb2xpY3lE
ZWxlZ2F0ZSgpOwogICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJmb3JtIilbMF0u
c3VibWl0KCk7Ci0gICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0Q3VzdG9tUG9saWN5RGVsZWdh
dGUoZmFsc2UpOwogICB9CiB9CiA8L3NjcmlwdD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZm9y
bXMvbWFpbHRvL3Bvc3QtbXVsdGlwbGUtaXRlbXMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L2Zvcm1zL21haWx0by9wb3N0LW11bHRpcGxlLWl0ZW1zLmh0bWwJKHJldmlzaW9u
IDQyMDQ0KQorKysgTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9tYWlsdG8vcG9zdC1tdWx0aXBsZS1p
dGVtcy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC05LDkgKzksOCBAQCBGaWVsZCAyOiA8aW5wdXQg
dHlwZT0idGV4dCIgc2l6ZT0iMTAiIG1hCiBmdW5jdGlvbiB0ZXN0KCkgewogICBpZiAod2luZG93
LmxheW91dFRlc3RDb250cm9sbGVyKSB7CiAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFz
VGV4dCgpOwotICAgIGxheW91dFRlc3RDb250cm9sbGVyLnNldEN1c3RvbVBvbGljeURlbGVnYXRl
KHRydWUpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRGb3JQb2xpY3lEZWxlZ2F0ZSgp
OwogICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJmb3JtIilbMF0uc3VibWl0KCk7
Ci0gICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUoZmFsc2Up
OwogICB9CiB9CiA8L3NjcmlwdD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZm9ybXMvbWFpbHRv
L3Bvc3QtdGV4dC1wbGFpbi13aXRoLWFjY2VwdC1jaGFyc2V0Lmh0bWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9tYWlsdG8vcG9zdC10ZXh0LXBsYWluLXdpdGgtYWNjZXB0
LWNoYXJzZXQuaHRtbAkocmV2aXNpb24gNDIwNDQpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1z
L21haWx0by9wb3N0LXRleHQtcGxhaW4td2l0aC1hY2NlcHQtY2hhcnNldC5odG1sCSh3b3JraW5n
IGNvcHkpCkBAIC0xMyw5ICsxMyw4IEBACiBmdW5jdGlvbiB0ZXN0KCkgewogICBpZiAod2luZG93
LmxheW91dFRlc3RDb250cm9sbGVyKSB7CiAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFz
VGV4dCgpOwotICAgIGxheW91dFRlc3RDb250cm9sbGVyLnNldEN1c3RvbVBvbGljeURlbGVnYXRl
KHRydWUpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRGb3JQb2xpY3lEZWxlZ2F0ZSgp
OwogICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJmb3JtIilbMF0uc3VibWl0KCk7
Ci0gICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUoZmFsc2Up
OwogICB9CiB9CiA8L3NjcmlwdD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZm9ybXMvbWFpbHRv
L3Bvc3QtdGV4dC1wbGFpbi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZm9y
bXMvbWFpbHRvL3Bvc3QtdGV4dC1wbGFpbi5odG1sCShyZXZpc2lvbiA0MjA0NCkKKysrIExheW91
dFRlc3RzL2Zhc3QvZm9ybXMvbWFpbHRvL3Bvc3QtdGV4dC1wbGFpbi5odG1sCSh3b3JraW5nIGNv
cHkpCkBAIC0xMyw5ICsxMyw4IEBACiBmdW5jdGlvbiB0ZXN0KCkgewogICBpZiAod2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKSB7CiAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4
dCgpOwotICAgIGxheW91dFRlc3RDb250cm9sbGVyLnNldEN1c3RvbVBvbGljeURlbGVnYXRlKHRy
dWUpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRGb3JQb2xpY3lEZWxlZ2F0ZSgpOwog
ICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJmb3JtIilbMF0uc3VibWl0KCk7Ci0g
ICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUoZmFsc2UpOwog
ICB9CiB9CiA8L3NjcmlwdD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29047</attachid>
            <date>2009-03-29 12:29:45 -0700</date>
            <delta_ts>2009-03-31 18:01:14 -0700</delta_ts>
            <desc>almost done</desc>
            <filename>FormWorkInProgress.txt</filename>
            <type>text/plain</type>
            <size>49828</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dl
YkNvcmUuYmFzZS5leHAJKHJldmlzaW9uIDQyMDc5KQorKysgV2ViQ29yZS9XZWJDb3JlLmJhc2Uu
ZXhwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTIsNiArMTUyLDcgQEAgX19aTjdXZWJDb3JlMTFGcmFt
ZUxvYWRlcjE0ZGV0YWNoQ2hpbGRyZQogX19aTjdXZWJDb3JlMTFGcmFtZUxvYWRlcjE0c2Nyb2xs
VG9BbmNob3JFUktOU180S1VSTEUKIF9fWk43V2ViQ29yZTExRnJhbWVMb2FkZXIxNHN0b3BBbGxM
b2FkZXJzRXYKIF9fWk43V2ViQ29yZTExRnJhbWVMb2FkZXIxNmRldGFjaEZyb21QYXJlbnRFdgor
X19aTjdXZWJDb3JlMTFGcmFtZUxvYWRlcjE2bG9hZEZyYW1lUmVxdWVzdEVSS05TXzE2RnJhbWVM
b2FkUmVxdWVzdEViYk4zV1RGMTBQYXNzUmVmUHRySU5TXzVFdmVudEVFRU5TNV9JTlNfOUZvcm1T
dGF0ZUVFRQogX19aTjdXZWJDb3JlMTFGcmFtZUxvYWRlcjE3c3RvcEZvclVzZXJDYW5jZWxFYgog
X19aTjdXZWJDb3JlMTFGcmFtZUxvYWRlcjE4Y3VycmVudEhpc3RvcnlJdGVtRXYKIF9fWk43V2Vi
Q29yZTExRnJhbWVMb2FkZXIxOHNldExvY2FsTG9hZFBvbGljeUVOUzBfMTVMb2NhbExvYWRQb2xp
Y3lFCkBAIC0xNjIsNyArMTYzLDYgQEAgX19aTjdXZWJDb3JlMTFGcmFtZUxvYWRlcjIzdGltZU9m
TGFzdENvbQogX19aTjdXZWJDb3JlMTFGcmFtZUxvYWRlcjI0cmVnaXN0ZXJVUkxTY2hlbWVBc0xv
Y2FsRVJLTlNfNlN0cmluZ0UKIF9fWk43V2ViQ29yZTExRnJhbWVMb2FkZXIyNnJlbG9hZFdpdGhP
dmVycmlkZUVuY29kaW5nRVJLTlNfNlN0cmluZ0UKIF9fWk43V2ViQ29yZTExRnJhbWVMb2FkZXIy
NnNhdmVEb2N1bWVudEFuZFNjcm9sbFN0YXRlRXYKLV9fWk43V2ViQ29yZTExRnJhbWVMb2FkZXIz
M2xvYWRGcmFtZVJlcXVlc3RXaXRoRm9ybUFuZFZhbHVlc0VSS05TXzE2RnJhbWVMb2FkUmVxdWVz
dEViYk4zV1RGMTBQYXNzUmVmUHRySU5TXzVFdmVudEVFRVBOU18xNUhUTUxGb3JtRWxlbWVudEVS
S05TNF83SGFzaE1hcElOU182U3RyaW5nRVNCX05TXzEwU3RyaW5nSGFzaEVOUzRfMTBIYXNoVHJh
aXRzSVNCX0VFU0VfRUUKIF9fWk43V2ViQ29yZTExRnJhbWVMb2FkZXIzNnNhdmVTY3JvbGxQb3Np
dGlvbkFuZFZpZXdTdGF0ZVRvSXRlbUVQTlNfMTFIaXN0b3J5SXRlbUUKIF9fWk43V2ViQ29yZTEx
RnJhbWVMb2FkZXI0bG9hZEVSS05TXzE1UmVzb3VyY2VSZXF1ZXN0RVJLTlNfMTRTdWJzdGl0dXRl
RGF0YUViCiBfX1pON1dlYkNvcmUxMUZyYW1lTG9hZGVyNGxvYWRFUktOU18xNVJlc291cmNlUmVx
dWVzdEVSS05TXzZTdHJpbmdFYgpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAJKHJldmlz
aW9uIDQyMDg0KQorKysgV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIsNyArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAo
a25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29p
dmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxs
ZXJAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAw
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQs
IDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICogICAgICAgICAgIChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQG55cG9w
LmNvbSkKICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiRmlsZVN5c3Rl
bS5oIgogI2luY2x1ZGUgIkZvcm1EYXRhLmgiCiAjaW5jbHVkZSAiRm9ybURhdGFMaXN0LmgiCisj
aW5jbHVkZSAiRm9ybVN0YXRlLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFt
ZUxvYWRlci5oIgogI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgpAQCAtNDQsMTEgKzQ1LDEwIEBA
CiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNs
dWRlICJSZW5kZXJUZXh0Q29udHJvbC5oIgorI2luY2x1ZGUgPGxpbWl0cz4KICNpbmNsdWRlIDx3
dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvUmFuZG9tTnVtYmVyLmg+CiAKLSNpbmNs
dWRlIDxsaW1pdHM+Ci0KICNpZiBQTEFURk9STShXWCkKICNpbmNsdWRlIDx3eC9kZWZzLmg+CiAj
aW5jbHVkZSA8d3gvZmlsZW5hbWUuaD4KQEAgLTU4LDYgKzU4LDggQEAKICNpbmNsdWRlIDxzaGx3
YXBpLmg+CiAjZW5kaWYKIAordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKwogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwpAQCAtMzE5LDE0ICszMjEsMTQgQEAg
dm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnN1Ym1pdChFdmVudCogZXZlbgogICAgIEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQqIGZpcnN0U3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRvbiA9IDA7CiAgICAgYm9vbCBu
ZWVkQnV0dG9uQWN0aXZhdGlvbiA9IGFjdGl2YXRlU3VibWl0QnV0dG9uOyAvLyBkbyB3ZSBuZWVk
IHRvIGFjdGl2YXRlIGEgc3VibWl0IGJ1dHRvbj8KICAgICAKLSAgICBmcmFtZS0+bG9hZGVyKCkt
PmNsZWFyUmVjb3JkZWRGb3JtVmFsdWVzKCk7Ci0gICAgZnJhbWUtPmxvYWRlcigpLT5zZXRGb3Jt
QWJvdXRUb0JlU3VibWl0dGVkKHRoaXMpOworICAgIFZlY3RvcjxwYWlyPFN0cmluZywgU3RyaW5n
PiA+IGZvcm1WYWx1ZXM7CisKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZm9ybUVsZW1l
bnRzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGNvbnRy
b2wgPSBmb3JtRWxlbWVudHNbaV07CiAgICAgICAgIGlmIChjb250cm9sLT5oYXNMb2NhbE5hbWUo
aW5wdXRUYWcpKSB7CiAgICAgICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IHN0YXRp
Y19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihjb250cm9sKTsKICAgICAgICAgICAgIGlmIChpbnB1
dC0+aXNUZXh0RmllbGQoKSkgewotICAgICAgICAgICAgICAgIGZyYW1lLT5sb2FkZXIoKS0+cmVj
b3JkRm9ybVZhbHVlKGlucHV0LT5uYW1lKCksIGlucHV0LT52YWx1ZSgpKTsKKyAgICAgICAgICAg
ICAgICBmb3JtVmFsdWVzLmFwcGVuZChwYWlyPFN0cmluZywgU3RyaW5nPihpbnB1dC0+bmFtZSgp
LCBpbnB1dC0+dmFsdWUoKSkpOwogICAgICAgICAgICAgICAgIGlmIChpbnB1dC0+aXNTZWFyY2hG
aWVsZCgpKQogICAgICAgICAgICAgICAgICAgICBpbnB1dC0+YWRkU2VhcmNoUmVzdWx0KCk7CiAg
ICAgICAgICAgICB9CkBAIC0zMzksNiArMzQxLDggQEAgdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnN1
Ym1pdChFdmVudCogZXZlbgogICAgICAgICB9CiAgICAgfQogCisgICAgUmVmUHRyPEZvcm1TdGF0
ZT4gZm9ybVN0YXRlID0gRm9ybVN0YXRlOjpjcmVhdGUodGhpcywgZm9ybVZhbHVlcywgZnJhbWUp
OworCiAgICAgaWYgKG5lZWRCdXR0b25BY3RpdmF0aW9uICYmIGZpcnN0U3VjY2Vzc2Z1bFN1Ym1p
dEJ1dHRvbikKICAgICAgICAgZmlyc3RTdWNjZXNzZnVsU3VibWl0QnV0dG9uLT5zZXRBY3RpdmF0
ZWRTdWJtaXQodHJ1ZSk7CiAgICAgCkBAIC0zNjEsMTQgKzM2NSwxNCBAQCB2b2lkIEhUTUxGb3Jt
RWxlbWVudDo6c3VibWl0KEV2ZW50KiBldmVuCiAgICAgICAgICAgICAgICAgbV91cmwgPSB1cmwu
c3RyaW5nKCk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGZyYW1lLT5sb2FkZXIoKS0+
c3VibWl0Rm9ybSgiUE9TVCIsIG1fdXJsLCBkYXRhLnJlbGVhc2UoKSwgbV90YXJnZXQsIG1fZm9y
bURhdGFCdWlsZGVyLmVuY29kaW5nVHlwZSgpLCBTdHJpbmcoKSwgZXZlbnQsIGxvY2tIaXN0b3J5
LCBsb2NrQmFja0ZvcndhcmRMaXN0KTsKKyAgICAgICAgICAgIGZyYW1lLT5sb2FkZXIoKS0+c3Vi
bWl0Rm9ybSgiUE9TVCIsIG1fdXJsLCBkYXRhLnJlbGVhc2UoKSwgbV90YXJnZXQsIG1fZm9ybURh
dGFCdWlsZGVyLmVuY29kaW5nVHlwZSgpLCBTdHJpbmcoKSwgbG9ja0hpc3RvcnksIGxvY2tCYWNr
Rm9yd2FyZExpc3QsIGV2ZW50LCBmb3JtU3RhdGUucmVsZWFzZSgpKTsKICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBib3VuZGFyeSA9IG1fZm9ybURhdGFCdWlsZGVy
LmdlbmVyYXRlVW5pcXVlQm91bmRhcnlTdHJpbmcoKTsKLSAgICAgICAgICAgIGZyYW1lLT5sb2Fk
ZXIoKS0+c3VibWl0Rm9ybSgiUE9TVCIsIG1fdXJsLCBjcmVhdGVGb3JtRGF0YShib3VuZGFyeS5k
YXRhKCkpLCBtX3RhcmdldCwgbV9mb3JtRGF0YUJ1aWxkZXIuZW5jb2RpbmdUeXBlKCksIGJvdW5k
YXJ5LmRhdGEoKSwgZXZlbnQsIGxvY2tIaXN0b3J5LCBsb2NrQmFja0ZvcndhcmRMaXN0KTsKKyAg
ICAgICAgICAgIGZyYW1lLT5sb2FkZXIoKS0+c3VibWl0Rm9ybSgiUE9TVCIsIG1fdXJsLCBjcmVh
dGVGb3JtRGF0YShib3VuZGFyeS5kYXRhKCkpLCBtX3RhcmdldCwgbV9mb3JtRGF0YUJ1aWxkZXIu
ZW5jb2RpbmdUeXBlKCksIGJvdW5kYXJ5LmRhdGEoKSwgbG9ja0hpc3RvcnksIGxvY2tCYWNrRm9y
d2FyZExpc3QsIGV2ZW50LCBmb3JtU3RhdGUucmVsZWFzZSgpKTsKICAgICAgICAgfQogICAgIH0g
ZWxzZSB7CiAgICAgICAgIG1fZm9ybURhdGFCdWlsZGVyLnNldElzTXVsdGlQYXJ0Rm9ybShmYWxz
ZSk7Ci0gICAgICAgIGZyYW1lLT5sb2FkZXIoKS0+c3VibWl0Rm9ybSgiR0VUIiwgbV91cmwsIGNy
ZWF0ZUZvcm1EYXRhKENTdHJpbmcoKSksIG1fdGFyZ2V0LCBTdHJpbmcoKSwgU3RyaW5nKCksIGV2
ZW50LCBsb2NrSGlzdG9yeSwgbG9ja0JhY2tGb3J3YXJkTGlzdCk7CisgICAgICAgIGZyYW1lLT5s
b2FkZXIoKS0+c3VibWl0Rm9ybSgiR0VUIiwgbV91cmwsIGNyZWF0ZUZvcm1EYXRhKENTdHJpbmco
KSksIG1fdGFyZ2V0LCBTdHJpbmcoKSwgU3RyaW5nKCksIGxvY2tIaXN0b3J5LCBsb2NrQmFja0Zv
cndhcmRMaXN0LCBldmVudCwgZm9ybVN0YXRlLnJlbGVhc2UoKSk7CiAgICAgfQogCiAgICAgaWYg
KG5lZWRCdXR0b25BY3RpdmF0aW9uICYmIGZpcnN0U3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRvbikKSW5k
ZXg6IFdlYkNvcmUvbG9hZGVyL0Zvcm1TdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9s
b2FkZXIvRm9ybVN0YXRlLmNwcAkocmV2aXNpb24gNDIwNzkpCisrKyBXZWJDb3JlL2xvYWRlci9G
b3JtU3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDE2ICszNCwxNiBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NSZWZQdHI8Rm9ybVN0YXRlPiBGb3JtU3RhdGU6
OmNyZWF0ZShQYXNzUmVmUHRyPEhUTUxGb3JtRWxlbWVudD4gZm9ybSwgY29uc3QgSGFzaE1hcDxT
dHJpbmcsIFN0cmluZz4mIHZhbHVlcywgUGFzc1JlZlB0cjxGcmFtZT4gc291cmNlRnJhbWUpCitp
bmxpbmUgRm9ybVN0YXRlOjpGb3JtU3RhdGUoUGFzc1JlZlB0cjxIVE1MRm9ybUVsZW1lbnQ+IGZv
cm0sIFN0cmluZ1BhaXJWZWN0b3ImIHRleHRGaWVsZFZhbHVlc1RvQWRvcHQsIFBhc3NSZWZQdHI8
RnJhbWU+IHNvdXJjZUZyYW1lKQorICAgIDogbV9mb3JtKGZvcm0pCisgICAgLCBtX3NvdXJjZUZy
YW1lKHNvdXJjZUZyYW1lKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgRm9ybVN0YXRlKGZv
cm0sIHZhbHVlcywgc291cmNlRnJhbWUpKTsKKyAgICBtX3RleHRGaWVsZFZhbHVlcy5zd2FwKHRl
eHRGaWVsZFZhbHVlc1RvQWRvcHQpOwogfQogCi1Gb3JtU3RhdGU6OkZvcm1TdGF0ZShQYXNzUmVm
UHRyPEhUTUxGb3JtRWxlbWVudD4gZm9ybSwgY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4m
IHZhbHVlcywgUGFzc1JlZlB0cjxGcmFtZT4gc291cmNlRnJhbWUpCi0gICAgOiBtX2Zvcm0oZm9y
bSkKLSAgICAsIG1fdmFsdWVzKHZhbHVlcykKLSAgICAsIG1fc291cmNlRnJhbWUoc291cmNlRnJh
bWUpCitQYXNzUmVmUHRyPEZvcm1TdGF0ZT4gRm9ybVN0YXRlOjpjcmVhdGUoUGFzc1JlZlB0cjxI
VE1MRm9ybUVsZW1lbnQ+IGZvcm0sIFN0cmluZ1BhaXJWZWN0b3ImIHRleHRGaWVsZFZhbHVlc1Rv
QWRvcHQsIFBhc3NSZWZQdHI8RnJhbWU+IHNvdXJjZUZyYW1lKQogeworICAgIHJldHVybiBhZG9w
dFJlZihuZXcgRm9ybVN0YXRlKGZvcm0sIHRleHRGaWVsZFZhbHVlc1RvQWRvcHQsIHNvdXJjZUZy
YW1lKSk7CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0Zvcm1TdGF0ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0Zvcm1TdGF0ZS5oCShyZXZpc2lvbiA0MjA3OSkKKysrIFdl
YkNvcmUvbG9hZGVyL0Zvcm1TdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDI4
ICsyOSwyOCBAQAogI2lmbmRlZiBGb3JtU3RhdGVfaAogI2RlZmluZSBGb3JtU3RhdGVfaAogCi0j
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCi0jaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBGcmFtZTsKICAgICBjbGFzcyBIVE1MRm9ybUVs
ZW1lbnQ7CiAKKyAgICB0eXBlZGVmIFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+ID4g
U3RyaW5nUGFpclZlY3RvcjsKKwogICAgIGNsYXNzIEZvcm1TdGF0ZSA6IHB1YmxpYyBSZWZDb3Vu
dGVkPEZvcm1TdGF0ZT4gewogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8
Rm9ybVN0YXRlPiBjcmVhdGUoUGFzc1JlZlB0cjxIVE1MRm9ybUVsZW1lbnQ+IGZvcm0sIGNvbnN0
IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiB2YWx1ZXMsIFBhc3NSZWZQdHI8RnJhbWU+IHNvdXJj
ZUZyYW1lKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPiBjcmVhdGUoUGFz
c1JlZlB0cjxIVE1MRm9ybUVsZW1lbnQ+LCBTdHJpbmdQYWlyVmVjdG9yJiB0ZXh0RmllbGRWYWx1
ZXNUb0Fkb3B0LCBQYXNzUmVmUHRyPEZyYW1lPik7CiAKICAgICAgICAgSFRNTEZvcm1FbGVtZW50
KiBmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9mb3JtLmdldCgpOyB9Ci0gICAgICAgIGNvbnN0IEhh
c2hNYXA8U3RyaW5nLCBTdHJpbmc+JiB2YWx1ZXMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlczsg
fQorICAgICAgICBjb25zdCBTdHJpbmdQYWlyVmVjdG9yJiB0ZXh0RmllbGRWYWx1ZXMoKSBjb25z
dCB7IHJldHVybiBtX3RleHRGaWVsZFZhbHVlczsgfQogICAgICAgICBGcmFtZSogc291cmNlRnJh
bWUoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZUZyYW1lLmdldCgpOyB9CiAKICAgICBwcml2YXRl
OgotICAgICAgICBGb3JtU3RhdGUoUGFzc1JlZlB0cjxIVE1MRm9ybUVsZW1lbnQ+IGZvcm0sIGNv
bnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiB2YWx1ZXMsIFBhc3NSZWZQdHI8RnJhbWU+IHNv
dXJjZUZyYW1lKTsKKyAgICAgICAgRm9ybVN0YXRlKFBhc3NSZWZQdHI8SFRNTEZvcm1FbGVtZW50
PiwgU3RyaW5nUGFpclZlY3RvciYgdGV4dEZpZWxkVmFsdWVzVG9BZG9wdCwgUGFzc1JlZlB0cjxG
cmFtZT4pOwogCiAgICAgICAgIFJlZlB0cjxIVE1MRm9ybUVsZW1lbnQ+IG1fZm9ybTsKLSAgICAg
ICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gbV92YWx1ZXM7CisgICAgICAgIFN0cmluZ1BhaXJW
ZWN0b3IgbV90ZXh0RmllbGRWYWx1ZXM7CiAgICAgICAgIFJlZlB0cjxGcmFtZT4gbV9zb3VyY2VG
cmFtZTsKICAgICB9OwogCkluZGV4OiBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCShyZXZpc2lvbiA0MjA3
OSkKKysrIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTQzLDQ1ICsxNDMsMjIgQEAgc3RhdGljIFVSTFNjaGVtZXNNYXAmIG5vQWNjZXNzU2NoZW1lcygp
CiAgICAgcmV0dXJuIG5vQWNjZXNzU2NoZW1lczsKIH0KIAotc3RydWN0IEZvcm1TdWJtaXNzaW9u
IHsKLSAgICBGb3JtU3VibWlzc2lvbihjb25zdCBjaGFyKiBhY3Rpb24sIGNvbnN0IFN0cmluZyYg
dXJsLCBQYXNzUmVmUHRyPEZvcm1EYXRhPiBmb3JtRGF0YSwKLSAgICAgICAgICAgICAgICAgICBj
b25zdCBTdHJpbmcmIHRhcmdldCwgY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSwgY29uc3QgU3Ry
aW5nJiBib3VuZGFyeSwKLSAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPEV2ZW50PiBldmVu
dCwgYm9vbCBsb2NrSGlzdG9yeSwgYm9vbCBsb2NrQmFja0ZvcndhcmRMaXN0KQotICAgICAgICA6
IGFjdGlvbihhY3Rpb24pCi0gICAgICAgICwgdXJsKHVybCkKLSAgICAgICAgLCBmb3JtRGF0YShm
b3JtRGF0YSkKLSAgICAgICAgLCB0YXJnZXQodGFyZ2V0KQotICAgICAgICAsIGNvbnRlbnRUeXBl
KGNvbnRlbnRUeXBlKQotICAgICAgICAsIGJvdW5kYXJ5KGJvdW5kYXJ5KQotICAgICAgICAsIGV2
ZW50KGV2ZW50KQotICAgICAgICAsIGxvY2tIaXN0b3J5KGxvY2tIaXN0b3J5KQotICAgICAgICAs
IGxvY2tCYWNrRm9yd2FyZExpc3QobG9ja0JhY2tGb3J3YXJkTGlzdCkKLSAgICB7Ci0gICAgfQot
Ci0gICAgY29uc3QgY2hhciogYWN0aW9uOwotICAgIFN0cmluZyB1cmw7Ci0gICAgUmVmUHRyPEZv
cm1EYXRhPiBmb3JtRGF0YTsKLSAgICBTdHJpbmcgdGFyZ2V0OwotICAgIFN0cmluZyBjb250ZW50
VHlwZTsKLSAgICBTdHJpbmcgYm91bmRhcnk7Ci0gICAgUmVmUHRyPEV2ZW50PiBldmVudDsKLSAg
ICBib29sIGxvY2tIaXN0b3J5OwotICAgIGJvb2wgbG9ja0JhY2tGb3J3YXJkTGlzdDsKLX07Ci0K
IHN0cnVjdCBTY2hlZHVsZWRSZWRpcmVjdGlvbiB7Ci0gICAgZW51bSBUeXBlIHsgcmVkaXJlY3Rp
b24sIGxvY2F0aW9uQ2hhbmdlLCBoaXN0b3J5TmF2aWdhdGlvbiwgbG9jYXRpb25DaGFuZ2VEdXJp
bmdMb2FkIH07CisgICAgZW51bSBUeXBlIHsgcmVkaXJlY3Rpb24sIGxvY2F0aW9uQ2hhbmdlLCBo
aXN0b3J5TmF2aWdhdGlvbiwgZm9ybVN1Ym1pc3Npb24gfTsKIAogICAgIGNvbnN0IFR5cGUgdHlw
ZTsKICAgICBjb25zdCBkb3VibGUgZGVsYXk7CiAgICAgY29uc3QgU3RyaW5nIHVybDsKICAgICBj
b25zdCBTdHJpbmcgcmVmZXJyZXI7CisgICAgY29uc3QgRnJhbWVMb2FkUmVxdWVzdCBmcmFtZVJl
cXVlc3Q7CisgICAgY29uc3QgUmVmUHRyPEV2ZW50PiBldmVudDsKKyAgICBjb25zdCBSZWZQdHI8
Rm9ybVN0YXRlPiBmb3JtU3RhdGU7CiAgICAgY29uc3QgaW50IGhpc3RvcnlTdGVwczsKICAgICBj
b25zdCBib29sIGxvY2tIaXN0b3J5OwogICAgIGNvbnN0IGJvb2wgbG9ja0JhY2tGb3J3YXJkTGlz
dDsKICAgICBjb25zdCBib29sIHdhc1VzZXJHZXN0dXJlOwogICAgIGNvbnN0IGJvb2wgd2FzUmVm
cmVzaDsKKyAgICBjb25zdCBib29sIHdhc0R1cmluZ0xvYWQ7CiAKICAgICBTY2hlZHVsZWRSZWRp
cmVjdGlvbihkb3VibGUgZGVsYXksIGNvbnN0IFN0cmluZyYgdXJsLCBib29sIGxvY2tIaXN0b3J5
LCBib29sIGxvY2tCYWNrRm9yd2FyZExpc3QsIGJvb2wgd2FzVXNlckdlc3R1cmUsIGJvb2wgcmVm
cmVzaCkKICAgICAgICAgOiB0eXBlKHJlZGlyZWN0aW9uKQpAQCAtMTkyLDEyICsxNjksMTMgQEAg
c3RydWN0IFNjaGVkdWxlZFJlZGlyZWN0aW9uIHsKICAgICAgICAgLCBsb2NrQmFja0ZvcndhcmRM
aXN0KGxvY2tCYWNrRm9yd2FyZExpc3QpCiAgICAgICAgICwgd2FzVXNlckdlc3R1cmUod2FzVXNl
ckdlc3R1cmUpCiAgICAgICAgICwgd2FzUmVmcmVzaChyZWZyZXNoKQorICAgICAgICAsIHdhc0R1
cmluZ0xvYWQoZmFsc2UpCiAgICAgewogICAgICAgICBBU1NFUlQoIXVybC5pc0VtcHR5KCkpOwog
ICAgIH0KIAotICAgIFNjaGVkdWxlZFJlZGlyZWN0aW9uKFR5cGUgbG9jYXRpb25DaGFuZ2VUeXBl
LCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiByZWZlcnJlciwgYm9vbCBsb2NrSGlz
dG9yeSwgYm9vbCBsb2NrQmFja0ZvcndhcmRMaXN0LCBib29sIHdhc1VzZXJHZXN0dXJlLCBib29s
IHJlZnJlc2gpCi0gICAgICAgIDogdHlwZShsb2NhdGlvbkNoYW5nZVR5cGUpCisgICAgU2NoZWR1
bGVkUmVkaXJlY3Rpb24oY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgcmVmZXJyZXIs
IGJvb2wgbG9ja0hpc3RvcnksIGJvb2wgbG9ja0JhY2tGb3J3YXJkTGlzdCwgYm9vbCB3YXNVc2Vy
R2VzdHVyZSwgYm9vbCByZWZyZXNoLCBib29sIGR1cmluZ0xvYWQpCisgICAgICAgIDogdHlwZShs
b2NhdGlvbkNoYW5nZSkKICAgICAgICAgLCBkZWxheSgwKQogICAgICAgICAsIHVybCh1cmwpCiAg
ICAgICAgICwgcmVmZXJyZXIocmVmZXJyZXIpCkBAIC0yMDYsOCArMTg0LDggQEAgc3RydWN0IFNj
aGVkdWxlZFJlZGlyZWN0aW9uIHsKICAgICAgICAgLCBsb2NrQmFja0ZvcndhcmRMaXN0KGxvY2tC
YWNrRm9yd2FyZExpc3QpCiAgICAgICAgICwgd2FzVXNlckdlc3R1cmUod2FzVXNlckdlc3R1cmUp
CiAgICAgICAgICwgd2FzUmVmcmVzaChyZWZyZXNoKQorICAgICAgICAsIHdhc0R1cmluZ0xvYWQo
ZHVyaW5nTG9hZCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChsb2NhdGlvbkNoYW5nZVR5cGUgPT0g
bG9jYXRpb25DaGFuZ2UgfHwgbG9jYXRpb25DaGFuZ2VUeXBlID09IGxvY2F0aW9uQ2hhbmdlRHVy
aW5nTG9hZCk7CiAgICAgICAgIEFTU0VSVCghdXJsLmlzRW1wdHkoKSk7CiAgICAgfQogCkBAIC0y
MTksOCArMTk3LDI4IEBAIHN0cnVjdCBTY2hlZHVsZWRSZWRpcmVjdGlvbiB7CiAgICAgICAgICwg
bG9ja0JhY2tGb3J3YXJkTGlzdChmYWxzZSkKICAgICAgICAgLCB3YXNVc2VyR2VzdHVyZShmYWxz
ZSkKICAgICAgICAgLCB3YXNSZWZyZXNoKGZhbHNlKQorICAgICAgICAsIHdhc0R1cmluZ0xvYWQo
ZmFsc2UpCiAgICAgewogICAgIH0KKworICAgIFNjaGVkdWxlZFJlZGlyZWN0aW9uKGNvbnN0IEZy
YW1lTG9hZFJlcXVlc3QmIGZyYW1lUmVxdWVzdCwKKyAgICAgICAgICAgIGJvb2wgbG9ja0hpc3Rv
cnksIGJvb2wgbG9ja0JhY2tGb3J3YXJkTGlzdCwgUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQsIFBh
c3NSZWZQdHI8Rm9ybVN0YXRlPiBmb3JtU3RhdGUsCisgICAgICAgICAgICBib29sIGR1cmluZ0xv
YWQpCisgICAgICAgIDogdHlwZShmb3JtU3VibWlzc2lvbikKKyAgICAgICAgLCBkZWxheSgwKQor
ICAgICAgICAsIGZyYW1lUmVxdWVzdChmcmFtZVJlcXVlc3QpCisgICAgICAgICwgZXZlbnQoZXZl
bnQpCisgICAgICAgICwgZm9ybVN0YXRlKGZvcm1TdGF0ZSkKKyAgICAgICAgLCBoaXN0b3J5U3Rl
cHMoMCkKKyAgICAgICAgLCBsb2NrSGlzdG9yeShsb2NrSGlzdG9yeSkKKyAgICAgICAgLCBsb2Nr
QmFja0ZvcndhcmRMaXN0KGxvY2tCYWNrRm9yd2FyZExpc3QpCisgICAgICAgICwgd2FzVXNlckdl
c3R1cmUoZmFsc2UpCisgICAgICAgICwgd2FzUmVmcmVzaChmYWxzZSkKKyAgICAgICAgLCB3YXNE
dXJpbmdMb2FkKGR1cmluZ0xvYWQpCisgICAgeworICAgICAgICBBU1NFUlQoIWZyYW1lUmVxdWVz
dC5pc0VtcHR5KCkpOworICAgICAgICBBU1NFUlQoZm9ybVN0YXRlKTsKKyAgICB9CiB9OwogCiBz
dGF0aWMgZG91YmxlIHN0b3JlZFRpbWVPZkxhc3RDb21wbGV0ZWRMb2FkOwpAQCAtMzQ3LDcgKzM0
NSw3IEBAIEZyYW1lKiBGcmFtZUxvYWRlcjo6Y3JlYXRlV2luZG93KEZyYW1lTG8KICAgICAgICAg
RnJhbWUqIGZyYW1lID0gZnJhbWVMb2FkZXJGb3JGcmFtZUxvb2t1cC0+ZnJhbWUoKS0+dHJlZSgp
LT5maW5kKHJlcXVlc3QuZnJhbWVOYW1lKCkpOwogICAgICAgICBpZiAoZnJhbWUgJiYgc2hvdWxk
QWxsb3dOYXZpZ2F0aW9uKGZyYW1lKSkgewogICAgICAgICAgICAgaWYgKCFyZXF1ZXN0LnJlc291
cmNlUmVxdWVzdCgpLnVybCgpLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBmcmFtZS0+bG9h
ZGVyKCktPmxvYWRGcmFtZVJlcXVlc3RXaXRoRm9ybUFuZFZhbHVlcyhyZXF1ZXN0LCBmYWxzZSwg
ZmFsc2UsIDAsIDAsIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+KCkpOworICAgICAgICAgICAgICAg
IGZyYW1lLT5sb2FkZXIoKS0+bG9hZEZyYW1lUmVxdWVzdChyZXF1ZXN0LCBmYWxzZSwgZmFsc2Us
IDAsIDApOwogICAgICAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpKQogICAg
ICAgICAgICAgICAgIHBhZ2UtPmNocm9tZSgpLT5mb2N1cygpOwogICAgICAgICAgICAgY3JlYXRl
ZCA9IGZhbHNlOwpAQCAtNDMyLDcgKzQzMCw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6OnVybFNlbGVj
dGVkKGNvbnN0IFJlc28KICAgICAgICAgZnJhbWVSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNl
dEhUVFBSZWZlcnJlcihtX291dGdvaW5nUmVmZXJyZXIpOwogICAgIGFkZEhUVFBPcmlnaW5JZk5l
ZWRlZChmcmFtZVJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCksIG91dGdvaW5nT3JpZ2luKCkpOwog
Ci0gICAgbG9hZEZyYW1lUmVxdWVzdFdpdGhGb3JtQW5kVmFsdWVzKGZyYW1lUmVxdWVzdCwgbG9j
a0hpc3RvcnksIGxvY2tCYWNrRm9yd2FyZExpc3QsIHRyaWdnZXJpbmdFdmVudCwgMCwgSGFzaE1h
cDxTdHJpbmcsIFN0cmluZz4oKSk7CisgICAgbG9hZEZyYW1lUmVxdWVzdChmcmFtZVJlcXVlc3Qs
IGxvY2tIaXN0b3J5LCBsb2NrQmFja0ZvcndhcmRMaXN0LCB0cmlnZ2VyaW5nRXZlbnQsIDApOwog
fQogCiBib29sIEZyYW1lTG9hZGVyOjpyZXF1ZXN0RnJhbWUoSFRNTEZyYW1lT3duZXJFbGVtZW50
KiBvd25lckVsZW1lbnQsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nLCBjb25zdCBBdG9taWNTdHJp
bmcmIGZyYW1lTmFtZSkKQEAgLTQ3OSw4ICs0NzcsNyBAQCBGcmFtZSogRnJhbWVMb2FkZXI6Omxv
YWRTdWJmcmFtZShIVE1MRnJhCiAgICAgfQogCiAgICAgYm9vbCBoaWRlUmVmZXJyZXIgPSBzaG91
bGRIaWRlUmVmZXJyZXIodXJsLCByZWZlcnJlcik7Ci0gICAgUmVmUHRyPEZyYW1lPiBmcmFtZSA9
IG1fY2xpZW50LT5jcmVhdGVGcmFtZSh1cmwsIG5hbWUsIG93bmVyRWxlbWVudCwgaGlkZVJlZmVy
cmVyID8gU3RyaW5nKCkgOiByZWZlcnJlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYWxsb3dzU2Nyb2xsaW5nLCBtYXJnaW5XaWR0aCwgbWFyZ2luSGVpZ2h0KTsK
KyAgICBSZWZQdHI8RnJhbWU+IGZyYW1lID0gbV9jbGllbnQtPmNyZWF0ZUZyYW1lKHVybCwgbmFt
ZSwgb3duZXJFbGVtZW50LCBoaWRlUmVmZXJyZXIgPyBTdHJpbmcoKSA6IHJlZmVycmVyLCBhbGxv
d3NTY3JvbGxpbmcsIG1hcmdpbldpZHRoLCBtYXJnaW5IZWlnaHQpOwogCiAgICAgaWYgKCFmcmFt
ZSkgIHsKICAgICAgICAgY2hlY2tDYWxsSW1wbGljaXRDbG9zZSgpOwpAQCAtNTEwLDI3ICs1MDcs
MjAgQEAgRnJhbWUqIEZyYW1lTG9hZGVyOjpsb2FkU3ViZnJhbWUoSFRNTEZyYQogICAgIHJldHVy
biBmcmFtZS5nZXQoKTsKIH0KIAotdm9pZCBGcmFtZUxvYWRlcjo6c3VibWl0Rm9ybUFnYWluKCkK
LXsKLSAgICBpZiAobV9pc1J1bm5pbmdTY3JpcHQpCi0gICAgICAgIHJldHVybjsKLSAgICBPd25Q
dHI8Rm9ybVN1Ym1pc3Npb24+IGZvcm0obV9kZWZlcnJlZEZvcm1TdWJtaXNzaW9uLnJlbGVhc2Uo
KSk7Ci0gICAgaWYgKCFmb3JtKQotICAgICAgICByZXR1cm47Ci0gICAgc3VibWl0Rm9ybShmb3Jt
LT5hY3Rpb24sIGZvcm0tPnVybCwgZm9ybS0+Zm9ybURhdGEsIGZvcm0tPnRhcmdldCwgZm9ybS0+
Y29udGVudFR5cGUsIGZvcm0tPmJvdW5kYXJ5LCBmb3JtLT5ldmVudC5nZXQoKSwgZm9ybS0+bG9j
a0hpc3RvcnksIGZvcm0tPmxvY2tCYWNrRm9yd2FyZExpc3QpOwotfQotCiB2b2lkIEZyYW1lTG9h
ZGVyOjpzdWJtaXRGb3JtKGNvbnN0IGNoYXIqIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB1cmwsIFBh
c3NSZWZQdHI8Rm9ybURhdGE+IGZvcm1EYXRhLAotICAgIGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBj
b25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlLCBjb25zdCBTdHJpbmcmIGJvdW5kYXJ5LCBQYXNzUmVm
UHRyPEV2ZW50PiBldmVudCwgYm9vbCBsb2NrSGlzdG9yeSwgYm9vbCBsb2NrQmFja0ZvcndhcmRM
aXN0KQorICAgIGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBl
LCBjb25zdCBTdHJpbmcmIGJvdW5kYXJ5LAorICAgIGJvb2wgbG9ja0hpc3RvcnksIGJvb2wgbG9j
a0JhY2tGb3J3YXJkTGlzdCwgUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQsIFBhc3NSZWZQdHI8Rm9y
bVN0YXRlPiBmb3JtU3RhdGUpCiB7CisgICAgQVNTRVJUKGFjdGlvbik7CisgICAgQVNTRVJUKHN0
cmNtcChhY3Rpb24sICJHRVQiKSA9PSAwIHx8IHN0cmNtcChhY3Rpb24sICJQT1NUIikgPT0gMCk7
CiAgICAgQVNTRVJUKGZvcm1EYXRhKTsKKyAgICBBU1NFUlQoZm9ybVN0YXRlKTsKKyAgICBBU1NF
UlQoZm9ybVN0YXRlLT5zb3VyY2VGcmFtZSgpID09IG1fZnJhbWUpOwogICAgIAogICAgIGlmICgh
bV9mcmFtZS0+cGFnZSgpKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgS1VSTCB1ID0gY29t
cGxldGVVUkwodXJsLmlzTnVsbCgpID8gIiIgOiB1cmwpOwotICAgIC8vIEZJWE1FOiBEbyB3ZSBy
ZWFsbHkgbmVlZCB0byBzcGVjaWFsLWNhc2UgYW4gZW1wdHkgVVJMPwotICAgIC8vIFdvdWxkIGl0
IGJlIGJldHRlciB0byBqdXN0IGdvIG9uIHdpdGggdGhlIGZvcm0gc3VibWlzc29uIGFuZCBsZXQg
dGhlIEkvTyBmYWlsPwogICAgIGlmICh1LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCkBA
IC01NDEsMjcgKzUzMSw0NSBAQCB2b2lkIEZyYW1lTG9hZGVyOjpzdWJtaXRGb3JtKGNvbnN0IGNo
YXIqCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAobV9pc1J1bm5pbmdTY3JpcHQp
IHsKLSAgICAgICAgaWYgKG1fZGVmZXJyZWRGb3JtU3VibWlzc2lvbikKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgbV9kZWZlcnJlZEZvcm1TdWJtaXNzaW9uLnNldChuZXcgRm9ybVN1Ym1p
c3Npb24oYWN0aW9uLCB1cmwsIGZvcm1EYXRhLCB0YXJnZXQsIGNvbnRlbnRUeXBlLCBib3VuZGFy
eSwgZXZlbnQsIGxvY2tIaXN0b3J5LCBsb2NrQmFja0ZvcndhcmRMaXN0KSk7CisgICAgRnJhbWVM
b2FkUmVxdWVzdCBmcmFtZVJlcXVlc3Q7CisKKyAgICBTdHJpbmcgdGFyZ2V0T3JCYXNlVGFyZ2V0
ID0gdGFyZ2V0LmlzRW1wdHkoKSA/IG1fZnJhbWUtPmRvY3VtZW50KCktPmJhc2VUYXJnZXQoKSA6
IHRhcmdldDsKKyAgICBGcmFtZSogdGFyZ2V0RnJhbWUgPSBmaW5kRnJhbWVGb3JOYXZpZ2F0aW9u
KHRhcmdldE9yQmFzZVRhcmdldCk7CisgICAgaWYgKCF0YXJnZXRGcmFtZSkgeworICAgICAgICB0
YXJnZXRGcmFtZSA9IG1fZnJhbWU7CisgICAgICAgIGZyYW1lUmVxdWVzdC5zZXRGcmFtZU5hbWUo
dGFyZ2V0T3JCYXNlVGFyZ2V0KTsKKyAgICB9CisgICAgaWYgKCF0YXJnZXRGcmFtZS0+cGFnZSgp
KQogICAgICAgICByZXR1cm47CisKKyAgICAvLyBGSVhNRTogV2UnZCBsaWtlIHRvIHJlbW92ZSB0
aGlzIGFsdG9nZXRoZXIgYW5kIGZpeCB0aGUgbXVsdGlwbGUgZm9ybSBzdWJtaXNzaW9uIGlzc3Vl
IGFub3RoZXIgd2F5LgorCisgICAgLy8gV2UgZG8gbm90IHdhbnQgdG8gc3VibWl0IG1vcmUgdGhh
biBvbmUgZm9ybSBmcm9tIHRoZSBzYW1lIHBhZ2UsIG5vciBkbyB3ZSB3YW50IHRvIHN1Ym1pdCBh
IHNpbmdsZQorICAgIC8vIGZvcm0gbW9yZSB0aGFuIG9uY2UuIFRoaXMgZmxhZyBwcmV2ZW50cyB0
aGVzZSBmcm9tIGhhcHBlbmluZzsgbm90IHN1cmUgaG93IG90aGVyIGJyb3dzZXJzIHByZXZlbnQg
dGhpcy4KKyAgICAvLyBUaGUgZmxhZyBpcyByZXNldCBpbiBlYWNoIHRpbWUgd2Ugc3RhcnQgaGFu
ZGxlIGEgbmV3IG1vdXNlIG9yIGtleSBkb3duIGV2ZW50LCBhbmQKKyAgICAvLyBhbHNvIGluIHNl
dFZpZXcgc2luY2UgdGhpcyBwYXJ0IG1heSBnZXQgcmV1c2VkIGZvciBhIHBhZ2UgZnJvbSB0aGUg
YmFjay9mb3J3YXJkIGNhY2hlLgorICAgIC8vIFRoZSBmb3JtIG11bHRpLXN1Ym1pdCBsb2dpYyBo
ZXJlIGlzIG9ubHkgbmVlZGVkIHdoZW4gd2UgYXJlIHN1Ym1pdHRpbmcgYSBmb3JtIHRoYXQgYWZm
ZWN0cyB0aGlzIGZyYW1lLgorCisgICAgLy8gRklYTUU6IEZyYW1lIHRhcmdldGluZyBpcyBvbmx5
IG9uZSBvZiB0aGUgd2F5cyB0aGUgc3VibWlzc2lvbiBjb3VsZCBlbmQgdXAgZG9pbmcgc29tZXRo
aW5nIG90aGVyCisgICAgLy8gdGhhbiByZXBsYWNpbmcgdGhpcyBmcmFtZSdzIGNvbnRlbnQsIHNv
IHRoaXMgY2hlY2sgaXMgZmxhd2VkLiBPbiB0aGUgb3RoZXIgaGFuZCwgdGhlIGNoZWNrIGlzIGhh
cmRseQorICAgIC8vIG5lZWRlZCBhbnkgbW9yZSBub3cgdGhhdCB3ZSByZXNldCBtX3N1Ym1pdHRl
ZEZvcm1VUkwgb24gZWFjaCBtb3VzZSBvciBrZXkgZG93biBldmVudC4KKworICAgIGlmIChtX2Zy
YW1lLT50cmVlKCktPmlzRGVzY2VuZGFudE9mKHRhcmdldEZyYW1lKSkgeworICAgICAgICBpZiAo
bV9zdWJtaXR0ZWRGb3JtVVJMID09IHUpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1f
c3VibWl0dGVkRm9ybVVSTCA9IHU7CiAgICAgfQogCiAgICAgZm9ybURhdGEtPmdlbmVyYXRlRmls
ZXMobV9mcmFtZS0+cGFnZSgpLT5jaHJvbWUoKS0+Y2xpZW50KCkpOwogICAgIAotICAgIEZyYW1l
TG9hZFJlcXVlc3QgZnJhbWVSZXF1ZXN0OwotCiAgICAgaWYgKCFtX291dGdvaW5nUmVmZXJyZXIu
aXNFbXB0eSgpKQogICAgICAgICBmcmFtZVJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0SFRU
UFJlZmVycmVyKG1fb3V0Z29pbmdSZWZlcnJlcik7CiAKLSAgICBmcmFtZVJlcXVlc3Quc2V0RnJh
bWVOYW1lKHRhcmdldC5pc0VtcHR5KCkgPyBtX2ZyYW1lLT5kb2N1bWVudCgpLT5iYXNlVGFyZ2V0
KCkgOiB0YXJnZXQpOwotCiAgICAgaWYgKHN0cmNtcChhY3Rpb24sICJHRVQiKSA9PSAwKQogICAg
ICAgICB1LnNldFF1ZXJ5KGZvcm1EYXRhLT5mbGF0dGVuVG9TdHJpbmcoKSk7CiAgICAgZWxzZSB7
CiAgICAgICAgIGZyYW1lUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRIVFRQTWV0aG9kKCJQ
T1NUIik7Ci0gICAgICAgIGZyYW1lUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRIVFRQQm9k
eShmb3JtRGF0YS5nZXQoKSk7CisgICAgICAgIGZyYW1lUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3Qo
KS5zZXRIVFRQQm9keShmb3JtRGF0YSk7CiAKICAgICAgICAgLy8gY29uc3RydWN0IHNvbWUgdXNl
ciBoZWFkZXJzIGlmIG5lY2Vzc2FyeQogICAgICAgICBpZiAoY29udGVudFR5cGUuaXNOdWxsKCkg
fHwgY29udGVudFR5cGUgPT0gImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpCkBA
IC01NzMsNyArNTgxLDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6c3VibWl0Rm9ybShjb25zdCBjaGFy
KgogICAgIGZyYW1lUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRVUkwodSk7CiAgICAgYWRk
SFRUUE9yaWdpbklmTmVlZGVkKGZyYW1lUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKSwgb3V0Z29p
bmdPcmlnaW4oKSk7CiAKLSAgICBzdWJtaXRGb3JtKGZyYW1lUmVxdWVzdCwgZXZlbnQsIGxvY2tI
aXN0b3J5LCBsb2NrQmFja0ZvcndhcmRMaXN0KTsKKyAgICB0YXJnZXRGcmFtZS0+bG9hZGVyKCkt
PnNjaGVkdWxlRm9ybVN1Ym1pc3Npb24oZnJhbWVSZXF1ZXN0LCBsb2NrSGlzdG9yeSwgbG9ja0Jh
Y2tGb3J3YXJkTGlzdCwgZXZlbnQsIGZvcm1TdGF0ZSk7CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXI6
OnN0b3BMb2FkaW5nKGJvb2wgc2VuZFVubG9hZCkKQEAgLTY4NCwxMCArNjkyLDExIEBAIEtVUkwg
RnJhbWVMb2FkZXI6Omljb25VUkwoKQogCiBib29sIEZyYW1lTG9hZGVyOjpkaWRPcGVuVVJMKGNv
bnN0IEtVUkwmIHVybCkKIHsKLSAgICBpZiAobV9zY2hlZHVsZWRSZWRpcmVjdGlvbiAmJiBtX3Nj
aGVkdWxlZFJlZGlyZWN0aW9uLT50eXBlID09IFNjaGVkdWxlZFJlZGlyZWN0aW9uOjpsb2NhdGlv
bkNoYW5nZUR1cmluZ0xvYWQpCisgICAgaWYgKG1fc2NoZWR1bGVkUmVkaXJlY3Rpb24gJiYgbV9z
Y2hlZHVsZWRSZWRpcmVjdGlvbi0+d2FzRHVyaW5nTG9hZCkgewogICAgICAgICAvLyBBIHJlZGly
ZWN0IHdhcyBzY2hlZHVsZWQgYmVmb3JlIHRoZSBkb2N1bWVudCB3YXMgY3JlYXRlZC4KICAgICAg
ICAgLy8gVGhpcyBjYW4gaGFwcGVuIHdoZW4gb25lIGZyYW1lIGNoYW5nZXMgYW5vdGhlciBmcmFt
ZSdzIGxvY2F0aW9uLgogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCiAgICAgY2FuY2Vs
UmVkaXJlY3Rpb24oKTsKICAgICBtX2ZyYW1lLT5lZGl0b3IoKS0+Y2xlYXJMYXN0RWRpdENvbW1h
bmQoKTsKQEAgLTc3NSw3ICs3ODQsNiBAQCBTY3JpcHRWYWx1ZSBGcmFtZUxvYWRlcjo6ZXhlY3V0
ZVNjcmlwdChjCiAKICAgICBpZiAoIXdhc1J1bm5pbmdTY3JpcHQpIHsKICAgICAgICAgbV9pc1J1
bm5pbmdTY3JpcHQgPSBmYWxzZTsKLSAgICAgICAgc3VibWl0Rm9ybUFnYWluKCk7CiAgICAgICAg
IERvY3VtZW50Ojp1cGRhdGVEb2N1bWVudHNSZW5kZXJpbmcoKTsKICAgICB9CiAKQEAgLTEzNTgs
OSArMTM2NiwzMiBAQCB2b2lkIEZyYW1lTG9hZGVyOjpzY2hlZHVsZUxvY2F0aW9uQ2hhbmdlCiAg
ICAgICAgIHN0b3BMb2FkaW5nKHRydWUpOyAgIAogICAgIH0KIAotICAgIFNjaGVkdWxlZFJlZGly
ZWN0aW9uOjpUeXBlIHR5cGUgPSBkdXJpbmdMb2FkCi0gICAgICAgID8gU2NoZWR1bGVkUmVkaXJl
Y3Rpb246OmxvY2F0aW9uQ2hhbmdlRHVyaW5nTG9hZCA6IFNjaGVkdWxlZFJlZGlyZWN0aW9uOjps
b2NhdGlvbkNoYW5nZTsKLSAgICBzY2hlZHVsZVJlZGlyZWN0aW9uKG5ldyBTY2hlZHVsZWRSZWRp
cmVjdGlvbih0eXBlLCB1cmwsIHJlZmVycmVyLCBsb2NrSGlzdG9yeSwgbG9ja0JhY2tGb3J3YXJk
TGlzdCwgd2FzVXNlckdlc3R1cmUsIGZhbHNlKSk7CisgICAgc2NoZWR1bGVSZWRpcmVjdGlvbihu
ZXcgU2NoZWR1bGVkUmVkaXJlY3Rpb24odXJsLCByZWZlcnJlciwgbG9ja0hpc3RvcnksIGxvY2tC
YWNrRm9yd2FyZExpc3QsIHdhc1VzZXJHZXN0dXJlLCBmYWxzZSwgZHVyaW5nTG9hZCkpOworfQor
Cit2b2lkIEZyYW1lTG9hZGVyOjpzY2hlZHVsZUZvcm1TdWJtaXNzaW9uKGNvbnN0IEZyYW1lTG9h
ZFJlcXVlc3QmIGZyYW1lUmVxdWVzdCwKKyAgICBib29sIGxvY2tIaXN0b3J5LCBib29sIGxvY2tC
YWNrRm9yd2FyZExpc3QsIFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50LCBQYXNzUmVmUHRyPEZvcm1T
dGF0ZT4gZm9ybVN0YXRlKQoreworICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVkIHNwZWNpYWwgaGFu
ZGxpbmcgZm9yIGZvcm0gc3VibWlzc2lvbnMgd2hlcmUgdGhlIFVSTCBpcyB0aGUgc2FtZQorICAg
IC8vIGFzIHRoZSBjdXJyZW50IG9uZSBleGNlcHQgZm9yIHRoZSBmcmFnbWVudCBwYXJ0PyBTZWUg
c2NoZWR1bGVMb2NhdGlvbkNoYW5nZSBhYm92ZS4KKworICAgIC8vIEZJWE1FOiBJdCdzIGJhZCB0
byBoYXZlIHRoZSBmb2xsb3dpbmcgY29kZSBjb3BpZWQgYW5kIHBhc3RlZCBmcm9tIHNjaGVkdWxl
TG9jYXRpb25DaGFuZ2UgYWJvdmUuCisgICAgLy8gRG8gd2UgbmVlZCBpdD8gQ2FuIHdlIHNoYXJl
IGl0PworCisgICAgLy8gSGFuZGxlIGEgbG9jYXRpb24gY2hhbmdlIG9mIGEgcGFnZSB3aXRoIG5v
IGRvY3VtZW50IGFzIGEgc3BlY2lhbCBjYXNlLgorICAgIC8vIFRoaXMgbWF5IGhhcHBlbiB3aGVu
IGEgZnJhbWUgY2hhbmdlcyB0aGUgbG9jYXRpb24gb2YgYW5vdGhlciBmcmFtZS4KKyAgICBib29s
IGR1cmluZ0xvYWQgPSAhbV9jb21taXR0ZWRGaXJzdFJlYWxEb2N1bWVudExvYWQ7CisKKyAgICAv
LyBJZiBhIHJlZGlyZWN0IHdhcyBzY2hlZHVsZWQgZHVyaW5nIGEgbG9hZCwgdGhlbiBzdG9wIHRo
ZSBjdXJyZW50IGxvYWQuCisgICAgLy8gT3RoZXJ3aXNlIHdoZW4gdGhlIGN1cnJlbnQgbG9hZCB0
cmFuc2l0aW9ucyBmcm9tIGEgcHJvdmlzaW9uYWwgdG8gYSAKKyAgICAvLyBjb21taXR0ZWQgc3Rh
dGUsIHBlbmRpbmcgcmVkaXJlY3RzIG1heSBiZSBjYW5jZWxsZWQuIAorICAgIGlmIChkdXJpbmdM
b2FkKSB7CisgICAgICAgIGlmIChtX3Byb3Zpc2lvbmFsRG9jdW1lbnRMb2FkZXIpCisgICAgICAg
ICAgICBtX3Byb3Zpc2lvbmFsRG9jdW1lbnRMb2FkZXItPnN0b3BMb2FkaW5nKCk7CisgICAgICAg
IHN0b3BMb2FkaW5nKHRydWUpOyAgIAorICAgIH0KKworICAgIHNjaGVkdWxlUmVkaXJlY3Rpb24o
bmV3IFNjaGVkdWxlZFJlZGlyZWN0aW9uKGZyYW1lUmVxdWVzdCwgbG9ja0hpc3RvcnksIGxvY2tC
YWNrRm9yd2FyZExpc3QsIGV2ZW50LCBmb3JtU3RhdGUsIGR1cmluZ0xvYWQpKTsKIH0KIAogdm9p
ZCBGcmFtZUxvYWRlcjo6c2NoZWR1bGVSZWZyZXNoKGJvb2wgd2FzVXNlckdlc3R1cmUpCkBAIC0x
MzcxLDggKzE0MDIsNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpzY2hlZHVsZVJlZnJlc2goYm9vbCB3
CiAgICAgaWYgKG1fVVJMLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU2NoZWR1
bGVkUmVkaXJlY3Rpb246OlR5cGUgdHlwZSA9IFNjaGVkdWxlZFJlZGlyZWN0aW9uOjpsb2NhdGlv
bkNoYW5nZTsKLSAgICBzY2hlZHVsZVJlZGlyZWN0aW9uKG5ldyBTY2hlZHVsZWRSZWRpcmVjdGlv
bih0eXBlLCBtX1VSTC5zdHJpbmcoKSwgbV9vdXRnb2luZ1JlZmVycmVyLCB0cnVlLCB0cnVlLCB3
YXNVc2VyR2VzdHVyZSwgdHJ1ZSkpOworICAgIHNjaGVkdWxlUmVkaXJlY3Rpb24obmV3IFNjaGVk
dWxlZFJlZGlyZWN0aW9uKG1fVVJMLnN0cmluZygpLCBtX291dGdvaW5nUmVmZXJyZXIsIHRydWUs
IHRydWUsIHdhc1VzZXJHZXN0dXJlLCB0cnVlLCBmYWxzZSkpOwogfQogCiBib29sIEZyYW1lTG9h
ZGVyOjppc0xvY2F0aW9uQ2hhbmdlKGNvbnN0IFNjaGVkdWxlZFJlZGlyZWN0aW9uJiByZWRpcmVj
dGlvbikKQEAgLTEzODIsNyArMTQxMiw3IEBAIGJvb2wgRnJhbWVMb2FkZXI6OmlzTG9jYXRpb25D
aGFuZ2UoY29uc3QKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgY2FzZSBTY2hl
ZHVsZWRSZWRpcmVjdGlvbjo6aGlzdG9yeU5hdmlnYXRpb246CiAgICAgICAgIGNhc2UgU2NoZWR1
bGVkUmVkaXJlY3Rpb246OmxvY2F0aW9uQ2hhbmdlOgotICAgICAgICBjYXNlIFNjaGVkdWxlZFJl
ZGlyZWN0aW9uOjpsb2NhdGlvbkNoYW5nZUR1cmluZ0xvYWQ6CisgICAgICAgIGNhc2UgU2NoZWR1
bGVkUmVkaXJlY3Rpb246OmZvcm1TdWJtaXNzaW9uOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTQ1NCw4ICsxNDg0LDcgQEAg
dm9pZCBGcmFtZUxvYWRlcjo6cmVkaXJlY3Rpb25UaW1lckZpcmVkKAogICAgIHN3aXRjaCAocmVk
aXJlY3Rpb24tPnR5cGUpIHsKICAgICAgICAgY2FzZSBTY2hlZHVsZWRSZWRpcmVjdGlvbjo6cmVk
aXJlY3Rpb246CiAgICAgICAgIGNhc2UgU2NoZWR1bGVkUmVkaXJlY3Rpb246OmxvY2F0aW9uQ2hh
bmdlOgotICAgICAgICBjYXNlIFNjaGVkdWxlZFJlZGlyZWN0aW9uOjpsb2NhdGlvbkNoYW5nZUR1
cmluZ0xvYWQ6Ci0gICAgICAgICAgICBjaGFuZ2VMb2NhdGlvbihjb21wbGV0ZVVSTChyZWRpcmVj
dGlvbi0+dXJsKSwgcmVkaXJlY3Rpb24tPnJlZmVycmVyLAorICAgICAgICAgICAgY2hhbmdlTG9j
YXRpb24oS1VSTChyZWRpcmVjdGlvbi0+dXJsKSwgcmVkaXJlY3Rpb24tPnJlZmVycmVyLAogICAg
ICAgICAgICAgICAgIHJlZGlyZWN0aW9uLT5sb2NrSGlzdG9yeSwgcmVkaXJlY3Rpb24tPmxvY2tC
YWNrRm9yd2FyZExpc3QsIHJlZGlyZWN0aW9uLT53YXNVc2VyR2VzdHVyZSwgcmVkaXJlY3Rpb24t
Pndhc1JlZnJlc2gpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBjYXNlIFNjaGVkdWxl
ZFJlZGlyZWN0aW9uOjpoaXN0b3J5TmF2aWdhdGlvbjoKQEAgLTE0NjgsMTcgKzE0OTcsMTUgQEAg
dm9pZCBGcmFtZUxvYWRlcjo6cmVkaXJlY3Rpb25UaW1lckZpcmVkKAogICAgICAgICAgICAgLy8g
aW4gYm90aCBJRSBhbmQgTlMgKGJ1dCBub3QgaW4gTW96aWxsYSkuIFdlIGNhbid0IGVhc2lseSBk
byB0aGF0LgogICAgICAgICAgICAgZ29CYWNrT3JGb3J3YXJkKHJlZGlyZWN0aW9uLT5oaXN0b3J5
U3RlcHMpOwogICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIFNjaGVkdWxlZFJlZGly
ZWN0aW9uOjpmb3JtU3VibWlzc2lvbjoKKyAgICAgICAgICAgIGxvYWRGcmFtZVJlcXVlc3QocmVk
aXJlY3Rpb24tPmZyYW1lUmVxdWVzdCwgcmVkaXJlY3Rpb24tPmxvY2tIaXN0b3J5LCByZWRpcmVj
dGlvbi0+bG9ja0JhY2tGb3J3YXJkTGlzdCwKKyAgICAgICAgICAgICAgICByZWRpcmVjdGlvbi0+
ZXZlbnQsIHJlZGlyZWN0aW9uLT5mb3JtU3RhdGUpOworICAgICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi0vKgotICAgIEluIHRoZSBjYXNl
IG9mIHNhdmluZyBzdGF0ZSBhYm91dCBhIHBhZ2Ugd2l0aCBmcmFtZXMsIHdlIHN0b3JlIGEgdHJl
ZSBvZiBpdGVtcyB0aGF0IG1pcnJvcnMgdGhlIGZyYW1lIHRyZWUuICAKLSAgICBUaGUgaXRlbSB0
aGF0IHdhcyB0aGUgdGFyZ2V0IG9mIHRoZSB1c2VyJ3MgbmF2aWdhdGlvbiBpcyBkZXNpZ25hdGVk
IGFzIHRoZSAidGFyZ2V0SXRlbSIuICAKLSAgICBXaGVuIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3
aXRoIGRvQ2xpcD1ZRVMgd2UncmUgYWJsZSB0byBjcmVhdGUgdGhlIHdob2xlIHRyZWUgZXhjZXB0
IGZvciB0aGUgdGFyZ2V0J3MgY2hpbGRyZW4sIAotICAgIHdoaWNoIHdpbGwgYmUgbG9hZGVkIGlu
IHRoZSBmdXR1cmUuICBUaGF0IHBhcnQgb2YgdGhlIHRyZWUgd2lsbCBiZSBmaWxsZWQgb3V0IGFz
IHRoZSBjaGlsZCBsb2FkcyBhcmUgY29tbWl0dGVkLgotKi8KIHZvaWQgRnJhbWVMb2FkZXI6Omxv
YWRVUkxJbnRvQ2hpbGRGcmFtZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgcmVmZXJl
ciwgRnJhbWUqIGNoaWxkRnJhbWUpCiB7CiAgICAgQVNTRVJUKGNoaWxkRnJhbWUpOwpAQCAtMTY5
OCwyMiArMTcyNSw2IEBAIGJvb2wgRnJhbWVMb2FkZXI6OmxvYWRQbHVnaW4oUmVuZGVyUGFydCoK
ICAgICByZXR1cm4gd2lkZ2V0ICE9IDA7CiB9CiAKLXZvaWQgRnJhbWVMb2FkZXI6OmNsZWFyUmVj
b3JkZWRGb3JtVmFsdWVzKCkKLXsKLSAgICBtX2Zvcm1BYm91dFRvQmVTdWJtaXR0ZWQgPSAwOwot
ICAgIG1fZm9ybVZhbHVlc0Fib3V0VG9CZVN1Ym1pdHRlZC5jbGVhcigpOwotfQotCi12b2lkIEZy
YW1lTG9hZGVyOjpzZXRGb3JtQWJvdXRUb0JlU3VibWl0dGVkKFBhc3NSZWZQdHI8SFRNTEZvcm1F
bGVtZW50PiBlbGVtZW50KQotewotICAgIG1fZm9ybUFib3V0VG9CZVN1Ym1pdHRlZCA9IGVsZW1l
bnQ7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXI6OnJlY29yZEZvcm1WYWx1ZShjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgbV9mb3JtVmFsdWVzQWJvdXRUb0Jl
U3VibWl0dGVkLnNldChuYW1lLCB2YWx1ZSk7Ci19Ci0KIHZvaWQgRnJhbWVMb2FkZXI6OnBhcmVu
dENvbXBsZXRlZCgpCiB7CiAgICAgaWYgKG1fc2NoZWR1bGVkUmVkaXJlY3Rpb24gJiYgIW1fcmVk
aXJlY3Rpb25UaW1lci5pc0FjdGl2ZSgpKQpAQCAtMjA2NSwxNCArMjA3NiwxNyBAQCB2b2lkIEZy
YW1lTG9hZGVyOjpzdGFydFJlZGlyZWN0aW9uVGltZXIoCiAgICAgbV9yZWRpcmVjdGlvblRpbWVy
LnN0YXJ0T25lU2hvdChtX3NjaGVkdWxlZFJlZGlyZWN0aW9uLT5kZWxheSk7CiAKICAgICBzd2l0
Y2ggKG1fc2NoZWR1bGVkUmVkaXJlY3Rpb24tPnR5cGUpIHsKLSAgICAgICAgY2FzZSBTY2hlZHVs
ZWRSZWRpcmVjdGlvbjo6cmVkaXJlY3Rpb246CiAgICAgICAgIGNhc2UgU2NoZWR1bGVkUmVkaXJl
Y3Rpb246OmxvY2F0aW9uQ2hhbmdlOgotICAgICAgICBjYXNlIFNjaGVkdWxlZFJlZGlyZWN0aW9u
Ojpsb2NhdGlvbkNoYW5nZUR1cmluZ0xvYWQ6CisgICAgICAgIGNhc2UgU2NoZWR1bGVkUmVkaXJl
Y3Rpb246OnJlZGlyZWN0aW9uOgogICAgICAgICAgICAgY2xpZW50UmVkaXJlY3RlZChLVVJMKG1f
c2NoZWR1bGVkUmVkaXJlY3Rpb24tPnVybCksCiAgICAgICAgICAgICAgICAgbV9zY2hlZHVsZWRS
ZWRpcmVjdGlvbi0+ZGVsYXksCiAgICAgICAgICAgICAgICAgY3VycmVudFRpbWUoKSArIG1fcmVk
aXJlY3Rpb25UaW1lci5uZXh0RmlyZUludGVydmFsKCksCi0gICAgICAgICAgICAgICAgbV9zY2hl
ZHVsZWRSZWRpcmVjdGlvbi0+bG9ja0JhY2tGb3J3YXJkTGlzdCwKLSAgICAgICAgICAgICAgICBt
X2lzRXhlY3V0aW5nSmF2YVNjcmlwdEZvcm1BY3Rpb24pOworICAgICAgICAgICAgICAgIG1fc2No
ZWR1bGVkUmVkaXJlY3Rpb24tPmxvY2tCYWNrRm9yd2FyZExpc3QpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBjYXNlIFNjaGVkdWxlZFJlZGlyZWN0aW9uOjpmb3JtU3VibWlzc2lvbjoK
KyAgICAgICAgICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBtYWtlIHNlbnNlIHRvIHJlcG9ydCBmb3Jt
IHN1Ym1pc3Npb25zIGFzIGNsaWVudCByZWRpcmVjdHMgdG9vLgorICAgICAgICAgICAgLy8gQnV0
IHdlIGRpZG4ndCBkbyB0aGF0IGluIHRoZSBwYXN0IHdoZW4gZm9ybSBzdWJtaXNzaW9uIHVzZWQg
YSBzZXBhcmF0ZSBkZWxheQorICAgICAgICAgICAgLy8gbWVjaGFuaXNtLCBzbyBkb2luZyBpdCB3
aWxsIGJlIGEgYmVoYXZpb3IgY2hhbmdlLgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBj
YXNlIFNjaGVkdWxlZFJlZGlyZWN0aW9uOjpoaXN0b3J5TmF2aWdhdGlvbjoKICAgICAgICAgICAg
IC8vIERvbid0IHJlcG9ydCBoaXN0b3J5IG5hdmlnYXRpb25zLgpAQCAtMjA5MCwxMSArMjEwNCwx
NSBAQCB2b2lkIEZyYW1lTG9hZGVyOjpzdG9wUmVkaXJlY3Rpb25UaW1lcigpCiAKICAgICBpZiAo
bV9zY2hlZHVsZWRSZWRpcmVjdGlvbikgewogICAgICAgICBzd2l0Y2ggKG1fc2NoZWR1bGVkUmVk
aXJlY3Rpb24tPnR5cGUpIHsKLSAgICAgICAgICAgIGNhc2UgU2NoZWR1bGVkUmVkaXJlY3Rpb246
OnJlZGlyZWN0aW9uOgogICAgICAgICAgICAgY2FzZSBTY2hlZHVsZWRSZWRpcmVjdGlvbjo6bG9j
YXRpb25DaGFuZ2U6Ci0gICAgICAgICAgICBjYXNlIFNjaGVkdWxlZFJlZGlyZWN0aW9uOjpsb2Nh
dGlvbkNoYW5nZUR1cmluZ0xvYWQ6CisgICAgICAgICAgICBjYXNlIFNjaGVkdWxlZFJlZGlyZWN0
aW9uOjpyZWRpcmVjdGlvbjoKICAgICAgICAgICAgICAgICBjbGllbnRSZWRpcmVjdENhbmNlbGxl
ZE9yRmluaXNoZWQobV9jYW5jZWxsaW5nV2l0aExvYWRJblByb2dyZXNzKTsKICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICBjYXNlIFNjaGVkdWxlZFJlZGlyZWN0aW9uOjpmb3Jt
U3VibWlzc2lvbjoKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogSXQgd291bGQgbWFrZSBzZW5z
ZSB0byByZXBvcnQgZm9ybSBzdWJtaXNzaW9ucyBhcyBjbGllbnQgcmVkaXJlY3RzIHRvby4KKyAg
ICAgICAgICAgICAgICAvLyBCdXQgd2UgZGlkbid0IGRvIHRoYXQgaW4gdGhlIHBhc3Qgd2hlbiBm
b3JtIHN1Ym1pc3Npb24gdXNlZCBhIHNlcGFyYXRlIGRlbGF5CisgICAgICAgICAgICAgICAgLy8g
bWVjaGFuaXNtLCBzbyBkb2luZyBpdCB3aWxsIGJlIGEgYmVoYXZpb3IgY2hhbmdlLgorICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIGNhc2UgU2NoZWR1bGVkUmVkaXJlY3Rpb246
Omhpc3RvcnlOYXZpZ2F0aW9uOgogICAgICAgICAgICAgICAgIC8vIERvbid0IHJlcG9ydCBoaXN0
b3J5IG5hdmlnYXRpb25zLgogICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTIxMTAsNyArMjEy
OCw2IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmNvbXBsZXRlZCgpCiAgICAgICAgIGNoaWxkLT5sb2Fk
ZXIoKS0+cGFyZW50Q29tcGxldGVkKCk7CiAgICAgaWYgKEZyYW1lKiBwYXJlbnQgPSBtX2ZyYW1l
LT50cmVlKCktPnBhcmVudCgpKQogICAgICAgICBwYXJlbnQtPmxvYWRlcigpLT5jaGVja0NvbXBs
ZXRlZCgpOwotICAgIHN1Ym1pdEZvcm1BZ2FpbigpOwogfQogCiB2b2lkIEZyYW1lTG9hZGVyOjpz
dGFydGVkKCkKQEAgLTIxNDQsMTMgKzIxNjEsOSBAQCB2b2lkIEZyYW1lTG9hZGVyOjpzZXR1cEZv
clJlcGxhY2VCeU1JTUVUCiAgICAgYWN0aXZlRG9jdW1lbnRMb2FkZXIoKS0+c2V0dXBGb3JSZXBs
YWNlQnlNSU1FVHlwZShuZXdNSU1FVHlwZSk7CiB9CiAKLXZvaWQgRnJhbWVMb2FkZXI6OmxvYWRG
cmFtZVJlcXVlc3RXaXRoRm9ybUFuZFZhbHVlcyhjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiByZXF1
ZXN0LCBib29sIGxvY2tIaXN0b3J5LCBib29sIGxvY2tCYWNrRm9yd2FyZExpc3QsIFBhc3NSZWZQ
dHI8RXZlbnQ+IGV2ZW50LAotICAgIEhUTUxGb3JtRWxlbWVudCogc3VibWl0Rm9ybSwgY29uc3Qg
SGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIGZvcm1WYWx1ZXMpCi17Ci0gICAgUmVmUHRyPEZvcm1T
dGF0ZT4gZm9ybVN0YXRlOwotICAgIGlmIChzdWJtaXRGb3JtKQotICAgICAgICBmb3JtU3RhdGUg
PSBGb3JtU3RhdGU6OmNyZWF0ZShzdWJtaXRGb3JtLCBmb3JtVmFsdWVzLCBtX2ZyYW1lKTsKLSAg
ICAKK3ZvaWQgRnJhbWVMb2FkZXI6OmxvYWRGcmFtZVJlcXVlc3QoY29uc3QgRnJhbWVMb2FkUmVx
dWVzdCYgcmVxdWVzdCwgYm9vbCBsb2NrSGlzdG9yeSwgYm9vbCBsb2NrQmFja0ZvcndhcmRMaXN0
LAorICAgIFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50LCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4gZm9y
bVN0YXRlKQoreyAgICAKICAgICBLVVJMIHVybCA9IHJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCku
dXJsKCk7CiAKICAgICBTdHJpbmcgcmVmZXJyZXI7CkBAIC0yMTgwLDE0ICsyMTkzLDE1IEBAIHZv
aWQgRnJhbWVMb2FkZXI6OmxvYWRGcmFtZVJlcXVlc3RXaXRoRm8KICAgICAgICAgbG9hZFR5cGUg
PSBGcmFtZUxvYWRUeXBlU3RhbmRhcmQ7CiAKICAgICBpZiAocmVxdWVzdC5yZXNvdXJjZVJlcXVl
c3QoKS5odHRwTWV0aG9kKCkgPT0gIlBPU1QiKQotICAgICAgICBsb2FkUG9zdFJlcXVlc3QocmVx
dWVzdC5yZXNvdXJjZVJlcXVlc3QoKSwgcmVmZXJyZXIsIHJlcXVlc3QuZnJhbWVOYW1lKCksIGxv
Y2tIaXN0b3J5LCBsb2FkVHlwZSwgZXZlbnQsIGZvcm1TdGF0ZS5yZWxlYXNlKCkpOworICAgICAg
ICBsb2FkUG9zdFJlcXVlc3QocmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKSwgcmVmZXJyZXIsIHJl
cXVlc3QuZnJhbWVOYW1lKCksIGxvY2tIaXN0b3J5LCBsb2FkVHlwZSwgZXZlbnQsIGZvcm1TdGF0
ZSk7CiAgICAgZWxzZQotICAgICAgICBsb2FkVVJMKHJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCku
dXJsKCksIHJlZmVycmVyLCByZXF1ZXN0LmZyYW1lTmFtZSgpLCBsb2NrSGlzdG9yeSwgbG9hZFR5
cGUsIGV2ZW50LCBmb3JtU3RhdGUucmVsZWFzZSgpKTsKKyAgICAgICAgbG9hZFVSTChyZXF1ZXN0
LnJlc291cmNlUmVxdWVzdCgpLnVybCgpLCByZWZlcnJlciwgcmVxdWVzdC5mcmFtZU5hbWUoKSwg
bG9ja0hpc3RvcnksIGxvYWRUeXBlLCBldmVudCwgZm9ybVN0YXRlKTsKIAogICAgIEZyYW1lKiB0
YXJnZXRGcmFtZSA9IGZpbmRGcmFtZUZvck5hdmlnYXRpb24ocmVxdWVzdC5mcmFtZU5hbWUoKSk7
Ci0gICAgaWYgKHRhcmdldEZyYW1lICYmIHRhcmdldEZyYW1lICE9IG1fZnJhbWUpCisgICAgaWYg
KHRhcmdldEZyYW1lICYmIHRhcmdldEZyYW1lICE9IG1fZnJhbWUpIHsKICAgICAgICAgaWYgKFBh
Z2UqIHBhZ2UgPSB0YXJnZXRGcmFtZS0+cGFnZSgpKQogICAgICAgICAgICAgcGFnZS0+Y2hyb21l
KCktPmZvY3VzKCk7CisgICAgfQogfQogCiB2b2lkIEZyYW1lTG9hZGVyOjpsb2FkVVJMKGNvbnN0
IEtVUkwmIG5ld1VSTCwgY29uc3QgU3RyaW5nJiByZWZlcnJlciwgY29uc3QgU3RyaW5nJiBmcmFt
ZU5hbWUsIGJvb2wgbG9ja0hpc3RvcnksIEZyYW1lTG9hZFR5cGUgbmV3TG9hZFR5cGUsCkBAIC0y
OTMxLDcgKzI5NDUsNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpjbGllbnRSZWRpcmVjdENhbmNlbGxl
CiAgICAgbV9zZW50UmVkaXJlY3ROb3RpZmljYXRpb24gPSBmYWxzZTsKIH0KIAotdm9pZCBGcmFt
ZUxvYWRlcjo6Y2xpZW50UmVkaXJlY3RlZChjb25zdCBLVVJMJiB1cmwsIGRvdWJsZSBzZWNvbmRz
LCBkb3VibGUgZmlyZURhdGUsIGJvb2wgbG9ja0JhY2tGb3J3YXJkTGlzdCwgYm9vbCBpc0phdmFT
Y3JpcHRGb3JtQWN0aW9uKQordm9pZCBGcmFtZUxvYWRlcjo6Y2xpZW50UmVkaXJlY3RlZChjb25z
dCBLVVJMJiB1cmwsIGRvdWJsZSBzZWNvbmRzLCBkb3VibGUgZmlyZURhdGUsIGJvb2wgbG9ja0Jh
Y2tGb3J3YXJkTGlzdCkKIHsKICAgICBtX2NsaWVudC0+ZGlzcGF0Y2hXaWxsUGVyZm9ybUNsaWVu
dFJlZGlyZWN0KHVybCwgc2Vjb25kcywgZmlyZURhdGUpOwogICAgIApAQCAtMjkzOSwxMCArMjk1
MywxMSBAQCB2b2lkIEZyYW1lTG9hZGVyOjpjbGllbnRSZWRpcmVjdGVkKGNvbnN0CiAgICAgLy8g
dGhlIG5leHQgcHJvdmlzaW9uYWwgbG9hZCwgd2UgY2FuIHNlbmQgYSBjb3JyZXNwb25kaW5nIC13
ZWJWaWV3OmRpZENhbmNlbENsaWVudFJlZGlyZWN0Rm9yRnJhbWU6CiAgICAgbV9zZW50UmVkaXJl
Y3ROb3RpZmljYXRpb24gPSB0cnVlOwogICAgIAotICAgIC8vIElmIGEgInF1aWNrIiByZWRpcmVj
dCBjb21lcyBpbiBhbiwgd2Ugc2V0IGEgc3BlY2lhbCBtb2RlIHNvIHdlIHRyZWF0IHRoZSBuZXh0
Ci0gICAgLy8gbG9hZCBhcyBwYXJ0IG9mIHRoZSBzYW1lIG5hdmlnYXRpb24uIElmIHdlIGRvbid0
IGhhdmUgYSBkb2N1bWVudCBsb2FkZXIsIHdlIGhhdmUKKyAgICAvLyBJZiBhICJxdWljayIgcmVk
aXJlY3QgY29tZXMgaW4sIHdlIHNldCBhIHNwZWNpYWwgbW9kZSBzbyB3ZSB0cmVhdCB0aGUgbmV4
dAorICAgIC8vIGxvYWQgYXMgcGFydCBvZiB0aGUgb3JpZ2luYWwgbmF2aWdhdGlvbi4gSWYgd2Ug
ZG9uJ3QgaGF2ZSBhIGRvY3VtZW50IGxvYWRlciwgd2UgaGF2ZQogICAgIC8vIG5vICJvcmlnaW5h
bCIgbG9hZCBvbiB3aGljaCB0byBiYXNlIGEgcmVkaXJlY3QsIHNvIHdlIHRyZWF0IHRoZSByZWRp
cmVjdCBhcyBhIG5vcm1hbCBsb2FkLgotICAgIG1fcXVpY2tSZWRpcmVjdENvbWluZyA9IGxvY2tC
YWNrRm9yd2FyZExpc3QgJiYgbV9kb2N1bWVudExvYWRlciAmJiAhaXNKYXZhU2NyaXB0Rm9ybUFj
dGlvbjsKKyAgICAvLyBMb2FkcyB0cmlnZ2VyZWQgYnkgSmF2YVNjcmlwdCBmb3JtIHN1Ym1pc3Np
b25zIG5ldmVyIGNvdW50IGFzIHF1aWNrIHJlZGlyZWN0cy4KKyAgICBtX3F1aWNrUmVkaXJlY3RD
b21pbmcgPSBsb2NrQmFja0ZvcndhcmRMaXN0ICYmIG1fZG9jdW1lbnRMb2FkZXI7CiB9CiAKICNp
ZiBFTkFCTEUoV01MKQpAQCAtMzQ1MiwzMCArMzQ2Nyw2IEBAIGludCBGcmFtZUxvYWRlcjo6bnVt
UGVuZGluZ09yTG9hZGluZ1JlcXUKICAgICByZXR1cm4gY291bnQ7CiB9CiAKLXZvaWQgRnJhbWVM
b2FkZXI6OnN1Ym1pdEZvcm0oY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYgcmVxdWVzdCwgUGFzc1Jl
ZlB0cjxFdmVudD4gZXZlbnQsIGJvb2wgbG9ja0hpc3RvcnksIGJvb2wgbG9ja0JhY2tGb3J3YXJk
TGlzdCkKLXsKLSAgICAvLyBGSVhNRTogV2UnZCBsaWtlIHRvIHJlbW92ZSB0aGlzIGFsdG9nZXRo
ZXIgYW5kIGZpeCB0aGUgbXVsdGlwbGUgZm9ybSBzdWJtaXNzaW9uIGlzc3VlIGFub3RoZXIgd2F5
LgotICAgIC8vIFdlIGRvIG5vdCB3YW50IHRvIHN1Ym1pdCBtb3JlIHRoYW4gb25lIGZvcm0gZnJv
bSB0aGUgc2FtZSBwYWdlLAotICAgIC8vIG5vciBkbyB3ZSB3YW50IHRvIHN1Ym1pdCBhIHNpbmds
ZSBmb3JtIG1vcmUgdGhhbiBvbmNlLgotICAgIC8vIFRoaXMgZmxhZyBwcmV2ZW50cyB0aGVzZSBm
cm9tIGhhcHBlbmluZzsgbm90IHN1cmUgaG93IG90aGVyIGJyb3dzZXJzIHByZXZlbnQgdGhpcy4K
LSAgICAvLyBUaGUgZmxhZyBpcyByZXNldCBpbiBlYWNoIHRpbWUgd2Ugc3RhcnQgaGFuZGxlIGEg
bmV3IG1vdXNlIG9yIGtleSBkb3duIGV2ZW50LCBhbmQKLSAgICAvLyBhbHNvIGluIHNldFZpZXcg
c2luY2UgdGhpcyBwYXJ0IG1heSBnZXQgcmV1c2VkIGZvciBhIHBhZ2UgZnJvbSB0aGUgYmFjay9m
b3J3YXJkIGNhY2hlLgotICAgIC8vIFRoZSBmb3JtIG11bHRpLXN1Ym1pdCBsb2dpYyBoZXJlIGlz
IG9ubHkgbmVlZGVkIHdoZW4gd2UgYXJlIHN1Ym1pdHRpbmcgYSBmb3JtIHRoYXQgYWZmZWN0cyB0
aGlzIGZyYW1lLgotICAgIC8vIEZJWE1FOiBGcmFtZSB0YXJnZXRpbmcgaXMgb25seSBvbmUgb2Yg
dGhlIHdheXMgdGhlIHN1Ym1pc3Npb24gY291bGQgZW5kIHVwIGRvaW5nIHNvbWV0aGluZyBvdGhl
cgotICAgIC8vIHRoYW4gcmVwbGFjaW5nIHRoaXMgZnJhbWUncyBjb250ZW50LCBzbyB0aGlzIGNo
ZWNrIGlzIGZsYXdlZC4gT24gdGhlIG90aGVyIGhhbmQsIHRoZSBjaGVjayBpcyBoYXJkbHkKLSAg
ICAvLyBuZWVkZWQgYW55IG1vcmUgbm93IHRoYXQgd2UgcmVzZXQgbV9zdWJtaXR0ZWRGb3JtVVJM
IG9uIGVhY2ggbW91c2Ugb3Iga2V5IGRvd24gZXZlbnQuCi0gICAgRnJhbWUqIHRhcmdldCA9IG1f
ZnJhbWUtPnRyZWUoKS0+ZmluZChyZXF1ZXN0LmZyYW1lTmFtZSgpKTsKLSAgICBpZiAobV9mcmFt
ZS0+dHJlZSgpLT5pc0Rlc2NlbmRhbnRPZih0YXJnZXQpKSB7Ci0gICAgICAgIGlmIChtX3N1Ym1p
dHRlZEZvcm1VUkwgPT0gcmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS51cmwoKSkKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgbV9zdWJtaXR0ZWRGb3JtVVJMID0gcmVxdWVzdC5yZXNvdXJj
ZVJlcXVlc3QoKS51cmwoKTsKLSAgICB9Ci0KLSAgICBsb2FkRnJhbWVSZXF1ZXN0V2l0aEZvcm1B
bmRWYWx1ZXMocmVxdWVzdCwgbG9ja0hpc3RvcnksIGxvY2tCYWNrRm9yd2FyZExpc3QsIGV2ZW50
LCBtX2Zvcm1BYm91dFRvQmVTdWJtaXR0ZWQuZ2V0KCksIG1fZm9ybVZhbHVlc0Fib3V0VG9CZVN1
Ym1pdHRlZCk7Ci0KLSAgICBjbGVhclJlY29yZGVkRm9ybVZhbHVlcygpOwotfQotCiBTdHJpbmcg
RnJhbWVMb2FkZXI6OnVzZXJBZ2VudChjb25zdCBLVVJMJiB1cmwpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIG1fY2xpZW50LT51c2VyQWdlbnQodXJsKTsKQEAgLTM0ODMsOSArMzQ3NCw2IEBAIFN0cmlu
ZyBGcmFtZUxvYWRlcjo6dXNlckFnZW50KGNvbnN0IEtVUkwKIAogdm9pZCBGcmFtZUxvYWRlcjo6
dG9rZW5pemVyUHJvY2Vzc2VkRGF0YSgpCiB7Ci0vLyAgICBBU1NFUlQobV9mcmFtZS0+cGFnZSgp
KTsKLS8vICAgIEFTU0VSVChtX2ZyYW1lLT5kb2N1bWVudCgpKTsKLQogICAgIGNoZWNrQ29tcGxl
dGVkKCk7CiB9CiAKQEAgLTM2NDYsMTIgKzM2MzQsNiBAQCB2b2lkIEZyYW1lTG9hZGVyOjpsb2Fk
UG9zdFJlcXVlc3QoY29uc3QgCiAgICAgICAgIGxvYWRXaXRoTmF2aWdhdGlvbkFjdGlvbih3b3Jr
aW5nUmVzb3VyY2VSZXF1ZXN0LCBhY3Rpb24sIGxvY2tIaXN0b3J5LCBsb2FkVHlwZSwgZm9ybVN0
YXRlLnJlbGVhc2UoKSk7ICAgIAogfQogCi12b2lkIEZyYW1lTG9hZGVyOjpsb2FkRW1wdHlEb2N1
bWVudFN5bmNocm9ub3VzbHkoKQotewotICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KEtVUkwo
IiIpKTsKLSAgICBsb2FkKHJlcXVlc3QsIGZhbHNlKTsKLX0KLQogdW5zaWduZWQgbG9uZyBGcmFt
ZUxvYWRlcjo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QsIFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25z
ZSwgVmVjdG9yPGNoYXI+JiBkYXRhKQogewogICAgIC8vIFNpbmNlIHRoaXMgaXMgYSBzdWJyZXNv
dXJjZSwgd2UgY2FuIGxvYWQgYW55IFVSTCAod2UgaWdub3JlIHRoZSByZXR1cm4gdmFsdWUpLgpA
QCAtNDI1NCw2ICs0MjM2LDExIEBAIFBhc3NSZWZQdHI8SGlzdG9yeUl0ZW0+IEZyYW1lTG9hZGVy
OjpjcmUKIAogdm9pZCBGcmFtZUxvYWRlcjo6YWRkQmFja0ZvcndhcmRJdGVtQ2xpcHBlZEF0VGFy
Z2V0KGJvb2wgZG9DbGlwKQogeworICAgIC8vIEluIHRoZSBjYXNlIG9mIHNhdmluZyBzdGF0ZSBh
Ym91dCBhIHBhZ2Ugd2l0aCBmcmFtZXMsIHdlIHN0b3JlIGEgdHJlZSBvZiBpdGVtcyB0aGF0IG1p
cnJvcnMgdGhlIGZyYW1lIHRyZWUuICAKKyAgICAvLyBUaGUgaXRlbSB0aGF0IHdhcyB0aGUgdGFy
Z2V0IG9mIHRoZSB1c2VyJ3MgbmF2aWdhdGlvbiBpcyBkZXNpZ25hdGVkIGFzIHRoZSAidGFyZ2V0
SXRlbSIuICAKKyAgICAvLyBXaGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggZG9DbGlw
PXRydWUgd2UncmUgYWJsZSB0byBjcmVhdGUgdGhlIHdob2xlIHRyZWUgZXhjZXB0IGZvciB0aGUg
dGFyZ2V0J3MgY2hpbGRyZW4sIAorICAgIC8vIHdoaWNoIHdpbGwgYmUgbG9hZGVkIGluIHRoZSBm
dXR1cmUuIFRoYXQgcGFydCBvZiB0aGUgdHJlZSB3aWxsIGJlIGZpbGxlZCBvdXQgYXMgdGhlIGNo
aWxkIGxvYWRzIGFyZSBjb21taXR0ZWQuCisKICAgICBQYWdlKiBwYWdlID0gbV9mcmFtZS0+cGFn
ZSgpOwogICAgIGlmICghcGFnZSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDMwMyw5ICs0MjkwLDkg
QEAgUGFzc1JlZlB0cjxIaXN0b3J5SXRlbT4gRnJhbWVMb2FkZXI6OmNyZQogRnJhbWUqIEZyYW1l
TG9hZGVyOjpmaW5kRnJhbWVGb3JOYXZpZ2F0aW9uKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkK
IHsKICAgICBGcmFtZSogZnJhbWUgPSBtX2ZyYW1lLT50cmVlKCktPmZpbmQobmFtZSk7Ci0gICAg
aWYgKHNob3VsZEFsbG93TmF2aWdhdGlvbihmcmFtZSkpCi0gICAgICAgIHJldHVybiBmcmFtZTsg
IAotICAgIHJldHVybiAwOworICAgIGlmICghc2hvdWxkQWxsb3dOYXZpZ2F0aW9uKGZyYW1lKSkK
KyAgICAgICAgcmV0dXJuIDA7ICAKKyAgICByZXR1cm4gZnJhbWU7CiB9CiAKIHZvaWQgRnJhbWVM
b2FkZXI6OnNhdmVTY3JvbGxQb3NpdGlvbkFuZFZpZXdTdGF0ZVRvSXRlbShIaXN0b3J5SXRlbSog
aXRlbSkKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuaAkocmV2aXNpb24gNDIwNzkpCisrKyBXZWJDb3Jl
L2xvYWRlci9GcmFtZUxvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02OCw3ICs2OCw2IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBUZXh0UmVzb3VyY2VEZWNvZGVyOwogICAgIGNs
YXNzIFdpZGdldDsKIAotICAgIHN0cnVjdCBGb3JtU3VibWlzc2lvbjsKICAgICBzdHJ1Y3QgRnJh
bWVMb2FkUmVxdWVzdDsKICAgICBzdHJ1Y3QgU2NoZWR1bGVkUmVkaXJlY3Rpb247CiAgICAgc3Ry
dWN0IFdpbmRvd0ZlYXR1cmVzOwpAQCAtMTE5LDI2ICsxMTgsMjggQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiAgICAgICAgIEZyYW1lKiBmcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWU7IH0K
IAotICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBub3QgY29vbCwgcGVvcGxlLiBXZSBzaG91bGQg
YWltIHRvIGNvbnNvbGlkYXRlIHRoZXNlIHZhcmlldHkgb2YgbG9hZGluZyByZWxhdGVkIG1ldGhv
ZHMgaW50byBhIHNtYWxsZXIgc2V0LAotICAgICAgICAvLyBhbmQgdHJ5IHRvIHJldXNlIG1vcmUg
b2YgdGhlIHNhbWUgbG9naWMgYnkgZXh0cmFjdGluZyBjb21tb24gY29kZSBwYXRocy4KKyAgICAg
ICAgLy8gRklYTUU6IFRoaXMgaXMgbm90IGNvb2wsIHBlb3BsZS4gVGhlcmUgYXJlIHRvbyBtYW55
IGRpZmZlcmVudCBmdW5jdGlvbnMgdGhhdCBhbGwgc3RhcnQgbG9hZHMuCisgICAgICAgIC8vIFdl
IHNob3VsZCBhaW0gdG8gY29uc29saWRhdGUgdGhlc2UgaW50byBhIHNtYWxsZXIgc2V0IG9mIGZ1
bmN0aW9ucywgYW5kIHRyeSB0byByZXVzZSBtb3JlIG9mCisgICAgICAgIC8vIHRoZSBsb2dpYyBi
eSBleHRyYWN0aW5nIGNvbW1vbiBjb2RlIHBhdGhzLgorCiAgICAgICAgIHZvaWQgcHJlcGFyZUZv
ckxvYWRTdGFydCgpOwogICAgICAgICB2b2lkIHNldHVwRm9yUmVwbGFjZSgpOwogICAgICAgICB2
b2lkIHNldHVwRm9yUmVwbGFjZUJ5TUlNRVR5cGUoY29uc3QgU3RyaW5nJiBuZXdNSU1FVHlwZSk7
CiAKICAgICAgICAgdm9pZCBsb2FkVVJMSW50b0NoaWxkRnJhbWUoY29uc3QgS1VSTCYsIGNvbnN0
IFN0cmluZyYgcmVmZXJlciwgRnJhbWUqKTsKIAotICAgICAgICB2b2lkIGxvYWRGcmFtZVJlcXVl
c3RXaXRoRm9ybUFuZFZhbHVlcyhjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiwgYm9vbCBsb2NrSGlz
dG9yeSwgYm9vbCBsb2NrQmFja0ZvcndhcmRMaXN0LCAgICAgICAgICAgLy8gQ2FsbGVkIGJ5IHN1
Ym1pdEZvcm0sIGNhbGxzIGxvYWRQb3N0UmVxdWVzdCgpCi0gICAgICAgICAgICBQYXNzUmVmUHRy
PEV2ZW50PiwgSFRNTEZvcm1FbGVtZW50KiwgY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4m
IGZvcm1WYWx1ZXMpOworICAgICAgICB2b2lkIGxvYWRGcmFtZVJlcXVlc3QoY29uc3QgRnJhbWVM
b2FkUmVxdWVzdCYsIGJvb2wgbG9ja0hpc3RvcnksIGJvb2wgbG9ja0JhY2tGb3J3YXJkTGlzdCwg
IC8vIENhbGxlZCBieSBzdWJtaXRGb3JtLCBjYWxscyBsb2FkUG9zdFJlcXVlc3QgYW5kIGxvYWRV
UkwuCisgICAgICAgICAgICBQYXNzUmVmUHRyPEV2ZW50PiwgUGFzc1JlZlB0cjxGb3JtU3RhdGU+
KTsKIAotICAgICAgICB2b2lkIGxvYWQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgYm9vbCBsb2Nr
SGlzdG9yeSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIENhbGxlZCBieSBXZWJGcmFtZSwgY2FsbHMgKFJlc291cmNlUmVxdWVzdCwg
U3Vic3RpdHV0ZURhdGEpCi0gICAgICAgIHZvaWQgbG9hZChjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
LCBjb25zdCBTdWJzdGl0dXRlRGF0YSYsIGJvb2wgbG9ja0hpc3RvcnkpOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gQ2FsbGVkIGJvdGggYnkgV2ViRnJhbWUgYW5kIGludGVy
bmFsbHksIGNhbGxzIChEb2N1bWVudExvYWRlciopCi0gICAgICAgIHZvaWQgbG9hZChjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBTdHJpbmcmIGZyYW1lTmFtZSwgYm9vbCBsb2NrSGlzdG9y
eSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FsbGVkIGJ5IFdlYlBsdWdp
bkNvbnRyb2xsZXIKKyAgICAgICAgdm9pZCBsb2FkKGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGJv
b2wgbG9ja0hpc3RvcnkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBDYWxsZWQgYnkgV2ViRnJhbWUsIGNhbGxzIGxvYWQoUmVzb3VyY2VSZXF1ZXN0LCBTdWJzdGl0
dXRlRGF0YSkuCisgICAgICAgIHZvaWQgbG9hZChjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25z
dCBTdWJzdGl0dXRlRGF0YSYsIGJvb2wgbG9ja0hpc3RvcnkpOyAgICAgICAgICAgICAgICAgLy8g
Q2FsbGVkIGJvdGggYnkgV2ViRnJhbWUgYW5kIGludGVybmFsbHksIGNhbGxzIGxvYWQoRG9jdW1l
bnRMb2FkZXIqKS4KKyAgICAgICAgdm9pZCBsb2FkKGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNv
bnN0IFN0cmluZyYgZnJhbWVOYW1lLCBib29sIGxvY2tIaXN0b3J5KTsgICAgICAgICAgICAgICAv
LyBDYWxsZWQgYnkgV2ViUGx1Z2luQ29udHJvbGxlci4KICAgICAgICAgCi0gICAgICAgIHZvaWQg
bG9hZEFyY2hpdmUoUGFzc1JlZlB0cjxBcmNoaXZlPiBhcmNoaXZlKTsKKyAgICAgICAgdm9pZCBs
b2FkQXJjaGl2ZShQYXNzUmVmUHRyPEFyY2hpdmU+KTsKIAotICAgICAgICAvLyBSZXR1cm5zIHRy
dWUgZm9yIGFueSBub24tbG9jYWwgVVJMLiBJZiBEb2N1bWVudCBwYXJhbWV0ZXIgaXMgc3VwcGxp
ZWQsIGl0cyBsb2NhbCBsb2FkIHBvbGljeSBkaWN0YXRlcywKKyAgICAgICAgLy8gUmV0dXJucyB0
cnVlIGZvciBhbnkgbm9uLWxvY2FsIFVSTC4gSWYgZG9jdW1lbnQgcGFyYW1ldGVyIGlzIHN1cHBs
aWVkLCBpdHMgbG9jYWwgbG9hZCBwb2xpY3kgZGljdGF0ZXMsCiAgICAgICAgIC8vIG90aGVyd2lz
ZSBpZiByZWZlcnJlciBpcyBub24tZW1wdHkgYW5kIHJlcHJlc2VudHMgYSBsb2NhbCBmaWxlLCB0
aGVuIHRoZSBsb2NhbCBsb2FkIGlzIGFsbG93ZWQuCi0gICAgICAgIHN0YXRpYyBib29sIGNhbkxv
YWQoY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgcmVmZXJyZXIsIGNvbnN0IERvY3VtZW50KiB0
aGVEb2N1bWVudCA9IDApOworICAgICAgICBzdGF0aWMgYm9vbCBjYW5Mb2FkKGNvbnN0IEtVUkwm
LCBjb25zdCBTdHJpbmcmIHJlZmVycmVyLCBjb25zdCBEb2N1bWVudCogPSAwKTsKICAgICAgICAg
c3RhdGljIHZvaWQgcmVwb3J0TG9jYWxMb2FkRmFpbGVkKEZyYW1lKiwgY29uc3QgU3RyaW5nJiB1
cmwpOwogCiAgICAgICAgIHN0YXRpYyBib29sIHNob3VsZEhpZGVSZWZlcnJlcihjb25zdCBLVVJM
JiwgY29uc3QgU3RyaW5nJiByZWZlcnJlcik7CkBAIC0xNjIsMTEgKzE2Myw5IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgU3RyaW5nIHJlZmVycmVyKCkgY29uc3Q7CiAgICAgICAgIFN0
cmluZyBvdXRnb2luZ1JlZmVycmVyKCkgY29uc3Q7CiAgICAgICAgIFN0cmluZyBvdXRnb2luZ09y
aWdpbigpIGNvbnN0OwotICAgICAgICB2b2lkIGxvYWRFbXB0eURvY3VtZW50U3luY2hyb25vdXNs
eSgpOwogCiAgICAgICAgIERvY3VtZW50TG9hZGVyKiBhY3RpdmVEb2N1bWVudExvYWRlcigpIGNv
bnN0OwogICAgICAgICBEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIoKSBjb25zdCB7IHJl
dHVybiBtX2RvY3VtZW50TG9hZGVyLmdldCgpOyB9Ci0gICAgICAgIERvY3VtZW50TG9hZGVyKiBw
b2xpY3lEb2N1bWVudExvYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fcG9saWN5RG9jdW1lbnRMb2Fk
ZXIuZ2V0KCk7IH0KICAgICAgICAgRG9jdW1lbnRMb2FkZXIqIHByb3Zpc2lvbmFsRG9jdW1lbnRM
b2FkZXIoKSBjb25zdCB7IHJldHVybiBtX3Byb3Zpc2lvbmFsRG9jdW1lbnRMb2FkZXIuZ2V0KCk7
IH0KICAgICAgICAgRnJhbWVTdGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0K
ICAgICAgICAgc3RhdGljIGRvdWJsZSB0aW1lT2ZMYXN0Q29tcGxldGVkTG9hZCgpOwpAQCAtMjA1
LDggKzIwNCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCByZXByZXNlbnRh
dGlvbkV4aXN0c0ZvclVSTFNjaGVtZShjb25zdCBTdHJpbmcmIFVSTFNjaGVtZSk7CiAgICAgICAg
IFN0cmluZyBnZW5lcmF0ZWRNSU1FVHlwZUZvclVSTFNjaGVtZShjb25zdCBTdHJpbmcmIFVSTFNj
aGVtZSk7CiAKLSAgICAgICAgdm9pZCBub3RpZnlJY29uQ2hhbmdlZCgpOwotCiAgICAgICAgIHZv
aWQgY2hlY2tOYXZpZ2F0aW9uUG9saWN5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIE5hdmlnYXRp
b25Qb2xpY3lEZWNpc2lvbkZ1bmN0aW9uIGZ1bmN0aW9uLCB2b2lkKiBhcmd1bWVudCk7CiAgICAg
ICAgIHZvaWQgY2hlY2tDb250ZW50UG9saWN5KGNvbnN0IFN0cmluZyYgTUlNRVR5cGUsIENvbnRl
bnRQb2xpY3lEZWNpc2lvbkZ1bmN0aW9uLCB2b2lkKiBhcmd1bWVudCk7CiAgICAgICAgIHZvaWQg
Y2FuY2VsQ29udGVudFBvbGljeUNoZWNrKCk7CkBAIC0yNTUsMTAgKzI1MiwxMSBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKICAgICAgICAgdm9pZCBjaGFuZ2VMb2NhdGlvbihjb25zdCBLVVJMJiwg
Y29uc3QgU3RyaW5nJiByZWZlcnJlciwgYm9vbCBsb2NrSGlzdG9yeSA9IHRydWUsIGJvb2wgbG9j
a0JhY2tGb3J3YXJkTGlzdCA9IHRydWUsIGJvb2wgdXNlckdlc3R1cmUgPSBmYWxzZSwgYm9vbCBy
ZWZyZXNoID0gZmFsc2UpOwogICAgICAgICB2b2lkIHVybFNlbGVjdGVkKGNvbnN0IFJlc291cmNl
UmVxdWVzdCYsIGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBQYXNzUmVmUHRyPEV2ZW50PiwgYm9vbCBs
b2NrSGlzdG9yeSwgYm9vbCBsb2NrQmFja0ZvcndhcmRMaXN0LCBib29sIHVzZXJHZXN0dXJlKTsK
LSAgICAgIAogICAgICAgICBib29sIHJlcXVlc3RGcmFtZShIVE1MRnJhbWVPd25lckVsZW1lbnQq
LCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgQXRvbWljU3RyaW5nJiBmcmFtZU5hbWUpOwogCi0g
ICAgICAgIHZvaWQgc3VibWl0Rm9ybShjb25zdCBjaGFyKiBhY3Rpb24sIGNvbnN0IFN0cmluZyYg
dXJsLCBQYXNzUmVmUHRyPEZvcm1EYXRhPiwgY29uc3QgU3RyaW5nJiB0YXJnZXQsIGNvbnN0IFN0
cmluZyYgY29udGVudFR5cGUsIGNvbnN0IFN0cmluZyYgYm91bmRhcnksIFBhc3NSZWZQdHI8RXZl
bnQ+LCBib29sIGxvY2tIaXN0b3J5LCBib29sIGxvY2tCYWNrRm9yd2FyZExpc3QpOworICAgICAg
ICB2b2lkIHN1Ym1pdEZvcm0oY29uc3QgY2hhciogYWN0aW9uLCBjb25zdCBTdHJpbmcmIHVybCwK
KyAgICAgICAgICAgIFBhc3NSZWZQdHI8Rm9ybURhdGE+LCBjb25zdCBTdHJpbmcmIHRhcmdldCwg
Y29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSwgY29uc3QgU3RyaW5nJiBib3VuZGFyeSwKKyAgICAg
ICAgICAgIGJvb2wgbG9ja0hpc3RvcnksIGJvb2wgbG9ja0JhY2tGb3J3YXJkTGlzdCwgUGFzc1Jl
ZlB0cjxFdmVudD4sIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPik7CiAKICAgICAgICAgdm9pZCBzdG9w
KCk7CiAgICAgICAgIHZvaWQgc3RvcExvYWRpbmcoYm9vbCBzZW5kVW5sb2FkKTsKQEAgLTMwNSw3
ICszMDMsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdm9pZCBkaXNwYXRjaFdp
bmRvd09iamVjdEF2YWlsYWJsZSgpOwogICAgICAgICB2b2lkIGRpc3BhdGNoRG9jdW1lbnRFbGVt
ZW50QXZhaWxhYmxlKCk7Ci0gICAgICAgIHZvaWQgcmVzdG9yZURvY3VtZW50U3RhdGUoKTsKIAog
ICAgICAgICBGcmFtZSogb3BlbmVyKCk7CiAgICAgICAgIHZvaWQgc2V0T3BlbmVyKEZyYW1lKik7
CkBAIC0zMjQsOCArMzIxLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIGNvbnN0
IEtVUkwmIHVybCgpIGNvbnN0IHsgcmV0dXJuIG1fVVJMOyB9CiAKLSAgICAgICAgdm9pZCB1cGRh
dGVCYXNlVVJMRm9yRW1wdHlEb2N1bWVudCgpOwotCiAgICAgICAgIHZvaWQgc2V0UmVzcG9uc2VN
SU1FVHlwZShjb25zdCBTdHJpbmcmKTsKICAgICAgICAgY29uc3QgU3RyaW5nJiByZXNwb25zZU1J
TUVUeXBlKCkgY29uc3Q7CiAKQEAgLTMzNSwxMCArMzMwLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICB2b2lkIGZpbmlzaGVkUGFyc2luZygpOwogICAgICAgICB2b2lkIGNoZWNrQ29t
cGxldGVkKCk7CiAKLSAgICAgICAgdm9pZCBjbGVhclJlY29yZGVkRm9ybVZhbHVlcygpOwotICAg
ICAgICB2b2lkIHNldEZvcm1BYm91dFRvQmVTdWJtaXR0ZWQoUGFzc1JlZlB0cjxIVE1MRm9ybUVs
ZW1lbnQ+IGVsZW1lbnQpOwotICAgICAgICB2b2lkIHJlY29yZEZvcm1WYWx1ZShjb25zdCBTdHJp
bmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpOwotCiAgICAgICAgIGJvb2wgaXNDb21wbGV0
ZSgpIGNvbnN0OwogCiAgICAgICAgIGJvb2wgcmVxdWVzdE9iamVjdChSZW5kZXJQYXJ0KiBmcmFt
ZSwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IEF0b21pY1N0cmluZyYgZnJhbWVOYW1lLApAQCAt
Mzg4LDYgKzM3OSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgUGFzc1JlZlB0cjxI
aXN0b3J5SXRlbT4gY3JlYXRlSGlzdG9yeUl0ZW0oYm9vbCB1c2VPcmlnaW5hbCk7CiAgICAgICAg
IFBhc3NSZWZQdHI8SGlzdG9yeUl0ZW0+IGNyZWF0ZUhpc3RvcnlJdGVtVHJlZShGcmFtZSogdGFy
Z2V0RnJhbWUsIGJvb2wgY2xpcEF0VGFyZ2V0KTsKIAorICAgICAgICBib29sIGNhbkNhY2hlUGFn
ZSgpOwogICAgICAgICBib29sIGNhbkNhY2hlUGFnZUNvbnRhaW5pbmdUaGlzRnJhbWUoKTsKICNp
Zm5kZWYgTkRFQlVHCiAgICAgICAgIHZvaWQgbG9nQ2FuQ2FjaGVQYWdlRGVjaXNpb24oKTsKQEAg
LTQ5OSwyMCArNDkxLDIxIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBzdGF0aWMg
Ym9vbCBpc0xvY2F0aW9uQ2hhbmdlKGNvbnN0IFNjaGVkdWxlZFJlZGlyZWN0aW9uJik7CiAKLSAg
ICAgICAgdm9pZCBsb2FkV2l0aERvY3VtZW50TG9hZGVyKERvY3VtZW50TG9hZGVyKiwgRnJhbWVM
b2FkVHlwZSwgUGFzc1JlZlB0cjxGb3JtU3RhdGU+KTsgICAgICAgICAvLyBDYWxscyBjb250aW51
ZUxvYWRBZnRlck5hdmlnYXRpb25Qb2xpY3kKLSAgICAgICAgdm9pZCBsb2FkKERvY3VtZW50TG9h
ZGVyKik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBDYWxscyBsb2FkV2l0aERvY3VtZW50TG9hZGVyICAgCisgICAgICAg
IHZvaWQgc2NoZWR1bGVGb3JtU3VibWlzc2lvbihjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiwgYm9v
bCBsb2NrSGlzdG9yeSwgYm9vbCBsb2NrQmFja0ZvcndhcmRMaXN0LCBQYXNzUmVmUHRyPEV2ZW50
PiwgUGFzc1JlZlB0cjxGb3JtU3RhdGU+KTsKKworICAgICAgICB2b2lkIGxvYWRXaXRoRG9jdW1l
bnRMb2FkZXIoRG9jdW1lbnRMb2FkZXIqLCBGcmFtZUxvYWRUeXBlLCBQYXNzUmVmUHRyPEZvcm1T
dGF0ZT4pOyAvLyBDYWxscyBjb250aW51ZUxvYWRBZnRlck5hdmlnYXRpb25Qb2xpY3kKKyAgICAg
ICAgdm9pZCBsb2FkKERvY3VtZW50TG9hZGVyKik7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FsbHMgbG9hZFdpdGhEb2N1bWVudExv
YWRlciAgIAogCi0gICAgICAgIHZvaWQgbG9hZFdpdGhOYXZpZ2F0aW9uQWN0aW9uKGNvbnN0IFJl
c291cmNlUmVxdWVzdCYsIGNvbnN0IE5hdmlnYXRpb25BY3Rpb24mLCAgICAgICAgICAgICAgLy8g
Q2FsbHMgbG9hZFdpdGhEb2N1bWVudExvYWRlcigpCisgICAgICAgIHZvaWQgbG9hZFdpdGhOYXZp
Z2F0aW9uQWN0aW9uKGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IE5hdmlnYXRpb25BY3Rp
b24mLCAgICAgIC8vIENhbGxzIGxvYWRXaXRoRG9jdW1lbnRMb2FkZXIKICAgICAgICAgICAgIGJv
b2wgbG9ja0hpc3RvcnksIEZyYW1lTG9hZFR5cGUsIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPik7CiAK
LSAgICAgICAgdm9pZCBsb2FkUG9zdFJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29u
c3QgU3RyaW5nJiByZWZlcnJlciwgICAgICAgICAgICAgICAgICAgICAgICAvLyBDYWxsZWQgYnkg
bG9hZEZyYW1lUmVxdWVzdFdpdGhGb3JtQW5kVmFsdWVzKCksIGNhbGxzIGxvYWRXaXRoTmF2aWdh
dGlvbkFjdGlvbgorICAgICAgICB2b2lkIGxvYWRQb3N0UmVxdWVzdChjb25zdCBSZXNvdXJjZVJl
cXVlc3QmLCBjb25zdCBTdHJpbmcmIHJlZmVycmVyLCAgICAgICAgICAgICAgICAvLyBDYWxsZWQg
YnkgbG9hZEZyYW1lUmVxdWVzdCwgY2FsbHMgbG9hZFdpdGhOYXZpZ2F0aW9uQWN0aW9uCiAgICAg
ICAgICAgICBjb25zdCBTdHJpbmcmIGZyYW1lTmFtZSwgYm9vbCBsb2NrSGlzdG9yeSwgRnJhbWVM
b2FkVHlwZSwgUGFzc1JlZlB0cjxFdmVudD4sIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPik7Ci0KLSAg
ICAgICAgdm9pZCBsb2FkVVJMKGNvbnN0IEtVUkwmIG5ld1VSTCwgY29uc3QgU3RyaW5nJiByZWZl
cnJlciwgY29uc3QgU3RyaW5nJiBmcmFtZU5hbWUsICAgICAgICAgICAvLyBDYWxsZWQgYnkgbG9h
ZEZyYW1lUmVxdWVzdFdpdGhGb3JtQW5kVmFsdWVzKCksIGNhbGxzIGxvYWRXaXRoTmF2aWdhdGlv
bkFjdGlvbiBvciBlbHNlIGRpc3BhdGNoZXMgdG8gbmF2aWdhdGlvbiBwb2xpY3kgZGVsZWdhdGUg
ICAgCisgICAgICAgIHZvaWQgbG9hZFVSTChjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiByZWZl
cnJlciwgY29uc3QgU3RyaW5nJiBmcmFtZU5hbWUsICAgICAgICAgIC8vIENhbGxlZCBieSBsb2Fk
RnJhbWVSZXF1ZXN0LCBjYWxscyBsb2FkV2l0aE5hdmlnYXRpb25BY3Rpb24gb3IgZGlzcGF0Y2hl
cyB0byBuYXZpZ2F0aW9uIHBvbGljeSBkZWxlZ2F0ZQogICAgICAgICAgICAgYm9vbCBsb2NrSGlz
dG9yeSwgRnJhbWVMb2FkVHlwZSwgUGFzc1JlZlB0cjxFdmVudD4sIFBhc3NSZWZQdHI8Rm9ybVN0
YXRlPik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgCiAKICAgICAgICAgdm9pZCBjbGllbnRSZWRpcmVjdENhbmNlbGxlZE9yRmluaXNoZWQo
Ym9vbCBjYW5jZWxXaXRoTG9hZEluUHJvZ3Jlc3MpOwotICAgICAgICB2b2lkIGNsaWVudFJlZGly
ZWN0ZWQoY29uc3QgS1VSTCYsIGRvdWJsZSBkZWxheSwgZG91YmxlIGZpcmVEYXRlLCBib29sIGxv
Y2tCYWNrRm9yd2FyZExpc3QsIGJvb2wgaXNKYXZhU2NyaXB0Rm9ybUFjdGlvbik7CisgICAgICAg
IHZvaWQgY2xpZW50UmVkaXJlY3RlZChjb25zdCBLVVJMJiwgZG91YmxlIGRlbGF5LCBkb3VibGUg
ZmlyZURhdGUsIGJvb2wgbG9ja0JhY2tGb3J3YXJkTGlzdCk7CiAgICAgICAgIGJvb2wgc2hvdWxk
UmVsb2FkKGNvbnN0IEtVUkwmIGN1cnJlbnRVUkwsIGNvbnN0IEtVUkwmIGRlc3RpbmF0aW9uVVJM
KTsKIAogICAgICAgICB2b2lkIHNlbmRSZW1haW5pbmdEZWxlZ2F0ZU1lc3NhZ2VzKHVuc2lnbmVk
IGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYsIGludCBsZW5ndGgsIGNv
bnN0IFJlc291cmNlRXJyb3ImKTsKQEAgLTUyNSw5ICs1MTgsNiBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKICAgICAgICAgRnJhbWUqIGxvYWRTdWJmcmFtZShIVE1MRnJhbWVPd25lckVsZW1lbnQq
LCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHJlZmVycmVy
KTsKIAotICAgICAgICB2b2lkIHN1Ym1pdEZvcm1BZ2FpbigpOwotICAgICAgICB2b2lkIHN1Ym1p
dEZvcm0oY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYsIFBhc3NSZWZQdHI8RXZlbnQ+LCBib29sIGxv
Y2tIaXN0b3J5LCBib29sIGxvY2tCYWNrRm9yd2FyZExpc3QpOwotCiAgICAgICAgIGJvb2wgY2xv
c2VVUkwoKTsKIAogICAgICAgICBLVVJMIGhpc3RvcnlVUkwoaW50IGRpc3RhbmNlKTsKQEAgLTU0
MCw4ICs1MzAsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdm9pZCBwcm92aXNp
b25hbExvYWRTdGFydGVkKCk7CiAKLSAgICAgICAgYm9vbCBjYW5DYWNoZVBhZ2UoKTsKLQogICAg
ICAgICBib29sIGRpZE9wZW5VUkwoY29uc3QgS1VSTCYpOwogCiAgICAgICAgIHZvaWQgc2NoZWR1
bGVDaGVja0NvbXBsZXRlZCgpOwpAQCAtNTUzLDYgKzU0MSw4IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogICAgICAgICB2b2lkIHNhdmVTY3JvbGxQb3NpdGlvbkFuZFZpZXdTdGF0ZVRvSXRlbShI
aXN0b3J5SXRlbSopOwogCisgICAgICAgIHZvaWQgcmVzdG9yZURvY3VtZW50U3RhdGUoKTsKKwog
ICAgICAgICBGcmFtZSogbV9mcmFtZTsKICAgICAgICAgRnJhbWVMb2FkZXJDbGllbnQqIG1fY2xp
ZW50OwogCkBAIC01ODUsOCArNTc1LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAg
IFN0cmluZyBtX291dGdvaW5nUmVmZXJyZXI7CiAKLSAgICAgICAgT3duUHRyPEZvcm1TdWJtaXNz
aW9uPiBtX2RlZmVycmVkRm9ybVN1Ym1pc3Npb247Ci0KICAgICAgICAgYm9vbCBtX2lzRXhlY3V0
aW5nSmF2YVNjcmlwdEZvcm1BY3Rpb247CiAgICAgICAgIGJvb2wgbV9pc1J1bm5pbmdTY3JpcHQ7
CiAKQEAgLTYxNiw4ICs2MDQsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgYm9v
bCBtX2NvbnRhaW5zUGx1Z0luczsKIAotICAgICAgICBSZWZQdHI8SFRNTEZvcm1FbGVtZW50PiBt
X2Zvcm1BYm91dFRvQmVTdWJtaXR0ZWQ7Ci0gICAgICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+
IG1fZm9ybVZhbHVlc0Fib3V0VG9CZVN1Ym1pdHRlZDsKICAgICAgICAgS1VSTCBtX3N1Ym1pdHRl
ZEZvcm1VUkw7CiAgICAgCiAgICAgICAgIFRpbWVyPEZyYW1lTG9hZGVyPiBtX3JlZGlyZWN0aW9u
VGltZXI7CkluZGV4OiBXZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcAkocmV2aXNp
b24gNDIwNzkpCisrKyBXZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzcsMTEgKzM3LDEzIEBACiAjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNs
dWRlICJFdmVudEhhbmRsZXIuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisjaW5jbHVkZSAi
Rm9ybVN0YXRlLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5o
IgogI2luY2x1ZGUgIkZyYW1lTG9hZFJlcXVlc3QuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVxdWVz
dC5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKKyNpbmNsdWRlICJIVE1MRm9ybUVsZW1l
bnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiTW91c2VF
dmVudC5oIgogI2luY2x1ZGUgIk5vZGUuaCIKQEAgLTIxMiwxMCArMjE0LDEwIEBAIHZvaWQgQ29u
dGV4dE1lbnVDb250cm9sbGVyOjpjb250ZXh0TWVudUkKICAgICAgICAgICAgIG1fY2xpZW50LT5s
b29rVXBJbkRpY3Rpb25hcnkoZnJhbWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgQ29udGV4dE1lbnVJdGVtVGFnT3Blbkxpbms6Ci0gICAgICAgICAgICBpZiAoRnJhbWUqIHRh
cmdldEZyYW1lID0gcmVzdWx0LnRhcmdldEZyYW1lKCkpCi0gICAgICAgICAgICAgICAgdGFyZ2V0
RnJhbWUtPmxvYWRlcigpLT5sb2FkRnJhbWVSZXF1ZXN0V2l0aEZvcm1BbmRWYWx1ZXMoRnJhbWVM
b2FkUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QocmVzdWx0LmFic29sdXRlTGlua1VSTCgpLCAKLSAg
ICAgICAgICAgICAgICAgICAgZnJhbWUtPmxvYWRlcigpLT5vdXRnb2luZ1JlZmVycmVyKCkpKSwg
ZmFsc2UsIGZhbHNlLCAwLCAwLCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPigpKTsKLSAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIGlmIChGcmFtZSogdGFyZ2V0RnJhbWUgPSByZXN1bHQudGFy
Z2V0RnJhbWUoKSkgeworICAgICAgICAgICAgICAgIHRhcmdldEZyYW1lLT5sb2FkZXIoKS0+bG9h
ZEZyYW1lUmVxdWVzdChGcmFtZUxvYWRSZXF1ZXN0KFJlc291cmNlUmVxdWVzdChyZXN1bHQuYWJz
b2x1dGVMaW5rVVJMKCksIAorICAgICAgICAgICAgICAgICAgICBmcmFtZS0+bG9hZGVyKCktPm91
dGdvaW5nUmVmZXJyZXIoKSkpLCBmYWxzZSwgZmFsc2UsIDAsIDApOworICAgICAgICAgICAgfSBl
bHNlCiAgICAgICAgICAgICAgICAgb3Blbk5ld1dpbmRvdyhyZXN1bHQuYWJzb2x1dGVMaW5rVVJM
KCksIGZyYW1lKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENvbnRleHRNZW51
SXRlbVRhZ0JvbGQ6CkluZGV4OiBXZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGFnZS9GcmFtZS5jcHAJKHJldmlzaW9uIDQyMDc5KQorKysgV2ViQ29yZS9wYWdl
L0ZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTczLDcgKzE3Myw2IEBAIEZyYW1lOjpGcmFt
ZShQYWdlKiBwYWdlLCBIVE1MRnJhbWVPd25lckUKIEZyYW1lOjp+RnJhbWUoKQogewogICAgIHNl
dFZpZXcoMCk7Ci0gICAgbG9hZGVyKCktPmNsZWFyUmVjb3JkZWRGb3JtVmFsdWVzKCk7CiAgICAg
bG9hZGVyKCktPmNhbmNlbEFuZENsZWFyKCk7CiAgICAgCiAgICAgLy8gRklYTUU6IFdlIHNob3Vs
ZCBub3QgYmUgZG9pbmcgYWxsIHRoaXMgd29yayBpbnNpZGUgdGhlIGRlc3RydWN0b3IKSW5kZXg6
IFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5t
bQkocmV2aXNpb24gNDIwNzkpCisrKyBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1l
TG9hZGVyQ2xpZW50Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC02OTksMTAgKzY5OSwxMSBAQCB2b2lk
IFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaFdpbGxTCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBOU011dGFibGVEaWN0aW9uYXJ5ICpkaWN0aW9uYXJ5ID0gW1tOU011dGFibGVE
aWN0aW9uYXJ5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OmZvcm1TdGF0ZS0+dmFsdWVzKCkuc2l6
ZSgpXTsKLSAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
Zm9ybVN0YXRlLT52YWx1ZXMoKS5lbmQoKTsKLSAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBTdHJp
bmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGZvcm1TdGF0ZS0+dmFsdWVzKCkuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KQotICAgICAgICBbZGljdGlvbmFyeSBzZXRPYmplY3Q6aXQtPnNlY29uZCBm
b3JLZXk6aXQtPmZpcnN0XTsKKyAgICBjb25zdCBTdHJpbmdQYWlyVmVjdG9yJiB0ZXh0RmllbGRW
YWx1ZXMgPSBmb3JtU3RhdGUtPnRleHRGaWVsZFZhbHVlcygpOworICAgIHNpemVfdCBzaXplID0g
dGV4dEZpZWxkVmFsdWVzLnNpemUoKTsKKyAgICBOU011dGFibGVEaWN0aW9uYXJ5ICpkaWN0aW9u
YXJ5ID0gW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OnNpemVd
OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICBbZGljdGlv
bmFyeSBzZXRPYmplY3Q6dGV4dEZpZWxkVmFsdWVzW2ldLnNlY29uZCBmb3JLZXk6dGV4dEZpZWxk
VmFsdWVzW2ldLmZpcnN0XTsKIAogICAgIENhbGxGb3JtRGVsZWdhdGUoZ2V0V2ViVmlldyhtX3dl
YkZyYW1lLmdldCgpKSwgQHNlbGVjdG9yKGZyYW1lOnNvdXJjZUZyYW1lOndpbGxTdWJtaXRGb3Jt
OndpdGhWYWx1ZXM6c3VibWlzc2lvbkxpc3RlbmVyOiksIG1fd2ViRnJhbWUuZ2V0KCksIGtpdChm
b3JtU3RhdGUtPnNvdXJjZUZyYW1lKCkpLCBraXQoZm9ybVN0YXRlLT5mb3JtKCkpLCBkaWN0aW9u
YXJ5LCBzZXRVcFBvbGljeUxpc3RlbmVyKGZ1bmN0aW9uKS5nZXQoKSk7CiAKSW5kZXg6IFdlYktp
dC9tYWMvV2ViVmlldy9XZWJQREZWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2Vi
Vmlldy9XZWJQREZWaWV3Lm1tCShyZXZpc2lvbiA0MjA3OSkKKysrIFdlYktpdC9tYWMvV2ViVmll
dy9XZWJQREZWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC00Nyw5ICs0NywxMSBAQAogI2ltcG9ydCAiV2ViVmlld0ludGVybmFsLmgiCiAj
aW1wb3J0IDxQREZLaXQvUERGS2l0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0V2ZW50TmFtZXMuaD4K
KyNpbXBvcnQgPFdlYkNvcmUvRm9ybVN0YXRlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lLmg+
Ci0jaW1wb3J0IDxXZWJDb3JlL0ZyYW1lTG9hZGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1l
TG9hZFJlcXVlc3QuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRnJhbWVMb2FkZXIuaD4KKyNpbXBvcnQg
PFdlYkNvcmUvSFRNTEZvcm1FbGVtZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0tVUkwuaD4KICNp
bXBvcnQgPFdlYkNvcmUvS2V5Ym9hcmRFdmVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9Nb3VzZUV2
ZW50Lmg+CkBAIC05NDEsMTYgKzk0MywxNyBAQCBzdGF0aWMgQk9PTCBfUERGU2VsZWN0aW9uc0Fy
ZUVxdWFsKFBERlNlCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBicmVhazsKICAgICB9
Ci0gICAgaWYgKGJ1dHRvbiAhPSBub0J1dHRvbikKKyAgICBpZiAoYnV0dG9uICE9IG5vQnV0dG9u
KSB7CiAgICAgICAgIGV2ZW50ID0gTW91c2VFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5jbGlj
a0V2ZW50LCB0cnVlLCB0cnVlLCAwLCBbbnNFdmVudCBjbGlja0NvdW50XSwgMCwgMCwgMCwgMCwK
ICAgICAgICAgICAgIFtuc0V2ZW50IG1vZGlmaWVyRmxhZ3NdICYgTlNDb250cm9sS2V5TWFzaywK
ICAgICAgICAgICAgIFtuc0V2ZW50IG1vZGlmaWVyRmxhZ3NdICYgTlNBbHRlcm5hdGVLZXlNYXNr
LAogICAgICAgICAgICAgW25zRXZlbnQgbW9kaWZpZXJGbGFnc10gJiBOU1NoaWZ0S2V5TWFzaywK
ICAgICAgICAgICAgIFtuc0V2ZW50IG1vZGlmaWVyRmxhZ3NdICYgTlNDb21tYW5kS2V5TWFzaywK
ICAgICAgICAgICAgIGJ1dHRvbiwgMCwgMCwgdHJ1ZSk7CisgICAgfQogCiAgICAgLy8gQ2FsbCB0
byB0aGUgZnJhbWUgbG9hZGVyIGJlY2F1c2UgdGhpcyBpcyB3aGVyZSBvdXIgc2VjdXJpdHkgY2hl
Y2tzIGFyZSBtYWRlLgotICAgIGNvcmUoW2RhdGFTb3VyY2Ugd2ViRnJhbWVdKS0+bG9hZGVyKCkt
PmxvYWRGcmFtZVJlcXVlc3RXaXRoRm9ybUFuZFZhbHVlcyhSZXNvdXJjZVJlcXVlc3QoVVJMKSwg
ZmFsc2UsIGZhbHNlLCBldmVudC5nZXQoKSwgMCwgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4oKSk7
CisgICAgY29yZShbZGF0YVNvdXJjZSB3ZWJGcmFtZV0pLT5sb2FkZXIoKS0+bG9hZEZyYW1lUmVx
dWVzdChSZXNvdXJjZVJlcXVlc3QoVVJMKSwgZmFsc2UsIGZhbHNlLCBldmVudC5nZXQoKSwgMCk7
CiB9CiAKIC0gKHZvaWQpUERGVmlld09wZW5QREZJbk5hdGl2ZUFwcGxpY2F0aW9uOihQREZWaWV3
ICopc2VuZGVyCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29149</attachid>
            <date>2009-03-31 18:01:14 -0700</date>
            <delta_ts>2009-04-01 09:47:30 -0700</delta_ts>
            <desc>event closer to done</desc>
            <filename>FormWorkInProgressPatch.txt</filename>
            <type>text/plain</type>
            <size>81314</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MjE0NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODQgQEAKKzIwMDktMDMtMzEgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1ZyAy
MjM3ODogQ3Jhc2ggc3VibWl0dGluZyBhIGZvcm0gd2hlbiBwYXJzaW5nIGFuIFhIVE1MIGRvY3Vt
ZW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjM3
OAorICAgICAgICByZGFyOi8vcHJvYmxlbS82Mzg4Mzc3CisKKyAgICAgICAgKiBXZWJDb3JlLmJh
c2UuZXhwOiBVcGRhdGVkLgorCisgICAgICAgICogaGlzdG9yeS9IaXN0b3J5SXRlbS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIaXN0b3J5SXRlbTo6SGlzdG9yeUl0ZW0pOiBSZW5hbWVkIG1fc3Vi
SXRlbXMgdG8gbV9jaGlsZHJlbi4KKyAgICAgICAgVXNlZCB1bmNoZWNrZWRBcHBlbmQgYmVjYXVz
ZSB3ZSByZXNlcnZlSW5pdGlhbENhcGFjaXR5LgorICAgICAgICAoV2ViQ29yZTo6SGlzdG9yeUl0
ZW06OmFkZENoaWxkSXRlbSk6IFJlbmFtZWQgbV9zdWJJdGVtcyB0byBtX2NoaWxkcmVuLgorICAg
ICAgICBBZGRlZCBhbiBhc3NlcnRpb24gdGhhdCB0aGlzIGlzIG9ubHkgdXNlZCB0byBhZGQgaXRl
bXMgdGhhdCBkb24ndCBoYXZlCisgICAgICAgIGR1cGxpY2F0ZSBmcmFtZSBuYW1lcy4KKyAgICAg
ICAgKFdlYkNvcmU6Okhpc3RvcnlJdGVtOjpzZXRDaGlsZEl0ZW0pOiBBZGRlZC4gUmVwbGFjZXMg
YW4gZXhpc3RpbmcgaXRlbQorICAgICAgICBpZiBhbnksIHByZXNlcnZpbmcgdGhlIGlzVGFyZ2V0
SXRlbSBmbGFnLgorICAgICAgICAoV2ViQ29yZTo6SGlzdG9yeUl0ZW06OmNoaWxkSXRlbVdpdGhU
YXJnZXQpOiBSZW5hbWVkIGZyb20gY2hpbGRJdGVtV2l0aE5hbWUKKyAgICAgICAgZm9yIGNvbnNp
c3RlbmN5IHdpdGggdGhlIG90aGVyIGZ1bmN0aW9ucyBoZXJlIHRoYXQgYWxsIGNhbGwgdGhlIGZy
YW1lIG5hbWUgdGhlCisgICAgICAgICJ0YXJnZXQiLiBBbHNvIHVwZGF0ZWQgZm9yIHJlbmFtZSBv
ZiBtX3N1Ykl0ZW1zIHRvIG1fY2hpbGRyZW4uCisgICAgICAgIChXZWJDb3JlOjpIaXN0b3J5SXRl
bTo6ZmluZFRhcmdldEl0ZW0pOiBSZW5hbWVkIGZyb20gcmVjdXJzZVRvRmluZFRhcmdldEl0ZW0u
CisgICAgICAgIFJlbW92ZWQgdW5uZWVkZWQgc2l6ZSBjaGVjay4KKyAgICAgICAgKFdlYkNvcmU6
Okhpc3RvcnlJdGVtOjp0YXJnZXRJdGVtKTogQ2hhbmdlZCB0byBhbHdheXMgcmV0dXJuIHRoZSB0
b3AgaXRlbQorICAgICAgICBpZiBubyBpdGVtIGhhcyB0aGUgaXNUYXJnZXRJdGVtIGZsYWcgc2V0
LiBUaGUgb2xkIHZlcnNpb24gd291bGQgaW5zdGVhZCByZXR1cm4KKyAgICAgICAgMCBpbiBzb21l
IGNhc2VzLCBidXQgcmV0dXJuIHRoZSB0b3AgaXRlbSBpZiBpdCBoYWQgbm8gY2hpbGRyZW4uCisg
ICAgICAgIChXZWJDb3JlOjpIaXN0b3J5SXRlbTo6Y2hpbGRyZW4pOiBSZW5hbWVkIG1fc3ViSXRl
bXMgdG8gbV9jaGlsZHJlbi4KKyAgICAgICAgKFdlYkNvcmU6Okhpc3RvcnlJdGVtOjpoYXNDaGls
ZHJlbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SGlzdG9yeUl0ZW06OnNob3dUcmVlV2l0
aEluZGVudCk6IERpdHRvLgorCisgICAgICAgICogaGlzdG9yeS9IaXN0b3J5SXRlbS5oOiBOYW1l
IGNoYW5nZXMuCisKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6OnN1Ym1pdCk6IENyZWF0ZSBhbmQgcGFzcyBhIEZv
cm1TdGF0ZSBpbnN0ZWFkIG9mCisgICAgICAgIGF0dGFjaGluZyAicmVjb3JkZWQgZm9ybSB2YWx1
ZXMiIGFuZCAiZm9ybSBhYm91dCB0byBiZSBzdWJtaXR0ZWQiIHRvIHRoZSBmcmFtZQorICAgICAg
ICBsb2FkZXIuIFBhcmFtZXRlciB3b3JrIGZpbmUgZm9yIHRoaXM7IHRoZXJlJ3Mgbm8gbmVlZCB0
byBzdG9yZSBzdGF0ZSBvbiB0aGUKKyAgICAgICAgRnJhbWVMb2FkZXIuCisKKyAgICAgICAgKiBs
b2FkZXIvRm9ybVN0YXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1TdGF0ZTo6Rm9ybVN0
YXRlKTogQWRvcHQgYSB2ZWN0b3IgaW5zdGVhZCBvZiBjb3B5aW5nIGEgaGFzaCBtYXAuCisgICAg
ICAgIChXZWJDb3JlOjpGb3JtU3RhdGU6OmNyZWF0ZSk6IERpdHRvLgorICAgICAgICAqIGxvYWRl
ci9Gb3JtU3RhdGUuaDogVXBkYXRlIHRvIHVzZSBhIHZlY3RvciB0aGF0IHdlIGFkb3B0IGluc3Rl
YWQgb2YgaGFzaCBtYXAKKyAgICAgICAgdGhhdCB3ZSBjb3B5IGZvciBhdXRvLWZpbGwgdGV4dCBm
aWVsZCB2YWx1ZXMuCisKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U2NoZWR1bGVkUmVkaXJlY3Rpb246OlNjaGVkdWxlZFJlZGlyZWN0aW9uKTog
QWRkZWQgYSBuZXcgY2FzZSBmb3IKKyAgICAgICAgZm9ybSBzdWJtaXNzaW9ucyBhbmQgdHVybmVk
IHRoZSAid2FzRHVyaW5nTG9hZCIgc3RhdGUgaW50byBhIHNlcGFyYXRlIGJvb2xlYW4KKyAgICAg
ICAgaW5zdGVhZCBvZiB1c2luZyBhIHNwZWNpYWwgcmVkaXJlY3Rpb24gdHlwZSB0byB0cmFjayBp
dC4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpjcmVhdGVXaW5kb3cpOiBVcGRhdGVk
IGZvciBuYW1lIGFuZCBhcmd1bWVudCBjaGFuZ2Ugb2YKKyAgICAgICAgbG9hZEZyYW1lUmVxdWVz
dC4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjp1cmxTZWxlY3RlZCk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OnN1Ym1pdEZvcm0pOiBSZW1vdmVkIHRoZSAi
ZGVmZXJyZWQgZm9ybSBzdWJtaXNzaW9uIgorICAgICAgICBtYWNoaW5lcnksIHJlcGxhY2luZyBp
dCB3aXRoIAorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmRpZE9wZW5VUkwpOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmV4ZWN1dGVTY3JpcHQpOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVMb2FkZXI6OnNjaGVkdWxlTG9jYXRpb25DaGFuZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVMb2FkZXI6OnNjaGVkdWxlRm9ybVN1Ym1pc3Npb24pOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVMb2FkZXI6OnNjaGVkdWxlUmVmcmVzaCk6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZUxvYWRlcjo6aXNMb2NhdGlvbkNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxv
YWRlcjo6cmVkaXJlY3Rpb25UaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9h
ZGVyOjpsb2FkVVJMSW50b0NoaWxkRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2Fk
ZXI6OnByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2Fk
ZXI6OnNjaGVkdWxlUmVkaXJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6
OnN0YXJ0UmVkaXJlY3Rpb25UaW1lcik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6
c3RvcFJlZGlyZWN0aW9uVGltZXIpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNv
bXBsZXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6bG9hZEZyYW1lUmVxdWVz
dCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6bG9hZFVSTCk6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZUxvYWRlcjo6Y2xpZW50UmVkaXJlY3RlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZUxvYWRlcjo6dG9rZW5pemVyUHJvY2Vzc2VkRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZUxvYWRlcjo6bG9hZFBvc3RSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
TG9hZGVyOjphZGRCYWNrRm9yd2FyZEl0ZW1DbGlwcGVkQXRUYXJnZXQpOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVMb2FkZXI6OmZpbmRGcmFtZUZvck5hdmlnYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVMb2FkZXI6OmxvYWRJdGVtKToKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2Fk
ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpkb2N1bWVudExvYWRlcik6Cisg
ICAgICAgICogcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q29udGV4dE1lbnVDb250cm9sbGVyOjpjb250ZXh0TWVudUl0ZW1TZWxlY3RlZCk6CisgICAg
ICAgICogcGFnZS9GcmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6fkZyYW1lKToK
KwogMjAwOS0wMy0zMSAgRXJpYyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBTaW1vbiBGcmFzZXIuCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUu
YmFzZS5leHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCShyZXZpc2lv
biA0MjE0NikKKysrIFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAkod29ya2luZyBjb3B5KQpAQCAt
MTUyLDYgKzE1Miw3IEBAIF9fWk43V2ViQ29yZTExRnJhbWVMb2FkZXIxNGRldGFjaENoaWxkcmUK
IF9fWk43V2ViQ29yZTExRnJhbWVMb2FkZXIxNHNjcm9sbFRvQW5jaG9yRVJLTlNfNEtVUkxFCiBf
X1pON1dlYkNvcmUxMUZyYW1lTG9hZGVyMTRzdG9wQWxsTG9hZGVyc0V2CiBfX1pON1dlYkNvcmUx
MUZyYW1lTG9hZGVyMTZkZXRhY2hGcm9tUGFyZW50RXYKK19fWk43V2ViQ29yZTExRnJhbWVMb2Fk
ZXIxNmxvYWRGcmFtZVJlcXVlc3RFUktOU18xNkZyYW1lTG9hZFJlcXVlc3RFYmJOM1dURjEwUGFz
c1JlZlB0cklOU181RXZlbnRFRUVOUzVfSU5TXzlGb3JtU3RhdGVFRUUKIF9fWk43V2ViQ29yZTEx
RnJhbWVMb2FkZXIxN3N0b3BGb3JVc2VyQ2FuY2VsRWIKIF9fWk43V2ViQ29yZTExRnJhbWVMb2Fk
ZXIxOGN1cnJlbnRIaXN0b3J5SXRlbUV2CiBfX1pON1dlYkNvcmUxMUZyYW1lTG9hZGVyMThzZXRM
b2NhbExvYWRQb2xpY3lFTlMwXzE1TG9jYWxMb2FkUG9saWN5RQpAQCAtMTYzLDcgKzE2NCw2IEBA
IF9fWk43V2ViQ29yZTExRnJhbWVMb2FkZXIyM3RpbWVPZkxhc3RDb20KIF9fWk43V2ViQ29yZTEx
RnJhbWVMb2FkZXIyNHJlZ2lzdGVyVVJMU2NoZW1lQXNMb2NhbEVSS05TXzZTdHJpbmdFCiBfX1pO
N1dlYkNvcmUxMUZyYW1lTG9hZGVyMjZyZWxvYWRXaXRoT3ZlcnJpZGVFbmNvZGluZ0VSS05TXzZT
dHJpbmdFCiBfX1pON1dlYkNvcmUxMUZyYW1lTG9hZGVyMjZzYXZlRG9jdW1lbnRBbmRTY3JvbGxT
dGF0ZUV2Ci1fX1pON1dlYkNvcmUxMUZyYW1lTG9hZGVyMzNsb2FkRnJhbWVSZXF1ZXN0V2l0aEZv
cm1BbmRWYWx1ZXNFUktOU18xNkZyYW1lTG9hZFJlcXVlc3RFYmJOM1dURjEwUGFzc1JlZlB0cklO
U181RXZlbnRFRUVQTlNfMTVIVE1MRm9ybUVsZW1lbnRFUktOUzRfN0hhc2hNYXBJTlNfNlN0cmlu
Z0VTQl9OU18xMFN0cmluZ0hhc2hFTlM0XzEwSGFzaFRyYWl0c0lTQl9FRVNFX0VFCiBfX1pON1dl
YkNvcmUxMUZyYW1lTG9hZGVyMzZzYXZlU2Nyb2xsUG9zaXRpb25BbmRWaWV3U3RhdGVUb0l0ZW1F
UE5TXzExSGlzdG9yeUl0ZW1FCiBfX1pON1dlYkNvcmUxMUZyYW1lTG9hZGVyNGxvYWRFUktOU18x
NVJlc291cmNlUmVxdWVzdEVSS05TXzE0U3Vic3RpdHV0ZURhdGFFYgogX19aTjdXZWJDb3JlMTFG
cmFtZUxvYWRlcjRsb2FkRVJLTlNfMTVSZXNvdXJjZVJlcXVlc3RFUktOU182U3RyaW5nRWIKQEAg
LTE3Miw2ICsxNzIsNyBAQCBfX1pON1dlYkNvcmUxMUZyYW1lTG9hZGVyNnJlbG9hZEViCiBfX1pO
N1dlYkNvcmUxMUZyYW1lTG9hZGVyN2FkZERhdGFFUEtjaQogX19aTjdXZWJDb3JlMTFGcmFtZUxv
YWRlcjdjYW5Mb2FkRVJLTlNfNEtVUkxFUktOU182U3RyaW5nRVBLTlNfOERvY3VtZW50RQogX19a
TjdXZWJDb3JlMTFHZW9sb2NhdGlvbjEyc2V0SXNBbGxvd2VkRWIKK19fWk43V2ViQ29yZTExSGlz
dG9yeUl0ZW0xMHRhcmdldEl0ZW1FdgogX19aTjdXZWJDb3JlMTFIaXN0b3J5SXRlbTExc2V0UmVm
ZXJyZXJFUktOU182U3RyaW5nRQogX19aTjdXZWJDb3JlMTFIaXN0b3J5SXRlbTEyYWRkQ2hpbGRJ
dGVtRU4zV1RGMTBQYXNzUmVmUHRySVMwX0VFCiBfX1pON1dlYkNvcmUxMUhpc3RvcnlJdGVtMTJz
ZXRVUkxTdHJpbmdFUktOU182U3RyaW5nRQpAQCAtMTg4LDEzICsxODksMTEgQEAgX19aTjdXZWJD
b3JlMTFIaXN0b3J5SXRlbTE4c2V0TGFzdFZpc2l0ZQogX19aTjdXZWJDb3JlMTFIaXN0b3J5SXRl
bTIwc2V0T3JpZ2luYWxVUkxTdHJpbmdFUktOU182U3RyaW5nRQogX19aTjdXZWJDb3JlMTFIaXN0
b3J5SXRlbTIwc2V0VHJhbnNpZW50UHJvcGVydHlFUktOU182U3RyaW5nRVAxMW9iamNfb2JqZWN0
CiBfX1pON1dlYkNvcmUxMUhpc3RvcnlJdGVtMjJtZXJnZUF1dG9Db21wbGV0ZUhpbnRzRVBTMF8K
LV9fWk43V2ViQ29yZTExSGlzdG9yeUl0ZW0yM3JlY3Vyc2VUb0ZpbmRUYXJnZXRJdGVtRXYKIF9f
Wk43V2ViQ29yZTExSGlzdG9yeUl0ZW02c2V0VVJMRVJLTlNfNEtVUkxFCiBfX1pON1dlYkNvcmUx
MUhpc3RvcnlJdGVtN3Zpc2l0ZWRFUktOU182U3RyaW5nRWQKIF9fWk43V2ViQ29yZTExSGlzdG9y
eUl0ZW04Zm9ybURhdGFFdgogX19aTjdXZWJDb3JlMTFIaXN0b3J5SXRlbThzZXRUaXRsZUVSS05T
XzZTdHJpbmdFCiBfX1pON1dlYkNvcmUxMUhpc3RvcnlJdGVtOXNldFBhcmVudEVSS05TXzZTdHJp
bmdFCi1fX1pON1dlYkNvcmUxMUhpc3RvcnlJdGVtOXNldFRhcmdldEVSS05TXzZTdHJpbmdFCiBf
X1pON1dlYkNvcmUxMUhpc3RvcnlJdGVtQzFFUktOU180S1VSTEVSS05TXzZTdHJpbmdFUzZfUzZf
CiBfX1pON1dlYkNvcmUxMUhpc3RvcnlJdGVtQzFFUktOU182U3RyaW5nRVMzX1MzX2QKIF9fWk43
V2ViQ29yZTExSGlzdG9yeUl0ZW1DMUVSS05TXzZTdHJpbmdFUzNfZApAQCAtNzI1LDcgKzcyNCw2
IEBAIF9fWk5LN1dlYkNvcmUxMUhpc3RvcnlJdGVtMTJpc1RhcmdldEl0ZW0KIF9fWk5LN1dlYkNv
cmUxMUhpc3RvcnlJdGVtMTJyZWRpcmVjdFVSTHNFdgogX19aTks3V2ViQ29yZTExSGlzdG9yeUl0
ZW0xNGFsdGVybmF0ZVRpdGxlRXYKIF9fWk5LN1dlYkNvcmUxMUhpc3RvcnlJdGVtMTVsYXN0Vmlz
aXRlZFRpbWVFdgotX19aTks3V2ViQ29yZTExSGlzdG9yeUl0ZW0xN2NoaWxkSXRlbVdpdGhOYW1l
RVJLTlNfNlN0cmluZ0UKIF9fWk5LN1dlYkNvcmUxMUhpc3RvcnlJdGVtMTdvcmlnaW5hbFVSTFN0
cmluZ0V2CiBfX1pOSzdXZWJDb3JlMTFIaXN0b3J5SXRlbTIwZ2V0VHJhbnNpZW50UHJvcGVydHlF
UktOU182U3RyaW5nRQogX19aTks3V2ViQ29yZTExSGlzdG9yeUl0ZW0zdXJsRXYKSW5kZXg6IFdl
YkNvcmUvaGlzdG9yeS9IaXN0b3J5SXRlbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9oaXN0
b3J5L0hpc3RvcnlJdGVtLmNwcAkocmV2aXNpb24gNDIxNDYpCisrKyBXZWJDb3JlL2hpc3Rvcnkv
SGlzdG9yeUl0ZW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjMsMTAgKzEyMywxMCBAQCBpbmxp
bmUgSGlzdG9yeUl0ZW06Okhpc3RvcnlJdGVtKGNvbnN0IEhpCiAgICAgaWYgKGl0ZW0ubV9mb3Jt
RGF0YSkKICAgICAgICAgbV9mb3JtRGF0YSA9IGl0ZW0ubV9mb3JtRGF0YS0+Y29weSgpOwogICAg
ICAgICAKLSAgICB1bnNpZ25lZCBzaXplID0gaXRlbS5tX3N1Ykl0ZW1zLnNpemUoKTsKLSAgICBt
X3N1Ykl0ZW1zLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2l6ZSk7CisgICAgdW5zaWduZWQgc2l6
ZSA9IGl0ZW0ubV9jaGlsZHJlbi5zaXplKCk7CisgICAgbV9jaGlsZHJlbi5yZXNlcnZlSW5pdGlh
bENhcGFjaXR5KHNpemUpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kp
Ci0gICAgICAgIG1fc3ViSXRlbXMuYXBwZW5kKGl0ZW0ubV9zdWJJdGVtc1tpXS0+Y29weSgpKTsK
KyAgICAgICAgbV9jaGlsZHJlbi51bmNoZWNrZWRBcHBlbmQoaXRlbS5tX2NoaWxkcmVuW2ldLT5j
b3B5KCkpOwogCiAgICAgaWYgKGl0ZW0ubV9yZWRpcmVjdFVSTHMpCiAgICAgICAgIG1fcmVkaXJl
Y3RVUkxzLnNldChuZXcgVmVjdG9yPFN0cmluZz4oKml0ZW0ubV9yZWRpcmVjdFVSTHMpKTsKQEAg
LTM3OCw1MiArMzc4LDYxIEBAIHZvaWQgSGlzdG9yeUl0ZW06OnNldElzVGFyZ2V0SXRlbShib29s
IGYKIAogdm9pZCBIaXN0b3J5SXRlbTo6YWRkQ2hpbGRJdGVtKFBhc3NSZWZQdHI8SGlzdG9yeUl0
ZW0+IGNoaWxkKQogewotICAgIG1fc3ViSXRlbXMuYXBwZW5kKGNoaWxkKTsKKyAgICBBU1NFUlQo
IWNoaWxkSXRlbVdpdGhUYXJnZXQoY2hpbGQtPnRhcmdldCgpKSk7CisgICAgbV9jaGlsZHJlbi5h
cHBlbmQoY2hpbGQpOwogfQogCi1IaXN0b3J5SXRlbSogSGlzdG9yeUl0ZW06OmNoaWxkSXRlbVdp
dGhOYW1lKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKK3ZvaWQgSGlzdG9yeUl0ZW06OnNldENo
aWxkSXRlbShQYXNzUmVmUHRyPEhpc3RvcnlJdGVtPiBjaGlsZCkKIHsKLSAgICB1bnNpZ25lZCBz
aXplID0gbV9zdWJJdGVtcy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNp
emU7ICsraSkgCi0gICAgICAgIGlmIChtX3N1Ykl0ZW1zW2ldLT50YXJnZXQoKSA9PSBuYW1lKQot
ICAgICAgICAgICAgcmV0dXJuIG1fc3ViSXRlbXNbaV0uZ2V0KCk7CisgICAgQVNTRVJUKCFjaGls
ZC0+aXNUYXJnZXRJdGVtKCkpOworICAgIHVuc2lnbmVkIHNpemUgPSBtX2NoaWxkcmVuLnNpemUo
KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSAgeworICAgICAgICBp
ZiAobV9jaGlsZHJlbltpXS0+dGFyZ2V0KCkgPT0gY2hpbGQtPnRhcmdldCgpKSB7CisgICAgICAg
ICAgICBjaGlsZC0+c2V0SXNUYXJnZXRJdGVtKG1fY2hpbGRyZW5baV0tPmlzVGFyZ2V0SXRlbSgp
KTsKKyAgICAgICAgICAgIG1fY2hpbGRyZW5baV0gPSBjaGlsZDsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgIH0KKyAgICBtX2NoaWxkcmVuLmFwcGVuZChjaGlsZCk7Cit9CisK
K0hpc3RvcnlJdGVtKiBIaXN0b3J5SXRlbTo6Y2hpbGRJdGVtV2l0aFRhcmdldChjb25zdCBTdHJp
bmcmIHRhcmdldCkgY29uc3QKK3sKKyAgICB1bnNpZ25lZCBzaXplID0gbV9jaGlsZHJlbi5zaXpl
KCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICBp
ZiAobV9jaGlsZHJlbltpXS0+dGFyZ2V0KCkgPT0gdGFyZ2V0KQorICAgICAgICAgICAgcmV0dXJu
IG1fY2hpbGRyZW5baV0uZ2V0KCk7CisgICAgfQogICAgIHJldHVybiAwOwogfQogCi0vLyA8cmRh
cjovL3Byb2JsZW0vNDg5NTg0OT4gSGlzdG9yeUl0ZW06OnJlY3Vyc2VUb0ZpbmRUYXJnZXRJdGVt
KCkgc2hvdWxkIGJlIHJlcGxhY2Ugd2l0aCBhIG5vbi1yZWN1cnNpdmUgbWV0aG9kCi1IaXN0b3J5
SXRlbSogSGlzdG9yeUl0ZW06OnJlY3Vyc2VUb0ZpbmRUYXJnZXRJdGVtKCkKKy8vIDxyZGFyOi8v
cHJvYmxlbS80ODk1ODQ5PiBIaXN0b3J5SXRlbTo6ZmluZFRhcmdldEl0ZW0oKSBzaG91bGQgYmUg
cmVwbGFjZWQgd2l0aCBhIG5vbi1yZWN1cnNpdmUgbWV0aG9kLgorSGlzdG9yeUl0ZW0qIEhpc3Rv
cnlJdGVtOjpmaW5kVGFyZ2V0SXRlbSgpCiB7CiAgICAgaWYgKG1faXNUYXJnZXRJdGVtKQogICAg
ICAgICByZXR1cm4gdGhpczsKLSAgICBpZiAoIW1fc3ViSXRlbXMuc2l6ZSgpKQotICAgICAgICBy
ZXR1cm4gMDsKLSAgICAKLSAgICBIaXN0b3J5SXRlbSogbWF0Y2g7Ci0gICAgdW5zaWduZWQgc2l6
ZSA9IG1fc3ViSXRlbXMuc2l6ZSgpOworICAgIHVuc2lnbmVkIHNpemUgPSBtX2NoaWxkcmVuLnNp
emUoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAg
IG1hdGNoID0gbV9zdWJJdGVtc1tpXS0+cmVjdXJzZVRvRmluZFRhcmdldEl0ZW0oKTsKLSAgICAg
ICAgaWYgKG1hdGNoKQorICAgICAgICBpZiAoSGlzdG9yeUl0ZW0qIG1hdGNoID0gbV9jaGlsZHJl
bltpXS0+dGFyZ2V0SXRlbSgpKQogICAgICAgICAgICAgcmV0dXJuIG1hdGNoOwogICAgIH0KLSAg
ICAKICAgICByZXR1cm4gMDsKIH0KIAogSGlzdG9yeUl0ZW0qIEhpc3RvcnlJdGVtOjp0YXJnZXRJ
dGVtKCkKIHsKLSAgICBpZiAoIW1fc3ViSXRlbXMuc2l6ZSgpKQotICAgICAgICByZXR1cm4gdGhp
czsKLSAgICByZXR1cm4gcmVjdXJzZVRvRmluZFRhcmdldEl0ZW0oKTsKKyAgICBIaXN0b3J5SXRl
bSogZm91bmRJdGVtID0gZmluZFRhcmdldEl0ZW0oKTsKKyAgICByZXR1cm4gZm91bmRJdGVtID8g
Zm91bmRJdGVtIDogdGhpczsKIH0KIAogY29uc3QgSGlzdG9yeUl0ZW1WZWN0b3ImIEhpc3RvcnlJ
dGVtOjpjaGlsZHJlbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fc3ViSXRlbXM7CisgICAgcmV0
dXJuIG1fY2hpbGRyZW47CiB9CiAKIGJvb2wgSGlzdG9yeUl0ZW06Omhhc0NoaWxkcmVuKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gbV9zdWJJdGVtcy5zaXplKCk7CisgICAgcmV0dXJuICFtX2NoaWxk
cmVuLmlzRW1wdHkoKTsKIH0KIAogU3RyaW5nIEhpc3RvcnlJdGVtOjpmb3JtQ29udGVudFR5cGUo
KSBjb25zdApAQCAtNTA1LDggKzUxNCw4IEBAIGludCBIaXN0b3J5SXRlbTo6c2hvd1RyZWVXaXRo
SW5kZW50KHVuc2kKICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzKy0lcyAoJXApXG4iLCBwcmVmaXgu
ZGF0YSgpLCBtX3VybFN0cmluZy51dGY4KCkuZGF0YSgpLCB0aGlzKTsKICAgICAKICAgICBpbnQg
dG90YWxTdWJJdGVtcyA9IDA7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc3ViSXRl
bXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIHRvdGFsU3ViSXRlbXMgKz0gbV9zdWJJdGVtc1tpXS0+
c2hvd1RyZWVXaXRoSW5kZW50KGluZGVudExldmVsICsgMSk7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fY2hpbGRyZW4uc2l6ZSgpOyArK2kpCisgICAgICAgIHRvdGFsU3ViSXRlbXMg
Kz0gbV9jaGlsZHJlbltpXS0+c2hvd1RyZWVXaXRoSW5kZW50KGluZGVudExldmVsICsgMSk7CiAg
ICAgcmV0dXJuIHRvdGFsU3ViSXRlbXMgKyAxOwogfQogCkluZGV4OiBXZWJDb3JlL2hpc3Rvcnkv
SGlzdG9yeUl0ZW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2hpc3RvcnkvSGlzdG9yeUl0ZW0u
aAkocmV2aXNpb24gNDIxNDYpCisrKyBXZWJDb3JlL2hpc3RvcnkvSGlzdG9yeUl0ZW0uaAkod29y
a2luZyBjb3B5KQpAQCAtMTI5LDkgKzEyOSw5IEBAIHB1YmxpYzogCiAgICAgdm9pZCBzZXRMYXN0
VmlzaXRXYXNIVFRQTm9uR2V0KGJvb2wgd2FzTm90R2V0KSB7IG1fbGFzdFZpc2l0V2FzSFRUUE5v
bkdldCA9IHdhc05vdEdldDsgfQogCiAgICAgdm9pZCBhZGRDaGlsZEl0ZW0oUGFzc1JlZlB0cjxI
aXN0b3J5SXRlbT4pOwotICAgIEhpc3RvcnlJdGVtKiBjaGlsZEl0ZW1XaXRoTmFtZShjb25zdCBT
dHJpbmcmKSBjb25zdDsKKyAgICB2b2lkIHNldENoaWxkSXRlbShQYXNzUmVmUHRyPEhpc3RvcnlJ
dGVtPik7CisgICAgSGlzdG9yeUl0ZW0qIGNoaWxkSXRlbVdpdGhUYXJnZXQoY29uc3QgU3RyaW5n
JikgY29uc3Q7CiAgICAgSGlzdG9yeUl0ZW0qIHRhcmdldEl0ZW0oKTsKLSAgICBIaXN0b3J5SXRl
bSogcmVjdXJzZVRvRmluZFRhcmdldEl0ZW0oKTsKICAgICBjb25zdCBIaXN0b3J5SXRlbVZlY3Rv
ciYgY2hpbGRyZW4oKSBjb25zdDsKICAgICBib29sIGhhc0NoaWxkcmVuKCkgY29uc3Q7CiAKQEAg
LTE3NCw3ICsxNzQsNyBAQCBwcml2YXRlOgogICAgIEhpc3RvcnlJdGVtKCk7CiAgICAgSGlzdG9y
eUl0ZW0oY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcsIGNvbnN0IFN0cmluZyYgdGl0bGUsIGRvdWJs
ZSBsYXN0VmlzaXRlZCk7CiAgICAgSGlzdG9yeUl0ZW0oY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcs
IGNvbnN0IFN0cmluZyYgdGl0bGUsIGNvbnN0IFN0cmluZyYgYWx0ZXJuYXRlVGl0bGUsIGRvdWJs
ZSBsYXN0VmlzaXRlZCk7Ci0gICAgSGlzdG9yeUl0ZW0oY29uc3QgS1VSTCYgdXJsLCBjb25zdCBT
dHJpbmcmIHRhcmdldCwgY29uc3QgU3RyaW5nJiBwYXJlbnQsIGNvbnN0IFN0cmluZyYgdGl0bGUp
OworICAgIEhpc3RvcnlJdGVtKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBmcmFtZU5h
bWUsIGNvbnN0IFN0cmluZyYgcGFyZW50LCBjb25zdCBTdHJpbmcmIHRpdGxlKTsKIAogICAgIEhp
c3RvcnlJdGVtKGNvbnN0IEhpc3RvcnlJdGVtJik7CiAKQEAgLTE4Miw2ICsxODIsOCBAQCBwcml2
YXRlOgogICAgIHZvaWQgY29sbGFwc2VEYWlseVZpc2l0c1RvV2Vla2x5KCk7CiAgICAgdm9pZCBy
ZWNvcmRWaXNpdEF0VGltZShkb3VibGUpOwogCisgICAgSGlzdG9yeUl0ZW0qIGZpbmRUYXJnZXRJ
dGVtKCk7CisKICAgICBTdHJpbmcgbV91cmxTdHJpbmc7CiAgICAgU3RyaW5nIG1fb3JpZ2luYWxV
UkxTdHJpbmc7CiAgICAgU3RyaW5nIG1fcmVmZXJyZXI7CkBAIC0xOTYsNyArMTk4LDcgQEAgcHJp
dmF0ZToKICAgICBJbnRQb2ludCBtX3Njcm9sbFBvaW50OwogICAgIFZlY3RvcjxTdHJpbmc+IG1f
ZG9jdW1lbnRTdGF0ZTsKICAgICAKLSAgICBIaXN0b3J5SXRlbVZlY3RvciBtX3N1Ykl0ZW1zOwor
ICAgIEhpc3RvcnlJdGVtVmVjdG9yIG1fY2hpbGRyZW47CiAgICAgCiAgICAgYm9vbCBtX2xhc3RW
aXNpdFdhc0ZhaWx1cmU7CiAgICAgYm9vbCBtX2lzVGFyZ2V0SXRlbTsKSW5kZXg6IFdlYkNvcmUv
aHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1M
Rm9ybUVsZW1lbnQuY3BwCShyZXZpc2lvbiA0MjE0NikKKysrIFdlYkNvcmUvaHRtbC9IVE1MRm9y
bUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yLDcgKzIsNyBAQAogICogQ29weXJpZ2h0
IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5
OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIw
MDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQs
IDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICAgICAgICAgICAoQykgMjAwNiBBbGV4ZXkg
UHJvc2t1cnlha292IChhcEBueXBvcC5jb20pCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMzQsNiArMzQsNyBA
QAogI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJGb3JtRGF0YS5oIgogI2luY2x1
ZGUgIkZvcm1EYXRhTGlzdC5oIgorI2luY2x1ZGUgIkZvcm1TdGF0ZS5oIgogI2luY2x1ZGUgIkZy
YW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJIVE1MRG9jdW1lbnQu
aCIKQEAgLTQ0LDExICs0NSwxMCBAQAogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKICNp
bmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dENvbnRyb2wuaCIKKyNpbmNsdWRl
IDxsaW1pdHM+CiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL1Jh
bmRvbU51bWJlci5oPgogCi0jaW5jbHVkZSA8bGltaXRzPgotCiAjaWYgUExBVEZPUk0oV1gpCiAj
aW5jbHVkZSA8d3gvZGVmcy5oPgogI2luY2x1ZGUgPHd4L2ZpbGVuYW1lLmg+CkBAIC01OCw2ICs1
OCw4IEBACiAjaW5jbHVkZSA8c2hsd2FwaS5oPgogI2VuZGlmCiAKK3VzaW5nIG5hbWVzcGFjZSBz
dGQ7CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsK
QEAgLTMxOSwxNCArMzIxLDE0IEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50OjpzdWJtaXQoRXZlbnQq
IGV2ZW4KICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBmaXJzdFN1Y2Nlc3NmdWxTdWJtaXRC
dXR0b24gPSAwOwogICAgIGJvb2wgbmVlZEJ1dHRvbkFjdGl2YXRpb24gPSBhY3RpdmF0ZVN1Ym1p
dEJ1dHRvbjsgLy8gZG8gd2UgbmVlZCB0byBhY3RpdmF0ZSBhIHN1Ym1pdCBidXR0b24/CiAgICAg
Ci0gICAgZnJhbWUtPmxvYWRlcigpLT5jbGVhclJlY29yZGVkRm9ybVZhbHVlcygpOwotICAgIGZy
YW1lLT5sb2FkZXIoKS0+c2V0Rm9ybUFib3V0VG9CZVN1Ym1pdHRlZCh0aGlzKTsKKyAgICBWZWN0
b3I8cGFpcjxTdHJpbmcsIFN0cmluZz4gPiBmb3JtVmFsdWVzOworCiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGZvcm1FbGVtZW50cy5zaXplKCk7ICsraSkgewogICAgICAgICBIVE1MRm9y
bUNvbnRyb2xFbGVtZW50KiBjb250cm9sID0gZm9ybUVsZW1lbnRzW2ldOwogICAgICAgICBpZiAo
Y29udHJvbC0+aGFzTG9jYWxOYW1lKGlucHV0VGFnKSkgewogICAgICAgICAgICAgSFRNTElucHV0
RWxlbWVudCogaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oY29udHJvbCk7
CiAgICAgICAgICAgICBpZiAoaW5wdXQtPmlzVGV4dEZpZWxkKCkpIHsKLSAgICAgICAgICAgICAg
ICBmcmFtZS0+bG9hZGVyKCktPnJlY29yZEZvcm1WYWx1ZShpbnB1dC0+bmFtZSgpLCBpbnB1dC0+
dmFsdWUoKSk7CisgICAgICAgICAgICAgICAgZm9ybVZhbHVlcy5hcHBlbmQocGFpcjxTdHJpbmcs
IFN0cmluZz4oaW5wdXQtPm5hbWUoKSwgaW5wdXQtPnZhbHVlKCkpKTsKICAgICAgICAgICAgICAg
ICBpZiAoaW5wdXQtPmlzU2VhcmNoRmllbGQoKSkKICAgICAgICAgICAgICAgICAgICAgaW5wdXQt
PmFkZFNlYXJjaFJlc3VsdCgpOwogICAgICAgICAgICAgfQpAQCAtMzM5LDYgKzM0MSw4IEBAIHZv
aWQgSFRNTEZvcm1FbGVtZW50OjpzdWJtaXQoRXZlbnQqIGV2ZW4KICAgICAgICAgfQogICAgIH0K
IAorICAgIFJlZlB0cjxGb3JtU3RhdGU+IGZvcm1TdGF0ZSA9IEZvcm1TdGF0ZTo6Y3JlYXRlKHRo
aXMsIGZvcm1WYWx1ZXMsIGZyYW1lKTsKKwogICAgIGlmIChuZWVkQnV0dG9uQWN0aXZhdGlvbiAm
JiBmaXJzdFN1Y2Nlc3NmdWxTdWJtaXRCdXR0b24pCiAgICAgICAgIGZpcnN0U3VjY2Vzc2Z1bFN1
Ym1pdEJ1dHRvbi0+c2V0QWN0aXZhdGVkU3VibWl0KHRydWUpOwogICAgIApAQCAtMzYxLDE0ICsz
NjUsMTQgQEAgdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnN1Ym1pdChFdmVudCogZXZlbgogICAgICAg
ICAgICAgICAgIG1fdXJsID0gdXJsLnN0cmluZygpOwogICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICBmcmFtZS0+bG9hZGVyKCktPnN1Ym1pdEZvcm0oIlBPU1QiLCBtX3VybCwgZGF0YS5yZWxl
YXNlKCksIG1fdGFyZ2V0LCBtX2Zvcm1EYXRhQnVpbGRlci5lbmNvZGluZ1R5cGUoKSwgU3RyaW5n
KCksIGV2ZW50LCBsb2NrSGlzdG9yeSwgbG9ja0JhY2tGb3J3YXJkTGlzdCk7CisgICAgICAgICAg
ICBmcmFtZS0+bG9hZGVyKCktPnN1Ym1pdEZvcm0oIlBPU1QiLCBtX3VybCwgZGF0YS5yZWxlYXNl
KCksIG1fdGFyZ2V0LCBtX2Zvcm1EYXRhQnVpbGRlci5lbmNvZGluZ1R5cGUoKSwgU3RyaW5nKCks
IGxvY2tIaXN0b3J5LCBsb2NrQmFja0ZvcndhcmRMaXN0LCBldmVudCwgZm9ybVN0YXRlLnJlbGVh
c2UoKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBWZWN0b3I8Y2hhcj4gYm91bmRh
cnkgPSBtX2Zvcm1EYXRhQnVpbGRlci5nZW5lcmF0ZVVuaXF1ZUJvdW5kYXJ5U3RyaW5nKCk7Ci0g
ICAgICAgICAgICBmcmFtZS0+bG9hZGVyKCktPnN1Ym1pdEZvcm0oIlBPU1QiLCBtX3VybCwgY3Jl
YXRlRm9ybURhdGEoYm91bmRhcnkuZGF0YSgpKSwgbV90YXJnZXQsIG1fZm9ybURhdGFCdWlsZGVy
LmVuY29kaW5nVHlwZSgpLCBib3VuZGFyeS5kYXRhKCksIGV2ZW50LCBsb2NrSGlzdG9yeSwgbG9j
a0JhY2tGb3J3YXJkTGlzdCk7CisgICAgICAgICAgICBmcmFtZS0+bG9hZGVyKCktPnN1Ym1pdEZv
cm0oIlBPU1QiLCBtX3VybCwgY3JlYXRlRm9ybURhdGEoYm91bmRhcnkuZGF0YSgpKSwgbV90YXJn
ZXQsIG1fZm9ybURhdGFCdWlsZGVyLmVuY29kaW5nVHlwZSgpLCBib3VuZGFyeS5kYXRhKCksIGxv
Y2tIaXN0b3J5LCBsb2NrQmFja0ZvcndhcmRMaXN0LCBldmVudCwgZm9ybVN0YXRlLnJlbGVhc2Uo
KSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBtX2Zvcm1EYXRhQnVpbGRlci5z
ZXRJc011bHRpUGFydEZvcm0oZmFsc2UpOwotICAgICAgICBmcmFtZS0+bG9hZGVyKCktPnN1Ym1p
dEZvcm0oIkdFVCIsIG1fdXJsLCBjcmVhdGVGb3JtRGF0YShDU3RyaW5nKCkpLCBtX3RhcmdldCwg
U3RyaW5nKCksIFN0cmluZygpLCBldmVudCwgbG9ja0hpc3RvcnksIGxvY2tCYWNrRm9yd2FyZExp
c3QpOworICAgICAgICBmcmFtZS0+bG9hZGVyKCktPnN1Ym1pdEZvcm0oIkdFVCIsIG1fdXJsLCBj
cmVhdGVGb3JtRGF0YShDU3RyaW5nKCkpLCBtX3RhcmdldCwgU3RyaW5nKCksIFN0cmluZygpLCBs
b2NrSGlzdG9yeSwgbG9ja0JhY2tGb3J3YXJkTGlzdCwgZXZlbnQsIGZvcm1TdGF0ZS5yZWxlYXNl
KCkpOwogICAgIH0KIAogICAgIGlmIChuZWVkQnV0dG9uQWN0aXZhdGlvbiAmJiBmaXJzdFN1Y2Nl
c3NmdWxTdWJtaXRCdXR0b24pCkluZGV4OiBXZWJDb3JlL2xvYWRlci9Gb3JtU3RhdGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0Zvcm1TdGF0ZS5jcHAJKHJldmlzaW9uIDQyMTQ2
KQorKysgV2ViQ29yZS9sb2FkZXIvRm9ybVN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0zNCwxNiArMzQsMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzUmVmUHRy
PEZvcm1TdGF0ZT4gRm9ybVN0YXRlOjpjcmVhdGUoUGFzc1JlZlB0cjxIVE1MRm9ybUVsZW1lbnQ+
IGZvcm0sIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiB2YWx1ZXMsIFBhc3NSZWZQdHI8
RnJhbWU+IHNvdXJjZUZyYW1lKQoraW5saW5lIEZvcm1TdGF0ZTo6Rm9ybVN0YXRlKFBhc3NSZWZQ
dHI8SFRNTEZvcm1FbGVtZW50PiBmb3JtLCBTdHJpbmdQYWlyVmVjdG9yJiB0ZXh0RmllbGRWYWx1
ZXNUb0Fkb3B0LCBQYXNzUmVmUHRyPEZyYW1lPiBzb3VyY2VGcmFtZSkKKyAgICA6IG1fZm9ybShm
b3JtKQorICAgICwgbV9zb3VyY2VGcmFtZShzb3VyY2VGcmFtZSkKIHsKLSAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEZvcm1TdGF0ZShmb3JtLCB2YWx1ZXMsIHNvdXJjZUZyYW1lKSk7CisgICAgbV90
ZXh0RmllbGRWYWx1ZXMuc3dhcCh0ZXh0RmllbGRWYWx1ZXNUb0Fkb3B0KTsKIH0KIAotRm9ybVN0
YXRlOjpGb3JtU3RhdGUoUGFzc1JlZlB0cjxIVE1MRm9ybUVsZW1lbnQ+IGZvcm0sIGNvbnN0IEhh
c2hNYXA8U3RyaW5nLCBTdHJpbmc+JiB2YWx1ZXMsIFBhc3NSZWZQdHI8RnJhbWU+IHNvdXJjZUZy
YW1lKQotICAgIDogbV9mb3JtKGZvcm0pCi0gICAgLCBtX3ZhbHVlcyh2YWx1ZXMpCi0gICAgLCBt
X3NvdXJjZUZyYW1lKHNvdXJjZUZyYW1lKQorUGFzc1JlZlB0cjxGb3JtU3RhdGU+IEZvcm1TdGF0
ZTo6Y3JlYXRlKFBhc3NSZWZQdHI8SFRNTEZvcm1FbGVtZW50PiBmb3JtLCBTdHJpbmdQYWlyVmVj
dG9yJiB0ZXh0RmllbGRWYWx1ZXNUb0Fkb3B0LCBQYXNzUmVmUHRyPEZyYW1lPiBzb3VyY2VGcmFt
ZSkKIHsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZvcm1TdGF0ZShmb3JtLCB0ZXh0RmllbGRW
YWx1ZXNUb0Fkb3B0LCBzb3VyY2VGcmFtZSkpOwogfQogCiB9CkluZGV4OiBXZWJDb3JlL2xvYWRl
ci9Gb3JtU3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9Gb3JtU3RhdGUuaAko
cmV2aXNpb24gNDIxNDYpCisrKyBXZWJDb3JlL2xvYWRlci9Gb3JtU3RhdGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYs
IDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0yOSwyOCArMjksMjggQEAKICNpZm5kZWYgRm9ybVN0YXRlX2gKICNk
ZWZpbmUgRm9ybVN0YXRlX2gKIAotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVk
ZSAiU3RyaW5nSGFzaC5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSAiUGxh
dGZvcm1TdHJpbmcuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgRnJhbWU7
CiAgICAgY2xhc3MgSFRNTEZvcm1FbGVtZW50OwogCisgICAgdHlwZWRlZiBWZWN0b3I8c3RkOjpw
YWlyPFN0cmluZywgU3RyaW5nPiA+IFN0cmluZ1BhaXJWZWN0b3I7CisKICAgICBjbGFzcyBGb3Jt
U3RhdGUgOiBwdWJsaWMgUmVmQ291bnRlZDxGb3JtU3RhdGU+IHsKICAgICBwdWJsaWM6Ci0gICAg
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4gY3JlYXRlKFBhc3NSZWZQdHI8SFRNTEZv
cm1FbGVtZW50PiBmb3JtLCBjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYgdmFsdWVzLCBQ
YXNzUmVmUHRyPEZyYW1lPiBzb3VyY2VGcmFtZSk7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEZvcm1TdGF0ZT4gY3JlYXRlKFBhc3NSZWZQdHI8SFRNTEZvcm1FbGVtZW50PiwgU3RyaW5nUGFp
clZlY3RvciYgdGV4dEZpZWxkVmFsdWVzVG9BZG9wdCwgUGFzc1JlZlB0cjxGcmFtZT4pOwogCiAg
ICAgICAgIEhUTUxGb3JtRWxlbWVudCogZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9ybS5nZXQo
KTsgfQotICAgICAgICBjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYgdmFsdWVzKCkgY29u
c3QgeyByZXR1cm4gbV92YWx1ZXM7IH0KKyAgICAgICAgY29uc3QgU3RyaW5nUGFpclZlY3RvciYg
dGV4dEZpZWxkVmFsdWVzKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0RmllbGRWYWx1ZXM7IH0KICAg
ICAgICAgRnJhbWUqIHNvdXJjZUZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VGcmFtZS5n
ZXQoKTsgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgRm9ybVN0YXRlKFBhc3NSZWZQdHI8SFRN
TEZvcm1FbGVtZW50PiBmb3JtLCBjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYgdmFsdWVz
LCBQYXNzUmVmUHRyPEZyYW1lPiBzb3VyY2VGcmFtZSk7CisgICAgICAgIEZvcm1TdGF0ZShQYXNz
UmVmUHRyPEhUTUxGb3JtRWxlbWVudD4sIFN0cmluZ1BhaXJWZWN0b3ImIHRleHRGaWVsZFZhbHVl
c1RvQWRvcHQsIFBhc3NSZWZQdHI8RnJhbWU+KTsKIAogICAgICAgICBSZWZQdHI8SFRNTEZvcm1F
bGVtZW50PiBtX2Zvcm07Ci0gICAgICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IG1fdmFsdWVz
OworICAgICAgICBTdHJpbmdQYWlyVmVjdG9yIG1fdGV4dEZpZWxkVmFsdWVzOwogICAgICAgICBS
ZWZQdHI8RnJhbWU+IG1fc291cmNlRnJhbWU7CiAgICAgfTsKIApJbmRleDogV2ViQ29yZS9sb2Fk
ZXIvRnJhbWVMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9h
ZGVyLmNwcAkocmV2aXNpb24gNDIxNDYpCisrKyBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE0Myw0NSArMTQzLDIyIEBAIHN0YXRpYyBVUkxTY2hlbWVz
TWFwJiBub0FjY2Vzc1NjaGVtZXMoKQogICAgIHJldHVybiBub0FjY2Vzc1NjaGVtZXM7CiB9CiAK
LXN0cnVjdCBGb3JtU3VibWlzc2lvbiB7Ci0gICAgRm9ybVN1Ym1pc3Npb24oY29uc3QgY2hhciog
YWN0aW9uLCBjb25zdCBTdHJpbmcmIHVybCwgUGFzc1JlZlB0cjxGb3JtRGF0YT4gZm9ybURhdGEs
Ci0gICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiB0YXJnZXQsIGNvbnN0IFN0cmluZyYg
Y29udGVudFR5cGUsIGNvbnN0IFN0cmluZyYgYm91bmRhcnksCi0gICAgICAgICAgICAgICAgICAg
UGFzc1JlZlB0cjxFdmVudD4gZXZlbnQsIGJvb2wgbG9ja0hpc3RvcnksIGJvb2wgbG9ja0JhY2tG
b3J3YXJkTGlzdCkKLSAgICAgICAgOiBhY3Rpb24oYWN0aW9uKQotICAgICAgICAsIHVybCh1cmwp
Ci0gICAgICAgICwgZm9ybURhdGEoZm9ybURhdGEpCi0gICAgICAgICwgdGFyZ2V0KHRhcmdldCkK
LSAgICAgICAgLCBjb250ZW50VHlwZShjb250ZW50VHlwZSkKLSAgICAgICAgLCBib3VuZGFyeShi
b3VuZGFyeSkKLSAgICAgICAgLCBldmVudChldmVudCkKLSAgICAgICAgLCBsb2NrSGlzdG9yeShs
b2NrSGlzdG9yeSkKLSAgICAgICAgLCBsb2NrQmFja0ZvcndhcmRMaXN0KGxvY2tCYWNrRm9yd2Fy
ZExpc3QpCi0gICAgewotICAgIH0KLQotICAgIGNvbnN0IGNoYXIqIGFjdGlvbjsKLSAgICBTdHJp
bmcgdXJsOwotICAgIFJlZlB0cjxGb3JtRGF0YT4gZm9ybURhdGE7Ci0gICAgU3RyaW5nIHRhcmdl
dDsKLSAgICBTdHJpbmcgY29udGVudFR5cGU7Ci0gICAgU3RyaW5nIGJvdW5kYXJ5OwotICAgIFJl
ZlB0cjxFdmVudD4gZXZlbnQ7Ci0gICAgYm9vbCBsb2NrSGlzdG9yeTsKLSAgICBib29sIGxvY2tC
YWNrRm9yd2FyZExpc3Q7Ci19OwotCiBzdHJ1Y3QgU2NoZWR1bGVkUmVkaXJlY3Rpb24gewotICAg
IGVudW0gVHlwZSB7IHJlZGlyZWN0aW9uLCBsb2NhdGlvbkNoYW5nZSwgaGlzdG9yeU5hdmlnYXRp
b24sIGxvY2F0aW9uQ2hhbmdlRHVyaW5nTG9hZCB9OworICAgIGVudW0gVHlwZSB7IHJlZGlyZWN0
aW9uLCBsb2NhdGlvbkNoYW5nZSwgaGlzdG9yeU5hdmlnYXRpb24sIGZvcm1TdWJtaXNzaW9uIH07
CiAKICAgICBjb25zdCBUeXBlIHR5cGU7CiAgICAgY29uc3QgZG91YmxlIGRlbGF5OwogICAgIGNv
bnN0IFN0cmluZyB1cmw7CiAgICAgY29uc3QgU3RyaW5nIHJlZmVycmVyOworICAgIGNvbnN0IEZy
YW1lTG9hZFJlcXVlc3QgZnJhbWVSZXF1ZXN0OworICAgIGNvbnN0IFJlZlB0cjxFdmVudD4gZXZl
bnQ7CisgICAgY29uc3QgUmVmUHRyPEZvcm1TdGF0ZT4gZm9ybVN0YXRlOwogICAgIGNvbnN0IGlu
dCBoaXN0b3J5U3RlcHM7CiAgICAgY29uc3QgYm9vbCBsb2NrSGlzdG9yeTsKICAgICBjb25zdCBi
b29sIGxvY2tCYWNrRm9yd2FyZExpc3Q7CiAgICAgY29uc3QgYm9vbCB3YXNVc2VyR2VzdHVyZTsK
ICAgICBjb25zdCBib29sIHdhc1JlZnJlc2g7CisgICAgY29uc3QgYm9vbCB3YXNEdXJpbmdMb2Fk
OwogCiAgICAgU2NoZWR1bGVkUmVkaXJlY3Rpb24oZG91YmxlIGRlbGF5LCBjb25zdCBTdHJpbmcm
IHVybCwgYm9vbCBsb2NrSGlzdG9yeSwgYm9vbCBsb2NrQmFja0ZvcndhcmRMaXN0LCBib29sIHdh
c1VzZXJHZXN0dXJlLCBib29sIHJlZnJlc2gpCiAgICAgICAgIDogdHlwZShyZWRpcmVjdGlvbikK
QEAgLTE5MiwxMiArMTY5LDEzIEBAIHN0cnVjdCBTY2hlZHVsZWRSZWRpcmVjdGlvbiB7CiAgICAg
ICAgICwgbG9ja0JhY2tGb3J3YXJkTGlzdChsb2NrQmFja0ZvcndhcmRMaXN0KQogICAgICAgICAs
IHdhc1VzZXJHZXN0dXJlKHdhc1VzZXJHZXN0dXJlKQogICAgICAgICAsIHdhc1JlZnJlc2gocmVm
cmVzaCkKKyAgICAgICAgLCB3YXNEdXJpbmdMb2FkKGZhbHNlKQogICAgIHsKICAgICAgICAgQVNT
RVJUKCF1cmwuaXNFbXB0eSgpKTsKICAgICB9CiAKLSAgICBTY2hlZHVsZWRSZWRpcmVjdGlvbihU
eXBlIGxvY2F0aW9uQ2hhbmdlVHlwZSwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYg
cmVmZXJyZXIsIGJvb2wgbG9ja0hpc3RvcnksIGJvb2wgbG9ja0JhY2tGb3J3YXJkTGlzdCwgYm9v
bCB3YXNVc2VyR2VzdHVyZSwgYm9vbCByZWZyZXNoKQotICAgICAgICA6IHR5cGUobG9jYXRpb25D
aGFuZ2VUeXBlKQorICAgIFNjaGVkdWxlZFJlZGlyZWN0aW9uKGNvbnN0IFN0cmluZyYgdXJsLCBj
b25zdCBTdHJpbmcmIHJlZmVycmVyLCBib29sIGxvY2tIaXN0b3J5LCBib29sIGxvY2tCYWNrRm9y
d2FyZExpc3QsIGJvb2wgd2FzVXNlckdlc3R1cmUsIGJvb2wgcmVmcmVzaCwgYm9vbCBkdXJpbmdM
b2FkKQorICAgICAgICA6IHR5cGUobG9jYXRpb25DaGFuZ2UpCiAgICAgICAgICwgZGVsYXkoMCkK
ICAgICAgICAgLCB1cmwodXJsKQogICAgICAgICAsIHJlZmVycmVyKHJlZmVycmVyKQpAQCAtMjA2
LDggKzE4NCw4IEBAIHN0cnVjdCBTY2hlZHVsZWRSZWRpcmVjdGlvbiB7CiAgICAgICAgICwgbG9j
a0JhY2tGb3J3YXJkTGlzdChsb2NrQmFja0ZvcndhcmRMaXN0KQogICAgICAgICAsIHdhc1VzZXJH
ZXN0dXJlKHdhc1VzZXJHZXN0dXJlKQogICAgICAgICAsIHdhc1JlZnJlc2gocmVmcmVzaCkKKyAg
ICAgICAgLCB3YXNEdXJpbmdMb2FkKGR1cmluZ0xvYWQpCiAgICAgewotICAgICAgICBBU1NFUlQo
bG9jYXRpb25DaGFuZ2VUeXBlID09IGxvY2F0aW9uQ2hhbmdlIHx8IGxvY2F0aW9uQ2hhbmdlVHlw
ZSA9PSBsb2NhdGlvbkNoYW5nZUR1cmluZ0xvYWQpOwogICAgICAgICBBU1NFUlQoIXVybC5pc0Vt
cHR5KCkpOwogICAgIH0KIApAQCAtMjE5LDcgKzE5NywyNyBAQCBzdHJ1Y3QgU2NoZWR1bGVkUmVk
aXJlY3Rpb24gewogICAgICAgICAsIGxvY2tCYWNrRm9yd2FyZExpc3QoZmFsc2UpCiAgICAgICAg
ICwgd2FzVXNlckdlc3R1cmUoZmFsc2UpCiAgICAgICAgICwgd2FzUmVmcmVzaChmYWxzZSkKKyAg
ICAgICAgLCB3YXNEdXJpbmdMb2FkKGZhbHNlKQorICAgIHsKKyAgICB9CisKKyAgICBTY2hlZHVs
ZWRSZWRpcmVjdGlvbihjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiBmcmFtZVJlcXVlc3QsCisgICAg
ICAgICAgICBib29sIGxvY2tIaXN0b3J5LCBib29sIGxvY2tCYWNrRm9yd2FyZExpc3QsIFBhc3NS
ZWZQdHI8RXZlbnQ+IGV2ZW50LCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4gZm9ybVN0YXRlLAorICAg
ICAgICAgICAgYm9vbCBkdXJpbmdMb2FkKQorICAgICAgICA6IHR5cGUoZm9ybVN1Ym1pc3Npb24p
CisgICAgICAgICwgZGVsYXkoMCkKKyAgICAgICAgLCBmcmFtZVJlcXVlc3QoZnJhbWVSZXF1ZXN0
KQorICAgICAgICAsIGV2ZW50KGV2ZW50KQorICAgICAgICAsIGZvcm1TdGF0ZShmb3JtU3RhdGUp
CisgICAgICAgICwgaGlzdG9yeVN0ZXBzKDApCisgICAgICAgICwgbG9ja0hpc3RvcnkobG9ja0hp
c3RvcnkpCisgICAgICAgICwgbG9ja0JhY2tGb3J3YXJkTGlzdChsb2NrQmFja0ZvcndhcmRMaXN0
KQorICAgICAgICAsIHdhc1VzZXJHZXN0dXJlKGZhbHNlKQorICAgICAgICAsIHdhc1JlZnJlc2go
ZmFsc2UpCisgICAgICAgICwgd2FzRHVyaW5nTG9hZChkdXJpbmdMb2FkKQogICAgIHsKKyAgICAg
ICAgQVNTRVJUKCFmcmFtZVJlcXVlc3QuaXNFbXB0eSgpKTsKKyAgICAgICAgQVNTRVJUKHRoaXMt
PmZvcm1TdGF0ZSk7CiAgICAgfQogfTsKIApAQCAtMzQ3LDcgKzM0NSw3IEBAIEZyYW1lKiBGcmFt
ZUxvYWRlcjo6Y3JlYXRlV2luZG93KEZyYW1lTG8KICAgICAgICAgRnJhbWUqIGZyYW1lID0gZnJh
bWVMb2FkZXJGb3JGcmFtZUxvb2t1cC0+ZnJhbWUoKS0+dHJlZSgpLT5maW5kKHJlcXVlc3QuZnJh
bWVOYW1lKCkpOwogICAgICAgICBpZiAoZnJhbWUgJiYgc2hvdWxkQWxsb3dOYXZpZ2F0aW9uKGZy
YW1lKSkgewogICAgICAgICAgICAgaWYgKCFyZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnVybCgp
LmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBmcmFtZS0+bG9hZGVyKCktPmxvYWRGcmFtZVJl
cXVlc3RXaXRoRm9ybUFuZFZhbHVlcyhyZXF1ZXN0LCBmYWxzZSwgZmFsc2UsIDAsIDAsIEhhc2hN
YXA8U3RyaW5nLCBTdHJpbmc+KCkpOworICAgICAgICAgICAgICAgIGZyYW1lLT5sb2FkZXIoKS0+
bG9hZEZyYW1lUmVxdWVzdChyZXF1ZXN0LCBmYWxzZSwgZmFsc2UsIDAsIDApOwogICAgICAgICAg
ICAgaWYgKFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpKQogICAgICAgICAgICAgICAgIHBhZ2Ut
PmNocm9tZSgpLT5mb2N1cygpOwogICAgICAgICAgICAgY3JlYXRlZCA9IGZhbHNlOwpAQCAtNDMy
LDcgKzQzMCw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6OnVybFNlbGVjdGVkKGNvbnN0IFJlc28KICAg
ICAgICAgZnJhbWVSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldEhUVFBSZWZlcnJlcihtX291
dGdvaW5nUmVmZXJyZXIpOwogICAgIGFkZEhUVFBPcmlnaW5JZk5lZWRlZChmcmFtZVJlcXVlc3Qu
cmVzb3VyY2VSZXF1ZXN0KCksIG91dGdvaW5nT3JpZ2luKCkpOwogCi0gICAgbG9hZEZyYW1lUmVx
dWVzdFdpdGhGb3JtQW5kVmFsdWVzKGZyYW1lUmVxdWVzdCwgbG9ja0hpc3RvcnksIGxvY2tCYWNr
Rm9yd2FyZExpc3QsIHRyaWdnZXJpbmdFdmVudCwgMCwgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4o
KSk7CisgICAgbG9hZEZyYW1lUmVxdWVzdChmcmFtZVJlcXVlc3QsIGxvY2tIaXN0b3J5LCBsb2Nr
QmFja0ZvcndhcmRMaXN0LCB0cmlnZ2VyaW5nRXZlbnQsIDApOwogfQogCiBib29sIEZyYW1lTG9h
ZGVyOjpyZXF1ZXN0RnJhbWUoSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lckVsZW1lbnQsIGNv
bnN0IFN0cmluZyYgdXJsU3RyaW5nLCBjb25zdCBBdG9taWNTdHJpbmcmIGZyYW1lTmFtZSkKQEAg
LTQ3OSw4ICs0NzcsNyBAQCBGcmFtZSogRnJhbWVMb2FkZXI6OmxvYWRTdWJmcmFtZShIVE1MRnJh
CiAgICAgfQogCiAgICAgYm9vbCBoaWRlUmVmZXJyZXIgPSBzaG91bGRIaWRlUmVmZXJyZXIodXJs
LCByZWZlcnJlcik7Ci0gICAgUmVmUHRyPEZyYW1lPiBmcmFtZSA9IG1fY2xpZW50LT5jcmVhdGVG
cmFtZSh1cmwsIG5hbWUsIG93bmVyRWxlbWVudCwgaGlkZVJlZmVycmVyID8gU3RyaW5nKCkgOiBy
ZWZlcnJlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dz
U2Nyb2xsaW5nLCBtYXJnaW5XaWR0aCwgbWFyZ2luSGVpZ2h0KTsKKyAgICBSZWZQdHI8RnJhbWU+
IGZyYW1lID0gbV9jbGllbnQtPmNyZWF0ZUZyYW1lKHVybCwgbmFtZSwgb3duZXJFbGVtZW50LCBo
aWRlUmVmZXJyZXIgPyBTdHJpbmcoKSA6IHJlZmVycmVyLCBhbGxvd3NTY3JvbGxpbmcsIG1hcmdp
bldpZHRoLCBtYXJnaW5IZWlnaHQpOwogCiAgICAgaWYgKCFmcmFtZSkgIHsKICAgICAgICAgY2hl
Y2tDYWxsSW1wbGljaXRDbG9zZSgpOwpAQCAtNTEwLDI3ICs1MDcsMjAgQEAgRnJhbWUqIEZyYW1l
TG9hZGVyOjpsb2FkU3ViZnJhbWUoSFRNTEZyYQogICAgIHJldHVybiBmcmFtZS5nZXQoKTsKIH0K
IAotdm9pZCBGcmFtZUxvYWRlcjo6c3VibWl0Rm9ybUFnYWluKCkKLXsKLSAgICBpZiAobV9pc1J1
bm5pbmdTY3JpcHQpCi0gICAgICAgIHJldHVybjsKLSAgICBPd25QdHI8Rm9ybVN1Ym1pc3Npb24+
IGZvcm0obV9kZWZlcnJlZEZvcm1TdWJtaXNzaW9uLnJlbGVhc2UoKSk7Ci0gICAgaWYgKCFmb3Jt
KQotICAgICAgICByZXR1cm47Ci0gICAgc3VibWl0Rm9ybShmb3JtLT5hY3Rpb24sIGZvcm0tPnVy
bCwgZm9ybS0+Zm9ybURhdGEsIGZvcm0tPnRhcmdldCwgZm9ybS0+Y29udGVudFR5cGUsIGZvcm0t
PmJvdW5kYXJ5LCBmb3JtLT5ldmVudC5nZXQoKSwgZm9ybS0+bG9ja0hpc3RvcnksIGZvcm0tPmxv
Y2tCYWNrRm9yd2FyZExpc3QpOwotfQotCiB2b2lkIEZyYW1lTG9hZGVyOjpzdWJtaXRGb3JtKGNv
bnN0IGNoYXIqIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB1cmwsIFBhc3NSZWZQdHI8Rm9ybURhdGE+
IGZvcm1EYXRhLAotICAgIGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBjb25zdCBTdHJpbmcmIGNvbnRl
bnRUeXBlLCBjb25zdCBTdHJpbmcmIGJvdW5kYXJ5LCBQYXNzUmVmUHRyPEV2ZW50PiBldmVudCwg
Ym9vbCBsb2NrSGlzdG9yeSwgYm9vbCBsb2NrQmFja0ZvcndhcmRMaXN0KQorICAgIGNvbnN0IFN0
cmluZyYgdGFyZ2V0LCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlLCBjb25zdCBTdHJpbmcmIGJv
dW5kYXJ5LAorICAgIGJvb2wgbG9ja0hpc3RvcnksIGJvb2wgbG9ja0JhY2tGb3J3YXJkTGlzdCwg
UGFzc1JlZlB0cjxFdmVudD4gZXZlbnQsIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPiBmb3JtU3RhdGUp
CiB7CisgICAgQVNTRVJUKGFjdGlvbik7CisgICAgQVNTRVJUKHN0cmNtcChhY3Rpb24sICJHRVQi
KSA9PSAwIHx8IHN0cmNtcChhY3Rpb24sICJQT1NUIikgPT0gMCk7CiAgICAgQVNTRVJUKGZvcm1E
YXRhKTsKKyAgICBBU1NFUlQoZm9ybVN0YXRlKTsKKyAgICBBU1NFUlQoZm9ybVN0YXRlLT5zb3Vy
Y2VGcmFtZSgpID09IG1fZnJhbWUpOwogICAgIAogICAgIGlmICghbV9mcmFtZS0+cGFnZSgpKQog
ICAgICAgICByZXR1cm47CiAgICAgCiAgICAgS1VSTCB1ID0gY29tcGxldGVVUkwodXJsLmlzTnVs
bCgpID8gIiIgOiB1cmwpOwotICAgIC8vIEZJWE1FOiBEbyB3ZSByZWFsbHkgbmVlZCB0byBzcGVj
aWFsLWNhc2UgYW4gZW1wdHkgVVJMPwotICAgIC8vIFdvdWxkIGl0IGJlIGJldHRlciB0byBqdXN0
IGdvIG9uIHdpdGggdGhlIGZvcm0gc3VibWlzc29uIGFuZCBsZXQgdGhlIEkvTyBmYWlsPwogICAg
IGlmICh1LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC01NDEsMjcgKzUzMSw0NSBA
QCB2b2lkIEZyYW1lTG9hZGVyOjpzdWJtaXRGb3JtKGNvbnN0IGNoYXIqCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBpZiAobV9pc1J1bm5pbmdTY3JpcHQpIHsKLSAgICAgICAgaWYgKG1f
ZGVmZXJyZWRGb3JtU3VibWlzc2lvbikKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9k
ZWZlcnJlZEZvcm1TdWJtaXNzaW9uLnNldChuZXcgRm9ybVN1Ym1pc3Npb24oYWN0aW9uLCB1cmws
IGZvcm1EYXRhLCB0YXJnZXQsIGNvbnRlbnRUeXBlLCBib3VuZGFyeSwgZXZlbnQsIGxvY2tIaXN0
b3J5LCBsb2NrQmFja0ZvcndhcmRMaXN0KSk7CisgICAgRnJhbWVMb2FkUmVxdWVzdCBmcmFtZVJl
cXVlc3Q7CisKKyAgICBTdHJpbmcgdGFyZ2V0T3JCYXNlVGFyZ2V0ID0gdGFyZ2V0LmlzRW1wdHko
KSA/IG1fZnJhbWUtPmRvY3VtZW50KCktPmJhc2VUYXJnZXQoKSA6IHRhcmdldDsKKyAgICBGcmFt
ZSogdGFyZ2V0RnJhbWUgPSBmaW5kRnJhbWVGb3JOYXZpZ2F0aW9uKHRhcmdldE9yQmFzZVRhcmdl
dCk7CisgICAgaWYgKCF0YXJnZXRGcmFtZSkgeworICAgICAgICB0YXJnZXRGcmFtZSA9IG1fZnJh
bWU7CisgICAgICAgIGZyYW1lUmVxdWVzdC5zZXRGcmFtZU5hbWUodGFyZ2V0T3JCYXNlVGFyZ2V0
KTsKKyAgICB9CisgICAgaWYgKCF0YXJnZXRGcmFtZS0+cGFnZSgpKQogICAgICAgICByZXR1cm47
CisKKyAgICAvLyBGSVhNRTogV2UnZCBsaWtlIHRvIHJlbW92ZSB0aGlzIGFsdG9nZXRoZXIgYW5k
IGZpeCB0aGUgbXVsdGlwbGUgZm9ybSBzdWJtaXNzaW9uIGlzc3VlIGFub3RoZXIgd2F5LgorCisg
ICAgLy8gV2UgZG8gbm90IHdhbnQgdG8gc3VibWl0IG1vcmUgdGhhbiBvbmUgZm9ybSBmcm9tIHRo
ZSBzYW1lIHBhZ2UsIG5vciBkbyB3ZSB3YW50IHRvIHN1Ym1pdCBhIHNpbmdsZQorICAgIC8vIGZv
cm0gbW9yZSB0aGFuIG9uY2UuIFRoaXMgZmxhZyBwcmV2ZW50cyB0aGVzZSBmcm9tIGhhcHBlbmlu
Zzsgbm90IHN1cmUgaG93IG90aGVyIGJyb3dzZXJzIHByZXZlbnQgdGhpcy4KKyAgICAvLyBUaGUg
ZmxhZyBpcyByZXNldCBpbiBlYWNoIHRpbWUgd2Ugc3RhcnQgaGFuZGxlIGEgbmV3IG1vdXNlIG9y
IGtleSBkb3duIGV2ZW50LCBhbmQKKyAgICAvLyBhbHNvIGluIHNldFZpZXcgc2luY2UgdGhpcyBw
YXJ0IG1heSBnZXQgcmV1c2VkIGZvciBhIHBhZ2UgZnJvbSB0aGUgYmFjay9mb3J3YXJkIGNhY2hl
LgorICAgIC8vIFRoZSBmb3JtIG11bHRpLXN1Ym1pdCBsb2dpYyBoZXJlIGlzIG9ubHkgbmVlZGVk
IHdoZW4gd2UgYXJlIHN1Ym1pdHRpbmcgYSBmb3JtIHRoYXQgYWZmZWN0cyB0aGlzIGZyYW1lLgor
CisgICAgLy8gRklYTUU6IEZyYW1lIHRhcmdldGluZyBpcyBvbmx5IG9uZSBvZiB0aGUgd2F5cyB0
aGUgc3VibWlzc2lvbiBjb3VsZCBlbmQgdXAgZG9pbmcgc29tZXRoaW5nIG90aGVyCisgICAgLy8g
dGhhbiByZXBsYWNpbmcgdGhpcyBmcmFtZSdzIGNvbnRlbnQsIHNvIHRoaXMgY2hlY2sgaXMgZmxh
d2VkLiBPbiB0aGUgb3RoZXIgaGFuZCwgdGhlIGNoZWNrIGlzIGhhcmRseQorICAgIC8vIG5lZWRl
ZCBhbnkgbW9yZSBub3cgdGhhdCB3ZSByZXNldCBtX3N1Ym1pdHRlZEZvcm1VUkwgb24gZWFjaCBt
b3VzZSBvciBrZXkgZG93biBldmVudC4KKworICAgIGlmIChtX2ZyYW1lLT50cmVlKCktPmlzRGVz
Y2VuZGFudE9mKHRhcmdldEZyYW1lKSkgeworICAgICAgICBpZiAobV9zdWJtaXR0ZWRGb3JtVVJM
ID09IHUpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fc3VibWl0dGVkRm9ybVVSTCA9
IHU7CiAgICAgfQogCiAgICAgZm9ybURhdGEtPmdlbmVyYXRlRmlsZXMobV9mcmFtZS0+cGFnZSgp
LT5jaHJvbWUoKS0+Y2xpZW50KCkpOwogICAgIAotICAgIEZyYW1lTG9hZFJlcXVlc3QgZnJhbWVS
ZXF1ZXN0OwotCiAgICAgaWYgKCFtX291dGdvaW5nUmVmZXJyZXIuaXNFbXB0eSgpKQogICAgICAg
ICBmcmFtZVJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0SFRUUFJlZmVycmVyKG1fb3V0Z29p
bmdSZWZlcnJlcik7CiAKLSAgICBmcmFtZVJlcXVlc3Quc2V0RnJhbWVOYW1lKHRhcmdldC5pc0Vt
cHR5KCkgPyBtX2ZyYW1lLT5kb2N1bWVudCgpLT5iYXNlVGFyZ2V0KCkgOiB0YXJnZXQpOwotCiAg
ICAgaWYgKHN0cmNtcChhY3Rpb24sICJHRVQiKSA9PSAwKQogICAgICAgICB1LnNldFF1ZXJ5KGZv
cm1EYXRhLT5mbGF0dGVuVG9TdHJpbmcoKSk7CiAgICAgZWxzZSB7CiAgICAgICAgIGZyYW1lUmVx
dWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRIVFRQTWV0aG9kKCJQT1NUIik7Ci0gICAgICAgIGZy
YW1lUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRIVFRQQm9keShmb3JtRGF0YS5nZXQoKSk7
CisgICAgICAgIGZyYW1lUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRIVFRQQm9keShmb3Jt
RGF0YSk7CiAKICAgICAgICAgLy8gY29uc3RydWN0IHNvbWUgdXNlciBoZWFkZXJzIGlmIG5lY2Vz
c2FyeQogICAgICAgICBpZiAoY29udGVudFR5cGUuaXNOdWxsKCkgfHwgY29udGVudFR5cGUgPT0g
ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpCkBAIC01NzMsNyArNTgxLDIxIEBA
IHZvaWQgRnJhbWVMb2FkZXI6OnN1Ym1pdEZvcm0oY29uc3QgY2hhcioKICAgICBmcmFtZVJlcXVl
c3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0VVJMKHUpOwogICAgIGFkZEhUVFBPcmlnaW5JZk5lZWRl
ZChmcmFtZVJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCksIG91dGdvaW5nT3JpZ2luKCkpOwogCi0g
ICAgc3VibWl0Rm9ybShmcmFtZVJlcXVlc3QsIGV2ZW50LCBsb2NrSGlzdG9yeSwgbG9ja0JhY2tG
b3J3YXJkTGlzdCk7CisgICAgLy8gTmF2aWdhdGlvbiBvZiBhIHN1YmZyYW1lIGR1cmluZyBsb2Fk
aW5nIG9mIHRoZSBtYWluIGZyYW1lIGRvZXMgbm90IGNyZWF0ZSBhIG5ldyBiYWNrL2ZvcndhcmQg
aXRlbS4KKyAgICAvLyBTdHJhbmdlbHksIHdlIG9ubHkgaW1wbGVtZW50IHRoaXMgcnVsZSBmb3Ig
Zm9ybSBzdWJtaXNzaW9uOyB0aW1lIHdpbGwgdGVsbCBpZiB3ZSBuZWVkIGl0IGZvciBvdGhlciB0
eXBlcyBvZiBuYXZpZ2F0aW9uLgorICAgIC8vIFRoZSBkZWZpbml0aW9uIG9mICJkdXJpbmcgbG9h
ZCIgaXMgYW55IHRpbWUgYmVmb3JlIHRoZSBsb2FkIGV2ZW50IGhhcyBiZWVuIGhhbmRsZWQuCisg
ICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDk1NyBm
b3IgdGhlIG9yaWdpbmFsIG1vdGl2YXRpb24gZm9yIHRoaXMuCisgICAgaWYgKFBhZ2UqIHRhcmdl
dFBhZ2UgPSB0YXJnZXRGcmFtZS0+cGFnZSgpKSB7CisgICAgICAgIEZyYW1lKiBtYWluRnJhbWUg
PSB0YXJnZXRQYWdlLT5tYWluRnJhbWUoKTsKKyAgICAgICAgaWYgKG1haW5GcmFtZSAhPSB0YXJn
ZXRGcmFtZSkgeworICAgICAgICAgICAgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lciA9IHRh
cmdldEZyYW1lLT5vd25lckVsZW1lbnQoKTsKKyAgICAgICAgICAgIERvY3VtZW50KiBkb2N1bWVu
dCA9IG1haW5GcmFtZS0+ZG9jdW1lbnQoKTsKKyAgICAgICAgICAgIGlmIChvd25lciAmJiAhb3du
ZXItPmNyZWF0ZWRCeVBhcnNlcigpICYmICghbWFpbkZyYW1lLT5sb2FkZXIoKS0+aXNDb21wbGV0
ZSgpIHx8IGRvY3VtZW50ICYmIGRvY3VtZW50LT5wcm9jZXNzaW5nTG9hZEV2ZW50KCkpKQorICAg
ICAgICAgICAgICAgIGxvY2tCYWNrRm9yd2FyZExpc3QgPSB0cnVlOworICAgICAgICB9CisgICAg
fQorCisgICAgdGFyZ2V0RnJhbWUtPmxvYWRlcigpLT5zY2hlZHVsZUZvcm1TdWJtaXNzaW9uKGZy
YW1lUmVxdWVzdCwgbG9ja0hpc3RvcnksIGxvY2tCYWNrRm9yd2FyZExpc3QsIGV2ZW50LCBmb3Jt
U3RhdGUpOwogfQogCiB2b2lkIEZyYW1lTG9hZGVyOjpzdG9wTG9hZGluZyhib29sIHNlbmRVbmxv
YWQpCkBAIC02ODQsMTAgKzcwNiwxMSBAQCBLVVJMIEZyYW1lTG9hZGVyOjppY29uVVJMKCkKIAog
Ym9vbCBGcmFtZUxvYWRlcjo6ZGlkT3BlblVSTChjb25zdCBLVVJMJiB1cmwpCiB7Ci0gICAgaWYg
KG1fc2NoZWR1bGVkUmVkaXJlY3Rpb24gJiYgbV9zY2hlZHVsZWRSZWRpcmVjdGlvbi0+dHlwZSA9
PSBTY2hlZHVsZWRSZWRpcmVjdGlvbjo6bG9jYXRpb25DaGFuZ2VEdXJpbmdMb2FkKQorICAgIGlm
IChtX3NjaGVkdWxlZFJlZGlyZWN0aW9uICYmIG1fc2NoZWR1bGVkUmVkaXJlY3Rpb24tPndhc0R1
cmluZ0xvYWQpIHsKICAgICAgICAgLy8gQSByZWRpcmVjdCB3YXMgc2NoZWR1bGVkIGJlZm9yZSB0
aGUgZG9jdW1lbnQgd2FzIGNyZWF0ZWQuCiAgICAgICAgIC8vIFRoaXMgY2FuIGhhcHBlbiB3aGVu
IG9uZSBmcmFtZSBjaGFuZ2VzIGFub3RoZXIgZnJhbWUncyBsb2NhdGlvbi4KICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KIAogICAgIGNhbmNlbFJlZGlyZWN0aW9uKCk7CiAgICAgbV9mcmFt
ZS0+ZWRpdG9yKCktPmNsZWFyTGFzdEVkaXRDb21tYW5kKCk7CkBAIC03NzUsNyArNzk4LDYgQEAg
U2NyaXB0VmFsdWUgRnJhbWVMb2FkZXI6OmV4ZWN1dGVTY3JpcHQoYwogCiAgICAgaWYgKCF3YXNS
dW5uaW5nU2NyaXB0KSB7CiAgICAgICAgIG1faXNSdW5uaW5nU2NyaXB0ID0gZmFsc2U7Ci0gICAg
ICAgIHN1Ym1pdEZvcm1BZ2FpbigpOwogICAgICAgICBEb2N1bWVudDo6dXBkYXRlRG9jdW1lbnRz
UmVuZGVyaW5nKCk7CiAgICAgfQogCkBAIC0xMzQ5LDE4ICsxMzcxLDIzIEBAIHZvaWQgRnJhbWVM
b2FkZXI6OnNjaGVkdWxlTG9jYXRpb25DaGFuZ2UKICAgICAvLyBUaGlzIG1heSBoYXBwZW4gd2hl
biBhIGZyYW1lIGNoYW5nZXMgdGhlIGxvY2F0aW9uIG9mIGFub3RoZXIgZnJhbWUuCiAgICAgYm9v
bCBkdXJpbmdMb2FkID0gIW1fY29tbWl0dGVkRmlyc3RSZWFsRG9jdW1lbnRMb2FkOwogCi0gICAg
Ly8gSWYgYSByZWRpcmVjdCB3YXMgc2NoZWR1bGVkIGR1cmluZyBhIGxvYWQsIHRoZW4gc3RvcCB0
aGUgY3VycmVudCBsb2FkLgotICAgIC8vIE90aGVyd2lzZSB3aGVuIHRoZSBjdXJyZW50IGxvYWQg
dHJhbnNpdGlvbnMgZnJvbSBhIHByb3Zpc2lvbmFsIHRvIGEgCi0gICAgLy8gY29tbWl0dGVkIHN0
YXRlLCBwZW5kaW5nIHJlZGlyZWN0cyBtYXkgYmUgY2FuY2VsbGVkLiAKLSAgICBpZiAoZHVyaW5n
TG9hZCkgewotICAgICAgICBpZiAobV9wcm92aXNpb25hbERvY3VtZW50TG9hZGVyKQotICAgICAg
ICAgICAgbV9wcm92aXNpb25hbERvY3VtZW50TG9hZGVyLT5zdG9wTG9hZGluZygpOwotICAgICAg
ICBzdG9wTG9hZGluZyh0cnVlKTsgICAKLSAgICB9CisgICAgc2NoZWR1bGVSZWRpcmVjdGlvbihu
ZXcgU2NoZWR1bGVkUmVkaXJlY3Rpb24odXJsLCByZWZlcnJlciwgbG9ja0hpc3RvcnksIGxvY2tC
YWNrRm9yd2FyZExpc3QsIHdhc1VzZXJHZXN0dXJlLCBmYWxzZSwgZHVyaW5nTG9hZCkpOworfQor
Cit2b2lkIEZyYW1lTG9hZGVyOjpzY2hlZHVsZUZvcm1TdWJtaXNzaW9uKGNvbnN0IEZyYW1lTG9h
ZFJlcXVlc3QmIGZyYW1lUmVxdWVzdCwKKyAgICBib29sIGxvY2tIaXN0b3J5LCBib29sIGxvY2tC
YWNrRm9yd2FyZExpc3QsIFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50LCBQYXNzUmVmUHRyPEZvcm1T
dGF0ZT4gZm9ybVN0YXRlKQoreworICAgIEFTU0VSVChtX2ZyYW1lLT5wYWdlKCkpOworICAgIEFT
U0VSVCghZnJhbWVSZXF1ZXN0LmlzRW1wdHkoKSk7CisKKyAgICAvLyBGSVhNRTogRG8gd2UgbmVl
ZCBzcGVjaWFsIGhhbmRsaW5nIGZvciBmb3JtIHN1Ym1pc3Npb25zIHdoZXJlIHRoZSBVUkwgaXMg
dGhlIHNhbWUKKyAgICAvLyBhcyB0aGUgY3VycmVudCBvbmUgZXhjZXB0IGZvciB0aGUgZnJhZ21l
bnQgcGFydD8gU2VlIHNjaGVkdWxlTG9jYXRpb25DaGFuZ2UgYWJvdmUuCisKKyAgICAvLyBIYW5k
bGUgYSBsb2NhdGlvbiBjaGFuZ2Ugb2YgYSBwYWdlIHdpdGggbm8gZG9jdW1lbnQgYXMgYSBzcGVj
aWFsIGNhc2UuCisgICAgLy8gVGhpcyBtYXkgaGFwcGVuIHdoZW4gYSBmcmFtZSBjaGFuZ2VzIHRo
ZSBsb2NhdGlvbiBvZiBhbm90aGVyIGZyYW1lLgorICAgIGJvb2wgZHVyaW5nTG9hZCA9ICFtX2Nv
bW1pdHRlZEZpcnN0UmVhbERvY3VtZW50TG9hZDsKIAotICAgIFNjaGVkdWxlZFJlZGlyZWN0aW9u
OjpUeXBlIHR5cGUgPSBkdXJpbmdMb2FkCi0gICAgICAgID8gU2NoZWR1bGVkUmVkaXJlY3Rpb246
OmxvY2F0aW9uQ2hhbmdlRHVyaW5nTG9hZCA6IFNjaGVkdWxlZFJlZGlyZWN0aW9uOjpsb2NhdGlv
bkNoYW5nZTsKLSAgICBzY2hlZHVsZVJlZGlyZWN0aW9uKG5ldyBTY2hlZHVsZWRSZWRpcmVjdGlv
bih0eXBlLCB1cmwsIHJlZmVycmVyLCBsb2NrSGlzdG9yeSwgbG9ja0JhY2tGb3J3YXJkTGlzdCwg
d2FzVXNlckdlc3R1cmUsIGZhbHNlKSk7CisgICAgc2NoZWR1bGVSZWRpcmVjdGlvbihuZXcgU2No
ZWR1bGVkUmVkaXJlY3Rpb24oZnJhbWVSZXF1ZXN0LCBsb2NrSGlzdG9yeSwgbG9ja0JhY2tGb3J3
YXJkTGlzdCwgZXZlbnQsIGZvcm1TdGF0ZSwgZHVyaW5nTG9hZCkpOwogfQogCiB2b2lkIEZyYW1l
TG9hZGVyOjpzY2hlZHVsZVJlZnJlc2goYm9vbCB3YXNVc2VyR2VzdHVyZSkKQEAgLTEzNzEsOCAr
MTM5OCw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6OnNjaGVkdWxlUmVmcmVzaChib29sIHcKICAgICBp
ZiAobV9VUkwuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBTY2hlZHVsZWRSZWRp
cmVjdGlvbjo6VHlwZSB0eXBlID0gU2NoZWR1bGVkUmVkaXJlY3Rpb246OmxvY2F0aW9uQ2hhbmdl
OwotICAgIHNjaGVkdWxlUmVkaXJlY3Rpb24obmV3IFNjaGVkdWxlZFJlZGlyZWN0aW9uKHR5cGUs
IG1fVVJMLnN0cmluZygpLCBtX291dGdvaW5nUmVmZXJyZXIsIHRydWUsIHRydWUsIHdhc1VzZXJH
ZXN0dXJlLCB0cnVlKSk7CisgICAgc2NoZWR1bGVSZWRpcmVjdGlvbihuZXcgU2NoZWR1bGVkUmVk
aXJlY3Rpb24obV9VUkwuc3RyaW5nKCksIG1fb3V0Z29pbmdSZWZlcnJlciwgdHJ1ZSwgdHJ1ZSwg
d2FzVXNlckdlc3R1cmUsIHRydWUsIGZhbHNlKSk7CiB9CiAKIGJvb2wgRnJhbWVMb2FkZXI6Omlz
TG9jYXRpb25DaGFuZ2UoY29uc3QgU2NoZWR1bGVkUmVkaXJlY3Rpb24mIHJlZGlyZWN0aW9uKQpA
QCAtMTM4Miw3ICsxNDA4LDcgQEAgYm9vbCBGcmFtZUxvYWRlcjo6aXNMb2NhdGlvbkNoYW5nZShj
b25zdAogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBjYXNlIFNjaGVkdWxlZFJl
ZGlyZWN0aW9uOjpoaXN0b3J5TmF2aWdhdGlvbjoKICAgICAgICAgY2FzZSBTY2hlZHVsZWRSZWRp
cmVjdGlvbjo6bG9jYXRpb25DaGFuZ2U6Ci0gICAgICAgIGNhc2UgU2NoZWR1bGVkUmVkaXJlY3Rp
b246OmxvY2F0aW9uQ2hhbmdlRHVyaW5nTG9hZDoKKyAgICAgICAgY2FzZSBTY2hlZHVsZWRSZWRp
cmVjdGlvbjo6Zm9ybVN1Ym1pc3Npb246CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xNDU0LDggKzE0ODAsNyBAQCB2b2lkIEZy
YW1lTG9hZGVyOjpyZWRpcmVjdGlvblRpbWVyRmlyZWQoCiAgICAgc3dpdGNoIChyZWRpcmVjdGlv
bi0+dHlwZSkgewogICAgICAgICBjYXNlIFNjaGVkdWxlZFJlZGlyZWN0aW9uOjpyZWRpcmVjdGlv
bjoKICAgICAgICAgY2FzZSBTY2hlZHVsZWRSZWRpcmVjdGlvbjo6bG9jYXRpb25DaGFuZ2U6Ci0g
ICAgICAgIGNhc2UgU2NoZWR1bGVkUmVkaXJlY3Rpb246OmxvY2F0aW9uQ2hhbmdlRHVyaW5nTG9h
ZDoKLSAgICAgICAgICAgIGNoYW5nZUxvY2F0aW9uKGNvbXBsZXRlVVJMKHJlZGlyZWN0aW9uLT51
cmwpLCByZWRpcmVjdGlvbi0+cmVmZXJyZXIsCisgICAgICAgICAgICBjaGFuZ2VMb2NhdGlvbihL
VVJMKHJlZGlyZWN0aW9uLT51cmwpLCByZWRpcmVjdGlvbi0+cmVmZXJyZXIsCiAgICAgICAgICAg
ICAgICAgcmVkaXJlY3Rpb24tPmxvY2tIaXN0b3J5LCByZWRpcmVjdGlvbi0+bG9ja0JhY2tGb3J3
YXJkTGlzdCwgcmVkaXJlY3Rpb24tPndhc1VzZXJHZXN0dXJlLCByZWRpcmVjdGlvbi0+d2FzUmVm
cmVzaCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNhc2UgU2NoZWR1bGVkUmVkaXJl
Y3Rpb246Omhpc3RvcnlOYXZpZ2F0aW9uOgpAQCAtMTQ2OCwxNyArMTQ5MywyMSBAQCB2b2lkIEZy
YW1lTG9hZGVyOjpyZWRpcmVjdGlvblRpbWVyRmlyZWQoCiAgICAgICAgICAgICAvLyBpbiBib3Ro
IElFIGFuZCBOUyAoYnV0IG5vdCBpbiBNb3ppbGxhKS4gV2UgY2FuJ3QgZWFzaWx5IGRvIHRoYXQu
CiAgICAgICAgICAgICBnb0JhY2tPckZvcndhcmQocmVkaXJlY3Rpb24tPmhpc3RvcnlTdGVwcyk7
CiAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgU2NoZWR1bGVkUmVkaXJlY3Rpb246
OmZvcm1TdWJtaXNzaW9uOgorICAgICAgICAgICAgLy8gc3VibWl0Rm9ybSB3aWxsIGZpbmQgYSB0
YXJnZXQgZnJhbWUgYmVmb3JlIHVzaW5nIHRoZSByZWRpcmVjdGlvbiB0aW1lci4KKyAgICAgICAg
ICAgIC8vIE5vdyB0aGF0IHRoZSB0aW1lciBoYXMgZmlyZWQsIHdlIG5lZWQgdG8gcmVwZWF0IHRo
ZSBzZWN1cml0eSBjaGVjayB3aGljaCBub3JtYWxseSBpcyBkb25lIHdoZW4KKyAgICAgICAgICAg
IC8vIHNlbGVjdGluZyBhIHRhcmdldCBpbiBjYXNlIGNvbmRpdGlvbnMgaGF2ZSBjaGFuZ2VkLiBP
dGhlciBjb2RlIHBhdGhzIGF2b2lkIHRoaXMgYnkgdGFyZ2V0aW5nCisgICAgICAgICAgICAvLyB3
aXRob3V0IGxlYXZpbmcgYSB0aW1lIHdpbmRvdy4gSWYgd2UgZmFpbCB0aGUgY2hlY2sgdGhlbiBq
dXN0IHNpbGVudGx5IGRyb3AgdGhlIGZvcm0gc3VibWlzc2lvbi4KKyAgICAgICAgICAgIGlmICgh
cmVkaXJlY3Rpb24tPmZvcm1TdGF0ZS0+c291cmNlRnJhbWUoKS0+bG9hZGVyKCktPnNob3VsZEFs
bG93TmF2aWdhdGlvbihtX2ZyYW1lKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICBsb2FkRnJhbWVSZXF1ZXN0KHJlZGlyZWN0aW9uLT5mcmFtZVJlcXVlc3QsIHJlZGlyZWN0
aW9uLT5sb2NrSGlzdG9yeSwgcmVkaXJlY3Rpb24tPmxvY2tCYWNrRm9yd2FyZExpc3QsCisgICAg
ICAgICAgICAgICAgcmVkaXJlY3Rpb24tPmV2ZW50LCByZWRpcmVjdGlvbi0+Zm9ybVN0YXRlKTsK
KyAgICAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
IH0KIAotLyoKLSAgICBJbiB0aGUgY2FzZSBvZiBzYXZpbmcgc3RhdGUgYWJvdXQgYSBwYWdlIHdp
dGggZnJhbWVzLCB3ZSBzdG9yZSBhIHRyZWUgb2YgaXRlbXMgdGhhdCBtaXJyb3JzIHRoZSBmcmFt
ZSB0cmVlLiAgCi0gICAgVGhlIGl0ZW0gdGhhdCB3YXMgdGhlIHRhcmdldCBvZiB0aGUgdXNlcidz
IG5hdmlnYXRpb24gaXMgZGVzaWduYXRlZCBhcyB0aGUgInRhcmdldEl0ZW0iLiAgCi0gICAgV2hl
biB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgd2l0aCBkb0NsaXA9WUVTIHdlJ3JlIGFibGUgdG8gY3Jl
YXRlIHRoZSB3aG9sZSB0cmVlIGV4Y2VwdCBmb3IgdGhlIHRhcmdldCdzIGNoaWxkcmVuLCAKLSAg
ICB3aGljaCB3aWxsIGJlIGxvYWRlZCBpbiB0aGUgZnV0dXJlLiAgVGhhdCBwYXJ0IG9mIHRoZSB0
cmVlIHdpbGwgYmUgZmlsbGVkIG91dCBhcyB0aGUgY2hpbGQgbG9hZHMgYXJlIGNvbW1pdHRlZC4K
LSovCiB2b2lkIEZyYW1lTG9hZGVyOjpsb2FkVVJMSW50b0NoaWxkRnJhbWUoY29uc3QgS1VSTCYg
dXJsLCBjb25zdCBTdHJpbmcmIHJlZmVyZXIsIEZyYW1lKiBjaGlsZEZyYW1lKQogewogICAgIEFT
U0VSVChjaGlsZEZyYW1lKTsKQEAgLTE0OTIsNyArMTUyMSw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6
OmxvYWRVUkxJbnRvQ2hpbGRGcmFtZSgKICAgICAvLyBJZiB3ZSdyZSBtb3ZpbmcgaW4gdGhlIGJh
Y2svZm9yd2FyZCBsaXN0LCB3ZSBtaWdodCB3YW50IHRvIHJlcGxhY2UgdGhlIGNvbnRlbnQKICAg
ICAvLyBvZiB0aGlzIGNoaWxkIGZyYW1lIHdpdGggd2hhdGV2ZXIgd2FzIHRoZXJlIGF0IHRoYXQg
cG9pbnQuCiAgICAgaWYgKHBhcmVudEl0ZW0gJiYgcGFyZW50SXRlbS0+Y2hpbGRyZW4oKS5zaXpl
KCkgJiYgaXNCYWNrRm9yd2FyZExvYWRUeXBlKGxvYWRUeXBlKSkgewotICAgICAgICBIaXN0b3J5
SXRlbSogY2hpbGRJdGVtID0gcGFyZW50SXRlbS0+Y2hpbGRJdGVtV2l0aE5hbWUoY2hpbGRGcmFt
ZS0+dHJlZSgpLT5uYW1lKCkpOworICAgICAgICAgICAgICAgIEhpc3RvcnlJdGVtKiBjaGlsZEl0
ZW0gPSBwYXJlbnRJdGVtLT5jaGlsZEl0ZW1XaXRoVGFyZ2V0KGNoaWxkRnJhbWUtPnRyZWUoKS0+
bmFtZSgpKTsKICAgICAgICAgaWYgKGNoaWxkSXRlbSkgewogICAgICAgICAgICAgLy8gVXNlIHRo
ZSBvcmlnaW5hbCBVUkwgdG8gZW5zdXJlIHdlIGdldCBhbGwgdGhlIHNpZGUtZWZmZWN0cywgc3Vj
aCBhcwogICAgICAgICAgICAgLy8gb25Mb2FkIGhhbmRsZXJzLCBvZiBhbnkgcmVkaXJlY3RzIHRo
YXQgaGFwcGVuZWQuIEFuIGV4YW1wbGUgb2Ygd2hlcmUKQEAgLTE2OTgsMjIgKzE3MjcsNiBAQCBi
b29sIEZyYW1lTG9hZGVyOjpsb2FkUGx1Z2luKFJlbmRlclBhcnQqCiAgICAgcmV0dXJuIHdpZGdl
dCAhPSAwOwogfQogCi12b2lkIEZyYW1lTG9hZGVyOjpjbGVhclJlY29yZGVkRm9ybVZhbHVlcygp
Ci17Ci0gICAgbV9mb3JtQWJvdXRUb0JlU3VibWl0dGVkID0gMDsKLSAgICBtX2Zvcm1WYWx1ZXNB
Ym91dFRvQmVTdWJtaXR0ZWQuY2xlYXIoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlcjo6c2V0Rm9y
bUFib3V0VG9CZVN1Ym1pdHRlZChQYXNzUmVmUHRyPEhUTUxGb3JtRWxlbWVudD4gZWxlbWVudCkK
LXsKLSAgICBtX2Zvcm1BYm91dFRvQmVTdWJtaXR0ZWQgPSBlbGVtZW50OwotfQotCi12b2lkIEZy
YW1lTG9hZGVyOjpyZWNvcmRGb3JtVmFsdWUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJp
bmcmIHZhbHVlKQotewotICAgIG1fZm9ybVZhbHVlc0Fib3V0VG9CZVN1Ym1pdHRlZC5zZXQobmFt
ZSwgdmFsdWUpOwotfQotCiB2b2lkIEZyYW1lTG9hZGVyOjpwYXJlbnRDb21wbGV0ZWQoKQogewog
ICAgIGlmIChtX3NjaGVkdWxlZFJlZGlyZWN0aW9uICYmICFtX3JlZGlyZWN0aW9uVGltZXIuaXNB
Y3RpdmUoKSkKQEAgLTE3NjgsMTcgKzE3ODEsNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpoYW5kbGVG
YWxsYmFja0NvbnRlbnQoCiB9CiAKIHZvaWQgRnJhbWVMb2FkZXI6OnByb3Zpc2lvbmFsTG9hZFN0
YXJ0ZWQoKQotewotICAgIFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCk7Ci0gICAgCi0gICAg
Ly8gdGhpcyBpcyB1c2VkIHRvIHVwZGF0ZSB0aGUgY3VycmVudCBoaXN0b3J5IGl0ZW0KLSAgICAv
LyBpbiB0aGUgZXZlbnQgb2YgYSBuYXZpZ2F0aW9uIGF5dGltZSBkdXJpbmcgbG9hZGluZwotICAg
IG1fbmF2aWdhdGlvbkR1cmluZ0xvYWQgPSBmYWxzZTsKLSAgICBpZiAocGFnZSkgewotICAgICAg
ICBEb2N1bWVudCAqZG9jdW1lbnQgPSBwYWdlLT5tYWluRnJhbWUoKS0+ZG9jdW1lbnQoKTsKLSAg
ICAgICAgbV9uYXZpZ2F0aW9uRHVyaW5nTG9hZCA9ICFwYWdlLT5tYWluRnJhbWUoKS0+bG9hZGVy
KCktPmlzQ29tcGxldGUoKSB8fCAoZG9jdW1lbnQgJiYgZG9jdW1lbnQtPnByb2Nlc3NpbmdMb2Fk
RXZlbnQoKSk7Ci0gICAgfQotICAgIAoreyAgICAKICAgICBtX2ZpcnN0TGF5b3V0RG9uZSA9IGZh
bHNlOwogICAgIGNhbmNlbFJlZGlyZWN0aW9uKHRydWUpOwogICAgIG1fY2xpZW50LT5wcm92aXNp
b25hbExvYWRTdGFydGVkKCk7CkBAIC0yMDQ4LDYgKzIwNTEsMTUgQEAgdm9pZCBGcmFtZUxvYWRl
cjo6c2NoZWR1bGVSZWRpcmVjdGlvbihTYwogewogICAgIEFTU0VSVChtX2ZyYW1lLT5wYWdlKCkp
OwogCisgICAgLy8gSWYgYSByZWRpcmVjdCB3YXMgc2NoZWR1bGVkIGR1cmluZyBhIGxvYWQsIHRo
ZW4gc3RvcCB0aGUgY3VycmVudCBsb2FkLgorICAgIC8vIE90aGVyd2lzZSB3aGVuIHRoZSBjdXJy
ZW50IGxvYWQgdHJhbnNpdGlvbnMgZnJvbSBhIHByb3Zpc2lvbmFsIHRvIGEgCisgICAgLy8gY29t
bWl0dGVkIHN0YXRlLCBwZW5kaW5nIHJlZGlyZWN0cyBtYXkgYmUgY2FuY2VsbGVkLiAKKyAgICBp
ZiAocmVkaXJlY3Rpb24tPndhc0R1cmluZ0xvYWQpIHsKKyAgICAgICAgaWYgKG1fcHJvdmlzaW9u
YWxEb2N1bWVudExvYWRlcikKKyAgICAgICAgICAgIG1fcHJvdmlzaW9uYWxEb2N1bWVudExvYWRl
ci0+c3RvcExvYWRpbmcoKTsKKyAgICAgICAgc3RvcExvYWRpbmcodHJ1ZSk7ICAgCisgICAgfQor
CiAgICAgc3RvcFJlZGlyZWN0aW9uVGltZXIoKTsKICAgICBtX3NjaGVkdWxlZFJlZGlyZWN0aW9u
LnNldChyZWRpcmVjdGlvbik7CiAgICAgaWYgKCFtX2lzQ29tcGxldGUgJiYgcmVkaXJlY3Rpb24t
PnR5cGUgIT0gU2NoZWR1bGVkUmVkaXJlY3Rpb246OnJlZGlyZWN0aW9uKQpAQCAtMjA2NSwxNCAr
MjA3NywxNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpzdGFydFJlZGlyZWN0aW9uVGltZXIoCiAgICAg
bV9yZWRpcmVjdGlvblRpbWVyLnN0YXJ0T25lU2hvdChtX3NjaGVkdWxlZFJlZGlyZWN0aW9uLT5k
ZWxheSk7CiAKICAgICBzd2l0Y2ggKG1fc2NoZWR1bGVkUmVkaXJlY3Rpb24tPnR5cGUpIHsKLSAg
ICAgICAgY2FzZSBTY2hlZHVsZWRSZWRpcmVjdGlvbjo6cmVkaXJlY3Rpb246CiAgICAgICAgIGNh
c2UgU2NoZWR1bGVkUmVkaXJlY3Rpb246OmxvY2F0aW9uQ2hhbmdlOgotICAgICAgICBjYXNlIFNj
aGVkdWxlZFJlZGlyZWN0aW9uOjpsb2NhdGlvbkNoYW5nZUR1cmluZ0xvYWQ6CisgICAgICAgIGNh
c2UgU2NoZWR1bGVkUmVkaXJlY3Rpb246OnJlZGlyZWN0aW9uOgogICAgICAgICAgICAgY2xpZW50
UmVkaXJlY3RlZChLVVJMKG1fc2NoZWR1bGVkUmVkaXJlY3Rpb24tPnVybCksCiAgICAgICAgICAg
ICAgICAgbV9zY2hlZHVsZWRSZWRpcmVjdGlvbi0+ZGVsYXksCiAgICAgICAgICAgICAgICAgY3Vy
cmVudFRpbWUoKSArIG1fcmVkaXJlY3Rpb25UaW1lci5uZXh0RmlyZUludGVydmFsKCksCi0gICAg
ICAgICAgICAgICAgbV9zY2hlZHVsZWRSZWRpcmVjdGlvbi0+bG9ja0JhY2tGb3J3YXJkTGlzdCwK
LSAgICAgICAgICAgICAgICBtX2lzRXhlY3V0aW5nSmF2YVNjcmlwdEZvcm1BY3Rpb24pOworICAg
ICAgICAgICAgICAgIG1fc2NoZWR1bGVkUmVkaXJlY3Rpb24tPmxvY2tCYWNrRm9yd2FyZExpc3Qp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIFNjaGVkdWxlZFJlZGlyZWN0aW9u
Ojpmb3JtU3VibWlzc2lvbjoKKyAgICAgICAgICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBtYWtlIHNl
bnNlIHRvIHJlcG9ydCBmb3JtIHN1Ym1pc3Npb25zIGFzIGNsaWVudCByZWRpcmVjdHMgdG9vLgor
ICAgICAgICAgICAgLy8gQnV0IHdlIGRpZG4ndCBkbyB0aGF0IGluIHRoZSBwYXN0IHdoZW4gZm9y
bSBzdWJtaXNzaW9uIHVzZWQgYSBzZXBhcmF0ZSBkZWxheQorICAgICAgICAgICAgLy8gbWVjaGFu
aXNtLCBzbyBkb2luZyBpdCB3aWxsIGJlIGEgYmVoYXZpb3IgY2hhbmdlLgogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICBjYXNlIFNjaGVkdWxlZFJlZGlyZWN0aW9uOjpoaXN0b3J5TmF2aWdh
dGlvbjoKICAgICAgICAgICAgIC8vIERvbid0IHJlcG9ydCBoaXN0b3J5IG5hdmlnYXRpb25zLgpA
QCAtMjA5MCwxMSArMjEwNSwxNSBAQCB2b2lkIEZyYW1lTG9hZGVyOjpzdG9wUmVkaXJlY3Rpb25U
aW1lcigpCiAKICAgICBpZiAobV9zY2hlZHVsZWRSZWRpcmVjdGlvbikgewogICAgICAgICBzd2l0
Y2ggKG1fc2NoZWR1bGVkUmVkaXJlY3Rpb24tPnR5cGUpIHsKLSAgICAgICAgICAgIGNhc2UgU2No
ZWR1bGVkUmVkaXJlY3Rpb246OnJlZGlyZWN0aW9uOgogICAgICAgICAgICAgY2FzZSBTY2hlZHVs
ZWRSZWRpcmVjdGlvbjo6bG9jYXRpb25DaGFuZ2U6Ci0gICAgICAgICAgICBjYXNlIFNjaGVkdWxl
ZFJlZGlyZWN0aW9uOjpsb2NhdGlvbkNoYW5nZUR1cmluZ0xvYWQ6CisgICAgICAgICAgICBjYXNl
IFNjaGVkdWxlZFJlZGlyZWN0aW9uOjpyZWRpcmVjdGlvbjoKICAgICAgICAgICAgICAgICBjbGll
bnRSZWRpcmVjdENhbmNlbGxlZE9yRmluaXNoZWQobV9jYW5jZWxsaW5nV2l0aExvYWRJblByb2dy
ZXNzKTsKICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBjYXNlIFNjaGVkdWxl
ZFJlZGlyZWN0aW9uOjpmb3JtU3VibWlzc2lvbjoKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTog
SXQgd291bGQgbWFrZSBzZW5zZSB0byByZXBvcnQgZm9ybSBzdWJtaXNzaW9ucyBhcyBjbGllbnQg
cmVkaXJlY3RzIHRvby4KKyAgICAgICAgICAgICAgICAvLyBCdXQgd2UgZGlkbid0IGRvIHRoYXQg
aW4gdGhlIHBhc3Qgd2hlbiBmb3JtIHN1Ym1pc3Npb24gdXNlZCBhIHNlcGFyYXRlIGRlbGF5Cisg
ICAgICAgICAgICAgICAgLy8gbWVjaGFuaXNtLCBzbyBkb2luZyBpdCB3aWxsIGJlIGEgYmVoYXZp
b3IgY2hhbmdlLgorICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIGNhc2UgU2No
ZWR1bGVkUmVkaXJlY3Rpb246Omhpc3RvcnlOYXZpZ2F0aW9uOgogICAgICAgICAgICAgICAgIC8v
IERvbid0IHJlcG9ydCBoaXN0b3J5IG5hdmlnYXRpb25zLgogICAgICAgICAgICAgICAgIHJldHVy
bjsKQEAgLTIxMTAsNyArMjEyOSw2IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmNvbXBsZXRlZCgpCiAg
ICAgICAgIGNoaWxkLT5sb2FkZXIoKS0+cGFyZW50Q29tcGxldGVkKCk7CiAgICAgaWYgKEZyYW1l
KiBwYXJlbnQgPSBtX2ZyYW1lLT50cmVlKCktPnBhcmVudCgpKQogICAgICAgICBwYXJlbnQtPmxv
YWRlcigpLT5jaGVja0NvbXBsZXRlZCgpOwotICAgIHN1Ym1pdEZvcm1BZ2FpbigpOwogfQogCiB2
b2lkIEZyYW1lTG9hZGVyOjpzdGFydGVkKCkKQEAgLTIxNDQsMTMgKzIxNjIsOSBAQCB2b2lkIEZy
YW1lTG9hZGVyOjpzZXR1cEZvclJlcGxhY2VCeU1JTUVUCiAgICAgYWN0aXZlRG9jdW1lbnRMb2Fk
ZXIoKS0+c2V0dXBGb3JSZXBsYWNlQnlNSU1FVHlwZShuZXdNSU1FVHlwZSk7CiB9CiAKLXZvaWQg
RnJhbWVMb2FkZXI6OmxvYWRGcmFtZVJlcXVlc3RXaXRoRm9ybUFuZFZhbHVlcyhjb25zdCBGcmFt
ZUxvYWRSZXF1ZXN0JiByZXF1ZXN0LCBib29sIGxvY2tIaXN0b3J5LCBib29sIGxvY2tCYWNrRm9y
d2FyZExpc3QsIFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50LAotICAgIEhUTUxGb3JtRWxlbWVudCog
c3VibWl0Rm9ybSwgY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIGZvcm1WYWx1ZXMpCi17
Ci0gICAgUmVmUHRyPEZvcm1TdGF0ZT4gZm9ybVN0YXRlOwotICAgIGlmIChzdWJtaXRGb3JtKQot
ICAgICAgICBmb3JtU3RhdGUgPSBGb3JtU3RhdGU6OmNyZWF0ZShzdWJtaXRGb3JtLCBmb3JtVmFs
dWVzLCBtX2ZyYW1lKTsKLSAgICAKK3ZvaWQgRnJhbWVMb2FkZXI6OmxvYWRGcmFtZVJlcXVlc3Qo
Y29uc3QgRnJhbWVMb2FkUmVxdWVzdCYgcmVxdWVzdCwgYm9vbCBsb2NrSGlzdG9yeSwgYm9vbCBs
b2NrQmFja0ZvcndhcmRMaXN0LAorICAgIFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50LCBQYXNzUmVm
UHRyPEZvcm1TdGF0ZT4gZm9ybVN0YXRlKQoreyAgICAKICAgICBLVVJMIHVybCA9IHJlcXVlc3Qu
cmVzb3VyY2VSZXF1ZXN0KCkudXJsKCk7CiAKICAgICBTdHJpbmcgcmVmZXJyZXI7CkBAIC0yMTgw
LDE0ICsyMTk0LDE4IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmxvYWRGcmFtZVJlcXVlc3RXaXRoRm8K
ICAgICAgICAgbG9hZFR5cGUgPSBGcmFtZUxvYWRUeXBlU3RhbmRhcmQ7CiAKICAgICBpZiAocmVx
dWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5odHRwTWV0aG9kKCkgPT0gIlBPU1QiKQotICAgICAgICBs
b2FkUG9zdFJlcXVlc3QocmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKSwgcmVmZXJyZXIsIHJlcXVl
c3QuZnJhbWVOYW1lKCksIGxvY2tIaXN0b3J5LCBsb2FkVHlwZSwgZXZlbnQsIGZvcm1TdGF0ZS5y
ZWxlYXNlKCkpOworICAgICAgICBsb2FkUG9zdFJlcXVlc3QocmVxdWVzdC5yZXNvdXJjZVJlcXVl
c3QoKSwgcmVmZXJyZXIsIHJlcXVlc3QuZnJhbWVOYW1lKCksIGxvY2tIaXN0b3J5LCBsb2FkVHlw
ZSwgZXZlbnQsIGZvcm1TdGF0ZS5nZXQoKSk7CiAgICAgZWxzZQotICAgICAgICBsb2FkVVJMKHJl
cXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkudXJsKCksIHJlZmVycmVyLCByZXF1ZXN0LmZyYW1lTmFt
ZSgpLCBsb2NrSGlzdG9yeSwgbG9hZFR5cGUsIGV2ZW50LCBmb3JtU3RhdGUucmVsZWFzZSgpKTsK
KyAgICAgICAgbG9hZFVSTChyZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnVybCgpLCByZWZlcnJl
ciwgcmVxdWVzdC5mcmFtZU5hbWUoKSwgbG9ja0hpc3RvcnksIGxvYWRUeXBlLCBldmVudCwgZm9y
bVN0YXRlLmdldCgpKTsKIAotICAgIEZyYW1lKiB0YXJnZXRGcmFtZSA9IGZpbmRGcmFtZUZvck5h
dmlnYXRpb24ocmVxdWVzdC5mcmFtZU5hbWUoKSk7Ci0gICAgaWYgKHRhcmdldEZyYW1lICYmIHRh
cmdldEZyYW1lICE9IG1fZnJhbWUpCisgICAgLy8gRklYTUU6IEl0J3MgcG9zc2libGUgdGhpcyB0
YXJnZXRGcmFtZSB3aWxsIG5vdCBiZSB0aGUgc2FtZSBmcmFtZSB0aGF0IHdhcyB0YXJnZXRlZCBi
eSB0aGUgYWN0dWFsCisgICAgLy8gbG9hZCBpZiBmcmFtZSBuYW1lcyBoYXZlIGNoYW5nZWQuCisg
ICAgRnJhbWUqIHNvdXJjZUZyYW1lID0gZm9ybVN0YXRlID8gZm9ybVN0YXRlLT5zb3VyY2VGcmFt
ZSgpIDogbV9mcmFtZTsKKyAgICBGcmFtZSogdGFyZ2V0RnJhbWUgPSBzb3VyY2VGcmFtZS0+bG9h
ZGVyKCktPmZpbmRGcmFtZUZvck5hdmlnYXRpb24ocmVxdWVzdC5mcmFtZU5hbWUoKSk7CisgICAg
aWYgKHRhcmdldEZyYW1lICYmIHRhcmdldEZyYW1lICE9IHNvdXJjZUZyYW1lKSB7CiAgICAgICAg
IGlmIChQYWdlKiBwYWdlID0gdGFyZ2V0RnJhbWUtPnBhZ2UoKSkKICAgICAgICAgICAgIHBhZ2Ut
PmNocm9tZSgpLT5mb2N1cygpOworICAgIH0KIH0KIAogdm9pZCBGcmFtZUxvYWRlcjo6bG9hZFVS
TChjb25zdCBLVVJMJiBuZXdVUkwsIGNvbnN0IFN0cmluZyYgcmVmZXJyZXIsIGNvbnN0IFN0cmlu
ZyYgZnJhbWVOYW1lLCBib29sIGxvY2tIaXN0b3J5LCBGcmFtZUxvYWRUeXBlIG5ld0xvYWRUeXBl
LApAQCAtMjIwOCw3ICsyMjI2LDggQEAgdm9pZCBGcmFtZUxvYWRlcjo6bG9hZFVSTChjb25zdCBL
VVJMJiBuZQogCiAgICAgQVNTRVJUKG5ld0xvYWRUeXBlICE9IEZyYW1lTG9hZFR5cGVTYW1lKTsK
IAotICAgIEZyYW1lKiB0YXJnZXRGcmFtZSA9IGZpbmRGcmFtZUZvck5hdmlnYXRpb24oZnJhbWVO
YW1lKTsKKyAgICAvLyBUaGUgc2VhcmNoIGZvciBhIHRhcmdldCBmcmFtZSBpcyBkb25lIGVhcmxp
ZXIgaW4gdGhlIGNhc2Ugb2YgZm9ybSBzdWJtaXNzaW9uLgorICAgIEZyYW1lKiB0YXJnZXRGcmFt
ZSA9IGlzRm9ybVN1Ym1pc3Npb24gPyAwIDogZmluZEZyYW1lRm9yTmF2aWdhdGlvbihmcmFtZU5h
bWUpOwogICAgIGlmICh0YXJnZXRGcmFtZSAmJiB0YXJnZXRGcmFtZSAhPSBtX2ZyYW1lKSB7CiAg
ICAgICAgIHRhcmdldEZyYW1lLT5sb2FkZXIoKS0+bG9hZFVSTChuZXdVUkwsIHJlZmVycmVyLCBT
dHJpbmcoKSwgbG9ja0hpc3RvcnksIG5ld0xvYWRUeXBlLCBldmVudCwgZm9ybVN0YXRlLnJlbGVh
c2UoKSk7CiAgICAgICAgIHJldHVybjsKQEAgLTI5MzYsNyArMjk1NSw3IEBAIHZvaWQgRnJhbWVM
b2FkZXI6OmNsaWVudFJlZGlyZWN0Q2FuY2VsbGUKICAgICBtX3NlbnRSZWRpcmVjdE5vdGlmaWNh
dGlvbiA9IGZhbHNlOwogfQogCi12b2lkIEZyYW1lTG9hZGVyOjpjbGllbnRSZWRpcmVjdGVkKGNv
bnN0IEtVUkwmIHVybCwgZG91YmxlIHNlY29uZHMsIGRvdWJsZSBmaXJlRGF0ZSwgYm9vbCBsb2Nr
QmFja0ZvcndhcmRMaXN0LCBib29sIGlzSmF2YVNjcmlwdEZvcm1BY3Rpb24pCit2b2lkIEZyYW1l
TG9hZGVyOjpjbGllbnRSZWRpcmVjdGVkKGNvbnN0IEtVUkwmIHVybCwgZG91YmxlIHNlY29uZHMs
IGRvdWJsZSBmaXJlRGF0ZSwgYm9vbCBsb2NrQmFja0ZvcndhcmRMaXN0KQogewogICAgIG1fY2xp
ZW50LT5kaXNwYXRjaFdpbGxQZXJmb3JtQ2xpZW50UmVkaXJlY3QodXJsLCBzZWNvbmRzLCBmaXJl
RGF0ZSk7CiAgICAgCkBAIC0yOTQ0LDEwICsyOTYzLDExIEBAIHZvaWQgRnJhbWVMb2FkZXI6OmNs
aWVudFJlZGlyZWN0ZWQoY29uc3QKICAgICAvLyB0aGUgbmV4dCBwcm92aXNpb25hbCBsb2FkLCB3
ZSBjYW4gc2VuZCBhIGNvcnJlc3BvbmRpbmcgLXdlYlZpZXc6ZGlkQ2FuY2VsQ2xpZW50UmVkaXJl
Y3RGb3JGcmFtZToKICAgICBtX3NlbnRSZWRpcmVjdE5vdGlmaWNhdGlvbiA9IHRydWU7CiAgICAg
Ci0gICAgLy8gSWYgYSAicXVpY2siIHJlZGlyZWN0IGNvbWVzIGluIGFuLCB3ZSBzZXQgYSBzcGVj
aWFsIG1vZGUgc28gd2UgdHJlYXQgdGhlIG5leHQKLSAgICAvLyBsb2FkIGFzIHBhcnQgb2YgdGhl
IHNhbWUgbmF2aWdhdGlvbi4gSWYgd2UgZG9uJ3QgaGF2ZSBhIGRvY3VtZW50IGxvYWRlciwgd2Ug
aGF2ZQorICAgIC8vIElmIGEgInF1aWNrIiByZWRpcmVjdCBjb21lcyBpbiwgd2Ugc2V0IGEgc3Bl
Y2lhbCBtb2RlIHNvIHdlIHRyZWF0IHRoZSBuZXh0CisgICAgLy8gbG9hZCBhcyBwYXJ0IG9mIHRo
ZSBvcmlnaW5hbCBuYXZpZ2F0aW9uLiBJZiB3ZSBkb24ndCBoYXZlIGEgZG9jdW1lbnQgbG9hZGVy
LCB3ZSBoYXZlCiAgICAgLy8gbm8gIm9yaWdpbmFsIiBsb2FkIG9uIHdoaWNoIHRvIGJhc2UgYSBy
ZWRpcmVjdCwgc28gd2UgdHJlYXQgdGhlIHJlZGlyZWN0IGFzIGEgbm9ybWFsIGxvYWQuCi0gICAg
bV9xdWlja1JlZGlyZWN0Q29taW5nID0gbG9ja0JhY2tGb3J3YXJkTGlzdCAmJiBtX2RvY3VtZW50
TG9hZGVyICYmICFpc0phdmFTY3JpcHRGb3JtQWN0aW9uOworICAgIC8vIExvYWRzIHRyaWdnZXJl
ZCBieSBKYXZhU2NyaXB0IGZvcm0gc3VibWlzc2lvbnMgbmV2ZXIgY291bnQgYXMgcXVpY2sgcmVk
aXJlY3RzLgorICAgIG1fcXVpY2tSZWRpcmVjdENvbWluZyA9IGxvY2tCYWNrRm9yd2FyZExpc3Qg
JiYgbV9kb2N1bWVudExvYWRlciAmJiAhbV9pc0V4ZWN1dGluZ0phdmFTY3JpcHRGb3JtQWN0aW9u
OwogfQogCiAjaWYgRU5BQkxFKFdNTCkKQEAgLTM0NTcsMzAgKzM0NzcsNiBAQCBpbnQgRnJhbWVM
b2FkZXI6Om51bVBlbmRpbmdPckxvYWRpbmdSZXF1CiAgICAgcmV0dXJuIGNvdW50OwogfQogCi12
b2lkIEZyYW1lTG9hZGVyOjpzdWJtaXRGb3JtKGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmIHJlcXVl
c3QsIFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50LCBib29sIGxvY2tIaXN0b3J5LCBib29sIGxvY2tC
YWNrRm9yd2FyZExpc3QpCi17Ci0gICAgLy8gRklYTUU6IFdlJ2QgbGlrZSB0byByZW1vdmUgdGhp
cyBhbHRvZ2V0aGVyIGFuZCBmaXggdGhlIG11bHRpcGxlIGZvcm0gc3VibWlzc2lvbiBpc3N1ZSBh
bm90aGVyIHdheS4KLSAgICAvLyBXZSBkbyBub3Qgd2FudCB0byBzdWJtaXQgbW9yZSB0aGFuIG9u
ZSBmb3JtIGZyb20gdGhlIHNhbWUgcGFnZSwKLSAgICAvLyBub3IgZG8gd2Ugd2FudCB0byBzdWJt
aXQgYSBzaW5nbGUgZm9ybSBtb3JlIHRoYW4gb25jZS4KLSAgICAvLyBUaGlzIGZsYWcgcHJldmVu
dHMgdGhlc2UgZnJvbSBoYXBwZW5pbmc7IG5vdCBzdXJlIGhvdyBvdGhlciBicm93c2VycyBwcmV2
ZW50IHRoaXMuCi0gICAgLy8gVGhlIGZsYWcgaXMgcmVzZXQgaW4gZWFjaCB0aW1lIHdlIHN0YXJ0
IGhhbmRsZSBhIG5ldyBtb3VzZSBvciBrZXkgZG93biBldmVudCwgYW5kCi0gICAgLy8gYWxzbyBp
biBzZXRWaWV3IHNpbmNlIHRoaXMgcGFydCBtYXkgZ2V0IHJldXNlZCBmb3IgYSBwYWdlIGZyb20g
dGhlIGJhY2svZm9yd2FyZCBjYWNoZS4KLSAgICAvLyBUaGUgZm9ybSBtdWx0aS1zdWJtaXQgbG9n
aWMgaGVyZSBpcyBvbmx5IG5lZWRlZCB3aGVuIHdlIGFyZSBzdWJtaXR0aW5nIGEgZm9ybSB0aGF0
IGFmZmVjdHMgdGhpcyBmcmFtZS4KLSAgICAvLyBGSVhNRTogRnJhbWUgdGFyZ2V0aW5nIGlzIG9u
bHkgb25lIG9mIHRoZSB3YXlzIHRoZSBzdWJtaXNzaW9uIGNvdWxkIGVuZCB1cCBkb2luZyBzb21l
dGhpbmcgb3RoZXIKLSAgICAvLyB0aGFuIHJlcGxhY2luZyB0aGlzIGZyYW1lJ3MgY29udGVudCwg
c28gdGhpcyBjaGVjayBpcyBmbGF3ZWQuIE9uIHRoZSBvdGhlciBoYW5kLCB0aGUgY2hlY2sgaXMg
aGFyZGx5Ci0gICAgLy8gbmVlZGVkIGFueSBtb3JlIG5vdyB0aGF0IHdlIHJlc2V0IG1fc3VibWl0
dGVkRm9ybVVSTCBvbiBlYWNoIG1vdXNlIG9yIGtleSBkb3duIGV2ZW50LgotICAgIEZyYW1lKiB0
YXJnZXQgPSBtX2ZyYW1lLT50cmVlKCktPmZpbmQocmVxdWVzdC5mcmFtZU5hbWUoKSk7Ci0gICAg
aWYgKG1fZnJhbWUtPnRyZWUoKS0+aXNEZXNjZW5kYW50T2YodGFyZ2V0KSkgewotICAgICAgICBp
ZiAobV9zdWJtaXR0ZWRGb3JtVVJMID09IHJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkudXJsKCkp
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fc3VibWl0dGVkRm9ybVVSTCA9IHJlcXVl
c3QucmVzb3VyY2VSZXF1ZXN0KCkudXJsKCk7Ci0gICAgfQotCi0gICAgbG9hZEZyYW1lUmVxdWVz
dFdpdGhGb3JtQW5kVmFsdWVzKHJlcXVlc3QsIGxvY2tIaXN0b3J5LCBsb2NrQmFja0ZvcndhcmRM
aXN0LCBldmVudCwgbV9mb3JtQWJvdXRUb0JlU3VibWl0dGVkLmdldCgpLCBtX2Zvcm1WYWx1ZXNB
Ym91dFRvQmVTdWJtaXR0ZWQpOwotCi0gICAgY2xlYXJSZWNvcmRlZEZvcm1WYWx1ZXMoKTsKLX0K
LQogU3RyaW5nIEZyYW1lTG9hZGVyOjp1c2VyQWdlbnQoY29uc3QgS1VSTCYgdXJsKSBjb25zdAog
ewogICAgIHJldHVybiBtX2NsaWVudC0+dXNlckFnZW50KHVybCk7CkBAIC0zNDg4LDkgKzM0ODQs
NiBAQCBTdHJpbmcgRnJhbWVMb2FkZXI6OnVzZXJBZ2VudChjb25zdCBLVVJMCiAKIHZvaWQgRnJh
bWVMb2FkZXI6OnRva2VuaXplclByb2Nlc3NlZERhdGEoKQogewotLy8gICAgQVNTRVJUKG1fZnJh
bWUtPnBhZ2UoKSk7Ci0vLyAgICBBU1NFUlQobV9mcmFtZS0+ZG9jdW1lbnQoKSk7Ci0KICAgICBj
aGVja0NvbXBsZXRlZCgpOwogfQogCkBAIC0zNjQzLDcgKzM2MzYsOCBAQCB2b2lkIEZyYW1lTG9h
ZGVyOjpsb2FkUG9zdFJlcXVlc3QoY29uc3QgCiAgICAgTmF2aWdhdGlvbkFjdGlvbiBhY3Rpb24o
dXJsLCBsb2FkVHlwZSwgdHJ1ZSwgZXZlbnQpOwogCiAgICAgaWYgKCFmcmFtZU5hbWUuaXNFbXB0
eSgpKSB7Ci0gICAgICAgIGlmIChGcmFtZSogdGFyZ2V0RnJhbWUgPSBmaW5kRnJhbWVGb3JOYXZp
Z2F0aW9uKGZyYW1lTmFtZSkpCisgICAgICAgIC8vIFRoZSBzZWFyY2ggZm9yIGEgdGFyZ2V0IGZy
YW1lIGlzIGRvbmUgZWFybGllciBpbiB0aGUgY2FzZSBvZiBmb3JtIHN1Ym1pc3Npb24uCisgICAg
ICAgIGlmIChGcmFtZSogdGFyZ2V0RnJhbWUgPSBmb3JtU3RhdGUgPyAwIDogZmluZEZyYW1lRm9y
TmF2aWdhdGlvbihmcmFtZU5hbWUpKQogICAgICAgICAgICAgdGFyZ2V0RnJhbWUtPmxvYWRlcigp
LT5sb2FkV2l0aE5hdmlnYXRpb25BY3Rpb24od29ya2luZ1Jlc291cmNlUmVxdWVzdCwgYWN0aW9u
LCBsb2NrSGlzdG9yeSwgbG9hZFR5cGUsIGZvcm1TdGF0ZS5yZWxlYXNlKCkpOwogICAgICAgICBl
bHNlCiAgICAgICAgICAgICBjaGVja05ld1dpbmRvd1BvbGljeShhY3Rpb24sIHdvcmtpbmdSZXNv
dXJjZVJlcXVlc3QsIGZvcm1TdGF0ZS5yZWxlYXNlKCksIGZyYW1lTmFtZSk7CkBAIC0zNjUxLDEy
ICszNjQ1LDYgQEAgdm9pZCBGcmFtZUxvYWRlcjo6bG9hZFBvc3RSZXF1ZXN0KGNvbnN0IAogICAg
ICAgICBsb2FkV2l0aE5hdmlnYXRpb25BY3Rpb24od29ya2luZ1Jlc291cmNlUmVxdWVzdCwgYWN0
aW9uLCBsb2NrSGlzdG9yeSwgbG9hZFR5cGUsIGZvcm1TdGF0ZS5yZWxlYXNlKCkpOyAgICAKIH0K
IAotdm9pZCBGcmFtZUxvYWRlcjo6bG9hZEVtcHR5RG9jdW1lbnRTeW5jaHJvbm91c2x5KCkKLXsK
LSAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdChLVVJMKCIiKSk7Ci0gICAgbG9hZChyZXF1ZXN0
LCBmYWxzZSk7Ci19Ci0KIHVuc2lnbmVkIGxvbmcgRnJhbWVMb2FkZXI6OmxvYWRSZXNvdXJjZVN5
bmNocm9ub3VzbHkoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBSZXNvdXJjZUVycm9y
JiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3RvcjxjaGFyPiYgZGF0YSkK
IHsKICAgICAvLyBTaW5jZSB0aGlzIGlzIGEgc3VicmVzb3VyY2UsIHdlIGNhbiBsb2FkIGFueSBV
UkwgKHdlIGlnbm9yZSB0aGUgcmV0dXJuIHZhbHVlKS4KQEAgLTQyNTksNiArNDI0NywxMSBAQCBQ
YXNzUmVmUHRyPEhpc3RvcnlJdGVtPiBGcmFtZUxvYWRlcjo6Y3JlCiAKIHZvaWQgRnJhbWVMb2Fk
ZXI6OmFkZEJhY2tGb3J3YXJkSXRlbUNsaXBwZWRBdFRhcmdldChib29sIGRvQ2xpcCkKIHsKKyAg
ICAvLyBJbiB0aGUgY2FzZSBvZiBzYXZpbmcgc3RhdGUgYWJvdXQgYSBwYWdlIHdpdGggZnJhbWVz
LCB3ZSBzdG9yZSBhIHRyZWUgb2YgaXRlbXMgdGhhdCBtaXJyb3JzIHRoZSBmcmFtZSB0cmVlLiAg
CisgICAgLy8gVGhlIGl0ZW0gdGhhdCB3YXMgdGhlIHRhcmdldCBvZiB0aGUgdXNlcidzIG5hdmln
YXRpb24gaXMgZGVzaWduYXRlZCBhcyB0aGUgInRhcmdldEl0ZW0iLiAgCisgICAgLy8gV2hlbiB0
aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIGRvQ2xpcD10cnVlIHdlJ3JlIGFibGUgdG8gY3Jl
YXRlIHRoZSB3aG9sZSB0cmVlIGV4Y2VwdCBmb3IgdGhlIHRhcmdldCdzIGNoaWxkcmVuLCAKKyAg
ICAvLyB3aGljaCB3aWxsIGJlIGxvYWRlZCBpbiB0aGUgZnV0dXJlLiBUaGF0IHBhcnQgb2YgdGhl
IHRyZWUgd2lsbCBiZSBmaWxsZWQgb3V0IGFzIHRoZSBjaGlsZCBsb2FkcyBhcmUgY29tbWl0dGVk
LgorCiAgICAgUGFnZSogcGFnZSA9IG1fZnJhbWUtPnBhZ2UoKTsKICAgICBpZiAoIXBhZ2UpCiAg
ICAgICAgIHJldHVybjsKQEAgLTQzMDgsOSArNDMwMSw5IEBAIFBhc3NSZWZQdHI8SGlzdG9yeUl0
ZW0+IEZyYW1lTG9hZGVyOjpjcmUKIEZyYW1lKiBGcmFtZUxvYWRlcjo6ZmluZEZyYW1lRm9yTmF2
aWdhdGlvbihjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpCiB7CiAgICAgRnJhbWUqIGZyYW1lID0g
bV9mcmFtZS0+dHJlZSgpLT5maW5kKG5hbWUpOwotICAgIGlmIChzaG91bGRBbGxvd05hdmlnYXRp
b24oZnJhbWUpKQotICAgICAgICByZXR1cm4gZnJhbWU7ICAKLSAgICByZXR1cm4gMDsKKyAgICBp
ZiAoIXNob3VsZEFsbG93TmF2aWdhdGlvbihmcmFtZSkpCisgICAgICAgIHJldHVybiAwOyAgCisg
ICAgcmV0dXJuIGZyYW1lOwogfQogCiB2b2lkIEZyYW1lTG9hZGVyOjpzYXZlU2Nyb2xsUG9zaXRp
b25BbmRWaWV3U3RhdGVUb0l0ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0pCkBAIC00NjQwLDEwICs0NjMz
LDEwIEBAIHZvaWQgRnJhbWVMb2FkZXI6OnJlY3Vyc2l2ZUdvVG9JdGVtKEhpc3QKICAgICAgICAg
CiAgICAgICAgIGludCBzaXplID0gY2hpbGRJdGVtcy5zaXplKCk7CiAgICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICBTdHJpbmcgY2hpbGROYW1lID0g
Y2hpbGRJdGVtc1tpXS0+dGFyZ2V0KCk7Ci0gICAgICAgICAgICBIaXN0b3J5SXRlbSogZnJvbUNo
aWxkSXRlbSA9IGZyb21JdGVtLT5jaGlsZEl0ZW1XaXRoTmFtZShjaGlsZE5hbWUpOworICAgICAg
ICAgICAgU3RyaW5nIGNoaWxkRnJhbWVOYW1lID0gY2hpbGRJdGVtc1tpXS0+dGFyZ2V0KCk7Cisg
ICAgICAgICAgICBIaXN0b3J5SXRlbSogZnJvbUNoaWxkSXRlbSA9IGZyb21JdGVtLT5jaGlsZEl0
ZW1XaXRoVGFyZ2V0KGNoaWxkRnJhbWVOYW1lKTsKICAgICAgICAgICAgIEFTU0VSVChmcm9tQ2hp
bGRJdGVtIHx8IGZyb21JdGVtLT5pc1RhcmdldEl0ZW0oKSk7Ci0gICAgICAgICAgICBGcmFtZSog
Y2hpbGRGcmFtZSA9IG1fZnJhbWUtPnRyZWUoKS0+Y2hpbGQoY2hpbGROYW1lKTsKKyAgICAgICAg
ICAgIEZyYW1lKiBjaGlsZEZyYW1lID0gbV9mcmFtZS0+dHJlZSgpLT5jaGlsZChjaGlsZEZyYW1l
TmFtZSk7CiAgICAgICAgICAgICBBU1NFUlQoY2hpbGRGcmFtZSk7CiAgICAgICAgICAgICBjaGls
ZEZyYW1lLT5sb2FkZXIoKS0+cmVjdXJzaXZlR29Ub0l0ZW0oY2hpbGRJdGVtc1tpXS5nZXQoKSwg
ZnJvbUNoaWxkSXRlbSwgdHlwZSk7CiAgICAgICAgIH0KQEAgLTQ2NjEsOSArNDY1NCwxMCBAQCBi
b29sIEZyYW1lTG9hZGVyOjpjaGlsZEZyYW1lc01hdGNoSXRlbShICiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAKICAgICB1bnNpZ25lZCBzaXplID0gY2hpbGRJdGVtcy5zaXplKCk7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgIGlmICghbV9mcmFtZS0+dHJlZSgpLT5jaGls
ZChjaGlsZEl0ZW1zW2ldLT50YXJnZXQoKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQogICAgIAogICAgIC8vIEZvdW5kIG1hdGNoZXMgZm9yIGFsbCBpdGVtIHRhcmdldHMKICAg
ICByZXR1cm4gdHJ1ZTsKQEAgLTQ2ODMsMTcgKzQ2NzcsNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjp1
cGRhdGVIaXN0b3J5Rm9yU3RhbmRhCiAgICAgYm9vbCBuZWVkUHJpdmFjeSA9ICFzZXR0aW5ncyB8
fCBzZXR0aW5ncy0+cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpOwogICAgIGNvbnN0IEtVUkwmIGhp
c3RvcnlVUkwgPSBkb2N1bWVudExvYWRlcigpLT51cmxGb3JIaXN0b3J5KCk7CiAKLSAgICAvLyBJ
ZiB0aGUgbmF2aWdhdGlvbiBvY2N1cmVkIGR1cmluZyBsb2FkIGFuZCB0aGlzIGlzIGEgc3ViZnJh
bWUsIHVwZGF0ZSB0aGUgY3VycmVudAotICAgIC8vIGJhY2svZm9yd2FyZCBpdGVtIHJhdGhlciB0
aGFuIGFkZGluZyBhIG5ldyBvbmUgYW5kIGRvbid0IGFkZCB0aGUgbmV3IFVSTCB0byBnbG9iYWwK
LSAgICAvLyBoaXN0b3J5IGF0IGFsbC4gQnV0IGRvIGFkZCBpdCB0byB2aXNpdGVkIGxpbmtzLiA8
cmRhcjovL3Byb2JsZW0vNTMzMzQ5Nj4KLSAgICBib29sIGZyYW1lTmF2aWdhdGlvbkR1cmluZ0xv
YWQgPSBmYWxzZTsKLSAgICBpZiAobV9uYXZpZ2F0aW9uRHVyaW5nTG9hZCkgewotICAgICAgICBI
VE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyID0gbV9mcmFtZS0+b3duZXJFbGVtZW50KCk7Ci0g
ICAgICAgIGZyYW1lTmF2aWdhdGlvbkR1cmluZ0xvYWQgPSBvd25lciAmJiAhb3duZXItPmNyZWF0
ZWRCeVBhcnNlcigpOwotICAgICAgICBtX25hdmlnYXRpb25EdXJpbmdMb2FkID0gZmFsc2U7Ci0g
ICAgfQotCi0gICAgaWYgKCFmcmFtZU5hdmlnYXRpb25EdXJpbmdMb2FkICYmICFkb2N1bWVudExv
YWRlcigpLT5pc0NsaWVudFJlZGlyZWN0KCkpIHsKKyAgICBpZiAoIWRvY3VtZW50TG9hZGVyKCkt
PmlzQ2xpZW50UmVkaXJlY3QoKSkgewogICAgICAgICBpZiAoIWhpc3RvcnlVUkwuaXNFbXB0eSgp
KSB7CiAgICAgICAgICAgICBhZGRCYWNrRm9yd2FyZEl0ZW1DbGlwcGVkQXRUYXJnZXQodHJ1ZSk7
CiAgICAgICAgICAgICBpZiAoIW5lZWRQcml2YWN5KSB7CkBAIC00ODA1LDcgKzQ3ODksNyBAQCB2
b2lkIEZyYW1lTG9hZGVyOjp1cGRhdGVIaXN0b3J5Rm9yUmVkaXJlCiAgICAgfSBlbHNlIHsKICAg
ICAgICAgRnJhbWUqIHBhcmVudEZyYW1lID0gbV9mcmFtZS0+dHJlZSgpLT5wYXJlbnQoKTsKICAg
ICAgICAgaWYgKHBhcmVudEZyYW1lICYmIHBhcmVudEZyYW1lLT5sb2FkZXIoKS0+bV9jdXJyZW50
SGlzdG9yeUl0ZW0pCi0gICAgICAgICAgICBwYXJlbnRGcmFtZS0+bG9hZGVyKCktPm1fY3VycmVu
dEhpc3RvcnlJdGVtLT5hZGRDaGlsZEl0ZW0oY3JlYXRlSGlzdG9yeUl0ZW0odHJ1ZSkpOworICAg
ICAgICAgICAgcGFyZW50RnJhbWUtPmxvYWRlcigpLT5tX2N1cnJlbnRIaXN0b3J5SXRlbS0+c2V0
Q2hpbGRJdGVtKGNyZWF0ZUhpc3RvcnlJdGVtKHRydWUpKTsKICAgICB9CiAKICAgICBpZiAoIWhp
c3RvcnlVUkwuaXNFbXB0eSgpICYmICFuZWVkUHJpdmFjeSkgewpJbmRleDogV2ViQ29yZS9sb2Fk
ZXIvRnJhbWVMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRl
ci5oCShyZXZpc2lvbiA0MjE0NikKKysrIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTY4LDcgKzY4LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNs
YXNzIFRleHRSZXNvdXJjZURlY29kZXI7CiAgICAgY2xhc3MgV2lkZ2V0OwogCi0gICAgc3RydWN0
IEZvcm1TdWJtaXNzaW9uOwogICAgIHN0cnVjdCBGcmFtZUxvYWRSZXF1ZXN0OwogICAgIHN0cnVj
dCBTY2hlZHVsZWRSZWRpcmVjdGlvbjsKICAgICBzdHJ1Y3QgV2luZG93RmVhdHVyZXM7CkBAIC0x
MTksMjYgKzExOCwyOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgRnJhbWUqIGZy
YW1lKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZTsgfQogCi0gICAgICAgIC8vIEZJWE1FOiBUaGlz
IGlzIG5vdCBjb29sLCBwZW9wbGUuIFdlIHNob3VsZCBhaW0gdG8gY29uc29saWRhdGUgdGhlc2Ug
dmFyaWV0eSBvZiBsb2FkaW5nIHJlbGF0ZWQgbWV0aG9kcyBpbnRvIGEgc21hbGxlciBzZXQsCi0g
ICAgICAgIC8vIGFuZCB0cnkgdG8gcmV1c2UgbW9yZSBvZiB0aGUgc2FtZSBsb2dpYyBieSBleHRy
YWN0aW5nIGNvbW1vbiBjb2RlIHBhdGhzLgorICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBub3Qg
Y29vbCwgcGVvcGxlLiBUaGVyZSBhcmUgdG9vIG1hbnkgZGlmZmVyZW50IGZ1bmN0aW9ucyB0aGF0
IGFsbCBzdGFydCBsb2Fkcy4KKyAgICAgICAgLy8gV2Ugc2hvdWxkIGFpbSB0byBjb25zb2xpZGF0
ZSB0aGVzZSBpbnRvIGEgc21hbGxlciBzZXQgb2YgZnVuY3Rpb25zLCBhbmQgdHJ5IHRvIHJldXNl
IG1vcmUgb2YKKyAgICAgICAgLy8gdGhlIGxvZ2ljIGJ5IGV4dHJhY3RpbmcgY29tbW9uIGNvZGUg
cGF0aHMuCisKICAgICAgICAgdm9pZCBwcmVwYXJlRm9yTG9hZFN0YXJ0KCk7CiAgICAgICAgIHZv
aWQgc2V0dXBGb3JSZXBsYWNlKCk7CiAgICAgICAgIHZvaWQgc2V0dXBGb3JSZXBsYWNlQnlNSU1F
VHlwZShjb25zdCBTdHJpbmcmIG5ld01JTUVUeXBlKTsKIAogICAgICAgICB2b2lkIGxvYWRVUkxJ
bnRvQ2hpbGRGcmFtZShjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiByZWZlcmVyLCBGcmFtZSop
OwogCi0gICAgICAgIHZvaWQgbG9hZEZyYW1lUmVxdWVzdFdpdGhGb3JtQW5kVmFsdWVzKGNvbnN0
IEZyYW1lTG9hZFJlcXVlc3QmLCBib29sIGxvY2tIaXN0b3J5LCBib29sIGxvY2tCYWNrRm9yd2Fy
ZExpc3QsICAgICAgICAgICAvLyBDYWxsZWQgYnkgc3VibWl0Rm9ybSwgY2FsbHMgbG9hZFBvc3RS
ZXF1ZXN0KCkKLSAgICAgICAgICAgIFBhc3NSZWZQdHI8RXZlbnQ+LCBIVE1MRm9ybUVsZW1lbnQq
LCBjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYgZm9ybVZhbHVlcyk7CisgICAgICAgIHZv
aWQgbG9hZEZyYW1lUmVxdWVzdChjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiwgYm9vbCBsb2NrSGlz
dG9yeSwgYm9vbCBsb2NrQmFja0ZvcndhcmRMaXN0LCAgLy8gQ2FsbGVkIGJ5IHN1Ym1pdEZvcm0s
IGNhbGxzIGxvYWRQb3N0UmVxdWVzdCBhbmQgbG9hZFVSTC4KKyAgICAgICAgICAgIFBhc3NSZWZQ
dHI8RXZlbnQ+LCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4pOwogCi0gICAgICAgIHZvaWQgbG9hZChj
b25zdCBSZXNvdXJjZVJlcXVlc3QmLCBib29sIGxvY2tIaXN0b3J5KTsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FsbGVkIGJ5IFdl
YkZyYW1lLCBjYWxscyAoUmVzb3VyY2VSZXF1ZXN0LCBTdWJzdGl0dXRlRGF0YSkKLSAgICAgICAg
dm9pZCBsb2FkKGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFN1YnN0aXR1dGVEYXRhJiwg
Ym9vbCBsb2NrSGlzdG9yeSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBD
YWxsZWQgYm90aCBieSBXZWJGcmFtZSBhbmQgaW50ZXJuYWxseSwgY2FsbHMgKERvY3VtZW50TG9h
ZGVyKikKLSAgICAgICAgdm9pZCBsb2FkKGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFN0
cmluZyYgZnJhbWVOYW1lLCBib29sIGxvY2tIaXN0b3J5KTsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBDYWxsZWQgYnkgV2ViUGx1Z2luQ29udHJvbGxlcgorICAgICAgICB2b2lk
IGxvYWQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgYm9vbCBsb2NrSGlzdG9yeSk7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhbGxlZCBieSBXZWJGcmFtZSwgY2Fs
bHMgbG9hZChSZXNvdXJjZVJlcXVlc3QsIFN1YnN0aXR1dGVEYXRhKS4KKyAgICAgICAgdm9pZCBs
b2FkKGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFN1YnN0aXR1dGVEYXRhJiwgYm9vbCBs
b2NrSGlzdG9yeSk7ICAgICAgICAgICAgICAgICAvLyBDYWxsZWQgYm90aCBieSBXZWJGcmFtZSBh
bmQgaW50ZXJuYWxseSwgY2FsbHMgbG9hZChEb2N1bWVudExvYWRlciopLgorICAgICAgICB2b2lk
IGxvYWQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgU3RyaW5nJiBmcmFtZU5hbWUsIGJv
b2wgbG9ja0hpc3RvcnkpOyAgICAgICAgICAgICAgIC8vIENhbGxlZCBieSBXZWJQbHVnaW5Db250
cm9sbGVyLgogICAgICAgICAKLSAgICAgICAgdm9pZCBsb2FkQXJjaGl2ZShQYXNzUmVmUHRyPEFy
Y2hpdmU+IGFyY2hpdmUpOworICAgICAgICB2b2lkIGxvYWRBcmNoaXZlKFBhc3NSZWZQdHI8QXJj
aGl2ZT4pOwogCi0gICAgICAgIC8vIFJldHVybnMgdHJ1ZSBmb3IgYW55IG5vbi1sb2NhbCBVUkwu
IElmIERvY3VtZW50IHBhcmFtZXRlciBpcyBzdXBwbGllZCwgaXRzIGxvY2FsIGxvYWQgcG9saWN5
IGRpY3RhdGVzLAorICAgICAgICAvLyBSZXR1cm5zIHRydWUgZm9yIGFueSBub24tbG9jYWwgVVJM
LiBJZiBkb2N1bWVudCBwYXJhbWV0ZXIgaXMgc3VwcGxpZWQsIGl0cyBsb2NhbCBsb2FkIHBvbGlj
eSBkaWN0YXRlcywKICAgICAgICAgLy8gb3RoZXJ3aXNlIGlmIHJlZmVycmVyIGlzIG5vbi1lbXB0
eSBhbmQgcmVwcmVzZW50cyBhIGxvY2FsIGZpbGUsIHRoZW4gdGhlIGxvY2FsIGxvYWQgaXMgYWxs
b3dlZC4KLSAgICAgICAgc3RhdGljIGJvb2wgY2FuTG9hZChjb25zdCBLVVJMJiwgY29uc3QgU3Ry
aW5nJiByZWZlcnJlciwgY29uc3QgRG9jdW1lbnQqIHRoZURvY3VtZW50ID0gMCk7CisgICAgICAg
IHN0YXRpYyBib29sIGNhbkxvYWQoY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgcmVmZXJyZXIs
IGNvbnN0IERvY3VtZW50KiA9IDApOwogICAgICAgICBzdGF0aWMgdm9pZCByZXBvcnRMb2NhbExv
YWRGYWlsZWQoRnJhbWUqLCBjb25zdCBTdHJpbmcmIHVybCk7CiAKICAgICAgICAgc3RhdGljIGJv
b2wgc2hvdWxkSGlkZVJlZmVycmVyKGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIHJlZmVycmVy
KTsKQEAgLTE2MiwxMSArMTYzLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBTdHJp
bmcgcmVmZXJyZXIoKSBjb25zdDsKICAgICAgICAgU3RyaW5nIG91dGdvaW5nUmVmZXJyZXIoKSBj
b25zdDsKICAgICAgICAgU3RyaW5nIG91dGdvaW5nT3JpZ2luKCkgY29uc3Q7Ci0gICAgICAgIHZv
aWQgbG9hZEVtcHR5RG9jdW1lbnRTeW5jaHJvbm91c2x5KCk7CiAKICAgICAgICAgRG9jdW1lbnRM
b2FkZXIqIGFjdGl2ZURvY3VtZW50TG9hZGVyKCkgY29uc3Q7CiAgICAgICAgIERvY3VtZW50TG9h
ZGVyKiBkb2N1bWVudExvYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fZG9jdW1lbnRMb2FkZXIuZ2V0
KCk7IH0KLSAgICAgICAgRG9jdW1lbnRMb2FkZXIqIHBvbGljeURvY3VtZW50TG9hZGVyKCkgY29u
c3QgeyByZXR1cm4gbV9wb2xpY3lEb2N1bWVudExvYWRlci5nZXQoKTsgfQogICAgICAgICBEb2N1
bWVudExvYWRlciogcHJvdmlzaW9uYWxEb2N1bWVudExvYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1f
cHJvdmlzaW9uYWxEb2N1bWVudExvYWRlci5nZXQoKTsgfQogICAgICAgICBGcmFtZVN0YXRlIHN0
YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQogICAgICAgICBzdGF0aWMgZG91YmxlIHRp
bWVPZkxhc3RDb21wbGV0ZWRMb2FkKCk7CkBAIC0yMDUsOCArMjA0LDYgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICBib29sIHJlcHJlc2VudGF0aW9uRXhpc3RzRm9yVVJMU2NoZW1lKGNv
bnN0IFN0cmluZyYgVVJMU2NoZW1lKTsKICAgICAgICAgU3RyaW5nIGdlbmVyYXRlZE1JTUVUeXBl
Rm9yVVJMU2NoZW1lKGNvbnN0IFN0cmluZyYgVVJMU2NoZW1lKTsKIAotICAgICAgICB2b2lkIG5v
dGlmeUljb25DaGFuZ2VkKCk7Ci0KICAgICAgICAgdm9pZCBjaGVja05hdmlnYXRpb25Qb2xpY3ko
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgTmF2aWdhdGlvblBvbGljeURlY2lzaW9uRnVuY3Rpb24g
ZnVuY3Rpb24sIHZvaWQqIGFyZ3VtZW50KTsKICAgICAgICAgdm9pZCBjaGVja0NvbnRlbnRQb2xp
Y3koY29uc3QgU3RyaW5nJiBNSU1FVHlwZSwgQ29udGVudFBvbGljeURlY2lzaW9uRnVuY3Rpb24s
IHZvaWQqIGFyZ3VtZW50KTsKICAgICAgICAgdm9pZCBjYW5jZWxDb250ZW50UG9saWN5Q2hlY2so
KTsKQEAgLTI1NSwxMCArMjUyLDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2
b2lkIGNoYW5nZUxvY2F0aW9uKGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIHJlZmVycmVyLCBi
b29sIGxvY2tIaXN0b3J5ID0gdHJ1ZSwgYm9vbCBsb2NrQmFja0ZvcndhcmRMaXN0ID0gdHJ1ZSwg
Ym9vbCB1c2VyR2VzdHVyZSA9IGZhbHNlLCBib29sIHJlZnJlc2ggPSBmYWxzZSk7CiAgICAgICAg
IHZvaWQgdXJsU2VsZWN0ZWQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgU3RyaW5nJiB0
YXJnZXQsIFBhc3NSZWZQdHI8RXZlbnQ+LCBib29sIGxvY2tIaXN0b3J5LCBib29sIGxvY2tCYWNr
Rm9yd2FyZExpc3QsIGJvb2wgdXNlckdlc3R1cmUpOwotICAgICAgCiAgICAgICAgIGJvb2wgcmVx
dWVzdEZyYW1lKEhUTUxGcmFtZU93bmVyRWxlbWVudCosIGNvbnN0IFN0cmluZyYgdXJsLCBjb25z
dCBBdG9taWNTdHJpbmcmIGZyYW1lTmFtZSk7CiAKLSAgICAgICAgdm9pZCBzdWJtaXRGb3JtKGNv
bnN0IGNoYXIqIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB1cmwsIFBhc3NSZWZQdHI8Rm9ybURhdGE+
LCBjb25zdCBTdHJpbmcmIHRhcmdldCwgY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSwgY29uc3Qg
U3RyaW5nJiBib3VuZGFyeSwgUGFzc1JlZlB0cjxFdmVudD4sIGJvb2wgbG9ja0hpc3RvcnksIGJv
b2wgbG9ja0JhY2tGb3J3YXJkTGlzdCk7CisgICAgICAgIHZvaWQgc3VibWl0Rm9ybShjb25zdCBj
aGFyKiBhY3Rpb24sIGNvbnN0IFN0cmluZyYgdXJsLAorICAgICAgICAgICAgUGFzc1JlZlB0cjxG
b3JtRGF0YT4sIGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBl
LCBjb25zdCBTdHJpbmcmIGJvdW5kYXJ5LAorICAgICAgICAgICAgYm9vbCBsb2NrSGlzdG9yeSwg
Ym9vbCBsb2NrQmFja0ZvcndhcmRMaXN0LCBQYXNzUmVmUHRyPEV2ZW50PiwgUGFzc1JlZlB0cjxG
b3JtU3RhdGU+KTsKIAogICAgICAgICB2b2lkIHN0b3AoKTsKICAgICAgICAgdm9pZCBzdG9wTG9h
ZGluZyhib29sIHNlbmRVbmxvYWQpOwpAQCAtMzI1LDggKzMyMyw2IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogICAgICAgICBjb25zdCBLVVJMJiB1cmwoKSBjb25zdCB7IHJldHVybiBtX1VSTDsg
fQogCi0gICAgICAgIHZvaWQgdXBkYXRlQmFzZVVSTEZvckVtcHR5RG9jdW1lbnQoKTsKLQogICAg
ICAgICB2b2lkIHNldFJlc3BvbnNlTUlNRVR5cGUoY29uc3QgU3RyaW5nJik7CiAgICAgICAgIGNv
bnN0IFN0cmluZyYgcmVzcG9uc2VNSU1FVHlwZSgpIGNvbnN0OwogCkBAIC0zMzYsMTAgKzMzMiw2
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBmaW5pc2hlZFBhcnNpbmcoKTsK
ICAgICAgICAgdm9pZCBjaGVja0NvbXBsZXRlZCgpOwogCi0gICAgICAgIHZvaWQgY2xlYXJSZWNv
cmRlZEZvcm1WYWx1ZXMoKTsKLSAgICAgICAgdm9pZCBzZXRGb3JtQWJvdXRUb0JlU3VibWl0dGVk
KFBhc3NSZWZQdHI8SFRNTEZvcm1FbGVtZW50PiBlbGVtZW50KTsKLSAgICAgICAgdm9pZCByZWNv
cmRGb3JtVmFsdWUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKLQog
ICAgICAgICBib29sIGlzQ29tcGxldGUoKSBjb25zdDsKIAogICAgICAgICBib29sIHJlcXVlc3RP
YmplY3QoUmVuZGVyUGFydCogZnJhbWUsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBBdG9taWNT
dHJpbmcmIGZyYW1lTmFtZSwKQEAgLTUwMCwyMSArNDkyLDIxIEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgdm9pZCBkaXNwYXRjaERpZEZpbmlzaExvYWRpbmcoRG9jdW1lbnRMb2FkZXIq
LCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpOwogCiAgICAgICAgIHN0YXRpYyBib29sIGlzTG9j
YXRpb25DaGFuZ2UoY29uc3QgU2NoZWR1bGVkUmVkaXJlY3Rpb24mKTsKKyAgICAgICAgdm9pZCBz
Y2hlZHVsZUZvcm1TdWJtaXNzaW9uKGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmLCBib29sIGxvY2tI
aXN0b3J5LCBib29sIGxvY2tCYWNrRm9yd2FyZExpc3QsIFBhc3NSZWZQdHI8RXZlbnQ+LCBQYXNz
UmVmUHRyPEZvcm1TdGF0ZT4pOwogCi0gICAgICAgIHZvaWQgbG9hZFdpdGhEb2N1bWVudExvYWRl
cihEb2N1bWVudExvYWRlciosIEZyYW1lTG9hZFR5cGUsIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPik7
ICAgICAgICAgLy8gQ2FsbHMgY29udGludWVMb2FkQWZ0ZXJOYXZpZ2F0aW9uUG9saWN5Ci0gICAg
ICAgIHZvaWQgbG9hZChEb2N1bWVudExvYWRlciopOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FsbHMgbG9hZFdpdGhE
b2N1bWVudExvYWRlciAgIAorICAgICAgICB2b2lkIGxvYWRXaXRoRG9jdW1lbnRMb2FkZXIoRG9j
dW1lbnRMb2FkZXIqLCBGcmFtZUxvYWRUeXBlLCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4pOyAvLyBD
YWxscyBjb250aW51ZUxvYWRBZnRlck5hdmlnYXRpb25Qb2xpY3kKKyAgICAgICAgdm9pZCBsb2Fk
KERvY3VtZW50TG9hZGVyKik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gQ2FsbHMgbG9hZFdpdGhEb2N1bWVudExvYWRlciAgIAogCi0g
ICAgICAgIHZvaWQgbG9hZFdpdGhOYXZpZ2F0aW9uQWN0aW9uKGNvbnN0IFJlc291cmNlUmVxdWVz
dCYsIGNvbnN0IE5hdmlnYXRpb25BY3Rpb24mLCAgICAgICAgICAgICAgLy8gQ2FsbHMgbG9hZFdp
dGhEb2N1bWVudExvYWRlcigpCisgICAgICAgIHZvaWQgbG9hZFdpdGhOYXZpZ2F0aW9uQWN0aW9u
KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IE5hdmlnYXRpb25BY3Rpb24mLCAgICAgIC8v
IENhbGxzIGxvYWRXaXRoRG9jdW1lbnRMb2FkZXIKICAgICAgICAgICAgIGJvb2wgbG9ja0hpc3Rv
cnksIEZyYW1lTG9hZFR5cGUsIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPik7CiAKLSAgICAgICAgdm9p
ZCBsb2FkUG9zdFJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgU3RyaW5nJiBy
ZWZlcnJlciwgICAgICAgICAgICAgICAgICAgICAgICAvLyBDYWxsZWQgYnkgbG9hZEZyYW1lUmVx
dWVzdFdpdGhGb3JtQW5kVmFsdWVzKCksIGNhbGxzIGxvYWRXaXRoTmF2aWdhdGlvbkFjdGlvbgor
ICAgICAgICB2b2lkIGxvYWRQb3N0UmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25z
dCBTdHJpbmcmIHJlZmVycmVyLCAgICAgICAgICAgICAgICAvLyBDYWxsZWQgYnkgbG9hZEZyYW1l
UmVxdWVzdCwgY2FsbHMgbG9hZFdpdGhOYXZpZ2F0aW9uQWN0aW9uCiAgICAgICAgICAgICBjb25z
dCBTdHJpbmcmIGZyYW1lTmFtZSwgYm9vbCBsb2NrSGlzdG9yeSwgRnJhbWVMb2FkVHlwZSwgUGFz
c1JlZlB0cjxFdmVudD4sIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPik7Ci0KLSAgICAgICAgdm9pZCBs
b2FkVVJMKGNvbnN0IEtVUkwmIG5ld1VSTCwgY29uc3QgU3RyaW5nJiByZWZlcnJlciwgY29uc3Qg
U3RyaW5nJiBmcmFtZU5hbWUsICAgICAgICAgICAvLyBDYWxsZWQgYnkgbG9hZEZyYW1lUmVxdWVz
dFdpdGhGb3JtQW5kVmFsdWVzKCksIGNhbGxzIGxvYWRXaXRoTmF2aWdhdGlvbkFjdGlvbiBvciBl
bHNlIGRpc3BhdGNoZXMgdG8gbmF2aWdhdGlvbiBwb2xpY3kgZGVsZWdhdGUgICAgCisgICAgICAg
IHZvaWQgbG9hZFVSTChjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiByZWZlcnJlciwgY29uc3Qg
U3RyaW5nJiBmcmFtZU5hbWUsICAgICAgICAgIC8vIENhbGxlZCBieSBsb2FkRnJhbWVSZXF1ZXN0
LCBjYWxscyBsb2FkV2l0aE5hdmlnYXRpb25BY3Rpb24gb3IgZGlzcGF0Y2hlcyB0byBuYXZpZ2F0
aW9uIHBvbGljeSBkZWxlZ2F0ZQogICAgICAgICAgICAgYm9vbCBsb2NrSGlzdG9yeSwgRnJhbWVM
b2FkVHlwZSwgUGFzc1JlZlB0cjxFdmVudD4sIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPik7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAKICAg
ICAgICAgdm9pZCBjbGllbnRSZWRpcmVjdENhbmNlbGxlZE9yRmluaXNoZWQoYm9vbCBjYW5jZWxX
aXRoTG9hZEluUHJvZ3Jlc3MpOwotICAgICAgICB2b2lkIGNsaWVudFJlZGlyZWN0ZWQoY29uc3Qg
S1VSTCYsIGRvdWJsZSBkZWxheSwgZG91YmxlIGZpcmVEYXRlLCBib29sIGxvY2tCYWNrRm9yd2Fy
ZExpc3QsIGJvb2wgaXNKYXZhU2NyaXB0Rm9ybUFjdGlvbik7CisgICAgICAgIHZvaWQgY2xpZW50
UmVkaXJlY3RlZChjb25zdCBLVVJMJiwgZG91YmxlIGRlbGF5LCBkb3VibGUgZmlyZURhdGUsIGJv
b2wgbG9ja0JhY2tGb3J3YXJkTGlzdCk7CiAgICAgICAgIGJvb2wgc2hvdWxkUmVsb2FkKGNvbnN0
IEtVUkwmIGN1cnJlbnRVUkwsIGNvbnN0IEtVUkwmIGRlc3RpbmF0aW9uVVJMKTsKIAogICAgICAg
ICB2b2lkIHNlbmRSZW1haW5pbmdEZWxlZ2F0ZU1lc3NhZ2VzKHVuc2lnbmVkIGxvbmcgaWRlbnRp
ZmllciwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYsIGludCBsZW5ndGgsIGNvbnN0IFJlc291cmNl
RXJyb3ImKTsKQEAgLTUyNyw5ICs1MTksNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAg
ICAgRnJhbWUqIGxvYWRTdWJmcmFtZShIVE1MRnJhbWVPd25lckVsZW1lbnQqLCBjb25zdCBLVVJM
JiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHJlZmVycmVyKTsKIAotICAgICAg
ICB2b2lkIHN1Ym1pdEZvcm1BZ2FpbigpOwotICAgICAgICB2b2lkIHN1Ym1pdEZvcm0oY29uc3Qg
RnJhbWVMb2FkUmVxdWVzdCYsIFBhc3NSZWZQdHI8RXZlbnQ+LCBib29sIGxvY2tIaXN0b3J5LCBi
b29sIGxvY2tCYWNrRm9yd2FyZExpc3QpOwotCiAgICAgICAgIEtVUkwgaGlzdG9yeVVSTChpbnQg
ZGlzdGFuY2UpOwogCiAgICAgICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBhcmd1bWVudCBpcyBhIEph
dmFTY3JpcHQgVVJMLgpAQCAtNTg1LDggKzU3NCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
ICAgICAgICBTdHJpbmcgbV9vdXRnb2luZ1JlZmVycmVyOwogCi0gICAgICAgIE93blB0cjxGb3Jt
U3VibWlzc2lvbj4gbV9kZWZlcnJlZEZvcm1TdWJtaXNzaW9uOwotCiAgICAgICAgIGJvb2wgbV9p
c0V4ZWN1dGluZ0phdmFTY3JpcHRGb3JtQWN0aW9uOwogICAgICAgICBib29sIG1faXNSdW5uaW5n
U2NyaXB0OwogCkBAIC02MTYsOCArNjAzLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAg
ICAgIGJvb2wgbV9jb250YWluc1BsdWdJbnM7CiAKLSAgICAgICAgUmVmUHRyPEhUTUxGb3JtRWxl
bWVudD4gbV9mb3JtQWJvdXRUb0JlU3VibWl0dGVkOwotICAgICAgICBIYXNoTWFwPFN0cmluZywg
U3RyaW5nPiBtX2Zvcm1WYWx1ZXNBYm91dFRvQmVTdWJtaXR0ZWQ7CiAgICAgICAgIEtVUkwgbV9z
dWJtaXR0ZWRGb3JtVVJMOwogICAgIAogICAgICAgICBUaW1lcjxGcmFtZUxvYWRlcj4gbV9yZWRp
cmVjdGlvblRpbWVyOwpJbmRleDogV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAJ
KHJldmlzaW9uIDQyMTQ2KQorKysgV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDExICszNywxMyBAQAogI2luY2x1ZGUgIkV2ZW50Lmgi
CiAjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgorI2lu
Y2x1ZGUgIkZvcm1TdGF0ZS5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVM
b2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiSGl0VGVz
dFJlcXVlc3QuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCisjaW5jbHVkZSAiSFRNTEZv
cm1FbGVtZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgogI2luY2x1ZGUg
Ik1vdXNlRXZlbnQuaCIKICNpbmNsdWRlICJOb2RlLmgiCkBAIC0yMTIsMTAgKzIxNCwxMCBAQCB2
b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6Y29udGV4dE1lbnVJCiAgICAgICAgICAgICBtX2Ns
aWVudC0+bG9va1VwSW5EaWN0aW9uYXJ5KGZyYW1lKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ09wZW5MaW5rOgotICAgICAgICAgICAgaWYgKEZy
YW1lKiB0YXJnZXRGcmFtZSA9IHJlc3VsdC50YXJnZXRGcmFtZSgpKQotICAgICAgICAgICAgICAg
IHRhcmdldEZyYW1lLT5sb2FkZXIoKS0+bG9hZEZyYW1lUmVxdWVzdFdpdGhGb3JtQW5kVmFsdWVz
KEZyYW1lTG9hZFJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0KHJlc3VsdC5hYnNvbHV0ZUxpbmtVUkwo
KSwgCi0gICAgICAgICAgICAgICAgICAgIGZyYW1lLT5sb2FkZXIoKS0+b3V0Z29pbmdSZWZlcnJl
cigpKSksIGZhbHNlLCBmYWxzZSwgMCwgMCwgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4oKSk7Ci0g
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICBpZiAoRnJhbWUqIHRhcmdldEZyYW1lID0gcmVz
dWx0LnRhcmdldEZyYW1lKCkpIHsKKyAgICAgICAgICAgICAgICB0YXJnZXRGcmFtZS0+bG9hZGVy
KCktPmxvYWRGcmFtZVJlcXVlc3QoRnJhbWVMb2FkUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QocmVz
dWx0LmFic29sdXRlTGlua1VSTCgpLCAKKyAgICAgICAgICAgICAgICAgICAgZnJhbWUtPmxvYWRl
cigpLT5vdXRnb2luZ1JlZmVycmVyKCkpKSwgZmFsc2UsIGZhbHNlLCAwLCAwKTsKKyAgICAgICAg
ICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIG9wZW5OZXdXaW5kb3cocmVzdWx0LmFic29sdXRl
TGlua1VSTCgpLCBmcmFtZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDb250
ZXh0TWVudUl0ZW1UYWdCb2xkOgpJbmRleDogV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCShyZXZpc2lvbiA0MjE0NikKKysrIFdlYkNv
cmUvcGFnZS9GcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Myw3ICsxNzMsNiBAQCBGcmFt
ZTo6RnJhbWUoUGFnZSogcGFnZSwgSFRNTEZyYW1lT3duZXJFCiBGcmFtZTo6fkZyYW1lKCkKIHsK
ICAgICBzZXRWaWV3KDApOwotICAgIGxvYWRlcigpLT5jbGVhclJlY29yZGVkRm9ybVZhbHVlcygp
OwogICAgIGxvYWRlcigpLT5jYW5jZWxBbmRDbGVhcigpOwogICAgIAogICAgIC8vIEZJWE1FOiBX
ZSBzaG91bGQgbm90IGJlIGRvaW5nIGFsbCB0aGlzIHdvcmsgaW5zaWRlIHRoZSBkZXN0cnVjdG9y
CkluZGV4OiBXZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL0No
YW5nZUxvZwkocmV2aXNpb24gNDIxNDYpCisrKyBXZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDA5LTAzLTMxICBEYXJpbiBBZGxlciAgPGRhcmlu
QGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIEhpc3RvcnkvV2ViSGlzdG9yeUl0ZW0ubW06CisgICAgICAgICgtW1dlYkhpc3RvcnlJ
dGVtIGRlc2NyaXB0aW9uXSk6CisgICAgICAgICgtW1dlYkhpc3RvcnlJdGVtIHRhcmdldEl0ZW1d
KToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5tbToKKyAg
ICAgICAgKFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaFdpbGxTdWJtaXRGb3JtKToKKyAg
ICAgICAgKiBXZWJWaWV3L1dlYlBERlZpZXcubW06CisgICAgICAgICgtW1dlYlBERlZpZXcgUERG
Vmlld1dpbGxDbGlja09uTGluazp3aXRoVVJMOl0pOgorCiAyMDA5LTAzLTMxICBBbmRlcnMgQ2Fy
bHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBS
b2Jlbi4KSW5kZXg6IFdlYktpdC9tYWMvSGlzdG9yeS9XZWJIaXN0b3J5SXRlbS5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQvbWFjL0hpc3RvcnkvV2ViSGlzdG9yeUl0ZW0ubW0JKHJldmlzaW9uIDQy
MTQ2KQorKysgV2ViS2l0L21hYy9IaXN0b3J5L1dlYkhpc3RvcnlJdGVtLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0yMTgsNyArMjE4LDggQEAgdm9pZCBXS05vdGlmeUhpc3RvcnlJdGVtQ2hhbmdlZCgp
CiAgICAgSGlzdG9yeUl0ZW0qIGNvcmVJdGVtID0gY29yZShfcHJpdmF0ZSk7CiAgICAgTlNNdXRh
YmxlU3RyaW5nICpyZXN1bHQgPSBbTlNNdXRhYmxlU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIl
QCAlQCIsIFtzdXBlciBkZXNjcmlwdGlvbl0sIChOU1N0cmluZyopY29yZUl0ZW0tPnVybFN0cmlu
ZygpXTsKICAgICBpZiAoY29yZUl0ZW0tPnRhcmdldCgpKSB7Ci0gICAgICAgIFtyZXN1bHQgYXBw
ZW5kRm9ybWF0OkAiIGluIFwiJUBcIiIsIChOU1N0cmluZyopY29yZUl0ZW0tPnRhcmdldCgpXTsK
KyAgICAgICAgTlNTdHJpbmcgKnRhcmdldCA9IGNvcmVJdGVtLT50YXJnZXQoKTsKKyAgICAgICAg
W3Jlc3VsdCBhcHBlbmRGb3JtYXQ6QCIgaW4gXCIlQFwiIiwgdGFyZ2V0XTsKICAgICB9CiAgICAg
aWYgKGNvcmVJdGVtLT5pc1RhcmdldEl0ZW0oKSkgewogICAgICAgICBbcmVzdWx0IGFwcGVuZFN0
cmluZzpAIiAqdGFyZ2V0KiJdOwpAQCAtNTc3LDEwICs1NzgsNyBAQCBzdGF0aWMgV2ViV2luZG93
V2F0Y2hlciAqX3dpbmRvd1dhdGNoZXIgCiAtIChXZWJIaXN0b3J5SXRlbSAqKXRhcmdldEl0ZW0K
IHsgICAgCiAgICAgQVNTRVJUX01BSU5fVEhSRUFEKCk7Ci0gICAgSGlzdG9yeUl0ZW0qIGNvcmVJ
dGVtID0gY29yZShfcHJpdmF0ZSk7Ci0gICAgaWYgKGNvcmVJdGVtLT5pc1RhcmdldEl0ZW0oKSB8
fCAhY29yZUl0ZW0tPmhhc0NoaWxkcmVuKCkpCi0gICAgICAgIHJldHVybiBzZWxmOwotICAgIHJl
dHVybiBraXQoY29yZUl0ZW0tPnJlY3Vyc2VUb0ZpbmRUYXJnZXRJdGVtKCkpOworICAgIHJldHVy
biBraXQoY29yZShfcHJpdmF0ZSktPnRhcmdldEl0ZW0oKSk7CiB9CiAKICsgKHZvaWQpX3JlbGVh
c2VBbGxQZW5kaW5nUGFnZUNhY2hlcwpJbmRleDogV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9X
ZWJGcmFtZUxvYWRlckNsaWVudC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYkNvcmVT
dXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tCShyZXZpc2lvbiA0MjE0NikKKysrIFdlYktp
dC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTY5OSwxMCArNjk5LDExIEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3Bh
dGNoV2lsbFMKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIE5TTXV0YWJsZURpY3Rpb25h
cnkgKmRpY3Rpb25hcnkgPSBbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRXaXRoQ2Fw
YWNpdHk6Zm9ybVN0YXRlLT52YWx1ZXMoKS5zaXplKCldOwotICAgIEhhc2hNYXA8U3RyaW5nLCBT
dHJpbmc+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBmb3JtU3RhdGUtPnZhbHVlcygpLmVuZCgpOwot
ICAgIGZvciAoSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZm9y
bVN0YXRlLT52YWx1ZXMoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIFtkaWN0
aW9uYXJ5IHNldE9iamVjdDppdC0+c2Vjb25kIGZvcktleTppdC0+Zmlyc3RdOworICAgIGNvbnN0
IFN0cmluZ1BhaXJWZWN0b3ImIHRleHRGaWVsZFZhbHVlcyA9IGZvcm1TdGF0ZS0+dGV4dEZpZWxk
VmFsdWVzKCk7CisgICAgc2l6ZV90IHNpemUgPSB0ZXh0RmllbGRWYWx1ZXMuc2l6ZSgpOworICAg
IE5TTXV0YWJsZURpY3Rpb25hcnkgKmRpY3Rpb25hcnkgPSBbW05TTXV0YWJsZURpY3Rpb25hcnkg
YWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6c2l6ZV07CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBzaXplOyArK2kpCisgICAgICAgIFtkaWN0aW9uYXJ5IHNldE9iamVjdDp0ZXh0RmllbGRWYWx1
ZXNbaV0uc2Vjb25kIGZvcktleTp0ZXh0RmllbGRWYWx1ZXNbaV0uZmlyc3RdOwogCiAgICAgQ2Fs
bEZvcm1EZWxlZ2F0ZShnZXRXZWJWaWV3KG1fd2ViRnJhbWUuZ2V0KCkpLCBAc2VsZWN0b3IoZnJh
bWU6c291cmNlRnJhbWU6d2lsbFN1Ym1pdEZvcm06d2l0aFZhbHVlczpzdWJtaXNzaW9uTGlzdGVu
ZXI6KSwgbV93ZWJGcmFtZS5nZXQoKSwga2l0KGZvcm1TdGF0ZS0+c291cmNlRnJhbWUoKSksIGtp
dChmb3JtU3RhdGUtPmZvcm0oKSksIGRpY3Rpb25hcnksIHNldFVwUG9saWN5TGlzdGVuZXIoZnVu
Y3Rpb24pLmdldCgpKTsKIApJbmRleDogV2ViS2l0L21hYy9XZWJWaWV3L1dlYlBERlZpZXcubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYlBERlZpZXcubW0JKHJldmlzaW9u
IDQyMTQ2KQorKysgV2ViS2l0L21hYy9XZWJWaWV3L1dlYlBERlZpZXcubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3
LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ3LDkgKzQ3LDExIEBACiAj
aW1wb3J0ICJXZWJWaWV3SW50ZXJuYWwuaCIKICNpbXBvcnQgPFBERktpdC9QREZLaXQuaD4KICNp
bXBvcnQgPFdlYkNvcmUvRXZlbnROYW1lcy5oPgorI2ltcG9ydCA8V2ViQ29yZS9Gb3JtU3RhdGUu
aD4KICNpbXBvcnQgPFdlYkNvcmUvRnJhbWUuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRnJhbWVMb2Fk
ZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvRnJhbWVMb2FkUmVxdWVzdC5oPgorI2ltcG9ydCA8V2Vi
Q29yZS9GcmFtZUxvYWRlci5oPgorI2ltcG9ydCA8V2ViQ29yZS9IVE1MRm9ybUVsZW1lbnQuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvS1VSTC5oPgogI2ltcG9ydCA8V2ViQ29yZS9LZXlib2FyZEV2ZW50
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL01vdXNlRXZlbnQuaD4KQEAgLTk0MSwxNiArOTQzLDE3IEBA
IHN0YXRpYyBCT09MIF9QREZTZWxlY3Rpb25zQXJlRXF1YWwoUERGU2UKICAgICAgICAgZGVmYXVs
dDoKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBpZiAoYnV0dG9uICE9IG5vQnV0dG9u
KQorICAgIGlmIChidXR0b24gIT0gbm9CdXR0b24pIHsKICAgICAgICAgZXZlbnQgPSBNb3VzZUV2
ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmNsaWNrRXZlbnQsIHRydWUsIHRydWUsIDAsIFtuc0V2
ZW50IGNsaWNrQ291bnRdLCAwLCAwLCAwLCAwLAogICAgICAgICAgICAgW25zRXZlbnQgbW9kaWZp
ZXJGbGFnc10gJiBOU0NvbnRyb2xLZXlNYXNrLAogICAgICAgICAgICAgW25zRXZlbnQgbW9kaWZp
ZXJGbGFnc10gJiBOU0FsdGVybmF0ZUtleU1hc2ssCiAgICAgICAgICAgICBbbnNFdmVudCBtb2Rp
ZmllckZsYWdzXSAmIE5TU2hpZnRLZXlNYXNrLAogICAgICAgICAgICAgW25zRXZlbnQgbW9kaWZp
ZXJGbGFnc10gJiBOU0NvbW1hbmRLZXlNYXNrLAogICAgICAgICAgICAgYnV0dG9uLCAwLCAwLCB0
cnVlKTsKKyAgICB9CiAKICAgICAvLyBDYWxsIHRvIHRoZSBmcmFtZSBsb2FkZXIgYmVjYXVzZSB0
aGlzIGlzIHdoZXJlIG91ciBzZWN1cml0eSBjaGVja3MgYXJlIG1hZGUuCi0gICAgY29yZShbZGF0
YVNvdXJjZSB3ZWJGcmFtZV0pLT5sb2FkZXIoKS0+bG9hZEZyYW1lUmVxdWVzdFdpdGhGb3JtQW5k
VmFsdWVzKFJlc291cmNlUmVxdWVzdChVUkwpLCBmYWxzZSwgZmFsc2UsIGV2ZW50LmdldCgpLCAw
LCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPigpKTsKKyAgICBjb3JlKFtkYXRhU291cmNlIHdlYkZy
YW1lXSktPmxvYWRlcigpLT5sb2FkRnJhbWVSZXF1ZXN0KFJlc291cmNlUmVxdWVzdChVUkwpLCBm
YWxzZSwgZmFsc2UsIGV2ZW50LmdldCgpLCAwKTsKIH0KIAogLSAodm9pZClQREZWaWV3T3BlblBE
RkluTmF0aXZlQXBwbGljYXRpb246KFBERlZpZXcgKilzZW5kZXIKSW5kZXg6IExheW91dFRlc3Rz
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9u
IDQyMTQ2KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTYgQEAKKzIwMDktMDMtMzEgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZmFzdC9sb2Fk
ZXIvb251bmxvYWQtZm9ybS1zdWJtaXQtY3Jhc2gtMi1leHBlY3RlZC50eHQ6CisgICAgICAgICog
ZmFzdC9sb2FkZXIvb251bmxvYWQtZm9ybS1zdWJtaXQtY3Jhc2gtMi5odG1sOgorICAgICAgICAq
IGZhc3QvbG9hZGVyL29udW5sb2FkLWZvcm0tc3VibWl0LWNyYXNoLWV4cGVjdGVkLnR4dDoKKyAg
ICAgICAgKiBmYXN0L2xvYWRlci9vbnVubG9hZC1mb3JtLXN1Ym1pdC1jcmFzaC5odG1sOgorICAg
ICAgICAqIGZhc3QvbG9hZGVyL3Jlc291cmNlcy9vbnVubG9hZC1mb3JtLXN1Ym1pdC1jcmFzaDIu
aHRtbDogUmVtb3ZlZC4KKyAgICAgICAgKiBmYXN0L2xvYWRlci9yZXNvdXJjZXMvb251bmxvYWQt
Zm9ybS1zdWJtaXQtZmFpbHVyZS5odG1sOiBDb3BpZWQgZnJvbSBMYXlvdXRUZXN0cy9mYXN0L2xv
YWRlci9yZXNvdXJjZXMvb251bmxvYWQtZm9ybS1zdWJtaXQtY3Jhc2gyLmh0bWwuCisgICAgICAg
ICogZmFzdC9sb2FkZXIvcmVzb3VyY2VzL29udW5sb2FkLWZvcm0tc3VibWl0LXN1Y2Nlc3MuaHRt
bDogQ29waWVkIGZyb20gTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIvcmVzb3VyY2VzL29udW5sb2Fk
LWZvcm0tc3VibWl0LWNyYXNoMi5odG1sLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9odHRwL3Rl
c3RzL25hdmlnYXRpb24vc3VjY2VzczIwMC1mcmFtZXMtbG9hZHNhbWUtZXhwZWN0ZWQudHh0Ogor
CiAyMDA5LTAzLTMxICBFcmljIENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9s
b2FkZXIvb251bmxvYWQtZm9ybS1zdWJtaXQtY3Jhc2gtMi1leHBlY3RlZC50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIvb251bmxvYWQtZm9ybS1zdWJtaXQtY3Jhc2gt
Mi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDQyMTQ2KQorKysgTGF5b3V0VGVzdHMvZmFzdC9sb2Fk
ZXIvb251bmxvYWQtZm9ybS1zdWJtaXQtY3Jhc2gtMi1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwyIEBACiBtYWluIGZyYW1lIC0gaGFzIDEgb251bmxvYWQgaGFuZGxlcihz
KQotbWFpbiBmcmFtZSAtIGhhcyAxIG9udW5sb2FkIGhhbmRsZXIocykKLVNVQ0NFU1MKK1NVQ0NF
U1MuIElmIHlvdSBzZWUgdGhpcyBwYWdlIHRoZSB0ZXN0IGhhcyBzdWNjZXNzZnVsbHkgbG9hZGVk
IGEgbmV3IHBhZ2Ugd2l0aG91dCBjcmFzaGluZyBvciBzdWJtaXR0aW5nIGEgZm9ybSBmcm9tIGFu
IG9udW5sb2FkIGhhbmRsZXIuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2xvYWRlci9vbnVubG9h
ZC1mb3JtLXN1Ym1pdC1jcmFzaC0yLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC9sb2FkZXIvb251bmxvYWQtZm9ybS1zdWJtaXQtY3Jhc2gtMi5odG1sCShyZXZpc2lvbiA0MjE0
NikKKysrIExheW91dFRlc3RzL2Zhc3QvbG9hZGVyL29udW5sb2FkLWZvcm0tc3VibWl0LWNyYXNo
LTIuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtOSw5ICs5LDkgQEAKICAgICAgICAgICAgICAgICAg
ICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOwogICAgICAgICAgICAgICAgICAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CiAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGxvY2F0aW9uLmhyZWYgPSAiYWJvdXQ6YmxhbmsiOworICAgICAg
ICAgICAgICAgIGxvY2F0aW9uLmhyZWYgPSAicmVzb3VyY2VzL29udW5sb2FkLWZvcm0tc3VibWl0
LXN1Y2Nlc3MuaHRtbCI7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXN1bHQiKS5pbm5lclRleHQgPSAiU1VDQ0VTUyI7Cisg
ICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlc3VsdCIpLmlubmVyVGV4
dCA9ICJGQUlMIjsKICAgICAgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKQogICAgICAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25l
KCk7CiAgICAgICAgICAgICB9CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2xvYWRlci9vbnVubG9h
ZC1mb3JtLXN1Ym1pdC1jcmFzaC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC9sb2FkZXIvb251bmxvYWQtZm9ybS1zdWJtaXQtY3Jhc2gtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiA0MjE0NikKKysrIExheW91dFRlc3RzL2Zhc3QvbG9hZGVyL29udW5sb2FkLWZvcm0t
c3VibWl0LWNyYXNoLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDIgQEAK
IG1haW4gZnJhbWUgLSBoYXMgMSBvbnVubG9hZCBoYW5kbGVyKHMpCi1CdWc6IHJkYXI6Ly9wcm9i
bGVtLzQyNjgyNzggU3VibWl0dGluZyBhIGZvcm0gaW4gb25VbmxvYWQgZXZlbnQgaGFuZGxlciBj
YXVzZXMgY3Jhc2ggaW4gLVtXZWJEYXRhU291cmNlKFdlYlByaXZhdGUpIF9jb21taXRJZlJlYWR5
Ol0KLQotSWYgdGhpcyB0ZXN0IHBhc3NlcywgeW91J2xsIHNlZSBhIFBBU1MgbWVzc2FnZSBiZWxv
dy4KLQotUEFTUzogU2FmYXJpIGRpZG4ndCBjcmFzaC4KK1NVQ0NFU1MuIElmIHlvdSBzZWUgdGhp
cyBwYWdlIHRoZSB0ZXN0IGhhcyBzdWNjZXNzZnVsbHkgbG9hZGVkIGEgbmV3IHBhZ2Ugd2l0aG91
dCBjcmFzaGluZyBvciBzdWJtaXR0aW5nIGEgZm9ybSBmcm9tIGFuIG9udW5sb2FkIGhhbmRsZXIu
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2xvYWRlci9vbnVubG9hZC1mb3JtLXN1Ym1pdC1jcmFz
aC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvbG9hZGVyL29udW5sb2FkLWZv
cm0tc3VibWl0LWNyYXNoLmh0bWwJKHJldmlzaW9uIDQyMTQ2KQorKysgTGF5b3V0VGVzdHMvZmFz
dC9sb2FkZXIvb251bmxvYWQtZm9ybS1zdWJtaXQtY3Jhc2guaHRtbAkod29ya2luZyBjb3B5KQpA
QCAtNiw3ICs2LDcgQEAKICAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0
VW50aWxEb25lKCk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHdpbmRvdy5zZXRUaW1l
b3V0KCJsb2NhdGlvbi5ocmVmPWxvY2F0aW9uLmhyZWYiLCAwKTsgLy8gY2hlYXAgd2F5IHRvIGZv
cmNlIGFuIHVubG9hZAorICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoImxvY2F0aW9uLmhy
ZWY9J3Jlc291cmNlcy9vbnVubG9hZC1mb3JtLXN1Ym1pdC1zdWNjZXNzLmh0bWwnIiwgMCk7CiAg
ICAgICAgIDwvc2NyaXB0PgogICAgICAgICA8cD5UaGlzIGlzIGp1c3QgYSBkdW1teSBwYWdlIHRo
YXQgbG9hZHMgdGhlIG5leHQgcGFnZSB0byBzZWUgaWYgd2UgY3Jhc2guPC9wPgogICAgICAgICA8
Zm9ybSBuYW1lPSJteUZvcm0iIGFjdGlvbj0icmVzb3VyY2VzL29udW5sb2FkLWZvcm0tc3VibWl0
LWNyYXNoMi5odG1sIj48L2Zvcm0+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2xvYWRlci9yZXNv
dXJjZXMvb251bmxvYWQtZm9ybS1zdWJtaXQtY3Jhc2gyLmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC9sb2FkZXIvcmVzb3VyY2VzL29udW5sb2FkLWZvcm0tc3VibWl0LWNyYXNo
Mi5odG1sCShyZXZpc2lvbiA0MjE0NikKKysrIExheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3Jlc291
cmNlcy9vbnVubG9hZC1mb3JtLXN1Ym1pdC1jcmFzaDIuaHRtbAkod29ya2luZyBjb3B5KQpAQCAt
MSwyNCArMCwwIEBACi08aHRtbD4KLSAgICA8aGVhZD4KLSAgICAgICAgPHNjcmlwdD4KLSAgICAg
ICAgICAgIGZ1bmN0aW9uIHByaW50KG1lc3NhZ2UpIHsKLSAgICAgICAgICAgICAgICB2YXIgcGFy
YWdyYXBoID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgicCIpOwotICAgICAgICAgICAgICAgIHBh
cmFncmFwaC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShtZXNzYWdlKSk7Ci0g
ICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNvbGUiKS5hcHBlbmRD
aGlsZChwYXJhZ3JhcGgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmdW5jdGlvbiBj
b250aW51ZVRlc3RBZnRlck5hdmlnYXRpb24oKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCi0gICAgICAgICAgICAgICAgICAg
IGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgPC9zY3JpcHQ+Ci0gICAgPC9oZWFkPgotCi0gICAgPGJvZHkgb25sb2FkPSJjb250aW51ZVRl
c3RBZnRlck5hdmlnYXRpb24oKSI+Ci0gICAgICAgIDxwPkJ1ZzogcmRhcjovL3Byb2JsZW0vNDI2
ODI3OCBTdWJtaXR0aW5nIGEgZm9ybSBpbiBvblVubG9hZCBldmVudCBoYW5kbGVyIGNhdXNlcyBj
cmFzaCBpbiAtW1dlYkRhdGFTb3VyY2UoV2ViUHJpdmF0ZSkgX2NvbW1pdElmUmVhZHk6XTwvcD4g
Ci0gICAgICAgIDxwPklmIHRoaXMgdGVzdCBwYXNzZXMsIHlvdSdsbCBzZWUgYSBQQVNTIG1lc3Nh
Z2UgYmVsb3cuPC9wPgotICAgICAgICA8aHI+Ci0gICAgICAgIDxwPlBBU1M6IFNhZmFyaSBkaWRu
J3QgY3Jhc2guPC9wPgotICAgIDwvYm9keT4KLTxodG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9m
IGZpbGUKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3Jlc291cmNlcy9vbnVubG9hZC1m
b3JtLXN1Ym1pdC1mYWlsdXJlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9s
b2FkZXIvcmVzb3VyY2VzL29udW5sb2FkLWZvcm0tc3VibWl0LWZhaWx1cmUuaHRtbAkocmV2aXNp
b24gNDIxNDApCShmcm9tIExheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3Jlc291cmNlcy9vbnVubG9h
ZC1mb3JtLXN1Ym1pdC1jcmFzaDIuaHRtbDo0MjE0MCkKKysrIExheW91dFRlc3RzL2Zhc3QvbG9h
ZGVyL3Jlc291cmNlcy9vbnVubG9hZC1mb3JtLXN1Ym1pdC1mYWlsdXJlLmh0bWwJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwyNCBAQAorPGh0bWw+CisgICAgPGhlYWQ+CisgICAgICAgIDxzY3Jp
cHQ+CisgICAgICAgICAgICBmdW5jdGlvbiBwcmludChtZXNzYWdlKSB7CisgICAgICAgICAgICAg
ICAgdmFyIHBhcmFncmFwaCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInAiKTsKKyAgICAgICAg
ICAgICAgICBwYXJhZ3JhcGguYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobWVz
c2FnZSkpOworICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xl
IikuYXBwZW5kQ2hpbGQocGFyYWdyYXBoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ZnVuY3Rpb24gY29udGludWVUZXN0QWZ0ZXJOYXZpZ2F0aW9uKCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAg
ICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgICAgICAg
ICB9CisgICAgICAgIDwvc2NyaXB0PgorICAgIDwvaGVhZD4KKworICAgIDxib2R5IG9ubG9hZD0i
Y29udGludWVUZXN0QWZ0ZXJOYXZpZ2F0aW9uKCkiPgorICAgICAgICA8cD5CdWc6IHJkYXI6Ly9w
cm9ibGVtLzQyNjgyNzggU3VibWl0dGluZyBhIGZvcm0gaW4gb25VbmxvYWQgZXZlbnQgaGFuZGxl
ciBjYXVzZXMgY3Jhc2ggaW4gLVtXZWJEYXRhU291cmNlKFdlYlByaXZhdGUpIF9jb21taXRJZlJl
YWR5Ol08L3A+IAorICAgICAgICA8cD5JZiB0aGlzIHRlc3QgcGFzc2VzLCB5b3UnbGwgc2VlIGEg
UEFTUyBtZXNzYWdlIGJlbG93LjwvcD4KKyAgICAgICAgPGhyPgorICAgICAgICA8cD5QQVNTOiBT
YWZhcmkgZGlkbid0IGNyYXNoLjwvcD4KKyAgICA8L2JvZHk+Cis8aHRtbD4KXCBObyBuZXdsaW5l
IGF0IGVuZCBvZiBmaWxlCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2xvYWRlci9yZXNvdXJjZXMv
b251bmxvYWQtZm9ybS1zdWJtaXQtZmFpbHVyZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3QvbG9hZGVyL3Jlc291cmNlcy9vbnVubG9hZC1mb3JtLXN1Ym1pdC1mYWlsdXJlLmh0
bWwJKHJldmlzaW9uIDQyMTQwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIvcmVzb3VyY2Vz
L29udW5sb2FkLWZvcm0tc3VibWl0LWZhaWx1cmUuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMSwx
MiArMSw2IEBACiA8aHRtbD4KICAgICA8aGVhZD4KICAgICAgICAgPHNjcmlwdD4KLSAgICAgICAg
ICAgIGZ1bmN0aW9uIHByaW50KG1lc3NhZ2UpIHsKLSAgICAgICAgICAgICAgICB2YXIgcGFyYWdy
YXBoID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgicCIpOwotICAgICAgICAgICAgICAgIHBhcmFn
cmFwaC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShtZXNzYWdlKSk7Ci0gICAg
ICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNvbGUiKS5hcHBlbmRDaGls
ZChwYXJhZ3JhcGgpOwotICAgICAgICAgICAgfQotCiAgICAgICAgICAgICBmdW5jdGlvbiBjb250
aW51ZVRlc3RBZnRlck5hdmlnYXRpb24oKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
IGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCkBAIC0xOSw2ICsxMyw2IEBACiAgICAg
ICAgIDxwPkJ1ZzogcmRhcjovL3Byb2JsZW0vNDI2ODI3OCBTdWJtaXR0aW5nIGEgZm9ybSBpbiBv
blVubG9hZCBldmVudCBoYW5kbGVyIGNhdXNlcyBjcmFzaCBpbiAtW1dlYkRhdGFTb3VyY2UoV2Vi
UHJpdmF0ZSkgX2NvbW1pdElmUmVhZHk6XTwvcD4gCiAgICAgICAgIDxwPklmIHRoaXMgdGVzdCBw
YXNzZXMsIHlvdSdsbCBzZWUgYSBQQVNTIG1lc3NhZ2UgYmVsb3cuPC9wPgogICAgICAgICA8aHI+
Ci0gICAgICAgIDxwPlBBU1M6IFNhZmFyaSBkaWRuJ3QgY3Jhc2guPC9wPgorICAgICAgICA8cD5G
QUlMOiBZb3Ugc2hvdWxkIG5vdCByZWFjaCB0aGlzIHBhZ2UgYW55IG1vcmUsIHNpbmNlIGEgZm9y
bSBzdWJtaXNzaW9uIGluIGFuIG9udW5sb2FkIGhhbmRsZXIgaGFzIG5vIGVmZmVjdC48L3A+CiAg
ICAgPC9ib2R5PgotPGh0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorPGh0bWw+Cklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2xvYWRlci9yZXNvdXJjZXMvb251bmxvYWQtZm9ybS1zdWJt
aXQtc3VjY2Vzcy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3Jl
c291cmNlcy9vbnVubG9hZC1mb3JtLXN1Ym1pdC1zdWNjZXNzLmh0bWwJKHJldmlzaW9uIDQyMTQw
KQkoZnJvbSBMYXlvdXRUZXN0cy9mYXN0L2xvYWRlci9yZXNvdXJjZXMvb251bmxvYWQtZm9ybS1z
dWJtaXQtY3Jhc2gyLmh0bWw6NDIxNDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2xvYWRlci9yZXNv
dXJjZXMvb251bmxvYWQtZm9ybS1zdWJtaXQtc3VjY2Vzcy5odG1sCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMjQgQEAKKzxodG1sPgorICAgIDxoZWFkPgorICAgICAgICA8c2NyaXB0PgorICAg
ICAgICAgICAgZnVuY3Rpb24gcHJpbnQobWVzc2FnZSkgeworICAgICAgICAgICAgICAgIHZhciBw
YXJhZ3JhcGggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJwIik7CisgICAgICAgICAgICAgICAg
cGFyYWdyYXBoLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG1lc3NhZ2UpKTsK
KyAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpLmFwcGVu
ZENoaWxkKHBhcmFncmFwaCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZ1bmN0aW9u
IGNvbnRpbnVlVGVzdEFmdGVyTmF2aWdhdGlvbigpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgICAgICAg
ICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgICAgICAgICAgfQorICAg
ICAgICA8L3NjcmlwdD4KKyAgICA8L2hlYWQ+CisKKyAgICA8Ym9keSBvbmxvYWQ9ImNvbnRpbnVl
VGVzdEFmdGVyTmF2aWdhdGlvbigpIj4KKyAgICAgICAgPHA+QnVnOiByZGFyOi8vcHJvYmxlbS80
MjY4Mjc4IFN1Ym1pdHRpbmcgYSBmb3JtIGluIG9uVW5sb2FkIGV2ZW50IGhhbmRsZXIgY2F1c2Vz
IGNyYXNoIGluIC1bV2ViRGF0YVNvdXJjZShXZWJQcml2YXRlKSBfY29tbWl0SWZSZWFkeTpdPC9w
PiAKKyAgICAgICAgPHA+SWYgdGhpcyB0ZXN0IHBhc3NlcywgeW91J2xsIHNlZSBhIFBBU1MgbWVz
c2FnZSBiZWxvdy48L3A+CisgICAgICAgIDxocj4KKyAgICAgICAgPHA+UEFTUzogU2FmYXJpIGRp
ZG4ndCBjcmFzaC48L3A+CisgICAgPC9ib2R5PgorPGh0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQg
b2YgZmlsZQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIvcmVzb3VyY2VzL29udW5sb2Fk
LWZvcm0tc3VibWl0LXN1Y2Nlc3MuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0
L2xvYWRlci9yZXNvdXJjZXMvb251bmxvYWQtZm9ybS1zdWJtaXQtc3VjY2Vzcy5odG1sCShyZXZp
c2lvbiA0MjE0MCkKKysrIExheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3Jlc291cmNlcy9vbnVubG9h
ZC1mb3JtLXN1Ym1pdC1zdWNjZXNzLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTEsMTIgKzEsNiBA
QAogPGh0bWw+CiAgICAgPGhlYWQ+CiAgICAgICAgIDxzY3JpcHQ+Ci0gICAgICAgICAgICBmdW5j
dGlvbiBwcmludChtZXNzYWdlKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHBhcmFncmFwaCA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoInAiKTsKLSAgICAgICAgICAgICAgICBwYXJhZ3JhcGguYXBw
ZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobWVzc2FnZSkpOwotICAgICAgICAgICAg
ICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlIikuYXBwZW5kQ2hpbGQocGFyYWdy
YXBoKTsKLSAgICAgICAgICAgIH0KLQogICAgICAgICAgICAgZnVuY3Rpb24gY29udGludWVUZXN0
QWZ0ZXJOYXZpZ2F0aW9uKCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBpZiAod2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyKQpAQCAtMTYsOSArMTAsNiBAQAogICAgIDwvaGVhZD4K
IAogICAgIDxib2R5IG9ubG9hZD0iY29udGludWVUZXN0QWZ0ZXJOYXZpZ2F0aW9uKCkiPgotICAg
ICAgICA8cD5CdWc6IHJkYXI6Ly9wcm9ibGVtLzQyNjgyNzggU3VibWl0dGluZyBhIGZvcm0gaW4g
b25VbmxvYWQgZXZlbnQgaGFuZGxlciBjYXVzZXMgY3Jhc2ggaW4gLVtXZWJEYXRhU291cmNlKFdl
YlByaXZhdGUpIF9jb21taXRJZlJlYWR5Ol08L3A+IAotICAgICAgICA8cD5JZiB0aGlzIHRlc3Qg
cGFzc2VzLCB5b3UnbGwgc2VlIGEgUEFTUyBtZXNzYWdlIGJlbG93LjwvcD4KLSAgICAgICAgPGhy
PgotICAgICAgICA8cD5QQVNTOiBTYWZhcmkgZGlkbid0IGNyYXNoLjwvcD4KKyAgICAgICAgPHA+
U1VDQ0VTUy4gSWYgeW91IHNlZSB0aGlzIHBhZ2UgdGhlIHRlc3QgaGFzIHN1Y2Nlc3NmdWxseSBs
b2FkZWQgYSBuZXcgcGFnZSB3aXRob3V0IGNyYXNoaW5nIG9yIHN1Ym1pdHRpbmcgYSBmb3JtIGZy
b20gYW4gb251bmxvYWQgaGFuZGxlci48L3A+CiAgICAgPC9ib2R5PgotPGh0bWw+ClwgTm8gbmV3
bGluZSBhdCBlbmQgb2YgZmlsZQorPGh0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9t
YWMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL3N1Y2Nlc3MyMDAtZnJhbWVzLWxvYWRzYW1lLWV4cGVj
dGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvaHR0cC90ZXN0
cy9uYXZpZ2F0aW9uL3N1Y2Nlc3MyMDAtZnJhbWVzLWxvYWRzYW1lLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gNDIxNDYpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvaHR0cC90ZXN0cy9uYXZp
Z2F0aW9uL3N1Y2Nlc3MyMDAtZnJhbWVzLWxvYWRzYW1lLWV4cGVjdGVkLnR4dAkod29ya2luZyBj
b3B5KQpAQCAtMTI2LDcgKzEyNiw1IEBAIGxheWVyIGF0ICgwLDApIHNpemUgODAweDYwMAogICAg
ICAgICBodHRwOi8vMTI3LjAuMC4xOjgwMDAvbmF2aWdhdGlvbi9zdWNjZXNzMjAwLWZyYW1lcy1s
b2Fkc2FtZS5odG1sICAqKm5hdiB0YXJnZXQqKgogY3Vyci0+ICBodHRwOi8vMTI3LjAuMC4xOjgw
MDAvbmF2aWdhdGlvbi9yZXNvdXJjZXMvZnJhbWVzZXQucGw/ZnJhbWVVUkw9c3VjY2VzczIwMC5o
dG1sICAqKm5hdiB0YXJnZXQqKgogICAgICAgICAgICAgaHR0cDovLzEyNy4wLjAuMTo4MDAwL25h
dmlnYXRpb24vcmVzb3VyY2VzL290aGVycGFnZS5odG1sIChpbiBmcmFtZSAiZm9vdGVyIikKLSAg
ICAgICAgICAgIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy9vdGhl
cnBhZ2UuaHRtbCAoaW4gZnJhbWUgImZvb3RlciIpCi0gICAgICAgICAgICBodHRwOi8vMTI3LjAu
MC4xOjgwMDAvbmF2aWdhdGlvbi9yZXNvdXJjZXMvc3VjY2VzczIwMC5odG1sIChpbiBmcmFtZSAi
bWFpbiIpCiAgICAgICAgICAgICBodHRwOi8vMTI3LjAuMC4xOjgwMDAvbmF2aWdhdGlvbi9yZXNv
dXJjZXMvc3VjY2VzczIwMC5odG1sIChpbiBmcmFtZSAibWFpbiIpCiA9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29161</attachid>
            <date>2009-04-01 09:47:30 -0700</date>
            <delta_ts>2009-04-01 14:23:51 -0700</delta_ts>
            <desc>even closer</desc>
            <filename>FormPatch.txt</filename>
            <type>text/plain</type>
            <size>88541</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MjE0OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTM1IEBACisyMDA5LTAzLTMxICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCdWcg
MjIzNzg6IENyYXNoIHN1Ym1pdHRpbmcgYSBmb3JtIHdoZW4gcGFyc2luZyBhbiBYSFRNTCBkb2N1
bWVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIz
NzgKKyAgICAgICAgcmRhcjovL3Byb2JsZW0vNjM4ODM3NworCisgICAgICAgICogV2ViQ29yZS5i
YXNlLmV4cDogVXBkYXRlZC4KKworICAgICAgICAqIGhpc3RvcnkvSGlzdG9yeUl0ZW0uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SGlzdG9yeUl0ZW06Okhpc3RvcnlJdGVtKTogUmVuYW1lZCBtX3N1
Ykl0ZW1zIHRvIG1fY2hpbGRyZW4uCisgICAgICAgIFVzZWQgdW5jaGVja2VkQXBwZW5kIGJlY2F1
c2Ugd2UgcmVzZXJ2ZUluaXRpYWxDYXBhY2l0eS4KKyAgICAgICAgKFdlYkNvcmU6Okhpc3RvcnlJ
dGVtOjphZGRDaGlsZEl0ZW0pOiBSZW5hbWVkIG1fc3ViSXRlbXMgdG8gbV9jaGlsZHJlbi4KKyAg
ICAgICAgQWRkZWQgYW4gYXNzZXJ0aW9uIHRoYXQgdGhpcyBpcyBvbmx5IHVzZWQgdG8gYWRkIGl0
ZW1zIHRoYXQgZG9uJ3QgaGF2ZQorICAgICAgICBkdXBsaWNhdGUgZnJhbWUgbmFtZXMuCisgICAg
ICAgIChXZWJDb3JlOjpIaXN0b3J5SXRlbTo6c2V0Q2hpbGRJdGVtKTogQWRkZWQuIFJlcGxhY2Vz
IGFuIGV4aXN0aW5nIGl0ZW0KKyAgICAgICAgaWYgYW55LCBwcmVzZXJ2aW5nIHRoZSBpc1Rhcmdl
dEl0ZW0gZmxhZy4KKyAgICAgICAgKFdlYkNvcmU6Okhpc3RvcnlJdGVtOjpjaGlsZEl0ZW1XaXRo
VGFyZ2V0KTogUmVuYW1lZCBmcm9tIGNoaWxkSXRlbVdpdGhOYW1lCisgICAgICAgIGZvciBjb25z
aXN0ZW5jeSB3aXRoIHRoZSBvdGhlciBmdW5jdGlvbnMgaGVyZSB0aGF0IGFsbCBjYWxsIHRoZSBm
cmFtZSBuYW1lIHRoZQorICAgICAgICAidGFyZ2V0Ii4gQWxzbyB1cGRhdGVkIGZvciByZW5hbWUg
b2YgbV9zdWJJdGVtcyB0byBtX2NoaWxkcmVuLgorICAgICAgICAoV2ViQ29yZTo6SGlzdG9yeUl0
ZW06OmZpbmRUYXJnZXRJdGVtKTogUmVuYW1lZCBmcm9tIHJlY3Vyc2VUb0ZpbmRUYXJnZXRJdGVt
LgorICAgICAgICBSZW1vdmVkIHVubmVlZGVkIHNpemUgY2hlY2suCisgICAgICAgIChXZWJDb3Jl
OjpIaXN0b3J5SXRlbTo6dGFyZ2V0SXRlbSk6IENoYW5nZWQgdG8gYWx3YXlzIHJldHVybiB0aGUg
dG9wIGl0ZW0KKyAgICAgICAgaWYgbm8gaXRlbSBoYXMgdGhlIGlzVGFyZ2V0SXRlbSBmbGFnIHNl
dC4gVGhlIG9sZCB2ZXJzaW9uIHdvdWxkIGluc3RlYWQgcmV0dXJuCisgICAgICAgIDAgaW4gc29t
ZSBjYXNlcywgYnV0IHJldHVybiB0aGUgdG9wIGl0ZW0gaWYgaXQgaGFkIG5vIGNoaWxkcmVuLgor
ICAgICAgICAoV2ViQ29yZTo6SGlzdG9yeUl0ZW06OmNoaWxkcmVuKTogUmVuYW1lZCBtX3N1Ykl0
ZW1zIHRvIG1fY2hpbGRyZW4uCisgICAgICAgIChXZWJDb3JlOjpIaXN0b3J5SXRlbTo6aGFzQ2hp
bGRyZW4pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Okhpc3RvcnlJdGVtOjpzaG93VHJlZVdp
dGhJbmRlbnQpOiBEaXR0by4KKworICAgICAgICAqIGhpc3RvcnkvSGlzdG9yeUl0ZW0uaDogTmFt
ZSBjaGFuZ2VzLgorCisgICAgICAgICogaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50OjpzdWJtaXQpOiBDcmVhdGUgYW5kIHBhc3MgYSBG
b3JtU3RhdGUgaW5zdGVhZCBvZgorICAgICAgICBhdHRhY2hpbmcgInJlY29yZGVkIGZvcm0gdmFs
dWVzIiBhbmQgImZvcm0gYWJvdXQgdG8gYmUgc3VibWl0dGVkIiB0byB0aGUgZnJhbWUKKyAgICAg
ICAgbG9hZGVyLiBQYXJhbWV0ZXIgd29yayBmaW5lIGZvciB0aGlzOyB0aGVyZSdzIG5vIG5lZWQg
dG8gc3RvcmUgc3RhdGUgb24gdGhlCisgICAgICAgIEZyYW1lTG9hZGVyLgorCisgICAgICAgICog
bG9hZGVyL0Zvcm1TdGF0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb3JtU3RhdGU6OkZvcm1T
dGF0ZSk6IEFkb3B0IGEgdmVjdG9yIGluc3RlYWQgb2YgY29weWluZyBhIGhhc2ggbWFwLgorICAg
ICAgICAoV2ViQ29yZTo6Rm9ybVN0YXRlOjpjcmVhdGUpOiBEaXR0by4KKyAgICAgICAgKiBsb2Fk
ZXIvRm9ybVN0YXRlLmg6IFVwZGF0ZSB0byB1c2UgYSB2ZWN0b3IgdGhhdCB3ZSBhZG9wdCBpbnN0
ZWFkIG9mIGhhc2ggbWFwCisgICAgICAgIHRoYXQgd2UgY29weSBmb3IgYXV0by1maWxsIHRleHQg
ZmllbGQgdmFsdWVzLgorCisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNjaGVkdWxlZFJlZGlyZWN0aW9uOjpTY2hlZHVsZWRSZWRpcmVjdGlvbik6
IEFkZGVkIGEgbmV3IGNhc2UgZm9yCisgICAgICAgIGZvcm0gc3VibWlzc2lvbnMgYW5kIHR1cm5l
ZCB0aGUgIndhc0R1cmluZ0xvYWQiIHN0YXRlIGludG8gYSBzZXBhcmF0ZSBib29sZWFuCisgICAg
ICAgIGluc3RlYWQgb2YgdXNpbmcgYSBzcGVjaWFsIHJlZGlyZWN0aW9uIHR5cGUgdG8gdHJhY2sg
aXQuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6Y3JlYXRlV2luZG93KTogVXBkYXRl
ZCBmb3IgbmFtZSBhbmQgYXJndW1lbnQgY2hhbmdlIG9mCisgICAgICAgIGxvYWRGcmFtZVJlcXVl
c3QuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6dXJsU2VsZWN0ZWQpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpzdWJtaXRGb3JtKTogUmVtb3ZlZCB0aGUg
ImRlZmVycmVkIGZvcm0gc3VibWlzc2lvbiIKKyAgICAgICAgbWFjaGluZXJ5LCByZXBsYWNpbmcg
aXQgd2l0aCB0aGUgInNjaGVkdWxlZCByZWRpcmVjdGlvbiIgbWVjaGFuaXNtLCBzaGFyZWQKKyAg
ICAgICAgd2l0aCBvdGhlciBraW5kcyBvZiByZWRpcmVjdGlvbiBhbmQgbmF2aWdhdGlvbi4gTW92
ZWQgZnJhbWUgdGFyZ2V0aW5nIGhlcmUKKyAgICAgICAgc28gd2UgY2FuIHNjaGVkdWxlIHRoZSBy
ZWRpcmVjdGlvbiBvbiB0aGUgcmlnaHQgZnJhbWUuIE1vdmVkIHRoZSBtdWx0aXBsZQorICAgICAg
ICBmb3JtIHN1Ym1pc3Npb24gcHJvdGVjdGlvbiBoZXJlLiBNb3ZlZCB0aGUgY29kZSB0byBpbXBs
ZW1lbnQgdGhlIHJ1bGUgdGhhdAorICAgICAgICBtX25hdmlnYXRpb25EdXJpbmdMb2FkIHdhcyB1
c2VkIGZvciBoZXJlIHRvby4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpkaWRPcGVu
VVJMKTogVXNlIHRoZSBuZXcgd2FzRHVyaW5nTG9hZCBmbGFnIGluc3RlYWQKKyAgICAgICAgb2Yg
dGhlIGxvY2F0aW9uQ2hhbmdlRHVyaW5nTG9hZCB0eXBlIHRvIGRldGVjdCBsb2NhdGlvbiBjaGFu
Z2UgZHVyaW5nIGEgbG9hZC4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpleGVjdXRl
U2NyaXB0KTogUmVtb3ZlZCBjYWxsIHRvIG5vdy1vYnNvbGV0ZSBmdW5jdGlvbiwKKyAgICAgICAg
c3VibWl0Rm9ybUFnYWluLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OnNjaGVkdWxl
TG9jYXRpb25DaGFuZ2UpOiBNb3ZlZCB0aGUgY29kZSB0byBzdG9wIGxvYWRpbmcKKyAgICAgICAg
b3V0IG9mIHRoaXMgZnVuY3Rpb24gaW50byBzY2hlZHVsZVJlZGlyZWN0aW9uLCBzbyBpdCBjYW4g
YmUgc2hhcmVkIHdpdGggdGhlCisgICAgICAgIG5ldyBzY2hlZHVsZUZvcm1TdWJtaXNzaW9uIGZ1
bmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OnNjaGVkdWxlRm9ybVN1Ym1p
c3Npb24pOiBBZGRlZC4gQWxtb3N0IHRoZSBzYW1lIGFzCisgICAgICAgIHNjaGVkdWxlTG9jYXRp
b25DaGFuZ2UsIGJ1dCB3aXRoIHRoZSBhcmd1bWVudHMgZm9yIGEgZm9ybSBzdWJtaXNzaW9uLgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OnNjaGVkdWxlUmVmcmVzaCk6IFVwZGF0ZWQg
Zm9yIHRoZSBjaGFuZ2UgdG8gdGhlCisgICAgICAgIGR1cmluZ0xvYWQgZmxhZy4KKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lTG9hZGVyOjppc0xvY2F0aW9uQ2hhbmdlKTogQWRkZWQgY2FzZSBmb3Ig
Zm9ybVN1Ym1pc3Npb24KKyAgICAgICAgYW5kIHJlbW92ZWQgY2FzZSBmb3IgbG9jYXRpb25DaGFu
Z2VEdXJpbmdMb2FkLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OnJlZGlyZWN0aW9u
VGltZXJGaXJlZCk6IERpdHRvLiBBbHNvIHJlbW92ZWQgdW5uZWVkZWQKKyAgICAgICAgY29tcGxl
dGVVUkwgY2FsbCBhbmQganVzdCB1c2UgS1VSTCBjb25zdHJ1Y3RvciB0byBtYXRjaCB0aGUgb3Ro
ZXIgY2FzZXMuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6cHJvdmlzaW9uYWxMb2Fk
U3RhcnRlZCk6IFJlbW92ZWQgdGhlIGNvZGUgdG8gc2V0IHVwCisgICAgICAgIHRoZSBtX25hdmln
YXRpb25EdXJpbmdMb2FkLCB3aGljaCBpcyBubyBsb25nZXIgbmVlZGVkLiBUaGUgbmV3IHZlcnNp
b24gb2YKKyAgICAgICAgdGhpcyBpcyBpbiB0aGUgc3VibWl0Rm9ybSBmdW5jdGlvbiBhbmQgc2V0
cyB0aGUgbG9ja0hpc3RvcnkgYm9vbGVhbi4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVy
OjpzY2hlZHVsZVJlZGlyZWN0aW9uKTogTW92ZWQgdGhlIGNvZGUgdG8gc3RvcCBhIGxvYWQKKyAg
ICAgICAgaW4gaGVyZSB0aGF0IHVzZWQgdG8gYmUgaW4gc2NoZWR1bGVMb2NhdGlvbkNoYW5nZS4K
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpzdGFydFJlZGlyZWN0aW9uVGltZXIpOiBB
ZGRlZCBjYXNlIGZvciBmb3JtU3VibWlzc2lvbgorICAgICAgICBhbmQgcmVtb3ZlZCBjYXNlIGZv
ciBsb2NhdGlvbkNoYW5nZUR1cmluZ0xvYWQuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRl
cjo6c3RvcFJlZGlyZWN0aW9uVGltZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
TG9hZGVyOjpjb21wbGV0ZWQpOiBSZW1vdmVkIGNhbGwgdG8gbm93LW9ic29sZXRlIGZ1bmN0aW9u
LAorICAgICAgICBzdWJtaXRGb3JtQWdhaW4uCisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRl
cjo6bG9hZEZyYW1lUmVxdWVzdCk6IFJlbmFtZWQgZnJvbQorICAgICAgICBsb2FkRnJhbWVSZXF1
ZXN0V2l0aEZvcm1BbmRWYWx1ZXMuIFJlcGxhY2VkIGZvcm0gZWxlbWVudCBhbmQgZm9ybSB2YWx1
ZXMKKyAgICAgICAgYXJndW1lbnQgd2l0aCBhIHNpbmdsZSBGb3JtU3RhdGUgYXJndW1lbnQuIENo
YW5nZWQgZnJhbWUgdGFyZ2V0aW5nIGNvZGUKKyAgICAgICAgdG8gdXNlIHRoZSBzb3VyY2UgZnJh
bWUgaW4gdGhlIGNhc2Ugb2YgYSBmb3JtIHN1Ym1pc3Npb24gdG8gYmV0dGVyIG1hdGNoCisgICAg
ICAgIHRoZSBhY3R1YWwgdGFyZ2V0IGZyYW1lLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2Fk
ZXI6OmxvYWRVUkwpOiBEb24ndCBzZWFyY2ggZm9yIGV4aXN0aW5nIGZyYW1lcyBpbiB0aGUKKyAg
ICAgICAgZm9ybSBzdWJtaXNzaW9uIGNhc2Ugc2luY2Ugd2UgYWxyZWFkeSBkaWQgdGhhdCBpbiB0
aGUgc3VibWl0Rm9ybSBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpj
bGllbnRSZWRpcmVjdGVkKTogQ2hhbmdlZCB0byB3b3JrIHdpdGggdGhlCisgICAgICAgIG1faXNF
eGVjdXRpbmdKYXZhU2NyaXB0Rm9ybUFjdGlvbiBkYXRhIG1lbWJlciBkaXJlY3RseSBpbnN0ZWFk
IG9mIHRha2luZworICAgICAgICBpdCBhcyBhIGZ1bmN0aW9uIHBhcmFtZXRlci4KKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpsb2FkUG9zdFJlcXVlc3QpOiBEb24ndCBzZWFyY2ggZm9y
IGV4aXN0aW5nIGZyYW1lcworICAgICAgICBpbiB0aGUgZm9ybSBzdWJtaXNzaW9uIGNhc2Ugc2lu
Y2Ugd2UgYWxyZWFkeSBkaWQgdGhhdCBpbiB0aGUgc3VibWl0Rm9ybQorICAgICAgICBmdW5jdGlv
bi4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjphZGRCYWNrRm9yd2FyZEl0ZW1DbGlw
cGVkQXRUYXJnZXQpOiBNb3ZlZCBjb21tZW50CisgICAgICAgIGluIGhlcmUgdGhhdCB3YXMgbWlz
cGxhY2VkIGVsc2V3aGVyZSBpbiB0aGUgZmlsZS4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9h
ZGVyOjpmaW5kRnJhbWVGb3JOYXZpZ2F0aW9uKTogQ2hhbmdlZCB0byB1c2UgdGhlIGVhcmx5Cisg
ICAgICAgIHJldHVybiBpZGlvbS4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpyZWN1
cnNpdmVHb1RvSXRlbSk6IFVwZGF0ZWQgZm9yIEhpc3RvcnlJdGVtIGNoYW5nZXMuCisgICAgICAg
IChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6Y2hpbGRGcmFtZXNNYXRjaEl0ZW0pOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjp1cGRhdGVIaXN0b3J5Rm9yU3RhbmRhcmRMb2Fk
KTogUmVtb3ZlZCB0aGUKKyAgICAgICAgbV9uYXZpZ2F0aW9uRHVyaW5nTG9hZCBsb2dpYzsgdGhh
dCdzIG5vdyBoYW5kbGVkIGJ5IHNldHRpbmcgbG9ja0hpc3RvcnkKKyAgICAgICAgdG8gdHJ1ZSBp
biB0aGUgc3VibWl0Rm9ybSBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVy
Ojp1cGRhdGVIaXN0b3J5Rm9yUmVkaXJlY3RXaXRoTG9ja2VkQmFja0ZvcndhcmRMaXN0KToKKyAg
ICAgICAgVXNlIHRoZSBuZXcgc2V0Q2hpbGRJdGVtIGZ1bmN0aW9uIHNvIHdlIGRvbid0IGdldCBt
dWx0aXBsZSBpdGVtcyBmb3IgdGhlCisgICAgICAgIHNhbWUgZnJhbWUgbmFtZSBpbiB0aGUgaGlz
dG9yeSBpdGVtIHRyZWUgaW4gdGhlIGJhY2svZm9yd2FyZCBsaXN0LgorCisgICAgICAgICogbG9h
ZGVyL0ZyYW1lTG9hZGVyLmg6IFJlbmFtZWQgbG9hZEZyYW1lUmVxdWVzdFdpdGhGb3JtQW5kVmFs
dWVzIHRvCisgICAgICAgIGxvYWRGcmFtZVJlcXVlc3QgYW5kIG1hZGUgaXQgdGFrZSBhIGZvcm0g
c3RhdGUgb2JqZWN0IGluc3RlYWQgb2YgdGhlCisgICAgICAgIGZvcm0gZWxlbWVudCBhbmQgZm9y
bSB2YWx1ZXMuIFJlbW92ZWQgdGhlIHVudXNlZCBmdW5jdGlvbnMKKyAgICAgICAgbG9hZEVtcHR5
RG9jdW1lbnRTeW5jaHJvbm91c2x5LCBwcm92aXNpb25hbERvY3VtZW50TG9hZGVyLAorICAgICAg
ICBub3RpZnlJY29uQ2huYWdlZCwgYW5kIHVwZGF0ZUJhc2VVUkxGb3JFbXB0eURvY3VtZW50LiBD
aGFuZ2VkIHRoZQorICAgICAgICBzdWJtaXRGb3JtIGZ1bmN0aW9uIHRvIHRha2UgYSBmb3JtIHN0
YXRlIGFyZ3VtZW50LiBFbGltaW5hdGVkIHRoZQorICAgICAgICBjbGVhclJlY29yZGVkRm9ybVZh
bHVlcywgc2V0Rm9ybUFib3V0VG9CZVN1Ym1pdHRlZCwgYW5kIHJlY29yZEZvcm1WYWx1ZQorICAg
ICAgICBmdW5jdGlvbnMsIHdoaWNoIGFyZSByZXBsYWNlZCBieSB0aGUgZm9ybSBzdGF0ZSBhcmd1
bWVudHMgdG8gc3VibWl0Rm9ybQorICAgICAgICBhbmQgbG9hZEZyYW1lUmVxdWVzdC4gUmVtb3Zl
ZCB0aGUgaXNKYXZhU2NyaXB0Rm9ybUFjdGlvbiBhcmd1bWVudCBmcm9tCisgICAgICAgIHRoZSBj
bGllbnRSZWRpcmVjdGVkIGZ1bmN0aW9uOyBpbnN0ZWFkIGl0IGxvb2tzIGF0IGEgZGF0YSBtZW1i
ZXIgZGlyZWN0bHkuCisgICAgICAgIEVsaW1pbmF0ZWQgdGhlIHN1Ym1pdEZvcm1BZ2FpbiBhbmQg
b3ZlcmxvYWQgb2YgdGhlIHN1Ym1pdEZvcm0gZnVuY3Rpb247CisgICAgICAgIHRoZXNlIGFyZSBu
b3cgc3Vic3VtZWQgaW50byB0aGUgcmVtYWluaW5nIHN1Ym1pdEZvcm0gZnVuY3Rpb24gYW5kIHRo
ZQorICAgICAgICBzY2hlZHVsZUZvcm1TdWJtaXNzaW9uIGZ1bmN0aW9uLiBSZW1vdmVkIHVudXNl
ZCBhbmQgb2Jzb2xldGUgZGF0YQorICAgICAgICBtZW1iZXJzIG1fbmF2aWdhdGlvbkR1cmluZ0xv
YWQsIG1fZGVmZXJyZWRGb3JtU3VibWlzc2lvbiwKKyAgICAgICAgbV9mb3JtQWJvdXRUb0JlU3Vi
bWl0dGVkIGFuZCBtX2Zvcm1WYWx1ZXNBYm91dFRvQmVTdWJtaXR0ZWQuCisKKyAgICAgICAgKiBw
YWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0
TWVudUNvbnRyb2xsZXI6OmNvbnRleHRNZW51SXRlbVNlbGVjdGVkKToKKyAgICAgICAgVXBkYXRl
ZCBmb3IgbmFtZSBhbmQgYXJndW1lbnQgY2hhbmdlIG9mIGxvYWRGcmFtZVJlcXVlc3QuCisKKyAg
ICAgICAgKiBwYWdlL0ZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjp+RnJhbWUp
OiBSZW1vdmVkIGNhbGwgdG8gdGhlIG5vdy11bm5lZWRlZAorICAgICAgICBjbGVhclJlY29yZGVk
Rm9ybVZhbHVlcyBmdW5jdGlvbi4KKwogMjAwOS0wMy0zMSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBh
cHBsZS5jb20+CiAKICAgICAgICAgUm9sbGVkIG91dCB0aGF0IGxhc3QgY2hhbmdlIHVudGlsIEkg
Y2FuIGludmVzdGlnYXRlIHRoZSByZWdyZXNzaW9uIHRlc3QgZmFpbHVyZXMgaXQgc2VlbXMKSW5k
ZXg6IFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNv
cmUuYmFzZS5leHAJKHJldmlzaW9uIDQyMTQ2KQorKysgV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNTIsNiArMTUyLDcgQEAgX19aTjdXZWJDb3JlMTFGcmFtZUxv
YWRlcjE0ZGV0YWNoQ2hpbGRyZQogX19aTjdXZWJDb3JlMTFGcmFtZUxvYWRlcjE0c2Nyb2xsVG9B
bmNob3JFUktOU180S1VSTEUKIF9fWk43V2ViQ29yZTExRnJhbWVMb2FkZXIxNHN0b3BBbGxMb2Fk
ZXJzRXYKIF9fWk43V2ViQ29yZTExRnJhbWVMb2FkZXIxNmRldGFjaEZyb21QYXJlbnRFdgorX19a
TjdXZWJDb3JlMTFGcmFtZUxvYWRlcjE2bG9hZEZyYW1lUmVxdWVzdEVSS05TXzE2RnJhbWVMb2Fk
UmVxdWVzdEViYk4zV1RGMTBQYXNzUmVmUHRySU5TXzVFdmVudEVFRU5TNV9JTlNfOUZvcm1TdGF0
ZUVFRQogX19aTjdXZWJDb3JlMTFGcmFtZUxvYWRlcjE3c3RvcEZvclVzZXJDYW5jZWxFYgogX19a
TjdXZWJDb3JlMTFGcmFtZUxvYWRlcjE4Y3VycmVudEhpc3RvcnlJdGVtRXYKIF9fWk43V2ViQ29y
ZTExRnJhbWVMb2FkZXIxOHNldExvY2FsTG9hZFBvbGljeUVOUzBfMTVMb2NhbExvYWRQb2xpY3lF
CkBAIC0xNjMsNyArMTY0LDYgQEAgX19aTjdXZWJDb3JlMTFGcmFtZUxvYWRlcjIzdGltZU9mTGFz
dENvbQogX19aTjdXZWJDb3JlMTFGcmFtZUxvYWRlcjI0cmVnaXN0ZXJVUkxTY2hlbWVBc0xvY2Fs
RVJLTlNfNlN0cmluZ0UKIF9fWk43V2ViQ29yZTExRnJhbWVMb2FkZXIyNnJlbG9hZFdpdGhPdmVy
cmlkZUVuY29kaW5nRVJLTlNfNlN0cmluZ0UKIF9fWk43V2ViQ29yZTExRnJhbWVMb2FkZXIyNnNh
dmVEb2N1bWVudEFuZFNjcm9sbFN0YXRlRXYKLV9fWk43V2ViQ29yZTExRnJhbWVMb2FkZXIzM2xv
YWRGcmFtZVJlcXVlc3RXaXRoRm9ybUFuZFZhbHVlc0VSS05TXzE2RnJhbWVMb2FkUmVxdWVzdEVi
Yk4zV1RGMTBQYXNzUmVmUHRySU5TXzVFdmVudEVFRVBOU18xNUhUTUxGb3JtRWxlbWVudEVSS05T
NF83SGFzaE1hcElOU182U3RyaW5nRVNCX05TXzEwU3RyaW5nSGFzaEVOUzRfMTBIYXNoVHJhaXRz
SVNCX0VFU0VfRUUKIF9fWk43V2ViQ29yZTExRnJhbWVMb2FkZXIzNnNhdmVTY3JvbGxQb3NpdGlv
bkFuZFZpZXdTdGF0ZVRvSXRlbUVQTlNfMTFIaXN0b3J5SXRlbUUKIF9fWk43V2ViQ29yZTExRnJh
bWVMb2FkZXI0bG9hZEVSS05TXzE1UmVzb3VyY2VSZXF1ZXN0RVJLTlNfMTRTdWJzdGl0dXRlRGF0
YUViCiBfX1pON1dlYkNvcmUxMUZyYW1lTG9hZGVyNGxvYWRFUktOU18xNVJlc291cmNlUmVxdWVz
dEVSS05TXzZTdHJpbmdFYgpAQCAtMTcyLDYgKzE3Miw3IEBAIF9fWk43V2ViQ29yZTExRnJhbWVM
b2FkZXI2cmVsb2FkRWIKIF9fWk43V2ViQ29yZTExRnJhbWVMb2FkZXI3YWRkRGF0YUVQS2NpCiBf
X1pON1dlYkNvcmUxMUZyYW1lTG9hZGVyN2NhbkxvYWRFUktOU180S1VSTEVSS05TXzZTdHJpbmdF
UEtOU184RG9jdW1lbnRFCiBfX1pON1dlYkNvcmUxMUdlb2xvY2F0aW9uMTJzZXRJc0FsbG93ZWRF
YgorX19aTjdXZWJDb3JlMTFIaXN0b3J5SXRlbTEwdGFyZ2V0SXRlbUV2CiBfX1pON1dlYkNvcmUx
MUhpc3RvcnlJdGVtMTFzZXRSZWZlcnJlckVSS05TXzZTdHJpbmdFCiBfX1pON1dlYkNvcmUxMUhp
c3RvcnlJdGVtMTJhZGRDaGlsZEl0ZW1FTjNXVEYxMFBhc3NSZWZQdHJJUzBfRUUKIF9fWk43V2Vi
Q29yZTExSGlzdG9yeUl0ZW0xMnNldFVSTFN0cmluZ0VSS05TXzZTdHJpbmdFCkBAIC0xODgsMTMg
KzE4OSwxMSBAQCBfX1pON1dlYkNvcmUxMUhpc3RvcnlJdGVtMThzZXRMYXN0VmlzaXRlCiBfX1pO
N1dlYkNvcmUxMUhpc3RvcnlJdGVtMjBzZXRPcmlnaW5hbFVSTFN0cmluZ0VSS05TXzZTdHJpbmdF
CiBfX1pON1dlYkNvcmUxMUhpc3RvcnlJdGVtMjBzZXRUcmFuc2llbnRQcm9wZXJ0eUVSS05TXzZT
dHJpbmdFUDExb2JqY19vYmplY3QKIF9fWk43V2ViQ29yZTExSGlzdG9yeUl0ZW0yMm1lcmdlQXV0
b0NvbXBsZXRlSGludHNFUFMwXwotX19aTjdXZWJDb3JlMTFIaXN0b3J5SXRlbTIzcmVjdXJzZVRv
RmluZFRhcmdldEl0ZW1FdgogX19aTjdXZWJDb3JlMTFIaXN0b3J5SXRlbTZzZXRVUkxFUktOU180
S1VSTEUKIF9fWk43V2ViQ29yZTExSGlzdG9yeUl0ZW03dmlzaXRlZEVSS05TXzZTdHJpbmdFZAog
X19aTjdXZWJDb3JlMTFIaXN0b3J5SXRlbThmb3JtRGF0YUV2CiBfX1pON1dlYkNvcmUxMUhpc3Rv
cnlJdGVtOHNldFRpdGxlRVJLTlNfNlN0cmluZ0UKIF9fWk43V2ViQ29yZTExSGlzdG9yeUl0ZW05
c2V0UGFyZW50RVJLTlNfNlN0cmluZ0UKLV9fWk43V2ViQ29yZTExSGlzdG9yeUl0ZW05c2V0VGFy
Z2V0RVJLTlNfNlN0cmluZ0UKIF9fWk43V2ViQ29yZTExSGlzdG9yeUl0ZW1DMUVSS05TXzRLVVJM
RVJLTlNfNlN0cmluZ0VTNl9TNl8KIF9fWk43V2ViQ29yZTExSGlzdG9yeUl0ZW1DMUVSS05TXzZT
dHJpbmdFUzNfUzNfZAogX19aTjdXZWJDb3JlMTFIaXN0b3J5SXRlbUMxRVJLTlNfNlN0cmluZ0VT
M19kCkBAIC03MjUsNyArNzI0LDYgQEAgX19aTks3V2ViQ29yZTExSGlzdG9yeUl0ZW0xMmlzVGFy
Z2V0SXRlbQogX19aTks3V2ViQ29yZTExSGlzdG9yeUl0ZW0xMnJlZGlyZWN0VVJMc0V2CiBfX1pO
SzdXZWJDb3JlMTFIaXN0b3J5SXRlbTE0YWx0ZXJuYXRlVGl0bGVFdgogX19aTks3V2ViQ29yZTEx
SGlzdG9yeUl0ZW0xNWxhc3RWaXNpdGVkVGltZUV2Ci1fX1pOSzdXZWJDb3JlMTFIaXN0b3J5SXRl
bTE3Y2hpbGRJdGVtV2l0aE5hbWVFUktOU182U3RyaW5nRQogX19aTks3V2ViQ29yZTExSGlzdG9y
eUl0ZW0xN29yaWdpbmFsVVJMU3RyaW5nRXYKIF9fWk5LN1dlYkNvcmUxMUhpc3RvcnlJdGVtMjBn
ZXRUcmFuc2llbnRQcm9wZXJ0eUVSS05TXzZTdHJpbmdFCiBfX1pOSzdXZWJDb3JlMTFIaXN0b3J5
SXRlbTN1cmxFdgpJbmRleDogV2ViQ29yZS9oaXN0b3J5L0hpc3RvcnlJdGVtLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2hpc3RvcnkvSGlzdG9yeUl0ZW0uY3BwCShyZXZpc2lvbiA0MjE0NikK
KysrIFdlYkNvcmUvaGlzdG9yeS9IaXN0b3J5SXRlbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEy
MywxMCArMTIzLDEwIEBAIGlubGluZSBIaXN0b3J5SXRlbTo6SGlzdG9yeUl0ZW0oY29uc3QgSGkK
ICAgICBpZiAoaXRlbS5tX2Zvcm1EYXRhKQogICAgICAgICBtX2Zvcm1EYXRhID0gaXRlbS5tX2Zv
cm1EYXRhLT5jb3B5KCk7CiAgICAgICAgIAotICAgIHVuc2lnbmVkIHNpemUgPSBpdGVtLm1fc3Vi
SXRlbXMuc2l6ZSgpOwotICAgIG1fc3ViSXRlbXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzaXpl
KTsKKyAgICB1bnNpZ25lZCBzaXplID0gaXRlbS5tX2NoaWxkcmVuLnNpemUoKTsKKyAgICBtX2No
aWxkcmVuLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2l6ZSk7CiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgbV9zdWJJdGVtcy5hcHBlbmQoaXRlbS5tX3N1
Ykl0ZW1zW2ldLT5jb3B5KCkpOworICAgICAgICBtX2NoaWxkcmVuLnVuY2hlY2tlZEFwcGVuZChp
dGVtLm1fY2hpbGRyZW5baV0tPmNvcHkoKSk7CiAKICAgICBpZiAoaXRlbS5tX3JlZGlyZWN0VVJM
cykKICAgICAgICAgbV9yZWRpcmVjdFVSTHMuc2V0KG5ldyBWZWN0b3I8U3RyaW5nPigqaXRlbS5t
X3JlZGlyZWN0VVJMcykpOwpAQCAtMzc4LDUyICszNzgsNjEgQEAgdm9pZCBIaXN0b3J5SXRlbTo6
c2V0SXNUYXJnZXRJdGVtKGJvb2wgZgogCiB2b2lkIEhpc3RvcnlJdGVtOjphZGRDaGlsZEl0ZW0o
UGFzc1JlZlB0cjxIaXN0b3J5SXRlbT4gY2hpbGQpCiB7Ci0gICAgbV9zdWJJdGVtcy5hcHBlbmQo
Y2hpbGQpOworICAgIEFTU0VSVCghY2hpbGRJdGVtV2l0aFRhcmdldChjaGlsZC0+dGFyZ2V0KCkp
KTsKKyAgICBtX2NoaWxkcmVuLmFwcGVuZChjaGlsZCk7CiB9CiAKLUhpc3RvcnlJdGVtKiBIaXN0
b3J5SXRlbTo6Y2hpbGRJdGVtV2l0aE5hbWUoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAordm9p
ZCBIaXN0b3J5SXRlbTo6c2V0Q2hpbGRJdGVtKFBhc3NSZWZQdHI8SGlzdG9yeUl0ZW0+IGNoaWxk
KQogewotICAgIHVuc2lnbmVkIHNpemUgPSBtX3N1Ykl0ZW1zLnNpemUoKTsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSAKLSAgICAgICAgaWYgKG1fc3ViSXRlbXNbaV0t
PnRhcmdldCgpID09IG5hbWUpCi0gICAgICAgICAgICByZXR1cm4gbV9zdWJJdGVtc1tpXS5nZXQo
KTsKKyAgICBBU1NFUlQoIWNoaWxkLT5pc1RhcmdldEl0ZW0oKSk7CisgICAgdW5zaWduZWQgc2l6
ZSA9IG1fY2hpbGRyZW4uc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXpl
OyArK2kpICB7CisgICAgICAgIGlmIChtX2NoaWxkcmVuW2ldLT50YXJnZXQoKSA9PSBjaGlsZC0+
dGFyZ2V0KCkpIHsKKyAgICAgICAgICAgIGNoaWxkLT5zZXRJc1RhcmdldEl0ZW0obV9jaGlsZHJl
bltpXS0+aXNUYXJnZXRJdGVtKCkpOworICAgICAgICAgICAgbV9jaGlsZHJlbltpXSA9IGNoaWxk
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorICAgIG1fY2hpbGRyZW4u
YXBwZW5kKGNoaWxkKTsKK30KKworSGlzdG9yeUl0ZW0qIEhpc3RvcnlJdGVtOjpjaGlsZEl0ZW1X
aXRoVGFyZ2V0KGNvbnN0IFN0cmluZyYgdGFyZ2V0KSBjb25zdAoreworICAgIHVuc2lnbmVkIHNp
emUgPSBtX2NoaWxkcmVuLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6
ZTsgKytpKSB7CisgICAgICAgIGlmIChtX2NoaWxkcmVuW2ldLT50YXJnZXQoKSA9PSB0YXJnZXQp
CisgICAgICAgICAgICByZXR1cm4gbV9jaGlsZHJlbltpXS5nZXQoKTsKKyAgICB9CiAgICAgcmV0
dXJuIDA7CiB9CiAKLS8vIDxyZGFyOi8vcHJvYmxlbS80ODk1ODQ5PiBIaXN0b3J5SXRlbTo6cmVj
dXJzZVRvRmluZFRhcmdldEl0ZW0oKSBzaG91bGQgYmUgcmVwbGFjZSB3aXRoIGEgbm9uLXJlY3Vy
c2l2ZSBtZXRob2QKLUhpc3RvcnlJdGVtKiBIaXN0b3J5SXRlbTo6cmVjdXJzZVRvRmluZFRhcmdl
dEl0ZW0oKQorLy8gPHJkYXI6Ly9wcm9ibGVtLzQ4OTU4NDk+IEhpc3RvcnlJdGVtOjpmaW5kVGFy
Z2V0SXRlbSgpIHNob3VsZCBiZSByZXBsYWNlZCB3aXRoIGEgbm9uLXJlY3Vyc2l2ZSBtZXRob2Qu
CitIaXN0b3J5SXRlbSogSGlzdG9yeUl0ZW06OmZpbmRUYXJnZXRJdGVtKCkKIHsKICAgICBpZiAo
bV9pc1RhcmdldEl0ZW0pCiAgICAgICAgIHJldHVybiB0aGlzOwotICAgIGlmICghbV9zdWJJdGVt
cy5zaXplKCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIAotICAgIEhpc3RvcnlJdGVtKiBtYXRj
aDsKLSAgICB1bnNpZ25lZCBzaXplID0gbV9zdWJJdGVtcy5zaXplKCk7CisgICAgdW5zaWduZWQg
c2l6ZSA9IG1fY2hpbGRyZW4uc2l6ZSgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBz
aXplOyArK2kpIHsKLSAgICAgICAgbWF0Y2ggPSBtX3N1Ykl0ZW1zW2ldLT5yZWN1cnNlVG9GaW5k
VGFyZ2V0SXRlbSgpOwotICAgICAgICBpZiAobWF0Y2gpCisgICAgICAgIGlmIChIaXN0b3J5SXRl
bSogbWF0Y2ggPSBtX2NoaWxkcmVuW2ldLT50YXJnZXRJdGVtKCkpCiAgICAgICAgICAgICByZXR1
cm4gbWF0Y2g7CiAgICAgfQotICAgIAogICAgIHJldHVybiAwOwogfQogCiBIaXN0b3J5SXRlbSog
SGlzdG9yeUl0ZW06OnRhcmdldEl0ZW0oKQogewotICAgIGlmICghbV9zdWJJdGVtcy5zaXplKCkp
Ci0gICAgICAgIHJldHVybiB0aGlzOwotICAgIHJldHVybiByZWN1cnNlVG9GaW5kVGFyZ2V0SXRl
bSgpOworICAgIEhpc3RvcnlJdGVtKiBmb3VuZEl0ZW0gPSBmaW5kVGFyZ2V0SXRlbSgpOworICAg
IHJldHVybiBmb3VuZEl0ZW0gPyBmb3VuZEl0ZW0gOiB0aGlzOwogfQogCiBjb25zdCBIaXN0b3J5
SXRlbVZlY3RvciYgSGlzdG9yeUl0ZW06OmNoaWxkcmVuKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
bV9zdWJJdGVtczsKKyAgICByZXR1cm4gbV9jaGlsZHJlbjsKIH0KIAogYm9vbCBIaXN0b3J5SXRl
bTo6aGFzQ2hpbGRyZW4oKSBjb25zdAogewotICAgIHJldHVybiBtX3N1Ykl0ZW1zLnNpemUoKTsK
KyAgICByZXR1cm4gIW1fY2hpbGRyZW4uaXNFbXB0eSgpOwogfQogCiBTdHJpbmcgSGlzdG9yeUl0
ZW06OmZvcm1Db250ZW50VHlwZSgpIGNvbnN0CkBAIC01MDUsOCArNTE0LDggQEAgaW50IEhpc3Rv
cnlJdGVtOjpzaG93VHJlZVdpdGhJbmRlbnQodW5zaQogICAgIGZwcmludGYoc3RkZXJyLCAiJXMr
LSVzICglcClcbiIsIHByZWZpeC5kYXRhKCksIG1fdXJsU3RyaW5nLnV0ZjgoKS5kYXRhKCksIHRo
aXMpOwogICAgIAogICAgIGludCB0b3RhbFN1Ykl0ZW1zID0gMDsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9zdWJJdGVtcy5zaXplKCk7ICsraSkKLSAgICAgICAgdG90YWxTdWJJdGVt
cyArPSBtX3N1Ykl0ZW1zW2ldLT5zaG93VHJlZVdpdGhJbmRlbnQoaW5kZW50TGV2ZWwgKyAxKTsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jaGlsZHJlbi5zaXplKCk7ICsraSkKKyAg
ICAgICAgdG90YWxTdWJJdGVtcyArPSBtX2NoaWxkcmVuW2ldLT5zaG93VHJlZVdpdGhJbmRlbnQo
aW5kZW50TGV2ZWwgKyAxKTsKICAgICByZXR1cm4gdG90YWxTdWJJdGVtcyArIDE7CiB9CiAKSW5k
ZXg6IFdlYkNvcmUvaGlzdG9yeS9IaXN0b3J5SXRlbS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
aGlzdG9yeS9IaXN0b3J5SXRlbS5oCShyZXZpc2lvbiA0MjE0NikKKysrIFdlYkNvcmUvaGlzdG9y
eS9IaXN0b3J5SXRlbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjksOSArMTI5LDkgQEAgcHVibGlj
OiAKICAgICB2b2lkIHNldExhc3RWaXNpdFdhc0hUVFBOb25HZXQoYm9vbCB3YXNOb3RHZXQpIHsg
bV9sYXN0VmlzaXRXYXNIVFRQTm9uR2V0ID0gd2FzTm90R2V0OyB9CiAKICAgICB2b2lkIGFkZENo
aWxkSXRlbShQYXNzUmVmUHRyPEhpc3RvcnlJdGVtPik7Ci0gICAgSGlzdG9yeUl0ZW0qIGNoaWxk
SXRlbVdpdGhOYW1lKGNvbnN0IFN0cmluZyYpIGNvbnN0OworICAgIHZvaWQgc2V0Q2hpbGRJdGVt
KFBhc3NSZWZQdHI8SGlzdG9yeUl0ZW0+KTsKKyAgICBIaXN0b3J5SXRlbSogY2hpbGRJdGVtV2l0
aFRhcmdldChjb25zdCBTdHJpbmcmKSBjb25zdDsKICAgICBIaXN0b3J5SXRlbSogdGFyZ2V0SXRl
bSgpOwotICAgIEhpc3RvcnlJdGVtKiByZWN1cnNlVG9GaW5kVGFyZ2V0SXRlbSgpOwogICAgIGNv
bnN0IEhpc3RvcnlJdGVtVmVjdG9yJiBjaGlsZHJlbigpIGNvbnN0OwogICAgIGJvb2wgaGFzQ2hp
bGRyZW4oKSBjb25zdDsKIApAQCAtMTc0LDcgKzE3NCw3IEBAIHByaXZhdGU6CiAgICAgSGlzdG9y
eUl0ZW0oKTsKICAgICBIaXN0b3J5SXRlbShjb25zdCBTdHJpbmcmIHVybFN0cmluZywgY29uc3Qg
U3RyaW5nJiB0aXRsZSwgZG91YmxlIGxhc3RWaXNpdGVkKTsKICAgICBIaXN0b3J5SXRlbShjb25z
dCBTdHJpbmcmIHVybFN0cmluZywgY29uc3QgU3RyaW5nJiB0aXRsZSwgY29uc3QgU3RyaW5nJiBh
bHRlcm5hdGVUaXRsZSwgZG91YmxlIGxhc3RWaXNpdGVkKTsKLSAgICBIaXN0b3J5SXRlbShjb25z
dCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBjb25zdCBTdHJpbmcmIHBhcmVudCwg
Y29uc3QgU3RyaW5nJiB0aXRsZSk7CisgICAgSGlzdG9yeUl0ZW0oY29uc3QgS1VSTCYgdXJsLCBj
b25zdCBTdHJpbmcmIGZyYW1lTmFtZSwgY29uc3QgU3RyaW5nJiBwYXJlbnQsIGNvbnN0IFN0cmlu
ZyYgdGl0bGUpOwogCiAgICAgSGlzdG9yeUl0ZW0oY29uc3QgSGlzdG9yeUl0ZW0mKTsKIApAQCAt
MTgyLDYgKzE4Miw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjb2xsYXBzZURhaWx5VmlzaXRzVG9X
ZWVrbHkoKTsKICAgICB2b2lkIHJlY29yZFZpc2l0QXRUaW1lKGRvdWJsZSk7CiAKKyAgICBIaXN0
b3J5SXRlbSogZmluZFRhcmdldEl0ZW0oKTsKKwogICAgIFN0cmluZyBtX3VybFN0cmluZzsKICAg
ICBTdHJpbmcgbV9vcmlnaW5hbFVSTFN0cmluZzsKICAgICBTdHJpbmcgbV9yZWZlcnJlcjsKQEAg
LTE5Niw3ICsxOTgsNyBAQCBwcml2YXRlOgogICAgIEludFBvaW50IG1fc2Nyb2xsUG9pbnQ7CiAg
ICAgVmVjdG9yPFN0cmluZz4gbV9kb2N1bWVudFN0YXRlOwogICAgIAotICAgIEhpc3RvcnlJdGVt
VmVjdG9yIG1fc3ViSXRlbXM7CisgICAgSGlzdG9yeUl0ZW1WZWN0b3IgbV9jaGlsZHJlbjsKICAg
ICAKICAgICBib29sIG1fbGFzdFZpc2l0V2FzRmFpbHVyZTsKICAgICBib29sIG1faXNUYXJnZXRJ
dGVtOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAJKHJldmlzaW9uIDQyMTQ2KQorKysg
V2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIsNyAr
Miw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykK
ICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykK
ICAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAq
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIw
MDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogICAgICAg
ICAgIChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQG55cG9wLmNvbSkKICAqCiAgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgogI2luY2x1ZGUg
IkZvcm1EYXRhLmgiCiAjaW5jbHVkZSAiRm9ybURhdGFMaXN0LmgiCisjaW5jbHVkZSAiRm9ybVN0
YXRlLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2lu
Y2x1ZGUgIkhUTUxEb2N1bWVudC5oIgpAQCAtNDQsMTEgKzQ1LDEwIEBACiAjaW5jbHVkZSAiTUlN
RVR5cGVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0
Q29udHJvbC5oIgorI2luY2x1ZGUgPGxpbWl0cz4KICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUu
aD4KICNpbmNsdWRlIDx3dGYvUmFuZG9tTnVtYmVyLmg+CiAKLSNpbmNsdWRlIDxsaW1pdHM+Ci0K
ICNpZiBQTEFURk9STShXWCkKICNpbmNsdWRlIDx3eC9kZWZzLmg+CiAjaW5jbHVkZSA8d3gvZmls
ZW5hbWUuaD4KQEAgLTU4LDYgKzU4LDggQEAKICNpbmNsdWRlIDxzaGx3YXBpLmg+CiAjZW5kaWYK
IAordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBu
YW1lc3BhY2UgSFRNTE5hbWVzOwpAQCAtMzE5LDE0ICszMjEsMTQgQEAgdm9pZCBIVE1MRm9ybUVs
ZW1lbnQ6OnN1Ym1pdChFdmVudCogZXZlbgogICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGZp
cnN0U3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRvbiA9IDA7CiAgICAgYm9vbCBuZWVkQnV0dG9uQWN0aXZh
dGlvbiA9IGFjdGl2YXRlU3VibWl0QnV0dG9uOyAvLyBkbyB3ZSBuZWVkIHRvIGFjdGl2YXRlIGEg
c3VibWl0IGJ1dHRvbj8KICAgICAKLSAgICBmcmFtZS0+bG9hZGVyKCktPmNsZWFyUmVjb3JkZWRG
b3JtVmFsdWVzKCk7Ci0gICAgZnJhbWUtPmxvYWRlcigpLT5zZXRGb3JtQWJvdXRUb0JlU3VibWl0
dGVkKHRoaXMpOworICAgIFZlY3RvcjxwYWlyPFN0cmluZywgU3RyaW5nPiA+IGZvcm1WYWx1ZXM7
CisKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZm9ybUVsZW1lbnRzLnNpemUoKTsgKytp
KSB7CiAgICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGNvbnRyb2wgPSBmb3JtRWxlbWVu
dHNbaV07CiAgICAgICAgIGlmIChjb250cm9sLT5oYXNMb2NhbE5hbWUoaW5wdXRUYWcpKSB7CiAg
ICAgICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1
dEVsZW1lbnQqPihjb250cm9sKTsKICAgICAgICAgICAgIGlmIChpbnB1dC0+aXNUZXh0RmllbGQo
KSkgewotICAgICAgICAgICAgICAgIGZyYW1lLT5sb2FkZXIoKS0+cmVjb3JkRm9ybVZhbHVlKGlu
cHV0LT5uYW1lKCksIGlucHV0LT52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICBmb3JtVmFsdWVz
LmFwcGVuZChwYWlyPFN0cmluZywgU3RyaW5nPihpbnB1dC0+bmFtZSgpLCBpbnB1dC0+dmFsdWUo
KSkpOwogICAgICAgICAgICAgICAgIGlmIChpbnB1dC0+aXNTZWFyY2hGaWVsZCgpKQogICAgICAg
ICAgICAgICAgICAgICBpbnB1dC0+YWRkU2VhcmNoUmVzdWx0KCk7CiAgICAgICAgICAgICB9CkBA
IC0zMzksNiArMzQxLDggQEAgdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnN1Ym1pdChFdmVudCogZXZl
bgogICAgICAgICB9CiAgICAgfQogCisgICAgUmVmUHRyPEZvcm1TdGF0ZT4gZm9ybVN0YXRlID0g
Rm9ybVN0YXRlOjpjcmVhdGUodGhpcywgZm9ybVZhbHVlcywgZnJhbWUpOworCiAgICAgaWYgKG5l
ZWRCdXR0b25BY3RpdmF0aW9uICYmIGZpcnN0U3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRvbikKICAgICAg
ICAgZmlyc3RTdWNjZXNzZnVsU3VibWl0QnV0dG9uLT5zZXRBY3RpdmF0ZWRTdWJtaXQodHJ1ZSk7
CiAgICAgCkBAIC0zNjEsMTQgKzM2NSwxNCBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudDo6c3VibWl0
KEV2ZW50KiBldmVuCiAgICAgICAgICAgICAgICAgbV91cmwgPSB1cmwuc3RyaW5nKCk7CiAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgIGZyYW1lLT5sb2FkZXIoKS0+c3VibWl0Rm9ybSgiUE9T
VCIsIG1fdXJsLCBkYXRhLnJlbGVhc2UoKSwgbV90YXJnZXQsIG1fZm9ybURhdGFCdWlsZGVyLmVu
Y29kaW5nVHlwZSgpLCBTdHJpbmcoKSwgZXZlbnQsIGxvY2tIaXN0b3J5LCBsb2NrQmFja0Zvcndh
cmRMaXN0KTsKKyAgICAgICAgICAgIGZyYW1lLT5sb2FkZXIoKS0+c3VibWl0Rm9ybSgiUE9TVCIs
IG1fdXJsLCBkYXRhLnJlbGVhc2UoKSwgbV90YXJnZXQsIG1fZm9ybURhdGFCdWlsZGVyLmVuY29k
aW5nVHlwZSgpLCBTdHJpbmcoKSwgbG9ja0hpc3RvcnksIGxvY2tCYWNrRm9yd2FyZExpc3QsIGV2
ZW50LCBmb3JtU3RhdGUucmVsZWFzZSgpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
IFZlY3RvcjxjaGFyPiBib3VuZGFyeSA9IG1fZm9ybURhdGFCdWlsZGVyLmdlbmVyYXRlVW5pcXVl
Qm91bmRhcnlTdHJpbmcoKTsKLSAgICAgICAgICAgIGZyYW1lLT5sb2FkZXIoKS0+c3VibWl0Rm9y
bSgiUE9TVCIsIG1fdXJsLCBjcmVhdGVGb3JtRGF0YShib3VuZGFyeS5kYXRhKCkpLCBtX3Rhcmdl
dCwgbV9mb3JtRGF0YUJ1aWxkZXIuZW5jb2RpbmdUeXBlKCksIGJvdW5kYXJ5LmRhdGEoKSwgZXZl
bnQsIGxvY2tIaXN0b3J5LCBsb2NrQmFja0ZvcndhcmRMaXN0KTsKKyAgICAgICAgICAgIGZyYW1l
LT5sb2FkZXIoKS0+c3VibWl0Rm9ybSgiUE9TVCIsIG1fdXJsLCBjcmVhdGVGb3JtRGF0YShib3Vu
ZGFyeS5kYXRhKCkpLCBtX3RhcmdldCwgbV9mb3JtRGF0YUJ1aWxkZXIuZW5jb2RpbmdUeXBlKCks
IGJvdW5kYXJ5LmRhdGEoKSwgbG9ja0hpc3RvcnksIGxvY2tCYWNrRm9yd2FyZExpc3QsIGV2ZW50
LCBmb3JtU3RhdGUucmVsZWFzZSgpKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAg
IG1fZm9ybURhdGFCdWlsZGVyLnNldElzTXVsdGlQYXJ0Rm9ybShmYWxzZSk7Ci0gICAgICAgIGZy
YW1lLT5sb2FkZXIoKS0+c3VibWl0Rm9ybSgiR0VUIiwgbV91cmwsIGNyZWF0ZUZvcm1EYXRhKENT
dHJpbmcoKSksIG1fdGFyZ2V0LCBTdHJpbmcoKSwgU3RyaW5nKCksIGV2ZW50LCBsb2NrSGlzdG9y
eSwgbG9ja0JhY2tGb3J3YXJkTGlzdCk7CisgICAgICAgIGZyYW1lLT5sb2FkZXIoKS0+c3VibWl0
Rm9ybSgiR0VUIiwgbV91cmwsIGNyZWF0ZUZvcm1EYXRhKENTdHJpbmcoKSksIG1fdGFyZ2V0LCBT
dHJpbmcoKSwgU3RyaW5nKCksIGxvY2tIaXN0b3J5LCBsb2NrQmFja0ZvcndhcmRMaXN0LCBldmVu
dCwgZm9ybVN0YXRlLnJlbGVhc2UoKSk7CiAgICAgfQogCiAgICAgaWYgKG5lZWRCdXR0b25BY3Rp
dmF0aW9uICYmIGZpcnN0U3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRvbikKSW5kZXg6IFdlYkNvcmUvbG9h
ZGVyL0Zvcm1TdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRm9ybVN0YXRl
LmNwcAkocmV2aXNpb24gNDIxNDYpCisrKyBXZWJDb3JlL2xvYWRlci9Gb3JtU3RhdGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBB
cHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwNiwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDE2ICszNCwxNiBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLVBhc3NSZWZQdHI8Rm9ybVN0YXRlPiBGb3JtU3RhdGU6OmNyZWF0ZShQYXNzUmVm
UHRyPEhUTUxGb3JtRWxlbWVudD4gZm9ybSwgY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4m
IHZhbHVlcywgUGFzc1JlZlB0cjxGcmFtZT4gc291cmNlRnJhbWUpCitpbmxpbmUgRm9ybVN0YXRl
OjpGb3JtU3RhdGUoUGFzc1JlZlB0cjxIVE1MRm9ybUVsZW1lbnQ+IGZvcm0sIFN0cmluZ1BhaXJW
ZWN0b3ImIHRleHRGaWVsZFZhbHVlc1RvQWRvcHQsIFBhc3NSZWZQdHI8RnJhbWU+IHNvdXJjZUZy
YW1lKQorICAgIDogbV9mb3JtKGZvcm0pCisgICAgLCBtX3NvdXJjZUZyYW1lKHNvdXJjZUZyYW1l
KQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgRm9ybVN0YXRlKGZvcm0sIHZhbHVlcywgc291
cmNlRnJhbWUpKTsKKyAgICBtX3RleHRGaWVsZFZhbHVlcy5zd2FwKHRleHRGaWVsZFZhbHVlc1Rv
QWRvcHQpOwogfQogCi1Gb3JtU3RhdGU6OkZvcm1TdGF0ZShQYXNzUmVmUHRyPEhUTUxGb3JtRWxl
bWVudD4gZm9ybSwgY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIHZhbHVlcywgUGFzc1Jl
ZlB0cjxGcmFtZT4gc291cmNlRnJhbWUpCi0gICAgOiBtX2Zvcm0oZm9ybSkKLSAgICAsIG1fdmFs
dWVzKHZhbHVlcykKLSAgICAsIG1fc291cmNlRnJhbWUoc291cmNlRnJhbWUpCitQYXNzUmVmUHRy
PEZvcm1TdGF0ZT4gRm9ybVN0YXRlOjpjcmVhdGUoUGFzc1JlZlB0cjxIVE1MRm9ybUVsZW1lbnQ+
IGZvcm0sIFN0cmluZ1BhaXJWZWN0b3ImIHRleHRGaWVsZFZhbHVlc1RvQWRvcHQsIFBhc3NSZWZQ
dHI8RnJhbWU+IHNvdXJjZUZyYW1lKQogeworICAgIHJldHVybiBhZG9wdFJlZihuZXcgRm9ybVN0
YXRlKGZvcm0sIHRleHRGaWVsZFZhbHVlc1RvQWRvcHQsIHNvdXJjZUZyYW1lKSk7CiB9CiAKIH0K
SW5kZXg6IFdlYkNvcmUvbG9hZGVyL0Zvcm1TdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
bG9hZGVyL0Zvcm1TdGF0ZS5oCShyZXZpc2lvbiA0MjE0NikKKysrIFdlYkNvcmUvbG9hZGVyL0Zv
cm1TdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwNiwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDI4ICsyOSwyOCBAQAogI2lm
bmRlZiBGb3JtU3RhdGVfaAogI2RlZmluZSBGb3JtU3RhdGVfaAogCi0jaW5jbHVkZSA8d3RmL1Jl
ZkNvdW50ZWQuaD4KLSNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hN
YXAuaD4KKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKICAgICBjbGFzcyBGcmFtZTsKICAgICBjbGFzcyBIVE1MRm9ybUVsZW1lbnQ7CiAKKyAgICB0
eXBlZGVmIFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+ID4gU3RyaW5nUGFpclZlY3Rv
cjsKKwogICAgIGNsYXNzIEZvcm1TdGF0ZSA6IHB1YmxpYyBSZWZDb3VudGVkPEZvcm1TdGF0ZT4g
ewogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPiBjcmVh
dGUoUGFzc1JlZlB0cjxIVE1MRm9ybUVsZW1lbnQ+IGZvcm0sIGNvbnN0IEhhc2hNYXA8U3RyaW5n
LCBTdHJpbmc+JiB2YWx1ZXMsIFBhc3NSZWZQdHI8RnJhbWU+IHNvdXJjZUZyYW1lKTsKKyAgICAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPiBjcmVhdGUoUGFzc1JlZlB0cjxIVE1MRm9y
bUVsZW1lbnQ+LCBTdHJpbmdQYWlyVmVjdG9yJiB0ZXh0RmllbGRWYWx1ZXNUb0Fkb3B0LCBQYXNz
UmVmUHRyPEZyYW1lPik7CiAKICAgICAgICAgSFRNTEZvcm1FbGVtZW50KiBmb3JtKCkgY29uc3Qg
eyByZXR1cm4gbV9mb3JtLmdldCgpOyB9Ci0gICAgICAgIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBT
dHJpbmc+JiB2YWx1ZXMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlczsgfQorICAgICAgICBjb25z
dCBTdHJpbmdQYWlyVmVjdG9yJiB0ZXh0RmllbGRWYWx1ZXMoKSBjb25zdCB7IHJldHVybiBtX3Rl
eHRGaWVsZFZhbHVlczsgfQogICAgICAgICBGcmFtZSogc291cmNlRnJhbWUoKSBjb25zdCB7IHJl
dHVybiBtX3NvdXJjZUZyYW1lLmdldCgpOyB9CiAKICAgICBwcml2YXRlOgotICAgICAgICBGb3Jt
U3RhdGUoUGFzc1JlZlB0cjxIVE1MRm9ybUVsZW1lbnQ+IGZvcm0sIGNvbnN0IEhhc2hNYXA8U3Ry
aW5nLCBTdHJpbmc+JiB2YWx1ZXMsIFBhc3NSZWZQdHI8RnJhbWU+IHNvdXJjZUZyYW1lKTsKKyAg
ICAgICAgRm9ybVN0YXRlKFBhc3NSZWZQdHI8SFRNTEZvcm1FbGVtZW50PiwgU3RyaW5nUGFpclZl
Y3RvciYgdGV4dEZpZWxkVmFsdWVzVG9BZG9wdCwgUGFzc1JlZlB0cjxGcmFtZT4pOwogCiAgICAg
ICAgIFJlZlB0cjxIVE1MRm9ybUVsZW1lbnQ+IG1fZm9ybTsKLSAgICAgICAgSGFzaE1hcDxTdHJp
bmcsIFN0cmluZz4gbV92YWx1ZXM7CisgICAgICAgIFN0cmluZ1BhaXJWZWN0b3IgbV90ZXh0Rmll
bGRWYWx1ZXM7CiAgICAgICAgIFJlZlB0cjxGcmFtZT4gbV9zb3VyY2VGcmFtZTsKICAgICB9Owog
CkluZGV4OiBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCShyZXZpc2lvbiA0MjE0NikKKysrIFdlYkNvcmUv
bG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQzLDQ1ICsxNDMsMjIg
QEAgc3RhdGljIFVSTFNjaGVtZXNNYXAmIG5vQWNjZXNzU2NoZW1lcygpCiAgICAgcmV0dXJuIG5v
QWNjZXNzU2NoZW1lczsKIH0KIAotc3RydWN0IEZvcm1TdWJtaXNzaW9uIHsKLSAgICBGb3JtU3Vi
bWlzc2lvbihjb25zdCBjaGFyKiBhY3Rpb24sIGNvbnN0IFN0cmluZyYgdXJsLCBQYXNzUmVmUHRy
PEZvcm1EYXRhPiBmb3JtRGF0YSwKLSAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHRh
cmdldCwgY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSwgY29uc3QgU3RyaW5nJiBib3VuZGFyeSwK
LSAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPEV2ZW50PiBldmVudCwgYm9vbCBsb2NrSGlz
dG9yeSwgYm9vbCBsb2NrQmFja0ZvcndhcmRMaXN0KQotICAgICAgICA6IGFjdGlvbihhY3Rpb24p
Ci0gICAgICAgICwgdXJsKHVybCkKLSAgICAgICAgLCBmb3JtRGF0YShmb3JtRGF0YSkKLSAgICAg
ICAgLCB0YXJnZXQodGFyZ2V0KQotICAgICAgICAsIGNvbnRlbnRUeXBlKGNvbnRlbnRUeXBlKQot
ICAgICAgICAsIGJvdW5kYXJ5KGJvdW5kYXJ5KQotICAgICAgICAsIGV2ZW50KGV2ZW50KQotICAg
ICAgICAsIGxvY2tIaXN0b3J5KGxvY2tIaXN0b3J5KQotICAgICAgICAsIGxvY2tCYWNrRm9yd2Fy
ZExpc3QobG9ja0JhY2tGb3J3YXJkTGlzdCkKLSAgICB7Ci0gICAgfQotCi0gICAgY29uc3QgY2hh
ciogYWN0aW9uOwotICAgIFN0cmluZyB1cmw7Ci0gICAgUmVmUHRyPEZvcm1EYXRhPiBmb3JtRGF0
YTsKLSAgICBTdHJpbmcgdGFyZ2V0OwotICAgIFN0cmluZyBjb250ZW50VHlwZTsKLSAgICBTdHJp
bmcgYm91bmRhcnk7Ci0gICAgUmVmUHRyPEV2ZW50PiBldmVudDsKLSAgICBib29sIGxvY2tIaXN0
b3J5OwotICAgIGJvb2wgbG9ja0JhY2tGb3J3YXJkTGlzdDsKLX07Ci0KIHN0cnVjdCBTY2hlZHVs
ZWRSZWRpcmVjdGlvbiB7Ci0gICAgZW51bSBUeXBlIHsgcmVkaXJlY3Rpb24sIGxvY2F0aW9uQ2hh
bmdlLCBoaXN0b3J5TmF2aWdhdGlvbiwgbG9jYXRpb25DaGFuZ2VEdXJpbmdMb2FkIH07CisgICAg
ZW51bSBUeXBlIHsgcmVkaXJlY3Rpb24sIGxvY2F0aW9uQ2hhbmdlLCBoaXN0b3J5TmF2aWdhdGlv
biwgZm9ybVN1Ym1pc3Npb24gfTsKIAogICAgIGNvbnN0IFR5cGUgdHlwZTsKICAgICBjb25zdCBk
b3VibGUgZGVsYXk7CiAgICAgY29uc3QgU3RyaW5nIHVybDsKICAgICBjb25zdCBTdHJpbmcgcmVm
ZXJyZXI7CisgICAgY29uc3QgRnJhbWVMb2FkUmVxdWVzdCBmcmFtZVJlcXVlc3Q7CisgICAgY29u
c3QgUmVmUHRyPEV2ZW50PiBldmVudDsKKyAgICBjb25zdCBSZWZQdHI8Rm9ybVN0YXRlPiBmb3Jt
U3RhdGU7CiAgICAgY29uc3QgaW50IGhpc3RvcnlTdGVwczsKICAgICBjb25zdCBib29sIGxvY2tI
aXN0b3J5OwogICAgIGNvbnN0IGJvb2wgbG9ja0JhY2tGb3J3YXJkTGlzdDsKICAgICBjb25zdCBi
b29sIHdhc1VzZXJHZXN0dXJlOwogICAgIGNvbnN0IGJvb2wgd2FzUmVmcmVzaDsKKyAgICBjb25z
dCBib29sIHdhc0R1cmluZ0xvYWQ7CiAKICAgICBTY2hlZHVsZWRSZWRpcmVjdGlvbihkb3VibGUg
ZGVsYXksIGNvbnN0IFN0cmluZyYgdXJsLCBib29sIGxvY2tIaXN0b3J5LCBib29sIGxvY2tCYWNr
Rm9yd2FyZExpc3QsIGJvb2wgd2FzVXNlckdlc3R1cmUsIGJvb2wgcmVmcmVzaCkKICAgICAgICAg
OiB0eXBlKHJlZGlyZWN0aW9uKQpAQCAtMTkyLDEyICsxNjksMTMgQEAgc3RydWN0IFNjaGVkdWxl
ZFJlZGlyZWN0aW9uIHsKICAgICAgICAgLCBsb2NrQmFja0ZvcndhcmRMaXN0KGxvY2tCYWNrRm9y
d2FyZExpc3QpCiAgICAgICAgICwgd2FzVXNlckdlc3R1cmUod2FzVXNlckdlc3R1cmUpCiAgICAg
ICAgICwgd2FzUmVmcmVzaChyZWZyZXNoKQorICAgICAgICAsIHdhc0R1cmluZ0xvYWQoZmFsc2Up
CiAgICAgewogICAgICAgICBBU1NFUlQoIXVybC5pc0VtcHR5KCkpOwogICAgIH0KIAotICAgIFNj
aGVkdWxlZFJlZGlyZWN0aW9uKFR5cGUgbG9jYXRpb25DaGFuZ2VUeXBlLCBjb25zdCBTdHJpbmcm
IHVybCwgY29uc3QgU3RyaW5nJiByZWZlcnJlciwgYm9vbCBsb2NrSGlzdG9yeSwgYm9vbCBsb2Nr
QmFja0ZvcndhcmRMaXN0LCBib29sIHdhc1VzZXJHZXN0dXJlLCBib29sIHJlZnJlc2gpCi0gICAg
ICAgIDogdHlwZShsb2NhdGlvbkNoYW5nZVR5cGUpCisgICAgU2NoZWR1bGVkUmVkaXJlY3Rpb24o
Y29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgcmVmZXJyZXIsIGJvb2wgbG9ja0hpc3Rv
cnksIGJvb2wgbG9ja0JhY2tGb3J3YXJkTGlzdCwgYm9vbCB3YXNVc2VyR2VzdHVyZSwgYm9vbCBy
ZWZyZXNoLCBib29sIGR1cmluZ0xvYWQpCisgICAgICAgIDogdHlwZShsb2NhdGlvbkNoYW5nZSkK
ICAgICAgICAgLCBkZWxheSgwKQogICAgICAgICAsIHVybCh1cmwpCiAgICAgICAgICwgcmVmZXJy
ZXIocmVmZXJyZXIpCkBAIC0yMDYsOCArMTg0LDggQEAgc3RydWN0IFNjaGVkdWxlZFJlZGlyZWN0
aW9uIHsKICAgICAgICAgLCBsb2NrQmFja0ZvcndhcmRMaXN0KGxvY2tCYWNrRm9yd2FyZExpc3Qp
CiAgICAgICAgICwgd2FzVXNlckdlc3R1cmUod2FzVXNlckdlc3R1cmUpCiAgICAgICAgICwgd2Fz
UmVmcmVzaChyZWZyZXNoKQorICAgICAgICAsIHdhc0R1cmluZ0xvYWQoZHVyaW5nTG9hZCkKICAg
ICB7Ci0gICAgICAgIEFTU0VSVChsb2NhdGlvbkNoYW5nZVR5cGUgPT0gbG9jYXRpb25DaGFuZ2Ug
fHwgbG9jYXRpb25DaGFuZ2VUeXBlID09IGxvY2F0aW9uQ2hhbmdlRHVyaW5nTG9hZCk7CiAgICAg
ICAgIEFTU0VSVCghdXJsLmlzRW1wdHkoKSk7CiAgICAgfQogCkBAIC0yMTksNyArMTk3LDI3IEBA
IHN0cnVjdCBTY2hlZHVsZWRSZWRpcmVjdGlvbiB7CiAgICAgICAgICwgbG9ja0JhY2tGb3J3YXJk
TGlzdChmYWxzZSkKICAgICAgICAgLCB3YXNVc2VyR2VzdHVyZShmYWxzZSkKICAgICAgICAgLCB3
YXNSZWZyZXNoKGZhbHNlKQorICAgICAgICAsIHdhc0R1cmluZ0xvYWQoZmFsc2UpCisgICAgewor
ICAgIH0KKworICAgIFNjaGVkdWxlZFJlZGlyZWN0aW9uKGNvbnN0IEZyYW1lTG9hZFJlcXVlc3Qm
IGZyYW1lUmVxdWVzdCwKKyAgICAgICAgICAgIGJvb2wgbG9ja0hpc3RvcnksIGJvb2wgbG9ja0Jh
Y2tGb3J3YXJkTGlzdCwgUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQsIFBhc3NSZWZQdHI8Rm9ybVN0
YXRlPiBmb3JtU3RhdGUsCisgICAgICAgICAgICBib29sIGR1cmluZ0xvYWQpCisgICAgICAgIDog
dHlwZShmb3JtU3VibWlzc2lvbikKKyAgICAgICAgLCBkZWxheSgwKQorICAgICAgICAsIGZyYW1l
UmVxdWVzdChmcmFtZVJlcXVlc3QpCisgICAgICAgICwgZXZlbnQoZXZlbnQpCisgICAgICAgICwg
Zm9ybVN0YXRlKGZvcm1TdGF0ZSkKKyAgICAgICAgLCBoaXN0b3J5U3RlcHMoMCkKKyAgICAgICAg
LCBsb2NrSGlzdG9yeShsb2NrSGlzdG9yeSkKKyAgICAgICAgLCBsb2NrQmFja0ZvcndhcmRMaXN0
KGxvY2tCYWNrRm9yd2FyZExpc3QpCisgICAgICAgICwgd2FzVXNlckdlc3R1cmUoZmFsc2UpCisg
ICAgICAgICwgd2FzUmVmcmVzaChmYWxzZSkKKyAgICAgICAgLCB3YXNEdXJpbmdMb2FkKGR1cmlu
Z0xvYWQpCiAgICAgeworICAgICAgICBBU1NFUlQoIWZyYW1lUmVxdWVzdC5pc0VtcHR5KCkpOwor
ICAgICAgICBBU1NFUlQodGhpcy0+Zm9ybVN0YXRlKTsKICAgICB9CiB9OwogCkBAIC0yNzEsNyAr
MjY5LDYgQEAgRnJhbWVMb2FkZXI6OkZyYW1lTG9hZGVyKEZyYW1lKiBmcmFtZSwgRgogICAgICwg
bV9xdWlja1JlZGlyZWN0Q29taW5nKGZhbHNlKQogICAgICwgbV9zZW50UmVkaXJlY3ROb3RpZmlj
YXRpb24oZmFsc2UpCiAgICAgLCBtX2luU3RvcEFsbExvYWRlcnMoZmFsc2UpCi0gICAgLCBtX25h
dmlnYXRpb25EdXJpbmdMb2FkKGZhbHNlKQogICAgICwgbV9pc0V4ZWN1dGluZ0phdmFTY3JpcHRG
b3JtQWN0aW9uKGZhbHNlKQogICAgICwgbV9pc1J1bm5pbmdTY3JpcHQoZmFsc2UpCiAgICAgLCBt
X2RpZENhbGxJbXBsaWNpdENsb3NlKGZhbHNlKQpAQCAtMzQ3LDcgKzM0NCw3IEBAIEZyYW1lKiBG
cmFtZUxvYWRlcjo6Y3JlYXRlV2luZG93KEZyYW1lTG8KICAgICAgICAgRnJhbWUqIGZyYW1lID0g
ZnJhbWVMb2FkZXJGb3JGcmFtZUxvb2t1cC0+ZnJhbWUoKS0+dHJlZSgpLT5maW5kKHJlcXVlc3Qu
ZnJhbWVOYW1lKCkpOwogICAgICAgICBpZiAoZnJhbWUgJiYgc2hvdWxkQWxsb3dOYXZpZ2F0aW9u
KGZyYW1lKSkgewogICAgICAgICAgICAgaWYgKCFyZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnVy
bCgpLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBmcmFtZS0+bG9hZGVyKCktPmxvYWRGcmFt
ZVJlcXVlc3RXaXRoRm9ybUFuZFZhbHVlcyhyZXF1ZXN0LCBmYWxzZSwgZmFsc2UsIDAsIDAsIEhh
c2hNYXA8U3RyaW5nLCBTdHJpbmc+KCkpOworICAgICAgICAgICAgICAgIGZyYW1lLT5sb2FkZXIo
KS0+bG9hZEZyYW1lUmVxdWVzdChyZXF1ZXN0LCBmYWxzZSwgZmFsc2UsIDAsIDApOwogICAgICAg
ICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpKQogICAgICAgICAgICAgICAgIHBh
Z2UtPmNocm9tZSgpLT5mb2N1cygpOwogICAgICAgICAgICAgY3JlYXRlZCA9IGZhbHNlOwpAQCAt
NDMyLDcgKzQyOSw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6OnVybFNlbGVjdGVkKGNvbnN0IFJlc28K
ICAgICAgICAgZnJhbWVSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldEhUVFBSZWZlcnJlciht
X291dGdvaW5nUmVmZXJyZXIpOwogICAgIGFkZEhUVFBPcmlnaW5JZk5lZWRlZChmcmFtZVJlcXVl
c3QucmVzb3VyY2VSZXF1ZXN0KCksIG91dGdvaW5nT3JpZ2luKCkpOwogCi0gICAgbG9hZEZyYW1l
UmVxdWVzdFdpdGhGb3JtQW5kVmFsdWVzKGZyYW1lUmVxdWVzdCwgbG9ja0hpc3RvcnksIGxvY2tC
YWNrRm9yd2FyZExpc3QsIHRyaWdnZXJpbmdFdmVudCwgMCwgSGFzaE1hcDxTdHJpbmcsIFN0cmlu
Zz4oKSk7CisgICAgbG9hZEZyYW1lUmVxdWVzdChmcmFtZVJlcXVlc3QsIGxvY2tIaXN0b3J5LCBs
b2NrQmFja0ZvcndhcmRMaXN0LCB0cmlnZ2VyaW5nRXZlbnQsIDApOwogfQogCiBib29sIEZyYW1l
TG9hZGVyOjpyZXF1ZXN0RnJhbWUoSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lckVsZW1lbnQs
IGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nLCBjb25zdCBBdG9taWNTdHJpbmcmIGZyYW1lTmFtZSkK
QEAgLTQ3OSw4ICs0NzYsNyBAQCBGcmFtZSogRnJhbWVMb2FkZXI6OmxvYWRTdWJmcmFtZShIVE1M
RnJhCiAgICAgfQogCiAgICAgYm9vbCBoaWRlUmVmZXJyZXIgPSBzaG91bGRIaWRlUmVmZXJyZXIo
dXJsLCByZWZlcnJlcik7Ci0gICAgUmVmUHRyPEZyYW1lPiBmcmFtZSA9IG1fY2xpZW50LT5jcmVh
dGVGcmFtZSh1cmwsIG5hbWUsIG93bmVyRWxlbWVudCwgaGlkZVJlZmVycmVyID8gU3RyaW5nKCkg
OiByZWZlcnJlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxs
b3dzU2Nyb2xsaW5nLCBtYXJnaW5XaWR0aCwgbWFyZ2luSGVpZ2h0KTsKKyAgICBSZWZQdHI8RnJh
bWU+IGZyYW1lID0gbV9jbGllbnQtPmNyZWF0ZUZyYW1lKHVybCwgbmFtZSwgb3duZXJFbGVtZW50
LCBoaWRlUmVmZXJyZXIgPyBTdHJpbmcoKSA6IHJlZmVycmVyLCBhbGxvd3NTY3JvbGxpbmcsIG1h
cmdpbldpZHRoLCBtYXJnaW5IZWlnaHQpOwogCiAgICAgaWYgKCFmcmFtZSkgIHsKICAgICAgICAg
Y2hlY2tDYWxsSW1wbGljaXRDbG9zZSgpOwpAQCAtNTEwLDI3ICs1MDYsMjAgQEAgRnJhbWUqIEZy
YW1lTG9hZGVyOjpsb2FkU3ViZnJhbWUoSFRNTEZyYQogICAgIHJldHVybiBmcmFtZS5nZXQoKTsK
IH0KIAotdm9pZCBGcmFtZUxvYWRlcjo6c3VibWl0Rm9ybUFnYWluKCkKLXsKLSAgICBpZiAobV9p
c1J1bm5pbmdTY3JpcHQpCi0gICAgICAgIHJldHVybjsKLSAgICBPd25QdHI8Rm9ybVN1Ym1pc3Np
b24+IGZvcm0obV9kZWZlcnJlZEZvcm1TdWJtaXNzaW9uLnJlbGVhc2UoKSk7Ci0gICAgaWYgKCFm
b3JtKQotICAgICAgICByZXR1cm47Ci0gICAgc3VibWl0Rm9ybShmb3JtLT5hY3Rpb24sIGZvcm0t
PnVybCwgZm9ybS0+Zm9ybURhdGEsIGZvcm0tPnRhcmdldCwgZm9ybS0+Y29udGVudFR5cGUsIGZv
cm0tPmJvdW5kYXJ5LCBmb3JtLT5ldmVudC5nZXQoKSwgZm9ybS0+bG9ja0hpc3RvcnksIGZvcm0t
PmxvY2tCYWNrRm9yd2FyZExpc3QpOwotfQotCiB2b2lkIEZyYW1lTG9hZGVyOjpzdWJtaXRGb3Jt
KGNvbnN0IGNoYXIqIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB1cmwsIFBhc3NSZWZQdHI8Rm9ybURh
dGE+IGZvcm1EYXRhLAotICAgIGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBjb25zdCBTdHJpbmcmIGNv
bnRlbnRUeXBlLCBjb25zdCBTdHJpbmcmIGJvdW5kYXJ5LCBQYXNzUmVmUHRyPEV2ZW50PiBldmVu
dCwgYm9vbCBsb2NrSGlzdG9yeSwgYm9vbCBsb2NrQmFja0ZvcndhcmRMaXN0KQorICAgIGNvbnN0
IFN0cmluZyYgdGFyZ2V0LCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlLCBjb25zdCBTdHJpbmcm
IGJvdW5kYXJ5LAorICAgIGJvb2wgbG9ja0hpc3RvcnksIGJvb2wgbG9ja0JhY2tGb3J3YXJkTGlz
dCwgUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQsIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPiBmb3JtU3Rh
dGUpCiB7CisgICAgQVNTRVJUKGFjdGlvbik7CisgICAgQVNTRVJUKHN0cmNtcChhY3Rpb24sICJH
RVQiKSA9PSAwIHx8IHN0cmNtcChhY3Rpb24sICJQT1NUIikgPT0gMCk7CiAgICAgQVNTRVJUKGZv
cm1EYXRhKTsKKyAgICBBU1NFUlQoZm9ybVN0YXRlKTsKKyAgICBBU1NFUlQoZm9ybVN0YXRlLT5z
b3VyY2VGcmFtZSgpID09IG1fZnJhbWUpOwogICAgIAogICAgIGlmICghbV9mcmFtZS0+cGFnZSgp
KQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgS1VSTCB1ID0gY29tcGxldGVVUkwodXJsLmlz
TnVsbCgpID8gIiIgOiB1cmwpOwotICAgIC8vIEZJWE1FOiBEbyB3ZSByZWFsbHkgbmVlZCB0byBz
cGVjaWFsLWNhc2UgYW4gZW1wdHkgVVJMPwotICAgIC8vIFdvdWxkIGl0IGJlIGJldHRlciB0byBq
dXN0IGdvIG9uIHdpdGggdGhlIGZvcm0gc3VibWlzc29uIGFuZCBsZXQgdGhlIEkvTyBmYWlsPwog
ICAgIGlmICh1LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC01NDEsMjcgKzUzMCw0
NSBAQCB2b2lkIEZyYW1lTG9hZGVyOjpzdWJtaXRGb3JtKGNvbnN0IGNoYXIqCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBpZiAobV9pc1J1bm5pbmdTY3JpcHQpIHsKLSAgICAgICAgaWYg
KG1fZGVmZXJyZWRGb3JtU3VibWlzc2lvbikKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
bV9kZWZlcnJlZEZvcm1TdWJtaXNzaW9uLnNldChuZXcgRm9ybVN1Ym1pc3Npb24oYWN0aW9uLCB1
cmwsIGZvcm1EYXRhLCB0YXJnZXQsIGNvbnRlbnRUeXBlLCBib3VuZGFyeSwgZXZlbnQsIGxvY2tI
aXN0b3J5LCBsb2NrQmFja0ZvcndhcmRMaXN0KSk7CisgICAgRnJhbWVMb2FkUmVxdWVzdCBmcmFt
ZVJlcXVlc3Q7CisKKyAgICBTdHJpbmcgdGFyZ2V0T3JCYXNlVGFyZ2V0ID0gdGFyZ2V0LmlzRW1w
dHkoKSA/IG1fZnJhbWUtPmRvY3VtZW50KCktPmJhc2VUYXJnZXQoKSA6IHRhcmdldDsKKyAgICBG
cmFtZSogdGFyZ2V0RnJhbWUgPSBmaW5kRnJhbWVGb3JOYXZpZ2F0aW9uKHRhcmdldE9yQmFzZVRh
cmdldCk7CisgICAgaWYgKCF0YXJnZXRGcmFtZSkgeworICAgICAgICB0YXJnZXRGcmFtZSA9IG1f
ZnJhbWU7CisgICAgICAgIGZyYW1lUmVxdWVzdC5zZXRGcmFtZU5hbWUodGFyZ2V0T3JCYXNlVGFy
Z2V0KTsKKyAgICB9CisgICAgaWYgKCF0YXJnZXRGcmFtZS0+cGFnZSgpKQogICAgICAgICByZXR1
cm47CisKKyAgICAvLyBGSVhNRTogV2UnZCBsaWtlIHRvIHJlbW92ZSB0aGlzIGFsdG9nZXRoZXIg
YW5kIGZpeCB0aGUgbXVsdGlwbGUgZm9ybSBzdWJtaXNzaW9uIGlzc3VlIGFub3RoZXIgd2F5Lgor
CisgICAgLy8gV2UgZG8gbm90IHdhbnQgdG8gc3VibWl0IG1vcmUgdGhhbiBvbmUgZm9ybSBmcm9t
IHRoZSBzYW1lIHBhZ2UsIG5vciBkbyB3ZSB3YW50IHRvIHN1Ym1pdCBhIHNpbmdsZQorICAgIC8v
IGZvcm0gbW9yZSB0aGFuIG9uY2UuIFRoaXMgZmxhZyBwcmV2ZW50cyB0aGVzZSBmcm9tIGhhcHBl
bmluZzsgbm90IHN1cmUgaG93IG90aGVyIGJyb3dzZXJzIHByZXZlbnQgdGhpcy4KKyAgICAvLyBU
aGUgZmxhZyBpcyByZXNldCBpbiBlYWNoIHRpbWUgd2Ugc3RhcnQgaGFuZGxlIGEgbmV3IG1vdXNl
IG9yIGtleSBkb3duIGV2ZW50LCBhbmQKKyAgICAvLyBhbHNvIGluIHNldFZpZXcgc2luY2UgdGhp
cyBwYXJ0IG1heSBnZXQgcmV1c2VkIGZvciBhIHBhZ2UgZnJvbSB0aGUgYmFjay9mb3J3YXJkIGNh
Y2hlLgorICAgIC8vIFRoZSBmb3JtIG11bHRpLXN1Ym1pdCBsb2dpYyBoZXJlIGlzIG9ubHkgbmVl
ZGVkIHdoZW4gd2UgYXJlIHN1Ym1pdHRpbmcgYSBmb3JtIHRoYXQgYWZmZWN0cyB0aGlzIGZyYW1l
LgorCisgICAgLy8gRklYTUU6IEZyYW1lIHRhcmdldGluZyBpcyBvbmx5IG9uZSBvZiB0aGUgd2F5
cyB0aGUgc3VibWlzc2lvbiBjb3VsZCBlbmQgdXAgZG9pbmcgc29tZXRoaW5nIG90aGVyCisgICAg
Ly8gdGhhbiByZXBsYWNpbmcgdGhpcyBmcmFtZSdzIGNvbnRlbnQsIHNvIHRoaXMgY2hlY2sgaXMg
Zmxhd2VkLiBPbiB0aGUgb3RoZXIgaGFuZCwgdGhlIGNoZWNrIGlzIGhhcmRseQorICAgIC8vIG5l
ZWRlZCBhbnkgbW9yZSBub3cgdGhhdCB3ZSByZXNldCBtX3N1Ym1pdHRlZEZvcm1VUkwgb24gZWFj
aCBtb3VzZSBvciBrZXkgZG93biBldmVudC4KKworICAgIGlmIChtX2ZyYW1lLT50cmVlKCktPmlz
RGVzY2VuZGFudE9mKHRhcmdldEZyYW1lKSkgeworICAgICAgICBpZiAobV9zdWJtaXR0ZWRGb3Jt
VVJMID09IHUpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fc3VibWl0dGVkRm9ybVVS
TCA9IHU7CiAgICAgfQogCiAgICAgZm9ybURhdGEtPmdlbmVyYXRlRmlsZXMobV9mcmFtZS0+cGFn
ZSgpLT5jaHJvbWUoKS0+Y2xpZW50KCkpOwogICAgIAotICAgIEZyYW1lTG9hZFJlcXVlc3QgZnJh
bWVSZXF1ZXN0OwotCiAgICAgaWYgKCFtX291dGdvaW5nUmVmZXJyZXIuaXNFbXB0eSgpKQogICAg
ICAgICBmcmFtZVJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0SFRUUFJlZmVycmVyKG1fb3V0
Z29pbmdSZWZlcnJlcik7CiAKLSAgICBmcmFtZVJlcXVlc3Quc2V0RnJhbWVOYW1lKHRhcmdldC5p
c0VtcHR5KCkgPyBtX2ZyYW1lLT5kb2N1bWVudCgpLT5iYXNlVGFyZ2V0KCkgOiB0YXJnZXQpOwot
CiAgICAgaWYgKHN0cmNtcChhY3Rpb24sICJHRVQiKSA9PSAwKQogICAgICAgICB1LnNldFF1ZXJ5
KGZvcm1EYXRhLT5mbGF0dGVuVG9TdHJpbmcoKSk7CiAgICAgZWxzZSB7CiAgICAgICAgIGZyYW1l
UmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRIVFRQTWV0aG9kKCJQT1NUIik7Ci0gICAgICAg
IGZyYW1lUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRIVFRQQm9keShmb3JtRGF0YS5nZXQo
KSk7CisgICAgICAgIGZyYW1lUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRIVFRQQm9keShm
b3JtRGF0YSk7CiAKICAgICAgICAgLy8gY29uc3RydWN0IHNvbWUgdXNlciBoZWFkZXJzIGlmIG5l
Y2Vzc2FyeQogICAgICAgICBpZiAoY29udGVudFR5cGUuaXNOdWxsKCkgfHwgY29udGVudFR5cGUg
PT0gImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpCkBAIC01NzMsNyArNTgwLDIx
IEBAIHZvaWQgRnJhbWVMb2FkZXI6OnN1Ym1pdEZvcm0oY29uc3QgY2hhcioKICAgICBmcmFtZVJl
cXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0VVJMKHUpOwogICAgIGFkZEhUVFBPcmlnaW5JZk5l
ZWRlZChmcmFtZVJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCksIG91dGdvaW5nT3JpZ2luKCkpOwog
Ci0gICAgc3VibWl0Rm9ybShmcmFtZVJlcXVlc3QsIGV2ZW50LCBsb2NrSGlzdG9yeSwgbG9ja0Jh
Y2tGb3J3YXJkTGlzdCk7CisgICAgLy8gTmF2aWdhdGlvbiBvZiBhIHN1YmZyYW1lIGR1cmluZyBs
b2FkaW5nIG9mIHRoZSBtYWluIGZyYW1lIGRvZXMgbm90IGNyZWF0ZSBhIG5ldyBiYWNrL2Zvcndh
cmQgaXRlbS4KKyAgICAvLyBTdHJhbmdlbHksIHdlIG9ubHkgaW1wbGVtZW50IHRoaXMgcnVsZSBm
b3IgZm9ybSBzdWJtaXNzaW9uOyB0aW1lIHdpbGwgdGVsbCBpZiB3ZSBuZWVkIGl0IGZvciBvdGhl
ciB0eXBlcyBvZiBuYXZpZ2F0aW9uLgorICAgIC8vIFRoZSBkZWZpbml0aW9uIG9mICJkdXJpbmcg
bG9hZCIgaXMgYW55IHRpbWUgYmVmb3JlIHRoZSBsb2FkIGV2ZW50IGhhcyBiZWVuIGhhbmRsZWQu
CisgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDk1
NyBmb3IgdGhlIG9yaWdpbmFsIG1vdGl2YXRpb24gZm9yIHRoaXMuCisgICAgaWYgKFBhZ2UqIHRh
cmdldFBhZ2UgPSB0YXJnZXRGcmFtZS0+cGFnZSgpKSB7CisgICAgICAgIEZyYW1lKiBtYWluRnJh
bWUgPSB0YXJnZXRQYWdlLT5tYWluRnJhbWUoKTsKKyAgICAgICAgaWYgKG1haW5GcmFtZSAhPSB0
YXJnZXRGcmFtZSkgeworICAgICAgICAgICAgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lciA9
IHRhcmdldEZyYW1lLT5vd25lckVsZW1lbnQoKTsKKyAgICAgICAgICAgIERvY3VtZW50KiBkb2N1
bWVudCA9IG1haW5GcmFtZS0+ZG9jdW1lbnQoKTsKKyAgICAgICAgICAgIGlmIChvd25lciAmJiAh
b3duZXItPmNyZWF0ZWRCeVBhcnNlcigpICYmICghbWFpbkZyYW1lLT5sb2FkZXIoKS0+aXNDb21w
bGV0ZSgpIHx8IGRvY3VtZW50ICYmIGRvY3VtZW50LT5wcm9jZXNzaW5nTG9hZEV2ZW50KCkpKQor
ICAgICAgICAgICAgICAgIGxvY2tCYWNrRm9yd2FyZExpc3QgPSB0cnVlOworICAgICAgICB9Cisg
ICAgfQorCisgICAgdGFyZ2V0RnJhbWUtPmxvYWRlcigpLT5zY2hlZHVsZUZvcm1TdWJtaXNzaW9u
KGZyYW1lUmVxdWVzdCwgbG9ja0hpc3RvcnksIGxvY2tCYWNrRm9yd2FyZExpc3QsIGV2ZW50LCBm
b3JtU3RhdGUpOwogfQogCiB2b2lkIEZyYW1lTG9hZGVyOjpzdG9wTG9hZGluZyhib29sIHNlbmRV
bmxvYWQpCkBAIC02ODQsMTAgKzcwNSwxMSBAQCBLVVJMIEZyYW1lTG9hZGVyOjppY29uVVJMKCkK
IAogYm9vbCBGcmFtZUxvYWRlcjo6ZGlkT3BlblVSTChjb25zdCBLVVJMJiB1cmwpCiB7Ci0gICAg
aWYgKG1fc2NoZWR1bGVkUmVkaXJlY3Rpb24gJiYgbV9zY2hlZHVsZWRSZWRpcmVjdGlvbi0+dHlw
ZSA9PSBTY2hlZHVsZWRSZWRpcmVjdGlvbjo6bG9jYXRpb25DaGFuZ2VEdXJpbmdMb2FkKQorICAg
IGlmIChtX3NjaGVkdWxlZFJlZGlyZWN0aW9uICYmIG1fc2NoZWR1bGVkUmVkaXJlY3Rpb24tPndh
c0R1cmluZ0xvYWQpIHsKICAgICAgICAgLy8gQSByZWRpcmVjdCB3YXMgc2NoZWR1bGVkIGJlZm9y
ZSB0aGUgZG9jdW1lbnQgd2FzIGNyZWF0ZWQuCiAgICAgICAgIC8vIFRoaXMgY2FuIGhhcHBlbiB3
aGVuIG9uZSBmcmFtZSBjaGFuZ2VzIGFub3RoZXIgZnJhbWUncyBsb2NhdGlvbi4KICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KIAogICAgIGNhbmNlbFJlZGlyZWN0aW9uKCk7CiAgICAgbV9m
cmFtZS0+ZWRpdG9yKCktPmNsZWFyTGFzdEVkaXRDb21tYW5kKCk7CkBAIC03NzUsNyArNzk3LDYg
QEAgU2NyaXB0VmFsdWUgRnJhbWVMb2FkZXI6OmV4ZWN1dGVTY3JpcHQoYwogCiAgICAgaWYgKCF3
YXNSdW5uaW5nU2NyaXB0KSB7CiAgICAgICAgIG1faXNSdW5uaW5nU2NyaXB0ID0gZmFsc2U7Ci0g
ICAgICAgIHN1Ym1pdEZvcm1BZ2FpbigpOwogICAgICAgICBEb2N1bWVudDo6dXBkYXRlRG9jdW1l
bnRzUmVuZGVyaW5nKCk7CiAgICAgfQogCkBAIC0xMzQ5LDE4ICsxMzcwLDIzIEBAIHZvaWQgRnJh
bWVMb2FkZXI6OnNjaGVkdWxlTG9jYXRpb25DaGFuZ2UKICAgICAvLyBUaGlzIG1heSBoYXBwZW4g
d2hlbiBhIGZyYW1lIGNoYW5nZXMgdGhlIGxvY2F0aW9uIG9mIGFub3RoZXIgZnJhbWUuCiAgICAg
Ym9vbCBkdXJpbmdMb2FkID0gIW1fY29tbWl0dGVkRmlyc3RSZWFsRG9jdW1lbnRMb2FkOwogCi0g
ICAgLy8gSWYgYSByZWRpcmVjdCB3YXMgc2NoZWR1bGVkIGR1cmluZyBhIGxvYWQsIHRoZW4gc3Rv
cCB0aGUgY3VycmVudCBsb2FkLgotICAgIC8vIE90aGVyd2lzZSB3aGVuIHRoZSBjdXJyZW50IGxv
YWQgdHJhbnNpdGlvbnMgZnJvbSBhIHByb3Zpc2lvbmFsIHRvIGEgCi0gICAgLy8gY29tbWl0dGVk
IHN0YXRlLCBwZW5kaW5nIHJlZGlyZWN0cyBtYXkgYmUgY2FuY2VsbGVkLiAKLSAgICBpZiAoZHVy
aW5nTG9hZCkgewotICAgICAgICBpZiAobV9wcm92aXNpb25hbERvY3VtZW50TG9hZGVyKQotICAg
ICAgICAgICAgbV9wcm92aXNpb25hbERvY3VtZW50TG9hZGVyLT5zdG9wTG9hZGluZygpOwotICAg
ICAgICBzdG9wTG9hZGluZyh0cnVlKTsgICAKLSAgICB9CisgICAgc2NoZWR1bGVSZWRpcmVjdGlv
bihuZXcgU2NoZWR1bGVkUmVkaXJlY3Rpb24odXJsLCByZWZlcnJlciwgbG9ja0hpc3RvcnksIGxv
Y2tCYWNrRm9yd2FyZExpc3QsIHdhc1VzZXJHZXN0dXJlLCBmYWxzZSwgZHVyaW5nTG9hZCkpOwor
fQorCit2b2lkIEZyYW1lTG9hZGVyOjpzY2hlZHVsZUZvcm1TdWJtaXNzaW9uKGNvbnN0IEZyYW1l
TG9hZFJlcXVlc3QmIGZyYW1lUmVxdWVzdCwKKyAgICBib29sIGxvY2tIaXN0b3J5LCBib29sIGxv
Y2tCYWNrRm9yd2FyZExpc3QsIFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50LCBQYXNzUmVmUHRyPEZv
cm1TdGF0ZT4gZm9ybVN0YXRlKQoreworICAgIEFTU0VSVChtX2ZyYW1lLT5wYWdlKCkpOworICAg
IEFTU0VSVCghZnJhbWVSZXF1ZXN0LmlzRW1wdHkoKSk7CisKKyAgICAvLyBGSVhNRTogRG8gd2Ug
bmVlZCBzcGVjaWFsIGhhbmRsaW5nIGZvciBmb3JtIHN1Ym1pc3Npb25zIHdoZXJlIHRoZSBVUkwg
aXMgdGhlIHNhbWUKKyAgICAvLyBhcyB0aGUgY3VycmVudCBvbmUgZXhjZXB0IGZvciB0aGUgZnJh
Z21lbnQgcGFydD8gU2VlIHNjaGVkdWxlTG9jYXRpb25DaGFuZ2UgYWJvdmUuCisKKyAgICAvLyBI
YW5kbGUgYSBsb2NhdGlvbiBjaGFuZ2Ugb2YgYSBwYWdlIHdpdGggbm8gZG9jdW1lbnQgYXMgYSBz
cGVjaWFsIGNhc2UuCisgICAgLy8gVGhpcyBtYXkgaGFwcGVuIHdoZW4gYSBmcmFtZSBjaGFuZ2Vz
IHRoZSBsb2NhdGlvbiBvZiBhbm90aGVyIGZyYW1lLgorICAgIGJvb2wgZHVyaW5nTG9hZCA9ICFt
X2NvbW1pdHRlZEZpcnN0UmVhbERvY3VtZW50TG9hZDsKIAotICAgIFNjaGVkdWxlZFJlZGlyZWN0
aW9uOjpUeXBlIHR5cGUgPSBkdXJpbmdMb2FkCi0gICAgICAgID8gU2NoZWR1bGVkUmVkaXJlY3Rp
b246OmxvY2F0aW9uQ2hhbmdlRHVyaW5nTG9hZCA6IFNjaGVkdWxlZFJlZGlyZWN0aW9uOjpsb2Nh
dGlvbkNoYW5nZTsKLSAgICBzY2hlZHVsZVJlZGlyZWN0aW9uKG5ldyBTY2hlZHVsZWRSZWRpcmVj
dGlvbih0eXBlLCB1cmwsIHJlZmVycmVyLCBsb2NrSGlzdG9yeSwgbG9ja0JhY2tGb3J3YXJkTGlz
dCwgd2FzVXNlckdlc3R1cmUsIGZhbHNlKSk7CisgICAgc2NoZWR1bGVSZWRpcmVjdGlvbihuZXcg
U2NoZWR1bGVkUmVkaXJlY3Rpb24oZnJhbWVSZXF1ZXN0LCBsb2NrSGlzdG9yeSwgbG9ja0JhY2tG
b3J3YXJkTGlzdCwgZXZlbnQsIGZvcm1TdGF0ZSwgZHVyaW5nTG9hZCkpOwogfQogCiB2b2lkIEZy
YW1lTG9hZGVyOjpzY2hlZHVsZVJlZnJlc2goYm9vbCB3YXNVc2VyR2VzdHVyZSkKQEAgLTEzNzEs
OCArMTM5Nyw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6OnNjaGVkdWxlUmVmcmVzaChib29sIHcKICAg
ICBpZiAobV9VUkwuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBTY2hlZHVsZWRS
ZWRpcmVjdGlvbjo6VHlwZSB0eXBlID0gU2NoZWR1bGVkUmVkaXJlY3Rpb246OmxvY2F0aW9uQ2hh
bmdlOwotICAgIHNjaGVkdWxlUmVkaXJlY3Rpb24obmV3IFNjaGVkdWxlZFJlZGlyZWN0aW9uKHR5
cGUsIG1fVVJMLnN0cmluZygpLCBtX291dGdvaW5nUmVmZXJyZXIsIHRydWUsIHRydWUsIHdhc1Vz
ZXJHZXN0dXJlLCB0cnVlKSk7CisgICAgc2NoZWR1bGVSZWRpcmVjdGlvbihuZXcgU2NoZWR1bGVk
UmVkaXJlY3Rpb24obV9VUkwuc3RyaW5nKCksIG1fb3V0Z29pbmdSZWZlcnJlciwgdHJ1ZSwgdHJ1
ZSwgd2FzVXNlckdlc3R1cmUsIHRydWUsIGZhbHNlKSk7CiB9CiAKIGJvb2wgRnJhbWVMb2FkZXI6
OmlzTG9jYXRpb25DaGFuZ2UoY29uc3QgU2NoZWR1bGVkUmVkaXJlY3Rpb24mIHJlZGlyZWN0aW9u
KQpAQCAtMTM4Miw3ICsxNDA3LDcgQEAgYm9vbCBGcmFtZUxvYWRlcjo6aXNMb2NhdGlvbkNoYW5n
ZShjb25zdAogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBjYXNlIFNjaGVkdWxl
ZFJlZGlyZWN0aW9uOjpoaXN0b3J5TmF2aWdhdGlvbjoKICAgICAgICAgY2FzZSBTY2hlZHVsZWRS
ZWRpcmVjdGlvbjo6bG9jYXRpb25DaGFuZ2U6Ci0gICAgICAgIGNhc2UgU2NoZWR1bGVkUmVkaXJl
Y3Rpb246OmxvY2F0aW9uQ2hhbmdlRHVyaW5nTG9hZDoKKyAgICAgICAgY2FzZSBTY2hlZHVsZWRS
ZWRpcmVjdGlvbjo6Zm9ybVN1Ym1pc3Npb246CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xNDU0LDggKzE0NzksNyBAQCB2b2lk
IEZyYW1lTG9hZGVyOjpyZWRpcmVjdGlvblRpbWVyRmlyZWQoCiAgICAgc3dpdGNoIChyZWRpcmVj
dGlvbi0+dHlwZSkgewogICAgICAgICBjYXNlIFNjaGVkdWxlZFJlZGlyZWN0aW9uOjpyZWRpcmVj
dGlvbjoKICAgICAgICAgY2FzZSBTY2hlZHVsZWRSZWRpcmVjdGlvbjo6bG9jYXRpb25DaGFuZ2U6
Ci0gICAgICAgIGNhc2UgU2NoZWR1bGVkUmVkaXJlY3Rpb246OmxvY2F0aW9uQ2hhbmdlRHVyaW5n
TG9hZDoKLSAgICAgICAgICAgIGNoYW5nZUxvY2F0aW9uKGNvbXBsZXRlVVJMKHJlZGlyZWN0aW9u
LT51cmwpLCByZWRpcmVjdGlvbi0+cmVmZXJyZXIsCisgICAgICAgICAgICBjaGFuZ2VMb2NhdGlv
bihLVVJMKHJlZGlyZWN0aW9uLT51cmwpLCByZWRpcmVjdGlvbi0+cmVmZXJyZXIsCiAgICAgICAg
ICAgICAgICAgcmVkaXJlY3Rpb24tPmxvY2tIaXN0b3J5LCByZWRpcmVjdGlvbi0+bG9ja0JhY2tG
b3J3YXJkTGlzdCwgcmVkaXJlY3Rpb24tPndhc1VzZXJHZXN0dXJlLCByZWRpcmVjdGlvbi0+d2Fz
UmVmcmVzaCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNhc2UgU2NoZWR1bGVkUmVk
aXJlY3Rpb246Omhpc3RvcnlOYXZpZ2F0aW9uOgpAQCAtMTQ2OCwxNyArMTQ5MiwyMSBAQCB2b2lk
IEZyYW1lTG9hZGVyOjpyZWRpcmVjdGlvblRpbWVyRmlyZWQoCiAgICAgICAgICAgICAvLyBpbiBi
b3RoIElFIGFuZCBOUyAoYnV0IG5vdCBpbiBNb3ppbGxhKS4gV2UgY2FuJ3QgZWFzaWx5IGRvIHRo
YXQuCiAgICAgICAgICAgICBnb0JhY2tPckZvcndhcmQocmVkaXJlY3Rpb24tPmhpc3RvcnlTdGVw
cyk7CiAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgU2NoZWR1bGVkUmVkaXJlY3Rp
b246OmZvcm1TdWJtaXNzaW9uOgorICAgICAgICAgICAgLy8gVGhlIHN1Ym1pdEZvcm0gZnVuY3Rp
b24gd2lsbCBmaW5kIGEgdGFyZ2V0IGZyYW1lIGJlZm9yZSB1c2luZyB0aGUgcmVkaXJlY3Rpb24g
dGltZXIuCisgICAgICAgICAgICAvLyBOb3cgdGhhdCB0aGUgdGltZXIgaGFzIGZpcmVkLCB3ZSBu
ZWVkIHRvIHJlcGVhdCB0aGUgc2VjdXJpdHkgY2hlY2sgd2hpY2ggbm9ybWFsbHkgaXMgZG9uZSB3
aGVuCisgICAgICAgICAgICAvLyBzZWxlY3RpbmcgYSB0YXJnZXQsIGluIGNhc2UgY29uZGl0aW9u
cyBoYXZlIGNoYW5nZWQuIE90aGVyIGNvZGUgcGF0aHMgYXZvaWQgdGhpcyBieSB0YXJnZXRpbmcK
KyAgICAgICAgICAgIC8vIHdpdGhvdXQgbGVhdmluZyBhIHRpbWUgd2luZG93LiBJZiB3ZSBmYWls
IHRoZSBjaGVjayBqdXN0IHNpbGVudGx5IGRyb3AgdGhlIGZvcm0gc3VibWlzc2lvbi4KKyAgICAg
ICAgICAgIGlmICghcmVkaXJlY3Rpb24tPmZvcm1TdGF0ZS0+c291cmNlRnJhbWUoKS0+bG9hZGVy
KCktPnNob3VsZEFsbG93TmF2aWdhdGlvbihtX2ZyYW1lKSkKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICBsb2FkRnJhbWVSZXF1ZXN0KHJlZGlyZWN0aW9uLT5mcmFtZVJlcXVl
c3QsIHJlZGlyZWN0aW9uLT5sb2NrSGlzdG9yeSwgcmVkaXJlY3Rpb24tPmxvY2tCYWNrRm9yd2Fy
ZExpc3QsCisgICAgICAgICAgICAgICAgcmVkaXJlY3Rpb24tPmV2ZW50LCByZWRpcmVjdGlvbi0+
Zm9ybVN0YXRlKTsKKyAgICAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKIH0KIAotLyoKLSAgICBJbiB0aGUgY2FzZSBvZiBzYXZpbmcgc3RhdGUgYWJv
dXQgYSBwYWdlIHdpdGggZnJhbWVzLCB3ZSBzdG9yZSBhIHRyZWUgb2YgaXRlbXMgdGhhdCBtaXJy
b3JzIHRoZSBmcmFtZSB0cmVlLiAgCi0gICAgVGhlIGl0ZW0gdGhhdCB3YXMgdGhlIHRhcmdldCBv
ZiB0aGUgdXNlcidzIG5hdmlnYXRpb24gaXMgZGVzaWduYXRlZCBhcyB0aGUgInRhcmdldEl0ZW0i
LiAgCi0gICAgV2hlbiB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgd2l0aCBkb0NsaXA9WUVTIHdlJ3Jl
IGFibGUgdG8gY3JlYXRlIHRoZSB3aG9sZSB0cmVlIGV4Y2VwdCBmb3IgdGhlIHRhcmdldCdzIGNo
aWxkcmVuLCAKLSAgICB3aGljaCB3aWxsIGJlIGxvYWRlZCBpbiB0aGUgZnV0dXJlLiAgVGhhdCBw
YXJ0IG9mIHRoZSB0cmVlIHdpbGwgYmUgZmlsbGVkIG91dCBhcyB0aGUgY2hpbGQgbG9hZHMgYXJl
IGNvbW1pdHRlZC4KLSovCiB2b2lkIEZyYW1lTG9hZGVyOjpsb2FkVVJMSW50b0NoaWxkRnJhbWUo
Y29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHJlZmVyZXIsIEZyYW1lKiBjaGlsZEZyYW1l
KQogewogICAgIEFTU0VSVChjaGlsZEZyYW1lKTsKQEAgLTE0OTIsNyArMTUyMCw3IEBAIHZvaWQg
RnJhbWVMb2FkZXI6OmxvYWRVUkxJbnRvQ2hpbGRGcmFtZSgKICAgICAvLyBJZiB3ZSdyZSBtb3Zp
bmcgaW4gdGhlIGJhY2svZm9yd2FyZCBsaXN0LCB3ZSBtaWdodCB3YW50IHRvIHJlcGxhY2UgdGhl
IGNvbnRlbnQKICAgICAvLyBvZiB0aGlzIGNoaWxkIGZyYW1lIHdpdGggd2hhdGV2ZXIgd2FzIHRo
ZXJlIGF0IHRoYXQgcG9pbnQuCiAgICAgaWYgKHBhcmVudEl0ZW0gJiYgcGFyZW50SXRlbS0+Y2hp
bGRyZW4oKS5zaXplKCkgJiYgaXNCYWNrRm9yd2FyZExvYWRUeXBlKGxvYWRUeXBlKSkgewotICAg
ICAgICBIaXN0b3J5SXRlbSogY2hpbGRJdGVtID0gcGFyZW50SXRlbS0+Y2hpbGRJdGVtV2l0aE5h
bWUoY2hpbGRGcmFtZS0+dHJlZSgpLT5uYW1lKCkpOworICAgICAgICBIaXN0b3J5SXRlbSogY2hp
bGRJdGVtID0gcGFyZW50SXRlbS0+Y2hpbGRJdGVtV2l0aFRhcmdldChjaGlsZEZyYW1lLT50cmVl
KCktPm5hbWUoKSk7CiAgICAgICAgIGlmIChjaGlsZEl0ZW0pIHsKICAgICAgICAgICAgIC8vIFVz
ZSB0aGUgb3JpZ2luYWwgVVJMIHRvIGVuc3VyZSB3ZSBnZXQgYWxsIHRoZSBzaWRlLWVmZmVjdHMs
IHN1Y2ggYXMKICAgICAgICAgICAgIC8vIG9uTG9hZCBoYW5kbGVycywgb2YgYW55IHJlZGlyZWN0
cyB0aGF0IGhhcHBlbmVkLiBBbiBleGFtcGxlIG9mIHdoZXJlCkBAIC0xNjk4LDIyICsxNzI2LDYg
QEAgYm9vbCBGcmFtZUxvYWRlcjo6bG9hZFBsdWdpbihSZW5kZXJQYXJ0KgogICAgIHJldHVybiB3
aWRnZXQgIT0gMDsKIH0KIAotdm9pZCBGcmFtZUxvYWRlcjo6Y2xlYXJSZWNvcmRlZEZvcm1WYWx1
ZXMoKQotewotICAgIG1fZm9ybUFib3V0VG9CZVN1Ym1pdHRlZCA9IDA7Ci0gICAgbV9mb3JtVmFs
dWVzQWJvdXRUb0JlU3VibWl0dGVkLmNsZWFyKCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXI6OnNl
dEZvcm1BYm91dFRvQmVTdWJtaXR0ZWQoUGFzc1JlZlB0cjxIVE1MRm9ybUVsZW1lbnQ+IGVsZW1l
bnQpCi17Ci0gICAgbV9mb3JtQWJvdXRUb0JlU3VibWl0dGVkID0gZWxlbWVudDsKLX0KLQotdm9p
ZCBGcmFtZUxvYWRlcjo6cmVjb3JkRm9ybVZhbHVlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBtX2Zvcm1WYWx1ZXNBYm91dFRvQmVTdWJtaXR0ZWQuc2V0
KG5hbWUsIHZhbHVlKTsKLX0KLQogdm9pZCBGcmFtZUxvYWRlcjo6cGFyZW50Q29tcGxldGVkKCkK
IHsKICAgICBpZiAobV9zY2hlZHVsZWRSZWRpcmVjdGlvbiAmJiAhbV9yZWRpcmVjdGlvblRpbWVy
LmlzQWN0aXZlKCkpCkBAIC0xNzY4LDE3ICsxNzgwLDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6aGFu
ZGxlRmFsbGJhY2tDb250ZW50KAogfQogCiB2b2lkIEZyYW1lTG9hZGVyOjpwcm92aXNpb25hbExv
YWRTdGFydGVkKCkKLXsKLSAgICBQYWdlKiBwYWdlID0gbV9mcmFtZS0+cGFnZSgpOwotICAgIAot
ICAgIC8vIHRoaXMgaXMgdXNlZCB0byB1cGRhdGUgdGhlIGN1cnJlbnQgaGlzdG9yeSBpdGVtCi0g
ICAgLy8gaW4gdGhlIGV2ZW50IG9mIGEgbmF2aWdhdGlvbiBheXRpbWUgZHVyaW5nIGxvYWRpbmcK
LSAgICBtX25hdmlnYXRpb25EdXJpbmdMb2FkID0gZmFsc2U7Ci0gICAgaWYgKHBhZ2UpIHsKLSAg
ICAgICAgRG9jdW1lbnQgKmRvY3VtZW50ID0gcGFnZS0+bWFpbkZyYW1lKCktPmRvY3VtZW50KCk7
Ci0gICAgICAgIG1fbmF2aWdhdGlvbkR1cmluZ0xvYWQgPSAhcGFnZS0+bWFpbkZyYW1lKCktPmxv
YWRlcigpLT5pc0NvbXBsZXRlKCkgfHwgKGRvY3VtZW50ICYmIGRvY3VtZW50LT5wcm9jZXNzaW5n
TG9hZEV2ZW50KCkpOwotICAgIH0KLSAgICAKK3sgICAgCiAgICAgbV9maXJzdExheW91dERvbmUg
PSBmYWxzZTsKICAgICBjYW5jZWxSZWRpcmVjdGlvbih0cnVlKTsKICAgICBtX2NsaWVudC0+cHJv
dmlzaW9uYWxMb2FkU3RhcnRlZCgpOwpAQCAtMjA0OCw2ICsyMDUwLDE1IEBAIHZvaWQgRnJhbWVM
b2FkZXI6OnNjaGVkdWxlUmVkaXJlY3Rpb24oU2MKIHsKICAgICBBU1NFUlQobV9mcmFtZS0+cGFn
ZSgpKTsKIAorICAgIC8vIElmIGEgcmVkaXJlY3Qgd2FzIHNjaGVkdWxlZCBkdXJpbmcgYSBsb2Fk
LCB0aGVuIHN0b3AgdGhlIGN1cnJlbnQgbG9hZC4KKyAgICAvLyBPdGhlcndpc2Ugd2hlbiB0aGUg
Y3VycmVudCBsb2FkIHRyYW5zaXRpb25zIGZyb20gYSBwcm92aXNpb25hbCB0byBhIAorICAgIC8v
IGNvbW1pdHRlZCBzdGF0ZSwgcGVuZGluZyByZWRpcmVjdHMgbWF5IGJlIGNhbmNlbGxlZC4gCisg
ICAgaWYgKHJlZGlyZWN0aW9uLT53YXNEdXJpbmdMb2FkKSB7CisgICAgICAgIGlmIChtX3Byb3Zp
c2lvbmFsRG9jdW1lbnRMb2FkZXIpCisgICAgICAgICAgICBtX3Byb3Zpc2lvbmFsRG9jdW1lbnRM
b2FkZXItPnN0b3BMb2FkaW5nKCk7CisgICAgICAgIHN0b3BMb2FkaW5nKHRydWUpOyAgIAorICAg
IH0KKwogICAgIHN0b3BSZWRpcmVjdGlvblRpbWVyKCk7CiAgICAgbV9zY2hlZHVsZWRSZWRpcmVj
dGlvbi5zZXQocmVkaXJlY3Rpb24pOwogICAgIGlmICghbV9pc0NvbXBsZXRlICYmIHJlZGlyZWN0
aW9uLT50eXBlICE9IFNjaGVkdWxlZFJlZGlyZWN0aW9uOjpyZWRpcmVjdGlvbikKQEAgLTIwNjUs
MTQgKzIwNzYsMTcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6c3RhcnRSZWRpcmVjdGlvblRpbWVyKAog
ICAgIG1fcmVkaXJlY3Rpb25UaW1lci5zdGFydE9uZVNob3QobV9zY2hlZHVsZWRSZWRpcmVjdGlv
bi0+ZGVsYXkpOwogCiAgICAgc3dpdGNoIChtX3NjaGVkdWxlZFJlZGlyZWN0aW9uLT50eXBlKSB7
Ci0gICAgICAgIGNhc2UgU2NoZWR1bGVkUmVkaXJlY3Rpb246OnJlZGlyZWN0aW9uOgogICAgICAg
ICBjYXNlIFNjaGVkdWxlZFJlZGlyZWN0aW9uOjpsb2NhdGlvbkNoYW5nZToKLSAgICAgICAgY2Fz
ZSBTY2hlZHVsZWRSZWRpcmVjdGlvbjo6bG9jYXRpb25DaGFuZ2VEdXJpbmdMb2FkOgorICAgICAg
ICBjYXNlIFNjaGVkdWxlZFJlZGlyZWN0aW9uOjpyZWRpcmVjdGlvbjoKICAgICAgICAgICAgIGNs
aWVudFJlZGlyZWN0ZWQoS1VSTChtX3NjaGVkdWxlZFJlZGlyZWN0aW9uLT51cmwpLAogICAgICAg
ICAgICAgICAgIG1fc2NoZWR1bGVkUmVkaXJlY3Rpb24tPmRlbGF5LAogICAgICAgICAgICAgICAg
IGN1cnJlbnRUaW1lKCkgKyBtX3JlZGlyZWN0aW9uVGltZXIubmV4dEZpcmVJbnRlcnZhbCgpLAot
ICAgICAgICAgICAgICAgIG1fc2NoZWR1bGVkUmVkaXJlY3Rpb24tPmxvY2tCYWNrRm9yd2FyZExp
c3QsCi0gICAgICAgICAgICAgICAgbV9pc0V4ZWN1dGluZ0phdmFTY3JpcHRGb3JtQWN0aW9uKTsK
KyAgICAgICAgICAgICAgICBtX3NjaGVkdWxlZFJlZGlyZWN0aW9uLT5sb2NrQmFja0ZvcndhcmRM
aXN0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBTY2hlZHVsZWRSZWRpcmVj
dGlvbjo6Zm9ybVN1Ym1pc3Npb246CisgICAgICAgICAgICAvLyBGSVhNRTogSXQgd291bGQgbWFr
ZSBzZW5zZSB0byByZXBvcnQgZm9ybSBzdWJtaXNzaW9ucyBhcyBjbGllbnQgcmVkaXJlY3RzIHRv
by4KKyAgICAgICAgICAgIC8vIEJ1dCB3ZSBkaWRuJ3QgZG8gdGhhdCBpbiB0aGUgcGFzdCB3aGVu
IGZvcm0gc3VibWlzc2lvbiB1c2VkIGEgc2VwYXJhdGUgZGVsYXkKKyAgICAgICAgICAgIC8vIG1l
Y2hhbmlzbSwgc28gZG9pbmcgaXQgd2lsbCBiZSBhIGJlaGF2aW9yIGNoYW5nZS4KICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgY2FzZSBTY2hlZHVsZWRSZWRpcmVjdGlvbjo6aGlzdG9yeU5h
dmlnYXRpb246CiAgICAgICAgICAgICAvLyBEb24ndCByZXBvcnQgaGlzdG9yeSBuYXZpZ2F0aW9u
cy4KQEAgLTIwOTAsMTEgKzIxMDQsMTUgQEAgdm9pZCBGcmFtZUxvYWRlcjo6c3RvcFJlZGlyZWN0
aW9uVGltZXIoKQogCiAgICAgaWYgKG1fc2NoZWR1bGVkUmVkaXJlY3Rpb24pIHsKICAgICAgICAg
c3dpdGNoIChtX3NjaGVkdWxlZFJlZGlyZWN0aW9uLT50eXBlKSB7Ci0gICAgICAgICAgICBjYXNl
IFNjaGVkdWxlZFJlZGlyZWN0aW9uOjpyZWRpcmVjdGlvbjoKICAgICAgICAgICAgIGNhc2UgU2No
ZWR1bGVkUmVkaXJlY3Rpb246OmxvY2F0aW9uQ2hhbmdlOgotICAgICAgICAgICAgY2FzZSBTY2hl
ZHVsZWRSZWRpcmVjdGlvbjo6bG9jYXRpb25DaGFuZ2VEdXJpbmdMb2FkOgorICAgICAgICAgICAg
Y2FzZSBTY2hlZHVsZWRSZWRpcmVjdGlvbjo6cmVkaXJlY3Rpb246CiAgICAgICAgICAgICAgICAg
Y2xpZW50UmVkaXJlY3RDYW5jZWxsZWRPckZpbmlzaGVkKG1fY2FuY2VsbGluZ1dpdGhMb2FkSW5Q
cm9ncmVzcyk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgY2FzZSBTY2hl
ZHVsZWRSZWRpcmVjdGlvbjo6Zm9ybVN1Ym1pc3Npb246CisgICAgICAgICAgICAgICAgLy8gRklY
TUU6IEl0IHdvdWxkIG1ha2Ugc2Vuc2UgdG8gcmVwb3J0IGZvcm0gc3VibWlzc2lvbnMgYXMgY2xp
ZW50IHJlZGlyZWN0cyB0b28uCisgICAgICAgICAgICAgICAgLy8gQnV0IHdlIGRpZG4ndCBkbyB0
aGF0IGluIHRoZSBwYXN0IHdoZW4gZm9ybSBzdWJtaXNzaW9uIHVzZWQgYSBzZXBhcmF0ZSBkZWxh
eQorICAgICAgICAgICAgICAgIC8vIG1lY2hhbmlzbSwgc28gZG9pbmcgaXQgd2lsbCBiZSBhIGJl
aGF2aW9yIGNoYW5nZS4KKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICBjYXNl
IFNjaGVkdWxlZFJlZGlyZWN0aW9uOjpoaXN0b3J5TmF2aWdhdGlvbjoKICAgICAgICAgICAgICAg
ICAvLyBEb24ndCByZXBvcnQgaGlzdG9yeSBuYXZpZ2F0aW9ucy4KICAgICAgICAgICAgICAgICBy
ZXR1cm47CkBAIC0yMTEwLDcgKzIxMjgsNiBAQCB2b2lkIEZyYW1lTG9hZGVyOjpjb21wbGV0ZWQo
KQogICAgICAgICBjaGlsZC0+bG9hZGVyKCktPnBhcmVudENvbXBsZXRlZCgpOwogICAgIGlmIChG
cmFtZSogcGFyZW50ID0gbV9mcmFtZS0+dHJlZSgpLT5wYXJlbnQoKSkKICAgICAgICAgcGFyZW50
LT5sb2FkZXIoKS0+Y2hlY2tDb21wbGV0ZWQoKTsKLSAgICBzdWJtaXRGb3JtQWdhaW4oKTsKIH0K
IAogdm9pZCBGcmFtZUxvYWRlcjo6c3RhcnRlZCgpCkBAIC0yMTQ0LDEzICsyMTYxLDkgQEAgdm9p
ZCBGcmFtZUxvYWRlcjo6c2V0dXBGb3JSZXBsYWNlQnlNSU1FVAogICAgIGFjdGl2ZURvY3VtZW50
TG9hZGVyKCktPnNldHVwRm9yUmVwbGFjZUJ5TUlNRVR5cGUobmV3TUlNRVR5cGUpOwogfQogCi12
b2lkIEZyYW1lTG9hZGVyOjpsb2FkRnJhbWVSZXF1ZXN0V2l0aEZvcm1BbmRWYWx1ZXMoY29uc3Qg
RnJhbWVMb2FkUmVxdWVzdCYgcmVxdWVzdCwgYm9vbCBsb2NrSGlzdG9yeSwgYm9vbCBsb2NrQmFj
a0ZvcndhcmRMaXN0LCBQYXNzUmVmUHRyPEV2ZW50PiBldmVudCwKLSAgICBIVE1MRm9ybUVsZW1l
bnQqIHN1Ym1pdEZvcm0sIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBmb3JtVmFsdWVz
KQotewotICAgIFJlZlB0cjxGb3JtU3RhdGU+IGZvcm1TdGF0ZTsKLSAgICBpZiAoc3VibWl0Rm9y
bSkKLSAgICAgICAgZm9ybVN0YXRlID0gRm9ybVN0YXRlOjpjcmVhdGUoc3VibWl0Rm9ybSwgZm9y
bVZhbHVlcywgbV9mcmFtZSk7Ci0gICAgCit2b2lkIEZyYW1lTG9hZGVyOjpsb2FkRnJhbWVSZXF1
ZXN0KGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmIHJlcXVlc3QsIGJvb2wgbG9ja0hpc3RvcnksIGJv
b2wgbG9ja0JhY2tGb3J3YXJkTGlzdCwKKyAgICBQYXNzUmVmUHRyPEV2ZW50PiBldmVudCwgUGFz
c1JlZlB0cjxGb3JtU3RhdGU+IGZvcm1TdGF0ZSkKK3sgICAgCiAgICAgS1VSTCB1cmwgPSByZXF1
ZXN0LnJlc291cmNlUmVxdWVzdCgpLnVybCgpOwogCiAgICAgU3RyaW5nIHJlZmVycmVyOwpAQCAt
MjE4MCwxNCArMjE5MywxOCBAQCB2b2lkIEZyYW1lTG9hZGVyOjpsb2FkRnJhbWVSZXF1ZXN0V2l0
aEZvCiAgICAgICAgIGxvYWRUeXBlID0gRnJhbWVMb2FkVHlwZVN0YW5kYXJkOwogCiAgICAgaWYg
KHJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuaHR0cE1ldGhvZCgpID09ICJQT1NUIikKLSAgICAg
ICAgbG9hZFBvc3RSZXF1ZXN0KHJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCksIHJlZmVycmVyLCBy
ZXF1ZXN0LmZyYW1lTmFtZSgpLCBsb2NrSGlzdG9yeSwgbG9hZFR5cGUsIGV2ZW50LCBmb3JtU3Rh
dGUucmVsZWFzZSgpKTsKKyAgICAgICAgbG9hZFBvc3RSZXF1ZXN0KHJlcXVlc3QucmVzb3VyY2VS
ZXF1ZXN0KCksIHJlZmVycmVyLCByZXF1ZXN0LmZyYW1lTmFtZSgpLCBsb2NrSGlzdG9yeSwgbG9h
ZFR5cGUsIGV2ZW50LCBmb3JtU3RhdGUuZ2V0KCkpOwogICAgIGVsc2UKLSAgICAgICAgbG9hZFVS
TChyZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnVybCgpLCByZWZlcnJlciwgcmVxdWVzdC5mcmFt
ZU5hbWUoKSwgbG9ja0hpc3RvcnksIGxvYWRUeXBlLCBldmVudCwgZm9ybVN0YXRlLnJlbGVhc2Uo
KSk7CisgICAgICAgIGxvYWRVUkwocmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS51cmwoKSwgcmVm
ZXJyZXIsIHJlcXVlc3QuZnJhbWVOYW1lKCksIGxvY2tIaXN0b3J5LCBsb2FkVHlwZSwgZXZlbnQs
IGZvcm1TdGF0ZS5nZXQoKSk7CiAKLSAgICBGcmFtZSogdGFyZ2V0RnJhbWUgPSBmaW5kRnJhbWVG
b3JOYXZpZ2F0aW9uKHJlcXVlc3QuZnJhbWVOYW1lKCkpOwotICAgIGlmICh0YXJnZXRGcmFtZSAm
JiB0YXJnZXRGcmFtZSAhPSBtX2ZyYW1lKQorICAgIC8vIEZJWE1FOiBJdCdzIHBvc3NpYmxlIHRo
aXMgdGFyZ2V0RnJhbWUgd2lsbCBub3QgYmUgdGhlIHNhbWUgZnJhbWUgdGhhdCB3YXMgdGFyZ2V0
ZWQgYnkgdGhlIGFjdHVhbAorICAgIC8vIGxvYWQgaWYgZnJhbWUgbmFtZXMgaGF2ZSBjaGFuZ2Vk
LgorICAgIEZyYW1lKiBzb3VyY2VGcmFtZSA9IGZvcm1TdGF0ZSA/IGZvcm1TdGF0ZS0+c291cmNl
RnJhbWUoKSA6IG1fZnJhbWU7CisgICAgRnJhbWUqIHRhcmdldEZyYW1lID0gc291cmNlRnJhbWUt
PmxvYWRlcigpLT5maW5kRnJhbWVGb3JOYXZpZ2F0aW9uKHJlcXVlc3QuZnJhbWVOYW1lKCkpOwor
ICAgIGlmICh0YXJnZXRGcmFtZSAmJiB0YXJnZXRGcmFtZSAhPSBzb3VyY2VGcmFtZSkgewogICAg
ICAgICBpZiAoUGFnZSogcGFnZSA9IHRhcmdldEZyYW1lLT5wYWdlKCkpCiAgICAgICAgICAgICBw
YWdlLT5jaHJvbWUoKS0+Zm9jdXMoKTsKKyAgICB9CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXI6Omxv
YWRVUkwoY29uc3QgS1VSTCYgbmV3VVJMLCBjb25zdCBTdHJpbmcmIHJlZmVycmVyLCBjb25zdCBT
dHJpbmcmIGZyYW1lTmFtZSwgYm9vbCBsb2NrSGlzdG9yeSwgRnJhbWVMb2FkVHlwZSBuZXdMb2Fk
VHlwZSwKQEAgLTIyMDgsNyArMjIyNSw4IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmxvYWRVUkwoY29u
c3QgS1VSTCYgbmUKIAogICAgIEFTU0VSVChuZXdMb2FkVHlwZSAhPSBGcmFtZUxvYWRUeXBlU2Ft
ZSk7CiAKLSAgICBGcmFtZSogdGFyZ2V0RnJhbWUgPSBmaW5kRnJhbWVGb3JOYXZpZ2F0aW9uKGZy
YW1lTmFtZSk7CisgICAgLy8gVGhlIHNlYXJjaCBmb3IgYSB0YXJnZXQgZnJhbWUgaXMgZG9uZSBl
YXJsaWVyIGluIHRoZSBjYXNlIG9mIGZvcm0gc3VibWlzc2lvbi4KKyAgICBGcmFtZSogdGFyZ2V0
RnJhbWUgPSBpc0Zvcm1TdWJtaXNzaW9uID8gMCA6IGZpbmRGcmFtZUZvck5hdmlnYXRpb24oZnJh
bWVOYW1lKTsKICAgICBpZiAodGFyZ2V0RnJhbWUgJiYgdGFyZ2V0RnJhbWUgIT0gbV9mcmFtZSkg
ewogICAgICAgICB0YXJnZXRGcmFtZS0+bG9hZGVyKCktPmxvYWRVUkwobmV3VVJMLCByZWZlcnJl
ciwgU3RyaW5nKCksIGxvY2tIaXN0b3J5LCBuZXdMb2FkVHlwZSwgZXZlbnQsIGZvcm1TdGF0ZS5y
ZWxlYXNlKCkpOwogICAgICAgICByZXR1cm47CkBAIC0yOTM2LDcgKzI5NTQsNyBAQCB2b2lkIEZy
YW1lTG9hZGVyOjpjbGllbnRSZWRpcmVjdENhbmNlbGxlCiAgICAgbV9zZW50UmVkaXJlY3ROb3Rp
ZmljYXRpb24gPSBmYWxzZTsKIH0KIAotdm9pZCBGcmFtZUxvYWRlcjo6Y2xpZW50UmVkaXJlY3Rl
ZChjb25zdCBLVVJMJiB1cmwsIGRvdWJsZSBzZWNvbmRzLCBkb3VibGUgZmlyZURhdGUsIGJvb2wg
bG9ja0JhY2tGb3J3YXJkTGlzdCwgYm9vbCBpc0phdmFTY3JpcHRGb3JtQWN0aW9uKQordm9pZCBG
cmFtZUxvYWRlcjo6Y2xpZW50UmVkaXJlY3RlZChjb25zdCBLVVJMJiB1cmwsIGRvdWJsZSBzZWNv
bmRzLCBkb3VibGUgZmlyZURhdGUsIGJvb2wgbG9ja0JhY2tGb3J3YXJkTGlzdCkKIHsKICAgICBt
X2NsaWVudC0+ZGlzcGF0Y2hXaWxsUGVyZm9ybUNsaWVudFJlZGlyZWN0KHVybCwgc2Vjb25kcywg
ZmlyZURhdGUpOwogICAgIApAQCAtMjk0NCwxMCArMjk2MiwxMSBAQCB2b2lkIEZyYW1lTG9hZGVy
OjpjbGllbnRSZWRpcmVjdGVkKGNvbnN0CiAgICAgLy8gdGhlIG5leHQgcHJvdmlzaW9uYWwgbG9h
ZCwgd2UgY2FuIHNlbmQgYSBjb3JyZXNwb25kaW5nIC13ZWJWaWV3OmRpZENhbmNlbENsaWVudFJl
ZGlyZWN0Rm9yRnJhbWU6CiAgICAgbV9zZW50UmVkaXJlY3ROb3RpZmljYXRpb24gPSB0cnVlOwog
ICAgIAotICAgIC8vIElmIGEgInF1aWNrIiByZWRpcmVjdCBjb21lcyBpbiBhbiwgd2Ugc2V0IGEg
c3BlY2lhbCBtb2RlIHNvIHdlIHRyZWF0IHRoZSBuZXh0Ci0gICAgLy8gbG9hZCBhcyBwYXJ0IG9m
IHRoZSBzYW1lIG5hdmlnYXRpb24uIElmIHdlIGRvbid0IGhhdmUgYSBkb2N1bWVudCBsb2FkZXIs
IHdlIGhhdmUKKyAgICAvLyBJZiBhICJxdWljayIgcmVkaXJlY3QgY29tZXMgaW4sIHdlIHNldCBh
IHNwZWNpYWwgbW9kZSBzbyB3ZSB0cmVhdCB0aGUgbmV4dAorICAgIC8vIGxvYWQgYXMgcGFydCBv
ZiB0aGUgb3JpZ2luYWwgbmF2aWdhdGlvbi4gSWYgd2UgZG9uJ3QgaGF2ZSBhIGRvY3VtZW50IGxv
YWRlciwgd2UgaGF2ZQogICAgIC8vIG5vICJvcmlnaW5hbCIgbG9hZCBvbiB3aGljaCB0byBiYXNl
IGEgcmVkaXJlY3QsIHNvIHdlIHRyZWF0IHRoZSByZWRpcmVjdCBhcyBhIG5vcm1hbCBsb2FkLgot
ICAgIG1fcXVpY2tSZWRpcmVjdENvbWluZyA9IGxvY2tCYWNrRm9yd2FyZExpc3QgJiYgbV9kb2N1
bWVudExvYWRlciAmJiAhaXNKYXZhU2NyaXB0Rm9ybUFjdGlvbjsKKyAgICAvLyBMb2FkcyB0cmln
Z2VyZWQgYnkgSmF2YVNjcmlwdCBmb3JtIHN1Ym1pc3Npb25zIG5ldmVyIGNvdW50IGFzIHF1aWNr
IHJlZGlyZWN0cy4KKyAgICBtX3F1aWNrUmVkaXJlY3RDb21pbmcgPSBsb2NrQmFja0ZvcndhcmRM
aXN0ICYmIG1fZG9jdW1lbnRMb2FkZXIgJiYgIW1faXNFeGVjdXRpbmdKYXZhU2NyaXB0Rm9ybUFj
dGlvbjsKIH0KIAogI2lmIEVOQUJMRShXTUwpCkBAIC0zNDU3LDMwICszNDc2LDYgQEAgaW50IEZy
YW1lTG9hZGVyOjpudW1QZW5kaW5nT3JMb2FkaW5nUmVxdQogICAgIHJldHVybiBjb3VudDsKIH0K
IAotdm9pZCBGcmFtZUxvYWRlcjo6c3VibWl0Rm9ybShjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiBy
ZXF1ZXN0LCBQYXNzUmVmUHRyPEV2ZW50PiBldmVudCwgYm9vbCBsb2NrSGlzdG9yeSwgYm9vbCBs
b2NrQmFja0ZvcndhcmRMaXN0KQotewotICAgIC8vIEZJWE1FOiBXZSdkIGxpa2UgdG8gcmVtb3Zl
IHRoaXMgYWx0b2dldGhlciBhbmQgZml4IHRoZSBtdWx0aXBsZSBmb3JtIHN1Ym1pc3Npb24gaXNz
dWUgYW5vdGhlciB3YXkuCi0gICAgLy8gV2UgZG8gbm90IHdhbnQgdG8gc3VibWl0IG1vcmUgdGhh
biBvbmUgZm9ybSBmcm9tIHRoZSBzYW1lIHBhZ2UsCi0gICAgLy8gbm9yIGRvIHdlIHdhbnQgdG8g
c3VibWl0IGEgc2luZ2xlIGZvcm0gbW9yZSB0aGFuIG9uY2UuCi0gICAgLy8gVGhpcyBmbGFnIHBy
ZXZlbnRzIHRoZXNlIGZyb20gaGFwcGVuaW5nOyBub3Qgc3VyZSBob3cgb3RoZXIgYnJvd3NlcnMg
cHJldmVudCB0aGlzLgotICAgIC8vIFRoZSBmbGFnIGlzIHJlc2V0IGluIGVhY2ggdGltZSB3ZSBz
dGFydCBoYW5kbGUgYSBuZXcgbW91c2Ugb3Iga2V5IGRvd24gZXZlbnQsIGFuZAotICAgIC8vIGFs
c28gaW4gc2V0VmlldyBzaW5jZSB0aGlzIHBhcnQgbWF5IGdldCByZXVzZWQgZm9yIGEgcGFnZSBm
cm9tIHRoZSBiYWNrL2ZvcndhcmQgY2FjaGUuCi0gICAgLy8gVGhlIGZvcm0gbXVsdGktc3VibWl0
IGxvZ2ljIGhlcmUgaXMgb25seSBuZWVkZWQgd2hlbiB3ZSBhcmUgc3VibWl0dGluZyBhIGZvcm0g
dGhhdCBhZmZlY3RzIHRoaXMgZnJhbWUuCi0gICAgLy8gRklYTUU6IEZyYW1lIHRhcmdldGluZyBp
cyBvbmx5IG9uZSBvZiB0aGUgd2F5cyB0aGUgc3VibWlzc2lvbiBjb3VsZCBlbmQgdXAgZG9pbmcg
c29tZXRoaW5nIG90aGVyCi0gICAgLy8gdGhhbiByZXBsYWNpbmcgdGhpcyBmcmFtZSdzIGNvbnRl
bnQsIHNvIHRoaXMgY2hlY2sgaXMgZmxhd2VkLiBPbiB0aGUgb3RoZXIgaGFuZCwgdGhlIGNoZWNr
IGlzIGhhcmRseQotICAgIC8vIG5lZWRlZCBhbnkgbW9yZSBub3cgdGhhdCB3ZSByZXNldCBtX3N1
Ym1pdHRlZEZvcm1VUkwgb24gZWFjaCBtb3VzZSBvciBrZXkgZG93biBldmVudC4KLSAgICBGcmFt
ZSogdGFyZ2V0ID0gbV9mcmFtZS0+dHJlZSgpLT5maW5kKHJlcXVlc3QuZnJhbWVOYW1lKCkpOwot
ICAgIGlmIChtX2ZyYW1lLT50cmVlKCktPmlzRGVzY2VuZGFudE9mKHRhcmdldCkpIHsKLSAgICAg
ICAgaWYgKG1fc3VibWl0dGVkRm9ybVVSTCA9PSByZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnVy
bCgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX3N1Ym1pdHRlZEZvcm1VUkwgPSBy
ZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnVybCgpOwotICAgIH0KLQotICAgIGxvYWRGcmFtZVJl
cXVlc3RXaXRoRm9ybUFuZFZhbHVlcyhyZXF1ZXN0LCBsb2NrSGlzdG9yeSwgbG9ja0JhY2tGb3J3
YXJkTGlzdCwgZXZlbnQsIG1fZm9ybUFib3V0VG9CZVN1Ym1pdHRlZC5nZXQoKSwgbV9mb3JtVmFs
dWVzQWJvdXRUb0JlU3VibWl0dGVkKTsKLQotICAgIGNsZWFyUmVjb3JkZWRGb3JtVmFsdWVzKCk7
Ci19Ci0KIFN0cmluZyBGcmFtZUxvYWRlcjo6dXNlckFnZW50KGNvbnN0IEtVUkwmIHVybCkgY29u
c3QKIHsKICAgICByZXR1cm4gbV9jbGllbnQtPnVzZXJBZ2VudCh1cmwpOwpAQCAtMzQ4OCw5ICsz
NDgzLDYgQEAgU3RyaW5nIEZyYW1lTG9hZGVyOjp1c2VyQWdlbnQoY29uc3QgS1VSTAogCiB2b2lk
IEZyYW1lTG9hZGVyOjp0b2tlbml6ZXJQcm9jZXNzZWREYXRhKCkKIHsKLS8vICAgIEFTU0VSVCht
X2ZyYW1lLT5wYWdlKCkpOwotLy8gICAgQVNTRVJUKG1fZnJhbWUtPmRvY3VtZW50KCkpOwotCiAg
ICAgY2hlY2tDb21wbGV0ZWQoKTsKIH0KIApAQCAtMzY0Myw3ICszNjM1LDggQEAgdm9pZCBGcmFt
ZUxvYWRlcjo6bG9hZFBvc3RSZXF1ZXN0KGNvbnN0IAogICAgIE5hdmlnYXRpb25BY3Rpb24gYWN0
aW9uKHVybCwgbG9hZFR5cGUsIHRydWUsIGV2ZW50KTsKIAogICAgIGlmICghZnJhbWVOYW1lLmlz
RW1wdHkoKSkgewotICAgICAgICBpZiAoRnJhbWUqIHRhcmdldEZyYW1lID0gZmluZEZyYW1lRm9y
TmF2aWdhdGlvbihmcmFtZU5hbWUpKQorICAgICAgICAvLyBUaGUgc2VhcmNoIGZvciBhIHRhcmdl
dCBmcmFtZSBpcyBkb25lIGVhcmxpZXIgaW4gdGhlIGNhc2Ugb2YgZm9ybSBzdWJtaXNzaW9uLgor
ICAgICAgICBpZiAoRnJhbWUqIHRhcmdldEZyYW1lID0gZm9ybVN0YXRlID8gMCA6IGZpbmRGcmFt
ZUZvck5hdmlnYXRpb24oZnJhbWVOYW1lKSkKICAgICAgICAgICAgIHRhcmdldEZyYW1lLT5sb2Fk
ZXIoKS0+bG9hZFdpdGhOYXZpZ2F0aW9uQWN0aW9uKHdvcmtpbmdSZXNvdXJjZVJlcXVlc3QsIGFj
dGlvbiwgbG9ja0hpc3RvcnksIGxvYWRUeXBlLCBmb3JtU3RhdGUucmVsZWFzZSgpKTsKICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgY2hlY2tOZXdXaW5kb3dQb2xpY3koYWN0aW9uLCB3b3JraW5n
UmVzb3VyY2VSZXF1ZXN0LCBmb3JtU3RhdGUucmVsZWFzZSgpLCBmcmFtZU5hbWUpOwpAQCAtMzY1
MSwxMiArMzY0NCw2IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmxvYWRQb3N0UmVxdWVzdChjb25zdCAK
ICAgICAgICAgbG9hZFdpdGhOYXZpZ2F0aW9uQWN0aW9uKHdvcmtpbmdSZXNvdXJjZVJlcXVlc3Qs
IGFjdGlvbiwgbG9ja0hpc3RvcnksIGxvYWRUeXBlLCBmb3JtU3RhdGUucmVsZWFzZSgpKTsgICAg
CiB9CiAKLXZvaWQgRnJhbWVMb2FkZXI6OmxvYWRFbXB0eURvY3VtZW50U3luY2hyb25vdXNseSgp
Ci17Ci0gICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QoS1VSTCgiIikpOwotICAgIGxvYWQocmVx
dWVzdCwgZmFsc2UpOwotfQotCiB1bnNpZ25lZCBsb25nIEZyYW1lTG9hZGVyOjpsb2FkUmVzb3Vy
Y2VTeW5jaHJvbm91c2x5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgUmVzb3VyY2VF
cnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8Y2hhcj4mIGRh
dGEpCiB7CiAgICAgLy8gU2luY2UgdGhpcyBpcyBhIHN1YnJlc291cmNlLCB3ZSBjYW4gbG9hZCBh
bnkgVVJMICh3ZSBpZ25vcmUgdGhlIHJldHVybiB2YWx1ZSkuCkBAIC00MjU5LDYgKzQyNDYsMTEg
QEAgUGFzc1JlZlB0cjxIaXN0b3J5SXRlbT4gRnJhbWVMb2FkZXI6OmNyZQogCiB2b2lkIEZyYW1l
TG9hZGVyOjphZGRCYWNrRm9yd2FyZEl0ZW1DbGlwcGVkQXRUYXJnZXQoYm9vbCBkb0NsaXApCiB7
CisgICAgLy8gSW4gdGhlIGNhc2Ugb2Ygc2F2aW5nIHN0YXRlIGFib3V0IGEgcGFnZSB3aXRoIGZy
YW1lcywgd2Ugc3RvcmUgYSB0cmVlIG9mIGl0ZW1zIHRoYXQgbWlycm9ycyB0aGUgZnJhbWUgdHJl
ZS4gIAorICAgIC8vIFRoZSBpdGVtIHRoYXQgd2FzIHRoZSB0YXJnZXQgb2YgdGhlIHVzZXIncyBu
YXZpZ2F0aW9uIGlzIGRlc2lnbmF0ZWQgYXMgdGhlICJ0YXJnZXRJdGVtIi4gIAorICAgIC8vIFdo
ZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBkb0NsaXA9dHJ1ZSB3ZSdyZSBhYmxlIHRv
IGNyZWF0ZSB0aGUgd2hvbGUgdHJlZSBleGNlcHQgZm9yIHRoZSB0YXJnZXQncyBjaGlsZHJlbiwg
CisgICAgLy8gd2hpY2ggd2lsbCBiZSBsb2FkZWQgaW4gdGhlIGZ1dHVyZS4gVGhhdCBwYXJ0IG9m
IHRoZSB0cmVlIHdpbGwgYmUgZmlsbGVkIG91dCBhcyB0aGUgY2hpbGQgbG9hZHMgYXJlIGNvbW1p
dHRlZC4KKwogICAgIFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCk7CiAgICAgaWYgKCFwYWdl
KQogICAgICAgICByZXR1cm47CkBAIC00MzA4LDkgKzQzMDAsOSBAQCBQYXNzUmVmUHRyPEhpc3Rv
cnlJdGVtPiBGcmFtZUxvYWRlcjo6Y3JlCiBGcmFtZSogRnJhbWVMb2FkZXI6OmZpbmRGcmFtZUZv
ck5hdmlnYXRpb24oY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKQogewogICAgIEZyYW1lKiBmcmFt
ZSA9IG1fZnJhbWUtPnRyZWUoKS0+ZmluZChuYW1lKTsKLSAgICBpZiAoc2hvdWxkQWxsb3dOYXZp
Z2F0aW9uKGZyYW1lKSkKLSAgICAgICAgcmV0dXJuIGZyYW1lOyAgCi0gICAgcmV0dXJuIDA7Cisg
ICAgaWYgKCFzaG91bGRBbGxvd05hdmlnYXRpb24oZnJhbWUpKQorICAgICAgICByZXR1cm4gMDsg
IAorICAgIHJldHVybiBmcmFtZTsKIH0KIAogdm9pZCBGcmFtZUxvYWRlcjo6c2F2ZVNjcm9sbFBv
c2l0aW9uQW5kVmlld1N0YXRlVG9JdGVtKEhpc3RvcnlJdGVtKiBpdGVtKQpAQCAtNDY0MCwxMCAr
NDYzMiwxMCBAQCB2b2lkIEZyYW1lTG9hZGVyOjpyZWN1cnNpdmVHb1RvSXRlbShIaXN0CiAgICAg
ICAgIAogICAgICAgICBpbnQgc2l6ZSA9IGNoaWxkSXRlbXMuc2l6ZSgpOwogICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICAgICAgU3RyaW5nIGNoaWxkTmFt
ZSA9IGNoaWxkSXRlbXNbaV0tPnRhcmdldCgpOwotICAgICAgICAgICAgSGlzdG9yeUl0ZW0qIGZy
b21DaGlsZEl0ZW0gPSBmcm9tSXRlbS0+Y2hpbGRJdGVtV2l0aE5hbWUoY2hpbGROYW1lKTsKKyAg
ICAgICAgICAgIFN0cmluZyBjaGlsZEZyYW1lTmFtZSA9IGNoaWxkSXRlbXNbaV0tPnRhcmdldCgp
OworICAgICAgICAgICAgSGlzdG9yeUl0ZW0qIGZyb21DaGlsZEl0ZW0gPSBmcm9tSXRlbS0+Y2hp
bGRJdGVtV2l0aFRhcmdldChjaGlsZEZyYW1lTmFtZSk7CiAgICAgICAgICAgICBBU1NFUlQoZnJv
bUNoaWxkSXRlbSB8fCBmcm9tSXRlbS0+aXNUYXJnZXRJdGVtKCkpOwotICAgICAgICAgICAgRnJh
bWUqIGNoaWxkRnJhbWUgPSBtX2ZyYW1lLT50cmVlKCktPmNoaWxkKGNoaWxkTmFtZSk7CisgICAg
ICAgICAgICBGcmFtZSogY2hpbGRGcmFtZSA9IG1fZnJhbWUtPnRyZWUoKS0+Y2hpbGQoY2hpbGRG
cmFtZU5hbWUpOwogICAgICAgICAgICAgQVNTRVJUKGNoaWxkRnJhbWUpOwogICAgICAgICAgICAg
Y2hpbGRGcmFtZS0+bG9hZGVyKCktPnJlY3Vyc2l2ZUdvVG9JdGVtKGNoaWxkSXRlbXNbaV0uZ2V0
KCksIGZyb21DaGlsZEl0ZW0sIHR5cGUpOwogICAgICAgICB9CkBAIC00NjYxLDkgKzQ2NTMsMTAg
QEAgYm9vbCBGcmFtZUxvYWRlcjo6Y2hpbGRGcmFtZXNNYXRjaEl0ZW0oSAogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgCiAgICAgdW5zaWduZWQgc2l6ZSA9IGNoaWxkSXRlbXMuc2l6ZSgpOwot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHNpemU7ICsraSkgewogICAgICAgICBpZiAoIW1fZnJhbWUtPnRyZWUoKS0+
Y2hpbGQoY2hpbGRJdGVtc1tpXS0+dGFyZ2V0KCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KICAgICAKICAgICAvLyBGb3VuZCBtYXRjaGVzIGZvciBhbGwgaXRlbSB0YXJnZXRz
CiAgICAgcmV0dXJuIHRydWU7CkBAIC00NjgzLDE3ICs0Njc2LDcgQEAgdm9pZCBGcmFtZUxvYWRl
cjo6dXBkYXRlSGlzdG9yeUZvclN0YW5kYQogICAgIGJvb2wgbmVlZFByaXZhY3kgPSAhc2V0dGlu
Z3MgfHwgc2V0dGluZ3MtPnByaXZhdGVCcm93c2luZ0VuYWJsZWQoKTsKICAgICBjb25zdCBLVVJM
JiBoaXN0b3J5VVJMID0gZG9jdW1lbnRMb2FkZXIoKS0+dXJsRm9ySGlzdG9yeSgpOwogCi0gICAg
Ly8gSWYgdGhlIG5hdmlnYXRpb24gb2NjdXJlZCBkdXJpbmcgbG9hZCBhbmQgdGhpcyBpcyBhIHN1
YmZyYW1lLCB1cGRhdGUgdGhlIGN1cnJlbnQKLSAgICAvLyBiYWNrL2ZvcndhcmQgaXRlbSByYXRo
ZXIgdGhhbiBhZGRpbmcgYSBuZXcgb25lIGFuZCBkb24ndCBhZGQgdGhlIG5ldyBVUkwgdG8gZ2xv
YmFsCi0gICAgLy8gaGlzdG9yeSBhdCBhbGwuIEJ1dCBkbyBhZGQgaXQgdG8gdmlzaXRlZCBsaW5r
cy4gPHJkYXI6Ly9wcm9ibGVtLzUzMzM0OTY+Ci0gICAgYm9vbCBmcmFtZU5hdmlnYXRpb25EdXJp
bmdMb2FkID0gZmFsc2U7Ci0gICAgaWYgKG1fbmF2aWdhdGlvbkR1cmluZ0xvYWQpIHsKLSAgICAg
ICAgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lciA9IG1fZnJhbWUtPm93bmVyRWxlbWVudCgp
OwotICAgICAgICBmcmFtZU5hdmlnYXRpb25EdXJpbmdMb2FkID0gb3duZXIgJiYgIW93bmVyLT5j
cmVhdGVkQnlQYXJzZXIoKTsKLSAgICAgICAgbV9uYXZpZ2F0aW9uRHVyaW5nTG9hZCA9IGZhbHNl
OwotICAgIH0KLQotICAgIGlmICghZnJhbWVOYXZpZ2F0aW9uRHVyaW5nTG9hZCAmJiAhZG9jdW1l
bnRMb2FkZXIoKS0+aXNDbGllbnRSZWRpcmVjdCgpKSB7CisgICAgaWYgKCFkb2N1bWVudExvYWRl
cigpLT5pc0NsaWVudFJlZGlyZWN0KCkpIHsKICAgICAgICAgaWYgKCFoaXN0b3J5VVJMLmlzRW1w
dHkoKSkgewogICAgICAgICAgICAgYWRkQmFja0ZvcndhcmRJdGVtQ2xpcHBlZEF0VGFyZ2V0KHRy
dWUpOwogICAgICAgICAgICAgaWYgKCFuZWVkUHJpdmFjeSkgewpAQCAtNDgwNSw3ICs0Nzg4LDcg
QEAgdm9pZCBGcmFtZUxvYWRlcjo6dXBkYXRlSGlzdG9yeUZvclJlZGlyZQogICAgIH0gZWxzZSB7
CiAgICAgICAgIEZyYW1lKiBwYXJlbnRGcmFtZSA9IG1fZnJhbWUtPnRyZWUoKS0+cGFyZW50KCk7
CiAgICAgICAgIGlmIChwYXJlbnRGcmFtZSAmJiBwYXJlbnRGcmFtZS0+bG9hZGVyKCktPm1fY3Vy
cmVudEhpc3RvcnlJdGVtKQotICAgICAgICAgICAgcGFyZW50RnJhbWUtPmxvYWRlcigpLT5tX2N1
cnJlbnRIaXN0b3J5SXRlbS0+YWRkQ2hpbGRJdGVtKGNyZWF0ZUhpc3RvcnlJdGVtKHRydWUpKTsK
KyAgICAgICAgICAgIHBhcmVudEZyYW1lLT5sb2FkZXIoKS0+bV9jdXJyZW50SGlzdG9yeUl0ZW0t
PnNldENoaWxkSXRlbShjcmVhdGVIaXN0b3J5SXRlbSh0cnVlKSk7CiAgICAgfQogCiAgICAgaWYg
KCFoaXN0b3J5VVJMLmlzRW1wdHkoKSAmJiAhbmVlZFByaXZhY3kpIHsKSW5kZXg6IFdlYkNvcmUv
bG9hZGVyL0ZyYW1lTG9hZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRnJhbWVM
b2FkZXIuaAkocmV2aXNpb24gNDIxNDYpCisrKyBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC02OCw3ICs2OCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICBjbGFzcyBUZXh0UmVzb3VyY2VEZWNvZGVyOwogICAgIGNsYXNzIFdpZGdldDsKIAotICAgIHN0
cnVjdCBGb3JtU3VibWlzc2lvbjsKICAgICBzdHJ1Y3QgRnJhbWVMb2FkUmVxdWVzdDsKICAgICBz
dHJ1Y3QgU2NoZWR1bGVkUmVkaXJlY3Rpb247CiAgICAgc3RydWN0IFdpbmRvd0ZlYXR1cmVzOwpA
QCAtMTE5LDI2ICsxMTgsMjggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIEZyYW1l
KiBmcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWU7IH0KIAotICAgICAgICAvLyBGSVhNRTog
VGhpcyBpcyBub3QgY29vbCwgcGVvcGxlLiBXZSBzaG91bGQgYWltIHRvIGNvbnNvbGlkYXRlIHRo
ZXNlIHZhcmlldHkgb2YgbG9hZGluZyByZWxhdGVkIG1ldGhvZHMgaW50byBhIHNtYWxsZXIgc2V0
LAotICAgICAgICAvLyBhbmQgdHJ5IHRvIHJldXNlIG1vcmUgb2YgdGhlIHNhbWUgbG9naWMgYnkg
ZXh0cmFjdGluZyBjb21tb24gY29kZSBwYXRocy4KKyAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMg
bm90IGNvb2wsIHBlb3BsZS4gVGhlcmUgYXJlIHRvbyBtYW55IGRpZmZlcmVudCBmdW5jdGlvbnMg
dGhhdCBhbGwgc3RhcnQgbG9hZHMuCisgICAgICAgIC8vIFdlIHNob3VsZCBhaW0gdG8gY29uc29s
aWRhdGUgdGhlc2UgaW50byBhIHNtYWxsZXIgc2V0IG9mIGZ1bmN0aW9ucywgYW5kIHRyeSB0byBy
ZXVzZSBtb3JlIG9mCisgICAgICAgIC8vIHRoZSBsb2dpYyBieSBleHRyYWN0aW5nIGNvbW1vbiBj
b2RlIHBhdGhzLgorCiAgICAgICAgIHZvaWQgcHJlcGFyZUZvckxvYWRTdGFydCgpOwogICAgICAg
ICB2b2lkIHNldHVwRm9yUmVwbGFjZSgpOwogICAgICAgICB2b2lkIHNldHVwRm9yUmVwbGFjZUJ5
TUlNRVR5cGUoY29uc3QgU3RyaW5nJiBuZXdNSU1FVHlwZSk7CiAKICAgICAgICAgdm9pZCBsb2Fk
VVJMSW50b0NoaWxkRnJhbWUoY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgcmVmZXJlciwgRnJh
bWUqKTsKIAotICAgICAgICB2b2lkIGxvYWRGcmFtZVJlcXVlc3RXaXRoRm9ybUFuZFZhbHVlcyhj
b25zdCBGcmFtZUxvYWRSZXF1ZXN0JiwgYm9vbCBsb2NrSGlzdG9yeSwgYm9vbCBsb2NrQmFja0Zv
cndhcmRMaXN0LCAgICAgICAgICAgLy8gQ2FsbGVkIGJ5IHN1Ym1pdEZvcm0sIGNhbGxzIGxvYWRQ
b3N0UmVxdWVzdCgpCi0gICAgICAgICAgICBQYXNzUmVmUHRyPEV2ZW50PiwgSFRNTEZvcm1FbGVt
ZW50KiwgY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIGZvcm1WYWx1ZXMpOworICAgICAg
ICB2b2lkIGxvYWRGcmFtZVJlcXVlc3QoY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYsIGJvb2wgbG9j
a0hpc3RvcnksIGJvb2wgbG9ja0JhY2tGb3J3YXJkTGlzdCwgIC8vIENhbGxlZCBieSBzdWJtaXRG
b3JtLCBjYWxscyBsb2FkUG9zdFJlcXVlc3QgYW5kIGxvYWRVUkwuCisgICAgICAgICAgICBQYXNz
UmVmUHRyPEV2ZW50PiwgUGFzc1JlZlB0cjxGb3JtU3RhdGU+KTsKIAotICAgICAgICB2b2lkIGxv
YWQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgYm9vbCBsb2NrSGlzdG9yeSk7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhbGxlZCBi
eSBXZWJGcmFtZSwgY2FsbHMgKFJlc291cmNlUmVxdWVzdCwgU3Vic3RpdHV0ZURhdGEpCi0gICAg
ICAgIHZvaWQgbG9hZChjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBTdWJzdGl0dXRlRGF0
YSYsIGJvb2wgbG9ja0hpc3RvcnkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gQ2FsbGVkIGJvdGggYnkgV2ViRnJhbWUgYW5kIGludGVybmFsbHksIGNhbGxzIChEb2N1bWVu
dExvYWRlciopCi0gICAgICAgIHZvaWQgbG9hZChjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25z
dCBTdHJpbmcmIGZyYW1lTmFtZSwgYm9vbCBsb2NrSGlzdG9yeSk7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gQ2FsbGVkIGJ5IFdlYlBsdWdpbkNvbnRyb2xsZXIKKyAgICAgICAg
dm9pZCBsb2FkKGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGJvb2wgbG9ja0hpc3RvcnkpOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDYWxsZWQgYnkgV2ViRnJhbWUs
IGNhbGxzIGxvYWQoUmVzb3VyY2VSZXF1ZXN0LCBTdWJzdGl0dXRlRGF0YSkuCisgICAgICAgIHZv
aWQgbG9hZChjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBTdWJzdGl0dXRlRGF0YSYsIGJv
b2wgbG9ja0hpc3RvcnkpOyAgICAgICAgICAgICAgICAgLy8gQ2FsbGVkIGJvdGggYnkgV2ViRnJh
bWUgYW5kIGludGVybmFsbHksIGNhbGxzIGxvYWQoRG9jdW1lbnRMb2FkZXIqKS4KKyAgICAgICAg
dm9pZCBsb2FkKGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFN0cmluZyYgZnJhbWVOYW1l
LCBib29sIGxvY2tIaXN0b3J5KTsgICAgICAgICAgICAgICAvLyBDYWxsZWQgYnkgV2ViUGx1Z2lu
Q29udHJvbGxlci4KICAgICAgICAgCi0gICAgICAgIHZvaWQgbG9hZEFyY2hpdmUoUGFzc1JlZlB0
cjxBcmNoaXZlPiBhcmNoaXZlKTsKKyAgICAgICAgdm9pZCBsb2FkQXJjaGl2ZShQYXNzUmVmUHRy
PEFyY2hpdmU+KTsKIAotICAgICAgICAvLyBSZXR1cm5zIHRydWUgZm9yIGFueSBub24tbG9jYWwg
VVJMLiBJZiBEb2N1bWVudCBwYXJhbWV0ZXIgaXMgc3VwcGxpZWQsIGl0cyBsb2NhbCBsb2FkIHBv
bGljeSBkaWN0YXRlcywKKyAgICAgICAgLy8gUmV0dXJucyB0cnVlIGZvciBhbnkgbm9uLWxvY2Fs
IFVSTC4gSWYgZG9jdW1lbnQgcGFyYW1ldGVyIGlzIHN1cHBsaWVkLCBpdHMgbG9jYWwgbG9hZCBw
b2xpY3kgZGljdGF0ZXMsCiAgICAgICAgIC8vIG90aGVyd2lzZSBpZiByZWZlcnJlciBpcyBub24t
ZW1wdHkgYW5kIHJlcHJlc2VudHMgYSBsb2NhbCBmaWxlLCB0aGVuIHRoZSBsb2NhbCBsb2FkIGlz
IGFsbG93ZWQuCi0gICAgICAgIHN0YXRpYyBib29sIGNhbkxvYWQoY29uc3QgS1VSTCYsIGNvbnN0
IFN0cmluZyYgcmVmZXJyZXIsIGNvbnN0IERvY3VtZW50KiB0aGVEb2N1bWVudCA9IDApOworICAg
ICAgICBzdGF0aWMgYm9vbCBjYW5Mb2FkKGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIHJlZmVy
cmVyLCBjb25zdCBEb2N1bWVudCogPSAwKTsKICAgICAgICAgc3RhdGljIHZvaWQgcmVwb3J0TG9j
YWxMb2FkRmFpbGVkKEZyYW1lKiwgY29uc3QgU3RyaW5nJiB1cmwpOwogCiAgICAgICAgIHN0YXRp
YyBib29sIHNob3VsZEhpZGVSZWZlcnJlcihjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiByZWZl
cnJlcik7CkBAIC0xNjIsMTEgKzE2Myw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
U3RyaW5nIHJlZmVycmVyKCkgY29uc3Q7CiAgICAgICAgIFN0cmluZyBvdXRnb2luZ1JlZmVycmVy
KCkgY29uc3Q7CiAgICAgICAgIFN0cmluZyBvdXRnb2luZ09yaWdpbigpIGNvbnN0OwotICAgICAg
ICB2b2lkIGxvYWRFbXB0eURvY3VtZW50U3luY2hyb25vdXNseSgpOwogCiAgICAgICAgIERvY3Vt
ZW50TG9hZGVyKiBhY3RpdmVEb2N1bWVudExvYWRlcigpIGNvbnN0OwogICAgICAgICBEb2N1bWVu
dExvYWRlciogZG9jdW1lbnRMb2FkZXIoKSBjb25zdCB7IHJldHVybiBtX2RvY3VtZW50TG9hZGVy
LmdldCgpOyB9Ci0gICAgICAgIERvY3VtZW50TG9hZGVyKiBwb2xpY3lEb2N1bWVudExvYWRlcigp
IGNvbnN0IHsgcmV0dXJuIG1fcG9saWN5RG9jdW1lbnRMb2FkZXIuZ2V0KCk7IH0KICAgICAgICAg
RG9jdW1lbnRMb2FkZXIqIHByb3Zpc2lvbmFsRG9jdW1lbnRMb2FkZXIoKSBjb25zdCB7IHJldHVy
biBtX3Byb3Zpc2lvbmFsRG9jdW1lbnRMb2FkZXIuZ2V0KCk7IH0KICAgICAgICAgRnJhbWVTdGF0
ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KICAgICAgICAgc3RhdGljIGRvdWJs
ZSB0aW1lT2ZMYXN0Q29tcGxldGVkTG9hZCgpOwpAQCAtMjA1LDggKzIwNCw2IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCByZXByZXNlbnRhdGlvbkV4aXN0c0ZvclVSTFNjaGVt
ZShjb25zdCBTdHJpbmcmIFVSTFNjaGVtZSk7CiAgICAgICAgIFN0cmluZyBnZW5lcmF0ZWRNSU1F
VHlwZUZvclVSTFNjaGVtZShjb25zdCBTdHJpbmcmIFVSTFNjaGVtZSk7CiAKLSAgICAgICAgdm9p
ZCBub3RpZnlJY29uQ2hhbmdlZCgpOwotCiAgICAgICAgIHZvaWQgY2hlY2tOYXZpZ2F0aW9uUG9s
aWN5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbkZ1bmN0
aW9uIGZ1bmN0aW9uLCB2b2lkKiBhcmd1bWVudCk7CiAgICAgICAgIHZvaWQgY2hlY2tDb250ZW50
UG9saWN5KGNvbnN0IFN0cmluZyYgTUlNRVR5cGUsIENvbnRlbnRQb2xpY3lEZWNpc2lvbkZ1bmN0
aW9uLCB2b2lkKiBhcmd1bWVudCk7CiAgICAgICAgIHZvaWQgY2FuY2VsQ29udGVudFBvbGljeUNo
ZWNrKCk7CkBAIC0yNTUsMTAgKzI1MiwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAg
ICAgdm9pZCBjaGFuZ2VMb2NhdGlvbihjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiByZWZlcnJl
ciwgYm9vbCBsb2NrSGlzdG9yeSA9IHRydWUsIGJvb2wgbG9ja0JhY2tGb3J3YXJkTGlzdCA9IHRy
dWUsIGJvb2wgdXNlckdlc3R1cmUgPSBmYWxzZSwgYm9vbCByZWZyZXNoID0gZmFsc2UpOwogICAg
ICAgICB2b2lkIHVybFNlbGVjdGVkKGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFN0cmlu
ZyYgdGFyZ2V0LCBQYXNzUmVmUHRyPEV2ZW50PiwgYm9vbCBsb2NrSGlzdG9yeSwgYm9vbCBsb2Nr
QmFja0ZvcndhcmRMaXN0LCBib29sIHVzZXJHZXN0dXJlKTsKLSAgICAgIAogICAgICAgICBib29s
IHJlcXVlc3RGcmFtZShIVE1MRnJhbWVPd25lckVsZW1lbnQqLCBjb25zdCBTdHJpbmcmIHVybCwg
Y29uc3QgQXRvbWljU3RyaW5nJiBmcmFtZU5hbWUpOwogCi0gICAgICAgIHZvaWQgc3VibWl0Rm9y
bShjb25zdCBjaGFyKiBhY3Rpb24sIGNvbnN0IFN0cmluZyYgdXJsLCBQYXNzUmVmUHRyPEZvcm1E
YXRhPiwgY29uc3QgU3RyaW5nJiB0YXJnZXQsIGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUsIGNv
bnN0IFN0cmluZyYgYm91bmRhcnksIFBhc3NSZWZQdHI8RXZlbnQ+LCBib29sIGxvY2tIaXN0b3J5
LCBib29sIGxvY2tCYWNrRm9yd2FyZExpc3QpOworICAgICAgICB2b2lkIHN1Ym1pdEZvcm0oY29u
c3QgY2hhciogYWN0aW9uLCBjb25zdCBTdHJpbmcmIHVybCwKKyAgICAgICAgICAgIFBhc3NSZWZQ
dHI8Rm9ybURhdGE+LCBjb25zdCBTdHJpbmcmIHRhcmdldCwgY29uc3QgU3RyaW5nJiBjb250ZW50
VHlwZSwgY29uc3QgU3RyaW5nJiBib3VuZGFyeSwKKyAgICAgICAgICAgIGJvb2wgbG9ja0hpc3Rv
cnksIGJvb2wgbG9ja0JhY2tGb3J3YXJkTGlzdCwgUGFzc1JlZlB0cjxFdmVudD4sIFBhc3NSZWZQ
dHI8Rm9ybVN0YXRlPik7CiAKICAgICAgICAgdm9pZCBzdG9wKCk7CiAgICAgICAgIHZvaWQgc3Rv
cExvYWRpbmcoYm9vbCBzZW5kVW5sb2FkKTsKQEAgLTMyNSw4ICszMjMsNiBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKICAgICAgICAgY29uc3QgS1VSTCYgdXJsKCkgY29uc3QgeyByZXR1cm4gbV9V
Ukw7IH0KIAotICAgICAgICB2b2lkIHVwZGF0ZUJhc2VVUkxGb3JFbXB0eURvY3VtZW50KCk7Ci0K
ICAgICAgICAgdm9pZCBzZXRSZXNwb25zZU1JTUVUeXBlKGNvbnN0IFN0cmluZyYpOwogICAgICAg
ICBjb25zdCBTdHJpbmcmIHJlc3BvbnNlTUlNRVR5cGUoKSBjb25zdDsKIApAQCAtMzM2LDEwICsz
MzIsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgZmluaXNoZWRQYXJzaW5n
KCk7CiAgICAgICAgIHZvaWQgY2hlY2tDb21wbGV0ZWQoKTsKIAotICAgICAgICB2b2lkIGNsZWFy
UmVjb3JkZWRGb3JtVmFsdWVzKCk7Ci0gICAgICAgIHZvaWQgc2V0Rm9ybUFib3V0VG9CZVN1Ym1p
dHRlZChQYXNzUmVmUHRyPEhUTUxGb3JtRWxlbWVudD4gZWxlbWVudCk7Ci0gICAgICAgIHZvaWQg
cmVjb3JkRm9ybVZhbHVlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7
Ci0KICAgICAgICAgYm9vbCBpc0NvbXBsZXRlKCkgY29uc3Q7CiAKICAgICAgICAgYm9vbCByZXF1
ZXN0T2JqZWN0KFJlbmRlclBhcnQqIGZyYW1lLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgQXRv
bWljU3RyaW5nJiBmcmFtZU5hbWUsCkBAIC01MDAsMjEgKzQ5MiwyMSBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIHZvaWQgZGlzcGF0Y2hEaWRGaW5pc2hMb2FkaW5nKERvY3VtZW50TG9h
ZGVyKiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKTsKIAogICAgICAgICBzdGF0aWMgYm9vbCBp
c0xvY2F0aW9uQ2hhbmdlKGNvbnN0IFNjaGVkdWxlZFJlZGlyZWN0aW9uJik7CisgICAgICAgIHZv
aWQgc2NoZWR1bGVGb3JtU3VibWlzc2lvbihjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiwgYm9vbCBs
b2NrSGlzdG9yeSwgYm9vbCBsb2NrQmFja0ZvcndhcmRMaXN0LCBQYXNzUmVmUHRyPEV2ZW50Piwg
UGFzc1JlZlB0cjxGb3JtU3RhdGU+KTsKIAotICAgICAgICB2b2lkIGxvYWRXaXRoRG9jdW1lbnRM
b2FkZXIoRG9jdW1lbnRMb2FkZXIqLCBGcmFtZUxvYWRUeXBlLCBQYXNzUmVmUHRyPEZvcm1TdGF0
ZT4pOyAgICAgICAgIC8vIENhbGxzIGNvbnRpbnVlTG9hZEFmdGVyTmF2aWdhdGlvblBvbGljeQot
ICAgICAgICB2b2lkIGxvYWQoRG9jdW1lbnRMb2FkZXIqKTsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhbGxzIGxvYWRX
aXRoRG9jdW1lbnRMb2FkZXIgICAKKyAgICAgICAgdm9pZCBsb2FkV2l0aERvY3VtZW50TG9hZGVy
KERvY3VtZW50TG9hZGVyKiwgRnJhbWVMb2FkVHlwZSwgUGFzc1JlZlB0cjxGb3JtU3RhdGU+KTsg
Ly8gQ2FsbHMgY29udGludWVMb2FkQWZ0ZXJOYXZpZ2F0aW9uUG9saWN5CisgICAgICAgIHZvaWQg
bG9hZChEb2N1bWVudExvYWRlciopOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIENhbGxzIGxvYWRXaXRoRG9jdW1lbnRMb2FkZXIgICAK
IAotICAgICAgICB2b2lkIGxvYWRXaXRoTmF2aWdhdGlvbkFjdGlvbihjb25zdCBSZXNvdXJjZVJl
cXVlc3QmLCBjb25zdCBOYXZpZ2F0aW9uQWN0aW9uJiwgICAgICAgICAgICAgIC8vIENhbGxzIGxv
YWRXaXRoRG9jdW1lbnRMb2FkZXIoKQorICAgICAgICB2b2lkIGxvYWRXaXRoTmF2aWdhdGlvbkFj
dGlvbihjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBOYXZpZ2F0aW9uQWN0aW9uJiwgICAg
ICAvLyBDYWxscyBsb2FkV2l0aERvY3VtZW50TG9hZGVyCiAgICAgICAgICAgICBib29sIGxvY2tI
aXN0b3J5LCBGcmFtZUxvYWRUeXBlLCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4pOwogCi0gICAgICAg
IHZvaWQgbG9hZFBvc3RSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFN0cmlu
ZyYgcmVmZXJyZXIsICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FsbGVkIGJ5IGxvYWRGcmFt
ZVJlcXVlc3RXaXRoRm9ybUFuZFZhbHVlcygpLCBjYWxscyBsb2FkV2l0aE5hdmlnYXRpb25BY3Rp
b24KKyAgICAgICAgdm9pZCBsb2FkUG9zdFJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jiwg
Y29uc3QgU3RyaW5nJiByZWZlcnJlciwgICAgICAgICAgICAgICAgLy8gQ2FsbGVkIGJ5IGxvYWRG
cmFtZVJlcXVlc3QsIGNhbGxzIGxvYWRXaXRoTmF2aWdhdGlvbkFjdGlvbgogICAgICAgICAgICAg
Y29uc3QgU3RyaW5nJiBmcmFtZU5hbWUsIGJvb2wgbG9ja0hpc3RvcnksIEZyYW1lTG9hZFR5cGUs
IFBhc3NSZWZQdHI8RXZlbnQ+LCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4pOwotCi0gICAgICAgIHZv
aWQgbG9hZFVSTChjb25zdCBLVVJMJiBuZXdVUkwsIGNvbnN0IFN0cmluZyYgcmVmZXJyZXIsIGNv
bnN0IFN0cmluZyYgZnJhbWVOYW1lLCAgICAgICAgICAgLy8gQ2FsbGVkIGJ5IGxvYWRGcmFtZVJl
cXVlc3RXaXRoRm9ybUFuZFZhbHVlcygpLCBjYWxscyBsb2FkV2l0aE5hdmlnYXRpb25BY3Rpb24g
b3IgZWxzZSBkaXNwYXRjaGVzIHRvIG5hdmlnYXRpb24gcG9saWN5IGRlbGVnYXRlICAgIAorICAg
ICAgICB2b2lkIGxvYWRVUkwoY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgcmVmZXJyZXIsIGNv
bnN0IFN0cmluZyYgZnJhbWVOYW1lLCAgICAgICAgICAvLyBDYWxsZWQgYnkgbG9hZEZyYW1lUmVx
dWVzdCwgY2FsbHMgbG9hZFdpdGhOYXZpZ2F0aW9uQWN0aW9uIG9yIGRpc3BhdGNoZXMgdG8gbmF2
aWdhdGlvbiBwb2xpY3kgZGVsZWdhdGUKICAgICAgICAgICAgIGJvb2wgbG9ja0hpc3RvcnksIEZy
YW1lTG9hZFR5cGUsIFBhc3NSZWZQdHI8RXZlbnQ+LCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4pOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAog
CiAgICAgICAgIHZvaWQgY2xpZW50UmVkaXJlY3RDYW5jZWxsZWRPckZpbmlzaGVkKGJvb2wgY2Fu
Y2VsV2l0aExvYWRJblByb2dyZXNzKTsKLSAgICAgICAgdm9pZCBjbGllbnRSZWRpcmVjdGVkKGNv
bnN0IEtVUkwmLCBkb3VibGUgZGVsYXksIGRvdWJsZSBmaXJlRGF0ZSwgYm9vbCBsb2NrQmFja0Zv
cndhcmRMaXN0LCBib29sIGlzSmF2YVNjcmlwdEZvcm1BY3Rpb24pOworICAgICAgICB2b2lkIGNs
aWVudFJlZGlyZWN0ZWQoY29uc3QgS1VSTCYsIGRvdWJsZSBkZWxheSwgZG91YmxlIGZpcmVEYXRl
LCBib29sIGxvY2tCYWNrRm9yd2FyZExpc3QpOwogICAgICAgICBib29sIHNob3VsZFJlbG9hZChj
b25zdCBLVVJMJiBjdXJyZW50VVJMLCBjb25zdCBLVVJMJiBkZXN0aW5hdGlvblVSTCk7CiAKICAg
ICAgICAgdm9pZCBzZW5kUmVtYWluaW5nRGVsZWdhdGVNZXNzYWdlcyh1bnNpZ25lZCBsb25nIGlk
ZW50aWZpZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmLCBpbnQgbGVuZ3RoLCBjb25zdCBSZXNv
dXJjZUVycm9yJik7CkBAIC01MjcsOSArNTE5LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAg
ICAgICAgIEZyYW1lKiBsb2FkU3ViZnJhbWUoSFRNTEZyYW1lT3duZXJFbGVtZW50KiwgY29uc3Qg
S1VSTCYsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiByZWZlcnJlcik7CiAKLSAg
ICAgICAgdm9pZCBzdWJtaXRGb3JtQWdhaW4oKTsKLSAgICAgICAgdm9pZCBzdWJtaXRGb3JtKGNv
bnN0IEZyYW1lTG9hZFJlcXVlc3QmLCBQYXNzUmVmUHRyPEV2ZW50PiwgYm9vbCBsb2NrSGlzdG9y
eSwgYm9vbCBsb2NrQmFja0ZvcndhcmRMaXN0KTsKLQogICAgICAgICBLVVJMIGhpc3RvcnlVUkwo
aW50IGRpc3RhbmNlKTsKIAogICAgICAgICAvLyBSZXR1cm5zIHRydWUgaWYgYXJndW1lbnQgaXMg
YSBKYXZhU2NyaXB0IFVSTC4KQEAgLTU4MSwxMiArNTcwLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICBib29sIG1fcXVpY2tSZWRpcmVjdENvbWluZzsKICAgICAgICAgYm9vbCBtX3Nl
bnRSZWRpcmVjdE5vdGlmaWNhdGlvbjsKICAgICAgICAgYm9vbCBtX2luU3RvcEFsbExvYWRlcnM7
Ci0gICAgICAgIGJvb2wgbV9uYXZpZ2F0aW9uRHVyaW5nTG9hZDsKIAogICAgICAgICBTdHJpbmcg
bV9vdXRnb2luZ1JlZmVycmVyOwogCi0gICAgICAgIE93blB0cjxGb3JtU3VibWlzc2lvbj4gbV9k
ZWZlcnJlZEZvcm1TdWJtaXNzaW9uOwotCiAgICAgICAgIGJvb2wgbV9pc0V4ZWN1dGluZ0phdmFT
Y3JpcHRGb3JtQWN0aW9uOwogICAgICAgICBib29sIG1faXNSdW5uaW5nU2NyaXB0OwogCkBAIC02
MTYsOCArNjAyLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIGJvb2wgbV9jb250
YWluc1BsdWdJbnM7CiAKLSAgICAgICAgUmVmUHRyPEhUTUxGb3JtRWxlbWVudD4gbV9mb3JtQWJv
dXRUb0JlU3VibWl0dGVkOwotICAgICAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBtX2Zvcm1W
YWx1ZXNBYm91dFRvQmVTdWJtaXR0ZWQ7CiAgICAgICAgIEtVUkwgbV9zdWJtaXR0ZWRGb3JtVVJM
OwogICAgIAogICAgICAgICBUaW1lcjxGcmFtZUxvYWRlcj4gbV9yZWRpcmVjdGlvblRpbWVyOwpJ
bmRleDogV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDQyMTQ2
KQorKysgV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM3LDExICszNywxMyBAQAogI2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAiRXZl
bnRIYW5kbGVyLmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgorI2luY2x1ZGUgIkZvcm1TdGF0
ZS5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNs
dWRlICJGcmFtZUxvYWRSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlcXVlc3QuaCIKICNp
bmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCisjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCiAj
aW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIK
ICNpbmNsdWRlICJOb2RlLmgiCkBAIC0yMTIsMTAgKzIxNCwxMCBAQCB2b2lkIENvbnRleHRNZW51
Q29udHJvbGxlcjo6Y29udGV4dE1lbnVJCiAgICAgICAgICAgICBtX2NsaWVudC0+bG9va1VwSW5E
aWN0aW9uYXJ5KGZyYW1lKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENvbnRl
eHRNZW51SXRlbVRhZ09wZW5MaW5rOgotICAgICAgICAgICAgaWYgKEZyYW1lKiB0YXJnZXRGcmFt
ZSA9IHJlc3VsdC50YXJnZXRGcmFtZSgpKQotICAgICAgICAgICAgICAgIHRhcmdldEZyYW1lLT5s
b2FkZXIoKS0+bG9hZEZyYW1lUmVxdWVzdFdpdGhGb3JtQW5kVmFsdWVzKEZyYW1lTG9hZFJlcXVl
c3QoUmVzb3VyY2VSZXF1ZXN0KHJlc3VsdC5hYnNvbHV0ZUxpbmtVUkwoKSwgCi0gICAgICAgICAg
ICAgICAgICAgIGZyYW1lLT5sb2FkZXIoKS0+b3V0Z29pbmdSZWZlcnJlcigpKSksIGZhbHNlLCBm
YWxzZSwgMCwgMCwgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4oKSk7Ci0gICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICBpZiAoRnJhbWUqIHRhcmdldEZyYW1lID0gcmVzdWx0LnRhcmdldEZyYW1l
KCkpIHsKKyAgICAgICAgICAgICAgICB0YXJnZXRGcmFtZS0+bG9hZGVyKCktPmxvYWRGcmFtZVJl
cXVlc3QoRnJhbWVMb2FkUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QocmVzdWx0LmFic29sdXRlTGlu
a1VSTCgpLCAKKyAgICAgICAgICAgICAgICAgICAgZnJhbWUtPmxvYWRlcigpLT5vdXRnb2luZ1Jl
ZmVycmVyKCkpKSwgZmFsc2UsIGZhbHNlLCAwLCAwKTsKKyAgICAgICAgICAgIH0gZWxzZQogICAg
ICAgICAgICAgICAgIG9wZW5OZXdXaW5kb3cocmVzdWx0LmFic29sdXRlTGlua1VSTCgpLCBmcmFt
ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdC
b2xkOgpJbmRleDogV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BhZ2UvRnJhbWUuY3BwCShyZXZpc2lvbiA0MjE0NikKKysrIFdlYkNvcmUvcGFnZS9GcmFtZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Myw3ICsxNzMsNiBAQCBGcmFtZTo6RnJhbWUoUGFnZSog
cGFnZSwgSFRNTEZyYW1lT3duZXJFCiBGcmFtZTo6fkZyYW1lKCkKIHsKICAgICBzZXRWaWV3KDAp
OwotICAgIGxvYWRlcigpLT5jbGVhclJlY29yZGVkRm9ybVZhbHVlcygpOwogICAgIGxvYWRlcigp
LT5jYW5jZWxBbmRDbGVhcigpOwogICAgIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbm90IGJl
IGRvaW5nIGFsbCB0aGlzIHdvcmsgaW5zaWRlIHRoZSBkZXN0cnVjdG9yCkluZGV4OiBXZWJLaXQv
bWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNp
b24gNDIxNDYpCisrKyBXZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDIzIEBACisyMDA5LTAzLTMxICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCdWcgMjIzNzg6
IENyYXNoIHN1Ym1pdHRpbmcgYSBmb3JtIHdoZW4gcGFyc2luZyBhbiBYSFRNTCBkb2N1bWVudAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIzNzgKKyAg
ICAgICAgcmRhcjovL3Byb2JsZW0vNjM4ODM3NworCisgICAgICAgICogSGlzdG9yeS9XZWJIaXN0
b3J5SXRlbS5tbToKKyAgICAgICAgKC1bV2ViSGlzdG9yeUl0ZW0gdGFyZ2V0SXRlbV0pOiBDYWxs
IHRhcmdldEl0ZW0gZGlyZWN0bHkgaW5zdGVhZCBvZiBjYWxsbGluZworICAgICAgICBpc1Rhcmdl
dEl0ZW0sIGhhc0NoaWxkcmVuLCBhbmQgcmVjdXJzZVRvRmluZFRhcmdldEl0ZW0uCisKKyAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5tbToKKyAgICAgICAgKFdl
YkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaFdpbGxTdWJtaXRGb3JtKTogVXBkYXRlZCBmb3Ig
dGhlIG5ldworICAgICAgICB0ZXh0RmllbGRWYWx1ZXMgZnVuY3Rpb24gaW4gRm9ybVN0YXRlLgor
CisgICAgICAgICogV2ViVmlldy9XZWJQREZWaWV3Lm1tOgorICAgICAgICAoLVtXZWJQREZWaWV3
IFBERlZpZXdXaWxsQ2xpY2tPbkxpbms6d2l0aFVSTDpdKTogVXBkYXRlZCBmb3IgbmFtZSBhbmQK
KyAgICAgICAgYXJndW1lbnQgY2hhbmdlIG9mIGxvYWRGcmFtZVJlcXVlc3QuCisKIDIwMDktMDMt
MzEgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBBZGFtIFJvYmVuLgpJbmRleDogV2ViS2l0L21hYy9IaXN0b3J5L1dlYkhpc3RvcnlJ
dGVtLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvSGlzdG9yeS9XZWJIaXN0b3J5SXRlbS5t
bQkocmV2aXNpb24gNDIxNDYpCisrKyBXZWJLaXQvbWFjL0hpc3RvcnkvV2ViSGlzdG9yeUl0ZW0u
bW0JKHdvcmtpbmcgY29weSkKQEAgLTIxOCw3ICsyMTgsOCBAQCB2b2lkIFdLTm90aWZ5SGlzdG9y
eUl0ZW1DaGFuZ2VkKCkKICAgICBIaXN0b3J5SXRlbSogY29yZUl0ZW0gPSBjb3JlKF9wcml2YXRl
KTsKICAgICBOU011dGFibGVTdHJpbmcgKnJlc3VsdCA9IFtOU011dGFibGVTdHJpbmcgc3RyaW5n
V2l0aEZvcm1hdDpAIiVAICVAIiwgW3N1cGVyIGRlc2NyaXB0aW9uXSwgKE5TU3RyaW5nKiljb3Jl
SXRlbS0+dXJsU3RyaW5nKCldOwogICAgIGlmIChjb3JlSXRlbS0+dGFyZ2V0KCkpIHsKLSAgICAg
ICAgW3Jlc3VsdCBhcHBlbmRGb3JtYXQ6QCIgaW4gXCIlQFwiIiwgKE5TU3RyaW5nKiljb3JlSXRl
bS0+dGFyZ2V0KCldOworICAgICAgICBOU1N0cmluZyAqdGFyZ2V0ID0gY29yZUl0ZW0tPnRhcmdl
dCgpOworICAgICAgICBbcmVzdWx0IGFwcGVuZEZvcm1hdDpAIiBpbiBcIiVAXCIiLCB0YXJnZXRd
OwogICAgIH0KICAgICBpZiAoY29yZUl0ZW0tPmlzVGFyZ2V0SXRlbSgpKSB7CiAgICAgICAgIFty
ZXN1bHQgYXBwZW5kU3RyaW5nOkAiICp0YXJnZXQqIl07CkBAIC01NzcsMTAgKzU3OCw3IEBAIHN0
YXRpYyBXZWJXaW5kb3dXYXRjaGVyICpfd2luZG93V2F0Y2hlciAKIC0gKFdlYkhpc3RvcnlJdGVt
ICopdGFyZ2V0SXRlbQogeyAgICAKICAgICBBU1NFUlRfTUFJTl9USFJFQUQoKTsKLSAgICBIaXN0
b3J5SXRlbSogY29yZUl0ZW0gPSBjb3JlKF9wcml2YXRlKTsKLSAgICBpZiAoY29yZUl0ZW0tPmlz
VGFyZ2V0SXRlbSgpIHx8ICFjb3JlSXRlbS0+aGFzQ2hpbGRyZW4oKSkKLSAgICAgICAgcmV0dXJu
IHNlbGY7Ci0gICAgcmV0dXJuIGtpdChjb3JlSXRlbS0+cmVjdXJzZVRvRmluZFRhcmdldEl0ZW0o
KSk7CisgICAgcmV0dXJuIGtpdChjb3JlKF9wcml2YXRlKS0+dGFyZ2V0SXRlbSgpKTsKIH0KIAog
KyAodm9pZClfcmVsZWFzZUFsbFBlbmRpbmdQYWdlQ2FjaGVzCkluZGV4OiBXZWJLaXQvbWFjL1dl
YkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW0JKHJldmlzaW9uIDQy
MTQ2KQorKysgV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5t
bQkod29ya2luZyBjb3B5KQpAQCAtNjk5LDEwICs2OTksMTEgQEAgdm9pZCBXZWJGcmFtZUxvYWRl
ckNsaWVudDo6ZGlzcGF0Y2hXaWxsUwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgTlNN
dXRhYmxlRGljdGlvbmFyeSAqZGljdGlvbmFyeSA9IFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxv
Y10gaW5pdFdpdGhDYXBhY2l0eTpmb3JtU3RhdGUtPnZhbHVlcygpLnNpemUoKV07Ci0gICAgSGFz
aE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGZvcm1TdGF0ZS0+dmFs
dWVzKCkuZW5kKCk7Ci0gICAgZm9yIChIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBmb3JtU3RhdGUtPnZhbHVlcygpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkK
LSAgICAgICAgW2RpY3Rpb25hcnkgc2V0T2JqZWN0Oml0LT5zZWNvbmQgZm9yS2V5Oml0LT5maXJz
dF07CisgICAgY29uc3QgU3RyaW5nUGFpclZlY3RvciYgdGV4dEZpZWxkVmFsdWVzID0gZm9ybVN0
YXRlLT50ZXh0RmllbGRWYWx1ZXMoKTsKKyAgICBzaXplX3Qgc2l6ZSA9IHRleHRGaWVsZFZhbHVl
cy5zaXplKCk7CisgICAgTlNNdXRhYmxlRGljdGlvbmFyeSAqZGljdGlvbmFyeSA9IFtbTlNNdXRh
YmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpzaXplXTsKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgW2RpY3Rpb25hcnkgc2V0T2JqZWN0
OnRleHRGaWVsZFZhbHVlc1tpXS5zZWNvbmQgZm9yS2V5OnRleHRGaWVsZFZhbHVlc1tpXS5maXJz
dF07CiAKICAgICBDYWxsRm9ybURlbGVnYXRlKGdldFdlYlZpZXcobV93ZWJGcmFtZS5nZXQoKSks
IEBzZWxlY3RvcihmcmFtZTpzb3VyY2VGcmFtZTp3aWxsU3VibWl0Rm9ybTp3aXRoVmFsdWVzOnN1
Ym1pc3Npb25MaXN0ZW5lcjopLCBtX3dlYkZyYW1lLmdldCgpLCBraXQoZm9ybVN0YXRlLT5zb3Vy
Y2VGcmFtZSgpKSwga2l0KGZvcm1TdGF0ZS0+Zm9ybSgpKSwgZGljdGlvbmFyeSwgc2V0VXBQb2xp
Y3lMaXN0ZW5lcihmdW5jdGlvbikuZ2V0KCkpOwogCkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcv
V2ViUERGVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViUERGVmll
dy5tbQkocmV2aXNpb24gNDIxNDYpCisrKyBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViUERGVmlldy5t
bQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDcs
OSArNDcsMTEgQEAKICNpbXBvcnQgIldlYlZpZXdJbnRlcm5hbC5oIgogI2ltcG9ydCA8UERGS2l0
L1BERktpdC5oPgogI2ltcG9ydCA8V2ViQ29yZS9FdmVudE5hbWVzLmg+CisjaW1wb3J0IDxXZWJD
b3JlL0Zvcm1TdGF0ZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZS5oPgotI2ltcG9ydCA8V2Vi
Q29yZS9GcmFtZUxvYWRlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZUxvYWRSZXF1ZXN0Lmg+
CisjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lTG9hZGVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL0hUTUxG
b3JtRWxlbWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9LVVJMLmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L0tleWJvYXJkRXZlbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvTW91c2VFdmVudC5oPgpAQCAtOTQx
LDE2ICs5NDMsMTcgQEAgc3RhdGljIEJPT0wgX1BERlNlbGVjdGlvbnNBcmVFcXVhbChQREZTZQog
ICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGlmIChidXR0
b24gIT0gbm9CdXR0b24pCisgICAgaWYgKGJ1dHRvbiAhPSBub0J1dHRvbikgewogICAgICAgICBl
dmVudCA9IE1vdXNlRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuY2xpY2tFdmVudCwgdHJ1ZSwg
dHJ1ZSwgMCwgW25zRXZlbnQgY2xpY2tDb3VudF0sIDAsIDAsIDAsIDAsCiAgICAgICAgICAgICBb
bnNFdmVudCBtb2RpZmllckZsYWdzXSAmIE5TQ29udHJvbEtleU1hc2ssCiAgICAgICAgICAgICBb
bnNFdmVudCBtb2RpZmllckZsYWdzXSAmIE5TQWx0ZXJuYXRlS2V5TWFzaywKICAgICAgICAgICAg
IFtuc0V2ZW50IG1vZGlmaWVyRmxhZ3NdICYgTlNTaGlmdEtleU1hc2ssCiAgICAgICAgICAgICBb
bnNFdmVudCBtb2RpZmllckZsYWdzXSAmIE5TQ29tbWFuZEtleU1hc2ssCiAgICAgICAgICAgICBi
dXR0b24sIDAsIDAsIHRydWUpOworICAgIH0KIAogICAgIC8vIENhbGwgdG8gdGhlIGZyYW1lIGxv
YWRlciBiZWNhdXNlIHRoaXMgaXMgd2hlcmUgb3VyIHNlY3VyaXR5IGNoZWNrcyBhcmUgbWFkZS4K
LSAgICBjb3JlKFtkYXRhU291cmNlIHdlYkZyYW1lXSktPmxvYWRlcigpLT5sb2FkRnJhbWVSZXF1
ZXN0V2l0aEZvcm1BbmRWYWx1ZXMoUmVzb3VyY2VSZXF1ZXN0KFVSTCksIGZhbHNlLCBmYWxzZSwg
ZXZlbnQuZ2V0KCksIDAsIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+KCkpOworICAgIGNvcmUoW2Rh
dGFTb3VyY2Ugd2ViRnJhbWVdKS0+bG9hZGVyKCktPmxvYWRGcmFtZVJlcXVlc3QoUmVzb3VyY2VS
ZXF1ZXN0KFVSTCksIGZhbHNlLCBmYWxzZSwgZXZlbnQuZ2V0KCksIDApOwogfQogCiAtICh2b2lk
KVBERlZpZXdPcGVuUERGSW5OYXRpdmVBcHBsaWNhdGlvbjooUERGVmlldyAqKXNlbmRlcgpJbmRl
eDogV2ViS2l0L3dpbi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9DaGFuZ2VM
b2cJKHJldmlzaW9uIDQyMTQ3KQorKysgV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxNSBAQAorMjAwOS0wMy0zMSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBs
ZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QnVnIDIyMzc4OiBDcmFzaCBzdWJtaXR0aW5nIGEgZm9ybSB3aGVuIHBhcnNpbmcgYW4gWEhUTUwg
ZG9jdW1lbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIyMzc4CisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzYzODgzNzcKKworICAgICAgICAqIFdlYkZy
YW1lLmNwcDoKKyAgICAgICAgKFdlYkZyYW1lOjpkaXNwYXRjaFdpbGxTdWJtaXRGb3JtKTogVXBk
YXRlZCBmb3IgdGhlIG5ldworICAgICAgICB0ZXh0RmllbGRWYWx1ZXMgZnVuY3Rpb24gaW4gRm9y
bVN0YXRlLgorCiAyMDA5LTAzLTMwICBBZGFtIFJvYmVuICA8YXJvYmVuQGFwcGxlLmNvbT4KIAog
ICAgICAgICBCdWlsZCBmaXhlcyBhZnRlciByZWNlbnQgRnJhbWVMb2FkZXIgY2hhbmdlcwpJbmRl
eDogV2ViS2l0L3dpbi9XZWJGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9XZWJG
cmFtZS5jcHAJKHJldmlzaW9uIDQyMTQ2KQorKysgV2ViS2l0L3dpbi9XZWJGcmFtZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEzMTUsNyArMTMxNSwxMyBAQCB2b2lkIFdlYkZyYW1lOjpkaXNwYXRj
aFdpbGxTdWJtaXRGb3JtKEZyCiAKICAgICBDT01QdHI8SURPTUVsZW1lbnQ+IGZvcm1FbGVtZW50
KEFkb3B0Q09NLCBET01FbGVtZW50OjpjcmVhdGVJbnN0YW5jZShmb3JtU3RhdGUtPmZvcm0oKSkp
OwogCi0gICAgQ09NUHRyPElQcm9wZXJ0eUJhZz4gZm9ybVZhbHVlc1Byb3BlcnR5QmFnKEFkb3B0
Q09NLCBDT01Qcm9wZXJ0eUJhZzxTdHJpbmc+OjpjcmVhdGVJbnN0YW5jZShmb3JtU3RhdGUtPnZh
bHVlcygpKSk7CisgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gZm9ybVZhbHVlc01hcDsKKyAg
ICBjb25zdCBTdHJpbmdQYWlyVmVjdG9yJiB0ZXh0RmllbGRWYWx1ZXMgPSBmb3JtU3RhdGUtPnRl
eHRGaWVsZFZhbHVlcygpOworICAgIHNpemVfdCBzaXplID0gdGV4dEZpZWxkVmFsdWVzLnNpemUo
KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgZm9ybVZh
bHVlc01hcC5hZGQodGV4dEZpZWxkVmFsdWVzW2ldLmZpcnN0LCB0ZXh0RmllbGRWYWx1ZXNbaV0u
c2Vjb25kKTsKKworICAgIENPTVB0cjxJUHJvcGVydHlCYWc+IGZvcm1WYWx1ZXNQcm9wZXJ0eUJh
ZyhBZG9wdENPTSwgQ09NUHJvcGVydHlCYWc8U3RyaW5nPjo6Y3JlYXRlSW5zdGFuY2UoZm9ybVZh
bHVlc01hcCkpOwogCiAgICAgQ09NUHRyPFdlYkZyYW1lPiBzb3VyY2VGcmFtZShraXQoZm9ybVN0
YXRlLT5zb3VyY2VGcmFtZSgpKSk7CiAgICAgaWYgKFNVQ0NFRURFRChmb3JtRGVsZWdhdGUtPndp
bGxTdWJtaXRGb3JtKHRoaXMsIHNvdXJjZUZyYW1lLmdldCgpLCBmb3JtRWxlbWVudC5nZXQoKSwg
Zm9ybVZhbHVlc1Byb3BlcnR5QmFnLmdldCgpLCBzZXRVcFBvbGljeUxpc3RlbmVyKGZ1bmN0aW9u
KS5nZXQoKSkpKQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNDIxNDYpCisrKyBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyOCBAQAorMjAwOS0wMy0zMSAgRGFyaW4g
QWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQnVnIDIyMzc4OiBDcmFzaCBzdWJtaXR0aW5nIGEgZm9ybSB3aGVu
IHBhcnNpbmcgYW4gWEhUTUwgZG9jdW1lbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIyMzc4CisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzYzODgzNzcK
KworICAgICAgICAqIGZhc3QvbG9hZGVyL29udW5sb2FkLWZvcm0tc3VibWl0LWNyYXNoLTItZXhw
ZWN0ZWQudHh0OiBVcGRhdGVkIGZvciBjaGFuZ2UgdG8gdGhlIHRlc3QuCisgICAgICAgICogZmFz
dC9sb2FkZXIvb251bmxvYWQtZm9ybS1zdWJtaXQtY3Jhc2gtMi5odG1sOiBVcGRhdGVkIHRlc3Qg
dG8gZXhwZWN0IHRoZSBmb3JtIHN1Ym1pc3Npb24KKyAgICAgICAgZHVyaW5nIHRoZSBvbnVubG9h
ZCBoYW5kbGVyIHRvIGJlIGluZWZmZWN0aXZlLgorICAgICAgICAqIGZhc3QvbG9hZGVyL29udW5s
b2FkLWZvcm0tc3VibWl0LWNyYXNoLWV4cGVjdGVkLnR4dDogVXBkYXRlZCBmb3IgY2hhbmdlIHRv
IHRoZSB0ZXN0LgorICAgICAgICAqIGZhc3QvbG9hZGVyL29udW5sb2FkLWZvcm0tc3VibWl0LWNy
YXNoLmh0bWw6IFVwZGF0ZWQgdGVzdCB0byBleHBlY3QgdGhlIGZvcm0gc3VibWlzc2lvbgorICAg
ICAgICBkdXJpbmcgdGhlIG9udW5sb2FkIGhhbmRsZXIgdG8gYmUgaW5lZmZlY3RpdmUuCisKKyAg
ICAgICAgKiBmYXN0L2xvYWRlci9yZXNvdXJjZXMvb251bmxvYWQtZm9ybS1zdWJtaXQtY3Jhc2gy
Lmh0bWw6IFJlbW92ZWQuCisgICAgICAgICogZmFzdC9sb2FkZXIvcmVzb3VyY2VzL29udW5sb2Fk
LWZvcm0tc3VibWl0LWZhaWx1cmUuaHRtbDogQ29waWVkIGZyb20KKyAgICAgICAgTGF5b3V0VGVz
dHMvZmFzdC9sb2FkZXIvcmVzb3VyY2VzL29udW5sb2FkLWZvcm0tc3VibWl0LWNyYXNoMi5odG1s
LgorICAgICAgICAqIGZhc3QvbG9hZGVyL3Jlc291cmNlcy9vbnVubG9hZC1mb3JtLXN1Ym1pdC1z
dWNjZXNzLmh0bWw6IENvcGllZCBmcm9tCisgICAgICAgIExheW91dFRlc3RzL2Zhc3QvbG9hZGVy
L3Jlc291cmNlcy9vbnVubG9hZC1mb3JtLXN1Ym1pdC1jcmFzaDIuaHRtbC4KKworICAgICAgICAq
IHBsYXRmb3JtL21hYy9odHRwL3Rlc3RzL25hdmlnYXRpb24vc3VjY2VzczIwMC1mcmFtZXMtbG9h
ZHNhbWUtZXhwZWN0ZWQudHh0OiBVcGRhdGVkCisgICAgICAgIHRvIGV4cGVjdCBwcm9wZXIgcmVz
dWx0cywgd2l0aG91dCB0aGUgZHVwbGljYXRlIGhpc3RvcnkgaXRlbXMgZm9yIHRoZSBzYW1lIGZy
YW1lIG5hbWUKKyAgICAgICAgdGhhdCB3ZXJlIHByZXNlbnQgYmVmb3JlLgorCiAyMDA5LTAzLTMx
ICBFcmljIENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIvb251bmxv
YWQtZm9ybS1zdWJtaXQtY3Jhc2gtMi1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZmFzdC9sb2FkZXIvb251bmxvYWQtZm9ybS1zdWJtaXQtY3Jhc2gtMi1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDQyMTQ2KQorKysgTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIvb251bmxvYWQt
Zm9ybS1zdWJtaXQtY3Jhc2gtMi1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwyIEBACiBtYWluIGZyYW1lIC0gaGFzIDEgb251bmxvYWQgaGFuZGxlcihzKQotbWFpbiBmcmFt
ZSAtIGhhcyAxIG9udW5sb2FkIGhhbmRsZXIocykKLVNVQ0NFU1MKK1NVQ0NFU1MuIElmIHlvdSBz
ZWUgdGhpcyBwYWdlIHRoZSB0ZXN0IGhhcyBzdWNjZXNzZnVsbHkgbG9hZGVkIGEgbmV3IHBhZ2Ug
d2l0aG91dCBjcmFzaGluZyBvciBzdWJtaXR0aW5nIGEgZm9ybSBmcm9tIGFuIG9udW5sb2FkIGhh
bmRsZXIuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2xvYWRlci9vbnVubG9hZC1mb3JtLXN1Ym1p
dC1jcmFzaC0yLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIvb251
bmxvYWQtZm9ybS1zdWJtaXQtY3Jhc2gtMi5odG1sCShyZXZpc2lvbiA0MjE0NikKKysrIExheW91
dFRlc3RzL2Zhc3QvbG9hZGVyL29udW5sb2FkLWZvcm0tc3VibWl0LWNyYXNoLTIuaHRtbAkod29y
a2luZyBjb3B5KQpAQCAtOSw5ICs5LDkgQEAKICAgICAgICAgICAgICAgICAgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOwogICAgICAgICAgICAgICAgICAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGxvY2F0aW9uLmhyZWYgPSAiYWJvdXQ6YmxhbmsiOworICAgICAgICAgICAgICAgIGxv
Y2F0aW9uLmhyZWYgPSAicmVzb3VyY2VzL29udW5sb2FkLWZvcm0tc3VibWl0LXN1Y2Nlc3MuaHRt
bCI7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJyZXN1bHQiKS5pbm5lclRleHQgPSAiU1VDQ0VTUyI7CisgICAgICAgICAgICAg
ICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlc3VsdCIpLmlubmVyVGV4dCA9ICJGQUlMIjsK
ICAgICAgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQogICAgICAg
ICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CiAgICAgICAg
ICAgICB9CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2xvYWRlci9vbnVubG9hZC1mb3JtLXN1Ym1p
dC1jcmFzaC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9sb2Fk
ZXIvb251bmxvYWQtZm9ybS1zdWJtaXQtY3Jhc2gtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA0MjE0
NikKKysrIExheW91dFRlc3RzL2Zhc3QvbG9hZGVyL29udW5sb2FkLWZvcm0tc3VibWl0LWNyYXNo
LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDIgQEAKIG1haW4gZnJhbWUg
LSBoYXMgMSBvbnVubG9hZCBoYW5kbGVyKHMpCi1CdWc6IHJkYXI6Ly9wcm9ibGVtLzQyNjgyNzgg
U3VibWl0dGluZyBhIGZvcm0gaW4gb25VbmxvYWQgZXZlbnQgaGFuZGxlciBjYXVzZXMgY3Jhc2gg
aW4gLVtXZWJEYXRhU291cmNlKFdlYlByaXZhdGUpIF9jb21taXRJZlJlYWR5Ol0KLQotSWYgdGhp
cyB0ZXN0IHBhc3NlcywgeW91J2xsIHNlZSBhIFBBU1MgbWVzc2FnZSBiZWxvdy4KLQotUEFTUzog
U2FmYXJpIGRpZG4ndCBjcmFzaC4KK1NVQ0NFU1MuIElmIHlvdSBzZWUgdGhpcyBwYWdlIHRoZSB0
ZXN0IGhhcyBzdWNjZXNzZnVsbHkgbG9hZGVkIGEgbmV3IHBhZ2Ugd2l0aG91dCBjcmFzaGluZyBv
ciBzdWJtaXR0aW5nIGEgZm9ybSBmcm9tIGFuIG9udW5sb2FkIGhhbmRsZXIuCkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L2xvYWRlci9vbnVubG9hZC1mb3JtLXN1Ym1pdC1jcmFzaC5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvbG9hZGVyL29udW5sb2FkLWZvcm0tc3VibWl0LWNy
YXNoLmh0bWwJKHJldmlzaW9uIDQyMTQ2KQorKysgTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIvb251
bmxvYWQtZm9ybS1zdWJtaXQtY3Jhc2guaHRtbAkod29ya2luZyBjb3B5KQpAQCAtNiw3ICs2LDcg
QEAKICAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7
CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCJsb2NhdGlv
bi5ocmVmPWxvY2F0aW9uLmhyZWYiLCAwKTsgLy8gY2hlYXAgd2F5IHRvIGZvcmNlIGFuIHVubG9h
ZAorICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoImxvY2F0aW9uLmhyZWY9J3Jlc291cmNl
cy9vbnVubG9hZC1mb3JtLXN1Ym1pdC1zdWNjZXNzLmh0bWwnIiwgMCk7CiAgICAgICAgIDwvc2Ny
aXB0PgogICAgICAgICA8cD5UaGlzIGlzIGp1c3QgYSBkdW1teSBwYWdlIHRoYXQgbG9hZHMgdGhl
IG5leHQgcGFnZSB0byBzZWUgaWYgd2UgY3Jhc2guPC9wPgogICAgICAgICA8Zm9ybSBuYW1lPSJt
eUZvcm0iIGFjdGlvbj0icmVzb3VyY2VzL29udW5sb2FkLWZvcm0tc3VibWl0LWNyYXNoMi5odG1s
Ij48L2Zvcm0+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2xvYWRlci9yZXNvdXJjZXMvb251bmxv
YWQtZm9ybS1zdWJtaXQtY3Jhc2gyLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC9sb2FkZXIvcmVzb3VyY2VzL29udW5sb2FkLWZvcm0tc3VibWl0LWNyYXNoMi5odG1sCShyZXZp
c2lvbiA0MjE0NikKKysrIExheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3Jlc291cmNlcy9vbnVubG9h
ZC1mb3JtLXN1Ym1pdC1jcmFzaDIuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMSwyNCArMCwwIEBA
Ci08aHRtbD4KLSAgICA8aGVhZD4KLSAgICAgICAgPHNjcmlwdD4KLSAgICAgICAgICAgIGZ1bmN0
aW9uIHByaW50KG1lc3NhZ2UpIHsKLSAgICAgICAgICAgICAgICB2YXIgcGFyYWdyYXBoID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgicCIpOwotICAgICAgICAgICAgICAgIHBhcmFncmFwaC5hcHBl
bmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShtZXNzYWdlKSk7Ci0gICAgICAgICAgICAg
ICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNvbGUiKS5hcHBlbmRDaGlsZChwYXJhZ3Jh
cGgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmdW5jdGlvbiBjb250aW51ZVRlc3RB
ZnRlck5hdmlnYXRpb24oKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICh3aW5k
b3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCi0gICAgICAgICAgICAgICAgICAgIGxheW91dFRlc3RD
b250cm9sbGVyLm5vdGlmeURvbmUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgPC9zY3JpcHQ+
Ci0gICAgPC9oZWFkPgotCi0gICAgPGJvZHkgb25sb2FkPSJjb250aW51ZVRlc3RBZnRlck5hdmln
YXRpb24oKSI+Ci0gICAgICAgIDxwPkJ1ZzogcmRhcjovL3Byb2JsZW0vNDI2ODI3OCBTdWJtaXR0
aW5nIGEgZm9ybSBpbiBvblVubG9hZCBldmVudCBoYW5kbGVyIGNhdXNlcyBjcmFzaCBpbiAtW1dl
YkRhdGFTb3VyY2UoV2ViUHJpdmF0ZSkgX2NvbW1pdElmUmVhZHk6XTwvcD4gCi0gICAgICAgIDxw
PklmIHRoaXMgdGVzdCBwYXNzZXMsIHlvdSdsbCBzZWUgYSBQQVNTIG1lc3NhZ2UgYmVsb3cuPC9w
PgotICAgICAgICA8aHI+Ci0gICAgICAgIDxwPlBBU1M6IFNhZmFyaSBkaWRuJ3QgY3Jhc2guPC9w
PgotICAgIDwvYm9keT4KLTxodG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6
IExheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3Jlc291cmNlcy9vbnVubG9hZC1mb3JtLXN1Ym1pdC1m
YWlsdXJlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIvcmVzb3Vy
Y2VzL29udW5sb2FkLWZvcm0tc3VibWl0LWZhaWx1cmUuaHRtbAkocmV2aXNpb24gNDIxNDYpCShm
cm9tIExheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3Jlc291cmNlcy9vbnVubG9hZC1mb3JtLXN1Ym1p
dC1jcmFzaDIuaHRtbDo0MjE0NikKKysrIExheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3Jlc291cmNl
cy9vbnVubG9hZC1mb3JtLXN1Ym1pdC1mYWlsdXJlLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwyNCBAQAorPGh0bWw+CisgICAgPGhlYWQ+CisgICAgICAgIDxzY3JpcHQ+CisgICAgICAg
ICAgICBmdW5jdGlvbiBwcmludChtZXNzYWdlKSB7CisgICAgICAgICAgICAgICAgdmFyIHBhcmFn
cmFwaCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInAiKTsKKyAgICAgICAgICAgICAgICBwYXJh
Z3JhcGguYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobWVzc2FnZSkpOworICAg
ICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlIikuYXBwZW5kQ2hp
bGQocGFyYWdyYXBoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZnVuY3Rpb24gY29u
dGludWVUZXN0QWZ0ZXJOYXZpZ2F0aW9uKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgICAgICAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgICAgICAgICB9CisgICAgICAg
IDwvc2NyaXB0PgorICAgIDwvaGVhZD4KKworICAgIDxib2R5IG9ubG9hZD0iY29udGludWVUZXN0
QWZ0ZXJOYXZpZ2F0aW9uKCkiPgorICAgICAgICA8cD5CdWc6IHJkYXI6Ly9wcm9ibGVtLzQyNjgy
NzggU3VibWl0dGluZyBhIGZvcm0gaW4gb25VbmxvYWQgZXZlbnQgaGFuZGxlciBjYXVzZXMgY3Jh
c2ggaW4gLVtXZWJEYXRhU291cmNlKFdlYlByaXZhdGUpIF9jb21taXRJZlJlYWR5Ol08L3A+IAor
ICAgICAgICA8cD5JZiB0aGlzIHRlc3QgcGFzc2VzLCB5b3UnbGwgc2VlIGEgUEFTUyBtZXNzYWdl
IGJlbG93LjwvcD4KKyAgICAgICAgPGhyPgorICAgICAgICA8cD5QQVNTOiBTYWZhcmkgZGlkbid0
IGNyYXNoLjwvcD4KKyAgICA8L2JvZHk+Cis8aHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBm
aWxlCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2xvYWRlci9yZXNvdXJjZXMvb251bmxvYWQtZm9y
bS1zdWJtaXQtZmFpbHVyZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvbG9h
ZGVyL3Jlc291cmNlcy9vbnVubG9hZC1mb3JtLXN1Ym1pdC1mYWlsdXJlLmh0bWwJKHJldmlzaW9u
IDQyMTQ2KQorKysgTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIvcmVzb3VyY2VzL29udW5sb2FkLWZv
cm0tc3VibWl0LWZhaWx1cmUuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMSwxMiArMSw2IEBACiA8
aHRtbD4KICAgICA8aGVhZD4KICAgICAgICAgPHNjcmlwdD4KLSAgICAgICAgICAgIGZ1bmN0aW9u
IHByaW50KG1lc3NhZ2UpIHsKLSAgICAgICAgICAgICAgICB2YXIgcGFyYWdyYXBoID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgicCIpOwotICAgICAgICAgICAgICAgIHBhcmFncmFwaC5hcHBlbmRD
aGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShtZXNzYWdlKSk7Ci0gICAgICAgICAgICAgICAg
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNvbGUiKS5hcHBlbmRDaGlsZChwYXJhZ3JhcGgp
OwotICAgICAgICAgICAgfQotCiAgICAgICAgICAgICBmdW5jdGlvbiBjb250aW51ZVRlc3RBZnRl
ck5hdmlnYXRpb24oKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGlmICh3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIpCkBAIC0xOSw2ICsxMyw2IEBACiAgICAgICAgIDxwPkJ1Zzog
cmRhcjovL3Byb2JsZW0vNDI2ODI3OCBTdWJtaXR0aW5nIGEgZm9ybSBpbiBvblVubG9hZCBldmVu
dCBoYW5kbGVyIGNhdXNlcyBjcmFzaCBpbiAtW1dlYkRhdGFTb3VyY2UoV2ViUHJpdmF0ZSkgX2Nv
bW1pdElmUmVhZHk6XTwvcD4gCiAgICAgICAgIDxwPklmIHRoaXMgdGVzdCBwYXNzZXMsIHlvdSds
bCBzZWUgYSBQQVNTIG1lc3NhZ2UgYmVsb3cuPC9wPgogICAgICAgICA8aHI+Ci0gICAgICAgIDxw
PlBBU1M6IFNhZmFyaSBkaWRuJ3QgY3Jhc2guPC9wPgorICAgICAgICA8cD5GQUlMOiBZb3Ugc2hv
dWxkIG5vdCByZWFjaCB0aGlzIHBhZ2UgYW55IG1vcmUsIHNpbmNlIGEgZm9ybSBzdWJtaXNzaW9u
IGluIGFuIG9udW5sb2FkIGhhbmRsZXIgaGFzIG5vIGVmZmVjdC48L3A+CiAgICAgPC9ib2R5Pgot
PGh0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorPGh0bWw+CkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L2xvYWRlci9yZXNvdXJjZXMvb251bmxvYWQtZm9ybS1zdWJtaXQtc3VjY2Vzcy5o
dG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3Jlc291cmNlcy9vbnVu
bG9hZC1mb3JtLXN1Ym1pdC1zdWNjZXNzLmh0bWwJKHJldmlzaW9uIDQyMTQ2KQkoZnJvbSBMYXlv
dXRUZXN0cy9mYXN0L2xvYWRlci9yZXNvdXJjZXMvb251bmxvYWQtZm9ybS1zdWJtaXQtY3Jhc2gy
Lmh0bWw6NDIxNDYpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2xvYWRlci9yZXNvdXJjZXMvb251bmxv
YWQtZm9ybS1zdWJtaXQtc3VjY2Vzcy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjQg
QEAKKzxodG1sPgorICAgIDxoZWFkPgorICAgICAgICA8c2NyaXB0PgorICAgICAgICAgICAgZnVu
Y3Rpb24gcHJpbnQobWVzc2FnZSkgeworICAgICAgICAgICAgICAgIHZhciBwYXJhZ3JhcGggPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCJwIik7CisgICAgICAgICAgICAgICAgcGFyYWdyYXBoLmFw
cGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG1lc3NhZ2UpKTsKKyAgICAgICAgICAg
ICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpLmFwcGVuZENoaWxkKHBhcmFn
cmFwaCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZ1bmN0aW9uIGNvbnRpbnVlVGVz
dEFmdGVyTmF2aWdhdGlvbigpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKHdp
bmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgICAgICAgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgICAgICAgICAgfQorICAgICAgICA8L3Njcmlw
dD4KKyAgICA8L2hlYWQ+CisKKyAgICA8Ym9keSBvbmxvYWQ9ImNvbnRpbnVlVGVzdEFmdGVyTmF2
aWdhdGlvbigpIj4KKyAgICAgICAgPHA+QnVnOiByZGFyOi8vcHJvYmxlbS80MjY4Mjc4IFN1Ym1p
dHRpbmcgYSBmb3JtIGluIG9uVW5sb2FkIGV2ZW50IGhhbmRsZXIgY2F1c2VzIGNyYXNoIGluIC1b
V2ViRGF0YVNvdXJjZShXZWJQcml2YXRlKSBfY29tbWl0SWZSZWFkeTpdPC9wPiAKKyAgICAgICAg
PHA+SWYgdGhpcyB0ZXN0IHBhc3NlcywgeW91J2xsIHNlZSBhIFBBU1MgbWVzc2FnZSBiZWxvdy48
L3A+CisgICAgICAgIDxocj4KKyAgICAgICAgPHA+UEFTUzogU2FmYXJpIGRpZG4ndCBjcmFzaC48
L3A+CisgICAgPC9ib2R5PgorPGh0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRl
eDogTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIvcmVzb3VyY2VzL29udW5sb2FkLWZvcm0tc3VibWl0
LXN1Y2Nlc3MuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2xvYWRlci9yZXNv
dXJjZXMvb251bmxvYWQtZm9ybS1zdWJtaXQtc3VjY2Vzcy5odG1sCShyZXZpc2lvbiA0MjE0NikK
KysrIExheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3Jlc291cmNlcy9vbnVubG9hZC1mb3JtLXN1Ym1p
dC1zdWNjZXNzLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTEsMTIgKzEsNiBAQAogPGh0bWw+CiAg
ICAgPGhlYWQ+CiAgICAgICAgIDxzY3JpcHQ+Ci0gICAgICAgICAgICBmdW5jdGlvbiBwcmludCht
ZXNzYWdlKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHBhcmFncmFwaCA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoInAiKTsKLSAgICAgICAgICAgICAgICBwYXJhZ3JhcGguYXBwZW5kQ2hpbGQoZG9j
dW1lbnQuY3JlYXRlVGV4dE5vZGUobWVzc2FnZSkpOwotICAgICAgICAgICAgICAgIGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlIikuYXBwZW5kQ2hpbGQocGFyYWdyYXBoKTsKLSAgICAg
ICAgICAgIH0KLQogICAgICAgICAgICAgZnVuY3Rpb24gY29udGludWVUZXN0QWZ0ZXJOYXZpZ2F0
aW9uKCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyKQpAQCAtMTYsOSArMTAsNiBAQAogICAgIDwvaGVhZD4KIAogICAgIDxib2R5
IG9ubG9hZD0iY29udGludWVUZXN0QWZ0ZXJOYXZpZ2F0aW9uKCkiPgotICAgICAgICA8cD5CdWc6
IHJkYXI6Ly9wcm9ibGVtLzQyNjgyNzggU3VibWl0dGluZyBhIGZvcm0gaW4gb25VbmxvYWQgZXZl
bnQgaGFuZGxlciBjYXVzZXMgY3Jhc2ggaW4gLVtXZWJEYXRhU291cmNlKFdlYlByaXZhdGUpIF9j
b21taXRJZlJlYWR5Ol08L3A+IAotICAgICAgICA8cD5JZiB0aGlzIHRlc3QgcGFzc2VzLCB5b3Un
bGwgc2VlIGEgUEFTUyBtZXNzYWdlIGJlbG93LjwvcD4KLSAgICAgICAgPGhyPgotICAgICAgICA8
cD5QQVNTOiBTYWZhcmkgZGlkbid0IGNyYXNoLjwvcD4KKyAgICAgICAgPHA+U1VDQ0VTUy4gSWYg
eW91IHNlZSB0aGlzIHBhZ2UgdGhlIHRlc3QgaGFzIHN1Y2Nlc3NmdWxseSBsb2FkZWQgYSBuZXcg
cGFnZSB3aXRob3V0IGNyYXNoaW5nIG9yIHN1Ym1pdHRpbmcgYSBmb3JtIGZyb20gYW4gb251bmxv
YWQgaGFuZGxlci48L3A+CiAgICAgPC9ib2R5PgotPGh0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQg
b2YgZmlsZQorPGh0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvaHR0cC90ZXN0
cy9uYXZpZ2F0aW9uL3N1Y2Nlc3MyMDAtZnJhbWVzLWxvYWRzYW1lLWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9u
L3N1Y2Nlc3MyMDAtZnJhbWVzLWxvYWRzYW1lLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNDIxNDYp
CisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL3N1Y2Nl
c3MyMDAtZnJhbWVzLWxvYWRzYW1lLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTI2
LDcgKzEyNiw1IEBAIGxheWVyIGF0ICgwLDApIHNpemUgODAweDYwMAogICAgICAgICBodHRwOi8v
MTI3LjAuMC4xOjgwMDAvbmF2aWdhdGlvbi9zdWNjZXNzMjAwLWZyYW1lcy1sb2Fkc2FtZS5odG1s
ICAqKm5hdiB0YXJnZXQqKgogY3Vyci0+ICBodHRwOi8vMTI3LjAuMC4xOjgwMDAvbmF2aWdhdGlv
bi9yZXNvdXJjZXMvZnJhbWVzZXQucGw/ZnJhbWVVUkw9c3VjY2VzczIwMC5odG1sICAqKm5hdiB0
YXJnZXQqKgogICAgICAgICAgICAgaHR0cDovLzEyNy4wLjAuMTo4MDAwL25hdmlnYXRpb24vcmVz
b3VyY2VzL290aGVycGFnZS5odG1sIChpbiBmcmFtZSAiZm9vdGVyIikKLSAgICAgICAgICAgIGh0
dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy9vdGhlcnBhZ2UuaHRtbCAo
aW4gZnJhbWUgImZvb3RlciIpCi0gICAgICAgICAgICBodHRwOi8vMTI3LjAuMC4xOjgwMDAvbmF2
aWdhdGlvbi9yZXNvdXJjZXMvc3VjY2VzczIwMC5odG1sIChpbiBmcmFtZSAibWFpbiIpCiAgICAg
ICAgICAgICBodHRwOi8vMTI3LjAuMC4xOjgwMDAvbmF2aWdhdGlvbi9yZXNvdXJjZXMvc3VjY2Vz
czIwMC5odG1sIChpbiBmcmFtZSAibWFpbiIpCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29178</attachid>
            <date>2009-04-01 14:23:51 -0700</date>
            <delta_ts>2009-04-01 14:47:05 -0700</delta_ts>
            <desc>patch</desc>
            <filename>FormPatch.txt</filename>
            <type>text/plain</type>
            <size>94375</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MjE1MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTM4IEBACisyMDA5LTA0LTAxICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCdWcg
MjIzNzg6IENyYXNoIHN1Ym1pdHRpbmcgYSBmb3JtIHdoZW4gcGFyc2luZyBhbiBYSFRNTCBkb2N1
bWVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIz
NzgKKyAgICAgICAgcmRhcjovL3Byb2JsZW0vNjM4ODM3NworCisgICAgICAgIFRlc3RzOiBmYXN0
L2xvYWRlci9zdWJtaXQtZm9ybS13aGlsZS1wYXJzaW5nLTEueGh0bWwKKyAgICAgICAgICAgICAg
IGZhc3QvbG9hZGVyL3N1Ym1pdC1mb3JtLXdoaWxlLXBhcnNpbmctMi5odG1sCisKKyAgICAgICAg
KiBXZWJDb3JlLmJhc2UuZXhwOiBVcGRhdGVkLgorCisgICAgICAgICogaGlzdG9yeS9IaXN0b3J5
SXRlbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIaXN0b3J5SXRlbTo6SGlzdG9yeUl0ZW0pOiBS
ZW5hbWVkIG1fc3ViSXRlbXMgdG8gbV9jaGlsZHJlbi4KKyAgICAgICAgVXNlZCB1bmNoZWNrZWRB
cHBlbmQgYmVjYXVzZSB3ZSByZXNlcnZlSW5pdGlhbENhcGFjaXR5LgorICAgICAgICAoV2ViQ29y
ZTo6SGlzdG9yeUl0ZW06OmFkZENoaWxkSXRlbSk6IFJlbmFtZWQgbV9zdWJJdGVtcyB0byBtX2No
aWxkcmVuLgorICAgICAgICBBZGRlZCBhbiBhc3NlcnRpb24gdGhhdCB0aGlzIGlzIG9ubHkgdXNl
ZCB0byBhZGQgaXRlbXMgdGhhdCBkb24ndCBoYXZlCisgICAgICAgIGR1cGxpY2F0ZSBmcmFtZSBu
YW1lcy4KKyAgICAgICAgKFdlYkNvcmU6Okhpc3RvcnlJdGVtOjpzZXRDaGlsZEl0ZW0pOiBBZGRl
ZC4gUmVwbGFjZXMgYW4gZXhpc3RpbmcgaXRlbQorICAgICAgICBpZiBhbnksIHByZXNlcnZpbmcg
dGhlIGlzVGFyZ2V0SXRlbSBmbGFnLgorICAgICAgICAoV2ViQ29yZTo6SGlzdG9yeUl0ZW06OmNo
aWxkSXRlbVdpdGhUYXJnZXQpOiBSZW5hbWVkIGZyb20gY2hpbGRJdGVtV2l0aE5hbWUKKyAgICAg
ICAgZm9yIGNvbnNpc3RlbmN5IHdpdGggdGhlIG90aGVyIGZ1bmN0aW9ucyBoZXJlIHRoYXQgYWxs
IGNhbGwgdGhlIGZyYW1lIG5hbWUgdGhlCisgICAgICAgICJ0YXJnZXQiLiBBbHNvIHVwZGF0ZWQg
Zm9yIHJlbmFtZSBvZiBtX3N1Ykl0ZW1zIHRvIG1fY2hpbGRyZW4uCisgICAgICAgIChXZWJDb3Jl
OjpIaXN0b3J5SXRlbTo6ZmluZFRhcmdldEl0ZW0pOiBSZW5hbWVkIGZyb20gcmVjdXJzZVRvRmlu
ZFRhcmdldEl0ZW0uCisgICAgICAgIFJlbW92ZWQgdW5uZWVkZWQgc2l6ZSBjaGVjay4KKyAgICAg
ICAgKFdlYkNvcmU6Okhpc3RvcnlJdGVtOjp0YXJnZXRJdGVtKTogQ2hhbmdlZCB0byBhbHdheXMg
cmV0dXJuIHRoZSB0b3AgaXRlbQorICAgICAgICBpZiBubyBpdGVtIGhhcyB0aGUgaXNUYXJnZXRJ
dGVtIGZsYWcgc2V0LiBUaGUgb2xkIHZlcnNpb24gd291bGQgaW5zdGVhZCByZXR1cm4KKyAgICAg
ICAgMCBpbiBzb21lIGNhc2VzLCBidXQgcmV0dXJuIHRoZSB0b3AgaXRlbSBpZiBpdCBoYWQgbm8g
Y2hpbGRyZW4uCisgICAgICAgIChXZWJDb3JlOjpIaXN0b3J5SXRlbTo6Y2hpbGRyZW4pOiBSZW5h
bWVkIG1fc3ViSXRlbXMgdG8gbV9jaGlsZHJlbi4KKyAgICAgICAgKFdlYkNvcmU6Okhpc3RvcnlJ
dGVtOjpoYXNDaGlsZHJlbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SGlzdG9yeUl0ZW06
OnNob3dUcmVlV2l0aEluZGVudCk6IERpdHRvLgorCisgICAgICAgICogaGlzdG9yeS9IaXN0b3J5
SXRlbS5oOiBOYW1lIGNoYW5nZXMuCisKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6OnN1Ym1pdCk6IENyZWF0ZSBh
bmQgcGFzcyBhIEZvcm1TdGF0ZSBpbnN0ZWFkIG9mCisgICAgICAgIGF0dGFjaGluZyAicmVjb3Jk
ZWQgZm9ybSB2YWx1ZXMiIGFuZCAiZm9ybSBhYm91dCB0byBiZSBzdWJtaXR0ZWQiIHRvIHRoZSBm
cmFtZQorICAgICAgICBsb2FkZXIuIFBhcmFtZXRlciB3b3JrIGZpbmUgZm9yIHRoaXM7IHRoZXJl
J3Mgbm8gbmVlZCB0byBzdG9yZSBzdGF0ZSBvbiB0aGUKKyAgICAgICAgRnJhbWVMb2FkZXIuCisK
KyAgICAgICAgKiBsb2FkZXIvRm9ybVN0YXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1T
dGF0ZTo6Rm9ybVN0YXRlKTogQWRvcHQgYSB2ZWN0b3IgaW5zdGVhZCBvZiBjb3B5aW5nIGEgaGFz
aCBtYXAuCisgICAgICAgIChXZWJDb3JlOjpGb3JtU3RhdGU6OmNyZWF0ZSk6IERpdHRvLgorICAg
ICAgICAqIGxvYWRlci9Gb3JtU3RhdGUuaDogVXBkYXRlIHRvIHVzZSBhIHZlY3RvciB0aGF0IHdl
IGFkb3B0IGluc3RlYWQgb2YgaGFzaCBtYXAKKyAgICAgICAgdGhhdCB3ZSBjb3B5IGZvciBhdXRv
LWZpbGwgdGV4dCBmaWVsZCB2YWx1ZXMuCisKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NoZWR1bGVkUmVkaXJlY3Rpb246OlNjaGVkdWxlZFJl
ZGlyZWN0aW9uKTogQWRkZWQgYSBuZXcgY2FzZSBmb3IKKyAgICAgICAgZm9ybSBzdWJtaXNzaW9u
cyBhbmQgdHVybmVkIHRoZSAid2FzRHVyaW5nTG9hZCIgc3RhdGUgaW50byBhIHNlcGFyYXRlIGJv
b2xlYW4KKyAgICAgICAgaW5zdGVhZCBvZiB1c2luZyBhIHNwZWNpYWwgcmVkaXJlY3Rpb24gdHlw
ZSB0byB0cmFjayBpdC4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpjcmVhdGVXaW5k
b3cpOiBVcGRhdGVkIGZvciBuYW1lIGFuZCBhcmd1bWVudCBjaGFuZ2Ugb2YKKyAgICAgICAgbG9h
ZEZyYW1lUmVxdWVzdC4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjp1cmxTZWxlY3Rl
ZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OnN1Ym1pdEZvcm0pOiBS
ZW1vdmVkIHRoZSAiZGVmZXJyZWQgZm9ybSBzdWJtaXNzaW9uIgorICAgICAgICBtYWNoaW5lcnks
IHJlcGxhY2luZyBpdCB3aXRoIHRoZSAic2NoZWR1bGVkIHJlZGlyZWN0aW9uIiBtZWNoYW5pc20s
IHNoYXJlZAorICAgICAgICB3aXRoIG90aGVyIGtpbmRzIG9mIHJlZGlyZWN0aW9uIGFuZCBuYXZp
Z2F0aW9uLiBNb3ZlZCBmcmFtZSB0YXJnZXRpbmcgaGVyZQorICAgICAgICBzbyB3ZSBjYW4gc2No
ZWR1bGUgdGhlIHJlZGlyZWN0aW9uIG9uIHRoZSByaWdodCBmcmFtZS4gTW92ZWQgdGhlIG11bHRp
cGxlCisgICAgICAgIGZvcm0gc3VibWlzc2lvbiBwcm90ZWN0aW9uIGhlcmUuIE1vdmVkIHRoZSBj
b2RlIHRvIGltcGxlbWVudCB0aGUgcnVsZSB0aGF0CisgICAgICAgIG1fbmF2aWdhdGlvbkR1cmlu
Z0xvYWQgd2FzIHVzZWQgZm9yIGhlcmUgdG9vLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2Fk
ZXI6OmRpZE9wZW5VUkwpOiBVc2UgdGhlIG5ldyB3YXNEdXJpbmdMb2FkIGZsYWcgaW5zdGVhZAor
ICAgICAgICBvZiB0aGUgbG9jYXRpb25DaGFuZ2VEdXJpbmdMb2FkIHR5cGUgdG8gZGV0ZWN0IGxv
Y2F0aW9uIGNoYW5nZSBkdXJpbmcgYSBsb2FkLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2Fk
ZXI6OmV4ZWN1dGVTY3JpcHQpOiBSZW1vdmVkIGNhbGwgdG8gbm93LW9ic29sZXRlIGZ1bmN0aW9u
LAorICAgICAgICBzdWJtaXRGb3JtQWdhaW4uCisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRl
cjo6c2NoZWR1bGVMb2NhdGlvbkNoYW5nZSk6IE1vdmVkIHRoZSBjb2RlIHRvIHN0b3AgbG9hZGlu
ZworICAgICAgICBvdXQgb2YgdGhpcyBmdW5jdGlvbiBpbnRvIHNjaGVkdWxlUmVkaXJlY3Rpb24s
IHNvIGl0IGNhbiBiZSBzaGFyZWQgd2l0aCB0aGUKKyAgICAgICAgbmV3IHNjaGVkdWxlRm9ybVN1
Ym1pc3Npb24gZnVuY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6c2NoZWR1
bGVGb3JtU3VibWlzc2lvbik6IEFkZGVkLiBBbG1vc3QgdGhlIHNhbWUgYXMKKyAgICAgICAgc2No
ZWR1bGVMb2NhdGlvbkNoYW5nZSwgYnV0IHdpdGggdGhlIGFyZ3VtZW50cyBmb3IgYSBmb3JtIHN1
Ym1pc3Npb24uCisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6c2NoZWR1bGVSZWZyZXNo
KTogVXBkYXRlZCBmb3IgdGhlIGNoYW5nZSB0byB0aGUKKyAgICAgICAgZHVyaW5nTG9hZCBmbGFn
LgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmlzTG9jYXRpb25DaGFuZ2UpOiBBZGRl
ZCBjYXNlIGZvciBmb3JtU3VibWlzc2lvbgorICAgICAgICBhbmQgcmVtb3ZlZCBjYXNlIGZvciBs
b2NhdGlvbkNoYW5nZUR1cmluZ0xvYWQuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6
cmVkaXJlY3Rpb25UaW1lckZpcmVkKTogRGl0dG8uIEFsc28gcmVtb3ZlZCB1bm5lZWRlZAorICAg
ICAgICBjb21wbGV0ZVVSTCBjYWxsIGFuZCBqdXN0IHVzZSBLVVJMIGNvbnN0cnVjdG9yIHRvIG1h
dGNoIHRoZSBvdGhlciBjYXNlcy4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpwcm92
aXNpb25hbExvYWRTdGFydGVkKTogUmVtb3ZlZCB0aGUgY29kZSB0byBzZXQgdXAKKyAgICAgICAg
dGhlIG1fbmF2aWdhdGlvbkR1cmluZ0xvYWQsIHdoaWNoIGlzIG5vIGxvbmdlciBuZWVkZWQuIFRo
ZSBuZXcgdmVyc2lvbiBvZgorICAgICAgICB0aGlzIGlzIGluIHRoZSBzdWJtaXRGb3JtIGZ1bmN0
aW9uIGFuZCBzZXRzIHRoZSBsb2NrSGlzdG9yeSBib29sZWFuLgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVMb2FkZXI6OnNjaGVkdWxlUmVkaXJlY3Rpb24pOiBNb3ZlZCB0aGUgY29kZSB0byBzdG9w
IGEgbG9hZAorICAgICAgICBpbiBoZXJlIHRoYXQgdXNlZCB0byBiZSBpbiBzY2hlZHVsZUxvY2F0
aW9uQ2hhbmdlLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OnN0YXJ0UmVkaXJlY3Rp
b25UaW1lcik6IEFkZGVkIGNhc2UgZm9yIGZvcm1TdWJtaXNzaW9uCisgICAgICAgIGFuZCByZW1v
dmVkIGNhc2UgZm9yIGxvY2F0aW9uQ2hhbmdlRHVyaW5nTG9hZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lTG9hZGVyOjpzdG9wUmVkaXJlY3Rpb25UaW1lcik6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVMb2FkZXI6OmNvbXBsZXRlZCk6IFJlbW92ZWQgY2FsbCB0byBub3ctb2Jzb2xl
dGUgZnVuY3Rpb24sCisgICAgICAgIHN1Ym1pdEZvcm1BZ2Fpbi4KKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lTG9hZGVyOjpsb2FkRnJhbWVSZXF1ZXN0KTogUmVuYW1lZCBmcm9tCisgICAgICAgIGxv
YWRGcmFtZVJlcXVlc3RXaXRoRm9ybUFuZFZhbHVlcy4gUmVwbGFjZWQgZm9ybSBlbGVtZW50IGFu
ZCBmb3JtIHZhbHVlcworICAgICAgICBhcmd1bWVudCB3aXRoIGEgc2luZ2xlIEZvcm1TdGF0ZSBh
cmd1bWVudC4gQ2hhbmdlZCBmcmFtZSB0YXJnZXRpbmcgY29kZQorICAgICAgICB0byB1c2UgdGhl
IHNvdXJjZSBmcmFtZSBpbiB0aGUgY2FzZSBvZiBhIGZvcm0gc3VibWlzc2lvbiB0byBiZXR0ZXIg
bWF0Y2gKKyAgICAgICAgdGhlIGFjdHVhbCB0YXJnZXQgZnJhbWUuCisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZUxvYWRlcjo6bG9hZFVSTCk6IERvbid0IHNlYXJjaCBmb3IgZXhpc3RpbmcgZnJhbWVz
IGluIHRoZQorICAgICAgICBmb3JtIHN1Ym1pc3Npb24gY2FzZSBzaW5jZSB3ZSBhbHJlYWR5IGRp
ZCB0aGF0IGluIHRoZSBzdWJtaXRGb3JtIGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVMb2FkZXI6OmNsaWVudFJlZGlyZWN0ZWQpOiBDaGFuZ2VkIHRvIHdvcmsgd2l0aCB0aGUKKyAg
ICAgICAgbV9pc0V4ZWN1dGluZ0phdmFTY3JpcHRGb3JtQWN0aW9uIGRhdGEgbWVtYmVyIGRpcmVj
dGx5IGluc3RlYWQgb2YgdGFraW5nCisgICAgICAgIGl0IGFzIGEgZnVuY3Rpb24gcGFyYW1ldGVy
LgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmxvYWRQb3N0UmVxdWVzdCk6IERvbid0
IHNlYXJjaCBmb3IgZXhpc3RpbmcgZnJhbWVzCisgICAgICAgIGluIHRoZSBmb3JtIHN1Ym1pc3Np
b24gY2FzZSBzaW5jZSB3ZSBhbHJlYWR5IGRpZCB0aGF0IGluIHRoZSBzdWJtaXRGb3JtCisgICAg
ICAgIGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmFkZEJhY2tGb3J3
YXJkSXRlbUNsaXBwZWRBdFRhcmdldCk6IE1vdmVkIGNvbW1lbnQKKyAgICAgICAgaW4gaGVyZSB0
aGF0IHdhcyBtaXNwbGFjZWQgZWxzZXdoZXJlIGluIHRoZSBmaWxlLgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVMb2FkZXI6OmZpbmRGcmFtZUZvck5hdmlnYXRpb24pOiBDaGFuZ2VkIHRvIHVzZSB0
aGUgZWFybHkKKyAgICAgICAgcmV0dXJuIGlkaW9tLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVM
b2FkZXI6OnJlY3Vyc2l2ZUdvVG9JdGVtKTogVXBkYXRlZCBmb3IgSGlzdG9yeUl0ZW0gY2hhbmdl
cy4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpjaGlsZEZyYW1lc01hdGNoSXRlbSk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OnVwZGF0ZUhpc3RvcnlGb3JT
dGFuZGFyZExvYWQpOiBSZW1vdmVkIHRoZQorICAgICAgICBtX25hdmlnYXRpb25EdXJpbmdMb2Fk
IGxvZ2ljOyB0aGF0J3Mgbm93IGhhbmRsZWQgYnkgc2V0dGluZyBsb2NrSGlzdG9yeQorICAgICAg
ICB0byB0cnVlIGluIHRoZSBzdWJtaXRGb3JtIGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVMb2FkZXI6OnVwZGF0ZUhpc3RvcnlGb3JSZWRpcmVjdFdpdGhMb2NrZWRCYWNrRm9yd2Fy
ZExpc3QpOgorICAgICAgICBVc2UgdGhlIG5ldyBzZXRDaGlsZEl0ZW0gZnVuY3Rpb24gc28gd2Ug
ZG9uJ3QgZ2V0IG11bHRpcGxlIGl0ZW1zIGZvciB0aGUKKyAgICAgICAgc2FtZSBmcmFtZSBuYW1l
IGluIHRoZSBoaXN0b3J5IGl0ZW0gdHJlZSBpbiB0aGUgYmFjay9mb3J3YXJkIGxpc3QuCisKKyAg
ICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuaDogUmVuYW1lZCBsb2FkRnJhbWVSZXF1ZXN0V2l0
aEZvcm1BbmRWYWx1ZXMgdG8KKyAgICAgICAgbG9hZEZyYW1lUmVxdWVzdCBhbmQgbWFkZSBpdCB0
YWtlIGEgZm9ybSBzdGF0ZSBvYmplY3QgaW5zdGVhZCBvZiB0aGUKKyAgICAgICAgZm9ybSBlbGVt
ZW50IGFuZCBmb3JtIHZhbHVlcy4gUmVtb3ZlZCB0aGUgdW51c2VkIGZ1bmN0aW9ucworICAgICAg
ICBsb2FkRW1wdHlEb2N1bWVudFN5bmNocm9ub3VzbHksIHByb3Zpc2lvbmFsRG9jdW1lbnRMb2Fk
ZXIsCisgICAgICAgIG5vdGlmeUljb25DaG5hZ2VkLCBhbmQgdXBkYXRlQmFzZVVSTEZvckVtcHR5
RG9jdW1lbnQuIENoYW5nZWQgdGhlCisgICAgICAgIHN1Ym1pdEZvcm0gZnVuY3Rpb24gdG8gdGFr
ZSBhIGZvcm0gc3RhdGUgYXJndW1lbnQuIEVsaW1pbmF0ZWQgdGhlCisgICAgICAgIGNsZWFyUmVj
b3JkZWRGb3JtVmFsdWVzLCBzZXRGb3JtQWJvdXRUb0JlU3VibWl0dGVkLCBhbmQgcmVjb3JkRm9y
bVZhbHVlCisgICAgICAgIGZ1bmN0aW9ucywgd2hpY2ggYXJlIHJlcGxhY2VkIGJ5IHRoZSBmb3Jt
IHN0YXRlIGFyZ3VtZW50cyB0byBzdWJtaXRGb3JtCisgICAgICAgIGFuZCBsb2FkRnJhbWVSZXF1
ZXN0LiBSZW1vdmVkIHRoZSBpc0phdmFTY3JpcHRGb3JtQWN0aW9uIGFyZ3VtZW50IGZyb20KKyAg
ICAgICAgdGhlIGNsaWVudFJlZGlyZWN0ZWQgZnVuY3Rpb247IGluc3RlYWQgaXQgbG9va3MgYXQg
YSBkYXRhIG1lbWJlciBkaXJlY3RseS4KKyAgICAgICAgRWxpbWluYXRlZCB0aGUgc3VibWl0Rm9y
bUFnYWluIGFuZCBvdmVybG9hZCBvZiB0aGUgc3VibWl0Rm9ybSBmdW5jdGlvbjsKKyAgICAgICAg
dGhlc2UgYXJlIG5vdyBzdWJzdW1lZCBpbnRvIHRoZSByZW1haW5pbmcgc3VibWl0Rm9ybSBmdW5j
dGlvbiBhbmQgdGhlCisgICAgICAgIHNjaGVkdWxlRm9ybVN1Ym1pc3Npb24gZnVuY3Rpb24uIFJl
bW92ZWQgdW51c2VkIGFuZCBvYnNvbGV0ZSBkYXRhCisgICAgICAgIG1lbWJlcnMgbV9uYXZpZ2F0
aW9uRHVyaW5nTG9hZCwgbV9kZWZlcnJlZEZvcm1TdWJtaXNzaW9uLAorICAgICAgICBtX2Zvcm1B
Ym91dFRvQmVTdWJtaXR0ZWQgYW5kIG1fZm9ybVZhbHVlc0Fib3V0VG9CZVN1Ym1pdHRlZC4KKwor
ICAgICAgICAqIHBhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNvbnRleHRNZW51Q29udHJvbGxlcjo6Y29udGV4dE1lbnVJdGVtU2VsZWN0ZWQpOgorICAg
ICAgICBVcGRhdGVkIGZvciBuYW1lIGFuZCBhcmd1bWVudCBjaGFuZ2Ugb2YgbG9hZEZyYW1lUmVx
dWVzdC4KKworICAgICAgICAqIHBhZ2UvRnJhbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWU6On5GcmFtZSk6IFJlbW92ZWQgY2FsbCB0byB0aGUgbm93LXVubmVlZGVkCisgICAgICAgIGNs
ZWFyUmVjb3JkZWRGb3JtVmFsdWVzIGZ1bmN0aW9uLgorCiAyMDA5LTAzLTMxICBEYXJpbiBBZGxl
ciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSb2xsZWQgb3V0IHRoYXQgbGFzdCBjaGFu
Z2UgdW50aWwgSSBjYW4gaW52ZXN0aWdhdGUgdGhlIHJlZ3Jlc3Npb24gdGVzdCBmYWlsdXJlcyBp
dCBzZWVtcwpJbmRleDogV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvV2ViQ29yZS5iYXNlLmV4cAkocmV2aXNpb24gNDIxNTApCisrKyBXZWJDb3JlL1dlYkNv
cmUuYmFzZS5leHAJKHdvcmtpbmcgY29weSkKQEAgLTE1Miw2ICsxNTIsNyBAQCBfX1pON1dlYkNv
cmUxMUZyYW1lTG9hZGVyMTRkZXRhY2hDaGlsZHJlCiBfX1pON1dlYkNvcmUxMUZyYW1lTG9hZGVy
MTRzY3JvbGxUb0FuY2hvckVSS05TXzRLVVJMRQogX19aTjdXZWJDb3JlMTFGcmFtZUxvYWRlcjE0
c3RvcEFsbExvYWRlcnNFdgogX19aTjdXZWJDb3JlMTFGcmFtZUxvYWRlcjE2ZGV0YWNoRnJvbVBh
cmVudEV2CitfX1pON1dlYkNvcmUxMUZyYW1lTG9hZGVyMTZsb2FkRnJhbWVSZXF1ZXN0RVJLTlNf
MTZGcmFtZUxvYWRSZXF1ZXN0RWJiTjNXVEYxMFBhc3NSZWZQdHJJTlNfNUV2ZW50RUVFTlM1X0lO
U185Rm9ybVN0YXRlRUVFCiBfX1pON1dlYkNvcmUxMUZyYW1lTG9hZGVyMTdzdG9wRm9yVXNlckNh
bmNlbEViCiBfX1pON1dlYkNvcmUxMUZyYW1lTG9hZGVyMThjdXJyZW50SGlzdG9yeUl0ZW1Fdgog
X19aTjdXZWJDb3JlMTFGcmFtZUxvYWRlcjE4c2V0TG9jYWxMb2FkUG9saWN5RU5TMF8xNUxvY2Fs
TG9hZFBvbGljeUUKQEAgLTE2Myw3ICsxNjQsNiBAQCBfX1pON1dlYkNvcmUxMUZyYW1lTG9hZGVy
MjN0aW1lT2ZMYXN0Q29tCiBfX1pON1dlYkNvcmUxMUZyYW1lTG9hZGVyMjRyZWdpc3RlclVSTFNj
aGVtZUFzTG9jYWxFUktOU182U3RyaW5nRQogX19aTjdXZWJDb3JlMTFGcmFtZUxvYWRlcjI2cmVs
b2FkV2l0aE92ZXJyaWRlRW5jb2RpbmdFUktOU182U3RyaW5nRQogX19aTjdXZWJDb3JlMTFGcmFt
ZUxvYWRlcjI2c2F2ZURvY3VtZW50QW5kU2Nyb2xsU3RhdGVFdgotX19aTjdXZWJDb3JlMTFGcmFt
ZUxvYWRlcjMzbG9hZEZyYW1lUmVxdWVzdFdpdGhGb3JtQW5kVmFsdWVzRVJLTlNfMTZGcmFtZUxv
YWRSZXF1ZXN0RWJiTjNXVEYxMFBhc3NSZWZQdHJJTlNfNUV2ZW50RUVFUE5TXzE1SFRNTEZvcm1F
bGVtZW50RVJLTlM0XzdIYXNoTWFwSU5TXzZTdHJpbmdFU0JfTlNfMTBTdHJpbmdIYXNoRU5TNF8x
MEhhc2hUcmFpdHNJU0JfRUVTRV9FRQogX19aTjdXZWJDb3JlMTFGcmFtZUxvYWRlcjM2c2F2ZVNj
cm9sbFBvc2l0aW9uQW5kVmlld1N0YXRlVG9JdGVtRVBOU18xMUhpc3RvcnlJdGVtRQogX19aTjdX
ZWJDb3JlMTFGcmFtZUxvYWRlcjRsb2FkRVJLTlNfMTVSZXNvdXJjZVJlcXVlc3RFUktOU18xNFN1
YnN0aXR1dGVEYXRhRWIKIF9fWk43V2ViQ29yZTExRnJhbWVMb2FkZXI0bG9hZEVSS05TXzE1UmVz
b3VyY2VSZXF1ZXN0RVJLTlNfNlN0cmluZ0ViCkBAIC0xNzIsNiArMTcyLDcgQEAgX19aTjdXZWJD
b3JlMTFGcmFtZUxvYWRlcjZyZWxvYWRFYgogX19aTjdXZWJDb3JlMTFGcmFtZUxvYWRlcjdhZGRE
YXRhRVBLY2kKIF9fWk43V2ViQ29yZTExRnJhbWVMb2FkZXI3Y2FuTG9hZEVSS05TXzRLVVJMRVJL
TlNfNlN0cmluZ0VQS05TXzhEb2N1bWVudEUKIF9fWk43V2ViQ29yZTExR2VvbG9jYXRpb24xMnNl
dElzQWxsb3dlZEViCitfX1pON1dlYkNvcmUxMUhpc3RvcnlJdGVtMTB0YXJnZXRJdGVtRXYKIF9f
Wk43V2ViQ29yZTExSGlzdG9yeUl0ZW0xMXNldFJlZmVycmVyRVJLTlNfNlN0cmluZ0UKIF9fWk43
V2ViQ29yZTExSGlzdG9yeUl0ZW0xMmFkZENoaWxkSXRlbUVOM1dURjEwUGFzc1JlZlB0cklTMF9F
RQogX19aTjdXZWJDb3JlMTFIaXN0b3J5SXRlbTEyc2V0VVJMU3RyaW5nRVJLTlNfNlN0cmluZ0UK
QEAgLTE4OCwxMyArMTg5LDExIEBAIF9fWk43V2ViQ29yZTExSGlzdG9yeUl0ZW0xOHNldExhc3RW
aXNpdGUKIF9fWk43V2ViQ29yZTExSGlzdG9yeUl0ZW0yMHNldE9yaWdpbmFsVVJMU3RyaW5nRVJL
TlNfNlN0cmluZ0UKIF9fWk43V2ViQ29yZTExSGlzdG9yeUl0ZW0yMHNldFRyYW5zaWVudFByb3Bl
cnR5RVJLTlNfNlN0cmluZ0VQMTFvYmpjX29iamVjdAogX19aTjdXZWJDb3JlMTFIaXN0b3J5SXRl
bTIybWVyZ2VBdXRvQ29tcGxldGVIaW50c0VQUzBfCi1fX1pON1dlYkNvcmUxMUhpc3RvcnlJdGVt
MjNyZWN1cnNlVG9GaW5kVGFyZ2V0SXRlbUV2CiBfX1pON1dlYkNvcmUxMUhpc3RvcnlJdGVtNnNl
dFVSTEVSS05TXzRLVVJMRQogX19aTjdXZWJDb3JlMTFIaXN0b3J5SXRlbTd2aXNpdGVkRVJLTlNf
NlN0cmluZ0VkCiBfX1pON1dlYkNvcmUxMUhpc3RvcnlJdGVtOGZvcm1EYXRhRXYKIF9fWk43V2Vi
Q29yZTExSGlzdG9yeUl0ZW04c2V0VGl0bGVFUktOU182U3RyaW5nRQogX19aTjdXZWJDb3JlMTFI
aXN0b3J5SXRlbTlzZXRQYXJlbnRFUktOU182U3RyaW5nRQotX19aTjdXZWJDb3JlMTFIaXN0b3J5
SXRlbTlzZXRUYXJnZXRFUktOU182U3RyaW5nRQogX19aTjdXZWJDb3JlMTFIaXN0b3J5SXRlbUMx
RVJLTlNfNEtVUkxFUktOU182U3RyaW5nRVM2X1M2XwogX19aTjdXZWJDb3JlMTFIaXN0b3J5SXRl
bUMxRVJLTlNfNlN0cmluZ0VTM19TM19kCiBfX1pON1dlYkNvcmUxMUhpc3RvcnlJdGVtQzFFUktO
U182U3RyaW5nRVMzX2QKQEAgLTcyNSw3ICs3MjQsNiBAQCBfX1pOSzdXZWJDb3JlMTFIaXN0b3J5
SXRlbTEyaXNUYXJnZXRJdGVtCiBfX1pOSzdXZWJDb3JlMTFIaXN0b3J5SXRlbTEycmVkaXJlY3RV
UkxzRXYKIF9fWk5LN1dlYkNvcmUxMUhpc3RvcnlJdGVtMTRhbHRlcm5hdGVUaXRsZUV2CiBfX1pO
SzdXZWJDb3JlMTFIaXN0b3J5SXRlbTE1bGFzdFZpc2l0ZWRUaW1lRXYKLV9fWk5LN1dlYkNvcmUx
MUhpc3RvcnlJdGVtMTdjaGlsZEl0ZW1XaXRoTmFtZUVSS05TXzZTdHJpbmdFCiBfX1pOSzdXZWJD
b3JlMTFIaXN0b3J5SXRlbTE3b3JpZ2luYWxVUkxTdHJpbmdFdgogX19aTks3V2ViQ29yZTExSGlz
dG9yeUl0ZW0yMGdldFRyYW5zaWVudFByb3BlcnR5RVJLTlNfNlN0cmluZ0UKIF9fWk5LN1dlYkNv
cmUxMUhpc3RvcnlJdGVtM3VybEV2CkluZGV4OiBXZWJDb3JlL2hpc3RvcnkvSGlzdG9yeUl0ZW0u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaGlzdG9yeS9IaXN0b3J5SXRlbS5jcHAJKHJldmlz
aW9uIDQyMTUwKQorKysgV2ViQ29yZS9oaXN0b3J5L0hpc3RvcnlJdGVtLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTIzLDEwICsxMjMsMTAgQEAgaW5saW5lIEhpc3RvcnlJdGVtOjpIaXN0b3J5SXRl
bShjb25zdCBIaQogICAgIGlmIChpdGVtLm1fZm9ybURhdGEpCiAgICAgICAgIG1fZm9ybURhdGEg
PSBpdGVtLm1fZm9ybURhdGEtPmNvcHkoKTsKICAgICAgICAgCi0gICAgdW5zaWduZWQgc2l6ZSA9
IGl0ZW0ubV9zdWJJdGVtcy5zaXplKCk7Ci0gICAgbV9zdWJJdGVtcy5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KHNpemUpOworICAgIHVuc2lnbmVkIHNpemUgPSBpdGVtLm1fY2hpbGRyZW4uc2l6ZSgp
OworICAgIG1fY2hpbGRyZW4ucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzaXplKTsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICBtX3N1Ykl0ZW1zLmFwcGVu
ZChpdGVtLm1fc3ViSXRlbXNbaV0tPmNvcHkoKSk7CisgICAgICAgIG1fY2hpbGRyZW4udW5jaGVj
a2VkQXBwZW5kKGl0ZW0ubV9jaGlsZHJlbltpXS0+Y29weSgpKTsKIAogICAgIGlmIChpdGVtLm1f
cmVkaXJlY3RVUkxzKQogICAgICAgICBtX3JlZGlyZWN0VVJMcy5zZXQobmV3IFZlY3RvcjxTdHJp
bmc+KCppdGVtLm1fcmVkaXJlY3RVUkxzKSk7CkBAIC0zNzgsNTIgKzM3OCw2MSBAQCB2b2lkIEhp
c3RvcnlJdGVtOjpzZXRJc1RhcmdldEl0ZW0oYm9vbCBmCiAKIHZvaWQgSGlzdG9yeUl0ZW06OmFk
ZENoaWxkSXRlbShQYXNzUmVmUHRyPEhpc3RvcnlJdGVtPiBjaGlsZCkKIHsKLSAgICBtX3N1Ykl0
ZW1zLmFwcGVuZChjaGlsZCk7CisgICAgQVNTRVJUKCFjaGlsZEl0ZW1XaXRoVGFyZ2V0KGNoaWxk
LT50YXJnZXQoKSkpOworICAgIG1fY2hpbGRyZW4uYXBwZW5kKGNoaWxkKTsKIH0KIAotSGlzdG9y
eUl0ZW0qIEhpc3RvcnlJdGVtOjpjaGlsZEl0ZW1XaXRoTmFtZShjb25zdCBTdHJpbmcmIG5hbWUp
IGNvbnN0Cit2b2lkIEhpc3RvcnlJdGVtOjpzZXRDaGlsZEl0ZW0oUGFzc1JlZlB0cjxIaXN0b3J5
SXRlbT4gY2hpbGQpCiB7Ci0gICAgdW5zaWduZWQgc2l6ZSA9IG1fc3ViSXRlbXMuc2l6ZSgpOwot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpIAotICAgICAgICBpZiAobV9z
dWJJdGVtc1tpXS0+dGFyZ2V0KCkgPT0gbmFtZSkKLSAgICAgICAgICAgIHJldHVybiBtX3N1Ykl0
ZW1zW2ldLmdldCgpOworICAgIEFTU0VSVCghY2hpbGQtPmlzVGFyZ2V0SXRlbSgpKTsKKyAgICB1
bnNpZ25lZCBzaXplID0gbV9jaGlsZHJlbi5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHNpemU7ICsraSkgIHsKKyAgICAgICAgaWYgKG1fY2hpbGRyZW5baV0tPnRhcmdldCgp
ID09IGNoaWxkLT50YXJnZXQoKSkgeworICAgICAgICAgICAgY2hpbGQtPnNldElzVGFyZ2V0SXRl
bShtX2NoaWxkcmVuW2ldLT5pc1RhcmdldEl0ZW0oKSk7CisgICAgICAgICAgICBtX2NoaWxkcmVu
W2ldID0gY2hpbGQ7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAg
bV9jaGlsZHJlbi5hcHBlbmQoY2hpbGQpOworfQorCitIaXN0b3J5SXRlbSogSGlzdG9yeUl0ZW06
OmNoaWxkSXRlbVdpdGhUYXJnZXQoY29uc3QgU3RyaW5nJiB0YXJnZXQpIGNvbnN0Cit7CisgICAg
dW5zaWduZWQgc2l6ZSA9IG1fY2hpbGRyZW4uc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgaWYgKG1fY2hpbGRyZW5baV0tPnRhcmdldCgp
ID09IHRhcmdldCkKKyAgICAgICAgICAgIHJldHVybiBtX2NoaWxkcmVuW2ldLmdldCgpOworICAg
IH0KICAgICByZXR1cm4gMDsKIH0KIAotLy8gPHJkYXI6Ly9wcm9ibGVtLzQ4OTU4NDk+IEhpc3Rv
cnlJdGVtOjpyZWN1cnNlVG9GaW5kVGFyZ2V0SXRlbSgpIHNob3VsZCBiZSByZXBsYWNlIHdpdGgg
YSBub24tcmVjdXJzaXZlIG1ldGhvZAotSGlzdG9yeUl0ZW0qIEhpc3RvcnlJdGVtOjpyZWN1cnNl
VG9GaW5kVGFyZ2V0SXRlbSgpCisvLyA8cmRhcjovL3Byb2JsZW0vNDg5NTg0OT4gSGlzdG9yeUl0
ZW06OmZpbmRUYXJnZXRJdGVtKCkgc2hvdWxkIGJlIHJlcGxhY2VkIHdpdGggYSBub24tcmVjdXJz
aXZlIG1ldGhvZC4KK0hpc3RvcnlJdGVtKiBIaXN0b3J5SXRlbTo6ZmluZFRhcmdldEl0ZW0oKQog
ewogICAgIGlmIChtX2lzVGFyZ2V0SXRlbSkKICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgaWYg
KCFtX3N1Ykl0ZW1zLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgSGlzdG9y
eUl0ZW0qIG1hdGNoOwotICAgIHVuc2lnbmVkIHNpemUgPSBtX3N1Ykl0ZW1zLnNpemUoKTsKKyAg
ICB1bnNpZ25lZCBzaXplID0gbV9jaGlsZHJlbi5zaXplKCk7CiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBtYXRjaCA9IG1fc3ViSXRlbXNbaV0tPnJl
Y3Vyc2VUb0ZpbmRUYXJnZXRJdGVtKCk7Ci0gICAgICAgIGlmIChtYXRjaCkKKyAgICAgICAgaWYg
KEhpc3RvcnlJdGVtKiBtYXRjaCA9IG1fY2hpbGRyZW5baV0tPnRhcmdldEl0ZW0oKSkKICAgICAg
ICAgICAgIHJldHVybiBtYXRjaDsKICAgICB9Ci0gICAgCiAgICAgcmV0dXJuIDA7CiB9CiAKIEhp
c3RvcnlJdGVtKiBIaXN0b3J5SXRlbTo6dGFyZ2V0SXRlbSgpCiB7Ci0gICAgaWYgKCFtX3N1Ykl0
ZW1zLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgcmV0dXJuIHJlY3Vyc2VUb0Zp
bmRUYXJnZXRJdGVtKCk7CisgICAgSGlzdG9yeUl0ZW0qIGZvdW5kSXRlbSA9IGZpbmRUYXJnZXRJ
dGVtKCk7CisgICAgcmV0dXJuIGZvdW5kSXRlbSA/IGZvdW5kSXRlbSA6IHRoaXM7CiB9CiAKIGNv
bnN0IEhpc3RvcnlJdGVtVmVjdG9yJiBIaXN0b3J5SXRlbTo6Y2hpbGRyZW4oKSBjb25zdAogewot
ICAgIHJldHVybiBtX3N1Ykl0ZW1zOworICAgIHJldHVybiBtX2NoaWxkcmVuOwogfQogCiBib29s
IEhpc3RvcnlJdGVtOjpoYXNDaGlsZHJlbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fc3ViSXRl
bXMuc2l6ZSgpOworICAgIHJldHVybiAhbV9jaGlsZHJlbi5pc0VtcHR5KCk7CiB9CiAKIFN0cmlu
ZyBIaXN0b3J5SXRlbTo6Zm9ybUNvbnRlbnRUeXBlKCkgY29uc3QKQEAgLTUwNSw4ICs1MTQsOCBA
QCBpbnQgSGlzdG9yeUl0ZW06OnNob3dUcmVlV2l0aEluZGVudCh1bnNpCiAgICAgZnByaW50Zihz
dGRlcnIsICIlcystJXMgKCVwKVxuIiwgcHJlZml4LmRhdGEoKSwgbV91cmxTdHJpbmcudXRmOCgp
LmRhdGEoKSwgdGhpcyk7CiAgICAgCiAgICAgaW50IHRvdGFsU3ViSXRlbXMgPSAwOwotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3N1Ykl0ZW1zLnNpemUoKTsgKytpKQotICAgICAgICB0
b3RhbFN1Ykl0ZW1zICs9IG1fc3ViSXRlbXNbaV0tPnNob3dUcmVlV2l0aEluZGVudChpbmRlbnRM
ZXZlbCArIDEpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NoaWxkcmVuLnNpemUo
KTsgKytpKQorICAgICAgICB0b3RhbFN1Ykl0ZW1zICs9IG1fY2hpbGRyZW5baV0tPnNob3dUcmVl
V2l0aEluZGVudChpbmRlbnRMZXZlbCArIDEpOwogICAgIHJldHVybiB0b3RhbFN1Ykl0ZW1zICsg
MTsKIH0KIApJbmRleDogV2ViQ29yZS9oaXN0b3J5L0hpc3RvcnlJdGVtLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9oaXN0b3J5L0hpc3RvcnlJdGVtLmgJKHJldmlzaW9uIDQyMTUwKQorKysgV2Vi
Q29yZS9oaXN0b3J5L0hpc3RvcnlJdGVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyOSw5ICsxMjks
OSBAQCBwdWJsaWM6IAogICAgIHZvaWQgc2V0TGFzdFZpc2l0V2FzSFRUUE5vbkdldChib29sIHdh
c05vdEdldCkgeyBtX2xhc3RWaXNpdFdhc0hUVFBOb25HZXQgPSB3YXNOb3RHZXQ7IH0KIAogICAg
IHZvaWQgYWRkQ2hpbGRJdGVtKFBhc3NSZWZQdHI8SGlzdG9yeUl0ZW0+KTsKLSAgICBIaXN0b3J5
SXRlbSogY2hpbGRJdGVtV2l0aE5hbWUoY29uc3QgU3RyaW5nJikgY29uc3Q7CisgICAgdm9pZCBz
ZXRDaGlsZEl0ZW0oUGFzc1JlZlB0cjxIaXN0b3J5SXRlbT4pOworICAgIEhpc3RvcnlJdGVtKiBj
aGlsZEl0ZW1XaXRoVGFyZ2V0KGNvbnN0IFN0cmluZyYpIGNvbnN0OwogICAgIEhpc3RvcnlJdGVt
KiB0YXJnZXRJdGVtKCk7Ci0gICAgSGlzdG9yeUl0ZW0qIHJlY3Vyc2VUb0ZpbmRUYXJnZXRJdGVt
KCk7CiAgICAgY29uc3QgSGlzdG9yeUl0ZW1WZWN0b3ImIGNoaWxkcmVuKCkgY29uc3Q7CiAgICAg
Ym9vbCBoYXNDaGlsZHJlbigpIGNvbnN0OwogCkBAIC0xNzQsNyArMTc0LDcgQEAgcHJpdmF0ZToK
ICAgICBIaXN0b3J5SXRlbSgpOwogICAgIEhpc3RvcnlJdGVtKGNvbnN0IFN0cmluZyYgdXJsU3Ry
aW5nLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBkb3VibGUgbGFzdFZpc2l0ZWQpOwogICAgIEhpc3Rv
cnlJdGVtKGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBjb25z
dCBTdHJpbmcmIGFsdGVybmF0ZVRpdGxlLCBkb3VibGUgbGFzdFZpc2l0ZWQpOwotICAgIEhpc3Rv
cnlJdGVtKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB0YXJnZXQsIGNvbnN0IFN0cmlu
ZyYgcGFyZW50LCBjb25zdCBTdHJpbmcmIHRpdGxlKTsKKyAgICBIaXN0b3J5SXRlbShjb25zdCBL
VVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgZnJhbWVOYW1lLCBjb25zdCBTdHJpbmcmIHBhcmVudCwg
Y29uc3QgU3RyaW5nJiB0aXRsZSk7CiAKICAgICBIaXN0b3J5SXRlbShjb25zdCBIaXN0b3J5SXRl
bSYpOwogCkBAIC0xODIsNiArMTgyLDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGNvbGxhcHNlRGFp
bHlWaXNpdHNUb1dlZWtseSgpOwogICAgIHZvaWQgcmVjb3JkVmlzaXRBdFRpbWUoZG91YmxlKTsK
IAorICAgIEhpc3RvcnlJdGVtKiBmaW5kVGFyZ2V0SXRlbSgpOworCiAgICAgU3RyaW5nIG1fdXJs
U3RyaW5nOwogICAgIFN0cmluZyBtX29yaWdpbmFsVVJMU3RyaW5nOwogICAgIFN0cmluZyBtX3Jl
ZmVycmVyOwpAQCAtMTk2LDcgKzE5OCw3IEBAIHByaXZhdGU6CiAgICAgSW50UG9pbnQgbV9zY3Jv
bGxQb2ludDsKICAgICBWZWN0b3I8U3RyaW5nPiBtX2RvY3VtZW50U3RhdGU7CiAgICAgCi0gICAg
SGlzdG9yeUl0ZW1WZWN0b3IgbV9zdWJJdGVtczsKKyAgICBIaXN0b3J5SXRlbVZlY3RvciBtX2No
aWxkcmVuOwogICAgIAogICAgIGJvb2wgbV9sYXN0VmlzaXRXYXNGYWlsdXJlOwogICAgIGJvb2wg
bV9pc1RhcmdldEl0ZW07CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAkocmV2aXNpb24g
NDIxNTApCisrKyBXZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMiw3ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9s
bEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0
b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBr
ZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAw
NSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKiAgICAgICAgICAgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAbnlwb3AuY29t
KQogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJGaWxlU3lzdGVtLmgi
CiAjaW5jbHVkZSAiRm9ybURhdGEuaCIKICNpbmNsdWRlICJGb3JtRGF0YUxpc3QuaCIKKyNpbmNs
dWRlICJGb3JtU3RhdGUuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9h
ZGVyLmgiCiAjaW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCkBAIC00NCwxMSArNDUsMTAgQEAKICNp
bmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUg
IlJlbmRlclRleHRDb250cm9sLmgiCisjaW5jbHVkZSA8bGltaXRzPgogI2luY2x1ZGUgPHd0Zi9D
dXJyZW50VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9SYW5kb21OdW1iZXIuaD4KIAotI2luY2x1ZGUg
PGxpbWl0cz4KLQogI2lmIFBMQVRGT1JNKFdYKQogI2luY2x1ZGUgPHd4L2RlZnMuaD4KICNpbmNs
dWRlIDx3eC9maWxlbmFtZS5oPgpAQCAtNTgsNiArNTgsOCBAQAogI2luY2x1ZGUgPHNobHdhcGku
aD4KICNlbmRpZgogCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CkBAIC0zMTksMTQgKzMyMSwxNCBAQCB2b2lk
IEhUTUxGb3JtRWxlbWVudDo6c3VibWl0KEV2ZW50KiBldmVuCiAgICAgSFRNTEZvcm1Db250cm9s
RWxlbWVudCogZmlyc3RTdWNjZXNzZnVsU3VibWl0QnV0dG9uID0gMDsKICAgICBib29sIG5lZWRC
dXR0b25BY3RpdmF0aW9uID0gYWN0aXZhdGVTdWJtaXRCdXR0b247IC8vIGRvIHdlIG5lZWQgdG8g
YWN0aXZhdGUgYSBzdWJtaXQgYnV0dG9uPwogICAgIAotICAgIGZyYW1lLT5sb2FkZXIoKS0+Y2xl
YXJSZWNvcmRlZEZvcm1WYWx1ZXMoKTsKLSAgICBmcmFtZS0+bG9hZGVyKCktPnNldEZvcm1BYm91
dFRvQmVTdWJtaXR0ZWQodGhpcyk7CisgICAgVmVjdG9yPHBhaXI8U3RyaW5nLCBTdHJpbmc+ID4g
Zm9ybVZhbHVlczsKKwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmb3JtRWxlbWVudHMu
c2l6ZSgpOyArK2kpIHsKICAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogY29udHJvbCA9
IGZvcm1FbGVtZW50c1tpXTsKICAgICAgICAgaWYgKGNvbnRyb2wtPmhhc0xvY2FsTmFtZShpbnB1
dFRhZykpIHsKICAgICAgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gc3RhdGljX2Nh
c3Q8SFRNTElucHV0RWxlbWVudCo+KGNvbnRyb2wpOwogICAgICAgICAgICAgaWYgKGlucHV0LT5p
c1RleHRGaWVsZCgpKSB7Ci0gICAgICAgICAgICAgICAgZnJhbWUtPmxvYWRlcigpLT5yZWNvcmRG
b3JtVmFsdWUoaW5wdXQtPm5hbWUoKSwgaW5wdXQtPnZhbHVlKCkpOworICAgICAgICAgICAgICAg
IGZvcm1WYWx1ZXMuYXBwZW5kKHBhaXI8U3RyaW5nLCBTdHJpbmc+KGlucHV0LT5uYW1lKCksIGlu
cHV0LT52YWx1ZSgpKSk7CiAgICAgICAgICAgICAgICAgaWYgKGlucHV0LT5pc1NlYXJjaEZpZWxk
KCkpCiAgICAgICAgICAgICAgICAgICAgIGlucHV0LT5hZGRTZWFyY2hSZXN1bHQoKTsKICAgICAg
ICAgICAgIH0KQEAgLTMzOSw2ICszNDEsOCBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudDo6c3VibWl0
KEV2ZW50KiBldmVuCiAgICAgICAgIH0KICAgICB9CiAKKyAgICBSZWZQdHI8Rm9ybVN0YXRlPiBm
b3JtU3RhdGUgPSBGb3JtU3RhdGU6OmNyZWF0ZSh0aGlzLCBmb3JtVmFsdWVzLCBmcmFtZSk7CisK
ICAgICBpZiAobmVlZEJ1dHRvbkFjdGl2YXRpb24gJiYgZmlyc3RTdWNjZXNzZnVsU3VibWl0QnV0
dG9uKQogICAgICAgICBmaXJzdFN1Y2Nlc3NmdWxTdWJtaXRCdXR0b24tPnNldEFjdGl2YXRlZFN1
Ym1pdCh0cnVlKTsKICAgICAKQEAgLTM2MSwxNCArMzY1LDE0IEBAIHZvaWQgSFRNTEZvcm1FbGVt
ZW50OjpzdWJtaXQoRXZlbnQqIGV2ZW4KICAgICAgICAgICAgICAgICBtX3VybCA9IHVybC5zdHJp
bmcoKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgZnJhbWUtPmxvYWRlcigpLT5zdWJt
aXRGb3JtKCJQT1NUIiwgbV91cmwsIGRhdGEucmVsZWFzZSgpLCBtX3RhcmdldCwgbV9mb3JtRGF0
YUJ1aWxkZXIuZW5jb2RpbmdUeXBlKCksIFN0cmluZygpLCBldmVudCwgbG9ja0hpc3RvcnksIGxv
Y2tCYWNrRm9yd2FyZExpc3QpOworICAgICAgICAgICAgZnJhbWUtPmxvYWRlcigpLT5zdWJtaXRG
b3JtKCJQT1NUIiwgbV91cmwsIGRhdGEucmVsZWFzZSgpLCBtX3RhcmdldCwgbV9mb3JtRGF0YUJ1
aWxkZXIuZW5jb2RpbmdUeXBlKCksIFN0cmluZygpLCBsb2NrSGlzdG9yeSwgbG9ja0JhY2tGb3J3
YXJkTGlzdCwgZXZlbnQsIGZvcm1TdGF0ZS5yZWxlYXNlKCkpOwogICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGJvdW5kYXJ5ID0gbV9mb3JtRGF0YUJ1aWxkZXIuZ2Vu
ZXJhdGVVbmlxdWVCb3VuZGFyeVN0cmluZygpOwotICAgICAgICAgICAgZnJhbWUtPmxvYWRlcigp
LT5zdWJtaXRGb3JtKCJQT1NUIiwgbV91cmwsIGNyZWF0ZUZvcm1EYXRhKGJvdW5kYXJ5LmRhdGEo
KSksIG1fdGFyZ2V0LCBtX2Zvcm1EYXRhQnVpbGRlci5lbmNvZGluZ1R5cGUoKSwgYm91bmRhcnku
ZGF0YSgpLCBldmVudCwgbG9ja0hpc3RvcnksIGxvY2tCYWNrRm9yd2FyZExpc3QpOworICAgICAg
ICAgICAgZnJhbWUtPmxvYWRlcigpLT5zdWJtaXRGb3JtKCJQT1NUIiwgbV91cmwsIGNyZWF0ZUZv
cm1EYXRhKGJvdW5kYXJ5LmRhdGEoKSksIG1fdGFyZ2V0LCBtX2Zvcm1EYXRhQnVpbGRlci5lbmNv
ZGluZ1R5cGUoKSwgYm91bmRhcnkuZGF0YSgpLCBsb2NrSGlzdG9yeSwgbG9ja0JhY2tGb3J3YXJk
TGlzdCwgZXZlbnQsIGZvcm1TdGF0ZS5yZWxlYXNlKCkpOwogICAgICAgICB9CiAgICAgfSBlbHNl
IHsKICAgICAgICAgbV9mb3JtRGF0YUJ1aWxkZXIuc2V0SXNNdWx0aVBhcnRGb3JtKGZhbHNlKTsK
LSAgICAgICAgZnJhbWUtPmxvYWRlcigpLT5zdWJtaXRGb3JtKCJHRVQiLCBtX3VybCwgY3JlYXRl
Rm9ybURhdGEoQ1N0cmluZygpKSwgbV90YXJnZXQsIFN0cmluZygpLCBTdHJpbmcoKSwgZXZlbnQs
IGxvY2tIaXN0b3J5LCBsb2NrQmFja0ZvcndhcmRMaXN0KTsKKyAgICAgICAgZnJhbWUtPmxvYWRl
cigpLT5zdWJtaXRGb3JtKCJHRVQiLCBtX3VybCwgY3JlYXRlRm9ybURhdGEoQ1N0cmluZygpKSwg
bV90YXJnZXQsIFN0cmluZygpLCBTdHJpbmcoKSwgbG9ja0hpc3RvcnksIGxvY2tCYWNrRm9yd2Fy
ZExpc3QsIGV2ZW50LCBmb3JtU3RhdGUucmVsZWFzZSgpKTsKICAgICB9CiAKICAgICBpZiAobmVl
ZEJ1dHRvbkFjdGl2YXRpb24gJiYgZmlyc3RTdWNjZXNzZnVsU3VibWl0QnV0dG9uKQpJbmRleDog
V2ViQ29yZS9sb2FkZXIvRm9ybVN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRl
ci9Gb3JtU3RhdGUuY3BwCShyZXZpc2lvbiA0MjE1MCkKKysrIFdlYkNvcmUvbG9hZGVyL0Zvcm1T
dGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA2LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsMTYgKzM0LDE2IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc1JlZlB0cjxGb3JtU3RhdGU+IEZvcm1TdGF0ZTo6Y3Jl
YXRlKFBhc3NSZWZQdHI8SFRNTEZvcm1FbGVtZW50PiBmb3JtLCBjb25zdCBIYXNoTWFwPFN0cmlu
ZywgU3RyaW5nPiYgdmFsdWVzLCBQYXNzUmVmUHRyPEZyYW1lPiBzb3VyY2VGcmFtZSkKK2lubGlu
ZSBGb3JtU3RhdGU6OkZvcm1TdGF0ZShQYXNzUmVmUHRyPEhUTUxGb3JtRWxlbWVudD4gZm9ybSwg
U3RyaW5nUGFpclZlY3RvciYgdGV4dEZpZWxkVmFsdWVzVG9BZG9wdCwgUGFzc1JlZlB0cjxGcmFt
ZT4gc291cmNlRnJhbWUpCisgICAgOiBtX2Zvcm0oZm9ybSkKKyAgICAsIG1fc291cmNlRnJhbWUo
c291cmNlRnJhbWUpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGb3JtU3RhdGUoZm9ybSwg
dmFsdWVzLCBzb3VyY2VGcmFtZSkpOworICAgIG1fdGV4dEZpZWxkVmFsdWVzLnN3YXAodGV4dEZp
ZWxkVmFsdWVzVG9BZG9wdCk7CiB9CiAKLUZvcm1TdGF0ZTo6Rm9ybVN0YXRlKFBhc3NSZWZQdHI8
SFRNTEZvcm1FbGVtZW50PiBmb3JtLCBjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYgdmFs
dWVzLCBQYXNzUmVmUHRyPEZyYW1lPiBzb3VyY2VGcmFtZSkKLSAgICA6IG1fZm9ybShmb3JtKQot
ICAgICwgbV92YWx1ZXModmFsdWVzKQotICAgICwgbV9zb3VyY2VGcmFtZShzb3VyY2VGcmFtZSkK
K1Bhc3NSZWZQdHI8Rm9ybVN0YXRlPiBGb3JtU3RhdGU6OmNyZWF0ZShQYXNzUmVmUHRyPEhUTUxG
b3JtRWxlbWVudD4gZm9ybSwgU3RyaW5nUGFpclZlY3RvciYgdGV4dEZpZWxkVmFsdWVzVG9BZG9w
dCwgUGFzc1JlZlB0cjxGcmFtZT4gc291cmNlRnJhbWUpCiB7CisgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBGb3JtU3RhdGUoZm9ybSwgdGV4dEZpZWxkVmFsdWVzVG9BZG9wdCwgc291cmNlRnJhbWUp
KTsKIH0KIAogfQpJbmRleDogV2ViQ29yZS9sb2FkZXIvRm9ybVN0YXRlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9sb2FkZXIvRm9ybVN0YXRlLmgJKHJldmlzaW9uIDQyMTUwKQorKysgV2ViQ29y
ZS9sb2FkZXIvRm9ybVN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksMjggKzI5
LDI4IEBACiAjaWZuZGVmIEZvcm1TdGF0ZV9oCiAjZGVmaW5lIEZvcm1TdGF0ZV9oCiAKLSNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKLSNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIEZyYW1lOwogICAgIGNsYXNzIEhUTUxGb3JtRWxlbWVu
dDsKIAorICAgIHR5cGVkZWYgVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4gPiBTdHJp
bmdQYWlyVmVjdG9yOworCiAgICAgY2xhc3MgRm9ybVN0YXRlIDogcHVibGljIFJlZkNvdW50ZWQ8
Rm9ybVN0YXRlPiB7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxGb3Jt
U3RhdGU+IGNyZWF0ZShQYXNzUmVmUHRyPEhUTUxGb3JtRWxlbWVudD4gZm9ybSwgY29uc3QgSGFz
aE1hcDxTdHJpbmcsIFN0cmluZz4mIHZhbHVlcywgUGFzc1JlZlB0cjxGcmFtZT4gc291cmNlRnJh
bWUpOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxGb3JtU3RhdGU+IGNyZWF0ZShQYXNzUmVm
UHRyPEhUTUxGb3JtRWxlbWVudD4sIFN0cmluZ1BhaXJWZWN0b3ImIHRleHRGaWVsZFZhbHVlc1Rv
QWRvcHQsIFBhc3NSZWZQdHI8RnJhbWU+KTsKIAogICAgICAgICBIVE1MRm9ybUVsZW1lbnQqIGZv
cm0oKSBjb25zdCB7IHJldHVybiBtX2Zvcm0uZ2V0KCk7IH0KLSAgICAgICAgY29uc3QgSGFzaE1h
cDxTdHJpbmcsIFN0cmluZz4mIHZhbHVlcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzOyB9Cisg
ICAgICAgIGNvbnN0IFN0cmluZ1BhaXJWZWN0b3ImIHRleHRGaWVsZFZhbHVlcygpIGNvbnN0IHsg
cmV0dXJuIG1fdGV4dEZpZWxkVmFsdWVzOyB9CiAgICAgICAgIEZyYW1lKiBzb3VyY2VGcmFtZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc291cmNlRnJhbWUuZ2V0KCk7IH0KIAogICAgIHByaXZhdGU6Ci0g
ICAgICAgIEZvcm1TdGF0ZShQYXNzUmVmUHRyPEhUTUxGb3JtRWxlbWVudD4gZm9ybSwgY29uc3Qg
SGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIHZhbHVlcywgUGFzc1JlZlB0cjxGcmFtZT4gc291cmNl
RnJhbWUpOworICAgICAgICBGb3JtU3RhdGUoUGFzc1JlZlB0cjxIVE1MRm9ybUVsZW1lbnQ+LCBT
dHJpbmdQYWlyVmVjdG9yJiB0ZXh0RmllbGRWYWx1ZXNUb0Fkb3B0LCBQYXNzUmVmUHRyPEZyYW1l
Pik7CiAKICAgICAgICAgUmVmUHRyPEhUTUxGb3JtRWxlbWVudD4gbV9mb3JtOwotICAgICAgICBI
YXNoTWFwPFN0cmluZywgU3RyaW5nPiBtX3ZhbHVlczsKKyAgICAgICAgU3RyaW5nUGFpclZlY3Rv
ciBtX3RleHRGaWVsZFZhbHVlczsKICAgICAgICAgUmVmUHRyPEZyYW1lPiBtX3NvdXJjZUZyYW1l
OwogICAgIH07CiAKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHJldmlzaW9uIDQyMTUwKQor
KysgV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDMs
NDUgKzE0MywyMiBAQCBzdGF0aWMgVVJMU2NoZW1lc01hcCYgbm9BY2Nlc3NTY2hlbWVzKCkKICAg
ICByZXR1cm4gbm9BY2Nlc3NTY2hlbWVzOwogfQogCi1zdHJ1Y3QgRm9ybVN1Ym1pc3Npb24gewot
ICAgIEZvcm1TdWJtaXNzaW9uKGNvbnN0IGNoYXIqIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB1cmws
IFBhc3NSZWZQdHI8Rm9ybURhdGE+IGZvcm1EYXRhLAotICAgICAgICAgICAgICAgICAgIGNvbnN0
IFN0cmluZyYgdGFyZ2V0LCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlLCBjb25zdCBTdHJpbmcm
IGJvdW5kYXJ5LAotICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50LCBi
b29sIGxvY2tIaXN0b3J5LCBib29sIGxvY2tCYWNrRm9yd2FyZExpc3QpCi0gICAgICAgIDogYWN0
aW9uKGFjdGlvbikKLSAgICAgICAgLCB1cmwodXJsKQotICAgICAgICAsIGZvcm1EYXRhKGZvcm1E
YXRhKQotICAgICAgICAsIHRhcmdldCh0YXJnZXQpCi0gICAgICAgICwgY29udGVudFR5cGUoY29u
dGVudFR5cGUpCi0gICAgICAgICwgYm91bmRhcnkoYm91bmRhcnkpCi0gICAgICAgICwgZXZlbnQo
ZXZlbnQpCi0gICAgICAgICwgbG9ja0hpc3RvcnkobG9ja0hpc3RvcnkpCi0gICAgICAgICwgbG9j
a0JhY2tGb3J3YXJkTGlzdChsb2NrQmFja0ZvcndhcmRMaXN0KQotICAgIHsKLSAgICB9Ci0KLSAg
ICBjb25zdCBjaGFyKiBhY3Rpb247Ci0gICAgU3RyaW5nIHVybDsKLSAgICBSZWZQdHI8Rm9ybURh
dGE+IGZvcm1EYXRhOwotICAgIFN0cmluZyB0YXJnZXQ7Ci0gICAgU3RyaW5nIGNvbnRlbnRUeXBl
OwotICAgIFN0cmluZyBib3VuZGFyeTsKLSAgICBSZWZQdHI8RXZlbnQ+IGV2ZW50OwotICAgIGJv
b2wgbG9ja0hpc3Rvcnk7Ci0gICAgYm9vbCBsb2NrQmFja0ZvcndhcmRMaXN0OwotfTsKLQogc3Ry
dWN0IFNjaGVkdWxlZFJlZGlyZWN0aW9uIHsKLSAgICBlbnVtIFR5cGUgeyByZWRpcmVjdGlvbiwg
bG9jYXRpb25DaGFuZ2UsIGhpc3RvcnlOYXZpZ2F0aW9uLCBsb2NhdGlvbkNoYW5nZUR1cmluZ0xv
YWQgfTsKKyAgICBlbnVtIFR5cGUgeyByZWRpcmVjdGlvbiwgbG9jYXRpb25DaGFuZ2UsIGhpc3Rv
cnlOYXZpZ2F0aW9uLCBmb3JtU3VibWlzc2lvbiB9OwogCiAgICAgY29uc3QgVHlwZSB0eXBlOwog
ICAgIGNvbnN0IGRvdWJsZSBkZWxheTsKICAgICBjb25zdCBTdHJpbmcgdXJsOwogICAgIGNvbnN0
IFN0cmluZyByZWZlcnJlcjsKKyAgICBjb25zdCBGcmFtZUxvYWRSZXF1ZXN0IGZyYW1lUmVxdWVz
dDsKKyAgICBjb25zdCBSZWZQdHI8RXZlbnQ+IGV2ZW50OworICAgIGNvbnN0IFJlZlB0cjxGb3Jt
U3RhdGU+IGZvcm1TdGF0ZTsKICAgICBjb25zdCBpbnQgaGlzdG9yeVN0ZXBzOwogICAgIGNvbnN0
IGJvb2wgbG9ja0hpc3Rvcnk7CiAgICAgY29uc3QgYm9vbCBsb2NrQmFja0ZvcndhcmRMaXN0Owog
ICAgIGNvbnN0IGJvb2wgd2FzVXNlckdlc3R1cmU7CiAgICAgY29uc3QgYm9vbCB3YXNSZWZyZXNo
OworICAgIGNvbnN0IGJvb2wgd2FzRHVyaW5nTG9hZDsKIAogICAgIFNjaGVkdWxlZFJlZGlyZWN0
aW9uKGRvdWJsZSBkZWxheSwgY29uc3QgU3RyaW5nJiB1cmwsIGJvb2wgbG9ja0hpc3RvcnksIGJv
b2wgbG9ja0JhY2tGb3J3YXJkTGlzdCwgYm9vbCB3YXNVc2VyR2VzdHVyZSwgYm9vbCByZWZyZXNo
KQogICAgICAgICA6IHR5cGUocmVkaXJlY3Rpb24pCkBAIC0xOTIsMTIgKzE2OSwxMyBAQCBzdHJ1
Y3QgU2NoZWR1bGVkUmVkaXJlY3Rpb24gewogICAgICAgICAsIGxvY2tCYWNrRm9yd2FyZExpc3Qo
bG9ja0JhY2tGb3J3YXJkTGlzdCkKICAgICAgICAgLCB3YXNVc2VyR2VzdHVyZSh3YXNVc2VyR2Vz
dHVyZSkKICAgICAgICAgLCB3YXNSZWZyZXNoKHJlZnJlc2gpCisgICAgICAgICwgd2FzRHVyaW5n
TG9hZChmYWxzZSkKICAgICB7CiAgICAgICAgIEFTU0VSVCghdXJsLmlzRW1wdHkoKSk7CiAgICAg
fQogCi0gICAgU2NoZWR1bGVkUmVkaXJlY3Rpb24oVHlwZSBsb2NhdGlvbkNoYW5nZVR5cGUsIGNv
bnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHJlZmVycmVyLCBib29sIGxvY2tIaXN0b3J5
LCBib29sIGxvY2tCYWNrRm9yd2FyZExpc3QsIGJvb2wgd2FzVXNlckdlc3R1cmUsIGJvb2wgcmVm
cmVzaCkKLSAgICAgICAgOiB0eXBlKGxvY2F0aW9uQ2hhbmdlVHlwZSkKKyAgICBTY2hlZHVsZWRS
ZWRpcmVjdGlvbihjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiByZWZlcnJlciwgYm9v
bCBsb2NrSGlzdG9yeSwgYm9vbCBsb2NrQmFja0ZvcndhcmRMaXN0LCBib29sIHdhc1VzZXJHZXN0
dXJlLCBib29sIHJlZnJlc2gsIGJvb2wgZHVyaW5nTG9hZCkKKyAgICAgICAgOiB0eXBlKGxvY2F0
aW9uQ2hhbmdlKQogICAgICAgICAsIGRlbGF5KDApCiAgICAgICAgICwgdXJsKHVybCkKICAgICAg
ICAgLCByZWZlcnJlcihyZWZlcnJlcikKQEAgLTIwNiw4ICsxODQsOCBAQCBzdHJ1Y3QgU2NoZWR1
bGVkUmVkaXJlY3Rpb24gewogICAgICAgICAsIGxvY2tCYWNrRm9yd2FyZExpc3QobG9ja0JhY2tG
b3J3YXJkTGlzdCkKICAgICAgICAgLCB3YXNVc2VyR2VzdHVyZSh3YXNVc2VyR2VzdHVyZSkKICAg
ICAgICAgLCB3YXNSZWZyZXNoKHJlZnJlc2gpCisgICAgICAgICwgd2FzRHVyaW5nTG9hZChkdXJp
bmdMb2FkKQogICAgIHsKLSAgICAgICAgQVNTRVJUKGxvY2F0aW9uQ2hhbmdlVHlwZSA9PSBsb2Nh
dGlvbkNoYW5nZSB8fCBsb2NhdGlvbkNoYW5nZVR5cGUgPT0gbG9jYXRpb25DaGFuZ2VEdXJpbmdM
b2FkKTsKICAgICAgICAgQVNTRVJUKCF1cmwuaXNFbXB0eSgpKTsKICAgICB9CiAKQEAgLTIxOSw3
ICsxOTcsMjcgQEAgc3RydWN0IFNjaGVkdWxlZFJlZGlyZWN0aW9uIHsKICAgICAgICAgLCBsb2Nr
QmFja0ZvcndhcmRMaXN0KGZhbHNlKQogICAgICAgICAsIHdhc1VzZXJHZXN0dXJlKGZhbHNlKQog
ICAgICAgICAsIHdhc1JlZnJlc2goZmFsc2UpCisgICAgICAgICwgd2FzRHVyaW5nTG9hZChmYWxz
ZSkKKyAgICB7CisgICAgfQorCisgICAgU2NoZWR1bGVkUmVkaXJlY3Rpb24oY29uc3QgRnJhbWVM
b2FkUmVxdWVzdCYgZnJhbWVSZXF1ZXN0LAorICAgICAgICAgICAgYm9vbCBsb2NrSGlzdG9yeSwg
Ym9vbCBsb2NrQmFja0ZvcndhcmRMaXN0LCBQYXNzUmVmUHRyPEV2ZW50PiBldmVudCwgUGFzc1Jl
ZlB0cjxGb3JtU3RhdGU+IGZvcm1TdGF0ZSwKKyAgICAgICAgICAgIGJvb2wgZHVyaW5nTG9hZCkK
KyAgICAgICAgOiB0eXBlKGZvcm1TdWJtaXNzaW9uKQorICAgICAgICAsIGRlbGF5KDApCisgICAg
ICAgICwgZnJhbWVSZXF1ZXN0KGZyYW1lUmVxdWVzdCkKKyAgICAgICAgLCBldmVudChldmVudCkK
KyAgICAgICAgLCBmb3JtU3RhdGUoZm9ybVN0YXRlKQorICAgICAgICAsIGhpc3RvcnlTdGVwcygw
KQorICAgICAgICAsIGxvY2tIaXN0b3J5KGxvY2tIaXN0b3J5KQorICAgICAgICAsIGxvY2tCYWNr
Rm9yd2FyZExpc3QobG9ja0JhY2tGb3J3YXJkTGlzdCkKKyAgICAgICAgLCB3YXNVc2VyR2VzdHVy
ZShmYWxzZSkKKyAgICAgICAgLCB3YXNSZWZyZXNoKGZhbHNlKQorICAgICAgICAsIHdhc0R1cmlu
Z0xvYWQoZHVyaW5nTG9hZCkKICAgICB7CisgICAgICAgIEFTU0VSVCghZnJhbWVSZXF1ZXN0Lmlz
RW1wdHkoKSk7CisgICAgICAgIEFTU0VSVCh0aGlzLT5mb3JtU3RhdGUpOwogICAgIH0KIH07CiAK
QEAgLTI3MSw3ICsyNjksNiBAQCBGcmFtZUxvYWRlcjo6RnJhbWVMb2FkZXIoRnJhbWUqIGZyYW1l
LCBGCiAgICAgLCBtX3F1aWNrUmVkaXJlY3RDb21pbmcoZmFsc2UpCiAgICAgLCBtX3NlbnRSZWRp
cmVjdE5vdGlmaWNhdGlvbihmYWxzZSkKICAgICAsIG1faW5TdG9wQWxsTG9hZGVycyhmYWxzZSkK
LSAgICAsIG1fbmF2aWdhdGlvbkR1cmluZ0xvYWQoZmFsc2UpCiAgICAgLCBtX2lzRXhlY3V0aW5n
SmF2YVNjcmlwdEZvcm1BY3Rpb24oZmFsc2UpCiAgICAgLCBtX2lzUnVubmluZ1NjcmlwdChmYWxz
ZSkKICAgICAsIG1fZGlkQ2FsbEltcGxpY2l0Q2xvc2UoZmFsc2UpCkBAIC0zNDcsNyArMzQ0LDcg
QEAgRnJhbWUqIEZyYW1lTG9hZGVyOjpjcmVhdGVXaW5kb3coRnJhbWVMbwogICAgICAgICBGcmFt
ZSogZnJhbWUgPSBmcmFtZUxvYWRlckZvckZyYW1lTG9va3VwLT5mcmFtZSgpLT50cmVlKCktPmZp
bmQocmVxdWVzdC5mcmFtZU5hbWUoKSk7CiAgICAgICAgIGlmIChmcmFtZSAmJiBzaG91bGRBbGxv
d05hdmlnYXRpb24oZnJhbWUpKSB7CiAgICAgICAgICAgICBpZiAoIXJlcXVlc3QucmVzb3VyY2VS
ZXF1ZXN0KCkudXJsKCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIGZyYW1lLT5sb2FkZXIo
KS0+bG9hZEZyYW1lUmVxdWVzdFdpdGhGb3JtQW5kVmFsdWVzKHJlcXVlc3QsIGZhbHNlLCBmYWxz
ZSwgMCwgMCwgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4oKSk7CisgICAgICAgICAgICAgICAgZnJh
bWUtPmxvYWRlcigpLT5sb2FkRnJhbWVSZXF1ZXN0KHJlcXVlc3QsIGZhbHNlLCBmYWxzZSwgMCwg
MCk7CiAgICAgICAgICAgICBpZiAoUGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCkpCiAgICAgICAg
ICAgICAgICAgcGFnZS0+Y2hyb21lKCktPmZvY3VzKCk7CiAgICAgICAgICAgICBjcmVhdGVkID0g
ZmFsc2U7CkBAIC00MzIsNyArNDI5LDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6dXJsU2VsZWN0ZWQo
Y29uc3QgUmVzbwogICAgICAgICBmcmFtZVJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0SFRU
UFJlZmVycmVyKG1fb3V0Z29pbmdSZWZlcnJlcik7CiAgICAgYWRkSFRUUE9yaWdpbklmTmVlZGVk
KGZyYW1lUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKSwgb3V0Z29pbmdPcmlnaW4oKSk7CiAKLSAg
ICBsb2FkRnJhbWVSZXF1ZXN0V2l0aEZvcm1BbmRWYWx1ZXMoZnJhbWVSZXF1ZXN0LCBsb2NrSGlz
dG9yeSwgbG9ja0JhY2tGb3J3YXJkTGlzdCwgdHJpZ2dlcmluZ0V2ZW50LCAwLCBIYXNoTWFwPFN0
cmluZywgU3RyaW5nPigpKTsKKyAgICBsb2FkRnJhbWVSZXF1ZXN0KGZyYW1lUmVxdWVzdCwgbG9j
a0hpc3RvcnksIGxvY2tCYWNrRm9yd2FyZExpc3QsIHRyaWdnZXJpbmdFdmVudCwgMCk7CiB9CiAK
IGJvb2wgRnJhbWVMb2FkZXI6OnJlcXVlc3RGcmFtZShIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93
bmVyRWxlbWVudCwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcsIGNvbnN0IEF0b21pY1N0cmluZyYg
ZnJhbWVOYW1lKQpAQCAtNDc5LDggKzQ3Niw3IEBAIEZyYW1lKiBGcmFtZUxvYWRlcjo6bG9hZFN1
YmZyYW1lKEhUTUxGcmEKICAgICB9CiAKICAgICBib29sIGhpZGVSZWZlcnJlciA9IHNob3VsZEhp
ZGVSZWZlcnJlcih1cmwsIHJlZmVycmVyKTsKLSAgICBSZWZQdHI8RnJhbWU+IGZyYW1lID0gbV9j
bGllbnQtPmNyZWF0ZUZyYW1lKHVybCwgbmFtZSwgb3duZXJFbGVtZW50LCBoaWRlUmVmZXJyZXIg
PyBTdHJpbmcoKSA6IHJlZmVycmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhbGxvd3NTY3JvbGxpbmcsIG1hcmdpbldpZHRoLCBtYXJnaW5IZWlnaHQpOworICAg
IFJlZlB0cjxGcmFtZT4gZnJhbWUgPSBtX2NsaWVudC0+Y3JlYXRlRnJhbWUodXJsLCBuYW1lLCBv
d25lckVsZW1lbnQsIGhpZGVSZWZlcnJlciA/IFN0cmluZygpIDogcmVmZXJyZXIsIGFsbG93c1Nj
cm9sbGluZywgbWFyZ2luV2lkdGgsIG1hcmdpbkhlaWdodCk7CiAKICAgICBpZiAoIWZyYW1lKSAg
ewogICAgICAgICBjaGVja0NhbGxJbXBsaWNpdENsb3NlKCk7CkBAIC01MTAsMjcgKzUwNiwyMCBA
QCBGcmFtZSogRnJhbWVMb2FkZXI6OmxvYWRTdWJmcmFtZShIVE1MRnJhCiAgICAgcmV0dXJuIGZy
YW1lLmdldCgpOwogfQogCi12b2lkIEZyYW1lTG9hZGVyOjpzdWJtaXRGb3JtQWdhaW4oKQotewot
ICAgIGlmIChtX2lzUnVubmluZ1NjcmlwdCkKLSAgICAgICAgcmV0dXJuOwotICAgIE93blB0cjxG
b3JtU3VibWlzc2lvbj4gZm9ybShtX2RlZmVycmVkRm9ybVN1Ym1pc3Npb24ucmVsZWFzZSgpKTsK
LSAgICBpZiAoIWZvcm0pCi0gICAgICAgIHJldHVybjsKLSAgICBzdWJtaXRGb3JtKGZvcm0tPmFj
dGlvbiwgZm9ybS0+dXJsLCBmb3JtLT5mb3JtRGF0YSwgZm9ybS0+dGFyZ2V0LCBmb3JtLT5jb250
ZW50VHlwZSwgZm9ybS0+Ym91bmRhcnksIGZvcm0tPmV2ZW50LmdldCgpLCBmb3JtLT5sb2NrSGlz
dG9yeSwgZm9ybS0+bG9ja0JhY2tGb3J3YXJkTGlzdCk7Ci19Ci0KIHZvaWQgRnJhbWVMb2FkZXI6
OnN1Ym1pdEZvcm0oY29uc3QgY2hhciogYWN0aW9uLCBjb25zdCBTdHJpbmcmIHVybCwgUGFzc1Jl
ZlB0cjxGb3JtRGF0YT4gZm9ybURhdGEsCi0gICAgY29uc3QgU3RyaW5nJiB0YXJnZXQsIGNvbnN0
IFN0cmluZyYgY29udGVudFR5cGUsIGNvbnN0IFN0cmluZyYgYm91bmRhcnksIFBhc3NSZWZQdHI8
RXZlbnQ+IGV2ZW50LCBib29sIGxvY2tIaXN0b3J5LCBib29sIGxvY2tCYWNrRm9yd2FyZExpc3Qp
CisgICAgY29uc3QgU3RyaW5nJiB0YXJnZXQsIGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUsIGNv
bnN0IFN0cmluZyYgYm91bmRhcnksCisgICAgYm9vbCBsb2NrSGlzdG9yeSwgYm9vbCBsb2NrQmFj
a0ZvcndhcmRMaXN0LCBQYXNzUmVmUHRyPEV2ZW50PiBldmVudCwgUGFzc1JlZlB0cjxGb3JtU3Rh
dGU+IGZvcm1TdGF0ZSkKIHsKKyAgICBBU1NFUlQoYWN0aW9uKTsKKyAgICBBU1NFUlQoc3RyY21w
KGFjdGlvbiwgIkdFVCIpID09IDAgfHwgc3RyY21wKGFjdGlvbiwgIlBPU1QiKSA9PSAwKTsKICAg
ICBBU1NFUlQoZm9ybURhdGEpOworICAgIEFTU0VSVChmb3JtU3RhdGUpOworICAgIEFTU0VSVChm
b3JtU3RhdGUtPnNvdXJjZUZyYW1lKCkgPT0gbV9mcmFtZSk7CiAgICAgCiAgICAgaWYgKCFtX2Zy
YW1lLT5wYWdlKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBLVVJMIHUgPSBjb21wbGV0
ZVVSTCh1cmwuaXNOdWxsKCkgPyAiIiA6IHVybCk7Ci0gICAgLy8gRklYTUU6IERvIHdlIHJlYWxs
eSBuZWVkIHRvIHNwZWNpYWwtY2FzZSBhbiBlbXB0eSBVUkw/Ci0gICAgLy8gV291bGQgaXQgYmUg
YmV0dGVyIHRvIGp1c3QgZ28gb24gd2l0aCB0aGUgZm9ybSBzdWJtaXNzb24gYW5kIGxldCB0aGUg
SS9PIGZhaWw/CiAgICAgaWYgKHUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTU0
MSwyNyArNTMwLDQ1IEBAIHZvaWQgRnJhbWVMb2FkZXI6OnN1Ym1pdEZvcm0oY29uc3QgY2hhcioK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChtX2lzUnVubmluZ1NjcmlwdCkgewot
ICAgICAgICBpZiAobV9kZWZlcnJlZEZvcm1TdWJtaXNzaW9uKQotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICBtX2RlZmVycmVkRm9ybVN1Ym1pc3Npb24uc2V0KG5ldyBGb3JtU3VibWlzc2lv
bihhY3Rpb24sIHVybCwgZm9ybURhdGEsIHRhcmdldCwgY29udGVudFR5cGUsIGJvdW5kYXJ5LCBl
dmVudCwgbG9ja0hpc3RvcnksIGxvY2tCYWNrRm9yd2FyZExpc3QpKTsKKyAgICBGcmFtZUxvYWRS
ZXF1ZXN0IGZyYW1lUmVxdWVzdDsKKworICAgIFN0cmluZyB0YXJnZXRPckJhc2VUYXJnZXQgPSB0
YXJnZXQuaXNFbXB0eSgpID8gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+YmFzZVRhcmdldCgpIDogdGFy
Z2V0OworICAgIEZyYW1lKiB0YXJnZXRGcmFtZSA9IGZpbmRGcmFtZUZvck5hdmlnYXRpb24odGFy
Z2V0T3JCYXNlVGFyZ2V0KTsKKyAgICBpZiAoIXRhcmdldEZyYW1lKSB7CisgICAgICAgIHRhcmdl
dEZyYW1lID0gbV9mcmFtZTsKKyAgICAgICAgZnJhbWVSZXF1ZXN0LnNldEZyYW1lTmFtZSh0YXJn
ZXRPckJhc2VUYXJnZXQpOworICAgIH0KKyAgICBpZiAoIXRhcmdldEZyYW1lLT5wYWdlKCkpCiAg
ICAgICAgIHJldHVybjsKKworICAgIC8vIEZJWE1FOiBXZSdkIGxpa2UgdG8gcmVtb3ZlIHRoaXMg
YWx0b2dldGhlciBhbmQgZml4IHRoZSBtdWx0aXBsZSBmb3JtIHN1Ym1pc3Npb24gaXNzdWUgYW5v
dGhlciB3YXkuCisKKyAgICAvLyBXZSBkbyBub3Qgd2FudCB0byBzdWJtaXQgbW9yZSB0aGFuIG9u
ZSBmb3JtIGZyb20gdGhlIHNhbWUgcGFnZSwgbm9yIGRvIHdlIHdhbnQgdG8gc3VibWl0IGEgc2lu
Z2xlCisgICAgLy8gZm9ybSBtb3JlIHRoYW4gb25jZS4gVGhpcyBmbGFnIHByZXZlbnRzIHRoZXNl
IGZyb20gaGFwcGVuaW5nOyBub3Qgc3VyZSBob3cgb3RoZXIgYnJvd3NlcnMgcHJldmVudCB0aGlz
LgorICAgIC8vIFRoZSBmbGFnIGlzIHJlc2V0IGluIGVhY2ggdGltZSB3ZSBzdGFydCBoYW5kbGUg
YSBuZXcgbW91c2Ugb3Iga2V5IGRvd24gZXZlbnQsIGFuZAorICAgIC8vIGFsc28gaW4gc2V0Vmll
dyBzaW5jZSB0aGlzIHBhcnQgbWF5IGdldCByZXVzZWQgZm9yIGEgcGFnZSBmcm9tIHRoZSBiYWNr
L2ZvcndhcmQgY2FjaGUuCisgICAgLy8gVGhlIGZvcm0gbXVsdGktc3VibWl0IGxvZ2ljIGhlcmUg
aXMgb25seSBuZWVkZWQgd2hlbiB3ZSBhcmUgc3VibWl0dGluZyBhIGZvcm0gdGhhdCBhZmZlY3Rz
IHRoaXMgZnJhbWUuCisKKyAgICAvLyBGSVhNRTogRnJhbWUgdGFyZ2V0aW5nIGlzIG9ubHkgb25l
IG9mIHRoZSB3YXlzIHRoZSBzdWJtaXNzaW9uIGNvdWxkIGVuZCB1cCBkb2luZyBzb21ldGhpbmcg
b3RoZXIKKyAgICAvLyB0aGFuIHJlcGxhY2luZyB0aGlzIGZyYW1lJ3MgY29udGVudCwgc28gdGhp
cyBjaGVjayBpcyBmbGF3ZWQuIE9uIHRoZSBvdGhlciBoYW5kLCB0aGUgY2hlY2sgaXMgaGFyZGx5
CisgICAgLy8gbmVlZGVkIGFueSBtb3JlIG5vdyB0aGF0IHdlIHJlc2V0IG1fc3VibWl0dGVkRm9y
bVVSTCBvbiBlYWNoIG1vdXNlIG9yIGtleSBkb3duIGV2ZW50LgorCisgICAgaWYgKG1fZnJhbWUt
PnRyZWUoKS0+aXNEZXNjZW5kYW50T2YodGFyZ2V0RnJhbWUpKSB7CisgICAgICAgIGlmIChtX3N1
Ym1pdHRlZEZvcm1VUkwgPT0gdSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV9zdWJt
aXR0ZWRGb3JtVVJMID0gdTsKICAgICB9CiAKICAgICBmb3JtRGF0YS0+Z2VuZXJhdGVGaWxlcyht
X2ZyYW1lLT5wYWdlKCktPmNocm9tZSgpLT5jbGllbnQoKSk7CiAgICAgCi0gICAgRnJhbWVMb2Fk
UmVxdWVzdCBmcmFtZVJlcXVlc3Q7Ci0KICAgICBpZiAoIW1fb3V0Z29pbmdSZWZlcnJlci5pc0Vt
cHR5KCkpCiAgICAgICAgIGZyYW1lUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRIVFRQUmVm
ZXJyZXIobV9vdXRnb2luZ1JlZmVycmVyKTsKIAotICAgIGZyYW1lUmVxdWVzdC5zZXRGcmFtZU5h
bWUodGFyZ2V0LmlzRW1wdHkoKSA/IG1fZnJhbWUtPmRvY3VtZW50KCktPmJhc2VUYXJnZXQoKSA6
IHRhcmdldCk7Ci0KICAgICBpZiAoc3RyY21wKGFjdGlvbiwgIkdFVCIpID09IDApCiAgICAgICAg
IHUuc2V0UXVlcnkoZm9ybURhdGEtPmZsYXR0ZW5Ub1N0cmluZygpKTsKICAgICBlbHNlIHsKICAg
ICAgICAgZnJhbWVSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldEhUVFBNZXRob2QoIlBPU1Qi
KTsKLSAgICAgICAgZnJhbWVSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldEhUVFBCb2R5KGZv
cm1EYXRhLmdldCgpKTsKKyAgICAgICAgZnJhbWVSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNl
dEhUVFBCb2R5KGZvcm1EYXRhKTsKIAogICAgICAgICAvLyBjb25zdHJ1Y3Qgc29tZSB1c2VyIGhl
YWRlcnMgaWYgbmVjZXNzYXJ5CiAgICAgICAgIGlmIChjb250ZW50VHlwZS5pc051bGwoKSB8fCBj
b250ZW50VHlwZSA9PSAiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIikKQEAgLTU3
Myw3ICs1ODAsMjEgQEAgdm9pZCBGcmFtZUxvYWRlcjo6c3VibWl0Rm9ybShjb25zdCBjaGFyKgog
ICAgIGZyYW1lUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRVUkwodSk7CiAgICAgYWRkSFRU
UE9yaWdpbklmTmVlZGVkKGZyYW1lUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKSwgb3V0Z29pbmdP
cmlnaW4oKSk7CiAKLSAgICBzdWJtaXRGb3JtKGZyYW1lUmVxdWVzdCwgZXZlbnQsIGxvY2tIaXN0
b3J5LCBsb2NrQmFja0ZvcndhcmRMaXN0KTsKKyAgICAvLyBOYXZpZ2F0aW9uIG9mIGEgc3ViZnJh
bWUgZHVyaW5nIGxvYWRpbmcgb2YgdGhlIG1haW4gZnJhbWUgZG9lcyBub3QgY3JlYXRlIGEgbmV3
IGJhY2svZm9yd2FyZCBpdGVtLgorICAgIC8vIFN0cmFuZ2VseSwgd2Ugb25seSBpbXBsZW1lbnQg
dGhpcyBydWxlIGZvciBmb3JtIHN1Ym1pc3Npb247IHRpbWUgd2lsbCB0ZWxsIGlmIHdlIG5lZWQg
aXQgZm9yIG90aGVyIHR5cGVzIG9mIG5hdmlnYXRpb24uCisgICAgLy8gVGhlIGRlZmluaXRpb24g
b2YgImR1cmluZyBsb2FkIiBpcyBhbnkgdGltZSBiZWZvcmUgdGhlIGxvYWQgZXZlbnQgaGFzIGJl
ZW4gaGFuZGxlZC4KKyAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE0OTU3IGZvciB0aGUgb3JpZ2luYWwgbW90aXZhdGlvbiBmb3IgdGhpcy4KKyAgICBp
ZiAoUGFnZSogdGFyZ2V0UGFnZSA9IHRhcmdldEZyYW1lLT5wYWdlKCkpIHsKKyAgICAgICAgRnJh
bWUqIG1haW5GcmFtZSA9IHRhcmdldFBhZ2UtPm1haW5GcmFtZSgpOworICAgICAgICBpZiAobWFp
bkZyYW1lICE9IHRhcmdldEZyYW1lKSB7CisgICAgICAgICAgICBIVE1MRnJhbWVPd25lckVsZW1l
bnQqIG93bmVyID0gdGFyZ2V0RnJhbWUtPm93bmVyRWxlbWVudCgpOworICAgICAgICAgICAgRG9j
dW1lbnQqIGRvY3VtZW50ID0gbWFpbkZyYW1lLT5kb2N1bWVudCgpOworICAgICAgICAgICAgaWYg
KG93bmVyICYmICFvd25lci0+Y3JlYXRlZEJ5UGFyc2VyKCkgJiYgKCFtYWluRnJhbWUtPmxvYWRl
cigpLT5pc0NvbXBsZXRlKCkgfHwgZG9jdW1lbnQgJiYgZG9jdW1lbnQtPnByb2Nlc3NpbmdMb2Fk
RXZlbnQoKSkpCisgICAgICAgICAgICAgICAgbG9ja0JhY2tGb3J3YXJkTGlzdCA9IHRydWU7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICB0YXJnZXRGcmFtZS0+bG9hZGVyKCktPnNjaGVkdWxlRm9y
bVN1Ym1pc3Npb24oZnJhbWVSZXF1ZXN0LCBsb2NrSGlzdG9yeSwgbG9ja0JhY2tGb3J3YXJkTGlz
dCwgZXZlbnQsIGZvcm1TdGF0ZSk7CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXI6OnN0b3BMb2FkaW5n
KGJvb2wgc2VuZFVubG9hZCkKQEAgLTY4NCwxMCArNzA1LDExIEBAIEtVUkwgRnJhbWVMb2FkZXI6
Omljb25VUkwoKQogCiBib29sIEZyYW1lTG9hZGVyOjpkaWRPcGVuVVJMKGNvbnN0IEtVUkwmIHVy
bCkKIHsKLSAgICBpZiAobV9zY2hlZHVsZWRSZWRpcmVjdGlvbiAmJiBtX3NjaGVkdWxlZFJlZGly
ZWN0aW9uLT50eXBlID09IFNjaGVkdWxlZFJlZGlyZWN0aW9uOjpsb2NhdGlvbkNoYW5nZUR1cmlu
Z0xvYWQpCisgICAgaWYgKG1fc2NoZWR1bGVkUmVkaXJlY3Rpb24gJiYgbV9zY2hlZHVsZWRSZWRp
cmVjdGlvbi0+d2FzRHVyaW5nTG9hZCkgewogICAgICAgICAvLyBBIHJlZGlyZWN0IHdhcyBzY2hl
ZHVsZWQgYmVmb3JlIHRoZSBkb2N1bWVudCB3YXMgY3JlYXRlZC4KICAgICAgICAgLy8gVGhpcyBj
YW4gaGFwcGVuIHdoZW4gb25lIGZyYW1lIGNoYW5nZXMgYW5vdGhlciBmcmFtZSdzIGxvY2F0aW9u
LgogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCiAgICAgY2FuY2VsUmVkaXJlY3Rpb24o
KTsKICAgICBtX2ZyYW1lLT5lZGl0b3IoKS0+Y2xlYXJMYXN0RWRpdENvbW1hbmQoKTsKQEAgLTc3
NSw3ICs3OTcsNiBAQCBTY3JpcHRWYWx1ZSBGcmFtZUxvYWRlcjo6ZXhlY3V0ZVNjcmlwdChjCiAK
ICAgICBpZiAoIXdhc1J1bm5pbmdTY3JpcHQpIHsKICAgICAgICAgbV9pc1J1bm5pbmdTY3JpcHQg
PSBmYWxzZTsKLSAgICAgICAgc3VibWl0Rm9ybUFnYWluKCk7CiAgICAgICAgIERvY3VtZW50Ojp1
cGRhdGVEb2N1bWVudHNSZW5kZXJpbmcoKTsKICAgICB9CiAKQEAgLTEzNDksMTggKzEzNzAsMjMg
QEAgdm9pZCBGcmFtZUxvYWRlcjo6c2NoZWR1bGVMb2NhdGlvbkNoYW5nZQogICAgIC8vIFRoaXMg
bWF5IGhhcHBlbiB3aGVuIGEgZnJhbWUgY2hhbmdlcyB0aGUgbG9jYXRpb24gb2YgYW5vdGhlciBm
cmFtZS4KICAgICBib29sIGR1cmluZ0xvYWQgPSAhbV9jb21taXR0ZWRGaXJzdFJlYWxEb2N1bWVu
dExvYWQ7CiAKLSAgICAvLyBJZiBhIHJlZGlyZWN0IHdhcyBzY2hlZHVsZWQgZHVyaW5nIGEgbG9h
ZCwgdGhlbiBzdG9wIHRoZSBjdXJyZW50IGxvYWQuCi0gICAgLy8gT3RoZXJ3aXNlIHdoZW4gdGhl
IGN1cnJlbnQgbG9hZCB0cmFuc2l0aW9ucyBmcm9tIGEgcHJvdmlzaW9uYWwgdG8gYSAKLSAgICAv
LyBjb21taXR0ZWQgc3RhdGUsIHBlbmRpbmcgcmVkaXJlY3RzIG1heSBiZSBjYW5jZWxsZWQuIAot
ICAgIGlmIChkdXJpbmdMb2FkKSB7Ci0gICAgICAgIGlmIChtX3Byb3Zpc2lvbmFsRG9jdW1lbnRM
b2FkZXIpCi0gICAgICAgICAgICBtX3Byb3Zpc2lvbmFsRG9jdW1lbnRMb2FkZXItPnN0b3BMb2Fk
aW5nKCk7Ci0gICAgICAgIHN0b3BMb2FkaW5nKHRydWUpOyAgIAotICAgIH0KKyAgICBzY2hlZHVs
ZVJlZGlyZWN0aW9uKG5ldyBTY2hlZHVsZWRSZWRpcmVjdGlvbih1cmwsIHJlZmVycmVyLCBsb2Nr
SGlzdG9yeSwgbG9ja0JhY2tGb3J3YXJkTGlzdCwgd2FzVXNlckdlc3R1cmUsIGZhbHNlLCBkdXJp
bmdMb2FkKSk7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXI6OnNjaGVkdWxlRm9ybVN1Ym1pc3Npb24o
Y29uc3QgRnJhbWVMb2FkUmVxdWVzdCYgZnJhbWVSZXF1ZXN0LAorICAgIGJvb2wgbG9ja0hpc3Rv
cnksIGJvb2wgbG9ja0JhY2tGb3J3YXJkTGlzdCwgUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQsIFBh
c3NSZWZQdHI8Rm9ybVN0YXRlPiBmb3JtU3RhdGUpCit7CisgICAgQVNTRVJUKG1fZnJhbWUtPnBh
Z2UoKSk7CisgICAgQVNTRVJUKCFmcmFtZVJlcXVlc3QuaXNFbXB0eSgpKTsKKworICAgIC8vIEZJ
WE1FOiBEbyB3ZSBuZWVkIHNwZWNpYWwgaGFuZGxpbmcgZm9yIGZvcm0gc3VibWlzc2lvbnMgd2hl
cmUgdGhlIFVSTCBpcyB0aGUgc2FtZQorICAgIC8vIGFzIHRoZSBjdXJyZW50IG9uZSBleGNlcHQg
Zm9yIHRoZSBmcmFnbWVudCBwYXJ0PyBTZWUgc2NoZWR1bGVMb2NhdGlvbkNoYW5nZSBhYm92ZS4K
KworICAgIC8vIEhhbmRsZSBhIGxvY2F0aW9uIGNoYW5nZSBvZiBhIHBhZ2Ugd2l0aCBubyBkb2N1
bWVudCBhcyBhIHNwZWNpYWwgY2FzZS4KKyAgICAvLyBUaGlzIG1heSBoYXBwZW4gd2hlbiBhIGZy
YW1lIGNoYW5nZXMgdGhlIGxvY2F0aW9uIG9mIGFub3RoZXIgZnJhbWUuCisgICAgYm9vbCBkdXJp
bmdMb2FkID0gIW1fY29tbWl0dGVkRmlyc3RSZWFsRG9jdW1lbnRMb2FkOwogCi0gICAgU2NoZWR1
bGVkUmVkaXJlY3Rpb246OlR5cGUgdHlwZSA9IGR1cmluZ0xvYWQKLSAgICAgICAgPyBTY2hlZHVs
ZWRSZWRpcmVjdGlvbjo6bG9jYXRpb25DaGFuZ2VEdXJpbmdMb2FkIDogU2NoZWR1bGVkUmVkaXJl
Y3Rpb246OmxvY2F0aW9uQ2hhbmdlOwotICAgIHNjaGVkdWxlUmVkaXJlY3Rpb24obmV3IFNjaGVk
dWxlZFJlZGlyZWN0aW9uKHR5cGUsIHVybCwgcmVmZXJyZXIsIGxvY2tIaXN0b3J5LCBsb2NrQmFj
a0ZvcndhcmRMaXN0LCB3YXNVc2VyR2VzdHVyZSwgZmFsc2UpKTsKKyAgICBzY2hlZHVsZVJlZGly
ZWN0aW9uKG5ldyBTY2hlZHVsZWRSZWRpcmVjdGlvbihmcmFtZVJlcXVlc3QsIGxvY2tIaXN0b3J5
LCBsb2NrQmFja0ZvcndhcmRMaXN0LCBldmVudCwgZm9ybVN0YXRlLCBkdXJpbmdMb2FkKSk7CiB9
CiAKIHZvaWQgRnJhbWVMb2FkZXI6OnNjaGVkdWxlUmVmcmVzaChib29sIHdhc1VzZXJHZXN0dXJl
KQpAQCAtMTM3MSw4ICsxMzk3LDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6c2NoZWR1bGVSZWZyZXNo
KGJvb2wgdwogICAgIGlmIChtX1VSTC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IFNjaGVkdWxlZFJlZGlyZWN0aW9uOjpUeXBlIHR5cGUgPSBTY2hlZHVsZWRSZWRpcmVjdGlvbjo6
bG9jYXRpb25DaGFuZ2U7Ci0gICAgc2NoZWR1bGVSZWRpcmVjdGlvbihuZXcgU2NoZWR1bGVkUmVk
aXJlY3Rpb24odHlwZSwgbV9VUkwuc3RyaW5nKCksIG1fb3V0Z29pbmdSZWZlcnJlciwgdHJ1ZSwg
dHJ1ZSwgd2FzVXNlckdlc3R1cmUsIHRydWUpKTsKKyAgICBzY2hlZHVsZVJlZGlyZWN0aW9uKG5l
dyBTY2hlZHVsZWRSZWRpcmVjdGlvbihtX1VSTC5zdHJpbmcoKSwgbV9vdXRnb2luZ1JlZmVycmVy
LCB0cnVlLCB0cnVlLCB3YXNVc2VyR2VzdHVyZSwgdHJ1ZSwgZmFsc2UpKTsKIH0KIAogYm9vbCBG
cmFtZUxvYWRlcjo6aXNMb2NhdGlvbkNoYW5nZShjb25zdCBTY2hlZHVsZWRSZWRpcmVjdGlvbiYg
cmVkaXJlY3Rpb24pCkBAIC0xMzgyLDcgKzE0MDcsNyBAQCBib29sIEZyYW1lTG9hZGVyOjppc0xv
Y2F0aW9uQ2hhbmdlKGNvbnN0CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGNh
c2UgU2NoZWR1bGVkUmVkaXJlY3Rpb246Omhpc3RvcnlOYXZpZ2F0aW9uOgogICAgICAgICBjYXNl
IFNjaGVkdWxlZFJlZGlyZWN0aW9uOjpsb2NhdGlvbkNoYW5nZToKLSAgICAgICAgY2FzZSBTY2hl
ZHVsZWRSZWRpcmVjdGlvbjo6bG9jYXRpb25DaGFuZ2VEdXJpbmdMb2FkOgorICAgICAgICBjYXNl
IFNjaGVkdWxlZFJlZGlyZWN0aW9uOjpmb3JtU3VibWlzc2lvbjoKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTE0NTQsOCArMTQ3
OSw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6OnJlZGlyZWN0aW9uVGltZXJGaXJlZCgKICAgICBzd2l0
Y2ggKHJlZGlyZWN0aW9uLT50eXBlKSB7CiAgICAgICAgIGNhc2UgU2NoZWR1bGVkUmVkaXJlY3Rp
b246OnJlZGlyZWN0aW9uOgogICAgICAgICBjYXNlIFNjaGVkdWxlZFJlZGlyZWN0aW9uOjpsb2Nh
dGlvbkNoYW5nZToKLSAgICAgICAgY2FzZSBTY2hlZHVsZWRSZWRpcmVjdGlvbjo6bG9jYXRpb25D
aGFuZ2VEdXJpbmdMb2FkOgotICAgICAgICAgICAgY2hhbmdlTG9jYXRpb24oY29tcGxldGVVUkwo
cmVkaXJlY3Rpb24tPnVybCksIHJlZGlyZWN0aW9uLT5yZWZlcnJlciwKKyAgICAgICAgICAgIGNo
YW5nZUxvY2F0aW9uKEtVUkwocmVkaXJlY3Rpb24tPnVybCksIHJlZGlyZWN0aW9uLT5yZWZlcnJl
ciwKICAgICAgICAgICAgICAgICByZWRpcmVjdGlvbi0+bG9ja0hpc3RvcnksIHJlZGlyZWN0aW9u
LT5sb2NrQmFja0ZvcndhcmRMaXN0LCByZWRpcmVjdGlvbi0+d2FzVXNlckdlc3R1cmUsIHJlZGly
ZWN0aW9uLT53YXNSZWZyZXNoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2FzZSBT
Y2hlZHVsZWRSZWRpcmVjdGlvbjo6aGlzdG9yeU5hdmlnYXRpb246CkBAIC0xNDY4LDE3ICsxNDky
LDIxIEBAIHZvaWQgRnJhbWVMb2FkZXI6OnJlZGlyZWN0aW9uVGltZXJGaXJlZCgKICAgICAgICAg
ICAgIC8vIGluIGJvdGggSUUgYW5kIE5TIChidXQgbm90IGluIE1vemlsbGEpLiBXZSBjYW4ndCBl
YXNpbHkgZG8gdGhhdC4KICAgICAgICAgICAgIGdvQmFja09yRm9yd2FyZChyZWRpcmVjdGlvbi0+
aGlzdG9yeVN0ZXBzKTsKICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBTY2hlZHVs
ZWRSZWRpcmVjdGlvbjo6Zm9ybVN1Ym1pc3Npb246CisgICAgICAgICAgICAvLyBUaGUgc3VibWl0
Rm9ybSBmdW5jdGlvbiB3aWxsIGZpbmQgYSB0YXJnZXQgZnJhbWUgYmVmb3JlIHVzaW5nIHRoZSBy
ZWRpcmVjdGlvbiB0aW1lci4KKyAgICAgICAgICAgIC8vIE5vdyB0aGF0IHRoZSB0aW1lciBoYXMg
ZmlyZWQsIHdlIG5lZWQgdG8gcmVwZWF0IHRoZSBzZWN1cml0eSBjaGVjayB3aGljaCBub3JtYWxs
eSBpcyBkb25lIHdoZW4KKyAgICAgICAgICAgIC8vIHNlbGVjdGluZyBhIHRhcmdldCwgaW4gY2Fz
ZSBjb25kaXRpb25zIGhhdmUgY2hhbmdlZC4gT3RoZXIgY29kZSBwYXRocyBhdm9pZCB0aGlzIGJ5
IHRhcmdldGluZworICAgICAgICAgICAgLy8gd2l0aG91dCBsZWF2aW5nIGEgdGltZSB3aW5kb3cu
IElmIHdlIGZhaWwgdGhlIGNoZWNrIGp1c3Qgc2lsZW50bHkgZHJvcCB0aGUgZm9ybSBzdWJtaXNz
aW9uLgorICAgICAgICAgICAgaWYgKCFyZWRpcmVjdGlvbi0+Zm9ybVN0YXRlLT5zb3VyY2VGcmFt
ZSgpLT5sb2FkZXIoKS0+c2hvdWxkQWxsb3dOYXZpZ2F0aW9uKG1fZnJhbWUpKQorICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGxvYWRGcmFtZVJlcXVlc3QocmVkaXJlY3Rpb24t
PmZyYW1lUmVxdWVzdCwgcmVkaXJlY3Rpb24tPmxvY2tIaXN0b3J5LCByZWRpcmVjdGlvbi0+bG9j
a0JhY2tGb3J3YXJkTGlzdCwKKyAgICAgICAgICAgICAgICByZWRpcmVjdGlvbi0+ZXZlbnQsIHJl
ZGlyZWN0aW9uLT5mb3JtU3RhdGUpOworICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi0vKgotICAgIEluIHRoZSBjYXNlIG9mIHNhdmlu
ZyBzdGF0ZSBhYm91dCBhIHBhZ2Ugd2l0aCBmcmFtZXMsIHdlIHN0b3JlIGEgdHJlZSBvZiBpdGVt
cyB0aGF0IG1pcnJvcnMgdGhlIGZyYW1lIHRyZWUuICAKLSAgICBUaGUgaXRlbSB0aGF0IHdhcyB0
aGUgdGFyZ2V0IG9mIHRoZSB1c2VyJ3MgbmF2aWdhdGlvbiBpcyBkZXNpZ25hdGVkIGFzIHRoZSAi
dGFyZ2V0SXRlbSIuICAKLSAgICBXaGVuIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aXRoIGRvQ2xp
cD1ZRVMgd2UncmUgYWJsZSB0byBjcmVhdGUgdGhlIHdob2xlIHRyZWUgZXhjZXB0IGZvciB0aGUg
dGFyZ2V0J3MgY2hpbGRyZW4sIAotICAgIHdoaWNoIHdpbGwgYmUgbG9hZGVkIGluIHRoZSBmdXR1
cmUuICBUaGF0IHBhcnQgb2YgdGhlIHRyZWUgd2lsbCBiZSBmaWxsZWQgb3V0IGFzIHRoZSBjaGls
ZCBsb2FkcyBhcmUgY29tbWl0dGVkLgotKi8KIHZvaWQgRnJhbWVMb2FkZXI6OmxvYWRVUkxJbnRv
Q2hpbGRGcmFtZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgcmVmZXJlciwgRnJhbWUq
IGNoaWxkRnJhbWUpCiB7CiAgICAgQVNTRVJUKGNoaWxkRnJhbWUpOwpAQCAtMTQ5Miw3ICsxNTIw
LDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6bG9hZFVSTEludG9DaGlsZEZyYW1lKAogICAgIC8vIElm
IHdlJ3JlIG1vdmluZyBpbiB0aGUgYmFjay9mb3J3YXJkIGxpc3QsIHdlIG1pZ2h0IHdhbnQgdG8g
cmVwbGFjZSB0aGUgY29udGVudAogICAgIC8vIG9mIHRoaXMgY2hpbGQgZnJhbWUgd2l0aCB3aGF0
ZXZlciB3YXMgdGhlcmUgYXQgdGhhdCBwb2ludC4KICAgICBpZiAocGFyZW50SXRlbSAmJiBwYXJl
bnRJdGVtLT5jaGlsZHJlbigpLnNpemUoKSAmJiBpc0JhY2tGb3J3YXJkTG9hZFR5cGUobG9hZFR5
cGUpKSB7Ci0gICAgICAgIEhpc3RvcnlJdGVtKiBjaGlsZEl0ZW0gPSBwYXJlbnRJdGVtLT5jaGls
ZEl0ZW1XaXRoTmFtZShjaGlsZEZyYW1lLT50cmVlKCktPm5hbWUoKSk7CisgICAgICAgIEhpc3Rv
cnlJdGVtKiBjaGlsZEl0ZW0gPSBwYXJlbnRJdGVtLT5jaGlsZEl0ZW1XaXRoVGFyZ2V0KGNoaWxk
RnJhbWUtPnRyZWUoKS0+bmFtZSgpKTsKICAgICAgICAgaWYgKGNoaWxkSXRlbSkgewogICAgICAg
ICAgICAgLy8gVXNlIHRoZSBvcmlnaW5hbCBVUkwgdG8gZW5zdXJlIHdlIGdldCBhbGwgdGhlIHNp
ZGUtZWZmZWN0cywgc3VjaCBhcwogICAgICAgICAgICAgLy8gb25Mb2FkIGhhbmRsZXJzLCBvZiBh
bnkgcmVkaXJlY3RzIHRoYXQgaGFwcGVuZWQuIEFuIGV4YW1wbGUgb2Ygd2hlcmUKQEAgLTE2OTgs
MjIgKzE3MjYsNiBAQCBib29sIEZyYW1lTG9hZGVyOjpsb2FkUGx1Z2luKFJlbmRlclBhcnQqCiAg
ICAgcmV0dXJuIHdpZGdldCAhPSAwOwogfQogCi12b2lkIEZyYW1lTG9hZGVyOjpjbGVhclJlY29y
ZGVkRm9ybVZhbHVlcygpCi17Ci0gICAgbV9mb3JtQWJvdXRUb0JlU3VibWl0dGVkID0gMDsKLSAg
ICBtX2Zvcm1WYWx1ZXNBYm91dFRvQmVTdWJtaXR0ZWQuY2xlYXIoKTsKLX0KLQotdm9pZCBGcmFt
ZUxvYWRlcjo6c2V0Rm9ybUFib3V0VG9CZVN1Ym1pdHRlZChQYXNzUmVmUHRyPEhUTUxGb3JtRWxl
bWVudD4gZWxlbWVudCkKLXsKLSAgICBtX2Zvcm1BYm91dFRvQmVTdWJtaXR0ZWQgPSBlbGVtZW50
OwotfQotCi12b2lkIEZyYW1lTG9hZGVyOjpyZWNvcmRGb3JtVmFsdWUoY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIG1fZm9ybVZhbHVlc0Fib3V0VG9CZVN1
Ym1pdHRlZC5zZXQobmFtZSwgdmFsdWUpOwotfQotCiB2b2lkIEZyYW1lTG9hZGVyOjpwYXJlbnRD
b21wbGV0ZWQoKQogewogICAgIGlmIChtX3NjaGVkdWxlZFJlZGlyZWN0aW9uICYmICFtX3JlZGly
ZWN0aW9uVGltZXIuaXNBY3RpdmUoKSkKQEAgLTE3NjgsMTcgKzE3ODAsNyBAQCB2b2lkIEZyYW1l
TG9hZGVyOjpoYW5kbGVGYWxsYmFja0NvbnRlbnQoCiB9CiAKIHZvaWQgRnJhbWVMb2FkZXI6OnBy
b3Zpc2lvbmFsTG9hZFN0YXJ0ZWQoKQotewotICAgIFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLT5wYWdl
KCk7Ci0gICAgCi0gICAgLy8gdGhpcyBpcyB1c2VkIHRvIHVwZGF0ZSB0aGUgY3VycmVudCBoaXN0
b3J5IGl0ZW0KLSAgICAvLyBpbiB0aGUgZXZlbnQgb2YgYSBuYXZpZ2F0aW9uIGF5dGltZSBkdXJp
bmcgbG9hZGluZwotICAgIG1fbmF2aWdhdGlvbkR1cmluZ0xvYWQgPSBmYWxzZTsKLSAgICBpZiAo
cGFnZSkgewotICAgICAgICBEb2N1bWVudCAqZG9jdW1lbnQgPSBwYWdlLT5tYWluRnJhbWUoKS0+
ZG9jdW1lbnQoKTsKLSAgICAgICAgbV9uYXZpZ2F0aW9uRHVyaW5nTG9hZCA9ICFwYWdlLT5tYWlu
RnJhbWUoKS0+bG9hZGVyKCktPmlzQ29tcGxldGUoKSB8fCAoZG9jdW1lbnQgJiYgZG9jdW1lbnQt
PnByb2Nlc3NpbmdMb2FkRXZlbnQoKSk7Ci0gICAgfQotICAgIAoreyAgICAKICAgICBtX2ZpcnN0
TGF5b3V0RG9uZSA9IGZhbHNlOwogICAgIGNhbmNlbFJlZGlyZWN0aW9uKHRydWUpOwogICAgIG1f
Y2xpZW50LT5wcm92aXNpb25hbExvYWRTdGFydGVkKCk7CkBAIC0yMDQ4LDYgKzIwNTAsMTUgQEAg
dm9pZCBGcmFtZUxvYWRlcjo6c2NoZWR1bGVSZWRpcmVjdGlvbihTYwogewogICAgIEFTU0VSVCht
X2ZyYW1lLT5wYWdlKCkpOwogCisgICAgLy8gSWYgYSByZWRpcmVjdCB3YXMgc2NoZWR1bGVkIGR1
cmluZyBhIGxvYWQsIHRoZW4gc3RvcCB0aGUgY3VycmVudCBsb2FkLgorICAgIC8vIE90aGVyd2lz
ZSB3aGVuIHRoZSBjdXJyZW50IGxvYWQgdHJhbnNpdGlvbnMgZnJvbSBhIHByb3Zpc2lvbmFsIHRv
IGEgCisgICAgLy8gY29tbWl0dGVkIHN0YXRlLCBwZW5kaW5nIHJlZGlyZWN0cyBtYXkgYmUgY2Fu
Y2VsbGVkLiAKKyAgICBpZiAocmVkaXJlY3Rpb24tPndhc0R1cmluZ0xvYWQpIHsKKyAgICAgICAg
aWYgKG1fcHJvdmlzaW9uYWxEb2N1bWVudExvYWRlcikKKyAgICAgICAgICAgIG1fcHJvdmlzaW9u
YWxEb2N1bWVudExvYWRlci0+c3RvcExvYWRpbmcoKTsKKyAgICAgICAgc3RvcExvYWRpbmcodHJ1
ZSk7ICAgCisgICAgfQorCiAgICAgc3RvcFJlZGlyZWN0aW9uVGltZXIoKTsKICAgICBtX3NjaGVk
dWxlZFJlZGlyZWN0aW9uLnNldChyZWRpcmVjdGlvbik7CiAgICAgaWYgKCFtX2lzQ29tcGxldGUg
JiYgcmVkaXJlY3Rpb24tPnR5cGUgIT0gU2NoZWR1bGVkUmVkaXJlY3Rpb246OnJlZGlyZWN0aW9u
KQpAQCAtMjA2NSwxNCArMjA3NiwxNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpzdGFydFJlZGlyZWN0
aW9uVGltZXIoCiAgICAgbV9yZWRpcmVjdGlvblRpbWVyLnN0YXJ0T25lU2hvdChtX3NjaGVkdWxl
ZFJlZGlyZWN0aW9uLT5kZWxheSk7CiAKICAgICBzd2l0Y2ggKG1fc2NoZWR1bGVkUmVkaXJlY3Rp
b24tPnR5cGUpIHsKLSAgICAgICAgY2FzZSBTY2hlZHVsZWRSZWRpcmVjdGlvbjo6cmVkaXJlY3Rp
b246CiAgICAgICAgIGNhc2UgU2NoZWR1bGVkUmVkaXJlY3Rpb246OmxvY2F0aW9uQ2hhbmdlOgot
ICAgICAgICBjYXNlIFNjaGVkdWxlZFJlZGlyZWN0aW9uOjpsb2NhdGlvbkNoYW5nZUR1cmluZ0xv
YWQ6CisgICAgICAgIGNhc2UgU2NoZWR1bGVkUmVkaXJlY3Rpb246OnJlZGlyZWN0aW9uOgogICAg
ICAgICAgICAgY2xpZW50UmVkaXJlY3RlZChLVVJMKG1fc2NoZWR1bGVkUmVkaXJlY3Rpb24tPnVy
bCksCiAgICAgICAgICAgICAgICAgbV9zY2hlZHVsZWRSZWRpcmVjdGlvbi0+ZGVsYXksCiAgICAg
ICAgICAgICAgICAgY3VycmVudFRpbWUoKSArIG1fcmVkaXJlY3Rpb25UaW1lci5uZXh0RmlyZUlu
dGVydmFsKCksCi0gICAgICAgICAgICAgICAgbV9zY2hlZHVsZWRSZWRpcmVjdGlvbi0+bG9ja0Jh
Y2tGb3J3YXJkTGlzdCwKLSAgICAgICAgICAgICAgICBtX2lzRXhlY3V0aW5nSmF2YVNjcmlwdEZv
cm1BY3Rpb24pOworICAgICAgICAgICAgICAgIG1fc2NoZWR1bGVkUmVkaXJlY3Rpb24tPmxvY2tC
YWNrRm9yd2FyZExpc3QpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIFNjaGVk
dWxlZFJlZGlyZWN0aW9uOjpmb3JtU3VibWlzc2lvbjoKKyAgICAgICAgICAgIC8vIEZJWE1FOiBJ
dCB3b3VsZCBtYWtlIHNlbnNlIHRvIHJlcG9ydCBmb3JtIHN1Ym1pc3Npb25zIGFzIGNsaWVudCBy
ZWRpcmVjdHMgdG9vLgorICAgICAgICAgICAgLy8gQnV0IHdlIGRpZG4ndCBkbyB0aGF0IGluIHRo
ZSBwYXN0IHdoZW4gZm9ybSBzdWJtaXNzaW9uIHVzZWQgYSBzZXBhcmF0ZSBkZWxheQorICAgICAg
ICAgICAgLy8gbWVjaGFuaXNtLCBzbyBkb2luZyBpdCB3aWxsIGJlIGEgYmVoYXZpb3IgY2hhbmdl
LgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBjYXNlIFNjaGVkdWxlZFJlZGlyZWN0aW9u
OjpoaXN0b3J5TmF2aWdhdGlvbjoKICAgICAgICAgICAgIC8vIERvbid0IHJlcG9ydCBoaXN0b3J5
IG5hdmlnYXRpb25zLgpAQCAtMjA5MCwxMSArMjEwNCwxNSBAQCB2b2lkIEZyYW1lTG9hZGVyOjpz
dG9wUmVkaXJlY3Rpb25UaW1lcigpCiAKICAgICBpZiAobV9zY2hlZHVsZWRSZWRpcmVjdGlvbikg
ewogICAgICAgICBzd2l0Y2ggKG1fc2NoZWR1bGVkUmVkaXJlY3Rpb24tPnR5cGUpIHsKLSAgICAg
ICAgICAgIGNhc2UgU2NoZWR1bGVkUmVkaXJlY3Rpb246OnJlZGlyZWN0aW9uOgogICAgICAgICAg
ICAgY2FzZSBTY2hlZHVsZWRSZWRpcmVjdGlvbjo6bG9jYXRpb25DaGFuZ2U6Ci0gICAgICAgICAg
ICBjYXNlIFNjaGVkdWxlZFJlZGlyZWN0aW9uOjpsb2NhdGlvbkNoYW5nZUR1cmluZ0xvYWQ6Cisg
ICAgICAgICAgICBjYXNlIFNjaGVkdWxlZFJlZGlyZWN0aW9uOjpyZWRpcmVjdGlvbjoKICAgICAg
ICAgICAgICAgICBjbGllbnRSZWRpcmVjdENhbmNlbGxlZE9yRmluaXNoZWQobV9jYW5jZWxsaW5n
V2l0aExvYWRJblByb2dyZXNzKTsKICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICBjYXNlIFNjaGVkdWxlZFJlZGlyZWN0aW9uOjpmb3JtU3VibWlzc2lvbjoKKyAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogSXQgd291bGQgbWFrZSBzZW5zZSB0byByZXBvcnQgZm9ybSBzdWJtaXNz
aW9ucyBhcyBjbGllbnQgcmVkaXJlY3RzIHRvby4KKyAgICAgICAgICAgICAgICAvLyBCdXQgd2Ug
ZGlkbid0IGRvIHRoYXQgaW4gdGhlIHBhc3Qgd2hlbiBmb3JtIHN1Ym1pc3Npb24gdXNlZCBhIHNl
cGFyYXRlIGRlbGF5CisgICAgICAgICAgICAgICAgLy8gbWVjaGFuaXNtLCBzbyBkb2luZyBpdCB3
aWxsIGJlIGEgYmVoYXZpb3IgY2hhbmdlLgorICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgIGNhc2UgU2NoZWR1bGVkUmVkaXJlY3Rpb246Omhpc3RvcnlOYXZpZ2F0aW9uOgogICAg
ICAgICAgICAgICAgIC8vIERvbid0IHJlcG9ydCBoaXN0b3J5IG5hdmlnYXRpb25zLgogICAgICAg
ICAgICAgICAgIHJldHVybjsKQEAgLTIxMTAsNyArMjEyOCw2IEBAIHZvaWQgRnJhbWVMb2FkZXI6
OmNvbXBsZXRlZCgpCiAgICAgICAgIGNoaWxkLT5sb2FkZXIoKS0+cGFyZW50Q29tcGxldGVkKCk7
CiAgICAgaWYgKEZyYW1lKiBwYXJlbnQgPSBtX2ZyYW1lLT50cmVlKCktPnBhcmVudCgpKQogICAg
ICAgICBwYXJlbnQtPmxvYWRlcigpLT5jaGVja0NvbXBsZXRlZCgpOwotICAgIHN1Ym1pdEZvcm1B
Z2FpbigpOwogfQogCiB2b2lkIEZyYW1lTG9hZGVyOjpzdGFydGVkKCkKQEAgLTIxNDQsMTMgKzIx
NjEsOSBAQCB2b2lkIEZyYW1lTG9hZGVyOjpzZXR1cEZvclJlcGxhY2VCeU1JTUVUCiAgICAgYWN0
aXZlRG9jdW1lbnRMb2FkZXIoKS0+c2V0dXBGb3JSZXBsYWNlQnlNSU1FVHlwZShuZXdNSU1FVHlw
ZSk7CiB9CiAKLXZvaWQgRnJhbWVMb2FkZXI6OmxvYWRGcmFtZVJlcXVlc3RXaXRoRm9ybUFuZFZh
bHVlcyhjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiByZXF1ZXN0LCBib29sIGxvY2tIaXN0b3J5LCBi
b29sIGxvY2tCYWNrRm9yd2FyZExpc3QsIFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50LAotICAgIEhU
TUxGb3JtRWxlbWVudCogc3VibWl0Rm9ybSwgY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4m
IGZvcm1WYWx1ZXMpCi17Ci0gICAgUmVmUHRyPEZvcm1TdGF0ZT4gZm9ybVN0YXRlOwotICAgIGlm
IChzdWJtaXRGb3JtKQotICAgICAgICBmb3JtU3RhdGUgPSBGb3JtU3RhdGU6OmNyZWF0ZShzdWJt
aXRGb3JtLCBmb3JtVmFsdWVzLCBtX2ZyYW1lKTsKLSAgICAKK3ZvaWQgRnJhbWVMb2FkZXI6Omxv
YWRGcmFtZVJlcXVlc3QoY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYgcmVxdWVzdCwgYm9vbCBsb2Nr
SGlzdG9yeSwgYm9vbCBsb2NrQmFja0ZvcndhcmRMaXN0LAorICAgIFBhc3NSZWZQdHI8RXZlbnQ+
IGV2ZW50LCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4gZm9ybVN0YXRlKQoreyAgICAKICAgICBLVVJM
IHVybCA9IHJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkudXJsKCk7CiAKICAgICBTdHJpbmcgcmVm
ZXJyZXI7CkBAIC0yMTgwLDE0ICsyMTkzLDE4IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmxvYWRGcmFt
ZVJlcXVlc3RXaXRoRm8KICAgICAgICAgbG9hZFR5cGUgPSBGcmFtZUxvYWRUeXBlU3RhbmRhcmQ7
CiAKICAgICBpZiAocmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5odHRwTWV0aG9kKCkgPT0gIlBP
U1QiKQotICAgICAgICBsb2FkUG9zdFJlcXVlc3QocmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKSwg
cmVmZXJyZXIsIHJlcXVlc3QuZnJhbWVOYW1lKCksIGxvY2tIaXN0b3J5LCBsb2FkVHlwZSwgZXZl
bnQsIGZvcm1TdGF0ZS5yZWxlYXNlKCkpOworICAgICAgICBsb2FkUG9zdFJlcXVlc3QocmVxdWVz
dC5yZXNvdXJjZVJlcXVlc3QoKSwgcmVmZXJyZXIsIHJlcXVlc3QuZnJhbWVOYW1lKCksIGxvY2tI
aXN0b3J5LCBsb2FkVHlwZSwgZXZlbnQsIGZvcm1TdGF0ZS5nZXQoKSk7CiAgICAgZWxzZQotICAg
ICAgICBsb2FkVVJMKHJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkudXJsKCksIHJlZmVycmVyLCBy
ZXF1ZXN0LmZyYW1lTmFtZSgpLCBsb2NrSGlzdG9yeSwgbG9hZFR5cGUsIGV2ZW50LCBmb3JtU3Rh
dGUucmVsZWFzZSgpKTsKKyAgICAgICAgbG9hZFVSTChyZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgp
LnVybCgpLCByZWZlcnJlciwgcmVxdWVzdC5mcmFtZU5hbWUoKSwgbG9ja0hpc3RvcnksIGxvYWRU
eXBlLCBldmVudCwgZm9ybVN0YXRlLmdldCgpKTsKIAotICAgIEZyYW1lKiB0YXJnZXRGcmFtZSA9
IGZpbmRGcmFtZUZvck5hdmlnYXRpb24ocmVxdWVzdC5mcmFtZU5hbWUoKSk7Ci0gICAgaWYgKHRh
cmdldEZyYW1lICYmIHRhcmdldEZyYW1lICE9IG1fZnJhbWUpCisgICAgLy8gRklYTUU6IEl0J3Mg
cG9zc2libGUgdGhpcyB0YXJnZXRGcmFtZSB3aWxsIG5vdCBiZSB0aGUgc2FtZSBmcmFtZSB0aGF0
IHdhcyB0YXJnZXRlZCBieSB0aGUgYWN0dWFsCisgICAgLy8gbG9hZCBpZiBmcmFtZSBuYW1lcyBo
YXZlIGNoYW5nZWQuCisgICAgRnJhbWUqIHNvdXJjZUZyYW1lID0gZm9ybVN0YXRlID8gZm9ybVN0
YXRlLT5zb3VyY2VGcmFtZSgpIDogbV9mcmFtZTsKKyAgICBGcmFtZSogdGFyZ2V0RnJhbWUgPSBz
b3VyY2VGcmFtZS0+bG9hZGVyKCktPmZpbmRGcmFtZUZvck5hdmlnYXRpb24ocmVxdWVzdC5mcmFt
ZU5hbWUoKSk7CisgICAgaWYgKHRhcmdldEZyYW1lICYmIHRhcmdldEZyYW1lICE9IHNvdXJjZUZy
YW1lKSB7CiAgICAgICAgIGlmIChQYWdlKiBwYWdlID0gdGFyZ2V0RnJhbWUtPnBhZ2UoKSkKICAg
ICAgICAgICAgIHBhZ2UtPmNocm9tZSgpLT5mb2N1cygpOworICAgIH0KIH0KIAogdm9pZCBGcmFt
ZUxvYWRlcjo6bG9hZFVSTChjb25zdCBLVVJMJiBuZXdVUkwsIGNvbnN0IFN0cmluZyYgcmVmZXJy
ZXIsIGNvbnN0IFN0cmluZyYgZnJhbWVOYW1lLCBib29sIGxvY2tIaXN0b3J5LCBGcmFtZUxvYWRU
eXBlIG5ld0xvYWRUeXBlLApAQCAtMjIwOCw3ICsyMjI1LDggQEAgdm9pZCBGcmFtZUxvYWRlcjo6
bG9hZFVSTChjb25zdCBLVVJMJiBuZQogCiAgICAgQVNTRVJUKG5ld0xvYWRUeXBlICE9IEZyYW1l
TG9hZFR5cGVTYW1lKTsKIAotICAgIEZyYW1lKiB0YXJnZXRGcmFtZSA9IGZpbmRGcmFtZUZvck5h
dmlnYXRpb24oZnJhbWVOYW1lKTsKKyAgICAvLyBUaGUgc2VhcmNoIGZvciBhIHRhcmdldCBmcmFt
ZSBpcyBkb25lIGVhcmxpZXIgaW4gdGhlIGNhc2Ugb2YgZm9ybSBzdWJtaXNzaW9uLgorICAgIEZy
YW1lKiB0YXJnZXRGcmFtZSA9IGlzRm9ybVN1Ym1pc3Npb24gPyAwIDogZmluZEZyYW1lRm9yTmF2
aWdhdGlvbihmcmFtZU5hbWUpOwogICAgIGlmICh0YXJnZXRGcmFtZSAmJiB0YXJnZXRGcmFtZSAh
PSBtX2ZyYW1lKSB7CiAgICAgICAgIHRhcmdldEZyYW1lLT5sb2FkZXIoKS0+bG9hZFVSTChuZXdV
UkwsIHJlZmVycmVyLCBTdHJpbmcoKSwgbG9ja0hpc3RvcnksIG5ld0xvYWRUeXBlLCBldmVudCwg
Zm9ybVN0YXRlLnJlbGVhc2UoKSk7CiAgICAgICAgIHJldHVybjsKQEAgLTI5MzYsNyArMjk1NCw3
IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmNsaWVudFJlZGlyZWN0Q2FuY2VsbGUKICAgICBtX3NlbnRS
ZWRpcmVjdE5vdGlmaWNhdGlvbiA9IGZhbHNlOwogfQogCi12b2lkIEZyYW1lTG9hZGVyOjpjbGll
bnRSZWRpcmVjdGVkKGNvbnN0IEtVUkwmIHVybCwgZG91YmxlIHNlY29uZHMsIGRvdWJsZSBmaXJl
RGF0ZSwgYm9vbCBsb2NrQmFja0ZvcndhcmRMaXN0LCBib29sIGlzSmF2YVNjcmlwdEZvcm1BY3Rp
b24pCit2b2lkIEZyYW1lTG9hZGVyOjpjbGllbnRSZWRpcmVjdGVkKGNvbnN0IEtVUkwmIHVybCwg
ZG91YmxlIHNlY29uZHMsIGRvdWJsZSBmaXJlRGF0ZSwgYm9vbCBsb2NrQmFja0ZvcndhcmRMaXN0
KQogewogICAgIG1fY2xpZW50LT5kaXNwYXRjaFdpbGxQZXJmb3JtQ2xpZW50UmVkaXJlY3QodXJs
LCBzZWNvbmRzLCBmaXJlRGF0ZSk7CiAgICAgCkBAIC0yOTQ0LDEwICsyOTYyLDExIEBAIHZvaWQg
RnJhbWVMb2FkZXI6OmNsaWVudFJlZGlyZWN0ZWQoY29uc3QKICAgICAvLyB0aGUgbmV4dCBwcm92
aXNpb25hbCBsb2FkLCB3ZSBjYW4gc2VuZCBhIGNvcnJlc3BvbmRpbmcgLXdlYlZpZXc6ZGlkQ2Fu
Y2VsQ2xpZW50UmVkaXJlY3RGb3JGcmFtZToKICAgICBtX3NlbnRSZWRpcmVjdE5vdGlmaWNhdGlv
biA9IHRydWU7CiAgICAgCi0gICAgLy8gSWYgYSAicXVpY2siIHJlZGlyZWN0IGNvbWVzIGluIGFu
LCB3ZSBzZXQgYSBzcGVjaWFsIG1vZGUgc28gd2UgdHJlYXQgdGhlIG5leHQKLSAgICAvLyBsb2Fk
IGFzIHBhcnQgb2YgdGhlIHNhbWUgbmF2aWdhdGlvbi4gSWYgd2UgZG9uJ3QgaGF2ZSBhIGRvY3Vt
ZW50IGxvYWRlciwgd2UgaGF2ZQorICAgIC8vIElmIGEgInF1aWNrIiByZWRpcmVjdCBjb21lcyBp
biwgd2Ugc2V0IGEgc3BlY2lhbCBtb2RlIHNvIHdlIHRyZWF0IHRoZSBuZXh0CisgICAgLy8gbG9h
ZCBhcyBwYXJ0IG9mIHRoZSBvcmlnaW5hbCBuYXZpZ2F0aW9uLiBJZiB3ZSBkb24ndCBoYXZlIGEg
ZG9jdW1lbnQgbG9hZGVyLCB3ZSBoYXZlCiAgICAgLy8gbm8gIm9yaWdpbmFsIiBsb2FkIG9uIHdo
aWNoIHRvIGJhc2UgYSByZWRpcmVjdCwgc28gd2UgdHJlYXQgdGhlIHJlZGlyZWN0IGFzIGEgbm9y
bWFsIGxvYWQuCi0gICAgbV9xdWlja1JlZGlyZWN0Q29taW5nID0gbG9ja0JhY2tGb3J3YXJkTGlz
dCAmJiBtX2RvY3VtZW50TG9hZGVyICYmICFpc0phdmFTY3JpcHRGb3JtQWN0aW9uOworICAgIC8v
IExvYWRzIHRyaWdnZXJlZCBieSBKYXZhU2NyaXB0IGZvcm0gc3VibWlzc2lvbnMgbmV2ZXIgY291
bnQgYXMgcXVpY2sgcmVkaXJlY3RzLgorICAgIG1fcXVpY2tSZWRpcmVjdENvbWluZyA9IGxvY2tC
YWNrRm9yd2FyZExpc3QgJiYgbV9kb2N1bWVudExvYWRlciAmJiAhbV9pc0V4ZWN1dGluZ0phdmFT
Y3JpcHRGb3JtQWN0aW9uOwogfQogCiAjaWYgRU5BQkxFKFdNTCkKQEAgLTM0NTcsMzAgKzM0NzYs
NiBAQCBpbnQgRnJhbWVMb2FkZXI6Om51bVBlbmRpbmdPckxvYWRpbmdSZXF1CiAgICAgcmV0dXJu
IGNvdW50OwogfQogCi12b2lkIEZyYW1lTG9hZGVyOjpzdWJtaXRGb3JtKGNvbnN0IEZyYW1lTG9h
ZFJlcXVlc3QmIHJlcXVlc3QsIFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50LCBib29sIGxvY2tIaXN0
b3J5LCBib29sIGxvY2tCYWNrRm9yd2FyZExpc3QpCi17Ci0gICAgLy8gRklYTUU6IFdlJ2QgbGlr
ZSB0byByZW1vdmUgdGhpcyBhbHRvZ2V0aGVyIGFuZCBmaXggdGhlIG11bHRpcGxlIGZvcm0gc3Vi
bWlzc2lvbiBpc3N1ZSBhbm90aGVyIHdheS4KLSAgICAvLyBXZSBkbyBub3Qgd2FudCB0byBzdWJt
aXQgbW9yZSB0aGFuIG9uZSBmb3JtIGZyb20gdGhlIHNhbWUgcGFnZSwKLSAgICAvLyBub3IgZG8g
d2Ugd2FudCB0byBzdWJtaXQgYSBzaW5nbGUgZm9ybSBtb3JlIHRoYW4gb25jZS4KLSAgICAvLyBU
aGlzIGZsYWcgcHJldmVudHMgdGhlc2UgZnJvbSBoYXBwZW5pbmc7IG5vdCBzdXJlIGhvdyBvdGhl
ciBicm93c2VycyBwcmV2ZW50IHRoaXMuCi0gICAgLy8gVGhlIGZsYWcgaXMgcmVzZXQgaW4gZWFj
aCB0aW1lIHdlIHN0YXJ0IGhhbmRsZSBhIG5ldyBtb3VzZSBvciBrZXkgZG93biBldmVudCwgYW5k
Ci0gICAgLy8gYWxzbyBpbiBzZXRWaWV3IHNpbmNlIHRoaXMgcGFydCBtYXkgZ2V0IHJldXNlZCBm
b3IgYSBwYWdlIGZyb20gdGhlIGJhY2svZm9yd2FyZCBjYWNoZS4KLSAgICAvLyBUaGUgZm9ybSBt
dWx0aS1zdWJtaXQgbG9naWMgaGVyZSBpcyBvbmx5IG5lZWRlZCB3aGVuIHdlIGFyZSBzdWJtaXR0
aW5nIGEgZm9ybSB0aGF0IGFmZmVjdHMgdGhpcyBmcmFtZS4KLSAgICAvLyBGSVhNRTogRnJhbWUg
dGFyZ2V0aW5nIGlzIG9ubHkgb25lIG9mIHRoZSB3YXlzIHRoZSBzdWJtaXNzaW9uIGNvdWxkIGVu
ZCB1cCBkb2luZyBzb21ldGhpbmcgb3RoZXIKLSAgICAvLyB0aGFuIHJlcGxhY2luZyB0aGlzIGZy
YW1lJ3MgY29udGVudCwgc28gdGhpcyBjaGVjayBpcyBmbGF3ZWQuIE9uIHRoZSBvdGhlciBoYW5k
LCB0aGUgY2hlY2sgaXMgaGFyZGx5Ci0gICAgLy8gbmVlZGVkIGFueSBtb3JlIG5vdyB0aGF0IHdl
IHJlc2V0IG1fc3VibWl0dGVkRm9ybVVSTCBvbiBlYWNoIG1vdXNlIG9yIGtleSBkb3duIGV2ZW50
LgotICAgIEZyYW1lKiB0YXJnZXQgPSBtX2ZyYW1lLT50cmVlKCktPmZpbmQocmVxdWVzdC5mcmFt
ZU5hbWUoKSk7Ci0gICAgaWYgKG1fZnJhbWUtPnRyZWUoKS0+aXNEZXNjZW5kYW50T2YodGFyZ2V0
KSkgewotICAgICAgICBpZiAobV9zdWJtaXR0ZWRGb3JtVVJMID09IHJlcXVlc3QucmVzb3VyY2VS
ZXF1ZXN0KCkudXJsKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fc3VibWl0dGVk
Rm9ybVVSTCA9IHJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkudXJsKCk7Ci0gICAgfQotCi0gICAg
bG9hZEZyYW1lUmVxdWVzdFdpdGhGb3JtQW5kVmFsdWVzKHJlcXVlc3QsIGxvY2tIaXN0b3J5LCBs
b2NrQmFja0ZvcndhcmRMaXN0LCBldmVudCwgbV9mb3JtQWJvdXRUb0JlU3VibWl0dGVkLmdldCgp
LCBtX2Zvcm1WYWx1ZXNBYm91dFRvQmVTdWJtaXR0ZWQpOwotCi0gICAgY2xlYXJSZWNvcmRlZEZv
cm1WYWx1ZXMoKTsKLX0KLQogU3RyaW5nIEZyYW1lTG9hZGVyOjp1c2VyQWdlbnQoY29uc3QgS1VS
TCYgdXJsKSBjb25zdAogewogICAgIHJldHVybiBtX2NsaWVudC0+dXNlckFnZW50KHVybCk7CkBA
IC0zNDg4LDkgKzM0ODMsNiBAQCBTdHJpbmcgRnJhbWVMb2FkZXI6OnVzZXJBZ2VudChjb25zdCBL
VVJMCiAKIHZvaWQgRnJhbWVMb2FkZXI6OnRva2VuaXplclByb2Nlc3NlZERhdGEoKQogewotLy8g
ICAgQVNTRVJUKG1fZnJhbWUtPnBhZ2UoKSk7Ci0vLyAgICBBU1NFUlQobV9mcmFtZS0+ZG9jdW1l
bnQoKSk7Ci0KICAgICBjaGVja0NvbXBsZXRlZCgpOwogfQogCkBAIC0zNjQzLDcgKzM2MzUsOCBA
QCB2b2lkIEZyYW1lTG9hZGVyOjpsb2FkUG9zdFJlcXVlc3QoY29uc3QgCiAgICAgTmF2aWdhdGlv
bkFjdGlvbiBhY3Rpb24odXJsLCBsb2FkVHlwZSwgdHJ1ZSwgZXZlbnQpOwogCiAgICAgaWYgKCFm
cmFtZU5hbWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGlmIChGcmFtZSogdGFyZ2V0RnJhbWUgPSBm
aW5kRnJhbWVGb3JOYXZpZ2F0aW9uKGZyYW1lTmFtZSkpCisgICAgICAgIC8vIFRoZSBzZWFyY2gg
Zm9yIGEgdGFyZ2V0IGZyYW1lIGlzIGRvbmUgZWFybGllciBpbiB0aGUgY2FzZSBvZiBmb3JtIHN1
Ym1pc3Npb24uCisgICAgICAgIGlmIChGcmFtZSogdGFyZ2V0RnJhbWUgPSBmb3JtU3RhdGUgPyAw
IDogZmluZEZyYW1lRm9yTmF2aWdhdGlvbihmcmFtZU5hbWUpKQogICAgICAgICAgICAgdGFyZ2V0
RnJhbWUtPmxvYWRlcigpLT5sb2FkV2l0aE5hdmlnYXRpb25BY3Rpb24od29ya2luZ1Jlc291cmNl
UmVxdWVzdCwgYWN0aW9uLCBsb2NrSGlzdG9yeSwgbG9hZFR5cGUsIGZvcm1TdGF0ZS5yZWxlYXNl
KCkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBjaGVja05ld1dpbmRvd1BvbGljeShhY3Rp
b24sIHdvcmtpbmdSZXNvdXJjZVJlcXVlc3QsIGZvcm1TdGF0ZS5yZWxlYXNlKCksIGZyYW1lTmFt
ZSk7CkBAIC0zNjUxLDEyICszNjQ0LDYgQEAgdm9pZCBGcmFtZUxvYWRlcjo6bG9hZFBvc3RSZXF1
ZXN0KGNvbnN0IAogICAgICAgICBsb2FkV2l0aE5hdmlnYXRpb25BY3Rpb24od29ya2luZ1Jlc291
cmNlUmVxdWVzdCwgYWN0aW9uLCBsb2NrSGlzdG9yeSwgbG9hZFR5cGUsIGZvcm1TdGF0ZS5yZWxl
YXNlKCkpOyAgICAKIH0KIAotdm9pZCBGcmFtZUxvYWRlcjo6bG9hZEVtcHR5RG9jdW1lbnRTeW5j
aHJvbm91c2x5KCkKLXsKLSAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdChLVVJMKCIiKSk7Ci0g
ICAgbG9hZChyZXF1ZXN0LCBmYWxzZSk7Ci19Ci0KIHVuc2lnbmVkIGxvbmcgRnJhbWVMb2FkZXI6
OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0
LCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3Rv
cjxjaGFyPiYgZGF0YSkKIHsKICAgICAvLyBTaW5jZSB0aGlzIGlzIGEgc3VicmVzb3VyY2UsIHdl
IGNhbiBsb2FkIGFueSBVUkwgKHdlIGlnbm9yZSB0aGUgcmV0dXJuIHZhbHVlKS4KQEAgLTQyNTks
NiArNDI0NiwxMSBAQCBQYXNzUmVmUHRyPEhpc3RvcnlJdGVtPiBGcmFtZUxvYWRlcjo6Y3JlCiAK
IHZvaWQgRnJhbWVMb2FkZXI6OmFkZEJhY2tGb3J3YXJkSXRlbUNsaXBwZWRBdFRhcmdldChib29s
IGRvQ2xpcCkKIHsKKyAgICAvLyBJbiB0aGUgY2FzZSBvZiBzYXZpbmcgc3RhdGUgYWJvdXQgYSBw
YWdlIHdpdGggZnJhbWVzLCB3ZSBzdG9yZSBhIHRyZWUgb2YgaXRlbXMgdGhhdCBtaXJyb3JzIHRo
ZSBmcmFtZSB0cmVlLiAgCisgICAgLy8gVGhlIGl0ZW0gdGhhdCB3YXMgdGhlIHRhcmdldCBvZiB0
aGUgdXNlcidzIG5hdmlnYXRpb24gaXMgZGVzaWduYXRlZCBhcyB0aGUgInRhcmdldEl0ZW0iLiAg
CisgICAgLy8gV2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIGRvQ2xpcD10cnVlIHdl
J3JlIGFibGUgdG8gY3JlYXRlIHRoZSB3aG9sZSB0cmVlIGV4Y2VwdCBmb3IgdGhlIHRhcmdldCdz
IGNoaWxkcmVuLCAKKyAgICAvLyB3aGljaCB3aWxsIGJlIGxvYWRlZCBpbiB0aGUgZnV0dXJlLiBU
aGF0IHBhcnQgb2YgdGhlIHRyZWUgd2lsbCBiZSBmaWxsZWQgb3V0IGFzIHRoZSBjaGlsZCBsb2Fk
cyBhcmUgY29tbWl0dGVkLgorCiAgICAgUGFnZSogcGFnZSA9IG1fZnJhbWUtPnBhZ2UoKTsKICAg
ICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybjsKQEAgLTQzMDgsOSArNDMwMCw5IEBAIFBhc3NS
ZWZQdHI8SGlzdG9yeUl0ZW0+IEZyYW1lTG9hZGVyOjpjcmUKIEZyYW1lKiBGcmFtZUxvYWRlcjo6
ZmluZEZyYW1lRm9yTmF2aWdhdGlvbihjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpCiB7CiAgICAg
RnJhbWUqIGZyYW1lID0gbV9mcmFtZS0+dHJlZSgpLT5maW5kKG5hbWUpOwotICAgIGlmIChzaG91
bGRBbGxvd05hdmlnYXRpb24oZnJhbWUpKQotICAgICAgICByZXR1cm4gZnJhbWU7ICAKLSAgICBy
ZXR1cm4gMDsKKyAgICBpZiAoIXNob3VsZEFsbG93TmF2aWdhdGlvbihmcmFtZSkpCisgICAgICAg
IHJldHVybiAwOyAgCisgICAgcmV0dXJuIGZyYW1lOwogfQogCiB2b2lkIEZyYW1lTG9hZGVyOjpz
YXZlU2Nyb2xsUG9zaXRpb25BbmRWaWV3U3RhdGVUb0l0ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0pCkBA
IC00NjQwLDEwICs0NjMyLDEwIEBAIHZvaWQgRnJhbWVMb2FkZXI6OnJlY3Vyc2l2ZUdvVG9JdGVt
KEhpc3QKICAgICAgICAgCiAgICAgICAgIGludCBzaXplID0gY2hpbGRJdGVtcy5zaXplKCk7CiAg
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICBTdHJp
bmcgY2hpbGROYW1lID0gY2hpbGRJdGVtc1tpXS0+dGFyZ2V0KCk7Ci0gICAgICAgICAgICBIaXN0
b3J5SXRlbSogZnJvbUNoaWxkSXRlbSA9IGZyb21JdGVtLT5jaGlsZEl0ZW1XaXRoTmFtZShjaGls
ZE5hbWUpOworICAgICAgICAgICAgU3RyaW5nIGNoaWxkRnJhbWVOYW1lID0gY2hpbGRJdGVtc1tp
XS0+dGFyZ2V0KCk7CisgICAgICAgICAgICBIaXN0b3J5SXRlbSogZnJvbUNoaWxkSXRlbSA9IGZy
b21JdGVtLT5jaGlsZEl0ZW1XaXRoVGFyZ2V0KGNoaWxkRnJhbWVOYW1lKTsKICAgICAgICAgICAg
IEFTU0VSVChmcm9tQ2hpbGRJdGVtIHx8IGZyb21JdGVtLT5pc1RhcmdldEl0ZW0oKSk7Ci0gICAg
ICAgICAgICBGcmFtZSogY2hpbGRGcmFtZSA9IG1fZnJhbWUtPnRyZWUoKS0+Y2hpbGQoY2hpbGRO
YW1lKTsKKyAgICAgICAgICAgIEZyYW1lKiBjaGlsZEZyYW1lID0gbV9mcmFtZS0+dHJlZSgpLT5j
aGlsZChjaGlsZEZyYW1lTmFtZSk7CiAgICAgICAgICAgICBBU1NFUlQoY2hpbGRGcmFtZSk7CiAg
ICAgICAgICAgICBjaGlsZEZyYW1lLT5sb2FkZXIoKS0+cmVjdXJzaXZlR29Ub0l0ZW0oY2hpbGRJ
dGVtc1tpXS5nZXQoKSwgZnJvbUNoaWxkSXRlbSwgdHlwZSk7CiAgICAgICAgIH0KQEAgLTQ2NjEs
OSArNDY1MywxMCBAQCBib29sIEZyYW1lTG9hZGVyOjpjaGlsZEZyYW1lc01hdGNoSXRlbShICiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICB1bnNpZ25lZCBzaXplID0gY2hpbGRJdGVt
cy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgIGlmICghbV9mcmFt
ZS0+dHJlZSgpLT5jaGlsZChjaGlsZEl0ZW1zW2ldLT50YXJnZXQoKSkpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQogICAgIAogICAgIC8vIEZvdW5kIG1hdGNoZXMgZm9yIGFsbCBp
dGVtIHRhcmdldHMKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQ2ODMsMTcgKzQ2NzYsNyBAQCB2b2lk
IEZyYW1lTG9hZGVyOjp1cGRhdGVIaXN0b3J5Rm9yU3RhbmRhCiAgICAgYm9vbCBuZWVkUHJpdmFj
eSA9ICFzZXR0aW5ncyB8fCBzZXR0aW5ncy0+cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpOwogICAg
IGNvbnN0IEtVUkwmIGhpc3RvcnlVUkwgPSBkb2N1bWVudExvYWRlcigpLT51cmxGb3JIaXN0b3J5
KCk7CiAKLSAgICAvLyBJZiB0aGUgbmF2aWdhdGlvbiBvY2N1cmVkIGR1cmluZyBsb2FkIGFuZCB0
aGlzIGlzIGEgc3ViZnJhbWUsIHVwZGF0ZSB0aGUgY3VycmVudAotICAgIC8vIGJhY2svZm9yd2Fy
ZCBpdGVtIHJhdGhlciB0aGFuIGFkZGluZyBhIG5ldyBvbmUgYW5kIGRvbid0IGFkZCB0aGUgbmV3
IFVSTCB0byBnbG9iYWwKLSAgICAvLyBoaXN0b3J5IGF0IGFsbC4gQnV0IGRvIGFkZCBpdCB0byB2
aXNpdGVkIGxpbmtzLiA8cmRhcjovL3Byb2JsZW0vNTMzMzQ5Nj4KLSAgICBib29sIGZyYW1lTmF2
aWdhdGlvbkR1cmluZ0xvYWQgPSBmYWxzZTsKLSAgICBpZiAobV9uYXZpZ2F0aW9uRHVyaW5nTG9h
ZCkgewotICAgICAgICBIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyID0gbV9mcmFtZS0+b3du
ZXJFbGVtZW50KCk7Ci0gICAgICAgIGZyYW1lTmF2aWdhdGlvbkR1cmluZ0xvYWQgPSBvd25lciAm
JiAhb3duZXItPmNyZWF0ZWRCeVBhcnNlcigpOwotICAgICAgICBtX25hdmlnYXRpb25EdXJpbmdM
b2FkID0gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCFmcmFtZU5hdmlnYXRpb25EdXJpbmdMb2Fk
ICYmICFkb2N1bWVudExvYWRlcigpLT5pc0NsaWVudFJlZGlyZWN0KCkpIHsKKyAgICBpZiAoIWRv
Y3VtZW50TG9hZGVyKCktPmlzQ2xpZW50UmVkaXJlY3QoKSkgewogICAgICAgICBpZiAoIWhpc3Rv
cnlVUkwuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBhZGRCYWNrRm9yd2FyZEl0ZW1DbGlwcGVk
QXRUYXJnZXQodHJ1ZSk7CiAgICAgICAgICAgICBpZiAoIW5lZWRQcml2YWN5KSB7CkBAIC00ODA1
LDcgKzQ3ODgsNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjp1cGRhdGVIaXN0b3J5Rm9yUmVkaXJlCiAg
ICAgfSBlbHNlIHsKICAgICAgICAgRnJhbWUqIHBhcmVudEZyYW1lID0gbV9mcmFtZS0+dHJlZSgp
LT5wYXJlbnQoKTsKICAgICAgICAgaWYgKHBhcmVudEZyYW1lICYmIHBhcmVudEZyYW1lLT5sb2Fk
ZXIoKS0+bV9jdXJyZW50SGlzdG9yeUl0ZW0pCi0gICAgICAgICAgICBwYXJlbnRGcmFtZS0+bG9h
ZGVyKCktPm1fY3VycmVudEhpc3RvcnlJdGVtLT5hZGRDaGlsZEl0ZW0oY3JlYXRlSGlzdG9yeUl0
ZW0odHJ1ZSkpOworICAgICAgICAgICAgcGFyZW50RnJhbWUtPmxvYWRlcigpLT5tX2N1cnJlbnRI
aXN0b3J5SXRlbS0+c2V0Q2hpbGRJdGVtKGNyZWF0ZUhpc3RvcnlJdGVtKHRydWUpKTsKICAgICB9
CiAKICAgICBpZiAoIWhpc3RvcnlVUkwuaXNFbXB0eSgpICYmICFuZWVkUHJpdmFjeSkgewpJbmRl
eDogV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xv
YWRlci9GcmFtZUxvYWRlci5oCShyZXZpc2lvbiA0MjE1MCkKKysrIFdlYkNvcmUvbG9hZGVyL0Zy
YW1lTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDcgKzY4LDYgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgIGNsYXNzIFRleHRSZXNvdXJjZURlY29kZXI7CiAgICAgY2xhc3MgV2lkZ2V0
OwogCi0gICAgc3RydWN0IEZvcm1TdWJtaXNzaW9uOwogICAgIHN0cnVjdCBGcmFtZUxvYWRSZXF1
ZXN0OwogICAgIHN0cnVjdCBTY2hlZHVsZWRSZWRpcmVjdGlvbjsKICAgICBzdHJ1Y3QgV2luZG93
RmVhdHVyZXM7CkBAIC0xMTksMjYgKzExOCwyOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAg
ICAgICAgRnJhbWUqIGZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZTsgfQogCi0gICAgICAg
IC8vIEZJWE1FOiBUaGlzIGlzIG5vdCBjb29sLCBwZW9wbGUuIFdlIHNob3VsZCBhaW0gdG8gY29u
c29saWRhdGUgdGhlc2UgdmFyaWV0eSBvZiBsb2FkaW5nIHJlbGF0ZWQgbWV0aG9kcyBpbnRvIGEg
c21hbGxlciBzZXQsCi0gICAgICAgIC8vIGFuZCB0cnkgdG8gcmV1c2UgbW9yZSBvZiB0aGUgc2Ft
ZSBsb2dpYyBieSBleHRyYWN0aW5nIGNvbW1vbiBjb2RlIHBhdGhzLgorICAgICAgICAvLyBGSVhN
RTogVGhpcyBpcyBub3QgY29vbCwgcGVvcGxlLiBUaGVyZSBhcmUgdG9vIG1hbnkgZGlmZmVyZW50
IGZ1bmN0aW9ucyB0aGF0IGFsbCBzdGFydCBsb2Fkcy4KKyAgICAgICAgLy8gV2Ugc2hvdWxkIGFp
bSB0byBjb25zb2xpZGF0ZSB0aGVzZSBpbnRvIGEgc21hbGxlciBzZXQgb2YgZnVuY3Rpb25zLCBh
bmQgdHJ5IHRvIHJldXNlIG1vcmUgb2YKKyAgICAgICAgLy8gdGhlIGxvZ2ljIGJ5IGV4dHJhY3Rp
bmcgY29tbW9uIGNvZGUgcGF0aHMuCisKICAgICAgICAgdm9pZCBwcmVwYXJlRm9yTG9hZFN0YXJ0
KCk7CiAgICAgICAgIHZvaWQgc2V0dXBGb3JSZXBsYWNlKCk7CiAgICAgICAgIHZvaWQgc2V0dXBG
b3JSZXBsYWNlQnlNSU1FVHlwZShjb25zdCBTdHJpbmcmIG5ld01JTUVUeXBlKTsKIAogICAgICAg
ICB2b2lkIGxvYWRVUkxJbnRvQ2hpbGRGcmFtZShjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiBy
ZWZlcmVyLCBGcmFtZSopOwogCi0gICAgICAgIHZvaWQgbG9hZEZyYW1lUmVxdWVzdFdpdGhGb3Jt
QW5kVmFsdWVzKGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmLCBib29sIGxvY2tIaXN0b3J5LCBib29s
IGxvY2tCYWNrRm9yd2FyZExpc3QsICAgICAgICAgICAvLyBDYWxsZWQgYnkgc3VibWl0Rm9ybSwg
Y2FsbHMgbG9hZFBvc3RSZXF1ZXN0KCkKLSAgICAgICAgICAgIFBhc3NSZWZQdHI8RXZlbnQ+LCBI
VE1MRm9ybUVsZW1lbnQqLCBjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYgZm9ybVZhbHVl
cyk7CisgICAgICAgIHZvaWQgbG9hZEZyYW1lUmVxdWVzdChjb25zdCBGcmFtZUxvYWRSZXF1ZXN0
JiwgYm9vbCBsb2NrSGlzdG9yeSwgYm9vbCBsb2NrQmFja0ZvcndhcmRMaXN0LCAgLy8gQ2FsbGVk
IGJ5IHN1Ym1pdEZvcm0sIGNhbGxzIGxvYWRQb3N0UmVxdWVzdCBhbmQgbG9hZFVSTC4KKyAgICAg
ICAgICAgIFBhc3NSZWZQdHI8RXZlbnQ+LCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4pOwogCi0gICAg
ICAgIHZvaWQgbG9hZChjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBib29sIGxvY2tIaXN0b3J5KTsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gQ2FsbGVkIGJ5IFdlYkZyYW1lLCBjYWxscyAoUmVzb3VyY2VSZXF1ZXN0LCBTdWJzdGl0dXRl
RGF0YSkKLSAgICAgICAgdm9pZCBsb2FkKGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFN1
YnN0aXR1dGVEYXRhJiwgYm9vbCBsb2NrSGlzdG9yeSk7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBDYWxsZWQgYm90aCBieSBXZWJGcmFtZSBhbmQgaW50ZXJuYWxseSwgY2Fs
bHMgKERvY3VtZW50TG9hZGVyKikKLSAgICAgICAgdm9pZCBsb2FkKGNvbnN0IFJlc291cmNlUmVx
dWVzdCYsIGNvbnN0IFN0cmluZyYgZnJhbWVOYW1lLCBib29sIGxvY2tIaXN0b3J5KTsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDYWxsZWQgYnkgV2ViUGx1Z2luQ29udHJvbGxl
cgorICAgICAgICB2b2lkIGxvYWQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgYm9vbCBsb2NrSGlz
dG9yeSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhbGxlZCBi
eSBXZWJGcmFtZSwgY2FsbHMgbG9hZChSZXNvdXJjZVJlcXVlc3QsIFN1YnN0aXR1dGVEYXRhKS4K
KyAgICAgICAgdm9pZCBsb2FkKGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFN1YnN0aXR1
dGVEYXRhJiwgYm9vbCBsb2NrSGlzdG9yeSk7ICAgICAgICAgICAgICAgICAvLyBDYWxsZWQgYm90
aCBieSBXZWJGcmFtZSBhbmQgaW50ZXJuYWxseSwgY2FsbHMgbG9hZChEb2N1bWVudExvYWRlciop
LgorICAgICAgICB2b2lkIGxvYWQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgU3RyaW5n
JiBmcmFtZU5hbWUsIGJvb2wgbG9ja0hpc3RvcnkpOyAgICAgICAgICAgICAgIC8vIENhbGxlZCBi
eSBXZWJQbHVnaW5Db250cm9sbGVyLgogICAgICAgICAKLSAgICAgICAgdm9pZCBsb2FkQXJjaGl2
ZShQYXNzUmVmUHRyPEFyY2hpdmU+IGFyY2hpdmUpOworICAgICAgICB2b2lkIGxvYWRBcmNoaXZl
KFBhc3NSZWZQdHI8QXJjaGl2ZT4pOwogCi0gICAgICAgIC8vIFJldHVybnMgdHJ1ZSBmb3IgYW55
IG5vbi1sb2NhbCBVUkwuIElmIERvY3VtZW50IHBhcmFtZXRlciBpcyBzdXBwbGllZCwgaXRzIGxv
Y2FsIGxvYWQgcG9saWN5IGRpY3RhdGVzLAorICAgICAgICAvLyBSZXR1cm5zIHRydWUgZm9yIGFu
eSBub24tbG9jYWwgVVJMLiBJZiBkb2N1bWVudCBwYXJhbWV0ZXIgaXMgc3VwcGxpZWQsIGl0cyBs
b2NhbCBsb2FkIHBvbGljeSBkaWN0YXRlcywKICAgICAgICAgLy8gb3RoZXJ3aXNlIGlmIHJlZmVy
cmVyIGlzIG5vbi1lbXB0eSBhbmQgcmVwcmVzZW50cyBhIGxvY2FsIGZpbGUsIHRoZW4gdGhlIGxv
Y2FsIGxvYWQgaXMgYWxsb3dlZC4KLSAgICAgICAgc3RhdGljIGJvb2wgY2FuTG9hZChjb25zdCBL
VVJMJiwgY29uc3QgU3RyaW5nJiByZWZlcnJlciwgY29uc3QgRG9jdW1lbnQqIHRoZURvY3VtZW50
ID0gMCk7CisgICAgICAgIHN0YXRpYyBib29sIGNhbkxvYWQoY29uc3QgS1VSTCYsIGNvbnN0IFN0
cmluZyYgcmVmZXJyZXIsIGNvbnN0IERvY3VtZW50KiA9IDApOwogICAgICAgICBzdGF0aWMgdm9p
ZCByZXBvcnRMb2NhbExvYWRGYWlsZWQoRnJhbWUqLCBjb25zdCBTdHJpbmcmIHVybCk7CiAKICAg
ICAgICAgc3RhdGljIGJvb2wgc2hvdWxkSGlkZVJlZmVycmVyKGNvbnN0IEtVUkwmLCBjb25zdCBT
dHJpbmcmIHJlZmVycmVyKTsKQEAgLTE2MiwxMSArMTYzLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICBTdHJpbmcgcmVmZXJyZXIoKSBjb25zdDsKICAgICAgICAgU3RyaW5nIG91dGdv
aW5nUmVmZXJyZXIoKSBjb25zdDsKICAgICAgICAgU3RyaW5nIG91dGdvaW5nT3JpZ2luKCkgY29u
c3Q7Ci0gICAgICAgIHZvaWQgbG9hZEVtcHR5RG9jdW1lbnRTeW5jaHJvbm91c2x5KCk7CiAKICAg
ICAgICAgRG9jdW1lbnRMb2FkZXIqIGFjdGl2ZURvY3VtZW50TG9hZGVyKCkgY29uc3Q7CiAgICAg
ICAgIERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fZG9j
dW1lbnRMb2FkZXIuZ2V0KCk7IH0KLSAgICAgICAgRG9jdW1lbnRMb2FkZXIqIHBvbGljeURvY3Vt
ZW50TG9hZGVyKCkgY29uc3QgeyByZXR1cm4gbV9wb2xpY3lEb2N1bWVudExvYWRlci5nZXQoKTsg
fQogICAgICAgICBEb2N1bWVudExvYWRlciogcHJvdmlzaW9uYWxEb2N1bWVudExvYWRlcigpIGNv
bnN0IHsgcmV0dXJuIG1fcHJvdmlzaW9uYWxEb2N1bWVudExvYWRlci5nZXQoKTsgfQogICAgICAg
ICBGcmFtZVN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQogICAgICAgICBz
dGF0aWMgZG91YmxlIHRpbWVPZkxhc3RDb21wbGV0ZWRMb2FkKCk7CkBAIC0yMDUsOCArMjA0LDYg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIHJlcHJlc2VudGF0aW9uRXhpc3Rz
Rm9yVVJMU2NoZW1lKGNvbnN0IFN0cmluZyYgVVJMU2NoZW1lKTsKICAgICAgICAgU3RyaW5nIGdl
bmVyYXRlZE1JTUVUeXBlRm9yVVJMU2NoZW1lKGNvbnN0IFN0cmluZyYgVVJMU2NoZW1lKTsKIAot
ICAgICAgICB2b2lkIG5vdGlmeUljb25DaGFuZ2VkKCk7Ci0KICAgICAgICAgdm9pZCBjaGVja05h
dmlnYXRpb25Qb2xpY3koY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgTmF2aWdhdGlvblBvbGljeURl
Y2lzaW9uRnVuY3Rpb24gZnVuY3Rpb24sIHZvaWQqIGFyZ3VtZW50KTsKICAgICAgICAgdm9pZCBj
aGVja0NvbnRlbnRQb2xpY3koY29uc3QgU3RyaW5nJiBNSU1FVHlwZSwgQ29udGVudFBvbGljeURl
Y2lzaW9uRnVuY3Rpb24sIHZvaWQqIGFyZ3VtZW50KTsKICAgICAgICAgdm9pZCBjYW5jZWxDb250
ZW50UG9saWN5Q2hlY2soKTsKQEAgLTI1NSwxMCArMjUyLDExIEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogICAgICAgICB2b2lkIGNoYW5nZUxvY2F0aW9uKGNvbnN0IEtVUkwmLCBjb25zdCBTdHJp
bmcmIHJlZmVycmVyLCBib29sIGxvY2tIaXN0b3J5ID0gdHJ1ZSwgYm9vbCBsb2NrQmFja0Zvcndh
cmRMaXN0ID0gdHJ1ZSwgYm9vbCB1c2VyR2VzdHVyZSA9IGZhbHNlLCBib29sIHJlZnJlc2ggPSBm
YWxzZSk7CiAgICAgICAgIHZvaWQgdXJsU2VsZWN0ZWQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jiwg
Y29uc3QgU3RyaW5nJiB0YXJnZXQsIFBhc3NSZWZQdHI8RXZlbnQ+LCBib29sIGxvY2tIaXN0b3J5
LCBib29sIGxvY2tCYWNrRm9yd2FyZExpc3QsIGJvb2wgdXNlckdlc3R1cmUpOwotICAgICAgCiAg
ICAgICAgIGJvb2wgcmVxdWVzdEZyYW1lKEhUTUxGcmFtZU93bmVyRWxlbWVudCosIGNvbnN0IFN0
cmluZyYgdXJsLCBjb25zdCBBdG9taWNTdHJpbmcmIGZyYW1lTmFtZSk7CiAKLSAgICAgICAgdm9p
ZCBzdWJtaXRGb3JtKGNvbnN0IGNoYXIqIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB1cmwsIFBhc3NS
ZWZQdHI8Rm9ybURhdGE+LCBjb25zdCBTdHJpbmcmIHRhcmdldCwgY29uc3QgU3RyaW5nJiBjb250
ZW50VHlwZSwgY29uc3QgU3RyaW5nJiBib3VuZGFyeSwgUGFzc1JlZlB0cjxFdmVudD4sIGJvb2wg
bG9ja0hpc3RvcnksIGJvb2wgbG9ja0JhY2tGb3J3YXJkTGlzdCk7CisgICAgICAgIHZvaWQgc3Vi
bWl0Rm9ybShjb25zdCBjaGFyKiBhY3Rpb24sIGNvbnN0IFN0cmluZyYgdXJsLAorICAgICAgICAg
ICAgUGFzc1JlZlB0cjxGb3JtRGF0YT4sIGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBjb25zdCBTdHJp
bmcmIGNvbnRlbnRUeXBlLCBjb25zdCBTdHJpbmcmIGJvdW5kYXJ5LAorICAgICAgICAgICAgYm9v
bCBsb2NrSGlzdG9yeSwgYm9vbCBsb2NrQmFja0ZvcndhcmRMaXN0LCBQYXNzUmVmUHRyPEV2ZW50
PiwgUGFzc1JlZlB0cjxGb3JtU3RhdGU+KTsKIAogICAgICAgICB2b2lkIHN0b3AoKTsKICAgICAg
ICAgdm9pZCBzdG9wTG9hZGluZyhib29sIHNlbmRVbmxvYWQpOwpAQCAtMzI1LDggKzMyMyw2IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBjb25zdCBLVVJMJiB1cmwoKSBjb25zdCB7
IHJldHVybiBtX1VSTDsgfQogCi0gICAgICAgIHZvaWQgdXBkYXRlQmFzZVVSTEZvckVtcHR5RG9j
dW1lbnQoKTsKLQogICAgICAgICB2b2lkIHNldFJlc3BvbnNlTUlNRVR5cGUoY29uc3QgU3RyaW5n
Jik7CiAgICAgICAgIGNvbnN0IFN0cmluZyYgcmVzcG9uc2VNSU1FVHlwZSgpIGNvbnN0OwogCkBA
IC0zMzYsMTAgKzMzMiw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBmaW5p
c2hlZFBhcnNpbmcoKTsKICAgICAgICAgdm9pZCBjaGVja0NvbXBsZXRlZCgpOwogCi0gICAgICAg
IHZvaWQgY2xlYXJSZWNvcmRlZEZvcm1WYWx1ZXMoKTsKLSAgICAgICAgdm9pZCBzZXRGb3JtQWJv
dXRUb0JlU3VibWl0dGVkKFBhc3NSZWZQdHI8SFRNTEZvcm1FbGVtZW50PiBlbGVtZW50KTsKLSAg
ICAgICAgdm9pZCByZWNvcmRGb3JtVmFsdWUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJp
bmcmIHZhbHVlKTsKLQogICAgICAgICBib29sIGlzQ29tcGxldGUoKSBjb25zdDsKIAogICAgICAg
ICBib29sIHJlcXVlc3RPYmplY3QoUmVuZGVyUGFydCogZnJhbWUsIGNvbnN0IFN0cmluZyYgdXJs
LCBjb25zdCBBdG9taWNTdHJpbmcmIGZyYW1lTmFtZSwKQEAgLTUwMCwyMSArNDkyLDIxIEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBkaXNwYXRjaERpZEZpbmlzaExvYWRpbmco
RG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpOwogCiAgICAgICAgIHN0
YXRpYyBib29sIGlzTG9jYXRpb25DaGFuZ2UoY29uc3QgU2NoZWR1bGVkUmVkaXJlY3Rpb24mKTsK
KyAgICAgICAgdm9pZCBzY2hlZHVsZUZvcm1TdWJtaXNzaW9uKGNvbnN0IEZyYW1lTG9hZFJlcXVl
c3QmLCBib29sIGxvY2tIaXN0b3J5LCBib29sIGxvY2tCYWNrRm9yd2FyZExpc3QsIFBhc3NSZWZQ
dHI8RXZlbnQ+LCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4pOwogCi0gICAgICAgIHZvaWQgbG9hZFdp
dGhEb2N1bWVudExvYWRlcihEb2N1bWVudExvYWRlciosIEZyYW1lTG9hZFR5cGUsIFBhc3NSZWZQ
dHI8Rm9ybVN0YXRlPik7ICAgICAgICAgLy8gQ2FsbHMgY29udGludWVMb2FkQWZ0ZXJOYXZpZ2F0
aW9uUG9saWN5Ci0gICAgICAgIHZvaWQgbG9hZChEb2N1bWVudExvYWRlciopOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
Q2FsbHMgbG9hZFdpdGhEb2N1bWVudExvYWRlciAgIAorICAgICAgICB2b2lkIGxvYWRXaXRoRG9j
dW1lbnRMb2FkZXIoRG9jdW1lbnRMb2FkZXIqLCBGcmFtZUxvYWRUeXBlLCBQYXNzUmVmUHRyPEZv
cm1TdGF0ZT4pOyAvLyBDYWxscyBjb250aW51ZUxvYWRBZnRlck5hdmlnYXRpb25Qb2xpY3kKKyAg
ICAgICAgdm9pZCBsb2FkKERvY3VtZW50TG9hZGVyKik7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FsbHMgbG9hZFdpdGhEb2N1bWVu
dExvYWRlciAgIAogCi0gICAgICAgIHZvaWQgbG9hZFdpdGhOYXZpZ2F0aW9uQWN0aW9uKGNvbnN0
IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IE5hdmlnYXRpb25BY3Rpb24mLCAgICAgICAgICAgICAg
Ly8gQ2FsbHMgbG9hZFdpdGhEb2N1bWVudExvYWRlcigpCisgICAgICAgIHZvaWQgbG9hZFdpdGhO
YXZpZ2F0aW9uQWN0aW9uKGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IE5hdmlnYXRpb25B
Y3Rpb24mLCAgICAgIC8vIENhbGxzIGxvYWRXaXRoRG9jdW1lbnRMb2FkZXIKICAgICAgICAgICAg
IGJvb2wgbG9ja0hpc3RvcnksIEZyYW1lTG9hZFR5cGUsIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPik7
CiAKLSAgICAgICAgdm9pZCBsb2FkUG9zdFJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jiwg
Y29uc3QgU3RyaW5nJiByZWZlcnJlciwgICAgICAgICAgICAgICAgICAgICAgICAvLyBDYWxsZWQg
YnkgbG9hZEZyYW1lUmVxdWVzdFdpdGhGb3JtQW5kVmFsdWVzKCksIGNhbGxzIGxvYWRXaXRoTmF2
aWdhdGlvbkFjdGlvbgorICAgICAgICB2b2lkIGxvYWRQb3N0UmVxdWVzdChjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmLCBjb25zdCBTdHJpbmcmIHJlZmVycmVyLCAgICAgICAgICAgICAgICAvLyBDYWxs
ZWQgYnkgbG9hZEZyYW1lUmVxdWVzdCwgY2FsbHMgbG9hZFdpdGhOYXZpZ2F0aW9uQWN0aW9uCiAg
ICAgICAgICAgICBjb25zdCBTdHJpbmcmIGZyYW1lTmFtZSwgYm9vbCBsb2NrSGlzdG9yeSwgRnJh
bWVMb2FkVHlwZSwgUGFzc1JlZlB0cjxFdmVudD4sIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPik7Ci0K
LSAgICAgICAgdm9pZCBsb2FkVVJMKGNvbnN0IEtVUkwmIG5ld1VSTCwgY29uc3QgU3RyaW5nJiBy
ZWZlcnJlciwgY29uc3QgU3RyaW5nJiBmcmFtZU5hbWUsICAgICAgICAgICAvLyBDYWxsZWQgYnkg
bG9hZEZyYW1lUmVxdWVzdFdpdGhGb3JtQW5kVmFsdWVzKCksIGNhbGxzIGxvYWRXaXRoTmF2aWdh
dGlvbkFjdGlvbiBvciBlbHNlIGRpc3BhdGNoZXMgdG8gbmF2aWdhdGlvbiBwb2xpY3kgZGVsZWdh
dGUgICAgCisgICAgICAgIHZvaWQgbG9hZFVSTChjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiBy
ZWZlcnJlciwgY29uc3QgU3RyaW5nJiBmcmFtZU5hbWUsICAgICAgICAgIC8vIENhbGxlZCBieSBs
b2FkRnJhbWVSZXF1ZXN0LCBjYWxscyBsb2FkV2l0aE5hdmlnYXRpb25BY3Rpb24gb3IgZGlzcGF0
Y2hlcyB0byBuYXZpZ2F0aW9uIHBvbGljeSBkZWxlZ2F0ZQogICAgICAgICAgICAgYm9vbCBsb2Nr
SGlzdG9yeSwgRnJhbWVMb2FkVHlwZSwgUGFzc1JlZlB0cjxFdmVudD4sIFBhc3NSZWZQdHI8Rm9y
bVN0YXRlPik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgCiAKICAgICAgICAgdm9pZCBjbGllbnRSZWRpcmVjdENhbmNlbGxlZE9yRmluaXNo
ZWQoYm9vbCBjYW5jZWxXaXRoTG9hZEluUHJvZ3Jlc3MpOwotICAgICAgICB2b2lkIGNsaWVudFJl
ZGlyZWN0ZWQoY29uc3QgS1VSTCYsIGRvdWJsZSBkZWxheSwgZG91YmxlIGZpcmVEYXRlLCBib29s
IGxvY2tCYWNrRm9yd2FyZExpc3QsIGJvb2wgaXNKYXZhU2NyaXB0Rm9ybUFjdGlvbik7CisgICAg
ICAgIHZvaWQgY2xpZW50UmVkaXJlY3RlZChjb25zdCBLVVJMJiwgZG91YmxlIGRlbGF5LCBkb3Vi
bGUgZmlyZURhdGUsIGJvb2wgbG9ja0JhY2tGb3J3YXJkTGlzdCk7CiAgICAgICAgIGJvb2wgc2hv
dWxkUmVsb2FkKGNvbnN0IEtVUkwmIGN1cnJlbnRVUkwsIGNvbnN0IEtVUkwmIGRlc3RpbmF0aW9u
VVJMKTsKIAogICAgICAgICB2b2lkIHNlbmRSZW1haW5pbmdEZWxlZ2F0ZU1lc3NhZ2VzKHVuc2ln
bmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYsIGludCBsZW5ndGgs
IGNvbnN0IFJlc291cmNlRXJyb3ImKTsKQEAgLTUyNyw5ICs1MTksNiBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKICAgICAgICAgRnJhbWUqIGxvYWRTdWJmcmFtZShIVE1MRnJhbWVPd25lckVsZW1l
bnQqLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHJlZmVy
cmVyKTsKIAotICAgICAgICB2b2lkIHN1Ym1pdEZvcm1BZ2FpbigpOwotICAgICAgICB2b2lkIHN1
Ym1pdEZvcm0oY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYsIFBhc3NSZWZQdHI8RXZlbnQ+LCBib29s
IGxvY2tIaXN0b3J5LCBib29sIGxvY2tCYWNrRm9yd2FyZExpc3QpOwotCiAgICAgICAgIEtVUkwg
aGlzdG9yeVVSTChpbnQgZGlzdGFuY2UpOwogCiAgICAgICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBh
cmd1bWVudCBpcyBhIEphdmFTY3JpcHQgVVJMLgpAQCAtNTgxLDEyICs1NzAsOSBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgbV9xdWlja1JlZGlyZWN0Q29taW5nOwogICAgICAg
ICBib29sIG1fc2VudFJlZGlyZWN0Tm90aWZpY2F0aW9uOwogICAgICAgICBib29sIG1faW5TdG9w
QWxsTG9hZGVyczsKLSAgICAgICAgYm9vbCBtX25hdmlnYXRpb25EdXJpbmdMb2FkOwogCiAgICAg
ICAgIFN0cmluZyBtX291dGdvaW5nUmVmZXJyZXI7CiAKLSAgICAgICAgT3duUHRyPEZvcm1TdWJt
aXNzaW9uPiBtX2RlZmVycmVkRm9ybVN1Ym1pc3Npb247Ci0KICAgICAgICAgYm9vbCBtX2lzRXhl
Y3V0aW5nSmF2YVNjcmlwdEZvcm1BY3Rpb247CiAgICAgICAgIGJvb2wgbV9pc1J1bm5pbmdTY3Jp
cHQ7CiAKQEAgLTYxNiw4ICs2MDIsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAg
Ym9vbCBtX2NvbnRhaW5zUGx1Z0luczsKIAotICAgICAgICBSZWZQdHI8SFRNTEZvcm1FbGVtZW50
PiBtX2Zvcm1BYm91dFRvQmVTdWJtaXR0ZWQ7Ci0gICAgICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJp
bmc+IG1fZm9ybVZhbHVlc0Fib3V0VG9CZVN1Ym1pdHRlZDsKICAgICAgICAgS1VSTCBtX3N1Ym1p
dHRlZEZvcm1VUkw7CiAgICAgCiAgICAgICAgIFRpbWVyPEZyYW1lTG9hZGVyPiBtX3JlZGlyZWN0
aW9uVGltZXI7CkluZGV4OiBXZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcAkocmV2
aXNpb24gNDIxNTApCisrKyBXZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzcsMTEgKzM3LDEzIEBACiAjaW5jbHVkZSAiRXZlbnQuaCIKICNp
bmNsdWRlICJFdmVudEhhbmRsZXIuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisjaW5jbHVk
ZSAiRm9ybVN0YXRlLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRl
ci5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZFJlcXVlc3QuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVx
dWVzdC5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKKyNpbmNsdWRlICJIVE1MRm9ybUVs
ZW1lbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiTW91
c2VFdmVudC5oIgogI2luY2x1ZGUgIk5vZGUuaCIKQEAgLTIxMiwxMCArMjE0LDEwIEBAIHZvaWQg
Q29udGV4dE1lbnVDb250cm9sbGVyOjpjb250ZXh0TWVudUkKICAgICAgICAgICAgIG1fY2xpZW50
LT5sb29rVXBJbkRpY3Rpb25hcnkoZnJhbWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnT3Blbkxpbms6Ci0gICAgICAgICAgICBpZiAoRnJhbWUq
IHRhcmdldEZyYW1lID0gcmVzdWx0LnRhcmdldEZyYW1lKCkpCi0gICAgICAgICAgICAgICAgdGFy
Z2V0RnJhbWUtPmxvYWRlcigpLT5sb2FkRnJhbWVSZXF1ZXN0V2l0aEZvcm1BbmRWYWx1ZXMoRnJh
bWVMb2FkUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QocmVzdWx0LmFic29sdXRlTGlua1VSTCgpLCAK
LSAgICAgICAgICAgICAgICAgICAgZnJhbWUtPmxvYWRlcigpLT5vdXRnb2luZ1JlZmVycmVyKCkp
KSwgZmFsc2UsIGZhbHNlLCAwLCAwLCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPigpKTsKLSAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlmIChGcmFtZSogdGFyZ2V0RnJhbWUgPSByZXN1bHQu
dGFyZ2V0RnJhbWUoKSkgeworICAgICAgICAgICAgICAgIHRhcmdldEZyYW1lLT5sb2FkZXIoKS0+
bG9hZEZyYW1lUmVxdWVzdChGcmFtZUxvYWRSZXF1ZXN0KFJlc291cmNlUmVxdWVzdChyZXN1bHQu
YWJzb2x1dGVMaW5rVVJMKCksIAorICAgICAgICAgICAgICAgICAgICBmcmFtZS0+bG9hZGVyKCkt
Pm91dGdvaW5nUmVmZXJyZXIoKSkpLCBmYWxzZSwgZmFsc2UsIDAsIDApOworICAgICAgICAgICAg
fSBlbHNlCiAgICAgICAgICAgICAgICAgb3Blbk5ld1dpbmRvdyhyZXN1bHQuYWJzb2x1dGVMaW5r
VVJMKCksIGZyYW1lKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENvbnRleHRN
ZW51SXRlbVRhZ0JvbGQ6CkluZGV4OiBXZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGFnZS9GcmFtZS5jcHAJKHJldmlzaW9uIDQyMTUwKQorKysgV2ViQ29yZS9w
YWdlL0ZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTczLDcgKzE3Myw2IEBAIEZyYW1lOjpG
cmFtZShQYWdlKiBwYWdlLCBIVE1MRnJhbWVPd25lckUKIEZyYW1lOjp+RnJhbWUoKQogewogICAg
IHNldFZpZXcoMCk7Ci0gICAgbG9hZGVyKCktPmNsZWFyUmVjb3JkZWRGb3JtVmFsdWVzKCk7CiAg
ICAgbG9hZGVyKCktPmNhbmNlbEFuZENsZWFyKCk7CiAgICAgCiAgICAgLy8gRklYTUU6IFdlIHNo
b3VsZCBub3QgYmUgZG9pbmcgYWxsIHRoaXMgd29yayBpbnNpZGUgdGhlIGRlc3RydWN0b3IKSW5k
ZXg6IFdlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvQ2hhbmdl
TG9nCShyZXZpc2lvbiA0MjE1MCkKKysrIFdlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMDktMDQtMDEgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBw
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEJ1ZyAyMjM3ODogQ3Jhc2ggc3VibWl0dGluZyBhIGZvcm0gd2hlbiBwYXJzaW5nIGFuIFhIVE1M
IGRvY3VtZW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMjM3OAorICAgICAgICByZGFyOi8vcHJvYmxlbS82Mzg4Mzc3CisKKyAgICAgICAgKiBIaXN0
b3J5L1dlYkhpc3RvcnlJdGVtLm1tOgorICAgICAgICAoLVtXZWJIaXN0b3J5SXRlbSB0YXJnZXRJ
dGVtXSk6IENhbGwgdGFyZ2V0SXRlbSBkaXJlY3RseSBpbnN0ZWFkIG9mIGNhbGxsaW5nCisgICAg
ICAgIGlzVGFyZ2V0SXRlbSwgaGFzQ2hpbGRyZW4sIGFuZCByZWN1cnNlVG9GaW5kVGFyZ2V0SXRl
bS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tOgor
ICAgICAgICAoV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoV2lsbFN1Ym1pdEZvcm0pOiBV
cGRhdGVkIGZvciB0aGUgbmV3CisgICAgICAgIHRleHRGaWVsZFZhbHVlcyBmdW5jdGlvbiBpbiBG
b3JtU3RhdGUuCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYlBERlZpZXcubW06CisgICAgICAgICgt
W1dlYlBERlZpZXcgUERGVmlld1dpbGxDbGlja09uTGluazp3aXRoVVJMOl0pOiBVcGRhdGVkIGZv
ciBuYW1lIGFuZAorICAgICAgICBhcmd1bWVudCBjaGFuZ2Ugb2YgbG9hZEZyYW1lUmVxdWVzdC4K
KwogMjAwOS0wMy0zMSAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IEFkYW0gUm9iZW4uCkluZGV4OiBXZWJLaXQvbWFjL0hpc3Rvcnkv
V2ViSGlzdG9yeUl0ZW0ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9IaXN0b3J5L1dlYkhp
c3RvcnlJdGVtLm1tCShyZXZpc2lvbiA0MjE1MCkKKysrIFdlYktpdC9tYWMvSGlzdG9yeS9XZWJI
aXN0b3J5SXRlbS5tbQkod29ya2luZyBjb3B5KQpAQCAtMjE4LDcgKzIxOCw4IEBAIHZvaWQgV0tO
b3RpZnlIaXN0b3J5SXRlbUNoYW5nZWQoKQogICAgIEhpc3RvcnlJdGVtKiBjb3JlSXRlbSA9IGNv
cmUoX3ByaXZhdGUpOwogICAgIE5TTXV0YWJsZVN0cmluZyAqcmVzdWx0ID0gW05TTXV0YWJsZVN0
cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUAgJUAiLCBbc3VwZXIgZGVzY3JpcHRpb25dLCAoTlNT
dHJpbmcqKWNvcmVJdGVtLT51cmxTdHJpbmcoKV07CiAgICAgaWYgKGNvcmVJdGVtLT50YXJnZXQo
KSkgewotICAgICAgICBbcmVzdWx0IGFwcGVuZEZvcm1hdDpAIiBpbiBcIiVAXCIiLCAoTlNTdHJp
bmcqKWNvcmVJdGVtLT50YXJnZXQoKV07CisgICAgICAgIE5TU3RyaW5nICp0YXJnZXQgPSBjb3Jl
SXRlbS0+dGFyZ2V0KCk7CisgICAgICAgIFtyZXN1bHQgYXBwZW5kRm9ybWF0OkAiIGluIFwiJUBc
IiIsIHRhcmdldF07CiAgICAgfQogICAgIGlmIChjb3JlSXRlbS0+aXNUYXJnZXRJdGVtKCkpIHsK
ICAgICAgICAgW3Jlc3VsdCBhcHBlbmRTdHJpbmc6QCIgKnRhcmdldCoiXTsKQEAgLTU3NywxMCAr
NTc4LDcgQEAgc3RhdGljIFdlYldpbmRvd1dhdGNoZXIgKl93aW5kb3dXYXRjaGVyIAogLSAoV2Vi
SGlzdG9yeUl0ZW0gKil0YXJnZXRJdGVtCiB7ICAgIAogICAgIEFTU0VSVF9NQUlOX1RIUkVBRCgp
OwotICAgIEhpc3RvcnlJdGVtKiBjb3JlSXRlbSA9IGNvcmUoX3ByaXZhdGUpOwotICAgIGlmIChj
b3JlSXRlbS0+aXNUYXJnZXRJdGVtKCkgfHwgIWNvcmVJdGVtLT5oYXNDaGlsZHJlbigpKQotICAg
ICAgICByZXR1cm4gc2VsZjsKLSAgICByZXR1cm4ga2l0KGNvcmVJdGVtLT5yZWN1cnNlVG9GaW5k
VGFyZ2V0SXRlbSgpKTsKKyAgICByZXR1cm4ga2l0KGNvcmUoX3ByaXZhdGUpLT50YXJnZXRJdGVt
KCkpOwogfQogCiArICh2b2lkKV9yZWxlYXNlQWxsUGVuZGluZ1BhZ2VDYWNoZXMKSW5kZXg6IFdl
YktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5tbQko
cmV2aXNpb24gNDIxNTApCisrKyBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9h
ZGVyQ2xpZW50Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC02OTksMTAgKzY5OSwxMSBAQCB2b2lkIFdl
YkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaFdpbGxTCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBOU011dGFibGVEaWN0aW9uYXJ5ICpkaWN0aW9uYXJ5ID0gW1tOU011dGFibGVEaWN0
aW9uYXJ5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OmZvcm1TdGF0ZS0+dmFsdWVzKCkuc2l6ZSgp
XTsKLSAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gZm9y
bVN0YXRlLT52YWx1ZXMoKS5lbmQoKTsKLSAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+
Ojpjb25zdF9pdGVyYXRvciBpdCA9IGZvcm1TdGF0ZS0+dmFsdWVzKCkuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KQotICAgICAgICBbZGljdGlvbmFyeSBzZXRPYmplY3Q6aXQtPnNlY29uZCBmb3JL
ZXk6aXQtPmZpcnN0XTsKKyAgICBjb25zdCBTdHJpbmdQYWlyVmVjdG9yJiB0ZXh0RmllbGRWYWx1
ZXMgPSBmb3JtU3RhdGUtPnRleHRGaWVsZFZhbHVlcygpOworICAgIHNpemVfdCBzaXplID0gdGV4
dEZpZWxkVmFsdWVzLnNpemUoKTsKKyAgICBOU011dGFibGVEaWN0aW9uYXJ5ICpkaWN0aW9uYXJ5
ID0gW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OnNpemVdOwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICBbZGljdGlvbmFy
eSBzZXRPYmplY3Q6dGV4dEZpZWxkVmFsdWVzW2ldLnNlY29uZCBmb3JLZXk6dGV4dEZpZWxkVmFs
dWVzW2ldLmZpcnN0XTsKIAogICAgIENhbGxGb3JtRGVsZWdhdGUoZ2V0V2ViVmlldyhtX3dlYkZy
YW1lLmdldCgpKSwgQHNlbGVjdG9yKGZyYW1lOnNvdXJjZUZyYW1lOndpbGxTdWJtaXRGb3JtOndp
dGhWYWx1ZXM6c3VibWlzc2lvbkxpc3RlbmVyOiksIG1fd2ViRnJhbWUuZ2V0KCksIGtpdChmb3Jt
U3RhdGUtPnNvdXJjZUZyYW1lKCkpLCBraXQoZm9ybVN0YXRlLT5mb3JtKCkpLCBkaWN0aW9uYXJ5
LCBzZXRVcFBvbGljeUxpc3RlbmVyKGZ1bmN0aW9uKS5nZXQoKSk7CiAKSW5kZXg6IFdlYktpdC9t
YWMvV2ViVmlldy9XZWJQREZWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViVmll
dy9XZWJQREZWaWV3Lm1tCShyZXZpc2lvbiA0MjE1MCkKKysrIFdlYktpdC9tYWMvV2ViVmlldy9X
ZWJQREZWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC00Nyw5ICs0NywxMSBAQAogI2ltcG9ydCAiV2ViVmlld0ludGVybmFsLmgiCiAjaW1w
b3J0IDxQREZLaXQvUERGS2l0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0V2ZW50TmFtZXMuaD4KKyNp
bXBvcnQgPFdlYkNvcmUvRm9ybVN0YXRlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lLmg+Ci0j
aW1wb3J0IDxXZWJDb3JlL0ZyYW1lTG9hZGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lTG9h
ZFJlcXVlc3QuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRnJhbWVMb2FkZXIuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvSFRNTEZvcm1FbGVtZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0tVUkwuaD4KICNpbXBv
cnQgPFdlYkNvcmUvS2V5Ym9hcmRFdmVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9Nb3VzZUV2ZW50
Lmg+CkBAIC05NDEsMTYgKzk0MywxNyBAQCBzdGF0aWMgQk9PTCBfUERGU2VsZWN0aW9uc0FyZUVx
dWFsKFBERlNlCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBicmVhazsKICAgICB9Ci0g
ICAgaWYgKGJ1dHRvbiAhPSBub0J1dHRvbikKKyAgICBpZiAoYnV0dG9uICE9IG5vQnV0dG9uKSB7
CiAgICAgICAgIGV2ZW50ID0gTW91c2VFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5jbGlja0V2
ZW50LCB0cnVlLCB0cnVlLCAwLCBbbnNFdmVudCBjbGlja0NvdW50XSwgMCwgMCwgMCwgMCwKICAg
ICAgICAgICAgIFtuc0V2ZW50IG1vZGlmaWVyRmxhZ3NdICYgTlNDb250cm9sS2V5TWFzaywKICAg
ICAgICAgICAgIFtuc0V2ZW50IG1vZGlmaWVyRmxhZ3NdICYgTlNBbHRlcm5hdGVLZXlNYXNrLAog
ICAgICAgICAgICAgW25zRXZlbnQgbW9kaWZpZXJGbGFnc10gJiBOU1NoaWZ0S2V5TWFzaywKICAg
ICAgICAgICAgIFtuc0V2ZW50IG1vZGlmaWVyRmxhZ3NdICYgTlNDb21tYW5kS2V5TWFzaywKICAg
ICAgICAgICAgIGJ1dHRvbiwgMCwgMCwgdHJ1ZSk7CisgICAgfQogCiAgICAgLy8gQ2FsbCB0byB0
aGUgZnJhbWUgbG9hZGVyIGJlY2F1c2UgdGhpcyBpcyB3aGVyZSBvdXIgc2VjdXJpdHkgY2hlY2tz
IGFyZSBtYWRlLgotICAgIGNvcmUoW2RhdGFTb3VyY2Ugd2ViRnJhbWVdKS0+bG9hZGVyKCktPmxv
YWRGcmFtZVJlcXVlc3RXaXRoRm9ybUFuZFZhbHVlcyhSZXNvdXJjZVJlcXVlc3QoVVJMKSwgZmFs
c2UsIGZhbHNlLCBldmVudC5nZXQoKSwgMCwgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4oKSk7Cisg
ICAgY29yZShbZGF0YVNvdXJjZSB3ZWJGcmFtZV0pLT5sb2FkZXIoKS0+bG9hZEZyYW1lUmVxdWVz
dChSZXNvdXJjZVJlcXVlc3QoVVJMKSwgZmFsc2UsIGZhbHNlLCBldmVudC5nZXQoKSwgMCk7CiB9
CiAKIC0gKHZvaWQpUERGVmlld09wZW5QREZJbk5hdGl2ZUFwcGxpY2F0aW9uOihQREZWaWV3ICop
c2VuZGVyCkluZGV4OiBXZWJLaXQvd2luL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
d2luL0NoYW5nZUxvZwkocmV2aXNpb24gNDIxNTApCisrKyBXZWJLaXQvd2luL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDA5LTA0LTAxICBEYXJpbiBBZGxlciAg
PGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBCdWcgMjIzNzg6IENyYXNoIHN1Ym1pdHRpbmcgYSBmb3JtIHdoZW4gcGFyc2lu
ZyBhbiBYSFRNTCBkb2N1bWVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjIzNzgKKyAgICAgICAgcmRhcjovL3Byb2JsZW0vNjM4ODM3NworCisgICAg
ICAgICogV2ViRnJhbWUuY3BwOgorICAgICAgICAoV2ViRnJhbWU6OmRpc3BhdGNoV2lsbFN1Ym1p
dEZvcm0pOiBVcGRhdGVkIGZvciB0aGUgbmV3CisgICAgICAgIHRleHRGaWVsZFZhbHVlcyBmdW5j
dGlvbiBpbiBGb3JtU3RhdGUuCisKIDIwMDktMDMtMzAgIEFkYW0gUm9iZW4gIDxhcm9iZW5AYXBw
bGUuY29tPgogCiAgICAgICAgIEJ1aWxkIGZpeGVzIGFmdGVyIHJlY2VudCBGcmFtZUxvYWRlciBj
aGFuZ2VzCkluZGV4OiBXZWJLaXQvd2luL1dlYkZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQvd2luL1dlYkZyYW1lLmNwcAkocmV2aXNpb24gNDIxNTApCisrKyBXZWJLaXQvd2luL1dlYkZy
YW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMxNSw3ICsxMzE1LDEzIEBAIHZvaWQgV2ViRnJh
bWU6OmRpc3BhdGNoV2lsbFN1Ym1pdEZvcm0oRnIKIAogICAgIENPTVB0cjxJRE9NRWxlbWVudD4g
Zm9ybUVsZW1lbnQoQWRvcHRDT00sIERPTUVsZW1lbnQ6OmNyZWF0ZUluc3RhbmNlKGZvcm1TdGF0
ZS0+Zm9ybSgpKSk7CiAKLSAgICBDT01QdHI8SVByb3BlcnR5QmFnPiBmb3JtVmFsdWVzUHJvcGVy
dHlCYWcoQWRvcHRDT00sIENPTVByb3BlcnR5QmFnPFN0cmluZz46OmNyZWF0ZUluc3RhbmNlKGZv
cm1TdGF0ZS0+dmFsdWVzKCkpKTsKKyAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBmb3JtVmFs
dWVzTWFwOworICAgIGNvbnN0IFN0cmluZ1BhaXJWZWN0b3ImIHRleHRGaWVsZFZhbHVlcyA9IGZv
cm1TdGF0ZS0+dGV4dEZpZWxkVmFsdWVzKCk7CisgICAgc2l6ZV90IHNpemUgPSB0ZXh0RmllbGRW
YWx1ZXMuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAg
ICAgICBmb3JtVmFsdWVzTWFwLmFkZCh0ZXh0RmllbGRWYWx1ZXNbaV0uZmlyc3QsIHRleHRGaWVs
ZFZhbHVlc1tpXS5zZWNvbmQpOworCisgICAgQ09NUHRyPElQcm9wZXJ0eUJhZz4gZm9ybVZhbHVl
c1Byb3BlcnR5QmFnKEFkb3B0Q09NLCBDT01Qcm9wZXJ0eUJhZzxTdHJpbmc+OjpjcmVhdGVJbnN0
YW5jZShmb3JtVmFsdWVzTWFwKSk7CiAKICAgICBDT01QdHI8V2ViRnJhbWU+IHNvdXJjZUZyYW1l
KGtpdChmb3JtU3RhdGUtPnNvdXJjZUZyYW1lKCkpKTsKICAgICBpZiAoU1VDQ0VFREVEKGZvcm1E
ZWxlZ2F0ZS0+d2lsbFN1Ym1pdEZvcm0odGhpcywgc291cmNlRnJhbWUuZ2V0KCksIGZvcm1FbGVt
ZW50LmdldCgpLCBmb3JtVmFsdWVzUHJvcGVydHlCYWcuZ2V0KCksIHNldFVwUG9saWN5TGlzdGVu
ZXIoZnVuY3Rpb24pLmdldCgpKSkpCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA0MjE1NCkKKysrIExheW91
dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM1IEBACisyMDA5LTA0
LTAxICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCdWcgMjIzNzg6IENyYXNoIHN1Ym1pdHRpbmcg
YSBmb3JtIHdoZW4gcGFyc2luZyBhbiBYSFRNTCBkb2N1bWVudAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIzNzgKKyAgICAgICAgcmRhcjovL3Byb2Js
ZW0vNjM4ODM3NworCisgICAgICAgICogZmFzdC9sb2FkZXIvb251bmxvYWQtZm9ybS1zdWJtaXQt
Y3Jhc2gtMi1leHBlY3RlZC50eHQ6IFVwZGF0ZWQgZm9yIGNoYW5nZSB0byB0aGUgdGVzdC4KKyAg
ICAgICAgKiBmYXN0L2xvYWRlci9vbnVubG9hZC1mb3JtLXN1Ym1pdC1jcmFzaC0yLmh0bWw6IFVw
ZGF0ZWQgdGVzdCB0byBleHBlY3QgdGhlIGZvcm0gc3VibWlzc2lvbgorICAgICAgICBkdXJpbmcg
dGhlIG9udW5sb2FkIGhhbmRsZXIgdG8gYmUgaW5lZmZlY3RpdmUuCisgICAgICAgICogZmFzdC9s
b2FkZXIvb251bmxvYWQtZm9ybS1zdWJtaXQtY3Jhc2gtZXhwZWN0ZWQudHh0OiBVcGRhdGVkIGZv
ciBjaGFuZ2UgdG8gdGhlIHRlc3QuCisgICAgICAgICogZmFzdC9sb2FkZXIvb251bmxvYWQtZm9y
bS1zdWJtaXQtY3Jhc2guaHRtbDogVXBkYXRlZCB0ZXN0IHRvIGV4cGVjdCB0aGUgZm9ybSBzdWJt
aXNzaW9uCisgICAgICAgIGR1cmluZyB0aGUgb251bmxvYWQgaGFuZGxlciB0byBiZSBpbmVmZmVj
dGl2ZS4KKworICAgICAgICAqIGZhc3QvbG9hZGVyL3Jlc291cmNlcy9vbnVubG9hZC1mb3JtLXN1
Ym1pdC1jcmFzaDIuaHRtbDogUmVtb3ZlZC4KKyAgICAgICAgKiBmYXN0L2xvYWRlci9yZXNvdXJj
ZXMvb251bmxvYWQtZm9ybS1zdWJtaXQtZmFpbHVyZS5odG1sOiBDb3BpZWQgZnJvbQorICAgICAg
ICBMYXlvdXRUZXN0cy9mYXN0L2xvYWRlci9yZXNvdXJjZXMvb251bmxvYWQtZm9ybS1zdWJtaXQt
Y3Jhc2gyLmh0bWwuCisgICAgICAgICogZmFzdC9sb2FkZXIvcmVzb3VyY2VzL29udW5sb2FkLWZv
cm0tc3VibWl0LXN1Y2Nlc3MuaHRtbDogQ29waWVkIGZyb20KKyAgICAgICAgTGF5b3V0VGVzdHMv
ZmFzdC9sb2FkZXIvcmVzb3VyY2VzL29udW5sb2FkLWZvcm0tc3VibWl0LWNyYXNoMi5odG1sLgor
CisgICAgICAgICogZmFzdC9sb2FkZXIvcmVzb3VyY2VzL3N1Ym1pdC1mb3JtLXdoaWxlLXBhcnNp
bmctc3ViZnJhbWUuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9sb2FkZXIvcmVzb3VyY2Vz
L3N1Ym1pdC1mb3JtLXdoaWxlLXBhcnNpbmctc3VjY2Vzcy5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L2xvYWRlci9zdWJtaXQtZm9ybS13aGlsZS1wYXJzaW5nLTEtZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBmYXN0L2xvYWRlci9zdWJtaXQtZm9ybS13aGlsZS1wYXJzaW5nLTEu
eGh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvbG9hZGVyL3N1Ym1pdC1mb3JtLXdoaWxlLXBh
cnNpbmctMi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvbG9hZGVyL3N1Ym1p
dC1mb3JtLXdoaWxlLXBhcnNpbmctMi5odG1sOiBBZGRlZC4KKworICAgICAgICAqIHBsYXRmb3Jt
L21hYy9odHRwL3Rlc3RzL25hdmlnYXRpb24vc3VjY2VzczIwMC1mcmFtZXMtbG9hZHNhbWUtZXhw
ZWN0ZWQudHh0OiBVcGRhdGVkCisgICAgICAgIHRvIGV4cGVjdCBwcm9wZXIgcmVzdWx0cywgd2l0
aG91dCB0aGUgZHVwbGljYXRlIGhpc3RvcnkgaXRlbXMgZm9yIHRoZSBzYW1lIGZyYW1lIG5hbWUK
KyAgICAgICAgdGhhdCB3ZXJlIHByZXNlbnQgYmVmb3JlLgorCiAyMDA5LTA0LTAxICBUb255IENo
YW5nICA8dG9ueUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gRmlz
aGVyLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIvb251bmxvYWQtZm9ybS1zdWJtaXQt
Y3Jhc2gtMi1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9sb2Fk
ZXIvb251bmxvYWQtZm9ybS1zdWJtaXQtY3Jhc2gtMi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDQy
MTUwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIvb251bmxvYWQtZm9ybS1zdWJtaXQtY3Jh
c2gtMi1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyIEBACiBtYWluIGZy
YW1lIC0gaGFzIDEgb251bmxvYWQgaGFuZGxlcihzKQotbWFpbiBmcmFtZSAtIGhhcyAxIG9udW5s
b2FkIGhhbmRsZXIocykKLVNVQ0NFU1MKK1NVQ0NFU1MuIElmIHlvdSBzZWUgdGhpcyBwYWdlIHRo
ZSB0ZXN0IGhhcyBzdWNjZXNzZnVsbHkgbG9hZGVkIGEgbmV3IHBhZ2Ugd2l0aG91dCBjcmFzaGlu
ZyBvciBzdWJtaXR0aW5nIGEgZm9ybSBmcm9tIGFuIG9udW5sb2FkIGhhbmRsZXIuCkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L2xvYWRlci9vbnVubG9hZC1mb3JtLXN1Ym1pdC1jcmFzaC0yLmh0bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIvb251bmxvYWQtZm9ybS1zdWJt
aXQtY3Jhc2gtMi5odG1sCShyZXZpc2lvbiA0MjE1MCkKKysrIExheW91dFRlc3RzL2Zhc3QvbG9h
ZGVyL29udW5sb2FkLWZvcm0tc3VibWl0LWNyYXNoLTIuaHRtbAkod29ya2luZyBjb3B5KQpAQCAt
OSw5ICs5LDkgQEAKICAgICAgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVt
cEFzVGV4dCgpOwogICAgICAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0
VW50aWxEb25lKCk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGxvY2F0aW9u
LmhyZWYgPSAiYWJvdXQ6YmxhbmsiOworICAgICAgICAgICAgICAgIGxvY2F0aW9uLmhyZWYgPSAi
cmVzb3VyY2VzL29udW5sb2FkLWZvcm0tc3VibWl0LXN1Y2Nlc3MuaHRtbCI7CiAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXN1
bHQiKS5pbm5lclRleHQgPSAiU1VDQ0VTUyI7CisgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoInJlc3VsdCIpLmlubmVyVGV4dCA9ICJGQUlMIjsKICAgICAgICAgICAgICAg
ICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQogICAgICAgICAgICAgICAgICAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CiAgICAgICAgICAgICB9CkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L2xvYWRlci9vbnVubG9hZC1mb3JtLXN1Ym1pdC1jcmFzaC1leHBlY3Rl
ZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIvb251bmxvYWQtZm9y
bS1zdWJtaXQtY3Jhc2gtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA0MjE1MCkKKysrIExheW91dFRl
c3RzL2Zhc3QvbG9hZGVyL29udW5sb2FkLWZvcm0tc3VibWl0LWNyYXNoLWV4cGVjdGVkLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDIgQEAKIG1haW4gZnJhbWUgLSBoYXMgMSBvbnVubG9h
ZCBoYW5kbGVyKHMpCi1CdWc6IHJkYXI6Ly9wcm9ibGVtLzQyNjgyNzggU3VibWl0dGluZyBhIGZv
cm0gaW4gb25VbmxvYWQgZXZlbnQgaGFuZGxlciBjYXVzZXMgY3Jhc2ggaW4gLVtXZWJEYXRhU291
cmNlKFdlYlByaXZhdGUpIF9jb21taXRJZlJlYWR5Ol0KLQotSWYgdGhpcyB0ZXN0IHBhc3Nlcywg
eW91J2xsIHNlZSBhIFBBU1MgbWVzc2FnZSBiZWxvdy4KLQotUEFTUzogU2FmYXJpIGRpZG4ndCBj
cmFzaC4KK1NVQ0NFU1MuIElmIHlvdSBzZWUgdGhpcyBwYWdlIHRoZSB0ZXN0IGhhcyBzdWNjZXNz
ZnVsbHkgbG9hZGVkIGEgbmV3IHBhZ2Ugd2l0aG91dCBjcmFzaGluZyBvciBzdWJtaXR0aW5nIGEg
Zm9ybSBmcm9tIGFuIG9udW5sb2FkIGhhbmRsZXIuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2xv
YWRlci9vbnVubG9hZC1mb3JtLXN1Ym1pdC1jcmFzaC5odG1sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2Zhc3QvbG9hZGVyL29udW5sb2FkLWZvcm0tc3VibWl0LWNyYXNoLmh0bWwJKHJldmlz
aW9uIDQyMTUwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIvb251bmxvYWQtZm9ybS1zdWJt
aXQtY3Jhc2guaHRtbAkod29ya2luZyBjb3B5KQpAQCAtNiw3ICs2LDcgQEAKICAgICAgICAgICAg
ICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CiAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCJsb2NhdGlvbi5ocmVmPWxvY2F0aW9u
LmhyZWYiLCAwKTsgLy8gY2hlYXAgd2F5IHRvIGZvcmNlIGFuIHVubG9hZAorICAgICAgICAgICAg
d2luZG93LnNldFRpbWVvdXQoImxvY2F0aW9uLmhyZWY9J3Jlc291cmNlcy9vbnVubG9hZC1mb3Jt
LXN1Ym1pdC1zdWNjZXNzLmh0bWwnIiwgMCk7CiAgICAgICAgIDwvc2NyaXB0PgogICAgICAgICA8
cD5UaGlzIGlzIGp1c3QgYSBkdW1teSBwYWdlIHRoYXQgbG9hZHMgdGhlIG5leHQgcGFnZSB0byBz
ZWUgaWYgd2UgY3Jhc2guPC9wPgogICAgICAgICA8Zm9ybSBuYW1lPSJteUZvcm0iIGFjdGlvbj0i
cmVzb3VyY2VzL29udW5sb2FkLWZvcm0tc3VibWl0LWNyYXNoMi5odG1sIj48L2Zvcm0+CkluZGV4
OiBMYXlvdXRUZXN0cy9mYXN0L2xvYWRlci9zdWJtaXQtZm9ybS13aGlsZS1wYXJzaW5nLTEtZXhw
ZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3N1Ym1pdC1m
b3JtLXdoaWxlLXBhcnNpbmctMS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9mYXN0L2xvYWRlci9zdWJtaXQtZm9ybS13aGlsZS1wYXJzaW5nLTEtZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxIEBACitQQVNTRUQ6IElmIHdlIHN1Y2Nlc3NmdWxseSBn
b3QgaGVyZSB3aXRob3V0IGFuIGFzc2VydGlvbiBvciBjcmFzaCwgYWxsIGlzIHdlbGwuCgpQcm9w
ZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9mYXN0L2xvYWRlci9zdWJtaXQtZm9ybS13aGls
ZS1wYXJzaW5nLTEtZXhwZWN0ZWQudHh0Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUK
ICAgKyBuYXRpdmUKCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2xvYWRlci9zdWJtaXQtZm9ybS13
aGlsZS1wYXJzaW5nLTEueGh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9sb2Fk
ZXIvc3VibWl0LWZvcm0td2hpbGUtcGFyc2luZy0xLnhodG1sCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvZmFzdC9sb2FkZXIvc3VibWl0LWZvcm0td2hpbGUtcGFyc2luZy0xLnhodG1sCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5n
PSJ1dGYtOCI/Pg0KKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4w
IFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1s
MS10cmFuc2l0aW9uYWwuZHRkIj4NCis8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5
OS94aHRtbCIgeG1sOmxhbmc9ImVuIiBsYW5nPSJlbiI+DQorPGJvZHk+DQorPGZvcm0gbmFtZT0i
Zm9ybSIgbWV0aG9kPSJQT1NUIiBhY3Rpb249InJlc291cmNlcy9zdWJtaXQtZm9ybS13aGlsZS1w
YXJzaW5nLXN1Y2Nlc3MuaHRtbCIvPg0KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4N
Cis8IVtDREFUQVsNCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7DQorICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsNCisgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIud2FpdFVudGlsRG9uZSgpOw0KK30NCitkb2N1bWVudC5mb3Jtcy5mb3JtLnN1Ym1pdCgpOw0K
K11dPg0KKzwvc2NyaXB0Pg0KKzwvYm9keT4NCis8L2h0bWw+DQpJbmRleDogTGF5b3V0VGVzdHMv
ZmFzdC9sb2FkZXIvc3VibWl0LWZvcm0td2hpbGUtcGFyc2luZy0yLWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2xvYWRlci9zdWJtaXQtZm9ybS13aGlsZS1wYXJz
aW5nLTItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9sb2Fk
ZXIvc3VibWl0LWZvcm0td2hpbGUtcGFyc2luZy0yLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwzIEBACitQQVNTRUQ6IElmIHdlIHN1Y2Nlc3NmdWxseSBnb3QgaGVyZSB3aXRo
b3V0IGFuIGFzc2VydGlvbiBvciBjcmFzaCwgYWxsIGlzIHdlbGwuCisKKwoKUHJvcGVydHkgY2hh
bmdlcyBvbjogTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIvc3VibWl0LWZvcm0td2hpbGUtcGFyc2lu
Zy0yLWV4cGVjdGVkLnR4dApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0
aXZlCgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIvc3VibWl0LWZvcm0td2hpbGUtcGFy
c2luZy0yLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIvc3VibWl0
LWZvcm0td2hpbGUtcGFyc2luZy0yLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9m
YXN0L2xvYWRlci9zdWJtaXQtZm9ybS13aGlsZS1wYXJzaW5nLTIuaHRtbAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw0MCBAQAorPHNjcmlwdD4KKwordmFyIGZyYW1lSXNMb2FkZWQgPSBmYWxzZTsK
K3ZhciB0ZXN0SXNTdGFydGVkID0gZmFsc2U7CisKK2Z1bmN0aW9uIHN0YXJ0VGVzdCgpCit7Cisg
ICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndh
aXRVbnRpbERvbmUoKTsKKyAgICB9CisKKyAgICB0ZXN0SXNTdGFydGVkID0gdHJ1ZTsKKyAgICBp
ZiAoZnJhbWVJc0xvYWRlZCkKKyAgICAgICAgZnJhbWVMb2FkZWQoKTsKK30KKworZnVuY3Rpb24g
ZnJhbWVMb2FkZWQoKQoreworICAgIGlmICghdGVzdElzU3RhcnRlZCkgeworICAgICAgICBmcmFt
ZUlzTG9hZGVkID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgnZnJhbWUnKS5jb250ZW50V2luZG93LmxvY2F0aW9uICE9ICJh
Ym91dDpibGFuayIpIHsKKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1lc3NhZ2Ui
KS5maXJzdENoaWxkLmRhdGEgPSAiRkFJTEVEOiBTdWJmcmFtZSBoYWQgdGhlIHdyb25nIGxvY2F0
aW9uIjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJtZXNzYWdlIikuZmlyc3RDaGlsZC5kYXRhID0gIlBBU1NFRDogSWYgd2Ugc3VjY2Vzc2Z1
bGx5IGdvdCBoZXJlIHdpdGhvdXQgYW4gYXNzZXJ0aW9uIG9yIGNyYXNoLCBhbGwgaXMgd2VsbC4i
OworCisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCis8L3NjcmlwdD4KKzxib2R5IG9ubG9h
ZD0ic3RhcnRUZXN0KCkiPgorPHAgaWQ9Im1lc3NhZ2UiPlRFU1QgRElEIE5PVCBSVU4gWUVUPC9w
PgorPGlmcmFtZSBzcmM9InJlc291cmNlcy9zdWJtaXQtZm9ybS13aGlsZS1wYXJzaW5nLXN1YmZy
YW1lLmh0bWwiIGlkPSJmcmFtZSIgb25sb2FkPSJmcmFtZUxvYWRlZCgpIj48L2lmcmFtZT4KKzwv
Ym9keT4KClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3N1Ym1p
dC1mb3JtLXdoaWxlLXBhcnNpbmctMi5odG1sCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjptaW1lLXR5
cGUKICAgKyB0ZXh0L2h0bWwKQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCkluZGV4
OiBMYXlvdXRUZXN0cy9mYXN0L2xvYWRlci9yZXNvdXJjZXMvb251bmxvYWQtZm9ybS1zdWJtaXQt
Y3Jhc2gyLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIvcmVzb3Vy
Y2VzL29udW5sb2FkLWZvcm0tc3VibWl0LWNyYXNoMi5odG1sCShyZXZpc2lvbiA0MjE1MCkKKysr
IExheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3Jlc291cmNlcy9vbnVubG9hZC1mb3JtLXN1Ym1pdC1j
cmFzaDIuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMSwyNCArMCwwIEBACi08aHRtbD4KLSAgICA8
aGVhZD4KLSAgICAgICAgPHNjcmlwdD4KLSAgICAgICAgICAgIGZ1bmN0aW9uIHByaW50KG1lc3Nh
Z2UpIHsKLSAgICAgICAgICAgICAgICB2YXIgcGFyYWdyYXBoID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgicCIpOwotICAgICAgICAgICAgICAgIHBhcmFncmFwaC5hcHBlbmRDaGlsZChkb2N1bWVu
dC5jcmVhdGVUZXh0Tm9kZShtZXNzYWdlKSk7Ci0gICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoImNvbnNvbGUiKS5hcHBlbmRDaGlsZChwYXJhZ3JhcGgpOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBmdW5jdGlvbiBjb250aW51ZVRlc3RBZnRlck5hdmlnYXRpb24o
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpCi0gICAgICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlm
eURvbmUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgPC9zY3JpcHQ+Ci0gICAgPC9oZWFkPgot
Ci0gICAgPGJvZHkgb25sb2FkPSJjb250aW51ZVRlc3RBZnRlck5hdmlnYXRpb24oKSI+Ci0gICAg
ICAgIDxwPkJ1ZzogcmRhcjovL3Byb2JsZW0vNDI2ODI3OCBTdWJtaXR0aW5nIGEgZm9ybSBpbiBv
blVubG9hZCBldmVudCBoYW5kbGVyIGNhdXNlcyBjcmFzaCBpbiAtW1dlYkRhdGFTb3VyY2UoV2Vi
UHJpdmF0ZSkgX2NvbW1pdElmUmVhZHk6XTwvcD4gCi0gICAgICAgIDxwPklmIHRoaXMgdGVzdCBw
YXNzZXMsIHlvdSdsbCBzZWUgYSBQQVNTIG1lc3NhZ2UgYmVsb3cuPC9wPgotICAgICAgICA8aHI+
Ci0gICAgICAgIDxwPlBBU1M6IFNhZmFyaSBkaWRuJ3QgY3Jhc2guPC9wPgotICAgIDwvYm9keT4K
LTxodG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IExheW91dFRlc3RzL2Zh
c3QvbG9hZGVyL3Jlc291cmNlcy9vbnVubG9hZC1mb3JtLXN1Ym1pdC1mYWlsdXJlLmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIvcmVzb3VyY2VzL29udW5sb2FkLWZv
cm0tc3VibWl0LWZhaWx1cmUuaHRtbAkocmV2aXNpb24gNDIxNTApCShmcm9tIExheW91dFRlc3Rz
L2Zhc3QvbG9hZGVyL3Jlc291cmNlcy9vbnVubG9hZC1mb3JtLXN1Ym1pdC1jcmFzaDIuaHRtbDo0
MjE1MCkKKysrIExheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3Jlc291cmNlcy9vbnVubG9hZC1mb3Jt
LXN1Ym1pdC1mYWlsdXJlLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNCBAQAorPGh0
bWw+CisgICAgPGhlYWQ+CisgICAgICAgIDxzY3JpcHQ+CisgICAgICAgICAgICBmdW5jdGlvbiBw
cmludChtZXNzYWdlKSB7CisgICAgICAgICAgICAgICAgdmFyIHBhcmFncmFwaCA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoInAiKTsKKyAgICAgICAgICAgICAgICBwYXJhZ3JhcGguYXBwZW5kQ2hp
bGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobWVzc2FnZSkpOworICAgICAgICAgICAgICAgIGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlIikuYXBwZW5kQ2hpbGQocGFyYWdyYXBoKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZnVuY3Rpb24gY29udGludWVUZXN0QWZ0ZXJO
YXZpZ2F0aW9uKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAod2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJv
bGxlci5ub3RpZnlEb25lKCk7CisgICAgICAgICAgICB9CisgICAgICAgIDwvc2NyaXB0PgorICAg
IDwvaGVhZD4KKworICAgIDxib2R5IG9ubG9hZD0iY29udGludWVUZXN0QWZ0ZXJOYXZpZ2F0aW9u
KCkiPgorICAgICAgICA8cD5CdWc6IHJkYXI6Ly9wcm9ibGVtLzQyNjgyNzggU3VibWl0dGluZyBh
IGZvcm0gaW4gb25VbmxvYWQgZXZlbnQgaGFuZGxlciBjYXVzZXMgY3Jhc2ggaW4gLVtXZWJEYXRh
U291cmNlKFdlYlByaXZhdGUpIF9jb21taXRJZlJlYWR5Ol08L3A+IAorICAgICAgICA8cD5JZiB0
aGlzIHRlc3QgcGFzc2VzLCB5b3UnbGwgc2VlIGEgUEFTUyBtZXNzYWdlIGJlbG93LjwvcD4KKyAg
ICAgICAgPGhyPgorICAgICAgICA8cD5QQVNTOiBTYWZhcmkgZGlkbid0IGNyYXNoLjwvcD4KKyAg
ICA8L2JvZHk+Cis8aHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L2xvYWRlci9yZXNvdXJjZXMvb251bmxvYWQtZm9ybS1zdWJtaXQtZmFpbHVy
ZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3Jlc291cmNlcy9v
bnVubG9hZC1mb3JtLXN1Ym1pdC1mYWlsdXJlLmh0bWwJKHJldmlzaW9uIDQyMTUwKQorKysgTGF5
b3V0VGVzdHMvZmFzdC9sb2FkZXIvcmVzb3VyY2VzL29udW5sb2FkLWZvcm0tc3VibWl0LWZhaWx1
cmUuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMSwxMiArMSw2IEBACiA8aHRtbD4KICAgICA8aGVh
ZD4KICAgICAgICAgPHNjcmlwdD4KLSAgICAgICAgICAgIGZ1bmN0aW9uIHByaW50KG1lc3NhZ2Up
IHsKLSAgICAgICAgICAgICAgICB2YXIgcGFyYWdyYXBoID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgicCIpOwotICAgICAgICAgICAgICAgIHBhcmFncmFwaC5hcHBlbmRDaGlsZChkb2N1bWVudC5j
cmVhdGVUZXh0Tm9kZShtZXNzYWdlKSk7Ci0gICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoImNvbnNvbGUiKS5hcHBlbmRDaGlsZChwYXJhZ3JhcGgpOwotICAgICAgICAgICAg
fQotCiAgICAgICAgICAgICBmdW5jdGlvbiBjb250aW51ZVRlc3RBZnRlck5hdmlnYXRpb24oKQog
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpCkBAIC0xOSw2ICsxMyw2IEBACiAgICAgICAgIDxwPkJ1ZzogcmRhcjovL3Byb2JsZW0v
NDI2ODI3OCBTdWJtaXR0aW5nIGEgZm9ybSBpbiBvblVubG9hZCBldmVudCBoYW5kbGVyIGNhdXNl
cyBjcmFzaCBpbiAtW1dlYkRhdGFTb3VyY2UoV2ViUHJpdmF0ZSkgX2NvbW1pdElmUmVhZHk6XTwv
cD4gCiAgICAgICAgIDxwPklmIHRoaXMgdGVzdCBwYXNzZXMsIHlvdSdsbCBzZWUgYSBQQVNTIG1l
c3NhZ2UgYmVsb3cuPC9wPgogICAgICAgICA8aHI+Ci0gICAgICAgIDxwPlBBU1M6IFNhZmFyaSBk
aWRuJ3QgY3Jhc2guPC9wPgorICAgICAgICA8cD5GQUlMOiBZb3Ugc2hvdWxkIG5vdCByZWFjaCB0
aGlzIHBhZ2UgYW55IG1vcmUsIHNpbmNlIGEgZm9ybSBzdWJtaXNzaW9uIGluIGFuIG9udW5sb2Fk
IGhhbmRsZXIgaGFzIG5vIGVmZmVjdC48L3A+CiAgICAgPC9ib2R5PgotPGh0bWw+ClwgTm8gbmV3
bGluZSBhdCBlbmQgb2YgZmlsZQorPGh0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2xvYWRl
ci9yZXNvdXJjZXMvb251bmxvYWQtZm9ybS1zdWJtaXQtc3VjY2Vzcy5odG1sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3Jlc291cmNlcy9vbnVubG9hZC1mb3JtLXN1Ym1p
dC1zdWNjZXNzLmh0bWwJKHJldmlzaW9uIDQyMTUwKQkoZnJvbSBMYXlvdXRUZXN0cy9mYXN0L2xv
YWRlci9yZXNvdXJjZXMvb251bmxvYWQtZm9ybS1zdWJtaXQtY3Jhc2gyLmh0bWw6NDIxNTApCisr
KyBMYXlvdXRUZXN0cy9mYXN0L2xvYWRlci9yZXNvdXJjZXMvb251bmxvYWQtZm9ybS1zdWJtaXQt
c3VjY2Vzcy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjQgQEAKKzxodG1sPgorICAg
IDxoZWFkPgorICAgICAgICA8c2NyaXB0PgorICAgICAgICAgICAgZnVuY3Rpb24gcHJpbnQobWVz
c2FnZSkgeworICAgICAgICAgICAgICAgIHZhciBwYXJhZ3JhcGggPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJwIik7CisgICAgICAgICAgICAgICAgcGFyYWdyYXBoLmFwcGVuZENoaWxkKGRvY3Vt
ZW50LmNyZWF0ZVRleHROb2RlKG1lc3NhZ2UpKTsKKyAgICAgICAgICAgICAgICBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgiY29uc29sZSIpLmFwcGVuZENoaWxkKHBhcmFncmFwaCk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGZ1bmN0aW9uIGNvbnRpbnVlVGVzdEFmdGVyTmF2aWdhdGlv
bigpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0
Q29udHJvbGxlcikKKyAgICAgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90
aWZ5RG9uZSgpOworICAgICAgICAgICAgfQorICAgICAgICA8L3NjcmlwdD4KKyAgICA8L2hlYWQ+
CisKKyAgICA8Ym9keSBvbmxvYWQ9ImNvbnRpbnVlVGVzdEFmdGVyTmF2aWdhdGlvbigpIj4KKyAg
ICAgICAgPHA+QnVnOiByZGFyOi8vcHJvYmxlbS80MjY4Mjc4IFN1Ym1pdHRpbmcgYSBmb3JtIGlu
IG9uVW5sb2FkIGV2ZW50IGhhbmRsZXIgY2F1c2VzIGNyYXNoIGluIC1bV2ViRGF0YVNvdXJjZShX
ZWJQcml2YXRlKSBfY29tbWl0SWZSZWFkeTpdPC9wPiAKKyAgICAgICAgPHA+SWYgdGhpcyB0ZXN0
IHBhc3NlcywgeW91J2xsIHNlZSBhIFBBU1MgbWVzc2FnZSBiZWxvdy48L3A+CisgICAgICAgIDxo
cj4KKyAgICAgICAgPHA+UEFTUzogU2FmYXJpIGRpZG4ndCBjcmFzaC48L3A+CisgICAgPC9ib2R5
PgorPGh0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogTGF5b3V0VGVzdHMv
ZmFzdC9sb2FkZXIvcmVzb3VyY2VzL29udW5sb2FkLWZvcm0tc3VibWl0LXN1Y2Nlc3MuaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2xvYWRlci9yZXNvdXJjZXMvb251bmxvYWQt
Zm9ybS1zdWJtaXQtc3VjY2Vzcy5odG1sCShyZXZpc2lvbiA0MjE1MCkKKysrIExheW91dFRlc3Rz
L2Zhc3QvbG9hZGVyL3Jlc291cmNlcy9vbnVubG9hZC1mb3JtLXN1Ym1pdC1zdWNjZXNzLmh0bWwJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMTIgKzEsNiBAQAogPGh0bWw+CiAgICAgPGhlYWQ+CiAgICAg
ICAgIDxzY3JpcHQ+Ci0gICAgICAgICAgICBmdW5jdGlvbiBwcmludChtZXNzYWdlKSB7Ci0gICAg
ICAgICAgICAgICAgdmFyIHBhcmFncmFwaCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInAiKTsK
LSAgICAgICAgICAgICAgICBwYXJhZ3JhcGguYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4
dE5vZGUobWVzc2FnZSkpOwotICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJjb25zb2xlIikuYXBwZW5kQ2hpbGQocGFyYWdyYXBoKTsKLSAgICAgICAgICAgIH0KLQogICAg
ICAgICAgICAgZnVuY3Rpb24gY29udGludWVUZXN0QWZ0ZXJOYXZpZ2F0aW9uKCkKICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQpA
QCAtMTYsOSArMTAsNiBAQAogICAgIDwvaGVhZD4KIAogICAgIDxib2R5IG9ubG9hZD0iY29udGlu
dWVUZXN0QWZ0ZXJOYXZpZ2F0aW9uKCkiPgotICAgICAgICA8cD5CdWc6IHJkYXI6Ly9wcm9ibGVt
LzQyNjgyNzggU3VibWl0dGluZyBhIGZvcm0gaW4gb25VbmxvYWQgZXZlbnQgaGFuZGxlciBjYXVz
ZXMgY3Jhc2ggaW4gLVtXZWJEYXRhU291cmNlKFdlYlByaXZhdGUpIF9jb21taXRJZlJlYWR5Ol08
L3A+IAotICAgICAgICA8cD5JZiB0aGlzIHRlc3QgcGFzc2VzLCB5b3UnbGwgc2VlIGEgUEFTUyBt
ZXNzYWdlIGJlbG93LjwvcD4KLSAgICAgICAgPGhyPgotICAgICAgICA8cD5QQVNTOiBTYWZhcmkg
ZGlkbid0IGNyYXNoLjwvcD4KKyAgICAgICAgPHA+U1VDQ0VTUy4gSWYgeW91IHNlZSB0aGlzIHBh
Z2UgdGhlIHRlc3QgaGFzIHN1Y2Nlc3NmdWxseSBsb2FkZWQgYSBuZXcgcGFnZSB3aXRob3V0IGNy
YXNoaW5nIG9yIHN1Ym1pdHRpbmcgYSBmb3JtIGZyb20gYW4gb251bmxvYWQgaGFuZGxlci48L3A+
CiAgICAgPC9ib2R5PgotPGh0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorPGh0bWw+
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2xvYWRlci9yZXNvdXJjZXMvc3VibWl0LWZvcm0td2hp
bGUtcGFyc2luZy1zdWJmcmFtZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qv
bG9hZGVyL3Jlc291cmNlcy9zdWJtaXQtZm9ybS13aGlsZS1wYXJzaW5nLXN1YmZyYW1lLmh0bWwJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2xvYWRlci9yZXNvdXJjZXMvc3VibWl0
LWZvcm0td2hpbGUtcGFyc2luZy1zdWJmcmFtZS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDkgQEAKKzxmb3JtIG5hbWU9ImZvcm0iIG1ldGhvZD0iUE9TVCIgYWN0aW9uPSJhYm91dDpibGFu
ayI+PC9mb3JtPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoraWYgKHdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1Rl
eHQoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Cit9Citkb2N1
bWVudC5mb3Jtcy5mb3JtLnN1Ym1pdCgpOworc2V0VGltZW91dCgibG9jYXRpb249J3Jlc291cmNl
cy9zdWJtaXQtZm9ybS13aGlsZS1wYXJzaW5nLXN1Y2Nlc3MuaHRtbCciLCAwKTsKKzwvc2NyaXB0
PgoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIvcmVzb3VyY2Vz
L3N1Ym1pdC1mb3JtLXdoaWxlLXBhcnNpbmctc3ViZnJhbWUuaHRtbApfX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVk
OiBzdm46bWltZS10eXBlCiAgICsgdGV4dC9odG1sCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsg
bmF0aXZlCgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIvcmVzb3VyY2VzL3N1Ym1pdC1m
b3JtLXdoaWxlLXBhcnNpbmctc3VjY2Vzcy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2Zhc3QvbG9hZGVyL3Jlc291cmNlcy9zdWJtaXQtZm9ybS13aGlsZS1wYXJzaW5nLXN1Y2Nlc3Mu
aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3Jlc291cmNlcy9z
dWJtaXQtZm9ybS13aGlsZS1wYXJzaW5nLXN1Y2Nlc3MuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSBAQAorPGJvZHkgb25sb2FkPSJsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCki
PlBBU1NFRDogSWYgd2Ugc3VjY2Vzc2Z1bGx5IGdvdCBoZXJlIHdpdGhvdXQgYW4gYXNzZXJ0aW9u
IG9yIGNyYXNoLCBhbGwgaXMgd2VsbC48L2JvZHk+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlv
dXRUZXN0cy9mYXN0L2xvYWRlci9yZXNvdXJjZXMvc3VibWl0LWZvcm0td2hpbGUtcGFyc2luZy1z
dWNjZXNzLmh0bWwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOm1pbWUtdHlwZQogICArIHRleHQvaHRt
bApBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIG5hdGl2ZQoKSW5kZXg6IExheW91dFRlc3RzL3Bs
YXRmb3JtL21hYy9odHRwL3Rlc3RzL25hdmlnYXRpb24vc3VjY2VzczIwMC1mcmFtZXMtbG9hZHNh
bWUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9o
dHRwL3Rlc3RzL25hdmlnYXRpb24vc3VjY2VzczIwMC1mcmFtZXMtbG9hZHNhbWUtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiA0MjE1MCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9odHRwL3Rl
c3RzL25hdmlnYXRpb24vc3VjY2VzczIwMC1mcmFtZXMtbG9hZHNhbWUtZXhwZWN0ZWQudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC0xMjYsNyArMTI2LDUgQEAgbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4
NjAwCiAgICAgICAgIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3N1Y2Nlc3MyMDAt
ZnJhbWVzLWxvYWRzYW1lLmh0bWwgICoqbmF2IHRhcmdldCoqCiBjdXJyLT4gIGh0dHA6Ly8xMjcu
MC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy9mcmFtZXNldC5wbD9mcmFtZVVSTD1zdWNj
ZXNzMjAwLmh0bWwgICoqbmF2IHRhcmdldCoqCiAgICAgICAgICAgICBodHRwOi8vMTI3LjAuMC4x
OjgwMDAvbmF2aWdhdGlvbi9yZXNvdXJjZXMvb3RoZXJwYWdlLmh0bWwgKGluIGZyYW1lICJmb290
ZXIiKQotICAgICAgICAgICAgaHR0cDovLzEyNy4wLjAuMTo4MDAwL25hdmlnYXRpb24vcmVzb3Vy
Y2VzL290aGVycGFnZS5odG1sIChpbiBmcmFtZSAiZm9vdGVyIikKLSAgICAgICAgICAgIGh0dHA6
Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy9zdWNjZXNzMjAwLmh0bWwgKGlu
IGZyYW1lICJtYWluIikKICAgICAgICAgICAgIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0
aW9uL3Jlc291cmNlcy9zdWNjZXNzMjAwLmh0bWwgKGluIGZyYW1lICJtYWluIikKID09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cg==
</data>
<flag name="review"
          id="14467"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>