<?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>157466</bug_id>
          
          <creation_ts>2016-05-08 14:46:42 -0700</creation_ts>
          <short_desc>Change Notification constructor to take an IDL dictionary instead of a WebCore::Dictionary</short_desc>
          <delta_ts>2016-05-10 14:03:33 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Bindings</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>achristensen</cc>
    
    <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1191098</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-05-08 14:46:42 -0700</bug_when>
    <thetext>Change Notification constructor to take an IDL dictionary instead of a WebCore::Dictionary</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1191101</commentid>
    <comment_count>1</comment_count>
      <attachid>278375</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-05-08 14:59:13 -0700</bug_when>
    <thetext>Created attachment 278375
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1191193</commentid>
    <comment_count>2</comment_count>
      <attachid>278375</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-05-09 09:23:15 -0700</bug_when>
    <thetext>Comment on attachment 278375
Patch

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

&gt; Source/WebCore/ChangeLog:8
&gt; +        * Modules/notifications/DOMWindowNotifications.idl: Simplified conditionals.

This change looks good, but it also looks like the GTK build failure is related to this.  GTK has NOTIFICATIONS on but LEGACY_NOTIFICATIONS off.  EFL has both off.  GTK would probably compile without this change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1191241</commentid>
    <comment_count>3</comment_count>
      <attachid>278375</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-05-09 12:13:22 -0700</bug_when>
    <thetext>Comment on attachment 278375
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:8
&gt;&gt; +        * Modules/notifications/DOMWindowNotifications.idl: Simplified conditionals.
&gt; 
&gt; This change looks good, but it also looks like the GTK build failure is related to this.  GTK has NOTIFICATIONS on but LEGACY_NOTIFICATIONS off.  EFL has both off.  GTK would probably compile without this change.

It’s true that this change broke the GTK build. The issue, though, is that the GObject bindings generation script doesn’t correctly handle #include generation when code uses [Conditional], not so much the particular configuration. EFL builds because it doesn’t generate GObject bindings.

I guess I will roll that change out and land without it.

I’m increasingly worried about how the Objective-C and GObject bindings are holding us back, for little benefit. There are lots of new DOM APIs that we can’t express in those bindings. I wonder if there is a way we can freeze them and make them less of a maintenance burden.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1191264</commentid>
    <comment_count>4</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-05-09 12:44:06 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; I’m increasingly worried about how the Objective-C and GObject bindings are
&gt; holding us back, for little benefit. There are lots of new DOM APIs that we
&gt; can’t express in those bindings. I wonder if there is a way we can freeze
&gt; them and make them less of a maintenance burden.
ObjC bindings are only accessible from WebKit1, right?  Are they accessible from within the InjectedBundle?  Why do we even have gobject bindings when gtk only supports WebKit2?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1191331</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-05-09 15:18:11 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; ObjC bindings are only accessible from WebKit1, right?

I think that&apos;s right.

&gt; Are they accessible from within the InjectedBundle?

I don&apos;t think they are.

&gt; Why do we even have gobject bindings when gtk only supports WebKit2?

We need to find out the answer to this. Who would know the answer?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1191335</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-05-09 15:23:03 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; ObjC bindings are only accessible from WebKit1, right?
&gt; 
&gt; I think that&apos;s right.
&gt; 
&gt; &gt; Are they accessible from within the InjectedBundle?
&gt; 
&gt; I don&apos;t think they are.
&gt; 
&gt; &gt; Why do we even have gobject bindings when gtk only supports WebKit2?
&gt; 
&gt; We need to find out the answer to this. Who would know the answer?

KaL or mcatanzaro in cc?
I thought they were exposed via InjectedBundle but I am not sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1191391</commentid>
    <comment_count>7</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-05-09 17:09:51 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; KaL or mcatanzaro in cc?
&gt; I thought they were exposed via InjectedBundle but I am not sure.

The GObject bindings are indeed exposed via InjectedBundle. They&apos;re used by many applications and they&apos;re a critical advantage over Chromium.

We don&apos;t want to hold back your development, though. Are there other issues we need to address besides &quot;GObject bindings generation script doesn’t correctly handle #include generation when code uses [Conditional]&quot; (which sounds fixable)?

Frankly, the bindings generation is rather arcane. Ideally there would be a quick and *easy* way to skip an entire problematic IDL file. Then you&apos;d be able to proceed here without waiting for us, breaking only a subset of our bindings and not our entire build, and we (well, Carlos, hehe ;) could come along and fix the missing bindings later. Let&apos;s wait for Carlos to comment; he understands these bindings much better than I do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1191416</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-05-09 19:27:16 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; We don&apos;t want to hold back your development, though. Are there other issues
&gt; we need to address besides &quot;GObject bindings generation script doesn’t
&gt; correctly handle #include generation when code uses [Conditional]&quot; (which
&gt; sounds fixable)?

Yes, there are lots of issues.

Some of the up and coming issues will be support for default values for function arguments, optional arguments, improved handling for nullable arguments (I did a stopgap hack for this), enumeration types, dictionary types, callback function types, union types, promise types, and USVString.

Also handling of new way of dealing with DOM exceptions. We are planning on making them part of the return value instead of a separate ExceptionCode in argument.

&gt; Frankly, the bindings generation is rather arcane.

No question about it.

&gt; Ideally there would be a quick and *easy* way to skip an entire problematic
&gt; IDL file.

Some variation on [Conditional] would be a good way to do that, I suppose. Might want an easy to do this for individual attributes and functions as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1191417</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-05-09 19:30:17 -0700</bug_when>
    <thetext>Committed r200607: &lt;http://trac.webkit.org/changeset/200607&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1191459</commentid>
    <comment_count>10</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-05-09 23:27:13 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; We don&apos;t want to hold back your development, though. Are there other issues
&gt; &gt; we need to address besides &quot;GObject bindings generation script doesn’t
&gt; &gt; correctly handle #include generation when code uses [Conditional]&quot; (which
&gt; &gt; sounds fixable)?
&gt; 
&gt; Yes, there are lots of issues.

Some time ago we defined a set of DOM API that we consider &quot;stable&quot; and the rest is considered &quot;unstable&quot;. We have a script that the bots run to detect API breaks in our stable DOM bindings API, they are usually changes in the type of parameters or methods that used to raise exceptions or the other way around. This made the maintenance of the DOM bindings easier for us, but also for the other ports that don&apos;t need to worry about breaking our bindings. It&apos;s ok for us if you break the bindings, or the API, as long as it builds. So, I think the best solution would be to define easy ways in our port to skip the generation of anything in the bindings, from a single method to the whole idl file. 

&gt; Some of the up and coming issues will be support for default values for
&gt; function arguments, optional arguments, improved handling for nullable
&gt; arguments (I did a stopgap hack for this), enumeration types, dictionary
&gt; types, callback function types, union types, promise types, and USVString.

Some of those features could be implemented in the GObject DOM bindings, I guess they will not affect our &quot;stable&quot; API. We just need to ensure you guys can work on that without having to worry about the GObject bindings. 

&gt; Also handling of new way of dealing with DOM exceptions. We are planning on
&gt; making them part of the return value instead of a separate ExceptionCode in
&gt; argument.
&gt; 
&gt; &gt; Frankly, the bindings generation is rather arcane.
&gt; 
&gt; No question about it.
&gt; 
&gt; &gt; Ideally there would be a quick and *easy* way to skip an entire problematic
&gt; &gt; IDL file.
&gt; 
&gt; Some variation on [Conditional] would be a good way to do that, I suppose.
&gt; Might want an easy to do this for individual attributes and functions as
&gt; well.

