<?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>223533</bug_id>
          
          <creation_ts>2021-03-19 13:29:36 -0700</creation_ts>
          <short_desc>[JSC] Redeclaring parameter of a generator / async function makes it `undefined`</short_desc>
          <delta_ts>2024-03-05 07:41:34 -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>WebKit 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=164087</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Major</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>262405</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Martin">martinbooth</reporter>
          <assigned_to name="Alexey Shvayka">ashvayka</assigned_to>
          <cc>adamk</cc>
    
    <cc>alonzakai</cc>
    
    <cc>ashvayka</cc>
    
    <cc>fpizlo</cc>
    
    <cc>jarred</cc>
    
    <cc>kotkov</cc>
    
    <cc>ljharb</cc>
    
    <cc>me</cc>
    
    <cc>ross.kirsling</cc>
    
    <cc>sbc</cc>
    
    <cc>seriouslyicy</cc>
    
    <cc>theodorejb</cc>
    
    <cc>tomac</cc>
    
    <cc>wards.afar.0j</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1741862</commentid>
    <comment_count>0</comment_count>
    <who name="Martin">martinbooth</who>
    <bug_when>2021-03-19 13:29:36 -0700</bug_when>
    <thetext>The following code prints undefined in the console:

async function test(a) {
  console.log(a);
  var a;
}

test(&quot;a&quot;);

It should print &quot;a&quot; to the console as it does in firefox and chrome.

In fact, if the function is not async it will print &quot;a&quot; as expected.

While I don&apos;t recommend writing code like this, this code was produced by our minifier and it did lead to the chat feature on our website being unavailable for all safari users. The code worked as expected on v8, therefore nothing was picked up by our tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1744307</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-03-26 13:30:13 -0700</bug_when>
    <thetext>&lt;rdar://problem/75899149&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1918991</commentid>
    <comment_count>2</comment_count>
    <who name="Ingvar Stepanyan">me</who>
    <bug_when>2022-12-13 16:36:04 -0800</bug_when>
    <thetext>We ran into this breaking on code generated by Emscripten too. https://github.com/emscripten-core/emscripten/issues/18357

Emscripten will have to add a workaround, but, considering that this is a core JS bug, it would be great to fix this on the JavaScriptCore side too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1919065</commentid>
    <comment_count>3</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2022-12-13 23:51:00 -0800</bug_when>
    <thetext>This is actually even weirder than the above example suggests, as it&apos;s not actually the value of the var that&apos;s being printed -- the following *still* prints `undefined`:

