<?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>27243</bug_id>
          
          <creation_ts>2009-07-13 17:57:42 -0700</creation_ts>
          <short_desc>SVG JS bindings &quot;context&quot; pointer needs to move onto binding impls</short_desc>
          <delta_ts>2010-01-21 18:25:58 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>SVG</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>20430</dependson>
          <blocked>27088</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Nikolas Zimmermann">zimmermann</assigned_to>
          <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>131458</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-07-13 17:57:42 -0700</bug_when>
    <thetext>SVG JS bindings &quot;context&quot; pointer needs to move onto binding impls

Right now many SVG JS bindings have an extra context() parameter which is stored on the binding object.  That puts some SVG bindings up against the cell size limit.  The current plan for bug 27088 is to add a JSGlobaObject* on DOMObject.  That would put these SVG binding classes over the CELL_SIZE limit.

sub IsSVGTypeNeedingContextParameter
{
    my $implClassName = shift;
    if ($implClassName =~ /SVG/ and not $implClassName =~ /Element/) {
        return 1 unless $implClassName =~ /SVGPaint/ or $implClassName =~ /SVGColor/ or $implClassName =~ /SVGDocument/;
    }
    return 0;
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>131459</commentid>
    <comment_count>1</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-07-13 17:58:40 -0700</bug_when>
    <thetext>This might also be a good time to convert more of these custom impls into JSSVGPODTypes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>174049</commentid>
    <comment_count>2</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2009-12-21 12:58:33 -0800</bug_when>
    <thetext>SVGAngle/SVGPreserveAspectRatio have been converted, the last two remaining types. Working on a patch to fix this bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>174052</commentid>
    <comment_count>3</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2009-12-21 12:59:08 -0800</bug_when>
    <thetext>*** Bug 27278 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>174055</commentid>
    <comment_count>4</comment_count>
      <attachid>45344</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2009-12-21 13:09:15 -0800</bug_when>
    <thetext>Created attachment 45344
Initial patch

This patch is NOT ready for review yet, I just want to see wheter V8 compiles or not ;-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>174057</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-21 13:12:36 -0800</bug_when>
    <thetext>Attachment 45344 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/bindings/js/JSSVGPathSegCustom.cpp:23:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Skipping input &apos;WebCore/bindings/js/DOMObjectWithSVGContext.h&apos;: Can&apos;t open for reading
Total errors found: 1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>174060</commentid>
    <comment_count>6</comment_count>
      <attachid>45345</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2009-12-21 13:22:10 -0800</bug_when>
    <thetext>Created attachment 45345
Updated patch

Still not r?, add some minor style changes to let EWS go on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>174061</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-21 13:23:00 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 45345 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>174115</commentid>
    <comment_count>8</comment_count>
      <attachid>45353</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2009-12-21 15:11:22 -0800</bug_when>
    <thetext>Created attachment 45353
Patch v1

I am not sure how to test the x-frame prototype chain stuff. I guess there are existing tests for HTML, Sam, please enlighten me :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>174116</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-21 15:11:42 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 45353 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>174153</commentid>
    <comment_count>10</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2009-12-21 18:59:05 -0800</bug_when>
    <thetext>Okay, I have tried abarths testcases on bug 27088 with and without this patch and it makes no difference (all SVG* objects say &apos;PASS&apos;). Also the layout tests show no changes.

Now DOMObjectWithSVGContext is gone, and no one is using deprecatedLexicalGlobalObject anymore from SVG ... so I am wondering what I actually fixed here, besides removing the DOMOBjectWithSVGContext hack?

Can anyone come up with a testcase which fails without this bug? (Adam Barth pointed out that Eric might know :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>174181</commentid>
    <comment_count>11</comment_count>
      <attachid>45353</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2009-12-21 22:10:48 -0800</bug_when>
    <thetext>Comment on attachment 45353
Patch v1

This looks good to me, though at some point I think we should take it a step further and move this stuff completely out of the bindings, and into the core implementation.  As for tests, fast/dom/prototype-inheritance.html and fast/dom/prototype-inheritance-2.html should be good tests to look at to test this, but they are probably not currently being hit, because the SVG objects don&apos;t all have interfaces on the window or because it takes more effort to make one of these guys that simply iterating the window object. I would say r=me, but I think you should try and make a test first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>174182</commentid>
    <comment_count>12</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-12-21 22:16:16 -0800</bug_when>
    <thetext>bug 20430 is the reason why so many SVG constructor objects are missing.  I really should finish the patch I started for that so long ago...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183418</commentid>
    <comment_count>13</comment_count>
      <attachid>47164</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-01-21 17:31:23 -0800</bug_when>
    <thetext>Created attachment 47164
Updated patch

Updated this patch against ToT.

I am working on further patches in that area, that will touch all JSSVGPOD* files (as I&apos;m going to rewrite the ANIMATED_PROPERTY_* declaration macros for svg/). This patch is blocking my further work, I am unable to create a testcase, and I only did this patch to cleanup code, there is no bug about prototype chain problems, and I don&apos;t fully understand what this patch is supposed to fix - for me it&apos;s just cleanup :-)

Let&apos;s get this landed please, Sam was already okay with the code, just a testcase should be created. No one came up with a testcase, so please let&apos;s move forward even without a testcase.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183423</commentid>
    <comment_count>14</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-01-21 17:42:47 -0800</bug_when>
    <thetext>Attachment 47164 did not build on mac:
Build output: http://webkit-commit-queue.appspot.com/results/204409</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183424</commentid>
    <comment_count>15</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-01-21 17:50:05 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; Created an attachment (id=47164) [details]
&gt; Updated patch
&gt; 
&gt; Updated this patch against ToT.
&gt; 
&gt; I am working on further patches in that area, that will touch all JSSVGPOD*
&gt; files (as I&apos;m going to rewrite the ANIMATED_PROPERTY_* declaration macros for
&gt; svg/). This patch is blocking my further work, I am unable to create a
&gt; testcase, and I only did this patch to cleanup code, there is no bug about
&gt; prototype chain problems, and I don&apos;t fully understand what this patch is
&gt; supposed to fix - for me it&apos;s just cleanup :-)
&gt; 
&gt; Let&apos;s get this landed please, Sam was already okay with the code, just a
&gt; testcase should be created. No one came up with a testcase, so please let&apos;s
&gt; move forward even without a testcase.

That is okay with me.  Creating the test case has been hard, but it is not crucial in this edge case.  I will continue to work on it for the time being.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183433</commentid>
    <comment_count>16</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-01-21 18:06:29 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; Attachment 47164 [details] did not build on mac:
&gt; Build output: http://webkit-commit-queue.appspot.com/results/204409

Hmm, is it really not building? The log is empty, and it worked for me - tried a from scratch build on Leopard.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183435</commentid>
    <comment_count>17</comment_count>
      <attachid>47164</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-01-21 18:17:06 -0800</bug_when>
    <thetext>Comment on attachment 47164
Updated patch

r=me assuming you make sure everything builds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183436</commentid>
    <comment_count>18</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-01-21 18:20:11 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; (From update of attachment 47164 [details])
&gt; r=me assuming you make sure everything builds.

Thanks a lot! During the Xcode project updates, I forgot to say the &quot;Private&quot; role for JSSVGContextCache.h - now WebKit builds fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183438</commentid>
    <comment_count>19</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-01-21 18:25:58 -0800</bug_when>
    <thetext>Landed in r53666.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45344</attachid>
            <date>2009-12-21 13:09:15 -0800</date>
            <delta_ts>2009-12-21 13:22:10 -0800</delta_ts>
            <desc>Initial patch</desc>
            <filename>KillSVGJSGlobalStuff.diff</filename>
            <type>text/plain</type>
            <size>62938</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MjQ1MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzggQEAKKzIwMDktMTItMjEgIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJt
YW5uQHJpbS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgU1ZHIEpTIGJpbmRpbmdzICJjb250ZXh0IiBwb2ludGVyIG5lZWRzIHRvIG1vdmUgb250
byBiaW5kaW5nIGltcGxzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yNzI0MworCisgICAgICAgIFJld3JpdGUgU1ZHIERPTSBKU0MgYmluZGluZ3MgdG8g
dXNlIGEgZ2xvYmFsIERPTU9iamVjdCA8LT4gU1ZHRWxlbWVudCBjb250ZXh0IG1hcCwgc2ltaWxh
ciB0byBWOCdzIGFwcHJvYWNoLgorICAgICAgICBUaGlzIGFsbG93cyB1cyB0byByZW1vdmUgRE9N
T2JqZWN0V2l0aFNWR0NvbnRleHQgYW5kIG1ha2UgYWxsIFNWRyBKUyBvYmplY3RzIHVzZSBET01P
YmplY3RXaXRoR2xvYmFsUG9pbnRlciwKKyAgICAgICAgZml4aW5nIGNyb3NzLWZyYW1lIHByb3Rv
dHlwZSBjaGFpbiBmb3IgU1ZHLCBpbiB0aGUgc2FtZSB3YXkgbGlrZSBpdCBoYXMgYmVlbiBmaXhl
ZCBmb3IgSFRNTCBiZWZvcmUuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisgICAgICAgICogYmluZGluZ3MvanMvRE9NT2JqZWN0V2l0aFNWR0NvbnRleHQu
aDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6c2V0RE9NRXhjZXB0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U0RPTUJpbmRpbmcuaDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZURPTU9iamVjdFdyYXBwZXIp
OgorICAgICAgICAoV2ViQ29yZTo6Z2V0RE9NT2JqZWN0V3JhcHBlcik6CisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNTVkdDb250ZXh0Q2FjaGUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpK
U1NWR0NvbnRleHRDYWNoZTo6d3JhcHBlck1hcCk6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR0Nv
bnRleHRDYWNoZTo6YWRkV3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR0NvbnRleHRD
YWNoZTo6Zm9yZ2V0V3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR0NvbnRleHRDYWNo
ZTo6cHJvcGFnYXRlU1ZHRE9NQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHQ29udGV4
dENhY2hlOjpzdmdDb250ZXh0Rm9yRE9NT2JqZWN0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U1NWR0xlbmd0aEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR0xlbmd0aDo6dmFs
dWUpOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdMZW5ndGg6OmNvbnZlcnRUb1NwZWNpZmllZFVu
aXRzKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1NWR01hdHJpeEN1c3RvbS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKU1NWR01hdHJpeDo6bXVsdGlwbHkpOgorICAgICAgICAoV2ViQ29yZTo6
SlNTVkdNYXRyaXg6OmludmVyc2UpOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdNYXRyaXg6OnJv
dGF0ZUZyb21WZWN0b3IpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU1ZHUE9EVHlwZVdyYXBw
ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHRHluYW1pY1BPRFR5cGVXcmFwcGVyOjpjb21t
aXRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcjo6
Y29tbWl0Q2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHU3RhdGljUE9EVHlwZVdyYXBw
ZXJXaXRoUE9EVHlwZVBhcmVudDo6Y29tbWl0Q2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkpT
U1ZHU3RhdGljUE9EVHlwZVdyYXBwZXJXaXRoUGFyZW50Ojpjb21taXRDaGFuZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNTVkdQT0RUeXBlV3JhcHBlckNyZWF0b3JGb3JMaXN0OjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNTVkdQT0RUeXBlV3JhcHBlckNyZWF0b3JGb3JMaXN0Ojpjb21t
aXRDaGFuZ2UpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU1ZHUGF0aFNlZ0N1c3RvbS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1NWR1Bh
dGhTZWdMaXN0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHUGF0aFNlZ0xpc3Q6
OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHUGF0aFNlZ0xpc3Q6OmluaXRpYWxpemUp
OgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdQYXRoU2VnTGlzdDo6Z2V0SXRlbSk6CisgICAgICAg
IChXZWJDb3JlOjpKU1NWR1BhdGhTZWdMaXN0OjppbnNlcnRJdGVtQmVmb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkpTU1ZHUGF0aFNlZ0xpc3Q6OnJlcGxhY2VJdGVtKToKKyAgICAgICAgKFdlYkNv
cmU6OkpTU1ZHUGF0aFNlZ0xpc3Q6OnJlbW92ZUl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6SlNT
VkdQYXRoU2VnTGlzdDo6YXBwZW5kSXRlbSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNTVkdQ
b2ludExpc3RDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZmluaXNoR2V0dGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OmZpbmlzaFNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpmaW5pc2hT
ZXR0ZXJSZWFkT25seVJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR1BvaW50TGlzdDo6
Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdQb2ludExpc3Q6OmluaXRpYWxpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNTVkdQb2ludExpc3Q6OmdldEl0ZW0pOgorICAgICAgICAoV2Vi
Q29yZTo6SlNTVkdQb2ludExpc3Q6Omluc2VydEl0ZW1CZWZvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNTVkdQb2ludExpc3Q6OnJlcGxhY2VJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZH
UG9pbnRMaXN0OjpyZW1vdmVJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHUG9pbnRMaXN0
OjphcHBlbmRJdGVtKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1NWR1RyYW5zZm9ybUxpc3RD
dXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZmluaXNoR2V0dGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OmZpbmlzaFNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpmaW5pc2hTZXR0ZXJSZWFk
T25seVJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR1RyYW5zZm9ybUxpc3Q6OmNsZWFy
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHVHJhbnNmb3JtTGlzdDo6aW5pdGlhbGl6ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1NWR1RyYW5zZm9ybUxpc3Q6OmdldEl0ZW0pOgorICAgICAgICAo
V2ViQ29yZTo6SlNTVkdUcmFuc2Zvcm1MaXN0OjppbnNlcnRJdGVtQmVmb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkpTU1ZHVHJhbnNmb3JtTGlzdDo6cmVwbGFjZUl0ZW0pOgorICAgICAgICAoV2Vi
Q29yZTo6SlNTVkdUcmFuc2Zvcm1MaXN0OjpyZW1vdmVJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTU1ZHVHJhbnNmb3JtTGlzdDo6YXBwZW5kSXRlbSk6CisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgICogc3ZnL1NWR0FuZ2xlLmg6CisgICAg
ICAgICogc3ZnL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW8uaDoKKyAgICAgICAgKiBzdmcvU1ZHVHJh
bnNmb3JtLmg6CisKIDIwMDktMTItMjEgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IE1hcmsgUm93ZS4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA1MjM4NSkKKysrIFdlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC02Miw2ICs2
Miw3IEBACiAJCTA4MjAzQUEwMEVEOEMzNTMwMEI4QjYxQSAvKiBXTUxBY2Nlc3NFbGVtZW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODIwM0E5RTBF
RDhDMzUzMDBCOEI2MUEgLyogV01MQWNjZXNzRWxlbWVudC5oICovOyB9OwogCQkwODIzNDFDNTBG
Q0YzQTk1MDBENzVCRDYgLyogV01MU2VsZWN0RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODIzNDFDMzBGQ0YzQTk0MDBENzVCRDYgLyog
V01MU2VsZWN0RWxlbWVudC5jcHAgKi87IH07CiAJCTA4MjM0MUM2MEZDRjNBOTUwMEQ3NUJENiAv
KiBXTUxTZWxlY3RFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwODIzNDFDNDBGQ0YzQTk0MDBENzVCRDYgLyogV01MU2VsZWN0RWxlbWVudC5o
ICovOyB9OworCQkwODI1NTg4MTEwRTAwN0RBMDA2MTE1QjcgLyogSlNTVkdDb250ZXh0Q2FjaGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4MjU1ODgw
MTBFMDA3REEwMDYxMTVCNyAvKiBKU1NWR0NvbnRleHRDYWNoZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTA4Mzk0NzZDMEVDRTRCRDYwMDAyNzM1
MCAvKiBXTUxFbGVtZW50RmFjdG9yeS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwOEZCODRCMDBFQ0UzNzMzMDBEQzA2NEUgLyogV01MRWxlbWVudEZh
Y3RvcnkuY3BwICovOyB9OwogCQkwODM5NDc2RDBFQ0U0QkQ2MDAwMjczNTAgLyogV01MRWxlbWVu
dEZhY3RvcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDA4RkI4NEIxMEVDRTM3MzMwMERDMDY0RSAvKiBXTUxFbGVtZW50RmFjdG9yeS5oICovOyB9Owog
CQkwODNEQUVBNjBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgzREFF
QTIwRjAxQTdGQjAwMzQyNzU0IC8qIFJlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmNwcCAqLzsg
fTsKQEAgLTUyNzgsNiArNTI3OSw3IEBACiAJCTA4MjAzQTlFMEVEOEMzNTMwMEI4QjYxQSAvKiBX
TUxBY2Nlc3NFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdNTEFj
Y2Vzc0VsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDgyMzQxQzMwRkNG
M0E5NDAwRDc1QkQ2IC8qIFdNTFNlbGVjdEVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gV01MU2VsZWN0RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTA4MjM0MUM0MEZDRjNBOTQwMEQ3NUJENiAvKiBXTUxTZWxlY3RFbGVtZW50
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdNTFNlbGVjdEVsZW1lbnQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMDgyNTU4ODAxMEUwMDdEQTAwNjExNUI3IC8q
IEpTU1ZHQ29udGV4dENhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
U1ZHQ29udGV4dENhY2hlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4M0RBRUEy
MEYwMUE3RkIwMDM0Mjc1NCAvKiBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGlu
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4M0RBRUEzMEYwMUE3RkIwMDM0
Mjc1NCAvKiBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwODNEQUVBNDBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xNDQzMCw2ICsxNDQzMiw3IEBACiAJCQkJNDE1QjdDNTUwRkY1OThFNjAwNjc3MEY3
IC8qIEpTU2hhcmVkV29ya2VyQ29uc3RydWN0b3IuY3BwICovLAogCQkJCTQxNUI3QzYyMEZGNUE3
NjcwMDY3NzBGNyAvKiBKU1NoYXJlZFdvcmtlckNvbnN0cnVjdG9yLmggKi8sCiAJCQkJMTRDRDhE
ODExMDZCNTI5MDAwQTQ2RDIzIC8qIEpTU2hhcmVkV29ya2VyQ3VzdG9tLmNwcCAqLywKKwkJCQkw
ODI1NTg4MDEwRTAwN0RBMDA2MTE1QjcgLyogSlNTVkdDb250ZXh0Q2FjaGUuaCAqLywKIAkJCQlC
MjExMjdBNTBCMzE4Njc3MDAwOUJFNTMgLyogSlNTVkdQT0RUeXBlV3JhcHBlci5oICovLAogCQkJ
CUUxQzM2RDMyMEVCMEEwOTQwMDc0MTBCQyAvKiBKU1dvcmtlckNvbnRleHRCYXNlLmNwcCAqLywK
IAkJCQlFMUMzNkQzMzBFQjBBMDk0MDA3NDEwQkMgLyogSlNXb3JrZXJDb250ZXh0QmFzZS5oICov
LApAQCAtMTgyNjUsNiArMTgyNjgsNyBAQAogCQkJCUJDNTZDQjIzMTBENUFDODAwMEE3N0M2NCAv
KiBHZW9sb2NhdGlvbkNvbnRyb2xsZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNTZD
QjI0MTBENUFDODAwMEE3N0M2NCAvKiBHZW9sb2NhdGlvbkVycm9yLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQzU2Q0IyNTEwRDVBQzgwMDBBNzdDNjQgLyogR2VvbG9jYXRpb25Qb3NpdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMDgyNTU4ODExMEUwMDdEQTAwNjExNUI3IC8qIEpTU1ZHQ29udGV4
dENhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBv
c3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvRE9NT2Jq
ZWN0V2l0aFNWR0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0RP
TU9iamVjdFdpdGhTVkdDb250ZXh0LmgJKHJldmlzaW9uIDUyMzg1KQorKysgV2ViQ29yZS9iaW5k
aW5ncy9qcy9ET01PYmplY3RXaXRoU1ZHQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDU3
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlLCBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKLSAqIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMKLSAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCi0gKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
QVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQKLSAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgRE9NT2Jq
ZWN0V2l0aFNWR0NvbnRleHRfaAotI2RlZmluZSBET01PYmplY3RXaXRoU1ZHQ29udGV4dF9oCi0K
LSNpZiBFTkFCTEUoU1ZHKQotCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCi0jaW5jbHVkZSAi
U1ZHRWxlbWVudC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSAgICAvLyBGSVhNRTogVGhp
cyBjbGFzcyAoYW5kIGZpbGUpIHNob3VsZCBiZSByZW1vdmVkIG9uY2UgYWxsIFNWRyBiaW5kaW5n
cwotICAgIC8vIGhhdmUgbW92ZWQgY29udGV4dCgpIG9udG8gdGhlIHZhcmlvdXMgaW1wbCgpIHBv
aW50ZXJzLgotICAgIGNsYXNzIERPTU9iamVjdFdpdGhTVkdDb250ZXh0IDogcHVibGljIERPTU9i
amVjdCB7Ci0gICAgcHVibGljOgotICAgICAgICBTVkdFbGVtZW50KiBjb250ZXh0KCkgY29uc3Qg
eyByZXR1cm4gbV9jb250ZXh0LmdldCgpOyB9Ci0KLSAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIERP
TU9iamVjdFdpdGhTVkdDb250ZXh0KE5vbk51bGxQYXNzUmVmUHRyPEpTQzo6U3RydWN0dXJlPiBz
dHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiwgU1ZHRWxlbWVudCogY29udGV4dCkKLSAgICAg
ICAgICAgIDogRE9NT2JqZWN0KHN0cnVjdHVyZSkKLSAgICAgICAgICAgICwgbV9jb250ZXh0KGNv
bnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIE5vIHNwYWNlIHRvIHN0b3JlIHRoZSBK
U0RPTUdsb2JhbE9iamVjdCB3L28gaGl0dGluZyB0aGUgQ0VMTF9TSVpFIGxpbWl0LgotICAgICAg
ICB9Ci0KLSAgICBwcm90ZWN0ZWQ6IC8vIEZJWE1FOiBNYW55IGN1c3RvbSBiaW5kaW5ncyB1c2Ug
bV9jb250ZXh0IGRpcmVjdGx5LiAgTWFraW5nIHRoaXMgcHJvdGVjdGVkIHRvIHRlbXBvcmFyaWxp
eSByZWR1Y2UgY29kZSBjaHVybi4KLSAgICAgICAgUmVmUHRyPFNWR0VsZW1lbnQ+IG1fY29udGV4
dDsKLSAgICB9OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUo
U1ZHKQotI2VuZGlmIC8vIERPTU9iamVjdFdpdGhTVkdDb250ZXh0X2gKSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NQmluZGluZy5jcHAJKHJldmlzaW9uIDUyMzg1KQorKysgV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NTQsNyArNjU0LDcg
QEAgdm9pZCBzZXRET01FeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBFeAogICAgICAgICAgICAg
YnJlYWs7CiAjaWYgRU5BQkxFKFNWRykKICAgICAgICAgY2FzZSBTVkdFeGNlcHRpb25UeXBlOgot
ICAgICAgICAgICAgZXJyb3JPYmplY3QgPSB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgU1ZHRXhj
ZXB0aW9uOjpjcmVhdGUoZGVzY3JpcHRpb24pLmdldCgpLCAwKTsKKyAgICAgICAgICAgIGVycm9y
T2JqZWN0ID0gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIFNWR0V4Y2VwdGlvbjo6Y3JlYXRlKGRl
c2NyaXB0aW9uKS5nZXQoKSwgMCAvKiBubyBjb250ZXh0IG9uIHB1cnBvc2UgKi8pOwogICAgICAg
ICAgICAgYnJlYWs7CiAjZW5kaWYKICNpZiBFTkFCTEUoWFBBVEgpCkluZGV4OiBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01CaW5kaW5nLmgJKHJldmlzaW9uIDUyMzg1KQorKysgV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTUJpbmRpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMsNyBAQAogI2RlZmlu
ZSBKU0RPTUJpbmRpbmdfaAogCiAjaW5jbHVkZSAiSlNET01HbG9iYWxPYmplY3QuaCIKKyNpbmNs
dWRlICJKU1NWR0NvbnRleHRDYWNoZS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVk
ZSA8cnVudGltZS9Db21wbGV0aW9uLmg+CiAjaW5jbHVkZSA8cnVudGltZS9Mb29rdXAuaD4KQEAg
LTI5NiwxOSArMjk3LDIxIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAjZGVmaW5lIENSRUFU
RV9TVkdfT0JKRUNUX1dSQVBQRVIoZXhlYywgZ2xvYmFsT2JqZWN0LCBjbGFzc05hbWUsIG9iamVj
dCwgY29udGV4dCkgY3JlYXRlRE9NT2JqZWN0V3JhcHBlcjxKUyMjY2xhc3NOYW1lPihleGVjLCBn
bG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PGNsYXNzTmFtZSo+KG9iamVjdCksIGNvbnRleHQpCiAg
ICAgdGVtcGxhdGU8Y2xhc3MgV3JhcHBlckNsYXNzLCBjbGFzcyBET01DbGFzcz4gaW5saW5lIERP
TU9iamVjdCogY3JlYXRlRE9NT2JqZWN0V3JhcHBlcihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRE9NQ2xhc3MqIG9iamVjdCwgU1ZHRWxlbWVu
dCogY29udGV4dCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChvYmplY3QpOwotICAgICAgICBBU1NF
UlQoIWdldENhY2hlZERPTU9iamVjdFdyYXBwZXIoZXhlYywgb2JqZWN0KSk7Ci0gICAgICAgIFdy
YXBwZXJDbGFzcyogd3JhcHBlciA9IG5ldyAoZXhlYykgV3JhcHBlckNsYXNzKGdldERPTVN0cnVj
dHVyZTxXcmFwcGVyQ2xhc3M+KGV4ZWMsIGdsb2JhbE9iamVjdCksIGdsb2JhbE9iamVjdCwgb2Jq
ZWN0LCBjb250ZXh0KTsKLSAgICAgICAgY2FjaGVET01PYmplY3RXcmFwcGVyKGV4ZWMsIG9iamVj
dCwgd3JhcHBlcik7CisgICAgICAgIERPTU9iamVjdCogd3JhcHBlciA9IGNyZWF0ZURPTU9iamVj
dFdyYXBwZXI8V3JhcHBlckNsYXNzLCBET01DbGFzcz4oZXhlYywgZ2xvYmFsT2JqZWN0LCBvYmpl
Y3QpOworICAgICAgICBBU1NFUlQod3JhcHBlcik7CisgICAgICAgIGlmIChjb250ZXh0KQorICAg
ICAgICAgICAgSlNTVkdDb250ZXh0Q2FjaGU6OmFkZFdyYXBwZXIod3JhcHBlciwgY29udGV4dCk7
CiAgICAgICAgIHJldHVybiB3cmFwcGVyOwogICAgIH0KICAgICB0ZW1wbGF0ZTxjbGFzcyBXcmFw
cGVyQ2xhc3MsIGNsYXNzIERPTUNsYXNzPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIGdldERPTU9iamVj
dFdyYXBwZXIoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIERPTUNsYXNzKiBvYmplY3QsIFNWR0VsZW1lbnQqIGNvbnRleHQpCiAgICAgewogICAg
ICAgICBpZiAoIW9iamVjdCkKICAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwotICAg
ICAgICBpZiAoRE9NT2JqZWN0KiB3cmFwcGVyID0gZ2V0Q2FjaGVkRE9NT2JqZWN0V3JhcHBlcihl
eGVjLCBvYmplY3QpKQorICAgICAgICBpZiAoRE9NT2JqZWN0KiB3cmFwcGVyID0gZ2V0Q2FjaGVk
RE9NT2JqZWN0V3JhcHBlcihleGVjLCBvYmplY3QpKSB7CisgICAgICAgICAgICBBU1NFUlQoSlNT
VkdDb250ZXh0Q2FjaGU6OnN2Z0NvbnRleHRGb3JET01PYmplY3Qod3JhcHBlcikgPT0gY29udGV4
dCk7CiAgICAgICAgICAgICByZXR1cm4gd3JhcHBlcjsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZURP
TU9iamVjdFdyYXBwZXI8V3JhcHBlckNsYXNzPihleGVjLCBnbG9iYWxPYmplY3QsIG9iamVjdCwg
Y29udGV4dCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGNyZWF0ZURPTU9iamVjdFdyYXBw
ZXI8V3JhcHBlckNsYXNzLCBET01DbGFzcz4oZXhlYywgZ2xvYmFsT2JqZWN0LCBvYmplY3QsIGNv
bnRleHQpOwogICAgIH0KICNlbmRpZgogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZH
Q29udGV4dENhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR0Nv
bnRleHRDYWNoZS5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR0Nv
bnRleHRDYWNoZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk2IEBACisvKgorICAgIENvcHly
aWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAwOS4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisqLworCisjaWZuZGVmIEpTU1ZHQ29udGV4dENhY2hlX2gKKyNkZWZpbmUgSlNTVkdDb250
ZXh0Q2FjaGVfaAorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJTVkdFbGVtZW50LmgiCisj
aW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIERPTU9iamVjdDsKKworY2xhc3MgSlNTVkdDb250ZXh0Q2FjaGUgOiBwdWJsaWMgTm9uY29w
eWFibGUgeworcHVibGljOgorICAgIHR5cGVkZWYgSGFzaE1hcDxET01PYmplY3QqLCBTVkdFbGVt
ZW50Kj4gV3JhcHBlck1hcDsKKworICAgIHN0YXRpYyBXcmFwcGVyTWFwJiB3cmFwcGVyTWFwKCkK
KyAgICB7CisgICAgICAgIERFRklORV9TVEFUSUNfTE9DQUwoV3JhcHBlck1hcCwgc193cmFwcGVy
TWFwLCAoKSk7CisgICAgICAgIHJldHVybiBzX3dyYXBwZXJNYXA7CisgICAgfQorCisgICAgc3Rh
dGljIHZvaWQgYWRkV3JhcHBlcihET01PYmplY3QqIHdyYXBwZXIsIFNWR0VsZW1lbnQqIGNvbnRl
eHQpCisgICAgeworICAgICAgICBBU1NFUlQod3JhcHBlcik7CisgICAgICAgIEFTU0VSVChjb250
ZXh0KTsKKworICAgICAgICBwYWlyPFdyYXBwZXJNYXA6Oml0ZXJhdG9yLCBib29sPiByZXN1bHQg
PSB3cmFwcGVyTWFwKCkuYWRkKHdyYXBwZXIsIGNvbnRleHQpOworICAgICAgICBpZiAocmVzdWx0
LnNlY29uZCkgeworICAgICAgICAgICAgV3JhcHBlck1hcDo6aXRlcmF0b3ImIGl0ID0gcmVzdWx0
LmZpcnN0OworICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChpdCwgaXQtPnNlY29uZCA9PSBjb250
ZXh0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGZvcmdldFdyYXBwZXIo
RE9NT2JqZWN0KiB3cmFwcGVyKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHdyYXBwZXIpOworCisg
ICAgICAgIFdyYXBwZXJNYXAmIG1hcCA9IHdyYXBwZXJNYXAoKTsKKyAgICAgICAgV3JhcHBlck1h
cDo6aXRlcmF0b3IgaXQgPSBtYXAuZmluZCh3cmFwcGVyKTsKKyAgICAgICAgaWYgKGl0ID09IG1h
cC5lbmQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBtYXAucmVtb3ZlKGl0KTsK
KyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBwcm9wYWdhdGVTVkdET01DaGFuZ2UoRE9NT2JqZWN0
KiB3cmFwcGVyLCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lKQorICAgIHsKKyAg
ICAgICAgV3JhcHBlck1hcCYgbWFwID0gd3JhcHBlck1hcCgpOworICAgICAgICBXcmFwcGVyTWFw
OjppdGVyYXRvciBpdCA9IG1hcC5maW5kKHdyYXBwZXIpOworICAgICAgICBpZiAoaXQgPT0gbWFw
LmVuZCgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFNWR0VsZW1lbnQqIGNvbnRl
eHQgPSBpdC0+c2Vjb25kOworICAgICAgICBBU1NFUlQoY29udGV4dCk7CisKKyAgICAgICAgY29u
dGV4dC0+c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyaWJ1dGVOYW1lKTsKKyAgICB9CisKKyAgICBz
dGF0aWMgU1ZHRWxlbWVudCogc3ZnQ29udGV4dEZvckRPTU9iamVjdChET01PYmplY3QqIHdyYXBw
ZXIpCisgICAgeworICAgICAgICBBU1NFUlQod3JhcHBlcik7CisKKyAgICAgICAgV3JhcHBlck1h
cCYgbWFwID0gd3JhcHBlck1hcCgpOworICAgICAgICBXcmFwcGVyTWFwOjppdGVyYXRvciBpdCA9
IG1hcC5maW5kKHdyYXBwZXIpOworICAgICAgICBBU1NFUlQoaXQgIT0gbWFwLmVuZCgpKTsKKwor
ICAgICAgICBTVkdFbGVtZW50KiBjb250ZXh0ID0gaXQtPnNlY29uZDsKKyAgICAgICAgQVNTRVJU
KGNvbnRleHQpOworICAgICAgICByZXR1cm4gY29udGV4dDsKKyAgICB9CisKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTVkcpCisjZW5kaWYgLy8gSlNT
VkdDb250ZXh0Q2FjaGVfaApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR0xlbmd0aEN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR0xlbmd0aEN1
c3RvbS5jcHAJKHJldmlzaW9uIDUyMzg1KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR0xl
bmd0aEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDE4ICsyOCwyNiBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIEpTVmFsdWUgSlNTVkdMZW5ndGg6OnZhbHVlKEV4ZWNTdGF0ZSogZXhl
YykgY29uc3QKIHsKLSAgICBTVkdMZW5ndGggaW1wKCppbXBsKCkpOwotICAgIHJldHVybiBqc051
bWJlcihleGVjLCBpbXAudmFsdWUoY29udGV4dCgpKSk7CisgICAgSlNTVkdQT0RUeXBlV3JhcHBl
cjxTVkdMZW5ndGg+KiBpbXAgPSBpbXBsKCk7CisKKyAgICBTVkdFbGVtZW50KiBjb250ZXh0ID0g
SlNTVkdDb250ZXh0Q2FjaGU6OnN2Z0NvbnRleHRGb3JET01PYmplY3QoY29uc3RfY2FzdDxKU1NW
R0xlbmd0aCo+KHRoaXMpKTsKKyAgICBBU1NFUlQoY29udGV4dCk7CisKKyAgICBTVkdMZW5ndGgg
cG9kSW1wKCppbXApOworICAgIHJldHVybiBqc051bWJlcihleGVjLCBwb2RJbXAudmFsdWUoY29u
dGV4dCkpOwogfQogCiBKU1ZhbHVlIEpTU1ZHTGVuZ3RoOjpjb252ZXJ0VG9TcGVjaWZpZWRVbml0
cyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7Ci0gICAgSlNTVkdQT0RU
eXBlV3JhcHBlcjxTVkdMZW5ndGg+KiB3cmFwcGVyID0gaW1wbCgpOworICAgIEpTU1ZHUE9EVHlw
ZVdyYXBwZXI8U1ZHTGVuZ3RoPiogaW1wID0gaW1wbCgpOworCisgICAgU1ZHRWxlbWVudCogY29u
dGV4dCA9IEpTU1ZHQ29udGV4dENhY2hlOjpzdmdDb250ZXh0Rm9yRE9NT2JqZWN0KHRoaXMpOwor
ICAgIEFTU0VSVChjb250ZXh0KTsKIAotICAgIFNWR0xlbmd0aCBpbXAoKndyYXBwZXIpOwotICAg
IGltcC5jb252ZXJ0VG9TcGVjaWZpZWRVbml0cyhhcmdzLmF0KDApLnRvSW50MzIoZXhlYyksIGNv
bnRleHQoKSk7CisgICAgU1ZHTGVuZ3RoIHBvZEltcCgqaW1wKTsKKyAgICBwb2RJbXAuY29udmVy
dFRvU3BlY2lmaWVkVW5pdHMoYXJncy5hdCgwKS50b0ludDMyKGV4ZWMpLCBjb250ZXh0KTsKIAot
ICAgIHdyYXBwZXItPmNvbW1pdENoYW5nZShpbXAsIGNvbnRleHQoKSk7CisgICAgaW1wLT5jb21t
aXRDaGFuZ2UocG9kSW1wLCB0aGlzKTsKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIApJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR01hdHJpeEN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR01hdHJpeEN1c3RvbS5jcHAJKHJldmlzaW9u
IDUyMzg1KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR01hdHJpeEN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ0LDE1ICs0NCwyMCBAQCBKU1ZhbHVlIEpTU1ZHTWF0cml4OjptdWx0
aXBseShFeGVjU3RhdGUqCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbTEoKmltcGwoKSk7CiAg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbTIoKihtYXRyaXhPYmotPmltcGwoKSkpOwogCi0gICAg
SlNDOjpKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhlYywgZGVwcmVjYXRlZEdsb2JhbE9iamVjdEZv
clByb3RvdHlwZShleGVjKSwgSlNTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcjxUcmFuc2Zvcm1hdGlv
bk1hdHJpeD46OmNyZWF0ZShtMS5tdWx0TGVmdChtMikpLmdldCgpLCBtX2NvbnRleHQuZ2V0KCkp
OworICAgIFNWR0VsZW1lbnQqIGNvbnRleHQgPSBKU1NWR0NvbnRleHRDYWNoZTo6c3ZnQ29udGV4
dEZvckRPTU9iamVjdCh0aGlzKTsKKyAgICBBU1NFUlQoY29udGV4dCk7CiAKLSAgICByZXR1cm4g
cmVzdWx0OworICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBKU1NWR1N0YXRp
Y1BPRFR5cGVXcmFwcGVyPFRyYW5zZm9ybWF0aW9uTWF0cml4Pjo6Y3JlYXRlKG0xLm11bHRMZWZ0
KG0yKSkuZ2V0KCksIGNvbnRleHQpOwogfQogCiBKU1ZhbHVlIEpTU1ZHTWF0cml4OjppbnZlcnNl
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggaW1wKCppbXBsKCkpOwotICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSB0b0pTKGV4ZWMs
IGRlcHJlY2F0ZWRHbG9iYWxPYmplY3RGb3JQcm90b3R5cGUoZXhlYyksIEpTU1ZHU3RhdGljUE9E
VHlwZVdyYXBwZXI8VHJhbnNmb3JtYXRpb25NYXRyaXg+OjpjcmVhdGUoaW1wLmludmVyc2UoKSku
Z2V0KCksIG1fY29udGV4dC5nZXQoKSk7CisKKyAgICBTVkdFbGVtZW50KiBjb250ZXh0ID0gSlNT
VkdDb250ZXh0Q2FjaGU6OnN2Z0NvbnRleHRGb3JET01PYmplY3QodGhpcyk7CisgICAgQVNTRVJU
KGNvbnRleHQpOworCisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKGV4ZWMsIGdsb2JhbE9iamVj
dCgpLCBKU1NWR1N0YXRpY1BPRFR5cGVXcmFwcGVyPFRyYW5zZm9ybWF0aW9uTWF0cml4Pjo6Y3Jl
YXRlKGltcC5pbnZlcnNlKCkpLmdldCgpLCBjb250ZXh0KTsKIAogICAgIGlmICghaW1wLmlzSW52
ZXJ0aWJsZSgpKQogICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgU1ZHRXhjZXB0aW9uOjpT
VkdfTUFUUklYX05PVF9JTlZFUlRBQkxFKTsKQEAgLTY3LDcgKzcyLDEwIEBAIEpTVmFsdWUgSlNT
VkdNYXRyaXg6OnJvdGF0ZUZyb21WZWN0b3IoRXgKICAgICBmbG9hdCB4ID0gYXJncy5hdCgwKS50
b0Zsb2F0KGV4ZWMpOwogICAgIGZsb2F0IHkgPSBhcmdzLmF0KDEpLnRvRmxvYXQoZXhlYyk7CiAK
LSAgICBKU0M6OkpTVmFsdWUgcmVzdWx0ID0gdG9KUyhleGVjLCBkZXByZWNhdGVkR2xvYmFsT2Jq
ZWN0Rm9yUHJvdG90eXBlKGV4ZWMpLCBKU1NWR1N0YXRpY1BPRFR5cGVXcmFwcGVyPFRyYW5zZm9y
bWF0aW9uTWF0cml4Pjo6Y3JlYXRlKGltcC5yb3RhdGVGcm9tVmVjdG9yKHgsIHkpKS5nZXQoKSwg
bV9jb250ZXh0LmdldCgpKTsKKyAgICBTVkdFbGVtZW50KiBjb250ZXh0ID0gSlNTVkdDb250ZXh0
Q2FjaGU6OnN2Z0NvbnRleHRGb3JET01PYmplY3QodGhpcyk7CisgICAgQVNTRVJUKGNvbnRleHQp
OworCisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBKU1NW
R1N0YXRpY1BPRFR5cGVXcmFwcGVyPFRyYW5zZm9ybWF0aW9uTWF0cml4Pjo6Y3JlYXRlKGltcC5y
b3RhdGVGcm9tVmVjdG9yKHgsIHkpKS5nZXQoKSwgY29udGV4dCk7CiAKICAgICBpZiAoeCA9PSAw
LjAgfHwgeSA9PSAwLjApCiAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBTVkdFeGNlcHRp
b246OlNWR19JTlZBTElEX1ZBTFVFX0VSUik7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
U1ZHUE9EVHlwZVdyYXBwZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
U1ZHUE9EVHlwZVdyYXBwZXIuaAkocmV2aXNpb24gNTIzODUpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTU1ZHUE9EVHlwZVdyYXBwZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTggKzI4LDIx
IEBACiAjZGVmaW5lIEpTU1ZHUE9EVHlwZVdyYXBwZXJfaAogCiAjaWYgRU5BQkxFKFNWRykKKyNp
bmNsdWRlICJKU1NWR0NvbnRleHRDYWNoZS5oIgogI2luY2x1ZGUgIlNWR0VsZW1lbnQuaCIKICNp
bmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xh
c3MgRE9NT2JqZWN0OworCiB0ZW1wbGF0ZTx0eXBlbmFtZSBQT0RUeXBlPgogY2xhc3MgSlNTVkdQ
T0RUeXBlV3JhcHBlciA6IHB1YmxpYyBSZWZDb3VudGVkPEpTU1ZHUE9EVHlwZVdyYXBwZXI8UE9E
VHlwZT4gPiB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+SlNTVkdQT0RUeXBlV3JhcHBlcigpIHsg
fQogCiAgICAgdmlydHVhbCBvcGVyYXRvciBQT0RUeXBlKCkgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBjb21taXRDaGFuZ2UoUE9EVHlwZSwgU1ZHRWxlbWVudCopID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgY29tbWl0Q2hhbmdlKFBPRFR5cGUsIERPTU9iamVjdCopID0gMDsKIH07CiAKIC8vIFRoaXMg
ZmlsZSBjb250YWlucyBKUyB3cmFwcGVyIG9iamVjdHMgZm9yIFNWRyBkYXRhdHlwZXMsIHRoYXQg
YXJlIHBhc3NlZCBhcm91bmQgYnkgdmFsdWUKQEAgLTg2LDEyICs4OSwxMCBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiAobV9jcmVhdG9yLmdldCgpLT4qbV9nZXR0ZXIpKCk7CiAgICAgfQogCi0g
ICAgdmlydHVhbCB2b2lkIGNvbW1pdENoYW5nZShQT0RUeXBlIHR5cGUsIFNWR0VsZW1lbnQqIGNv
bnRleHQpCisgICAgdmlydHVhbCB2b2lkIGNvbW1pdENoYW5nZShQT0RUeXBlIHR5cGUsIERPTU9i
amVjdCogd3JhcHBlcikKICAgICB7CiAgICAgICAgIChtX2NyZWF0b3IuZ2V0KCktPiptX3NldHRl
cikodHlwZSk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgICAgICBjb250ZXh0LT5z
dmdBdHRyaWJ1dGVDaGFuZ2VkKG1fY3JlYXRvci0+YXNzb2NpYXRlZEF0dHJpYnV0ZU5hbWUoKSk7
CisgICAgICAgIEpTU1ZHQ29udGV4dENhY2hlOjpwcm9wYWdhdGVTVkdET01DaGFuZ2Uod3JhcHBl
ciwgbV9jcmVhdG9yLT5hc3NvY2lhdGVkQXR0cmlidXRlTmFtZSgpKTsKICAgICB9CiAKIHByaXZh
dGU6CkBAIC0xMzAsNyArMTMxLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9wb2RUeXBl
OwogICAgIH0KIAotICAgIHZpcnR1YWwgdm9pZCBjb21taXRDaGFuZ2UoUE9EVHlwZSB0eXBlLCBT
VkdFbGVtZW50KikKKyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0Q2hhbmdlKFBPRFR5cGUgdHlwZSwg
RE9NT2JqZWN0KikKICAgICB7CiAgICAgICAgIG1fcG9kVHlwZSA9IHR5cGU7CiAgICAgfQpAQCAt
MTU0LDEwICsxNTUsMTAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEpT
U1ZHU3RhdGljUE9EVHlwZVdyYXBwZXJXaXRoUE9EVHlwZVBhcmVudCh0eXBlLCBwYXJlbnQpKTsK
ICAgICB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgY29tbWl0Q2hhbmdlKFBPRFR5cGUgdHlwZSwgU1ZH
RWxlbWVudCogY29udGV4dCkKKyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0Q2hhbmdlKFBPRFR5cGUg
dHlwZSwgRE9NT2JqZWN0KiB3cmFwcGVyKQogICAgIHsKLSAgICAgICAgSlNTVkdTdGF0aWNQT0RU
eXBlV3JhcHBlcjxQT0RUeXBlPjo6Y29tbWl0Q2hhbmdlKHR5cGUsIGNvbnRleHQpOwotICAgICAg
ICBtX3BhcmVudFR5cGUtPmNvbW1pdENoYW5nZShQYXJlbnRUeXBlQXJnKHR5cGUpLCBjb250ZXh0
KTsgICAgCisgICAgICAgIEpTU1ZHU3RhdGljUE9EVHlwZVdyYXBwZXI8UE9EVHlwZT46OmNvbW1p
dENoYW5nZSh0eXBlLCB3cmFwcGVyKTsKKyAgICAgICAgbV9wYXJlbnRUeXBlLT5jb21taXRDaGFu
Z2UoUGFyZW50VHlwZUFyZyh0eXBlKSwgd3JhcHBlcik7CiAgICAgfQogCiBwcml2YXRlOgpAQCAt
MTkyLDcgKzE5Myw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIChtX3BhcmVudC5nZXQoKS0+
Km1fZ2V0dGVyKSgpOwogICAgIH0KIAotICAgIHZpcnR1YWwgdm9pZCBjb21taXRDaGFuZ2UoUE9E
VHlwZSB0eXBlLCBTVkdFbGVtZW50KikKKyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0Q2hhbmdlKFBP
RFR5cGUgdHlwZSwgRE9NT2JqZWN0KikKICAgICB7CiAgICAgICAgIChtX3BhcmVudC5nZXQoKS0+
Km1fc2V0dGVyKSh0eXBlKTsKICAgICB9CkBAIC0yMjcsOSArMjI4LDEwIEBAIHB1YmxpYzoKICAg
ICB0eXBlZGVmIFBPRFR5cGUgKFNWR1BPRExpc3RJdGVtPFBPRFR5cGU+OjoqR2V0dGVyTWV0aG9k
KSgpIGNvbnN0OyAKICAgICB0eXBlZGVmIHZvaWQgKFNWR1BPRExpc3RJdGVtPFBPRFR5cGU+Ojoq
U2V0dGVyTWV0aG9kKShQT0RUeXBlKTsKIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEpTU1ZHUE9E
VHlwZVdyYXBwZXJDcmVhdG9yRm9yTGlzdD4gY3JlYXRlKFBhc3NSZWZQdHI8UE9ETGlzdEl0ZW1Q
dHJUeXBlPiBjcmVhdG9yLCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lKQorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFNWR0xpc3RUZW1wbGF0ZT4KKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxKU1NWR1BPRFR5cGVXcmFwcGVyQ3JlYXRvckZvckxpc3Q+IGNyZWF0ZShQYXNzUmVmUHRyPFBP
RExpc3RJdGVtUHRyVHlwZT4gY3JlYXRvciwgU1ZHTGlzdFRlbXBsYXRlKiBsaXN0KQogICAgIHsK
LSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBKU1NWR1BPRFR5cGVXcmFwcGVyQ3JlYXRvckZv
ckxpc3QoY3JlYXRvciwgYXR0cmlidXRlTmFtZSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IEpTU1ZHUE9EVHlwZVdyYXBwZXJDcmVhdG9yRm9yTGlzdChjcmVhdG9yLCBsaXN0LT5hc3Nv
Y2lhdGVkQXR0cmlidXRlTmFtZSgpKSk7CiAgICAgfQogCiAgICAgdmlydHVhbCBvcGVyYXRvciBQ
T0RUeXBlKCkKQEAgLTIzNywxNSArMjM5LDEzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuICht
X2NyZWF0b3IuZ2V0KCktPiptX2dldHRlcikoKTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIHZvaWQg
Y29tbWl0Q2hhbmdlKFBPRFR5cGUgdHlwZSwgU1ZHRWxlbWVudCogY29udGV4dCkKKyAgICB2aXJ0
dWFsIHZvaWQgY29tbWl0Q2hhbmdlKFBPRFR5cGUgdHlwZSwgRE9NT2JqZWN0KiB3cmFwcGVyKQog
ICAgIHsKICAgICAgICAgaWYgKCFtX3NldHRlcikKICAgICAgICAgICAgIHJldHVybjsKIAogICAg
ICAgICAobV9jcmVhdG9yLmdldCgpLT4qbV9zZXR0ZXIpKHR5cGUpOwotCi0gICAgICAgIGlmIChj
b250ZXh0KQotICAgICAgICAgICAgY29udGV4dC0+c3ZnQXR0cmlidXRlQ2hhbmdlZChtX2Fzc29j
aWF0ZWRBdHRyaWJ1dGVOYW1lKTsKKyAgICAgICAgSlNTVkdDb250ZXh0Q2FjaGU6OnByb3BhZ2F0
ZVNWR0RPTUNoYW5nZSh3cmFwcGVyLCBtX2Fzc29jaWF0ZWRBdHRyaWJ1dGVOYW1lKTsKICAgICB9
CiAKIHByaXZhdGU6CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHUGF0aFNlZ0N1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR1BhdGhTZWdDdXN0
b20uY3BwCShyZXZpc2lvbiA1MjM4NSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdQYXRo
U2VnQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogCiAjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIK
ICNpbmNsdWRlICJKU1NWR1BhdGhTZWcuaCIKICNpbmNsdWRlICJKU1NWR1BhdGhTZWdBcmNBYnMu
aCIKICNpbmNsdWRlICJKU1NWR1BhdGhTZWdBcmNSZWwuaCIKQEAgLTQwLDkgKzQxLDYgQEAKICNp
bmNsdWRlICJKU1NWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbFJlbC5oIgogI2luY2x1ZGUgIkpTU1ZH
UGF0aFNlZ01vdmV0b0Ficy5oIgogI2luY2x1ZGUgIkpTU1ZHUGF0aFNlZ01vdmV0b1JlbC5oIgot
Ci0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCi0KICNpbmNsdWRlICJTVkdQYXRoU2VnLmgiCiAj
aW5jbHVkZSAiU1ZHUGF0aFNlZ0FyYy5oIgogI2luY2x1ZGUgIlNWR1BhdGhTZWdDbG9zZVBhdGgu
aCIKQEAgLTY0LDggKzYyLDEwIEBAIEpTVmFsdWUgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEpTRE9N
R2xvYmEKICAgICBpZiAoIW9iamVjdCkKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogCi0gICAg
aWYgKERPTU9iamVjdCogd3JhcHBlciA9IGdldENhY2hlZERPTU9iamVjdFdyYXBwZXIoZXhlYywg
b2JqZWN0KSkKKyAgICBpZiAoRE9NT2JqZWN0KiB3cmFwcGVyID0gZ2V0Q2FjaGVkRE9NT2JqZWN0
V3JhcHBlcihleGVjLCBvYmplY3QpKSB7CisgICAgICAgIEFTU0VSVChKU1NWR0NvbnRleHRDYWNo
ZTo6c3ZnQ29udGV4dEZvckRPTU9iamVjdCh3cmFwcGVyKSA9PSBjb250ZXh0KTsKICAgICAgICAg
cmV0dXJuIHdyYXBwZXI7CisgICAgfQogCiAgICAgc3dpdGNoIChvYmplY3QtPnBhdGhTZWdUeXBl
KCkpIHsKICAgICBjYXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfQ0xPU0VQQVRIOgpAQCAtMTE1LDUg
KzExNSwzIEBAIEpTVmFsdWUgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmEKIH0KIAog
I2VuZGlmIC8vIEVOQUJMRShTVkcpCi0KLS8vIHZpbTp0cz00Om5vZXQKSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3MvanMvSlNTVkdQYXRoU2VnTGlzdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1NWR1BhdGhTZWdMaXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gNTIz
ODUpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHUGF0aFNlZ0xpc3RDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNCw2ICsyNCw3IEBACiAKICNpbmNsdWRlICJEb2N1bWVudC5oIgog
I2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiSlNTVkdDb250ZXh0Q2FjaGUuaCIKICNpbmNs
dWRlICJKU1NWR1BhdGhTZWcuaCIKICNpbmNsdWRlICJTVkdEb2N1bWVudEV4dGVuc2lvbnMuaCIK
ICNpbmNsdWRlICJTVkdFbGVtZW50LmgiCkBAIC0zOSwxMiArNDAsMTIgQEAgSlNWYWx1ZSBKU1NW
R1BhdGhTZWdMaXN0OjpjbGVhcihFeGVjU3RhdAogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OwogCi0gICAgU1ZHUGF0aFNlZ0xpc3QqIGltcCA9IHN0YXRpY19jYXN0PFNWR1BhdGhTZWdMaXN0
Kj4oaW1wbCgpKTsKLSAgICBpbXAtPmNsZWFyKGVjKTsKKyAgICBTVkdQYXRoU2VnTGlzdCogbGlz
dCA9IGltcGwoKTsKKyAgICBsaXN0LT5jbGVhcihlYyk7CiAKICAgICBzZXRET01FeGNlcHRpb24o
ZXhlYywgZWMpOwogCi0gICAgbV9jb250ZXh0LT5zdmdBdHRyaWJ1dGVDaGFuZ2VkKGltcC0+YXNz
b2NpYXRlZEF0dHJpYnV0ZU5hbWUoKSk7CisgICAgSlNTVkdDb250ZXh0Q2FjaGU6OnByb3BhZ2F0
ZVNWR0RPTUNoYW5nZSh0aGlzLCBsaXN0LT5hc3NvY2lhdGVkQXR0cmlidXRlTmFtZSgpKTsKICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIApAQCAtNTMsMTQgKzU0LDE3IEBAIEpTVmFsdWUg
SlNTVkdQYXRoU2VnTGlzdDo6aW5pdGlhbGl6ZShFeGUKICAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKICAgICBTVkdQYXRoU2VnKiBuZXdJdGVtID0gdG9TVkdQYXRoU2VnKGFyZ3MuYXQoMCkpOwog
Ci0gICAgU1ZHUGF0aFNlZ0xpc3QqIGltcCA9IHN0YXRpY19jYXN0PFNWR1BhdGhTZWdMaXN0Kj4o
aW1wbCgpKTsKKyAgICBTVkdQYXRoU2VnTGlzdCogbGlzdCA9IGltcGwoKTsKIAotICAgIFNWR1Bh
dGhTZWcqIG9iaiA9IFdURjo6Z2V0UHRyKGltcC0+aW5pdGlhbGl6ZShuZXdJdGVtLCBlYykpOwor
ICAgIFNWR1BhdGhTZWcqIG9iaiA9IFdURjo6Z2V0UHRyKGxpc3QtPmluaXRpYWxpemUobmV3SXRl
bSwgZWMpKTsKIAotICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSB0b0pTKGV4ZWMsIGRlcHJlY2F0
ZWRHbG9iYWxPYmplY3RGb3JQcm90b3R5cGUoZXhlYyksIG9iaiwgbV9jb250ZXh0LmdldCgpKTsK
KyAgICBTVkdFbGVtZW50KiBjb250ZXh0ID0gSlNTVkdDb250ZXh0Q2FjaGU6OnN2Z0NvbnRleHRG
b3JET01PYmplY3QodGhpcyk7CisgICAgQVNTRVJUKGNvbnRleHQpOworCisgICAgSlNWYWx1ZSBy
ZXN1bHQgPSB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBvYmosIGNvbnRleHQpOwogICAgIHNl
dERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CiAKLSAgICBtX2NvbnRleHQtPnN2Z0F0dHJpYnV0ZUNo
YW5nZWQoaW1wLT5hc3NvY2lhdGVkQXR0cmlidXRlTmFtZSgpKTsgICAgCisgICAgSlNTVkdDb250
ZXh0Q2FjaGU6OnByb3BhZ2F0ZVNWR0RPTUNoYW5nZSh0aGlzLCBsaXN0LT5hc3NvY2lhdGVkQXR0
cmlidXRlTmFtZSgpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC03NSwxMCArNzksMTMg
QEAgSlNWYWx1ZSBKU1NWR1BhdGhTZWdMaXN0OjpnZXRJdGVtKEV4ZWNTdAogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKLSAgICBTVkdQYXRoU2VnTGlzdCogaW1wID0gc3Rh
dGljX2Nhc3Q8U1ZHUGF0aFNlZ0xpc3QqPihpbXBsKCkpOwotICAgIFNWR1BhdGhTZWcqIG9iaiA9
IFdURjo6Z2V0UHRyKGltcC0+Z2V0SXRlbShpbmRleCwgZWMpKTsKKyAgICBTVkdQYXRoU2VnTGlz
dCogbGlzdCA9IGltcGwoKTsKKyAgICBTVkdQYXRoU2VnKiBvYmogPSBXVEY6OmdldFB0cihsaXN0
LT5nZXRJdGVtKGluZGV4LCBlYykpOworCisgICAgU1ZHRWxlbWVudCogY29udGV4dCA9IEpTU1ZH
Q29udGV4dENhY2hlOjpzdmdDb250ZXh0Rm9yRE9NT2JqZWN0KHRoaXMpOworICAgIEFTU0VSVChj
b250ZXh0KTsKIAotICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSB0b0pTKGV4ZWMsIGRlcHJlY2F0
ZWRHbG9iYWxPYmplY3RGb3JQcm90b3R5cGUoZXhlYyksIG9iaiwgbV9jb250ZXh0LmdldCgpKTsK
KyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIG9iaiwgY29u
dGV4dCk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKICAgICByZXR1cm4gcmVzdWx0
OwogfQpAQCAtOTUsMTIgKzEwMiwxNSBAQCBKU1ZhbHVlIEpTU1ZHUGF0aFNlZ0xpc3Q6Omluc2Vy
dEl0ZW1CZWZvCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAotICAgIFNW
R1BhdGhTZWdMaXN0KiBpbXAgPSBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnTGlzdCo+KGltcGwoKSk7
CisgICAgU1ZHUGF0aFNlZ0xpc3QqIGxpc3QgPSBpbXBsKCk7CisKKyAgICBTVkdFbGVtZW50KiBj
b250ZXh0ID0gSlNTVkdDb250ZXh0Q2FjaGU6OnN2Z0NvbnRleHRGb3JET01PYmplY3QodGhpcyk7
CisgICAgQVNTRVJUKGNvbnRleHQpOwogCi0gICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IHRvSlMo
ZXhlYywgZGVwcmVjYXRlZEdsb2JhbE9iamVjdEZvclByb3RvdHlwZShleGVjKSwgV1RGOjpnZXRQ
dHIoaW1wLT5pbnNlcnRJdGVtQmVmb3JlKG5ld0l0ZW0sIGluZGV4LCBlYykpLCBtX2NvbnRleHQu
Z2V0KCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwg
V1RGOjpnZXRQdHIobGlzdC0+aW5zZXJ0SXRlbUJlZm9yZShuZXdJdGVtLCBpbmRleCwgZWMpKSwg
Y29udGV4dCk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKIAotICAgIG1fY29udGV4
dC0+c3ZnQXR0cmlidXRlQ2hhbmdlZChpbXAtPmFzc29jaWF0ZWRBdHRyaWJ1dGVOYW1lKCkpOyAg
ICAKKyAgICBKU1NWR0NvbnRleHRDYWNoZTo6cHJvcGFnYXRlU1ZHRE9NQ2hhbmdlKHRoaXMsIGxp
c3QtPmFzc29jaWF0ZWRBdHRyaWJ1dGVOYW1lKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
QEAgLTExNiwxMiArMTI2LDE1IEBAIEpTVmFsdWUgSlNTVkdQYXRoU2VnTGlzdDo6cmVwbGFjZUl0
ZW0oRXgKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCi0gICAgU1ZHUGF0
aFNlZ0xpc3QqIGltcCA9IHN0YXRpY19jYXN0PFNWR1BhdGhTZWdMaXN0Kj4oaW1wbCgpKTsKKyAg
ICBTVkdQYXRoU2VnTGlzdCogbGlzdCA9IGltcGwoKTsKIAotICAgIEpTQzo6SlNWYWx1ZSByZXN1
bHQgPSB0b0pTKGV4ZWMsIGRlcHJlY2F0ZWRHbG9iYWxPYmplY3RGb3JQcm90b3R5cGUoZXhlYyks
IFdURjo6Z2V0UHRyKGltcC0+cmVwbGFjZUl0ZW0obmV3SXRlbSwgaW5kZXgsIGVjKSksIG1fY29u
dGV4dC5nZXQoKSk7CisgICAgU1ZHRWxlbWVudCogY29udGV4dCA9IEpTU1ZHQ29udGV4dENhY2hl
OjpzdmdDb250ZXh0Rm9yRE9NT2JqZWN0KHRoaXMpOworICAgIEFTU0VSVChjb250ZXh0KTsKKwor
ICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQ
dHIobGlzdC0+cmVwbGFjZUl0ZW0obmV3SXRlbSwgaW5kZXgsIGVjKSksIGNvbnRleHQpOwogICAg
IHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CiAKLSAgICBtX2NvbnRleHQtPnN2Z0F0dHJpYnV0
ZUNoYW5nZWQoaW1wLT5hc3NvY2lhdGVkQXR0cmlidXRlTmFtZSgpKTsgICAgCisgICAgSlNTVkdD
b250ZXh0Q2FjaGU6OnByb3BhZ2F0ZVNWR0RPTUNoYW5nZSh0aGlzLCBsaXN0LT5hc3NvY2lhdGVk
QXR0cmlidXRlTmFtZSgpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xMzYsMTQgKzE0
OSwxNyBAQCBKU1ZhbHVlIEpTU1ZHUGF0aFNlZ0xpc3Q6OnJlbW92ZUl0ZW0oRXhlCiAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAotICAgIFNWR1BhdGhTZWdMaXN0KiBpbXAg
PSBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnTGlzdCo+KGltcGwoKSk7CisgICAgU1ZHUGF0aFNlZ0xp
c3QqIGxpc3QgPSBpbXBsKCk7CisKKyAgICBSZWZQdHI8U1ZHUGF0aFNlZz4gb2JqKGxpc3QtPnJl
bW92ZUl0ZW0oaW5kZXgsIGVjKSk7CiAKLSAgICBSZWZQdHI8U1ZHUGF0aFNlZz4gb2JqKGltcC0+
cmVtb3ZlSXRlbShpbmRleCwgZWMpKTsKKyAgICBTVkdFbGVtZW50KiBjb250ZXh0ID0gSlNTVkdD
b250ZXh0Q2FjaGU6OnN2Z0NvbnRleHRGb3JET01PYmplY3QodGhpcyk7CisgICAgQVNTRVJUKGNv
bnRleHQpOwogCi0gICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhlYywgZGVwcmVjYXRl
ZEdsb2JhbE9iamVjdEZvclByb3RvdHlwZShleGVjKSwgb2JqLmdldCgpLCBtX2NvbnRleHQuZ2V0
KCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgb2Jq
LmdldCgpLCBjb250ZXh0KTsKICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwogCi0gICAg
bV9jb250ZXh0LT5zdmdBdHRyaWJ1dGVDaGFuZ2VkKGltcC0+YXNzb2NpYXRlZEF0dHJpYnV0ZU5h
bWUoKSk7ICAgIAorICAgIEpTU1ZHQ29udGV4dENhY2hlOjpwcm9wYWdhdGVTVkdET01DaGFuZ2Uo
dGhpcywgbGlzdC0+YXNzb2NpYXRlZEF0dHJpYnV0ZU5hbWUoKSk7CiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIApAQCAtMTUyLDEyICsxNjgsMTUgQEAgSlNWYWx1ZSBKU1NWR1BhdGhTZWdMaXN0Ojph
cHBlbmRJdGVtKEV4ZQogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFNWR1BhdGhTZWcq
IG5ld0l0ZW0gPSB0b1NWR1BhdGhTZWcoYXJncy5hdCgwKSk7CiAKLSAgICBTVkdQYXRoU2VnTGlz
dCogaW1wID0gc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0xpc3QqPihpbXBsKCkpOworICAgIFNWR1Bh
dGhTZWdMaXN0KiBsaXN0ID0gaW1wbCgpOworCisgICAgU1ZHRWxlbWVudCogY29udGV4dCA9IEpT
U1ZHQ29udGV4dENhY2hlOjpzdmdDb250ZXh0Rm9yRE9NT2JqZWN0KHRoaXMpOworICAgIEFTU0VS
VChjb250ZXh0KTsKIAotICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSB0b0pTKGV4ZWMsIGRlcHJl
Y2F0ZWRHbG9iYWxPYmplY3RGb3JQcm90b3R5cGUoZXhlYyksIFdURjo6Z2V0UHRyKGltcC0+YXBw
ZW5kSXRlbShuZXdJdGVtLCBlYykpLCBtX2NvbnRleHQuZ2V0KCkpOworICAgIEpTVmFsdWUgcmVz
dWx0ID0gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIobGlzdC0+YXBwZW5k
SXRlbShuZXdJdGVtLCBlYykpLCBjb250ZXh0KTsKICAgICBzZXRET01FeGNlcHRpb24oZXhlYywg
ZWMpOwogCi0gICAgbV9jb250ZXh0LT5zdmdBdHRyaWJ1dGVDaGFuZ2VkKGltcC0+YXNzb2NpYXRl
ZEF0dHJpYnV0ZU5hbWUoKSk7ICAgIAorICAgIEpTU1ZHQ29udGV4dENhY2hlOjpwcm9wYWdhdGVT
VkdET01DaGFuZ2UodGhpcywgbGlzdC0+YXNzb2NpYXRlZEF0dHJpYnV0ZU5hbWUoKSk7CiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR1BvaW50
TGlzdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR1Bv
aW50TGlzdEN1c3RvbS5jcHAJKHJldmlzaW9uIDUyMzg1KQorKysgV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1NWR1BvaW50TGlzdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIzLDcg
QEAKICNpZiBFTkFCTEUoU1ZHKQogI2luY2x1ZGUgIkpTU1ZHUG9pbnRMaXN0LmgiCiAKKyNpbmNs
dWRlICJKU1NWR1BPRFR5cGVXcmFwcGVyLmgiCiAjaW5jbHVkZSAiSlNTVkdQb2ludC5oIgogI2lu
Y2x1ZGUgIlNWR1BvaW50TGlzdC5oIgogCkBAIC0zMyw0MiArMzQsNTYgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogdHlwZWRlZiBTVkdQT0RMaXN0SXRlbTxGbG9hdFBvaW50PiBQT0RMaXN0SXRlbTsK
IHR5cGVkZWYgU1ZHTGlzdDxSZWZQdHI8UE9ETGlzdEl0ZW0+ID4gU1ZHUG9pbnRMaXN0QmFzZTsK
IAotc3RhdGljIEpTVmFsdWUgZmluaXNoR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgRXhjZXB0aW9u
Q29kZSYgZWMsIFNWR0VsZW1lbnQqIGNvbnRleHQsIFNWR1BvaW50TGlzdCogbGlzdCwgUGFzc1Jl
ZlB0cjxQT0RMaXN0SXRlbSA+IGl0ZW0pCitzdGF0aWMgSlNWYWx1ZSBmaW5pc2hHZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBFeGNlcHRpb25Db2RlJiBlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNTVkdQb2ludExpc3QqIGxpc3RXcmFwcGVyLCBQYXNzUmVmUHRyPFBPRExpc3RJ
dGVtID4gaXRlbSkKIHsKICAgICBpZiAoZWMpIHsKICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4
ZWMsIGVjKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQotICAgIHJldHVy
biB0b0pTKGV4ZWMsIGRlcHJlY2F0ZWRHbG9iYWxPYmplY3RGb3JQcm90b3R5cGUoZXhlYyksIEpT
U1ZHUE9EVHlwZVdyYXBwZXJDcmVhdG9yRm9yTGlzdDxGbG9hdFBvaW50Pjo6Y3JlYXRlKGl0ZW0u
Z2V0KCksIGxpc3QtPmFzc29jaWF0ZWRBdHRyaWJ1dGVOYW1lKCkpLmdldCgpLCBjb250ZXh0KTsK
KworICAgIFNWR0VsZW1lbnQqIGNvbnRleHQgPSBKU1NWR0NvbnRleHRDYWNoZTo6c3ZnQ29udGV4
dEZvckRPTU9iamVjdChsaXN0V3JhcHBlcik7CisgICAgQVNTRVJUKGNvbnRleHQpOworCisgICAg
U1ZHUG9pbnRMaXN0KiBsaXN0ID0gbGlzdFdyYXBwZXItPmltcGwoKTsKKyAgICByZXR1cm4gdG9K
UyhleGVjLCBnbG9iYWxPYmplY3QsIEpTU1ZHUE9EVHlwZVdyYXBwZXJDcmVhdG9yRm9yTGlzdDxG
bG9hdFBvaW50Pjo6Y3JlYXRlPFNWR1BvaW50TGlzdD4oaXRlbS5nZXQoKSwgbGlzdCkuZ2V0KCks
IGNvbnRleHQpOwogfQogCi1zdGF0aWMgSlNWYWx1ZSBmaW5pc2hTZXR0ZXIoRXhlY1N0YXRlKiBl
eGVjLCBFeGNlcHRpb25Db2RlJiBlYywgU1ZHRWxlbWVudCogY29udGV4dCwgU1ZHUG9pbnRMaXN0
KiBsaXN0LCBQYXNzUmVmUHRyPFBPRExpc3RJdGVtID4gaXRlbSkKK3N0YXRpYyBKU1ZhbHVlIGZp
bmlzaFNldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEV4Y2VwdGlvbkNvZGUmIGVjLCBKU0RPTUdsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1NWR1BvaW50TGlzdCogbGlzdFdyYXBwZXIsIFBhc3NS
ZWZQdHI8UE9ETGlzdEl0ZW0gPiBpdGVtKQogewogICAgIGlmIChlYykgewogICAgICAgICBzZXRE
T01FeGNlcHRpb24oZXhlYywgZWMpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAg
ICB9Ci0gICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSA9IGxpc3QtPmFzc29j
aWF0ZWRBdHRyaWJ1dGVOYW1lKCk7Ci0gICAgY29udGV4dC0+c3ZnQXR0cmlidXRlQ2hhbmdlZChh
dHRyaWJ1dGVOYW1lKTsKLSAgICByZXR1cm4gdG9KUyhleGVjLCBkZXByZWNhdGVkR2xvYmFsT2Jq
ZWN0Rm9yUHJvdG90eXBlKGV4ZWMpLCBKU1NWR1BPRFR5cGVXcmFwcGVyQ3JlYXRvckZvckxpc3Q8
RmxvYXRQb2ludD46OmNyZWF0ZShpdGVtLmdldCgpLCBhdHRyaWJ1dGVOYW1lKS5nZXQoKSwgY29u
dGV4dCk7CisKKyAgICBTVkdQb2ludExpc3QqIGxpc3QgPSBsaXN0V3JhcHBlci0+aW1wbCgpOwor
ICAgIEpTU1ZHQ29udGV4dENhY2hlOjpwcm9wYWdhdGVTVkdET01DaGFuZ2UobGlzdFdyYXBwZXIs
IGxpc3QtPmFzc29jaWF0ZWRBdHRyaWJ1dGVOYW1lKCkpOworCisgICAgU1ZHRWxlbWVudCogY29u
dGV4dCA9IEpTU1ZHQ29udGV4dENhY2hlOjpzdmdDb250ZXh0Rm9yRE9NT2JqZWN0KGxpc3RXcmFw
cGVyKTsKKyAgICBBU1NFUlQoY29udGV4dCk7CisKKyAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9i
YWxPYmplY3QsIEpTU1ZHUE9EVHlwZVdyYXBwZXJDcmVhdG9yRm9yTGlzdDxGbG9hdFBvaW50Pjo6
Y3JlYXRlPFNWR1BvaW50TGlzdD4oaXRlbS5nZXQoKSwgbGlzdCkuZ2V0KCksIGNvbnRleHQpOwog
fQogCi1zdGF0aWMgSlNWYWx1ZSBmaW5pc2hTZXR0ZXJSZWFkT25seVJlc3VsdChFeGVjU3RhdGUq
IGV4ZWMsIEV4Y2VwdGlvbkNvZGUmIGVjLCBTVkdFbGVtZW50KiBjb250ZXh0LCBTVkdQb2ludExp
c3QqIGxpc3QsIFBhc3NSZWZQdHI8UE9ETGlzdEl0ZW0+IGl0ZW0pCitzdGF0aWMgSlNWYWx1ZSBm
aW5pc2hTZXR0ZXJSZWFkT25seVJlc3VsdChFeGVjU3RhdGUqIGV4ZWMsIEV4Y2VwdGlvbkNvZGUm
IGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1NWR1BvaW50TGlzdCogbGlz
dFdyYXBwZXIsIFBhc3NSZWZQdHI8UE9ETGlzdEl0ZW0+IGl0ZW0pCiB7CiAgICAgaWYgKGVjKSB7
CiAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CiAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogICAgIH0KLSAgICBjb250ZXh0LT5zdmdBdHRyaWJ1dGVDaGFuZ2VkKGxpc3Qt
PmFzc29jaWF0ZWRBdHRyaWJ1dGVOYW1lKCkpOwotICAgIHJldHVybiB0b0pTKGV4ZWMsIGRlcHJl
Y2F0ZWRHbG9iYWxPYmplY3RGb3JQcm90b3R5cGUoZXhlYyksIEpTU1ZHU3RhdGljUE9EVHlwZVdy
YXBwZXI8RmxvYXRQb2ludD46OmNyZWF0ZSgqaXRlbSkuZ2V0KCksIGNvbnRleHQpOworCisgICAg
U1ZHUG9pbnRMaXN0KiBsaXN0ID0gbGlzdFdyYXBwZXItPmltcGwoKTsKKyAgICBKU1NWR0NvbnRl
eHRDYWNoZTo6cHJvcGFnYXRlU1ZHRE9NQ2hhbmdlKGxpc3RXcmFwcGVyLCBsaXN0LT5hc3NvY2lh
dGVkQXR0cmlidXRlTmFtZSgpKTsKKyAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3Qs
IEpTU1ZHU3RhdGljUE9EVHlwZVdyYXBwZXI8RmxvYXRQb2ludD46OmNyZWF0ZSgqaXRlbSkuZ2V0
KCksIDAgLyogbm8gY29udGV4dCBvbiBwdXJwb3NlICovKTsKIH0KIAogSlNWYWx1ZSBKU1NWR1Bv
aW50TGlzdDo6Y2xlYXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JikKIHsKICAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBpbXBsKCktPmNsZWFyKGVjKTsKKyAgICBTVkdQb2lu
dExpc3RCYXNlKiBsaXN0SW1wID0gaW1wbCgpOworICAgIGxpc3RJbXAtPmNsZWFyKGVjKTsKICAg
ICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwotICAgIG1fY29udGV4dC0+c3ZnQXR0cmlidXRl
Q2hhbmdlZChpbXBsKCktPmFzc29jaWF0ZWRBdHRyaWJ1dGVOYW1lKCkpOworCisgICAgSlNTVkdD
b250ZXh0Q2FjaGU6OnByb3BhZ2F0ZVNWR0RPTUNoYW5nZSh0aGlzLCBsaXN0SW1wLT5hc3NvY2lh
dGVkQXR0cmlidXRlTmFtZSgpKTsKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIApAQCAt
NzYsOCArOTEsNyBAQCBKU1ZhbHVlIEpTU1ZHUG9pbnRMaXN0Ojppbml0aWFsaXplKEV4ZWNTCiB7
CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgU1ZHUG9pbnRMaXN0QmFzZSogbGlzdElt
cCA9IGltcGwoKTsKLSAgICByZXR1cm4gZmluaXNoU2V0dGVyKGV4ZWMsIGVjLCBjb250ZXh0KCks
IGltcGwoKSwKLSAgICAgICAgbGlzdEltcC0+aW5pdGlhbGl6ZShQT0RMaXN0SXRlbTo6Y29weSh0
b1NWR1BvaW50KGFyZ3MuYXQoMCkpKSwgZWMpKTsKKyAgICByZXR1cm4gZmluaXNoU2V0dGVyKGV4
ZWMsIGVjLCBnbG9iYWxPYmplY3QoKSwgdGhpcywgbGlzdEltcC0+aW5pdGlhbGl6ZShQT0RMaXN0
SXRlbTo6Y29weSh0b1NWR1BvaW50KGFyZ3MuYXQoMCkpKSwgZWMpKTsKIH0KIAogSlNWYWx1ZSBK
U1NWR1BvaW50TGlzdDo6Z2V0SXRlbShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCkBAIC05MSw4ICsxMDUsNyBAQCBKU1ZhbHVlIEpTU1ZHUG9pbnRMaXN0OjpnZXRJdGVtKEV4
ZWNTdGF0CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBTVkdQb2ludExpc3RCYXNl
KiBsaXN0SW1wID0gaW1wbCgpOwotICAgIHJldHVybiBmaW5pc2hHZXR0ZXIoZXhlYywgZWMsIGNv
bnRleHQoKSwgaW1wbCgpLAotICAgICAgICBsaXN0SW1wLT5nZXRJdGVtKGluZGV4LCBlYykpOwor
ICAgIHJldHVybiBmaW5pc2hHZXR0ZXIoZXhlYywgZWMsIGdsb2JhbE9iamVjdCgpLCB0aGlzLCBs
aXN0SW1wLT5nZXRJdGVtKGluZGV4LCBlYykpOwogfQogCiBKU1ZhbHVlIEpTU1ZHUG9pbnRMaXN0
OjppbnNlcnRJdGVtQmVmb3JlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykK
QEAgLTEwNiw4ICsxMTksNyBAQCBKU1ZhbHVlIEpTU1ZHUG9pbnRMaXN0OjppbnNlcnRJdGVtQmVm
b3JlCiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBTVkdQb2ludExpc3RCYXNlKiBs
aXN0SW1wID0gaW1wbCgpOwotICAgIHJldHVybiBmaW5pc2hTZXR0ZXIoZXhlYywgZWMsIGNvbnRl
eHQoKSwgaW1wbCgpLAotICAgICAgICBsaXN0SW1wLT5pbnNlcnRJdGVtQmVmb3JlKFBPRExpc3RJ
dGVtOjpjb3B5KHRvU1ZHUG9pbnQoYXJncy5hdCgwKSkpLCBpbmRleCwgZWMpKTsKKyAgICByZXR1
cm4gZmluaXNoU2V0dGVyKGV4ZWMsIGVjLCBnbG9iYWxPYmplY3QoKSwgdGhpcywgbGlzdEltcC0+
aW5zZXJ0SXRlbUJlZm9yZShQT0RMaXN0SXRlbTo6Y29weSh0b1NWR1BvaW50KGFyZ3MuYXQoMCkp
KSwgaW5kZXgsIGVjKSk7CiB9CiAKIEpTVmFsdWUgSlNTVkdQb2ludExpc3Q6OnJlcGxhY2VJdGVt
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKQEAgLTEyMSw4ICsxMzMsNyBA
QCBKU1ZhbHVlIEpTU1ZHUG9pbnRMaXN0OjpyZXBsYWNlSXRlbShFeGVjCiAKICAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKICAgICBTVkdQb2ludExpc3RCYXNlKiBsaXN0SW1wID0gaW1wbCgpOwot
ICAgIHJldHVybiBmaW5pc2hTZXR0ZXIoZXhlYywgZWMsIGNvbnRleHQoKSwgaW1wbCgpLAotICAg
ICAgICBsaXN0SW1wLT5yZXBsYWNlSXRlbShQT0RMaXN0SXRlbTo6Y29weSh0b1NWR1BvaW50KGFy
Z3MuYXQoMCkpKSwgaW5kZXgsIGVjKSk7CisgICAgcmV0dXJuIGZpbmlzaFNldHRlcihleGVjLCBl
YywgZ2xvYmFsT2JqZWN0KCksIHRoaXMsIGxpc3RJbXAtPnJlcGxhY2VJdGVtKFBPRExpc3RJdGVt
Ojpjb3B5KHRvU1ZHUG9pbnQoYXJncy5hdCgwKSkpLCBpbmRleCwgZWMpKTsKIH0KIAogSlNWYWx1
ZSBKU1NWR1BvaW50TGlzdDo6cmVtb3ZlSXRlbShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCkBAIC0xMzYsMTYgKzE0NywxNCBAQCBKU1ZhbHVlIEpTU1ZHUG9pbnRMaXN0Ojpy
ZW1vdmVJdGVtKEV4ZWNTCiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBTVkdQb2lu
dExpc3RCYXNlKiBsaXN0SW1wID0gaW1wbCgpOwotICAgIHJldHVybiBmaW5pc2hTZXR0ZXJSZWFk
T25seVJlc3VsdChleGVjLCBlYywgY29udGV4dCgpLCBpbXBsKCksCi0gICAgICAgIGxpc3RJbXAt
PnJlbW92ZUl0ZW0oaW5kZXgsIGVjKSk7CisgICAgcmV0dXJuIGZpbmlzaFNldHRlclJlYWRPbmx5
UmVzdWx0KGV4ZWMsIGVjLCBnbG9iYWxPYmplY3QoKSwgdGhpcywgbGlzdEltcC0+cmVtb3ZlSXRl
bShpbmRleCwgZWMpKTsKIH0KIAogSlNWYWx1ZSBKU1NWR1BvaW50TGlzdDo6YXBwZW5kSXRlbShF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgRXhjZXB0aW9uQ29k
ZSBlYyA9IDA7CiAgICAgU1ZHUG9pbnRMaXN0QmFzZSogbGlzdEltcCA9IGltcGwoKTsKLSAgICBy
ZXR1cm4gZmluaXNoU2V0dGVyKGV4ZWMsIGVjLCBjb250ZXh0KCksIGltcGwoKSwKLSAgICAgICAg
bGlzdEltcC0+YXBwZW5kSXRlbShQT0RMaXN0SXRlbTo6Y29weSh0b1NWR1BvaW50KGFyZ3MuYXQo
MCkpKSwgZWMpKTsKKyAgICByZXR1cm4gZmluaXNoU2V0dGVyKGV4ZWMsIGVjLCBnbG9iYWxPYmpl
Y3QoKSwgdGhpcywgbGlzdEltcC0+YXBwZW5kSXRlbShQT0RMaXN0SXRlbTo6Y29weSh0b1NWR1Bv
aW50KGFyZ3MuYXQoMCkpKSwgZWMpKTsKIH0KIAogfQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1NWR1RyYW5zZm9ybUxpc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNTVkdUcmFuc2Zvcm1MaXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gNTIzODUpCisr
KyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHVHJhbnNmb3JtTGlzdEN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIzLDYgKzIzLDcgQEAKICNpZiBFTkFCTEUoU1ZHKQogI2luY2x1ZGUgIkpT
U1ZHVHJhbnNmb3JtTGlzdC5oIgogCisjaW5jbHVkZSAiSlNTVkdQT0RUeXBlV3JhcHBlci5oIgog
I2luY2x1ZGUgIkpTU1ZHVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiU1ZHVHJhbnNmb3JtTGlzdC5o
IgogCkBAIC0zMyw0MiArMzQsNTYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogdHlwZWRlZiBTVkdQ
T0RMaXN0SXRlbTxTVkdUcmFuc2Zvcm0+IFBPRExpc3RJdGVtOwogdHlwZWRlZiBTVkdMaXN0PFJl
ZlB0cjxQT0RMaXN0SXRlbT4gPiBTVkdUcmFuc2Zvcm1MaXN0QmFzZTsKIAotc3RhdGljIEpTVmFs
dWUgZmluaXNoR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgRXhjZXB0aW9uQ29kZSYgZWMsIFNWR0Vs
ZW1lbnQqIGNvbnRleHQsIFNWR1RyYW5zZm9ybUxpc3QqIGxpc3QsIFBhc3NSZWZQdHI8UE9ETGlz
dEl0ZW0+IGl0ZW0pCitzdGF0aWMgSlNWYWx1ZSBmaW5pc2hHZXR0ZXIoRXhlY1N0YXRlKiBleGVj
LCBFeGNlcHRpb25Db2RlJiBlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNT
VkdUcmFuc2Zvcm1MaXN0KiBsaXN0V3JhcHBlciwgUGFzc1JlZlB0cjxQT0RMaXN0SXRlbT4gaXRl
bSkKIHsKICAgICBpZiAoZWMpIHsKICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsK
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQotICAgIHJldHVybiB0b0pTKGV4
ZWMsIGRlcHJlY2F0ZWRHbG9iYWxPYmplY3RGb3JQcm90b3R5cGUoZXhlYyksIEpTU1ZHUE9EVHlw
ZVdyYXBwZXJDcmVhdG9yRm9yTGlzdDxTVkdUcmFuc2Zvcm0+OjpjcmVhdGUoaXRlbS5nZXQoKSwg
bGlzdC0+YXNzb2NpYXRlZEF0dHJpYnV0ZU5hbWUoKSkuZ2V0KCksIGNvbnRleHQpOworCisgICAg
U1ZHRWxlbWVudCogY29udGV4dCA9IEpTU1ZHQ29udGV4dENhY2hlOjpzdmdDb250ZXh0Rm9yRE9N
T2JqZWN0KGxpc3RXcmFwcGVyKTsKKyAgICBBU1NFUlQoY29udGV4dCk7CisKKyAgICBTVkdUcmFu
c2Zvcm1MaXN0KiBsaXN0ID0gbGlzdFdyYXBwZXItPmltcGwoKTsKKyAgICByZXR1cm4gdG9KUyhl
eGVjLCBnbG9iYWxPYmplY3QsIEpTU1ZHUE9EVHlwZVdyYXBwZXJDcmVhdG9yRm9yTGlzdDxTVkdU
cmFuc2Zvcm0+OjpjcmVhdGU8U1ZHVHJhbnNmb3JtTGlzdD4oaXRlbS5nZXQoKSwgbGlzdCkuZ2V0
KCksIGNvbnRleHQpOwogfQogCi1zdGF0aWMgSlNWYWx1ZSBmaW5pc2hTZXR0ZXIoRXhlY1N0YXRl
KiBleGVjLCBFeGNlcHRpb25Db2RlJiBlYywgU1ZHRWxlbWVudCogY29udGV4dCwgU1ZHVHJhbnNm
b3JtTGlzdCogbGlzdCwgUGFzc1JlZlB0cjxQT0RMaXN0SXRlbT4gaXRlbSkKK3N0YXRpYyBKU1Zh
bHVlIGZpbmlzaFNldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEV4Y2VwdGlvbkNvZGUmIGVjLCBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1NWR1RyYW5zZm9ybUxpc3QqIGxpc3RXcmFw
cGVyLCBQYXNzUmVmUHRyPFBPRExpc3RJdGVtPiBpdGVtKQogewogICAgIGlmIChlYykgewogICAg
ICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwogICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKICAgICB9Ci0gICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSA9IGxp
c3QtPmFzc29jaWF0ZWRBdHRyaWJ1dGVOYW1lKCk7Ci0gICAgY29udGV4dC0+c3ZnQXR0cmlidXRl
Q2hhbmdlZChhdHRyaWJ1dGVOYW1lKTsKLSAgICByZXR1cm4gdG9KUyhleGVjLCBkZXByZWNhdGVk
R2xvYmFsT2JqZWN0Rm9yUHJvdG90eXBlKGV4ZWMpLCBKU1NWR1BPRFR5cGVXcmFwcGVyQ3JlYXRv
ckZvckxpc3Q8U1ZHVHJhbnNmb3JtPjo6Y3JlYXRlKGl0ZW0uZ2V0KCksIGF0dHJpYnV0ZU5hbWUp
LmdldCgpLCBjb250ZXh0KTsKKworICAgIFNWR1RyYW5zZm9ybUxpc3QqIGxpc3QgPSBsaXN0V3Jh
cHBlci0+aW1wbCgpOworICAgIEpTU1ZHQ29udGV4dENhY2hlOjpwcm9wYWdhdGVTVkdET01DaGFu
Z2UobGlzdFdyYXBwZXIsIGxpc3QtPmFzc29jaWF0ZWRBdHRyaWJ1dGVOYW1lKCkpOworCisgICAg
U1ZHRWxlbWVudCogY29udGV4dCA9IEpTU1ZHQ29udGV4dENhY2hlOjpzdmdDb250ZXh0Rm9yRE9N
T2JqZWN0KGxpc3RXcmFwcGVyKTsKKyAgICBBU1NFUlQoY29udGV4dCk7CisKKyAgICByZXR1cm4g
dG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIEpTU1ZHUE9EVHlwZVdyYXBwZXJDcmVhdG9yRm9yTGlz
dDxTVkdUcmFuc2Zvcm0+OjpjcmVhdGU8U1ZHVHJhbnNmb3JtTGlzdD4oaXRlbS5nZXQoKSwgbGlz
dCkuZ2V0KCksIGNvbnRleHQpOwogfQogCi1zdGF0aWMgSlNWYWx1ZSBmaW5pc2hTZXR0ZXJSZWFk
T25seVJlc3VsdChFeGVjU3RhdGUqIGV4ZWMsIEV4Y2VwdGlvbkNvZGUmIGVjLCBTVkdFbGVtZW50
KiBjb250ZXh0LCBTVkdUcmFuc2Zvcm1MaXN0KiBsaXN0LCBQYXNzUmVmUHRyPFBPRExpc3RJdGVt
PiBpdGVtKQorc3RhdGljIEpTVmFsdWUgZmluaXNoU2V0dGVyUmVhZE9ubHlSZXN1bHQoRXhlY1N0
YXRlKiBleGVjLCBFeGNlcHRpb25Db2RlJiBlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNTVkdUcmFuc2Zvcm1MaXN0KiBsaXN0V3JhcHBlciwgUGFzc1JlZlB0cjxQT0RMaXN0
SXRlbT4gaXRlbSkKIHsKICAgICBpZiAoZWMpIHsKICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4
ZWMsIGVjKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQotICAgIGNvbnRl
eHQtPnN2Z0F0dHJpYnV0ZUNoYW5nZWQobGlzdC0+YXNzb2NpYXRlZEF0dHJpYnV0ZU5hbWUoKSk7
Ci0gICAgcmV0dXJuIHRvSlMoZXhlYywgZGVwcmVjYXRlZEdsb2JhbE9iamVjdEZvclByb3RvdHlw
ZShleGVjKSwgSlNTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcjxTVkdUcmFuc2Zvcm0+OjpjcmVhdGUo
Kml0ZW0pLmdldCgpLCBjb250ZXh0KTsKKworICAgIFNWR1RyYW5zZm9ybUxpc3QqIGxpc3QgPSBs
aXN0V3JhcHBlci0+aW1wbCgpOworICAgIEpTU1ZHQ29udGV4dENhY2hlOjpwcm9wYWdhdGVTVkdE
T01DaGFuZ2UobGlzdFdyYXBwZXIsIGxpc3QtPmFzc29jaWF0ZWRBdHRyaWJ1dGVOYW1lKCkpOwor
ICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgSlNTVkdTdGF0aWNQT0RUeXBlV3Jh
cHBlcjxTVkdUcmFuc2Zvcm0+OjpjcmVhdGUoKml0ZW0pLmdldCgpLCAwIC8qIG5vIGNvbnRleHQg
b24gcHVycG9zZSAqLyk7CiB9CiAKIEpTVmFsdWUgSlNTVkdUcmFuc2Zvcm1MaXN0OjpjbGVhcihF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmKQogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOwotICAgIGltcGwoKS0+Y2xlYXIoZWMpOworICAgIFNWR1RyYW5zZm9ybUxpc3RCYXNlKiBs
aXN0SW1wID0gaW1wbCgpOworICAgIGxpc3RJbXAtPmNsZWFyKGVjKTsKICAgICBzZXRET01FeGNl
cHRpb24oZXhlYywgZWMpOwotICAgIG1fY29udGV4dC0+c3ZnQXR0cmlidXRlQ2hhbmdlZChpbXBs
KCktPmFzc29jaWF0ZWRBdHRyaWJ1dGVOYW1lKCkpOworCisgICAgSlNTVkdDb250ZXh0Q2FjaGU6
OnByb3BhZ2F0ZVNWR0RPTUNoYW5nZSh0aGlzLCBsaXN0SW1wLT5hc3NvY2lhdGVkQXR0cmlidXRl
TmFtZSgpKTsKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIApAQCAtNzYsOCArOTEsNyBA
QCBKU1ZhbHVlIEpTU1ZHVHJhbnNmb3JtTGlzdDo6aW5pdGlhbGl6ZShFCiB7CiAgICAgRXhjZXB0
aW9uQ29kZSBlYyA9IDA7CiAgICAgU1ZHVHJhbnNmb3JtTGlzdEJhc2UqIGxpc3RJbXAgPSBpbXBs
KCk7Ci0gICAgcmV0dXJuIGZpbmlzaFNldHRlcihleGVjLCBlYywgY29udGV4dCgpLCBpbXBsKCks
Ci0gICAgICAgIGxpc3RJbXAtPmluaXRpYWxpemUoUE9ETGlzdEl0ZW06OmNvcHkodG9TVkdUcmFu
c2Zvcm0oYXJncy5hdCgwKSkpLCBlYykpOworICAgIHJldHVybiBmaW5pc2hTZXR0ZXIoZXhlYywg
ZWMsIGdsb2JhbE9iamVjdCgpLCB0aGlzLCBsaXN0SW1wLT5pbml0aWFsaXplKFBPRExpc3RJdGVt
Ojpjb3B5KHRvU1ZHVHJhbnNmb3JtKGFyZ3MuYXQoMCkpKSwgZWMpKTsKIH0KIAogSlNWYWx1ZSBK
U1NWR1RyYW5zZm9ybUxpc3Q6OmdldEl0ZW0oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQpAQCAtOTEsOCArMTA1LDcgQEAgSlNWYWx1ZSBKU1NWR1RyYW5zZm9ybUxpc3Q6Omdl
dEl0ZW0oRXhlYwogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgU1ZHVHJhbnNmb3Jt
TGlzdEJhc2UqIGxpc3RJbXAgPSBpbXBsKCk7Ci0gICAgcmV0dXJuIGZpbmlzaEdldHRlcihleGVj
LCBlYywgY29udGV4dCgpLCBpbXBsKCksCi0gICAgICAgIGxpc3RJbXAtPmdldEl0ZW0oaW5kZXgs
IGVjKSk7CisgICAgcmV0dXJuIGZpbmlzaEdldHRlcihleGVjLCBlYywgZ2xvYmFsT2JqZWN0KCks
IHRoaXMsIGxpc3RJbXAtPmdldEl0ZW0oaW5kZXgsIGVjKSk7CiB9CiAKIEpTVmFsdWUgSlNTVkdU
cmFuc2Zvcm1MaXN0OjppbnNlcnRJdGVtQmVmb3JlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJn
TGlzdCYgYXJncykKQEAgLTEwNiw4ICsxMTksNyBAQCBKU1ZhbHVlIEpTU1ZHVHJhbnNmb3JtTGlz
dDo6aW5zZXJ0SXRlbUJlCiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBTVkdUcmFu
c2Zvcm1MaXN0QmFzZSogbGlzdEltcCA9IGltcGwoKTsKLSAgICByZXR1cm4gZmluaXNoU2V0dGVy
KGV4ZWMsIGVjLCBjb250ZXh0KCksIGltcGwoKSwKLSAgICAgICAgbGlzdEltcC0+aW5zZXJ0SXRl
bUJlZm9yZShQT0RMaXN0SXRlbTo6Y29weSh0b1NWR1RyYW5zZm9ybShhcmdzLmF0KDApKSksIGlu
ZGV4LCBlYykpOworICAgIHJldHVybiBmaW5pc2hTZXR0ZXIoZXhlYywgZWMsIGdsb2JhbE9iamVj
dCgpLCB0aGlzLCBsaXN0SW1wLT5pbnNlcnRJdGVtQmVmb3JlKFBPRExpc3RJdGVtOjpjb3B5KHRv
U1ZHVHJhbnNmb3JtKGFyZ3MuYXQoMCkpKSwgaW5kZXgsIGVjKSk7CiB9CiAKIEpTVmFsdWUgSlNT
VkdUcmFuc2Zvcm1MaXN0OjpyZXBsYWNlSXRlbShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCkBAIC0xMjAsOSArMTMyLDggQEAgSlNWYWx1ZSBKU1NWR1RyYW5zZm9ybUxpc3Q6
OnJlcGxhY2VJdGVtKAogICAgIH0KIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFNW
R1RyYW5zZm9ybUxpc3RCYXNlKiBsaXN0SW1wID0gaW1wbCgpOwotICAgIHJldHVybiBmaW5pc2hT
ZXR0ZXIoZXhlYywgZWMsIGNvbnRleHQoKSwgaW1wbCgpLAotICAgICAgICBsaXN0SW1wLT5yZXBs
YWNlSXRlbShQT0RMaXN0SXRlbTo6Y29weSh0b1NWR1RyYW5zZm9ybShhcmdzLmF0KDApKSksIGlu
ZGV4LCBlYykpOworICAgIFNWR1RyYW5zZm9ybUxpc3RCYXNlKiBsaXN0SW1wID0gaW1wbCgpOyAK
KyAgICByZXR1cm4gZmluaXNoU2V0dGVyKGV4ZWMsIGVjLCBnbG9iYWxPYmplY3QoKSwgdGhpcywg
bGlzdEltcC0+cmVwbGFjZUl0ZW0oUE9ETGlzdEl0ZW06OmNvcHkodG9TVkdUcmFuc2Zvcm0oYXJn
cy5hdCgwKSkpLCBpbmRleCwgZWMpKTsKIH0KIAogSlNWYWx1ZSBKU1NWR1RyYW5zZm9ybUxpc3Q6
OnJlbW92ZUl0ZW0oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQpAQCAtMTM2
LDE2ICsxNDcsMTQgQEAgSlNWYWx1ZSBKU1NWR1RyYW5zZm9ybUxpc3Q6OnJlbW92ZUl0ZW0oRQog
CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgU1ZHVHJhbnNmb3JtTGlzdEJhc2UqIGxp
c3RJbXAgPSBpbXBsKCk7Ci0gICAgcmV0dXJuIGZpbmlzaFNldHRlclJlYWRPbmx5UmVzdWx0KGV4
ZWMsIGVjLCBjb250ZXh0KCksIGltcGwoKSwKLSAgICAgICAgbGlzdEltcC0+cmVtb3ZlSXRlbShp
bmRleCwgZWMpKTsKKyAgICByZXR1cm4gZmluaXNoU2V0dGVyUmVhZE9ubHlSZXN1bHQoZXhlYywg
ZWMsIGdsb2JhbE9iamVjdCgpLCB0aGlzLCBsaXN0SW1wLT5yZW1vdmVJdGVtKGluZGV4LCBlYykp
OwogfQogCiBKU1ZhbHVlIEpTU1ZHVHJhbnNmb3JtTGlzdDo6YXBwZW5kSXRlbShFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
CiAgICAgU1ZHVHJhbnNmb3JtTGlzdEJhc2UqIGxpc3RJbXAgPSBpbXBsKCk7Ci0gICAgcmV0dXJu
IGZpbmlzaFNldHRlcihleGVjLCBlYywgY29udGV4dCgpLCBpbXBsKCksCi0gICAgICAgIGxpc3RJ
bXAtPmFwcGVuZEl0ZW0oUE9ETGlzdEl0ZW06OmNvcHkodG9TVkdUcmFuc2Zvcm0oYXJncy5hdCgw
KSkpLCBlYykpOworICAgIHJldHVybiBmaW5pc2hTZXR0ZXIoZXhlYywgZWMsIGdsb2JhbE9iamVj
dCgpLCB0aGlzLCBsaXN0SW1wLT5hcHBlbmRJdGVtKFBPRExpc3RJdGVtOjpjb3B5KHRvU1ZHVHJh
bnNmb3JtKGFyZ3MuYXQoMCkpKSwgZWMpKTsKIH0KIAogfQpJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiA1MjM4NSkKKysrIFdlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAg
LTEzMiwxNSArMTMyLDcgQEAgc3ViIEdldFBhcmVudENsYXNzTmFtZQogICAgIG15ICRkYXRhTm9k
ZSA9IHNoaWZ0OwogCiAgICAgcmV0dXJuICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
IkxlZ2FjeVBhcmVudCJ9IGlmICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkxlZ2Fj
eVBhcmVudCJ9OwotICAgIGlmIChAeyRkYXRhTm9kZS0+cGFyZW50c30gZXEgMCkgewotICAgICAg
ICAjIEZJWE1FOiBTVkcgdHlwZXMgcmVxdWlyaW5nIGEgY29udGV4dCgpIHBvaW50ZXIgZG8gbm90
IGhhdmUgZW5vdWdoCi0gICAgICAgICMgc3BhY2UgdG8gaG9sZCBhIGdsb2JhbE9iamVjdCBwb2lu
dGVyIGFzIHdlbGwgdy9vIGhpdHRpbmcgdGhlIENFTExfU0laRSBsaW1pdC4KLSAgICAgICAgIyBU
aGlzIGNvdWxkIGJlIGZpeGVkIGJ5IG1vdmluZyBjb250ZXh0KCkgaW50byB0aGUgdmFyaW91cyBp
bXBsKCkgY2xhc3Nlcy4KLSAgICAgICAgIyBVbnRpbCB0aGVuLCB3ZSBzcGVjaWFsIGNhc2UgdGhl
c2UgU1ZHIGJpbmRpbmdzIGFuZCBhbGxvdyB0aGVtIHRvIHJldHVybgotICAgICAgICAjIHRoZSB3
cm9uZyBwcm90b3R5cGVzIGFuZCBjb25zdHJ1Y3RvcnMgZHVyaW5nIHgtZnJhbWUgYWNjZXNzLiAg
U2VlIGJ1ZyAyNzA4OC4KLSAgICAgICAgcmV0dXJuICJET01PYmplY3RXaXRoU1ZHQ29udGV4dCIg
aWYgSXNTVkdUeXBlTmVlZGluZ0NvbnRleHRQYXJhbWV0ZXIoJGRhdGFOb2RlLT5uYW1lKTsKLSAg
ICAgICAgcmV0dXJuICJET01PYmplY3RXaXRoR2xvYmFsUG9pbnRlciI7Ci0gICAgfQorICAgIHJl
dHVybiAiRE9NT2JqZWN0V2l0aEdsb2JhbFBvaW50ZXIiIGlmIChAeyRkYXRhTm9kZS0+cGFyZW50
c30gZXEgMCk7CiAgICAgcmV0dXJuICJKUyIgLiAkY29kZUdlbmVyYXRvci0+U3RyaXBNb2R1bGUo
JGRhdGFOb2RlLT5wYXJlbnRzKDApKTsKIH0KIApAQCAtMTY5LDE2ICsxNjEsNiBAQCBzdWIgSW5k
ZXhHZXR0ZXJSZXR1cm5zU3RyaW5ncwogICAgIHJldHVybiAwOwogfQogCi1zdWIgQ3JlYXRlU1ZH
Q29udGV4dEludGVyZmFjZU5hbWUKLXsKLSAgICBteSAkdHlwZSA9IHNoaWZ0OwotCi0gICAgcmV0
dXJuICR0eXBlIGlmICRjb2RlR2VuZXJhdG9yLT5Jc1NWR0FuaW1hdGVkVHlwZSgkdHlwZSk7Ci0g
ICAgcmV0dXJuICJTVkdQYXRoU2VnIiBpZiAkdHlwZSA9fiAvXlNWR1BhdGhTZWcvIGFuZCAkdHlw
ZSBuZSAiU1ZHUGF0aFNlZ0xpc3QiOwotCi0gICAgcmV0dXJuICIiOwotfQotCiBzdWIgQWRkSW5j
bHVkZXNGb3JUeXBlCiB7CiAgICAgbXkgJHR5cGUgPSAkY29kZUdlbmVyYXRvci0+U3RyaXBNb2R1
bGUoc2hpZnQpOwpAQCAtNDkxLDcgKzQ3Myw2IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogICAgIG15
ICRoYXNQYXJlbnQgPSAkaGFzTGVnYWN5UGFyZW50IHx8ICRoYXNSZWFsUGFyZW50OwogICAgIG15
ICRwYXJlbnRDbGFzc05hbWUgPSBHZXRQYXJlbnRDbGFzc05hbWUoJGRhdGFOb2RlKTsKICAgICBt
eSAkY29uZGl0aW9uYWwgPSAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDb25kaXRp
b25hbCJ9OwotICAgIG15ICRuZWVkc1NWR0NvbnRleHQgPSBJc1NWR1R5cGVOZWVkaW5nQ29udGV4
dFBhcmFtZXRlcigkaW50ZXJmYWNlTmFtZSk7CiAgICAgbXkgJGV2ZW50VGFyZ2V0ID0gJGRhdGFO
b2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiRXZlbnRUYXJnZXQifTsKICAgICBteSAkbmVlZHNN
YXJrQ2hpbGRyZW4gPSAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21NYXJr
RnVuY3Rpb24ifSB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJFdmVudFRhcmdl
dCJ9OwogICAgIApAQCAtNTExLDggKzQ5Miw3IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogICAgIGlm
ICgkaGFzUGFyZW50KSB7CiAgICAgICAgICRoZWFkZXJJbmNsdWRlc3siJHBhcmVudENsYXNzTmFt
ZS5oIn0gPSAxOwogICAgIH0gZWxzZSB7Ci0gICAgICAgICRoZWFkZXJJbmNsdWRlc3siRE9NT2Jq
ZWN0V2l0aFNWR0NvbnRleHQuaCJ9ID0gJG5lZWRzU1ZHQ29udGV4dDsKLSAgICAgICAgJGhlYWRl
ckluY2x1ZGVzeyJKU0RPTUJpbmRpbmcuaCJ9ID0gISRuZWVkc1NWR0NvbnRleHQ7CisgICAgICAg
ICRoZWFkZXJJbmNsdWRlc3siSlNET01CaW5kaW5nLmgifSA9IDE7CiAgICAgICAgICRoZWFkZXJJ
bmNsdWRlc3siPHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaD4ifSA9IDE7CiAgICAgICAgICRoZWFk
ZXJJbmNsdWRlc3siPHJ1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmg+In0gPSAxOwogICAgIH0KQEAg
LTU1OSw4ICs1MzksNiBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICAgICAgcHVzaChAaGVhZGVy
Q29udGVudCwgIiAgICAkY2xhc3NOYW1lKE5vbk51bGxQYXNzUmVmUHRyPEpTQzo6U3RydWN0dXJl
PiwgUGFzc1JlZlB0cjwkaW1wbFR5cGU+LCBKU0RPTVdpbmRvd1NoZWxsKik7XG4iKTsKICAgICB9
IGVsc2lmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJJc1dvcmtlckNvbnRleHQi
fSkgewogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICRjbGFzc05hbWUoTm9uTnVs
bFBhc3NSZWZQdHI8SlNDOjpTdHJ1Y3R1cmU+LCBQYXNzUmVmUHRyPCRpbXBsVHlwZT4pO1xuIik7
Ci0gICAgfSBlbHNpZiAoSXNTVkdUeXBlTmVlZGluZ0NvbnRleHRQYXJhbWV0ZXIoJGltcGxDbGFz
c05hbWUpKSB7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgJGNsYXNzTmFtZShO
b25OdWxsUGFzc1JlZlB0cjxKU0M6OlN0cnVjdHVyZT4sIEpTRE9NR2xvYmFsT2JqZWN0KiwgUGFz
c1JlZlB0cjwkaW1wbFR5cGU+LCBTVkdFbGVtZW50KiBjb250ZXh0KTtcbiIpOwogICAgIH0gZWxz
ZSB7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgJGNsYXNzTmFtZShOb25OdWxs
UGFzc1JlZlB0cjxKU0M6OlN0cnVjdHVyZT4sIEpTRE9NR2xvYmFsT2JqZWN0KiwgUGFzc1JlZlB0
cjwkaW1wbFR5cGU+KTtcbiIpOwogICAgIH0KQEAgLTc4MSw3ICs3NTksNyBAQCBzdWIgR2VuZXJh
dGVIZWFkZXIKIAogICAgIGlmICghJGhhc1BhcmVudCB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJHZW5lcmF0ZVRvSlMifSB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyJDdXN0b21Ub0pTIn0pIHsKICAgICAgICAgaWYgKCRwb2RUeXBlKSB7Ci0gICAgICAgICAg
ICBwdXNoKEBoZWFkZXJDb250ZW50LCAiSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUq
LCBKU0RPTUdsb2JhbE9iamVjdCosIEpTU1ZHUE9EVHlwZVdyYXBwZXI8JHBvZFR5cGU+KiwgU1ZH
RWxlbWVudCogY29udGV4dCk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQs
ICJKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0Kiwg
SlNTVkdQT0RUeXBlV3JhcHBlcjwkcG9kVHlwZT4qLCBTVkdFbGVtZW50Kik7XG4iKTsKICAgICAg
ICAgfSBlbHNpZiAoSXNTVkdUeXBlTmVlZGluZ0NvbnRleHRQYXJhbWV0ZXIoJGltcGxDbGFzc05h
bWUpKSB7CiAgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiSlNDOjpKU1ZhbHVlIHRv
SlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosICRpbXBsVHlwZSosIFNWR0Vs
ZW1lbnQqIGNvbnRleHQpO1xuIik7CiAgICAgICAgIH0gZWxzZSB7CkBAIC0xMTcxLDkgKzExNDks
NiBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgIG15ICRwb2RUeXBlID0gJGRhdGFO
b2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiUE9EVHlwZSJ9OwogICAgIG15ICRpbXBsVHlwZSA9
ICRwb2RUeXBlID8gIkpTU1ZHUE9EVHlwZVdyYXBwZXI8JHBvZFR5cGU+ICIgOiAkaW1wbENsYXNz
TmFtZTsKIAotICAgIG15ICRuZWVkc1NWR0NvbnRleHQgPSBJc1NWR1R5cGVOZWVkaW5nQ29udGV4
dFBhcmFtZXRlcigkaW1wbENsYXNzTmFtZSk7Ci0gICAgbXkgJHBhcmVudE5lZWRzU1ZHQ29udGV4
dCA9ICgkbmVlZHNTVkdDb250ZXh0IGFuZCAkcGFyZW50Q2xhc3NOYW1lID1+IC9TVkcvKTsKLQog
ICAgICMgQ29uc3RydWN0b3IKICAgICBpZiAoJGludGVyZmFjZU5hbWUgZXEgIkRPTVdpbmRvdyIp
IHsKICAgICAgICAgQWRkSW5jbHVkZXNGb3JUeXBlKCJKU0RPTVdpbmRvd1NoZWxsIik7CkBAIC0x
MTg0LDEyICsxMTU5LDExIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiJHtjbGFzc05hbWV9OjokY2xhc3NOYW1lKE5vbk51bGxQYXNzUmVm
UHRyPFN0cnVjdHVyZT4gc3RydWN0dXJlLCBQYXNzUmVmUHRyPCRpbXBsVHlwZT4gaW1wbClcbiIp
OwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICA6ICRwYXJlbnRDbGFzc05hbWUoc3Ry
dWN0dXJlLCBpbXBsKVxuIik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgbXkgJGNvbnRleHRBcmcg
PSAkbmVlZHNTVkdDb250ZXh0ID8gIiwgU1ZHRWxlbWVudCogY29udGV4dCIgOiAiIjsKLSAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIke2NsYXNzTmFtZX06OiRjbGFzc05hbWUoTm9uTnVsbFBh
c3NSZWZQdHI8U3RydWN0dXJlPiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIFBhc3NSZWZQdHI8JGltcGxUeXBlPiBpbXBsJGNvbnRleHRBcmcpXG4iKTsKKyAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIke2NsYXNzTmFtZX06OiRjbGFzc05hbWUoTm9uTnVsbFBh
c3NSZWZQdHI8U3RydWN0dXJlPiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIFBhc3NSZWZQdHI8JGltcGxUeXBlPiBpbXBsKVxuIik7CiAgICAgICAgIGlmICgkaGFz
UGFyZW50KSB7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICA6ICRwYXJlbnRD
bGFzc05hbWUoc3RydWN0dXJlLCBnbG9iYWxPYmplY3QsIGltcGwiIC4gKCRwYXJlbnROZWVkc1NW
R0NvbnRleHQgPyAiLCBjb250ZXh0IiA6ICIiKSAuICIpXG4iKTsKKyAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgIDogJHBhcmVudENsYXNzTmFtZShzdHJ1Y3R1cmUsIGdsb2JhbE9i
amVjdCwgaW1wbClcbiIpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgOiAkcGFyZW50Q2xhc3NOYW1lKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0
IiAuICgkbmVlZHNTVkdDb250ZXh0ID8gIiwgY29udGV4dCIgOiAiIikgLiAiKVxuIik7CisgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICA6ICRwYXJlbnRDbGFzc05hbWUoc3RydWN0
dXJlLCBnbG9iYWxPYmplY3QpXG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgICwgbV9pbXBsKGltcGwpXG4iKTsKICAgICAgICAgfQogICAgIH0KQEAgLTEyMTIsNiArMTE4
Niw4IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGZvcmdldERPTU9iamVjdCh0
aGlzLCBpbXBsKCkpO1xuIik7CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIEpTU1ZHQ29udGV4dENhY2hlOjpmb3JnZXRXcmFwcGVyKHRoaXMpO1xu
IikgaWYgSXNTVkdUeXBlTmVlZGluZ0NvbnRleHRQYXJhbWV0ZXIoJGltcGxDbGFzc05hbWUpOwog
ICAgICAgICB9CiAKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwpAQCAtMTM5
MywxNSArMTM2OSw4IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAKICAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIkpTVmFsdWUgJHtjb25zdHJ1Y3RvckZ1bmN0aW9uTmFt
ZX0oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90
JiBzbG90KVxuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsK
LSAgICAgICAgICAgICAgICBpZiAoSXNTVkdUeXBlTmVlZGluZ0NvbnRleHRQYXJhbWV0ZXIoJGlu
dGVyZmFjZU5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICMgRklYTUU6IFNWRyBiaW5kaW5n
cyB3aXRoIGEgY29udGV4dCBwb2ludGVyIGhhdmUgbm8gc3BhY2UgdG8gc3RvcmUgYSBnbG9iYWxP
YmplY3QKLSAgICAgICAgICAgICAgICAgICAgIyBzbyB3ZSB1c2UgZGVwcmVjYXRlZEdsb2JhbE9i
amVjdEZvclByb3RvdHlwZSBpbnN0ZWFkLgotICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICBVTlVTRURfUEFSQU0oc2xvdCk7XG4iKTsKLSAgICAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuICR7Y2xhc3NOYW1lfTo6Z2V0Q29uc3Ry
dWN0b3IoZXhlYywgZGVwcmVjYXRlZEdsb2JhbE9iamVjdEZvclByb3RvdHlwZShleGVjKSk7XG4i
KTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICAke2NsYXNzTmFtZX0qIGRvbU9iamVjdCA9IHN0YXRpY19jYXN0PCRj
bGFzc05hbWUqPihhc09iamVjdChzbG90LnNsb3RCYXNlKCkpKTtcbiIpOwotICAgICAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gJHtjbGFzc05hbWV9OjpnZXRD
b25zdHJ1Y3RvcihleGVjLCBkb21PYmplY3QtPmdsb2JhbE9iamVjdCgpKTtcbiIpOwotICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAke2Ns
YXNzTmFtZX0qIGRvbU9iamVjdCA9IHN0YXRpY19jYXN0PCRjbGFzc05hbWUqPihhc09iamVjdChz
bG90LnNsb3RCYXNlKCkpKTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIHJldHVybiAke2NsYXNzTmFtZX06OmdldENvbnN0cnVjdG9yKGV4ZWMsIGRvbU9iamVj
dC0+Z2xvYmFsT2JqZWN0KCkpO1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICJ9XG4iKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTQ5NSwxNiArMTQ2NCwx
NyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIG9iamVj
dFxuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgc3RhdGljX2Nhc3Q8JGNsYXNzTmFtZSo+KHRoaXNPYmplY3QpLT5wdXREaXJlY3QoSWRlbnRp
ZmllcihleGVjLCBcIiRuYW1lXCIpLCB2YWx1ZSk7XG4iKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgJGNsYXNzTmFtZSogY2FzdGVkVGhpc09iaiA9IHN0YXRpY19jYXN0PCRjbGFzc05h
bWUqPih0aGlzT2JqZWN0KTtcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgICRpbXBsVHlwZSogaW1wID0gc3RhdGljX2Nhc3Q8JGltcGxUeXBl
Kj4oY2FzdGVkVGhpc09iai0+aW1wbCgpKTtcbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICgkcG9kVHlwZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICAkcG9kVHlwZSBpbXAoKnN0YXRpY19jYXN0PCRjbGFzc05hbWUq
Pih0aGlzT2JqZWN0KS0+aW1wbCgpKTtcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAkcG9kVHlwZSBwb2RJbXAoKmltcCk7XG4iKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRwb2RUeXBlIGVxICJmbG9hdCIp
IHsgIyBTcGVjaWFsIGNhc2UgZm9yIEpTU1ZHTnVtYmVyCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpbXAgPSAiIC4gSlNWYWx1ZVRv
TmF0aXZlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgInZhbHVlIikgLiAiO1xuIik7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBwb2RJ
bXAgPSAiIC4gSlNWYWx1ZVRvTmF0aXZlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgInZhbHVlIikg
LiAiO1xuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBp
bXAuc2V0JGltcGxTZXR0ZXJGdW5jdGlvbk5hbWUoIiAuIEpTVmFsdWVUb05hdGl2ZSgkYXR0cmli
dXRlLT5zaWduYXR1cmUsICJ2YWx1ZSIpIC4gIik7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHBvZEltcC5zZXQkaW1wbFNl
dHRlckZ1bmN0aW9uTmFtZSgiIC4gSlNWYWx1ZVRvTmF0aXZlKCRhdHRyaWJ1dGUtPnNpZ25hdHVy
ZSwgInZhbHVlIikgLiAiKTtcbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
ICAgICBzdGF0aWNfY2FzdDwkY2xhc3NOYW1lKj4odGhpc09iamVjdCktPmltcGwoKS0+Y29tbWl0
Q2hhbmdlKGltcCwgc3RhdGljX2Nhc3Q8JGNsYXNzTmFtZSo+KHRoaXNPYmplY3QpLT5jb250ZXh0
KCkpO1xuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIGltcC0+Y29tbWl0Q2hhbmdlKHBvZEltcCwgY2FzdGVkVGhpc09iaik7XG4iKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAkaW1wbENsYXNzTmFtZSogaW1w
ID0gc3RhdGljX2Nhc3Q8JGltcGxDbGFzc05hbWUqPihzdGF0aWNfY2FzdDwkY2xhc3NOYW1lKj4o
dGhpc09iamVjdCktPmltcGwoKSk7XG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbXkgJG5hdGl2ZVZhbHVlID0gSlNWYWx1ZVRvTmF0aXZlKCRhdHRyaWJ1dGUtPnNpZ25hdHVy
ZSwgInZhbHVlIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwO1xuIikgaWYgQHskYXR0cmlidXRlLT5z
ZXR0ZXJFeGNlcHRpb25zfTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJHJl
ZmxlY3QgPSAkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJSZWZs
ZWN0In07CkBAIC0xNTIwLDExICsxNDkwLDYgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIsIGVj
IikgaWYgQHskYXR0cmlidXRlLT5zZXR0ZXJFeGNlcHRpb25zfTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIpO1xuIik7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHNldERPTUV4Y2VwdGlv
bihleGVjLCBlYyk7XG4iKSBpZiBAeyRhdHRyaWJ1dGUtPnNldHRlckV4Y2VwdGlvbnN9OwotCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1NWR1R5cGVOZWVkaW5nQ29udGV4
dFBhcmFtZXRlcigkaW1wbENsYXNzTmFtZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChzdGF0aWNfY2FzdDwkY2xhc3NO
YW1lKj4odGhpc09iamVjdCktPmNvbnRleHQoKSlcbiIpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHN0YXRpY19jYXN0PCRj
bGFzc05hbWUqPih0aGlzT2JqZWN0KS0+Y29udGV4dCgpLT5zdmdBdHRyaWJ1dGVDaGFuZ2VkKHN0
YXRpY19jYXN0PCRjbGFzc05hbWUqPih0aGlzT2JqZWN0KS0+aW1wbCgpLT5hc3NvY2lhdGVkQXR0
cmlidXRlTmFtZSgpKTtcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAgICAgCkBAIC0xNTg5LDEyICsxNTU0LDggQEAgc3ViIEdlbmVy
YXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgIGlmICgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbSJ9IHx8ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNDQ3VzdG9tIn0pIHsKICAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gY2FzdGVkVGhpc09iai0+IiAuICRmdW5jdGlvbklt
cGxlbWVudGF0aW9uTmFtZSAuICIoZXhlYywgYXJncyk7XG4iKTsKICAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgaWYgKCRwb2RUeXBlKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIEpTU1ZHUE9EVHlwZVdyYXBwZXI8JHBvZFR5cGU+KiB3
cmFwcGVyID0gY2FzdGVkVGhpc09iai0+aW1wbCgpO1xuIik7Ci0gICAgICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgICRwb2RUeXBlIGltcCgqd3JhcHBlcik7XG4iKTsKLSAg
ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICAkaW1wbENsYXNzTmFtZSogaW1wID0gc3RhdGljX2Nhc3Q8JGltcGxDbGFzc05h
bWUqPihjYXN0ZWRUaGlzT2JqLT5pbXBsKCkpO1xuIik7Ci0gICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICRpbXBsVHlwZSogaW1wID0gc3Rh
dGljX2Nhc3Q8JGltcGxUeXBlKj4oY2FzdGVkVGhpc09iai0+aW1wbCgpKTtcbiIpOworICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICRwb2RUeXBlIHBvZEltcCgqaW1wKTtc
biIpIGlmICRwb2RUeXBlOwogCiAgICAgICAgICAgICAgICAgbXkgJG51bVBhcmFtZXRlcnMgPSBA
eyRmdW5jdGlvbi0+cGFyYW1ldGVyc307CiAKQEAgLTE2MTQsNyArMTU3NSw3IEBAIHN1YiBHZW5l
cmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAg
bXkgJHBhcmFtSW5kZXggPSAwOwotICAgICAgICAgICAgICAgIG15ICRmdW5jdGlvblN0cmluZyA9
ICJpbXAiIC4gKCRwb2RUeXBlID8gIi4iIDogIi0+IikgLiAkZnVuY3Rpb25JbXBsZW1lbnRhdGlv
bk5hbWUgLiAiKCI7CisgICAgICAgICAgICAgICAgbXkgJGZ1bmN0aW9uU3RyaW5nID0gKCRwb2RU
eXBlID8gInBvZEltcC4iIDogImltcC0+IikgLiAkZnVuY3Rpb25JbXBsZW1lbnRhdGlvbk5hbWUg
LiAiKCI7CiAKICAgICAgICAgICAgICAgICBteSAkaGFzT3B0aW9uYWxBcmd1bWVudHMgPSAwOwog
CkBAIC0xNzI1LDExICsxNjg2LDEwIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAg
ICAgIGlmICgkcG9kVHlwZSkgewogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJKU0M6
OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNTVkdQT0RUeXBlV3JhcHBlcjwkcG9kVHlwZT4qIG9iamVjdCwgU1ZHRWxl
bWVudCogY29udGV4dClcbiIpOwogICAgICAgICB9IGVsc2lmIChJc1NWR1R5cGVOZWVkaW5nQ29u
dGV4dFBhcmFtZXRlcigkaW1wbENsYXNzTmFtZSkpIHsKLSAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIkpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCAkaW1wbFR5cGUqIG9iamVjdCwgU1ZHRWxlbWVudCog
Y29udGV4dClcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJKU0M6OkpTVmFs
dWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgJGltcGxUeXBlKiBvYmplY3QsIFNWR0VsZW1lbnQqIGNvbnRleHQpXG4iKTsKICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiSlNDOjpKU1ZhbHVl
IHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsICRpbXBsVHlwZSogb2JqZWN0KVxuIik7CiAgICAgICAgIH0KLQogICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIntcbiIpOwogICAgICAgICBpZiAoJHBvZFR5cGUpIHsKICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBnZXRET01PYmplY3RXcmFwcGVyPCRjbGFz
c05hbWUsIEpTU1ZHUE9EVHlwZVdyYXBwZXI8JHBvZFR5cGU+ID4oZXhlYywgZ2xvYmFsT2JqZWN0
LCBvYmplY3QsIGNvbnRleHQpO1xuIik7CkBAIC0xNzg3LDExICsxNzQ3LDcgQEAgc3ViIEdlbmVy
YXRlSW1wbGVtZW50YXRpb25GdW5jdGlvbkNhbGwoKQogICAgIGlmICgkZnVuY3Rpb24tPnNpZ25h
dHVyZS0+dHlwZSBlcSAidm9pZCIpIHsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICRpbmRl
bnQgLiAiJGZ1bmN0aW9uU3RyaW5nO1xuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAk
aW5kZW50IC4gInNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7XG4iKSBpZiBAeyRmdW5jdGlvbi0+
cmFpc2VzRXhjZXB0aW9uc307Ci0KLSAgICAgICAgaWYgKCRwb2RUeXBlKSB7Ci0gICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgJGluZGVudCAuICJ3cmFwcGVyLT5jb21taXRDaGFuZ2UoaW1w
LCBjYXN0ZWRUaGlzT2JqLT5jb250ZXh0KCkpO1xuIik7Ci0gICAgICAgIH0KLQorICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgJGluZGVudCAuICJpbXAtPmNvbW1pdENoYW5nZShwb2RJbXAsIGNh
c3RlZFRoaXNPYmopO1xuIikgaWYgJHBvZFR5cGU7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAkaW5kZW50IC4gInJldHVybiBqc1VuZGVmaW5lZCgpO1xuIik7CiAgICAgfSBlbHNlIHsKICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiIgLiAkaW5kZW50IC4gIkpTQzo6SlNWYWx1ZSBy
ZXN1bHQgPSAiIC4gTmF0aXZlVG9KU1ZhbHVlKCRmdW5jdGlvbi0+c2lnbmF0dXJlLCAxLCAkaW1w
bENsYXNzTmFtZSwgIiIsICRmdW5jdGlvblN0cmluZywgImNhc3RlZFRoaXNPYmoiKSAuICI7XG4i
KTsKQEAgLTE4MDAsNyArMTc1Niw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uRnVuY3Rp
b25DYWxsKCkKICAgICAgICAgaWYgKCRwb2RUeXBlIGFuZCBub3QgJGZ1bmN0aW9uLT5zaWduYXR1
cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJJbW11dGFibGUifSkgewogICAgICAgICAgICAgIyBJ
bW11dGFibGUgbWV0aG9kcyBkbyBub3QgY29tbWl0IGNoYW5nZXMgYmFjayB0byB0aGUgaW5zdGFu
Y2UsIHRodXMgcHJvZHVjaW5nCiAgICAgICAgICAgICAjIGEgbmV3IGluc3RhbmNlIHJhdGhlciB0
aGFuIG11dGF0aW5nIGV4aXN0aW5nIG9uZS4KLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAkaW5kZW50IC4gIndyYXBwZXItPmNvbW1pdENoYW5nZShpbXAsIGNhc3RlZFRoaXNPYmotPmNv
bnRleHQoKSk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAkaW5kZW50IC4g
ImltcC0+Y29tbWl0Q2hhbmdlKHBvZEltcCwgY2FzdGVkVGhpc09iaik7XG4iKSBpZiAkcG9kVHlw
ZTsKICAgICAgICAgfQogCiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAkaW5kZW50IC4gInJl
dHVybiByZXN1bHQ7XG4iKTsKQEAgLTE5MjAsOSArMTg3Niw3IEBAIHN1YiBOYXRpdmVUb0pTVmFs
dWUKICAgICAgICAgcmV0dXJuICJqc1N0cmluZyhleGVjLCAkdmFsdWUpIjsKICAgICB9CiAgICAg
Ci0gICAgIyBTb21lIFNWRyBiaW5kaW5ncyBkb24ndCBoYXZlIHNwYWNlIHRvIHN0b3JlIGEgZ2xv
YmFsT2JqZWN0IHBvaW50ZXIsIGZvciB0aG9zZSwgd2UgdXNlIHRoZSBkZXByZWNhdGVkR2xvYmFs
T2JqZWN0Rm9yUHJvdG90eXBlIGhhY2sgZm9yIG5vdy4KLSAgICBteSAkZ2xvYmFsT2JqZWN0ID0g
SXNTVkdUeXBlTmVlZGluZ0NvbnRleHRQYXJhbWV0ZXIoJGltcGxDbGFzc05hbWUpID8gImRlcHJl
Y2F0ZWRHbG9iYWxPYmplY3RGb3JQcm90b3R5cGUoZXhlYykiIDogIiR0aGlzVmFsdWUtPmdsb2Jh
bE9iamVjdCgpIjsKLQorICAgIG15ICRnbG9iYWxPYmplY3QgPSAiJHRoaXNWYWx1ZS0+Z2xvYmFs
T2JqZWN0KCkiOwogICAgIGlmICgkY29kZUdlbmVyYXRvci0+SXNQb2RUeXBlKCR0eXBlKSkgewog
ICAgICAgICAkaW1wbEluY2x1ZGVzeyJKUyR0eXBlLmgifSA9IDE7CiAKQEAgLTE5NDAsMjUgKzE4
OTQsMTYgQEAgc3ViIE5hdGl2ZVRvSlNWYWx1ZQogICAgICAgICAgICAgYW5kICRjb2RlR2VuZXJh
dG9yLT5Jc1BvZFR5cGVXaXRoV3JpdGVhYmxlUHJvcGVydGllcygkdHlwZSkKICAgICAgICAgICAg
IGFuZCBub3QgZGVmaW5lZCAkc2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSW1tdXRh
YmxlIn0pIHsKICAgICAgICAgICAgIGlmICgkY29kZUdlbmVyYXRvci0+SXNQb2RUeXBlKCRpbXBs
Q2xhc3NOYW1lKSkgewotICAgICAgICAgICAgICAgIHJldHVybiAidG9KUyhleGVjLCAkZ2xvYmFs
T2JqZWN0LCBKU1NWR1N0YXRpY1BPRFR5cGVXcmFwcGVyV2l0aFBPRFR5cGVQYXJlbnQ8JG5hdGl2
ZVR5cGUsICRpbXBsQ2xhc3NOYW1lPjo6Y3JlYXRlKCR2YWx1ZSwgJHRoaXNWYWx1ZS0+aW1wbCgp
KS5nZXQoKSwgJHRoaXNWYWx1ZS0+Y29udGV4dCgpKSI7CisgICAgICAgICAgICAgICAgcmV0dXJu
ICJ0b0pTKGV4ZWMsICRnbG9iYWxPYmplY3QsIEpTU1ZHU3RhdGljUE9EVHlwZVdyYXBwZXJXaXRo
UE9EVHlwZVBhcmVudDwkbmF0aXZlVHlwZSwgJGltcGxDbGFzc05hbWU+OjpjcmVhdGUoJHZhbHVl
LCAkdGhpc1ZhbHVlLT5pbXBsKCkpLmdldCgpLCBKU1NWR0NvbnRleHRDYWNoZTo6c3ZnQ29udGV4
dEZvckRPTU9iamVjdChjYXN0ZWRUaGlzKSkiOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgICAgICByZXR1cm4gInRvSlMoZXhlYywgJGdsb2JhbE9iamVjdCwgSlNTVkdTdGF0aWNQ
T0RUeXBlV3JhcHBlcldpdGhQYXJlbnQ8JG5hdGl2ZVR5cGUsICRpbXBsQ2xhc3NOYW1lPjo6Y3Jl
YXRlKGltcCwgJiR7aW1wbENsYXNzTmFtZX06OiRnZXR0ZXIsICYke2ltcGxDbGFzc05hbWV9Ojok
c2V0dGVyKS5nZXQoKSwgaW1wKSI7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAg
ICBpZiAoJGltcGxDbGFzc05hbWVGb3JWYWx1ZUNvbnZlcnNpb24gZXEgIiIpIHsKLSAgICAgICAg
ICAgICMgU1ZHWm9vbUV2ZW50IGhhcyBubyBjb250ZXh0KCkgcG9pbnRlciwgYW5kIGlzIGFsc28g
bm90IGFuIFNWR0VsZW1lbnQuCi0gICAgICAgICAgICAjIFRoaXMgaXMgbm90IGEgcHJvYmxlbSwg
YmVjYXVzZSBTVkdab29tRXZlbnQgaGFzIG5vIHJlYWQvd3JpdGUgcHJvcGVydGllcy4KLSAgICAg
ICAgICAgIHJldHVybiAidG9KUyhleGVjLCAkZ2xvYmFsT2JqZWN0LCBKU1NWR1N0YXRpY1BPRFR5
cGVXcmFwcGVyPCRuYXRpdmVUeXBlPjo6Y3JlYXRlKCR2YWx1ZSkuZ2V0KCksIDApIiBpZiAkaW1w
bENsYXNzTmFtZSBlcSAiU1ZHWm9vbUV2ZW50IjsKLQotICAgICAgICAgICAgaWYgKElzU1ZHVHlw
ZU5lZWRpbmdDb250ZXh0UGFyYW1ldGVyKCRpbXBsQ2xhc3NOYW1lKSkgewotICAgICAgICAgICAg
ICAgIHJldHVybiAidG9KUyhleGVjLCAkZ2xvYmFsT2JqZWN0LCBKU1NWR1N0YXRpY1BPRFR5cGVX
cmFwcGVyPCRuYXRpdmVUeXBlPjo6Y3JlYXRlKCR2YWx1ZSkuZ2V0KCksIGNhc3RlZFRoaXNPYmot
PmNvbnRleHQoKSkiIGlmICRpbkZ1bmN0aW9uQ2FsbDsKLSAgICAgICAgICAgICAgICByZXR1cm4g
InRvSlMoZXhlYywgJGdsb2JhbE9iamVjdCwgSlNTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcjwkbmF0
aXZlVHlwZT46OmNyZWF0ZSgkdmFsdWUpLmdldCgpLCAkdGhpc1ZhbHVlLT5jb250ZXh0KCkpIjsK
LSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJ0b0pTKGV4ZWMs
ICRnbG9iYWxPYmplY3QsIEpTU1ZHU3RhdGljUE9EVHlwZVdyYXBwZXI8JG5hdGl2ZVR5cGU+Ojpj
cmVhdGUoJHZhbHVlKS5nZXQoKSwgaW1wKSI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxz
ZSB7ICMgVGhlc2UgY2xhc3NlcywgYWx3YXlzIGhhdmUgYSBtX2NvbnRleHQgcG9pbnRlciEKLSAg
ICAgICAgICAgIHJldHVybiAidG9KUyhleGVjLCAkZ2xvYmFsT2JqZWN0LCBKU1NWR0R5bmFtaWNQ
T0RUeXBlV3JhcHBlckNhY2hlPCRuYXRpdmVUeXBlLCAkaW1wbENsYXNzTmFtZUZvclZhbHVlQ29u
dmVyc2lvbj46Omxvb2t1cE9yQ3JlYXRlV3JhcHBlcihpbXAsICYke2ltcGxDbGFzc05hbWVGb3JW
YWx1ZUNvbnZlcnNpb259OjokZ2V0dGVyLCAmJHtpbXBsQ2xhc3NOYW1lRm9yVmFsdWVDb252ZXJz
aW9ufTo6JHNldHRlcikuZ2V0KCksICR0aGlzVmFsdWUtPmNvbnRleHQoKSkiOworICAgICAgICAg
ICAgcmV0dXJuICJ0b0pTKGV4ZWMsICRnbG9iYWxPYmplY3QsIEpTU1ZHU3RhdGljUE9EVHlwZVdy
YXBwZXI8JG5hdGl2ZVR5cGU+OjpjcmVhdGUoJHZhbHVlKS5nZXQoKSwgMCAvKiBubyBjb250ZXh0
IG9uIHB1cnBvc2UgKi8pIjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiAi
dG9KUyhleGVjLCAkZ2xvYmFsT2JqZWN0LCBKU1NWR0R5bmFtaWNQT0RUeXBlV3JhcHBlckNhY2hl
PCRuYXRpdmVUeXBlLCAkaW1wbENsYXNzTmFtZUZvclZhbHVlQ29udmVyc2lvbj46Omxvb2t1cE9y
Q3JlYXRlV3JhcHBlcihpbXAsICYke2ltcGxDbGFzc05hbWVGb3JWYWx1ZUNvbnZlcnNpb259Ojok
Z2V0dGVyLCAmJHtpbXBsQ2xhc3NOYW1lRm9yVmFsdWVDb252ZXJzaW9ufTo6JHNldHRlcikuZ2V0
KCksIEpTU1ZHQ29udGV4dENhY2hlOjpzdmdDb250ZXh0Rm9yRE9NT2JqZWN0KGNhc3RlZFRoaXMp
KTsiCiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE5OTYsNyArMTk0MSw3IEBAIHN1YiBOYXRpdmVU
b0pTVmFsdWUKICAgICByZXR1cm4gJHZhbHVlIGlmICRjb2RlR2VuZXJhdG9yLT5Jc1NWR0FuaW1h
dGVkVHlwZSgkdHlwZSk7CiAKICAgICBpZiAoSXNTVkdUeXBlTmVlZGluZ0NvbnRleHRQYXJhbWV0
ZXIoJHR5cGUpKSB7Ci0gICAgICAgIG15ICRjb250ZXh0UHRyID0gSXNTVkdUeXBlTmVlZGluZ0Nv
bnRleHRQYXJhbWV0ZXIoJGltcGxDbGFzc05hbWUpID8gIiR0aGlzVmFsdWUtPmNvbnRleHQoKSIg
OiAiaW1wIjsKKyAgICAgICAgbXkgJGNvbnRleHRQdHIgPSBJc1NWR1R5cGVOZWVkaW5nQ29udGV4
dFBhcmFtZXRlcigkaW1wbENsYXNzTmFtZSkgPyAiSlNTVkdDb250ZXh0Q2FjaGU6OnN2Z0NvbnRl
eHRGb3JET01PYmplY3QoY2FzdGVkVGhpcykiIDogImltcCI7CiAgICAgICAgIHJldHVybiAidG9K
UyhleGVjLCAkZ2xvYmFsT2JqZWN0LCBXVEY6OmdldFB0cigkdmFsdWUpLCAkY29udGV4dFB0ciki
OwogICAgIH0KIApJbmRleDogV2ViQ29yZS9zdmcvU1ZHQW5nbGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3N2Zy9TVkdBbmdsZS5oCShyZXZpc2lvbiA1MjM4NSkKKysrIFdlYkNvcmUvc3ZnL1NW
R0FuZ2xlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDggKzI3LDYgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi0gICAgY2xhc3MgU1ZHU3R5bGVkRWxlbWVudDsKLQogICAgIGNsYXNzIFNWR0Fu
Z2xlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIFNWR0FuZ2xlKCk7CkBAIC01Niw5ICs1NCw2IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBuZXdWYWx1ZVNwZWNpZmllZFVuaXRz
KHVuc2lnbmVkIHNob3J0IHVuaXRUeXBlLCBmbG9hdCB2YWx1ZUluU3BlY2lmaWVkVW5pdHMpOwog
ICAgICAgICB2b2lkIGNvbnZlcnRUb1NwZWNpZmllZFVuaXRzKHVuc2lnbmVkIHNob3J0IHVuaXRU
eXBlKTsKIAotICAgICAgICAvLyBUaHJvdWdob3V0IFNWRyAxLjEgJ1NWR0FuZ2xlJyBpcyBvbmx5
IHVzZWQgZm9yICdTVkdNYXJrZXJFbGVtZW50JyAob3JpZW50LWFuZ2xlKQotICAgICAgICBjb25z
dCBRdWFsaWZpZWROYW1lJiBhc3NvY2lhdGVkQXR0cmlidXRlTmFtZSgpIGNvbnN0IHsgcmV0dXJu
IFNWR05hbWVzOjpvcmllbnRBdHRyOyB9Ci0KICAgICBwcml2YXRlOgogICAgICAgICBTVkdBbmds
ZVR5cGUgbV91bml0VHlwZTsKICAgICAgICAgZmxvYXQgbV92YWx1ZTsKSW5kZXg6IFdlYkNvcmUv
c3ZnL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9T
VkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmgJKHJldmlzaW9uIDUyMzg1KQorKysgV2ViQ29yZS9zdmcv
U1ZHUHJlc2VydmVBc3BlY3RSYXRpby5oCSh3b3JraW5nIGNvcHkpCkBAIC04MSw4ICs4MSw2IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBTdHJpbmcgdmFsdWVBc1N0cmluZygpIGNv
bnN0OwogCi0gICAgICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIGFzc29jaWF0ZWRBdHRyaWJ1dGVO
YW1lKCkgY29uc3QgeyByZXR1cm4gU1ZHTmFtZXM6OnByZXNlcnZlQXNwZWN0UmF0aW9BdHRyOyB9
Ci0KICAgICBwcml2YXRlOgogICAgICAgICB1bnNpZ25lZCBzaG9ydCBtX2FsaWduOwogICAgICAg
ICB1bnNpZ25lZCBzaG9ydCBtX21lZXRPclNsaWNlOwpJbmRleDogV2ViQ29yZS9zdmcvU1ZHVHJh
bnNmb3JtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtLmgJKHJldmlz
aW9uIDUyMzg1KQorKysgV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtLmgJKHdvcmtpbmcgY29weSkK
QEAgLTU0LDcgKzU0LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBmbG9hdCBhbmds
ZSgpIGNvbnN0OwogICAgICAgICBGbG9hdFBvaW50IHJvdGF0aW9uQ2VudGVyKCkgY29uc3Q7CiAK
LS8vICAgICAgICB2b2lkIHNldE1hdHJpeChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwog
ICAgICAgICB2b2lkIHNldE1hdHJpeChUcmFuc2Zvcm1hdGlvbk1hdHJpeCk7CiAKICAgICAgICAg
dm9pZCBzZXRUcmFuc2xhdGUoZmxvYXQgdHgsIGZsb2F0IHR5KTsKQEAgLTY5LDkgKzY4LDYgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAKICAgICAgICAgYm9vbCBpc1ZhbGlkKCk7CiAK
LSAgICAgICAgLy8gVGhyb3VnaG91dCBTVkcgMS4xICdTVkdUcmFuc2Zvcm0nIGlzIG9ubHkgdXNl
ZCBmb3IgdGhlICd0cmFuc2Zvcm0nIGF0dHJpYnV0ZQotICAgICAgICBjb25zdCBRdWFsaWZpZWRO
YW1lJiBhc3NvY2lhdGVkQXR0cmlidXRlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIFNWR05hbWVzOjp0
cmFuc2Zvcm1BdHRyOyB9Ci0KICAgICBwcml2YXRlOgogICAgICAgICBTVkdUcmFuc2Zvcm1UeXBl
IG1fdHlwZTsKICAgICAgICAgZmxvYXQgbV9hbmdsZTsKQEAgLTkzLDUgKzg5LDMgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiAjZW5kaWYgLy8gRU5BQkxFKFNWRykKICNlbmRpZgotCi0vLyB2aW06
dHM9NDpub2V0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45345</attachid>
            <date>2009-12-21 13:22:10 -0800</date>
            <delta_ts>2009-12-21 15:11:22 -0800</delta_ts>
            <desc>Updated patch</desc>
            <filename>KillSVGJSGlobalStuff.diff</filename>
            <type>text/plain</type>
            <size>62595</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MjQ1MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzggQEAKKzIwMDktMTItMjEgIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJt
YW5uQHJpbS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgU1ZHIEpTIGJpbmRpbmdzICJjb250ZXh0IiBwb2ludGVyIG5lZWRzIHRvIG1vdmUgb250
byBiaW5kaW5nIGltcGxzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yNzI0MworCisgICAgICAgIFJld3JpdGUgU1ZHIERPTSBKU0MgYmluZGluZ3MgdG8g
dXNlIGEgZ2xvYmFsIERPTU9iamVjdCA8LT4gU1ZHRWxlbWVudCBjb250ZXh0IG1hcCwgc2ltaWxh
ciB0byBWOCdzIGFwcHJvYWNoLgorICAgICAgICBUaGlzIGFsbG93cyB1cyB0byByZW1vdmUgRE9N
T2JqZWN0V2l0aFNWR0NvbnRleHQgYW5kIG1ha2UgYWxsIFNWRyBKUyBvYmplY3RzIHVzZSBET01P
YmplY3RXaXRoR2xvYmFsUG9pbnRlciwKKyAgICAgICAgZml4aW5nIGNyb3NzLWZyYW1lIHByb3Rv
dHlwZSBjaGFpbiBmb3IgU1ZHLCBpbiB0aGUgc2FtZSB3YXkgbGlrZSBpdCBoYXMgYmVlbiBmaXhl
ZCBmb3IgSFRNTCBiZWZvcmUuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisgICAgICAgICogYmluZGluZ3MvanMvRE9NT2JqZWN0V2l0aFNWR0NvbnRleHQu
aDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6c2V0RE9NRXhjZXB0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U0RPTUJpbmRpbmcuaDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZURPTU9iamVjdFdyYXBwZXIp
OgorICAgICAgICAoV2ViQ29yZTo6Z2V0RE9NT2JqZWN0V3JhcHBlcik6CisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNTVkdDb250ZXh0Q2FjaGUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpK
U1NWR0NvbnRleHRDYWNoZTo6d3JhcHBlck1hcCk6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR0Nv
bnRleHRDYWNoZTo6YWRkV3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR0NvbnRleHRD
YWNoZTo6Zm9yZ2V0V3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR0NvbnRleHRDYWNo
ZTo6cHJvcGFnYXRlU1ZHRE9NQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHQ29udGV4
dENhY2hlOjpzdmdDb250ZXh0Rm9yRE9NT2JqZWN0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U1NWR0xlbmd0aEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR0xlbmd0aDo6dmFs
dWUpOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdMZW5ndGg6OmNvbnZlcnRUb1NwZWNpZmllZFVu
aXRzKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1NWR01hdHJpeEN1c3RvbS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKU1NWR01hdHJpeDo6bXVsdGlwbHkpOgorICAgICAgICAoV2ViQ29yZTo6
SlNTVkdNYXRyaXg6OmludmVyc2UpOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdNYXRyaXg6OnJv
dGF0ZUZyb21WZWN0b3IpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU1ZHUE9EVHlwZVdyYXBw
ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHRHluYW1pY1BPRFR5cGVXcmFwcGVyOjpjb21t
aXRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcjo6
Y29tbWl0Q2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHU3RhdGljUE9EVHlwZVdyYXBw
ZXJXaXRoUE9EVHlwZVBhcmVudDo6Y29tbWl0Q2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkpT
U1ZHU3RhdGljUE9EVHlwZVdyYXBwZXJXaXRoUGFyZW50Ojpjb21taXRDaGFuZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNTVkdQT0RUeXBlV3JhcHBlckNyZWF0b3JGb3JMaXN0OjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNTVkdQT0RUeXBlV3JhcHBlckNyZWF0b3JGb3JMaXN0Ojpjb21t
aXRDaGFuZ2UpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU1ZHUGF0aFNlZ0N1c3RvbS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1NWR1Bh
dGhTZWdMaXN0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHUGF0aFNlZ0xpc3Q6
OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHUGF0aFNlZ0xpc3Q6OmluaXRpYWxpemUp
OgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdQYXRoU2VnTGlzdDo6Z2V0SXRlbSk6CisgICAgICAg
IChXZWJDb3JlOjpKU1NWR1BhdGhTZWdMaXN0OjppbnNlcnRJdGVtQmVmb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkpTU1ZHUGF0aFNlZ0xpc3Q6OnJlcGxhY2VJdGVtKToKKyAgICAgICAgKFdlYkNv
cmU6OkpTU1ZHUGF0aFNlZ0xpc3Q6OnJlbW92ZUl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6SlNT
VkdQYXRoU2VnTGlzdDo6YXBwZW5kSXRlbSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNTVkdQ
b2ludExpc3RDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZmluaXNoR2V0dGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OmZpbmlzaFNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpmaW5pc2hT
ZXR0ZXJSZWFkT25seVJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR1BvaW50TGlzdDo6
Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdQb2ludExpc3Q6OmluaXRpYWxpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNTVkdQb2ludExpc3Q6OmdldEl0ZW0pOgorICAgICAgICAoV2Vi
Q29yZTo6SlNTVkdQb2ludExpc3Q6Omluc2VydEl0ZW1CZWZvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNTVkdQb2ludExpc3Q6OnJlcGxhY2VJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZH
UG9pbnRMaXN0OjpyZW1vdmVJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHUG9pbnRMaXN0
OjphcHBlbmRJdGVtKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1NWR1RyYW5zZm9ybUxpc3RD
dXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZmluaXNoR2V0dGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OmZpbmlzaFNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpmaW5pc2hTZXR0ZXJSZWFk
T25seVJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR1RyYW5zZm9ybUxpc3Q6OmNsZWFy
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHVHJhbnNmb3JtTGlzdDo6aW5pdGlhbGl6ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1NWR1RyYW5zZm9ybUxpc3Q6OmdldEl0ZW0pOgorICAgICAgICAo
V2ViQ29yZTo6SlNTVkdUcmFuc2Zvcm1MaXN0OjppbnNlcnRJdGVtQmVmb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkpTU1ZHVHJhbnNmb3JtTGlzdDo6cmVwbGFjZUl0ZW0pOgorICAgICAgICAoV2Vi
Q29yZTo6SlNTVkdUcmFuc2Zvcm1MaXN0OjpyZW1vdmVJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTU1ZHVHJhbnNmb3JtTGlzdDo6YXBwZW5kSXRlbSk6CisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgICogc3ZnL1NWR0FuZ2xlLmg6CisgICAg
ICAgICogc3ZnL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW8uaDoKKyAgICAgICAgKiBzdmcvU1ZHVHJh
bnNmb3JtLmg6CisKIDIwMDktMTItMjEgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IE1hcmsgUm93ZS4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA1MjM4NSkKKysrIFdlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC02Miw2ICs2
Miw3IEBACiAJCTA4MjAzQUEwMEVEOEMzNTMwMEI4QjYxQSAvKiBXTUxBY2Nlc3NFbGVtZW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODIwM0E5RTBF
RDhDMzUzMDBCOEI2MUEgLyogV01MQWNjZXNzRWxlbWVudC5oICovOyB9OwogCQkwODIzNDFDNTBG
Q0YzQTk1MDBENzVCRDYgLyogV01MU2VsZWN0RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODIzNDFDMzBGQ0YzQTk0MDBENzVCRDYgLyog
V01MU2VsZWN0RWxlbWVudC5jcHAgKi87IH07CiAJCTA4MjM0MUM2MEZDRjNBOTUwMEQ3NUJENiAv
KiBXTUxTZWxlY3RFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwODIzNDFDNDBGQ0YzQTk0MDBENzVCRDYgLyogV01MU2VsZWN0RWxlbWVudC5o
ICovOyB9OworCQkwODI1NTg4MTEwRTAwN0RBMDA2MTE1QjcgLyogSlNTVkdDb250ZXh0Q2FjaGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4MjU1ODgw
MTBFMDA3REEwMDYxMTVCNyAvKiBKU1NWR0NvbnRleHRDYWNoZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTA4Mzk0NzZDMEVDRTRCRDYwMDAyNzM1
MCAvKiBXTUxFbGVtZW50RmFjdG9yeS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwOEZCODRCMDBFQ0UzNzMzMDBEQzA2NEUgLyogV01MRWxlbWVudEZh
Y3RvcnkuY3BwICovOyB9OwogCQkwODM5NDc2RDBFQ0U0QkQ2MDAwMjczNTAgLyogV01MRWxlbWVu
dEZhY3RvcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDA4RkI4NEIxMEVDRTM3MzMwMERDMDY0RSAvKiBXTUxFbGVtZW50RmFjdG9yeS5oICovOyB9Owog
CQkwODNEQUVBNjBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgzREFF
QTIwRjAxQTdGQjAwMzQyNzU0IC8qIFJlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmNwcCAqLzsg
fTsKQEAgLTUyNzgsNiArNTI3OSw3IEBACiAJCTA4MjAzQTlFMEVEOEMzNTMwMEI4QjYxQSAvKiBX
TUxBY2Nlc3NFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdNTEFj
Y2Vzc0VsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDgyMzQxQzMwRkNG
M0E5NDAwRDc1QkQ2IC8qIFdNTFNlbGVjdEVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gV01MU2VsZWN0RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTA4MjM0MUM0MEZDRjNBOTQwMEQ3NUJENiAvKiBXTUxTZWxlY3RFbGVtZW50
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdNTFNlbGVjdEVsZW1lbnQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMDgyNTU4ODAxMEUwMDdEQTAwNjExNUI3IC8q
IEpTU1ZHQ29udGV4dENhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
U1ZHQ29udGV4dENhY2hlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4M0RBRUEy
MEYwMUE3RkIwMDM0Mjc1NCAvKiBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGlu
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4M0RBRUEzMEYwMUE3RkIwMDM0
Mjc1NCAvKiBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwODNEQUVBNDBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xNDQzMCw2ICsxNDQzMiw3IEBACiAJCQkJNDE1QjdDNTUwRkY1OThFNjAwNjc3MEY3
IC8qIEpTU2hhcmVkV29ya2VyQ29uc3RydWN0b3IuY3BwICovLAogCQkJCTQxNUI3QzYyMEZGNUE3
NjcwMDY3NzBGNyAvKiBKU1NoYXJlZFdvcmtlckNvbnN0cnVjdG9yLmggKi8sCiAJCQkJMTRDRDhE
ODExMDZCNTI5MDAwQTQ2RDIzIC8qIEpTU2hhcmVkV29ya2VyQ3VzdG9tLmNwcCAqLywKKwkJCQkw
ODI1NTg4MDEwRTAwN0RBMDA2MTE1QjcgLyogSlNTVkdDb250ZXh0Q2FjaGUuaCAqLywKIAkJCQlC
MjExMjdBNTBCMzE4Njc3MDAwOUJFNTMgLyogSlNTVkdQT0RUeXBlV3JhcHBlci5oICovLAogCQkJ
CUUxQzM2RDMyMEVCMEEwOTQwMDc0MTBCQyAvKiBKU1dvcmtlckNvbnRleHRCYXNlLmNwcCAqLywK
IAkJCQlFMUMzNkQzMzBFQjBBMDk0MDA3NDEwQkMgLyogSlNXb3JrZXJDb250ZXh0QmFzZS5oICov
LApAQCAtMTgyNjUsNiArMTgyNjgsNyBAQAogCQkJCUJDNTZDQjIzMTBENUFDODAwMEE3N0M2NCAv
KiBHZW9sb2NhdGlvbkNvbnRyb2xsZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNTZD
QjI0MTBENUFDODAwMEE3N0M2NCAvKiBHZW9sb2NhdGlvbkVycm9yLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQzU2Q0IyNTEwRDVBQzgwMDBBNzdDNjQgLyogR2VvbG9jYXRpb25Qb3NpdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMDgyNTU4ODExMEUwMDdEQTAwNjExNUI3IC8qIEpTU1ZHQ29udGV4
dENhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBv
c3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvRE9NT2Jq
ZWN0V2l0aFNWR0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0RP
TU9iamVjdFdpdGhTVkdDb250ZXh0LmgJKHJldmlzaW9uIDUyMzg1KQorKysgV2ViQ29yZS9iaW5k
aW5ncy9qcy9ET01PYmplY3RXaXRoU1ZHQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDU3
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlLCBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKLSAqIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMKLSAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCi0gKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
QVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQKLSAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgRE9NT2Jq
ZWN0V2l0aFNWR0NvbnRleHRfaAotI2RlZmluZSBET01PYmplY3RXaXRoU1ZHQ29udGV4dF9oCi0K
LSNpZiBFTkFCTEUoU1ZHKQotCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCi0jaW5jbHVkZSAi
U1ZHRWxlbWVudC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSAgICAvLyBGSVhNRTogVGhp
cyBjbGFzcyAoYW5kIGZpbGUpIHNob3VsZCBiZSByZW1vdmVkIG9uY2UgYWxsIFNWRyBiaW5kaW5n
cwotICAgIC8vIGhhdmUgbW92ZWQgY29udGV4dCgpIG9udG8gdGhlIHZhcmlvdXMgaW1wbCgpIHBv
aW50ZXJzLgotICAgIGNsYXNzIERPTU9iamVjdFdpdGhTVkdDb250ZXh0IDogcHVibGljIERPTU9i
amVjdCB7Ci0gICAgcHVibGljOgotICAgICAgICBTVkdFbGVtZW50KiBjb250ZXh0KCkgY29uc3Qg
eyByZXR1cm4gbV9jb250ZXh0LmdldCgpOyB9Ci0KLSAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIERP
TU9iamVjdFdpdGhTVkdDb250ZXh0KE5vbk51bGxQYXNzUmVmUHRyPEpTQzo6U3RydWN0dXJlPiBz
dHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiwgU1ZHRWxlbWVudCogY29udGV4dCkKLSAgICAg
ICAgICAgIDogRE9NT2JqZWN0KHN0cnVjdHVyZSkKLSAgICAgICAgICAgICwgbV9jb250ZXh0KGNv
bnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIE5vIHNwYWNlIHRvIHN0b3JlIHRoZSBK
U0RPTUdsb2JhbE9iamVjdCB3L28gaGl0dGluZyB0aGUgQ0VMTF9TSVpFIGxpbWl0LgotICAgICAg
ICB9Ci0KLSAgICBwcm90ZWN0ZWQ6IC8vIEZJWE1FOiBNYW55IGN1c3RvbSBiaW5kaW5ncyB1c2Ug
bV9jb250ZXh0IGRpcmVjdGx5LiAgTWFraW5nIHRoaXMgcHJvdGVjdGVkIHRvIHRlbXBvcmFyaWxp
eSByZWR1Y2UgY29kZSBjaHVybi4KLSAgICAgICAgUmVmUHRyPFNWR0VsZW1lbnQ+IG1fY29udGV4
dDsKLSAgICB9OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUo
U1ZHKQotI2VuZGlmIC8vIERPTU9iamVjdFdpdGhTVkdDb250ZXh0X2gKSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NQmluZGluZy5jcHAJKHJldmlzaW9uIDUyMzg1KQorKysgV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NTQsNyArNjU0LDcg
QEAgdm9pZCBzZXRET01FeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBFeAogICAgICAgICAgICAg
YnJlYWs7CiAjaWYgRU5BQkxFKFNWRykKICAgICAgICAgY2FzZSBTVkdFeGNlcHRpb25UeXBlOgot
ICAgICAgICAgICAgZXJyb3JPYmplY3QgPSB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgU1ZHRXhj
ZXB0aW9uOjpjcmVhdGUoZGVzY3JpcHRpb24pLmdldCgpLCAwKTsKKyAgICAgICAgICAgIGVycm9y
T2JqZWN0ID0gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIFNWR0V4Y2VwdGlvbjo6Y3JlYXRlKGRl
c2NyaXB0aW9uKS5nZXQoKSwgMCAvKiBubyBjb250ZXh0IG9uIHB1cnBvc2UgKi8pOwogICAgICAg
ICAgICAgYnJlYWs7CiAjZW5kaWYKICNpZiBFTkFCTEUoWFBBVEgpCkluZGV4OiBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01CaW5kaW5nLmgJKHJldmlzaW9uIDUyMzg1KQorKysgV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTUJpbmRpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMsNyBAQAogI2RlZmlu
ZSBKU0RPTUJpbmRpbmdfaAogCiAjaW5jbHVkZSAiSlNET01HbG9iYWxPYmplY3QuaCIKKyNpbmNs
dWRlICJKU1NWR0NvbnRleHRDYWNoZS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVk
ZSA8cnVudGltZS9Db21wbGV0aW9uLmg+CiAjaW5jbHVkZSA8cnVudGltZS9Mb29rdXAuaD4KQEAg
LTI5NiwxOSArMjk3LDIxIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAjZGVmaW5lIENSRUFU
RV9TVkdfT0JKRUNUX1dSQVBQRVIoZXhlYywgZ2xvYmFsT2JqZWN0LCBjbGFzc05hbWUsIG9iamVj
dCwgY29udGV4dCkgY3JlYXRlRE9NT2JqZWN0V3JhcHBlcjxKUyMjY2xhc3NOYW1lPihleGVjLCBn
bG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PGNsYXNzTmFtZSo+KG9iamVjdCksIGNvbnRleHQpCiAg
ICAgdGVtcGxhdGU8Y2xhc3MgV3JhcHBlckNsYXNzLCBjbGFzcyBET01DbGFzcz4gaW5saW5lIERP
TU9iamVjdCogY3JlYXRlRE9NT2JqZWN0V3JhcHBlcihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRE9NQ2xhc3MqIG9iamVjdCwgU1ZHRWxlbWVu
dCogY29udGV4dCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChvYmplY3QpOwotICAgICAgICBBU1NF
UlQoIWdldENhY2hlZERPTU9iamVjdFdyYXBwZXIoZXhlYywgb2JqZWN0KSk7Ci0gICAgICAgIFdy
YXBwZXJDbGFzcyogd3JhcHBlciA9IG5ldyAoZXhlYykgV3JhcHBlckNsYXNzKGdldERPTVN0cnVj
dHVyZTxXcmFwcGVyQ2xhc3M+KGV4ZWMsIGdsb2JhbE9iamVjdCksIGdsb2JhbE9iamVjdCwgb2Jq
ZWN0LCBjb250ZXh0KTsKLSAgICAgICAgY2FjaGVET01PYmplY3RXcmFwcGVyKGV4ZWMsIG9iamVj
dCwgd3JhcHBlcik7CisgICAgICAgIERPTU9iamVjdCogd3JhcHBlciA9IGNyZWF0ZURPTU9iamVj
dFdyYXBwZXI8V3JhcHBlckNsYXNzLCBET01DbGFzcz4oZXhlYywgZ2xvYmFsT2JqZWN0LCBvYmpl
Y3QpOworICAgICAgICBBU1NFUlQod3JhcHBlcik7CisgICAgICAgIGlmIChjb250ZXh0KQorICAg
ICAgICAgICAgSlNTVkdDb250ZXh0Q2FjaGU6OmFkZFdyYXBwZXIod3JhcHBlciwgY29udGV4dCk7
CiAgICAgICAgIHJldHVybiB3cmFwcGVyOwogICAgIH0KICAgICB0ZW1wbGF0ZTxjbGFzcyBXcmFw
cGVyQ2xhc3MsIGNsYXNzIERPTUNsYXNzPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIGdldERPTU9iamVj
dFdyYXBwZXIoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIERPTUNsYXNzKiBvYmplY3QsIFNWR0VsZW1lbnQqIGNvbnRleHQpCiAgICAgewogICAg
ICAgICBpZiAoIW9iamVjdCkKICAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwotICAg
ICAgICBpZiAoRE9NT2JqZWN0KiB3cmFwcGVyID0gZ2V0Q2FjaGVkRE9NT2JqZWN0V3JhcHBlcihl
eGVjLCBvYmplY3QpKQorICAgICAgICBpZiAoRE9NT2JqZWN0KiB3cmFwcGVyID0gZ2V0Q2FjaGVk
RE9NT2JqZWN0V3JhcHBlcihleGVjLCBvYmplY3QpKSB7CisgICAgICAgICAgICBBU1NFUlQoSlNT
VkdDb250ZXh0Q2FjaGU6OnN2Z0NvbnRleHRGb3JET01PYmplY3Qod3JhcHBlcikgPT0gY29udGV4
dCk7CiAgICAgICAgICAgICByZXR1cm4gd3JhcHBlcjsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZURP
TU9iamVjdFdyYXBwZXI8V3JhcHBlckNsYXNzPihleGVjLCBnbG9iYWxPYmplY3QsIG9iamVjdCwg
Y29udGV4dCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGNyZWF0ZURPTU9iamVjdFdyYXBw
ZXI8V3JhcHBlckNsYXNzLCBET01DbGFzcz4oZXhlYywgZ2xvYmFsT2JqZWN0LCBvYmplY3QsIGNv
bnRleHQpOwogICAgIH0KICNlbmRpZgogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZH
Q29udGV4dENhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR0Nv
bnRleHRDYWNoZS5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR0Nv
bnRleHRDYWNoZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk2IEBACisvKgorICAgIENvcHly
aWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAwOS4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisqLworCisjaWZuZGVmIEpTU1ZHQ29udGV4dENhY2hlX2gKKyNkZWZpbmUgSlNTVkdDb250
ZXh0Q2FjaGVfaAorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJTVkdFbGVtZW50LmgiCisj
aW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIERPTU9iamVjdDsKKworY2xhc3MgSlNTVkdDb250ZXh0Q2FjaGUgOiBwdWJsaWMgTm9uY29w
eWFibGUgeworcHVibGljOgorICAgIHR5cGVkZWYgSGFzaE1hcDxET01PYmplY3QqLCBTVkdFbGVt
ZW50Kj4gV3JhcHBlck1hcDsKKworICAgIHN0YXRpYyBXcmFwcGVyTWFwJiB3cmFwcGVyTWFwKCkK
KyAgICB7CisgICAgICAgIERFRklORV9TVEFUSUNfTE9DQUwoV3JhcHBlck1hcCwgc193cmFwcGVy
TWFwLCAoKSk7CisgICAgICAgIHJldHVybiBzX3dyYXBwZXJNYXA7CisgICAgfQorCisgICAgc3Rh
dGljIHZvaWQgYWRkV3JhcHBlcihET01PYmplY3QqIHdyYXBwZXIsIFNWR0VsZW1lbnQqIGNvbnRl
eHQpCisgICAgeworICAgICAgICBBU1NFUlQod3JhcHBlcik7CisgICAgICAgIEFTU0VSVChjb250
ZXh0KTsKKworICAgICAgICBwYWlyPFdyYXBwZXJNYXA6Oml0ZXJhdG9yLCBib29sPiByZXN1bHQg
PSB3cmFwcGVyTWFwKCkuYWRkKHdyYXBwZXIsIGNvbnRleHQpOworICAgICAgICBpZiAocmVzdWx0
LnNlY29uZCkgeworICAgICAgICAgICAgV3JhcHBlck1hcDo6aXRlcmF0b3ImIGl0ID0gcmVzdWx0
LmZpcnN0OworICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChpdCwgaXQtPnNlY29uZCA9PSBjb250
ZXh0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGZvcmdldFdyYXBwZXIo
RE9NT2JqZWN0KiB3cmFwcGVyKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHdyYXBwZXIpOworCisg
ICAgICAgIFdyYXBwZXJNYXAmIG1hcCA9IHdyYXBwZXJNYXAoKTsKKyAgICAgICAgV3JhcHBlck1h
cDo6aXRlcmF0b3IgaXQgPSBtYXAuZmluZCh3cmFwcGVyKTsKKyAgICAgICAgaWYgKGl0ID09IG1h
cC5lbmQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBtYXAucmVtb3ZlKGl0KTsK
KyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBwcm9wYWdhdGVTVkdET01DaGFuZ2UoRE9NT2JqZWN0
KiB3cmFwcGVyLCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lKQorICAgIHsKKyAg
ICAgICAgV3JhcHBlck1hcCYgbWFwID0gd3JhcHBlck1hcCgpOworICAgICAgICBXcmFwcGVyTWFw
OjppdGVyYXRvciBpdCA9IG1hcC5maW5kKHdyYXBwZXIpOworICAgICAgICBpZiAoaXQgPT0gbWFw
LmVuZCgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFNWR0VsZW1lbnQqIGNvbnRl
eHQgPSBpdC0+c2Vjb25kOworICAgICAgICBBU1NFUlQoY29udGV4dCk7CisKKyAgICAgICAgY29u
dGV4dC0+c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyaWJ1dGVOYW1lKTsKKyAgICB9CisKKyAgICBz
dGF0aWMgU1ZHRWxlbWVudCogc3ZnQ29udGV4dEZvckRPTU9iamVjdChET01PYmplY3QqIHdyYXBw
ZXIpCisgICAgeworICAgICAgICBBU1NFUlQod3JhcHBlcik7CisKKyAgICAgICAgV3JhcHBlck1h
cCYgbWFwID0gd3JhcHBlck1hcCgpOworICAgICAgICBXcmFwcGVyTWFwOjppdGVyYXRvciBpdCA9
IG1hcC5maW5kKHdyYXBwZXIpOworICAgICAgICBBU1NFUlQoaXQgIT0gbWFwLmVuZCgpKTsKKwor
ICAgICAgICBTVkdFbGVtZW50KiBjb250ZXh0ID0gaXQtPnNlY29uZDsKKyAgICAgICAgQVNTRVJU
KGNvbnRleHQpOworICAgICAgICByZXR1cm4gY29udGV4dDsKKyAgICB9CisKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTVkcpCisjZW5kaWYgLy8gSlNT
VkdDb250ZXh0Q2FjaGVfaApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR0xlbmd0aEN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR0xlbmd0aEN1
c3RvbS5jcHAJKHJldmlzaW9uIDUyMzg1KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR0xl
bmd0aEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDE4ICsyOCwyMiBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIEpTVmFsdWUgSlNTVkdMZW5ndGg6OnZhbHVlKEV4ZWNTdGF0ZSogZXhl
YykgY29uc3QKIHsKLSAgICBTVkdMZW5ndGggaW1wKCppbXBsKCkpOwotICAgIHJldHVybiBqc051
bWJlcihleGVjLCBpbXAudmFsdWUoY29udGV4dCgpKSk7CisgICAgSlNTVkdQT0RUeXBlV3JhcHBl
cjxTVkdMZW5ndGg+KiBpbXAgPSBpbXBsKCk7CisgICAgU1ZHRWxlbWVudCogY29udGV4dCA9IEpT
U1ZHQ29udGV4dENhY2hlOjpzdmdDb250ZXh0Rm9yRE9NT2JqZWN0KGNvbnN0X2Nhc3Q8SlNTVkdM
ZW5ndGgqPih0aGlzKSk7CisKKyAgICBTVkdMZW5ndGggcG9kSW1wKCppbXApOworICAgIHJldHVy
biBqc051bWJlcihleGVjLCBwb2RJbXAudmFsdWUoY29udGV4dCkpOwogfQogCiBKU1ZhbHVlIEpT
U1ZHTGVuZ3RoOjpjb252ZXJ0VG9TcGVjaWZpZWRVbml0cyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IEFyZ0xpc3QmIGFyZ3MpCiB7Ci0gICAgSlNTVkdQT0RUeXBlV3JhcHBlcjxTVkdMZW5ndGg+KiB3
cmFwcGVyID0gaW1wbCgpOworICAgIEpTU1ZHUE9EVHlwZVdyYXBwZXI8U1ZHTGVuZ3RoPiogaW1w
ID0gaW1wbCgpOworICAgIFNWR0VsZW1lbnQqIGNvbnRleHQgPSBKU1NWR0NvbnRleHRDYWNoZTo6
c3ZnQ29udGV4dEZvckRPTU9iamVjdCh0aGlzKTsKIAotICAgIFNWR0xlbmd0aCBpbXAoKndyYXBw
ZXIpOwotICAgIGltcC5jb252ZXJ0VG9TcGVjaWZpZWRVbml0cyhhcmdzLmF0KDApLnRvSW50MzIo
ZXhlYyksIGNvbnRleHQoKSk7CisgICAgU1ZHTGVuZ3RoIHBvZEltcCgqaW1wKTsKKyAgICBwb2RJ
bXAuY29udmVydFRvU3BlY2lmaWVkVW5pdHMoYXJncy5hdCgwKS50b0ludDMyKGV4ZWMpLCBjb250
ZXh0KTsKIAotICAgIHdyYXBwZXItPmNvbW1pdENoYW5nZShpbXAsIGNvbnRleHQoKSk7CisgICAg
aW1wLT5jb21taXRDaGFuZ2UocG9kSW1wLCB0aGlzKTsKICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKIH0KIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR01hdHJpeEN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR01hdHJpeEN1c3RvbS5jcHAJ
KHJldmlzaW9uIDUyMzg1KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR01hdHJpeEN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDE1ICs0NCwxNiBAQCBKU1ZhbHVlIEpTU1ZHTWF0
cml4OjptdWx0aXBseShFeGVjU3RhdGUqCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbTEoKmlt
cGwoKSk7CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbTIoKihtYXRyaXhPYmotPmltcGwoKSkp
OwogCi0gICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhlYywgZGVwcmVjYXRlZEdsb2Jh
bE9iamVjdEZvclByb3RvdHlwZShleGVjKSwgSlNTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcjxUcmFu
c2Zvcm1hdGlvbk1hdHJpeD46OmNyZWF0ZShtMS5tdWx0TGVmdChtMikpLmdldCgpLCBtX2NvbnRl
eHQuZ2V0KCkpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBTVkdFbGVtZW50KiBjb250ZXh0
ID0gSlNTVkdDb250ZXh0Q2FjaGU6OnN2Z0NvbnRleHRGb3JET01PYmplY3QodGhpcyk7CisgICAg
cmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIEpTU1ZHU3RhdGljUE9EVHlwZVdyYXBw
ZXI8VHJhbnNmb3JtYXRpb25NYXRyaXg+OjpjcmVhdGUobTEubXVsdExlZnQobTIpKS5nZXQoKSwg
Y29udGV4dCk7CiB9CiAKIEpTVmFsdWUgSlNTVkdNYXRyaXg6OmludmVyc2UoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBBcmdMaXN0JikKIHsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpbXAoKmlt
cGwoKSk7Ci0gICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhlYywgZGVwcmVjYXRlZEds
b2JhbE9iamVjdEZvclByb3RvdHlwZShleGVjKSwgSlNTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcjxU
cmFuc2Zvcm1hdGlvbk1hdHJpeD46OmNyZWF0ZShpbXAuaW52ZXJzZSgpKS5nZXQoKSwgbV9jb250
ZXh0LmdldCgpKTsKKworICAgIFNWR0VsZW1lbnQqIGNvbnRleHQgPSBKU1NWR0NvbnRleHRDYWNo
ZTo6c3ZnQ29udGV4dEZvckRPTU9iamVjdCh0aGlzKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRv
SlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIEpTU1ZHU3RhdGljUE9EVHlwZVdyYXBwZXI8VHJhbnNm
b3JtYXRpb25NYXRyaXg+OjpjcmVhdGUoaW1wLmludmVyc2UoKSkuZ2V0KCksIGNvbnRleHQpOwog
CiAgICAgaWYgKCFpbXAuaXNJbnZlcnRpYmxlKCkpCiAgICAgICAgIHNldERPTUV4Y2VwdGlvbihl
eGVjLCBTVkdFeGNlcHRpb246OlNWR19NQVRSSVhfTk9UX0lOVkVSVEFCTEUpOwpAQCAtNjcsNyAr
NjgsOCBAQCBKU1ZhbHVlIEpTU1ZHTWF0cml4Ojpyb3RhdGVGcm9tVmVjdG9yKEV4CiAgICAgZmxv
YXQgeCA9IGFyZ3MuYXQoMCkudG9GbG9hdChleGVjKTsKICAgICBmbG9hdCB5ID0gYXJncy5hdCgx
KS50b0Zsb2F0KGV4ZWMpOwogCi0gICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhlYywg
ZGVwcmVjYXRlZEdsb2JhbE9iamVjdEZvclByb3RvdHlwZShleGVjKSwgSlNTVkdTdGF0aWNQT0RU
eXBlV3JhcHBlcjxUcmFuc2Zvcm1hdGlvbk1hdHJpeD46OmNyZWF0ZShpbXAucm90YXRlRnJvbVZl
Y3Rvcih4LCB5KSkuZ2V0KCksIG1fY29udGV4dC5nZXQoKSk7CisgICAgU1ZHRWxlbWVudCogY29u
dGV4dCA9IEpTU1ZHQ29udGV4dENhY2hlOjpzdmdDb250ZXh0Rm9yRE9NT2JqZWN0KHRoaXMpOwor
ICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgSlNTVkdTdGF0
aWNQT0RUeXBlV3JhcHBlcjxUcmFuc2Zvcm1hdGlvbk1hdHJpeD46OmNyZWF0ZShpbXAucm90YXRl
RnJvbVZlY3Rvcih4LCB5KSkuZ2V0KCksIGNvbnRleHQpOwogCiAgICAgaWYgKHggPT0gMC4wIHx8
IHkgPT0gMC4wKQogICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgU1ZHRXhjZXB0aW9uOjpT
VkdfSU5WQUxJRF9WQUxVRV9FUlIpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR1BP
RFR5cGVXcmFwcGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR1BP
RFR5cGVXcmFwcGVyLmgJKHJldmlzaW9uIDUyMzg1KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1NWR1BPRFR5cGVXcmFwcGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDE4ICsyOCwyMSBAQAog
I2RlZmluZSBKU1NWR1BPRFR5cGVXcmFwcGVyX2gKIAogI2lmIEVOQUJMRShTVkcpCisjaW5jbHVk
ZSAiSlNTVkdDb250ZXh0Q2FjaGUuaCIKICNpbmNsdWRlICJTVkdFbGVtZW50LmgiCiAjaW5jbHVk
ZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIERP
TU9iamVjdDsKKwogdGVtcGxhdGU8dHlwZW5hbWUgUE9EVHlwZT4KIGNsYXNzIEpTU1ZHUE9EVHlw
ZVdyYXBwZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxKU1NWR1BPRFR5cGVXcmFwcGVyPFBPRFR5cGU+
ID4gewogcHVibGljOgogICAgIHZpcnR1YWwgfkpTU1ZHUE9EVHlwZVdyYXBwZXIoKSB7IH0KIAog
ICAgIHZpcnR1YWwgb3BlcmF0b3IgUE9EVHlwZSgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY29t
bWl0Q2hhbmdlKFBPRFR5cGUsIFNWR0VsZW1lbnQqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNv
bW1pdENoYW5nZShQT0RUeXBlLCBET01PYmplY3QqKSA9IDA7CiB9OwogCiAvLyBUaGlzIGZpbGUg
Y29udGFpbnMgSlMgd3JhcHBlciBvYmplY3RzIGZvciBTVkcgZGF0YXR5cGVzLCB0aGF0IGFyZSBw
YXNzZWQgYXJvdW5kIGJ5IHZhbHVlCkBAIC04NiwxMiArODksMTAgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gKG1fY3JlYXRvci5nZXQoKS0+Km1fZ2V0dGVyKSgpOwogICAgIH0KIAotICAgIHZp
cnR1YWwgdm9pZCBjb21taXRDaGFuZ2UoUE9EVHlwZSB0eXBlLCBTVkdFbGVtZW50KiBjb250ZXh0
KQorICAgIHZpcnR1YWwgdm9pZCBjb21taXRDaGFuZ2UoUE9EVHlwZSB0eXBlLCBET01PYmplY3Qq
IHdyYXBwZXIpCiAgICAgewogICAgICAgICAobV9jcmVhdG9yLmdldCgpLT4qbV9zZXR0ZXIpKHR5
cGUpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICAgICAgY29udGV4dC0+c3ZnQXR0
cmlidXRlQ2hhbmdlZChtX2NyZWF0b3ItPmFzc29jaWF0ZWRBdHRyaWJ1dGVOYW1lKCkpOworICAg
ICAgICBKU1NWR0NvbnRleHRDYWNoZTo6cHJvcGFnYXRlU1ZHRE9NQ2hhbmdlKHdyYXBwZXIsIG1f
Y3JlYXRvci0+YXNzb2NpYXRlZEF0dHJpYnV0ZU5hbWUoKSk7CiAgICAgfQogCiBwcml2YXRlOgpA
QCAtMTMwLDcgKzEzMSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fcG9kVHlwZTsKICAg
ICB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgY29tbWl0Q2hhbmdlKFBPRFR5cGUgdHlwZSwgU1ZHRWxl
bWVudCopCisgICAgdmlydHVhbCB2b2lkIGNvbW1pdENoYW5nZShQT0RUeXBlIHR5cGUsIERPTU9i
amVjdCopCiAgICAgewogICAgICAgICBtX3BvZFR5cGUgPSB0eXBlOwogICAgIH0KQEAgLTE1NCwx
MCArMTU1LDEwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBKU1NWR1N0
YXRpY1BPRFR5cGVXcmFwcGVyV2l0aFBPRFR5cGVQYXJlbnQodHlwZSwgcGFyZW50KSk7CiAgICAg
fQogCi0gICAgdmlydHVhbCB2b2lkIGNvbW1pdENoYW5nZShQT0RUeXBlIHR5cGUsIFNWR0VsZW1l
bnQqIGNvbnRleHQpCisgICAgdmlydHVhbCB2b2lkIGNvbW1pdENoYW5nZShQT0RUeXBlIHR5cGUs
IERPTU9iamVjdCogd3JhcHBlcikKICAgICB7Ci0gICAgICAgIEpTU1ZHU3RhdGljUE9EVHlwZVdy
YXBwZXI8UE9EVHlwZT46OmNvbW1pdENoYW5nZSh0eXBlLCBjb250ZXh0KTsKLSAgICAgICAgbV9w
YXJlbnRUeXBlLT5jb21taXRDaGFuZ2UoUGFyZW50VHlwZUFyZyh0eXBlKSwgY29udGV4dCk7ICAg
IAorICAgICAgICBKU1NWR1N0YXRpY1BPRFR5cGVXcmFwcGVyPFBPRFR5cGU+Ojpjb21taXRDaGFu
Z2UodHlwZSwgd3JhcHBlcik7CisgICAgICAgIG1fcGFyZW50VHlwZS0+Y29tbWl0Q2hhbmdlKFBh
cmVudFR5cGVBcmcodHlwZSksIHdyYXBwZXIpOwogICAgIH0KIAogcHJpdmF0ZToKQEAgLTE5Miw3
ICsxOTMsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAobV9wYXJlbnQuZ2V0KCktPiptX2dl
dHRlcikoKTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgY29tbWl0Q2hhbmdlKFBPRFR5cGUg
dHlwZSwgU1ZHRWxlbWVudCopCisgICAgdmlydHVhbCB2b2lkIGNvbW1pdENoYW5nZShQT0RUeXBl
IHR5cGUsIERPTU9iamVjdCopCiAgICAgewogICAgICAgICAobV9wYXJlbnQuZ2V0KCktPiptX3Nl
dHRlcikodHlwZSk7CiAgICAgfQpAQCAtMjI3LDkgKzIyOCwxMCBAQCBwdWJsaWM6CiAgICAgdHlw
ZWRlZiBQT0RUeXBlIChTVkdQT0RMaXN0SXRlbTxQT0RUeXBlPjo6KkdldHRlck1ldGhvZCkoKSBj
b25zdDsgCiAgICAgdHlwZWRlZiB2b2lkIChTVkdQT0RMaXN0SXRlbTxQT0RUeXBlPjo6KlNldHRl
ck1ldGhvZCkoUE9EVHlwZSk7CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxKU1NWR1BPRFR5cGVX
cmFwcGVyQ3JlYXRvckZvckxpc3Q+IGNyZWF0ZShQYXNzUmVmUHRyPFBPRExpc3RJdGVtUHRyVHlw
ZT4gY3JlYXRvciwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSkKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBTVkdMaXN0VGVtcGxhdGU+CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SlNT
VkdQT0RUeXBlV3JhcHBlckNyZWF0b3JGb3JMaXN0PiBjcmVhdGUoUGFzc1JlZlB0cjxQT0RMaXN0
SXRlbVB0clR5cGU+IGNyZWF0b3IsIFNWR0xpc3RUZW1wbGF0ZSogbGlzdCkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgSlNTVkdQT0RUeXBlV3JhcHBlckNyZWF0b3JGb3JMaXN0
KGNyZWF0b3IsIGF0dHJpYnV0ZU5hbWUpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBK
U1NWR1BPRFR5cGVXcmFwcGVyQ3JlYXRvckZvckxpc3QoY3JlYXRvciwgbGlzdC0+YXNzb2NpYXRl
ZEF0dHJpYnV0ZU5hbWUoKSkpOwogICAgIH0KIAogICAgIHZpcnR1YWwgb3BlcmF0b3IgUE9EVHlw
ZSgpCkBAIC0yMzcsMTUgKzIzOSwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAobV9jcmVh
dG9yLmdldCgpLT4qbV9nZXR0ZXIpKCk7CiAgICAgfQogCi0gICAgdmlydHVhbCB2b2lkIGNvbW1p
dENoYW5nZShQT0RUeXBlIHR5cGUsIFNWR0VsZW1lbnQqIGNvbnRleHQpCisgICAgdmlydHVhbCB2
b2lkIGNvbW1pdENoYW5nZShQT0RUeXBlIHR5cGUsIERPTU9iamVjdCogd3JhcHBlcikKICAgICB7
CiAgICAgICAgIGlmICghbV9zZXR0ZXIpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAg
KG1fY3JlYXRvci5nZXQoKS0+Km1fc2V0dGVyKSh0eXBlKTsKLQotICAgICAgICBpZiAoY29udGV4
dCkKLSAgICAgICAgICAgIGNvbnRleHQtPnN2Z0F0dHJpYnV0ZUNoYW5nZWQobV9hc3NvY2lhdGVk
QXR0cmlidXRlTmFtZSk7CisgICAgICAgIEpTU1ZHQ29udGV4dENhY2hlOjpwcm9wYWdhdGVTVkdE
T01DaGFuZ2Uod3JhcHBlciwgbV9hc3NvY2lhdGVkQXR0cmlidXRlTmFtZSk7CiAgICAgfQogCiBw
cml2YXRlOgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR1BhdGhTZWdDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdQYXRoU2VnQ3VzdG9tLmNw
cAkocmV2aXNpb24gNTIzODUpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHUGF0aFNlZ0N1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDYgKzIxLDggQEAKIAogI2lmIEVOQUJMRShT
VkcpCiAjaW5jbHVkZSAiSlNTVkdQYXRoU2VnLmgiCisKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcu
aCIKICNpbmNsdWRlICJKU1NWR1BhdGhTZWdBcmNBYnMuaCIKICNpbmNsdWRlICJKU1NWR1BhdGhT
ZWdBcmNSZWwuaCIKICNpbmNsdWRlICJKU1NWR1BhdGhTZWdDbG9zZVBhdGguaCIKQEAgLTQwLDkg
KzQyLDYgQEAKICNpbmNsdWRlICJKU1NWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbFJlbC5oIgogI2lu
Y2x1ZGUgIkpTU1ZHUGF0aFNlZ01vdmV0b0Ficy5oIgogI2luY2x1ZGUgIkpTU1ZHUGF0aFNlZ01v
dmV0b1JlbC5oIgotCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCi0KICNpbmNsdWRlICJTVkdQ
YXRoU2VnLmgiCiAjaW5jbHVkZSAiU1ZHUGF0aFNlZ0FyYy5oIgogI2luY2x1ZGUgIlNWR1BhdGhT
ZWdDbG9zZVBhdGguaCIKQEAgLTY0LDggKzYzLDEwIEBAIEpTVmFsdWUgdG9KUyhFeGVjU3RhdGUq
IGV4ZWMsIEpTRE9NR2xvYmEKICAgICBpZiAoIW9iamVjdCkKICAgICAgICAgcmV0dXJuIGpzTnVs
bCgpOwogCi0gICAgaWYgKERPTU9iamVjdCogd3JhcHBlciA9IGdldENhY2hlZERPTU9iamVjdFdy
YXBwZXIoZXhlYywgb2JqZWN0KSkKKyAgICBpZiAoRE9NT2JqZWN0KiB3cmFwcGVyID0gZ2V0Q2Fj
aGVkRE9NT2JqZWN0V3JhcHBlcihleGVjLCBvYmplY3QpKSB7CisgICAgICAgIEFTU0VSVChKU1NW
R0NvbnRleHRDYWNoZTo6c3ZnQ29udGV4dEZvckRPTU9iamVjdCh3cmFwcGVyKSA9PSBjb250ZXh0
KTsKICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CisgICAgfQogCiAgICAgc3dpdGNoIChvYmplY3Qt
PnBhdGhTZWdUeXBlKCkpIHsKICAgICBjYXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfQ0xPU0VQQVRI
OgpAQCAtMTE1LDUgKzExNiwzIEBAIEpTVmFsdWUgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEpTRE9N
R2xvYmEKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShTVkcpCi0KLS8vIHZpbTp0cz00Om5vZXQKSW5k
ZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdQYXRoU2VnTGlzdEN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR1BhdGhTZWdMaXN0Q3VzdG9tLmNwcAko
cmV2aXNpb24gNTIzODUpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHUGF0aFNlZ0xpc3RD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw2ICsyNCw3IEBACiAKICNpbmNsdWRlICJE
b2N1bWVudC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiSlNTVkdDb250ZXh0Q2Fj
aGUuaCIKICNpbmNsdWRlICJKU1NWR1BhdGhTZWcuaCIKICNpbmNsdWRlICJTVkdEb2N1bWVudEV4
dGVuc2lvbnMuaCIKICNpbmNsdWRlICJTVkdFbGVtZW50LmgiCkBAIC0zOSwxMiArNDAsMTIgQEAg
SlNWYWx1ZSBKU1NWR1BhdGhTZWdMaXN0OjpjbGVhcihFeGVjU3RhdAogewogICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOwogCi0gICAgU1ZHUGF0aFNlZ0xpc3QqIGltcCA9IHN0YXRpY19jYXN0PFNW
R1BhdGhTZWdMaXN0Kj4oaW1wbCgpKTsKLSAgICBpbXAtPmNsZWFyKGVjKTsKKyAgICBTVkdQYXRo
U2VnTGlzdCogbGlzdCA9IGltcGwoKTsKKyAgICBsaXN0LT5jbGVhcihlYyk7CiAKICAgICBzZXRE
T01FeGNlcHRpb24oZXhlYywgZWMpOwogCi0gICAgbV9jb250ZXh0LT5zdmdBdHRyaWJ1dGVDaGFu
Z2VkKGltcC0+YXNzb2NpYXRlZEF0dHJpYnV0ZU5hbWUoKSk7CisgICAgSlNTVkdDb250ZXh0Q2Fj
aGU6OnByb3BhZ2F0ZVNWR0RPTUNoYW5nZSh0aGlzLCBsaXN0LT5hc3NvY2lhdGVkQXR0cmlidXRl
TmFtZSgpKTsKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIApAQCAtNTMsMTQgKzU0LDE1
IEBAIEpTVmFsdWUgSlNTVkdQYXRoU2VnTGlzdDo6aW5pdGlhbGl6ZShFeGUKICAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKICAgICBTVkdQYXRoU2VnKiBuZXdJdGVtID0gdG9TVkdQYXRoU2VnKGFy
Z3MuYXQoMCkpOwogCi0gICAgU1ZHUGF0aFNlZ0xpc3QqIGltcCA9IHN0YXRpY19jYXN0PFNWR1Bh
dGhTZWdMaXN0Kj4oaW1wbCgpKTsKKyAgICBTVkdQYXRoU2VnTGlzdCogbGlzdCA9IGltcGwoKTsK
IAotICAgIFNWR1BhdGhTZWcqIG9iaiA9IFdURjo6Z2V0UHRyKGltcC0+aW5pdGlhbGl6ZShuZXdJ
dGVtLCBlYykpOworICAgIFNWR1BhdGhTZWcqIG9iaiA9IFdURjo6Z2V0UHRyKGxpc3QtPmluaXRp
YWxpemUobmV3SXRlbSwgZWMpKTsKKyAgICBTVkdFbGVtZW50KiBjb250ZXh0ID0gSlNTVkdDb250
ZXh0Q2FjaGU6OnN2Z0NvbnRleHRGb3JET01PYmplY3QodGhpcyk7CiAKLSAgICBKU0M6OkpTVmFs
dWUgcmVzdWx0ID0gdG9KUyhleGVjLCBkZXByZWNhdGVkR2xvYmFsT2JqZWN0Rm9yUHJvdG90eXBl
KGV4ZWMpLCBvYmosIG1fY29udGV4dC5nZXQoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pT
KGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBvYmosIGNvbnRleHQpOwogICAgIHNldERPTUV4Y2VwdGlv
bihleGVjLCBlYyk7CiAKLSAgICBtX2NvbnRleHQtPnN2Z0F0dHJpYnV0ZUNoYW5nZWQoaW1wLT5h
c3NvY2lhdGVkQXR0cmlidXRlTmFtZSgpKTsgICAgCisgICAgSlNTVkdDb250ZXh0Q2FjaGU6OnBy
b3BhZ2F0ZVNWR0RPTUNoYW5nZSh0aGlzLCBsaXN0LT5hc3NvY2lhdGVkQXR0cmlidXRlTmFtZSgp
KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC03NSwxMCArNzcsMTEgQEAgSlNWYWx1ZSBK
U1NWR1BhdGhTZWdMaXN0OjpnZXRJdGVtKEV4ZWNTdAogICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKICAgICB9CiAKLSAgICBTVkdQYXRoU2VnTGlzdCogaW1wID0gc3RhdGljX2Nhc3Q8U1ZH
UGF0aFNlZ0xpc3QqPihpbXBsKCkpOwotICAgIFNWR1BhdGhTZWcqIG9iaiA9IFdURjo6Z2V0UHRy
KGltcC0+Z2V0SXRlbShpbmRleCwgZWMpKTsKKyAgICBTVkdQYXRoU2VnTGlzdCogbGlzdCA9IGlt
cGwoKTsKKyAgICBTVkdQYXRoU2VnKiBvYmogPSBXVEY6OmdldFB0cihsaXN0LT5nZXRJdGVtKGlu
ZGV4LCBlYykpOworICAgIFNWR0VsZW1lbnQqIGNvbnRleHQgPSBKU1NWR0NvbnRleHRDYWNoZTo6
c3ZnQ29udGV4dEZvckRPTU9iamVjdCh0aGlzKTsKIAotICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQg
PSB0b0pTKGV4ZWMsIGRlcHJlY2F0ZWRHbG9iYWxPYmplY3RGb3JQcm90b3R5cGUoZXhlYyksIG9i
aiwgbV9jb250ZXh0LmdldCgpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhlYywgZ2xv
YmFsT2JqZWN0KCksIG9iaiwgY29udGV4dCk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVj
KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtOTUsMTIgKzk4LDEzIEBAIEpTVmFsdWUgSlNT
VkdQYXRoU2VnTGlzdDo6aW5zZXJ0SXRlbUJlZm8KICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAgICAgfQogCi0gICAgU1ZHUGF0aFNlZ0xpc3QqIGltcCA9IHN0YXRpY19jYXN0PFNWR1Bh
dGhTZWdMaXN0Kj4oaW1wbCgpKTsKKyAgICBTVkdQYXRoU2VnTGlzdCogbGlzdCA9IGltcGwoKTsK
KyAgICBTVkdFbGVtZW50KiBjb250ZXh0ID0gSlNTVkdDb250ZXh0Q2FjaGU6OnN2Z0NvbnRleHRG
b3JET01PYmplY3QodGhpcyk7CiAKLSAgICBKU0M6OkpTVmFsdWUgcmVzdWx0ID0gdG9KUyhleGVj
LCBkZXByZWNhdGVkR2xvYmFsT2JqZWN0Rm9yUHJvdG90eXBlKGV4ZWMpLCBXVEY6OmdldFB0cihp
bXAtPmluc2VydEl0ZW1CZWZvcmUobmV3SXRlbSwgaW5kZXgsIGVjKSksIG1fY29udGV4dC5nZXQo
KSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBXVEY6
OmdldFB0cihsaXN0LT5pbnNlcnRJdGVtQmVmb3JlKG5ld0l0ZW0sIGluZGV4LCBlYykpLCBjb250
ZXh0KTsKICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwogCi0gICAgbV9jb250ZXh0LT5z
dmdBdHRyaWJ1dGVDaGFuZ2VkKGltcC0+YXNzb2NpYXRlZEF0dHJpYnV0ZU5hbWUoKSk7ICAgIAor
ICAgIEpTU1ZHQ29udGV4dENhY2hlOjpwcm9wYWdhdGVTVkdET01DaGFuZ2UodGhpcywgbGlzdC0+
YXNzb2NpYXRlZEF0dHJpYnV0ZU5hbWUoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAt
MTE2LDEyICsxMjAsMTMgQEAgSlNWYWx1ZSBKU1NWR1BhdGhTZWdMaXN0OjpyZXBsYWNlSXRlbShF
eAogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKLSAgICBTVkdQYXRoU2Vn
TGlzdCogaW1wID0gc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0xpc3QqPihpbXBsKCkpOworICAgIFNW
R1BhdGhTZWdMaXN0KiBsaXN0ID0gaW1wbCgpOworICAgIFNWR0VsZW1lbnQqIGNvbnRleHQgPSBK
U1NWR0NvbnRleHRDYWNoZTo6c3ZnQ29udGV4dEZvckRPTU9iamVjdCh0aGlzKTsKIAotICAgIEpT
Qzo6SlNWYWx1ZSByZXN1bHQgPSB0b0pTKGV4ZWMsIGRlcHJlY2F0ZWRHbG9iYWxPYmplY3RGb3JQ
cm90b3R5cGUoZXhlYyksIFdURjo6Z2V0UHRyKGltcC0+cmVwbGFjZUl0ZW0obmV3SXRlbSwgaW5k
ZXgsIGVjKSksIG1fY29udGV4dC5nZXQoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKGV4
ZWMsIGdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihsaXN0LT5yZXBsYWNlSXRlbShuZXdJdGVt
LCBpbmRleCwgZWMpKSwgY29udGV4dCk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsK
IAotICAgIG1fY29udGV4dC0+c3ZnQXR0cmlidXRlQ2hhbmdlZChpbXAtPmFzc29jaWF0ZWRBdHRy
aWJ1dGVOYW1lKCkpOyAgICAKKyAgICBKU1NWR0NvbnRleHRDYWNoZTo6cHJvcGFnYXRlU1ZHRE9N
Q2hhbmdlKHRoaXMsIGxpc3QtPmFzc29jaWF0ZWRBdHRyaWJ1dGVOYW1lKCkpOwogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKQEAgLTEzNiwxNCArMTQxLDE1IEBAIEpTVmFsdWUgSlNTVkdQYXRoU2Vn
TGlzdDo6cmVtb3ZlSXRlbShFeGUKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAg
fQogCi0gICAgU1ZHUGF0aFNlZ0xpc3QqIGltcCA9IHN0YXRpY19jYXN0PFNWR1BhdGhTZWdMaXN0
Kj4oaW1wbCgpKTsKKyAgICBTVkdQYXRoU2VnTGlzdCogbGlzdCA9IGltcGwoKTsKIAotICAgIFJl
ZlB0cjxTVkdQYXRoU2VnPiBvYmooaW1wLT5yZW1vdmVJdGVtKGluZGV4LCBlYykpOworICAgIFJl
ZlB0cjxTVkdQYXRoU2VnPiBvYmoobGlzdC0+cmVtb3ZlSXRlbShpbmRleCwgZWMpKTsKKyAgICBT
VkdFbGVtZW50KiBjb250ZXh0ID0gSlNTVkdDb250ZXh0Q2FjaGU6OnN2Z0NvbnRleHRGb3JET01P
YmplY3QodGhpcyk7CiAKLSAgICBKU0M6OkpTVmFsdWUgcmVzdWx0ID0gdG9KUyhleGVjLCBkZXBy
ZWNhdGVkR2xvYmFsT2JqZWN0Rm9yUHJvdG90eXBlKGV4ZWMpLCBvYmouZ2V0KCksIG1fY29udGV4
dC5nZXQoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgp
LCBvYmouZ2V0KCksIGNvbnRleHQpOwogICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CiAK
LSAgICBtX2NvbnRleHQtPnN2Z0F0dHJpYnV0ZUNoYW5nZWQoaW1wLT5hc3NvY2lhdGVkQXR0cmli
dXRlTmFtZSgpKTsgICAgCisgICAgSlNTVkdDb250ZXh0Q2FjaGU6OnByb3BhZ2F0ZVNWR0RPTUNo
YW5nZSh0aGlzLCBsaXN0LT5hc3NvY2lhdGVkQXR0cmlidXRlTmFtZSgpKTsKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCkBAIC0xNTIsMTIgKzE1OCwxMyBAQCBKU1ZhbHVlIEpTU1ZHUGF0aFNlZ0xp
c3Q6OmFwcGVuZEl0ZW0oRXhlCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgU1ZHUGF0
aFNlZyogbmV3SXRlbSA9IHRvU1ZHUGF0aFNlZyhhcmdzLmF0KDApKTsKIAotICAgIFNWR1BhdGhT
ZWdMaXN0KiBpbXAgPSBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnTGlzdCo+KGltcGwoKSk7CisgICAg
U1ZHUGF0aFNlZ0xpc3QqIGxpc3QgPSBpbXBsKCk7CisgICAgU1ZHRWxlbWVudCogY29udGV4dCA9
IEpTU1ZHQ29udGV4dENhY2hlOjpzdmdDb250ZXh0Rm9yRE9NT2JqZWN0KHRoaXMpOwogCi0gICAg
SlNDOjpKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhlYywgZGVwcmVjYXRlZEdsb2JhbE9iamVjdEZv
clByb3RvdHlwZShleGVjKSwgV1RGOjpnZXRQdHIoaW1wLT5hcHBlbmRJdGVtKG5ld0l0ZW0sIGVj
KSksIG1fY29udGV4dC5nZXQoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKGV4ZWMsIGds
b2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihsaXN0LT5hcHBlbmRJdGVtKG5ld0l0ZW0sIGVjKSks
IGNvbnRleHQpOwogICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CiAKLSAgICBtX2NvbnRl
eHQtPnN2Z0F0dHJpYnV0ZUNoYW5nZWQoaW1wLT5hc3NvY2lhdGVkQXR0cmlidXRlTmFtZSgpKTsg
ICAgCisgICAgSlNTVkdDb250ZXh0Q2FjaGU6OnByb3BhZ2F0ZVNWR0RPTUNoYW5nZSh0aGlzLCBs
aXN0LT5hc3NvY2lhdGVkQXR0cmlidXRlTmFtZSgpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQog
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHUG9pbnRMaXN0Q3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHUG9pbnRMaXN0Q3VzdG9tLmNwcAko
cmV2aXNpb24gNTIzODUpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHUG9pbnRMaXN0Q3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMsNyBAQAogI2lmIEVOQUJMRShTVkcp
CiAjaW5jbHVkZSAiSlNTVkdQb2ludExpc3QuaCIKIAorI2luY2x1ZGUgIkpTU1ZHUE9EVHlwZVdy
YXBwZXIuaCIKICNpbmNsdWRlICJKU1NWR1BvaW50LmgiCiAjaW5jbHVkZSAiU1ZHUG9pbnRMaXN0
LmgiCiAKQEAgLTMzLDQyICszNCw1MiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiB0eXBlZGVmIFNW
R1BPRExpc3RJdGVtPEZsb2F0UG9pbnQ+IFBPRExpc3RJdGVtOwogdHlwZWRlZiBTVkdMaXN0PFJl
ZlB0cjxQT0RMaXN0SXRlbT4gPiBTVkdQb2ludExpc3RCYXNlOwogCi1zdGF0aWMgSlNWYWx1ZSBm
aW5pc2hHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBFeGNlcHRpb25Db2RlJiBlYywgU1ZHRWxlbWVu
dCogY29udGV4dCwgU1ZHUG9pbnRMaXN0KiBsaXN0LCBQYXNzUmVmUHRyPFBPRExpc3RJdGVtID4g
aXRlbSkKK3N0YXRpYyBKU1ZhbHVlIGZpbmlzaEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEV4Y2Vw
dGlvbkNvZGUmIGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1NWR1BvaW50
TGlzdCogbGlzdFdyYXBwZXIsIFBhc3NSZWZQdHI8UE9ETGlzdEl0ZW0gPiBpdGVtKQogewogICAg
IGlmIChlYykgewogICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9Ci0gICAgcmV0dXJuIHRvSlMoZXhlYywgZGVwcmVj
YXRlZEdsb2JhbE9iamVjdEZvclByb3RvdHlwZShleGVjKSwgSlNTVkdQT0RUeXBlV3JhcHBlckNy
ZWF0b3JGb3JMaXN0PEZsb2F0UG9pbnQ+OjpjcmVhdGUoaXRlbS5nZXQoKSwgbGlzdC0+YXNzb2Np
YXRlZEF0dHJpYnV0ZU5hbWUoKSkuZ2V0KCksIGNvbnRleHQpOworCisgICAgU1ZHUG9pbnRMaXN0
KiBsaXN0ID0gbGlzdFdyYXBwZXItPmltcGwoKTsKKyAgICBTVkdFbGVtZW50KiBjb250ZXh0ID0g
SlNTVkdDb250ZXh0Q2FjaGU6OnN2Z0NvbnRleHRGb3JET01PYmplY3QobGlzdFdyYXBwZXIpOwor
ICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgSlNTVkdQT0RUeXBlV3JhcHBlckNy
ZWF0b3JGb3JMaXN0PEZsb2F0UG9pbnQ+OjpjcmVhdGU8U1ZHUG9pbnRMaXN0PihpdGVtLmdldCgp
LCBsaXN0KS5nZXQoKSwgY29udGV4dCk7CiB9CiAKLXN0YXRpYyBKU1ZhbHVlIGZpbmlzaFNldHRl
cihFeGVjU3RhdGUqIGV4ZWMsIEV4Y2VwdGlvbkNvZGUmIGVjLCBTVkdFbGVtZW50KiBjb250ZXh0
LCBTVkdQb2ludExpc3QqIGxpc3QsIFBhc3NSZWZQdHI8UE9ETGlzdEl0ZW0gPiBpdGVtKQorc3Rh
dGljIEpTVmFsdWUgZmluaXNoU2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgRXhjZXB0aW9uQ29kZSYg
ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTU1ZHUG9pbnRMaXN0KiBsaXN0
V3JhcHBlciwgUGFzc1JlZlB0cjxQT0RMaXN0SXRlbSA+IGl0ZW0pCiB7CiAgICAgaWYgKGVjKSB7
CiAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CiAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogICAgIH0KLSAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1l
ID0gbGlzdC0+YXNzb2NpYXRlZEF0dHJpYnV0ZU5hbWUoKTsKLSAgICBjb250ZXh0LT5zdmdBdHRy
aWJ1dGVDaGFuZ2VkKGF0dHJpYnV0ZU5hbWUpOwotICAgIHJldHVybiB0b0pTKGV4ZWMsIGRlcHJl
Y2F0ZWRHbG9iYWxPYmplY3RGb3JQcm90b3R5cGUoZXhlYyksIEpTU1ZHUE9EVHlwZVdyYXBwZXJD
cmVhdG9yRm9yTGlzdDxGbG9hdFBvaW50Pjo6Y3JlYXRlKGl0ZW0uZ2V0KCksIGF0dHJpYnV0ZU5h
bWUpLmdldCgpLCBjb250ZXh0KTsKKworICAgIFNWR1BvaW50TGlzdCogbGlzdCA9IGxpc3RXcmFw
cGVyLT5pbXBsKCk7CisgICAgSlNTVkdDb250ZXh0Q2FjaGU6OnByb3BhZ2F0ZVNWR0RPTUNoYW5n
ZShsaXN0V3JhcHBlciwgbGlzdC0+YXNzb2NpYXRlZEF0dHJpYnV0ZU5hbWUoKSk7CisKKyAgICBT
VkdFbGVtZW50KiBjb250ZXh0ID0gSlNTVkdDb250ZXh0Q2FjaGU6OnN2Z0NvbnRleHRGb3JET01P
YmplY3QobGlzdFdyYXBwZXIpOworICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwg
SlNTVkdQT0RUeXBlV3JhcHBlckNyZWF0b3JGb3JMaXN0PEZsb2F0UG9pbnQ+OjpjcmVhdGU8U1ZH
UG9pbnRMaXN0PihpdGVtLmdldCgpLCBsaXN0KS5nZXQoKSwgY29udGV4dCk7CiB9CiAKLXN0YXRp
YyBKU1ZhbHVlIGZpbmlzaFNldHRlclJlYWRPbmx5UmVzdWx0KEV4ZWNTdGF0ZSogZXhlYywgRXhj
ZXB0aW9uQ29kZSYgZWMsIFNWR0VsZW1lbnQqIGNvbnRleHQsIFNWR1BvaW50TGlzdCogbGlzdCwg
UGFzc1JlZlB0cjxQT0RMaXN0SXRlbT4gaXRlbSkKK3N0YXRpYyBKU1ZhbHVlIGZpbmlzaFNldHRl
clJlYWRPbmx5UmVzdWx0KEV4ZWNTdGF0ZSogZXhlYywgRXhjZXB0aW9uQ29kZSYgZWMsIEpTRE9N
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTU1ZHUG9pbnRMaXN0KiBsaXN0V3JhcHBlciwg
UGFzc1JlZlB0cjxQT0RMaXN0SXRlbT4gaXRlbSkKIHsKICAgICBpZiAoZWMpIHsKICAgICAgICAg
c2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAgICAgfQotICAgIGNvbnRleHQtPnN2Z0F0dHJpYnV0ZUNoYW5nZWQobGlzdC0+YXNzb2NpYXRl
ZEF0dHJpYnV0ZU5hbWUoKSk7Ci0gICAgcmV0dXJuIHRvSlMoZXhlYywgZGVwcmVjYXRlZEdsb2Jh
bE9iamVjdEZvclByb3RvdHlwZShleGVjKSwgSlNTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcjxGbG9h
dFBvaW50Pjo6Y3JlYXRlKCppdGVtKS5nZXQoKSwgY29udGV4dCk7CisKKyAgICBTVkdQb2ludExp
c3QqIGxpc3QgPSBsaXN0V3JhcHBlci0+aW1wbCgpOworICAgIEpTU1ZHQ29udGV4dENhY2hlOjpw
cm9wYWdhdGVTVkdET01DaGFuZ2UobGlzdFdyYXBwZXIsIGxpc3QtPmFzc29jaWF0ZWRBdHRyaWJ1
dGVOYW1lKCkpOworICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgSlNTVkdTdGF0
aWNQT0RUeXBlV3JhcHBlcjxGbG9hdFBvaW50Pjo6Y3JlYXRlKCppdGVtKS5nZXQoKSwgMCAvKiBu
byBjb250ZXh0IG9uIHB1cnBvc2UgKi8pOwogfQogCiBKU1ZhbHVlIEpTU1ZHUG9pbnRMaXN0Ojpj
bGVhcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmKQogewogICAgIEV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOwotICAgIGltcGwoKS0+Y2xlYXIoZWMpOworICAgIFNWR1BvaW50TGlzdEJhc2Uq
IGxpc3RJbXAgPSBpbXBsKCk7CisgICAgbGlzdEltcC0+Y2xlYXIoZWMpOwogICAgIHNldERPTUV4
Y2VwdGlvbihleGVjLCBlYyk7Ci0gICAgbV9jb250ZXh0LT5zdmdBdHRyaWJ1dGVDaGFuZ2VkKGlt
cGwoKS0+YXNzb2NpYXRlZEF0dHJpYnV0ZU5hbWUoKSk7CisKKyAgICBKU1NWR0NvbnRleHRDYWNo
ZTo6cHJvcGFnYXRlU1ZHRE9NQ2hhbmdlKHRoaXMsIGxpc3RJbXAtPmFzc29jaWF0ZWRBdHRyaWJ1
dGVOYW1lKCkpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCkBAIC03Niw4ICs4Nyw3
IEBAIEpTVmFsdWUgSlNTVkdQb2ludExpc3Q6OmluaXRpYWxpemUoRXhlY1MKIHsKICAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKICAgICBTVkdQb2ludExpc3RCYXNlKiBsaXN0SW1wID0gaW1wbCgp
OwotICAgIHJldHVybiBmaW5pc2hTZXR0ZXIoZXhlYywgZWMsIGNvbnRleHQoKSwgaW1wbCgpLAot
ICAgICAgICBsaXN0SW1wLT5pbml0aWFsaXplKFBPRExpc3RJdGVtOjpjb3B5KHRvU1ZHUG9pbnQo
YXJncy5hdCgwKSkpLCBlYykpOworICAgIHJldHVybiBmaW5pc2hTZXR0ZXIoZXhlYywgZWMsIGds
b2JhbE9iamVjdCgpLCB0aGlzLCBsaXN0SW1wLT5pbml0aWFsaXplKFBPRExpc3RJdGVtOjpjb3B5
KHRvU1ZHUG9pbnQoYXJncy5hdCgwKSkpLCBlYykpOwogfQogCiBKU1ZhbHVlIEpTU1ZHUG9pbnRM
aXN0OjpnZXRJdGVtKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKQEAgLTkx
LDggKzEwMSw3IEBAIEpTVmFsdWUgSlNTVkdQb2ludExpc3Q6OmdldEl0ZW0oRXhlY1N0YXQKIAog
ICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFNWR1BvaW50TGlzdEJhc2UqIGxpc3RJbXAg
PSBpbXBsKCk7Ci0gICAgcmV0dXJuIGZpbmlzaEdldHRlcihleGVjLCBlYywgY29udGV4dCgpLCBp
bXBsKCksCi0gICAgICAgIGxpc3RJbXAtPmdldEl0ZW0oaW5kZXgsIGVjKSk7CisgICAgcmV0dXJu
IGZpbmlzaEdldHRlcihleGVjLCBlYywgZ2xvYmFsT2JqZWN0KCksIHRoaXMsIGxpc3RJbXAtPmdl
dEl0ZW0oaW5kZXgsIGVjKSk7CiB9CiAKIEpTVmFsdWUgSlNTVkdQb2ludExpc3Q6Omluc2VydEl0
ZW1CZWZvcmUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQpAQCAtMTA2LDgg
KzExNSw3IEBAIEpTVmFsdWUgSlNTVkdQb2ludExpc3Q6Omluc2VydEl0ZW1CZWZvcmUKIAogICAg
IEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFNWR1BvaW50TGlzdEJhc2UqIGxpc3RJbXAgPSBp
bXBsKCk7Ci0gICAgcmV0dXJuIGZpbmlzaFNldHRlcihleGVjLCBlYywgY29udGV4dCgpLCBpbXBs
KCksCi0gICAgICAgIGxpc3RJbXAtPmluc2VydEl0ZW1CZWZvcmUoUE9ETGlzdEl0ZW06OmNvcHko
dG9TVkdQb2ludChhcmdzLmF0KDApKSksIGluZGV4LCBlYykpOworICAgIHJldHVybiBmaW5pc2hT
ZXR0ZXIoZXhlYywgZWMsIGdsb2JhbE9iamVjdCgpLCB0aGlzLCBsaXN0SW1wLT5pbnNlcnRJdGVt
QmVmb3JlKFBPRExpc3RJdGVtOjpjb3B5KHRvU1ZHUG9pbnQoYXJncy5hdCgwKSkpLCBpbmRleCwg
ZWMpKTsKIH0KIAogSlNWYWx1ZSBKU1NWR1BvaW50TGlzdDo6cmVwbGFjZUl0ZW0oRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQpAQCAtMTIxLDggKzEyOSw3IEBAIEpTVmFsdWUg
SlNTVkdQb2ludExpc3Q6OnJlcGxhY2VJdGVtKEV4ZWMKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOwogICAgIFNWR1BvaW50TGlzdEJhc2UqIGxpc3RJbXAgPSBpbXBsKCk7Ci0gICAgcmV0dXJu
IGZpbmlzaFNldHRlcihleGVjLCBlYywgY29udGV4dCgpLCBpbXBsKCksCi0gICAgICAgIGxpc3RJ
bXAtPnJlcGxhY2VJdGVtKFBPRExpc3RJdGVtOjpjb3B5KHRvU1ZHUG9pbnQoYXJncy5hdCgwKSkp
LCBpbmRleCwgZWMpKTsKKyAgICByZXR1cm4gZmluaXNoU2V0dGVyKGV4ZWMsIGVjLCBnbG9iYWxP
YmplY3QoKSwgdGhpcywgbGlzdEltcC0+cmVwbGFjZUl0ZW0oUE9ETGlzdEl0ZW06OmNvcHkodG9T
VkdQb2ludChhcmdzLmF0KDApKSksIGluZGV4LCBlYykpOwogfQogCiBKU1ZhbHVlIEpTU1ZHUG9p
bnRMaXN0OjpyZW1vdmVJdGVtKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykK
QEAgLTEzNiwxNiArMTQzLDE0IEBAIEpTVmFsdWUgSlNTVkdQb2ludExpc3Q6OnJlbW92ZUl0ZW0o
RXhlY1MKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFNWR1BvaW50TGlzdEJhc2Uq
IGxpc3RJbXAgPSBpbXBsKCk7Ci0gICAgcmV0dXJuIGZpbmlzaFNldHRlclJlYWRPbmx5UmVzdWx0
KGV4ZWMsIGVjLCBjb250ZXh0KCksIGltcGwoKSwKLSAgICAgICAgbGlzdEltcC0+cmVtb3ZlSXRl
bShpbmRleCwgZWMpKTsKKyAgICByZXR1cm4gZmluaXNoU2V0dGVyUmVhZE9ubHlSZXN1bHQoZXhl
YywgZWMsIGdsb2JhbE9iamVjdCgpLCB0aGlzLCBsaXN0SW1wLT5yZW1vdmVJdGVtKGluZGV4LCBl
YykpOwogfQogCiBKU1ZhbHVlIEpTU1ZHUG9pbnRMaXN0OjphcHBlbmRJdGVtKEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
ICAgICBTVkdQb2ludExpc3RCYXNlKiBsaXN0SW1wID0gaW1wbCgpOwotICAgIHJldHVybiBmaW5p
c2hTZXR0ZXIoZXhlYywgZWMsIGNvbnRleHQoKSwgaW1wbCgpLAotICAgICAgICBsaXN0SW1wLT5h
cHBlbmRJdGVtKFBPRExpc3RJdGVtOjpjb3B5KHRvU1ZHUG9pbnQoYXJncy5hdCgwKSkpLCBlYykp
OworICAgIHJldHVybiBmaW5pc2hTZXR0ZXIoZXhlYywgZWMsIGdsb2JhbE9iamVjdCgpLCB0aGlz
LCBsaXN0SW1wLT5hcHBlbmRJdGVtKFBPRExpc3RJdGVtOjpjb3B5KHRvU1ZHUG9pbnQoYXJncy5h
dCgwKSkpLCBlYykpOwogfQogCiB9CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHVHJh
bnNmb3JtTGlzdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1NWR1RyYW5zZm9ybUxpc3RDdXN0b20uY3BwCShyZXZpc2lvbiA1MjM4NSkKKysrIFdlYkNvcmUv
YmluZGluZ3MvanMvSlNTVkdUcmFuc2Zvcm1MaXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjMsNiArMjMsNyBAQAogI2lmIEVOQUJMRShTVkcpCiAjaW5jbHVkZSAiSlNTVkdUcmFuc2Zv
cm1MaXN0LmgiCiAKKyNpbmNsdWRlICJKU1NWR1BPRFR5cGVXcmFwcGVyLmgiCiAjaW5jbHVkZSAi
SlNTVkdUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJTVkdUcmFuc2Zvcm1MaXN0LmgiCiAKQEAgLTMz
LDQyICszNCw1MiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiB0eXBlZGVmIFNWR1BPRExpc3RJdGVt
PFNWR1RyYW5zZm9ybT4gUE9ETGlzdEl0ZW07CiB0eXBlZGVmIFNWR0xpc3Q8UmVmUHRyPFBPRExp
c3RJdGVtPiA+IFNWR1RyYW5zZm9ybUxpc3RCYXNlOwogCi1zdGF0aWMgSlNWYWx1ZSBmaW5pc2hH
ZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBFeGNlcHRpb25Db2RlJiBlYywgU1ZHRWxlbWVudCogY29u
dGV4dCwgU1ZHVHJhbnNmb3JtTGlzdCogbGlzdCwgUGFzc1JlZlB0cjxQT0RMaXN0SXRlbT4gaXRl
bSkKK3N0YXRpYyBKU1ZhbHVlIGZpbmlzaEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEV4Y2VwdGlv
bkNvZGUmIGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1NWR1RyYW5zZm9y
bUxpc3QqIGxpc3RXcmFwcGVyLCBQYXNzUmVmUHRyPFBPRExpc3RJdGVtPiBpdGVtKQogewogICAg
IGlmIChlYykgewogICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9Ci0gICAgcmV0dXJuIHRvSlMoZXhlYywgZGVwcmVj
YXRlZEdsb2JhbE9iamVjdEZvclByb3RvdHlwZShleGVjKSwgSlNTVkdQT0RUeXBlV3JhcHBlckNy
ZWF0b3JGb3JMaXN0PFNWR1RyYW5zZm9ybT46OmNyZWF0ZShpdGVtLmdldCgpLCBsaXN0LT5hc3Nv
Y2lhdGVkQXR0cmlidXRlTmFtZSgpKS5nZXQoKSwgY29udGV4dCk7CisKKyAgICBTVkdUcmFuc2Zv
cm1MaXN0KiBsaXN0ID0gbGlzdFdyYXBwZXItPmltcGwoKTsKKyAgICBTVkdFbGVtZW50KiBjb250
ZXh0ID0gSlNTVkdDb250ZXh0Q2FjaGU6OnN2Z0NvbnRleHRGb3JET01PYmplY3QobGlzdFdyYXBw
ZXIpOworICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgSlNTVkdQT0RUeXBlV3Jh
cHBlckNyZWF0b3JGb3JMaXN0PFNWR1RyYW5zZm9ybT46OmNyZWF0ZTxTVkdUcmFuc2Zvcm1MaXN0
PihpdGVtLmdldCgpLCBsaXN0KS5nZXQoKSwgY29udGV4dCk7CiB9CiAKLXN0YXRpYyBKU1ZhbHVl
IGZpbmlzaFNldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEV4Y2VwdGlvbkNvZGUmIGVjLCBTVkdFbGVt
ZW50KiBjb250ZXh0LCBTVkdUcmFuc2Zvcm1MaXN0KiBsaXN0LCBQYXNzUmVmUHRyPFBPRExpc3RJ
dGVtPiBpdGVtKQorc3RhdGljIEpTVmFsdWUgZmluaXNoU2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywg
RXhjZXB0aW9uQ29kZSYgZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTU1ZH
VHJhbnNmb3JtTGlzdCogbGlzdFdyYXBwZXIsIFBhc3NSZWZQdHI8UE9ETGlzdEl0ZW0+IGl0ZW0p
CiB7CiAgICAgaWYgKGVjKSB7CiAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CiAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KLSAgICBjb25zdCBRdWFsaWZpZWRO
YW1lJiBhdHRyaWJ1dGVOYW1lID0gbGlzdC0+YXNzb2NpYXRlZEF0dHJpYnV0ZU5hbWUoKTsKLSAg
ICBjb250ZXh0LT5zdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJpYnV0ZU5hbWUpOwotICAgIHJldHVy
biB0b0pTKGV4ZWMsIGRlcHJlY2F0ZWRHbG9iYWxPYmplY3RGb3JQcm90b3R5cGUoZXhlYyksIEpT
U1ZHUE9EVHlwZVdyYXBwZXJDcmVhdG9yRm9yTGlzdDxTVkdUcmFuc2Zvcm0+OjpjcmVhdGUoaXRl
bS5nZXQoKSwgYXR0cmlidXRlTmFtZSkuZ2V0KCksIGNvbnRleHQpOworCisgICAgU1ZHVHJhbnNm
b3JtTGlzdCogbGlzdCA9IGxpc3RXcmFwcGVyLT5pbXBsKCk7CisgICAgSlNTVkdDb250ZXh0Q2Fj
aGU6OnByb3BhZ2F0ZVNWR0RPTUNoYW5nZShsaXN0V3JhcHBlciwgbGlzdC0+YXNzb2NpYXRlZEF0
dHJpYnV0ZU5hbWUoKSk7CisKKyAgICBTVkdFbGVtZW50KiBjb250ZXh0ID0gSlNTVkdDb250ZXh0
Q2FjaGU6OnN2Z0NvbnRleHRGb3JET01PYmplY3QobGlzdFdyYXBwZXIpOworICAgIHJldHVybiB0
b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgSlNTVkdQT0RUeXBlV3JhcHBlckNyZWF0b3JGb3JMaXN0
PFNWR1RyYW5zZm9ybT46OmNyZWF0ZTxTVkdUcmFuc2Zvcm1MaXN0PihpdGVtLmdldCgpLCBsaXN0
KS5nZXQoKSwgY29udGV4dCk7CiB9CiAKLXN0YXRpYyBKU1ZhbHVlIGZpbmlzaFNldHRlclJlYWRP
bmx5UmVzdWx0KEV4ZWNTdGF0ZSogZXhlYywgRXhjZXB0aW9uQ29kZSYgZWMsIFNWR0VsZW1lbnQq
IGNvbnRleHQsIFNWR1RyYW5zZm9ybUxpc3QqIGxpc3QsIFBhc3NSZWZQdHI8UE9ETGlzdEl0ZW0+
IGl0ZW0pCitzdGF0aWMgSlNWYWx1ZSBmaW5pc2hTZXR0ZXJSZWFkT25seVJlc3VsdChFeGVjU3Rh
dGUqIGV4ZWMsIEV4Y2VwdGlvbkNvZGUmIGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1NWR1RyYW5zZm9ybUxpc3QqIGxpc3RXcmFwcGVyLCBQYXNzUmVmUHRyPFBPRExpc3RJ
dGVtPiBpdGVtKQogewogICAgIGlmIChlYykgewogICAgICAgICBzZXRET01FeGNlcHRpb24oZXhl
YywgZWMpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9Ci0gICAgY29udGV4
dC0+c3ZnQXR0cmlidXRlQ2hhbmdlZChsaXN0LT5hc3NvY2lhdGVkQXR0cmlidXRlTmFtZSgpKTsK
LSAgICByZXR1cm4gdG9KUyhleGVjLCBkZXByZWNhdGVkR2xvYmFsT2JqZWN0Rm9yUHJvdG90eXBl
KGV4ZWMpLCBKU1NWR1N0YXRpY1BPRFR5cGVXcmFwcGVyPFNWR1RyYW5zZm9ybT46OmNyZWF0ZSgq
aXRlbSkuZ2V0KCksIGNvbnRleHQpOworCisgICAgU1ZHVHJhbnNmb3JtTGlzdCogbGlzdCA9IGxp
c3RXcmFwcGVyLT5pbXBsKCk7CisgICAgSlNTVkdDb250ZXh0Q2FjaGU6OnByb3BhZ2F0ZVNWR0RP
TUNoYW5nZShsaXN0V3JhcHBlciwgbGlzdC0+YXNzb2NpYXRlZEF0dHJpYnV0ZU5hbWUoKSk7Cisg
ICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBKU1NWR1N0YXRpY1BPRFR5cGVXcmFw
cGVyPFNWR1RyYW5zZm9ybT46OmNyZWF0ZSgqaXRlbSkuZ2V0KCksIDAgLyogbm8gY29udGV4dCBv
biBwdXJwb3NlICovKTsKIH0KIAogSlNWYWx1ZSBKU1NWR1RyYW5zZm9ybUxpc3Q6OmNsZWFyKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7Ci0gICAgaW1wbCgpLT5jbGVhcihlYyk7CisgICAgU1ZHVHJhbnNmb3JtTGlzdEJhc2UqIGxp
c3RJbXAgPSBpbXBsKCk7CisgICAgbGlzdEltcC0+Y2xlYXIoZWMpOwogICAgIHNldERPTUV4Y2Vw
dGlvbihleGVjLCBlYyk7Ci0gICAgbV9jb250ZXh0LT5zdmdBdHRyaWJ1dGVDaGFuZ2VkKGltcGwo
KS0+YXNzb2NpYXRlZEF0dHJpYnV0ZU5hbWUoKSk7CisKKyAgICBKU1NWR0NvbnRleHRDYWNoZTo6
cHJvcGFnYXRlU1ZHRE9NQ2hhbmdlKHRoaXMsIGxpc3RJbXAtPmFzc29jaWF0ZWRBdHRyaWJ1dGVO
YW1lKCkpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCkBAIC03Niw4ICs4Nyw3IEBA
IEpTVmFsdWUgSlNTVkdUcmFuc2Zvcm1MaXN0Ojppbml0aWFsaXplKEUKIHsKICAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKICAgICBTVkdUcmFuc2Zvcm1MaXN0QmFzZSogbGlzdEltcCA9IGltcGwo
KTsKLSAgICByZXR1cm4gZmluaXNoU2V0dGVyKGV4ZWMsIGVjLCBjb250ZXh0KCksIGltcGwoKSwK
LSAgICAgICAgbGlzdEltcC0+aW5pdGlhbGl6ZShQT0RMaXN0SXRlbTo6Y29weSh0b1NWR1RyYW5z
Zm9ybShhcmdzLmF0KDApKSksIGVjKSk7CisgICAgcmV0dXJuIGZpbmlzaFNldHRlcihleGVjLCBl
YywgZ2xvYmFsT2JqZWN0KCksIHRoaXMsIGxpc3RJbXAtPmluaXRpYWxpemUoUE9ETGlzdEl0ZW06
OmNvcHkodG9TVkdUcmFuc2Zvcm0oYXJncy5hdCgwKSkpLCBlYykpOwogfQogCiBKU1ZhbHVlIEpT
U1ZHVHJhbnNmb3JtTGlzdDo6Z2V0SXRlbShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3Qm
IGFyZ3MpCkBAIC05MSw4ICsxMDEsNyBAQCBKU1ZhbHVlIEpTU1ZHVHJhbnNmb3JtTGlzdDo6Z2V0
SXRlbShFeGVjCiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBTVkdUcmFuc2Zvcm1M
aXN0QmFzZSogbGlzdEltcCA9IGltcGwoKTsKLSAgICByZXR1cm4gZmluaXNoR2V0dGVyKGV4ZWMs
IGVjLCBjb250ZXh0KCksIGltcGwoKSwKLSAgICAgICAgbGlzdEltcC0+Z2V0SXRlbShpbmRleCwg
ZWMpKTsKKyAgICByZXR1cm4gZmluaXNoR2V0dGVyKGV4ZWMsIGVjLCBnbG9iYWxPYmplY3QoKSwg
dGhpcywgbGlzdEltcC0+Z2V0SXRlbShpbmRleCwgZWMpKTsKIH0KIAogSlNWYWx1ZSBKU1NWR1Ry
YW5zZm9ybUxpc3Q6Omluc2VydEl0ZW1CZWZvcmUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdM
aXN0JiBhcmdzKQpAQCAtMTA2LDggKzExNSw3IEBAIEpTVmFsdWUgSlNTVkdUcmFuc2Zvcm1MaXN0
OjppbnNlcnRJdGVtQmUKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFNWR1RyYW5z
Zm9ybUxpc3RCYXNlKiBsaXN0SW1wID0gaW1wbCgpOwotICAgIHJldHVybiBmaW5pc2hTZXR0ZXIo
ZXhlYywgZWMsIGNvbnRleHQoKSwgaW1wbCgpLAotICAgICAgICBsaXN0SW1wLT5pbnNlcnRJdGVt
QmVmb3JlKFBPRExpc3RJdGVtOjpjb3B5KHRvU1ZHVHJhbnNmb3JtKGFyZ3MuYXQoMCkpKSwgaW5k
ZXgsIGVjKSk7CisgICAgcmV0dXJuIGZpbmlzaFNldHRlcihleGVjLCBlYywgZ2xvYmFsT2JqZWN0
KCksIHRoaXMsIGxpc3RJbXAtPmluc2VydEl0ZW1CZWZvcmUoUE9ETGlzdEl0ZW06OmNvcHkodG9T
VkdUcmFuc2Zvcm0oYXJncy5hdCgwKSkpLCBpbmRleCwgZWMpKTsKIH0KIAogSlNWYWx1ZSBKU1NW
R1RyYW5zZm9ybUxpc3Q6OnJlcGxhY2VJdGVtKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlz
dCYgYXJncykKQEAgLTEyMCw5ICsxMjgsOCBAQCBKU1ZhbHVlIEpTU1ZHVHJhbnNmb3JtTGlzdDo6
cmVwbGFjZUl0ZW0oCiAgICAgfQogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgU1ZH
VHJhbnNmb3JtTGlzdEJhc2UqIGxpc3RJbXAgPSBpbXBsKCk7Ci0gICAgcmV0dXJuIGZpbmlzaFNl
dHRlcihleGVjLCBlYywgY29udGV4dCgpLCBpbXBsKCksCi0gICAgICAgIGxpc3RJbXAtPnJlcGxh
Y2VJdGVtKFBPRExpc3RJdGVtOjpjb3B5KHRvU1ZHVHJhbnNmb3JtKGFyZ3MuYXQoMCkpKSwgaW5k
ZXgsIGVjKSk7CisgICAgU1ZHVHJhbnNmb3JtTGlzdEJhc2UqIGxpc3RJbXAgPSBpbXBsKCk7IAor
ICAgIHJldHVybiBmaW5pc2hTZXR0ZXIoZXhlYywgZWMsIGdsb2JhbE9iamVjdCgpLCB0aGlzLCBs
aXN0SW1wLT5yZXBsYWNlSXRlbShQT0RMaXN0SXRlbTo6Y29weSh0b1NWR1RyYW5zZm9ybShhcmdz
LmF0KDApKSksIGluZGV4LCBlYykpOwogfQogCiBKU1ZhbHVlIEpTU1ZHVHJhbnNmb3JtTGlzdDo6
cmVtb3ZlSXRlbShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCkBAIC0xMzYs
MTYgKzE0MywxNCBAQCBKU1ZhbHVlIEpTU1ZHVHJhbnNmb3JtTGlzdDo6cmVtb3ZlSXRlbShFCiAK
ICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBTVkdUcmFuc2Zvcm1MaXN0QmFzZSogbGlz
dEltcCA9IGltcGwoKTsKLSAgICByZXR1cm4gZmluaXNoU2V0dGVyUmVhZE9ubHlSZXN1bHQoZXhl
YywgZWMsIGNvbnRleHQoKSwgaW1wbCgpLAotICAgICAgICBsaXN0SW1wLT5yZW1vdmVJdGVtKGlu
ZGV4LCBlYykpOworICAgIHJldHVybiBmaW5pc2hTZXR0ZXJSZWFkT25seVJlc3VsdChleGVjLCBl
YywgZ2xvYmFsT2JqZWN0KCksIHRoaXMsIGxpc3RJbXAtPnJlbW92ZUl0ZW0oaW5kZXgsIGVjKSk7
CiB9CiAKIEpTVmFsdWUgSlNTVkdUcmFuc2Zvcm1MaXN0OjphcHBlbmRJdGVtKEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
ICAgICBTVkdUcmFuc2Zvcm1MaXN0QmFzZSogbGlzdEltcCA9IGltcGwoKTsKLSAgICByZXR1cm4g
ZmluaXNoU2V0dGVyKGV4ZWMsIGVjLCBjb250ZXh0KCksIGltcGwoKSwKLSAgICAgICAgbGlzdElt
cC0+YXBwZW5kSXRlbShQT0RMaXN0SXRlbTo6Y29weSh0b1NWR1RyYW5zZm9ybShhcmdzLmF0KDAp
KSksIGVjKSk7CisgICAgcmV0dXJuIGZpbmlzaFNldHRlcihleGVjLCBlYywgZ2xvYmFsT2JqZWN0
KCksIHRoaXMsIGxpc3RJbXAtPmFwcGVuZEl0ZW0oUE9ETGlzdEl0ZW06OmNvcHkodG9TVkdUcmFu
c2Zvcm0oYXJncy5hdCgwKSkpLCBlYykpOwogfQogCiB9CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJldmlzaW9uIDUyMzg1KQorKysgV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAt
MTMyLDE1ICsxMzIsNyBAQCBzdWIgR2V0UGFyZW50Q2xhc3NOYW1lCiAgICAgbXkgJGRhdGFOb2Rl
ID0gc2hpZnQ7CiAKICAgICByZXR1cm4gJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
TGVnYWN5UGFyZW50In0gaWYgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTGVnYWN5
UGFyZW50In07Ci0gICAgaWYgKEB7JGRhdGFOb2RlLT5wYXJlbnRzfSBlcSAwKSB7Ci0gICAgICAg
ICMgRklYTUU6IFNWRyB0eXBlcyByZXF1aXJpbmcgYSBjb250ZXh0KCkgcG9pbnRlciBkbyBub3Qg
aGF2ZSBlbm91Z2gKLSAgICAgICAgIyBzcGFjZSB0byBob2xkIGEgZ2xvYmFsT2JqZWN0IHBvaW50
ZXIgYXMgd2VsbCB3L28gaGl0dGluZyB0aGUgQ0VMTF9TSVpFIGxpbWl0LgotICAgICAgICAjIFRo
aXMgY291bGQgYmUgZml4ZWQgYnkgbW92aW5nIGNvbnRleHQoKSBpbnRvIHRoZSB2YXJpb3VzIGlt
cGwoKSBjbGFzc2VzLgotICAgICAgICAjIFVudGlsIHRoZW4sIHdlIHNwZWNpYWwgY2FzZSB0aGVz
ZSBTVkcgYmluZGluZ3MgYW5kIGFsbG93IHRoZW0gdG8gcmV0dXJuCi0gICAgICAgICMgdGhlIHdy
b25nIHByb3RvdHlwZXMgYW5kIGNvbnN0cnVjdG9ycyBkdXJpbmcgeC1mcmFtZSBhY2Nlc3MuICBT
ZWUgYnVnIDI3MDg4LgotICAgICAgICByZXR1cm4gIkRPTU9iamVjdFdpdGhTVkdDb250ZXh0IiBp
ZiBJc1NWR1R5cGVOZWVkaW5nQ29udGV4dFBhcmFtZXRlcigkZGF0YU5vZGUtPm5hbWUpOwotICAg
ICAgICByZXR1cm4gIkRPTU9iamVjdFdpdGhHbG9iYWxQb2ludGVyIjsKLSAgICB9CisgICAgcmV0
dXJuICJET01PYmplY3RXaXRoR2xvYmFsUG9pbnRlciIgaWYgKEB7JGRhdGFOb2RlLT5wYXJlbnRz
fSBlcSAwKTsKICAgICByZXR1cm4gIkpTIiAuICRjb2RlR2VuZXJhdG9yLT5TdHJpcE1vZHVsZSgk
ZGF0YU5vZGUtPnBhcmVudHMoMCkpOwogfQogCkBAIC0xNjksMTYgKzE2MSw2IEBAIHN1YiBJbmRl
eEdldHRlclJldHVybnNTdHJpbmdzCiAgICAgcmV0dXJuIDA7CiB9CiAKLXN1YiBDcmVhdGVTVkdD
b250ZXh0SW50ZXJmYWNlTmFtZQotewotICAgIG15ICR0eXBlID0gc2hpZnQ7Ci0KLSAgICByZXR1
cm4gJHR5cGUgaWYgJGNvZGVHZW5lcmF0b3ItPklzU1ZHQW5pbWF0ZWRUeXBlKCR0eXBlKTsKLSAg
ICByZXR1cm4gIlNWR1BhdGhTZWciIGlmICR0eXBlID1+IC9eU1ZHUGF0aFNlZy8gYW5kICR0eXBl
IG5lICJTVkdQYXRoU2VnTGlzdCI7Ci0KLSAgICByZXR1cm4gIiI7Ci19Ci0KIHN1YiBBZGRJbmNs
dWRlc0ZvclR5cGUKIHsKICAgICBteSAkdHlwZSA9ICRjb2RlR2VuZXJhdG9yLT5TdHJpcE1vZHVs
ZShzaGlmdCk7CkBAIC00OTEsNyArNDczLDYgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgbXkg
JGhhc1BhcmVudCA9ICRoYXNMZWdhY3lQYXJlbnQgfHwgJGhhc1JlYWxQYXJlbnQ7CiAgICAgbXkg
JHBhcmVudENsYXNzTmFtZSA9IEdldFBhcmVudENsYXNzTmFtZSgkZGF0YU5vZGUpOwogICAgIG15
ICRjb25kaXRpb25hbCA9ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNvbmRpdGlv
bmFsIn07Ci0gICAgbXkgJG5lZWRzU1ZHQ29udGV4dCA9IElzU1ZHVHlwZU5lZWRpbmdDb250ZXh0
UGFyYW1ldGVyKCRpbnRlcmZhY2VOYW1lKTsKICAgICBteSAkZXZlbnRUYXJnZXQgPSAkZGF0YU5v
ZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJFdmVudFRhcmdldCJ9OwogICAgIG15ICRuZWVkc01h
cmtDaGlsZHJlbiA9ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbU1hcmtG
dW5jdGlvbiJ9IHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkV2ZW50VGFyZ2V0
In07CiAgICAgCkBAIC01MTEsOCArNDkyLDcgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgaWYg
KCRoYXNQYXJlbnQpIHsKICAgICAgICAgJGhlYWRlckluY2x1ZGVzeyIkcGFyZW50Q2xhc3NOYW1l
LmgifSA9IDE7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgJGhlYWRlckluY2x1ZGVzeyJET01PYmpl
Y3RXaXRoU1ZHQ29udGV4dC5oIn0gPSAkbmVlZHNTVkdDb250ZXh0OwotICAgICAgICAkaGVhZGVy
SW5jbHVkZXN7IkpTRE9NQmluZGluZy5oIn0gPSAhJG5lZWRzU1ZHQ29udGV4dDsKKyAgICAgICAg
JGhlYWRlckluY2x1ZGVzeyJKU0RPTUJpbmRpbmcuaCJ9ID0gMTsKICAgICAgICAgJGhlYWRlcklu
Y2x1ZGVzeyI8cnVudGltZS9KU0dsb2JhbE9iamVjdC5oPiJ9ID0gMTsKICAgICAgICAgJGhlYWRl
ckluY2x1ZGVzeyI8cnVudGltZS9PYmplY3RQcm90b3R5cGUuaD4ifSA9IDE7CiAgICAgfQpAQCAt
NTU5LDggKzUzOSw2IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogICAgICAgICBwdXNoKEBoZWFkZXJD
b250ZW50LCAiICAgICRjbGFzc05hbWUoTm9uTnVsbFBhc3NSZWZQdHI8SlNDOjpTdHJ1Y3R1cmU+
LCBQYXNzUmVmUHRyPCRpbXBsVHlwZT4sIEpTRE9NV2luZG93U2hlbGwqKTtcbiIpOwogICAgIH0g
ZWxzaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IklzV29ya2VyQ29udGV4dCJ9
KSB7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgJGNsYXNzTmFtZShOb25OdWxs
UGFzc1JlZlB0cjxKU0M6OlN0cnVjdHVyZT4sIFBhc3NSZWZQdHI8JGltcGxUeXBlPik7XG4iKTsK
LSAgICB9IGVsc2lmIChJc1NWR1R5cGVOZWVkaW5nQ29udGV4dFBhcmFtZXRlcigkaW1wbENsYXNz
TmFtZSkpIHsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAkY2xhc3NOYW1lKE5v
bk51bGxQYXNzUmVmUHRyPEpTQzo6U3RydWN0dXJlPiwgSlNET01HbG9iYWxPYmplY3QqLCBQYXNz
UmVmUHRyPCRpbXBsVHlwZT4sIFNWR0VsZW1lbnQqIGNvbnRleHQpO1xuIik7CiAgICAgfSBlbHNl
IHsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAkY2xhc3NOYW1lKE5vbk51bGxQ
YXNzUmVmUHRyPEpTQzo6U3RydWN0dXJlPiwgSlNET01HbG9iYWxPYmplY3QqLCBQYXNzUmVmUHRy
PCRpbXBsVHlwZT4pO1xuIik7CiAgICAgfQpAQCAtNzgxLDcgKzc1OSw3IEBAIHN1YiBHZW5lcmF0
ZUhlYWRlcgogCiAgICAgaWYgKCEkaGFzUGFyZW50IHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57IkdlbmVyYXRlVG9KUyJ9IHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57IkN1c3RvbVRvSlMifSkgewogICAgICAgICBpZiAoJHBvZFR5cGUpIHsKLSAgICAgICAgICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsICJKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSos
IEpTRE9NR2xvYmFsT2JqZWN0KiwgSlNTVkdQT0RUeXBlV3JhcHBlcjwkcG9kVHlwZT4qLCBTVkdF
bGVtZW50KiBjb250ZXh0KTtcbiIpOworICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwg
IkpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBK
U1NWR1BPRFR5cGVXcmFwcGVyPCRwb2RUeXBlPiosIFNWR0VsZW1lbnQqKTtcbiIpOwogICAgICAg
ICB9IGVsc2lmIChJc1NWR1R5cGVOZWVkaW5nQ29udGV4dFBhcmFtZXRlcigkaW1wbENsYXNzTmFt
ZSkpIHsKICAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJKU0M6OkpTVmFsdWUgdG9K
UyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgJGltcGxUeXBlKiwgU1ZHRWxl
bWVudCogY29udGV4dCk7XG4iKTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTExNzEsOSArMTE0OSw2
IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgbXkgJHBvZFR5cGUgPSAkZGF0YU5v
ZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJQT0RUeXBlIn07CiAgICAgbXkgJGltcGxUeXBlID0g
JHBvZFR5cGUgPyAiSlNTVkdQT0RUeXBlV3JhcHBlcjwkcG9kVHlwZT4gIiA6ICRpbXBsQ2xhc3NO
YW1lOwogCi0gICAgbXkgJG5lZWRzU1ZHQ29udGV4dCA9IElzU1ZHVHlwZU5lZWRpbmdDb250ZXh0
UGFyYW1ldGVyKCRpbXBsQ2xhc3NOYW1lKTsKLSAgICBteSAkcGFyZW50TmVlZHNTVkdDb250ZXh0
ID0gKCRuZWVkc1NWR0NvbnRleHQgYW5kICRwYXJlbnRDbGFzc05hbWUgPX4gL1NWRy8pOwotCiAg
ICAgIyBDb25zdHJ1Y3RvcgogICAgIGlmICgkaW50ZXJmYWNlTmFtZSBlcSAiRE9NV2luZG93Iikg
ewogICAgICAgICBBZGRJbmNsdWRlc0ZvclR5cGUoIkpTRE9NV2luZG93U2hlbGwiKTsKQEAgLTEx
ODQsMTIgKzExNTksMTEgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIke2NsYXNzTmFtZX06OiRjbGFzc05hbWUoTm9uTnVsbFBhc3NSZWZQ
dHI8U3RydWN0dXJlPiBzdHJ1Y3R1cmUsIFBhc3NSZWZQdHI8JGltcGxUeXBlPiBpbXBsKVxuIik7
CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIDogJHBhcmVudENsYXNzTmFtZShzdHJ1
Y3R1cmUsIGltcGwpXG4iKTsKICAgICB9IGVsc2UgewotICAgICAgICBteSAkY29udGV4dEFyZyA9
ICRuZWVkc1NWR0NvbnRleHQgPyAiLCBTVkdFbGVtZW50KiBjb250ZXh0IiA6ICIiOwotICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiR7Y2xhc3NOYW1lfTo6JGNsYXNzTmFtZShOb25OdWxsUGFz
c1JlZlB0cjxTdHJ1Y3R1cmU+IHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgUGFzc1JlZlB0cjwkaW1wbFR5cGU+IGltcGwkY29udGV4dEFyZylcbiIpOworICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiR7Y2xhc3NOYW1lfTo6JGNsYXNzTmFtZShOb25OdWxsUGFz
c1JlZlB0cjxTdHJ1Y3R1cmU+IHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgUGFzc1JlZlB0cjwkaW1wbFR5cGU+IGltcGwpXG4iKTsKICAgICAgICAgaWYgKCRoYXNQ
YXJlbnQpIHsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIDogJHBhcmVudENs
YXNzTmFtZShzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCwgaW1wbCIgLiAoJHBhcmVudE5lZWRzU1ZH
Q29udGV4dCA/ICIsIGNvbnRleHQiIDogIiIpIC4gIilcbiIpOworICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgOiAkcGFyZW50Q2xhc3NOYW1lKHN0cnVjdHVyZSwgZ2xvYmFsT2Jq
ZWN0LCBpbXBsKVxuIik7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICA6ICRwYXJlbnRDbGFzc05hbWUoc3RydWN0dXJlLCBnbG9iYWxPYmplY3Qi
IC4gKCRuZWVkc1NWR0NvbnRleHQgPyAiLCBjb250ZXh0IiA6ICIiKSAuICIpXG4iKTsKKyAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIDogJHBhcmVudENsYXNzTmFtZShzdHJ1Y3R1
cmUsIGdsb2JhbE9iamVjdClcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgLCBtX2ltcGwoaW1wbClcbiIpOwogICAgICAgICB9CiAgICAgfQpAQCAtMTIxMiw2ICsxMTg2
LDggQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgZm9yZ2V0RE9NT2JqZWN0KHRo
aXMsIGltcGwoKSk7XG4iKTsKICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgSlNTVkdDb250ZXh0Q2FjaGU6OmZvcmdldFdyYXBwZXIodGhpcyk7XG4i
KSBpZiBJc1NWR1R5cGVOZWVkaW5nQ29udGV4dFBhcmFtZXRlcigkaW1wbENsYXNzTmFtZSk7CiAg
ICAgICAgIH0KIAogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CkBAIC0xMzkz
LDE1ICsxMzY5LDggQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KIAogICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiSlNWYWx1ZSAke2NvbnN0cnVjdG9yRnVuY3Rpb25OYW1l
fShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpXG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwot
ICAgICAgICAgICAgICAgIGlmIChJc1NWR1R5cGVOZWVkaW5nQ29udGV4dFBhcmFtZXRlcigkaW50
ZXJmYWNlTmFtZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgIyBGSVhNRTogU1ZHIGJpbmRpbmdz
IHdpdGggYSBjb250ZXh0IHBvaW50ZXIgaGF2ZSBubyBzcGFjZSB0byBzdG9yZSBhIGdsb2JhbE9i
amVjdAotICAgICAgICAgICAgICAgICAgICAjIHNvIHdlIHVzZSBkZXByZWNhdGVkR2xvYmFsT2Jq
ZWN0Rm9yUHJvdG90eXBlIGluc3RlYWQuCi0gICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIFVOVVNFRF9QQVJBTShzbG90KTtcbiIpOwotICAgICAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gJHtjbGFzc05hbWV9OjpnZXRDb25zdHJ1
Y3RvcihleGVjLCBkZXByZWNhdGVkR2xvYmFsT2JqZWN0Rm9yUHJvdG90eXBlKGV4ZWMpKTtcbiIp
OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgICR7Y2xhc3NOYW1lfSogZG9tT2JqZWN0ID0gc3RhdGljX2Nhc3Q8JGNs
YXNzTmFtZSo+KGFzT2JqZWN0KHNsb3Quc2xvdEJhc2UoKSkpO1xuIik7Ci0gICAgICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiAke2NsYXNzTmFtZX06OmdldENv
bnN0cnVjdG9yKGV4ZWMsIGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpO1xuIik7Ci0gICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICR7Y2xh
c3NOYW1lfSogZG9tT2JqZWN0ID0gc3RhdGljX2Nhc3Q8JGNsYXNzTmFtZSo+KGFzT2JqZWN0KHNs
b3Quc2xvdEJhc2UoKSkpO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgcmV0dXJuICR7Y2xhc3NOYW1lfTo6Z2V0Q29uc3RydWN0b3IoZXhlYywgZG9tT2JqZWN0
LT5nbG9iYWxPYmplY3QoKSk7XG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIn1cbiIpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xNDk1LDE2ICsxNDY0LDE3
IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gb2JqZWN0
XG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICBzdGF0aWNfY2FzdDwkY2xhc3NOYW1lKj4odGhpc09iamVjdCktPnB1dERpcmVjdChJZGVudGlm
aWVyKGV4ZWMsIFwiJG5hbWVcIiksIHZhbHVlKTtcbiIpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICAkY2xhc3NOYW1lKiBjYXN0ZWRUaGlzT2JqID0gc3RhdGljX2Nhc3Q8JGNsYXNzTmFt
ZSo+KHRoaXNPYmplY3QpO1xuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgJGltcGxUeXBlKiBpbXAgPSBzdGF0aWNfY2FzdDwkaW1wbFR5cGUq
PihjYXN0ZWRUaGlzT2JqLT5pbXBsKCkpO1xuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCRwb2RUeXBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgICRwb2RUeXBlIGltcCgqc3RhdGljX2Nhc3Q8JGNsYXNzTmFtZSo+
KHRoaXNPYmplY3QpLT5pbXBsKCkpO1xuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICRwb2RUeXBlIHBvZEltcCgqaW1wKTtcbiIpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHBvZFR5cGUgZXEgImZsb2F0Iikg
eyAjIFNwZWNpYWwgY2FzZSBmb3IgSlNTVkdOdW1iZXIKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGltcCA9ICIgLiBKU1ZhbHVlVG9O
YXRpdmUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAidmFsdWUiKSAuICI7XG4iKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHBvZElt
cCA9ICIgLiBKU1ZhbHVlVG9OYXRpdmUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAidmFsdWUiKSAu
ICI7XG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlt
cC5zZXQkaW1wbFNldHRlckZ1bmN0aW9uTmFtZSgiIC4gSlNWYWx1ZVRvTmF0aXZlKCRhdHRyaWJ1
dGUtPnNpZ25hdHVyZSwgInZhbHVlIikgLiAiKTtcbiIpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcG9kSW1wLnNldCRpbXBsU2V0
dGVyRnVuY3Rpb25OYW1lKCIgLiBKU1ZhbHVlVG9OYXRpdmUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJl
LCAidmFsdWUiKSAuICIpO1xuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
ICAgIHN0YXRpY19jYXN0PCRjbGFzc05hbWUqPih0aGlzT2JqZWN0KS0+aW1wbCgpLT5jb21taXRD
aGFuZ2UoaW1wLCBzdGF0aWNfY2FzdDwkY2xhc3NOYW1lKj4odGhpc09iamVjdCktPmNvbnRleHQo
KSk7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgaW1wLT5jb21taXRDaGFuZ2UocG9kSW1wLCBjYXN0ZWRUaGlzT2JqKTtcbiIpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICRpbXBsQ2xhc3NOYW1lKiBpbXAg
PSBzdGF0aWNfY2FzdDwkaW1wbENsYXNzTmFtZSo+KHN0YXRpY19jYXN0PCRjbGFzc05hbWUqPih0
aGlzT2JqZWN0KS0+aW1wbCgpKTtcbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBteSAkbmF0aXZlVmFsdWUgPSBKU1ZhbHVlVG9OYXRpdmUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJl
LCAidmFsdWUiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7XG4iKSBpZiBAeyRhdHRyaWJ1dGUtPnNl
dHRlckV4Y2VwdGlvbnN9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSAkcmVm
bGVjdCA9ICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlJlZmxl
Y3QifTsKQEAgLTE1MjAsMTEgKzE0OTAsNiBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiwgZWMi
KSBpZiBAeyRhdHRyaWJ1dGUtPnNldHRlckV4Y2VwdGlvbnN9OwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIik7XG4iKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgc2V0RE9NRXhjZXB0aW9u
KGV4ZWMsIGVjKTtcbiIpIGlmIEB7JGF0dHJpYnV0ZS0+c2V0dGVyRXhjZXB0aW9uc307Ci0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElzU1ZHVHlwZU5lZWRpbmdDb250ZXh0
UGFyYW1ldGVyKCRpbXBsQ2xhc3NOYW1lKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKHN0YXRpY19jYXN0PCRjbGFzc05h
bWUqPih0aGlzT2JqZWN0KS0+Y29udGV4dCgpKVxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgc3RhdGljX2Nhc3Q8JGNs
YXNzTmFtZSo+KHRoaXNPYmplY3QpLT5jb250ZXh0KCktPnN2Z0F0dHJpYnV0ZUNoYW5nZWQoc3Rh
dGljX2Nhc3Q8JGNsYXNzTmFtZSo+KHRoaXNPYmplY3QpLT5pbXBsKCktPmFzc29jaWF0ZWRBdHRy
aWJ1dGVOYW1lKCkpO1xuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgICAgICAKQEAgLTE1ODksMTIgKzE1NTQsOCBAQCBzdWIgR2VuZXJh
dGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgaWYgKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tIn0gfHwgJGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4
dGVuZGVkQXR0cmlidXRlcy0+eyJKU0NDdXN0b20ifSkgewogICAgICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgIHJldHVybiBjYXN0ZWRUaGlzT2JqLT4iIC4gJGZ1bmN0aW9uSW1w
bGVtZW50YXRpb25OYW1lIC4gIihleGVjLCBhcmdzKTtcbiIpOwogICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICBpZiAoJHBvZFR5cGUpIHsKLSAgICAgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNTVkdQT0RUeXBlV3JhcHBlcjwkcG9kVHlwZT4qIHdy
YXBwZXIgPSBjYXN0ZWRUaGlzT2JqLT5pbXBsKCk7XG4iKTsKLSAgICAgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgJHBvZFR5cGUgaW1wKCp3cmFwcGVyKTtcbiIpOwotICAg
ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgICRpbXBsQ2xhc3NOYW1lKiBpbXAgPSBzdGF0aWNfY2FzdDwkaW1wbENsYXNzTmFt
ZSo+KGNhc3RlZFRoaXNPYmotPmltcGwoKSk7XG4iKTsKLSAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJGltcGxUeXBlKiBpbXAgPSBzdGF0
aWNfY2FzdDwkaW1wbFR5cGUqPihjYXN0ZWRUaGlzT2JqLT5pbXBsKCkpO1xuIik7CisgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJHBvZFR5cGUgcG9kSW1wKCppbXApO1xu
IikgaWYgJHBvZFR5cGU7CiAKICAgICAgICAgICAgICAgICBteSAkbnVtUGFyYW1ldGVycyA9IEB7
JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfTsKIApAQCAtMTYxNCw3ICsxNTc1LDcgQEAgc3ViIEdlbmVy
YXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBt
eSAkcGFyYW1JbmRleCA9IDA7Ci0gICAgICAgICAgICAgICAgbXkgJGZ1bmN0aW9uU3RyaW5nID0g
ImltcCIgLiAoJHBvZFR5cGUgPyAiLiIgOiAiLT4iKSAuICRmdW5jdGlvbkltcGxlbWVudGF0aW9u
TmFtZSAuICIoIjsKKyAgICAgICAgICAgICAgICBteSAkZnVuY3Rpb25TdHJpbmcgPSAoJHBvZFR5
cGUgPyAicG9kSW1wLiIgOiAiaW1wLT4iKSAuICRmdW5jdGlvbkltcGxlbWVudGF0aW9uTmFtZSAu
ICIoIjsKIAogICAgICAgICAgICAgICAgIG15ICRoYXNPcHRpb25hbEFyZ3VtZW50cyA9IDA7CiAK
QEAgLTE3MjUsMTEgKzE2ODYsMTAgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAg
ICAgaWYgKCRwb2RUeXBlKSB7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIkpTQzo6
SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1NWR1BPRFR5cGVXcmFwcGVyPCRwb2RUeXBlPiogb2JqZWN0LCBTVkdFbGVt
ZW50KiBjb250ZXh0KVxuIik7CiAgICAgICAgIH0gZWxzaWYgKElzU1ZHVHlwZU5lZWRpbmdDb250
ZXh0UGFyYW1ldGVyKCRpbXBsQ2xhc3NOYW1lKSkgewotICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsICRpbXBsVHlwZSogb2JqZWN0LCBTVkdFbGVtZW50KiBj
b250ZXh0KVxuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIkpTQzo6SlNWYWx1
ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCAkaW1wbFR5cGUqIG9iamVjdCwgU1ZHRWxlbWVudCogY29udGV4dClcbiIpOwogICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJKU0M6OkpTVmFsdWUg
dG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgJGltcGxUeXBlKiBvYmplY3QpXG4iKTsKICAgICAgICAgfQotCiAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAie1xuIik7CiAgICAgICAgIGlmICgkcG9kVHlwZSkgewogICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIGdldERPTU9iamVjdFdyYXBwZXI8JGNsYXNz
TmFtZSwgSlNTVkdQT0RUeXBlV3JhcHBlcjwkcG9kVHlwZT4gPihleGVjLCBnbG9iYWxPYmplY3Qs
IG9iamVjdCwgY29udGV4dCk7XG4iKTsKQEAgLTE3ODcsMTEgKzE3NDcsNyBAQCBzdWIgR2VuZXJh
dGVJbXBsZW1lbnRhdGlvbkZ1bmN0aW9uQ2FsbCgpCiAgICAgaWYgKCRmdW5jdGlvbi0+c2lnbmF0
dXJlLT50eXBlIGVxICJ2b2lkIikgewogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgJGluZGVu
dCAuICIkZnVuY3Rpb25TdHJpbmc7XG4iKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICRp
bmRlbnQgLiAic2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTtcbiIpIGlmIEB7JGZ1bmN0aW9uLT5y
YWlzZXNFeGNlcHRpb25zfTsKLQotICAgICAgICBpZiAoJHBvZFR5cGUpIHsKLSAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAkaW5kZW50IC4gIndyYXBwZXItPmNvbW1pdENoYW5nZShpbXAs
IGNhc3RlZFRoaXNPYmotPmNvbnRleHQoKSk7XG4iKTsKLSAgICAgICAgfQotCisgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAkaW5kZW50IC4gImltcC0+Y29tbWl0Q2hhbmdlKHBvZEltcCwgY2Fz
dGVkVGhpc09iaik7XG4iKSBpZiAkcG9kVHlwZTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICRpbmRlbnQgLiAicmV0dXJuIGpzVW5kZWZpbmVkKCk7XG4iKTsKICAgICB9IGVsc2UgewogICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIiAuICRpbmRlbnQgLiAiSlNDOjpKU1ZhbHVlIHJl
c3VsdCA9ICIgLiBOYXRpdmVUb0pTVmFsdWUoJGZ1bmN0aW9uLT5zaWduYXR1cmUsIDEsICRpbXBs
Q2xhc3NOYW1lLCAiIiwgJGZ1bmN0aW9uU3RyaW5nLCAiY2FzdGVkVGhpc09iaiIpIC4gIjtcbiIp
OwpAQCAtMTgwMCw3ICsxNzU2LDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb25GdW5jdGlv
bkNhbGwoKQogICAgICAgICBpZiAoJHBvZFR5cGUgYW5kIG5vdCAkZnVuY3Rpb24tPnNpZ25hdHVy
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkltbXV0YWJsZSJ9KSB7CiAgICAgICAgICAgICAjIElt
bXV0YWJsZSBtZXRob2RzIGRvIG5vdCBjb21taXQgY2hhbmdlcyBiYWNrIHRvIHRoZSBpbnN0YW5j
ZSwgdGh1cyBwcm9kdWNpbmcKICAgICAgICAgICAgICMgYSBuZXcgaW5zdGFuY2UgcmF0aGVyIHRo
YW4gbXV0YXRpbmcgZXhpc3Rpbmcgb25lLgotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICRpbmRlbnQgLiAid3JhcHBlci0+Y29tbWl0Q2hhbmdlKGltcCwgY2FzdGVkVGhpc09iai0+Y29u
dGV4dCgpKTtcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICRpbmRlbnQgLiAi
aW1wLT5jb21taXRDaGFuZ2UocG9kSW1wLCBjYXN0ZWRUaGlzT2JqKTtcbiIpIGlmICRwb2RUeXBl
OwogICAgICAgICB9CiAKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICRpbmRlbnQgLiAicmV0
dXJuIHJlc3VsdDtcbiIpOwpAQCAtMTkyMCw5ICsxODc2LDcgQEAgc3ViIE5hdGl2ZVRvSlNWYWx1
ZQogICAgICAgICByZXR1cm4gImpzU3RyaW5nKGV4ZWMsICR2YWx1ZSkiOwogICAgIH0KICAgICAK
LSAgICAjIFNvbWUgU1ZHIGJpbmRpbmdzIGRvbid0IGhhdmUgc3BhY2UgdG8gc3RvcmUgYSBnbG9i
YWxPYmplY3QgcG9pbnRlciwgZm9yIHRob3NlLCB3ZSB1c2UgdGhlIGRlcHJlY2F0ZWRHbG9iYWxP
YmplY3RGb3JQcm90b3R5cGUgaGFjayBmb3Igbm93LgotICAgIG15ICRnbG9iYWxPYmplY3QgPSBJ
c1NWR1R5cGVOZWVkaW5nQ29udGV4dFBhcmFtZXRlcigkaW1wbENsYXNzTmFtZSkgPyAiZGVwcmVj
YXRlZEdsb2JhbE9iamVjdEZvclByb3RvdHlwZShleGVjKSIgOiAiJHRoaXNWYWx1ZS0+Z2xvYmFs
T2JqZWN0KCkiOwotCisgICAgbXkgJGdsb2JhbE9iamVjdCA9ICIkdGhpc1ZhbHVlLT5nbG9iYWxP
YmplY3QoKSI7CiAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1BvZFR5cGUoJHR5cGUpKSB7CiAg
ICAgICAgICRpbXBsSW5jbHVkZXN7IkpTJHR5cGUuaCJ9ID0gMTsKIApAQCAtMTk0MCwyNSArMTg5
NCwxNiBAQCBzdWIgTmF0aXZlVG9KU1ZhbHVlCiAgICAgICAgICAgICBhbmQgJGNvZGVHZW5lcmF0
b3ItPklzUG9kVHlwZVdpdGhXcml0ZWFibGVQcm9wZXJ0aWVzKCR0eXBlKQogICAgICAgICAgICAg
YW5kIG5vdCBkZWZpbmVkICRzaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJJbW11dGFi
bGUifSkgewogICAgICAgICAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1BvZFR5cGUoJGltcGxD
bGFzc05hbWUpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJ0b0pTKGV4ZWMsICRnbG9iYWxP
YmplY3QsIEpTU1ZHU3RhdGljUE9EVHlwZVdyYXBwZXJXaXRoUE9EVHlwZVBhcmVudDwkbmF0aXZl
VHlwZSwgJGltcGxDbGFzc05hbWU+OjpjcmVhdGUoJHZhbHVlLCAkdGhpc1ZhbHVlLT5pbXBsKCkp
LmdldCgpLCAkdGhpc1ZhbHVlLT5jb250ZXh0KCkpIjsKKyAgICAgICAgICAgICAgICByZXR1cm4g
InRvSlMoZXhlYywgJGdsb2JhbE9iamVjdCwgSlNTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcldpdGhQ
T0RUeXBlUGFyZW50PCRuYXRpdmVUeXBlLCAkaW1wbENsYXNzTmFtZT46OmNyZWF0ZSgkdmFsdWUs
ICR0aGlzVmFsdWUtPmltcGwoKSkuZ2V0KCksIEpTU1ZHQ29udGV4dENhY2hlOjpzdmdDb250ZXh0
Rm9yRE9NT2JqZWN0KGNhc3RlZFRoaXMpKSI7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgICAgIHJldHVybiAidG9KUyhleGVjLCAkZ2xvYmFsT2JqZWN0LCBKU1NWR1N0YXRpY1BP
RFR5cGVXcmFwcGVyV2l0aFBhcmVudDwkbmF0aXZlVHlwZSwgJGltcGxDbGFzc05hbWU+OjpjcmVh
dGUoaW1wLCAmJHtpbXBsQ2xhc3NOYW1lfTo6JGdldHRlciwgJiR7aW1wbENsYXNzTmFtZX06OiRz
ZXR0ZXIpLmdldCgpLCBpbXApIjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAg
IGlmICgkaW1wbENsYXNzTmFtZUZvclZhbHVlQ29udmVyc2lvbiBlcSAiIikgewotICAgICAgICAg
ICAgIyBTVkdab29tRXZlbnQgaGFzIG5vIGNvbnRleHQoKSBwb2ludGVyLCBhbmQgaXMgYWxzbyBu
b3QgYW4gU1ZHRWxlbWVudC4KLSAgICAgICAgICAgICMgVGhpcyBpcyBub3QgYSBwcm9ibGVtLCBi
ZWNhdXNlIFNWR1pvb21FdmVudCBoYXMgbm8gcmVhZC93cml0ZSBwcm9wZXJ0aWVzLgotICAgICAg
ICAgICAgcmV0dXJuICJ0b0pTKGV4ZWMsICRnbG9iYWxPYmplY3QsIEpTU1ZHU3RhdGljUE9EVHlw
ZVdyYXBwZXI8JG5hdGl2ZVR5cGU+OjpjcmVhdGUoJHZhbHVlKS5nZXQoKSwgMCkiIGlmICRpbXBs
Q2xhc3NOYW1lIGVxICJTVkdab29tRXZlbnQiOwotCi0gICAgICAgICAgICBpZiAoSXNTVkdUeXBl
TmVlZGluZ0NvbnRleHRQYXJhbWV0ZXIoJGltcGxDbGFzc05hbWUpKSB7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuICJ0b0pTKGV4ZWMsICRnbG9iYWxPYmplY3QsIEpTU1ZHU3RhdGljUE9EVHlwZVdy
YXBwZXI8JG5hdGl2ZVR5cGU+OjpjcmVhdGUoJHZhbHVlKS5nZXQoKSwgY2FzdGVkVGhpc09iai0+
Y29udGV4dCgpKSIgaWYgJGluRnVuY3Rpb25DYWxsOwotICAgICAgICAgICAgICAgIHJldHVybiAi
dG9KUyhleGVjLCAkZ2xvYmFsT2JqZWN0LCBKU1NWR1N0YXRpY1BPRFR5cGVXcmFwcGVyPCRuYXRp
dmVUeXBlPjo6Y3JlYXRlKCR2YWx1ZSkuZ2V0KCksICR0aGlzVmFsdWUtPmNvbnRleHQoKSkiOwot
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gInRvSlMoZXhlYywg
JGdsb2JhbE9iamVjdCwgSlNTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcjwkbmF0aXZlVHlwZT46OmNy
ZWF0ZSgkdmFsdWUpLmdldCgpLCBpbXApIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNl
IHsgIyBUaGVzZSBjbGFzc2VzLCBhbHdheXMgaGF2ZSBhIG1fY29udGV4dCBwb2ludGVyIQotICAg
ICAgICAgICAgcmV0dXJuICJ0b0pTKGV4ZWMsICRnbG9iYWxPYmplY3QsIEpTU1ZHRHluYW1pY1BP
RFR5cGVXcmFwcGVyQ2FjaGU8JG5hdGl2ZVR5cGUsICRpbXBsQ2xhc3NOYW1lRm9yVmFsdWVDb252
ZXJzaW9uPjo6bG9va3VwT3JDcmVhdGVXcmFwcGVyKGltcCwgJiR7aW1wbENsYXNzTmFtZUZvclZh
bHVlQ29udmVyc2lvbn06OiRnZXR0ZXIsICYke2ltcGxDbGFzc05hbWVGb3JWYWx1ZUNvbnZlcnNp
b259Ojokc2V0dGVyKS5nZXQoKSwgJHRoaXNWYWx1ZS0+Y29udGV4dCgpKSI7CisgICAgICAgICAg
ICByZXR1cm4gInRvSlMoZXhlYywgJGdsb2JhbE9iamVjdCwgSlNTVkdTdGF0aWNQT0RUeXBlV3Jh
cHBlcjwkbmF0aXZlVHlwZT46OmNyZWF0ZSgkdmFsdWUpLmdldCgpLCAwIC8qIG5vIGNvbnRleHQg
b24gcHVycG9zZSAqLykiOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuICJ0
b0pTKGV4ZWMsICRnbG9iYWxPYmplY3QsIEpTU1ZHRHluYW1pY1BPRFR5cGVXcmFwcGVyQ2FjaGU8
JG5hdGl2ZVR5cGUsICRpbXBsQ2xhc3NOYW1lRm9yVmFsdWVDb252ZXJzaW9uPjo6bG9va3VwT3JD
cmVhdGVXcmFwcGVyKGltcCwgJiR7aW1wbENsYXNzTmFtZUZvclZhbHVlQ29udmVyc2lvbn06OiRn
ZXR0ZXIsICYke2ltcGxDbGFzc05hbWVGb3JWYWx1ZUNvbnZlcnNpb259Ojokc2V0dGVyKS5nZXQo
KSwgSlNTVkdDb250ZXh0Q2FjaGU6OnN2Z0NvbnRleHRGb3JET01PYmplY3QoY2FzdGVkVGhpcykp
OyIKICAgICAgICAgfQogICAgIH0KIApAQCAtMTk5Niw3ICsxOTQxLDcgQEAgc3ViIE5hdGl2ZVRv
SlNWYWx1ZQogICAgIHJldHVybiAkdmFsdWUgaWYgJGNvZGVHZW5lcmF0b3ItPklzU1ZHQW5pbWF0
ZWRUeXBlKCR0eXBlKTsKIAogICAgIGlmIChJc1NWR1R5cGVOZWVkaW5nQ29udGV4dFBhcmFtZXRl
cigkdHlwZSkpIHsKLSAgICAgICAgbXkgJGNvbnRleHRQdHIgPSBJc1NWR1R5cGVOZWVkaW5nQ29u
dGV4dFBhcmFtZXRlcigkaW1wbENsYXNzTmFtZSkgPyAiJHRoaXNWYWx1ZS0+Y29udGV4dCgpIiA6
ICJpbXAiOworICAgICAgICBteSAkY29udGV4dFB0ciA9IElzU1ZHVHlwZU5lZWRpbmdDb250ZXh0
UGFyYW1ldGVyKCRpbXBsQ2xhc3NOYW1lKSA/ICJKU1NWR0NvbnRleHRDYWNoZTo6c3ZnQ29udGV4
dEZvckRPTU9iamVjdChjYXN0ZWRUaGlzKSIgOiAiaW1wIjsKICAgICAgICAgcmV0dXJuICJ0b0pT
KGV4ZWMsICRnbG9iYWxPYmplY3QsIFdURjo6Z2V0UHRyKCR2YWx1ZSksICRjb250ZXh0UHRyKSI7
CiAgICAgfQogCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdBbmdsZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvc3ZnL1NWR0FuZ2xlLmgJKHJldmlzaW9uIDUyMzg1KQorKysgV2ViQ29yZS9zdmcvU1ZH
QW5nbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsOCArMjcsNiBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLSAgICBjbGFzcyBTVkdTdHlsZWRFbGVtZW50OwotCiAgICAgY2xhc3MgU1ZHQW5n
bGUgewogICAgIHB1YmxpYzoKICAgICAgICAgU1ZHQW5nbGUoKTsKQEAgLTU2LDkgKzU0LDYgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIG5ld1ZhbHVlU3BlY2lmaWVkVW5pdHMo
dW5zaWduZWQgc2hvcnQgdW5pdFR5cGUsIGZsb2F0IHZhbHVlSW5TcGVjaWZpZWRVbml0cyk7CiAg
ICAgICAgIHZvaWQgY29udmVydFRvU3BlY2lmaWVkVW5pdHModW5zaWduZWQgc2hvcnQgdW5pdFR5
cGUpOwogCi0gICAgICAgIC8vIFRocm91Z2hvdXQgU1ZHIDEuMSAnU1ZHQW5nbGUnIGlzIG9ubHkg
dXNlZCBmb3IgJ1NWR01hcmtlckVsZW1lbnQnIChvcmllbnQtYW5nbGUpCi0gICAgICAgIGNvbnN0
IFF1YWxpZmllZE5hbWUmIGFzc29jaWF0ZWRBdHRyaWJ1dGVOYW1lKCkgY29uc3QgeyByZXR1cm4g
U1ZHTmFtZXM6Om9yaWVudEF0dHI7IH0KLQogICAgIHByaXZhdGU6CiAgICAgICAgIFNWR0FuZ2xl
VHlwZSBtX3VuaXRUeXBlOwogICAgICAgICBmbG9hdCBtX3ZhbHVlOwpJbmRleDogV2ViQ29yZS9z
dmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRpby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NW
R1ByZXNlcnZlQXNwZWN0UmF0aW8uaAkocmV2aXNpb24gNTIzODUpCisrKyBXZWJDb3JlL3N2Zy9T
VkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmgJKHdvcmtpbmcgY29weSkKQEAgLTgxLDggKzgxLDYgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIFN0cmluZyB2YWx1ZUFzU3RyaW5nKCkgY29u
c3Q7CiAKLSAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXNzb2NpYXRlZEF0dHJpYnV0ZU5h
bWUoKSBjb25zdCB7IHJldHVybiBTVkdOYW1lczo6cHJlc2VydmVBc3BlY3RSYXRpb0F0dHI7IH0K
LQogICAgIHByaXZhdGU6CiAgICAgICAgIHVuc2lnbmVkIHNob3J0IG1fYWxpZ247CiAgICAgICAg
IHVuc2lnbmVkIHNob3J0IG1fbWVldE9yU2xpY2U7CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdUcmFu
c2Zvcm0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm0uaAkocmV2aXNp
b24gNTIzODUpCisrKyBXZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm0uaAkod29ya2luZyBjb3B5KQpA
QCAtNTQsNyArNTQsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGZsb2F0IGFuZ2xl
KCkgY29uc3Q7CiAgICAgICAgIEZsb2F0UG9pbnQgcm90YXRpb25DZW50ZXIoKSBjb25zdDsKIAot
Ly8gICAgICAgIHZvaWQgc2V0TWF0cml4KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CiAg
ICAgICAgIHZvaWQgc2V0TWF0cml4KFRyYW5zZm9ybWF0aW9uTWF0cml4KTsKIAogICAgICAgICB2
b2lkIHNldFRyYW5zbGF0ZShmbG9hdCB0eCwgZmxvYXQgdHkpOwpAQCAtNjksOSArNjgsNiBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIAogICAgICAgICBib29sIGlzVmFsaWQoKTsKIAot
ICAgICAgICAvLyBUaHJvdWdob3V0IFNWRyAxLjEgJ1NWR1RyYW5zZm9ybScgaXMgb25seSB1c2Vk
IGZvciB0aGUgJ3RyYW5zZm9ybScgYXR0cmlidXRlCi0gICAgICAgIGNvbnN0IFF1YWxpZmllZE5h
bWUmIGFzc29jaWF0ZWRBdHRyaWJ1dGVOYW1lKCkgY29uc3QgeyByZXR1cm4gU1ZHTmFtZXM6OnRy
YW5zZm9ybUF0dHI7IH0KLQogICAgIHByaXZhdGU6CiAgICAgICAgIFNWR1RyYW5zZm9ybVR5cGUg
bV90eXBlOwogICAgICAgICBmbG9hdCBtX2FuZ2xlOwpAQCAtOTMsNSArODksMyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKICNlbmRpZiAvLyBFTkFCTEUoU1ZHKQogI2VuZGlmCi0KLS8vIHZpbTp0
cz00Om5vZXQK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45353</attachid>
            <date>2009-12-21 15:11:22 -0800</date>
            <delta_ts>2010-01-21 17:31:23 -0800</delta_ts>
            <desc>Patch v1</desc>
            <filename>KillSVGJSGlobalStuff.diff</filename>
            <type>text/plain</type>
            <size>62735</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MjQ1NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzggQEAKKzIwMDktMTItMjEgIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJt
YW5uQHJpbS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgU1ZHIEpTIGJpbmRpbmdzICJjb250ZXh0IiBwb2ludGVyIG5lZWRzIHRvIG1vdmUgb250
byBiaW5kaW5nIGltcGxzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yNzI0MworCisgICAgICAgIFJld3JpdGUgU1ZHIERPTSBKU0MgYmluZGluZ3MgdG8g
dXNlIGEgZ2xvYmFsIERPTU9iamVjdCA8LT4gU1ZHRWxlbWVudCBjb250ZXh0IG1hcCwgc2ltaWxh
ciB0byBWOCdzIGFwcHJvYWNoLgorICAgICAgICBUaGlzIGFsbG93cyB1cyB0byByZW1vdmUgRE9N
T2JqZWN0V2l0aFNWR0NvbnRleHQgYW5kIG1ha2UgYWxsIFNWRyBKUyBvYmplY3RzIHVzZSBET01P
YmplY3RXaXRoR2xvYmFsUG9pbnRlciwKKyAgICAgICAgZml4aW5nIGNyb3NzLWZyYW1lIHByb3Rv
dHlwZSBjaGFpbiBmb3IgU1ZHLCBpbiB0aGUgc2FtZSB3YXkgbGlrZSBpdCBoYXMgYmVlbiBmaXhl
ZCBmb3IgSFRNTCBiZWZvcmUuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisgICAgICAgICogYmluZGluZ3MvanMvRE9NT2JqZWN0V2l0aFNWR0NvbnRleHQu
aDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6c2V0RE9NRXhjZXB0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U0RPTUJpbmRpbmcuaDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZURPTU9iamVjdFdyYXBwZXIp
OgorICAgICAgICAoV2ViQ29yZTo6Z2V0RE9NT2JqZWN0V3JhcHBlcik6CisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNTVkdDb250ZXh0Q2FjaGUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpK
U1NWR0NvbnRleHRDYWNoZTo6d3JhcHBlck1hcCk6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR0Nv
bnRleHRDYWNoZTo6YWRkV3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR0NvbnRleHRD
YWNoZTo6Zm9yZ2V0V3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR0NvbnRleHRDYWNo
ZTo6cHJvcGFnYXRlU1ZHRE9NQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHQ29udGV4
dENhY2hlOjpzdmdDb250ZXh0Rm9yRE9NT2JqZWN0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U1NWR0xlbmd0aEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR0xlbmd0aDo6dmFs
dWUpOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdMZW5ndGg6OmNvbnZlcnRUb1NwZWNpZmllZFVu
aXRzKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1NWR01hdHJpeEN1c3RvbS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKU1NWR01hdHJpeDo6bXVsdGlwbHkpOgorICAgICAgICAoV2ViQ29yZTo6
SlNTVkdNYXRyaXg6OmludmVyc2UpOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdNYXRyaXg6OnJv
dGF0ZUZyb21WZWN0b3IpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU1ZHUE9EVHlwZVdyYXBw
ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHRHluYW1pY1BPRFR5cGVXcmFwcGVyOjpjb21t
aXRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcjo6
Y29tbWl0Q2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHU3RhdGljUE9EVHlwZVdyYXBw
ZXJXaXRoUE9EVHlwZVBhcmVudDo6Y29tbWl0Q2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkpT
U1ZHU3RhdGljUE9EVHlwZVdyYXBwZXJXaXRoUGFyZW50Ojpjb21taXRDaGFuZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNTVkdQT0RUeXBlV3JhcHBlckNyZWF0b3JGb3JMaXN0OjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNTVkdQT0RUeXBlV3JhcHBlckNyZWF0b3JGb3JMaXN0Ojpjb21t
aXRDaGFuZ2UpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU1ZHUGF0aFNlZ0N1c3RvbS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1NWR1Bh
dGhTZWdMaXN0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHUGF0aFNlZ0xpc3Q6
OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHUGF0aFNlZ0xpc3Q6OmluaXRpYWxpemUp
OgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdQYXRoU2VnTGlzdDo6Z2V0SXRlbSk6CisgICAgICAg
IChXZWJDb3JlOjpKU1NWR1BhdGhTZWdMaXN0OjppbnNlcnRJdGVtQmVmb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkpTU1ZHUGF0aFNlZ0xpc3Q6OnJlcGxhY2VJdGVtKToKKyAgICAgICAgKFdlYkNv
cmU6OkpTU1ZHUGF0aFNlZ0xpc3Q6OnJlbW92ZUl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6SlNT
VkdQYXRoU2VnTGlzdDo6YXBwZW5kSXRlbSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNTVkdQ
b2ludExpc3RDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZmluaXNoR2V0dGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OmZpbmlzaFNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpmaW5pc2hT
ZXR0ZXJSZWFkT25seVJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR1BvaW50TGlzdDo6
Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdQb2ludExpc3Q6OmluaXRpYWxpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNTVkdQb2ludExpc3Q6OmdldEl0ZW0pOgorICAgICAgICAoV2Vi
Q29yZTo6SlNTVkdQb2ludExpc3Q6Omluc2VydEl0ZW1CZWZvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNTVkdQb2ludExpc3Q6OnJlcGxhY2VJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZH
UG9pbnRMaXN0OjpyZW1vdmVJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHUG9pbnRMaXN0
OjphcHBlbmRJdGVtKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1NWR1RyYW5zZm9ybUxpc3RD
dXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZmluaXNoR2V0dGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OmZpbmlzaFNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpmaW5pc2hTZXR0ZXJSZWFk
T25seVJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR1RyYW5zZm9ybUxpc3Q6OmNsZWFy
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHVHJhbnNmb3JtTGlzdDo6aW5pdGlhbGl6ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1NWR1RyYW5zZm9ybUxpc3Q6OmdldEl0ZW0pOgorICAgICAgICAo
V2ViQ29yZTo6SlNTVkdUcmFuc2Zvcm1MaXN0OjppbnNlcnRJdGVtQmVmb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkpTU1ZHVHJhbnNmb3JtTGlzdDo6cmVwbGFjZUl0ZW0pOgorICAgICAgICAoV2Vi
Q29yZTo6SlNTVkdUcmFuc2Zvcm1MaXN0OjpyZW1vdmVJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTU1ZHVHJhbnNmb3JtTGlzdDo6YXBwZW5kSXRlbSk6CisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgICogc3ZnL1NWR0FuZ2xlLmg6CisgICAg
ICAgICogc3ZnL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW8uaDoKKyAgICAgICAgKiBzdmcvU1ZHVHJh
bnNmb3JtLmg6CisKIDIwMDktMTItMTkgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCkluZGV4OiBXZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gNTI0NTUpCisrKyBXZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNjIs
NiArNjIsNyBAQAogCQkwODIwM0FBMDBFRDhDMzUzMDBCOEI2MUEgLyogV01MQWNjZXNzRWxlbWVu
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgyMDNB
OUUwRUQ4QzM1MzAwQjhCNjFBIC8qIFdNTEFjY2Vzc0VsZW1lbnQuaCAqLzsgfTsKIAkJMDgyMzQx
QzUwRkNGM0E5NTAwRDc1QkQ2IC8qIFdNTFNlbGVjdEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgyMzQxQzMwRkNGM0E5NDAwRDc1QkQ2
IC8qIFdNTFNlbGVjdEVsZW1lbnQuY3BwICovOyB9OwogCQkwODIzNDFDNjBGQ0YzQTk1MDBENzVC
RDYgLyogV01MU2VsZWN0RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMDgyMzQxQzQwRkNGM0E5NDAwRDc1QkQ2IC8qIFdNTFNlbGVjdEVsZW1l
bnQuaCAqLzsgfTsKKwkJMDgyNTU4ODExMEUwMDdEQTAwNjExNUI3IC8qIEpTU1ZHQ29udGV4dENh
Y2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODI1
NTg4MDEwRTAwN0RBMDA2MTE1QjcgLyogSlNTVkdDb250ZXh0Q2FjaGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwODM5NDc2QzBFQ0U0QkQ2MDAw
MjczNTAgLyogV01MRWxlbWVudEZhY3RvcnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMDhGQjg0QjAwRUNFMzczMzAwREMwNjRFIC8qIFdNTEVsZW1l
bnRGYWN0b3J5LmNwcCAqLzsgfTsKIAkJMDgzOTQ3NkQwRUNFNEJENjAwMDI3MzUwIC8qIFdNTEVs
ZW1lbnRGYWN0b3J5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwOEZCODRCMTBFQ0UzNzMzMDBEQzA2NEUgLyogV01MRWxlbWVudEZhY3RvcnkuaCAqLzsg
fTsKIAkJMDgzREFFQTYwRjAxQTdGQjAwMzQyNzU0IC8qIFJlbmRlclRleHRDb250cm9sTXVsdGlM
aW5lLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4
M0RBRUEyMEYwMUE3RkIwMDM0Mjc1NCAvKiBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5jcHAg
Ki87IH07CkBAIC01Mjc4LDYgKzUyNzksNyBAQAogCQkwODIwM0E5RTBFRDhDMzUzMDBCOEI2MUEg
LyogV01MQWNjZXNzRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
TUxBY2Nlc3NFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4MjM0MUMz
MEZDRjNBOTQwMEQ3NUJENiAvKiBXTUxTZWxlY3RFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdNTFNlbGVjdEVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwODIzNDFDNDBGQ0YzQTk0MDBENzVCRDYgLyogV01MU2VsZWN0RWxl
bWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXTUxTZWxlY3RFbGVtZW50
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA4MjU1ODgwMTBFMDA3REEwMDYxMTVC
NyAvKiBKU1NWR0NvbnRleHRDYWNoZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU1NWR0NvbnRleHRDYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODNE
QUVBMjBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyVGV4dENvbnRyb2xNdWx0
aUxpbmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODNEQUVBMzBGMDFBN0ZC
MDAzNDI3NTQgLyogUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDgzREFFQTQwRjAxQTdGQjAwMzQyNzU0IC8qIFJlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTQ0MzAsNiArMTQ0MzIsNyBAQAogCQkJCTQxNUI3QzU1MEZGNTk4RTYwMDY3
NzBGNyAvKiBKU1NoYXJlZFdvcmtlckNvbnN0cnVjdG9yLmNwcCAqLywKIAkJCQk0MTVCN0M2MjBG
RjVBNzY3MDA2NzcwRjcgLyogSlNTaGFyZWRXb3JrZXJDb25zdHJ1Y3Rvci5oICovLAogCQkJCTE0
Q0Q4RDgxMTA2QjUyOTAwMEE0NkQyMyAvKiBKU1NoYXJlZFdvcmtlckN1c3RvbS5jcHAgKi8sCisJ
CQkJMDgyNTU4ODAxMEUwMDdEQTAwNjExNUI3IC8qIEpTU1ZHQ29udGV4dENhY2hlLmggKi8sCiAJ
CQkJQjIxMTI3QTUwQjMxODY3NzAwMDlCRTUzIC8qIEpTU1ZHUE9EVHlwZVdyYXBwZXIuaCAqLywK
IAkJCQlFMUMzNkQzMjBFQjBBMDk0MDA3NDEwQkMgLyogSlNXb3JrZXJDb250ZXh0QmFzZS5jcHAg
Ki8sCiAJCQkJRTFDMzZEMzMwRUIwQTA5NDAwNzQxMEJDIC8qIEpTV29ya2VyQ29udGV4dEJhc2Uu
aCAqLywKQEAgLTE4MjY1LDYgKzE4MjY4LDcgQEAKIAkJCQlCQzU2Q0IyMzEwRDVBQzgwMDBBNzdD
NjQgLyogR2VvbG9jYXRpb25Db250cm9sbGVyQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzU2Q0IyNDEwRDVBQzgwMDBBNzdDNjQgLyogR2VvbG9jYXRpb25FcnJvci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkM1NkNCMjUxMEQ1QUM4MDAwQTc3QzY0IC8qIEdlb2xvY2F0aW9uUG9zaXRpb24u
aCBpbiBIZWFkZXJzICovLAorCQkJCTA4MjU1ODgxMTBFMDA3REEwMDYxMTVCNyAvKiBKU1NWR0Nv
bnRleHRDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0RP
TU9iamVjdFdpdGhTVkdDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9q
cy9ET01PYmplY3RXaXRoU1ZHQ29udGV4dC5oCShyZXZpc2lvbiA1MjQ1NSkKKysrIFdlYkNvcmUv
YmluZGluZ3MvanMvRE9NT2JqZWN0V2l0aFNWR0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSwgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTCi0gKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgotICogSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUCi0gKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIERP
TU9iamVjdFdpdGhTVkdDb250ZXh0X2gKLSNkZWZpbmUgRE9NT2JqZWN0V2l0aFNWR0NvbnRleHRf
aAotCi0jaWYgRU5BQkxFKFNWRykKLQotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgotI2luY2x1
ZGUgIlNWR0VsZW1lbnQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0gICAgLy8gRklYTUU6
IFRoaXMgY2xhc3MgKGFuZCBmaWxlKSBzaG91bGQgYmUgcmVtb3ZlZCBvbmNlIGFsbCBTVkcgYmlu
ZGluZ3MKLSAgICAvLyBoYXZlIG1vdmVkIGNvbnRleHQoKSBvbnRvIHRoZSB2YXJpb3VzIGltcGwo
KSBwb2ludGVycy4KLSAgICBjbGFzcyBET01PYmplY3RXaXRoU1ZHQ29udGV4dCA6IHB1YmxpYyBE
T01PYmplY3QgewotICAgIHB1YmxpYzoKLSAgICAgICAgU1ZHRWxlbWVudCogY29udGV4dCgpIGNv
bnN0IHsgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsgfQotCi0gICAgcHJvdGVjdGVkOgotICAgICAg
ICBET01PYmplY3RXaXRoU1ZHQ29udGV4dChOb25OdWxsUGFzc1JlZlB0cjxKU0M6OlN0cnVjdHVy
ZT4gc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCosIFNWR0VsZW1lbnQqIGNvbnRleHQpCi0g
ICAgICAgICAgICA6IERPTU9iamVjdChzdHJ1Y3R1cmUpCi0gICAgICAgICAgICAsIG1fY29udGV4
dChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBObyBzcGFjZSB0byBzdG9yZSB0
aGUgSlNET01HbG9iYWxPYmplY3Qgdy9vIGhpdHRpbmcgdGhlIENFTExfU0laRSBsaW1pdC4KLSAg
ICAgICAgfQotCi0gICAgcHJvdGVjdGVkOiAvLyBGSVhNRTogTWFueSBjdXN0b20gYmluZGluZ3Mg
dXNlIG1fY29udGV4dCBkaXJlY3RseS4gIE1ha2luZyB0aGlzIHByb3RlY3RlZCB0byB0ZW1wb3Jh
cmlsaXkgcmVkdWNlIGNvZGUgY2h1cm4uCi0gICAgICAgIFJlZlB0cjxTVkdFbGVtZW50PiBtX2Nv
bnRleHQ7Ci0gICAgfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5B
QkxFKFNWRykKLSNlbmRpZiAvLyBET01PYmplY3RXaXRoU1ZHQ29udGV4dF9oCkluZGV4OiBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCShyZXZpc2lvbiA1MjQ1NSkKKysrIFdlYkNvcmUv
YmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcyLDcgKzY3
Miw3IEBAIHZvaWQgc2V0RE9NRXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgRXgKICAgICAgICAg
ICAgIGJyZWFrOwogI2lmIEVOQUJMRShTVkcpCiAgICAgICAgIGNhc2UgU1ZHRXhjZXB0aW9uVHlw
ZToKLSAgICAgICAgICAgIGVycm9yT2JqZWN0ID0gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIFNW
R0V4Y2VwdGlvbjo6Y3JlYXRlKGRlc2NyaXB0aW9uKS5nZXQoKSwgMCk7CisgICAgICAgICAgICBl
cnJvck9iamVjdCA9IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBTVkdFeGNlcHRpb246OmNyZWF0
ZShkZXNjcmlwdGlvbikuZ2V0KCksIDAgLyogbm8gY29udGV4dCBvbiBwdXJwb3NlICovKTsKICAg
ICAgICAgICAgIGJyZWFrOwogI2VuZGlmCiAjaWYgRU5BQkxFKFhQQVRIKQpJbmRleDogV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NQmluZGluZy5oCShyZXZpc2lvbiA1MjQ1NSkKKysrIFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01CaW5kaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIzLDcgQEAKICNk
ZWZpbmUgSlNET01CaW5kaW5nX2gKIAogI2luY2x1ZGUgIkpTRE9NR2xvYmFsT2JqZWN0LmgiCisj
aW5jbHVkZSAiSlNTVkdDb250ZXh0Q2FjaGUuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2lu
Y2x1ZGUgPHJ1bnRpbWUvQ29tcGxldGlvbi5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvTG9va3VwLmg+
CkBAIC0yOTYsMTkgKzI5NywyMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgI2RlZmluZSBD
UkVBVEVfU1ZHX09CSkVDVF9XUkFQUEVSKGV4ZWMsIGdsb2JhbE9iamVjdCwgY2xhc3NOYW1lLCBv
YmplY3QsIGNvbnRleHQpIGNyZWF0ZURPTU9iamVjdFdyYXBwZXI8SlMjI2NsYXNzTmFtZT4oZXhl
YywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxjbGFzc05hbWUqPihvYmplY3QpLCBjb250ZXh0
KQogICAgIHRlbXBsYXRlPGNsYXNzIFdyYXBwZXJDbGFzcywgY2xhc3MgRE9NQ2xhc3M+IGlubGlu
ZSBET01PYmplY3QqIGNyZWF0ZURPTU9iamVjdFdyYXBwZXIoSlNDOjpFeGVjU3RhdGUqIGV4ZWMs
IEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIERPTUNsYXNzKiBvYmplY3QsIFNWR0Vs
ZW1lbnQqIGNvbnRleHQpCiAgICAgewotICAgICAgICBBU1NFUlQob2JqZWN0KTsKLSAgICAgICAg
QVNTRVJUKCFnZXRDYWNoZWRET01PYmplY3RXcmFwcGVyKGV4ZWMsIG9iamVjdCkpOwotICAgICAg
ICBXcmFwcGVyQ2xhc3MqIHdyYXBwZXIgPSBuZXcgKGV4ZWMpIFdyYXBwZXJDbGFzcyhnZXRET01T
dHJ1Y3R1cmU8V3JhcHBlckNsYXNzPihleGVjLCBnbG9iYWxPYmplY3QpLCBnbG9iYWxPYmplY3Qs
IG9iamVjdCwgY29udGV4dCk7Ci0gICAgICAgIGNhY2hlRE9NT2JqZWN0V3JhcHBlcihleGVjLCBv
YmplY3QsIHdyYXBwZXIpOworICAgICAgICBET01PYmplY3QqIHdyYXBwZXIgPSBjcmVhdGVET01P
YmplY3RXcmFwcGVyPFdyYXBwZXJDbGFzcywgRE9NQ2xhc3M+KGV4ZWMsIGdsb2JhbE9iamVjdCwg
b2JqZWN0KTsKKyAgICAgICAgQVNTRVJUKHdyYXBwZXIpOworICAgICAgICBpZiAoY29udGV4dCkK
KyAgICAgICAgICAgIEpTU1ZHQ29udGV4dENhY2hlOjphZGRXcmFwcGVyKHdyYXBwZXIsIGNvbnRl
eHQpOwogICAgICAgICByZXR1cm4gd3JhcHBlcjsKICAgICB9CiAgICAgdGVtcGxhdGU8Y2xhc3Mg
V3JhcHBlckNsYXNzLCBjbGFzcyBET01DbGFzcz4gaW5saW5lIEpTQzo6SlNWYWx1ZSBnZXRET01P
YmplY3RXcmFwcGVyKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBET01DbGFzcyogb2JqZWN0LCBTVkdFbGVtZW50KiBjb250ZXh0KQogICAgIHsK
ICAgICAgICAgaWYgKCFvYmplY3QpCiAgICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsK
LSAgICAgICAgaWYgKERPTU9iamVjdCogd3JhcHBlciA9IGdldENhY2hlZERPTU9iamVjdFdyYXBw
ZXIoZXhlYywgb2JqZWN0KSkKKyAgICAgICAgaWYgKERPTU9iamVjdCogd3JhcHBlciA9IGdldENh
Y2hlZERPTU9iamVjdFdyYXBwZXIoZXhlYywgb2JqZWN0KSkgeworICAgICAgICAgICAgQVNTRVJU
KEpTU1ZHQ29udGV4dENhY2hlOjpzdmdDb250ZXh0Rm9yRE9NT2JqZWN0KHdyYXBwZXIpID09IGNv
bnRleHQpOwogICAgICAgICAgICAgcmV0dXJuIHdyYXBwZXI7Ci0gICAgICAgIHJldHVybiBjcmVh
dGVET01PYmplY3RXcmFwcGVyPFdyYXBwZXJDbGFzcz4oZXhlYywgZ2xvYmFsT2JqZWN0LCBvYmpl
Y3QsIGNvbnRleHQpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBjcmVhdGVET01PYmplY3RX
cmFwcGVyPFdyYXBwZXJDbGFzcywgRE9NQ2xhc3M+KGV4ZWMsIGdsb2JhbE9iamVjdCwgb2JqZWN0
LCBjb250ZXh0KTsKICAgICB9CiAjZW5kaWYKIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1NWR0NvbnRleHRDYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNT
VkdDb250ZXh0Q2FjaGUuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNT
VkdDb250ZXh0Q2FjaGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5NyBAQAorLyoKKyAgICBD
b3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMDkuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAg
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
ICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorKi8KKworI2lmbmRlZiBKU1NWR0NvbnRleHRDYWNoZV9oCisjZGVmaW5lIEpTU1ZH
Q29udGV4dENhY2hlX2gKKworI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiU1ZHRWxlbWVudC5o
IgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBET01PYmplY3Q7CisKK2NsYXNzIEpTU1ZHQ29udGV4dENhY2hlIDogcHVibGljIE5v
bmNvcHlhYmxlIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEhhc2hNYXA8RE9NT2JqZWN0KiwgU1ZH
RWxlbWVudCo+IFdyYXBwZXJNYXA7CisKKyAgICBzdGF0aWMgV3JhcHBlck1hcCYgd3JhcHBlck1h
cCgpCisgICAgeworICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFdyYXBwZXJNYXAsIHNfd3Jh
cHBlck1hcCwgKCkpOworICAgICAgICByZXR1cm4gc193cmFwcGVyTWFwOworICAgIH0KKworICAg
IHN0YXRpYyB2b2lkIGFkZFdyYXBwZXIoRE9NT2JqZWN0KiB3cmFwcGVyLCBTVkdFbGVtZW50KiBj
b250ZXh0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKHdyYXBwZXIpOworICAgICAgICBBU1NFUlQo
Y29udGV4dCk7CisKKyAgICAgICAgcGFpcjxXcmFwcGVyTWFwOjppdGVyYXRvciwgYm9vbD4gcmVz
dWx0ID0gd3JhcHBlck1hcCgpLmFkZCh3cmFwcGVyLCBjb250ZXh0KTsKKyAgICAgICAgaWYgKHJl
c3VsdC5zZWNvbmQpIHsKKyAgICAgICAgICAgIFdyYXBwZXJNYXA6Oml0ZXJhdG9yJiBpdCA9IHJl
c3VsdC5maXJzdDsKKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoaXQsIGl0LT5zZWNvbmQgPT0g
Y29udGV4dCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBmb3JnZXRXcmFw
cGVyKERPTU9iamVjdCogd3JhcHBlcikKKyAgICB7CisgICAgICAgIEFTU0VSVCh3cmFwcGVyKTsK
KworICAgICAgICBXcmFwcGVyTWFwJiBtYXAgPSB3cmFwcGVyTWFwKCk7CisgICAgICAgIFdyYXBw
ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLmZpbmQod3JhcHBlcik7CisgICAgICAgIGlmIChpdCA9
PSBtYXAuZW5kKCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgbWFwLnJlbW92ZShp
dCk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgcHJvcGFnYXRlU1ZHRE9NQ2hhbmdlKERPTU9i
amVjdCogd3JhcHBlciwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSkKKyAgICB7
CisgICAgICAgIFdyYXBwZXJNYXAmIG1hcCA9IHdyYXBwZXJNYXAoKTsKKyAgICAgICAgV3JhcHBl
ck1hcDo6aXRlcmF0b3IgaXQgPSBtYXAuZmluZCh3cmFwcGVyKTsKKyAgICAgICAgaWYgKGl0ID09
IG1hcC5lbmQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBTVkdFbGVtZW50KiBj
b250ZXh0ID0gaXQtPnNlY29uZDsKKyAgICAgICAgQVNTRVJUKGNvbnRleHQpOworCisgICAgICAg
IGNvbnRleHQtPnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0cmlidXRlTmFtZSk7CisgICAgfQorCisg
ICAgc3RhdGljIFNWR0VsZW1lbnQqIHN2Z0NvbnRleHRGb3JET01PYmplY3QoRE9NT2JqZWN0KiB3
cmFwcGVyKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHdyYXBwZXIpOworCisgICAgICAgIFdyYXBw
ZXJNYXAmIG1hcCA9IHdyYXBwZXJNYXAoKTsKKyAgICAgICAgV3JhcHBlck1hcDo6aXRlcmF0b3Ig
aXQgPSBtYXAuZmluZCh3cmFwcGVyKTsKKyAgICAgICAgaWYgKGl0ID09IG1hcC5lbmQoKSkKKyAg
ICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIFNWR0VsZW1lbnQqIGNvbnRleHQgPSBpdC0+
c2Vjb25kOworICAgICAgICBBU1NFUlQoY29udGV4dCk7CisgICAgICAgIHJldHVybiBjb250ZXh0
OworICAgIH0KKworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5B
QkxFKFNWRykKKyNlbmRpZiAvLyBKU1NWR0NvbnRleHRDYWNoZV9oCkluZGV4OiBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTU1ZHTGVuZ3RoQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTU1ZHTGVuZ3RoQ3VzdG9tLmNwcAkocmV2aXNpb24gNTI0NTUpCisrKyBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTU1ZHTGVuZ3RoQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjgsMTggKzI4LDIyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogSlNWYWx1ZSBKU1NWR0xlbmd0
aDo6dmFsdWUoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewotICAgIFNWR0xlbmd0aCBpbXAoKmlt
cGwoKSk7Ci0gICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGltcC52YWx1ZShjb250ZXh0KCkpKTsK
KyAgICBKU1NWR1BPRFR5cGVXcmFwcGVyPFNWR0xlbmd0aD4qIGltcCA9IGltcGwoKTsKKyAgICBT
VkdFbGVtZW50KiBjb250ZXh0ID0gSlNTVkdDb250ZXh0Q2FjaGU6OnN2Z0NvbnRleHRGb3JET01P
YmplY3QoY29uc3RfY2FzdDxKU1NWR0xlbmd0aCo+KHRoaXMpKTsKKworICAgIFNWR0xlbmd0aCBw
b2RJbXAoKmltcCk7CisgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHBvZEltcC52YWx1ZShjb250
ZXh0KSk7CiB9CiAKIEpTVmFsdWUgSlNTVkdMZW5ndGg6OmNvbnZlcnRUb1NwZWNpZmllZFVuaXRz
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKLSAgICBKU1NWR1BPRFR5
cGVXcmFwcGVyPFNWR0xlbmd0aD4qIHdyYXBwZXIgPSBpbXBsKCk7CisgICAgSlNTVkdQT0RUeXBl
V3JhcHBlcjxTVkdMZW5ndGg+KiBpbXAgPSBpbXBsKCk7CisgICAgU1ZHRWxlbWVudCogY29udGV4
dCA9IEpTU1ZHQ29udGV4dENhY2hlOjpzdmdDb250ZXh0Rm9yRE9NT2JqZWN0KHRoaXMpOwogCi0g
ICAgU1ZHTGVuZ3RoIGltcCgqd3JhcHBlcik7Ci0gICAgaW1wLmNvbnZlcnRUb1NwZWNpZmllZFVu
aXRzKGFyZ3MuYXQoMCkudG9JbnQzMihleGVjKSwgY29udGV4dCgpKTsKKyAgICBTVkdMZW5ndGgg
cG9kSW1wKCppbXApOworICAgIHBvZEltcC5jb252ZXJ0VG9TcGVjaWZpZWRVbml0cyhhcmdzLmF0
KDApLnRvSW50MzIoZXhlYyksIGNvbnRleHQpOwogCi0gICAgd3JhcHBlci0+Y29tbWl0Q2hhbmdl
KGltcCwgY29udGV4dCgpKTsKKyAgICBpbXAtPmNvbW1pdENoYW5nZShwb2RJbXAsIHRoaXMpOwog
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTU1ZHTWF0cml4Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTU1ZHTWF0cml4Q3VzdG9tLmNwcAkocmV2aXNpb24gNTI0NTUpCisrKyBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTU1ZHTWF0cml4Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsMTUgKzQ0
LDE2IEBAIEpTVmFsdWUgSlNTVkdNYXRyaXg6Om11bHRpcGx5KEV4ZWNTdGF0ZSoKICAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBtMSgqaW1wbCgpKTsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBt
MigqKG1hdHJpeE9iai0+aW1wbCgpKSk7CiAKLSAgICBKU0M6OkpTVmFsdWUgcmVzdWx0ID0gdG9K
UyhleGVjLCBkZXByZWNhdGVkR2xvYmFsT2JqZWN0Rm9yUHJvdG90eXBlKGV4ZWMpLCBKU1NWR1N0
YXRpY1BPRFR5cGVXcmFwcGVyPFRyYW5zZm9ybWF0aW9uTWF0cml4Pjo6Y3JlYXRlKG0xLm11bHRM
ZWZ0KG0yKSkuZ2V0KCksIG1fY29udGV4dC5nZXQoKSk7Ci0KLSAgICByZXR1cm4gcmVzdWx0Owor
ICAgIFNWR0VsZW1lbnQqIGNvbnRleHQgPSBKU1NWR0NvbnRleHRDYWNoZTo6c3ZnQ29udGV4dEZv
ckRPTU9iamVjdCh0aGlzKTsKKyAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwg
SlNTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcjxUcmFuc2Zvcm1hdGlvbk1hdHJpeD46OmNyZWF0ZSht
MS5tdWx0TGVmdChtMikpLmdldCgpLCBjb250ZXh0KTsKIH0KIAogSlNWYWx1ZSBKU1NWR01hdHJp
eDo6aW52ZXJzZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmKQogewogICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IGltcCgqaW1wbCgpKTsKLSAgICBKU0M6OkpTVmFsdWUgcmVzdWx0ID0g
dG9KUyhleGVjLCBkZXByZWNhdGVkR2xvYmFsT2JqZWN0Rm9yUHJvdG90eXBlKGV4ZWMpLCBKU1NW
R1N0YXRpY1BPRFR5cGVXcmFwcGVyPFRyYW5zZm9ybWF0aW9uTWF0cml4Pjo6Y3JlYXRlKGltcC5p
bnZlcnNlKCkpLmdldCgpLCBtX2NvbnRleHQuZ2V0KCkpOworCisgICAgU1ZHRWxlbWVudCogY29u
dGV4dCA9IEpTU1ZHQ29udGV4dENhY2hlOjpzdmdDb250ZXh0Rm9yRE9NT2JqZWN0KHRoaXMpOwor
ICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgSlNTVkdTdGF0
aWNQT0RUeXBlV3JhcHBlcjxUcmFuc2Zvcm1hdGlvbk1hdHJpeD46OmNyZWF0ZShpbXAuaW52ZXJz
ZSgpKS5nZXQoKSwgY29udGV4dCk7CiAKICAgICBpZiAoIWltcC5pc0ludmVydGlibGUoKSkKICAg
ICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIFNWR0V4Y2VwdGlvbjo6U1ZHX01BVFJJWF9OT1Rf
SU5WRVJUQUJMRSk7CkBAIC02Nyw3ICs2OCw4IEBAIEpTVmFsdWUgSlNTVkdNYXRyaXg6OnJvdGF0
ZUZyb21WZWN0b3IoRXgKICAgICBmbG9hdCB4ID0gYXJncy5hdCgwKS50b0Zsb2F0KGV4ZWMpOwog
ICAgIGZsb2F0IHkgPSBhcmdzLmF0KDEpLnRvRmxvYXQoZXhlYyk7CiAKLSAgICBKU0M6OkpTVmFs
dWUgcmVzdWx0ID0gdG9KUyhleGVjLCBkZXByZWNhdGVkR2xvYmFsT2JqZWN0Rm9yUHJvdG90eXBl
KGV4ZWMpLCBKU1NWR1N0YXRpY1BPRFR5cGVXcmFwcGVyPFRyYW5zZm9ybWF0aW9uTWF0cml4Pjo6
Y3JlYXRlKGltcC5yb3RhdGVGcm9tVmVjdG9yKHgsIHkpKS5nZXQoKSwgbV9jb250ZXh0LmdldCgp
KTsKKyAgICBTVkdFbGVtZW50KiBjb250ZXh0ID0gSlNTVkdDb250ZXh0Q2FjaGU6OnN2Z0NvbnRl
eHRGb3JET01PYmplY3QodGhpcyk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKGV4ZWMsIGds
b2JhbE9iamVjdCgpLCBKU1NWR1N0YXRpY1BPRFR5cGVXcmFwcGVyPFRyYW5zZm9ybWF0aW9uTWF0
cml4Pjo6Y3JlYXRlKGltcC5yb3RhdGVGcm9tVmVjdG9yKHgsIHkpKS5nZXQoKSwgY29udGV4dCk7
CiAKICAgICBpZiAoeCA9PSAwLjAgfHwgeSA9PSAwLjApCiAgICAgICAgIHNldERPTUV4Y2VwdGlv
bihleGVjLCBTVkdFeGNlcHRpb246OlNWR19JTlZBTElEX1ZBTFVFX0VSUik7CkluZGV4OiBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTU1ZHUE9EVHlwZVdyYXBwZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTU1ZHUE9EVHlwZVdyYXBwZXIuaAkocmV2aXNpb24gNTI0NTUpCisr
KyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHUE9EVHlwZVdyYXBwZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMjgsMTggKzI4LDIxIEBACiAjZGVmaW5lIEpTU1ZHUE9EVHlwZVdyYXBwZXJfaAogCiAj
aWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJKU1NWR0NvbnRleHRDYWNoZS5oIgogI2luY2x1ZGUg
IlNWR0VsZW1lbnQuaCIKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAorY2xhc3MgRE9NT2JqZWN0OworCiB0ZW1wbGF0ZTx0eXBlbmFtZSBQT0RU
eXBlPgogY2xhc3MgSlNTVkdQT0RUeXBlV3JhcHBlciA6IHB1YmxpYyBSZWZDb3VudGVkPEpTU1ZH
UE9EVHlwZVdyYXBwZXI8UE9EVHlwZT4gPiB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+SlNTVkdQ
T0RUeXBlV3JhcHBlcigpIHsgfQogCiAgICAgdmlydHVhbCBvcGVyYXRvciBQT0RUeXBlKCkgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBjb21taXRDaGFuZ2UoUE9EVHlwZSwgU1ZHRWxlbWVudCopID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0Q2hhbmdlKFBPRFR5cGUsIERPTU9iamVjdCopID0g
MDsKIH07CiAKIC8vIFRoaXMgZmlsZSBjb250YWlucyBKUyB3cmFwcGVyIG9iamVjdHMgZm9yIFNW
RyBkYXRhdHlwZXMsIHRoYXQgYXJlIHBhc3NlZCBhcm91bmQgYnkgdmFsdWUKQEAgLTg2LDEyICs4
OSwxMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAobV9jcmVhdG9yLmdldCgpLT4qbV9nZXR0
ZXIpKCk7CiAgICAgfQogCi0gICAgdmlydHVhbCB2b2lkIGNvbW1pdENoYW5nZShQT0RUeXBlIHR5
cGUsIFNWR0VsZW1lbnQqIGNvbnRleHQpCisgICAgdmlydHVhbCB2b2lkIGNvbW1pdENoYW5nZShQ
T0RUeXBlIHR5cGUsIERPTU9iamVjdCogd3JhcHBlcikKICAgICB7CiAgICAgICAgIChtX2NyZWF0
b3IuZ2V0KCktPiptX3NldHRlcikodHlwZSk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAg
ICAgICAgICBjb250ZXh0LT5zdmdBdHRyaWJ1dGVDaGFuZ2VkKG1fY3JlYXRvci0+YXNzb2NpYXRl
ZEF0dHJpYnV0ZU5hbWUoKSk7CisgICAgICAgIEpTU1ZHQ29udGV4dENhY2hlOjpwcm9wYWdhdGVT
VkdET01DaGFuZ2Uod3JhcHBlciwgbV9jcmVhdG9yLT5hc3NvY2lhdGVkQXR0cmlidXRlTmFtZSgp
KTsKICAgICB9CiAKIHByaXZhdGU6CkBAIC0xMzAsNyArMTMxLDcgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gbV9wb2RUeXBlOwogICAgIH0KIAotICAgIHZpcnR1YWwgdm9pZCBjb21taXRDaGFu
Z2UoUE9EVHlwZSB0eXBlLCBTVkdFbGVtZW50KikKKyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0Q2hh
bmdlKFBPRFR5cGUgdHlwZSwgRE9NT2JqZWN0KikKICAgICB7CiAgICAgICAgIG1fcG9kVHlwZSA9
IHR5cGU7CiAgICAgfQpAQCAtMTU0LDEwICsxNTUsMTAgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IEpTU1ZHU3RhdGljUE9EVHlwZVdyYXBwZXJXaXRoUE9EVHlwZVBhcmVu
dCh0eXBlLCBwYXJlbnQpKTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgY29tbWl0Q2hhbmdl
KFBPRFR5cGUgdHlwZSwgU1ZHRWxlbWVudCogY29udGV4dCkKKyAgICB2aXJ0dWFsIHZvaWQgY29t
bWl0Q2hhbmdlKFBPRFR5cGUgdHlwZSwgRE9NT2JqZWN0KiB3cmFwcGVyKQogICAgIHsKLSAgICAg
ICAgSlNTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcjxQT0RUeXBlPjo6Y29tbWl0Q2hhbmdlKHR5cGUs
IGNvbnRleHQpOwotICAgICAgICBtX3BhcmVudFR5cGUtPmNvbW1pdENoYW5nZShQYXJlbnRUeXBl
QXJnKHR5cGUpLCBjb250ZXh0KTsgICAgCisgICAgICAgIEpTU1ZHU3RhdGljUE9EVHlwZVdyYXBw
ZXI8UE9EVHlwZT46OmNvbW1pdENoYW5nZSh0eXBlLCB3cmFwcGVyKTsKKyAgICAgICAgbV9wYXJl
bnRUeXBlLT5jb21taXRDaGFuZ2UoUGFyZW50VHlwZUFyZyh0eXBlKSwgd3JhcHBlcik7CiAgICAg
fQogCiBwcml2YXRlOgpAQCAtMTkyLDcgKzE5Myw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IChtX3BhcmVudC5nZXQoKS0+Km1fZ2V0dGVyKSgpOwogICAgIH0KIAotICAgIHZpcnR1YWwgdm9p
ZCBjb21taXRDaGFuZ2UoUE9EVHlwZSB0eXBlLCBTVkdFbGVtZW50KikKKyAgICB2aXJ0dWFsIHZv
aWQgY29tbWl0Q2hhbmdlKFBPRFR5cGUgdHlwZSwgRE9NT2JqZWN0KikKICAgICB7CiAgICAgICAg
IChtX3BhcmVudC5nZXQoKS0+Km1fc2V0dGVyKSh0eXBlKTsKICAgICB9CkBAIC0yMjcsOSArMjI4
LDEwIEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIFBPRFR5cGUgKFNWR1BPRExpc3RJdGVtPFBPRFR5
cGU+OjoqR2V0dGVyTWV0aG9kKSgpIGNvbnN0OyAKICAgICB0eXBlZGVmIHZvaWQgKFNWR1BPRExp
c3RJdGVtPFBPRFR5cGU+OjoqU2V0dGVyTWV0aG9kKShQT0RUeXBlKTsKIAotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEpTU1ZHUE9EVHlwZVdyYXBwZXJDcmVhdG9yRm9yTGlzdD4gY3JlYXRlKFBhc3NS
ZWZQdHI8UE9ETGlzdEl0ZW1QdHJUeXBlPiBjcmVhdG9yLCBjb25zdCBRdWFsaWZpZWROYW1lJiBh
dHRyaWJ1dGVOYW1lKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFNWR0xpc3RUZW1wbGF0ZT4KKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxKU1NWR1BPRFR5cGVXcmFwcGVyQ3JlYXRvckZvckxpc3Q+IGNy
ZWF0ZShQYXNzUmVmUHRyPFBPRExpc3RJdGVtUHRyVHlwZT4gY3JlYXRvciwgU1ZHTGlzdFRlbXBs
YXRlKiBsaXN0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBKU1NWR1BPRFR5
cGVXcmFwcGVyQ3JlYXRvckZvckxpc3QoY3JlYXRvciwgYXR0cmlidXRlTmFtZSkpOworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IEpTU1ZHUE9EVHlwZVdyYXBwZXJDcmVhdG9yRm9yTGlzdChj
cmVhdG9yLCBsaXN0LT5hc3NvY2lhdGVkQXR0cmlidXRlTmFtZSgpKSk7CiAgICAgfQogCiAgICAg
dmlydHVhbCBvcGVyYXRvciBQT0RUeXBlKCkKQEAgLTIzNywxNSArMjM5LDEzIEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIChtX2NyZWF0b3IuZ2V0KCktPiptX2dldHRlcikoKTsKICAgICB9CiAK
LSAgICB2aXJ0dWFsIHZvaWQgY29tbWl0Q2hhbmdlKFBPRFR5cGUgdHlwZSwgU1ZHRWxlbWVudCog
Y29udGV4dCkKKyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0Q2hhbmdlKFBPRFR5cGUgdHlwZSwgRE9N
T2JqZWN0KiB3cmFwcGVyKQogICAgIHsKICAgICAgICAgaWYgKCFtX3NldHRlcikKICAgICAgICAg
ICAgIHJldHVybjsKIAogICAgICAgICAobV9jcmVhdG9yLmdldCgpLT4qbV9zZXR0ZXIpKHR5cGUp
OwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICAgICAgY29udGV4dC0+c3ZnQXR0cmli
dXRlQ2hhbmdlZChtX2Fzc29jaWF0ZWRBdHRyaWJ1dGVOYW1lKTsKKyAgICAgICAgSlNTVkdDb250
ZXh0Q2FjaGU6OnByb3BhZ2F0ZVNWR0RPTUNoYW5nZSh3cmFwcGVyLCBtX2Fzc29jaWF0ZWRBdHRy
aWJ1dGVOYW1lKTsKICAgICB9CiAKIHByaXZhdGU6CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTU1ZHUGF0aFNlZ0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1NWR1BhdGhTZWdDdXN0b20uY3BwCShyZXZpc2lvbiA1MjQ1NSkKKysrIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNTVkdQYXRoU2VnQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEsNiAr
MjEsOCBAQAogCiAjaWYgRU5BQkxFKFNWRykKICNpbmNsdWRlICJKU1NWR1BhdGhTZWcuaCIKKwor
I2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTU1ZHUGF0aFNlZ0FyY0Ficy5o
IgogI2luY2x1ZGUgIkpTU1ZHUGF0aFNlZ0FyY1JlbC5oIgogI2luY2x1ZGUgIkpTU1ZHUGF0aFNl
Z0Nsb3NlUGF0aC5oIgpAQCAtNDAsOSArNDIsNiBAQAogI2luY2x1ZGUgIkpTU1ZHUGF0aFNlZ0xp
bmV0b1ZlcnRpY2FsUmVsLmgiCiAjaW5jbHVkZSAiSlNTVkdQYXRoU2VnTW92ZXRvQWJzLmgiCiAj
aW5jbHVkZSAiSlNTVkdQYXRoU2VnTW92ZXRvUmVsLmgiCi0KLSNpbmNsdWRlICJKU0RPTUJpbmRp
bmcuaCIKLQogI2luY2x1ZGUgIlNWR1BhdGhTZWcuaCIKICNpbmNsdWRlICJTVkdQYXRoU2VnQXJj
LmgiCiAjaW5jbHVkZSAiU1ZHUGF0aFNlZ0Nsb3NlUGF0aC5oIgpAQCAtNjQsOCArNjMsMTAgQEAg
SlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYQogICAgIGlmICghb2JqZWN0
KQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAKLSAgICBpZiAoRE9NT2JqZWN0KiB3cmFwcGVy
ID0gZ2V0Q2FjaGVkRE9NT2JqZWN0V3JhcHBlcihleGVjLCBvYmplY3QpKQorICAgIGlmIChET01P
YmplY3QqIHdyYXBwZXIgPSBnZXRDYWNoZWRET01PYmplY3RXcmFwcGVyKGV4ZWMsIG9iamVjdCkp
IHsKKyAgICAgICAgQVNTRVJUKEpTU1ZHQ29udGV4dENhY2hlOjpzdmdDb250ZXh0Rm9yRE9NT2Jq
ZWN0KHdyYXBwZXIpID09IGNvbnRleHQpOwogICAgICAgICByZXR1cm4gd3JhcHBlcjsKKyAgICB9
CiAKICAgICBzd2l0Y2ggKG9iamVjdC0+cGF0aFNlZ1R5cGUoKSkgewogICAgIGNhc2UgU1ZHUGF0
aFNlZzo6UEFUSFNFR19DTE9TRVBBVEg6CkBAIC0xMTUsNSArMTE2LDMgQEAgSlNWYWx1ZSB0b0pT
KEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYQogfQogCiAjZW5kaWYgLy8gRU5BQkxFKFNWRykK
LQotLy8gdmltOnRzPTQ6bm9ldApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR1BhdGhT
ZWdMaXN0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZH
UGF0aFNlZ0xpc3RDdXN0b20uY3BwCShyZXZpc2lvbiA1MjQ1NSkKKysrIFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNTVkdQYXRoU2VnTGlzdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDYg
KzI0LDcgQEAKIAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNp
bmNsdWRlICJKU1NWR0NvbnRleHRDYWNoZS5oIgogI2luY2x1ZGUgIkpTU1ZHUGF0aFNlZy5oIgog
I2luY2x1ZGUgIlNWR0RvY3VtZW50RXh0ZW5zaW9ucy5oIgogI2luY2x1ZGUgIlNWR0VsZW1lbnQu
aCIKQEAgLTM5LDEyICs0MCwxMiBAQCBKU1ZhbHVlIEpTU1ZHUGF0aFNlZ0xpc3Q6OmNsZWFyKEV4
ZWNTdGF0CiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAKLSAgICBTVkdQYXRoU2VnTGlz
dCogaW1wID0gc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0xpc3QqPihpbXBsKCkpOwotICAgIGltcC0+
Y2xlYXIoZWMpOworICAgIFNWR1BhdGhTZWdMaXN0KiBsaXN0ID0gaW1wbCgpOworICAgIGxpc3Qt
PmNsZWFyKGVjKTsKIAogICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CiAKLSAgICBtX2Nv
bnRleHQtPnN2Z0F0dHJpYnV0ZUNoYW5nZWQoaW1wLT5hc3NvY2lhdGVkQXR0cmlidXRlTmFtZSgp
KTsKKyAgICBKU1NWR0NvbnRleHRDYWNoZTo6cHJvcGFnYXRlU1ZHRE9NQ2hhbmdlKHRoaXMsIGxp
c3QtPmFzc29jaWF0ZWRBdHRyaWJ1dGVOYW1lKCkpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogfQogCkBAIC01MywxNCArNTQsMTUgQEAgSlNWYWx1ZSBKU1NWR1BhdGhTZWdMaXN0Ojppbml0
aWFsaXplKEV4ZQogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFNWR1BhdGhTZWcqIG5l
d0l0ZW0gPSB0b1NWR1BhdGhTZWcoYXJncy5hdCgwKSk7CiAKLSAgICBTVkdQYXRoU2VnTGlzdCog
aW1wID0gc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0xpc3QqPihpbXBsKCkpOworICAgIFNWR1BhdGhT
ZWdMaXN0KiBsaXN0ID0gaW1wbCgpOwogCi0gICAgU1ZHUGF0aFNlZyogb2JqID0gV1RGOjpnZXRQ
dHIoaW1wLT5pbml0aWFsaXplKG5ld0l0ZW0sIGVjKSk7CisgICAgU1ZHUGF0aFNlZyogb2JqID0g
V1RGOjpnZXRQdHIobGlzdC0+aW5pdGlhbGl6ZShuZXdJdGVtLCBlYykpOworICAgIFNWR0VsZW1l
bnQqIGNvbnRleHQgPSBKU1NWR0NvbnRleHRDYWNoZTo6c3ZnQ29udGV4dEZvckRPTU9iamVjdCh0
aGlzKTsKIAotICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSB0b0pTKGV4ZWMsIGRlcHJlY2F0ZWRH
bG9iYWxPYmplY3RGb3JQcm90b3R5cGUoZXhlYyksIG9iaiwgbV9jb250ZXh0LmdldCgpKTsKKyAg
ICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIG9iaiwgY29udGV4
dCk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKIAotICAgIG1fY29udGV4dC0+c3Zn
QXR0cmlidXRlQ2hhbmdlZChpbXAtPmFzc29jaWF0ZWRBdHRyaWJ1dGVOYW1lKCkpOyAgICAKKyAg
ICBKU1NWR0NvbnRleHRDYWNoZTo6cHJvcGFnYXRlU1ZHRE9NQ2hhbmdlKHRoaXMsIGxpc3QtPmFz
c29jaWF0ZWRBdHRyaWJ1dGVOYW1lKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTc1
LDEwICs3NywxMSBAQCBKU1ZhbHVlIEpTU1ZHUGF0aFNlZ0xpc3Q6OmdldEl0ZW0oRXhlY1N0CiAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAotICAgIFNWR1BhdGhTZWdMaXN0
KiBpbXAgPSBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnTGlzdCo+KGltcGwoKSk7Ci0gICAgU1ZHUGF0
aFNlZyogb2JqID0gV1RGOjpnZXRQdHIoaW1wLT5nZXRJdGVtKGluZGV4LCBlYykpOworICAgIFNW
R1BhdGhTZWdMaXN0KiBsaXN0ID0gaW1wbCgpOworICAgIFNWR1BhdGhTZWcqIG9iaiA9IFdURjo6
Z2V0UHRyKGxpc3QtPmdldEl0ZW0oaW5kZXgsIGVjKSk7CisgICAgU1ZHRWxlbWVudCogY29udGV4
dCA9IEpTU1ZHQ29udGV4dENhY2hlOjpzdmdDb250ZXh0Rm9yRE9NT2JqZWN0KHRoaXMpOwogCi0g
ICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhlYywgZGVwcmVjYXRlZEdsb2JhbE9iamVj
dEZvclByb3RvdHlwZShleGVjKSwgb2JqLCBtX2NvbnRleHQuZ2V0KCkpOworICAgIEpTVmFsdWUg
cmVzdWx0ID0gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgb2JqLCBjb250ZXh0KTsKICAgICBz
ZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC05NSwx
MiArOTgsMTMgQEAgSlNWYWx1ZSBKU1NWR1BhdGhTZWdMaXN0OjppbnNlcnRJdGVtQmVmbwogICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKLSAgICBTVkdQYXRoU2VnTGlzdCog
aW1wID0gc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0xpc3QqPihpbXBsKCkpOworICAgIFNWR1BhdGhT
ZWdMaXN0KiBsaXN0ID0gaW1wbCgpOworICAgIFNWR0VsZW1lbnQqIGNvbnRleHQgPSBKU1NWR0Nv
bnRleHRDYWNoZTo6c3ZnQ29udGV4dEZvckRPTU9iamVjdCh0aGlzKTsKIAotICAgIEpTQzo6SlNW
YWx1ZSByZXN1bHQgPSB0b0pTKGV4ZWMsIGRlcHJlY2F0ZWRHbG9iYWxPYmplY3RGb3JQcm90b3R5
cGUoZXhlYyksIFdURjo6Z2V0UHRyKGltcC0+aW5zZXJ0SXRlbUJlZm9yZShuZXdJdGVtLCBpbmRl
eCwgZWMpKSwgbV9jb250ZXh0LmdldCgpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhl
YywgZ2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKGxpc3QtPmluc2VydEl0ZW1CZWZvcmUobmV3
SXRlbSwgaW5kZXgsIGVjKSksIGNvbnRleHQpOwogICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBl
Yyk7CiAKLSAgICBtX2NvbnRleHQtPnN2Z0F0dHJpYnV0ZUNoYW5nZWQoaW1wLT5hc3NvY2lhdGVk
QXR0cmlidXRlTmFtZSgpKTsgICAgCisgICAgSlNTVkdDb250ZXh0Q2FjaGU6OnByb3BhZ2F0ZVNW
R0RPTUNoYW5nZSh0aGlzLCBsaXN0LT5hc3NvY2lhdGVkQXR0cmlidXRlTmFtZSgpKTsKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xMTYsMTIgKzEyMCwxMyBAQCBKU1ZhbHVlIEpTU1ZHUGF0
aFNlZ0xpc3Q6OnJlcGxhY2VJdGVtKEV4CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
ICAgIH0KIAotICAgIFNWR1BhdGhTZWdMaXN0KiBpbXAgPSBzdGF0aWNfY2FzdDxTVkdQYXRoU2Vn
TGlzdCo+KGltcGwoKSk7CisgICAgU1ZHUGF0aFNlZ0xpc3QqIGxpc3QgPSBpbXBsKCk7CisgICAg
U1ZHRWxlbWVudCogY29udGV4dCA9IEpTU1ZHQ29udGV4dENhY2hlOjpzdmdDb250ZXh0Rm9yRE9N
T2JqZWN0KHRoaXMpOwogCi0gICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhlYywgZGVw
cmVjYXRlZEdsb2JhbE9iamVjdEZvclByb3RvdHlwZShleGVjKSwgV1RGOjpnZXRQdHIoaW1wLT5y
ZXBsYWNlSXRlbShuZXdJdGVtLCBpbmRleCwgZWMpKSwgbV9jb250ZXh0LmdldCgpKTsKKyAgICBK
U1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKGxp
c3QtPnJlcGxhY2VJdGVtKG5ld0l0ZW0sIGluZGV4LCBlYykpLCBjb250ZXh0KTsKICAgICBzZXRE
T01FeGNlcHRpb24oZXhlYywgZWMpOwogCi0gICAgbV9jb250ZXh0LT5zdmdBdHRyaWJ1dGVDaGFu
Z2VkKGltcC0+YXNzb2NpYXRlZEF0dHJpYnV0ZU5hbWUoKSk7ICAgIAorICAgIEpTU1ZHQ29udGV4
dENhY2hlOjpwcm9wYWdhdGVTVkdET01DaGFuZ2UodGhpcywgbGlzdC0+YXNzb2NpYXRlZEF0dHJp
YnV0ZU5hbWUoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMTM2LDE0ICsxNDEsMTUg
QEAgSlNWYWx1ZSBKU1NWR1BhdGhTZWdMaXN0OjpyZW1vdmVJdGVtKEV4ZQogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKLSAgICBTVkdQYXRoU2VnTGlzdCogaW1wID0gc3Rh
dGljX2Nhc3Q8U1ZHUGF0aFNlZ0xpc3QqPihpbXBsKCkpOworICAgIFNWR1BhdGhTZWdMaXN0KiBs
aXN0ID0gaW1wbCgpOwogCi0gICAgUmVmUHRyPFNWR1BhdGhTZWc+IG9iaihpbXAtPnJlbW92ZUl0
ZW0oaW5kZXgsIGVjKSk7CisgICAgUmVmUHRyPFNWR1BhdGhTZWc+IG9iaihsaXN0LT5yZW1vdmVJ
dGVtKGluZGV4LCBlYykpOworICAgIFNWR0VsZW1lbnQqIGNvbnRleHQgPSBKU1NWR0NvbnRleHRD
YWNoZTo6c3ZnQ29udGV4dEZvckRPTU9iamVjdCh0aGlzKTsKIAotICAgIEpTQzo6SlNWYWx1ZSBy
ZXN1bHQgPSB0b0pTKGV4ZWMsIGRlcHJlY2F0ZWRHbG9iYWxPYmplY3RGb3JQcm90b3R5cGUoZXhl
YyksIG9iai5nZXQoKSwgbV9jb250ZXh0LmdldCgpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRv
SlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIG9iai5nZXQoKSwgY29udGV4dCk7CiAgICAgc2V0RE9N
RXhjZXB0aW9uKGV4ZWMsIGVjKTsKIAotICAgIG1fY29udGV4dC0+c3ZnQXR0cmlidXRlQ2hhbmdl
ZChpbXAtPmFzc29jaWF0ZWRBdHRyaWJ1dGVOYW1lKCkpOyAgICAKKyAgICBKU1NWR0NvbnRleHRD
YWNoZTo6cHJvcGFnYXRlU1ZHRE9NQ2hhbmdlKHRoaXMsIGxpc3QtPmFzc29jaWF0ZWRBdHRyaWJ1
dGVOYW1lKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTE1MiwxMiArMTU4LDEzIEBA
IEpTVmFsdWUgSlNTVkdQYXRoU2VnTGlzdDo6YXBwZW5kSXRlbShFeGUKICAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKICAgICBTVkdQYXRoU2VnKiBuZXdJdGVtID0gdG9TVkdQYXRoU2VnKGFyZ3Mu
YXQoMCkpOwogCi0gICAgU1ZHUGF0aFNlZ0xpc3QqIGltcCA9IHN0YXRpY19jYXN0PFNWR1BhdGhT
ZWdMaXN0Kj4oaW1wbCgpKTsKKyAgICBTVkdQYXRoU2VnTGlzdCogbGlzdCA9IGltcGwoKTsKKyAg
ICBTVkdFbGVtZW50KiBjb250ZXh0ID0gSlNTVkdDb250ZXh0Q2FjaGU6OnN2Z0NvbnRleHRGb3JE
T01PYmplY3QodGhpcyk7CiAKLSAgICBKU0M6OkpTVmFsdWUgcmVzdWx0ID0gdG9KUyhleGVjLCBk
ZXByZWNhdGVkR2xvYmFsT2JqZWN0Rm9yUHJvdG90eXBlKGV4ZWMpLCBXVEY6OmdldFB0cihpbXAt
PmFwcGVuZEl0ZW0obmV3SXRlbSwgZWMpKSwgbV9jb250ZXh0LmdldCgpKTsKKyAgICBKU1ZhbHVl
IHJlc3VsdCA9IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKGxpc3QtPmFw
cGVuZEl0ZW0obmV3SXRlbSwgZWMpKSwgY29udGV4dCk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKGV4
ZWMsIGVjKTsKIAotICAgIG1fY29udGV4dC0+c3ZnQXR0cmlidXRlQ2hhbmdlZChpbXAtPmFzc29j
aWF0ZWRBdHRyaWJ1dGVOYW1lKCkpOyAgICAKKyAgICBKU1NWR0NvbnRleHRDYWNoZTo6cHJvcGFn
YXRlU1ZHRE9NQ2hhbmdlKHRoaXMsIGxpc3QtPmFzc29jaWF0ZWRBdHRyaWJ1dGVOYW1lKCkpOwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdQ
b2ludExpc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNT
VkdQb2ludExpc3RDdXN0b20uY3BwCShyZXZpc2lvbiA1MjQ1NSkKKysrIFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNTVkdQb2ludExpc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw2ICsy
Myw3IEBACiAjaWYgRU5BQkxFKFNWRykKICNpbmNsdWRlICJKU1NWR1BvaW50TGlzdC5oIgogCisj
aW5jbHVkZSAiSlNTVkdQT0RUeXBlV3JhcHBlci5oIgogI2luY2x1ZGUgIkpTU1ZHUG9pbnQuaCIK
ICNpbmNsdWRlICJTVkdQb2ludExpc3QuaCIKIApAQCAtMzMsNDIgKzM0LDUyIEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIHR5cGVkZWYgU1ZHUE9ETGlzdEl0ZW08RmxvYXRQb2ludD4gUE9ETGlzdEl0
ZW07CiB0eXBlZGVmIFNWR0xpc3Q8UmVmUHRyPFBPRExpc3RJdGVtPiA+IFNWR1BvaW50TGlzdEJh
c2U7CiAKLXN0YXRpYyBKU1ZhbHVlIGZpbmlzaEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEV4Y2Vw
dGlvbkNvZGUmIGVjLCBTVkdFbGVtZW50KiBjb250ZXh0LCBTVkdQb2ludExpc3QqIGxpc3QsIFBh
c3NSZWZQdHI8UE9ETGlzdEl0ZW0gPiBpdGVtKQorc3RhdGljIEpTVmFsdWUgZmluaXNoR2V0dGVy
KEV4ZWNTdGF0ZSogZXhlYywgRXhjZXB0aW9uQ29kZSYgZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTU1ZHUG9pbnRMaXN0KiBsaXN0V3JhcHBlciwgUGFzc1JlZlB0cjxQT0RM
aXN0SXRlbSA+IGl0ZW0pCiB7CiAgICAgaWYgKGVjKSB7CiAgICAgICAgIHNldERPTUV4Y2VwdGlv
bihleGVjLCBlYyk7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KLSAgICBy
ZXR1cm4gdG9KUyhleGVjLCBkZXByZWNhdGVkR2xvYmFsT2JqZWN0Rm9yUHJvdG90eXBlKGV4ZWMp
LCBKU1NWR1BPRFR5cGVXcmFwcGVyQ3JlYXRvckZvckxpc3Q8RmxvYXRQb2ludD46OmNyZWF0ZShp
dGVtLmdldCgpLCBsaXN0LT5hc3NvY2lhdGVkQXR0cmlidXRlTmFtZSgpKS5nZXQoKSwgY29udGV4
dCk7CisKKyAgICBTVkdQb2ludExpc3QqIGxpc3QgPSBsaXN0V3JhcHBlci0+aW1wbCgpOworICAg
IFNWR0VsZW1lbnQqIGNvbnRleHQgPSBKU1NWR0NvbnRleHRDYWNoZTo6c3ZnQ29udGV4dEZvckRP
TU9iamVjdChsaXN0V3JhcHBlcik7CisgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0
LCBKU1NWR1BPRFR5cGVXcmFwcGVyQ3JlYXRvckZvckxpc3Q8RmxvYXRQb2ludD46OmNyZWF0ZTxT
VkdQb2ludExpc3Q+KGl0ZW0uZ2V0KCksIGxpc3QpLmdldCgpLCBjb250ZXh0KTsKIH0KIAotc3Rh
dGljIEpTVmFsdWUgZmluaXNoU2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgRXhjZXB0aW9uQ29kZSYg
ZWMsIFNWR0VsZW1lbnQqIGNvbnRleHQsIFNWR1BvaW50TGlzdCogbGlzdCwgUGFzc1JlZlB0cjxQ
T0RMaXN0SXRlbSA+IGl0ZW0pCitzdGF0aWMgSlNWYWx1ZSBmaW5pc2hTZXR0ZXIoRXhlY1N0YXRl
KiBleGVjLCBFeGNlcHRpb25Db2RlJiBlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNTVkdQb2ludExpc3QqIGxpc3RXcmFwcGVyLCBQYXNzUmVmUHRyPFBPRExpc3RJdGVtID4g
aXRlbSkKIHsKICAgICBpZiAoZWMpIHsKICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVj
KTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQotICAgIGNvbnN0IFF1YWxp
ZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUgPSBsaXN0LT5hc3NvY2lhdGVkQXR0cmlidXRlTmFtZSgp
OwotICAgIGNvbnRleHQtPnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0cmlidXRlTmFtZSk7Ci0gICAg
cmV0dXJuIHRvSlMoZXhlYywgZGVwcmVjYXRlZEdsb2JhbE9iamVjdEZvclByb3RvdHlwZShleGVj
KSwgSlNTVkdQT0RUeXBlV3JhcHBlckNyZWF0b3JGb3JMaXN0PEZsb2F0UG9pbnQ+OjpjcmVhdGUo
aXRlbS5nZXQoKSwgYXR0cmlidXRlTmFtZSkuZ2V0KCksIGNvbnRleHQpOworCisgICAgU1ZHUG9p
bnRMaXN0KiBsaXN0ID0gbGlzdFdyYXBwZXItPmltcGwoKTsKKyAgICBKU1NWR0NvbnRleHRDYWNo
ZTo6cHJvcGFnYXRlU1ZHRE9NQ2hhbmdlKGxpc3RXcmFwcGVyLCBsaXN0LT5hc3NvY2lhdGVkQXR0
cmlidXRlTmFtZSgpKTsKKworICAgIFNWR0VsZW1lbnQqIGNvbnRleHQgPSBKU1NWR0NvbnRleHRD
YWNoZTo6c3ZnQ29udGV4dEZvckRPTU9iamVjdChsaXN0V3JhcHBlcik7CisgICAgcmV0dXJuIHRv
SlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBKU1NWR1BPRFR5cGVXcmFwcGVyQ3JlYXRvckZvckxpc3Q8
RmxvYXRQb2ludD46OmNyZWF0ZTxTVkdQb2ludExpc3Q+KGl0ZW0uZ2V0KCksIGxpc3QpLmdldCgp
LCBjb250ZXh0KTsKIH0KIAotc3RhdGljIEpTVmFsdWUgZmluaXNoU2V0dGVyUmVhZE9ubHlSZXN1
bHQoRXhlY1N0YXRlKiBleGVjLCBFeGNlcHRpb25Db2RlJiBlYywgU1ZHRWxlbWVudCogY29udGV4
dCwgU1ZHUG9pbnRMaXN0KiBsaXN0LCBQYXNzUmVmUHRyPFBPRExpc3RJdGVtPiBpdGVtKQorc3Rh
dGljIEpTVmFsdWUgZmluaXNoU2V0dGVyUmVhZE9ubHlSZXN1bHQoRXhlY1N0YXRlKiBleGVjLCBF
eGNlcHRpb25Db2RlJiBlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNTVkdQ
b2ludExpc3QqIGxpc3RXcmFwcGVyLCBQYXNzUmVmUHRyPFBPRExpc3RJdGVtPiBpdGVtKQogewog
ICAgIGlmIChlYykgewogICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwogICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9Ci0gICAgY29udGV4dC0+c3ZnQXR0cmlidXRl
Q2hhbmdlZChsaXN0LT5hc3NvY2lhdGVkQXR0cmlidXRlTmFtZSgpKTsKLSAgICByZXR1cm4gdG9K
UyhleGVjLCBkZXByZWNhdGVkR2xvYmFsT2JqZWN0Rm9yUHJvdG90eXBlKGV4ZWMpLCBKU1NWR1N0
YXRpY1BPRFR5cGVXcmFwcGVyPEZsb2F0UG9pbnQ+OjpjcmVhdGUoKml0ZW0pLmdldCgpLCBjb250
ZXh0KTsKKworICAgIFNWR1BvaW50TGlzdCogbGlzdCA9IGxpc3RXcmFwcGVyLT5pbXBsKCk7Cisg
ICAgSlNTVkdDb250ZXh0Q2FjaGU6OnByb3BhZ2F0ZVNWR0RPTUNoYW5nZShsaXN0V3JhcHBlciwg
bGlzdC0+YXNzb2NpYXRlZEF0dHJpYnV0ZU5hbWUoKSk7CisgICAgcmV0dXJuIHRvSlMoZXhlYywg
Z2xvYmFsT2JqZWN0LCBKU1NWR1N0YXRpY1BPRFR5cGVXcmFwcGVyPEZsb2F0UG9pbnQ+OjpjcmVh
dGUoKml0ZW0pLmdldCgpLCAwIC8qIG5vIGNvbnRleHQgb24gcHVycG9zZSAqLyk7CiB9CiAKIEpT
VmFsdWUgSlNTVkdQb2ludExpc3Q6OmNsZWFyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlz
dCYpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaW1wbCgpLT5jbGVhcihlYyk7
CisgICAgU1ZHUG9pbnRMaXN0QmFzZSogbGlzdEltcCA9IGltcGwoKTsKKyAgICBsaXN0SW1wLT5j
bGVhcihlYyk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKLSAgICBtX2NvbnRleHQt
PnN2Z0F0dHJpYnV0ZUNoYW5nZWQoaW1wbCgpLT5hc3NvY2lhdGVkQXR0cmlidXRlTmFtZSgpKTsK
KworICAgIEpTU1ZHQ29udGV4dENhY2hlOjpwcm9wYWdhdGVTVkdET01DaGFuZ2UodGhpcywgbGlz
dEltcC0+YXNzb2NpYXRlZEF0dHJpYnV0ZU5hbWUoKSk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiB9CiAKQEAgLTc2LDggKzg3LDcgQEAgSlNWYWx1ZSBKU1NWR1BvaW50TGlzdDo6aW5pdGlh
bGl6ZShFeGVjUwogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFNWR1BvaW50TGlz
dEJhc2UqIGxpc3RJbXAgPSBpbXBsKCk7Ci0gICAgcmV0dXJuIGZpbmlzaFNldHRlcihleGVjLCBl
YywgY29udGV4dCgpLCBpbXBsKCksCi0gICAgICAgIGxpc3RJbXAtPmluaXRpYWxpemUoUE9ETGlz
dEl0ZW06OmNvcHkodG9TVkdQb2ludChhcmdzLmF0KDApKSksIGVjKSk7CisgICAgcmV0dXJuIGZp
bmlzaFNldHRlcihleGVjLCBlYywgZ2xvYmFsT2JqZWN0KCksIHRoaXMsIGxpc3RJbXAtPmluaXRp
YWxpemUoUE9ETGlzdEl0ZW06OmNvcHkodG9TVkdQb2ludChhcmdzLmF0KDApKSksIGVjKSk7CiB9
CiAKIEpTVmFsdWUgSlNTVkdQb2ludExpc3Q6OmdldEl0ZW0oRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQpAQCAtOTEsOCArMTAxLDcgQEAgSlNWYWx1ZSBKU1NWR1BvaW50TGlz
dDo6Z2V0SXRlbShFeGVjU3RhdAogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgU1ZH
UG9pbnRMaXN0QmFzZSogbGlzdEltcCA9IGltcGwoKTsKLSAgICByZXR1cm4gZmluaXNoR2V0dGVy
KGV4ZWMsIGVjLCBjb250ZXh0KCksIGltcGwoKSwKLSAgICAgICAgbGlzdEltcC0+Z2V0SXRlbShp
bmRleCwgZWMpKTsKKyAgICByZXR1cm4gZmluaXNoR2V0dGVyKGV4ZWMsIGVjLCBnbG9iYWxPYmpl
Y3QoKSwgdGhpcywgbGlzdEltcC0+Z2V0SXRlbShpbmRleCwgZWMpKTsKIH0KIAogSlNWYWx1ZSBK
U1NWR1BvaW50TGlzdDo6aW5zZXJ0SXRlbUJlZm9yZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpCkBAIC0xMDYsOCArMTE1LDcgQEAgSlNWYWx1ZSBKU1NWR1BvaW50TGlzdDo6
aW5zZXJ0SXRlbUJlZm9yZQogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgU1ZHUG9p
bnRMaXN0QmFzZSogbGlzdEltcCA9IGltcGwoKTsKLSAgICByZXR1cm4gZmluaXNoU2V0dGVyKGV4
ZWMsIGVjLCBjb250ZXh0KCksIGltcGwoKSwKLSAgICAgICAgbGlzdEltcC0+aW5zZXJ0SXRlbUJl
Zm9yZShQT0RMaXN0SXRlbTo6Y29weSh0b1NWR1BvaW50KGFyZ3MuYXQoMCkpKSwgaW5kZXgsIGVj
KSk7CisgICAgcmV0dXJuIGZpbmlzaFNldHRlcihleGVjLCBlYywgZ2xvYmFsT2JqZWN0KCksIHRo
aXMsIGxpc3RJbXAtPmluc2VydEl0ZW1CZWZvcmUoUE9ETGlzdEl0ZW06OmNvcHkodG9TVkdQb2lu
dChhcmdzLmF0KDApKSksIGluZGV4LCBlYykpOwogfQogCiBKU1ZhbHVlIEpTU1ZHUG9pbnRMaXN0
OjpyZXBsYWNlSXRlbShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCkBAIC0x
MjEsOCArMTI5LDcgQEAgSlNWYWx1ZSBKU1NWR1BvaW50TGlzdDo6cmVwbGFjZUl0ZW0oRXhlYwog
CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgU1ZHUG9pbnRMaXN0QmFzZSogbGlzdElt
cCA9IGltcGwoKTsKLSAgICByZXR1cm4gZmluaXNoU2V0dGVyKGV4ZWMsIGVjLCBjb250ZXh0KCks
IGltcGwoKSwKLSAgICAgICAgbGlzdEltcC0+cmVwbGFjZUl0ZW0oUE9ETGlzdEl0ZW06OmNvcHko
dG9TVkdQb2ludChhcmdzLmF0KDApKSksIGluZGV4LCBlYykpOworICAgIHJldHVybiBmaW5pc2hT
ZXR0ZXIoZXhlYywgZWMsIGdsb2JhbE9iamVjdCgpLCB0aGlzLCBsaXN0SW1wLT5yZXBsYWNlSXRl
bShQT0RMaXN0SXRlbTo6Y29weSh0b1NWR1BvaW50KGFyZ3MuYXQoMCkpKSwgaW5kZXgsIGVjKSk7
CiB9CiAKIEpTVmFsdWUgSlNTVkdQb2ludExpc3Q6OnJlbW92ZUl0ZW0oRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQpAQCAtMTM2LDE2ICsxNDMsMTQgQEAgSlNWYWx1ZSBKU1NW
R1BvaW50TGlzdDo6cmVtb3ZlSXRlbShFeGVjUwogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
CiAgICAgU1ZHUG9pbnRMaXN0QmFzZSogbGlzdEltcCA9IGltcGwoKTsKLSAgICByZXR1cm4gZmlu
aXNoU2V0dGVyUmVhZE9ubHlSZXN1bHQoZXhlYywgZWMsIGNvbnRleHQoKSwgaW1wbCgpLAotICAg
ICAgICBsaXN0SW1wLT5yZW1vdmVJdGVtKGluZGV4LCBlYykpOworICAgIHJldHVybiBmaW5pc2hT
ZXR0ZXJSZWFkT25seVJlc3VsdChleGVjLCBlYywgZ2xvYmFsT2JqZWN0KCksIHRoaXMsIGxpc3RJ
bXAtPnJlbW92ZUl0ZW0oaW5kZXgsIGVjKSk7CiB9CiAKIEpTVmFsdWUgSlNTVkdQb2ludExpc3Q6
OmFwcGVuZEl0ZW0oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAg
IEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFNWR1BvaW50TGlzdEJhc2UqIGxpc3RJbXAgPSBp
bXBsKCk7Ci0gICAgcmV0dXJuIGZpbmlzaFNldHRlcihleGVjLCBlYywgY29udGV4dCgpLCBpbXBs
KCksCi0gICAgICAgIGxpc3RJbXAtPmFwcGVuZEl0ZW0oUE9ETGlzdEl0ZW06OmNvcHkodG9TVkdQ
b2ludChhcmdzLmF0KDApKSksIGVjKSk7CisgICAgcmV0dXJuIGZpbmlzaFNldHRlcihleGVjLCBl
YywgZ2xvYmFsT2JqZWN0KCksIHRoaXMsIGxpc3RJbXAtPmFwcGVuZEl0ZW0oUE9ETGlzdEl0ZW06
OmNvcHkodG9TVkdQb2ludChhcmdzLmF0KDApKSksIGVjKSk7CiB9CiAKIH0KSW5kZXg6IFdlYkNv
cmUvYmluZGluZ3MvanMvSlNTVkdUcmFuc2Zvcm1MaXN0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHVHJhbnNmb3JtTGlzdEN1c3RvbS5jcHAJKHJldmlz
aW9uIDUyNDU1KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR1RyYW5zZm9ybUxpc3RDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw2ICsyMyw3IEBACiAjaWYgRU5BQkxFKFNWRykK
ICNpbmNsdWRlICJKU1NWR1RyYW5zZm9ybUxpc3QuaCIKIAorI2luY2x1ZGUgIkpTU1ZHUE9EVHlw
ZVdyYXBwZXIuaCIKICNpbmNsdWRlICJKU1NWR1RyYW5zZm9ybS5oIgogI2luY2x1ZGUgIlNWR1Ry
YW5zZm9ybUxpc3QuaCIKIApAQCAtMzMsNDIgKzM0LDUyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IHR5cGVkZWYgU1ZHUE9ETGlzdEl0ZW08U1ZHVHJhbnNmb3JtPiBQT0RMaXN0SXRlbTsKIHR5cGVk
ZWYgU1ZHTGlzdDxSZWZQdHI8UE9ETGlzdEl0ZW0+ID4gU1ZHVHJhbnNmb3JtTGlzdEJhc2U7CiAK
LXN0YXRpYyBKU1ZhbHVlIGZpbmlzaEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEV4Y2VwdGlvbkNv
ZGUmIGVjLCBTVkdFbGVtZW50KiBjb250ZXh0LCBTVkdUcmFuc2Zvcm1MaXN0KiBsaXN0LCBQYXNz
UmVmUHRyPFBPRExpc3RJdGVtPiBpdGVtKQorc3RhdGljIEpTVmFsdWUgZmluaXNoR2V0dGVyKEV4
ZWNTdGF0ZSogZXhlYywgRXhjZXB0aW9uQ29kZSYgZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTU1ZHVHJhbnNmb3JtTGlzdCogbGlzdFdyYXBwZXIsIFBhc3NSZWZQdHI8UE9E
TGlzdEl0ZW0+IGl0ZW0pCiB7CiAgICAgaWYgKGVjKSB7CiAgICAgICAgIHNldERPTUV4Y2VwdGlv
bihleGVjLCBlYyk7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KLSAgICBy
ZXR1cm4gdG9KUyhleGVjLCBkZXByZWNhdGVkR2xvYmFsT2JqZWN0Rm9yUHJvdG90eXBlKGV4ZWMp
LCBKU1NWR1BPRFR5cGVXcmFwcGVyQ3JlYXRvckZvckxpc3Q8U1ZHVHJhbnNmb3JtPjo6Y3JlYXRl
KGl0ZW0uZ2V0KCksIGxpc3QtPmFzc29jaWF0ZWRBdHRyaWJ1dGVOYW1lKCkpLmdldCgpLCBjb250
ZXh0KTsKKworICAgIFNWR1RyYW5zZm9ybUxpc3QqIGxpc3QgPSBsaXN0V3JhcHBlci0+aW1wbCgp
OworICAgIFNWR0VsZW1lbnQqIGNvbnRleHQgPSBKU1NWR0NvbnRleHRDYWNoZTo6c3ZnQ29udGV4
dEZvckRPTU9iamVjdChsaXN0V3JhcHBlcik7CisgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFs
T2JqZWN0LCBKU1NWR1BPRFR5cGVXcmFwcGVyQ3JlYXRvckZvckxpc3Q8U1ZHVHJhbnNmb3JtPjo6
Y3JlYXRlPFNWR1RyYW5zZm9ybUxpc3Q+KGl0ZW0uZ2V0KCksIGxpc3QpLmdldCgpLCBjb250ZXh0
KTsKIH0KIAotc3RhdGljIEpTVmFsdWUgZmluaXNoU2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgRXhj
ZXB0aW9uQ29kZSYgZWMsIFNWR0VsZW1lbnQqIGNvbnRleHQsIFNWR1RyYW5zZm9ybUxpc3QqIGxp
c3QsIFBhc3NSZWZQdHI8UE9ETGlzdEl0ZW0+IGl0ZW0pCitzdGF0aWMgSlNWYWx1ZSBmaW5pc2hT
ZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBFeGNlcHRpb25Db2RlJiBlYywgSlNET01HbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNTVkdUcmFuc2Zvcm1MaXN0KiBsaXN0V3JhcHBlciwgUGFzc1Jl
ZlB0cjxQT0RMaXN0SXRlbT4gaXRlbSkKIHsKICAgICBpZiAoZWMpIHsKICAgICAgICAgc2V0RE9N
RXhjZXB0aW9uKGV4ZWMsIGVjKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAg
fQotICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUgPSBsaXN0LT5hc3NvY2lh
dGVkQXR0cmlidXRlTmFtZSgpOwotICAgIGNvbnRleHQtPnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0
cmlidXRlTmFtZSk7Ci0gICAgcmV0dXJuIHRvSlMoZXhlYywgZGVwcmVjYXRlZEdsb2JhbE9iamVj
dEZvclByb3RvdHlwZShleGVjKSwgSlNTVkdQT0RUeXBlV3JhcHBlckNyZWF0b3JGb3JMaXN0PFNW
R1RyYW5zZm9ybT46OmNyZWF0ZShpdGVtLmdldCgpLCBhdHRyaWJ1dGVOYW1lKS5nZXQoKSwgY29u
dGV4dCk7CisKKyAgICBTVkdUcmFuc2Zvcm1MaXN0KiBsaXN0ID0gbGlzdFdyYXBwZXItPmltcGwo
KTsKKyAgICBKU1NWR0NvbnRleHRDYWNoZTo6cHJvcGFnYXRlU1ZHRE9NQ2hhbmdlKGxpc3RXcmFw
cGVyLCBsaXN0LT5hc3NvY2lhdGVkQXR0cmlidXRlTmFtZSgpKTsKKworICAgIFNWR0VsZW1lbnQq
IGNvbnRleHQgPSBKU1NWR0NvbnRleHRDYWNoZTo6c3ZnQ29udGV4dEZvckRPTU9iamVjdChsaXN0
V3JhcHBlcik7CisgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBKU1NWR1BPRFR5
cGVXcmFwcGVyQ3JlYXRvckZvckxpc3Q8U1ZHVHJhbnNmb3JtPjo6Y3JlYXRlPFNWR1RyYW5zZm9y
bUxpc3Q+KGl0ZW0uZ2V0KCksIGxpc3QpLmdldCgpLCBjb250ZXh0KTsKIH0KIAotc3RhdGljIEpT
VmFsdWUgZmluaXNoU2V0dGVyUmVhZE9ubHlSZXN1bHQoRXhlY1N0YXRlKiBleGVjLCBFeGNlcHRp
b25Db2RlJiBlYywgU1ZHRWxlbWVudCogY29udGV4dCwgU1ZHVHJhbnNmb3JtTGlzdCogbGlzdCwg
UGFzc1JlZlB0cjxQT0RMaXN0SXRlbT4gaXRlbSkKK3N0YXRpYyBKU1ZhbHVlIGZpbmlzaFNldHRl
clJlYWRPbmx5UmVzdWx0KEV4ZWNTdGF0ZSogZXhlYywgRXhjZXB0aW9uQ29kZSYgZWMsIEpTRE9N
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTU1ZHVHJhbnNmb3JtTGlzdCogbGlzdFdyYXBw
ZXIsIFBhc3NSZWZQdHI8UE9ETGlzdEl0ZW0+IGl0ZW0pCiB7CiAgICAgaWYgKGVjKSB7CiAgICAg
ICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogICAgIH0KLSAgICBjb250ZXh0LT5zdmdBdHRyaWJ1dGVDaGFuZ2VkKGxpc3QtPmFzc29j
aWF0ZWRBdHRyaWJ1dGVOYW1lKCkpOwotICAgIHJldHVybiB0b0pTKGV4ZWMsIGRlcHJlY2F0ZWRH
bG9iYWxPYmplY3RGb3JQcm90b3R5cGUoZXhlYyksIEpTU1ZHU3RhdGljUE9EVHlwZVdyYXBwZXI8
U1ZHVHJhbnNmb3JtPjo6Y3JlYXRlKCppdGVtKS5nZXQoKSwgY29udGV4dCk7CisKKyAgICBTVkdU
cmFuc2Zvcm1MaXN0KiBsaXN0ID0gbGlzdFdyYXBwZXItPmltcGwoKTsKKyAgICBKU1NWR0NvbnRl
eHRDYWNoZTo6cHJvcGFnYXRlU1ZHRE9NQ2hhbmdlKGxpc3RXcmFwcGVyLCBsaXN0LT5hc3NvY2lh
dGVkQXR0cmlidXRlTmFtZSgpKTsKKyAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3Qs
IEpTU1ZHU3RhdGljUE9EVHlwZVdyYXBwZXI8U1ZHVHJhbnNmb3JtPjo6Y3JlYXRlKCppdGVtKS5n
ZXQoKSwgMCAvKiBubyBjb250ZXh0IG9uIHB1cnBvc2UgKi8pOwogfQogCiBKU1ZhbHVlIEpTU1ZH
VHJhbnNmb3JtTGlzdDo6Y2xlYXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JikKIHsK
ICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBpbXBsKCktPmNsZWFyKGVjKTsKKyAgICBT
VkdUcmFuc2Zvcm1MaXN0QmFzZSogbGlzdEltcCA9IGltcGwoKTsKKyAgICBsaXN0SW1wLT5jbGVh
cihlYyk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKLSAgICBtX2NvbnRleHQtPnN2
Z0F0dHJpYnV0ZUNoYW5nZWQoaW1wbCgpLT5hc3NvY2lhdGVkQXR0cmlidXRlTmFtZSgpKTsKKwor
ICAgIEpTU1ZHQ29udGV4dENhY2hlOjpwcm9wYWdhdGVTVkdET01DaGFuZ2UodGhpcywgbGlzdElt
cC0+YXNzb2NpYXRlZEF0dHJpYnV0ZU5hbWUoKSk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiB9CiAKQEAgLTc2LDggKzg3LDcgQEAgSlNWYWx1ZSBKU1NWR1RyYW5zZm9ybUxpc3Q6OmluaXRp
YWxpemUoRQogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFNWR1RyYW5zZm9ybUxp
c3RCYXNlKiBsaXN0SW1wID0gaW1wbCgpOwotICAgIHJldHVybiBmaW5pc2hTZXR0ZXIoZXhlYywg
ZWMsIGNvbnRleHQoKSwgaW1wbCgpLAotICAgICAgICBsaXN0SW1wLT5pbml0aWFsaXplKFBPRExp
c3RJdGVtOjpjb3B5KHRvU1ZHVHJhbnNmb3JtKGFyZ3MuYXQoMCkpKSwgZWMpKTsKKyAgICByZXR1
cm4gZmluaXNoU2V0dGVyKGV4ZWMsIGVjLCBnbG9iYWxPYmplY3QoKSwgdGhpcywgbGlzdEltcC0+
aW5pdGlhbGl6ZShQT0RMaXN0SXRlbTo6Y29weSh0b1NWR1RyYW5zZm9ybShhcmdzLmF0KDApKSks
IGVjKSk7CiB9CiAKIEpTVmFsdWUgSlNTVkdUcmFuc2Zvcm1MaXN0OjpnZXRJdGVtKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKQEAgLTkxLDggKzEwMSw3IEBAIEpTVmFsdWUg
SlNTVkdUcmFuc2Zvcm1MaXN0OjpnZXRJdGVtKEV4ZWMKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOwogICAgIFNWR1RyYW5zZm9ybUxpc3RCYXNlKiBsaXN0SW1wID0gaW1wbCgpOwotICAgIHJl
dHVybiBmaW5pc2hHZXR0ZXIoZXhlYywgZWMsIGNvbnRleHQoKSwgaW1wbCgpLAotICAgICAgICBs
aXN0SW1wLT5nZXRJdGVtKGluZGV4LCBlYykpOworICAgIHJldHVybiBmaW5pc2hHZXR0ZXIoZXhl
YywgZWMsIGdsb2JhbE9iamVjdCgpLCB0aGlzLCBsaXN0SW1wLT5nZXRJdGVtKGluZGV4LCBlYykp
OwogfQogCiBKU1ZhbHVlIEpTU1ZHVHJhbnNmb3JtTGlzdDo6aW5zZXJ0SXRlbUJlZm9yZShFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCkBAIC0xMDYsOCArMTE1LDcgQEAgSlNW
YWx1ZSBKU1NWR1RyYW5zZm9ybUxpc3Q6Omluc2VydEl0ZW1CZQogCiAgICAgRXhjZXB0aW9uQ29k
ZSBlYyA9IDA7CiAgICAgU1ZHVHJhbnNmb3JtTGlzdEJhc2UqIGxpc3RJbXAgPSBpbXBsKCk7Ci0g
ICAgcmV0dXJuIGZpbmlzaFNldHRlcihleGVjLCBlYywgY29udGV4dCgpLCBpbXBsKCksCi0gICAg
ICAgIGxpc3RJbXAtPmluc2VydEl0ZW1CZWZvcmUoUE9ETGlzdEl0ZW06OmNvcHkodG9TVkdUcmFu
c2Zvcm0oYXJncy5hdCgwKSkpLCBpbmRleCwgZWMpKTsKKyAgICByZXR1cm4gZmluaXNoU2V0dGVy
KGV4ZWMsIGVjLCBnbG9iYWxPYmplY3QoKSwgdGhpcywgbGlzdEltcC0+aW5zZXJ0SXRlbUJlZm9y
ZShQT0RMaXN0SXRlbTo6Y29weSh0b1NWR1RyYW5zZm9ybShhcmdzLmF0KDApKSksIGluZGV4LCBl
YykpOwogfQogCiBKU1ZhbHVlIEpTU1ZHVHJhbnNmb3JtTGlzdDo6cmVwbGFjZUl0ZW0oRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQpAQCAtMTIwLDkgKzEyOCw4IEBAIEpTVmFs
dWUgSlNTVkdUcmFuc2Zvcm1MaXN0OjpyZXBsYWNlSXRlbSgKICAgICB9CiAKICAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKLSAgICBTVkdUcmFuc2Zvcm1MaXN0QmFzZSogbGlzdEltcCA9IGltcGwo
KTsKLSAgICByZXR1cm4gZmluaXNoU2V0dGVyKGV4ZWMsIGVjLCBjb250ZXh0KCksIGltcGwoKSwK
LSAgICAgICAgbGlzdEltcC0+cmVwbGFjZUl0ZW0oUE9ETGlzdEl0ZW06OmNvcHkodG9TVkdUcmFu
c2Zvcm0oYXJncy5hdCgwKSkpLCBpbmRleCwgZWMpKTsKKyAgICBTVkdUcmFuc2Zvcm1MaXN0QmFz
ZSogbGlzdEltcCA9IGltcGwoKTsgCisgICAgcmV0dXJuIGZpbmlzaFNldHRlcihleGVjLCBlYywg
Z2xvYmFsT2JqZWN0KCksIHRoaXMsIGxpc3RJbXAtPnJlcGxhY2VJdGVtKFBPRExpc3RJdGVtOjpj
b3B5KHRvU1ZHVHJhbnNmb3JtKGFyZ3MuYXQoMCkpKSwgaW5kZXgsIGVjKSk7CiB9CiAKIEpTVmFs
dWUgSlNTVkdUcmFuc2Zvcm1MaXN0OjpyZW1vdmVJdGVtKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
QXJnTGlzdCYgYXJncykKQEAgLTEzNiwxNiArMTQzLDE0IEBAIEpTVmFsdWUgSlNTVkdUcmFuc2Zv
cm1MaXN0OjpyZW1vdmVJdGVtKEUKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFNW
R1RyYW5zZm9ybUxpc3RCYXNlKiBsaXN0SW1wID0gaW1wbCgpOwotICAgIHJldHVybiBmaW5pc2hT
ZXR0ZXJSZWFkT25seVJlc3VsdChleGVjLCBlYywgY29udGV4dCgpLCBpbXBsKCksCi0gICAgICAg
IGxpc3RJbXAtPnJlbW92ZUl0ZW0oaW5kZXgsIGVjKSk7CisgICAgcmV0dXJuIGZpbmlzaFNldHRl
clJlYWRPbmx5UmVzdWx0KGV4ZWMsIGVjLCBnbG9iYWxPYmplY3QoKSwgdGhpcywgbGlzdEltcC0+
cmVtb3ZlSXRlbShpbmRleCwgZWMpKTsKIH0KIAogSlNWYWx1ZSBKU1NWR1RyYW5zZm9ybUxpc3Q6
OmFwcGVuZEl0ZW0oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAg
IEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFNWR1RyYW5zZm9ybUxpc3RCYXNlKiBsaXN0SW1w
ID0gaW1wbCgpOwotICAgIHJldHVybiBmaW5pc2hTZXR0ZXIoZXhlYywgZWMsIGNvbnRleHQoKSwg
aW1wbCgpLAotICAgICAgICBsaXN0SW1wLT5hcHBlbmRJdGVtKFBPRExpc3RJdGVtOjpjb3B5KHRv
U1ZHVHJhbnNmb3JtKGFyZ3MuYXQoMCkpKSwgZWMpKTsKKyAgICByZXR1cm4gZmluaXNoU2V0dGVy
KGV4ZWMsIGVjLCBnbG9iYWxPYmplY3QoKSwgdGhpcywgbGlzdEltcC0+YXBwZW5kSXRlbShQT0RM
aXN0SXRlbTo6Y29weSh0b1NWR1RyYW5zZm9ybShhcmdzLmF0KDApKSksIGVjKSk7CiB9CiAKIH0K
SW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2
aXNpb24gNTI0NTUpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpT
LnBtCSh3b3JraW5nIGNvcHkpCkBAIC0xMzIsMTUgKzEzMiw3IEBAIHN1YiBHZXRQYXJlbnRDbGFz
c05hbWUKICAgICBteSAkZGF0YU5vZGUgPSBzaGlmdDsKIAogICAgIHJldHVybiAkZGF0YU5vZGUt
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJMZWdhY3lQYXJlbnQifSBpZiAkZGF0YU5vZGUtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJMZWdhY3lQYXJlbnQifTsKLSAgICBpZiAoQHskZGF0YU5vZGUtPnBh
cmVudHN9IGVxIDApIHsKLSAgICAgICAgIyBGSVhNRTogU1ZHIHR5cGVzIHJlcXVpcmluZyBhIGNv
bnRleHQoKSBwb2ludGVyIGRvIG5vdCBoYXZlIGVub3VnaAotICAgICAgICAjIHNwYWNlIHRvIGhv
bGQgYSBnbG9iYWxPYmplY3QgcG9pbnRlciBhcyB3ZWxsIHcvbyBoaXR0aW5nIHRoZSBDRUxMX1NJ
WkUgbGltaXQuCi0gICAgICAgICMgVGhpcyBjb3VsZCBiZSBmaXhlZCBieSBtb3ZpbmcgY29udGV4
dCgpIGludG8gdGhlIHZhcmlvdXMgaW1wbCgpIGNsYXNzZXMuCi0gICAgICAgICMgVW50aWwgdGhl
biwgd2Ugc3BlY2lhbCBjYXNlIHRoZXNlIFNWRyBiaW5kaW5ncyBhbmQgYWxsb3cgdGhlbSB0byBy
ZXR1cm4KLSAgICAgICAgIyB0aGUgd3JvbmcgcHJvdG90eXBlcyBhbmQgY29uc3RydWN0b3JzIGR1
cmluZyB4LWZyYW1lIGFjY2Vzcy4gIFNlZSBidWcgMjcwODguCi0gICAgICAgIHJldHVybiAiRE9N
T2JqZWN0V2l0aFNWR0NvbnRleHQiIGlmIElzU1ZHVHlwZU5lZWRpbmdDb250ZXh0UGFyYW1ldGVy
KCRkYXRhTm9kZS0+bmFtZSk7Ci0gICAgICAgIHJldHVybiAiRE9NT2JqZWN0V2l0aEdsb2JhbFBv
aW50ZXIiOwotICAgIH0KKyAgICByZXR1cm4gIkRPTU9iamVjdFdpdGhHbG9iYWxQb2ludGVyIiBp
ZiAoQHskZGF0YU5vZGUtPnBhcmVudHN9IGVxIDApOwogICAgIHJldHVybiAiSlMiIC4gJGNvZGVH
ZW5lcmF0b3ItPlN0cmlwTW9kdWxlKCRkYXRhTm9kZS0+cGFyZW50cygwKSk7CiB9CiAKQEAgLTE2
OSwxNiArMTYxLDYgQEAgc3ViIEluZGV4R2V0dGVyUmV0dXJuc1N0cmluZ3MKICAgICByZXR1cm4g
MDsKIH0KIAotc3ViIENyZWF0ZVNWR0NvbnRleHRJbnRlcmZhY2VOYW1lCi17Ci0gICAgbXkgJHR5
cGUgPSBzaGlmdDsKLQotICAgIHJldHVybiAkdHlwZSBpZiAkY29kZUdlbmVyYXRvci0+SXNTVkdB
bmltYXRlZFR5cGUoJHR5cGUpOwotICAgIHJldHVybiAiU1ZHUGF0aFNlZyIgaWYgJHR5cGUgPX4g
L15TVkdQYXRoU2VnLyBhbmQgJHR5cGUgbmUgIlNWR1BhdGhTZWdMaXN0IjsKLQotICAgIHJldHVy
biAiIjsKLX0KLQogc3ViIEFkZEluY2x1ZGVzRm9yVHlwZQogewogICAgIG15ICR0eXBlID0gJGNv
ZGVHZW5lcmF0b3ItPlN0cmlwTW9kdWxlKHNoaWZ0KTsKQEAgLTQ5Myw3ICs0NzUsNiBAQCBzdWIg
R2VuZXJhdGVIZWFkZXIKICAgICBteSAkaGFzUGFyZW50ID0gJGhhc0xlZ2FjeVBhcmVudCB8fCAk
aGFzUmVhbFBhcmVudDsKICAgICBteSAkcGFyZW50Q2xhc3NOYW1lID0gR2V0UGFyZW50Q2xhc3NO
YW1lKCRkYXRhTm9kZSk7CiAgICAgbXkgJGNvbmRpdGlvbmFsID0gJGRhdGFOb2RlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiQ29uZGl0aW9uYWwifTsKLSAgICBteSAkbmVlZHNTVkdDb250ZXh0ID0g
SXNTVkdUeXBlTmVlZGluZ0NvbnRleHRQYXJhbWV0ZXIoJGludGVyZmFjZU5hbWUpOwogICAgIG15
ICRldmVudFRhcmdldCA9ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkV2ZW50VGFy
Z2V0In07CiAgICAgbXkgJG5lZWRzTWFya0NoaWxkcmVuID0gJGRhdGFOb2RlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiQ3VzdG9tTWFya0Z1bmN0aW9uIn0gfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiRXZlbnRUYXJnZXQifTsKICAgICAKQEAgLTUxMyw4ICs0OTQsNyBAQCBzdWIg
R2VuZXJhdGVIZWFkZXIKICAgICBpZiAoJGhhc1BhcmVudCkgewogICAgICAgICAkaGVhZGVySW5j
bHVkZXN7IiRwYXJlbnRDbGFzc05hbWUuaCJ9ID0gMTsKICAgICB9IGVsc2UgewotICAgICAgICAk
aGVhZGVySW5jbHVkZXN7IkRPTU9iamVjdFdpdGhTVkdDb250ZXh0LmgifSA9ICRuZWVkc1NWR0Nv
bnRleHQ7Ci0gICAgICAgICRoZWFkZXJJbmNsdWRlc3siSlNET01CaW5kaW5nLmgifSA9ICEkbmVl
ZHNTVkdDb250ZXh0OworICAgICAgICAkaGVhZGVySW5jbHVkZXN7IkpTRE9NQmluZGluZy5oIn0g
PSAxOwogICAgICAgICAkaGVhZGVySW5jbHVkZXN7IjxydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg+
In0gPSAxOwogICAgICAgICAkaGVhZGVySW5jbHVkZXN7IjxydW50aW1lL09iamVjdFByb3RvdHlw
ZS5oPiJ9ID0gMTsKICAgICB9CkBAIC01NjEsOCArNTQxLDYgQEAgc3ViIEdlbmVyYXRlSGVhZGVy
CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgJGNsYXNzTmFtZShOb25OdWxsUGFz
c1JlZlB0cjxKU0M6OlN0cnVjdHVyZT4sIFBhc3NSZWZQdHI8JGltcGxUeXBlPiwgSlNET01XaW5k
b3dTaGVsbCopO1xuIik7CiAgICAgfSBlbHNpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPnsiSXNXb3JrZXJDb250ZXh0In0pIHsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwg
IiAgICAkY2xhc3NOYW1lKE5vbk51bGxQYXNzUmVmUHRyPEpTQzo6U3RydWN0dXJlPiwgUGFzc1Jl
ZlB0cjwkaW1wbFR5cGU+KTtcbiIpOwotICAgIH0gZWxzaWYgKElzU1ZHVHlwZU5lZWRpbmdDb250
ZXh0UGFyYW1ldGVyKCRpbXBsQ2xhc3NOYW1lKSkgewotICAgICAgICBwdXNoKEBoZWFkZXJDb250
ZW50LCAiICAgICRjbGFzc05hbWUoTm9uTnVsbFBhc3NSZWZQdHI8SlNDOjpTdHJ1Y3R1cmU+LCBK
U0RPTUdsb2JhbE9iamVjdCosIFBhc3NSZWZQdHI8JGltcGxUeXBlPiwgU1ZHRWxlbWVudCogY29u
dGV4dCk7XG4iKTsKICAgICB9IGVsc2UgewogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAi
ICAgICRjbGFzc05hbWUoTm9uTnVsbFBhc3NSZWZQdHI8SlNDOjpTdHJ1Y3R1cmU+LCBKU0RPTUds
b2JhbE9iamVjdCosIFBhc3NSZWZQdHI8JGltcGxUeXBlPik7XG4iKTsKICAgICB9CkBAIC03ODMs
NyArNzYxLDcgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAKICAgICBpZiAoISRoYXNQYXJlbnQgfHwg
JGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiR2VuZXJhdGVUb0pTIn0gfHwgJGRhdGFO
b2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tVG9KUyJ9KSB7CiAgICAgICAgIGlmICgk
cG9kVHlwZSkgewotICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIkpTQzo6SlNWYWx1
ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBKU1NWR1BPRFR5cGVX
cmFwcGVyPCRwb2RUeXBlPiosIFNWR0VsZW1lbnQqIGNvbnRleHQpO1xuIik7CisgICAgICAgICAg
ICBwdXNoKEBoZWFkZXJDb250ZW50LCAiSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUq
LCBKU0RPTUdsb2JhbE9iamVjdCosIEpTU1ZHUE9EVHlwZVdyYXBwZXI8JHBvZFR5cGU+KiwgU1ZH
RWxlbWVudCopO1xuIik7CiAgICAgICAgIH0gZWxzaWYgKElzU1ZHVHlwZU5lZWRpbmdDb250ZXh0
UGFyYW1ldGVyKCRpbXBsQ2xhc3NOYW1lKSkgewogICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29u
dGVudCwgIkpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmpl
Y3QqLCAkaW1wbFR5cGUqLCBTVkdFbGVtZW50KiBjb250ZXh0KTtcbiIpOwogICAgICAgICB9IGVs
c2UgewpAQCAtMTE3Myw5ICsxMTUxLDYgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAg
ICBteSAkcG9kVHlwZSA9ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlBPRFR5cGUi
fTsKICAgICBteSAkaW1wbFR5cGUgPSAkcG9kVHlwZSA/ICJKU1NWR1BPRFR5cGVXcmFwcGVyPCRw
b2RUeXBlPiAiIDogJGltcGxDbGFzc05hbWU7CiAKLSAgICBteSAkbmVlZHNTVkdDb250ZXh0ID0g
SXNTVkdUeXBlTmVlZGluZ0NvbnRleHRQYXJhbWV0ZXIoJGltcGxDbGFzc05hbWUpOwotICAgIG15
ICRwYXJlbnROZWVkc1NWR0NvbnRleHQgPSAoJG5lZWRzU1ZHQ29udGV4dCBhbmQgJHBhcmVudENs
YXNzTmFtZSA9fiAvU1ZHLyk7Ci0KICAgICAjIENvbnN0cnVjdG9yCiAgICAgaWYgKCRpbnRlcmZh
Y2VOYW1lIGVxICJET01XaW5kb3ciKSB7CiAgICAgICAgIEFkZEluY2x1ZGVzRm9yVHlwZSgiSlNE
T01XaW5kb3dTaGVsbCIpOwpAQCAtMTE4NiwxMiArMTE2MSwxMSBAQCBzdWIgR2VuZXJhdGVJbXBs
ZW1lbnRhdGlvbgogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiR7Y2xhc3NOYW1lfTo6JGNs
YXNzTmFtZShOb25OdWxsUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IHN0cnVjdHVyZSwgUGFzc1JlZlB0
cjwkaW1wbFR5cGU+IGltcGwpXG4iKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
OiAkcGFyZW50Q2xhc3NOYW1lKHN0cnVjdHVyZSwgaW1wbClcbiIpOwogICAgIH0gZWxzZSB7Ci0g
ICAgICAgIG15ICRjb250ZXh0QXJnID0gJG5lZWRzU1ZHQ29udGV4dCA/ICIsIFNWR0VsZW1lbnQq
IGNvbnRleHQiIDogIiI7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiJHtjbGFzc05hbWV9
OjokY2xhc3NOYW1lKE5vbk51bGxQYXNzUmVmUHRyPFN0cnVjdHVyZT4gc3RydWN0dXJlLCBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPCRpbXBsVHlwZT4gaW1wbCRj
b250ZXh0QXJnKVxuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiJHtjbGFzc05hbWV9
OjokY2xhc3NOYW1lKE5vbk51bGxQYXNzUmVmUHRyPFN0cnVjdHVyZT4gc3RydWN0dXJlLCBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPCRpbXBsVHlwZT4gaW1wbClc
biIpOwogICAgICAgICBpZiAoJGhhc1BhcmVudCkgewotICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgOiAkcGFyZW50Q2xhc3NOYW1lKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0LCBp
bXBsIiAuICgkcGFyZW50TmVlZHNTVkdDb250ZXh0ID8gIiwgY29udGV4dCIgOiAiIikgLiAiKVxu
Iik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICA6ICRwYXJlbnRDbGFzc05h
bWUoc3RydWN0dXJlLCBnbG9iYWxPYmplY3QsIGltcGwpXG4iKTsKICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIDogJHBhcmVudENsYXNzTmFtZShz
dHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCIgLiAoJG5lZWRzU1ZHQ29udGV4dCA/ICIsIGNvbnRleHQi
IDogIiIpIC4gIilcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgOiAk
cGFyZW50Q2xhc3NOYW1lKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KVxuIik7CiAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAsIG1faW1wbChpbXBsKVxuIik7CiAgICAgICAgIH0K
ICAgICB9CkBAIC0xMjE0LDYgKzExODgsOCBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgog
ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICBmb3JnZXRET01PYmplY3QodGhpcywgaW1wbCgpKTtcbiIpOwogICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBKU1NWR0NvbnRleHRDYWNoZTo6
Zm9yZ2V0V3JhcHBlcih0aGlzKTtcbiIpIGlmIElzU1ZHVHlwZU5lZWRpbmdDb250ZXh0UGFyYW1l
dGVyKCRpbXBsQ2xhc3NOYW1lKTsKICAgICAgICAgfQogCiAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAifVxuXG4iKTsKQEAgLTEzOTUsMTUgKzEzNzEsOCBAQCBzdWIgR2VuZXJhdGVJbXBsZW1l
bnRhdGlvbgogCiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJKU1ZhbHVlICR7
Y29uc3RydWN0b3JGdW5jdGlvbk5hbWV9KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmll
ciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdClcbiIpOwogICAgICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAie1xuIik7Ci0gICAgICAgICAgICAgICAgaWYgKElzU1ZHVHlwZU5lZWRp
bmdDb250ZXh0UGFyYW1ldGVyKCRpbnRlcmZhY2VOYW1lKSkgewotICAgICAgICAgICAgICAgICAg
ICAjIEZJWE1FOiBTVkcgYmluZGluZ3Mgd2l0aCBhIGNvbnRleHQgcG9pbnRlciBoYXZlIG5vIHNw
YWNlIHRvIHN0b3JlIGEgZ2xvYmFsT2JqZWN0Ci0gICAgICAgICAgICAgICAgICAgICMgc28gd2Ug
dXNlIGRlcHJlY2F0ZWRHbG9iYWxPYmplY3RGb3JQcm90b3R5cGUgaW5zdGVhZC4KLSAgICAgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgVU5VU0VEX1BBUkFNKHNsb3QpO1xu
Iik7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiAk
e2NsYXNzTmFtZX06OmdldENvbnN0cnVjdG9yKGV4ZWMsIGRlcHJlY2F0ZWRHbG9iYWxPYmplY3RG
b3JQcm90b3R5cGUoZXhlYykpO1xuIik7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJHtjbGFzc05hbWV9KiBkb21P
YmplY3QgPSBzdGF0aWNfY2FzdDwkY2xhc3NOYW1lKj4oYXNPYmplY3Qoc2xvdC5zbG90QmFzZSgp
KSk7XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0
dXJuICR7Y2xhc3NOYW1lfTo6Z2V0Q29uc3RydWN0b3IoZXhlYywgZG9tT2JqZWN0LT5nbG9iYWxP
YmplY3QoKSk7XG4iKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgJHtjbGFzc05hbWV9KiBkb21PYmplY3QgPSBzdGF0aWNfY2FzdDwk
Y2xhc3NOYW1lKj4oYXNPYmplY3Qoc2xvdC5zbG90QmFzZSgpKSk7XG4iKTsKKyAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gJHtjbGFzc05hbWV9OjpnZXRDb25z
dHJ1Y3RvcihleGVjLCBkb21PYmplY3QtPmdsb2JhbE9iamVjdCgpKTtcbiIpOwogICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuIik7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KQEAgLTE0OTcsMTYgKzE0NjYsMTcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAvLyBTaGFk
b3dpbmcgYSBidWlsdC1pbiBvYmplY3RcbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIHN0YXRpY19jYXN0PCRjbGFzc05hbWUqPih0aGlzT2Jq
ZWN0KS0+cHV0RGlyZWN0KElkZW50aWZpZXIoZXhlYywgXCIkbmFtZVwiKSwgdmFsdWUpO1xuIik7
CiAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICRjbGFzc05hbWUqIGNhc3RlZFRoaXNPYmog
PSBzdGF0aWNfY2FzdDwkY2xhc3NOYW1lKj4odGhpc09iamVjdCk7XG4iKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAkaW1wbFR5cGUqIGltcCA9
IHN0YXRpY19jYXN0PCRpbXBsVHlwZSo+KGNhc3RlZFRoaXNPYmotPmltcGwoKSk7XG4iKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHBvZFR5cGUpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJHBvZFR5cGUgaW1wKCpz
dGF0aWNfY2FzdDwkY2xhc3NOYW1lKj4odGhpc09iamVjdCktPmltcGwoKSk7XG4iKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJHBvZFR5
cGUgcG9kSW1wKCppbXApO1xuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICgkcG9kVHlwZSBlcSAiZmxvYXQiKSB7ICMgU3BlY2lhbCBjYXNlIGZvciBKU1NWR051bWJlcgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgaW1wID0gIiAuIEpTVmFsdWVUb05hdGl2ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsICJ2YWx1
ZSIpIC4gIjtcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgcG9kSW1wID0gIiAuIEpTVmFsdWVUb05hdGl2ZSgkYXR0cmlidXRl
LT5zaWduYXR1cmUsICJ2YWx1ZSIpIC4gIjtcbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgaW1wLnNldCRpbXBsU2V0dGVyRnVuY3Rpb25OYW1lKCIgLiBK
U1ZhbHVlVG9OYXRpdmUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAidmFsdWUiKSAuICIpO1xuIik7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICBwb2RJbXAuc2V0JGltcGxTZXR0ZXJGdW5jdGlvbk5hbWUoIiAuIEpTVmFsdWVUb05hdGl2
ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsICJ2YWx1ZSIpIC4gIik7XG4iKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgc3RhdGljX2Nhc3Q8JGNsYXNzTmFtZSo+KHRoaXNP
YmplY3QpLT5pbXBsKCktPmNvbW1pdENoYW5nZShpbXAsIHN0YXRpY19jYXN0PCRjbGFzc05hbWUq
Pih0aGlzT2JqZWN0KS0+Y29udGV4dCgpKTtcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpbXAtPmNvbW1pdENoYW5nZShwb2RJbXAs
IGNhc3RlZFRoaXNPYmopO1xuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgJGltcGxDbGFzc05hbWUqIGltcCA9IHN0YXRpY19jYXN0PCRpbXBsQ2xhc3NOYW1lKj4oc3Rh
dGljX2Nhc3Q8JGNsYXNzTmFtZSo+KHRoaXNPYmplY3QpLT5pbXBsKCkpO1xuIik7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG15ICRuYXRpdmVWYWx1ZSA9IEpTVmFsdWVUb05hdGl2
ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsICJ2YWx1ZSIpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBFeGNlcHRpb25Db2RlIGVjID0gMDtc
biIpIGlmIEB7JGF0dHJpYnV0ZS0+c2V0dGVyRXhjZXB0aW9uc307CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG15ICRyZWZsZWN0ID0gJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiUmVmbGVjdCJ9OwpAQCAtMTUyMiwxMCArMTQ5Miw4IEBAIHN1YiBH
ZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiLCBlYyIpIGlmIEB7JGF0dHJpYnV0ZS0+c2V0dGVyRXhjZXB0aW9u
c307CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
KTtcbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpO1xuIikgaWYgQHskYXR0cmlidXRlLT5z
ZXR0ZXJFeGNlcHRpb25zfTsKLQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
SXNTVkdUeXBlTmVlZGluZ0NvbnRleHRQYXJhbWV0ZXIoJGltcGxDbGFzc05hbWUpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBp
ZiAoc3RhdGljX2Nhc3Q8JGNsYXNzTmFtZSo+KHRoaXNPYmplY3QpLT5jb250ZXh0KCkpXG4iKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgICAgICBzdGF0aWNfY2FzdDwkY2xhc3NOYW1lKj4odGhpc09iamVjdCktPmNvbnRleHQoKS0+
c3ZnQXR0cmlidXRlQ2hhbmdlZChzdGF0aWNfY2FzdDwkY2xhc3NOYW1lKj4odGhpc09iamVjdCkt
PmltcGwoKS0+YXNzb2NpYXRlZEF0dHJpYnV0ZU5hbWUoKSk7XG4iKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEpTU1ZHQ29udGV4
dENhY2hlOjpwcm9wYWdhdGVTVkdET01DaGFuZ2UoY2FzdGVkVGhpc09iaiwgaW1wLT5hc3NvY2lh
dGVkQXR0cmlidXRlTmFtZSgpKTtcbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg
ICAgfQpAQCAtMTU5MSwxMiArMTU1OSw4IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAg
ICAgICAgICAgICBpZiAoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJDdXN0b20ifSB8fCAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
IkpTQ0N1c3RvbSJ9KSB7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
cmV0dXJuIGNhc3RlZFRoaXNPYmotPiIgLiAkZnVuY3Rpb25JbXBsZW1lbnRhdGlvbk5hbWUgLiAi
KGV4ZWMsIGFyZ3MpO1xuIik7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
IGlmICgkcG9kVHlwZSkgewotICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICBKU1NWR1BPRFR5cGVXcmFwcGVyPCRwb2RUeXBlPiogd3JhcHBlciA9IGNhc3RlZFRoaXNP
YmotPmltcGwoKTtcbiIpOwotICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICAkcG9kVHlwZSBpbXAoKndyYXBwZXIpO1xuIik7Ci0gICAgICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJGltcGxDbGFz
c05hbWUqIGltcCA9IHN0YXRpY19jYXN0PCRpbXBsQ2xhc3NOYW1lKj4oY2FzdGVkVGhpc09iai0+
aW1wbCgpKTtcbiIpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICAkaW1wbFR5cGUqIGltcCA9IHN0YXRpY19jYXN0PCRpbXBsVHlwZSo+
KGNhc3RlZFRoaXNPYmotPmltcGwoKSk7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICAkcG9kVHlwZSBwb2RJbXAoKmltcCk7XG4iKSBpZiAkcG9kVHlwZTsKIAog
ICAgICAgICAgICAgICAgIG15ICRudW1QYXJhbWV0ZXJzID0gQHskZnVuY3Rpb24tPnBhcmFtZXRl
cnN9OwogCkBAIC0xNjE2LDcgKzE1ODAsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgog
ICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIG15ICRwYXJhbUluZGV4ID0gMDsK
LSAgICAgICAgICAgICAgICBteSAkZnVuY3Rpb25TdHJpbmcgPSAiaW1wIiAuICgkcG9kVHlwZSA/
ICIuIiA6ICItPiIpIC4gJGZ1bmN0aW9uSW1wbGVtZW50YXRpb25OYW1lIC4gIigiOworICAgICAg
ICAgICAgICAgIG15ICRmdW5jdGlvblN0cmluZyA9ICgkcG9kVHlwZSA/ICJwb2RJbXAuIiA6ICJp
bXAtPiIpIC4gJGZ1bmN0aW9uSW1wbGVtZW50YXRpb25OYW1lIC4gIigiOwogCiAgICAgICAgICAg
ICAgICAgbXkgJGhhc09wdGlvbmFsQXJndW1lbnRzID0gMDsKIApAQCAtMTcyNywxMSArMTY5MSwx
MCBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICBpZiAoJHBvZFR5cGUpIHsK
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpF
eGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTU1ZHUE9E
VHlwZVdyYXBwZXI8JHBvZFR5cGU+KiBvYmplY3QsIFNWR0VsZW1lbnQqIGNvbnRleHQpXG4iKTsK
ICAgICAgICAgfSBlbHNpZiAoSXNTVkdUeXBlTmVlZGluZ0NvbnRleHRQYXJhbWV0ZXIoJGltcGxD
bGFzc05hbWUpKSB7Ci0gICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJKU0M6OkpTVmFs
dWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgJGltcGxUeXBlKiBvYmplY3QsIFNWR0VsZW1lbnQqIGNvbnRleHQpXG4iKTsKKyAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3Rh
dGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsICRpbXBsVHlwZSogb2Jq
ZWN0LCBTVkdFbGVtZW50KiBjb250ZXh0KVxuIik7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIkpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRl
KiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCAkaW1wbFR5cGUqIG9iamVj
dClcbiIpOwogICAgICAgICB9Ci0KICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsK
ICAgICAgICAgaWYgKCRwb2RUeXBlKSB7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICByZXR1cm4gZ2V0RE9NT2JqZWN0V3JhcHBlcjwkY2xhc3NOYW1lLCBKU1NWR1BPRFR5cGVX
cmFwcGVyPCRwb2RUeXBlPiA+KGV4ZWMsIGdsb2JhbE9iamVjdCwgb2JqZWN0LCBjb250ZXh0KTtc
biIpOwpAQCAtMTc4OSwxMSArMTc1Miw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uRnVu
Y3Rpb25DYWxsKCkKICAgICBpZiAoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPnR5cGUgZXEgInZvaWQi
KSB7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAkaW5kZW50IC4gIiRmdW5jdGlvblN0cmlu
ZztcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgJGluZGVudCAuICJzZXRET01FeGNl
cHRpb24oZXhlYywgZWMpO1xuIikgaWYgQHskZnVuY3Rpb24tPnJhaXNlc0V4Y2VwdGlvbnN9Owot
Ci0gICAgICAgIGlmICgkcG9kVHlwZSkgewotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICRpbmRlbnQgLiAid3JhcHBlci0+Y29tbWl0Q2hhbmdlKGltcCwgY2FzdGVkVGhpc09iai0+Y29u
dGV4dCgpKTtcbiIpOwotICAgICAgICB9Ci0KKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICRp
bmRlbnQgLiAiaW1wLT5jb21taXRDaGFuZ2UocG9kSW1wLCBjYXN0ZWRUaGlzT2JqKTtcbiIpIGlm
ICRwb2RUeXBlOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgJGluZGVudCAuICJyZXR1cm4g
anNVbmRlZmluZWQoKTtcbiIpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiXG4iIC4gJGluZGVudCAuICJKU0M6OkpTVmFsdWUgcmVzdWx0ID0gIiAuIE5hdGl2ZVRv
SlNWYWx1ZSgkZnVuY3Rpb24tPnNpZ25hdHVyZSwgMSwgJGltcGxDbGFzc05hbWUsICIiLCAkZnVu
Y3Rpb25TdHJpbmcsICJjYXN0ZWRUaGlzT2JqIikgLiAiO1xuIik7CkBAIC0xODAyLDcgKzE3NjEs
NyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbkZ1bmN0aW9uQ2FsbCgpCiAgICAgICAgIGlm
ICgkcG9kVHlwZSBhbmQgbm90ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPnsiSW1tdXRhYmxlIn0pIHsKICAgICAgICAgICAgICMgSW1tdXRhYmxlIG1ldGhvZHMgZG8g
bm90IGNvbW1pdCBjaGFuZ2VzIGJhY2sgdG8gdGhlIGluc3RhbmNlLCB0aHVzIHByb2R1Y2luZwog
ICAgICAgICAgICAgIyBhIG5ldyBpbnN0YW5jZSByYXRoZXIgdGhhbiBtdXRhdGluZyBleGlzdGlu
ZyBvbmUuCi0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgJGluZGVudCAuICJ3cmFwcGVy
LT5jb21taXRDaGFuZ2UoaW1wLCBjYXN0ZWRUaGlzT2JqLT5jb250ZXh0KCkpO1xuIik7CisgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgJGluZGVudCAuICJpbXAtPmNvbW1pdENoYW5nZShw
b2RJbXAsIGNhc3RlZFRoaXNPYmopO1xuIik7CiAgICAgICAgIH0KIAogICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgJGluZGVudCAuICJyZXR1cm4gcmVzdWx0O1xuIik7CkBAIC0xOTIzLDkgKzE4
ODIsNyBAQCBzdWIgTmF0aXZlVG9KU1ZhbHVlCiAgICAgICAgIHJldHVybiAianNTdHJpbmcoZXhl
YywgJHZhbHVlKSI7CiAgICAgfQogICAgIAotICAgICMgU29tZSBTVkcgYmluZGluZ3MgZG9uJ3Qg
aGF2ZSBzcGFjZSB0byBzdG9yZSBhIGdsb2JhbE9iamVjdCBwb2ludGVyLCBmb3IgdGhvc2UsIHdl
IHVzZSB0aGUgZGVwcmVjYXRlZEdsb2JhbE9iamVjdEZvclByb3RvdHlwZSBoYWNrIGZvciBub3cu
Ci0gICAgbXkgJGdsb2JhbE9iamVjdCA9IElzU1ZHVHlwZU5lZWRpbmdDb250ZXh0UGFyYW1ldGVy
KCRpbXBsQ2xhc3NOYW1lKSA/ICJkZXByZWNhdGVkR2xvYmFsT2JqZWN0Rm9yUHJvdG90eXBlKGV4
ZWMpIiA6ICIkdGhpc1ZhbHVlLT5nbG9iYWxPYmplY3QoKSI7Ci0KKyAgICBteSAkZ2xvYmFsT2Jq
ZWN0ID0gIiR0aGlzVmFsdWUtPmdsb2JhbE9iamVjdCgpIjsKICAgICBpZiAoJGNvZGVHZW5lcmF0
b3ItPklzUG9kVHlwZSgkdHlwZSkpIHsKICAgICAgICAgJGltcGxJbmNsdWRlc3siSlMkdHlwZS5o
In0gPSAxOwogCkBAIC0xOTQzLDI1ICsxOTAwLDE2IEBAIHN1YiBOYXRpdmVUb0pTVmFsdWUKICAg
ICAgICAgICAgIGFuZCAkY29kZUdlbmVyYXRvci0+SXNQb2RUeXBlV2l0aFdyaXRlYWJsZVByb3Bl
cnRpZXMoJHR5cGUpCiAgICAgICAgICAgICBhbmQgbm90IGRlZmluZWQgJHNpZ25hdHVyZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57IkltbXV0YWJsZSJ9KSB7CiAgICAgICAgICAgICBpZiAoJGNvZGVH
ZW5lcmF0b3ItPklzUG9kVHlwZSgkaW1wbENsYXNzTmFtZSkpIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gInRvSlMoZXhlYywgJGdsb2JhbE9iamVjdCwgSlNTVkdTdGF0aWNQT0RUeXBlV3JhcHBl
cldpdGhQT0RUeXBlUGFyZW50PCRuYXRpdmVUeXBlLCAkaW1wbENsYXNzTmFtZT46OmNyZWF0ZSgk
dmFsdWUsICR0aGlzVmFsdWUtPmltcGwoKSkuZ2V0KCksICR0aGlzVmFsdWUtPmNvbnRleHQoKSki
OworICAgICAgICAgICAgICAgIHJldHVybiAidG9KUyhleGVjLCAkZ2xvYmFsT2JqZWN0LCBKU1NW
R1N0YXRpY1BPRFR5cGVXcmFwcGVyV2l0aFBPRFR5cGVQYXJlbnQ8JG5hdGl2ZVR5cGUsICRpbXBs
Q2xhc3NOYW1lPjo6Y3JlYXRlKCR2YWx1ZSwgJHRoaXNWYWx1ZS0+aW1wbCgpKS5nZXQoKSwgSlNT
VkdDb250ZXh0Q2FjaGU6OnN2Z0NvbnRleHRGb3JET01PYmplY3QoY2FzdGVkVGhpcykpIjsKICAg
ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuICJ0b0pTKGV4ZWMsICRn
bG9iYWxPYmplY3QsIEpTU1ZHU3RhdGljUE9EVHlwZVdyYXBwZXJXaXRoUGFyZW50PCRuYXRpdmVU
eXBlLCAkaW1wbENsYXNzTmFtZT46OmNyZWF0ZShpbXAsICYke2ltcGxDbGFzc05hbWV9OjokZ2V0
dGVyLCAmJHtpbXBsQ2xhc3NOYW1lfTo6JHNldHRlcikuZ2V0KCksIGltcCkiOwogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAKICAgICAgICAgaWYgKCRpbXBsQ2xhc3NOYW1lRm9yVmFsdWVDb252
ZXJzaW9uIGVxICIiKSB7Ci0gICAgICAgICAgICAjIFNWR1pvb21FdmVudCBoYXMgbm8gY29udGV4
dCgpIHBvaW50ZXIsIGFuZCBpcyBhbHNvIG5vdCBhbiBTVkdFbGVtZW50LgotICAgICAgICAgICAg
IyBUaGlzIGlzIG5vdCBhIHByb2JsZW0sIGJlY2F1c2UgU1ZHWm9vbUV2ZW50IGhhcyBubyByZWFk
L3dyaXRlIHByb3BlcnRpZXMuCi0gICAgICAgICAgICByZXR1cm4gInRvSlMoZXhlYywgJGdsb2Jh
bE9iamVjdCwgSlNTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcjwkbmF0aXZlVHlwZT46OmNyZWF0ZSgk
dmFsdWUpLmdldCgpLCAwKSIgaWYgJGltcGxDbGFzc05hbWUgZXEgIlNWR1pvb21FdmVudCI7Ci0K
LSAgICAgICAgICAgIGlmIChJc1NWR1R5cGVOZWVkaW5nQ29udGV4dFBhcmFtZXRlcigkaW1wbENs
YXNzTmFtZSkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gInRvSlMoZXhlYywgJGdsb2JhbE9i
amVjdCwgSlNTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcjwkbmF0aXZlVHlwZT46OmNyZWF0ZSgkdmFs
dWUpLmdldCgpLCBjYXN0ZWRUaGlzT2JqLT5jb250ZXh0KCkpIiBpZiAkaW5GdW5jdGlvbkNhbGw7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJ0b0pTKGV4ZWMsICRnbG9iYWxPYmplY3QsIEpTU1ZH
U3RhdGljUE9EVHlwZVdyYXBwZXI8JG5hdGl2ZVR5cGU+OjpjcmVhdGUoJHZhbHVlKS5nZXQoKSwg
JHRoaXNWYWx1ZS0+Y29udGV4dCgpKSI7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgIHJldHVybiAidG9KUyhleGVjLCAkZ2xvYmFsT2JqZWN0LCBKU1NWR1N0YXRpY1BPRFR5
cGVXcmFwcGVyPCRuYXRpdmVUeXBlPjo6Y3JlYXRlKCR2YWx1ZSkuZ2V0KCksIGltcCkiOwotICAg
ICAgICAgICAgfQotICAgICAgICB9IGVsc2UgeyAjIFRoZXNlIGNsYXNzZXMsIGFsd2F5cyBoYXZl
IGEgbV9jb250ZXh0IHBvaW50ZXIhCi0gICAgICAgICAgICByZXR1cm4gInRvSlMoZXhlYywgJGds
b2JhbE9iamVjdCwgSlNTVkdEeW5hbWljUE9EVHlwZVdyYXBwZXJDYWNoZTwkbmF0aXZlVHlwZSwg
JGltcGxDbGFzc05hbWVGb3JWYWx1ZUNvbnZlcnNpb24+Ojpsb29rdXBPckNyZWF0ZVdyYXBwZXIo
aW1wLCAmJHtpbXBsQ2xhc3NOYW1lRm9yVmFsdWVDb252ZXJzaW9ufTo6JGdldHRlciwgJiR7aW1w
bENsYXNzTmFtZUZvclZhbHVlQ29udmVyc2lvbn06OiRzZXR0ZXIpLmdldCgpLCAkdGhpc1ZhbHVl
LT5jb250ZXh0KCkpIjsKKyAgICAgICAgICAgIHJldHVybiAidG9KUyhleGVjLCAkZ2xvYmFsT2Jq
ZWN0LCBKU1NWR1N0YXRpY1BPRFR5cGVXcmFwcGVyPCRuYXRpdmVUeXBlPjo6Y3JlYXRlKCR2YWx1
ZSkuZ2V0KCksIDAgLyogbm8gY29udGV4dCBvbiBwdXJwb3NlICovKSI7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICByZXR1cm4gInRvSlMoZXhlYywgJGdsb2JhbE9iamVjdCwgSlNTVkdE
eW5hbWljUE9EVHlwZVdyYXBwZXJDYWNoZTwkbmF0aXZlVHlwZSwgJGltcGxDbGFzc05hbWVGb3JW
YWx1ZUNvbnZlcnNpb24+Ojpsb29rdXBPckNyZWF0ZVdyYXBwZXIoaW1wLCAmJHtpbXBsQ2xhc3NO
YW1lRm9yVmFsdWVDb252ZXJzaW9ufTo6JGdldHRlciwgJiR7aW1wbENsYXNzTmFtZUZvclZhbHVl
Q29udmVyc2lvbn06OiRzZXR0ZXIpLmdldCgpLCBKU1NWR0NvbnRleHRDYWNoZTo6c3ZnQ29udGV4
dEZvckRPTU9iamVjdChjYXN0ZWRUaGlzKSk7IgogICAgICAgICB9CiAgICAgfQogCkBAIC0yMDAy
LDcgKzE5NTAsNyBAQCBzdWIgTmF0aXZlVG9KU1ZhbHVlCiAgICAgcmV0dXJuICR2YWx1ZSBpZiAk
Y29kZUdlbmVyYXRvci0+SXNTVkdBbmltYXRlZFR5cGUoJHR5cGUpOwogCiAgICAgaWYgKElzU1ZH
VHlwZU5lZWRpbmdDb250ZXh0UGFyYW1ldGVyKCR0eXBlKSkgewotICAgICAgICBteSAkY29udGV4
dFB0ciA9IElzU1ZHVHlwZU5lZWRpbmdDb250ZXh0UGFyYW1ldGVyKCRpbXBsQ2xhc3NOYW1lKSA/
ICIkdGhpc1ZhbHVlLT5jb250ZXh0KCkiIDogImltcCI7CisgICAgICAgIG15ICRjb250ZXh0UHRy
ID0gSXNTVkdUeXBlTmVlZGluZ0NvbnRleHRQYXJhbWV0ZXIoJGltcGxDbGFzc05hbWUpID8gIkpT
U1ZHQ29udGV4dENhY2hlOjpzdmdDb250ZXh0Rm9yRE9NT2JqZWN0KGNhc3RlZFRoaXMpIiA6ICJp
bXAiOwogICAgICAgICByZXR1cm4gInRvSlMoZXhlYywgJGdsb2JhbE9iamVjdCwgV1RGOjpnZXRQ
dHIoJHZhbHVlKSwgJGNvbnRleHRQdHIpIjsKICAgICB9CiAKSW5kZXg6IFdlYkNvcmUvc3ZnL1NW
R0FuZ2xlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHQW5nbGUuaAkocmV2aXNpb24g
NTI0NTUpCisrKyBXZWJDb3JlL3N2Zy9TVkdBbmdsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw4
ICsyNyw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNsYXNzIFNWR1N0eWxlZEVs
ZW1lbnQ7Ci0KICAgICBjbGFzcyBTVkdBbmdsZSB7CiAgICAgcHVibGljOgogICAgICAgICBTVkdB
bmdsZSgpOwpAQCAtNTYsOSArNTQsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZv
aWQgbmV3VmFsdWVTcGVjaWZpZWRVbml0cyh1bnNpZ25lZCBzaG9ydCB1bml0VHlwZSwgZmxvYXQg
dmFsdWVJblNwZWNpZmllZFVuaXRzKTsKICAgICAgICAgdm9pZCBjb252ZXJ0VG9TcGVjaWZpZWRV
bml0cyh1bnNpZ25lZCBzaG9ydCB1bml0VHlwZSk7CiAKLSAgICAgICAgLy8gVGhyb3VnaG91dCBT
VkcgMS4xICdTVkdBbmdsZScgaXMgb25seSB1c2VkIGZvciAnU1ZHTWFya2VyRWxlbWVudCcgKG9y
aWVudC1hbmdsZSkKLSAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXNzb2NpYXRlZEF0dHJp
YnV0ZU5hbWUoKSBjb25zdCB7IHJldHVybiBTVkdOYW1lczo6b3JpZW50QXR0cjsgfQotCiAgICAg
cHJpdmF0ZToKICAgICAgICAgU1ZHQW5nbGVUeXBlIG1fdW5pdFR5cGU7CiAgICAgICAgIGZsb2F0
IG1fdmFsdWU7CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRpby5oCShyZXZpc2lv
biA1MjQ1NSkKKysrIFdlYkNvcmUvc3ZnL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW8uaAkod29ya2lu
ZyBjb3B5KQpAQCAtODEsOCArODEsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAg
U3RyaW5nIHZhbHVlQXNTdHJpbmcoKSBjb25zdDsKIAotICAgICAgICBjb25zdCBRdWFsaWZpZWRO
YW1lJiBhc3NvY2lhdGVkQXR0cmlidXRlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIFNWR05hbWVzOjpw
cmVzZXJ2ZUFzcGVjdFJhdGlvQXR0cjsgfQotCiAgICAgcHJpdmF0ZToKICAgICAgICAgdW5zaWdu
ZWQgc2hvcnQgbV9hbGlnbjsKICAgICAgICAgdW5zaWduZWQgc2hvcnQgbV9tZWV0T3JTbGljZTsK
SW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
c3ZnL1NWR1RyYW5zZm9ybS5oCShyZXZpc2lvbiA1MjQ1NSkKKysrIFdlYkNvcmUvc3ZnL1NWR1Ry
YW5zZm9ybS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw2IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgZmxvYXQgYW5nbGUoKSBjb25zdDsKICAgICAgICAgRmxvYXRQb2ludCBy
b3RhdGlvbkNlbnRlcigpIGNvbnN0OwogCi0vLyAgICAgICAgdm9pZCBzZXRNYXRyaXgoY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKICAgICAgICAgdm9pZCBzZXRNYXRyaXgoVHJhbnNmb3Jt
YXRpb25NYXRyaXgpOwogCiAgICAgICAgIHZvaWQgc2V0VHJhbnNsYXRlKGZsb2F0IHR4LCBmbG9h
dCB0eSk7CkBAIC02OSw5ICs2OCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgCiAg
ICAgICAgIGJvb2wgaXNWYWxpZCgpOwogCi0gICAgICAgIC8vIFRocm91Z2hvdXQgU1ZHIDEuMSAn
U1ZHVHJhbnNmb3JtJyBpcyBvbmx5IHVzZWQgZm9yIHRoZSAndHJhbnNmb3JtJyBhdHRyaWJ1dGUK
LSAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXNzb2NpYXRlZEF0dHJpYnV0ZU5hbWUoKSBj
b25zdCB7IHJldHVybiBTVkdOYW1lczo6dHJhbnNmb3JtQXR0cjsgfQotCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgU1ZHVHJhbnNmb3JtVHlwZSBtX3R5cGU7CiAgICAgICAgIGZsb2F0IG1fYW5nbGU7
CkBAIC05Myw1ICs4OSwzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogI2VuZGlmIC8vIEVOQUJM
RShTVkcpCiAjZW5kaWYKLQotLy8gdmltOnRzPTQ6bm9ldAo=
</data>
<flag name="review"
          id="27372"
          type_id="1"
          status="-"
          setter="sam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47164</attachid>
            <date>2010-01-21 17:31:23 -0800</date>
            <delta_ts>2010-01-21 18:17:06 -0800</delta_ts>
            <desc>Updated patch</desc>
            <filename>KillSVGJSGlobalStuff2.diff</filename>
            <type>text/plain</type>
            <size>58668</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MzY1OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjggQEAKKzIwMTAtMDEtMjEgIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJt
YW5uQHJpbS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgU1ZHIEpTIGJpbmRpbmdzICJjb250ZXh0IiBwb2ludGVyIG5lZWRzIHRvIG1vdmUgb250
byBiaW5kaW5nIGltcGxzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yNzI0MworCisgICAgICAgIFJld3JpdGUgU1ZHIERPTSBKU0MgYmluZGluZ3MgdG8g
dXNlIGEgZ2xvYmFsIERPTU9iamVjdCA8LT4gU1ZHRWxlbWVudCBjb250ZXh0IG1hcCwgc2ltaWxh
ciB0byBWOCdzIGFwcHJvYWNoLgorICAgICAgICBUaGlzIGFsbG93cyB1cyB0byByZW1vdmUgRE9N
T2JqZWN0V2l0aFNWR0NvbnRleHQgYW5kIG1ha2UgYWxsIFNWRyBKUyBvYmplY3RzIHVzZSBET01P
YmplY3RXaXRoR2xvYmFsUG9pbnRlci4KKyAgICAgICAgV2UncmUgZml0dGluZyBhZ2FpbiBpbiBK
U19DRUxMX1NJWkUsIGFuZCB0aGVyZSdzIG5vIG5lZWQgdG8gc3BlY2lhbCBjYXNlIFNWRyBhbnlt
b3JlLgorCisgICAgICAgIE5vdCBhZGRpbmcgYSBuZXcgdGVzdCwgYXMgd2UgaGF2ZSB5ZXQgdG8g
aWRlbnRpZnkgaG93IHRvIHRlc3QgdGhhdCB3ZSdyZSBwYXNzaW5nIGFyb3VuZCBjb3JyZWN0IGds
b2JhbCBvYmplY3RzLgorICAgICAgICBGb3Igbm93IHRoaXMgaXMganVzdCBhIGNvZGUgY2xlYW51
cCB3aGljaCBsZXRzIG1lIGNvbnRpbnVlIG1ha2luZyBwcm9ncmVzcyBpbiB0aGF0IGFyZWEgb2Yg
dGhlIGNvZGUuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkIG5ldyBET01PYmplY3RX
aXRoU1ZHQ29udGV4dC5oIHRvIGJ1aWxkLgorICAgICAgICAqIFdlYkNvcmUuZ3lwaTogRGl0dG8u
CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6IERpdHRvLgorICAgICAg
ICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogRGl0dG8uCisgICAgICAgICog
YmluZGluZ3MvanMvRE9NT2JqZWN0V2l0aFNWR0NvbnRleHQuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2V0RE9N
RXhjZXB0aW9uKTogQWRkIGNvbW1lbnQsIHRoYXQgcGFzc2luZyAwIGNvbnRleHQgaXMgaW50ZW50
aW9uYWwuCisgICAgICAgICogYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmg6CisgICAgICAgIChX
ZWJDb3JlOjpjcmVhdGVET01PYmplY3RXcmFwcGVyKTogQWRkIHRvIEpTU1ZHQ29udGV4dENhY2hl
LCB3aGVuIGNyZWF0aW5nIHdyYXBwZXJzLgorICAgICAgICAoV2ViQ29yZTo6Z2V0RE9NT2JqZWN0
V3JhcHBlcik6IEFkZCBhc3NlcnRpb24gZ3VhcmRpbmcgdGhlIEpTU1ZHQ29udGV4dENhY2hlIGlz
IGluLXN5bmMgd2l0aCB0aGUgcGFzc2VkIGNvbnRleHQuCisgICAgICAgICogYmluZGluZ3MvanMv
SlNTVkdDb250ZXh0Q2FjaGUuaDogQWRkZWQuIE1hcHMgRE9NT2JqZWN0cyB0byBTVkdFbGVtZW50
cyAtIGp1c3QgbGlrZSBWOCBhcHByb2FjaHMgdG8gdGhpcyBwcm9ibGVtLgorICAgICAgICAoV2Vi
Q29yZTo6SlNTVkdDb250ZXh0Q2FjaGU6OndyYXBwZXJNYXApOgorICAgICAgICAoV2ViQ29yZTo6
SlNTVkdDb250ZXh0Q2FjaGU6OmFkZFdyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdD
b250ZXh0Q2FjaGU6OmZvcmdldFdyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdDb250
ZXh0Q2FjaGU6OnByb3BhZ2F0ZVNWR0RPTUNoYW5nZSk6IAorICAgICAgICAoV2ViQ29yZTo6SlNT
VkdDb250ZXh0Q2FjaGU6OnN2Z0NvbnRleHRGb3JET01PYmplY3QpOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTU1ZHTGVuZ3RoQ3VzdG9tLmNwcDogUmV0cmlldmUgY29udGV4dCBmcm9tIGNhY2hl
LCBpbnN0ZWFkIG9mIHRha2luZyBpdCBmcm9tIHRoZSBKUyogY2xhc3MuCisgICAgICAgIChXZWJD
b3JlOjpKU1NWR0xlbmd0aDo6dmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdMZW5ndGg6
OmNvbnZlcnRUb1NwZWNpZmllZFVuaXRzKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1NWR01h
dHJpeEN1c3RvbS5jcHAgRGl0dG8uOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdNYXRyaXg6Om11
bHRpcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHTWF0cml4OjppbnZlcnNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTU1ZHTWF0cml4Ojpyb3RhdGVGcm9tVmVjdG9yKToKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU1NWR1BPRExpc3RDdXN0b20uaDogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpKU1NWR1BPRExpc3RDdXN0b206OmZpbmlzaEdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpK
U1NWR1BPRExpc3RDdXN0b206OmZpbmlzaFNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpKU1NW
R1BPRExpc3RDdXN0b206OmZpbmlzaFNldHRlclJlYWRPbmx5UmVzdWx0KToKKyAgICAgICAgKFdl
YkNvcmU6OkpTU1ZHUE9ETGlzdEN1c3RvbTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNT
VkdQT0RMaXN0Q3VzdG9tOjppbml0aWFsaXplKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1NW
R1BPRFR5cGVXcmFwcGVyLmg6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdEeW5hbWlj
UE9EVHlwZVdyYXBwZXI6OmNvbW1pdENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR1N0
YXRpY1BPRFR5cGVXcmFwcGVyOjpjb21taXRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SlNT
VkdTdGF0aWNQT0RUeXBlV3JhcHBlcldpdGhQT0RUeXBlUGFyZW50Ojpjb21taXRDaGFuZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcldpdGhQYXJlbnQ6OmNv
bW1pdENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR1BPRFR5cGVXcmFwcGVyQ3JlYXRv
ckZvckxpc3Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR1BPRFR5cGVXcmFwcGVy
Q3JlYXRvckZvckxpc3Q6OmNvbW1pdENoYW5nZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNT
VkdQYXRoU2VnQ3VzdG9tLmNwcDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU1NWR1BhdGhTZWdMaXN0Q3VzdG9tLmNwcDogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpKU1NWR1BhdGhTZWdMaXN0OjpjbGVhcik6CisgICAgICAgIChXZWJD
b3JlOjpKU1NWR1BhdGhTZWdMaXN0Ojppbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkpT
U1ZHUGF0aFNlZ0xpc3Q6OmdldEl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdQYXRoU2Vn
TGlzdDo6aW5zZXJ0SXRlbUJlZm9yZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR1BhdGhTZWdM
aXN0OjpyZXBsYWNlSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR1BhdGhTZWdMaXN0Ojpy
ZW1vdmVJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHUGF0aFNlZ0xpc3Q6OmFwcGVuZEl0
ZW0pOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAg
ICAgICAqIHN2Zy9TVkdBbmdsZS5oOiBSZW1vdmUgdW5uZWVkZWQgYXNzb2NpYXRlZEF0dHJpYnV0
ZU5hbWUoKSBtZXRob2QuCisgICAgICAgICogc3ZnL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW8uaDog
RGl0dG8uCisgICAgICAgICogc3ZnL1NWR1RyYW5zZm9ybS5oOiBEaXR0by4KKwogMjAxMC0wMS0y
MSAgRW5yaWNhIENhc3VjY2kgIDxlbnJpY2FAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IERhcmluIEFkbGVyLgpJbmRleDogV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiA1MzY1NikKKysrIFdlYkNvcmUv
R05VbWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTI5MzEsNiArMjkzMSw3IEBAIHdlYmNv
cmVfY3BwZmxhZ3MgKz0gXAogCS1ERU5BQkxFX1NWRz0xCiAKIHdlYmNvcmVfc291cmNlcyArPSBc
CisJV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR0NvbnRleHRDYWNoZS5oIFwKIAlXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTU1ZHRWxlbWVudEluc3RhbmNlQ3VzdG9tLmNwcCBcCiAJV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1NWR0xlbmd0aEN1c3RvbS5jcHAgXAogCVdlYkNvcmUvYmluZGluZ3MvanMvSlNT
VkdNYXRyaXhDdXN0b20uY3BwIFwKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA1MzY1NikKKysrIFdlYkNvcmUv
V2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC01ODUsNiArNTg1LDcgQEAKICAgICAgICAg
ICAgICdiaW5kaW5ncy9qcy9KU1N0b3JhZ2VDdXN0b20uaCcsCiAgICAgICAgICAgICAnYmluZGlu
Z3MvanMvSlNTdHlsZVNoZWV0Q3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvanMv
SlNTdHlsZVNoZWV0TGlzdEN1c3RvbS5jcHAnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL2pzL0pT
U1ZHQ29udGV4dENhY2hlLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL2pzL0pTU1ZHRWxlbWVu
dEluc3RhbmNlQ3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvanMvSlNTVkdMZW5n
dGhDdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy9qcy9KU1NWR01hdHJpeEN1c3Rv
bS5jcHAnLApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lv
biA1MzY1NikKKysrIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtp
bmcgY29weSkKQEAgLTM4OTYwLDYgKzM4OTYwLDEwIEBACiAJCQkJCTwvRmlsZUNvbmZpZ3VyYXRp
b24+DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cYmlu
ZGluZ3NcanNcSlNTVkdDb250ZXh0Q2FjaGUuaCINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJ
CQk8RmlsZQ0KIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxiaW5kaW5nc1xqc1xKU1NWR0VsZW1lbnRJ
bnN0YW5jZUN1c3RvbS5jcHAiDQogCQkJCQk+DQogCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCklu
ZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
NTM2NTYpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtNjIsNiArNjIsNyBAQAogCQkwODIwM0FBMDBFRDhDMzUzMDBCOEI2MUEg
LyogV01MQWNjZXNzRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMDgyMDNBOUUwRUQ4QzM1MzAwQjhCNjFBIC8qIFdNTEFjY2Vzc0VsZW1lbnQu
aCAqLzsgfTsKIAkJMDgyMzQxQzUwRkNGM0E5NTAwRDc1QkQ2IC8qIFdNTFNlbGVjdEVsZW1lbnQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgyMzQx
QzMwRkNGM0E5NDAwRDc1QkQ2IC8qIFdNTFNlbGVjdEVsZW1lbnQuY3BwICovOyB9OwogCQkwODIz
NDFDNjBGQ0YzQTk1MDBENzVCRDYgLyogV01MU2VsZWN0RWxlbWVudC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgyMzQxQzQwRkNGM0E5NDAwRDc1QkQ2
IC8qIFdNTFNlbGVjdEVsZW1lbnQuaCAqLzsgfTsKKwkJMDgyRkNBQzQxMTA5MjdDRTAwQ0M0ODIx
IC8qIEpTU1ZHQ29udGV4dENhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwODJGQ0FDMzExMDkyN0NFMDBDQzQ4MjEgLyogSlNTVkdDb250ZXh0Q2Fj
aGUuaCAqLzsgfTsKIAkJMDgzODVGRjYxMEYwMTg2MDAwQkZFMDdCIC8qIFNWR01hcmtlckRhdGEu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4Mzg1RkY1
MTBGMDE4NjAwMEJGRTA3QiAvKiBTVkdNYXJrZXJEYXRhLmggKi87IH07CiAJCTA4Mzk0NzZDMEVD
RTRCRDYwMDAyNzM1MCAvKiBXTUxFbGVtZW50RmFjdG9yeS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwOEZCODRCMDBFQ0UzNzMzMDBEQzA2NEUgLyog
V01MRWxlbWVudEZhY3RvcnkuY3BwICovOyB9OwogCQkwODM5NDc2RDBFQ0U0QkQ2MDAwMjczNTAg
LyogV01MRWxlbWVudEZhY3RvcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDA4RkI4NEIxMEVDRTM3MzMwMERDMDY0RSAvKiBXTUxFbGVtZW50RmFjdG9y
eS5oICovOyB9OwpAQCAtNTMyNiw2ICs1MzI3LDcgQEAKIAkJMDgyMDNBOUUwRUQ4QzM1MzAwQjhC
NjFBIC8qIFdNTEFjY2Vzc0VsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV01MQWNjZXNzRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODIz
NDFDMzBGQ0YzQTk0MDBENzVCRDYgLyogV01MU2VsZWN0RWxlbWVudC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXTUxTZWxlY3RFbGVtZW50LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDgyMzQxQzQwRkNGM0E5NDAwRDc1QkQ2IC8qIFdNTFNlbGVj
dEVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV01MU2VsZWN0RWxl
bWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwODJGQ0FDMzExMDkyN0NFMDBD
QzQ4MjEgLyogSlNTVkdDb250ZXh0Q2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSlNTVkdDb250ZXh0Q2FjaGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MDgzODVGRjUxMEYwMTg2MDAwQkZFMDdCIC8qIFNWR01hcmtlckRhdGEuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHTWFya2VyRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwODNEQUVBMjBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVyVGV4dENvbnRyb2xN
dWx0aUxpbmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVy
VGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
ODNEQUVBMzBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxp
bmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0NzYyLDYgKzE0NzY0LDcgQEAK
IAkJCQk1MUQwQzUxNTBEQUE5MEI3MDAzQjM4MzEgLyogSlNTdG9yYWdlQ3VzdG9tLmNwcCAqLywK
IAkJCQlCQzk4QTI3QzBDMEM5OTUwMDA0QkVCRjcgLyogSlNTdHlsZVNoZWV0Q3VzdG9tLmNwcCAq
LywKIAkJCQlBODRFQkQ3NzBDQjhDODkyMDAwNzk2MDkgLyogSlNTdHlsZVNoZWV0TGlzdEN1c3Rv
bS5jcHAgKi8sCisJCQkJMDgyRkNBQzMxMTA5MjdDRTAwQ0M0ODIxIC8qIEpTU1ZHQ29udGV4dENh
Y2hlLmggKi8sCiAJCQkJMDhBNDhBNkQwRTg2Q0Y2RDAwRTIyNUREIC8qIEpTU1ZHRWxlbWVudElu
c3RhbmNlQ3VzdG9tLmNwcCAqLywKIAkJCQkwOEU0RkU0NTBFMkJENDE0MDBGNENBRTAgLyogSlNT
VkdMZW5ndGhDdXN0b20uY3BwICovLAogCQkJCUIyNURGQUFFMEIyRTI5MjkwMDBFNjUxMCAvKiBK
U1NWR01hdHJpeEN1c3RvbS5jcHAgKi8sCkBAIC0xODQ0Nyw2ICsxODQ1MCw3IEBACiAJCQkJMkUy
RDk5RUExMEUyQkMzODAwNDk2MzM3IC8qIERPTUJsb2JJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNTlCNTk3NzUxMTA4NjU3OTAwNzE1OUU4IC8qIEJyaWRnZUpTQy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJOTNDNEY2RUIxMTA4RjlBNTAwOTlEMERCIC8qIEFjY2Vzc2liaWxpdHlTY3JvbGxi
YXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTA4MkZDQUM0MTEwOTI3Q0UwMENDNDgyMSAvKiBKU1NW
R0NvbnRleHRDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxv
eW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pz
L0RPTU9iamVjdFdpdGhTVkdDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5n
cy9qcy9ET01PYmplY3RXaXRoU1ZHQ29udGV4dC5oCShyZXZpc2lvbiA1MzY1NikKKysrIFdlYkNv
cmUvYmluZGluZ3MvanMvRE9NT2JqZWN0V2l0aFNWR0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSwgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTCi0gKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgotICogSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUCi0gKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVm
IERPTU9iamVjdFdpdGhTVkdDb250ZXh0X2gKLSNkZWZpbmUgRE9NT2JqZWN0V2l0aFNWR0NvbnRl
eHRfaAotCi0jaWYgRU5BQkxFKFNWRykKLQotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgotI2lu
Y2x1ZGUgIlNWR0VsZW1lbnQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0gICAgLy8gRklY
TUU6IFRoaXMgY2xhc3MgKGFuZCBmaWxlKSBzaG91bGQgYmUgcmVtb3ZlZCBvbmNlIGFsbCBTVkcg
YmluZGluZ3MKLSAgICAvLyBoYXZlIG1vdmVkIGNvbnRleHQoKSBvbnRvIHRoZSB2YXJpb3VzIGlt
cGwoKSBwb2ludGVycy4KLSAgICBjbGFzcyBET01PYmplY3RXaXRoU1ZHQ29udGV4dCA6IHB1Ymxp
YyBET01PYmplY3QgewotICAgIHB1YmxpYzoKLSAgICAgICAgU1ZHRWxlbWVudCogY29udGV4dCgp
IGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsgfQotCi0gICAgcHJvdGVjdGVkOgotICAg
ICAgICBET01PYmplY3RXaXRoU1ZHQ29udGV4dChOb25OdWxsUGFzc1JlZlB0cjxKU0M6OlN0cnVj
dHVyZT4gc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCosIFNWR0VsZW1lbnQqIGNvbnRleHQp
Ci0gICAgICAgICAgICA6IERPTU9iamVjdChzdHJ1Y3R1cmUpCi0gICAgICAgICAgICAsIG1fY29u
dGV4dChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBObyBzcGFjZSB0byBzdG9y
ZSB0aGUgSlNET01HbG9iYWxPYmplY3Qgdy9vIGhpdHRpbmcgdGhlIENFTExfU0laRSBsaW1pdC4K
LSAgICAgICAgfQotCi0gICAgcHJvdGVjdGVkOiAvLyBGSVhNRTogTWFueSBjdXN0b20gYmluZGlu
Z3MgdXNlIG1fY29udGV4dCBkaXJlY3RseS4gIE1ha2luZyB0aGlzIHByb3RlY3RlZCB0byB0ZW1w
b3JhcmlsaXkgcmVkdWNlIGNvZGUgY2h1cm4uCi0gICAgICAgIFJlZlB0cjxTVkdFbGVtZW50PiBt
X2NvbnRleHQ7Ci0gICAgfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8g
RU5BQkxFKFNWRykKLSNlbmRpZiAvLyBET01PYmplY3RXaXRoU1ZHQ29udGV4dF9oCkluZGV4OiBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCShyZXZpc2lvbiA1MzY1NikKKysrIFdlYkNv
cmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMwLDcg
KzczMCw3IEBAIHZvaWQgc2V0RE9NRXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgRXgKICAgICAg
ICAgICAgIGJyZWFrOwogI2lmIEVOQUJMRShTVkcpCiAgICAgICAgIGNhc2UgU1ZHRXhjZXB0aW9u
VHlwZToKLSAgICAgICAgICAgIGVycm9yT2JqZWN0ID0gdG9KUyhleGVjLCBnbG9iYWxPYmplY3Qs
IFNWR0V4Y2VwdGlvbjo6Y3JlYXRlKGRlc2NyaXB0aW9uKS5nZXQoKSwgMCk7CisgICAgICAgICAg
ICBlcnJvck9iamVjdCA9IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBTVkdFeGNlcHRpb246OmNy
ZWF0ZShkZXNjcmlwdGlvbikuZ2V0KCksIDAgLyogbm8gY29udGV4dCBvbiBwdXJwb3NlICovKTsK
ICAgICAgICAgICAgIGJyZWFrOwogI2VuZGlmCiAjaWYgRU5BQkxFKFhQQVRIKQpJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCShyZXZpc2lvbiA1MzY1NikKKysrIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01CaW5kaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIzLDcgQEAK
ICNkZWZpbmUgSlNET01CaW5kaW5nX2gKIAogI2luY2x1ZGUgIkpTRE9NR2xvYmFsT2JqZWN0Lmgi
CisjaW5jbHVkZSAiSlNTVkdDb250ZXh0Q2FjaGUuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgog
I2luY2x1ZGUgPHJ1bnRpbWUvQ29tcGxldGlvbi5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvTG9va3Vw
Lmg+CkBAIC0zMDEsMTkgKzMwMiwyMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgI2RlZmlu
ZSBDUkVBVEVfU1ZHX09CSkVDVF9XUkFQUEVSKGV4ZWMsIGdsb2JhbE9iamVjdCwgY2xhc3NOYW1l
LCBvYmplY3QsIGNvbnRleHQpIGNyZWF0ZURPTU9iamVjdFdyYXBwZXI8SlMjI2NsYXNzTmFtZT4o
ZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxjbGFzc05hbWUqPihvYmplY3QpLCBjb250
ZXh0KQogICAgIHRlbXBsYXRlPGNsYXNzIFdyYXBwZXJDbGFzcywgY2xhc3MgRE9NQ2xhc3M+IGlu
bGluZSBET01PYmplY3QqIGNyZWF0ZURPTU9iamVjdFdyYXBwZXIoSlNDOjpFeGVjU3RhdGUqIGV4
ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIERPTUNsYXNzKiBvYmplY3QsIFNW
R0VsZW1lbnQqIGNvbnRleHQpCiAgICAgewotICAgICAgICBBU1NFUlQob2JqZWN0KTsKLSAgICAg
ICAgQVNTRVJUKCFnZXRDYWNoZWRET01PYmplY3RXcmFwcGVyKGV4ZWMsIG9iamVjdCkpOwotICAg
ICAgICBXcmFwcGVyQ2xhc3MqIHdyYXBwZXIgPSBuZXcgKGV4ZWMpIFdyYXBwZXJDbGFzcyhnZXRE
T01TdHJ1Y3R1cmU8V3JhcHBlckNsYXNzPihleGVjLCBnbG9iYWxPYmplY3QpLCBnbG9iYWxPYmpl
Y3QsIG9iamVjdCwgY29udGV4dCk7Ci0gICAgICAgIGNhY2hlRE9NT2JqZWN0V3JhcHBlcihleGVj
LCBvYmplY3QsIHdyYXBwZXIpOworICAgICAgICBET01PYmplY3QqIHdyYXBwZXIgPSBjcmVhdGVE
T01PYmplY3RXcmFwcGVyPFdyYXBwZXJDbGFzcywgRE9NQ2xhc3M+KGV4ZWMsIGdsb2JhbE9iamVj
dCwgb2JqZWN0KTsKKyAgICAgICAgQVNTRVJUKHdyYXBwZXIpOworICAgICAgICBpZiAoY29udGV4
dCkKKyAgICAgICAgICAgIEpTU1ZHQ29udGV4dENhY2hlOjphZGRXcmFwcGVyKHdyYXBwZXIsIGNv
bnRleHQpOwogICAgICAgICByZXR1cm4gd3JhcHBlcjsKICAgICB9CiAgICAgdGVtcGxhdGU8Y2xh
c3MgV3JhcHBlckNsYXNzLCBjbGFzcyBET01DbGFzcz4gaW5saW5lIEpTQzo6SlNWYWx1ZSBnZXRE
T01PYmplY3RXcmFwcGVyKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBET01DbGFzcyogb2JqZWN0LCBTVkdFbGVtZW50KiBjb250ZXh0KQogICAg
IHsKICAgICAgICAgaWYgKCFvYmplY3QpCiAgICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwo
KTsKLSAgICAgICAgaWYgKERPTU9iamVjdCogd3JhcHBlciA9IGdldENhY2hlZERPTU9iamVjdFdy
YXBwZXIoZXhlYywgb2JqZWN0KSkKKyAgICAgICAgaWYgKERPTU9iamVjdCogd3JhcHBlciA9IGdl
dENhY2hlZERPTU9iamVjdFdyYXBwZXIoZXhlYywgb2JqZWN0KSkgeworICAgICAgICAgICAgQVNT
RVJUKEpTU1ZHQ29udGV4dENhY2hlOjpzdmdDb250ZXh0Rm9yRE9NT2JqZWN0KHdyYXBwZXIpID09
IGNvbnRleHQpOwogICAgICAgICAgICAgcmV0dXJuIHdyYXBwZXI7Ci0gICAgICAgIHJldHVybiBj
cmVhdGVET01PYmplY3RXcmFwcGVyPFdyYXBwZXJDbGFzcz4oZXhlYywgZ2xvYmFsT2JqZWN0LCBv
YmplY3QsIGNvbnRleHQpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBjcmVhdGVET01PYmpl
Y3RXcmFwcGVyPFdyYXBwZXJDbGFzcywgRE9NQ2xhc3M+KGV4ZWMsIGdsb2JhbE9iamVjdCwgb2Jq
ZWN0LCBjb250ZXh0KTsKICAgICB9CiAjZW5kaWYKIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1NWR0NvbnRleHRDYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMv
SlNTVkdDb250ZXh0Q2FjaGUuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMv
SlNTVkdDb250ZXh0Q2FjaGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5NyBAQAorLyoKKyAg
ICBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMDktMjAxMC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIEpTU1ZHQ29udGV4dENhY2hlX2gKKyNkZWZp
bmUgSlNTVkdDb250ZXh0Q2FjaGVfaAorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJTVkdF
bGVtZW50LmgiCisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIERPTU9iamVjdDsKKworY2xhc3MgSlNTVkdDb250ZXh0Q2FjaGUgOiBw
dWJsaWMgTm9uY29weWFibGUgeworcHVibGljOgorICAgIHR5cGVkZWYgSGFzaE1hcDxET01PYmpl
Y3QqLCBTVkdFbGVtZW50Kj4gV3JhcHBlck1hcDsKKworICAgIHN0YXRpYyBXcmFwcGVyTWFwJiB3
cmFwcGVyTWFwKCkKKyAgICB7CisgICAgICAgIERFRklORV9TVEFUSUNfTE9DQUwoV3JhcHBlck1h
cCwgc193cmFwcGVyTWFwLCAoKSk7CisgICAgICAgIHJldHVybiBzX3dyYXBwZXJNYXA7CisgICAg
fQorCisgICAgc3RhdGljIHZvaWQgYWRkV3JhcHBlcihET01PYmplY3QqIHdyYXBwZXIsIFNWR0Vs
ZW1lbnQqIGNvbnRleHQpCisgICAgeworICAgICAgICBBU1NFUlQod3JhcHBlcik7CisgICAgICAg
IEFTU0VSVChjb250ZXh0KTsKKworICAgICAgICBwYWlyPFdyYXBwZXJNYXA6Oml0ZXJhdG9yLCBi
b29sPiByZXN1bHQgPSB3cmFwcGVyTWFwKCkuYWRkKHdyYXBwZXIsIGNvbnRleHQpOworICAgICAg
ICBpZiAocmVzdWx0LnNlY29uZCkgeworICAgICAgICAgICAgV3JhcHBlck1hcDo6aXRlcmF0b3Im
IGl0ID0gcmVzdWx0LmZpcnN0OworICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChpdCwgaXQtPnNl
Y29uZCA9PSBjb250ZXh0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGZv
cmdldFdyYXBwZXIoRE9NT2JqZWN0KiB3cmFwcGVyKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHdy
YXBwZXIpOworCisgICAgICAgIFdyYXBwZXJNYXAmIG1hcCA9IHdyYXBwZXJNYXAoKTsKKyAgICAg
ICAgV3JhcHBlck1hcDo6aXRlcmF0b3IgaXQgPSBtYXAuZmluZCh3cmFwcGVyKTsKKyAgICAgICAg
aWYgKGl0ID09IG1hcC5lbmQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBtYXAu
cmVtb3ZlKGl0KTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBwcm9wYWdhdGVTVkdET01DaGFu
Z2UoRE9NT2JqZWN0KiB3cmFwcGVyLCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1l
KQorICAgIHsKKyAgICAgICAgV3JhcHBlck1hcCYgbWFwID0gd3JhcHBlck1hcCgpOworICAgICAg
ICBXcmFwcGVyTWFwOjppdGVyYXRvciBpdCA9IG1hcC5maW5kKHdyYXBwZXIpOworICAgICAgICBp
ZiAoaXQgPT0gbWFwLmVuZCgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFNWR0Vs
ZW1lbnQqIGNvbnRleHQgPSBpdC0+c2Vjb25kOworICAgICAgICBBU1NFUlQoY29udGV4dCk7CisK
KyAgICAgICAgY29udGV4dC0+c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyaWJ1dGVOYW1lKTsKKyAg
ICB9CisKKyAgICBzdGF0aWMgU1ZHRWxlbWVudCogc3ZnQ29udGV4dEZvckRPTU9iamVjdChET01P
YmplY3QqIHdyYXBwZXIpCisgICAgeworICAgICAgICBBU1NFUlQod3JhcHBlcik7CisKKyAgICAg
ICAgV3JhcHBlck1hcCYgbWFwID0gd3JhcHBlck1hcCgpOworICAgICAgICBXcmFwcGVyTWFwOjpp
dGVyYXRvciBpdCA9IG1hcC5maW5kKHdyYXBwZXIpOworICAgICAgICBpZiAoaXQgPT0gbWFwLmVu
ZCgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgU1ZHRWxlbWVudCogY29udGV4
dCA9IGl0LT5zZWNvbmQ7CisgICAgICAgIEFTU0VSVChjb250ZXh0KTsKKyAgICAgICAgcmV0dXJu
IGNvbnRleHQ7CisgICAgfQorCit9OworCit9CisKKyNlbmRpZgorI2VuZGlmCkluZGV4OiBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTU1ZHTGVuZ3RoQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTU1ZHTGVuZ3RoQ3VzdG9tLmNwcAkocmV2aXNpb24gNTM2NTYpCisr
KyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHTGVuZ3RoQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjgsMTggKzI4LDIyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogSlNWYWx1ZSBKU1NW
R0xlbmd0aDo6dmFsdWUoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewotICAgIFNWR0xlbmd0aCBp
bXAoKmltcGwoKSk7Ci0gICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGltcC52YWx1ZShjb250ZXh0
KCkpKTsKKyAgICBKU1NWR1BPRFR5cGVXcmFwcGVyPFNWR0xlbmd0aD4qIGltcCA9IGltcGwoKTsK
KyAgICBTVkdFbGVtZW50KiBjb250ZXh0ID0gSlNTVkdDb250ZXh0Q2FjaGU6OnN2Z0NvbnRleHRG
b3JET01PYmplY3QoY29uc3RfY2FzdDxKU1NWR0xlbmd0aCo+KHRoaXMpKTsKKworICAgIFNWR0xl
bmd0aCBwb2RJbXAoKmltcCk7CisgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHBvZEltcC52YWx1
ZShjb250ZXh0KSk7CiB9CiAKIEpTVmFsdWUgSlNTVkdMZW5ndGg6OmNvbnZlcnRUb1NwZWNpZmll
ZFVuaXRzKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKLSAgICBKU1NW
R1BPRFR5cGVXcmFwcGVyPFNWR0xlbmd0aD4qIHdyYXBwZXIgPSBpbXBsKCk7CisgICAgSlNTVkdQ
T0RUeXBlV3JhcHBlcjxTVkdMZW5ndGg+KiBpbXAgPSBpbXBsKCk7CisgICAgU1ZHRWxlbWVudCog
Y29udGV4dCA9IEpTU1ZHQ29udGV4dENhY2hlOjpzdmdDb250ZXh0Rm9yRE9NT2JqZWN0KHRoaXMp
OwogCi0gICAgU1ZHTGVuZ3RoIGltcCgqd3JhcHBlcik7Ci0gICAgaW1wLmNvbnZlcnRUb1NwZWNp
ZmllZFVuaXRzKGFyZ3MuYXQoMCkudG9JbnQzMihleGVjKSwgY29udGV4dCgpKTsKKyAgICBTVkdM
ZW5ndGggcG9kSW1wKCppbXApOworICAgIHBvZEltcC5jb252ZXJ0VG9TcGVjaWZpZWRVbml0cyhh
cmdzLmF0KDApLnRvSW50MzIoZXhlYyksIGNvbnRleHQpOwogCi0gICAgd3JhcHBlci0+Y29tbWl0
Q2hhbmdlKGltcCwgY29udGV4dCgpKTsKKyAgICBpbXAtPmNvbW1pdENoYW5nZShwb2RJbXAsIHRo
aXMpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCkluZGV4OiBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTU1ZHTWF0cml4Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTU1ZHTWF0cml4Q3VzdG9tLmNwcAkocmV2aXNpb24gNTM2NTYpCisrKyBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTU1ZHTWF0cml4Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQs
MTUgKzQ0LDE2IEBAIEpTVmFsdWUgSlNTVkdNYXRyaXg6Om11bHRpcGx5KEV4ZWNTdGF0ZSoKICAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtMSgqaW1wbCgpKTsKICAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBtMigqKG1hdHJpeE9iai0+aW1wbCgpKSk7CiAKLSAgICBKU0M6OkpTVmFsdWUgcmVzdWx0
ID0gdG9KUyhleGVjLCBkZXByZWNhdGVkR2xvYmFsT2JqZWN0Rm9yUHJvdG90eXBlKGV4ZWMpLCBK
U1NWR1N0YXRpY1BPRFR5cGVXcmFwcGVyPFRyYW5zZm9ybWF0aW9uTWF0cml4Pjo6Y3JlYXRlKG0x
Lm11bHRMZWZ0KG0yKSkuZ2V0KCksIG1fY29udGV4dC5nZXQoKSk7Ci0KLSAgICByZXR1cm4gcmVz
dWx0OworICAgIFNWR0VsZW1lbnQqIGNvbnRleHQgPSBKU1NWR0NvbnRleHRDYWNoZTo6c3ZnQ29u
dGV4dEZvckRPTU9iamVjdCh0aGlzKTsKKyAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmpl
Y3QoKSwgSlNTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcjxUcmFuc2Zvcm1hdGlvbk1hdHJpeD46OmNy
ZWF0ZShtMS5tdWx0TGVmdChtMikpLmdldCgpLCBjb250ZXh0KTsKIH0KIAogSlNWYWx1ZSBKU1NW
R01hdHJpeDo6aW52ZXJzZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmKQogewogICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4IGltcCgqaW1wbCgpKTsKLSAgICBKU0M6OkpTVmFsdWUgcmVz
dWx0ID0gdG9KUyhleGVjLCBkZXByZWNhdGVkR2xvYmFsT2JqZWN0Rm9yUHJvdG90eXBlKGV4ZWMp
LCBKU1NWR1N0YXRpY1BPRFR5cGVXcmFwcGVyPFRyYW5zZm9ybWF0aW9uTWF0cml4Pjo6Y3JlYXRl
KGltcC5pbnZlcnNlKCkpLmdldCgpLCBtX2NvbnRleHQuZ2V0KCkpOworCisgICAgU1ZHRWxlbWVu
dCogY29udGV4dCA9IEpTU1ZHQ29udGV4dENhY2hlOjpzdmdDb250ZXh0Rm9yRE9NT2JqZWN0KHRo
aXMpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgSlNT
VkdTdGF0aWNQT0RUeXBlV3JhcHBlcjxUcmFuc2Zvcm1hdGlvbk1hdHJpeD46OmNyZWF0ZShpbXAu
aW52ZXJzZSgpKS5nZXQoKSwgY29udGV4dCk7CiAKICAgICBpZiAoIWltcC5pc0ludmVydGlibGUo
KSkKICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIFNWR0V4Y2VwdGlvbjo6U1ZHX01BVFJJ
WF9OT1RfSU5WRVJUQUJMRSk7CkBAIC02Nyw3ICs2OCw4IEBAIEpTVmFsdWUgSlNTVkdNYXRyaXg6
OnJvdGF0ZUZyb21WZWN0b3IoRXgKICAgICBmbG9hdCB4ID0gYXJncy5hdCgwKS50b0Zsb2F0KGV4
ZWMpOwogICAgIGZsb2F0IHkgPSBhcmdzLmF0KDEpLnRvRmxvYXQoZXhlYyk7CiAKLSAgICBKU0M6
OkpTVmFsdWUgcmVzdWx0ID0gdG9KUyhleGVjLCBkZXByZWNhdGVkR2xvYmFsT2JqZWN0Rm9yUHJv
dG90eXBlKGV4ZWMpLCBKU1NWR1N0YXRpY1BPRFR5cGVXcmFwcGVyPFRyYW5zZm9ybWF0aW9uTWF0
cml4Pjo6Y3JlYXRlKGltcC5yb3RhdGVGcm9tVmVjdG9yKHgsIHkpKS5nZXQoKSwgbV9jb250ZXh0
LmdldCgpKTsKKyAgICBTVkdFbGVtZW50KiBjb250ZXh0ID0gSlNTVkdDb250ZXh0Q2FjaGU6OnN2
Z0NvbnRleHRGb3JET01PYmplY3QodGhpcyk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKGV4
ZWMsIGdsb2JhbE9iamVjdCgpLCBKU1NWR1N0YXRpY1BPRFR5cGVXcmFwcGVyPFRyYW5zZm9ybWF0
aW9uTWF0cml4Pjo6Y3JlYXRlKGltcC5yb3RhdGVGcm9tVmVjdG9yKHgsIHkpKS5nZXQoKSwgY29u
dGV4dCk7CiAKICAgICBpZiAoeCA9PSAwLjAgfHwgeSA9PSAwLjApCiAgICAgICAgIHNldERPTUV4
Y2VwdGlvbihleGVjLCBTVkdFeGNlcHRpb246OlNWR19JTlZBTElEX1ZBTFVFX0VSUik7CkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHUE9ETGlzdEN1c3RvbS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdQT0RMaXN0Q3VzdG9tLmgJKHJldmlzaW9uIDUzNjU2
KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR1BPRExpc3RDdXN0b20uaAkod29ya2luZyBj
b3B5KQpAQCAtMjIsNiArMjIsNyBAQAogI2lmbmRlZiBKU1NWR1BPRExpc3RDdXN0b21faAogI2Rl
ZmluZSBKU1NWR1BPRExpc3RDdXN0b21faAogCisjaW5jbHVkZSAiSlNTVkdDb250ZXh0Q2FjaGUu
aCIKICNpbmNsdWRlICJKU1NWR1BPRFR5cGVXcmFwcGVyLmgiCiAjaW5jbHVkZSAiU1ZHTGlzdC5o
IgogCkBAIC0zNywyMyArMzgsMjQgQEAgc3RydWN0IEpTU1ZHUE9ETGlzdFRyYWl0cyB7IAogICAg
IHR5cGVkZWYgUE9EVHlwZSAoKkNvbnZlcnNpb25DYWxsYmFjaykoSlNDOjpKU1ZhbHVlKTsKIH07
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFBPRFR5cGU+Ci1zdGF0aWMgSlNDOjpKU1ZhbHVlIGZpbmlz
aEdldHRlcihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgRXhjZXB0aW9uQ29kZSYgZWMsIFNWR0VsZW1l
bnQqIGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBK
U1NWR1BPRExpc3RUcmFpdHM8UE9EVHlwZT46OlBPRExpc3QqIGxpc3QsCit0ZW1wbGF0ZTx0eXBl
bmFtZSBKU1BPRExpc3RUeXBlLCB0eXBlbmFtZSBQT0RUeXBlPgorc3RhdGljIEpTQzo6SlNWYWx1
ZSBmaW5pc2hHZXR0ZXIoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEV4Y2VwdGlvbkNvZGUmIGVjLCBK
U1BPRExpc3RUeXBlKiB3cmFwcGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
UGFzc1JlZlB0cjx0eXBlbmFtZSBKU1NWR1BPRExpc3RUcmFpdHM8UE9EVHlwZT46OlBPRExpc3RJ
dGVtPiBpdGVtKQogewogICAgIGlmIChlYykgewogICAgICAgICBzZXRET01FeGNlcHRpb24oZXhl
YywgZWMpOwogICAgICAgICByZXR1cm4gSlNDOjpqc1VuZGVmaW5lZCgpOwogICAgIH0KKyAgICAK
KyAgICB0eXBlbmFtZSBKU1NWR1BPRExpc3RUcmFpdHM8UE9EVHlwZT46OlBPRExpc3QqIGxpc3RJ
bXAgPSB3cmFwcGVyLT5pbXBsKCk7CiAKLSAgICByZXR1cm4gdG9KUyhleGVjLCBkZXByZWNhdGVk
R2xvYmFsT2JqZWN0Rm9yUHJvdG90eXBlKGV4ZWMpLAotICAgICAgICAgICAgICAgIEpTU1ZHUE9E
VHlwZVdyYXBwZXJDcmVhdG9yRm9yTGlzdDxQT0RUeXBlPjo6Y3JlYXRlKGl0ZW0uZ2V0KCksIGxp
c3QtPmFzc29jaWF0ZWRBdHRyaWJ1dGVOYW1lKCkpLmdldCgpLCBjb250ZXh0KTsKKyAgICBTVkdF
bGVtZW50KiBjb250ZXh0ID0gSlNTVkdDb250ZXh0Q2FjaGU6OnN2Z0NvbnRleHRGb3JET01PYmpl
Y3Qod3JhcHBlcik7CisgICAgcmV0dXJuIHRvSlMoZXhlYywgd3JhcHBlci0+Z2xvYmFsT2JqZWN0
KCksCisgICAgICAgICAgICAgICAgSlNTVkdQT0RUeXBlV3JhcHBlckNyZWF0b3JGb3JMaXN0PFBP
RFR5cGU+OjpjcmVhdGUoaXRlbS5nZXQoKSwgbGlzdEltcC0+YXNzb2NpYXRlZEF0dHJpYnV0ZU5h
bWUoKSkuZ2V0KCksIGNvbnRleHQpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBQT0RUeXBlPgot
c3RhdGljIEpTQzo6SlNWYWx1ZSBmaW5pc2hTZXR0ZXIoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEV4
Y2VwdGlvbkNvZGUmIGVjLCBTVkdFbGVtZW50KiBjb250ZXh0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdHlwZW5hbWUgSlNTVkdQT0RMaXN0VHJhaXRzPFBPRFR5cGU+OjpQT0RM
aXN0KiBsaXN0LAordGVtcGxhdGU8dHlwZW5hbWUgSlNQT0RMaXN0VHlwZSwgdHlwZW5hbWUgUE9E
VHlwZT4KK3N0YXRpYyBKU0M6OkpTVmFsdWUgZmluaXNoU2V0dGVyKEpTQzo6RXhlY1N0YXRlKiBl
eGVjLCBFeGNlcHRpb25Db2RlJiBlYywgSlNQT0RMaXN0VHlwZSogd3JhcHBlciwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
UGFzc1JlZlB0cjx0eXBlbmFtZSBKU1NWR1BPRExpc3RUcmFpdHM8UE9EVHlwZT46OlBPRExpc3RJ
dGVtPiBpdGVtKQogewogICAgIGlmIChlYykgewpAQCAtNjEsMjQgKzYzLDI5IEBAIHN0YXRpYyBK
U0M6OkpTVmFsdWUgZmluaXNoU2V0dGVyKEpTQzo6RXgKICAgICAgICAgcmV0dXJuIEpTQzo6anNV
bmRlZmluZWQoKTsKICAgICB9CiAKLSAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVO
YW1lID0gbGlzdC0+YXNzb2NpYXRlZEF0dHJpYnV0ZU5hbWUoKTsKLSAgICBjb250ZXh0LT5zdmdB
dHRyaWJ1dGVDaGFuZ2VkKGF0dHJpYnV0ZU5hbWUpOworICAgIHR5cGVuYW1lIEpTU1ZHUE9ETGlz
dFRyYWl0czxQT0RUeXBlPjo6UE9ETGlzdCogbGlzdEltcCA9IHdyYXBwZXItPmltcGwoKTsKKwor
ICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUgPSBsaXN0SW1wLT5hc3NvY2lh
dGVkQXR0cmlidXRlTmFtZSgpOworICAgIEpTU1ZHQ29udGV4dENhY2hlOjpwcm9wYWdhdGVTVkdE
T01DaGFuZ2Uod3JhcHBlciwgYXR0cmlidXRlTmFtZSk7CiAKLSAgICByZXR1cm4gdG9KUyhleGVj
LCBkZXByZWNhdGVkR2xvYmFsT2JqZWN0Rm9yUHJvdG90eXBlKGV4ZWMpLAorICAgIFNWR0VsZW1l
bnQqIGNvbnRleHQgPSBKU1NWR0NvbnRleHRDYWNoZTo6c3ZnQ29udGV4dEZvckRPTU9iamVjdCh3
cmFwcGVyKTsKKyAgICByZXR1cm4gdG9KUyhleGVjLCB3cmFwcGVyLT5nbG9iYWxPYmplY3QoKSwK
ICAgICAgICAgICAgICAgICBKU1NWR1BPRFR5cGVXcmFwcGVyQ3JlYXRvckZvckxpc3Q8UE9EVHlw
ZT46OmNyZWF0ZShpdGVtLmdldCgpLCBhdHRyaWJ1dGVOYW1lKS5nZXQoKSwgY29udGV4dCk7CiB9
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFBPRFR5cGU+Ci1zdGF0aWMgSlNDOjpKU1ZhbHVlIGZpbmlz
aFNldHRlclJlYWRPbmx5UmVzdWx0KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBFeGNlcHRpb25Db2Rl
JiBlYywgU1ZHRWxlbWVudCogY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgSlNTVkdQT0RMaXN0VHJhaXRzPFBPRFR5cGU+OjpQ
T0RMaXN0KiBsaXN0LAordGVtcGxhdGU8dHlwZW5hbWUgSlNQT0RMaXN0VHlwZSwgdHlwZW5hbWUg
UE9EVHlwZT4KK3N0YXRpYyBKU0M6OkpTVmFsdWUgZmluaXNoU2V0dGVyUmVhZE9ubHlSZXN1bHQo
SlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEV4Y2VwdGlvbkNvZGUmIGVjLCBKU1BPRExpc3RUeXBlKiB3
cmFwcGVyLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8dHlwZW5hbWUgSlNTVkdQ
T0RMaXN0VHJhaXRzPFBPRFR5cGU+OjpQT0RMaXN0SXRlbT4gaXRlbSkKIHsKICAgICBpZiAoZWMp
IHsKICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKICAgICAgICAgcmV0dXJuIEpT
Qzo6anNVbmRlZmluZWQoKTsKICAgICB9Ci0gICAgY29udGV4dC0+c3ZnQXR0cmlidXRlQ2hhbmdl
ZChsaXN0LT5hc3NvY2lhdGVkQXR0cmlidXRlTmFtZSgpKTsKLSAgICByZXR1cm4gdG9KUyhleGVj
LCBkZXByZWNhdGVkR2xvYmFsT2JqZWN0Rm9yUHJvdG90eXBlKGV4ZWMpLCBKU1NWR1N0YXRpY1BP
RFR5cGVXcmFwcGVyPFBPRFR5cGU+OjpjcmVhdGUoKml0ZW0pLmdldCgpLCBjb250ZXh0KTsKKwor
ICAgIHR5cGVuYW1lIEpTU1ZHUE9ETGlzdFRyYWl0czxQT0RUeXBlPjo6UE9ETGlzdCogbGlzdElt
cCA9IHdyYXBwZXItPmltcGwoKTsKKyAgICBKU1NWR0NvbnRleHRDYWNoZTo6cHJvcGFnYXRlU1ZH
RE9NQ2hhbmdlKHdyYXBwZXIsIGxpc3RJbXAtPmFzc29jaWF0ZWRBdHRyaWJ1dGVOYW1lKCkpOwor
ICAgIHJldHVybiB0b0pTKGV4ZWMsIHdyYXBwZXItPmdsb2JhbE9iamVjdCgpLAorICAgICAgICAg
ICAgICAgIEpTU1ZHU3RhdGljUE9EVHlwZVdyYXBwZXI8UE9EVHlwZT46OmNyZWF0ZSgqaXRlbSku
Z2V0KCksIDAgIC8qIG5vIGNvbnRleHQgb24gcHVycG9zZSAqLyk7CiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIEpTUE9ETGlzdFR5cGUsIHR5cGVuYW1lIFBPRFR5cGU+CkBAIC05Miw3ICs5OSw3IEBA
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY2xlYXIoSlNQT0RMaXN0VHlwZSoKICAgICBpZiAoZWMpCiAg
ICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CiAgICAgZWxzZQotICAgICAgICB3cmFw
cGVyLT5jb250ZXh0KCktPnN2Z0F0dHJpYnV0ZUNoYW5nZWQobGlzdEltcC0+YXNzb2NpYXRlZEF0
dHJpYnV0ZU5hbWUoKSk7CisgICAgICAgIEpTU1ZHQ29udGV4dENhY2hlOjpwcm9wYWdhdGVTVkdE
T01DaGFuZ2Uod3JhcHBlciwgbGlzdEltcC0+YXNzb2NpYXRlZEF0dHJpYnV0ZU5hbWUoKSk7CiAK
ICAgICByZXR1cm4gSlNDOjpqc1VuZGVmaW5lZCgpOwogfQpAQCAtMTAzLDkgKzExMCw4IEBAIHN0
YXRpYyBKU0M6OkpTVmFsdWUgaW5pdGlhbGl6ZShKU1BPRExpc3QKIHsKICAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKICAgICB0eXBlbmFtZSBKU1NWR1BPRExpc3RUcmFpdHM8UE9EVHlwZT46OlBP
RExpc3QqIGxpc3RJbXAgPSB3cmFwcGVyLT5pbXBsKCk7Ci0gICAgcmV0dXJuIGZpbmlzaFNldHRl
cjxQT0RUeXBlPihleGVjLCBlYywgd3JhcHBlci0+Y29udGV4dCgpLCBsaXN0SW1wLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdEltcC0+aW5pdGlhbGl6ZShKU1NWR1BPRExp
c3RUcmFpdHM8UE9EVHlwZT46OlBPRExpc3RJdGVtOjpjb3B5KGNvbnZlcnNpb24oYXJncy5hdCgw
KSkpLCBlYykpOwotCisgICAgcmV0dXJuIGZpbmlzaFNldHRlcjxKU1BPRExpc3RUeXBlLCBQT0RU
eXBlPihleGVjLCBlYywgd3JhcHBlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxpc3RJbXAtPmluaXRpYWxpemUoSlNTVkdQT0RMaXN0VHJhaXRzPFBP
RFR5cGU+OjpQT0RMaXN0SXRlbTo6Y29weShjb252ZXJzaW9uKGFyZ3MuYXQoMCkpKSwgZWMpKTsK
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgSlNQT0RMaXN0VHlwZSwgdHlwZW5hbWUgUE9EVHlwZT4K
QEAgLTEyMSw4ICsxMjcsOCBAQCBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldEl0ZW0oSlNQT0RMaXN0
VHlwCiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICB0eXBlbmFtZSBKU1NWR1BPRExp
c3RUcmFpdHM8UE9EVHlwZT46OlBPRExpc3QqIGxpc3RJbXAgPSB3cmFwcGVyLT5pbXBsKCk7Ci0g
ICAgcmV0dXJuIGZpbmlzaEdldHRlcjxQT0RUeXBlPihleGVjLCBlYywgd3JhcHBlci0+Y29udGV4
dCgpLCBsaXN0SW1wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdEltcC0+
Z2V0SXRlbShpbmRleCwgZWMpKTsKKyAgICByZXR1cm4gZmluaXNoR2V0dGVyPEpTUE9ETGlzdFR5
cGUsIFBPRFR5cGU+KGV4ZWMsIGVjLCB3cmFwcGVyLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbGlzdEltcC0+Z2V0SXRlbShpbmRleCwgZWMpKTsKIH0K
IAogdGVtcGxhdGU8dHlwZW5hbWUgSlNQT0RMaXN0VHlwZSwgdHlwZW5hbWUgUE9EVHlwZT4KQEAg
LTEzOCw4ICsxNDQsOCBAQCBzdGF0aWMgSlNDOjpKU1ZhbHVlIGluc2VydEl0ZW1CZWZvcmUoSlNQ
CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICB0eXBlbmFtZSBKU1NWR1BPRExpc3RU
cmFpdHM8UE9EVHlwZT46OlBPRExpc3QqIGxpc3RJbXAgPSB3cmFwcGVyLT5pbXBsKCk7Ci0gICAg
cmV0dXJuIGZpbmlzaFNldHRlcjxQT0RUeXBlPihleGVjLCBlYywgd3JhcHBlci0+Y29udGV4dCgp
LCBsaXN0SW1wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdEltcC0+aW5z
ZXJ0SXRlbUJlZm9yZShKU1NWR1BPRExpc3RUcmFpdHM8UE9EVHlwZT46OlBPRExpc3RJdGVtOjpj
b3B5KGNvbnZlcnNpb24oYXJncy5hdCgwKSkpLCBpbmRleCwgZWMpKTsKKyAgICByZXR1cm4gZmlu
aXNoU2V0dGVyPEpTUE9ETGlzdFR5cGUsIFBPRFR5cGU+KGV4ZWMsIGVjLCB3cmFwcGVyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdEltcC0+aW5z
ZXJ0SXRlbUJlZm9yZShKU1NWR1BPRExpc3RUcmFpdHM8UE9EVHlwZT46OlBPRExpc3RJdGVtOjpj
b3B5KGNvbnZlcnNpb24oYXJncy5hdCgwKSkpLCBpbmRleCwgZWMpKTsKIH0KIAogdGVtcGxhdGU8
dHlwZW5hbWUgSlNQT0RMaXN0VHlwZSwgdHlwZW5hbWUgUE9EVHlwZT4KQEAgLTE1NSw4ICsxNjEs
OCBAQCBzdGF0aWMgSlNDOjpKU1ZhbHVlIHJlcGxhY2VJdGVtKEpTUE9ETGlzCiAKICAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKICAgICB0eXBlbmFtZSBKU1NWR1BPRExpc3RUcmFpdHM8UE9EVHlw
ZT46OlBPRExpc3QqIGxpc3RJbXAgPSB3cmFwcGVyLT5pbXBsKCk7Ci0gICAgcmV0dXJuIGZpbmlz
aFNldHRlcjxQT0RUeXBlPihleGVjLCBlYywgd3JhcHBlci0+Y29udGV4dCgpLCBsaXN0SW1wLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdEltcC0+cmVwbGFjZUl0ZW0oSlNT
VkdQT0RMaXN0VHJhaXRzPFBPRFR5cGU+OjpQT0RMaXN0SXRlbTo6Y29weShjb252ZXJzaW9uKGFy
Z3MuYXQoMCkpKSwgaW5kZXgsIGVjKSk7CisgICAgcmV0dXJuIGZpbmlzaFNldHRlcjxKU1BPRExp
c3RUeXBlLCBQT0RUeXBlPihleGVjLCBlYywgd3JhcHBlciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RJbXAtPnJlcGxhY2VJdGVtKEpTU1ZHUE9E
TGlzdFRyYWl0czxQT0RUeXBlPjo6UE9ETGlzdEl0ZW06OmNvcHkoY29udmVyc2lvbihhcmdzLmF0
KDApKSksIGluZGV4LCBlYykpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBKU1BPRExpc3RUeXBl
LCB0eXBlbmFtZSBQT0RUeXBlPgpAQCAtMTcyLDggKzE3OCw4IEBAIHN0YXRpYyBKU0M6OkpTVmFs
dWUgcmVtb3ZlSXRlbShKU1BPRExpc3QKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAg
IHR5cGVuYW1lIEpTU1ZHUE9ETGlzdFRyYWl0czxQT0RUeXBlPjo6UE9ETGlzdCogbGlzdEltcCA9
IHdyYXBwZXItPmltcGwoKTsKLSAgICByZXR1cm4gZmluaXNoU2V0dGVyUmVhZE9ubHlSZXN1bHQ8
UE9EVHlwZT4oZXhlYywgZWMsIHdyYXBwZXItPmNvbnRleHQoKSwgbGlzdEltcCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdEltcC0+cmVtb3ZlSXRl
bShpbmRleCwgZWMpKTsKKyAgICByZXR1cm4gZmluaXNoU2V0dGVyUmVhZE9ubHlSZXN1bHQ8SlNQ
T0RMaXN0VHlwZSwgUE9EVHlwZT4oZXhlYywgZWMsIHdyYXBwZXIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RJbXAtPnJl
bW92ZUl0ZW0oaW5kZXgsIGVjKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEpTUE9ETGlzdFR5
cGUsIHR5cGVuYW1lIFBPRFR5cGU+CkBAIC0xODIsOCArMTg4LDggQEAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBhcHBlbmRJdGVtKEpTUE9ETGlzdAogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwog
ICAgIHR5cGVuYW1lIEpTU1ZHUE9ETGlzdFRyYWl0czxQT0RUeXBlPjo6UE9ETGlzdCogbGlzdElt
cCA9IHdyYXBwZXItPmltcGwoKTsKLSAgICByZXR1cm4gZmluaXNoU2V0dGVyPFBPRFR5cGU+KGV4
ZWMsIGVjLCB3cmFwcGVyLT5jb250ZXh0KCksIGxpc3RJbXAsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBsaXN0SW1wLT5hcHBlbmRJdGVtKEpTU1ZHUE9ETGlzdFRyYWl0czxQT0RU
eXBlPjo6UE9ETGlzdEl0ZW06OmNvcHkoY29udmVyc2lvbihhcmdzLmF0KDApKSksIGVjKSk7Cisg
ICAgcmV0dXJuIGZpbmlzaFNldHRlcjxKU1BPRExpc3RUeXBlLCBQT0RUeXBlPihleGVjLCBlYywg
d3JhcHBlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGxpc3RJbXAtPmFwcGVuZEl0ZW0oSlNTVkdQT0RMaXN0VHJhaXRzPFBPRFR5cGU+OjpQT0RMaXN0
SXRlbTo6Y29weShjb252ZXJzaW9uKGFyZ3MuYXQoMCkpKSwgZWMpKTsKIH0KIAogfQpJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR1BPRFR5cGVXcmFwcGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR1BPRFR5cGVXcmFwcGVyLmgJKHJldmlzaW9uIDUzNjU2
KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR1BPRFR5cGVXcmFwcGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI4LDE4ICsyOCwyMSBAQAogI2RlZmluZSBKU1NWR1BPRFR5cGVXcmFwcGVyX2gK
IAogI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiSlNTVkdDb250ZXh0Q2FjaGUuaCIKICNpbmNs
dWRlICJTVkdFbGVtZW50LmgiCiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIERPTU9iamVjdDsKKwogdGVtcGxhdGU8dHlwZW5hbWUg
UE9EVHlwZT4KIGNsYXNzIEpTU1ZHUE9EVHlwZVdyYXBwZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxK
U1NWR1BPRFR5cGVXcmFwcGVyPFBPRFR5cGU+ID4gewogcHVibGljOgogICAgIHZpcnR1YWwgfkpT
U1ZHUE9EVHlwZVdyYXBwZXIoKSB7IH0KIAogICAgIHZpcnR1YWwgb3BlcmF0b3IgUE9EVHlwZSgp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY29tbWl0Q2hhbmdlKFBPRFR5cGUsIFNWR0VsZW1lbnQq
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNvbW1pdENoYW5nZShQT0RUeXBlLCBET01PYmplY3Qq
KSA9IDA7CiB9OwogCiAvLyBUaGlzIGZpbGUgY29udGFpbnMgSlMgd3JhcHBlciBvYmplY3RzIGZv
ciBTVkcgZGF0YXR5cGVzLCB0aGF0IGFyZSBwYXNzZWQgYXJvdW5kIGJ5IHZhbHVlCkBAIC04Niwx
MiArODksMTAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gKG1fY3JlYXRvci5nZXQoKS0+Km1f
Z2V0dGVyKSgpOwogICAgIH0KIAotICAgIHZpcnR1YWwgdm9pZCBjb21taXRDaGFuZ2UoUE9EVHlw
ZSB0eXBlLCBTVkdFbGVtZW50KiBjb250ZXh0KQorICAgIHZpcnR1YWwgdm9pZCBjb21taXRDaGFu
Z2UoUE9EVHlwZSB0eXBlLCBET01PYmplY3QqIHdyYXBwZXIpCiAgICAgewogICAgICAgICAobV9j
cmVhdG9yLmdldCgpLT4qbV9zZXR0ZXIpKHR5cGUpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQot
ICAgICAgICAgICAgY29udGV4dC0+c3ZnQXR0cmlidXRlQ2hhbmdlZChtX2NyZWF0b3ItPmFzc29j
aWF0ZWRBdHRyaWJ1dGVOYW1lKCkpOworICAgICAgICBKU1NWR0NvbnRleHRDYWNoZTo6cHJvcGFn
YXRlU1ZHRE9NQ2hhbmdlKHdyYXBwZXIsIG1fY3JlYXRvci0+YXNzb2NpYXRlZEF0dHJpYnV0ZU5h
bWUoKSk7CiAgICAgfQogCiBwcml2YXRlOgpAQCAtMTMwLDcgKzEzMSw3IEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIG1fcG9kVHlwZTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgY29tbWl0
Q2hhbmdlKFBPRFR5cGUgdHlwZSwgU1ZHRWxlbWVudCopCisgICAgdmlydHVhbCB2b2lkIGNvbW1p
dENoYW5nZShQT0RUeXBlIHR5cGUsIERPTU9iamVjdCopCiAgICAgewogICAgICAgICBtX3BvZFR5
cGUgPSB0eXBlOwogICAgIH0KQEAgLTE1NCwxMCArMTU1LDEwIEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBKU1NWR1N0YXRpY1BPRFR5cGVXcmFwcGVyV2l0aFBPRFR5cGVQ
YXJlbnQodHlwZSwgcGFyZW50KSk7CiAgICAgfQogCi0gICAgdmlydHVhbCB2b2lkIGNvbW1pdENo
YW5nZShQT0RUeXBlIHR5cGUsIFNWR0VsZW1lbnQqIGNvbnRleHQpCisgICAgdmlydHVhbCB2b2lk
IGNvbW1pdENoYW5nZShQT0RUeXBlIHR5cGUsIERPTU9iamVjdCogd3JhcHBlcikKICAgICB7Ci0g
ICAgICAgIEpTU1ZHU3RhdGljUE9EVHlwZVdyYXBwZXI8UE9EVHlwZT46OmNvbW1pdENoYW5nZSh0
eXBlLCBjb250ZXh0KTsKLSAgICAgICAgbV9wYXJlbnRUeXBlLT5jb21taXRDaGFuZ2UoUGFyZW50
VHlwZUFyZyh0eXBlKSwgY29udGV4dCk7ICAgIAorICAgICAgICBKU1NWR1N0YXRpY1BPRFR5cGVX
cmFwcGVyPFBPRFR5cGU+Ojpjb21taXRDaGFuZ2UodHlwZSwgd3JhcHBlcik7CisgICAgICAgIG1f
cGFyZW50VHlwZS0+Y29tbWl0Q2hhbmdlKFBhcmVudFR5cGVBcmcodHlwZSksIHdyYXBwZXIpOwog
ICAgIH0KIAogcHJpdmF0ZToKQEAgLTE5Miw3ICsxOTMsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiAobV9wYXJlbnQuZ2V0KCktPiptX2dldHRlcikoKTsKICAgICB9CiAKLSAgICB2aXJ0dWFs
IHZvaWQgY29tbWl0Q2hhbmdlKFBPRFR5cGUgdHlwZSwgU1ZHRWxlbWVudCopCisgICAgdmlydHVh
bCB2b2lkIGNvbW1pdENoYW5nZShQT0RUeXBlIHR5cGUsIERPTU9iamVjdCopCiAgICAgewogICAg
ICAgICAobV9wYXJlbnQuZ2V0KCktPiptX3NldHRlcikodHlwZSk7CiAgICAgfQpAQCAtMjM3LDE1
ICsyMzgsMTMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gKG1fY3JlYXRvci5nZXQoKS0+Km1f
Z2V0dGVyKSgpOwogICAgIH0KIAotICAgIHZpcnR1YWwgdm9pZCBjb21taXRDaGFuZ2UoUE9EVHlw
ZSB0eXBlLCBTVkdFbGVtZW50KiBjb250ZXh0KQorICAgIHZpcnR1YWwgdm9pZCBjb21taXRDaGFu
Z2UoUE9EVHlwZSB0eXBlLCBET01PYmplY3QqIHdyYXBwZXIpCiAgICAgewogICAgICAgICBpZiAo
IW1fc2V0dGVyKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIChtX2NyZWF0b3IuZ2V0
KCktPiptX3NldHRlcikodHlwZSk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgICAg
ICBjb250ZXh0LT5zdmdBdHRyaWJ1dGVDaGFuZ2VkKG1fYXNzb2NpYXRlZEF0dHJpYnV0ZU5hbWUp
OworICAgICAgICBKU1NWR0NvbnRleHRDYWNoZTo6cHJvcGFnYXRlU1ZHRE9NQ2hhbmdlKHdyYXBw
ZXIsIG1fYXNzb2NpYXRlZEF0dHJpYnV0ZU5hbWUpOwogICAgIH0KIAogcHJpdmF0ZToKSW5kZXg6
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdQYXRoU2VnQ3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHUGF0aFNlZ0N1c3RvbS5jcHAJKHJldmlzaW9uIDUz
NjU2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR1BhdGhTZWdDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMSw2ICsyMSw4IEBACiAKICNpZiBFTkFCTEUoU1ZHKQogI2luY2x1ZGUg
IkpTU1ZHUGF0aFNlZy5oIgorCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAi
SlNTVkdQYXRoU2VnQXJjQWJzLmgiCiAjaW5jbHVkZSAiSlNTVkdQYXRoU2VnQXJjUmVsLmgiCiAj
aW5jbHVkZSAiSlNTVkdQYXRoU2VnQ2xvc2VQYXRoLmgiCkBAIC00MCw5ICs0Miw2IEBACiAjaW5j
bHVkZSAiSlNTVkdQYXRoU2VnTGluZXRvVmVydGljYWxSZWwuaCIKICNpbmNsdWRlICJKU1NWR1Bh
dGhTZWdNb3ZldG9BYnMuaCIKICNpbmNsdWRlICJKU1NWR1BhdGhTZWdNb3ZldG9SZWwuaCIKLQot
I2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgotCiAjaW5jbHVkZSAiU1ZHUGF0aFNlZy5oIgogI2lu
Y2x1ZGUgIlNWR1BhdGhTZWdBcmMuaCIKICNpbmNsdWRlICJTVkdQYXRoU2VnQ2xvc2VQYXRoLmgi
CkBAIC02NCw4ICs2MywxMCBAQCBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUds
b2JhCiAgICAgaWYgKCFvYmplY3QpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKIAotICAgIGlm
IChET01PYmplY3QqIHdyYXBwZXIgPSBnZXRDYWNoZWRET01PYmplY3RXcmFwcGVyKGV4ZWMsIG9i
amVjdCkpCisgICAgaWYgKERPTU9iamVjdCogd3JhcHBlciA9IGdldENhY2hlZERPTU9iamVjdFdy
YXBwZXIoZXhlYywgb2JqZWN0KSkgeworICAgICAgICBBU1NFUlQoSlNTVkdDb250ZXh0Q2FjaGU6
OnN2Z0NvbnRleHRGb3JET01PYmplY3Qod3JhcHBlcikgPT0gY29udGV4dCk7CiAgICAgICAgIHJl
dHVybiB3cmFwcGVyOworICAgIH0KIAogICAgIHN3aXRjaCAob2JqZWN0LT5wYXRoU2VnVHlwZSgp
KSB7CiAgICAgY2FzZSBTVkdQYXRoU2VnOjpQQVRIU0VHX0NMT1NFUEFUSDoKQEAgLTExNSw1ICsx
MTYsMyBAQCBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhCiB9CiAKICNl
bmRpZiAvLyBFTkFCTEUoU1ZHKQotCi0vLyB2aW06dHM9NDpub2V0CkluZGV4OiBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTU1ZHUGF0aFNlZ0xpc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3MvanMvSlNTVkdQYXRoU2VnTGlzdEN1c3RvbS5jcHAJKHJldmlzaW9uIDUzNjU2
KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR1BhdGhTZWdMaXN0Q3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjQsNiArMjQsNyBAQAogCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNp
bmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkpTU1ZHQ29udGV4dENhY2hlLmgiCiAjaW5jbHVk
ZSAiSlNTVkdQYXRoU2VnLmgiCiAjaW5jbHVkZSAiU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmgiCiAj
aW5jbHVkZSAiU1ZHRWxlbWVudC5oIgpAQCAtMzksMTIgKzQwLDEyIEBAIEpTVmFsdWUgSlNTVkdQ
YXRoU2VnTGlzdDo6Y2xlYXIoRXhlY1N0YXQKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
IAotICAgIFNWR1BhdGhTZWdMaXN0KiBpbXAgPSBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnTGlzdCo+
KGltcGwoKSk7Ci0gICAgaW1wLT5jbGVhcihlYyk7CisgICAgU1ZHUGF0aFNlZ0xpc3QqIGxpc3Qg
PSBpbXBsKCk7CisgICAgbGlzdC0+Y2xlYXIoZWMpOwogCiAgICAgc2V0RE9NRXhjZXB0aW9uKGV4
ZWMsIGVjKTsKIAotICAgIG1fY29udGV4dC0+c3ZnQXR0cmlidXRlQ2hhbmdlZChpbXAtPmFzc29j
aWF0ZWRBdHRyaWJ1dGVOYW1lKCkpOworICAgIEpTU1ZHQ29udGV4dENhY2hlOjpwcm9wYWdhdGVT
VkdET01DaGFuZ2UodGhpcywgbGlzdC0+YXNzb2NpYXRlZEF0dHJpYnV0ZU5hbWUoKSk7CiAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKQEAgLTUzLDE0ICs1NCwxNSBAQCBKU1ZhbHVlIEpT
U1ZHUGF0aFNlZ0xpc3Q6OmluaXRpYWxpemUoRXhlCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
CiAgICAgU1ZHUGF0aFNlZyogbmV3SXRlbSA9IHRvU1ZHUGF0aFNlZyhhcmdzLmF0KDApKTsKIAot
ICAgIFNWR1BhdGhTZWdMaXN0KiBpbXAgPSBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnTGlzdCo+KGlt
cGwoKSk7CisgICAgU1ZHUGF0aFNlZ0xpc3QqIGxpc3QgPSBpbXBsKCk7CiAKLSAgICBTVkdQYXRo
U2VnKiBvYmogPSBXVEY6OmdldFB0cihpbXAtPmluaXRpYWxpemUobmV3SXRlbSwgZWMpKTsKKyAg
ICBTVkdQYXRoU2VnKiBvYmogPSBXVEY6OmdldFB0cihsaXN0LT5pbml0aWFsaXplKG5ld0l0ZW0s
IGVjKSk7CisgICAgU1ZHRWxlbWVudCogY29udGV4dCA9IEpTU1ZHQ29udGV4dENhY2hlOjpzdmdD
b250ZXh0Rm9yRE9NT2JqZWN0KHRoaXMpOwogCi0gICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IHRv
SlMoZXhlYywgZGVwcmVjYXRlZEdsb2JhbE9iamVjdEZvclByb3RvdHlwZShleGVjKSwgb2JqLCBt
X2NvbnRleHQuZ2V0KCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhleGVjLCBnbG9iYWxP
YmplY3QoKSwgb2JqLCBjb250ZXh0KTsKICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwog
Ci0gICAgbV9jb250ZXh0LT5zdmdBdHRyaWJ1dGVDaGFuZ2VkKGltcC0+YXNzb2NpYXRlZEF0dHJp
YnV0ZU5hbWUoKSk7ICAgIAorICAgIEpTU1ZHQ29udGV4dENhY2hlOjpwcm9wYWdhdGVTVkdET01D
aGFuZ2UodGhpcywgbGlzdC0+YXNzb2NpYXRlZEF0dHJpYnV0ZU5hbWUoKSk7CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIApAQCAtNzUsMTAgKzc3LDExIEBAIEpTVmFsdWUgSlNTVkdQYXRoU2VnTGlz
dDo6Z2V0SXRlbShFeGVjU3QKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQog
Ci0gICAgU1ZHUGF0aFNlZ0xpc3QqIGltcCA9IHN0YXRpY19jYXN0PFNWR1BhdGhTZWdMaXN0Kj4o
aW1wbCgpKTsKLSAgICBTVkdQYXRoU2VnKiBvYmogPSBXVEY6OmdldFB0cihpbXAtPmdldEl0ZW0o
aW5kZXgsIGVjKSk7CisgICAgU1ZHUGF0aFNlZ0xpc3QqIGxpc3QgPSBpbXBsKCk7CisgICAgU1ZH
UGF0aFNlZyogb2JqID0gV1RGOjpnZXRQdHIobGlzdC0+Z2V0SXRlbShpbmRleCwgZWMpKTsKKyAg
ICBTVkdFbGVtZW50KiBjb250ZXh0ID0gSlNTVkdDb250ZXh0Q2FjaGU6OnN2Z0NvbnRleHRGb3JE
T01PYmplY3QodGhpcyk7CiAKLSAgICBKU0M6OkpTVmFsdWUgcmVzdWx0ID0gdG9KUyhleGVjLCBk
ZXByZWNhdGVkR2xvYmFsT2JqZWN0Rm9yUHJvdG90eXBlKGV4ZWMpLCBvYmosIG1fY29udGV4dC5n
ZXQoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBv
YmosIGNvbnRleHQpOwogICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KQEAgLTk1LDEyICs5OCwxMyBAQCBKU1ZhbHVlIEpTU1ZHUGF0aFNlZ0xpc3Q6
Omluc2VydEl0ZW1CZWZvCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAot
ICAgIFNWR1BhdGhTZWdMaXN0KiBpbXAgPSBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnTGlzdCo+KGlt
cGwoKSk7CisgICAgU1ZHUGF0aFNlZ0xpc3QqIGxpc3QgPSBpbXBsKCk7CisgICAgU1ZHRWxlbWVu
dCogY29udGV4dCA9IEpTU1ZHQ29udGV4dENhY2hlOjpzdmdDb250ZXh0Rm9yRE9NT2JqZWN0KHRo
aXMpOwogCi0gICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhlYywgZGVwcmVjYXRlZEds
b2JhbE9iamVjdEZvclByb3RvdHlwZShleGVjKSwgV1RGOjpnZXRQdHIoaW1wLT5pbnNlcnRJdGVt
QmVmb3JlKG5ld0l0ZW0sIGluZGV4LCBlYykpLCBtX2NvbnRleHQuZ2V0KCkpOworICAgIEpTVmFs
dWUgcmVzdWx0ID0gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIobGlzdC0+
aW5zZXJ0SXRlbUJlZm9yZShuZXdJdGVtLCBpbmRleCwgZWMpKSwgY29udGV4dCk7CiAgICAgc2V0
RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKIAotICAgIG1fY29udGV4dC0+c3ZnQXR0cmlidXRlQ2hh
bmdlZChpbXAtPmFzc29jaWF0ZWRBdHRyaWJ1dGVOYW1lKCkpOyAgICAKKyAgICBKU1NWR0NvbnRl
eHRDYWNoZTo6cHJvcGFnYXRlU1ZHRE9NQ2hhbmdlKHRoaXMsIGxpc3QtPmFzc29jaWF0ZWRBdHRy
aWJ1dGVOYW1lKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTExNiwxMiArMTIwLDEz
IEBAIEpTVmFsdWUgSlNTVkdQYXRoU2VnTGlzdDo6cmVwbGFjZUl0ZW0oRXgKICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCi0gICAgU1ZHUGF0aFNlZ0xpc3QqIGltcCA9IHN0
YXRpY19jYXN0PFNWR1BhdGhTZWdMaXN0Kj4oaW1wbCgpKTsKKyAgICBTVkdQYXRoU2VnTGlzdCog
bGlzdCA9IGltcGwoKTsKKyAgICBTVkdFbGVtZW50KiBjb250ZXh0ID0gSlNTVkdDb250ZXh0Q2Fj
aGU6OnN2Z0NvbnRleHRGb3JET01PYmplY3QodGhpcyk7CiAKLSAgICBKU0M6OkpTVmFsdWUgcmVz
dWx0ID0gdG9KUyhleGVjLCBkZXByZWNhdGVkR2xvYmFsT2JqZWN0Rm9yUHJvdG90eXBlKGV4ZWMp
LCBXVEY6OmdldFB0cihpbXAtPnJlcGxhY2VJdGVtKG5ld0l0ZW0sIGluZGV4LCBlYykpLCBtX2Nv
bnRleHQuZ2V0KCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhleGVjLCBnbG9iYWxPYmpl
Y3QoKSwgV1RGOjpnZXRQdHIobGlzdC0+cmVwbGFjZUl0ZW0obmV3SXRlbSwgaW5kZXgsIGVjKSks
IGNvbnRleHQpOwogICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CiAKLSAgICBtX2NvbnRl
eHQtPnN2Z0F0dHJpYnV0ZUNoYW5nZWQoaW1wLT5hc3NvY2lhdGVkQXR0cmlidXRlTmFtZSgpKTsg
ICAgCisgICAgSlNTVkdDb250ZXh0Q2FjaGU6OnByb3BhZ2F0ZVNWR0RPTUNoYW5nZSh0aGlzLCBs
aXN0LT5hc3NvY2lhdGVkQXR0cmlidXRlTmFtZSgpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQog
CkBAIC0xMzYsMTQgKzE0MSwxNSBAQCBKU1ZhbHVlIEpTU1ZHUGF0aFNlZ0xpc3Q6OnJlbW92ZUl0
ZW0oRXhlCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAotICAgIFNWR1Bh
dGhTZWdMaXN0KiBpbXAgPSBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnTGlzdCo+KGltcGwoKSk7Cisg
ICAgU1ZHUGF0aFNlZ0xpc3QqIGxpc3QgPSBpbXBsKCk7CiAKLSAgICBSZWZQdHI8U1ZHUGF0aFNl
Zz4gb2JqKGltcC0+cmVtb3ZlSXRlbShpbmRleCwgZWMpKTsKKyAgICBSZWZQdHI8U1ZHUGF0aFNl
Zz4gb2JqKGxpc3QtPnJlbW92ZUl0ZW0oaW5kZXgsIGVjKSk7CisgICAgU1ZHRWxlbWVudCogY29u
dGV4dCA9IEpTU1ZHQ29udGV4dENhY2hlOjpzdmdDb250ZXh0Rm9yRE9NT2JqZWN0KHRoaXMpOwog
Ci0gICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhlYywgZGVwcmVjYXRlZEdsb2JhbE9i
amVjdEZvclByb3RvdHlwZShleGVjKSwgb2JqLmdldCgpLCBtX2NvbnRleHQuZ2V0KCkpOworICAg
IEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgb2JqLmdldCgpLCBj
b250ZXh0KTsKICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwogCi0gICAgbV9jb250ZXh0
LT5zdmdBdHRyaWJ1dGVDaGFuZ2VkKGltcC0+YXNzb2NpYXRlZEF0dHJpYnV0ZU5hbWUoKSk7ICAg
IAorICAgIEpTU1ZHQ29udGV4dENhY2hlOjpwcm9wYWdhdGVTVkdET01DaGFuZ2UodGhpcywgbGlz
dC0+YXNzb2NpYXRlZEF0dHJpYnV0ZU5hbWUoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApA
QCAtMTUyLDEyICsxNTgsMTMgQEAgSlNWYWx1ZSBKU1NWR1BhdGhTZWdMaXN0OjphcHBlbmRJdGVt
KEV4ZQogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFNWR1BhdGhTZWcqIG5ld0l0ZW0g
PSB0b1NWR1BhdGhTZWcoYXJncy5hdCgwKSk7CiAKLSAgICBTVkdQYXRoU2VnTGlzdCogaW1wID0g
c3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0xpc3QqPihpbXBsKCkpOworICAgIFNWR1BhdGhTZWdMaXN0
KiBsaXN0ID0gaW1wbCgpOworICAgIFNWR0VsZW1lbnQqIGNvbnRleHQgPSBKU1NWR0NvbnRleHRD
YWNoZTo6c3ZnQ29udGV4dEZvckRPTU9iamVjdCh0aGlzKTsKIAotICAgIEpTQzo6SlNWYWx1ZSBy
ZXN1bHQgPSB0b0pTKGV4ZWMsIGRlcHJlY2F0ZWRHbG9iYWxPYmplY3RGb3JQcm90b3R5cGUoZXhl
YyksIFdURjo6Z2V0UHRyKGltcC0+YXBwZW5kSXRlbShuZXdJdGVtLCBlYykpLCBtX2NvbnRleHQu
Z2V0KCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwg
V1RGOjpnZXRQdHIobGlzdC0+YXBwZW5kSXRlbShuZXdJdGVtLCBlYykpLCBjb250ZXh0KTsKICAg
ICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwogCi0gICAgbV9jb250ZXh0LT5zdmdBdHRyaWJ1
dGVDaGFuZ2VkKGltcC0+YXNzb2NpYXRlZEF0dHJpYnV0ZU5hbWUoKSk7ICAgIAorICAgIEpTU1ZH
Q29udGV4dENhY2hlOjpwcm9wYWdhdGVTVkdET01DaGFuZ2UodGhpcywgbGlzdC0+YXNzb2NpYXRl
ZEF0dHJpYnV0ZU5hbWUoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApJbmRleDogV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiA1MzY1NikK
KysrIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcg
Y29weSkKQEAgLTEzMiwxNSArMTMyLDcgQEAgc3ViIEdldFBhcmVudENsYXNzTmFtZQogICAgIG15
ICRkYXRhTm9kZSA9IHNoaWZ0OwogCiAgICAgcmV0dXJuICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57IkxlZ2FjeVBhcmVudCJ9IGlmICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57IkxlZ2FjeVBhcmVudCJ9OwotICAgIGlmIChAeyRkYXRhTm9kZS0+cGFyZW50c30gZXEgMCkg
ewotICAgICAgICAjIEZJWE1FOiBTVkcgdHlwZXMgcmVxdWlyaW5nIGEgY29udGV4dCgpIHBvaW50
ZXIgZG8gbm90IGhhdmUgZW5vdWdoCi0gICAgICAgICMgc3BhY2UgdG8gaG9sZCBhIGdsb2JhbE9i
amVjdCBwb2ludGVyIGFzIHdlbGwgdy9vIGhpdHRpbmcgdGhlIENFTExfU0laRSBsaW1pdC4KLSAg
ICAgICAgIyBUaGlzIGNvdWxkIGJlIGZpeGVkIGJ5IG1vdmluZyBjb250ZXh0KCkgaW50byB0aGUg
dmFyaW91cyBpbXBsKCkgY2xhc3Nlcy4KLSAgICAgICAgIyBVbnRpbCB0aGVuLCB3ZSBzcGVjaWFs
IGNhc2UgdGhlc2UgU1ZHIGJpbmRpbmdzIGFuZCBhbGxvdyB0aGVtIHRvIHJldHVybgotICAgICAg
ICAjIHRoZSB3cm9uZyBwcm90b3R5cGVzIGFuZCBjb25zdHJ1Y3RvcnMgZHVyaW5nIHgtZnJhbWUg
YWNjZXNzLiAgU2VlIGJ1ZyAyNzA4OC4KLSAgICAgICAgcmV0dXJuICJET01PYmplY3RXaXRoU1ZH
Q29udGV4dCIgaWYgSXNTVkdUeXBlTmVlZGluZ0NvbnRleHRQYXJhbWV0ZXIoJGRhdGFOb2RlLT5u
YW1lKTsKLSAgICAgICAgcmV0dXJuICJET01PYmplY3RXaXRoR2xvYmFsUG9pbnRlciI7Ci0gICAg
fQorICAgIHJldHVybiAiRE9NT2JqZWN0V2l0aEdsb2JhbFBvaW50ZXIiIGlmIChAeyRkYXRhTm9k
ZS0+cGFyZW50c30gZXEgMCk7CiAgICAgcmV0dXJuICJKUyIgLiAkY29kZUdlbmVyYXRvci0+U3Ry
aXBNb2R1bGUoJGRhdGFOb2RlLT5wYXJlbnRzKDApKTsKIH0KIApAQCAtMTY5LDE2ICsxNjEsNiBA
QCBzdWIgSW5kZXhHZXR0ZXJSZXR1cm5zU3RyaW5ncwogICAgIHJldHVybiAwOwogfQogCi1zdWIg
Q3JlYXRlU1ZHQ29udGV4dEludGVyZmFjZU5hbWUKLXsKLSAgICBteSAkdHlwZSA9IHNoaWZ0Owot
Ci0gICAgcmV0dXJuICR0eXBlIGlmICRjb2RlR2VuZXJhdG9yLT5Jc1NWR0FuaW1hdGVkVHlwZSgk
dHlwZSk7Ci0gICAgcmV0dXJuICJTVkdQYXRoU2VnIiBpZiAkdHlwZSA9fiAvXlNWR1BhdGhTZWcv
IGFuZCAkdHlwZSBuZSAiU1ZHUGF0aFNlZ0xpc3QiOwotCi0gICAgcmV0dXJuICIiOwotfQotCiBz
dWIgQWRkSW5jbHVkZXNGb3JUeXBlCiB7CiAgICAgbXkgJHR5cGUgPSAkY29kZUdlbmVyYXRvci0+
U3RyaXBNb2R1bGUoc2hpZnQpOwpAQCAtNDkzLDcgKzQ3NSw2IEBAIHN1YiBHZW5lcmF0ZUhlYWRl
cgogICAgIG15ICRoYXNQYXJlbnQgPSAkaGFzTGVnYWN5UGFyZW50IHx8ICRoYXNSZWFsUGFyZW50
OwogICAgIG15ICRwYXJlbnRDbGFzc05hbWUgPSBHZXRQYXJlbnRDbGFzc05hbWUoJGRhdGFOb2Rl
KTsKICAgICBteSAkY29uZGl0aW9uYWwgPSAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJDb25kaXRpb25hbCJ9OwotICAgIG15ICRuZWVkc1NWR0NvbnRleHQgPSBJc1NWR1R5cGVOZWVk
aW5nQ29udGV4dFBhcmFtZXRlcigkaW50ZXJmYWNlTmFtZSk7CiAgICAgbXkgJGV2ZW50VGFyZ2V0
ID0gJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiRXZlbnRUYXJnZXQifTsKICAgICBt
eSAkbmVlZHNNYXJrQ2hpbGRyZW4gPSAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJD
dXN0b21NYXJrRnVuY3Rpb24ifSB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJF
dmVudFRhcmdldCJ9OwogICAgIApAQCAtNTEzLDggKzQ5NCw3IEBAIHN1YiBHZW5lcmF0ZUhlYWRl
cgogICAgIGlmICgkaGFzUGFyZW50KSB7CiAgICAgICAgICRoZWFkZXJJbmNsdWRlc3siJHBhcmVu
dENsYXNzTmFtZS5oIn0gPSAxOwogICAgIH0gZWxzZSB7Ci0gICAgICAgICRoZWFkZXJJbmNsdWRl
c3siRE9NT2JqZWN0V2l0aFNWR0NvbnRleHQuaCJ9ID0gJG5lZWRzU1ZHQ29udGV4dDsKLSAgICAg
ICAgJGhlYWRlckluY2x1ZGVzeyJKU0RPTUJpbmRpbmcuaCJ9ID0gISRuZWVkc1NWR0NvbnRleHQ7
CisgICAgICAgICRoZWFkZXJJbmNsdWRlc3siSlNET01CaW5kaW5nLmgifSA9IDE7CiAgICAgICAg
ICRoZWFkZXJJbmNsdWRlc3siPHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaD4ifSA9IDE7CiAgICAg
ICAgICRoZWFkZXJJbmNsdWRlc3siPHJ1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmg+In0gPSAxOwog
ICAgIH0KQEAgLTU2MSw4ICs1NDEsNiBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICAgICAgcHVz
aChAaGVhZGVyQ29udGVudCwgIiAgICAkY2xhc3NOYW1lKE5vbk51bGxQYXNzUmVmUHRyPEpTQzo6
U3RydWN0dXJlPiwgUGFzc1JlZlB0cjwkaW1wbFR5cGU+LCBKU0RPTVdpbmRvd1NoZWxsKik7XG4i
KTsKICAgICB9IGVsc2lmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJJc1dvcmtl
ckNvbnRleHQifSkgewogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICRjbGFzc05h
bWUoTm9uTnVsbFBhc3NSZWZQdHI8SlNDOjpTdHJ1Y3R1cmU+LCBQYXNzUmVmUHRyPCRpbXBsVHlw
ZT4pO1xuIik7Ci0gICAgfSBlbHNpZiAoSXNTVkdUeXBlTmVlZGluZ0NvbnRleHRQYXJhbWV0ZXIo
JGltcGxDbGFzc05hbWUpKSB7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgJGNs
YXNzTmFtZShOb25OdWxsUGFzc1JlZlB0cjxKU0M6OlN0cnVjdHVyZT4sIEpTRE9NR2xvYmFsT2Jq
ZWN0KiwgUGFzc1JlZlB0cjwkaW1wbFR5cGU+LCBTVkdFbGVtZW50KiBjb250ZXh0KTtcbiIpOwog
ICAgIH0gZWxzZSB7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgJGNsYXNzTmFt
ZShOb25OdWxsUGFzc1JlZlB0cjxKU0M6OlN0cnVjdHVyZT4sIEpTRE9NR2xvYmFsT2JqZWN0Kiwg
UGFzc1JlZlB0cjwkaW1wbFR5cGU+KTtcbiIpOwogICAgIH0KQEAgLTc4Myw3ICs3NjEsNyBAQCBz
dWIgR2VuZXJhdGVIZWFkZXIKIAogICAgIGlmICghJGhhc1BhcmVudCB8fCAkZGF0YU5vZGUtPmV4
dGVuZGVkQXR0cmlidXRlcy0+eyJHZW5lcmF0ZVRvSlMifSB8fCAkZGF0YU5vZGUtPmV4dGVuZGVk
QXR0cmlidXRlcy0+eyJDdXN0b21Ub0pTIn0pIHsKICAgICAgICAgaWYgKCRwb2RUeXBlKSB7Ci0g
ICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpF
eGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIEpTU1ZHUE9EVHlwZVdyYXBwZXI8JHBvZFR5
cGU+KiwgU1ZHRWxlbWVudCogY29udGV4dCk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGhlYWRl
ckNvbnRlbnQsICJKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFs
T2JqZWN0KiwgSlNTVkdQT0RUeXBlV3JhcHBlcjwkcG9kVHlwZT4qLCBTVkdFbGVtZW50Kik7XG4i
KTsKICAgICAgICAgfSBlbHNpZiAoSXNTVkdUeXBlTmVlZGluZ0NvbnRleHRQYXJhbWV0ZXIoJGlt
cGxDbGFzc05hbWUpKSB7CiAgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiSlNDOjpK
U1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosICRpbXBsVHlw
ZSosIFNWR0VsZW1lbnQqIGNvbnRleHQpO1xuIik7CiAgICAgICAgIH0gZWxzZSB7CkBAIC0xMTcz
LDkgKzExNTEsNiBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgIG15ICRwb2RUeXBl
ID0gJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiUE9EVHlwZSJ9OwogICAgIG15ICRp
bXBsVHlwZSA9ICRwb2RUeXBlID8gIkpTU1ZHUE9EVHlwZVdyYXBwZXI8JHBvZFR5cGU+ICIgOiAk
aW1wbENsYXNzTmFtZTsKIAotICAgIG15ICRuZWVkc1NWR0NvbnRleHQgPSBJc1NWR1R5cGVOZWVk
aW5nQ29udGV4dFBhcmFtZXRlcigkaW1wbENsYXNzTmFtZSk7Ci0gICAgbXkgJHBhcmVudE5lZWRz
U1ZHQ29udGV4dCA9ICgkbmVlZHNTVkdDb250ZXh0IGFuZCAkcGFyZW50Q2xhc3NOYW1lID1+IC9T
VkcvKTsKLQogICAgICMgQ29uc3RydWN0b3IKICAgICBpZiAoJGludGVyZmFjZU5hbWUgZXEgIkRP
TVdpbmRvdyIpIHsKICAgICAgICAgQWRkSW5jbHVkZXNGb3JUeXBlKCJKU0RPTVdpbmRvd1NoZWxs
Iik7CkBAIC0xMTg2LDEyICsxMTYxLDExIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiJHtjbGFzc05hbWV9OjokY2xhc3NOYW1lKE5vbk51
bGxQYXNzUmVmUHRyPFN0cnVjdHVyZT4gc3RydWN0dXJlLCBQYXNzUmVmUHRyPCRpbXBsVHlwZT4g
aW1wbClcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICA6ICRwYXJlbnRDbGFz
c05hbWUoc3RydWN0dXJlLCBpbXBsKVxuIik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgbXkgJGNv
bnRleHRBcmcgPSAkbmVlZHNTVkdDb250ZXh0ID8gIiwgU1ZHRWxlbWVudCogY29udGV4dCIgOiAi
IjsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIke2NsYXNzTmFtZX06OiRjbGFzc05hbWUo
Tm9uTnVsbFBhc3NSZWZQdHI8U3RydWN0dXJlPiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8JGltcGxUeXBlPiBpbXBsJGNvbnRleHRBcmcpXG4i
KTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIke2NsYXNzTmFtZX06OiRjbGFzc05hbWUo
Tm9uTnVsbFBhc3NSZWZQdHI8U3RydWN0dXJlPiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8JGltcGxUeXBlPiBpbXBsKVxuIik7CiAgICAgICAg
IGlmICgkaGFzUGFyZW50KSB7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICA6
ICRwYXJlbnRDbGFzc05hbWUoc3RydWN0dXJlLCBnbG9iYWxPYmplY3QsIGltcGwiIC4gKCRwYXJl
bnROZWVkc1NWR0NvbnRleHQgPyAiLCBjb250ZXh0IiA6ICIiKSAuICIpXG4iKTsKKyAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIDogJHBhcmVudENsYXNzTmFtZShzdHJ1Y3R1cmUs
IGdsb2JhbE9iamVjdCwgaW1wbClcbiIpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgOiAkcGFyZW50Q2xhc3NOYW1lKHN0cnVjdHVyZSwgZ2xv
YmFsT2JqZWN0IiAuICgkbmVlZHNTVkdDb250ZXh0ID8gIiwgY29udGV4dCIgOiAiIikgLiAiKVxu
Iik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICA6ICRwYXJlbnRDbGFzc05h
bWUoc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpXG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgICwgbV9pbXBsKGltcGwpXG4iKTsKICAgICAgICAgfQogICAgIH0KQEAgLTEy
MTQsNiArMTE4OCw4IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGZvcmdldERP
TU9iamVjdCh0aGlzLCBpbXBsKCkpO1xuIik7CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIEpTU1ZHQ29udGV4dENhY2hlOjpmb3JnZXRXcmFwcGVy
KHRoaXMpO1xuIikgaWYgSXNTVkdUeXBlTmVlZGluZ0NvbnRleHRQYXJhbWV0ZXIoJGltcGxDbGFz
c05hbWUpOwogICAgICAgICB9CiAKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIp
OwpAQCAtMTM5NSwxNSArMTM3MSw4IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAKICAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIkpTVmFsdWUgJHtjb25zdHJ1Y3RvckZ1
bmN0aW9uTmFtZX0oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJv
cGVydHlTbG90JiBzbG90KVxuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICJ7XG4iKTsKLSAgICAgICAgICAgICAgICBpZiAoSXNTVkdUeXBlTmVlZGluZ0NvbnRleHRQYXJh
bWV0ZXIoJGludGVyZmFjZU5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICMgRklYTUU6IFNW
RyBiaW5kaW5ncyB3aXRoIGEgY29udGV4dCBwb2ludGVyIGhhdmUgbm8gc3BhY2UgdG8gc3RvcmUg
YSBnbG9iYWxPYmplY3QKLSAgICAgICAgICAgICAgICAgICAgIyBzbyB3ZSB1c2UgZGVwcmVjYXRl
ZEdsb2JhbE9iamVjdEZvclByb3RvdHlwZSBpbnN0ZWFkLgotICAgICAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICBVTlVTRURfUEFSQU0oc2xvdCk7XG4iKTsKLSAgICAgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuICR7Y2xhc3NOYW1lfTo6
Z2V0Q29uc3RydWN0b3IoZXhlYywgZGVwcmVjYXRlZEdsb2JhbE9iamVjdEZvclByb3RvdHlwZShl
eGVjKSk7XG4iKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAke2NsYXNzTmFtZX0qIGRvbU9iamVjdCA9IHN0YXRp
Y19jYXN0PCRjbGFzc05hbWUqPihhc09iamVjdChzbG90LnNsb3RCYXNlKCkpKTtcbiIpOwotICAg
ICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gJHtjbGFzc05h
bWV9OjpnZXRDb25zdHJ1Y3RvcihleGVjLCBkb21PYmplY3QtPmdsb2JhbE9iamVjdCgpKTtcbiIp
OwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICAke2NsYXNzTmFtZX0qIGRvbU9iamVjdCA9IHN0YXRpY19jYXN0PCRjbGFzc05hbWUqPihh
c09iamVjdChzbG90LnNsb3RCYXNlKCkpKTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIHJldHVybiAke2NsYXNzTmFtZX06OmdldENvbnN0cnVjdG9yKGV4ZWMs
IGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpO1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICJ9XG4iKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTQ4OCwx
NiArMTQ1NywxNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0
LWluIG9iamVjdFxuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgc3RhdGljX2Nhc3Q8JGNsYXNzTmFtZSo+KHRoaXNPYmplY3QpLT5wdXREaXJl
Y3QoSWRlbnRpZmllcihleGVjLCBcIiRuYW1lXCIpLCB2YWx1ZSk7XG4iKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgJGNsYXNzTmFtZSogY2FzdGVkVGhpc09iaiA9IHN0YXRpY19jYXN0
PCRjbGFzc05hbWUqPih0aGlzT2JqZWN0KTtcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICRpbXBsVHlwZSogaW1wID0gc3RhdGljX2Nhc3Q8
JGltcGxUeXBlKj4oY2FzdGVkVGhpc09iai0+aW1wbCgpKTtcbiIpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICgkcG9kVHlwZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAkcG9kVHlwZSBpbXAoKnN0YXRpY19jYXN0PCRj
bGFzc05hbWUqPih0aGlzT2JqZWN0KS0+aW1wbCgpKTtcbiIpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAkcG9kVHlwZSBwb2RJbXAoKmlt
cCk7XG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRwb2RUeXBlIGVx
ICJmbG9hdCIpIHsgIyBTcGVjaWFsIGNhc2UgZm9yIEpTU1ZHTnVtYmVyCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpbXAgPSAiIC4g
SlNWYWx1ZVRvTmF0aXZlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgInZhbHVlIikgLiAiO1xuIik7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICBwb2RJbXAgPSAiIC4gSlNWYWx1ZVRvTmF0aXZlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwg
InZhbHVlIikgLiAiO1xuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICBpbXAuc2V0JGltcGxTZXR0ZXJGdW5jdGlvbk5hbWUoIiAuIEpTVmFsdWVUb05hdGl2
ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsICJ2YWx1ZSIpIC4gIik7XG4iKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHBvZEltcC5z
ZXQkaW1wbFNldHRlckZ1bmN0aW9uTmFtZSgiIC4gSlNWYWx1ZVRvTmF0aXZlKCRhdHRyaWJ1dGUt
PnNpZ25hdHVyZSwgInZhbHVlIikgLiAiKTtcbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgICAgICBzdGF0aWNfY2FzdDwkY2xhc3NOYW1lKj4odGhpc09iamVjdCktPmltcGwo
KS0+Y29tbWl0Q2hhbmdlKGltcCwgc3RhdGljX2Nhc3Q8JGNsYXNzTmFtZSo+KHRoaXNPYmplY3Qp
LT5jb250ZXh0KCkpO1xuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgIGltcC0+Y29tbWl0Q2hhbmdlKHBvZEltcCwgY2FzdGVkVGhpc09i
aik7XG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAkaW1wbENsYXNz
TmFtZSogaW1wID0gc3RhdGljX2Nhc3Q8JGltcGxDbGFzc05hbWUqPihzdGF0aWNfY2FzdDwkY2xh
c3NOYW1lKj4odGhpc09iamVjdCktPmltcGwoKSk7XG4iKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbXkgJG5hdGl2ZVZhbHVlID0gSlNWYWx1ZVRvTmF0aXZlKCRhdHRyaWJ1dGUt
PnNpZ25hdHVyZSwgInZhbHVlIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwO1xuIikgaWYgQHskYXR0
cmlidXRlLT5zZXR0ZXJFeGNlcHRpb25zfTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbXkgJHJlZmxlY3QgPSAkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyJSZWZsZWN0In07CkBAIC0xNTEzLDEwICsxNDgzLDggQEAgc3ViIEdlbmVyYXRlSW1wbGVt
ZW50YXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIsIGVjIikgaWYgQHskYXR0cmlidXRlLT5zZXR0ZXJFeGNlcHRpb25zfTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIpO1xuIik7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHNldERP
TUV4Y2VwdGlvbihleGVjLCBlYyk7XG4iKSBpZiBAeyRhdHRyaWJ1dGUtPnNldHRlckV4Y2VwdGlv
bnN9OwotCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1NWR1R5cGVOZWVk
aW5nQ29udGV4dFBhcmFtZXRlcigkaW1wbENsYXNzTmFtZSkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChzdGF0aWNfY2Fz
dDwkY2xhc3NOYW1lKj4odGhpc09iamVjdCktPmNvbnRleHQoKSlcbiIpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHN0YXRp
Y19jYXN0PCRjbGFzc05hbWUqPih0aGlzT2JqZWN0KS0+Y29udGV4dCgpLT5zdmdBdHRyaWJ1dGVD
aGFuZ2VkKHN0YXRpY19jYXN0PCRjbGFzc05hbWUqPih0aGlzT2JqZWN0KS0+aW1wbCgpLT5hc3Nv
Y2lhdGVkQXR0cmlidXRlTmFtZSgpKTtcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNTVkdDb250ZXh0Q2FjaGU6OnByb3Bh
Z2F0ZVNWR0RPTUNoYW5nZShjYXN0ZWRUaGlzT2JqLCBpbXAtPmFzc29jaWF0ZWRBdHRyaWJ1dGVO
YW1lKCkpO1xuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICB9CkBAIC0xNjAy
LDEyICsxNTcwLDggQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gSlNTVkdQT0RMaXN0Q3VzdG9tOjokZnVu
Y3Rpb25JbXBsZW1lbnRhdGlvbk5hbWU8JGNsYXNzTmFtZSwgIiAuIEdldE5hdGl2ZVR5cGUoJHN2
Z1BPRExpc3RUeXBlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAiPihjYXN0
ZWRUaGlzT2JqLCBleGVjLCBhcmdzLCB0byIgLiAkc3ZnUE9ETGlzdFR5cGUgLiAiKTtcbiIpOwog
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoJHBvZFR5cGUpIHsKLSAg
ICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNTVkdQT0RUeXBlV3Jh
cHBlcjwkcG9kVHlwZT4qIHdyYXBwZXIgPSBjYXN0ZWRUaGlzT2JqLT5pbXBsKCk7XG4iKTsKLSAg
ICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJHBvZFR5cGUgaW1wKCp3
cmFwcGVyKTtcbiIpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICRpbXBsQ2xhc3NOYW1lKiBpbXAgPSBzdGF0aWNf
Y2FzdDwkaW1wbENsYXNzTmFtZSo+KGNhc3RlZFRoaXNPYmotPmltcGwoKSk7XG4iKTsKLSAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJGlt
cGxUeXBlKiBpbXAgPSBzdGF0aWNfY2FzdDwkaW1wbFR5cGUqPihjYXN0ZWRUaGlzT2JqLT5pbXBs
KCkpO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJHBvZFR5
cGUgcG9kSW1wKCppbXApO1xuIikgaWYgJHBvZFR5cGU7CiAKICAgICAgICAgICAgICAgICBteSAk
bnVtUGFyYW1ldGVycyA9IEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfTsKIApAQCAtMTYyNyw3ICsx
NTkxLDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgICAgICB9CiAK
ICAgICAgICAgICAgICAgICBteSAkcGFyYW1JbmRleCA9IDA7Ci0gICAgICAgICAgICAgICAgbXkg
JGZ1bmN0aW9uU3RyaW5nID0gImltcCIgLiAoJHBvZFR5cGUgPyAiLiIgOiAiLT4iKSAuICRmdW5j
dGlvbkltcGxlbWVudGF0aW9uTmFtZSAuICIoIjsKKyAgICAgICAgICAgICAgICBteSAkZnVuY3Rp
b25TdHJpbmcgPSAoJHBvZFR5cGUgPyAicG9kSW1wLiIgOiAiaW1wLT4iKSAuICRmdW5jdGlvbklt
cGxlbWVudGF0aW9uTmFtZSAuICIoIjsKIAogICAgICAgICAgICAgICAgIG15ICRoYXNPcHRpb25h
bEFyZ3VtZW50cyA9IDA7CiAKQEAgLTE3MzgsMTEgKzE3MDIsMTAgQEAgc3ViIEdlbmVyYXRlSW1w
bGVtZW50YXRpb24KICAgICAgICAgaWYgKCRwb2RUeXBlKSB7CiAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIkpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1NWR1BPRFR5cGVXcmFwcGVyPCRwb2RUeXBl
Piogb2JqZWN0LCBTVkdFbGVtZW50KiBjb250ZXh0KVxuIik7CiAgICAgICAgIH0gZWxzaWYgKElz
U1ZHVHlwZU5lZWRpbmdDb250ZXh0UGFyYW1ldGVyKCRpbXBsQ2xhc3NOYW1lKSkgewotICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3Rh
dGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsICRpbXBsVHlwZSogb2Jq
ZWN0LCBTVkdFbGVtZW50KiBjb250ZXh0KVxuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIkpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCAkaW1wbFR5cGUqIG9iamVjdCwgU1ZHRWxlbWVudCogY29u
dGV4dClcbiIpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICJKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgJGltcGxUeXBlKiBvYmplY3QpXG4iKTsKICAgICAgICAgfQot
CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CiAgICAgICAgIGlmICgkcG9kVHlw
ZSkgewogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIGdldERPTU9i
amVjdFdyYXBwZXI8JGNsYXNzTmFtZSwgSlNTVkdQT0RUeXBlV3JhcHBlcjwkcG9kVHlwZT4gPihl
eGVjLCBnbG9iYWxPYmplY3QsIG9iamVjdCwgY29udGV4dCk7XG4iKTsKQEAgLTE4MDAsMTEgKzE3
NjMsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbkZ1bmN0aW9uQ2FsbCgpCiAgICAgaWYg
KCRmdW5jdGlvbi0+c2lnbmF0dXJlLT50eXBlIGVxICJ2b2lkIikgewogICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgJGluZGVudCAuICIkZnVuY3Rpb25TdHJpbmc7XG4iKTsKICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICRpbmRlbnQgLiAic2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTtcbiIp
IGlmIEB7JGZ1bmN0aW9uLT5yYWlzZXNFeGNlcHRpb25zfTsKLQotICAgICAgICBpZiAoJHBvZFR5
cGUpIHsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAkaW5kZW50IC4gIndyYXBwZXIt
PmNvbW1pdENoYW5nZShpbXAsIGNhc3RlZFRoaXNPYmotPmNvbnRleHQoKSk7XG4iKTsKLSAgICAg
ICAgfQotCisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAkaW5kZW50IC4gImltcC0+Y29tbWl0
Q2hhbmdlKHBvZEltcCwgY2FzdGVkVGhpc09iaik7XG4iKSBpZiAkcG9kVHlwZTsKICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICRpbmRlbnQgLiAicmV0dXJuIGpzVW5kZWZpbmVkKCk7XG4iKTsK
ICAgICB9IGVsc2UgewogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIiAuICRpbmRlbnQg
LiAiSlNDOjpKU1ZhbHVlIHJlc3VsdCA9ICIgLiBOYXRpdmVUb0pTVmFsdWUoJGZ1bmN0aW9uLT5z
aWduYXR1cmUsIDEsICRpbXBsQ2xhc3NOYW1lLCAiIiwgJGZ1bmN0aW9uU3RyaW5nLCAiY2FzdGVk
VGhpc09iaiIpIC4gIjtcbiIpOwpAQCAtMTgxMyw3ICsxNzcyLDcgQEAgc3ViIEdlbmVyYXRlSW1w
bGVtZW50YXRpb25GdW5jdGlvbkNhbGwoKQogICAgICAgICBpZiAoJHBvZFR5cGUgYW5kIG5vdCAk
ZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkltbXV0YWJsZSJ9KSB7
CiAgICAgICAgICAgICAjIEltbXV0YWJsZSBtZXRob2RzIGRvIG5vdCBjb21taXQgY2hhbmdlcyBi
YWNrIHRvIHRoZSBpbnN0YW5jZSwgdGh1cyBwcm9kdWNpbmcKICAgICAgICAgICAgICMgYSBuZXcg
aW5zdGFuY2UgcmF0aGVyIHRoYW4gbXV0YXRpbmcgZXhpc3Rpbmcgb25lLgotICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICRpbmRlbnQgLiAid3JhcHBlci0+Y29tbWl0Q2hhbmdlKGltcCwg
Y2FzdGVkVGhpc09iai0+Y29udGV4dCgpKTtcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICRpbmRlbnQgLiAiaW1wLT5jb21taXRDaGFuZ2UocG9kSW1wLCBjYXN0ZWRUaGlzT2Jq
KTtcbiIpOwogICAgICAgICB9CiAKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICRpbmRlbnQg
LiAicmV0dXJuIHJlc3VsdDtcbiIpOwpAQCAtMTkzNyw5ICsxODk2LDcgQEAgc3ViIE5hdGl2ZVRv
SlNWYWx1ZQogICAgICAgICByZXR1cm4gImpzU3RyaW5nKGV4ZWMsICR2YWx1ZSkiOwogICAgIH0K
ICAgICAKLSAgICAjIFNvbWUgU1ZHIGJpbmRpbmdzIGRvbid0IGhhdmUgc3BhY2UgdG8gc3RvcmUg
YSBnbG9iYWxPYmplY3QgcG9pbnRlciwgZm9yIHRob3NlLCB3ZSB1c2UgdGhlIGRlcHJlY2F0ZWRH
bG9iYWxPYmplY3RGb3JQcm90b3R5cGUgaGFjayBmb3Igbm93LgotICAgIG15ICRnbG9iYWxPYmpl
Y3QgPSBJc1NWR1R5cGVOZWVkaW5nQ29udGV4dFBhcmFtZXRlcigkaW1wbENsYXNzTmFtZSkgPyAi
ZGVwcmVjYXRlZEdsb2JhbE9iamVjdEZvclByb3RvdHlwZShleGVjKSIgOiAiJHRoaXNWYWx1ZS0+
Z2xvYmFsT2JqZWN0KCkiOwotCisgICAgbXkgJGdsb2JhbE9iamVjdCA9ICIkdGhpc1ZhbHVlLT5n
bG9iYWxPYmplY3QoKSI7CiAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1BvZFR5cGUoJHR5cGUp
KSB7CiAgICAgICAgICRpbXBsSW5jbHVkZXN7IkpTJHR5cGUuaCJ9ID0gMTsKIApAQCAtMTk1Nywy
NSArMTkxNCwxNiBAQCBzdWIgTmF0aXZlVG9KU1ZhbHVlCiAgICAgICAgICAgICBhbmQgJGNvZGVH
ZW5lcmF0b3ItPklzUG9kVHlwZVdpdGhXcml0ZWFibGVQcm9wZXJ0aWVzKCR0eXBlKQogICAgICAg
ICAgICAgYW5kIG5vdCBkZWZpbmVkICRzaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJJ
bW11dGFibGUifSkgewogICAgICAgICAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1BvZFR5cGUo
JGltcGxDbGFzc05hbWUpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJ0b0pTKGV4ZWMsICRn
bG9iYWxPYmplY3QsIEpTU1ZHU3RhdGljUE9EVHlwZVdyYXBwZXJXaXRoUE9EVHlwZVBhcmVudDwk
bmF0aXZlVHlwZSwgJGltcGxDbGFzc05hbWU+OjpjcmVhdGUoJHZhbHVlLCAkdGhpc1ZhbHVlLT5p
bXBsKCkpLmdldCgpLCAkdGhpc1ZhbHVlLT5jb250ZXh0KCkpIjsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gInRvSlMoZXhlYywgJGdsb2JhbE9iamVjdCwgSlNTVkdTdGF0aWNQT0RUeXBlV3JhcHBl
cldpdGhQT0RUeXBlUGFyZW50PCRuYXRpdmVUeXBlLCAkaW1wbENsYXNzTmFtZT46OmNyZWF0ZSgk
dmFsdWUsICR0aGlzVmFsdWUtPmltcGwoKSkuZ2V0KCksIEpTU1ZHQ29udGV4dENhY2hlOjpzdmdD
b250ZXh0Rm9yRE9NT2JqZWN0KGNhc3RlZFRoaXMpKSI7CiAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgIHJldHVybiAidG9KUyhleGVjLCAkZ2xvYmFsT2JqZWN0LCBKU1NWR1N0
YXRpY1BPRFR5cGVXcmFwcGVyV2l0aFBhcmVudDwkbmF0aXZlVHlwZSwgJGltcGxDbGFzc05hbWU+
OjpjcmVhdGUoaW1wLCAmJHtpbXBsQ2xhc3NOYW1lfTo6JGdldHRlciwgJiR7aW1wbENsYXNzTmFt
ZX06OiRzZXR0ZXIpLmdldCgpLCBpbXApIjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAg
ICAgICAgIGlmICgkaW1wbENsYXNzTmFtZUZvclZhbHVlQ29udmVyc2lvbiBlcSAiIikgewotICAg
ICAgICAgICAgIyBTVkdab29tRXZlbnQgaGFzIG5vIGNvbnRleHQoKSBwb2ludGVyLCBhbmQgaXMg
YWxzbyBub3QgYW4gU1ZHRWxlbWVudC4KLSAgICAgICAgICAgICMgVGhpcyBpcyBub3QgYSBwcm9i
bGVtLCBiZWNhdXNlIFNWR1pvb21FdmVudCBoYXMgbm8gcmVhZC93cml0ZSBwcm9wZXJ0aWVzLgot
ICAgICAgICAgICAgcmV0dXJuICJ0b0pTKGV4ZWMsICRnbG9iYWxPYmplY3QsIEpTU1ZHU3RhdGlj
UE9EVHlwZVdyYXBwZXI8JG5hdGl2ZVR5cGU+OjpjcmVhdGUoJHZhbHVlKS5nZXQoKSwgMCkiIGlm
ICRpbXBsQ2xhc3NOYW1lIGVxICJTVkdab29tRXZlbnQiOwotCi0gICAgICAgICAgICBpZiAoSXNT
VkdUeXBlTmVlZGluZ0NvbnRleHRQYXJhbWV0ZXIoJGltcGxDbGFzc05hbWUpKSB7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuICJ0b0pTKGV4ZWMsICRnbG9iYWxPYmplY3QsIEpTU1ZHU3RhdGljUE9E
VHlwZVdyYXBwZXI8JG5hdGl2ZVR5cGU+OjpjcmVhdGUoJHZhbHVlKS5nZXQoKSwgY2FzdGVkVGhp
c09iai0+Y29udGV4dCgpKSIgaWYgJGluRnVuY3Rpb25DYWxsOwotICAgICAgICAgICAgICAgIHJl
dHVybiAidG9KUyhleGVjLCAkZ2xvYmFsT2JqZWN0LCBKU1NWR1N0YXRpY1BPRFR5cGVXcmFwcGVy
PCRuYXRpdmVUeXBlPjo6Y3JlYXRlKCR2YWx1ZSkuZ2V0KCksICR0aGlzVmFsdWUtPmNvbnRleHQo
KSkiOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gInRvSlMo
ZXhlYywgJGdsb2JhbE9iamVjdCwgSlNTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcjwkbmF0aXZlVHlw
ZT46OmNyZWF0ZSgkdmFsdWUpLmdldCgpLCBpbXApIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fSBlbHNlIHsgIyBUaGVzZSBjbGFzc2VzLCBhbHdheXMgaGF2ZSBhIG1fY29udGV4dCBwb2ludGVy
IQotICAgICAgICAgICAgcmV0dXJuICJ0b0pTKGV4ZWMsICRnbG9iYWxPYmplY3QsIEpTU1ZHRHlu
YW1pY1BPRFR5cGVXcmFwcGVyQ2FjaGU8JG5hdGl2ZVR5cGUsICRpbXBsQ2xhc3NOYW1lRm9yVmFs
dWVDb252ZXJzaW9uPjo6bG9va3VwT3JDcmVhdGVXcmFwcGVyKGltcCwgJiR7aW1wbENsYXNzTmFt
ZUZvclZhbHVlQ29udmVyc2lvbn06OiRnZXR0ZXIsICYke2ltcGxDbGFzc05hbWVGb3JWYWx1ZUNv
bnZlcnNpb259Ojokc2V0dGVyKS5nZXQoKSwgJHRoaXNWYWx1ZS0+Y29udGV4dCgpKSI7CisgICAg
ICAgICAgICByZXR1cm4gInRvSlMoZXhlYywgJGdsb2JhbE9iamVjdCwgSlNTVkdTdGF0aWNQT0RU
eXBlV3JhcHBlcjwkbmF0aXZlVHlwZT46OmNyZWF0ZSgkdmFsdWUpLmdldCgpLCAwIC8qIG5vIGNv
bnRleHQgb24gcHVycG9zZSAqLykiOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0
dXJuICJ0b0pTKGV4ZWMsICRnbG9iYWxPYmplY3QsIEpTU1ZHRHluYW1pY1BPRFR5cGVXcmFwcGVy
Q2FjaGU8JG5hdGl2ZVR5cGUsICRpbXBsQ2xhc3NOYW1lRm9yVmFsdWVDb252ZXJzaW9uPjo6bG9v
a3VwT3JDcmVhdGVXcmFwcGVyKGltcCwgJiR7aW1wbENsYXNzTmFtZUZvclZhbHVlQ29udmVyc2lv
bn06OiRnZXR0ZXIsICYke2ltcGxDbGFzc05hbWVGb3JWYWx1ZUNvbnZlcnNpb259Ojokc2V0dGVy
KS5nZXQoKSwgSlNTVkdDb250ZXh0Q2FjaGU6OnN2Z0NvbnRleHRGb3JET01PYmplY3QoY2FzdGVk
VGhpcykpOyIKICAgICAgICAgfQogICAgIH0KIApAQCAtMjAxNiw3ICsxOTY0LDcgQEAgc3ViIE5h
dGl2ZVRvSlNWYWx1ZQogICAgIHJldHVybiAkdmFsdWUgaWYgJGNvZGVHZW5lcmF0b3ItPklzU1ZH
QW5pbWF0ZWRUeXBlKCR0eXBlKTsKIAogICAgIGlmIChJc1NWR1R5cGVOZWVkaW5nQ29udGV4dFBh
cmFtZXRlcigkdHlwZSkpIHsKLSAgICAgICAgbXkgJGNvbnRleHRQdHIgPSBJc1NWR1R5cGVOZWVk
aW5nQ29udGV4dFBhcmFtZXRlcigkaW1wbENsYXNzTmFtZSkgPyAiJHRoaXNWYWx1ZS0+Y29udGV4
dCgpIiA6ICJpbXAiOworICAgICAgICBteSAkY29udGV4dFB0ciA9IElzU1ZHVHlwZU5lZWRpbmdD
b250ZXh0UGFyYW1ldGVyKCRpbXBsQ2xhc3NOYW1lKSA/ICJKU1NWR0NvbnRleHRDYWNoZTo6c3Zn
Q29udGV4dEZvckRPTU9iamVjdChjYXN0ZWRUaGlzKSIgOiAiaW1wIjsKICAgICAgICAgcmV0dXJu
ICJ0b0pTKGV4ZWMsICRnbG9iYWxPYmplY3QsIFdURjo6Z2V0UHRyKCR2YWx1ZSksICRjb250ZXh0
UHRyKSI7CiAgICAgfQogCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdBbmdsZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvc3ZnL1NWR0FuZ2xlLmgJKHJldmlzaW9uIDUzNjU2KQorKysgV2ViQ29yZS9z
dmcvU1ZHQW5nbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsOCArMjcsNiBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLSAgICBjbGFzcyBTVkdTdHlsZWRFbGVtZW50OwotCiAgICAgY2xhc3Mg
U1ZHQW5nbGUgewogICAgIHB1YmxpYzoKICAgICAgICAgU1ZHQW5nbGUoKTsKQEAgLTU2LDkgKzU0
LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIG5ld1ZhbHVlU3BlY2lmaWVk
VW5pdHModW5zaWduZWQgc2hvcnQgdW5pdFR5cGUsIGZsb2F0IHZhbHVlSW5TcGVjaWZpZWRVbml0
cyk7CiAgICAgICAgIHZvaWQgY29udmVydFRvU3BlY2lmaWVkVW5pdHModW5zaWduZWQgc2hvcnQg
dW5pdFR5cGUpOwogCi0gICAgICAgIC8vIFRocm91Z2hvdXQgU1ZHIDEuMSAnU1ZHQW5nbGUnIGlz
IG9ubHkgdXNlZCBmb3IgJ1NWR01hcmtlckVsZW1lbnQnIChvcmllbnQtYW5nbGUpCi0gICAgICAg
IGNvbnN0IFF1YWxpZmllZE5hbWUmIGFzc29jaWF0ZWRBdHRyaWJ1dGVOYW1lKCkgY29uc3QgeyBy
ZXR1cm4gU1ZHTmFtZXM6Om9yaWVudEF0dHI7IH0KLQogICAgIHByaXZhdGU6CiAgICAgICAgIFNW
R0FuZ2xlVHlwZSBtX3VuaXRUeXBlOwogICAgICAgICBmbG9hdCBtX3ZhbHVlOwpJbmRleDogV2Vi
Q29yZS9zdmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRpby5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
c3ZnL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW8uaAkocmV2aXNpb24gNTM2NTYpCisrKyBXZWJDb3Jl
L3N2Zy9TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmgJKHdvcmtpbmcgY29weSkKQEAgLTg0LDggKzg0
LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIFN0cmluZyB2YWx1ZUFzU3RyaW5n
KCkgY29uc3Q7CiAKLSAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXNzb2NpYXRlZEF0dHJp
YnV0ZU5hbWUoKSBjb25zdCB7IHJldHVybiBTVkdOYW1lczo6cHJlc2VydmVBc3BlY3RSYXRpb0F0
dHI7IH0KLQogICAgIHByaXZhdGU6CiAgICAgICAgIHVuc2lnbmVkIHNob3J0IG1fYWxpZ247CiAg
ICAgICAgIHVuc2lnbmVkIHNob3J0IG1fbWVldE9yU2xpY2U7CkluZGV4OiBXZWJDb3JlL3N2Zy9T
VkdUcmFuc2Zvcm0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm0uaAko
cmV2aXNpb24gNTM2NTYpCisrKyBXZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm0uaAkod29ya2luZyBj
b3B5KQpAQCAtNTQsNyArNTQsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGZsb2F0
IGFuZ2xlKCkgY29uc3Q7CiAgICAgICAgIEZsb2F0UG9pbnQgcm90YXRpb25DZW50ZXIoKSBjb25z
dDsKIAotLy8gICAgICAgIHZvaWQgc2V0TWF0cml4KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
Jik7CiAgICAgICAgIHZvaWQgc2V0TWF0cml4KFRyYW5zZm9ybWF0aW9uTWF0cml4KTsKIAogICAg
ICAgICB2b2lkIHNldFRyYW5zbGF0ZShmbG9hdCB0eCwgZmxvYXQgdHkpOwpAQCAtNjksOSArNjgs
NiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIAogICAgICAgICBib29sIGlzVmFsaWQo
KTsKIAotICAgICAgICAvLyBUaHJvdWdob3V0IFNWRyAxLjEgJ1NWR1RyYW5zZm9ybScgaXMgb25s
eSB1c2VkIGZvciB0aGUgJ3RyYW5zZm9ybScgYXR0cmlidXRlCi0gICAgICAgIGNvbnN0IFF1YWxp
ZmllZE5hbWUmIGFzc29jaWF0ZWRBdHRyaWJ1dGVOYW1lKCkgY29uc3QgeyByZXR1cm4gU1ZHTmFt
ZXM6OnRyYW5zZm9ybUF0dHI7IH0KLQogICAgIHByaXZhdGU6CiAgICAgICAgIFNWR1RyYW5zZm9y
bVR5cGUgbV90eXBlOwogICAgICAgICBmbG9hdCBtX2FuZ2xlOwpAQCAtOTMsNSArODksMyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKICNlbmRpZiAvLyBFTkFCTEUoU1ZHKQogI2VuZGlmCi0KLS8v
IHZpbTp0cz00Om5vZXQK
</data>
<flag name="review"
          id="29567"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>