<?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>21214</bug_id>
          
          <creation_ts>2008-09-29 09:05:18 -0700</creation_ts>
          <short_desc>speed up function calls by eliminating the need for a new ExecState each time</short_desc>
          <delta_ts>2008-10-02 16:38:51 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>21295</dup_id>
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>eric</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>93232</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-09-29 09:05:18 -0700</bug_when>
    <thetext>Looks like I&apos;m going to get rid of ExecState altogether and make the pointer we pass everywhere be a JSGlobalData pointer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93237</commentid>
    <comment_count>1</comment_count>
      <attachid>23910</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-09-29 09:40:33 -0700</bug_when>
    <thetext>Created attachment 23910
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93238</commentid>
    <comment_count>2</comment_count>
      <attachid>23911</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-09-29 09:41:17 -0700</bug_when>
    <thetext>Created attachment 23911
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93307</commentid>
    <comment_count>3</comment_count>
      <attachid>23924</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-09-29 17:38:24 -0700</bug_when>
    <thetext>Created attachment 23924
patch that removes some unused ExecState cruft</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93320</commentid>
    <comment_count>4</comment_count>
      <attachid>23924</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-09-29 18:14:56 -0700</bug_when>
    <thetext>Comment on attachment 23924
patch that removes some unused ExecState cruft

Clearing review flag since this was landed.

http://trac.webkit.org/changeset/37088</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93321</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-09-29 18:16:31 -0700</bug_when>
    <thetext>Interesting.  If ExecState dies, the &quot;ExceptionHolder&quot; abstraction we built to replace ExecState* for NodeFitler, NodeIterator, TreeWalker, etc.  will have to be re-thought.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93462</commentid>
    <comment_count>6</comment_count>
      <attachid>23961</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-09-30 16:24:15 -0700</bug_when>
    <thetext>Created attachment 23961
patch that removes m_prev from ExecState</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93463</commentid>
    <comment_count>7</comment_count>
      <attachid>23961</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-09-30 16:30:48 -0700</bug_when>
    <thetext>Comment on attachment 23961
patch that removes m_prev from ExecState

r=me

Please check SunSpider before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93465</commentid>
    <comment_count>8</comment_count>
      <attachid>23961</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-09-30 16:47:17 -0700</bug_when>
    <thetext>Comment on attachment 23961
patch that removes m_prev from ExecState

Clearing review flag since this is landed.

http://trac.webkit.org/changeset/37125</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93601</commentid>
    <comment_count>9</comment_count>
      <attachid>23994</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-10-01 14:04:01 -0700</bug_when>
    <thetext>Created attachment 23994
patch to remove some uses of dynamicGlobalObject</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93613</commentid>
    <comment_count>10</comment_count>
      <attachid>23994</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-10-01 15:12:39 -0700</bug_when>
    <thetext>Comment on attachment 23994
patch to remove some uses of dynamicGlobalObject

None of these dynamic -&gt; lexical change behavior?  It&apos;s not possible to override the object prototype I assume? (thus it&apos;s functionally equivalent to ask on either global object?)  The shell ones I would believe, since no one really cares about the shell, the Object.prototype I have less context for to make an informed decision.

Otherwise looks fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93637</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-10-01 18:29:14 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; None of these dynamic -&gt; lexical change behavior?  It&apos;s not possible to
&gt; override the object prototype I assume? (thus it&apos;s functionally equivalent to
&gt; ask on either global object?)  The shell ones I would believe, since no one
&gt; really cares about the shell, the Object.prototype I have less context for to
&gt; make an informed decision.

As Geoff explained to me, the general principle here is that the dynamic global object (bad name we should improve) is never the correct one for security purposes because it corresponds to the page where the current code started from, not the page that corresponds to the code being run.

There is a change in behavior, but not for the web browser. Only in obscure cases of use of the JavaScriptCore API. I&apos;ll think about whether I can make a test case to demonstrate the improvement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93638</commentid>
    <comment_count>12</comment_count>
      <attachid>23994</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-10-01 18:30:56 -0700</bug_when>
    <thetext>Comment on attachment 23994
patch to remove some uses of dynamicGlobalObject

Clearing review flag since this was landed.

http://trac.webkit.org/changeset/37175</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93821</commentid>
    <comment_count>13</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-10-02 16:38:51 -0700</bug_when>
    <thetext>

*** This bug has been marked as a duplicate of 21295 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23910</attachid>
            <date>2008-09-29 09:40:33 -0700</date>
            <delta_ts>2008-09-29 09:40:33 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>ExecStatePatch1.txt</filename>
            <type>text/plain</type>
            <size>50238</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJKHJldmlzaW9uIDM3MDM2KQorKysgSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDUsNyAr
MTQ1LDcgQEAgX19aTjNKU0MxNEpTR2xvYmFsT2JqZWN0MTZzdG9wVGltZW91dENoZQogX19aTjNK
U0MxNEpTR2xvYmFsT2JqZWN0MTdwdXRXaXRoQXR0cmlidXRlc0VQTlNfOUV4ZWNTdGF0ZUVSS05T
XzEwSWRlbnRpZmllckVQTlNfN0pTVmFsdWVFagogX19aTjNKU0MxNEpTR2xvYmFsT2JqZWN0MTdz
dGFydFRpbWVvdXRDaGVja0V2CiBfX1pOM0pTQzE0SlNHbG9iYWxPYmplY3QzcHV0RVBOU185RXhl
Y1N0YXRlRVJLTlNfMTBJZGVudGlmaWVyRVBOU183SlNWYWx1ZUVSTlNfMTVQdXRQcm9wZXJ0eVNs
b3RFCi1fX1pOM0pTQzE0SlNHbG9iYWxPYmplY3Q0aW5pdEVQTlNfOEpTT2JqZWN0RQorX19aTjNK
U0MxNEpTR2xvYmFsT2JqZWN0NGluaXRFdgogX19aTjNKU0MxNEpTR2xvYmFsT2JqZWN0NG1hcmtF
dgogX19aTjNKU0MxNEpTR2xvYmFsT2JqZWN0RDJFdgogX19aTjNKU0MxNEpTR2xvYmFsT2JqZWN0
bndFbVBOU18xMkpTR2xvYmFsRGF0YUUKSW5kZXg6IEphdmFTY3JpcHRDb3JlL1ZNL0NUSS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvVk0vQ1RJLmNwcAkocmV2aXNpb24gMzcwMzYp
CisrKyBKYXZhU2NyaXB0Q29yZS9WTS9DVEkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MiwxMyAr
ODIsNiBAQCBhc20oCiBhc20oCiAiLmdsb2JsIF9jdGlWTVRocm93VHJhbXBvbGluZSIgIlxuIgog
Il9jdGlWTVRocm93VHJhbXBvbGluZToiICJcbiIKLSNpZm5kZWYgTkRFQlVHCi0gICAgIm1vdmwg
MHgzNCglZXNwKSwgJWVjeCIgIlxuIiAvL094MzQgPSAweDBEICogNCwgMHgwRCA9IENUSV9BUkdT
X2V4ZWMKLSAgICAiY21wbCAkMCwgOCglZWN4KSIgIlxuIgotICAgICJqbmUgMWYiICJcbiIKLSAg
ICAiaW50MyIgIlxuIgotICAgICIxOiIgIlxuIgotI2VuZGlmCiAgICAgImNhbGwgX19aTjNKU0M3
TWFjaGluZTEyY3RpX3ZtX3Rocm93RVB2IiAiXG4iCiAgICAgImFkZGwgJDB4MjQsICVlc3AiICJc
biIKICAgICAicG9wbCAlZWRpIiAiXG4iCkBAIC05NywxMCArOTAsOSBAQCBhc20oCiApOwogICAg
IAogI2VsaWYgQ09NUElMRVIoTVNWQykKLWV4dGVybiAiQyIKLXsKLSAgICAKLSAgICBfX2RlY2xz
cGVjKG5ha2VkKSBKU1ZhbHVlKiBjdGlUcmFtcG9saW5lKHZvaWQqIGNvZGUsIEV4ZWNTdGF0ZSog
ZXhlYywgUmVnaXN0ZXJGaWxlKiByZWdpc3RlckZpbGUsIFJlZ2lzdGVyKiByLCBTY29wZUNoYWlu
Tm9kZSogc2NvcGVDaGFpbiwgSlNWYWx1ZSoqIGV4Y2VwdGlvbiwgUHJvZmlsZXIqKikKK2V4dGVy
biAiQyIgeworCisgICAgX19kZWNsc3BlYyhuYWtlZCkgSlNWYWx1ZSogY3RpVHJhbXBvbGluZSh2
b2lkKiBjb2RlLCBFeGVjU3RhdGUqIGV4ZWMsIFJlZ2lzdGVyRmlsZSogcmVnaXN0ZXJGaWxlLCBS
ZWdpc3RlciogciwgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4sIFByb2ZpbGVyKiopCiAgICAg
ewogICAgICAgICBfX2FzbSB7CiAgICAgICAgICAgICBwdXNoIGVzaTsKQEAgLTIzOSwyMSArMjMx
LDYgQEAgdm9pZCBjdGlSZXBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyh2b2lkKgogCiAjaWZkZWYg
TkRFQlVHCiAKLUFMV0FZU19JTkxJTkUgdm9pZCBDVEk6OmVtaXREZWJ1Z0V4Y2VwdGlvbkNoZWNr
KCkKLXsKLX0KLQotI2Vsc2UKLQotQUxXQVlTX0lOTElORSB2b2lkIENUSTo6ZW1pdERlYnVnRXhj
ZXB0aW9uQ2hlY2soKQotewotICAgIGVtaXRHZXRDVElQYXJhbShDVElfQVJHU19leGVjLCBYODY6
OmVjeCk7Ci0gICAgbV9qaXQuY21wbF9pMzJtKDAsIE9CSkVDVF9PRkZTRVQoRXhlY1N0YXRlLCBt
X2V4Y2VwdGlvbiksIFg4Njo6ZWN4KTsKLSAgICBYODZBc3NlbWJsZXI6OkptcFNyYyBub0V4Y2Vw
dGlvbiA9IG1faml0LmVtaXRVbmxpbmtlZEplKCk7Ci0gICAgbV9qaXQuZW1pdEludDMoKTsKLSAg
ICBtX2ppdC5saW5rKG5vRXhjZXB0aW9uLCBtX2ppdC5sYWJlbCgpKTsKLX0KLQogdm9pZCBDVEk6
OnByaW50T3Bjb2RlT3BlcmFuZFR5cGVzKHVuc2lnbmVkIHNyYzEsIHVuc2lnbmVkIHNyYzIpCiB7
CiAgICAgY2hhciB3aGljaDEgPSAnKic7CkBAIC0yOTQsNyArMjcxLDYgQEAgQUxXQVlTX0lOTElO
RSBYODZBc3NlbWJsZXI6OkptcFNyYyBDVEk6OgogewogICAgIFg4NkFzc2VtYmxlcjo6Sm1wU3Jj
IGNhbGwgPSBtX2ppdC5lbWl0Q2FsbChyKTsKICAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3Jk
KGNhbGwsIG9wY29kZUluZGV4KSk7Ci0gICAgZW1pdERlYnVnRXhjZXB0aW9uQ2hlY2soKTsKIAog
ICAgIHJldHVybiBjYWxsOwogfQpAQCAtMzA2LDcgKzI4Miw2IEBAIEFMV0FZU19JTkxJTkUgWDg2
QXNzZW1ibGVyOjpKbXBTcmMgQ1RJOjoKICNlbmRpZgogICAgIFg4NkFzc2VtYmxlcjo6Sm1wU3Jj
IGNhbGwgPSBtX2ppdC5lbWl0Q2FsbCgpOwogICAgIG1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQo
Y2FsbCwgaGVscGVyLCBvcGNvZGVJbmRleCkpOwotICAgIGVtaXREZWJ1Z0V4Y2VwdGlvbkNoZWNr
KCk7CiAjaWYgRU5BQkxFKFNBTVBMSU5HX1RPT0wpCiAgICAgbV9qaXQubW92bF9pMzJtKDAsICZp
bkNhbGxlZENvZGUpOwogI2VuZGlmCkBAIC0zMjEsNyArMjk2LDYgQEAgQUxXQVlTX0lOTElORSBY
ODZBc3NlbWJsZXI6OkptcFNyYyBDVEk6OgogI2VuZGlmCiAgICAgWDg2QXNzZW1ibGVyOjpKbXBT
cmMgY2FsbCA9IG1faml0LmVtaXRDYWxsKCk7CiAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29y
ZChjYWxsLCBoZWxwZXIsIG9wY29kZUluZGV4KSk7Ci0gICAgZW1pdERlYnVnRXhjZXB0aW9uQ2hl
Y2soKTsKICNpZiBFTkFCTEUoU0FNUExJTkdfVE9PTCkKICAgICBtX2ppdC5tb3ZsX2kzMm0oMCwg
JmluQ2FsbGVkQ29kZSk7CiAjZW5kaWYKQEAgLTMzNiw3ICszMTAsNiBAQCBBTFdBWVNfSU5MSU5F
IFg4NkFzc2VtYmxlcjo6Sm1wU3JjIENUSTo6CiAjZW5kaWYKICAgICBYODZBc3NlbWJsZXI6Okpt
cFNyYyBjYWxsID0gbV9qaXQuZW1pdENhbGwoKTsKICAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVj
b3JkKGNhbGwsIGhlbHBlciwgb3Bjb2RlSW5kZXgpKTsKLSAgICBlbWl0RGVidWdFeGNlcHRpb25D
aGVjaygpOwogI2lmIEVOQUJMRShTQU1QTElOR19UT09MKQogICAgIG1faml0Lm1vdmxfaTMybSgw
LCAmaW5DYWxsZWRDb2RlKTsKICNlbmRpZgpAQCAtMzUxLDcgKzMyNCw2IEBAIEFMV0FZU19JTkxJ
TkUgWDg2QXNzZW1ibGVyOjpKbXBTcmMgQ1RJOjoKICNlbmRpZgogICAgIFg4NkFzc2VtYmxlcjo6
Sm1wU3JjIGNhbGwgPSBtX2ppdC5lbWl0Q2FsbCgpOwogICAgIG1fY2FsbHMuYXBwZW5kKENhbGxS
ZWNvcmQoY2FsbCwgaGVscGVyLCBvcGNvZGVJbmRleCkpOwotICAgIGVtaXREZWJ1Z0V4Y2VwdGlv
bkNoZWNrKCk7CiAjaWYgRU5BQkxFKFNBTVBMSU5HX1RPT0wpCiAgICAgbV9qaXQubW92bF9pMzJt
KDAsICZpbkNhbGxlZENvZGUpOwogI2VuZGlmCkBAIC0zNjYsNyArMzM4LDYgQEAgQUxXQVlTX0lO
TElORSBYODZBc3NlbWJsZXI6OkptcFNyYyBDVEk6OgogI2VuZGlmCiAgICAgWDg2QXNzZW1ibGVy
OjpKbXBTcmMgY2FsbCA9IG1faml0LmVtaXRDYWxsKCk7CiAgICAgbV9jYWxscy5hcHBlbmQoQ2Fs
bFJlY29yZChjYWxsLCBoZWxwZXIsIG9wY29kZUluZGV4KSk7Ci0gICAgZW1pdERlYnVnRXhjZXB0
aW9uQ2hlY2soKTsKICNpZiBFTkFCTEUoU0FNUExJTkdfVE9PTCkKICAgICBtX2ppdC5tb3ZsX2kz
Mm0oMCwgJmluQ2FsbGVkQ29kZSk7CiAjZW5kaWYKQEAgLTE3NzksOCArMTc1MCw5IEBAIHZvaWQg
Q1RJOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgY2FzZSBvcF9jYXRjaDogewog
ICAgICAgICAgICAgZW1pdEdldENUSVBhcmFtKENUSV9BUkdTX3IsIFg4Njo6ZWRpKTsgLy8gZWRp
IDo9IHIKICAgICAgICAgICAgIGVtaXRHZXRDVElQYXJhbShDVElfQVJHU19leGVjLCBYODY6OmVj
eCk7Ci0gICAgICAgICAgICBtX2ppdC5tb3ZsX21yKE9CSkVDVF9PRkZTRVQoRXhlY1N0YXRlLCBt
X2V4Y2VwdGlvbiksIFg4Njo6ZWN4LCBYODY6OmVheCk7Ci0gICAgICAgICAgICBtX2ppdC5tb3Zs
X2kzMm0oMCwgT0JKRUNUX09GRlNFVChFeGVjU3RhdGUsIG1fZXhjZXB0aW9uKSwgWDg2OjplY3gp
OworICAgICAgICAgICAgbV9qaXQubW92bF9tcihPQkpFQ1RfT0ZGU0VUKEV4ZWNTdGF0ZSwgbV9n
bG9iYWxEYXRhKSwgWDg2OjplY3gsIFg4Njo6ZWN4KTsKKyAgICAgICAgICAgIG1faml0Lm1vdmxf
bXIoT0JKRUNUX09GRlNFVChKU0dsb2JhbERhdGEsIGV4Y2VwdGlvbiksIFg4Njo6ZWN4LCBYODY6
OmVheCk7CisgICAgICAgICAgICBtX2ppdC5tb3ZsX2kzMm0oMCwgT0JKRUNUX09GRlNFVChKU0ds
b2JhbERhdGEsIGV4Y2VwdGlvbiksIFg4Njo6ZWN4KTsKICAgICAgICAgICAgIGVtaXRQdXRSZXN1
bHQoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBpICs9IDI7CiAg
ICAgICAgICAgICBicmVhazsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL1ZNL0NUSS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRDb3JlL1ZNL0NUSS5oCShyZXZpc2lvbiAzNzAzNikKKysrIEphdmFT
Y3JpcHRDb3JlL1ZNL0NUSS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NiwxMyArNTYsMTEgQEAKICNk
ZWZpbmUgQ1RJX0FSR1NfcmVnaXN0ZXJGaWxlIDB4MEUKICNkZWZpbmUgQ1RJX0FSR1NfciAweDBG
CiAjZGVmaW5lIENUSV9BUkdTX3Njb3BlQ2hhaW4gMHgxMAotI2RlZmluZSBDVElfQVJHU19leGNl
cHRpb24gMHgxMQotI2RlZmluZSBDVElfQVJHU19wcm9maWxlclJlZmVyZW5jZSAweDEyCisjZGVm
aW5lIENUSV9BUkdTX3Byb2ZpbGVyUmVmZXJlbmNlIDB4MTEKICNkZWZpbmUgQVJHX2V4ZWMgKChF
eGVjU3RhdGUqKShBUkdTKVtDVElfQVJHU19leGVjXSkKICNkZWZpbmUgQVJHX3JlZ2lzdGVyRmls
ZSAoKFJlZ2lzdGVyRmlsZSopKEFSR1MpW0NUSV9BUkdTX3JlZ2lzdGVyRmlsZV0pCiAjZGVmaW5l
IEFSR19yICgoUmVnaXN0ZXIqKShBUkdTKVtDVElfQVJHU19yXSkKICNkZWZpbmUgQVJHX3Njb3Bl
Q2hhaW4gKChTY29wZUNoYWluTm9kZSopKEFSR1MpW0NUSV9BUkdTX3Njb3BlQ2hhaW5dKQotI2Rl
ZmluZSBBUkdfZXhjZXB0aW9uICgoSlNWYWx1ZSoqKShBUkdTKVtDVElfQVJHU19leGNlcHRpb25d
KQogI2RlZmluZSBBUkdfcHJvZmlsZXJSZWZlcmVuY2UgKChQcm9maWxlcioqKShBUkdTKVtDVElf
QVJHU19wcm9maWxlclJlZmVyZW5jZV0pCiAKICNkZWZpbmUgQVJHX3NldFNjb3BlQ2hhaW4obmV3
U2NvcGVDaGFpbikgKCoodm9sYXRpbGUgU2NvcGVDaGFpbk5vZGUqKikmKEFSR1MpW0NUSV9BUkdT
X3Njb3BlQ2hhaW5dID0gbmV3U2NvcGVDaGFpbikKQEAgLTIzNSw3ICsyMzMsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICB9OwogCiAgICAgZXh0ZXJuICJDIiB7Ci0gICAgICAgIEpTVmFsdWUqIGN0
aVRyYW1wb2xpbmUodm9pZCogY29kZSwgRXhlY1N0YXRlKiBleGVjLCBSZWdpc3RlckZpbGUqIHJl
Z2lzdGVyRmlsZSwgUmVnaXN0ZXIqIHIsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluLCBKU1Zh
bHVlKiogZXhjZXB0aW9uLCBQcm9maWxlcioqKTsKKyAgICAgICAgSlNWYWx1ZSogY3RpVHJhbXBv
bGluZSh2b2lkKiBjb2RlLCBFeGVjU3RhdGUqLCBSZWdpc3RlckZpbGUqLCBSZWdpc3RlciosIFNj
b3BlQ2hhaW5Ob2RlKiwgUHJvZmlsZXIqKik7CiAgICAgICAgIHZvaWQgY3RpVk1UaHJvd1RyYW1w
b2xpbmUoKTsKICAgICB9OwogCkBAIC0zMTksOSArMzE3LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgICAgICByZXR1cm4gY3RpLnByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbmd0aChy
ZXR1cm5BZGRyZXNzKTsKICAgICAgICAgfQogCi0gICAgICAgIGlubGluZSBzdGF0aWMgSlNWYWx1
ZSogZXhlY3V0ZSh2b2lkKiBjb2RlLCBFeGVjU3RhdGUqIGV4ZWMsIFJlZ2lzdGVyRmlsZSogcmVn
aXN0ZXJGaWxlLCBSZWdpc3RlciogciwgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4sIEpTVmFs
dWUqKiBleGNlcHRpb24pCisgICAgICAgIGlubGluZSBzdGF0aWMgSlNWYWx1ZSogZXhlY3V0ZSh2
b2lkKiBjb2RlLCBFeGVjU3RhdGUqIGV4ZWMsIFJlZ2lzdGVyRmlsZSogcmVnaXN0ZXJGaWxlLCBS
ZWdpc3RlciogciwgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4pCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIEpTVmFsdWUqIHZhbHVlID0gY3RpVHJhbXBvbGluZShjb2RlLCBleGVjLCByZWdpc3Rl
ckZpbGUsIHIsIHNjb3BlQ2hhaW4sIGV4Y2VwdGlvbiwgUHJvZmlsZXI6OmVuYWJsZWRQcm9maWxl
clJlZmVyZW5jZSgpKTsKKyAgICAgICAgICAgIEpTVmFsdWUqIHZhbHVlID0gY3RpVHJhbXBvbGlu
ZShjb2RlLCBleGVjLCByZWdpc3RlckZpbGUsIHIsIHNjb3BlQ2hhaW4sIFByb2ZpbGVyOjplbmFi
bGVkUHJvZmlsZXJSZWZlcmVuY2UoKSk7CiAjaWYgRU5BQkxFKFNBTVBMSU5HX1RPT0wpCiAgICAg
ICAgICAgICBjdXJyZW50T3Bjb2RlSUQgPSBzdGF0aWNfY2FzdDxPcGNvZGVJRD4oLTEpOwogI2Vu
ZGlmCkBAIC0zODksOCArMzg3LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBl
bWl0VGFnQXNCb29sSW1tZWRpYXRlKFg4NkFzc2VtYmxlcjo6UmVnaXN0ZXJJRCByZWcpOwogCi0g
ICAgICAgIHZvaWQgZW1pdERlYnVnRXhjZXB0aW9uQ2hlY2soKTsKLQogICAgICAgICBYODZBc3Nl
bWJsZXI6OkptcFNyYyBlbWl0Q2FsbCh1bnNpZ25lZCBvcGNvZGVJbmRleCwgWDg2OjpSZWdpc3Rl
cklEKTsKICAgICAgICAgWDg2QXNzZW1ibGVyOjpKbXBTcmMgZW1pdENhbGwodW5zaWduZWQgb3Bj
b2RlSW5kZXgsIENUSUhlbHBlcl9qKTsKICAgICAgICAgWDg2QXNzZW1ibGVyOjpKbXBTcmMgZW1p
dENhbGwodW5zaWduZWQgb3Bjb2RlSW5kZXgsIENUSUhlbHBlcl9wKTsKSW5kZXg6IEphdmFTY3Jp
cHRDb3JlL1ZNL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL1ZNL0Nv
ZGVCbG9jay5oCShyZXZpc2lvbiAzNzAzNikKKysrIEphdmFTY3JpcHRDb3JlL1ZNL0NvZGVCbG9j
ay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDcsNyArMTQ3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
ICAgICBjbGFzcyBFdmFsQ29kZUNhY2hlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIFBhc3NSZWZQ
dHI8RXZhbE5vZGU+IGdldChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFVTdHJpbmcmIGV2YWxTb3Vy
Y2UsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluLCBKU1ZhbHVlKiYgZXhjZXB0aW9uVmFsdWUp
CisgICAgICAgIFBhc3NSZWZQdHI8RXZhbE5vZGU+IGdldChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IFVTdHJpbmcmIGV2YWxTb3VyY2UsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluKQogICAgICAg
ICB7CiAgICAgICAgICAgICBSZWZQdHI8RXZhbE5vZGU+IGV2YWxOb2RlOwogCkBAIC0xNjQsNyAr
MTY0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChldmFsU291
cmNlLnNpemUoKSA8IG1heENhY2hlYWJsZVNvdXJjZUxlbmd0aCAmJiAoKnNjb3BlQ2hhaW4tPmJl
Z2luKCkpLT5pc1ZhcmlhYmxlT2JqZWN0KCkgJiYgY2FjaGVNYXAuc2l6ZSgpIDwgbWF4Q2FjaGVF
bnRyaWVzKQogICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVNYXAuc2V0KGV2YWxTb3VyY2Uu
cmVwKCksIGV2YWxOb2RlKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICBleGNlcHRpb25WYWx1ZSA9IEVycm9yOjpjcmVhdGUoZXhlYywgU3ludGF4RXJyb3Is
IGVyck1zZywgZXJyTGluZSwgc291cmNlSWQsIE5VTEwpOworICAgICAgICAgICAgICAgICAgICBl
eGVjLT5zZXRFeGNlcHRpb24oRXJyb3I6OmNyZWF0ZShleGVjLCBTeW50YXhFcnJvciwgZXJyTXNn
LCBlcnJMaW5lLCBzb3VyY2VJZCwgMCkpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9W
TS9FeGNlcHRpb25IZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9WTS9F
eGNlcHRpb25IZWxwZXJzLmNwcAkocmV2aXNpb24gMzcwMzYpCisrKyBKYXZhU2NyaXB0Q29yZS9W
TS9FeGNlcHRpb25IZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAog
CiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiRXhlY1N0YXRlLmgiCisjaW5jbHVk
ZSAiSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgogI2lu
Y2x1ZGUgIkpTTm90QW5PYmplY3QuaCIKICNpbmNsdWRlICJNYWNoaW5lLmgiCkBAIC0xMDEsOCAr
MTAyLDYgQEAgSlNWYWx1ZSogY3JlYXRlVW5kZWZpbmVkVmFyaWFibGVFcnJvcihFeAogICAgIGV4
Y2VwdGlvbi0+cHV0V2l0aEF0dHJpYnV0ZXMoZXhlYywgSWRlbnRpZmllcihleGVjLCBleHByZXNz
aW9uRW5kT2Zmc2V0UHJvcGVydHlOYW1lKSwganNOdW1iZXIoZXhlYywgZGl2b3RQb2ludCArIGVu
ZE9mZnNldCksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSk7CiAgICAgcmV0dXJuIGV4Y2VwdGlvbjsK
IH0KLSAgICAKLWJvb2wgaXNTdHJXaGl0ZVNwYWNlKFVDaGFyIGMpOwogCiBzdGF0aWMgVVN0cmlu
ZyBjcmVhdGVFcnJvck1lc3NhZ2UoRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgaW50LCBpbnQgZXhwcmVzc2lvblN0YXJ0LCBpbnQgZXhwcmVzc2lvblN0b3AsIEpTVmFsdWUq
IHZhbHVlLCBVU3RyaW5nIGVycm9yKQogewpJbmRleDogSmF2YVNjcmlwdENvcmUvVk0vTWFjaGlu
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvVk0vTWFjaGluZS5jcHAJKHJldmlz
aW9uIDM3MDM2KQorKysgSmF2YVNjcmlwdENvcmUvVk0vTWFjaGluZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTUyNSwxMyArNTI1LDEzIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBNYWNoaW5lOjppbml0
aWFsaXplQ2EKICAgICBjYWxsRnJhbWVbUmVnaXN0ZXJGaWxlOjpPcHRpb25hbENhbGxlZUFjdGl2
YXRpb25dID0gbnVsbEpTVmFsdWU7CiB9CiAKLUFMV0FZU19JTkxJTkUgUmVnaXN0ZXIqIHNsaWRl
UmVnaXN0ZXJXaW5kb3dGb3JDYWxsKEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrKiBuZXdDb2Rl
QmxvY2ssIFJlZ2lzdGVyRmlsZSogcmVnaXN0ZXJGaWxlLCBSZWdpc3RlciogcmVnaXN0ZXJCYXNl
LCBSZWdpc3Rlciogciwgc2l6ZV90IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJnYywgSlNWYWx1ZSom
IGV4Y2VwdGlvblZhbHVlKQorQUxXQVlTX0lOTElORSBSZWdpc3Rlciogc2xpZGVSZWdpc3Rlcldp
bmRvd0ZvckNhbGwoRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxvY2sqIG5ld0NvZGVCbG9jaywgUmVn
aXN0ZXJGaWxlKiByZWdpc3RlckZpbGUsIFJlZ2lzdGVyKiByZWdpc3RlckJhc2UsIFJlZ2lzdGVy
KiByLCBzaXplX3QgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmdjKQogewogICAgIHNpemVfdCBzaXpl
ID0gciAtIHJlZ2lzdGVyQmFzZSArIHJlZ2lzdGVyT2Zmc2V0ICsgbmV3Q29kZUJsb2NrLT5udW1D
YWxsZWVSZWdpc3RlcnM7CiAKICAgICBpZiAoYXJnYyA9PSBuZXdDb2RlQmxvY2stPm51bVBhcmFt
ZXRlcnMpIHsgLy8gY29ycmVjdCBudW1iZXIgb2YgYXJndW1lbnRzCiAgICAgICAgIGlmICghcmVn
aXN0ZXJGaWxlLT5ncm93KHNpemUpKSB7Ci0gICAgICAgICAgICBleGNlcHRpb25WYWx1ZSA9IGNy
ZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihleGVjKTsKKyAgICAgICAgICAgIGV4ZWMtPnNldEV4Y2Vw
dGlvbihjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoZXhlYykpOwogICAgICAgICAgICAgcmV0dXJu
IHI7CiAgICAgICAgIH0KICAgICAgICAgciArPSByZWdpc3Rlck9mZnNldDsKQEAgLTU0MCw3ICs1
NDAsNyBAQCBBTFdBWVNfSU5MSU5FIFJlZ2lzdGVyKiBzbGlkZVJlZ2lzdGVyV2luCiAgICAgICAg
IHJlZ2lzdGVyT2Zmc2V0ICs9IG9taXR0ZWRBcmdDb3VudDsKICAgICAgICAgc2l6ZSArPSBvbWl0
dGVkQXJnQ291bnQ7CiAgICAgICAgIGlmICghcmVnaXN0ZXJGaWxlLT5ncm93KHNpemUpKSB7Ci0g
ICAgICAgICAgICBleGNlcHRpb25WYWx1ZSA9IGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihleGVj
KTsKKyAgICAgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihjcmVhdGVTdGFja092ZXJmbG93RXJy
b3IoZXhlYykpOwogICAgICAgICAgICAgcmV0dXJuIHI7CiAgICAgICAgIH0KICAgICAgICAgciAr
PSByZWdpc3Rlck9mZnNldDsKQEAgLTU1NCw3ICs1NTQsNyBAQCBBTFdBWVNfSU5MSU5FIFJlZ2lz
dGVyKiBzbGlkZVJlZ2lzdGVyV2luCiAgICAgICAgIHNpemUgKz0gbnVtUGFyYW1ldGVyczsKIAog
ICAgICAgICBpZiAoIXJlZ2lzdGVyRmlsZS0+Z3JvdyhzaXplKSkgewotICAgICAgICAgICAgZXhj
ZXB0aW9uVmFsdWUgPSBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoZXhlYyk7CisgICAgICAgICAg
ICBleGVjLT5zZXRFeGNlcHRpb24oY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGV4ZWMpKTsKICAg
ICAgICAgICAgIHJldHVybiByOwogICAgICAgICB9CiAgICAgICAgIHIgKz0gcmVnaXN0ZXJPZmZz
ZXQ7CkBAIC01ODcsNyArNTg3LDcgQEAgc3RhdGljIE5FVkVSX0lOTElORSBib29sIGlzTm90T2Jq
ZWN0KEV4ZQogICAgIHJldHVybiB0cnVlOwogfQogCi1ORVZFUl9JTkxJTkUgSlNWYWx1ZSogTWFj
aGluZTo6Y2FsbEV2YWwoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgU2NvcGVD
aGFpbk5vZGUqIHNjb3BlQ2hhaW4sIFJlZ2lzdGVyRmlsZSogcmVnaXN0ZXJGaWxlLCBSZWdpc3Rl
ciogciwgaW50IGFyZ3YsIGludCBhcmdjLCBKU1ZhbHVlKiYgZXhjZXB0aW9uVmFsdWUpCitORVZF
Ul9JTkxJTkUgSlNWYWx1ZSogTWFjaGluZTo6Y2FsbEV2YWwoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCogdGhpc09iaiwgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4sIFJlZ2lzdGVyRmlsZSog
cmVnaXN0ZXJGaWxlLCBSZWdpc3RlciogciwgaW50IGFyZ3YsIGludCBhcmdjKQogewogICAgIGlm
IChhcmdjIDwgMikKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkBAIC02MDQsMTEgKzYw
NCwxMSBAQCBORVZFUl9JTkxJTkUgSlNWYWx1ZSogTWFjaGluZTo6Y2FsbEV2YWwoCiAgICAgVVN0
cmluZyBwcm9ncmFtU291cmNlID0gc3RhdGljX2Nhc3Q8SlNTdHJpbmcqPihwcm9ncmFtKS0+dmFs
dWUoKTsKIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gcltSZWdpc3RlckZpbGU6OkNvZGVC
bG9ja10uY29kZUJsb2NrKCk7Ci0gICAgUmVmUHRyPEV2YWxOb2RlPiBldmFsTm9kZSA9IGNvZGVC
bG9jay0+ZXZhbENvZGVDYWNoZS5nZXQoZXhlYywgcHJvZ3JhbVNvdXJjZSwgc2NvcGVDaGFpbiwg
ZXhjZXB0aW9uVmFsdWUpOworICAgIFJlZlB0cjxFdmFsTm9kZT4gZXZhbE5vZGUgPSBjb2RlQmxv
Y2stPmV2YWxDb2RlQ2FjaGUuZ2V0KGV4ZWMsIHByb2dyYW1Tb3VyY2UsIHNjb3BlQ2hhaW4pOwog
CiAgICAgSlNWYWx1ZSogcmVzdWx0ID0gMDsKICAgICBpZiAoZXZhbE5vZGUpCi0gICAgICAgIHJl
c3VsdCA9IGV4ZWMtPmdsb2JhbERhdGEoKS5tYWNoaW5lLT5leGVjdXRlKGV2YWxOb2RlLmdldCgp
LCBleGVjLCB0aGlzT2JqLCByIC0gcmVnaXN0ZXJGaWxlLT5iYXNlKCkgKyBhcmd2ICsgMSArIFJl
Z2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSwgc2NvcGVDaGFpbiwgJmV4Y2VwdGlvblZh
bHVlKTsKKyAgICAgICAgcmVzdWx0ID0gZXhlYy0+Z2xvYmFsRGF0YSgpLm1hY2hpbmUtPmV4ZWN1
dGUoZXZhbE5vZGUuZ2V0KCksIGV4ZWMsIHRoaXNPYmosIHIgLSByZWdpc3RlckZpbGUtPmJhc2Uo
KSArIGFyZ3YgKyAxICsgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplLCBzY29wZUNo
YWluKTsKIAogICAgIGlmICgqcHJvZmlsZXIpCiAgICAgICAgICgqcHJvZmlsZXIpLT5kaWRFeGVj
dXRlKGV4ZWMsIHNjb3BlQ2hhaW4tPmdsb2JhbE9iamVjdCgpLT5ldmFsRnVuY3Rpb24oKSk7CkBA
IC04MDEsNiArODAxLDggQEAgTkVWRVJfSU5MSU5FIGJvb2wgTWFjaGluZTo6dW53aW5kQ2FsbEZy
YQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBleGVjLT5tX2NhbGxGcmFtZSA9IHI7Cisg
ICAgaWYgKCFzY29wZUNoYWluKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgY29kZUJsb2Nr
ID0gcltSZWdpc3RlckZpbGU6OkNvZGVCbG9ja10uY29kZUJsb2NrKCk7CiAgICAgdlBDID0gdlBD
Rm9yUEMoY29kZUJsb2NrLCByZXR1cm5QQyk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC04NzYsMTIg
Kzg3OCwxMiBAQCBORVZFUl9JTkxJTkUgSW5zdHJ1Y3Rpb24qIE1hY2hpbmU6OnRocm93CiAgICAg
cmV0dXJuIGhhbmRsZXJWUEM7CiB9CiAKLUpTVmFsdWUqIE1hY2hpbmU6OmV4ZWN1dGUoUHJvZ3Jh
bU5vZGUqIHByb2dyYW1Ob2RlLCBFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29w
ZUNoYWluLCBKU09iamVjdCogdGhpc09iaiwgSlNWYWx1ZSoqIGV4Y2VwdGlvbikKK0pTVmFsdWUq
IE1hY2hpbmU6OmV4ZWN1dGUoUHJvZ3JhbU5vZGUqIHByb2dyYW1Ob2RlLCBFeGVjU3RhdGUqIGV4
ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluLCBKU09iamVjdCogdGhpc09iaikKIHsKICAg
ICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKIAogICAgIGlmIChtX3JlZW50cnlEZXB0
aCA+PSBNYXhSZWVudHJ5RGVwdGgpIHsKLSAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVN0YWNr
T3ZlcmZsb3dFcnJvcihleGVjKTsKKyAgICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGNyZWF0ZVN0
YWNrT3ZlcmZsb3dFcnJvcihleGVjKSk7CiAgICAgICAgIHJldHVybiBqc051bGwoKTsKICAgICB9
CiAKQEAgLTg5MCw3ICs4OTIsNyBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpleGVjdXRlKFByb2dyYW1O
b2RlKiBwCiAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3JlZ2lzdGVyRmlsZS5zaXplKCk7CiAgICAg
c2l6ZV90IG5ld1NpemUgPSBvbGRTaXplICsgY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzICsgUmVn
aXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplICsgY29kZUJsb2NrLT5udW1DYWxsZWVSZWdp
c3RlcnM7CiAgICAgaWYgKCFtX3JlZ2lzdGVyRmlsZS5ncm93KG5ld1NpemUpKSB7Ci0gICAgICAg
ICpleGNlcHRpb24gPSBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoZXhlYyk7CisgICAgICAgIGV4
ZWMtPnNldEV4Y2VwdGlvbihjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoZXhlYykpOwogICAgICAg
ICByZXR1cm4ganNOdWxsKCk7CiAgICAgfQogCkBAIC05MDAsMTIgKzkwMiwxMiBAQCBKU1ZhbHVl
KiBNYWNoaW5lOjpleGVjdXRlKFByb2dyYW1Ob2RlKiBwCiAKICAgICBSZWdpc3RlciogciA9IG1f
cmVnaXN0ZXJGaWxlLmJhc2UoKSArIG9sZFNpemUgKyBjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMg
KyBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemU7CiAgICAgcltjb2RlQmxvY2stPnRo
aXNSZWdpc3Rlcl0gPSB0aGlzT2JqOwotICAgIGluaXRpYWxpemVDYWxsRnJhbWUociwgY29kZUJs
b2NrLCAwLCAwLCAwLCAwLCAwLCAwKTsKKyAgICBpbml0aWFsaXplQ2FsbEZyYW1lKHIsIGNvZGVC
bG9jaywgMCwgMCwgZXhlYy0+bV9jYWxsRnJhbWUsIDAsIDAsIDApOwogCiAgICAgaWYgKGNvZGVC
bG9jay0+bmVlZHNGdWxsU2NvcGVDaGFpbikKICAgICAgICAgc2NvcGVDaGFpbiA9IHNjb3BlQ2hh
aW4tPmNvcHkoKTsKIAotICAgIEV4ZWNTdGF0ZSBuZXdFeGVjKGV4ZWMsICZtX3JlZ2lzdGVyRmls
ZSwgc2NvcGVDaGFpbiwgMCk7CisgICAgRXhlY1N0YXRlIG5ld0V4ZWMoZXhlYywgc2NvcGVDaGFp
biwgMCk7CiAKICAgICBQcm9maWxlcioqIHByb2ZpbGVyID0gUHJvZmlsZXI6OmVuYWJsZWRQcm9m
aWxlclJlZmVyZW5jZSgpOwogICAgIGlmICgqcHJvZmlsZXIpCkBAIC05MTUsOSArOTE3LDkgQEAg
SlNWYWx1ZSogTWFjaGluZTo6ZXhlY3V0ZShQcm9ncmFtTm9kZSogcAogI2lmIEVOQUJMRShDVEkp
CiAgICAgaWYgKCFjb2RlQmxvY2stPmN0aUNvZGUpCiAgICAgICAgIENUSTo6Y29tcGlsZSh0aGlz
LCBleGVjLCBjb2RlQmxvY2spOwotICAgIEpTVmFsdWUqIHJlc3VsdCA9IENUSTo6ZXhlY3V0ZShj
b2RlQmxvY2stPmN0aUNvZGUsICZuZXdFeGVjLCAmbV9yZWdpc3RlckZpbGUsIHIsIHNjb3BlQ2hh
aW4sIGV4Y2VwdGlvbik7CisgICAgSlNWYWx1ZSogcmVzdWx0ID0gQ1RJOjpleGVjdXRlKGNvZGVC
bG9jay0+Y3RpQ29kZSwgJm5ld0V4ZWMsICZtX3JlZ2lzdGVyRmlsZSwgciwgc2NvcGVDaGFpbik7
CiAjZWxzZQotICAgIEpTVmFsdWUqIHJlc3VsdCA9IHByaXZhdGVFeGVjdXRlKE5vcm1hbCwgJm5l
d0V4ZWMsICZtX3JlZ2lzdGVyRmlsZSwgciwgc2NvcGVDaGFpbiwgZXhjZXB0aW9uKTsKKyAgICBK
U1ZhbHVlKiByZXN1bHQgPSBwcml2YXRlRXhlY3V0ZShOb3JtYWwsICZuZXdFeGVjLCAmbV9yZWdp
c3RlckZpbGUsIHIsIHNjb3BlQ2hhaW4pOwogI2VuZGlmCiAgICAgbV9yZWVudHJ5RGVwdGgtLTsK
IApAQCAtOTMzLDEyICs5MzUsMTIgQEAgSlNWYWx1ZSogTWFjaGluZTo6ZXhlY3V0ZShQcm9ncmFt
Tm9kZSogcAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUpTVmFsdWUqIE1hY2hpbmU6OmV4ZWN1
dGUoRnVuY3Rpb25Cb2R5Tm9kZSogZnVuY3Rpb25Cb2R5Tm9kZSwgRXhlY1N0YXRlKiBleGVjLCBK
U0Z1bmN0aW9uKiBmdW5jdGlvbiwgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluLCBKU1ZhbHVlKiogZXhjZXB0aW9uKQorSlNW
YWx1ZSogTWFjaGluZTo6ZXhlY3V0ZShGdW5jdGlvbkJvZHlOb2RlKiBmdW5jdGlvbkJvZHlOb2Rl
LCBFeGVjU3RhdGUqIGV4ZWMsIEpTRnVuY3Rpb24qIGZ1bmN0aW9uLCBKU09iamVjdCogdGhpc09i
aiwgY29uc3QgQXJnTGlzdCYgYXJncywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4pCiB7CiAg
ICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CiAKICAgICBpZiAobV9yZWVudHJ5RGVw
dGggPj0gTWF4UmVlbnRyeURlcHRoKSB7Ci0gICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVTdGFj
a092ZXJmbG93RXJyb3IoZXhlYyk7CisgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihjcmVhdGVT
dGFja092ZXJmbG93RXJyb3IoZXhlYykpOwogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAgICAg
fQogCkBAIC05NDYsNyArOTQ4LDcgQEAgSlNWYWx1ZSogTWFjaGluZTo6ZXhlY3V0ZShGdW5jdGlv
bkJvZHlObwogICAgIGludCBhcmdjID0gMSArIGFyZ3Muc2l6ZSgpOyAvLyBpbXBsaWNpdCAidGhp
cyIgcGFyYW1ldGVyCiAKICAgICBpZiAoIW1fcmVnaXN0ZXJGaWxlLmdyb3cob2xkU2l6ZSArIGFy
Z2MpKSB7Ci0gICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoZXhl
Yyk7CisgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihjcmVhdGVTdGFja092ZXJmbG93RXJyb3Io
ZXhlYykpOwogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAgICAgfQogCkBAIC05NTksMTUgKzk2
MSwxNSBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpleGVjdXRlKEZ1bmN0aW9uQm9keU5vCiAgICAgICAg
IGFyZ3ZbKytkc3RdID0gKml0OwogCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSAmZnVuY3Rp
b25Cb2R5Tm9kZS0+Ynl0ZUNvZGUoc2NvcGVDaGFpbik7Ci0gICAgUmVnaXN0ZXIqIHIgPSBzbGlk
ZVJlZ2lzdGVyV2luZG93Rm9yQ2FsbChleGVjLCBjb2RlQmxvY2ssICZtX3JlZ2lzdGVyRmlsZSwg
bV9yZWdpc3RlckZpbGUuYmFzZSgpLCBhcmd2LCBhcmdjICsgUmVnaXN0ZXJGaWxlOjpDYWxsRnJh
bWVIZWFkZXJTaXplLCBhcmdjLCAqZXhjZXB0aW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoKmV4Y2Vw
dGlvbiAhPSAwKSkgeworICAgIFJlZ2lzdGVyKiByID0gc2xpZGVSZWdpc3RlcldpbmRvd0ZvckNh
bGwoZXhlYywgY29kZUJsb2NrLCAmbV9yZWdpc3RlckZpbGUsIG1fcmVnaXN0ZXJGaWxlLmJhc2Uo
KSwgYXJndiwgYXJnYyArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSwgYXJnYyk7
CisgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkgewogICAgICAgICBtX3Jl
Z2lzdGVyRmlsZS5zaHJpbmsob2xkU2l6ZSk7CiAgICAgICAgIHJldHVybiBqc051bGwoKTsKICAg
ICB9CiAgICAgLy8gYSAwIGNvZGVCbG9jayBpbmRpY2F0ZXMgYSBidWlsdC1pbiBjYWxsZXIKLSAg
ICBpbml0aWFsaXplQ2FsbEZyYW1lKHIsIGNvZGVCbG9jaywgMCwgMCwgMCwgMCwgYXJnYywgZnVu
Y3Rpb24pOworICAgIGluaXRpYWxpemVDYWxsRnJhbWUociwgY29kZUJsb2NrLCAwLCAwLCBleGVj
LT5tX2NhbGxGcmFtZSwgMCwgYXJnYywgZnVuY3Rpb24pOwogCi0gICAgRXhlY1N0YXRlIG5ld0V4
ZWMoZXhlYywgJm1fcmVnaXN0ZXJGaWxlLCBzY29wZUNoYWluLCByKTsKKyAgICBFeGVjU3RhdGUg
bmV3RXhlYyhleGVjLCBzY29wZUNoYWluLCByKTsKIAogICAgIFByb2ZpbGVyKiogcHJvZmlsZXIg
PSBQcm9maWxlcjo6ZW5hYmxlZFByb2ZpbGVyUmVmZXJlbmNlKCk7CiAgICAgaWYgKCpwcm9maWxl
cikKQEAgLTk3NywxMCArOTc5LDEwIEBAIEpTVmFsdWUqIE1hY2hpbmU6OmV4ZWN1dGUoRnVuY3Rp
b25Cb2R5Tm8KICNpZiBFTkFCTEUoQ1RJKQogICAgIGlmICghY29kZUJsb2NrLT5jdGlDb2RlKQog
ICAgICAgICBDVEk6OmNvbXBpbGUodGhpcywgZXhlYywgY29kZUJsb2NrKTsKLSAgICBKU1ZhbHVl
KiByZXN1bHQgPSBDVEk6OmV4ZWN1dGUoY29kZUJsb2NrLT5jdGlDb2RlLCAmbmV3RXhlYywgJm1f
cmVnaXN0ZXJGaWxlLCByLCBzY29wZUNoYWluLCBleGNlcHRpb24pOworICAgIEpTVmFsdWUqIHJl
c3VsdCA9IENUSTo6ZXhlY3V0ZShjb2RlQmxvY2stPmN0aUNvZGUsICZuZXdFeGVjLCAmbV9yZWdp
c3RlckZpbGUsIHIsIHNjb3BlQ2hhaW4pOwogI2Vsc2UKICAgICBzZXRTY29wZUNoYWluKCZuZXdF
eGVjLCBzY29wZUNoYWluLCBzY29wZUNoYWluKTsKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBwcml2
YXRlRXhlY3V0ZShOb3JtYWwsICZuZXdFeGVjLCAmbV9yZWdpc3RlckZpbGUsIHIsIHNjb3BlQ2hh
aW4sIGV4Y2VwdGlvbik7CisgICAgSlNWYWx1ZSogcmVzdWx0ID0gcHJpdmF0ZUV4ZWN1dGUoTm9y
bWFsLCAmbmV3RXhlYywgJm1fcmVnaXN0ZXJGaWxlLCByLCBzY29wZUNoYWluKTsKICNlbmRpZgog
ICAgIG1fcmVlbnRyeURlcHRoLS07CiAKQEAgLTk5MCwxNyArOTkyLDE3IEBAIEpTVmFsdWUqIE1h
Y2hpbmU6OmV4ZWN1dGUoRnVuY3Rpb25Cb2R5Tm8KICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1K
U1ZhbHVlKiBNYWNoaW5lOjpleGVjdXRlKEV2YWxOb2RlKiBldmFsTm9kZSwgRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCogdGhpc09iaiwgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4sIEpTVmFs
dWUqKiBleGNlcHRpb24pCitKU1ZhbHVlKiBNYWNoaW5lOjpleGVjdXRlKEV2YWxOb2RlKiBldmFs
Tm9kZSwgRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgU2NvcGVDaGFpbk5vZGUq
IHNjb3BlQ2hhaW4pCiB7Ci0gICAgcmV0dXJuIGV4ZWN1dGUoZXZhbE5vZGUsIGV4ZWMsIHRoaXNP
YmosIG1fcmVnaXN0ZXJGaWxlLnNpemUoKSArIGV2YWxOb2RlLT5ieXRlQ29kZShzY29wZUNoYWlu
KS5udW1QYXJhbWV0ZXJzICsgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplLCBzY29w
ZUNoYWluLCBleGNlcHRpb24pOworICAgIHJldHVybiBleGVjdXRlKGV2YWxOb2RlLCBleGVjLCB0
aGlzT2JqLCBtX3JlZ2lzdGVyRmlsZS5zaXplKCkgKyBldmFsTm9kZS0+Ynl0ZUNvZGUoc2NvcGVD
aGFpbikubnVtUGFyYW1ldGVycyArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSwg
c2NvcGVDaGFpbik7CiB9CiAKLUpTVmFsdWUqIE1hY2hpbmU6OmV4ZWN1dGUoRXZhbE5vZGUqIGV2
YWxOb2RlLCBFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBpbnQgcmVnaXN0ZXJP
ZmZzZXQsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluLCBKU1ZhbHVlKiogZXhjZXB0aW9uKQor
SlNWYWx1ZSogTWFjaGluZTo6ZXhlY3V0ZShFdmFsTm9kZSogZXZhbE5vZGUsIEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGludCByZWdpc3Rlck9mZnNldCwgU2NvcGVDaGFpbk5v
ZGUqIHNjb3BlQ2hhaW4pCiB7CiAgICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CiAK
ICAgICBpZiAobV9yZWVudHJ5RGVwdGggPj0gTWF4UmVlbnRyeURlcHRoKSB7Ci0gICAgICAgICpl
eGNlcHRpb24gPSBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoZXhlYyk7CisgICAgICAgIGV4ZWMt
PnNldEV4Y2VwdGlvbihjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoZXhlYykpOwogICAgICAgICBy
ZXR1cm4ganNOdWxsKCk7CiAgICAgfQogCkBAIC0xMDQxLDcgKzEwNDMsNyBAQCBKU1ZhbHVlKiBN
YWNoaW5lOjpleGVjdXRlKEV2YWxOb2RlKiBldmFsCiAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3Jl
Z2lzdGVyRmlsZS5zaXplKCk7CiAgICAgc2l6ZV90IG5ld1NpemUgPSByZWdpc3Rlck9mZnNldCAr
IGNvZGVCbG9jay0+bnVtQ2FsbGVlUmVnaXN0ZXJzOwogICAgIGlmICghbV9yZWdpc3RlckZpbGUu
Z3JvdyhuZXdTaXplKSkgewotICAgICAgICAqZXhjZXB0aW9uID0gY3JlYXRlU3RhY2tPdmVyZmxv
d0Vycm9yKGV4ZWMpOworICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24oY3JlYXRlU3RhY2tPdmVy
Zmxvd0Vycm9yKGV4ZWMpKTsKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogICAgIH0KIApAQCAt
MTA0OSwxMiArMTA1MSwxMiBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpleGVjdXRlKEV2YWxOb2RlKiBl
dmFsCiAKICAgICAvLyBhIDAgY29kZUJsb2NrIGluZGljYXRlcyBhIGJ1aWx0LWluIGNhbGxlcgog
ICAgIHJbY29kZUJsb2NrLT50aGlzUmVnaXN0ZXJdID0gdGhpc09iajsKLSAgICBpbml0aWFsaXpl
Q2FsbEZyYW1lKHIsIGNvZGVCbG9jaywgMCwgMCwgMCwgMCwgMCwgMCk7CisgICAgaW5pdGlhbGl6
ZUNhbGxGcmFtZShyLCBjb2RlQmxvY2ssIDAsIDAsIGV4ZWMtPm1fY2FsbEZyYW1lLCAwLCAwLCAw
KTsKIAogICAgIGlmIChjb2RlQmxvY2stPm5lZWRzRnVsbFNjb3BlQ2hhaW4pCiAgICAgICAgIHNj
b3BlQ2hhaW4gPSBzY29wZUNoYWluLT5jb3B5KCk7CiAKLSAgICBFeGVjU3RhdGUgbmV3RXhlYyhl
eGVjLCAmbV9yZWdpc3RlckZpbGUsIHNjb3BlQ2hhaW4sIDApOworICAgIEV4ZWNTdGF0ZSBuZXdF
eGVjKGV4ZWMsIHNjb3BlQ2hhaW4sIDApOwogCiAgICAgUHJvZmlsZXIqKiBwcm9maWxlciA9IFBy
b2ZpbGVyOjplbmFibGVkUHJvZmlsZXJSZWZlcmVuY2UoKTsKICAgICBpZiAoKnByb2ZpbGVyKQpA
QCAtMTA2NCw5ICsxMDY2LDkgQEAgSlNWYWx1ZSogTWFjaGluZTo6ZXhlY3V0ZShFdmFsTm9kZSog
ZXZhbAogI2lmIEVOQUJMRShDVEkpCiAgICAgaWYgKCFjb2RlQmxvY2stPmN0aUNvZGUpCiAgICAg
ICAgIENUSTo6Y29tcGlsZSh0aGlzLCBleGVjLCBjb2RlQmxvY2spOwotICAgIEpTVmFsdWUqIHJl
c3VsdCA9IENUSTo6ZXhlY3V0ZShjb2RlQmxvY2stPmN0aUNvZGUsICZuZXdFeGVjLCAmbV9yZWdp
c3RlckZpbGUsIHIsIHNjb3BlQ2hhaW4sIGV4Y2VwdGlvbik7CisgICAgSlNWYWx1ZSogcmVzdWx0
ID0gQ1RJOjpleGVjdXRlKGNvZGVCbG9jay0+Y3RpQ29kZSwgJm5ld0V4ZWMsICZtX3JlZ2lzdGVy
RmlsZSwgciwgc2NvcGVDaGFpbik7CiAjZWxzZQotICAgIEpTVmFsdWUqIHJlc3VsdCA9IHByaXZh
dGVFeGVjdXRlKE5vcm1hbCwgJm5ld0V4ZWMsICZtX3JlZ2lzdGVyRmlsZSwgciwgc2NvcGVDaGFp
biwgZXhjZXB0aW9uKTsKKyAgICBKU1ZhbHVlKiByZXN1bHQgPSBwcml2YXRlRXhlY3V0ZShOb3Jt
YWwsICZuZXdFeGVjLCAmbV9yZWdpc3RlckZpbGUsIHIsIHNjb3BlQ2hhaW4pOwogI2VuZGlmCiAg
ICAgbV9yZWVudHJ5RGVwdGgtLTsKIApAQCAtMTQyNCw3ICsxNDI2LDcgQEAgTkVWRVJfSU5MSU5F
IHZvaWQgTWFjaGluZTo6dW5jYWNoZUdldEJ5SQogICAgIHZQQ1s0XSA9IDA7CiB9CiAKLUpTVmFs
dWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGlvbkZsYWcgZmxhZywgRXhlY1N0YXRl
KiBleGVjLCBSZWdpc3RlckZpbGUqIHJlZ2lzdGVyRmlsZSwgUmVnaXN0ZXIqIHIsIFNjb3BlQ2hh
aW5Ob2RlKiBzY29wZUNoYWluLCBKU1ZhbHVlKiogZXhjZXB0aW9uKQorSlNWYWx1ZSogTWFjaGlu
ZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aW9uRmxhZyBmbGFnLCBFeGVjU3RhdGUqIGV4ZWMsIFJl
Z2lzdGVyRmlsZSogcmVnaXN0ZXJGaWxlLCBSZWdpc3RlciogciwgU2NvcGVDaGFpbk5vZGUqIHNj
b3BlQ2hhaW4pCiB7CiAgICAgLy8gT25lLXRpbWUgaW5pdGlhbGl6YXRpb24gb2Ygb3VyIGFkZHJl
c3MgdGFibGVzLiBXZSBoYXZlIHRvIHB1dCB0aGlzIGNvZGUKICAgICAvLyBoZXJlIGJlY2F1c2Ug
b3VyIGxhYmVscyBhcmUgb25seSBpbiBzY29wZSBpbnNpZGUgdGhpcyBmdW5jdGlvbi4KQEAgLTMy
MDcsOCArMzIwOSw4IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkK
IAogICAgICAgICBpZiAoYmFzZVZhbCA9PSBzY29wZUNoYWluLT5nbG9iYWxPYmplY3QoKSAmJiBm
dW5jVmFsID09IHNjb3BlQ2hhaW4tPmdsb2JhbE9iamVjdCgpLT5ldmFsRnVuY3Rpb24oKSkgewog
ICAgICAgICAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+
KHJbcltSZWdpc3RlckZpbGU6OkNvZGVCbG9ja10uY29kZUJsb2NrKCktPnRoaXNSZWdpc3Rlcl0u
anNWYWx1ZShleGVjKSk7Ci0gICAgICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBjYWxsRXZhbChl
eGVjLCB0aGlzT2JqZWN0LCBzY29wZUNoYWluLCByZWdpc3RlckZpbGUsIHIsIGZpcnN0QXJnLCBh
cmdDb3VudCwgZXhjZXB0aW9uVmFsdWUpOwotICAgICAgICAgICAgaWYgKGV4Y2VwdGlvblZhbHVl
KQorICAgICAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0gY2FsbEV2YWwoZXhlYywgdGhpc09iamVj
dCwgc2NvcGVDaGFpbiwgcmVnaXN0ZXJGaWxlLCByLCBmaXJzdEFyZywgYXJnQ291bnQpOworICAg
ICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgICAgIGdvdG8g
dm1fdGhyb3c7CiAKICAgICAgICAgICAgIHJbZHN0XSA9IHJlc3VsdDsKQEAgLTMyODksOCArMzI5
MSw4IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgUmVnaXN0ZXIqIHNhdmVkUiA9IHI7CiAKLSAgICAgICAgICAgIHIg
PSBzbGlkZVJlZ2lzdGVyV2luZG93Rm9yQ2FsbChleGVjLCBuZXdDb2RlQmxvY2ssIHJlZ2lzdGVy
RmlsZSwgcmVnaXN0ZXJCYXNlLCByLCByZWdpc3Rlck9mZnNldCwgYXJnQ291bnQsIGV4Y2VwdGlv
blZhbHVlKTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWShleGNlcHRpb25WYWx1ZSAhPSAwKSkK
KyAgICAgICAgICAgIHIgPSBzbGlkZVJlZ2lzdGVyV2luZG93Rm9yQ2FsbChleGVjLCBuZXdDb2Rl
QmxvY2ssIHJlZ2lzdGVyRmlsZSwgcmVnaXN0ZXJCYXNlLCByLCByZWdpc3Rlck9mZnNldCwgYXJn
Q291bnQpOworICAgICAgICAgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkK
ICAgICAgICAgICAgICAgICBnb3RvIHZtX3Rocm93OwogCiAgICAgICAgICAgICBpbml0aWFsaXpl
Q2FsbEZyYW1lKHIsIG5ld0NvZGVCbG9jaywgdlBDLCBzY29wZUNoYWluLCBzYXZlZFIsIGRzdCwg
YXJnQ291bnQsIHYpOwpAQCAtMzQ1NSw4ICszNDU3LDggQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJp
dmF0ZUV4ZWN1dGUoRXhlY3V0aQogCiAgICAgICAgICAgICBSZWdpc3Rlciogc2F2ZWRSID0gcjsK
IAotICAgICAgICAgICAgciA9IHNsaWRlUmVnaXN0ZXJXaW5kb3dGb3JDYWxsKGV4ZWMsIG5ld0Nv
ZGVCbG9jaywgcmVnaXN0ZXJGaWxlLCByZWdpc3RlckJhc2UsIHIsIHJlZ2lzdGVyT2Zmc2V0LCBh
cmdDb3VudCwgZXhjZXB0aW9uVmFsdWUpOwotICAgICAgICAgICAgaWYgKFVOTElLRUxZKGV4Y2Vw
dGlvblZhbHVlICE9IDApKQorICAgICAgICAgICAgciA9IHNsaWRlUmVnaXN0ZXJXaW5kb3dGb3JD
YWxsKGV4ZWMsIG5ld0NvZGVCbG9jaywgcmVnaXN0ZXJGaWxlLCByZWdpc3RlckJhc2UsIHIsIHJl
Z2lzdGVyT2Zmc2V0LCBhcmdDb3VudCk7CisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgIGdvdG8gdm1fdGhyb3c7CiAKICAgICAg
ICAgICAgIGluaXRpYWxpemVDYWxsRnJhbWUociwgbmV3Q29kZUJsb2NrLCB2UEMsIHNjb3BlQ2hh
aW4sIHNhdmVkUiwgZHN0LCBhcmdDb3VudCwgdik7CkBAIC0zNjU3LDcgKzM2NTksNyBAQCBKU1Zh
bHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAKICAgICAgICAgaGFuZGxlclZQ
QyA9IHRocm93RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvblZhbHVlLCB2UEMsIHNjb3BlQ2hhaW4s
IHIsIHRydWUpOwogICAgICAgICBpZiAoIWhhbmRsZXJWUEMpIHsKLSAgICAgICAgICAgICpleGNl
cHRpb24gPSBleGNlcHRpb25WYWx1ZTsKKyAgICAgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihl
eGNlcHRpb25WYWx1ZSk7CiAgICAgICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAgICAgICAgIH0K
IApAQCAtMzgxMiwxMCArMzgxNCw5IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRl
KEV4ZWN1dGkKICAgICAgICAgICAgIGV4Y2VwdGlvblZhbHVlID0gY3JlYXRlSW50ZXJydXB0ZWRF
eGVjdXRpb25FeGNlcHRpb24oZXhlYyk7CiAgICAgICAgIH0KICAgICAgICAgaGFuZGxlclZQQyA9
IHRocm93RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvblZhbHVlLCB2UEMsIHNjb3BlQ2hhaW4sIHIs
IGZhbHNlKTsKLSAgICAgICAgaWYgKCFoYW5kbGVyVlBDKSB7Ci0gICAgICAgICAgICAqZXhjZXB0
aW9uID0gZXhjZXB0aW9uVmFsdWU7CisgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihleGNlcHRp
b25WYWx1ZSk7CisgICAgICAgIGlmICghaGFuZGxlclZQQykKICAgICAgICAgICAgIHJldHVybiBq
c051bGwoKTsKLSAgICAgICAgfQogICAgICAgICB2UEMgPSBoYW5kbGVyVlBDOwogICAgICAgICBO
RVhUX09QQ09ERTsKICAgICB9CkBAIC0zODQ2LDEyICszODQ3LDE0IEBAIEpTVmFsdWUqIE1hY2hp
bmU6OnJldHJpZXZlQ2FsbGVyKEV4ZWNTdGEKICAgICBSZWdpc3RlciogciA9IHRoaXMtPmNhbGxG
cmFtZShleGVjLCBmdW5jdGlvbik7CiAgICAgaWYgKCFyKQogICAgICAgICByZXR1cm4ganNOdWxs
KCk7CisgICAgaWYgKCFyW1JlZ2lzdGVyRmlsZTo6Q2FsbGVyU2NvcGVDaGFpbl0uc2NvcGVDaGFp
bigpKQorICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAKICAgICBSZWdpc3RlciogY2FsbGVyUiA9
IHJbUmVnaXN0ZXJGaWxlOjpDYWxsZXJSZWdpc3RlcnNdLnIoKTsKICAgICBpZiAoIWNhbGxlclIp
CiAgICAgICAgIHJldHVybiBqc051bGwoKTsKIAotICAgIEpTVmFsdWUqIGNhbGxlciA9IGNhbGxl
clJbUmVnaXN0ZXJGaWxlOjpDYWxsZWVdLmpzVmFsdWUoZXhlYyk7CisgICAgSlNWYWx1ZSogY2Fs
bGVyID0gY2FsbGVyUltSZWdpc3RlckZpbGU6OkNhbGxlZV0uZ2V0SlNWYWx1ZSgpOwogICAgIGlm
ICghY2FsbGVyKQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAKQEAgLTM4NjcsNiArMzg3MCw4
IEBAIHZvaWQgTWFjaGluZTo6cmV0cmlldmVMYXN0Q2FsbGVyKEV4ZWNTdGEKICAgICBSZWdpc3Rl
ciogciA9IGV4ZWMtPm1fY2FsbEZyYW1lOwogICAgIGlmICghcikKICAgICAgICAgcmV0dXJuOwor
ICAgIGlmICghcltSZWdpc3RlckZpbGU6OkNhbGxlclNjb3BlQ2hhaW5dLnNjb3BlQ2hhaW4oKSkK
KyAgICAgICAgcmV0dXJuOwogCiAgICAgUmVnaXN0ZXIqIGNhbGxlclIgPSByW1JlZ2lzdGVyRmls
ZTo6Q2FsbGVyUmVnaXN0ZXJzXS5yKCk7CiAgICAgaWYgKCFjYWxsZXJSKQpAQCAtMzg4NywyMSAr
Mzg5MiwxMSBAQCB2b2lkIE1hY2hpbmU6OnJldHJpZXZlTGFzdENhbGxlcihFeGVjU3RhCiAKIFJl
Z2lzdGVyKiBNYWNoaW5lOjpjYWxsRnJhbWUoRXhlY1N0YXRlKiBleGVjLCBJbnRlcm5hbEZ1bmN0
aW9uKiBmdW5jdGlvbikgY29uc3QKIHsKLSAgICBSZWdpc3RlciogY2FsbEZyYW1lID0gZXhlYy0+
bV9jYWxsRnJhbWU7Ci0KLSAgICB3aGlsZSAoMSkgewotICAgICAgICB3aGlsZSAoIWNhbGxGcmFt
ZSkgewotICAgICAgICAgICAgZXhlYyA9IGV4ZWMtPm1fcHJldjsKLSAgICAgICAgICAgIGlmICgh
ZXhlYykKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIGNhbGxGcmFtZSA9
IGV4ZWMtPm1fY2FsbEZyYW1lOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGNhbGxGcmFtZVtS
ZWdpc3RlckZpbGU6OkNhbGxlZV0uanNWYWx1ZShleGVjKSA9PSBmdW5jdGlvbikKKyAgICBmb3Ig
KFJlZ2lzdGVyKiBjYWxsRnJhbWUgPSBleGVjLT5tX2NhbGxGcmFtZTsgY2FsbEZyYW1lOyBjYWxs
RnJhbWUgPSBjYWxsRnJhbWVbUmVnaXN0ZXJGaWxlOjpDYWxsZXJSZWdpc3RlcnNdLnIoKSkgewor
ICAgICAgICBpZiAoY2FsbEZyYW1lW1JlZ2lzdGVyRmlsZTo6Q2FsbGVlXS5nZXRKU1ZhbHVlKCkg
PT0gZnVuY3Rpb24pCiAgICAgICAgICAgICByZXR1cm4gY2FsbEZyYW1lOwotCi0gICAgICAgIGNh
bGxGcmFtZSA9IGNhbGxGcmFtZVtSZWdpc3RlckZpbGU6OkNhbGxlclJlZ2lzdGVyc10ucigpOwog
ICAgIH0KKyAgICByZXR1cm4gMDsKIH0KIAogdm9pZCBNYWNoaW5lOjpnZXRBcmd1bWVudHNEYXRh
KFJlZ2lzdGVyKiBjYWxsRnJhbWUsIEpTRnVuY3Rpb24qJiBmdW5jdGlvbiwgaW50JiBmaXJzdFBh
cmFtZXRlckluZGV4LCBSZWdpc3RlciomIGFyZ3YsIGludCYgYXJnYykKQEAgLTQxNDIsMTUgKzQx
MzcsNiBAQCBORVZFUl9JTkxJTkUgdm9pZCBNYWNoaW5lOjp0cnlDVElDYWNoZUdlCiB9CiAKIAot
I2RlZmluZSBKU1ZBTFVFX1ZNX0NIRUNLX0VYQ0VQVElPTl9BUkcoZXhjZXB0aW9uKSBcCi0gICAg
ZG8geyBcCi0gICAgICAgIGlmIChVTkxJS0VMWShleGNlcHRpb24gIT0gMCkpIHsgXAotICAgICAg
ICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGV4Y2VwdGlvbik7IFwKLSAgICAgICAgICAgIGV4ZWMt
PnNldENUSVJldHVybkFkZHJlc3MoQ1RJX1JFVFVSTl9BRERSRVNTKTsgXAotICAgICAgICAgICAg
ZG9TZXRSZXR1cm5BZGRyZXNzVk1UaHJvd1RyYW1wb2xpbmUoJkNUSV9SRVRVUk5fQUREUkVTUyk7
IFwKLSAgICAgICAgICAgIHJldHVybiAwOyBcCi0gICAgICAgIH0gXAotICAgIH0gd2hpbGUgKDAp
CiAjZGVmaW5lIFZNX0NIRUNLX0VYQ0VQVElPTl92KCkgXAogICAgIGRvIHsgXAogICAgICAgICBp
ZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKSB7IFwKQEAgLTQxNzAsNyArNDE1Niw2
IEBAIE5FVkVSX0lOTElORSB2b2lkIE1hY2hpbmU6OnRyeUNUSUNhY2hlR2UKICNkZWZpbmUgVk1f
Q0hFQ0tfRVhDRVBUSU9OX0FUX0VORCgpIFwKICAgICBkbyB7IFwKICAgICAgICAgaWYgKFVOTElL
RUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkgeyBcCi0gICAgICAgICAgICAvKnByaW50ZigiVk1f
Q0hFQ0tfRVhDRVBUSU9OX0FUX0VORCgpXG4iKTsqLyBcCiAgICAgICAgICAgICBleGVjLT5zZXRD
VElSZXR1cm5BZGRyZXNzKENUSV9SRVRVUk5fQUREUkVTUyk7IFwKICAgICAgICAgICAgIGRvU2V0
UmV0dXJuQWRkcmVzc1ZNVGhyb3dUcmFtcG9saW5lKCZDVElfUkVUVVJOX0FERFJFU1MpOyBcCiAg
ICAgICAgIH0gXApAQCAtNDQ1Myw5ICs0NDM4LDggQEAgdm9pZCogTWFjaGluZTo6Y3RpX29wX2Nh
bGxfSlNGdW5jdGlvbihDVAogICAgIAogICAgIFJlZ2lzdGVyKiBzYXZlZFIgPSByOwogCi0gICAg
SlNWYWx1ZSogZXhjZXB0aW9uVmFsdWUgPSAwOwotICAgIHIgPSBzbGlkZVJlZ2lzdGVyV2luZG93
Rm9yQ2FsbChleGVjLCBuZXdDb2RlQmxvY2ssIHJlZ2lzdGVyRmlsZSwgcmVnaXN0ZXJCYXNlLCBy
LCByZWdpc3Rlck9mZnNldCwgYXJnQ291bnQsIGV4Y2VwdGlvblZhbHVlKTsKLSAgICBKU1ZBTFVF
X1ZNX0NIRUNLX0VYQ0VQVElPTl9BUkcoZXhjZXB0aW9uVmFsdWUpOworICAgIHIgPSBzbGlkZVJl
Z2lzdGVyV2luZG93Rm9yQ2FsbChleGVjLCBuZXdDb2RlQmxvY2ssIHJlZ2lzdGVyRmlsZSwgcmVn
aXN0ZXJCYXNlLCByLCByZWdpc3Rlck9mZnNldCwgYXJnQ291bnQpOworICAgIFZNX0NIRUNLX0VY
Q0VQVElPTih2b2lkKik7CiAKICAgICByW1JlZ2lzdGVyRmlsZTo6Q29kZUJsb2NrXSA9IG5ld0Nv
ZGVCbG9jazsKICAgICByW1JlZ2lzdGVyRmlsZTo6Q2FsbGVyU2NvcGVDaGFpbl0gPSBBUkdfc2Nv
cGVDaGFpbjsKQEAgLTQ2NDUsOSArNDYyOSw4IEBAIHZvaWQqIE1hY2hpbmU6OmN0aV9vcF9jb25z
dHJ1Y3RfSlNDb25zdHIKIAogICAgIFJlZ2lzdGVyKiBzYXZlZFIgPSByOwogCi0gICAgSlNWYWx1
ZSogZXhjZXB0aW9uVmFsdWUgPSAwOwotICAgIHIgPSBzbGlkZVJlZ2lzdGVyV2luZG93Rm9yQ2Fs
bChleGVjLCBuZXdDb2RlQmxvY2ssIHJlZ2lzdGVyRmlsZSwgcmVnaXN0ZXJCYXNlLCByLCByZWdp
c3Rlck9mZnNldCwgYXJnQ291bnQsIGV4Y2VwdGlvblZhbHVlKTsKLSAgICBKU1ZBTFVFX1ZNX0NI
RUNLX0VYQ0VQVElPTl9BUkcoZXhjZXB0aW9uVmFsdWUpOworICAgIHIgPSBzbGlkZVJlZ2lzdGVy
V2luZG93Rm9yQ2FsbChleGVjLCBuZXdDb2RlQmxvY2ssIHJlZ2lzdGVyRmlsZSwgcmVnaXN0ZXJC
YXNlLCByLCByZWdpc3Rlck9mZnNldCwgYXJnQ291bnQpOworICAgIFZNX0NIRUNLX0VYQ0VQVElP
Tih2b2lkKik7CiAKICAgICByW1JlZ2lzdGVyRmlsZTo6Q29kZUJsb2NrXSA9IG5ld0NvZGVCbG9j
azsKICAgICByW1JlZ2lzdGVyRmlsZTo6Q2FsbGVyU2NvcGVDaGFpbl0gPSBBUkdfc2NvcGVDaGFp
bjsKQEAgLTUyNjMsOSArNTI0Niw4IEBAIEpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9jYWxsX2V2
YWwoQ1RJX0EKIAogICAgIGlmIChiYXNlVmFsID09IHNjb3BlQ2hhaW4tPmdsb2JhbE9iamVjdCgp
ICYmIGZ1bmNWYWwgPT0gc2NvcGVDaGFpbi0+Z2xvYmFsT2JqZWN0KCktPmV2YWxGdW5jdGlvbigp
KSB7CiAgICAgICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNPYmplY3Qq
PihyW2NvZGVCbG9jay0+dGhpc1JlZ2lzdGVyXS5qc1ZhbHVlKGV4ZWMpKTsKLSAgICAgICAgSlNW
YWx1ZSogZXhjZXB0aW9uVmFsdWUgPSAwOwotICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBtYWNo
aW5lLT5jYWxsRXZhbChleGVjLCB0aGlzT2JqZWN0LCBzY29wZUNoYWluLCByZWdpc3RlckZpbGUs
ICByLCByZWdpc3Rlck9mZnNldCAtIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSAt
IGFyZ0NvdW50LCBhcmdDb3VudCwgZXhjZXB0aW9uVmFsdWUpOwotICAgICAgICBKU1ZBTFVFX1ZN
X0NIRUNLX0VYQ0VQVElPTl9BUkcoZXhjZXB0aW9uVmFsdWUpOworICAgICAgICBKU1ZhbHVlKiBy
ZXN1bHQgPSBtYWNoaW5lLT5jYWxsRXZhbChleGVjLCB0aGlzT2JqZWN0LCBzY29wZUNoYWluLCBy
ZWdpc3RlckZpbGUsICByLCByZWdpc3Rlck9mZnNldCAtIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1l
SGVhZGVyU2l6ZSAtIGFyZ0NvdW50LCBhcmdDb3VudCk7CisgICAgICAgIFZNX0NIRUNLX0VYQ0VQ
VElPTihKU1ZhbHVlKik7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCkBAIC01Mjg1
LDggKzUyNjcsOCBAQCB2b2lkKiBNYWNoaW5lOjpjdGlfb3BfdGhyb3coQ1RJX0FSR1MpCiAgICAg
SlNWYWx1ZSogZXhjZXB0aW9uVmFsdWUgPSBBUkdfc3JjMTsKICAgICBJbnN0cnVjdGlvbiogaGFu
ZGxlclZQQyA9IEFSR19leGVjLT5tYWNoaW5lKCktPnRocm93RXhjZXB0aW9uKGV4ZWMsIGV4Y2Vw
dGlvblZhbHVlLCBjb2RlQmxvY2stPmluc3RydWN0aW9ucy5iZWdpbigpICsgdlBDSW5kZXgsIHNj
b3BlQ2hhaW4sIHIsIHRydWUpOwogCisgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGV4Y2VwdGlvblZh
bHVlKTsKICAgICBpZiAoaGFuZGxlclZQQykgewotICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24o
ZXhjZXB0aW9uVmFsdWUpOwogICAgICAgICBBUkdfc2V0U2NvcGVDaGFpbihzY29wZUNoYWluKTsK
ICAgICAgICAgQVJHX3NldFIocik7CiAKQEAgLTUyOTUsOCArNTI3Nyw2IEBAIHZvaWQqIE1hY2hp
bmU6OmN0aV9vcF90aHJvdyhDVElfQVJHUykKICAgICAgICAgY3RpU2V0UmV0dXJuQWRkcmVzcygm
Q1RJX1JFVFVSTl9BRERSRVNTLCBjYXRjaFJvdXRpbmUpOwogICAgICAgICByZXR1cm4gY2F0Y2hS
b3V0aW5lOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7Ci0g
ICAgICAgICpBUkdfZXhjZXB0aW9uID0gZXhjZXB0aW9uVmFsdWU7CiAgICAgICAgIHJldHVybiBK
U0ltbWVkaWF0ZTo6bnVsbEltbWVkaWF0ZSgpOwogICAgIH0KIH0KQEAgLTU2MDAsOCArNTU4MCw4
IEBAIHZvaWQqIE1hY2hpbmU6OmN0aV92bV90aHJvdyhDVElfQVJHUykKIAogICAgIEluc3RydWN0
aW9uKiBoYW5kbGVyVlBDID0gQVJHX2V4ZWMtPm1hY2hpbmUoKS0+dGhyb3dFeGNlcHRpb24oZXhl
YywgZXhjZXB0aW9uVmFsdWUsIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zLmJlZ2luKCkgKyB2UENJ
bmRleCwgc2NvcGVDaGFpbiwgciwgZmFsc2UpOwogCisgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGV4
Y2VwdGlvblZhbHVlKTsKICAgICBpZiAoaGFuZGxlclZQQykgewotICAgICAgICBleGVjLT5zZXRF
eGNlcHRpb24oZXhjZXB0aW9uVmFsdWUpOwogICAgICAgICBBUkdfc2V0U2NvcGVDaGFpbihzY29w
ZUNoYWluKTsKICAgICAgICAgQVJHX3NldFIocik7CiAKQEAgLTU2MTAsOCArNTU5MCw2IEBAIHZv
aWQqIE1hY2hpbmU6OmN0aV92bV90aHJvdyhDVElfQVJHUykKICAgICAgICAgY3RpU2V0UmV0dXJu
QWRkcmVzcygmQ1RJX1JFVFVSTl9BRERSRVNTLCBjYXRjaFJvdXRpbmUpOwogICAgICAgICByZXR1
cm4gY2F0Y2hSb3V0aW5lOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0
aW9uKCk7Ci0gICAgICAgICpBUkdfZXhjZXB0aW9uID0gZXhjZXB0aW9uVmFsdWU7CiAgICAgICAg
IHJldHVybiBKU0ltbWVkaWF0ZTo6bnVsbEltbWVkaWF0ZSgpOwogICAgIH0KIH0KSW5kZXg6IEph
dmFTY3JpcHRDb3JlL1ZNL01hY2hpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9W
TS9NYWNoaW5lLmgJKHJldmlzaW9uIDM3MDM2KQorKysgSmF2YVNjcmlwdENvcmUvVk0vTWFjaGlu
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05NSw5ICs5NSw5IEBAIG5hbWVzcGFjZSBKU0MgewogCiAg
ICAgICAgIGJvb2wgaXNPcGNvZGUoT3Bjb2RlIG9wY29kZSk7CiAgICAgICAgIAotICAgICAgICBK
U1ZhbHVlKiBleGVjdXRlKFByb2dyYW1Ob2RlKiwgRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUq
LCBKU09iamVjdCogdGhpc09iaiwgSlNWYWx1ZSoqIGV4Y2VwdGlvbik7Ci0gICAgICAgIEpTVmFs
dWUqIGV4ZWN1dGUoRnVuY3Rpb25Cb2R5Tm9kZSosIEV4ZWNTdGF0ZSosIEpTRnVuY3Rpb24qLCBK
U09iamVjdCogdGhpc09iaiwgY29uc3QgQXJnTGlzdCYgYXJncywgU2NvcGVDaGFpbk5vZGUqLCBK
U1ZhbHVlKiogZXhjZXB0aW9uKTsKLSAgICAgICAgSlNWYWx1ZSogZXhlY3V0ZShFdmFsTm9kZSog
ZXZhbE5vZGUsIEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIFNjb3BlQ2hhaW5O
b2RlKiBzY29wZUNoYWluLCBKU1ZhbHVlKiogZXhjZXB0aW9uKTsKKyAgICAgICAgSlNWYWx1ZSog
ZXhlY3V0ZShQcm9ncmFtTm9kZSosIEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKiwgSlNPYmpl
Y3QqIHRoaXNPYmplY3QpOworICAgICAgICBKU1ZhbHVlKiBleGVjdXRlKEZ1bmN0aW9uQm9keU5v
ZGUqLCBFeGVjU3RhdGUqLCBKU0Z1bmN0aW9uKiwgSlNPYmplY3QqIHRoaXNPYmplY3QsIGNvbnN0
IEFyZ0xpc3QmLCBTY29wZUNoYWluTm9kZSopOworICAgICAgICBKU1ZhbHVlKiBleGVjdXRlKEV2
YWxOb2RlKiwgRXhlY1N0YXRlKiwgSlNPYmplY3QqIHRoaXNPYmplY3QsIFNjb3BlQ2hhaW5Ob2Rl
Kik7CiAKICAgICAgICAgSlNWYWx1ZSogcmV0cmlldmVBcmd1bWVudHMoRXhlY1N0YXRlKiwgSlNG
dW5jdGlvbiopIGNvbnN0OwogICAgICAgICBKU1ZhbHVlKiByZXRyaWV2ZUNhbGxlcihFeGVjU3Rh
dGUqLCBJbnRlcm5hbEZ1bmN0aW9uKikgY29uc3Q7CkBAIC0yNDIsOCArMjQyLDggQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgcHJpdmF0ZToKICAgICAgICAgZW51bSBFeGVjdXRpb25GbGFnIHsgTm9y
bWFsLCBJbml0aWFsaXplQW5kUmV0dXJuIH07CiAKLSAgICAgICAgTkVWRVJfSU5MSU5FIEpTVmFs
dWUqIGNhbGxFdmFsKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIFNjb3BlQ2hh
aW5Ob2RlKiBzY29wZUNoYWluLCBSZWdpc3RlckZpbGUqLCBSZWdpc3RlciogciwgaW50IGFyZ3Ys
IGludCBhcmdjLCBKU1ZhbHVlKiYgZXhjZXB0aW9uVmFsdWUpOwotICAgICAgICBKU1ZhbHVlKiBl
eGVjdXRlKEV2YWxOb2RlKiwgRXhlY1N0YXRlKiwgSlNPYmplY3QqIHRoaXNPYmosIGludCByZWdp
c3Rlck9mZnNldCwgU2NvcGVDaGFpbk5vZGUqLCBKU1ZhbHVlKiogZXhjZXB0aW9uKTsKKyAgICAg
ICAgTkVWRVJfSU5MSU5FIEpTVmFsdWUqIGNhbGxFdmFsKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiB0
aGlzT2JqZWN0LCBTY29wZUNoYWluTm9kZSosIFJlZ2lzdGVyRmlsZSosIFJlZ2lzdGVyKiwgaW50
IGFyZ3YsIGludCBhcmdjKTsKKyAgICAgICAgSlNWYWx1ZSogZXhlY3V0ZShFdmFsTm9kZSosIEV4
ZWNTdGF0ZSosIEpTT2JqZWN0KiB0aGlzT2JqZWN0LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIFNjb3Bl
Q2hhaW5Ob2RlKik7CiAKICAgICAgICAgQUxXQVlTX0lOTElORSBzdGF0aWMgdm9pZCBpbml0aWFs
aXplQ2FsbEZyYW1lKFJlZ2lzdGVyKiBjYWxsRnJhbWUsIENvZGVCbG9jayosIEluc3RydWN0aW9u
KiwgU2NvcGVDaGFpbk5vZGUqLCBSZWdpc3RlciogciwgaW50IHJldHVyblZhbHVlUmVnaXN0ZXIs
IGludCBhcmdjLCBKU1ZhbHVlKiBmdW5jdGlvbik7CiAKQEAgLTI1OSwxMSArMjU5LDExIEBAIG5h
bWVzcGFjZSBKU0MgewogCiAgICAgICAgIE5FVkVSX0lOTElORSBib29sIHVud2luZENhbGxGcmFt
ZShFeGVjU3RhdGUqLCBKU1ZhbHVlKiwgY29uc3QgSW5zdHJ1Y3Rpb24qJiwgQ29kZUJsb2NrKiYs
IFNjb3BlQ2hhaW5Ob2RlKiYsIFJlZ2lzdGVyKiYpOwogICAgICAgICBORVZFUl9JTkxJTkUgSW5z
dHJ1Y3Rpb24qIHRocm93RXhjZXB0aW9uKEV4ZWNTdGF0ZSosIEpTVmFsdWUqJiwgY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTY29wZUNoYWluTm9kZSomLCBSZWdpc3RlciomLCBib29sKTsKLSAgICAgICAg
TkVWRVJfSU5MSU5FIGJvb2wgcmVzb2x2ZUJhc2VBbmRGdW5jKEV4ZWNTdGF0ZSogZXhlYywgSW5z
dHJ1Y3Rpb24qIHZQQywgUmVnaXN0ZXIqIHIsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluLCBK
U1ZhbHVlKiYgZXhjZXB0aW9uVmFsdWUpOworICAgICAgICBORVZFUl9JTkxJTkUgYm9vbCByZXNv
bHZlQmFzZUFuZEZ1bmMoRXhlY1N0YXRlKiwgSW5zdHJ1Y3Rpb24qIHZQQywgUmVnaXN0ZXIqIHIs
IFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluLCBKU1ZhbHVlKiYgZXhjZXB0aW9uVmFsdWUpOwog
CiAgICAgICAgIFJlZ2lzdGVyKiBjYWxsRnJhbWUoRXhlY1N0YXRlKiwgSW50ZXJuYWxGdW5jdGlv
biopIGNvbnN0OwogCi0gICAgICAgIEpTVmFsdWUqIHByaXZhdGVFeGVjdXRlKEV4ZWN1dGlvbkZs
YWcsIEV4ZWNTdGF0ZSogPSAwLCBSZWdpc3RlckZpbGUqID0gMCwgUmVnaXN0ZXIqID0gMCwgU2Nv
cGVDaGFpbk5vZGUqID0gMCwgSlNWYWx1ZSoqIGV4Y2VwdGlvbiA9IDApOworICAgICAgICBKU1Zh
bHVlKiBwcml2YXRlRXhlY3V0ZShFeGVjdXRpb25GbGFnLCBFeGVjU3RhdGUqID0gMCwgUmVnaXN0
ZXJGaWxlKiA9IDAsIFJlZ2lzdGVyKiA9IDAsIFNjb3BlQ2hhaW5Ob2RlKiA9IDApOwogCiAgICAg
ICAgIHZvaWQgZHVtcENhbGxGcmFtZShTY29wZUNoYWluTm9kZSosIGNvbnN0IFJlZ2lzdGVyRmls
ZSosIGNvbnN0IFJlZ2lzdGVyKik7CiAgICAgICAgIHZvaWQgZHVtcFJlZ2lzdGVycyhjb25zdCBS
ZWdpc3RlckZpbGUqLCBjb25zdCBSZWdpc3RlciopOwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pz
L0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMv
RGVidWdnZXJDYWxsRnJhbWUuY3BwCShyZXZpc2lvbiAzNzAzNikKKysrIEphdmFTY3JpcHRDb3Jl
L2tqcy9EZWJ1Z2dlckNhbGxGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4LDE5ICs2OCwy
MiBAQCBKU1ZhbHVlKiBEZWJ1Z2dlckNhbGxGcmFtZTo6ZXZhbHVhdGUoY29uCiAgICAgaWYgKCFt
X2NvZGVCbG9jaykKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBKU09iamVjdCogdGhpc09iamVj
dCA9IHRoaXMtPnRoaXNPYmplY3QoKTsKLQotICAgIEV4ZWNTdGF0ZSBuZXdFeGVjKG1fc2NvcGVD
aGFpbi0+Z2xvYmFsT2JqZWN0KCksIHRoaXNPYmplY3QsIG1fc2NvcGVDaGFpbik7CisgICAgRXhl
Y1N0YXRlIG5ld0V4ZWMobV9zY29wZUNoYWluLT5nbG9iYWxPYmplY3QoKSwgbV9zY29wZUNoYWlu
KTsKIAogICAgIGludCBzb3VyY2VJZDsKICAgICBpbnQgZXJyTGluZTsKICAgICBVU3RyaW5nIGVy
ck1zZzsKICAgICBSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyID0gVVN0cmlu
Z1NvdXJjZVByb3ZpZGVyOjpjcmVhdGUoc2NyaXB0KTsKICAgICBSZWZQdHI8RXZhbE5vZGU+IGV2
YWxOb2RlID0gbmV3RXhlYy5wYXJzZXIoKS0+cGFyc2U8RXZhbE5vZGU+KCZuZXdFeGVjLCBVU3Ry
aW5nKCksIDEsIHNvdXJjZVByb3ZpZGVyLCAmc291cmNlSWQsICZlcnJMaW5lLCAmZXJyTXNnKTsK
LSAgICBpZiAoIWV2YWxOb2RlKQotICAgICAgICByZXR1cm4gRXJyb3I6OmNyZWF0ZSgmbmV3RXhl
YywgU3ludGF4RXJyb3IsIGVyck1zZywgZXJyTGluZSwgc291cmNlSWQsIDApOworICAgIGlmICgh
ZXZhbE5vZGUpIHsKKyAgICAgICAgSlNWYWx1ZSogZXJyb3IgPSBFcnJvcjo6Y3JlYXRlKCZuZXdF
eGVjLCBTeW50YXhFcnJvciwgZXJyTXNnLCBlcnJMaW5lLCBzb3VyY2VJZCwgMCk7CisgICAgICAg
IGV4Y2VwdGlvbiA9IGVycm9yOworICAgICAgICByZXR1cm4gZXJyb3I7CisgICAgfQogCi0gICAg
cmV0dXJuIG5ld0V4ZWMubWFjaGluZSgpLT5leGVjdXRlKGV2YWxOb2RlLmdldCgpLCAmbmV3RXhl
YywgdGhpc09iamVjdCwgbV9zY29wZUNoYWluLCAmZXhjZXB0aW9uKTsKKyAgICBKU1ZhbHVlKiBy
ZXN1bHQgPSBuZXdFeGVjLm1hY2hpbmUoKS0+ZXhlY3V0ZShldmFsTm9kZS5nZXQoKSwgJm5ld0V4
ZWMsIHRoaXNPYmplY3QoKSwgbV9zY29wZUNoYWluKTsKKyAgICBleGNlcHRpb24gPSBuZXdFeGVj
LmV4Y2VwdGlvbigpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpT
QwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL0V4ZWNTdGF0ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SmF2YVNjcmlwdENvcmUva2pzL0V4ZWNTdGF0ZS5jcHAJKHJldmlzaW9uIDM3MDM2KQorKysgSmF2
YVNjcmlwdENvcmUva2pzL0V4ZWNTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDQwICsy
MiwyNyBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRXhlY1N0YXRlLmgiCisK
ICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIkpTU3RyaW5nLmgiCiAjaW5j
bHVkZSAiU2NvcGVDaGFpbk1hcmsuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKLUV4ZWNTdGF0ZTo6
RXhlY1N0YXRlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBnbG9iYWxU
aGlzVmFsdWUsIFNjb3BlQ2hhaW5Ob2RlKiBnbG9iYWxTY29wZUNoYWluKQotICAgIDogbV9nbG9i
YWxPYmplY3QoZ2xvYmFsT2JqZWN0KQotICAgICwgbV9nbG9iYWxUaGlzVmFsdWUoZ2xvYmFsVGhp
c1ZhbHVlKQotICAgICwgbV9leGNlcHRpb24oMCkKLSAgICAsIG1fZ2xvYmFsRGF0YShnbG9iYWxP
YmplY3QtPmdsb2JhbERhdGEoKSkKLSAgICAsIG1fcHJldigwKQotICAgICwgbV9yZWdpc3RlckZp
bGUoMCkKK0V4ZWNTdGF0ZTo6RXhlY1N0YXRlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFNjb3BlQ2hhaW5Ob2RlKiBnbG9iYWxTY29wZUNoYWluKQorICAgIDogbV9nbG9iYWxEYXRhKGds
b2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpKQorICAgICwgbV9nbG9iYWxPYmplY3QoZ2xvYmFsT2Jq
ZWN0KQogICAgICwgbV9zY29wZUNoYWluKGdsb2JhbFNjb3BlQ2hhaW4pCiAgICAgLCBtX2NhbGxG
cmFtZSgwKQogewogfQogCi1FeGVjU3RhdGU6OkV4ZWNTdGF0ZShFeGVjU3RhdGUqIGV4ZWMsIFJl
Z2lzdGVyRmlsZSogcmVnaXN0ZXJGaWxlLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiwgUmVn
aXN0ZXIqIGNhbGxGcmFtZSkKLSAgICA6IG1fZ2xvYmFsT2JqZWN0KGV4ZWMtPm1fZ2xvYmFsT2Jq
ZWN0KQotICAgICwgbV9nbG9iYWxUaGlzVmFsdWUoZXhlYy0+bV9nbG9iYWxUaGlzVmFsdWUpCi0g
ICAgLCBtX2V4Y2VwdGlvbigwKQotICAgICwgbV9nbG9iYWxEYXRhKGV4ZWMtPm1fZ2xvYmFsRGF0
YSkKLSAgICAsIG1fcHJldihleGVjKQotICAgICwgbV9yZWdpc3RlckZpbGUocmVnaXN0ZXJGaWxl
KQorRXhlY1N0YXRlOjpFeGVjU3RhdGUoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSog
c2NvcGVDaGFpbiwgUmVnaXN0ZXIqIGNhbGxGcmFtZSkKKyAgICA6IG1fZ2xvYmFsRGF0YShleGVj
LT5tX2dsb2JhbERhdGEpCisgICAgLCBtX2dsb2JhbE9iamVjdChleGVjLT5tX2dsb2JhbE9iamVj
dCkKICAgICAsIG1fc2NvcGVDaGFpbihzY29wZUNoYWluKQotICAgICwgbV9jYWxsRnJhbWUoY2Fs
bEZyYW1lKQotewotICAgIEFTU0VSVCghZXhlYy0+bV9leGNlcHRpb24pOwotfQotCi1ib29sIEV4
ZWNTdGF0ZTo6aXNHbG9iYWxPYmplY3QoSlNPYmplY3QqIG8pIGNvbnN0CisgICAgLCBtX2NhbGxG
cmFtZShjYWxsRnJhbWUgPyBjYWxsRnJhbWUgOiBleGVjLT5tX2NhbGxGcmFtZSkKIHsKLSAgICBy
ZXR1cm4gby0+aXNHbG9iYWxPYmplY3QoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBKYXZhU2NyaXB0Q29yZS9ranMvRXhlY1N0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlw
dENvcmUva2pzL0V4ZWNTdGF0ZS5oCShyZXZpc2lvbiAzNzAzNikKKysrIEphdmFTY3JpcHRDb3Jl
L2tqcy9FeGVjU3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNzUgKzUyLDg1IEBAIG5hbWVz
cGFjZSBKU0MgIHsKICAgICAgICAgZnJpZW5kIGNsYXNzIE1hY2hpbmU7CiAgICAgICAgIGZyaWVu
ZCBjbGFzcyBEZWJ1Z2dlckNhbGxGcmFtZTsKICAgICBwdWJsaWM6Ci0gICAgICAgIEV4ZWNTdGF0
ZShKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiBnbG9iYWxUaGlzVmFsdWUsIFNjb3BlQ2hhaW5O
b2RlKiBnbG9iYWxTY29wZUNoYWluKTsKKyAgICAgICAgRXhlY1N0YXRlKEpTR2xvYmFsT2JqZWN0
KiwgU2NvcGVDaGFpbk5vZGUqIGdsb2JhbFNjb3BlQ2hhaW4pOwogCiAgICAgICAgIC8vIEdsb2Jh
bCBvYmplY3QgaW4gd2hpY2ggZXhlY3V0aW9uIGJlZ2FuLgogICAgICAgICBKU0dsb2JhbE9iamVj
dCogZHluYW1pY0dsb2JhbE9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFsT2JqZWN0OyB9
CiAgICAgICAgIAogICAgICAgICAvLyBHbG9iYWwgb2JqZWN0IGluIHdoaWNoIHRoZSBjdXJyZW50
IHNjcmlwdCB3YXMgZGVmaW5lZC4gKENhbiBkaWZmZXIKICAgICAgICAgLy8gZnJvbSBkeW5hbWlj
R2xvYmFsT2JqZWN0KCkgZHVyaW5nIGZ1bmN0aW9uIGNhbGxzIGFjcm9zcyBmcmFtZXMuKQotICAg
ICAgICBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCgpIGNvbnN0Ci0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBtX3Njb3BlQ2hhaW4tPmdsb2JhbE9iamVjdCgpOwotICAg
ICAgICB9Ci0gICAgICAgIAorICAgICAgICBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fc2NvcGVDaGFpbi0+Z2xvYmFsT2JqZWN0KCk7IH0KKwog
ICAgICAgICBKU09iamVjdCogZ2xvYmFsVGhpc1ZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9zY29w
ZUNoYWluLT5nbG9iYWxUaGlzT2JqZWN0KCk7IH0KICAgICAgICAgICAgICAgICAKICAgICAgICAg
Ly8gRXhjZXB0aW9uIHByb3BvZ2F0aW9uLgotICAgICAgICB2b2lkIHNldEV4Y2VwdGlvbihKU1Zh
bHVlKiBleGNlcHRpb24pIHsgbV9leGNlcHRpb24gPSBleGNlcHRpb247IH0KLSAgICAgICAgdm9p
ZCBjbGVhckV4Y2VwdGlvbigpIHsgbV9leGNlcHRpb24gPSAwOyB9Ci0gICAgICAgIEpTVmFsdWUq
IGV4Y2VwdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZXhjZXB0aW9uOyB9Ci0gICAgICAgIEpTVmFs
dWUqKiBleGNlcHRpb25TbG90KCkgeyByZXR1cm4gJm1fZXhjZXB0aW9uOyB9Ci0gICAgICAgIGJv
b2wgaGFkRXhjZXB0aW9uKCkgY29uc3QgeyByZXR1cm4gISFtX2V4Y2VwdGlvbjsgfQorICAgICAg
ICBKU1ZhbHVlKiBleGNlcHRpb24oKSBjb25zdCB7IHJldHVybiBnbG9iYWxEYXRhKCkuZXhjZXB0
aW9uOyB9CisgICAgICAgIEpTVmFsdWUqKiBleGNlcHRpb25TbG90KCkgeyByZXR1cm4gJmdsb2Jh
bERhdGEoKS5leGNlcHRpb247IH0KKyAgICAgICAgdm9pZCBzZXRFeGNlcHRpb24oSlNWYWx1ZSog
ZXhjZXB0aW9uKSB7ICpleGNlcHRpb25TbG90KCkgPSBleGNlcHRpb247IH0KKyAgICAgICAgdm9p
ZCBjbGVhckV4Y2VwdGlvbigpIHsgKmV4Y2VwdGlvblNsb3QoKSA9IDA7IH0KKyAgICAgICAgYm9v
bCBoYWRFeGNlcHRpb24oKSBjb25zdCB7IHJldHVybiAhIWV4Y2VwdGlvbigpOyB9CisKICNpZiBF
TkFCTEUoQ1RJKQotICAgICAgICB2b2lkIHNldENUSVJldHVybkFkZHJlc3Modm9pZCogY3RpUkEp
IHsgbV9jdGlSZXR1cm5BZGRyZXNzID0gY3RpUkE7IH0KLSAgICAgICAgdm9pZCogY3RpUmV0dXJu
QWRkcmVzcygpIGNvbnN0IHsgcmV0dXJuIG1fY3RpUmV0dXJuQWRkcmVzczsgfQorICAgICAgICB2
b2lkIHNldENUSVJldHVybkFkZHJlc3Modm9pZCogY3RpUkEpIHsgZ2xvYmFsRGF0YSgpLmN0aVJl
dHVybkFkZHJlc3MgPSBjdGlSQTsgfQorICAgICAgICB2b2lkKiBjdGlSZXR1cm5BZGRyZXNzKCkg
Y29uc3QgeyByZXR1cm4gZ2xvYmFsRGF0YSgpLmN0aVJldHVybkFkZHJlc3M7IH0KICNlbmRpZgog
Ci0gICAgICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSgpIHsgcmV0dXJuICptX2dsb2JhbERh
dGE7IH0KKyAgICAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKCkgY29uc3Q7CiAKLSAgICAg
ICAgSWRlbnRpZmllclRhYmxlKiBpZGVudGlmaWVyVGFibGUoKSB7IHJldHVybiBtX2dsb2JhbERh
dGEtPmlkZW50aWZpZXJUYWJsZTsgfQotICAgICAgICBjb25zdCBDb21tb25JZGVudGlmaWVycyYg
cHJvcGVydHlOYW1lcygpIGNvbnN0IHsgcmV0dXJuICptX2dsb2JhbERhdGEtPnByb3BlcnR5TmFt
ZXM7IH0KLSAgICAgICAgY29uc3QgQXJnTGlzdCYgZW1wdHlMaXN0KCkgY29uc3QgeyByZXR1cm4g
Km1fZ2xvYmFsRGF0YS0+ZW1wdHlMaXN0OyB9Ci0gICAgICAgIExleGVyKiBsZXhlcigpIHsgcmV0
dXJuIG1fZ2xvYmFsRGF0YS0+bGV4ZXI7IH0KLSAgICAgICAgUGFyc2VyKiBwYXJzZXIoKSB7IHJl
dHVybiBtX2dsb2JhbERhdGEtPnBhcnNlcjsgfQotICAgICAgICBNYWNoaW5lKiBtYWNoaW5lKCkg
Y29uc3QgeyByZXR1cm4gbV9nbG9iYWxEYXRhLT5tYWNoaW5lOyB9Ci0gICAgICAgIHN0YXRpYyBj
b25zdCBIYXNoVGFibGUqIGFycmF5VGFibGUoRXhlY1N0YXRlKiBleGVjKSB7IHJldHVybiBleGVj
LT5tX2dsb2JhbERhdGEtPmFycmF5VGFibGU7IH0KLSAgICAgICAgc3RhdGljIGNvbnN0IEhhc2hU
YWJsZSogZGF0ZVRhYmxlKEV4ZWNTdGF0ZSogZXhlYykgeyByZXR1cm4gZXhlYy0+bV9nbG9iYWxE
YXRhLT5kYXRlVGFibGU7IH0KLSAgICAgICAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZSogbWF0aFRh
YmxlKEV4ZWNTdGF0ZSogZXhlYykgeyByZXR1cm4gZXhlYy0+bV9nbG9iYWxEYXRhLT5tYXRoVGFi
bGU7IH0KLSAgICAgICAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZSogbnVtYmVyVGFibGUoRXhlY1N0
YXRlKiBleGVjKSB7IHJldHVybiBleGVjLT5tX2dsb2JhbERhdGEtPm51bWJlclRhYmxlOyB9Ci0g
ICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIHJlZ0V4cFRhYmxlKEV4ZWNTdGF0ZSogZXhl
YykgeyByZXR1cm4gZXhlYy0+bV9nbG9iYWxEYXRhLT5yZWdFeHBUYWJsZTsgfQotICAgICAgICBz
dGF0aWMgY29uc3QgSGFzaFRhYmxlKiByZWdFeHBDb25zdHJ1Y3RvclRhYmxlKEV4ZWNTdGF0ZSog
ZXhlYykgeyByZXR1cm4gZXhlYy0+bV9nbG9iYWxEYXRhLT5yZWdFeHBDb25zdHJ1Y3RvclRhYmxl
OyB9Ci0gICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIHN0cmluZ1RhYmxlKEV4ZWNTdGF0
ZSogZXhlYykgeyByZXR1cm4gZXhlYy0+bV9nbG9iYWxEYXRhLT5zdHJpbmdUYWJsZTsgfQorICAg
ICAgICBJZGVudGlmaWVyVGFibGUqIGlkZW50aWZpZXJUYWJsZSgpIGNvbnN0OworICAgICAgICBj
b25zdCBDb21tb25JZGVudGlmaWVycyYgcHJvcGVydHlOYW1lcygpIGNvbnN0OworICAgICAgICBj
b25zdCBBcmdMaXN0JiBlbXB0eUxpc3QoKSBjb25zdDsKKyAgICAgICAgTGV4ZXIqIGxleGVyKCkg
Y29uc3Q7CisgICAgICAgIFBhcnNlciogcGFyc2VyKCkgY29uc3Q7CisgICAgICAgIE1hY2hpbmUq
IG1hY2hpbmUoKSBjb25zdDsKKworICAgICAgICBzdGF0aWMgY29uc3QgSGFzaFRhYmxlKiBhcnJh
eVRhYmxlKEV4ZWNTdGF0ZSopOworICAgICAgICBzdGF0aWMgY29uc3QgSGFzaFRhYmxlKiBkYXRl
VGFibGUoRXhlY1N0YXRlKik7CisgICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIG1hdGhU
YWJsZShFeGVjU3RhdGUqKTsKKyAgICAgICAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZSogbnVtYmVy
VGFibGUoRXhlY1N0YXRlKik7CisgICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIHJlZ0V4
cFRhYmxlKEV4ZWNTdGF0ZSopOworICAgICAgICBzdGF0aWMgY29uc3QgSGFzaFRhYmxlKiByZWdF
eHBDb25zdHJ1Y3RvclRhYmxlKEV4ZWNTdGF0ZSopOworICAgICAgICBzdGF0aWMgY29uc3QgSGFz
aFRhYmxlKiBzdHJpbmdUYWJsZShFeGVjU3RhdGUqKTsKIAotICAgICAgICBIZWFwKiBoZWFwKCkg
Y29uc3QgeyByZXR1cm4gbV9nbG9iYWxEYXRhLT5oZWFwOyB9CisgICAgICAgIEhlYXAqIGhlYXAo
KSBjb25zdCB7IHJldHVybiBnbG9iYWxEYXRhKCkuaGVhcDsgfQogCiAgICAgcHJpdmF0ZToKICAg
ICAgICAgLy8gRGVmYXVsdCBjb25zdHJ1Y3RvciByZXF1aXJlZCBmb3IgZ2NjIDMuCiAgICAgICAg
IEV4ZWNTdGF0ZSgpIHsgfQogCi0gICAgICAgIEV4ZWNTdGF0ZShFeGVjU3RhdGUqLCBSZWdpc3Rl
ckZpbGUqLCBTY29wZUNoYWluTm9kZSosIFJlZ2lzdGVyKiBjYWxsRnJhbWUpOwotCi0gICAgICAg
IGJvb2wgaXNHbG9iYWxPYmplY3QoSlNPYmplY3QqKSBjb25zdDsKKyAgICAgICAgRXhlY1N0YXRl
KEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKiwgUmVnaXN0ZXIqIGNhbGxGcmFtZSk7CiAKKyAg
ICAgICAgSlNHbG9iYWxEYXRhKiBtX2dsb2JhbERhdGE7CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0
KiBtX2dsb2JhbE9iamVjdDsKLSAgICAgICAgSlNPYmplY3QqIG1fZ2xvYmFsVGhpc1ZhbHVlOwog
Ci0gICAgICAgIEpTVmFsdWUqIG1fZXhjZXB0aW9uOwogI2lmIEVOQUJMRShDVEkpCiAgICAgICAg
IHZvaWQqIG1fY3RpUmV0dXJuQWRkcmVzczsKICNlbmRpZgotICAgICAgICBKU0dsb2JhbERhdGEq
IG1fZ2xvYmFsRGF0YTsKIAogICAgICAgICAvLyBUaGVzZSB2YWx1ZXMgYXJlIGNvbnRyb2xsZWQg
YnkgdGhlIG1hY2hpbmUuCi0gICAgICAgIEV4ZWNTdGF0ZSogbV9wcmV2OwotICAgICAgICBSZWdp
c3RlckZpbGUqIG1fcmVnaXN0ZXJGaWxlOwogICAgICAgICBTY29wZUNoYWluTm9kZSogbV9zY29w
ZUNoYWluOwogICAgICAgICBSZWdpc3RlciogbV9jYWxsRnJhbWU7IC8vIFRoZSBtb3N0IHJlY2Vu
dCBjYWxsIGZyYW1lLgogICAgIH07CiAKICAgICBlbnVtIENvZGVUeXBlIHsgR2xvYmFsQ29kZSwg
RXZhbENvZGUsIEZ1bmN0aW9uQ29kZSB9OwogCisgICAgaW5saW5lIEpTR2xvYmFsRGF0YSYgRXhl
Y1N0YXRlOjpnbG9iYWxEYXRhKCkgY29uc3QgeyByZXR1cm4gKm1fZ2xvYmFsRGF0YTsgfQorCisg
ICAgaW5saW5lIElkZW50aWZpZXJUYWJsZSogRXhlY1N0YXRlOjppZGVudGlmaWVyVGFibGUoKSBj
b25zdCB7IHJldHVybiBnbG9iYWxEYXRhKCkuaWRlbnRpZmllclRhYmxlOyB9CisgICAgaW5saW5l
IGNvbnN0IENvbW1vbklkZW50aWZpZXJzJiBFeGVjU3RhdGU6OnByb3BlcnR5TmFtZXMoKSBjb25z
dCB7IHJldHVybiAqZ2xvYmFsRGF0YSgpLnByb3BlcnR5TmFtZXM7IH0KKyAgICBpbmxpbmUgY29u
c3QgQXJnTGlzdCYgRXhlY1N0YXRlOjplbXB0eUxpc3QoKSBjb25zdCB7IHJldHVybiAqZ2xvYmFs
RGF0YSgpLmVtcHR5TGlzdDsgfQorICAgIGlubGluZSBMZXhlciogRXhlY1N0YXRlOjpsZXhlcigp
IGNvbnN0IHsgcmV0dXJuIGdsb2JhbERhdGEoKS5sZXhlcjsgfQorICAgIGlubGluZSBQYXJzZXIq
IEV4ZWNTdGF0ZTo6cGFyc2VyKCkgY29uc3QgeyByZXR1cm4gZ2xvYmFsRGF0YSgpLnBhcnNlcjsg
fQorICAgIGlubGluZSBNYWNoaW5lKiBFeGVjU3RhdGU6Om1hY2hpbmUoKSBjb25zdCB7IHJldHVy
biBnbG9iYWxEYXRhKCkubWFjaGluZTsgfQorCisgICAgaW5saW5lIGNvbnN0IEhhc2hUYWJsZSog
RXhlY1N0YXRlOjphcnJheVRhYmxlKEV4ZWNTdGF0ZSogZXhlYykgeyByZXR1cm4gZXhlYy0+Z2xv
YmFsRGF0YSgpLmFycmF5VGFibGU7IH0KKyAgICBpbmxpbmUgY29uc3QgSGFzaFRhYmxlKiBFeGVj
U3RhdGU6OmRhdGVUYWJsZShFeGVjU3RhdGUqIGV4ZWMpIHsgcmV0dXJuIGV4ZWMtPmdsb2JhbERh
dGEoKS5kYXRlVGFibGU7IH0KKyAgICBpbmxpbmUgY29uc3QgSGFzaFRhYmxlKiBFeGVjU3RhdGU6
Om1hdGhUYWJsZShFeGVjU3RhdGUqIGV4ZWMpIHsgcmV0dXJuIGV4ZWMtPmdsb2JhbERhdGEoKS5t
YXRoVGFibGU7IH0KKyAgICBpbmxpbmUgY29uc3QgSGFzaFRhYmxlKiBFeGVjU3RhdGU6Om51bWJl
clRhYmxlKEV4ZWNTdGF0ZSogZXhlYykgeyByZXR1cm4gZXhlYy0+Z2xvYmFsRGF0YSgpLm51bWJl
clRhYmxlOyB9CisgICAgaW5saW5lIGNvbnN0IEhhc2hUYWJsZSogRXhlY1N0YXRlOjpyZWdFeHBU
YWJsZShFeGVjU3RhdGUqIGV4ZWMpIHsgcmV0dXJuIGV4ZWMtPmdsb2JhbERhdGEoKS5yZWdFeHBU
YWJsZTsgfQorICAgIGlubGluZSBjb25zdCBIYXNoVGFibGUqIEV4ZWNTdGF0ZTo6cmVnRXhwQ29u
c3RydWN0b3JUYWJsZShFeGVjU3RhdGUqIGV4ZWMpIHsgcmV0dXJuIGV4ZWMtPmdsb2JhbERhdGEo
KS5yZWdFeHBDb25zdHJ1Y3RvclRhYmxlOyB9CisgICAgaW5saW5lIGNvbnN0IEhhc2hUYWJsZSog
RXhlY1N0YXRlOjpzdHJpbmdUYWJsZShFeGVjU3RhdGUqIGV4ZWMpIHsgcmV0dXJuIGV4ZWMtPmds
b2JhbERhdGEoKS5zdHJpbmdUYWJsZTsgfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlm
IC8vIEV4ZWNTdGF0ZV9oCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvSlNGdW5jdGlvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL0pTRnVuY3Rpb24uY3BwCShyZXZpc2lv
biAzNzAzNikKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9KU0Z1bmN0aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjcsNyArNjcsNyBAQCBDYWxsVHlwZSBKU0Z1bmN0aW9uOjpnZXRDYWxsRGF0YShD
YWxsRGF0CiAKIEpTVmFsdWUqIEpTRnVuY3Rpb246OmNhbGwoRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7Ci0gICAgcmV0dXJuIGV4ZWMt
Pm1hY2hpbmUoKS0+ZXhlY3V0ZShtX2JvZHkuZ2V0KCksIGV4ZWMsIHRoaXMsIHRoaXNWYWx1ZS0+
dG9UaGlzT2JqZWN0KGV4ZWMpLCBhcmdzLCBtX3Njb3BlQ2hhaW4ubm9kZSgpLCBleGVjLT5leGNl
cHRpb25TbG90KCkpOworICAgIHJldHVybiBleGVjLT5tYWNoaW5lKCktPmV4ZWN1dGUobV9ib2R5
LmdldCgpLCBleGVjLCB0aGlzLCB0aGlzVmFsdWUtPnRvVGhpc09iamVjdChleGVjKSwgYXJncywg
bV9zY29wZUNoYWluLm5vZGUoKSk7CiB9CiAKIEpTVmFsdWUqIEpTRnVuY3Rpb246OmFyZ3VtZW50
c0dldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0
eVNsb3QmIHNsb3QpCkBAIC0xNjYsNyArMTY2LDcgQEAgSlNPYmplY3QqIEpTRnVuY3Rpb246OmNv
bnN0cnVjdChFeGVjU3RhdAogICAgICAgICBzdHJ1Y3R1cmUgPSBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCktPmVtcHR5T2JqZWN0U3RydWN0dXJlKCk7CiAgICAgSlNPYmplY3QqIHRoaXNPYmog
PSBuZXcgKGV4ZWMpIEpTT2JqZWN0KHN0cnVjdHVyZSk7CiAKLSAgICBKU1ZhbHVlKiByZXN1bHQg
PSBleGVjLT5tYWNoaW5lKCktPmV4ZWN1dGUobV9ib2R5LmdldCgpLCBleGVjLCB0aGlzLCB0aGlz
T2JqLCBhcmdzLCBtX3Njb3BlQ2hhaW4ubm9kZSgpLCBleGVjLT5leGNlcHRpb25TbG90KCkpOwor
ICAgIEpTVmFsdWUqIHJlc3VsdCA9IGV4ZWMtPm1hY2hpbmUoKS0+ZXhlY3V0ZShtX2JvZHkuZ2V0
KCksIGV4ZWMsIHRoaXMsIHRoaXNPYmosIGFyZ3MsIG1fc2NvcGVDaGFpbi5ub2RlKCkpOwogICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSB8fCAhcmVzdWx0LT5pc09iamVjdCgpKQogICAgICAg
ICByZXR1cm4gdGhpc09iajsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihyZXN1
bHQpOwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL0pTR2xvYmFsRGF0YS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL0pTR2xvYmFsRGF0YS5jcHAJKHJldmlzaW9uIDM3MDM2
KQorKysgSmF2YVNjcmlwdENvcmUva2pzL0pTR2xvYmFsRGF0YS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU5LDYgKzU5LDcgQEAgZXh0ZXJuIGNvbnN0IEhhc2hUYWJsZSBzdHJpbmdUYWJsZTsKIEpT
R2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKGJvb2wgaXNTaGFyZWQpCiAgICAgOiBtYWNoaW5lKG5l
dyBNYWNoaW5lKQogICAgICwgaGVhcChuZXcgSGVhcCh0aGlzKSkKKyAgICAsIGV4Y2VwdGlvbigw
KQogI2lmIEVOQUJMRShKU0NfTVVMVElQTEVfVEhSRUFEUykKICAgICAsIGFycmF5VGFibGUobmV3
IEhhc2hUYWJsZShKU0M6OmFycmF5VGFibGUpKQogICAgICwgZGF0ZVRhYmxlKG5ldyBIYXNoVGFi
bGUoSlNDOjpkYXRlVGFibGUpKQpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL0pTR2xvYmFsRGF0
YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9KU0dsb2JhbERhdGEuaAkocmV2
aXNpb24gMzcwMzYpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvSlNHbG9iYWxEYXRhLmgJKHdvcmtp
bmcgY29weSkKQEAgLTY1LDYgKzY1LDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBNYWNo
aW5lKiBtYWNoaW5lOwogICAgICAgICBIZWFwKiBoZWFwOwogCisgICAgICAgIEpTVmFsdWUqIGV4
Y2VwdGlvbjsKKyNpZiBFTkFCTEUoQ1RJKQorICAgICAgICB2b2lkKiBjdGlSZXR1cm5BZGRyZXNz
OworI2VuZGlmCisKICAgICAgICAgY29uc3QgSGFzaFRhYmxlKiBhcnJheVRhYmxlOwogICAgICAg
ICBjb25zdCBIYXNoVGFibGUqIGRhdGVUYWJsZTsKICAgICAgICAgY29uc3QgSGFzaFRhYmxlKiBt
YXRoVGFibGU7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvSlNHbG9iYWxPYmplY3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9KU0dsb2JhbE9iamVjdC5jcHAJKHJldmlz
aW9uIDM3MDM2KQorKysgSmF2YVNjcmlwdENvcmUva2pzL0pTR2xvYmFsT2JqZWN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTIyLDcgKzEyMiw3IEBAIEpTR2xvYmFsT2JqZWN0Ojp+SlNHbG9iYWxP
YmplY3QoKQogICAgIGRlbGV0ZSBkKCk7CiB9CiAKLXZvaWQgSlNHbG9iYWxPYmplY3Q6OmluaXQo
SlNPYmplY3QqIHRoaXNWYWx1ZSkKK3ZvaWQgSlNHbG9iYWxPYmplY3Q6OmluaXQoKQogewogICAg
IEFTU0VSVChKU0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkpOwogCkBAIC0xMzks
NyArMTM5LDcgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6aW5pdChKU09iamVjdCogdGhpcwogICAg
IGQoKS0+cmVjdXJzaW9uID0gMDsKICAgICBkKCktPmRlYnVnZ2VyID0gMDsKIAotICAgIGQoKS0+
Z2xvYmFsRXhlYy5zZXQobmV3IEV4ZWNTdGF0ZSh0aGlzLCB0aGlzVmFsdWUsIGQoKS0+Z2xvYmFs
U2NvcGVDaGFpbi5ub2RlKCkpKTsKKyAgICBkKCktPmdsb2JhbEV4ZWMuc2V0KG5ldyBFeGVjU3Rh
dGUodGhpcywgZCgpLT5nbG9iYWxTY29wZUNoYWluLm5vZGUoKSkpOwogCiAgICAgZCgpLT5wcm9m
aWxlR3JvdXAgPSAwOwogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvSlNHbG9iYWxPYmplY3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvSlNHbG9iYWxPYmplY3QuaAkocmV2
aXNpb24gMzcwMzYpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvSlNHbG9iYWxPYmplY3QuaAkod29y
a2luZyBjb3B5KQpAQCAtMTQ2LDE0ICsxNDYsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IEpTR2xvYmFsT2JqZWN0KEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKICAgICAgICAgICAgIDog
SlNWYXJpYWJsZU9iamVjdChnbG9iYWxEYXRhLT5udWxsUHJvdG9TdHJ1Y3R1cmVJRCwgbmV3IEpT
R2xvYmFsT2JqZWN0RGF0YSh0aGlzLCB0aGlzKSkKICAgICAgICAgewotICAgICAgICAgICAgaW5p
dCh0aGlzKTsKKyAgICAgICAgICAgIGluaXQoKTsKICAgICAgICAgfQogCiAgICAgcHJvdGVjdGVk
OgotICAgICAgICBKU0dsb2JhbE9iamVjdChQYXNzUmVmUHRyPFN0cnVjdHVyZUlEPiBzdHJ1Y3R1
cmUsIEpTR2xvYmFsT2JqZWN0RGF0YSogZGF0YSwgSlNPYmplY3QqIGdsb2JhbFRoaXNWYWx1ZSkK
KyAgICAgICAgSlNHbG9iYWxPYmplY3QoUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJRD4gc3RydWN0dXJl
LCBKU0dsb2JhbE9iamVjdERhdGEqIGRhdGEpCiAgICAgICAgICAgICA6IEpTVmFyaWFibGVPYmpl
Y3Qoc3RydWN0dXJlLCBkYXRhKQogICAgICAgICB7Ci0gICAgICAgICAgICBpbml0KGdsb2JhbFRo
aXNWYWx1ZSk7CisgICAgICAgICAgICBpbml0KCk7CiAgICAgICAgIH0KIAogICAgIHB1YmxpYzoK
QEAgLTI2OSw3ICsyNjksNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIHByaXZhdGU6CiAgICAg
ICAgIC8vIEZJWE1FOiBGb2xkIHRoZXNlIGZ1bmN0aW9ucyBpbnRvIHRoZSBjb25zdHJ1Y3Rvci4K
LSAgICAgICAgdm9pZCBpbml0KEpTT2JqZWN0KiB0aGlzVmFsdWUpOworICAgICAgICB2b2lkIGlu
aXQoKTsKICAgICAgICAgdm9pZCByZXNldChKU1ZhbHVlKiBwcm90b3R5cGUpOwogCiAgICAgICAg
IHZvaWQgc2V0UmVnaXN0ZXJzKFJlZ2lzdGVyKiByZWdpc3RlcnMsIFJlZ2lzdGVyKiByZWdpc3Rl
ckFycmF5LCBzaXplX3QgY291bnQpOwpAQCAtMzM0LDcgKzMzNCw2IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICByZXR1cm4gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5udW1iZXJQcm90
b3R5cGUoKTsKICAgICB9CiAKLQogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBKU0ds
b2JhbE9iamVjdF9oCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvSlNHbG9iYWxPYmplY3RGdW5j
dGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9KU0dsb2JhbE9iamVj
dEZ1bmN0aW9ucy5jcHAJKHJldmlzaW9uIDM3MDM2KQorKysgSmF2YVNjcmlwdENvcmUva2pzL0pT
R2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjg5LDcgKzI4OSw3
IEBAIEpTVmFsdWUqIGdsb2JhbEZ1bmNFdmFsKEV4ZWNTdGF0ZSogZXhlYywKICAgICBpZiAoIWV2
YWxOb2RlKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvciwgZXJy
TXNnLCBlcnJMaW5lLCBzb3VyY2VJZCwgTlVMTCk7CiAKLSAgICByZXR1cm4gZXhlYy0+bWFjaGlu
ZSgpLT5leGVjdXRlKGV2YWxOb2RlLmdldCgpLCBleGVjLCB0aGlzT2JqZWN0LCBnbG9iYWxPYmpl
Y3QtPmdsb2JhbFNjb3BlQ2hhaW4oKS5ub2RlKCksIGV4ZWMtPmV4Y2VwdGlvblNsb3QoKSk7Cisg
ICAgcmV0dXJuIGV4ZWMtPm1hY2hpbmUoKS0+ZXhlY3V0ZShldmFsTm9kZS5nZXQoKSwgZXhlYywg
dGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZUNoYWluKCkubm9kZSgpKTsKIH0K
IAogSlNWYWx1ZSogZ2xvYmFsRnVuY1BhcnNlSW50KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
LCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYgYXJncykKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tq
cy9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L2tqcy9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5oCShyZXZpc2lvbiAzNzAzNikKKysrIEphdmFT
Y3JpcHRDb3JlL2tqcy9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNCw2ICsyNCw4IEBACiAjaWZuZGVmIEpTR2xvYmFsT2JqZWN0RnVuY3Rpb25zX2gKICNkZWZp
bmUgSlNHbG9iYWxPYmplY3RGdW5jdGlvbnNfaAogCisjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVW5p
Y29kZS5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEFyZ0xpc3Q7CkBAIC00OSw4
ICs1MSw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIEpTVmFsdWUqIGdsb2JhbEZ1bmNLSlNQcmlu
dChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7CiAjZW5k
aWYKIAotICAgIHN0YXRpYyBjb25zdCBkb3VibGUgbWFudGlzc2FPdmVyZmxvd0xvd2VyQm91bmQg
PSA5MDA3MTk5MjU0NzQwOTkyLjA7CisgICAgY29uc3QgZG91YmxlIG1hbnRpc3NhT3ZlcmZsb3dM
b3dlckJvdW5kID0gOTAwNzE5OTI1NDc0MDk5Mi4wOwogICAgIGRvdWJsZSBwYXJzZUludE92ZXJm
bG93KGNvbnN0IGNoYXIqLCBpbnQgbGVuZ3RoLCBpbnQgcmFkaXgpOworICAgIGJvb2wgaXNTdHJX
aGl0ZVNwYWNlKFVDaGFyKTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IEphdmFTY3Jp
cHRDb3JlL2tqcy9pbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUv
a2pzL2ludGVycHJldGVyLmNwcAkocmV2aXNpb24gMzcwMzYpCisrKyBKYXZhU2NyaXB0Q29yZS9r
anMvaW50ZXJwcmV0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw2ICs2NCw4IEBAIENvbXBs
ZXRpb24gSW50ZXJwcmV0ZXI6OmV2YWx1YXRlKEV4ZWNTdGEKIAogQ29tcGxldGlvbiBJbnRlcnBy
ZXRlcjo6ZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluJiBzY29wZUNoYWluLCBj
b25zdCBVU3RyaW5nJiBzb3VyY2VVUkwsIGludCBzdGFydGluZ0xpbmVOdW1iZXIsIFBhc3NSZWZQ
dHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZSwgSlNWYWx1ZSogdGhpc1ZhbHVlKQogeworICAgIEFT
U0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworCiAgICAgSlNMb2NrIGxvY2soZXhlYyk7CiAg
ICAgCiAgICAgLy8gcGFyc2UgdGhlIHNvdXJjZSBjb2RlCkBAIC03OSwxMCArODEsMTEgQEAgQ29t
cGxldGlvbiBJbnRlcnByZXRlcjo6ZXZhbHVhdGUoRXhlY1N0YQogCiAgICAgSlNPYmplY3QqIHRo
aXNPYmogPSAoIXRoaXNWYWx1ZSB8fCB0aGlzVmFsdWUtPmlzVW5kZWZpbmVkT3JOdWxsKCkpID8g
ZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpIDogdGhpc1ZhbHVlLT50b09iamVjdChleGVjKTsK
IAotICAgIEpTVmFsdWUqIGV4Y2VwdGlvbiA9IDA7Ci0gICAgSlNWYWx1ZSogcmVzdWx0ID0gZXhl
Yy0+bWFjaGluZSgpLT5leGVjdXRlKHByb2dyYW1Ob2RlLmdldCgpLCBleGVjLCBzY29wZUNoYWlu
Lm5vZGUoKSwgdGhpc09iaiwgJmV4Y2VwdGlvbik7CisgICAgSlNWYWx1ZSogcmVzdWx0ID0gZXhl
Yy0+bWFjaGluZSgpLT5leGVjdXRlKHByb2dyYW1Ob2RlLmdldCgpLCBleGVjLCBzY29wZUNoYWlu
Lm5vZGUoKSwgdGhpc09iaik7CiAKLSAgICBpZiAoZXhjZXB0aW9uKSB7CisgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKSB7CisgICAgICAgIEpTVmFsdWUqIGV4Y2VwdGlvbiA9IGV4ZWMtPmV4
Y2VwdGlvbigpOworICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICBpZiAo
ZXhjZXB0aW9uLT5pc09iamVjdCgpICYmIHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4oZXhjZXB0aW9u
KS0+aXNXYXRjaGRvZ0V4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIENvbXBsZXRpb24o
SW50ZXJydXB0ZWQsIHJlc3VsdCk7CiAgICAgICAgIHJldHVybiBDb21wbGV0aW9uKFRocm93LCBl
eGNlcHRpb24pOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAko
cmV2aXNpb24gMzcwMzYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI3Niw3ICsyNzYsNyBAQCBKU0RPTVdpbmRvd0Jhc2U6OkpT
RE9NV2luZG93QmFzZURhdGE6OkpTCiB9CiAKIEpTRE9NV2luZG93QmFzZTo6SlNET01XaW5kb3dC
YXNlKFBhc3NSZWZQdHI8U3RydWN0dXJlSUQ+IHN0cnVjdHVyZSwgUGFzc1JlZlB0cjxET01XaW5k
b3c+IHdpbmRvdywgSlNET01XaW5kb3dTaGVsbCogc2hlbGwpCi0gICAgOiBKU0dsb2JhbE9iamVj
dChzdHJ1Y3R1cmUsIG5ldyBKU0RPTVdpbmRvd0Jhc2VEYXRhKHdpbmRvdywgdGhpcywgc2hlbGwp
LCBzaGVsbCkKKyAgICA6IEpTR2xvYmFsT2JqZWN0KHN0cnVjdHVyZSwgbmV3IEpTRE9NV2luZG93
QmFzZURhdGEod2luZG93LCB0aGlzLCBzaGVsbCkpCiB7CiAgICAgLy8gVGltZSBpbiBtaWxsaXNl
Y29uZHMgYmVmb3JlIHRoZSBzY3JpcHQgdGltZW91dCBoYW5kbGVyIGtpY2tzIGluLgogICAgIHNl
dFRpbWVvdXRUaW1lKDEwMDAwKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23911</attachid>
            <date>2008-09-29 09:41:17 -0700</date>
            <delta_ts>2008-09-29 09:41:17 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>ExecStatePatch2.txt</filename>
            <type>text/plain</type>
            <size>66430</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJKHJldmlzaW9uIDM3MDYyKQorKysgSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzcsNyAr
MTM3LDYgQEAgX19aTjNKU0MxMmpzTnVtYmVyQ2VsbEVQTlNfOUV4ZWNTdGF0ZUVkCiBfX1pOM0pT
QzEzQ29kZUdlbmVyYXRvcjIxc2V0RHVtcHNHZW5lcmF0ZWRDb2RlRWIKIF9fWk4zSlNDMTNTdGF0
ZW1lbnROb2RlNnNldExvY0VpaQogX19aTjNKU0MxM2pzT3duZWRTdHJpbmdFUE5TXzlFeGVjU3Rh
dGVFUktOU183VVN0cmluZ0UKLV9fWk4zSlNDMTRKU0dsb2JhbE9iamVjdDEwZ2xvYmFsRXhlY0V2
CiBfX1pOM0pTQzE0SlNHbG9iYWxPYmplY3QxMmRlZmluZUdldHRlckVQTlNfOUV4ZWNTdGF0ZUVS
S05TXzEwSWRlbnRpZmllckVQTlNfOEpTT2JqZWN0RQogX19aTjNKU0MxNEpTR2xvYmFsT2JqZWN0
MTJkZWZpbmVTZXR0ZXJFUE5TXzlFeGVjU3RhdGVFUktOU18xMElkZW50aWZpZXJFUE5TXzhKU09i
amVjdEUKIF9fWk4zSlNDMTRKU0dsb2JhbE9iamVjdDE0c2V0VGltZW91dFRpbWVFagpAQCAtMTQ1
LDcgKzE0NCw3IEBAIF9fWk4zSlNDMTRKU0dsb2JhbE9iamVjdDE2c3RvcFRpbWVvdXRDaGUKIF9f
Wk4zSlNDMTRKU0dsb2JhbE9iamVjdDE3cHV0V2l0aEF0dHJpYnV0ZXNFUE5TXzlFeGVjU3RhdGVF
UktOU18xMElkZW50aWZpZXJFUE5TXzdKU1ZhbHVlRWoKIF9fWk4zSlNDMTRKU0dsb2JhbE9iamVj
dDE3c3RhcnRUaW1lb3V0Q2hlY2tFdgogX19aTjNKU0MxNEpTR2xvYmFsT2JqZWN0M3B1dEVQTlNf
OUV4ZWNTdGF0ZUVSS05TXzEwSWRlbnRpZmllckVQTlNfN0pTVmFsdWVFUk5TXzE1UHV0UHJvcGVy
dHlTbG90RQotX19aTjNKU0MxNEpTR2xvYmFsT2JqZWN0NGluaXRFUE5TXzhKU09iamVjdEUKK19f
Wk4zSlNDMTRKU0dsb2JhbE9iamVjdDRpbml0RXYKIF9fWk4zSlNDMTRKU0dsb2JhbE9iamVjdDRt
YXJrRXYKIF9fWk4zSlNDMTRKU0dsb2JhbE9iamVjdEQyRXYKIF9fWk4zSlNDMTRKU0dsb2JhbE9i
amVjdG53RW1QTlNfMTJKU0dsb2JhbERhdGFFCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9BUEkvSlND
YWxsYmFja09iamVjdEZ1bmN0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0FQ
SS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgJKHJldmlzaW9uIDM3MDYyKQorKysgSmF2YVNj
cmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAkod29ya2luZyBjb3B5KQpA
QCAtNTUsNyArNTUsNyBAQCBKU0NhbGxiYWNrT2JqZWN0PEJhc2U+OjpKU0NhbGxiYWNrT2JqZWN0
CiAgICAgLCBtX2NhbGxiYWNrT2JqZWN0RGF0YShuZXcgSlNDYWxsYmFja09iamVjdERhdGEoMCwg
anNDbGFzcykpCiB7CiAgICAgQVNTRVJUKEJhc2U6OmlzR2xvYmFsT2JqZWN0KCkpOwotICAgIGlu
aXQoc3RhdGljX2Nhc3Q8SlNHbG9iYWxPYmplY3QqPih0aGlzKS0+Z2xvYmFsRXhlYygpKTsKKyAg
ICBpbml0KHN0YXRpY19jYXN0PEV4ZWNTdGF0ZSo+KGdsb2JhbERhdGEpKTsKIH0KIAogdGVtcGxh
dGUgPGNsYXNzIEJhc2U+CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9WTS9DVEkuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRDb3JlL1ZNL0NUSS5jcHAJKHJldmlzaW9uIDM3MDYyKQorKysgSmF2
YVNjcmlwdENvcmUvVk0vQ1RJLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODIsMTMgKzgyLDYgQEAg
YXNtKAogYXNtKAogIi5nbG9ibCBfY3RpVk1UaHJvd1RyYW1wb2xpbmUiICJcbiIKICJfY3RpVk1U
aHJvd1RyYW1wb2xpbmU6IiAiXG4iCi0jaWZuZGVmIE5ERUJVRwotICAgICJtb3ZsIDB4MzQoJWVz
cCksICVlY3giICJcbiIgLy9PeDM0ID0gMHgwRCAqIDQsIDB4MEQgPSBDVElfQVJHU19leGVjCi0g
ICAgImNtcGwgJDAsIDgoJWVjeCkiICJcbiIKLSAgICAiam5lIDFmIiAiXG4iCi0gICAgImludDMi
ICJcbiIKLSAgICAiMToiICJcbiIKLSNlbmRpZgogICAgICJjYWxsIF9fWk4zSlNDN01hY2hpbmUx
MmN0aV92bV90aHJvd0VQdiIgIlxuIgogICAgICJhZGRsICQweDI0LCAlZXNwIiAiXG4iCiAgICAg
InBvcGwgJWVkaSIgIlxuIgpAQCAtOTcsMTAgKzkwLDkgQEAgYXNtKAogKTsKICAgICAKICNlbGlm
IENPTVBJTEVSKE1TVkMpCi1leHRlcm4gIkMiCi17Ci0gICAgCi0gICAgX19kZWNsc3BlYyhuYWtl
ZCkgSlNWYWx1ZSogY3RpVHJhbXBvbGluZSh2b2lkKiBjb2RlLCBFeGVjU3RhdGUqIGV4ZWMsIFJl
Z2lzdGVyRmlsZSogcmVnaXN0ZXJGaWxlLCBSZWdpc3RlciogciwgU2NvcGVDaGFpbk5vZGUqIHNj
b3BlQ2hhaW4sIEpTVmFsdWUqKiBleGNlcHRpb24sIFByb2ZpbGVyKiopCitleHRlcm4gIkMiIHsK
KworICAgIF9fZGVjbHNwZWMobmFrZWQpIEpTVmFsdWUqIGN0aVRyYW1wb2xpbmUodm9pZCogY29k
ZSwgRXhlY1N0YXRlKiBleGVjLCBSZWdpc3RlckZpbGUqIHJlZ2lzdGVyRmlsZSwgUmVnaXN0ZXIq
IHIsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluLCBQcm9maWxlcioqKQogICAgIHsKICAgICAg
ICAgX19hc20gewogICAgICAgICAgICAgcHVzaCBlc2k7CkBAIC0yMzksMjEgKzIzMSw2IEBAIHZv
aWQgY3RpUmVwYXRjaENhbGxCeVJldHVybkFkZHJlc3Modm9pZCoKIAogI2lmZGVmIE5ERUJVRwog
Ci1BTFdBWVNfSU5MSU5FIHZvaWQgQ1RJOjplbWl0RGVidWdFeGNlcHRpb25DaGVjaygpCi17Ci19
Ci0KLSNlbHNlCi0KLUFMV0FZU19JTkxJTkUgdm9pZCBDVEk6OmVtaXREZWJ1Z0V4Y2VwdGlvbkNo
ZWNrKCkKLXsKLSAgICBlbWl0R2V0Q1RJUGFyYW0oQ1RJX0FSR1NfZXhlYywgWDg2OjplY3gpOwot
ICAgIG1faml0LmNtcGxfaTMybSgwLCBPQkpFQ1RfT0ZGU0VUKEV4ZWNTdGF0ZSwgbV9leGNlcHRp
b24pLCBYODY6OmVjeCk7Ci0gICAgWDg2QXNzZW1ibGVyOjpKbXBTcmMgbm9FeGNlcHRpb24gPSBt
X2ppdC5lbWl0VW5saW5rZWRKZSgpOwotICAgIG1faml0LmVtaXRJbnQzKCk7Ci0gICAgbV9qaXQu
bGluayhub0V4Y2VwdGlvbiwgbV9qaXQubGFiZWwoKSk7Ci19Ci0KIHZvaWQgQ1RJOjpwcmludE9w
Y29kZU9wZXJhbmRUeXBlcyh1bnNpZ25lZCBzcmMxLCB1bnNpZ25lZCBzcmMyKQogewogICAgIGNo
YXIgd2hpY2gxID0gJyonOwpAQCAtMjk0LDcgKzI3MSw2IEBAIEFMV0FZU19JTkxJTkUgWDg2QXNz
ZW1ibGVyOjpKbXBTcmMgQ1RJOjoKIHsKICAgICBYODZBc3NlbWJsZXI6OkptcFNyYyBjYWxsID0g
bV9qaXQuZW1pdENhbGwocik7CiAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChjYWxsLCBv
cGNvZGVJbmRleCkpOwotICAgIGVtaXREZWJ1Z0V4Y2VwdGlvbkNoZWNrKCk7CiAKICAgICByZXR1
cm4gY2FsbDsKIH0KQEAgLTMwNiw3ICsyODIsNiBAQCBBTFdBWVNfSU5MSU5FIFg4NkFzc2VtYmxl
cjo6Sm1wU3JjIENUSTo6CiAjZW5kaWYKICAgICBYODZBc3NlbWJsZXI6OkptcFNyYyBjYWxsID0g
bV9qaXQuZW1pdENhbGwoKTsKICAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKGNhbGwsIGhl
bHBlciwgb3Bjb2RlSW5kZXgpKTsKLSAgICBlbWl0RGVidWdFeGNlcHRpb25DaGVjaygpOwogI2lm
IEVOQUJMRShTQU1QTElOR19UT09MKQogICAgIG1faml0Lm1vdmxfaTMybSgwLCAmaW5DYWxsZWRD
b2RlKTsKICNlbmRpZgpAQCAtMzIxLDcgKzI5Niw2IEBAIEFMV0FZU19JTkxJTkUgWDg2QXNzZW1i
bGVyOjpKbXBTcmMgQ1RJOjoKICNlbmRpZgogICAgIFg4NkFzc2VtYmxlcjo6Sm1wU3JjIGNhbGwg
PSBtX2ppdC5lbWl0Q2FsbCgpOwogICAgIG1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQoY2FsbCwg
aGVscGVyLCBvcGNvZGVJbmRleCkpOwotICAgIGVtaXREZWJ1Z0V4Y2VwdGlvbkNoZWNrKCk7CiAj
aWYgRU5BQkxFKFNBTVBMSU5HX1RPT0wpCiAgICAgbV9qaXQubW92bF9pMzJtKDAsICZpbkNhbGxl
ZENvZGUpOwogI2VuZGlmCkBAIC0zMzYsNyArMzEwLDYgQEAgQUxXQVlTX0lOTElORSBYODZBc3Nl
bWJsZXI6OkptcFNyYyBDVEk6OgogI2VuZGlmCiAgICAgWDg2QXNzZW1ibGVyOjpKbXBTcmMgY2Fs
bCA9IG1faml0LmVtaXRDYWxsKCk7CiAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChjYWxs
LCBoZWxwZXIsIG9wY29kZUluZGV4KSk7Ci0gICAgZW1pdERlYnVnRXhjZXB0aW9uQ2hlY2soKTsK
ICNpZiBFTkFCTEUoU0FNUExJTkdfVE9PTCkKICAgICBtX2ppdC5tb3ZsX2kzMm0oMCwgJmluQ2Fs
bGVkQ29kZSk7CiAjZW5kaWYKQEAgLTM1MSw3ICszMjQsNiBAQCBBTFdBWVNfSU5MSU5FIFg4NkFz
c2VtYmxlcjo6Sm1wU3JjIENUSTo6CiAjZW5kaWYKICAgICBYODZBc3NlbWJsZXI6OkptcFNyYyBj
YWxsID0gbV9qaXQuZW1pdENhbGwoKTsKICAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKGNh
bGwsIGhlbHBlciwgb3Bjb2RlSW5kZXgpKTsKLSAgICBlbWl0RGVidWdFeGNlcHRpb25DaGVjaygp
OwogI2lmIEVOQUJMRShTQU1QTElOR19UT09MKQogICAgIG1faml0Lm1vdmxfaTMybSgwLCAmaW5D
YWxsZWRDb2RlKTsKICNlbmRpZgpAQCAtMzY2LDcgKzMzOCw2IEBAIEFMV0FZU19JTkxJTkUgWDg2
QXNzZW1ibGVyOjpKbXBTcmMgQ1RJOjoKICNlbmRpZgogICAgIFg4NkFzc2VtYmxlcjo6Sm1wU3Jj
IGNhbGwgPSBtX2ppdC5lbWl0Q2FsbCgpOwogICAgIG1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQo
Y2FsbCwgaGVscGVyLCBvcGNvZGVJbmRleCkpOwotICAgIGVtaXREZWJ1Z0V4Y2VwdGlvbkNoZWNr
KCk7CiAjaWYgRU5BQkxFKFNBTVBMSU5HX1RPT0wpCiAgICAgbV9qaXQubW92bF9pMzJtKDAsICZp
bkNhbGxlZENvZGUpOwogI2VuZGlmCkBAIC02MTQsNyArNTg1LDYgQEAgdm9pZCBDVEk6OmVtaXRT
bG93U2NyaXB0Q2hlY2sodW5zaWduZWQgbwogICAgIGVtaXRDYWxsKG9wY29kZUluZGV4LCBNYWNo
aW5lOjpjdGlfdGltZW91dF9jaGVjayk7CiAKICAgICBlbWl0R2V0Q1RJUGFyYW0oQ1RJX0FSR1Nf
ZXhlYywgWDg2OjplY3gpOwotICAgIG1faml0Lm1vdmxfbXIoT0JKRUNUX09GRlNFVChFeGVjU3Rh
dGUsIG1fZ2xvYmFsRGF0YSksIFg4Njo6ZWN4LCBYODY6OmVjeCk7CiAgICAgbV9qaXQubW92bF9t
cihPQkpFQ1RfT0ZGU0VUKEpTR2xvYmFsRGF0YSwgbWFjaGluZSksIFg4Njo6ZWN4LCBYODY6OmVj
eCk7CiAgICAgbV9qaXQubW92bF9tcihPQkpFQ1RfT0ZGU0VUKE1hY2hpbmUsIG1fdGlja3NVbnRp
bE5leHRUaW1lb3V0Q2hlY2spLCBYODY6OmVjeCwgWDg2Ojplc2kpOwogICAgIG1faml0Lmxpbmso
c2tpcFRpbWVvdXQsIG1faml0LmxhYmVsKCkpOwpAQCAtMTIwOCwxMCArMTE3OCwxMCBAQCB2b2lk
IENUSTo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgICAgICBtX2ppdC5tb3ZsX21y
KFJlZ2lzdGVyRmlsZTo6Q2FsbGVyU2NvcGVDaGFpbiAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9m
KFJlZ2lzdGVyKSksIFg4Njo6ZWRpLCBYODY6OmVkeCk7CiAgICAgICAgICAgICBlbWl0R2V0Q1RJ
UGFyYW0oQ1RJX0FSR1NfZXhlYywgWDg2OjplY3gpOwogICAgICAgICAgICAgZW1pdFB1dENUSVBh
cmFtKFg4Njo6ZWR4LCBDVElfQVJHU19zY29wZUNoYWluKTsKLSAgICAgICAgICAgIG1faml0Lm1v
dmxfcm0oWDg2OjplZHgsIE9CSkVDVF9PRkZTRVQoRXhlY1N0YXRlLCBtX3Njb3BlQ2hhaW4pLCBY
ODY6OmVjeCk7CisgICAgICAgICAgICBtX2ppdC5tb3ZsX3JtKFg4Njo6ZWR4LCBPQkpFQ1RfT0ZG
U0VUKEpTR2xvYmFsRGF0YSwgc2NvcGVDaGFpbiksIFg4Njo6ZWN4KTsKIAotICAgICAgICAgICAg
Ly8gUmVzdG9yZSBFeGVjU3RhdGU6Om1fY2FsbEZyYW1lLgotICAgICAgICAgICAgbV9qaXQubW92
bF9ybShYODY6OmVkaSwgT0JKRUNUX09GRlNFVChFeGVjU3RhdGUsIG1fY2FsbEZyYW1lKSwgWDg2
OjplY3gpOworICAgICAgICAgICAgLy8gUmVzdG9yZSB0aGUgZ2xvYmFsIGNhbGxGcmFtZSBwb2lu
dGVyLgorICAgICAgICAgICAgbV9qaXQubW92bF9ybShYODY6OmVkaSwgT0JKRUNUX09GRlNFVChK
U0dsb2JhbERhdGEsIGNhbGxGcmFtZSksIFg4Njo6ZWN4KTsKIAogICAgICAgICAgICAgLy8gR3Jh
YiB0aGUgcmV0dXJuIGFkZHJlc3MuCiAgICAgICAgICAgICBtX2ppdC5tb3ZsX21yKFJlZ2lzdGVy
RmlsZTo6UmV0dXJuUEMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpLCBYODY6
OmVkaSwgWDg2OjplY3gpOwpAQCAtMTc3OSw4ICsxNzQ5LDggQEAgdm9pZCBDVEk6OnByaXZhdGVD
b21waWxlTWFpblBhc3MoKQogICAgICAgICBjYXNlIG9wX2NhdGNoOiB7CiAgICAgICAgICAgICBl
bWl0R2V0Q1RJUGFyYW0oQ1RJX0FSR1NfciwgWDg2OjplZGkpOyAvLyBlZGkgOj0gcgogICAgICAg
ICAgICAgZW1pdEdldENUSVBhcmFtKENUSV9BUkdTX2V4ZWMsIFg4Njo6ZWN4KTsKLSAgICAgICAg
ICAgIG1faml0Lm1vdmxfbXIoT0JKRUNUX09GRlNFVChFeGVjU3RhdGUsIG1fZXhjZXB0aW9uKSwg
WDg2OjplY3gsIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIG1faml0Lm1vdmxfaTMybSgwLCBPQkpF
Q1RfT0ZGU0VUKEV4ZWNTdGF0ZSwgbV9leGNlcHRpb24pLCBYODY6OmVjeCk7CisgICAgICAgICAg
ICBtX2ppdC5tb3ZsX21yKE9CSkVDVF9PRkZTRVQoSlNHbG9iYWxEYXRhLCBleGNlcHRpb24pLCBY
ODY6OmVjeCwgWDg2OjplYXgpOworICAgICAgICAgICAgbV9qaXQubW92bF9pMzJtKDAsIE9CSkVD
VF9PRkZTRVQoSlNHbG9iYWxEYXRhLCBleGNlcHRpb24pLCBYODY6OmVjeCk7CiAgICAgICAgICAg
ICBlbWl0UHV0UmVzdWx0KGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwogICAgICAgICAg
ICAgaSArPSAyOwogICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9WTS9D
VEkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9WTS9DVEkuaAkocmV2aXNpb24gMzcw
NjIpCisrKyBKYXZhU2NyaXB0Q29yZS9WTS9DVEkuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsMTMg
KzU2LDExIEBACiAjZGVmaW5lIENUSV9BUkdTX3JlZ2lzdGVyRmlsZSAweDBFCiAjZGVmaW5lIENU
SV9BUkdTX3IgMHgwRgogI2RlZmluZSBDVElfQVJHU19zY29wZUNoYWluIDB4MTAKLSNkZWZpbmUg
Q1RJX0FSR1NfZXhjZXB0aW9uIDB4MTEKLSNkZWZpbmUgQ1RJX0FSR1NfcHJvZmlsZXJSZWZlcmVu
Y2UgMHgxMgorI2RlZmluZSBDVElfQVJHU19wcm9maWxlclJlZmVyZW5jZSAweDExCiAjZGVmaW5l
IEFSR19leGVjICgoRXhlY1N0YXRlKikoQVJHUylbQ1RJX0FSR1NfZXhlY10pCiAjZGVmaW5lIEFS
R19yZWdpc3RlckZpbGUgKChSZWdpc3RlckZpbGUqKShBUkdTKVtDVElfQVJHU19yZWdpc3RlckZp
bGVdKQogI2RlZmluZSBBUkdfciAoKFJlZ2lzdGVyKikoQVJHUylbQ1RJX0FSR1Nfcl0pCiAjZGVm
aW5lIEFSR19zY29wZUNoYWluICgoU2NvcGVDaGFpbk5vZGUqKShBUkdTKVtDVElfQVJHU19zY29w
ZUNoYWluXSkKLSNkZWZpbmUgQVJHX2V4Y2VwdGlvbiAoKEpTVmFsdWUqKikoQVJHUylbQ1RJX0FS
R1NfZXhjZXB0aW9uXSkKICNkZWZpbmUgQVJHX3Byb2ZpbGVyUmVmZXJlbmNlICgoUHJvZmlsZXIq
KikoQVJHUylbQ1RJX0FSR1NfcHJvZmlsZXJSZWZlcmVuY2VdKQogCiAjZGVmaW5lIEFSR19zZXRT
Y29wZUNoYWluKG5ld1Njb3BlQ2hhaW4pICgqKHZvbGF0aWxlIFNjb3BlQ2hhaW5Ob2RlKiopJihB
UkdTKVtDVElfQVJHU19zY29wZUNoYWluXSA9IG5ld1Njb3BlQ2hhaW4pCkBAIC0yMzUsNyArMjMz
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgfTsKIAogICAgIGV4dGVybiAiQyIgewotICAgICAg
ICBKU1ZhbHVlKiBjdGlUcmFtcG9saW5lKHZvaWQqIGNvZGUsIEV4ZWNTdGF0ZSogZXhlYywgUmVn
aXN0ZXJGaWxlKiByZWdpc3RlckZpbGUsIFJlZ2lzdGVyKiByLCBTY29wZUNoYWluTm9kZSogc2Nv
cGVDaGFpbiwgSlNWYWx1ZSoqIGV4Y2VwdGlvbiwgUHJvZmlsZXIqKik7CisgICAgICAgIEpTVmFs
dWUqIGN0aVRyYW1wb2xpbmUodm9pZCogY29kZSwgRXhlY1N0YXRlKiwgUmVnaXN0ZXJGaWxlKiwg
UmVnaXN0ZXIqLCBTY29wZUNoYWluTm9kZSosIFByb2ZpbGVyKiopOwogICAgICAgICB2b2lkIGN0
aVZNVGhyb3dUcmFtcG9saW5lKCk7CiAgICAgfTsKIApAQCAtMzE5LDkgKzMxNyw5IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIGN0aS5wcml2YXRlQ29tcGlsZVBhdGNoR2V0
QXJyYXlMZW5ndGgocmV0dXJuQWRkcmVzcyk7CiAgICAgICAgIH0KIAotICAgICAgICBpbmxpbmUg
c3RhdGljIEpTVmFsdWUqIGV4ZWN1dGUodm9pZCogY29kZSwgRXhlY1N0YXRlKiBleGVjLCBSZWdp
c3RlckZpbGUqIHJlZ2lzdGVyRmlsZSwgUmVnaXN0ZXIqIHIsIFNjb3BlQ2hhaW5Ob2RlKiBzY29w
ZUNoYWluLCBKU1ZhbHVlKiogZXhjZXB0aW9uKQorICAgICAgICBpbmxpbmUgc3RhdGljIEpTVmFs
dWUqIGV4ZWN1dGUodm9pZCogY29kZSwgRXhlY1N0YXRlKiBleGVjLCBSZWdpc3RlckZpbGUqIHJl
Z2lzdGVyRmlsZSwgUmVnaXN0ZXIqIHIsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluKQogICAg
ICAgICB7Ci0gICAgICAgICAgICBKU1ZhbHVlKiB2YWx1ZSA9IGN0aVRyYW1wb2xpbmUoY29kZSwg
ZXhlYywgcmVnaXN0ZXJGaWxlLCByLCBzY29wZUNoYWluLCBleGNlcHRpb24sIFByb2ZpbGVyOjpl
bmFibGVkUHJvZmlsZXJSZWZlcmVuY2UoKSk7CisgICAgICAgICAgICBKU1ZhbHVlKiB2YWx1ZSA9
IGN0aVRyYW1wb2xpbmUoY29kZSwgZXhlYywgcmVnaXN0ZXJGaWxlLCByLCBzY29wZUNoYWluLCBQ
cm9maWxlcjo6ZW5hYmxlZFByb2ZpbGVyUmVmZXJlbmNlKCkpOwogI2lmIEVOQUJMRShTQU1QTElO
R19UT09MKQogICAgICAgICAgICAgY3VycmVudE9wY29kZUlEID0gc3RhdGljX2Nhc3Q8T3Bjb2Rl
SUQ+KC0xKTsKICNlbmRpZgpAQCAtMzg5LDggKzM4Nyw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAg
ICAgICAgIHZvaWQgZW1pdFRhZ0FzQm9vbEltbWVkaWF0ZShYODZBc3NlbWJsZXI6OlJlZ2lzdGVy
SUQgcmVnKTsKIAotICAgICAgICB2b2lkIGVtaXREZWJ1Z0V4Y2VwdGlvbkNoZWNrKCk7Ci0KICAg
ICAgICAgWDg2QXNzZW1ibGVyOjpKbXBTcmMgZW1pdENhbGwodW5zaWduZWQgb3Bjb2RlSW5kZXgs
IFg4Njo6UmVnaXN0ZXJJRCk7CiAgICAgICAgIFg4NkFzc2VtYmxlcjo6Sm1wU3JjIGVtaXRDYWxs
KHVuc2lnbmVkIG9wY29kZUluZGV4LCBDVElIZWxwZXJfaik7CiAgICAgICAgIFg4NkFzc2VtYmxl
cjo6Sm1wU3JjIGVtaXRDYWxsKHVuc2lnbmVkIG9wY29kZUluZGV4LCBDVElIZWxwZXJfcCk7Cklu
ZGV4OiBKYXZhU2NyaXB0Q29yZS9WTS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2Ny
aXB0Q29yZS9WTS9Db2RlQmxvY2suaAkocmV2aXNpb24gMzcwNjIpCisrKyBKYXZhU2NyaXB0Q29y
ZS9WTS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDcgKzE0Nyw3IEBAIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgY2xhc3MgRXZhbENvZGVDYWNoZSB7CiAgICAgcHVibGljOgotICAg
ICAgICBQYXNzUmVmUHRyPEV2YWxOb2RlPiBnZXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBVU3Ry
aW5nJiBldmFsU291cmNlLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiwgSlNWYWx1ZSomIGV4
Y2VwdGlvblZhbHVlKQorICAgICAgICBQYXNzUmVmUHRyPEV2YWxOb2RlPiBnZXQoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBVU3RyaW5nJiBldmFsU291cmNlLCBTY29wZUNoYWluTm9kZSogc2NvcGVD
aGFpbikKICAgICAgICAgewogICAgICAgICAgICAgUmVmUHRyPEV2YWxOb2RlPiBldmFsTm9kZTsK
IApAQCAtMTY0LDcgKzE2NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgICAgICAg
ICBpZiAoZXZhbFNvdXJjZS5zaXplKCkgPCBtYXhDYWNoZWFibGVTb3VyY2VMZW5ndGggJiYgKCpz
Y29wZUNoYWluLT5iZWdpbigpKS0+aXNWYXJpYWJsZU9iamVjdCgpICYmIGNhY2hlTWFwLnNpemUo
KSA8IG1heENhY2hlRW50cmllcykKICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlTWFwLnNl
dChldmFsU291cmNlLnJlcCgpLCBldmFsTm9kZSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uVmFsdWUgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMs
IFN5bnRheEVycm9yLCBlcnJNc2csIGVyckxpbmUsIHNvdXJjZUlkLCBOVUxMKTsKKyAgICAgICAg
ICAgICAgICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKEVycm9yOjpjcmVhdGUoZXhlYywgU3ludGF4
RXJyb3IsIGVyck1zZywgZXJyTGluZSwgc291cmNlSWQsIDApKTsKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpJbmRleDogSmF2
YVNjcmlwdENvcmUvVk0vRXhjZXB0aW9uSGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNj
cmlwdENvcmUvVk0vRXhjZXB0aW9uSGVscGVycy5jcHAJKHJldmlzaW9uIDM3MDYyKQorKysgSmF2
YVNjcmlwdENvcmUvVk0vRXhjZXB0aW9uSGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMx
LDYgKzMxLDcgQEAKIAogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkV4ZWNTdGF0
ZS5oIgorI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiSlNP
YmplY3QuaCIKICNpbmNsdWRlICJKU05vdEFuT2JqZWN0LmgiCiAjaW5jbHVkZSAiTWFjaGluZS5o
IgpAQCAtMTAxLDggKzEwMiw2IEBAIEpTVmFsdWUqIGNyZWF0ZVVuZGVmaW5lZFZhcmlhYmxlRXJy
b3IoRXgKICAgICBleGNlcHRpb24tPnB1dFdpdGhBdHRyaWJ1dGVzKGV4ZWMsIElkZW50aWZpZXIo
ZXhlYywgZXhwcmVzc2lvbkVuZE9mZnNldFByb3BlcnR5TmFtZSksIGpzTnVtYmVyKGV4ZWMsIGRp
dm90UG9pbnQgKyBlbmRPZmZzZXQpLCBSZWFkT25seSB8IERvbnREZWxldGUpOwogICAgIHJldHVy
biBleGNlcHRpb247CiB9Ci0gICAgCi1ib29sIGlzU3RyV2hpdGVTcGFjZShVQ2hhciBjKTsKIAog
c3RhdGljIFVTdHJpbmcgY3JlYXRlRXJyb3JNZXNzYWdlKEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIGludCwgaW50IGV4cHJlc3Npb25TdGFydCwgaW50IGV4cHJlc3Npb25T
dG9wLCBKU1ZhbHVlKiB2YWx1ZSwgVVN0cmluZyBlcnJvcikKIHsKSW5kZXg6IEphdmFTY3JpcHRD
b3JlL1ZNL01hY2hpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL1ZNL01hY2hp
bmUuY3BwCShyZXZpc2lvbiAzNzA2MikKKysrIEphdmFTY3JpcHRDb3JlL1ZNL01hY2hpbmUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01MjcsMTMgKzUyNywxMyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQg
TWFjaGluZTo6aW5pdGlhbGl6ZUNhCiAgICAgY2FsbEZyYW1lW1JlZ2lzdGVyRmlsZTo6T3B0aW9u
YWxDYWxsZWVBcmd1bWVudHNdID0gbnVsbEpTVmFsdWU7CiB9CiAKLUFMV0FZU19JTkxJTkUgUmVn
aXN0ZXIqIHNsaWRlUmVnaXN0ZXJXaW5kb3dGb3JDYWxsKEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJs
b2NrKiBuZXdDb2RlQmxvY2ssIFJlZ2lzdGVyRmlsZSogcmVnaXN0ZXJGaWxlLCBSZWdpc3Rlciog
cmVnaXN0ZXJCYXNlLCBSZWdpc3Rlciogciwgc2l6ZV90IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJn
YywgSlNWYWx1ZSomIGV4Y2VwdGlvblZhbHVlKQorQUxXQVlTX0lOTElORSBSZWdpc3Rlciogc2xp
ZGVSZWdpc3RlcldpbmRvd0ZvckNhbGwoRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxvY2sqIG5ld0Nv
ZGVCbG9jaywgUmVnaXN0ZXJGaWxlKiByZWdpc3RlckZpbGUsIFJlZ2lzdGVyKiByZWdpc3RlckJh
c2UsIFJlZ2lzdGVyKiByLCBzaXplX3QgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmdjKQogewogICAg
IHNpemVfdCBzaXplID0gciAtIHJlZ2lzdGVyQmFzZSArIHJlZ2lzdGVyT2Zmc2V0ICsgbmV3Q29k
ZUJsb2NrLT5udW1DYWxsZWVSZWdpc3RlcnM7CiAKICAgICBpZiAoYXJnYyA9PSBuZXdDb2RlQmxv
Y2stPm51bVBhcmFtZXRlcnMpIHsgLy8gY29ycmVjdCBudW1iZXIgb2YgYXJndW1lbnRzCiAgICAg
ICAgIGlmICghcmVnaXN0ZXJGaWxlLT5ncm93KHNpemUpKSB7Ci0gICAgICAgICAgICBleGNlcHRp
b25WYWx1ZSA9IGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihleGVjKTsKKyAgICAgICAgICAgIGV4
ZWMtPnNldEV4Y2VwdGlvbihjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoZXhlYykpOwogICAgICAg
ICAgICAgcmV0dXJuIHI7CiAgICAgICAgIH0KICAgICAgICAgciArPSByZWdpc3Rlck9mZnNldDsK
QEAgLTU0Miw3ICs1NDIsNyBAQCBBTFdBWVNfSU5MSU5FIFJlZ2lzdGVyKiBzbGlkZVJlZ2lzdGVy
V2luCiAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0ICs9IG9taXR0ZWRBcmdDb3VudDsKICAgICAgICAg
c2l6ZSArPSBvbWl0dGVkQXJnQ291bnQ7CiAgICAgICAgIGlmICghcmVnaXN0ZXJGaWxlLT5ncm93
KHNpemUpKSB7Ci0gICAgICAgICAgICBleGNlcHRpb25WYWx1ZSA9IGNyZWF0ZVN0YWNrT3ZlcmZs
b3dFcnJvcihleGVjKTsKKyAgICAgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihjcmVhdGVTdGFj
a092ZXJmbG93RXJyb3IoZXhlYykpOwogICAgICAgICAgICAgcmV0dXJuIHI7CiAgICAgICAgIH0K
ICAgICAgICAgciArPSByZWdpc3Rlck9mZnNldDsKQEAgLTU1Niw3ICs1NTYsNyBAQCBBTFdBWVNf
SU5MSU5FIFJlZ2lzdGVyKiBzbGlkZVJlZ2lzdGVyV2luCiAgICAgICAgIHNpemUgKz0gbnVtUGFy
YW1ldGVyczsKIAogICAgICAgICBpZiAoIXJlZ2lzdGVyRmlsZS0+Z3JvdyhzaXplKSkgewotICAg
ICAgICAgICAgZXhjZXB0aW9uVmFsdWUgPSBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoZXhlYyk7
CisgICAgICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24oY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9y
KGV4ZWMpKTsKICAgICAgICAgICAgIHJldHVybiByOwogICAgICAgICB9CiAgICAgICAgIHIgKz0g
cmVnaXN0ZXJPZmZzZXQ7CkBAIC01ODksNyArNTg5LDcgQEAgc3RhdGljIE5FVkVSX0lOTElORSBi
b29sIGlzTm90T2JqZWN0KEV4ZQogICAgIHJldHVybiB0cnVlOwogfQogCi1ORVZFUl9JTkxJTkUg
SlNWYWx1ZSogTWFjaGluZTo6Y2FsbEV2YWwoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhp
c09iaiwgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4sIFJlZ2lzdGVyRmlsZSogcmVnaXN0ZXJG
aWxlLCBSZWdpc3RlciogciwgaW50IGFyZ3YsIGludCBhcmdjLCBKU1ZhbHVlKiYgZXhjZXB0aW9u
VmFsdWUpCitORVZFUl9JTkxJTkUgSlNWYWx1ZSogTWFjaGluZTo6Y2FsbEV2YWwoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4sIFJl
Z2lzdGVyRmlsZSogcmVnaXN0ZXJGaWxlLCBSZWdpc3RlciogciwgaW50IGFyZ3YsIGludCBhcmdj
KQogewogICAgIGlmIChhcmdjIDwgMikKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkBA
IC02MDYsMTEgKzYwNiwxMSBAQCBORVZFUl9JTkxJTkUgSlNWYWx1ZSogTWFjaGluZTo6Y2FsbEV2
YWwoCiAgICAgVVN0cmluZyBwcm9ncmFtU291cmNlID0gc3RhdGljX2Nhc3Q8SlNTdHJpbmcqPihw
cm9ncmFtKS0+dmFsdWUoKTsKIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gcltSZWdpc3Rl
ckZpbGU6OkNvZGVCbG9ja10uY29kZUJsb2NrKCk7Ci0gICAgUmVmUHRyPEV2YWxOb2RlPiBldmFs
Tm9kZSA9IGNvZGVCbG9jay0+ZXZhbENvZGVDYWNoZS5nZXQoZXhlYywgcHJvZ3JhbVNvdXJjZSwg
c2NvcGVDaGFpbiwgZXhjZXB0aW9uVmFsdWUpOworICAgIFJlZlB0cjxFdmFsTm9kZT4gZXZhbE5v
ZGUgPSBjb2RlQmxvY2stPmV2YWxDb2RlQ2FjaGUuZ2V0KGV4ZWMsIHByb2dyYW1Tb3VyY2UsIHNj
b3BlQ2hhaW4pOwogCiAgICAgSlNWYWx1ZSogcmVzdWx0ID0gMDsKICAgICBpZiAoZXZhbE5vZGUp
Ci0gICAgICAgIHJlc3VsdCA9IGV4ZWMtPmdsb2JhbERhdGEoKS5tYWNoaW5lLT5leGVjdXRlKGV2
YWxOb2RlLmdldCgpLCBleGVjLCB0aGlzT2JqLCByIC0gcmVnaXN0ZXJGaWxlLT5iYXNlKCkgKyBh
cmd2ICsgMSArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSwgc2NvcGVDaGFpbiwg
JmV4Y2VwdGlvblZhbHVlKTsKKyAgICAgICAgcmVzdWx0ID0gZXhlYy0+Z2xvYmFsRGF0YSgpLm1h
Y2hpbmUtPmV4ZWN1dGUoZXZhbE5vZGUuZ2V0KCksIGV4ZWMsIHRoaXNPYmosIHIgLSByZWdpc3Rl
ckZpbGUtPmJhc2UoKSArIGFyZ3YgKyAxICsgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJT
aXplLCBzY29wZUNoYWluKTsKIAogICAgIGlmICgqcHJvZmlsZXIpCiAgICAgICAgICgqcHJvZmls
ZXIpLT5kaWRFeGVjdXRlKGV4ZWMsIHNjb3BlQ2hhaW4tPmdsb2JhbE9iamVjdCgpLT5ldmFsRnVu
Y3Rpb24oKSk7CkBAIC04MDMsNyArODAzLDkgQEAgTkVWRVJfSU5MSU5FIGJvb2wgTWFjaGluZTo6
dW53aW5kQ2FsbEZyYQogICAgIGlmICghcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
ZXhlYy0+bV9jYWxsRnJhbWUgPSByOworICAgIGV4ZWMtPmNhbGxGcmFtZSA9IHI7CisgICAgaWYg
KCFzY29wZUNoYWluKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgY29kZUJsb2NrID0gcltS
ZWdpc3RlckZpbGU6OkNvZGVCbG9ja10uY29kZUJsb2NrKCk7CiAgICAgdlBDID0gdlBDRm9yUEMo
Y29kZUJsb2NrLCByZXR1cm5QQyk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC04NzksMTIgKzg4MSwx
MiBAQCBORVZFUl9JTkxJTkUgSW5zdHJ1Y3Rpb24qIE1hY2hpbmU6OnRocm93CiAgICAgcmV0dXJu
IGhhbmRsZXJWUEM7CiB9CiAKLUpTVmFsdWUqIE1hY2hpbmU6OmV4ZWN1dGUoUHJvZ3JhbU5vZGUq
IHByb2dyYW1Ob2RlLCBFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWlu
LCBKU09iamVjdCogdGhpc09iaiwgSlNWYWx1ZSoqIGV4Y2VwdGlvbikKK0pTVmFsdWUqIE1hY2hp
bmU6OmV4ZWN1dGUoUHJvZ3JhbU5vZGUqIHByb2dyYW1Ob2RlLCBFeGVjU3RhdGUqIGV4ZWMsIFNj
b3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluLCBKU09iamVjdCogdGhpc09iaikKIHsKICAgICBBU1NF
UlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKIAogICAgIGlmIChtX3JlZW50cnlEZXB0aCA+PSBN
YXhSZWVudHJ5RGVwdGgpIHsKLSAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVN0YWNrT3ZlcmZs
b3dFcnJvcihleGVjKTsKKyAgICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGNyZWF0ZVN0YWNrT3Zl
cmZsb3dFcnJvcihleGVjKSk7CiAgICAgICAgIHJldHVybiBqc051bGwoKTsKICAgICB9CiAKQEAg
LTg5Myw3ICs4OTUsNyBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpleGVjdXRlKFByb2dyYW1Ob2RlKiBw
CiAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3JlZ2lzdGVyRmlsZS5zaXplKCk7CiAgICAgc2l6ZV90
IG5ld1NpemUgPSBvbGRTaXplICsgY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzICsgUmVnaXN0ZXJG
aWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplICsgY29kZUJsb2NrLT5udW1DYWxsZWVSZWdpc3RlcnM7
CiAgICAgaWYgKCFtX3JlZ2lzdGVyRmlsZS5ncm93KG5ld1NpemUpKSB7Ci0gICAgICAgICpleGNl
cHRpb24gPSBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoZXhlYyk7CisgICAgICAgIGV4ZWMtPnNl
dEV4Y2VwdGlvbihjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoZXhlYykpOwogICAgICAgICByZXR1
cm4ganNOdWxsKCk7CiAgICAgfQogCkBAIC05MDMsMTIgKzkwNSwxMyBAQCBKU1ZhbHVlKiBNYWNo
aW5lOjpleGVjdXRlKFByb2dyYW1Ob2RlKiBwCiAKICAgICBSZWdpc3RlciogciA9IG1fcmVnaXN0
ZXJGaWxlLmJhc2UoKSArIG9sZFNpemUgKyBjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMgKyBSZWdp
c3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemU7CiAgICAgcltjb2RlQmxvY2stPnRoaXNSZWdp
c3Rlcl0gPSB0aGlzT2JqOwotICAgIGluaXRpYWxpemVDYWxsRnJhbWUociwgY29kZUJsb2NrLCAw
LCAwLCAwLCAwLCAwLCAwKTsKKyAgICBpbml0aWFsaXplQ2FsbEZyYW1lKHIsIGNvZGVCbG9jaywg
MCwgMCwgZXhlYy0+Y2FsbEZyYW1lLCAwLCAwLCAwKTsKIAogICAgIGlmIChjb2RlQmxvY2stPm5l
ZWRzRnVsbFNjb3BlQ2hhaW4pCiAgICAgICAgIHNjb3BlQ2hhaW4gPSBzY29wZUNoYWluLT5jb3B5
KCk7CiAKLSAgICBFeGVjU3RhdGUgbmV3RXhlYyhleGVjLCAmbV9yZWdpc3RlckZpbGUsIHNjb3Bl
Q2hhaW4sIDApOworICAgIFNjb3BlQ2hhaW5Ob2RlKiBzYXZlZFNjb3BlQ2hhaW4gPSBleGVjLT5z
Y29wZUNoYWluOworICAgIGV4ZWMtPnNjb3BlQ2hhaW4gPSBzY29wZUNoYWluOwogCiAgICAgUHJv
ZmlsZXIqKiBwcm9maWxlciA9IFByb2ZpbGVyOjplbmFibGVkUHJvZmlsZXJSZWZlcmVuY2UoKTsK
ICAgICBpZiAoKnByb2ZpbGVyKQpAQCAtOTE4LDkgKzkyMSw5IEBAIEpTVmFsdWUqIE1hY2hpbmU6
OmV4ZWN1dGUoUHJvZ3JhbU5vZGUqIHAKICNpZiBFTkFCTEUoQ1RJKQogICAgIGlmICghY29kZUJs
b2NrLT5jdGlDb2RlKQogICAgICAgICBDVEk6OmNvbXBpbGUodGhpcywgZXhlYywgY29kZUJsb2Nr
KTsKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBDVEk6OmV4ZWN1dGUoY29kZUJsb2NrLT5jdGlDb2Rl
LCAmbmV3RXhlYywgJm1fcmVnaXN0ZXJGaWxlLCByLCBzY29wZUNoYWluLCBleGNlcHRpb24pOwor
ICAgIEpTVmFsdWUqIHJlc3VsdCA9IENUSTo6ZXhlY3V0ZShjb2RlQmxvY2stPmN0aUNvZGUsIGV4
ZWMsICZtX3JlZ2lzdGVyRmlsZSwgciwgc2NvcGVDaGFpbik7CiAjZWxzZQotICAgIEpTVmFsdWUq
IHJlc3VsdCA9IHByaXZhdGVFeGVjdXRlKE5vcm1hbCwgJm5ld0V4ZWMsICZtX3JlZ2lzdGVyRmls
ZSwgciwgc2NvcGVDaGFpbiwgZXhjZXB0aW9uKTsKKyAgICBKU1ZhbHVlKiByZXN1bHQgPSBwcml2
YXRlRXhlY3V0ZShOb3JtYWwsIGV4ZWMsICZtX3JlZ2lzdGVyRmlsZSwgciwgc2NvcGVDaGFpbik7
CiAjZW5kaWYKICAgICBtX3JlZW50cnlEZXB0aC0tOwogCkBAIC05MzIsMTYgKzkzNSwxOCBAQCBK
U1ZhbHVlKiBNYWNoaW5lOjpleGVjdXRlKFByb2dyYW1Ob2RlKiBwCiAgICAgaWYgKG1fcmVlbnRy
eURlcHRoICYmIGxhc3RHbG9iYWxPYmplY3QgJiYgZ2xvYmFsT2JqZWN0ICE9IGxhc3RHbG9iYWxP
YmplY3QpCiAgICAgICAgIGxhc3RHbG9iYWxPYmplY3QtPmNvcHlHbG9iYWxzVG8obV9yZWdpc3Rl
ckZpbGUpOwogCisgICAgZXhlYy0+c2NvcGVDaGFpbiA9IHNhdmVkU2NvcGVDaGFpbjsKKwogICAg
IG1fcmVnaXN0ZXJGaWxlLnNocmluayhvbGRTaXplKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQog
Ci1KU1ZhbHVlKiBNYWNoaW5lOjpleGVjdXRlKEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9uQm9k
eU5vZGUsIEV4ZWNTdGF0ZSogZXhlYywgSlNGdW5jdGlvbiogZnVuY3Rpb24sIEpTT2JqZWN0KiB0
aGlzT2JqLCBjb25zdCBBcmdMaXN0JiBhcmdzLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiwg
SlNWYWx1ZSoqIGV4Y2VwdGlvbikKK0pTVmFsdWUqIE1hY2hpbmU6OmV4ZWN1dGUoRnVuY3Rpb25C
b2R5Tm9kZSogZnVuY3Rpb25Cb2R5Tm9kZSwgRXhlY1N0YXRlKiBleGVjLCBKU0Z1bmN0aW9uKiBm
dW5jdGlvbiwgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIFNjb3BlQ2hh
aW5Ob2RlKiBzY29wZUNoYWluKQogewogICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkp
OwogCiAgICAgaWYgKG1fcmVlbnRyeURlcHRoID49IE1heFJlZW50cnlEZXB0aCkgewotICAgICAg
ICAqZXhjZXB0aW9uID0gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGV4ZWMpOworICAgICAgICBl
eGVjLT5zZXRFeGNlcHRpb24oY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGV4ZWMpKTsKICAgICAg
ICAgcmV0dXJuIGpzTnVsbCgpOwogICAgIH0KIApAQCAtOTQ5LDcgKzk1NCw3IEBAIEpTVmFsdWUq
IE1hY2hpbmU6OmV4ZWN1dGUoRnVuY3Rpb25Cb2R5Tm8KICAgICBpbnQgYXJnYyA9IDEgKyBhcmdz
LnNpemUoKTsgLy8gaW1wbGljaXQgInRoaXMiIHBhcmFtZXRlcgogCiAgICAgaWYgKCFtX3JlZ2lz
dGVyRmlsZS5ncm93KG9sZFNpemUgKyBhcmdjKSkgewotICAgICAgICAqZXhjZXB0aW9uID0gY3Jl
YXRlU3RhY2tPdmVyZmxvd0Vycm9yKGV4ZWMpOworICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24o
Y3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGV4ZWMpKTsKICAgICAgICAgcmV0dXJuIGpzTnVsbCgp
OwogICAgIH0KIApAQCAtOTYyLDE1ICs5NjcsMTcgQEAgSlNWYWx1ZSogTWFjaGluZTo6ZXhlY3V0
ZShGdW5jdGlvbkJvZHlObwogICAgICAgICBhcmd2WysrZHN0XSA9ICppdDsKIAogICAgIENvZGVC
bG9jayogY29kZUJsb2NrID0gJmZ1bmN0aW9uQm9keU5vZGUtPmJ5dGVDb2RlKHNjb3BlQ2hhaW4p
OwotICAgIFJlZ2lzdGVyKiByID0gc2xpZGVSZWdpc3RlcldpbmRvd0ZvckNhbGwoZXhlYywgY29k
ZUJsb2NrLCAmbV9yZWdpc3RlckZpbGUsIG1fcmVnaXN0ZXJGaWxlLmJhc2UoKSwgYXJndiwgYXJn
YyArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSwgYXJnYywgKmV4Y2VwdGlvbik7
Ci0gICAgaWYgKFVOTElLRUxZKCpleGNlcHRpb24gIT0gMCkpIHsKKyAgICBSZWdpc3RlciogciA9
IHNsaWRlUmVnaXN0ZXJXaW5kb3dGb3JDYWxsKGV4ZWMsIGNvZGVCbG9jaywgJm1fcmVnaXN0ZXJG
aWxlLCBtX3JlZ2lzdGVyRmlsZS5iYXNlKCksIGFyZ3YsIGFyZ2MgKyBSZWdpc3RlckZpbGU6OkNh
bGxGcmFtZUhlYWRlclNpemUsIGFyZ2MpOworICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNl
cHRpb24oKSkpIHsKICAgICAgICAgbV9yZWdpc3RlckZpbGUuc2hyaW5rKG9sZFNpemUpOwogICAg
ICAgICByZXR1cm4ganNOdWxsKCk7CiAgICAgfQogICAgIC8vIGEgMCBjb2RlQmxvY2sgaW5kaWNh
dGVzIGEgYnVpbHQtaW4gY2FsbGVyCi0gICAgaW5pdGlhbGl6ZUNhbGxGcmFtZShyLCBjb2RlQmxv
Y2ssIDAsIDAsIDAsIDAsIGFyZ2MsIGZ1bmN0aW9uKTsKKyAgICBpbml0aWFsaXplQ2FsbEZyYW1l
KHIsIGNvZGVCbG9jaywgMCwgMCwgZXhlYy0+Y2FsbEZyYW1lLCAwLCBhcmdjLCBmdW5jdGlvbik7
CiAKLSAgICBFeGVjU3RhdGUgbmV3RXhlYyhleGVjLCAmbV9yZWdpc3RlckZpbGUsIHNjb3BlQ2hh
aW4sIHIpOworICAgIFNjb3BlQ2hhaW5Ob2RlKiBzYXZlZFNjb3BlQ2hhaW4gPSBleGVjLT5zY29w
ZUNoYWluOworICAgIGV4ZWMtPnNjb3BlQ2hhaW4gPSBzY29wZUNoYWluOworICAgIGV4ZWMtPmNh
bGxGcmFtZSA9IHI7CiAKICAgICBQcm9maWxlcioqIHByb2ZpbGVyID0gUHJvZmlsZXI6OmVuYWJs
ZWRQcm9maWxlclJlZmVyZW5jZSgpOwogICAgIGlmICgqcHJvZmlsZXIpCkBAIC05ODAsMzAgKzk4
NywzMyBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpleGVjdXRlKEZ1bmN0aW9uQm9keU5vCiAjaWYgRU5B
QkxFKENUSSkKICAgICBpZiAoIWNvZGVCbG9jay0+Y3RpQ29kZSkKICAgICAgICAgQ1RJOjpjb21w
aWxlKHRoaXMsIGV4ZWMsIGNvZGVCbG9jayk7Ci0gICAgSlNWYWx1ZSogcmVzdWx0ID0gQ1RJOjpl
eGVjdXRlKGNvZGVCbG9jay0+Y3RpQ29kZSwgJm5ld0V4ZWMsICZtX3JlZ2lzdGVyRmlsZSwgciwg
c2NvcGVDaGFpbiwgZXhjZXB0aW9uKTsKKyAgICBKU1ZhbHVlKiByZXN1bHQgPSBDVEk6OmV4ZWN1
dGUoY29kZUJsb2NrLT5jdGlDb2RlLCBleGVjLCAmbV9yZWdpc3RlckZpbGUsIHIsIHNjb3BlQ2hh
aW4pOwogI2Vsc2UKLSAgICBzZXRTY29wZUNoYWluKCZuZXdFeGVjLCBzY29wZUNoYWluLCBzY29w
ZUNoYWluKTsKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBwcml2YXRlRXhlY3V0ZShOb3JtYWwsICZu
ZXdFeGVjLCAmbV9yZWdpc3RlckZpbGUsIHIsIHNjb3BlQ2hhaW4sIGV4Y2VwdGlvbik7CisgICAg
c2V0U2NvcGVDaGFpbihleGVjLCBzY29wZUNoYWluLCBzY29wZUNoYWluKTsKKyAgICBKU1ZhbHVl
KiByZXN1bHQgPSBwcml2YXRlRXhlY3V0ZShOb3JtYWwsIGV4ZWMsICZtX3JlZ2lzdGVyRmlsZSwg
ciwgc2NvcGVDaGFpbik7CiAjZW5kaWYKICAgICBtX3JlZW50cnlEZXB0aC0tOwogCiAgICAgTUFD
SElORV9TQU1QTElOR19wcml2YXRlRXhlY3V0ZVJldHVybmVkKCk7CiAKKyAgICBleGVjLT5zY29w
ZUNoYWluID0gc2F2ZWRTY29wZUNoYWluOworICAgIGV4ZWMtPmNhbGxGcmFtZSA9IHJbUmVnaXN0
ZXJGaWxlOjpDYWxsZXJSZWdpc3RlcnNdLnIoKTsKKwogICAgIG1fcmVnaXN0ZXJGaWxlLnNocmlu
ayhvbGRTaXplKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1KU1ZhbHVlKiBNYWNoaW5lOjpl
eGVjdXRlKEV2YWxOb2RlKiBldmFsTm9kZSwgRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhp
c09iaiwgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4sIEpTVmFsdWUqKiBleGNlcHRpb24pCitK
U1ZhbHVlKiBNYWNoaW5lOjpleGVjdXRlKEV2YWxOb2RlKiBldmFsTm9kZSwgRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCogdGhpc09iaiwgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4pCiB7Ci0g
ICAgcmV0dXJuIGV4ZWN1dGUoZXZhbE5vZGUsIGV4ZWMsIHRoaXNPYmosIG1fcmVnaXN0ZXJGaWxl
LnNpemUoKSArIGV2YWxOb2RlLT5ieXRlQ29kZShzY29wZUNoYWluKS5udW1QYXJhbWV0ZXJzICsg
UmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplLCBzY29wZUNoYWluLCBleGNlcHRpb24p
OworICAgIHJldHVybiBleGVjdXRlKGV2YWxOb2RlLCBleGVjLCB0aGlzT2JqLCBtX3JlZ2lzdGVy
RmlsZS5zaXplKCkgKyBldmFsTm9kZS0+Ynl0ZUNvZGUoc2NvcGVDaGFpbikubnVtUGFyYW1ldGVy
cyArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSwgc2NvcGVDaGFpbik7CiB9CiAK
LUpTVmFsdWUqIE1hY2hpbmU6OmV4ZWN1dGUoRXZhbE5vZGUqIGV2YWxOb2RlLCBFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIFNjb3BlQ2hhaW5O
b2RlKiBzY29wZUNoYWluLCBKU1ZhbHVlKiogZXhjZXB0aW9uKQorSlNWYWx1ZSogTWFjaGluZTo6
ZXhlY3V0ZShFdmFsTm9kZSogZXZhbE5vZGUsIEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRo
aXNPYmosIGludCByZWdpc3Rlck9mZnNldCwgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4pCiB7
CiAgICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CiAKICAgICBpZiAobV9yZWVudHJ5
RGVwdGggPj0gTWF4UmVlbnRyeURlcHRoKSB7Ci0gICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVT
dGFja092ZXJmbG93RXJyb3IoZXhlYyk7CisgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihjcmVh
dGVTdGFja092ZXJmbG93RXJyb3IoZXhlYykpOwogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAg
ICAgfQogCkBAIC0xMDQ0LDcgKzEwNTQsNyBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpleGVjdXRlKEV2
YWxOb2RlKiBldmFsCiAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3JlZ2lzdGVyRmlsZS5zaXplKCk7
CiAgICAgc2l6ZV90IG5ld1NpemUgPSByZWdpc3Rlck9mZnNldCArIGNvZGVCbG9jay0+bnVtQ2Fs
bGVlUmVnaXN0ZXJzOwogICAgIGlmICghbV9yZWdpc3RlckZpbGUuZ3JvdyhuZXdTaXplKSkgewot
ICAgICAgICAqZXhjZXB0aW9uID0gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGV4ZWMpOworICAg
ICAgICBleGVjLT5zZXRFeGNlcHRpb24oY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGV4ZWMpKTsK
ICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogICAgIH0KIApAQCAtMTA1MiwxMiArMTA2MiwxMyBA
QCBKU1ZhbHVlKiBNYWNoaW5lOjpleGVjdXRlKEV2YWxOb2RlKiBldmFsCiAKICAgICAvLyBhIDAg
Y29kZUJsb2NrIGluZGljYXRlcyBhIGJ1aWx0LWluIGNhbGxlcgogICAgIHJbY29kZUJsb2NrLT50
aGlzUmVnaXN0ZXJdID0gdGhpc09iajsKLSAgICBpbml0aWFsaXplQ2FsbEZyYW1lKHIsIGNvZGVC
bG9jaywgMCwgMCwgMCwgMCwgMCwgMCk7CisgICAgaW5pdGlhbGl6ZUNhbGxGcmFtZShyLCBjb2Rl
QmxvY2ssIDAsIDAsIGV4ZWMtPmNhbGxGcmFtZSwgMCwgMCwgMCk7CiAKICAgICBpZiAoY29kZUJs
b2NrLT5uZWVkc0Z1bGxTY29wZUNoYWluKQogICAgICAgICBzY29wZUNoYWluID0gc2NvcGVDaGFp
bi0+Y29weSgpOwogCi0gICAgRXhlY1N0YXRlIG5ld0V4ZWMoZXhlYywgJm1fcmVnaXN0ZXJGaWxl
LCBzY29wZUNoYWluLCAwKTsKKyAgICBTY29wZUNoYWluTm9kZSogc2F2ZWRTY29wZUNoYWluID0g
ZXhlYy0+c2NvcGVDaGFpbjsKKyAgICBleGVjLT5zY29wZUNoYWluID0gc2NvcGVDaGFpbjsKIAog
ICAgIFByb2ZpbGVyKiogcHJvZmlsZXIgPSBQcm9maWxlcjo6ZW5hYmxlZFByb2ZpbGVyUmVmZXJl
bmNlKCk7CiAgICAgaWYgKCpwcm9maWxlcikKQEAgLTEwNjcsOSArMTA3OCw5IEBAIEpTVmFsdWUq
IE1hY2hpbmU6OmV4ZWN1dGUoRXZhbE5vZGUqIGV2YWwKICNpZiBFTkFCTEUoQ1RJKQogICAgIGlm
ICghY29kZUJsb2NrLT5jdGlDb2RlKQogICAgICAgICBDVEk6OmNvbXBpbGUodGhpcywgZXhlYywg
Y29kZUJsb2NrKTsKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBDVEk6OmV4ZWN1dGUoY29kZUJsb2Nr
LT5jdGlDb2RlLCAmbmV3RXhlYywgJm1fcmVnaXN0ZXJGaWxlLCByLCBzY29wZUNoYWluLCBleGNl
cHRpb24pOworICAgIEpTVmFsdWUqIHJlc3VsdCA9IENUSTo6ZXhlY3V0ZShjb2RlQmxvY2stPmN0
aUNvZGUsIGV4ZWMsICZtX3JlZ2lzdGVyRmlsZSwgciwgc2NvcGVDaGFpbik7CiAjZWxzZQotICAg
IEpTVmFsdWUqIHJlc3VsdCA9IHByaXZhdGVFeGVjdXRlKE5vcm1hbCwgJm5ld0V4ZWMsICZtX3Jl
Z2lzdGVyRmlsZSwgciwgc2NvcGVDaGFpbiwgZXhjZXB0aW9uKTsKKyAgICBKU1ZhbHVlKiByZXN1
bHQgPSBwcml2YXRlRXhlY3V0ZShOb3JtYWwsIGV4ZWMsICZtX3JlZ2lzdGVyRmlsZSwgciwgc2Nv
cGVDaGFpbik7CiAjZW5kaWYKICAgICBtX3JlZW50cnlEZXB0aC0tOwogCkBAIC0xMDc4LDYgKzEw
ODksOCBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpleGVjdXRlKEV2YWxOb2RlKiBldmFsCiAgICAgaWYg
KCpwcm9maWxlcikKICAgICAgICAgKCpwcm9maWxlciktPmRpZEV4ZWN1dGUoZXhlYywgZXZhbE5v
ZGUtPnNvdXJjZVVSTCgpLCBldmFsTm9kZS0+bGluZU5vKCkpOwogCisgICAgZXhlYy0+c2NvcGVD
aGFpbiA9IHNhdmVkU2NvcGVDaGFpbjsKKwogICAgIG1fcmVnaXN0ZXJGaWxlLnNocmluayhvbGRT
aXplKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtMTA4NSw3ICsxMDk4LDcgQEAgSlNWYWx1
ZSogTWFjaGluZTo6ZXhlY3V0ZShFdmFsTm9kZSogZXZhbAogQUxXQVlTX0lOTElORSB2b2lkIE1h
Y2hpbmU6OnNldFNjb3BlQ2hhaW4oRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSomIHNj
b3BlQ2hhaW4sIFNjb3BlQ2hhaW5Ob2RlKiBuZXdTY29wZUNoYWluKQogewogICAgIHNjb3BlQ2hh
aW4gPSBuZXdTY29wZUNoYWluOwotICAgIGV4ZWMtPm1fc2NvcGVDaGFpbiA9IG5ld1Njb3BlQ2hh
aW47CisgICAgZXhlYy0+c2NvcGVDaGFpbiA9IG5ld1Njb3BlQ2hhaW47CiB9CiAKIE5FVkVSX0lO
TElORSB2b2lkIE1hY2hpbmU6OmRlYnVnKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUq
IHNjb3BlQ2hhaW4sIFJlZ2lzdGVyKiByLCBEZWJ1Z0hvb2tJRCBkZWJ1Z0hvb2tJRCwgaW50IGZp
cnN0TGluZSwgaW50IGxhc3RMaW5lKQpAQCAtMTQyNyw3ICsxNDQwLDcgQEAgTkVWRVJfSU5MSU5F
IHZvaWQgTWFjaGluZTo6dW5jYWNoZUdldEJ5SQogICAgIHZQQ1s0XSA9IDA7CiB9CiAKLUpTVmFs
dWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGlvbkZsYWcgZmxhZywgRXhlY1N0YXRl
KiBleGVjLCBSZWdpc3RlckZpbGUqIHJlZ2lzdGVyRmlsZSwgUmVnaXN0ZXIqIHIsIFNjb3BlQ2hh
aW5Ob2RlKiBzY29wZUNoYWluLCBKU1ZhbHVlKiogZXhjZXB0aW9uKQorSlNWYWx1ZSogTWFjaGlu
ZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aW9uRmxhZyBmbGFnLCBFeGVjU3RhdGUqIGV4ZWMsIFJl
Z2lzdGVyRmlsZSogcmVnaXN0ZXJGaWxlLCBSZWdpc3RlciogciwgU2NvcGVDaGFpbk5vZGUqIHNj
b3BlQ2hhaW4pCiB7CiAgICAgLy8gT25lLXRpbWUgaW5pdGlhbGl6YXRpb24gb2Ygb3VyIGFkZHJl
c3MgdGFibGVzLiBXZSBoYXZlIHRvIHB1dCB0aGlzIGNvZGUKICAgICAvLyBoZXJlIGJlY2F1c2Ug
b3VyIGxhYmVscyBhcmUgb25seSBpbiBzY29wZSBpbnNpZGUgdGhpcyBmdW5jdGlvbi4KQEAgLTMy
MTAsOCArMzIyMyw4IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkK
IAogICAgICAgICBpZiAoYmFzZVZhbCA9PSBzY29wZUNoYWluLT5nbG9iYWxPYmplY3QoKSAmJiBm
dW5jVmFsID09IHNjb3BlQ2hhaW4tPmdsb2JhbE9iamVjdCgpLT5ldmFsRnVuY3Rpb24oKSkgewog
ICAgICAgICAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+
KHJbcltSZWdpc3RlckZpbGU6OkNvZGVCbG9ja10uY29kZUJsb2NrKCktPnRoaXNSZWdpc3Rlcl0u
anNWYWx1ZShleGVjKSk7Ci0gICAgICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBjYWxsRXZhbChl
eGVjLCB0aGlzT2JqZWN0LCBzY29wZUNoYWluLCByZWdpc3RlckZpbGUsIHIsIGZpcnN0QXJnLCBh
cmdDb3VudCwgZXhjZXB0aW9uVmFsdWUpOwotICAgICAgICAgICAgaWYgKGV4Y2VwdGlvblZhbHVl
KQorICAgICAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0gY2FsbEV2YWwoZXhlYywgdGhpc09iamVj
dCwgc2NvcGVDaGFpbiwgcmVnaXN0ZXJGaWxlLCByLCBmaXJzdEFyZywgYXJnQ291bnQpOworICAg
ICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgICAgIGdvdG8g
dm1fdGhyb3c7CiAKICAgICAgICAgICAgIHJbZHN0XSA9IHJlc3VsdDsKQEAgLTMyOTIsMTIgKzMz
MDUsMTIgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBSZWdpc3Rlciogc2F2ZWRSID0gcjsKIAotICAgICAgICAgICAg
ciA9IHNsaWRlUmVnaXN0ZXJXaW5kb3dGb3JDYWxsKGV4ZWMsIG5ld0NvZGVCbG9jaywgcmVnaXN0
ZXJGaWxlLCByZWdpc3RlckJhc2UsIHIsIHJlZ2lzdGVyT2Zmc2V0LCBhcmdDb3VudCwgZXhjZXB0
aW9uVmFsdWUpOwotICAgICAgICAgICAgaWYgKFVOTElLRUxZKGV4Y2VwdGlvblZhbHVlICE9IDAp
KQorICAgICAgICAgICAgciA9IHNsaWRlUmVnaXN0ZXJXaW5kb3dGb3JDYWxsKGV4ZWMsIG5ld0Nv
ZGVCbG9jaywgcmVnaXN0ZXJGaWxlLCByZWdpc3RlckJhc2UsIHIsIHJlZ2lzdGVyT2Zmc2V0LCBh
cmdDb3VudCk7CisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
KQogICAgICAgICAgICAgICAgIGdvdG8gdm1fdGhyb3c7CiAKICAgICAgICAgICAgIGluaXRpYWxp
emVDYWxsRnJhbWUociwgbmV3Q29kZUJsb2NrLCB2UEMsIHNjb3BlQ2hhaW4sIHNhdmVkUiwgZHN0
LCBhcmdDb3VudCwgdik7Ci0gICAgICAgICAgICBleGVjLT5tX2NhbGxGcmFtZSA9IHI7CisgICAg
ICAgICAgICBleGVjLT5jYWxsRnJhbWUgPSByOwogICAgIAogICAgICAgICAgICAgaWYgKCplbmFi
bGVkUHJvZmlsZXJSZWZlcmVuY2UpCiAgICAgICAgICAgICAgICAgKCplbmFibGVkUHJvZmlsZXJS
ZWZlcmVuY2UpLT53aWxsRXhlY3V0ZShleGVjLCBzdGF0aWNfY2FzdDxKU09iamVjdCo+KHYpKTsK
QEAgLTMzMTcsNyArMzMzMCw3IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4
ZWN1dGkKICAgICAgICAgICAgIEFyZ0xpc3QgYXJncyhyICsgZmlyc3RBcmcgKyAxLCBhcmdDb3Vu
dCAtIDEpOwogCiAgICAgICAgICAgICBpbml0aWFsaXplQ2FsbEZyYW1lKHIgKyByZWdpc3Rlck9m
ZnNldCwgMCwgdlBDLCBzY29wZUNoYWluLCByLCBkc3QsIGFyZ0NvdW50LCB2KTsKLSAgICAgICAg
ICAgIGV4ZWMtPm1fY2FsbEZyYW1lID0gciArIHJlZ2lzdGVyT2Zmc2V0OworICAgICAgICAgICAg
ZXhlYy0+Y2FsbEZyYW1lID0gciArIHJlZ2lzdGVyT2Zmc2V0OwogCiAgICAgICAgICAgICBpZiAo
KmVuYWJsZWRQcm9maWxlclJlZmVyZW5jZSkKICAgICAgICAgICAgICAgICAoKmVuYWJsZWRQcm9m
aWxlclJlZmVyZW5jZSktPndpbGxFeGVjdXRlKGV4ZWMsIHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4o
dikpOwpAQCAtMzMyNSw3ICszMzM4LDcgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1
dGUoRXhlY3V0aQogICAgICAgICAgICAgTUFDSElORV9TQU1QTElOR19jYWxsaW5nSG9zdEZ1bmN0
aW9uKCk7CiAKICAgICAgICAgICAgIEpTVmFsdWUqIHJldHVyblZhbHVlID0gY2FsbERhdGEubmF0
aXZlLmZ1bmN0aW9uKGV4ZWMsIHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4odiksIHRoaXNWYWx1ZSwg
YXJncyk7Ci0gICAgICAgICAgICBleGVjLT5tX2NhbGxGcmFtZSA9IHI7CisgICAgICAgICAgICBl
eGVjLT5jYWxsRnJhbWUgPSByOwogICAgICAgICAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OKCk7CiAK
ICAgICAgICAgICAgIHJbZHN0XSA9IHJldHVyblZhbHVlOwpAQCAtMzM3Miw3ICszMzg1LDcgQEAg
SlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICBzZXRTY29w
ZUNoYWluKGV4ZWMsIHNjb3BlQ2hhaW4sIHJbUmVnaXN0ZXJGaWxlOjpDYWxsZXJTY29wZUNoYWlu
XS5zY29wZUNoYWluKCkpOwogICAgICAgICBpbnQgZHN0ID0gcltSZWdpc3RlckZpbGU6OlJldHVy
blZhbHVlUmVnaXN0ZXJdLmkoKTsKICAgICAgICAgciA9IHJbUmVnaXN0ZXJGaWxlOjpDYWxsZXJS
ZWdpc3RlcnNdLnIoKTsKLSAgICAgICAgZXhlYy0+bV9jYWxsRnJhbWUgPSByOworICAgICAgICBl
eGVjLT5jYWxsRnJhbWUgPSByOwogICAgICAgICAKICAgICAgICAgaWYgKCFyKQogICAgICAgICAg
ICAgcmV0dXJuIHJldHVyblZhbHVlOwpAQCAtMzQ2NCwxMiArMzQ3NywxMiBAQCBKU1ZhbHVlKiBN
YWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAKICAgICAgICAgICAgIFJlZ2lzdGVyKiBz
YXZlZFIgPSByOwogCi0gICAgICAgICAgICByID0gc2xpZGVSZWdpc3RlcldpbmRvd0ZvckNhbGwo
ZXhlYywgbmV3Q29kZUJsb2NrLCByZWdpc3RlckZpbGUsIHJlZ2lzdGVyQmFzZSwgciwgcmVnaXN0
ZXJPZmZzZXQsIGFyZ0NvdW50LCBleGNlcHRpb25WYWx1ZSk7Ci0gICAgICAgICAgICBpZiAoVU5M
SUtFTFkoZXhjZXB0aW9uVmFsdWUgIT0gMCkpCisgICAgICAgICAgICByID0gc2xpZGVSZWdpc3Rl
cldpbmRvd0ZvckNhbGwoZXhlYywgbmV3Q29kZUJsb2NrLCByZWdpc3RlckZpbGUsIHJlZ2lzdGVy
QmFzZSwgciwgcmVnaXN0ZXJPZmZzZXQsIGFyZ0NvdW50KTsKKyAgICAgICAgICAgIGlmIChVTkxJ
S0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgZ290byB2bV90aHJv
dzsKIAogICAgICAgICAgICAgaW5pdGlhbGl6ZUNhbGxGcmFtZShyLCBuZXdDb2RlQmxvY2ssIHZQ
Qywgc2NvcGVDaGFpbiwgc2F2ZWRSLCBkc3QsIGFyZ0NvdW50LCB2KTsKLSAgICAgICAgICAgIGV4
ZWMtPm1fY2FsbEZyYW1lID0gcjsKKyAgICAgICAgICAgIGV4ZWMtPmNhbGxGcmFtZSA9IHI7CiAg
ICAgCiAgICAgICAgICAgICBpZiAoKmVuYWJsZWRQcm9maWxlclJlZmVyZW5jZSkKICAgICAgICAg
ICAgICAgICAoKmVuYWJsZWRQcm9maWxlclJlZmVyZW5jZSktPmRpZEV4ZWN1dGUoZXhlYywgc3Rh
dGljX2Nhc3Q8SlNPYmplY3QqPih2KSk7CkBAIC0zNDg4LDcgKzM1MDEsNyBAQCBKU1ZhbHVlKiBN
YWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAgICAgICBBcmdMaXN0IGFyZ3Mo
ciArIGZpcnN0QXJnICsgMSwgYXJnQ291bnQgLSAxKTsKIAogICAgICAgICAgICAgaW5pdGlhbGl6
ZUNhbGxGcmFtZShyICsgcmVnaXN0ZXJPZmZzZXQsIDAsIHZQQywgc2NvcGVDaGFpbiwgciwgZHN0
LCBhcmdDb3VudCwgdik7Ci0gICAgICAgICAgICBleGVjLT5tX2NhbGxGcmFtZSA9IHIgKyByZWdp
c3Rlck9mZnNldDsKKyAgICAgICAgICAgIGV4ZWMtPmNhbGxGcmFtZSA9IHIgKyByZWdpc3Rlck9m
ZnNldDsKIAogICAgICAgICAgICAgaWYgKCplbmFibGVkUHJvZmlsZXJSZWZlcmVuY2UpCiAgICAg
ICAgICAgICAgICAgKCplbmFibGVkUHJvZmlsZXJSZWZlcmVuY2UpLT53aWxsRXhlY3V0ZShleGVj
LCBzdGF0aWNfY2FzdDxKU09iamVjdCo+KHYpKTsKQEAgLTM0OTYsNyArMzUwOSw3IEBAIEpTVmFs
dWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAgICAgIE1BQ0hJTkVf
U0FNUExJTkdfY2FsbGluZ0hvc3RGdW5jdGlvbigpOwogCiAgICAgICAgICAgICBKU1ZhbHVlKiBy
ZXR1cm5WYWx1ZSA9IGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uKGV4ZWMsIHN0YXRpY19j
YXN0PEpTT2JqZWN0Kj4odiksIGFyZ3MpOwotICAgICAgICAgICAgZXhlYy0+bV9jYWxsRnJhbWUg
PSByOworICAgICAgICAgICAgZXhlYy0+Y2FsbEZyYW1lID0gcjsKIAogICAgICAgICAgICAgVk1f
Q0hFQ0tfRVhDRVBUSU9OKCk7CiAgICAgICAgICAgICByW2RzdF0gPSByZXR1cm5WYWx1ZTsKQEAg
LTM2NjYsNyArMzY3OSw3IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1
dGkKIAogICAgICAgICBoYW5kbGVyVlBDID0gdGhyb3dFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9u
VmFsdWUsIHZQQywgc2NvcGVDaGFpbiwgciwgdHJ1ZSk7CiAgICAgICAgIGlmICghaGFuZGxlclZQ
QykgewotICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IGV4Y2VwdGlvblZhbHVlOworICAgICAgICAg
ICAgZXhlYy0+c2V0RXhjZXB0aW9uKGV4Y2VwdGlvblZhbHVlKTsKICAgICAgICAgICAgIHJldHVy
biBqc051bGwoKTsKICAgICAgICAgfQogCkBAIC0zODIxLDEwICszODM0LDkgQEAgSlNWYWx1ZSog
TWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICAgICAgZXhjZXB0aW9uVmFs
dWUgPSBjcmVhdGVJbnRlcnJ1cHRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihleGVjKTsKICAgICAgICAg
fQogICAgICAgICBoYW5kbGVyVlBDID0gdGhyb3dFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uVmFs
dWUsIHZQQywgc2NvcGVDaGFpbiwgciwgZmFsc2UpOwotICAgICAgICBpZiAoIWhhbmRsZXJWUEMp
IHsKLSAgICAgICAgICAgICpleGNlcHRpb24gPSBleGNlcHRpb25WYWx1ZTsKKyAgICAgICAgZXhl
Yy0+c2V0RXhjZXB0aW9uKGV4Y2VwdGlvblZhbHVlKTsKKyAgICAgICAgaWYgKCFoYW5kbGVyVlBD
KQogICAgICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwotICAgICAgICB9CiAgICAgICAgIHZQQyA9
IGhhbmRsZXJWUEM7CiAgICAgICAgIE5FWFRfT1BDT0RFOwogICAgIH0KQEAgLTM4NjEsMTIgKzM4
NzMsMTQgQEAgSlNWYWx1ZSogTWFjaGluZTo6cmV0cmlldmVDYWxsZXIoRXhlY1N0YQogICAgIFJl
Z2lzdGVyKiByID0gdGhpcy0+Y2FsbEZyYW1lKGV4ZWMsIGZ1bmN0aW9uKTsKICAgICBpZiAoIXIp
CiAgICAgICAgIHJldHVybiBqc051bGwoKTsKKyAgICBpZiAoIXJbUmVnaXN0ZXJGaWxlOjpDYWxs
ZXJTY29wZUNoYWluXS5zY29wZUNoYWluKCkpCisgICAgICAgIHJldHVybiBqc051bGwoKTsKIAog
ICAgIFJlZ2lzdGVyKiBjYWxsZXJSID0gcltSZWdpc3RlckZpbGU6OkNhbGxlclJlZ2lzdGVyc10u
cigpOwogICAgIGlmICghY2FsbGVyUikKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogCi0gICAg
SlNWYWx1ZSogY2FsbGVyID0gY2FsbGVyUltSZWdpc3RlckZpbGU6OkNhbGxlZV0uanNWYWx1ZShl
eGVjKTsKKyAgICBKU1ZhbHVlKiBjYWxsZXIgPSBjYWxsZXJSW1JlZ2lzdGVyRmlsZTo6Q2FsbGVl
XS5nZXRKU1ZhbHVlKCk7CiAgICAgaWYgKCFjYWxsZXIpCiAgICAgICAgIHJldHVybiBqc051bGwo
KTsKIApAQCAtMzg3OSw5ICszODkzLDExIEBAIHZvaWQgTWFjaGluZTo6cmV0cmlldmVMYXN0Q2Fs
bGVyKEV4ZWNTdGEKICAgICBsaW5lTnVtYmVyID0gLTE7CiAgICAgc291cmNlVVJMID0gVVN0cmlu
ZygpOwogCi0gICAgUmVnaXN0ZXIqIHIgPSBleGVjLT5tX2NhbGxGcmFtZTsKKyAgICBSZWdpc3Rl
ciogciA9IGV4ZWMtPmNhbGxGcmFtZTsKICAgICBpZiAoIXIpCiAgICAgICAgIHJldHVybjsKKyAg
ICBpZiAoIXJbUmVnaXN0ZXJGaWxlOjpDYWxsZXJTY29wZUNoYWluXS5zY29wZUNoYWluKCkpCisg
ICAgICAgIHJldHVybjsKIAogICAgIFJlZ2lzdGVyKiBjYWxsZXJSID0gcltSZWdpc3RlckZpbGU6
OkNhbGxlclJlZ2lzdGVyc10ucigpOwogICAgIGlmICghY2FsbGVyUikKQEAgLTM5MDIsMjEgKzM5
MTgsMTEgQEAgdm9pZCBNYWNoaW5lOjpyZXRyaWV2ZUxhc3RDYWxsZXIoRXhlY1N0YQogCiBSZWdp
c3RlciogTWFjaGluZTo6Y2FsbEZyYW1lKEV4ZWNTdGF0ZSogZXhlYywgSW50ZXJuYWxGdW5jdGlv
biogZnVuY3Rpb24pIGNvbnN0CiB7Ci0gICAgUmVnaXN0ZXIqIGNhbGxGcmFtZSA9IGV4ZWMtPm1f
Y2FsbEZyYW1lOwotCi0gICAgd2hpbGUgKDEpIHsKLSAgICAgICAgd2hpbGUgKCFjYWxsRnJhbWUp
IHsKLSAgICAgICAgICAgIGV4ZWMgPSBleGVjLT5tX3ByZXY7Ci0gICAgICAgICAgICBpZiAoIWV4
ZWMpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICBjYWxsRnJhbWUgPSBl
eGVjLT5tX2NhbGxGcmFtZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChjYWxsRnJhbWVbUmVn
aXN0ZXJGaWxlOjpDYWxsZWVdLmpzVmFsdWUoZXhlYykgPT0gZnVuY3Rpb24pCisgICAgZm9yIChS
ZWdpc3RlciogY2FsbEZyYW1lID0gZXhlYy0+Y2FsbEZyYW1lOyBjYWxsRnJhbWU7IGNhbGxGcmFt
ZSA9IGNhbGxGcmFtZVtSZWdpc3RlckZpbGU6OkNhbGxlclJlZ2lzdGVyc10ucigpKSB7CisgICAg
ICAgIGlmIChjYWxsRnJhbWVbUmVnaXN0ZXJGaWxlOjpDYWxsZWVdLmdldEpTVmFsdWUoKSA9PSBm
dW5jdGlvbikKICAgICAgICAgICAgIHJldHVybiBjYWxsRnJhbWU7Ci0KLSAgICAgICAgY2FsbEZy
YW1lID0gY2FsbEZyYW1lW1JlZ2lzdGVyRmlsZTo6Q2FsbGVyUmVnaXN0ZXJzXS5yKCk7CiAgICAg
fQorICAgIHJldHVybiAwOwogfQogCiB2b2lkIE1hY2hpbmU6OmdldEFyZ3VtZW50c0RhdGEoUmVn
aXN0ZXIqIGNhbGxGcmFtZSwgSlNGdW5jdGlvbiomIGZ1bmN0aW9uLCBpbnQmIGZpcnN0UGFyYW1l
dGVySW5kZXgsIFJlZ2lzdGVyKiYgYXJndiwgaW50JiBhcmdjKQpAQCAtNDE1NywxOSArNDE2Mywx
MCBAQCBORVZFUl9JTkxJTkUgdm9pZCBNYWNoaW5lOjp0cnlDVElDYWNoZUdlCiB9CiAKIAotI2Rl
ZmluZSBKU1ZBTFVFX1ZNX0NIRUNLX0VYQ0VQVElPTl9BUkcoZXhjZXB0aW9uKSBcCi0gICAgZG8g
eyBcCi0gICAgICAgIGlmIChVTkxJS0VMWShleGNlcHRpb24gIT0gMCkpIHsgXAotICAgICAgICAg
ICAgZXhlYy0+c2V0RXhjZXB0aW9uKGV4Y2VwdGlvbik7IFwKLSAgICAgICAgICAgIGV4ZWMtPnNl
dENUSVJldHVybkFkZHJlc3MoQ1RJX1JFVFVSTl9BRERSRVNTKTsgXAotICAgICAgICAgICAgZG9T
ZXRSZXR1cm5BZGRyZXNzVk1UaHJvd1RyYW1wb2xpbmUoJkNUSV9SRVRVUk5fQUREUkVTUyk7IFwK
LSAgICAgICAgICAgIHJldHVybiAwOyBcCi0gICAgICAgIH0gXAotICAgIH0gd2hpbGUgKDApCiAj
ZGVmaW5lIFZNX0NIRUNLX0VYQ0VQVElPTl92KCkgXAogICAgIGRvIHsgXAogICAgICAgICBpZiAo
VU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKSB7IFwKLSAgICAgICAgICAgIGV4ZWMtPnNl
dENUSVJldHVybkFkZHJlc3MoQ1RJX1JFVFVSTl9BRERSRVNTKTsgXAorICAgICAgICAgICAgZXhl
Yy0+cmV0dXJuQWRkcmVzcyA9IENUSV9SRVRVUk5fQUREUkVTUzsgXAogICAgICAgICAgICAgZG9T
ZXRSZXR1cm5BZGRyZXNzVk1UaHJvd1RyYW1wb2xpbmUoJkNUSV9SRVRVUk5fQUREUkVTUyk7IFwK
ICAgICAgICAgICAgIHJldHVybjsgXAogICAgICAgICB9IFwKQEAgLTQxNzcsNyArNDE3NCw3IEBA
IE5FVkVSX0lOTElORSB2b2lkIE1hY2hpbmU6OnRyeUNUSUNhY2hlR2UKICNkZWZpbmUgVk1fQ0hF
Q0tfRVhDRVBUSU9OKHR5cGUpIFwKICAgICBkbyB7IFwKICAgICAgICAgaWYgKFVOTElLRUxZKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKSkgeyBcCi0gICAgICAgICAgICBleGVjLT5zZXRDVElSZXR1cm5B
ZGRyZXNzKENUSV9SRVRVUk5fQUREUkVTUyk7IFwKKyAgICAgICAgICAgIGV4ZWMtPnJldHVybkFk
ZHJlc3MgPSBDVElfUkVUVVJOX0FERFJFU1M7IFwKICAgICAgICAgICAgIGRvU2V0UmV0dXJuQWRk
cmVzc1ZNVGhyb3dUcmFtcG9saW5lKCZDVElfUkVUVVJOX0FERFJFU1MpOyBcCiAgICAgICAgICAg
ICByZXR1cm4gKHR5cGUpMDsgXAogICAgICAgICB9IFwKQEAgLTQxODUsOCArNDE4Miw3IEBAIE5F
VkVSX0lOTElORSB2b2lkIE1hY2hpbmU6OnRyeUNUSUNhY2hlR2UKICNkZWZpbmUgVk1fQ0hFQ0tf
RVhDRVBUSU9OX0FUX0VORCgpIFwKICAgICBkbyB7IFwKICAgICAgICAgaWYgKFVOTElLRUxZKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKSkgeyBcCi0gICAgICAgICAgICAvKnByaW50ZigiVk1fQ0hFQ0tf
RVhDRVBUSU9OX0FUX0VORCgpXG4iKTsqLyBcCi0gICAgICAgICAgICBleGVjLT5zZXRDVElSZXR1
cm5BZGRyZXNzKENUSV9SRVRVUk5fQUREUkVTUyk7IFwKKyAgICAgICAgICAgIGV4ZWMtPnJldHVy
bkFkZHJlc3MgPSBDVElfUkVUVVJOX0FERFJFU1M7IFwKICAgICAgICAgICAgIGRvU2V0UmV0dXJu
QWRkcmVzc1ZNVGhyb3dUcmFtcG9saW5lKCZDVElfUkVUVVJOX0FERFJFU1MpOyBcCiAgICAgICAg
IH0gXAogICAgIH0gd2hpbGUgKDApCkBAIC00NDY4LDkgKzQ0NjQsOCBAQCB2b2lkKiBNYWNoaW5l
OjpjdGlfb3BfY2FsbF9KU0Z1bmN0aW9uKENUCiAgICAgCiAgICAgUmVnaXN0ZXIqIHNhdmVkUiA9
IHI7CiAKLSAgICBKU1ZhbHVlKiBleGNlcHRpb25WYWx1ZSA9IDA7Ci0gICAgciA9IHNsaWRlUmVn
aXN0ZXJXaW5kb3dGb3JDYWxsKGV4ZWMsIG5ld0NvZGVCbG9jaywgcmVnaXN0ZXJGaWxlLCByZWdp
c3RlckJhc2UsIHIsIHJlZ2lzdGVyT2Zmc2V0LCBhcmdDb3VudCwgZXhjZXB0aW9uVmFsdWUpOwot
ICAgIEpTVkFMVUVfVk1fQ0hFQ0tfRVhDRVBUSU9OX0FSRyhleGNlcHRpb25WYWx1ZSk7CisgICAg
ciA9IHNsaWRlUmVnaXN0ZXJXaW5kb3dGb3JDYWxsKGV4ZWMsIG5ld0NvZGVCbG9jaywgcmVnaXN0
ZXJGaWxlLCByZWdpc3RlckJhc2UsIHIsIHJlZ2lzdGVyT2Zmc2V0LCBhcmdDb3VudCk7CisgICAg
Vk1fQ0hFQ0tfRVhDRVBUSU9OKHZvaWQqKTsKIAogICAgIHJbUmVnaXN0ZXJGaWxlOjpDb2RlQmxv
Y2tdID0gbmV3Q29kZUJsb2NrOwogICAgIHJbUmVnaXN0ZXJGaWxlOjpDYWxsZXJTY29wZUNoYWlu
XSA9IEFSR19zY29wZUNoYWluOwpAQCAtNDQ4Miw4ICs0NDc3LDggQEAgdm9pZCogTWFjaGluZTo6
Y3RpX29wX2NhbGxfSlNGdW5jdGlvbihDVAogICAgIHJbUmVnaXN0ZXJGaWxlOjpPcHRpb25hbENh
bGxlZUFjdGl2YXRpb25dID0gbnVsbEpTVmFsdWU7CiAgICAgcltSZWdpc3RlckZpbGU6Ok9wdGlv
bmFsQ2FsbGVlQXJndW1lbnRzXSA9IG51bGxKU1ZhbHVlOwogCi0gICAgZXhlYy0+bV9jYWxsRnJh
bWUgPSByOwotICAgIGV4ZWMtPm1fc2NvcGVDaGFpbiA9IGNhbGxEYXRhU2NvcGVDaGFpbjsKKyAg
ICBleGVjLT5jYWxsRnJhbWUgPSByOworICAgIGV4ZWMtPnNjb3BlQ2hhaW4gPSBjYWxsRGF0YVNj
b3BlQ2hhaW47CiAKICAgICBBUkdfc2V0U2NvcGVDaGFpbihjYWxsRGF0YVNjb3BlQ2hhaW4pOwog
ICAgIEFSR19zZXRSKHIpOwpAQCAtNDUzMiw3ICs0NTI3LDcgQEAgSlNWYWx1ZSogTWFjaGluZTo6
Y3RpX29wX2NhbGxfTm90SlNGdW5jdAogICAgICAgICBSZWdpc3RlciogciA9IEFSR19yICsgcmVn
aXN0ZXJPZmZzZXQ7CiAgICAgICAgIAogICAgICAgICBpbml0aWFsaXplQ2FsbEZyYW1lKHIsIDAs
IEFSR19pbnN0cjQsIEFSR19zY29wZUNoYWluLCBBUkdfciwgMCwgYXJnQ291bnQsIGZ1bmNWYWwp
OwotICAgICAgICBleGVjLT5tX2NhbGxGcmFtZSA9IHI7CisgICAgICAgIGV4ZWMtPmNhbGxGcmFt
ZSA9IHI7CiAKICAgICAgICAgaWYgKCpBUkdfcHJvZmlsZXJSZWZlcmVuY2UpCiAgICAgICAgICAg
ICAoKkFSR19wcm9maWxlclJlZmVyZW5jZSktPndpbGxFeGVjdXRlKGV4ZWMsIHN0YXRpY19jYXN0
PEpTT2JqZWN0Kj4oZnVuY1ZhbCkpOwpAQCAtNDU0OCw3ICs0NTQzLDcgQEAgSlNWYWx1ZSogTWFj
aGluZTo6Y3RpX29wX2NhbGxfTm90SlNGdW5jdAogICAgICAgICBpZiAoKkFSR19wcm9maWxlclJl
ZmVyZW5jZSkKICAgICAgICAgICAgICgqQVJHX3Byb2ZpbGVyUmVmZXJlbmNlKS0+ZGlkRXhlY3V0
ZShleGVjLCBzdGF0aWNfY2FzdDxKU09iamVjdCo+KGZ1bmNWYWwpKTsKIAotICAgICAgICBleGVj
LT5tX2NhbGxGcmFtZSA9IEFSR19yOworICAgICAgICBleGVjLT5jYWxsRnJhbWUgPSBBUkdfcjsK
ICAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOwogICAgIH0KIApAQCAtNDY2OSw5ICs0NjY0LDgg
QEAgdm9pZCogTWFjaGluZTo6Y3RpX29wX2NvbnN0cnVjdF9KU0NvbnN0cgogCiAgICAgUmVnaXN0
ZXIqIHNhdmVkUiA9IHI7CiAKLSAgICBKU1ZhbHVlKiBleGNlcHRpb25WYWx1ZSA9IDA7Ci0gICAg
ciA9IHNsaWRlUmVnaXN0ZXJXaW5kb3dGb3JDYWxsKGV4ZWMsIG5ld0NvZGVCbG9jaywgcmVnaXN0
ZXJGaWxlLCByZWdpc3RlckJhc2UsIHIsIHJlZ2lzdGVyT2Zmc2V0LCBhcmdDb3VudCwgZXhjZXB0
aW9uVmFsdWUpOwotICAgIEpTVkFMVUVfVk1fQ0hFQ0tfRVhDRVBUSU9OX0FSRyhleGNlcHRpb25W
YWx1ZSk7CisgICAgciA9IHNsaWRlUmVnaXN0ZXJXaW5kb3dGb3JDYWxsKGV4ZWMsIG5ld0NvZGVC
bG9jaywgcmVnaXN0ZXJGaWxlLCByZWdpc3RlckJhc2UsIHIsIHJlZ2lzdGVyT2Zmc2V0LCBhcmdD
b3VudCk7CisgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OKHZvaWQqKTsKIAogICAgIHJbUmVnaXN0ZXJG
aWxlOjpDb2RlQmxvY2tdID0gbmV3Q29kZUJsb2NrOwogICAgIHJbUmVnaXN0ZXJGaWxlOjpDYWxs
ZXJTY29wZUNoYWluXSA9IEFSR19zY29wZUNoYWluOwpAQCAtNDY4Myw4ICs0Njc3LDggQEAgdm9p
ZCogTWFjaGluZTo6Y3RpX29wX2NvbnN0cnVjdF9KU0NvbnN0cgogICAgIHJbUmVnaXN0ZXJGaWxl
OjpPcHRpb25hbENhbGxlZUFjdGl2YXRpb25dID0gbnVsbEpTVmFsdWU7CiAgICAgcltSZWdpc3Rl
ckZpbGU6Ok9wdGlvbmFsQ2FsbGVlQXJndW1lbnRzXSA9IG51bGxKU1ZhbHVlOwogCi0gICAgZXhl
Yy0+bV9jYWxsRnJhbWUgPSByOwotICAgIGV4ZWMtPm1fc2NvcGVDaGFpbiA9IGNhbGxEYXRhU2Nv
cGVDaGFpbjsKKyAgICBleGVjLT5jYWxsRnJhbWUgPSByOworICAgIGV4ZWMtPnNjb3BlQ2hhaW4g
PSBjYWxsRGF0YVNjb3BlQ2hhaW47CiAKICAgICBBUkdfc2V0U2NvcGVDaGFpbihjYWxsRGF0YVNj
b3BlQ2hhaW4pOwogICAgIEFSR19zZXRSKHIpOwpAQCAtNTI4OCw5ICs1MjgyLDggQEAgSlNWYWx1
ZSogTWFjaGluZTo6Y3RpX29wX2NhbGxfZXZhbChDVElfQQogCiAgICAgaWYgKGJhc2VWYWwgPT0g
c2NvcGVDaGFpbi0+Z2xvYmFsT2JqZWN0KCkgJiYgZnVuY1ZhbCA9PSBzY29wZUNoYWluLT5nbG9i
YWxPYmplY3QoKS0+ZXZhbEZ1bmN0aW9uKCkpIHsKICAgICAgICAgSlNPYmplY3QqIHRoaXNPYmpl
Y3QgPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+KHJbY29kZUJsb2NrLT50aGlzUmVnaXN0ZXJdLmpz
VmFsdWUoZXhlYykpOwotICAgICAgICBKU1ZhbHVlKiBleGNlcHRpb25WYWx1ZSA9IDA7Ci0gICAg
ICAgIEpTVmFsdWUqIHJlc3VsdCA9IG1hY2hpbmUtPmNhbGxFdmFsKGV4ZWMsIHRoaXNPYmplY3Qs
IHNjb3BlQ2hhaW4sIHJlZ2lzdGVyRmlsZSwgIHIsIHJlZ2lzdGVyT2Zmc2V0IC0gUmVnaXN0ZXJG
aWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplIC0gYXJnQ291bnQsIGFyZ0NvdW50LCBleGNlcHRpb25W
YWx1ZSk7Ci0gICAgICAgIEpTVkFMVUVfVk1fQ0hFQ0tfRVhDRVBUSU9OX0FSRyhleGNlcHRpb25W
YWx1ZSk7CisgICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IG1hY2hpbmUtPmNhbGxFdmFsKGV4ZWMs
IHRoaXNPYmplY3QsIHNjb3BlQ2hhaW4sIHJlZ2lzdGVyRmlsZSwgIHIsIHJlZ2lzdGVyT2Zmc2V0
IC0gUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplIC0gYXJnQ291bnQsIGFyZ0NvdW50
KTsKKyAgICAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OKEpTVmFsdWUqKTsKICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKICAgICB9CiAKQEAgLTUzMTAsOCArNTMwMyw4IEBAIHZvaWQqIE1hY2hpbmU6OmN0
aV9vcF90aHJvdyhDVElfQVJHUykKICAgICBKU1ZhbHVlKiBleGNlcHRpb25WYWx1ZSA9IEFSR19z
cmMxOwogICAgIEluc3RydWN0aW9uKiBoYW5kbGVyVlBDID0gQVJHX2V4ZWMtPm1hY2hpbmUoKS0+
dGhyb3dFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uVmFsdWUsIGNvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25zLmJlZ2luKCkgKyB2UENJbmRleCwgc2NvcGVDaGFpbiwgciwgdHJ1ZSk7CiAKKyAgICBleGVj
LT5zZXRFeGNlcHRpb24oZXhjZXB0aW9uVmFsdWUpOwogICAgIGlmIChoYW5kbGVyVlBDKSB7Ci0g
ICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihleGNlcHRpb25WYWx1ZSk7CiAgICAgICAgIEFSR19z
ZXRTY29wZUNoYWluKHNjb3BlQ2hhaW4pOwogICAgICAgICBBUkdfc2V0UihyKTsKIApAQCAtNTMy
MCw4ICs1MzEzLDYgQEAgdm9pZCogTWFjaGluZTo6Y3RpX29wX3Rocm93KENUSV9BUkdTKQogICAg
ICAgICBjdGlTZXRSZXR1cm5BZGRyZXNzKCZDVElfUkVUVVJOX0FERFJFU1MsIGNhdGNoUm91dGlu
ZSk7CiAgICAgICAgIHJldHVybiBjYXRjaFJvdXRpbmU7CiAgICAgfSBlbHNlIHsKLSAgICAgICAg
ZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKLSAgICAgICAgKkFSR19leGNlcHRpb24gPSBleGNlcHRp
b25WYWx1ZTsKICAgICAgICAgcmV0dXJuIEpTSW1tZWRpYXRlOjpudWxsSW1tZWRpYXRlKCk7CiAg
ICAgfQogfQpAQCAtNTM1MCw3ICs1MzQxLDcgQEAgdm9pZCBNYWNoaW5lOjpjdGlfb3BfcHVzaF9z
Y29wZShDVElfQVJHUwogCiAgICAgU2NvcGVDaGFpbk5vZGUqIG5ld1Njb3BlQ2hhaW4gPSBBUkdf
c2NvcGVDaGFpbi0+cHVzaChvKTsKICAgICBBUkdfc2V0U2NvcGVDaGFpbihuZXdTY29wZUNoYWlu
KTsKLSAgICBleGVjLT5tX3Njb3BlQ2hhaW4gPSBuZXdTY29wZUNoYWluOworICAgIGV4ZWMtPnNj
b3BlQ2hhaW4gPSBuZXdTY29wZUNoYWluOwogfQogCiB2b2lkIE1hY2hpbmU6OmN0aV9vcF9wb3Bf
c2NvcGUoQ1RJX0FSR1MpCkBAIC01MzU5LDcgKzUzNTAsNyBAQCB2b2lkIE1hY2hpbmU6OmN0aV9v
cF9wb3Bfc2NvcGUoQ1RJX0FSR1MpCiAKICAgICBTY29wZUNoYWluTm9kZSogbmV3U2NvcGVDaGFp
biA9IEFSR19zY29wZUNoYWluLT5wb3AoKTsKICAgICBBUkdfc2V0U2NvcGVDaGFpbihuZXdTY29w
ZUNoYWluKTsKLSAgICBleGVjLT5tX3Njb3BlQ2hhaW4gPSBuZXdTY29wZUNoYWluOworICAgIGV4
ZWMtPnNjb3BlQ2hhaW4gPSBuZXdTY29wZUNoYWluOwogfQogCiBKU1ZhbHVlKiBNYWNoaW5lOjpj
dGlfb3BfdHlwZW9mKENUSV9BUkdTKQpAQCAtNTQ2NCw3ICs1NDU1LDcgQEAgSlNWYWx1ZSogTWFj
aGluZTo6Y3RpX29wX3B1c2hfbmV3X3Njb3BlKAogCiAgICAgU2NvcGVDaGFpbk5vZGUqIG5ld1Nj
b3BlQ2hhaW4gPSBBUkdfc2NvcGVDaGFpbi0+cHVzaChzY29wZSk7CiAgICAgQVJHX3NldFNjb3Bl
Q2hhaW4obmV3U2NvcGVDaGFpbik7Ci0gICAgZXhlYy0+bV9zY29wZUNoYWluID0gbmV3U2NvcGVD
aGFpbjsKKyAgICBleGVjLT5zY29wZUNoYWluID0gbmV3U2NvcGVDaGFpbjsKIAogICAgIHJldHVy
biBzY29wZTsKIH0KQEAgLTU0NzksNyArNTQ3MCw3IEBAIHZvaWQgTWFjaGluZTo6Y3RpX29wX2pt
cF9zY29wZXMoQ1RJX0FSR1MKICAgICAgICAgdG1wID0gdG1wLT5wb3AoKTsKIAogICAgIEFSR19z
ZXRTY29wZUNoYWluKHRtcCk7Ci0gICAgZXhlYy0+bV9zY29wZUNoYWluID0gdG1wOworICAgIGV4
ZWMtPnNjb3BlQ2hhaW4gPSB0bXA7CiB9CiAKIHZvaWQgTWFjaGluZTo6Y3RpX29wX3B1dF9ieV9p
bmRleChDVElfQVJHUykKQEAgLTU2MTYsOCArNTYwNyw4IEBAIHZvaWQqIE1hY2hpbmU6OmN0aV92
bV90aHJvdyhDVElfQVJHUykKICAgICBSZWdpc3RlciogciA9IEFSR19yOwogICAgIENvZGVCbG9j
ayogY29kZUJsb2NrID0gcltSZWdpc3RlckZpbGU6OkNvZGVCbG9ja10uY29kZUJsb2NrKCk7CiAK
LSAgICBBU1NFUlQoY29kZUJsb2NrLT5jdGlSZXR1cm5BZGRyZXNzVlBDTWFwLmNvbnRhaW5zKGV4
ZWMtPmN0aVJldHVybkFkZHJlc3MoKSkpOwotICAgIHVuc2lnbmVkIHZQQ0luZGV4ID0gY29kZUJs
b2NrLT5jdGlSZXR1cm5BZGRyZXNzVlBDTWFwLmdldChleGVjLT5jdGlSZXR1cm5BZGRyZXNzKCkp
OworICAgIEFTU0VSVChjb2RlQmxvY2stPmN0aVJldHVybkFkZHJlc3NWUENNYXAuY29udGFpbnMo
ZXhlYy0+cmV0dXJuQWRkcmVzcykpOworICAgIHVuc2lnbmVkIHZQQ0luZGV4ID0gY29kZUJsb2Nr
LT5jdGlSZXR1cm5BZGRyZXNzVlBDTWFwLmdldChleGVjLT5yZXR1cm5BZGRyZXNzKTsKIAogICAg
IEFTU0VSVChleGVjLT5oYWRFeGNlcHRpb24oKSk7CiAKQEAgLTU2MjUsOCArNTYxNiw4IEBAIHZv
aWQqIE1hY2hpbmU6OmN0aV92bV90aHJvdyhDVElfQVJHUykKIAogICAgIEluc3RydWN0aW9uKiBo
YW5kbGVyVlBDID0gQVJHX2V4ZWMtPm1hY2hpbmUoKS0+dGhyb3dFeGNlcHRpb24oZXhlYywgZXhj
ZXB0aW9uVmFsdWUsIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zLmJlZ2luKCkgKyB2UENJbmRleCwg
c2NvcGVDaGFpbiwgciwgZmFsc2UpOwogCisgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGV4Y2VwdGlv
blZhbHVlKTsKICAgICBpZiAoaGFuZGxlclZQQykgewotICAgICAgICBleGVjLT5zZXRFeGNlcHRp
b24oZXhjZXB0aW9uVmFsdWUpOwogICAgICAgICBBUkdfc2V0U2NvcGVDaGFpbihzY29wZUNoYWlu
KTsKICAgICAgICAgQVJHX3NldFIocik7CiAKQEAgLTU2MzUsOCArNTYyNiw2IEBAIHZvaWQqIE1h
Y2hpbmU6OmN0aV92bV90aHJvdyhDVElfQVJHUykKICAgICAgICAgY3RpU2V0UmV0dXJuQWRkcmVz
cygmQ1RJX1JFVFVSTl9BRERSRVNTLCBjYXRjaFJvdXRpbmUpOwogICAgICAgICByZXR1cm4gY2F0
Y2hSb3V0aW5lOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7
Ci0gICAgICAgICpBUkdfZXhjZXB0aW9uID0gZXhjZXB0aW9uVmFsdWU7CiAgICAgICAgIHJldHVy
biBKU0ltbWVkaWF0ZTo6bnVsbEltbWVkaWF0ZSgpOwogICAgIH0KIH0KSW5kZXg6IEphdmFTY3Jp
cHRDb3JlL1ZNL01hY2hpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9WTS9NYWNo
aW5lLmgJKHJldmlzaW9uIDM3MDYyKQorKysgSmF2YVNjcmlwdENvcmUvVk0vTWFjaGluZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC05NSw5ICs5NSw5IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAg
IGJvb2wgaXNPcGNvZGUoT3Bjb2RlIG9wY29kZSk7CiAgICAgICAgIAotICAgICAgICBKU1ZhbHVl
KiBleGVjdXRlKFByb2dyYW1Ob2RlKiwgRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqLCBKU09i
amVjdCogdGhpc09iaiwgSlNWYWx1ZSoqIGV4Y2VwdGlvbik7Ci0gICAgICAgIEpTVmFsdWUqIGV4
ZWN1dGUoRnVuY3Rpb25Cb2R5Tm9kZSosIEV4ZWNTdGF0ZSosIEpTRnVuY3Rpb24qLCBKU09iamVj
dCogdGhpc09iaiwgY29uc3QgQXJnTGlzdCYgYXJncywgU2NvcGVDaGFpbk5vZGUqLCBKU1ZhbHVl
KiogZXhjZXB0aW9uKTsKLSAgICAgICAgSlNWYWx1ZSogZXhlY3V0ZShFdmFsTm9kZSogZXZhbE5v
ZGUsIEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIFNjb3BlQ2hhaW5Ob2RlKiBz
Y29wZUNoYWluLCBKU1ZhbHVlKiogZXhjZXB0aW9uKTsKKyAgICAgICAgSlNWYWx1ZSogZXhlY3V0
ZShQcm9ncmFtTm9kZSosIEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKiwgSlNPYmplY3QqIHRo
aXNPYmplY3QpOworICAgICAgICBKU1ZhbHVlKiBleGVjdXRlKEZ1bmN0aW9uQm9keU5vZGUqLCBF
eGVjU3RhdGUqLCBKU0Z1bmN0aW9uKiwgSlNPYmplY3QqIHRoaXNPYmplY3QsIGNvbnN0IEFyZ0xp
c3QmLCBTY29wZUNoYWluTm9kZSopOworICAgICAgICBKU1ZhbHVlKiBleGVjdXRlKEV2YWxOb2Rl
KiwgRXhlY1N0YXRlKiwgSlNPYmplY3QqIHRoaXNPYmplY3QsIFNjb3BlQ2hhaW5Ob2RlKik7CiAK
ICAgICAgICAgSlNWYWx1ZSogcmV0cmlldmVBcmd1bWVudHMoRXhlY1N0YXRlKiwgSlNGdW5jdGlv
biopIGNvbnN0OwogICAgICAgICBKU1ZhbHVlKiByZXRyaWV2ZUNhbGxlcihFeGVjU3RhdGUqLCBJ
bnRlcm5hbEZ1bmN0aW9uKikgY29uc3Q7CkBAIC0yNDMsOCArMjQzLDggQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgcHJpdmF0ZToKICAgICAgICAgZW51bSBFeGVjdXRpb25GbGFnIHsgTm9ybWFsLCBJ
bml0aWFsaXplQW5kUmV0dXJuIH07CiAKLSAgICAgICAgTkVWRVJfSU5MSU5FIEpTVmFsdWUqIGNh
bGxFdmFsKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIFNjb3BlQ2hhaW5Ob2Rl
KiBzY29wZUNoYWluLCBSZWdpc3RlckZpbGUqLCBSZWdpc3RlciogciwgaW50IGFyZ3YsIGludCBh
cmdjLCBKU1ZhbHVlKiYgZXhjZXB0aW9uVmFsdWUpOwotICAgICAgICBKU1ZhbHVlKiBleGVjdXRl
KEV2YWxOb2RlKiwgRXhlY1N0YXRlKiwgSlNPYmplY3QqIHRoaXNPYmosIGludCByZWdpc3Rlck9m
ZnNldCwgU2NvcGVDaGFpbk5vZGUqLCBKU1ZhbHVlKiogZXhjZXB0aW9uKTsKKyAgICAgICAgTkVW
RVJfSU5MSU5FIEpTVmFsdWUqIGNhbGxFdmFsKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiB0aGlzT2Jq
ZWN0LCBTY29wZUNoYWluTm9kZSosIFJlZ2lzdGVyRmlsZSosIFJlZ2lzdGVyKiwgaW50IGFyZ3Ys
IGludCBhcmdjKTsKKyAgICAgICAgSlNWYWx1ZSogZXhlY3V0ZShFdmFsTm9kZSosIEV4ZWNTdGF0
ZSosIEpTT2JqZWN0KiB0aGlzT2JqZWN0LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIFNjb3BlQ2hhaW5O
b2RlKik7CiAKICAgICAgICAgQUxXQVlTX0lOTElORSBzdGF0aWMgdm9pZCBpbml0aWFsaXplQ2Fs
bEZyYW1lKFJlZ2lzdGVyKiBjYWxsRnJhbWUsIENvZGVCbG9jayosIEluc3RydWN0aW9uKiwgU2Nv
cGVDaGFpbk5vZGUqLCBSZWdpc3RlciogciwgaW50IHJldHVyblZhbHVlUmVnaXN0ZXIsIGludCBh
cmdjLCBKU1ZhbHVlKiBmdW5jdGlvbik7CiAKQEAgLTI2MCwxMSArMjYwLDExIEBAIG5hbWVzcGFj
ZSBKU0MgewogCiAgICAgICAgIE5FVkVSX0lOTElORSBib29sIHVud2luZENhbGxGcmFtZShFeGVj
U3RhdGUqLCBKU1ZhbHVlKiwgY29uc3QgSW5zdHJ1Y3Rpb24qJiwgQ29kZUJsb2NrKiYsIFNjb3Bl
Q2hhaW5Ob2RlKiYsIFJlZ2lzdGVyKiYpOwogICAgICAgICBORVZFUl9JTkxJTkUgSW5zdHJ1Y3Rp
b24qIHRocm93RXhjZXB0aW9uKEV4ZWNTdGF0ZSosIEpTVmFsdWUqJiwgY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTY29wZUNoYWluTm9kZSomLCBSZWdpc3RlciomLCBib29sKTsKLSAgICAgICAgTkVWRVJf
SU5MSU5FIGJvb2wgcmVzb2x2ZUJhc2VBbmRGdW5jKEV4ZWNTdGF0ZSogZXhlYywgSW5zdHJ1Y3Rp
b24qIHZQQywgUmVnaXN0ZXIqIHIsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluLCBKU1ZhbHVl
KiYgZXhjZXB0aW9uVmFsdWUpOworICAgICAgICBORVZFUl9JTkxJTkUgYm9vbCByZXNvbHZlQmFz
ZUFuZEZ1bmMoRXhlY1N0YXRlKiwgSW5zdHJ1Y3Rpb24qIHZQQywgUmVnaXN0ZXIqIHIsIFNjb3Bl
Q2hhaW5Ob2RlKiBzY29wZUNoYWluLCBKU1ZhbHVlKiYgZXhjZXB0aW9uVmFsdWUpOwogCiAgICAg
ICAgIFJlZ2lzdGVyKiBjYWxsRnJhbWUoRXhlY1N0YXRlKiwgSW50ZXJuYWxGdW5jdGlvbiopIGNv
bnN0OwogCi0gICAgICAgIEpTVmFsdWUqIHByaXZhdGVFeGVjdXRlKEV4ZWN1dGlvbkZsYWcsIEV4
ZWNTdGF0ZSogPSAwLCBSZWdpc3RlckZpbGUqID0gMCwgUmVnaXN0ZXIqID0gMCwgU2NvcGVDaGFp
bk5vZGUqID0gMCwgSlNWYWx1ZSoqIGV4Y2VwdGlvbiA9IDApOworICAgICAgICBKU1ZhbHVlKiBw
cml2YXRlRXhlY3V0ZShFeGVjdXRpb25GbGFnLCBFeGVjU3RhdGUqID0gMCwgUmVnaXN0ZXJGaWxl
KiA9IDAsIFJlZ2lzdGVyKiA9IDAsIFNjb3BlQ2hhaW5Ob2RlKiA9IDApOwogCiAgICAgICAgIHZv
aWQgZHVtcENhbGxGcmFtZShTY29wZUNoYWluTm9kZSosIGNvbnN0IFJlZ2lzdGVyRmlsZSosIGNv
bnN0IFJlZ2lzdGVyKik7CiAgICAgICAgIHZvaWQgZHVtcFJlZ2lzdGVycyhjb25zdCBSZWdpc3Rl
ckZpbGUqLCBjb25zdCBSZWdpc3RlciopOwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL0RlYnVn
Z2VyQ2FsbEZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvRGVidWdn
ZXJDYWxsRnJhbWUuY3BwCShyZXZpc2lvbiAzNzA2MikKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9E
ZWJ1Z2dlckNhbGxGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4LDE5ICs2OCwzOCBAQCBK
U1ZhbHVlKiBEZWJ1Z2dlckNhbGxGcmFtZTo6ZXZhbHVhdGUoY29uCiAgICAgaWYgKCFtX2NvZGVC
bG9jaykKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBKU09iamVjdCogdGhpc09iamVjdCA9IHRo
aXMtPnRoaXNPYmplY3QoKTsKKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSBzdGF0aWNfY2FzdDxFeGVj
U3RhdGUqPihtX3Njb3BlQ2hhaW4tPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkpOwogCi0g
ICAgRXhlY1N0YXRlIG5ld0V4ZWMobV9zY29wZUNoYWluLT5nbG9iYWxPYmplY3QoKSwgdGhpc09i
amVjdCwgbV9zY29wZUNoYWluKTsKKyAgICBKU0dsb2JhbE9iamVjdCogc2F2ZWRHbG9iYWxPYmpl
Y3QgPSBleGVjLT5nbG9iYWxPYmplY3Q7CisgICAgU2NvcGVDaGFpbk5vZGUqIHNhdmVkU2NvcGVD
aGFpbiA9IGV4ZWMtPnNjb3BlQ2hhaW47CisgICAgUmVnaXN0ZXIqIHNhdmVkQ2FsbEZyYW1lID0g
ZXhlYy0+Y2FsbEZyYW1lOworICAgIEpTVmFsdWUqIHNhdmVkRXhjZXB0aW9uID0gZXhlYy0+ZXhj
ZXB0aW9uKCk7CisKKyAgICBleGVjLT5nbG9iYWxPYmplY3QgPSBtX3Njb3BlQ2hhaW4tPmdsb2Jh
bE9iamVjdCgpOworICAgIGV4ZWMtPnNjb3BlQ2hhaW4gPSBtX3Njb3BlQ2hhaW47CisgICAgZXhl
Yy0+Y2FsbEZyYW1lID0gMDsKKyAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwogCiAgICAgaW50
IHNvdXJjZUlkOwogICAgIGludCBlcnJMaW5lOwogICAgIFVTdHJpbmcgZXJyTXNnOwogICAgIFJl
ZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIgPSBVU3RyaW5nU291cmNlUHJvdmlk
ZXI6OmNyZWF0ZShzY3JpcHQpOwotICAgIFJlZlB0cjxFdmFsTm9kZT4gZXZhbE5vZGUgPSBuZXdF
eGVjLnBhcnNlcigpLT5wYXJzZTxFdmFsTm9kZT4oJm5ld0V4ZWMsIFVTdHJpbmcoKSwgMSwgc291
cmNlUHJvdmlkZXIsICZzb3VyY2VJZCwgJmVyckxpbmUsICZlcnJNc2cpOwotICAgIGlmICghZXZh
bE5vZGUpCi0gICAgICAgIHJldHVybiBFcnJvcjo6Y3JlYXRlKCZuZXdFeGVjLCBTeW50YXhFcnJv
ciwgZXJyTXNnLCBlcnJMaW5lLCBzb3VyY2VJZCwgMCk7CisgICAgUmVmUHRyPEV2YWxOb2RlPiBl
dmFsTm9kZSA9IGV4ZWMtPnBhcnNlcigpLT5wYXJzZTxFdmFsTm9kZT4oZXhlYywgVVN0cmluZygp
LCAxLCBzb3VyY2VQcm92aWRlciwgJnNvdXJjZUlkLCAmZXJyTGluZSwgJmVyck1zZyk7CisgICAg
SlNWYWx1ZSogcmVzdWx0OworICAgIGlmICghZXZhbE5vZGUpIHsKKyAgICAgICAgcmVzdWx0ID0g
RXJyb3I6OmNyZWF0ZShleGVjLCBTeW50YXhFcnJvciwgZXJyTXNnLCBlcnJMaW5lLCBzb3VyY2VJ
ZCwgMCk7CisgICAgICAgIGV4Y2VwdGlvbiA9IHJlc3VsdDsKKyAgICB9IGVsc2UgeworICAgICAg
ICByZXN1bHQgPSBleGVjLT5tYWNoaW5lKCktPmV4ZWN1dGUoZXZhbE5vZGUuZ2V0KCksIGV4ZWMs
IHRoaXNPYmplY3QoKSwgbV9zY29wZUNoYWluKTsKKyAgICAgICAgZXhjZXB0aW9uID0gZXhlYy0+
ZXhjZXB0aW9uKCk7CisgICAgfQorCisgICAgZXhlYy0+Z2xvYmFsT2JqZWN0ID0gc2F2ZWRHbG9i
YWxPYmplY3Q7CisgICAgZXhlYy0+c2NvcGVDaGFpbiA9IHNhdmVkU2NvcGVDaGFpbjsKKyAgICBl
eGVjLT5jYWxsRnJhbWUgPSBzYXZlZENhbGxGcmFtZTsKKyAgICBleGVjLT5zZXRFeGNlcHRpb24o
c2F2ZWRFeGNlcHRpb24pOwogCi0gICAgcmV0dXJuIG5ld0V4ZWMubWFjaGluZSgpLT5leGVjdXRl
KGV2YWxOb2RlLmdldCgpLCAmbmV3RXhlYywgdGhpc09iamVjdCwgbV9zY29wZUNoYWluLCAmZXhj
ZXB0aW9uKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9FeGVjU3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL2tqcy9FeGVjU3RhdGUuY3BwCShyZXZpc2lvbiAzNzA2MikKKysrIEphdmFTY3Jp
cHRDb3JlL2tqcy9FeGVjU3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYxICswLDAgQEAK
LS8qCi0gKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2Rl
Lm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkK
LSAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0g
KgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IkV4ZWNTdGF0ZS5oIgotI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCi0jaW5jbHVkZSAiSlNT
dHJpbmcuaCIKLSNpbmNsdWRlICJTY29wZUNoYWluTWFyay5oIgotCi1uYW1lc3BhY2UgSlNDIHsK
LQotRXhlY1N0YXRlOjpFeGVjU3RhdGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNP
YmplY3QqIGdsb2JhbFRoaXNWYWx1ZSwgU2NvcGVDaGFpbk5vZGUqIGdsb2JhbFNjb3BlQ2hhaW4p
Ci0gICAgOiBtX2dsb2JhbE9iamVjdChnbG9iYWxPYmplY3QpCi0gICAgLCBtX2dsb2JhbFRoaXNW
YWx1ZShnbG9iYWxUaGlzVmFsdWUpCi0gICAgLCBtX2V4Y2VwdGlvbigwKQotICAgICwgbV9nbG9i
YWxEYXRhKGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpKQotICAgICwgbV9wcmV2KDApCi0gICAg
LCBtX3JlZ2lzdGVyRmlsZSgwKQotICAgICwgbV9zY29wZUNoYWluKGdsb2JhbFNjb3BlQ2hhaW4p
Ci0gICAgLCBtX2NhbGxGcmFtZSgwKQotewotfQotCi1FeGVjU3RhdGU6OkV4ZWNTdGF0ZShFeGVj
U3RhdGUqIGV4ZWMsIFJlZ2lzdGVyRmlsZSogcmVnaXN0ZXJGaWxlLCBTY29wZUNoYWluTm9kZSog
c2NvcGVDaGFpbiwgUmVnaXN0ZXIqIGNhbGxGcmFtZSkKLSAgICA6IG1fZ2xvYmFsT2JqZWN0KGV4
ZWMtPm1fZ2xvYmFsT2JqZWN0KQotICAgICwgbV9nbG9iYWxUaGlzVmFsdWUoZXhlYy0+bV9nbG9i
YWxUaGlzVmFsdWUpCi0gICAgLCBtX2V4Y2VwdGlvbigwKQotICAgICwgbV9nbG9iYWxEYXRhKGV4
ZWMtPm1fZ2xvYmFsRGF0YSkKLSAgICAsIG1fcHJldihleGVjKQotICAgICwgbV9yZWdpc3RlckZp
bGUocmVnaXN0ZXJGaWxlKQotICAgICwgbV9zY29wZUNoYWluKHNjb3BlQ2hhaW4pCi0gICAgLCBt
X2NhbGxGcmFtZShjYWxsRnJhbWUpCi17Ci0gICAgQVNTRVJUKCFleGVjLT5tX2V4Y2VwdGlvbik7
Ci19Ci0KLWJvb2wgRXhlY1N0YXRlOjppc0dsb2JhbE9iamVjdChKU09iamVjdCogbykgY29uc3QK
LXsKLSAgICByZXR1cm4gby0+aXNHbG9iYWxPYmplY3QoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvRXhlY1N0YXRlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SmF2YVNjcmlwdENvcmUva2pzL0V4ZWNTdGF0ZS5oCShyZXZpc2lvbiAzNzA2MikKKysrIEphdmFT
Y3JpcHRDb3JlL2tqcy9FeGVjU3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsOTkgKzI4LDY2
IEBACiAKIG5hbWVzcGFjZSBKU0MgIHsKIAotICAgIGNsYXNzIEV2YWxOb2RlOwotICAgIGNsYXNz
IEZ1bmN0aW9uQm9keU5vZGU7Ci0gICAgY2xhc3MgSlNWYWx1ZTsKLSAgICBjbGFzcyBHbG9iYWxG
dW5jSW1wOwotICAgIGNsYXNzIEludGVycHJldGVyOwotICAgIGNsYXNzIEpTR2xvYmFsT2JqZWN0
OwotICAgIGNsYXNzIEpTVmFyaWFibGVPYmplY3Q7Ci0gICAgY2xhc3MgTWFjaGluZTsKLSAgICBj
bGFzcyBQcm9ncmFtTm9kZTsKLSAgICBjbGFzcyBSZWdpc3RlcjsKLSAgICBjbGFzcyBSZWdpc3Rl
ckZpbGU7Ci0gICAgY2xhc3MgU2NvcGVOb2RlOwotCi0gICAgc3RydWN0IEluc3RydWN0aW9uOwot
ICAgIAotICAgIC8vIFJlcHJlc2VudHMgdGhlIGN1cnJlbnQgc3RhdGUgb2Ygc2NyaXB0IGV4ZWN1
dGlvbi4KLSAgICAvLyBQYXNzZWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIG1vc3QgZnVuY3Rp
b25zLgotICAgIGNsYXNzIEV4ZWNTdGF0ZSA6IE5vbmNvcHlhYmxlIHsKLSNpZiBFTkFCTEUoQ1RJ
KQotICAgICAgICBmcmllbmQgY2xhc3MgQ1RJOwotI2VuZGlmCi0gICAgICAgIGZyaWVuZCBjbGFz
cyBNYWNoaW5lOwotICAgICAgICBmcmllbmQgY2xhc3MgRGVidWdnZXJDYWxsRnJhbWU7CisgICAg
Ly8gTGVnYWN5IGZpZyBsZWFmIGZvciBKU0dsb2JhbERhdGEuCisgICAgLy8gUGFzc2VkIGFzIGZp
cnN0IGFyZ3VtZW50IHRvIG1vc3QgZnVuY3Rpb25zLgorICAgIGNsYXNzIEV4ZWNTdGF0ZSA6IHB1
YmxpYyBKU0dsb2JhbERhdGEgewogICAgIHB1YmxpYzoKLSAgICAgICAgRXhlY1N0YXRlKEpTR2xv
YmFsT2JqZWN0KiwgSlNPYmplY3QqIGdsb2JhbFRoaXNWYWx1ZSwgU2NvcGVDaGFpbk5vZGUqIGds
b2JhbFNjb3BlQ2hhaW4pOwotCiAgICAgICAgIC8vIEdsb2JhbCBvYmplY3QgaW4gd2hpY2ggZXhl
Y3V0aW9uIGJlZ2FuLgotICAgICAgICBKU0dsb2JhbE9iamVjdCogZHluYW1pY0dsb2JhbE9iamVj
dCgpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFsT2JqZWN0OyB9CisgICAgICAgIEpTR2xvYmFsT2Jq
ZWN0KiBkeW5hbWljR2xvYmFsT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gZ2xvYmFsT2JqZWN0OyB9
CiAgICAgICAgIAogICAgICAgICAvLyBHbG9iYWwgb2JqZWN0IGluIHdoaWNoIHRoZSBjdXJyZW50
IHNjcmlwdCB3YXMgZGVmaW5lZC4gKENhbiBkaWZmZXIKICAgICAgICAgLy8gZnJvbSBkeW5hbWlj
R2xvYmFsT2JqZWN0KCkgZHVyaW5nIGZ1bmN0aW9uIGNhbGxzIGFjcm9zcyBmcmFtZXMuKQotICAg
ICAgICBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCgpIGNvbnN0Ci0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBtX3Njb3BlQ2hhaW4tPmdsb2JhbE9iamVjdCgpOwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICBKU09iamVjdCogZ2xvYmFsVGhpc1ZhbHVlKCkgY29u
c3QgeyByZXR1cm4gbV9zY29wZUNoYWluLT5nbG9iYWxUaGlzT2JqZWN0KCk7IH0KLSAgICAgICAg
ICAgICAgICAKLSAgICAgICAgLy8gRXhjZXB0aW9uIHByb3BvZ2F0aW9uLgotICAgICAgICB2b2lk
IHNldEV4Y2VwdGlvbihKU1ZhbHVlKiBleGNlcHRpb24pIHsgbV9leGNlcHRpb24gPSBleGNlcHRp
b247IH0KLSAgICAgICAgdm9pZCBjbGVhckV4Y2VwdGlvbigpIHsgbV9leGNlcHRpb24gPSAwOyB9
Ci0gICAgICAgIEpTVmFsdWUqIGV4Y2VwdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZXhjZXB0aW9u
OyB9Ci0gICAgICAgIEpTVmFsdWUqKiBleGNlcHRpb25TbG90KCkgeyByZXR1cm4gJm1fZXhjZXB0
aW9uOyB9Ci0gICAgICAgIGJvb2wgaGFkRXhjZXB0aW9uKCkgY29uc3QgeyByZXR1cm4gISFtX2V4
Y2VwdGlvbjsgfQotI2lmIEVOQUJMRShDVEkpCi0gICAgICAgIHZvaWQgc2V0Q1RJUmV0dXJuQWRk
cmVzcyh2b2lkKiBjdGlSQSkgeyBtX2N0aVJldHVybkFkZHJlc3MgPSBjdGlSQTsgfQotICAgICAg
ICB2b2lkKiBjdGlSZXR1cm5BZGRyZXNzKCkgY29uc3QgeyByZXR1cm4gbV9jdGlSZXR1cm5BZGRy
ZXNzOyB9Ci0jZW5kaWYKLQotICAgICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEoKSB7IHJl
dHVybiAqbV9nbG9iYWxEYXRhOyB9Ci0KLSAgICAgICAgSWRlbnRpZmllclRhYmxlKiBpZGVudGlm
aWVyVGFibGUoKSB7IHJldHVybiBtX2dsb2JhbERhdGEtPmlkZW50aWZpZXJUYWJsZTsgfQotICAg
ICAgICBjb25zdCBDb21tb25JZGVudGlmaWVycyYgcHJvcGVydHlOYW1lcygpIGNvbnN0IHsgcmV0
dXJuICptX2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXM7IH0KLSAgICAgICAgY29uc3QgQXJnTGlz
dCYgZW1wdHlMaXN0KCkgY29uc3QgeyByZXR1cm4gKm1fZ2xvYmFsRGF0YS0+ZW1wdHlMaXN0OyB9
Ci0gICAgICAgIExleGVyKiBsZXhlcigpIHsgcmV0dXJuIG1fZ2xvYmFsRGF0YS0+bGV4ZXI7IH0K
LSAgICAgICAgUGFyc2VyKiBwYXJzZXIoKSB7IHJldHVybiBtX2dsb2JhbERhdGEtPnBhcnNlcjsg
fQotICAgICAgICBNYWNoaW5lKiBtYWNoaW5lKCkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxEYXRh
LT5tYWNoaW5lOyB9Ci0gICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIGFycmF5VGFibGUo
RXhlY1N0YXRlKiBleGVjKSB7IHJldHVybiBleGVjLT5tX2dsb2JhbERhdGEtPmFycmF5VGFibGU7
IH0KLSAgICAgICAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZSogZGF0ZVRhYmxlKEV4ZWNTdGF0ZSog
ZXhlYykgeyByZXR1cm4gZXhlYy0+bV9nbG9iYWxEYXRhLT5kYXRlVGFibGU7IH0KLSAgICAgICAg
c3RhdGljIGNvbnN0IEhhc2hUYWJsZSogbWF0aFRhYmxlKEV4ZWNTdGF0ZSogZXhlYykgeyByZXR1
cm4gZXhlYy0+bV9nbG9iYWxEYXRhLT5tYXRoVGFibGU7IH0KLSAgICAgICAgc3RhdGljIGNvbnN0
IEhhc2hUYWJsZSogbnVtYmVyVGFibGUoRXhlY1N0YXRlKiBleGVjKSB7IHJldHVybiBleGVjLT5t
X2dsb2JhbERhdGEtPm51bWJlclRhYmxlOyB9Ci0gICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFi
bGUqIHJlZ0V4cFRhYmxlKEV4ZWNTdGF0ZSogZXhlYykgeyByZXR1cm4gZXhlYy0+bV9nbG9iYWxE
YXRhLT5yZWdFeHBUYWJsZTsgfQotICAgICAgICBzdGF0aWMgY29uc3QgSGFzaFRhYmxlKiByZWdF
eHBDb25zdHJ1Y3RvclRhYmxlKEV4ZWNTdGF0ZSogZXhlYykgeyByZXR1cm4gZXhlYy0+bV9nbG9i
YWxEYXRhLT5yZWdFeHBDb25zdHJ1Y3RvclRhYmxlOyB9Ci0gICAgICAgIHN0YXRpYyBjb25zdCBI
YXNoVGFibGUqIHN0cmluZ1RhYmxlKEV4ZWNTdGF0ZSogZXhlYykgeyByZXR1cm4gZXhlYy0+bV9n
bG9iYWxEYXRhLT5zdHJpbmdUYWJsZTsgfQotCi0gICAgICAgIEhlYXAqIGhlYXAoKSBjb25zdCB7
IHJldHVybiBtX2dsb2JhbERhdGEtPmhlYXA7IH0KKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QoKSBjb25zdCB7IHJldHVybiBzY29wZUNoYWluLT5nbG9iYWxPYmpl
Y3QoKTsgfQogCi0gICAgcHJpdmF0ZToKLSAgICAgICAgLy8gRGVmYXVsdCBjb25zdHJ1Y3RvciBy
ZXF1aXJlZCBmb3IgZ2NjIDMuCi0gICAgICAgIEV4ZWNTdGF0ZSgpIHsgfQorICAgICAgICBKU09i
amVjdCogZ2xvYmFsVGhpc1ZhbHVlKCkgY29uc3QgeyByZXR1cm4gc2NvcGVDaGFpbi0+Z2xvYmFs
VGhpc09iamVjdCgpOyB9CiAKLSAgICAgICAgRXhlY1N0YXRlKEV4ZWNTdGF0ZSosIFJlZ2lzdGVy
RmlsZSosIFNjb3BlQ2hhaW5Ob2RlKiwgUmVnaXN0ZXIqIGNhbGxGcmFtZSk7CisgICAgICAgIC8v
IEV4Y2VwdGlvbiBwcm9wb2dhdGlvbi4KKyAgICAgICAgSlNWYWx1ZSogZXhjZXB0aW9uKCkgY29u
c3QgeyByZXR1cm4gSlNHbG9iYWxEYXRhOjpleGNlcHRpb247IH0KKyAgICAgICAgSlNWYWx1ZSoq
IGV4Y2VwdGlvblNsb3QoKSB7IHJldHVybiAmKEpTR2xvYmFsRGF0YTo6ZXhjZXB0aW9uKTsgfQor
ICAgICAgICB2b2lkIHNldEV4Y2VwdGlvbihKU1ZhbHVlKiBleGNlcHRpb24pIHsgKmV4Y2VwdGlv
blNsb3QoKSA9IGV4Y2VwdGlvbjsgfQorICAgICAgICB2b2lkIGNsZWFyRXhjZXB0aW9uKCkgeyAq
ZXhjZXB0aW9uU2xvdCgpID0gMDsgfQorICAgICAgICBib29sIGhhZEV4Y2VwdGlvbigpIGNvbnN0
IHsgcmV0dXJuICEhZXhjZXB0aW9uKCk7IH0KKworICAgICAgICBKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEoKSBjb25zdCB7IHJldHVybiAqY29uc3RfY2FzdDxFeGVjU3RhdGUqPih0aGlzKTsgfQor
CisgICAgICAgIElkZW50aWZpZXJUYWJsZSogaWRlbnRpZmllclRhYmxlKCkgY29uc3Q7CisgICAg
ICAgIGNvbnN0IENvbW1vbklkZW50aWZpZXJzJiBwcm9wZXJ0eU5hbWVzKCkgY29uc3Q7CisgICAg
ICAgIGNvbnN0IEFyZ0xpc3QmIGVtcHR5TGlzdCgpIGNvbnN0OworICAgICAgICBMZXhlciogbGV4
ZXIoKSBjb25zdDsKKyAgICAgICAgUGFyc2VyKiBwYXJzZXIoKSBjb25zdDsKKyAgICAgICAgTWFj
aGluZSogbWFjaGluZSgpIGNvbnN0OworCisgICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUq
IGFycmF5VGFibGUoRXhlY1N0YXRlKik7CisgICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUq
IGRhdGVUYWJsZShFeGVjU3RhdGUqKTsKKyAgICAgICAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZSog
bWF0aFRhYmxlKEV4ZWNTdGF0ZSopOworICAgICAgICBzdGF0aWMgY29uc3QgSGFzaFRhYmxlKiBu
dW1iZXJUYWJsZShFeGVjU3RhdGUqKTsKKyAgICAgICAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZSog
cmVnRXhwVGFibGUoRXhlY1N0YXRlKik7CisgICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUq
IHJlZ0V4cENvbnN0cnVjdG9yVGFibGUoRXhlY1N0YXRlKik7CisgICAgICAgIHN0YXRpYyBjb25z
dCBIYXNoVGFibGUqIHN0cmluZ1RhYmxlKEV4ZWNTdGF0ZSopOwogCi0gICAgICAgIGJvb2wgaXNH
bG9iYWxPYmplY3QoSlNPYmplY3QqKSBjb25zdDsKKyAgICAgICAgSGVhcCogaGVhcCgpIGNvbnN0
IHsgcmV0dXJuIGdsb2JhbERhdGEoKS5oZWFwOyB9CiAKLSAgICAgICAgSlNHbG9iYWxPYmplY3Qq
IG1fZ2xvYmFsT2JqZWN0OwotICAgICAgICBKU09iamVjdCogbV9nbG9iYWxUaGlzVmFsdWU7Ci0K
LSAgICAgICAgSlNWYWx1ZSogbV9leGNlcHRpb247Ci0jaWYgRU5BQkxFKENUSSkKLSAgICAgICAg
dm9pZCogbV9jdGlSZXR1cm5BZGRyZXNzOwotI2VuZGlmCi0gICAgICAgIEpTR2xvYmFsRGF0YSog
bV9nbG9iYWxEYXRhOwotCi0gICAgICAgIC8vIFRoZXNlIHZhbHVlcyBhcmUgY29udHJvbGxlZCBi
eSB0aGUgbWFjaGluZS4KLSAgICAgICAgRXhlY1N0YXRlKiBtX3ByZXY7Ci0gICAgICAgIFJlZ2lz
dGVyRmlsZSogbV9yZWdpc3RlckZpbGU7Ci0gICAgICAgIFNjb3BlQ2hhaW5Ob2RlKiBtX3Njb3Bl
Q2hhaW47Ci0gICAgICAgIFJlZ2lzdGVyKiBtX2NhbGxGcmFtZTsgLy8gVGhlIG1vc3QgcmVjZW50
IGNhbGwgZnJhbWUuCisgICAgcHJpdmF0ZToKKyAgICAgICAgRXhlY1N0YXRlKCk7CiAgICAgfTsK
IAogICAgIGVudW0gQ29kZVR5cGUgeyBHbG9iYWxDb2RlLCBFdmFsQ29kZSwgRnVuY3Rpb25Db2Rl
IH07CiAKKyAgICBpbmxpbmUgSWRlbnRpZmllclRhYmxlKiBFeGVjU3RhdGU6OmlkZW50aWZpZXJU
YWJsZSgpIGNvbnN0IHsgcmV0dXJuIGdsb2JhbERhdGEoKS5pZGVudGlmaWVyVGFibGU7IH0KKyAg
ICBpbmxpbmUgY29uc3QgQ29tbW9uSWRlbnRpZmllcnMmIEV4ZWNTdGF0ZTo6cHJvcGVydHlOYW1l
cygpIGNvbnN0IHsgcmV0dXJuICpnbG9iYWxEYXRhKCkucHJvcGVydHlOYW1lczsgfQorICAgIGlu
bGluZSBjb25zdCBBcmdMaXN0JiBFeGVjU3RhdGU6OmVtcHR5TGlzdCgpIGNvbnN0IHsgcmV0dXJu
ICpnbG9iYWxEYXRhKCkuZW1wdHlMaXN0OyB9CisgICAgaW5saW5lIExleGVyKiBFeGVjU3RhdGU6
OmxleGVyKCkgY29uc3QgeyByZXR1cm4gZ2xvYmFsRGF0YSgpLmxleGVyOyB9CisgICAgaW5saW5l
IFBhcnNlciogRXhlY1N0YXRlOjpwYXJzZXIoKSBjb25zdCB7IHJldHVybiBnbG9iYWxEYXRhKCku
cGFyc2VyOyB9CisgICAgaW5saW5lIE1hY2hpbmUqIEV4ZWNTdGF0ZTo6bWFjaGluZSgpIGNvbnN0
IHsgcmV0dXJuIGdsb2JhbERhdGEoKS5tYWNoaW5lOyB9CisKKyAgICBpbmxpbmUgY29uc3QgSGFz
aFRhYmxlKiBFeGVjU3RhdGU6OmFycmF5VGFibGUoRXhlY1N0YXRlKiBleGVjKSB7IHJldHVybiBl
eGVjLT5nbG9iYWxEYXRhKCkuYXJyYXlUYWJsZTsgfQorICAgIGlubGluZSBjb25zdCBIYXNoVGFi
bGUqIEV4ZWNTdGF0ZTo6ZGF0ZVRhYmxlKEV4ZWNTdGF0ZSogZXhlYykgeyByZXR1cm4gZXhlYy0+
Z2xvYmFsRGF0YSgpLmRhdGVUYWJsZTsgfQorICAgIGlubGluZSBjb25zdCBIYXNoVGFibGUqIEV4
ZWNTdGF0ZTo6bWF0aFRhYmxlKEV4ZWNTdGF0ZSogZXhlYykgeyByZXR1cm4gZXhlYy0+Z2xvYmFs
RGF0YSgpLm1hdGhUYWJsZTsgfQorICAgIGlubGluZSBjb25zdCBIYXNoVGFibGUqIEV4ZWNTdGF0
ZTo6bnVtYmVyVGFibGUoRXhlY1N0YXRlKiBleGVjKSB7IHJldHVybiBleGVjLT5nbG9iYWxEYXRh
KCkubnVtYmVyVGFibGU7IH0KKyAgICBpbmxpbmUgY29uc3QgSGFzaFRhYmxlKiBFeGVjU3RhdGU6
OnJlZ0V4cFRhYmxlKEV4ZWNTdGF0ZSogZXhlYykgeyByZXR1cm4gZXhlYy0+Z2xvYmFsRGF0YSgp
LnJlZ0V4cFRhYmxlOyB9CisgICAgaW5saW5lIGNvbnN0IEhhc2hUYWJsZSogRXhlY1N0YXRlOjpy
ZWdFeHBDb25zdHJ1Y3RvclRhYmxlKEV4ZWNTdGF0ZSogZXhlYykgeyByZXR1cm4gZXhlYy0+Z2xv
YmFsRGF0YSgpLnJlZ0V4cENvbnN0cnVjdG9yVGFibGU7IH0KKyAgICBpbmxpbmUgY29uc3QgSGFz
aFRhYmxlKiBFeGVjU3RhdGU6OnN0cmluZ1RhYmxlKEV4ZWNTdGF0ZSogZXhlYykgeyByZXR1cm4g
ZXhlYy0+Z2xvYmFsRGF0YSgpLnN0cmluZ1RhYmxlOyB9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwog
CiAjZW5kaWYgLy8gRXhlY1N0YXRlX2gKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9KU0Z1bmN0
aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvSlNGdW5jdGlvbi5jcHAJ
KHJldmlzaW9uIDM3MDYyKQorKysgSmF2YVNjcmlwdENvcmUva2pzL0pTRnVuY3Rpb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw3IEBAIENhbGxUeXBlIEpTRnVuY3Rpb246OmdldENh
bGxEYXRhKENhbGxEYXQKIAogSlNWYWx1ZSogSlNGdW5jdGlvbjo6Y2FsbChFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKLSAgICByZXR1
cm4gZXhlYy0+bWFjaGluZSgpLT5leGVjdXRlKG1fYm9keS5nZXQoKSwgZXhlYywgdGhpcywgdGhp
c1ZhbHVlLT50b1RoaXNPYmplY3QoZXhlYyksIGFyZ3MsIG1fc2NvcGVDaGFpbi5ub2RlKCksIGV4
ZWMtPmV4Y2VwdGlvblNsb3QoKSk7CisgICAgcmV0dXJuIGV4ZWMtPm1hY2hpbmUoKS0+ZXhlY3V0
ZShtX2JvZHkuZ2V0KCksIGV4ZWMsIHRoaXMsIHRoaXNWYWx1ZS0+dG9UaGlzT2JqZWN0KGV4ZWMp
LCBhcmdzLCBtX3Njb3BlQ2hhaW4ubm9kZSgpKTsKIH0KIAogSlNWYWx1ZSogSlNGdW5jdGlvbjo6
YXJndW1lbnRzR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0
IFByb3BlcnR5U2xvdCYgc2xvdCkKQEAgLTE2Niw3ICsxNjYsNyBAQCBKU09iamVjdCogSlNGdW5j
dGlvbjo6Y29uc3RydWN0KEV4ZWNTdGF0CiAgICAgICAgIHN0cnVjdHVyZSA9IGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKS0+ZW1wdHlPYmplY3RTdHJ1Y3R1cmUoKTsKICAgICBKU09iamVjdCog
dGhpc09iaiA9IG5ldyAoZXhlYykgSlNPYmplY3Qoc3RydWN0dXJlKTsKIAotICAgIEpTVmFsdWUq
IHJlc3VsdCA9IGV4ZWMtPm1hY2hpbmUoKS0+ZXhlY3V0ZShtX2JvZHkuZ2V0KCksIGV4ZWMsIHRo
aXMsIHRoaXNPYmosIGFyZ3MsIG1fc2NvcGVDaGFpbi5ub2RlKCksIGV4ZWMtPmV4Y2VwdGlvblNs
b3QoKSk7CisgICAgSlNWYWx1ZSogcmVzdWx0ID0gZXhlYy0+bWFjaGluZSgpLT5leGVjdXRlKG1f
Ym9keS5nZXQoKSwgZXhlYywgdGhpcywgdGhpc09iaiwgYXJncywgbV9zY29wZUNoYWluLm5vZGUo
KSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpIHx8ICFyZXN1bHQtPmlzT2JqZWN0KCkp
CiAgICAgICAgIHJldHVybiB0aGlzT2JqOwogICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU09iamVj
dCo+KHJlc3VsdCk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvSlNHbG9iYWxEYXRhLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvSlNHbG9iYWxEYXRhLmNwcAkocmV2aXNp
b24gMzcwNjIpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvSlNHbG9iYWxEYXRhLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTksNiArNTksMTAgQEAgZXh0ZXJuIGNvbnN0IEhhc2hUYWJsZSBzdHJpbmdU
YWJsZTsKIEpTR2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKGJvb2wgaXNTaGFyZWQpCiAgICAgOiBt
YWNoaW5lKG5ldyBNYWNoaW5lKQogICAgICwgaGVhcChuZXcgSGVhcCh0aGlzKSkKKyAgICAsIGds
b2JhbE9iamVjdCgwKQorICAgICwgc2NvcGVDaGFpbigwKQorICAgICwgY2FsbEZyYW1lKDApCisg
ICAgLCBleGNlcHRpb24oMCkKICNpZiBFTkFCTEUoSlNDX01VTFRJUExFX1RIUkVBRFMpCiAgICAg
LCBhcnJheVRhYmxlKG5ldyBIYXNoVGFibGUoSlNDOjphcnJheVRhYmxlKSkKICAgICAsIGRhdGVU
YWJsZShuZXcgSGFzaFRhYmxlKEpTQzo6ZGF0ZVRhYmxlKSkKSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L2tqcy9KU0dsb2JhbERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvSlNH
bG9iYWxEYXRhLmgJKHJldmlzaW9uIDM3MDYyKQorKysgSmF2YVNjcmlwdENvcmUva2pzL0pTR2xv
YmFsRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw4ICs1MCwxMSBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICBjbGFzcyBNYWNoaW5lOwogICAgIGNsYXNzIFBhcnNlcjsKICAgICBjbGFzcyBQYXJz
ZXJSZWZDb3VudGVkOworICAgIGNsYXNzIFJlZ2lzdGVyOworICAgIGNsYXNzIFNjb3BlQ2hhaW5O
b2RlOwogICAgIGNsYXNzIFN0cnVjdHVyZUlEOwogICAgIGNsYXNzIFVTdHJpbmc7CisKICAgICBz
dHJ1Y3QgSGFzaFRhYmxlOwogCiAgICAgY2xhc3MgSlNHbG9iYWxEYXRhIDogcHVibGljIFJlZkNv
dW50ZWQ8SlNHbG9iYWxEYXRhPiB7CkBAIC02NSw2ICs2OCwxNCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgTWFjaGluZSogbWFjaGluZTsKICAgICAgICAgSGVhcCogaGVhcDsKIAorICAgICAg
ICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0OworICAgICAgICBTY29wZUNoYWluTm9kZSog
c2NvcGVDaGFpbjsKKyAgICAgICAgUmVnaXN0ZXIqIGNhbGxGcmFtZTsKKyAgICAgICAgSlNWYWx1
ZSogZXhjZXB0aW9uOworI2lmIEVOQUJMRShDVEkpCisgICAgICAgIHZvaWQqIHJldHVybkFkZHJl
c3M7CisjZW5kaWYKKwogICAgICAgICBjb25zdCBIYXNoVGFibGUqIGFycmF5VGFibGU7CiAgICAg
ICAgIGNvbnN0IEhhc2hUYWJsZSogZGF0ZVRhYmxlOwogICAgICAgICBjb25zdCBIYXNoVGFibGUq
IG1hdGhUYWJsZTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9KU0dsb2JhbE9iamVjdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2
aXNpb24gMzcwNjIpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvSlNHbG9iYWxPYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMjIsNyArMTIyLDcgQEAgSlNHbG9iYWxPYmplY3Q6On5KU0dsb2Jh
bE9iamVjdCgpCiAgICAgZGVsZXRlIGQoKTsKIH0KIAotdm9pZCBKU0dsb2JhbE9iamVjdDo6aW5p
dChKU09iamVjdCogdGhpc1ZhbHVlKQordm9pZCBKU0dsb2JhbE9iamVjdDo6aW5pdCgpCiB7CiAg
ICAgQVNTRVJUKEpTTG9jazo6Y3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSk7CiAKQEAgLTEz
NiwxMyArMTM2LDYgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6aW5pdChKU09iamVjdCogdGhpcwog
ICAgIH0gZWxzZQogICAgICAgICBoZWFkT2JqZWN0ID0gZCgpLT5uZXh0ID0gZCgpLT5wcmV2ID0g
dGhpczsKIAotICAgIGQoKS0+cmVjdXJzaW9uID0gMDsKLSAgICBkKCktPmRlYnVnZ2VyID0gMDsK
LQotICAgIGQoKS0+Z2xvYmFsRXhlYy5zZXQobmV3IEV4ZWNTdGF0ZSh0aGlzLCB0aGlzVmFsdWUs
IGQoKS0+Z2xvYmFsU2NvcGVDaGFpbi5ub2RlKCkpKTsKLQotICAgIGQoKS0+cHJvZmlsZUdyb3Vw
ID0gMDsKLQogICAgIHJlc2V0KHByb3RvdHlwZSgpKTsKIH0KIApAQCAtMTk1LDcgKzE4OCw3IEBA
IHN0YXRpYyBpbmxpbmUgSlNPYmplY3QqIGxhc3RJblByb3RvdHlwZUMKIAogdm9pZCBKU0dsb2Jh
bE9iamVjdDo6cmVzZXQoSlNWYWx1ZSogcHJvdG90eXBlKQogewotICAgIEV4ZWNTdGF0ZSogZXhl
YyA9IGQoKS0+Z2xvYmFsRXhlYy5nZXQoKTsKKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSBzdGF0aWNf
Y2FzdDxFeGVjU3RhdGUqPihnbG9iYWxEYXRhKCkpOwogCiAgICAgLy8gUHJvdG90eXBlcwogCkBA
IC0zNjEsNyArMzU0LDcgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6bWFyaygpCiAgICAgaWYgKHJl
Z2lzdGVyRmlsZS5nbG9iYWxPYmplY3QoKSA9PSB0aGlzKQogICAgICAgICByZWdpc3RlckZpbGUu
bWFya0dsb2JhbHMoZ2xvYmFsRGF0YSgpLT5oZWFwKTsKIAotICAgIG1hcmtJZk5lZWRlZChkKCkt
Pmdsb2JhbEV4ZWMtPmV4Y2VwdGlvbigpKTsKKyAgICBtYXJrSWZOZWVkZWQoZ2xvYmFsRGF0YSgp
LT5leGNlcHRpb24pOwogCiAgICAgbWFya0lmTmVlZGVkKGQoKS0+cmVnRXhwQ29uc3RydWN0b3Ip
OwogICAgIG1hcmtJZk5lZWRlZChkKCktPmVycm9yQ29uc3RydWN0b3IpOwpAQCAtNDA1LDExICsz
OTgsNiBAQCBKU0dsb2JhbE9iamVjdCogSlNHbG9iYWxPYmplY3Q6OnRvR2xvYmFsCiAgICAgcmV0
dXJuIGNvbnN0X2Nhc3Q8SlNHbG9iYWxPYmplY3QqPih0aGlzKTsKIH0KIAotRXhlY1N0YXRlKiBK
U0dsb2JhbE9iamVjdDo6Z2xvYmFsRXhlYygpCi17Ci0gICAgcmV0dXJuIGQoKS0+Z2xvYmFsRXhl
Yy5nZXQoKTsKLX0KLQogYm9vbCBKU0dsb2JhbE9iamVjdDo6aXNEeW5hbWljU2NvcGUoKSBjb25z
dAogewogICAgIHJldHVybiB0cnVlOwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL0pTR2xvYmFs
T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL0pTR2xvYmFsT2JqZWN0
LmgJKHJldmlzaW9uIDM3MDYyKQorKysgSmF2YVNjcmlwdENvcmUva2pzL0pTR2xvYmFsT2JqZWN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgICAgICBKU0dsb2JhbE9iamVjdERhdGEoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNPYmplY3QqIHRoaXNWYWx1ZSkKICAgICAgICAgICAgICAgICA6IEpTVmFyaWFibGVPYmplY3RE
YXRhKCZzeW1ib2xUYWJsZSwgMCkKICAgICAgICAgICAgICAgICAsIHJlZ2lzdGVyQXJyYXlTaXpl
KDApCisgICAgICAgICAgICAgICAgLCBkZWJ1Z2dlcigwKQogICAgICAgICAgICAgICAgICwgZ2xv
YmFsU2NvcGVDaGFpbihnbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSkKKyAgICAgICAgICAgICAgICAs
IHJlY3Vyc2lvbigwKQogICAgICAgICAgICAgICAgICwgcmVnRXhwQ29uc3RydWN0b3IoMCkKICAg
ICAgICAgICAgICAgICAsIGVycm9yQ29uc3RydWN0b3IoMCkKICAgICAgICAgICAgICAgICAsIGV2
YWxFcnJvckNvbnN0cnVjdG9yKDApCkBAIC03NSw2ICs3Nyw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICAgICAgICAgICwgbnVtYmVyUHJvdG90eXBlKDApCiAgICAgICAgICAgICAgICAgLCBk
YXRlUHJvdG90eXBlKDApCiAgICAgICAgICAgICAgICAgLCByZWdFeHBQcm90b3R5cGUoMCkKKyAg
ICAgICAgICAgICAgICAsIHByb2ZpbGVHcm91cCgwKQogICAgICAgICAgICAgewogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgCkBAIC05MCw3ICs5Myw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICAgICAgRGVidWdnZXIqIGRlYnVnZ2VyOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBT
Y29wZUNoYWluIGdsb2JhbFNjb3BlQ2hhaW47Ci0gICAgICAgICAgICBPd25QdHI8RXhlY1N0YXRl
PiBnbG9iYWxFeGVjOwogCiAgICAgICAgICAgICBpbnQgcmVjdXJzaW9uOwogCkBAIC0xNDYsMTQg
KzE0OCwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNHbG9iYWxPYmplY3QoSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhKQogICAgICAgICAgICAgOiBKU1ZhcmlhYmxlT2JqZWN0KGdsb2Jh
bERhdGEtPm51bGxQcm90b1N0cnVjdHVyZUlELCBuZXcgSlNHbG9iYWxPYmplY3REYXRhKHRoaXMs
IHRoaXMpKQogICAgICAgICB7Ci0gICAgICAgICAgICBpbml0KHRoaXMpOworICAgICAgICAgICAg
aW5pdCgpOwogICAgICAgICB9CiAKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIEpTR2xvYmFsT2Jq
ZWN0KFBhc3NSZWZQdHI8U3RydWN0dXJlSUQ+IHN0cnVjdHVyZSwgSlNHbG9iYWxPYmplY3REYXRh
KiBkYXRhLCBKU09iamVjdCogZ2xvYmFsVGhpc1ZhbHVlKQorICAgICAgICBKU0dsb2JhbE9iamVj
dChQYXNzUmVmUHRyPFN0cnVjdHVyZUlEPiBzdHJ1Y3R1cmUsIEpTR2xvYmFsT2JqZWN0RGF0YSog
ZGF0YSkKICAgICAgICAgICAgIDogSlNWYXJpYWJsZU9iamVjdChzdHJ1Y3R1cmUsIGRhdGEpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIGluaXQoZ2xvYmFsVGhpc1ZhbHVlKTsKKyAgICAgICAgICAg
IGluaXQoKTsKICAgICAgICAgfQogCiAgICAgcHVibGljOgpAQCAtMjMyLDggKzIzNCw2IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNHbG9iYWxPYmplY3QoKSBjb25z
dCB7IHJldHVybiB0cnVlOyB9CiAgICAgICAgIHZpcnR1YWwgSlNHbG9iYWxPYmplY3QqIHRvR2xv
YmFsT2JqZWN0KEV4ZWNTdGF0ZSopIGNvbnN0OwogCi0gICAgICAgIHZpcnR1YWwgRXhlY1N0YXRl
KiBnbG9iYWxFeGVjKCk7Ci0KICAgICAgICAgdmlydHVhbCBib29sIHNob3VsZEludGVycnVwdFNj
cmlwdCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAogICAgICAgICB2aXJ0dWFsIGJvb2wgYWxs
b3dzQWNjZXNzRnJvbShjb25zdCBKU0dsb2JhbE9iamVjdCopIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KQEAgLTI1MCw2ICsyNTAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCByZXNl
dFByb3RvdHlwZShKU1ZhbHVlKiBwcm90b3R5cGUpOwogCiAgICAgICAgIEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSgpIHsgcmV0dXJuIGQoKS0+Z2xvYmFsRGF0YS5nZXQoKTsgfQorICAgICAgICBF
eGVjU3RhdGUqIGdsb2JhbEV4ZWMoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxFeGVjU3RhdGUqPihn
bG9iYWxEYXRhKCkpOyB9CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0RGF0YSogZCgpIGNvbnN0IHsg
cmV0dXJuIHN0YXRpY19jYXN0PEpTR2xvYmFsT2JqZWN0RGF0YSo+KEpTVmFyaWFibGVPYmplY3Q6
OmQpOyB9CiAKICAgICBwcm90ZWN0ZWQ6CkBAIC0yNjksNyArMjcwLDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAKICAgICBwcml2YXRlOgogICAgICAgICAvLyBGSVhNRTogRm9sZCB0aGVzZSBmdW5jdGlv
bnMgaW50byB0aGUgY29uc3RydWN0b3IuCi0gICAgICAgIHZvaWQgaW5pdChKU09iamVjdCogdGhp
c1ZhbHVlKTsKKyAgICAgICAgdm9pZCBpbml0KCk7CiAgICAgICAgIHZvaWQgcmVzZXQoSlNWYWx1
ZSogcHJvdG90eXBlKTsKIAogICAgICAgICB2b2lkIHNldFJlZ2lzdGVycyhSZWdpc3RlciogcmVn
aXN0ZXJzLCBSZWdpc3RlciogcmVnaXN0ZXJBcnJheSwgc2l6ZV90IGNvdW50KTsKQEAgLTMzNCw3
ICszMzUsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuIGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKS0+bnVtYmVyUHJvdG90eXBlKCk7CiAgICAgfQogCi0KIH0gLy8gbmFtZXNw
YWNlIEpTQwogCiAjZW5kaWYgLy8gSlNHbG9iYWxPYmplY3RfaApJbmRleDogSmF2YVNjcmlwdENv
cmUva2pzL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2Ny
aXB0Q29yZS9ranMvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCShyZXZpc2lvbiAzNzA2MikK
KysrIEphdmFTY3JpcHRDb3JlL2tqcy9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI5MSw3ICsyOTEsNyBAQCBKU1ZhbHVlKiBnbG9iYWxGdW5jRXZhbChFeGVj
U3RhdGUqIGV4ZWMsCiAgICAgaWYgKCFldmFsTm9kZSkKICAgICAgICAgcmV0dXJuIHRocm93RXJy
b3IoZXhlYywgU3ludGF4RXJyb3IsIGVyck1zZywgZXJyTGluZSwgc291cmNlSWQsIE5VTEwpOwog
Ci0gICAgcmV0dXJuIGV4ZWMtPm1hY2hpbmUoKS0+ZXhlY3V0ZShldmFsTm9kZS5nZXQoKSwgZXhl
YywgdGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZUNoYWluKCkubm9kZSgpLCBl
eGVjLT5leGNlcHRpb25TbG90KCkpOworICAgIHJldHVybiBleGVjLT5tYWNoaW5lKCktPmV4ZWN1
dGUoZXZhbE5vZGUuZ2V0KCksIGV4ZWMsIHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdC0+Z2xvYmFs
U2NvcGVDaGFpbigpLm5vZGUoKSk7CiB9CiAKIEpTVmFsdWUqIGdsb2JhbEZ1bmNQYXJzZUludChF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmIGFyZ3Mp
CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuaAko
cmV2aXNpb24gMzcwNjIpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvSlNHbG9iYWxPYmplY3RGdW5j
dGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjQsNiArMjQsOCBAQAogI2lmbmRlZiBKU0dsb2Jh
bE9iamVjdEZ1bmN0aW9uc19oCiAjZGVmaW5lIEpTR2xvYmFsT2JqZWN0RnVuY3Rpb25zX2gKIAor
I2luY2x1ZGUgPHd0Zi91bmljb2RlL1VuaWNvZGUuaD4KKwogbmFtZXNwYWNlIEpTQyB7CiAKICAg
ICBjbGFzcyBBcmdMaXN0OwpAQCAtNDksOCArNTEsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBK
U1ZhbHVlKiBnbG9iYWxGdW5jS0pTUHJpbnQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVl
KiwgY29uc3QgQXJnTGlzdCYpOwogI2VuZGlmCiAKLSAgICBzdGF0aWMgY29uc3QgZG91YmxlIG1h
bnRpc3NhT3ZlcmZsb3dMb3dlckJvdW5kID0gOTAwNzE5OTI1NDc0MDk5Mi4wOworICAgIGNvbnN0
IGRvdWJsZSBtYW50aXNzYU92ZXJmbG93TG93ZXJCb3VuZCA9IDkwMDcxOTkyNTQ3NDA5OTIuMDsK
ICAgICBkb3VibGUgcGFyc2VJbnRPdmVyZmxvdyhjb25zdCBjaGFyKiwgaW50IGxlbmd0aCwgaW50
IHJhZGl4KTsKKyAgICBib29sIGlzU3RyV2hpdGVTcGFjZShVQ2hhcik7CiAKIH0gLy8gbmFtZXNw
YWNlIEpTQwogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvU2hlbGwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEphdmFTY3JpcHRDb3JlL2tqcy9TaGVsbC5jcHAJKHJldmlzaW9uIDM3MDYyKQorKysgSmF2
YVNjcmlwdENvcmUva2pzL1NoZWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcyLDYgKzE3Miw5
IEBAIEFTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoR2xvYmFsT2JqZWN0KTsKIEdsb2JhbE9iamVj
dDo6R2xvYmFsT2JqZWN0KEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgVmVjdG9yPFVT
dHJpbmc+JiBhcmd1bWVudHMpCiAgICAgOiBKU0dsb2JhbE9iamVjdChnbG9iYWxEYXRhKQogewor
ICAgIGdsb2JhbERhdGEtPmdsb2JhbE9iamVjdCA9IHRoaXM7CisgICAgZ2xvYmFsRGF0YS0+c2Nv
cGVDaGFpbiA9IGdsb2JhbFNjb3BlQ2hhaW4oKS5ub2RlKCk7CisKICAgICBwdXREaXJlY3RGdW5j
dGlvbihnbG9iYWxFeGVjKCksIG5ldyAoZ2xvYmFsRXhlYygpKSBQcm90b3R5cGVGdW5jdGlvbihn
bG9iYWxFeGVjKCksIHByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlKCksIDEsIElkZW50aWZpZXIo
Z2xvYmFsRXhlYygpLCAiZGVidWciKSwgZnVuY3Rpb25EZWJ1ZykpOwogICAgIHB1dERpcmVjdEZ1
bmN0aW9uKGdsb2JhbEV4ZWMoKSwgbmV3IChnbG9iYWxFeGVjKCkpIFByb3RvdHlwZUZ1bmN0aW9u
KGdsb2JhbEV4ZWMoKSwgcHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMSwgSWRlbnRpZmll
cihnbG9iYWxFeGVjKCksICJwcmludCIpLCBmdW5jdGlvblByaW50KSk7CiAgICAgcHV0RGlyZWN0
RnVuY3Rpb24oZ2xvYmFsRXhlYygpLCBuZXcgKGdsb2JhbEV4ZWMoKSkgUHJvdG90eXBlRnVuY3Rp
b24oZ2xvYmFsRXhlYygpLCBwcm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZSgpLCAwLCBJZGVudGlm
aWVyKGdsb2JhbEV4ZWMoKSwgInF1aXQiKSwgZnVuY3Rpb25RdWl0KSk7CkluZGV4OiBKYXZhU2Ny
aXB0Q29yZS9ranMvaW50ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L2tqcy9pbnRlcnByZXRlci5jcHAJKHJldmlzaW9uIDM3MDYyKQorKysgSmF2YVNjcmlwdENvcmUv
a2pzL2ludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQsOCBAQCBDb21w
bGV0aW9uIEludGVycHJldGVyOjpldmFsdWF0ZShFeGVjU3RhCiAKIENvbXBsZXRpb24gSW50ZXJw
cmV0ZXI6OmV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbiYgc2NvcGVDaGFpbiwg
Y29uc3QgVVN0cmluZyYgc291cmNlVVJMLCBpbnQgc3RhcnRpbmdMaW5lTnVtYmVyLCBQYXNzUmVm
UHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2UsIEpTVmFsdWUqIHRoaXNWYWx1ZSkKIHsKKyAgICBB
U1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKwogICAgIEpTTG9jayBsb2NrKGV4ZWMpOwog
ICAgIAogICAgIC8vIHBhcnNlIHRoZSBzb3VyY2UgY29kZQpAQCAtNzksMTAgKzgxLDExIEBAIENv
bXBsZXRpb24gSW50ZXJwcmV0ZXI6OmV2YWx1YXRlKEV4ZWNTdGEKIAogICAgIEpTT2JqZWN0KiB0
aGlzT2JqID0gKCF0aGlzVmFsdWUgfHwgdGhpc1ZhbHVlLT5pc1VuZGVmaW5lZE9yTnVsbCgpKSA/
IGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKSA6IHRoaXNWYWx1ZS0+dG9PYmplY3QoZXhlYyk7
CiAKLSAgICBKU1ZhbHVlKiBleGNlcHRpb24gPSAwOwotICAgIEpTVmFsdWUqIHJlc3VsdCA9IGV4
ZWMtPm1hY2hpbmUoKS0+ZXhlY3V0ZShwcm9ncmFtTm9kZS5nZXQoKSwgZXhlYywgc2NvcGVDaGFp
bi5ub2RlKCksIHRoaXNPYmosICZleGNlcHRpb24pOworICAgIEpTVmFsdWUqIHJlc3VsdCA9IGV4
ZWMtPm1hY2hpbmUoKS0+ZXhlY3V0ZShwcm9ncmFtTm9kZS5nZXQoKSwgZXhlYywgc2NvcGVDaGFp
bi5ub2RlKCksIHRoaXNPYmopOwogCi0gICAgaWYgKGV4Y2VwdGlvbikgeworICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkgeworICAgICAgICBKU1ZhbHVlKiBleGNlcHRpb24gPSBleGVjLT5l
eGNlcHRpb24oKTsKKyAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgaWYg
KGV4Y2VwdGlvbi0+aXNPYmplY3QoKSAmJiBzdGF0aWNfY2FzdDxKU09iamVjdCo+KGV4Y2VwdGlv
biktPmlzV2F0Y2hkb2dFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBDb21wbGV0aW9u
KEludGVycnVwdGVkLCByZXN1bHQpOwogICAgICAgICByZXR1cm4gQ29tcGxldGlvbihUaHJvdywg
ZXhjZXB0aW9uKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHAJ
KHJldmlzaW9uIDM3MDYyKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzYsNyArMjc2LDcgQEAgSlNET01XaW5kb3dCYXNlOjpK
U0RPTVdpbmRvd0Jhc2VEYXRhOjpKUwogfQogCiBKU0RPTVdpbmRvd0Jhc2U6OkpTRE9NV2luZG93
QmFzZShQYXNzUmVmUHRyPFN0cnVjdHVyZUlEPiBzdHJ1Y3R1cmUsIFBhc3NSZWZQdHI8RE9NV2lu
ZG93PiB3aW5kb3csIEpTRE9NV2luZG93U2hlbGwqIHNoZWxsKQotICAgIDogSlNHbG9iYWxPYmpl
Y3Qoc3RydWN0dXJlLCBuZXcgSlNET01XaW5kb3dCYXNlRGF0YSh3aW5kb3csIHRoaXMsIHNoZWxs
KSwgc2hlbGwpCisgICAgOiBKU0dsb2JhbE9iamVjdChzdHJ1Y3R1cmUsIG5ldyBKU0RPTVdpbmRv
d0Jhc2VEYXRhKHdpbmRvdywgdGhpcywgc2hlbGwpKQogewogICAgIC8vIFRpbWUgaW4gbWlsbGlz
ZWNvbmRzIGJlZm9yZSB0aGUgc2NyaXB0IHRpbWVvdXQgaGFuZGxlciBraWNrcyBpbi4KICAgICBz
ZXRUaW1lb3V0VGltZSgxMDAwMCk7CkBAIC0xMTYyLDcgKzExNjIsMTMgQEAgRXhlY1N0YXRlKiBK
U0RPTVdpbmRvd0Jhc2U6Omdsb2JhbEV4ZWMoKQogICAgIC8vIGZyYW1lIGRvZXMgbm90IGRlc3Ry
b3kgaXQKICAgICBBU1NFUlQoaW1wbCgpLT5mcmFtZSgpKTsKICAgICBpbXBsKCktPmZyYW1lKCkt
PmtlZXBBbGl2ZSgpOwotICAgIHJldHVybiBCYXNlOjpnbG9iYWxFeGVjKCk7CisgICAgRXhlY1N0
YXRlKiBleGVjID0gQmFzZTo6Z2xvYmFsRXhlYygpOworICAgIC8vIEZJWE1FOiBUaGlzIHJlYWxs
eSBuZWVkcyB0byBiZSBhIHNhdmUvcmVzdG9yZSwgSSB0aGluay4KKyAgICBleGVjLT5nbG9iYWxP
YmplY3QgPSB0aGlzOworICAgIGV4ZWMtPnNjb3BlQ2hhaW4gPSBnbG9iYWxTY29wZUNoYWluKCku
bm9kZSgpOworICAgIGV4ZWMtPmNhbGxGcmFtZSA9IDA7CisgICAgZXhlYy0+Y2xlYXJFeGNlcHRp
b24oKTsKKyAgICByZXR1cm4gZXhlYzsKIH0KIAogYm9vbCBKU0RPTVdpbmRvd0Jhc2U6OnNob3Vs
ZEludGVycnVwdFNjcmlwdCgpIGNvbnN0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23924</attachid>
            <date>2008-09-29 17:38:24 -0700</date>
            <delta_ts>2008-09-29 18:14:56 -0700</delta_ts>
            <desc>patch that removes some unused ExecState cruft</desc>
            <filename>ExecStatePatchA.txt</filename>
            <type>text/plain</type>
            <size>10221</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM3MDg0KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzYgQEAKKzIwMDgtMDktMjkgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIC0gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxMjE0CisgICAgICAgICAgd29yayBvbiBnZXR0aW5nIHJpZCBvZiBFeGVjU3RhdGUKKworICAg
ICAgICAqIEphdmFTY3JpcHRDb3JlLmV4cDogVXBkYXRlZCBzaW5jZSBKU0dsb2JhbE9iamVjdDo6
aW5pdAorICAgICAgICBubyBsb25nZXIgdGFrZXMgYSBwYXJhbWV0ZXIuCisKKyAgICAgICAgKiBW
TS9NYWNoaW5lLmNwcDoKKyAgICAgICAgKEpTQzo6TWFjaGluZTo6ZXhlY3V0ZSk6IFJlbW92ZWQg
bV9yZWdpc3RlckZpbGUgYXJndW1lbnQKKyAgICAgICAgZm9yIEV4ZWNTdGF0ZSBjb25zdHJ1Y3Rv
cnMuCisKKyAgICAgICAgKiBranMvRGVidWdnZXJDYWxsRnJhbWUuY3BwOgorICAgICAgICAoSlND
OjpEZWJ1Z2dlckNhbGxGcmFtZTo6ZXZhbHVhdGUpOiBSZW1vdmVkIGdsb2JhbFRoaXNWYWx1ZQor
ICAgICAgICBhcmd1bWVudCBmb3IgRXhlY1N0YXRlIGNvbnN0cnVjdG9yLgorCisgICAgICAgICog
a2pzL0V4ZWNTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6RXhlY1N0YXRlKTog
UmVtb3ZlZCBnbG9iYWxUaGlzVmFsdWUgYW5kCisgICAgICAgIHJlZ2lzdGVyRmlsZSBhcmd1bWVu
dHMgdG8gY29uc3RydWN0b3JzLgorCisgICAgICAgICoga2pzL0V4ZWNTdGF0ZS5oOiBSZW1vdmVk
IG1fZ2xvYmFsVGhpc1ZhbHVlIGFuZAorICAgICAgICBtX3JlZ2lzdGVyRmlsZSBkYXRhIG1lbWJl
cnMuCisKKyAgICAgICAgKiBranMvSlNHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpK
U0dsb2JhbE9iamVjdDo6aW5pdCk6IFJlbW92ZWQgZ2xvYmFsVGhpc1ZhbHVlCisgICAgICAgIGFy
Z3VtZW50IGZvciBFeGVjU3RhdGUgY29uc3RydWN0b3IuCisKKyAgICAgICAgKiBranMvSlNHbG9i
YWxPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OkpTR2xvYmFsT2JqZWN0
KTogR290IHJpZCBvZiBwYXJhbWV0ZXIKKyAgICAgICAgZm9yIHRoZSBpbml0IGZ1bmN0aW9uLgor
CiAyMDA4LTA5LTI5ICBDYW1lcm9uIFp3YXJpY2ggIDxjd3p3YXJpY2hAdXdhdGVybG9vLmNhPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS5leHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUuZXhwCShyZXZpc2lvbiAzNzA4NCkKKysrIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLmV4cAkod29ya2luZyBjb3B5KQpAQCAtMTQ1LDcgKzE0NSw3IEBAIF9fWk4zSlNDMTRKU0ds
b2JhbE9iamVjdDE2c3RvcFRpbWVvdXRDaGUKIF9fWk4zSlNDMTRKU0dsb2JhbE9iamVjdDE3cHV0
V2l0aEF0dHJpYnV0ZXNFUE5TXzlFeGVjU3RhdGVFUktOU18xMElkZW50aWZpZXJFUE5TXzdKU1Zh
bHVlRWoKIF9fWk4zSlNDMTRKU0dsb2JhbE9iamVjdDE3c3RhcnRUaW1lb3V0Q2hlY2tFdgogX19a
TjNKU0MxNEpTR2xvYmFsT2JqZWN0M3B1dEVQTlNfOUV4ZWNTdGF0ZUVSS05TXzEwSWRlbnRpZmll
ckVQTlNfN0pTVmFsdWVFUk5TXzE1UHV0UHJvcGVydHlTbG90RQotX19aTjNKU0MxNEpTR2xvYmFs
T2JqZWN0NGluaXRFUE5TXzhKU09iamVjdEUKK19fWk4zSlNDMTRKU0dsb2JhbE9iamVjdDRpbml0
RXYKIF9fWk4zSlNDMTRKU0dsb2JhbE9iamVjdDRtYXJrRXYKIF9fWk4zSlNDMTRKU0dsb2JhbE9i
amVjdEQyRXYKIF9fWk4zSlNDMTRKU0dsb2JhbE9iamVjdG53RW1QTlNfMTJKU0dsb2JhbERhdGFF
CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9WTS9NYWNoaW5lLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZh
U2NyaXB0Q29yZS9WTS9NYWNoaW5lLmNwcAkocmV2aXNpb24gMzcwODQpCisrKyBKYXZhU2NyaXB0
Q29yZS9WTS9NYWNoaW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTA4LDcgKzkwOCw3IEBAIEpT
VmFsdWUqIE1hY2hpbmU6OmV4ZWN1dGUoUHJvZ3JhbU5vZGUqIHAKICAgICBpZiAoY29kZUJsb2Nr
LT5uZWVkc0Z1bGxTY29wZUNoYWluKQogICAgICAgICBzY29wZUNoYWluID0gc2NvcGVDaGFpbi0+
Y29weSgpOwogCi0gICAgRXhlY1N0YXRlIG5ld0V4ZWMoZXhlYywgJm1fcmVnaXN0ZXJGaWxlLCBz
Y29wZUNoYWluLCAwKTsKKyAgICBFeGVjU3RhdGUgbmV3RXhlYyhleGVjLCBzY29wZUNoYWluLCAw
KTsKIAogICAgIFByb2ZpbGVyKiogcHJvZmlsZXIgPSBQcm9maWxlcjo6ZW5hYmxlZFByb2ZpbGVy
UmVmZXJlbmNlKCk7CiAgICAgaWYgKCpwcm9maWxlcikKQEAgLTk3MCw3ICs5NzAsNyBAQCBKU1Zh
bHVlKiBNYWNoaW5lOjpleGVjdXRlKEZ1bmN0aW9uQm9keU5vCiAgICAgLy8gYSAwIGNvZGVCbG9j
ayBpbmRpY2F0ZXMgYSBidWlsdC1pbiBjYWxsZXIKICAgICBpbml0aWFsaXplQ2FsbEZyYW1lKHIs
IGNvZGVCbG9jaywgMCwgMCwgMCwgMCwgYXJnYywgZnVuY3Rpb24pOwogCi0gICAgRXhlY1N0YXRl
IG5ld0V4ZWMoZXhlYywgJm1fcmVnaXN0ZXJGaWxlLCBzY29wZUNoYWluLCByKTsKKyAgICBFeGVj
U3RhdGUgbmV3RXhlYyhleGVjLCBzY29wZUNoYWluLCByKTsKIAogICAgIFByb2ZpbGVyKiogcHJv
ZmlsZXIgPSBQcm9maWxlcjo6ZW5hYmxlZFByb2ZpbGVyUmVmZXJlbmNlKCk7CiAgICAgaWYgKCpw
cm9maWxlcikKQEAgLTEwNTcsNyArMTA1Nyw3IEBAIEpTVmFsdWUqIE1hY2hpbmU6OmV4ZWN1dGUo
RXZhbE5vZGUqIGV2YWwKICAgICBpZiAoY29kZUJsb2NrLT5uZWVkc0Z1bGxTY29wZUNoYWluKQog
ICAgICAgICBzY29wZUNoYWluID0gc2NvcGVDaGFpbi0+Y29weSgpOwogCi0gICAgRXhlY1N0YXRl
IG5ld0V4ZWMoZXhlYywgJm1fcmVnaXN0ZXJGaWxlLCBzY29wZUNoYWluLCAwKTsKKyAgICBFeGVj
U3RhdGUgbmV3RXhlYyhleGVjLCBzY29wZUNoYWluLCAwKTsKIAogICAgIFByb2ZpbGVyKiogcHJv
ZmlsZXIgPSBQcm9maWxlcjo6ZW5hYmxlZFByb2ZpbGVyUmVmZXJlbmNlKCk7CiAgICAgaWYgKCpw
cm9maWxlcikKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9EZWJ1Z2dlckNhbGxGcmFtZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcAko
cmV2aXNpb24gMzcwODQpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvRGVidWdnZXJDYWxsRnJhbWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCw5ICs2OCw3IEBAIEpTVmFsdWUqIERlYnVnZ2VyQ2Fs
bEZyYW1lOjpldmFsdWF0ZShjb24KICAgICBpZiAoIW1fY29kZUJsb2NrKQogICAgICAgICByZXR1
cm4gMDsKIAotICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gdGhpcy0+dGhpc09iamVjdCgpOwot
Ci0gICAgRXhlY1N0YXRlIG5ld0V4ZWMobV9zY29wZUNoYWluLT5nbG9iYWxPYmplY3QoKSwgdGhp
c09iamVjdCwgbV9zY29wZUNoYWluKTsKKyAgICBFeGVjU3RhdGUgbmV3RXhlYyhtX3Njb3BlQ2hh
aW4tPmdsb2JhbE9iamVjdCgpLCBtX3Njb3BlQ2hhaW4pOwogCiAgICAgaW50IHNvdXJjZUlkOwog
ICAgIGludCBlcnJMaW5lOwpAQCAtODAsNyArNzgsNyBAQCBKU1ZhbHVlKiBEZWJ1Z2dlckNhbGxG
cmFtZTo6ZXZhbHVhdGUoY29uCiAgICAgaWYgKCFldmFsTm9kZSkKICAgICAgICAgcmV0dXJuIEVy
cm9yOjpjcmVhdGUoJm5ld0V4ZWMsIFN5bnRheEVycm9yLCBlcnJNc2csIGVyckxpbmUsIHNvdXJj
ZUlkLCAwKTsKIAotICAgIHJldHVybiBuZXdFeGVjLm1hY2hpbmUoKS0+ZXhlY3V0ZShldmFsTm9k
ZS5nZXQoKSwgJm5ld0V4ZWMsIHRoaXNPYmplY3QsIG1fc2NvcGVDaGFpbiwgJmV4Y2VwdGlvbik7
CisgICAgcmV0dXJuIG5ld0V4ZWMubWFjaGluZSgpLT5leGVjdXRlKGV2YWxOb2RlLmdldCgpLCAm
bmV3RXhlYywgdGhpc09iamVjdCgpLCBtX3Njb3BlQ2hhaW4sICZleGNlcHRpb24pOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9FeGVjU3RhdGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9FeGVjU3RhdGUuY3BwCShyZXZpc2lv
biAzNzA4NCkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9FeGVjU3RhdGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yOCwyNSArMjgsMjEgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLUV4ZWNTdGF0ZTo6
RXhlY1N0YXRlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBnbG9iYWxU
aGlzVmFsdWUsIFNjb3BlQ2hhaW5Ob2RlKiBnbG9iYWxTY29wZUNoYWluKQorRXhlY1N0YXRlOjpF
eGVjU3RhdGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU2NvcGVDaGFpbk5vZGUqIGds
b2JhbFNjb3BlQ2hhaW4pCiAgICAgOiBtX2dsb2JhbE9iamVjdChnbG9iYWxPYmplY3QpCi0gICAg
LCBtX2dsb2JhbFRoaXNWYWx1ZShnbG9iYWxUaGlzVmFsdWUpCiAgICAgLCBtX2V4Y2VwdGlvbigw
KQogICAgICwgbV9nbG9iYWxEYXRhKGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpKQogICAgICwg
bV9wcmV2KDApCi0gICAgLCBtX3JlZ2lzdGVyRmlsZSgwKQogICAgICwgbV9zY29wZUNoYWluKGds
b2JhbFNjb3BlQ2hhaW4pCiAgICAgLCBtX2NhbGxGcmFtZSgwKQogewogfQogCi1FeGVjU3RhdGU6
OkV4ZWNTdGF0ZShFeGVjU3RhdGUqIGV4ZWMsIFJlZ2lzdGVyRmlsZSogcmVnaXN0ZXJGaWxlLCBT
Y29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiwgUmVnaXN0ZXIqIGNhbGxGcmFtZSkKK0V4ZWNTdGF0
ZTo6RXhlY1N0YXRlKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4s
IFJlZ2lzdGVyKiBjYWxsRnJhbWUpCiAgICAgOiBtX2dsb2JhbE9iamVjdChleGVjLT5tX2dsb2Jh
bE9iamVjdCkKLSAgICAsIG1fZ2xvYmFsVGhpc1ZhbHVlKGV4ZWMtPm1fZ2xvYmFsVGhpc1ZhbHVl
KQogICAgICwgbV9leGNlcHRpb24oMCkKICAgICAsIG1fZ2xvYmFsRGF0YShleGVjLT5tX2dsb2Jh
bERhdGEpCiAgICAgLCBtX3ByZXYoZXhlYykKLSAgICAsIG1fcmVnaXN0ZXJGaWxlKHJlZ2lzdGVy
RmlsZSkKICAgICAsIG1fc2NvcGVDaGFpbihzY29wZUNoYWluKQogICAgICwgbV9jYWxsRnJhbWUo
Y2FsbEZyYW1lKQogewpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL0V4ZWNTdGF0ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9FeGVjU3RhdGUuaAkocmV2aXNpb24gMzcwODQp
CisrKyBKYXZhU2NyaXB0Q29yZS9ranMvRXhlY1N0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUy
LDcgKzUyLDcgQEAgbmFtZXNwYWNlIEpTQyAgewogICAgICAgICBmcmllbmQgY2xhc3MgTWFjaGlu
ZTsKICAgICAgICAgZnJpZW5kIGNsYXNzIERlYnVnZ2VyQ2FsbEZyYW1lOwogICAgIHB1YmxpYzoK
LSAgICAgICAgRXhlY1N0YXRlKEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqIGdsb2JhbFRoaXNW
YWx1ZSwgU2NvcGVDaGFpbk5vZGUqIGdsb2JhbFNjb3BlQ2hhaW4pOworICAgICAgICBFeGVjU3Rh
dGUoSlNHbG9iYWxPYmplY3QqLCBTY29wZUNoYWluTm9kZSogZ2xvYmFsU2NvcGVDaGFpbik7CiAK
ICAgICAgICAgLy8gR2xvYmFsIG9iamVjdCBpbiB3aGljaCBleGVjdXRpb24gYmVnYW4uCiAgICAg
ICAgIEpTR2xvYmFsT2JqZWN0KiBkeW5hbWljR2xvYmFsT2JqZWN0KCkgY29uc3QgeyByZXR1cm4g
bV9nbG9iYWxPYmplY3Q7IH0KQEAgLTk5LDEyICs5OSwxMSBAQCBuYW1lc3BhY2UgSlNDICB7CiAg
ICAgICAgIC8vIERlZmF1bHQgY29uc3RydWN0b3IgcmVxdWlyZWQgZm9yIGdjYyAzLgogICAgICAg
ICBFeGVjU3RhdGUoKSB7IH0KIAotICAgICAgICBFeGVjU3RhdGUoRXhlY1N0YXRlKiwgUmVnaXN0
ZXJGaWxlKiwgU2NvcGVDaGFpbk5vZGUqLCBSZWdpc3RlciogY2FsbEZyYW1lKTsKKyAgICAgICAg
RXhlY1N0YXRlKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKiwgUmVnaXN0ZXIqIGNhbGxGcmFt
ZSk7CiAKICAgICAgICAgYm9vbCBpc0dsb2JhbE9iamVjdChKU09iamVjdCopIGNvbnN0OwogCiAg
ICAgICAgIEpTR2xvYmFsT2JqZWN0KiBtX2dsb2JhbE9iamVjdDsKLSAgICAgICAgSlNPYmplY3Qq
IG1fZ2xvYmFsVGhpc1ZhbHVlOwogCiAgICAgICAgIEpTVmFsdWUqIG1fZXhjZXB0aW9uOwogI2lm
IEVOQUJMRShDVEkpCkBAIC0xMTQsNyArMTEzLDYgQEAgbmFtZXNwYWNlIEpTQyAgewogCiAgICAg
ICAgIC8vIFRoZXNlIHZhbHVlcyBhcmUgY29udHJvbGxlZCBieSB0aGUgbWFjaGluZS4KICAgICAg
ICAgRXhlY1N0YXRlKiBtX3ByZXY7Ci0gICAgICAgIFJlZ2lzdGVyRmlsZSogbV9yZWdpc3RlckZp
bGU7CiAgICAgICAgIFNjb3BlQ2hhaW5Ob2RlKiBtX3Njb3BlQ2hhaW47CiAgICAgICAgIFJlZ2lz
dGVyKiBtX2NhbGxGcmFtZTsgLy8gVGhlIG1vc3QgcmVjZW50IGNhbGwgZnJhbWUuCiAgICAgfTsK
SW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9KU0dsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSmF2YVNjcmlwdENvcmUva2pzL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMzcwODQp
CisrKyBKYXZhU2NyaXB0Q29yZS9ranMvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMjIsNyArMTIyLDcgQEAgSlNHbG9iYWxPYmplY3Q6On5KU0dsb2JhbE9iamVjdCgpCiAg
ICAgZGVsZXRlIGQoKTsKIH0KIAotdm9pZCBKU0dsb2JhbE9iamVjdDo6aW5pdChKU09iamVjdCog
dGhpc1ZhbHVlKQordm9pZCBKU0dsb2JhbE9iamVjdDo6aW5pdCgpCiB7CiAgICAgQVNTRVJUKEpT
TG9jazo6Y3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSk7CiAKQEAgLTEzOSw3ICsxMzksNyBA
QCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojppbml0KEpTT2JqZWN0KiB0aGlzCiAgICAgZCgpLT5yZWN1
cnNpb24gPSAwOwogICAgIGQoKS0+ZGVidWdnZXIgPSAwOwogCi0gICAgZCgpLT5nbG9iYWxFeGVj
LnNldChuZXcgRXhlY1N0YXRlKHRoaXMsIHRoaXNWYWx1ZSwgZCgpLT5nbG9iYWxTY29wZUNoYWlu
Lm5vZGUoKSkpOworICAgIGQoKS0+Z2xvYmFsRXhlYy5zZXQobmV3IEV4ZWNTdGF0ZSh0aGlzLCBk
KCktPmdsb2JhbFNjb3BlQ2hhaW4ubm9kZSgpKSk7CiAKICAgICBkKCktPnByb2ZpbGVHcm91cCA9
IDA7CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9KU0dsb2JhbE9iamVjdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9KU0dsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAzNzA4
NCkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9KU0dsb2JhbE9iamVjdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xNDYsMTQgKzE0NiwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNHbG9iYWxP
YmplY3QoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQogICAgICAgICAgICAgOiBKU1ZhcmlhYmxl
T2JqZWN0KGdsb2JhbERhdGEtPm51bGxQcm90b1N0cnVjdHVyZUlELCBuZXcgSlNHbG9iYWxPYmpl
Y3REYXRhKHRoaXMsIHRoaXMpKQogICAgICAgICB7Ci0gICAgICAgICAgICBpbml0KHRoaXMpOwor
ICAgICAgICAgICAgaW5pdCgpOwogICAgICAgICB9CiAKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAg
IEpTR2xvYmFsT2JqZWN0KFBhc3NSZWZQdHI8U3RydWN0dXJlSUQ+IHN0cnVjdHVyZSwgSlNHbG9i
YWxPYmplY3REYXRhKiBkYXRhLCBKU09iamVjdCogZ2xvYmFsVGhpc1ZhbHVlKQorICAgICAgICBK
U0dsb2JhbE9iamVjdChQYXNzUmVmUHRyPFN0cnVjdHVyZUlEPiBzdHJ1Y3R1cmUsIEpTR2xvYmFs
T2JqZWN0RGF0YSogZGF0YSkKICAgICAgICAgICAgIDogSlNWYXJpYWJsZU9iamVjdChzdHJ1Y3R1
cmUsIGRhdGEpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGluaXQoZ2xvYmFsVGhpc1ZhbHVlKTsK
KyAgICAgICAgICAgIGluaXQoKTsKICAgICAgICAgfQogCiAgICAgcHVibGljOgpAQCAtMjY4LDgg
KzI2OCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGFkZFN0YXRpY0dsb2JhbHMo
R2xvYmFsUHJvcGVydHlJbmZvKiwgaW50IGNvdW50KTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAg
IC8vIEZJWE1FOiBGb2xkIHRoZXNlIGZ1bmN0aW9ucyBpbnRvIHRoZSBjb25zdHJ1Y3Rvci4KLSAg
ICAgICAgdm9pZCBpbml0KEpTT2JqZWN0KiB0aGlzVmFsdWUpOworICAgICAgICAvLyBGSVhNRTog
Rm9sZCByZXNldCBpbnRvIGluaXQuCisgICAgICAgIHZvaWQgaW5pdCgpOwogICAgICAgICB2b2lk
IHJlc2V0KEpTVmFsdWUqIHByb3RvdHlwZSk7CiAKICAgICAgICAgdm9pZCBzZXRSZWdpc3RlcnMo
UmVnaXN0ZXIqIHJlZ2lzdGVycywgUmVnaXN0ZXIqIHJlZ2lzdGVyQXJyYXksIHNpemVfdCBjb3Vu
dCk7CkluZGV4OiBXZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NoYW5n
ZUxvZwkocmV2aXNpb24gMzcwODQpCisrKyBXZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDE0IEBACisyMDA4LTA5LTI5ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAt
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTIxNAorICAgICAgICAg
IHdvcmsgb24gZ2V0dGluZyByaWQgb2YgRXhlY1N0YXRlCisKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0RPTVdpbmRvd0Jhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3dCYXNl
OjpKU0RPTVdpbmRvd0Jhc2UpOiBSZW1vdmVkIGdsb2JhbFRoaXNWYWx1ZSBhcmd1bWVudAorICAg
ICAgICBmb3IgYmFzZSBjbGFzcyBjb25zdHJ1Y3Rvci4KKwogMjAwOC0wOS0yOSAgS2V2aW4gRGVj
a2VyICA8a2RlY2tlckBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQW5kZXJzIENh
cmxzc29uLgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAkocmV2
aXNpb24gMzcwODQpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE4Myw3ICsxODMsNyBAQCBKU0RPTVdpbmRvd0Jhc2U6OkpTRE9N
V2luZG93QmFzZURhdGE6OkpTCiB9CiAKIEpTRE9NV2luZG93QmFzZTo6SlNET01XaW5kb3dCYXNl
KFBhc3NSZWZQdHI8U3RydWN0dXJlSUQ+IHN0cnVjdHVyZSwgUGFzc1JlZlB0cjxET01XaW5kb3c+
IHdpbmRvdywgSlNET01XaW5kb3dTaGVsbCogc2hlbGwpCi0gICAgOiBKU0dsb2JhbE9iamVjdChz
dHJ1Y3R1cmUsIG5ldyBKU0RPTVdpbmRvd0Jhc2VEYXRhKHdpbmRvdywgdGhpcywgc2hlbGwpLCBz
aGVsbCkKKyAgICA6IEpTR2xvYmFsT2JqZWN0KHN0cnVjdHVyZSwgbmV3IEpTRE9NV2luZG93QmFz
ZURhdGEod2luZG93LCB0aGlzLCBzaGVsbCkpCiB7CiAgICAgLy8gVGltZSBpbiBtaWxsaXNlY29u
ZHMgYmVmb3JlIHRoZSBzY3JpcHQgdGltZW91dCBoYW5kbGVyIGtpY2tzIGluLgogICAgIHNldFRp
bWVvdXRUaW1lKDEwMDAwKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23961</attachid>
            <date>2008-09-30 16:24:15 -0700</date>
            <delta_ts>2008-09-30 16:47:17 -0700</delta_ts>
            <desc>patch that removes m_prev from ExecState</desc>
            <filename>ExecStatePrevPatch.txt</filename>
            <type>text/plain</type>
            <size>6889</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM3MTIzKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzQgQEAKKzIwMDgtMDktMzAgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIC0gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxMjE0CisgICAgICAgICAgd29yayBvbiBnZXR0aW5nIHJpZCBvZiBFeGVjU3RhdGUKKworICAg
ICAgICBSZXBsYWNlZCB0aGUgbV9wcmV2IGZpZWxkIG9mIEV4ZWNTdGF0ZSB3aXRoIGEgYml0IGlu
IHRoZQorICAgICAgICBjYWxsIGZyYW1lIHBvaW50ZXIgdG8gaW5kaWNhdGUgImhvc3QiIGNhbGwg
ZnJhbWVzLgorCisgICAgICAgICogVk0vTWFjaGluZS5jcHA6CisgICAgICAgIChKU0M6Om1ha2VI
b3N0Q2FsbEZyYW1lUG9pbnRlcik6IEFkZGVkLiBTZXRzIGxvdyBiaXQuCisgICAgICAgIChKU0M6
OmlzSG9zdENhbGxGcmFtZSk6IEFkZGVkLiBDaGVja3MgbG93IGJpdC4KKyAgICAgICAgKEpTQzo6
c3RyaXBIb3N0Q2FsbEZyYW1lQml0KTogQWRkZWQuIENsZWFycyBsb3cgYml0LgorICAgICAgICAo
SlNDOjpNYWNoaW5lOjp1bndpbmRDYWxsRnJhbWUpOiBSZXBsYWNlZCBudWxsIGNoZWNrIHRoYXQg
d2FzCisgICAgICAgIGZvcm1lcmx5IHVzZWQgdG8gZGV0ZWN0IGhvc3QgY2FsbCBmcmFtZXMgd2l0
aCBhbiBpc0hvc3RDYWxsRnJhbWUgY2hlY2suCisgICAgICAgIChKU0M6Ok1hY2hpbmU6OmV4ZWN1
dGUpOiBQYXNzIGluIGEgaG9zdCBjYWxsIGZyYW1lIHBvaW50ZXIgcmF0aGVyIHRoYW4KKyAgICAg
ICAgYWx3YXlzIHBhc3NpbmcgMCB3aGVuIHN0YXJ0aW5nIGV4ZWN1dGlvbiBmcm9tIHRoZSBob3N0
LiBUaGlzIGFsbG93cyB1cworICAgICAgICB0byBmb2xsb3cgdGhlIGVudGlyZSBjYWxsIGZyYW1l
IHBvaW50ZXIgY2hhaW4gd2hlbiBkZXNpcmVkLCBvciB0byBzdG9wCisgICAgICAgIGF0IHRoZSBo
b3N0IGNhbGxzIHdoZW4gdGhhdCdzIGRlc2lyZWQuCisgICAgICAgIChKU0M6Ok1hY2hpbmU6OnBy
aXZhdGVFeGVjdXRlKTogUmVwbGFjZWQgbnVsbCBjaGVjayB0aGF0IHdhcworICAgICAgICBmb3Jt
ZXJseSB1c2VkIHRvIGRldGVjdCBob3N0IGNhbGwgZnJhbWVzIHdpdGggYW4gaXNIb3N0Q2FsbEZy
YW1lIGNoZWNrLgorICAgICAgICAoSlNDOjpNYWNoaW5lOjpyZXRyaWV2ZUNhbGxlcik6IERpdHRv
LgorICAgICAgICAoSlNDOjpNYWNoaW5lOjpyZXRyaWV2ZUxhc3RDYWxsZXIpOiBEaXR0by4KKyAg
ICAgICAgKEpTQzo6TWFjaGluZTo6Y2FsbEZyYW1lKTogUmVtb3ZlZCB0aGUgY29kZSB0byB3YWxr
IHVwIG1fcHJldiBwb2ludGVycworICAgICAgICBhbmQgcmVwbGFjZWQgaXQgd2l0aCBjb2RlIHRo
YXQgdXNlcyB0aGUgY2FsbGVyIHBvaW50ZXIgYW5kIHVzZXMgdGhlCisgICAgICAgIHN0cmlwSG9z
dENhbGxGcmFtZUJpdCBmdW5jdGlvbi4KKworICAgICAgICAqIGtqcy9FeGVjU3RhdGUuY3BwOiBS
ZW1vdmVkIG1fcHJldi4KKyAgICAgICAgKiBranMvRXhlY1N0YXRlLmg6IERpdHRvLgorCiAyMDA4
LTA5LTMwICBDYW1lcm9uIFp3YXJpY2ggIDx6d2FyaWNoQGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBHZW9mZiBHYXJlbi4KSW5kZXg6IEphdmFTY3JpcHRDb3JlL1ZNL01hY2hpbmUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL1ZNL01hY2hpbmUuY3BwCShyZXZpc2lv
biAzNzEyMykKKysrIEphdmFTY3JpcHRDb3JlL1ZNL01hY2hpbmUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDUsNiArMTA1LDIzIEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIEluc3RydWN0aW9uKiB2
UENGb3IKIAogI2VuZGlmIC8vICNFTkFCTEUoQ1RJKQogCitzdGF0aWMgY29uc3QgaW50cHRyX3Qg
SG9zdENhbGxGcmFtZU1hc2sgPSAxOworCitzdGF0aWMgaW5saW5lIFJlZ2lzdGVyKiBtYWtlSG9z
dENhbGxGcmFtZVBvaW50ZXIoUmVnaXN0ZXIqIGNhbGxGcmFtZSkKK3sKKyAgICByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDxSZWdpc3Rlcio+KHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGNhbGxG
cmFtZSkgfCBIb3N0Q2FsbEZyYW1lTWFzayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0hv
c3RDYWxsRnJhbWUoUmVnaXN0ZXIqIGNhbGxGcmFtZSkKK3sKKyAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxpbnRwdHJfdD4oY2FsbEZyYW1lKSAmIEhvc3RDYWxsRnJhbWVNYXNrOworfQorCitz
dGF0aWMgaW5saW5lIFJlZ2lzdGVyKiBzdHJpcEhvc3RDYWxsRnJhbWVCaXQoUmVnaXN0ZXIqIGNh
bGxGcmFtZSkKK3sKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxSZWdpc3Rlcio+KHJlaW50
ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGNhbGxGcmFtZSkgJiB+SG9zdENhbGxGcmFtZU1hc2spOwor
fQorCiAvLyBSZXR1cm5zIHRoZSBkZXB0aCBvZiB0aGUgc2NvcGUgY2hhaW4gd2l0aGluIGEgZ2l2
ZW4gY2FsbCBmcmFtZS4KIHN0YXRpYyBpbnQgZGVwdGgoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFNj
b3BlQ2hhaW4mIHNjKQogewpAQCAtNzkyLDcgKzgwOSw3IEBAIE5FVkVSX0lOTElORSBib29sIE1h
Y2hpbmU6OnVud2luZENhbGxGcmEKICAgICAKICAgICB2b2lkKiByZXR1cm5QQyA9IHJbUmVnaXN0
ZXJGaWxlOjpSZXR1cm5QQ10udigpOwogICAgIHIgPSByW1JlZ2lzdGVyRmlsZTo6Q2FsbGVyUmVn
aXN0ZXJzXS5yKCk7Ci0gICAgaWYgKCFyKQorICAgIGlmIChpc0hvc3RDYWxsRnJhbWUocikpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGV4ZWMtPm1fY2FsbEZyYW1lID0gcjsKQEAgLTg5
Niw3ICs5MTMsNyBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpleGVjdXRlKFByb2dyYW1Ob2RlKiBwCiAK
ICAgICBSZWdpc3RlciogciA9IG1fcmVnaXN0ZXJGaWxlLmJhc2UoKSArIG9sZFNpemUgKyBjb2Rl
QmxvY2stPm51bVBhcmFtZXRlcnMgKyBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemU7
CiAgICAgcltjb2RlQmxvY2stPnRoaXNSZWdpc3Rlcl0gPSB0aGlzT2JqOwotICAgIGluaXRpYWxp
emVDYWxsRnJhbWUociwgY29kZUJsb2NrLCAwLCBzY29wZUNoYWluLCAwLCAwLCAwLCAwKTsKKyAg
ICBpbml0aWFsaXplQ2FsbEZyYW1lKHIsIGNvZGVCbG9jaywgMCwgc2NvcGVDaGFpbiwgbWFrZUhv
c3RDYWxsRnJhbWVQb2ludGVyKDApLCAwLCAwLCAwKTsKIAogICAgIGlmIChjb2RlQmxvY2stPm5l
ZWRzRnVsbFNjb3BlQ2hhaW4pCiAgICAgICAgIHNjb3BlQ2hhaW4gPSBzY29wZUNoYWluLT5jb3B5
KCk7CkBAIC05NjEsNyArOTc4LDcgQEAgSlNWYWx1ZSogTWFjaGluZTo6ZXhlY3V0ZShGdW5jdGlv
bkJvZHlObwogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAgICAgfQogICAgIC8vIGEgMCBjb2Rl
QmxvY2sgaW5kaWNhdGVzIGEgYnVpbHQtaW4gY2FsbGVyCi0gICAgaW5pdGlhbGl6ZUNhbGxGcmFt
ZShyLCBjb2RlQmxvY2ssIDAsIHNjb3BlQ2hhaW4sIDAsIDAsIGFyZ2MsIGZ1bmN0aW9uKTsKKyAg
ICBpbml0aWFsaXplQ2FsbEZyYW1lKHIsIGNvZGVCbG9jaywgMCwgc2NvcGVDaGFpbiwgbWFrZUhv
c3RDYWxsRnJhbWVQb2ludGVyKGV4ZWMtPm1fY2FsbEZyYW1lKSwgMCwgYXJnYywgZnVuY3Rpb24p
OwogCiAgICAgRXhlY1N0YXRlIG5ld0V4ZWMoZXhlYywgcik7CiAKQEAgLTEwNDQsNyArMTA2MSw3
IEBAIEpTVmFsdWUqIE1hY2hpbmU6OmV4ZWN1dGUoRXZhbE5vZGUqIGV2YWwKIAogICAgIC8vIGEg
MCBjb2RlQmxvY2sgaW5kaWNhdGVzIGEgYnVpbHQtaW4gY2FsbGVyCiAgICAgcltjb2RlQmxvY2st
PnRoaXNSZWdpc3Rlcl0gPSB0aGlzT2JqOwotICAgIGluaXRpYWxpemVDYWxsRnJhbWUociwgY29k
ZUJsb2NrLCAwLCBzY29wZUNoYWluLCAwLCAwLCAwLCAwKTsKKyAgICBpbml0aWFsaXplQ2FsbEZy
YW1lKHIsIGNvZGVCbG9jaywgMCwgc2NvcGVDaGFpbiwgbWFrZUhvc3RDYWxsRnJhbWVQb2ludGVy
KGV4ZWMtPm1fY2FsbEZyYW1lKSwgMCwgMCwgMCk7CiAKICAgICBpZiAoY29kZUJsb2NrLT5uZWVk
c0Z1bGxTY29wZUNoYWluKQogICAgICAgICBzY29wZUNoYWluID0gc2NvcGVDaGFpbi0+Y29weSgp
OwpAQCAtMzM2Miw3ICszMzc5LDcgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUo
RXhlY3V0aQogICAgICAgICByID0gcltSZWdpc3RlckZpbGU6OkNhbGxlclJlZ2lzdGVyc10ucigp
OwogICAgICAgICBleGVjLT5tX2NhbGxGcmFtZSA9IHI7CiAgICAgICAgIAotICAgICAgICBpZiAo
IXIpCisgICAgICAgIGlmIChpc0hvc3RDYWxsRnJhbWUocikpCiAgICAgICAgICAgICByZXR1cm4g
cmV0dXJuVmFsdWU7CiAKICAgICAgICAgcltkc3RdID0gcmV0dXJuVmFsdWU7CkBAIC0zODUzLDcg
KzM4NzAsNyBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpyZXRyaWV2ZUNhbGxlcihFeGVjU3RhCiAgICAg
ICAgIHJldHVybiBqc051bGwoKTsKIAogICAgIFJlZ2lzdGVyKiBjYWxsZXJSID0gcltSZWdpc3Rl
ckZpbGU6OkNhbGxlclJlZ2lzdGVyc10ucigpOwotICAgIGlmICghY2FsbGVyUikKKyAgICBpZiAo
aXNIb3N0Q2FsbEZyYW1lKGNhbGxlclIpKQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAKICAg
ICBKU1ZhbHVlKiBjYWxsZXIgPSBjYWxsZXJSW1JlZ2lzdGVyRmlsZTo6Q2FsbGVlXS5qc1ZhbHVl
KGV4ZWMpOwpAQCAtMzg3MSw3ICszODg4LDcgQEAgdm9pZCBNYWNoaW5lOjpyZXRyaWV2ZUxhc3RD
YWxsZXIoRXhlY1N0YQogCiAgICAgUmVnaXN0ZXIqIHIgPSBleGVjLT5tX2NhbGxGcmFtZTsKICAg
ICBSZWdpc3RlciogY2FsbGVyUiA9IHJbUmVnaXN0ZXJGaWxlOjpDYWxsZXJSZWdpc3RlcnNdLnIo
KTsKLSAgICBpZiAoIWNhbGxlclIpCisgICAgaWYgKGlzSG9zdENhbGxGcmFtZShjYWxsZXJSKSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBjb2Rl
QmxvY2soY2FsbGVyUik7CkBAIC0zODkyLDExICszOTA5LDkgQEAgdm9pZCBNYWNoaW5lOjpyZXRy
aWV2ZUxhc3RDYWxsZXIoRXhlY1N0YQogCiBSZWdpc3RlciogTWFjaGluZTo6Y2FsbEZyYW1lKEV4
ZWNTdGF0ZSogZXhlYywgSW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rpb24pIGNvbnN0CiB7Ci0gICAg
Zm9yICg7IGV4ZWM7IGV4ZWMgPSBleGVjLT5tX3ByZXYpCi0gICAgICAgIGZvciAoUmVnaXN0ZXIq
IHIgPSBleGVjLT5tX2NhbGxGcmFtZTsgcjsgciA9IHJbUmVnaXN0ZXJGaWxlOjpDYWxsZXJSZWdp
c3RlcnNdLnIoKSkKLSAgICAgICAgICAgIGlmIChyW1JlZ2lzdGVyRmlsZTo6Q2FsbGVlXS5qc1Zh
bHVlKGV4ZWMpID09IGZ1bmN0aW9uKQotICAgICAgICAgICAgICAgIHJldHVybiByOwotICAgICAg
ICAgICAgICAgIAorICAgIGZvciAoUmVnaXN0ZXIqIHIgPSBleGVjLT5tX2NhbGxGcmFtZTsgcjsg
ciA9IHN0cmlwSG9zdENhbGxGcmFtZUJpdChyW1JlZ2lzdGVyRmlsZTo6Q2FsbGVyUmVnaXN0ZXJz
XS5yKCkpKQorICAgICAgICBpZiAocltSZWdpc3RlckZpbGU6OkNhbGxlZV0uZ2V0SlNWYWx1ZSgp
ID09IGZ1bmN0aW9uKQorICAgICAgICAgICAgcmV0dXJuIHI7CiAgICAgcmV0dXJuIDA7CiB9CiAK
SW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9FeGVjU3RhdGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEph
dmFTY3JpcHRDb3JlL2tqcy9FeGVjU3RhdGUuY3BwCShyZXZpc2lvbiAzNzEyMykKKysrIEphdmFT
Y3JpcHRDb3JlL2tqcy9FeGVjU3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw2
IEBAIEV4ZWNTdGF0ZTo6RXhlY1N0YXRlKEpTR2xvYmFsT2JqZWN0KiBnbG8KICAgICA6IG1fZ2xv
YmFsT2JqZWN0KGdsb2JhbE9iamVjdCkKICAgICAsIG1fZXhjZXB0aW9uKDApCiAgICAgLCBtX2ds
b2JhbERhdGEoZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCkpCi0gICAgLCBtX3ByZXYoMCkKICAg
ICAsIG1fY2FsbEZyYW1lKGNhbGxGcmFtZSkKIHsKIH0KQEAgLTQyLDcgKzQxLDYgQEAgRXhlY1N0
YXRlOjpFeGVjU3RhdGUoRXhlY1N0YXRlKiBleGVjLCBSZQogICAgIDogbV9nbG9iYWxPYmplY3Qo
ZXhlYy0+bV9nbG9iYWxPYmplY3QpCiAgICAgLCBtX2V4Y2VwdGlvbigwKQogICAgICwgbV9nbG9i
YWxEYXRhKGV4ZWMtPm1fZ2xvYmFsRGF0YSkKLSAgICAsIG1fcHJldihleGVjKQogICAgICwgbV9j
YWxsRnJhbWUoY2FsbEZyYW1lKQogewogICAgIEFTU0VSVCghZXhlYy0+bV9leGNlcHRpb24pOwpJ
bmRleDogSmF2YVNjcmlwdENvcmUva2pzL0V4ZWNTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL2tqcy9FeGVjU3RhdGUuaAkocmV2aXNpb24gMzcxMjMpCisrKyBKYXZhU2NyaXB0
Q29yZS9ranMvRXhlY1N0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw4ICsxMDAsNiBAQCBu
YW1lc3BhY2UgSlNDICB7CiAjZW5kaWYKICAgICAgICAgSlNHbG9iYWxEYXRhKiBtX2dsb2JhbERh
dGE7CiAKLSAgICAgICAgLy8gVGhlc2UgdmFsdWVzIGFyZSBjb250cm9sbGVkIGJ5IHRoZSBtYWNo
aW5lLgotICAgICAgICBFeGVjU3RhdGUqIG1fcHJldjsKICAgICAgICAgUmVnaXN0ZXIqIG1fY2Fs
bEZyYW1lOyAvLyBUaGUgbW9zdCByZWNlbnQgY2FsbCBmcmFtZS4KICAgICB9OwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23994</attachid>
            <date>2008-10-01 14:04:01 -0700</date>
            <delta_ts>2008-10-01 18:30:56 -0700</delta_ts>
            <desc>patch to remove some uses of dynamicGlobalObject</desc>
            <filename>DynGlobObjPatch1.txt</filename>
            <type>text/plain</type>
            <size>11487</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM3MTU1KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNDQgQEAKKzIwMDgtMDktMzAgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIC0gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxMjE0CisgICAgICAgICAgd29yayBvbiBnZXR0aW5nIHJpZCBvZiBFeGVjU3RhdGUKKworICAg
ICAgICBFbGltaW5hdGUgc29tZSB1bm5lZWRlZCB1c2VzIG9mIGR5bmFtaWNHbG9iYWxPYmplY3Qu
CisKKyAgICAgICAgKiBBUEkvSlNDbGFzc1JlZi5jcHA6CisgICAgICAgIChPcGFxdWVKU0NsYXNz
Ojpjb250ZXh0RGF0YSk6IENoYW5nZWQgdG8gdXNlIGEgbWFwIGluIHRoZSBnbG9iYWwgZGF0YSBp
bnN0ZWFkCisgICAgICAgIG9mIG9uIHRoZSBnbG9iYWwgb2JqZWN0LiBBbHNvIGZpeGVkIHRvIHVz
ZSBvbmx5IGEgc2luZ2xlIGhhc2ggdGFibGUgbG9va3VwLgorCisgICAgICAgICogQVBJL0pTT2Jq
ZWN0UmVmLmNwcDoKKyAgICAgICAgKEpTT2JqZWN0TWFrZUNvbnN0cnVjdG9yKTogVXNlIGxleGlj
YWxHbG9iYWxPYmplY3QgcmF0aGVyIHRoYW4gZHluYW1pY0dsb2JhbE9iamVjdAorICAgICAgICB0
byBnZXQgdGhlIG9iamVjdCBwcm90b3R5cGUuCisKKyAgICAgICAgKiBranMvQXJyYXlQcm90b3R5
cGUuY3BwOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1RvU3RyaW5nKTogVXNlIGFycmF5
VmlzaXRlZEVsZW1lbnRzIHNldCBpbiBnbG9iYWwgZGF0YSByYXRoZXIKKyAgICAgICAgdGhhbiBp
biB0aGUgZ2xvYmFsIG9iamVjdC4KKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNUb0xvY2Fs
ZVN0cmluZyk6IERpdHRvLgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY0pvaW4pOiBEaXR0
by4KKworICAgICAgICAqIGtqcy9KU0dsb2JhbERhdGEuY3BwOgorICAgICAgICAoSlNDOjpKU0ds
b2JhbERhdGE6OkpTR2xvYmFsRGF0YSk6IERvbid0IGluaXRpYWxpemUgb3BhcXVlSlNDbGFzc0Rh
dGEsIHNpbmNlCisgICAgICAgIGl0J3Mgbm8gbG9uZ2VyIGEgcG9pbnRlci4KKyAgICAgICAgKEpT
Qzo6SlNHbG9iYWxEYXRhOjp+SlNHbG9iYWxEYXRhKTogV2Ugc3RpbGwgbmVlZCB0byBkZWxldGUg
YWxsIHRoZSB2YWx1ZXMsIGJ1dAorICAgICAgICB3ZSBkb24ndCBuZWVkIHRvIGRlbGV0ZSB0aGUg
bWFwIHNpbmNlIGl0J3Mgbm8gbG9uZ2VyIGEgcG9pbnRlci4KKworICAgICAgICAqIGtqcy9KU0ds
b2JhbERhdGEuaDogTWFkZSBvcGFxdWVKU0NsYXNzRGF0YSBhIG1hcCBpbnN0ZWFkIG9mIGEgcG9p
bnRlciB0byBhIG1hcC4KKyAgICAgICAgQWxzbyBhZGRlZCBhcnJheVZpc2l0ZWRFbGVtZW50cy4K
KworICAgICAgICAqIGtqcy9KU0dsb2JhbE9iamVjdC5oOiBSZW1vdmVkIGFycmF5VmlzaXRlZEVs
ZW1lbnRzLgorCisgICAgICAgICoga2pzL1NoZWxsLmNwcDoKKyAgICAgICAgKGZ1bmN0aW9uUnVu
KTogVXNlIGxleGljYWxHbG9iYWxPYmplY3QgaW5zdGVhZCBvZiBkeW5hbWljR2xvYmFsT2JqZWN0
LgorICAgICAgICAoZnVuY3Rpb25Mb2FkKTogRGl0dG8uCisKIDIwMDgtMTAtMDEgIEtldmluIE1j
Q3VsbG91Z2ggIDxrbWNjdWxsb3VnaEBhcHBsZS5jb20+CiAKLSAgICAgICAgUnViYmVyc3RhbXBl
ZCBieSBHZW9mZiAuCisgICAgICAgIFJ1YmJlcnN0YW1wZWQgYnkgR2VvZmYgR2FyZW4uCiAKICAg
ICAgICAgUmVtb3ZlIEJyZWFrcG9pbnRDaGVja1N0YXRlbWVudCBiZWNhdXNlIGl0J3Mgbm90IHVz
ZWQgYW55bW9yZS4KICAgICAgICAgTm8gZWZmZWN0IG9uIHN1bnNwaWRlciBvciB0aGUganNjIHRl
c3RzLgpJbmRleDogSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2xhc3NSZWYuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEphdmFTY3JpcHRDb3JlL0FQSS9KU0NsYXNzUmVmLmNwcAkocmV2aXNpb24gMzcxNTUpCisr
KyBKYXZhU2NyaXB0Q29yZS9BUEkvSlNDbGFzc1JlZi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4
NSwxMSArMTg1LDEwIEBAIE9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YTo6fk9wYXF1ZUpTQ2xhc3MK
IAogT3BhcXVlSlNDbGFzc0NvbnRleHREYXRhJiBPcGFxdWVKU0NsYXNzOjpjb250ZXh0RGF0YShF
eGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgSGFzaE1hcDxPcGFxdWVKU0NsYXNzKiwgT3BhcXVlSlND
bGFzc0NvbnRleHREYXRhKj4qIGNvbnRleHREYXRhTWFwID0gZXhlYy0+Z2xvYmFsRGF0YSgpLm9w
YXF1ZUpTQ2xhc3NEYXRhOwotICAgIEhhc2hNYXA8T3BhcXVlSlNDbGFzcyosIE9wYXF1ZUpTQ2xh
c3NDb250ZXh0RGF0YSo+OjppdGVyYXRvciBpdGVyID0gY29udGV4dERhdGFNYXAtPmZpbmQodGhp
cyk7Ci0gICAgaWYgKGl0ZXIgIT0gY29udGV4dERhdGFNYXAtPmVuZCgpKQotICAgICAgICByZXR1
cm4gKml0ZXItPnNlY29uZDsKLSAgICByZXR1cm4gKmNvbnRleHREYXRhTWFwLT5hZGQodGhpcywg
bmV3IE9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YSh0aGlzKSkuZmlyc3QtPnNlY29uZDsKKyAgICBP
cGFxdWVKU0NsYXNzQ29udGV4dERhdGEqJiBjb250ZXh0RGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEo
KS5vcGFxdWVKU0NsYXNzRGF0YS5hZGQodGhpcywgMCkuZmlyc3QtPnNlY29uZDsKKyAgICBpZiAo
IWNvbnRleHREYXRhKQorICAgICAgICBjb250ZXh0RGF0YSA9IG5ldyBPcGFxdWVKU0NsYXNzQ29u
dGV4dERhdGEodGhpcyk7CisgICAgcmV0dXJuICpjb250ZXh0RGF0YTsKIH0KIAogVVN0cmluZyBP
cGFxdWVKU0NsYXNzOjpjbGFzc05hbWUoKQpJbmRleDogSmF2YVNjcmlwdENvcmUvQVBJL0pTT2Jq
ZWN0UmVmLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9BUEkvSlNPYmplY3RSZWYu
Y3BwCShyZXZpc2lvbiAzNzE1NSkKKysrIEphdmFTY3JpcHRDb3JlL0FQSS9KU09iamVjdFJlZi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw3ICsxMDUsNyBAQCBKU09iamVjdFJlZiBKU09iamVj
dE1ha2VDb25zdHJ1Y3RvcihKU0NvCiAKICAgICBKU1ZhbHVlKiBqc1Byb3RvdHlwZSA9IGpzQ2xh
c3MgCiAgICAgICAgID8ganNDbGFzcy0+cHJvdG90eXBlKGV4ZWMpCi0gICAgICAgIDogZXhlYy0+
ZHluYW1pY0dsb2JhbE9iamVjdCgpLT5vYmplY3RQcm90b3R5cGUoKTsKKyAgICAgICAgOiBleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm9iamVjdFByb3RvdHlwZSgpOwogICAgIAogICAgIEpT
Q2FsbGJhY2tDb25zdHJ1Y3RvciogY29uc3RydWN0b3IgPSBuZXcgKGV4ZWMpIEpTQ2FsbGJhY2tD
b25zdHJ1Y3RvcihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmNhbGxiYWNrQ29uc3RydWN0
b3JTdHJ1Y3R1cmUoKSwganNDbGFzcywgY2FsbEFzQ29uc3RydWN0b3IpOwogICAgIGNvbnN0cnVj
dG9yLT5wdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwganNQcm90b3R5
cGUsIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKSW5kZXg6IEphdmFTY3JpcHRD
b3JlL2tqcy9BcnJheVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUv
a2pzL0FycmF5UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMzcxNTUpCisrKyBKYXZhU2NyaXB0Q29y
ZS9ranMvQXJyYXlQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsMTUgKzEyNSwx
NSBAQCBKU1ZhbHVlKiBhcnJheVByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0CiAgICAgICAgIHJl
dHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAgICAgSlNPYmplY3QqIHRoaXNPYmog
PSBzdGF0aWNfY2FzdDxKU0FycmF5Kj4odGhpc1ZhbHVlKTsKIAotICAgIEhhc2hTZXQ8SlNPYmpl
Y3QqPiYgYXJyYXlWaXNpdGVkRWxlbWVudHMgPSBleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCkt
PmFycmF5VmlzaXRlZEVsZW1lbnRzKCk7CisgICAgSGFzaFNldDxKU09iamVjdCo+JiBhcnJheVZp
c2l0ZWRFbGVtZW50cyA9IGV4ZWMtPmdsb2JhbERhdGEoKS5hcnJheVZpc2l0ZWRFbGVtZW50czsK
ICAgICBpZiAoYXJyYXlWaXNpdGVkRWxlbWVudHMuc2l6ZSgpID4gTWF4UmVlbnRyeURlcHRoKQog
ICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBSYW5nZUVycm9yLCAiTWF4aW11bSBjYWxs
IHN0YWNrIHNpemUgZXhjZWVkZWQuIik7CiAKICAgICBib29sIGFscmVhZHlWaXNpdGVkID0gIWFy
cmF5VmlzaXRlZEVsZW1lbnRzLmFkZCh0aGlzT2JqKS5zZWNvbmQ7Ci0gICAgVmVjdG9yPFVDaGFy
LCAyNTY+IHN0ckJ1ZmZlcjsKICAgICBpZiAoYWxyZWFkeVZpc2l0ZWQpCiAgICAgICAgIHJldHVy
biBqc0VtcHR5U3RyaW5nKGV4ZWMpOyAvLyByZXR1cm4gYW4gZW1wdHkgc3RyaW5nLCBhdm9pZGlu
ZyBpbmZpbml0ZSByZWN1cnNpb24uCiAKKyAgICBWZWN0b3I8VUNoYXIsIDI1Nj4gc3RyQnVmZmVy
OwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRoaXNPYmotPmdldChleGVjLCBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkubGVuZ3RoKS0+dG9VSW50MzIoZXhlYyk7CiAgICAgZm9yICh1bnNpZ25lZCBrID0g
MDsgayA8IGxlbmd0aDsgaysrKSB7CiAgICAgICAgIGlmIChrID49IDEpCkBAIC0xNTksNyArMTU5
LDcgQEAgSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdAogICAgICAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICBicmVhazsKICAgICB9Ci0gICAg
ZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpLT5hcnJheVZpc2l0ZWRFbGVtZW50cygpLnJlbW92
ZSh0aGlzT2JqKTsKKyAgICBhcnJheVZpc2l0ZWRFbGVtZW50cy5yZW1vdmUodGhpc09iaik7CiAg
ICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIFVTdHJpbmcoc3RyQnVmZmVyLmRhdGEoKSwgc3RyQnVm
ZmVyLmRhdGEoKSA/IHN0ckJ1ZmZlci5zaXplKCkgOiAwKSk7CiB9CiAKQEAgLTE2OSwxNSArMTY5
LDE1IEBAIEpTVmFsdWUqIGFycmF5UHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcoRXgKICAgICAgICAg
cmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKICAgICBKU09iamVjdCogdGhpc09i
aiA9IHN0YXRpY19jYXN0PEpTQXJyYXkqPih0aGlzVmFsdWUpOwogCi0gICAgSGFzaFNldDxKU09i
amVjdCo+JiBhcnJheVZpc2l0ZWRFbGVtZW50cyA9IGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3Qo
KS0+YXJyYXlWaXNpdGVkRWxlbWVudHMoKTsKKyAgICBIYXNoU2V0PEpTT2JqZWN0Kj4mIGFycmF5
VmlzaXRlZEVsZW1lbnRzID0gZXhlYy0+Z2xvYmFsRGF0YSgpLmFycmF5VmlzaXRlZEVsZW1lbnRz
OwogICAgIGlmIChhcnJheVZpc2l0ZWRFbGVtZW50cy5zaXplKCkgPiBNYXhSZWVudHJ5RGVwdGgp
CiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFJhbmdlRXJyb3IsICJNYXhpbXVtIGNh
bGwgc3RhY2sgc2l6ZSBleGNlZWRlZC4iKTsKIAogICAgIGJvb2wgYWxyZWFkeVZpc2l0ZWQgPSAh
YXJyYXlWaXNpdGVkRWxlbWVudHMuYWRkKHRoaXNPYmopLnNlY29uZDsKLSAgICBWZWN0b3I8VUNo
YXIsIDI1Nj4gc3RyQnVmZmVyOwogICAgIGlmIChhbHJlYWR5VmlzaXRlZCkKICAgICAgICAgcmV0
dXJuIGpzRW1wdHlTdHJpbmcoZXhlYyk7IC8vIHJldHVybiBhbiBlbXB0eSBzdHJpbmcsIGF2b2Rp
bmcgaW5maW5pdGUgcmVjdXJzaW9uLgogCisgICAgVmVjdG9yPFVDaGFyLCAyNTY+IHN0ckJ1ZmZl
cjsKICAgICB1bnNpZ25lZCBsZW5ndGggPSB0aGlzT2JqLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmxlbmd0aCktPnRvVUludDMyKGV4ZWMpOwogICAgIGZvciAodW5zaWduZWQgayA9
IDA7IGsgPCBsZW5ndGg7IGsrKykgewogICAgICAgICBpZiAoayA+PSAxKQpAQCAtMjExLDcgKzIx
MSw3IEBAIEpTVmFsdWUqIGFycmF5UHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcoRXgKICAgICAgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQotICAg
IGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKS0+YXJyYXlWaXNpdGVkRWxlbWVudHMoKS5yZW1v
dmUodGhpc09iaik7CisgICAgYXJyYXlWaXNpdGVkRWxlbWVudHMucmVtb3ZlKHRoaXNPYmopOwog
ICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBVU3RyaW5nKHN0ckJ1ZmZlci5kYXRhKCksIHN0ckJ1
ZmZlci5kYXRhKCkgPyBzdHJCdWZmZXIuc2l6ZSgpIDogMCkpOwogfQogCkBAIC0yMTksMTUgKzIx
OSwxNiBAQCBKU1ZhbHVlKiBhcnJheVByb3RvRnVuY0pvaW4oRXhlY1N0YXRlKiBlCiB7CiAgICAg
SlNPYmplY3QqIHRoaXNPYmogPSB0aGlzVmFsdWUtPnRvVGhpc09iamVjdChleGVjKTsKIAotICAg
IEhhc2hTZXQ8SlNPYmplY3QqPiYgYXJyYXlWaXNpdGVkRWxlbWVudHMgPSBleGVjLT5keW5hbWlj
R2xvYmFsT2JqZWN0KCktPmFycmF5VmlzaXRlZEVsZW1lbnRzKCk7CisgICAgSGFzaFNldDxKU09i
amVjdCo+JiBhcnJheVZpc2l0ZWRFbGVtZW50cyA9IGV4ZWMtPmdsb2JhbERhdGEoKS5hcnJheVZp
c2l0ZWRFbGVtZW50czsKICAgICBpZiAoYXJyYXlWaXNpdGVkRWxlbWVudHMuc2l6ZSgpID4gTWF4
UmVlbnRyeURlcHRoKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBSYW5nZUVycm9y
LCAiTWF4aW11bSBjYWxsIHN0YWNrIHNpemUgZXhjZWVkZWQuIik7CiAKICAgICBib29sIGFscmVh
ZHlWaXNpdGVkID0gIWFycmF5VmlzaXRlZEVsZW1lbnRzLmFkZCh0aGlzT2JqKS5zZWNvbmQ7Ci0g
ICAgVmVjdG9yPFVDaGFyLCAyNTY+IHN0ckJ1ZmZlcjsKICAgICBpZiAoYWxyZWFkeVZpc2l0ZWQp
CiAgICAgICAgIHJldHVybiBqc0VtcHR5U3RyaW5nKGV4ZWMpOyAvLyByZXR1cm4gYW4gZW1wdHkg
c3RyaW5nLCBhdm9kaW5nIGluZmluaXRlIHJlY3Vyc2lvbi4KIAorICAgIFZlY3RvcjxVQ2hhciwg
MjU2PiBzdHJCdWZmZXI7CisKICAgICBVQ2hhciBjb21tYSA9ICcsJzsKICAgICBVU3RyaW5nIHNl
cGFyYXRvciA9IGFyZ3MuYXQoZXhlYywgMCktPmlzVW5kZWZpbmVkKCkgPyBVU3RyaW5nKCZjb21t
YSwgMSkgOiBhcmdzLmF0KGV4ZWMsIDApLT50b1N0cmluZyhleGVjKTsKIApAQCAtMjU2LDcgKzI1
Nyw3IEBAIEpTVmFsdWUqIGFycmF5UHJvdG9GdW5jSm9pbihFeGVjU3RhdGUqIGUKICAgICAgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQotICAg
IGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKS0+YXJyYXlWaXNpdGVkRWxlbWVudHMoKS5yZW1v
dmUodGhpc09iaik7CisgICAgYXJyYXlWaXNpdGVkRWxlbWVudHMucmVtb3ZlKHRoaXNPYmopOwog
ICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBVU3RyaW5nKHN0ckJ1ZmZlci5kYXRhKCksIHN0ckJ1
ZmZlci5kYXRhKCkgPyBzdHJCdWZmZXIuc2l6ZSgpIDogMCkpOwogfQogCkluZGV4OiBKYXZhU2Ny
aXB0Q29yZS9ranMvSlNHbG9iYWxEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS9ranMvSlNHbG9iYWxEYXRhLmNwcAkocmV2aXNpb24gMzcxNTUpCisrKyBKYXZhU2NyaXB0Q29y
ZS9ranMvSlNHbG9iYWxEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODIsNyArODIsNiBAQCBK
U0dsb2JhbERhdGE6OkpTR2xvYmFsRGF0YShib29sIGlzU2hhcmVkCiAgICAgLCBpZGVudGlmaWVy
VGFibGUoY3JlYXRlSWRlbnRpZmllclRhYmxlKCkpCiAgICAgLCBwcm9wZXJ0eU5hbWVzKG5ldyBD
b21tb25JZGVudGlmaWVycyh0aGlzKSkKICAgICAsIGVtcHR5TGlzdChuZXcgQXJnTGlzdCkKLSAg
ICAsIG9wYXF1ZUpTQ2xhc3NEYXRhKG5ldyBIYXNoTWFwPE9wYXF1ZUpTQ2xhc3MqLCBPcGFxdWVK
U0NsYXNzQ29udGV4dERhdGEqPikKICAgICAsIG5ld1BhcnNlck9iamVjdHMoMCkKICAgICAsIHBh
cnNlck9iamVjdEV4dHJhUmVmQ291bnRzKDApCiAgICAgLCBsZXhlcihuZXcgTGV4ZXIodGhpcykp
CkBAIC0xMjIsOCArMTIxLDcgQEAgSlNHbG9iYWxEYXRhOjp+SlNHbG9iYWxEYXRhKCkKICAgICBk
ZWxldGUgcGFyc2VyOwogICAgIGRlbGV0ZSBsZXhlcjsKIAotICAgIGRlbGV0ZUFsbFZhbHVlcygq
b3BhcXVlSlNDbGFzc0RhdGEpOwotICAgIGRlbGV0ZSBvcGFxdWVKU0NsYXNzRGF0YTsKKyAgICBk
ZWxldGVBbGxWYWx1ZXMob3BhcXVlSlNDbGFzc0RhdGEpOwogCiAgICAgZGVsZXRlIGVtcHR5TGlz
dDsKIApJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL0pTR2xvYmFsRGF0YS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEphdmFTY3JpcHRDb3JlL2tqcy9KU0dsb2JhbERhdGEuaAkocmV2aXNpb24gMzcxNTUpCisr
KyBKYXZhU2NyaXB0Q29yZS9ranMvSlNHbG9iYWxEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2
LDYgKzQ2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgSGVhcDsKICAgICBjbGFzcyBJ
ZGVudGlmaWVyVGFibGU7CiAgICAgY2xhc3MgSlNHbG9iYWxPYmplY3Q7CisgICAgY2xhc3MgSlNP
YmplY3Q7CiAgICAgY2xhc3MgTGV4ZXI7CiAgICAgY2xhc3MgTWFjaGluZTsKICAgICBjbGFzcyBQ
YXJzZXI7CkBAIC04Myw3ICs4NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIFNtYWxs
U3RyaW5ncyBzbWFsbFN0cmluZ3M7CiAgICAgICAgIAotICAgICAgICBIYXNoTWFwPE9wYXF1ZUpT
Q2xhc3MqLCBPcGFxdWVKU0NsYXNzQ29udGV4dERhdGEqPiogb3BhcXVlSlNDbGFzc0RhdGE7Cisg
ICAgICAgIEhhc2hNYXA8T3BhcXVlSlNDbGFzcyosIE9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YSo+
IG9wYXF1ZUpTQ2xhc3NEYXRhOwogCiAgICAgICAgIEhhc2hTZXQ8UGFyc2VyUmVmQ291bnRlZCo+
KiBuZXdQYXJzZXJPYmplY3RzOwogICAgICAgICBIYXNoQ291bnRlZFNldDxQYXJzZXJSZWZDb3Vu
dGVkKj4qIHBhcnNlck9iamVjdEV4dHJhUmVmQ291bnRzOwpAQCAtOTUsNiArOTYsOCBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogICAgICAgICBib29sIGlzU2hhcmVkSW5zdGFuY2U7CiAKKyAgICAgICAg
SGFzaFNldDxKU09iamVjdCo+IGFycmF5VmlzaXRlZEVsZW1lbnRzOworCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgSlNHbG9iYWxEYXRhKGJvb2wgaXNTaGFyZWQgPSBmYWxzZSk7CiAKSW5kZXg6IEph
dmFTY3JpcHRDb3JlL2tqcy9KU0dsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3Jp
cHRDb3JlL2tqcy9KU0dsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAzNzE1NSkKKysrIEphdmFTY3Jp
cHRDb3JlL2tqcy9KU0dsb2JhbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzgsOCArMTM4
LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBSZWZQdHI8SlNHbG9iYWxEYXRhPiBn
bG9iYWxEYXRhOwogCiAgICAgICAgICAgICBIYXNoU2V0PFByb2dyYW1Db2RlQmxvY2sqPiBjb2Rl
QmxvY2tzOwotCi0gICAgICAgICAgICBPd25QdHI8SGFzaFNldDxKU09iamVjdCo+ID4gYXJyYXlW
aXNpdGVkRWxlbWVudHM7IC8vIEdsb2JhbCBkYXRhIHNoYXJlZCBieSBhcnJheSBwcm90b3R5cGUg
ZnVuY3Rpb25zLgogICAgICAgICB9OwogCiAgICAgcHVibGljOgpAQCAtMjQyLDggKzI0MCw2IEBA
IG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0R5bmFtaWNTY29wZSgp
IGNvbnN0OwogCi0gICAgICAgIEhhc2hTZXQ8SlNPYmplY3QqPiYgYXJyYXlWaXNpdGVkRWxlbWVu
dHMoKSB7IGlmICghZCgpLT5hcnJheVZpc2l0ZWRFbGVtZW50cykgZCgpLT5hcnJheVZpc2l0ZWRF
bGVtZW50cy5zZXQobmV3IEhhc2hTZXQ8SlNPYmplY3QqPik7IHJldHVybiAqZCgpLT5hcnJheVZp
c2l0ZWRFbGVtZW50czsgfQotCiAgICAgICAgIEhhc2hTZXQ8UHJvZ3JhbUNvZGVCbG9jayo+JiBj
b2RlQmxvY2tzKCkgeyByZXR1cm4gZCgpLT5jb2RlQmxvY2tzOyB9CiAKICAgICAgICAgdm9pZCBj
b3B5R2xvYmFsc0Zyb20oUmVnaXN0ZXJGaWxlJik7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMv
U2hlbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9TaGVsbC5jcHAJKHJl
dmlzaW9uIDM3MTU1KQorKysgSmF2YVNjcmlwdENvcmUva2pzL1NoZWxsLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjMxLDcgKzIzMSw3IEBAIEpTVmFsdWUqIGZ1bmN0aW9uUnVuKEV4ZWNTdGF0ZSog
ZXhlYywgSlMKICAgICBpZiAoIWZpbGxCdWZmZXJXaXRoQ29udGVudHNPZkZpbGUoZmlsZU5hbWUs
IHNjcmlwdCkpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIEdlbmVyYWxFcnJvciwg
IkNvdWxkIG5vdCBvcGVuIGZpbGUuIik7CiAKLSAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0ID0gZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpOworICAgIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CiAKICAgICBzdG9wV2F0
Y2guc3RhcnQoKTsKICAgICBJbnRlcnByZXRlcjo6ZXZhbHVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9i
YWxFeGVjKCksIGdsb2JhbE9iamVjdC0+Z2xvYmFsU2NvcGVDaGFpbigpLCBmaWxlTmFtZSwgMSwg
c2NyaXB0LmRhdGEoKSk7CkBAIC0yNDcsNyArMjQ3LDcgQEAgSlNWYWx1ZSogZnVuY3Rpb25Mb2Fk
KEV4ZWNTdGF0ZSogZXhlYywgSgogICAgIGlmICghZmlsbEJ1ZmZlcldpdGhDb250ZW50c09mRmls
ZShmaWxlTmFtZSwgc2NyaXB0KSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgR2Vu
ZXJhbEVycm9yLCAiQ291bGQgbm90IG9wZW4gZmlsZS4iKTsKIAotICAgIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QgPSBleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCk7CisgICAgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKICAg
ICBJbnRlcnByZXRlcjo6ZXZhbHVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGdsb2Jh
bE9iamVjdC0+Z2xvYmFsU2NvcGVDaGFpbigpLCBmaWxlTmFtZSwgMSwgc2NyaXB0LmRhdGEoKSk7
CiAKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>