```
async function test(foo) { print(foo); var foo = 42; }
test(&apos;blah&apos;);
```</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1919066</commentid>
    <comment_count>4</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2022-12-13 23:52:18 -0800</bug_when>
    <thetext>(In reply to Ross Kirsling from comment #3)
&gt; This is actually even weirder than the above example suggests, as it&apos;s not
&gt; actually the value of the var that&apos;s being printed -- the following *still*
&gt; prints `undefined`:
&gt; 
&gt; ```
&gt; async function test(foo) { print(foo); var foo = 42; }
&gt; test(&apos;blah&apos;);
&gt; ```

Oh wait no, that&apos;s just me forgetting that it&apos;s only the declaration itself that gets hoisted. My bad.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1919227</commentid>
    <comment_count>5</comment_count>
    <who name="Sam Clegg">sbc</who>
    <bug_when>2022-12-14 10:37:18 -0800</bug_when>
    <thetext>This bug is effecting emscripten users: https://github.com/emscripten-core/emscripten/issues/18357.

It seems that we output this pattern in some modes and the code works on chrome and firefox, but not safari.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1924683</commentid>
    <comment_count>6</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2023-01-10 19:05:52 -0800</bug_when>
    <thetext>(Moving my December investigation comments over from Slack...)


This is a surprisingly tricky matter -- it&apos;s basically rooted in bug 164087, the fact that our implementation separates async and generator functions into &quot;wrapper&quot; and &quot;body&quot; functions.

This separation makes it incorrect for us to hoist var decls to the top of the body, since:
&gt; async function f(foo) { print(foo); var foo; } f(&apos;blah&apos;);
would have hoisting behavior analogous to...
&gt; function f(foo) { (function () { print(foo); var foo; })(); } f(&apos;blah&apos;);
when it would need to be like...
&gt; function f(foo) { (function () { print(foo); })(); var foo; } f(&apos;blah&apos;);

It&apos;s not entirely clear what the appropriate solution is here.

1. If we really view the wrapper/body separation as a mistake, then the current problem would just be a direct result of that mistake.

2. If not, then we need magic to happen, relative to normal nested function behavior...but the magic can&apos;t depend on actually *checking* whether the var shadows a param, because we literally don&apos;t have that information when reparsing the body (i.e. hasDeclaredParameter isn&apos;t valid to call at that timing because the wrapper scope, where the params actually live, is already gone).

2a. Like, we can pretend that the real var decl was up in the wrapper scope and &quot;unconditionally use&quot; it in the body instead, but this falls apart for cases where there wasn&apos;t actually a param to capture (i.e. we end up setting to a global).

2b. So maybe it&apos;s that the param should come down to the body scope...but I&apos;m not quite sure how we&apos;d mean for this to happen. It&apos;s clear that a lot of work was done in order to propagate the `arguments` object down into the body, but then we&apos;re also taking great care to not bring any unnecessary individual params down, so it seems like we just end up at the same place: the body needs to be able to say that a given param is &quot;necessary&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1924689</commentid>
    <comment_count>7</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2023-01-10 19:15:30 -0800</bug_when>
    <thetext>Test cases below.

# Control cases:

function test0(foo) { print(foo); var foo = 42; } test0(&apos;blah&apos;);
const test0a = (foo) =&gt; { print(foo); var foo = 42; }; test0a(&apos;blah&apos;);

# Bugged cases:

async function test1(foo) { print(foo); var foo = 42; } test1(&apos;blah&apos;);
const test1a = async (foo) =&gt; { print(foo); var foo = 42; }; test1a(&apos;blah&apos;);

function* test2(foo) { print(foo); var foo = 42; } test2(&apos;blah&apos;).next();
async function* test3(foo) { print(foo); var foo = 42; } test3(&apos;blah&apos;).next();</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1924765</commentid>
    <comment_count>8</comment_count>
    <who name="Sam Clegg">sbc</who>
    <bug_when>2023-01-11 04:04:44 -0800</bug_when>
    <thetext>FWIW emscripten now avoids this pattern: https://github.com/emscripten-core/emscripten/pull/18482</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1943108</commentid>
    <comment_count>9</comment_count>
    <who name="Theodore Brown">theodorejb</who>
    <bug_when>2023-03-22 09:38:54 -0700</bug_when>
    <thetext>I also ran into this issue since UglifyJS frequently declares a variable with the same name as a parameter when minifying code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1985201</commentid>
    <comment_count>10</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2023-10-15 11:58:56 -0700</bug_when>
    <thetext>*** Bug 182414 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1985203</commentid>
    <comment_count>11</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2023-10-15 11:59:27 -0700</bug_when>
    <thetext>*** Bug 226335 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1986790</commentid>
    <comment_count>12</comment_count>
    <who name="Jarred Sumner">jarred</who>
    <bug_when>2023-10-23 02:37:36 -0700</bug_when>
    <thetext>Tracking issue in Bun&apos;s github repository: https://github.com/oven-sh/bun/issues/6663</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1998816</commentid>
    <comment_count>13</comment_count>
      <attachid>468990</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2023-12-11 15:07:52 -0800</bug_when>
    <thetext>Created attachment 468990
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1998817</commentid>
    <comment_count>14</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2023-12-11 15:10:25 -0800</bug_when>
    <thetext>Pull request: https://github.com/WebKit/WebKit/pull/21657</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2003084</commentid>
    <comment_count>15</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2024-01-04 18:40:57 -0800</bug_when>
    <thetext>Committed 272666@main (8f6b2012d16c): &lt;https://commits.webkit.org/272666@main&gt;

Reviewed commits have been landed. Closing PR #21657 and removing active labels.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2018767</commentid>
    <comment_count>16</comment_count>
    <who name="">wards.afar.0j</who>
    <bug_when>2024-03-05 07:41:34 -0800</bug_when>
    <thetext>*** Bug 270517 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>468990</attachid>
            <date>2023-12-11 15:07:52 -0800</date>
            <delta_ts>2023-12-11 15:08:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-223533-20231211150751.patch</filename>
            <type>text/plain</type>
            <size>32237</size>
            <attacher name="Alexey Shvayka">ashvayka</attacher>
            
              <data encoding="base64">RnJvbSAwMGY0M2VhYTA1YjViMDFjZjQ4YjMzNTMyOTZkMjIzMGVmYjkyNTljIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGV4ZXkgU2h2YXlrYSA8YXNodmF5a2FAYXBwbGUuY29tPgpE
YXRlOiBNb24sIDExIERlYyAyMDIzIDEzOjA3OjI1IC0wODAwClN1YmplY3Q6IFtQQVRDSF0gW0pT
Q10gUmVkZWNsYXJpbmcgcGFyYW1ldGVyIG9mIGEgZ2VuZXJhdG9yIC8gYXN5bmMgZnVuY3Rpb24K
IG1ha2VzIGl0IGB1bmRlZmluZWRgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMjM1MzMKIDxyZGFyOi8vcHJvYmxlbS83NTg5OTE0OT4KClJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgoKU2luY2UgYSBzaW5nbGUgZ2VuZXJhdG9yIC8gYXN5bmMgZnVuY3Rpb24gaXMg
aW1wbGVtZW50ZWQgdXNpbmcgdHdvIGZ1bmN0aW9ucyAoYSB3cmFwcGVyIGFuZCBhIGJvZHkpLApw
YXJhbWV0ZXIgcmVkZWNsYXJhdGlvbiByZXF1aXJlcyBzcGVjaWFsIGNhcmUuCgpHaXZlbiB0aGUg
Ynl0ZWNvZGUgZm9yIGEgZ2VuZXJhdG9yIC8gYXN5bmMgYm9keSBmdW5jdGlvbiBpcyBlbWl0dGVk
IGFmdGVyIHJlcGFyc2luZywgdGhlcmUgaXMgbm8gd2F5CndlIGNhbiBjb25zdWx0IHBhcmVudCBz
Y29wZSBhbmQgZGV0ZWN0IHdoaWNoIGRlY2xhcmF0aW9ucyBzaGFkb3cgcGFyYW1ldGVycyBvZiB0
aGUgd3JhcHBlciBmdW5jdGlvbiwKaGVuY2UgdGhpcyBjaGFuZ2UgaW50cm9kdWNlcyBwYXJlbnRG
dW5jdGlvblBhcmFtZXRlck5hbWVzLgoKVGhpcyBwYXRjaCBwcmV2ZW50cyBjcmVhdGVWYXJpYWJs
ZSgpIGZyb20gYmVpbmcgY2FsbGVkIG9uIGB2YXJgIGRlY2xhcmF0aW9ucyB0aGF0IHdvdWxkIG90
aGVyd2lzZQplcnJvbmVvdXNseSBzaGFkb3cgZ2VuZXJhdG9yIC8gYXN5bmMgZnVuY3Rpb24gcGFy
YW1ldGVycywgZG93bmdyYWRpbmcgdGhlaXIga2luZCB0byBWYXJLaW5kOjpJbnZhbGlkLAp3aGlj
aCBpcyB0b3RhbGx5IHNlbnNpYmxlIGFuZCBzYWZlIGdpdmVuIEFubmV4IEIgZnVuY3Rpb24gaG9p
c3RpbmcgaXMgYWxpZ25lZCBbMV0uCgpGaXhlcyBsb25nLXN0YW5kaW5nIFVnbGlmeUpTIGlzc3Vl
IFsyXS4KClsxXTogaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy13ZWItY29tcGF0LWZ1bmN0
aW9uZGVjbGFyYXRpb25pbnN0YW50aWF0aW9uIChzdGVwIDI5LmEuaWkpClsyXTogaHR0cHM6Ly9n
aXRodWIuY29tL21pc2hvby9VZ2xpZnlKUy9pc3N1ZXMvNTAzMgoKKiBKU1Rlc3RzL3N0cmVzcy9y
ZWdyZXNzLTIyMzUzMy5qczogQWRkZWQuCiogU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5z
L0J1aWx0aW5FeGVjdXRhYmxlcy5jcHA6CihKU0M6OkJ1aWx0aW5FeGVjdXRhYmxlczo6Y3JlYXRl
RXhlY3V0YWJsZSk6CiogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlLmNwcDoKKEpTQzo6Z2VuZXJhdGVVbmxpbmtlZEZ1bmN0aW9uQ29kZUJs
b2NrKToKKEpTQzo6VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OlVubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlKToKKiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5j
dGlvbkV4ZWN1dGFibGUuaDoKKiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5
dGVjb2RlR2VuZXJhdG9yLmNwcDoKKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2Vu
ZXJhdG9yKToKKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmhvaXN0U2xvcHB5TW9kZUZ1bmN0aW9u
SWZOZWNlc3NhcnkpOgooSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6Z2V0UGFyYW1ldGVyTmFtZXMg
Y29uc3QpOgooSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE5ld0NsYXNzRmllbGRJbml0aWFs
aXplckZ1bmN0aW9uKToKKiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmg6CihKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZSk6CihKU0M6
OkJ5dGVjb2RlR2VuZXJhdG9yOjptYWtlRnVuY3Rpb24pOgoqIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcDoKKEpTQzo6Q2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxl
UmFyZURhdGE6OmVuY29kZSk6CihKU0M6OkNhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZVJhcmVEYXRh
OjpkZWNvZGUgY29uc3QpOgoqIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNo
ZS5jcHA6CihKU0M6OmdlbmVyYXRlVW5saW5rZWRDb2RlQmxvY2tJbXBsKToKKEpTQzo6Q29kZUNh
Y2hlOjpnZXRVbmxpbmtlZEdsb2JhbEZ1bmN0aW9uRXhlY3V0YWJsZSk6Ci0tLQogLi4uL2J1aWx0
aW5zL0J1aWx0aW5FeGVjdXRhYmxlcy5jcHAgICAgICAgICAgIHwgIDIgKy0KIC4uLi9ieXRlY29k
ZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHAgICB8ICA3ICstCiAuLi4vYnl0ZWNvZGUv
VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaCAgICAgfCAxNCArKystCiAuLi4vYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcCAgICAgICAgfCA0MSArKysrKysrKy0tLQogLi4uL2J5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oICAgICAgICAgIHwgMjAgKysrKy0tCiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAgfCAgMyArCiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuY3BwICAgfCAgNCArLQogSlNUZXN0cy9z
dHJlc3MvcmVncmVzcy0yMjM1MzMuanMgICAgICAgICAgICAgIHwgNjggKysrKysrKysrKysrKysr
KysrKwogOCBmaWxlcyBjaGFuZ2VkLCAxMzUgaW5zZXJ0aW9ucygrKSwgMjQgZGVsZXRpb25zKC0p
CiBjcmVhdGUgbW9kZSAxMDA2NDQgSlNUZXN0cy9zdHJlc3MvcmVncmVzcy0yMjM1MzMuanMKCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbkV4ZWN1dGFi
bGVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluRXhlY3V0YWJs
ZXMuY3BwCmluZGV4IGMwZGZlYWYwNDhjNC4uMTFlMDQ5OTBjYzU4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbkV4ZWN1dGFibGVzLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbkV4ZWN1dGFibGVzLmNwcApAQCAt
MjU4LDcgKzI1OCw3IEBAIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBCdWlsdGluRXhlY3V0
YWJsZXM6OmNyZWF0ZUV4ZWN1dGFibGUoVk0mIHZtLCBjb25zdCBTCiAgICAgICAgIH0KICAgICB9
CiAKLSAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0g
VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZSh2bSwgc291cmNlLCAmbWV0YWRhdGEs
IGtpbmQsIGNvbnN0cnVjdEFiaWxpdHksIGlubGluZUF0dHJpYnV0ZSwgSlNQYXJzZXJTY3JpcHRN
b2RlOjpDbGFzc2ljLCBudWxscHRyLCBzdGQ6Om51bGxvcHQsIERlcml2ZWRDb250ZXh0VHlwZTo6
Tm9uZSwgbmVlZHNDbGFzc0ZpZWxkSW5pdGlhbGl6ZXIsIHByaXZhdGVCcmFuZFJlcXVpcmVtZW50
LCBpc0J1aWx0aW5EZWZhdWx0Q2xhc3NDb25zdHJ1Y3Rvcik7CisgICAgVW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IFVubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlOjpjcmVhdGUodm0sIHNvdXJjZSwgJm1ldGFkYXRhLCBraW5kLCBjb25zdHJ1Y3RBYmlsaXR5
LCBpbmxpbmVBdHRyaWJ1dGUsIEpTUGFyc2VyU2NyaXB0TW9kZTo6Q2xhc3NpYywgbnVsbHB0ciwg
c3RkOjpudWxsb3B0LCBzdGQ6Om51bGxvcHQsIERlcml2ZWRDb250ZXh0VHlwZTo6Tm9uZSwgbmVl
ZHNDbGFzc0ZpZWxkSW5pdGlhbGl6ZXIsIHByaXZhdGVCcmFuZFJlcXVpcmVtZW50LCBpc0J1aWx0
aW5EZWZhdWx0Q2xhc3NDb25zdHJ1Y3Rvcik7CiAgICAgcmV0dXJuIGZ1bmN0aW9uRXhlY3V0YWJs
ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlu
a2VkRnVuY3Rpb25FeGVjdXRhYmxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHAKaW5kZXggNzBmZDAxM2E4OGFmLi41ZGYy
ZTU5MTA3ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmNwcApAQCAtNzIsOCArNzIsOSBAQCBz
dGF0aWMgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogZ2VuZXJhdGVVbmxpbmtlZEZ1bmN0aW9u
Q29kZUJsb2NrKAogICAgIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIHJlc3VsdCA9IFVubGlu
a2VkRnVuY3Rpb25Db2RlQmxvY2s6OmNyZWF0ZSh2bSwgRnVuY3Rpb25Db2RlLCBFeGVjdXRhYmxl
SW5mbyhraW5kID09IENvZGVGb3JDb25zdHJ1Y3QsIGV4ZWN1dGFibGUtPnByaXZhdGVCcmFuZFJl
cXVpcmVtZW50KCksIGZ1bmN0aW9uS2luZCA9PSBVbmxpbmtlZEJ1aWx0aW5GdW5jdGlvbiwgZXhl
Y3V0YWJsZS0+Y29uc3RydWN0b3JLaW5kKCksIHNjcmlwdE1vZGUsIGV4ZWN1dGFibGUtPnN1cGVy
QmluZGluZygpLCBwYXJzZU1vZGUsIGV4ZWN1dGFibGUtPmRlcml2ZWRDb250ZXh0VHlwZSgpLCBl
eGVjdXRhYmxlLT5uZWVkc0NsYXNzRmllbGRJbml0aWFsaXplcigpLCBmYWxzZSwgaXNDbGFzc0Nv
bnRleHQsIEV2YWxDb250ZXh0VHlwZTo6RnVuY3Rpb25FdmFsQ29udGV4dCksIGNvZGVHZW5lcmF0
aW9uTW9kZSk7CiAKICAgICBhdXRvIHBhcmVudFNjb3BlVERaVmFyaWFibGVzID0gZXhlY3V0YWJs
ZS0+cGFyZW50U2NvcGVURFpWYXJpYWJsZXMoKTsKKyAgICBjb25zdCBGaXhlZFZlY3RvcjxJZGVu
dGlmaWVyPiogcGFyZW50RnVuY3Rpb25QYXJhbWV0ZXJOYW1lcyA9IGV4ZWN1dGFibGUtPnBhcmVu
dEZ1bmN0aW9uUGFyYW1ldGVyTmFtZXMoKTsKICAgICBjb25zdCBQcml2YXRlTmFtZUVudmlyb25t
ZW50KiBwYXJlbnRQcml2YXRlTmFtZUVudmlyb25tZW50ID0gZXhlY3V0YWJsZS0+cGFyZW50UHJp
dmF0ZU5hbWVFbnZpcm9ubWVudCgpOwotICAgIGVycm9yID0gQnl0ZWNvZGVHZW5lcmF0b3I6Omdl
bmVyYXRlKHZtLCBmdW5jdGlvbi5nZXQoKSwgc291cmNlLCByZXN1bHQsIGNvZGVHZW5lcmF0aW9u
TW9kZSwgcGFyZW50U2NvcGVURFpWYXJpYWJsZXMsIHBhcmVudFByaXZhdGVOYW1lRW52aXJvbm1l
bnQpOworICAgIGVycm9yID0gQnl0ZWNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlKHZtLCBmdW5jdGlv
bi5nZXQoKSwgc291cmNlLCByZXN1bHQsIGNvZGVHZW5lcmF0aW9uTW9kZSwgcGFyZW50U2NvcGVU
RFpWYXJpYWJsZXMsIHBhcmVudEZ1bmN0aW9uUGFyYW1ldGVyTmFtZXMsIHBhcmVudFByaXZhdGVO
YW1lRW52aXJvbm1lbnQpOwogCiAgICAgaWYgKGVycm9yLmlzVmFsaWQoKSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CkBAIC04MSw3ICs4Miw3IEBAIHN0YXRpYyBVbmxpbmtlZEZ1bmN0aW9uQ29k
ZUJsb2NrKiBnZW5lcmF0ZVVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2soCiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAotVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OlVubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IFNvdXJjZUNvZGUm
IHBhcmVudFNvdXJjZSwgRnVuY3Rpb25NZXRhZGF0YU5vZGUqIG5vZGUsIFVubGlua2VkRnVuY3Rp
b25LaW5kIGtpbmQsIENvbnN0cnVjdEFiaWxpdHkgY29uc3RydWN0QWJpbGl0eSwgSW5saW5lQXR0
cmlidXRlIGlubGluZUF0dHJpYnV0ZSwgSlNQYXJzZXJTY3JpcHRNb2RlIHNjcmlwdE1vZGUsIFJl
ZlB0cjxURFpFbnZpcm9ubWVudExpbms+IHBhcmVudFNjb3BlVERaVmFyaWFibGVzLCBzdGQ6Om9w
dGlvbmFsPFByaXZhdGVOYW1lRW52aXJvbm1lbnQ+IHBhcmVudFByaXZhdGVOYW1lRW52aXJvbm1l
bnQsIERlcml2ZWRDb250ZXh0VHlwZSBkZXJpdmVkQ29udGV4dFR5cGUsIE5lZWRzQ2xhc3NGaWVs
ZEluaXRpYWxpemVyIG5lZWRzQ2xhc3NGaWVsZEluaXRpYWxpemVyLCBQcml2YXRlQnJhbmRSZXF1
aXJlbWVudCBwcml2YXRlQnJhbmRSZXF1aXJlbWVudCwgYm9vbCBpc0J1aWx0aW5EZWZhdWx0Q2xh
c3NDb25zdHJ1Y3RvcikKK1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpVbmxpbmtlZEZ1bmN0
aW9uRXhlY3V0YWJsZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBTb3VyY2VD
b2RlJiBwYXJlbnRTb3VyY2UsIEZ1bmN0aW9uTWV0YWRhdGFOb2RlKiBub2RlLCBVbmxpbmtlZEZ1
bmN0aW9uS2luZCBraW5kLCBDb25zdHJ1Y3RBYmlsaXR5IGNvbnN0cnVjdEFiaWxpdHksIElubGlu
ZUF0dHJpYnV0ZSBpbmxpbmVBdHRyaWJ1dGUsIEpTUGFyc2VyU2NyaXB0TW9kZSBzY3JpcHRNb2Rl
LCBSZWZQdHI8VERaRW52aXJvbm1lbnRMaW5rPiBwYXJlbnRTY29wZVREWlZhcmlhYmxlcywgc3Rk
OjpvcHRpb25hbDxWZWN0b3I8SWRlbnRpZmllcj4+JiYgcGFyZW50RnVuY3Rpb25QYXJhbWV0ZXJO
YW1lcywgc3RkOjpvcHRpb25hbDxQcml2YXRlTmFtZUVudmlyb25tZW50PiBwYXJlbnRQcml2YXRl
TmFtZUVudmlyb25tZW50LCBEZXJpdmVkQ29udGV4dFR5cGUgZGVyaXZlZENvbnRleHRUeXBlLCBO
ZWVkc0NsYXNzRmllbGRJbml0aWFsaXplciBuZWVkc0NsYXNzRmllbGRJbml0aWFsaXplciwgUHJp
dmF0ZUJyYW5kUmVxdWlyZW1lbnQgcHJpdmF0ZUJyYW5kUmVxdWlyZW1lbnQsIGJvb2wgaXNCdWls
dGluRGVmYXVsdENsYXNzQ29uc3RydWN0b3IpCiAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCiAg
ICAgLCBtX2ZpcnN0TGluZU9mZnNldChub2RlLT5maXJzdExpbmUoKSAtIHBhcmVudFNvdXJjZS5m
aXJzdExpbmUoKS5vbmVCYXNlZEludCgpKQogICAgICwgbV9pc0dlbmVyYXRlZEZyb21DYWNoZShm
YWxzZSkKQEAgLTEzMiw2ICsxMzMsOCBAQCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6VW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdAogICAgICAg
ICBzZXRDbGFzc1NvdXJjZShub2RlLT5jbGFzc1NvdXJjZSgpKTsKICAgICBpZiAocGFyZW50U2Nv
cGVURFpWYXJpYWJsZXMpCiAgICAgICAgIGVuc3VyZVJhcmVEYXRhKCkubV9wYXJlbnRTY29wZVRE
WlZhcmlhYmxlcyA9IFdURk1vdmUocGFyZW50U2NvcGVURFpWYXJpYWJsZXMpOworICAgIGlmIChw
YXJlbnRGdW5jdGlvblBhcmFtZXRlck5hbWVzKQorICAgICAgICBlbnN1cmVSYXJlRGF0YSgpLm1f
cGFyZW50RnVuY3Rpb25QYXJhbWV0ZXJOYW1lcyA9IEZpeGVkVmVjdG9yPElkZW50aWZpZXI+KFdU
Rk1vdmUocGFyZW50RnVuY3Rpb25QYXJhbWV0ZXJOYW1lcy52YWx1ZSgpKSk7CiAgICAgaWYgKHBh
cmVudFByaXZhdGVOYW1lRW52aXJvbm1lbnQpCiAgICAgICAgIGVuc3VyZVJhcmVEYXRhKCkubV9w
YXJlbnRQcml2YXRlTmFtZUVudmlyb25tZW50ID0gV1RGTW92ZSgqcGFyZW50UHJpdmF0ZU5hbWVF
bnZpcm9ubWVudCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oCmluZGV4IDQ3NzljNDk5MWEzMy4u
MjM0MjE3MGZhMDVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaApAQCAtNzMsMTAgKzczLDEwIEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuICZ2bS51bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZVNw
YWNlKCk7CiAgICAgfQogCi0gICAgc3RhdGljIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBj
cmVhdGUoVk0mIHZtLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEZ1bmN0aW9uTWV0YWRhdGFO
b2RlKiBub2RlLCBVbmxpbmtlZEZ1bmN0aW9uS2luZCB1bmxpbmtlZEZ1bmN0aW9uS2luZCwgQ29u
c3RydWN0QWJpbGl0eSBjb25zdHJ1Y3RBYmlsaXR5LCBJbmxpbmVBdHRyaWJ1dGUgaW5saW5lQXR0
cmlidXRlLCBKU1BhcnNlclNjcmlwdE1vZGUgc2NyaXB0TW9kZSwgUmVmUHRyPFREWkVudmlyb25t
ZW50TGluaz4gcGFyZW50U2NvcGVURFpWYXJpYWJsZXMsIHN0ZDo6b3B0aW9uYWw8UHJpdmF0ZU5h
bWVFbnZpcm9ubWVudD4gcGFyZW50UHJpdmF0ZU5hbWVFbnZpcm9ubWVudCwgRGVyaXZlZENvbnRl
eHRUeXBlIGRlcml2ZWRDb250ZXh0VHlwZSwgTmVlZHNDbGFzc0ZpZWxkSW5pdGlhbGl6ZXIgbmVl
ZHNDbGFzc0ZpZWxkSW5pdGlhbGl6ZXIsIFByaXZhdGVCcmFuZFJlcXVpcmVtZW50IHByaXZhdGVC
cmFuZFJlcXVpcmVtZW50LCBib29sIGlzQnVpbHRpbkRlZmF1bHRDbGFzc0NvbnN0cnVjdG9yID0g
ZmFsc2UpCisgICAgc3RhdGljIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBjcmVhdGUoVk0m
IHZtLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEZ1bmN0aW9uTWV0YWRhdGFOb2RlKiBub2Rl
LCBVbmxpbmtlZEZ1bmN0aW9uS2luZCB1bmxpbmtlZEZ1bmN0aW9uS2luZCwgQ29uc3RydWN0QWJp
bGl0eSBjb25zdHJ1Y3RBYmlsaXR5LCBJbmxpbmVBdHRyaWJ1dGUgaW5saW5lQXR0cmlidXRlLCBK
U1BhcnNlclNjcmlwdE1vZGUgc2NyaXB0TW9kZSwgUmVmUHRyPFREWkVudmlyb25tZW50TGluaz4g
cGFyZW50U2NvcGVURFpWYXJpYWJsZXMsIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPElkZW50aWZpZXI+
PiYmIHBhcmVudEZ1bmN0aW9uUGFyYW1ldGVyTmFtZXMsIHN0ZDo6b3B0aW9uYWw8UHJpdmF0ZU5h
bWVFbnZpcm9ubWVudD4gcGFyZW50UHJpdmF0ZU5hbWVFbnZpcm9ubWVudCwgRGVyaXZlZENvbnRl
eHRUeXBlIGRlcml2ZWRDb250ZXh0VHlwZSwgTmVlZHNDbGFzc0ZpZWxkSW5pdGlhbGl6ZXIgbmVl
ZHNDbGFzc0ZpZWxkSW5pdGlhbGl6ZXIsIFByaXZhdGVCcmFuZFJlcXVpcmVtZW50IHByaXZhdGVC
cmFuZFJlcXVpcmVtZW50LCBib29sIGlzQnVpbHRpbkRlZmF1bHRDbGFzc0NvbnN0cnVjdG9yID0g
ZmFsc2UpCiAgICAgewogICAgICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogaW5zdGFu
Y2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZT4odm0pKQotICAgICAgICAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUodm0sIHZtLnVu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlU3RydWN0dXJlLmdldCgpLCBzb3VyY2UsIG5vZGUsIHVu
bGlua2VkRnVuY3Rpb25LaW5kLCBjb25zdHJ1Y3RBYmlsaXR5LCBpbmxpbmVBdHRyaWJ1dGUsIHNj
cmlwdE1vZGUsIFdURk1vdmUocGFyZW50U2NvcGVURFpWYXJpYWJsZXMpLCBXVEZNb3ZlKHBhcmVu
dFByaXZhdGVOYW1lRW52aXJvbm1lbnQpLCBkZXJpdmVkQ29udGV4dFR5cGUsIG5lZWRzQ2xhc3NG
aWVsZEluaXRpYWxpemVyLCBwcml2YXRlQnJhbmRSZXF1aXJlbWVudCwgaXNCdWlsdGluRGVmYXVs
dENsYXNzQ29uc3RydWN0b3IpOworICAgICAgICAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFi
bGUodm0sIHZtLnVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlU3RydWN0dXJlLmdldCgpLCBzb3Vy
Y2UsIG5vZGUsIHVubGlua2VkRnVuY3Rpb25LaW5kLCBjb25zdHJ1Y3RBYmlsaXR5LCBpbmxpbmVB
dHRyaWJ1dGUsIHNjcmlwdE1vZGUsIFdURk1vdmUocGFyZW50U2NvcGVURFpWYXJpYWJsZXMpLCBX
VEZNb3ZlKHBhcmVudEZ1bmN0aW9uUGFyYW1ldGVyTmFtZXMpLCBXVEZNb3ZlKHBhcmVudFByaXZh
dGVOYW1lRW52aXJvbm1lbnQpLCBkZXJpdmVkQ29udGV4dFR5cGUsIG5lZWRzQ2xhc3NGaWVsZElu
aXRpYWxpemVyLCBwcml2YXRlQnJhbmRSZXF1aXJlbWVudCwgaXNCdWlsdGluRGVmYXVsdENsYXNz
Q29uc3RydWN0b3IpOwogICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24odm0pOwogICAg
ICAgICByZXR1cm4gaW5zdGFuY2U7CiAgICAgfQpAQCAtMTgyLDYgKzE4MiwxMyBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBtX3JhcmVEYXRhLT5tX3BhcmVudFNjb3BlVERaVmFyaWFibGVzOwog
ICAgIH0KIAorICAgIGNvbnN0IEZpeGVkVmVjdG9yPElkZW50aWZpZXI+KiBwYXJlbnRGdW5jdGlv
blBhcmFtZXRlck5hbWVzKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghbV9yYXJlRGF0YSkK
KyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gJm1fcmFyZURhdGEt
Pm1fcGFyZW50RnVuY3Rpb25QYXJhbWV0ZXJOYW1lczsKKyAgICB9CisKICAgICBjb25zdCBQcml2
YXRlTmFtZUVudmlyb25tZW50KiBwYXJlbnRQcml2YXRlTmFtZUVudmlyb25tZW50KCkgY29uc3QK
ICAgICB7CiAgICAgICAgIGlmICghbV9yYXJlRGF0YSkKQEAgLTIyNSw2ICsyMzIsNyBAQCBwdWJs
aWM6CiAgICAgICAgIFN0cmluZyBtX3NvdXJjZVVSTERpcmVjdGl2ZTsKICAgICAgICAgU3RyaW5n
IG1fc291cmNlTWFwcGluZ1VSTERpcmVjdGl2ZTsKICAgICAgICAgUmVmUHRyPFREWkVudmlyb25t
ZW50TGluaz4gbV9wYXJlbnRTY29wZVREWlZhcmlhYmxlczsKKyAgICAgICAgRml4ZWRWZWN0b3I8
SWRlbnRpZmllcj4gbV9wYXJlbnRGdW5jdGlvblBhcmFtZXRlck5hbWVzOwogICAgICAgICBGaXhl
ZFZlY3RvcjxKU1RleHRQb3NpdGlvbj4gbV9jbGFzc0ZpZWxkTG9jYXRpb25zOwogICAgICAgICBQ
cml2YXRlTmFtZUVudmlyb25tZW50IG1fcGFyZW50UHJpdmF0ZU5hbWVFbnZpcm9ubWVudDsKICAg
ICB9OwpAQCAtMjQ2LDcgKzI1NCw3IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAg
VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUoVk0mLCBTdHJ1Y3R1cmUqLCBjb25zdCBTb3VyY2VD
b2RlJiwgRnVuY3Rpb25NZXRhZGF0YU5vZGUqLCBVbmxpbmtlZEZ1bmN0aW9uS2luZCwgQ29uc3Ry
dWN0QWJpbGl0eSwgSW5saW5lQXR0cmlidXRlLCBKU1BhcnNlclNjcmlwdE1vZGUsIFJlZlB0cjxU
RFpFbnZpcm9ubWVudExpbms+LCBzdGQ6Om9wdGlvbmFsPFByaXZhdGVOYW1lRW52aXJvbm1lbnQ+
LCBKU0M6OkRlcml2ZWRDb250ZXh0VHlwZSwgSlNDOjpOZWVkc0NsYXNzRmllbGRJbml0aWFsaXpl
ciwgUHJpdmF0ZUJyYW5kUmVxdWlyZW1lbnQsIGJvb2wgaXNCdWlsdGluRGVmYXVsdENsYXNzQ29u
c3RydWN0b3IpOworICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKFZNJiwgU3RydWN0dXJl
KiwgY29uc3QgU291cmNlQ29kZSYsIEZ1bmN0aW9uTWV0YWRhdGFOb2RlKiwgVW5saW5rZWRGdW5j
dGlvbktpbmQsIENvbnN0cnVjdEFiaWxpdHksIElubGluZUF0dHJpYnV0ZSwgSlNQYXJzZXJTY3Jp
cHRNb2RlLCBSZWZQdHI8VERaRW52aXJvbm1lbnRMaW5rPiwgc3RkOjpvcHRpb25hbDxWZWN0b3I8
SWRlbnRpZmllcj4+JiYsIHN0ZDo6b3B0aW9uYWw8UHJpdmF0ZU5hbWVFbnZpcm9ubWVudD4sIEpT
Qzo6RGVyaXZlZENvbnRleHRUeXBlLCBKU0M6Ok5lZWRzQ2xhc3NGaWVsZEluaXRpYWxpemVyLCBQ
cml2YXRlQnJhbmRSZXF1aXJlbWVudCwgYm9vbCBpc0J1aWx0aW5EZWZhdWx0Q2xhc3NDb25zdHJ1
Y3Rvcik7CiAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUoRGVjb2RlciYsIGNvbnN0IENh
Y2hlZEZ1bmN0aW9uRXhlY3V0YWJsZSYpOwogCiAgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVH
ZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29k
ZUdlbmVyYXRvci5jcHAKaW5kZXggNDI1MzE0OTk2NDk0Li4xNzc2MjQ1ODcyYzYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3Iu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuY3BwCkBAIC0zNDgsNyArMzQ4LDcgQEAgUGFyc2VyRXJyb3IgQnl0ZWNvZGVHZW5lcmF0
b3I6OmdlbmVyYXRlKHVuc2lnbmVkJiBzaXplKQogICAgIHJldHVybiBQYXJzZXJFcnJvcihQYXJz
ZXJFcnJvcjo6RXJyb3JOb25lKTsKIH0KIAotQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2Vu
ZXJhdG9yKFZNJiB2bSwgUHJvZ3JhbU5vZGUqIHByb2dyYW1Ob2RlLCBVbmxpbmtlZFByb2dyYW1D
b2RlQmxvY2sqIGNvZGVCbG9jaywgT3B0aW9uU2V0PENvZGVHZW5lcmF0aW9uTW9kZT4gY29kZUdl
bmVyYXRpb25Nb2RlLCBjb25zdCBSZWZQdHI8VERaRW52aXJvbm1lbnRMaW5rPiYgcGFyZW50U2Nv
cGVURFpWYXJpYWJsZXMsIGNvbnN0IFByaXZhdGVOYW1lRW52aXJvbm1lbnQqKQorQnl0ZWNvZGVH
ZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJiB2bSwgUHJvZ3JhbU5vZGUqIHByb2dyYW1O
b2RlLCBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sqIGNvZGVCbG9jaywgT3B0aW9uU2V0PENvZGVH
ZW5lcmF0aW9uTW9kZT4gY29kZUdlbmVyYXRpb25Nb2RlLCBjb25zdCBSZWZQdHI8VERaRW52aXJv
bm1lbnRMaW5rPiYgcGFyZW50U2NvcGVURFpWYXJpYWJsZXMsIGNvbnN0IEZpeGVkVmVjdG9yPElk
ZW50aWZpZXI+KiwgY29uc3QgUHJpdmF0ZU5hbWVFbnZpcm9ubWVudCopCiAgICAgOiBCeXRlY29k
ZUdlbmVyYXRvckJhc2UobWFrZVVuaXF1ZTxVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcj4odm0s
IGNvZGVCbG9jayksIENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmly
dHVhbFJlZ2lzdGVycygpKQogICAgICwgbV9jb2RlR2VuZXJhdGlvbk1vZGUoY29kZUdlbmVyYXRp
b25Nb2RlKQogICAgICwgbV9zY29wZU5vZGUocHJvZ3JhbU5vZGUpCkBAIC0zOTQsNyArMzk0LDcg
QEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJiB2bSwgUHJvZ3JhbU5v
ZGUqIHByb2dyYW1Ob2RlLCBVbmxpbmtlZFAKICAgICB9CiB9CiAKLUJ5dGVjb2RlR2VuZXJhdG9y
OjpCeXRlY29kZUdlbmVyYXRvcihWTSYgdm0sIEZ1bmN0aW9uTm9kZSogZnVuY3Rpb25Ob2RlLCBV
bmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiBjb2RlQmxvY2ssIE9wdGlvblNldDxDb2RlR2VuZXJh
dGlvbk1vZGU+IGNvZGVHZW5lcmF0aW9uTW9kZSwgY29uc3QgUmVmUHRyPFREWkVudmlyb25tZW50
TGluaz4mIHBhcmVudFNjb3BlVERaVmFyaWFibGVzLCBjb25zdCBQcml2YXRlTmFtZUVudmlyb25t
ZW50KiBwYXJlbnRQcml2YXRlTmFtZUVudmlyb25tZW50KQorQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5
dGVjb2RlR2VuZXJhdG9yKFZNJiB2bSwgRnVuY3Rpb25Ob2RlKiBmdW5jdGlvbk5vZGUsIFVubGlu
a2VkRnVuY3Rpb25Db2RlQmxvY2sqIGNvZGVCbG9jaywgT3B0aW9uU2V0PENvZGVHZW5lcmF0aW9u
TW9kZT4gY29kZUdlbmVyYXRpb25Nb2RlLCBjb25zdCBSZWZQdHI8VERaRW52aXJvbm1lbnRMaW5r
PiYgcGFyZW50U2NvcGVURFpWYXJpYWJsZXMsIGNvbnN0IEZpeGVkVmVjdG9yPElkZW50aWZpZXI+
KiBwYXJlbnRGdW5jdGlvblBhcmFtZXRlck5hbWVzLCBjb25zdCBQcml2YXRlTmFtZUVudmlyb25t
ZW50KiBwYXJlbnRQcml2YXRlTmFtZUVudmlyb25tZW50KQogICAgIDogQnl0ZWNvZGVHZW5lcmF0
b3JCYXNlKG1ha2VVbmlxdWU8VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I+KHZtLCBjb2RlQmxv
Y2spLCBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdp
c3RlcnMoKSkKICAgICAsIG1fY29kZUdlbmVyYXRpb25Nb2RlKGNvZGVHZW5lcmF0aW9uTW9kZSkK
ICAgICAsIG1fc2NvcGVOb2RlKGZ1bmN0aW9uTm9kZSkKQEAgLTQyOCw2ICs0MjgsNyBAQCBCeXRl
Y29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mIHZtLCBGdW5jdGlvbk5vZGUqIGZ1
bmN0aW9uTm9kZSwgVW5saW5rZQogICAgIGludCBzeW1ib2xUYWJsZUNvbnN0YW50SW5kZXggPSAw
OwogCiAgICAgbV9jYWNoZWRQYXJlbnRURFogPSBwYXJlbnRTY29wZVREWlZhcmlhYmxlczsKKyAg
ICBtX3BhcmVudEZ1bmN0aW9uUGFyYW1ldGVyTmFtZXMgPSBwYXJlbnRGdW5jdGlvblBhcmFtZXRl
ck5hbWVzOwogCiAgICAgRnVuY3Rpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzID0gKmZ1bmN0aW9u
Tm9kZS0+cGFyYW1ldGVycygpOyAKICAgICAvLyBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25h
bC5vcmcvZWNtYS0yNjIvNi4wL2luZGV4Lmh0bWwjc2VjLWZ1bmN0aW9uZGVjbGFyYXRpb25pbnN0
YW50aWF0aW9uCkBAIC00NTAsOSArNDUxLDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2Rl
R2VuZXJhdG9yKFZNJiB2bSwgRnVuY3Rpb25Ob2RlKiBmdW5jdGlvbk5vZGUsIFVubGlua2UKICAg
ICAgICAgbV9uZWVkc0dlbmVyYXRvcmlmaWNhdGlvbiA9IHRydWU7CiAgICAgICAgIC8vIEdlbmVy
YXRvciBhbmQgQXN5bmNGdW5jdGlvbiBuZXZlciBwcm92aWRlcyAiYXJndW1lbnRzIi4gImFyZ3Vt
ZW50cyIgcmVmZXJlbmNlIHdpbGwgYmUgcmVzb2x2ZWQgaW4gYW4gdXBwZXIgZ2VuZXJhdG9yIGZ1
bmN0aW9uIHNjb3BlLgogICAgICAgICBtX25lZWRzQXJndW1lbnRzID0gZmFsc2U7Ci0gICAgfQot
Ci0gICAgaWYgKGlzR2VuZXJhdG9yT3JBc3luY0Z1bmN0aW9uV3JhcHBlclBhcnNlTW9kZShwYXJz
ZU1vZGUpICYmIG1fbmVlZHNBcmd1bWVudHMpIHsKKyAgICB9IGVsc2UgaWYgKGlzR2VuZXJhdG9y
T3JBc3luY0Z1bmN0aW9uV3JhcHBlclBhcnNlTW9kZShwYXJzZU1vZGUpKSB7CiAgICAgICAgIC8v
IEdlbmVyYXRvciBkb2VzIG5vdCBwcm92aWRlICJhcmd1bWVudHMiLiBJbnN0ZWFkLCB3cmFwcGlu
ZyBHZW5lcmF0b3JGdW5jdGlvbiBwcm92aWRlcyAiYXJndW1lbnRzIi4KICAgICAgICAgLy8gVGhp
cyBpcyBiZWNhdXNlIGFyZ3VtZW50cyBvZiBhIGdlbmVyYXRvciBzaG91bGQgYmUgZXZhbHVhdGVk
IGJlZm9yZSBzdGFydGluZyBpdC4KICAgICAgICAgLy8gVG8gd29ya2Fyb3VuZCBpdCwgd2UgZXZh
bHVhdGUgdGhlc2UgYXJndW1lbnRzIGFzIGFyZ3VtZW50cyBvZiBhIHdyYXBwaW5nIGdlbmVyYXRv
ciBmdW5jdGlvbiwgYW5kIHJlZmVyZW5jZSBpdCBmcm9tIGEgZ2VuZXJhdG9yLgpAQCAtNDY3LDcg
KzQ2NiwxMiBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mIHZtLCBG
dW5jdGlvbk5vZGUqIGZ1bmN0aW9uTm9kZSwgVW5saW5rZQogICAgICAgICAvLyAgICAgICAgICAg
IH0KICAgICAgICAgLy8gICAgICAgIH0KICAgICAgICAgLy8gICAgfQotICAgICAgICBzaG91bGRD
YXB0dXJlU29tZU9mVGhlVGhpbmdzID0gdHJ1ZTsKKyAgICAgICAgaWYgKG1fbmVlZHNBcmd1bWVu
dHMpCisgICAgICAgICAgICBzaG91bGRDYXB0dXJlU29tZU9mVGhlVGhpbmdzID0gdHJ1ZTsKKyAg
ICAgICAgaWYgKHBhcmFtZXRlcnMuc2l6ZSgpKSB7CisgICAgICAgICAgICBzaG91bGRDYXB0dXJl
U29tZU9mVGhlVGhpbmdzID0gdHJ1ZTsKKyAgICAgICAgICAgIHNob3VsZENhcHR1cmVBbGxPZlRo
ZVRoaW5ncyA9IHRydWU7CisgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAoc2hvdWxkQ2FwdHVy
ZUFsbE9mVGhlVGhpbmdzKQpAQCAtNzE0LDYgKzcxOCw4IEBAIElHTk9SRV9HQ0NfV0FSTklOR1Nf
RU5ECiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKHNob3VsZENyZWF0ZUFyZ3Vt
ZW50c1ZhcmlhYmxlSW5QYXJhbWV0ZXJTY29wZSAmJiBlbnRyeS5rZXkuZ2V0KCkgPT0gcHJvcGVy
dHlOYW1lcygpLmFyZ3VtZW50cy5pbXBsKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgaWYgKGlzR2VuZXJhdG9yT3JBc3luY0Z1bmN0aW9uQm9keVBhcnNlTW9kZShwYXJzZU1vZGUp
ICYmIHBhcmVudEZ1bmN0aW9uUGFyYW1ldGVyTmFtZXMtPmNvbnRhaW5zKGVudHJ5LmtleS5nZXQo
KSkpCisgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgY3JlYXRlVmFyaWFibGUoSWRlbnRp
Zmllcjo6ZnJvbVVpZChtX3ZtLCBlbnRyeS5rZXkuZ2V0KCkpLCB2YXJLaW5kKGVudHJ5LmtleS5n
ZXQoKSksIGZ1bmN0aW9uU3ltYm9sVGFibGUsIElnbm9yZUV4aXN0aW5nKTsKICAgICB9CiAKQEAg
LTg5Miw3ICs4OTgsNyBAQCBJR05PUkVfR0NDX1dBUk5JTkdTX0VORAogICAgIHB1c2hMZXhpY2Fs
U2NvcGUobV9zY29wZU5vZGUsIFNjb3BlVHlwZTo6TGV0Q29uc3RTY29wZSwgVERaQ2hlY2tPcHRp
bWl6YXRpb246Ok9wdGltaXplLCBOZXN0ZWRTY29wZVR5cGU6OklzTm90TmVzdGVkLCBudWxscHRy
LCBzaG91bGRJbml0aWFsaXplQmxvY2tTY29wZWRGdW5jdGlvbnMpOwogfQogCi1CeXRlY29kZUdl
bmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mIHZtLCBFdmFsTm9kZSogZXZhbE5vZGUsIFVu
bGlua2VkRXZhbENvZGVCbG9jayogY29kZUJsb2NrLCBPcHRpb25TZXQ8Q29kZUdlbmVyYXRpb25N
b2RlPiBjb2RlR2VuZXJhdGlvbk1vZGUsIGNvbnN0IFJlZlB0cjxURFpFbnZpcm9ubWVudExpbms+
JiBwYXJlbnRTY29wZVREWlZhcmlhYmxlcywgY29uc3QgUHJpdmF0ZU5hbWVFbnZpcm9ubWVudCog
cGFyZW50UHJpdmF0ZU5hbWVFbnZpcm9ubWVudCkKK0J5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29k
ZUdlbmVyYXRvcihWTSYgdm0sIEV2YWxOb2RlKiBldmFsTm9kZSwgVW5saW5rZWRFdmFsQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIE9wdGlvblNldDxDb2RlR2VuZXJhdGlvbk1vZGU+IGNvZGVHZW5lcmF0
aW9uTW9kZSwgY29uc3QgUmVmUHRyPFREWkVudmlyb25tZW50TGluaz4mIHBhcmVudFNjb3BlVERa
VmFyaWFibGVzLCBjb25zdCBGaXhlZFZlY3RvcjxJZGVudGlmaWVyPiosIGNvbnN0IFByaXZhdGVO
YW1lRW52aXJvbm1lbnQqIHBhcmVudFByaXZhdGVOYW1lRW52aXJvbm1lbnQpCiAgICAgOiBCeXRl
Y29kZUdlbmVyYXRvckJhc2UobWFrZVVuaXF1ZTxVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcj4o
dm0sIGNvZGVCbG9jayksIENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFz
VmlydHVhbFJlZ2lzdGVycygpKQogICAgICwgbV9jb2RlR2VuZXJhdGlvbk1vZGUoY29kZUdlbmVy
YXRpb25Nb2RlKQogICAgICwgbV9zY29wZU5vZGUoZXZhbE5vZGUpCkBAIC05NTYsNyArOTYyLDcg
QEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJiB2bSwgRXZhbE5vZGUq
IGV2YWxOb2RlLCBVbmxpbmtlZEV2YWxDb2QKICAgICBwdXNoTGV4aWNhbFNjb3BlKG1fc2NvcGVO
b2RlLCBTY29wZVR5cGU6OkxldENvbnN0U2NvcGUsIFREWkNoZWNrT3B0aW1pemF0aW9uOjpPcHRp
bWl6ZSwgTmVzdGVkU2NvcGVUeXBlOjpJc05vdE5lc3RlZCwgbnVsbHB0ciwgc2hvdWxkSW5pdGlh
bGl6ZUJsb2NrU2NvcGVkRnVuY3Rpb25zKTsKIH0KIAotQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVj
b2RlR2VuZXJhdG9yKFZNJiB2bSwgTW9kdWxlUHJvZ3JhbU5vZGUqIG1vZHVsZVByb2dyYW1Ob2Rl
LCBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIGNvZGVCbG9jaywgT3B0aW9uU2V0PENv
ZGVHZW5lcmF0aW9uTW9kZT4gY29kZUdlbmVyYXRpb25Nb2RlLCBjb25zdCBSZWZQdHI8VERaRW52
aXJvbm1lbnRMaW5rPiYgcGFyZW50U2NvcGVURFpWYXJpYWJsZXMsIGNvbnN0IFByaXZhdGVOYW1l
RW52aXJvbm1lbnQqKQorQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJiB2
bSwgTW9kdWxlUHJvZ3JhbU5vZGUqIG1vZHVsZVByb2dyYW1Ob2RlLCBVbmxpbmtlZE1vZHVsZVBy
b2dyYW1Db2RlQmxvY2sqIGNvZGVCbG9jaywgT3B0aW9uU2V0PENvZGVHZW5lcmF0aW9uTW9kZT4g
Y29kZUdlbmVyYXRpb25Nb2RlLCBjb25zdCBSZWZQdHI8VERaRW52aXJvbm1lbnRMaW5rPiYgcGFy
ZW50U2NvcGVURFpWYXJpYWJsZXMsIGNvbnN0IEZpeGVkVmVjdG9yPElkZW50aWZpZXI+KiwgY29u
c3QgUHJpdmF0ZU5hbWVFbnZpcm9ubWVudCopCiAgICAgOiBCeXRlY29kZUdlbmVyYXRvckJhc2Uo
bWFrZVVuaXF1ZTxVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcj4odm0sIGNvZGVCbG9jayksIENv
ZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygp
KQogICAgICwgbV9jb2RlR2VuZXJhdGlvbk1vZGUoY29kZUdlbmVyYXRpb25Nb2RlKQogICAgICwg
bV9zY29wZU5vZGUobW9kdWxlUHJvZ3JhbU5vZGUpCkBAIC0yMTkxLDYgKzIxOTcsMTMgQEAgdm9p
ZCBCeXRlY29kZUdlbmVyYXRvcjo6aG9pc3RTbG9wcHlNb2RlRnVuY3Rpb25JZk5lY2Vzc2FyeShG
dW5jdGlvbk1ldGFkYXRhTm9kZSoKIHsKICAgICBpZiAobWV0YWRhdGEtPmlzU2xvcHB5TW9kZUhv
aXN0ZWRGdW5jdGlvbigpKSB7CiAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGZ1bmN0aW9uTmFt
ZSA9IG1ldGFkYXRhLT5pZGVudCgpOworCisgICAgICAgIGlmIChpc0dlbmVyYXRvck9yQXN5bmNG
dW5jdGlvbkJvZHlQYXJzZU1vZGUocGFyc2VNb2RlKCkpKSB7CisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChtX3BhcmVudEZ1bmN0aW9uUGFyYW1ldGVyTmFtZXMpOworICAgICAgICAgICAgaWYg
KG1fcGFyZW50RnVuY3Rpb25QYXJhbWV0ZXJOYW1lcy0+Y29udGFpbnMoZnVuY3Rpb25OYW1lKSkK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwogICAgICAgICBWYXJpYWJsZSBj
dXJyZW50RnVuY3Rpb25WYXJpYWJsZSA9IHZhcmlhYmxlKGZ1bmN0aW9uTmFtZSk7CiAgICAgICAg
IFJlZlB0cjxSZWdpc3RlcklEPiBjdXJyZW50VmFsdWU7CiAgICAgICAgIGlmIChSZWdpc3RlcklE
KiBsb2NhbCA9IGN1cnJlbnRGdW5jdGlvblZhcmlhYmxlLmxvY2FsKCkpCkBAIC0zMTQ3LDYgKzMx
NjAsMTYgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cHVzaFREWlZhcmlhYmxlcyhjb25zdCBW
YXJpYWJsZUVudmlyb25tZW50JiBlbnZpcm9ubWVudCwKICAgICBtX1REWlN0YWNrLmFwcGVuZChU
RFpTdGFja0VudHJ5IHsgV1RGTW92ZShtYXApLCBudWxscHRyIH0pOwogfQogCitWZWN0b3I8SWRl
bnRpZmllcj4gQnl0ZWNvZGVHZW5lcmF0b3I6OmdldFBhcmFtZXRlck5hbWVzKCkgY29uc3QKK3sK
KyAgICBSRUxFQVNFX0FTU0VSVChtX3Njb3BlTm9kZS0+aXNGdW5jdGlvbk5vZGUoKSk7CisgICAg
RnVuY3Rpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzID0gKnN0YXRpY19jYXN0PEZ1bmN0aW9uTm9k
ZSo+KG1fc2NvcGVOb2RlKS0+cGFyYW1ldGVycygpOworICAgIFZlY3RvcjxJZGVudGlmaWVyPiBw
YXJhbWV0ZXJOYW1lczsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGFyYW1ldGVycy5z
aXplKCk7IGkrKykKKyAgICAgICAgcGFyYW1ldGVycy5hdChpKS5maXJzdC0+Y29sbGVjdEJvdW5k
SWRlbnRpZmllcnMocGFyYW1ldGVyTmFtZXMpOworICAgIHJldHVybiBwYXJhbWV0ZXJOYW1lczsK
K30KKwogc3RkOjpvcHRpb25hbDxQcml2YXRlTmFtZUVudmlyb25tZW50PiBCeXRlY29kZUdlbmVy
YXRvcjo6Z2V0QXZhaWxhYmxlUHJpdmF0ZUFjY2Vzc05hbWVzKCkKIHsKICAgICBQcml2YXRlTmFt
ZUVudmlyb25tZW50IHJlc3VsdDsKQEAgLTM0MTMsNyArMzQzNiw3IEBAIFJlZ2lzdGVySUQqIEJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3Q2xhc3NGaWVsZEluaXRpYWxpemVyRnVuY3Rpb24oUmVn
aXN0ZXJJRCoKIAogICAgIEZ1bmN0aW9uTWV0YWRhdGFOb2RlIG1ldGFkYXRhKHBhcnNlckFyZW5h
KCksIEpTVG9rZW5Mb2NhdGlvbigpLCBKU1Rva2VuTG9jYXRpb24oKSwgMCwgMCwgMCwgMCwgMCwg
SW1wbGVtZW50YXRpb25WaXNpYmlsaXR5OjpQcml2YXRlLCBTdHJpY3RNb2RlTGV4aWNhbEZlYXR1
cmUsIENvbnN0cnVjdG9yS2luZDo6Tm9uZSwgc3VwZXJCaW5kaW5nLCAwLCBwYXJzZU1vZGUsIGZh
bHNlKTsKICAgICBtZXRhZGF0YS5maW5pc2hQYXJzaW5nKG1fc2NvcGVOb2RlLT5zb3VyY2UoKSwg
SWRlbnRpZmllcigpLCBGdW5jdGlvbk1vZGU6Ok1ldGhvZERlZmluaXRpb24pOwotICAgIGF1dG8g
aW5pdGlhbGl6ZXIgPSBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3JlYXRlKG1fdm0sIG1f
c2NvcGVOb2RlLT5zb3VyY2UoKSwgJm1ldGFkYXRhLCBpc0J1aWx0aW5GdW5jdGlvbigpID8gVW5s
aW5rZWRCdWlsdGluRnVuY3Rpb24gOiBVbmxpbmtlZE5vcm1hbEZ1bmN0aW9uLCBjb25zdHJ1Y3RB
YmlsaXR5LCBJbmxpbmVBdHRyaWJ1dGU6OkFsd2F5cywgc2NyaXB0TW9kZSgpLCBXVEZNb3ZlKHZh
cmlhYmxlc1VuZGVyVERaKSwgV1RGTW92ZShwYXJlbnRQcml2YXRlTmFtZUVudmlyb25tZW50KSwg
bmV3RGVyaXZlZENvbnRleHRUeXBlLCBOZWVkc0NsYXNzRmllbGRJbml0aWFsaXplcjo6Tm8sIFBy
aXZhdGVCcmFuZFJlcXVpcmVtZW50OjpOb25lKTsKKyAgICBhdXRvIGluaXRpYWxpemVyID0gVW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZShtX3ZtLCBtX3Njb3BlTm9kZS0+c291cmNl
KCksICZtZXRhZGF0YSwgaXNCdWlsdGluRnVuY3Rpb24oKSA/IFVubGlua2VkQnVpbHRpbkZ1bmN0
aW9uIDogVW5saW5rZWROb3JtYWxGdW5jdGlvbiwgY29uc3RydWN0QWJpbGl0eSwgSW5saW5lQXR0
cmlidXRlOjpBbHdheXMsIHNjcmlwdE1vZGUoKSwgV1RGTW92ZSh2YXJpYWJsZXNVbmRlclREWiks
IHsgfSwgV1RGTW92ZShwYXJlbnRQcml2YXRlTmFtZUVudmlyb25tZW50KSwgbmV3RGVyaXZlZENv
bnRleHRUeXBlLCBOZWVkc0NsYXNzRmllbGRJbml0aWFsaXplcjo6Tm8sIFByaXZhdGVCcmFuZFJl
cXVpcmVtZW50OjpOb25lKTsKICAgICBpbml0aWFsaXplci0+c2V0Q2xhc3NGaWVsZExvY2F0aW9u
cyhXVEZNb3ZlKGNsYXNzRmllbGRMb2NhdGlvbnMpKTsKIAogICAgIHVuc2lnbmVkIGluZGV4ID0g
bV9jb2RlQmxvY2stPmFkZEZ1bmN0aW9uRXhwcihpbml0aWFsaXplcik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKaW5k
ZXggYWNiZmU2NGY5MTIzLi41NjNhM2M1ODliMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKQEAgLTM1MCwxMCAr
MzUwLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHB1YmxpYzoKICAgICAgICAgdHlwZWRlZiBE
ZWNsYXJhdGlvblN0YWNrczo6RnVuY3Rpb25TdGFjayBGdW5jdGlvblN0YWNrOwogCi0gICAgICAg
IEJ5dGVjb2RlR2VuZXJhdG9yKFZNJiwgUHJvZ3JhbU5vZGUqLCBVbmxpbmtlZFByb2dyYW1Db2Rl
QmxvY2sqLCBPcHRpb25TZXQ8Q29kZUdlbmVyYXRpb25Nb2RlPiwgY29uc3QgUmVmUHRyPFREWkVu
dmlyb25tZW50TGluaz4mLCBjb25zdCBQcml2YXRlTmFtZUVudmlyb25tZW50Kik7Ci0gICAgICAg
IEJ5dGVjb2RlR2VuZXJhdG9yKFZNJiwgRnVuY3Rpb25Ob2RlKiwgVW5saW5rZWRGdW5jdGlvbkNv
ZGVCbG9jayosIE9wdGlvblNldDxDb2RlR2VuZXJhdGlvbk1vZGU+LCBjb25zdCBSZWZQdHI8VERa
RW52aXJvbm1lbnRMaW5rPiYsIGNvbnN0IFByaXZhdGVOYW1lRW52aXJvbm1lbnQqKTsKLSAgICAg
ICAgQnl0ZWNvZGVHZW5lcmF0b3IoVk0mLCBFdmFsTm9kZSosIFVubGlua2VkRXZhbENvZGVCbG9j
ayosIE9wdGlvblNldDxDb2RlR2VuZXJhdGlvbk1vZGU+LCBjb25zdCBSZWZQdHI8VERaRW52aXJv
bm1lbnRMaW5rPiYsIGNvbnN0IFByaXZhdGVOYW1lRW52aXJvbm1lbnQqKTsKLSAgICAgICAgQnl0
ZWNvZGVHZW5lcmF0b3IoVk0mLCBNb2R1bGVQcm9ncmFtTm9kZSosIFVubGlua2VkTW9kdWxlUHJv
Z3JhbUNvZGVCbG9jayosIE9wdGlvblNldDxDb2RlR2VuZXJhdGlvbk1vZGU+LCBjb25zdCBSZWZQ
dHI8VERaRW52aXJvbm1lbnRMaW5rPiYsIGNvbnN0IFByaXZhdGVOYW1lRW52aXJvbm1lbnQqKTsK
KyAgICAgICAgQnl0ZWNvZGVHZW5lcmF0b3IoVk0mLCBQcm9ncmFtTm9kZSosIFVubGlua2VkUHJv
Z3JhbUNvZGVCbG9jayosIE9wdGlvblNldDxDb2RlR2VuZXJhdGlvbk1vZGU+LCBjb25zdCBSZWZQ
dHI8VERaRW52aXJvbm1lbnRMaW5rPiYsIGNvbnN0IEZpeGVkVmVjdG9yPElkZW50aWZpZXI+Kiwg
Y29uc3QgUHJpdmF0ZU5hbWVFbnZpcm9ubWVudCopOworICAgICAgICBCeXRlY29kZUdlbmVyYXRv
cihWTSYsIEZ1bmN0aW9uTm9kZSosIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqLCBPcHRpb25T
ZXQ8Q29kZUdlbmVyYXRpb25Nb2RlPiwgY29uc3QgUmVmUHRyPFREWkVudmlyb25tZW50TGluaz4m
LCBjb25zdCBGaXhlZFZlY3RvcjxJZGVudGlmaWVyPiosIGNvbnN0IFByaXZhdGVOYW1lRW52aXJv
bm1lbnQqKTsKKyAgICAgICAgQnl0ZWNvZGVHZW5lcmF0b3IoVk0mLCBFdmFsTm9kZSosIFVubGlu
a2VkRXZhbENvZGVCbG9jayosIE9wdGlvblNldDxDb2RlR2VuZXJhdGlvbk1vZGU+LCBjb25zdCBS
ZWZQdHI8VERaRW52aXJvbm1lbnRMaW5rPiYsIGNvbnN0IEZpeGVkVmVjdG9yPElkZW50aWZpZXI+
KiwgY29uc3QgUHJpdmF0ZU5hbWVFbnZpcm9ubWVudCopOworICAgICAgICBCeXRlY29kZUdlbmVy
YXRvcihWTSYsIE1vZHVsZVByb2dyYW1Ob2RlKiwgVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJs
b2NrKiwgT3B0aW9uU2V0PENvZGVHZW5lcmF0aW9uTW9kZT4sIGNvbnN0IFJlZlB0cjxURFpFbnZp
cm9ubWVudExpbms+JiwgY29uc3QgRml4ZWRWZWN0b3I8SWRlbnRpZmllcj4qLCBjb25zdCBQcml2
YXRlTmFtZUVudmlyb25tZW50Kik7CiAKICAgICAgICAgfkJ5dGVjb2RlR2VuZXJhdG9yKCk7CiAg
ICAgICAgIApAQCAtMzc3LDE0ICszNzcsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIE5l
ZWRzQ2xhc3NGaWVsZEluaXRpYWxpemVyIG5lZWRzQ2xhc3NGaWVsZEluaXRpYWxpemVyKCkgY29u
c3QgeyByZXR1cm4gbV9jb2RlQmxvY2stPm5lZWRzQ2xhc3NGaWVsZEluaXRpYWxpemVyKCk7IH0K
IAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBOb2RlLCB0eXBlbmFtZSBVbmxpbmtlZENvZGVC
bG9jaz4KLSAgICAgICAgc3RhdGljIFBhcnNlckVycm9yIGdlbmVyYXRlKFZNJiB2bSwgTm9kZSog
bm9kZSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlQ29kZSwgVW5saW5rZWRDb2RlQmxvY2sqIHVu
bGlua2VkQ29kZUJsb2NrLCBPcHRpb25TZXQ8Q29kZUdlbmVyYXRpb25Nb2RlPiBjb2RlR2VuZXJh
dGlvbk1vZGUsIGNvbnN0IFJlZlB0cjxURFpFbnZpcm9ubWVudExpbms+JiBwYXJlbnRTY29wZVRE
WlZhcmlhYmxlcywgY29uc3QgUHJpdmF0ZU5hbWVFbnZpcm9ubWVudCogcHJpdmF0ZU5hbWVFbnZp
cm9ubWVudCkKKyAgICAgICAgc3RhdGljIFBhcnNlckVycm9yIGdlbmVyYXRlKFZNJiB2bSwgTm9k
ZSogbm9kZSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlQ29kZSwgVW5saW5rZWRDb2RlQmxvY2sq
IHVubGlua2VkQ29kZUJsb2NrLCBPcHRpb25TZXQ8Q29kZUdlbmVyYXRpb25Nb2RlPiBjb2RlR2Vu
ZXJhdGlvbk1vZGUsIGNvbnN0IFJlZlB0cjxURFpFbnZpcm9ubWVudExpbms+JiBwYXJlbnRTY29w
ZVREWlZhcmlhYmxlcywgY29uc3QgRml4ZWRWZWN0b3I8SWRlbnRpZmllcj4qIHBhcmVudEZ1bmN0
aW9uUGFyYW1ldGVyTmFtZXMsIGNvbnN0IFByaXZhdGVOYW1lRW52aXJvbm1lbnQqIHByaXZhdGVO
YW1lRW52aXJvbm1lbnQpCiAgICAgICAgIHsKICAgICAgICAgICAgIE1vbm90b25pY1RpbWUgYmVm
b3JlOwogICAgICAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnJlcG9ydEJ5dGVjb2RlQ29t
cGlsZVRpbWVzKCkpKQogICAgICAgICAgICAgICAgIGJlZm9yZSA9IE1vbm90b25pY1RpbWU6Om5v
dygpOwogCiAgICAgICAgICAgICBEZWZlckdDIGRlZmVyR0Modm0pOwotICAgICAgICAgICAgYXV0
byBieXRlY29kZUdlbmVyYXRvciA9IG1ha2VVbmlxdWU8Qnl0ZWNvZGVHZW5lcmF0b3I+KHZtLCBu
b2RlLCB1bmxpbmtlZENvZGVCbG9jaywgY29kZUdlbmVyYXRpb25Nb2RlLCBwYXJlbnRTY29wZVRE
WlZhcmlhYmxlcywgcHJpdmF0ZU5hbWVFbnZpcm9ubWVudCk7CisgICAgICAgICAgICBhdXRvIGJ5
dGVjb2RlR2VuZXJhdG9yID0gbWFrZVVuaXF1ZTxCeXRlY29kZUdlbmVyYXRvcj4odm0sIG5vZGUs
IHVubGlua2VkQ29kZUJsb2NrLCBjb2RlR2VuZXJhdGlvbk1vZGUsIHBhcmVudFNjb3BlVERaVmFy
aWFibGVzLCBwYXJlbnRGdW5jdGlvblBhcmFtZXRlck5hbWVzLCBwcml2YXRlTmFtZUVudmlyb25t
ZW50KTsKICAgICAgICAgICAgIHVuc2lnbmVkIHNpemU7CiAgICAgICAgICAgICBhdXRvIHJlc3Vs
dCA9IGJ5dGVjb2RlR2VuZXJhdG9yLT5nZW5lcmF0ZShzaXplKTsKIApAQCAtMTE2Myw2ICsxMTYz
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGF1dG8g
b3B0aW9uYWxWYXJpYWJsZXNVbmRlclREWiA9IGdldFZhcmlhYmxlc1VuZGVyVERaKCk7CisgICAg
ICAgICAgICBzdGQ6Om9wdGlvbmFsPFZlY3RvcjxJZGVudGlmaWVyPj4gcGFyYW1ldGVyTmFtZXMg
PSBzdGQ6Om51bGxvcHQ7CiAgICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPFByaXZhdGVOYW1lRW52
aXJvbm1lbnQ+IHBhcmVudFByaXZhdGVOYW1lRW52aXJvbm1lbnQgPSBnZXRBdmFpbGFibGVQcml2
YXRlQWNjZXNzTmFtZXMoKTsKIAogICAgICAgICAgICAgLy8gRklYTUU6IFRoZXNlIGZsYWdzLCBQ
YXJzZXJNb2RlcyBhbmQgcHJvcGFnYXRpb24gdG8gWFhYQ29kZUJsb2NrcyBzaG91bGQgYmUgcmVv
cmdhbml6ZWQuCkBAIC0xMTcyLDEwICsxMTczLDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICAgICAgaWYgKHBhcnNlTW9kZSA9PSBTb3VyY2VQYXJzZU1vZGU6Ok1ldGhvZE1vZGUgJiYgbWV0
YWRhdGEtPmNvbnN0cnVjdG9yS2luZCgpICE9IENvbnN0cnVjdG9yS2luZDo6Tm9uZSkKICAgICAg
ICAgICAgICAgICBjb25zdHJ1Y3RBYmlsaXR5ID0gQ29uc3RydWN0QWJpbGl0eTo6Q2FuQ29uc3Ry
dWN0OwogCi0gICAgICAgICAgICByZXR1cm4gVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmNy
ZWF0ZShtX3ZtLCBtX3Njb3BlTm9kZS0+c291cmNlKCksIG1ldGFkYXRhLCBpc0J1aWx0aW5GdW5j
dGlvbigpID8gVW5saW5rZWRCdWlsdGluRnVuY3Rpb24gOiBVbmxpbmtlZE5vcm1hbEZ1bmN0aW9u
LCBjb25zdHJ1Y3RBYmlsaXR5LCBJbmxpbmVBdHRyaWJ1dGU6Ok5vbmUsIHNjcmlwdE1vZGUoKSwg
V1RGTW92ZShvcHRpb25hbFZhcmlhYmxlc1VuZGVyVERaKSwgV1RGTW92ZShwYXJlbnRQcml2YXRl
TmFtZUVudmlyb25tZW50KSwgbmV3RGVyaXZlZENvbnRleHRUeXBlLCBuZWVkc0NsYXNzRmllbGRJ
bml0aWFsaXplciwgcHJpdmF0ZUJyYW5kUmVxdWlyZW1lbnQpOworICAgICAgICAgICAgaWYgKGlz
R2VuZXJhdG9yT3JBc3luY0Z1bmN0aW9uV3JhcHBlclBhcnNlTW9kZShtX2NvZGVCbG9jay0+cGFy
c2VNb2RlKCkpICYmIGlzR2VuZXJhdG9yT3JBc3luY0Z1bmN0aW9uQm9keVBhcnNlTW9kZShwYXJz
ZU1vZGUpKQorICAgICAgICAgICAgICAgIHBhcmFtZXRlck5hbWVzID0gZ2V0UGFyYW1ldGVyTmFt
ZXMoKTsKKworICAgICAgICAgICAgcmV0dXJuIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpj
cmVhdGUobV92bSwgbV9zY29wZU5vZGUtPnNvdXJjZSgpLCBtZXRhZGF0YSwgaXNCdWlsdGluRnVu
Y3Rpb24oKSA/IFVubGlua2VkQnVpbHRpbkZ1bmN0aW9uIDogVW5saW5rZWROb3JtYWxGdW5jdGlv
biwgY29uc3RydWN0QWJpbGl0eSwgSW5saW5lQXR0cmlidXRlOjpOb25lLCBzY3JpcHRNb2RlKCks
IFdURk1vdmUob3B0aW9uYWxWYXJpYWJsZXNVbmRlclREWiksIFdURk1vdmUocGFyYW1ldGVyTmFt
ZXMpLCBXVEZNb3ZlKHBhcmVudFByaXZhdGVOYW1lRW52aXJvbm1lbnQpLCBuZXdEZXJpdmVkQ29u
dGV4dFR5cGUsIG5lZWRzQ2xhc3NGaWVsZEluaXRpYWxpemVyLCBwcml2YXRlQnJhbmRSZXF1aXJl
bWVudCk7CiAgICAgICAgIH0KIAogICAgICAgICBSZWZQdHI8VERaRW52aXJvbm1lbnRMaW5rPiBn
ZXRWYXJpYWJsZXNVbmRlclREWigpOworICAgICAgICBWZWN0b3I8SWRlbnRpZmllcj4gZ2V0UGFy
YW1ldGVyTmFtZXMoKSBjb25zdDsKICAgICAgICAgc3RkOjpvcHRpb25hbDxQcml2YXRlTmFtZUVu
dmlyb25tZW50PiBnZXRBdmFpbGFibGVQcml2YXRlQWNjZXNzTmFtZXMoKTsKIAogICAgICAgICBS
ZWdpc3RlcklEKiBlbWl0Q29uc3RydWN0VmFyYXJncyhSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVy
SUQqIGZ1bmMsIFJlZ2lzdGVySUQqIHRoaXNSZWdpc3RlciwgUmVnaXN0ZXJJRCogYXJndW1lbnRz
LCBSZWdpc3RlcklEKiBmaXJzdEZyZWVSZWdpc3RlciwgaW50MzJfdCBmaXJzdFZhckFyZ09mZnNl
dCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2
b3RTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kLCBEZWJ1Z2dhYmxlQ2FsbCk7
CkBAIC0xMjU5LDYgKzEyNjQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVmVjdG9yPExl
eGljYWxTY29wZVN0YWNrRW50cnk+IG1fbGV4aWNhbFNjb3BlU3RhY2s7CiAKICAgICAgICAgUmVm
UHRyPFREWkVudmlyb25tZW50TGluaz4gbV9jYWNoZWRQYXJlbnRURFo7CisgICAgICAgIGNvbnN0
IEZpeGVkVmVjdG9yPElkZW50aWZpZXI+KiBtX3BhcmVudEZ1bmN0aW9uUGFyYW1ldGVyTmFtZXMg
eyBudWxscHRyIH07CiAgICAgICAgIFZlY3RvcjxURFpTdGFja0VudHJ5PiBtX1REWlN0YWNrOwog
ICAgICAgICBWZWN0b3I8UHJpdmF0ZU5hbWVFbnZpcm9ubWVudD4gbV9wcml2YXRlTmFtZXNTdGFj
azsKICAgICAgICAgc3RkOjpvcHRpb25hbDxzaXplX3Q+IG1fdmFyU2NvcGVMZXhpY2FsU2NvcGVT
dGFja0luZGV4OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2Fj
aGVkVHlwZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMu
Y3BwCmluZGV4IDhlZWE0YjA1ZGJmOS4uZGI0ZjI3YzE0ODAwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCkBAIC0xNzUzLDYgKzE3NTMsNyBAQCBw
dWJsaWM6CiAgICAgewogICAgICAgICBtX2NsYXNzU291cmNlLmVuY29kZShlbmNvZGVyLCByYXJl
RGF0YS5tX2NsYXNzU291cmNlKTsKICAgICAgICAgbV9wYXJlbnRTY29wZVREWlZhcmlhYmxlcy5l
bmNvZGUoZW5jb2RlciwgcmFyZURhdGEubV9wYXJlbnRTY29wZVREWlZhcmlhYmxlcyk7CisgICAg
ICAgIG1fcGFyZW50RnVuY3Rpb25QYXJhbWV0ZXJOYW1lcy5lbmNvZGUoZW5jb2RlciwgcmFyZURh
dGEubV9wYXJlbnRGdW5jdGlvblBhcmFtZXRlck5hbWVzKTsKICAgICAgICAgbV9jbGFzc0ZpZWxk
TG9jYXRpb25zLmVuY29kZShlbmNvZGVyLCByYXJlRGF0YS5tX2NsYXNzRmllbGRMb2NhdGlvbnMp
OwogICAgICAgICBtX3BhcmVudFByaXZhdGVOYW1lRW52aXJvbm1lbnQuZW5jb2RlKGVuY29kZXIs
IHJhcmVEYXRhLm1fcGFyZW50UHJpdmF0ZU5hbWVFbnZpcm9ubWVudCk7CiAgICAgfQpAQCAtMTc2
Miw2ICsxNzYzLDcgQEAgcHVibGljOgogICAgICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZTo6UmFyZURhdGEqIHJhcmVEYXRhID0gbmV3IFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpS
YXJlRGF0YSB7IH07CiAgICAgICAgIG1fY2xhc3NTb3VyY2UuZGVjb2RlKGRlY29kZXIsIHJhcmVE
YXRhLT5tX2NsYXNzU291cmNlKTsKICAgICAgICAgbV9wYXJlbnRTY29wZVREWlZhcmlhYmxlcy5k
ZWNvZGUoZGVjb2RlciwgcmFyZURhdGEtPm1fcGFyZW50U2NvcGVURFpWYXJpYWJsZXMpOworICAg
ICAgICBtX3BhcmVudEZ1bmN0aW9uUGFyYW1ldGVyTmFtZXMuZGVjb2RlKGRlY29kZXIsIHJhcmVE
YXRhLT5tX3BhcmVudEZ1bmN0aW9uUGFyYW1ldGVyTmFtZXMpOwogICAgICAgICBtX2NsYXNzRmll
bGRMb2NhdGlvbnMuZGVjb2RlKGRlY29kZXIsIHJhcmVEYXRhLT5tX2NsYXNzRmllbGRMb2NhdGlv
bnMpOwogICAgICAgICBtX3BhcmVudFByaXZhdGVOYW1lRW52aXJvbm1lbnQuZGVjb2RlKGRlY29k
ZXIsIHJhcmVEYXRhLT5tX3BhcmVudFByaXZhdGVOYW1lRW52aXJvbm1lbnQpOwogICAgICAgICBy
ZXR1cm4gcmFyZURhdGE7CkBAIC0xNzcwLDYgKzE3NzIsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgog
ICAgIENhY2hlZFNvdXJjZUNvZGVXaXRob3V0UHJvdmlkZXIgbV9jbGFzc1NvdXJjZTsKICAgICBD
YWNoZWRSZWZQdHI8Q2FjaGVkVERaRW52aXJvbm1lbnRMaW5rPiBtX3BhcmVudFNjb3BlVERaVmFy
aWFibGVzOworICAgIENhY2hlZFZlY3RvcjxDYWNoZWRJZGVudGlmaWVyPiBtX3BhcmVudEZ1bmN0
aW9uUGFyYW1ldGVyTmFtZXM7CiAgICAgQ2FjaGVkVmVjdG9yPEpTVGV4dFBvc2l0aW9uPiBtX2Ns
YXNzRmllbGRMb2NhdGlvbnM7CiAgICAgQ2FjaGVkUHJpdmF0ZU5hbWVFbnZpcm9ubWVudCBtX3Bh
cmVudFByaXZhdGVOYW1lRW52aXJvbm1lbnQ7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NvZGVDYWNoZS5jcHAKaW5kZXggYzIxNmQxOGQ5YTQyLi43ZjE2ZmRmNjEzMzEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmNwcApAQCAtMTA4LDcg
KzEwOCw3IEBAIFVubGlua2VkQ29kZUJsb2NrVHlwZSogZ2VuZXJhdGVVbmxpbmtlZENvZGVCbG9j
a0ltcGwoVk0mIHZtLCBjb25zdCBTb3VyY2VDb2RlJiBzCiAgICAgUmVmUHRyPFREWkVudmlyb25t
ZW50TGluaz4gcGFyZW50VmFyaWFibGVzVW5kZXJURFo7CiAgICAgaWYgKHZhcmlhYmxlc1VuZGVy
VERaKQogICAgICAgICBwYXJlbnRWYXJpYWJsZXNVbmRlclREWiA9IFREWkVudmlyb25tZW50TGlu
azo6Y3JlYXRlKHZtLm1fY29tcGFjdFZhcmlhYmxlTWFwLT5nZXQoKnZhcmlhYmxlc1VuZGVyVERa
KSwgbnVsbHB0cik7Ci0gICAgZXJyb3IgPSBCeXRlY29kZUdlbmVyYXRvcjo6Z2VuZXJhdGUodm0s
IHJvb3ROb2RlLmdldCgpLCBzb3VyY2UsIHVubGlua2VkQ29kZUJsb2NrLCBjb2RlR2VuZXJhdGlv
bk1vZGUsIHBhcmVudFZhcmlhYmxlc1VuZGVyVERaLCBwcml2YXRlTmFtZUVudmlyb25tZW50KTsK
KyAgICBlcnJvciA9IEJ5dGVjb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZSh2bSwgcm9vdE5vZGUuZ2V0
KCksIHNvdXJjZSwgdW5saW5rZWRDb2RlQmxvY2ssIGNvZGVHZW5lcmF0aW9uTW9kZSwgcGFyZW50
VmFyaWFibGVzVW5kZXJURFosIG51bGxwdHIsIHByaXZhdGVOYW1lRW52aXJvbm1lbnQpOwogCiAg
ICAgaWYgKGVycm9yLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0yNDgs
NyArMjQ4LDcgQEAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIENvZGVDYWNoZTo6Z2V0VW5s
aW5rZWRHbG9iYWxGdW5jdGlvbkV4ZWN1dGFibGUoVk0mIHYKICAgICAvLyBUaGUgRnVuY3Rpb24g
Y29uc3RydWN0b3Igb25seSBoYXMgYWNjZXNzIHRvIGdsb2JhbCB2YXJpYWJsZXMsIHNvIG5vIHZh
cmlhYmxlcyB3aWxsIGJlIHVuZGVyIFREWiB1bmxlc3MgdGhleSdyZQogICAgIC8vIGluIHRoZSBn
bG9iYWwgbGV4aWNhbCBlbnZpcm9ubWVudCwgd2hpY2ggd2UgYWx3YXlzIFREWiBjaGVjayBhY2Nl
c3NlcyBmcm9tLgogICAgIENvbnN0cnVjdEFiaWxpdHkgY29uc3RydWN0QWJpbGl0eSA9IGNvbnN0
cnVjdEFiaWxpdHlGb3JQYXJzZU1vZGUobWV0YWRhdGEtPnBhcnNlTW9kZSgpKTsKLSAgICBVbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gVW5saW5rZWRGdW5j
dGlvbkV4ZWN1dGFibGU6OmNyZWF0ZSh2bSwgc291cmNlLCBtZXRhZGF0YSwgVW5saW5rZWROb3Jt
YWxGdW5jdGlvbiwgY29uc3RydWN0QWJpbGl0eSwgSW5saW5lQXR0cmlidXRlOjpOb25lLCBKU1Bh
cnNlclNjcmlwdE1vZGU6OkNsYXNzaWMsIG51bGxwdHIsIHN0ZDo6bnVsbG9wdCwgRGVyaXZlZENv
bnRleHRUeXBlOjpOb25lLCBOZWVkc0NsYXNzRmllbGRJbml0aWFsaXplcjo6Tm8sIFByaXZhdGVC
cmFuZFJlcXVpcmVtZW50OjpOb25lKTsKKyAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSog
ZnVuY3Rpb25FeGVjdXRhYmxlID0gVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZSh2
bSwgc291cmNlLCBtZXRhZGF0YSwgVW5saW5rZWROb3JtYWxGdW5jdGlvbiwgY29uc3RydWN0QWJp
bGl0eSwgSW5saW5lQXR0cmlidXRlOjpOb25lLCBKU1BhcnNlclNjcmlwdE1vZGU6OkNsYXNzaWMs
IG51bGxwdHIsIHN0ZDo6bnVsbG9wdCwgc3RkOjpudWxsb3B0LCBEZXJpdmVkQ29udGV4dFR5cGU6
Ok5vbmUsIE5lZWRzQ2xhc3NGaWVsZEluaXRpYWxpemVyOjpObywgUHJpdmF0ZUJyYW5kUmVxdWly
ZW1lbnQ6Ok5vbmUpOwogCiAgICAgaWYgKCFzb3VyY2UucHJvdmlkZXIoKS0+c291cmNlVVJMRGly
ZWN0aXZlKCkuaXNOdWxsKCkpCiAgICAgICAgIGZ1bmN0aW9uRXhlY3V0YWJsZS0+c2V0U291cmNl
VVJMRGlyZWN0aXZlKHNvdXJjZS5wcm92aWRlcigpLT5zb3VyY2VVUkxEaXJlY3RpdmUoKSk7CmRp
ZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9yZWdyZXNzLTIyMzUzMy5qcyBiL0pTVGVzdHMvc3Ry
ZXNzL3JlZ3Jlc3MtMjIzNTMzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMC4uMjkzN2U4N2M2ODFhCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9zdHJlc3MvcmVn
cmVzcy0yMjM1MzMuanMKQEAgLTAsMCArMSw2OCBAQAorZnVuY3Rpb24gc2hvdWxkQmUoYWN0dWFs
LCBleHBlY3RlZCkgeworICBpZiAoYWN0dWFsICE9PSBleHBlY3RlZCkKKyAgICB0aHJvdyBuZXcg
RXJyb3IoYEJhZCB2YWx1ZTogJHthY3R1YWx9IWApOworfQorCitmdW5jdGlvbiogdGVzdDEoZm9v
KSB7CisgIHNob3VsZEJlKGZvbywgMSk7CisgIHZhciBmb287CisgIHNob3VsZEJlKGZvbywgMSk7
Cit9CisKK2Z1bmN0aW9uKiB0ZXN0MiguLi5mb28pIHsKKyAgc2hvdWxkQmUoYCR7Zm9vfWAsICIy
LDIsMiIpOworICB2YXIgZm9vID0gMjsKKyAgc2hvdWxkQmUoZm9vLCAyKTsKK30KKworYXN5bmMg
ZnVuY3Rpb24gdGVzdDMoW2Zvb10pIHsKKyAgc2hvdWxkQmUoZm9vLCAzKTsKKyAgdmFyIGZvbzsK
KyAgc2hvdWxkQmUoZm9vLCAzKTsKK30KKworYXN5bmMgZnVuY3Rpb24gdGVzdDQoZm9vKSB7Cisg
IHNob3VsZEJlKGZvbywgNCk7CisgIHZhciBmb287CisgIHNob3VsZEJlKGZvbywgNCk7Cit9CisK
K2FzeW5jIGZ1bmN0aW9uKiB0ZXN0NSh7Zm9vfSkgeworICBzaG91bGRCZShmb28sIDUpOworICB2
YXIgZm9vID0gNTsKKyAgc2hvdWxkQmUoZm9vLCA1KTsKK30KKworZnVuY3Rpb24qIGhvaXN0aW5n
VGVzdDEoZm9vKSB7CisgIHNob3VsZEJlKGZvbywgMSk7CisgIHsKKyAgICBmdW5jdGlvbiBmb28o
KSB7IHJldHVybiAiaG9pc3RlZCI7IH0KKyAgfQorICBzaG91bGRCZShmb28sIDEpOworfQorCith
c3luYyBmdW5jdGlvbiogaG9pc3RpbmdUZXN0MihbZm9vXSkgeworICBzaG91bGRCZShmb28sIDIp
OworICBpZiAodHJ1ZSkgeworICAgIGZ1bmN0aW9uIGZvbygpIHsgcmV0dXJuICJob2lzdGVkIjsg
fQorICB9CisgIHNob3VsZEJlKGZvbywgMik7Cit9CisKKyhhc3luYyBmdW5jdGlvbigpIHsKKyAg
dHJ5IHsKKyAgICBmb3IgKGxldCBfIG9mIHRlc3QxKDEpKSB7fQorICAgIGZvciAobGV0IF8gb2Yg
dGVzdDIoMiwgMiwgMikpIHt9CisgICAgYXdhaXQgdGVzdDMoWzNdKTsKKyAgICBhd2FpdCB0ZXN0
NCg0KTsKKyAgICBmb3IgYXdhaXQgKGxldCBfIG9mIHRlc3Q1KHtmb286IDV9KSkge30KKworICAg
IGZvciAobGV0IF8gb2YgaG9pc3RpbmdUZXN0MSgxKSkge30KKyAgICBmb3IgYXdhaXQgKGxldCBf
IG9mIGhvaXN0aW5nVGVzdDIoWzJdKSkge30KKyAgfSBjYXRjaCAoZXJyb3IpIHsKKyAgICBwcmlu
dChgRkFJTCEgJHtlcnJvcn1cbiR7ZXJyb3Iuc3RhY2t9YCk7CisgICAgJHZtLmFib3J0KCk7Cisg
IH0KK30pKCk7CisKK2RyYWluTWljcm90YXNrcygpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>