The conditional issue sounds like a bug because we have code in our script to deal with conditional features.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1191462</commentid>
    <comment_count>11</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-05-09 23:37:40 -0700</bug_when>
    <thetext>Looking at the GTK build fix in r200614 (thank you very much Alex) it seems the problem was not in the bindings after all. In any case, I was thinking that we could add a build flag, something like ENABLE(GOBJECT_DOM_UNSTABLE_API) or something like that, that you can easily disable (just changing a #define in config.h instead of dealing with build files) if something is broken. Then, I&apos;ll fix the issue and enable it again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1191643</commentid>
    <comment_count>12</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-05-10 14:02:49 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; The conditional issue sounds like a bug because we have code in our script
&gt; to deal with conditional features.

The problem in the GObject bindings handling of conditional features is that it makes the contents of the file conditional in the proper way, but does not make the #includes conditional in the proper way. CodeGeneratorJS.pm bindings has an approach to this that separate tracks the conditional for each include, but this is not done in CodeGeneratorGObject.pm. Sometimes I wish much more of the code was shared.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1191644</commentid>
    <comment_count>13</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-05-10 14:03:33 -0700</bug_when>
    <thetext>There is at least one file that has an #if GOBJECT driven by this issue and it was the same issue I ran into here.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>278375</attachid>
            <date>2016-05-08 14:59:13 -0700</date>
            <delta_ts>2016-05-09 09:23:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-157466-20160508145958.patch</filename>
            <type>text/plain</type>
            <size>66776</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAwNTYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzgzMmVlNzM3YWU4MzEw
NDZlMDU5MDI0NWViYzg2NjQ4NWEzMTgyNy4uMGQzOTE0ZTlkN2E1YWRjMDNmZWQyNDQyZjNiMDg4
MDMyNTkwMDllMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcyIEBACisyMDE2LTA1LTA4ICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBDaGFuZ2UgTm90aWZpY2F0aW9u
IGNvbnN0cnVjdG9yIHRvIHRha2UgYW4gSURMIGRpY3Rpb25hcnkgaW5zdGVhZCBvZiBhIFdlYkNv
cmU6OkRpY3Rpb25hcnkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE1NzQ2NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogTW9kdWxlcy9ub3RpZmljYXRpb25zL0RPTVdpbmRvd05vdGlmaWNhdGlvbnMuaWRs
OiBTaW1wbGlmaWVkIGNvbmRpdGlvbmFscy4KKworICAgICAgICAqIE1vZHVsZXMvbm90aWZpY2F0
aW9ucy9Ob3RpZmljYXRpb24uY3BwOiBHb3QgcmlkIG9mIHVubmVlZGVkIGluY2x1ZGVzLgorICAg
ICAgICAoV2ViQ29yZTo6Tm90aWZpY2F0aW9uOjpOb3RpZmljYXRpb24pOiBEZWxldGVkIHRoZSB1
bnVzZWQgZGVmYXVsdCBjb25zdHJ1Y3Rvci4gQ2hhbmdlZAorICAgICAgICBOb3RpZmljYXRpb25D
ZW50ZXIgYXJndW1lbnQgdG8gYmUgcmVmZXJlbmNlIHJhdGhlciB0aGFuIFBhc3NSZWZQdHIuIENo
YW5nZWQgb25lIG9mIHRoZQorICAgICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0IGFyZ3VtZW50
cyB0byBiZSBhIERvY3VtZW50IHNpbmNlIHRoZSBjb2RlIHJlbGllcyBvbiB0aGF0IGFscmVhZHku
CisgICAgICAgIFVzZWQgdGhlIGxhbWJkYSBmb3JtIG9mIHRpbWVyIGNyZWF0aW9uIGluc3RlYWQg
b2YgdGhlIGNsYXNzIG1lbWJlciBmb3JtLiBBZGRlZCBhIEZJWE1FCisgICAgICAgIGFib3V0IHdo
ZW4gbV9ub3RpZmljYXRpb25DZW50ZXIgY2FuIGJlIG51bGwuCisgICAgICAgIChXZWJDb3JlOjpO
b3RpZmljYXRpb246OmNyZWF0ZSk6IENoYW5nZWQgTm90aWZpY2F0aW9uQ2VudGVyIGFyZ3VtZW50
IHRvIGJlIHJlZmVyZW5jZQorICAgICAgICByYXRoZXIgdGhhbiBQYXNzUmVmUHRyLiBDaGFuZ2Vk
IG9wdGlvbnMgYXJndW1lbnQgdG8gYmUgT3B0aW9ucyByYXRoZXIgdGhhbiBEaWN0aW9uYXJ5Lgor
ICAgICAgICAoV2ViQ29yZTo6ZGlyZWN0aW9uU3RyaW5nKTogQWRkZWQuIEhlbHBlciBiZWNhdXNl
IHRoZSBjbGFzcyBzdGlsbCB3YW50cyB0byBzdG9yZSB0aGUKKyAgICAgICAgZGlyZWN0aW9uIGFz
IGEgc3RyaW5nLCBhdCBsZWFzdCBmb3Igbm93LgorICAgICAgICAoV2ViQ29yZTo6Tm90aWZpY2F0
aW9uOjpzaG93KTogU3RyZWFtbGluZWQgdGhlIGNvZGUgYSBiaXQuCisgICAgICAgIChXZWJDb3Jl
OjpOb3RpZmljYXRpb246OnRhc2tUaW1lckZpcmVkKTogRGVsZXRlZC4gTm90IG5lZWRlZCBub3cg
dGhhdCB3ZSB1c2UgYSBsYW1iZGEKKyAgICAgICAgaW5zaWRlIHRoZSBjb25zdHJ1Y3Rvci4KKyAg
ICAgICAgKFdlYkNvcmU6Ok5vdGlmaWNhdGlvbjo6cGVybWlzc2lvbik6IFJlbW92ZWQgdW5uZWVk
ZWQgY29uc3QgZnJvbSByZXR1cm4gdHlwZS4KKyAgICAgICAgKFdlYkNvcmU6Ok5vdGlmaWNhdGlv
bjo6cGVybWlzc2lvblN0cmluZyk6IERpdHRvLgorCisgICAgICAgICogTW9kdWxlcy9ub3RpZmlj
YXRpb25zL05vdGlmaWNhdGlvbi5oOiBVc2VkIHByYWdtYSBvbmNlLCB1cGRhdGVkIGZvciBjaGFu
Z2VzIGFib3ZlLgorICAgICAgICBSZW1vdmVkIGEgbnVtYmVyIG9mIHVudXNlZCBmdW5jdGlvbnMs
IGluY2x1ZGluZyBjYW5jZWwsIHNldEljb25VUkwsIHNldExhbmcsCisgICAgICAgIHN0b3BMb2Fk
aW5nSWNvbiwgZGV0YWNoUHJlc2VudGVyLCBzZXRCb2R5LCBzdGFydExvYWRpbmdJY29uLCBmaW5p
c2hMb2FkaW5nSWNvbiwgYW5kCisgICAgICAgIHRhc2tUaW1lckZpcmVkLgorCisgICAgICAgICog
TW9kdWxlcy9ub3RpZmljYXRpb25zL05vdGlmaWNhdGlvbi5pZGw6IEFkZCBOb3RpZmljYXRpb25P
cHRpb25zIGFuZCBwYXNzIGl0IGluc3RlYWQKKyAgICAgICAgb2YgRGljdGlvbmFyeSB0byB0aGUg
Y29uc3RydWN0b3IuIE5vdGUgdGhhdCB0aGlzIGlzIG9ubHkgYSBzdWJzZXQgb2Ygd2hhdCBpcwor
ICAgICAgICBjdXJyZW50bHkgc3BlY2lmaWVkIGluIHRoZSBOb3RpZmljYXRpb25zIEFQSSBkb2N1
bWVudC4gVGhlIGxhdGVzdCBkb2N1bWVudCBzcGVjaWZpZXMKKyAgICAgICAgYSBtdWNoIG1vcmUg
Y29tcGxleCBmZWF0dXJlIHdpdGggbG90cyBtb3JlIG9wdGlvbnMuCisKKyAgICAgICAgKiBNb2R1
bGVzL25vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uQ2VudGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Ok5vdGlmaWNhdGlvbkNlbnRlcjo6Y3JlYXRlTm90aWZpY2F0aW9uKTogUGFzcyBhIHJlZmVy
ZW5jZSByYXRoZXIgdGhhbiBhCisgICAgICAgIHBvaW50ZXIgdG8gdGhpcy4KKyAgICAgICAgKiBN
b2R1bGVzL25vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uQ2xpZW50Lmg6IFVzZSBwcmFnbWEgb25j
ZS4gUmVtb3ZlZCB1bm5lZWRlZAorICAgICAgICBpbmNsdWRlcyBhbmQgZm9yd2FyZCBkZWNsYXJh
dGlvbnMuIEZpeGVkICNpZiB0byBiZSBlYXNpZXIgdG8gcmVhZC4KKworICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTRE9NQ29udmVydC5oOiBSZXdvcmtlZCB0aGUgY29udmVydCBmdW5jdGlvbnMgdG8g
dXNlIENvbnZlcnRlciBhbmQKKyAgICAgICAgRGVmYXVsdENvbnZlcnRlciBzdHJ1Y3RzIHNvIHdl
IGNhbiBkbyBwYXJ0aWFsIHNwZWNpYWxpemF0aW9uIGluIHRoZSBmdXR1cmUgYW5kIHNvCisgICAg
ICAgIHdlIGNhbiBnZXQgY3VzdG9tIHR5cGVzIGZvciBvcHRpb25hbCB2YWx1ZXMuIFVzZWQgdGhp
cyB0byBtYWtlIGFuIG9wdGlvbmFsIFN0cmluZworICAgICAgICBqdXN0IGJlIGEgbnVsbCBTdHJp
bmcsIHNvIGl0IHdvbid0IHRyeSB0byB1c2UgT3B0aW9uYWw8U3RyaW5nPiBpbnN0ZWFkLiBNaWdo
dCBnZXQKKyAgICAgICAgbW9yZSBjb21wbGV4IGxhdHRlciB3aGVuIHdlIGFkZCBzdXBwb3J0IGZv
ciBudWxsYWJsZS4KKworICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpT
LnBtOgorICAgICAgICAoR2VuZXJhdGVFbnVtZXJhdGlvbkltcGxlbWVudGF0aW9uQ29udGVudCk6
IEdlbmVyYXRlIGEgYmxhbmsgbGluZSB0byBtYWtlIHRoZSBvdXRwdXQKKyAgICAgICAgc2xpZ2h0
bHkgY2xlYXJlci4gVHdlYWtlZCBhIGNvbW1lbnQuCisgICAgICAgIChHZW5lcmF0ZURlZmF1bHRW
YWx1ZSk6IEFkZGVkLiBDb252ZXJ0cyB0aGUgZGVmYXVsdCBzeW50YXggZnJvbSBJREwgaW50byB0
aGUgc3ludGF4CisgICAgICAgIG5lZWRlZCBpbiBDKysgY29kZS4KKyAgICAgICAgKEdlbmVyYXRl
RGVmYXVsdFZhbHVlV2l0aExlYWRpbmdDb21tYSk6IEFkZGVkLiBIZWxwZXIgZm9yIHVzZSBiZWxv
dy4KKyAgICAgICAgKEdlbmVyYXRlRGljdGlvbmFyeUltcGxlbWVudGF0aW9uQ29udGVudCk6IFVz
ZSBHZW5lcmF0ZURlZmF1bHRWYWx1ZSBhbmQKKyAgICAgICAgR2VuZXJhdGVEZWZhdWx0VmFsdWVX
aXRoTGVhZGluZ0NvbW1hIHRvIG1ha2UgZGVmYXVsdCB2YWx1ZXMuCisgICAgICAgIChHZW5lcmF0
ZVBhcmFtZXRlcnNDaGVjayk6IFVzZSBHZW5lcmF0ZURlZmF1bHRWYWx1ZSBoZXJlIGluIHRoZSBl
bnVtZXJhdGlvbiBjb2RlCisgICAgICAgIHBhdGguIFRoaXMgaXMgYSBzdGVwIGluIHRoZSBkaXJl
Y3Rpb24gb2YgYmVpbmcgYWJsZSB0byBtYWtlIHRoZSB3aG9sZSB0aGluZyBtb3JlCisgICAgICAg
IGdlbmVyaWMgaW4gdGhlIGZ1dHVyZS4KKworICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouaDoKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvT2JqQy9ET01UZXN0T2JqLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L09iakMvRE9NVGVzdE9iai5tbToKKyAgICAgICAgUmVnZW5lcmF0ZWQuCisKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGw6IFNpbXBsaWZpZWQgYW5kIGV4dGVuZGVk
IHNvbWUgb2YgdGhlIHRlc3QgY2FzZXMKKyAgICAgICAgdG8gY292ZXIgbW9yZSBjb21iaW5hdGlv
bnMgb2YgdGhlIGRpY3Rpb25hcnkgYW5kIGVudW1lcmF0aW9uIHN1cHBvcnQuCisKIDIwMTYtMDUt
MDggIERhdmlkIEtpbHplciAgPGRka2lsemVyQGFwcGxlLmNvbT4KIAogICAgICAgICBSb2xsIG91
dDogVGhyZWFkU2FuaXRpemVyOiBEYXRhIHJhY2UgYW5kIHRocmVhZCBsZWFrIGluIFdlYkNvcmU6
OlNjcm9sbGluZ1RocmVhZDo6Y3JlYXRlVGhyZWFkSWZOZWVkZWQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbm90aWZpY2F0aW9ucy9ET01XaW5kb3dOb3RpZmljYXRpb25zLmlk
bCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbm90aWZpY2F0aW9ucy9ET01XaW5kb3dOb3RpZmlj
YXRpb25zLmlkbAppbmRleCA1MGRkZmIyZGI3MmI0ZWQ5YmUwNDk3ZmViZWE1NmFmMWQyMjg3Yzgy
Li4yNDMxZjc0NmM5M2ZhNTA3OTIzZGIyYTcxYmFjOGJhMjdlYTY1OGIxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL25vdGlmaWNhdGlvbnMvRE9NV2luZG93Tm90aWZpY2F0aW9u
cy5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9ub3RpZmljYXRpb25zL0RPTVdpbmRv
d05vdGlmaWNhdGlvbnMuaWRsCkBAIC0yNSwxMCArMjUsNyBAQAogICovCiAKIFsKLSAgICBDb25k
aXRpb25hbD1OT1RJRklDQVRJT05TfExFR0FDWV9OT1RJRklDQVRJT05TLAorICAgIENvbmRpdGlv
bmFsPUxFR0FDWV9OT1RJRklDQVRJT05TLAogXSBwYXJ0aWFsIGludGVyZmFjZSBET01XaW5kb3cg
ewotI2lmIGRlZmluZWQoRU5BQkxFX0xFR0FDWV9OT1RJRklDQVRJT05TKSAmJiBFTkFCTEVfTEVH
QUNZX05PVElGSUNBVElPTlMKICAgICByZWFkb25seSBhdHRyaWJ1dGUgTm90aWZpY2F0aW9uQ2Vu
dGVyIHdlYmtpdE5vdGlmaWNhdGlvbnM7Ci0jZW5kaWYKIH07Ci0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb24uY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9ub3RpZmljYXRpb25zL05vdGlmaWNhdGlvbi5jcHAKaW5kZXggYTMy
MmQzM2JhNmUzMDQxNDA5ZTZkYzc0NDIyNGMzZGY3MjFkOGU4ZC4uNjgyYzdhMjU5NTI2NmViMDhk
MTljM2RkNjAwZDM1NTIwZmQ1NzQzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9ub3RpZmljYXRpb25zL05vdGlmaWNhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9ub3RpZmljYXRpb25zL05vdGlmaWNhdGlvbi5jcHAKQEAgLTEsNiArMSw2IEBACiAvKgog
ICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDExLCAyMDEyLCAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKQEAgLTM3LDM0ICszNywyNCBAQAogCiAjaW5jbHVkZSAiRE9NV2luZG93LmgiCiAjaW5jbHVk
ZSAiRE9NV2luZG93Tm90aWZpY2F0aW9ucy5oIgotI2luY2x1ZGUgIkRpY3Rpb25hcnkuaCIKICNp
bmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkVycm9yRXZlbnQuaCIKKyNpbmNsdWRlICJF
dmVudC5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJOb3RpZmljYXRpb25D
ZW50ZXIuaCIKLSNpbmNsdWRlICJOb3RpZmljYXRpb25DbGllbnQuaCIKICNpbmNsdWRlICJOb3Rp
ZmljYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiTm90aWZpY2F0aW9uUGVybWlzc2lvbkNh
bGxiYWNrLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCi0jaW5jbHVkZSAiUmVzb3Vy
Y2VSZXNwb25zZS5oIgotI2luY2x1ZGUgIlRocmVhZGFibGVMb2FkZXIuaCIKKyNpbmNsdWRlICJW
b2lkQ2FsbGJhY2suaCIKICNpbmNsdWRlICJXaW5kb3dGb2N1c0FsbG93ZWRJbmRpY2F0b3IuaCIK
LSNpbmNsdWRlICJXb3JrZXJHbG9iYWxTY29wZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LU5vdGlmaWNhdGlvbjo6Tm90aWZpY2F0aW9uKCkKLSAgICA6IEFjdGl2ZURPTU9iamVjdChudWxs
cHRyKQotewotfQotCiAjaWYgRU5BQkxFKExFR0FDWV9OT1RJRklDQVRJT05TKQotTm90aWZpY2F0
aW9uOjpOb3RpZmljYXRpb24oY29uc3QgU3RyaW5nJiB0aXRsZSwgY29uc3QgU3RyaW5nJiBib2R5
LCBjb25zdCBTdHJpbmcmIGljb25VUkksIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQs
IEV4Y2VwdGlvbkNvZGUmIGVjLCBQYXNzUmVmUHRyPE5vdGlmaWNhdGlvbkNlbnRlcj4gcHJvdmlk
ZXIpCisKK05vdGlmaWNhdGlvbjo6Tm90aWZpY2F0aW9uKGNvbnN0IFN0cmluZyYgdGl0bGUsIGNv
bnN0IFN0cmluZyYgYm9keSwgY29uc3QgU3RyaW5nJiBpY29uVVJJLCBTY3JpcHRFeGVjdXRpb25D
b250ZXh0JiBjb250ZXh0LCBFeGNlcHRpb25Db2RlJiBlYywgTm90aWZpY2F0aW9uQ2VudGVyJiBu
b3RpZmljYXRpb25DZW50ZXIpCiAgICAgOiBBY3RpdmVET01PYmplY3QoJmNvbnRleHQpCiAgICAg
LCBtX3RpdGxlKHRpdGxlKQogICAgICwgbV9ib2R5KGJvZHkpCi0gICAgLCBtX3N0YXRlKElkbGUp
Ci0gICAgLCBtX25vdGlmaWNhdGlvbkNlbnRlcihwcm92aWRlcikKKyAgICAsIG1fbm90aWZpY2F0
aW9uQ2VudGVyKCZub3RpZmljYXRpb25DZW50ZXIpCiB7CiAgICAgaWYgKG1fbm90aWZpY2F0aW9u
Q2VudGVyLT5jaGVja1Blcm1pc3Npb24oKSAhPSBOb3RpZmljYXRpb25DbGllbnQ6OlBlcm1pc3Np
b25BbGxvd2VkKSB7CiAgICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOwpAQCAtNzcsMjAgKzY3LDI0
IEBAIE5vdGlmaWNhdGlvbjo6Tm90aWZpY2F0aW9uKGNvbnN0IFN0cmluZyYgdGl0bGUsIGNvbnN0
IFN0cmluZyYgYm9keSwgY29uc3QgU3RyaW5nCiAgICAgICAgIHJldHVybjsKICAgICB9CiB9CisK
ICNlbmRpZgogCiAjaWYgRU5BQkxFKE5PVElGSUNBVElPTlMpCi1Ob3RpZmljYXRpb246Ok5vdGlm
aWNhdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIHRp
dGxlKQotICAgIDogQWN0aXZlRE9NT2JqZWN0KCZjb250ZXh0KQorCitOb3RpZmljYXRpb246Ok5v
dGlmaWNhdGlvbihEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgdGl0bGUpCisgICAg
OiBBY3RpdmVET01PYmplY3QoJmRvY3VtZW50KQogICAgICwgbV90aXRsZSh0aXRsZSkKICAgICAs
IG1fc3RhdGUoSWRsZSkKLSAgICAsIG1fdGFza1RpbWVyKHN0ZDo6bWFrZV91bmlxdWU8VGltZXI+
KCp0aGlzLCAmTm90aWZpY2F0aW9uOjp0YXNrVGltZXJGaXJlZCkpCisgICAgLCBtX25vdGlmaWNh
dGlvbkNlbnRlcihET01XaW5kb3dOb3RpZmljYXRpb25zOjp3ZWJraXROb3RpZmljYXRpb25zKCpk
b2N1bWVudC5kb21XaW5kb3coKSkpCisgICAgLCBtX3Rhc2tUaW1lcihzdGQ6Om1ha2VfdW5pcXVl
PFRpbWVyPihbdGhpc10gKCkgeyBzaG93KCk7IH0pKQogewotICAgIG1fbm90aWZpY2F0aW9uQ2Vu
dGVyID0gRE9NV2luZG93Tm90aWZpY2F0aW9uczo6d2Via2l0Tm90aWZpY2F0aW9ucygqZG93bmNh
c3Q8RG9jdW1lbnQ+KGNvbnRleHQpLmRvbVdpbmRvdygpKTsKLSAgICAKKyAgICAvLyBGSVhNRTog
U2VlbXMgdGhhdCBtX25vdGlmaWNhdGlvbkNlbnRlciBjYW4gYmUgbnVsbCBzbyBzaG91bGQgbm90
IGJlIGNoYW5nZWQgZnJvbSBSZWZQdHIgdG8gUmVmLgorICAgIC8vIEJ1dCB0aGUgcmVzdCBvZiB0
aGUgY29kZSBpbiB0aGlzIGNsYXNzIGlzbid0IHRyeWluZyB0byBoYW5kbGUgdGhhdCBjYXNlLgog
ICAgIEFTU0VSVChtX25vdGlmaWNhdGlvbkNlbnRlci0+Y2xpZW50KCkpOwogICAgIG1fdGFza1Rp
bWVyLT5zdGFydE9uZVNob3QoMCk7CiB9CisKICNlbmRpZgogCiBOb3RpZmljYXRpb246On5Ob3Rp
ZmljYXRpb24oKSAKQEAgLTk4LDM2ICs5Miw1MCBAQCBOb3RpZmljYXRpb246On5Ob3RpZmljYXRp
b24oKQogfQogCiAjaWYgRU5BQkxFKExFR0FDWV9OT1RJRklDQVRJT05TKQotUmVmPE5vdGlmaWNh
dGlvbj4gTm90aWZpY2F0aW9uOjpjcmVhdGUoY29uc3QgU3RyaW5nJiB0aXRsZSwgY29uc3QgU3Ry
aW5nJiBib2R5LCBjb25zdCBTdHJpbmcmIGljb25VUkksIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
IGNvbnRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjLCBQYXNzUmVmUHRyPE5vdGlmaWNhdGlvbkNlbnRl
cj4gcHJvdmlkZXIpIAorCitSZWY8Tm90aWZpY2F0aW9uPiBOb3RpZmljYXRpb246OmNyZWF0ZShj
b25zdCBTdHJpbmcmIHRpdGxlLCBjb25zdCBTdHJpbmcmIGJvZHksIGNvbnN0IFN0cmluZyYgaWNv
blVSSSwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMs
IE5vdGlmaWNhdGlvbkNlbnRlciYgcHJvdmlkZXIpCiB7IAogICAgIGF1dG8gbm90aWZpY2F0aW9u
ID0gYWRvcHRSZWYoKm5ldyBOb3RpZmljYXRpb24odGl0bGUsIGJvZHksIGljb25VUkksIGNvbnRl
eHQsIGVjLCBwcm92aWRlcikpOwogICAgIG5vdGlmaWNhdGlvbi5nZXQoKS5zdXNwZW5kSWZOZWVk
ZWQoKTsKICAgICByZXR1cm4gbm90aWZpY2F0aW9uOwogfQorCiAjZW5kaWYKIAogI2lmIEVOQUJM
RShOT1RJRklDQVRJT05TKQotUmVmPE5vdGlmaWNhdGlvbj4gTm90aWZpY2F0aW9uOjpjcmVhdGUo
RG9jdW1lbnQmIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgdGl0bGUsIGNvbnN0IERpY3Rpb25hcnkm
IG9wdGlvbnMpCisKK3N0YXRpYyBTdHJpbmcgZGlyZWN0aW9uU3RyaW5nKE5vdGlmaWNhdGlvbjo6
RGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKyAgICAvLyBGSVhNRTogU3RvcmluZyB0aGlzIGFzIGEg
c3RyaW5nIGlzIG5vdCB0aGUgcmlnaHQgd2F5IHRvIGRvIGl0LgorICAgIC8vIEZJWE1FOiBTZWVt
cyBoaWdobHkgdW5saWtlbHkgdGhhdCB0aGlzIGRvZXMgdGhlIHJpZ2h0IHRoaW5nIGZvciBBdXRv
LgorICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7CisgICAgY2FzZSBOb3RpZmljYXRpb246OkRpcmVj
dGlvbjo6QXV0bzoKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiYXV0byIpOworICAgIGNh
c2UgTm90aWZpY2F0aW9uOjpEaXJlY3Rpb246Okx0cjoKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0
ZXJhbCgibHRyIik7CisgICAgY2FzZSBOb3RpZmljYXRpb246OkRpcmVjdGlvbjo6UnRsOgorICAg
ICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJydGwiKTsKKyAgICB9CisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworUmVmPE5vdGlmaWNhdGlvbj4gTm90aWZp
Y2F0aW9uOjpjcmVhdGUoRG9jdW1lbnQmIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgdGl0bGUsIGNv
bnN0IE9wdGlvbnMmIG9wdGlvbnMpCiB7CiAgICAgYXV0byBub3RpZmljYXRpb24gPSBhZG9wdFJl
ZigqbmV3IE5vdGlmaWNhdGlvbihjb250ZXh0LCB0aXRsZSkpOwotICAgIFN0cmluZyBhcmd1bWVu
dDsKLSAgICBpZiAob3B0aW9ucy5nZXQoImJvZHkiLCBhcmd1bWVudCkpCi0gICAgICAgIG5vdGlm
aWNhdGlvbi5nZXQoKS5zZXRCb2R5KGFyZ3VtZW50KTsKLSAgICBpZiAob3B0aW9ucy5nZXQoInRh
ZyIsIGFyZ3VtZW50KSkKLSAgICAgICAgbm90aWZpY2F0aW9uLmdldCgpLnNldFRhZyhhcmd1bWVu
dCk7Ci0gICAgaWYgKG9wdGlvbnMuZ2V0KCJsYW5nIiwgYXJndW1lbnQpKQotICAgICAgICBub3Rp
ZmljYXRpb24uZ2V0KCkuc2V0TGFuZyhhcmd1bWVudCk7Ci0gICAgaWYgKG9wdGlvbnMuZ2V0KCJk
aXIiLCBhcmd1bWVudCkpCi0gICAgICAgIG5vdGlmaWNhdGlvbi5nZXQoKS5zZXREaXIoYXJndW1l
bnQpOwotICAgIGlmIChvcHRpb25zLmdldCgiaWNvbiIsIGFyZ3VtZW50KSkgewotICAgICAgICBV
UkwgaWNvblVSSSA9IGFyZ3VtZW50LmlzRW1wdHkoKSA/IFVSTCgpIDogY29udGV4dC5jb21wbGV0
ZVVSTChhcmd1bWVudCk7Ci0gICAgICAgIGlmICghaWNvblVSSS5pc0VtcHR5KCkgJiYgaWNvblVS
SS5pc1ZhbGlkKCkpCi0gICAgICAgICAgICBub3RpZmljYXRpb24uZ2V0KCkuc2V0SWNvblVSTChp
Y29uVVJJKTsKKyAgICBub3RpZmljYXRpb24uZ2V0KCkubV9ib2R5ID0gb3B0aW9ucy5ib2R5Owor
ICAgIG5vdGlmaWNhdGlvbi5nZXQoKS5tX3RhZyA9IG9wdGlvbnMudGFnOworICAgIG5vdGlmaWNh
dGlvbi5nZXQoKS5tX2xhbmcgPSBvcHRpb25zLmxhbmc7CisgICAgbm90aWZpY2F0aW9uLmdldCgp
Lm1fZGlyZWN0aW9uID0gZGlyZWN0aW9uU3RyaW5nKG9wdGlvbnMuZGlyKTsKKyAgICBpZiAoIW9w
dGlvbnMuaWNvbi5pc0VtcHR5KCkpIHsKKyAgICAgICAgYXV0byBpY29uVVJMID0gY29udGV4dC5j
b21wbGV0ZVVSTChvcHRpb25zLmljb24pOworICAgICAgICBpZiAoaWNvblVSTC5pc1ZhbGlkKCkp
CisgICAgICAgICAgICBub3RpZmljYXRpb24uZ2V0KCkubV9pY29uID0gaWNvblVSTDsKICAgICB9
Ci0KICAgICBub3RpZmljYXRpb24uZ2V0KCkuc3VzcGVuZElmTmVlZGVkKCk7CiAgICAgcmV0dXJu
IG5vdGlmaWNhdGlvbjsKIH0KKwogI2VuZGlmCiAKIHZvaWQgTm90aWZpY2F0aW9uOjpzaG93KCkg
CkBAIC0xMzUsOSArMTQzLDEwIEBAIHZvaWQgTm90aWZpY2F0aW9uOjpzaG93KCkKICAgICAvLyBw
cmV2ZW50IGRvdWJsZS1zaG93aW5nCiAgICAgaWYgKG1fc3RhdGUgPT0gSWRsZSAmJiBtX25vdGlm
aWNhdGlvbkNlbnRlci0+Y2xpZW50KCkpIHsKICNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykKLSAg
ICAgICAgaWYgKCFkb3duY2FzdDxEb2N1bWVudD4oKnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSku
cGFnZSgpKQorICAgICAgICBhdXRvKiBwYWdlID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpzY3JpcHRF
eGVjdXRpb25Db250ZXh0KCkpLnBhZ2UoKTsKKyAgICAgICAgaWYgKCFwYWdlKQogICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICBpZiAoTm90aWZpY2F0aW9uQ29udHJvbGxlcjo6ZnJvbShkb3du
Y2FzdDxEb2N1bWVudD4oKnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkucGFnZSgpKS0+Y2xpZW50
KCktPmNoZWNrUGVybWlzc2lvbihzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpICE9IE5vdGlmaWNh
dGlvbkNsaWVudDo6UGVybWlzc2lvbkFsbG93ZWQpIHsKKyAgICAgICAgaWYgKE5vdGlmaWNhdGlv
bkNvbnRyb2xsZXI6OmZyb20ocGFnZSktPmNsaWVudCgpLT5jaGVja1Blcm1pc3Npb24oc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpKSAhPSBOb3RpZmljYXRpb25DbGllbnQ6OlBlcm1pc3Npb25BbGxv
d2VkKSB7CiAgICAgICAgICAgICBkaXNwYXRjaEVycm9yRXZlbnQoKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQpAQCAtMjEyLDIxICsyMjEsMTMgQEAgdm9pZCBOb3RpZmljYXRpb246
OmRpc3BhdGNoRXJyb3JFdmVudCgpCiB9CiAKICNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykKLXZv
aWQgTm90aWZpY2F0aW9uOjp0YXNrVGltZXJGaXJlZCgpCi17Ci0gICAgQVNTRVJUKHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKS0+aXNEb2N1bWVudCgpKTsKLSAgICBzaG93KCk7Ci19Ci0jZW5kaWYK
IAotCi0jaWYgRU5BQkxFKE5PVElGSUNBVElPTlMpCi1jb25zdCBTdHJpbmcgTm90aWZpY2F0aW9u
OjpwZXJtaXNzaW9uKERvY3VtZW50JiBkb2N1bWVudCkKK1N0cmluZyBOb3RpZmljYXRpb246OnBl
cm1pc3Npb24oRG9jdW1lbnQmIGRvY3VtZW50KQogewogICAgIHJldHVybiBwZXJtaXNzaW9uU3Ry
aW5nKE5vdGlmaWNhdGlvbkNvbnRyb2xsZXI6OmZyb20oZG9jdW1lbnQucGFnZSgpKS0+Y2xpZW50
KCktPmNoZWNrUGVybWlzc2lvbigmZG9jdW1lbnQpKTsKIH0KIAotY29uc3QgU3RyaW5nIE5vdGlm
aWNhdGlvbjo6cGVybWlzc2lvblN0cmluZyhOb3RpZmljYXRpb25DbGllbnQ6OlBlcm1pc3Npb24g
cGVybWlzc2lvbikKK1N0cmluZyBOb3RpZmljYXRpb246OnBlcm1pc3Npb25TdHJpbmcoTm90aWZp
Y2F0aW9uQ2xpZW50OjpQZXJtaXNzaW9uIHBlcm1pc3Npb24pCiB7CiAgICAgc3dpdGNoIChwZXJt
aXNzaW9uKSB7CiAgICAgY2FzZSBOb3RpZmljYXRpb25DbGllbnQ6OlBlcm1pc3Npb25BbGxvd2Vk
OgpAQCAtMjM2LDE1ICsyMzcsMTUgQEAgY29uc3QgU3RyaW5nIE5vdGlmaWNhdGlvbjo6cGVybWlz
c2lvblN0cmluZyhOb3RpZmljYXRpb25DbGllbnQ6OlBlcm1pc3Npb24gcGVybWkKICAgICBjYXNl
IE5vdGlmaWNhdGlvbkNsaWVudDo6UGVybWlzc2lvbk5vdEFsbG93ZWQ6CiAgICAgICAgIHJldHVy
biBBU0NJSUxpdGVyYWwoImRlZmF1bHQiKTsKICAgICB9Ci0gICAgCiAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOworICAgIHJldHVybiB7IH07CiB9CiAKIHZv
aWQgTm90aWZpY2F0aW9uOjpyZXF1ZXN0UGVybWlzc2lvbihEb2N1bWVudCYgZG9jdW1lbnQsIFJl
ZlB0cjxOb3RpZmljYXRpb25QZXJtaXNzaW9uQ2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7CiAgICAg
Tm90aWZpY2F0aW9uQ29udHJvbGxlcjo6ZnJvbShkb2N1bWVudC5wYWdlKCkpLT5jbGllbnQoKS0+
cmVxdWVzdFBlcm1pc3Npb24oJmRvY3VtZW50LCBXVEZNb3ZlKGNhbGxiYWNrKSk7CiB9CisKICNl
bmRpZgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL25vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL25vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uLmgKaW5kZXggNzk1YzkzN2IyN2VhZTc1
OGQ1MTM2ODBlODY1YWM1NWUzZmQ5YzA3OC4uMGI1Y2MzZDBiZWVmZmI0MGMzNmUzNzcxNmYwMzE1
YWQ4N2JjYzE4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9ub3RpZmljYXRp
b25zL05vdGlmaWNhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbm90aWZpY2F0
aW9ucy9Ob3RpZmljYXRpb24uaApAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAwOSwgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDksIDIwMTEsIDIwMTIsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtMjksMTMxICsy
OSwxMDYgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBOb3RpZmljYXRpb25faCAg
Ci0jZGVmaW5lIE5vdGlmaWNhdGlvbl9oCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShOT1RJ
RklDQVRJT05TKSB8fCBFTkFCTEUoTEVHQUNZX05PVElGSUNBVElPTlMpCiAKICNpbmNsdWRlICJB
Y3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiRXZl
bnRUYXJnZXQuaCIKICNpbmNsdWRlICJOb3RpZmljYXRpb25DbGllbnQuaCIKLSNpbmNsdWRlICJU
aHJlYWRhYmxlTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiVVJMLmgiCiAjaW5jbHVkZSAiV3Jp
dGluZ01vZGUuaCIKLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L0F0b21pY1N0cmluZ0hhc2guaD4KIAogI2lmIEVOQUJMRShOT1RJRklDQVRJT05TKQogI2luY2x1
ZGUgIlRpbWVyLmgiCiAjZW5kaWYKIAotI2lmIEVOQUJMRShOT1RJRklDQVRJT05TKSB8fCBFTkFC
TEUoTEVHQUNZX05PVElGSUNBVElPTlMpCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIERp
Y3Rpb25hcnk7CiBjbGFzcyBEb2N1bWVudDsKIGNsYXNzIE5vdGlmaWNhdGlvbkNlbnRlcjsKIGNs
YXNzIE5vdGlmaWNhdGlvblBlcm1pc3Npb25DYWxsYmFjazsKLWNsYXNzIFJlc291cmNlRXJyb3I7
Ci1jbGFzcyBSZXNvdXJjZVJlc3BvbnNlOwotY2xhc3MgVGhyZWFkYWJsZUxvYWRlcjsKIAogdHlw
ZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKIAogY2xhc3MgTm90aWZpY2F0aW9uIGZpbmFsIDogcHVi
bGljIFJlZkNvdW50ZWQ8Tm90aWZpY2F0aW9uPiwgcHVibGljIEFjdGl2ZURPTU9iamVjdCwgcHVi
bGljIEV2ZW50VGFyZ2V0V2l0aElubGluZURhdGEgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwogcHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JUIE5vdGlmaWNhdGlvbigpOwogI2lmIEVO
QUJMRShMRUdBQ1lfTk9USUZJQ0FUSU9OUykKLSAgICBzdGF0aWMgUmVmPE5vdGlmaWNhdGlvbj4g
Y3JlYXRlKGNvbnN0IFN0cmluZyYgdGl0bGUsIGNvbnN0IFN0cmluZyYgYm9keSwgY29uc3QgU3Ry
aW5nJiBpY29uVVJJLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgRXhjZXB0aW9uQ29kZSYsIFBh
c3NSZWZQdHI8Tm90aWZpY2F0aW9uQ2VudGVyPiBwcm92aWRlcik7CisgICAgc3RhdGljIFJlZjxO
b3RpZmljYXRpb24+IGNyZWF0ZShjb25zdCBTdHJpbmcmIHRpdGxlLCBjb25zdCBTdHJpbmcmIGJv
ZHksIGNvbnN0IFN0cmluZyYgaWNvblVSTCwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIEV4Y2Vw
dGlvbkNvZGUmLCBOb3RpZmljYXRpb25DZW50ZXImKTsKICNlbmRpZgorCiAjaWYgRU5BQkxFKE5P
VElGSUNBVElPTlMpCi0gICAgc3RhdGljIFJlZjxOb3RpZmljYXRpb24+IGNyZWF0ZShEb2N1bWVu
dCYsIGNvbnN0IFN0cmluZyYgdGl0bGUsIGNvbnN0IERpY3Rpb25hcnkmIG9wdGlvbnMpOworICAg
IGVudW0gY2xhc3MgRGlyZWN0aW9uIHsgQXV0bywgTHRyLCBSdGwgfTsKKyAgICBzdHJ1Y3QgT3B0
aW9ucyB7CisgICAgICAgIERpcmVjdGlvbiBkaXI7CisgICAgICAgIFN0cmluZyBsYW5nOworICAg
ICAgICBTdHJpbmcgYm9keTsKKyAgICAgICAgU3RyaW5nIHRhZzsKKyAgICAgICAgU3RyaW5nIGlj
b247CisgICAgfTsKKyAgICBzdGF0aWMgUmVmPE5vdGlmaWNhdGlvbj4gY3JlYXRlKERvY3VtZW50
JiwgY29uc3QgU3RyaW5nJiB0aXRsZSwgY29uc3QgT3B0aW9ucyYpOwogI2VuZGlmCiAgICAgCi0g
ICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+Tm90aWZpY2F0aW9uKCk7CisgICAgdmlydHVhbCB+
Tm90aWZpY2F0aW9uKCk7CiAKICAgICB2b2lkIHNob3coKTsKLSNpZiBFTkFCTEUoTEVHQUNZX05P
VElGSUNBVElPTlMpCi0gICAgdm9pZCBjYW5jZWwoKSB7IGNsb3NlKCk7IH0KLSNlbmRpZgogICAg
IHZvaWQgY2xvc2UoKTsKIAotICAgIFVSTCBpY29uVVJMKCkgY29uc3QgeyByZXR1cm4gbV9pY29u
OyB9Ci0gICAgdm9pZCBzZXRJY29uVVJMKGNvbnN0IFVSTCYgdXJsKSB7IG1faWNvbiA9IHVybDsg
fQorICAgIGNvbnN0IFVSTCYgaWNvblVSTCgpIGNvbnN0IHsgcmV0dXJuIG1faWNvbjsgfQorICAg
IGNvbnN0IFN0cmluZyYgdGl0bGUoKSBjb25zdCB7IHJldHVybiBtX3RpdGxlOyB9CisgICAgY29u
c3QgU3RyaW5nJiBib2R5KCkgY29uc3QgeyByZXR1cm4gbV9ib2R5OyB9CisgICAgY29uc3QgU3Ry
aW5nJiBsYW5nKCkgY29uc3QgeyByZXR1cm4gbV9sYW5nOyB9CiAKLSAgICBTdHJpbmcgdGl0bGUo
KSBjb25zdCB7IHJldHVybiBtX3RpdGxlOyB9Ci0gICAgU3RyaW5nIGJvZHkoKSBjb25zdCB7IHJl
dHVybiBtX2JvZHk7IH0KLQotICAgIFN0cmluZyBsYW5nKCkgY29uc3QgeyByZXR1cm4gbV9sYW5n
OyB9Ci0gICAgdm9pZCBzZXRMYW5nKGNvbnN0IFN0cmluZyYgbGFuZykgeyBtX2xhbmcgPSBsYW5n
OyB9Ci0KLSAgICBTdHJpbmcgZGlyKCkgY29uc3QgeyByZXR1cm4gbV9kaXJlY3Rpb247IH0KKyNp
ZiBFTkFCTEUoTEVHQUNZX05PVElGSUNBVElPTlMpCisgICAgY29uc3QgU3RyaW5nJiBkaXIoKSBj
b25zdCB7IHJldHVybiBtX2RpcmVjdGlvbjsgfQogICAgIHZvaWQgc2V0RGlyKGNvbnN0IFN0cmlu
ZyYgZGlyKSB7IG1fZGlyZWN0aW9uID0gZGlyOyB9CiAKLSNpZiBFTkFCTEUoTEVHQUNZX05PVElG
SUNBVElPTlMpCi0gICAgU3RyaW5nIHJlcGxhY2VJZCgpIGNvbnN0IHsgcmV0dXJuIHRhZygpOyB9
Ci0gICAgdm9pZCBzZXRSZXBsYWNlSWQoY29uc3QgU3RyaW5nJiByZXBsYWNlSWQpIHsgc2V0VGFn
KHJlcGxhY2VJZCk7IH0KKyAgICBjb25zdCBTdHJpbmcmIHJlcGxhY2VJZCgpIGNvbnN0IHsgcmV0
dXJuIG1fdGFnOyB9CisgICAgdm9pZCBzZXRSZXBsYWNlSWQoY29uc3QgU3RyaW5nJiByZXBsYWNl
SWQpIHsgbV90YWcgPSByZXBsYWNlSWQ7IH0KICNlbmRpZgogCi0gICAgU3RyaW5nIHRhZygpIGNv
bnN0IHsgcmV0dXJuIG1fdGFnOyB9CisgICAgY29uc3QgU3RyaW5nJiB0YWcoKSBjb25zdCB7IHJl
dHVybiBtX3RhZzsgfQogICAgIHZvaWQgc2V0VGFnKGNvbnN0IFN0cmluZyYgdGFnKSB7IG1fdGFn
ID0gdGFnOyB9CiAKLSAgICBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbigpIGNvbnN0IHsgcmV0dXJu
IGRpcigpID09ICJydGwiID8gUlRMIDogTFRSOyB9CisgICAgVGV4dERpcmVjdGlvbiBkaXJlY3Rp
b24oKSBjb25zdCB7IHJldHVybiBtX2RpcmVjdGlvbiA9PSAicnRsIiA/IFJUTCA6IExUUjsgfQog
CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkaXNwYXRjaENsaWNrRXZlbnQoKTsKICAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGRpc3BhdGNoQ2xvc2VFdmVudCgpOwogICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgZGlzcGF0Y2hFcnJvckV2ZW50KCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkaXNw
YXRjaFNob3dFdmVudCgpOwogCi0gICAgdXNpbmcgUmVmQ291bnRlZDxOb3RpZmljYXRpb24+Ojpy
ZWY7Ci0gICAgdXNpbmcgUmVmQ291bnRlZDxOb3RpZmljYXRpb24+OjpkZXJlZjsKLQotICAgIC8v
IEV2ZW50VGFyZ2V0IGludGVyZmFjZQotICAgIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFy
Z2V0SW50ZXJmYWNlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gTm90aWZpY2F0aW9uRXZlbnRU
YXJnZXRJbnRlcmZhY2VUeXBlOyB9Ci0gICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEFjdGl2ZURPTU9iamVj
dDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOyB9Ci0KLSAgICB2b2lkIHN0b3BMb2FkaW5nSWNv
bigpOwotCi0gICAgLy8gRGVwcmVjYXRlZC4gVXNlIGZ1bmN0aW9ucyBmcm9tIE5vdGlmaWNhdGlv
bkNlbnRlci4KLSAgICB2b2lkIGRldGFjaFByZXNlbnRlcigpIHsgfQotCiAgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBmaW5hbGl6ZSgpOwogCiAjaWYgRU5BQkxFKE5PVElGSUNBVElPTlMpCi0gICAg
c3RhdGljIGNvbnN0IFN0cmluZyBwZXJtaXNzaW9uKERvY3VtZW50Jik7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgc3RhdGljIGNvbnN0IFN0cmluZyBwZXJtaXNzaW9uU3RyaW5nKE5vdGlmaWNhdGlvbkNs
aWVudDo6UGVybWlzc2lvbik7CisgICAgc3RhdGljIFN0cmluZyBwZXJtaXNzaW9uKERvY3VtZW50
Jik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyBwZXJtaXNzaW9uU3RyaW5nKE5v
dGlmaWNhdGlvbkNsaWVudDo6UGVybWlzc2lvbik7CiAgICAgc3RhdGljIHZvaWQgcmVxdWVzdFBl
cm1pc3Npb24oRG9jdW1lbnQmLCBSZWZQdHI8Tm90aWZpY2F0aW9uUGVybWlzc2lvbkNhbGxiYWNr
PiYmKTsKICNlbmRpZgogCisgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIEFjdGl2ZURPTU9iamVjdDo6c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpOyB9CisKKyAgICB1c2luZyBSZWZDb3VudGVkOjpyZWY7CisgICAg
dXNpbmcgUmVmQ291bnRlZDo6ZGVyZWY7CisKIHByaXZhdGU6CiAjaWYgRU5BQkxFKExFR0FDWV9O
T1RJRklDQVRJT05TKQotICAgIE5vdGlmaWNhdGlvbihjb25zdCBTdHJpbmcmIHRpdGxlLCBjb25z
dCBTdHJpbmcmIGJvZHksIGNvbnN0IFN0cmluZyYgaWNvblVSSSwgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCYsIEV4Y2VwdGlvbkNvZGUmLCBQYXNzUmVmUHRyPE5vdGlmaWNhdGlvbkNlbnRlcj4pOwor
ICAgIE5vdGlmaWNhdGlvbihjb25zdCBTdHJpbmcmIHRpdGxlLCBjb25zdCBTdHJpbmcmIGJvZHks
IGNvbnN0IFN0cmluZyYgaWNvblVSTCwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIEV4Y2VwdGlv
bkNvZGUmLCBOb3RpZmljYXRpb25DZW50ZXImKTsKICNlbmRpZgorCiAjaWYgRU5BQkxFKE5PVElG
SUNBVElPTlMpCi0gICAgTm90aWZpY2F0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25z
dCBTdHJpbmcmIHRpdGxlKTsKKyAgICBOb3RpZmljYXRpb24oRG9jdW1lbnQmLCBjb25zdCBTdHJp
bmcmIHRpdGxlKTsKICNlbmRpZgogCi0gICAgdm9pZCBzZXRCb2R5KGNvbnN0IFN0cmluZyYgYm9k
eSkgeyBtX2JvZHkgPSBib2R5OyB9Ci0KLSAgICAvLyBBY3RpdmVET01PYmplY3QgQVBJLgotICAg
IHZvaWQgY29udGV4dERlc3Ryb3llZCgpIG92ZXJyaWRlOwotICAgIGNvbnN0IGNoYXIqIGFjdGl2
ZURPTU9iamVjdE5hbWUoKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIGNhblN1c3BlbmRGb3JE
b2N1bWVudFN1c3BlbnNpb24oKSBjb25zdCBvdmVycmlkZTsKKyAgICBFdmVudFRhcmdldEludGVy
ZmFjZSBldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIE5vdGlmaWNh
dGlvbkV2ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsgfQogCi0gICAgLy8gRXZlbnRUYXJnZXQgQVBJ
LgotICAgIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSBvdmVycmlkZSB7IHJlZigpOyB9Ci0gICAgdm9p
ZCBkZXJlZkV2ZW50VGFyZ2V0KCkgb3ZlcnJpZGUgeyBkZXJlZigpOyB9CisgICAgdm9pZCBjb250
ZXh0RGVzdHJveWVkKCkgZmluYWw7CisgICAgY29uc3QgY2hhciogYWN0aXZlRE9NT2JqZWN0TmFt
ZSgpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgY2FuU3VzcGVuZEZvckRvY3VtZW50U3VzcGVuc2lv
bigpIGNvbnN0IGZpbmFsOwogCi0gICAgdm9pZCBzdGFydExvYWRpbmdJY29uKCk7Ci0gICAgdm9p
ZCBmaW5pc2hMb2FkaW5nSWNvbigpOworICAgIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSBmaW5hbCB7
IHJlZigpOyB9CisgICAgdm9pZCBkZXJlZkV2ZW50VGFyZ2V0KCkgZmluYWwgeyBkZXJlZigpOyB9
CiAKLSNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykKLSAgICB2b2lkIHRhc2tUaW1lckZpcmVkKCk7
Ci0jZW5kaWYKLQotICAgIC8vIFRleHQgbm90aWZpY2F0aW9ucy4KICAgICBVUkwgbV9pY29uOwog
ICAgIFN0cmluZyBtX3RpdGxlOwogICAgIFN0cmluZyBtX2JvZHk7CkBAIC0xNjEsMTMgKzEzNiw4
IEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIG1fbGFuZzsKICAgICBTdHJpbmcgbV90YWc7CiAKLSAg
ICBlbnVtIE5vdGlmaWNhdGlvblN0YXRlIHsKLSAgICAgICAgSWRsZSA9IDAsCi0gICAgICAgIFNo
b3dpbmcgPSAxLAotICAgICAgICBDbG9zZWQgPSAyLAotICAgIH07Ci0KLSAgICBOb3RpZmljYXRp
b25TdGF0ZSBtX3N0YXRlOworICAgIGVudW0gU3RhdGUgeyBJZGxlLCBTaG93aW5nLCBDbG9zZWQg
fTsKKyAgICBTdGF0ZSBtX3N0YXRlIHsgSWRsZSB9OwogCiAgICAgUmVmUHRyPE5vdGlmaWNhdGlv
bkNlbnRlcj4gbV9ub3RpZmljYXRpb25DZW50ZXI7CiAKQEAgLTE3OSw1ICsxNDksMyBAQCBwcml2
YXRlOgogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKE5PVElGSUNB
VElPTlMpIHx8IEVOQUJMRShMRUdBQ1lfTk9USUZJQ0FUSU9OUykKLQotI2VuZGlmIC8vIE5vdGlm
aWNhdGlvbnNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9ub3RpZmljYXRp
b25zL05vdGlmaWNhdGlvbi5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL25vdGlmaWNhdGlv
bnMvTm90aWZpY2F0aW9uLmlkbAppbmRleCBkYmU0ODcyZDc5ODRlOTgzZDg0NTYzYjlkM2E4YzNl
NTU0ZDhhMDY1Li5jYjNmYmVlNzQ1MjZhNDhlNGRlYTcxYjEwZDM1NDkzZWY4N2UyY2RhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL25vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9u
LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL25vdGlmaWNhdGlvbnMvTm90aWZpY2F0
aW9uLmlkbApAQCAtMzQsMTIgKzM0LDEyIEBACiAgICAgQWN0aXZlRE9NT2JqZWN0LAogICAgIEV4
cG9ydE1hY3JvPVdFQkNPUkVfRVhQT1JULAogI2lmIGRlZmluZWQoRU5BQkxFX05PVElGSUNBVElP
TlMpICYmIEVOQUJMRV9OT1RJRklDQVRJT05TCi0gICAgQ29uc3RydWN0b3IoRE9NU3RyaW5nIHRp
dGxlLCBvcHRpb25hbCBEaWN0aW9uYXJ5IG9wdGlvbnMpLAorICAgIENvbnN0cnVjdG9yKERPTVN0
cmluZyB0aXRsZSwgb3B0aW9uYWwgTm90aWZpY2F0aW9uT3B0aW9ucyBvcHRpb25zKSwKICAgICBD
b25zdHJ1Y3RvckNhbGxXaXRoPURvY3VtZW50LAogI2VuZGlmCiBdIGludGVyZmFjZSBOb3RpZmlj
YXRpb24gOiBFdmVudFRhcmdldCB7CiAgICAgdm9pZCBzaG93KCk7Ci0gICAgW0NvbmRpdGlvbmFs
PUxFR0FDWV9OT1RJRklDQVRJT05TXSB2b2lkIGNhbmNlbCgpOworICAgIFtDb25kaXRpb25hbD1M
RUdBQ1lfTk9USUZJQ0FUSU9OUywgSW1wbGVtZW50ZWRBcz1jbG9zZV0gdm9pZCBjYW5jZWwoKTsK
ICAgICBbQ29uZGl0aW9uYWw9Tk9USUZJQ0FUSU9OU10gdm9pZCBjbG9zZSgpOwogCiAgICAgW0Nv
bmRpdGlvbmFsPU5PVElGSUNBVElPTlMsIENhbGxXaXRoPURvY3VtZW50XSBzdGF0aWMgcmVhZG9u
bHkgYXR0cmlidXRlIERPTVN0cmluZyBwZXJtaXNzaW9uOwpAQCAtNTMsNiArNTMsMTYgQEAKIAog
ICAgIFtDb25kaXRpb25hbD1MRUdBQ1lfTk9USUZJQ0FUSU9OU10gYXR0cmlidXRlIERPTVN0cmlu
ZyBkaXI7CiAgICAgW0NvbmRpdGlvbmFsPUxFR0FDWV9OT1RJRklDQVRJT05TXSBhdHRyaWJ1dGUg
RE9NU3RyaW5nIHJlcGxhY2VJZDsKKwogICAgIFtDb25kaXRpb25hbD1OT1RJRklDQVRJT05TXSBh
dHRyaWJ1dGUgRE9NU3RyaW5nIHRhZzsKIH07CiAKK1tDb25kaXRpb25hbD1OT1RJRklDQVRJT05T
XSBlbnVtIE5vdGlmaWNhdGlvbkRpcmVjdGlvbiB7ICJhdXRvIiwgImx0ciIsICJydGwiIH07CisK
K1tDb25kaXRpb25hbD1OT1RJRklDQVRJT05TXSBkaWN0aW9uYXJ5IE5vdGlmaWNhdGlvbk9wdGlv
bnMgeworICAgIE5vdGlmaWNhdGlvbkRpcmVjdGlvbiBkaXIgPSAiYXV0byI7CisgICAgRE9NU3Ry
aW5nIGxhbmcgPSAiIjsKKyAgICBET01TdHJpbmcgYm9keSA9ICIiOworICAgIERPTVN0cmluZyB0
YWcgPSAiIjsKKyAgICBET01TdHJpbmcgaWNvbjsKK307CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL25vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uQ2VudGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb25DZW50ZXIuY3BwCmlu
ZGV4IGYwMWZmYmI4MDE2N2RjYTU2ZDhkNjY3MDJiNDEzOWYyYTA5M2YxMjQuLjYxMmVjZDRhOTE2
ZGIzZWMyMmQ1N2IzOWE3YWNjZDNjMDJmNGViNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb25DZW50ZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb25DZW50ZXIuY3BwCkBA
IC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiTm90aWZpY2F0aW9uLmgiCiAjaW5jbHVkZSAiU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisjaW5j
bHVkZSAiVm9pZENhbGxiYWNrLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNjMsNyAr
NjQsNyBAQCBSZWZQdHI8Tm90aWZpY2F0aW9uPiBOb3RpZmljYXRpb25DZW50ZXI6OmNyZWF0ZU5v
dGlmaWNhdGlvbihjb25zdCBTdHJpbmcmIGljb25VUgogICAgICAgICBlYyA9IElOVkFMSURfU1RB
VEVfRVJSOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9Ci0gICAgcmV0dXJuIE5vdGlm
aWNhdGlvbjo6Y3JlYXRlKHRpdGxlLCBib2R5LCBpY29uVVJJLCAqc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpLCBlYywgdGhpcyk7CisgICAgcmV0dXJuIE5vdGlmaWNhdGlvbjo6Y3JlYXRlKHRpdGxl
LCBib2R5LCBpY29uVVJJLCAqc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBlYywgKnRoaXMpOwog
fQogCiBpbnQgTm90aWZpY2F0aW9uQ2VudGVyOjpjaGVja1Blcm1pc3Npb24oKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9ub3RpZmljYXRpb25zL05vdGlmaWNhdGlvbkNsaWVu
dC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9ub3RpZmljYXRpb25zL05vdGlmaWNhdGlvbkNs
aWVudC5oCmluZGV4IGM3ZWI5MGJkMjhhYmViZTEyN2VmODUxYjZhMGE5M2MwOTAxY2UzODUuLmIw
M2RmZDkyYTE5YThhNDRjMjgzY2UzNjFlYzJmZjk5OWI2NWY1NjQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb25DbGllbnQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL25vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uQ2xpZW50
LmgKQEAgLTI5LDIzICsyOSwxOSBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIE5v
dGlmaWNhdGlvbkNsaWVudF9oCi0jZGVmaW5lIE5vdGlmaWNhdGlvbkNsaWVudF9oCisjcHJhZ21h
IG9uY2UKIAotI2luY2x1ZGUgIk5vdGlmaWNhdGlvblBlcm1pc3Npb25DYWxsYmFjay5oIgotI2lu
Y2x1ZGUgIlZvaWRDYWxsYmFjay5oIgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5j
bHVkZSA8d3RmL0ZvcndhcmQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBEb2N1
bWVudDsKLWNsYXNzIFVSTDsKIGNsYXNzIE5vdGlmaWNhdGlvbjsKK2NsYXNzIE5vdGlmaWNhdGlv
blBlcm1pc3Npb25DYWxsYmFjazsKIGNsYXNzIFBhZ2U7CiBjbGFzcyBTY3JpcHRFeGVjdXRpb25D
b250ZXh0OworY2xhc3MgVm9pZENhbGxiYWNrOwogCiBjbGFzcyBOb3RpZmljYXRpb25DbGllbnQg
ewotCiBwdWJsaWM6CiAgICAgZW51bSBQZXJtaXNzaW9uIHsKICAgICAgICAgUGVybWlzc2lvbkFs
bG93ZWQsIC8vIFVzZXIgaGFzIGFsbG93ZWQgbm90aWZpY2F0aW9ucwpAQCAtNzEsMTAgKzY3LDEw
IEBAIHB1YmxpYzoKICAgICAvLyBJbmZvcm1zIHRoZSBwcmVzZW50ZXIgdGhlIGNvbnRyb2xsZXIg
YXR0YWNoZWQgdG8gdGhlIHBhZ2UgaGFzIGJlZW4gZGVzdHJveWVkLgogICAgIHZpcnR1YWwgdm9p
ZCBub3RpZmljYXRpb25Db250cm9sbGVyRGVzdHJveWVkKCkgPSAwOwogCi0jaWYgRU5BQkxFKExF
R0FDWV9OT1RJRklDQVRJT05TKQogICAgIC8vIFJlcXVlc3RzIHVzZXIgcGVybWlzc2lvbiB0byBz
aG93IGRlc2t0b3Agbm90aWZpY2F0aW9ucyBmcm9tIGEgcGFydGljdWxhcgogICAgIC8vIHNjcmlw
dCBjb250ZXh0LiBUaGUgY2FsbGJhY2sgcGFyYW1ldGVyIHNob3VsZCBiZSBydW4gd2hlbiB0aGUg
dXNlciBoYXMKICAgICAvLyBtYWRlIGEgZGVjaXNpb24uCisjaWYgRU5BQkxFKExFR0FDWV9OT1RJ
RklDQVRJT05TKQogICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0UGVybWlzc2lvbihTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgUmVmUHRyPFZvaWRDYWxsYmFjaz4mJikgPSAwOwogI2VuZGlmCiAjaWYg
RU5BQkxFKE5PVElGSUNBVElPTlMpCkBAIC05Niw1ICs5MiwzIEBAIHByb3RlY3RlZDoKIFdFQkNP
UkVfRVhQT1JUIHZvaWQgcHJvdmlkZU5vdGlmaWNhdGlvbihQYWdlKiwgTm90aWZpY2F0aW9uQ2xp
ZW50Kik7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIE5vdGlmaWNhdGlv
bkNsaWVudF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNv
bnZlcnQuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydC5oCmluZGV4
IDI0OWI0NjI5ZTFlZTE5Nzg3ODgwMGNiN2Y2MzljNzEwYTkwMDRjYjkuLmJiM2U2MmUyYmY3OTJj
Y2MzZmU3YzFjZjY5NGNlMWIwOTM2Y2FlYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NQ29udmVydC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NQ29udmVydC5oCkBAIC0zMiwxNTYgKzMyLDIwMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGVudW0gY2xhc3MgU2hvdWxkQWxsb3dOb25GaW5pdGUgeyBObywgWWVzIH07CiAKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI7CisKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
IFQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci10ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBUIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIFNob3VsZEFs
bG93Tm9uRmluaXRlKTsKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uKTsKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IFQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1
ZSwgU2hvdWxkQWxsb3dOb25GaW5pdGUpOwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBPcHRpb25h
bDxUPiBjb252ZXJ0T3B0aW9uYWwoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwordGVt
cGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpPcHRpb25hbFZhbHVlIGNv
bnZlcnRPcHRpb25hbChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CiB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBUIGNvbnZlcnRPcHRpb25hbChKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6SlNWYWx1ZSwgVSYmIGRlZmF1bHRWYWx1ZSk7CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
IE9wdGlvbmFsPFQ+IGlubGluZSBjb252ZXJ0T3B0aW9uYWwoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHZhbHVlLmlzVW5kZWZpbmVkKCkg
PyBPcHRpb25hbDxUPigpIDogY29udmVydDxUPihzdGF0ZSwgdmFsdWUpOwotfQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgVCBjb252ZXJ0T3B0aW9uYWwoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFUmJiBkZWZhdWx0VmFsdWUpCi17
Ci0gICAgcmV0dXJuIHZhbHVlLmlzVW5kZWZpbmVkKCkgPyBzdGQ6OmZvcndhcmQ8VT4oZGVmYXVs
dFZhbHVlKSA6IGNvbnZlcnQ8VD4oc3RhdGUsIHZhbHVlKTsKLX0KKy8vIFRoaXMgaXMgd2hlcmUg
dGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSB0aGluZ3MgZGVjbGFyZWQgYWJvdmUgYmVnaW5zOgog
Ci10ZW1wbGF0ZTw+IGlubGluZSBib29sIGNvbnZlcnQ8Ym9vbD4oSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJu
IHZhbHVlLnRvQm9vbGVhbigmc3RhdGUpOworICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZl
cnQoc3RhdGUsIHZhbHVlKTsKIH0KIAotdGVtcGxhdGU8PiBpbmxpbmUgU3RyaW5nIGNvbnZlcnQ8
U3RyaW5nPihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IFQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24p
CiB7Ci0gICAgcmV0dXJuIHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7CisgICAgcmV0dXJuIENv
bnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOwogfQogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgVCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTaG91bGRBbGxvd05vbkZpbml0ZSBhbGxvd05vbkZpbml0
ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBUIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFNob3VsZEFsbG93Tm9uRmluaXRlIGFsbG93KQog
ewotICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPFQsIGZsb2F0Pjo6dmFsdWUgfHwgc3Rk
Ojppc19zYW1lPFQsIGRvdWJsZT46OnZhbHVlLCAiU2hvdWxkIGJlIGNhbGxlZCB3aXRoIGNvbnZl
cnRpbmcgdG8gZmxvYXQgb3IgZG91YmxlIik7CisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3Nh
bWU8VCwgZmxvYXQ+Ojp2YWx1ZSB8fCBzdGQ6OmlzX3NhbWU8VCwgZG91YmxlPjo6dmFsdWUsICJT
aG91bGRBbGxvd05vbkZpbml0ZSBjYW4gb25seSBiZSB1c2VkIHdpdGggZmxvYXQgb3IgZG91Ymxl
Iik7CiAgICAgZG91YmxlIG51bWJlciA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgaWYg
KGFsbG93Tm9uRmluaXRlID09IFNob3VsZEFsbG93Tm9uRmluaXRlOjpObyAmJiBVTkxJS0VMWSgh
c3RkOjppc2Zpbml0ZShudW1iZXIpKSkKKyAgICBpZiAoYWxsb3cgPT0gU2hvdWxkQWxsb3dOb25G
aW5pdGU6Ok5vICYmIFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJlcikpKQogICAgICAgICB0
aHJvd05vbkZpbml0ZVR5cGVFcnJvcihzdGF0ZSk7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+
KG51bWJlcik7CiB9CiAKLXRlbXBsYXRlPD4gaW5saW5lIFZlY3RvcjxTdHJpbmc+IGNvbnZlcnQ8
VmVjdG9yPFN0cmluZz4+KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
KQordGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpPcHRpb25hbFZh
bHVlIGlubGluZSBjb252ZXJ0T3B0aW9uYWwoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUpCiB7Ci0gICAgLy8gRklYTUU6IFRoZSB0b05hdGl2ZUFycmF5IGZ1bmN0aW9u
IGRvZXNuJ3QgdGhyb3cgYSB0eXBlIGVycm9yIGlmIHRoZSB2YWx1ZSBpcyBub3QgYW4gb2JqZWN0
LiBJcyB0aGF0IHJlYWxseSBPSz8KLSAgICByZXR1cm4gdG9OYXRpdmVBcnJheTxTdHJpbmc+KCZz
dGF0ZSwgdmFsdWUpOworICAgIHJldHVybiB2YWx1ZS5pc1VuZGVmaW5lZCgpID8gdHlwZW5hbWUg
Q29udmVydGVyPFQ+OjpPcHRpb25hbFZhbHVlKCkgOiBjb252ZXJ0PFQ+KHN0YXRlLCB2YWx1ZSk7
CiB9CiAKLXRlbXBsYXRlPD4gaW5saW5lIGludDhfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24g
Y29uZmlndXJhdGlvbikKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBU
IGNvbnZlcnRPcHRpb25hbChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSwgVSYmIGRlZmF1bHRWYWx1ZSkKIHsKLSAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAg
ICBjYXNlIE5vcm1hbENvbnZlcnNpb246Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRW5mb3Jj
ZVJhbmdlOgotICAgICAgICByZXR1cm4gdG9JbnQ4RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7
Ci0gICAgY2FzZSBDbGFtcDoKLSAgICAgICAgcmV0dXJuIHRvSW50OENsYW1wKHN0YXRlLCB2YWx1
ZSk7Ci0gICAgfQotICAgIHJldHVybiB0b0ludDgoc3RhdGUsIHZhbHVlKTsKKyAgICByZXR1cm4g
dmFsdWUuaXNVbmRlZmluZWQoKSA/IHN0ZDo6Zm9yd2FyZDxVPihkZWZhdWx0VmFsdWUpIDogY29u
dmVydDxUPihzdGF0ZSwgdmFsdWUpOwogfQogCi10ZW1wbGF0ZTw+IGlubGluZSB1aW50OF90IGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQotewotICAgIHN3aXRjaCAoY29u
ZmlndXJhdGlvbikgewotICAgIGNhc2UgTm9ybWFsQ29udmVyc2lvbjoKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBFbmZvcmNlUmFuZ2U6Ci0gICAgICAgIHJldHVybiB0b1VJbnQ4RW5mb3JjZVJh
bmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgY2FzZSBDbGFtcDoKLSAgICAgICAgcmV0dXJuIHRvVUlu
dDhDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgIH0KLSAgICByZXR1cm4gdG9VSW50OChzdGF0ZSwg
dmFsdWUpOwotfQordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRDb252ZXJ0ZXIg
eworICAgIHVzaW5nIE9wdGlvbmFsVmFsdWUgPSBPcHRpb25hbDxUPjsKK307CiAKLXRlbXBsYXRl
PD4gaW5saW5lIGludDE2X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24p
Ci17Ci0gICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgY2FzZSBOb3JtYWxDb252ZXJz
aW9uOgotICAgICAgICBicmVhazsKLSAgICBjYXNlIEVuZm9yY2VSYW5nZToKLSAgICAgICAgcmV0
dXJuIHRvSW50MTZFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICBjYXNlIENsYW1wOgot
ICAgICAgICByZXR1cm4gdG9JbnQxNkNsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotICAgIHJl
dHVybiB0b0ludDE2KHN0YXRlLCB2YWx1ZSk7Ci19Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgQ29udmVydGVyIDogRGVmYXVsdENvbnZlcnRlcjxUPiB7Cit9OwogCi10ZW1wbGF0ZTw+IGlu
bGluZSB1aW50MTZfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKLXsK
LSAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICBjYXNlIE5vcm1hbENvbnZlcnNpb246
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRW5mb3JjZVJhbmdlOgotICAgICAgICByZXR1cm4g
dG9VSW50MTZFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICBjYXNlIENsYW1wOgotICAg
ICAgICByZXR1cm4gdG9VSW50MTZDbGFtcChzdGF0ZSwgdmFsdWUpOwordGVtcGxhdGU8PiBzdHJ1
Y3QgQ29udmVydGVyPGJvb2w+IDogRGVmYXVsdENvbnZlcnRlcjxib29sPiB7CisgICAgc3RhdGlj
IGJvb2wgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZS50b0Jvb2xlYW4oJnN0YXRlKTsKICAgICB9Ci0g
ICAgcmV0dXJuIHRvVUludDE2KHN0YXRlLCB2YWx1ZSk7Ci19Cit9OwogCi10ZW1wbGF0ZTw+IGlu
bGluZSBpbnQzMl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQotewot
ICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgIGNhc2UgTm9ybWFsQ29udmVyc2lvbjoK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFbmZvcmNlUmFuZ2U6Ci0gICAgICAgIHJldHVybiB0
b0ludDMyRW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgY2FzZSBDbGFtcDoKLSAgICAg
ICAgcmV0dXJuIHRvSW50MzJDbGFtcChzdGF0ZSwgdmFsdWUpOwordGVtcGxhdGU8PiBzdHJ1Y3Qg
Q29udmVydGVyPFN0cmluZz4gOiBEZWZhdWx0Q29udmVydGVyPFN0cmluZz4geworICAgIHVzaW5n
IE9wdGlvbmFsVmFsdWUgPSBTdHJpbmc7IC8vIFVzZSBudWxsIHN0cmluZyB0byBtZWFuIGFuIG9w
dGlvbmFsIHZhbHVlIHdhcyBub3QgcHJlc2VudC4KKyAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAg
ICByZXR1cm4gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKICAgICB9Ci0gICAgcmV0dXJuIHZh
bHVlLnRvSW50MzIoJnN0YXRlKTsKLX0KK307CiAKLXRlbXBsYXRlPD4gaW5saW5lIHVpbnQzMl90
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQotewotICAgIHN3aXRjaCAo
Y29uZmlndXJhdGlvbikgewotICAgIGNhc2UgTm9ybWFsQ29udmVyc2lvbjoKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBFbmZvcmNlUmFuZ2U6Ci0gICAgICAgIHJldHVybiB0b1VJbnQzMkVuZm9y
Y2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAgIGNhc2UgQ2xhbXA6Ci0gICAgICAgIHJldHVybiB0
b1VJbnQzMkNsYW1wKHN0YXRlLCB2YWx1ZSk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
Q29udmVydGVyPFZlY3RvcjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPFZlY3RvcjxUPj4geworICAg
IHN0YXRpYyBWZWN0b3I8VD4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBUaGUgdG9OYXRpdmVBcnJheSBm
dW5jdGlvbiBkb2Vzbid0IHRocm93IGEgdHlwZSBlcnJvciBpZiB0aGUgdmFsdWUgaXMgbm90IGFu
IG9iamVjdC4gSXMgdGhhdCBPSz8KKyAgICAgICAgcmV0dXJuIHRvTmF0aXZlQXJyYXk8VD4oJnN0
YXRlLCB2YWx1ZSk7CiAgICAgfQotICAgIHJldHVybiB2YWx1ZS50b1VJbnQzMigmc3RhdGUpOwot
fQotCi10ZW1wbGF0ZTw+IGlubGluZSBpbnQ2NF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBj
b25maWd1cmF0aW9uKQotewotICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCi0gICAgICAgIHJldHVy
biB2YWx1ZS5hc0ludDMyKCk7Ci0KLSAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICBj
YXNlIE5vcm1hbENvbnZlcnNpb246Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRW5mb3JjZVJh
bmdlOgotICAgICAgICByZXR1cm4gdG9JbnQ2NEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwot
ICAgIGNhc2UgQ2xhbXA6Ci0gICAgICAgIHJldHVybiB0b0ludDY0Q2xhbXAoc3RhdGUsIHZhbHVl
KTsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxpbnQ4X3Q+IDogRGVmYXVsdENv
bnZlcnRlcjxpbnQ4X3Q+IHsKKyAgICBzdGF0aWMgaW50OF90IGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbiBjb25maWd1cmF0aW9uKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9u
KSB7CisgICAgICAgIGNhc2UgTm9ybWFsQ29udmVyc2lvbjoKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEVuZm9yY2VSYW5nZToKKyAgICAgICAgICAgIHJldHVybiB0b0ludDhFbmZv
cmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBDbGFtcDoKKyAgICAgICAgICAg
IHJldHVybiB0b0ludDhDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiB0b0ludDgoc3RhdGUsIHZhbHVlKTsKICAgICB9Ci0gICAgcmV0dXJuIHRvSW50NjQoc3Rh
dGUsIHZhbHVlKTsKLX0KLQotdGVtcGxhdGU8PiBpbmxpbmUgdWludDY0X3QgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCi17Ci0gICAgaWYgKHZhbHVlLmlzVUludDMyKCkp
Ci0gICAgICAgIHJldHVybiB2YWx1ZS5hc1VJbnQzMigpOwotCi0gICAgc3dpdGNoIChjb25maWd1
cmF0aW9uKSB7Ci0gICAgY2FzZSBOb3JtYWxDb252ZXJzaW9uOgotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEVuZm9yY2VSYW5nZToKLSAgICAgICAgcmV0dXJuIHRvVUludDY0RW5mb3JjZVJhbmdl
KHN0YXRlLCB2YWx1ZSk7Ci0gICAgY2FzZSBDbGFtcDoKLSAgICAgICAgcmV0dXJuIHRvVUludDY0
Q2xhbXAoc3RhdGUsIHZhbHVlKTsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjx1
aW50OF90PiA6IERlZmF1bHRDb252ZXJ0ZXI8dWludDhfdD4geworICAgIHN0YXRpYyB1aW50OF90
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQorICAgIHsKKyAgICAgICAg
c3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2UgTm9ybWFsQ29udmVyc2lvbjoK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVuZm9yY2VSYW5nZToKKyAgICAgICAg
ICAgIHJldHVybiB0b1VJbnQ4RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGNh
c2UgQ2xhbXA6CisgICAgICAgICAgICByZXR1cm4gdG9VSW50OENsYW1wKHN0YXRlLCB2YWx1ZSk7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRvVUludDgoc3RhdGUsIHZhbHVlKTsKICAgICB9
Ci0gICAgcmV0dXJuIHRvVUludDY0KHN0YXRlLCB2YWx1ZSk7Ci19Cit9OworCit0ZW1wbGF0ZTw+
IHN0cnVjdCBDb252ZXJ0ZXI8aW50MTZfdD4gOiBEZWZhdWx0Q29udmVydGVyPGludDE2X3Q+IHsK
KyAgICBzdGF0aWMgaW50MTZfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlv
bikKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAgICBjYXNl
IE5vcm1hbENvbnZlcnNpb246CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFbmZv
cmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQxNkVuZm9yY2VSYW5nZShzdGF0ZSwg
dmFsdWUpOworICAgICAgICBjYXNlIENsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRvSW50MTZD
bGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0b0ludDE2KHN0
YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPHVp
bnQxNl90PiA6IERlZmF1bHRDb252ZXJ0ZXI8dWludDE2X3Q+IHsKKyAgICBzdGF0aWMgdWludDE2
X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCisgICAgeworICAgICAg
ICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBOb3JtYWxDb252ZXJzaW9u
OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRW5mb3JjZVJhbmdlOgorICAgICAg
ICAgICAgcmV0dXJuIHRvVUludDE2RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAg
IGNhc2UgQ2xhbXA6CisgICAgICAgICAgICByZXR1cm4gdG9VSW50MTZDbGFtcChzdGF0ZSwgdmFs
dWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0b1VJbnQxNihzdGF0ZSwgdmFsdWUpOwor
ICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxpbnQzMl90PiA6IERlZmF1
bHRDb252ZXJ0ZXI8aW50MzJfdD4geworICAgIHN0YXRpYyBpbnQzMl90IGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25maWd1
cmF0aW9uKSB7CisgICAgICAgIGNhc2UgTm9ybWFsQ29udmVyc2lvbjoKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEVuZm9yY2VSYW5nZToKKyAgICAgICAgICAgIHJldHVybiB0b0lu
dDMyRW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGNhc2UgQ2xhbXA6CisgICAg
ICAgICAgICByZXR1cm4gdG9JbnQzMkNsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHZhbHVlLnRvSW50MzIoJnN0YXRlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0
ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8dWludDMyX3Q+IDogRGVmYXVsdENvbnZlcnRlcjx1aW50MzJf
dD4geworICAgIHN0YXRpYyB1aW50MzJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmln
dXJhdGlvbikKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAg
ICBjYXNlIE5vcm1hbENvbnZlcnNpb246CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1cm4gdG9VSW50MzJFbmZvcmNlUmFuZ2Uo
c3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0
b1VJbnQzMkNsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZh
bHVlLnRvVUludDMyKCZzdGF0ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29u
dmVydGVyPGludDY0X3Q+IDogRGVmYXVsdENvbnZlcnRlcjxpbnQ2NF90PiB7CisgICAgc3RhdGlj
IGludDY0X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCisgICAgewor
ICAgICAgICBpZiAodmFsdWUuaXNJbnQzMigpKQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmFz
SW50MzIoKTsKKworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2Fz
ZSBOb3JtYWxDb252ZXJzaW9uOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRW5m
b3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJuIHRvSW50NjRFbmZvcmNlUmFuZ2Uoc3RhdGUs
IHZhbHVlKTsKKyAgICAgICAgY2FzZSBDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0b0ludDY0
Q2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdG9JbnQ2NChz
dGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjx1
aW50NjRfdD4gOiBEZWZhdWx0Q29udmVydGVyPHVpbnQ2NF90PiB7CisgICAgc3RhdGljIHVpbnQ2
NF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQorICAgIHsKKyAgICAg
ICAgaWYgKHZhbHVlLmlzVUludDMyKCkpCisgICAgICAgICAgICByZXR1cm4gdmFsdWUuYXNVSW50
MzIoKTsKKworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBO
b3JtYWxDb252ZXJzaW9uOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRW5mb3Jj
ZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDY0RW5mb3JjZVJhbmdlKHN0YXRlLCB2
YWx1ZSk7CisgICAgICAgIGNhc2UgQ2xhbXA6CisgICAgICAgICAgICByZXR1cm4gdG9VSW50NjRD
bGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0b1VJbnQ2NChz
dGF0ZSwgdmFsdWUpOworICAgIH0KK307CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBt
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KaW5k
ZXggZWQ5M2I3ZTc4MWI5NDUxNjJiYzU1YzFhZTg1YjNkOTk2NGY2ZjdjNi4uNTNlM2Q5MTc2MDAz
OTJiZjg3YzRiZjVmOTVjOTcyOWU3YTllNGM4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KQEAgLTMsNyArMyw3IEBACiAjIENv
cHlyaWdodCAoQykgMjAwNiBBbmRlcnMgQ2FybHNzb24gPGFuZGVyc2NhQG1hYy5jb20+CiAjIENv
cHlyaWdodCAoQykgMjAwNiwgMjAwNyBTYW11ZWwgV2VpbmlnIDxzYW1Ad2Via2l0Lm9yZz4KICMg
Q29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQHdlYmtpdC5vcmc+Ci0j
IENvcHlyaWdodCAoQykgMjAwNiwgMjAwNy0yMDEwLCAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxMCwgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMgQ29weXJpZ2h0IChDKSAyMDA5IENhbWVy
b24gTWNDb3JtYWNrIDxjYW1AbWNjLmlkLmF1PgogIyBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIElu
IE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjIENvcHlyaWdodCAo
QykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKQEAg
LTg2MSwxNiArODYxLDE1IEBAIHN1YiBHZW5lcmF0ZUVudW1lcmF0aW9uSW1wbGVtZW50YXRpb25D
b250ZW50CiAgICAgICAgIG15ICRjb25kaXRpb25hbFN0cmluZyA9ICRjb2RlR2VuZXJhdG9yLT5H
ZW5lcmF0ZUNvbmRpdGlvbmFsU3RyaW5nKCRlbnVtZXJhdGlvbik7CiAgICAgICAgICRyZXN1bHQg
Lj0gIiNpZiAke2NvbmRpdGlvbmFsU3RyaW5nfVxuXG4iIGlmICRjb25kaXRpb25hbFN0cmluZzsK
IAotICAgICAgICAjIERlY2xhcmUgdGhpcyBpbnN0ZWFkIG9mIHVzaW5nICJzdGF0aWMiIGJlY2F1
c2UgaXQgbWF5IGJlIHVudXNlZCBhbmQgd2UgZG9uJ3QKLSAgICAgICAgIyB3YW50IHRvIGdldCB3
YXJuaW5ncyBhYm91dCBpdC4KLSAgICAgICAgJHJlc3VsdCAuPSAiSlNTdHJpbmcqIGpzU3RyaW5n
V2l0aENhY2hlKEV4ZWNTdGF0ZSosICRjbGFzc05hbWUpO1xuIjsKKyAgICAgICAgIyBEZWNsYXJl
IHRoaXMgaW5zdGVhZCBvZiB1c2luZyAic3RhdGljIiBiZWNhdXNlIGl0IG1heSBiZSB1bnVzZWQg
YW5kIHdlIGRvbid0IHdhbnQgd2FybmluZ3MgYWJvdXQgdGhhdC4KKyAgICAgICAgJHJlc3VsdCAu
PSAiSlNTdHJpbmcqIGpzU3RyaW5nV2l0aENhY2hlKEV4ZWNTdGF0ZSosICRjbGFzc05hbWUpO1xu
XG4iOwogCiAgICAgICAgICMgVGFrZSBhbiBFeGVjU3RhdGUqIGluc3RlYWQgb2YgYW4gRXhlY1N0
YXRlJiB0byBtYXRjaCB0aGUganNTdHJpbmdXaXRoQ2FjaGUgZnJvbSBKU1N0cmluZy5oLgogICAg
ICAgICAjIEZJWE1FOiBDaGFuZ2UgdG8gdGFrZSBWTSYgaW5zdGVhZCBvZiBFeGVjU3RhdGUqLgog
ICAgICAgICAkcmVzdWx0IC49ICJKU1N0cmluZyoganNTdHJpbmdXaXRoQ2FjaGUoRXhlY1N0YXRl
KiBzdGF0ZSwgJGNsYXNzTmFtZSBlbnVtZXJhdGlvblZhbHVlKVxuIjsKICAgICAgICAgJHJlc3Vs
dCAuPSAie1xuIjsKICAgICAgICAgIyBGSVhNRTogTWlnaHQgYmUgbmljZSB0byBtYWtlIHRoaXMg
Z2xvYmFsIGJlICJjb25zdCIsIGJ1dCBOZXZlckRlc3Ryb3llZCBkb2VzIG5vdCBjdXJyZW50bHkg
c3VwcG9ydCB0aGF0LgotICAgICAgICAjIEZJWE1FOiBNaWdodCBiZSBuaWNlIHRvIG1ha2UgdGhl
IGVudGlyZSBhcnJheSBiZSBOZXZlckRlc3Ryb3llZCBpbnN0ZWFkIG9mIGVhY2ggdmFsdWUsIGJ1
dCBub3Qgc3VyZSB0aGUgc3ludGF4IGZvciB0aGF0LgorICAgICAgICAjIEZJWE1FOiBNaWdodCBi
ZSBuaWNlIHRvIG1ha2UgdGhlIGVudGlyZSBhcnJheSBiZSBOZXZlckRlc3Ryb3llZCBpbnN0ZWFk
IG9mIGVhY2ggdmFsdWUsIGJ1dCBub3Qgc3VyZSB3aGF0IHRoZSBzeW50YXggZm9yIHRoYXQgaXMu
CiAgICAgICAgICRyZXN1bHQgLj0gIiAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3Ry
aW5nPiB2YWx1ZXNbXSA9IHtcbiI7CiAgICAgICAgIGZvcmVhY2ggbXkgJHZhbHVlIChAeyRlbnVt
ZXJhdGlvbi0+dmFsdWVzfSkgewogICAgICAgICAgICAgaWYgKCR2YWx1ZSBlcSAiIikgewpAQCAt
OTQyLDYgKzk0MSwzMSBAQCBzdWIgR2V0RGljdGlvbmFyeUNsYXNzTmFtZQogICAgIHJldHVybiBH
ZXROZXN0ZWRDbGFzc05hbWUoJGludGVyZmFjZSwgJG5hbWUpOwogfQogCitzdWIgR2VuZXJhdGVE
ZWZhdWx0VmFsdWUKK3sKKyAgICBteSAoJGludGVyZmFjZSwgJG1lbWJlcikgPSBAXzsKKworICAg
IG15ICR2YWx1ZSA9ICRtZW1iZXItPmRlZmF1bHQ7CisKKyAgICBpZiAoJGNvZGVHZW5lcmF0b3It
PklzRW51bVR5cGUoJG1lbWJlci0+dHlwZSkpIHsKKyAgICAgICAgIyBGSVhNRTogV291bGQgYmUg
bmljZSB0byByZXBvcnQgYW4gZXJyb3IgaWYgdGhlIHZhbHVlIGRvZXMgbm90IGhhdmUgcXVvdGUg
bWFya3MgYXJvdW5kIGl0LgorICAgICAgICAjIEZJWE1FOiBXb3VsZCBiZSBuaWNlIHRvIHJlcG9y
dCBhbiBlcnJvciBpZiB0aGUgdmFsdWUgaXMgbm90IG9uZSBvZiB0aGUgZW51bWVyYXRpb24gdmFs
dWVzLgorICAgICAgICBteSAkY2xhc3NOYW1lID0gR2V0RW51bWVyYXRpb25DbGFzc05hbWUoJGlu
dGVyZmFjZSwgJG1lbWJlci0+dHlwZSk7CisgICAgICAgIG15ICRlbnVtZXJhdGlvblZhbHVlTmFt
ZSA9IEdldEVudW1lcmF0aW9uVmFsdWVOYW1lKHN1YnN0cigkdmFsdWUsIDEsIC0xKSk7CisgICAg
ICAgICR2YWx1ZSA9ICRjbGFzc05hbWUgLiAiOjoiIC4gJGVudW1lcmF0aW9uVmFsdWVOYW1lOwor
ICAgIH0KKworICAgIHJldHVybiAkdmFsdWU7Cit9CisKK3N1YiBHZW5lcmF0ZURlZmF1bHRWYWx1
ZVdpdGhMZWFkaW5nQ29tbWEKK3sKKyAgICBteSAoJGludGVyZmFjZSwgJG1lbWJlcikgPSBAXzsK
KworICAgIHJldHVybiAiIiB1bmxlc3MgJG1lbWJlci0+aXNPcHRpb25hbCAmJiBkZWZpbmVkICRt
ZW1iZXItPmRlZmF1bHQ7CisgICAgcmV0dXJuICIsICIgLiBHZW5lcmF0ZURlZmF1bHRWYWx1ZSgk
aW50ZXJmYWNlLCAkbWVtYmVyKTsKK30KKwogc3ViIEdlbmVyYXRlRGljdGlvbmFyeUltcGxlbWVu
dGF0aW9uQ29udGVudAogewogICAgIG15ICgkaW50ZXJmYWNlLCAkZGljdGlvbmFyaWVzKSA9IEBf
OwpAQCAtOTY1LDcgKzk4OSw3IEBAIHN1YiBHZW5lcmF0ZURpY3Rpb25hcnlJbXBsZW1lbnRhdGlv
bkNvbnRlbnQKICAgICAgICAgICAgICAgICAkZGVmYXVsdFZhbHVlcyA9ICIiOwogICAgICAgICAg
ICAgICAgIGxhc3Q7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAkZGVmYXVsdFZhbHVlcyAu
PSAkY29tbWEgLiAoZGVmaW5lZCAkbWVtYmVyLT5kZWZhdWx0ID8gJG1lbWJlci0+ZGVmYXVsdCA6
ICJOdWxsb3B0Iik7CisgICAgICAgICAgICAkZGVmYXVsdFZhbHVlcyAuPSAkY29tbWEgLiAoZGVm
aW5lZCAkbWVtYmVyLT5kZWZhdWx0ID8gR2VuZXJhdGVEZWZhdWx0VmFsdWUoJGludGVyZmFjZSwg
JG1lbWJlcikgOiAieyB9Iik7CiAgICAgICAgICAgICAkY29tbWEgPSAiLCAiOwogICAgICAgICB9
CiAKQEAgLTk4NSwxMSArMTAwOSwxMiBAQCBzdWIgR2VuZXJhdGVEaWN0aW9uYXJ5SW1wbGVtZW50
YXRpb25Db250ZW50CiAgICAgICAgICAgICAgICAgJHJlc3VsdCAuPSAiICAgIGlmIChVTkxJS0VM
WShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpXG4iOwogICAgICAgICAgICAgICAgICRyZXN1bHQgLj0g
IiAgICAgICAgcmV0dXJuIHsgfTtcbiI7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAjIEZJ
WE1FOiBFdmVudHVhbGx5IHdlIHdpbGwgd2FudCB0aGlzIHRvIGNhbGwgSlNWYWx1ZVRvTmF0aXZl
LgorICAgICAgICAgICAgIyBGSVhNRTogRXZlbnR1YWxseSB3ZSB3aWxsIHdhbnQgdGhpcyB0byBz
aGFyZSBhIGxvdCBtb3JlIGNvZGUgd2l0aCBKU1ZhbHVlVG9OYXRpdmUuCiAgICAgICAgICAgICBt
eSAkZnVuY3Rpb24gPSAkbWVtYmVyLT5pc09wdGlvbmFsID8gImNvbnZlcnRPcHRpb25hbCIgOiAi
Y29udmVydCI7CiAgICAgICAgICAgICBteSAkZGVmYXVsdFZhbHVlV2l0aExlYWRpbmdDb21tYSA9
ICRtZW1iZXItPmlzT3B0aW9uYWwgJiYgZGVmaW5lZCAkbWVtYmVyLT5kZWZhdWx0ID8gIiwgIiAu
ICRtZW1iZXItPmRlZmF1bHQgOiAiIjsKICAgICAgICAgICAgICRyZXN1bHQgLj0gIiAgICBhdXRv
ICIgLiAkbWVtYmVyLT5uYW1lIC4gIiA9ICIgLiAkZnVuY3Rpb24gLiAiPCIgLiBHZXROYXRpdmVU
eXBlRnJvbVNpZ25hdHVyZSgkaW50ZXJmYWNlLCAkbWVtYmVyKSAuICI+IgotICAgICAgICAgICAg
ICAgIC4gIihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZzdGF0ZSwgXCIiIC4gJG1lbWJlci0+bmFtZSAuICJcIikpIiAuICRkZWZhdWx0VmFsdWVXaXRo
TGVhZGluZ0NvbW1hIC4gIik7XG4iOworICAgICAgICAgICAgICAgIC4gIihzdGF0ZSwgb2JqZWN0
LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgXCIiIC4gJG1lbWJl
ci0+bmFtZSAuICJcIikpIgorICAgICAgICAgICAgICAgIC4gR2VuZXJhdGVEZWZhdWx0VmFsdWVX
aXRoTGVhZGluZ0NvbW1hKCRpbnRlcmZhY2UsICRtZW1iZXIpIC4gIik7XG4iOwogICAgICAgICAg
ICAgJG5lZWRFeGNlcHRpb25DaGVjayA9IDE7CiAgICAgICAgIH0KIApAQCAtMzcxNSwxMiArMzc0
MCwxMyBAQCBzdWIgR2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2sKICAgICAgICAgICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgIiAgICAkbmF0aXZlVHlwZSAkbmFtZTtcbiIpOwogCiAgICAgICAgICAgICBp
ZiAoJHBhcmFtZXRlci0+aXNPcHRpb25hbCkgewotICAgICAgICAgICAgICAgIHB1c2goQCRvdXRw
dXRBcnJheSwgIiAgICBpZiAoJHtuYW1lfVZhbHVlLmlzVW5kZWZpbmVkKCkpIHtcbiIpOwotICAg
ICAgICAgICAgICAgIGlmIChkZWZpbmVkKCRwYXJhbWV0ZXItPmRlZmF1bHQpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIG15ICRlbnVtZXJhdGlvblZhbHVlTmFtZSA9IEdldEVudW1lcmF0aW9uVmFs
dWVOYW1lKHN1YnN0cigkcGFyYW1ldGVyLT5kZWZhdWx0LCAxLCAtMSkpOwotICAgICAgICAgICAg
ICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgICRuYW1lID0gJHtjbGFzc05hbWV9
Ojoke2VudW1lcmF0aW9uVmFsdWVOYW1lfTtcbiIpOworICAgICAgICAgICAgICAgIGlmICghZGVm
aW5lZCAkcGFyYW1ldGVyLT5kZWZhdWx0KSB7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgIiAgICBpZiAoISR7bmFtZX1WYWx1ZS5pc1VuZGVmaW5lZCgpKSB7XG4iKTsK
KyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0
cHV0QXJyYXksICIgICAgaWYgKCR7bmFtZX1WYWx1ZS5pc1VuZGVmaW5lZCgpKSB7XG4iKTsKKyAg
ICAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICAkbmFtZSA9ICIg
LiBHZW5lcmF0ZURlZmF1bHRWYWx1ZSgkaW50ZXJmYWNlLCAkcGFyYW1ldGVyKSAuICI7XG4iKTsK
KyAgICAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIH0gZWxzZSB7XG4i
KTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAiICAgIH0gZWxzZSB7XG4iKTsKICAgICAgICAgICAgICAgICAkaW5kZW50ID0gIiAgICAiOwog
ICAgICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouY3BwCmluZGV4IDhh
NTZjZDE3MjJjZjI4YWRjNmFlNDk3ZTUwYzYwNWMyOWU5ZGMyMTkuLjdlZDYwM2IxM2ViMGY0Yzcx
YWRkOTExZGI0ODhjZDU1ZmM0OTQyM2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmou
Y3BwCkBAIC0zNCw3ICszNCw3IEBACiAjaW5jbHVkZSAiV2ViS2l0RE9NTm9kZVByaXZhdGUuaCIK
ICNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0RE9NU1ZHUG9p
bnRQcml2YXRlLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9NU2hhZG93Um9vdEluaXRQcml2YXRlLmgi
CisjaW5jbHVkZSAiV2ViS2l0RE9NVGVzdERpY3Rpb25hcnlQcml2YXRlLmgiCiAjaW5jbHVkZSAi
V2ViS2l0RE9NVGVzdEVudW1UeXBlUHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdERPTVRlc3RO
b2RlUHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdERPTVRlc3RPYmpQcml2YXRlLmgiCkBAIC0x
NDEzLDYgKzE0MTMsMTYgQEAgdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX2Vu
dW1fYXJnKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktpdERPTVQKICAgICBpdGVtLT5tZXRo
b2RXaXRoRW51bUFyZyhjb252ZXJ0ZWRFbnVtQXJnKTsKIH0KIAordm9pZCB3ZWJraXRfZG9tX3Rl
c3Rfb2JqX21ldGhvZF93aXRoX29wdGlvbmFsX2VudW1fYXJnKFdlYktpdERPTVRlc3RPYmoqIHNl
bGYsIFdlYktpdERPTVRlc3RFbnVtVHlwZSogZW51bUFyZykKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9N
X0lTX1RFU1RfT0JKKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNf
VEVTVF9FTlVNX1RZUEUoZW51bUFyZykpOworICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6VGVzdEVudW1UeXBlKiBjb252ZXJ0ZWRF
bnVtQXJnID0gV2ViS2l0Ojpjb3JlKGVudW1BcmcpOworICAgIGl0ZW0tPm1ldGhvZFdpdGhPcHRp
b25hbEVudW1BcmcoY29udmVydGVkRW51bUFyZyk7Cit9CisKIHZvaWQgd2Via2l0X2RvbV90ZXN0
X29ial9tZXRob2Rfd2l0aF9vcHRpb25hbF9lbnVtX2FyZ19hbmRfZGVmYXVsdF92YWx1ZShXZWJL
aXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01UZXN0RW51bVR5cGUqIGVudW1BcmcpCiB7CiAg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwpAQCAtMjAyMiwxMyArMjAz
MiwxMyBAQCB2b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfYW55KFdlYktpdERPTVRlc3RPYmoqIHNl
bGYsIGdmbG9hdCBhLCBnbG9uZyBiKQogICAgIGl0ZW0tPmFueShhLCBiKTsKIH0KIAotdm9pZCB3
ZWJraXRfZG9tX3Rlc3Rfb2JqX2F0dGFjaF9zaGFkb3dfcm9vdChXZWJLaXRET01UZXN0T2JqKiBz
ZWxmLCBXZWJLaXRET01TaGFkb3dSb290SW5pdCogaW5pdCkKK3ZvaWQgd2Via2l0X2RvbV90ZXN0
X29ial9hdHRhY2hfc2hhZG93X3Jvb3QoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9N
VGVzdERpY3Rpb25hcnkqIGluaXQpCiB7CiAgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOwogICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihz
ZWxmKSk7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1NIQURPV19ST09UX0lO
SVQoaW5pdCkpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX0RJQ1RJ
T05BUlkoaW5pdCkpOwogICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7Ci0gICAgV2ViQ29yZTo6U2hhZG93Um9vdEluaXQqIGNvbnZlcnRlZEluaXQgPSBXZWJL
aXQ6OmNvcmUoaW5pdCk7CisgICAgV2ViQ29yZTo6VGVzdERpY3Rpb25hcnkqIGNvbnZlcnRlZElu
aXQgPSBXZWJLaXQ6OmNvcmUoaW5pdCk7CiAgICAgaXRlbS0+YXR0YWNoU2hhZG93Um9vdChjb252
ZXJ0ZWRJbml0KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5oIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5oCmluZGV4IGU1ZmZh
NTE3YTEzNzY3MWNlZWM4MzcxNWM1ZmMxYmIyNDY0NjRhNDMuLjExYTVlZTg1YmJmYmJiNzBiMzFm
Yzg2MWYxMThjNDM1ZTUxZmZiNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmgKQEAg
LTMyMCw2ICszMjAsMTYgQEAgV0VCS0lUX0FQSSB2b2lkCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21l
dGhvZF93aXRoX2VudW1fYXJnKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktpdERPTVRlc3RF
bnVtVHlwZSogZW51bUFyZyk7CiAKIC8qKgorICogd2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rf
d2l0aF9vcHRpb25hbF9lbnVtX2FyZzoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCisg
KiBAZW51bUFyZzogQSAjV2ViS2l0RE9NVGVzdEVudW1UeXBlCisgKgorICogU3RhYmlsaXR5OiBV
bnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9k
X3dpdGhfb3B0aW9uYWxfZW51bV9hcmcoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9N
VGVzdEVudW1UeXBlKiBlbnVtQXJnKTsKKworLyoqCiAgKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21l
dGhvZF93aXRoX29wdGlvbmFsX2VudW1fYXJnX2FuZF9kZWZhdWx0X3ZhbHVlOgogICogQHNlbGY6
IEEgI1dlYktpdERPTVRlc3RPYmoKICAqIEBlbnVtQXJnOiBBICNXZWJLaXRET01UZXN0RW51bVR5
cGUKQEAgLTkzNSwxMiArOTQ1LDEyIEBAIHdlYmtpdF9kb21fdGVzdF9vYmpfYW55KFdlYktpdERP
TVRlc3RPYmoqIHNlbGYsIGdmbG9hdCBhLCBnbG9uZyBiKTsKIC8qKgogICogd2Via2l0X2RvbV90
ZXN0X29ial9hdHRhY2hfc2hhZG93X3Jvb3Q6CiAgKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9i
agotICogQGluaXQ6IEEgI1dlYktpdERPTVNoYWRvd1Jvb3RJbml0CisgKiBAaW5pdDogQSAjV2Vi
S2l0RE9NVGVzdERpY3Rpb25hcnkKICAqCiAgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCiAqKi8KIFdF
QktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9hdHRhY2hfc2hhZG93X3Jvb3QoV2Vi
S2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NU2hhZG93Um9vdEluaXQqIGluaXQpOword2Vi
a2l0X2RvbV90ZXN0X29ial9hdHRhY2hfc2hhZG93X3Jvb3QoV2ViS2l0RE9NVGVzdE9iaiogc2Vs
ZiwgV2ViS2l0RE9NVGVzdERpY3Rpb25hcnkqIGluaXQpOwogCiAvKioKICAqIHdlYmtpdF9kb21f
dGVzdF9vYmpfZ2V0X3JlYWRfb25seV9sb25nX2F0dHI6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCmluZGV4IGJmYzE2MjU1
OGNkOWFhYmM4MWQ3NTMwYmYxZDE4NjUxMWVjODc4NmYuLjlhMWI0MmQyODY2MjYzNmVmMzE2YzJm
N2UxNDM5OGYzNjhhNWVlNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCkBAIC05MSwxMSArOTEsMTIgQEAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4gT3B0aW9uYWw8VD4gcGFyc2UoRXhlY1N0YXRlJiwgSlNWYWx1ZSk7CiB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdCBjaGFyKiBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVz
KCk7CiAKIEpTU3RyaW5nKiBqc1N0cmluZ1dpdGhDYWNoZShFeGVjU3RhdGUqLCBUZXN0T2JqOjpF
bnVtVHlwZSk7CisKIEpTU3RyaW5nKiBqc1N0cmluZ1dpdGhDYWNoZShFeGVjU3RhdGUqIHN0YXRl
LCBUZXN0T2JqOjpFbnVtVHlwZSBlbnVtZXJhdGlvblZhbHVlKQogewogICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IHZhbHVlc1tdID0gewogICAgICAgICBlbXB0eVN0cmlu
ZygpLAotICAgICAgICBBU0NJSUxpdGVyYWwoIkVudW1WYWx1ZTEiKSwKKyAgICAgICAgQVNDSUlM
aXRlcmFsKCJlbnVtVmFsdWUxIiksCiAgICAgICAgIEFTQ0lJTGl0ZXJhbCgiRW51bVZhbHVlMiIp
LAogICAgICAgICBBU0NJSUxpdGVyYWwoIkVudW1WYWx1ZTMiKSwKICAgICB9OwpAQCAtMTE2LDcg
KzExNyw3IEBAIHRlbXBsYXRlPD4gT3B0aW9uYWw8VGVzdE9iajo6RW51bVR5cGU+IHBhcnNlPFRl
c3RPYmo6OkVudW1UeXBlPihFeGVjU3RhdGUmIHN0YXRlCiAgICAgYXV0byBzdHJpbmdWYWx1ZSA9
IHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7CiAgICAgaWYgKHN0cmluZ1ZhbHVlLmlzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuIFRlc3RPYmo6OkVudW1UeXBlOjpFbXB0eVN0cmluZzsKLSAgICBp
ZiAoc3RyaW5nVmFsdWUgPT0gIkVudW1WYWx1ZTEiKQorICAgIGlmIChzdHJpbmdWYWx1ZSA9PSAi
ZW51bVZhbHVlMSIpCiAgICAgICAgIHJldHVybiBUZXN0T2JqOjpFbnVtVHlwZTo6RW51bVZhbHVl
MTsKICAgICBpZiAoc3RyaW5nVmFsdWUgPT0gIkVudW1WYWx1ZTIiKQogICAgICAgICByZXR1cm4g
VGVzdE9iajo6RW51bVR5cGU6OkVudW1WYWx1ZTI7CkBAIC0xMzcsMTAgKzEzOCwxMSBAQCB0ZW1w
bGF0ZTw+IFRlc3RPYmo6OkVudW1UeXBlIGNvbnZlcnQ8VGVzdE9iajo6RW51bVR5cGU+KEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVmFsdQogCiB0ZW1wbGF0ZTw+IGlubGluZSBjb25zdCBjaGFyKiBleHBl
Y3RlZEVudW1lcmF0aW9uVmFsdWVzPFRlc3RPYmo6OkVudW1UeXBlPigpCiB7Ci0gICAgcmV0dXJu
ICJcIlwiLCBcIkVudW1WYWx1ZTFcIiwgXCJFbnVtVmFsdWUyXCIsIFwiRW51bVZhbHVlM1wiIjsK
KyAgICByZXR1cm4gIlwiXCIsIFwiZW51bVZhbHVlMVwiLCBcIkVudW1WYWx1ZTJcIiwgXCJFbnVt
VmFsdWUzXCIiOwogfQogCiBKU1N0cmluZyoganNTdHJpbmdXaXRoQ2FjaGUoRXhlY1N0YXRlKiwg
VGVzdE9iajo6T3B0aW9uYWwpOworCiBKU1N0cmluZyoganNTdHJpbmdXaXRoQ2FjaGUoRXhlY1N0
YXRlKiBzdGF0ZSwgVGVzdE9iajo6T3B0aW9uYWwgZW51bWVyYXRpb25WYWx1ZSkKIHsKICAgICBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiB2YWx1ZXNbXSA9IHsKQEAgLTE5Myw2
ICsxOTUsNyBAQCB0ZW1wbGF0ZTw+IGlubGluZSBjb25zdCBjaGFyKiBleHBlY3RlZEVudW1lcmF0
aW9uVmFsdWVzPFRlc3RPYmo6Ok9wdGlvbmFsPigpCiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpCiAK
IEpTU3RyaW5nKiBqc1N0cmluZ1dpdGhDYWNoZShFeGVjU3RhdGUqLCBUZXN0T2JqOjpFbnVtQSk7
CisKIEpTU3RyaW5nKiBqc1N0cmluZ1dpdGhDYWNoZShFeGVjU3RhdGUqIHN0YXRlLCBUZXN0T2Jq
OjpFbnVtQSBlbnVtZXJhdGlvblZhbHVlKQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxj
b25zdCBTdHJpbmc+IHZhbHVlc1tdID0gewpAQCAtMjM1LDYgKzIzOCw3IEBAIHRlbXBsYXRlPD4g
aW5saW5lIGNvbnN0IGNoYXIqIGV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXM8VGVzdE9iajo6RW51
bUE+KCkKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgJiYgRU5BQkxFKENvbmRpdGlvbjIpCiAKIEpT
U3RyaW5nKiBqc1N0cmluZ1dpdGhDYWNoZShFeGVjU3RhdGUqLCBUZXN0T2JqOjpFbnVtQik7CisK
IEpTU3RyaW5nKiBqc1N0cmluZ1dpdGhDYWNoZShFeGVjU3RhdGUqIHN0YXRlLCBUZXN0T2JqOjpF
bnVtQiBlbnVtZXJhdGlvblZhbHVlKQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25z
dCBTdHJpbmc+IHZhbHVlc1tdID0gewpAQCAtMjc3LDYgKzI4MSw3IEBAIHRlbXBsYXRlPD4gaW5s
aW5lIGNvbnN0IGNoYXIqIGV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXM8VGVzdE9iajo6RW51bUI+
KCkKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCiAKIEpTU3Ry
aW5nKiBqc1N0cmluZ1dpdGhDYWNoZShFeGVjU3RhdGUqLCBUZXN0T2JqOjpFbnVtQyk7CisKIEpT
U3RyaW5nKiBqc1N0cmluZ1dpdGhDYWNoZShFeGVjU3RhdGUqIHN0YXRlLCBUZXN0T2JqOjpFbnVt
QyBlbnVtZXJhdGlvblZhbHVlKQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBT
dHJpbmc+IHZhbHVlc1tdID0gewpAQCAtMzE3LDYgKzMyMiw3IEBAIHRlbXBsYXRlPD4gaW5saW5l
IGNvbnN0IGNoYXIqIGV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXM8VGVzdE9iajo6RW51bUM+KCkK
ICNlbmRpZgogCiBKU1N0cmluZyoganNTdHJpbmdXaXRoQ2FjaGUoRXhlY1N0YXRlKiwgVGVzdE9i
ajo6S2luZCk7CisKIEpTU3RyaW5nKiBqc1N0cmluZ1dpdGhDYWNoZShFeGVjU3RhdGUqIHN0YXRl
LCBUZXN0T2JqOjpLaW5kIGVudW1lcmF0aW9uVmFsdWUpCiB7CiAgICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPGNvbnN0IFN0cmluZz4gdmFsdWVzW10gPSB7CkBAIC0zNTksNiArMzY1LDcgQEAgdGVt
cGxhdGU8PiBpbmxpbmUgY29uc3QgY2hhciogZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlczxUZXN0
T2JqOjpLaW5kPigpCiB9CiAKIEpTU3RyaW5nKiBqc1N0cmluZ1dpdGhDYWNoZShFeGVjU3RhdGUq
LCBUZXN0T2JqOjpTaXplKTsKKwogSlNTdHJpbmcqIGpzU3RyaW5nV2l0aENhY2hlKEV4ZWNTdGF0
ZSogc3RhdGUsIFRlc3RPYmo6OlNpemUgZW51bWVyYXRpb25WYWx1ZSkKIHsKICAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiB2YWx1ZXNbXSA9IHsKQEAgLTQwMSw2ICs0MDgs
NyBAQCB0ZW1wbGF0ZTw+IGlubGluZSBjb25zdCBjaGFyKiBleHBlY3RlZEVudW1lcmF0aW9uVmFs
dWVzPFRlc3RPYmo6OlNpemU+KCkKIH0KIAogSlNTdHJpbmcqIGpzU3RyaW5nV2l0aENhY2hlKEV4
ZWNTdGF0ZSosIFRlc3RPYmo6OkNvbmZpZGVuY2UpOworCiBKU1N0cmluZyoganNTdHJpbmdXaXRo
Q2FjaGUoRXhlY1N0YXRlKiBzdGF0ZSwgVGVzdE9iajo6Q29uZmlkZW5jZSBlbnVtZXJhdGlvblZh
bHVlKQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IHZhbHVlc1td
ID0gewpAQCAtNDQyLDkyICs0NTAsNjggQEAgdGVtcGxhdGU8PiBpbmxpbmUgY29uc3QgY2hhciog
ZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlczxUZXN0T2JqOjpDb25maWRlbmNlPigpCiAgICAgcmV0
dXJuICJcImhpZ2hcIiwgXCJraW5kYS1sb3dcIiI7CiB9CiAKLUpTU3RyaW5nKiBqc1N0cmluZ1dp
dGhDYWNoZShFeGVjU3RhdGUqLCBUZXN0T2JqOjpTaGFkb3dSb290TW9kZSk7Ci1KU1N0cmluZyog
anNTdHJpbmdXaXRoQ2FjaGUoRXhlY1N0YXRlKiBzdGF0ZSwgVGVzdE9iajo6U2hhZG93Um9vdE1v
ZGUgZW51bWVyYXRpb25WYWx1ZSkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3Qg
U3RyaW5nPiB2YWx1ZXNbXSA9IHsKLSAgICAgICAgQVNDSUlMaXRlcmFsKCJvcGVuIiksCi0gICAg
ICAgIEFTQ0lJTGl0ZXJhbCgiY2xvc2VkIiksCi0gICAgfTsKLSAgICBzdGF0aWNfYXNzZXJ0KHN0
YXRpY19jYXN0PHNpemVfdD4oVGVzdE9iajo6U2hhZG93Um9vdE1vZGU6Ok9wZW4pID09IDAsICJU
ZXN0T2JqOjpTaGFkb3dSb290TW9kZTo6T3BlbiBpcyBub3QgMCBhcyBleHBlY3RlZCIpOwotICAg
IHN0YXRpY19hc3NlcnQoc3RhdGljX2Nhc3Q8c2l6ZV90PihUZXN0T2JqOjpTaGFkb3dSb290TW9k
ZTo6Q2xvc2VkKSA9PSAxLCAiVGVzdE9iajo6U2hhZG93Um9vdE1vZGU6OkNsb3NlZCBpcyBub3Qg
MSBhcyBleHBlY3RlZCIpOwotICAgIEFTU0VSVChzdGF0aWNfY2FzdDxzaXplX3Q+KGVudW1lcmF0
aW9uVmFsdWUpIDwgV1RGX0FSUkFZX0xFTkdUSCh2YWx1ZXMpKTsKLSAgICByZXR1cm4ganNTdHJp
bmdXaXRoQ2FjaGUoc3RhdGUsIHZhbHVlc1tzdGF0aWNfY2FzdDxzaXplX3Q+KGVudW1lcmF0aW9u
VmFsdWUpXSk7Ci19Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTVmFsdWVUcmFpdHM8VGVzdE9iajo6
U2hhZG93Um9vdE1vZGU+IHsKLSAgICBzdGF0aWMgSlNTdHJpbmcqIGFycmF5SlNWYWx1ZShFeGVj
U3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RPYmo6OlNoYWRvd1Jvb3RNb2Rl
IHZhbHVlKSB7IHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgdmFsdWUpOyB9Ci19Owot
Ci10ZW1wbGF0ZTw+IE9wdGlvbmFsPFRlc3RPYmo6OlNoYWRvd1Jvb3RNb2RlPiBwYXJzZTxUZXN0
T2JqOjpTaGFkb3dSb290TW9kZT4oRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsK
LSAgICBhdXRvIHN0cmluZ1ZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKLSAgICBp
ZiAoc3RyaW5nVmFsdWUgPT0gIm9wZW4iKQotICAgICAgICByZXR1cm4gVGVzdE9iajo6U2hhZG93
Um9vdE1vZGU6Ok9wZW47Ci0gICAgaWYgKHN0cmluZ1ZhbHVlID09ICJjbG9zZWQiKQotICAgICAg
ICByZXR1cm4gVGVzdE9iajo6U2hhZG93Um9vdE1vZGU6OkNsb3NlZDsKLSAgICByZXR1cm4gTnVs
bG9wdDsKLX0KLQotdGVtcGxhdGU8PiBUZXN0T2JqOjpTaGFkb3dSb290TW9kZSBjb252ZXJ0PFRl
c3RPYmo6OlNoYWRvd1Jvb3RNb2RlPihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQot
ewotICAgIGF1dG8gcmVzdWx0ID0gcGFyc2U8VGVzdE9iajo6U2hhZG93Um9vdE1vZGU+KHN0YXRl
LCB2YWx1ZSk7Ci0gICAgaWYgKFVOTElLRUxZKCFyZXN1bHQpKSB7Ci0gICAgICAgIHRocm93VHlw
ZUVycm9yKCZzdGF0ZSk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotICAgIHJldHVybiBy
ZXN1bHQudmFsdWUoKTsKLX0KLQotdGVtcGxhdGU8PiBpbmxpbmUgY29uc3QgY2hhciogZXhwZWN0
ZWRFbnVtZXJhdGlvblZhbHVlczxUZXN0T2JqOjpTaGFkb3dSb290TW9kZT4oKQotewotICAgIHJl
dHVybiAiXCJvcGVuXCIsIFwiY2xvc2VkXCIiOwotfQotCi10ZW1wbGF0ZTw+IFRlc3RPYmo6OlNo
YWRvd1Jvb3RJbml0IGNvbnZlcnQ8VGVzdE9iajo6U2hhZG93Um9vdEluaXQ+KEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVmFsdWUgdmFsdWUpCit0ZW1wbGF0ZTw+IFRlc3RPYmo6OkRpY3Rpb25hcnkgY29u
dmVydDxUZXN0T2JqOjpEaWN0aW9uYXJ5PihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVl
KQogeworICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICByZXR1cm4g
eyB7IH0sIFRlc3RPYmo6OkVudW1UeXBlOjpFbnVtVmFsdWUxLCBUZXN0T2JqOjpFbnVtVHlwZTo6
RW1wdHlTdHJpbmcsICJkZWZhdWx0U3RyaW5nIiwgeyB9LCBmYWxzZSwgeyB9LCB7IH0gfTsKICAg
ICBhdXRvKiBvYmplY3QgPSB2YWx1ZS5nZXRPYmplY3QoKTsKICAgICBpZiAoVU5MSUtFTFkoIW9i
amVjdCB8fCBvYmplY3QtPnR5cGUoKSA9PSBSZWdFeHBPYmplY3RUeXBlKSkgewogICAgICAgICB0
aHJvd1R5cGVFcnJvcigmc3RhdGUpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KLSAgICBh
dXRvIG1vZGUgPSBjb252ZXJ0PFRlc3RPYmo6OlNoYWRvd1Jvb3RNb2RlPihzdGF0ZSwgb2JqZWN0
LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgIm1vZGUiKSkpOwot
ICAgIHJldHVybiB7IFdURk1vdmUobW9kZSkgfTsKKyAgICBhdXRvIGVudW1lcmF0aW9uVmFsdWVX
aXRob3V0RGVmYXVsdCA9IGNvbnZlcnRPcHRpb25hbDxUZXN0T2JqOjpFbnVtVHlwZT4oc3RhdGUs
IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJlbnVt
ZXJhdGlvblZhbHVlV2l0aG91dERlZmF1bHQiKSkpOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS5o
YWRFeGNlcHRpb24oKSkpCisgICAgICAgIHJldHVybiB7IH07CisgICAgYXV0byBlbnVtZXJhdGlv
blZhbHVlV2l0aERlZmF1bHQgPSBjb252ZXJ0T3B0aW9uYWw8VGVzdE9iajo6RW51bVR5cGU+KHN0
YXRlLCBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAi
ZW51bWVyYXRpb25WYWx1ZVdpdGhEZWZhdWx0IikpLCBUZXN0T2JqOjpFbnVtVHlwZTo6RW51bVZh
bHVlMSk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICAgICAg
cmV0dXJuIHsgfTsKKyAgICBhdXRvIGVudW1lcmF0aW9uVmFsdWVXaXRoRW1wdHlTdHJpbmdEZWZh
dWx0ID0gY29udmVydE9wdGlvbmFsPFRlc3RPYmo6OkVudW1UeXBlPihzdGF0ZSwgb2JqZWN0LT5n
ZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImVudW1lcmF0aW9uVmFs
dWVXaXRoRW1wdHlTdHJpbmdEZWZhdWx0IikpLCBUZXN0T2JqOjpFbnVtVHlwZTo6RW1wdHlTdHJp
bmcpOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgICAgIHJl
dHVybiB7IH07CisgICAgYXV0byBzdHJpbmdXaXRoRGVmYXVsdCA9IGNvbnZlcnRPcHRpb25hbDxT
dHJpbmc+KHN0YXRlLCBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmco
JnN0YXRlLCAic3RyaW5nV2l0aERlZmF1bHQiKSksICJkZWZhdWx0U3RyaW5nIik7CisgICAgaWYg
KFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAg
ICBhdXRvIHN0cmluZ1dpdGhvdXREZWZhdWx0ID0gY29udmVydE9wdGlvbmFsPFN0cmluZz4oc3Rh
dGUsIG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJz
dHJpbmdXaXRob3V0RGVmYXVsdCIpKSk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2Vw
dGlvbigpKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICBhdXRvIGJvb2xlYW5XaXRoRGVmYXVs
dCA9IGNvbnZlcnRPcHRpb25hbDxib29sPihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImJvb2xlYW5XaXRoRGVmYXVsdCIpKSwgZmFsc2Up
OworICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgICAgIHJldHVy
biB7IH07CisgICAgYXV0byBib29sZWFuV2l0aG91dERlZmF1bHQgPSBjb252ZXJ0T3B0aW9uYWw8
Ym9vbD4oc3RhdGUsIG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygm
c3RhdGUsICJib29sZWFuV2l0aG91dERlZmF1bHQiKSkpOworICAgIGlmIChVTkxJS0VMWShzdGF0
ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgICAgIHJldHVybiB7IH07CisgICAgYXV0byBzZXF1ZW5j
ZU9mU3RyaW5ncyA9IGNvbnZlcnRPcHRpb25hbDxWZWN0b3I8U3RyaW5nPj4oc3RhdGUsIG9iamVj
dC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJzZXF1ZW5jZU9m
U3RyaW5ncyIpKSk7CisgICAgcmV0dXJuIHsgV1RGTW92ZShlbnVtZXJhdGlvblZhbHVlV2l0aG91
dERlZmF1bHQpLCBXVEZNb3ZlKGVudW1lcmF0aW9uVmFsdWVXaXRoRGVmYXVsdCksIFdURk1vdmUo
ZW51bWVyYXRpb25WYWx1ZVdpdGhFbXB0eVN0cmluZ0RlZmF1bHQpLCBXVEZNb3ZlKHN0cmluZ1dp
dGhEZWZhdWx0KSwgV1RGTW92ZShzdHJpbmdXaXRob3V0RGVmYXVsdCksIFdURk1vdmUoYm9vbGVh
bldpdGhEZWZhdWx0KSwgV1RGTW92ZShib29sZWFuV2l0aG91dERlZmF1bHQpLCBXVEZNb3ZlKHNl
cXVlbmNlT2ZTdHJpbmdzKSB9OwogfQogCi10ZW1wbGF0ZTw+IFRlc3RPYmo6OkZvbnRGYWNlRGVz
Y3JpcHRvcnMgY29udmVydDxUZXN0T2JqOjpGb250RmFjZURlc2NyaXB0b3JzPihFeGVjU3RhdGUm
IHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQordGVtcGxhdGU8PiBUZXN0T2JqOjpEaWN0aW9uYXJ5VGhh
dFNob3VsZE5vdFRvbGVyYXRlTnVsbCBjb252ZXJ0PFRlc3RPYmo6OkRpY3Rpb25hcnlUaGF0U2hv
dWxkTm90VG9sZXJhdGVOdWxsPihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQogewot
ICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICByZXR1cm4geyAibm9y
bWFsIiwgIlUrMC0xMEZGRkYiIH07CiAgICAgYXV0byogb2JqZWN0ID0gdmFsdWUuZ2V0T2JqZWN0
KCk7CiAgICAgaWYgKFVOTElLRUxZKCFvYmplY3QgfHwgb2JqZWN0LT50eXBlKCkgPT0gUmVnRXhw
T2JqZWN0VHlwZSkpIHsKICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlKTsKICAgICAgICAg
cmV0dXJuIHsgfTsKICAgICB9Ci0gICAgYXV0byBzdHlsZSA9IGNvbnZlcnRPcHRpb25hbDxTdHJp
bmc+KHN0YXRlLCBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0
YXRlLCAic3R5bGUiKSksICJub3JtYWwiKTsKKyAgICBhdXRvIHJlcXVpcmVkRW51bWVyYXRpb25W
YWx1ZSA9IGNvbnZlcnQ8VGVzdE9iajo6RW51bVR5cGU+KHN0YXRlLCBvYmplY3QtPmdldCgmc3Rh
dGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAicmVxdWlyZWRFbnVtZXJhdGlvblZh
bHVlIikpKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4geyB9OwotICAgIGF1dG8gdW5pY29kZVJhbmdlID0gY29udmVydE9wdGlvbmFsPFN0
cmluZz4oc3RhdGUsIG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygm
c3RhdGUsICJ1bmljb2RlUmFuZ2UiKSksICJVKzAtMTBGRkZGIik7Ci0gICAgcmV0dXJuIHsgV1RG
TW92ZShzdHlsZSksIFdURk1vdmUodW5pY29kZVJhbmdlKSB9OworICAgIGF1dG8gYm9vbGVhbldp
dGhvdXREZWZhdWx0ID0gY29udmVydE9wdGlvbmFsPGJvb2w+KHN0YXRlLCBvYmplY3QtPmdldCgm
c3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiYm9vbGVhbldpdGhvdXREZWZh
dWx0IikpKTsKKyAgICByZXR1cm4geyBXVEZNb3ZlKHJlcXVpcmVkRW51bWVyYXRpb25WYWx1ZSks
IFdURk1vdmUoYm9vbGVhbldpdGhvdXREZWZhdWx0KSB9OwogfQogCi10ZW1wbGF0ZTw+IFRlc3RP
Ymo6Ok11dGF0aW9uT2JzZXJ2ZXJJbml0IGNvbnZlcnQ8VGVzdE9iajo6TXV0YXRpb25PYnNlcnZl
ckluaXQ+KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit0ZW1wbGF0ZTw+IFRlc3RP
Ymo6OkRpY3Rpb25hcnlUaGF0U2hvdWxkVG9sZXJhdGVOdWxsIGNvbnZlcnQ8VGVzdE9iajo6RGlj
dGlvbmFyeVRoYXRTaG91bGRUb2xlcmF0ZU51bGw+KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUg
dmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgIHJl
dHVybiB7IGZhbHNlLCBOdWxsb3B0LCBOdWxsb3B0IH07CisgICAgICAgIHJldHVybiB7IHsgfSwg
eyB9IH07CiAgICAgYXV0byogb2JqZWN0ID0gdmFsdWUuZ2V0T2JqZWN0KCk7CiAgICAgaWYgKFVO
TElLRUxZKCFvYmplY3QgfHwgb2JqZWN0LT50eXBlKCkgPT0gUmVnRXhwT2JqZWN0VHlwZSkpIHsK
ICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAg
ICB9Ci0gICAgYXV0byBjaGlsZExpc3QgPSBjb252ZXJ0T3B0aW9uYWw8Ym9vbD4oc3RhdGUsIG9i
amVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJjaGlsZExp
c3QiKSksIGZhbHNlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQot
ICAgICAgICByZXR1cm4geyB9OwotICAgIGF1dG8gYXR0cmlidXRlcyA9IGNvbnZlcnRPcHRpb25h
bDxib29sPihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZzdGF0ZSwgImF0dHJpYnV0ZXMiKSkpOworICAgIGF1dG8gZW51bWVyYXRpb25WYWx1ZSA9IGNv
bnZlcnRPcHRpb25hbDxUZXN0T2JqOjpFbnVtVHlwZT4oc3RhdGUsIG9iamVjdC0+Z2V0KCZzdGF0
ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJlbnVtZXJhdGlvblZhbHVlIikpKTsK
ICAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
eyB9OwotICAgIGF1dG8gYXR0cmlidXRlRmlsdGVyID0gY29udmVydE9wdGlvbmFsPFZlY3RvcjxT
dHJpbmc+PihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZzdGF0ZSwgImF0dHJpYnV0ZUZpbHRlciIpKSk7Ci0gICAgcmV0dXJuIHsgV1RGTW92ZShjaGls
ZExpc3QpLCBXVEZNb3ZlKGF0dHJpYnV0ZXMpLCBXVEZNb3ZlKGF0dHJpYnV0ZUZpbHRlcikgfTsK
KyAgICBhdXRvIGJvb2xlYW5XaXRob3V0RGVmYXVsdCA9IGNvbnZlcnRPcHRpb25hbDxib29sPihz
dGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwg
ImJvb2xlYW5XaXRob3V0RGVmYXVsdCIpKSk7CisgICAgcmV0dXJuIHsgV1RGTW92ZShlbnVtZXJh
dGlvblZhbHVlKSwgV1RGTW92ZShib29sZWFuV2l0aG91dERlZmF1bHQpIH07CiB9CiAKIC8vIEZ1
bmN0aW9ucwpAQCAtNTU0LDYgKzUzOCw3IEBAIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk51bGxhYmxlU3RyaW5nU3BlY2lhCiBKU0M6
OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoU2VxdWVuY2VBcmcoSlNDOjpFeGVjU3RhdGUqKTsKIEpTQzo6RW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFJldHVybmlu
Z1NlcXVlbmNlKEpTQzo6RXhlY1N0YXRlKik7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoRW51bUFyZyhKU0M6OkV4
ZWNTdGF0ZSopOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsRW51bUFyZyhKU0M6OkV4ZWNTdGF0ZSop
OwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsRW51bUFyZ0FuZERlZmF1bHRWYWx1ZShKU0M6OkV4ZWNT
dGF0ZSopOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uTWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0FuZFRocm93cyhKU0M6OkV4ZWNT
dGF0ZSopOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uU2VyaWFsaXplZFZhbHVlKEpTQzo6RXhlY1N0YXRlKik7CkBAIC0xMTI0LDYg
KzExMDksNyBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0T2JqUHJvdG90eXBl
VGFibGVWYWx1ZXNbXSA9CiAgICAgeyAibWV0aG9kV2l0aFNlcXVlbmNlQXJnIiwgSlNDOjpGdW5j
dGlvbiwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9u
Pihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhTZXF1ZW5jZUFyZyksIChpbnRw
dHJfdCkgKDEpIH0gfSwKICAgICB7ICJtZXRob2RSZXR1cm5pbmdTZXF1ZW5jZSIsIEpTQzo6RnVu
Y3Rpb24sIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlv
bj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RSZXR1cm5pbmdTZXF1ZW5jZSksIChp
bnRwdHJfdCkgKDEpIH0gfSwKICAgICB7ICJtZXRob2RXaXRoRW51bUFyZyIsIEpTQzo6RnVuY3Rp
b24sIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4o
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoRW51bUFyZyksIChpbnRwdHJfdCkg
KDEpIH0gfSwKKyAgICB7ICJtZXRob2RXaXRoT3B0aW9uYWxFbnVtQXJnIiwgSlNDOjpGdW5jdGlv
biwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEVudW1BcmcpLCAoaW50
cHRyX3QpICgwKSB9IH0sCiAgICAgeyAibWV0aG9kV2l0aE9wdGlvbmFsRW51bUFyZ0FuZERlZmF1
bHRWYWx1ZSIsIEpTQzo6RnVuY3Rpb24sIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNf
Y2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRo
T3B0aW9uYWxFbnVtQXJnQW5kRGVmYXVsdFZhbHVlKSwgKGludHB0cl90KSAoMCkgfSB9LAogICAg
IHsgIm1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3MiLCBKU0M6OkZ1bmN0aW9uLCBO
b0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0FuZFRocm93cyks
IChpbnRwdHJfdCkgKDIpIH0gfSwKICAgICB7ICJzZXJpYWxpemVkVmFsdWUiLCBKU0M6OkZ1bmN0
aW9uLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+
KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2VyaWFsaXplZFZhbHVlKSwgKGludHB0cl90KSAo
MSkgfSB9LApAQCAtNDIwNiw2ICs0MTkyLDI3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoRW51bUFyZyhFeGVjU3RhCiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAorRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhP
cHRpb25hbEVudW1BcmcoRXhlY1N0YXRlKiBzdGF0ZSkKK3sKKyAgICBKU1ZhbHVlIHRoaXNWYWx1
ZSA9IHN0YXRlLT50aGlzVmFsdWUoKTsKKyAgICBhdXRvIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWND
YXN0PEpTVGVzdE9iaio+KHRoaXNWYWx1ZSk7CisgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlz
KSkKKyAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwg
Im1ldGhvZFdpdGhPcHRpb25hbEVudW1BcmciKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKKyAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOworICAgIGF1dG8gZW51bUFyZ1ZhbHVlID0gc3RhdGUtPmFyZ3Vt
ZW50KDApOworICAgIE9wdGlvbmFsPFRlc3RPYmo6OkVudW1UeXBlPiBlbnVtQXJnOworICAgIGlm
ICghZW51bUFyZ1ZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAgZW51bUFyZyA9IHBhcnNl
PFRlc3RPYmo6OkVudW1UeXBlPigqc3RhdGUsIGVudW1BcmdWYWx1ZSk7CisgICAgICAgIGlmIChV
TkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFlbnVtQXJn
KSkKKyAgICAgICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50TXVzdEJlRW51bUVycm9yKCpzdGF0
ZSwgMCwgImVudW1BcmciLCAiVGVzdE9iaiIsICJtZXRob2RXaXRoT3B0aW9uYWxFbnVtQXJnIiwg
ZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlczxUZXN0T2JqOjpFbnVtVHlwZT4oKSk7CisgICAgfQor
ICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsRW51bUFyZyhlbnVtQXJnKTsKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworfQorCiBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsRW51
bUFyZ0FuZERlZmF1bHRWYWx1ZShFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIEpTVmFsdWUgdGhp
c1ZhbHVlID0gc3RhdGUtPnRoaXNWYWx1ZSgpOwpAQCAtNjEwNyw3ICs2MTE0LDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkF0dGFjaFNo
YWRvd1Jvb3QoRXhlY1N0YXQKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9y
KHN0YXRlKSk7Ci0gICAgYXV0byBpbml0ID0gY29udmVydDxUZXN0T2JqOjpTaGFkb3dSb290SW5p
dD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCkpOworICAgIGF1dG8gaW5pdCA9IGNvbnZlcnQ8
VGVzdE9iajo6RGljdGlvbmFyeT4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCkpOwogICAgIGlm
IChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwuYXR0YWNoU2hhZG93Um9vdChXVEZN
b3ZlKGluaXQpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9PYmpDL0RPTVRlc3RPYmouaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9PYmpDL0RPTVRlc3RPYmouaAppbmRleCBiNDY5MjUzOGJlNDcwZGViOWU1ZDkwYjM2NmRl
ZGRjMzk2MjMwOTIyLi5hZGJmYTA5OWQwNDNiYWIxOTZmMWU2MjFjZGQ2YjgyOGYzMTkxYTE2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01U
ZXN0T2JqLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMv
RE9NVGVzdE9iai5oCkBAIC0zMSw3ICszMSw3IEBACiBAY2xhc3MgRE9NTm9kZTsKIEBjbGFzcyBE
T01TVkdEb2N1bWVudDsKIEBjbGFzcyBET01TVkdQb2ludDsKLUBjbGFzcyBET01TaGFkb3dSb290
SW5pdDsKK0BjbGFzcyBET01UZXN0RGljdGlvbmFyeTsKIEBjbGFzcyBET01UZXN0RW51bVR5cGU7
CiBAY2xhc3MgRE9NVGVzdE5vZGU7CiBAY2xhc3MgRE9NVGVzdE9iajsKQEAgLTE1NSw2ICsxNTUs
NyBAQCBXRUJDT1JFX0VYUE9SVCBAaW50ZXJmYWNlIERPTVRlc3RPYmogOiBET01PYmplY3QKIC0g
KE5TU3RyaW5nICopbnVsbGFibGVTdHJpbmdTdGF0aWNNZXRob2Q7CiAtIChOU1N0cmluZyAqKW51
bGxhYmxlU3RyaW5nU3BlY2lhbE1ldGhvZDoodW5zaWduZWQpaW5kZXg7CiAtICh2b2lkKW1ldGhv
ZFdpdGhFbnVtQXJnOihET01UZXN0RW51bVR5cGUgKillbnVtQXJnOworLSAodm9pZCltZXRob2RX
aXRoT3B0aW9uYWxFbnVtQXJnOihET01UZXN0RW51bVR5cGUgKillbnVtQXJnOwogLSAodm9pZClt
ZXRob2RXaXRoT3B0aW9uYWxFbnVtQXJnQW5kRGVmYXVsdFZhbHVlOihET01UZXN0RW51bVR5cGUg
KillbnVtQXJnOwogLSAoRE9NVGVzdE9iaiAqKW1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRU
aHJvd3M6KE5TU3RyaW5nICopc3RyQXJnIG9iakFyZzooRE9NVGVzdE9iaiAqKW9iakFyZzsKIC0g
KHZvaWQpc2VyaWFsaXplZFZhbHVlOihOU1N0cmluZyAqKXNlcmlhbGl6ZWRBcmc7CkBAIC0yMTcs
NSArMjE4LDUgQEAgV0VCQ09SRV9FWFBPUlQgQGludGVyZmFjZSBET01UZXN0T2JqIDogRE9NT2Jq
ZWN0CiAtICh2b2lkKXZhcmlhZGljRG91YmxlTWV0aG9kOihkb3VibGUpaGVhZCB0YWlsOihkb3Vi
bGUpdGFpbDsKIC0gKHZvaWQpdmFyaWFkaWNOb2RlTWV0aG9kOihET01Ob2RlICopaGVhZCB0YWls
OihET01Ob2RlICopdGFpbDsKIC0gKHZvaWQpYW55OihmbG9hdClhIGI6KGludCliOwotLSAodm9p
ZClhdHRhY2hTaGFkb3dSb290OihET01TaGFkb3dSb290SW5pdCAqKWluaXQ7CistICh2b2lkKWF0
dGFjaFNoYWRvd1Jvb3Q6KERPTVRlc3REaWN0aW9uYXJ5ICopaW5pdDsKIEBlbmQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmou
bW0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2Jq
Lm1tCmluZGV4IDc1NDY0ODVjYTM4Zjk4YmUxYjM5NmY4ZjdjMzMwNDljNWQ5ZDAyN2UuLjFmZmU2
NDkzYzkzNmM2NDU0YzVkMjI2NWVmMTg1YjRiNGUxNzRlZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmoubW0KKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5tbQpAQCAt
MzUsNyArMzUsNyBAQAogI2ltcG9ydCAiRE9NTm9kZUludGVybmFsLmgiCiAjaW1wb3J0ICJET01T
VkdEb2N1bWVudEludGVybmFsLmgiCiAjaW1wb3J0ICJET01TVkdQb2ludEludGVybmFsLmgiCi0j
aW1wb3J0ICJET01TaGFkb3dSb290SW5pdEludGVybmFsLmgiCisjaW1wb3J0ICJET01UZXN0RGlj
dGlvbmFyeUludGVybmFsLmgiCiAjaW1wb3J0ICJET01UZXN0RW51bVR5cGVJbnRlcm5hbC5oIgog
I2ltcG9ydCAiRE9NVGVzdE5vZGVJbnRlcm5hbC5oIgogI2ltcG9ydCAiRE9NVGVzdE9iakludGVy
bmFsLmgiCkBAIC01NSw3ICs1NSw3IEBACiAjaW1wb3J0ICJTVkdEb2N1bWVudC5oIgogI2ltcG9y
dCAiU1ZHUG9pbnQuaCIKICNpbXBvcnQgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgotI2ltcG9y
dCAiU2hhZG93Um9vdEluaXQuaCIKKyNpbXBvcnQgIlRlc3REaWN0aW9uYXJ5LmgiCiAjaW1wb3J0
ICJUZXN0RW51bVR5cGUuaCIKICNpbXBvcnQgIlRlc3ROb2RlLmgiCiAjaW1wb3J0ICJUZXN0T2Jq
LmgiCkBAIC0xMTU0LDYgKzExNTQsMTIgQEAgLSAodm9pZCltZXRob2RXaXRoRW51bUFyZzooRE9N
VGVzdEVudW1UeXBlICopZW51bUFyZwogICAgIElNUEwtPm1ldGhvZFdpdGhFbnVtQXJnKGNvcmUo
ZW51bUFyZykpOwogfQogCistICh2b2lkKW1ldGhvZFdpdGhPcHRpb25hbEVudW1Bcmc6KERPTVRl
c3RFbnVtVHlwZSAqKWVudW1BcmcKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgSU1QTC0+bWV0aG9kV2l0aE9wdGlvbmFsRW51bUFyZyhjb3JlKGVudW1B
cmcpKTsKK30KKwogLSAodm9pZCltZXRob2RXaXRoT3B0aW9uYWxFbnVtQXJnQW5kRGVmYXVsdFZh
bHVlOihET01UZXN0RW51bVR5cGUgKillbnVtQXJnCiB7CiAgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOwpAQCAtMTY0MSw3ICsxNjQ3LDcgQEAgLSAodm9pZClhbnk6KGZs
b2F0KWEgYjooaW50KWIKICAgICBJTVBMLT5hbnkoYSwgYik7CiB9CiAKLS0gKHZvaWQpYXR0YWNo
U2hhZG93Um9vdDooRE9NU2hhZG93Um9vdEluaXQgKilpbml0CistICh2b2lkKWF0dGFjaFNoYWRv
d1Jvb3Q6KERPTVRlc3REaWN0aW9uYXJ5ICopaW5pdAogewogICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBJTVBMLT5hdHRhY2hTaGFkb3dSb290KGNvcmUoaW5p
dCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rl
c3RPYmouaWRsIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmou
aWRsCmluZGV4IDgxZDFhM2FmZDJkYmJmMDA5YWYzYmQyMzQ2MmQ4NDg4MDgyYTE5MWEuLmYzMDQy
ZGU4MjQ4NjYyNWRkNmZjZjVhOWU3ZmI0YzE3ODEyYjRjZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwKQEAgLTMwLDcgKzMwLDcgQEAK
IC8vIFRoaXMgSURMIGZpbGUgaXMgZm9yIHRlc3RpbmcgdGhlIGJpbmRpbmdzIGNvZGUgZ2VuZXJh
dG9yIGFuZCBmb3IgdHJhY2tpbmcKIC8vIGNoYW5nZXMgaW4gaXRzIG91cHV0LgogCi1lbnVtIFRl
c3RFbnVtVHlwZSB7ICIiLCAiRW51bVZhbHVlMSIsICJFbnVtVmFsdWUyIiwgIkVudW1WYWx1ZTMi
IH07CitlbnVtIFRlc3RFbnVtVHlwZSB7ICIiLCAiZW51bVZhbHVlMSIsICJFbnVtVmFsdWUyIiwg
IkVudW1WYWx1ZTMiIH07CiAKIC8vIExlYWRpbmcgdW5kZXJzY29yZSBvbiBhbiBlbnVtIHNob3Vs
ZCBiZSByZW1vdmVkLgogZW51bSBfb3B0aW9uYWwgeyAiIiwgIk9wdGlvbmFsVmFsdWUxIiwgIk9w
dGlvbmFsVmFsdWUyIiwgIk9wdGlvbmFsVmFsdWUzIiB9OwpAQCAtMTIxLDYgKzEyMSw3IEBAIGVu
dW0gVGVzdENvbmZpZGVuY2UgeyAiaGlnaCIsICJraW5kYS1sb3ciIH07CiAgICAgc2VxdWVuY2U8
U2NyaXB0UHJvZmlsZT4gbWV0aG9kUmV0dXJuaW5nU2VxdWVuY2UobG9uZyBsb25nQXJnKTsKIAog
ICAgIHZvaWQgbWV0aG9kV2l0aEVudW1BcmcoVGVzdEVudW1UeXBlIGVudW1BcmcpOworICAgIHZv
aWQgbWV0aG9kV2l0aE9wdGlvbmFsRW51bUFyZyhvcHRpb25hbCBUZXN0RW51bVR5cGUgZW51bUFy
Zyk7CiAgICAgdm9pZCBtZXRob2RXaXRoT3B0aW9uYWxFbnVtQXJnQW5kRGVmYXVsdFZhbHVlKG9w
dGlvbmFsIFRlc3RFbnVtVHlwZSBlbnVtQXJnID0gIkVudW1WYWx1ZTEiKTsKICAgICBbUmFpc2Vz
RXhjZXB0aW9uXSBUZXN0T2JqIG1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3MoRE9N
U3RyaW5nIHN0ckFyZywgVGVzdE9iaiBvYmpBcmcpOwogCkBAIC0zNzMsMjQgKzM3NCwyOSBAQCBl
bnVtIFRlc3RDb25maWRlbmNlIHsgImhpZ2giLCAia2luZGEtbG93IiB9OwogICAgIFtJbnZva2Vz
Q3VzdG9tRWxlbWVudExpZmVjeWNsZUNhbGxiYWNrc10gdm9pZCBtZXRob2RXaXRoTmVlZHNMaWZl
Y3ljbGVQcm9jZXNzaW5nU3RhY2soKTsKICNlbmRpZgogCi0gICAgdm9pZCBhdHRhY2hTaGFkb3dS
b290KFNoYWRvd1Jvb3RJbml0IGluaXQpOworICAgIHZvaWQgYXR0YWNoU2hhZG93Um9vdChUZXN0
RGljdGlvbmFyeSBpbml0KTsKIH07CiAKIC8vIFRoZSBmb2xsb3dpbmcgY29tbWVudCBzaG91bGQg
bm90IGdlbmVyYXRlIGFueSBjb2RlLgogLy8gVGVzdE9iaiBpbXBsZW1lbnRzIFRlc3RJbXBsZW1l
bnRzOwogCi1lbnVtIFNoYWRvd1Jvb3RNb2RlIHsgIm9wZW4iLCAiY2xvc2VkIiB9OwotZGljdGlv
bmFyeSBTaGFkb3dSb290SW5pdCB7Ci0gICAgcmVxdWlyZWQgU2hhZG93Um9vdE1vZGUgbW9kZTsK
K2RpY3Rpb25hcnkgVGVzdERpY3Rpb25hcnkgeworICAgIFRlc3RFbnVtVHlwZSBlbnVtZXJhdGlv
blZhbHVlV2l0aG91dERlZmF1bHQ7CisgICAgVGVzdEVudW1UeXBlIGVudW1lcmF0aW9uVmFsdWVX
aXRoRGVmYXVsdCA9ICJlbnVtVmFsdWUxIjsKKyAgICBUZXN0RW51bVR5cGUgZW51bWVyYXRpb25W
YWx1ZVdpdGhFbXB0eVN0cmluZ0RlZmF1bHQgPSAiIjsKKyAgICBET01TdHJpbmcgc3RyaW5nV2l0
aERlZmF1bHQgPSAiZGVmYXVsdFN0cmluZyI7CisgICAgRE9NU3RyaW5nIHN0cmluZ1dpdGhvdXRE
ZWZhdWx0OworICAgIGJvb2xlYW4gYm9vbGVhbldpdGhEZWZhdWx0ID0gZmFsc2U7CisgICAgYm9v
bGVhbiBib29sZWFuV2l0aG91dERlZmF1bHQ7CisgICAgc2VxdWVuY2U8RE9NU3RyaW5nPiBzZXF1
ZW5jZU9mU3RyaW5nczsKIH07CiAKLWRpY3Rpb25hcnkgRm9udEZhY2VEZXNjcmlwdG9ycyB7Ci0g
ICAgRE9NU3RyaW5nIHN0eWxlID0gIm5vcm1hbCI7Ci0gICAgRE9NU3RyaW5nIHVuaWNvZGVSYW5n
ZSA9ICJVKzAtMTBGRkZGIjsKK2RpY3Rpb25hcnkgVGVzdERpY3Rpb25hcnlUaGF0U2hvdWxkTm90
VG9sZXJhdGVOdWxsIHsKKyAgICByZXF1aXJlZCBUZXN0RW51bVR5cGUgcmVxdWlyZWRFbnVtZXJh
dGlvblZhbHVlOworICAgIGJvb2xlYW4gYm9vbGVhbldpdGhvdXREZWZhdWx0OwogfTsKIAotZGlj
dGlvbmFyeSBNdXRhdGlvbk9ic2VydmVySW5pdCB7Ci0gICAgYm9vbGVhbiBjaGlsZExpc3QgPSBm
YWxzZTsKLSAgICBib29sZWFuIGF0dHJpYnV0ZXM7Ci0gICAgc2VxdWVuY2U8RE9NU3RyaW5nPiBh
dHRyaWJ1dGVGaWx0ZXI7CitkaWN0aW9uYXJ5IFRlc3REaWN0aW9uYXJ5VGhhdFNob3VsZFRvbGVy
YXRlTnVsbCB7CisgICAgVGVzdEVudW1UeXBlIGVudW1lcmF0aW9uVmFsdWU7CisgICAgYm9vbGVh
biBib29sZWFuV2l0aG91dERlZmF1bHQ7CiB9Owo=
</data>
<flag name="review"
          id="302477"
          type_id="1"
          status="+"
          setter="achristensen"
    />
          </attachment>
      

    </bug>

</bugzilla>