<?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>38970</bug_id>
          
          <creation_ts>2010-05-11 22:20:40 -0700</creation_ts>
          <short_desc>Non-enumerable property fails to shadow inherited enumerable property from for-in</short_desc>
          <delta_ts>2021-01-30 14:45:20 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=219926</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=220809</see_also>
          <bug_file_loc>https://mail.mozilla.org/pipermail/es5-discuss/2010-May/003536.html</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Major</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>189034</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark S. Miller">erights</reporter>
          <assigned_to name="Alexey Shvayka">ashvayka</assigned_to>
          <cc>alecflett</cc>
    
    <cc>annulen</cc>
    
    <cc>arv</cc>
    
    <cc>beidson</cc>
    
    <cc>bugzilla</cc>
    
    <cc>cdumez</cc>
    
    <cc>darin</cc>
    
    <cc>erights</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hi</cc>
    
    <cc>joepeck</cc>
    
    <cc>jsbell</cc>
    
    <cc>keith_miller</cc>
    
    <cc>kent.hansen</cc>
    
    <cc>ljharb</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mike.benoit</cc>
    
    <cc>mjs</cc>
    
    <cc>msaboff</cc>
    
    <cc>nisl_grammarly1</cc>
    
    <cc>ross.kirsling</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>saam</cc>
    
    <cc>sergio</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>224412</commentid>
    <comment_count>0</comment_count>
    <who name="Mark S. Miller">erights</who>
    <bug_when>2010-05-11 22:20:40 -0700</bug_when>
    <thetext>At https://mail.mozilla.org/pipermail/es5-discuss/2010-May/003536.html Allen clarifies that, according to the ES5 spec,

    function showProps(obj) {
      var result = [];
      for (var k in obj) {
        result.push(k, &apos;: &apos;, &apos;&apos;+obj[k], &apos;\n&apos;);
      }
      return result.join(&apos;&apos;);
    }
    var base = {x:8};
    var derived = Object.create(base, {x: {value: 9, enumerable: false}});
    showProps(derived);

Should print the empty string. On WebKit nightly as of this writing, it prints &quot;x: 9&quot;. Besides violating the spec, it is also the less useful behavior for the common for-in loop behavior (shown above as &quot;obj[k]&quot;) of using the key to index into the object being iterated, in order to get the corresponding value.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1137083</commentid>
    <comment_count>1</comment_count>
    <who name="Jordan Harband">ljharb</who>
    <bug_when>2015-10-28 02:07:47 -0700</bug_when>
    <thetext>Ping - adding some people to the CC list.

This is also an issue in v8 ( https://code.google.com/p/v8/issues/detail?id=705 ) although Firefox and IE are correct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1541496</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-06-04 02:56:30 -0700</bug_when>
    <thetext>&lt;rdar://problem/51390792&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656759</commentid>
    <comment_count>3</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-05-27 20:53:18 -0700</bug_when>
    <thetext>*** Bug 212449 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656951</commentid>
    <comment_count>4</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2020-05-28 12:10:15 -0700</bug_when>
    <thetext>Given the now undated dupe, do we want to raise the priority of fixing this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1657144</commentid>
    <comment_count>5</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-05-28 21:02:09 -0700</bug_when>
    <thetext>(In reply to Maciej Stachowiak from comment #4)
&gt; Given the now undated dupe, do we want to raise the priority of fixing this?

Recently, TC39 attempted to define for-in&apos;s semantics more precisely, and it is now merged into the spec at 2020/01/02 https://github.com/tc39/ecma262/pull/1791.
And after this refinement, a lot of semantics are clarified, and the new spec clearly requires this behavior should be fixed. Since a lot of for-in semantics are clarified / updated, I think it is good time to fix it / update it, and I think raising priority of this is good idea.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1657452</commentid>
    <comment_count>6</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-05-29 14:50:30 -0700</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #5)
&gt; (In reply to Maciej Stachowiak from comment #4)
&gt; &gt; Given the now undated dupe, do we want to raise the priority of fixing this?
&gt; 
&gt; Recently, TC39 attempted to define for-in&apos;s semantics more precisely, and it
&gt; is now merged into the spec at 2020/01/02
&gt; https://github.com/tc39/ecma262/pull/1791.
&gt; And after this refinement, a lot of semantics are clarified, and the new
&gt; spec clearly requires this behavior should be fixed. Since a lot of for-in
&gt; semantics are clarified / updated, I think it is good time to fix it /
&gt; update it, and I think raising priority of this is good idea.

Agreed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1693196</commentid>
    <comment_count>7</comment_count>
      <attachid>410062</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-09-29 15:55:48 -0700</bug_when>
    <thetext>Created attachment 410062
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1693197</commentid>
    <comment_count>8</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-09-29 15:56:27 -0700</bug_when>
    <thetext>(In reply to Alexey Shvayka from comment #7)
&gt; Created attachment 410062 [details]
&gt; Patch

                                                            r267623                    patch

in-by-val-inside-for-in-loop                            18.7430+-0.6262           18.1054+-0.5515          might be 1.0352x faster
has-own-property-for-in-loop-with-this                  34.1394+-1.0114           33.6293+-0.9859          might be 1.0152x faster
has-own-property-for-in-loop                            36.1299+-1.1519     ^     33.6704+-0.8729        ^ definitely 1.0730x faster
has-own-property-for-in-loop-with-heap-variable         35.0119+-1.0183           33.3996+-0.7344          might be 1.0483x faster
has-own-property-for-in-loop-reflect-name               35.3447+-1.2661           33.6938+-1.0116          might be 1.0490x faster
for-in-on-object-with-lazily-materialized-properties   233.4685+-3.2478     !    331.7142+-13.2340       ! definitely 1.4208x slower
let-for-in                                              10.5997+-0.3751           10.2912+-0.2934          might be 1.0300x faster
object-values                                           41.7760+-2.9022     ?     43.1566+-0.5000        ? might be 1.0330x slower
object-entries                                          95.5208+-2.0629           94.5192+-3.1518          might be 1.0106x faster
object-get-own-property-symbols-on-large-array          53.9934+-1.2623     ^     51.2972+-1.2180        ^ definitely 1.0526x faster
object-get-own-property-symbols                         67.7095+-2.4705     ?     71.7645+-2.2434        ? might be 1.0599x slower
object-keys-string-object                               60.4447+-1.2345     ^     56.8687+-1.1331        ^ definitely 1.0629x faster
object-keys-typed-array                                 67.5286+-1.3963     ^     60.4957+-1.5904        ^ definitely 1.1163x faster
object-keys-map-values                                  59.0130+-2.1141     ?     61.2572+-2.0413        ? might be 1.0380x slower
object-keys                                             26.7807+-0.5887     !     28.3109+-0.4814        ! definitely 1.0571x slower
reflect-own-keys-function                               90.4955+-1.1324     ^     58.9401+-1.0891        ^ definitely 1.5354x faster
reflect-own-keys                                        72.8491+-1.7695     ?     76.2500+-2.3467        ? might be 1.0467x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1693414</commentid>
    <comment_count>9</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-09-30 09:53:20 -0700</bug_when>
    <thetext>(In reply to Alexey Shvayka from comment #8)
&gt; object-keys                                             26.7807+-0.5887    
&gt; !     28.3109+-0.4814        ! definitely 1.0571x slower

Can you investigate this one?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1693415</commentid>
    <comment_count>10</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-09-30 09:54:36 -0700</bug_when>
    <thetext>(In reply to Mark Lam from comment #9)
&gt; (In reply to Alexey Shvayka from comment #8)
&gt; &gt; object-keys                                             26.7807+-0.5887    
&gt; &gt; !     28.3109+-0.4814        ! definitely 1.0571x slower
&gt; 
&gt; Can you investigate this one?

And this one?
for-in-on-object-with-lazily-materialized-properties   233.4685+-3.2478     !    331.7142+-13.2340       ! definitely 1.4208x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1693421</commentid>
    <comment_count>11</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-09-30 10:01:21 -0700</bug_when>
    <thetext>(In reply to Mark Lam from comment #9)
&gt; (In reply to Alexey Shvayka from comment #8)
&gt; &gt; object-keys                                             26.7807+-0.5887    
&gt; &gt; !     28.3109+-0.4814        ! definitely 1.0571x slower
&gt; 
&gt; Can you investigate this one?

We had a similar slowdown in https://bugs.webkit.org/show_bug.cgi?id=216227: I believe it&apos;s due to increased Structure::getPropertyNamesFromStructure() code size and can be regained by making a separate method for PropertyNameMode::StringsAndSymbols (a follow-up?)

This patch is careful to preserve Object.keys performance by early-returning for DontEnumPropertyMode::Exclude and utilizing addKnownUniqueWithDontEnum().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1693468</commentid>
    <comment_count>12</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-09-30 11:50:54 -0700</bug_when>
    <thetext>The EWS bot failures also appear to be real.  Please investigate.  Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1703306</commentid>
    <comment_count>13</comment_count>
      <attachid>410062</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-10-30 21:01:00 -0700</bug_when>
    <thetext>Comment on attachment 410062
Patch

It seems that the crash is happening in some LayoutTests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1710766</commentid>
    <comment_count>14</comment_count>
      <attachid>415055</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-11-30 14:13:54 -0800</bug_when>
    <thetext>Created attachment 415055
Patch

Use different approach.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1710773</commentid>
    <comment_count>15</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-11-30 14:15:57 -0800</bug_when>
    <thetext>(In reply to Mark Lam from comment #10)
&gt; &gt; Can you investigate this one?
&gt; 
&gt; And this one?
&gt; for-in-on-object-with-lazily-materialized-properties
&gt;    233.4685+-3.2478     !    331.7142+-13.2340       ! definitely 1.4208x slower

At first, I thought this regression is ErrorInstance-related; I was so wrong.
This microbenchmark appears to be the only one which measures cold for/in runs (no JSPropertyNameEnumerator caching).
Objects like Date or userland ES6 classes, which have a lot of DontEnum methods on their prototypes, slow down more than 6x.

(In reply to Alexey Shvayka from comment #14)
&gt; Created attachment 415055 [details]
&gt; Patch
&gt; 
&gt; Use different approach.

In the new patch, instead of keeping track of DontEnum properties, we simply check enumerability the same time property existence is verified.
It is neutral on microbenchmarks and is way easier to review (not minding the renames).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1711528</commentid>
    <comment_count>16</comment_count>
      <attachid>415264</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-12-02 17:05:13 -0800</bug_when>
    <thetext>Created attachment 415264
Patch

Fix getOwnPropertySlot() overrides to report properties returned by getOwnPropertyNames() as enumerable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1711654</commentid>
    <comment_count>17</comment_count>
      <attachid>415295</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-12-03 05:05:10 -0800</bug_when>
    <thetext>Created attachment 415295
Patch

Fix testapi.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1712255</commentid>
    <comment_count>18</comment_count>
      <attachid>415295</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2020-12-05 09:39:38 -0800</bug_when>
    <thetext>Comment on attachment 415295
Patch

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

r=me with some nits.

&gt; Source/JavaScriptCore/ChangeLog:31
&gt; +        This patch introduces a new invariant: all properties getOwn*PropertyNames() returns
&gt; +        in DontEnumPropertiesMode::Exclude should be reported as [[Enumerable]] by
&gt; +        getOwnPropertySlot(). JSCallbackObject and RuntimeArray are fixed to follow it.

Is there a way we can assert this? I think we could at least for the VMInquiry flavor of getOwnPropertySlot()?

&gt; Source/JavaScriptCore/API/JSCallbackObjectFunctions.h:167
&gt; +            // FIXME: Set ReadOnly conditionally, based on setProperty presence in class inheritance chain.

Can you open a bug for this and link to it here?

&gt; Source/JavaScriptCore/API/JSCallbackObjectFunctions.h:199
&gt; +                    // FIXME: getStaticValue() performs the same loop &amp; checks just to acquire `entry`.

Ditto on bugzilla.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1714967</commentid>
    <comment_count>19</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-12-15 16:34:01 -0800</bug_when>
    <thetext>Committed r270874: &lt;https://trac.webkit.org/changeset/270874&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1714974</commentid>
    <comment_count>20</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-12-15 17:00:51 -0800</bug_when>
    <thetext>(In reply to Keith Miller from comment #18)
&gt; Is there a way we can assert this? I think we could at least for the
&gt; VMInquiry flavor of getOwnPropertySlot()?

That&apos;s a super useful assert to have: https://bugs.webkit.org/show_bug.cgi?id=141952 would be caught by it.
Since the invariant is required by for/in, and we have the most for/in tests for different objects, I believe JSObject::get[Generic]PropertyNames() is the place to have it.
However, there are quite a few get*PropertyNames() call sites there, so I&apos;ve filed https://bugs.webkit.org/show_bug.cgi?id=219926 and suggest adding it after https://bugs.webkit.org/show_bug.cgi?id=212954 is resolved.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1716780</commentid>
    <comment_count>21</comment_count>
      <attachid>415295</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-12-28 10:40:36 -0800</bug_when>
    <thetext>Comment on attachment 415295
Patch

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

&gt; Source/JavaScriptCore/ChangeLog:14
&gt; +        (with any data structure used), this patch simply adds [[Enumerable]] check to

How does checking [[Enumerable]] fixes shadowing issue?

Let&apos;s consider a for/in invoked on an object A with prototype chain: A &lt;= B &lt;= C &lt;= null.

Given that:
  1) hasEnumerableProperty is invoked on the same object A as for/in, and they both go up the prototype chain;
  2) PropertyNameArray contains no duplicate identifiers;
  3) properties are enumerated in DontEnumPropertiesMode::Exclude.

Precondition: for/in body is pure.

If for/in reached object C, which enumerated property K, but [[Enumerable]] check failed, we can be sure that either A or B is shadowing K (= has DontEnum property attribute), and skip it.

&gt; Source/JavaScriptCore/ChangeLog:26
&gt; +        b) &quot;shadowing&quot; is broken if a DontEnum property of already visited object is

The downside of this approach, but IMO it&apos;s worth it since [[Enumerable]] check is free.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1724036</commentid>
    <comment_count>22</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2021-01-30 09:23:00 -0800</bug_when>
    <thetext>*** Bug 221176 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>410062</attachid>
            <date>2020-09-29 15:55:48 -0700</date>
            <delta_ts>2020-11-30 14:13:49 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-38970-20200930015545.patch</filename>
            <type>text/plain</type>
            <size>279435</size>
            <attacher name="Alexey Shvayka">ashvayka</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNjc3NjcpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDIwIEBACisyMDIwLTA5LTI5ICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNo
QGdtYWlsLmNvbT4KKworICAgICAgICBOb24tZW51bWVyYWJsZSBwcm9wZXJ0eSBmYWlscyB0byBz
aGFkb3cgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydHkgZnJvbSBmb3ItaW4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM4OTcwCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBDaGFrcmFDb3JlLnlhbWw6
CisgICAgICAgICogQ2hha3JhQ29yZS90ZXN0L0Jhc2ljcy9lbnVtLmJhc2VsaW5lLWpzYzogUmVt
b3ZlZC4KKyAgICAgICAgKiBtaWNyb2JlbmNobWFya3Mvb2JqZWN0LWtleXMtc3RyaW5nLW9iamVj
dC5qczogQWRkZWQuCisgICAgICAgICogbWljcm9iZW5jaG1hcmtzL29iamVjdC1rZXlzLXR5cGVk
LWFycmF5LmpzOiBBZGRlZC4KKyAgICAgICAgKiBtaWNyb2JlbmNobWFya3MvcmVmbGVjdC1vd24t
a2V5cy1mdW5jdGlvbi5qczogQWRkZWQuCisgICAgICAgICogc3RyZXNzL2FyZ3VtZW50cy1wcm9w
ZXJ0aWVzLW9yZGVyLmpzOiBBZGRlZC4KKyAgICAgICAgKiBzdHJlc3MvZm9yLWluLXNoYWRvdy1k
b250LWVudW0uanM6IEFkZGVkLgorICAgICAgICAqIHN0cmVzcy9mb3ItaW4tdHlwZWQtYXJyYXku
anM6CisgICAgICAgICogdGVzdDI2Mi9leHBlY3RhdGlvbnMueWFtbDogTWFyayA0IHRlc3QgY2Fz
ZXMgYXMgcGFzc2luZy4KKwogMjAyMC0wOS0yOSAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xp
bmdAc29ueS5jb20+CiAKICAgICAgICAgVXBkYXRlIHRlc3QyNjIgKDIwMjAuMDkuMjkpCkluZGV4
OiBKU1Rlc3RzL0NoYWtyYUNvcmUueWFtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL0NoYWtyYUNv
cmUueWFtbAkocmV2aXNpb24gMjY3NzY3KQorKysgSlNUZXN0cy9DaGFrcmFDb3JlLnlhbWwJKHdv
cmtpbmcgY29weSkKQEAgLTMwMyw3ICszMDMsNyBAQAogLSBwYXRoOiBDaGFrcmFDb3JlL3Rlc3Qv
QmFzaWNzL3NjYW4uanMKICAgY21kOiBydW5DaGFrcmEgOmJhc2VsaW5lLCAiTm9FeGNlcHRpb24i
LCAic2Nhbi5iYXNlbGluZS1qc2MiLCBbXQogLSBwYXRoOiBDaGFrcmFDb3JlL3Rlc3QvQmFzaWNz
L2VudW0uanMKLSAgY21kOiBydW5DaGFrcmEgOmJhc2VsaW5lLCAiTm9FeGNlcHRpb24iLCAiZW51
bS5iYXNlbGluZS1qc2MiLCBbXQorICBjbWQ6IHJ1bkNoYWtyYSA6cGFzcywgIk5vRXhjZXB0aW9u
IiwgIiIsIFtdCiAtIHBhdGg6IENoYWtyYUNvcmUvdGVzdC9CYXNpY3Mvd2l0aDMuanMKICAgY21k
OiBydW5DaGFrcmEgOmJhc2VsaW5lLCAiTm9FeGNlcHRpb24iLCAid2l0aDMuYmFzZWxpbmUtanNj
IiwgW10KIC0gcGF0aDogQ2hha3JhQ29yZS90ZXN0L0Jhc2ljcy9jcm9zc19zaXRlX2FjY2Vzc29y
X21haW4uanMKSW5kZXg6IEpTVGVzdHMvQ2hha3JhQ29yZS90ZXN0L0Jhc2ljcy9lbnVtLmJhc2Vs
aW5lLWpzYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL0NoYWtyYUNvcmUvdGVzdC9CYXNpY3MvZW51
bS5iYXNlbGluZS1qc2MJKHJldmlzaW9uIDI2Nzc2NykKKysrIEpTVGVzdHMvQ2hha3JhQ29yZS90
ZXN0L0Jhc2ljcy9lbnVtLmJhc2VsaW5lLWpzYwkobm9uZXhpc3RlbnQpCkBAIC0xLDExNyArMCww
IEBACi14OmEueAotcTphLnEKLXU6YS5xCi16OmYucC56Ci1yOmYucC5yCi15Om8ucC55Ci1PYmpl
Y3QgYQoteAoteQotdQotegotTWF0aAotdQoteAoteQotegotQXJyYXkKLXUKLXgKLXkKLXoKLUFy
cmF5LnByb3RvdHlwZQotdQoteAoteQotegotRGF0ZQotdQoteAoteQotegotTnVtYmVyCi11Ci14
Ci15Ci16Ci1TdHJpbmcKLXUKLXgKLXkKLXoKLU9iamVjdC5wcm90b3R5cGUKLXUKLXgKLXkKLXoK
LU9iamVjdAotdQoteAoteQotegotQXJyYXkucHJvdG90eXBlLnNvcnQKLXUKLXgKLXkKLXoKLWZ1
bmN0aW9uIGZvbwotdQoteAoteQotegoteAotdQoteQotegotbWUgaGVyZQotcHJvdG90eXBlIGNo
YWluCi11Ci14Ci15Ci16Ci1MaXRlcmFsIFN0cmluZwotMAotMQotMgotMwotNAotNQotNgotNwot
OAotOQotenoKLXUKLXgKLXkKLXoKLVN0cmluZyBPYmplY3QKLXh4Ci15eQotMAotMQotMgotMwot
NAotNQotNgotNwotOAotOQotMTAKLTExCi16egotdQoteAoteQotegotNQotdQoteAoteQotegot
MwotdQoteAoteQotegpJbmRleDogSlNUZXN0cy9taWNyb2JlbmNobWFya3Mvb2JqZWN0LWtleXMt
c3RyaW5nLW9iamVjdC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9v
YmplY3Qta2V5cy1zdHJpbmctb2JqZWN0LmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvbWlj
cm9iZW5jaG1hcmtzL29iamVjdC1rZXlzLXN0cmluZy1vYmplY3QuanMJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw1IEBACitub0lubGluZShPYmplY3Qua2V5cyk7CisKK3ZhciBmb28gPSBuZXcg
U3RyaW5nKCJmb28iKTsKK2ZvciAodmFyIGkgPSAwOyBpIDwgM2U1OyArK2kpCisgICAgT2JqZWN0
LmtleXMoZm9vKTsKSW5kZXg6IEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL29iamVjdC1rZXlzLXR5
cGVkLWFycmF5LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL29iamVj
dC1rZXlzLXR5cGVkLWFycmF5LmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvbWljcm9iZW5j
aG1hcmtzL29iamVjdC1rZXlzLXR5cGVkLWFycmF5LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNSBAQAorbm9JbmxpbmUoT2JqZWN0LmtleXMpOworCit2YXIgaW50OCA9IG5ldyBJbnQ4QXJy
YXkoNik7Citmb3IgKHZhciBpID0gMDsgaSA8IDJlNTsgKytpKQorICAgIE9iamVjdC5rZXlzKGlu
dDgpOwpJbmRleDogSlNUZXN0cy9taWNyb2JlbmNobWFya3MvcmVmbGVjdC1vd24ta2V5cy1mdW5j
dGlvbi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9yZWZsZWN0LW93
bi1rZXlzLWZ1bmN0aW9uLmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvbWljcm9iZW5jaG1h
cmtzL3JlZmxlY3Qtb3duLWtleXMtZnVuY3Rpb24uanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw3IEBACitub0lubGluZShSZWZsZWN0Lm93bktleXMpOworCitmb3IgKHZhciBpID0gMDsgaSA8
IDFlNTsgKytpKSB7CisgICAgUmVmbGVjdC5vd25LZXlzKCgpID0+IHt9KTsKKyAgICBSZWZsZWN0
Lm93bktleXMoZnVuY3Rpb24oKSB7fSk7CisgICAgUmVmbGVjdC5vd25LZXlzKGZ1bmN0aW9uKCkg
eyAidXNlIHN0cmljdCI7IH0pOworfQpJbmRleDogSlNUZXN0cy9zdHJlc3MvYXJndW1lbnRzLXBy
b3BlcnRpZXMtb3JkZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvYXJndW1lbnRz
LXByb3BlcnRpZXMtb3JkZXIuanMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy9zdHJlc3MvYXJn
dW1lbnRzLXByb3BlcnRpZXMtb3JkZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4MCBA
QAorLy8gbm90IHVzaW5nIHN0cmljdCBtb2RlIHRvIGNvdmVyIGxvb3NlLW1vZGUgYGFyZ3VtZW50
c2AKKworZnVuY3Rpb24gZ2V0TWFwcGVkQXJndW1lbnRzKGEsIGIpIHsgcmV0dXJuIGFyZ3VtZW50
czsgfQorZnVuY3Rpb24gZ2V0VW5tYXBwZWRBcmd1bWVudHMoYSwgYikgeyAidXNlIHN0cmljdCI7
IHJldHVybiBhcmd1bWVudHM7IH0KKworZnVuY3Rpb24gc2hvdWxkQmVBcnJheShhY3R1YWwsIGV4
cGVjdGVkKSB7CisgICAgdmFyIGlzRXF1YWwgPQorICAgICAgICBhY3R1YWwubGVuZ3RoID09PSBl
eHBlY3RlZC5sZW5ndGggJiYKKyAgICAgICAgYWN0dWFsLmV2ZXJ5KChpdGVtLCBpbmRleCkgPT4g
aXRlbSA9PT0gZXhwZWN0ZWRbaW5kZXhdKTsKKyAgICBpZiAoIWlzRXF1YWwpCisgICAgICAgIHRo
cm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgWyR7YWN0dWFsLm1hcChTdHJpbmcpfV0gdG8gZXF1YWwg
WyR7ZXhwZWN0ZWQubWFwKFN0cmluZyl9XWApOworfQorCitmdW5jdGlvbiBmb3JJbihvYmplY3Qp
IHsKKyAgICB2YXIga2V5cyA9IFtdOworICAgIGZvciAodmFyIGtleSBpbiBvYmplY3QpCisgICAg
ICAgIGtleXMucHVzaChrZXkpOworICAgIHJldHVybiBrZXlzOworfQorCitub0lubGluZShnZXRN
YXBwZWRBcmd1bWVudHMpOworbm9JbmxpbmUoZ2V0VW5tYXBwZWRBcmd1bWVudHMpOworbm9Jbmxp
bmUoZm9ySW4pOworCisoZnVuY3Rpb24oKSB7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTQ7
ICsraSkgeworICAgICAgICB2YXIgbWFwcGVkQXJndW1lbnRzID0gZ2V0TWFwcGVkQXJndW1lbnRz
KDAsIDEsIDIpOworICAgICAgICBzaG91bGRCZUFycmF5KGZvckluKG1hcHBlZEFyZ3VtZW50cyks
IFsiMCIsICIxIiwgIjIiXSk7CisgICAgICAgIHNob3VsZEJlQXJyYXkoT2JqZWN0LmtleXMobWFw
cGVkQXJndW1lbnRzKSwgWyIwIiwgIjEiLCAiMiJdKTsKKyAgICAgICAgc2hvdWxkQmVBcnJheShS
ZWZsZWN0Lm93bktleXMobWFwcGVkQXJndW1lbnRzKSwgWyIwIiwgIjEiLCAiMiIsICJsZW5ndGgi
LCAiY2FsbGVlIiwgU3ltYm9sLml0ZXJhdG9yXSk7CisKKyAgICAgICAgdmFyIHVubWFwcGVkQXJn
dW1lbnRzID0gZ2V0VW5tYXBwZWRBcmd1bWVudHMoMCk7CisgICAgICAgIHNob3VsZEJlQXJyYXko
Zm9ySW4odW5tYXBwZWRBcmd1bWVudHMpLCBbIjAiXSk7CisgICAgICAgIHNob3VsZEJlQXJyYXko
T2JqZWN0LmtleXModW5tYXBwZWRBcmd1bWVudHMpLCBbIjAiXSk7CisgICAgICAgIHNob3VsZEJl
QXJyYXkoUmVmbGVjdC5vd25LZXlzKHVubWFwcGVkQXJndW1lbnRzKSwgWyIwIiwgImxlbmd0aCIs
ICJjYWxsZWUiLCBTeW1ib2wuaXRlcmF0b3JdKTsKKyAgICB9Cit9KSgpOworCisoZnVuY3Rpb24o
KSB7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTQ7ICsraSkgeworICAgICAgICB2YXIgbWFw
cGVkQXJndW1lbnRzID0gZ2V0TWFwcGVkQXJndW1lbnRzKDAsIDEpOworICAgICAgICBtYXBwZWRB
cmd1bWVudHNbOF0gPSA4OworICAgICAgICBtYXBwZWRBcmd1bWVudHNbMl0gPSAyOworICAgICAg
ICBzaG91bGRCZUFycmF5KGZvckluKG1hcHBlZEFyZ3VtZW50cyksIFsiMCIsICIxIiwgIjIiLCAi
OCJdKTsKKyAgICAgICAgc2hvdWxkQmVBcnJheShPYmplY3Qua2V5cyhtYXBwZWRBcmd1bWVudHMp
LCBbIjAiLCAiMSIsICIyIiwgIjgiXSk7CisgICAgICAgIHNob3VsZEJlQXJyYXkoUmVmbGVjdC5v
d25LZXlzKG1hcHBlZEFyZ3VtZW50cyksIFsiMCIsICIxIiwgIjIiLCAiOCIsICJsZW5ndGgiLCAi
Y2FsbGVlIiwgU3ltYm9sLml0ZXJhdG9yXSk7CisKKyAgICAgICAgdmFyIHVubWFwcGVkQXJndW1l
bnRzID0gZ2V0VW5tYXBwZWRBcmd1bWVudHMoKTsKKyAgICAgICAgdW5tYXBwZWRBcmd1bWVudHNb
MTJdID0gMTI7CisgICAgICAgIHVubWFwcGVkQXJndW1lbnRzWzNdID0gMzsKKyAgICAgICAgc2hv
dWxkQmVBcnJheShmb3JJbih1bm1hcHBlZEFyZ3VtZW50cyksIFsiMyIsICIxMiJdKTsKKyAgICAg
ICAgc2hvdWxkQmVBcnJheShPYmplY3Qua2V5cyh1bm1hcHBlZEFyZ3VtZW50cyksIFsiMyIsICIx
MiJdKTsKKyAgICAgICAgc2hvdWxkQmVBcnJheShSZWZsZWN0Lm93bktleXModW5tYXBwZWRBcmd1
bWVudHMpLCBbIjMiLCAiMTIiLCAibGVuZ3RoIiwgImNhbGxlZSIsIFN5bWJvbC5pdGVyYXRvcl0p
OworICAgIH0KK30pKCk7CisKKyhmdW5jdGlvbigpIHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8
IDFlNDsgKytpKSB7CisgICAgICAgIHZhciBtYXBwZWRBcmd1bWVudHMgPSBnZXRNYXBwZWRBcmd1
bWVudHMoMCk7CisgICAgICAgIG1hcHBlZEFyZ3VtZW50cy5mb28gPSAxOworICAgICAgICBtYXBw
ZWRBcmd1bWVudHMuYmFyID0gMjsKKyAgICAgICAgc2hvdWxkQmVBcnJheShmb3JJbihtYXBwZWRB
cmd1bWVudHMpLCBbIjAiLCAiZm9vIiwgImJhciJdKTsKKyAgICAgICAgc2hvdWxkQmVBcnJheShP
YmplY3Qua2V5cyhtYXBwZWRBcmd1bWVudHMpLCBbIjAiLCAiZm9vIiwgImJhciJdKTsKKyAgICAg
ICAgLy8gRklYTUU6IFN5bWJvbC5pdGVyYXRvciBzaG91bGQgY29tZSBhZnRlciAiZm9vIiBhbmQg
ImJhciIgCisgICAgICAgIC8vIHNob3VsZEJlQXJyYXkoUmVmbGVjdC5vd25LZXlzKG1hcHBlZEFy
Z3VtZW50cyksIFsiMCIsICJsZW5ndGgiLCAiY2FsbGVlIiwgImZvbyIsICJiYXIiLCBTeW1ib2wu
aXRlcmF0b3JdKTsKKworICAgICAgICB2YXIgdW5tYXBwZWRBcmd1bWVudHMgPSBnZXRVbm1hcHBl
ZEFyZ3VtZW50cygwLCAxLCAyKTsKKyAgICAgICAgdW5tYXBwZWRBcmd1bWVudHMuZm9vID0gMTsK
KyAgICAgICAgdW5tYXBwZWRBcmd1bWVudHMuYmFyID0gMjsKKyAgICAgICAgc2hvdWxkQmVBcnJh
eShmb3JJbih1bm1hcHBlZEFyZ3VtZW50cyksIFsiMCIsICIxIiwgIjIiLCAiZm9vIiwgImJhciJd
KTsKKyAgICAgICAgc2hvdWxkQmVBcnJheShPYmplY3Qua2V5cyh1bm1hcHBlZEFyZ3VtZW50cyks
IFsiMCIsICIxIiwgIjIiLCAiZm9vIiwgImJhciJdKTsKKyAgICAgICAgLy8gRklYTUU6ICJjYWxs
ZWUiIHNob3VsZCBjb21lIGJlZm9yZSAiZm9vIiBhbmQgImJhciIKKyAgICAgICAgLy8gc2hvdWxk
QmVBcnJheShSZWZsZWN0Lm93bktleXModW5tYXBwZWRBcmd1bWVudHMpLCBbIjAiLCAiMSIsICIy
IiwgImxlbmd0aCIsICJjYWxsZWUiLCAiZm9vIiwgImJhciIsIFN5bWJvbC5pdGVyYXRvcl0pOwor
ICAgIH0KK30pKCk7CisKKy8vIEZJWE1FOiBBZGQgbW9yZSB0ZXN0cywgY292ZXJpbmc6CisvLyAx
LiBhZGRlZCBzeW1ib2wgcHJvcGVydGllczsKKy8vIDIuIGFkZGVkIHRvZ2V0aGVyIGluZGV4LCBu
b24taW5kZXgsIGFuZCBzeW1ib2wgcHJvcGVydGllczsKKy8vIDMuIGRlbGV0ZWQsIHJlLWFkZGVk
LCBhbmQgcmVkZWZpbmVkIGFzIERvbnRFbnVtICJsZW5ndGgiLCAiY2FsbGVlIiwgYW5kIFN5bWJv
bC5pdGVyYXRvciBwcm9wZXJ0aWVzLgpJbmRleDogSlNUZXN0cy9zdHJlc3MvZm9yLWluLXNoYWRv
dy1kb250LWVudW0uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvZm9yLWluLXNoYWRv
dy1kb250LWVudW0uanMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy9zdHJlc3MvZm9yLWluLXNo
YWRvdy1kb250LWVudW0uanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxODggQEAKKy8vIG5v
dCB1c2luZyBzdHJpY3QgbW9kZSB0byBjb3ZlciBsb29zZS1tb2RlIGZ1bmN0aW9ucyBhbmQgYGFy
Z3VtZW50c2AKKworY29uc3QgZG9udEVudW1EZXNjID0geworICB2YWx1ZTogMSwKKyAgd3JpdGFi
bGU6IHRydWUsCisgIGVudW1lcmFibGU6IGZhbHNlLAorICBjb25maWd1cmFibGU6IHRydWUsCit9
OworCitjb25zdCB0ZXN0Q2FzZXMgPSBbCisgIHsKKyAgICBuYW1lOiAiT2JqZWN0IiwKKyAgICBn
ZXRPYmplY3Q6ICgpID0+IE9iamVjdC5jcmVhdGUobnVsbCwge2ZvbzogZG9udEVudW1EZXNjLCBi
YXI6IGRvbnRFbnVtRGVzY30pLAorICAgIGRvbnRFbnVtS2V5czogWyJmb28iLCAiYmFyIl0sCisg
ICAgY29uZmlndXJhYmxlRG9udEVudW1LZXlzOiBbImZvbyIsICJiYXIiXSwKKyAgfSwKKyAgewor
ICAgIG5hbWU6ICJFcnJvciIsCisgICAgZ2V0T2JqZWN0OiAoKSA9PiBuZXcgRXJyb3IoKSwKKyAg
ICBkb250RW51bUtleXM6IFsibGluZSIsICJjb2x1bW4iLCAic291cmNlVVJMIiwgInN0YWNrIl0s
CisgICAgY29uZmlndXJhYmxlRG9udEVudW1LZXlzOiBbImxpbmUiLCAiY29sdW1uIiwgInNvdXJj
ZVVSTCIsICJzdGFjayJdLAorICB9LAorICB7CisgICAgbmFtZTogIkFycmF5IChlbXB0eSkiLAor
ICAgIGdldE9iamVjdDogKCkgPT4gW10sCisgICAgZG9udEVudW1LZXlzOiBbImxlbmd0aCJdLAor
ICAgIGNvbmZpZ3VyYWJsZURvbnRFbnVtS2V5czogW10sCisgIH0sCisgIHsKKyAgICBuYW1lOiAi
QXJyYXkgKHNwYXJzZSkiLAorICAgIGdldE9iamVjdDogKCkgPT4gT2JqZWN0LmRlZmluZVByb3Bl
cnRpZXMoWzAsIDEsIDJdLCB7MDogZG9udEVudW1EZXNjLCAyOiBkb250RW51bURlc2N9KSwKKyAg
ICBkb250RW51bUtleXM6IFsiMCIsICIyIiwgImxlbmd0aCJdLAorICAgIGNvbmZpZ3VyYWJsZURv
bnRFbnVtS2V5czogWyIwIiwgIjIiXSwKKyAgfSwKKyAgeworICAgIG5hbWU6ICJGdW5jdGlvbiAo
c3RyaWN0KSIsCisgICAgZ2V0T2JqZWN0OiAoKSA9PiBmdW5jdGlvbigpIHsgInVzZSBzdHJpY3Qi
OyB9LAorICAgIGRvbnRFbnVtS2V5czogWyJsZW5ndGgiLCAibmFtZSIsICJwcm90b3R5cGUiXSwK
KyAgICBjb25maWd1cmFibGVEb250RW51bUtleXM6IFsibGVuZ3RoIiwgIm5hbWUiXSwKKyAgfSwK
KyAgeworICAgIG5hbWU6ICJGdW5jdGlvbiAobG9vc2UpIiwKKyAgICBnZXRPYmplY3Q6ICgpID0+
IGZ1bmN0aW9uKCkge30sCisgICAgZG9udEVudW1LZXlzOiBbImFyZ3VtZW50cyIsICJjYWxsZXIi
LCAibGVuZ3RoIiwgIm5hbWUiLCAicHJvdG90eXBlIl0sCisgICAgY29uZmlndXJhYmxlRG9udEVu
dW1LZXlzOiBbImxlbmd0aCIsICJuYW1lIl0sCisgIH0sCisgIHsKKyAgICBuYW1lOiAiUmVnRXhw
IiwKKyAgICBnZXRPYmplY3Q6ICgpID0+IC8oPzopL2csCisgICAgZG9udEVudW1LZXlzOiBbImxh
c3RJbmRleCJdLAorICAgIGNvbmZpZ3VyYWJsZURvbnRFbnVtS2V5czogW10sCisgIH0sCisgIHsK
KyAgICBuYW1lOiAiU3RyaW5nIiwKKyAgICBnZXRPYmplY3Q6ICgpID0+IG5ldyBTdHJpbmcoImZv
byIpLAorICAgIGRvbnRFbnVtS2V5czogWyJsZW5ndGgiXSwKKyAgICBjb25maWd1cmFibGVEb250
RW51bUtleXM6IFtdLAorICB9LAorICB7CisgICAgbmFtZTogIkFyZ3VtZW50cyAoc3RyaWN0KSIs
CisgICAgZ2V0T2JqZWN0OiBmdW5jdGlvbihmb28pIHsgInVzZSBzdHJpY3QiOyByZXR1cm4gYXJn
dW1lbnRzOyB9LAorICAgIGRvbnRFbnVtS2V5czogWyJsZW5ndGgiLCAiY2FsbGVlIl0sCisgICAg
Y29uZmlndXJhYmxlRG9udEVudW1LZXlzOiBbImxlbmd0aCJdLAorICB9LAorICB7CisgICAgbmFt
ZTogIkFyZ3VtZW50cyAobG9vc2UpIiwKKyAgICBnZXRPYmplY3Q6IGZ1bmN0aW9uKGZvbykgeyBy
ZXR1cm4gYXJndW1lbnRzOyB9LAorICAgIGRvbnRFbnVtS2V5czogWyJsZW5ndGgiLCAiY2FsbGVl
Il0sCisgICAgY29uZmlndXJhYmxlRG9udEVudW1LZXlzOiBbImxlbmd0aCJdLAorICB9LAorXTsK
KworY29uc3Qgbm9uUmVpZmllZFRlc3RDYXNlcyA9IFsKKyAgeworICAgIG5hbWU6ICJSZWZsZWN0
IChub24tcmVpZmllZCkiLAorICAgIGdldE9iamVjdDogKCkgPT4gUmVmbGVjdCwKKyAgICBkb250
RW51bUtleXM6IFsiYXBwbHkiLCAiZGVmaW5lUHJvcGVydHkiLCAiZ2V0UHJvdG90eXBlT2YiLCAi
c2V0Il0sCisgICAgY29uZmlndXJhYmxlRG9udEVudW1LZXlzOiBbImFwcGx5IiwgImRlZmluZVBy
b3BlcnR5IiwgImdldFByb3RvdHlwZU9mIiwgInNldCJdLAorICB9LAorICB7CisgICAgbmFtZTog
IkRhdGUucHJvdG90eXBlIChub24tcmVpZmllZCkiLAorICAgIGdldE9iamVjdDogKCkgPT4gRGF0
ZS5wcm90b3R5cGUsCisgICAgZG9udEVudW1LZXlzOiBbInRvSVNPU3RyaW5nIiwgImdldFRpbWUi
LCAiZ2V0SG91cnMiLCAic2V0WWVhciJdLAorICAgIGNvbmZpZ3VyYWJsZURvbnRFbnVtS2V5czog
WyJ0b0lTT1N0cmluZyIsICJnZXRUaW1lIiwgImdldEhvdXJzIiwgInNldFllYXIiXSwKKyAgfSwK
K107CisKKy8vIGJhc2ljIHRlc3RzCitmb3IgKGNvbnN0IHQgb2YgdGVzdENhc2VzKSB7CisgIGFz
c2VydChjb250YWlucyh0LmRvbnRFbnVtS2V5cywgdC5jb25maWd1cmFibGVEb250RW51bUtleXMp
KTsKKworICBhc3NlcnQoIWNvbnRhaW5zKGZvckluKHQuZ2V0T2JqZWN0KCkpLCB0LmRvbnRFbnVt
S2V5cyksIHQubmFtZSk7CisgIGFzc2VydCghY29udGFpbnMoT2JqZWN0LmtleXModC5nZXRPYmpl
Y3QoKSksIHQuZG9udEVudW1LZXlzKSwgdC5uYW1lKTsKKworICBhc3NlcnQoY29udGFpbnMoT2Jq
ZWN0LmdldE93blByb3BlcnR5TmFtZXModC5nZXRPYmplY3QoKSksIHQuZG9udEVudW1LZXlzKSwg
dC5uYW1lKTsKKyAgYXNzZXJ0KGNvbnRhaW5zKFJlZmxlY3Qub3duS2V5cyh0LmdldE9iamVjdCgp
KSwgdC5kb250RW51bUtleXMpLCB0Lm5hbWUpOworfQorCisvLyBzaGFkb3dpbmc6IERvbnRFbnVt
ID0+IEVudW0KK2ZvciAoY29uc3QgdCBvZiBbLi4udGVzdENhc2VzLCAuLi5ub25SZWlmaWVkVGVz
dENhc2VzXSkgeworICBhc3NlcnQoCisgICAgIWNvbnRhaW5zKAorICAgICAgZm9ySW4obWFrZVBy
b3RvdHlwZUNoYWluKHQuZ2V0T2JqZWN0KCksIG1ha2VPYmplY3QodC5kb250RW51bUtleXMpKSks
CisgICAgICB0LmRvbnRFbnVtS2V5cywKKyAgICApLAorICAgIHQubmFtZSwKKyAgKTsKK30KKwor
Ly8gc2hhZG93aW5nOiB7fSA9PiBEb250RW51bSA9PiB7fSA9PiBFbnVtCitmb3IgKGNvbnN0IHQg
b2YgWy4uLnRlc3RDYXNlcywgLi4ubm9uUmVpZmllZFRlc3RDYXNlc10pIHsKKyAgYXNzZXJ0KAor
ICAgICFjb250YWlucygKKyAgICAgIGZvckluKG1ha2VQcm90b3R5cGVDaGFpbih7fSwgdC5nZXRP
YmplY3QoKSwge30sIG1ha2VPYmplY3QodC5kb250RW51bUtleXMpKSksCisgICAgICB0LmRvbnRF
bnVtS2V5cywKKyAgICApLAorICAgIHQubmFtZSwKKyAgKTsKK30KKworLy8gc2hhZG93aW5nOiBE
b250RW51bSA9PiB7fSA9PiBFbnVtID0+IHt9ID0+IEVudW0KK2ZvciAoY29uc3QgdCBvZiBbLi4u
dGVzdENhc2VzLCAuLi5ub25SZWlmaWVkVGVzdENhc2VzXSkgeworICBhc3NlcnQoCisgICAgIWNv
bnRhaW5zKAorICAgICAgZm9ySW4obWFrZVByb3RvdHlwZUNoYWluKHQuZ2V0T2JqZWN0KCksIHt9
LCBtYWtlT2JqZWN0KHQuZG9udEVudW1LZXlzKSwge30sIG1ha2VPYmplY3QodC5kb250RW51bUtl
eXMpKSksCisgICAgICB0LmRvbnRFbnVtS2V5cywKKyAgICApLAorICAgIHQubmFtZSwKKyAgKTsK
K30KKworLy8gc2hhZG93aW5nOiB7fSA9PiBEb250RW51bSAoZW51bWVyYWJsZTogdHJ1ZSA9PiBm
YWxzZSkgPT4ge30gPT4gRW51bQorZm9yIChjb25zdCB0IG9mIHRlc3RDYXNlcykgeworICBjb25z
dCBkb250RW51bU9iamVjdCA9IHQuZ2V0T2JqZWN0KCk7CisgIGNvbnN0IHByb3RvdHlwZUNoYWlu
ID0gbWFrZVByb3RvdHlwZUNoYWluKHt9LCBkb250RW51bU9iamVjdCwge30sIG1ha2VPYmplY3Qo
dC5kb250RW51bUtleXMpKTsKKworICBhc3NlcnQoIWNvbnRhaW5zKGZvckluKHByb3RvdHlwZUNo
YWluKSwgdC5kb250RW51bUtleXMpLCB0Lm5hbWUpOworCisgIGZvciAoY29uc3Qga2V5IG9mIHQu
Y29uZmlndXJhYmxlRG9udEVudW1LZXlzKQorICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkb250
RW51bU9iamVjdCwga2V5LCB7ZW51bWVyYWJsZTogdHJ1ZX0pOworCisgIGFzc2VydChjb250YWlu
cyhmb3JJbihwcm90b3R5cGVDaGFpbiksIHQuY29uZmlndXJhYmxlRG9udEVudW1LZXlzKSwgdC5u
YW1lKTsKK30KKworLy8gc2hhZG93aW5nOiB7fSA9PiBEb250RW51bSAoZGVsZXRlIG5vbi1lbnVt
ZXJhYmxlIGtleXMpID0+IHt9ID0+IEVudW0KK2ZvciAoY29uc3QgdCBvZiB0ZXN0Q2FzZXMpIHsK
KyAgY29uc3QgZG9udEVudW1PYmplY3QgPSB0LmdldE9iamVjdCgpOworICBjb25zdCBwcm90b3R5
cGVDaGFpbiA9IG1ha2VQcm90b3R5cGVDaGFpbih7fSwgZG9udEVudW1PYmplY3QsIHt9LCBtYWtl
T2JqZWN0KHQuZG9udEVudW1LZXlzKSk7CisKKyAgYXNzZXJ0KCFjb250YWlucyhmb3JJbihwcm90
b3R5cGVDaGFpbiksIHQuZG9udEVudW1LZXlzKSwgdC5uYW1lKTsKKworICBmb3IgKGNvbnN0IGtl
eSBvZiB0LmNvbmZpZ3VyYWJsZURvbnRFbnVtS2V5cykKKyAgICBkZWxldGUgZG9udEVudW1PYmpl
Y3Rba2V5XTsKKworICBhc3NlcnQoY29udGFpbnMoZm9ySW4ocHJvdG90eXBlQ2hhaW4pLCB0LmNv
bmZpZ3VyYWJsZURvbnRFbnVtS2V5cyksIHQubmFtZSk7Cit9CisKKy8vIGhlbHBlcnMKK2Z1bmN0
aW9uIGFzc2VydCh2YWx1ZSwgbmFtZSkgeworICBpZiAoIXZhbHVlKQorICAgIHRocm93IG5ldyBF
cnJvcihgQmFkIHZhbHVlOiAke3ZhbHVlfS4gVGVzdCBjYXNlOiAke25hbWV9LmApOworfQorCitm
dW5jdGlvbiBjb250YWlucyhhcnJheSwgc3ViYXJyYXkpIHsKKyAgcmV0dXJuIHN1YmFycmF5LmV2
ZXJ5KGl0ZW0gPT4gYXJyYXkuaW5jbHVkZXMoaXRlbSkpOworfQorCitmdW5jdGlvbiBmb3JJbihv
YmplY3QpIHsKKyAgY29uc3Qga2V5cyA9IFtdOworICBmb3IgKGNvbnN0IGtleSBpbiBvYmplY3Qp
CisgICAga2V5cy5wdXNoKGtleSk7CisgIHJldHVybiBrZXlzOworfQorCitmdW5jdGlvbiBtYWtl
UHJvdG90eXBlQ2hhaW4oLi4ub2JqZWN0cykgeworICBvYmplY3RzLnJlZHVjZSgob2JqZWN0LCBw
cm90b3R5cGUpID0+IHsKKyAgICBPYmplY3Quc2V0UHJvdG90eXBlT2Yob2JqZWN0LCBwcm90b3R5
cGUpOworICAgIHJldHVybiBwcm90b3R5cGU7CisgIH0pOworICByZXR1cm4gb2JqZWN0c1swXTsK
K30KKworZnVuY3Rpb24gbWFrZU9iamVjdChrZXlzKSB7CisgIGNvbnN0IG9iamVjdCA9IHt9Owor
ICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKQorICAgIG9iamVjdFtrZXldID0ga2V5OworICByZXR1
cm4gb2JqZWN0OworfQpJbmRleDogSlNUZXN0cy9zdHJlc3MvZm9yLWluLXR5cGVkLWFycmF5Lmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL2Zvci1pbi10eXBlZC1hcnJheS5qcwkocmV2
aXNpb24gMjY3NzY3KQorKysgSlNUZXN0cy9zdHJlc3MvZm9yLWluLXR5cGVkLWFycmF5LmpzCSh3
b3JraW5nIGNvcHkpCkBAIC0xNiwzICsxNiwyNSBAQAogICAgIH0KICAgICBmb28obnVsbCk7CiB9
KSgpOworCisoZnVuY3Rpb24oKSB7CisgICAgZnVuY3Rpb24gZm9ySW4oKSB7CisgICAgICAgIHZh
ciBhID0gbmV3IEludDMyQXJyYXkoNCk7CisgICAgICAgIGEuZm9vID0gMTsKKyAgICAgICAgYS5i
YXIgPSAyOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGEubGVuZ3RoOyArK2kpCisgICAg
ICAgICAgICBhW2ldID0gaTsKKworICAgICAgICB2YXIga2V5cyA9IFtdOworICAgICAgICBmb3Ig
KHZhciBrIGluIGEpCisgICAgICAgICAgICBrZXlzLnB1c2goayk7CisgICAgICAgIHJldHVybiBr
ZXlzLmpvaW4oInwiKTsKKyAgICB9CisgICAgbm9JbmxpbmUoZm9ySW4pOworCisgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCAxZTQ7ICsraSkgeworICAgICAgICB2YXIga2V5cyA9IGZvckluKCk7Cisg
ICAgICAgIGlmIChrZXlzICE9PSAiMHwxfDJ8M3xmb298YmFyIikKKyAgICAgICAgICAgIHRocm93
IG5ldyBFcnJvcihgQmFkIHJlc3VsdDogJHtrZXlzfWApOworICAgIH0KK30pKCk7CkluZGV4OiBK
U1Rlc3RzL3Rlc3QyNjIvZXhwZWN0YXRpb25zLnlhbWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy90
ZXN0MjYyL2V4cGVjdGF0aW9ucy55YW1sCShyZXZpc2lvbiAyNjc3NjcpCisrKyBKU1Rlc3RzL3Rl
c3QyNjIvZXhwZWN0YXRpb25zLnlhbWwJKHdvcmtpbmcgY29weSkKQEAgLTM0NDMsMTYgKzM0NDMs
MTAgQEAgdGVzdC9sYW5ndWFnZS9zdGF0ZW1lbnRzL2Zvci1hd2FpdC1vZi90aQogdGVzdC9sYW5n
dWFnZS9zdGF0ZW1lbnRzL2Zvci1hd2FpdC1vZi90aWNrcy13aXRoLXN5bmMtaXRlci1yZXNvbHZl
ZC1wcm9taXNlLWFuZC1jb25zdHJ1Y3Rvci1sb29rdXAuanM6CiAgIGRlZmF1bHQ6ICdUZXN0MjYy
OkFzeW5jVGVzdEZhaWx1cmU6VGVzdDI2MkVycm9yOiBUZXN0MjYyRXJyb3I6IEV4cGVjdGVkIFtw
cmUsIHRpY2sgMSwgY29uc3RydWN0b3IsIGNvbnN0cnVjdG9yLCB0aWNrIDIsIHRpY2sgMywgbG9v
cCwgdGljayA0LCBjb25zdHJ1Y3Rvcl0gYW5kIFtwcmUsIGNvbnN0cnVjdG9yLCBjb25zdHJ1Y3Rv
ciwgdGljayAxLCB0aWNrIDIsIGxvb3AsIGNvbnN0cnVjdG9yLCB0aWNrIDMsIHRpY2sgNCwgcG9z
dF0gdG8gaGF2ZSB0aGUgc2FtZSBjb250ZW50cy4gVGlja3MgYW5kIGNvbnN0cnVjdG9yIGxvb2t1
cHMnCiAgIHN0cmljdCBtb2RlOiAnVGVzdDI2MjpBc3luY1Rlc3RGYWlsdXJlOlRlc3QyNjJFcnJv
cjogVGVzdDI2MkVycm9yOiBFeHBlY3RlZCBbcHJlLCB0aWNrIDEsIGNvbnN0cnVjdG9yLCBjb25z
dHJ1Y3RvciwgdGljayAyLCB0aWNrIDMsIGxvb3AsIHRpY2sgNCwgY29uc3RydWN0b3JdIGFuZCBb
cHJlLCBjb25zdHJ1Y3RvciwgY29uc3RydWN0b3IsIHRpY2sgMSwgdGljayAyLCBsb29wLCBjb25z
dHJ1Y3RvciwgdGljayAzLCB0aWNrIDQsIHBvc3RdIHRvIGhhdmUgdGhlIHNhbWUgY29udGVudHMu
IFRpY2tzIGFuZCBjb25zdHJ1Y3RvciBsb29rdXBzJwotdGVzdC9sYW5ndWFnZS9zdGF0ZW1lbnRz
L2Zvci1pbi8xMi42LjQtMi5qczoKLSAgZGVmYXVsdDogJ1Rlc3QyNjJFcnJvcjogYWNjZXNzZWRQ
cm9wIEV4cGVjdGVkIFNhbWVWYWx1ZSjCq3RydWXCuywgwqtmYWxzZcK7KSB0byBiZSB0cnVlJwot
ICBzdHJpY3QgbW9kZTogJ1Rlc3QyNjJFcnJvcjogYWNjZXNzZWRQcm9wIEV4cGVjdGVkIFNhbWVW
YWx1ZSjCq3RydWXCuywgwqtmYWxzZcK7KSB0byBiZSB0cnVlJwogdGVzdC9sYW5ndWFnZS9zdGF0
ZW1lbnRzL2Zvci1pbi9oZWFkLWxocy1sZXQuanM6CiAgIGRlZmF1bHQ6ICJTeW50YXhFcnJvcjog
Q2Fubm90IHVzZSB0aGUga2V5d29yZCAnaW4nIGFzIGEgbGV4aWNhbCB2YXJpYWJsZSBuYW1lLiIK
IHRlc3QvbGFuZ3VhZ2Uvc3RhdGVtZW50cy9mb3ItaW4vaWRlbnRpZmllci1sZXQtYWxsb3dlZC1h
cy1sZWZ0aGFuZHNpZGUtZXhwcmVzc2lvbi1ub3Qtc3RyaWN0LmpzOgogICBkZWZhdWx0OiAiU3lu
dGF4RXJyb3I6IENhbm5vdCB1c2UgdGhlIGtleXdvcmQgJ2luJyBhcyBhIGxleGljYWwgdmFyaWFi
bGUgbmFtZS4iCi10ZXN0L2xhbmd1YWdlL3N0YXRlbWVudHMvZm9yLWluL29yZGVyLWVudW1lcmFi
bGUtc2hhZG93ZWQuanM6Ci0gIGRlZmF1bHQ6ICdUZXN0MjYyRXJyb3I6IEV4cGVjdGVkIFtwMSwg
cDJdIGFuZCBbcDFdIHRvIGhhdmUgdGhlIHNhbWUgY29udGVudHMuICcKLSAgc3RyaWN0IG1vZGU6
ICdUZXN0MjYyRXJyb3I6IEV4cGVjdGVkIFtwMSwgcDJdIGFuZCBbcDFdIHRvIGhhdmUgdGhlIHNh
bWUgY29udGVudHMuICcKIHRlc3QvbGFuZ3VhZ2Uvc3RhdGVtZW50cy9mb3ItaW4vc2NvcGUtYm9k
eS1sZXgtb3Blbi5qczoKICAgZGVmYXVsdDogJ1Rlc3QyNjJFcnJvcjogRXhwZWN0ZWQgYSBSZWZl
cmVuY2VFcnJvciB0byBiZSB0aHJvd24gYnV0IG5vIGV4Y2VwdGlvbiB3YXMgdGhyb3duIGF0IGFs
bCcKICAgc3RyaWN0IG1vZGU6ICdUZXN0MjYyRXJyb3I6IEV4cGVjdGVkIGEgUmVmZXJlbmNlRXJy
b3IgdG8gYmUgdGhyb3duIGJ1dCBubyBleGNlcHRpb24gd2FzIHRocm93biBhdCBhbGwnCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2Nzc2NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMzEgQEAKKzIw
MjAtMDktMjkgIEFsZXhleSBTaHZheWthICA8c2h2YWlrYWxlc2hAZ21haWwuY29tPgorCisgICAg
ICAgIE5vbi1lbnVtZXJhYmxlIHByb3BlcnR5IGZhaWxzIHRvIHNoYWRvdyBpbmhlcml0ZWQgZW51
bWVyYWJsZSBwcm9wZXJ0eSBmcm9tIGZvci1pbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzg5NzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBXaGlsZSBmb3IvaW4gd2FzIGluaXRpYWxseSBzcGVjaWZpZWQg
d2l0aCBub3Rpb24gb2YgInNoYWRvd2luZyIsIGl0IHdhc24ndCBjbGFyaWZpZWQKKyAgICAgICAg
dW50aWwgRVM1IHRoYXQgW1tFbnVtZXJhYmxlXV0gYXR0cmlidXRlcyBhcmUgaWdub3JlZCB3aGVu
IGRldGVybWluaW5nIGlmIGEgcHJvcGVydHkKKyAgICAgICAgaGFzIGFscmVhZHkgYmVlbiBwcm9j
ZXNzZWQuIFJlY2VudGx5LCBmb3IvaW4gc3BlYyB3YXMgZXhwYW5kZWQgWzFdIHRvIHBpbiBkb3du
IGNvbW1vbgorICAgICAgICBjYXNlIGVudW1lcmF0aW9uIGFzIGl0J3MgY3VycmVudGx5IGltcGxl
bWVudGVkIGJ5IFY4IGFuZCBTcGlkZXJNb25rZXkuCisKKyAgICAgICAgQWRkaW5nIHRoZSBzZWNv
bmQgUHJvcGVydHlOYW1lQXJyYXkgdG8ga2VlcCBEb250RW51bSBwcm9wZXJ0aWVzIGFuZCBmaWx0
ZXJpbmcgdGhlbSB2aWEKKyAgICAgICAgZ2V0T3duUHJvcGVydHlTbG90KCkgd291bGQgYmUgZWl0
aGVyIGEgbWFzc2l2ZSBzbG93ZG93biwgb3Igd291bGQgcmVxdWlyZSBwbGVudHkgb2YKKyAgICAg
ICAgY2hlY2tzIGFuZCByZWltcGxlbWVudGluZyBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1l
cygpIHdpdGggY2FsbGJhY2sgbWV0aG9kcyB0bworICAgICAgICBwcmVzZXJ2ZSBlbnVtZXJhdGlv
biBwZXJmb3JtYW5jZSBmb3IgbW9zdCBvYmplY3RzIChidXQgbm90IGFsbCkuCisKKyAgICAgICAg
SW5zdGVhZCwgdGhpcyBwYXRjaDoKKworICAgICAgICAxLiBJbnRyb2R1Y2VzIERvbnRFbnVtUHJv
cGVydHlNb2RlOjpFeGNsdWRlQnV0TWFya0FzU2VlbiwgbWVyZ2VzIEVudW1lcmF0aW9uTW9kZSBp
bnRvCisgICAgICAgICAgIFByb3BlcnR5TmFtZUFycmF5LCBhbmQgdXRpbGl6ZXMgaXRzIG1fc2V0
IHRvIGltcGxlbWVudCB0aGUgInNoYWRvd2luZyIuIEJlZm9yZSB0aGlzCisgICAgICAgICAgIGNo
YW5nZSwgUHJvcGVydHlOYW1lQXJyYXkgd2FzIGFscmVhZHkgYXdhcmUgb2YgZm9yL2luIHNpbmNl
IGl0IGRpZG4ndCBhbGxvdyByZW1vdmFscy4KKworICAgICAgICAyLiBSZW1vdmVzIGdldFByb3Bl
cnR5TmFtZXMoKSBmcm9tIHRoZSBtZXRob2QgdGFibGUgYmVjYXVzZSBFUzcgcnVsZWQgb3V0IHRo
ZSBhYmlsaXR5CisgICAgICAgICAgIHRvIG92ZXJyaWRlIGl0IFsyXSwgZHJvcHMgaGFyZC10by1m
b2xsb3cgSlNPYmplY3RQcm9wZXJ0aWVzTW9kZSBiaXQsIGFuZCBtZXJnZXMKKyAgICAgICAgICAg
SlNPYmplY3Q6OmdldFByb3BlcnR5TmFtZXMoKSB3aXRoIEpTT2JqZWN0OjpnZXRHZW5lcmljUHJv
cGVydHlOYW1lcygpLgorCisgICAgICAgIDMuIFJlbW92ZXMgZ2V0U3RydWN0dXJlUHJvcGVydHlO
YW1lcygpIGFuZCBnZXRHZW5lcmljUHJvcGVydHlOYW1lcygpIGZyb20gdGhlIG1ldGhvZCB0YWJs
ZQorICAgICAgICAgICAoYWxvbmcgd2l0aCByZWxhdGVkIG92ZXJyaWRlcykgYmVjYXVzZSB0aGV5
IHdlcmUgaW5jb25zaXN0ZW50LCBpbXBsaWNpdGx5IGRlcGVuZGVudCBvbgorICAgICAgICAgICBE
b250RW51bVByb3BlcnRpZXNNb2RlOjpFeGNsdWRlLCBhbmQgbGFyZ2VseSBkdXBsaWNhdGluZyBn
ZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoKS4KKworICAgICAgICBBcGFydCBmcm9tIGFsaWdu
aW5nIGZvci9pbiAic2hhZG93aW5nIiB3aXRoIFY4IGFuZCBTcGlkZXJNb25rZXksIHRoaXMgcGF0
Y2ggZml4ZXMgdHdvCisgICAgICAgIHByb3BlcnR5IG5hbWUgb3JkZXJpbmcgYnVnczoKKworICAg
ICAgICAxLiBTdHJ1Y3R1cmUgdGFibGUgc2hvdWxkIGJlIGVudW1lcmF0ZWQgYWZ0ZXIgb3duIG5v
bi1tYXRlcmlhbGl6ZWQgcHJvcGVydGllcy4KKyAgICAgICAgMi4gTm9uLW1hdGVyaWFsaXplZCBH
ZW5lcmljQXJndW1lbnRzIHByb3BlcnRpZXMgc2hvdWxkIGJlIGVudW1lcmF0ZWQgYWZ0ZXIgYWxs
IGluZGljZXMuCisKKyAgICAgICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yIGNhY2hpbmcgYW5k
IGZhc3QgcGF0aHMgYXJlIHVuYWZmZWN0ZWQgYnkgdGhpcyBwYXRjaC4KKyAgICAgICAgZm9yL2lu
IG1pY3JvYmVuY2htYXJrcyBhcmUgbmV1dHJhbCwgd2hpbGUgT2JqZWN0LntrZXlzLGdldE93blBy
b3BlcnR5U3ltYm9sc30gdGVzdHMKKyAgICAgICAgcmVncmVzcyBieSAzLTQlIGR1ZSB0byBpbmNy
ZWFzZWQgU3RydWN0dXJlOjpnZXRQcm9wZXJ0eU5hbWVzRnJvbVN0cnVjdHVyZSgpIGNvZGUgc2l6
ZSwKKyAgICAgICAgd2hpY2ggd2lsbCBiZSBhZGRyZXNzZWQgaW4gYSBmb2xsb3ctdXAuCisKKyAg
ICAgICAgWzFdOiBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9lY21hMjYyL3B1bGwvMTc5MQorICAg
ICAgICBbMl06IGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L2VjbWEyNjIvcHVsbC8zNjcKKyAgICAg
ICAgWzNdOiBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9yZGluYXJ5b3ducHJvcGVydHlr
ZXlzCisgICAgICAgIFs0XTogaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pbnRlZ2VyaW5k
ZXhlZGVsZW1lbnRzZXQgKHN0ZXAgNykKKyAgICAgICAgWzVdOiBodHRwczovL3RjMzkuZXMvZWNt
YTI2Mi8jc2VjLW1vZHVsZS1uYW1lc3BhY2UtZXhvdGljLW9iamVjdHMtZGVmaW5lb3ducHJvcGVy
dHktcC1kZXNjCisKKyAgICAgICAgKiBBUEkvSlNBUElWYWx1ZVdyYXBwZXIuaDoKKyAgICAgICAg
UmVtb3ZlIE92ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5TmFtZXMgc3RydWN0dXJlIGZsYWcg
YXMgaXQgc2hvdWxkIG5ldmVyIGJlIHF1ZXJpZWQKKyAgICAgICAgZnJvbSBKU0NlbGwgaW5zdGFu
Y2VzLgorCisgICAgICAgICogYnl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVJbmxpbmVz
Lmg6CisgICAgICAgIChKU0M6Ok9iamVjdEFsbG9jYXRpb25Qcm9maWxlQmFzZTxEZXJpdmVkPjo6
cG9zc2libGVEZWZhdWx0UHJvcGVydHlDb3VudCk6CisgICAgICAgIFVzZSBEb250RW51bVByb3Bl
cnR5TW9kZTo6SW5jbHVkZSBhcyB0aGUgaW50ZW50IGlzIHRvIGNvdW50IGFsbCBwcm9wZXJ0aWVz
LCBldmVuCisgICAgICAgIHByaXZhdGUgc3ltYm9scy4gRW51bWVyYXRpb25Nb2RlKCkgZGVmYXVs
dHMgZGlkIGV4Y2x1ZGUgbm9uLWVudW1lcmFibGUgcHJvcGVydGllcy4KKworICAgICAgICAqIHJ1
bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6R2VuZXJpY0Fy
Z3VtZW50czxUeXBlPjo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgIEVudW1lcmF0ZSBp
bmRpY2VzIHRoYXQgYXJlIG5vdCBtYXBwZWQgYXJndW1lbnRzIGJlZm9yZSBub24tbWF0ZXJpYWxp
emVkIHByb3BlcnR5IG5hbWVzCisgICAgICAgIGFzIHBlciBzcGVjIFszXSwgYWxpZ25pbmcgSlND
IHdpdGggVjggYW5kIFNwaWRlck1vbmtleS4KKworICAgICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlv
bi5jcHA6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OmdldE93bk5vbkluZGV4UHJvcGVydHlO
YW1lcyk6CisgICAgICAgIEF2b2lkIG1hdGVyaWFsaXppbmcgInByb3RvdHlwZSIgZHVyaW5nIHBy
b3BlcnR5IG5hbWUgZW51bWVyYXRpb24sIGFkdmFuY2luZyBwcm92aWRlZAorICAgICAgICBtaWNy
b2JlbmNobWFyayBieSB+NTMlLgorCisgICAgICAgICogcnVudGltZS9KU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8
QWRhcHRvcj46OmdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICBDYWxsIEJhc2U6OmdldE93
bk5vbkluZGV4UHJvcGVydHlOYW1lcygpIGRpcmVjdGx5IHNpbmNlIFR5cGVkQXJyYXlzIGNhbid0
IGhhdmUgaW5kZXhlZAorICAgICAgICBwcm9wZXJ0aWVzIGJleW9uZCBtX2xlbmd0aCBbNF0sIGFk
dmFuY2luZyBwcm92aWRlZCBtaWNyb2JlbmNobWFyayBieSB+MTElLgorCisgICAgICAgICogcnVu
dGltZS9KU0dsb2JhbE9iamVjdC5oOgorICAgICAgICBSZW1vdmUgT3ZlcnJpZGVzQW55Rm9ybU9m
R2V0UHJvcGVydHlOYW1lcyBzdHJ1Y3R1cmUgZmxhZyBhcyBpdCdzIGluaGVyaXRlZCBmcm9tCisg
ICAgICAgIEpTU3ltYm9sVGFibGVPYmplY3QsIGFuZCBKU0dsb2JhbE9iamVjdCBpdHNlbGYgZG9l
c24ndCBvdmVycmlkZSBnZXRPd24qUHJvcGVydHlOYW1lcygpLgorCisgICAgICAgICogcnVudGlt
ZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTTW9kdWxlTmFt
ZXNwYWNlT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgQ2FsbCBCYXNlOjpn
ZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoKSBkaXJlY3RseSwgZ3VhcmRlZCBieSBpbmNsdWRl
U3ltYm9sUHJvcGVydGllcygpCisgICAgICAgIGNoZWNrLCBzaW5jZSBtb2R1bGUgbmFtZXNwYWNl
IG9iamVjdHMgY2FuJ3QgaGF2ZSBzdHJpbmcgcHJvcGVydGllcyBiZXNpZGVzIG1fbmFtZXMgWzVd
LgorCisgICAgICAgICogcnVudGltZS9Qcm9wZXJ0eU5hbWVBcnJheS5oOgorICAgICAgICAoSlND
OjpQcm9wZXJ0eU5hbWVBcnJheTo6UHJvcGVydHlOYW1lQXJyYXkpOgorICAgICAgICBEZWZhdWx0
IHRvIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlIGJ1dCByZXF1aXJlIERvbnRFbnVtUHJvcGVy
dHlNb2RlIHRvIGJlIHNwZWNpZmllZC4KKworICAgICAgICAoSlNDOjpQcm9wZXJ0eU5hbWVBcnJh
eTo6YWRkKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlOYW1lQXJyYXk6OmFkZFdpdGhEb250RW51
bSk6CisgICAgICAgIEluc3RlYWQgb2YgVW5pcXVlZFN0cmluZ0ltcGwqLCBhY2NlcHQgYW4gSWRl
bnRpZmllciB0byBhdm9pZCBjcmVhdGluZyBpdCB0d2ljZS4KKworICAgICAgICAoSlNDOjpQcm9w
ZXJ0eU5hbWVBcnJheTo6aXNFbXB0eSBjb25zdCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5TmFt
ZUFycmF5Ojpkb250RW51bVByb3BlcnR5TW9kZSBjb25zdCk6CisgICAgICAgIChKU0M6OlByb3Bl
cnR5TmFtZUFycmF5OjphZGRLbm93blVuaXF1ZVdpdGhEb250RW51bSk6CisgICAgICAgIENhbGwg
aXNVaWRNYXRjaGVkVG9UeXBlTW9kZSgpIHRvIHJlamVjdCBwcml2YXRlIHN5bWJvbHMgaWYgbmVj
ZXNzYXJ5LgorCisgICAgICAgIChKU0M6OlByb3BlcnR5TmFtZUFycmF5Ojppbml0aWFsaXplU2V0
SWZOZWNlc3NhcnkpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eU5hbWVBcnJheTo6Y2FuQWRkS25v
d25VbmlxdWVGb3JTdHJ1Y3R1cmUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpQcm9w
ZXJ0eU5hbWVBcnJheTo6YWRkVW5jaGVja2VkSW50ZXJuYWwpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpQcm9wZXJ0eU5hbWVBcnJheTo6YWRkVW5jaGVja2VkKTogRGVsZXRlZC4KKworICAgICAg
ICAqIHJ1bnRpbWUvUHJveHlPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpQcm94eU9iamVjdDo6
cGVyZm9ybUdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICBSZW1vdmUgfHJlc3VsdEZpbHRl
cnwgZmlsdGVyaW5nIGFzIGl0J3MgcGVyZm9ybWVkIGJ5IFByb3BlcnR5TmFtZUFycmF5OjphZGQo
KS4KKworICAgICAgICAqIHJ1bnRpbWUvUHJveHlPYmplY3QuaDoKKyAgICAgICAgQXZvaWQgc2V0
dGluZyBJc1F1aWNrUHJvcGVydHlBY2Nlc3NBbGxvd2VkRm9yRW51bWVyYXRpb24gZmxhZyBvbiBQ
cm94eU9iamVjdCdzCisgICAgICAgIHN0cnVjdHVyZSBzaW5jZSBjYW5BY2Nlc3NQcm9wZXJ0aWVz
UXVpY2tseUZvckVudW1lcmF0aW9uKCkgbm93IGNoZWNrcyBtZXRob2Qgb3ZlcnJpZGUuCisKKyAg
ICAgICAgKiBydW50aW1lL1N0cmluZ09iamVjdC5jcHA6CisgICAgICAgIChKU0M6OlN0cmluZ09i
amVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6OlN0cmluZ09iamVjdDo6
Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKTogRGVsZXRlZC4KKyAgICAgICAgTWVyZ2UgbWV0
aG9kcyB0byBhdm9pZCBhbiBleHRyYSBkeW5hbWljIGRpc3BhdGNoLCBhZHZhbmNpbmcgcHJvdmlk
ZWQgbWljcm9iZW5jaG1hcmsgYnkgfjYlLgorCisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUu
Y3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnZhbGlkYXRlRmxhZ3MpOgorICAgICAgICBT
dHJlbmd0aGVuIG92ZXJyaWRlc0dldE93bipQcm9wZXJ0eU5hbWVzKCkgYXNzZXJ0cyBpbnRvIGVx
dWl2YWxlbmNlIHRlc3RzLgorCisgICAgICAgICogdG9vbHMvSlNEb2xsYXJWTS5jcHA6CisgICAg
ICAgIFJlbW92ZSBPdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVzIHN0cnVjdHVyZSBm
bGFnIGFzIGl0J3MgaW5oZXJpdGVkIGZyb20KKyAgICAgICAgSlNBcnJheSwgYW5kIFJ1bnRpbWVB
cnJheSBpdHNlbGYgZG9lc24ndCBvdmVycmlkZSBnZXRPd24qUHJvcGVydHlOYW1lcygpLgorCisg
ICAgICAgICogQVBJL0pTQ2FsbGJhY2tPYmplY3QuaDoKKyAgICAgICAgKiBBUEkvSlNDYWxsYmFj
a09iamVjdEZ1bmN0aW9ucy5oOgorICAgICAgICAoSlNDOjpKU0NhbGxiYWNrT2JqZWN0PFBhcmVu
dD46OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6CisgICAgICAgICogQVBJL0pTT2JqZWN0
UmVmLmNwcDoKKyAgICAgICAgKEpTT2JqZWN0Q29weVByb3BlcnR5TmFtZXMpOgorICAgICAgICAo
SlNQcm9wZXJ0eU5hbWVBY2N1bXVsYXRvckFkZE5hbWUpOgorICAgICAgICAqIENNYWtlTGlzdHMu
dHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogYmluZGluZ3MvU2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAoSW5zcGVjdG9y
Ojpqc1RvSW5zcGVjdG9yVmFsdWUpOgorICAgICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUu
Y3BwOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlclNjb3BlOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToK
KyAgICAgICAgKiBkZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmg6CisgICAgICAgICogZGZnL0RGR09w
ZXJhdGlvbnMuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvQ2xhc3NJbmZvLmg6CisgICAgICAgICog
cnVudGltZS9DbG9uZWRBcmd1bWVudHMuY3BwOgorICAgICAgICAoSlNDOjpDbG9uZWRBcmd1bWVu
dHM6OmdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAqIHJ1bnRpbWUvQ2xvbmVkQXJndW1l
bnRzLmg6CisgICAgICAgICogcnVudGltZS9FbnVtZXJhdGlvbk1vZGUuaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBydW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjpFcnJvcklu
c3RhbmNlOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpFcnJv
ckluc3RhbmNlOjpnZXRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVzKTogRGVsZXRlZC4KKyAgICAgICAg
KiBydW50aW1lL0Vycm9ySW5zdGFuY2UuaDoKKyAgICAgICAgKiBydW50aW1lL0dlbmVyaWNBcmd1
bWVudHMuaDoKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3BwOgorICAgICAgICAoSlNDOjpK
U0FycmF5OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAgICAgICAqIHJ1bnRpbWUv
SlNBcnJheS5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmNwcDoKKyAgICAgICAgKEpTQzo6
SlNDZWxsOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpnZXRP
d25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpKU0NlbGw6OmdldFByb3Bl
cnR5TmFtZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU0NlbGw6OmdldFN0cnVjdHVyZVBy
b3BlcnR5TmFtZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU0NlbGw6OmdldEdlbmVyaWNQ
cm9wZXJ0eU5hbWVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5oOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlvbi5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXcuaDoKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rp
b25zLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAg
ICAgKiBydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmNwcDoKKyAgICAgICAgKEpTQzo6SlNM
ZXhpY2FsRW52aXJvbm1lbnQ6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6CisgICAgICAg
ICogcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNN
b2R1bGVFbnZpcm9ubWVudC5jcHA6CisgICAgICAgIChKU0M6OkpTTW9kdWxlRW52aXJvbm1lbnQ6
OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6CisgICAgICAgICogcnVudGltZS9KU01vZHVs
ZUVudmlyb25tZW50Lmg6CisgICAgICAgICogcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVj
dC5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpnZXRD
bGFzc1Byb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0UHJvcGVydHlO
YW1lcyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93bkluZGV4UHJvcGVydHlOYW1lcyk6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6Z2V0U3RydWN0dXJlUHJvcGVydHlOYW1lcyk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkpTT2JqZWN0OjpnZXRHZW5lcmljUHJvcGVydHlOYW1lcyk6IERlbGV0ZWQuCisg
ICAgICAgICogcnVudGltZS9KU09iamVjdC5oOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0
UHJvcGVydHlOYW1lcyk6CisgICAgICAgICogcnVudGltZS9KU09OT2JqZWN0LmNwcDoKKyAgICAg
ICAgKEpTQzo6U3RyaW5naWZpZXI6OlN0cmluZ2lmaWVyKToKKyAgICAgICAgKEpTQzo6U3RyaW5n
aWZpZXI6OkhvbGRlcjo6YXBwZW5kTmV4dFByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6V2Fsa2Vy
Ojp3YWxrKToKKyAgICAgICAgKiBydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oOgor
ICAgICAgICAoSlNDOjpwcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKToKKyAgICAgICAgKiBydW50aW1l
L0pTUHJveHkuY3BwOgorICAgICAgICAoSlNDOjpKU1Byb3h5OjpnZXRPd25Qcm9wZXJ0eU5hbWVz
KToKKyAgICAgICAgKEpTQzo6SlNQcm94eTo6Z2V0UHJvcGVydHlOYW1lcyk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkpTUHJveHk6OmdldFN0cnVjdHVyZVByb3BlcnR5TmFtZXMpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpKU1Byb3h5OjpnZXRHZW5lcmljUHJvcGVydHlOYW1lcyk6IERlbGV0
ZWQuCisgICAgICAgICogcnVudGltZS9KU1Byb3h5Lmg6CisgICAgICAgICogcnVudGltZS9KU1N5
bWJvbFRhYmxlT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNTeW1ib2xUYWJsZU9iamVjdDo6
Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBydW50aW1lL0pTU3ltYm9s
VGFibGVPYmplY3QuaDoKKyAgICAgICAgKiBydW50aW1lL0pTVHlwZUluZm8uaDoKKyAgICAgICAg
KEpTQzo6VHlwZUluZm86Om92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgY29uc3QpOgorICAg
ICAgICAoSlNDOjpUeXBlSW5mbzo6b3ZlcnJpZGVzR2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVz
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6VHlwZUluZm86Om92ZXJyaWRlc0FueUZvcm1PZkdldE93
blByb3BlcnR5TmFtZXMgY29uc3QpOgorICAgICAgICAoSlNDOjpUeXBlSW5mbzo6b3ZlcnJpZGVz
R2V0UHJvcGVydHlOYW1lcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlR5cGVJbmZv
OjpvdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVzIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKiBydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6b2Jq
ZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKToKKyAgICAgICAgKEpTQzo6
SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKEpTQzo6ZGVmaW5lUHJvcGVydGll
cyk6CisgICAgICAgIChKU0M6OnNldEludGVncml0eUxldmVsKToKKyAgICAgICAgKEpTQzo6dGVz
dEludGVncml0eUxldmVsKToKKyAgICAgICAgKEpTQzo6b3duUHJvcGVydHlLZXlzKToKKyAgICAg
ICAgKiBydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmg6CisgICAgICAgICogcnVudGltZS9SZWZs
ZWN0T2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKToK
KyAgICAgICAgKiBydW50aW1lL1JlZ0V4cE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OlJlZ0V4
cE9iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6UmVn
RXhwT2JqZWN0OjpnZXRQcm9wZXJ0eU5hbWVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6UmVn
RXhwT2JqZWN0OjpnZXRHZW5lcmljUHJvcGVydHlOYW1lcyk6IERlbGV0ZWQuCisgICAgICAgICog
cnVudGltZS9SZWdFeHBPYmplY3QuaDoKKyAgICAgICAgKiBydW50aW1lL1N0cmluZ09iamVjdC5o
OgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlOjpnZXRQcm9wZXJ0eU5hbWVzRnJvbVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlN0cnVj
dHVyZTo6Y2FuQWNjZXNzUHJvcGVydGllc1F1aWNrbHlGb3JFbnVtZXJhdGlvbiBjb25zdCk6Cisg
ICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuaDoKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVy
ZUlubGluZXMuaDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpjYW5DYWNoZU93blByb3BlcnR5
TmFtZXMgY29uc3QpOgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpW
TTo6ZW1wdHlQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yU2xvdyk6CisgICAgICAgICogcnVudGltZS9Q
cm94eU9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OlByb3h5T2JqZWN0OjpwZXJmb3JtR2V0T3du
RW51bWVyYWJsZVByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpQcm94eU9iamVjdDo6Z2V0
T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6OlByb3h5T2JqZWN0OjpnZXRQcm9wZXJ0
eU5hbWVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6UHJveHlPYmplY3Q6OmdldE93bk5vbklu
ZGV4UHJvcGVydHlOYW1lcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlByb3h5T2JqZWN0Ojpn
ZXRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6UHJveHlP
YmplY3Q6OmdldEdlbmVyaWNQcm9wZXJ0eU5hbWVzKTogRGVsZXRlZC4KKwogMjAyMC0wOS0yNiAg
RGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmVmYWN0b3IgdGVzdCBy
dW5uZXIgY29kZSB0byBjdXQgZG93biBvbiBjb3B5L3Bhc3RlIGNvZGUgYW5kIGxvbmctd2luZGVk
IHJlcGV0aXRpdmUgaWRpb21zCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0
cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0
CShyZXZpc2lvbiAyNjc3NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTg0Myw3ICs4NDMsNiBAQCBzZXQoSmF2YVNjcmlwdENvcmVf
UFJJVkFURV9GUkFNRVdPUktfSEVBCiAgICAgcnVudGltZS9EdW1wQ29udGV4dC5oCiAgICAgcnVu
dGltZS9FQ01BTW9kZS5oCiAgICAgcnVudGltZS9FbnN1cmVTdGlsbEFsaXZlSGVyZS5oCi0gICAg
cnVudGltZS9FbnVtZXJhdGlvbk1vZGUuaAogICAgIHJ1bnRpbWUvRXJyb3IuaAogICAgIHJ1bnRp
bWUvRXJyb3JIYW5kbGluZ1Njb3BlLmgKICAgICBydW50aW1lL0Vycm9ySW5zdGFuY2UuaApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSVZhbHVlV3JhcHBlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElWYWx1ZVdyYXBwZXIuaAkocmV2
aXNpb24gMjY3NzY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSVZhbHVlV3Jh
cHBlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMyArMzMsNyBAQCBjbGFzcyBKU0FQSVZhbHVl
V3JhcHBlciBmaW5hbCA6IHB1YmxpYyBKCiAgICAgZnJpZW5kIEpTVmFsdWUganNBUElWYWx1ZVdy
YXBwZXIoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKIHB1YmxpYzoKICAgICB1c2luZyBCYXNl
ID0gSlNDZWxsOwotCi0gICAgLy8gT3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlOYW1lcyAo
d2hpY2ggdXNlZCB0byBiZSBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzKSB3YXMgaGVyZQotICAg
IC8vIHNpbmNlIGFuY2llbnQgdGltZXMgYmFjayB3aGVuIHdlIHBlc3NpbWlzdGljYWxseSBjaG9v
c2UgdG8gYXBwbHkgdGhpcyBmbGFnLiBJIHRoaW5rIHdlCi0gICAgLy8gY2FuIHJlbW92ZSBpdCwg
YnV0IHdlIHNob3VsZCBkbyBtb3JlIHRlc3RpbmcgYmVmb3JlIHdlIGRvIHNvLgotICAgIC8vIFJl
ZjogaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvNDk2OTQvd2Via2l0I2ZpbGU5Ci0g
ICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTI5
NTQKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6
U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVzIHwgU3Ry
dWN0dXJlSXNJbW1vcnRhbDsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVy
ZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+CiAgICAg
c3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAkocmV2aXNpb24gMjY3NzY3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEyNSw3ICsxMjUsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgUGFyZW50PgogY2xhc3Mg
SlNDYWxsYmFja09iamVjdCBmaW5hbCA6IHB1YmxpYyBQYXJlbnQgewogcHVibGljOgogICAgIHVz
aW5nIEJhc2UgPSBQYXJlbnQ7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1
cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgUHJvaGliaXRzUHJvcGVydHlDYWNoaW5n
IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5
U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEltcGxlbWVudHNIYXNJbnN0YW5j
ZSB8IE92ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNHZXRDYWxs
RGF0YTsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFz
ZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlk
ZXNHZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNHZXRDYWxsRGF0YSB8IElu
dGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8g
fCBJbXBsZW1lbnRzSGFzSW5zdGFuY2UgfCBQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7CiAgICAg
c3RhdGljX2Fzc2VydCghKFN0cnVjdHVyZUZsYWdzICYgSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0
YW5jZSksICJ1c2luZyBjdXN0b21IYXNJbnN0YW5jZSIpOwogCiAgICAgfkpTQ2FsbGJhY2tPYmpl
Y3QoKTsKQEAgLTIxMSw3ICsyMTEsNyBAQCBwcml2YXRlOgogCiAgICAgc3RhdGljIGJvb2wgY3Vz
dG9tSGFzSW5zdGFuY2UoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOwogCi0g
ICAgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNH
bG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAg
c3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9i
YWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYpOwogCiAgICAgc3RhdGljIENhbGxEYXRhIGdl
dENvbnN0cnVjdERhdGEoSlNDZWxsKik7CiAgICAgc3RhdGljIENhbGxEYXRhIGdldENhbGxEYXRh
KEpTQ2VsbCopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2Jq
ZWN0RnVuY3Rpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgJKHJldmlzaW9uIDI2Nzc2NykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oCSh3b3JraW5nIGNv
cHkpCkBAIC01NjQsNyArNTY0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDYWxsYmFja09iamVjdDxQ
YXJlbnQ+OgogfQogCiB0ZW1wbGF0ZSA8Y2xhc3MgUGFyZW50Pgotdm9pZCBKU0NhbGxiYWNrT2Jq
ZWN0PFBhcmVudD46OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVy
dHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIEpTQ2FsbGJhY2tPYmplY3Q8UGFy
ZW50Pjo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVz
KQogewogICAgIFZNJiB2bSA9IGdldFZNKGdsb2JhbE9iamVjdCk7CiAgICAgSlNDYWxsYmFja09i
amVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0NhbGxiYWNrT2JqZWN0Kj4ob2JqZWN0KTsKQEAg
LTU4MiwxMSArNTgyLDEwIEBAIHZvaWQgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpnZXRPd25O
b24KICAgICAgICAgICAgIGl0ZXJhdG9yIGVuZCA9IHN0YXRpY1ZhbHVlcy0+ZW5kKCk7CiAgICAg
ICAgICAgICBmb3IgKGl0ZXJhdG9yIGl0ID0gc3RhdGljVmFsdWVzLT5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKICAgICAgICAgICAgICAgICBTdHJpbmdJbXBsKiBuYW1lID0gaXQtPmtleS5n
ZXQoKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIW5hbWUtPmlzU3ltYm9sKCkpOwogICAgICAg
ICAgICAgICAgIFN0YXRpY1ZhbHVlRW50cnkqIGVudHJ5ID0gaXQtPnZhbHVlLmdldCgpOwotICAg
ICAgICAgICAgICAgIGlmIChlbnRyeS0+Z2V0UHJvcGVydHkgJiYgKCEoZW50cnktPmF0dHJpYnV0
ZXMgJiBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnRFbnVtKSB8fCBtb2RlLmluY2x1ZGVEb250RW51
bVByb3BlcnRpZXMoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFuYW1lLT5pc1N5
bWJvbCgpKTsKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgU3RyaW5nKG5hbWUpKSk7Ci0gICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGlmIChlbnRyeS0+Z2V0UHJvcGVydHkpCisgICAgICAgICAgICAgICAgICAg
IHByb3BlcnR5TmFtZXMuYWRkV2l0aERvbnRFbnVtKElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
IFN0cmluZyhuYW1lKSksIGVudHJ5LT5hdHRyaWJ1dGVzICYga0pTUHJvcGVydHlBdHRyaWJ1dGVE
b250RW51bSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCkBAIC01OTUsMTYg
KzU5NCwxNCBAQCB2b2lkIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6Z2V0T3duTm9uCiAgICAg
ICAgICAgICBpdGVyYXRvciBlbmQgPSBzdGF0aWNGdW5jdGlvbnMtPmVuZCgpOwogICAgICAgICAg
ICAgZm9yIChpdGVyYXRvciBpdCA9IHN0YXRpY0Z1bmN0aW9ucy0+YmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7CiAgICAgICAgICAgICAgICAgU3RyaW5nSW1wbCogbmFtZSA9IGl0LT5rZXkuZ2V0
KCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKCFuYW1lLT5pc1N5bWJvbCgpKTsKICAgICAgICAg
ICAgICAgICBTdGF0aWNGdW5jdGlvbkVudHJ5KiBlbnRyeSA9IGl0LT52YWx1ZS5nZXQoKTsKLSAg
ICAgICAgICAgICAgICBpZiAoIShlbnRyeS0+YXR0cmlidXRlcyAmIGtKU1Byb3BlcnR5QXR0cmli
dXRlRG9udEVudW0pIHx8IG1vZGUuaW5jbHVkZURvbnRFbnVtUHJvcGVydGllcygpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIEFTU0VSVCghbmFtZS0+aXNTeW1ib2woKSk7Ci0gICAgICAgICAgICAg
ICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIFN0cmlu
ZyhuYW1lKSkpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwcm9wZXJ0eU5h
bWVzLmFkZFdpdGhEb250RW51bShJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBTdHJpbmcobmFt
ZSkpLCBlbnRyeS0+YXR0cmlidXRlcyAmIGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udEVudW0pOwog
ICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIFBhcmVudDo6Z2V0T3du
Tm9uSW5kZXhQcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlO
YW1lcywgbW9kZSk7CisgICAgUGFyZW50OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXModGhp
c09iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzKTsKIH0KIAogdGVtcGxhdGUgPGNs
YXNzIFBhcmVudD4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNPYmplY3RSZWYu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNPYmplY3RSZWYu
Y3BwCShyZXZpc2lvbiAyNjc3NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTT2Jq
ZWN0UmVmLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODA3LDggKzgwNyw4IEBAIEpTUHJvcGVydHlO
YW1lQXJyYXlSZWYgSlNPYmplY3RDb3B5UHJvcGUKIAogICAgIEpTT2JqZWN0KiBqc09iamVjdCA9
IHRvSlMob2JqZWN0KTsKICAgICBKU1Byb3BlcnR5TmFtZUFycmF5UmVmIHByb3BlcnR5TmFtZXMg
PSBuZXcgT3BhcXVlSlNQcm9wZXJ0eU5hbWVBcnJheSgmdm0pOwotICAgIFByb3BlcnR5TmFtZUFy
cmF5IGFycmF5KHZtLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzLCBQcml2YXRlU3ltYm9sTW9k
ZTo6RXhjbHVkZSk7Ci0gICAganNPYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0UHJvcGVydHlO
YW1lcyhqc09iamVjdCwgZ2xvYmFsT2JqZWN0LCBhcnJheSwgRW51bWVyYXRpb25Nb2RlKCkpOwor
ICAgIFByb3BlcnR5TmFtZUFycmF5IGFycmF5KHZtLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdz
LCBEb250RW51bVByb3BlcnR5TW9kZTo6RXhjbHVkZSk7CisgICAganNPYmplY3QtPmdldFByb3Bl
cnR5TmFtZXMoZ2xvYmFsT2JqZWN0LCBhcnJheSk7CiAKICAgICBzaXplX3Qgc2l6ZSA9IGFycmF5
LnNpemUoKTsKICAgICBwcm9wZXJ0eU5hbWVzLT5hcnJheS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5
KHNpemUpOwpAQCAtODQ3LDcgKzg0Nyw3IEBAIHZvaWQgSlNQcm9wZXJ0eU5hbWVBY2N1bXVsYXRv
ckFkZE5hbWUoSlMKICAgICBQcm9wZXJ0eU5hbWVBcnJheSogcHJvcGVydHlOYW1lcyA9IHRvSlMo
YXJyYXkpOwogICAgIFZNJiB2bSA9IHByb3BlcnR5TmFtZXMtPnZtKCk7CiAgICAgSlNMb2NrSG9s
ZGVyIGxvY2tlcih2bSk7Ci0gICAgcHJvcGVydHlOYW1lcy0+YWRkKHByb3BlcnR5TmFtZS0+aWRl
bnRpZmllcigmdm0pKTsKKyAgICBwcm9wZXJ0eU5hbWVzLT5hZGQ8RW51bWVyYWJsZTo6VHJ1ZT4o
cHJvcGVydHlOYW1lLT5pZGVudGlmaWVyKCZ2bSkpOwogfQogCiBKU09iamVjdFJlZiBKU09iamVj
dEdldFByb3h5VGFyZ2V0KEpTT2JqZWN0UmVmIG9iamVjdFJlZikKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNjc3NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5
KQpAQCAtODYyLDcgKzg2Miw2IEBACiAJCTJBQUFBMzEyMThCRDQ5RDEwMDM5NENDOCAvKiBTdHJ1
Y3R1cmVJREJsb2IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDJBQUFBMzEwMThCRDQ5RDEwMDM5NENDOCAvKiBTdHJ1Y3R1cmVJREJsb2IuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyQUFCQ0RFNzE4RUYy
OTQyMDAwMDIwOTYgLyogR0NMb2dnaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAyQUFCQ0RFNjE4RUYyOTQyMDAwMDIwOTYgLyogR0NMb2dnaW5nLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkFBQ0U2
M0QxOENBNUEwMzAwRUQwMTkxIC8qIEdDQWN0aXZpdHlDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkFBQ0U2M0IxOENBNUEwMzAwRUQwMTkx
IC8qIEdDQWN0aXZpdHlDYWxsYmFjay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07Ci0JCTJBRDJFREZCMTk3OTlFMzgwMDRENjQ3OCAvKiBFbnVtZXJhdGlv
bk1vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJB
RDJFREZBMTk3OTlFMzgwMDRENjQ3OCAvKiBFbnVtZXJhdGlvbk1vZGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyQUQ4OTMyQjE3RTM4NjhGMDA2
NjgyNzYgLyogSGVhcEl0ZXJhdGlvblNjb3BlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyQUQ4OTMyOTE3RTM4NjhGMDA2NjgyNzYgLyogSGVhcEl0ZXJh
dGlvblNjb3BlLmggKi87IH07CiAJCTJBRjczODJEMThCQkJGOTIwMDhBNUEzNyAvKiBTdHJ1Y3R1
cmVJRFRhYmxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAyQUY3MzgyQjE4QkJCRjkyMDA4QTVBMzcgLyogU3RydWN0dXJlSURUYWJsZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTJEMzQyRjM2RjcyNDQw
OTY4MDRBREIyNCAvKiBTb3VyY2VPcmlnaW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDQyNUJBMTMzN0U0MzQ0RTFCMjY5QTY3MSAvKiBTb3VyY2VPcmln
aW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAt
MzU0MSw3ICszNTQwLDYgQEAKIAkJMkFBQkNERTYxOEVGMjk0MjAwMDAyMDk2IC8qIEdDTG9nZ2lu
Zy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHQ0xvZ2dpbmcuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkFBQ0U2M0ExOENBNUEwMzAwRUQwMTkxIC8qIEdDQWN0
aXZpdHlDYWxsYmFjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBH
Q0FjdGl2aXR5Q2FsbGJhY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyQUFD
RTYzQjE4Q0E1QTAzMDBFRDAxOTEgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDQWN0aXZpdHlDYWxsYmFjay5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQkyQUQyRURGQTE5Nzk5RTM4MDA0RDY0NzggLyogRW51bWVyYXRpb25N
b2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVudW1lcmF0aW9uTW9kZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyQUQ4OTMyOTE3RTM4NjhGMDA2NjgyNzYg
LyogSGVhcEl0ZXJhdGlvblNjb3BlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEhlYXBJdGVyYXRpb25TY29wZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyQURG
QTI2MjE4RUYzNTQwMDA0RjlGQ0MgLyogR0NMb2dnaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEdDTG9nZ2luZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTJBRjczODJBMThCQkJGOTIwMDhBNUEzNyAvKiBTdHJ1Y3R1cmVJRFRhYmxlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0cnVjdHVyZUlEVGFibGUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzIxNyw3ICs3MjE1LDYgQEAKIAkJCQkx
NDVGRjJDNzI0M0JCOTlBMDA1NjlFNzEgLyogRUNNQU1vZGUuaCAqLywKIAkJCQlGRTM0RUUyMjI0
Mzk4Qjg1MDBBQTJFN0MgLyogRW5zdXJlU3RpbGxBbGl2ZUhlcmUuY3BwICovLAogCQkJCUZFMzRF
RTIwMjQzOThBOUEwMEFBMkU3QyAvKiBFbnN1cmVTdGlsbEFsaXZlSGVyZS5oICovLAotCQkJCTJB
RDJFREZBMTk3OTlFMzgwMDRENjQ3OCAvKiBFbnVtZXJhdGlvbk1vZGUuaCAqLywKIAkJCQlCQzMz
N0JFQTBFMUIwMENCMDA3NjkxOEEgLyogRXJyb3IuY3BwICovLAogCQkJCUJDMzA0NjA2MEUxRjQ5
N0YwMDMyMzJDRiAvKiBFcnJvci5oICovLAogCQkJCUJDMDJFOTA0MEUxODM5REIwMDBGOTI5NyAv
KiBFcnJvckNvbnN0cnVjdG9yLmNwcCAqLywKQEAgLTk1ODQsNyArOTU4MSw2IEBACiAJCQkJMkE4
MzYzODYxOEQ3RDBFRTAwMDBFQkNDIC8qIEVkZW5HQ0FjdGl2aXR5Q2FsbGJhY2suaCBpbiBIZWFk
ZXJzICovLAogCQkJCUZFMzRFRTIxMjQzOThBQUUwMEFBMkU3QyAvKiBFbnN1cmVTdGlsbEFsaXZl
SGVyZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUwODZCQ0EyMTIzREVGQjAwM0YyOTI5IC8qIEVu
dHJ5RnJhbWUuaCBpbiBIZWFkZXJzICovLAotCQkJCTJBRDJFREZCMTk3OTlFMzgwMDRENjQ3OCAv
KiBFbnVtZXJhdGlvbk1vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMzA0NjA3MEUxRjQ5N0Yw
MDMyMzJDRiAvKiBFcnJvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwMkU5MEQwRTE4MzlEQjAw
MEY5Mjk3IC8qIEVycm9yQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFQjU4QzE1
MTg3QjhCMTYwMDk4RUYwQiAvKiBFcnJvckhhbmRsaW5nU2NvcGUuaCBpbiBIZWFkZXJzICovLApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL1NjcmlwdFZhbHVlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvU2NyaXB0VmFsdWUuY3Bw
CShyZXZpc2lvbiAyNjc3NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvU2Ny
aXB0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Niw4ICs3Niw4IEBAIHN0YXRpYyBSZWZQ
dHI8SlNPTjo6VmFsdWU+IGpzVG9JbnNwZWN0b3IKICAgICAgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOwogICAgICAgICBhdXRvIGluc3BlY3Rvck9iamVjdCA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7CiAgICAgICAgIGF1dG8mIG9iamVjdCA9ICp2YWx1ZS5nZXRPYmplY3QoKTsKLSAg
ICAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydHlOYW1lcyh2bSwgUHJvcGVydHlOYW1lTW9k
ZTo6U3RyaW5ncywgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpOwotICAgICAgICBvYmplY3Qu
bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKCZvYmplY3QsIGdsb2JhbE9iamVj
dCwgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlKCkpOworICAgICAgICBQcm9wZXJ0eU5h
bWVBcnJheSBwcm9wZXJ0eU5hbWVzKHZtLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzLCBEb250
RW51bVByb3BlcnR5TW9kZTo6RXhjbHVkZSk7CisgICAgICAgIG9iamVjdC5tZXRob2RUYWJsZSh2
bSktPmdldE93blByb3BlcnR5TmFtZXMoJm9iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5h
bWVzKTsKICAgICAgICAgZm9yIChhdXRvJiBuYW1lIDogcHJvcGVydHlOYW1lcykgewogICAgICAg
ICAgICAgYXV0byBpbnNwZWN0b3JWYWx1ZSA9IGpzVG9JbnNwZWN0b3JWYWx1ZShnbG9iYWxPYmpl
Y3QsIG9iamVjdC5nZXQoZ2xvYmFsT2JqZWN0LCBuYW1lKSwgbWF4RGVwdGgpOwogICAgICAgICAg
ICAgaWYgKCFpbnNwZWN0b3JWYWx1ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9PYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVJbmxpbmVz
LmgJKHJldmlzaW9uIDI2Nzc2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9P
YmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ2LDgg
KzE0Niw4IEBAIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgT2JqZWN0QWxsb2NhdGlvblAKICAgICAg
ICAgcmV0dXJuIDA7CiAKICAgICBzaXplX3QgY291bnQgPSAwOwotICAgIFByb3BlcnR5TmFtZUFy
cmF5IHByb3BlcnR5TmFtZUFycmF5KHZtLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzQW5kU3lt
Ym9scywgUHJpdmF0ZVN5bWJvbE1vZGU6OkluY2x1ZGUpOwotICAgIHByb3RvdHlwZS0+c3RydWN0
dXJlKHZtKS0+Z2V0UHJvcGVydHlOYW1lc0Zyb21TdHJ1Y3R1cmUodm0sIHByb3BlcnR5TmFtZUFy
cmF5LCBFbnVtZXJhdGlvbk1vZGUoKSk7CisgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydHlO
YW1lQXJyYXkodm0sIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3NBbmRTeW1ib2xzLCBEb250RW51
bVByb3BlcnR5TW9kZTo6SW5jbHVkZSwgUHJpdmF0ZVN5bWJvbE1vZGU6OkluY2x1ZGUpOworICAg
IHByb3RvdHlwZS0+c3RydWN0dXJlKHZtKS0+Z2V0UHJvcGVydHlOYW1lc0Zyb21TdHJ1Y3R1cmUo
dm0sIHByb3BlcnR5TmFtZUFycmF5KTsKICAgICBQcm9wZXJ0eU5hbWVBcnJheURhdGE6OlByb3Bl
cnR5TmFtZVZlY3RvciYgcHJvcGVydHlOYW1lVmVjdG9yID0gcHJvcGVydHlOYW1lQXJyYXkuZGF0
YSgpLT5wcm9wZXJ0eU5hbWVWZWN0b3IoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBy
b3BlcnR5TmFtZVZlY3Rvci5zaXplKCk7ICsraSkgewogICAgICAgICBKU1ZhbHVlIHZhbHVlID0g
cHJvdG90eXBlLT5nZXREaXJlY3Qodm0sIHByb3BlcnR5TmFtZVZlY3RvcltpXSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJTY29wZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuY3BwCShy
ZXZpc2lvbiAyNjc3NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdn
ZXJTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOCwxNCArMTM4LDE0IEBAIGJvb2wgRGVi
dWdnZXJTY29wZTo6ZGVsZXRlUHJvcGVydHkoSlNDZWwKICAgICByZXR1cm4gdGhpc09iamVjdC0+
bWV0aG9kVGFibGUoZ2xvYmFsT2JqZWN0LT52bSgpKS0+ZGVsZXRlUHJvcGVydHkodGhpc09iamVj
dCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCi12b2lkIERlYnVnZ2Vy
U2NvcGU6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1l
cmF0aW9uTW9kZSBtb2RlKQordm9pZCBEZWJ1Z2dlclNjb3BlOjpnZXRPd25Qcm9wZXJ0eU5hbWVz
KEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5
TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzKQogewogICAgIERlYnVnZ2VyU2NvcGUqIHNjb3BlID0g
anNDYXN0PERlYnVnZ2VyU2NvcGUqPihvYmplY3QpOwogICAgIEFTU0VSVChzY29wZS0+aXNWYWxp
ZCgpKTsKICAgICBpZiAoIXNjb3BlLT5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybjsKICAgICBK
U09iamVjdCogdGhpc09iamVjdCA9IEpTU2NvcGU6Om9iamVjdEF0U2NvcGUoc2NvcGUtPmpzU2Nv
cGUoKSk7Ci0gICAgdGhpc09iamVjdC0+bWV0aG9kVGFibGUoZ2xvYmFsT2JqZWN0LT52bSgpKS0+
Z2V0UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMs
IG1vZGUpOworICAgIHRoaXNPYmplY3QtPmdldFByb3BlcnR5TmFtZXMoZ2xvYmFsT2JqZWN0LCBw
cm9wZXJ0eU5hbWVzKTsKIH0KIAogYm9vbCBEZWJ1Z2dlclNjb3BlOjpkZWZpbmVPd25Qcm9wZXJ0
eShKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3Is
IGJvb2wgc2hvdWxkVGhyb3cpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIv
RGVidWdnZXJTY29wZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1
Z2dlci9EZWJ1Z2dlclNjb3BlLmgJKHJldmlzaW9uIDI2Nzc2NykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcg
KzM2LDcgQEAgY2xhc3MgSlNTY29wZTsKIGNsYXNzIERlYnVnZ2VyU2NvcGUgZmluYWwgOiBwdWJs
aWMgSlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmlu
YWxPYmplY3Q7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3Zl
cnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlOYW1lczsKKyAgICBzdGF0aWMgY29uc3RleHByIHVu
c2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNH
ZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzOwogCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+CiAgICAgc3Rh
dGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCkBAIC01Miw3ICs1Miw3IEBAIHB1
YmxpYzoKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBKU0ds
b2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJv
b2wgcHV0KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQ
dXRQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwq
LCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgRGVsZXRlUHJvcGVydHlTbG90Jik7Ci0g
ICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2Jq
ZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIHN0YXRpYyB2
b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3Bl
cnR5TmFtZUFycmF5Jik7CiAgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmpl
Y3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlw
dG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lv
biAyNjc3NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNDcsNyArMjQ3LDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvbk9iamVjdAogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZE9iamVjdCkudG9PYmplY3QoZ2xvYmFsT2JqZWN0KTsKICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgcmV0
dXJuIG93blByb3BlcnR5S2V5cyhnbG9iYWxPYmplY3QsIG9iamVjdCwgUHJvcGVydHlOYW1lTW9k
ZTo6U3RyaW5ncywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6RXhjbHVkZSwgQ2FjaGVkUHJvcGVy
dHlOYW1lc0tpbmQ6OktleXMpOworICAgIHJldHVybiBvd25Qcm9wZXJ0eUtleXMoZ2xvYmFsT2Jq
ZWN0LCBvYmplY3QsIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MsIERvbnRFbnVtUHJvcGVydHlN
b2RlOjpFeGNsdWRlLCBDYWNoZWRQcm9wZXJ0eU5hbWVzS2luZDo6S2V5cyk7CiB9CiAKIEpTQ19E
RUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25PYmplY3RLZXlzT2JqZWN0LCBKU0FycmF5Kiwg
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBvYmplY3QpKQpAQCAtMjU1
LDcgKzI1NSw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25PYmplY3QKICAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUg
PSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwogICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKLSAgICByZXR1cm4gb3duUHJvcGVydHlL
ZXlzKGdsb2JhbE9iamVjdCwgb2JqZWN0LCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzLCBEb250
RW51bVByb3BlcnRpZXNNb2RlOjpFeGNsdWRlLCBDYWNoZWRQcm9wZXJ0eU5hbWVzS2luZDo6S2V5
cyk7CisgICAgcmV0dXJuIG93blByb3BlcnR5S2V5cyhnbG9iYWxPYmplY3QsIG9iamVjdCwgUHJv
cGVydHlOYW1lTW9kZTo6U3RyaW5ncywgRG9udEVudW1Qcm9wZXJ0eU1vZGU6OkV4Y2x1ZGUsIENh
Y2hlZFByb3BlcnR5TmFtZXNLaW5kOjpLZXlzKTsKIH0KIAogSlNDX0RFRklORV9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvbk9iamVjdEdldE93blByb3BlcnR5TmFtZXMsIEpTQXJyYXkqLCAoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9iamVjdCkpCkBA
IC0yNjgsNyArMjY4LDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbk9iamVj
dAogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9iamVjdCku
dG9PYmplY3QoZ2xvYmFsT2JqZWN0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBu
dWxscHRyKTsKICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIG93blByb3BlcnR5S2V5
cyhnbG9iYWxPYmplY3QsIG9iamVjdCwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncywgRG9udEVu
dW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSwgQ2FjaGVkUHJvcGVydHlOYW1lc0tpbmQ6OkdldE93
blByb3BlcnR5TmFtZXMpOworICAgIHJldHVybiBvd25Qcm9wZXJ0eUtleXMoZ2xvYmFsT2JqZWN0
LCBvYmplY3QsIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MsIERvbnRFbnVtUHJvcGVydHlNb2Rl
OjpJbmNsdWRlLCBDYWNoZWRQcm9wZXJ0eU5hbWVzS2luZDo6R2V0T3duUHJvcGVydHlOYW1lcyk7
CiB9CiAKIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25PYmplY3RHZXRPd25Qcm9w
ZXJ0eU5hbWVzT2JqZWN0LCBKU0FycmF5KiwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTT2JqZWN0KiBvYmplY3QpKQpAQCAtMjc2LDcgKzI3Niw3IEBAIEpTQ19ERUZJTkVfSklUX09Q
RVJBVElPTihvcGVyYXRpb25PYmplY3QKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwogICAg
IEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1l
KTsKLSAgICByZXR1cm4gb3duUHJvcGVydHlLZXlzKGdsb2JhbE9iamVjdCwgb2JqZWN0LCBQcm9w
ZXJ0eU5hbWVNb2RlOjpTdHJpbmdzLCBEb250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlLCBD
YWNoZWRQcm9wZXJ0eU5hbWVzS2luZDo6R2V0T3duUHJvcGVydHlOYW1lcyk7CisgICAgcmV0dXJu
IG93blByb3BlcnR5S2V5cyhnbG9iYWxPYmplY3QsIG9iamVjdCwgUHJvcGVydHlOYW1lTW9kZTo6
U3RyaW5ncywgRG9udEVudW1Qcm9wZXJ0eU1vZGU6OkluY2x1ZGUsIENhY2hlZFByb3BlcnR5TmFt
ZXNLaW5kOjpHZXRPd25Qcm9wZXJ0eU5hbWVzKTsKIH0KIAogSlNDX0RFRklORV9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvbk9iamVjdENyZWF0ZSwgSlNDZWxsKiwgKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm90b3R5cGUpKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHJldmlzaW9uIDI2Nzc2NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCSh3b3JraW5nIGNvcHkp
CkBAIC04MCwyMSArODAsMTMgQEAgc3RydWN0IE1ldGhvZFRhYmxlIHsKICAgICB1c2luZyBEZWZh
dWx0VmFsdWVGdW5jdGlvblB0ciA9IEpTVmFsdWUgKCopKGNvbnN0IEpTT2JqZWN0KiwgSlNHbG9i
YWxPYmplY3QqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKTsKICAgICBEZWZhdWx0VmFsdWVGdW5j
dGlvblB0ciBNRVRIT0RfVEFCTEVfRU5UUlkoZGVmYXVsdFZhbHVlKTsKIAotICAgIHVzaW5nIEdl
dE93blByb3BlcnR5TmFtZXNGdW5jdGlvblB0ciA9IHZvaWQgKCopKEpTT2JqZWN0KiwgSlNHbG9i
YWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgdXNp
bmcgR2V0T3duUHJvcGVydHlOYW1lc0Z1bmN0aW9uUHRyID0gdm9pZCAoKikoSlNPYmplY3QqLCBK
U0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5Jik7CiAgICAgR2V0T3duUHJvcGVydHlO
YW1lc0Z1bmN0aW9uUHRyIE1FVEhPRF9UQUJMRV9FTlRSWShnZXRPd25Qcm9wZXJ0eU5hbWVzKTsK
LQotICAgIHVzaW5nIEdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lc0Z1bmN0aW9uUHRyID0gdm9p
ZCAoKikoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51
bWVyYXRpb25Nb2RlKTsKLSAgICBHZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXNGdW5jdGlvblB0
ciBNRVRIT0RfVEFCTEVfRU5UUlkoZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKTsKLQotICAg
IHVzaW5nIEdldFByb3BlcnR5TmFtZXNGdW5jdGlvblB0ciA9IHZvaWQgKCopKEpTT2JqZWN0Kiwg
SlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7Ci0g
ICAgR2V0UHJvcGVydHlOYW1lc0Z1bmN0aW9uUHRyIE1FVEhPRF9UQUJMRV9FTlRSWShnZXRQcm9w
ZXJ0eU5hbWVzKTsKKyAgICBHZXRPd25Qcm9wZXJ0eU5hbWVzRnVuY3Rpb25QdHIgTUVUSE9EX1RB
QkxFX0VOVFJZKGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk7CiAKICAgICB1c2luZyBHZXRF
bnVtZXJhYmxlTGVuZ3RoRnVuY3Rpb25QdHIgPSB1aW50MzJfdCAoKikoSlNHbG9iYWxPYmplY3Qq
LCBKU09iamVjdCopOwogICAgIEdldEVudW1lcmFibGVMZW5ndGhGdW5jdGlvblB0ciBNRVRIT0Rf
VEFCTEVfRU5UUlkoZ2V0RW51bWVyYWJsZUxlbmd0aCk7CiAKLSAgICBHZXRQcm9wZXJ0eU5hbWVz
RnVuY3Rpb25QdHIgTUVUSE9EX1RBQkxFX0VOVFJZKGdldFN0cnVjdHVyZVByb3BlcnR5TmFtZXMp
OwotICAgIEdldFByb3BlcnR5TmFtZXNGdW5jdGlvblB0ciBNRVRIT0RfVEFCTEVfRU5UUlkoZ2V0
R2VuZXJpY1Byb3BlcnR5TmFtZXMpOwotCiAgICAgdXNpbmcgQ2xhc3NOYW1lRnVuY3Rpb25QdHIg
PSBTdHJpbmcgKCopKGNvbnN0IEpTT2JqZWN0KiwgVk0mKTsKICAgICBDbGFzc05hbWVGdW5jdGlv
blB0ciBNRVRIT0RfVEFCTEVfRU5UUlkoY2xhc3NOYW1lKTsKIApAQCAtMTY5LDEwICsxNjEsNyBA
QCBzdHJ1Y3QgTWV0aG9kVGFibGUgewogICAgICAgICAmQ2xhc3NOYW1lOjpkZWZhdWx0VmFsdWUs
IFwKICAgICAgICAgJkNsYXNzTmFtZTo6Z2V0T3duUHJvcGVydHlOYW1lcywgXAogICAgICAgICAm
Q2xhc3NOYW1lOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMsIFwKLSAgICAgICAgJkNsYXNz
TmFtZTo6Z2V0UHJvcGVydHlOYW1lcywgXAogICAgICAgICAmQ2xhc3NOYW1lOjpnZXRFbnVtZXJh
YmxlTGVuZ3RoLCBcCi0gICAgICAgICZDbGFzc05hbWU6OmdldFN0cnVjdHVyZVByb3BlcnR5TmFt
ZXMsIFwKLSAgICAgICAgJkNsYXNzTmFtZTo6Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMsIFwKICAg
ICAgICAgJkNsYXNzTmFtZTo6Y2xhc3NOYW1lLCBcCiAgICAgICAgICZDbGFzc05hbWU6OnRvU3Ry
aW5nTmFtZSwgXAogICAgICAgICAmQ2xhc3NOYW1lOjpjdXN0b21IYXNJbnN0YW5jZSwgXApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVudHMu
Y3BwCShyZXZpc2lvbiAyNjc3NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
bG9uZWRBcmd1bWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTcsMTEgKzE5NywxMSBAQCBi
b29sIENsb25lZEFyZ3VtZW50czo6Z2V0T3duUHJvcGVydHlTbG90CiAgICAgcmV0dXJuIEJhc2U6
OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIGlkZW50LCBzbG90
KTsKIH0KIAotdm9pZCBDbG9uZWRBcmd1bWVudHM6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJy
YXkmIGFycmF5LCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgQ2xvbmVkQXJndW1lbnRzOjpn
ZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBhcnJheSkKIHsKICAgICBDbG9uZWRBcmd1bWVu
dHMqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8Q2xvbmVkQXJndW1lbnRzKj4ob2JqZWN0KTsKICAgICB0
aGlzT2JqZWN0LT5tYXRlcmlhbGl6ZVNwZWNpYWxzSWZOZWNlc3NhcnkoZ2xvYmFsT2JqZWN0KTsK
LSAgICBCYXNlOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwg
YXJyYXksIG1vZGUpOworICAgIEJhc2U6OmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVjdCwg
Z2xvYmFsT2JqZWN0LCBhcnJheSk7CiB9CiAKIGJvb2wgQ2xvbmVkQXJndW1lbnRzOjpwdXQoSlND
ZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgaWRl
bnQsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5oCShyZXZpc2lvbiAy
Njc3NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVudHMu
aAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNz
IENsb25lZEFyZ3VtZW50cyBmaW5hbCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKIHB1Ymxp
YzoKICAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVy
cmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5h
bWVzOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNl
OjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRl
c0dldE93blByb3BlcnR5TmFtZXM7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwg
U3Vic3BhY2VBY2Nlc3MgbW9kZT4KICAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KFZNJiB2bSkKQEAgLTcwLDcgKzcwLDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgU3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBl
LCBJbmRleGluZ1R5cGUpOwogCiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpT
T2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwot
ICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9i
amVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICBzdGF0aWMg
dm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9w
ZXJ0eU5hbWVBcnJheSYpOwogICAgIHN0YXRpYyBib29sIHB1dChKU0NlbGwqLCBKU0dsb2JhbE9i
amVjdCosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CiAgICAgc3Rh
dGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0
eU5hbWUsIERlbGV0ZVByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGRlZmluZU93blBy
b3BlcnR5KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIGNvbnN0IFBy
b3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRW51bWVyYXRpb25Nb2RlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRW51bWVyYXRpb25Nb2RlLmgJKHJldmlzaW9uIDI2Nzc2
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0VudW1lcmF0aW9uTW9kZS5oCShu
b25leGlzdGVudCkKQEAgLTEsODIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQot
Ci1uYW1lc3BhY2UgSlNDIHsKLQotZW51bSBjbGFzcyBQcm9wZXJ0eU5hbWVNb2RlIHsKLSAgICBT
eW1ib2xzID0gMSA8PCAwLAotICAgIFN0cmluZ3MgPSAxIDw8IDEsCi0gICAgU3RyaW5nc0FuZFN5
bWJvbHMgPSBTeW1ib2xzIHwgU3RyaW5ncywKLX07Ci0KLWVudW0gY2xhc3MgUHJpdmF0ZVN5bWJv
bE1vZGUgewotICAgIEluY2x1ZGUsCi0gICAgRXhjbHVkZQotfTsKLQotZW51bSBjbGFzcyBEb250
RW51bVByb3BlcnRpZXNNb2RlIHsKLSAgICBJbmNsdWRlLAotICAgIEV4Y2x1ZGUKLX07Ci0KLWVu
dW0gY2xhc3MgSlNPYmplY3RQcm9wZXJ0aWVzTW9kZSB7Ci0gICAgSW5jbHVkZSwKLSAgICBFeGNs
dWRlCi19OwotCi1jbGFzcyBFbnVtZXJhdGlvbk1vZGUgewotcHVibGljOgotICAgIEVudW1lcmF0
aW9uTW9kZShEb250RW51bVByb3BlcnRpZXNNb2RlIGRvbnRFbnVtUHJvcGVydGllc01vZGUgPSBE
b250RW51bVByb3BlcnRpZXNNb2RlOjpFeGNsdWRlLCBKU09iamVjdFByb3BlcnRpZXNNb2RlIGpz
T2JqZWN0UHJvcGVydGllc01vZGUgPSBKU09iamVjdFByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKQot
ICAgICAgICA6IG1fZG9udEVudW1Qcm9wZXJ0aWVzTW9kZShkb250RW51bVByb3BlcnRpZXNNb2Rl
KQotICAgICAgICAsIG1fanNPYmplY3RQcm9wZXJ0aWVzTW9kZShqc09iamVjdFByb3BlcnRpZXNN
b2RlKQotICAgIHsKLSAgICB9Ci0KLSAgICBFbnVtZXJhdGlvbk1vZGUoY29uc3QgRW51bWVyYXRp
b25Nb2RlJiBtb2RlLCBKU09iamVjdFByb3BlcnRpZXNNb2RlIGpzT2JqZWN0UHJvcGVydGllc01v
ZGUpCi0gICAgICAgIDogbV9kb250RW51bVByb3BlcnRpZXNNb2RlKG1vZGUubV9kb250RW51bVBy
b3BlcnRpZXNNb2RlKQotICAgICAgICAsIG1fanNPYmplY3RQcm9wZXJ0aWVzTW9kZShqc09iamVj
dFByb3BlcnRpZXNNb2RlKQotICAgIHsKLSAgICB9Ci0KLSAgICAvLyBBZGQgb3RoZXIgY29uc3Ry
dWN0b3JzIGFzIG5lZWRlZCBmb3IgY29udmVuaWVuY2UKLQotICAgIGJvb2wgaW5jbHVkZURvbnRF
bnVtUHJvcGVydGllcygpCi0gICAgewotICAgICAgICByZXR1cm4gbV9kb250RW51bVByb3BlcnRp
ZXNNb2RlID09IERvbnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGU7Ci0gICAgfQotCi0gICAg
Ym9vbCBpbmNsdWRlSlNPYmplY3RQcm9wZXJ0aWVzKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBt
X2pzT2JqZWN0UHJvcGVydGllc01vZGUgPT0gSlNPYmplY3RQcm9wZXJ0aWVzTW9kZTo6SW5jbHVk
ZTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSBtX2RvbnRF
bnVtUHJvcGVydGllc01vZGU7Ci0gICAgSlNPYmplY3RQcm9wZXJ0aWVzTW9kZSBtX2pzT2JqZWN0
UHJvcGVydGllc01vZGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwCShyZXZpc2lvbiAy
Njc3NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjYwLDIwICsyNjAsMTIgQEAgYm9vbCBFcnJvckluc3RhbmNl
OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSgogICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNs
b3QodGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCi12
b2lkIEVycm9ySW5zdGFuY2U6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCog
b2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYg
cHJvcGVydHlOYW1lQXJyYXksIEVudW1lcmF0aW9uTW9kZSBlbnVtZXJhdGlvbk1vZGUpCit2b2lk
IEVycm9ySW5zdGFuY2U6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2Jq
ZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJv
cGVydHlOYW1lQXJyYXkpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAg
IEVycm9ySW5zdGFuY2UqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8RXJyb3JJbnN0YW5jZSo+KG9iamVj
dCk7CiAgICAgdGhpc09iamVjdC0+bWF0ZXJpYWxpemVFcnJvckluZm9JZk5lZWRlZCh2bSk7Ci0g
ICAgQmFzZTo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGdsb2JhbE9i
amVjdCwgcHJvcGVydHlOYW1lQXJyYXksIGVudW1lcmF0aW9uTW9kZSk7Ci19Ci0KLXZvaWQgRXJy
b3JJbnN0YW5jZTo6Z2V0U3RydWN0dXJlUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlO
YW1lQXJyYXksIEVudW1lcmF0aW9uTW9kZSBlbnVtZXJhdGlvbk1vZGUpCi17Ci0gICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIEVycm9ySW5zdGFuY2UqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8RXJyb3JJbnN0YW5jZSo+KG9iamVjdCk7Ci0gICAgdGhpc09iamVjdC0+bWF0ZXJpYWxp
emVFcnJvckluZm9JZk5lZWRlZCh2bSk7Ci0gICAgQmFzZTo6Z2V0U3RydWN0dXJlUHJvcGVydHlO
YW1lcyh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZUFycmF5LCBlbnVtZXJh
dGlvbk1vZGUpOworICAgIEJhc2U6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2Jq
ZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZUFycmF5KTsKIH0KIAogYm9vbCBFcnJvcklu
c3RhbmNlOjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0
eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgc2hvdWxkVGhyb3cpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5oCShyZXZpc2lvbiAyNjc3
NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBFcnJv
ckluc3RhbmNlIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewogcHVibGljOgogICAgIHVzaW5n
IEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0OwotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg
U3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blBy
b3BlcnR5U2xvdCB8IE92ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5TmFtZXM7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZs
YWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duTm9uSW5k
ZXhQcm9wZXJ0eU5hbWVzOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0
aW9uID0gdHJ1ZTsKIAogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKiBjZWxsKQpAQCAt
OTMsOCArOTMsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpT
R2xvYmFsT2JqZWN0KiwgY29uc3QgU3RyaW5nJiwgU291cmNlQXBwZW5kZXIgPSBudWxscHRyLCBS
dW50aW1lVHlwZSA9IFR5cGVOb3RoaW5nLCBib29sIHVzZUN1cnJlbnRGcmFtZSA9IHRydWUpOwog
CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgSlNHbG9iYWxP
YmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyB2b2lkIGdl
dE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJv
cGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwotICAgIHN0YXRpYyB2b2lkIGdldFN0
cnVjdHVyZVByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5
TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Ob25J
bmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFt
ZUFycmF5Jik7CiAgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBK
U0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiwg
Ym9vbCBzaG91bGRUaHJvdyk7CiAgICAgc3RhdGljIGJvb2wgcHV0KEpTQ2VsbCosIEpTR2xvYmFs
T2JqZWN0KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICBz
dGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIFByb3Bl
cnR5TmFtZSwgRGVsZXRlUHJvcGVydHlTbG90Jik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5oCShyZXZpc2lvbiAyNjc3NjcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KIGNsYXNz
IEdlbmVyaWNBcmd1bWVudHMgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CiAg
ICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1
bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVz
R2V0T3duUHJvcGVydHlTbG90IHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhF
dmVuV2hlbkxlbmd0aElzTm90WmVybyB8IE92ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5TmFt
ZXM7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6
OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVz
R2V0T3duUHJvcGVydHlOYW1lcyB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4
RXZlbldoZW5MZW5ndGhJc05vdFplcm87CiAKIHByb3RlY3RlZDoKICAgICBHZW5lcmljQXJndW1l
bnRzKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkBAIC00Nyw3ICs0Nyw3IEBAIHByb3Rl
Y3RlZDoKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgSlNHbG9i
YWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29s
IGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIHVu
c2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGljIHZvaWQgZ2V0
T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1l
QXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5
TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5Jik7CiAg
ICAgc3RhdGljIGJvb2wgcHV0KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1l
LCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBwdXRCeUluZGV4
KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVl
LCBib29sIHNob3VsZFRocm93KTsKICAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0Nl
bGwqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgRGVsZXRlUHJvcGVydHlTbG90Jik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5s
aW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVy
aWNBcmd1bWVudHNJbmxpbmVzLmgJKHJldmlzaW9uIDI2Nzc2NykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTkwLDcgKzkwLDcgQEAgYm9vbCBHZW5lcmljQXJndW1lbnRzPFR5cGU+OjpnZXRPd25Qcm9w
ZQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgotdm9pZCBHZW5lcmljQXJndW1lbnRzPFR5
cGU+OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBhcnJheSwgRW51bWVyYXRpb25Nb2Rl
IG1vZGUpCit2b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OmdldE93blByb3BlcnR5TmFtZXMo
SlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlO
YW1lQXJyYXkmIGFycmF5KQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAg
ICBUeXBlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFR5cGUqPihvYmplY3QpOwpAQCAtOTksMTcgKzk5
LDE3IEBAIHZvaWQgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6Z2V0T3duUHJvcGUKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRoaXNPYmplY3QtPmludGVybmFsTGVuZ3RoKCk7ICsr
aSkgewogICAgICAgICAgICAgaWYgKCF0aGlzT2JqZWN0LT5pc01hcHBlZEFyZ3VtZW50KGkpKQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgYXJyYXkuYWRkKElkZW50aWZp
ZXI6OmZyb20odm0sIGkpKTsKKyAgICAgICAgICAgIGFycmF5LmFkZDxFbnVtZXJhYmxlOjpUcnVl
PihpKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChtb2RlLmluY2x1ZGVEb250RW51bVBy
b3BlcnRpZXMoKSAmJiAhdGhpc09iamVjdC0+b3ZlcnJvZGVUaGluZ3MoKSkgewotICAgICAgICBh
cnJheS5hZGQodm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoKTsKLSAgICAgICAgYXJyYXkuYWRkKHZt
LnByb3BlcnR5TmFtZXMtPmNhbGxlZSk7Ci0gICAgICAgIGlmIChhcnJheS5pbmNsdWRlU3ltYm9s
UHJvcGVydGllcygpKQotICAgICAgICAgICAgYXJyYXkuYWRkKHZtLnByb3BlcnR5TmFtZXMtPml0
ZXJhdG9yU3ltYm9sKTsKKyAgICBCYXNlOjpnZXRPd25JbmRleFByb3BlcnR5TmFtZXModGhpc09i
amVjdCwgZ2xvYmFsT2JqZWN0LCBhcnJheSk7CisgICAgaWYgKCF0aGlzT2JqZWN0LT5vdmVycm9k
ZVRoaW5ncygpKSB7CisgICAgICAgIGFycmF5LmFkZDxFbnVtZXJhYmxlOjpGYWxzZT4odm0ucHJv
cGVydHlOYW1lcy0+bGVuZ3RoKTsKKyAgICAgICAgYXJyYXkuYWRkPEVudW1lcmFibGU6OkZhbHNl
Pih2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUpOworICAgICAgICBhcnJheS5hZGQ8RW51bWVyYWJs
ZTo6RmFsc2U+KHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yU3ltYm9sKTsKICAgICB9Ci0gICAg
QmFzZTo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIGFycmF5
LCBtb2RlKTsKKyAgICBCYXNlOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXModGhpc09iamVj
dCwgZ2xvYmFsT2JqZWN0LCBhcnJheSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkocmV2aXNpb24g
MjY3NzY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI4MywxNSArMjgzLDEzIEBAIHN0YXRpYyBpbnQgY29tcGFyZUtleXNG
b3JRU29ydChjb25zdCB2b2kKICAgICByZXR1cm4gKGRhID4gZGIpIC0gKGRhIDwgZGIpOwogfQog
Ci12b2lkIEpTQXJyYXk6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2Jq
ZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJv
cGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIEpTQXJyYXk6OmdldE93bk5v
bkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcykKIHsKICAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgSlNBcnJheSogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU0FycmF5Kj4ob2JqZWN0KTsKIAotICAgIGlmIChtb2RlLmluY2x1ZGVEb250RW51bVByb3Bl
cnRpZXMoKSkKLSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQodm0ucHJvcGVydHlOYW1lcy0+bGVu
Z3RoKTsKLQotICAgIEpTT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXModGhpc09i
amVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKKyAgICBwcm9wZXJ0eU5h
bWVzLmFkZDxFbnVtZXJhYmxlOjpGYWxzZT4odm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoKTsKKyAg
ICBKU09iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGdsb2Jh
bE9iamVjdCwgcHJvcGVydHlOYW1lcyk7CiB9CiAKIC8vIFRoaXMgbWV0aG9kIG1ha2VzIHJvb20g
aW4gdGhlIHZlY3RvciwgYnV0IGxlYXZlcyB0aGUgbmV3IHNwYWNlIGZvciBjb3VudCBzbG90cyB1
bmNsZWFyZWQuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCShy
ZXZpc2lvbiAyNjc3NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgY2xhc3MgSlNBcnJheSA6IHB1Ymxp
YyBKU05vbkZpbmFsT2JqZWN0IAogCiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU05vbkZpbmFsT2Jq
ZWN0IEJhc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3Zl
cnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlOYW1lczsKKyAgICBzdGF0aWMgY29uc3RleHByIHVu
c2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNH
ZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXM7
CiAKICAgICBzdGF0aWMgc2l6ZV90IGFsbG9jYXRpb25TaXplKENoZWNrZWQ8c2l6ZV90PiBpbmxp
bmVDYXBhY2l0eSkKICAgICB7CkBAIC0xODksNyArMTg5LDcgQEAgcHJvdGVjdGVkOgogICAgIHN0
YXRpYyBib29sIHB1dChKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgSlNW
YWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CiAKICAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0
eShKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgRGVsZXRlUHJvcGVydHlT
bG90Jik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQ
cm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJh
eSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQg
Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQ
cm9wZXJ0eU5hbWVBcnJheSYpOwogCiBwcml2YXRlOgogICAgIGJvb2wgaXNMZW5ndGhXcml0YWJs
ZSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAJKHJldmlz
aW9uIDI2Nzc2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIxNywxMiArMjE3LDEyIEBAIHZvaWQgSlNDZWxsOjpkb1B1dFBy
b3BlcnR5U2VjdXJpdHlDaGVjaygKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
fQogCi12b2lkIEpTQ2VsbDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFs
T2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpCit2b2lkIEpTQ2Vs
bDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVy
dHlOYW1lQXJyYXkmKQogewogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAK
LXZvaWQgSlNDZWxsOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0ds
b2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKQordm9pZCBK
U0NlbGw6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2Jq
ZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmKQogewogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiB9CkBAIC0yNDQsMTEgKzI0NCw2IEBAIGNvbnN0IGNoYXIqIEpTQ2VsbDo6Y2xhc3NO
YW1lKFZNJiB2bSkgY28KICAgICByZXR1cm4gY2xhc3NJbmZvKHZtKS0+Y2xhc3NOYW1lOwogfQog
Ci12b2lkIEpTQ2VsbDo6Z2V0UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0
KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpCi17Ci0gICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQogYm9vbCBKU0NlbGw6OmN1c3RvbUhhc0luc3RhbmNl
KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKQogewogICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CkBAIC0yNjcsMTYgKzI2Miw2IEBAIHVpbnQzMl90IEpTQ2VsbDo6
Z2V0RW51bWVyYWJsZUxlbmd0aChKU0cKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBKU0NlbGw6
OmdldFN0cnVjdHVyZVByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFBy
b3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKQotewotICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci19Ci0KLXZvaWQgSlNDZWxsOjpnZXRHZW5lcmljUHJvcGVydHlOYW1l
cyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJh
dGlvbk1vZGUpCi17Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQogYm9v
bCBKU0NlbGw6OnByZXZlbnRFeHRlbnNpb25zKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqKQog
ewogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0NlbGwuaAkocmV2aXNpb24gMjY3NzY3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDYg
QEAKICNpbmNsdWRlICJDYWxsRGF0YS5oIgogI2luY2x1ZGUgIkNlbGxTdGF0ZS5oIgogI2luY2x1
ZGUgIkNvbnN0cnVjdERhdGEuaCIKLSNpbmNsdWRlICJFbnVtZXJhdGlvbk1vZGUuaCIKICNpbmNs
dWRlICJIZWFwLmgiCiAjaW5jbHVkZSAiSGVhcENlbGwuaCIKICNpbmNsdWRlICJJbmRleGluZ1R5
cGUuaCIKQEAgLTI0NSwxMyArMjQ0LDEwIEBAIHByb3RlY3RlZDoKIAogICAgIC8vIER1bW15IGlt
cGxlbWVudGF0aW9ucyBvZiBvdmVycmlkZS1hYmxlIHN0YXRpYyBmdW5jdGlvbnMgZm9yIGNsYXNz
ZXMgdG8gcHV0IGluIHRoZWlyIE1ldGhvZFRhYmxlCiAgICAgc3RhdGljIEpTVmFsdWUgZGVmYXVs
dFZhbHVlKGNvbnN0IEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcmVmZXJyZWRQcmltaXRp
dmVUeXBlKTsKLSAgICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIGdldE93blBy
b3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5
JiwgRW51bWVyYXRpb25Nb2RlKTsKLSAgICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2
b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0
KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwotICAgIHN0YXRpYyBOT19S
RVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xv
YmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogCiAgICAg
c3RhdGljIHVpbnQzMl90IGdldEVudW1lcmFibGVMZW5ndGgoSlNHbG9iYWxPYmplY3QqLCBKU09i
amVjdCopOwotICAgIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgZ2V0U3RydWN0
dXJlUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1l
QXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwotICAgIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0NS
QVNIIHZvaWQgZ2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVj
dCosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICBzdGF0aWMgTk9f
UkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBK
U0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5Jik7CisgICAgc3RhdGljIE5PX1JFVFVS
Tl9EVUVfVE9fQ1JBU0ggdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3Qq
LCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5Jik7CiAgICAgc3RhdGljIE5PX1JF
VFVSTl9EVUVfVE9fQ1JBU0ggYm9vbCBwcmV2ZW50RXh0ZW5zaW9ucyhKU09iamVjdCosIEpTR2xv
YmFsT2JqZWN0Kik7CiAgICAgc3RhdGljIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggYm9vbCBpc0V4
dGVuc2libGUoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCopOwogICAgIHN0YXRpYyBOT19SRVRV
Uk5fRFVFX1RPX0NSQVNIIGJvb2wgc2V0UHJvdG90eXBlKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmpl
Y3QqLCBKU1ZhbHVlLCBib29sKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyNjc3NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDk0LDM3ICs0
OTQsMzQgQEAgYm9vbCBKU0Z1bmN0aW9uOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYgogICAgIFJF
TEVBU0VfQU5EX1JFVFVSTihzY29wZSwgQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmpl
Y3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KSk7CiB9CiAKLXZvaWQgSlNGdW5j
dGlvbjo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVz
LCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNGdW5jdGlvbjo6Z2V0T3duTm9uSW5kZXhQ
cm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzKQogewogICAgIEpTRnVuY3Rpb24q
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KG9iamVjdCk7CiAgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKIAotICAgIGlmIChtb2RlLmluY2x1ZGVEb250RW51bVByb3BlcnRpZXMoKSkgeworICAg
IGlmIChwcm9wZXJ0eU5hbWVzLmRvbnRFbnVtUHJvcGVydHlNb2RlKCkgIT0gRG9udEVudW1Qcm9w
ZXJ0eU1vZGU6OkV4Y2x1ZGUpIHsKICAgICAgICAgaWYgKCF0aGlzT2JqZWN0LT5pc0hvc3RPckJ1
aWx0aW5GdW5jdGlvbigpKSB7Ci0gICAgICAgICAgICAvLyBNYWtlIHN1cmUgcHJvdG90eXBlIGhh
cyBiZWVuIHJlaWZpZWQuCi0gICAgICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzT2JqZWN0
LCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5LCAmdm0pOwotICAg
ICAgICAgICAgdGhpc09iamVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eVNsb3Qo
dGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0LCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIHNs
b3QpOwotICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKLQog
ICAgICAgICAgICAgaWYgKHRoaXNPYmplY3QtPmpzRXhlY3V0YWJsZSgpLT5oYXNDYWxsZXJBbmRB
cmd1bWVudHNQcm9wZXJ0aWVzKCkpIHsKLSAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFk
ZCh2bS5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMpOwotICAgICAgICAgICAgICAgIHByb3BlcnR5
TmFtZXMuYWRkKHZtLnByb3BlcnR5TmFtZXMtPmNhbGxlcik7CisgICAgICAgICAgICAgICAgcHJv
cGVydHlOYW1lcy5hZGQ8RW51bWVyYWJsZTo6RmFsc2U+KHZtLnByb3BlcnR5TmFtZXMtPmFyZ3Vt
ZW50cyk7CisgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQ8RW51bWVyYWJsZTo6RmFs
c2U+KHZtLnByb3BlcnR5TmFtZXMtPmNhbGxlcik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBpZiAoIXRoaXNPYmplY3QtPmhhc1JlaWZpZWRMZW5ndGgoKSkKLSAgICAgICAgICAgICAgICBw
cm9wZXJ0eU5hbWVzLmFkZCh2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpOworICAgICAgICAgICAg
ICAgIHByb3BlcnR5TmFtZXMuYWRkPEVudW1lcmFibGU6OkZhbHNlPih2bS5wcm9wZXJ0eU5hbWVz
LT5sZW5ndGgpOwogICAgICAgICAgICAgaWYgKCF0aGlzT2JqZWN0LT5oYXNSZWlmaWVkTmFtZSgp
KQotICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKHZtLnByb3BlcnR5TmFtZXMtPm5h
bWUpOworICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkPEVudW1lcmFibGU6OkZhbHNl
Pih2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lKTsKKyAgICAgICAgICAgIGlmICh0aGlzT2JqZWN0LT5q
c0V4ZWN1dGFibGUoKS0+aGFzUHJvdG90eXBlUHJvcGVydHkoKSAmJiAhdGhpc09iamVjdC0+anNF
eGVjdXRhYmxlKCktPmlzQ2xhc3NDb25zdHJ1Y3RvckZ1bmN0aW9uKCkpCisgICAgICAgICAgICAg
ICAgcHJvcGVydHlOYW1lcy5hZGQ8RW51bWVyYWJsZTo6RmFsc2U+KHZtLnByb3BlcnR5TmFtZXMt
PnByb3RvdHlwZSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAodGhpc09iamVj
dC0+aXNCdWlsdGluRnVuY3Rpb24oKSB8fCB0aGlzT2JqZWN0LT5pbmhlcml0czxKU0JvdW5kRnVu
Y3Rpb24+KHZtKSkgewogICAgICAgICAgICAgICAgIGlmICghdGhpc09iamVjdC0+aGFzUmVpZmll
ZExlbmd0aCgpKQotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZCh2bS5wcm9w
ZXJ0eU5hbWVzLT5sZW5ndGgpOworICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFk
ZDxFbnVtZXJhYmxlOjpGYWxzZT4odm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoKTsKICAgICAgICAg
ICAgICAgICBpZiAoIXRoaXNPYmplY3QtPmhhc1JlaWZpZWROYW1lKCkpCi0gICAgICAgICAgICAg
ICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKHZtLnByb3BlcnR5TmFtZXMtPm5hbWUpOworICAgICAg
ICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZDxFbnVtZXJhYmxlOjpGYWxzZT4odm0ucHJv
cGVydHlOYW1lcy0+bmFtZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAg
UkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBCYXNlOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFt
ZXModGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKSk7CisKKyAg
ICBCYXNlOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZ2xvYmFsT2Jq
ZWN0LCBwcm9wZXJ0eU5hbWVzKTsKIH0KIAogYm9vbCBKU0Z1bmN0aW9uOjpwdXQoSlNDZWxsKiBj
ZWxsLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCShyZXZpc2lvbiAyNjc3NjcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTcwLDcgKzcwLDcgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICB0eXBlZGVmIEpT
Q2FsbGVlIEJhc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwg
T3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc0dldENhbGxEYXRh
OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpT
dHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dl
dE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc0dldENhbGxEYXRhOwogCiAgICAg
c3RhdGljIHNpemVfdCBhbGxvY2F0aW9uU2l6ZShDaGVja2VkPHNpemVfdD4gaW5saW5lQ2FwYWNp
dHkpCiAgICAgewpAQCAtMTczLDcgKzE3Myw3IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIGZpbmlz
aENyZWF0aW9uKFZNJik7CiAKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNP
YmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0g
ICAgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNH
bG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSA9IEVudW1l
cmF0aW9uTW9kZSgpKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFt
ZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5Jik7CiAgICAg
c3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCos
IFByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJv
dyk7CiAKICAgICBzdGF0aWMgYm9vbCBwdXQoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBQcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5o
CShyZXZpc2lvbiAyNjc3NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dl
bmVyaWNUeXBlZEFycmF5Vmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC05OCw3ICs5OCw3IEBAIHB1
YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNBcnJheUJ1ZmZlclZpZXc7CiAgICAgdHlwZWRlZiB0
eXBlbmFtZSBBZGFwdG9yOjpUeXBlIEVsZW1lbnRUeXBlOwogCi0gICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJp
ZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xv
dCB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05v
dFplcm87CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJh
c2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJp
ZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUlu
ZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm87CiAKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIGVsZW1lbnRTaXplID0gc2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpOwogCkBAIC0z
MDksNyArMzA5LDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgYm9vbCBwdXRCeUluZGV4KEpTQ2Vs
bCosIEpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29s
IHNob3VsZFRocm93KTsKICAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlND
ZWxsKiwgSlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpOwogICAgIAotICAg
IHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVj
dCosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICBzdGF0aWMgdm9p
ZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0
eU5hbWVBcnJheSYpOwogCiAgICAgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCos
IFZNJik7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRB
cnJheVZpZXdJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgJKHJldmlzaW9uIDI2Nzc2NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00ODMsMTcgKzQ4MywxNiBAQCBib29sIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpkCiAKIHRlbXBsYXRlPHR5cGVuYW1lIEFkYXB0
b3I+CiB2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpnZXRPd25Qcm9wZXJ0
eU5hbWVzKAotICAgIEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIFByb3BlcnR5TmFtZUFycmF5JiBhcnJheSwgRW51bWVyYXRpb25Nb2RlIG1vZGUpCisgICAg
SlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlO
YW1lQXJyYXkmIGFycmF5KQogewotICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAg
ICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNU
eXBlZEFycmF5Vmlldyo+KG9iamVjdCk7CiAKICAgICBpZiAoYXJyYXkuaW5jbHVkZVN0cmluZ1By
b3BlcnRpZXMoKSkgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGhpc09iamVj
dC0+bV9sZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGFycmF5LmFkZChJZGVudGlmaWVyOjpmcm9t
KHZtLCBpKSk7CisgICAgICAgICAgICBhcnJheS5hZGQ8RW51bWVyYWJsZTo6VHJ1ZT4oaSk7CiAg
ICAgfQogICAgIAotICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwg
Z2xvYmFsT2JqZWN0LCBhcnJheSwgbW9kZSk7CisgICAgQmFzZTo6Z2V0T3duTm9uSW5kZXhQcm9w
ZXJ0eU5hbWVzKG9iamVjdCwgZ2xvYmFsT2JqZWN0LCBhcnJheSk7CiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIEFkYXB0b3I+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ds
b2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDI2Nzc2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU0Niw5ICs1
NDYsNyBAQCBwdWJsaWM6CiAgICAgICAgIAogcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU1Nl
Z21lbnRlZFZhcmlhYmxlT2JqZWN0OwotICAgIC8vIERvIHdlIHJlYWx5IG5lZWQgT3ZlcnJpZGVz
QW55Rm9ybU9mR2V0UHJvcGVydHlOYW1lcyBoZXJlPwotICAgIC8vIEZJWE1FOiBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEyOTU0Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3Rh
dGljUHJvcGVydHlUYWJsZSB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRl
c0FueUZvcm1PZkdldFByb3BlcnR5TmFtZXMgfCBJc0ltbXV0YWJsZVByb3RvdHlwZUV4b3RpY09i
amVjdDsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFz
ZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlIHwgT3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlTbG90IHwgSXNJbW11dGFibGVQcm90b3R5cGVFeG90aWNPYmplY3Q7CiAKICAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RG
dW5jdGlvbnMuY3BwCShyZXZpc2lvbiAyNjc3NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0
NSw3ICs4NDUsNyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZ2xvYmFsRnVuY093bktlCiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTT2JqZWN0KiBv
YmplY3QgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLnRvT2JqZWN0KGdsb2JhbE9iamVjdCk7CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUob3duUHJvcGVydHlLZXlzKGds
b2JhbE9iamVjdCwgb2JqZWN0LCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzQW5kU3ltYm9scywg
RG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSwgV1RGOjpudWxsb3B0KSkpOworICAgIFJF
TEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKG93blByb3BlcnR5S2V5cyhn
bG9iYWxPYmplY3QsIG9iamVjdCwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5nc0FuZFN5bWJvbHMs
IERvbnRFbnVtUHJvcGVydHlNb2RlOjpJbmNsdWRlLCBXVEY6Om51bGxvcHQpKSk7CiB9CiAKIEpT
Q19ERUZJTkVfSE9TVF9GVU5DVElPTihnbG9iYWxGdW5jRGF0ZVRpbWVGb3JtYXQsIChKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1l
bnQuY3BwCShyZXZpc2lvbiAyNjc3NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0xleGljYWxFbnZpcm9ubWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDI2ICs2NCwy
MSBAQCB2b2lkIEpTTGV4aWNhbEVudmlyb25tZW50OjphbmFseXplSGVhcChKCiAgICAgfQogfQog
Ci12b2lkIEpTTGV4aWNhbEVudmlyb25tZW50OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMo
SlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlO
YW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU0xl
eGljYWxFbnZpcm9ubWVudDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBv
YmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBw
cm9wZXJ0eU5hbWVzKQogewogICAgIEpTTGV4aWNhbEVudmlyb25tZW50KiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTTGV4aWNhbEVudmlyb25tZW50Kj4ob2JqZWN0KTsKIAogICAgIHsKICAgICAgICAg
Q29uY3VycmVudEpTTG9ja2VyIGxvY2tlcih0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5tX2xv
Y2spOwogICAgICAgICBTeW1ib2xUYWJsZTo6TWFwOjppdGVyYXRvciBlbmQgPSB0aGlzT2JqZWN0
LT5zeW1ib2xUYWJsZSgpLT5lbmQobG9ja2VyKTsKLSAgICAgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOwogICAgICAgICBmb3IgKFN5bWJvbFRhYmxlOjpNYXA6Oml0ZXJhdG9yIGl0ID0g
dGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS0+YmVnaW4obG9ja2VyKTsgaXQgIT0gZW5kOyArK2l0
KSB7Ci0gICAgICAgICAgICBpZiAoaXQtPnZhbHVlLmdldEF0dHJpYnV0ZXMoKSAmIFByb3BlcnR5
QXR0cmlidXRlOjpEb250RW51bSAmJiAhbW9kZS5pbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKCkp
Ci0gICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBpZiAoIXRoaXNPYmplY3Qt
PmlzVmFsaWRTY29wZU9mZnNldChpdC0+dmFsdWUuc2NvcGVPZmZzZXQoKSkpCiAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoaXQtPmtleS0+aXNTeW1ib2woKSAmJiAh
cHJvcGVydHlOYW1lcy5pbmNsdWRlU3ltYm9sUHJvcGVydGllcygpKQotICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJv
bVVpZCh2bSwgaXQtPmtleS5nZXQoKSkpOworICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGRX
aXRoRG9udEVudW0oaXQtPmtleS5nZXQoKSwgaXQtPnZhbHVlLmlzRG9udEVudW0oKSk7CiAgICAg
ICAgIH0KICAgICB9CiAgICAgLy8gU2tpcCB0aGUgSlNTeW1ib2xUYWJsZU9iamVjdCdzIGltcGxl
bWVudGF0aW9uIG9mIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcwotICAgIEpTT2JqZWN0Ojpn
ZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9w
ZXJ0eU5hbWVzLCBtb2RlKTsKKyAgICBKU09iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5h
bWVzKHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcyk7CiB9CiAKIGJvb2wg
SlNMZXhpY2FsRW52aXJvbm1lbnQ6OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0xleGljYWxFbnZpcm9ubWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmgJKHJldmlzaW9uIDI2Nzc2NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHVzaW5n
IEJhc2UgPSBKU1N5bWJvbFRhYmxlT2JqZWN0OwotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93
blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5TmFtZXM7CisgICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVy
ZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duTm9u
SW5kZXhQcm9wZXJ0eU5hbWVzOwogCiAgICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogdmFy
aWFibGVzKCkKICAgICB7CkBAIC0xMDYsNyArMTA2LDcgQEAgcHVibGljOgogICAgIH0KICAgICAg
ICAgCiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgSlNHbG9i
YWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyB2b2lk
IGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0Kiwg
UHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIHN0YXRpYyB2b2lkIGdl
dE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJv
cGVydHlOYW1lQXJyYXkmKTsKIAogICAgIHN0YXRpYyBib29sIHB1dChKU0NlbGwqLCBKU0dsb2Jh
bE9iamVjdCosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlRW52
aXJvbm1lbnQuY3BwCShyZXZpc2lvbiAyNjc3NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU01vZHVsZUVudmlyb25tZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTYsMTcg
Kzk2LDE3IEBAIGJvb2wgSlNNb2R1bGVFbnZpcm9ubWVudDo6Z2V0T3duUHJvcGVydHkKICAgICBy
ZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwg
cHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotdm9pZCBKU01vZHVsZUVudmlyb25tZW50OjpnZXRP
d25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzQXJyYXksIEVudW1l
cmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU01vZHVsZUVudmlyb25tZW50OjpnZXRPd25Ob25JbmRl
eFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzQXJyYXkpCiB7CiAgICAgSlNNb2R1
bGVFbnZpcm9ubWVudCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU01vZHVsZUVudmlyb25tZW50Kj4o
Y2VsbCk7CiAgICAgaWYgKHByb3BlcnR5TmFtZXNBcnJheS5pbmNsdWRlU3RyaW5nUHJvcGVydGll
cygpKSB7CiAgICAgICAgIGZvciAoY29uc3QgYXV0byYgcGFpciA6IHRoaXNPYmplY3QtPm1vZHVs
ZVJlY29yZCgpLT5pbXBvcnRFbnRyaWVzKCkpIHsKICAgICAgICAgICAgIGNvbnN0IEFic3RyYWN0
TW9kdWxlUmVjb3JkOjpJbXBvcnRFbnRyeSYgaW1wb3J0RW50cnkgPSBwYWlyLnZhbHVlOwogICAg
ICAgICAgICAgaWYgKGltcG9ydEVudHJ5LnR5cGUgPT0gQWJzdHJhY3RNb2R1bGVSZWNvcmQ6Oklt
cG9ydEVudHJ5VHlwZTo6U2luZ2xlKQotICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZXNBcnJh
eS5hZGQoaW1wb3J0RW50cnkubG9jYWxOYW1lKTsKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eU5h
bWVzQXJyYXkuYWRkPEVudW1lcmFibGU6OlRydWU+KGltcG9ydEVudHJ5LmxvY2FsTmFtZSk7CiAg
ICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJuIEJhc2U6OmdldE93bk5vbkluZGV4UHJvcGVydHlO
YW1lcyh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXNBcnJheSwgbW9kZSk7
CisgICAgQmFzZTo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGdsb2Jh
bE9iamVjdCwgcHJvcGVydHlOYW1lc0FycmF5KTsKIH0KIAogYm9vbCBKU01vZHVsZUVudmlyb25t
ZW50OjpwdXQoSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNs
b3QpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUVudmlyb25t
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1
bGVFbnZpcm9ubWVudC5oCShyZXZpc2lvbiAyNjc3NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU01vZHVsZUVudmlyb25tZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcg
KzQwLDcgQEAgY2xhc3MgSlNNb2R1bGVFbnZpcm9ubWVudCBmaW5hbCA6IHB1YmxpYwogICAgIGZy
aWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFz
ZSA9IEpTTGV4aWNhbEVudmlyb25tZW50OwotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg
U3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blBy
b3BlcnR5U2xvdCB8IE92ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5TmFtZXM7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZs
YWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duTm9uSW5k
ZXhQcm9wZXJ0eU5hbWVzOwogCiAgICAgc3RhdGljIEpTTW9kdWxlRW52aXJvbm1lbnQqIGNyZWF0
ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTU2NvcGUqIGN1cnJlbnRT
Y29wZSwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlLCBKU1ZhbHVlIGluaXRpYWxWYWx1ZSwgQWJz
dHJhY3RNb2R1bGVSZWNvcmQqIG1vZHVsZVJlY29yZCkKICAgICB7CkBAIC03Myw3ICs3Myw3IEBA
IHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNP
YmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0g
ICAgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNH
bG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAg
c3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9i
YWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYpOwogICAgIHN0YXRpYyBib29sIHB1dChKU0Nl
bGwqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlT
bG90Jik7CiAgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgSlNHbG9iYWxP
YmplY3QqLCBQcm9wZXJ0eU5hbWUsIERlbGV0ZVByb3BlcnR5U2xvdCYpOwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3Bh
Y2VPYmplY3QuY3BwCShyZXZpc2lvbiAyNjc3NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIx
Nyw3ICsyMTcsNyBAQCBib29sIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0OjpkZWxldGVQcm9wCiAg
ICAgcmV0dXJuICF0aGlzT2JqZWN0LT5tX2V4cG9ydHMuY29udGFpbnMocHJvcGVydHlOYW1lLnVp
ZCgpKTsKIH0KIAotdm9pZCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdDo6Z2V0T3duUHJvcGVydHlO
YW1lcyhKU09iamVjdCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVy
dHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBK
U01vZHVsZU5hbWVzcGFjZU9iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogY2Vs
bCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3Bl
cnR5TmFtZXMpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTIyNSwxNSArMjI1LDE2IEBAIHZv
aWQgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6OmdldE93blByb3AKICAgICAvLyBodHRwczovL3Rj
MzkuZXMvZWNtYTI2Mi8jc2VjLW1vZHVsZS1uYW1lc3BhY2UtZXhvdGljLW9iamVjdHMtb3ducHJv
cGVydHlrZXlzCiAgICAgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNNb2R1bGVOYW1lc3BhY2VPYmplY3QqPihjZWxsKTsKICAgICBmb3IgKGNvbnN0IGF1dG8m
IG5hbWUgOiB0aGlzT2JqZWN0LT5tX25hbWVzKSB7Ci0gICAgICAgIGlmICghbW9kZS5pbmNsdWRl
RG9udEVudW1Qcm9wZXJ0aWVzKCkpIHsKKyAgICAgICAgaWYgKHByb3BlcnR5TmFtZXMuZG9udEVu
dW1Qcm9wZXJ0eU1vZGUoKSAhPSBEb250RW51bVByb3BlcnR5TW9kZTo6SW5jbHVkZSkgewogICAg
ICAgICAgICAgLy8gUGVyZm9ybSBbW0dldE93blByb3BlcnR5XV0gdG8gdGhyb3cgUmVmZXJlbmNl
RXJyb3IgaWYgYmluZGluZyBpcyB1bmluaXRpYWxpemVkLgogICAgICAgICAgICAgUHJvcGVydHlT
bG90IHNsb3QoY2VsbCwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OkdldE93blBy
b3BlcnR5KTsKICAgICAgICAgICAgIHRoaXNPYmplY3QtPmdldE93blByb3BlcnR5U2xvdENvbW1v
bihnbG9iYWxPYmplY3QsIG5hbWUuaW1wbCgpLCBzbG90KTsKICAgICAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgICAgIH0KLSAgICAgICAgcHJvcGVydHlO
YW1lcy5hZGQobmFtZS5pbXBsKCkpOworICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZDxFbnVtZXJh
YmxlOjpUcnVlPihuYW1lKTsKICAgICB9Ci0gICAgQmFzZTo6Z2V0T3duUHJvcGVydHlOYW1lcyh0
aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworICAgIGlmIChw
cm9wZXJ0eU5hbWVzLmluY2x1ZGVTeW1ib2xQcm9wZXJ0aWVzKCkpCisgICAgICAgIEJhc2U6Omdl
dE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3Bl
cnR5TmFtZXMpOwogfQogCiBib29sIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0OjpkZWZpbmVPd25Q
cm9wZXJ0eShKU09iamVjdCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlw
dG9yLCBib29sIHNob3VsZFRocm93KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oCShyZXZpc2lvbiAyNjc3
NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9i
amVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
Y2xhc3MgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QgZmluYWwgOiBwdWJsaWMgSlNOb25GaW5hbE9i
amVjdCB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVy
ZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSW50ZXJjZXB0c0dldE93blBy
b3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IE92ZXJyaWRlc0FueUZv
cm1PZkdldFByb3BlcnR5TmFtZXMgfCBHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3Bl
cnR5QWJzZW5jZSB8IElzSW1tdXRhYmxlUHJvdG90eXBlRXhvdGljT2JqZWN0OworICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFn
cyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5
TmFtZXMgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3Ro
SXNOb3RaZXJvIHwgR2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2Ug
fCBJc0ltbXV0YWJsZVByb3RvdHlwZUV4b3RpY09iamVjdDsKIAogICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95
KEpTQ2VsbCopOwpAQCAtNTcsNyArNTcsNyBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIGJvb2wgcHV0KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1l
LCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0
aWMgYm9vbCBwdXRCeUluZGV4KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJv
cGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKICAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCos
IFByb3BlcnR5TmFtZSwgRGVsZXRlUHJvcGVydHlTbG90Jik7Ci0gICAgSlNfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2Jq
ZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIEpTX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0ds
b2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5Jik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCos
IFByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJv
dyk7CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAJKHJldmlzaW9uIDI2Nzc2NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMTcsNyArMjE3LDcgQEAgSlNWYWx1ZSBQcm9wZXJ0eU5hbWVGb3JGdW5jdGlvbkNhbGw6OnZh
bAogU3RyaW5naWZpZXI6OlN0cmluZ2lmaWVyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUgcmVwbGFjZXIsIEpTVmFsdWUgc3BhY2UpCiAgICAgOiBtX2dsb2JhbE9iamVjdChn
bG9iYWxPYmplY3QpCiAgICAgLCBtX3JlcGxhY2VyKHJlcGxhY2VyKQotICAgICwgbV9hcnJheVJl
cGxhY2VyUHJvcGVydHlOYW1lcyhnbG9iYWxPYmplY3QtPnZtKCksIFByb3BlcnR5TmFtZU1vZGU6
OlN0cmluZ3MsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKQorICAgICwgbV9hcnJheVJlcGxh
Y2VyUHJvcGVydHlOYW1lcyhnbG9iYWxPYmplY3QtPnZtKCksIFByb3BlcnR5TmFtZU1vZGU6OlN0
cmluZ3MsIERvbnRFbnVtUHJvcGVydHlNb2RlOjpJbmNsdWRlKQogewogICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CkBAIC0yNTEsNyArMjUxLDcgQEAgU3RyaW5naWZpZXI6OlN0cmluZ2lmaWVyKEpTR2xvYmFs
T2JqZWN0KgogICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAp
OwogICAgICAgICAgICAgICAgICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZVN0
cmluZy0+dG9JZGVudGlmaWVyKGdsb2JhbE9iamVjdCk7CiAgICAgICAgICAgICAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsICk7Ci0gICAgICAgICAgICAgICAgICAgIG1fYXJyYXlS
ZXBsYWNlclByb3BlcnR5TmFtZXMuYWRkKFdURk1vdmUocHJvcGVydHlOYW1lKSk7CisgICAgICAg
ICAgICAgICAgICAgIG1fYXJyYXlSZXBsYWNlclByb3BlcnR5TmFtZXMuYWRkPEVudW1lcmFibGU6
OkluZGV0ZXJtaW5hdGU+KFdURk1vdmUocHJvcGVydHlOYW1lKSk7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC00OTksOCArNDk5LDggQEAgYm9vbCBTdHJp
bmdpZmllcjo6SG9sZGVyOjphcHBlbmROZXh0UHJvcAogICAgICAgICAgICAgaWYgKHN0cmluZ2lm
aWVyLm1fdXNpbmdBcnJheVJlcGxhY2VyKQogICAgICAgICAgICAgICAgIG1fcHJvcGVydHlOYW1l
cyA9IHN0cmluZ2lmaWVyLm1fYXJyYXlSZXBsYWNlclByb3BlcnR5TmFtZXMuZGF0YSgpOwogICAg
ICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgUHJvcGVydHlOYW1lQXJyYXkgb2JqZWN0
UHJvcGVydHlOYW1lcyh2bSwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncywgUHJpdmF0ZVN5bWJv
bE1vZGU6OkV4Y2x1ZGUpOwotICAgICAgICAgICAgICAgIG1fb2JqZWN0LT5tZXRob2RUYWJsZSh2
bSktPmdldE93blByb3BlcnR5TmFtZXMobV9vYmplY3QsIGdsb2JhbE9iamVjdCwgb2JqZWN0UHJv
cGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlKCkpOworICAgICAgICAgICAgICAgIFByb3BlcnR5
TmFtZUFycmF5IG9iamVjdFByb3BlcnR5TmFtZXModm0sIFByb3BlcnR5TmFtZU1vZGU6OlN0cmlu
Z3MsIERvbnRFbnVtUHJvcGVydHlNb2RlOjpFeGNsdWRlKTsKKyAgICAgICAgICAgICAgICBtX29i
amVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG1fb2JqZWN0LCBnbG9i
YWxPYmplY3QsIG9iamVjdFByb3BlcnR5TmFtZXMpOwogICAgICAgICAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAgICAgICAgICAgICAgICBtX3Byb3BlcnR5TmFt
ZXMgPSBvYmplY3RQcm9wZXJ0eU5hbWVzLnJlbGVhc2VEYXRhKCk7CiAgICAgICAgICAgICB9CkBA
IC03MTgsOCArNzE4LDggQEAgTkVWRVJfSU5MSU5FIEpTVmFsdWUgV2Fsa2VyOjp3YWxrKEpTVmFs
dQogICAgICAgICAgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChpblZhbHVlKTsK
ICAgICAgICAgICAgICAgICBtYXJrZWRTdGFjay5hcHBlbmRXaXRoQ3Jhc2hPbk92ZXJmbG93KG9i
amVjdCk7CiAgICAgICAgICAgICAgICAgaW5kZXhTdGFjay5hcHBlbmQoMCk7Ci0gICAgICAgICAg
ICAgICAgcHJvcGVydHlTdGFjay5hcHBlbmQoUHJvcGVydHlOYW1lQXJyYXkodm0sIFByb3BlcnR5
TmFtZU1vZGU6OlN0cmluZ3MsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKSk7Ci0gICAgICAg
ICAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMob2Jq
ZWN0LCBtX2dsb2JhbE9iamVjdCwgcHJvcGVydHlTdGFjay5sYXN0KCksIEVudW1lcmF0aW9uTW9k
ZSgpKTsKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0YWNrLmFwcGVuZChQcm9wZXJ0eU5hbWVB
cnJheSh2bSwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncywgRG9udEVudW1Qcm9wZXJ0eU1vZGU6
OkV4Y2x1ZGUpKTsKKyAgICAgICAgICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0
T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIG1fZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eVN0YWNrLmxh
c3QoKSk7CiAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG9iamVjdFN0YXJ0VmlzaXRNZW1iZXI6CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAy
Njc3NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTcyLDcgKzcyLDcgQEAgY29uc3QgQ2xhc3NJbmZvIEpTT2JqZWN0Ojpz
X2luZm8gPSB7ICJPYgogCiBjb25zdCBDbGFzc0luZm8gSlNGaW5hbE9iamVjdDo6c19pbmZvID0g
eyAiT2JqZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhP
RF9UQUJMRShKU0ZpbmFsT2JqZWN0KSB9OwogCi1zdGF0aWMgaW5saW5lIHZvaWQgZ2V0Q2xhc3NQ
cm9wZXJ0eU5hbWVzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IENsYXNzSW5m
byogY2xhc3NJbmZvLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRp
b25Nb2RlIG1vZGUpCitzdGF0aWMgaW5saW5lIHZvaWQgZ2V0Q2xhc3NQcm9wZXJ0eU5hbWVzKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvLCBQ
cm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcykKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CiAKQEAgLTgyLDEwICs4Miw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBnZXRD
bGFzc1Byb3BlcnR5TmFtZXMKICAgICAgICAgaWYgKCF0YWJsZSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwogCi0gICAgICAgIGZvciAoYXV0byBpdGVyID0gdGFibGUtPmJlZ2luKCk7IGl0ZXIgIT0g
dGFibGUtPmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgICAgIGlmICghKGl0ZXItPmF0dHJpYnV0
ZXMoKSAmIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkgfHwgbW9kZS5pbmNsdWRlRG9udEVu
dW1Qcm9wZXJ0aWVzKCkpCi0gICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyh2bSwgaXRlci5rZXkoKSkpOwotICAgICAgICB9CisgICAgICAgIGZv
ciAoYXV0byBpdGVyID0gdGFibGUtPmJlZ2luKCk7IGl0ZXIgIT0gdGFibGUtPmVuZCgpOyArK2l0
ZXIpCisgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZFdpdGhEb250RW51bShJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCBpdGVyLmtleSgpKSwgaXRlci0+YXR0cmlidXRlcygpICYgUHJvcGVy
dHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKICAgICB9CiB9CiAKQEAgLTIzODAsNDYgKzIzNzgsNTcg
QEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKG9iamVjdFByaXZhdGVGdQogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKEpTT2JqZWN0OjpkZWZhdWx0SGFzSW5zdGFuY2UoZ2xv
YmFsT2JqZWN0LCB2YWx1ZSwgcHJvdG8pKSk7CiB9CiAKLXZvaWQgSlNPYmplY3Q6OmdldFByb3Bl
cnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
UHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQor
Y29uc3RleHByIHVuc2lnbmVkIG1heGltdW1Qcm90b3R5cGVDaGFpbkRlcHRoID0gNDAwMDA7Cit2
b2lkIEpTT2JqZWN0OjpnZXRQcm9wZXJ0eU5hbWVzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCB1aW50MzJfdCYgaW5kZXhlZExl
bmd0aCwgdWludDMyX3QmIHN0cnVjdHVyZVByb3BlcnR5Q291bnQpCiB7CiAgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKLSAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhv
YmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcywgbW9kZSk7Ci0gICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAotICAgIEpTVmFsdWUgbmV4dFByb3RvID0gb2Jq
ZWN0LT5nZXRQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCk7CisgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSB0aGlzLT5zdHJ1Y3R1cmUodm0pOworICAgIGlmIChzdHJ1Y3R1cmUtPmNhbkFjY2Vz
c1Byb3BlcnRpZXNRdWlja2x5Rm9yRW51bWVyYXRpb24oKSAmJiBpbmRleGVkTGVuZ3RoID09IHRo
aXMtPmdldEFycmF5TGVuZ3RoKCkpIHsKKyAgICAgICAgdGhpcy0+bWV0aG9kVGFibGUodm0pLT5n
ZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXModGhpcywgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5h
bWVzKTsKKyAgICAgICAgLy8gRm9yIG1vc3Qgb2JqZWN0cywgfHByb3BlcnR5TmFtZXN8IHdpbGwg
Y29udGFpbnMgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBmcm9tIHRoZSBzdHJ1Y3R1cmUuCisg
ICAgICAgIC8vIFNsb3cgcGF0aCBvZiBoYXNfc3RydWN0dXJlX3Byb3BlcnR5IGJ5dGVjb2RlIG9w
IHdpbGwgaGFuZGxlIHRoZSByZXN0LgorICAgICAgICBzdHJ1Y3R1cmVQcm9wZXJ0eUNvdW50ID0g
cHJvcGVydHlOYW1lcy5zaXplKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdGhpcy0+bWV0aG9k
VGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMsIGdsb2JhbE9iamVjdCwgcHJvcGVy
dHlOYW1lcyk7CisgICAgICAgIC8vIHxwcm9wZXJ0eU5hbWVzfCBjb250YWlucyBhbGwgaW5kZXhl
ZCBwcm9wZXJ0eSBuYW1lcywgc28gZGlzYWJsZSBpbmRleGVkIHByb3BlcnR5IGVudW1lcmF0aW9u
LgorICAgICAgICBpbmRleGVkTGVuZ3RoID0gMDsKKyAgICB9CisKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB2b2lkKCkpOwotICAgIGlmIChuZXh0UHJvdG8uaXNOdWxsKCkpCi0gICAg
ICAgIHJldHVybjsKIAotICAgIEpTT2JqZWN0KiBwcm90b3R5cGUgPSBhc09iamVjdChuZXh0UHJv
dG8pOwotICAgIHdoaWxlKDEpIHsKLSAgICAgICAgaWYgKHByb3RvdHlwZS0+c3RydWN0dXJlKHZt
KS0+dHlwZUluZm8oKS5vdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzKCkpIHsKLSAgICAgICAgICAg
IHNjb3BlLnJlbGVhc2UoKTsKLSAgICAgICAgICAgIHByb3RvdHlwZS0+bWV0aG9kVGFibGUodm0p
LT5nZXRQcm9wZXJ0eU5hbWVzKHByb3RvdHlwZSwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVz
LCBtb2RlKTsKKyAgICB1bnNpZ25lZCBwcm90b3R5cGVDb3VudCA9IDA7CisgICAgSlNPYmplY3Qq
IG5leHRPYmplY3QgPSB0aGlzOworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIGlmIChVTkxJ
S0VMWSgrK3Byb3RvdHlwZUNvdW50ID4gbWF4aW11bVByb3RvdHlwZUNoYWluRGVwdGgpKSB7Cisg
ICAgICAgICAgICB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBwcm90b3R5cGUtPm1ldGhv
ZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhwcm90b3R5cGUsIGdsb2JhbE9iamVjdCwg
cHJvcGVydHlOYW1lcywgbW9kZSk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHZvaWQoKSk7Ci0gICAgICAgIG5leHRQcm90byA9IHByb3RvdHlwZS0+Z2V0UHJvdG90eXBlKHZt
LCBnbG9iYWxPYmplY3QpOworCisgICAgICAgIEpTVmFsdWUgcHJvdG90eXBlID0gbmV4dE9iamVj
dC0+Z2V0UHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpOwogICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB2b2lkKCkpOwotICAgICAgICBpZiAobmV4dFByb3RvLmlzTnVsbCgpKQor
ICAgICAgICBpZiAocHJvdG90eXBlLmlzTnVsbCgpKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIHByb3RvdHlwZSA9IGFzT2JqZWN0KG5leHRQcm90byk7CisKKyAgICAgICAgbmV4dE9iamVj
dCA9IGFzT2JqZWN0KHByb3RvdHlwZSk7CisgICAgICAgIG5leHRPYmplY3QtPm1ldGhvZFRhYmxl
KHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhuZXh0T2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3Bl
cnR5TmFtZXMpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwog
ICAgIH0KIH0KIAotdm9pZCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCog
b2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYg
cHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIEpTT2JqZWN0OjpnZXRP
d25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzKQogewogICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBpZiAoIW1vZGUuaW5jbHVkZUpTT2JqZWN0UHJvcGVy
dGllcygpKSB7Ci0gICAgICAgIC8vIFdlIHN0aWxsIGhhdmUgdG8gZ2V0IG5vbi1pbmRleGVkIHBy
b3BlcnRpZXMgZnJvbSBhbnkgc3ViY2xhc3NlcyBvZiBKU09iamVjdCB0aGF0IGhhdmUgdGhlbS4K
LSAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93bk5vbkluZGV4UHJvcGVydHlO
YW1lcyhvYmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcywgbW9kZSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9CisgICAgSlNPYmplY3Q6OmdldE93bkluZGV4UHJvcGVydHlOYW1lcyhv
YmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcyk7CisgICAgb2JqZWN0LT5tZXRob2RU
YWJsZSh2bSktPmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhvYmplY3QsIGdsb2JhbE9iamVj
dCwgcHJvcGVydHlOYW1lcyk7Cit9CiAKK3ZvaWQgSlNPYmplY3Q6OmdldE93bkluZGV4UHJvcGVy
dHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQ
cm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcykKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CiAgICAgaWYgKHByb3BlcnR5TmFtZXMuaW5jbHVkZVN0cmluZ1Byb3BlcnRp
ZXMoKSkgewotICAgICAgICAvLyBBZGQgbnVtZXJpYyBwcm9wZXJ0aWVzIGZpcnN0LiBUaGF0IGFw
cGVhcnMgdG8gYmUgdGhlIGFjY2VwdGVkIGNvbnZlbnRpb24uCisgICAgICAgIC8vIEFkZCBudW1l
cmljIHByb3BlcnRpZXMgZmlyc3QgcGVyIHN0ZXAgMiBvZiBodHRwczovL3RjMzkuZXMvZWNtYTI2
Mi8jc2VjLW9yZGluYXJ5b3ducHJvcGVydHlrZXlzCiAgICAgICAgIC8vIEZJWE1FOiBGaWxsaW5n
IFByb3BlcnR5TmFtZUFycmF5IHdpdGggYW4gaWRlbnRpZmllciBmb3IgZXZlcnkgaW50ZWdlcgog
ICAgICAgICAvLyBpcyBpbmNyZWRpYmx5IGluZWZmaWNpZW50IGZvciBsYXJnZSBhcnJheXMuIFdl
IG5lZWQgYSBkaWZmZXJlbnQgYXBwcm9hY2gsCiAgICAgICAgIC8vIHdoaWNoIGFsbW9zdCBjZXJ0
YWlubHkgbWVhbnMgYSBkaWZmZXJlbnQgc3RydWN0dXJlIGZvciBQcm9wZXJ0eU5hbWVBcnJheS4K
QEAgLTI0MzUsNyArMjQ0NCw3IEBAIHZvaWQgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMo
SlNPYmoKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1c2VkTGVuZ3RoOyAr
K2kpIHsKICAgICAgICAgICAgICAgICBpZiAoIWJ1dHRlcmZseS0+Y29udGlndW91cygpLmF0KG9i
amVjdCwgaSkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAg
IHByb3BlcnR5TmFtZXMuYWRkKGkpOworICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRk
PEVudW1lcmFibGU6OlRydWU+KGkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KQEAgLTI0NDcsNyArMjQ1Niw3IEBAIHZvaWQgSlNPYmplY3Q6OmdldE93blBy
b3BlcnR5TmFtZXMoSlNPYmoKICAgICAgICAgICAgICAgICBkb3VibGUgdmFsdWUgPSBidXR0ZXJm
bHktPmNvbnRpZ3VvdXNEb3VibGUoKS5hdChvYmplY3QsIGkpOwogICAgICAgICAgICAgICAgIGlm
ICh2YWx1ZSAhPSB2YWx1ZSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoaSk7CisgICAgICAgICAgICAgICAgcHJvcGVydHlO
YW1lcy5hZGQ8RW51bWVyYWJsZTo6VHJ1ZT4oaSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQpAQCAtMjQ1OCwyMiArMjQ2NywyMiBAQCB2b2lkIEpTT2JqZWN0
OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqCiAgICAgICAgICAgICB1bnNpZ25lZCB1c2VkVmVj
dG9yTGVuZ3RoID0gc3RkOjptaW4oc3RvcmFnZS0+bGVuZ3RoKCksIHN0b3JhZ2UtPnZlY3Rvckxl
bmd0aCgpKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1c2VkVmVjdG9y
TGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgICAgICBpZiAoc3RvcmFnZS0+bV92ZWN0b3JbaV0p
Ci0gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKGkpOworICAgICAgICAgICAg
ICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZDxFbnVtZXJhYmxlOjpUcnVlPihpKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAq
IG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFwLmdldCgpKSB7Ci0gICAgICAgICAgICAgICAgVmVj
dG9yPHVuc2lnbmVkLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4ga2V5czsKLSAgICAgICAgICAg
ICAgICBrZXlzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobWFwLT5zaXplKCkpOworICAgICAgICAg
ICAgICAgIFZlY3RvcjxTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciwgMCwgVW5z
YWZlVmVjdG9yT3ZlcmZsb3c+IGl0ZXJhdG9yczsKKyAgICAgICAgICAgICAgICBpdGVyYXRvcnMu
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtYXAtPnNpemUoKSk7CiAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
bWFwLT5lbmQoKTsKLSAgICAgICAgICAgICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKG1vZGUuaW5jbHVkZURvbnRFbnVtUHJvcGVydGllcygpIHx8ICEo
aXQtPnZhbHVlLmF0dHJpYnV0ZXMoKSAmIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpCi0g
ICAgICAgICAgICAgICAgICAgICAgICBrZXlzLnVuY2hlY2tlZEFwcGVuZChzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oaXQtPmtleSkpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBm
b3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9ycy51bmNoZWNr
ZWRBcHBlbmQoaXQpOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHN0ZDo6c29y
dChrZXlzLmJlZ2luKCksIGtleXMuZW5kKCkpOwotICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgICAgICAgICBwcm9w
ZXJ0eU5hbWVzLmFkZChrZXlzW2ldKTsKKyAgICAgICAgICAgICAgICBzdGQ6OnNvcnQoaXRlcmF0
b3JzLmJlZ2luKCksIGl0ZXJhdG9ycy5lbmQoKSwgW10oY29uc3QgYXV0byYgYSwgY29uc3QgYXV0
byYgYikgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gYS0+a2V5IDwgYi0+a2V5OworICAg
ICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgaXQgOiBp
dGVyYXRvcnMpCisgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkV2l0aERvbnRF
bnVtKElkZW50aWZpZXI6OmZyb20odm0sIHN0YXRpY19jYXN0PHVuc2lnbmVkPihpdC0+a2V5KSks
IGl0LT52YWx1ZS5hdHRyaWJ1dGVzKCkgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTI0ODIsMjAg
KzI0OTEsMTQgQEAgdm9pZCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iagogICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogICAgIH0K
LQotICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Ob25JbmRleFByb3BlcnR5TmFt
ZXMob2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCi12b2lk
IEpTT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5
TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU09iamVjdDo6Z2V0T3duTm9uSW5k
ZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzKQogewogICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBpZiAoIW9iamVjdC0+c3RhdGljUHJvcGVydGllc1Jl
aWZpZWQodm0pKQotICAgICAgICBnZXRDbGFzc1Byb3BlcnR5TmFtZXMoZ2xvYmFsT2JqZWN0LCBv
YmplY3QtPmNsYXNzSW5mbyh2bSksIHByb3BlcnR5TmFtZXMsIG1vZGUpOwotCi0gICAgaWYgKCFt
b2RlLmluY2x1ZGVKU09iamVjdFByb3BlcnRpZXMoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAot
ICAgIG9iamVjdC0+c3RydWN0dXJlKHZtKS0+Z2V0UHJvcGVydHlOYW1lc0Zyb21TdHJ1Y3R1cmUo
dm0sIHByb3BlcnR5TmFtZXMsIG1vZGUpOworICAgICAgICBnZXRDbGFzc1Byb3BlcnR5TmFtZXMo
Z2xvYmFsT2JqZWN0LCBvYmplY3QtPmNsYXNzSW5mbyh2bSksIHByb3BlcnR5TmFtZXMpOworICAg
IG9iamVjdC0+c3RydWN0dXJlKHZtKS0+Z2V0UHJvcGVydHlOYW1lc0Zyb21TdHJ1Y3R1cmUodm0s
IHByb3BlcnR5TmFtZXMpOwogfQogCiBkb3VibGUgSlNPYmplY3Q6OnRvTnVtYmVyKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QpIGNvbnN0CkBAIC0zODI5LDQxICszODMyLDYgQEAgdWludDMy
X3QgSlNPYmplY3Q6OmdldEVudW1lcmFibGVMZW5ndGgoSgogICAgIH0KIH0KIAotdm9pZCBKU09i
amVjdDo6Z2V0U3RydWN0dXJlUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywg
RW51bWVyYXRpb25Nb2RlIG1vZGUpCi17Ci0gICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OwotICAgIG9iamVjdC0+c3RydWN0dXJlKHZtKS0+Z2V0UHJvcGVydHlOYW1lc0Zyb21TdHJ1Y3R1
cmUodm0sIHByb3BlcnR5TmFtZXMsIG1vZGUpOwotfQotCi12b2lkIEpTT2JqZWN0OjpnZXRHZW5l
cmljUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2Rl
IG1vZGUpCi17Ci0gICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZt
KS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1l
cywgRW51bWVyYXRpb25Nb2RlKG1vZGUsIEpTT2JqZWN0UHJvcGVydGllc01vZGU6OkV4Y2x1ZGUp
KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwotCi0gICAgSlNWYWx1
ZSBuZXh0UHJvdG8gPSBvYmplY3QtPmdldFByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KTsKLSAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwotICAgIGlmIChuZXh0UHJvdG8u
aXNOdWxsKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEpTT2JqZWN0KiBwcm90b3R5cGUgPSBh
c09iamVjdChuZXh0UHJvdG8pOwotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIGlmIChwcm90
b3R5cGUtPnN0cnVjdHVyZSh2bSktPnR5cGVJbmZvKCkub3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1l
cygpKSB7Ci0gICAgICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgICAgICAgICBwcm90b3R5
cGUtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0UHJvcGVydHlOYW1lcyhwcm90b3R5cGUsIGdsb2JhbE9i
amVjdCwgcHJvcGVydHlOYW1lcywgbW9kZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICAgICAgcHJvdG90eXBlLT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFt
ZXMocHJvdG90eXBlLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwotICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwotICAgICAgICBuZXh0UHJvdG8g
PSBwcm90b3R5cGUtPmdldFByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKLSAgICAgICAgaWYgKG5leHRQcm90by5p
c051bGwoKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBwcm90b3R5cGUgPSBhc09iamVj
dChuZXh0UHJvdG8pOwotICAgIH0KLX0KLQogLy8gSW1wbGVtZW50cyBHZXRNZXRob2QoTywgUCkg
aW4gc2VjdGlvbiA3LjMuOSBvZiB0aGUgc3BlYy4KIC8vIGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5h
dGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvaW5kZXguaHRtbCNzZWMtZ2V0bWV0aG9kCiBKU1ZhbHVl
IEpTT2JqZWN0OjpnZXRNZXRob2QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbERh
dGEmIGNhbGxEYXRhLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3QgU3RyaW5nJiBlcnJv
ck1lc3NhZ2UpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJ
KHJldmlzaW9uIDI2Nzc2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2Jq
ZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTY3NCwxMyArNjc0LDEzIEBAIHB1YmxpYzoKICAgICBK
U19FWFBPUlRfUFJJVkFURSBib29sIGhhc0luc3RhbmNlKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1
ZSk7CiAgICAgc3RhdGljIGJvb2wgZGVmYXVsdEhhc0luc3RhbmNlKEpTR2xvYmFsT2JqZWN0Kiwg
SlNWYWx1ZSwgSlNWYWx1ZSBwcm90b3R5cGVQcm9wZXJ0eSk7CiAKLSAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxP
YmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7Ci0gICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2Jq
ZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9k
ZSk7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhK
U09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlv
bk1vZGUpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhKU0ds
b2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgdWludDMyX3QmIGluZGV4ZWRMZW5ndGgs
IHVpbnQzMl90JiBzdHJ1Y3R1cmVQcm9wZXJ0eUNvdW50KTsKKyAgICBKU19FWFBPUlRfUFJJVkFU
RSB2b2lkIGdldFByb3BlcnR5TmFtZXMoSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJh
eSYpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFt
ZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5Jik7CisgICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0T3duSW5kZXhQcm9wZXJ0eU5hbWVzKEpT
T2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYpOworICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09i
amVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmKTsKIAogICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyB1aW50MzJfdCBnZXRFbnVtZXJhYmxlTGVuZ3RoKEpTR2xvYmFs
T2JqZWN0KiwgSlNPYmplY3QqKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBn
ZXRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9w
ZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIHZvaWQgZ2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9i
amVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKIAogICAgIEpTX0VY
UE9SVF9QUklWQVRFIEpTVmFsdWUgdG9QcmltaXRpdmUoSlNHbG9iYWxPYmplY3QqLCBQcmVmZXJy
ZWRQcmltaXRpdmVUeXBlID0gTm9QcmVmZXJlbmNlKSBjb25zdDsKICAgICBib29sIGdldFByaW1p
dGl2ZU51bWJlcihKU0dsb2JhbE9iamVjdCosIGRvdWJsZSYgbnVtYmVyLCBKU1ZhbHVlJikgY29u
c3Q7CkBAIC0xNDA2LDYgKzE0MDYsMTMgQEAgQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0Ojpn
ZXRPd25Ob25JbgogICAgIHJldHVybiB0cnVlOwogfQogCitBTFdBWVNfSU5MSU5FIHZvaWQgSlNP
YmplY3Q6OmdldFByb3BlcnR5TmFtZXMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJv
cGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMpCit7CisgICAgdWludDMyX3QgaW5kZXhlZExl
bmd0aCA9IDA7IC8vIGlnbm9yZWQKKyAgICB1aW50MzJfdCBzdHJ1Y3R1cmVQcm9wZXJ0eUNvdW50
ID0gMDsgLy8gaWdub3JlZAorICAgIGdldFByb3BlcnR5TmFtZXMoZ2xvYmFsT2JqZWN0LCBwcm9w
ZXJ0eU5hbWVzLCBpbmRleGVkTGVuZ3RoLCBzdHJ1Y3R1cmVQcm9wZXJ0eUNvdW50KTsKK30KKwog
QUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0OjpmaWxsQ3VzdG9tR2V0dGVyUHJvcGVydHlTbG90
KFZNJiB2bSwgUHJvcGVydHlTbG90JiBzbG90LCBDdXN0b21HZXR0ZXJTZXR0ZXIqIGN1c3RvbUdl
dHRlclNldHRlciwgdW5zaWduZWQgYXR0cmlidXRlcywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7
CiAgICAgQVNTRVJUKGF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNz
b3JPclZhbHVlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVy
dHlOYW1lRW51bWVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oCShyZXZpc2lvbiAyNjc3NjcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaAko
d29ya2luZyBjb3B5KQpAQCAtMTE2LDIzICsxMTYsOSBAQCBpbmxpbmUgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yKiBwcm9wZXJ0CiAgICAgICAgICYmIGVudW1lcmF0b3ItPmNhY2hlZFByb3RvdHlw
ZUNoYWluKCkgPT0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihnbG9iYWxPYmplY3QsIGJhc2Up
KQogICAgICAgICByZXR1cm4gZW51bWVyYXRvcjsKIAotICAgIHVpbnQzMl90IG51bWJlclN0cnVj
dHVyZVByb3BlcnRpZXMgPSAwOwotCi0gICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydHlOYW1l
cyh2bSwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncywgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1
ZGUpOwotCi0gICAgaWYgKHN0cnVjdHVyZS0+Y2FuQWNjZXNzUHJvcGVydGllc1F1aWNrbHlGb3JF
bnVtZXJhdGlvbigpICYmIGluZGV4ZWRMZW5ndGggPT0gYmFzZS0+Z2V0QXJyYXlMZW5ndGgoKSkg
ewotICAgICAgICBiYXNlLT5tZXRob2RUYWJsZSh2bSktPmdldFN0cnVjdHVyZVByb3BlcnR5TmFt
ZXMoYmFzZSwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUoKSk7
Ci0gICAgICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7Ci0KLSAgICAgICAgbnVtYmVyU3Ry
dWN0dXJlUHJvcGVydGllcyA9IHByb3BlcnR5TmFtZXMuc2l6ZSgpOwotCi0gICAgICAgIGJhc2Ut
Pm1ldGhvZFRhYmxlKHZtKS0+Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMoYmFzZSwgZ2xvYmFsT2Jq
ZWN0LCBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUoKSk7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgLy8gR2VuZXJpYyBwcm9wZXJ0eSBuYW1lcyB2ZWN0b3IgY29udGFpbnMgYWxsIGluZGV4
ZWQgcHJvcGVydHkgbmFtZXMuCi0gICAgICAgIC8vIFNvIGRpc2FibGUgaW5kZXhlZCBwcm9wZXJ0
eSBlbnVtZXJhdGlvbiBwaGFzZSBieSBzZXR0aW5nIHxpbmRleGVkTGVuZ3RofCB0byAwLgotICAg
ICAgICBpbmRleGVkTGVuZ3RoID0gMDsKLSAgICAgICAgYmFzZS0+bWV0aG9kVGFibGUodm0pLT5n
ZXRQcm9wZXJ0eU5hbWVzKGJhc2UsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcywgRW51bWVy
YXRpb25Nb2RlKCkpOwotICAgIH0KKyAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0eU5hbWVz
KHZtLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzLCBEb250RW51bVByb3BlcnR5TW9kZTo6RXhj
bHVkZUJ1dE1hcmtBc1NlZW4pOworICAgIHVpbnQzMl90IHN0cnVjdHVyZVByb3BlcnR5Q291bnQg
PSAwOworICAgIGJhc2UtPmdldFByb3BlcnR5TmFtZXMoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5h
bWVzLCBpbmRleGVkTGVuZ3RoLCBzdHJ1Y3R1cmVQcm9wZXJ0eUNvdW50KTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKIAogICAgIEFTU0VSVChwcm9wZXJ0eU5hbWVz
LnNpemUoKSA8IFVJTlQzMl9NQVgpOwpAQCAtMTQxLDcgKzEyNyw3IEBAIGlubGluZSBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3IqIHByb3BlcnQKICAgICBib29sIHN1Y2Nlc3NmdWxseU5vcm1hbGl6
ZWRDaGFpbiA9IG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluKGdsb2JhbE9iamVjdCwgYmFzZSwgc2F3
UG9seVByb3RvKSAhPSBJbnZhbGlkUHJvdG90eXBlQ2hhaW47CiAKICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZUFmdGVyR2V0dGluZ1Byb3BlcnR5TmFtZXMgPSBiYXNlLT5zdHJ1Y3R1cmUodm0pOwot
ICAgIGVudW1lcmF0b3IgPSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNyZWF0ZSh2bSwgc3Ry
dWN0dXJlQWZ0ZXJHZXR0aW5nUHJvcGVydHlOYW1lcywgaW5kZXhlZExlbmd0aCwgbnVtYmVyU3Ry
dWN0dXJlUHJvcGVydGllcywgV1RGTW92ZShwcm9wZXJ0eU5hbWVzKSk7CisgICAgZW51bWVyYXRv
ciA9IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y3JlYXRlKHZtLCBzdHJ1Y3R1cmVBZnRlckdl
dHRpbmdQcm9wZXJ0eU5hbWVzLCBpbmRleGVkTGVuZ3RoLCBzdHJ1Y3R1cmVQcm9wZXJ0eUNvdW50
LCBXVEZNb3ZlKHByb3BlcnR5TmFtZXMpKTsKICAgICBpZiAoIWluZGV4ZWRMZW5ndGggJiYgc3Vj
Y2Vzc2Z1bGx5Tm9ybWFsaXplZENoYWluICYmIHN0cnVjdHVyZUFmdGVyR2V0dGluZ1Byb3BlcnR5
TmFtZXMgPT0gc3RydWN0dXJlKSB7CiAgICAgICAgIGVudW1lcmF0b3ItPnNldENhY2hlZFByb3Rv
dHlwZUNoYWluKHZtLCBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGdsb2JhbE9iamVjdCwgYmFz
ZSkpOwogICAgICAgICBpZiAoc3RydWN0dXJlLT5jYW5DYWNoZVByb3BlcnR5TmFtZUVudW1lcmF0
b3Iodm0pKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5jcHAJ
KHJldmlzaW9uIDI2Nzc2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJv
eHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsMTAgKzExNSwxMCBAQCBib29sIEpTUHJveHk6
OmRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlCiAgICAgcmV0dXJuIHRoaXNPYmplY3QtPnRhcmdl
dCgpLT5tZXRob2RUYWJsZShnbG9iYWxPYmplY3QtPnZtKCkpLT5kZWxldGVQcm9wZXJ0eUJ5SW5k
ZXgodGhpc09iamVjdC0+dGFyZ2V0KCksIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKTsKIH0K
IAotdm9pZCBKU1Byb3h5OjpnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVz
LCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNQcm94eTo6Z2V0T3duUHJvcGVydHlOYW1l
cyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0
eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcykKIHsKICAgICBKU1Byb3h5KiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTUHJveHkqPihvYmplY3QpOwotICAgIHRoaXNPYmplY3QtPnRhcmdldCgpLT5tZXRo
b2RUYWJsZShnbG9iYWxPYmplY3QtPnZtKCkpLT5nZXRQcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3Qt
PnRhcmdldCgpLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworICAgIHRoaXNP
YmplY3QtPnRhcmdldCgpLT5tZXRob2RUYWJsZShnbG9iYWxPYmplY3QtPnZtKCkpLT5nZXRPd25Q
cm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QtPnRhcmdldCgpLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5
TmFtZXMpOwogfQogCiB1aW50MzJfdCBKU1Byb3h5OjpnZXRFbnVtZXJhYmxlTGVuZ3RoKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBvYmplY3QpCkBAIC0xMjcsMjUgKzEy
Nyw2IEBAIHVpbnQzMl90IEpTUHJveHk6OmdldEVudW1lcmFibGVMZW5ndGgoSlMKICAgICByZXR1
cm4gdGhpc09iamVjdC0+dGFyZ2V0KCktPm1ldGhvZFRhYmxlKGdsb2JhbE9iamVjdC0+dm0oKSkt
PmdldEVudW1lcmFibGVMZW5ndGgoZ2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LT50YXJnZXQoKSk7
CiB9CiAKLXZvaWQgSlNQcm94eTo6Z2V0U3RydWN0dXJlUHJvcGVydHlOYW1lcyhKU09iamVjdCos
IEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpCi17
Ci0gICAgLy8gU2tpcCB0aGUgc3RydWN0dXJlIGxvb3AsIHNpbmNlIGl0IGlzIGludmFsaWQgZm9y
IHByb3hpZXMuCi19Ci0KLXZvaWQgSlNQcm94eTo6Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMoSlNP
YmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1l
QXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQotewotICAgIEpTUHJv
eHkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNQcm94eSo+KG9iamVjdCk7Ci0gICAgLy8gR2V0ICph
bGwqIG9mIHRoZSBwcm9wZXJ0eSBuYW1lcywgbm90IGp1c3QgdGhlIGdlbmVyaWMgb25lcywgc2lu
Y2Ugd2Ugc2tpcHBlZCB0aGUgc3RydWN0dXJlCi0gICAgLy8gb25lcyBhYm92ZS4KLSAgICB0aGlz
T2JqZWN0LT50YXJnZXQoKS0+bWV0aG9kVGFibGUoZ2xvYmFsT2JqZWN0LT52bSgpKS0+Z2V0UHJv
cGVydHlOYW1lcyh0aGlzT2JqZWN0LT50YXJnZXQoKSwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5h
bWVzLCBtb2RlKTsKLX0KLQotdm9pZCBKU1Byb3h5OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2Jq
ZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFy
cmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKLXsKLSAgICBKU1Byb3h5
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTUHJveHkqPihvYmplY3QpOwotICAgIHRoaXNPYmplY3Qt
PnRhcmdldCgpLT5tZXRob2RUYWJsZShnbG9iYWxPYmplY3QtPnZtKCkpLT5nZXRPd25Qcm9wZXJ0
eU5hbWVzKHRoaXNPYmplY3QtPnRhcmdldCgpLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMs
IG1vZGUpOwotfQotCiBib29sIEpTUHJveHk6OnNldFByb3RvdHlwZShKU09iamVjdCogb2JqZWN0
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSwgYm9vbCBz
aG91bGRUaHJvd0lmQ2FudFNldCkKIHsKICAgICBKU1Byb3h5KiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTUHJveHkqPihvYmplY3QpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
UHJveHkuaAkocmV2aXNpb24gMjY3NzY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBAIG5hbWVzcGFjZSBK
U0MgewogY2xhc3MgSlNQcm94eSA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoK
ICAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsKLSAgICBzdGF0aWMgY29uc3RleHBy
IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlk
ZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgT3ZlcnJp
ZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc0dldFByb3RvdHlwZSB8IElu
dGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm87
CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0
cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc0dldFByb3RvdHlwZSB8IEludGVyY2VwdHNHZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm87CiAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+CiAgICAgc3RhdGljIElzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCkBAIC05NSwxMSArOTUsOCBAQCBwcm90ZWN0ZWQ6
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgcHV0QnlJbmRleChKU0NlbGwqLCBK
U0dsb2JhbE9iamVjdCosIHVuc2lnbmVkLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKICAg
ICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBK
U0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgRGVsZXRlUHJvcGVydHlTbG90Jik7CiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2Vs
bCosIEpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCos
IFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKLSAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgdm9pZCBnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmpl
Y3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIHVpbnQzMl90IGdldEVudW1lcmFibGVMZW5ndGgoSlNHbG9iYWxPYmpl
Y3QqLCBKU09iamVjdCopOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldFN0
cnVjdHVyZVByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5
TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0
aWMgdm9pZCBnZXRHZW5lcmljUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0
KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2Jh
bE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5Jik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFBy
b3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgc2V0UHJvdG90eXBlKEpTT2JqZWN0
KiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93SWZDYW50U2V0KTsK
ICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgSlNWYWx1ZSBnZXRQcm90b3R5cGUoSlNPYmpl
Y3QqLCBKU0dsb2JhbE9iamVjdCopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAJKHJldmlzaW9uIDI2Nzc2NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01MywyMyArNTMsMTcgQEAgYm9vbCBKU1N5bWJvbFRhYmxlT2Jq
ZWN0OjpkZWxldGVQcm9wZXJ0eQogICAgIHJldHVybiBCYXNlOjpkZWxldGVQcm9wZXJ0eSh0aGlz
T2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLXZvaWQgSlNT
eW1ib2xUYWJsZU9iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBv
YmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBw
cm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNTeW1ib2xUYWJsZU9i
amVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVz
KQogewotICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBKU1N5bWJvbFRhYmxl
T2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU3ltYm9sVGFibGVPYmplY3QqPihvYmplY3Qp
OwogICAgIHsKICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcih0aGlzT2JqZWN0LT5z
eW1ib2xUYWJsZSgpLT5tX2xvY2spOwogICAgICAgICBTeW1ib2xUYWJsZTo6TWFwOjppdGVyYXRv
ciBlbmQgPSB0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5lbmQobG9ja2VyKTsKLSAgICAgICAg
Zm9yIChTeW1ib2xUYWJsZTo6TWFwOjppdGVyYXRvciBpdCA9IHRoaXNPYmplY3QtPnN5bWJvbFRh
YmxlKCktPmJlZ2luKGxvY2tlcik7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgaWYg
KCEoaXQtPnZhbHVlLmdldEF0dHJpYnV0ZXMoKSAmIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51
bSkgfHwgbW9kZS5pbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKCkpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoaXQtPmtleS0+aXNTeW1ib2woKSAmJiAhcHJvcGVydHlOYW1lcy5pbmNsdWRlU3ltYm9s
UHJvcGVydGllcygpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
ICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBpdC0+a2V5Lmdl
dCgpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgZm9yIChTeW1ib2xUYWJs
ZTo6TWFwOjppdGVyYXRvciBpdCA9IHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlKCktPmJlZ2luKGxv
Y2tlcik7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkV2l0
aERvbnRFbnVtKGl0LT5rZXkuZ2V0KCksIGl0LT52YWx1ZS5pc0RvbnRFbnVtKCkpOwogICAgIH0K
IAotICAgIEJhc2U6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBnbG9i
YWxPYmplY3QsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworICAgIEJhc2U6OmdldE93bk5vbkluZGV4
UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgJKHJldmlzaW9uIDI2Nzc2NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAkod29y
a2luZyBjb3B5KQpAQCAtMzksMTIgKzM5LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgSlNT
eW1ib2xUYWJsZU9iamVjdCA6IHB1YmxpYyBKU1Njb3BlIHsKIHB1YmxpYzoKICAgICB1c2luZyBC
YXNlID0gSlNTY29wZTsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZs
YWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0
eU5hbWVzOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBC
YXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93bk5vbkluZGV4UHJvcGVydHlOYW1l
czsKIAogICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3lt
Ym9sVGFibGUuZ2V0KCk7IH0KICAgICAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9v
bCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwg
RGVsZXRlUHJvcGVydHlTbG90Jik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQg
Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQ
cm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgSlNfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNH
bG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYpOwogICAgIAogICAgIHN0YXRpYyBwdHJk
aWZmX3Qgb2Zmc2V0T2ZTeW1ib2xUYWJsZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1N5
bWJvbFRhYmxlT2JqZWN0LCBtX3N5bWJvbFRhYmxlKTsgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1R5cGVJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlSW5mby5oCShyZXZpc2lvbiAyNjc3NjcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ4LDEzICs0OCw4IEBAIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgVHlwZUluZm9QZXJDZWwK
IC8vIE91dCBvZiBsaW5lIGZsYWdzLgogCiBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIEltcGxl
bWVudHNIYXNJbnN0YW5jZSA9IDEgPDwgODsKLXN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgT3Zl
cnJpZGVzR2V0UHJvcGVydHlOYW1lcyA9IDEgPDwgOTsKLS8vIE92ZXJyaWRlc0FueUZvcm1PZkdl
dFByb3BlcnR5TmFtZXMgbWVhbnMgdGhhdCB3ZSBjYW5ub3QgbWFrZSBhc3N1bXB0aW9ucyBhYm91
dAotLy8gdGhlIGNhY2hlYWJpbGl0eSBvciBlbnVtZXJhYmlsaXR5IG9mIHByb3BlcnR5IG5hbWVz
LCBhbmQgdGhlcmVmb3JlLCB3ZSdsbCBuZWVkCi0vLyB0byBkaXNhYmxlIGNlcnRhaW4gb3B0aW1p
emF0aW9ucy4gVGhpcyBmbGFnIHNob3VsZCBiZSBzZXQgaWYgb25lIG9yIG1vcmUgb2YgdGhlCi0v
LyBmb2xsb3dpbmcgT2JqZWN0IG1ldGhvZHMgYXJlIG92ZXJyaWRkZW46Ci0vLyAgICAgZ2V0T3du
UHJvcGVydHlOYW1lcywgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzLCBnZXRQcm9wZXJ0eU5h
bWVzCi1zdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIE92ZXJyaWRlc0FueUZvcm1PZkdldFByb3Bl
cnR5TmFtZXMgPSAxIDw8IDEwOworc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBPdmVycmlkZXNH
ZXRPd25Qcm9wZXJ0eU5hbWVzID0gMSA8PCA5Oworc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBP
dmVycmlkZXNHZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMgPSAxIDw8IDEwOwogc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcgPSAxIDw8IDExOwogc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZSA9IDEgPDwg
MTI7CiBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIE5ld0ltcHVyZVByb3BlcnR5RmlyZXNXYXRj
aHBvaW50cyA9IDEgPDwgMTM7CkBAIC0xMDMsOCArOTgsOSBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IGJvb2wgcGVyQ2VsbEJpdChJbmxpbmVUeXBlRmxhZ3MgZmxhZ3MpIHsgcmV0dXJuIGZsYWdzICYg
VHlwZUluZm9QZXJDZWxsQml0OyB9CiAgICAgYm9vbCBvdmVycmlkZXNUb1RoaXMoKSBjb25zdCB7
IHJldHVybiBpc1NldE9uRmxhZ3MxPE92ZXJyaWRlc1RvVGhpcz4oKTsgfQogICAgIGJvb2wgc3Ry
dWN0dXJlSXNJbW1vcnRhbCgpIGNvbnN0IHsgcmV0dXJuIGlzU2V0T25GbGFnczI8U3RydWN0dXJl
SXNJbW1vcnRhbD4oKTsgfQotICAgIGJvb2wgb3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcygpIGNv
bnN0IHsgcmV0dXJuIGlzU2V0T25GbGFnczI8T3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcz4oKTsg
fQotICAgIGJvb2wgb3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlOYW1lcygpIGNvbnN0IHsg
cmV0dXJuIGlzU2V0T25GbGFnczI8T3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlOYW1lcz4o
KTsgfQorICAgIGJvb2wgb3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcygpIGNvbnN0IHsgcmV0
dXJuIGlzU2V0T25GbGFnczI8T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcz4oKTsgfQorICAg
IGJvb2wgb3ZlcnJpZGVzR2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKCkgY29uc3QgeyByZXR1
cm4gaXNTZXRPbkZsYWdzMjxPdmVycmlkZXNHZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXM+KCk7
IH0KKyAgICBib29sIG92ZXJyaWRlc0FueUZvcm1PZkdldE93blByb3BlcnR5TmFtZXMoKSBjb25z
dCB7IHJldHVybiBvdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzKCkgfHwgb3ZlcnJpZGVzR2V0
T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKCk7IH0KICAgICBib29sIG92ZXJyaWRlc0dldFByb3Rv
dHlwZSgpIGNvbnN0IHsgcmV0dXJuIGlzU2V0T25GbGFnczI8T3ZlcnJpZGVzR2V0UHJvdG90eXBl
PigpOyB9CiAgICAgYm9vbCBwcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcoKSBjb25zdCB7IHJldHVy
biBpc1NldE9uRmxhZ3MyPFByb2hpYml0c1Byb3BlcnR5Q2FjaGluZz4oKTsgfQogICAgIGJvb2wg
Z2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmUoKSBjb25zdCB7IHJldHVybiBpc1NldE9uRmxhZ3My
PEdldE93blByb3BlcnR5U2xvdElzSW1wdXJlPigpOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAy
Njc3NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rv
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4Niw4ICsxODYsOCBAQCBKU1ZhbHVlIG9iamVjdENv
bnN0cnVjdG9yR2V0T3duUHJvcGVydHlECiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBQcm9w
ZXJ0eU5hbWVBcnJheSBwcm9wZXJ0aWVzKHZtLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzQW5k
U3ltYm9scywgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpOwotICAgIG9iamVjdC0+bWV0aG9k
VGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9w
ZXJ0aWVzLCBFbnVtZXJhdGlvbk1vZGUoRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSkp
OworICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnRpZXModm0sIFByb3BlcnR5TmFtZU1vZGU6
OlN0cmluZ3NBbmRTeW1ib2xzLCBEb250RW51bVByb3BlcnR5TW9kZTo6SW5jbHVkZSk7CisgICAg
b2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBnbG9i
YWxPYmplY3QsIHByb3BlcnRpZXMpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsg
fSk7CiAKICAgICBKU09iamVjdCogZGVzY3JpcHRvcnMgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChn
bG9iYWxPYmplY3QpOwpAQCAtMjM5LDcgKzIzOSw3IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElP
TihvYmplY3RDb25zdHJ1Y3QKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCkudG9PYmpl
Y3QoZ2xvYmFsT2JqZWN0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29k
ZShvd25Qcm9wZXJ0eUtleXMoZ2xvYmFsT2JqZWN0LCBvYmplY3QsIFByb3BlcnR5TmFtZU1vZGU6
OlN0cmluZ3MsIERvbnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUsIENhY2hlZFByb3BlcnR5
TmFtZXNLaW5kOjpHZXRPd25Qcm9wZXJ0eU5hbWVzKSkpOworICAgIFJFTEVBU0VfQU5EX1JFVFVS
TihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKG93blByb3BlcnR5S2V5cyhnbG9iYWxPYmplY3QsIG9i
amVjdCwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncywgRG9udEVudW1Qcm9wZXJ0eU1vZGU6Oklu
Y2x1ZGUsIENhY2hlZFByb3BlcnR5TmFtZXNLaW5kOjpHZXRPd25Qcm9wZXJ0eU5hbWVzKSkpOwog
fQogCiAvLyBGSVhNRTogVXNlIHRoZSBlbnVtZXJhdGlvbiBjYWNoZS4KQEAgLTI0OSw3ICsyNDks
NyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04ob2JqZWN0Q29uc3RydWN0CiAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBj
YWxsRnJhbWUtPmFyZ3VtZW50KDApLnRvT2JqZWN0KGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUob3duUHJvcGVydHlLZXlzKGdsb2JhbE9iamVj
dCwgb2JqZWN0LCBQcm9wZXJ0eU5hbWVNb2RlOjpTeW1ib2xzLCBEb250RW51bVByb3BlcnRpZXNN
b2RlOjpJbmNsdWRlLCBXVEY6Om51bGxvcHQpKSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNj
b3BlLCBKU1ZhbHVlOjplbmNvZGUob3duUHJvcGVydHlLZXlzKGdsb2JhbE9iamVjdCwgb2JqZWN0
LCBQcm9wZXJ0eU5hbWVNb2RlOjpTeW1ib2xzLCBEb250RW51bVByb3BlcnR5TW9kZTo6SW5jbHVk
ZSwgV1RGOjpudWxsb3B0KSkpOwogfQogCiBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04ob2JqZWN0
Q29uc3RydWN0b3JLZXlzLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUpKQpAQCAtMjU4LDcgKzI1OCw3IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElP
TihvYmplY3RDb25zdHJ1Y3QKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCkudG9PYmpl
Y3QoZ2xvYmFsT2JqZWN0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29k
ZShvd25Qcm9wZXJ0eUtleXMoZ2xvYmFsT2JqZWN0LCBvYmplY3QsIFByb3BlcnR5TmFtZU1vZGU6
OlN0cmluZ3MsIERvbnRFbnVtUHJvcGVydGllc01vZGU6OkV4Y2x1ZGUsIENhY2hlZFByb3BlcnR5
TmFtZXNLaW5kOjpLZXlzKSkpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1
ZTo6ZW5jb2RlKG93blByb3BlcnR5S2V5cyhnbG9iYWxPYmplY3QsIG9iamVjdCwgUHJvcGVydHlO
YW1lTW9kZTo6U3RyaW5ncywgRG9udEVudW1Qcm9wZXJ0eU1vZGU6OkV4Y2x1ZGUsIENhY2hlZFBy
b3BlcnR5TmFtZXNLaW5kOjpLZXlzKSkpOwogfQogCiBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04o
b2JqZWN0Q29uc3RydWN0b3JBc3NpZ24sIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBD
YWxsRnJhbWUqIGNhbGxGcmFtZSkpCkBAIC0yOTUsNyArMjk1LDcgQEAgSlNDX0RFRklORV9IT1NU
X0ZVTkNUSU9OKG9iamVjdENvbnN0cnVjdAogICAgICAgICAgICAgYXV0byBjYW5QZXJmb3JtRmFz
dFByb3BlcnR5RW51bWVyYXRpb25Gb3JPYmplY3RBc3NpZ24gPSBbXSAoU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpIHsKICAgICAgICAgICAgICAgICBpZiAoc3RydWN0dXJlLT50eXBlSW5mbygpLm92ZXJy
aWRlc0dldE93blByb3BlcnR5U2xvdCgpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5vdmVycmlkZXNB
bnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVzKCkpCisgICAgICAgICAgICAgICAgaWYgKHN0cnVjdHVy
ZS0+dHlwZUluZm8oKS5vdmVycmlkZXNBbnlGb3JtT2ZHZXRPd25Qcm9wZXJ0eU5hbWVzKCkpCiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICAvLyBGSVhN
RTogSW5kZXhlZCBwcm9wZXJ0aWVzIGNhbiBiZSBoYW5kbGVkLgogICAgICAgICAgICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODUzNTgKQEAgLTM1Nyw4
ICszNTcsOCBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04ob2JqZWN0Q29uc3RydWN0CiAgICAg
ICAgIC8vIEZvciBleGFtcGxlLCBbW0dldF1dIG9mIHNvdXJjZSBvYmplY3QgY291bGQgY29uZmln
dXJlIHNldHRlciB0byB0YXJnZXQgb2JqZWN0LiBTbyBkaXNhYmxlIHRoZSBmYXN0IHBhdGguCiAg
ICAgICAgIHRhcmdldENhblBlcmZvcm1GYXN0UHV0ID0gZmFsc2U7CiAKLSAgICAgICAgUHJvcGVy
dHlOYW1lQXJyYXkgcHJvcGVydGllcyh2bSwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5nc0FuZFN5
bWJvbHMsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKTsKLSAgICAgICAgc291cmNlLT5tZXRo
b2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMoc291cmNlLCBnbG9iYWxPYmplY3QsIHBy
b3BlcnRpZXMsIEVudW1lcmF0aW9uTW9kZShEb250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRl
KSk7CisgICAgICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnRpZXModm0sIFByb3BlcnR5TmFt
ZU1vZGU6OlN0cmluZ3NBbmRTeW1ib2xzLCBEb250RW51bVByb3BlcnR5TW9kZTo6SW5jbHVkZSk7
CisgICAgICAgIHNvdXJjZS0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKHNv
dXJjZSwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0aWVzKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgeyB9KTsKIAogICAgICAgICB1bnNpZ25lZCBudW1Qcm9wZXJ0aWVzID0gcHJv
cGVydGllcy5zaXplKCk7CkBAIC00MDMsOCArNDAzLDggQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNU
SU9OKG9iamVjdENvbnN0cnVjdAogICAgIEpTQXJyYXkqIHZhbHVlcyA9IGNvbnN0cnVjdEVtcHR5
QXJyYXkoZ2xvYmFsT2JqZWN0LCBudWxscHRyKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB7IH0pOwogCi0gICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydGllcyh2bSwgUHJvcGVy
dHlOYW1lTW9kZTo6U3RyaW5ncywgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpOwotICAgIHRh
cmdldC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRhcmdldCwgZ2xvYmFs
T2JqZWN0LCBwcm9wZXJ0aWVzLCBFbnVtZXJhdGlvbk1vZGUoRG9udEVudW1Qcm9wZXJ0aWVzTW9k
ZTo6SW5jbHVkZSkpOworICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnRpZXModm0sIFByb3Bl
cnR5TmFtZU1vZGU6OlN0cmluZ3MsIERvbnRFbnVtUHJvcGVydHlNb2RlOjpJbmNsdWRlKTsKKyAg
ICB0YXJnZXQtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQsIGds
b2JhbE9iamVjdCwgcHJvcGVydGllcyk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKIAogICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKQEAgLTU1Nyw4ICs1NTcsOCBAQCBzdGF0
aWMgSlNWYWx1ZSBkZWZpbmVQcm9wZXJ0aWVzKEpTR2xvYmFsCiAgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
IAotICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnR5TmFtZXModm0sIFByb3BlcnR5TmFtZU1v
ZGU6OlN0cmluZ3NBbmRTeW1ib2xzLCBQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSk7Ci0gICAg
YXNPYmplY3QocHJvcGVydGllcyktPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1l
cyhhc09iamVjdChwcm9wZXJ0aWVzKSwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBFbnVt
ZXJhdGlvbk1vZGUoRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6RXhjbHVkZSkpOworICAgIFByb3Bl
cnR5TmFtZUFycmF5IHByb3BlcnR5TmFtZXModm0sIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3NB
bmRTeW1ib2xzLCBEb250RW51bVByb3BlcnR5TW9kZTo6RXhjbHVkZSk7CisgICAgYXNPYmplY3Qo
cHJvcGVydGllcyktPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhhc09iamVj
dChwcm9wZXJ0aWVzKSwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzKTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIHNpemVfdCBudW1Qcm9wZXJ0aWVzID0gcHJv
cGVydHlOYW1lcy5zaXplKCk7CiAgICAgVmVjdG9yPFByb3BlcnR5RGVzY3JpcHRvcj4gZGVzY3Jp
cHRvcnM7CkBAIC02NDgsOCArNjQ4LDggQEAgYm9vbCBzZXRJbnRlZ3JpdHlMZXZlbChKU0dsb2Jh
bE9iamVjdCogZwogICAgIGlmIChVTkxJS0VMWSghc3VjY2VzcykpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnRpZXModm0sIFByb3BlcnR5TmFt
ZU1vZGU6OlN0cmluZ3NBbmRTeW1ib2xzLCBQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSk7Ci0g
ICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBn
bG9iYWxPYmplY3QsIHByb3BlcnRpZXMsIEVudW1lcmF0aW9uTW9kZShEb250RW51bVByb3BlcnRp
ZXNNb2RlOjpJbmNsdWRlKSk7CisgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydGllcyh2bSwg
UHJvcGVydHlOYW1lTW9kZTo6U3RyaW5nc0FuZFN5bWJvbHMsIERvbnRFbnVtUHJvcGVydHlNb2Rl
OjpJbmNsdWRlKTsKKyAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlO
YW1lcyhvYmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydGllcyk7CiAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgZmFsc2UpOwogCiAgICAgUHJvcGVydHlOYW1lQXJyYXk6OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IHByb3BlcnRpZXMuZW5kKCk7CkBAIC02OTUsOCArNjk1LDggQEAgYm9vbCB0
ZXN0SW50ZWdyaXR5TGV2ZWwoSlNHbG9iYWxPYmplY3QqIAogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICAvLyA2LiBMZXQga2V5cyBiZSA/IE8uW1tPd25Qcm9wZXJ0eUtleXNdXSgpLgotICAg
IFByb3BlcnR5TmFtZUFycmF5IGtleXModm0sIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3NBbmRT
eW1ib2xzLCBQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSk7Ci0gICAgb2JqZWN0LT5tZXRob2RU
YWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBnbG9iYWxPYmplY3QsIGtleXMs
IEVudW1lcmF0aW9uTW9kZShEb250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKSk7CisgICAg
UHJvcGVydHlOYW1lQXJyYXkga2V5cyh2bSwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5nc0FuZFN5
bWJvbHMsIERvbnRFbnVtUHJvcGVydHlNb2RlOjpJbmNsdWRlKTsKKyAgICBvYmplY3QtPm1ldGhv
ZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGdsb2JhbE9iamVjdCwga2V5
cyk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIC8vIDcuIEZv
ciBlYWNoIGVsZW1lbnQgayBvZiBrZXlzLCBkbwpAQCAtODYyLDcgKzg2Miw3IEBAIEpTQ19ERUZJ
TkVfSE9TVF9GVU5DVElPTihvYmplY3RDb25zdHJ1Y3QKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzQm9vbGVhbihzYW1lVmFsdWUoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50
KDApLCBjYWxsRnJhbWUtPmFyZ3VtZW50KDEpKSkpOwogfQogCi1KU0FycmF5KiBvd25Qcm9wZXJ0
eUtleXMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIG9iamVjdCwgUHJv
cGVydHlOYW1lTW9kZSBwcm9wZXJ0eU5hbWVNb2RlLCBEb250RW51bVByb3BlcnRpZXNNb2RlIGRv
bnRFbnVtUHJvcGVydGllc01vZGUsIE9wdGlvbmFsPENhY2hlZFByb3BlcnR5TmFtZXNLaW5kPiBr
aW5kKQorSlNBcnJheSogb3duUHJvcGVydHlLZXlzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTT2JqZWN0KiBvYmplY3QsIFByb3BlcnR5TmFtZU1vZGUgcHJvcGVydHlOYW1lTW9kZSwg
RG9udEVudW1Qcm9wZXJ0eU1vZGUgZG9udEVudW1Qcm9wZXJ0eU1vZGUsIE9wdGlvbmFsPENhY2hl
ZFByb3BlcnR5TmFtZXNLaW5kPiBraW5kKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC04Nzcs
OCArODc3LDggQEAgSlNBcnJheSogb3duUHJvcGVydHlLZXlzKEpTR2xvYmFsT2JqZWN0KgogICAg
ICAgICB9CiAgICAgfQogCi0gICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydGllcyh2bSwgcHJv
cGVydHlOYW1lTW9kZSwgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpOwotICAgIG9iamVjdC0+
bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZ2xvYmFsT2JqZWN0
LCBwcm9wZXJ0aWVzLCBFbnVtZXJhdGlvbk1vZGUoZG9udEVudW1Qcm9wZXJ0aWVzTW9kZSkpOwor
ICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnRpZXModm0sIHByb3BlcnR5TmFtZU1vZGUsIGRv
bnRFbnVtUHJvcGVydHlNb2RlKTsKKyAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3du
UHJvcGVydHlOYW1lcyhvYmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydGllcyk7CiAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAKICAgICBpZiAocHJvcGVydHlOYW1l
TW9kZSAhPSBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzQW5kU3ltYm9scykgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5oCShy
ZXZpc2lvbiAyNjc3NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RD
b25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjMsNyArMTYzLDcgQEAgSlNfRVhQT1JU
X1BSSVZBVEUgSlNPYmplY3QqIG9iamVjdENvbnN0cgogSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmpl
Y3QqIG9iamVjdENvbnN0cnVjdG9yU2VhbChKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0Kik7CiBK
U1ZhbHVlIG9iamVjdENvbnN0cnVjdG9yR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTR2xvYmFs
T2JqZWN0KiwgSlNPYmplY3QqLCBjb25zdCBJZGVudGlmaWVyJik7CiBKU1ZhbHVlIG9iamVjdENv
bnN0cnVjdG9yR2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhKU0dsb2JhbE9iamVjdCosIEpTT2Jq
ZWN0Kik7Ci1KU0FycmF5KiBvd25Qcm9wZXJ0eUtleXMoSlNHbG9iYWxPYmplY3QqLCBKU09iamVj
dCosIFByb3BlcnR5TmFtZU1vZGUsIERvbnRFbnVtUHJvcGVydGllc01vZGUsIE9wdGlvbmFsPENh
Y2hlZFByb3BlcnR5TmFtZXNLaW5kPik7CitKU0FycmF5KiBvd25Qcm9wZXJ0eUtleXMoSlNHbG9i
YWxPYmplY3QqLCBKU09iamVjdCosIFByb3BlcnR5TmFtZU1vZGUsIERvbnRFbnVtUHJvcGVydHlN
b2RlLCBPcHRpb25hbDxDYWNoZWRQcm9wZXJ0eU5hbWVzS2luZD4pOwogYm9vbCB0b1Byb3BlcnR5
RGVzY3JpcHRvcihKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUsIFByb3BlcnR5RGVzY3JpcHRvciYp
OwogCiBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKG9iamVjdENvbnN0cnVjdG9ySXMpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlOYW1lQXJyYXkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU5hbWVBcnJh
eS5oCShyZXZpc2lvbiAyNjc3NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Q
cm9wZXJ0eU5hbWVBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAq
ICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiAgQ29weXJpZ2h0IChDKSAyMDIwIEFsZXhleSBTaHZheWthIDxzaHZhaWthbGVzaEBnbWFp
bC5jb20+LgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI2LDYgKzI3LDI1IEBACiAKIG5hbWVz
cGFjZSBKU0MgewogCitlbnVtIGNsYXNzIFByb3BlcnR5TmFtZU1vZGUgOiB1aW50OF90IHsKKyAg
ICBTeW1ib2xzID0gMSA8PCAwLAorICAgIFN0cmluZ3MgPSAxIDw8IDEsCisgICAgU3RyaW5nc0Fu
ZFN5bWJvbHMgPSBTeW1ib2xzIHwgU3RyaW5ncywKK307CisKK2VudW0gY2xhc3MgRG9udEVudW1Q
cm9wZXJ0eU1vZGUgOiB1aW50OF90IHsKKyAgICBJbmNsdWRlLAorICAgIEV4Y2x1ZGUsCisgICAg
RXhjbHVkZUJ1dE1hcmtBc1NlZW4sIC8vIHRvIGFjY29tb2RhdGUgZm9yL2luICJzaGFkb3dpbmci
IChodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWVudW1lcmF0ZS1vYmplY3QtcHJvcGVydGll
cykKK307CisKK2VudW0gY2xhc3MgUHJpdmF0ZVN5bWJvbE1vZGUgOiB1aW50OF90IHsKKyAgICBJ
bmNsdWRlLAorICAgIEV4Y2x1ZGUsCit9OworCit0eXBlZGVmIFRyaVN0YXRlIEVudW1lcmFibGU7
CisKIC8vIEZJWE1FOiBSZW5hbWUgdG8gUHJvcGVydHlOYW1lQXJyYXkuCiBjbGFzcyBQcm9wZXJ0
eU5hbWVBcnJheURhdGEgOiBwdWJsaWMgUmVmQ291bnRlZDxQcm9wZXJ0eU5hbWVBcnJheURhdGE+
IHsKIHB1YmxpYzoKQEAgLTQ2LDI0ICs2Niw0MyBAQCBwcml2YXRlOgogLy8gRklYTUU6IFJlbmFt
ZSB0byBQcm9wZXJ0eU5hbWVBcnJheUJ1aWxkZXIuCiBjbGFzcyBQcm9wZXJ0eU5hbWVBcnJheSB7
CiBwdWJsaWM6Ci0gICAgUHJvcGVydHlOYW1lQXJyYXkoVk0mIHZtLCBQcm9wZXJ0eU5hbWVNb2Rl
IHByb3BlcnR5TmFtZU1vZGUsIFByaXZhdGVTeW1ib2xNb2RlIHByaXZhdGVTeW1ib2xNb2RlKQor
ICAgIFByb3BlcnR5TmFtZUFycmF5KFZNJiB2bSwgUHJvcGVydHlOYW1lTW9kZSBwcm9wZXJ0eU5h
bWVNb2RlLCBEb250RW51bVByb3BlcnR5TW9kZSBkb250RW51bVByb3BlcnR5TW9kZSwgUHJpdmF0
ZVN5bWJvbE1vZGUgcHJpdmF0ZVN5bWJvbE1vZGUgPSBQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVk
ZSkKICAgICAgICAgOiBtX2RhdGEoUHJvcGVydHlOYW1lQXJyYXlEYXRhOjpjcmVhdGUoKSkKICAg
ICAgICAgLCBtX3ZtKHZtKQogICAgICAgICAsIG1fcHJvcGVydHlOYW1lTW9kZShwcm9wZXJ0eU5h
bWVNb2RlKQorICAgICAgICAsIG1fZG9udEVudW1Qcm9wZXJ0eU1vZGUoZG9udEVudW1Qcm9wZXJ0
eU1vZGUpCiAgICAgICAgICwgbV9wcml2YXRlU3ltYm9sTW9kZShwcml2YXRlU3ltYm9sTW9kZSkK
ICAgICB7CiAgICAgfQogCiAgICAgVk0mIHZtKCkgeyByZXR1cm4gbV92bTsgfQogCi0gICAgdm9p
ZCBhZGQodWludDMyX3QgaW5kZXgpCisgICAgdGVtcGxhdGU8RW51bWVyYWJsZSBlbnVtZXJhYmxl
PgorICAgIHZvaWQgYWRkKHVuc2lnbmVkIGluZGV4KQogICAgIHsKLSAgICAgICAgYWRkKElkZW50
aWZpZXI6OmZyb20obV92bSwgaW5kZXgpKTsKKyAgICAgICAgYWRkPGVudW1lcmFibGU+KElkZW50
aWZpZXI6OmZyb20obV92bSwgaW5kZXgpKTsKICAgICB9CiAKLSAgICB2b2lkIGFkZChjb25zdCBJ
ZGVudGlmaWVyJik7Ci0gICAgdm9pZCBhZGQoVW5pcXVlZFN0cmluZ0ltcGwqKTsKLSAgICB2b2lk
IGFkZFVuY2hlY2tlZChVbmlxdWVkU3RyaW5nSW1wbCopOworICAgIHRlbXBsYXRlPEVudW1lcmFi
bGUgZW51bWVyYWJsZT4KKyAgICB2b2lkIGFkZChVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQorICAg
IHsKKyAgICAgICAgYWRkPGVudW1lcmFibGU+KElkZW50aWZpZXI6OmZyb21VaWQobV92bSwgdWlk
KSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8RW51bWVyYWJsZSBlbnVtZXJhYmxlPgorICAgIHZv
aWQgYWRkKGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIpCisgICAgeworICAgICAgICBBU1NF
UlQoZW51bWVyYWJsZSA9PSBFbnVtZXJhYmxlOjpJbmRldGVybWluYXRlID8gbV9kb250RW51bVBy
b3BlcnR5TW9kZSA9PSBEb250RW51bVByb3BlcnR5TW9kZTo6SW5jbHVkZSA6IHRydWUpOworICAg
ICAgICBhZGRXaXRoRG9udEVudW0oaWRlbnRpZmllciwgZW51bWVyYWJsZSA9PSBFbnVtZXJhYmxl
OjpGYWxzZSk7CisgICAgfQorCisgICAgdm9pZCBhZGRXaXRoRG9udEVudW0oVW5pcXVlZFN0cmlu
Z0ltcGwqIHVpZCwgYm9vbCBkb250RW51bSkKKyAgICB7CisgICAgICAgIGFkZFdpdGhEb250RW51
bShJZGVudGlmaWVyOjpmcm9tVWlkKG1fdm0sIHVpZCksIGRvbnRFbnVtKTsKKyAgICB9CisKKyAg
ICB2b2lkIGFkZFdpdGhEb250RW51bShjb25zdCBJZGVudGlmaWVyJiwgYm9vbCBkb250RW51bSk7
CisgICAgdm9pZCBhZGRLbm93blVuaXF1ZVdpdGhEb250RW51bShVbmlxdWVkU3RyaW5nSW1wbCos
IGJvb2wgZG9udEVudW0pOwogCiAgICAgSWRlbnRpZmllciYgb3BlcmF0b3JbXSh1bnNpZ25lZCBp
KSB7IHJldHVybiBtX2RhdGEtPnByb3BlcnR5TmFtZVZlY3RvcigpW2ldOyB9CiAgICAgY29uc3Qg
SWRlbnRpZmllciYgb3BlcmF0b3JbXSh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX2RhdGEt
PnByb3BlcnR5TmFtZVZlY3RvcigpW2ldOyB9CkBAIC03MSw4ICsxMTAsNyBAQCBwdWJsaWM6CiAg
ICAgUHJvcGVydHlOYW1lQXJyYXlEYXRhKiBkYXRhKCkgeyByZXR1cm4gbV9kYXRhLmdldCgpOyB9
CiAgICAgUmVmUHRyPFByb3BlcnR5TmFtZUFycmF5RGF0YT4gcmVsZWFzZURhdGEoKSB7IHJldHVy
biBXVEZNb3ZlKG1fZGF0YSk7IH0KIAotICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhlc2UgZnVuY3Rp
b25zLgotICAgIGJvb2wgY2FuQWRkS25vd25VbmlxdWVGb3JTdHJ1Y3R1cmUoKSBjb25zdCB7IHJl
dHVybiBtX2RhdGEtPnByb3BlcnR5TmFtZVZlY3RvcigpLmlzRW1wdHkoKTsgfQorICAgIGJvb2wg
aXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS0+cHJvcGVydHlOYW1lVmVjdG9yKCkuaXNF
bXB0eSgpICYmICghbV9zZXQgfHwgbV9zZXQtPmlzRW1wdHkoKSk7IH0KICAgICB0eXBlZGVmIFBy
b3BlcnR5TmFtZUFycmF5RGF0YTo6UHJvcGVydHlOYW1lVmVjdG9yOjpjb25zdF9pdGVyYXRvciBj
b25zdF9pdGVyYXRvcjsKICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS0+
cHJvcGVydHlOYW1lVmVjdG9yKCkuc2l6ZSgpOyB9CiAgICAgY29uc3RfaXRlcmF0b3IgYmVnaW4o
KSBjb25zdCB7IHJldHVybiBtX2RhdGEtPnByb3BlcnR5TmFtZVZlY3RvcigpLmJlZ2luKCk7IH0K
QEAgLTgyLDU4ICsxMjAsNjcgQEAgcHVibGljOgogICAgIGJvb2wgaW5jbHVkZVN0cmluZ1Byb3Bl
cnRpZXMoKSBjb25zdDsKIAogICAgIFByb3BlcnR5TmFtZU1vZGUgcHJvcGVydHlOYW1lTW9kZSgp
IGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydHlOYW1lTW9kZTsgfQorICAgIERvbnRFbnVtUHJvcGVy
dHlNb2RlIGRvbnRFbnVtUHJvcGVydHlNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9kb250RW51bVBy
b3BlcnR5TW9kZTsgfQogICAgIFByaXZhdGVTeW1ib2xNb2RlIHByaXZhdGVTeW1ib2xNb2RlKCkg
Y29uc3QgeyByZXR1cm4gbV9wcml2YXRlU3ltYm9sTW9kZTsgfQogCiBwcml2YXRlOgotICAgIHZv
aWQgYWRkVW5jaGVja2VkSW50ZXJuYWwoVW5pcXVlZFN0cmluZ0ltcGwqKTsKICAgICBib29sIGlz
VWlkTWF0Y2hlZFRvVHlwZU1vZGUoVW5pcXVlZFN0cmluZ0ltcGwqIGlkZW50aWZpZXIpOworICAg
IHZvaWQgaW5pdGlhbGl6ZVNldElmTmVjZXNzYXJ5KCk7CiAKICAgICBSZWZQdHI8UHJvcGVydHlO
YW1lQXJyYXlEYXRhPiBtX2RhdGE7Ci0gICAgSGFzaFNldDxVbmlxdWVkU3RyaW5nSW1wbCo+IG1f
c2V0OworICAgIEhhc2hTZXQ8VW5pcXVlZFN0cmluZ0ltcGwqPiogbV9zZXQgeyBudWxscHRyIH07
CiAgICAgVk0mIG1fdm07CiAgICAgUHJvcGVydHlOYW1lTW9kZSBtX3Byb3BlcnR5TmFtZU1vZGU7
CisgICAgRG9udEVudW1Qcm9wZXJ0eU1vZGUgbV9kb250RW51bVByb3BlcnR5TW9kZTsKICAgICBQ
cml2YXRlU3ltYm9sTW9kZSBtX3ByaXZhdGVTeW1ib2xNb2RlOwogfTsKIAotQUxXQVlTX0lOTElO
RSB2b2lkIFByb3BlcnR5TmFtZUFycmF5OjphZGQoY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmll
cikKK0FMV0FZU19JTkxJTkUgdm9pZCBQcm9wZXJ0eU5hbWVBcnJheTo6YWRkV2l0aERvbnRFbnVt
KGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIsIGJvb2wgZG9udEVudW0pCiB7Ci0gICAgYWRk
KGlkZW50aWZpZXIuaW1wbCgpKTsKLX0KKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHNl
dFRocmVzaG9sZCA9IDIwOwogCi1BTFdBWVNfSU5MSU5FIHZvaWQgUHJvcGVydHlOYW1lQXJyYXk6
OmFkZFVuY2hlY2tlZEludGVybmFsKFVuaXF1ZWRTdHJpbmdJbXBsKiBpZGVudGlmaWVyKQotewot
ICAgIG1fZGF0YS0+cHJvcGVydHlOYW1lVmVjdG9yKCkuYXBwZW5kKElkZW50aWZpZXI6OmZyb21V
aWQobV92bSwgaWRlbnRpZmllcikpOwotfQorICAgIGlmIChkb250RW51bSAmJiBtX2RvbnRFbnVt
UHJvcGVydHlNb2RlID09IERvbnRFbnVtUHJvcGVydHlNb2RlOjpFeGNsdWRlKQorICAgICAgICBy
ZXR1cm47CisgICAgaWYgKCFpc1VpZE1hdGNoZWRUb1R5cGVNb2RlKGlkZW50aWZpZXIuaW1wbCgp
KSkKKyAgICAgICAgcmV0dXJuOwogCi1BTFdBWVNfSU5MSU5FIHZvaWQgUHJvcGVydHlOYW1lQXJy
YXk6OmFkZFVuY2hlY2tlZChVbmlxdWVkU3RyaW5nSW1wbCogaWRlbnRpZmllcikKLXsKLSAgICBp
ZiAoIWlzVWlkTWF0Y2hlZFRvVHlwZU1vZGUoaWRlbnRpZmllcikpCisgICAgYm9vbCBtYXJrQXNT
ZWVuID0gZG9udEVudW0gJiYgbV9kb250RW51bVByb3BlcnR5TW9kZSA9PSBEb250RW51bVByb3Bl
cnR5TW9kZTo6RXhjbHVkZUJ1dE1hcmtBc1NlZW47CisgICAgaWYgKG1hcmtBc1NlZW4gfHwgc2l6
ZSgpID49IHNldFRocmVzaG9sZCkKKyAgICAgICAgaW5pdGlhbGl6ZVNldElmTmVjZXNzYXJ5KCk7
CisKKyAgICBpZiAobV9zZXQpIHsKKyAgICAgICAgaWYgKCFtX3NldC0+YWRkKGlkZW50aWZpZXIu
aW1wbCgpKS5pc05ld0VudHJ5KQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0gZWxzZSBpZiAo
bV9kYXRhLT5wcm9wZXJ0eU5hbWVWZWN0b3IoKS5jb250YWlucyhpZGVudGlmaWVyKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKG1hcmtBc1NlZW4pCiAgICAgICAgIHJldHVybjsKLSAgICBh
ZGRVbmNoZWNrZWRJbnRlcm5hbChpZGVudGlmaWVyKTsKKyAgICBtX2RhdGEtPnByb3BlcnR5TmFt
ZVZlY3RvcigpLmFwcGVuZChpZGVudGlmaWVyKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIFBy
b3BlcnR5TmFtZUFycmF5OjphZGQoVW5pcXVlZFN0cmluZ0ltcGwqIGlkZW50aWZpZXIpCitBTFdB
WVNfSU5MSU5FIHZvaWQgUHJvcGVydHlOYW1lQXJyYXk6OmFkZEtub3duVW5pcXVlV2l0aERvbnRF
bnVtKFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIGJvb2wgZG9udEVudW0pCiB7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciB1bnNpZ25lZCBzZXRUaHJlc2hvbGQgPSAyMDsKKyAgICBBU1NFUlQodWlkKTsK
IAotICAgIEFTU0VSVChpZGVudGlmaWVyKTsKLQotICAgIGlmICghaXNVaWRNYXRjaGVkVG9UeXBl
TW9kZShpZGVudGlmaWVyKSkKKyAgICBpZiAoZG9udEVudW0gJiYgbV9kb250RW51bVByb3BlcnR5
TW9kZSA9PSBEb250RW51bVByb3BlcnR5TW9kZTo6RXhjbHVkZSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIGlmICghaXNVaWRNYXRjaGVkVG9UeXBlTW9kZSh1aWQpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBpZiAoc2l6ZSgpIDwgc2V0VGhyZXNob2xkKSB7Ci0gICAgICAgIGlmIChtX2RhdGEtPnBy
b3BlcnR5TmFtZVZlY3RvcigpLmNvbnRhaW5zKGlkZW50aWZpZXIpKQotICAgICAgICAgICAgcmV0
dXJuOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChtX3NldC5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgICAgIGZvciAoSWRlbnRpZmllciYgbmFtZSA6IG1fZGF0YS0+cHJvcGVydHlOYW1lVmVjdG9y
KCkpCi0gICAgICAgICAgICAgICAgbV9zZXQuYWRkKG5hbWUuaW1wbCgpKTsKLSAgICAgICAgfQot
ICAgICAgICBpZiAoIW1fc2V0LmFkZChpZGVudGlmaWVyKS5pc05ld0VudHJ5KQotICAgICAgICAg
ICAgcmV0dXJuOworICAgIGJvb2wgbWFya0FzU2VlbiA9IGRvbnRFbnVtICYmIG1fZG9udEVudW1Q
cm9wZXJ0eU1vZGUgPT0gRG9udEVudW1Qcm9wZXJ0eU1vZGU6OkV4Y2x1ZGVCdXRNYXJrQXNTZWVu
OworICAgIGlmIChtYXJrQXNTZWVuKQorICAgICAgICBpbml0aWFsaXplU2V0SWZOZWNlc3Nhcnko
KTsKKworICAgIGlmIChtX3NldCkgeworICAgICAgICBBU1NFUlQoIW1fc2V0LT5jb250YWlucyh1
aWQpKTsKKyAgICAgICAgbV9zZXQtPmFkZCh1aWQpOwogICAgIH0KKyAgICBBU1NFUlQoIW1fZGF0
YS0+cHJvcGVydHlOYW1lVmVjdG9yKCkuY29udGFpbnModWlkKSk7CiAKLSAgICBhZGRVbmNoZWNr
ZWRJbnRlcm5hbChpZGVudGlmaWVyKTsKKyAgICBpZiAobWFya0FzU2VlbikKKyAgICAgICAgcmV0
dXJuOworICAgIG1fZGF0YS0+cHJvcGVydHlOYW1lVmVjdG9yKCkuYXBwZW5kKElkZW50aWZpZXI6
OmZyb21VaWQobV92bSwgdWlkKSk7CiB9CiAKIEFMV0FZU19JTkxJTkUgYm9vbCBQcm9wZXJ0eU5h
bWVBcnJheTo6aXNVaWRNYXRjaGVkVG9UeXBlTW9kZShVbmlxdWVkU3RyaW5nSW1wbCogaWRlbnRp
ZmllcikKQEAgLTE0OCw2ICsxOTUsMTUgQEAgQUxXQVlTX0lOTElORSBib29sIFByb3BlcnR5TmFt
ZUFycmF5OjppcwogICAgIHJldHVybiBpbmNsdWRlU3RyaW5nUHJvcGVydGllcygpOwogfQogCitB
TFdBWVNfSU5MSU5FIHZvaWQgUHJvcGVydHlOYW1lQXJyYXk6OmluaXRpYWxpemVTZXRJZk5lY2Vz
c2FyeSgpCit7CisgICAgaWYgKG1fc2V0KQorICAgICAgICByZXR1cm47CisgICAgbV9zZXQgPSBu
ZXcgSGFzaFNldDxVbmlxdWVkU3RyaW5nSW1wbCo+KCk7CisgICAgZm9yIChjb25zdCBJZGVudGlm
aWVyJiBuYW1lIDogbV9kYXRhLT5wcm9wZXJ0eU5hbWVWZWN0b3IoKSkKKyAgICAgICAgbV9zZXQt
PmFkZChuYW1lLmltcGwoKSk7Cit9CisKIEFMV0FZU19JTkxJTkUgYm9vbCBQcm9wZXJ0eU5hbWVB
cnJheTo6aW5jbHVkZVN5bWJvbFByb3BlcnRpZXMoKSBjb25zdAogewogICAgIHJldHVybiBzdGF0
aWNfY2FzdDxzdGQ6OnVuZGVybHlpbmdfdHlwZTxQcm9wZXJ0eU5hbWVNb2RlPjo6dHlwZT4obV9w
cm9wZXJ0eU5hbWVNb2RlKSAmIHN0YXRpY19jYXN0PHN0ZDo6dW5kZXJseWluZ190eXBlPFByb3Bl
cnR5TmFtZU1vZGU+Ojp0eXBlPihQcm9wZXJ0eU5hbWVNb2RlOjpTeW1ib2xzKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5jcHAJKHJldmlzaW9u
IDI2Nzc2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODczLDYgKzg3Myw4IEBAIHZvaWQgUHJveHlPYmplY3Q6OnBl
cmZvcm1HZXRPd25Qcm9wZXJ0eU4KIHsKICAgICBOT19UQUlMX0NBTExTKCk7CiAKKyAgICBBU1NF
UlQocHJvcGVydHlOYW1lcy5kb250RW51bVByb3BlcnR5TW9kZSgpID09IERvbnRFbnVtUHJvcGVy
dHlNb2RlOjpJbmNsdWRlKTsKKwogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgaWYgKFVOTElLRUxZ
KCF2bS5pc1NhZmVUb1JlY3Vyc2VTb2Z0KCkpKSB7CkBAIC04OTAsMTAgKzg5Miw5IEBAIHZvaWQg
UHJveHlPYmplY3Q6OnBlcmZvcm1HZXRPd25Qcm9wZXJ0eU4KICAgICBKU1ZhbHVlIG93bktleXNN
ZXRob2QgPSBoYW5kbGVyLT5nZXRNZXRob2QoZ2xvYmFsT2JqZWN0LCBjYWxsRGF0YSwgbWFrZUlk
ZW50aWZpZXIodm0sICJvd25LZXlzIiksICInb3duS2V5cycgcHJvcGVydHkgb2YgYSBQcm94eSdz
IGhhbmRsZXIgc2hvdWxkIGJlIGNhbGxhYmxlIl9zKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB2b2lkKCkpOwogICAgIEpTT2JqZWN0KiB0YXJnZXQgPSB0aGlzLT50YXJnZXQoKTsK
LSAgICBFbnVtZXJhdGlvbk1vZGUgZW51bWVyYXRpb25Nb2RlKERvbnRFbnVtUHJvcGVydGllc01v
ZGU6OkluY2x1ZGUpOwogICAgIGlmIChvd25LZXlzTWV0aG9kLmlzVW5kZWZpbmVkKCkpIHsKICAg
ICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICB0YXJnZXQtPm1ldGhvZFRhYmxlKHZtKS0+
Z2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcywg
ZW51bWVyYXRpb25Nb2RlKTsKKyAgICAgICAgdGFyZ2V0LT5tZXRob2RUYWJsZSh2bSktPmdldE93
blByb3BlcnR5TmFtZXModGFyZ2V0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCkBAIC05MDUsMjEgKzkwNiw3IEBAIHZvaWQgUHJveHlPYmpl
Y3Q6OnBlcmZvcm1HZXRPd25Qcm9wZXJ0eU4KIAogICAgIEhhc2hTZXQ8VW5pcXVlZFN0cmluZ0lt
cGwqPiB1bmNoZWNrZWRSZXN1bHRLZXlzOwogICAgIHsKLSAgICAgICAgUnVudGltZVR5cGVNYXNr
IHJlc3VsdEZpbHRlciA9IDA7Ci0gICAgICAgIHN3aXRjaCAocHJvcGVydHlOYW1lcy5wcm9wZXJ0
eU5hbWVNb2RlKCkpIHsKLSAgICAgICAgY2FzZSBQcm9wZXJ0eU5hbWVNb2RlOjpTeW1ib2xzOgot
ICAgICAgICAgICAgcmVzdWx0RmlsdGVyID0gVHlwZVN5bWJvbDsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3M6Ci0gICAgICAgICAgICBy
ZXN1bHRGaWx0ZXIgPSBUeXBlU3RyaW5nOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5nc0FuZFN5bWJvbHM6Ci0gICAgICAgICAgICByZXN1
bHRGaWx0ZXIgPSBUeXBlU3ltYm9sIHwgVHlwZVN0cmluZzsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIEFTU0VSVChyZXN1bHRGaWx0ZXIpOwotCi0gICAgICAgIGF1dG8g
YWRkUHJvcE5hbWUgPSBbJl0gKEpTVmFsdWUgdmFsdWUsIFJ1bnRpbWVUeXBlIHR5cGUpIC0+IGJv
b2wgeworICAgICAgICBhdXRvIGFkZFByb3BOYW1lID0gWyZdIChKU1ZhbHVlIHZhbHVlLCBSdW50
aW1lVHlwZSkgLT4gYm9vbCB7CiAgICAgICAgICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgZG9F
eGl0RWFybHkgPSB0cnVlOwogICAgICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGRvbnRF
eGl0RWFybHkgPSBmYWxzZTsKIApAQCAtOTMxLDkgKzkxOCw3IEBAIHZvaWQgUHJveHlPYmplY3Q6
OnBlcmZvcm1HZXRPd25Qcm9wZXJ0eU4KICAgICAgICAgICAgICAgICByZXR1cm4gZG9FeGl0RWFy
bHk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICh0eXBlICYgcmVzdWx0RmlsdGVy
KQotICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKGlkZW50LmltcGwoKSk7Ci0KKyAg
ICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkPEVudW1lcmFibGU6OkluZGV0ZXJtaW5hdGU+KGlk
ZW50KTsKICAgICAgICAgICAgIHJldHVybiBkb250RXhpdEVhcmx5OwogICAgICAgICB9OwogCkBA
IC05NDUsOCArOTMwLDggQEAgdm9pZCBQcm94eU9iamVjdDo6cGVyZm9ybUdldE93blByb3BlcnR5
TgogICAgIGJvb2wgdGFyZ2V0SXNFeGVuc2libGUgPSB0YXJnZXQtPmlzRXh0ZW5zaWJsZShnbG9i
YWxPYmplY3QpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAKLSAg
ICBQcm9wZXJ0eU5hbWVBcnJheSB0YXJnZXRLZXlzKHZtLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJp
bmdzQW5kU3ltYm9scywgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpOwotICAgIHRhcmdldC0+
bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRhcmdldCwgZ2xvYmFsT2JqZWN0
LCB0YXJnZXRLZXlzLCBlbnVtZXJhdGlvbk1vZGUpOworICAgIFByb3BlcnR5TmFtZUFycmF5IHRh
cmdldEtleXModm0sIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3NBbmRTeW1ib2xzLCBEb250RW51
bVByb3BlcnR5TW9kZTo6SW5jbHVkZSk7CisgICAgdGFyZ2V0LT5tZXRob2RUYWJsZSh2bSktPmdl
dE93blByb3BlcnR5TmFtZXModGFyZ2V0LCBnbG9iYWxPYmplY3QsIHRhcmdldEtleXMpOwogICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgVmVjdG9yPFVuaXF1ZWRT
dHJpbmdJbXBsKj4gdGFyZ2V0Q29uZmlndXJhYmxlS2V5czsKICAgICBWZWN0b3I8VW5pcXVlZFN0
cmluZ0ltcGwqPiB0YXJnZXROb25Db25maWd1cmFibGVLZXlzOwpAQCAtOTk3LDcgKzk4Miw3IEBA
IHZvaWQgUHJveHlPYmplY3Q6OnBlcmZvcm1HZXRPd25FbnVtZXJhYmwKICAgICBWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogCi0gICAgUHJvcGVydHlOYW1lQXJyYXkgdW5maWx0ZXJlZE5hbWVzKHZtLCBwcm9wZXJ0
eU5hbWVzLnByb3BlcnR5TmFtZU1vZGUoKSwgcHJvcGVydHlOYW1lcy5wcml2YXRlU3ltYm9sTW9k
ZSgpKTsKKyAgICBQcm9wZXJ0eU5hbWVBcnJheSB1bmZpbHRlcmVkTmFtZXModm0sIHByb3BlcnR5
TmFtZXMucHJvcGVydHlOYW1lTW9kZSgpLCBEb250RW51bVByb3BlcnR5TW9kZTo6SW5jbHVkZSk7
CiAgICAgcGVyZm9ybUdldE93blByb3BlcnR5TmFtZXMoZ2xvYmFsT2JqZWN0LCB1bmZpbHRlcmVk
TmFtZXMpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgLy8g
RmlsdGVyaW5nIERvbnRFbnVtIHByb3BlcnRpZXMgaXMgb2JzZXJ2YWJsZSBpbiBwcm94aWVzIGFu
ZCBtdXN0IG9jY3VyIGFmdGVyIHRoZSBpbnZhcmlhbnQgY2hlY2tzIHBhc3MuCkBAIC0xMDA3LDQz
ICs5OTIsMTkgQEAgdm9pZCBQcm94eU9iamVjdDo6cGVyZm9ybUdldE93bkVudW1lcmFibAogICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgICAgICBpZiAoIWlz
UHJvcGVydHlEZWZpbmVkKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChzbG90
LmF0dHJpYnV0ZXMoKSAmIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChwcm9wZXJ0eU5hbWUuaW1wbCgp
KTsKKyAgICAgICAgcHJvcGVydHlOYW1lcy5hZGRXaXRoRG9udEVudW0ocHJvcGVydHlOYW1lLCBz
bG90LmF0dHJpYnV0ZXMoKSAmIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiAgICAgfQog
fQogCi12b2lkIFByb3h5T2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmpl
Y3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9w
ZXJ0eU5hbWVBcnJheSwgRW51bWVyYXRpb25Nb2RlIGVudW1lcmF0aW9uTW9kZSkKK3ZvaWQgUHJv
eHlPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZUFycmF5
KQogewogICAgIFByb3h5T2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PFByb3h5T2JqZWN0Kj4o
b2JqZWN0KTsKLSAgICBpZiAoZW51bWVyYXRpb25Nb2RlLmluY2x1ZGVEb250RW51bVByb3BlcnRp
ZXMoKSkKKyAgICBpZiAocHJvcGVydHlOYW1lQXJyYXkuZG9udEVudW1Qcm9wZXJ0eU1vZGUoKSA9
PSBEb250RW51bVByb3BlcnR5TW9kZTo6SW5jbHVkZSkKICAgICAgICAgdGhpc09iamVjdC0+cGVy
Zm9ybUdldE93blByb3BlcnR5TmFtZXMoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVBcnJheSk7
CiAgICAgZWxzZQogICAgICAgICB0aGlzT2JqZWN0LT5wZXJmb3JtR2V0T3duRW51bWVyYWJsZVBy
b3BlcnR5TmFtZXMoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVBcnJheSk7CiB9CiAKLXZvaWQg
UHJveHlPYmplY3Q6OmdldFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZUFycmF5
LCBFbnVtZXJhdGlvbk1vZGUgZW51bWVyYXRpb25Nb2RlKQotewotICAgIE5PX1RBSUxfQ0FMTFMo
KTsKLSAgICBKU09iamVjdDo6Z2V0UHJvcGVydHlOYW1lcyhvYmplY3QsIGdsb2JhbE9iamVjdCwg
cHJvcGVydHlOYW1lQXJyYXksIGVudW1lcmF0aW9uTW9kZSk7Ci19Ci0KLXZvaWQgUHJveHlPYmpl
Y3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0
KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpCi17Ci0gICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotdm9pZCBQcm94eU9iamVjdDo6Z2V0U3RydWN0dXJl
UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJy
YXkmLCBFbnVtZXJhdGlvbk1vZGUpCi17Ci0gICAgLy8gV2Ugc2hvdWxkIGFsd2F5cyBnbyBkb3du
IHRoZSBnZXRPd25Qcm9wZXJ0eU5hbWVzIHBhdGguCi0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLX0KLQotdm9pZCBQcm94eU9iamVjdDo6Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMo
SlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRp
b25Nb2RlKQotewotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KIGJvb2wg
UHJveHlPYmplY3Q6OnBlcmZvcm1TZXRQcm90b3R5cGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNWYWx1ZSBwcm90b3R5cGUsIGJvb2wgc2hvdWxkVGhyb3dJZkNhbnRTZXQpCiB7CiAg
ICAgTk9fVEFJTF9DQUxMUygpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UHJveHlPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Qcm94eU9iamVjdC5oCShyZXZpc2lvbiAyNjc3NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Qcm94eU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBA
IGNsYXNzIFByb3h5T2JqZWN0IGZpbmFsIDogcHVibGljIEpTTm9uRmkKIHB1YmxpYzoKICAgICB0
eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKIAotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5z
aWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dl
dE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldENhbGxEYXRhIHwgSW50ZXJjZXB0c0dldE93
blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IE92ZXJyaWRlc0dl
dFByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVzIHwgT3Zl
cnJpZGVzR2V0UHJvdG90eXBlIHwgUHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOworICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFn
cyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5
TmFtZXMgfCBPdmVycmlkZXNHZXRQcm90b3R5cGUgfCBPdmVycmlkZXNHZXRDYWxsRGF0YSB8IElu
dGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8g
fCBQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxs
VHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KICAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9yKFZNJiB2bSkKQEAgLTU3LDcgKzU3LDYgQEAgcHVibGljOgogICAgICAgICBpZiAoaXND
YWxsYWJsZSkKICAgICAgICAgICAgIGZsYWdzIHw9IChJbXBsZW1lbnRzSGFzSW5zdGFuY2UgfCBJ
bXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlKTsKICAgICAgICAgU3RydWN0dXJlKiByZXN1bHQg
PSBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZv
KFByb3h5T2JqZWN0VHlwZSwgZmxhZ3MpLCBpbmZvKCksIE5vbkFycmF5IHwgTWF5SGF2ZUluZGV4
ZWRBY2Nlc3NvcnMpOwotICAgICAgICByZXN1bHQtPnNldElzUXVpY2tQcm9wZXJ0eUFjY2Vzc0Fs
bG93ZWRGb3JFbnVtZXJhdGlvbihmYWxzZSk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFyZXN1
bHQtPmNhbkFjY2Vzc1Byb3BlcnRpZXNRdWlja2x5Rm9yRW51bWVyYXRpb24oKSk7CiAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKCFyZXN1bHQtPmNhbkNhY2hlUHJvcGVydHlOYW1lRW51bWVyYXRvcih2
bSkpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtODksMTEgKzg4LDcgQEAgcHJpdmF0ZToK
ICAgICBzdGF0aWMgYm9vbCBwcmV2ZW50RXh0ZW5zaW9ucyhKU09iamVjdCosIEpTR2xvYmFsT2Jq
ZWN0Kik7CiAgICAgc3RhdGljIGJvb2wgaXNFeHRlbnNpYmxlKEpTT2JqZWN0KiwgSlNHbG9iYWxP
YmplY3QqKTsKICAgICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEpT
R2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBi
b29sIHNob3VsZFRocm93KTsKLSAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpT
T2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9u
TW9kZSk7Ci0gICAgc3RhdGljIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xv
YmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwotICAgIHN0
YXRpYyBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5h
bWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1l
cmF0aW9uTW9kZSk7Ci0gICAgc3RhdGljIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCBnZXRT
dHJ1Y3R1cmVQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0
eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7Ci0gICAgc3RhdGljIE5PX1JFVFVSTl9EVUVf
VE9fQ1JBU0ggdm9pZCBnZXRHZW5lcmljUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFs
T2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIHN0YXRp
YyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFBy
b3BlcnR5TmFtZUFycmF5Jik7CiAgICAgc3RhdGljIGJvb2wgc2V0UHJvdG90eXBlKEpTT2JqZWN0
KiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSwgYm9vbCBzaG91bGRUaHJvd0lm
Q2FudFNldCk7CiAgICAgc3RhdGljIEpTVmFsdWUgZ2V0UHJvdG90eXBlKEpTT2JqZWN0KiwgSlNH
bG9iYWxPYmplY3QqKTsKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWZsZWN0
T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9S
ZWZsZWN0T2JqZWN0LmNwcAkocmV2aXNpb24gMjY3NzY3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUmVmbGVjdE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMiw3ICsy
MjIsNyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04ocmVmbGVjdE9iamVjdE93CiAgICAgSlNW
YWx1ZSB0YXJnZXQgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwogICAgIGlmICghdGFyZ2V0Lmlz
T2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3Io
Z2xvYmFsT2JqZWN0LCBzY29wZSwgIlJlZmxlY3Qub3duS2V5cyByZXF1aXJlcyB0aGUgZmlyc3Qg
YXJndW1lbnQgYmUgYW4gb2JqZWN0Il9zKSk7Ci0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3Bl
LCBKU1ZhbHVlOjplbmNvZGUob3duUHJvcGVydHlLZXlzKGdsb2JhbE9iamVjdCwganNDYXN0PEpT
T2JqZWN0Kj4odGFyZ2V0KSwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5nc0FuZFN5bWJvbHMsIERv
bnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUsIFdURjo6bnVsbG9wdCkpKTsKKyAgICBSRUxF
QVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShvd25Qcm9wZXJ0eUtleXMoZ2xv
YmFsT2JqZWN0LCBqc0Nhc3Q8SlNPYmplY3QqPih0YXJnZXQpLCBQcm9wZXJ0eU5hbWVNb2RlOjpT
dHJpbmdzQW5kU3ltYm9scywgRG9udEVudW1Qcm9wZXJ0eU1vZGU6OkluY2x1ZGUsIFdURjo6bnVs
bG9wdCkpKTsKIH0KIAogLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVm
bGVjdC5wcmV2ZW50ZXh0ZW5zaW9ucwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUmVnRXhwT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9SZWdFeHBPYmplY3QuY3BwCShyZXZpc2lvbiAyNjc3NjcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
NSwyOCArNzUsMTIgQEAgYm9vbCBSZWdFeHBPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbAog
ICAgIHJldHVybiBCYXNlOjpkZWxldGVQcm9wZXJ0eShjZWxsLCBnbG9iYWxPYmplY3QsIHByb3Bl
cnR5TmFtZSwgc2xvdCk7CiB9CiAKLXZvaWQgUmVnRXhwT2JqZWN0OjpnZXRPd25Ob25JbmRleFBy
b3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2Rl
KQordm9pZCBSZWdFeHBPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVj
dCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJh
eSYgcHJvcGVydHlOYW1lcykKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0g
ICAgaWYgKG1vZGUuaW5jbHVkZURvbnRFbnVtUHJvcGVydGllcygpKQotICAgICAgICBwcm9wZXJ0
eU5hbWVzLmFkZCh2bS5wcm9wZXJ0eU5hbWVzLT5sYXN0SW5kZXgpOwotICAgIEJhc2U6OmdldE93
bk5vbkluZGV4UHJvcGVydHlOYW1lcyhvYmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1l
cywgbW9kZSk7Ci19CiAKLXZvaWQgUmVnRXhwT2JqZWN0OjpnZXRQcm9wZXJ0eU5hbWVzKEpTT2Jq
ZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFy
cmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKLXsKLSAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgaWYgKG1vZGUuaW5jbHVkZURvbnRFbnVtUHJvcGVy
dGllcygpKQotICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZCh2bS5wcm9wZXJ0eU5hbWVzLT5sYXN0
SW5kZXgpOwotICAgIEJhc2U6OmdldFByb3BlcnR5TmFtZXMob2JqZWN0LCBnbG9iYWxPYmplY3Qs
IHByb3BlcnR5TmFtZXMsIG1vZGUpOwotfQotCi12b2lkIFJlZ0V4cE9iamVjdDo6Z2V0R2VuZXJp
Y1Byb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBt
b2RlKQotewotICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBpZiAobW9kZS5p
bmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKCkpCi0gICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKHZt
LnByb3BlcnR5TmFtZXMtPmxhc3RJbmRleCk7Ci0gICAgQmFzZTo6Z2V0R2VuZXJpY1Byb3BlcnR5
TmFtZXMob2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworICAgIHBy
b3BlcnR5TmFtZXMuYWRkPEVudW1lcmFibGU6OkZhbHNlPih2bS5wcm9wZXJ0eU5hbWVzLT5sYXN0
SW5kZXgpOworICAgIEJhc2U6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhvYmplY3QsIGds
b2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcyk7CiB9CiAKIGJvb2wgUmVnRXhwT2JqZWN0OjpkZWZp
bmVPd25Qcm9wZXJ0eShKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3Im
IGRlc2NyaXB0b3IsIGJvb2wgc2hvdWxkVGhyb3cpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAkocmV2aXNpb24gMjY3NzY3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTMwLDcgKzMwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBSZWdFeHBPYmplY3QgZmluYWwg
OiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpT
Tm9uRmluYWxPYmplY3Q7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90
IHwgT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc0FueUZvcm1PZkdldFByb3Bl
cnR5TmFtZXM7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3Zl
cnJpZGVzR2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzOwogCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+CiAgICAgc3RhdGljIElzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvcihWTSYgdm0pCkBAIC0xNDYsOSArMTQ2LDcgQEAgcHJpdmF0ZToKICAgICB9
CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0Nl
bGwqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgRGVsZXRlUHJvcGVydHlTbG90Jik7
Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0
eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVu
dW1lcmF0aW9uTW9kZSk7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0UHJv
cGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkm
LCBFbnVtZXJhdGlvbk1vZGUpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdl
dEdlbmVyaWNQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0
eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxP
YmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9w
ZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOwog
CiAgICAgTWF0Y2hSZXN1bHQgbWF0Y2hJbmxpbmUoSlNHbG9iYWxPYmplY3QqLCBKU1N0cmluZyop
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3Qu
Y3BwCShyZXZpc2lvbiAyNjc3NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJpbmdPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDUsMjUgKzE0NSwxOSBAQCBib29s
IFN0cmluZ09iamVjdDo6ZGVsZXRlUHJvcGVydHlCeUluZGV4CiAgICAgcmV0dXJuIEpTT2JqZWN0
OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0LCBpKTsKIH0K
IAotdm9pZCBTdHJpbmdPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVj
dCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3Bl
cnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBTdHJpbmdPYmplY3Q6OmdldE93
blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMpCiB7CiAgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOwogICAgIFN0cmluZ09iamVjdCogdGhpc09iamVjdCA9IGpzQ2Fz
dDxTdHJpbmdPYmplY3QqPihvYmplY3QpOwogICAgIGlmIChwcm9wZXJ0eU5hbWVzLmluY2x1ZGVT
dHJpbmdQcm9wZXJ0aWVzKCkpIHsKICAgICAgICAgaW50IHNpemUgPSB0aGlzT2JqZWN0LT5pbnRl
cm5hbFZhbHVlKCktPmxlbmd0aCgpOwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7
ICsraSkKLSAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20odm0s
IGkpKTsKKyAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkPEVudW1lcmFibGU6OlRydWU+KGkp
OwogICAgIH0KLSAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXModGhpc09i
amVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKLX0KIAotdm9pZCBTdHJp
bmdPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlO
YW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCi17Ci0gICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOwotICAgIFN0cmluZ09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxTdHJpbmdPYmpl
Y3QqPihvYmplY3QpOwotICAgIGlmIChtb2RlLmluY2x1ZGVEb250RW51bVByb3BlcnRpZXMoKSkK
LSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQodm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoKTsKLSAg
ICByZXR1cm4gSlNPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0
LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworICAgIEJhc2U6OmdldE93bklu
ZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMp
OworICAgIHByb3BlcnR5TmFtZXMuYWRkPEVudW1lcmFibGU6OkZhbHNlPih2bS5wcm9wZXJ0eU5h
bWVzLT5sZW5ndGgpOworICAgIEJhc2U6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlz
T2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMpOwogfQogCiBTdHJpbmcgU3RyaW5n
T2JqZWN0Ojp0b1N0cmluZ05hbWUoY29uc3QgSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCopCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuaAkocmV2
aXNpb24gMjY3NzY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2Jq
ZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiBj
bGFzcyBTdHJpbmdPYmplY3QgOiBwdWJsaWMgSlNXcmFwcGVyT2JqZWN0IHsKIHB1YmxpYzoKICAg
ICB1c2luZyBCYXNlID0gSlNXcmFwcGVyT2JqZWN0OwotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5z
aWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dl
dE93blByb3BlcnR5U2xvdCB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZl
bldoZW5MZW5ndGhJc05vdFplcm8gfCBPdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVz
OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpT
dHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dl
dE93blByb3BlcnR5TmFtZXMgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2
ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUsIFN1YnNwYWNl
QWNjZXNzIG1vZGU+CiAgICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0p
CkBAIC01OSw4ICs1OSw3IEBAIHB1YmxpYzoKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlO
YW1lLCBEZWxldGVQcm9wZXJ0eVNsb3QmKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMg
Ym9vbCBkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCB1bnNp
Z25lZCBwcm9wZXJ0eU5hbWUpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdl
dE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFt
ZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMg
dm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVj
dCosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICBKU19FWFBPUlRf
UFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9i
YWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQ
cm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cp
OwogICAgIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmdOYW1lKGNvbnN0IEpTT2JqZWN0KiwgSlNHbG9i
YWxPYmplY3QqKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmUuY3BwCShyZXZpc2lvbiAyNjc3NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTQsMjUgKzE5NCwxNSBAQCB2
b2lkIFN0cnVjdHVyZTo6dmFsaWRhdGVGbGFncygpCiAgICAgICAgICYmIG1ldGhvZFRhYmxlLmRv
UHV0UHJvcGVydHlTZWN1cml0eUNoZWNrICE9IEpTQ2VsbDo6ZG9QdXRQcm9wZXJ0eVNlY3VyaXR5
Q2hlY2s7CiAgICAgUkVMRUFTRV9BU1NFUlQob3ZlcnJpZGVzUHV0UHJvcGVydHlTZWN1cml0eUNo
ZWNrID09IHR5cGVJbmZvKCkuaGFzUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKCkpOwogCi0gICAg
Ym9vbCBvdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzID0KLSAgICAgICAgbWV0aG9kVGFibGUuZ2V0
UHJvcGVydHlOYW1lcyAhPSBKU09iamVjdDo6Z2V0UHJvcGVydHlOYW1lcwotICAgICAgICAmJiBt
ZXRob2RUYWJsZS5nZXRQcm9wZXJ0eU5hbWVzICE9IEpTQ2VsbDo6Z2V0UHJvcGVydHlOYW1lczsK
ICAgICBib29sIG92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgPQogICAgICAgICBtZXRob2RU
YWJsZS5nZXRPd25Qcm9wZXJ0eU5hbWVzICE9IEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVz
CiAgICAgICAgICYmIG1ldGhvZFRhYmxlLmdldE93blByb3BlcnR5TmFtZXMgIT0gSlNDZWxsOjpn
ZXRPd25Qcm9wZXJ0eU5hbWVzOworICAgIFJFTEVBU0VfQVNTRVJUKG92ZXJyaWRlc0dldE93blBy
b3BlcnR5TmFtZXMgPT0gdHlwZUluZm8oKS5vdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzKCkp
OworCiAgICAgYm9vbCBvdmVycmlkZXNHZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMgPQogICAg
ICAgICBtZXRob2RUYWJsZS5nZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMgIT0gSlNPYmplY3Q6
OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcwogICAgICAgICAmJiBtZXRob2RUYWJsZS5nZXRP
d25Ob25JbmRleFByb3BlcnR5TmFtZXMgIT0gSlNDZWxsOjpnZXRPd25Ob25JbmRleFByb3BlcnR5
TmFtZXM7Ci0KLSAgICBSRUxFQVNFX0FTU0VSVChvdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzID09
IHR5cGVJbmZvKCkub3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcygpKTsKLQotICAgIC8vIFdlIGNh
biBzdHJlbmd0aGVuIHRoaXMgaW50byBhbiBlcXVpdmFsZW5jZSB0ZXN0IGlmIHRoZXJlIGFyZSBu
byBjbGFzc2VzCi0gICAgLy8gdGhhdCBzcGVjaWZpZXMgdGhpcyBmbGFnIHdpdGhvdXQgb3ZlcnJp
ZGluZyBhbnkgb2YgdGhlIGZvcm1zIG9mIGdldFByb3BlcnR5TmFtZXMuCi0gICAgLy8gRklYTUU6
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTI5NTQKLSAgICBpZiAo
b3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcwotICAgICAgICB8fCBvdmVycmlkZXNHZXRPd25Qcm9w
ZXJ0eU5hbWVzCi0gICAgICAgIHx8IG92ZXJyaWRlc0dldE93bk5vbkluZGV4UHJvcGVydHlOYW1l
cykKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQodHlwZUluZm8oKS5vdmVycmlkZXNBbnlGb3JtT2ZH
ZXRQcm9wZXJ0eU5hbWVzKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKG92ZXJyaWRlc0dldE93bk5v
bkluZGV4UHJvcGVydHlOYW1lcyA9PSB0eXBlSW5mbygpLm92ZXJyaWRlc0dldE93bk5vbkluZGV4
UHJvcGVydHlOYW1lcygpKTsKIAogICAgIGJvb2wgb3ZlcnJpZGVzR2V0UHJvdG90eXBlID0KICAg
ICAgICAgbWV0aG9kVGFibGUuZ2V0UHJvdG90eXBlICE9IHN0YXRpY19jYXN0PE1ldGhvZFRhYmxl
OjpHZXRQcm90b3R5cGVGdW5jdGlvblB0cj4oSlNPYmplY3Q6OmdldFByb3RvdHlwZSkKQEAgLTEy
MDMsMjIgKzExOTMsMjAgQEAgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjphdHRyaWJ1dGVDaGFu
ZwogICAgICAgICB9KTsKIH0KIAotdm9pZCBTdHJ1Y3R1cmU6OmdldFByb3BlcnR5TmFtZXNGcm9t
U3RydWN0dXJlKFZNJiB2bSwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1l
cmF0aW9uTW9kZSBtb2RlKQordm9pZCBTdHJ1Y3R1cmU6OmdldFByb3BlcnR5TmFtZXNGcm9tU3Ry
dWN0dXJlKFZNJiB2bSwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMpCiB7CiAgICAg
UHJvcGVydHlUYWJsZSogdGFibGUgPSBlbnN1cmVQcm9wZXJ0eVRhYmxlSWZOb3RFbXB0eSh2bSk7
CiAgICAgaWYgKCF0YWJsZSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGJvb2wga25vd25V
bmlxdWUgPSBwcm9wZXJ0eU5hbWVzLmNhbkFkZEtub3duVW5pcXVlRm9yU3RydWN0dXJlKCk7Cisg
ICAgYm9vbCBjYW5BZGRLbm93blVuaXF1ZSA9IHByb3BlcnR5TmFtZXMuaXNFbXB0eSgpOwogICAg
IGJvb2wgZm91bmRTeW1ib2wgPSBmYWxzZTsKIAotICAgIGF1dG8gY2hlY2tEb250RW51bUFuZEFk
ZCA9IFsmXShQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBpdGVyKSB7Ci0gICAgICAgIGlmICghKGl0
ZXItPmF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pIHx8IG1vZGUuaW5j
bHVkZURvbnRFbnVtUHJvcGVydGllcygpKSB7Ci0gICAgICAgICAgICBpZiAoa25vd25VbmlxdWUp
Ci0gICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGRVbmNoZWNrZWQoaXRlci0+a2V5KTsK
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChpdGVy
LT5rZXkpOwotICAgICAgICB9CisgICAgYXV0byBhZGRXaXRoRG9udEVudW0gPSBbJl0oUHJvcGVy
dHlUYWJsZTo6aXRlcmF0b3IgaXRlcikgeworICAgICAgICBpZiAoY2FuQWRkS25vd25VbmlxdWUp
CisgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZEtub3duVW5pcXVlV2l0aERvbnRFbnVtKGl0
ZXItPmtleSwgaXRlci0+YXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkV2l0aERvbnRFbnVt
KGl0ZXItPmtleSwgaXRlci0+YXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51
bSk7CiAgICAgfTsKICAgICAKICAgICBQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBlbmQgPSB0YWJs
ZS0+ZW5kKCk7CkBAIC0xMjMwLDcgKzEyMTgsNyBAQCB2b2lkIFN0cnVjdHVyZTo6Z2V0UHJvcGVy
dHlOYW1lc0Zyb21TdHJ1CiAgICAgICAgICAgICBpZiAocHJvcGVydHlOYW1lcy5wcm9wZXJ0eU5h
bWVNb2RlKCkgIT0gUHJvcGVydHlOYW1lTW9kZTo6U3ltYm9scykKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgfQotICAgICAgICBjaGVja0RvbnRFbnVtQW5kQWRkKGl0ZXIpOwor
ICAgICAgICBhZGRXaXRoRG9udEVudW0oaXRlcik7CiAgICAgfQogCiAgICAgaWYgKGZvdW5kU3lt
Ym9sICYmIHByb3BlcnR5TmFtZXMucHJvcGVydHlOYW1lTW9kZSgpID09IFByb3BlcnR5TmFtZU1v
ZGU6OlN0cmluZ3NBbmRTeW1ib2xzKSB7CkBAIC0xMjM4LDcgKzEyMjYsNyBAQCB2b2lkIFN0cnVj
dHVyZTo6Z2V0UHJvcGVydHlOYW1lc0Zyb21TdHJ1CiAgICAgICAgIC8vIGh0dHBzOi8vdGMzOS5l
cy9lY21hMjYyLyNzZWMtb3JkaW5hcnlvd25wcm9wZXJ0eWtleXMKICAgICAgICAgZm9yIChQcm9w
ZXJ0eVRhYmxlOjppdGVyYXRvciBpdGVyID0gdGFibGUtPmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyAr
K2l0ZXIpIHsKICAgICAgICAgICAgIGlmIChpdGVyLT5rZXktPmlzU3ltYm9sKCkpCi0gICAgICAg
ICAgICAgICAgY2hlY2tEb250RW51bUFuZEFkZChpdGVyKTsKKyAgICAgICAgICAgICAgICBhZGRX
aXRoRG9udEVudW0oaXRlcik7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0xNDg5LDYgKzE0Nzcs
OCBAQCBib29sIFN0cnVjdHVyZTo6Y2FuQWNjZXNzUHJvcGVydGllc1F1aWNrCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICBpZiAoaXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGlmICh0eXBlSW5mbygpLm92ZXJyaWRlc0dldE93blByb3BlcnR5
TmFtZXMoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiB0cnVlOwogfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNpb24g
MjY3NzY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTUzMCw3ICs1MzAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRDYWNo
ZWRQcm9wZXJ0eU5hbWVzKFZNJiwgQ2FjaGVkUHJvcGVydHlOYW1lc0tpbmQsIEpTSW1tdXRhYmxl
QnV0dGVyZmx5Kik7CiAgICAgYm9vbCBjYW5DYWNoZU93blByb3BlcnR5TmFtZXMoKSBjb25zdDsK
IAotICAgIHZvaWQgZ2V0UHJvcGVydHlOYW1lc0Zyb21TdHJ1Y3R1cmUoVk0mLCBQcm9wZXJ0eU5h
bWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgdm9pZCBnZXRQcm9wZXJ0eU5hbWVzRnJv
bVN0cnVjdHVyZShWTSYsIFByb3BlcnR5TmFtZUFycmF5Jik7CiAKICAgICBKU1ZhbHVlIGNhY2hl
ZFNwZWNpYWxQcm9wZXJ0eShDYWNoZWRTcGVjaWFsUHJvcGVydHlLZXkga2V5KQogICAgIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVz
LmgJKHJldmlzaW9uIDI2Nzc2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjc1LDcgKzI3NSw3IEBAIGlubGlu
ZSBib29sIFN0cnVjdHVyZTo6Y2FuQ2FjaGVPd25Qcm9wZXIKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIGlmIChoYXNJbmRleGVkUHJvcGVydGllcyhpbmRleGluZ1R5cGUoKSkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBpZiAodHlwZUluZm8oKS5vdmVycmlkZXNBbnlGb3JtT2ZHZXRQ
cm9wZXJ0eU5hbWVzKCkpCisgICAgaWYgKHR5cGVJbmZvKCkub3ZlcnJpZGVzQW55Rm9ybU9mR2V0
T3duUHJvcGVydHlOYW1lcygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShyZXZpc2lvbiAy
Njc3NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE2MDMsNyArMTYwMyw3IEBAIEpTQ2VsbCogVk06OnNlbnRpbmVsTWFwQnVja2V0
U2xvdygpCiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIFZNOjplbXB0eVByb3BlcnR5TmFtZUVu
dW1lcmF0b3JTbG93KCkKIHsKICAgICBBU1NFUlQoIW1fZW1wdHlQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yKTsKLSAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0eU5hbWVzKCp0aGlzLCBQcm9wZXJ0
eU5hbWVNb2RlOjpTdHJpbmdzLCBQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSk7CisgICAgUHJv
cGVydHlOYW1lQXJyYXkgcHJvcGVydHlOYW1lcygqdGhpcywgUHJvcGVydHlOYW1lTW9kZTo6U3Ry
aW5ncywgRG9udEVudW1Qcm9wZXJ0eU1vZGU6OkluY2x1ZGUpOwogICAgIGF1dG8qIGVudW1lcmF0
b3IgPSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNyZWF0ZSgqdGhpcywgbnVsbHB0ciwgMCwg
MCwgV1RGTW92ZShwcm9wZXJ0eU5hbWVzKSk7CiAgICAgbV9lbXB0eVByb3BlcnR5TmFtZUVudW1l
cmF0b3Iuc2V0KCp0aGlzLCBlbnVtZXJhdG9yKTsKICAgICByZXR1cm4gZW51bWVyYXRvcjsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAJKHJldmlzaW9u
IDI2Nzc2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTQzLDcgKzU0Myw3IEBAIHN0YXRpYyBKU0NfREVDTEFSRV9DVVNU
T01fR0VUVEVSKHJ1bnRpbWUKIGNsYXNzIFJ1bnRpbWVBcnJheSA6IHB1YmxpYyBKU0FycmF5IHsK
IHB1YmxpYzoKICAgICB0eXBlZGVmIEpTQXJyYXkgQmFzZTsKLSAgICBzdGF0aWMgY29uc3RleHBy
IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlk
ZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRl
eEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgT3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlO
YW1lczsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFz
ZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBJbnRlcmNl
cHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvOwogCiBJ
R05PUkVfV0FSTklOR1NfQkVHSU4oInVudXNlZC1jb25zdC12YXJpYWJsZSIpCiAgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSBmYWxzZTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDI2Nzc2NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDQzIEBACisyMDIwLTA5LTI5ICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFp
a2FsZXNoQGdtYWlsLmNvbT4KKworICAgICAgICBOb24tZW51bWVyYWJsZSBwcm9wZXJ0eSBmYWls
cyB0byBzaGFkb3cgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydHkgZnJvbSBmb3ItaW4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM4OTcwCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3Rz
LCBubyBiZWhhdmlvciBjaGFuZ2UuCisKKyAgICAgICAgQWNjb3VudHMgZm9yIHJlbW92YWwgb2Yg
Z2V0UHJvcGVydHlOYW1lcygpIGZyb20gdGhlIG1ldGhvZCB0YWJsZSBhbmQKKyAgICAgICAgc2ln
bmF0dXJlIGNoYW5nZSBvZiBnZXRPd24qUHJvcGVydHlOYW1lcygpLgorCisgICAgICAgICogYW5p
bWF0aW9uL0tleWZyYW1lRWZmZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnByb2Nlc3NLZXlm
cmFtZUxpa2VPYmplY3QpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQ29udmVydFJlY29y
ZC5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmFkZENyb3NzT3JpZ2luUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChXZWJD
b3JlOjphZGRDcm9zc09yaWdpbk93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6
YWRkU2NvcGVkQ2hpbGRyZW5JbmRleGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93
OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0xvY2F0aW9u
Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTG9jYXRpb246OmdldE93blByb3BlcnR5
TmFtZXMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTUmVtb3RlRE9NV2luZG93Q3VzdG9tLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTUmVtb3RlRE9NV2luZG93OjpnZXRPd25Qcm9wZXJ0eU5h
bWVzKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q2xvbmVTZXJpYWxpemVyOjpzZXJpYWxpemUpOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAoR2VuZXJhdGVH
ZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEdlbmVyYXRlSGVhZGVyKToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvKjogVXBkYXRlZC4KKyAgICAgICAgKiBicmlkZ2UvTlBf
anNvYmplY3QuY3BwOgorICAgICAgICAqIGJyaWRnZS9jL2NfaW5zdGFuY2UuY3BwOgorICAgICAg
ICAoSlNDOjpCaW5kaW5nczo6Q0luc3RhbmNlOjpnZXRQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAg
KiBicmlkZ2UvcnVudGltZV9hcnJheS5jcHA6CisgICAgICAgIChKU0M6OlJ1bnRpbWVBcnJheTo6
Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgICogYnJpZGdlL3J1bnRpbWVfYXJyYXkuaDoK
KyAgICAgICAgKiBicmlkZ2UvcnVudGltZV9vYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpCaW5k
aW5nczo6UnVudGltZU9iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgICogYnJp
ZGdlL3J1bnRpbWVfb2JqZWN0Lmg6CisKIDIwMjAtMDktMjkgIEtlaXRoIE1pbGxlciAgPGtlaXRo
X21pbGxlckBhcHBsZS5jb20+CiAKICAgICAgICAgQ1NTIHNlcmlhbGl6YXRpb24gZXhwZWN0cyBj
b21tZW50cyBiZXR3ZWVuIGNlcnRhaW4gdG9rZW5zCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hbmlt
YXRpb24vS2V5ZnJhbWVFZmZlY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Fu
aW1hdGlvbi9LZXlmcmFtZUVmZmVjdC5jcHAJKHJldmlzaW9uIDI2Nzc2NykKKysrIFNvdXJjZS9X
ZWJDb3JlL2FuaW1hdGlvbi9LZXlmcmFtZUVmZmVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIz
NSw4ICsyMzUsOCBAQCBzdGF0aWMgaW5saW5lIEV4Y2VwdGlvbk9yPEtleWZyYW1lRWZmZWN0CiAg
ICAgLy8gICAgICAgbmFtZSB0byBJREwgYXR0cmlidXRlIG5hbWUgYWxnb3JpdGhtLgogCiAgICAg
Ly8gMy4gTGV0IGlucHV0IHByb3BlcnRpZXMgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBF
bnVtZXJhYmxlT3duTmFtZXMgb3BlcmF0aW9uIHdpdGgga2V5ZnJhbWUgaW5wdXQgYXMgdGhlIG9i
amVjdC4KLSAgICBQcm9wZXJ0eU5hbWVBcnJheSBpbnB1dFByb3BlcnRpZXModm0sIFByb3BlcnR5
TmFtZU1vZGU6OlN0cmluZ3MsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKTsKLSAgICBKU09i
amVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhrZXlmcmFtZXNJbnB1dC5nZXQoKSwgJmxleGljYWxH
bG9iYWxPYmplY3QsIGlucHV0UHJvcGVydGllcywgRW51bWVyYXRpb25Nb2RlKCkpOworICAgIFBy
b3BlcnR5TmFtZUFycmF5IGlucHV0UHJvcGVydGllcyh2bSwgUHJvcGVydHlOYW1lTW9kZTo6U3Ry
aW5ncywgRG9udEVudW1Qcm9wZXJ0eU1vZGU6OkV4Y2x1ZGUpOworICAgIEpTT2JqZWN0OjpnZXRP
d25Qcm9wZXJ0eU5hbWVzKGtleWZyYW1lc0lucHV0LmdldCgpLCAmbGV4aWNhbEdsb2JhbE9iamVj
dCwgaW5wdXRQcm9wZXJ0aWVzKTsKIAogICAgIC8vIDQuIE1ha2UgdXAgYSBuZXcgbGlzdCBhbmlt
YXRpb24gcHJvcGVydGllcyB0aGF0IGNvbnNpc3RzIG9mIGFsbCBvZiB0aGUgcHJvcGVydGllcyB0
aGF0IGFyZSBpbiBib3RoIGlucHV0IHByb3BlcnRpZXMgYW5kIGFuaW1hdGFibGUKICAgICAvLyAg
ICBwcm9wZXJ0aWVzLCBvciB3aGljaCBhcmUgaW4gaW5wdXQgcHJvcGVydGllcyBhbmQgY29uZm9y
bSB0byB0aGUgPGN1c3RvbS1wcm9wZXJ0eS1uYW1lPiBwcm9kdWN0aW9uLgpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0UmVjb3JkLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0UmVjb3JkLmgJKHJldmlzaW9u
IDI2Nzc2NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydFJlY29y
ZC5oCSh3b3JraW5nIGNvcHkpCkBAIC05OCw4ICs5OCw4IEBAIHByaXZhdGU6CiAgICAgICAgIFJl
dHVyblR5cGUgcmVzdWx0OwogICAgIAogICAgICAgICAvLyA0LiBMZXQga2V5cyBiZSA/IE8uW1tP
d25Qcm9wZXJ0eUtleXNdXSgpLgotICAgICAgICBKU0M6OlByb3BlcnR5TmFtZUFycmF5IGtleXMo
dm0sIEpTQzo6UHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncywgSlNDOjpQcml2YXRlU3ltYm9sTW9k
ZTo6RXhjbHVkZSk7Ci0gICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9w
ZXJ0eU5hbWVzKG9iamVjdCwgJmxleGljYWxHbG9iYWxPYmplY3QsIGtleXMsIEpTQzo6RW51bWVy
YXRpb25Nb2RlKEpTQzo6RG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSkpOworICAgICAg
ICBKU0M6OlByb3BlcnR5TmFtZUFycmF5IGtleXModm0sIEpTQzo6UHJvcGVydHlOYW1lTW9kZTo6
U3RyaW5ncywgSlNDOjpEb250RW51bVByb3BlcnR5TW9kZTo6SW5jbHVkZSk7CisgICAgICAgIG9i
amVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgJmxleGlj
YWxHbG9iYWxPYmplY3QsIGtleXMpOwogCiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHsgfSk7CiAKQEAgLTExMiw4ICsxMTIsOCBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICAv
LyAyLiBJZiBkZXNjIGlzIG5vdCB1bmRlZmluZWQgYW5kIGRlc2MuW1tFbnVtZXJhYmxlXV0gaXMg
dHJ1ZToKIAotICAgICAgICAgICAgLy8gSXQncyBuZWNlc3NhcnkgdG8gZmlsdGVyIGVudW1lcmFi
bGUgaGVyZSByYXRoZXIgdGhhbiB1c2luZyB0aGUgZGVmYXVsdCBFbnVtZXJhdGlvbk1vZGUsCi0g
ICAgICAgICAgICAvLyB0byBwcmV2ZW50IGFuIG9ic2VydmFibGUgZXh0cmEgW1tHZXRPd25Qcm9w
ZXJ0eV1dIG9wZXJhdGlvbiBpbiB0aGUgY2FzZSBvZiBQcm94eU9iamVjdCByZWNvcmRzLgorICAg
ICAgICAgICAgLy8gSXQncyBuZWNlc3NhcnkgdG8gZmlsdGVyIFtbRW51bWVyYWJsZV1dIGhlcmUg
cmF0aGVyIHRoYW4gdXNpbmcgdGhlIERvbnRFbnVtUHJvcGVydHlNb2RlOjpFeGNsdWRlCisgICAg
ICAgICAgICAvLyBzaW5jZSB0aGUgY2FsbCBvcmRlciBvZiBbW0dldE93blByb3BlcnR5XV0gYW5k
IFtbR2V0XV0gZm9yIGVhY2gga2V5IGlzIG9ic2VydmVkIGJ5IFByb3h5T2JqZWN0LgogICAgICAg
ICAgICAgaWYgKGRpZEdldERlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci5lbnVtZXJhYmxlKCkpIHsK
ICAgICAgICAgICAgICAgICAvLyAxLiBMZXQgdHlwZWRLZXkgYmUga2V5IGNvbnZlcnRlZCB0byBh
biBJREwgdmFsdWUgb2YgdHlwZSBLLgogICAgICAgICAgICAgICAgIGF1dG8gdHlwZWRLZXkgPSBE
ZXRhaWw6OklkZW50aWZpZXJDb252ZXJ0ZXI8Sz46OmNvbnZlcnQobGV4aWNhbEdsb2JhbE9iamVj
dCwga2V5KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdp
bmRvd0N1c3RvbS5jcHAJKHJldmlzaW9uIDI2Nzc2NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAxLDcgKzQw
MSw3IEBAIHN0YXRpYyB2b2lkIGFkZENyb3NzT3JpZ2luUHJvcGVydHlOYW1lcygKICAgICBjYXNl
IENyb3NzT3JpZ2luT2JqZWN0OjpMb2NhdGlvbjogewogICAgICAgICBzdGF0aWMgY29uc3QgSWRl
bnRpZmllciogY29uc3QgcHJvcGVydGllc1tdID0geyAmYnVpbHRpbk5hbWVzLmhyZWZQdWJsaWNO
YW1lKCksICZ2bS5wcm9wZXJ0eU5hbWVzLT5yZXBsYWNlIH07CiAgICAgICAgIGZvciAoYXV0byog
cHJvcGVydHkgOiBwcm9wZXJ0aWVzKQotICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoKnBy
b3BlcnR5KTsKKyAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkPEVudW1lcmFibGU6OkZhbHNl
PigqcHJvcGVydHkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBDcm9zc09yaWdp
bk9iamVjdDo6V2luZG93OiB7CkBAIC00MTQsNyArNDE0LDcgQEAgc3RhdGljIHZvaWQgYWRkQ3Jv
c3NPcmlnaW5Qcm9wZXJ0eU5hbWVzKAogICAgICAgICB9OwogCiAgICAgICAgIGZvciAoYXV0byog
cHJvcGVydHkgOiBwcm9wZXJ0aWVzKQotICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoKnBy
b3BlcnR5KTsKKyAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkPEVudW1lcmFibGU6OkZhbHNl
PigqcHJvcGVydHkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgfQpAQCAtNDMyLDEzICs0
MzIsMTMgQEAgdm9pZCBhZGRDcm9zc09yaWdpbk93blByb3BlcnR5TmFtZXMoSlNDOgogICAgIH07
CiAKICAgICBmb3IgKGF1dG8qIHByb3BlcnR5IDogcHJvcGVydGllcykKLSAgICAgICAgcHJvcGVy
dHlOYW1lcy5hZGQoKnByb3BlcnR5KTsKKyAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQ8RW51bWVy
YWJsZTo6RmFsc2U+KCpwcm9wZXJ0eSk7CiAKIH0KIHRlbXBsYXRlIHZvaWQgYWRkQ3Jvc3NPcmln
aW5Pd25Qcm9wZXJ0eU5hbWVzPENyb3NzT3JpZ2luT2JqZWN0OjpXaW5kb3c+KEpTQzo6SlNHbG9i
YWxPYmplY3QmLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5Jik7CiB0ZW1wbGF0ZSB2b2lkIGFkZENy
b3NzT3JpZ2luT3duUHJvcGVydHlOYW1lczxDcm9zc09yaWdpbk9iamVjdDo6TG9jYXRpb24+KEpT
Qzo6SlNHbG9iYWxPYmplY3QmLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5Jik7CiAKLXN0YXRpYyB2
b2lkIGFkZFNjb3BlZENoaWxkcmVuSW5kZXhlcyhKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgRE9NV2luZG93JiB3aW5kb3csIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5h
bWVzKQorc3RhdGljIHZvaWQgYWRkU2NvcGVkQ2hpbGRyZW5JbmRleGVzKEpTR2xvYmFsT2JqZWN0
JiwgRE9NV2luZG93JiB3aW5kb3csIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzKQog
ewogICAgIGF1dG8qIGRvY3VtZW50ID0gd2luZG93LmRvY3VtZW50KCk7CiAgICAgaWYgKCFkb2N1
bWVudCkKQEAgLTQ0OCwyNSArNDQ4LDIzIEBAIHN0YXRpYyB2b2lkIGFkZFNjb3BlZENoaWxkcmVu
SW5kZXhlcyhKU0cKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm47CiAKLSAgICBWTSYg
dm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LnZtKCk7CiAgICAgdW5zaWduZWQgc2NvcGVkQ2hpbGRD
b3VudCA9IGZyYW1lLT50cmVlKCkuc2NvcGVkQ2hpbGRDb3VudCgpOwogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBzY29wZWRDaGlsZENvdW50OyArK2kpCi0gICAgICAgIHByb3BlcnR5TmFt
ZXMuYWRkKElkZW50aWZpZXI6OmZyb20odm0sIGkpKTsKKyAgICAgICAgcHJvcGVydHlOYW1lcy5h
ZGQ8RW51bWVyYWJsZTo6VHJ1ZT4oaSk7CiB9CiAKLS8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3
Zy5vcmcvI3dpbmRvd3Byb3h5LW93bnByb3BlcnR5a2V5cwotdm9pZCBKU0RPTVdpbmRvdzo6Z2V0
T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNh
bEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0
aW9uTW9kZSBtb2RlKQorLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uv
d2luZG93LW9iamVjdC5odG1sI3dpbmRvd3Byb3h5LW93bnByb3BlcnR5a2V5cwordm9pZCBKU0RP
TVdpbmRvdzo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFt
ZXMpCiB7CiAgICAgSlNET01XaW5kb3cqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNET01XaW5kb3cq
PihvYmplY3QpOwogCiAgICAgYWRkU2NvcGVkQ2hpbGRyZW5JbmRleGVzKCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCB0aGlzT2JqZWN0LT53cmFwcGVkKCksIHByb3BlcnR5TmFtZXMpOwogCiAgICAgaWYg
KCFCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3cobGV4aWNhbEds
b2JhbE9iamVjdCwgdGhpc09iamVjdC0+d3JhcHBlZCgpLCBEb05vdFJlcG9ydFNlY3VyaXR5RXJy
b3IpKSB7Ci0gICAgICAgIGlmIChtb2RlLmluY2x1ZGVEb250RW51bVByb3BlcnRpZXMoKSkKLSAg
ICAgICAgICAgIGFkZENyb3NzT3JpZ2luT3duUHJvcGVydHlOYW1lczxDcm9zc09yaWdpbk9iamVj
dDo6V2luZG93PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcyk7CisgICAgICAg
IGFkZENyb3NzT3JpZ2luT3duUHJvcGVydHlOYW1lczxDcm9zc09yaWdpbk9iamVjdDo6V2luZG93
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcyk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9Ci0gICAgQmFzZTo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKKyAgICBCYXNlOjpnZXRPd25Qcm9w
ZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMp
OwogfQogCiBib29sIEpTRE9NV2luZG93OjpkZWZpbmVPd25Qcm9wZXJ0eShKU0M6OkpTT2JqZWN0
KiBvYmplY3QsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgY29uc3QgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3Im
IGRlc2NyaXB0b3IsIGJvb2wgc2hvdWxkVGhyb3cpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gMjY3NzY3KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE4OCwxNSArMTg4LDE0IEBAIGJvb2wgSlNMb2NhdGlvbjo6ZGVsZXRlUHJvcGVy
dHlCeUluZGV4KEoKICAgICByZXR1cm4gQmFzZTo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXNP
YmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSk7CiB9CiAKLXZvaWQgSlNM
b2NhdGlvbjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFt
ZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU0xvY2F0aW9uOjpnZXRPd25Qcm9wZXJ0
eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcykKIHsKICAgICBKU0xvY2F0aW9u
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTG9jYXRpb24qPihvYmplY3QpOwogICAgIGlmICghQmlu
ZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KGxleGljYWxHbG9iYWxP
YmplY3QsIHRoaXNPYmplY3QtPndyYXBwZWQoKS53aW5kb3coKSwgRG9Ob3RSZXBvcnRTZWN1cml0
eUVycm9yKSkgewotICAgICAgICBpZiAobW9kZS5pbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKCkp
Ci0gICAgICAgICAgICBhZGRDcm9zc09yaWdpbk93blByb3BlcnR5TmFtZXM8Q3Jvc3NPcmlnaW5P
YmplY3Q6OkxvY2F0aW9uPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcyk7Cisg
ICAgICAgIGFkZENyb3NzT3JpZ2luT3duUHJvcGVydHlOYW1lczxDcm9zc09yaWdpbk9iamVjdDo6
TG9jYXRpb24+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KLSAgICBCYXNlOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3Qs
IGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworICAgIEJhc2U6Omdl
dE93blByb3BlcnR5TmFtZXModGhpc09iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVy
dHlOYW1lcyk7CiB9CiAKIGJvb2wgSlNMb2NhdGlvbjo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmpl
Y3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwg
Ym9vbCB0aHJvd0V4Y2VwdGlvbikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
UmVtb3RlRE9NV2luZG93Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1JlbW90ZURPTVdpbmRvd0N1c3RvbS5jcHAJKHJldmlzaW9uIDI2Nzc2NykK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVtb3RlRE9NV2luZG93Q3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDEyICsxMDAsMTEgQEAgYm9vbCBKU1JlbW90ZURPTVdp
bmRvdzo6ZGVsZXRlUHJvcGVydHlCeQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBKU1Jl
bW90ZURPTVdpbmRvdzo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1l
cywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIEpTUmVtb3RlRE9NV2luZG93OjpnZXRPd25Q
cm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzKQogewogICAgIC8vIEZJWE1FOiBB
ZGQgc2NvcGVkIGNoaWxkcmVuIGluZGV4ZXMuCiAKLSAgICBpZiAobW9kZS5pbmNsdWRlRG9udEVu
dW1Qcm9wZXJ0aWVzKCkpCi0gICAgICAgIGFkZENyb3NzT3JpZ2luT3duUHJvcGVydHlOYW1lczxD
cm9zc09yaWdpbk9iamVjdDo6V2luZG93PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlO
YW1lcyk7CisgICAgYWRkQ3Jvc3NPcmlnaW5Pd25Qcm9wZXJ0eU5hbWVzPENyb3NzT3JpZ2luT2Jq
ZWN0OjpXaW5kb3c+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzKTsKIH0KIAog
Ym9vbCBKU1JlbW90ZURPTVdpbmRvdzo6ZGVmaW5lT3duUHJvcGVydHkoSlNDOjpKU09iamVjdCos
IEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6UHJvcGVydHlO
YW1lLCBjb25zdCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAJ
KHJldmlzaW9uIDI2Nzc2NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6
ZWRTY3JpcHRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2OTksOCArMTY5OSw4IEBAIFNl
cmlhbGl6YXRpb25SZXR1cm5Db2RlIENsb25lU2VyaWFsaXplcjoKICAgICAgICAgICAgICAgICAg
ICAgaW5kZXhTdGFjay5yZW1vdmVMYXN0KCk7CiAgICAgICAgICAgICAgICAgICAgIGxlbmd0aFN0
YWNrLnJlbW92ZUxhc3QoKTsKIAotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0YWNrLmFw
cGVuZChQcm9wZXJ0eU5hbWVBcnJheSh2bSwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncywgUHJp
dmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpKTsKLSAgICAgICAgICAgICAgICAgICAgYXJyYXktPm1l
dGhvZFRhYmxlKHZtKS0+Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKGFycmF5LCBtX2xleGlj
YWxHbG9iYWxPYmplY3QsIHByb3BlcnR5U3RhY2subGFzdCgpLCBFbnVtZXJhdGlvbk1vZGUoKSk7
CisgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RhY2suYXBwZW5kKFByb3BlcnR5TmFtZUFy
cmF5KHZtLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzLCBEb250RW51bVByb3BlcnR5TW9kZTo6
RXhjbHVkZSkpOworICAgICAgICAgICAgICAgICAgICBhcnJheS0+bWV0aG9kVGFibGUodm0pLT5n
ZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoYXJyYXksIG1fbGV4aWNhbEdsb2JhbE9iamVjdCwg
cHJvcGVydHlTdGFjay5sYXN0KCkpOwogICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydHlT
dGFjay5sYXN0KCkuc2l6ZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZShOb25J
bmRleFByb3BlcnRpZXNUYWcpOwogICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhTdGFjay5h
cHBlbmQoMCk7CkBAIC0xNzQ5LDggKzE3NDksOCBAQCBTZXJpYWxpemF0aW9uUmV0dXJuQ29kZSBD
bG9uZVNlcmlhbGl6ZXI6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTZXJpYWxpemF0aW9u
UmV0dXJuQ29kZTo6RGF0YUNsb25lRXJyb3I7CiAgICAgICAgICAgICAgICAgaW5wdXRPYmplY3RT
dGFjay5hcHBlbmQoaW5PYmplY3QpOwogICAgICAgICAgICAgICAgIGluZGV4U3RhY2suYXBwZW5k
KDApOwotICAgICAgICAgICAgICAgIHByb3BlcnR5U3RhY2suYXBwZW5kKFByb3BlcnR5TmFtZUFy
cmF5KHZtLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzLCBQcml2YXRlU3ltYm9sTW9kZTo6RXhj
bHVkZSkpOwotICAgICAgICAgICAgICAgIGluT2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93
blByb3BlcnR5TmFtZXMoaW5PYmplY3QsIG1fbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlT
dGFjay5sYXN0KCksIEVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICAgICAgICAgICAgICBwcm9wZXJ0
eVN0YWNrLmFwcGVuZChQcm9wZXJ0eU5hbWVBcnJheSh2bSwgUHJvcGVydHlOYW1lTW9kZTo6U3Ry
aW5ncywgRG9udEVudW1Qcm9wZXJ0eU1vZGU6OkV4Y2x1ZGUpKTsKKyAgICAgICAgICAgICAgICBp
bk9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKGluT2JqZWN0LCBt
X2xleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5U3RhY2subGFzdCgpKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIG9iamVjdFN0YXJ0VmlzaXRNZW1iZXI6CiAgICAgICAgICAgICBGQUxM
VEhST1VHSDsKQEAgLTE4MTcsOCArMTgxNyw4IEBAIFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlIENs
b25lU2VyaWFsaXplcjoKICAgICAgICAgICAgICAgICAgICAgbWFwSXRlcmF0b3JTdGFjay5yZW1v
dmVMYXN0KCk7CiAgICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBpbnB1dE9i
amVjdFN0YWNrLmxhc3QoKTsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGpzRHluYW1pY0Nh
c3Q8SlNNYXAqPih2bSwgb2JqZWN0KSk7Ci0gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3Rh
Y2suYXBwZW5kKFByb3BlcnR5TmFtZUFycmF5KHZtLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdz
LCBQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSkpOwotICAgICAgICAgICAgICAgICAgICBvYmpl
Y3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIG1fbGV4aWNh
bEdsb2JhbE9iamVjdCwgcHJvcGVydHlTdGFjay5sYXN0KCksIEVudW1lcmF0aW9uTW9kZSgpKTsK
KyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdGFjay5hcHBlbmQoUHJvcGVydHlOYW1lQXJy
YXkodm0sIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MsIERvbnRFbnVtUHJvcGVydHlNb2RlOjpF
eGNsdWRlKSk7CisgICAgICAgICAgICAgICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5n
ZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgbV9sZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0
eVN0YWNrLmxhc3QoKSk7CiAgICAgICAgICAgICAgICAgICAgIHdyaXRlKE5vbk1hcFByb3BlcnRp
ZXNUYWcpOwogICAgICAgICAgICAgICAgICAgICBpbmRleFN0YWNrLmFwcGVuZCgwKTsKICAgICAg
ICAgICAgICAgICAgICAgZ290byBvYmplY3RTdGFydFZpc2l0TWVtYmVyOwpAQCAtMTg2MSw4ICsx
ODYxLDggQEAgU2VyaWFsaXphdGlvblJldHVybkNvZGUgQ2xvbmVTZXJpYWxpemVyOgogICAgICAg
ICAgICAgICAgICAgICBzZXRJdGVyYXRvclN0YWNrLnJlbW92ZUxhc3QoKTsKICAgICAgICAgICAg
ICAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGlucHV0T2JqZWN0U3RhY2subGFzdCgpOwogICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQoanNEeW5hbWljQ2FzdDxKU1NldCo+KHZtLCBvYmplY3Qp
KTsKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdGFjay5hcHBlbmQoUHJvcGVydHlOYW1l
QXJyYXkodm0sIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MsIFByaXZhdGVTeW1ib2xNb2RlOjpF
eGNsdWRlKSk7Ci0gICAgICAgICAgICAgICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5n
ZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgbV9sZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0
eVN0YWNrLmxhc3QoKSwgRW51bWVyYXRpb25Nb2RlKCkpOworICAgICAgICAgICAgICAgICAgICBw
cm9wZXJ0eVN0YWNrLmFwcGVuZChQcm9wZXJ0eU5hbWVBcnJheSh2bSwgUHJvcGVydHlOYW1lTW9k
ZTo6U3RyaW5ncywgRG9udEVudW1Qcm9wZXJ0eU1vZGU6OkV4Y2x1ZGUpKTsKKyAgICAgICAgICAg
ICAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMob2Jq
ZWN0LCBtX2xleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5U3RhY2subGFzdCgpKTsKICAgICAg
ICAgICAgICAgICAgICAgd3JpdGUoTm9uU2V0UHJvcGVydGllc1RhZyk7CiAgICAgICAgICAgICAg
ICAgICAgIGluZGV4U3RhY2suYXBwZW5kKDApOwogICAgICAgICAgICAgICAgICAgICBnb3RvIG9i
amVjdFN0YXJ0VmlzaXRNZW1iZXI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24gMjY3NzY3KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcg
Y29weSkKQEAgLTExMTIsMTEgKzExMTIsOCBAQCBzdWIgR2VuZXJhdGVHZXRPd25Qcm9wZXJ0eU5h
bWVzCiAgICAgbXkgJG5hbWVkR2V0dGVyT3BlcmF0aW9uID0gR2V0TmFtZWRHZXR0ZXJPcGVyYXRp
b24oJGludGVyZmFjZSk7CiAgICAgbXkgJGluZGV4ZWRHZXR0ZXJPcGVyYXRpb24gPSBHZXRJbmRl
eGVkR2V0dGVyT3BlcmF0aW9uKCRpbnRlcmZhY2UpOwogICAgIAotICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgInZvaWQgJHtjbGFzc05hbWV9OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBv
YmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVB
cnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpXG4iKTsKKyAgICBwdXNo
KEAkb3V0cHV0QXJyYXksICJ2b2lkICR7Y2xhc3NOYW1lfTo6Z2V0T3duUHJvcGVydHlOYW1lcyhK
U09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJv
cGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMpXG4iKTsKICAgICBwdXNoKEAkb3V0cHV0QXJy
YXksICJ7XG4iKTsKLSAgICBpZiAoJGluZGV4ZWRHZXR0ZXJPcGVyYXRpb24gfHwgJG5hbWVkR2V0
dGVyT3BlcmF0aW9uKSB7Ci0gICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBWTSYgdm0g
PSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpO1xuIik7Ci0gICAgfQogICAgIHB1c2go
QCRvdXRwdXRBcnJheSwgIiAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PCR7Y2xhc3NOYW1l
fSo+KG9iamVjdCk7XG4iKTsKICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyhvYmplY3QsIGluZm8oKSk7XG4iKTsKICAgICAKQEAgLTExMjQsOCAr
MTEyMSwxMCBAQCBzdWIgR2VuZXJhdGVHZXRPd25Qcm9wZXJ0eU5hbWVzCiAgICAgIyAgICBwcm9w
ZXJ0eSBpbmRpY2VzIGFyZSBlbnVtZXJhdGVkIGZpcnN0LCBpbiBudW1lcmljYWwgb3JkZXIuCiAg
ICAgIyBGSVhNRTogVGhpcyBzaG91bGQgc3VwcG9ydCBub24tY29udGlndW91cyBpbmRpY2VzLgog
ICAgIGlmICgkaW5kZXhlZEdldHRlck9wZXJhdGlvbikgewotICAgICAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICIgICAgZm9yICh1bnNpZ25lZCBpID0gMCwgY291bnQgPSB0aGlzT2JqZWN0LT53cmFw
cGVkKCkubGVuZ3RoKCk7IGkgPCBjb3VudDsgKytpKVxuIik7Ci0gICAgICAgIHB1c2goQCRvdXRw
dXRBcnJheSwgIiAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbSh2bSwg
aSkpO1xuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAocHJvcGVydHlO
YW1lcy5pbmNsdWRlU3RyaW5nUHJvcGVydGllcygpKSB7XG4iKTsKKyAgICAgICAgcHVzaChAJG91
dHB1dEFycmF5LCAiICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBjb3VudCA9IHRoaXNPYmpl
Y3QtPndyYXBwZWQoKS5sZW5ndGgoKTsgaSA8IGNvdW50OyArK2kpXG4iKTsKKyAgICAgICAgcHVz
aChAJG91dHB1dEFycmF5LCAiICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQ8RW51bWVyYWJs
ZTo6VHJ1ZT4oaSk7XG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIH1cbiIp
OwogICAgIH0KIAogICAgICMgMi4gSWYgdGhlIG9iamVjdCBzdXBwb3J0cyBuYW1lZCBwcm9wZXJ0
aWVzIGFuZCBkb2VzbuKAmXQgaW1wbGVtZW50IGFuIGludGVyZmFjZQpAQCAtMTEzNCwyMCArMTEz
MywxNiBAQCBzdWIgR2VuZXJhdGVHZXRPd25Qcm9wZXJ0eU5hbWVzCiAgICAgIyAgICBwcm9wZXJ0
eSB2aXNpYmlsaXR5IGFsZ29yaXRobSBhcmUgZW51bWVyYXRlZCBuZXh0LCBpbiB0aGUgb3JkZXIg
Z2l2ZW4gaW4KICAgICAjICAgIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBzZXQgb2Ygc3VwcG9ydGVk
IHByb3BlcnR5IG5hbWVzLgogICAgIGlmICgkbmFtZWRHZXR0ZXJPcGVyYXRpb24pIHsKLSAgICAg
ICAgaWYgKCEkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntMZWdhY3lVbmVudW1lcmFi
bGVOYW1lZFByb3BlcnRpZXN9KSB7Ci0gICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIg
ICAgZm9yIChhdXRvJiBwcm9wZXJ0eU5hbWUgOiB0aGlzT2JqZWN0LT53cmFwcGVkKCkuc3VwcG9y
dGVkUHJvcGVydHlOYW1lcygpKVxuIik7Ci0gICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICIgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHBy
b3BlcnR5TmFtZSkpO1xuIik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwdXNoKEAk
b3V0cHV0QXJyYXksICIgICAgaWYgKG1vZGUuaW5jbHVkZURvbnRFbnVtUHJvcGVydGllcygpKSB7
XG4iKTsKLSAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgZm9yIChhdXRv
JiBwcm9wZXJ0eU5hbWUgOiB0aGlzT2JqZWN0LT53cmFwcGVkKCkuc3VwcG9ydGVkUHJvcGVydHlO
YW1lcygpKVxuIik7Ci0gICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgICAg
ICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBwcm9wZXJ0eU5h
bWUpKTtcbiIpOwotICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIH1cbiIpOwot
ICAgICAgICB9CisgICAgICAgIG15ICRlbnVtZXJhYmxlID0gJGludGVyZmFjZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57TGVnYWN5VW5lbnVtZXJhYmxlTmFtZWRQcm9wZXJ0aWVzfSA/ICJFbnVtZXJh
YmxlOjpGYWxzZSIgOiAiRW51bWVyYWJsZTo6VHJ1ZSI7CisKKyAgICAgICAgcHVzaChAJG91dHB1
dEFycmF5LCAiICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7XG4i
KTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGZvciAoYXV0byYgcHJvcGVydHlO
YW1lIDogdGhpc09iamVjdC0+d3JhcHBlZCgpLnN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKSlcbiIp
OworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIHByb3BlcnR5TmFtZXMuYWRk
PCR7ZW51bWVyYWJsZX0+KElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHByb3BlcnR5TmFtZSkp
O1xuIik7CiAgICAgfQogICAgIAogICAgICMgMy4gRmluYWxseSwgYW55IGVudW1lcmFibGUgb3du
IHByb3BlcnRpZXMgb3IgcHJvcGVydGllcyBmcm9tIHRoZSBvYmplY3TigJlzCiAgICAgIyAgICBw
cm90b3R5cGUgY2hhaW4gYXJlIHRoZW4gZW51bWVyYXRlZCwgaW4gbm8gZGVmaW5lZCBvcmRlci4K
LSAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFt
ZXMob2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTtcbiIp
OworICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlO
YW1lcyhvYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMpO1xuIik7CiAg
ICAgcHVzaChAJG91dHB1dEFycmF5LCAifVxuXG4iKTsKIH0KIApAQCAtMjk0Niw4ICsyOTQxLDgg
QEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgfQogICAgIAogICAgIGlmIChJbnN0YW5jZU92ZXJy
aWRlc0dldE93blByb3BlcnR5TmFtZXMoJGludGVyZmFjZSkpIHsKLSAgICAgICAgcHVzaChAaGVh
ZGVyQ29udGVudCwgIiAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNP
YmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpT
Qzo6RW51bWVyYXRpb25Nb2RlID0gSlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7XG4iKTsKLSAgICAg
ICAgJHN0cnVjdHVyZUZsYWdzeyJKU0M6Ok92ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5TmFt
ZXMifSA9IDE7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIHZvaWQg
Z2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCos
IEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmKTtcbiIpOworICAgICAgICAkc3RydWN0dXJlRmxhZ3N7
IkpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyJ9ID0gMTsKICAgICB9CiAgICAgCiAg
ICAgaWYgKEluc3RhbmNlT3ZlcnJpZGVzUHV0KCRpbnRlcmZhY2UpKSB7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RFdmVudFRhcmdldC5jcHAJKHJldmlzaW9uIDI2Nzc2NykKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdldC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIwOSwxNiArMjA5LDE4IEBAIGJvb2wgSlNUZXN0RXZlbnRUYXJnZXQ6OmdldE93blBy
b3BlcnR5U2wKICAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgo
b2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbmRleCwgc2xvdCk7CiB9CiAKLXZvaWQgSlNU
ZXN0RXZlbnRUYXJnZXQ6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9w
ZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNUZXN0RXZlbnRUYXJnZXQ6
OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzKQogewot
ICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RFdmVudFRhcmdldCo+KG9iamVjdCk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyhvYmplY3QsIGluZm8oKSk7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMCwgY291bnQgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCkubGVuZ3RoKCk7IGkgPCBjb3Vu
dDsgKytpKQotICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tKHZtLCBp
KSk7CisgICAgaWYgKHByb3BlcnR5TmFtZXMuaW5jbHVkZVN0cmluZ1Byb3BlcnRpZXMoKSkgewor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBjb3VudCA9IHRoaXNPYmplY3QtPndyYXBwZWQo
KS5sZW5ndGgoKTsgaSA8IGNvdW50OyArK2kpCisgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFk
ZDxFbnVtZXJhYmxlOjpUcnVlPihpKTsKKyAgICB9CisgICAgVk0mIHZtID0gSlNDOjpnZXRWTShs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBmb3IgKGF1dG8mIHByb3BlcnR5TmFtZSA6IHRoaXNP
YmplY3QtPndyYXBwZWQoKS5zdXBwb3J0ZWRQcm9wZXJ0eU5hbWVzKCkpCi0gICAgICAgIHByb3Bl
cnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHByb3BlcnR5TmFtZSkpOwot
ICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgbGV4aWNhbEdsb2JhbE9i
amVjdCwgcHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkPEVu
dW1lcmFibGU6OlRydWU+KElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHByb3BlcnR5TmFtZSkp
OworICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgcHJvcGVydHlOYW1lcyk7CiB9CiAKIHRlbXBsYXRlPD4gaW5saW5lIEpTVGVzdEV2
ZW50VGFyZ2V0KiBJRExPcGVyYXRpb248SlNUZXN0RXZlbnRUYXJnZXQ+OjpjYXN0KEpTR2xvYmFs
T2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUmIGNhbGxGcmFtZSkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdl
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RFdmVudFRhcmdldC5oCShyZXZpc2lvbiAyNjc3NjcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQuaAkod29ya2luZyBj
b3B5KQpAQCAtNDMsNyArNDMsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFRlc3RFdmVudFRhcmdl
dCogdG9XcmFwcGVkKEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwogICAgIHN0YXRpYyBib29sIGdl
dE93blByb3BlcnR5U2xvdChKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpT
Qzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGdl
dE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7Ci0gICAgc3Rh
dGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2Jh
bE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0aW9uTW9kZSA9
IEpTQzo6RW51bWVyYXRpb25Nb2RlKCkpOworICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5
TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5
TmFtZUFycmF5Jik7CiAKICAgICBERUNMQVJFX0lORk87CiAKQEAgLTY2LDcgKzY2LDcgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGVzdEV2ZW50VGFyZ2V0Jj4oQmFzZTo6
d3JhcHBlZCgpKTsKICAgICB9CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9w
ZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93
blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6TWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCB8IEpTQzo6T3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlOYW1l
cyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90OworICAgIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6
R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6OkludGVy
Y2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBK
U0M6Ok1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5
TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdDsKIHByb3RlY3RlZDoKICAg
ICBKU1Rlc3RFdmVudFRhcmdldChKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Jiwg
UmVmPFRlc3RFdmVudFRhcmdldD4mJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
SW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5jcHAJKHJldmlzaW9uIDI2Nzc2NykKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyTm9J
ZGVudGlmaWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc5LDE0ICsxNzksMTUgQEAgYm9vbCBK
U1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyOjpnZQogICAgIHJldHVybiBKU09iamVjdDo6
Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChvYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIGlu
ZGV4LCBzbG90KTsKIH0KIAotdm9pZCBKU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyOjpn
ZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVy
YXRpb25Nb2RlIG1vZGUpCit2b2lkIEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6Omdl
dE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGlj
YWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzKQogewotICAg
IFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyKj4ob2JqZWN0
KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKG9iamVjdCwgaW5mbygpKTsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwLCBjb3VudCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKS5sZW5ndGgo
KTsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6
OmZyb20odm0sIGkpKTsKLSAgICBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3Qs
IGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworICAgIGlmIChwcm9w
ZXJ0eU5hbWVzLmluY2x1ZGVTdHJpbmdQcm9wZXJ0aWVzKCkpIHsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMCwgY291bnQgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCkubGVuZ3RoKCk7IGkgPCBj
b3VudDsgKytpKQorICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQ8RW51bWVyYWJsZTo6VHJ1
ZT4oaSk7CisgICAgfQorICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwg
bGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcyk7CiB9CiAKIGJvb2wgSlNUZXN0SW5k
ZXhlZFNldHRlck5vSWRlbnRpZmllcjo6cHV0KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUg
dmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgcHV0UHJvcGVydHlTbG90KQpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50
aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5oCShyZXZpc2lvbiAyNjc3Njcp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhl
ZFNldHRlck5vSWRlbnRpZmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIHB1
YmxpYzoKICAgICBzdGF0aWMgVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIqIHRvV3JhcHBl
ZChKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0
eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5
TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgdW5zaWdu
ZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyB2b2lkIGdl
dE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBK
U0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpFbnVtZXJhdGlvbk1vZGUgPSBKU0M6OkVudW1l
cmF0aW9uTW9kZSgpKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6
SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYp
OwogICAgIHN0YXRpYyBib29sIHB1dChKU0M6OkpTQ2VsbCosIEpTQzo6SlNHbG9iYWxPYmplY3Qq
LCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYp
OwogICAgIHN0YXRpYyBib29sIHB1dEJ5SW5kZXgoSlNDOjpKU0NlbGwqLCBKU0M6OkpTR2xvYmFs
T2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIGJvb2wgc2hvdWxk
VGhyb3cpOwogICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTQzo6SlNPYmplY3Qq
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIGNvbnN0IEpTQzo6UHJv
cGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CkBAIC02NCw3ICs2NCw3IEBAIHB1
YmxpYzoKICAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6
Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBB
bmFseXplciYpOwogcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6SW50ZXJjZXB0c0dldE93blBy
b3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVz
QW55Rm9ybU9mR2V0UHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlT
bG90OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNl
OjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5k
ZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlO
YW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90OwogcHJvdGVjdGVkOgogICAg
IEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUds
b2JhbE9iamVjdCYsIFJlZjxUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllcj4mJik7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVk
U2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNl
cHRpb24uY3BwCShyZXZpc2lvbiAyNjc3NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTc5LDE0ICsxNzksMTUgQEAgYm9vbCBKU1Rlc3RJbmRleGVkU2V0
dGVyVGhyb3dpbmdFeGNlcHRpbwogICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlT
bG90QnlJbmRleChvYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIGluZGV4LCBzbG90KTsKIH0K
IAotdm9pZCBKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OmdldE93blByb3Bl
cnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUg
bW9kZSkKK3ZvaWQgSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpnZXRPd25Q
cm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcykKIHsKLSAgICBWTSYg
dm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8qIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uKj4ob2JqZWN0
KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKG9iamVjdCwgaW5mbygpKTsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwLCBjb3VudCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKS5sZW5ndGgo
KTsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6
OmZyb20odm0sIGkpKTsKLSAgICBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3Qs
IGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworICAgIGlmIChwcm9w
ZXJ0eU5hbWVzLmluY2x1ZGVTdHJpbmdQcm9wZXJ0aWVzKCkpIHsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMCwgY291bnQgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCkubGVuZ3RoKCk7IGkgPCBj
b3VudDsgKytpKQorICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQ8RW51bWVyYWJsZTo6VHJ1
ZT4oaSk7CisgICAgfQorICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwg
bGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcyk7CiB9CiAKIGJvb2wgSlNUZXN0SW5k
ZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpwdXQoSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNW
YWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBwdXRQcm9wZXJ0eVNsb3QpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlclRo
cm93aW5nRXhjZXB0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5oCShy
ZXZpc2lvbiAyNjc3NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBUZXN0SW5kZXhlZFNldHRlclRo
cm93aW5nRXhjZXB0aW9uKiB0b1dyYXBwZWQoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CiAgICAg
c3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CiAgICAg
c3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0M6OkpTT2JqZWN0KiwgSlND
OjpKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNs
b3QmKTsKLSAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3Qq
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RW51
bWVyYXRpb25Nb2RlID0gSlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7CisgICAgc3RhdGljIHZvaWQg
Z2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCos
IEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmKTsKICAgICBzdGF0aWMgYm9vbCBwdXQoSlNDOjpKU0Nl
bGwqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1
ZSwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBwdXRCeUluZGV4KEpT
Qzo6SlNDZWxsKiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwg
SlNDOjpKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKICAgICBzdGF0aWMgYm9vbCBkZWZpbmVP
d25Qcm9wZXJ0eShKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJv
cGVydHlOYW1lLCBjb25zdCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhy
b3cpOwpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpTQzo6SXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6
ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3Mg
fCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJ
c05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5TmFtZXMgfCBKU0M6
Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdDsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkludGVyY2Vw
dHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6
Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3Bl
cnR5U2xvdDsKIHByb3RlY3RlZDoKICAgICBKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNl
cHRpb24oSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0SW5kZXhl
ZFNldHRlclRocm93aW5nRXhjZXB0aW9uPiYmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAJKHJldmlzaW9uIDI2Nzc2NykK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVk
U2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODYsMTQgKzE4Niwx
NSBAQCBib29sIEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6CiAgICAgcmV0dXJu
IEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9iamVjdCwgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgaW5kZXgsIHNsb3QpOwogfQogCi12b2lkIEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRo
SWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5
TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU1Rlc3RJbmRleGVkU2V0dGVyV2l0
aElkZW50aWZpZXI6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0
eU5hbWVzKQogewotICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7
CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElk
ZW50aWZpZXIqPihvYmplY3QpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMob2JqZWN0
LCBpbmZvKCkpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDAsIGNvdW50ID0gdGhpc09iamVjdC0+
d3JhcHBlZCgpLmxlbmd0aCgpOyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAgcHJvcGVydHlOYW1l
cy5hZGQoSWRlbnRpZmllcjo6ZnJvbSh2bSwgaSkpOwotICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9w
ZXJ0eU5hbWVzKG9iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcywgbW9k
ZSk7CisgICAgaWYgKHByb3BlcnR5TmFtZXMuaW5jbHVkZVN0cmluZ1Byb3BlcnRpZXMoKSkgewor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBjb3VudCA9IHRoaXNPYmplY3QtPndyYXBwZWQo
KS5sZW5ndGgoKTsgaSA8IGNvdW50OyArK2kpCisgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFk
ZDxFbnVtZXJhYmxlOjpUcnVlPihpKTsKKyAgICB9CisgICAgSlNPYmplY3Q6OmdldE93blByb3Bl
cnR5TmFtZXMob2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzKTsKIH0K
IAogYm9vbCBKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6OnB1dChKU0NlbGwqIGNl
bGwsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHB1dFByb3BlcnR5U2xv
dCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJ
bmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlm
aWVyLmgJKHJldmlzaW9uIDI2Nzc2NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFRlc3RJbmRleGVkU2V0
dGVyV2l0aElkZW50aWZpZXIqIHRvV3JhcHBlZChKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKICAg
ICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAg
ICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNPYmplY3QqLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5
U2xvdCYpOwotICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVj
dCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpF
bnVtZXJhdGlvbk1vZGUgPSBKU0M6OkVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICBzdGF0aWMgdm9p
ZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYpOwogICAgIHN0YXRpYyBib29sIHB1dChKU0M6OkpT
Q2VsbCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpKU1Zh
bHVlLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIHB1dEJ5SW5kZXgo
SlNDOjpKU0NlbGwqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1l
LCBKU0M6OkpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwogICAgIHN0YXRpYyBib29sIGRlZmlu
ZU93blByb3BlcnR5KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQ
cm9wZXJ0eU5hbWUsIGNvbnN0IEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRU
aHJvdyk7CkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNDOjpJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBhbmFs
eXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHVibGljOgotICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFn
cyB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0
aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlOYW1lcyB8IEpT
Qzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5z
aWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6SW50ZXJj
ZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpT
Qzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJv
cGVydHlTbG90OwogcHJvdGVjdGVkOgogICAgIEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRp
ZmllcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3RJbmRleGVk
U2V0dGVyV2l0aElkZW50aWZpZXI+JiYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdElucy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdExl
Z2FjeU92ZXJyaWRlQnVpbHRJbnMuY3BwCShyZXZpc2lvbiAyNjc3NjcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdElu
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMCwxNCArMjAwLDE0IEBAIGJvb2wgSlNUZXN0TGVn
YWN5T3ZlcnJpZGVCdWlsdEluczo6Z2V0T3cKICAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blBy
b3BlcnR5U2xvdEJ5SW5kZXgob2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbmRleCwgc2xv
dCk7CiB9CiAKLXZvaWQgSlNUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdEluczo6Z2V0T3duUHJvcGVy
dHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBt
b2RlKQordm9pZCBKU1Rlc3RMZWdhY3lPdmVycmlkZUJ1aWx0SW5zOjpnZXRPd25Qcm9wZXJ0eU5h
bWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcykKIHsKLSAgICBWTSYgdm0gPSBKU0M6
OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdElucyo+KG9iamVjdCk7CiAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyhvYmplY3QsIGluZm8oKSk7CisgICAgVk0mIHZtID0gSlNDOjpnZXRW
TShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBmb3IgKGF1dG8mIHByb3BlcnR5TmFtZSA6IHRo
aXNPYmplY3QtPndyYXBwZWQoKS5zdXBwb3J0ZWRQcm9wZXJ0eU5hbWVzKCkpCi0gICAgICAgIHBy
b3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHByb3BlcnR5TmFtZSkp
OwotICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgcHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAgICAgIHByb3BlcnR5TmFtZXMuYWRk
PEVudW1lcmFibGU6OlRydWU+KElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHByb3BlcnR5TmFt
ZSkpOworICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgbGV4aWNhbEds
b2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcyk7CiB9CiAKIHRlbXBsYXRlPD4gaW5saW5lIEpTVGVz
dExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMqIElETE9wZXJhdGlvbjxKU1Rlc3RMZWdhY3lPdmVycmlk
ZUJ1aWx0SW5zPjo6Y2FzdChKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2Fs
bEZyYW1lJiBjYWxsRnJhbWUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdElucy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RMZWdhY3lPdmVycmlk
ZUJ1aWx0SW5zLmgJKHJldmlzaW9uIDI2Nzc2NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBUZXN0TGVnYWN5T3Zl
cnJpZGVCdWlsdElucyogdG9XcmFwcGVkKEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwogICAgIHN0
YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2Jh
bE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAgIHN0
YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDOjpKU09iamVjdCosIEpTQzo6
SlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90
Jik7Ci0gICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0Kiwg
SlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkVudW1l
cmF0aW9uTW9kZSA9IEpTQzo6RW51bWVyYXRpb25Nb2RlKCkpOworICAgIHN0YXRpYyB2b2lkIGdl
dE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBK
U0M6OlByb3BlcnR5TmFtZUFycmF5Jik7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0M6OkpT
Q2VsbCopOwogCiAgICAgREVDTEFSRV9JTkZPOwpAQCAtNjEsNyArNjEsNyBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7
CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXIm
KTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJl
IHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3Ro
SXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVzIHwgSlND
OjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Q7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNp
Z25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Q
cm9wZXJ0eVNsb3RJc0ltcHVyZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5
SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVy
dHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90OwogcHJvdGVjdGVkOgog
ICAgIEpTVGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUds
b2JhbE9iamVjdCYsIFJlZjxUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdElucz4mJik7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZElu
ZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lk
ZW50aWZpZXIuY3BwCShyZXZpc2lvbiAyNjc3NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA4LDE2ICsyMDgsMTggQEAgYm9vbCBKU1Rlc3ROYW1l
ZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aQogICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJv
cGVydHlTbG90QnlJbmRleChvYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIGluZGV4LCBzbG90
KTsKIH0KIAotdm9pZCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6Omdl
dE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGlj
YWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJh
dGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlm
aWVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcykK
IHsKLSAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1
dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVu
dGlmaWVyKj4ob2JqZWN0KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKG9iamVjdCwg
aW5mbygpKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBjb3VudCA9IHRoaXNPYmplY3QtPndy
YXBwZWQoKS5sZW5ndGgoKTsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgIHByb3BlcnR5TmFtZXMu
YWRkKElkZW50aWZpZXI6OmZyb20odm0sIGkpKTsKKyAgICBpZiAocHJvcGVydHlOYW1lcy5pbmNs
dWRlU3RyaW5nUHJvcGVydGllcygpKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDAsIGNv
dW50ID0gdGhpc09iamVjdC0+d3JhcHBlZCgpLmxlbmd0aCgpOyBpIDwgY291bnQ7ICsraSkKKyAg
ICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkPEVudW1lcmFibGU6OlRydWU+KGkpOworICAgIH0K
KyAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGZvciAo
YXV0byYgcHJvcGVydHlOYW1lIDogdGhpc09iamVjdC0+d3JhcHBlZCgpLnN1cHBvcnRlZFByb3Bl
cnR5TmFtZXMoKSkKLSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgcHJvcGVydHlOYW1lKSk7Ci0gICAgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFt
ZXMob2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKKyAg
ICAgICAgcHJvcGVydHlOYW1lcy5hZGQ8RW51bWVyYWJsZTo6VHJ1ZT4oSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgcHJvcGVydHlOYW1lKSk7CisgICAgSlNPYmplY3Q6OmdldE93blByb3BlcnR5
TmFtZXMob2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzKTsKIH0KIAog
Ym9vbCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OnB1dChKU0NlbGwq
IGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHB1dFByb3BlcnR5
U2xvdCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVk
U2V0dGVyTm9JZGVudGlmaWVyLmgJKHJldmlzaW9uIDI2Nzc2NykKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lk
ZW50aWZpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIqIHRvV3JhcHBlZChK
U0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNs
b3QoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFt
ZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNs
b3RCeUluZGV4KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQg
cHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyB2b2lkIGdldE93
blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpFbnVtZXJhdGlvbk1vZGUgPSBKU0M6OkVudW1lcmF0
aW9uTW9kZSgpKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNP
YmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYpOwog
ICAgIHN0YXRpYyBib29sIHB1dChKU0M6OkpTQ2VsbCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBK
U0M6OlByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYpOwog
ICAgIHN0YXRpYyBib29sIHB1dEJ5SW5kZXgoSlNDOjpKU0NlbGwqLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIGJvb2wgc2hvdWxkVGhy
b3cpOwogICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTQzo6SlNPYmplY3QqLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIGNvbnN0IEpTQzo6UHJvcGVy
dHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CkBAIC02NCw3ICs2NCw3IEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0m
IHZtKTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFs
eXplciYpOwogcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJ
bXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNs
b3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0FueUZvcm1P
ZkdldFByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpT
Qzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJv
cGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6OkludGVyY2VwdHNHZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJy
aWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xv
dCB8IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOwogcHJvdGVjdGVkOgogICAgIEpTVGVz
dE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcihKU0M6OlN0cnVjdHVyZSosIEpTRE9N
R2xvYmFsT2JqZWN0JiwgUmVmPFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI+
JiYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFu
ZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAJKHJldmlzaW9uIDI2Nzc2NykKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZElu
ZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwOCwx
NiArMjA4LDE4IEBAIGJvb2wgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmcKICAg
ICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgob2JqZWN0LCBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBpbmRleCwgc2xvdCk7CiB9CiAKLXZvaWQgSlNUZXN0TmFtZWRBbmRJ
bmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5
TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNU
ZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OmdldE93blByb3BlcnR5
TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzKQogewotICAgIFZNJiB2bSA9IEpT
Qzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbio+KG9iamVj
dCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhvYmplY3QsIGluZm8oKSk7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMCwgY291bnQgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCkubGVuZ3Ro
KCk7IGkgPCBjb3VudDsgKytpKQotICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVy
Ojpmcm9tKHZtLCBpKSk7CisgICAgaWYgKHByb3BlcnR5TmFtZXMuaW5jbHVkZVN0cmluZ1Byb3Bl
cnRpZXMoKSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBjb3VudCA9IHRoaXNPYmpl
Y3QtPndyYXBwZWQoKS5sZW5ndGgoKTsgaSA8IGNvdW50OyArK2kpCisgICAgICAgICAgICBwcm9w
ZXJ0eU5hbWVzLmFkZDxFbnVtZXJhYmxlOjpUcnVlPihpKTsKKyAgICB9CisgICAgVk0mIHZtID0g
SlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBmb3IgKGF1dG8mIHByb3BlcnR5
TmFtZSA6IHRoaXNPYmplY3QtPndyYXBwZWQoKS5zdXBwb3J0ZWRQcm9wZXJ0eU5hbWVzKCkpCi0g
ICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHByb3Bl
cnR5TmFtZSkpOwotICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgbGV4
aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAgICAgIHByb3BlcnR5
TmFtZXMuYWRkPEVudW1lcmFibGU6OlRydWU+KElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHBy
b3BlcnR5TmFtZSkpOworICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwg
bGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcyk7CiB9CiAKIGJvb2wgSlNUZXN0TmFt
ZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OnB1dChKU0NlbGwqIGNlbGwsIEpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHB1dFByb3BlcnR5U2xvdCkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFu
ZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0
ZXJUaHJvd2luZ0V4Y2VwdGlvbi5oCShyZXZpc2lvbiAyNjc3NjcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhy
b3dpbmdFeGNlcHRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiog
dG9XcmFwcGVkKEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwogICAgIHN0YXRpYyBib29sIGdldE93
blByb3BlcnR5U2xvdChKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6
UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGdldE93
blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3Qq
LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGlj
IHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9i
amVjdCosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0aW9uTW9kZSA9IEpT
Qzo6RW51bWVyYXRpb25Nb2RlKCkpOworICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFt
ZXMoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFt
ZUFycmF5Jik7CiAgICAgc3RhdGljIGJvb2wgcHV0KEpTQzo6SlNDZWxsKiwgSlNDOjpKU0dsb2Jh
bE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHV0UHJvcGVy
dHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgcHV0QnlJbmRleChKU0M6OkpTQ2VsbCosIEpTQzo6
SlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgYm9v
bCBzaG91bGRUaHJvdyk7CiAgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNDOjpK
U09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSwgY29uc3Qg
SlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKQEAgLTY0LDcgKzY0
LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcklt
cGwoSlNDOjpWTSYgdm0pOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpT
Qzo6SGVhcEFuYWx5emVyJik7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9w
ZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93
blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJp
ZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVy
dHlTbG90IHwgSlNDOjpQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7CisgICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlND
OjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50
ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8
IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3du
UHJvcGVydHlTbG90IHwgSlNDOjpQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7CiBwcm90ZWN0ZWQ6
CiAgICAgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24oSlNDOjpT
dHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0TmFtZWRBbmRJbmRleGVkU2V0
dGVyVGhyb3dpbmdFeGNlcHRpb24+JiYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZp
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAJKHJldmlz
aW9uIDI2Nzc2NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIxNywxNiArMjE3LDE4IEBAIGJvb2wgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVy
V2l0aElkZW4KICAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgo
b2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbmRleCwgc2xvdCk7CiB9CiAKLXZvaWQgSlNU
ZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6OmdldE93blByb3BlcnR5TmFt
ZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qs
IFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkK
K3ZvaWQgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6OmdldE93blBy
b3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzKQogewotICAgIFZNJiB2
bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcio+KG9i
amVjdCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhvYmplY3QsIGluZm8oKSk7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMCwgY291bnQgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCkubGVu
Z3RoKCk7IGkgPCBjb3VudDsgKytpKQotICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlm
aWVyOjpmcm9tKHZtLCBpKSk7CisgICAgaWYgKHByb3BlcnR5TmFtZXMuaW5jbHVkZVN0cmluZ1By
b3BlcnRpZXMoKSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBjb3VudCA9IHRoaXNP
YmplY3QtPndyYXBwZWQoKS5sZW5ndGgoKTsgaSA8IGNvdW50OyArK2kpCisgICAgICAgICAgICBw
cm9wZXJ0eU5hbWVzLmFkZDxFbnVtZXJhYmxlOjpUcnVlPihpKTsKKyAgICB9CisgICAgVk0mIHZt
ID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBmb3IgKGF1dG8mIHByb3Bl
cnR5TmFtZSA6IHRoaXNPYmplY3QtPndyYXBwZWQoKS5zdXBwb3J0ZWRQcm9wZXJ0eU5hbWVzKCkp
Ci0gICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHBy
b3BlcnR5TmFtZSkpOwotICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwg
bGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAgICAgIHByb3Bl
cnR5TmFtZXMuYWRkPEVudW1lcmFibGU6OlRydWU+KElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
IHByb3BlcnR5TmFtZSkpOworICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVj
dCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcyk7CiB9CiAKIGJvb2wgSlNUZXN0
TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6OnB1dChKU0NlbGwqIGNlbGwsIEpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHB1dFByb3BlcnR5U2xvdCkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFu
ZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJX
aXRoSWRlbnRpZmllci5oCShyZXZpc2lvbiAyNjc3NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50
aWZpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllciogdG9XcmFwcGVkKEpT
Qzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xv
dChKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1l
LCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xv
dEJ5SW5kZXgoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBw
cm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGljIHZvaWQgZ2V0T3du
UHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6
UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0aW9uTW9kZSA9IEpTQzo6RW51bWVyYXRp
b25Nb2RlKCkpOworICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09i
amVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5Jik7CiAg
ICAgc3RhdGljIGJvb2wgcHV0KEpTQzo6SlNDZWxsKiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpT
Qzo6UHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHV0UHJvcGVydHlTbG90Jik7CiAg
ICAgc3RhdGljIGJvb2wgcHV0QnlJbmRleChKU0M6OkpTQ2VsbCosIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJv
dyk7CiAgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNDOjpKU09iamVjdCosIEpT
Qzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSwgY29uc3QgSlNDOjpQcm9wZXJ0
eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGlj
OgogICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYg
dm0pOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5
emVyJik7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0lt
cHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xv
dEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzQW55Rm9ybU9m
R2V0UHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlND
OjpQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9w
ZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93
blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJp
ZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90
IHwgSlNDOjpQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0
TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RP
TUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZp
ZXI+JiYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyTm9JZGVu
dGlmaWVyLmNwcAkocmV2aXNpb24gMjY3NzY3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE5MSwxNCArMTkxLDE0IEBAIGJvb2wgSlNUZXN0TmFtZWREZWxldGVyTm9J
ZGVudGlmaWVyOjpnZXQKICAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5
SW5kZXgob2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbmRleCwgc2xvdCk7CiB9CiAKLXZv
aWQgSlNUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpT
T2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9w
ZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lk
IEpTVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09i
amVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVy
dHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMpCiB7Ci0gICAgVk0mIHZtID0gSlNDOjpnZXRWTShs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVz
dE5hbWVkRGVsZXRlck5vSWRlbnRpZmllcio+KG9iamVjdCk7CiAgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyhvYmplY3QsIGluZm8oKSk7CisgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKICAgICBmb3IgKGF1dG8mIHByb3BlcnR5TmFtZSA6IHRoaXNPYmpl
Y3QtPndyYXBwZWQoKS5zdXBwb3J0ZWRQcm9wZXJ0eU5hbWVzKCkpCi0gICAgICAgIHByb3BlcnR5
TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHByb3BlcnR5TmFtZSkpOwotICAg
IEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVj
dCwgcHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkPEVudW1l
cmFibGU6OlRydWU+KElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHByb3BlcnR5TmFtZSkpOwor
ICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgbGV4aWNhbEdsb2JhbE9i
amVjdCwgcHJvcGVydHlOYW1lcyk7CiB9CiAKIGJvb2wgSlNUZXN0TmFtZWREZWxldGVyTm9JZGVu
dGlmaWVyOjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBEZWxldGVQcm9wZXJ0
eVNsb3QmIHNsb3QpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlck5vSWRl
bnRpZmllci5oCShyZXZpc2lvbiAyNjc3NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBUZXN0TmFtZWREZWxl
dGVyTm9JZGVudGlmaWVyKiB0b1dyYXBwZWQoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CiAgICAg
c3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CiAgICAg
c3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0M6OkpTT2JqZWN0KiwgSlND
OjpKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNs
b3QmKTsKLSAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3Qq
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RW51
bWVyYXRpb25Nb2RlID0gSlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7CisgICAgc3RhdGljIHZvaWQg
Z2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCos
IEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmKTsKICAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0
eShKU0M6OkpTQ2VsbCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSwg
SlNDOjpEZWxldGVQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0
eUJ5SW5kZXgoSlNDOjpKU0NlbGwqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQpOwog
ICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsKQEAgLTYzLDcgKzYzLDcgQEAg
cHVibGljOgogICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlND
OjpWTSYgdm0pOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVh
cEFuYWx5emVyJik7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNs
b3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3Bl
cnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzQW55
Rm9ybU9mR2V0UHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90
OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpT
dHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0
eUFic2VuY2UgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldo
ZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBK
U0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdDsKIHByb3RlY3RlZDoKICAgICBKU1Rlc3RO
YW1lZERlbGV0ZXJOb0lkZW50aWZpZXIoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVj
dCYsIFJlZjxUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyPiYmKTsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlclRocm93
aW5nRXhjZXB0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwCShy
ZXZpc2lvbiAyNjc3NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xOTEsMTQgKzE5MSwxNCBAQCBib29sIEpTVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhj
ZXB0aW9uCiAgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9i
amVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgaW5kZXgsIHNsb3QpOwogfQogCi12b2lkIEpTVGVz
dE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2Jq
ZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0
eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIEpT
VGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpT
T2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9w
ZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcykKIHsKLSAgICBWTSYgdm0gPSBKU0M6OmdldFZN
KGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNU
ZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb24qPihvYmplY3QpOwogICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFMob2JqZWN0LCBpbmZvKCkpOworICAgIFZNJiB2bSA9IEpTQzo6Z2V0
Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgZm9yIChhdXRvJiBwcm9wZXJ0eU5hbWUgOiB0
aGlzT2JqZWN0LT53cmFwcGVkKCkuc3VwcG9ydGVkUHJvcGVydHlOYW1lcygpKQotICAgICAgICBw
cm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBwcm9wZXJ0eU5hbWUp
KTsKLSAgICBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGxleGljYWxHbG9i
YWxPYmplY3QsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworICAgICAgICBwcm9wZXJ0eU5hbWVzLmFk
ZDxFbnVtZXJhYmxlOjpUcnVlPihJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBwcm9wZXJ0eU5h
bWUpKTsKKyAgICBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGxleGljYWxH
bG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMpOwogfQogCiBib29sIEpTVGVzdE5hbWVkRGVsZXRl
clRocm93aW5nRXhjZXB0aW9uOjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNlbGwsIEpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBE
ZWxldGVQcm9wZXJ0eVNsb3QmIHNsb3QpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb24uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb24uaAkocmV2aXNpb24gMjY3NzY3KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlclRo
cm93aW5nRXhjZXB0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGlj
OgogICAgIHN0YXRpYyBUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb24qIHRvV3JhcHBl
ZChKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0
eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5
TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgdW5zaWdu
ZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyB2b2lkIGdl
dE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBK
U0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpFbnVtZXJhdGlvbk1vZGUgPSBKU0M6OkVudW1l
cmF0aW9uTW9kZSgpKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6
SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYp
OwogICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQzo6SlNDZWxsKiwgSlNDOjpKU0ds
b2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OkRlbGV0ZVByb3BlcnR5U2xvdCYp
OwogICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0M6OkpTQ2VsbCosIEpT
Qzo6SlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCk7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShK
U0M6OkpTQ2VsbCopOwpAQCAtNjMsNyArNjMsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpTQzo6
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZv
aWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0
dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNl
bmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVu
Z3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVzIHwg
SlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Q7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1
bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRP
d25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0
c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6
T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVy
dHlTbG90OwogcHJvdGVjdGVkOgogICAgIEpTVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0
aW9uKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdE5hbWVkRGVs
ZXRlclRocm93aW5nRXhjZXB0aW9uPiYmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIuY3BwCShyZXZpc2lvbiAyNjc3NjcpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVy
V2l0aElkZW50aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTcsMTQgKzE5NywxNCBAQCBi
b29sIEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyOjpnCiAgICAgcmV0dXJuIEpTT2Jq
ZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVj
dCwgaW5kZXgsIHNsb3QpOwogfQogCi12b2lkIEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlm
aWVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywg
RW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlm
aWVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcykK
IHsKLSAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1
dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIq
PihvYmplY3QpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMob2JqZWN0LCBpbmZvKCkp
OworICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgZm9y
IChhdXRvJiBwcm9wZXJ0eU5hbWUgOiB0aGlzT2JqZWN0LT53cmFwcGVkKCkuc3VwcG9ydGVkUHJv
cGVydHlOYW1lcygpKQotICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCBwcm9wZXJ0eU5hbWUpKTsKLSAgICBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlO
YW1lcyhvYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwor
ICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZDxFbnVtZXJhYmxlOjpUcnVlPihJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCBwcm9wZXJ0eU5hbWUpKTsKKyAgICBKU09iamVjdDo6Z2V0T3duUHJvcGVy
dHlOYW1lcyhvYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMpOwogfQog
CiBib29sIEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyOjpkZWxldGVQcm9wZXJ0eShK
U0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCBEZWxldGVQcm9wZXJ0eVNsb3QmIHNsb3QpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyV2l0
aElkZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIuaAkocmV2aXNpb24g
MjY3NzY3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQx
LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIq
IHRvV3JhcHBlZChKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKICAgICBzdGF0aWMgYm9vbCBnZXRP
d25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBnZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRp
YyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxP
YmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpFbnVtZXJhdGlvbk1vZGUgPSBK
U0M6OkVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5h
bWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5h
bWVBcnJheSYpOwogICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQzo6SlNDZWxsKiwg
SlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OkRlbGV0ZVByb3Bl
cnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0M6OkpT
Q2VsbCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCk7CiAgICAgc3RhdGljIHZvaWQg
ZGVzdHJveShKU0M6OkpTQ2VsbCopOwpAQCAtNjMsNyArNjMsNyBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAg
c3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFz
ZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJv
cGVydHlBYnNlbmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2
ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0
eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Q7CisgICAgc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwg
SlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6
SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVy
byB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlTbG90OwogcHJvdGVjdGVkOgogICAgIEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJ
ZGVudGlmaWVyKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdE5h
bWVkRGVsZXRlcldpdGhJZGVudGlmaWVyPiYmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIuY3BwCShyZXZpc2lvbiAyNjc3
NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFt
ZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDgsMTYg
KzIwOCwxOCBAQCBib29sIEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyCiAgICAg
cmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9iamVjdCwgbGV4aWNh
bEdsb2JhbE9iamVjdCwgaW5kZXgsIHNsb3QpOwogfQogCi12b2lkIEpTVGVzdE5hbWVkRGVsZXRl
cldpdGhJbmRleGVkR2V0dGVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3Qs
IEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYg
cHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIEpTVGVzdE5hbWVkRGVs
ZXRlcldpdGhJbmRleGVkR2V0dGVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmpl
Y3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJh
eSYgcHJvcGVydHlOYW1lcykKIHsKLSAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9i
YWxPYmplY3QpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWREZWxl
dGVyV2l0aEluZGV4ZWRHZXR0ZXIqPihvYmplY3QpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFMob2JqZWN0LCBpbmZvKCkpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDAsIGNvdW50ID0g
dGhpc09iamVjdC0+d3JhcHBlZCgpLmxlbmd0aCgpOyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAg
cHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbSh2bSwgaSkpOworICAgIGlmIChwcm9w
ZXJ0eU5hbWVzLmluY2x1ZGVTdHJpbmdQcm9wZXJ0aWVzKCkpIHsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMCwgY291bnQgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCkubGVuZ3RoKCk7IGkgPCBj
b3VudDsgKytpKQorICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQ8RW51bWVyYWJsZTo6VHJ1
ZT4oaSk7CisgICAgfQorICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVj
dCk7CiAgICAgZm9yIChhdXRvJiBwcm9wZXJ0eU5hbWUgOiB0aGlzT2JqZWN0LT53cmFwcGVkKCku
c3VwcG9ydGVkUHJvcGVydHlOYW1lcygpKQotICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBwcm9wZXJ0eU5hbWUpKTsKLSAgICBKU09iamVjdDo6Z2V0
T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFt
ZXMsIG1vZGUpOworICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZDxFbnVtZXJhYmxlOjpUcnVlPihJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBwcm9wZXJ0eU5hbWUpKTsKKyAgICBKU09iamVjdDo6
Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5
TmFtZXMpOwogfQogCiBib29sIEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyOjpk
ZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBEZWxldGVQcm9wZXJ0eVNsb3QmIHNs
b3QpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4
ZWRHZXR0ZXIuaAkocmV2aXNpb24gMjY3NzY3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBUZXN0TmFt
ZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIqIHRvV3JhcHBlZChKU0M6OlZNJiwgSlNDOjpKU1Zh
bHVlKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCos
IEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNs
b3QmKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNP
YmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6
OlByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlND
OjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5
JiwgSlNDOjpFbnVtZXJhdGlvbk1vZGUgPSBKU0M6OkVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICBz
dGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYpOwogICAgIHN0YXRpYyBib29sIGRl
bGV0ZVByb3BlcnR5KEpTQzo6SlNDZWxsKiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJv
cGVydHlOYW1lLCBKU0M6OkRlbGV0ZVByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGRl
bGV0ZVByb3BlcnR5QnlJbmRleChKU0M6OkpTQ2VsbCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCB1
bnNpZ25lZCk7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0M6OkpTQ2VsbCopOwpAQCAtNjMs
NyArNjMsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxs
KiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIHVu
c2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93
blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwgSlNDOjpJbnRlcmNlcHRz
R2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpP
dmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Q
cm9wZXJ0eVNsb3Q7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVy
ZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5
SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVy
dHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90OwogcHJvdGVjdGVkOgog
ICAgIEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyKEpTQzo6U3RydWN0dXJlKiwg
SlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVy
PiYmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoLmNwcAko
cmV2aXNpb24gMjY3NzY3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTEs
MTQgKzE5MSwxNCBAQCBib29sIEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGg6OmdldE93blByCiAg
ICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9iamVjdCwgbGV4
aWNhbEdsb2JhbE9iamVjdCwgaW5kZXgsIHNsb3QpOwogfQogCi12b2lkIEpTVGVzdE5hbWVkR2V0
dGVyQ2FsbFdpdGg6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0
eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNUZXN0TmFtZWRHZXR0ZXJDYWxs
V2l0aDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMp
CiB7Ci0gICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBh
dXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGgqPihvYmpl
Y3QpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMob2JqZWN0LCBpbmZvKCkpOworICAg
IFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgZm9yIChhdXRv
JiBwcm9wZXJ0eU5hbWUgOiB0aGlzT2JqZWN0LT53cmFwcGVkKCkuc3VwcG9ydGVkUHJvcGVydHlO
YW1lcygpKQotICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCBwcm9wZXJ0eU5hbWUpKTsKLSAgICBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhv
YmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworICAgICAg
ICBwcm9wZXJ0eU5hbWVzLmFkZDxFbnVtZXJhYmxlOjpUcnVlPihJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCBwcm9wZXJ0eU5hbWUpKTsKKyAgICBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1l
cyhvYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMpOwogfQogCiBKU0Nf
REVGSU5FX0NVU1RPTV9HRVRURVIoanNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aENvbnN0cnVjdG9y
LCAoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVy
Q2FsbFdpdGguaAkocmV2aXNpb24gMjY3NzY3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGguaAkod29ya2luZyBjb3B5
KQpAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFRlc3ROYW1lZEdldHRlckNh
bGxXaXRoKiB0b1dyYXBwZWQoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CiAgICAgc3RhdGljIGJv
b2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJv
b2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2Jh
bE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKLSAg
ICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RW51bWVyYXRpb25N
b2RlID0gSlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7CisgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJv
cGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJv
cGVydHlOYW1lQXJyYXkmKTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQzo6SlNDZWxsKik7
CiAKICAgICBERUNMQVJFX0lORk87CkBAIC02MSw3ICs2MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBz
dGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHVi
bGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNl
OjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9w
ZXJ0eUFic2VuY2UgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZl
bldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5
TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdDsKKyAgICBzdGF0aWMgY29u
c3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBK
U0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwgSlNDOjpJ
bnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJv
IHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRP
d25Qcm9wZXJ0eVNsb3Q7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0
aChKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3ROYW1lZEdldHRl
ckNhbGxXaXRoPiYmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJO
b0lkZW50aWZpZXIuY3BwCShyZXZpc2lvbiAyNjc3NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xOTEsMTQgKzE5MSwxNCBAQCBib29sIEpTVGVzdE5hbWVkR2V0dGVy
Tm9JZGVudGlmaWVyOjpnZXRPCiAgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNs
b3RCeUluZGV4KG9iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgaW5kZXgsIHNsb3QpOwogfQog
Ci12b2lkIEpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVz
KEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQ
cm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2
b2lkIEpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpT
T2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9w
ZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcykKIHsKLSAgICBWTSYgdm0gPSBKU0M6OmdldFZN
KGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNU
ZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIqPihvYmplY3QpOwogICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFMob2JqZWN0LCBpbmZvKCkpOworICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4
aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgZm9yIChhdXRvJiBwcm9wZXJ0eU5hbWUgOiB0aGlzT2Jq
ZWN0LT53cmFwcGVkKCkuc3VwcG9ydGVkUHJvcGVydHlOYW1lcygpKQotICAgICAgICBwcm9wZXJ0
eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBwcm9wZXJ0eU5hbWUpKTsKLSAg
ICBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGxleGljYWxHbG9iYWxPYmpl
Y3QsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZDxFbnVt
ZXJhYmxlOjpUcnVlPihJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBwcm9wZXJ0eU5hbWUpKTsK
KyAgICBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGxleGljYWxHbG9iYWxP
YmplY3QsIHByb3BlcnR5TmFtZXMpOwogfQogCiBKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoanNU
ZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvciwgKEpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIuaAko
cmV2aXNpb24gMjY3NzY3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQx
LDcgKzQxLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZp
ZXIqIHRvV3JhcHBlZChKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKICAgICBzdGF0aWMgYm9vbCBn
ZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBK
U0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBn
ZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwotICAgIHN0
YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9i
YWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpFbnVtZXJhdGlvbk1vZGUg
PSBKU0M6OkVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0
eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0
eU5hbWVBcnJheSYpOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsKIAog
ICAgIERFQ0xBUkVfSU5GTzsKQEAgLTYxLDcgKzYxLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBK
U0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAgIHN0YXRp
YyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0
cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5
QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hl
bkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlOYW1l
cyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90OworICAgIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6
R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6OkludGVy
Y2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBK
U0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blBy
b3BlcnR5U2xvdDsKIHByb3RlY3RlZDoKICAgICBKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmll
cihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3ROYW1lZEdldHRl
ck5vSWRlbnRpZmllcj4mJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRH
ZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAJKHJldmlzaW9uIDI2Nzc2NykKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlm
aWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk3LDE0ICsxOTcsMTQgQEAgYm9vbCBKU1Rlc3RO
YW1lZEdldHRlcldpdGhJZGVudGlmaWVyOjpnZQogICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3du
UHJvcGVydHlTbG90QnlJbmRleChvYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIGluZGV4LCBz
bG90KTsKIH0KIAotdm9pZCBKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyOjpnZXRPd25Q
cm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25N
b2RlIG1vZGUpCit2b2lkIEpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXI6OmdldE93blBy
b3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzKQogewotICAgIFZNJiB2
bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyKj4ob2JqZWN0KTsKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKG9iamVjdCwgaW5mbygpKTsKKyAgICBWTSYgdm0g
PSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGZvciAoYXV0byYgcHJvcGVy
dHlOYW1lIDogdGhpc09iamVjdC0+d3JhcHBlZCgpLnN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKSkK
LSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcHJv
cGVydHlOYW1lKSk7Ci0gICAgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKKyAgICAgICAgcHJvcGVy
dHlOYW1lcy5hZGQ8RW51bWVyYWJsZTo6VHJ1ZT4oSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
cHJvcGVydHlOYW1lKSk7CisgICAgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0
LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzKTsKIH0KIAogdGVtcGxhdGU8PiBp
bmxpbmUgSlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllciogSURMT3BlcmF0aW9uPEpTVGVz
dE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXI+OjpjYXN0KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUmIGNhbGxGcmFtZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIuaAkocmV2aXNpb24gMjY3NzY3KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVy
V2l0aElkZW50aWZpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIFRlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyKiB0b1dyYXBwZWQoSlND
OjpWTSYsIEpTQzo6SlNWYWx1ZSk7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90
KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUs
IEpTQzo6UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90
QnlJbmRleChKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHBy
b3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgdm9pZCBnZXRPd25Q
cm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQ
cm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RW51bWVyYXRpb25Nb2RlID0gSlNDOjpFbnVtZXJhdGlv
bk1vZGUoKSk7CisgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2Jq
ZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmKTsKICAg
ICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQzo6SlNDZWxsKik7CiAKICAgICBERUNMQVJFX0lORk87
CkBAIC02MSw3ICs2MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVh
cChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHVibGljOgotICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpT
Qzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6Oklu
dGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8g
fCBKU0M6Ok92ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRl
c0dldE93blByb3BlcnR5U2xvdDsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVj
dHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xv
dElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRP
d25Qcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Q7CiBwcm90
ZWN0ZWQ6CiAgICAgSlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllcihKU0M6OlN0cnVjdHVy
ZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVy
PiYmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZp
ZXIuY3BwCShyZXZpc2lvbiAyNjc3NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xOTEsMTQgKzE5MSwxNCBAQCBib29sIEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlm
aWVyOjpnZXRPCiAgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4
KG9iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgaW5kZXgsIHNsb3QpOwogfQogCi12b2lkIEpT
VGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0
KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5h
bWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIEpTVGVz
dE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBv
YmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVB
cnJheSYgcHJvcGVydHlOYW1lcykKIHsKLSAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxH
bG9iYWxPYmplY3QpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRT
ZXR0ZXJOb0lkZW50aWZpZXIqPihvYmplY3QpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFMob2JqZWN0LCBpbmZvKCkpOworICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2Jh
bE9iamVjdCk7CiAgICAgZm9yIChhdXRvJiBwcm9wZXJ0eU5hbWUgOiB0aGlzT2JqZWN0LT53cmFw
cGVkKCkuc3VwcG9ydGVkUHJvcGVydHlOYW1lcygpKQotICAgICAgICBwcm9wZXJ0eU5hbWVzLmFk
ZChJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBwcm9wZXJ0eU5hbWUpKTsKLSAgICBKU09iamVj
dDo6Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHByb3Bl
cnR5TmFtZXMsIG1vZGUpOworICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZDxFbnVtZXJhYmxlOjpU
cnVlPihJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBwcm9wZXJ0eU5hbWUpKTsKKyAgICBKU09i
amVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHBy
b3BlcnR5TmFtZXMpOwogfQogCiBib29sIEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyOjpw
dXQoSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBw
dXRQcm9wZXJ0eVNsb3QpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJOb0lk
ZW50aWZpZXIuaAkocmV2aXNpb24gMjY3NzY3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBUZXN0TmFtZWRTZXR0
ZXJOb0lkZW50aWZpZXIqIHRvV3JhcHBlZChKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKICAgICBz
dGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9i
YWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAgICBz
dGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNPYmplY3QqLCBKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xv
dCYpOwotICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCos
IEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpFbnVt
ZXJhdGlvbk1vZGUgPSBKU0M6OkVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICBzdGF0aWMgdm9pZCBn
ZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
SlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYpOwogICAgIHN0YXRpYyBib29sIHB1dChKU0M6OkpTQ2Vs
bCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVl
LCBKU0M6OlB1dFByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIHB1dEJ5SW5kZXgoSlND
OjpKU0NlbGwqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBK
U0M6OkpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwogICAgIHN0YXRpYyBib29sIGRlZmluZU93
blByb3BlcnR5KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9w
ZXJ0eU5hbWUsIGNvbnN0IEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJv
dyk7CkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXpl
SGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHVibGljOgotICAgIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8
IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6
OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFpl
cm8gfCBKU0M6Ok92ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJy
aWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1
Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFi
c2VuY2UgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5M
ZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBKU0M6
Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNo
aW5nOwogcHJvdGVjdGVkOgogICAgIEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyKEpTQzo6
U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdE5hbWVkU2V0dGVyTm9JZGVu
dGlmaWVyPiYmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRl
clRocm93aW5nRXhjZXB0aW9uLmNwcAkocmV2aXNpb24gMjY3NzY3KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNl
cHRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTEsMTQgKzE5MSwxNCBAQCBib29sIEpTVGVz
dE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246CiAgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgaW5kZXgs
IHNsb3QpOwogfQogCi12b2lkIEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246Omdl
dE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGlj
YWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJh
dGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6
Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMpCiB7Ci0g
ICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvKiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24qPihv
YmplY3QpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMob2JqZWN0LCBpbmZvKCkpOwor
ICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgZm9yIChh
dXRvJiBwcm9wZXJ0eU5hbWUgOiB0aGlzT2JqZWN0LT53cmFwcGVkKCkuc3VwcG9ydGVkUHJvcGVy
dHlOYW1lcygpKQotICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCBwcm9wZXJ0eU5hbWUpKTsKLSAgICBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1l
cyhvYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworICAg
ICAgICBwcm9wZXJ0eU5hbWVzLmFkZDxFbnVtZXJhYmxlOjpUcnVlPihJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCBwcm9wZXJ0eU5hbWUpKTsKKyAgICBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlO
YW1lcyhvYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMpOwogfQogCiBi
b29sIEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OnB1dChKU0NlbGwqIGNlbGws
IEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHB1dFByb3BlcnR5U2xvdCkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1l
ZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRp
b24uaAkocmV2aXNpb24gMjY3NzY3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uaAkod29ya2luZyBj
b3B5KQpAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFRlc3ROYW1lZFNldHRl
clRocm93aW5nRXhjZXB0aW9uKiB0b1dyYXBwZWQoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CiAg
ICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CiAg
ICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0M6OkpTT2JqZWN0Kiwg
SlNDOjpKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0
eVNsb3QmKTsKLSAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmpl
Y3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6
RW51bWVyYXRpb25Nb2RlID0gSlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7CisgICAgc3RhdGljIHZv
aWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVj
dCosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmKTsKICAgICBzdGF0aWMgYm9vbCBwdXQoSlNDOjpK
U0NlbGwqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6SlNW
YWx1ZSwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBwdXRCeUluZGV4
KEpTQzo6SlNDZWxsKiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFt
ZSwgSlNDOjpKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKICAgICBzdGF0aWMgYm9vbCBkZWZp
bmVPd25Qcm9wZXJ0eShKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6
UHJvcGVydHlOYW1lLCBjb25zdCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxk
VGhyb3cpOwpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpTQzo6SXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5h
bHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxh
Z3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwg
SlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNO
b3RaZXJvIHwgSlNDOjpPdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVzIHwgSlNDOjpP
dmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OlByb2hpYml0c1Byb3BlcnR5Q2FjaGlu
ZzsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6
U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVy
dHlBYnNlbmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5X
aGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwg
SlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OlByb2hpYml0c1Byb3BlcnR5
Q2FjaGluZzsKIHByb3RlY3RlZDoKICAgICBKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0
aW9uKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdE5hbWVkU2V0
dGVyVGhyb3dpbmdFeGNlcHRpb24+JiYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCShyZXZpc2lvbiAyNjc3NjcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRo
SWRlbnRpZmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NywxNCArMTk3LDE0IEBAIGJvb2wg
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6Z2UKICAgICByZXR1cm4gSlNPYmplY3Q6
OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgob2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBp
bmRleCwgc2xvdCk7CiB9CiAKLXZvaWQgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6
Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1l
cmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyOjpn
ZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcykKIHsKLSAg
ICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8qIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcio+KG9iamVj
dCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhvYmplY3QsIGluZm8oKSk7CisgICAg
Vk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBmb3IgKGF1dG8m
IHByb3BlcnR5TmFtZSA6IHRoaXNPYmplY3QtPndyYXBwZWQoKS5zdXBwb3J0ZWRQcm9wZXJ0eU5h
bWVzKCkpCi0gICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0sIHByb3BlcnR5TmFtZSkpOwotICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKG9i
amVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAgICAg
IHByb3BlcnR5TmFtZXMuYWRkPEVudW1lcmFibGU6OlRydWU+KElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sIHByb3BlcnR5TmFtZSkpOworICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVz
KG9iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcyk7CiB9CiAKIGJvb2wg
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6cHV0KEpTQ2VsbCogY2VsbCwgSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgcHV0UHJvcGVydHlTbG90KQpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVy
V2l0aElkZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5oCShyZXZpc2lv
biAyNjc3NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0
MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIq
IHRvV3JhcHBlZChKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKICAgICBzdGF0aWMgYm9vbCBnZXRP
d25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBnZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRp
YyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxP
YmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpFbnVtZXJhdGlvbk1vZGUgPSBK
U0M6OkVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5h
bWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5h
bWVBcnJheSYpOwogICAgIHN0YXRpYyBib29sIHB1dChKU0M6OkpTQ2VsbCosIEpTQzo6SlNHbG9i
YWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBKU0M6OlB1dFByb3Bl
cnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIHB1dEJ5SW5kZXgoSlNDOjpKU0NlbGwqLCBKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIGJv
b2wgc2hvdWxkVGhyb3cpOwogICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTQzo6
SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIGNvbnN0
IEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CkBAIC02NCw3ICs2
NCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJ
bXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBK
U0M6OkhlYXBBbmFseXplciYpOwogcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJv
cGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6OkludGVyY2VwdHNHZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJy
aWRlc0FueUZvcm1PZkdldFByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3Bl
cnR5U2xvdCB8IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOworICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpT
Qzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6Oklu
dGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8g
fCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93
blByb3BlcnR5U2xvdCB8IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOwogcHJvdGVjdGVk
OgogICAgIEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIoSlNDOjpTdHJ1Y3R1cmUqLCBK
U0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcj4mJik7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
YW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhl
ZEdldHRlci5jcHAJKHJldmlzaW9uIDI2Nzc2NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjE3LDE2ICsyMTcsMTggQEAgYm9vbCBKU1Rlc3ROYW1lZFNldHRl
cldpdGhJbmRleGVkR2V0dGVyOgogICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlT
bG90QnlJbmRleChvYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIGluZGV4LCBzbG90KTsKIH0K
IAotdm9pZCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyOjpnZXRPd25Qcm9wZXJ0
eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1v
ZGUpCit2b2lkIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXI6OmdldE93blByb3Bl
cnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzKQogewotICAgIFZNJiB2bSA9
IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyKj4ob2JqZWN0KTsKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKG9iamVjdCwgaW5mbygpKTsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwLCBjb3VudCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKS5sZW5ndGgoKTsgaSA8
IGNvdW50OyArK2kpCi0gICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20o
dm0sIGkpKTsKKyAgICBpZiAocHJvcGVydHlOYW1lcy5pbmNsdWRlU3RyaW5nUHJvcGVydGllcygp
KSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDAsIGNvdW50ID0gdGhpc09iamVjdC0+d3Jh
cHBlZCgpLmxlbmd0aCgpOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAgICAgIHByb3BlcnR5TmFt
ZXMuYWRkPEVudW1lcmFibGU6OlRydWU+KGkpOworICAgIH0KKyAgICBWTSYgdm0gPSBKU0M6Omdl
dFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGZvciAoYXV0byYgcHJvcGVydHlOYW1lIDog
dGhpc09iamVjdC0+d3JhcHBlZCgpLnN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKSkKLSAgICAgICAg
cHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcHJvcGVydHlOYW1l
KSk7Ci0gICAgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKKyAgICAgICAgcHJvcGVydHlOYW1lcy5h
ZGQ8RW51bWVyYWJsZTo6VHJ1ZT4oSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcHJvcGVydHlO
YW1lKSk7CisgICAgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzKTsKIH0KIAogYm9vbCBKU1Rlc3ROYW1lZFNldHRl
cldpdGhJbmRleGVkR2V0dGVyOjpwdXQoSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1
ZSwgUHV0UHJvcGVydHlTbG90JiBwdXRQcm9wZXJ0eVNsb3QpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdl
dHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyLmgJKHJldmlzaW9uIDI2Nzc2
NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1l
ZFNldHRlcldpdGhJbmRleGVkR2V0dGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcg
QEAgcHVibGljOgogICAgIHN0YXRpYyBUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlciog
dG9XcmFwcGVkKEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwogICAgIHN0YXRpYyBib29sIGdldE93
blByb3BlcnR5U2xvdChKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6
UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGdldE93
blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3Qq
LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGlj
IHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9i
amVjdCosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0aW9uTW9kZSA9IEpT
Qzo6RW51bWVyYXRpb25Nb2RlKCkpOworICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFt
ZXMoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFt
ZUFycmF5Jik7CiAgICAgc3RhdGljIGJvb2wgcHV0KEpTQzo6SlNDZWxsKiwgSlNDOjpKU0dsb2Jh
bE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHV0UHJvcGVy
dHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgcHV0QnlJbmRleChKU0M6OkpTQ2VsbCosIEpTQzo6
SlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgYm9v
bCBzaG91bGRUaHJvdyk7CiAgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNDOjpK
U09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSwgY29uc3Qg
SlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKQEAgLTY0LDcgKzY0
LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcklt
cGwoSlNDOjpWTSYgdm0pOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpT
Qzo6SGVhcEFuYWx5emVyJik7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9w
ZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93
blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJp
ZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVy
dHlTbG90IHwgSlNDOjpQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7CisgICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlND
OjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50
ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8
IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3du
UHJvcGVydHlTbG90IHwgSlNDOjpQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7CiBwcm90ZWN0ZWQ6
CiAgICAgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcihKU0M6OlN0cnVjdHVyZSos
IEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVy
PiYmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNl
dHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyLmNwcAkocmV2aXNpb24gMjY3NzY3KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVy
V2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTcsMTYg
KzIxNywxOCBAQCBib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBCiAgICAg
cmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9iamVjdCwgbGV4aWNh
bEdsb2JhbE9iamVjdCwgaW5kZXgsIHNsb3QpOwogfQogCi12b2lkIEpTVGVzdE5hbWVkU2V0dGVy
V2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXI6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3Qq
IG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFt
ZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNUZXN0
TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlcjo6Z2V0T3duUHJvcGVydHlOYW1l
cyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwg
UHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMpCiB7Ci0gICAgVk0mIHZtID0gSlNDOjpn
ZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIqPihvYmplY3QpOwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMob2JqZWN0LCBpbmZvKCkpOwotICAgIGZvciAo
dW5zaWduZWQgaSA9IDAsIGNvdW50ID0gdGhpc09iamVjdC0+d3JhcHBlZCgpLmxlbmd0aCgpOyBp
IDwgY291bnQ7ICsraSkKLSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJv
bSh2bSwgaSkpOworICAgIGlmIChwcm9wZXJ0eU5hbWVzLmluY2x1ZGVTdHJpbmdQcm9wZXJ0aWVz
KCkpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMCwgY291bnQgPSB0aGlzT2JqZWN0LT53
cmFwcGVkKCkubGVuZ3RoKCk7IGkgPCBjb3VudDsgKytpKQorICAgICAgICAgICAgcHJvcGVydHlO
YW1lcy5hZGQ8RW51bWVyYWJsZTo6VHJ1ZT4oaSk7CisgICAgfQorICAgIFZNJiB2bSA9IEpTQzo6
Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgZm9yIChhdXRvJiBwcm9wZXJ0eU5hbWUg
OiB0aGlzT2JqZWN0LT53cmFwcGVkKCkuc3VwcG9ydGVkUHJvcGVydHlOYW1lcygpKQotICAgICAg
ICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBwcm9wZXJ0eU5h
bWUpKTsKLSAgICBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGxleGljYWxH
bG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworICAgICAgICBwcm9wZXJ0eU5hbWVz
LmFkZDxFbnVtZXJhYmxlOjpUcnVlPihJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBwcm9wZXJ0
eU5hbWUpKTsKKyAgICBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGxleGlj
YWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMpOwogfQogCiBib29sIEpTVGVzdE5hbWVkU2V0
dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXI6OnB1dChKU0NlbGwqIGNlbGwsIEpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBK
U1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHB1dFByb3BlcnR5U2xvdCkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldp
dGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0
ZXJBbmRTZXR0ZXIuaAkocmV2aXNpb24gMjY3NzY3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRT
ZXR0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIFRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyKiB0b1dyYXBwZWQo
SlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlT
bG90KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5h
bWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlT
bG90QnlJbmRleChKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVk
IHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgdm9pZCBnZXRP
d25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlND
OjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RW51bWVyYXRpb25Nb2RlID0gSlNDOjpFbnVtZXJh
dGlvbk1vZGUoKSk7CisgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpT
T2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmKTsK
ICAgICBzdGF0aWMgYm9vbCBwdXQoSlNDOjpKU0NlbGwqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
SlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTsK
ICAgICBzdGF0aWMgYm9vbCBwdXRCeUluZGV4KEpTQzo6SlNDZWxsKiwgSlNDOjpKU0dsb2JhbE9i
amVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBib29sIHNob3VsZFRo
cm93KTsKICAgICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU0M6OkpTT2JqZWN0Kiwg
SlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lLCBjb25zdCBKU0M6OlByb3Bl
cnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOwpAQCAtNjQsNyArNjQsNyBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZN
JiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5h
bHl6ZXImKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVy
ZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElz
SW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlT
bG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNBbnlGb3Jt
T2ZHZXRQcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBK
U0M6OlByb2hpYml0c1Byb3BlcnR5Q2FjaGluZzsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blBy
b3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0
T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVy
cmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNs
b3QgfCBKU0M6OlByb2hpYml0c1Byb3BlcnR5Q2FjaGluZzsKIHByb3RlY3RlZDoKICAgICBKU1Rl
c3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyKEpTQzo6U3RydWN0dXJlKiwg
SlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJB
bmRTZXR0ZXI+JiYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuY3BwCShyZXZpc2lvbiAyNjc3
NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE5MSwxNCArMTkxLDE0IEBAIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJp
ZGUKICAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgob2JqZWN0
LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbmRleCwgc2xvdCk7CiB9CiAKLXZvaWQgSlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdEluczo6Z2V0T3duUHJvcGVydHlOYW1lcyhK
U09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJv
cGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9p
ZCBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zOjpnZXRPd25Qcm9w
ZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcykKIHsKLSAgICBWTSYgdm0g
PSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8qIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElucyo+KG9i
amVjdCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhvYmplY3QsIGluZm8oKSk7Cisg
ICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBmb3IgKGF1
dG8mIHByb3BlcnR5TmFtZSA6IHRoaXNPYmplY3QtPndyYXBwZWQoKS5zdXBwb3J0ZWRQcm9wZXJ0
eU5hbWVzKCkpCi0gICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sIHByb3BlcnR5TmFtZSkpOwotICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVz
KG9iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAg
ICAgIHByb3BlcnR5TmFtZXMuYWRkPEVudW1lcmFibGU6OlRydWU+KElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sIHByb3BlcnR5TmFtZSkpOworICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5h
bWVzKG9iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcyk7CiB9CiAKIGJv
b2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdEluczo6cHV0KEpTQ2Vs
bCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgcHV0UHJvcGVy
dHlTbG90KQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0
ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5oCShyZXZpc2lvbiAyNjc3NjcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRo
TGVnYWN5T3ZlcnJpZGVCdWlsdElucy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVp
bHRJbnMqIHRvV3JhcHBlZChKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKICAgICBzdGF0aWMgYm9v
bCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3Qq
LCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9v
bCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFs
T2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwotICAg
IHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpFbnVtZXJhdGlvbk1v
ZGUgPSBKU0M6OkVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9w
ZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9w
ZXJ0eU5hbWVBcnJheSYpOwogICAgIHN0YXRpYyBib29sIHB1dChKU0M6OkpTQ2VsbCosIEpTQzo6
SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBKU0M6OlB1
dFByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIHB1dEJ5SW5kZXgoSlNDOjpKU0NlbGwq
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OkpTVmFs
dWUsIGJvb2wgc2hvdWxkVGhyb3cpOwogICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5
KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUs
IGNvbnN0IEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CkBAIC02
NCw3ICs2NCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0Nl
bGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIg
dW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0
T3duUHJvcGVydHlTbG90SXNJbXB1cmUgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNs
b3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0FueUZvcm1P
ZkdldFByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpT
Qzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJv
cGVydHlTbG90SXNJbXB1cmUgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUlu
ZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5
TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6UHJvaGliaXRz
UHJvcGVydHlDYWNoaW5nOwogcHJvdGVjdGVkOgogICAgIEpTVGVzdE5hbWVkU2V0dGVyV2l0aExl
Z2FjeU92ZXJyaWRlQnVpbHRJbnMoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYs
IFJlZjxUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElucz4mJik7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNl
dHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldp
dGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXMuY3BwCShyZXZpc2lvbiAyNjc3NjcpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJX
aXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE1
LDE0ICsyMTUsMTQgQEAgYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYQog
ICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChvYmplY3QsIGxl
eGljYWxHbG9iYWxPYmplY3QsIGluZGV4LCBzbG90KTsKIH0KIAotdm9pZCBKU1Rlc3ROYW1lZFNl
dHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXM6OmdldE93blByb3BlcnR5TmFtZXMo
SlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFBy
b3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3Zv
aWQgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzOjpnZXRP
d25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcykKIHsKLSAgICBW
TSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8qIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9w
ZXJ0aWVzKj4ob2JqZWN0KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKG9iamVjdCwg
aW5mbygpKTsKKyAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwog
ICAgIGZvciAoYXV0byYgcHJvcGVydHlOYW1lIDogdGhpc09iamVjdC0+d3JhcHBlZCgpLnN1cHBv
cnRlZFByb3BlcnR5TmFtZXMoKSkKLSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgcHJvcGVydHlOYW1lKSk7Ci0gICAgSlNPYmplY3Q6OmdldE93blBy
b3BlcnR5TmFtZXMob2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBt
b2RlKTsKKyAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQ8RW51bWVyYWJsZTo6VHJ1ZT4oSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyh2bSwgcHJvcGVydHlOYW1lKSk7CisgICAgSlNPYmplY3Q6OmdldE93
blByb3BlcnR5TmFtZXMob2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVz
KTsKIH0KIAogYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3Bl
cnRpZXM6OnB1dChKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0
eVNsb3QmIHB1dFByb3BlcnR5U2xvdCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3Bl
cnRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzLmgJ
KHJldmlzaW9uIDI2Nzc2NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFRlc3RO
YW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXMqIHRvV3JhcHBlZChKU0M6
OlZNJiwgSlNDOjpKU1ZhbHVlKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3Qo
SlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSwg
SlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RC
eUluZGV4KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJv
cGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyB2b2lkIGdldE93blBy
b3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlBy
b3BlcnR5TmFtZUFycmF5JiwgSlNDOjpFbnVtZXJhdGlvbk1vZGUgPSBKU0M6OkVudW1lcmF0aW9u
TW9kZSgpKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmpl
Y3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYpOwogICAg
IHN0YXRpYyBib29sIHB1dChKU0M6OkpTQ2VsbCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OlByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYpOwogICAg
IHN0YXRpYyBib29sIHB1dEJ5SW5kZXgoSlNDOjpKU0NlbGwqLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cp
OwogICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTQzo6SlNPYmplY3QqLCBKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIGNvbnN0IEpTQzo6UHJvcGVydHlE
ZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZt
KTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXpl
ciYpOwogcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxh
Z3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1
cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6Okhhc1N0YXRpY1Byb3BlcnR5VGFibGUgfCBKU0M6
OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFpl
cm8gfCBKU0M6Ok92ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJy
aWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1
Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFi
c2VuY2UgfCBKU0M6Okhhc1N0YXRpY1Byb3BlcnR5VGFibGUgfCBKU0M6OkludGVyY2VwdHNHZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJy
aWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xv
dCB8IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOwogcHJvdGVjdGVkOgogICAgIEpTVGVz
dE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllcyhKU0M6OlN0cnVjdHVy
ZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZv
cmdlYWJsZVByb3BlcnRpZXM+JiYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9w
ZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExl
Z2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuY3BwCShy
ZXZpc2lvbiAyNjc3NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVn
YWN5T3ZlcnJpZGVCdWlsdElucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNSwxNCArMjE1LDE0
IEBAIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWEKICAgICByZXR1cm4g
SlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgob2JqZWN0LCBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBpbmRleCwgc2xvdCk7CiB9CiAKLXZvaWQgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVn
YWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdEluczo6Z2V0T3du
UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEds
b2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9u
TW9kZSBtb2RlKQordm9pZCBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVBy
b3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpT
T2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9w
ZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcykKIHsKLSAgICBWTSYgdm0gPSBKU0M6OmdldFZN
KGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNU
ZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3Zl
cnJpZGVCdWlsdElucyo+KG9iamVjdCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhv
YmplY3QsIGluZm8oKSk7CisgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKICAgICBmb3IgKGF1dG8mIHByb3BlcnR5TmFtZSA6IHRoaXNPYmplY3QtPndyYXBwZWQo
KS5zdXBwb3J0ZWRQcm9wZXJ0eU5hbWVzKCkpCi0gICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElk
ZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHByb3BlcnR5TmFtZSkpOwotICAgIEpTT2JqZWN0Ojpn
ZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlO
YW1lcywgbW9kZSk7CisgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkPEVudW1lcmFibGU6OlRydWU+
KElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHByb3BlcnR5TmFtZSkpOworICAgIEpTT2JqZWN0
OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVy
dHlOYW1lcyk7CiB9CiAKIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFi
bGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdEluczo6cHV0KEpTQ2VsbCogY2VsbCwg
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgcHV0UHJvcGVydHlTbG90KQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVk
U2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVp
bHRJbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5k
TGVnYWN5T3ZlcnJpZGVCdWlsdElucy5oCShyZXZpc2lvbiAyNjc3NjcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5
VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5oCSh3b3JraW5n
IGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgVGVzdE5hbWVkU2V0
dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJ
bnMqIHRvV3JhcHBlZChKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKICAgICBzdGF0aWMgYm9vbCBn
ZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBK
U0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBn
ZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwotICAgIHN0
YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9i
YWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpFbnVtZXJhdGlvbk1vZGUg
PSBKU0M6OkVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0
eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0
eU5hbWVBcnJheSYpOwogICAgIHN0YXRpYyBib29sIHB1dChKU0M6OkpTQ2VsbCosIEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBKU0M6OlB1dFBy
b3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIHB1dEJ5SW5kZXgoSlNDOjpKU0NlbGwqLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUs
IGJvb2wgc2hvdWxkVGhyb3cpOwogICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpT
Qzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIGNv
bnN0IEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CkBAIC02NCw3
ICs2NCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwq
LCBKU0M6OkhlYXBBbmFseXplciYpOwogcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5z
aWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3du
UHJvcGVydHlTbG90SXNJbXB1cmUgfCBKU0M6Okhhc1N0YXRpY1Byb3BlcnR5VGFibGUgfCBKU0M6
OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFpl
cm8gfCBKU0M6Ok92ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJy
aWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1
Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmUgfCBKU0M6Okhhc1N0
YXRpY1Byb3BlcnR5VGFibGUgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUlu
ZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5
TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6UHJvaGliaXRz
UHJvcGVydHlDYWNoaW5nOwogcHJvdGVjdGVkOgogICAgIEpTVGVzdE5hbWVkU2V0dGVyV2l0aExl
Z2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMoSlNDOjpT
dHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0TmFtZWRTZXR0ZXJXaXRoTGVn
YWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdElucz4mJik7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmou
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RPYmouY3BwCShyZXZpc2lvbiAyNjc3NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ5
NCwxNCArMjQ5NCwxNSBAQCBib29sIEpTVGVzdE9iajo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRl
CiAgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9iamVjdCwg
bGV4aWNhbEdsb2JhbE9iamVjdCwgaW5kZXgsIHNsb3QpOwogfQogCi12b2lkIEpTVGVzdE9iajo6
Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1l
cmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU1Rlc3RPYmo6OmdldE93blByb3BlcnR5TmFtZXMoSlNP
YmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3Bl
cnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzKQogewotICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0o
bGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rl
c3RPYmoqPihvYmplY3QpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMob2JqZWN0LCBp
bmZvKCkpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDAsIGNvdW50ID0gdGhpc09iamVjdC0+d3Jh
cHBlZCgpLmxlbmd0aCgpOyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAgcHJvcGVydHlOYW1lcy5h
ZGQoSWRlbnRpZmllcjo6ZnJvbSh2bSwgaSkpOwotICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0
eU5hbWVzKG9iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcywgbW9kZSk7
CisgICAgaWYgKHByb3BlcnR5TmFtZXMuaW5jbHVkZVN0cmluZ1Byb3BlcnRpZXMoKSkgeworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBjb3VudCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKS5s
ZW5ndGgoKTsgaSA8IGNvdW50OyArK2kpCisgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZDxF
bnVtZXJhYmxlOjpUcnVlPihpKTsKKyAgICB9CisgICAgSlNPYmplY3Q6OmdldE93blByb3BlcnR5
TmFtZXMob2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzKTsKIH0KIAog
c3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBjYWxsSlNUZXN0T2JqMShKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5o
CShyZXZpc2lvbiAyNjc3NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0T2JqLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgcHVibGlj
OgogICAgIHN0YXRpYyBUZXN0T2JqKiB0b1dyYXBwZWQoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7
CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNPYmplY3QqLCBKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7
CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0M6OkpTT2JqZWN0
KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9w
ZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNP
YmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpT
Qzo6RW51bWVyYXRpb25Nb2RlID0gSlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7CisgICAgc3RhdGlj
IHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9i
amVjdCosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmKTsKICAgICBzdGF0aWMgSlNDOjpDYWxsRGF0
YSBnZXRDYWxsRGF0YShKU0M6OkpTQ2VsbCopOwogCiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShK
U0M6OkpTQ2VsbCopOwpAQCAtODUsNyArODUsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSB0ZXN0U3RhdGljQ3VzdG9tUHJvbWlzZUZ1bmN0aW9uKEpTQzo6SlNHbG9iYWxPYmpl
Y3QmLCBKU0M6OkNhbGxGcmFtZSYsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYpOwogICAgIEpTQzo6
SlNWYWx1ZSB0ZXN0Q3VzdG9tUmV0dXJuc093blByb21pc2VGdW5jdGlvbihKU0M6OkpTR2xvYmFs
T2JqZWN0JiwgSlNDOjpDYWxsRnJhbWUmKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHBy
IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6Okhh
c1N0YXRpY1Byb3BlcnR5VGFibGUgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RC
eUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0FueUZvcm1PZkdl
dFByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldENhbGxEYXRhIHwgSlNDOjpPdmVycmlk
ZXNHZXRPd25Qcm9wZXJ0eVNsb3Q7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpIYXNTdGF0aWNQcm9wZXJ0
eVRhYmxlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVu
TGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRDYWxsRGF0YSB8IEpTQzo6T3ZlcnJp
ZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90
OwogcHJvdGVjdGVkOgogICAgIEpTVGVzdE9iaihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFs
T2JqZWN0JiwgUmVmPFRlc3RPYmo+JiYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uv
TlBfanNvYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9OUF9q
c29iamVjdC5jcHAJKHJldmlzaW9uIDI2Nzc2NykKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9O
UF9qc29iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4NSw5ICs0ODUsOSBAQCBib29sIF9O
UE5fRW51bWVyYXRlKE5QUCwgTlBPYmplY3QqIG8sIE5QCiAgICAgICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKIAogICAgICAgICBKU0dsb2JhbE9iamVjdCogbGV4aWNh
bEdsb2JhbE9iamVjdCA9IGdsb2JhbE9iamVjdDsKLSAgICAgICAgUHJvcGVydHlOYW1lQXJyYXkg
cHJvcGVydHlOYW1lcyh2bSwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncywgUHJpdmF0ZVN5bWJv
bE1vZGU6OkV4Y2x1ZGUpOworICAgICAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0eU5hbWVz
KHZtLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzLCBEb250RW51bVByb3BlcnR5TW9kZTo6RXhj
bHVkZSk7CiAKLSAgICAgICAgb2JqLT5pbXAtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0UHJvcGVydHlO
YW1lcyhvYmotPmltcCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcywgRW51bWVy
YXRpb25Nb2RlKCkpOworICAgICAgICBvYmotPmltcC0+Z2V0UHJvcGVydHlOYW1lcyhsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzKTsKICAgICAgICAgdW5zaWduZWQgc2l6ZSA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkPihwcm9wZXJ0eU5hbWVzLnNpemUoKSk7CiAgICAgICAgIC8vIEZJ
WE1FOiBUaGlzIHNob3VsZCByZWFsbHkgY2FsbCBOUE5fTWVtQWxsb2MgYnV0IHRoYXQncyBpbiBX
ZWJLaXQKICAgICAgICAgTlBJZGVudGlmaWVyKiBpZGVudGlmaWVycyA9IHN0YXRpY19jYXN0PE5Q
SWRlbnRpZmllcio+KG1hbGxvYyhzaXplb2YoTlBJZGVudGlmaWVyKSAqIHNpemUpKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX2FycmF5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9hcnJheS5jcHAJKHJldmlzaW9uIDI2Nzc2NykK
KysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX2FycmF5LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzUsMTggKzc1LDE5IEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihhcnJheUxlbmd0
aEdldHQKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHRoaXNPYmplY3QtPmdl
dExlbmd0aCgpKSk7CiB9CiAKLXZvaWQgUnVudGltZUFycmF5OjpnZXRPd25Qcm9wZXJ0eU5hbWVz
KEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQ
cm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2
b2lkIFJ1bnRpbWVBcnJheTo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHBy
b3BlcnR5TmFtZXMpCiB7CiAgICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsK
ICAgICBSdW50aW1lQXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UnVudGltZUFycmF5Kj4ob2Jq
ZWN0KTsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSB0aGlzT2JqZWN0LT5nZXRMZW5ndGgoKTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgIHByb3BlcnR5
TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20odm0sIGkpKTsKLQotICAgIGlmIChtb2RlLmluY2x1
ZGVEb250RW51bVByb3BlcnRpZXMoKSkKLSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQodm0ucHJv
cGVydHlOYW1lcy0+bGVuZ3RoKTsKKyAgICBpZiAocHJvcGVydHlOYW1lcy5pbmNsdWRlU3RyaW5n
UHJvcGVydGllcygpKSB7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRoaXNPYmplY3QtPmdl
dExlbmd0aCgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kp
CisgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZDxFbnVtZXJhYmxlOjpUcnVlPihpKTsKKyAg
ICB9CiAKLSAgICBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKKyAgICBKU09iamVjdDo6Z2V0
T3duSW5kZXhQcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHBy
b3BlcnR5TmFtZXMpOworICAgIHByb3BlcnR5TmFtZXMuYWRkPEVudW1lcmFibGU6OkZhbHNlPih2
bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpOworICAgIEpTT2JqZWN0OjpnZXRPd25Ob25JbmRleFBy
b3BlcnR5TmFtZXModGhpc09iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1l
cyk7CiB9CiAKIGJvb2wgUnVudGltZUFycmF5OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3Qq
IG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JyaWRnZS9ydW50aW1lX2FycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJp
ZGdlL3J1bnRpbWVfYXJyYXkuaAkocmV2aXNpb24gMjY3NzY3KQorKysgU291cmNlL1dlYkNvcmUv
YnJpZGdlL3J1bnRpbWVfYXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKIGNsYXNzIFJ1bnRpbWVBcnJheSBmaW5hbCA6IHB1YmxpYyBKU0FycmF5
IHsKIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNBcnJheTsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVy
cmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJ
bmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgT3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVy
dHlOYW1lczsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0g
QmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVy
cmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5
SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybzsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlw
ZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KQEAgLTU5LDcgKzU5LDcgQEAgcHVibGljOgogICAgIH5S
dW50aW1lQXJyYXkoKTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCi0gICAg
c3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0
KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIHN0YXRpYyB2b2lk
IGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5
TmFtZUFycmF5Jik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0
KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgIHN0
YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqLCBKU0dsb2JhbE9i
amVjdCosIHVuc2lnbmVkLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBwdXQoSlND
ZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5
U2xvdCYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfb2JqZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9vYmplY3QuY3BwCShy
ZXZpc2lvbiAyNjc3NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9vYmplY3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODAsNyArMjgwLDcgQEAgQ2FsbERhdGEgUnVudGltZU9i
amVjdDo6Z2V0Q29uc3RydWN0RGF0YQogICAgIHJldHVybiBjb25zdHJ1Y3REYXRhOwogfQogCi12
b2lkIFJ1bnRpbWVPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwg
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBw
cm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUpCit2b2lkIFJ1bnRpbWVPYmplY3Q6OmdldE93
blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzKQogewogICAgIFZN
JiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVf
b2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfb2Jq
ZWN0LmgJKHJldmlzaW9uIDI2Nzc2NykKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1l
X29iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIEV4Y2VwdGlvbiogdGhy
b3dSdW50aW1lT2JqZWN0SW52YWxpZEFjY2UKIGNsYXNzIFdFQkNPUkVfRVhQT1JUIFJ1bnRpbWVP
YmplY3QgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFz
ZSA9IEpTTm9uRmluYWxPYmplY3Q7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVy
dHlTbG90IHwgT3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc0dl
dENhbGxEYXRhOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3Mg
PSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92
ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNHZXRDYWxsRGF0YTsKICAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KQEAgLTY0LDcgKzY0
LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBDYWxsRGF0YSBnZXRDYWxsRGF0YShKU0NlbGwqKTsK
ICAgICBzdGF0aWMgQ2FsbERhdGEgZ2V0Q29uc3RydWN0RGF0YShKU0NlbGwqKTsKIAotICAgIHN0
YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCos
IFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICBzdGF0aWMgdm9pZCBn
ZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5h
bWVBcnJheSYpOwogCiAgICAgdm9pZCBpbnZhbGlkYXRlKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JyaWRnZS9jL2NfaW5zdGFuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JyaWRnZS9jL2NfaW5zdGFuY2UuY3BwCShyZXZpc2lvbiAyNjc3NjcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9icmlkZ2UvYy9jX2luc3RhbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzY1LDE0ICsz
NjUsMTMgQEAgdm9pZCBDSW5zdGFuY2U6OmdldFByb3BlcnR5TmFtZXMoSlNHbG9iYQogICAgICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3Qt
PnZtKCk7CiAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKICAgICAg
ICAgSWRlbnRpZmllclJlcCogaWRlbnRpZmllciA9IHN0YXRpY19jYXN0PElkZW50aWZpZXJSZXAq
PihpZGVudGlmaWVyc1tpXSk7CiAKICAgICAgICAgaWYgKGlkZW50aWZpZXItPmlzU3RyaW5nKCkp
Ci0gICAgICAgICAgICBuYW1lQXJyYXkuYWRkKGlkZW50aWZpZXJGcm9tTlBJZGVudGlmaWVyKGxl
eGljYWxHbG9iYWxPYmplY3QsIGlkZW50aWZpZXItPnN0cmluZygpKSk7CisgICAgICAgICAgICBu
YW1lQXJyYXkuYWRkPEVudW1lcmFibGU6OlRydWU+KGlkZW50aWZpZXJGcm9tTlBJZGVudGlmaWVy
KGxleGljYWxHbG9iYWxPYmplY3QsIGlkZW50aWZpZXItPnN0cmluZygpKSk7CiAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIG5hbWVBcnJheS5hZGQoSWRlbnRpZmllcjo6ZnJvbSh2bSwgaWRlbnRp
Zmllci0+bnVtYmVyKCkpKTsKKyAgICAgICAgICAgIG5hbWVBcnJheS5hZGQ8RW51bWVyYWJsZTo6
VHJ1ZT4oaWRlbnRpZmllci0+bnVtYmVyKCkpOwogICAgIH0KIAogICAgIC8vIEZJWE1FOiBUaGlz
IHNob3VsZCByZWFsbHkgY2FsbCBOUE5fTWVtRnJlZSBidXQgdGhhdCdzIGluIFdlYktpdApJbmRl
eDogU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cJKHJldmlzaW9uIDI2Nzc2NykKKysrIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMjAtMDktMjkgIEFsZXhleSBTaHZheWth
ICA8c2h2YWlrYWxlc2hAZ21haWwuY29tPgorCisgICAgICAgIE5vbi1lbnVtZXJhYmxlIHByb3Bl
cnR5IGZhaWxzIHRvIHNoYWRvdyBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0eSBmcm9tIGZv
ci1pbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzg5
NzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBY2Nv
dW50cyBmb3IgcmVtb3ZhbCBvZiBnZXRQcm9wZXJ0eU5hbWVzKCkgZnJvbSB0aGUgbWV0aG9kIHRh
YmxlIGFuZAorICAgICAgICBzaWduYXR1cmUgY2hhbmdlIG9mIGdldE93bipQcm9wZXJ0eU5hbWVz
KCkuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5j
cHA6CisgICAgICAgIChXZWJLaXQ6OkpTTlBPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMpOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0Lmg6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QSlNPYmplY3QuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpOUEpTT2JqZWN0OjplbnVtZXJhdGUpOgorCiAyMDIwLTA5LTI5ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgTW92ZSBOZXR3
b3JrUHJvY2Vzc1Byb3h5IG93bmVyc2hpcCBmcm9tIFdlYlByb2Nlc3NQb29sIHRvIFdlYnNpdGVE
YXRhU3RvcmUKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBl
L0pTTlBPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9Q
bHVnaW5zL05ldHNjYXBlL0pTTlBPYmplY3QuY3BwCShyZXZpc2lvbiAyNjc3NjcpCisrKyBTb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDI1LDcgKzQyNSw3IEBAIGJvb2wgSlNOUE9iamVjdDo6ZGVsZXRlUHJv
cGVydHkoSlNHbG9iYWwKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBKU05QT2JqZWN0Ojpn
ZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lQXJyYXksIEVu
dW1lcmF0aW9uTW9kZSkKK3ZvaWQgSlNOUE9iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09i
amVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVy
dHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZUFycmF5KQogewogICAgIFZNJiB2bSA9IGxleGljYWxH
bG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwpAQCAtNDcwLDcgKzQ3MCw3IEBAIHZvaWQgSlNOUE9iamVjdDo6Z2V0T3duUHJvcGVydHlO
YW1lcyhKU08KICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBpZGVudGlmaWVyID0gSWRlbnRp
Zmllcjo6ZnJvbSh2bSwgaWRlbnRpZmllclJlcC0+bnVtYmVyKCkpOwogCi0gICAgICAgIHByb3Bl
cnR5TmFtZUFycmF5LmFkZChpZGVudGlmaWVyKTsKKyAgICAgICAgcHJvcGVydHlOYW1lQXJyYXku
YWRkPEVudW1lcmFibGU6OlRydWU+KGlkZW50aWZpZXIpOwogICAgIH0KIAogICAgIG5wbk1lbUZy
ZWUoaWRlbnRpZmllcnMpOwpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMv
TmV0c2NhcGUvSlNOUE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBPYmplY3QuaAkocmV2aXNpb24gMjY3NzY3KQorKysg
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIGNsYXNzIE5QUnVudGltZU9iamVjdE1hcDsK
IGNsYXNzIEpTTlBPYmplY3QgZmluYWwgOiBwdWJsaWMgSlNDOjpKU0Rlc3RydWN0aWJsZU9iamVj
dCB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3Q7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0
cnVjdHVyZUZsYWdzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6Ok92
ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldENhbGxE
YXRhOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNl
OjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlND
OjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRDYWxsRGF0
YTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNz
PgogICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkK
QEAgLTk5LDcgKzk5LDcgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgZGVsZXRlUHJvcGVydHkoSlND
OjpKU0dsb2JhbE9iamVjdCosIE5QSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUpOwogCi0gICAgc3Rh
dGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2Jh
bE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0aW9uTW9kZSk7
CisgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlND
OjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmKTsKIAogICAgIE5QUnVu
dGltZU9iamVjdE1hcCogbV9vYmplY3RNYXA7CiAgICAgTlBPYmplY3QqIG1fbnBPYmplY3Q7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUEpTT2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRz
Y2FwZS9OUEpTT2JqZWN0LmNwcAkocmV2aXNpb24gMjY3NzY3KQorKysgU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBKU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI1Miw4ICsyNTIsOCBAQCBib29sIE5QSlNPYmplY3Q6OmVudW1lcmF0ZShOUElkZW50aWZp
ZXIqCiAgICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBKU0xvY2tI
b2xkZXIgbG9jayh2bSk7CiAKLSAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0eU5hbWVzKHZt
LCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzLCBQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSk7
Ci0gICAgbV9qc09iamVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRQcm9wZXJ0eU5hbWVzKG1fanNP
YmplY3QuZ2V0KCksIGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0
aW9uTW9kZSgpKTsKKyAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0eU5hbWVzKHZtLCBQcm9w
ZXJ0eU5hbWVNb2RlOjpTdHJpbmdzLCBEb250RW51bVByb3BlcnR5TW9kZTo6RXhjbHVkZSk7Cisg
ICAgbV9qc09iamVjdC0+Z2V0UHJvcGVydHlOYW1lcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9w
ZXJ0eU5hbWVzKTsKIAogICAgIE5QSWRlbnRpZmllciogbmFtZUlkZW50aWZpZXJzID0gbnBuTWVt
TmV3QXJyYXk8TlBJZGVudGlmaWVyPihwcm9wZXJ0eU5hbWVzLnNpemUoKSk7CiAKSW5kZXg6IFNv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2Nzc2NykKKysrIFNvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisy
MDIwLTA5LTI5ICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNoQGdtYWlsLmNvbT4KKworICAg
ICAgICBOb24tZW51bWVyYWJsZSBwcm9wZXJ0eSBmYWlscyB0byBzaGFkb3cgaW5oZXJpdGVkIGVu
dW1lcmFibGUgcHJvcGVydHkgZnJvbSBmb3ItaW4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTM4OTcwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQWNjb3VudHMgZm9yIHJlbW92YWwgb2YgZ2V0UHJvcGVydHlO
YW1lcygpIGZyb20gdGhlIG1ldGhvZCB0YWJsZSBhbmQKKyAgICAgICAgc2lnbmF0dXJlIGNoYW5n
ZSBvZiBnZXRPd24qUHJvcGVydHlOYW1lcygpLgorCisgICAgICAgICogUGx1Z2lucy9Ib3N0ZWQv
TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2Fw
ZVBsdWdpbkluc3RhbmNlUHJveHk6OmVudW1lcmF0ZSk6CisgICAgICAgICogUGx1Z2lucy9Ib3N0
ZWQvUHJveHlJbnN0YW5jZS5tbToKKyAgICAgICAgKFdlYktpdDo6UHJveHlJbnN0YW5jZTo6Z2V0
UHJvcGVydHlOYW1lcyk6CisKIDIwMjAtMDktMjkgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0
ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByZXZlcnRpbmcgcjI2NzM5
Ny4KSW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBl
UGx1Z2luSW5zdGFuY2VQcm94eS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW0JKHJldmlz
aW9uIDI2Nzc2NykKKysrIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvSG9zdGVkL05l
dHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTI3Miw4ICsx
MjcyLDggQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmVudW1lcgogCiAgICAg
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QgPSBmcmFtZS0+c2NyaXB0KCkuZ2xv
YmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpOwogIAotICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3Bl
cnR5TmFtZXModm0sIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MsIFByaXZhdGVTeW1ib2xNb2Rl
OjpFeGNsdWRlKTsKLSAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0UHJvcGVydHlOYW1l
cyhvYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9u
TW9kZSgpKTsKKyAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0eU5hbWVzKHZtLCBQcm9wZXJ0
eU5hbWVNb2RlOjpTdHJpbmdzLCBEb250RW51bVByb3BlcnR5TW9kZTo6RXhjbHVkZSk7CisgICAg
b2JqZWN0LT5nZXRQcm9wZXJ0eU5hbWVzKGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFt
ZXMpOwogCiAgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBhcnJheSA9IGFkb3B0TlMoW1tO
U011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBwcm9wZXJ0eU5hbWVzLnNpemUoKTsgaSsrKSB7CkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9QbHVnaW5zL0hvc3RlZC9Qcm94eUluc3RhbmNlLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvSG9zdGVkL1Byb3h5SW5zdGFuY2UubW0JKHJldmlz
aW9uIDI2Nzc2NykKKysrIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvSG9zdGVkL1By
b3h5SW5zdGFuY2UubW0JKHdvcmtpbmcgY29weSkKQEAgLTMyOCw5ICszMjgsOSBAQCB2b2lkIFBy
b3h5SW5zdGFuY2U6OmdldFByb3BlcnR5TmFtZXMoSlNHCiAKICAgICAgICAgaWYgKGlkZW50aWZp
ZXItPmlzU3RyaW5nKCkpIHsKICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHN0ciA9IGlkZW50aWZp
ZXItPnN0cmluZygpOwotICAgICAgICAgICAgbmFtZUFycmF5LmFkZChJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCBTdHJpbmc6OmZyb21VVEY4V2l0aExhdGluMUZhbGxiYWNrKHN0ciwgc3RybGVu
KHN0cikpKSk7CisgICAgICAgICAgICBuYW1lQXJyYXkuYWRkPEVudW1lcmFibGU6OlRydWU+KElk
ZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIFN0cmluZzo6ZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJh
Y2soc3RyLCBzdHJsZW4oc3RyKSkpKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBuYW1l
QXJyYXkuYWRkKElkZW50aWZpZXI6OmZyb20odm0sIGlkZW50aWZpZXItPm51bWJlcigpKSk7Cisg
ICAgICAgICAgICBuYW1lQXJyYXkuYWRkPEVudW1lcmFibGU6OlRydWU+KGlkZW50aWZpZXItPm51
bWJlcigpKTsKICAgICB9CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>415055</attachid>
            <date>2020-11-30 14:13:54 -0800</date>
            <delta_ts>2020-12-02 17:05:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-38970-20201201001352.patch</filename>
            <type>text/plain</type>
            <size>81239</size>
            <attacher name="Alexey Shvayka">ashvayka</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNzAyNTkpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE1IEBACisyMDIwLTExLTMwICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNo
QGdtYWlsLmNvbT4KKworICAgICAgICBOb24tZW51bWVyYWJsZSBwcm9wZXJ0eSBmYWlscyB0byBz
aGFkb3cgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydHkgZnJvbSBmb3ItaW4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM4OTcwCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBzdHJlc3MvYXJndW1lbnRz
LWJpemFycmUtYmVoYXZpb3VyLWRpc2FibGUtZW51bWVyYWJpbGl0eS5qczoKKyAgICAgICAgKiBz
dHJlc3MvZm9yLWluLXJlZGVmaW5lLWVudW1lcmFibGUuanM6IEFkZGVkLgorICAgICAgICAqIHN0
cmVzcy9mb3ItaW4tc2hhZG93LW5vbi1lbnVtZXJhYmxlLmpzOiBBZGRlZC4KKyAgICAgICAgKiB0
ZXN0MjYyL2V4cGVjdGF0aW9ucy55YW1sOiBNYXJrIDQgdGVzdCBjYXNlcyBhcyBwYXNzaW5nLgor
CiAyMDIwLTExLTI4ICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAg
ICAgVW5yZXZpZXdkLCBhbm5vdGF0ZSBzdHJlc3MvYm91bmRzLWNoZWNraW5nLWluLWNvbGQtbG9v
cC5qcyB3aXRoIG1lbW9yeUxpbWl0ZWQKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL2FyZ3VtZW50cy1i
aXphcnJlLWJlaGF2aW91ci1kaXNhYmxlLWVudW1lcmFiaWxpdHkuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SlNUZXN0cy9zdHJlc3MvYXJndW1lbnRzLWJpemFycmUtYmVoYXZpb3VyLWRpc2FibGUtZW51bWVy
YWJpbGl0eS5qcwkocmV2aXNpb24gMjcwMjU5KQorKysgSlNUZXN0cy9zdHJlc3MvYXJndW1lbnRz
LWJpemFycmUtYmVoYXZpb3VyLWRpc2FibGUtZW51bWVyYWJpbGl0eS5qcwkod29ya2luZyBjb3B5
KQpAQCAtMTgsNyArMTgsNyBAQCB2YXIgYXJyYXkgPSBbXTsKIGZvciAodmFyIHMgaW4gcmVzdWx0
WzJdKQogICAgIGFycmF5LnB1c2gocyk7CiAKLWlmIChhcnJheS5qb2luKCIsIikgIT0gIjAiKQor
aWYgKGFycmF5LmpvaW4oIiwiKSAhPSAiIikKICAgICB0aHJvdyBuZXcgRXJyb3IoKTsKIAogaWYg
KE9iamVjdC5rZXlzKHJlc3VsdFsyXSkuam9pbigiLCIpICE9ICIwIikKSW5kZXg6IEpTVGVzdHMv
c3RyZXNzL2Zvci1pbi1yZWRlZmluZS1lbnVtZXJhYmxlLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVz
dHMvc3RyZXNzL2Zvci1pbi1yZWRlZmluZS1lbnVtZXJhYmxlLmpzCShub25leGlzdGVudCkKKysr
IEpTVGVzdHMvc3RyZXNzL2Zvci1pbi1yZWRlZmluZS1lbnVtZXJhYmxlLmpzCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTA3IEBACitmdW5jdGlvbiBhc3NlcnQoeCkgeworICAgIGlmICgheCkK
KyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgYXNzZXJ0aW9uISIpOworfQorCitmdW5jdGlv
biBzaG91bGRCZShhY3R1YWwsIGV4cGVjdGVkKSB7CisgICAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0
ZWQpCisgICAgICAgIHRocm93IG5ldyBFcnJvcihgQmFkIHZhbHVlOiAke2FjdHVhbH0uYCk7Cit9
CisKK2NvbnN0IGVudW1EZXNjID0geyB2YWx1ZTogMCwgd3JpdGFibGU6IHRydWUsIGVudW1lcmFi
bGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9OworY29uc3QgZG9udEVudW1EZXNjID0geyB2
YWx1ZTogMCwgd3JpdGFibGU6IHRydWUsIGVudW1lcmFibGU6IGZhbHNlLCBjb25maWd1cmFibGU6
IHRydWUgfTsKKworLy8gaW5kZXhlZCBwcm9wZXJ0eQorKCgpID0+IHsKKyAgICBmdW5jdGlvbiB0
ZXN0KCkgeworICAgICAgICB2YXIgYXJyID0gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoWzAsIDAs
IDBdLCB7IDE6IGRvbnRFbnVtRGVzYyB9KTsKKyAgICAgICAgZm9yICh2YXIgaSBpbiBhcnIpIHsK
KyAgICAgICAgICAgIGFzc2VydChpIGluIGFycik7CisgICAgICAgICAgICBzaG91bGRCZShhcnJb
aV0sIDApOworICAgICAgICAgICAgKythcnJbaV07CisgICAgICAgICAgICBpZiAoaSA9PT0gIjAi
KQorICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGFyciwgeyAxOiBlbnVt
RGVzYywgMjogZG9udEVudW1EZXNjIH0pOworICAgICAgICB9CisgICAgICAgIHNob3VsZEJlKGFy
clswXSwgMSk7CisgICAgICAgIHNob3VsZEJlKGFyclsxXSwgMCk7CisgICAgICAgIHNob3VsZEJl
KGFyclsyXSwgMCk7CisgICAgfQorCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTU7ICsraSkK
KyAgICAgICAgdGVzdCgpOworfSkoKTsKKworLy8gc3RydWN0dXJlIHByb3BlcnR5CisoKCkgPT4g
eworICAgIGZ1bmN0aW9uIHRlc3QoKSB7CisgICAgICAgIHZhciBvYmogPSBPYmplY3QuY3JlYXRl
KG51bGwsIHsgYTogZW51bURlc2MsIGI6IGVudW1EZXNjLCBjOiBkb250RW51bURlc2MgfSk7Cisg
ICAgICAgIGZvciAodmFyIGtleSBpbiBvYmopIHsKKyAgICAgICAgICAgIGFzc2VydChrZXkgaW4g
b2JqKTsKKyAgICAgICAgICAgIHNob3VsZEJlKG9ialtrZXldLCAwKTsKKyAgICAgICAgICAgICsr
b2JqW2tleV07CisgICAgICAgICAgICBpZiAoa2V5ID09PSAiYSIpCisgICAgICAgICAgICAgICAg
T2JqZWN0LmRlZmluZVByb3BlcnRpZXMob2JqLCB7IGI6IGRvbnRFbnVtRGVzYywgYzogZW51bURl
c2MgfSk7CisgICAgICAgIH0KKyAgICAgICAgc2hvdWxkQmUob2JqLmEsIDEpOworICAgICAgICBz
aG91bGRCZShvYmouYiwgMCk7CisgICAgICAgIHNob3VsZEJlKG9iai5jLCAwKTsKKyAgICB9CisK
KyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNTsgKytpKQorICAgICAgICB0ZXN0KCk7Cit9KSgp
OworCisvLyBnZW5lcmljIHByb3BlcnR5IChQcm94eSkKKygoKSA9PiB7CisgICAgZnVuY3Rpb24g
dGVzdCgpIHsKKyAgICAgICAgdmFyIHRhcmdldCA9IHsgYTogMCwgYjogMCwgYzogMCB9OworICAg
ICAgICB2YXIgZW51bU1hcCA9IHsgYTogdHJ1ZSwgYjogdHJ1ZSwgYzogZmFsc2UgfTsKKyAgICAg
ICAgdmFyIHByb3h5ID0gbmV3IFByb3h5KHRhcmdldCwgeworICAgICAgICAgICAgZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yOiAoXywga2V5KSA9PiB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsg
dmFsdWU6IHRhcmdldFtrZXldLCB3cml0YWJsZTogdHJ1ZSwgZW51bWVyYWJsZTogZW51bU1hcFtr
ZXldLCBjb25maWd1cmFibGU6IHRydWUgfTsKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0pOwor
CisgICAgICAgIGZvciAodmFyIGtleSBpbiBwcm94eSkgeworICAgICAgICAgICAgYXNzZXJ0KGtl
eSBpbiBwcm94eSk7CisgICAgICAgICAgICBzaG91bGRCZShwcm94eVtrZXldLCAwKTsKKyAgICAg
ICAgICAgICsrdGFyZ2V0W2tleV07CisgICAgICAgICAgICBpZiAoa2V5ID09PSAiYSIpIHsKKyAg
ICAgICAgICAgICAgICBlbnVtTWFwLmIgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBlbnVtTWFw
LmMgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHNob3VsZEJlKHRh
cmdldC5hLCAxKTsKKyAgICAgICAgc2hvdWxkQmUodGFyZ2V0LmIsIDApOworICAgICAgICBzaG91
bGRCZSh0YXJnZXQuYywgMCk7CisgICAgfQorCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTU7
ICsraSkKKyAgICAgICAgdGVzdCgpOworfSkoKTsKKworLy8gZ2VuZXJpYyBwcm9wZXJ0eSAoaW4g
cHJvdG90eXBlKQorKCgpID0+IHsKKyAgICBmdW5jdGlvbiB0ZXN0KCkgeworICAgICAgICB2YXIg
c2VlbiA9IHt9OworICAgICAgICB2YXIgcHJvdG8gPSBPYmplY3QuY3JlYXRlKG51bGwsIHsgYjog
ZW51bURlc2MsIGM6IGRvbnRFbnVtRGVzYywgZDogZW51bURlc2MsIGU6IGVudW1EZXNjIH0pOwor
ICAgICAgICB2YXIgaGVpciA9IE9iamVjdC5jcmVhdGUocHJvdG8sIHsgYTogZW51bURlc2MsIGU6
IGRvbnRFbnVtRGVzYyB9KTsKKyAgICAgICAgZm9yICh2YXIga2V5IGluIGhlaXIpIHsKKyAgICAg
ICAgICAgIGFzc2VydChrZXkgaW4gaGVpcik7CisgICAgICAgICAgICBzaG91bGRCZShoZWlyW2tl
eV0sIDApOworICAgICAgICAgICAgc2VlbltrZXldID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChr
ZXkgPT09ICJhIikKKyAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhwcm90
bywgeyBiOiBkb250RW51bURlc2MsIGM6IGVudW1EZXNjIH0pOworICAgICAgICAgICAgaWYgKGtl
eSA9PT0gImQiKQorICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGhlaXIs
IHsgZTogZW51bURlc2MgfSk7CisgICAgICAgIH0KKyAgICAgICAgYXNzZXJ0KHNlZW4uYSk7Cisg
ICAgICAgIGFzc2VydCghc2Vlbi5iKTsKKyAgICAgICAgYXNzZXJ0KCFzZWVuLmMpOworICAgICAg
ICBhc3NlcnQoc2Vlbi5kKTsKKyAgICAgICAgYXNzZXJ0KHNlZW4uZSk7CisgICAgfQorCisgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCAxZTU7ICsraSkKKyAgICAgICAgdGVzdCgpOworfSkoKTsKSW5k
ZXg6IEpTVGVzdHMvc3RyZXNzL2Zvci1pbi1zaGFkb3ctbm9uLWVudW1lcmFibGUuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvZm9yLWluLXNoYWRvdy1ub24tZW51bWVyYWJsZS5qcwko
bm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL3N0cmVzcy9mb3ItaW4tc2hhZG93LW5vbi1lbnVtZXJh
YmxlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTc0IEBACitjb25zdCBkb250RW51bURl
c2MgPSB7IHZhbHVlOiAxLCB3cml0YWJsZTogdHJ1ZSwgZW51bWVyYWJsZTogZmFsc2UsIGNvbmZp
Z3VyYWJsZTogdHJ1ZSB9OworY29uc3QgdGVzdENhc2VzID0gWworICB7CisgICAgbmFtZTogIk9i
amVjdCIsCisgICAgY3JlYXRlT2JqZWN0OiAoKSA9PiBPYmplY3QuY3JlYXRlKG51bGwsIHsgZm9v
OiBkb250RW51bURlc2MsIGJhcjogZG9udEVudW1EZXNjIH0pLAorICAgIGRvbnRFbnVtS2V5czog
WyJmb28iLCAiYmFyIl0sCisgIH0sCisgIHsKKyAgICBuYW1lOiAiRXJyb3IiLAorICAgIGNyZWF0
ZU9iamVjdDogKCkgPT4gbmV3IEVycm9yKCksCisgICAgZG9udEVudW1LZXlzOiBbImxpbmUiLCAi
Y29sdW1uIiwgInNvdXJjZVVSTCIsICJzdGFjayJdLAorICB9LAorICB7CisgICAgbmFtZTogIkFy
cmF5IChlbXB0eSkiLAorICAgIGNyZWF0ZU9iamVjdDogKCkgPT4gW10sCisgICAgZG9udEVudW1L
ZXlzOiBbImxlbmd0aCJdLAorICB9LAorICB7CisgICAgbmFtZTogIkFycmF5IChzcGFyc2UpIiwK
KyAgICBjcmVhdGVPYmplY3Q6ICgpID0+IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFswLCAxLCAy
XSwgeyAwOiBkb250RW51bURlc2MsIDI6IGRvbnRFbnVtRGVzYyB9KSwKKyAgICBkb250RW51bUtl
eXM6IFsiMCIsICIyIiwgImxlbmd0aCJdLAorICB9LAorICB7CisgICAgbmFtZTogIkZ1bmN0aW9u
IChzdHJpY3QpIiwKKyAgICBjcmVhdGVPYmplY3Q6ICgpID0+IGZ1bmN0aW9uKCkgeyAidXNlIHN0
cmljdCI7IH0sCisgICAgZG9udEVudW1LZXlzOiBbImxlbmd0aCIsICJuYW1lIiwgInByb3RvdHlw
ZSJdLAorICB9LAorICB7CisgICAgbmFtZTogIkZ1bmN0aW9uIChub24tc3RyaWN0KSIsCisgICAg
Y3JlYXRlT2JqZWN0OiAoKSA9PiBmdW5jdGlvbigpIHt9LAorICAgIGRvbnRFbnVtS2V5czogWyJh
cmd1bWVudHMiLCAiY2FsbGVyIiwgImxlbmd0aCIsICJuYW1lIiwgInByb3RvdHlwZSJdLAorICB9
LAorICB7CisgICAgbmFtZTogIlJlZ0V4cCIsCisgICAgY3JlYXRlT2JqZWN0OiAoKSA9PiAvKD86
KS9nLAorICAgIGRvbnRFbnVtS2V5czogWyJsYXN0SW5kZXgiXSwKKyAgfSwKKyAgeworICAgIG5h
bWU6ICJTdHJpbmciLAorICAgIGNyZWF0ZU9iamVjdDogKCkgPT4gbmV3IFN0cmluZygiZm9vIiks
CisgICAgZG9udEVudW1LZXlzOiBbImxlbmd0aCJdLAorICB9LAorICB7CisgICAgbmFtZTogIkFy
Z3VtZW50cyAoc3RyaWN0KSIsCisgICAgY3JlYXRlT2JqZWN0OiBmdW5jdGlvbihmb28pIHsgInVz
ZSBzdHJpY3QiOyByZXR1cm4gYXJndW1lbnRzOyB9LAorICAgIGRvbnRFbnVtS2V5czogWyJsZW5n
dGgiLCAiY2FsbGVlIl0sCisgIH0sCisgIHsKKyAgICBuYW1lOiAiQXJndW1lbnRzIChub24tc3Ry
aWN0KSIsCisgICAgY3JlYXRlT2JqZWN0OiBmdW5jdGlvbihmb28pIHsgcmV0dXJuIGFyZ3VtZW50
czsgfSwKKyAgICBkb250RW51bUtleXM6IFsibGVuZ3RoIiwgImNhbGxlZSJdLAorICB9LAorICB7
CisgICAgbmFtZTogIlJlZmxlY3QiLAorICAgIGNyZWF0ZU9iamVjdDogKCkgPT4gJHZtLmNyZWF0
ZUdsb2JhbE9iamVjdCgpLlJlZmxlY3QsCisgICAgZG9udEVudW1LZXlzOiBbImFwcGx5IiwgImdl
dCIsICJoYXMiLCAic2V0Il0sCisgIH0sCisgIHsKKyAgICBuYW1lOiAiRGF0ZS5wcm90b3R5cGUi
LAorICAgIGNyZWF0ZU9iamVjdDogKCkgPT4gJHZtLmNyZWF0ZUdsb2JhbE9iamVjdCgpLkRhdGUu
cHJvdG90eXBlLAorICAgIGRvbnRFbnVtS2V5czogWyJ0b0lTT1N0cmluZyIsICJnZXRUaW1lIiwg
InNldFllYXIiXSwKKyAgfSwKK107CisKKy8vIGJhc2ljIHRlc3RzCitmb3IgKGNvbnN0IHQgb2Yg
dGVzdENhc2VzKSB7CisgIGFzc2VydCghY29udGFpbnMoZm9ySW4odC5jcmVhdGVPYmplY3QoKSks
IHQuZG9udEVudW1LZXlzKSwgdC5uYW1lKTsKKyAgYXNzZXJ0KCFjb250YWlucyhPYmplY3Qua2V5
cyh0LmNyZWF0ZU9iamVjdCgpKSwgdC5kb250RW51bUtleXMpLCB0Lm5hbWUpOworCisgIGFzc2Vy
dChjb250YWlucyhPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0LmNyZWF0ZU9iamVjdCgpKSwg
dC5kb250RW51bUtleXMpLCB0Lm5hbWUpOworICBhc3NlcnQoY29udGFpbnMoUmVmbGVjdC5vd25L
ZXlzKHQuY3JlYXRlT2JqZWN0KCkpLCB0LmRvbnRFbnVtS2V5cyksIHQubmFtZSk7Cit9CisKKy8v
IHNoYWRvd2luZzogRG9udEVudW0gPT4gRW51bQorZm9yIChjb25zdCB0IG9mIHRlc3RDYXNlcykg
eworICBhc3NlcnQoCisgICAgIWNvbnRhaW5zKAorICAgICAgZm9ySW4obWFrZVByb3RvdHlwZUNo
YWluKHQuY3JlYXRlT2JqZWN0KCksIG1ha2VPYmplY3QodC5kb250RW51bUtleXMpKSksCisgICAg
ICB0LmRvbnRFbnVtS2V5cywKKyAgICApLAorICAgIHQubmFtZSwKKyAgKTsKK30KKworLy8gc2hh
ZG93aW5nOiB7fSA9PiBEb250RW51bSA9PiB7fSA9PiBFbnVtCitmb3IgKGNvbnN0IHQgb2YgdGVz
dENhc2VzKSB7CisgIGFzc2VydCgKKyAgICAhY29udGFpbnMoCisgICAgICBmb3JJbihtYWtlUHJv
dG90eXBlQ2hhaW4oe30sIHQuY3JlYXRlT2JqZWN0KCksIHt9LCBtYWtlT2JqZWN0KHQuZG9udEVu
dW1LZXlzKSkpLAorICAgICAgdC5kb250RW51bUtleXMsCisgICAgKSwKKyAgICB0Lm5hbWUsCisg
ICk7Cit9CisKKy8vIHNoYWRvd2luZzogRG9udEVudW0gPT4ge30gPT4gRW51bSA9PiB7fSA9PiBF
bnVtCitmb3IgKGNvbnN0IHQgb2YgdGVzdENhc2VzKSB7CisgIGFzc2VydCgKKyAgICAhY29udGFp
bnMoCisgICAgICBmb3JJbihtYWtlUHJvdG90eXBlQ2hhaW4odC5jcmVhdGVPYmplY3QoKSwge30s
IG1ha2VPYmplY3QodC5kb250RW51bUtleXMpLCB7fSwgbWFrZU9iamVjdCh0LmRvbnRFbnVtS2V5
cykpKSwKKyAgICAgIHQuZG9udEVudW1LZXlzLAorICAgICksCisgICAgdC5uYW1lLAorICApOwor
fQorCisvLyBzaGFkb3dpbmc6IHt9ID0+IERvbnRFbnVtIChlbnVtZXJhYmxlOiB0cnVlID0+IGZh
bHNlKSA9PiB7fSA9PiBFbnVtCitmb3IgKGNvbnN0IHQgb2YgdGVzdENhc2VzKSB7CisgIGNvbnN0
IGRvbnRFbnVtT2JqZWN0ID0gdC5jcmVhdGVPYmplY3QoKTsKKyAgY29uc3QgdGFyZ2V0ID0gbWFr
ZVByb3RvdHlwZUNoYWluKHt9LCBkb250RW51bU9iamVjdCwge30sIG1ha2VPYmplY3QodC5kb250
RW51bUtleXMpKTsKKyAgYXNzZXJ0KCFjb250YWlucyhmb3JJbih0YXJnZXQpLCB0LmRvbnRFbnVt
S2V5cyksIHQubmFtZSk7CisKKyAgY29uc3QgZW51bUtleXMgPSB0LmRvbnRFbnVtS2V5cy5maWx0
ZXIoa2V5ID0+IFJlZmxlY3QuZGVmaW5lUHJvcGVydHkoZG9udEVudW1PYmplY3QsIGtleSwgeyBl
bnVtZXJhYmxlOiB0cnVlIH0pKTsKKyAgYXNzZXJ0KGNvbnRhaW5zKGZvckluKHRhcmdldCksIGVu
dW1LZXlzKSwgdC5uYW1lKTsKK30KKworLy8gc2hhZG93aW5nOiB7fSA9PiBEb250RW51bSAoZGVs
ZXRlIG5vbi1lbnVtZXJhYmxlIGtleXMpID0+IHt9ID0+IEVudW0KK2ZvciAoY29uc3QgdCBvZiB0
ZXN0Q2FzZXMpIHsKKyAgY29uc3QgZG9udEVudW1PYmplY3QgPSB0LmNyZWF0ZU9iamVjdCgpOwor
ICBjb25zdCB0YXJnZXQgPSBtYWtlUHJvdG90eXBlQ2hhaW4oe30sIGRvbnRFbnVtT2JqZWN0LCB7
fSwgbWFrZU9iamVjdCh0LmRvbnRFbnVtS2V5cykpOworICBhc3NlcnQoIWNvbnRhaW5zKGZvcklu
KHRhcmdldCksIHQuZG9udEVudW1LZXlzKSwgdC5uYW1lKTsKKworICBjb25zdCBlbnVtS2V5cyA9
IHQuZG9udEVudW1LZXlzLmZpbHRlcihrZXkgPT4gUmVmbGVjdC5kZWxldGVQcm9wZXJ0eShkb250
RW51bU9iamVjdCwga2V5KSk7CisgIGFzc2VydChjb250YWlucyhmb3JJbih0YXJnZXQpLCBlbnVt
S2V5cyksIHQubmFtZSk7Cit9CisKKy8vIHNoYWRvd2luZzoge30gPT4gRG9udEVudW0gKG1hdGVy
aWFsaXplZCkgPT4ge30gPT4gRW51bQorZm9yIChjb25zdCB0IG9mIHRlc3RDYXNlcykgeworICBj
b25zdCBkb250RW51bU9iamVjdCA9IHQuY3JlYXRlT2JqZWN0KCk7CisgIGNvbnN0IHRhcmdldCA9
IG1ha2VQcm90b3R5cGVDaGFpbih7fSwgZG9udEVudW1PYmplY3QsIHt9LCBtYWtlT2JqZWN0KHQu
ZG9udEVudW1LZXlzKSk7CisgIGFzc2VydCghY29udGFpbnMoZm9ySW4odGFyZ2V0KSwgdC5kb250
RW51bUtleXMpLCB0Lm5hbWUpOworCisgIGNvbnN0IGRvbnRFbnVtS2V5cyA9IHQuZG9udEVudW1L
ZXlzLmZpbHRlcihrZXkgPT4geworICAgIGNvbnN0IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yKGRvbnRFbnVtT2JqZWN0LCBrZXkpOworICAgIGlmICghUmVmbGVjdC5kZWxl
dGVQcm9wZXJ0eShkb250RW51bU9iamVjdCwga2V5KSkgcmV0dXJuIGZhbHNlOworICAgIE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShkb250RW51bU9iamVjdCwga2V5LCBkZXNjKTsKKyAgICByZXR1cm4g
dHJ1ZTsKKyAgfSk7CisKKyAgaWYgKGRvbnRFbnVtS2V5cy5sZW5ndGgpCisgICAgYXNzZXJ0KCFj
b250YWlucyhmb3JJbih0YXJnZXQpLCBkb250RW51bUtleXMpLCB0Lm5hbWUpOworfQorCisvLyBo
ZWxwZXJzCitmdW5jdGlvbiBhc3NlcnQodmFsdWUsIG5hbWUpIHsKKyAgaWYgKCF2YWx1ZSkKKyAg
ICB0aHJvdyBuZXcgRXJyb3IoYEJhZCB2YWx1ZTogJHt2YWx1ZX0uIFRlc3QgY2FzZTogJHtuYW1l
fS5gKTsKK30KKworZnVuY3Rpb24gY29udGFpbnMoYXJyYXksIHN1YmFycmF5KSB7CisgIHJldHVy
biBzdWJhcnJheS5ldmVyeShpdGVtID0+IGFycmF5LmluY2x1ZGVzKGl0ZW0pKTsKK30KKworZnVu
Y3Rpb24gZm9ySW4ob2JqZWN0KSB7CisgIGNvbnN0IGtleXMgPSBbXTsKKyAgZm9yIChjb25zdCBr
ZXkgaW4gb2JqZWN0KQorICAgIGtleXMucHVzaChrZXkpOworICByZXR1cm4ga2V5czsKK30KKwor
ZnVuY3Rpb24gbWFrZVByb3RvdHlwZUNoYWluKC4uLm9iamVjdHMpIHsKKyAgb2JqZWN0cy5yZWR1
Y2UoKG9iamVjdCwgcHJvdG90eXBlKSA9PiB7CisgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKG9i
amVjdCwgcHJvdG90eXBlKTsKKyAgICByZXR1cm4gcHJvdG90eXBlOworICB9KTsKKyAgcmV0dXJu
IG9iamVjdHNbMF07Cit9CisKK2Z1bmN0aW9uIG1ha2VPYmplY3Qoa2V5cykgeworICBjb25zdCBv
YmplY3QgPSB7fTsKKyAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykKKyAgICBvYmplY3Rba2V5XSA9
IGtleTsKKyAgcmV0dXJuIG9iamVjdDsKK30KSW5kZXg6IEpTVGVzdHMvdGVzdDI2Mi9leHBlY3Rh
dGlvbnMueWFtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3Rlc3QyNjIvZXhwZWN0YXRpb25zLnlh
bWwJKHJldmlzaW9uIDI3MDI1OSkKKysrIEpTVGVzdHMvdGVzdDI2Mi9leHBlY3RhdGlvbnMueWFt
bAkod29ya2luZyBjb3B5KQpAQCAtMjY3NSwxNiArMjY3NSwxMCBAQCB0ZXN0L2xhbmd1YWdlL3N0
YXRlbWVudHMvZm9yLWF3YWl0LW9mL3RpCiB0ZXN0L2xhbmd1YWdlL3N0YXRlbWVudHMvZm9yLWF3
YWl0LW9mL3RpY2tzLXdpdGgtc3luYy1pdGVyLXJlc29sdmVkLXByb21pc2UtYW5kLWNvbnN0cnVj
dG9yLWxvb2t1cC5qczoKICAgZGVmYXVsdDogJ1Rlc3QyNjI6QXN5bmNUZXN0RmFpbHVyZTpUZXN0
MjYyRXJyb3I6IFRlc3QyNjJFcnJvcjogRXhwZWN0ZWQgW3ByZSwgdGljayAxLCBjb25zdHJ1Y3Rv
ciwgY29uc3RydWN0b3IsIHRpY2sgMiwgdGljayAzLCBsb29wLCB0aWNrIDQsIGNvbnN0cnVjdG9y
XSBhbmQgW3ByZSwgY29uc3RydWN0b3IsIGNvbnN0cnVjdG9yLCB0aWNrIDEsIHRpY2sgMiwgbG9v
cCwgY29uc3RydWN0b3IsIHRpY2sgMywgdGljayA0LCBwb3N0XSB0byBoYXZlIHRoZSBzYW1lIGNv
bnRlbnRzLiBUaWNrcyBhbmQgY29uc3RydWN0b3IgbG9va3VwcycKICAgc3RyaWN0IG1vZGU6ICdU
ZXN0MjYyOkFzeW5jVGVzdEZhaWx1cmU6VGVzdDI2MkVycm9yOiBUZXN0MjYyRXJyb3I6IEV4cGVj
dGVkIFtwcmUsIHRpY2sgMSwgY29uc3RydWN0b3IsIGNvbnN0cnVjdG9yLCB0aWNrIDIsIHRpY2sg
MywgbG9vcCwgdGljayA0LCBjb25zdHJ1Y3Rvcl0gYW5kIFtwcmUsIGNvbnN0cnVjdG9yLCBjb25z
dHJ1Y3RvciwgdGljayAxLCB0aWNrIDIsIGxvb3AsIGNvbnN0cnVjdG9yLCB0aWNrIDMsIHRpY2sg
NCwgcG9zdF0gdG8gaGF2ZSB0aGUgc2FtZSBjb250ZW50cy4gVGlja3MgYW5kIGNvbnN0cnVjdG9y
IGxvb2t1cHMnCi10ZXN0L2xhbmd1YWdlL3N0YXRlbWVudHMvZm9yLWluLzEyLjYuNC0yLmpzOgot
ICBkZWZhdWx0OiAnVGVzdDI2MkVycm9yOiBhY2Nlc3NlZFByb3AgRXhwZWN0ZWQgU2FtZVZhbHVl
KMKrdHJ1ZcK7LCDCq2ZhbHNlwrspIHRvIGJlIHRydWUnCi0gIHN0cmljdCBtb2RlOiAnVGVzdDI2
MkVycm9yOiBhY2Nlc3NlZFByb3AgRXhwZWN0ZWQgU2FtZVZhbHVlKMKrdHJ1ZcK7LCDCq2ZhbHNl
wrspIHRvIGJlIHRydWUnCiB0ZXN0L2xhbmd1YWdlL3N0YXRlbWVudHMvZm9yLWluL2hlYWQtbGhz
LWxldC5qczoKICAgZGVmYXVsdDogIlN5bnRheEVycm9yOiBDYW5ub3QgdXNlIHRoZSBrZXl3b3Jk
ICdpbicgYXMgYSBsZXhpY2FsIHZhcmlhYmxlIG5hbWUuIgogdGVzdC9sYW5ndWFnZS9zdGF0ZW1l
bnRzL2Zvci1pbi9pZGVudGlmaWVyLWxldC1hbGxvd2VkLWFzLWxlZnRoYW5kc2lkZS1leHByZXNz
aW9uLW5vdC1zdHJpY3QuanM6CiAgIGRlZmF1bHQ6ICJTeW50YXhFcnJvcjogQ2Fubm90IHVzZSB0
aGUga2V5d29yZCAnaW4nIGFzIGEgbGV4aWNhbCB2YXJpYWJsZSBuYW1lLiIKLXRlc3QvbGFuZ3Vh
Z2Uvc3RhdGVtZW50cy9mb3ItaW4vb3JkZXItZW51bWVyYWJsZS1zaGFkb3dlZC5qczoKLSAgZGVm
YXVsdDogJ1Rlc3QyNjJFcnJvcjogRXhwZWN0ZWQgW3AxLCBwMl0gYW5kIFtwMV0gdG8gaGF2ZSB0
aGUgc2FtZSBjb250ZW50cy4gJwotICBzdHJpY3QgbW9kZTogJ1Rlc3QyNjJFcnJvcjogRXhwZWN0
ZWQgW3AxLCBwMl0gYW5kIFtwMV0gdG8gaGF2ZSB0aGUgc2FtZSBjb250ZW50cy4gJwogdGVzdC9s
YW5ndWFnZS9zdGF0ZW1lbnRzL2Zvci1pbi9zY29wZS1ib2R5LWxleC1vcGVuLmpzOgogICBkZWZh
dWx0OiAnVGVzdDI2MkVycm9yOiBFeHBlY3RlZCBhIFJlZmVyZW5jZUVycm9yIHRvIGJlIHRocm93
biBidXQgbm8gZXhjZXB0aW9uIHdhcyB0aHJvd24gYXQgYWxsJwogICBzdHJpY3QgbW9kZTogJ1Rl
c3QyNjJFcnJvcjogRXhwZWN0ZWQgYSBSZWZlcmVuY2VFcnJvciB0byBiZSB0aHJvd24gYnV0IG5v
IGV4Y2VwdGlvbiB3YXMgdGhyb3duIGF0IGFsbCcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxv
ZwkocmV2aXNpb24gMjcwMjU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzNCBAQAorMjAyMC0xMS0zMCAgQWxleGV5IFNodmF5
a2EgIDxzaHZhaWthbGVzaEBnbWFpbC5jb20+CisKKyAgICAgICAgTm9uLWVudW1lcmFibGUgcHJv
cGVydHkgZmFpbHMgdG8gc2hhZG93IGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnR5IGZyb20g
Zm9yLWluCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0z
ODk3MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdo
aWxlIGZvci9pbiB3YXMgaW5pdGlhbGx5IHNwZWNpZmllZCB3aXRoIG5vdGlvbiBvZiAic2hhZG93
aW5nIiwgaXQgd2Fzbid0IGNsYXJpZmllZAorICAgICAgICB1bnRpbCBFUzUgdGhhdCBbW0VudW1l
cmFibGVdXSBhdHRyaWJ1dGVzIGFyZSBpZ25vcmVkIHdoZW4gZGV0ZXJtaW5pbmcgaWYgYSBwcm9w
ZXJ0eQorICAgICAgICBoYXMgYWxyZWFkeSBiZWVuIHByb2Nlc3NlZC4gUmVjZW50bHksIGZvci9p
biBzcGVjIHdhcyBleHBhbmRlZCBbMV0gdG8gcGluIGRvd24gY29tbW9uCisgICAgICAgIGNhc2Ug
ZW51bWVyYXRpb24gYXMgaXQncyBjdXJyZW50bHkgaW1wbGVtZW50ZWQgYnkgVjggYW5kIFNwaWRl
ck1vbmtleS4KKworICAgICAgICBTaW5jZSBrZWVwaW5nIHRyYWNrIG9mIERvbnRFbnVtIHByb3Bl
cnRpZXMgaXMgYSBtYXNzaXZlIHNsb3dkb3duIGZvciB1bmNhY2hlZCBydW5zCisgICAgICAgICh3
aXRoIGFueSBkYXRhIHN0cnVjdHVyZSB1c2VkKSwgdGhpcyBwYXRjaCBzaW1wbHkgYWRkcyBbW0Vu
dW1lcmFibGVdXSBjaGVjayB0bworICAgICAgICBoYXNfe2luZGV4ZWQsc3RydWN0dXJlLGdlbmVy
aWN9X3Byb3BlcnR5IGJ5dGVjb2RlIG9wcyBhbmQgZG9lcyByZW5hbWluZyBjaG9yZXMuCisKKyAg
ICAgICAgQ29tbW9uIGNvZGUgaXMgbm93IHNoYXJlZCBiZXR3ZWVuIEhhc0luZGV4ZWRQcm9wZXJ0
eSAoZW1pdHRlZCBmb3IgYDAgaW4gYXJyYCkgYW5kCisgICAgICAgIEhhc0VudW1lcmFibGVJbmRl
eGVkUHJvcGVydHkgREZHIG5vZGVzIHZpYSBwYXNzaW5nIGRpZmZlcmVudCBzbG93IHBhdGggb3Bz
IHJhdGhlcgorICAgICAgICB0aGFuIGhhdmluZyBPcEluZm8gd2l0aCBQcm9wZXJ0eVNsb3Q6Oklu
dGVybmFsTWV0aG9kVHlwZSwgd2hpY2ggaXMgYSBuaWNlIHJlZmFjdG9yLgorCisgICAgICAgIFdo
aWxlIHRoaXMgY2hhbmdlIGFsaWducyBjb21tb24gY2FzZSBmb3IvaW4gZW51bWVyYXRpb24gd2l0
aCB0aGUgc3BlYyBhbmQgb3RoZXIKKyAgICAgICAgZW5naW5lcywgaXQgYWxzbyBpbnRyb2R1Y2Vz
IGEgZmV3IG9ic2VydmFibGUgZGlzY3JlcGFuY2llcyBmcm9tIFY4IGFuZCBTcGlkZXJNb25rZXks
CisgICAgICAgIHdoaWNoIGFyZSBwZXJtaXR0ZWQgYnkgdGhlIHNwZWMgWzJdOgorICAgICAgICBh
KSBwcm9wZXJ0aWVzIHRoYXQgaGF2ZSBiZWVuIHJlZGVmaW5lZCBhcyBEb250RW51bSB3aXRoaW4g
bG9vcCBib2R5IGFyZSBza2lwcGVkLAorICAgICAgICAgICB3aGljaCBtYXRjaGVzIHRoZSBzcGVj
IFszXSBhbmQgc2VlbXMgbGlrZSBleHBlY3RlZCBiZWhhdmlvcjsKKyAgICAgICAgYikgInNoYWRv
d2luZyIgaXMgYnJva2VuIGlmIGEgRG9udEVudW0gcHJvcGVydHkgb2YgYWxyZWFkeSB2aXNpdGVk
IG9iamVjdCBpcworICAgICAgICAgICBhZGRlZCAvIGRlbGV0ZWQgLyByZWRlZmluZWQgd2l0aGlu
IGxvb3AgYm9keSwgd2hpY2ggKHByZXR0eSBtdWNoKSBuZXZlciBoYXBwZW5zLgorCisgICAgICAg
IGZvci9pbiBhbmQgT2JqZWN0LmtleXMgbWljcm9iZW5jaG1hcmtzIGFyZSBuZXV0cmFsLiBUaGlz
IHBhdGNoIGRvZXMgbm90IGFmZmVjdAorICAgICAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Ig
Y2FjaGluZywgbm9yIGZhc3QgcGF0aHMgb2YgaXRzIGJ5dGVjb2Rlcy4KKworICAgICAgICBbMV06
IGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L2VjbWEyNjIvcHVsbC8xNzkxCisgICAgICAgIFsyXTog
aHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1lbnVtZXJhdGUtb2JqZWN0LXByb3BlcnRpZXMg
KGxhc3QgcGFyYWdyYXBoKQorICAgICAgICBbM106IGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNz
ZWMtJWZvcmluaXRlcmF0b3Jwcm90b3R5cGUlLm5leHQgKHN0ZXAgNy5iLmlpaSkKKworICAgICAg
ICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYjoKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29k
ZVVzZURlZi5jcHA6CisgICAgICAgIChKU0M6OmNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleElt
cGwpOgorICAgICAgICAoSlNDOjpjb21wdXRlRGVmc0ZvckJ5dGVjb2RlSW5kZXhJbXBsKToKKyAg
ICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBieXRlY29kZS9PcGNvZGUuaDoKKyAgICAgICAg
KiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpCeXRl
Y29kZUdlbmVyYXRvcjo6ZW1pdEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHkpOgorICAgICAg
ICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9w
ZXJ0eSk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SGFzRW51bWVyYWJs
ZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRIYXNHZW5l
cmljUHJvcGVydHkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdEhhc0luZGV4ZWRQcm9wZXJ0eSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2Rl
R2VuZXJhdG9yOjplbWl0SGFzU3RydWN0dXJlUHJvcGVydHkpOiBEZWxldGVkLgorICAgICAgICAq
IGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oOgorICAgICAgICAqIGJ5dGVjb21waWxl
ci9Ob2Rlc0NvZGVnZW4uY3BwOgorICAgICAgICAoSlNDOjpGb3JJbk5vZGU6OmVtaXRCeXRlY29k
ZSk6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAg
ICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4
ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKiBk
ZmcvREZHQ2FwYWJpbGl0aWVzLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjYXBhYmlsaXR5TGV2
ZWwpOgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6
Y2xvYmJlcml6ZSk6CisgICAgICAgICogZGZnL0RGR0RvZXNHQy5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6ZG9lc0dDKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpG
aXh1cFBoYXNlOjpjb252ZXJ0VG9IYXNJbmRleGVkUHJvcGVydHkpOgorICAgICAgICAqIGRmZy9E
RkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzQXJyYXlNb2RlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpOb2RlOjpoYXNJbnRlcm5hbE1ldGhvZFR5cGUgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmludGVybmFsTWV0aG9kVHlwZSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6c2V0SW50ZXJuYWxNZXRob2RUeXBlKTog
RGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAgICAgKiBkZmcvREZH
T3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SlNDX0RFRklORV9KSVRfT1BFUkFU
SU9OKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5oOgorICAgICAgICAqIGRmZy9ERkdQ
cmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR1NTQUxvd2Vy
aW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNTQUxvd2VyaW5nUGhhc2U6OmhhbmRs
ZU5vZGUpOgorICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVjdXRlLmg6CisgICAgICAgIChKU0M6
OkRGRzo6c2FmZVRvRXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUhhc0VudW1lcmFi
bGVQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVI
YXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUhhc0dlbmVyaWNQcm9wZXJ0eSk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVIYXNTdHJ1Y3R1cmVQcm9w
ZXJ0eSk6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAg
ICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgor
ICAgICAgICAqIGZ0bC9GVExDYXBhYmlsaXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNh
bkNvbXBpbGUpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAo
SlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlTm9kZSk6CisgICAgICAgIChKU0M6
OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkpOgorICAg
ICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlSGFzRW51bWVyYWJsZVBy
b3BlcnR5KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUhh
c0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpM
b3dlckRGR1RvQjM6OmNvbXBpbGVIYXNHZW5lcmljUHJvcGVydHkpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlSGFzU3RydWN0dXJlUHJvcGVy
dHkpOiBEZWxldGVkLgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6
OnByaXZhdGVDb21waWxlTWFpblBhc3MpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21w
aWxlU2xvd0Nhc2VzKToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJVE9w
Y29kZXMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaGFzX2VudW1lcmFibGVfc3Ry
dWN0dXJlX3Byb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2hhc19lbnVtZXJh
YmxlX2luZGV4ZWRfcHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2hh
c19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkpOiBEZWxldGVkLgorICAgICAgICAq
IGppdC9KSVRPcGNvZGVzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaGFz
X2VudW1lcmFibGVfc3RydWN0dXJlX3Byb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRTbG93X29wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHkpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eSk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eSk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkpOiBEZWxl
dGVkLgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6SlND
X0RFRklORV9KSVRfT1BFUkFUSU9OKToKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5oOgor
ICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtOgorICAgICAgICAqIGxsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc206CisgICAgICAgICogcnVudGltZS9Db21tb25TbG93
UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgpOgor
ICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmg6CisgICAgICAgICogcnVudGltZS9K
U09iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpoYXNQcm9wZXJ0eSBjb25zdCk6
CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpoYXNFbnVtZXJhYmxlUHJvcGVydHkgY29uc3QpOgor
ICAgICAgICAoSlNDOjpKU09iamVjdDo6aGFzUHJvcGVydHlHZW5lcmljIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6CisKIDIwMjAtMTEtMjggIFl1c3VrZSBT
dXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBmb2xsb3ct
dXAgYWZ0ZXIgcjI3MDIxNApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlTGlzdC5yYgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVMaXN0LnJiCShyZXZpc2lvbiAyNzAyNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCSh3b3JraW5nIGNvcHkpCkBAIC0xMTI1LDcg
KzExMjUsNyBAQCBvcCA6Z2V0X2VudW1lcmFibGVfbGVuZ3RoLAogICAgICAgICBiYXNlOiBWaXJ0
dWFsUmVnaXN0ZXIsCiAgICAgfQogCi1vcCA6aGFzX2luZGV4ZWRfcHJvcGVydHksCitvcCA6aGFz
X2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0eSwKICAgICBhcmdzOiB7CiAgICAgICAgIGRzdDog
VmlydHVhbFJlZ2lzdGVyLAogICAgICAgICBiYXNlOiBWaXJ0dWFsUmVnaXN0ZXIsCkBAIC0xMTM1
LDcgKzExMzUsNyBAQCBvcCA6aGFzX2luZGV4ZWRfcHJvcGVydHksCiAgICAgICAgIGFycmF5UHJv
ZmlsZTogQXJyYXlQcm9maWxlLAogICAgIH0KIAotb3AgOmhhc19zdHJ1Y3R1cmVfcHJvcGVydHks
CitvcCA6aGFzX2VudW1lcmFibGVfc3RydWN0dXJlX3Byb3BlcnR5LAogICAgIGFyZ3M6IHsKICAg
ICAgICAgZHN0OiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAgICAgIGJhc2U6IFZpcnR1YWxSZWdpc3Rl
ciwKQEAgLTExNTksNyArMTE1OSw3IEBAIG9wIDppbl9zdHJ1Y3R1cmVfcHJvcGVydHksCiAgICAg
ICAgIGVudW1lcmF0b3I6IFZpcnR1YWxSZWdpc3RlciwKICAgICB9CiAKLW9wIDpoYXNfZ2VuZXJp
Y19wcm9wZXJ0eSwKK29wIDpoYXNfZW51bWVyYWJsZV9wcm9wZXJ0eSwKICAgICBhcmdzOiB7CiAg
ICAgICAgIGRzdDogVmlydHVhbFJlZ2lzdGVyLAogICAgICAgICBiYXNlOiBWaXJ0dWFsUmVnaXN0
ZXIsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29k
ZVVzZURlZi5jcHAJKHJldmlzaW9uIDI3MDI1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZVVzZURlZi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMSw4ICsyMjEs
OSBAQCB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleEltcGwoVmlyCiAgICAgVVNFUyhP
cEdldEZyb21Bcmd1bWVudHMsIGFyZ3VtZW50cykKICAgICBVU0VTKE9wTmV3QXJyYXlCdWZmZXIs
IGltbXV0YWJsZUJ1dHRlcmZseSkKIAotICAgIFVTRVMoT3BIYXNHZW5lcmljUHJvcGVydHksIGJh
c2UsIHByb3BlcnR5KQotICAgIFVTRVMoT3BIYXNJbmRleGVkUHJvcGVydHksIGJhc2UsIHByb3Bl
cnR5KQorICAgIFVTRVMoT3BIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5LCBiYXNlLCBwcm9w
ZXJ0eSkKKyAgICBVU0VTKE9wSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5LCBiYXNlLCBw
cm9wZXJ0eSwgZW51bWVyYXRvcikKKyAgICBVU0VTKE9wSGFzRW51bWVyYWJsZVByb3BlcnR5LCBi
YXNlLCBwcm9wZXJ0eSkKICAgICBVU0VTKE9wRW51bWVyYXRvclN0cnVjdHVyZVBuYW1lLCBlbnVt
ZXJhdG9yLCBpbmRleCkKICAgICBVU0VTKE9wRW51bWVyYXRvckdlbmVyaWNQbmFtZSwgZW51bWVy
YXRvciwgaW5kZXgpCiAgICAgVVNFUyhPcEdldEJ5VmFsLCBiYXNlLCBwcm9wZXJ0eSkKQEAgLTI2
MCw3ICsyNjEsNiBAQCB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleEltcGwoVmlyCiAK
ICAgICBVU0VTKE9wR2V0QnlWYWxXaXRoVGhpcywgYmFzZSwgdGhpc1ZhbHVlLCBwcm9wZXJ0eSkK
ICAgICBVU0VTKE9wSW5zdGFuY2VvZkN1c3RvbSwgdmFsdWUsIGNvbnN0cnVjdG9yLCBoYXNJbnN0
YW5jZVZhbHVlKQotICAgIFVTRVMoT3BIYXNTdHJ1Y3R1cmVQcm9wZXJ0eSwgYmFzZSwgcHJvcGVy
dHksIGVudW1lcmF0b3IpCiAgICAgVVNFUyhPcEhhc093blN0cnVjdHVyZVByb3BlcnR5LCBiYXNl
LCBwcm9wZXJ0eSwgZW51bWVyYXRvcikKICAgICBVU0VTKE9wSW5TdHJ1Y3R1cmVQcm9wZXJ0eSwg
YmFzZSwgcHJvcGVydHksIGVudW1lcmF0b3IpCiAKQEAgLTQyMCwxMSArNDIwLDExIEBAIHZvaWQg
Y29tcHV0ZURlZnNGb3JCeXRlY29kZUluZGV4SW1wbCh1bnMKICAgICBERUZTKE9wQXJndW1lbnRD
b3VudCwgZHN0KQogICAgIERFRlMoT3BUb0luZGV4U3RyaW5nLCBkc3QpCiAgICAgREVGUyhPcEdl
dEVudW1lcmFibGVMZW5ndGgsIGRzdCkKLSAgICBERUZTKE9wSGFzSW5kZXhlZFByb3BlcnR5LCBk
c3QpCi0gICAgREVGUyhPcEhhc1N0cnVjdHVyZVByb3BlcnR5LCBkc3QpCisgICAgREVGUyhPcEhh
c0VudW1lcmFibGVJbmRleGVkUHJvcGVydHksIGRzdCkKKyAgICBERUZTKE9wSGFzRW51bWVyYWJs
ZVN0cnVjdHVyZVByb3BlcnR5LCBkc3QpCisgICAgREVGUyhPcEhhc0VudW1lcmFibGVQcm9wZXJ0
eSwgZHN0KQogICAgIERFRlMoT3BIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eSwgZHN0KQogICAgIERF
RlMoT3BJblN0cnVjdHVyZVByb3BlcnR5LCBkc3QpCi0gICAgREVGUyhPcEhhc0dlbmVyaWNQcm9w
ZXJ0eSwgZHN0KQogICAgIERFRlMoT3BHZXREaXJlY3RQbmFtZSwgZHN0KQogICAgIERFRlMoT3BH
ZXRQcm9wZXJ0eUVudW1lcmF0b3IsIGRzdCkKICAgICBERUZTKE9wRW51bWVyYXRvclN0cnVjdHVy
ZVBuYW1lLCBkc3QpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcAkocmV2aXNpb24gMjcwMjU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwMyw3ICs1MDMsNyBAQCBi
b29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAgICAgICAgIE9wY29kZUlE
IG9wY29kZUlEID0gaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCk7CiAgICAgICAgIG1fYnl0ZWNvZGVD
b3N0ICs9IG9wY29kZUxlbmd0aHNbb3Bjb2RlSURdOwogICAgICAgICBzd2l0Y2ggKG9wY29kZUlE
KSB7Ci0gICAgICAgIExJTksoT3BIYXNJbmRleGVkUHJvcGVydHkpCisgICAgICAgIExJTksoT3BI
YXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5KQogCiAgICAgICAgIExJTksoT3BDYWxsVmFyYXJn
cywgcHJvZmlsZSkKICAgICAgICAgTElOSyhPcFRhaWxDYWxsVmFyYXJncywgcHJvZmlsZSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgJKHJldmlzaW9uIDI3MDI1
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMTI2LDcgKzEyNiw3IEBAIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgYml0V2lk
dGhGb3JNYXgKICAgICBtYWNybyhPcFJzaGlmdCkgXAogCiAjZGVmaW5lIEZPUl9FQUNIX09QQ09E
RV9XSVRIX0FSUkFZX1BST0ZJTEUobWFjcm8pIFwKLSAgICBtYWNybyhPcEhhc0luZGV4ZWRQcm9w
ZXJ0eSkgXAorICAgIG1hY3JvKE9wSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eSkgXAogICAg
IG1hY3JvKE9wQ2FsbFZhcmFyZ3MpIFwKICAgICBtYWNybyhPcFRhaWxDYWxsVmFyYXJncykgXAog
ICAgIG1hY3JvKE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRzKSBcCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9y
LmNwcAkocmV2aXNpb24gMjcwMjU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzNjQsMjEgKzQz
NjQsMjEgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRFbgogICAgIHJl
dHVybiBkc3Q7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SGFzR2Vu
ZXJpY1Byb3BlcnR5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJ
RCogcHJvcGVydHlOYW1lKQorUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRIYXNF
bnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFz
ZSwgUmVnaXN0ZXJJRCogcHJvcGVydHlOYW1lKQogewotICAgIE9wSGFzR2VuZXJpY1Byb3BlcnR5
OjplbWl0KHRoaXMsIGRzdCwgYmFzZSwgcHJvcGVydHlOYW1lKTsKKyAgICBPcEhhc0VudW1lcmFi
bGVJbmRleGVkUHJvcGVydHk6OmVtaXQodGhpcywgZHN0LCBiYXNlLCBwcm9wZXJ0eU5hbWUpOwog
ICAgIHJldHVybiBkc3Q7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0
SGFzSW5kZXhlZFByb3BlcnR5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVn
aXN0ZXJJRCogcHJvcGVydHlOYW1lKQorUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVt
aXRIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHkoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3Rl
cklEKiBiYXNlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUsIFJlZ2lzdGVySUQqIGVudW1lcmF0
b3IpCiB7Ci0gICAgT3BIYXNJbmRleGVkUHJvcGVydHk6OmVtaXQodGhpcywgZHN0LCBiYXNlLCBw
cm9wZXJ0eU5hbWUpOworICAgIE9wSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5OjplbWl0
KHRoaXMsIGRzdCwgYmFzZSwgcHJvcGVydHlOYW1lLCBlbnVtZXJhdG9yKTsKICAgICByZXR1cm4g
ZHN0OwogfQogCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEhhc1N0cnVjdHVy
ZVByb3BlcnR5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCog
cHJvcGVydHlOYW1lLCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yKQorUmVnaXN0ZXJJRCogQnl0ZWNv
ZGVHZW5lcmF0b3I6OmVtaXRIYXNFbnVtZXJhYmxlUHJvcGVydHkoUmVnaXN0ZXJJRCogZHN0LCBS
ZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgT3BIYXNT
dHJ1Y3R1cmVQcm9wZXJ0eTo6ZW1pdCh0aGlzLCBkc3QsIGJhc2UsIHByb3BlcnR5TmFtZSwgZW51
bWVyYXRvcik7CisgICAgT3BIYXNFbnVtZXJhYmxlUHJvcGVydHk6OmVtaXQodGhpcywgZHN0LCBi
YXNlLCBwcm9wZXJ0eU5hbWUpOwogICAgIHJldHVybiBkc3Q7CiB9CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9y
LmgJKHJldmlzaW9uIDI3MDI1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtOTAzLDEwICs5MDMsMTAg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdEVudGVyKCk7CiAgICAgICAgIHZv
aWQgZW1pdENoZWNrVHJhcHMoKTsKIAotICAgICAgICBSZWdpc3RlcklEKiBlbWl0SGFzSW5kZXhl
ZFByb3BlcnR5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCog
cHJvcGVydHlOYW1lKTsKLSAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEhhc1N0cnVjdHVyZVByb3Bl
cnR5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCogcHJvcGVy
dHlOYW1lLCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yKTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1p
dEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHkoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklE
KiBiYXNlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUpOworICAgICAgICBSZWdpc3RlcklEKiBl
bWl0SGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0
ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCogcHJvcGVydHlOYW1lLCBSZWdpc3RlcklEKiBlbnVtZXJh
dG9yKTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEhhc0VudW1lcmFibGVQcm9wZXJ0eShSZWdp
c3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFtZSk7
CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eShSZWdpc3Rl
cklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFtZSwgUmVn
aXN0ZXJJRCogZW51bWVyYXRvcik7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRIYXNHZW5lcmlj
UHJvcGVydHkoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBw
cm9wZXJ0eU5hbWUpOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0R2V0UHJvcGVydHlFbnVtZXJh
dG9yKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSk7CiAgICAgICAgIFJlZ2lzdGVy
SUQqIGVtaXRHZXRFbnVtZXJhYmxlTGVuZ3RoKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCog
YmFzZSk7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRHZXRTdHJ1Y3R1cmVQcm9wZXJ0eUVudW1l
cmF0b3IoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBsZW5n
dGgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVn
ZW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Tm9kZXNDb2RlZ2VuLmNwcAkocmV2aXNpb24gMjcwMjU5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTYy
LDcgKzM5NjIsNyBAQCB2b2lkIEZvckluTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuCiAK
ICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJlc3VsdCA9IGdlbmVyYXRvci5lbWl0RXF1YWxp
dHlPcDxPcExlc3M+KGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgaS5nZXQoKSwgbGVuZ3RoLmdl
dCgpKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZGYWxzZShyZXN1bHQuZ2V0KCksIGxv
b3BFbmQuZ2V0KCkpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdEhhc0luZGV4ZWRQcm9wZXJ0eShy
ZXN1bHQuZ2V0KCksIGJhc2UuZ2V0KCksIGkuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1p
dEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHkocmVzdWx0LmdldCgpLCBiYXNlLmdldCgpLCBp
LmdldCgpKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZGYWxzZShyZXN1bHQuZ2V0KCks
ICpzY29wZS0+Y29udGludWVUYXJnZXQoKSk7CiAKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRUb0lu
ZGV4U3RyaW5nKHByb3BlcnR5TmFtZS5nZXQoKSwgaS5nZXQoKSk7CkBAIC00MDAzLDcgKzQwMDMs
NyBAQCB2b2lkIEZvckluTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuCiAKICAgICAgICAg
UmVmUHRyPFJlZ2lzdGVySUQ+IHJlc3VsdCA9IGdlbmVyYXRvci5lbWl0SXNOdWxsKGdlbmVyYXRv
ci5uZXdUZW1wb3JhcnkoKSwgcHJvcGVydHlOYW1lLmdldCgpKTsKICAgICAgICAgZ2VuZXJhdG9y
LmVtaXRKdW1wSWZUcnVlKHJlc3VsdC5nZXQoKSwgbG9vcEVuZC5nZXQoKSk7Ci0gICAgICAgIGdl
bmVyYXRvci5lbWl0SGFzU3RydWN0dXJlUHJvcGVydHkocmVzdWx0LmdldCgpLCBiYXNlLmdldCgp
LCBwcm9wZXJ0eU5hbWUuZ2V0KCksIGVudW1lcmF0b3IuZ2V0KCkpOworICAgICAgICBnZW5lcmF0
b3IuZW1pdEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eShyZXN1bHQuZ2V0KCksIGJhc2Uu
Z2V0KCksIHByb3BlcnR5TmFtZS5nZXQoKSwgZW51bWVyYXRvci5nZXQoKSk7CiAgICAgICAgIGdl
bmVyYXRvci5lbWl0SnVtcElmRmFsc2UocmVzdWx0LmdldCgpLCAqc2NvcGUtPmNvbnRpbnVlVGFy
Z2V0KCkpOwogCiAgICAgICAgIHRoaXMtPmVtaXRMb29wSGVhZGVyKGdlbmVyYXRvciwgcHJvcGVy
dHlOYW1lLmdldCgpKTsKQEAgLTQwNDUsNyArNDA0NSw3IEBAIHZvaWQgRm9ySW5Ob2RlOjplbWl0
Qnl0ZWNvZGUoQnl0ZWNvZGVHZW4KICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJlc3VsdCA9
IGdlbmVyYXRvci5lbWl0SXNOdWxsKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgcHJvcGVydHlO
YW1lLmdldCgpKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZUcnVlKHJlc3VsdC5nZXQo
KSwgbG9vcEVuZC5nZXQoKSk7CiAKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRIYXNHZW5lcmljUHJv
cGVydHkocmVzdWx0LmdldCgpLCBiYXNlLmdldCgpLCBwcm9wZXJ0eU5hbWUuZ2V0KCkpOworICAg
ICAgICBnZW5lcmF0b3IuZW1pdEhhc0VudW1lcmFibGVQcm9wZXJ0eShyZXN1bHQuZ2V0KCksIGJh
c2UuZ2V0KCksIHByb3BlcnR5TmFtZS5nZXQoKSk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0SnVt
cElmRmFsc2UocmVzdWx0LmdldCgpLCAqc2NvcGUtPmNvbnRpbnVlVGFyZ2V0KCkpOwogCiAgICAg
ICAgIHRoaXMtPmVtaXRMb29wSGVhZGVyKGdlbmVyYXRvciwgcHJvcGVydHlOYW1lLmdldCgpKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDI3MDI1OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtNDE1NSwxOSArNDE1NSwyMCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJz
dHJhY3RTdGF0ZVR5CiAgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjSW50
MzJPbmx5KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhc2UgSGFzR2VuZXJpY1Byb3Bl
cnR5OiB7CisgICAgY2FzZSBIYXNFbnVtZXJhYmxlUHJvcGVydHk6IHsKICAgICAgICAgc2V0Tm9u
Q2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNCb29sZWFuKTsKICAgICAgICAgY2xvYmJlcldvcmxk
KCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEluU3RydWN0dXJlUHJvcGVydHk6
CiAgICAgY2FzZSBIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eToKLSAgICBjYXNlIEhhc1N0cnVjdHVy
ZVByb3BlcnR5OiB7CisgICAgY2FzZSBIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHk6IHsK
ICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNCb29sZWFuKTsKICAgICAg
ICAgY2xvYmJlcldvcmxkKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBjYXNlIEhhc0lu
ZGV4ZWRQcm9wZXJ0eTogeworICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OgorICAgIGNhc2Ug
SGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eTogewogICAgICAgICBBcnJheU1vZGUgbW9kZSA9
IG5vZGUtPmFycmF5TW9kZSgpOwogICAgICAgICBzd2l0Y2ggKG1vZGUudHlwZSgpKSB7CiAgICAg
ICAgIGNhc2UgQXJyYXk6OkludDMyOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDI3MDI1OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04MTM5LDE5ICs4MTM5LDE5IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5z
aWduZWQKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2dldF9lbnVtZXJhYmxlX2xlbmd0aCk7
CiAgICAgICAgIH0KIAotICAgICAgICBjYXNlIG9wX2hhc19nZW5lcmljX3Byb3BlcnR5OiB7Ci0g
ICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0dl
bmVyaWNQcm9wZXJ0eT4oKTsKLSAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9H
cmFwaChIYXNHZW5lcmljUHJvcGVydHksIGdldChieXRlY29kZS5tX2Jhc2UpLCBnZXQoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpKTsKLSAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2hhc19nZW5lcmlj
X3Byb3BlcnR5KTsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2Ugb3BfaGFzX3N0cnVjdHVyZV9w
cm9wZXJ0eTogewotICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BIYXNTdHJ1Y3R1cmVQcm9wZXJ0eT4oKTsKLSAgICAgICAgICAgIHNldChieXRlY29k
ZS5tX2RzdCwgYWRkVG9HcmFwaChIYXNTdHJ1Y3R1cmVQcm9wZXJ0eSwKKyAgICAgICAgY2FzZSBv
cF9oYXNfZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHk6IHsKKyAgICAgICAgICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzRW51bWVyYWJsZVN0cnVjdHVy
ZVByb3BlcnR5PigpOworICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBo
KEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eSwKICAgICAgICAgICAgICAgICBnZXQoYnl0
ZWNvZGUubV9iYXNlKSwKICAgICAgICAgICAgICAgICBnZXQoYnl0ZWNvZGUubV9wcm9wZXJ0eSks
CiAgICAgICAgICAgICAgICAgZ2V0KGJ5dGVjb2RlLm1fZW51bWVyYXRvcikpKTsKLSAgICAgICAg
ICAgIE5FWFRfT1BDT0RFKG9wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkpOworICAgICAgICAgICAg
TkVYVF9PUENPREUob3BfaGFzX2VudW1lcmFibGVfc3RydWN0dXJlX3Byb3BlcnR5KTsKKyAgICAg
ICAgfQorCisgICAgICAgIGNhc2Ugb3BfaGFzX2VudW1lcmFibGVfcHJvcGVydHk6IHsKKyAgICAg
ICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzRW51bWVy
YWJsZVByb3BlcnR5PigpOworICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dy
YXBoKEhhc0VudW1lcmFibGVQcm9wZXJ0eSwgZ2V0KGJ5dGVjb2RlLm1fYmFzZSksIGdldChieXRl
Y29kZS5tX3Byb3BlcnR5KSkpOworICAgICAgICAgICAgTkVYVF9PUENPREUob3BfaGFzX2VudW1l
cmFibGVfcHJvcGVydHkpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9oYXNfb3duX3N0
cnVjdHVyZV9wcm9wZXJ0eTogewpAQCAtODE3MiwxOCArODE3MiwxOCBAQCB2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9p
bl9zdHJ1Y3R1cmVfcHJvcGVydHkpOwogICAgICAgICB9CiAKLSAgICAgICAgY2FzZSBvcF9oYXNf
aW5kZXhlZF9wcm9wZXJ0eTogewotICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BIYXNJbmRleGVkUHJvcGVydHk+KCk7CisgICAgICAgIGNhc2Ugb3Bf
aGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0eTogeworICAgICAgICAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3Bl
cnR5PigpOwogICAgICAgICAgICAgTm9kZSogYmFzZSA9IGdldChieXRlY29kZS5tX2Jhc2UpOwog
ICAgICAgICAgICAgQXJyYXlNb2RlIGFycmF5TW9kZSA9IGdldEFycmF5TW9kZShieXRlY29kZS5t
ZXRhZGF0YShjb2RlQmxvY2spLm1fYXJyYXlQcm9maWxlLCBBcnJheTo6UmVhZCk7CiAgICAgICAg
ICAgICBOb2RlKiBwcm9wZXJ0eSA9IGdldChieXRlY29kZS5tX3Byb3BlcnR5KTsKICAgICAgICAg
ICAgIGFkZFZhckFyZ0NoaWxkKGJhc2UpOwogICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQocHJv
cGVydHkpOwogICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQobnVsbHB0cik7Ci0gICAgICAgICAg
ICBOb2RlKiBoYXNJdGVyYWJsZVByb3BlcnR5ID0gYWRkVG9HcmFwaChOb2RlOjpWYXJBcmcsIEhh
c0luZGV4ZWRQcm9wZXJ0eSwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSksIE9wSW5mbyhzdGF0
aWNfY2FzdDx1aW50MzJfdD4oUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OkdldE93
blByb3BlcnR5KSkpOworICAgICAgICAgICAgTm9kZSogaGFzSXRlcmFibGVQcm9wZXJ0eSA9IGFk
ZFRvR3JhcGgoTm9kZTo6VmFyQXJnLCBIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5LCBPcElu
Zm8oYXJyYXlNb2RlLmFzV29yZCgpKSk7CiAgICAgICAgICAgICBtX2V4aXRPSyA9IGZhbHNlOyAv
LyBIYXNJbmRleGVkUHJvcGVydHkgbXVzdCBiZSB0cmVhdGVkIGFzIGlmIGl0IGNsb2JiZXJzIGV4
aXQgc3RhdGUsIHNpbmNlIEZpeHVwUGhhc2UgbWF5IG1ha2UgaXQgZ2VuZXJpYy4KICAgICAgICAg
ICAgIHNldChieXRlY29kZS5tX2RzdCwgaGFzSXRlcmFibGVQcm9wZXJ0eSk7Ci0gICAgICAgICAg
ICBORVhUX09QQ09ERShvcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eSk7CisgICAgICAgICAgICBORVhU
X09QQ09ERShvcF9oYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5KTsKICAgICAgICAgfQog
CiAgICAgICAgIGNhc2Ugb3BfZ2V0X2RpcmVjdF9wbmFtZTogewpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMjcwMjU5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNTMsMTEgKzI1MywxMSBAQCBDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxl
dmVsKE9wY29kZUlECiAgICAgY2FzZSBvcF9nZXRfc2NvcGU6CiAgICAgY2FzZSBvcF9nZXRfZnJv
bV9zY29wZToKICAgICBjYXNlIG9wX2dldF9lbnVtZXJhYmxlX2xlbmd0aDoKLSAgICBjYXNlIG9w
X2hhc19nZW5lcmljX3Byb3BlcnR5OgotICAgIGNhc2Ugb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0
eToKKyAgICBjYXNlIG9wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHk6CisgICAgY2Fz
ZSBvcF9oYXNfZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHk6CisgICAgY2FzZSBvcF9oYXNf
ZW51bWVyYWJsZV9wcm9wZXJ0eToKICAgICBjYXNlIG9wX2hhc19vd25fc3RydWN0dXJlX3Byb3Bl
cnR5OgogICAgIGNhc2Ugb3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5OgotICAgIGNhc2Ugb3BfaGFz
X2luZGV4ZWRfcHJvcGVydHk6CiAgICAgY2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1lOgogICAgIGNh
c2Ugb3BfZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3I6CiAgICAgY2FzZSBvcF9lbnVtZXJhdG9yX3N0
cnVjdHVyZV9wbmFtZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJl
cml6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJl
cml6ZS5oCShyZXZpc2lvbiAyNzAyNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Nsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtMTY0LDYgKzE2NCw3IEBAIHZvaWQgY2xv
YmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgY2FzZSBBcnJheVBvcDoK
ICAgICAgICAgY2FzZSBBcnJheUluZGV4T2Y6CiAgICAgICAgIGNhc2UgSGFzSW5kZXhlZFByb3Bl
cnR5OgorICAgICAgICBjYXNlIEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHk6CiAgICAgICAg
IGNhc2UgQXRvbWljc0FkZDoKICAgICAgICAgY2FzZSBBdG9taWNzQW5kOgogICAgICAgICBjYXNl
IEF0b21pY3NDb21wYXJlRXhjaGFuZ2U6CkBAIC0zNDgsNyArMzQ5LDggQEAgdm9pZCBjbG9iYmVy
aXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6IHsKKyAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0
eToKKyAgICBjYXNlIEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHk6IHsKICAgICAgICAgcmVh
ZChKU09iamVjdF9idXR0ZXJmbHkpOwogICAgICAgICBBcnJheU1vZGUgbW9kZSA9IG5vZGUtPmFy
cmF5TW9kZSgpOwogICAgICAgICBzd2l0Y2ggKG1vZGUudHlwZSgpKSB7CkBAIC03MDUsOCArNzA3
LDggQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgIGNhc2Ug
UmVzb2x2ZVNjb3BlRm9ySG9pc3RpbmdGdW5jRGVjbEluRXZhbDoKICAgICBjYXNlIFJlc29sdmVT
Y29wZToKICAgICBjYXNlIFRvT2JqZWN0OgotICAgIGNhc2UgSGFzR2VuZXJpY1Byb3BlcnR5Ogot
ICAgIGNhc2UgSGFzU3RydWN0dXJlUHJvcGVydHk6CisgICAgY2FzZSBIYXNFbnVtZXJhYmxlU3Ry
dWN0dXJlUHJvcGVydHk6CisgICAgY2FzZSBIYXNFbnVtZXJhYmxlUHJvcGVydHk6CiAgICAgY2Fz
ZSBIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eToKICAgICBjYXNlIEluU3RydWN0dXJlUHJvcGVydHk6
CiAgICAgY2FzZSBHZXRQcm9wZXJ0eUVudW1lcmF0b3I6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEb2VzR0MuY3BwCShyZXZpc2lvbiAyNzAyNTkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5NSwxMCArMjk1
LDExIEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIEdl
dERpcmVjdFBuYW1lOgogICAgIGNhc2UgR2V0RHluYW1pY1ZhcjoKICAgICBjYXNlIEdldE1hcEJ1
Y2tldDoKLSAgICBjYXNlIEhhc0dlbmVyaWNQcm9wZXJ0eToKICAgICBjYXNlIEhhc0luZGV4ZWRQ
cm9wZXJ0eToKKyAgICBjYXNlIEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHk6CisgICAgY2Fz
ZSBIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHk6CisgICAgY2FzZSBIYXNFbnVtZXJhYmxl
UHJvcGVydHk6CiAgICAgY2FzZSBIYXNPd25Qcm9wZXJ0eToKLSAgICBjYXNlIEhhc1N0cnVjdHVy
ZVByb3BlcnR5OgogICAgIGNhc2UgSGFzT3duU3RydWN0dXJlUHJvcGVydHk6CiAgICAgY2FzZSBJ
blN0cnVjdHVyZVByb3BlcnR5OgogICAgIGNhc2UgSW5CeUlkOgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAyNzAyNTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMjA0LDExICsyMjA0LDExIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBmaXhFZGdlPENl
bGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0g
ICAgICAgIGNhc2UgSGFzR2VuZXJpY1Byb3BlcnR5OiB7CisgICAgICAgIGNhc2UgSGFzRW51bWVy
YWJsZVByb3BlcnR5OiB7CiAgICAgICAgICAgICBmaXhFZGdlPENlbGxVc2U+KG5vZGUtPmNoaWxk
MigpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgSGFzU3Ry
dWN0dXJlUHJvcGVydHk6IHsKKyAgICAgICAgY2FzZSBIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJv
cGVydHk6IHsKICAgICAgICAgICAgIGZpeEVkZ2U8U3RyaW5nVXNlPihub2RlLT5jaGlsZDIoKSk7
CiAgICAgICAgICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4obm9kZS0+Y2hpbGQzKCkpOwogICAg
ICAgICAgICAgYnJlYWs7CkBAIC0yMjIwLDcgKzIyMjAsOCBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgZml4RWRnZTxLbm93bkNlbGxVc2U+KG5vZGUtPmNoaWxkMygpKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OiB7CisgICAg
ICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OgorICAgICAgICBjYXNlIEhhc0VudW1lcmFibGVJ
bmRleGVkUHJvcGVydHk6IHsKICAgICAgICAgICAgIG5vZGUtPnNldEFycmF5TW9kZSgKICAgICAg
ICAgICAgICAgICBub2RlLT5hcnJheU1vZGUoKS5yZWZpbmUoCiAgICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGgsIG5vZGUsCkBAIC0zOTg4LDcgKzM5ODksNiBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCktPnByZWRpY3Rpb24oKSwKICAgICAg
ICAgICAgICAgICBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpLT5wcmVkaWN0aW9uKCksCiAg
ICAgICAgICAgICAgICAgU3BlY05vbmUpKTsKLSAgICAgICAgbm9kZS0+c2V0SW50ZXJuYWxNZXRo
b2RUeXBlKFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpIYXNQcm9wZXJ0eSk7CiAK
ICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDAp
LCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDIpKTsKICAgICAgICAgYXV0byBhcnJheU1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAyNzAyNTkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjIxNCw2
ICsyMjE0LDcgQEAgcHVibGljOgogICAgICAgICBjYXNlIEFycmF5UG9wOgogICAgICAgICBjYXNl
IEFycmF5SW5kZXhPZjoKICAgICAgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6CisgICAgICAg
IGNhc2UgSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eToKICAgICAgICAgY2FzZSBBdG9taWNz
QWRkOgogICAgICAgICBjYXNlIEF0b21pY3NBbmQ6CiAgICAgICAgIGNhc2UgQXRvbWljc0NvbXBh
cmVFeGNoYW5nZToKQEAgLTMwMDMsMjMgKzMwMDQsNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgIH0KIAotICAgIGJvb2wgaGFzSW50ZXJuYWxNZXRob2RUeXBlKCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBvcCgpID09IEhhc0luZGV4ZWRQcm9wZXJ0eTsKLSAg
ICB9Ci0KLSAgICBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZSBpbnRlcm5hbE1ldGhv
ZFR5cGUoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGhhc0ludGVybmFsTWV0aG9kVHlw
ZSgpKTsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6SW50ZXJuYWxN
ZXRob2RUeXBlPihtX29wSW5mbzIuYXM8dWludDMyX3Q+KCkpOwotICAgIH0KLQotICAgIHZvaWQg
c2V0SW50ZXJuYWxNZXRob2RUeXBlKFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlIHR5
cGUpCi0gICAgewotICAgICAgICBBU1NFUlQoaGFzSW50ZXJuYWxNZXRob2RUeXBlKCkpOwotICAg
ICAgICBtX29wSW5mbzIgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4odHlwZSk7Ci0gICAgfQotCiAg
ICAgTm9kZSogcmVwbGFjZW1lbnQoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIG1fbWlz
Yy5yZXBsYWNlbWVudDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5
cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBl
LmgJKHJldmlzaW9uIDI3MDI1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDk4LDEwICs0OTgsMTEgQEAgbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKEdldEVudW1lcmFibGVMZW5ndGgsIE5vZGVN
dXN0R2VuZXJhdGUgfCBOb2RlUmVzdWx0SlMpIFwKICAgICAvKiBNdXN0IGdlbmVyYXRlIGJlY2F1
c2Ugb2YgUHJveGllcyBvbiB0aGUgcHJvdG90eXBlIGNoYWluICovIFwKICAgICBtYWNybyhIYXNJ
bmRleGVkUHJvcGVydHksIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlUmVzdWx0Qm9vbGVhbiB8IE5v
ZGVIYXNWYXJBcmdzKSBcCi0gICAgbWFjcm8oSGFzU3RydWN0dXJlUHJvcGVydHksIE5vZGVSZXN1
bHRCb29sZWFuKSBcCisgICAgbWFjcm8oSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eSwgTm9k
ZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRCb29sZWFuIHwgTm9kZUhhc1ZhckFyZ3MpIFwKKyAg
ICBtYWNybyhIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHksIE5vZGVSZXN1bHRCb29sZWFu
KSBcCisgICAgbWFjcm8oSGFzRW51bWVyYWJsZVByb3BlcnR5LCBOb2RlUmVzdWx0Qm9vbGVhbikg
XAogICAgIG1hY3JvKEhhc093blN0cnVjdHVyZVByb3BlcnR5LCBOb2RlUmVzdWx0Qm9vbGVhbiB8
IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhJblN0cnVjdHVyZVByb3BlcnR5LCBOb2Rl
TXVzdEdlbmVyYXRlIHwgTm9kZVJlc3VsdEJvb2xlYW4pIFwKLSAgICBtYWNybyhIYXNHZW5lcmlj
UHJvcGVydHksIE5vZGVSZXN1bHRCb29sZWFuKSBcCiAgICAgbWFjcm8oR2V0RGlyZWN0UG5hbWUs
IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncyB8IE5vZGVSZXN1bHRKUykgXAogICAg
IG1hY3JvKEdldFByb3BlcnR5RW51bWVyYXRvciwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1
bHRKUykgXAogICAgIG1hY3JvKEdldEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZSwgTm9kZU11c3RH
ZW5lcmF0ZSB8IE5vZGVSZXN1bHRKUykgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyNzAyNTkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjU4LDcg
KzIyNTgsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRW5zdXJlCiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkhh
c0dlbmVyaWNQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBKU0NlbGwqIHByb3BlcnR5
KSkKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25IYXNFbnVtZXJhYmxlUHJvcGVy
dHksIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgSlNDZWxsKiBwcm9wZXJ0eSkpCiB7CiAgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVD
TEFSRV9DQUxMX0ZSQU1FKHZtKTsKQEAgLTIyNzUsNyArMjI3NSw3IEBAIEpTQ19ERUZJTkVfSklU
X09QRVJBVElPTihvcGVyYXRpb25IYXNHZW4KICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShKU1ZhbHVlKCkpOwogICAgIGF1dG8gcHJvcGVydHlOYW1lID0gYXNTdHJpbmcocHJvcGVydHkp
LT50b0lkZW50aWZpZXIoZ2xvYmFsT2JqZWN0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB7IH0pOwotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2Rl
KGpzQm9vbGVhbihiYXNlLT5oYXNQcm9wZXJ0eUdlbmVyaWMoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0
eU5hbWUsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpHZXRPd25Qcm9wZXJ0eSkp
KSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoanNCb29s
ZWFuKGJhc2UtPmhhc0VudW1lcmFibGVQcm9wZXJ0eShnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFt
ZSkpKSk7CiB9CiAKIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25JblN0cnVjdHVy
ZVByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTQ2VsbCogYmFzZSwgSlNTdHJpbmcqIHByb3BlcnR5KSkKQEAgLTIzMDAsNyArMjMwMCw3IEBA
IEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25IYXNPd24KICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihvYmplY3RQcm90b3R5cGVIYXNPd25Qcm9wZXJ0eShnbG9i
YWxPYmplY3QsIGJhc2UsIHByb3BlcnR5TmFtZSkpKTsKIH0KIAotSlNDX0RFRklORV9KSVRfT1BF
UkFUSU9OKG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eUJ5SW50LCBzaXplX3QsIChKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0NlbGwqIGJhc2VDZWxsLCBpbnQzMl90IHN1YnNjcmlw
dCwgaW50MzJfdCBpbnRlcm5hbE1ldGhvZFR5cGUpKQorSlNDX0RFRklORV9KSVRfT1BFUkFUSU9O
KG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eSwgc2l6ZV90LCAoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNDZWxsKiBiYXNlQ2VsbCwgaW50MzJfdCBzdWJzY3JpcHQpKQogewogICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9
IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CkBAIC0yMzA4LDkgKzIzMDgsMjIgQEAgSlNDX0RFRklO
RV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkhhc0luZAogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBi
YXNlQ2VsbC0+dG9PYmplY3QoZ2xvYmFsT2JqZWN0KTsKICAgICBpZiAoVU5MSUtFTFkoc3Vic2Ny
aXB0IDwgMCkpIHsKICAgICAgICAgLy8gR28gdGhlIHNsb3dlc3Qgd2F5IHBvc3NpYmxlIGJlY2F1
c2UgbmVnYXRpdmUgaW5kaWNlcyBkb24ndCB1c2UgaW5kZXhlZCBzdG9yYWdlLgotICAgICAgICBy
ZXR1cm4gb2JqZWN0LT5oYXNQcm9wZXJ0eUdlbmVyaWMoZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVy
Ojpmcm9tKHZtLCBzdWJzY3JpcHQpLCBzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkludGVybmFs
TWV0aG9kVHlwZT4oaW50ZXJuYWxNZXRob2RUeXBlKSk7CisgICAgICAgIHJldHVybiBvYmplY3Qt
Pmhhc1Byb3BlcnR5KGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbSh2bSwgc3Vic2NyaXB0
KSk7CiAgICAgfQotICAgIHJldHVybiBvYmplY3QtPmhhc1Byb3BlcnR5R2VuZXJpYyhnbG9iYWxP
YmplY3QsIHN1YnNjcmlwdCwgc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhv
ZFR5cGU+KGludGVybmFsTWV0aG9kVHlwZSkpOworICAgIHJldHVybiBvYmplY3QtPmhhc1Byb3Bl
cnR5KGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN1YnNjcmlwdCkpOworfQor
CitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uSGFzRW51bWVyYWJsZUluZGV4ZWRQ
cm9wZXJ0eSwgc2l6ZV90LCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDZWxsKiBi
YXNlQ2VsbCwgaW50MzJfdCBzdWJzY3JpcHQpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2
bSk7CisgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBj
YWxsRnJhbWUpOworICAgIEpTT2JqZWN0KiBvYmplY3QgPSBiYXNlQ2VsbC0+dG9PYmplY3QoZ2xv
YmFsT2JqZWN0KTsKKyAgICBpZiAoVU5MSUtFTFkoc3Vic2NyaXB0IDwgMCkpIHsKKyAgICAgICAg
Ly8gR28gdGhlIHNsb3dlc3Qgd2F5IHBvc3NpYmxlIGJlY2F1c2UgbmVnYXRpdmUgaW5kaWNlcyBk
b24ndCB1c2UgaW5kZXhlZCBzdG9yYWdlLgorICAgICAgICByZXR1cm4gb2JqZWN0LT5oYXNFbnVt
ZXJhYmxlUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tKHZtLCBzdWJzY3Jp
cHQpKTsKKyAgICB9CisgICAgcmV0dXJuIG9iamVjdC0+aGFzRW51bWVyYWJsZVByb3BlcnR5KGds
b2JhbE9iamVjdCwgc3Vic2NyaXB0KTsKIH0KIAogSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9w
ZXJhdGlvbkdldFByb3BlcnR5RW51bWVyYXRvciwgSlNDZWxsKiwgKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlKSkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAyNzAyNTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpA
QCAtOTksMTAgKzk5LDExIEBAIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uQ2Fs
bE4KIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uR2V0QnlWYWxXaXRoVGhpcywg
RW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3Bl
cmF0aW9uR2V0UHJvdG90eXBlT2YsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqLCBF
bmNvZGVkSlNWYWx1ZSkpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25HZXRQ
cm90b3R5cGVPZk9iamVjdCwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVjdCosIEpTT2Jq
ZWN0KikpOwotSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25IYXNHZW5lcmljUHJv
cGVydHksIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwg
SlNDZWxsKikpOworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25IYXNJbmRleGVk
UHJvcGVydHksIHNpemVfdCwgKEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxsKiwgaW50MzJfdCkpOwor
SlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25IYXNFbnVtZXJhYmxlSW5kZXhlZFBy
b3BlcnR5LCBzaXplX3QsIChKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCosIGludDMyX3QpKTsKK0pT
Q19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uSGFzRW51bWVyYWJsZVByb3BlcnR5LCBF
bmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEpTQ2VsbCop
KTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uSGFzT3duU3RydWN0dXJlUHJv
cGVydHksIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqLCBKU0NlbGwqLCBKU1N0cmlu
ZyopKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uSW5TdHJ1Y3R1cmVQcm9w
ZXJ0eSwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCosIEpTU3RyaW5n
KikpOwotSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVy
dHlCeUludCwgc2l6ZV90LCAoSlNHbG9iYWxPYmplY3QqLCBKU0NlbGwqLCBpbnQzMl90LCBpbnQz
Ml90KSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkdldFByb3BlcnR5RW51
bWVyYXRvciwgSlNDZWxsKiwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUpKTsKIEpT
Q19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uR2V0UHJvcGVydHlFbnVtZXJhdG9yQ2Vs
bCwgSlNDZWxsKiwgKEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxsKikpOwogSlNDX0RFQ0xBUkVfSklU
X09QRVJBVElPTihvcGVyYXRpb25Ub0luZGV4U3RyaW5nLCBKU0NlbGwqLCAoSlNHbG9iYWxPYmpl
Y3QqLCBpbnQzMl90KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRp
Y3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMjcw
MjU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRp
b25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMTIsMTEgKzEyMTIsMTIgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIHNldFByZWRpY3Rpb24oU3BlY0ludDMyT25seSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQotICAgICAgICBjYXNlIEhhc0dlbmVyaWNQcm9wZXJ0eToKLSAg
ICAgICAgY2FzZSBIYXNTdHJ1Y3R1cmVQcm9wZXJ0eToKICAgICAgICAgY2FzZSBIYXNPd25TdHJ1
Y3R1cmVQcm9wZXJ0eToKICAgICAgICAgY2FzZSBJblN0cnVjdHVyZVByb3BlcnR5OgotICAgICAg
ICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eTogeworICAgICAgICBjYXNlIEhhc0luZGV4ZWRQcm9w
ZXJ0eToKKyAgICAgICAgY2FzZSBIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5OgorICAgICAg
ICBjYXNlIEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eToKKyAgICAgICAgY2FzZSBIYXNF
bnVtZXJhYmxlUHJvcGVydHk6IHsKICAgICAgICAgICAgIHNldFByZWRpY3Rpb24oU3BlY0Jvb2xl
YW4pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU1NBTG93ZXJpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FMb3dlcmluZ1BoYXNlLmNwcAkocmV2aXNpb24gMjcw
MjU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FMb3dlcmluZ1BoYXNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODIsNiArODIsNyBAQCBwcml2YXRlOgogICAgICAgICB9CiAK
ICAgICAgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6CisgICAgICAgIGNhc2UgSGFzRW51bWVy
YWJsZUluZGV4ZWRQcm9wZXJ0eToKICAgICAgICAgICAgIGxvd2VyQm91bmRzQ2hlY2sobV9ncmFw
aC5jaGlsZChtX25vZGUsIDApLCBtX2dyYXBoLmNoaWxkKG1fbm9kZSwgMSksIG1fZ3JhcGguY2hp
bGQobV9ub2RlLCAyKSk7CiAgICAgICAgICAgICBicmVhazsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHJldmlzaW9uIDI3MDI1OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yOTIsNiArMjkyLDcgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVU
eXBlJiBzdAogICAgIGNhc2UgQm9vbGVhblRvTnVtYmVyOgogICAgIGNhc2UgRmlhdEludDUyOgog
ICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OgorICAgIGNhc2UgSGFzRW51bWVyYWJsZUluZGV4
ZWRQcm9wZXJ0eToKICAgICBjYXNlIEdldEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZToKICAgICBj
YXNlIEdldEVudW1lcmF0b3JHZW5lcmljUG5hbWU6CiAgICAgY2FzZSBUb0luZGV4U3RyaW5nOgpA
QCAtNjI4LDggKzYyOSw4IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYg
c3QKICAgICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6CiAgICAgY2FzZSBNdWx0aURlbGV0ZUJ5T2Zm
c2V0OgogICAgIGNhc2UgR2V0RW51bWVyYWJsZUxlbmd0aDoKLSAgICBjYXNlIEhhc0dlbmVyaWNQ
cm9wZXJ0eToKLSAgICBjYXNlIEhhc1N0cnVjdHVyZVByb3BlcnR5OgorICAgIGNhc2UgSGFzRW51
bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5OgorICAgIGNhc2UgSGFzRW51bWVyYWJsZVByb3BlcnR5
OgogICAgIGNhc2UgSGFzT3duU3RydWN0dXJlUHJvcGVydHk6CiAgICAgY2FzZSBJblN0cnVjdHVy
ZVByb3BlcnR5OgogICAgIGNhc2UgR2V0RGlyZWN0UG5hbWU6CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlz
aW9uIDI3MDI1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwNzMsMTIgKzQwNzMsMTIgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBjb21waWxlR2V0RW51
bWVyYWJsZUxlbmd0aChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhc2UgSGFz
R2VuZXJpY1Byb3BlcnR5OiB7Ci0gICAgICAgIGNvbXBpbGVIYXNHZW5lcmljUHJvcGVydHkobm9k
ZSk7CisgICAgY2FzZSBIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHk6IHsKKyAgICAgICAg
Y29tcGlsZUhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eShub2RlKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQotICAgIGNhc2UgSGFzU3RydWN0dXJlUHJvcGVydHk6IHsKLSAgICAgICAgY29t
cGlsZUhhc1N0cnVjdHVyZVByb3BlcnR5KG5vZGUpOworICAgIGNhc2UgSGFzRW51bWVyYWJsZVBy
b3BlcnR5OiB7CisgICAgICAgIGNvbXBpbGVIYXNFbnVtZXJhYmxlUHJvcGVydHkobm9kZSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEhhc093blN0cnVjdHVyZVByb3BlcnR5OiB7
CkBAIC00MDkwLDcgKzQwOTAsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
KiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVy
dHk6IHsKLSAgICAgICAgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShub2RlKTsKKyAgICAgICAg
Y29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShub2RlLCBvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVy
dHkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBIYXNFbnVtZXJhYmxlSW5kZXhl
ZFByb3BlcnR5OiB7CisgICAgICAgIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkobm9kZSwgb3Bl
cmF0aW9uSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eSk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KICAgICBjYXNlIEdldERpcmVjdFBuYW1lOiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDI3MDI1OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUxMjAsMTIgKzUxMjAsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBjb21waWxlR2V0RW51bWVyYWJsZUxlbmd0aChu
b2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhc2UgSGFzR2VuZXJpY1Byb3BlcnR5
OiB7Ci0gICAgICAgIGNvbXBpbGVIYXNHZW5lcmljUHJvcGVydHkobm9kZSk7CisgICAgY2FzZSBI
YXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHk6IHsKKyAgICAgICAgY29tcGlsZUhhc0VudW1l
cmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eShub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAg
IGNhc2UgSGFzU3RydWN0dXJlUHJvcGVydHk6IHsKLSAgICAgICAgY29tcGlsZUhhc1N0cnVjdHVy
ZVByb3BlcnR5KG5vZGUpOworICAgIGNhc2UgSGFzRW51bWVyYWJsZVByb3BlcnR5OiB7CisgICAg
ICAgIGNvbXBpbGVIYXNFbnVtZXJhYmxlUHJvcGVydHkobm9kZSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KICAgICBjYXNlIEhhc093blN0cnVjdHVyZVByb3BlcnR5OiB7CkBAIC01MTM3LDcgKzUx
MzcsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAg
ICBicmVhazsKICAgICB9CiAgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6IHsKLSAgICAgICAg
Y29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShub2RlKTsKKyAgICAgICAgY29tcGlsZUhhc0luZGV4
ZWRQcm9wZXJ0eShub2RlLCBvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHkpOworICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgY2FzZSBIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5OiB7Cisg
ICAgICAgIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkobm9kZSwgb3BlcmF0aW9uSGFzRW51bWVy
YWJsZUluZGV4ZWRQcm9wZXJ0eSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEdl
dERpcmVjdFBuYW1lOiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMjcwMjU5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyODMw
LDcgKzEyODMwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEVudW1lcmFibAog
ICAgIHN0cmljdEludDMyUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiB9CiAKLXZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVIYXNHZW5lcmljUHJvcGVydHkoTm9kZSogbm9kZSkKK3ZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVIYXNFbnVtZXJhYmxlUHJvcGVydHkoTm9kZSogbm9kZSkKIHsK
ICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CkBAIC0xMjg0
MSw3ICsxMjg0MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVIYXNHZW5lcmljUHIK
ICAgICBmbHVzaFJlZ2lzdGVycygpOwogICAgIEpTVmFsdWVSZWdzRmx1c2hlZENhbGxSZXN1bHQg
cmVzdWx0KHRoaXMpOwogICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygp
OwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSGFzR2VuZXJpY1Byb3BlcnR5LCByZXN1bHRS
ZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9i
amVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZVJlZ3MsIHByb3BlcnR5R1BSKTsK
KyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhhc0VudW1lcmFibGVQcm9wZXJ0eSwgcmVzdWx0
UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxP
YmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VSZWdzLCBwcm9wZXJ0eUdQUik7
CiAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKICAgICBibGVzc2VkQm9vbGVhblJlc3VsdChy
ZXN1bHRSZWdzLnBheWxvYWRHUFIoKSwgbm9kZSk7CiB9CkBAIC0xMjk4MSw3ICsxMjk4MSw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNYXRjaFN0cnVjdHUKICAgICBibGVzc2VkQm9v
bGVhblJlc3VsdCh0ZW1wR1BSLCBub2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUhhc1N0cnVjdHVyZVByb3BlcnR5KE5vZGUqIG5vZGUpCit2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5KE5vZGUqIG5vZGUpCiB7CiAg
ICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgU3BlY3Vs
YXRlQ2VsbE9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwpAQCAtMTMwMDMs
NyArMTMwMDMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSGFzU3RydWN0dXJlCiAK
ICAgICBtb3ZlVHJ1ZVRvKHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKIAotICAgIGFkZFNsb3dQ
YXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbCh3cm9uZ1N0cnVjdHVyZSwgdGhpcywgb3BlcmF0aW9u
SGFzR2VuZXJpY1Byb3BlcnR5LCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRl
cihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMp
KSwgYmFzZVJlZ3MsIHByb3BlcnR5R1BSKSk7CisgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xv
d1BhdGhDYWxsKHdyb25nU3RydWN0dXJlLCB0aGlzLCBvcGVyYXRpb25IYXNFbnVtZXJhYmxlUHJv
cGVydHksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1f
Z3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlUmVncywg
cHJvcGVydHlHUFIpKTsKICAgICBibGVzc2VkQm9vbGVhblJlc3VsdChyZXN1bHRSZWdzLnBheWxv
YWRHUFIoKSwgbm9kZSk7CiB9CiAKQEAgLTE0MjU5LDcgKzE0MjU5LDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUFsbG9jYXRlTmV3QQogICAgICAgICBzaXplR1BSLCBzdG9yYWdlR1BS
KSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHko
Tm9kZSogbm9kZSkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVIYXNJbmRleGVkUHJvcGVy
dHkoTm9kZSogbm9kZSwgU19KSVRPcGVyYXRpb25fR0NaIHNsb3dQYXRoT3BlcmF0aW9uKQogewog
ICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChu
b2RlLCAwKSk7CiAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIGluZGV4KHRoaXMsIG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwpAQCAtMTQzNzUsNyArMTQzNzUsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlSGFzSW5kZXhlZFByCiAgICAgfQogICAgIH0KIAotICAg
IGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93Q2FzZXMsIHRoaXMsIG9wZXJh
dGlvbkhhc0luZGV4ZWRQcm9wZXJ0eUJ5SW50LCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6Ondl
YWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYykpLCBiYXNlR1BSLCBpbmRleEdQUiwgc3RhdGljX2Nhc3Q8aW50MzJfdD4obm9kZS0+
aW50ZXJuYWxNZXRob2RUeXBlKCkpKSk7CisgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1Bh
dGhDYWxsKHNsb3dDYXNlcywgdGhpcywgc2xvd1BhdGhPcGVyYXRpb24sIHJlc3VsdEdQUiwgVHJ1
c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Io
bm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VHUFIsIGluZGV4R1BSKSk7CiAKICAgICB1bmJs
ZXNzZWRCb29sZWFuUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAyNzAyNTkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtp
bmcgY29weSkKQEAgLTE0NDYsMTMgKzE0NDYsMTMgQEAgcHVibGljOgogICAgIHZvaWQgY29tcGls
ZVRocm93KE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVUaHJvd1N0YXRpY0Vycm9yKE5vZGUqKTsK
ICAgICB2b2lkIGNvbXBpbGVHZXRFbnVtZXJhYmxlTGVuZ3RoKE5vZGUqKTsKLSAgICB2b2lkIGNv
bXBpbGVIYXNHZW5lcmljUHJvcGVydHkoTm9kZSopOworICAgIHZvaWQgY29tcGlsZUhhc0VudW1l
cmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eShOb2RlKik7CisgICAgdm9pZCBjb21waWxlSGFzRW51bWVy
YWJsZVByb3BlcnR5KE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVUb0luZGV4U3RyaW5nKE5vZGUq
KTsKICAgICB2b2lkIGNvbXBpbGVQdXRCeUlkRmx1c2goTm9kZSopOwogICAgIHZvaWQgY29tcGls
ZVB1dEJ5SWQoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZVB1dEJ5SWREaXJlY3QoTm9kZSopOwog
ICAgIHZvaWQgY29tcGlsZVB1dEJ5SWRXaXRoVGhpcyhOb2RlKik7Ci0gICAgdm9pZCBjb21waWxl
SGFzU3RydWN0dXJlUHJvcGVydHkoTm9kZSopOwogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5j
dGlvbj4KICAgICB2b2lkIGNvbXBpbGVIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eUltcGwoTm9kZSos
IEZ1bmN0aW9uKTsKICAgICB2b2lkIGNvbXBpbGVIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eShOb2Rl
Kik7CkBAIC0xNDg4LDcgKzE0ODgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb21waWxlQ2FsbE51
bWJlckNvbnN0cnVjdG9yKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVMb2dTaGFkb3dDaGlja2Vu
UHJvbG9ndWUoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUxvZ1NoYWRvd0NoaWNrZW5UYWlsKE5v
ZGUqKTsKLSAgICB2b2lkIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoTm9kZSopOworICAgIHZv
aWQgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShOb2RlKiwgU19KSVRPcGVyYXRpb25fR0NaKTsK
ICAgICB2b2lkIGNvbXBpbGVFeHRyYWN0Q2F0Y2hMb2NhbChOb2RlKik7CiAgICAgdm9pZCBjb21w
aWxlQ2xlYXJDYXRjaExvY2FscyhOb2RlKik7CiAgICAgdm9pZCBjb21waWxlUHJvZmlsZVR5cGUo
Tm9kZSopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0
aWVzLmNwcAkocmV2aXNpb24gMjcwMjU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODAsMTEgKzI4MCwxMiBAQCBp
bmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoTm9kZSogCiAgICAgY2FzZSBEb3VibGVD
b25zdGFudDoKICAgICBjYXNlIEludDUyQ29uc3RhbnQ6CiAgICAgY2FzZSBCb29sZWFuVG9OdW1i
ZXI6Ci0gICAgY2FzZSBIYXNHZW5lcmljUHJvcGVydHk6Ci0gICAgY2FzZSBIYXNTdHJ1Y3R1cmVQ
cm9wZXJ0eToKKyAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eToKKyAgICBjYXNlIEhhc0VudW1l
cmFibGVJbmRleGVkUHJvcGVydHk6CisgICAgY2FzZSBIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJv
cGVydHk6CisgICAgY2FzZSBIYXNFbnVtZXJhYmxlUHJvcGVydHk6CiAgICAgY2FzZSBIYXNPd25T
dHJ1Y3R1cmVQcm9wZXJ0eToKICAgICBjYXNlIEluU3RydWN0dXJlUHJvcGVydHk6Ci0gICAgY2Fz
ZSBIYXNJbmRleGVkUHJvcGVydHk6CiAgICAgY2FzZSBHZXREaXJlY3RQbmFtZToKICAgICBjYXNl
IEdldEVudW1lcmFibGVMZW5ndGg6CiAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdl
OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNw
cAkocmV2aXNpb24gMjcwMjU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dl
ckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDk5LDEzICsxNDk5LDE2IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICBjb21waWxlU3RvcmVCYXJyaWVyKCk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6Ci0gICAgICAgICAgICBjb21waWxl
SGFzSW5kZXhlZFByb3BlcnR5KCk7CisgICAgICAgICAgICBjb21waWxlSGFzSW5kZXhlZFByb3Bl
cnR5KG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eSk7CiAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBIYXNHZW5lcmljUHJvcGVydHk6Ci0gICAgICAgICAgICBjb21waWxlSGFzR2Vu
ZXJpY1Byb3BlcnR5KCk7CisgICAgICAgIGNhc2UgSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0
eToKKyAgICAgICAgICAgIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkob3BlcmF0aW9uSGFzRW51
bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBIYXNTdHJ1Y3R1cmVQcm9wZXJ0eToKLSAgICAgICAgICAgIGNvbXBpbGVIYXNTdHJ1Y3R1cmVQ
cm9wZXJ0eSgpOworICAgICAgICBjYXNlIEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eToK
KyAgICAgICAgICAgIGNvbXBpbGVIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHkoKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEhhc0VudW1lcmFibGVQcm9wZXJ0eToKKyAg
ICAgICAgICAgIGNvbXBpbGVIYXNFbnVtZXJhYmxlUHJvcGVydHkoKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIEhhc093blN0cnVjdHVyZVByb3BlcnR5OgogICAgICAgICAgICAg
Y29tcGlsZUhhc093blN0cnVjdHVyZVByb3BlcnR5KCk7CkBAIC0xMjQ5MSw3ICsxMjQ5NCw3IEBA
IHByaXZhdGU6CiAgICAgICAgIGVtaXRTdG9yZUJhcnJpZXIobG93Q2VsbChtX25vZGUtPmNoaWxk
MSgpKSwgbV9ub2RlLT5vcCgpID09IEZlbmNlZFN0b3JlQmFycmllcik7CiAgICAgfQogICAgIAot
ICAgIHZvaWQgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eSgpCisgICAgdm9pZCBjb21waWxlSGFz
SW5kZXhlZFByb3BlcnR5KFNfSklUT3BlcmF0aW9uX0dDWiBzbG93UGF0aE9wZXJhdGlvbikKICAg
ICB7CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2Jh
bE9iamVjdEZvcihtX29yaWdpbi5zZW1hbnRpYyk7CiAgICAgICAgIExWYWx1ZSBiYXNlID0gbG93
Q2VsbChtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMCkpOwpAQCAtMTI1MDIsNyArMTI1MDUs
NiBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKICAgICAgICAgY2FzZSBB
cnJheTo6Q29udGlndW91czogewogICAgICAgICAgICAgTFZhbHVlIHN0b3JhZ2UgPSBsb3dTdG9y
YWdlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAyKSk7Ci0gICAgICAgICAgICBMVmFsdWUg
aW50ZXJuYWxNZXRob2RUeXBlID0gbV9vdXQuY29uc3RJbnQzMihzdGF0aWNfY2FzdDxpbnQzMl90
PihtX25vZGUtPmludGVybmFsTWV0aG9kVHlwZSgpKSk7CiAKICAgICAgICAgICAgIEluZGV4ZWRB
YnN0cmFjdEhlYXAmIGhlYXAgPSBtb2RlLnR5cGUoKSA9PSBBcnJheTo6SW50MzIgPwogICAgICAg
ICAgICAgICAgIG1faGVhcHMuaW5kZXhlZEludDMyUHJvcGVydGllcyA6IG1faGVhcHMuaW5kZXhl
ZENvbnRpZ3VvdXNQcm9wZXJ0aWVzOwpAQCAtMTI1MzMsNyArMTI1MzUsNyBAQCBwcml2YXRlOgog
CiAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93Q2FzZSwgY29udGludWF0aW9uKTsKICAg
ICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3IoCi0gICAg
ICAgICAgICAgICAgbV9vdXQubm90WmVybzY0KHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9uSGFzSW5k
ZXhlZFByb3BlcnR5QnlJbnQsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGJhc2UsIGluZGV4
LCBpbnRlcm5hbE1ldGhvZFR5cGUpKSk7CisgICAgICAgICAgICAgICAgbV9vdXQubm90WmVybzY0
KHZtQ2FsbChJbnQ2NCwgc2xvd1BhdGhPcGVyYXRpb24sIHdlYWtQb2ludGVyKGdsb2JhbE9iamVj
dCksIGJhc2UsIGluZGV4KSkpOwogICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24p
OwogCiAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsK
QEAgLTEyNTQyLDcgKzEyNTQ0LDYgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgICAgICBjYXNl
IEFycmF5OjpEb3VibGU6IHsKICAgICAgICAgICAgIExWYWx1ZSBzdG9yYWdlID0gbG93U3RvcmFn
ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMikpOwotICAgICAgICAgICAgTFZhbHVlIGlu
dGVybmFsTWV0aG9kVHlwZSA9IG1fb3V0LmNvbnN0SW50MzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4o
bV9ub2RlLT5pbnRlcm5hbE1ldGhvZFR5cGUoKSkpOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBJbmRleGVkQWJzdHJhY3RIZWFwJiBoZWFwID0gbV9oZWFwcy5pbmRleGVkRG91YmxlUHJvcGVy
dGllczsKICAgICAgICAgICAgIApAQCAtMTI1NzIsNyArMTI1NzMsNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgCiAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93Q2FzZSwgY29udGludWF0
aW9uKTsKICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNo
b3IoCi0gICAgICAgICAgICAgICAgbV9vdXQubm90WmVybzY0KHZtQ2FsbChJbnQ2NCwgb3BlcmF0
aW9uSGFzSW5kZXhlZFByb3BlcnR5QnlJbnQsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGJh
c2UsIGluZGV4LCBpbnRlcm5hbE1ldGhvZFR5cGUpKSk7CisgICAgICAgICAgICAgICAgbV9vdXQu
bm90WmVybzY0KHZtQ2FsbChJbnQ2NCwgc2xvd1BhdGhPcGVyYXRpb24sIHdlYWtQb2ludGVyKGds
b2JhbE9iamVjdCksIGJhc2UsIGluZGV4KSkpOwogICAgICAgICAgICAgbV9vdXQuanVtcChjb250
aW51YXRpb24pOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250
aW51YXRpb24sIGxhc3ROZXh0KTsKQEAgLTEyNTgyLDcgKzEyNTgzLDYgQEAgcHJpdmF0ZToKIAog
ICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6IHsKICAgICAgICAgICAgIExWYWx1ZSBz
dG9yYWdlID0gbG93U3RvcmFnZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMikpOwotICAg
ICAgICAgICAgTFZhbHVlIGludGVybmFsTWV0aG9kVHlwZSA9IG1fb3V0LmNvbnN0SW50MzIoc3Rh
dGljX2Nhc3Q8aW50MzJfdD4obV9ub2RlLT5pbnRlcm5hbE1ldGhvZFR5cGUoKSkpOwogCiAgICAg
ICAgICAgICBMQmFzaWNCbG9jayBzbG93Q2FzZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAg
ICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOwpAQCAtMTI2
MTAsNyArMTI2MTAsNyBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhz
bG93Q2FzZSwgY29udGludWF0aW9uKTsKICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dS
ZXN1bHQgPSBtX291dC5hbmNob3IoCi0gICAgICAgICAgICAgICAgbV9vdXQubm90WmVybzY0KHZt
Q2FsbChJbnQ2NCwgb3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5QnlJbnQsIHdlYWtQb2ludGVy
KGdsb2JhbE9iamVjdCksIGJhc2UsIGluZGV4LCBpbnRlcm5hbE1ldGhvZFR5cGUpKSk7CisgICAg
ICAgICAgICAgICAgbV9vdXQubm90WmVybzY0KHZtQ2FsbChJbnQ2NCwgc2xvd1BhdGhPcGVyYXRp
b24sIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGJhc2UsIGluZGV4KSkpOwogICAgICAgICAg
ICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogCiAgICAgICAgICAgICBtX291dC5hcHBlbmRU
byhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKQEAgLTEyNjE5LDE5ICsxMjYxOSwxOCBAQCBwcml2
YXRlOgogICAgICAgICB9CiAKICAgICAgICAgZGVmYXVsdDogewotICAgICAgICAgICAgTFZhbHVl
IGludGVybmFsTWV0aG9kVHlwZSA9IG1fb3V0LmNvbnN0SW50MzIoc3RhdGljX2Nhc3Q8aW50MzJf
dD4obV9ub2RlLT5pbnRlcm5hbE1ldGhvZFR5cGUoKSkpOwotICAgICAgICAgICAgc2V0Qm9vbGVh
bihtX291dC5ub3RaZXJvNjQodm1DYWxsKEludDY0LCBvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVy
dHlCeUludCwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgYmFzZSwgaW5kZXgsIGludGVybmFs
TWV0aG9kVHlwZSkpKTsKKyAgICAgICAgICAgIHNldEJvb2xlYW4obV9vdXQubm90WmVybzY0KHZt
Q2FsbChJbnQ2NCwgc2xvd1BhdGhPcGVyYXRpb24sIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCks
IGJhc2UsIGluZGV4KSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
fQogICAgIH0KIAotICAgIHZvaWQgY29tcGlsZUhhc0dlbmVyaWNQcm9wZXJ0eSgpCisgICAgdm9p
ZCBjb21waWxlSGFzRW51bWVyYWJsZVByb3BlcnR5KCkKICAgICB7CiAgICAgICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX29yaWdpbi5z
ZW1hbnRpYyk7CiAgICAgICAgIExWYWx1ZSBiYXNlID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxk
MSgpKTsKICAgICAgICAgTFZhbHVlIHByb3BlcnR5ID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMigp
KTsKLSAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwoSW50NjQsIG9wZXJhdGlvbkhhc0dlbmVyaWNQ
cm9wZXJ0eSwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgYmFzZSwgcHJvcGVydHkpKTsKKyAg
ICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwoSW50NjQsIG9wZXJhdGlvbkhhc0VudW1lcmFibGVQcm9w
ZXJ0eSwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgYmFzZSwgcHJvcGVydHkpKTsKICAgICB9
CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgU2xvd1BhdGhDYWxsPgpAQCAtMTI2NzEsOSArMTI2
NzAsOSBAQCBwcml2YXRlOgogICAgICAgICBzZXRCb29sZWFuKG1fb3V0LnBoaShJbnQzMiwgY29y
cmVjdFN0cnVjdHVyZVJlc3VsdCwgc2xvd1BhdGhSZXN1bHQpKTsKICAgICB9CiAKLSAgICB2b2lk
IGNvbXBpbGVIYXNTdHJ1Y3R1cmVQcm9wZXJ0eSgpCisgICAgdm9pZCBjb21waWxlSGFzRW51bWVy
YWJsZVN0cnVjdHVyZVByb3BlcnR5KCkKICAgICB7Ci0gICAgICAgIGNvbXBpbGVIYXNTdHJ1Y3R1
cmVQcm9wZXJ0eUltcGwobG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKSwgb3BlcmF0aW9uSGFz
R2VuZXJpY1Byb3BlcnR5KTsKKyAgICAgICAgY29tcGlsZUhhc1N0cnVjdHVyZVByb3BlcnR5SW1w
bChsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpLCBvcGVyYXRpb25IYXNFbnVtZXJhYmxlUHJv
cGVydHkpOwogICAgIH0KIAogICAgIHZvaWQgY29tcGlsZUhhc093blN0cnVjdHVyZVByb3BlcnR5
KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDI3MDI1OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzA0
LDcgKzMwNCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAg
REVGSU5FX1NMT1dfT1AobmV3X2FycmF5X2J1ZmZlcikKICAgICAgICAgREVGSU5FX1NMT1dfT1Ao
c3ByZWFkKQogICAgICAgICBERUZJTkVfU0xPV19PUChnZXRfZW51bWVyYWJsZV9sZW5ndGgpCi0g
ICAgICAgIERFRklORV9TTE9XX09QKGhhc19nZW5lcmljX3Byb3BlcnR5KQorICAgICAgICBERUZJ
TkVfU0xPV19PUChoYXNfZW51bWVyYWJsZV9wcm9wZXJ0eSkKICAgICAgICAgREVGSU5FX1NMT1df
T1AoZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3IpCiAgICAgICAgIERFRklORV9TTE9XX09QKHRvX2lu
ZGV4X3N0cmluZykKICAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2RpcmVjdF9hcmd1bWVu
dHMpCkBAIC00NjMsMTAgKzQ2MywxMCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFz
cygpCiAgICAgICAgIERFRklORV9PUChvcF9nZXRfZnJvbV9hcmd1bWVudHMpCiAgICAgICAgIERF
RklORV9PUChvcF9wdXRfdG9fYXJndW1lbnRzKQogCi0gICAgICAgIERFRklORV9PUChvcF9oYXNf
c3RydWN0dXJlX3Byb3BlcnR5KQorICAgICAgICBERUZJTkVfT1Aob3BfaGFzX2VudW1lcmFibGVf
aW5kZXhlZF9wcm9wZXJ0eSkKKyAgICAgICAgREVGSU5FX09QKG9wX2hhc19lbnVtZXJhYmxlX3N0
cnVjdHVyZV9wcm9wZXJ0eSkKICAgICAgICAgREVGSU5FX09QKG9wX2hhc19vd25fc3RydWN0dXJl
X3Byb3BlcnR5KQogICAgICAgICBERUZJTkVfT1Aob3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5KQot
ICAgICAgICBERUZJTkVfT1Aob3BfaGFzX2luZGV4ZWRfcHJvcGVydHkpCiAgICAgICAgIERFRklO
RV9PUChvcF9nZXRfZGlyZWN0X3BuYW1lKQogICAgICAgICBERUZJTkVfT1Aob3BfZW51bWVyYXRv
cl9zdHJ1Y3R1cmVfcG5hbWUpCiAgICAgICAgIERFRklORV9PUChvcF9lbnVtZXJhdG9yX2dlbmVy
aWNfcG5hbWUpCkBAIC01OTIsNyArNTkyLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xv
d0Nhc2VzKCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2RlbF9ieV92YWwpCiAgICAg
ICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9kZWxfYnlfaWQpCiAgICAgICAgIERFRklORV9TTE9X
Q0FTRV9PUChvcF9zdWIpCi0gICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9oYXNfaW5kZXhl
ZF9wcm9wZXJ0eSkKKyAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2hhc19lbnVtZXJhYmxl
X2luZGV4ZWRfcHJvcGVydHkpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9nZXRfZnJv
bV9zY29wZSkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX3B1dF90b19zY29wZSkKIApA
QCAtNjI1LDcgKzYyNSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAg
ICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKG5zdHJpY3RlcSkKICAgICAgICAgREVGSU5F
X1NMT1dDQVNFX1NMT1dfT1AoZ2V0X2RpcmVjdF9wbmFtZSkKICAgICAgICAgREVGSU5FX1NMT1dD
QVNFX1NMT1dfT1AoZ2V0X3Byb3RvdHlwZV9vZikKLSAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NM
T1dfT1AoaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eSkKKyAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NM
T1dfT1AoaGFzX2VudW1lcmFibGVfc3RydWN0dXJlX3Byb3BlcnR5KQogICAgICAgICBERUZJTkVf
U0xPV0NBU0VfU0xPV19PUChoYXNfb3duX3N0cnVjdHVyZV9wcm9wZXJ0eSkKICAgICAgICAgREVG
SU5FX1NMT1dDQVNFX1NMT1dfT1AoaW5fc3RydWN0dXJlX3Byb3BlcnR5KQogICAgICAgICBERUZJ
TkVfU0xPV0NBU0VfU0xPV19PUChyZXNvbHZlX3Njb3BlKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5oCShyZXZpc2lvbiAyNzAyNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NTcsMTAgKzY1NywxMCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgdm9pZCBlbWl0X29wX3Vyc2hpZnQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wQ29kZVR5cGU+CiAgICAgICAgIHZvaWQgZW1pdF9vcF9o
YXNfc3RydWN0dXJlX3Byb3BlcnR5SW1wbChjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2
b2lkIGVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiopOwor
ICAgICAgICB2b2lkIGVtaXRfb3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0eShjb25z
dCBJbnN0cnVjdGlvbiopOworICAgICAgICB2b2lkIGVtaXRfb3BfaGFzX2VudW1lcmFibGVfc3Ry
dWN0dXJlX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9v
cF9oYXNfb3duX3N0cnVjdHVyZV9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAg
ICB2b2lkIGVtaXRfb3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKik7
Ci0gICAgICAgIHZvaWQgZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVj
dGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZ2V0X2RpcmVjdF9wbmFtZShjb25zdCBJbnN0
cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5h
bWUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2VudW1lcmF0b3Jf
Z2VuZXJpY19wbmFtZShjb25zdCBJbnN0cnVjdGlvbiopOwpAQCAtNzE1LDcgKzcxNSw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKIAogICAgICAg
ICB2b2lkIGVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAg
ICB2b2lkIGVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJldmlz
aW9uIDI3MDI1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE1MSw5ICsxMTUxLDkgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eQogICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZWdUMCk7
CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX2hhc19lbnVt
ZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewotICAgIGVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eUltcGw8T3BIYXNT
dHJ1Y3R1cmVQcm9wZXJ0eT4oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBlbWl0X29wX2hhc19z
dHJ1Y3R1cmVfcHJvcGVydHlJbXBsPE9wSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5Pihj
dXJyZW50SW5zdHJ1Y3Rpb24pOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfb3duX3N0cnVj
dHVyZV9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
MTE5Myw5ICsxMTkzLDkgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3Bl
cgogICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsPE5vUHRy
VGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8Tm9QdHJUYWc+KHJldHVybkFkZHJlc3MpKSwgRnVu
Y3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlHZW5l
cmljKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF9oYXNf
ZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BIYXNJbmRleGVkUHJvcGVydHk+KCk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5PigpOwogICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9
IGJ5dGVjb2RlLm1fYmFzZTsKQEAgLTEyNDAsMTEgKzEyNDAsMTEgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoYwogICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBw
ZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywgbV9ieXRlY29kZUluZGV4LCBQYXRj
aGFibGVKdW1wKCksIGJhZFR5cGUsIG1vZGUsIHByb2ZpbGUsIGRvbmUsIG5leHRIb3RQYXRoKSk7
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19lbnVtZXJhYmxlX2luZGV4
ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwogCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BI
YXNJbmRleGVkUHJvcGVydHk+KCk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5PigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9
IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29k
ZS5tX3Byb3BlcnR5OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMu
Y3BwCShyZXZpc2lvbiAyNzAyNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
Y29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzkyLDkgKzEzOTIsOSBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF9o
YXNfZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHlJbXBs
PE9wSGFzU3RydWN0dXJlUHJvcGVydHk+KGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgZW1pdF9v
cF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5SW1wbDxPcEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9w
ZXJ0eT4oY3VycmVudEluc3RydWN0aW9uKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX293
bl9zdHJ1Y3R1cmVfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTE0MzQsOSArMTQzNCw5IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUhhc0luZGV4
ZWRQcm9wZXIKICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2Fs
bDxOb1B0clRhZz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPE5vUHRyVGFnPihyZXR1cm5BZGRyZXNz
KSksIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uSGFzSW5kZXhlZFByb3Bl
cnR5R2VuZXJpYykpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0
eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRf
b3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5PigpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eT4oKTsKICAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkBAIC0xNDgxLDExICsxNDgxLDExIEBAIHZvaWQgSklU
OjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGMKICAgICBtX2J5VmFsQ29tcGlsYXRpb25J
bmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0ZWNvZGVJbmRl
eCwgUGF0Y2hhYmxlSnVtcCgpLCBiYWRUeXBlLCBtb2RlLCBwcm9maWxlLCBkb25lLCBuZXh0SG90
UGF0aCkpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHko
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfZW51bWVyYWJs
ZV9pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKIAotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5PigpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eT4oKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0g
Ynl0ZWNvZGUubV9wcm9wZXJ0eTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjcwMjU5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ0NSw3ICsyNDQ1
LDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkhhc0luZAogCiAgICAgaWYg
KCFDb21tb25TbG93UGF0aHM6OmNhbkFjY2Vzc0FyZ3VtZW50SW5kZXhRdWlja2x5KCpvYmplY3Qs
IGluZGV4KSkKICAgICAgICAgYnlWYWxJbmZvLT5hcnJheVByb2ZpbGUtPnNldE91dE9mQm91bmRz
KCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4ob2JqZWN0LT5oYXNQcm9w
ZXJ0eUdlbmVyaWMoZ2xvYmFsT2JqZWN0LCBpbmRleCwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1l
dGhvZFR5cGU6OkdldE93blByb3BlcnR5KSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNCb29sZWFuKG9iamVjdC0+aGFzRW51bWVyYWJsZVByb3BlcnR5KGdsb2JhbE9iamVjdCwgaW5k
ZXgpKSk7CiB9CiAgICAgCiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uSGFzSW5k
ZXhlZFByb3BlcnR5R2VuZXJpYywgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFN1YnNjcmlwdCwgQnlWYWxJbmZvKiBieVZhbEluZm8pKQpAQCAtMjQ2Niw3ICsyNDY2LDcg
QEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkhhc0luZAogCiAgICAgaWYgKCFD
b21tb25TbG93UGF0aHM6OmNhbkFjY2Vzc0FyZ3VtZW50SW5kZXhRdWlja2x5KCpvYmplY3QsIGlu
ZGV4KSkKICAgICAgICAgYnlWYWxJbmZvLT5hcnJheVByb2ZpbGUtPnNldE91dE9mQm91bmRzKCk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4ob2JqZWN0LT5oYXNQcm9wZXJ0
eUdlbmVyaWMoZ2xvYmFsT2JqZWN0LCBpbmRleCwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhv
ZFR5cGU6OkdldE93blByb3BlcnR5KSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNC
b29sZWFuKG9iamVjdC0+aGFzRW51bWVyYWJsZVByb3BlcnR5KGdsb2JhbE9iamVjdCwgaW5kZXgp
KSk7CiB9CiAgICAgCiBzdGF0aWMgYm9vbCBkZWxldGVCeUlkKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIFZNJiB2bSwgRGVsZXRlUHJvcGVydHlTbG90JiBzbG90LCBKU1ZhbHVlIGJhc2Us
IGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBFQ01BTW9kZSBlY21hTW9kZSkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAyNzAyNTkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5
KQpAQCAtMTM3LDYgKzEzNyw3IEBAIHVzaW5nIFZfSklUT3BlcmF0aW9uX0dTc2lKSkMgPSB2b2lk
KEpJVF8KIHVzaW5nIENfSklUT3BlcmF0aW9uX1RUID0gdWludHB0cl90KEpJVF9PUEVSQVRJT05f
QVRUUklCVVRFUyAqKShTdHJpbmdJbXBsKiwgU3RyaW5nSW1wbCopOwogdXNpbmcgQ19KSVRPcGVy
YXRpb25fQl9HSnNzSnNzID0gdWludHB0cl90KEpJVF9PUEVSQVRJT05fQVRUUklCVVRFUyAqKShK
U0dsb2JhbE9iamVjdCosIEpTU3RyaW5nKiwgSlNTdHJpbmcqKTsKIHVzaW5nIFNfSklUT3BlcmF0
aW9uX0dDID0gc2l6ZV90KEpJVF9PUEVSQVRJT05fQVRUUklCVVRFUyAqKShKU0dsb2JhbE9iamVj
dCosIEpTQ2VsbCopOwordXNpbmcgU19KSVRPcGVyYXRpb25fR0NaID0gc2l6ZV90KEpJVF9PUEVS
QVRJT05fQVRUUklCVVRFUyAqKShKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCosIGludDMyX3QpOwog
dXNpbmcgU19KSVRPcGVyYXRpb25fR0pKID0gc2l6ZV90KEpJVF9PUEVSQVRJT05fQVRUUklCVVRF
UyAqKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSk7CiB1
c2luZyBWX0pJVE9wZXJhdGlvbl9HSkpKID0gdm9pZChKSVRfT1BFUkFUSU9OX0FUVFJJQlVURVMg
KikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlKTsKIHVzaW5nIEpfSklUT3BlcmF0aW9uX0dTc2lKSiA9IEVuY29kZWRKU1ZhbHVl
KEpJVF9PUEVSQVRJT05fQVRUUklCVVRFUyAqKShKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZVN0
dWJJbmZvKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNt
CShyZXZpc2lvbiAyNzAyNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlcjY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtMzA1Miw4ICszMDUyLDggQEAg
bWFjcm8gaGFzU3RydWN0dXJlUHJvcGVydHlJbXBsKHNpemUsIGdldAogICAgIGRpc3BhdGNoKCkK
IGVuZAogCi1sbGludE9wV2l0aFJldHVybihvcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5LCBPcEhh
c1N0cnVjdHVyZVByb3BlcnR5LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgcmV0dXJuKQot
ICAgIGhhc1N0cnVjdHVyZVByb3BlcnR5SW1wbChzaXplLCBnZXQsIGRpc3BhdGNoLCAgcmV0dXJu
LCBfc2xvd19wYXRoX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkpCitsbGludE9wV2l0aFJldHVybihv
cF9oYXNfZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHksIE9wSGFzRW51bWVyYWJsZVN0cnVj
dHVyZVByb3BlcnR5LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgcmV0dXJuKQorICAgIGhh
c1N0cnVjdHVyZVByb3BlcnR5SW1wbChzaXplLCBnZXQsIGRpc3BhdGNoLCAgcmV0dXJuLCBfc2xv
d19wYXRoX2hhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0eSkKIGVuZCkKIAogbGxpbnRP
cFdpdGhSZXR1cm4ob3BfaGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVydHksIE9wSGFzT3duU3RydWN0
dXJlUHJvcGVydHksIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCByZXR1cm4pCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIu
YXNtCShyZXZpc2lvbiAyNzAyNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlci5hc20JKHdvcmtpbmcgY29weSkKQEAgLTE5NjEsMTEgKzE5NjEsMTEg
QEAgc2xvd1BhdGhPcChnZXRfZW51bWVyYWJsZV9sZW5ndGgpCiBzbG93UGF0aE9wKGdldF9wcm9w
ZXJ0eV9lbnVtZXJhdG9yKQogc2xvd1BhdGhPcChncmVhdGVyKQogc2xvd1BhdGhPcChncmVhdGVy
ZXEpCi1zbG93UGF0aE9wKGhhc19nZW5lcmljX3Byb3BlcnR5KQotc2xvd1BhdGhPcChoYXNfaW5k
ZXhlZF9wcm9wZXJ0eSkKK3Nsb3dQYXRoT3AoaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0
eSkKK3Nsb3dQYXRoT3AoaGFzX2VudW1lcmFibGVfcHJvcGVydHkpCiAKIGlmIG5vdCBKU1ZBTFVF
NjQKLSAgICBzbG93UGF0aE9wKGhhc19zdHJ1Y3R1cmVfcHJvcGVydHkpCisgICAgc2xvd1BhdGhP
cChoYXNfZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHkpCiAgICAgc2xvd1BhdGhPcChoYXNf
b3duX3N0cnVjdHVyZV9wcm9wZXJ0eSkKICAgICBzbG93UGF0aE9wKGluX3N0cnVjdHVyZV9wcm9w
ZXJ0eSkKICAgICBzbG93UGF0aE9wKGdldF9wcm90b3R5cGVfb2YpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHJldmlzaW9u
IDI3MDI1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRo
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNDAsMjMgKzEwNDAsMjMgQEAgSlNDX0RFRklORV9D
T01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9nZQogICAgIFJFVFVSTihqc051bWJlcihlbnVtZXJh
dG9yLT5pbmRleGVkTGVuZ3RoKCkpKTsKIH0KIAotSlNDX0RFRklORV9DT01NT05fU0xPV19QQVRI
KHNsb3dfcGF0aF9oYXNfaW5kZXhlZF9wcm9wZXJ0eSkKK0pTQ19ERUZJTkVfQ09NTU9OX1NMT1df
UEFUSChzbG93X3BhdGhfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0eSkKIHsKICAgICBC
RUdJTigpOwotICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BIYXNJbmRleGVkUHJvcGVydHk+
KCk7CisgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEhhc0VudW1lcmFibGVJbmRleGVkUHJv
cGVydHk+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxv
Y2spOwogICAgIEpTT2JqZWN0KiBiYXNlID0gR0VUX0MoYnl0ZWNvZGUubV9iYXNlKS5qc1ZhbHVl
KCkudG9PYmplY3QoZ2xvYmFsT2JqZWN0KTsKICAgICBDSEVDS19FWENFUFRJT04oKTsKICAgICBK
U1ZhbHVlIHByb3BlcnR5ID0gR0VUKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmpzVmFsdWUoKTsKICAg
ICBtZXRhZGF0YS5tX2FycmF5UHJvZmlsZS5vYnNlcnZlU3RydWN0dXJlKGJhc2UtPnN0cnVjdHVy
ZSh2bSkpOwogICAgIEFTU0VSVChwcm9wZXJ0eS5pc1VJbnQzMkFzQW55SW50KCkpOwotICAgIFJF
VFVSTihqc0Jvb2xlYW4oYmFzZS0+aGFzUHJvcGVydHlHZW5lcmljKGdsb2JhbE9iamVjdCwgcHJv
cGVydHkuYXNVSW50MzJBc0FueUludCgpLCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlw
ZTo6R2V0T3duUHJvcGVydHkpKSk7CisgICAgUkVUVVJOKGpzQm9vbGVhbihiYXNlLT5oYXNFbnVt
ZXJhYmxlUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eS5hc1VJbnQzMkFzQW55SW50KCkp
KSk7CiB9CiAKLUpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfaGFzX3N0cnVj
dHVyZV9wcm9wZXJ0eSkKK0pTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfaGFz
X2VudW1lcmFibGVfc3RydWN0dXJlX3Byb3BlcnR5KQogewogICAgIEJFR0lOKCk7Ci0gICAgYXV0
byBieXRlY29kZSA9IHBjLT5hczxPcEhhc1N0cnVjdHVyZVByb3BlcnR5PigpOworICAgIGF1dG8g
Ynl0ZWNvZGUgPSBwYy0+YXM8T3BIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHk+KCk7CiAg
ICAgSlNPYmplY3QqIGJhc2UgPSBHRVRfQyhieXRlY29kZS5tX2Jhc2UpLmpzVmFsdWUoKS50b09i
amVjdChnbG9iYWxPYmplY3QpOwogICAgIENIRUNLX0VYQ0VQVElPTigpOwogICAgIEpTVmFsdWUg
cHJvcGVydHkgPSBHRVQoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuanNWYWx1ZSgpOwpAQCAtMTA2OSw3
ICsxMDY5LDcgQEAgSlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9oYQogICAg
IEpTU3RyaW5nKiBzdHJpbmcgPSBhc1N0cmluZyhwcm9wZXJ0eSk7CiAgICAgYXV0byBwcm9wZXJ0
eU5hbWUgPSBzdHJpbmctPnRvSWRlbnRpZmllcihnbG9iYWxPYmplY3QpOwogICAgIENIRUNLX0VY
Q0VQVElPTigpOwotICAgIFJFVFVSTihqc0Jvb2xlYW4oYmFzZS0+aGFzUHJvcGVydHlHZW5lcmlj
KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9k
VHlwZTo6R2V0T3duUHJvcGVydHkpKSk7CisgICAgUkVUVVJOKGpzQm9vbGVhbihiYXNlLT5oYXNF
bnVtZXJhYmxlUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUpKSk7CiB9CiAKIEpT
Q19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfaGFzX293bl9zdHJ1Y3R1cmVfcHJv
cGVydHkpCkBAIC0xMTA4LDEwICsxMTA4LDEwIEBAIEpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFU
SChzbG93X3BhdGhfaW4KICAgICBSRVRVUk4oanNCb29sZWFuKENvbW1vblNsb3dQYXRoczo6b3BJ
bkJ5VmFsKGdsb2JhbE9iamVjdCwgYmFzZSwgYXNTdHJpbmcocHJvcGVydHkpKSkpOwogfQogCi1K
U0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2hhc19nZW5lcmljX3Byb3BlcnR5
KQorSlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9oYXNfZW51bWVyYWJsZV9w
cm9wZXJ0eSkKIHsKICAgICBCRUdJTigpOwotICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BI
YXNHZW5lcmljUHJvcGVydHk+KCk7CisgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEhhc0Vu
dW1lcmFibGVQcm9wZXJ0eT4oKTsKICAgICBKU09iamVjdCogYmFzZSA9IEdFVF9DKGJ5dGVjb2Rl
Lm1fYmFzZSkuanNWYWx1ZSgpLnRvT2JqZWN0KGdsb2JhbE9iamVjdCk7CiAgICAgQ0hFQ0tfRVhD
RVBUSU9OKCk7CiAgICAgSlNWYWx1ZSBwcm9wZXJ0eSA9IEdFVChieXRlY29kZS5tX3Byb3BlcnR5
KS5qc1ZhbHVlKCk7CkBAIC0xMTE5LDcgKzExMTksNyBAQCBKU0NfREVGSU5FX0NPTU1PTl9TTE9X
X1BBVEgoc2xvd19wYXRoX2hhCiAgICAgSlNTdHJpbmcqIHN0cmluZyA9IGFzU3RyaW5nKHByb3Bl
cnR5KTsKICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IHN0cmluZy0+dG9JZGVudGlmaWVyKGdsb2Jh
bE9iamVjdCk7CiAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7Ci0gICAgUkVUVVJOKGpzQm9vbGVhbihi
YXNlLT5oYXNQcm9wZXJ0eUdlbmVyaWMoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpHZXRPd25Qcm9wZXJ0eSkpKTsKKyAgICBSRVRV
Uk4oanNCb29sZWFuKGJhc2UtPmhhc0VudW1lcmFibGVQcm9wZXJ0eShnbG9iYWxPYmplY3QsIHBy
b3BlcnR5TmFtZSkpKTsKIH0KIAogSlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0
aF9nZXRfZGlyZWN0X3BuYW1lKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q29tbW9uU2xvd1BhdGhzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgJKHJldmlzaW9uIDI3MDI1OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
NTksMTEgKzI1OSwxMSBAQCBKU0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9z
CiBKU0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF90b19wcmltaXRpdmUpOwog
SlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfdG9fcHJvcGVydHlfa2V5KTsK
IEpTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2dldF9lbnVtZXJhYmxlX2xl
bmd0aCk7Ci1KU0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9oYXNfZ2VuZXJp
Y19wcm9wZXJ0eSk7Ci1KU0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9oYXNf
c3RydWN0dXJlX3Byb3BlcnR5KTsKK0pTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19w
YXRoX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHkpOworSlNDX0RFQ0xBUkVfQ09NTU9O
X1NMT1dfUEFUSChzbG93X3BhdGhfaGFzX2VudW1lcmFibGVfc3RydWN0dXJlX3Byb3BlcnR5KTsK
K0pTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2hhc19lbnVtZXJhYmxlX3By
b3BlcnR5KTsKIEpTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2hhc19vd25f
c3RydWN0dXJlX3Byb3BlcnR5KTsKIEpTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19w
YXRoX2luX3N0cnVjdHVyZV9wcm9wZXJ0eSk7Ci1KU0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRI
KHNsb3dfcGF0aF9oYXNfaW5kZXhlZF9wcm9wZXJ0eSk7CiBKU0NfREVDTEFSRV9DT01NT05fU0xP
V19QQVRIKHNsb3dfcGF0aF9nZXRfZGlyZWN0X3BuYW1lKTsKIEpTQ19ERUNMQVJFX0NPTU1PTl9T
TE9XX1BBVEgoc2xvd19wYXRoX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9yKTsKIEpTQ19ERUNMQVJF
X0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJldmlz
aW9uIDI3MDI1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTk4NywxNiArMTk4NywxNyBAQCB2b2lkIEpTT2JqZWN0Ojpw
dXREaXJlY3ROb25JbmRleEFjY2Vzc29yCiAgICAgc3RydWN0dXJlLT5zZXRIYXNHZXR0ZXJTZXR0
ZXJQcm9wZXJ0aWVzV2l0aFByb3RvQ2hlY2socHJvcGVydHlOYW1lID09IHZtLnByb3BlcnR5TmFt
ZXMtPnVuZGVyc2NvcmVQcm90byk7CiB9CiAKLS8vIEhhc1Byb3BlcnR5KE8sIFApIGZyb20gU2Vj
dGlvbiA3LjMuMTAgb2YgdGhlIHNwZWMuCi0vLyBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25h
bC5vcmcvZWNtYS0yNjIvNi4wL2luZGV4Lmh0bWwjc2VjLWhhc3Byb3BlcnR5CisvLyBodHRwczov
L3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWhhc3Byb3BlcnR5CiBib29sIEpTT2JqZWN0OjpoYXNQcm9w
ZXJ0eShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lKSBjb25zdAogewotICAgIHJldHVybiBoYXNQcm9wZXJ0eUdlbmVyaWMoZ2xvYmFsT2JqZWN0
LCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpIYXNQcm9w
ZXJ0eSk7CisgICAgUHJvcGVydHlTbG90IHNsb3QodGhpcywgUHJvcGVydHlTbG90OjpJbnRlcm5h
bE1ldGhvZFR5cGU6Okhhc1Byb3BlcnR5KTsKKyAgICByZXR1cm4gY29uc3RfY2FzdDxKU09iamVj
dCo+KHRoaXMpLT5nZXRQcm9wZXJ0eVNsb3QoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNs
b3QpOwogfQogCiBib29sIEpTT2JqZWN0OjpoYXNQcm9wZXJ0eShKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGhh
c1Byb3BlcnR5R2VuZXJpYyhnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90
OjpJbnRlcm5hbE1ldGhvZFR5cGU6Okhhc1Byb3BlcnR5KTsKKyAgICBQcm9wZXJ0eVNsb3Qgc2xv
dCh0aGlzLCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6SGFzUHJvcGVydHkpOwor
ICAgIHJldHVybiBjb25zdF9jYXN0PEpTT2JqZWN0Kj4odGhpcyktPmdldFByb3BlcnR5U2xvdChn
bG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKIGJvb2wgSlNPYmplY3Q6Omhh
c1Byb3BlcnR5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVpbnQ2NF90IHByb3BlcnR5
TmFtZSkgY29uc3QKQEAgLTIwMDcsMTYgKzIwMDgsMjQgQEAgYm9vbCBKU09iamVjdDo6aGFzUHJv
cGVydHkoSlNHbG9iYWxPYmplYwogICAgIHJldHVybiBoYXNQcm9wZXJ0eShnbG9iYWxPYmplY3Qs
IElkZW50aWZpZXI6OmZyb20oZ2xvYmFsT2JqZWN0LT52bSgpLCBwcm9wZXJ0eU5hbWUpKTsKIH0K
IAotYm9vbCBKU09iamVjdDo6aGFzUHJvcGVydHlHZW5lcmljKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdDo6SW50ZXJu
YWxNZXRob2RUeXBlIGludGVybmFsTWV0aG9kVHlwZSkgY29uc3QKK2Jvb2wgSlNPYmplY3Q6Omhh
c0VudW1lcmFibGVQcm9wZXJ0eShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lKSBjb25zdAogewotICAgIFByb3BlcnR5U2xvdCBzbG90KHRoaXMs
IGludGVybmFsTWV0aG9kVHlwZSk7Ci0gICAgcmV0dXJuIGNvbnN0X2Nhc3Q8SlNPYmplY3QqPih0
aGlzKS0+Z2V0UHJvcGVydHlTbG90KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsK
KyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworICAgIFByb3BlcnR5U2xvdCBzbG90KHRoaXMsIFByb3BlcnR5
U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpHZXRPd25Qcm9wZXJ0eSk7CisgICAgYm9vbCBoYXNQ
cm9wZXJ0eSA9IGNvbnN0X2Nhc3Q8SlNPYmplY3QqPih0aGlzKS0+Z2V0UHJvcGVydHlTbG90KGds
b2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBmYWxzZSk7CisgICAgcmV0dXJuIGhhc1Byb3BlcnR5ICYmICEoc2xvdC5hdHRyaWJ1
dGVzKCkgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogfQogCi1ib29sIEpTT2JqZWN0
OjpoYXNQcm9wZXJ0eUdlbmVyaWMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdW5zaWdu
ZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZSBpbnRlcm5h
bE1ldGhvZFR5cGUpIGNvbnN0Citib29sIEpTT2JqZWN0OjpoYXNFbnVtZXJhYmxlUHJvcGVydHko
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdW5zaWduZWQgcHJvcGVydHlOYW1lKSBjb25z
dAogewotICAgIFByb3BlcnR5U2xvdCBzbG90KHRoaXMsIGludGVybmFsTWV0aG9kVHlwZSk7Ci0g
ICAgcmV0dXJuIGNvbnN0X2Nhc3Q8SlNPYmplY3QqPih0aGlzKS0+Z2V0UHJvcGVydHlTbG90KGds
b2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAg
IFByb3BlcnR5U2xvdCBzbG90KHRoaXMsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBl
OjpHZXRPd25Qcm9wZXJ0eSk7CisgICAgYm9vbCBoYXNQcm9wZXJ0eSA9IGNvbnN0X2Nhc3Q8SlNP
YmplY3QqPih0aGlzKS0+Z2V0UHJvcGVydHlTbG90KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1l
LCBzbG90KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CisgICAgcmV0
dXJuIGhhc1Byb3BlcnR5ICYmICEoc2xvdC5hdHRyaWJ1dGVzKCkgJiBQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udEVudW0pOwogfQogCiAvLyBFQ01BIDguNi4yLjUKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24gMjcwMjU5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNjU1LDgg
KzY1NSw4IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIGhhc1Byb3BlcnR5
KEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lKSBjb25zdDsKICAgICBKU19FWFBPUlRfUFJJ
VkFURSBib29sIGhhc1Byb3BlcnR5KEpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlO
YW1lKSBjb25zdDsKICAgICBib29sIGhhc1Byb3BlcnR5KEpTR2xvYmFsT2JqZWN0KiwgdWludDY0
X3QgcHJvcGVydHlOYW1lKSBjb25zdDsKLSAgICBib29sIGhhc1Byb3BlcnR5R2VuZXJpYyhKU0ds
b2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5
cGUpIGNvbnN0OwotICAgIGJvb2wgaGFzUHJvcGVydHlHZW5lcmljKEpTR2xvYmFsT2JqZWN0Kiwg
dW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZSkg
Y29uc3Q7CisgICAgYm9vbCBoYXNFbnVtZXJhYmxlUHJvcGVydHkoSlNHbG9iYWxPYmplY3QqLCBQ
cm9wZXJ0eU5hbWUpIGNvbnN0OworICAgIGJvb2wgaGFzRW51bWVyYWJsZVByb3BlcnR5KEpTR2xv
YmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lKSBjb25zdDsKICAgICBib29sIGhhc093
blByb3BlcnR5KEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKSBj
b25zdDsKICAgICBib29sIGhhc093blByb3BlcnR5KEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlO
YW1lKSBjb25zdDsKICAgICBib29sIGhhc093blByb3BlcnR5KEpTR2xvYmFsT2JqZWN0KiwgdW5z
aWduZWQpIGNvbnN0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>415264</attachid>
            <date>2020-12-02 17:05:13 -0800</date>
            <delta_ts>2020-12-03 05:05:05 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-38970-20201203030511.patch</filename>
            <type>text/plain</type>
            <size>93982</size>
            <attacher name="Alexey Shvayka">ashvayka</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNzAzNzcpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE1IEBACisyMDIwLTEyLTAyICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNo
QGdtYWlsLmNvbT4KKworICAgICAgICBOb24tZW51bWVyYWJsZSBwcm9wZXJ0eSBmYWlscyB0byBz
aGFkb3cgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydHkgZnJvbSBmb3ItaW4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM4OTcwCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBzdHJlc3MvYXJndW1lbnRz
LWJpemFycmUtYmVoYXZpb3VyLWRpc2FibGUtZW51bWVyYWJpbGl0eS5qczoKKyAgICAgICAgKiBz
dHJlc3MvZm9yLWluLXJlZGVmaW5lLWVudW1lcmFibGUuanM6IEFkZGVkLgorICAgICAgICAqIHN0
cmVzcy9mb3ItaW4tc2hhZG93LW5vbi1lbnVtZXJhYmxlLmpzOiBBZGRlZC4KKyAgICAgICAgKiB0
ZXN0MjYyL2V4cGVjdGF0aW9ucy55YW1sOiBNYXJrIDQgdGVzdCBjYXNlcyBhcyBwYXNzaW5nLgor
CiAyMDIwLTEyLTAyICBSb3NzIEtpcnNsaW5nICA8cm9zcy5raXJzbGluZ0Bzb255LmNvbT4KIAog
ICAgICAgICAlVHlwZWRBcnJheSUjc2xpY2Ugc2hvdWxkbid0IGNhcmUgYWJvdXQgc291cmNlIGJ1
ZmZlciBkZXRhY2htZW50IGlmIHRoZXJlJ3Mgbm90aGluZyB0byBjb3B5CkluZGV4OiBKU1Rlc3Rz
L3N0cmVzcy9hcmd1bWVudHMtYml6YXJyZS1iZWhhdmlvdXItZGlzYWJsZS1lbnVtZXJhYmlsaXR5
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL2FyZ3VtZW50cy1iaXphcnJlLWJlaGF2
aW91ci1kaXNhYmxlLWVudW1lcmFiaWxpdHkuanMJKHJldmlzaW9uIDI3MDM3MykKKysrIEpTVGVz
dHMvc3RyZXNzL2FyZ3VtZW50cy1iaXphcnJlLWJlaGF2aW91ci1kaXNhYmxlLWVudW1lcmFiaWxp
dHkuanMJKHdvcmtpbmcgY29weSkKQEAgLTE4LDcgKzE4LDcgQEAgdmFyIGFycmF5ID0gW107CiBm
b3IgKHZhciBzIGluIHJlc3VsdFsyXSkKICAgICBhcnJheS5wdXNoKHMpOwogCi1pZiAoYXJyYXku
am9pbigiLCIpICE9ICIwIikKK2lmIChhcnJheS5qb2luKCIsIikgIT0gIiIpCiAgICAgdGhyb3cg
bmV3IEVycm9yKCk7CiAKIGlmIChPYmplY3Qua2V5cyhyZXN1bHRbMl0pLmpvaW4oIiwiKSAhPSAi
MCIpCkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9mb3ItaW4tcmVkZWZpbmUtZW51bWVyYWJsZS5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9mb3ItaW4tcmVkZWZpbmUtZW51bWVyYWJsZS5q
cwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL3N0cmVzcy9mb3ItaW4tcmVkZWZpbmUtZW51bWVy
YWJsZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwNyBAQAorZnVuY3Rpb24gYXNzZXJ0
KHgpIHsKKyAgICBpZiAoIXgpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFkIGFzc2VydGlv
biEiKTsKK30KKworZnVuY3Rpb24gc2hvdWxkQmUoYWN0dWFsLCBleHBlY3RlZCkgeworICAgIGlm
IChhY3R1YWwgIT09IGV4cGVjdGVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEJhZCB2YWx1
ZTogJHthY3R1YWx9LmApOworfQorCitjb25zdCBlbnVtRGVzYyA9IHsgdmFsdWU6IDAsIHdyaXRh
YmxlOiB0cnVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfTsKK2NvbnN0
IGRvbnRFbnVtRGVzYyA9IHsgdmFsdWU6IDAsIHdyaXRhYmxlOiB0cnVlLCBlbnVtZXJhYmxlOiBm
YWxzZSwgY29uZmlndXJhYmxlOiB0cnVlIH07CisKKy8vIGluZGV4ZWQgcHJvcGVydHkKKygoKSA9
PiB7CisgICAgZnVuY3Rpb24gdGVzdCgpIHsKKyAgICAgICAgdmFyIGFyciA9IE9iamVjdC5kZWZp
bmVQcm9wZXJ0aWVzKFswLCAwLCAwXSwgeyAxOiBkb250RW51bURlc2MgfSk7CisgICAgICAgIGZv
ciAodmFyIGkgaW4gYXJyKSB7CisgICAgICAgICAgICBhc3NlcnQoaSBpbiBhcnIpOworICAgICAg
ICAgICAgc2hvdWxkQmUoYXJyW2ldLCAwKTsKKyAgICAgICAgICAgICsrYXJyW2ldOworICAgICAg
ICAgICAgaWYgKGkgPT09ICIwIikKKyAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVy
dGllcyhhcnIsIHsgMTogZW51bURlc2MsIDI6IGRvbnRFbnVtRGVzYyB9KTsKKyAgICAgICAgfQor
ICAgICAgICBzaG91bGRCZShhcnJbMF0sIDEpOworICAgICAgICBzaG91bGRCZShhcnJbMV0sIDAp
OworICAgICAgICBzaG91bGRCZShhcnJbMl0sIDApOworICAgIH0KKworICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgMWU1OyArK2kpCisgICAgICAgIHRlc3QoKTsKK30pKCk7CisKKy8vIHN0cnVjdHVy
ZSBwcm9wZXJ0eQorKCgpID0+IHsKKyAgICBmdW5jdGlvbiB0ZXN0KCkgeworICAgICAgICB2YXIg
b2JqID0gT2JqZWN0LmNyZWF0ZShudWxsLCB7IGE6IGVudW1EZXNjLCBiOiBlbnVtRGVzYywgYzog
ZG9udEVudW1EZXNjIH0pOworICAgICAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7CisgICAgICAg
ICAgICBhc3NlcnQoa2V5IGluIG9iaik7CisgICAgICAgICAgICBzaG91bGRCZShvYmpba2V5XSwg
MCk7CisgICAgICAgICAgICArK29ialtrZXldOworICAgICAgICAgICAgaWYgKGtleSA9PT0gImEi
KQorICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG9iaiwgeyBiOiBkb250
RW51bURlc2MsIGM6IGVudW1EZXNjIH0pOworICAgICAgICB9CisgICAgICAgIHNob3VsZEJlKG9i
ai5hLCAxKTsKKyAgICAgICAgc2hvdWxkQmUob2JqLmIsIDApOworICAgICAgICBzaG91bGRCZShv
YmouYywgMCk7CisgICAgfQorCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTU7ICsraSkKKyAg
ICAgICAgdGVzdCgpOworfSkoKTsKKworLy8gZ2VuZXJpYyBwcm9wZXJ0eSAoUHJveHkpCisoKCkg
PT4geworICAgIGZ1bmN0aW9uIHRlc3QoKSB7CisgICAgICAgIHZhciB0YXJnZXQgPSB7IGE6IDAs
IGI6IDAsIGM6IDAgfTsKKyAgICAgICAgdmFyIGVudW1NYXAgPSB7IGE6IHRydWUsIGI6IHRydWUs
IGM6IGZhbHNlIH07CisgICAgICAgIHZhciBwcm94eSA9IG5ldyBQcm94eSh0YXJnZXQsIHsKKyAg
ICAgICAgICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogKF8sIGtleSkgPT4geworICAgICAg
ICAgICAgICAgIHJldHVybiB7IHZhbHVlOiB0YXJnZXRba2V5XSwgd3JpdGFibGU6IHRydWUsIGVu
dW1lcmFibGU6IGVudW1NYXBba2V5XSwgY29uZmlndXJhYmxlOiB0cnVlIH07CisgICAgICAgICAg
ICB9LAorICAgICAgICB9KTsKKworICAgICAgICBmb3IgKHZhciBrZXkgaW4gcHJveHkpIHsKKyAg
ICAgICAgICAgIGFzc2VydChrZXkgaW4gcHJveHkpOworICAgICAgICAgICAgc2hvdWxkQmUocHJv
eHlba2V5XSwgMCk7CisgICAgICAgICAgICArK3RhcmdldFtrZXldOworICAgICAgICAgICAgaWYg
KGtleSA9PT0gImEiKSB7CisgICAgICAgICAgICAgICAgZW51bU1hcC5iID0gZmFsc2U7CisgICAg
ICAgICAgICAgICAgZW51bU1hcC5jID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICBzaG91bGRCZSh0YXJnZXQuYSwgMSk7CisgICAgICAgIHNob3VsZEJlKHRhcmdldC5i
LCAwKTsKKyAgICAgICAgc2hvdWxkQmUodGFyZ2V0LmMsIDApOworICAgIH0KKworICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgMWU1OyArK2kpCisgICAgICAgIHRlc3QoKTsKK30pKCk7CisKKy8vIGdl
bmVyaWMgcHJvcGVydHkgKGluIHByb3RvdHlwZSkKKygoKSA9PiB7CisgICAgZnVuY3Rpb24gdGVz
dCgpIHsKKyAgICAgICAgdmFyIHNlZW4gPSB7fTsKKyAgICAgICAgdmFyIHByb3RvID0gT2JqZWN0
LmNyZWF0ZShudWxsLCB7IGI6IGVudW1EZXNjLCBjOiBkb250RW51bURlc2MsIGQ6IGVudW1EZXNj
LCBlOiBlbnVtRGVzYyB9KTsKKyAgICAgICAgdmFyIGhlaXIgPSBPYmplY3QuY3JlYXRlKHByb3Rv
LCB7IGE6IGVudW1EZXNjLCBlOiBkb250RW51bURlc2MgfSk7CisgICAgICAgIGZvciAodmFyIGtl
eSBpbiBoZWlyKSB7CisgICAgICAgICAgICBhc3NlcnQoa2V5IGluIGhlaXIpOworICAgICAgICAg
ICAgc2hvdWxkQmUoaGVpcltrZXldLCAwKTsKKyAgICAgICAgICAgIHNlZW5ba2V5XSA9IHRydWU7
CisgICAgICAgICAgICBpZiAoa2V5ID09PSAiYSIpCisgICAgICAgICAgICAgICAgT2JqZWN0LmRl
ZmluZVByb3BlcnRpZXMocHJvdG8sIHsgYjogZG9udEVudW1EZXNjLCBjOiBlbnVtRGVzYyB9KTsK
KyAgICAgICAgICAgIGlmIChrZXkgPT09ICJkIikKKyAgICAgICAgICAgICAgICBPYmplY3QuZGVm
aW5lUHJvcGVydGllcyhoZWlyLCB7IGU6IGVudW1EZXNjIH0pOworICAgICAgICB9CisgICAgICAg
IGFzc2VydChzZWVuLmEpOworICAgICAgICBhc3NlcnQoIXNlZW4uYik7CisgICAgICAgIGFzc2Vy
dCghc2Vlbi5jKTsKKyAgICAgICAgYXNzZXJ0KHNlZW4uZCk7CisgICAgICAgIGFzc2VydChzZWVu
LmUpOworICAgIH0KKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU1OyArK2kpCisgICAgICAg
IHRlc3QoKTsKK30pKCk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9mb3ItaW4tc2hhZG93LW5vbi1l
bnVtZXJhYmxlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL2Zvci1pbi1zaGFkb3ct
bm9uLWVudW1lcmFibGUuanMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy9zdHJlc3MvZm9yLWlu
LXNoYWRvdy1ub24tZW51bWVyYWJsZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE3NCBA
QAorY29uc3QgZG9udEVudW1EZXNjID0geyB2YWx1ZTogMSwgd3JpdGFibGU6IHRydWUsIGVudW1l
cmFibGU6IGZhbHNlLCBjb25maWd1cmFibGU6IHRydWUgfTsKK2NvbnN0IHRlc3RDYXNlcyA9IFsK
KyAgeworICAgIG5hbWU6ICJPYmplY3QiLAorICAgIGNyZWF0ZU9iamVjdDogKCkgPT4gT2JqZWN0
LmNyZWF0ZShudWxsLCB7IGZvbzogZG9udEVudW1EZXNjLCBiYXI6IGRvbnRFbnVtRGVzYyB9KSwK
KyAgICBkb250RW51bUtleXM6IFsiZm9vIiwgImJhciJdLAorICB9LAorICB7CisgICAgbmFtZTog
IkVycm9yIiwKKyAgICBjcmVhdGVPYmplY3Q6ICgpID0+IG5ldyBFcnJvcigpLAorICAgIGRvbnRF
bnVtS2V5czogWyJsaW5lIiwgImNvbHVtbiIsICJzb3VyY2VVUkwiLCAic3RhY2siXSwKKyAgfSwK
KyAgeworICAgIG5hbWU6ICJBcnJheSAoZW1wdHkpIiwKKyAgICBjcmVhdGVPYmplY3Q6ICgpID0+
IFtdLAorICAgIGRvbnRFbnVtS2V5czogWyJsZW5ndGgiXSwKKyAgfSwKKyAgeworICAgIG5hbWU6
ICJBcnJheSAoc3BhcnNlKSIsCisgICAgY3JlYXRlT2JqZWN0OiAoKSA9PiBPYmplY3QuZGVmaW5l
UHJvcGVydGllcyhbMCwgMSwgMl0sIHsgMDogZG9udEVudW1EZXNjLCAyOiBkb250RW51bURlc2Mg
fSksCisgICAgZG9udEVudW1LZXlzOiBbIjAiLCAiMiIsICJsZW5ndGgiXSwKKyAgfSwKKyAgewor
ICAgIG5hbWU6ICJGdW5jdGlvbiAoc3RyaWN0KSIsCisgICAgY3JlYXRlT2JqZWN0OiAoKSA9PiBm
dW5jdGlvbigpIHsgInVzZSBzdHJpY3QiOyB9LAorICAgIGRvbnRFbnVtS2V5czogWyJsZW5ndGgi
LCAibmFtZSIsICJwcm90b3R5cGUiXSwKKyAgfSwKKyAgeworICAgIG5hbWU6ICJGdW5jdGlvbiAo
bm9uLXN0cmljdCkiLAorICAgIGNyZWF0ZU9iamVjdDogKCkgPT4gZnVuY3Rpb24oKSB7fSwKKyAg
ICBkb250RW51bUtleXM6IFsiYXJndW1lbnRzIiwgImNhbGxlciIsICJsZW5ndGgiLCAibmFtZSIs
ICJwcm90b3R5cGUiXSwKKyAgfSwKKyAgeworICAgIG5hbWU6ICJSZWdFeHAiLAorICAgIGNyZWF0
ZU9iamVjdDogKCkgPT4gLyg/OikvZywKKyAgICBkb250RW51bUtleXM6IFsibGFzdEluZGV4Il0s
CisgIH0sCisgIHsKKyAgICBuYW1lOiAiU3RyaW5nIiwKKyAgICBjcmVhdGVPYmplY3Q6ICgpID0+
IG5ldyBTdHJpbmcoImZvbyIpLAorICAgIGRvbnRFbnVtS2V5czogWyJsZW5ndGgiXSwKKyAgfSwK
KyAgeworICAgIG5hbWU6ICJBcmd1bWVudHMgKHN0cmljdCkiLAorICAgIGNyZWF0ZU9iamVjdDog
ZnVuY3Rpb24oZm9vKSB7ICJ1c2Ugc3RyaWN0IjsgcmV0dXJuIGFyZ3VtZW50czsgfSwKKyAgICBk
b250RW51bUtleXM6IFsibGVuZ3RoIiwgImNhbGxlZSJdLAorICB9LAorICB7CisgICAgbmFtZTog
IkFyZ3VtZW50cyAobm9uLXN0cmljdCkiLAorICAgIGNyZWF0ZU9iamVjdDogZnVuY3Rpb24oZm9v
KSB7IHJldHVybiBhcmd1bWVudHM7IH0sCisgICAgZG9udEVudW1LZXlzOiBbImxlbmd0aCIsICJj
YWxsZWUiXSwKKyAgfSwKKyAgeworICAgIG5hbWU6ICJSZWZsZWN0IiwKKyAgICBjcmVhdGVPYmpl
Y3Q6ICgpID0+ICR2bS5jcmVhdGVHbG9iYWxPYmplY3QoKS5SZWZsZWN0LAorICAgIGRvbnRFbnVt
S2V5czogWyJhcHBseSIsICJnZXQiLCAiaGFzIiwgInNldCJdLAorICB9LAorICB7CisgICAgbmFt
ZTogIkRhdGUucHJvdG90eXBlIiwKKyAgICBjcmVhdGVPYmplY3Q6ICgpID0+ICR2bS5jcmVhdGVH
bG9iYWxPYmplY3QoKS5EYXRlLnByb3RvdHlwZSwKKyAgICBkb250RW51bUtleXM6IFsidG9JU09T
dHJpbmciLCAiZ2V0VGltZSIsICJzZXRZZWFyIl0sCisgIH0sCitdOworCisvLyBiYXNpYyB0ZXN0
cworZm9yIChjb25zdCB0IG9mIHRlc3RDYXNlcykgeworICBhc3NlcnQoIWNvbnRhaW5zKGZvcklu
KHQuY3JlYXRlT2JqZWN0KCkpLCB0LmRvbnRFbnVtS2V5cyksIHQubmFtZSk7CisgIGFzc2VydCgh
Y29udGFpbnMoT2JqZWN0LmtleXModC5jcmVhdGVPYmplY3QoKSksIHQuZG9udEVudW1LZXlzKSwg
dC5uYW1lKTsKKworICBhc3NlcnQoY29udGFpbnMoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMo
dC5jcmVhdGVPYmplY3QoKSksIHQuZG9udEVudW1LZXlzKSwgdC5uYW1lKTsKKyAgYXNzZXJ0KGNv
bnRhaW5zKFJlZmxlY3Qub3duS2V5cyh0LmNyZWF0ZU9iamVjdCgpKSwgdC5kb250RW51bUtleXMp
LCB0Lm5hbWUpOworfQorCisvLyBzaGFkb3dpbmc6IERvbnRFbnVtID0+IEVudW0KK2ZvciAoY29u
c3QgdCBvZiB0ZXN0Q2FzZXMpIHsKKyAgYXNzZXJ0KAorICAgICFjb250YWlucygKKyAgICAgIGZv
ckluKG1ha2VQcm90b3R5cGVDaGFpbih0LmNyZWF0ZU9iamVjdCgpLCBtYWtlT2JqZWN0KHQuZG9u
dEVudW1LZXlzKSkpLAorICAgICAgdC5kb250RW51bUtleXMsCisgICAgKSwKKyAgICB0Lm5hbWUs
CisgICk7Cit9CisKKy8vIHNoYWRvd2luZzoge30gPT4gRG9udEVudW0gPT4ge30gPT4gRW51bQor
Zm9yIChjb25zdCB0IG9mIHRlc3RDYXNlcykgeworICBhc3NlcnQoCisgICAgIWNvbnRhaW5zKAor
ICAgICAgZm9ySW4obWFrZVByb3RvdHlwZUNoYWluKHt9LCB0LmNyZWF0ZU9iamVjdCgpLCB7fSwg
bWFrZU9iamVjdCh0LmRvbnRFbnVtS2V5cykpKSwKKyAgICAgIHQuZG9udEVudW1LZXlzLAorICAg
ICksCisgICAgdC5uYW1lLAorICApOworfQorCisvLyBzaGFkb3dpbmc6IERvbnRFbnVtID0+IHt9
ID0+IEVudW0gPT4ge30gPT4gRW51bQorZm9yIChjb25zdCB0IG9mIHRlc3RDYXNlcykgeworICBh
c3NlcnQoCisgICAgIWNvbnRhaW5zKAorICAgICAgZm9ySW4obWFrZVByb3RvdHlwZUNoYWluKHQu
Y3JlYXRlT2JqZWN0KCksIHt9LCBtYWtlT2JqZWN0KHQuZG9udEVudW1LZXlzKSwge30sIG1ha2VP
YmplY3QodC5kb250RW51bUtleXMpKSksCisgICAgICB0LmRvbnRFbnVtS2V5cywKKyAgICApLAor
ICAgIHQubmFtZSwKKyAgKTsKK30KKworLy8gc2hhZG93aW5nOiB7fSA9PiBEb250RW51bSAoZW51
bWVyYWJsZTogdHJ1ZSA9PiBmYWxzZSkgPT4ge30gPT4gRW51bQorZm9yIChjb25zdCB0IG9mIHRl
c3RDYXNlcykgeworICBjb25zdCBkb250RW51bU9iamVjdCA9IHQuY3JlYXRlT2JqZWN0KCk7Cisg
IGNvbnN0IHRhcmdldCA9IG1ha2VQcm90b3R5cGVDaGFpbih7fSwgZG9udEVudW1PYmplY3QsIHt9
LCBtYWtlT2JqZWN0KHQuZG9udEVudW1LZXlzKSk7CisgIGFzc2VydCghY29udGFpbnMoZm9ySW4o
dGFyZ2V0KSwgdC5kb250RW51bUtleXMpLCB0Lm5hbWUpOworCisgIGNvbnN0IGVudW1LZXlzID0g
dC5kb250RW51bUtleXMuZmlsdGVyKGtleSA9PiBSZWZsZWN0LmRlZmluZVByb3BlcnR5KGRvbnRF
bnVtT2JqZWN0LCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSB9KSk7CisgIGFzc2VydChjb250YWlu
cyhmb3JJbih0YXJnZXQpLCBlbnVtS2V5cyksIHQubmFtZSk7Cit9CisKKy8vIHNoYWRvd2luZzog
e30gPT4gRG9udEVudW0gKGRlbGV0ZSBub24tZW51bWVyYWJsZSBrZXlzKSA9PiB7fSA9PiBFbnVt
Citmb3IgKGNvbnN0IHQgb2YgdGVzdENhc2VzKSB7CisgIGNvbnN0IGRvbnRFbnVtT2JqZWN0ID0g
dC5jcmVhdGVPYmplY3QoKTsKKyAgY29uc3QgdGFyZ2V0ID0gbWFrZVByb3RvdHlwZUNoYWluKHt9
LCBkb250RW51bU9iamVjdCwge30sIG1ha2VPYmplY3QodC5kb250RW51bUtleXMpKTsKKyAgYXNz
ZXJ0KCFjb250YWlucyhmb3JJbih0YXJnZXQpLCB0LmRvbnRFbnVtS2V5cyksIHQubmFtZSk7CisK
KyAgY29uc3QgZW51bUtleXMgPSB0LmRvbnRFbnVtS2V5cy5maWx0ZXIoa2V5ID0+IFJlZmxlY3Qu
ZGVsZXRlUHJvcGVydHkoZG9udEVudW1PYmplY3QsIGtleSkpOworICBhc3NlcnQoY29udGFpbnMo
Zm9ySW4odGFyZ2V0KSwgZW51bUtleXMpLCB0Lm5hbWUpOworfQorCisvLyBzaGFkb3dpbmc6IHt9
ID0+IERvbnRFbnVtIChtYXRlcmlhbGl6ZWQpID0+IHt9ID0+IEVudW0KK2ZvciAoY29uc3QgdCBv
ZiB0ZXN0Q2FzZXMpIHsKKyAgY29uc3QgZG9udEVudW1PYmplY3QgPSB0LmNyZWF0ZU9iamVjdCgp
OworICBjb25zdCB0YXJnZXQgPSBtYWtlUHJvdG90eXBlQ2hhaW4oe30sIGRvbnRFbnVtT2JqZWN0
LCB7fSwgbWFrZU9iamVjdCh0LmRvbnRFbnVtS2V5cykpOworICBhc3NlcnQoIWNvbnRhaW5zKGZv
ckluKHRhcmdldCksIHQuZG9udEVudW1LZXlzKSwgdC5uYW1lKTsKKworICBjb25zdCBkb250RW51
bUtleXMgPSB0LmRvbnRFbnVtS2V5cy5maWx0ZXIoa2V5ID0+IHsKKyAgICBjb25zdCBkZXNjID0g
T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihkb250RW51bU9iamVjdCwga2V5KTsKKyAg
ICBpZiAoIVJlZmxlY3QuZGVsZXRlUHJvcGVydHkoZG9udEVudW1PYmplY3QsIGtleSkpIHJldHVy
biBmYWxzZTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZG9udEVudW1PYmplY3QsIGtleSwg
ZGVzYyk7CisgICAgcmV0dXJuIHRydWU7CisgIH0pOworCisgIGlmIChkb250RW51bUtleXMubGVu
Z3RoKQorICAgIGFzc2VydCghY29udGFpbnMoZm9ySW4odGFyZ2V0KSwgZG9udEVudW1LZXlzKSwg
dC5uYW1lKTsKK30KKworLy8gaGVscGVycworZnVuY3Rpb24gYXNzZXJ0KHZhbHVlLCBuYW1lKSB7
CisgIGlmICghdmFsdWUpCisgICAgdGhyb3cgbmV3IEVycm9yKGBCYWQgdmFsdWU6ICR7dmFsdWV9
LiBUZXN0IGNhc2U6ICR7bmFtZX0uYCk7Cit9CisKK2Z1bmN0aW9uIGNvbnRhaW5zKGFycmF5LCBz
dWJhcnJheSkgeworICByZXR1cm4gc3ViYXJyYXkuZXZlcnkoaXRlbSA9PiBhcnJheS5pbmNsdWRl
cyhpdGVtKSk7Cit9CisKK2Z1bmN0aW9uIGZvckluKG9iamVjdCkgeworICBjb25zdCBrZXlzID0g
W107CisgIGZvciAoY29uc3Qga2V5IGluIG9iamVjdCkKKyAgICBrZXlzLnB1c2goa2V5KTsKKyAg
cmV0dXJuIGtleXM7Cit9CisKK2Z1bmN0aW9uIG1ha2VQcm90b3R5cGVDaGFpbiguLi5vYmplY3Rz
KSB7CisgIG9iamVjdHMucmVkdWNlKChvYmplY3QsIHByb3RvdHlwZSkgPT4geworICAgIE9iamVj
dC5zZXRQcm90b3R5cGVPZihvYmplY3QsIHByb3RvdHlwZSk7CisgICAgcmV0dXJuIHByb3RvdHlw
ZTsKKyAgfSk7CisgIHJldHVybiBvYmplY3RzWzBdOworfQorCitmdW5jdGlvbiBtYWtlT2JqZWN0
KGtleXMpIHsKKyAgY29uc3Qgb2JqZWN0ID0ge307CisgIGZvciAoY29uc3Qga2V5IG9mIGtleXMp
CisgICAgb2JqZWN0W2tleV0gPSBrZXk7CisgIHJldHVybiBvYmplY3Q7Cit9CkluZGV4OiBKU1Rl
c3RzL3Rlc3QyNjIvZXhwZWN0YXRpb25zLnlhbWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy90ZXN0
MjYyL2V4cGVjdGF0aW9ucy55YW1sCShyZXZpc2lvbiAyNzAzNzMpCisrKyBKU1Rlc3RzL3Rlc3Qy
NjIvZXhwZWN0YXRpb25zLnlhbWwJKHdvcmtpbmcgY29weSkKQEAgLTI2NjksMTYgKzI2NjksMTAg
QEAgdGVzdC9sYW5ndWFnZS9zdGF0ZW1lbnRzL2Zvci1hd2FpdC1vZi90aQogdGVzdC9sYW5ndWFn
ZS9zdGF0ZW1lbnRzL2Zvci1hd2FpdC1vZi90aWNrcy13aXRoLXN5bmMtaXRlci1yZXNvbHZlZC1w
cm9taXNlLWFuZC1jb25zdHJ1Y3Rvci1sb29rdXAuanM6CiAgIGRlZmF1bHQ6ICdUZXN0MjYyOkFz
eW5jVGVzdEZhaWx1cmU6VGVzdDI2MkVycm9yOiBUZXN0MjYyRXJyb3I6IEV4cGVjdGVkIFtwcmUs
IHRpY2sgMSwgY29uc3RydWN0b3IsIGNvbnN0cnVjdG9yLCB0aWNrIDIsIHRpY2sgMywgbG9vcCwg
dGljayA0LCBjb25zdHJ1Y3Rvcl0gYW5kIFtwcmUsIGNvbnN0cnVjdG9yLCBjb25zdHJ1Y3Rvciwg
dGljayAxLCB0aWNrIDIsIGxvb3AsIGNvbnN0cnVjdG9yLCB0aWNrIDMsIHRpY2sgNCwgcG9zdF0g
dG8gaGF2ZSB0aGUgc2FtZSBjb250ZW50cy4gVGlja3MgYW5kIGNvbnN0cnVjdG9yIGxvb2t1cHMn
CiAgIHN0cmljdCBtb2RlOiAnVGVzdDI2MjpBc3luY1Rlc3RGYWlsdXJlOlRlc3QyNjJFcnJvcjog
VGVzdDI2MkVycm9yOiBFeHBlY3RlZCBbcHJlLCB0aWNrIDEsIGNvbnN0cnVjdG9yLCBjb25zdHJ1
Y3RvciwgdGljayAyLCB0aWNrIDMsIGxvb3AsIHRpY2sgNCwgY29uc3RydWN0b3JdIGFuZCBbcHJl
LCBjb25zdHJ1Y3RvciwgY29uc3RydWN0b3IsIHRpY2sgMSwgdGljayAyLCBsb29wLCBjb25zdHJ1
Y3RvciwgdGljayAzLCB0aWNrIDQsIHBvc3RdIHRvIGhhdmUgdGhlIHNhbWUgY29udGVudHMuIFRp
Y2tzIGFuZCBjb25zdHJ1Y3RvciBsb29rdXBzJwotdGVzdC9sYW5ndWFnZS9zdGF0ZW1lbnRzL2Zv
ci1pbi8xMi42LjQtMi5qczoKLSAgZGVmYXVsdDogJ1Rlc3QyNjJFcnJvcjogYWNjZXNzZWRQcm9w
IEV4cGVjdGVkIFNhbWVWYWx1ZSjCq3RydWXCuywgwqtmYWxzZcK7KSB0byBiZSB0cnVlJwotICBz
dHJpY3QgbW9kZTogJ1Rlc3QyNjJFcnJvcjogYWNjZXNzZWRQcm9wIEV4cGVjdGVkIFNhbWVWYWx1
ZSjCq3RydWXCuywgwqtmYWxzZcK7KSB0byBiZSB0cnVlJwogdGVzdC9sYW5ndWFnZS9zdGF0ZW1l
bnRzL2Zvci1pbi9oZWFkLWxocy1sZXQuanM6CiAgIGRlZmF1bHQ6ICJTeW50YXhFcnJvcjogQ2Fu
bm90IHVzZSB0aGUga2V5d29yZCAnaW4nIGFzIGEgbGV4aWNhbCB2YXJpYWJsZSBuYW1lLiIKIHRl
c3QvbGFuZ3VhZ2Uvc3RhdGVtZW50cy9mb3ItaW4vaWRlbnRpZmllci1sZXQtYWxsb3dlZC1hcy1s
ZWZ0aGFuZHNpZGUtZXhwcmVzc2lvbi1ub3Qtc3RyaWN0LmpzOgogICBkZWZhdWx0OiAiU3ludGF4
RXJyb3I6IENhbm5vdCB1c2UgdGhlIGtleXdvcmQgJ2luJyBhcyBhIGxleGljYWwgdmFyaWFibGUg
bmFtZS4iCi10ZXN0L2xhbmd1YWdlL3N0YXRlbWVudHMvZm9yLWluL29yZGVyLWVudW1lcmFibGUt
c2hhZG93ZWQuanM6Ci0gIGRlZmF1bHQ6ICdUZXN0MjYyRXJyb3I6IEV4cGVjdGVkIFtwMSwgcDJd
IGFuZCBbcDFdIHRvIGhhdmUgdGhlIHNhbWUgY29udGVudHMuICcKLSAgc3RyaWN0IG1vZGU6ICdU
ZXN0MjYyRXJyb3I6IEV4cGVjdGVkIFtwMSwgcDJdIGFuZCBbcDFdIHRvIGhhdmUgdGhlIHNhbWUg
Y29udGVudHMuICcKIHRlc3QvbGFuZ3VhZ2Uvc3RhdGVtZW50cy9mb3ItaW4vc2NvcGUtYm9keS1s
ZXgtb3Blbi5qczoKICAgZGVmYXVsdDogJ1Rlc3QyNjJFcnJvcjogRXhwZWN0ZWQgYSBSZWZlcmVu
Y2VFcnJvciB0byBiZSB0aHJvd24gYnV0IG5vIGV4Y2VwdGlvbiB3YXMgdGhyb3duIGF0IGFsbCcK
ICAgc3RyaWN0IG1vZGU6ICdUZXN0MjYyRXJyb3I6IEV4cGVjdGVkIGEgUmVmZXJlbmNlRXJyb3Ig
dG8gYmUgdGhyb3duIGJ1dCBubyBleGNlcHRpb24gd2FzIHRocm93biBhdCBhbGwnCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3MDM3MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNDEgQEAKKzIwMjAt
MTItMDIgIEFsZXhleSBTaHZheWthICA8c2h2YWlrYWxlc2hAZ21haWwuY29tPgorCisgICAgICAg
IE5vbi1lbnVtZXJhYmxlIHByb3BlcnR5IGZhaWxzIHRvIHNoYWRvdyBpbmhlcml0ZWQgZW51bWVy
YWJsZSBwcm9wZXJ0eSBmcm9tIGZvci1pbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9Mzg5NzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBXaGlsZSBmb3IvaW4gd2FzIGluaXRpYWxseSBzcGVjaWZpZWQgd2l0
aCBub3Rpb24gb2YgInNoYWRvd2luZyIsIGl0IHdhc24ndCBjbGFyaWZpZWQKKyAgICAgICAgdW50
aWwgRVM1IHRoYXQgW1tFbnVtZXJhYmxlXV0gYXR0cmlidXRlcyBhcmUgaWdub3JlZCB3aGVuIGRl
dGVybWluaW5nIGlmIGEgcHJvcGVydHkKKyAgICAgICAgaGFzIGFscmVhZHkgYmVlbiBwcm9jZXNz
ZWQuIFJlY2VudGx5LCBmb3IvaW4gc3BlYyB3YXMgZXhwYW5kZWQgWzFdIHRvIHBpbiBkb3duIGNv
bW1vbgorICAgICAgICBjYXNlIGVudW1lcmF0aW9uIGFzIGl0J3MgY3VycmVudGx5IGltcGxlbWVu
dGVkIGJ5IFY4IGFuZCBTcGlkZXJNb25rZXkuCisKKyAgICAgICAgU2luY2Uga2VlcGluZyB0cmFj
ayBvZiBEb250RW51bSBwcm9wZXJ0aWVzIGlzIGEgbWFzc2l2ZSBzbG93ZG93biBmb3IgdW5jYWNo
ZWQgcnVucworICAgICAgICAod2l0aCBhbnkgZGF0YSBzdHJ1Y3R1cmUgdXNlZCksIHRoaXMgcGF0
Y2ggc2ltcGx5IGFkZHMgW1tFbnVtZXJhYmxlXV0gY2hlY2sgdG8KKyAgICAgICAgaGFzX3tpbmRl
eGVkLHN0cnVjdHVyZSxnZW5lcmljfV9wcm9wZXJ0eSBieXRlY29kZSBvcHMgYW5kIGRvZXMgcmVu
YW1pbmcgY2hvcmVzLgorCisgICAgICAgIENvbW1vbiBjb2RlIGlzIG5vdyBzaGFyZWQgYmV0d2Vl
biBIYXNJbmRleGVkUHJvcGVydHkgKGVtaXR0ZWQgZm9yIGAwIGluIGFycmApIGFuZAorICAgICAg
ICBIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5IERGRyBub2RlcyB2aWEgcGFzc2luZyBkaWZm
ZXJlbnQgc2xvdyBwYXRoIG9wcyByYXRoZXIKKyAgICAgICAgdGhhbiBoYXZpbmcgT3BJbmZvIHdp
dGggUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGUsIHdoaWNoIGlzIGEgbmljZSByZWZh
Y3Rvci4KKworICAgICAgICBXaGlsZSB0aGlzIGNoYW5nZSBhbGlnbnMgY29tbW9uIGNhc2UgZm9y
L2luIGVudW1lcmF0aW9uIHdpdGggdGhlIHNwZWMgYW5kIG90aGVyCisgICAgICAgIGVuZ2luZXMs
IGl0IGFsc28gaW50cm9kdWNlcyBhIGZldyBvYnNlcnZhYmxlIGRpc2NyZXBhbmNpZXMgZnJvbSBW
OCBhbmQgU3BpZGVyTW9ua2V5LAorICAgICAgICB3aGljaCBhcmUgcGVybWl0dGVkIGJ5IHRoZSBz
cGVjIFsyXToKKyAgICAgICAgYSkgcHJvcGVydGllcyB0aGF0IGhhdmUgYmVlbiByZWRlZmluZWQg
YXMgRG9udEVudW0gd2l0aGluIGxvb3AgYm9keSBhcmUgc2tpcHBlZCwKKyAgICAgICAgICAgd2hp
Y2ggbWF0Y2hlcyB0aGUgc3BlYyBbM10gYW5kIHNlZW1zIGxpa2UgZXhwZWN0ZWQgYmVoYXZpb3I7
CisgICAgICAgIGIpICJzaGFkb3dpbmciIGlzIGJyb2tlbiBpZiBhIERvbnRFbnVtIHByb3BlcnR5
IG9mIGFscmVhZHkgdmlzaXRlZCBvYmplY3QgaXMKKyAgICAgICAgICAgYWRkZWQgLyBkZWxldGVk
IC8gcmVkZWZpbmVkIHdpdGhpbiBsb29wIGJvZHksIHdoaWNoIChwcmV0dHkgbXVjaCkgbmV2ZXIg
aGFwcGVucy4KKworICAgICAgICBUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgaW52YXJpYW50
OiBhbGwgcHJvcGVydGllcyBnZXRPd24qUHJvcGVydHlOYW1lcygpIHJldHVybnMKKyAgICAgICAg
aW4gRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6RXhjbHVkZSBzaG91bGQgYmUgcmVwb3J0ZWQgYXMg
W1tFbnVtZXJhYmxlXV0gYnkKKyAgICAgICAgZ2V0T3duUHJvcGVydHlTbG90KCkuIEpTQ2FsbGJh
Y2tPYmplY3QgYW5kIFJ1bnRpbWVBcnJheSBhcmUgZml4ZWQgdG8gZm9sbG93IGl0LgorCisgICAg
ICAgIGZvci9pbiBhbmQgT2JqZWN0LmtleXMgbWljcm9iZW5jaG1hcmtzIGFyZSBuZXV0cmFsLiBU
aGlzIGNoYW5nZSBkb2VzIG5vdCBhZmZlY3QKKyAgICAgICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yIGNhY2hpbmcsIG5vciBmYXN0IHBhdGhzIG9mIGl0cyBieXRlY29kZXMuCisKKyAgICAgICAg
WzFdOiBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9lY21hMjYyL3B1bGwvMTc5MQorICAgICAgICBb
Ml06IGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZW51bWVyYXRlLW9iamVjdC1wcm9wZXJ0
aWVzIChsYXN0IHBhcmFncmFwaCkKKyAgICAgICAgWzNdOiBodHRwczovL3RjMzkuZXMvZWNtYTI2
Mi8jc2VjLSVmb3Jpbml0ZXJhdG9ycHJvdG90eXBlJS5uZXh0IChzdGVwIDcuYi5paWkpCisKKyAg
ICAgICAgKiBBUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oOgorICAgICAgICAoSlNDOjpK
U0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgICog
QVBJL3Rlc3RzL3Rlc3RhcGlTY3JpcHRzL3Rlc3RhcGkuanM6CisgICAgICAgICogYnl0ZWNvZGUv
Qnl0ZWNvZGVMaXN0LnJiOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmNwcDoK
KyAgICAgICAgKEpTQzo6Y29tcHV0ZVVzZXNGb3JCeXRlY29kZUluZGV4SW1wbCk6CisgICAgICAg
IChKU0M6OmNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVJbmRleEltcGwpOgorICAgICAgICAqIGJ5dGVj
b2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZmluaXNoQ3JlYXRp
b24pOgorICAgICAgICAqIGJ5dGVjb2RlL09wY29kZS5oOgorICAgICAgICAqIGJ5dGVjb21waWxl
ci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0SGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkJ5dGVj
b2RlR2VuZXJhdG9yOjplbWl0SGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5KToKKyAgICAg
ICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRIYXNFbnVtZXJhYmxlUHJvcGVydHkpOgor
ICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEhhc0dlbmVyaWNQcm9wZXJ0eSk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SGFzSW5kZXhl
ZFByb3BlcnR5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVt
aXRIYXNTdHJ1Y3R1cmVQcm9wZXJ0eSk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmg6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdl
bi5jcHA6CisgICAgICAgIChKU0M6OkZvckluTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAg
KiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6REZH
OjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHMp
OgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAqIGRmZy9ERkdDYXBhYmls
aXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNhcGFiaWxpdHlMZXZlbCk6CisgICAgICAg
ICogZGZnL0RGR0Nsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToK
KyAgICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpkb2VzR0Mp
OgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpG
aXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmNv
bnZlcnRUb0hhc0luZGV4ZWRQcm9wZXJ0eSk6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNBcnJheU1vZGUpOgorICAgICAgICAoSlNDOjpERkc6
Ok5vZGU6Omhhc0ludGVybmFsTWV0aG9kVHlwZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkRGRzo6Tm9kZTo6aW50ZXJuYWxNZXRob2RUeXBlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6REZHOjpOb2RlOjpzZXRJbnRlcm5hbE1ldGhvZFR5cGUpOiBEZWxldGVkLgorICAg
ICAgICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04pOgorICAgICAg
ICAqIGRmZy9ERkdPcGVyYXRpb25zLmg6CisgICAgICAgICogZGZnL0RGR1ByZWRpY3Rpb25Qcm9w
YWdhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHU1NBTG93ZXJpbmdQaGFzZS5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6U1NBTG93ZXJpbmdQaGFzZTo6aGFuZGxlTm9kZSk6CisgICAg
ICAgICogZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpzYWZlVG9F
eGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlSGFzRW51bWVyYWJsZVByb3BlcnR5KToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUhhc0VudW1lcmFibGVT
dHJ1Y3R1cmVQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVIYXNJbmRleGVkUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlSGFzR2VuZXJpY1Byb3BlcnR5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUhhc1N0cnVjdHVyZVByb3BlcnR5KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKiBkZmcvREZH
U3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZnRs
L0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6Cisg
ICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZH
OjpMb3dlckRGR1RvQjM6OmNvbXBpbGVOb2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxv
d2VyREZHVG9CMzo6Y29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkZU
TDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVIYXNFbnVtZXJhYmxlUHJvcGVydHkpOgorICAg
ICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlSGFzRW51bWVyYWJsZVN0
cnVjdHVyZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6
Y29tcGlsZUhhc0dlbmVyaWNQcm9wZXJ0eSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkZUTDo6
REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVIYXNTdHJ1Y3R1cmVQcm9wZXJ0eSk6IERlbGV0ZWQu
CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBp
bGVNYWluUGFzcyk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMp
OgorICAgICAgICAqIGppdC9KSVQuaDoKKyAgICAgICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9oYXNfZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJvcGVy
dHkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9w
cm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaGFzX2VudW1lcmFibGVf
aW5kZXhlZF9wcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9oYXNfc3RydWN0
dXJlX3Byb3BlcnR5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2hhc19p
bmRleGVkX3Byb3BlcnR5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19v
cF9oYXNfaW5kZXhlZF9wcm9wZXJ0eSk6IERlbGV0ZWQuCisgICAgICAgICogaml0L0pJVE9wY29k
ZXMzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9oYXNfZW51bWVyYWJsZV9z
dHJ1Y3R1cmVfcHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaGFzX2VudW1l
cmFibGVfaW5kZXhlZF9wcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bf
aGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
SklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eSk6IERlbGV0ZWQuCisgICAgICAg
ICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0pJVF9P
UEVSQVRJT04pOgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmg6CisgICAgICAgICogbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlcjY0LmFzbToKKyAgICAgICAgKiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHA6Cisg
ICAgICAgIChKU0M6OkpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSCk6CisgICAgICAgICogcnVu
dGltZS9Db21tb25TbG93UGF0aHMuaDoKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0LmNwcDoK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6Omhhc1Byb3BlcnR5IGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6Omhhc0VudW1lcmFibGVQcm9wZXJ0eSBjb25zdCk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjpoYXNQcm9wZXJ0eUdlbmVyaWMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAq
IHJ1bnRpbWUvSlNPYmplY3QuaDoKKwogMjAyMC0xMi0wMiAgUm9zcyBLaXJzbGluZyAgPHJvc3Mu
a2lyc2xpbmdAc29ueS5jb20+CiAKICAgICAgICAgJVR5cGVkQXJyYXklI3NsaWNlIHNob3VsZG4n
dCBjYXJlIGFib3V0IHNvdXJjZSBidWZmZXIgZGV0YWNobWVudCBpZiB0aGVyZSdzIG5vdGhpbmcg
dG8gY29weQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0
RnVuY3Rpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Nh
bGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgJKHJldmlzaW9uIDI3MDM3MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xNjQsMTIgKzE2NCwxNCBAQCBib29sIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6Z2V0
T3duUHJvCiAgICAgaWYgKFN0cmluZ0ltcGwqIG5hbWUgPSBwcm9wZXJ0eU5hbWUudWlkKCkpIHsK
ICAgICAgICAgZm9yIChKU0NsYXNzUmVmIGpzQ2xhc3MgPSB0aGlzT2JqZWN0LT5jbGFzc1JlZigp
OyBqc0NsYXNzOyBqc0NsYXNzID0ganNDbGFzcy0+cGFyZW50Q2xhc3MpIHsKICAgICAgICAgICAg
IC8vIG9wdGlvbmFsIG9wdGltaXphdGlvbiB0byBieXBhc3MgZ2V0UHJvcGVydHkgaW4gY2FzZXMg
d2hlbiB3ZSBvbmx5IG5lZWQgdG8ga25vdyBpZiB0aGUgcHJvcGVydHkgZXhpc3RzCisgICAgICAg
ICAgICAvLyBGSVhNRTogU2V0IFJlYWRPbmx5IGNvbmRpdGlvbmFsbHksIGJhc2VkIG9uIHNldFBy
b3BlcnR5IHByZXNlbmNlIGluIGNsYXNzIGluaGVyaXRhbmNlIGNoYWluLgorICAgICAgICAgICAg
dW5zaWduZWQgYXR0cmlidXRlcyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJp
YnV0ZTo6UmVhZE9ubHkpOwogICAgICAgICAgICAgaWYgKEpTT2JqZWN0SGFzUHJvcGVydHlDYWxs
YmFjayBoYXNQcm9wZXJ0eSA9IGpzQ2xhc3MtPmhhc1Byb3BlcnR5KSB7CiAgICAgICAgICAgICAg
ICAgaWYgKCFwcm9wZXJ0eU5hbWVSZWYpCiAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFt
ZVJlZiA9IE9wYXF1ZUpTU3RyaW5nOjp0cnlDcmVhdGUobmFtZSk7CiAgICAgICAgICAgICAgICAg
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGdsb2JhbE9iamVjdCk7CiAgICAgICAg
ICAgICAgICAgaWYgKGhhc1Byb3BlcnR5KGN0eCwgdGhpc1JlZiwgcHJvcGVydHlOYW1lUmVmLmdl
dCgpKSkgewotICAgICAgICAgICAgICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBQ
cm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0s
IGdldENhbGxiYWNrR2V0dGVyKCkpOworICAgICAgICAgICAgICAgICAgICBzbG90LnNldEN1c3Rv
bSh0aGlzT2JqZWN0LCBhdHRyaWJ1dGVzLCBnZXRDYWxsYmFja0dldHRlcigpKTsKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fSBlbHNlIGlmIChKU09iamVjdEdldFByb3BlcnR5Q2FsbGJhY2sgZ2V0UHJvcGVydHkgPSBqc0Ns
YXNzLT5nZXRQcm9wZXJ0eSkgewpAQCAtMTgzLDI5ICsxODUsMzAgQEAgYm9vbCBKU0NhbGxiYWNr
T2JqZWN0PFBhcmVudD46OmdldE93blBybwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICBpZiAoZXhjZXB0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAgIHRocm93RXhjZXB0aW9u
KGdsb2JhbE9iamVjdCwgc2NvcGUsIHRvSlMoZ2xvYmFsT2JqZWN0LCBleGNlcHRpb24pKTsKLSAg
ICAgICAgICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCBQcm9wZXJ0eUF0dHJp
YnV0ZTo6UmVhZE9ubHkgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0sIGpzVW5kZWZpbmVk
KCkpOworICAgICAgICAgICAgICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIGF0dHJp
YnV0ZXMsIGpzVW5kZWZpbmVkKCkpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdCwgUHJvcGVydHlBdHRyaWJ1dGU6
OlJlYWRPbmx5IHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtLCB0b0pTKGdsb2JhbE9iamVj
dCwgdmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0
LCBhdHRyaWJ1dGVzLCB0b0pTKGdsb2JhbE9iamVjdCwgdmFsdWUpKTsKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgCiAgICAgICAgICAgICBpZiAoT3BhcXVlSlNDbGFzc1N0YXRpY1ZhbHVlc1RhYmxl
KiBzdGF0aWNWYWx1ZXMgPSBqc0NsYXNzLT5zdGF0aWNWYWx1ZXMoZ2xvYmFsT2JqZWN0KSkgewot
ICAgICAgICAgICAgICAgIGlmIChzdGF0aWNWYWx1ZXMtPmNvbnRhaW5zKG5hbWUpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKFN0YXRpY1ZhbHVlRW50cnkqIGVudHJ5ID0gc3RhdGljVmFsdWVzLT5n
ZXQobmFtZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IGdldFN0YXRpY1ZhbHVl
KCkgcGVyZm9ybXMgdGhlIHNhbWUgbG9vcCAmIGNoZWNrcyBqdXN0IHRvIGFjcXVpcmUgYGVudHJ5
YC4KICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHRoaXNPYmplY3QtPmdldFN0
YXRpY1ZhbHVlKGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKTsKICAgICAgICAgICAgICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogICAgICAgICAgICAgICAgICAg
ICBpZiAodmFsdWUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUodGhp
c09iamVjdCwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgUHJvcGVydHlBdHRyaWJ1dGU6
OkRvbnRFbnVtLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzbG90LnNldFZhbHVl
KHRoaXNPYmplY3QsIGVudHJ5LT5hdHRyaWJ1dGVzLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKE9wYXF1
ZUpTQ2xhc3NTdGF0aWNGdW5jdGlvbnNUYWJsZSogc3RhdGljRnVuY3Rpb25zID0ganNDbGFzcy0+
c3RhdGljRnVuY3Rpb25zKGdsb2JhbE9iamVjdCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoc3Rh
dGljRnVuY3Rpb25zLT5jb250YWlucyhuYW1lKSkgewotICAgICAgICAgICAgICAgICAgICBzbG90
LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0sIGdldFN0YXRpY0Z1bmN0aW9uR2V0dGVyKCkpOworICAg
ICAgICAgICAgICAgIGlmIChTdGF0aWNGdW5jdGlvbkVudHJ5KiBlbnRyeSA9IHN0YXRpY0Z1bmN0
aW9ucy0+Z2V0KG5hbWUpKSB7CisgICAgICAgICAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRo
aXNPYmplY3QsIGVudHJ5LT5hdHRyaWJ1dGVzLCBnZXRTdGF0aWNGdW5jdGlvbkdldHRlcigpKTsK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBp
U2NyaXB0cy90ZXN0YXBpLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvdGVzdHMvdGVzdGFwaVNjcmlwdHMvdGVzdGFwaS5qcwkocmV2aXNpb24gMjcwMzczKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpU2NyaXB0cy90ZXN0YXBpLmpz
CSh3b3JraW5nIGNvcHkpCkBAIC04NCw2ICs4NCwxNiBAQCB0aGlzLmdsb2JhbFN0YXRpY0Z1bmN0
aW9uMiA9IGZ1bmN0aW9uKCkgCiBzaG91bGRCZSgiZ2xvYmFsU3RhdGljRnVuY3Rpb24yKCk7Iiwg
MjApOwogc2hvdWxkQmUoInRoaXMuZ2xvYmFsU3RhdGljRnVuY3Rpb24yKCk7IiwgMjApOwogCit2
YXIgZ2xvYmFsU3RhdGljVmFsdWUyRGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IodGhpcywgImdsb2JhbFN0YXRpY1ZhbHVlMiIpOworc2hvdWxkQmUoJ3R5cGVvZiBn
bG9iYWxTdGF0aWNWYWx1ZTJEZXNjcmlwdG9yJywgIm9iamVjdCIpOworc2hvdWxkQmUoJ2dsb2Jh
bFN0YXRpY1ZhbHVlMkRlc2NyaXB0b3Iud3JpdGFibGUnLCBmYWxzZSk7CitzaG91bGRCZSgnZ2xv
YmFsU3RhdGljVmFsdWUyRGVzY3JpcHRvci5lbnVtZXJhYmxlJywgZmFsc2UpOworCit2YXIgZ2xv
YmFsU3RhdGljRnVuY3Rpb24zRGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IodGhpcywgImdsb2JhbFN0YXRpY0Z1bmN0aW9uMyIpOworc2hvdWxkQmUoJ3R5cGVvZiBn
bG9iYWxTdGF0aWNGdW5jdGlvbjNEZXNjcmlwdG9yJywgIm9iamVjdCIpOworc2hvdWxkQmUoJ2ds
b2JhbFN0YXRpY0Z1bmN0aW9uM0Rlc2NyaXB0b3Iud3JpdGFibGUnLCBmYWxzZSk7CitzaG91bGRC
ZSgnZ2xvYmFsU3RhdGljRnVuY3Rpb24zRGVzY3JpcHRvci5lbnVtZXJhYmxlJywgZmFsc2UpOwor
CiBmdW5jdGlvbiBpQW1Ob3RBU3RhdGljRnVuY3Rpb24oKSB7IHJldHVybiAxMDsgfQogc2hvdWxk
QmUoImlBbU5vdEFTdGF0aWNGdW5jdGlvbigpOyIsIDEwKTsKIHRoaXMuaUFtTm90QVN0YXRpY0Z1
bmN0aW9uID0gZnVuY3Rpb24oKSB7IHJldHVybiAyMDsgfQpAQCAtMTM0LDEyICsxNDQsMTIgQEAg
dmFyIGFsd2F5c09uZURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUAogc2hvdWxkQmUoJ3R5cGVv
ZiBhbHdheXNPbmVEZXNjcmlwdG9yJywgIm9iamVjdCIpOwogc2hvdWxkQmUoJ2Fsd2F5c09uZURl
c2NyaXB0b3IudmFsdWUnLCBNeU9iamVjdC5hbHdheXNPbmUpOwogc2hvdWxkQmUoJ2Fsd2F5c09u
ZURlc2NyaXB0b3IuY29uZmlndXJhYmxlJywgdHJ1ZSk7Ci1zaG91bGRCZSgnYWx3YXlzT25lRGVz
Y3JpcHRvci5lbnVtZXJhYmxlJywgZmFsc2UpOyAvLyBBY3R1YWxseSBpdCBpcy4KK3Nob3VsZEJl
KCdhbHdheXNPbmVEZXNjcmlwdG9yLmVudW1lcmFibGUnLCB0cnVlKTsKIHZhciBjYW50RmluZERl
c2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE15T2JqZWN0LCAiY2Fu
dEZpbmQiKTsKIHNob3VsZEJlKCd0eXBlb2YgY2FudEZpbmREZXNjcmlwdG9yJywgIm9iamVjdCIp
Owogc2hvdWxkQmUoJ2NhbnRGaW5kRGVzY3JpcHRvci52YWx1ZScsIE15T2JqZWN0LmNhbnRGaW5k
KTsKIHNob3VsZEJlKCdjYW50RmluZERlc2NyaXB0b3IuY29uZmlndXJhYmxlJywgdHJ1ZSk7Ci1z
aG91bGRCZSgnY2FudEZpbmREZXNjcmlwdG9yLmVudW1lcmFibGUnLCBmYWxzZSk7CitzaG91bGRC
ZSgnY2FudEZpbmREZXNjcmlwdG9yLmVudW1lcmFibGUnLCB0cnVlKTsKIHRyeSB7CiAgICAgLy8g
SWYgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKCkgcmV0dXJuZWQgYW4gYWNjZXNzIGRlc2NyaXB0
b3IsIHRoaXMgd291bGRuJ3QgdGhyb3cuCiAgICAgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcihNeU9iamVjdCwgInRocm93T25HZXQiKTsKQEAgLTE1MCw3ICsxNjAsNyBAQCB2YXIgbXlQ
cm9wZXJ0eU5hbWVEZXNjcmlwdG9yID0gT2JqZWN0LmdlCiBzaG91bGRCZSgndHlwZW9mIG15UHJv
cGVydHlOYW1lRGVzY3JpcHRvcicsICJvYmplY3QiKTsKIHNob3VsZEJlKCdteVByb3BlcnR5TmFt
ZURlc2NyaXB0b3IudmFsdWUnLCBNeU9iamVjdC5teVByb3BlcnR5TmFtZSk7CiBzaG91bGRCZSgn
bXlQcm9wZXJ0eU5hbWVEZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZScsIHRydWUpOwotc2hvdWxkQmUo
J215UHJvcGVydHlOYW1lRGVzY3JpcHRvci5lbnVtZXJhYmxlJywgZmFsc2UpOyAvLyBBY3R1YWxs
eSBpdCBpcy4KK3Nob3VsZEJlKCdteVByb3BlcnR5TmFtZURlc2NyaXB0b3IuZW51bWVyYWJsZScs
IHRydWUpOwogdHJ5IHsKICAgICAvLyBpZiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoKSByZXR1
cm5lZCBhbiBhY2Nlc3MgZGVzY3JpcHRvciwgdGhpcyB3b3VsZG4ndCB0aHJvdy4KICAgICBPYmpl
Y3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE15T2JqZWN0LCAiaGFzUHJvcGVydHlMaWUiKTsK
QEAgLTIzNywyMyArMjQ3LDIzIEBAIHZhciBiYXNlRHVwRGVzY3JpcHRvciA9IE9iamVjdC5nZXRP
d25Qcm8KIHNob3VsZEJlKCd0eXBlb2YgYmFzZUR1cERlc2NyaXB0b3InLCAib2JqZWN0Iik7CiBz
aG91bGRCZSgnYmFzZUR1cERlc2NyaXB0b3IudmFsdWUnLCBkZXJpdmVkLmJhc2VEdXApOwogc2hv
dWxkQmUoJ2Jhc2VEdXBEZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZScsIHRydWUpOwotc2hvdWxkQmUo
J2Jhc2VEdXBEZXNjcmlwdG9yLmVudW1lcmFibGUnLCBmYWxzZSk7CitzaG91bGRCZSgnYmFzZUR1
cERlc2NyaXB0b3IuZW51bWVyYWJsZScsIHRydWUpOwogdmFyIGJhc2VPbmx5RGVzY3JpcHRvciA9
IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZGVyaXZlZCwgImJhc2VPbmx5Iik7CiBz
aG91bGRCZSgndHlwZW9mIGJhc2VPbmx5RGVzY3JpcHRvcicsICJvYmplY3QiKTsKIHNob3VsZEJl
KCdiYXNlT25seURlc2NyaXB0b3IudmFsdWUnLCBkZXJpdmVkLmJhc2VPbmx5KTsKIHNob3VsZEJl
KCdiYXNlT25seURlc2NyaXB0b3IuY29uZmlndXJhYmxlJywgdHJ1ZSk7Ci1zaG91bGRCZSgnYmFz
ZU9ubHlEZXNjcmlwdG9yLmVudW1lcmFibGUnLCBmYWxzZSk7CitzaG91bGRCZSgnYmFzZU9ubHlE
ZXNjcmlwdG9yLmVudW1lcmFibGUnLCB0cnVlKTsKIHNob3VsZEJlKCdPYmplY3QuZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKGRlcml2ZWQsICJwcm90b09ubHkiKScsIHVuZGVmaW5lZCk7CiB2YXIg
cHJvdG9EdXBEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihkZXJp
dmVkLCAicHJvdG9EdXAiKTsKIHNob3VsZEJlKCd0eXBlb2YgcHJvdG9EdXBEZXNjcmlwdG9yJywg
Im9iamVjdCIpOwogc2hvdWxkQmUoJ3Byb3RvRHVwRGVzY3JpcHRvci52YWx1ZScsIGRlcml2ZWQu
cHJvdG9EdXApOwogc2hvdWxkQmUoJ3Byb3RvRHVwRGVzY3JpcHRvci5jb25maWd1cmFibGUnLCB0
cnVlKTsKLXNob3VsZEJlKCdwcm90b0R1cERlc2NyaXB0b3IuZW51bWVyYWJsZScsIGZhbHNlKTsK
K3Nob3VsZEJlKCdwcm90b0R1cERlc2NyaXB0b3IuZW51bWVyYWJsZScsIHRydWUpOwogdmFyIGRl
cml2ZWRPbmx5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZGVy
aXZlZCwgImRlcml2ZWRPbmx5Iik7CiBzaG91bGRCZSgndHlwZW9mIGRlcml2ZWRPbmx5RGVzY3Jp
cHRvcicsICJvYmplY3QiKTsKIHNob3VsZEJlKCdkZXJpdmVkT25seURlc2NyaXB0b3IudmFsdWUn
LCBkZXJpdmVkLmRlcml2ZWRPbmx5KTsKIHNob3VsZEJlKCdkZXJpdmVkT25seURlc2NyaXB0b3Iu
Y29uZmlndXJhYmxlJywgdHJ1ZSk7Ci1zaG91bGRCZSgnZGVyaXZlZE9ubHlEZXNjcmlwdG9yLmVu
dW1lcmFibGUnLCBmYWxzZSk7CitzaG91bGRCZSgnZGVyaXZlZE9ubHlEZXNjcmlwdG9yLmVudW1l
cmFibGUnLCB0cnVlKTsKIAogc2hvdWxkQmUoInVuZGVmaW5lZCBpbnN0YW5jZW9mIE15T2JqZWN0
IiwgZmFsc2UpOwogRXZpbEV4Y2VwdGlvbk9iamVjdC5oYXNJbnN0YW5jZSA9IGZ1bmN0aW9uIGYo
KSB7IHJldHVybiBmKCk7IH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Qnl0ZWNvZGVMaXN0LnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9CeXRlY29kZUxpc3QucmIJKHJldmlzaW9uIDI3MDM3MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIJKHdvcmtpbmcgY29weSkKQEAgLTExMjUs
NyArMTEyNSw3IEBAIG9wIDpnZXRfZW51bWVyYWJsZV9sZW5ndGgsCiAgICAgICAgIGJhc2U6IFZp
cnR1YWxSZWdpc3RlciwKICAgICB9CiAKLW9wIDpoYXNfaW5kZXhlZF9wcm9wZXJ0eSwKK29wIDpo
YXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5LAogICAgIGFyZ3M6IHsKICAgICAgICAgZHN0
OiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAgICAgIGJhc2U6IFZpcnR1YWxSZWdpc3RlciwKQEAgLTEx
MzUsNyArMTEzNSw3IEBAIG9wIDpoYXNfaW5kZXhlZF9wcm9wZXJ0eSwKICAgICAgICAgYXJyYXlQ
cm9maWxlOiBBcnJheVByb2ZpbGUsCiAgICAgfQogCi1vcCA6aGFzX3N0cnVjdHVyZV9wcm9wZXJ0
eSwKK29wIDpoYXNfZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHksCiAgICAgYXJnczogewog
ICAgICAgICBkc3Q6IFZpcnR1YWxSZWdpc3RlciwKICAgICAgICAgYmFzZTogVmlydHVhbFJlZ2lz
dGVyLApAQCAtMTE1OSw3ICsxMTU5LDcgQEAgb3AgOmluX3N0cnVjdHVyZV9wcm9wZXJ0eSwKICAg
ICAgICAgZW51bWVyYXRvcjogVmlydHVhbFJlZ2lzdGVyLAogICAgIH0KIAotb3AgOmhhc19nZW5l
cmljX3Byb3BlcnR5LAorb3AgOmhhc19lbnVtZXJhYmxlX3Byb3BlcnR5LAogICAgIGFyZ3M6IHsK
ICAgICAgICAgZHN0OiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAgICAgIGJhc2U6IFZpcnR1YWxSZWdp
c3RlciwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURl
Zi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlVXNlRGVmLmNwcAkocmV2aXNpb24gMjcwMzczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIxLDggKzIy
MSw5IEBAIHZvaWQgY29tcHV0ZVVzZXNGb3JCeXRlY29kZUluZGV4SW1wbChWaXIKICAgICBVU0VT
KE9wR2V0RnJvbUFyZ3VtZW50cywgYXJndW1lbnRzKQogICAgIFVTRVMoT3BOZXdBcnJheUJ1ZmZl
ciwgaW1tdXRhYmxlQnV0dGVyZmx5KQogCi0gICAgVVNFUyhPcEhhc0dlbmVyaWNQcm9wZXJ0eSwg
YmFzZSwgcHJvcGVydHkpCi0gICAgVVNFUyhPcEhhc0luZGV4ZWRQcm9wZXJ0eSwgYmFzZSwgcHJv
cGVydHkpCisgICAgVVNFUyhPcEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHksIGJhc2UsIHBy
b3BlcnR5KQorICAgIFVTRVMoT3BIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHksIGJhc2Us
IHByb3BlcnR5LCBlbnVtZXJhdG9yKQorICAgIFVTRVMoT3BIYXNFbnVtZXJhYmxlUHJvcGVydHks
IGJhc2UsIHByb3BlcnR5KQogICAgIFVTRVMoT3BFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWUsIGVu
dW1lcmF0b3IsIGluZGV4KQogICAgIFVTRVMoT3BFbnVtZXJhdG9yR2VuZXJpY1BuYW1lLCBlbnVt
ZXJhdG9yLCBpbmRleCkKICAgICBVU0VTKE9wR2V0QnlWYWwsIGJhc2UsIHByb3BlcnR5KQpAQCAt
MjYwLDcgKzI2MSw2IEBAIHZvaWQgY29tcHV0ZVVzZXNGb3JCeXRlY29kZUluZGV4SW1wbChWaXIK
IAogICAgIFVTRVMoT3BHZXRCeVZhbFdpdGhUaGlzLCBiYXNlLCB0aGlzVmFsdWUsIHByb3BlcnR5
KQogICAgIFVTRVMoT3BJbnN0YW5jZW9mQ3VzdG9tLCB2YWx1ZSwgY29uc3RydWN0b3IsIGhhc0lu
c3RhbmNlVmFsdWUpCi0gICAgVVNFUyhPcEhhc1N0cnVjdHVyZVByb3BlcnR5LCBiYXNlLCBwcm9w
ZXJ0eSwgZW51bWVyYXRvcikKICAgICBVU0VTKE9wSGFzT3duU3RydWN0dXJlUHJvcGVydHksIGJh
c2UsIHByb3BlcnR5LCBlbnVtZXJhdG9yKQogICAgIFVTRVMoT3BJblN0cnVjdHVyZVByb3BlcnR5
LCBiYXNlLCBwcm9wZXJ0eSwgZW51bWVyYXRvcikKIApAQCAtNDIwLDExICs0MjAsMTEgQEAgdm9p
ZCBjb21wdXRlRGVmc0ZvckJ5dGVjb2RlSW5kZXhJbXBsKHVucwogICAgIERFRlMoT3BBcmd1bWVu
dENvdW50LCBkc3QpCiAgICAgREVGUyhPcFRvSW5kZXhTdHJpbmcsIGRzdCkKICAgICBERUZTKE9w
R2V0RW51bWVyYWJsZUxlbmd0aCwgZHN0KQotICAgIERFRlMoT3BIYXNJbmRleGVkUHJvcGVydHks
IGRzdCkKLSAgICBERUZTKE9wSGFzU3RydWN0dXJlUHJvcGVydHksIGRzdCkKKyAgICBERUZTKE9w
SGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eSwgZHN0KQorICAgIERFRlMoT3BIYXNFbnVtZXJh
YmxlU3RydWN0dXJlUHJvcGVydHksIGRzdCkKKyAgICBERUZTKE9wSGFzRW51bWVyYWJsZVByb3Bl
cnR5LCBkc3QpCiAgICAgREVGUyhPcEhhc093blN0cnVjdHVyZVByb3BlcnR5LCBkc3QpCiAgICAg
REVGUyhPcEluU3RydWN0dXJlUHJvcGVydHksIGRzdCkKLSAgICBERUZTKE9wSGFzR2VuZXJpY1By
b3BlcnR5LCBkc3QpCiAgICAgREVGUyhPcEdldERpcmVjdFBuYW1lLCBkc3QpCiAgICAgREVGUyhP
cEdldFByb3BlcnR5RW51bWVyYXRvciwgZHN0KQogICAgIERFRlMoT3BFbnVtZXJhdG9yU3RydWN0
dXJlUG5hbWUsIGRzdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suY3BwCShyZXZpc2lvbiAyNzAzNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAzLDcgKzUwMyw3IEBA
IGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFMKICAgICAgICAgT3Bjb2Rl
SUQgb3Bjb2RlSUQgPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKTsKICAgICAgICAgbV9ieXRlY29k
ZUNvc3QgKz0gb3Bjb2RlTGVuZ3Roc1tvcGNvZGVJRF07CiAgICAgICAgIHN3aXRjaCAob3Bjb2Rl
SUQpIHsKLSAgICAgICAgTElOSyhPcEhhc0luZGV4ZWRQcm9wZXJ0eSkKKyAgICAgICAgTElOSyhP
cEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHkpCiAKICAgICAgICAgTElOSyhPcENhbGxWYXJh
cmdzLCBwcm9maWxlKQogICAgICAgICBMSU5LKE9wVGFpbENhbGxWYXJhcmdzLCBwcm9maWxlKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaAkocmV2aXNpb24gMjcw
MzczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjYsNyArMTI2LDcgQEAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBiaXRX
aWR0aEZvck1heAogICAgIG1hY3JvKE9wUnNoaWZ0KSBcCiAKICNkZWZpbmUgRk9SX0VBQ0hfT1BD
T0RFX1dJVEhfQVJSQVlfUFJPRklMRShtYWNybykgXAotICAgIG1hY3JvKE9wSGFzSW5kZXhlZFBy
b3BlcnR5KSBcCisgICAgbWFjcm8oT3BIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5KSBcCiAg
ICAgbWFjcm8oT3BDYWxsVmFyYXJncykgXAogICAgIG1hY3JvKE9wVGFpbENhbGxWYXJhcmdzKSBc
CiAgICAgbWFjcm8oT3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHMpIFwKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuY3BwCShyZXZpc2lvbiAyNzAzNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDM2NCwyMSAr
NDM2NCwyMSBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldEVuCiAgICAg
cmV0dXJuIGRzdDsKIH0KIAotUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRIYXNH
ZW5lcmljUHJvcGVydHkoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3Rl
cklEKiBwcm9wZXJ0eU5hbWUpCitSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEhh
c0VudW1lcmFibGVJbmRleGVkUHJvcGVydHkoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBi
YXNlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgT3BIYXNHZW5lcmljUHJvcGVy
dHk6OmVtaXQodGhpcywgZHN0LCBiYXNlLCBwcm9wZXJ0eU5hbWUpOworICAgIE9wSGFzRW51bWVy
YWJsZUluZGV4ZWRQcm9wZXJ0eTo6ZW1pdCh0aGlzLCBkc3QsIGJhc2UsIHByb3BlcnR5TmFtZSk7
CiAgICAgcmV0dXJuIGRzdDsKIH0KIAotUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVt
aXRIYXNJbmRleGVkUHJvcGVydHkoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBS
ZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUpCitSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eShSZWdpc3RlcklEKiBkc3QsIFJlZ2lz
dGVySUQqIGJhc2UsIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFtZSwgUmVnaXN0ZXJJRCogZW51bWVy
YXRvcikKIHsKLSAgICBPcEhhc0luZGV4ZWRQcm9wZXJ0eTo6ZW1pdCh0aGlzLCBkc3QsIGJhc2Us
IHByb3BlcnR5TmFtZSk7CisgICAgT3BIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHk6OmVt
aXQodGhpcywgZHN0LCBiYXNlLCBwcm9wZXJ0eU5hbWUsIGVudW1lcmF0b3IpOwogICAgIHJldHVy
biBkc3Q7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SGFzU3RydWN0
dXJlUHJvcGVydHkoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklE
KiBwcm9wZXJ0eU5hbWUsIFJlZ2lzdGVySUQqIGVudW1lcmF0b3IpCitSZWdpc3RlcklEKiBCeXRl
Y29kZUdlbmVyYXRvcjo6ZW1pdEhhc0VudW1lcmFibGVQcm9wZXJ0eShSZWdpc3RlcklEKiBkc3Qs
IFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFtZSkKIHsKLSAgICBPcEhh
c1N0cnVjdHVyZVByb3BlcnR5OjplbWl0KHRoaXMsIGRzdCwgYmFzZSwgcHJvcGVydHlOYW1lLCBl
bnVtZXJhdG9yKTsKKyAgICBPcEhhc0VudW1lcmFibGVQcm9wZXJ0eTo6ZW1pdCh0aGlzLCBkc3Qs
IGJhc2UsIHByb3BlcnR5TmFtZSk7CiAgICAgcmV0dXJuIGRzdDsKIH0KIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuaAkocmV2aXNpb24gMjcwMzczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9CeXRlY29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC05MDMsMTAgKzkwMywx
MCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0RW50ZXIoKTsKICAgICAgICAg
dm9pZCBlbWl0Q2hlY2tUcmFwcygpOwogCi0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRIYXNJbmRl
eGVkUHJvcGVydHkoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklE
KiBwcm9wZXJ0eU5hbWUpOwotICAgICAgICBSZWdpc3RlcklEKiBlbWl0SGFzU3RydWN0dXJlUHJv
cGVydHkoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBwcm9w
ZXJ0eU5hbWUsIFJlZ2lzdGVySUQqIGVudW1lcmF0b3IpOworICAgICAgICBSZWdpc3RlcklEKiBl
bWl0SGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVy
SUQqIGJhc2UsIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFtZSk7CisgICAgICAgIFJlZ2lzdGVySUQq
IGVtaXRIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHkoUmVnaXN0ZXJJRCogZHN0LCBSZWdp
c3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUsIFJlZ2lzdGVySUQqIGVudW1l
cmF0b3IpOworICAgICAgICBSZWdpc3RlcklEKiBlbWl0SGFzRW51bWVyYWJsZVByb3BlcnR5KFJl
Z2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCogcHJvcGVydHlOYW1l
KTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEhhc093blN0cnVjdHVyZVByb3BlcnR5KFJlZ2lz
dGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCogcHJvcGVydHlOYW1lLCBS
ZWdpc3RlcklEKiBlbnVtZXJhdG9yKTsKLSAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEhhc0dlbmVy
aWNQcm9wZXJ0eShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQq
IHByb3BlcnR5TmFtZSk7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRHZXRQcm9wZXJ0eUVudW1l
cmF0b3IoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlKTsKICAgICAgICAgUmVnaXN0
ZXJJRCogZW1pdEdldEVudW1lcmFibGVMZW5ndGgoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklE
KiBiYXNlKTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEdldFN0cnVjdHVyZVByb3BlcnR5RW51
bWVyYXRvcihSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQqIGxl
bmd0aCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29k
ZWdlbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxl
ci9Ob2Rlc0NvZGVnZW4uY3BwCShyZXZpc2lvbiAyNzAzNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5
NjIsNyArMzk2Miw3IEBAIHZvaWQgRm9ySW5Ob2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW4K
IAogICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmVzdWx0ID0gZ2VuZXJhdG9yLmVtaXRFcXVh
bGl0eU9wPE9wTGVzcz4oZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBpLmdldCgpLCBsZW5ndGgu
Z2V0KCkpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZkZhbHNlKHJlc3VsdC5nZXQoKSwg
bG9vcEVuZC5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0SGFzSW5kZXhlZFByb3BlcnR5
KHJlc3VsdC5nZXQoKSwgYmFzZS5nZXQoKSwgaS5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5l
bWl0SGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eShyZXN1bHQuZ2V0KCksIGJhc2UuZ2V0KCks
IGkuZ2V0KCkpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZkZhbHNlKHJlc3VsdC5nZXQo
KSwgKnNjb3BlLT5jb250aW51ZVRhcmdldCgpKTsKIAogICAgICAgICBnZW5lcmF0b3IuZW1pdFRv
SW5kZXhTdHJpbmcocHJvcGVydHlOYW1lLmdldCgpLCBpLmdldCgpKTsKQEAgLTQwMDMsNyArNDAw
Myw3IEBAIHZvaWQgRm9ySW5Ob2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW4KIAogICAgICAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmVzdWx0ID0gZ2VuZXJhdG9yLmVtaXRJc051bGwoZ2VuZXJh
dG9yLm5ld1RlbXBvcmFyeSgpLCBwcm9wZXJ0eU5hbWUuZ2V0KCkpOwogICAgICAgICBnZW5lcmF0
b3IuZW1pdEp1bXBJZlRydWUocmVzdWx0LmdldCgpLCBsb29wRW5kLmdldCgpKTsKLSAgICAgICAg
Z2VuZXJhdG9yLmVtaXRIYXNTdHJ1Y3R1cmVQcm9wZXJ0eShyZXN1bHQuZ2V0KCksIGJhc2UuZ2V0
KCksIHByb3BlcnR5TmFtZS5nZXQoKSwgZW51bWVyYXRvci5nZXQoKSk7CisgICAgICAgIGdlbmVy
YXRvci5lbWl0SGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5KHJlc3VsdC5nZXQoKSwgYmFz
ZS5nZXQoKSwgcHJvcGVydHlOYW1lLmdldCgpLCBlbnVtZXJhdG9yLmdldCgpKTsKICAgICAgICAg
Z2VuZXJhdG9yLmVtaXRKdW1wSWZGYWxzZShyZXN1bHQuZ2V0KCksICpzY29wZS0+Y29udGludWVU
YXJnZXQoKSk7CiAKICAgICAgICAgdGhpcy0+ZW1pdExvb3BIZWFkZXIoZ2VuZXJhdG9yLCBwcm9w
ZXJ0eU5hbWUuZ2V0KCkpOwpAQCAtNDA0NSw3ICs0MDQ1LDcgQEAgdm9pZCBGb3JJbk5vZGU6OmVt
aXRCeXRlY29kZShCeXRlY29kZUdlbgogICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmVzdWx0
ID0gZ2VuZXJhdG9yLmVtaXRJc051bGwoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBwcm9wZXJ0
eU5hbWUuZ2V0KCkpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZlRydWUocmVzdWx0Lmdl
dCgpLCBsb29wRW5kLmdldCgpKTsKIAotICAgICAgICBnZW5lcmF0b3IuZW1pdEhhc0dlbmVyaWNQ
cm9wZXJ0eShyZXN1bHQuZ2V0KCksIGJhc2UuZ2V0KCksIHByb3BlcnR5TmFtZS5nZXQoKSk7Cisg
ICAgICAgIGdlbmVyYXRvci5lbWl0SGFzRW51bWVyYWJsZVByb3BlcnR5KHJlc3VsdC5nZXQoKSwg
YmFzZS5nZXQoKSwgcHJvcGVydHlOYW1lLmdldCgpKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRK
dW1wSWZGYWxzZShyZXN1bHQuZ2V0KCksICpzY29wZS0+Y29udGludWVUYXJnZXQoKSk7CiAKICAg
ICAgICAgdGhpcy0+ZW1pdExvb3BIZWFkZXIoZ2VuZXJhdG9yLCBwcm9wZXJ0eU5hbWUuZ2V0KCkp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVy
SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMjcwMzczKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC00MTU1LDE5ICs0MTU1LDIwIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxB
YnN0cmFjdFN0YXRlVHkKICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNJ
bnQzMk9ubHkpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBIYXNHZW5lcmljUHJv
cGVydHk6IHsKKyAgICBjYXNlIEhhc0VudW1lcmFibGVQcm9wZXJ0eTogewogICAgICAgICBzZXRO
b25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0Jvb2xlYW4pOwogICAgICAgICBjbG9iYmVyV29y
bGQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgSW5TdHJ1Y3R1cmVQcm9wZXJ0
eToKICAgICBjYXNlIEhhc093blN0cnVjdHVyZVByb3BlcnR5OgotICAgIGNhc2UgSGFzU3RydWN0
dXJlUHJvcGVydHk6IHsKKyAgICBjYXNlIEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eTog
ewogICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0Jvb2xlYW4pOwogICAg
ICAgICBjbG9iYmVyV29ybGQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhc2UgSGFz
SW5kZXhlZFByb3BlcnR5OiB7CisgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6CisgICAgY2Fz
ZSBIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5OiB7CiAgICAgICAgIEFycmF5TW9kZSBtb2Rl
ID0gbm9kZS0+YXJyYXlNb2RlKCk7CiAgICAgICAgIHN3aXRjaCAobW9kZS50eXBlKCkpIHsKICAg
ICAgICAgY2FzZSBBcnJheTo6SW50MzI6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMjcwMzczKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTgxMzksMTkgKzgxMzksMTkgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1
bnNpZ25lZAogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZ2V0X2VudW1lcmFibGVfbGVuZ3Ro
KTsKICAgICAgICAgfQogCi0gICAgICAgIGNhc2Ugb3BfaGFzX2dlbmVyaWNfcHJvcGVydHk6IHsK
LSAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFz
R2VuZXJpY1Byb3BlcnR5PigpOwotICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRU
b0dyYXBoKEhhc0dlbmVyaWNQcm9wZXJ0eSwgZ2V0KGJ5dGVjb2RlLm1fYmFzZSksIGdldChieXRl
Y29kZS5tX3Byb3BlcnR5KSkpOwotICAgICAgICAgICAgTkVYVF9PUENPREUob3BfaGFzX2dlbmVy
aWNfcHJvcGVydHkpOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBvcF9oYXNfc3RydWN0dXJl
X3Byb3BlcnR5OiB7Ci0gICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEhhc1N0cnVjdHVyZVByb3BlcnR5PigpOwotICAgICAgICAgICAgc2V0KGJ5dGVj
b2RlLm1fZHN0LCBhZGRUb0dyYXBoKEhhc1N0cnVjdHVyZVByb3BlcnR5LAorICAgICAgICBjYXNl
IG9wX2hhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0eTogeworICAgICAgICAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNFbnVtZXJhYmxlU3RydWN0
dXJlUHJvcGVydHk+KCk7CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3Jh
cGgoSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5LAogICAgICAgICAgICAgICAgIGdldChi
eXRlY29kZS5tX2Jhc2UpLAogICAgICAgICAgICAgICAgIGdldChieXRlY29kZS5tX3Byb3BlcnR5
KSwKICAgICAgICAgICAgICAgICBnZXQoYnl0ZWNvZGUubV9lbnVtZXJhdG9yKSkpOwotICAgICAg
ICAgICAgTkVYVF9PUENPREUob3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eSk7CisgICAgICAgICAg
ICBORVhUX09QQ09ERShvcF9oYXNfZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHkpOworICAg
ICAgICB9CisKKyAgICAgICAgY2FzZSBvcF9oYXNfZW51bWVyYWJsZV9wcm9wZXJ0eTogeworICAg
ICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNFbnVt
ZXJhYmxlUHJvcGVydHk+KCk7CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRv
R3JhcGgoSGFzRW51bWVyYWJsZVByb3BlcnR5LCBnZXQoYnl0ZWNvZGUubV9iYXNlKSwgZ2V0KGJ5
dGVjb2RlLm1fcHJvcGVydHkpKSk7CisgICAgICAgICAgICBORVhUX09QQ09ERShvcF9oYXNfZW51
bWVyYWJsZV9wcm9wZXJ0eSk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2hhc19vd25f
c3RydWN0dXJlX3Byb3BlcnR5OiB7CkBAIC04MTcyLDE4ICs4MTcyLDE4IEBAIHZvaWQgQnl0ZUNv
ZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9w
X2luX3N0cnVjdHVyZV9wcm9wZXJ0eSk7CiAgICAgICAgIH0KIAotICAgICAgICBjYXNlIG9wX2hh
c19pbmRleGVkX3Byb3BlcnR5OiB7Ci0gICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEhhc0luZGV4ZWRQcm9wZXJ0eT4oKTsKKyAgICAgICAgY2FzZSBv
cF9oYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5OiB7CisgICAgICAgICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0VudW1lcmFibGVJbmRleGVkUHJv
cGVydHk+KCk7CiAgICAgICAgICAgICBOb2RlKiBiYXNlID0gZ2V0KGJ5dGVjb2RlLm1fYmFzZSk7
CiAgICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gZ2V0QXJyYXlNb2RlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKGNvZGVCbG9jaykubV9hcnJheVByb2ZpbGUsIEFycmF5OjpSZWFkKTsKICAgICAg
ICAgICAgIE5vZGUqIHByb3BlcnR5ID0gZ2V0KGJ5dGVjb2RlLm1fcHJvcGVydHkpOwogICAgICAg
ICAgICAgYWRkVmFyQXJnQ2hpbGQoYmFzZSk7CiAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChw
cm9wZXJ0eSk7CiAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChudWxscHRyKTsKLSAgICAgICAg
ICAgIE5vZGUqIGhhc0l0ZXJhYmxlUHJvcGVydHkgPSBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywg
SGFzSW5kZXhlZFByb3BlcnR5LCBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgT3BJbmZvKHN0
YXRpY19jYXN0PHVpbnQzMl90PihQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6R2V0
T3duUHJvcGVydHkpKSk7CisgICAgICAgICAgICBOb2RlKiBoYXNJdGVyYWJsZVByb3BlcnR5ID0g
YWRkVG9HcmFwaChOb2RlOjpWYXJBcmcsIEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHksIE9w
SW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpKTsKICAgICAgICAgICAgIG1fZXhpdE9LID0gZmFsc2U7
IC8vIEhhc0luZGV4ZWRQcm9wZXJ0eSBtdXN0IGJlIHRyZWF0ZWQgYXMgaWYgaXQgY2xvYmJlcnMg
ZXhpdCBzdGF0ZSwgc2luY2UgRml4dXBQaGFzZSBtYXkgbWFrZSBpdCBnZW5lcmljLgogICAgICAg
ICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBoYXNJdGVyYWJsZVByb3BlcnR5KTsKLSAgICAgICAg
ICAgIE5FWFRfT1BDT0RFKG9wX2hhc19pbmRleGVkX3Byb3BlcnR5KTsKKyAgICAgICAgICAgIE5F
WFRfT1BDT0RFKG9wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHkpOwogICAgICAgICB9
CiAKICAgICAgICAgY2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1lOiB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAyNzAzNzMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI1MywxMSArMjUzLDExIEBAIENhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5
TGV2ZWwoT3Bjb2RlSUQKICAgICBjYXNlIG9wX2dldF9zY29wZToKICAgICBjYXNlIG9wX2dldF9m
cm9tX3Njb3BlOgogICAgIGNhc2Ugb3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoOgotICAgIGNhc2Ug
b3BfaGFzX2dlbmVyaWNfcHJvcGVydHk6Ci0gICAgY2FzZSBvcF9oYXNfc3RydWN0dXJlX3Byb3Bl
cnR5OgorICAgIGNhc2Ugb3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0eToKKyAgICBj
YXNlIG9wX2hhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0eToKKyAgICBjYXNlIG9wX2hh
c19lbnVtZXJhYmxlX3Byb3BlcnR5OgogICAgIGNhc2Ugb3BfaGFzX293bl9zdHJ1Y3R1cmVfcHJv
cGVydHk6CiAgICAgY2FzZSBvcF9pbl9zdHJ1Y3R1cmVfcHJvcGVydHk6Ci0gICAgY2FzZSBvcF9o
YXNfaW5kZXhlZF9wcm9wZXJ0eToKICAgICBjYXNlIG9wX2dldF9kaXJlY3RfcG5hbWU6CiAgICAg
Y2FzZSBvcF9nZXRfcHJvcGVydHlfZW51bWVyYXRvcjoKICAgICBjYXNlIG9wX2VudW1lcmF0b3Jf
c3RydWN0dXJlX3BuYW1lOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9i
YmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9i
YmVyaXplLmgJKHJldmlzaW9uIDI3MDM3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjQsNiArMTY0LDcgQEAgdm9pZCBj
bG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICBjYXNlIEFycmF5UG9w
OgogICAgICAgICBjYXNlIEFycmF5SW5kZXhPZjoKICAgICAgICAgY2FzZSBIYXNJbmRleGVkUHJv
cGVydHk6CisgICAgICAgIGNhc2UgSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eToKICAgICAg
ICAgY2FzZSBBdG9taWNzQWRkOgogICAgICAgICBjYXNlIEF0b21pY3NBbmQ6CiAgICAgICAgIGNh
c2UgQXRvbWljc0NvbXBhcmVFeGNoYW5nZToKQEAgLTM0OCw3ICszNDksOCBAQCB2b2lkIGNsb2Ji
ZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eTogeworICAgIGNhc2UgSGFzSW5kZXhlZFByb3Bl
cnR5OgorICAgIGNhc2UgSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eTogewogICAgICAgICBy
ZWFkKEpTT2JqZWN0X2J1dHRlcmZseSk7CiAgICAgICAgIEFycmF5TW9kZSBtb2RlID0gbm9kZS0+
YXJyYXlNb2RlKCk7CiAgICAgICAgIHN3aXRjaCAobW9kZS50eXBlKCkpIHsKQEAgLTcwNSw4ICs3
MDcsOCBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgY2Fz
ZSBSZXNvbHZlU2NvcGVGb3JIb2lzdGluZ0Z1bmNEZWNsSW5FdmFsOgogICAgIGNhc2UgUmVzb2x2
ZVNjb3BlOgogICAgIGNhc2UgVG9PYmplY3Q6Ci0gICAgY2FzZSBIYXNHZW5lcmljUHJvcGVydHk6
Ci0gICAgY2FzZSBIYXNTdHJ1Y3R1cmVQcm9wZXJ0eToKKyAgICBjYXNlIEhhc0VudW1lcmFibGVT
dHJ1Y3R1cmVQcm9wZXJ0eToKKyAgICBjYXNlIEhhc0VudW1lcmFibGVQcm9wZXJ0eToKICAgICBj
YXNlIEhhc093blN0cnVjdHVyZVByb3BlcnR5OgogICAgIGNhc2UgSW5TdHJ1Y3R1cmVQcm9wZXJ0
eToKICAgICBjYXNlIEdldFByb3BlcnR5RW51bWVyYXRvcjoKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHJldmlzaW9uIDI3MDM3MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjk1LDEwICsy
OTUsMTEgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2Ug
R2V0RGlyZWN0UG5hbWU6CiAgICAgY2FzZSBHZXREeW5hbWljVmFyOgogICAgIGNhc2UgR2V0TWFw
QnVja2V0OgotICAgIGNhc2UgSGFzR2VuZXJpY1Byb3BlcnR5OgogICAgIGNhc2UgSGFzSW5kZXhl
ZFByb3BlcnR5OgorICAgIGNhc2UgSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eToKKyAgICBj
YXNlIEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eToKKyAgICBjYXNlIEhhc0VudW1lcmFi
bGVQcm9wZXJ0eToKICAgICBjYXNlIEhhc093blByb3BlcnR5OgotICAgIGNhc2UgSGFzU3RydWN0
dXJlUHJvcGVydHk6CiAgICAgY2FzZSBIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eToKICAgICBjYXNl
IEluU3RydWN0dXJlUHJvcGVydHk6CiAgICAgY2FzZSBJbkJ5SWQ6CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDI3MDM3MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIyMDQsMTEgKzIyMDQsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGZpeEVkZ2U8
Q2VsbFVzZT4obm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
LSAgICAgICAgY2FzZSBIYXNHZW5lcmljUHJvcGVydHk6IHsKKyAgICAgICAgY2FzZSBIYXNFbnVt
ZXJhYmxlUHJvcGVydHk6IHsKICAgICAgICAgICAgIGZpeEVkZ2U8Q2VsbFVzZT4obm9kZS0+Y2hp
bGQyKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgY2FzZSBIYXNT
dHJ1Y3R1cmVQcm9wZXJ0eTogeworICAgICAgICBjYXNlIEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQ
cm9wZXJ0eTogewogICAgICAgICAgICAgZml4RWRnZTxTdHJpbmdVc2U+KG5vZGUtPmNoaWxkMigp
KTsKICAgICAgICAgICAgIGZpeEVkZ2U8S25vd25DZWxsVXNlPihub2RlLT5jaGlsZDMoKSk7CiAg
ICAgICAgICAgICBicmVhazsKQEAgLTIyMjAsNyArMjIyMCw4IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4obm9kZS0+Y2hpbGQzKCkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6IHsKKyAg
ICAgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6CisgICAgICAgIGNhc2UgSGFzRW51bWVyYWJs
ZUluZGV4ZWRQcm9wZXJ0eTogewogICAgICAgICAgICAgbm9kZS0+c2V0QXJyYXlNb2RlKAogICAg
ICAgICAgICAgICAgIG5vZGUtPmFycmF5TW9kZSgpLnJlZmluZSgKICAgICAgICAgICAgICAgICAg
ICAgbV9ncmFwaCwgbm9kZSwKQEAgLTM5ODgsNyArMzk4OSw2IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKS0+cHJlZGljdGlvbigpLAogICAg
ICAgICAgICAgICAgIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSktPnByZWRpY3Rpb24oKSwK
ICAgICAgICAgICAgICAgICBTcGVjTm9uZSkpOwotICAgICAgICBub2RlLT5zZXRJbnRlcm5hbE1l
dGhvZFR5cGUoUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6Okhhc1Byb3BlcnR5KTsK
IAogICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
MCksIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSksIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgMikpOwogICAgICAgICBhdXRvIGFycmF5TW9kZSA9IG5vZGUtPmFycmF5TW9kZSgpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDI3MDM3MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjE0
LDYgKzIyMTQsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgQXJyYXlQb3A6CiAgICAgICAgIGNh
c2UgQXJyYXlJbmRleE9mOgogICAgICAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eToKKyAgICAg
ICAgY2FzZSBIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5OgogICAgICAgICBjYXNlIEF0b21p
Y3NBZGQ6CiAgICAgICAgIGNhc2UgQXRvbWljc0FuZDoKICAgICAgICAgY2FzZSBBdG9taWNzQ29t
cGFyZUV4Y2hhbmdlOgpAQCAtMzAwMywyMyArMzAwNCw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgYm9vbCBoYXNJbnRlcm5hbE1ldGhvZFR5cGUoKSBj
b25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG9wKCkgPT0gSGFzSW5kZXhlZFByb3BlcnR5Owot
ICAgIH0KLQotICAgIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlIGludGVybmFsTWV0
aG9kVHlwZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoaGFzSW50ZXJuYWxNZXRob2RU
eXBlKCkpOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpJbnRlcm5h
bE1ldGhvZFR5cGU+KG1fb3BJbmZvMi5hczx1aW50MzJfdD4oKSk7Ci0gICAgfQotCi0gICAgdm9p
ZCBzZXRJbnRlcm5hbE1ldGhvZFR5cGUoUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGUg
dHlwZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChoYXNJbnRlcm5hbE1ldGhvZFR5cGUoKSk7Ci0g
ICAgICAgIG1fb3BJbmZvMiA9IHN0YXRpY19jYXN0PHVpbnQzMl90Pih0eXBlKTsKLSAgICB9Ci0K
ICAgICBOb2RlKiByZXBsYWNlbWVudCgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gbV9t
aXNjLnJlcGxhY2VtZW50OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
VHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5
cGUuaAkocmV2aXNpb24gMjcwMzczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OTgsMTAgKzQ5OCwxMSBAQCBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oR2V0RW51bWVyYWJsZUxlbmd0aCwgTm9k
ZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRKUykgXAogICAgIC8qIE11c3QgZ2VuZXJhdGUgYmVj
YXVzZSBvZiBQcm94aWVzIG9uIHRoZSBwcm90b3R5cGUgY2hhaW4gKi8gXAogICAgIG1hY3JvKEhh
c0luZGV4ZWRQcm9wZXJ0eSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRCb29sZWFuIHwg
Tm9kZUhhc1ZhckFyZ3MpIFwKLSAgICBtYWNybyhIYXNTdHJ1Y3R1cmVQcm9wZXJ0eSwgTm9kZVJl
c3VsdEJvb2xlYW4pIFwKKyAgICBtYWNybyhIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5LCBO
b2RlTXVzdEdlbmVyYXRlIHwgTm9kZVJlc3VsdEJvb2xlYW4gfCBOb2RlSGFzVmFyQXJncykgXAor
ICAgIG1hY3JvKEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eSwgTm9kZVJlc3VsdEJvb2xl
YW4pIFwKKyAgICBtYWNybyhIYXNFbnVtZXJhYmxlUHJvcGVydHksIE5vZGVSZXN1bHRCb29sZWFu
KSBcCiAgICAgbWFjcm8oSGFzT3duU3RydWN0dXJlUHJvcGVydHksIE5vZGVSZXN1bHRCb29sZWFu
IHwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEluU3RydWN0dXJlUHJvcGVydHksIE5v
ZGVNdXN0R2VuZXJhdGUgfCBOb2RlUmVzdWx0Qm9vbGVhbikgXAotICAgIG1hY3JvKEhhc0dlbmVy
aWNQcm9wZXJ0eSwgTm9kZVJlc3VsdEJvb2xlYW4pIFwKICAgICBtYWNybyhHZXREaXJlY3RQbmFt
ZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzIHwgTm9kZVJlc3VsdEpTKSBcCiAg
ICAgbWFjcm8oR2V0UHJvcGVydHlFbnVtZXJhdG9yLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZVJl
c3VsdEpTKSBcCiAgICAgbWFjcm8oR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lLCBOb2RlTXVz
dEdlbmVyYXRlIHwgTm9kZVJlc3VsdEpTKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI3MDM3MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNTgs
NyArMjI1OCw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25FbnN1cmUKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCi1KU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9u
SGFzR2VuZXJpY1Byb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEpTQ2VsbCogcHJvcGVy
dHkpKQorSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkhhc0VudW1lcmFibGVQcm9w
ZXJ0eSwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBKU0NlbGwqIHByb3BlcnR5KSkKIHsKICAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBE
RUNMQVJFX0NBTExfRlJBTUUodm0pOwpAQCAtMjI3NSw3ICsyMjc1LDcgQEAgSlNDX0RFRklORV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvbkhhc0dlbgogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKEpTVmFsdWUoKSk7CiAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBhc1N0cmluZyhwcm9wZXJ0
eSktPnRvSWRlbnRpZmllcihnbG9iYWxPYmplY3QpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHsgfSk7Ci0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNv
ZGUoanNCb29sZWFuKGJhc2UtPmhhc1Byb3BlcnR5R2VuZXJpYyhnbG9iYWxPYmplY3QsIHByb3Bl
cnR5TmFtZSwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OkdldE93blByb3BlcnR5
KSkpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShqc0Jv
b2xlYW4oYmFzZS0+aGFzRW51bWVyYWJsZVByb3BlcnR5KGdsb2JhbE9iamVjdCwgcHJvcGVydHlO
YW1lKSkpKTsKIH0KIAogSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkluU3RydWN0
dXJlUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNDZWxsKiBiYXNlLCBKU1N0cmluZyogcHJvcGVydHkpKQpAQCAtMjMwMCw3ICsyMzAwLDcg
QEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkhhc093bgogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKG9iamVjdFByb3RvdHlwZUhhc093blByb3BlcnR5KGds
b2JhbE9iamVjdCwgYmFzZSwgcHJvcGVydHlOYW1lKSkpOwogfQogCi1KU0NfREVGSU5FX0pJVF9P
UEVSQVRJT04ob3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5QnlJbnQsIHNpemVfdCwgKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQ2VsbCogYmFzZUNlbGwsIGludDMyX3Qgc3Vic2Ny
aXB0LCBpbnQzMl90IGludGVybmFsTWV0aG9kVHlwZSkpCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJ
T04ob3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5LCBzaXplX3QsIChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU0NlbGwqIGJhc2VDZWxsLCBpbnQzMl90IHN1YnNjcmlwdCkpCiB7CiAg
ICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIENhbGxGcmFtZSogY2FsbEZyYW1l
ID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKQEAgLTIzMDgsOSArMjMwOCwyMiBAQCBKU0NfREVG
SU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uSGFzSW5kCiAgICAgSlNPYmplY3QqIG9iamVjdCA9
IGJhc2VDZWxsLT50b09iamVjdChnbG9iYWxPYmplY3QpOwogICAgIGlmIChVTkxJS0VMWShzdWJz
Y3JpcHQgPCAwKSkgewogICAgICAgICAvLyBHbyB0aGUgc2xvd2VzdCB3YXkgcG9zc2libGUgYmVj
YXVzZSBuZWdhdGl2ZSBpbmRpY2VzIGRvbid0IHVzZSBpbmRleGVkIHN0b3JhZ2UuCi0gICAgICAg
IHJldHVybiBvYmplY3QtPmhhc1Byb3BlcnR5R2VuZXJpYyhnbG9iYWxPYmplY3QsIElkZW50aWZp
ZXI6OmZyb20odm0sIHN1YnNjcmlwdCksIHN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6SW50ZXJu
YWxNZXRob2RUeXBlPihpbnRlcm5hbE1ldGhvZFR5cGUpKTsKKyAgICAgICAgcmV0dXJuIG9iamVj
dC0+aGFzUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tKHZtLCBzdWJzY3Jp
cHQpKTsKICAgICB9Ci0gICAgcmV0dXJuIG9iamVjdC0+aGFzUHJvcGVydHlHZW5lcmljKGdsb2Jh
bE9iamVjdCwgc3Vic2NyaXB0LCBzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0
aG9kVHlwZT4oaW50ZXJuYWxNZXRob2RUeXBlKSk7CisgICAgcmV0dXJuIG9iamVjdC0+aGFzUHJv
cGVydHkoZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3Vic2NyaXB0KSk7Cit9
CisKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25IYXNFbnVtZXJhYmxlSW5kZXhl
ZFByb3BlcnR5LCBzaXplX3QsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0NlbGwq
IGJhc2VDZWxsLCBpbnQzMl90IHN1YnNjcmlwdCkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1F
KHZtKTsKKyAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGNhbGxGcmFtZSk7CisgICAgSlNPYmplY3QqIG9iamVjdCA9IGJhc2VDZWxsLT50b09iamVjdChn
bG9iYWxPYmplY3QpOworICAgIGlmIChVTkxJS0VMWShzdWJzY3JpcHQgPCAwKSkgeworICAgICAg
ICAvLyBHbyB0aGUgc2xvd2VzdCB3YXkgcG9zc2libGUgYmVjYXVzZSBuZWdhdGl2ZSBpbmRpY2Vz
IGRvbid0IHVzZSBpbmRleGVkIHN0b3JhZ2UuCisgICAgICAgIHJldHVybiBvYmplY3QtPmhhc0Vu
dW1lcmFibGVQcm9wZXJ0eShnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb20odm0sIHN1YnNj
cmlwdCkpOworICAgIH0KKyAgICByZXR1cm4gb2JqZWN0LT5oYXNFbnVtZXJhYmxlUHJvcGVydHko
Z2xvYmFsT2JqZWN0LCBzdWJzY3JpcHQpOwogfQogCiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04o
b3BlcmF0aW9uR2V0UHJvcGVydHlFbnVtZXJhdG9yLCBKU0NlbGwqLCAoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UpKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHJldmlzaW9uIDI3MDM3MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkp
CkBAIC05OSwxMCArOTksMTEgQEAgSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25D
YWxsTgogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25HZXRCeVZhbFdpdGhUaGlz
LCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSkpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25HZXRQcm90b3R5cGVPZiwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVjdCos
IEVuY29kZWRKU1ZhbHVlKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkdl
dFByb3RvdHlwZU9mT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiwgSlNP
YmplY3QqKSk7Ci1KU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkhhc0dlbmVyaWNQ
cm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVl
LCBKU0NlbGwqKSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkhhc0luZGV4
ZWRQcm9wZXJ0eSwgc2l6ZV90LCAoSlNHbG9iYWxPYmplY3QqLCBKU0NlbGwqLCBpbnQzMl90KSk7
CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkhhc0VudW1lcmFibGVJbmRleGVk
UHJvcGVydHksIHNpemVfdCwgKEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxsKiwgaW50MzJfdCkpOwor
SlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25IYXNFbnVtZXJhYmxlUHJvcGVydHks
IEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgSlNDZWxs
KikpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25IYXNPd25TdHJ1Y3R1cmVQ
cm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCosIEpTU3Ry
aW5nKikpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25JblN0cnVjdHVyZVBy
b3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxsKiwgSlNTdHJp
bmcqKSk7Ci1KU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9w
ZXJ0eUJ5SW50LCBzaXplX3QsIChKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCosIGludDMyX3QsIGlu
dDMyX3QpKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uR2V0UHJvcGVydHlF
bnVtZXJhdG9yLCBKU0NlbGwqLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSkpOwog
SlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25HZXRQcm9wZXJ0eUVudW1lcmF0b3JD
ZWxsLCBKU0NlbGwqLCAoSlNHbG9iYWxPYmplY3QqLCBKU0NlbGwqKSk7CiBKU0NfREVDTEFSRV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvblRvSW5kZXhTdHJpbmcsIEpTQ2VsbCosIChKU0dsb2JhbE9i
amVjdCosIGludDMyX3QpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJl
ZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAy
NzAzNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdh
dGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIxMiwxMSArMTIxMiwxMiBAQCBwcml2
YXRlOgogICAgICAgICAgICAgc2V0UHJlZGljdGlvbihTcGVjSW50MzJPbmx5KTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgSGFzR2VuZXJpY1Byb3BlcnR5Ogot
ICAgICAgICBjYXNlIEhhc1N0cnVjdHVyZVByb3BlcnR5OgogICAgICAgICBjYXNlIEhhc093blN0
cnVjdHVyZVByb3BlcnR5OgogICAgICAgICBjYXNlIEluU3RydWN0dXJlUHJvcGVydHk6Ci0gICAg
ICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OiB7CisgICAgICAgIGNhc2UgSGFzSW5kZXhlZFBy
b3BlcnR5OgorICAgICAgICBjYXNlIEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHk6CisgICAg
ICAgIGNhc2UgSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5OgorICAgICAgICBjYXNlIEhh
c0VudW1lcmFibGVQcm9wZXJ0eTogewogICAgICAgICAgICAgc2V0UHJlZGljdGlvbihTcGVjQm9v
bGVhbik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTU0FMb3dlcmluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUxvd2VyaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAy
NzAzNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUxvd2VyaW5nUGhhc2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw2ICs4Miw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0K
IAogICAgICAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eToKKyAgICAgICAgY2FzZSBIYXNFbnVt
ZXJhYmxlSW5kZXhlZFByb3BlcnR5OgogICAgICAgICAgICAgbG93ZXJCb3VuZHNDaGVjayhtX2dy
YXBoLmNoaWxkKG1fbm9kZSwgMCksIG1fZ3JhcGguY2hpbGQobV9ub2RlLCAxKSwgbV9ncmFwaC5j
aGlsZChtX25vZGUsIDIpKTsKICAgICAgICAgICAgIGJyZWFrOwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkocmV2aXNpb24gMjcwMzczKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI5Miw2ICsyOTIsNyBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0
ZVR5cGUmIHN0CiAgICAgY2FzZSBCb29sZWFuVG9OdW1iZXI6CiAgICAgY2FzZSBGaWF0SW50NTI6
CiAgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6CisgICAgY2FzZSBIYXNFbnVtZXJhYmxlSW5k
ZXhlZFByb3BlcnR5OgogICAgIGNhc2UgR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lOgogICAg
IGNhc2UgR2V0RW51bWVyYXRvckdlbmVyaWNQbmFtZToKICAgICBjYXNlIFRvSW5kZXhTdHJpbmc6
CkBAIC02MjgsOCArNjI5LDggQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBl
JiBzdAogICAgIGNhc2UgTXVsdGlQdXRCeU9mZnNldDoKICAgICBjYXNlIE11bHRpRGVsZXRlQnlP
ZmZzZXQ6CiAgICAgY2FzZSBHZXRFbnVtZXJhYmxlTGVuZ3RoOgotICAgIGNhc2UgSGFzR2VuZXJp
Y1Byb3BlcnR5OgotICAgIGNhc2UgSGFzU3RydWN0dXJlUHJvcGVydHk6CisgICAgY2FzZSBIYXNF
bnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHk6CisgICAgY2FzZSBIYXNFbnVtZXJhYmxlUHJvcGVy
dHk6CiAgICAgY2FzZSBIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eToKICAgICBjYXNlIEluU3RydWN0
dXJlUHJvcGVydHk6CiAgICAgY2FzZSBHZXREaXJlY3RQbmFtZToKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2
aXNpb24gMjcwMzczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDA3MywxMiArNDA3MywxMiBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGNvbXBpbGVHZXRF
bnVtZXJhYmxlTGVuZ3RoKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBI
YXNHZW5lcmljUHJvcGVydHk6IHsKLSAgICAgICAgY29tcGlsZUhhc0dlbmVyaWNQcm9wZXJ0eShu
b2RlKTsKKyAgICBjYXNlIEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eTogeworICAgICAg
ICBjb21waWxlSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5KG5vZGUpOwogICAgICAgICBi
cmVhazsKICAgICB9Ci0gICAgY2FzZSBIYXNTdHJ1Y3R1cmVQcm9wZXJ0eTogewotICAgICAgICBj
b21waWxlSGFzU3RydWN0dXJlUHJvcGVydHkobm9kZSk7CisgICAgY2FzZSBIYXNFbnVtZXJhYmxl
UHJvcGVydHk6IHsKKyAgICAgICAgY29tcGlsZUhhc0VudW1lcmFibGVQcm9wZXJ0eShub2RlKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgSGFzT3duU3RydWN0dXJlUHJvcGVydHk6
IHsKQEAgLTQwOTAsNyArNDA5MCwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEhhc0luZGV4ZWRQcm9w
ZXJ0eTogewotICAgICAgICBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KG5vZGUpOworICAgICAg
ICBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KG5vZGUsIG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9w
ZXJ0eSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEhhc0VudW1lcmFibGVJbmRl
eGVkUHJvcGVydHk6IHsKKyAgICAgICAgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShub2RlLCBv
cGVyYXRpb25IYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5KTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogICAgIGNhc2UgR2V0RGlyZWN0UG5hbWU6IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMjcwMzcz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTEyMCwxMiArNTEyMCwxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGNvbXBpbGVHZXRFbnVtZXJhYmxlTGVuZ3Ro
KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBIYXNHZW5lcmljUHJvcGVy
dHk6IHsKLSAgICAgICAgY29tcGlsZUhhc0dlbmVyaWNQcm9wZXJ0eShub2RlKTsKKyAgICBjYXNl
IEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eTogeworICAgICAgICBjb21waWxlSGFzRW51
bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9Ci0g
ICAgY2FzZSBIYXNTdHJ1Y3R1cmVQcm9wZXJ0eTogewotICAgICAgICBjb21waWxlSGFzU3RydWN0
dXJlUHJvcGVydHkobm9kZSk7CisgICAgY2FzZSBIYXNFbnVtZXJhYmxlUHJvcGVydHk6IHsKKyAg
ICAgICAgY29tcGlsZUhhc0VudW1lcmFibGVQcm9wZXJ0eShub2RlKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgIGNhc2UgSGFzT3duU3RydWN0dXJlUHJvcGVydHk6IHsKQEAgLTUxMzcsNyAr
NTEzNywxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAg
ICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eTogewotICAgICAg
ICBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KG5vZGUpOworICAgICAgICBjb21waWxlSGFzSW5k
ZXhlZFByb3BlcnR5KG5vZGUsIG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eSk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICBjYXNlIEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHk6IHsK
KyAgICAgICAgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShub2RlLCBvcGVyYXRpb25IYXNFbnVt
ZXJhYmxlSW5kZXhlZFByb3BlcnR5KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2Ug
R2V0RGlyZWN0UG5hbWU6IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAyNzAzNzMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI4
MzAsNyArMTI4MzAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0RW51bWVyYWJs
CiAgICAgc3RyaWN0SW50MzJSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKIH0KIAotdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUhhc0dlbmVyaWNQcm9wZXJ0eShOb2RlKiBub2RlKQordm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUhhc0VudW1lcmFibGVQcm9wZXJ0eShOb2RlKiBub2RlKQog
ewogICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgIFNw
ZWN1bGF0ZUNlbGxPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKQEAgLTEy
ODQxLDcgKzEyODQxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUhhc0dlbmVyaWNQ
cgogICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAgICAgSlNWYWx1ZVJlZ3NGbHVzaGVkQ2FsbFJlc3Vs
dCByZXN1bHQodGhpcyk7CiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IHJlc3VsdC5yZWdz
KCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYXNHZW5lcmljUHJvcGVydHksIHJlc3Vs
dFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFs
T2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlUmVncywgcHJvcGVydHlHUFIp
OworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSGFzRW51bWVyYWJsZVByb3BlcnR5LCByZXN1
bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2Jh
bE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZVJlZ3MsIHByb3BlcnR5R1BS
KTsKICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogICAgIGJsZXNzZWRCb29sZWFuUmVzdWx0
KHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpLCBub2RlKTsKIH0KQEAgLTEyOTgxLDcgKzEyOTgxLDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1hdGNoU3RydWN0dQogICAgIGJsZXNzZWRC
b29sZWFuUmVzdWx0KHRlbXBHUFIsIG5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlSGFzU3RydWN0dXJlUHJvcGVydHkoTm9kZSogbm9kZSkKK3ZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHkoTm9kZSogbm9kZSkKIHsK
ICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CkBAIC0xMzAw
Myw3ICsxMzAwMyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVIYXNTdHJ1Y3R1cmUK
IAogICAgIG1vdmVUcnVlVG8ocmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOwogCi0gICAgYWRkU2xv
d1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHdyb25nU3RydWN0dXJlLCB0aGlzLCBvcGVyYXRp
b25IYXNHZW5lcmljUHJvcGVydHksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2lu
dGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRp
YykpLCBiYXNlUmVncywgcHJvcGVydHlHUFIpKTsKKyAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihz
bG93UGF0aENhbGwod3JvbmdTdHJ1Y3R1cmUsIHRoaXMsIG9wZXJhdGlvbkhhc0VudW1lcmFibGVQ
cm9wZXJ0eSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwg
bV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VSZWdz
LCBwcm9wZXJ0eUdQUikpOwogICAgIGJsZXNzZWRCb29sZWFuUmVzdWx0KHJlc3VsdFJlZ3MucGF5
bG9hZEdQUigpLCBub2RlKTsKIH0KIApAQCAtMTQyNTksNyArMTQyNTksNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlQWxsb2NhdGVOZXdBCiAgICAgICAgIHNpemVHUFIsIHN0b3JhZ2VH
UFIpKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0
eShOb2RlKiBub2RlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUhhc0luZGV4ZWRQcm9w
ZXJ0eShOb2RlKiBub2RlLCBTX0pJVE9wZXJhdGlvbl9HQ1ogc2xvd1BhdGhPcGVyYXRpb24pCiB7
CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDApKTsKICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgaW5kZXgodGhpcywg
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CkBAIC0xNDM3NSw3ICsxNDM3NSw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVIYXNJbmRleGVkUHIKICAgICB9CiAgICAgfQogCi0g
ICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dDYXNlcywgdGhpcywgb3Bl
cmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5QnlJbnQsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6
d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2lu
LnNlbWFudGljKSksIGJhc2VHUFIsIGluZGV4R1BSLCBzdGF0aWNfY2FzdDxpbnQzMl90Pihub2Rl
LT5pbnRlcm5hbE1ldGhvZFR5cGUoKSkpKTsKKyAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93
UGF0aENhbGwoc2xvd0Nhc2VzLCB0aGlzLCBzbG93UGF0aE9wZXJhdGlvbiwgcmVzdWx0R1BSLCBU
cnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZv
cihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZUdQUiwgaW5kZXhHUFIpKTsKIAogICAgIHVu
Ymxlc3NlZEJvb2xlYW5SZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDI3MDM3
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29y
a2luZyBjb3B5KQpAQCAtMTQ0NiwxMyArMTQ0NiwxMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb21w
aWxlVGhyb3coTm9kZSopOwogICAgIHZvaWQgY29tcGlsZVRocm93U3RhdGljRXJyb3IoTm9kZSop
OwogICAgIHZvaWQgY29tcGlsZUdldEVudW1lcmFibGVMZW5ndGgoTm9kZSopOwotICAgIHZvaWQg
Y29tcGlsZUhhc0dlbmVyaWNQcm9wZXJ0eShOb2RlKik7CisgICAgdm9pZCBjb21waWxlSGFzRW51
bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5KE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVIYXNFbnVt
ZXJhYmxlUHJvcGVydHkoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZVRvSW5kZXhTdHJpbmcoTm9k
ZSopOwogICAgIHZvaWQgY29tcGlsZVB1dEJ5SWRGbHVzaChOb2RlKik7CiAgICAgdm9pZCBjb21w
aWxlUHV0QnlJZChOb2RlKik7CiAgICAgdm9pZCBjb21waWxlUHV0QnlJZERpcmVjdChOb2RlKik7
CiAgICAgdm9pZCBjb21waWxlUHV0QnlJZFdpdGhUaGlzKE5vZGUqKTsKLSAgICB2b2lkIGNvbXBp
bGVIYXNTdHJ1Y3R1cmVQcm9wZXJ0eShOb2RlKik7CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1
bmN0aW9uPgogICAgIHZvaWQgY29tcGlsZUhhc093blN0cnVjdHVyZVByb3BlcnR5SW1wbChOb2Rl
KiwgRnVuY3Rpb24pOwogICAgIHZvaWQgY29tcGlsZUhhc093blN0cnVjdHVyZVByb3BlcnR5KE5v
ZGUqKTsKQEAgLTE0ODgsNyArMTQ4OCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbXBpbGVDYWxs
TnVtYmVyQ29uc3RydWN0b3IoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUxvZ1NoYWRvd0NoaWNr
ZW5Qcm9sb2d1ZShOb2RlKik7CiAgICAgdm9pZCBjb21waWxlTG9nU2hhZG93Q2hpY2tlblRhaWwo
Tm9kZSopOwotICAgIHZvaWQgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShOb2RlKik7CisgICAg
dm9pZCBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KE5vZGUqLCBTX0pJVE9wZXJhdGlvbl9HQ1op
OwogICAgIHZvaWQgY29tcGlsZUV4dHJhY3RDYXRjaExvY2FsKE5vZGUqKTsKICAgICB2b2lkIGNv
bXBpbGVDbGVhckNhdGNoTG9jYWxzKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVQcm9maWxlVHlw
ZShOb2RlKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGll
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmls
aXRpZXMuY3BwCShyZXZpc2lvbiAyNzAzNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4MCwxMSArMjgwLDEyIEBA
IGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiAKICAgICBjYXNlIERvdWJs
ZUNvbnN0YW50OgogICAgIGNhc2UgSW50NTJDb25zdGFudDoKICAgICBjYXNlIEJvb2xlYW5Ub051
bWJlcjoKLSAgICBjYXNlIEhhc0dlbmVyaWNQcm9wZXJ0eToKLSAgICBjYXNlIEhhc1N0cnVjdHVy
ZVByb3BlcnR5OgorICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OgorICAgIGNhc2UgSGFzRW51
bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eToKKyAgICBjYXNlIEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQ
cm9wZXJ0eToKKyAgICBjYXNlIEhhc0VudW1lcmFibGVQcm9wZXJ0eToKICAgICBjYXNlIEhhc093
blN0cnVjdHVyZVByb3BlcnR5OgogICAgIGNhc2UgSW5TdHJ1Y3R1cmVQcm9wZXJ0eToKLSAgICBj
YXNlIEhhc0luZGV4ZWRQcm9wZXJ0eToKICAgICBjYXNlIEdldERpcmVjdFBuYW1lOgogICAgIGNh
c2UgR2V0RW51bWVyYWJsZUxlbmd0aDoKICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3Jh
Z2U6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMu
Y3BwCShyZXZpc2lvbiAyNzAzNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExv
d2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OTksMTMgKzE0OTksMTYgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIGNvbXBpbGVTdG9yZUJhcnJpZXIoKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eToKLSAgICAgICAgICAgIGNvbXBp
bGVIYXNJbmRleGVkUHJvcGVydHkoKTsKKyAgICAgICAgICAgIGNvbXBpbGVIYXNJbmRleGVkUHJv
cGVydHkob3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5KTsKICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEhhc0dlbmVyaWNQcm9wZXJ0eToKLSAgICAgICAgICAgIGNvbXBpbGVIYXNH
ZW5lcmljUHJvcGVydHkoKTsKKyAgICAgICAgY2FzZSBIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3Bl
cnR5OgorICAgICAgICAgICAgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShvcGVyYXRpb25IYXNF
bnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5KTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEhhc1N0cnVjdHVyZVByb3BlcnR5OgotICAgICAgICAgICAgY29tcGlsZUhhc1N0cnVjdHVy
ZVByb3BlcnR5KCk7CisgICAgICAgIGNhc2UgSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5
OgorICAgICAgICAgICAgY29tcGlsZUhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eSgpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSGFzRW51bWVyYWJsZVByb3BlcnR5Ogor
ICAgICAgICAgICAgY29tcGlsZUhhc0VudW1lcmFibGVQcm9wZXJ0eSgpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgSGFzT3duU3RydWN0dXJlUHJvcGVydHk6CiAgICAgICAgICAg
ICBjb21waWxlSGFzT3duU3RydWN0dXJlUHJvcGVydHkoKTsKQEAgLTEyNDkxLDcgKzEyNDk0LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgZW1pdFN0b3JlQmFycmllcihsb3dDZWxsKG1fbm9kZS0+Y2hp
bGQxKCkpLCBtX25vZGUtPm9wKCkgPT0gRmVuY2VkU3RvcmVCYXJyaWVyKTsKICAgICB9CiAgICAg
Ci0gICAgdm9pZCBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KCkKKyAgICB2b2lkIGNvbXBpbGVI
YXNJbmRleGVkUHJvcGVydHkoU19KSVRPcGVyYXRpb25fR0NaIHNsb3dQYXRoT3BlcmF0aW9uKQog
ICAgIHsKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xv
YmFsT2JqZWN0Rm9yKG1fb3JpZ2luLnNlbWFudGljKTsKICAgICAgICAgTFZhbHVlIGJhc2UgPSBs
b3dDZWxsKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKSk7CkBAIC0xMjUwMiw3ICsxMjUw
NSw2IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgogICAgICAgICBjYXNl
IEFycmF5OjpDb250aWd1b3VzOiB7CiAgICAgICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IGxvd1N0
b3JhZ2UobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDIpKTsKLSAgICAgICAgICAgIExWYWx1
ZSBpbnRlcm5hbE1ldGhvZFR5cGUgPSBtX291dC5jb25zdEludDMyKHN0YXRpY19jYXN0PGludDMy
X3Q+KG1fbm9kZS0+aW50ZXJuYWxNZXRob2RUeXBlKCkpKTsKIAogICAgICAgICAgICAgSW5kZXhl
ZEFic3RyYWN0SGVhcCYgaGVhcCA9IG1vZGUudHlwZSgpID09IEFycmF5OjpJbnQzMiA/CiAgICAg
ICAgICAgICAgICAgbV9oZWFwcy5pbmRleGVkSW50MzJQcm9wZXJ0aWVzIDogbV9oZWFwcy5pbmRl
eGVkQ29udGlndW91c1Byb3BlcnRpZXM7CkBAIC0xMjUzMyw3ICsxMjUzNSw3IEBAIHByaXZhdGU6
CiAKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dDYXNlLCBjb250aW51YXRpb24pOwog
ICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcigKLSAg
ICAgICAgICAgICAgICBtX291dC5ub3RaZXJvNjQodm1DYWxsKEludDY0LCBvcGVyYXRpb25IYXNJ
bmRleGVkUHJvcGVydHlCeUludCwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgYmFzZSwgaW5k
ZXgsIGludGVybmFsTWV0aG9kVHlwZSkpKTsKKyAgICAgICAgICAgICAgICBtX291dC5ub3RaZXJv
NjQodm1DYWxsKEludDY0LCBzbG93UGF0aE9wZXJhdGlvbiwgd2Vha1BvaW50ZXIoZ2xvYmFsT2Jq
ZWN0KSwgYmFzZSwgaW5kZXgpKSk7CiAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlv
bik7CiAKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQp
OwpAQCAtMTI1NDIsNyArMTI1NDQsNiBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgIGNh
c2UgQXJyYXk6OkRvdWJsZTogewogICAgICAgICAgICAgTFZhbHVlIHN0b3JhZ2UgPSBsb3dTdG9y
YWdlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAyKSk7Ci0gICAgICAgICAgICBMVmFsdWUg
aW50ZXJuYWxNZXRob2RUeXBlID0gbV9vdXQuY29uc3RJbnQzMihzdGF0aWNfY2FzdDxpbnQzMl90
PihtX25vZGUtPmludGVybmFsTWV0aG9kVHlwZSgpKSk7CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIEluZGV4ZWRBYnN0cmFjdEhlYXAmIGhlYXAgPSBtX2hlYXBzLmluZGV4ZWREb3VibGVQcm9w
ZXJ0aWVzOwogICAgICAgICAgICAgCkBAIC0xMjU3Miw3ICsxMjU3Myw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dDYXNlLCBjb250aW51
YXRpb24pOwogICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFu
Y2hvcigKLSAgICAgICAgICAgICAgICBtX291dC5ub3RaZXJvNjQodm1DYWxsKEludDY0LCBvcGVy
YXRpb25IYXNJbmRleGVkUHJvcGVydHlCeUludCwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwg
YmFzZSwgaW5kZXgsIGludGVybmFsTWV0aG9kVHlwZSkpKTsKKyAgICAgICAgICAgICAgICBtX291
dC5ub3RaZXJvNjQodm1DYWxsKEludDY0LCBzbG93UGF0aE9wZXJhdGlvbiwgd2Vha1BvaW50ZXIo
Z2xvYmFsT2JqZWN0KSwgYmFzZSwgaW5kZXgpKSk7CiAgICAgICAgICAgICBtX291dC5qdW1wKGNv
bnRpbnVhdGlvbik7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNv
bnRpbnVhdGlvbiwgbGFzdE5leHQpOwpAQCAtMTI1ODIsNyArMTI1ODMsNiBAQCBwcml2YXRlOgog
CiAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZTogewogICAgICAgICAgICAgTFZhbHVl
IHN0b3JhZ2UgPSBsb3dTdG9yYWdlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAyKSk7Ci0g
ICAgICAgICAgICBMVmFsdWUgaW50ZXJuYWxNZXRob2RUeXBlID0gbV9vdXQuY29uc3RJbnQzMihz
dGF0aWNfY2FzdDxpbnQzMl90PihtX25vZGUtPmludGVybmFsTWV0aG9kVHlwZSgpKSk7CiAKICAg
ICAgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dDYXNlID0gbV9vdXQubmV3QmxvY2soKTsKICAgICAg
ICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CkBAIC0x
MjYxMCw3ICsxMjYxMCw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRv
KHNsb3dDYXNlLCBjb250aW51YXRpb24pOwogICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xv
d1Jlc3VsdCA9IG1fb3V0LmFuY2hvcigKLSAgICAgICAgICAgICAgICBtX291dC5ub3RaZXJvNjQo
dm1DYWxsKEludDY0LCBvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlCeUludCwgd2Vha1BvaW50
ZXIoZ2xvYmFsT2JqZWN0KSwgYmFzZSwgaW5kZXgsIGludGVybmFsTWV0aG9kVHlwZSkpKTsKKyAg
ICAgICAgICAgICAgICBtX291dC5ub3RaZXJvNjQodm1DYWxsKEludDY0LCBzbG93UGF0aE9wZXJh
dGlvbiwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgYmFzZSwgaW5kZXgpKSk7CiAgICAgICAg
ICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAKICAgICAgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwpAQCAtMTI2MTksMTkgKzEyNjE5LDE4IEBAIHBy
aXZhdGU6CiAgICAgICAgIH0KIAogICAgICAgICBkZWZhdWx0OiB7Ci0gICAgICAgICAgICBMVmFs
dWUgaW50ZXJuYWxNZXRob2RUeXBlID0gbV9vdXQuY29uc3RJbnQzMihzdGF0aWNfY2FzdDxpbnQz
Ml90PihtX25vZGUtPmludGVybmFsTWV0aG9kVHlwZSgpKSk7Ci0gICAgICAgICAgICBzZXRCb29s
ZWFuKG1fb3V0Lm5vdFplcm82NCh2bUNhbGwoSW50NjQsIG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9w
ZXJ0eUJ5SW50LCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBiYXNlLCBpbmRleCwgaW50ZXJu
YWxNZXRob2RUeXBlKSkpOworICAgICAgICAgICAgc2V0Qm9vbGVhbihtX291dC5ub3RaZXJvNjQo
dm1DYWxsKEludDY0LCBzbG93UGF0aE9wZXJhdGlvbiwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0
KSwgYmFzZSwgaW5kZXgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgfQogCi0gICAgdm9pZCBjb21waWxlSGFzR2VuZXJpY1Byb3BlcnR5KCkKKyAgICB2
b2lkIGNvbXBpbGVIYXNFbnVtZXJhYmxlUHJvcGVydHkoKQogICAgIHsKICAgICAgICAgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fb3JpZ2lu
LnNlbWFudGljKTsKICAgICAgICAgTFZhbHVlIGJhc2UgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hp
bGQxKCkpOwogICAgICAgICBMVmFsdWUgcHJvcGVydHkgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQy
KCkpOwotICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9uSGFzR2VuZXJp
Y1Byb3BlcnR5LCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBiYXNlLCBwcm9wZXJ0eSkpOwor
ICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9uSGFzRW51bWVyYWJsZVBy
b3BlcnR5LCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBiYXNlLCBwcm9wZXJ0eSkpOwogICAg
IH0KIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBTbG93UGF0aENhbGw+CkBAIC0xMjY3MSw5ICsx
MjY3MCw5IEBAIHByaXZhdGU6CiAgICAgICAgIHNldEJvb2xlYW4obV9vdXQucGhpKEludDMyLCBj
b3JyZWN0U3RydWN0dXJlUmVzdWx0LCBzbG93UGF0aFJlc3VsdCkpOwogICAgIH0KIAotICAgIHZv
aWQgY29tcGlsZUhhc1N0cnVjdHVyZVByb3BlcnR5KCkKKyAgICB2b2lkIGNvbXBpbGVIYXNFbnVt
ZXJhYmxlU3RydWN0dXJlUHJvcGVydHkoKQogICAgIHsKLSAgICAgICAgY29tcGlsZUhhc1N0cnVj
dHVyZVByb3BlcnR5SW1wbChsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpLCBvcGVyYXRpb25I
YXNHZW5lcmljUHJvcGVydHkpOworICAgICAgICBjb21waWxlSGFzU3RydWN0dXJlUHJvcGVydHlJ
bXBsKGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSksIG9wZXJhdGlvbkhhc0VudW1lcmFibGVQ
cm9wZXJ0eSk7CiAgICAgfQogCiAgICAgdm9pZCBjb21waWxlSGFzT3duU3RydWN0dXJlUHJvcGVy
dHkoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMjcwMzczKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MDQsNyArMzA0LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAg
ICBERUZJTkVfU0xPV19PUChuZXdfYXJyYXlfYnVmZmVyKQogICAgICAgICBERUZJTkVfU0xPV19P
UChzcHJlYWQpCiAgICAgICAgIERFRklORV9TTE9XX09QKGdldF9lbnVtZXJhYmxlX2xlbmd0aCkK
LSAgICAgICAgREVGSU5FX1NMT1dfT1AoaGFzX2dlbmVyaWNfcHJvcGVydHkpCisgICAgICAgIERF
RklORV9TTE9XX09QKGhhc19lbnVtZXJhYmxlX3Byb3BlcnR5KQogICAgICAgICBERUZJTkVfU0xP
V19PUChnZXRfcHJvcGVydHlfZW51bWVyYXRvcikKICAgICAgICAgREVGSU5FX1NMT1dfT1AodG9f
aW5kZXhfc3RyaW5nKQogICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfZGlyZWN0X2FyZ3Vt
ZW50cykKQEAgLTQ2MywxMCArNDYzLDEwIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5Q
YXNzKCkKICAgICAgICAgREVGSU5FX09QKG9wX2dldF9mcm9tX2FyZ3VtZW50cykKICAgICAgICAg
REVGSU5FX09QKG9wX3B1dF90b19hcmd1bWVudHMpCiAKLSAgICAgICAgREVGSU5FX09QKG9wX2hh
c19zdHJ1Y3R1cmVfcHJvcGVydHkpCisgICAgICAgIERFRklORV9PUChvcF9oYXNfZW51bWVyYWJs
ZV9pbmRleGVkX3Byb3BlcnR5KQorICAgICAgICBERUZJTkVfT1Aob3BfaGFzX2VudW1lcmFibGVf
c3RydWN0dXJlX3Byb3BlcnR5KQogICAgICAgICBERUZJTkVfT1Aob3BfaGFzX293bl9zdHJ1Y3R1
cmVfcHJvcGVydHkpCiAgICAgICAgIERFRklORV9PUChvcF9pbl9zdHJ1Y3R1cmVfcHJvcGVydHkp
Ci0gICAgICAgIERFRklORV9PUChvcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eSkKICAgICAgICAgREVG
SU5FX09QKG9wX2dldF9kaXJlY3RfcG5hbWUpCiAgICAgICAgIERFRklORV9PUChvcF9lbnVtZXJh
dG9yX3N0cnVjdHVyZV9wbmFtZSkKICAgICAgICAgREVGSU5FX09QKG9wX2VudW1lcmF0b3JfZ2Vu
ZXJpY19wbmFtZSkKQEAgLTU5Miw3ICs1OTIsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVT
bG93Q2FzZXMoKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfZGVsX2J5X3ZhbCkKICAg
ICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2RlbF9ieV9pZCkKICAgICAgICAgREVGSU5FX1NM
T1dDQVNFX09QKG9wX3N1YikKLSAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2hhc19pbmRl
eGVkX3Byb3BlcnR5KQorICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfaGFzX2VudW1lcmFi
bGVfaW5kZXhlZF9wcm9wZXJ0eSkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2dldF9m
cm9tX3Njb3BlKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfcHV0X3RvX3Njb3BlKQog
CkBAIC02MjUsNyArNjI1LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkK
ICAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AobnN0cmljdGVxKQogICAgICAgICBERUZJ
TkVfU0xPV0NBU0VfU0xPV19PUChnZXRfZGlyZWN0X3BuYW1lKQogICAgICAgICBERUZJTkVfU0xP
V0NBU0VfU0xPV19PUChnZXRfcHJvdG90eXBlX29mKQotICAgICAgICBERUZJTkVfU0xPV0NBU0Vf
U0xPV19PUChoYXNfc3RydWN0dXJlX3Byb3BlcnR5KQorICAgICAgICBERUZJTkVfU0xPV0NBU0Vf
U0xPV19PUChoYXNfZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHkpCiAgICAgICAgIERFRklO
RV9TTE9XQ0FTRV9TTE9XX09QKGhhc19vd25fc3RydWN0dXJlX3Byb3BlcnR5KQogICAgICAgICBE
RUZJTkVfU0xPV0NBU0VfU0xPV19PUChpbl9zdHJ1Y3R1cmVfcHJvcGVydHkpCiAgICAgICAgIERF
RklORV9TTE9XQ0FTRV9TTE9XX09QKHJlc29sdmVfc2NvcGUpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmgJKHJldmlzaW9uIDI3MDM3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmgJKHdvcmtpbmcgY29weSkKQEAgLTY1NywxMCArNjU3LDEwIEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB2b2lkIGVtaXRfb3BfdXJzaGlmdChjb25zdCBJbnN0cnVjdGlvbiopOwogICAg
ICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3BDb2RlVHlwZT4KICAgICAgICAgdm9pZCBlbWl0X29w
X2hhc19zdHJ1Y3R1cmVfcHJvcGVydHlJbXBsKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAg
IHZvaWQgZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKik7
CisgICAgICAgIHZvaWQgZW1pdF9vcF9oYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5KGNv
bnN0IEluc3RydWN0aW9uKik7CisgICAgICAgIHZvaWQgZW1pdF9vcF9oYXNfZW51bWVyYWJsZV9z
dHJ1Y3R1cmVfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0
X29wX2hhc19vd25fc3RydWN0dXJlX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAg
ICAgIHZvaWQgZW1pdF9vcF9pbl9zdHJ1Y3R1cmVfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24q
KTsKLSAgICAgICAgdm9pZCBlbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3Ry
dWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9nZXRfZGlyZWN0X3BuYW1lKGNvbnN0IElu
c3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9w
bmFtZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZW51bWVyYXRv
cl9nZW5lcmljX3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKik7CkBAIC03MTUsNyArNzE1LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93
X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9oYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5KGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogCiAgICAg
ICAgIHZvaWQgZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAg
ICAgIHZvaWQgZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiopOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2
aXNpb24gMjcwMzczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJf
NjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUxLDkgKzExNTEsOSBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5CiAgICAgZW1pdFN0b3JlQm9vbChkc3QsIHJlZ1Qw
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2Vu
dW1lcmFibGVfc3RydWN0dXJlX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5SW1wbDxPcEhh
c1N0cnVjdHVyZVByb3BlcnR5PihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGVtaXRfb3BfaGFz
X3N0cnVjdHVyZV9wcm9wZXJ0eUltcGw8T3BIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHk+
KGN1cnJlbnRJbnN0cnVjdGlvbik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2hhc19vd25fc3Ry
dWN0dXJlX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBA
IC0xMTkzLDkgKzExOTMsOSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJv
cGVyCiAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGw8Tm9Q
dHJUYWc+KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxOb1B0clRhZz4ocmV0dXJuQWRkcmVzcykpLCBG
dW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eUdl
bmVyaWMpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX2hh
c19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEhhc0luZGV4ZWRQcm9wZXJ0eT4oKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHk+KCk7CiAgICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwpAQCAtMTI0MCwxMSArMTI0MCwxMSBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjCiAgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5h
cHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8oYnlWYWxJbmZvLCBtX2J5dGVjb2RlSW5kZXgsIFBh
dGNoYWJsZUp1bXAoKSwgYmFkVHlwZSwgbW9kZSwgcHJvZmlsZSwgZG9uZSwgbmV4dEhvdFBhdGgp
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2VudW1lcmFibGVfaW5k
ZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7CiAKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEhhc0luZGV4ZWRQcm9wZXJ0eT4oKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHk+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVj
b2RlLm1fcHJvcGVydHk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29k
ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rl
cy5jcHAJKHJldmlzaW9uIDI3MDM3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOTIsOSArMTM5Miw5IEBAIHZvaWQgSklU
OjplbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHko
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29w
X2hhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eUlt
cGw8T3BIYXNTdHJ1Y3R1cmVQcm9wZXJ0eT4oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBlbWl0
X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHlJbXBsPE9wSGFzRW51bWVyYWJsZVN0cnVjdHVyZVBy
b3BlcnR5PihjdXJyZW50SW5zdHJ1Y3Rpb24pOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNf
b3duX3N0cnVjdHVyZV9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQpAQCAtMTQzNCw5ICsxNDM0LDkgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlSGFzSW5k
ZXhlZFByb3BlcgogICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25D
YWxsPE5vUHRyVGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8Tm9QdHJUYWc+KHJldHVybkFkZHJl
c3MpKSwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25IYXNJbmRleGVkUHJv
cGVydHlHZW5lcmljKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3Bl
cnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1p
dF9vcF9oYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BIYXNJbmRleGVkUHJvcGVydHk+KCk7CisgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5PigpOwog
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKQEAgLTE0ODEsMTEgKzE0ODEsMTEgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoYwogICAgIG1fYnlWYWxDb21waWxhdGlv
bkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywgbV9ieXRlY29kZUlu
ZGV4LCBQYXRjaGFibGVKdW1wKCksIGJhZFR5cGUsIG1vZGUsIHByb2ZpbGUsIGRvbmUsIG5leHRI
b3RQYXRoKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0
eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19lbnVtZXJh
YmxlX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwogCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BIYXNJbmRleGVkUHJvcGVydHk+KCk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5PigpOwogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkg
PSBieXRlY29kZS5tX3Byb3BlcnR5OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyNzAzNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDQ1LDcgKzI0
NDUsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uSGFzSW5kCiAKICAgICBp
ZiAoIUNvbW1vblNsb3dQYXRoczo6Y2FuQWNjZXNzQXJndW1lbnRJbmRleFF1aWNrbHkoKm9iamVj
dCwgaW5kZXgpKQogICAgICAgICBieVZhbEluZm8tPmFycmF5UHJvZmlsZS0+c2V0T3V0T2ZCb3Vu
ZHMoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihvYmplY3QtPmhhc1By
b3BlcnR5R2VuZXJpYyhnbG9iYWxPYmplY3QsIGluZGV4LCBQcm9wZXJ0eVNsb3Q6OkludGVybmFs
TWV0aG9kVHlwZTo6R2V0T3duUHJvcGVydHkpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc0Jvb2xlYW4ob2JqZWN0LT5oYXNFbnVtZXJhYmxlUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBp
bmRleCkpKTsKIH0KICAgICAKIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25IYXNJ
bmRleGVkUHJvcGVydHlHZW5lcmljLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkU3Vic2NyaXB0LCBCeVZhbEluZm8qIGJ5VmFsSW5mbykpCkBAIC0yNDY2LDcgKzI0NjYs
NyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uSGFzSW5kCiAKICAgICBpZiAo
IUNvbW1vblNsb3dQYXRoczo6Y2FuQWNjZXNzQXJndW1lbnRJbmRleFF1aWNrbHkoKm9iamVjdCwg
aW5kZXgpKQogICAgICAgICBieVZhbEluZm8tPmFycmF5UHJvZmlsZS0+c2V0T3V0T2ZCb3VuZHMo
KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihvYmplY3QtPmhhc1Byb3Bl
cnR5R2VuZXJpYyhnbG9iYWxPYmplY3QsIGluZGV4LCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0
aG9kVHlwZTo6R2V0T3duUHJvcGVydHkpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c0Jvb2xlYW4ob2JqZWN0LT5oYXNFbnVtZXJhYmxlUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBpbmRl
eCkpKTsKIH0KICAgICAKIHN0YXRpYyBib29sIGRlbGV0ZUJ5SWQoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgVk0mIHZtLCBEZWxldGVQcm9wZXJ0eVNsb3QmIHNsb3QsIEpTVmFsdWUgYmFz
ZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIEVDTUFNb2RlIGVjbWFNb2RlKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHJldmlzaW9uIDI3MDM3MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMzcsNiArMTM3LDcgQEAgdXNpbmcgVl9KSVRPcGVyYXRpb25fR1NzaUpKQyA9IHZv
aWQoSklUXwogdXNpbmcgQ19KSVRPcGVyYXRpb25fVFQgPSB1aW50cHRyX3QoSklUX09QRVJBVElP
Tl9BVFRSSUJVVEVTICopKFN0cmluZ0ltcGwqLCBTdHJpbmdJbXBsKik7CiB1c2luZyBDX0pJVE9w
ZXJhdGlvbl9CX0dKc3NKc3MgPSB1aW50cHRyX3QoSklUX09QRVJBVElPTl9BVFRSSUJVVEVTICop
KEpTR2xvYmFsT2JqZWN0KiwgSlNTdHJpbmcqLCBKU1N0cmluZyopOwogdXNpbmcgU19KSVRPcGVy
YXRpb25fR0MgPSBzaXplX3QoSklUX09QRVJBVElPTl9BVFRSSUJVVEVTICopKEpTR2xvYmFsT2Jq
ZWN0KiwgSlNDZWxsKik7Cit1c2luZyBTX0pJVE9wZXJhdGlvbl9HQ1ogPSBzaXplX3QoSklUX09Q
RVJBVElPTl9BVFRSSUJVVEVTICopKEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxsKiwgaW50MzJfdCk7
CiB1c2luZyBTX0pJVE9wZXJhdGlvbl9HSkogPSBzaXplX3QoSklUX09QRVJBVElPTl9BVFRSSUJV
VEVTICopKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKTsK
IHVzaW5nIFZfSklUT3BlcmF0aW9uX0dKSkogPSB2b2lkKEpJVF9PUEVSQVRJT05fQVRUUklCVVRF
UyAqKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUpOwogdXNpbmcgSl9KSVRPcGVyYXRpb25fR1NzaUpKID0gRW5jb2RlZEpTVmFs
dWUoSklUX09QRVJBVElPTl9BVFRSSUJVVEVTICopKEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJl
U3R1YkluZm8qLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5h
c20JKHJldmlzaW9uIDI3MDM3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0zMDUyLDggKzMwNTIsOCBA
QCBtYWNybyBoYXNTdHJ1Y3R1cmVQcm9wZXJ0eUltcGwoc2l6ZSwgZ2V0CiAgICAgZGlzcGF0Y2go
KQogZW5kCiAKLWxsaW50T3BXaXRoUmV0dXJuKG9wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHksIE9w
SGFzU3RydWN0dXJlUHJvcGVydHksIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCByZXR1cm4p
Ci0gICAgaGFzU3RydWN0dXJlUHJvcGVydHlJbXBsKHNpemUsIGdldCwgZGlzcGF0Y2gsICByZXR1
cm4sIF9zbG93X3BhdGhfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eSkKK2xsaW50T3BXaXRoUmV0dXJu
KG9wX2hhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0eSwgT3BIYXNFbnVtZXJhYmxlU3Ry
dWN0dXJlUHJvcGVydHksIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCByZXR1cm4pCisgICAg
aGFzU3RydWN0dXJlUHJvcGVydHlJbXBsKHNpemUsIGdldCwgZGlzcGF0Y2gsICByZXR1cm4sIF9z
bG93X3BhdGhfaGFzX2VudW1lcmFibGVfc3RydWN0dXJlX3Byb3BlcnR5KQogZW5kKQogCiBsbGlu
dE9wV2l0aFJldHVybihvcF9oYXNfb3duX3N0cnVjdHVyZV9wcm9wZXJ0eSwgT3BIYXNPd25TdHJ1
Y3R1cmVQcm9wZXJ0eSwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIHJldHVybikKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
ci5hc20JKHJldmlzaW9uIDI3MDM3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
b3dMZXZlbEludGVycHJldGVyLmFzbQkod29ya2luZyBjb3B5KQpAQCAtMTk2MSwxMSArMTk2MSwx
MSBAQCBzbG93UGF0aE9wKGdldF9lbnVtZXJhYmxlX2xlbmd0aCkKIHNsb3dQYXRoT3AoZ2V0X3By
b3BlcnR5X2VudW1lcmF0b3IpCiBzbG93UGF0aE9wKGdyZWF0ZXIpCiBzbG93UGF0aE9wKGdyZWF0
ZXJlcSkKLXNsb3dQYXRoT3AoaGFzX2dlbmVyaWNfcHJvcGVydHkpCi1zbG93UGF0aE9wKGhhc19p
bmRleGVkX3Byb3BlcnR5KQorc2xvd1BhdGhPcChoYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3Bl
cnR5KQorc2xvd1BhdGhPcChoYXNfZW51bWVyYWJsZV9wcm9wZXJ0eSkKIAogaWYgbm90IEpTVkFM
VUU2NAotICAgIHNsb3dQYXRoT3AoaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eSkKKyAgICBzbG93UGF0
aE9wKGhhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0eSkKICAgICBzbG93UGF0aE9wKGhh
c19vd25fc3RydWN0dXJlX3Byb3BlcnR5KQogICAgIHNsb3dQYXRoT3AoaW5fc3RydWN0dXJlX3By
b3BlcnR5KQogICAgIHNsb3dQYXRoT3AoZ2V0X3Byb3RvdHlwZV9vZikKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkocmV2aXNp
b24gMjcwMzczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1Bh
dGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA0MCwyMyArMTA0MCwyMyBAQCBKU0NfREVGSU5F
X0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2dlCiAgICAgUkVUVVJOKGpzTnVtYmVyKGVudW1l
cmF0b3ItPmluZGV4ZWRMZW5ndGgoKSkpOwogfQogCi1KU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BB
VEgoc2xvd19wYXRoX2hhc19pbmRleGVkX3Byb3BlcnR5KQorSlNDX0RFRklORV9DT01NT05fU0xP
V19QQVRIKHNsb3dfcGF0aF9oYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5KQogewogICAg
IEJFR0lOKCk7Ci0gICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEhhc0luZGV4ZWRQcm9wZXJ0
eT4oKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wSGFzRW51bWVyYWJsZUluZGV4ZWRQ
cm9wZXJ0eT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVC
bG9jayk7CiAgICAgSlNPYmplY3QqIGJhc2UgPSBHRVRfQyhieXRlY29kZS5tX2Jhc2UpLmpzVmFs
dWUoKS50b09iamVjdChnbG9iYWxPYmplY3QpOwogICAgIENIRUNLX0VYQ0VQVElPTigpOwogICAg
IEpTVmFsdWUgcHJvcGVydHkgPSBHRVQoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuanNWYWx1ZSgpOwog
ICAgIG1ldGFkYXRhLm1fYXJyYXlQcm9maWxlLm9ic2VydmVTdHJ1Y3R1cmUoYmFzZS0+c3RydWN0
dXJlKHZtKSk7CiAgICAgQVNTRVJUKHByb3BlcnR5LmlzVUludDMyQXNBbnlJbnQoKSk7Ci0gICAg
UkVUVVJOKGpzQm9vbGVhbihiYXNlLT5oYXNQcm9wZXJ0eUdlbmVyaWMoZ2xvYmFsT2JqZWN0LCBw
cm9wZXJ0eS5hc1VJbnQzMkFzQW55SW50KCksIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RU
eXBlOjpHZXRPd25Qcm9wZXJ0eSkpKTsKKyAgICBSRVRVUk4oanNCb29sZWFuKGJhc2UtPmhhc0Vu
dW1lcmFibGVQcm9wZXJ0eShnbG9iYWxPYmplY3QsIHByb3BlcnR5LmFzVUludDMyQXNBbnlJbnQo
KSkpKTsKIH0KIAotSlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9oYXNfc3Ry
dWN0dXJlX3Byb3BlcnR5KQorSlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9o
YXNfZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHkpCiB7CiAgICAgQkVHSU4oKTsKLSAgICBh
dXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wSGFzU3RydWN0dXJlUHJvcGVydHk+KCk7CisgICAgYXV0
byBieXRlY29kZSA9IHBjLT5hczxPcEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eT4oKTsK
ICAgICBKU09iamVjdCogYmFzZSA9IEdFVF9DKGJ5dGVjb2RlLm1fYmFzZSkuanNWYWx1ZSgpLnRv
T2JqZWN0KGdsb2JhbE9iamVjdCk7CiAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CiAgICAgSlNWYWx1
ZSBwcm9wZXJ0eSA9IEdFVChieXRlY29kZS5tX3Byb3BlcnR5KS5qc1ZhbHVlKCk7CkBAIC0xMDY5
LDcgKzEwNjksNyBAQCBKU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2hhCiAg
ICAgSlNTdHJpbmcqIHN0cmluZyA9IGFzU3RyaW5nKHByb3BlcnR5KTsKICAgICBhdXRvIHByb3Bl
cnR5TmFtZSA9IHN0cmluZy0+dG9JZGVudGlmaWVyKGdsb2JhbE9iamVjdCk7CiAgICAgQ0hFQ0tf
RVhDRVBUSU9OKCk7Ci0gICAgUkVUVVJOKGpzQm9vbGVhbihiYXNlLT5oYXNQcm9wZXJ0eUdlbmVy
aWMoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRo
b2RUeXBlOjpHZXRPd25Qcm9wZXJ0eSkpKTsKKyAgICBSRVRVUk4oanNCb29sZWFuKGJhc2UtPmhh
c0VudW1lcmFibGVQcm9wZXJ0eShnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSkpKTsKIH0KIAog
SlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9oYXNfb3duX3N0cnVjdHVyZV9w
cm9wZXJ0eSkKQEAgLTExMDgsMTAgKzExMDgsMTAgQEAgSlNDX0RFRklORV9DT01NT05fU0xPV19Q
QVRIKHNsb3dfcGF0aF9pbgogICAgIFJFVFVSTihqc0Jvb2xlYW4oQ29tbW9uU2xvd1BhdGhzOjpv
cEluQnlWYWwoZ2xvYmFsT2JqZWN0LCBiYXNlLCBhc1N0cmluZyhwcm9wZXJ0eSkpKSk7CiB9CiAK
LUpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfaGFzX2dlbmVyaWNfcHJvcGVy
dHkpCitKU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2hhc19lbnVtZXJhYmxl
X3Byb3BlcnR5KQogewogICAgIEJFR0lOKCk7Ci0gICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxP
cEhhc0dlbmVyaWNQcm9wZXJ0eT4oKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wSGFz
RW51bWVyYWJsZVByb3BlcnR5PigpOwogICAgIEpTT2JqZWN0KiBiYXNlID0gR0VUX0MoYnl0ZWNv
ZGUubV9iYXNlKS5qc1ZhbHVlKCkudG9PYmplY3QoZ2xvYmFsT2JqZWN0KTsKICAgICBDSEVDS19F
WENFUFRJT04oKTsKICAgICBKU1ZhbHVlIHByb3BlcnR5ID0gR0VUKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpLmpzVmFsdWUoKTsKQEAgLTExMTksNyArMTExOSw3IEBAIEpTQ19ERUZJTkVfQ09NTU9OX1NM
T1dfUEFUSChzbG93X3BhdGhfaGEKICAgICBKU1N0cmluZyogc3RyaW5nID0gYXNTdHJpbmcocHJv
cGVydHkpOwogICAgIGF1dG8gcHJvcGVydHlOYW1lID0gc3RyaW5nLT50b0lkZW50aWZpZXIoZ2xv
YmFsT2JqZWN0KTsKICAgICBDSEVDS19FWENFUFRJT04oKTsKLSAgICBSRVRVUk4oanNCb29sZWFu
KGJhc2UtPmhhc1Byb3BlcnR5R2VuZXJpYyhnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgUHJv
cGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OkdldE93blByb3BlcnR5KSkpOworICAgIFJF
VFVSTihqc0Jvb2xlYW4oYmFzZS0+aGFzRW51bWVyYWJsZVByb3BlcnR5KGdsb2JhbE9iamVjdCwg
cHJvcGVydHlOYW1lKSkpOwogfQogCiBKU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19w
YXRoX2dldF9kaXJlY3RfcG5hbWUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Db21tb25TbG93UGF0aHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db21tb25TbG93UGF0aHMuaAkocmV2aXNpb24gMjcwMzczKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI1OSwxMSArMjU5LDExIEBAIEpTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRo
X3MKIEpTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX3RvX3ByaW1pdGl2ZSk7
CiBKU0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF90b19wcm9wZXJ0eV9rZXkp
OwogSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfZ2V0X2VudW1lcmFibGVf
bGVuZ3RoKTsKLUpTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2hhc19nZW5l
cmljX3Byb3BlcnR5KTsKLUpTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2hh
c19zdHJ1Y3R1cmVfcHJvcGVydHkpOworSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93
X3BhdGhfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0eSk7CitKU0NfREVDTEFSRV9DT01N
T05fU0xPV19QQVRIKHNsb3dfcGF0aF9oYXNfZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHkp
OworSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfaGFzX2VudW1lcmFibGVf
cHJvcGVydHkpOwogSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfaGFzX293
bl9zdHJ1Y3R1cmVfcHJvcGVydHkpOwogSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93
X3BhdGhfaW5fc3RydWN0dXJlX3Byb3BlcnR5KTsKLUpTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BB
VEgoc2xvd19wYXRoX2hhc19pbmRleGVkX3Byb3BlcnR5KTsKIEpTQ19ERUNMQVJFX0NPTU1PTl9T
TE9XX1BBVEgoc2xvd19wYXRoX2dldF9kaXJlY3RfcG5hbWUpOwogSlNDX0RFQ0xBUkVfQ09NTU9O
X1NMT1dfUEFUSChzbG93X3BhdGhfZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3IpOwogSlNDX0RFQ0xB
UkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWUp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2
aXNpb24gMjcwMzczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTg3LDE2ICsxOTg3LDE3IEBAIHZvaWQgSlNPYmplY3Q6
OnB1dERpcmVjdE5vbkluZGV4QWNjZXNzb3IKICAgICBzdHJ1Y3R1cmUtPnNldEhhc0dldHRlclNl
dHRlclByb3BlcnRpZXNXaXRoUHJvdG9DaGVjayhwcm9wZXJ0eU5hbWUgPT0gdm0ucHJvcGVydHlO
YW1lcy0+dW5kZXJzY29yZVByb3RvKTsKIH0KIAotLy8gSGFzUHJvcGVydHkoTywgUCkgZnJvbSBT
ZWN0aW9uIDcuMy4xMCBvZiB0aGUgc3BlYy4KLS8vIGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlv
bmFsLm9yZy9lY21hLTI2Mi82LjAvaW5kZXguaHRtbCNzZWMtaGFzcHJvcGVydHkKKy8vIGh0dHBz
Oi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaGFzcHJvcGVydHkKIGJvb2wgSlNPYmplY3Q6Omhhc1By
b3BlcnR5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGhhc1Byb3BlcnR5R2VuZXJpYyhnbG9iYWxPYmpl
Y3QsIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6Okhhc1By
b3BlcnR5KTsKKyAgICBQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzLCBQcm9wZXJ0eVNsb3Q6OkludGVy
bmFsTWV0aG9kVHlwZTo6SGFzUHJvcGVydHkpOworICAgIHJldHVybiBjb25zdF9jYXN0PEpTT2Jq
ZWN0Kj4odGhpcyktPmdldFByb3BlcnR5U2xvdChnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwg
c2xvdCk7CiB9CiAKIGJvb2wgSlNPYmplY3Q6Omhhc1Byb3BlcnR5KEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSkgY29uc3QKIHsKLSAgICByZXR1cm4g
aGFzUHJvcGVydHlHZW5lcmljKGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNs
b3Q6OkludGVybmFsTWV0aG9kVHlwZTo6SGFzUHJvcGVydHkpOworICAgIFByb3BlcnR5U2xvdCBz
bG90KHRoaXMsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpIYXNQcm9wZXJ0eSk7
CisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8SlNPYmplY3QqPih0aGlzKS0+Z2V0UHJvcGVydHlTbG90
KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAogYm9vbCBKU09iamVjdDo6
aGFzUHJvcGVydHkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdWludDY0X3QgcHJvcGVy
dHlOYW1lKSBjb25zdApAQCAtMjAwNywxNiArMjAwOCwyNCBAQCBib29sIEpTT2JqZWN0OjpoYXNQ
cm9wZXJ0eShKU0dsb2JhbE9iamVjCiAgICAgcmV0dXJuIGhhc1Byb3BlcnR5KGdsb2JhbE9iamVj
dCwgSWRlbnRpZmllcjo6ZnJvbShnbG9iYWxPYmplY3QtPnZtKCksIHByb3BlcnR5TmFtZSkpOwog
fQogCi1ib29sIEpTT2JqZWN0OjpoYXNQcm9wZXJ0eUdlbmVyaWMoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90OjpJbnRl
cm5hbE1ldGhvZFR5cGUgaW50ZXJuYWxNZXRob2RUeXBlKSBjb25zdAorYm9vbCBKU09iamVjdDo6
aGFzRW51bWVyYWJsZVByb3BlcnR5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUpIGNvbnN0CiB7Ci0gICAgUHJvcGVydHlTbG90IHNsb3QodGhp
cywgaW50ZXJuYWxNZXRob2RUeXBlKTsKLSAgICByZXR1cm4gY29uc3RfY2FzdDxKU09iamVjdCo+
KHRoaXMpLT5nZXRQcm9wZXJ0eVNsb3QoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3Qp
OworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgUHJvcGVydHlTbG90IHNsb3QodGhpcywgUHJvcGVy
dHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OkdldE93blByb3BlcnR5KTsKKyAgICBib29sIGhh
c1Byb3BlcnR5ID0gY29uc3RfY2FzdDxKU09iamVjdCo+KHRoaXMpLT5nZXRQcm9wZXJ0eVNsb3Qo
Z2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIGZhbHNlKTsKKyAgICByZXR1cm4gaGFzUHJvcGVydHkgJiYgIShzbG90LmF0dHJp
YnV0ZXMoKSAmIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiB9CiAKLWJvb2wgSlNPYmpl
Y3Q6Omhhc1Byb3BlcnR5R2VuZXJpYyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1bnNp
Z25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlIGludGVy
bmFsTWV0aG9kVHlwZSkgY29uc3QKK2Jvb2wgSlNPYmplY3Q6Omhhc0VudW1lcmFibGVQcm9wZXJ0
eShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpIGNv
bnN0CiB7Ci0gICAgUHJvcGVydHlTbG90IHNsb3QodGhpcywgaW50ZXJuYWxNZXRob2RUeXBlKTsK
LSAgICByZXR1cm4gY29uc3RfY2FzdDxKU09iamVjdCo+KHRoaXMpLT5nZXRQcm9wZXJ0eVNsb3Qo
Z2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Cisg
ICAgUHJvcGVydHlTbG90IHNsb3QodGhpcywgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5
cGU6OkdldE93blByb3BlcnR5KTsKKyAgICBib29sIGhhc1Byb3BlcnR5ID0gY29uc3RfY2FzdDxK
U09iamVjdCo+KHRoaXMpLT5nZXRQcm9wZXJ0eVNsb3QoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5h
bWUsIHNsb3QpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKKyAgICBy
ZXR1cm4gaGFzUHJvcGVydHkgJiYgIShzbG90LmF0dHJpYnV0ZXMoKSAmIFByb3BlcnR5QXR0cmli
dXRlOjpEb250RW51bSk7CiB9CiAKIC8vIEVDTUEgOC42LjIuNQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAyNzAzNzMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NTUs
OCArNjU1LDggQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgaGFzUHJvcGVy
dHkoSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUpIGNvbnN0OwogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIGJvb2wgaGFzUHJvcGVydHkoSlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0
eU5hbWUpIGNvbnN0OwogICAgIGJvb2wgaGFzUHJvcGVydHkoSlNHbG9iYWxPYmplY3QqLCB1aW50
NjRfdCBwcm9wZXJ0eU5hbWUpIGNvbnN0OwotICAgIGJvb2wgaGFzUHJvcGVydHlHZW5lcmljKEpT
R2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9k
VHlwZSkgY29uc3Q7Ci0gICAgYm9vbCBoYXNQcm9wZXJ0eUdlbmVyaWMoSlNHbG9iYWxPYmplY3Qq
LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBl
KSBjb25zdDsKKyAgICBib29sIGhhc0VudW1lcmFibGVQcm9wZXJ0eShKU0dsb2JhbE9iamVjdCos
IFByb3BlcnR5TmFtZSkgY29uc3Q7CisgICAgYm9vbCBoYXNFbnVtZXJhYmxlUHJvcGVydHkoSlNH
bG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpIGNvbnN0OwogICAgIGJvb2wgaGFz
T3duUHJvcGVydHkoSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYp
IGNvbnN0OwogICAgIGJvb2wgaGFzT3duUHJvcGVydHkoSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0
eU5hbWUpIGNvbnN0OwogICAgIGJvb2wgaGFzT3duUHJvcGVydHkoSlNHbG9iYWxPYmplY3QqLCB1
bnNpZ25lZCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzAzNzMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOCBAQAorMjAy
MC0xMi0wMiAgQWxleGV5IFNodmF5a2EgIDxzaHZhaWthbGVzaEBnbWFpbC5jb20+CisKKyAgICAg
ICAgTm9uLWVudW1lcmFibGUgcHJvcGVydHkgZmFpbHMgdG8gc2hhZG93IGluaGVyaXRlZCBlbnVt
ZXJhYmxlIHByb3BlcnR5IGZyb20gZm9yLWluCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0zODk3MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFJlcG9ydCBSdW50aW1lQXJyYXkgaW5kaWNlcyBhcyBbW0VudW1l
cmFibGVdXS4KKworICAgICAgICBUZXN0OiBwbGF0Zm9ybS9tYWMvZmFzdC9kb20vd3JhcHBlci1j
bGFzc2VzLW9iamMuaHRtbAorCisgICAgICAgICogYnJpZGdlL3J1bnRpbWVfYXJyYXkuY3BwOgor
ICAgICAgICAoSlNDOjpSdW50aW1lQXJyYXk6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAg
IChKU0M6OlJ1bnRpbWVBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCk6CisKIDIwMjAt
MTItMDIgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBpZnJhbWUg
d2l0aCBgc2FuZGJveD1hbGxvdy10b3AtbmF2aWdhdGlvbi1ieS11c2VyLWFjdGl2YXRpb25gIGNh
biBuYXZpZ2F0ZSB0b3AgZnJhbWUgd2hlbiB0aGUgdXNlciBpbnRlcmFjdHMgd2l0aCBhbiBpZnJh
bWUgZnJvbSBhbm90aGVyIG9yaWdpbgpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRp
bWVfYXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1l
X2FycmF5LmNwcAkocmV2aXNpb24gMjcwMzczKQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1
bnRpbWVfYXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsNyArMTAwLDcgQEAgYm9vbCBS
dW50aW1lQXJyYXk6OmdldE93blByb3BlcnR5U2xvdChKUwogICAgIAogICAgIE9wdGlvbmFsPHVp
bnQzMl90PiBpbmRleCA9IHBhcnNlSW5kZXgocHJvcGVydHlOYW1lKTsKICAgICBpZiAoaW5kZXgg
JiYgaW5kZXgudmFsdWUoKSA8IHRoaXNPYmplY3QtPmdldExlbmd0aCgpKSB7Ci0gICAgICAgIHNs
b3Quc2V0VmFsdWUodGhpc09iamVjdCwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0sCisgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09i
amVjdCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRl
KSwKICAgICAgICAgICAgIHRoaXNPYmplY3QtPmdldENvbmNyZXRlQXJyYXkoKS0+dmFsdWVBdChs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBpbmRleC52YWx1ZSgpKSk7CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KQEAgLTExMiw3ICsxMTIsNyBAQCBib29sIFJ1bnRpbWVBcnJheTo6Z2V0T3duUHJv
cGVydHlTbG90QnlJCiB7CiAgICAgUnVudGltZUFycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PFJ1
bnRpbWVBcnJheSo+KG9iamVjdCk7CiAgICAgaWYgKGluZGV4IDwgdGhpc09iamVjdC0+Z2V0TGVu
Z3RoKCkpIHsKLSAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCBQcm9wZXJ0eUF0dHJp
YnV0ZTo6RG9udERlbGV0ZSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSwKKyAgICAgICAg
c2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlB
dHRyaWJ1dGU6OkRvbnREZWxldGUpLAogICAgICAgICAgICAgdGhpc09iamVjdC0+Z2V0Q29uY3Jl
dGVBcnJheSgpLT52YWx1ZUF0KGxleGljYWxHbG9iYWxPYmplY3QsIGluZGV4KSk7CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3MDM3MykKKysrIExheW91
dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDIwLTEy
LTAyICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNoQGdtYWlsLmNvbT4KKworICAgICAgICBO
b24tZW51bWVyYWJsZSBwcm9wZXJ0eSBmYWlscyB0byBzaGFkb3cgaW5oZXJpdGVkIGVudW1lcmFi
bGUgcHJvcGVydHkgZnJvbSBmb3ItaW4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTM4OTcwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvZmFzdC9kb20vd3JhcHBlci1jbGFzc2VzLW9i
amMtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHBsYXRmb3JtL21hYy9mYXN0L2RvbS93cmFwcGVy
LWNsYXNzZXMtb2JqYy5odG1sOgorCiAyMDIwLTEyLTAyICBDaHJpcyBEdW1leiAgPGNkdW1lekBh
cHBsZS5jb20+CiAKICAgICAgICAgaWZyYW1lIHdpdGggYHNhbmRib3g9YWxsb3ctdG9wLW5hdmln
YXRpb24tYnktdXNlci1hY3RpdmF0aW9uYCBjYW4gbmF2aWdhdGUgdG9wIGZyYW1lIHdoZW4gdGhl
IHVzZXIgaW50ZXJhY3RzIHdpdGggYW4gaWZyYW1lIGZyb20gYW5vdGhlciBvcmlnaW4KSW5kZXg6
IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2RvbS93cmFwcGVyLWNsYXNzZXMtb2JqYy1l
eHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3Qv
ZG9tL3dyYXBwZXItY2xhc3Nlcy1vYmpjLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMjcwMzczKQor
KysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3QvZG9tL3dyYXBwZXItY2xhc3Nlcy1vYmpj
LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTg5LDYgKzE4OSw3IEBAIFBBU1MgdHlw
ZW9mIG9iakNPYmplY3RPZkNsYXNzKCdOU0NGU3RyaW4KIFBBU1MgdHlwZW9mIG9iakNPYmplY3RP
ZkNsYXNzKCdXZWJTY3JpcHRPYmplY3QnKSBpcyAnb2JqZWN0JwogUEFTUyBvYmpDT2JqZWN0T2ZD
bGFzcygnTlNBcnJheScpIGluc3RhbmNlb2YgQXJyYXkgaXMgdHJ1ZQogUEFTUyBjb25jYXRlbmF0
ZUFycmF5KG9iakNBcnJheU9mU3RyaW5nKCkpIGlzICdvbmV0d290aHJlZScKK1BBU1Mgb2JqQ0Fy
cmF5T2ZTdHJpbmcoKS5ldmVyeSgoXywgaSwgYXJyKSA9PiBhcnIucHJvcGVydHlJc0VudW1lcmFi
bGUoaSkpIGlzIHRydWUKIFBBU1MgbGV0IGFyciA9IG9iakNBcnJheU9mU3RyaW5nKCk7IGFyci5s
ZW5ndGggaXMgMwogUEFTUyBsZXQgYXJyID0gb2JqQ0FycmF5T2ZTdHJpbmcoKTsgYXJyLmxlbmd0
aCA9IDAgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IFJhbmdlIGVycm9yLgogUEFTUyBsZXQg
YXJyID0gb2JqQ0FycmF5T2ZTdHJpbmcoKTsgYXJyLmxlbmd0aCA9IDUgdGhyZXcgZXhjZXB0aW9u
IFJhbmdlRXJyb3I6IFJhbmdlIGVycm9yLgpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFj
L2Zhc3QvZG9tL3dyYXBwZXItY2xhc3Nlcy1vYmpjLmh0bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3QvZG9tL3dyYXBwZXItY2xhc3Nlcy1vYmpjLmh0bWwJKHJl
dmlzaW9uIDI3MDM3MykKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2RvbS93cmFw
cGVyLWNsYXNzZXMtb2JqYy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0yODYsNiArMjg2LDcgQEAg
ZnVuY3Rpb24gcnVuVGVzdCgpCiAgICAgc2hvdWxkQmVUcnVlKCJvYmpDT2JqZWN0T2ZDbGFzcygn
TlNBcnJheScpIGluc3RhbmNlb2YgQXJyYXkiKTsKIAogICAgIHNob3VsZEJlKCJjb25jYXRlbmF0
ZUFycmF5KG9iakNBcnJheU9mU3RyaW5nKCkpIiwgIidvbmV0d290aHJlZSciKTsKKyAgICBzaG91
bGRCZVRydWUoIm9iakNBcnJheU9mU3RyaW5nKCkuZXZlcnkoKF8sIGksIGFycikgPT4gYXJyLnBy
b3BlcnR5SXNFbnVtZXJhYmxlKGkpKSIpOwogCiAgICAgc2hvdWxkQmUoImxldCBhcnIgPSBvYmpD
QXJyYXlPZlN0cmluZygpOyBhcnIubGVuZ3RoIiwgIjMiKTsKICAgICBzaG91bGRUaHJvdygibGV0
IGFyciA9IG9iakNBcnJheU9mU3RyaW5nKCk7IGFyci5sZW5ndGggPSAwIik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>415295</attachid>
            <date>2020-12-03 05:05:10 -0800</date>
            <delta_ts>2020-12-05 09:39:38 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-38970-20201203150509.patch</filename>
            <type>text/plain</type>
            <size>95013</size>
            <attacher name="Alexey Shvayka">ashvayka</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNzAzNzcpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE1IEBACisyMDIwLTEyLTAzICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNo
QGdtYWlsLmNvbT4KKworICAgICAgICBOb24tZW51bWVyYWJsZSBwcm9wZXJ0eSBmYWlscyB0byBz
aGFkb3cgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydHkgZnJvbSBmb3ItaW4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM4OTcwCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBzdHJlc3MvYXJndW1lbnRz
LWJpemFycmUtYmVoYXZpb3VyLWRpc2FibGUtZW51bWVyYWJpbGl0eS5qczoKKyAgICAgICAgKiBz
dHJlc3MvZm9yLWluLXJlZGVmaW5lLWVudW1lcmFibGUuanM6IEFkZGVkLgorICAgICAgICAqIHN0
cmVzcy9mb3ItaW4tc2hhZG93LW5vbi1lbnVtZXJhYmxlLmpzOiBBZGRlZC4KKyAgICAgICAgKiB0
ZXN0MjYyL2V4cGVjdGF0aW9ucy55YW1sOiBNYXJrIDQgdGVzdCBjYXNlcyBhcyBwYXNzaW5nLgor
CiAyMDIwLTEyLTAyICBSb3NzIEtpcnNsaW5nICA8cm9zcy5raXJzbGluZ0Bzb255LmNvbT4KIAog
ICAgICAgICAlVHlwZWRBcnJheSUjc2xpY2Ugc2hvdWxkbid0IGNhcmUgYWJvdXQgc291cmNlIGJ1
ZmZlciBkZXRhY2htZW50IGlmIHRoZXJlJ3Mgbm90aGluZyB0byBjb3B5CkluZGV4OiBKU1Rlc3Rz
L3N0cmVzcy9hcmd1bWVudHMtYml6YXJyZS1iZWhhdmlvdXItZGlzYWJsZS1lbnVtZXJhYmlsaXR5
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL2FyZ3VtZW50cy1iaXphcnJlLWJlaGF2
aW91ci1kaXNhYmxlLWVudW1lcmFiaWxpdHkuanMJKHJldmlzaW9uIDI3MDM3MykKKysrIEpTVGVz
dHMvc3RyZXNzL2FyZ3VtZW50cy1iaXphcnJlLWJlaGF2aW91ci1kaXNhYmxlLWVudW1lcmFiaWxp
dHkuanMJKHdvcmtpbmcgY29weSkKQEAgLTE4LDcgKzE4LDcgQEAgdmFyIGFycmF5ID0gW107CiBm
b3IgKHZhciBzIGluIHJlc3VsdFsyXSkKICAgICBhcnJheS5wdXNoKHMpOwogCi1pZiAoYXJyYXku
am9pbigiLCIpICE9ICIwIikKK2lmIChhcnJheS5qb2luKCIsIikgIT0gIiIpCiAgICAgdGhyb3cg
bmV3IEVycm9yKCk7CiAKIGlmIChPYmplY3Qua2V5cyhyZXN1bHRbMl0pLmpvaW4oIiwiKSAhPSAi
MCIpCkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9mb3ItaW4tcmVkZWZpbmUtZW51bWVyYWJsZS5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9mb3ItaW4tcmVkZWZpbmUtZW51bWVyYWJsZS5q
cwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL3N0cmVzcy9mb3ItaW4tcmVkZWZpbmUtZW51bWVy
YWJsZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwNyBAQAorZnVuY3Rpb24gYXNzZXJ0
KHgpIHsKKyAgICBpZiAoIXgpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFkIGFzc2VydGlv
biEiKTsKK30KKworZnVuY3Rpb24gc2hvdWxkQmUoYWN0dWFsLCBleHBlY3RlZCkgeworICAgIGlm
IChhY3R1YWwgIT09IGV4cGVjdGVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEJhZCB2YWx1
ZTogJHthY3R1YWx9LmApOworfQorCitjb25zdCBlbnVtRGVzYyA9IHsgdmFsdWU6IDAsIHdyaXRh
YmxlOiB0cnVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfTsKK2NvbnN0
IGRvbnRFbnVtRGVzYyA9IHsgdmFsdWU6IDAsIHdyaXRhYmxlOiB0cnVlLCBlbnVtZXJhYmxlOiBm
YWxzZSwgY29uZmlndXJhYmxlOiB0cnVlIH07CisKKy8vIGluZGV4ZWQgcHJvcGVydHkKKygoKSA9
PiB7CisgICAgZnVuY3Rpb24gdGVzdCgpIHsKKyAgICAgICAgdmFyIGFyciA9IE9iamVjdC5kZWZp
bmVQcm9wZXJ0aWVzKFswLCAwLCAwXSwgeyAxOiBkb250RW51bURlc2MgfSk7CisgICAgICAgIGZv
ciAodmFyIGkgaW4gYXJyKSB7CisgICAgICAgICAgICBhc3NlcnQoaSBpbiBhcnIpOworICAgICAg
ICAgICAgc2hvdWxkQmUoYXJyW2ldLCAwKTsKKyAgICAgICAgICAgICsrYXJyW2ldOworICAgICAg
ICAgICAgaWYgKGkgPT09ICIwIikKKyAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVy
dGllcyhhcnIsIHsgMTogZW51bURlc2MsIDI6IGRvbnRFbnVtRGVzYyB9KTsKKyAgICAgICAgfQor
ICAgICAgICBzaG91bGRCZShhcnJbMF0sIDEpOworICAgICAgICBzaG91bGRCZShhcnJbMV0sIDAp
OworICAgICAgICBzaG91bGRCZShhcnJbMl0sIDApOworICAgIH0KKworICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgMWU1OyArK2kpCisgICAgICAgIHRlc3QoKTsKK30pKCk7CisKKy8vIHN0cnVjdHVy
ZSBwcm9wZXJ0eQorKCgpID0+IHsKKyAgICBmdW5jdGlvbiB0ZXN0KCkgeworICAgICAgICB2YXIg
b2JqID0gT2JqZWN0LmNyZWF0ZShudWxsLCB7IGE6IGVudW1EZXNjLCBiOiBlbnVtRGVzYywgYzog
ZG9udEVudW1EZXNjIH0pOworICAgICAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7CisgICAgICAg
ICAgICBhc3NlcnQoa2V5IGluIG9iaik7CisgICAgICAgICAgICBzaG91bGRCZShvYmpba2V5XSwg
MCk7CisgICAgICAgICAgICArK29ialtrZXldOworICAgICAgICAgICAgaWYgKGtleSA9PT0gImEi
KQorICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG9iaiwgeyBiOiBkb250
RW51bURlc2MsIGM6IGVudW1EZXNjIH0pOworICAgICAgICB9CisgICAgICAgIHNob3VsZEJlKG9i
ai5hLCAxKTsKKyAgICAgICAgc2hvdWxkQmUob2JqLmIsIDApOworICAgICAgICBzaG91bGRCZShv
YmouYywgMCk7CisgICAgfQorCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTU7ICsraSkKKyAg
ICAgICAgdGVzdCgpOworfSkoKTsKKworLy8gZ2VuZXJpYyBwcm9wZXJ0eSAoUHJveHkpCisoKCkg
PT4geworICAgIGZ1bmN0aW9uIHRlc3QoKSB7CisgICAgICAgIHZhciB0YXJnZXQgPSB7IGE6IDAs
IGI6IDAsIGM6IDAgfTsKKyAgICAgICAgdmFyIGVudW1NYXAgPSB7IGE6IHRydWUsIGI6IHRydWUs
IGM6IGZhbHNlIH07CisgICAgICAgIHZhciBwcm94eSA9IG5ldyBQcm94eSh0YXJnZXQsIHsKKyAg
ICAgICAgICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogKF8sIGtleSkgPT4geworICAgICAg
ICAgICAgICAgIHJldHVybiB7IHZhbHVlOiB0YXJnZXRba2V5XSwgd3JpdGFibGU6IHRydWUsIGVu
dW1lcmFibGU6IGVudW1NYXBba2V5XSwgY29uZmlndXJhYmxlOiB0cnVlIH07CisgICAgICAgICAg
ICB9LAorICAgICAgICB9KTsKKworICAgICAgICBmb3IgKHZhciBrZXkgaW4gcHJveHkpIHsKKyAg
ICAgICAgICAgIGFzc2VydChrZXkgaW4gcHJveHkpOworICAgICAgICAgICAgc2hvdWxkQmUocHJv
eHlba2V5XSwgMCk7CisgICAgICAgICAgICArK3RhcmdldFtrZXldOworICAgICAgICAgICAgaWYg
KGtleSA9PT0gImEiKSB7CisgICAgICAgICAgICAgICAgZW51bU1hcC5iID0gZmFsc2U7CisgICAg
ICAgICAgICAgICAgZW51bU1hcC5jID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICBzaG91bGRCZSh0YXJnZXQuYSwgMSk7CisgICAgICAgIHNob3VsZEJlKHRhcmdldC5i
LCAwKTsKKyAgICAgICAgc2hvdWxkQmUodGFyZ2V0LmMsIDApOworICAgIH0KKworICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgMWU1OyArK2kpCisgICAgICAgIHRlc3QoKTsKK30pKCk7CisKKy8vIGdl
bmVyaWMgcHJvcGVydHkgKGluIHByb3RvdHlwZSkKKygoKSA9PiB7CisgICAgZnVuY3Rpb24gdGVz
dCgpIHsKKyAgICAgICAgdmFyIHNlZW4gPSB7fTsKKyAgICAgICAgdmFyIHByb3RvID0gT2JqZWN0
LmNyZWF0ZShudWxsLCB7IGI6IGVudW1EZXNjLCBjOiBkb250RW51bURlc2MsIGQ6IGVudW1EZXNj
LCBlOiBlbnVtRGVzYyB9KTsKKyAgICAgICAgdmFyIGhlaXIgPSBPYmplY3QuY3JlYXRlKHByb3Rv
LCB7IGE6IGVudW1EZXNjLCBlOiBkb250RW51bURlc2MgfSk7CisgICAgICAgIGZvciAodmFyIGtl
eSBpbiBoZWlyKSB7CisgICAgICAgICAgICBhc3NlcnQoa2V5IGluIGhlaXIpOworICAgICAgICAg
ICAgc2hvdWxkQmUoaGVpcltrZXldLCAwKTsKKyAgICAgICAgICAgIHNlZW5ba2V5XSA9IHRydWU7
CisgICAgICAgICAgICBpZiAoa2V5ID09PSAiYSIpCisgICAgICAgICAgICAgICAgT2JqZWN0LmRl
ZmluZVByb3BlcnRpZXMocHJvdG8sIHsgYjogZG9udEVudW1EZXNjLCBjOiBlbnVtRGVzYyB9KTsK
KyAgICAgICAgICAgIGlmIChrZXkgPT09ICJkIikKKyAgICAgICAgICAgICAgICBPYmplY3QuZGVm
aW5lUHJvcGVydGllcyhoZWlyLCB7IGU6IGVudW1EZXNjIH0pOworICAgICAgICB9CisgICAgICAg
IGFzc2VydChzZWVuLmEpOworICAgICAgICBhc3NlcnQoIXNlZW4uYik7CisgICAgICAgIGFzc2Vy
dCghc2Vlbi5jKTsKKyAgICAgICAgYXNzZXJ0KHNlZW4uZCk7CisgICAgICAgIGFzc2VydChzZWVu
LmUpOworICAgIH0KKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU1OyArK2kpCisgICAgICAg
IHRlc3QoKTsKK30pKCk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9mb3ItaW4tc2hhZG93LW5vbi1l
bnVtZXJhYmxlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL2Zvci1pbi1zaGFkb3ct
bm9uLWVudW1lcmFibGUuanMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy9zdHJlc3MvZm9yLWlu
LXNoYWRvdy1ub24tZW51bWVyYWJsZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE3NCBA
QAorY29uc3QgZG9udEVudW1EZXNjID0geyB2YWx1ZTogMSwgd3JpdGFibGU6IHRydWUsIGVudW1l
cmFibGU6IGZhbHNlLCBjb25maWd1cmFibGU6IHRydWUgfTsKK2NvbnN0IHRlc3RDYXNlcyA9IFsK
KyAgeworICAgIG5hbWU6ICJPYmplY3QiLAorICAgIGNyZWF0ZU9iamVjdDogKCkgPT4gT2JqZWN0
LmNyZWF0ZShudWxsLCB7IGZvbzogZG9udEVudW1EZXNjLCBiYXI6IGRvbnRFbnVtRGVzYyB9KSwK
KyAgICBkb250RW51bUtleXM6IFsiZm9vIiwgImJhciJdLAorICB9LAorICB7CisgICAgbmFtZTog
IkVycm9yIiwKKyAgICBjcmVhdGVPYmplY3Q6ICgpID0+IG5ldyBFcnJvcigpLAorICAgIGRvbnRF
bnVtS2V5czogWyJsaW5lIiwgImNvbHVtbiIsICJzb3VyY2VVUkwiLCAic3RhY2siXSwKKyAgfSwK
KyAgeworICAgIG5hbWU6ICJBcnJheSAoZW1wdHkpIiwKKyAgICBjcmVhdGVPYmplY3Q6ICgpID0+
IFtdLAorICAgIGRvbnRFbnVtS2V5czogWyJsZW5ndGgiXSwKKyAgfSwKKyAgeworICAgIG5hbWU6
ICJBcnJheSAoc3BhcnNlKSIsCisgICAgY3JlYXRlT2JqZWN0OiAoKSA9PiBPYmplY3QuZGVmaW5l
UHJvcGVydGllcyhbMCwgMSwgMl0sIHsgMDogZG9udEVudW1EZXNjLCAyOiBkb250RW51bURlc2Mg
fSksCisgICAgZG9udEVudW1LZXlzOiBbIjAiLCAiMiIsICJsZW5ndGgiXSwKKyAgfSwKKyAgewor
ICAgIG5hbWU6ICJGdW5jdGlvbiAoc3RyaWN0KSIsCisgICAgY3JlYXRlT2JqZWN0OiAoKSA9PiBm
dW5jdGlvbigpIHsgInVzZSBzdHJpY3QiOyB9LAorICAgIGRvbnRFbnVtS2V5czogWyJsZW5ndGgi
LCAibmFtZSIsICJwcm90b3R5cGUiXSwKKyAgfSwKKyAgeworICAgIG5hbWU6ICJGdW5jdGlvbiAo
bm9uLXN0cmljdCkiLAorICAgIGNyZWF0ZU9iamVjdDogKCkgPT4gZnVuY3Rpb24oKSB7fSwKKyAg
ICBkb250RW51bUtleXM6IFsiYXJndW1lbnRzIiwgImNhbGxlciIsICJsZW5ndGgiLCAibmFtZSIs
ICJwcm90b3R5cGUiXSwKKyAgfSwKKyAgeworICAgIG5hbWU6ICJSZWdFeHAiLAorICAgIGNyZWF0
ZU9iamVjdDogKCkgPT4gLyg/OikvZywKKyAgICBkb250RW51bUtleXM6IFsibGFzdEluZGV4Il0s
CisgIH0sCisgIHsKKyAgICBuYW1lOiAiU3RyaW5nIiwKKyAgICBjcmVhdGVPYmplY3Q6ICgpID0+
IG5ldyBTdHJpbmcoImZvbyIpLAorICAgIGRvbnRFbnVtS2V5czogWyJsZW5ndGgiXSwKKyAgfSwK
KyAgeworICAgIG5hbWU6ICJBcmd1bWVudHMgKHN0cmljdCkiLAorICAgIGNyZWF0ZU9iamVjdDog
ZnVuY3Rpb24oZm9vKSB7ICJ1c2Ugc3RyaWN0IjsgcmV0dXJuIGFyZ3VtZW50czsgfSwKKyAgICBk
b250RW51bUtleXM6IFsibGVuZ3RoIiwgImNhbGxlZSJdLAorICB9LAorICB7CisgICAgbmFtZTog
IkFyZ3VtZW50cyAobm9uLXN0cmljdCkiLAorICAgIGNyZWF0ZU9iamVjdDogZnVuY3Rpb24oZm9v
KSB7IHJldHVybiBhcmd1bWVudHM7IH0sCisgICAgZG9udEVudW1LZXlzOiBbImxlbmd0aCIsICJj
YWxsZWUiXSwKKyAgfSwKKyAgeworICAgIG5hbWU6ICJSZWZsZWN0IiwKKyAgICBjcmVhdGVPYmpl
Y3Q6ICgpID0+ICR2bS5jcmVhdGVHbG9iYWxPYmplY3QoKS5SZWZsZWN0LAorICAgIGRvbnRFbnVt
S2V5czogWyJhcHBseSIsICJnZXQiLCAiaGFzIiwgInNldCJdLAorICB9LAorICB7CisgICAgbmFt
ZTogIkRhdGUucHJvdG90eXBlIiwKKyAgICBjcmVhdGVPYmplY3Q6ICgpID0+ICR2bS5jcmVhdGVH
bG9iYWxPYmplY3QoKS5EYXRlLnByb3RvdHlwZSwKKyAgICBkb250RW51bUtleXM6IFsidG9JU09T
dHJpbmciLCAiZ2V0VGltZSIsICJzZXRZZWFyIl0sCisgIH0sCitdOworCisvLyBiYXNpYyB0ZXN0
cworZm9yIChjb25zdCB0IG9mIHRlc3RDYXNlcykgeworICBhc3NlcnQoIWNvbnRhaW5zKGZvcklu
KHQuY3JlYXRlT2JqZWN0KCkpLCB0LmRvbnRFbnVtS2V5cyksIHQubmFtZSk7CisgIGFzc2VydCgh
Y29udGFpbnMoT2JqZWN0LmtleXModC5jcmVhdGVPYmplY3QoKSksIHQuZG9udEVudW1LZXlzKSwg
dC5uYW1lKTsKKworICBhc3NlcnQoY29udGFpbnMoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMo
dC5jcmVhdGVPYmplY3QoKSksIHQuZG9udEVudW1LZXlzKSwgdC5uYW1lKTsKKyAgYXNzZXJ0KGNv
bnRhaW5zKFJlZmxlY3Qub3duS2V5cyh0LmNyZWF0ZU9iamVjdCgpKSwgdC5kb250RW51bUtleXMp
LCB0Lm5hbWUpOworfQorCisvLyBzaGFkb3dpbmc6IERvbnRFbnVtID0+IEVudW0KK2ZvciAoY29u
c3QgdCBvZiB0ZXN0Q2FzZXMpIHsKKyAgYXNzZXJ0KAorICAgICFjb250YWlucygKKyAgICAgIGZv
ckluKG1ha2VQcm90b3R5cGVDaGFpbih0LmNyZWF0ZU9iamVjdCgpLCBtYWtlT2JqZWN0KHQuZG9u
dEVudW1LZXlzKSkpLAorICAgICAgdC5kb250RW51bUtleXMsCisgICAgKSwKKyAgICB0Lm5hbWUs
CisgICk7Cit9CisKKy8vIHNoYWRvd2luZzoge30gPT4gRG9udEVudW0gPT4ge30gPT4gRW51bQor
Zm9yIChjb25zdCB0IG9mIHRlc3RDYXNlcykgeworICBhc3NlcnQoCisgICAgIWNvbnRhaW5zKAor
ICAgICAgZm9ySW4obWFrZVByb3RvdHlwZUNoYWluKHt9LCB0LmNyZWF0ZU9iamVjdCgpLCB7fSwg
bWFrZU9iamVjdCh0LmRvbnRFbnVtS2V5cykpKSwKKyAgICAgIHQuZG9udEVudW1LZXlzLAorICAg
ICksCisgICAgdC5uYW1lLAorICApOworfQorCisvLyBzaGFkb3dpbmc6IERvbnRFbnVtID0+IHt9
ID0+IEVudW0gPT4ge30gPT4gRW51bQorZm9yIChjb25zdCB0IG9mIHRlc3RDYXNlcykgeworICBh
c3NlcnQoCisgICAgIWNvbnRhaW5zKAorICAgICAgZm9ySW4obWFrZVByb3RvdHlwZUNoYWluKHQu
Y3JlYXRlT2JqZWN0KCksIHt9LCBtYWtlT2JqZWN0KHQuZG9udEVudW1LZXlzKSwge30sIG1ha2VP
YmplY3QodC5kb250RW51bUtleXMpKSksCisgICAgICB0LmRvbnRFbnVtS2V5cywKKyAgICApLAor
ICAgIHQubmFtZSwKKyAgKTsKK30KKworLy8gc2hhZG93aW5nOiB7fSA9PiBEb250RW51bSAoZW51
bWVyYWJsZTogdHJ1ZSA9PiBmYWxzZSkgPT4ge30gPT4gRW51bQorZm9yIChjb25zdCB0IG9mIHRl
c3RDYXNlcykgeworICBjb25zdCBkb250RW51bU9iamVjdCA9IHQuY3JlYXRlT2JqZWN0KCk7Cisg
IGNvbnN0IHRhcmdldCA9IG1ha2VQcm90b3R5cGVDaGFpbih7fSwgZG9udEVudW1PYmplY3QsIHt9
LCBtYWtlT2JqZWN0KHQuZG9udEVudW1LZXlzKSk7CisgIGFzc2VydCghY29udGFpbnMoZm9ySW4o
dGFyZ2V0KSwgdC5kb250RW51bUtleXMpLCB0Lm5hbWUpOworCisgIGNvbnN0IGVudW1LZXlzID0g
dC5kb250RW51bUtleXMuZmlsdGVyKGtleSA9PiBSZWZsZWN0LmRlZmluZVByb3BlcnR5KGRvbnRF
bnVtT2JqZWN0LCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSB9KSk7CisgIGFzc2VydChjb250YWlu
cyhmb3JJbih0YXJnZXQpLCBlbnVtS2V5cyksIHQubmFtZSk7Cit9CisKKy8vIHNoYWRvd2luZzog
e30gPT4gRG9udEVudW0gKGRlbGV0ZSBub24tZW51bWVyYWJsZSBrZXlzKSA9PiB7fSA9PiBFbnVt
Citmb3IgKGNvbnN0IHQgb2YgdGVzdENhc2VzKSB7CisgIGNvbnN0IGRvbnRFbnVtT2JqZWN0ID0g
dC5jcmVhdGVPYmplY3QoKTsKKyAgY29uc3QgdGFyZ2V0ID0gbWFrZVByb3RvdHlwZUNoYWluKHt9
LCBkb250RW51bU9iamVjdCwge30sIG1ha2VPYmplY3QodC5kb250RW51bUtleXMpKTsKKyAgYXNz
ZXJ0KCFjb250YWlucyhmb3JJbih0YXJnZXQpLCB0LmRvbnRFbnVtS2V5cyksIHQubmFtZSk7CisK
KyAgY29uc3QgZW51bUtleXMgPSB0LmRvbnRFbnVtS2V5cy5maWx0ZXIoa2V5ID0+IFJlZmxlY3Qu
ZGVsZXRlUHJvcGVydHkoZG9udEVudW1PYmplY3QsIGtleSkpOworICBhc3NlcnQoY29udGFpbnMo
Zm9ySW4odGFyZ2V0KSwgZW51bUtleXMpLCB0Lm5hbWUpOworfQorCisvLyBzaGFkb3dpbmc6IHt9
ID0+IERvbnRFbnVtIChtYXRlcmlhbGl6ZWQpID0+IHt9ID0+IEVudW0KK2ZvciAoY29uc3QgdCBv
ZiB0ZXN0Q2FzZXMpIHsKKyAgY29uc3QgZG9udEVudW1PYmplY3QgPSB0LmNyZWF0ZU9iamVjdCgp
OworICBjb25zdCB0YXJnZXQgPSBtYWtlUHJvdG90eXBlQ2hhaW4oe30sIGRvbnRFbnVtT2JqZWN0
LCB7fSwgbWFrZU9iamVjdCh0LmRvbnRFbnVtS2V5cykpOworICBhc3NlcnQoIWNvbnRhaW5zKGZv
ckluKHRhcmdldCksIHQuZG9udEVudW1LZXlzKSwgdC5uYW1lKTsKKworICBjb25zdCBkb250RW51
bUtleXMgPSB0LmRvbnRFbnVtS2V5cy5maWx0ZXIoa2V5ID0+IHsKKyAgICBjb25zdCBkZXNjID0g
T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihkb250RW51bU9iamVjdCwga2V5KTsKKyAg
ICBpZiAoIVJlZmxlY3QuZGVsZXRlUHJvcGVydHkoZG9udEVudW1PYmplY3QsIGtleSkpIHJldHVy
biBmYWxzZTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZG9udEVudW1PYmplY3QsIGtleSwg
ZGVzYyk7CisgICAgcmV0dXJuIHRydWU7CisgIH0pOworCisgIGlmIChkb250RW51bUtleXMubGVu
Z3RoKQorICAgIGFzc2VydCghY29udGFpbnMoZm9ySW4odGFyZ2V0KSwgZG9udEVudW1LZXlzKSwg
dC5uYW1lKTsKK30KKworLy8gaGVscGVycworZnVuY3Rpb24gYXNzZXJ0KHZhbHVlLCBuYW1lKSB7
CisgIGlmICghdmFsdWUpCisgICAgdGhyb3cgbmV3IEVycm9yKGBCYWQgdmFsdWU6ICR7dmFsdWV9
LiBUZXN0IGNhc2U6ICR7bmFtZX0uYCk7Cit9CisKK2Z1bmN0aW9uIGNvbnRhaW5zKGFycmF5LCBz
dWJhcnJheSkgeworICByZXR1cm4gc3ViYXJyYXkuZXZlcnkoaXRlbSA9PiBhcnJheS5pbmNsdWRl
cyhpdGVtKSk7Cit9CisKK2Z1bmN0aW9uIGZvckluKG9iamVjdCkgeworICBjb25zdCBrZXlzID0g
W107CisgIGZvciAoY29uc3Qga2V5IGluIG9iamVjdCkKKyAgICBrZXlzLnB1c2goa2V5KTsKKyAg
cmV0dXJuIGtleXM7Cit9CisKK2Z1bmN0aW9uIG1ha2VQcm90b3R5cGVDaGFpbiguLi5vYmplY3Rz
KSB7CisgIG9iamVjdHMucmVkdWNlKChvYmplY3QsIHByb3RvdHlwZSkgPT4geworICAgIE9iamVj
dC5zZXRQcm90b3R5cGVPZihvYmplY3QsIHByb3RvdHlwZSk7CisgICAgcmV0dXJuIHByb3RvdHlw
ZTsKKyAgfSk7CisgIHJldHVybiBvYmplY3RzWzBdOworfQorCitmdW5jdGlvbiBtYWtlT2JqZWN0
KGtleXMpIHsKKyAgY29uc3Qgb2JqZWN0ID0ge307CisgIGZvciAoY29uc3Qga2V5IG9mIGtleXMp
CisgICAgb2JqZWN0W2tleV0gPSBrZXk7CisgIHJldHVybiBvYmplY3Q7Cit9CkluZGV4OiBKU1Rl
c3RzL3Rlc3QyNjIvZXhwZWN0YXRpb25zLnlhbWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy90ZXN0
MjYyL2V4cGVjdGF0aW9ucy55YW1sCShyZXZpc2lvbiAyNzAzNzMpCisrKyBKU1Rlc3RzL3Rlc3Qy
NjIvZXhwZWN0YXRpb25zLnlhbWwJKHdvcmtpbmcgY29weSkKQEAgLTI2NjksMTYgKzI2NjksMTAg
QEAgdGVzdC9sYW5ndWFnZS9zdGF0ZW1lbnRzL2Zvci1hd2FpdC1vZi90aQogdGVzdC9sYW5ndWFn
ZS9zdGF0ZW1lbnRzL2Zvci1hd2FpdC1vZi90aWNrcy13aXRoLXN5bmMtaXRlci1yZXNvbHZlZC1w
cm9taXNlLWFuZC1jb25zdHJ1Y3Rvci1sb29rdXAuanM6CiAgIGRlZmF1bHQ6ICdUZXN0MjYyOkFz
eW5jVGVzdEZhaWx1cmU6VGVzdDI2MkVycm9yOiBUZXN0MjYyRXJyb3I6IEV4cGVjdGVkIFtwcmUs
IHRpY2sgMSwgY29uc3RydWN0b3IsIGNvbnN0cnVjdG9yLCB0aWNrIDIsIHRpY2sgMywgbG9vcCwg
dGljayA0LCBjb25zdHJ1Y3Rvcl0gYW5kIFtwcmUsIGNvbnN0cnVjdG9yLCBjb25zdHJ1Y3Rvciwg
dGljayAxLCB0aWNrIDIsIGxvb3AsIGNvbnN0cnVjdG9yLCB0aWNrIDMsIHRpY2sgNCwgcG9zdF0g
dG8gaGF2ZSB0aGUgc2FtZSBjb250ZW50cy4gVGlja3MgYW5kIGNvbnN0cnVjdG9yIGxvb2t1cHMn
CiAgIHN0cmljdCBtb2RlOiAnVGVzdDI2MjpBc3luY1Rlc3RGYWlsdXJlOlRlc3QyNjJFcnJvcjog
VGVzdDI2MkVycm9yOiBFeHBlY3RlZCBbcHJlLCB0aWNrIDEsIGNvbnN0cnVjdG9yLCBjb25zdHJ1
Y3RvciwgdGljayAyLCB0aWNrIDMsIGxvb3AsIHRpY2sgNCwgY29uc3RydWN0b3JdIGFuZCBbcHJl
LCBjb25zdHJ1Y3RvciwgY29uc3RydWN0b3IsIHRpY2sgMSwgdGljayAyLCBsb29wLCBjb25zdHJ1
Y3RvciwgdGljayAzLCB0aWNrIDQsIHBvc3RdIHRvIGhhdmUgdGhlIHNhbWUgY29udGVudHMuIFRp
Y2tzIGFuZCBjb25zdHJ1Y3RvciBsb29rdXBzJwotdGVzdC9sYW5ndWFnZS9zdGF0ZW1lbnRzL2Zv
ci1pbi8xMi42LjQtMi5qczoKLSAgZGVmYXVsdDogJ1Rlc3QyNjJFcnJvcjogYWNjZXNzZWRQcm9w
IEV4cGVjdGVkIFNhbWVWYWx1ZSjCq3RydWXCuywgwqtmYWxzZcK7KSB0byBiZSB0cnVlJwotICBz
dHJpY3QgbW9kZTogJ1Rlc3QyNjJFcnJvcjogYWNjZXNzZWRQcm9wIEV4cGVjdGVkIFNhbWVWYWx1
ZSjCq3RydWXCuywgwqtmYWxzZcK7KSB0byBiZSB0cnVlJwogdGVzdC9sYW5ndWFnZS9zdGF0ZW1l
bnRzL2Zvci1pbi9oZWFkLWxocy1sZXQuanM6CiAgIGRlZmF1bHQ6ICJTeW50YXhFcnJvcjogQ2Fu
bm90IHVzZSB0aGUga2V5d29yZCAnaW4nIGFzIGEgbGV4aWNhbCB2YXJpYWJsZSBuYW1lLiIKIHRl
c3QvbGFuZ3VhZ2Uvc3RhdGVtZW50cy9mb3ItaW4vaWRlbnRpZmllci1sZXQtYWxsb3dlZC1hcy1s
ZWZ0aGFuZHNpZGUtZXhwcmVzc2lvbi1ub3Qtc3RyaWN0LmpzOgogICBkZWZhdWx0OiAiU3ludGF4
RXJyb3I6IENhbm5vdCB1c2UgdGhlIGtleXdvcmQgJ2luJyBhcyBhIGxleGljYWwgdmFyaWFibGUg
bmFtZS4iCi10ZXN0L2xhbmd1YWdlL3N0YXRlbWVudHMvZm9yLWluL29yZGVyLWVudW1lcmFibGUt
c2hhZG93ZWQuanM6Ci0gIGRlZmF1bHQ6ICdUZXN0MjYyRXJyb3I6IEV4cGVjdGVkIFtwMSwgcDJd
IGFuZCBbcDFdIHRvIGhhdmUgdGhlIHNhbWUgY29udGVudHMuICcKLSAgc3RyaWN0IG1vZGU6ICdU
ZXN0MjYyRXJyb3I6IEV4cGVjdGVkIFtwMSwgcDJdIGFuZCBbcDFdIHRvIGhhdmUgdGhlIHNhbWUg
Y29udGVudHMuICcKIHRlc3QvbGFuZ3VhZ2Uvc3RhdGVtZW50cy9mb3ItaW4vc2NvcGUtYm9keS1s
ZXgtb3Blbi5qczoKICAgZGVmYXVsdDogJ1Rlc3QyNjJFcnJvcjogRXhwZWN0ZWQgYSBSZWZlcmVu
Y2VFcnJvciB0byBiZSB0aHJvd24gYnV0IG5vIGV4Y2VwdGlvbiB3YXMgdGhyb3duIGF0IGFsbCcK
ICAgc3RyaWN0IG1vZGU6ICdUZXN0MjYyRXJyb3I6IEV4cGVjdGVkIGEgUmVmZXJlbmNlRXJyb3Ig
dG8gYmUgdGhyb3duIGJ1dCBubyBleGNlcHRpb24gd2FzIHRocm93biBhdCBhbGwnCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3MDM3MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNDIgQEAKKzIwMjAt
MTItMDMgIEFsZXhleSBTaHZheWthICA8c2h2YWlrYWxlc2hAZ21haWwuY29tPgorCisgICAgICAg
IE5vbi1lbnVtZXJhYmxlIHByb3BlcnR5IGZhaWxzIHRvIHNoYWRvdyBpbmhlcml0ZWQgZW51bWVy
YWJsZSBwcm9wZXJ0eSBmcm9tIGZvci1pbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9Mzg5NzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBXaGlsZSBmb3IvaW4gd2FzIGluaXRpYWxseSBzcGVjaWZpZWQgd2l0
aCBub3Rpb24gb2YgInNoYWRvd2luZyIsIGl0IHdhc24ndCBjbGFyaWZpZWQKKyAgICAgICAgdW50
aWwgRVM1IHRoYXQgW1tFbnVtZXJhYmxlXV0gYXR0cmlidXRlcyBhcmUgaWdub3JlZCB3aGVuIGRl
dGVybWluaW5nIGlmIGEgcHJvcGVydHkKKyAgICAgICAgaGFzIGFscmVhZHkgYmVlbiBwcm9jZXNz
ZWQuIFJlY2VudGx5LCBmb3IvaW4gc3BlYyB3YXMgZXhwYW5kZWQgWzFdIHRvIHBpbiBkb3duIGNv
bW1vbgorICAgICAgICBjYXNlIGVudW1lcmF0aW9uIGFzIGl0J3MgY3VycmVudGx5IGltcGxlbWVu
dGVkIGJ5IFY4IGFuZCBTcGlkZXJNb25rZXkuCisKKyAgICAgICAgU2luY2Uga2VlcGluZyB0cmFj
ayBvZiBEb250RW51bSBwcm9wZXJ0aWVzIGlzIGEgbWFzc2l2ZSBzbG93ZG93biBmb3IgdW5jYWNo
ZWQgcnVucworICAgICAgICAod2l0aCBhbnkgZGF0YSBzdHJ1Y3R1cmUgdXNlZCksIHRoaXMgcGF0
Y2ggc2ltcGx5IGFkZHMgW1tFbnVtZXJhYmxlXV0gY2hlY2sgdG8KKyAgICAgICAgaGFzX3tpbmRl
eGVkLHN0cnVjdHVyZSxnZW5lcmljfV9wcm9wZXJ0eSBieXRlY29kZSBvcHMgYW5kIGRvZXMgcmVu
YW1pbmcgY2hvcmVzLgorCisgICAgICAgIENvbW1vbiBjb2RlIGlzIG5vdyBzaGFyZWQgYmV0d2Vl
biBIYXNJbmRleGVkUHJvcGVydHkgKGVtaXR0ZWQgZm9yIGAwIGluIGFycmApIGFuZAorICAgICAg
ICBIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5IERGRyBub2RlcyB2aWEgcGFzc2luZyBkaWZm
ZXJlbnQgc2xvdyBwYXRoIG9wcyByYXRoZXIKKyAgICAgICAgdGhhbiBoYXZpbmcgT3BJbmZvIHdp
dGggUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGUsIHdoaWNoIGlzIGEgbmljZSByZWZh
Y3Rvci4KKworICAgICAgICBXaGlsZSB0aGlzIGNoYW5nZSBhbGlnbnMgY29tbW9uIGNhc2UgZm9y
L2luIGVudW1lcmF0aW9uIHdpdGggdGhlIHNwZWMgYW5kIG90aGVyCisgICAgICAgIGVuZ2luZXMs
IGl0IGFsc28gaW50cm9kdWNlcyBhIGZldyBvYnNlcnZhYmxlIGRpc2NyZXBhbmNpZXMgZnJvbSBW
OCBhbmQgU3BpZGVyTW9ua2V5LAorICAgICAgICB3aGljaCBhcmUgcGVybWl0dGVkIGJ5IHRoZSBz
cGVjIFsyXToKKyAgICAgICAgYSkgcHJvcGVydGllcyB0aGF0IGhhdmUgYmVlbiByZWRlZmluZWQg
YXMgRG9udEVudW0gd2l0aGluIGxvb3AgYm9keSBhcmUgc2tpcHBlZCwKKyAgICAgICAgICAgd2hp
Y2ggbWF0Y2hlcyB0aGUgc3BlYyBbM10gYW5kIHNlZW1zIGxpa2UgZXhwZWN0ZWQgYmVoYXZpb3I7
CisgICAgICAgIGIpICJzaGFkb3dpbmciIGlzIGJyb2tlbiBpZiBhIERvbnRFbnVtIHByb3BlcnR5
IG9mIGFscmVhZHkgdmlzaXRlZCBvYmplY3QgaXMKKyAgICAgICAgICAgYWRkZWQgLyBkZWxldGVk
IC8gcmVkZWZpbmVkIHdpdGhpbiBsb29wIGJvZHksIHdoaWNoIChwcmV0dHkgbXVjaCkgbmV2ZXIg
aGFwcGVucy4KKworICAgICAgICBUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgaW52YXJpYW50
OiBhbGwgcHJvcGVydGllcyBnZXRPd24qUHJvcGVydHlOYW1lcygpIHJldHVybnMKKyAgICAgICAg
aW4gRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6RXhjbHVkZSBzaG91bGQgYmUgcmVwb3J0ZWQgYXMg
W1tFbnVtZXJhYmxlXV0gYnkKKyAgICAgICAgZ2V0T3duUHJvcGVydHlTbG90KCkuIEpTQ2FsbGJh
Y2tPYmplY3QgYW5kIFJ1bnRpbWVBcnJheSBhcmUgZml4ZWQgdG8gZm9sbG93IGl0LgorCisgICAg
ICAgIGZvci9pbiBhbmQgT2JqZWN0LmtleXMgbWljcm9iZW5jaG1hcmtzIGFyZSBuZXV0cmFsLiBU
aGlzIGNoYW5nZSBkb2VzIG5vdCBhZmZlY3QKKyAgICAgICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yIGNhY2hpbmcsIG5vciBmYXN0IHBhdGhzIG9mIGl0cyBieXRlY29kZXMuCisKKyAgICAgICAg
WzFdOiBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9lY21hMjYyL3B1bGwvMTc5MQorICAgICAgICBb
Ml06IGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZW51bWVyYXRlLW9iamVjdC1wcm9wZXJ0
aWVzIChsYXN0IHBhcmFncmFwaCkKKyAgICAgICAgWzNdOiBodHRwczovL3RjMzkuZXMvZWNtYTI2
Mi8jc2VjLSVmb3Jpbml0ZXJhdG9ycHJvdG90eXBlJS5uZXh0IChzdGVwIDcuYi5paWkpCisKKyAg
ICAgICAgKiBBUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oOgorICAgICAgICAoSlNDOjpK
U0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgICog
QVBJL3Rlc3RzL3Rlc3RhcGkuYzoKKyAgICAgICAgKiBBUEkvdGVzdHMvdGVzdGFwaVNjcmlwdHMv
dGVzdGFwaS5qczoKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUxpc3QucmI6CisgICAgICAg
ICogYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuY3BwOgorICAgICAgICAoSlNDOjpjb21wdXRlVXNl
c0ZvckJ5dGVjb2RlSW5kZXhJbXBsKToKKyAgICAgICAgKEpTQzo6Y29tcHV0ZURlZnNGb3JCeXRl
Y29kZUluZGV4SW1wbCk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogYnl0ZWNvZGUv
T3Bjb2RlLmg6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoK
KyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRIYXNFbnVtZXJhYmxlSW5kZXhl
ZFByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRIYXNFbnVt
ZXJhYmxlU3RydWN0dXJlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRv
cjo6ZW1pdEhhc0VudW1lcmFibGVQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2Vu
ZXJhdG9yOjplbWl0SGFzR2VuZXJpY1Byb3BlcnR5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRIYXNJbmRleGVkUHJvcGVydHkpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEhhc1N0cnVjdHVyZVByb3BlcnR5KTog
RGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAg
ICAgICAgKiBieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcDoKKyAgICAgICAgKEpTQzo6Rm9y
SW5Ob2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEludGVycHJl
dGVySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8QWJz
dHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAgICogZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VC
bG9jayk6CisgICAgICAgICogZGZnL0RGR0NhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6Y2FwYWJpbGl0eUxldmVsKToKKyAgICAgICAgKiBkZmcvREZHQ2xvYmJlcml6ZS5oOgor
ICAgICAgICAoSlNDOjpERkc6OmNsb2JiZXJpemUpOgorICAgICAgICAqIGRmZy9ERkdEb2VzR0Mu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OmRvZXNHQyk6CisgICAgICAgICogZGZnL0RGR0ZpeHVw
UGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmZpeHVwTm9kZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Y29udmVydFRvSGFzSW5kZXhlZFByb3BlcnR5
KToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhh
c0FycmF5TW9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzSW50ZXJuYWxNZXRob2RU
eXBlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjppbnRlcm5hbE1l
dGhvZFR5cGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnNldElu
dGVybmFsTWV0aG9kVHlwZSk6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR05vZGVUeXBlLmg6
CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpT
Q19ERUZJTkVfSklUX09QRVJBVElPTik6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuaDoK
KyAgICAgICAgKiBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAg
ICAqIGRmZy9ERkdTU0FMb3dlcmluZ1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTU0FM
b3dlcmluZ1BoYXNlOjpoYW5kbGVOb2RlKToKKyAgICAgICAgKiBkZmcvREZHU2FmZVRvRXhlY3V0
ZS5oOgorICAgICAgICAoSlNDOjpERkc6OnNhZmVUb0V4ZWN1dGUpOgorICAgICAgICAqIGRmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVIYXNFbnVtZXJhYmxlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5KToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eSk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVIYXNHZW5lcmljUHJv
cGVydHkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlSGFzU3RydWN0dXJlUHJvcGVydHkpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5oOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICog
ZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBmdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcDoKKyAg
ICAgICAgKEpTQzo6RlRMOjpjYW5Db21waWxlKToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdU
b0IzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU5v
ZGUpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlSGFzSW5k
ZXhlZFByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29t
cGlsZUhhc0VudW1lcmFibGVQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dl
ckRGR1RvQjM6OmNvbXBpbGVIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHkpOgorICAgICAg
ICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlSGFzR2VuZXJpY1Byb3BlcnR5
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGls
ZUhhc1N0cnVjdHVyZVByb3BlcnR5KTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklULmNwcDoK
KyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKToKKyAgICAgICAgKEpT
Qzo6SklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcyk6CisgICAgICAgICogaml0L0pJVC5oOgor
ICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2hhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9oYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5KToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0U2xvd19vcF9oYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5KToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KTog
RGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklUT3Bjb2RlczMyXzY0LmNwcDoKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2hhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0eSk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9oYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5KToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9oYXNfZW51bWVyYWJsZV9pbmRleGVkX3By
b3BlcnR5KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVy
dHkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJv
cGVydHkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRl
eGVkX3Byb3BlcnR5KTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6
CisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVfSklUX09QRVJBVElPTik6CisgICAgICAgICogaml0
L0pJVE9wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFz
bToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtOgorICAgICAgICAq
IHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9D
T01NT05fU0xPV19QQVRIKToKKyAgICAgICAgKiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5oOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
aGFzUHJvcGVydHkgY29uc3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6aGFzRW51bWVyYWJs
ZVByb3BlcnR5IGNvbnN0KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6Omhhc1Byb3BlcnR5R2Vu
ZXJpYyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9KU09iamVjdC5oOgorCiAy
MDIwLTEyLTAyICBSb3NzIEtpcnNsaW5nICA8cm9zcy5raXJzbGluZ0Bzb255LmNvbT4KIAogICAg
ICAgICAlVHlwZWRBcnJheSUjc2xpY2Ugc2hvdWxkbid0IGNhcmUgYWJvdXQgc291cmNlIGJ1ZmZl
ciBkZXRhY2htZW50IGlmIHRoZXJlJ3Mgbm90aGluZyB0byBjb3B5CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAko
cmV2aXNpb24gMjcwMzczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNr
T2JqZWN0RnVuY3Rpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2NCwxMiArMTY0LDE0IEBAIGJv
b2wgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpnZXRPd25Qcm8KICAgICBpZiAoU3RyaW5nSW1w
bCogbmFtZSA9IHByb3BlcnR5TmFtZS51aWQoKSkgewogICAgICAgICBmb3IgKEpTQ2xhc3NSZWYg
anNDbGFzcyA9IHRoaXNPYmplY3QtPmNsYXNzUmVmKCk7IGpzQ2xhc3M7IGpzQ2xhc3MgPSBqc0Ns
YXNzLT5wYXJlbnRDbGFzcykgewogICAgICAgICAgICAgLy8gb3B0aW9uYWwgb3B0aW1pemF0aW9u
IHRvIGJ5cGFzcyBnZXRQcm9wZXJ0eSBpbiBjYXNlcyB3aGVuIHdlIG9ubHkgbmVlZCB0byBrbm93
IGlmIHRoZSBwcm9wZXJ0eSBleGlzdHMKKyAgICAgICAgICAgIC8vIEZJWE1FOiBTZXQgUmVhZE9u
bHkgY29uZGl0aW9uYWxseSwgYmFzZWQgb24gc2V0UHJvcGVydHkgcHJlc2VuY2UgaW4gY2xhc3Mg
aW5oZXJpdGFuY2UgY2hhaW4uCisgICAgICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7CiAgICAgICAg
ICAgICBpZiAoSlNPYmplY3RIYXNQcm9wZXJ0eUNhbGxiYWNrIGhhc1Byb3BlcnR5ID0ganNDbGFz
cy0+aGFzUHJvcGVydHkpIHsKICAgICAgICAgICAgICAgICBpZiAoIXByb3BlcnR5TmFtZVJlZikK
ICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lUmVmID0gT3BhcXVlSlNTdHJpbmc6OnRy
eUNyZWF0ZShuYW1lKTsKICAgICAgICAgICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9w
QWxsTG9ja3MoZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgICAgICAgICBpZiAoaGFzUHJvcGVydHko
Y3R4LCB0aGlzUmVmLCBwcm9wZXJ0eU5hbWVSZWYuZ2V0KCkpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25s
eSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSwgZ2V0Q2FsbGJhY2tHZXR0ZXIoKSk7Cisg
ICAgICAgICAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIGF0dHJpYnV0ZXMs
IGdldENhbGxiYWNrR2V0dGVyKCkpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgaWYgKEpTT2JqZWN0R2V0UHJv
cGVydHlDYWxsYmFjayBnZXRQcm9wZXJ0eSA9IGpzQ2xhc3MtPmdldFByb3BlcnR5KSB7CkBAIC0x
ODMsMjkgKzE4NSwzMCBAQCBib29sIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6Z2V0T3duUHJv
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmIChleGNlcHRpb24pIHsKICAg
ICAgICAgICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCBzY29wZSwgdG9K
UyhnbG9iYWxPYmplY3QsIGV4Y2VwdGlvbikpOwotICAgICAgICAgICAgICAgICAgICBzbG90LnNl
dFZhbHVlKHRoaXNPYmplY3QsIFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IFByb3BlcnR5
QXR0cmlidXRlOjpEb250RW51bSwganNVbmRlZmluZWQoKSk7CisgICAgICAgICAgICAgICAgICAg
IHNsb3Quc2V0VmFsdWUodGhpc09iamVjdCwgYXR0cmlidXRlcywganNVbmRlZmluZWQoKSk7CiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICBpZiAodmFsdWUpIHsKLSAgICAgICAgICAgICAgICAgICAgc2xvdC5zZXRWYWx1
ZSh0aGlzT2JqZWN0LCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBQcm9wZXJ0eUF0dHJp
YnV0ZTo6RG9udEVudW0sIHRvSlMoZ2xvYmFsT2JqZWN0LCB2YWx1ZSkpOworICAgICAgICAgICAg
ICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIGF0dHJpYnV0ZXMsIHRvSlMoZ2xvYmFs
T2JqZWN0LCB2YWx1ZSkpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlm
IChPcGFxdWVKU0NsYXNzU3RhdGljVmFsdWVzVGFibGUqIHN0YXRpY1ZhbHVlcyA9IGpzQ2xhc3Mt
PnN0YXRpY1ZhbHVlcyhnbG9iYWxPYmplY3QpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHN0YXRp
Y1ZhbHVlcy0+Y29udGFpbnMobmFtZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoU3RhdGljVmFs
dWVFbnRyeSogZW50cnkgPSBzdGF0aWNWYWx1ZXMtPmdldChuYW1lKSkgeworICAgICAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogZ2V0U3RhdGljVmFsdWUoKSBwZXJmb3JtcyB0aGUgc2FtZSBsb29w
ICYgY2hlY2tzIGp1c3QgdG8gYWNxdWlyZSBgZW50cnlgLgogICAgICAgICAgICAgICAgICAgICBK
U1ZhbHVlIHZhbHVlID0gdGhpc09iamVjdC0+Z2V0U3RhdGljVmFsdWUoZ2xvYmFsT2JqZWN0LCBw
cm9wZXJ0eU5hbWUpOwogICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCBQcm9wZXJ0eUF0dHJpYnV0
ZTo6UmVhZE9ubHkgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0sIHZhbHVlKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdCwgZW50cnktPmF0dHJp
YnV0ZXMsIHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgCiAgICAgICAgICAgICBpZiAoT3BhcXVlSlNDbGFzc1N0YXRpY0Z1bmN0aW9uc1Rh
YmxlKiBzdGF0aWNGdW5jdGlvbnMgPSBqc0NsYXNzLT5zdGF0aWNGdW5jdGlvbnMoZ2xvYmFsT2Jq
ZWN0KSkgewotICAgICAgICAgICAgICAgIGlmIChzdGF0aWNGdW5jdGlvbnMtPmNvbnRhaW5zKG5h
bWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIFBy
b3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSwg
Z2V0U3RhdGljRnVuY3Rpb25HZXR0ZXIoKSk7CisgICAgICAgICAgICAgICAgaWYgKFN0YXRpY0Z1
bmN0aW9uRW50cnkqIGVudHJ5ID0gc3RhdGljRnVuY3Rpb25zLT5nZXQobmFtZSkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgZW50cnktPmF0dHJpYnV0
ZXMsIGdldFN0YXRpY0Z1bmN0aW9uR2V0dGVyKCkpOwogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkuYwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkuYwkocmV2aXNpb24gMjcwMzczKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLmMJKHdvcmtpbmcgY29weSkK
QEAgLTEwMTcsMTIgKzEwMTcsMTQgQEAgc3RhdGljIEpTVmFsdWVSZWYgZnVuY3Rpb25HQyhKU0Nv
bnRleHRSZQogCiBzdGF0aWMgSlNTdGF0aWNWYWx1ZSBnbG9iYWxPYmplY3Rfc3RhdGljVmFsdWVz
W10gPSB7CiAgICAgeyAiZ2xvYmFsU3RhdGljVmFsdWUiLCBnbG9iYWxPYmplY3RfZ2V0LCBnbG9i
YWxPYmplY3Rfc2V0LCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZU5vbmUgfSwKKyAgICB7ICJnbG9iYWxT
dGF0aWNWYWx1ZTIiLCBnbG9iYWxPYmplY3RfZ2V0LCAwLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJl
YWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RW51bSB9LAogICAgIHsgMCwgMCwgMCwg
MCB9CiB9OwogCiBzdGF0aWMgSlNTdGF0aWNGdW5jdGlvbiBnbG9iYWxPYmplY3Rfc3RhdGljRnVu
Y3Rpb25zW10gPSB7CiAgICAgeyAiZ2xvYmFsU3RhdGljRnVuY3Rpb24iLCBnbG9iYWxPYmplY3Rf
Y2FsbCwga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25lIH0sCiAgICAgeyAiZ2xvYmFsU3RhdGljRnVu
Y3Rpb24yIiwgZ2xvYmFsT2JqZWN0X2NhbGwsIGtKU1Byb3BlcnR5QXR0cmlidXRlTm9uZSB9LAor
ICAgIHsgImdsb2JhbFN0YXRpY0Z1bmN0aW9uMyIsIGdsb2JhbE9iamVjdF9jYWxsLCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RW51bSB9LAog
ICAgIHsgImdjIiwgZnVuY3Rpb25HQywga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25lIH0sCiAgICAg
eyAwLCAwLCAwIH0KIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rl
c3RhcGlTY3JpcHRzL3Rlc3RhcGkuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS90ZXN0cy90ZXN0YXBpU2NyaXB0cy90ZXN0YXBpLmpzCShyZXZpc2lvbiAyNzAzNzMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGlTY3JpcHRzL3Rlc3Rh
cGkuanMJKHdvcmtpbmcgY29weSkKQEAgLTg0LDYgKzg0LDE2IEBAIHRoaXMuZ2xvYmFsU3RhdGlj
RnVuY3Rpb24yID0gZnVuY3Rpb24oKSAKIHNob3VsZEJlKCJnbG9iYWxTdGF0aWNGdW5jdGlvbjIo
KTsiLCAyMCk7CiBzaG91bGRCZSgidGhpcy5nbG9iYWxTdGF0aWNGdW5jdGlvbjIoKTsiLCAyMCk7
CiAKK3ZhciBnbG9iYWxTdGF0aWNWYWx1ZTJEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3Bl
cnR5RGVzY3JpcHRvcih0aGlzLCAiZ2xvYmFsU3RhdGljVmFsdWUyIik7CitzaG91bGRCZSgndHlw
ZW9mIGdsb2JhbFN0YXRpY1ZhbHVlMkRlc2NyaXB0b3InLCAib2JqZWN0Iik7CitzaG91bGRCZSgn
Z2xvYmFsU3RhdGljVmFsdWUyRGVzY3JpcHRvci53cml0YWJsZScsIGZhbHNlKTsKK3Nob3VsZEJl
KCdnbG9iYWxTdGF0aWNWYWx1ZTJEZXNjcmlwdG9yLmVudW1lcmFibGUnLCBmYWxzZSk7CisKK3Zh
ciBnbG9iYWxTdGF0aWNGdW5jdGlvbjNEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5
RGVzY3JpcHRvcih0aGlzLCAiZ2xvYmFsU3RhdGljRnVuY3Rpb24zIik7CitzaG91bGRCZSgndHlw
ZW9mIGdsb2JhbFN0YXRpY0Z1bmN0aW9uM0Rlc2NyaXB0b3InLCAib2JqZWN0Iik7CitzaG91bGRC
ZSgnZ2xvYmFsU3RhdGljRnVuY3Rpb24zRGVzY3JpcHRvci53cml0YWJsZScsIGZhbHNlKTsKK3No
b3VsZEJlKCdnbG9iYWxTdGF0aWNGdW5jdGlvbjNEZXNjcmlwdG9yLmVudW1lcmFibGUnLCBmYWxz
ZSk7CisKIGZ1bmN0aW9uIGlBbU5vdEFTdGF0aWNGdW5jdGlvbigpIHsgcmV0dXJuIDEwOyB9CiBz
aG91bGRCZSgiaUFtTm90QVN0YXRpY0Z1bmN0aW9uKCk7IiwgMTApOwogdGhpcy5pQW1Ob3RBU3Rh
dGljRnVuY3Rpb24gPSBmdW5jdGlvbigpIHsgcmV0dXJuIDIwOyB9CkBAIC0xMzQsMTIgKzE0NCwx
MiBAQCB2YXIgYWx3YXlzT25lRGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25QCiBzaG91bGRCZSgn
dHlwZW9mIGFsd2F5c09uZURlc2NyaXB0b3InLCAib2JqZWN0Iik7CiBzaG91bGRCZSgnYWx3YXlz
T25lRGVzY3JpcHRvci52YWx1ZScsIE15T2JqZWN0LmFsd2F5c09uZSk7CiBzaG91bGRCZSgnYWx3
YXlzT25lRGVzY3JpcHRvci5jb25maWd1cmFibGUnLCB0cnVlKTsKLXNob3VsZEJlKCdhbHdheXNP
bmVEZXNjcmlwdG9yLmVudW1lcmFibGUnLCBmYWxzZSk7IC8vIEFjdHVhbGx5IGl0IGlzLgorc2hv
dWxkQmUoJ2Fsd2F5c09uZURlc2NyaXB0b3IuZW51bWVyYWJsZScsIHRydWUpOwogdmFyIGNhbnRG
aW5kRGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTXlPYmplY3Qs
ICJjYW50RmluZCIpOwogc2hvdWxkQmUoJ3R5cGVvZiBjYW50RmluZERlc2NyaXB0b3InLCAib2Jq
ZWN0Iik7CiBzaG91bGRCZSgnY2FudEZpbmREZXNjcmlwdG9yLnZhbHVlJywgTXlPYmplY3QuY2Fu
dEZpbmQpOwogc2hvdWxkQmUoJ2NhbnRGaW5kRGVzY3JpcHRvci5jb25maWd1cmFibGUnLCB0cnVl
KTsKLXNob3VsZEJlKCdjYW50RmluZERlc2NyaXB0b3IuZW51bWVyYWJsZScsIGZhbHNlKTsKK3No
b3VsZEJlKCdjYW50RmluZERlc2NyaXB0b3IuZW51bWVyYWJsZScsIHRydWUpOwogdHJ5IHsKICAg
ICAvLyBJZiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoKSByZXR1cm5lZCBhbiBhY2Nlc3MgZGVz
Y3JpcHRvciwgdGhpcyB3b3VsZG4ndCB0aHJvdy4KICAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKE15T2JqZWN0LCAidGhyb3dPbkdldCIpOwpAQCAtMTUwLDcgKzE2MCw3IEBAIHZh
ciBteVByb3BlcnR5TmFtZURlc2NyaXB0b3IgPSBPYmplY3QuZ2UKIHNob3VsZEJlKCd0eXBlb2Yg
bXlQcm9wZXJ0eU5hbWVEZXNjcmlwdG9yJywgIm9iamVjdCIpOwogc2hvdWxkQmUoJ215UHJvcGVy
dHlOYW1lRGVzY3JpcHRvci52YWx1ZScsIE15T2JqZWN0Lm15UHJvcGVydHlOYW1lKTsKIHNob3Vs
ZEJlKCdteVByb3BlcnR5TmFtZURlc2NyaXB0b3IuY29uZmlndXJhYmxlJywgdHJ1ZSk7Ci1zaG91
bGRCZSgnbXlQcm9wZXJ0eU5hbWVEZXNjcmlwdG9yLmVudW1lcmFibGUnLCBmYWxzZSk7IC8vIEFj
dHVhbGx5IGl0IGlzLgorc2hvdWxkQmUoJ215UHJvcGVydHlOYW1lRGVzY3JpcHRvci5lbnVtZXJh
YmxlJywgdHJ1ZSk7CiB0cnkgewogICAgIC8vIGlmIGdldE93blByb3BlcnR5RGVzY3JpcHRvcigp
IHJldHVybmVkIGFuIGFjY2VzcyBkZXNjcmlwdG9yLCB0aGlzIHdvdWxkbid0IHRocm93LgogICAg
IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTXlPYmplY3QsICJoYXNQcm9wZXJ0eUxp
ZSIpOwpAQCAtMjM3LDIzICsyNDcsMjMgQEAgdmFyIGJhc2VEdXBEZXNjcmlwdG9yID0gT2JqZWN0
LmdldE93blBybwogc2hvdWxkQmUoJ3R5cGVvZiBiYXNlRHVwRGVzY3JpcHRvcicsICJvYmplY3Qi
KTsKIHNob3VsZEJlKCdiYXNlRHVwRGVzY3JpcHRvci52YWx1ZScsIGRlcml2ZWQuYmFzZUR1cCk7
CiBzaG91bGRCZSgnYmFzZUR1cERlc2NyaXB0b3IuY29uZmlndXJhYmxlJywgdHJ1ZSk7Ci1zaG91
bGRCZSgnYmFzZUR1cERlc2NyaXB0b3IuZW51bWVyYWJsZScsIGZhbHNlKTsKK3Nob3VsZEJlKCdi
YXNlRHVwRGVzY3JpcHRvci5lbnVtZXJhYmxlJywgdHJ1ZSk7CiB2YXIgYmFzZU9ubHlEZXNjcmlw
dG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihkZXJpdmVkLCAiYmFzZU9ubHki
KTsKIHNob3VsZEJlKCd0eXBlb2YgYmFzZU9ubHlEZXNjcmlwdG9yJywgIm9iamVjdCIpOwogc2hv
dWxkQmUoJ2Jhc2VPbmx5RGVzY3JpcHRvci52YWx1ZScsIGRlcml2ZWQuYmFzZU9ubHkpOwogc2hv
dWxkQmUoJ2Jhc2VPbmx5RGVzY3JpcHRvci5jb25maWd1cmFibGUnLCB0cnVlKTsKLXNob3VsZEJl
KCdiYXNlT25seURlc2NyaXB0b3IuZW51bWVyYWJsZScsIGZhbHNlKTsKK3Nob3VsZEJlKCdiYXNl
T25seURlc2NyaXB0b3IuZW51bWVyYWJsZScsIHRydWUpOwogc2hvdWxkQmUoJ09iamVjdC5nZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoZGVyaXZlZCwgInByb3RvT25seSIpJywgdW5kZWZpbmVkKTsK
IHZhciBwcm90b0R1cERlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KGRlcml2ZWQsICJwcm90b0R1cCIpOwogc2hvdWxkQmUoJ3R5cGVvZiBwcm90b0R1cERlc2NyaXB0
b3InLCAib2JqZWN0Iik7CiBzaG91bGRCZSgncHJvdG9EdXBEZXNjcmlwdG9yLnZhbHVlJywgZGVy
aXZlZC5wcm90b0R1cCk7CiBzaG91bGRCZSgncHJvdG9EdXBEZXNjcmlwdG9yLmNvbmZpZ3VyYWJs
ZScsIHRydWUpOwotc2hvdWxkQmUoJ3Byb3RvRHVwRGVzY3JpcHRvci5lbnVtZXJhYmxlJywgZmFs
c2UpOworc2hvdWxkQmUoJ3Byb3RvRHVwRGVzY3JpcHRvci5lbnVtZXJhYmxlJywgdHJ1ZSk7CiB2
YXIgZGVyaXZlZE9ubHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRv
cihkZXJpdmVkLCAiZGVyaXZlZE9ubHkiKTsKIHNob3VsZEJlKCd0eXBlb2YgZGVyaXZlZE9ubHlE
ZXNjcmlwdG9yJywgIm9iamVjdCIpOwogc2hvdWxkQmUoJ2Rlcml2ZWRPbmx5RGVzY3JpcHRvci52
YWx1ZScsIGRlcml2ZWQuZGVyaXZlZE9ubHkpOwogc2hvdWxkQmUoJ2Rlcml2ZWRPbmx5RGVzY3Jp
cHRvci5jb25maWd1cmFibGUnLCB0cnVlKTsKLXNob3VsZEJlKCdkZXJpdmVkT25seURlc2NyaXB0
b3IuZW51bWVyYWJsZScsIGZhbHNlKTsKK3Nob3VsZEJlKCdkZXJpdmVkT25seURlc2NyaXB0b3Iu
ZW51bWVyYWJsZScsIHRydWUpOwogCiBzaG91bGRCZSgidW5kZWZpbmVkIGluc3RhbmNlb2YgTXlP
YmplY3QiLCBmYWxzZSk7CiBFdmlsRXhjZXB0aW9uT2JqZWN0Lmhhc0luc3RhbmNlID0gZnVuY3Rp
b24gZigpIHsgcmV0dXJuIGYoKTsgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9CeXRlY29kZUxpc3QucmIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgkocmV2aXNpb24gMjcwMzczKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgkod29ya2luZyBjb3B5KQpAQCAt
MTEyNSw3ICsxMTI1LDcgQEAgb3AgOmdldF9lbnVtZXJhYmxlX2xlbmd0aCwKICAgICAgICAgYmFz
ZTogVmlydHVhbFJlZ2lzdGVyLAogICAgIH0KIAotb3AgOmhhc19pbmRleGVkX3Byb3BlcnR5LAor
b3AgOmhhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHksCiAgICAgYXJnczogewogICAgICAg
ICBkc3Q6IFZpcnR1YWxSZWdpc3RlciwKICAgICAgICAgYmFzZTogVmlydHVhbFJlZ2lzdGVyLApA
QCAtMTEzNSw3ICsxMTM1LDcgQEAgb3AgOmhhc19pbmRleGVkX3Byb3BlcnR5LAogICAgICAgICBh
cnJheVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKICAgICB9CiAKLW9wIDpoYXNfc3RydWN0dXJlX3By
b3BlcnR5LAorb3AgOmhhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0eSwKICAgICBhcmdz
OiB7CiAgICAgICAgIGRzdDogVmlydHVhbFJlZ2lzdGVyLAogICAgICAgICBiYXNlOiBWaXJ0dWFs
UmVnaXN0ZXIsCkBAIC0xMTU5LDcgKzExNTksNyBAQCBvcCA6aW5fc3RydWN0dXJlX3Byb3BlcnR5
LAogICAgICAgICBlbnVtZXJhdG9yOiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAgfQogCi1vcCA6aGFz
X2dlbmVyaWNfcHJvcGVydHksCitvcCA6aGFzX2VudW1lcmFibGVfcHJvcGVydHksCiAgICAgYXJn
czogewogICAgICAgICBkc3Q6IFZpcnR1YWxSZWdpc3RlciwKICAgICAgICAgYmFzZTogVmlydHVh
bFJlZ2lzdGVyLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
VXNlRGVmLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Qnl0ZWNvZGVVc2VEZWYuY3BwCShyZXZpc2lvbiAyNzAzNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjEs
OCArMjIxLDkgQEAgdm9pZCBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlSW5kZXhJbXBsKFZpcgogICAg
IFVTRVMoT3BHZXRGcm9tQXJndW1lbnRzLCBhcmd1bWVudHMpCiAgICAgVVNFUyhPcE5ld0FycmF5
QnVmZmVyLCBpbW11dGFibGVCdXR0ZXJmbHkpCiAKLSAgICBVU0VTKE9wSGFzR2VuZXJpY1Byb3Bl
cnR5LCBiYXNlLCBwcm9wZXJ0eSkKLSAgICBVU0VTKE9wSGFzSW5kZXhlZFByb3BlcnR5LCBiYXNl
LCBwcm9wZXJ0eSkKKyAgICBVU0VTKE9wSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eSwgYmFz
ZSwgcHJvcGVydHkpCisgICAgVVNFUyhPcEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eSwg
YmFzZSwgcHJvcGVydHksIGVudW1lcmF0b3IpCisgICAgVVNFUyhPcEhhc0VudW1lcmFibGVQcm9w
ZXJ0eSwgYmFzZSwgcHJvcGVydHkpCiAgICAgVVNFUyhPcEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFt
ZSwgZW51bWVyYXRvciwgaW5kZXgpCiAgICAgVVNFUyhPcEVudW1lcmF0b3JHZW5lcmljUG5hbWUs
IGVudW1lcmF0b3IsIGluZGV4KQogICAgIFVTRVMoT3BHZXRCeVZhbCwgYmFzZSwgcHJvcGVydHkp
CkBAIC0yNjAsNyArMjYxLDYgQEAgdm9pZCBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlSW5kZXhJbXBs
KFZpcgogCiAgICAgVVNFUyhPcEdldEJ5VmFsV2l0aFRoaXMsIGJhc2UsIHRoaXNWYWx1ZSwgcHJv
cGVydHkpCiAgICAgVVNFUyhPcEluc3RhbmNlb2ZDdXN0b20sIHZhbHVlLCBjb25zdHJ1Y3Rvciwg
aGFzSW5zdGFuY2VWYWx1ZSkKLSAgICBVU0VTKE9wSGFzU3RydWN0dXJlUHJvcGVydHksIGJhc2Us
IHByb3BlcnR5LCBlbnVtZXJhdG9yKQogICAgIFVTRVMoT3BIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0
eSwgYmFzZSwgcHJvcGVydHksIGVudW1lcmF0b3IpCiAgICAgVVNFUyhPcEluU3RydWN0dXJlUHJv
cGVydHksIGJhc2UsIHByb3BlcnR5LCBlbnVtZXJhdG9yKQogCkBAIC00MjAsMTEgKzQyMCwxMSBA
QCB2b2lkIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVJbmRleEltcGwodW5zCiAgICAgREVGUyhPcEFy
Z3VtZW50Q291bnQsIGRzdCkKICAgICBERUZTKE9wVG9JbmRleFN0cmluZywgZHN0KQogICAgIERF
RlMoT3BHZXRFbnVtZXJhYmxlTGVuZ3RoLCBkc3QpCi0gICAgREVGUyhPcEhhc0luZGV4ZWRQcm9w
ZXJ0eSwgZHN0KQotICAgIERFRlMoT3BIYXNTdHJ1Y3R1cmVQcm9wZXJ0eSwgZHN0KQorICAgIERF
RlMoT3BIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5LCBkc3QpCisgICAgREVGUyhPcEhhc0Vu
dW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eSwgZHN0KQorICAgIERFRlMoT3BIYXNFbnVtZXJhYmxl
UHJvcGVydHksIGRzdCkKICAgICBERUZTKE9wSGFzT3duU3RydWN0dXJlUHJvcGVydHksIGRzdCkK
ICAgICBERUZTKE9wSW5TdHJ1Y3R1cmVQcm9wZXJ0eSwgZHN0KQotICAgIERFRlMoT3BIYXNHZW5l
cmljUHJvcGVydHksIGRzdCkKICAgICBERUZTKE9wR2V0RGlyZWN0UG5hbWUsIGRzdCkKICAgICBE
RUZTKE9wR2V0UHJvcGVydHlFbnVtZXJhdG9yLCBkc3QpCiAgICAgREVGUyhPcEVudW1lcmF0b3JT
dHJ1Y3R1cmVQbmFtZSwgZHN0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI3MDM3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDMsNyArNTAz
LDcgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgUwogICAgICAgICBP
cGNvZGVJRCBvcGNvZGVJRCA9IGluc3RydWN0aW9uLT5vcGNvZGVJRCgpOwogICAgICAgICBtX2J5
dGVjb2RlQ29zdCArPSBvcGNvZGVMZW5ndGhzW29wY29kZUlEXTsKICAgICAgICAgc3dpdGNoIChv
cGNvZGVJRCkgewotICAgICAgICBMSU5LKE9wSGFzSW5kZXhlZFByb3BlcnR5KQorICAgICAgICBM
SU5LKE9wSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eSkKIAogICAgICAgICBMSU5LKE9wQ2Fs
bFZhcmFyZ3MsIHByb2ZpbGUpCiAgICAgICAgIExJTksoT3BUYWlsQ2FsbFZhcmFyZ3MsIHByb2Zp
bGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCShyZXZpc2lv
biAyNzAzNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEyNiw3ICsxMjYsNyBAQCBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVk
IGJpdFdpZHRoRm9yTWF4CiAgICAgbWFjcm8oT3BSc2hpZnQpIFwKIAogI2RlZmluZSBGT1JfRUFD
SF9PUENPREVfV0lUSF9BUlJBWV9QUk9GSUxFKG1hY3JvKSBcCi0gICAgbWFjcm8oT3BIYXNJbmRl
eGVkUHJvcGVydHkpIFwKKyAgICBtYWNybyhPcEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHkp
IFwKICAgICBtYWNybyhPcENhbGxWYXJhcmdzKSBcCiAgICAgbWFjcm8oT3BUYWlsQ2FsbFZhcmFy
Z3MpIFwKICAgICBtYWNybyhPcFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50cykgXApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdl
bmVyYXRvci5jcHAJKHJldmlzaW9uIDI3MDM3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzY0
LDIxICs0MzY0LDIxIEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0RW4K
ICAgICByZXR1cm4gZHN0OwogfQogCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1p
dEhhc0dlbmVyaWNQcm9wZXJ0eShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJl
Z2lzdGVySUQqIHByb3BlcnR5TmFtZSkKK1JlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjpl
bWl0SGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVy
SUQqIGJhc2UsIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFtZSkKIHsKLSAgICBPcEhhc0dlbmVyaWNQ
cm9wZXJ0eTo6ZW1pdCh0aGlzLCBkc3QsIGJhc2UsIHByb3BlcnR5TmFtZSk7CisgICAgT3BIYXNF
bnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5OjplbWl0KHRoaXMsIGRzdCwgYmFzZSwgcHJvcGVydHlO
YW1lKTsKICAgICByZXR1cm4gZHN0OwogfQogCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRv
cjo6ZW1pdEhhc0luZGV4ZWRQcm9wZXJ0eShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJh
c2UsIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFtZSkKK1JlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJh
dG9yOjplbWl0SGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5KFJlZ2lzdGVySUQqIGRzdCwg
UmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCogcHJvcGVydHlOYW1lLCBSZWdpc3RlcklEKiBl
bnVtZXJhdG9yKQogewotICAgIE9wSGFzSW5kZXhlZFByb3BlcnR5OjplbWl0KHRoaXMsIGRzdCwg
YmFzZSwgcHJvcGVydHlOYW1lKTsKKyAgICBPcEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0
eTo6ZW1pdCh0aGlzLCBkc3QsIGJhc2UsIHByb3BlcnR5TmFtZSwgZW51bWVyYXRvcik7CiAgICAg
cmV0dXJuIGRzdDsKIH0KIAotUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRIYXNT
dHJ1Y3R1cmVQcm9wZXJ0eShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lz
dGVySUQqIHByb3BlcnR5TmFtZSwgUmVnaXN0ZXJJRCogZW51bWVyYXRvcikKK1JlZ2lzdGVySUQq
IEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SGFzRW51bWVyYWJsZVByb3BlcnR5KFJlZ2lzdGVySUQq
IGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCogcHJvcGVydHlOYW1lKQogewotICAg
IE9wSGFzU3RydWN0dXJlUHJvcGVydHk6OmVtaXQodGhpcywgZHN0LCBiYXNlLCBwcm9wZXJ0eU5h
bWUsIGVudW1lcmF0b3IpOworICAgIE9wSGFzRW51bWVyYWJsZVByb3BlcnR5OjplbWl0KHRoaXMs
IGRzdCwgYmFzZSwgcHJvcGVydHlOYW1lKTsKICAgICByZXR1cm4gZHN0OwogfQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdl
bmVyYXRvci5oCShyZXZpc2lvbiAyNzAzNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTkwMywxMCAr
OTAzLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRFbnRlcigpOwogICAg
ICAgICB2b2lkIGVtaXRDaGVja1RyYXBzKCk7CiAKLSAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEhh
c0luZGV4ZWRQcm9wZXJ0eShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lz
dGVySUQqIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRIYXNTdHJ1Y3R1
cmVQcm9wZXJ0eShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQq
IHByb3BlcnR5TmFtZSwgUmVnaXN0ZXJJRCogZW51bWVyYXRvcik7CisgICAgICAgIFJlZ2lzdGVy
SUQqIGVtaXRIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5KFJlZ2lzdGVySUQqIGRzdCwgUmVn
aXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCogcHJvcGVydHlOYW1lKTsKKyAgICAgICAgUmVnaXN0
ZXJJRCogZW1pdEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eShSZWdpc3RlcklEKiBkc3Qs
IFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFtZSwgUmVnaXN0ZXJJRCog
ZW51bWVyYXRvcik7CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRIYXNFbnVtZXJhYmxlUHJvcGVy
dHkoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBwcm9wZXJ0
eU5hbWUpOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0SGFzT3duU3RydWN0dXJlUHJvcGVydHko
UmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5h
bWUsIFJlZ2lzdGVySUQqIGVudW1lcmF0b3IpOwotICAgICAgICBSZWdpc3RlcklEKiBlbWl0SGFz
R2VuZXJpY1Byb3BlcnR5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0
ZXJJRCogcHJvcGVydHlOYW1lKTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEdldFByb3BlcnR5
RW51bWVyYXRvcihSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UpOwogICAgICAgICBS
ZWdpc3RlcklEKiBlbWl0R2V0RW51bWVyYWJsZUxlbmd0aChSZWdpc3RlcklEKiBkc3QsIFJlZ2lz
dGVySUQqIGJhc2UpOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0R2V0U3RydWN0dXJlUHJvcGVy
dHlFbnVtZXJhdG9yKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJ
RCogbGVuZ3RoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9k
ZXNDb2RlZ2VuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL05vZGVzQ29kZWdlbi5jcHAJKHJldmlzaW9uIDI3MDM3MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzk2Miw3ICszOTYyLDcgQEAgdm9pZCBGb3JJbk5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29k
ZUdlbgogCiAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXN1bHQgPSBnZW5lcmF0b3IuZW1p
dEVxdWFsaXR5T3A8T3BMZXNzPihnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGkuZ2V0KCksIGxl
bmd0aC5nZXQoKSk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcElmRmFsc2UocmVzdWx0Lmdl
dCgpLCBsb29wRW5kLmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRIYXNJbmRleGVkUHJv
cGVydHkocmVzdWx0LmdldCgpLCBiYXNlLmdldCgpLCBpLmdldCgpKTsKKyAgICAgICAgZ2VuZXJh
dG9yLmVtaXRIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5KHJlc3VsdC5nZXQoKSwgYmFzZS5n
ZXQoKSwgaS5nZXQoKSk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcElmRmFsc2UocmVzdWx0
LmdldCgpLCAqc2NvcGUtPmNvbnRpbnVlVGFyZ2V0KCkpOwogCiAgICAgICAgIGdlbmVyYXRvci5l
bWl0VG9JbmRleFN0cmluZyhwcm9wZXJ0eU5hbWUuZ2V0KCksIGkuZ2V0KCkpOwpAQCAtNDAwMyw3
ICs0MDAzLDcgQEAgdm9pZCBGb3JJbk5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbgogCiAg
ICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXN1bHQgPSBnZW5lcmF0b3IuZW1pdElzTnVsbChn
ZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHByb3BlcnR5TmFtZS5nZXQoKSk7CiAgICAgICAgIGdl
bmVyYXRvci5lbWl0SnVtcElmVHJ1ZShyZXN1bHQuZ2V0KCksIGxvb3BFbmQuZ2V0KCkpOwotICAg
ICAgICBnZW5lcmF0b3IuZW1pdEhhc1N0cnVjdHVyZVByb3BlcnR5KHJlc3VsdC5nZXQoKSwgYmFz
ZS5nZXQoKSwgcHJvcGVydHlOYW1lLmdldCgpLCBlbnVtZXJhdG9yLmdldCgpKTsKKyAgICAgICAg
Z2VuZXJhdG9yLmVtaXRIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHkocmVzdWx0LmdldCgp
LCBiYXNlLmdldCgpLCBwcm9wZXJ0eU5hbWUuZ2V0KCksIGVudW1lcmF0b3IuZ2V0KCkpOwogICAg
ICAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZkZhbHNlKHJlc3VsdC5nZXQoKSwgKnNjb3BlLT5jb250
aW51ZVRhcmdldCgpKTsKIAogICAgICAgICB0aGlzLT5lbWl0TG9vcEhlYWRlcihnZW5lcmF0b3Is
IHByb3BlcnR5TmFtZS5nZXQoKSk7CkBAIC00MDQ1LDcgKzQwNDUsNyBAQCB2b2lkIEZvckluTm9k
ZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuCiAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBy
ZXN1bHQgPSBnZW5lcmF0b3IuZW1pdElzTnVsbChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHBy
b3BlcnR5TmFtZS5nZXQoKSk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcElmVHJ1ZShyZXN1
bHQuZ2V0KCksIGxvb3BFbmQuZ2V0KCkpOwogCi0gICAgICAgIGdlbmVyYXRvci5lbWl0SGFzR2Vu
ZXJpY1Byb3BlcnR5KHJlc3VsdC5nZXQoKSwgYmFzZS5nZXQoKSwgcHJvcGVydHlOYW1lLmdldCgp
KTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRIYXNFbnVtZXJhYmxlUHJvcGVydHkocmVzdWx0Lmdl
dCgpLCBiYXNlLmdldCgpLCBwcm9wZXJ0eU5hbWUuZ2V0KCkpOwogICAgICAgICBnZW5lcmF0b3Iu
ZW1pdEp1bXBJZkZhbHNlKHJlc3VsdC5nZXQoKSwgKnNjb3BlLT5jb250aW51ZVRhcmdldCgpKTsK
IAogICAgICAgICB0aGlzLT5lbWl0TG9vcEhlYWRlcihnZW5lcmF0b3IsIHByb3BlcnR5TmFtZS5n
ZXQoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJw
cmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAyNzAzNzMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQxNTUsMTkgKzQxNTUsMjAgQEAgYm9vbCBBYnN0cmFjdEludGVycHJl
dGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwg
U3BlY0ludDMyT25seSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBjYXNlIEhhc0dlbmVy
aWNQcm9wZXJ0eTogeworICAgIGNhc2UgSGFzRW51bWVyYWJsZVByb3BlcnR5OiB7CiAgICAgICAg
IHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjQm9vbGVhbik7CiAgICAgICAgIGNsb2Ji
ZXJXb3JsZCgpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBJblN0cnVjdHVyZVBy
b3BlcnR5OgogICAgIGNhc2UgSGFzT3duU3RydWN0dXJlUHJvcGVydHk6Ci0gICAgY2FzZSBIYXNT
dHJ1Y3R1cmVQcm9wZXJ0eTogeworICAgIGNhc2UgSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3Bl
cnR5OiB7CiAgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjQm9vbGVhbik7
CiAgICAgICAgIGNsb2JiZXJXb3JsZCgpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2Fz
ZSBIYXNJbmRleGVkUHJvcGVydHk6IHsKKyAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eToKKyAg
ICBjYXNlIEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHk6IHsKICAgICAgICAgQXJyYXlNb2Rl
IG1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKICAgICAgICAgc3dpdGNoIChtb2RlLnR5cGUoKSkg
ewogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAyNzAzNzMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODEzOSwxOSArODEzOSwxOSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJs
b2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9nZXRfZW51bWVyYWJsZV9s
ZW5ndGgpOwogICAgICAgICB9CiAKLSAgICAgICAgY2FzZSBvcF9oYXNfZ2VuZXJpY19wcm9wZXJ0
eTogewotICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BIYXNHZW5lcmljUHJvcGVydHk+KCk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3Qs
IGFkZFRvR3JhcGgoSGFzR2VuZXJpY1Byb3BlcnR5LCBnZXQoYnl0ZWNvZGUubV9iYXNlKSwgZ2V0
KGJ5dGVjb2RlLm1fcHJvcGVydHkpKSk7Ci0gICAgICAgICAgICBORVhUX09QQ09ERShvcF9oYXNf
Z2VuZXJpY19wcm9wZXJ0eSk7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIG9wX2hhc19zdHJ1
Y3R1cmVfcHJvcGVydHk6IHsKLSAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSGFzU3RydWN0dXJlUHJvcGVydHk+KCk7Ci0gICAgICAgICAgICBzZXQo
Ynl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoSGFzU3RydWN0dXJlUHJvcGVydHksCisgICAgICAg
IGNhc2Ugb3BfaGFzX2VudW1lcmFibGVfc3RydWN0dXJlX3Byb3BlcnR5OiB7CisgICAgICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0VudW1lcmFibGVT
dHJ1Y3R1cmVQcm9wZXJ0eT4oKTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRk
VG9HcmFwaChIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHksCiAgICAgICAgICAgICAgICAg
Z2V0KGJ5dGVjb2RlLm1fYmFzZSksCiAgICAgICAgICAgICAgICAgZ2V0KGJ5dGVjb2RlLm1fcHJv
cGVydHkpLAogICAgICAgICAgICAgICAgIGdldChieXRlY29kZS5tX2VudW1lcmF0b3IpKSk7Ci0g
ICAgICAgICAgICBORVhUX09QQ09ERShvcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5KTsKKyAgICAg
ICAgICAgIE5FWFRfT1BDT0RFKG9wX2hhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0eSk7
CisgICAgICAgIH0KKworICAgICAgICBjYXNlIG9wX2hhc19lbnVtZXJhYmxlX3Byb3BlcnR5OiB7
CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhh
c0VudW1lcmFibGVQcm9wZXJ0eT4oKTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwg
YWRkVG9HcmFwaChIYXNFbnVtZXJhYmxlUHJvcGVydHksIGdldChieXRlY29kZS5tX2Jhc2UpLCBn
ZXQoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpKTsKKyAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2hh
c19lbnVtZXJhYmxlX3Byb3BlcnR5KTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfaGFz
X293bl9zdHJ1Y3R1cmVfcHJvcGVydHk6IHsKQEAgLTgxNzIsMTggKzgxNzIsMTggQEAgdm9pZCBC
eXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgTkVYVF9PUENP
REUob3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5KTsKICAgICAgICAgfQogCi0gICAgICAgIGNhc2Ug
b3BfaGFzX2luZGV4ZWRfcHJvcGVydHk6IHsKLSAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5PigpOworICAgICAgICBj
YXNlIG9wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHk6IHsKKyAgICAgICAgICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzRW51bWVyYWJsZUluZGV4
ZWRQcm9wZXJ0eT4oKTsKICAgICAgICAgICAgIE5vZGUqIGJhc2UgPSBnZXQoYnl0ZWNvZGUubV9i
YXNlKTsKICAgICAgICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBnZXRBcnJheU1vZGUoYnl0
ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKS5tX2FycmF5UHJvZmlsZSwgQXJyYXk6OlJlYWQpOwog
ICAgICAgICAgICAgTm9kZSogcHJvcGVydHkgPSBnZXQoYnl0ZWNvZGUubV9wcm9wZXJ0eSk7CiAg
ICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChiYXNlKTsKICAgICAgICAgICAgIGFkZFZhckFyZ0No
aWxkKHByb3BlcnR5KTsKICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKG51bGxwdHIpOwotICAg
ICAgICAgICAgTm9kZSogaGFzSXRlcmFibGVQcm9wZXJ0eSA9IGFkZFRvR3JhcGgoTm9kZTo6VmFy
QXJnLCBIYXNJbmRleGVkUHJvcGVydHksIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBPcElu
Zm8oc3RhdGljX2Nhc3Q8dWludDMyX3Q+KFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBl
OjpHZXRPd25Qcm9wZXJ0eSkpKTsKKyAgICAgICAgICAgIE5vZGUqIGhhc0l0ZXJhYmxlUHJvcGVy
dHkgPSBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0
eSwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSkpOwogICAgICAgICAgICAgbV9leGl0T0sgPSBm
YWxzZTsgLy8gSGFzSW5kZXhlZFByb3BlcnR5IG11c3QgYmUgdHJlYXRlZCBhcyBpZiBpdCBjbG9i
YmVycyBleGl0IHN0YXRlLCBzaW5jZSBGaXh1cFBoYXNlIG1heSBtYWtlIGl0IGdlbmVyaWMuCiAg
ICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGhhc0l0ZXJhYmxlUHJvcGVydHkpOwotICAg
ICAgICAgICAgTkVYVF9PUENPREUob3BfaGFzX2luZGV4ZWRfcHJvcGVydHkpOworICAgICAgICAg
ICAgTkVYVF9PUENPREUob3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0eSk7CiAgICAg
ICAgIH0KIAogICAgICAgICBjYXNlIG9wX2dldF9kaXJlY3RfcG5hbWU6IHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDI3
MDM3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjUzLDExICsyNTMsMTEgQEAgQ2FwYWJpbGl0eUxldmVsIGNhcGFi
aWxpdHlMZXZlbChPcGNvZGVJRAogICAgIGNhc2Ugb3BfZ2V0X3Njb3BlOgogICAgIGNhc2Ugb3Bf
Z2V0X2Zyb21fc2NvcGU6CiAgICAgY2FzZSBvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGg6Ci0gICAg
Y2FzZSBvcF9oYXNfZ2VuZXJpY19wcm9wZXJ0eToKLSAgICBjYXNlIG9wX2hhc19zdHJ1Y3R1cmVf
cHJvcGVydHk6CisgICAgY2FzZSBvcF9oYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5Ogor
ICAgIGNhc2Ugb3BfaGFzX2VudW1lcmFibGVfc3RydWN0dXJlX3Byb3BlcnR5OgorICAgIGNhc2Ug
b3BfaGFzX2VudW1lcmFibGVfcHJvcGVydHk6CiAgICAgY2FzZSBvcF9oYXNfb3duX3N0cnVjdHVy
ZV9wcm9wZXJ0eToKICAgICBjYXNlIG9wX2luX3N0cnVjdHVyZV9wcm9wZXJ0eToKLSAgICBjYXNl
IG9wX2hhc19pbmRleGVkX3Byb3BlcnR5OgogICAgIGNhc2Ugb3BfZ2V0X2RpcmVjdF9wbmFtZToK
ICAgICBjYXNlIG9wX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9yOgogICAgIGNhc2Ugb3BfZW51bWVy
YXRvcl9zdHJ1Y3R1cmVfcG5hbWU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMjcwMzczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2NCw2ICsxNjQsNyBAQCB2
b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgIGNhc2UgQXJy
YXlQb3A6CiAgICAgICAgIGNhc2UgQXJyYXlJbmRleE9mOgogICAgICAgICBjYXNlIEhhc0luZGV4
ZWRQcm9wZXJ0eToKKyAgICAgICAgY2FzZSBIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5Ogog
ICAgICAgICBjYXNlIEF0b21pY3NBZGQ6CiAgICAgICAgIGNhc2UgQXRvbWljc0FuZDoKICAgICAg
ICAgY2FzZSBBdG9taWNzQ29tcGFyZUV4Y2hhbmdlOgpAQCAtMzQ4LDcgKzM0OSw4IEBAIHZvaWQg
Y2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OiB7CisgICAgY2FzZSBIYXNJbmRleGVk
UHJvcGVydHk6CisgICAgY2FzZSBIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5OiB7CiAgICAg
ICAgIHJlYWQoSlNPYmplY3RfYnV0dGVyZmx5KTsKICAgICAgICAgQXJyYXlNb2RlIG1vZGUgPSBu
b2RlLT5hcnJheU1vZGUoKTsKICAgICAgICAgc3dpdGNoIChtb2RlLnR5cGUoKSkgewpAQCAtNzA1
LDggKzcwNyw4IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAg
ICBjYXNlIFJlc29sdmVTY29wZUZvckhvaXN0aW5nRnVuY0RlY2xJbkV2YWw6CiAgICAgY2FzZSBS
ZXNvbHZlU2NvcGU6CiAgICAgY2FzZSBUb09iamVjdDoKLSAgICBjYXNlIEhhc0dlbmVyaWNQcm9w
ZXJ0eToKLSAgICBjYXNlIEhhc1N0cnVjdHVyZVByb3BlcnR5OgorICAgIGNhc2UgSGFzRW51bWVy
YWJsZVN0cnVjdHVyZVByb3BlcnR5OgorICAgIGNhc2UgSGFzRW51bWVyYWJsZVByb3BlcnR5Ogog
ICAgIGNhc2UgSGFzT3duU3RydWN0dXJlUHJvcGVydHk6CiAgICAgY2FzZSBJblN0cnVjdHVyZVBy
b3BlcnR5OgogICAgIGNhc2UgR2V0UHJvcGVydHlFbnVtZXJhdG9yOgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkocmV2aXNpb24gMjcwMzczKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTUs
MTAgKzI5NSwxMSBAQCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAg
Y2FzZSBHZXREaXJlY3RQbmFtZToKICAgICBjYXNlIEdldER5bmFtaWNWYXI6CiAgICAgY2FzZSBH
ZXRNYXBCdWNrZXQ6Ci0gICAgY2FzZSBIYXNHZW5lcmljUHJvcGVydHk6CiAgICAgY2FzZSBIYXNJ
bmRleGVkUHJvcGVydHk6CisgICAgY2FzZSBIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5Ogor
ICAgIGNhc2UgSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5OgorICAgIGNhc2UgSGFzRW51
bWVyYWJsZVByb3BlcnR5OgogICAgIGNhc2UgSGFzT3duUHJvcGVydHk6Ci0gICAgY2FzZSBIYXNT
dHJ1Y3R1cmVQcm9wZXJ0eToKICAgICBjYXNlIEhhc093blN0cnVjdHVyZVByb3BlcnR5OgogICAg
IGNhc2UgSW5TdHJ1Y3R1cmVQcm9wZXJ0eToKICAgICBjYXNlIEluQnlJZDoKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMjcwMzcz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjIwNCwxMSArMjIwNCwxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgZml4
RWRnZTxDZWxsVXNlPihub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQotICAgICAgICBjYXNlIEhhc0dlbmVyaWNQcm9wZXJ0eTogeworICAgICAgICBjYXNlIEhh
c0VudW1lcmFibGVQcm9wZXJ0eTogewogICAgICAgICAgICAgZml4RWRnZTxDZWxsVXNlPihub2Rl
LT5jaGlsZDIoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBjYXNl
IEhhc1N0cnVjdHVyZVByb3BlcnR5OiB7CisgICAgICAgIGNhc2UgSGFzRW51bWVyYWJsZVN0cnVj
dHVyZVByb3BlcnR5OiB7CiAgICAgICAgICAgICBmaXhFZGdlPFN0cmluZ1VzZT4obm9kZS0+Y2hp
bGQyKCkpOwogICAgICAgICAgICAgZml4RWRnZTxLbm93bkNlbGxVc2U+KG5vZGUtPmNoaWxkMygp
KTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjIyMCw3ICsyMjIwLDggQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIGZpeEVkZ2U8S25vd25DZWxsVXNlPihub2RlLT5jaGlsZDMoKSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eTog
eworICAgICAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eToKKyAgICAgICAgY2FzZSBIYXNFbnVt
ZXJhYmxlSW5kZXhlZFByb3BlcnR5OiB7CiAgICAgICAgICAgICBub2RlLT5zZXRBcnJheU1vZGUo
CiAgICAgICAgICAgICAgICAgbm9kZS0+YXJyYXlNb2RlKCkucmVmaW5lKAogICAgICAgICAgICAg
ICAgICAgICBtX2dyYXBoLCBub2RlLApAQCAtMzk4OCw3ICszOTg5LDYgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApLT5wcmVkaWN0aW9uKCks
CiAgICAgICAgICAgICAgICAgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKS0+cHJlZGljdGlv
bigpLAogICAgICAgICAgICAgICAgIFNwZWNOb25lKSk7Ci0gICAgICAgIG5vZGUtPnNldEludGVy
bmFsTWV0aG9kVHlwZShQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6SGFzUHJvcGVy
dHkpOwogCiAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obV9ncmFwaC52YXJBcmdDaGlsZChu
b2RlLCAwKSwgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSwgbV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAyKSk7CiAgICAgICAgIGF1dG8gYXJyYXlNb2RlID0gbm9kZS0+YXJyYXlNb2RlKCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMjcwMzczKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTIyMTQsNiArMjIxNCw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBBcnJheVBvcDoKICAgICAg
ICAgY2FzZSBBcnJheUluZGV4T2Y6CiAgICAgICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5Ogor
ICAgICAgICBjYXNlIEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHk6CiAgICAgICAgIGNhc2Ug
QXRvbWljc0FkZDoKICAgICAgICAgY2FzZSBBdG9taWNzQW5kOgogICAgICAgICBjYXNlIEF0b21p
Y3NDb21wYXJlRXhjaGFuZ2U6CkBAIC0zMDAzLDIzICszMDA0LDYgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBib29sIGhhc0ludGVybmFsTWV0aG9kVHlw
ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gb3AoKSA9PSBIYXNJbmRleGVkUHJvcGVy
dHk7Ci0gICAgfQotCi0gICAgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGUgaW50ZXJu
YWxNZXRob2RUeXBlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChoYXNJbnRlcm5hbE1l
dGhvZFR5cGUoKSk7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6Oklu
dGVybmFsTWV0aG9kVHlwZT4obV9vcEluZm8yLmFzPHVpbnQzMl90PigpKTsKLSAgICB9Ci0KLSAg
ICB2b2lkIHNldEludGVybmFsTWV0aG9kVHlwZShQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9k
VHlwZSB0eXBlKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGhhc0ludGVybmFsTWV0aG9kVHlwZSgp
KTsKLSAgICAgICAgbV9vcEluZm8yID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHR5cGUpOwotICAg
IH0KLQogICAgIE5vZGUqIHJlcGxhY2VtZW50KCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVy
biBtX21pc2MucmVwbGFjZW1lbnQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGVUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlVHlwZS5oCShyZXZpc2lvbiAyNzAzNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGVUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5OCwxMCArNDk4LDExIEBAIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhHZXRFbnVtZXJhYmxlTGVuZ3Ro
LCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZVJlc3VsdEpTKSBcCiAgICAgLyogTXVzdCBnZW5lcmF0
ZSBiZWNhdXNlIG9mIFByb3hpZXMgb24gdGhlIHByb3RvdHlwZSBjaGFpbiAqLyBcCiAgICAgbWFj
cm8oSGFzSW5kZXhlZFByb3BlcnR5LCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZVJlc3VsdEJvb2xl
YW4gfCBOb2RlSGFzVmFyQXJncykgXAotICAgIG1hY3JvKEhhc1N0cnVjdHVyZVByb3BlcnR5LCBO
b2RlUmVzdWx0Qm9vbGVhbikgXAorICAgIG1hY3JvKEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVy
dHksIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlUmVzdWx0Qm9vbGVhbiB8IE5vZGVIYXNWYXJBcmdz
KSBcCisgICAgbWFjcm8oSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5LCBOb2RlUmVzdWx0
Qm9vbGVhbikgXAorICAgIG1hY3JvKEhhc0VudW1lcmFibGVQcm9wZXJ0eSwgTm9kZVJlc3VsdEJv
b2xlYW4pIFwKICAgICBtYWNybyhIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eSwgTm9kZVJlc3VsdEJv
b2xlYW4gfCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oSW5TdHJ1Y3R1cmVQcm9wZXJ0
eSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRCb29sZWFuKSBcCi0gICAgbWFjcm8oSGFz
R2VuZXJpY1Byb3BlcnR5LCBOb2RlUmVzdWx0Qm9vbGVhbikgXAogICAgIG1hY3JvKEdldERpcmVj
dFBuYW1lLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MgfCBOb2RlUmVzdWx0SlMp
IFwKICAgICBtYWNybyhHZXRQcm9wZXJ0eUVudW1lcmF0b3IsIE5vZGVNdXN0R2VuZXJhdGUgfCBO
b2RlUmVzdWx0SlMpIFwKICAgICBtYWNybyhHZXRFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWUsIE5v
ZGVNdXN0R2VuZXJhdGUgfCBOb2RlUmVzdWx0SlMpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjcwMzczKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjI1OCw3ICsyMjU4LDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkVuc3Vy
ZQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25IYXNHZW5lcmljUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgSlNDZWxsKiBw
cm9wZXJ0eSkpCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uSGFzRW51bWVyYWJs
ZVByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEpTQ2VsbCogcHJvcGVydHkpKQogewog
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CkBAIC0yMjc1LDcgKzIyNzUsNyBAQCBKU0NfREVG
SU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uSGFzR2VuCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IGFzU3RyaW5nKHBy
b3BlcnR5KS0+dG9JZGVudGlmaWVyKGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgeyB9KTsKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6
OmVuY29kZShqc0Jvb2xlYW4oYmFzZS0+aGFzUHJvcGVydHlHZW5lcmljKGdsb2JhbE9iamVjdCwg
cHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6R2V0T3duUHJv
cGVydHkpKSkpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2Rl
KGpzQm9vbGVhbihiYXNlLT5oYXNFbnVtZXJhYmxlUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBwcm9w
ZXJ0eU5hbWUpKSkpOwogfQogCiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uSW5T
dHJ1Y3R1cmVQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU0NlbGwqIGJhc2UsIEpTU3RyaW5nKiBwcm9wZXJ0eSkpCkBAIC0yMzAwLDcgKzIz
MDAsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uSGFzT3duCiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4ob2JqZWN0UHJvdG90eXBlSGFzT3duUHJvcGVy
dHkoZ2xvYmFsT2JqZWN0LCBiYXNlLCBwcm9wZXJ0eU5hbWUpKSk7CiB9CiAKLUpTQ19ERUZJTkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlCeUludCwgc2l6ZV90LCAo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDZWxsKiBiYXNlQ2VsbCwgaW50MzJfdCBz
dWJzY3JpcHQsIGludDMyX3QgaW50ZXJuYWxNZXRob2RUeXBlKSkKK0pTQ19ERUZJTkVfSklUX09Q
RVJBVElPTihvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHksIHNpemVfdCwgKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQ2VsbCogYmFzZUNlbGwsIGludDMyX3Qgc3Vic2NyaXB0KSkK
IHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwpAQCAtMjMwOCw5ICsyMzA4LDIyIEBAIEpT
Q19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25IYXNJbmQKICAgICBKU09iamVjdCogb2Jq
ZWN0ID0gYmFzZUNlbGwtPnRvT2JqZWN0KGdsb2JhbE9iamVjdCk7CiAgICAgaWYgKFVOTElLRUxZ
KHN1YnNjcmlwdCA8IDApKSB7CiAgICAgICAgIC8vIEdvIHRoZSBzbG93ZXN0IHdheSBwb3NzaWJs
ZSBiZWNhdXNlIG5lZ2F0aXZlIGluZGljZXMgZG9uJ3QgdXNlIGluZGV4ZWQgc3RvcmFnZS4KLSAg
ICAgICAgcmV0dXJuIG9iamVjdC0+aGFzUHJvcGVydHlHZW5lcmljKGdsb2JhbE9iamVjdCwgSWRl
bnRpZmllcjo6ZnJvbSh2bSwgc3Vic2NyaXB0KSwgc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpJ
bnRlcm5hbE1ldGhvZFR5cGU+KGludGVybmFsTWV0aG9kVHlwZSkpOworICAgICAgICByZXR1cm4g
b2JqZWN0LT5oYXNQcm9wZXJ0eShnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb20odm0sIHN1
YnNjcmlwdCkpOwogICAgIH0KLSAgICByZXR1cm4gb2JqZWN0LT5oYXNQcm9wZXJ0eUdlbmVyaWMo
Z2xvYmFsT2JqZWN0LCBzdWJzY3JpcHQsIHN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6SW50ZXJu
YWxNZXRob2RUeXBlPihpbnRlcm5hbE1ldGhvZFR5cGUpKTsKKyAgICByZXR1cm4gb2JqZWN0LT5o
YXNQcm9wZXJ0eShnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdWJzY3JpcHQp
KTsKK30KKworSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkhhc0VudW1lcmFibGVJ
bmRleGVkUHJvcGVydHksIHNpemVfdCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
Q2VsbCogYmFzZUNlbGwsIGludDMyX3Qgc3Vic2NyaXB0KSkKK3sKKyAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExf
RlJBTUUodm0pOworICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgY2FsbEZyYW1lKTsKKyAgICBKU09iamVjdCogb2JqZWN0ID0gYmFzZUNlbGwtPnRvT2Jq
ZWN0KGdsb2JhbE9iamVjdCk7CisgICAgaWYgKFVOTElLRUxZKHN1YnNjcmlwdCA8IDApKSB7Cisg
ICAgICAgIC8vIEdvIHRoZSBzbG93ZXN0IHdheSBwb3NzaWJsZSBiZWNhdXNlIG5lZ2F0aXZlIGlu
ZGljZXMgZG9uJ3QgdXNlIGluZGV4ZWQgc3RvcmFnZS4KKyAgICAgICAgcmV0dXJuIG9iamVjdC0+
aGFzRW51bWVyYWJsZVByb3BlcnR5KGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbSh2bSwg
c3Vic2NyaXB0KSk7CisgICAgfQorICAgIHJldHVybiBvYmplY3QtPmhhc0VudW1lcmFibGVQcm9w
ZXJ0eShnbG9iYWxPYmplY3QsIHN1YnNjcmlwdCk7CiB9CiAKIEpTQ19ERUZJTkVfSklUX09QRVJB
VElPTihvcGVyYXRpb25HZXRQcm9wZXJ0eUVudW1lcmF0b3IsIEpTQ2VsbCosIChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSkpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkocmV2aXNpb24gMjcwMzcz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTk5LDEwICs5OSwxMSBAQCBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvbkNhbGxOCiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkdldEJ5VmFsV2l0
aFRoaXMsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvbkdldFByb3RvdHlwZU9mLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2Jq
ZWN0KiwgRW5jb2RlZEpTVmFsdWUpKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0
aW9uR2V0UHJvdG90eXBlT2ZPYmplY3QsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3Qq
LCBKU09iamVjdCopKTsKLUpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uSGFzR2Vu
ZXJpY1Byb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpT
VmFsdWUsIEpTQ2VsbCopKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uSGFz
SW5kZXhlZFByb3BlcnR5LCBzaXplX3QsIChKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCosIGludDMy
X3QpKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uSGFzRW51bWVyYWJsZUlu
ZGV4ZWRQcm9wZXJ0eSwgc2l6ZV90LCAoSlNHbG9iYWxPYmplY3QqLCBKU0NlbGwqLCBpbnQzMl90
KSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkhhc0VudW1lcmFibGVQcm9w
ZXJ0eSwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBK
U0NlbGwqKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkhhc093blN0cnVj
dHVyZVByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxsKiwg
SlNTdHJpbmcqKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkluU3RydWN0
dXJlUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqLCBKU0NlbGwqLCBK
U1N0cmluZyopKTsKLUpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uSGFzSW5kZXhl
ZFByb3BlcnR5QnlJbnQsIHNpemVfdCwgKEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxsKiwgaW50MzJf
dCwgaW50MzJfdCkpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25HZXRQcm9w
ZXJ0eUVudW1lcmF0b3IsIEpTQ2VsbCosIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVl
KSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkdldFByb3BlcnR5RW51bWVy
YXRvckNlbGwsIEpTQ2VsbCosIChKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCopKTsKIEpTQ19ERUNM
QVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uVG9JbmRleFN0cmluZywgSlNDZWxsKiwgKEpTR2xv
YmFsT2JqZWN0KiwgaW50MzJfdCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlz
aW9uIDI3MDM3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblBy
b3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEyLDExICsxMjEyLDEyIEBA
IHByaXZhdGU6CiAgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNJbnQzMk9ubHkpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgY2FzZSBIYXNHZW5lcmljUHJvcGVy
dHk6Ci0gICAgICAgIGNhc2UgSGFzU3RydWN0dXJlUHJvcGVydHk6CiAgICAgICAgIGNhc2UgSGFz
T3duU3RydWN0dXJlUHJvcGVydHk6CiAgICAgICAgIGNhc2UgSW5TdHJ1Y3R1cmVQcm9wZXJ0eToK
LSAgICAgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6IHsKKyAgICAgICAgY2FzZSBIYXNJbmRl
eGVkUHJvcGVydHk6CisgICAgICAgIGNhc2UgSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eToK
KyAgICAgICAgY2FzZSBIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHk6CisgICAgICAgIGNh
c2UgSGFzRW51bWVyYWJsZVByb3BlcnR5OiB7CiAgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNw
ZWNCb29sZWFuKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUxvd2VyaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBTG93ZXJpbmdQaGFzZS5jcHAJKHJldmlz
aW9uIDI3MDM3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBTG93ZXJpbmdQ
aGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgyLDYgKzgyLDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgfQogCiAgICAgICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OgorICAgICAgICBjYXNlIEhh
c0VudW1lcmFibGVJbmRleGVkUHJvcGVydHk6CiAgICAgICAgICAgICBsb3dlckJvdW5kc0NoZWNr
KG1fZ3JhcGguY2hpbGQobV9ub2RlLCAwKSwgbV9ncmFwaC5jaGlsZChtX25vZGUsIDEpLCBtX2dy
YXBoLmNoaWxkKG1fbm9kZSwgMikpOwogICAgICAgICAgICAgYnJlYWs7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAyNzAz
NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMjkyLDYgKzI5Miw3IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFj
dFN0YXRlVHlwZSYgc3QKICAgICBjYXNlIEJvb2xlYW5Ub051bWJlcjoKICAgICBjYXNlIEZpYXRJ
bnQ1MjoKICAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eToKKyAgICBjYXNlIEhhc0VudW1lcmFi
bGVJbmRleGVkUHJvcGVydHk6CiAgICAgY2FzZSBHZXRFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU6
CiAgICAgY2FzZSBHZXRFbnVtZXJhdG9yR2VuZXJpY1BuYW1lOgogICAgIGNhc2UgVG9JbmRleFN0
cmluZzoKQEAgLTYyOCw4ICs2MjksOCBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0
ZVR5cGUmIHN0CiAgICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OgogICAgIGNhc2UgTXVsdGlEZWxl
dGVCeU9mZnNldDoKICAgICBjYXNlIEdldEVudW1lcmFibGVMZW5ndGg6Ci0gICAgY2FzZSBIYXNH
ZW5lcmljUHJvcGVydHk6Ci0gICAgY2FzZSBIYXNTdHJ1Y3R1cmVQcm9wZXJ0eToKKyAgICBjYXNl
IEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eToKKyAgICBjYXNlIEhhc0VudW1lcmFibGVQ
cm9wZXJ0eToKICAgICBjYXNlIEhhc093blN0cnVjdHVyZVByb3BlcnR5OgogICAgIGNhc2UgSW5T
dHJ1Y3R1cmVQcm9wZXJ0eToKICAgICBjYXNlIEdldERpcmVjdFBuYW1lOgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3Bw
CShyZXZpc2lvbiAyNzAzNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDczLDEyICs0MDczLDEyIEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgY29tcGls
ZUdldEVudW1lcmFibGVMZW5ndGgobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBj
YXNlIEhhc0dlbmVyaWNQcm9wZXJ0eTogewotICAgICAgICBjb21waWxlSGFzR2VuZXJpY1Byb3Bl
cnR5KG5vZGUpOworICAgIGNhc2UgSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5OiB7Cisg
ICAgICAgIGNvbXBpbGVIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHkobm9kZSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KLSAgICBjYXNlIEhhc1N0cnVjdHVyZVByb3BlcnR5OiB7Ci0gICAg
ICAgIGNvbXBpbGVIYXNTdHJ1Y3R1cmVQcm9wZXJ0eShub2RlKTsKKyAgICBjYXNlIEhhc0VudW1l
cmFibGVQcm9wZXJ0eTogeworICAgICAgICBjb21waWxlSGFzRW51bWVyYWJsZVByb3BlcnR5KG5v
ZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBIYXNPd25TdHJ1Y3R1cmVQcm9w
ZXJ0eTogewpAQCAtNDA5MCw3ICs0MDkwLDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgSGFzSW5kZXhl
ZFByb3BlcnR5OiB7Ci0gICAgICAgIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkobm9kZSk7Cisg
ICAgICAgIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkobm9kZSwgb3BlcmF0aW9uSGFzSW5kZXhl
ZFByb3BlcnR5KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgSGFzRW51bWVyYWJs
ZUluZGV4ZWRQcm9wZXJ0eTogeworICAgICAgICBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KG5v
ZGUsIG9wZXJhdGlvbkhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHkpOwogICAgICAgICBicmVh
azsKICAgICB9CiAgICAgY2FzZSBHZXREaXJlY3RQbmFtZTogewpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAy
NzAzNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MTIwLDEyICs1MTIwLDEyIEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgY29tcGlsZUdldEVudW1lcmFibGVM
ZW5ndGgobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBjYXNlIEhhc0dlbmVyaWNQ
cm9wZXJ0eTogewotICAgICAgICBjb21waWxlSGFzR2VuZXJpY1Byb3BlcnR5KG5vZGUpOworICAg
IGNhc2UgSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5OiB7CisgICAgICAgIGNvbXBpbGVI
YXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHkobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KLSAgICBjYXNlIEhhc1N0cnVjdHVyZVByb3BlcnR5OiB7Ci0gICAgICAgIGNvbXBpbGVIYXNT
dHJ1Y3R1cmVQcm9wZXJ0eShub2RlKTsKKyAgICBjYXNlIEhhc0VudW1lcmFibGVQcm9wZXJ0eTog
eworICAgICAgICBjb21waWxlSGFzRW51bWVyYWJsZVByb3BlcnR5KG5vZGUpOwogICAgICAgICBi
cmVhazsKICAgICB9CiAgICAgY2FzZSBIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eTogewpAQCAtNTEz
Nyw3ICs1MTM3LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OiB7Ci0g
ICAgICAgIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkobm9kZSk7CisgICAgICAgIGNvbXBpbGVI
YXNJbmRleGVkUHJvcGVydHkobm9kZSwgb3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5KTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0
eTogeworICAgICAgICBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KG5vZGUsIG9wZXJhdGlvbkhh
c0VudW1lcmFibGVJbmRleGVkUHJvcGVydHkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAg
Y2FzZSBHZXREaXJlY3RQbmFtZTogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDI3MDM3MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMjgzMCw3ICsxMjgzMCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRFbnVt
ZXJhYmwKICAgICBzdHJpY3RJbnQzMlJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogfQogCi12b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlSGFzR2VuZXJpY1Byb3BlcnR5KE5vZGUqIG5vZGUpCit2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSGFzRW51bWVyYWJsZVByb3BlcnR5KE5vZGUqIG5v
ZGUpCiB7CiAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAg
ICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwpA
QCAtMTI4NDEsNyArMTI4NDEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSGFzR2Vu
ZXJpY1ByCiAgICAgZmx1c2hSZWdpc3RlcnMoKTsKICAgICBKU1ZhbHVlUmVnc0ZsdXNoZWRDYWxs
UmVzdWx0IHJlc3VsdCh0aGlzKTsKICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gcmVzdWx0
LnJlZ3MoKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhhc0dlbmVyaWNQcm9wZXJ0eSwg
cmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5n
bG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VSZWdzLCBwcm9wZXJ0
eUdQUik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYXNFbnVtZXJhYmxlUHJvcGVydHks
IHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGgu
Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlUmVncywgcHJvcGVy
dHlHUFIpOwogICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAgICAgYmxlc3NlZEJvb2xlYW5S
ZXN1bHQocmVzdWx0UmVncy5wYXlsb2FkR1BSKCksIG5vZGUpOwogfQpAQCAtMTI5ODEsNyArMTI5
ODEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTWF0Y2hTdHJ1Y3R1CiAgICAgYmxl
c3NlZEJvb2xlYW5SZXN1bHQodGVtcEdQUiwgbm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVIYXNTdHJ1Y3R1cmVQcm9wZXJ0eShOb2RlKiBub2RlKQordm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eShOb2RlKiBub2Rl
KQogewogICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAg
IFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKQEAg
LTEzMDAzLDcgKzEzMDAzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUhhc1N0cnVj
dHVyZQogCiAgICAgbW92ZVRydWVUbyhyZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CiAKLSAgICBh
ZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwod3JvbmdTdHJ1Y3R1cmUsIHRoaXMsIG9w
ZXJhdGlvbkhhc0dlbmVyaWNQcm9wZXJ0eSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vh
a1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNl
bWFudGljKSksIGJhc2VSZWdzLCBwcm9wZXJ0eUdQUikpOworICAgIGFkZFNsb3dQYXRoR2VuZXJh
dG9yKHNsb3dQYXRoQ2FsbCh3cm9uZ1N0cnVjdHVyZSwgdGhpcywgb3BlcmF0aW9uSGFzRW51bWVy
YWJsZVByb3BlcnR5LCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dy
YXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFz
ZVJlZ3MsIHByb3BlcnR5R1BSKSk7CiAgICAgYmxlc3NlZEJvb2xlYW5SZXN1bHQocmVzdWx0UmVn
cy5wYXlsb2FkR1BSKCksIG5vZGUpOwogfQogCkBAIC0xNDI1OSw3ICsxNDI1OSw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZU5ld0EKICAgICAgICAgc2l6ZUdQUiwgc3Rv
cmFnZUdQUikpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSGFzSW5kZXhlZFBy
b3BlcnR5KE5vZGUqIG5vZGUpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSGFzSW5kZXhl
ZFByb3BlcnR5KE5vZGUqIG5vZGUsIFNfSklUT3BlcmF0aW9uX0dDWiBzbG93UGF0aE9wZXJhdGlv
bikKIHsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgMCkpOwogICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBpbmRleCh0
aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKQEAgLTE0Mzc1LDcgKzE0Mzc1LDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUhhc0luZGV4ZWRQcgogICAgIH0KICAgICB9
CiAKLSAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoc2xvd0Nhc2VzLCB0aGlz
LCBvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlCeUludCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1t
UHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5v
cmlnaW4uc2VtYW50aWMpKSwgYmFzZUdQUiwgaW5kZXhHUFIsIHN0YXRpY19jYXN0PGludDMyX3Q+
KG5vZGUtPmludGVybmFsTWV0aG9kVHlwZSgpKSkpOworICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9y
KHNsb3dQYXRoQ2FsbChzbG93Q2FzZXMsIHRoaXMsIHNsb3dQYXRoT3BlcmF0aW9uLCByZXN1bHRH
UFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2Jq
ZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlR1BSLCBpbmRleEdQUikpOwogCiAg
ICAgdW5ibGVzc2VkQm9vbGVhblJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24g
MjcwMzczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDQ2LDEzICsxNDQ2LDEzIEBAIHB1YmxpYzoKICAgICB2b2lk
IGNvbXBpbGVUaHJvdyhOb2RlKik7CiAgICAgdm9pZCBjb21waWxlVGhyb3dTdGF0aWNFcnJvcihO
b2RlKik7CiAgICAgdm9pZCBjb21waWxlR2V0RW51bWVyYWJsZUxlbmd0aChOb2RlKik7Ci0gICAg
dm9pZCBjb21waWxlSGFzR2VuZXJpY1Byb3BlcnR5KE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVI
YXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHkoTm9kZSopOworICAgIHZvaWQgY29tcGlsZUhh
c0VudW1lcmFibGVQcm9wZXJ0eShOb2RlKik7CiAgICAgdm9pZCBjb21waWxlVG9JbmRleFN0cmlu
ZyhOb2RlKik7CiAgICAgdm9pZCBjb21waWxlUHV0QnlJZEZsdXNoKE5vZGUqKTsKICAgICB2b2lk
IGNvbXBpbGVQdXRCeUlkKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVQdXRCeUlkRGlyZWN0KE5v
ZGUqKTsKICAgICB2b2lkIGNvbXBpbGVQdXRCeUlkV2l0aFRoaXMoTm9kZSopOwotICAgIHZvaWQg
Y29tcGlsZUhhc1N0cnVjdHVyZVByb3BlcnR5KE5vZGUqKTsKICAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgRnVuY3Rpb24+CiAgICAgdm9pZCBjb21waWxlSGFzT3duU3RydWN0dXJlUHJvcGVydHlJbXBs
KE5vZGUqLCBGdW5jdGlvbik7CiAgICAgdm9pZCBjb21waWxlSGFzT3duU3RydWN0dXJlUHJvcGVy
dHkoTm9kZSopOwpAQCAtMTQ4OCw3ICsxNDg4LDcgQEAgcHVibGljOgogICAgIHZvaWQgY29tcGls
ZUNhbGxOdW1iZXJDb25zdHJ1Y3RvcihOb2RlKik7CiAgICAgdm9pZCBjb21waWxlTG9nU2hhZG93
Q2hpY2tlblByb2xvZ3VlKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVMb2dTaGFkb3dDaGlja2Vu
VGFpbChOb2RlKik7Ci0gICAgdm9pZCBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KE5vZGUqKTsK
KyAgICB2b2lkIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoTm9kZSosIFNfSklUT3BlcmF0aW9u
X0dDWik7CiAgICAgdm9pZCBjb21waWxlRXh0cmFjdENhdGNoTG9jYWwoTm9kZSopOwogICAgIHZv
aWQgY29tcGlsZUNsZWFyQ2F0Y2hMb2NhbHMoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZVByb2Zp
bGVUeXBlKE5vZGUqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJp
bGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENh
cGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDI3MDM3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgwLDExICsyODAs
MTIgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIAogICAgIGNhc2Ug
RG91YmxlQ29uc3RhbnQ6CiAgICAgY2FzZSBJbnQ1MkNvbnN0YW50OgogICAgIGNhc2UgQm9vbGVh
blRvTnVtYmVyOgotICAgIGNhc2UgSGFzR2VuZXJpY1Byb3BlcnR5OgotICAgIGNhc2UgSGFzU3Ry
dWN0dXJlUHJvcGVydHk6CisgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6CisgICAgY2FzZSBI
YXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5OgorICAgIGNhc2UgSGFzRW51bWVyYWJsZVN0cnVj
dHVyZVByb3BlcnR5OgorICAgIGNhc2UgSGFzRW51bWVyYWJsZVByb3BlcnR5OgogICAgIGNhc2Ug
SGFzT3duU3RydWN0dXJlUHJvcGVydHk6CiAgICAgY2FzZSBJblN0cnVjdHVyZVByb3BlcnR5Ogot
ICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OgogICAgIGNhc2UgR2V0RGlyZWN0UG5hbWU6CiAg
ICAgY2FzZSBHZXRFbnVtZXJhYmxlTGVuZ3RoOgogICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5
U3RvcmFnZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0Iz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZH
VG9CMy5jcHAJKHJldmlzaW9uIDI3MDM3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ5OSwxMyArMTQ5OSwxNiBA
QCBwcml2YXRlOgogICAgICAgICAgICAgY29tcGlsZVN0b3JlQmFycmllcigpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OgotICAgICAgICAgICAg
Y29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eSgpOworICAgICAgICAgICAgY29tcGlsZUhhc0luZGV4
ZWRQcm9wZXJ0eShvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHkpOwogICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgSGFzR2VuZXJpY1Byb3BlcnR5OgotICAgICAgICAgICAgY29tcGls
ZUhhc0dlbmVyaWNQcm9wZXJ0eSgpOworICAgICAgICBjYXNlIEhhc0VudW1lcmFibGVJbmRleGVk
UHJvcGVydHk6CisgICAgICAgICAgICBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KG9wZXJhdGlv
bkhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHkpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgSGFzU3RydWN0dXJlUHJvcGVydHk6Ci0gICAgICAgICAgICBjb21waWxlSGFzU3Ry
dWN0dXJlUHJvcGVydHkoKTsKKyAgICAgICAgY2FzZSBIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJv
cGVydHk6CisgICAgICAgICAgICBjb21waWxlSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5
KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBIYXNFbnVtZXJhYmxlUHJvcGVy
dHk6CisgICAgICAgICAgICBjb21waWxlSGFzRW51bWVyYWJsZVByb3BlcnR5KCk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eToKICAgICAg
ICAgICAgIGNvbXBpbGVIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eSgpOwpAQCAtMTI0OTEsNyArMTI0
OTQsNyBAQCBwcml2YXRlOgogICAgICAgICBlbWl0U3RvcmVCYXJyaWVyKGxvd0NlbGwobV9ub2Rl
LT5jaGlsZDEoKSksIG1fbm9kZS0+b3AoKSA9PSBGZW5jZWRTdG9yZUJhcnJpZXIpOwogICAgIH0K
ICAgICAKLSAgICB2b2lkIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoKQorICAgIHZvaWQgY29t
cGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShTX0pJVE9wZXJhdGlvbl9HQ1ogc2xvd1BhdGhPcGVyYXRp
b24pCiAgICAgewogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFw
aC5nbG9iYWxPYmplY3RGb3IobV9vcmlnaW4uc2VtYW50aWMpOwogICAgICAgICBMVmFsdWUgYmFz
ZSA9IGxvd0NlbGwobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDApKTsKQEAgLTEyNTAyLDcg
KzEyNTA1LDYgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6CiAgICAgICAg
IGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6IHsKICAgICAgICAgICAgIExWYWx1ZSBzdG9yYWdlID0g
bG93U3RvcmFnZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMikpOwotICAgICAgICAgICAg
TFZhbHVlIGludGVybmFsTWV0aG9kVHlwZSA9IG1fb3V0LmNvbnN0SW50MzIoc3RhdGljX2Nhc3Q8
aW50MzJfdD4obV9ub2RlLT5pbnRlcm5hbE1ldGhvZFR5cGUoKSkpOwogCiAgICAgICAgICAgICBJ
bmRleGVkQWJzdHJhY3RIZWFwJiBoZWFwID0gbW9kZS50eXBlKCkgPT0gQXJyYXk6OkludDMyID8K
ICAgICAgICAgICAgICAgICBtX2hlYXBzLmluZGV4ZWRJbnQzMlByb3BlcnRpZXMgOiBtX2hlYXBz
LmluZGV4ZWRDb250aWd1b3VzUHJvcGVydGllczsKQEAgLTEyNTMzLDcgKzEyNTM1LDcgQEAgcHJp
dmF0ZToKIAogICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd0Nhc2UsIGNvbnRpbnVhdGlv
bik7CiAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9y
KAotICAgICAgICAgICAgICAgIG1fb3V0Lm5vdFplcm82NCh2bUNhbGwoSW50NjQsIG9wZXJhdGlv
bkhhc0luZGV4ZWRQcm9wZXJ0eUJ5SW50LCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBiYXNl
LCBpbmRleCwgaW50ZXJuYWxNZXRob2RUeXBlKSkpOworICAgICAgICAgICAgICAgIG1fb3V0Lm5v
dFplcm82NCh2bUNhbGwoSW50NjQsIHNsb3dQYXRoT3BlcmF0aW9uLCB3ZWFrUG9pbnRlcihnbG9i
YWxPYmplY3QpLCBiYXNlLCBpbmRleCkpKTsKICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGlu
dWF0aW9uKTsKIAogICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0
TmV4dCk7CkBAIC0xMjU0Miw3ICsxMjU0NCw2IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAg
ICAgY2FzZSBBcnJheTo6RG91YmxlOiB7CiAgICAgICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IGxv
d1N0b3JhZ2UobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDIpKTsKLSAgICAgICAgICAgIExW
YWx1ZSBpbnRlcm5hbE1ldGhvZFR5cGUgPSBtX291dC5jb25zdEludDMyKHN0YXRpY19jYXN0PGlu
dDMyX3Q+KG1fbm9kZS0+aW50ZXJuYWxNZXRob2RUeXBlKCkpKTsKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgSW5kZXhlZEFic3RyYWN0SGVhcCYgaGVhcCA9IG1faGVhcHMuaW5kZXhlZERvdWJs
ZVByb3BlcnRpZXM7CiAgICAgICAgICAgICAKQEAgLTEyNTcyLDcgKzEyNTczLDcgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd0Nhc2UsIGNv
bnRpbnVhdGlvbik7CiAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9v
dXQuYW5jaG9yKAotICAgICAgICAgICAgICAgIG1fb3V0Lm5vdFplcm82NCh2bUNhbGwoSW50NjQs
IG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eUJ5SW50LCB3ZWFrUG9pbnRlcihnbG9iYWxPYmpl
Y3QpLCBiYXNlLCBpbmRleCwgaW50ZXJuYWxNZXRob2RUeXBlKSkpOworICAgICAgICAgICAgICAg
IG1fb3V0Lm5vdFplcm82NCh2bUNhbGwoSW50NjQsIHNsb3dQYXRoT3BlcmF0aW9uLCB3ZWFrUG9p
bnRlcihnbG9iYWxPYmplY3QpLCBiYXNlLCBpbmRleCkpKTsKICAgICAgICAgICAgIG1fb3V0Lmp1
bXAoY29udGludWF0aW9uKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9vdXQuYXBwZW5k
VG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CkBAIC0xMjU4Miw3ICsxMjU4Myw2IEBAIHByaXZh
dGU6CiAKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOiB7CiAgICAgICAgICAgICBM
VmFsdWUgc3RvcmFnZSA9IGxvd1N0b3JhZ2UobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDIp
KTsKLSAgICAgICAgICAgIExWYWx1ZSBpbnRlcm5hbE1ldGhvZFR5cGUgPSBtX291dC5jb25zdElu
dDMyKHN0YXRpY19jYXN0PGludDMyX3Q+KG1fbm9kZS0+aW50ZXJuYWxNZXRob2RUeXBlKCkpKTsK
IAogICAgICAgICAgICAgTEJhc2ljQmxvY2sgc2xvd0Nhc2UgPSBtX291dC5uZXdCbG9jaygpOwog
ICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsK
QEAgLTEyNjEwLDcgKzEyNjEwLDcgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oc2xvd0Nhc2UsIGNvbnRpbnVhdGlvbik7CiAgICAgICAgICAgICBWYWx1ZUZyb21CbG9j
ayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKAotICAgICAgICAgICAgICAgIG1fb3V0Lm5vdFpl
cm82NCh2bUNhbGwoSW50NjQsIG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eUJ5SW50LCB3ZWFr
UG9pbnRlcihnbG9iYWxPYmplY3QpLCBiYXNlLCBpbmRleCwgaW50ZXJuYWxNZXRob2RUeXBlKSkp
OworICAgICAgICAgICAgICAgIG1fb3V0Lm5vdFplcm82NCh2bUNhbGwoSW50NjQsIHNsb3dQYXRo
T3BlcmF0aW9uLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBiYXNlLCBpbmRleCkpKTsKICAg
ICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKIAogICAgICAgICAgICAgbV9vdXQu
YXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CkBAIC0xMjYxOSwxOSArMTI2MTksMTgg
QEAgcHJpdmF0ZToKICAgICAgICAgfQogCiAgICAgICAgIGRlZmF1bHQ6IHsKLSAgICAgICAgICAg
IExWYWx1ZSBpbnRlcm5hbE1ldGhvZFR5cGUgPSBtX291dC5jb25zdEludDMyKHN0YXRpY19jYXN0
PGludDMyX3Q+KG1fbm9kZS0+aW50ZXJuYWxNZXRob2RUeXBlKCkpKTsKLSAgICAgICAgICAgIHNl
dEJvb2xlYW4obV9vdXQubm90WmVybzY0KHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9uSGFzSW5kZXhl
ZFByb3BlcnR5QnlJbnQsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGJhc2UsIGluZGV4LCBp
bnRlcm5hbE1ldGhvZFR5cGUpKSk7CisgICAgICAgICAgICBzZXRCb29sZWFuKG1fb3V0Lm5vdFpl
cm82NCh2bUNhbGwoSW50NjQsIHNsb3dQYXRoT3BlcmF0aW9uLCB3ZWFrUG9pbnRlcihnbG9iYWxP
YmplY3QpLCBiYXNlLCBpbmRleCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgIH0KICAgICB9CiAKLSAgICB2b2lkIGNvbXBpbGVIYXNHZW5lcmljUHJvcGVydHkoKQor
ICAgIHZvaWQgY29tcGlsZUhhc0VudW1lcmFibGVQcm9wZXJ0eSgpCiAgICAgewogICAgICAgICBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9v
cmlnaW4uc2VtYW50aWMpOwogICAgICAgICBMVmFsdWUgYmFzZSA9IGxvd0pTVmFsdWUobV9ub2Rl
LT5jaGlsZDEoKSk7CiAgICAgICAgIExWYWx1ZSBwcm9wZXJ0eSA9IGxvd0NlbGwobV9ub2RlLT5j
aGlsZDIoKSk7Ci0gICAgICAgIHNldEpTVmFsdWUodm1DYWxsKEludDY0LCBvcGVyYXRpb25IYXNH
ZW5lcmljUHJvcGVydHksIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGJhc2UsIHByb3BlcnR5
KSk7CisgICAgICAgIHNldEpTVmFsdWUodm1DYWxsKEludDY0LCBvcGVyYXRpb25IYXNFbnVtZXJh
YmxlUHJvcGVydHksIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGJhc2UsIHByb3BlcnR5KSk7
CiAgICAgfQogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFNsb3dQYXRoQ2FsbD4KQEAgLTEyNjcx
LDkgKzEyNjcwLDkgQEAgcHJpdmF0ZToKICAgICAgICAgc2V0Qm9vbGVhbihtX291dC5waGkoSW50
MzIsIGNvcnJlY3RTdHJ1Y3R1cmVSZXN1bHQsIHNsb3dQYXRoUmVzdWx0KSk7CiAgICAgfQogCi0g
ICAgdm9pZCBjb21waWxlSGFzU3RydWN0dXJlUHJvcGVydHkoKQorICAgIHZvaWQgY29tcGlsZUhh
c0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eSgpCiAgICAgewotICAgICAgICBjb21waWxlSGFz
U3RydWN0dXJlUHJvcGVydHlJbXBsKGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSksIG9wZXJh
dGlvbkhhc0dlbmVyaWNQcm9wZXJ0eSk7CisgICAgICAgIGNvbXBpbGVIYXNTdHJ1Y3R1cmVQcm9w
ZXJ0eUltcGwobG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKSwgb3BlcmF0aW9uSGFzRW51bWVy
YWJsZVByb3BlcnR5KTsKICAgICB9CiAKICAgICB2b2lkIGNvbXBpbGVIYXNPd25TdHJ1Y3R1cmVQ
cm9wZXJ0eSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAyNzAz
NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMwNCw3ICszMDQsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAg
ICAgICAgIERFRklORV9TTE9XX09QKG5ld19hcnJheV9idWZmZXIpCiAgICAgICAgIERFRklORV9T
TE9XX09QKHNwcmVhZCkKICAgICAgICAgREVGSU5FX1NMT1dfT1AoZ2V0X2VudW1lcmFibGVfbGVu
Z3RoKQotICAgICAgICBERUZJTkVfU0xPV19PUChoYXNfZ2VuZXJpY19wcm9wZXJ0eSkKKyAgICAg
ICAgREVGSU5FX1NMT1dfT1AoaGFzX2VudW1lcmFibGVfcHJvcGVydHkpCiAgICAgICAgIERFRklO
RV9TTE9XX09QKGdldF9wcm9wZXJ0eV9lbnVtZXJhdG9yKQogICAgICAgICBERUZJTkVfU0xPV19P
UCh0b19pbmRleF9zdHJpbmcpCiAgICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9kaXJlY3Rf
YXJndW1lbnRzKQpAQCAtNDYzLDEwICs0NjMsMTAgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
TWFpblBhc3MoKQogICAgICAgICBERUZJTkVfT1Aob3BfZ2V0X2Zyb21fYXJndW1lbnRzKQogICAg
ICAgICBERUZJTkVfT1Aob3BfcHV0X3RvX2FyZ3VtZW50cykKIAotICAgICAgICBERUZJTkVfT1Ao
b3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eSkKKyAgICAgICAgREVGSU5FX09QKG9wX2hhc19lbnVt
ZXJhYmxlX2luZGV4ZWRfcHJvcGVydHkpCisgICAgICAgIERFRklORV9PUChvcF9oYXNfZW51bWVy
YWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHkpCiAgICAgICAgIERFRklORV9PUChvcF9oYXNfb3duX3N0
cnVjdHVyZV9wcm9wZXJ0eSkKICAgICAgICAgREVGSU5FX09QKG9wX2luX3N0cnVjdHVyZV9wcm9w
ZXJ0eSkKLSAgICAgICAgREVGSU5FX09QKG9wX2hhc19pbmRleGVkX3Byb3BlcnR5KQogICAgICAg
ICBERUZJTkVfT1Aob3BfZ2V0X2RpcmVjdF9wbmFtZSkKICAgICAgICAgREVGSU5FX09QKG9wX2Vu
dW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKQogICAgICAgICBERUZJTkVfT1Aob3BfZW51bWVyYXRv
cl9nZW5lcmljX3BuYW1lKQpAQCAtNTkyLDcgKzU5Miw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZVNsb3dDYXNlcygpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9kZWxfYnlfdmFs
KQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfZGVsX2J5X2lkKQogICAgICAgICBERUZJ
TkVfU0xPV0NBU0VfT1Aob3Bfc3ViKQotICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfaGFz
X2luZGV4ZWRfcHJvcGVydHkpCisgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9oYXNfZW51
bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5KQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3Bf
Z2V0X2Zyb21fc2NvcGUpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9wdXRfdG9fc2Nv
cGUpCiAKQEAgLTYyNSw3ICs2MjUsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2Fz
ZXMoKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChuc3RyaWN0ZXEpCiAgICAgICAg
IERFRklORV9TTE9XQ0FTRV9TTE9XX09QKGdldF9kaXJlY3RfcG5hbWUpCiAgICAgICAgIERFRklO
RV9TTE9XQ0FTRV9TTE9XX09QKGdldF9wcm90b3R5cGVfb2YpCi0gICAgICAgIERFRklORV9TTE9X
Q0FTRV9TTE9XX09QKGhhc19zdHJ1Y3R1cmVfcHJvcGVydHkpCisgICAgICAgIERFRklORV9TTE9X
Q0FTRV9TTE9XX09QKGhhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0eSkKICAgICAgICAg
REVGSU5FX1NMT1dDQVNFX1NMT1dfT1AoaGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVydHkpCiAgICAg
ICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKGluX3N0cnVjdHVyZV9wcm9wZXJ0eSkKICAgICAg
ICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AocmVzb2x2ZV9zY29wZSkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMjcwMzczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNjU3LDEwICs2NTcsMTAgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF91cnNoaWZ0KGNvbnN0IEluc3RydWN0aW9uKik7
CiAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcENvZGVUeXBlPgogICAgICAgICB2b2lkIGVt
aXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAg
ICAgICAgdm9pZCBlbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rp
b24qKTsKKyAgICAgICAgdm9pZCBlbWl0X29wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVy
dHkoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKyAgICAgICAgdm9pZCBlbWl0X29wX2hhc19lbnVtZXJh
YmxlX3N0cnVjdHVyZV9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lk
IGVtaXRfb3BfaGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qKTsK
ICAgICAgICAgdm9pZCBlbWl0X29wX2luX3N0cnVjdHVyZV9wcm9wZXJ0eShjb25zdCBJbnN0cnVj
dGlvbiopOwotICAgICAgICB2b2lkIGVtaXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3Qg
SW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2dldF9kaXJlY3RfcG5hbWUoY29u
c3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2VudW1lcmF0b3Jfc3RydWN0
dXJlX3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9lbnVt
ZXJhdG9yX2dlbmVyaWNfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKQEAgLTcxNSw3ICs3MTUs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfYnlfdmFs
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwog
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwor
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHko
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAK
ICAgICAgICAgdm9pZCBlbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsK
ICAgICAgICAgdm9pZCBlbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3Bw
CShyZXZpc2lvbiAyNzAzNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29k
ZXMzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNTEsOSArMTE1MSw5IEBAIHZvaWQgSklU
OjplbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkKICAgICBlbWl0U3RvcmVCb29sKGRzdCwg
cmVnVDApOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF9o
YXNfZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHlJbXBs
PE9wSGFzU3RydWN0dXJlUHJvcGVydHk+KGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgZW1pdF9v
cF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5SW1wbDxPcEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9w
ZXJ0eT4oY3VycmVudEluc3RydWN0aW9uKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX293
bl9zdHJ1Y3R1cmVfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTExOTMsOSArMTE5Myw5IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUhhc0luZGV4
ZWRQcm9wZXIKICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2Fs
bDxOb1B0clRhZz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPE5vUHRyVGFnPihyZXR1cm5BZGRyZXNz
KSksIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uSGFzSW5kZXhlZFByb3Bl
cnR5R2VuZXJpYykpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0
eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRf
b3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5PigpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eT4oKTsKICAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkBAIC0xMjQwLDExICsxMjQwLDExIEBAIHZvaWQgSklU
OjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGMKICAgICBtX2J5VmFsQ29tcGlsYXRpb25J
bmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0ZWNvZGVJbmRl
eCwgUGF0Y2hhYmxlSnVtcCgpLCBiYWRUeXBlLCBtb2RlLCBwcm9maWxlLCBkb25lLCBuZXh0SG90
UGF0aCkpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHko
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfZW51bWVyYWJs
ZV9pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKIAotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5PigpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eT4oKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0g
Ynl0ZWNvZGUubV9wcm9wZXJ0eTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGNvZGVzLmNwcAkocmV2aXNpb24gMjcwMzczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM5Miw5ICsxMzkyLDkgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eQogICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9w
ZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVt
aXRfb3BfaGFzX2VudW1lcmFibGVfc3RydWN0dXJlX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3Bl
cnR5SW1wbDxPcEhhc1N0cnVjdHVyZVByb3BlcnR5PihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAg
IGVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eUltcGw8T3BIYXNFbnVtZXJhYmxlU3RydWN0
dXJlUHJvcGVydHk+KGN1cnJlbnRJbnN0cnVjdGlvbik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X2hhc19vd25fc3RydWN0dXJlX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCkBAIC0xNDM0LDkgKzE0MzQsOSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVI
YXNJbmRleGVkUHJvcGVyCiAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKENvZGVMb2Nh
dGlvbkNhbGw8Tm9QdHJUYWc+KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxOb1B0clRhZz4ocmV0dXJu
QWRkcmVzcykpLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkhhc0luZGV4
ZWRQcm9wZXJ0eUdlbmVyaWMpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRf
cHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklU
OjplbWl0X29wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEhhc0luZGV4ZWRQcm9wZXJ0eT4oKTsKKyAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHk+
KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxS
ZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpAQCAtMTQ4MSwxMSArMTQ4MSwxMSBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjCiAgICAgbV9ieVZhbENvbXBp
bGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8oYnlWYWxJbmZvLCBtX2J5dGVj
b2RlSW5kZXgsIFBhdGNoYWJsZUp1bXAoKSwgYmFkVHlwZSwgbW9kZSwgcHJvZmlsZSwgZG9uZSwg
bmV4dEhvdFBhdGgpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3By
b3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2Vu
dW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEhhc0luZGV4ZWRQcm9wZXJ0eT4oKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHk+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxS
ZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9w
ZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI3MDM3MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0NDUs
NyArMjQ0NSw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25IYXNJbmQKIAog
ICAgIGlmICghQ29tbW9uU2xvd1BhdGhzOjpjYW5BY2Nlc3NBcmd1bWVudEluZGV4UXVpY2tseSgq
b2JqZWN0LCBpbmRleCkpCiAgICAgICAgIGJ5VmFsSW5mby0+YXJyYXlQcm9maWxlLT5zZXRPdXRP
ZkJvdW5kcygpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKG9iamVjdC0+
aGFzUHJvcGVydHlHZW5lcmljKGdsb2JhbE9iamVjdCwgaW5kZXgsIFByb3BlcnR5U2xvdDo6SW50
ZXJuYWxNZXRob2RUeXBlOjpHZXRPd25Qcm9wZXJ0eSkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzQm9vbGVhbihvYmplY3QtPmhhc0VudW1lcmFibGVQcm9wZXJ0eShnbG9iYWxPYmpl
Y3QsIGluZGV4KSkpOwogfQogICAgIAogSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlv
bkhhc0luZGV4ZWRQcm9wZXJ0eUdlbmVyaWMsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRTdWJzY3JpcHQsIEJ5VmFsSW5mbyogYnlWYWxJbmZvKSkKQEAgLTI0NjYsNyAr
MjQ2Niw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25IYXNJbmQKIAogICAg
IGlmICghQ29tbW9uU2xvd1BhdGhzOjpjYW5BY2Nlc3NBcmd1bWVudEluZGV4UXVpY2tseSgqb2Jq
ZWN0LCBpbmRleCkpCiAgICAgICAgIGJ5VmFsSW5mby0+YXJyYXlQcm9maWxlLT5zZXRPdXRPZkJv
dW5kcygpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKG9iamVjdC0+aGFz
UHJvcGVydHlHZW5lcmljKGdsb2JhbE9iamVjdCwgaW5kZXgsIFByb3BlcnR5U2xvdDo6SW50ZXJu
YWxNZXRob2RUeXBlOjpHZXRPd25Qcm9wZXJ0eSkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzQm9vbGVhbihvYmplY3QtPmhhc0VudW1lcmFibGVQcm9wZXJ0eShnbG9iYWxPYmplY3Qs
IGluZGV4KSkpOwogfQogICAgIAogc3RhdGljIGJvb2wgZGVsZXRlQnlJZChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBWTSYgdm0sIERlbGV0ZVByb3BlcnR5U2xvdCYgc2xvdCwgSlNWYWx1
ZSBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgRUNNQU1vZGUgZWNtYU1vZGUpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkocmV2aXNpb24gMjcw
MzczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEzNyw2ICsxMzcsNyBAQCB1c2luZyBWX0pJVE9wZXJhdGlvbl9HU3NpSkpD
ID0gdm9pZChKSVRfCiB1c2luZyBDX0pJVE9wZXJhdGlvbl9UVCA9IHVpbnRwdHJfdChKSVRfT1BF
UkFUSU9OX0FUVFJJQlVURVMgKikoU3RyaW5nSW1wbCosIFN0cmluZ0ltcGwqKTsKIHVzaW5nIENf
SklUT3BlcmF0aW9uX0JfR0pzc0pzcyA9IHVpbnRwdHJfdChKSVRfT1BFUkFUSU9OX0FUVFJJQlVU
RVMgKikoSlNHbG9iYWxPYmplY3QqLCBKU1N0cmluZyosIEpTU3RyaW5nKik7CiB1c2luZyBTX0pJ
VE9wZXJhdGlvbl9HQyA9IHNpemVfdChKSVRfT1BFUkFUSU9OX0FUVFJJQlVURVMgKikoSlNHbG9i
YWxPYmplY3QqLCBKU0NlbGwqKTsKK3VzaW5nIFNfSklUT3BlcmF0aW9uX0dDWiA9IHNpemVfdChK
SVRfT1BFUkFUSU9OX0FUVFJJQlVURVMgKikoSlNHbG9iYWxPYmplY3QqLCBKU0NlbGwqLCBpbnQz
Ml90KTsKIHVzaW5nIFNfSklUT3BlcmF0aW9uX0dKSiA9IHNpemVfdChKSVRfT1BFUkFUSU9OX0FU
VFJJQlVURVMgKikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUpOwogdXNpbmcgVl9KSVRPcGVyYXRpb25fR0pKSiA9IHZvaWQoSklUX09QRVJBVElPTl9BVFRS
SUJVVEVTICopKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSk7CiB1c2luZyBKX0pJVE9wZXJhdGlvbl9HU3NpSkogPSBFbmNvZGVk
SlNWYWx1ZShKSVRfT1BFUkFUSU9OX0FUVFJJQlVURVMgKikoSlNHbG9iYWxPYmplY3QqLCBTdHJ1
Y3R1cmVTdHViSW5mbyosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
cjY0LmFzbQkocmV2aXNpb24gMjcwMzczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTMwNTIsOCArMzA1
Miw4IEBAIG1hY3JvIGhhc1N0cnVjdHVyZVByb3BlcnR5SW1wbChzaXplLCBnZXQKICAgICBkaXNw
YXRjaCgpCiBlbmQKIAotbGxpbnRPcFdpdGhSZXR1cm4ob3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0
eSwgT3BIYXNTdHJ1Y3R1cmVQcm9wZXJ0eSwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIHJl
dHVybikKLSAgICBoYXNTdHJ1Y3R1cmVQcm9wZXJ0eUltcGwoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwg
IHJldHVybiwgX3Nsb3dfcGF0aF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5KQorbGxpbnRPcFdpdGhS
ZXR1cm4ob3BfaGFzX2VudW1lcmFibGVfc3RydWN0dXJlX3Byb3BlcnR5LCBPcEhhc0VudW1lcmFi
bGVTdHJ1Y3R1cmVQcm9wZXJ0eSwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIHJldHVybikK
KyAgICBoYXNTdHJ1Y3R1cmVQcm9wZXJ0eUltcGwoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgIHJldHVy
biwgX3Nsb3dfcGF0aF9oYXNfZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHkpCiBlbmQpCiAK
IGxsaW50T3BXaXRoUmV0dXJuKG9wX2hhc19vd25fc3RydWN0dXJlX3Byb3BlcnR5LCBPcEhhc093
blN0cnVjdHVyZVByb3BlcnR5LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgcmV0dXJuKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNt
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVy
cHJldGVyLmFzbQkocmV2aXNpb24gMjcwMzczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0xOTYxLDExICsx
OTYxLDExIEBAIHNsb3dQYXRoT3AoZ2V0X2VudW1lcmFibGVfbGVuZ3RoKQogc2xvd1BhdGhPcChn
ZXRfcHJvcGVydHlfZW51bWVyYXRvcikKIHNsb3dQYXRoT3AoZ3JlYXRlcikKIHNsb3dQYXRoT3Ao
Z3JlYXRlcmVxKQotc2xvd1BhdGhPcChoYXNfZ2VuZXJpY19wcm9wZXJ0eSkKLXNsb3dQYXRoT3Ao
aGFzX2luZGV4ZWRfcHJvcGVydHkpCitzbG93UGF0aE9wKGhhc19lbnVtZXJhYmxlX2luZGV4ZWRf
cHJvcGVydHkpCitzbG93UGF0aE9wKGhhc19lbnVtZXJhYmxlX3Byb3BlcnR5KQogCiBpZiBub3Qg
SlNWQUxVRTY0Ci0gICAgc2xvd1BhdGhPcChoYXNfc3RydWN0dXJlX3Byb3BlcnR5KQorICAgIHNs
b3dQYXRoT3AoaGFzX2VudW1lcmFibGVfc3RydWN0dXJlX3Byb3BlcnR5KQogICAgIHNsb3dQYXRo
T3AoaGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVydHkpCiAgICAgc2xvd1BhdGhPcChpbl9zdHJ1Y3R1
cmVfcHJvcGVydHkpCiAgICAgc2xvd1BhdGhPcChnZXRfcHJvdG90eXBlX29mKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCShy
ZXZpc2lvbiAyNzAzNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25T
bG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQwLDIzICsxMDQwLDIzIEBAIEpTQ19E
RUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfZ2UKICAgICBSRVRVUk4oanNOdW1iZXIo
ZW51bWVyYXRvci0+aW5kZXhlZExlbmd0aCgpKSk7CiB9CiAKLUpTQ19ERUZJTkVfQ09NTU9OX1NM
T1dfUEFUSChzbG93X3BhdGhfaGFzX2luZGV4ZWRfcHJvcGVydHkpCitKU0NfREVGSU5FX0NPTU1P
Tl9TTE9XX1BBVEgoc2xvd19wYXRoX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHkpCiB7
CiAgICAgQkVHSU4oKTsKLSAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wSGFzSW5kZXhlZFBy
b3BlcnR5PigpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BIYXNFbnVtZXJhYmxlSW5k
ZXhlZFByb3BlcnR5PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
Y29kZUJsb2NrKTsKICAgICBKU09iamVjdCogYmFzZSA9IEdFVF9DKGJ5dGVjb2RlLm1fYmFzZSku
anNWYWx1ZSgpLnRvT2JqZWN0KGdsb2JhbE9iamVjdCk7CiAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7
CiAgICAgSlNWYWx1ZSBwcm9wZXJ0eSA9IEdFVChieXRlY29kZS5tX3Byb3BlcnR5KS5qc1ZhbHVl
KCk7CiAgICAgbWV0YWRhdGEubV9hcnJheVByb2ZpbGUub2JzZXJ2ZVN0cnVjdHVyZShiYXNlLT5z
dHJ1Y3R1cmUodm0pKTsKICAgICBBU1NFUlQocHJvcGVydHkuaXNVSW50MzJBc0FueUludCgpKTsK
LSAgICBSRVRVUk4oanNCb29sZWFuKGJhc2UtPmhhc1Byb3BlcnR5R2VuZXJpYyhnbG9iYWxPYmpl
Y3QsIHByb3BlcnR5LmFzVUludDMyQXNBbnlJbnQoKSwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1l
dGhvZFR5cGU6OkdldE93blByb3BlcnR5KSkpOworICAgIFJFVFVSTihqc0Jvb2xlYW4oYmFzZS0+
aGFzRW51bWVyYWJsZVByb3BlcnR5KGdsb2JhbE9iamVjdCwgcHJvcGVydHkuYXNVSW50MzJBc0Fu
eUludCgpKSkpOwogfQogCi1KU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2hh
c19zdHJ1Y3R1cmVfcHJvcGVydHkpCitKU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19w
YXRoX2hhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0eSkKIHsKICAgICBCRUdJTigpOwot
ICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BIYXNTdHJ1Y3R1cmVQcm9wZXJ0eT4oKTsKKyAg
ICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5
PigpOwogICAgIEpTT2JqZWN0KiBiYXNlID0gR0VUX0MoYnl0ZWNvZGUubV9iYXNlKS5qc1ZhbHVl
KCkudG9PYmplY3QoZ2xvYmFsT2JqZWN0KTsKICAgICBDSEVDS19FWENFUFRJT04oKTsKICAgICBK
U1ZhbHVlIHByb3BlcnR5ID0gR0VUKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmpzVmFsdWUoKTsKQEAg
LTEwNjksNyArMTA2OSw3IEBAIEpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhf
aGEKICAgICBKU1N0cmluZyogc3RyaW5nID0gYXNTdHJpbmcocHJvcGVydHkpOwogICAgIGF1dG8g
cHJvcGVydHlOYW1lID0gc3RyaW5nLT50b0lkZW50aWZpZXIoZ2xvYmFsT2JqZWN0KTsKICAgICBD
SEVDS19FWENFUFRJT04oKTsKLSAgICBSRVRVUk4oanNCb29sZWFuKGJhc2UtPmhhc1Byb3BlcnR5
R2VuZXJpYyhnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90OjpJbnRlcm5h
bE1ldGhvZFR5cGU6OkdldE93blByb3BlcnR5KSkpOworICAgIFJFVFVSTihqc0Jvb2xlYW4oYmFz
ZS0+aGFzRW51bWVyYWJsZVByb3BlcnR5KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKSkpOwog
fQogCiBKU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2hhc19vd25fc3RydWN0
dXJlX3Byb3BlcnR5KQpAQCAtMTEwOCwxMCArMTEwOCwxMCBAQCBKU0NfREVGSU5FX0NPTU1PTl9T
TE9XX1BBVEgoc2xvd19wYXRoX2luCiAgICAgUkVUVVJOKGpzQm9vbGVhbihDb21tb25TbG93UGF0
aHM6Om9wSW5CeVZhbChnbG9iYWxPYmplY3QsIGJhc2UsIGFzU3RyaW5nKHByb3BlcnR5KSkpKTsK
IH0KIAotSlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9oYXNfZ2VuZXJpY19w
cm9wZXJ0eSkKK0pTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfaGFzX2VudW1l
cmFibGVfcHJvcGVydHkpCiB7CiAgICAgQkVHSU4oKTsKLSAgICBhdXRvIGJ5dGVjb2RlID0gcGMt
PmFzPE9wSGFzR2VuZXJpY1Byb3BlcnR5PigpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8
T3BIYXNFbnVtZXJhYmxlUHJvcGVydHk+KCk7CiAgICAgSlNPYmplY3QqIGJhc2UgPSBHRVRfQyhi
eXRlY29kZS5tX2Jhc2UpLmpzVmFsdWUoKS50b09iamVjdChnbG9iYWxPYmplY3QpOwogICAgIENI
RUNLX0VYQ0VQVElPTigpOwogICAgIEpTVmFsdWUgcHJvcGVydHkgPSBHRVQoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkuanNWYWx1ZSgpOwpAQCAtMTExOSw3ICsxMTE5LDcgQEAgSlNDX0RFRklORV9DT01N
T05fU0xPV19QQVRIKHNsb3dfcGF0aF9oYQogICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBhc1N0cmlu
Zyhwcm9wZXJ0eSk7CiAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBzdHJpbmctPnRvSWRlbnRpZmll
cihnbG9iYWxPYmplY3QpOwogICAgIENIRUNLX0VYQ0VQVElPTigpOwotICAgIFJFVFVSTihqc0Jv
b2xlYW4oYmFzZS0+aGFzUHJvcGVydHlHZW5lcmljKGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1l
LCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6R2V0T3duUHJvcGVydHkpKSk7Cisg
ICAgUkVUVVJOKGpzQm9vbGVhbihiYXNlLT5oYXNFbnVtZXJhYmxlUHJvcGVydHkoZ2xvYmFsT2Jq
ZWN0LCBwcm9wZXJ0eU5hbWUpKSk7CiB9CiAKIEpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChz
bG93X3BhdGhfZ2V0X2RpcmVjdF9wbmFtZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NvbW1vblNsb3dQYXRocy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCShyZXZpc2lvbiAyNzAzNzMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAkod29ya2luZyBjb3B5
KQpAQCAtMjU5LDExICsyNTksMTEgQEAgSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93
X3BhdGhfcwogSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfdG9fcHJpbWl0
aXZlKTsKIEpTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX3RvX3Byb3BlcnR5
X2tleSk7CiBKU0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9nZXRfZW51bWVy
YWJsZV9sZW5ndGgpOwotSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfaGFz
X2dlbmVyaWNfcHJvcGVydHkpOwotSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3Bh
dGhfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eSk7CitKU0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRI
KHNsb3dfcGF0aF9oYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5KTsKK0pTQ19ERUNMQVJF
X0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2hhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9w
ZXJ0eSk7CitKU0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9oYXNfZW51bWVy
YWJsZV9wcm9wZXJ0eSk7CiBKU0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9o
YXNfb3duX3N0cnVjdHVyZV9wcm9wZXJ0eSk7CiBKU0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRI
KHNsb3dfcGF0aF9pbl9zdHJ1Y3R1cmVfcHJvcGVydHkpOwotSlNDX0RFQ0xBUkVfQ09NTU9OX1NM
T1dfUEFUSChzbG93X3BhdGhfaGFzX2luZGV4ZWRfcHJvcGVydHkpOwogSlNDX0RFQ0xBUkVfQ09N
TU9OX1NMT1dfUEFUSChzbG93X3BhdGhfZ2V0X2RpcmVjdF9wbmFtZSk7CiBKU0NfREVDTEFSRV9D
T01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9nZXRfcHJvcGVydHlfZW51bWVyYXRvcik7CiBKU0Nf
REVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9w
bmFtZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3Bw
CShyZXZpc2lvbiAyNzAzNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09i
amVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5ODcsMTYgKzE5ODcsMTcgQEAgdm9pZCBKU09i
amVjdDo6cHV0RGlyZWN0Tm9uSW5kZXhBY2Nlc3NvcgogICAgIHN0cnVjdHVyZS0+c2V0SGFzR2V0
dGVyU2V0dGVyUHJvcGVydGllc1dpdGhQcm90b0NoZWNrKHByb3BlcnR5TmFtZSA9PSB2bS5wcm9w
ZXJ0eU5hbWVzLT51bmRlcnNjb3JlUHJvdG8pOwogfQogCi0vLyBIYXNQcm9wZXJ0eShPLCBQKSBm
cm9tIFNlY3Rpb24gNy4zLjEwIG9mIHRoZSBzcGVjLgotLy8gaHR0cDovL3d3dy5lY21hLWludGVy
bmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC9pbmRleC5odG1sI3NlYy1oYXNwcm9wZXJ0eQorLy8g
aHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1oYXNwcm9wZXJ0eQogYm9vbCBKU09iamVjdDo6
aGFzUHJvcGVydHkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSkgY29uc3QKIHsKLSAgICByZXR1cm4gaGFzUHJvcGVydHlHZW5lcmljKGdsb2Jh
bE9iamVjdCwgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6
SGFzUHJvcGVydHkpOworICAgIFByb3BlcnR5U2xvdCBzbG90KHRoaXMsIFByb3BlcnR5U2xvdDo6
SW50ZXJuYWxNZXRob2RUeXBlOjpIYXNQcm9wZXJ0eSk7CisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8
SlNPYmplY3QqPih0aGlzKS0+Z2V0UHJvcGVydHlTbG90KGdsb2JhbE9iamVjdCwgcHJvcGVydHlO
YW1lLCBzbG90KTsKIH0KIAogYm9vbCBKU09iamVjdDo6aGFzUHJvcGVydHkoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgdW5zaWduZWQgcHJvcGVydHlOYW1lKSBjb25zdAogewotICAgIHJl
dHVybiBoYXNQcm9wZXJ0eUdlbmVyaWMoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpIYXNQcm9wZXJ0eSk7CisgICAgUHJvcGVydHlT
bG90IHNsb3QodGhpcywgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6Okhhc1Byb3Bl
cnR5KTsKKyAgICByZXR1cm4gY29uc3RfY2FzdDxKU09iamVjdCo+KHRoaXMpLT5nZXRQcm9wZXJ0
eVNsb3QoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCiBib29sIEpTT2Jq
ZWN0OjpoYXNQcm9wZXJ0eShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1aW50NjRfdCBw
cm9wZXJ0eU5hbWUpIGNvbnN0CkBAIC0yMDA3LDE2ICsyMDA4LDI0IEBAIGJvb2wgSlNPYmplY3Q6
Omhhc1Byb3BlcnR5KEpTR2xvYmFsT2JqZWMKICAgICByZXR1cm4gaGFzUHJvcGVydHkoZ2xvYmFs
T2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tKGdsb2JhbE9iamVjdC0+dm0oKSwgcHJvcGVydHlOYW1l
KSk7CiB9CiAKLWJvb2wgSlNPYmplY3Q6Omhhc1Byb3BlcnR5R2VuZXJpYyhKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3Q6
OkludGVybmFsTWV0aG9kVHlwZSBpbnRlcm5hbE1ldGhvZFR5cGUpIGNvbnN0Citib29sIEpTT2Jq
ZWN0OjpoYXNFbnVtZXJhYmxlUHJvcGVydHkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkgY29uc3QKIHsKLSAgICBQcm9wZXJ0eVNsb3Qgc2xv
dCh0aGlzLCBpbnRlcm5hbE1ldGhvZFR5cGUpOwotICAgIHJldHVybiBjb25zdF9jYXN0PEpTT2Jq
ZWN0Kj4odGhpcyktPmdldFByb3BlcnR5U2xvdChnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwg
c2xvdCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzLCBQ
cm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6R2V0T3duUHJvcGVydHkpOworICAgIGJv
b2wgaGFzUHJvcGVydHkgPSBjb25zdF9jYXN0PEpTT2JqZWN0Kj4odGhpcyktPmdldFByb3BlcnR5
U2xvdChnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7CisgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgZmFsc2UpOworICAgIHJldHVybiBoYXNQcm9wZXJ0eSAmJiAhKHNsb3Qu
YXR0cmlidXRlcygpICYgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKIH0KIAotYm9vbCBK
U09iamVjdDo6aGFzUHJvcGVydHlHZW5lcmljKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGUg
aW50ZXJuYWxNZXRob2RUeXBlKSBjb25zdAorYm9vbCBKU09iamVjdDo6aGFzRW51bWVyYWJsZVBy
b3BlcnR5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVuc2lnbmVkIHByb3BlcnR5TmFt
ZSkgY29uc3QKIHsKLSAgICBQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzLCBpbnRlcm5hbE1ldGhvZFR5
cGUpOwotICAgIHJldHVybiBjb25zdF9jYXN0PEpTT2JqZWN0Kj4odGhpcyktPmdldFByb3BlcnR5
U2xvdChnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7CisgICAgVk0mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKyAgICBQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzLCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0
aG9kVHlwZTo6R2V0T3duUHJvcGVydHkpOworICAgIGJvb2wgaGFzUHJvcGVydHkgPSBjb25zdF9j
YXN0PEpTT2JqZWN0Kj4odGhpcyktPmdldFByb3BlcnR5U2xvdChnbG9iYWxPYmplY3QsIHByb3Bl
cnR5TmFtZSwgc2xvdCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwor
ICAgIHJldHVybiBoYXNQcm9wZXJ0eSAmJiAhKHNsb3QuYXR0cmlidXRlcygpICYgUHJvcGVydHlB
dHRyaWJ1dGU6OkRvbnRFbnVtKTsKIH0KIAogLy8gRUNNQSA4LjYuMi41CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDI3MDM3MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTY1NSw4ICs2NTUsOCBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBoYXNQ
cm9wZXJ0eShKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSkgY29uc3Q7CiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgYm9vbCBoYXNQcm9wZXJ0eShKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHBy
b3BlcnR5TmFtZSkgY29uc3Q7CiAgICAgYm9vbCBoYXNQcm9wZXJ0eShKU0dsb2JhbE9iamVjdCos
IHVpbnQ2NF90IHByb3BlcnR5TmFtZSkgY29uc3Q7Ci0gICAgYm9vbCBoYXNQcm9wZXJ0eUdlbmVy
aWMoSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxN
ZXRob2RUeXBlKSBjb25zdDsKLSAgICBib29sIGhhc1Byb3BlcnR5R2VuZXJpYyhKU0dsb2JhbE9i
amVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhv
ZFR5cGUpIGNvbnN0OworICAgIGJvb2wgaGFzRW51bWVyYWJsZVByb3BlcnR5KEpTR2xvYmFsT2Jq
ZWN0KiwgUHJvcGVydHlOYW1lKSBjb25zdDsKKyAgICBib29sIGhhc0VudW1lcmFibGVQcm9wZXJ0
eShKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSkgY29uc3Q7CiAgICAgYm9v
bCBoYXNPd25Qcm9wZXJ0eShKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlT
bG90JikgY29uc3Q7CiAgICAgYm9vbCBoYXNPd25Qcm9wZXJ0eShKU0dsb2JhbE9iamVjdCosIFBy
b3BlcnR5TmFtZSkgY29uc3Q7CiAgICAgYm9vbCBoYXNPd25Qcm9wZXJ0eShKU0dsb2JhbE9iamVj
dCosIHVuc2lnbmVkKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3MDM3MykKKysr
IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBA
CisyMDIwLTEyLTAzICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNoQGdtYWlsLmNvbT4KKwor
ICAgICAgICBOb24tZW51bWVyYWJsZSBwcm9wZXJ0eSBmYWlscyB0byBzaGFkb3cgaW5oZXJpdGVk
IGVudW1lcmFibGUgcHJvcGVydHkgZnJvbSBmb3ItaW4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM4OTcwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgUmVwb3J0IFJ1bnRpbWVBcnJheSBpbmRpY2VzIGFzIFtb
RW51bWVyYWJsZV1dLgorCisgICAgICAgIFRlc3Q6IHBsYXRmb3JtL21hYy9mYXN0L2RvbS93cmFw
cGVyLWNsYXNzZXMtb2JqYy5odG1sCisKKyAgICAgICAgKiBicmlkZ2UvcnVudGltZV9hcnJheS5j
cHA6CisgICAgICAgIChKU0M6OlJ1bnRpbWVBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAg
ICAgICAgKEpTQzo6UnVudGltZUFycmF5OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KToKKwog
MjAyMC0xMi0wMiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIGlm
cmFtZSB3aXRoIGBzYW5kYm94PWFsbG93LXRvcC1uYXZpZ2F0aW9uLWJ5LXVzZXItYWN0aXZhdGlv
bmAgY2FuIG5hdmlnYXRlIHRvcCBmcmFtZSB3aGVuIHRoZSB1c2VyIGludGVyYWN0cyB3aXRoIGFu
IGlmcmFtZSBmcm9tIGFub3RoZXIgb3JpZ2luCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uv
cnVudGltZV9hcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1
bnRpbWVfYXJyYXkuY3BwCShyZXZpc2lvbiAyNzAzNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlk
Z2UvcnVudGltZV9hcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw3ICsxMDAsNyBAQCBi
b29sIFJ1bnRpbWVBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90KEpTCiAgICAgCiAgICAgT3B0aW9u
YWw8dWludDMyX3Q+IGluZGV4ID0gcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpOwogICAgIGlmIChp
bmRleCAmJiBpbmRleC52YWx1ZSgpIDwgdGhpc09iamVjdC0+Z2V0TGVuZ3RoKCkpIHsKLSAgICAg
ICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0
ZSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSwKKyAgICAgICAgc2xvdC5zZXRWYWx1ZSh0
aGlzT2JqZWN0LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRE
ZWxldGUpLAogICAgICAgICAgICAgdGhpc09iamVjdC0+Z2V0Q29uY3JldGVBcnJheSgpLT52YWx1
ZUF0KGxleGljYWxHbG9iYWxPYmplY3QsIGluZGV4LnZhbHVlKCkpKTsKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQpAQCAtMTEyLDcgKzExMiw3IEBAIGJvb2wgUnVudGltZUFycmF5OjpnZXRP
d25Qcm9wZXJ0eVNsb3RCeUkKIHsKICAgICBSdW50aW1lQXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8UnVudGltZUFycmF5Kj4ob2JqZWN0KTsKICAgICBpZiAoaW5kZXggPCB0aGlzT2JqZWN0LT5n
ZXRMZW5ndGgoKSkgewotICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIFByb3BlcnR5
QXR0cmlidXRlOjpEb250RGVsZXRlIHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtLAorICAg
ICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSksCiAgICAgICAgICAgICB0aGlzT2JqZWN0LT5nZXRD
b25jcmV0ZUFycmF5KCktPnZhbHVlQXQobGV4aWNhbEdsb2JhbE9iamVjdCwgaW5kZXgpKTsKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMjcwMzczKQorKysg
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIw
MjAtMTItMDMgIEFsZXhleSBTaHZheWthICA8c2h2YWlrYWxlc2hAZ21haWwuY29tPgorCisgICAg
ICAgIE5vbi1lbnVtZXJhYmxlIHByb3BlcnR5IGZhaWxzIHRvIHNoYWRvdyBpbmhlcml0ZWQgZW51
bWVyYWJsZSBwcm9wZXJ0eSBmcm9tIGZvci1pbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzg5NzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL21hYy9mYXN0L2RvbS93cmFwcGVyLWNsYXNz
ZXMtb2JqYy1leHBlY3RlZC50eHQ6CisgICAgICAgICogcGxhdGZvcm0vbWFjL2Zhc3QvZG9tL3dy
YXBwZXItY2xhc3Nlcy1vYmpjLmh0bWw6CisKIDIwMjAtMTItMDIgIENocmlzIER1bWV6ICA8Y2R1
bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBpZnJhbWUgd2l0aCBgc2FuZGJveD1hbGxvdy10b3At
bmF2aWdhdGlvbi1ieS11c2VyLWFjdGl2YXRpb25gIGNhbiBuYXZpZ2F0ZSB0b3AgZnJhbWUgd2hl
biB0aGUgdXNlciBpbnRlcmFjdHMgd2l0aCBhbiBpZnJhbWUgZnJvbSBhbm90aGVyIG9yaWdpbgpJ
bmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3QvZG9tL3dyYXBwZXItY2xhc3Nlcy1v
YmpjLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMv
ZmFzdC9kb20vd3JhcHBlci1jbGFzc2VzLW9iamMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAyNzAz
NzMpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9kb20vd3JhcHBlci1jbGFzc2Vz
LW9iamMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xODksNiArMTg5LDcgQEAgUEFT
UyB0eXBlb2Ygb2JqQ09iamVjdE9mQ2xhc3MoJ05TQ0ZTdHJpbgogUEFTUyB0eXBlb2Ygb2JqQ09i
amVjdE9mQ2xhc3MoJ1dlYlNjcmlwdE9iamVjdCcpIGlzICdvYmplY3QnCiBQQVNTIG9iakNPYmpl
Y3RPZkNsYXNzKCdOU0FycmF5JykgaW5zdGFuY2VvZiBBcnJheSBpcyB0cnVlCiBQQVNTIGNvbmNh
dGVuYXRlQXJyYXkob2JqQ0FycmF5T2ZTdHJpbmcoKSkgaXMgJ29uZXR3b3RocmVlJworUEFTUyBv
YmpDQXJyYXlPZlN0cmluZygpLmV2ZXJ5KChfLCBpLCBhcnIpID0+IGFyci5wcm9wZXJ0eUlzRW51
bWVyYWJsZShpKSkgaXMgdHJ1ZQogUEFTUyBsZXQgYXJyID0gb2JqQ0FycmF5T2ZTdHJpbmcoKTsg
YXJyLmxlbmd0aCBpcyAzCiBQQVNTIGxldCBhcnIgPSBvYmpDQXJyYXlPZlN0cmluZygpOyBhcnIu
bGVuZ3RoID0gMCB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogUmFuZ2UgZXJyb3IuCiBQQVNT
IGxldCBhcnIgPSBvYmpDQXJyYXlPZlN0cmluZygpOyBhcnIubGVuZ3RoID0gNSB0aHJldyBleGNl
cHRpb24gUmFuZ2VFcnJvcjogUmFuZ2UgZXJyb3IuCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9y
bS9tYWMvZmFzdC9kb20vd3JhcHBlci1jbGFzc2VzLW9iamMuaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9kb20vd3JhcHBlci1jbGFzc2VzLW9iamMuaHRt
bAkocmV2aXNpb24gMjcwMzczKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3QvZG9t
L3dyYXBwZXItY2xhc3Nlcy1vYmpjLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTI4Niw2ICsyODYs
NyBAQCBmdW5jdGlvbiBydW5UZXN0KCkKICAgICBzaG91bGRCZVRydWUoIm9iakNPYmplY3RPZkNs
YXNzKCdOU0FycmF5JykgaW5zdGFuY2VvZiBBcnJheSIpOwogCiAgICAgc2hvdWxkQmUoImNvbmNh
dGVuYXRlQXJyYXkob2JqQ0FycmF5T2ZTdHJpbmcoKSkiLCAiJ29uZXR3b3RocmVlJyIpOworICAg
IHNob3VsZEJlVHJ1ZSgib2JqQ0FycmF5T2ZTdHJpbmcoKS5ldmVyeSgoXywgaSwgYXJyKSA9PiBh
cnIucHJvcGVydHlJc0VudW1lcmFibGUoaSkpIik7CiAKICAgICBzaG91bGRCZSgibGV0IGFyciA9
IG9iakNBcnJheU9mU3RyaW5nKCk7IGFyci5sZW5ndGgiLCAiMyIpOwogICAgIHNob3VsZFRocm93
KCJsZXQgYXJyID0gb2JqQ0FycmF5T2ZTdHJpbmcoKTsgYXJyLmxlbmd0aCA9IDAiKTsK
</data>
<flag name="review"
          id="432476"
          type_id="1"
          status="+"
          setter="keith_miller"
    />
          </attachment>
      

    </bug>

</bugzilla>