<?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>166698</bug_id>
          
          <creation_ts>2017-01-04 14:28:30 -0800</creation_ts>
          <short_desc>[ESNext] Async iteration - Implement async iteration statement: for-await-of</short_desc>
          <delta_ts>2017-08-30 03:10:11 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Local Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>166693</blocked>
    
    <blocked>166695</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="GSkachkov">gskachkov</reporter>
          <assigned_to name="GSkachkov">gskachkov</assigned_to>
          <cc>buildbot</cc>
    
    <cc>caitp</cc>
    
    <cc>chi187</cc>
    
    <cc>commit-queue</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>ticaiolima</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1263902</commentid>
    <comment_count>0</comment_count>
    <who name="GSkachkov">gskachkov</who>
    <bug_when>2017-01-04 14:28:30 -0800</bug_when>
    <thetext>async function *foo() {...}

for await (const item of foo()) {
  debug(item);
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1342631</commentid>
    <comment_count>1</comment_count>
      <attachid>319132</attachid>
    <who name="GSkachkov">gskachkov</who>
    <bug_when>2017-08-25 23:50:05 -0700</bug_when>
    <thetext>Created attachment 319132
Patch

WiP. Patch is mostly done, working on adding more tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1342689</commentid>
    <comment_count>2</comment_count>
      <attachid>319132</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-08-26 18:29:34 -0700</bug_when>
    <thetext>Comment on attachment 319132
Patch

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

Looks good. But r- due to the bug and the test coverage.

&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:4301
&gt; +    bool isForAwait = forLoopNode != nullptr ? forLoopNode-&gt;isForAwait() : false;

style: we do not use `xxx != nullptr`.
I think this can be `bool isForAwait = forLoopNode &amp;&amp; forLoopNode-&gt;isForAwait();`

&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:4419
&gt; +            emitIteratorNext(value.get(), iterator.get(), node, isForAwait ? JSC::EmitAwait::Yes : JSC::EmitAwait::No);

JSC:: is not necessary.

&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:4432
&gt; +            emitIteratorClose(iterator.get(), node, isForAwait ? JSC::EmitAwait::Yes : JSC::EmitAwait::No);

JSC:: is not necessary.

&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:4584
&gt; +RegisterID* BytecodeGenerator::emitIteratorNext(RegisterID* dst, RegisterID* iterator, const ThrowableExpressionData* node, JSC::EmitAwait doEmitAwait)

JSC:: is not necessary.

&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h:783
&gt; +        RegisterID* emitIteratorNext(RegisterID* dst, RegisterID* iterator, const ThrowableExpressionData* node, JSC::EmitAwait = JSC::EmitAwait::No);

JSC:: is not necessary.

&gt; Source/JavaScriptCore/parser/Parser.cpp:1280
&gt; +    }

I think this accidentally allows `for await (;;)`, `for await (let v = 42;;)` etc.
If `for await` comes, only for-of style is allowed.
And could you add a syntax test to cover cases like this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1342775</commentid>
    <comment_count>3</comment_count>
    <who name="GSkachkov">gskachkov</who>
    <bug_when>2017-08-28 01:42:12 -0700</bug_when>
    <thetext>Working on fixes. Also found one more issue in my patch that for await did not support the async-from-sync i.e. `for await (let v of [1, 2, 3])`
Will be fixed in new patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1342920</commentid>
    <comment_count>4</comment_count>
      <attachid>319202</attachid>
    <who name="GSkachkov">gskachkov</who>
    <bug_when>2017-08-28 13:38:58 -0700</bug_when>
    <thetext>Created attachment 319202
Patch

Fixed comments and more tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1343016</commentid>
    <comment_count>5</comment_count>
      <attachid>319202</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-08-28 18:22:26 -0700</bug_when>
    <thetext>Comment on attachment 319202
Patch

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

Nice! I think we have several bugs.

&gt; Source/JavaScriptCore/parser/Parser.cpp:1490
&gt; +        ASSERT(!isAwaitFor);

In this `enumerationLoop:` labelled case, we do not check isAwaitFor.
This means that `for await (expr of expr);` can be parsed. (And this assertion could fail.).
Let&apos;s fix INTOKEN parsing as the same to `for await (var xxx of xxx)` case.
And could you add tests for `for await (expr of expr);` and `for await (expr in expr);` cases?

&gt; Source/JavaScriptCore/parser/Parser.h:734
&gt; +        m_isAsyncFunctionBoundary = false;

Why is this necessary? If it is necessary, is this enough? (We only set false for arrow functions. Why is this unnecessary for the other types of functions?).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1343488</commentid>
    <comment_count>6</comment_count>
      <attachid>319354</attachid>
    <who name="GSkachkov">gskachkov</who>
    <bug_when>2017-08-30 01:27:25 -0700</bug_when>
    <thetext>Created attachment 319354
Patch

Fix comments &amp;&amp; added tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1343492</commentid>
    <comment_count>7</comment_count>
      <attachid>319202</attachid>
    <who name="GSkachkov">gskachkov</who>
    <bug_when>2017-08-30 01:51:13 -0700</bug_when>
    <thetext>Comment on attachment 319202
Patch

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

&gt;&gt; Source/JavaScriptCore/parser/Parser.cpp:1490
&gt;&gt; +        ASSERT(!isAwaitFor);
&gt; 
&gt; In this `enumerationLoop:` labelled case, we do not check isAwaitFor.
&gt; This means that `for await (expr of expr);` can be parsed. (And this assertion could fail.).
&gt; Let&apos;s fix INTOKEN parsing as the same to `for await (var xxx of xxx)` case.
&gt; And could you add tests for `for await (expr of expr);` and `for await (expr in expr);` cases?

Yeah, you are right, I missed `if (!consume(INTOKEN)) {` in this part. Fixed and added test.

&gt;&gt; Source/JavaScriptCore/parser/Parser.h:734
&gt;&gt; +        m_isAsyncFunctionBoundary = false;
&gt; 
&gt; Why is this necessary? If it is necessary, is this enough? (We only set false for arrow functions. Why is this unnecessary for the other types of functions?).

There is a issue that, arrow function inherits  async  property from parent async function scope, I think it is wrong because we can&apos;t use `await` within arrow function that is declared async function.
In my patch this lead that it was allow to use for await in arrow function that is declared in async function, that is wrong and should lead to Syntax Error:
```
async function () {
     const arr = () =&gt; { for await (...) {} }
}
```</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1343496</commentid>
    <comment_count>8</comment_count>
      <attachid>319354</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-08-30 02:02:38 -0700</bug_when>
    <thetext>Comment on attachment 319354
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1343497</commentid>
    <comment_count>9</comment_count>
      <attachid>319354</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-08-30 02:51:49 -0700</bug_when>
    <thetext>Comment on attachment 319354
Patch

Clearing flags on attachment: 319354

Committed r221358: &lt;http://trac.webkit.org/changeset/221358&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1343498</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-08-30 02:51:50 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1343500</commentid>
    <comment_count>11</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-08-30 03:10:11 -0700</bug_when>
    <thetext>&lt;rdar://problem/34158241&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319132</attachid>
            <date>2017-08-25 23:50:05 -0700</date>
            <delta_ts>2017-08-28 13:38:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-166698-20170826095003.patch</filename>
            <type>text/plain</type>
            <size>17718</size>
            <attacher name="GSkachkov">gskachkov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIxMTg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA3
ODQ2MzdjZGNjMTM5MWFjN2NhYTQzNWZjNTI5YzU2YTcyYTYyNDY3Li5kYmE4ODgxZDBjYmMwNjc2
NjAyNjBlN2JjMTI2Yjg1MGRlYjdlMTlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNyBAQAorMjAxNy0wOC0yNSAgT2xla3NhbmRyIFNrYWNoa292ICA8Z3NrYWNoa292QGdt
YWlsLmNvbT4KKworICAgICAgICBbRVNOZXh0XSBBc3luYyBpdGVyYXRpb24gLSBJbXBsZW1lbnQg
YXN5bmMgaXRlcmF0aW9uIHN0YXRlbWVudDogZm9yLWF3YWl0LW9mCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY2OTgKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgZm9y
LWF3YWl0LW9mIHN0YXRlbWVudC4KKworICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdl
bmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RW51bWVy
YXRpb24pOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEl0ZXJhdG9yTmV4
dCk6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmg6CisgICAgICAg
ICogcGFyc2VyL0FTVEJ1aWxkZXIuaDoKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRl
Rm9yT2ZMb29wKToKKyAgICAgICAgKiBwYXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5oOgorICAgICAg
ICAoSlNDOjpGb3JPZk5vZGU6OkZvck9mTm9kZSk6CisgICAgICAgICogcGFyc2VyL05vZGVzLmg6
CisgICAgICAgIChKU0M6OkZvck9mTm9kZTo6aXNGb3JBd2FpdCBjb25zdCk6CisgICAgICAgICog
cGFyc2VyL1BhcnNlci5jcHA6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJz
ZUZvclN0YXRlbWVudCk6CisgICAgICAgICogcGFyc2VyL1N5bnRheENoZWNrZXIuaDoKKyAgICAg
ICAgKEpTQzo6U3ludGF4Q2hlY2tlcjo6Y3JlYXRlRm9yT2ZMb29wKToKKwogMjAxNy0wOC0yNCAg
Q29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZp
ZXdlZCwgcm9sbGluZyBvdXQgcjIyMTExOSwgcjIyMTEyNCwgYW5kIHIyMjExNDMuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9y
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuY3BwCmluZGV4IDYyYjU2MTU1NGNjMDE0YTliNjIxNjlhMWZhYmM4MmM4NWU4ZmZkMGMuLjg5
YWY3MmEyZjFjZjQ2YWFjNDRjZjQzMGY3ZDUzODcxNDk0N2JjMTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3Bw
CkBAIC00Mjk4LDExICs0Mjk4LDE0IEBAIGJvb2wgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRSZWFk
T25seUV4Y2VwdGlvbklmTmVlZGVkKGNvbnN0IFZhcmlhYmxlJiB2YXJpYWJsZSkKIAogdm9pZCBC
eXRlY29kZUdlbmVyYXRvcjo6ZW1pdEVudW1lcmF0aW9uKFRocm93YWJsZUV4cHJlc3Npb25EYXRh
KiBub2RlLCBFeHByZXNzaW9uTm9kZSogc3ViamVjdE5vZGUsIGNvbnN0IHN0ZDo6ZnVuY3Rpb248
dm9pZChCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqKT4mIGNhbGxCYWNrLCBGb3JPZk5v
ZGUqIGZvckxvb3BOb2RlLCBSZWdpc3RlcklEKiBmb3JMb29wU3ltYm9sVGFibGUpCiB7CisgICAg
Ym9vbCBpc0ZvckF3YWl0ID0gZm9yTG9vcE5vZGUgIT0gbnVsbHB0ciA/IGZvckxvb3BOb2RlLT5p
c0ZvckF3YWl0KCkgOiBmYWxzZTsKKyAgICBBU1NFUlQoIWlzRm9yQXdhaXQgfHwgKGlzRm9yQXdh
aXQgJiYgaXNBc3luY0Z1bmN0aW9uUGFyc2VNb2RlKHBhcnNlTW9kZSgpKSkpOworCiAgICAgQ29t
cGxldGlvblJlY29yZFNjb3BlIGNvbXBsZXRpb25SZWNvcmRTY29wZSgqdGhpcyk7CiAKICAgICBS
ZWZQdHI8UmVnaXN0ZXJJRD4gc3ViamVjdCA9IG5ld1RlbXBvcmFyeSgpOwogICAgIGVtaXROb2Rl
KHN1YmplY3QuZ2V0KCksIHN1YmplY3ROb2RlKTsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gaXRl
cmF0b3IgPSBlbWl0R2V0QnlJZChuZXdUZW1wb3JhcnkoKSwgc3ViamVjdC5nZXQoKSwgcHJvcGVy
dHlOYW1lcygpLml0ZXJhdG9yU3ltYm9sKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gaXRlcmF0
b3IgPSBlbWl0R2V0QnlJZChuZXdUZW1wb3JhcnkoKSwgc3ViamVjdC5nZXQoKSwgaXNGb3JBd2Fp
dCA/IHByb3BlcnR5TmFtZXMoKS5hc3luY0l0ZXJhdG9yU3ltYm9sIDogIHByb3BlcnR5TmFtZXMo
KS5pdGVyYXRvclN5bWJvbCk7CiAgICAgewogICAgICAgICBDYWxsQXJndW1lbnRzIGFyZ3MoKnRo
aXMsIG51bGxwdHIpOwogICAgICAgICBlbWl0TW92ZShhcmdzLnRoaXNSZWdpc3RlcigpLCBzdWJq
ZWN0LmdldCgpKTsKQEAgLTQzNjgsNiArNDM3MSwxMCBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0RW51bWVyYXRpb24oVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEqIG5vZGUsIEV4cHJlc3Np
bwogICAgICAgICAgICAgQ2FsbEFyZ3VtZW50cyByZXR1cm5Bcmd1bWVudHMoKnRoaXMsIG51bGxw
dHIpOwogICAgICAgICAgICAgZW1pdE1vdmUocmV0dXJuQXJndW1lbnRzLnRoaXNSZWdpc3Rlcigp
LCBpdGVyYXRvci5nZXQoKSk7CiAgICAgICAgICAgICBlbWl0Q2FsbCh2YWx1ZS5nZXQoKSwgcmV0
dXJuTWV0aG9kLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIHJldHVybkFyZ3VtZW50cywgbm9k
ZS0+ZGl2b3QoKSwgbm9kZS0+ZGl2b3RTdGFydCgpLCBub2RlLT5kaXZvdEVuZCgpLCBEZWJ1Z2dh
YmxlQ2FsbDo6Tm8pOworCisgICAgICAgICAgICBpZiAoaXNGb3JBd2FpdCkKKyAgICAgICAgICAg
ICAgICBlbWl0QXdhaXQodmFsdWUuZ2V0KCkpOworCiAgICAgICAgICAgICBlbWl0SnVtcElmVHJ1
ZShlbWl0SXNPYmplY3QobmV3VGVtcG9yYXJ5KCksIHZhbHVlLmdldCgpKSwgZmluYWxseURvbmUu
Z2V0KCkpOwogICAgICAgICAgICAgZW1pdFRocm93VHlwZUVycm9yKEFTQ0lJTGl0ZXJhbCgiSXRl
cmF0b3IgcmVzdWx0IGludGVyZmFjZSBpcyBub3QgYW4gb2JqZWN0LiIpKTsKIApAQCAtNDQwOSw3
ICs0NDE2LDggQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEVudW1lcmF0aW9uKFRocm93
YWJsZUV4cHJlc3Npb25EYXRhKiBub2RlLCBFeHByZXNzaW8KICAgICAgICAgfQogCiAgICAgICAg
IHsKLSAgICAgICAgICAgIGVtaXRJdGVyYXRvck5leHQodmFsdWUuZ2V0KCksIGl0ZXJhdG9yLmdl
dCgpLCBub2RlKTsKKyAgICAgICAgICAgIGVtaXRJdGVyYXRvck5leHQodmFsdWUuZ2V0KCksIGl0
ZXJhdG9yLmdldCgpLCBub2RlLCBpc0ZvckF3YWl0ID8gSlNDOjpFbWl0QXdhaXQ6OlllcyA6IEpT
Qzo6RW1pdEF3YWl0OjpObyk7CisKICAgICAgICAgICAgIGVtaXRKdW1wSWZUcnVlKGVtaXRHZXRC
eUlkKG5ld1RlbXBvcmFyeSgpLCB2YWx1ZS5nZXQoKSwgcHJvcGVydHlOYW1lcygpLmRvbmUpLCBs
b29wRG9uZS5nZXQoKSk7CiAgICAgICAgICAgICBlbWl0R2V0QnlJZCh2YWx1ZS5nZXQoKSwgdmFs
dWUuZ2V0KCksIHByb3BlcnR5TmFtZXMoKS52YWx1ZSk7CiAgICAgICAgICAgICBlbWl0SnVtcChs
b29wU3RhcnQuZ2V0KCkpOwpAQCAtNDQyMSw3ICs0NDI5LDcgQEAgdm9pZCBCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdEVudW1lcmF0aW9uKFRocm93YWJsZUV4cHJlc3Npb25EYXRhKiBub2RlLCBFeHBy
ZXNzaW8KICAgICAgICAgcG9wRmluYWxseUNvbnRyb2xGbG93U2NvcGUoKTsKICAgICAgICAgaWYg
KGJyZWFrTGFiZWxJc0JvdW5kKSB7CiAgICAgICAgICAgICAvLyBJdGVyYXRvckNsb3NlIHNlcXVl
bmNlIGZvciBicmVhay1lZCBjb250cm9sIGZsb3cuCi0gICAgICAgICAgICBlbWl0SXRlcmF0b3JD
bG9zZShpdGVyYXRvci5nZXQoKSwgbm9kZSk7CisgICAgICAgICAgICBlbWl0SXRlcmF0b3JDbG9z
ZShpdGVyYXRvci5nZXQoKSwgbm9kZSwgaXNGb3JBd2FpdCA/IEpTQzo6RW1pdEF3YWl0OjpZZXMg
OiBKU0M6OkVtaXRBd2FpdDo6Tm8pOwogICAgICAgICB9CiAgICAgfQogICAgIGVtaXRMYWJlbChs
b29wRG9uZS5nZXQoKSk7CkBAIC00NTczLDEzICs0NTgxLDE2IEBAIFJlZ2lzdGVySUQqIEJ5dGVj
b2RlR2VuZXJhdG9yOjplbWl0SXNFbXB0eShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNy
YykKICAgICByZXR1cm4gZHN0OwogfQogICAgIAotUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0
b3I6OmVtaXRJdGVyYXRvck5leHQoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBpdGVyYXRv
ciwgY29uc3QgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEqIG5vZGUpCitSZWdpc3RlcklEKiBCeXRl
Y29kZUdlbmVyYXRvcjo6ZW1pdEl0ZXJhdG9yTmV4dChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVy
SUQqIGl0ZXJhdG9yLCBjb25zdCBUaHJvd2FibGVFeHByZXNzaW9uRGF0YSogbm9kZSwgSlNDOjpF
bWl0QXdhaXQgZG9FbWl0QXdhaXQpCiB7CiAgICAgewogICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJ
RD4gbmV4dCA9IGVtaXRHZXRCeUlkKG5ld1RlbXBvcmFyeSgpLCBpdGVyYXRvciwgcHJvcGVydHlO
YW1lcygpLm5leHQpOwogICAgICAgICBDYWxsQXJndW1lbnRzIG5leHRBcmd1bWVudHMoKnRoaXMs
IG51bGxwdHIpOwogICAgICAgICBlbWl0TW92ZShuZXh0QXJndW1lbnRzLnRoaXNSZWdpc3Rlcigp
LCBpdGVyYXRvcik7CiAgICAgICAgIGVtaXRDYWxsKGRzdCwgbmV4dC5nZXQoKSwgTm9FeHBlY3Rl
ZEZ1bmN0aW9uLCBuZXh0QXJndW1lbnRzLCBub2RlLT5kaXZvdCgpLCBub2RlLT5kaXZvdFN0YXJ0
KCksIG5vZGUtPmRpdm90RW5kKCksIERlYnVnZ2FibGVDYWxsOjpObyk7CisKKyAgICAgICAgaWYg
KGRvRW1pdEF3YWl0ID09IEVtaXRBd2FpdDo6WWVzKQorICAgICAgICAgICAgZW1pdEF3YWl0KGRz
dCk7CiAgICAgfQogICAgIHsKICAgICAgICAgUmVmPExhYmVsPiB0eXBlSXNPYmplY3QgPSBuZXdM
YWJlbCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5oCmluZGV4IDE3ZjY1ZmU5YzljODc2OTFmZDlhYTQ4ZDM3MmZkMWU5
YzMyNWY0MWEuLjNkN2JmZWI5ODkzMWIyZTQ4OGIxNjZmNDc1YjExZWM0NGI4ZmM2OTEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmgKQEAgLTc4MCw3ICs3ODAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgUmVn
aXN0ZXJJRCogZW1pdElzRGVyaXZlZEFycmF5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCog
c3JjKSB7IHJldHVybiBlbWl0SXNDZWxsV2l0aFR5cGUoZHN0LCBzcmMsIERlcml2ZWRBcnJheVR5
cGUpOyB9CiAgICAgICAgIHZvaWQgZW1pdFJlcXVpcmVPYmplY3RDb2VyY2libGUoUmVnaXN0ZXJJ
RCogdmFsdWUsIGNvbnN0IFN0cmluZyYgZXJyb3IpOwogCi0gICAgICAgIFJlZ2lzdGVySUQqIGVt
aXRJdGVyYXRvck5leHQoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBpdGVyYXRvciwgY29u
c3QgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEqIG5vZGUpOworICAgICAgICBSZWdpc3RlcklEKiBl
bWl0SXRlcmF0b3JOZXh0KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogaXRlcmF0b3IsIGNv
bnN0IFRocm93YWJsZUV4cHJlc3Npb25EYXRhKiBub2RlLCBKU0M6OkVtaXRBd2FpdCA9IEpTQzo6
RW1pdEF3YWl0OjpObyk7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJdGVyYXRvck5leHRXaXRo
VmFsdWUoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBpdGVyYXRvciwgUmVnaXN0ZXJJRCog
dmFsdWUsIGNvbnN0IFRocm93YWJsZUV4cHJlc3Npb25EYXRhKiBub2RlKTsKICAgICAgICAgdm9p
ZCBlbWl0SXRlcmF0b3JDbG9zZShSZWdpc3RlcklEKiBpdGVyYXRvciwgY29uc3QgVGhyb3dhYmxl
RXhwcmVzc2lvbkRhdGEqIG5vZGUsIEVtaXRBd2FpdCA9IEVtaXRBd2FpdDo6Tm8pOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FTVEJ1aWxkZXIuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oCmluZGV4IDU5ZWZhZWZmZDU5YTNl
MmIxYzEzZDczM2U5MTIzZmE3ZjE3MTg0NjAuLmIyMGRhMThlMTU3NDJjZmI4YTg1ZGM3ODVhNjMw
YTc2NGExYWY3ODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNU
QnVpbGRlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5o
CkBAIC02MDIsMTggKzYwMiwxOCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBjcmVhdGVGb3JJ
bkxvb3AobG9jYXRpb24sIGxleHByLCBpdGVyLCBzdGF0ZW1lbnRzLCBkZWNsTG9jYXRpb24sIGVT
dGFydCwgZURpdm90LCBlRW5kLCBzdGFydCwgZW5kLCBsZXhpY2FsVmFyaWFibGVzKTsKICAgICB9
CiAgICAgCi0gICAgU3RhdGVtZW50Tm9kZSogY3JlYXRlRm9yT2ZMb29wKGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBsaHMsIEV4cHJlc3Npb25Ob2RlKiBp
dGVyLCBTdGF0ZW1lbnROb2RlKiBzdGF0ZW1lbnRzLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBj
b25zdCBKU1RleHRQb3NpdGlvbiYgZVN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZURpdm90
LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZUVuZCwgaW50IHN0YXJ0LCBpbnQgZW5kLCBWYXJpYWJs
ZUVudmlyb25tZW50JiBsZXhpY2FsVmFyaWFibGVzKQorICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0
ZUZvck9mTG9vcChib29sIGlzRm9yQXdhaXQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRp
b24sIEV4cHJlc3Npb25Ob2RlKiBsaHMsIEV4cHJlc3Npb25Ob2RlKiBpdGVyLCBTdGF0ZW1lbnRO
b2RlKiBzdGF0ZW1lbnRzLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBKU1RleHRQb3Np
dGlvbiYgZVN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZURpdm90LCBjb25zdCBKU1RleHRQ
b3NpdGlvbiYgZUVuZCwgaW50IHN0YXJ0LCBpbnQgZW5kLCBWYXJpYWJsZUVudmlyb25tZW50JiBs
ZXhpY2FsVmFyaWFibGVzKQogICAgIHsKLSAgICAgICAgRm9yT2ZOb2RlKiByZXN1bHQgPSBuZXcg
KG1fcGFyc2VyQXJlbmEpIEZvck9mTm9kZShsb2NhdGlvbiwgbGhzLCBpdGVyLCBzdGF0ZW1lbnRz
LCBsZXhpY2FsVmFyaWFibGVzKTsKKyAgICAgICAgRm9yT2ZOb2RlKiByZXN1bHQgPSBuZXcgKG1f
cGFyc2VyQXJlbmEpIEZvck9mTm9kZShpc0ZvckF3YWl0LCBsb2NhdGlvbiwgbGhzLCBpdGVyLCBz
dGF0ZW1lbnRzLCBsZXhpY2FsVmFyaWFibGVzKTsKICAgICAgICAgcmVzdWx0LT5zZXRMb2Moc3Rh
cnQsIGVuZCwgbG9jYXRpb24uc3RhcnRPZmZzZXQsIGxvY2F0aW9uLmxpbmVTdGFydE9mZnNldCk7
CiAgICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0aW9uKHJlc3VsdCwgZVN0YXJ0LCBlRGl2b3QsIGVF
bmQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKLSAgICBTdGF0ZW1lbnRO
b2RlKiBjcmVhdGVGb3JPZkxvb3AoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRGVz
dHJ1Y3R1cmluZ1BhdHRlcm5Ob2RlKiBwYXR0ZXJuLCBFeHByZXNzaW9uTm9kZSogaXRlciwgU3Rh
dGVtZW50Tm9kZSogc3RhdGVtZW50cywgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBkZWNsTG9jYXRp
b24sIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBlU3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBl
RGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBlRW5kLCBpbnQgc3RhcnQsIGludCBlbmQsIFZh
cmlhYmxlRW52aXJvbm1lbnQmIGxleGljYWxWYXJpYWJsZXMpCisgICAgU3RhdGVtZW50Tm9kZSog
Y3JlYXRlRm9yT2ZMb29wKGJvb2wgaXNGb3JBd2FpdCwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBs
b2NhdGlvbiwgRGVzdHJ1Y3R1cmluZ1BhdHRlcm5Ob2RlKiBwYXR0ZXJuLCBFeHByZXNzaW9uTm9k
ZSogaXRlciwgU3RhdGVtZW50Tm9kZSogc3RhdGVtZW50cywgY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiBkZWNsTG9jYXRpb24sIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBlU3RhcnQsIGNvbnN0IEpTVGV4
dFBvc2l0aW9uJiBlRGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBlRW5kLCBpbnQgc3RhcnQs
IGludCBlbmQsIFZhcmlhYmxlRW52aXJvbm1lbnQmIGxleGljYWxWYXJpYWJsZXMpCiAgICAgewog
ICAgICAgICBhdXRvIGxleHByID0gbmV3IChtX3BhcnNlckFyZW5hKSBEZXN0cnVjdHVyaW5nQXNz
aWdubWVudE5vZGUoZGVjbExvY2F0aW9uLCBwYXR0ZXJuLCBudWxscHRyKTsKLSAgICAgICAgcmV0
dXJuIGNyZWF0ZUZvck9mTG9vcChsb2NhdGlvbiwgbGV4cHIsIGl0ZXIsIHN0YXRlbWVudHMsIGRl
Y2xMb2NhdGlvbiwgZVN0YXJ0LCBlRGl2b3QsIGVFbmQsIHN0YXJ0LCBlbmQsIGxleGljYWxWYXJp
YWJsZXMpOworICAgICAgICByZXR1cm4gY3JlYXRlRm9yT2ZMb29wKGlzRm9yQXdhaXQsIGxvY2F0
aW9uLCBsZXhwciwgaXRlciwgc3RhdGVtZW50cywgZGVjbExvY2F0aW9uLCBlU3RhcnQsIGVEaXZv
dCwgZUVuZCwgc3RhcnQsIGVuZCwgbGV4aWNhbFZhcmlhYmxlcyk7CiAgICAgfQogCiAgICAgYm9v
bCBpc0JpbmRpbmdOb2RlKGNvbnN0IERlc3RydWN0dXJpbmdQYXR0ZXJuJiBwYXR0ZXJuKQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaAppbmRleCBi
MGJhZGZjOTg2ODQxMzUwYzFlZDQwOTI1NDQwNjU1ZDk3ZWU5MzVlLi4zNzY5Yzk1OWMwZTNiMDk0
YmY1ZTI5NmQ4ZmQ0MGI1M2M0YTA2NjhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaApAQCAtMTA0MCw4ICsxMDQwLDkgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgewogICAgIH0KICAgICAKLSAgICBpbmxpbmUgRm9yT2ZOb2RlOjpGb3JPZk5v
ZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGxleHBy
LCBFeHByZXNzaW9uTm9kZSogZXhwciwgU3RhdGVtZW50Tm9kZSogc3RhdGVtZW50LCBWYXJpYWJs
ZUVudmlyb25tZW50JiBsZXhpY2FsVmFyaWFibGVzKQorICAgIGlubGluZSBGb3JPZk5vZGU6OkZv
ck9mTm9kZShib29sIGlzRm9yQXdhaXQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24s
IEV4cHJlc3Npb25Ob2RlKiBsZXhwciwgRXhwcmVzc2lvbk5vZGUqIGV4cHIsIFN0YXRlbWVudE5v
ZGUqIHN0YXRlbWVudCwgVmFyaWFibGVFbnZpcm9ubWVudCYgbGV4aWNhbFZhcmlhYmxlcykKICAg
ICAgICAgOiBFbnVtZXJhdGlvbk5vZGUobG9jYXRpb24sIGxleHByLCBleHByLCBzdGF0ZW1lbnQs
IGxleGljYWxWYXJpYWJsZXMpCisgICAgICAgICwgbV9pc0ZvckF3YWl0KGlzRm9yQXdhaXQpCiAg
ICAgewogICAgIH0KICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvTm9kZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAppbmRleCA2
ZjE3MzgyOGIzODEyMTgyMTNkYWFhZDMyYzNiZWExNGMyNTkwMjE0Li5hNTNhNjlmMmY4YzlmYzVi
YzY2MTBkY2EyZTQ5MjRiNzRiNTU3ZmUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL05vZGVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rl
cy5oCkBAIC0xNTIzLDExICsxNTIzLDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIAogICAgIGNs
YXNzIEZvck9mTm9kZSA6IHB1YmxpYyBFbnVtZXJhdGlvbk5vZGUgewogICAgIHB1YmxpYzoKLSAg
ICAgICAgRm9yT2ZOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiwg
RXhwcmVzc2lvbk5vZGUqLCBTdGF0ZW1lbnROb2RlKiwgVmFyaWFibGVFbnZpcm9ubWVudCYpOwor
ICAgICAgICBGb3JPZk5vZGUoYm9vbCwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lv
bk5vZGUqLCBFeHByZXNzaW9uTm9kZSosIFN0YXRlbWVudE5vZGUqLCBWYXJpYWJsZUVudmlyb25t
ZW50Jik7CiAgICAgICAgIGJvb2wgaXNGb3JPZk5vZGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biB0cnVlOyB9CisgICAgICAgIGJvb2wgaXNGb3JBd2FpdCgpIGNvbnN0IHsgcmV0dXJuIG1faXNG
b3JBd2FpdDsgfQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBlbWl0Qnl0ZWNvZGUoQnl0
ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIG92ZXJyaWRlOworCisgICAgICAgIGNv
bnN0IGJvb2wgbV9pc0ZvckF3YWl0OwogICAgIH07CiAKICAgICBjbGFzcyBDb250aW51ZU5vZGUg
OiBwdWJsaWMgU3RhdGVtZW50Tm9kZSwgcHVibGljIFRocm93YWJsZUV4cHJlc3Npb25EYXRhIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAppbmRleCBlNzQ4YzU0MGQ0Y2M4
NDdkZTk2MGRmY2U2OTZkNzFlZmIwMzBhOWJkLi5kYTY2NTNjNzgzZmQ4NGZhZjk5ZjEyYzEwMzdi
YjJiODk4MWY1NTg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1Bh
cnNlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCkBA
IC0xMjY3LDExICsxMjY3LDE4IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0
YXRlbWVudCBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VGb3JTdGF0ZW1lbnQoCiAgICAgQVNTRVJU
KG1hdGNoKEZPUikpOwogICAgIEpTVG9rZW5Mb2NhdGlvbiBsb2NhdGlvbih0b2tlbkxvY2F0aW9u
KCkpOwogICAgIGludCBzdGFydExpbmUgPSB0b2tlbkxpbmUoKTsKKyAgICBib29sIGlzQXdhaXRG
b3IgPSBmYWxzZTsKICAgICBuZXh0KCk7CiAKICAgICBEZXB0aE1hbmFnZXIgc3RhdGVtZW50RGVw
dGgoJm1fc3RhdGVtZW50RGVwdGgpOwogICAgIG1fc3RhdGVtZW50RGVwdGgrKzsKIAorICAgIGlm
IChPcHRpb25zOjp1c2VBc3luY0l0ZXJhdG9yKCkgJiYgbWF0Y2goQVdBSVQpKSB7CisgICAgICAg
IGZhaWxJZkZhbHNlKG1fcGFyc2VyU3RhdGUuYWxsb3dBd2FpdCwgImZvci1hd2FpdC1vZiBjYW4n
dCBiZSB1c2VkIG9ubHkgaW4gYXN5bmMgZnVuY3Rpb24gb3IgYXN5bmMgZ2VuZXJhdG9yLiIpOwor
ICAgICAgICBpc0F3YWl0Rm9yID0gdHJ1ZTsKKyAgICAgICAgbmV4dCgpOworICAgIH0KKwogICAg
IGhhbmRsZVByb2R1Y3Rpb25PckZhaWwoT1BFTlBBUkVOLCAiKCIsICJzdGFydCIsICJmb3ItbG9v
cCBoZWFkZXIiKTsKICAgICBpbnQgbm9uTEhTQ291bnQgPSBtX3BhcnNlclN0YXRlLm5vbkxIU0Nv
dW50OwogICAgIGludCBkZWNsYXJhdGlvbnMgPSAwOwpAQCAtMTM0MSwxMSArMTM0OCwxNSBAQCB0
ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgUGFyc2VyPExleGVyVHlw
ZT46OnBhcnNlRm9yU3RhdGVtZW50KAogICAgICAgICAvLyBIYW5kbGUgZm9yLWluIHdpdGggdmFy
IGRlY2xhcmF0aW9uCiAgICAgICAgIEpTVGV4dFBvc2l0aW9uIGluTG9jYXRpb24gPSB0b2tlblN0
YXJ0UG9zaXRpb24oKTsKICAgICAgICAgYm9vbCBpc09mRW51bWVyYXRpb24gPSBmYWxzZTsKLSAg
ICAgICAgaWYgKCFjb25zdW1lKElOVE9LRU4pKSB7CisgICAgICAgIGlmICghbWF0Y2goSU5UT0tF
TikpIHsKICAgICAgICAgICAgIGZhaWxJZkZhbHNlKG1hdGNoKElERU5UKSAmJiAqbV90b2tlbi5t
X2RhdGEuaWRlbnQgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+b2YsICJFeHBlY3RlZCBlaXRoZXIg
J2luJyBvciAnb2YnIGluIGVudW1lcmF0aW9uIHN5bnRheCIpOwogICAgICAgICAgICAgaXNPZkVu
dW1lcmF0aW9uID0gdHJ1ZTsKICAgICAgICAgICAgIG5leHQoKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIGZhaWxJZkZhbHNlKCFpc0F3YWl0Rm9yLCAiRXhwZWN0ZWQgJ29mJyBpbiBm
b3ItYXdhaXQgc3ludGF4Iik7CisgICAgICAgICAgICBuZXh0KCk7CiAgICAgICAgIH0KKwogICAg
ICAgICBib29sIGhhc0FueUFzc2lnbm1lbnRzID0gISFmb3JJbkluaXRpYWxpemVyOwogICAgICAg
ICBpZiAoaGFzQW55QXNzaWdubWVudHMpIHsKICAgICAgICAgICAgIGlmIChpc09mRW51bWVyYXRp
b24pCkBAIC0xMzcwLDggKzEzODEsOSBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRy
ZWVTdGF0ZW1lbnQgUGFyc2VyPExleGVyVHlwZT46OnBhcnNlRm9yU3RhdGVtZW50KAogICAgICAg
ICBnYXRoZXJMZXhpY2FsVmFyaWFibGVzSWZOZWNlc3NhcnkoKTsKICAgICAgICAgVHJlZVN0YXRl
bWVudCByZXN1bHQ7CiAgICAgICAgIGlmIChpc09mRW51bWVyYXRpb24pCi0gICAgICAgICAgICBy
ZXN1bHQgPSBjb250ZXh0LmNyZWF0ZUZvck9mTG9vcChsb2NhdGlvbiwgZm9ySW5UYXJnZXQsIGV4
cHIsIHN0YXRlbWVudCwgZGVjbExvY2F0aW9uLCBkZWNsc1N0YXJ0LCBpbkxvY2F0aW9uLCBleHBy
RW5kLCBzdGFydExpbmUsIGVuZExpbmUsICpsZXhpY2FsVmFyaWFibGVzKTsKKyAgICAgICAgICAg
IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlRm9yT2ZMb29wKGlzQXdhaXRGb3IsIGxvY2F0aW9uLCBm
b3JJblRhcmdldCwgZXhwciwgc3RhdGVtZW50LCBkZWNsTG9jYXRpb24sIGRlY2xzU3RhcnQsIGlu
TG9jYXRpb24sIGV4cHJFbmQsIHN0YXJ0TGluZSwgZW5kTGluZSwgKmxleGljYWxWYXJpYWJsZXMp
OwogICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVCghaXNBd2FpdEZvcik7CiAgICAg
ICAgICAgICBpZiAoaXNWYXJEZWNsYXJhdG9uICYmIGZvckluSW5pdGlhbGl6ZXIpCiAgICAgICAg
ICAgICAgICAgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVGb3JJbkxvb3AobG9jYXRpb24sIGRlY2xz
LCBleHByLCBzdGF0ZW1lbnQsIGRlY2xMb2NhdGlvbiwgZGVjbHNTdGFydCwgaW5Mb2NhdGlvbiwg
ZXhwckVuZCwgc3RhcnRMaW5lLCBlbmRMaW5lLCAqbGV4aWNhbFZhcmlhYmxlcyk7CiAgICAgICAg
ICAgICBlbHNlCkBAIC0xNDYyLDE3ICsxNDc0LDIxIEBAIGVudW1lcmF0aW9uTG9vcDoKICAgICBp
ZiAocGF0dGVybikgewogICAgICAgICBBU1NFUlQoIWRlY2xzKTsKICAgICAgICAgaWYgKGlzT2ZF
bnVtZXJhdGlvbikKLSAgICAgICAgICAgIHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlRm9yT2ZMb29w
KGxvY2F0aW9uLCBwYXR0ZXJuLCBleHByLCBzdGF0ZW1lbnQsIGRlY2xMb2NhdGlvbiwgZGVjbHNT
dGFydCwgZGVjbHNFbmQsIGV4cHJFbmQsIHN0YXJ0TGluZSwgZW5kTGluZSwgKmxleGljYWxWYXJp
YWJsZXMpOwotICAgICAgICBlbHNlIAorICAgICAgICAgICAgcmVzdWx0ID0gY29udGV4dC5jcmVh
dGVGb3JPZkxvb3AoaXNBd2FpdEZvciwgbG9jYXRpb24sIHBhdHRlcm4sIGV4cHIsIHN0YXRlbWVu
dCwgZGVjbExvY2F0aW9uLCBkZWNsc1N0YXJ0LCBkZWNsc0VuZCwgZXhwckVuZCwgc3RhcnRMaW5l
LCBlbmRMaW5lLCAqbGV4aWNhbFZhcmlhYmxlcyk7CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgQVNTRVJUKCFpc0F3YWl0Rm9yKTsKICAgICAgICAgICAgIHJlc3VsdCA9IGNvbnRleHQuY3Jl
YXRlRm9ySW5Mb29wKGxvY2F0aW9uLCBwYXR0ZXJuLCBleHByLCBzdGF0ZW1lbnQsIGRlY2xMb2Nh
dGlvbiwgZGVjbHNTdGFydCwgZGVjbHNFbmQsIGV4cHJFbmQsIHN0YXJ0TGluZSwgZW5kTGluZSwg
KmxleGljYWxWYXJpYWJsZXMpOworICAgICAgICB9CiAKICAgICAgICAgcG9wTGV4aWNhbFNjb3Bl
SWZOZWNlc3NhcnkoKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgaWYgKGlz
T2ZFbnVtZXJhdGlvbikKLSAgICAgICAgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVGb3JPZkxvb3Ao
bG9jYXRpb24sIGRlY2xzLCBleHByLCBzdGF0ZW1lbnQsIGRlY2xMb2NhdGlvbiwgZGVjbHNTdGFy
dCwgZGVjbHNFbmQsIGV4cHJFbmQsIHN0YXJ0TGluZSwgZW5kTGluZSwgKmxleGljYWxWYXJpYWJs
ZXMpOwotICAgIGVsc2UKKyAgICAgICAgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVGb3JPZkxvb3Ao
aXNBd2FpdEZvciwgbG9jYXRpb24sIGRlY2xzLCBleHByLCBzdGF0ZW1lbnQsIGRlY2xMb2NhdGlv
biwgZGVjbHNTdGFydCwgZGVjbHNFbmQsIGV4cHJFbmQsIHN0YXJ0TGluZSwgZW5kTGluZSwgKmxl
eGljYWxWYXJpYWJsZXMpOworICAgIGVsc2UgeworICAgICAgICBBU1NFUlQoIWlzQXdhaXRGb3Ip
OwogICAgICAgICByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZUZvckluTG9vcChsb2NhdGlvbiwgZGVj
bHMsIGV4cHIsIHN0YXRlbWVudCwgZGVjbExvY2F0aW9uLCBkZWNsc1N0YXJ0LCBkZWNsc0VuZCwg
ZXhwckVuZCwgc3RhcnRMaW5lLCBlbmRMaW5lLCAqbGV4aWNhbFZhcmlhYmxlcyk7CisgICAgfQog
ICAgIHBvcExleGljYWxTY29wZUlmTmVjZXNzYXJ5KCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU3ludGF4Q2hlY2tlci5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9TeW50YXhDaGVja2VyLmgKaW5kZXggOTQx
ZGZkZTYxMmYxYmI1NWQ3YWViZDJjMDZjMzAxMTNiODUzMDdhYy4uOWI1NDk2MzgxZjViNmU1NWEz
ZGY2NmZhZmJkYmE0NTViMDRjMzZiOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9TeW50YXhDaGVja2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9TeW50YXhDaGVja2VyLmgKQEAgLTI0Niw3ICsyNDYsNyBAQCBwdWJsaWM6CiAgICAgaW50IGNy
ZWF0ZUlmU3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwgaW50LCBpbnQsIGlu
dCwgaW50KSB7IHJldHVybiBTdGF0ZW1lbnRSZXN1bHQ7IH0KICAgICBpbnQgY3JlYXRlRm9yTG9v
cChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBW
YXJpYWJsZUVudmlyb25tZW50JikgeyByZXR1cm4gU3RhdGVtZW50UmVzdWx0OyB9CiAgICAgaW50
IGNyZWF0ZUZvckluTG9vcChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBpbnQsIGludCwgaW50LCBj
b25zdCBKU1Rva2VuTG9jYXRpb24mLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgVmFyaWFibGVF
bnZpcm9ubWVudCYpIHsgcmV0dXJuIFN0YXRlbWVudFJlc3VsdDsgfQotICAgIGludCBjcmVhdGVG
b3JPZkxvb3AoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBpbnQsIGludCwgY29uc3QgSlNU
b2tlbkxvY2F0aW9uJiwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIFZhcmlhYmxlRW52aXJvbm1l
bnQmKSB7IHJldHVybiBTdGF0ZW1lbnRSZXN1bHQ7IH0KKyAgICBpbnQgY3JlYXRlRm9yT2ZMb29w
KGJvb2wsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwgaW50LCBpbnQsIGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBWYXJpYWJsZUVudmlyb25tZW50
JikgeyByZXR1cm4gU3RhdGVtZW50UmVzdWx0OyB9CiAgICAgaW50IGNyZWF0ZUVtcHR5U3RhdGVt
ZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYpIHsgcmV0dXJuIFN0YXRlbWVudFJlc3VsdDsgfQog
ICAgIGludCBjcmVhdGVEZWNsYXJhdGlvblN0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24m
LCBpbnQsIGludCwgaW50KSB7IHJldHVybiBTdGF0ZW1lbnRSZXN1bHQ7IH0KICAgICBpbnQgY3Jl
YXRlUmV0dXJuU3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwgaW50LCBpbnQp
IHsgcmV0dXJuIFN0YXRlbWVudFJlc3VsdDsgfQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9DaGFuZ2VM
b2cgYi9KU1Rlc3RzL0NoYW5nZUxvZwppbmRleCA4ODIyNmFjMGRlNTc1YjFiOGZkNWU0ZmVjZGYy
NDBiOGIyMDIwODk5Li5kMzU3NTI3YzIyNmY3MDMxNTQxY2YxZDI1NjgxNDBkMjRiOWVmYmE1IDEw
MDY0NAotLS0gYS9KU1Rlc3RzL0NoYW5nZUxvZworKysgYi9KU1Rlc3RzL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDE1IEBACisyMDE3LTA4LTI1ICBPbGVrc2FuZHIgU2thY2hrb3YgIDxnc2thY2hrb3ZA
Z21haWwuY29tPgorCisgICAgICAgIFtFU05leHRdIEFzeW5jIGl0ZXJhdGlvbiAtIEltcGxlbWVu
dCBhc3luYyBpdGVyYXRpb24gc3RhdGVtZW50OiBmb3ItYXdhaXQtb2YKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjY5OAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3RyZXNzL2FzeW5jLWl0ZXJhdGlv
bi1mb3ItYXdhaXQuanM6IEFkZGVkLgorICAgICAgICAoYXNzZXJ0KToKKyAgICAgICAgKGFzeW5j
LmZvbyk6CisgICAgICAgIChhc3luYy5ib28pOgorCiAyMDE3LTA4LTI0ICBDb21taXQgUXVldWUg
IDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5n
IG91dCByMjIxMTE5LCByMjIxMTI0LCBhbmQgcjIyMTE0My4KZGlmZiAtLWdpdCBhL0pTVGVzdHMv
c3RyZXNzL2FzeW5jLWl0ZXJhdGlvbi1mb3ItYXdhaXQuanMgYi9KU1Rlc3RzL3N0cmVzcy9hc3lu
Yy1pdGVyYXRpb24tZm9yLWF3YWl0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYyYzUyZGY0YWI2OWJjMjc2YWUx
MWE4MGYwNzhkMGViYTBmM2I2ODMKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3N0cmVzcy9h
c3luYy1pdGVyYXRpb24tZm9yLWF3YWl0LmpzCkBAIC0wLDAgKzEsMTkgQEAKK3ZhciBhc3NlcnQg
PSBmdW5jdGlvbiAocmVzdWx0LCBleHBlY3RlZCwgbWVzc2FnZSA9ICIiKSB7CisgIGlmIChyZXN1
bHQgIT09IGV4cGVjdGVkKSB7CisgICAgdGhyb3cgbmV3IEVycm9yKCdFcnJvciBpbiBhc3NlcnQu
IEV4cGVjdGVkICInICsgZXhwZWN0ZWQgKyAnIiBidXQgd2FzICInICsgcmVzdWx0ICsgJyI6JyAr
IG1lc3NhZ2UgKTsKKyAgfQorfTsKK3ZhciByZXN1bHQgPSAwOworYXN5bmMgZnVuY3Rpb24gKiBm
b28oKSB7IHlpZWxkIDE7IHlpZWxkIFByb21pc2UucmVzb2x2ZSgyKTsgcmV0dXJuIDM7fTsKKwor
YXN5bmMgZnVuY3Rpb24gYm9vICgpIHsKKyAgICBmb3IgYXdhaXQgKGNvbnN0IHZhbHVlIG9mIGZv
bygpKSB7CisgICAgICAgIHJlc3VsdCA9IHJlc3VsdCArIHZhbHVlOworICAgIH0KK30KKworYm9v
KCk7CisKK2RyYWluTWljcm90YXNrcygpOworCithc3NlcnQocmVzdWx0LCAzKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319202</attachid>
            <date>2017-08-28 13:38:58 -0700</date>
            <delta_ts>2017-08-30 01:27:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-166698-20170828233856.patch</filename>
            <type>text/plain</type>
            <size>31047</size>
            <attacher name="GSkachkov">gskachkov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIxMTg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA3
ODQ2MzdjZGNjMTM5MWFjN2NhYTQzNWZjNTI5YzU2YTcyYTYyNDY3Li5hNTU4Y2IwNDY3ZmU1NjU0
Y2M1MmQ2OTY3NDJlNjk4NGE4MDZlNzk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyOSBAQAorMjAxNy0wOC0yOCAgT2xla3NhbmRyIFNrYWNoa292ICA8Z3NrYWNoa292QGdt
YWlsLmNvbT4KKworICAgICAgICBbRVNOZXh0XSBBc3luYyBpdGVyYXRpb24gLSBJbXBsZW1lbnQg
YXN5bmMgaXRlcmF0aW9uIHN0YXRlbWVudDogZm9yLWF3YWl0LW9mCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY2OTgKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgZm9y
LWF3YWl0LW9mIHN0YXRlbWVudC4KKworICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdl
bmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RW51bWVy
YXRpb24pOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEl0ZXJhdG9yTmV4
dCk6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmg6CisgICAgICAg
ICogcGFyc2VyL0FTVEJ1aWxkZXIuaDoKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRl
Rm9yT2ZMb29wKToKKyAgICAgICAgKiBwYXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5oOgorICAgICAg
ICAoSlNDOjpGb3JPZk5vZGU6OkZvck9mTm9kZSk6CisgICAgICAgICogcGFyc2VyL05vZGVzLmg6
CisgICAgICAgIChKU0M6OkZvck9mTm9kZTo6aXNGb3JBd2FpdCBjb25zdCk6CisgICAgICAgICog
cGFyc2VyL1BhcnNlci5jcHA6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJz
ZUZvclN0YXRlbWVudCk6CisgICAgICAgICogcGFyc2VyL1BhcnNlci5oOgorICAgICAgICAoSlND
OjpTY29wZTo6c2V0SXNBcnJvd0Z1bmN0aW9uKToKKyAgICAgICAgKiBwYXJzZXIvU3ludGF4Q2hl
Y2tlci5oOgorICAgICAgICAoSlNDOjpTeW50YXhDaGVja2VyOjpjcmVhdGVGb3JPZkxvb3ApOgor
CiAyMDE3LTA4LTI0ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAog
ICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMjIxMTE5LCByMjIxMTI0LCBhbmQgcjIy
MTE0My4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0
ZWNvZGVHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5jcHAKaW5kZXggNjJiNTYxNTU0Y2MwMTRhOWI2MjE2OWExZmFiYzgy
Yzg1ZThmZmQwYy4uZDQ1NWRiZGIzZWYzNzQwMDIwN2QyOGI4ZGQ2ZGMzODI2YWY1YzExZCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVy
YXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29k
ZUdlbmVyYXRvci5jcHAKQEAgLTQyOTgsMTYgKzQyOTgsMTUgQEAgYm9vbCBCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdFJlYWRPbmx5RXhjZXB0aW9uSWZOZWVkZWQoY29uc3QgVmFyaWFibGUmIHZhcmlh
YmxlKQogCiB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RW51bWVyYXRpb24oVGhyb3dhYmxl
RXhwcmVzc2lvbkRhdGEqIG5vZGUsIEV4cHJlc3Npb25Ob2RlKiBzdWJqZWN0Tm9kZSwgY29uc3Qg
c3RkOjpmdW5jdGlvbjx2b2lkKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCopPiYgY2Fs
bEJhY2ssIEZvck9mTm9kZSogZm9yTG9vcE5vZGUsIFJlZ2lzdGVySUQqIGZvckxvb3BTeW1ib2xU
YWJsZSkKIHsKKyAgICBib29sIGlzRm9yQXdhaXQgPSBmb3JMb29wTm9kZSA/IGZvckxvb3BOb2Rl
LT5pc0ZvckF3YWl0KCkgOiBmYWxzZTsKKyAgICBBU1NFUlQoIWlzRm9yQXdhaXQgfHwgKGlzRm9y
QXdhaXQgJiYgaXNBc3luY0Z1bmN0aW9uUGFyc2VNb2RlKHBhcnNlTW9kZSgpKSkpOworCiAgICAg
Q29tcGxldGlvblJlY29yZFNjb3BlIGNvbXBsZXRpb25SZWNvcmRTY29wZSgqdGhpcyk7CiAKICAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gc3ViamVjdCA9IG5ld1RlbXBvcmFyeSgpOwogICAgIGVtaXRO
b2RlKHN1YmplY3QuZ2V0KCksIHN1YmplY3ROb2RlKTsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4g
aXRlcmF0b3IgPSBlbWl0R2V0QnlJZChuZXdUZW1wb3JhcnkoKSwgc3ViamVjdC5nZXQoKSwgcHJv
cGVydHlOYW1lcygpLml0ZXJhdG9yU3ltYm9sKTsKLSAgICB7Ci0gICAgICAgIENhbGxBcmd1bWVu
dHMgYXJncygqdGhpcywgbnVsbHB0cik7Ci0gICAgICAgIGVtaXRNb3ZlKGFyZ3MudGhpc1JlZ2lz
dGVyKCksIHN1YmplY3QuZ2V0KCkpOwotICAgICAgICBlbWl0Q2FsbChpdGVyYXRvci5nZXQoKSwg
aXRlcmF0b3IuZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgYXJncywgbm9kZS0+ZGl2b3QoKSwg
bm9kZS0+ZGl2b3RTdGFydCgpLCBub2RlLT5kaXZvdEVuZCgpLCBEZWJ1Z2dhYmxlQ2FsbDo6Tm8p
OwotICAgIH0KKworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBpdGVyYXRvciA9IGlzRm9yQXdhaXQg
PyBlbWl0R2V0QXN5bmNJdGVyYXRvcihzdWJqZWN0LmdldCgpLCBub2RlKSA6IGVtaXRHZXRJdGVy
YXRvcihzdWJqZWN0LmdldCgpLCBub2RlKTsKIAogICAgIFJlZjxMYWJlbD4gbG9vcERvbmUgPSBu
ZXdMYWJlbCgpOwogICAgIFJlZjxMYWJlbD4gdHJ5U3RhcnRMYWJlbCA9IG5ld0xhYmVsKCk7CkBA
IC00MzY4LDYgKzQzNjcsMTAgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEVudW1lcmF0
aW9uKFRocm93YWJsZUV4cHJlc3Npb25EYXRhKiBub2RlLCBFeHByZXNzaW8KICAgICAgICAgICAg
IENhbGxBcmd1bWVudHMgcmV0dXJuQXJndW1lbnRzKCp0aGlzLCBudWxscHRyKTsKICAgICAgICAg
ICAgIGVtaXRNb3ZlKHJldHVybkFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgaXRlcmF0b3IuZ2V0
KCkpOwogICAgICAgICAgICAgZW1pdENhbGwodmFsdWUuZ2V0KCksIHJldHVybk1ldGhvZC5nZXQo
KSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCByZXR1cm5Bcmd1bWVudHMsIG5vZGUtPmRpdm90KCksIG5v
ZGUtPmRpdm90U3RhcnQoKSwgbm9kZS0+ZGl2b3RFbmQoKSwgRGVidWdnYWJsZUNhbGw6Ok5vKTsK
KworICAgICAgICAgICAgaWYgKGlzRm9yQXdhaXQpCisgICAgICAgICAgICAgICAgZW1pdEF3YWl0
KHZhbHVlLmdldCgpKTsKKwogICAgICAgICAgICAgZW1pdEp1bXBJZlRydWUoZW1pdElzT2JqZWN0
KG5ld1RlbXBvcmFyeSgpLCB2YWx1ZS5nZXQoKSksIGZpbmFsbHlEb25lLmdldCgpKTsKICAgICAg
ICAgICAgIGVtaXRUaHJvd1R5cGVFcnJvcihBU0NJSUxpdGVyYWwoIkl0ZXJhdG9yIHJlc3VsdCBp
bnRlcmZhY2UgaXMgbm90IGFuIG9iamVjdC4iKSk7CiAKQEAgLTQ0MDksNyArNDQxMiw4IEBAIHZv
aWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRFbnVtZXJhdGlvbihUaHJvd2FibGVFeHByZXNzaW9u
RGF0YSogbm9kZSwgRXhwcmVzc2lvCiAgICAgICAgIH0KIAogICAgICAgICB7Ci0gICAgICAgICAg
ICBlbWl0SXRlcmF0b3JOZXh0KHZhbHVlLmdldCgpLCBpdGVyYXRvci5nZXQoKSwgbm9kZSk7Cisg
ICAgICAgICAgICBlbWl0SXRlcmF0b3JOZXh0KHZhbHVlLmdldCgpLCBpdGVyYXRvci5nZXQoKSwg
bm9kZSwgaXNGb3JBd2FpdCA/IEVtaXRBd2FpdDo6WWVzIDogRW1pdEF3YWl0OjpObyk7CisKICAg
ICAgICAgICAgIGVtaXRKdW1wSWZUcnVlKGVtaXRHZXRCeUlkKG5ld1RlbXBvcmFyeSgpLCB2YWx1
ZS5nZXQoKSwgcHJvcGVydHlOYW1lcygpLmRvbmUpLCBsb29wRG9uZS5nZXQoKSk7CiAgICAgICAg
ICAgICBlbWl0R2V0QnlJZCh2YWx1ZS5nZXQoKSwgdmFsdWUuZ2V0KCksIHByb3BlcnR5TmFtZXMo
KS52YWx1ZSk7CiAgICAgICAgICAgICBlbWl0SnVtcChsb29wU3RhcnQuZ2V0KCkpOwpAQCAtNDQy
MSw3ICs0NDI1LDcgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEVudW1lcmF0aW9uKFRo
cm93YWJsZUV4cHJlc3Npb25EYXRhKiBub2RlLCBFeHByZXNzaW8KICAgICAgICAgcG9wRmluYWxs
eUNvbnRyb2xGbG93U2NvcGUoKTsKICAgICAgICAgaWYgKGJyZWFrTGFiZWxJc0JvdW5kKSB7CiAg
ICAgICAgICAgICAvLyBJdGVyYXRvckNsb3NlIHNlcXVlbmNlIGZvciBicmVhay1lZCBjb250cm9s
IGZsb3cuCi0gICAgICAgICAgICBlbWl0SXRlcmF0b3JDbG9zZShpdGVyYXRvci5nZXQoKSwgbm9k
ZSk7CisgICAgICAgICAgICBlbWl0SXRlcmF0b3JDbG9zZShpdGVyYXRvci5nZXQoKSwgbm9kZSwg
aXNGb3JBd2FpdCA/IEVtaXRBd2FpdDo6WWVzIDogRW1pdEF3YWl0OjpObyk7CiAgICAgICAgIH0K
ICAgICB9CiAgICAgZW1pdExhYmVsKGxvb3BEb25lLmdldCgpKTsKQEAgLTQ1NzMsMTMgKzQ1Nzcs
MTYgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJc0VtcHR5KFJlZ2lzdGVy
SUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjKQogICAgIHJldHVybiBkc3Q7CiB9CiAgICAgCi1SZWdp
c3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEl0ZXJhdG9yTmV4dChSZWdpc3RlcklEKiBk
c3QsIFJlZ2lzdGVySUQqIGl0ZXJhdG9yLCBjb25zdCBUaHJvd2FibGVFeHByZXNzaW9uRGF0YSog
bm9kZSkKK1JlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SXRlcmF0b3JOZXh0KFJl
Z2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogaXRlcmF0b3IsIGNvbnN0IFRocm93YWJsZUV4cHJl
c3Npb25EYXRhKiBub2RlLCBFbWl0QXdhaXQgZG9FbWl0QXdhaXQpCiB7CiAgICAgewogICAgICAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gbmV4dCA9IGVtaXRHZXRCeUlkKG5ld1RlbXBvcmFyeSgpLCBp
dGVyYXRvciwgcHJvcGVydHlOYW1lcygpLm5leHQpOwogICAgICAgICBDYWxsQXJndW1lbnRzIG5l
eHRBcmd1bWVudHMoKnRoaXMsIG51bGxwdHIpOwogICAgICAgICBlbWl0TW92ZShuZXh0QXJndW1l
bnRzLnRoaXNSZWdpc3RlcigpLCBpdGVyYXRvcik7CiAgICAgICAgIGVtaXRDYWxsKGRzdCwgbmV4
dC5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBuZXh0QXJndW1lbnRzLCBub2RlLT5kaXZvdCgp
LCBub2RlLT5kaXZvdFN0YXJ0KCksIG5vZGUtPmRpdm90RW5kKCksIERlYnVnZ2FibGVDYWxsOjpO
byk7CisKKyAgICAgICAgaWYgKGRvRW1pdEF3YWl0ID09IEVtaXRBd2FpdDo6WWVzKQorICAgICAg
ICAgICAgZW1pdEF3YWl0KGRzdCk7CiAgICAgfQogICAgIHsKICAgICAgICAgUmVmPExhYmVsPiB0
eXBlSXNPYmplY3QgPSBuZXdMYWJlbCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCmluZGV4IDE3ZjY1ZmU5YzljODc2
OTFmZDlhYTQ4ZDM3MmZkMWU5YzMyNWY0MWEuLjNkN2JmZWI5ODkzMWIyZTQ4OGIxNjZmNDc1YjEx
ZWM0NGI4ZmM2OTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKQEAgLTc4MCw3ICs3ODAsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdElzRGVyaXZlZEFycmF5KFJlZ2lzdGVySUQq
IGRzdCwgUmVnaXN0ZXJJRCogc3JjKSB7IHJldHVybiBlbWl0SXNDZWxsV2l0aFR5cGUoZHN0LCBz
cmMsIERlcml2ZWRBcnJheVR5cGUpOyB9CiAgICAgICAgIHZvaWQgZW1pdFJlcXVpcmVPYmplY3RD
b2VyY2libGUoUmVnaXN0ZXJJRCogdmFsdWUsIGNvbnN0IFN0cmluZyYgZXJyb3IpOwogCi0gICAg
ICAgIFJlZ2lzdGVySUQqIGVtaXRJdGVyYXRvck5leHQoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3Rl
cklEKiBpdGVyYXRvciwgY29uc3QgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEqIG5vZGUpOworICAg
ICAgICBSZWdpc3RlcklEKiBlbWl0SXRlcmF0b3JOZXh0KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0
ZXJJRCogaXRlcmF0b3IsIGNvbnN0IFRocm93YWJsZUV4cHJlc3Npb25EYXRhKiBub2RlLCBKU0M6
OkVtaXRBd2FpdCA9IEpTQzo6RW1pdEF3YWl0OjpObyk7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVt
aXRJdGVyYXRvck5leHRXaXRoVmFsdWUoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBpdGVy
YXRvciwgUmVnaXN0ZXJJRCogdmFsdWUsIGNvbnN0IFRocm93YWJsZUV4cHJlc3Npb25EYXRhKiBu
b2RlKTsKICAgICAgICAgdm9pZCBlbWl0SXRlcmF0b3JDbG9zZShSZWdpc3RlcklEKiBpdGVyYXRv
ciwgY29uc3QgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEqIG5vZGUsIEVtaXRBd2FpdCA9IEVtaXRB
d2FpdDo6Tm8pOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FT
VEJ1aWxkZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oCmlu
ZGV4IDU5ZWZhZWZmZDU5YTNlMmIxYzEzZDczM2U5MTIzZmE3ZjE3MTg0NjAuLmIyMGRhMThlMTU3
NDJjZmI4YTg1ZGM3ODVhNjMwYTc2NGExYWY3ODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
YXJzZXIvQVNUQnVpbGRlci5oCkBAIC02MDIsMTggKzYwMiwxOCBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBjcmVhdGVGb3JJbkxvb3AobG9jYXRpb24sIGxleHByLCBpdGVyLCBzdGF0ZW1lbnRz
LCBkZWNsTG9jYXRpb24sIGVTdGFydCwgZURpdm90LCBlRW5kLCBzdGFydCwgZW5kLCBsZXhpY2Fs
VmFyaWFibGVzKTsKICAgICB9CiAgICAgCi0gICAgU3RhdGVtZW50Tm9kZSogY3JlYXRlRm9yT2ZM
b29wKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBsaHMs
IEV4cHJlc3Npb25Ob2RlKiBpdGVyLCBTdGF0ZW1lbnROb2RlKiBzdGF0ZW1lbnRzLCBjb25zdCBK
U1Rva2VuTG9jYXRpb24mLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZVN0YXJ0LCBjb25zdCBKU1Rl
eHRQb3NpdGlvbiYgZURpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZUVuZCwgaW50IHN0YXJ0
LCBpbnQgZW5kLCBWYXJpYWJsZUVudmlyb25tZW50JiBsZXhpY2FsVmFyaWFibGVzKQorICAgIFN0
YXRlbWVudE5vZGUqIGNyZWF0ZUZvck9mTG9vcChib29sIGlzRm9yQXdhaXQsIGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBsaHMsIEV4cHJlc3Npb25Ob2Rl
KiBpdGVyLCBTdGF0ZW1lbnROb2RlKiBzdGF0ZW1lbnRzLCBjb25zdCBKU1Rva2VuTG9jYXRpb24m
LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZVN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZURp
dm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZUVuZCwgaW50IHN0YXJ0LCBpbnQgZW5kLCBWYXJp
YWJsZUVudmlyb25tZW50JiBsZXhpY2FsVmFyaWFibGVzKQogICAgIHsKLSAgICAgICAgRm9yT2ZO
b2RlKiByZXN1bHQgPSBuZXcgKG1fcGFyc2VyQXJlbmEpIEZvck9mTm9kZShsb2NhdGlvbiwgbGhz
LCBpdGVyLCBzdGF0ZW1lbnRzLCBsZXhpY2FsVmFyaWFibGVzKTsKKyAgICAgICAgRm9yT2ZOb2Rl
KiByZXN1bHQgPSBuZXcgKG1fcGFyc2VyQXJlbmEpIEZvck9mTm9kZShpc0ZvckF3YWl0LCBsb2Nh
dGlvbiwgbGhzLCBpdGVyLCBzdGF0ZW1lbnRzLCBsZXhpY2FsVmFyaWFibGVzKTsKICAgICAgICAg
cmVzdWx0LT5zZXRMb2Moc3RhcnQsIGVuZCwgbG9jYXRpb24uc3RhcnRPZmZzZXQsIGxvY2F0aW9u
LmxpbmVTdGFydE9mZnNldCk7CiAgICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0aW9uKHJlc3VsdCwg
ZVN0YXJ0LCBlRGl2b3QsIGVFbmQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAg
ICAKLSAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVGb3JPZkxvb3AoY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiBsb2NhdGlvbiwgRGVzdHJ1Y3R1cmluZ1BhdHRlcm5Ob2RlKiBwYXR0ZXJuLCBFeHByZXNz
aW9uTm9kZSogaXRlciwgU3RhdGVtZW50Tm9kZSogc3RhdGVtZW50cywgY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiBkZWNsTG9jYXRpb24sIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBlU3RhcnQsIGNvbnN0
IEpTVGV4dFBvc2l0aW9uJiBlRGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBlRW5kLCBpbnQg
c3RhcnQsIGludCBlbmQsIFZhcmlhYmxlRW52aXJvbm1lbnQmIGxleGljYWxWYXJpYWJsZXMpCisg
ICAgU3RhdGVtZW50Tm9kZSogY3JlYXRlRm9yT2ZMb29wKGJvb2wgaXNGb3JBd2FpdCwgY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRGVzdHJ1Y3R1cmluZ1BhdHRlcm5Ob2RlKiBwYXR0
ZXJuLCBFeHByZXNzaW9uTm9kZSogaXRlciwgU3RhdGVtZW50Tm9kZSogc3RhdGVtZW50cywgY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiBkZWNsTG9jYXRpb24sIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBl
U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBlRGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9u
JiBlRW5kLCBpbnQgc3RhcnQsIGludCBlbmQsIFZhcmlhYmxlRW52aXJvbm1lbnQmIGxleGljYWxW
YXJpYWJsZXMpCiAgICAgewogICAgICAgICBhdXRvIGxleHByID0gbmV3IChtX3BhcnNlckFyZW5h
KSBEZXN0cnVjdHVyaW5nQXNzaWdubWVudE5vZGUoZGVjbExvY2F0aW9uLCBwYXR0ZXJuLCBudWxs
cHRyKTsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUZvck9mTG9vcChsb2NhdGlvbiwgbGV4cHIsIGl0
ZXIsIHN0YXRlbWVudHMsIGRlY2xMb2NhdGlvbiwgZVN0YXJ0LCBlRGl2b3QsIGVFbmQsIHN0YXJ0
LCBlbmQsIGxleGljYWxWYXJpYWJsZXMpOworICAgICAgICByZXR1cm4gY3JlYXRlRm9yT2ZMb29w
KGlzRm9yQXdhaXQsIGxvY2F0aW9uLCBsZXhwciwgaXRlciwgc3RhdGVtZW50cywgZGVjbExvY2F0
aW9uLCBlU3RhcnQsIGVEaXZvdCwgZUVuZCwgc3RhcnQsIGVuZCwgbGV4aWNhbFZhcmlhYmxlcyk7
CiAgICAgfQogCiAgICAgYm9vbCBpc0JpbmRpbmdOb2RlKGNvbnN0IERlc3RydWN0dXJpbmdQYXR0
ZXJuJiBwYXR0ZXJuKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9O
b2RlQ29uc3RydWN0b3JzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVDb25z
dHJ1Y3RvcnMuaAppbmRleCBiMGJhZGZjOTg2ODQxMzUwYzFlZDQwOTI1NDQwNjU1ZDk3ZWU5MzVl
Li4zNzY5Yzk1OWMwZTNiMDk0YmY1ZTI5NmQ4ZmQ0MGI1M2M0YTA2NjhiIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaApAQCAtMTA0MCw4ICsx
MDQwLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgewogICAgIH0KICAgICAKLSAgICBpbmxpbmUg
Rm9yT2ZOb2RlOjpGb3JPZk5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhw
cmVzc2lvbk5vZGUqIGxleHByLCBFeHByZXNzaW9uTm9kZSogZXhwciwgU3RhdGVtZW50Tm9kZSog
c3RhdGVtZW50LCBWYXJpYWJsZUVudmlyb25tZW50JiBsZXhpY2FsVmFyaWFibGVzKQorICAgIGlu
bGluZSBGb3JPZk5vZGU6OkZvck9mTm9kZShib29sIGlzRm9yQXdhaXQsIGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBsZXhwciwgRXhwcmVzc2lvbk5vZGUq
IGV4cHIsIFN0YXRlbWVudE5vZGUqIHN0YXRlbWVudCwgVmFyaWFibGVFbnZpcm9ubWVudCYgbGV4
aWNhbFZhcmlhYmxlcykKICAgICAgICAgOiBFbnVtZXJhdGlvbk5vZGUobG9jYXRpb24sIGxleHBy
LCBleHByLCBzdGF0ZW1lbnQsIGxleGljYWxWYXJpYWJsZXMpCisgICAgICAgICwgbV9pc0ZvckF3
YWl0KGlzRm9yQXdhaXQpCiAgICAgewogICAgIH0KICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvTm9kZXMuaAppbmRleCA2ZjE3MzgyOGIzODEyMTgyMTNkYWFhZDMyYzNiZWExNGMyNTkwMjE0
Li5hNTNhNjlmMmY4YzlmYzViYzY2MTBkY2EyZTQ5MjRiNzRiNTU3ZmUwIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9Ob2Rlcy5oCkBAIC0xNTIzLDExICsxNTIzLDE0IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgIAogICAgIGNsYXNzIEZvck9mTm9kZSA6IHB1YmxpYyBFbnVtZXJhdGlvbk5vZGUg
ewogICAgIHB1YmxpYzoKLSAgICAgICAgRm9yT2ZOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYs
IEV4cHJlc3Npb25Ob2RlKiwgRXhwcmVzc2lvbk5vZGUqLCBTdGF0ZW1lbnROb2RlKiwgVmFyaWFi
bGVFbnZpcm9ubWVudCYpOworICAgICAgICBGb3JPZk5vZGUoYm9vbCwgY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiwgRXhwcmVzc2lvbk5vZGUqLCBFeHByZXNzaW9uTm9kZSosIFN0YXRlbWVudE5vZGUq
LCBWYXJpYWJsZUVudmlyb25tZW50Jik7CiAgICAgICAgIGJvb2wgaXNGb3JPZk5vZGUoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgICAgIGJvb2wgaXNGb3JBd2FpdCgpIGNv
bnN0IHsgcmV0dXJuIG1faXNGb3JBd2FpdDsgfQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9p
ZCBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIG92ZXJy
aWRlOworCisgICAgICAgIGNvbnN0IGJvb2wgbV9pc0ZvckF3YWl0OwogICAgIH07CiAKICAgICBj
bGFzcyBDb250aW51ZU5vZGUgOiBwdWJsaWMgU3RhdGVtZW50Tm9kZSwgcHVibGljIFRocm93YWJs
ZUV4cHJlc3Npb25EYXRhIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcApp
bmRleCBlNzQ4YzU0MGQ0Y2M4NDdkZTk2MGRmY2U2OTZkNzFlZmIwMzBhOWJkLi43NDk3OTA3ZDll
ZjY3Y2JhYzQwMGE3YTM1NTg4NjUxY2Y3ZWE0ODNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9QYXJzZXIuY3BwCkBAIC0xMjY3LDExICsxMjY3LDE4IEBAIHRlbXBsYXRlIDxjbGFzcyBU
cmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VGb3JTdGF0
ZW1lbnQoCiAgICAgQVNTRVJUKG1hdGNoKEZPUikpOwogICAgIEpTVG9rZW5Mb2NhdGlvbiBsb2Nh
dGlvbih0b2tlbkxvY2F0aW9uKCkpOwogICAgIGludCBzdGFydExpbmUgPSB0b2tlbkxpbmUoKTsK
KyAgICBib29sIGlzQXdhaXRGb3IgPSBmYWxzZTsKICAgICBuZXh0KCk7CiAKICAgICBEZXB0aE1h
bmFnZXIgc3RhdGVtZW50RGVwdGgoJm1fc3RhdGVtZW50RGVwdGgpOwogICAgIG1fc3RhdGVtZW50
RGVwdGgrKzsKIAorICAgIGlmIChPcHRpb25zOjp1c2VBc3luY0l0ZXJhdG9yKCkgJiYgbWF0Y2go
QVdBSVQpKSB7CisgICAgICAgIHNlbWFudGljRmFpbElmRmFsc2UoY3VycmVudFNjb3BlKCktPmlz
QXN5bmNGdW5jdGlvbigpLCAiZm9yLWF3YWl0LW9mIGNhbid0IGJlIHVzZWQgb25seSBpbiBhc3lu
YyBmdW5jdGlvbiBvciBhc3luYyBnZW5lcmF0b3IuIik7CisgICAgICAgIGlzQXdhaXRGb3IgPSB0
cnVlOworICAgICAgICBuZXh0KCk7CisgICAgfQorCiAgICAgaGFuZGxlUHJvZHVjdGlvbk9yRmFp
bChPUEVOUEFSRU4sICIoIiwgInN0YXJ0IiwgImZvci1sb29wIGhlYWRlciIpOwogICAgIGludCBu
b25MSFNDb3VudCA9IG1fcGFyc2VyU3RhdGUubm9uTEhTQ291bnQ7CiAgICAgaW50IGRlY2xhcmF0
aW9ucyA9IDA7CkBAIC0xMzQxLDExICsxMzQ4LDE1IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVp
bGRlcj4gVHJlZVN0YXRlbWVudCBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VGb3JTdGF0ZW1lbnQo
CiAgICAgICAgIC8vIEhhbmRsZSBmb3ItaW4gd2l0aCB2YXIgZGVjbGFyYXRpb24KICAgICAgICAg
SlNUZXh0UG9zaXRpb24gaW5Mb2NhdGlvbiA9IHRva2VuU3RhcnRQb3NpdGlvbigpOwogICAgICAg
ICBib29sIGlzT2ZFbnVtZXJhdGlvbiA9IGZhbHNlOwotICAgICAgICBpZiAoIWNvbnN1bWUoSU5U
T0tFTikpIHsKKyAgICAgICAgaWYgKCFtYXRjaChJTlRPS0VOKSkgewogICAgICAgICAgICAgZmFp
bElmRmFsc2UobWF0Y2goSURFTlQpICYmICptX3Rva2VuLm1fZGF0YS5pZGVudCA9PSBtX3ZtLT5w
cm9wZXJ0eU5hbWVzLT5vZiwgIkV4cGVjdGVkIGVpdGhlciAnaW4nIG9yICdvZicgaW4gZW51bWVy
YXRpb24gc3ludGF4Iik7CiAgICAgICAgICAgICBpc09mRW51bWVyYXRpb24gPSB0cnVlOwogICAg
ICAgICAgICAgbmV4dCgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZmFpbElmRmFs
c2UoIWlzQXdhaXRGb3IsICJFeHBlY3RlZCAnb2YnIGluIGZvci1hd2FpdCBzeW50YXgiKTsKKyAg
ICAgICAgICAgIG5leHQoKTsKICAgICAgICAgfQorCiAgICAgICAgIGJvb2wgaGFzQW55QXNzaWdu
bWVudHMgPSAhIWZvckluSW5pdGlhbGl6ZXI7CiAgICAgICAgIGlmIChoYXNBbnlBc3NpZ25tZW50
cykgewogICAgICAgICAgICAgaWYgKGlzT2ZFbnVtZXJhdGlvbikKQEAgLTEzNzAsOCArMTM4MSw5
IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBQYXJzZXI8TGV4
ZXJUeXBlPjo6cGFyc2VGb3JTdGF0ZW1lbnQoCiAgICAgICAgIGdhdGhlckxleGljYWxWYXJpYWJs
ZXNJZk5lY2Vzc2FyeSgpOwogICAgICAgICBUcmVlU3RhdGVtZW50IHJlc3VsdDsKICAgICAgICAg
aWYgKGlzT2ZFbnVtZXJhdGlvbikKLSAgICAgICAgICAgIHJlc3VsdCA9IGNvbnRleHQuY3JlYXRl
Rm9yT2ZMb29wKGxvY2F0aW9uLCBmb3JJblRhcmdldCwgZXhwciwgc3RhdGVtZW50LCBkZWNsTG9j
YXRpb24sIGRlY2xzU3RhcnQsIGluTG9jYXRpb24sIGV4cHJFbmQsIHN0YXJ0TGluZSwgZW5kTGlu
ZSwgKmxleGljYWxWYXJpYWJsZXMpOworICAgICAgICAgICAgcmVzdWx0ID0gY29udGV4dC5jcmVh
dGVGb3JPZkxvb3AoaXNBd2FpdEZvciwgbG9jYXRpb24sIGZvckluVGFyZ2V0LCBleHByLCBzdGF0
ZW1lbnQsIGRlY2xMb2NhdGlvbiwgZGVjbHNTdGFydCwgaW5Mb2NhdGlvbiwgZXhwckVuZCwgc3Rh
cnRMaW5lLCBlbmRMaW5lLCAqbGV4aWNhbFZhcmlhYmxlcyk7CiAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgQVNTRVJUKCFpc0F3YWl0Rm9yKTsKICAgICAgICAgICAgIGlmIChpc1ZhckRlY2xh
cmF0b24gJiYgZm9ySW5Jbml0aWFsaXplcikKICAgICAgICAgICAgICAgICByZXN1bHQgPSBjb250
ZXh0LmNyZWF0ZUZvckluTG9vcChsb2NhdGlvbiwgZGVjbHMsIGV4cHIsIHN0YXRlbWVudCwgZGVj
bExvY2F0aW9uLCBkZWNsc1N0YXJ0LCBpbkxvY2F0aW9uLCBleHByRW5kLCBzdGFydExpbmUsIGVu
ZExpbmUsICpsZXhpY2FsVmFyaWFibGVzKTsKICAgICAgICAgICAgIGVsc2UKQEAgLTE0MDMsNiAr
MTQxNSw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBQYXJz
ZXI8TGV4ZXJUeXBlPjo6cGFyc2VGb3JTdGF0ZW1lbnQoCiAgICAgCiAgICAgaWYgKG1hdGNoKFNF
TUlDT0xPTikpIHsKICAgICBzdGFuZGFyZEZvckxvb3A6CisgICAgICAgIGZhaWxJZkZhbHNlKCFp
c0F3YWl0Rm9yLCAiVW5leHBlY3RlZCBhICc7JyBpbiBmb3ItYXdhaXQtb2YgaGVhZGVyIik7CiAg
ICAgICAgIC8vIFN0YW5kYXJkIGZvciBsb29wCiAgICAgICAgIGlmIChkZWNscykKICAgICAgICAg
ICAgIHJlY29yZFBhdXNlTG9jYXRpb24oY29udGV4dC5icmVha3BvaW50TG9jYXRpb24oZGVjbHMp
KTsKQEAgLTE0NjIsMTcgKzE0NzUsMjEgQEAgZW51bWVyYXRpb25Mb29wOgogICAgIGlmIChwYXR0
ZXJuKSB7CiAgICAgICAgIEFTU0VSVCghZGVjbHMpOwogICAgICAgICBpZiAoaXNPZkVudW1lcmF0
aW9uKQotICAgICAgICAgICAgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVGb3JPZkxvb3AobG9jYXRp
b24sIHBhdHRlcm4sIGV4cHIsIHN0YXRlbWVudCwgZGVjbExvY2F0aW9uLCBkZWNsc1N0YXJ0LCBk
ZWNsc0VuZCwgZXhwckVuZCwgc3RhcnRMaW5lLCBlbmRMaW5lLCAqbGV4aWNhbFZhcmlhYmxlcyk7
Ci0gICAgICAgIGVsc2UgCisgICAgICAgICAgICByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZUZvck9m
TG9vcChpc0F3YWl0Rm9yLCBsb2NhdGlvbiwgcGF0dGVybiwgZXhwciwgc3RhdGVtZW50LCBkZWNs
TG9jYXRpb24sIGRlY2xzU3RhcnQsIGRlY2xzRW5kLCBleHByRW5kLCBzdGFydExpbmUsIGVuZExp
bmUsICpsZXhpY2FsVmFyaWFibGVzKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBBU1NF
UlQoIWlzQXdhaXRGb3IpOwogICAgICAgICAgICAgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVGb3JJ
bkxvb3AobG9jYXRpb24sIHBhdHRlcm4sIGV4cHIsIHN0YXRlbWVudCwgZGVjbExvY2F0aW9uLCBk
ZWNsc1N0YXJ0LCBkZWNsc0VuZCwgZXhwckVuZCwgc3RhcnRMaW5lLCBlbmRMaW5lLCAqbGV4aWNh
bFZhcmlhYmxlcyk7CisgICAgICAgIH0KIAogICAgICAgICBwb3BMZXhpY2FsU2NvcGVJZk5lY2Vz
c2FyeSgpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICBpZiAoaXNPZkVudW1l
cmF0aW9uKQotICAgICAgICByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZUZvck9mTG9vcChsb2NhdGlv
biwgZGVjbHMsIGV4cHIsIHN0YXRlbWVudCwgZGVjbExvY2F0aW9uLCBkZWNsc1N0YXJ0LCBkZWNs
c0VuZCwgZXhwckVuZCwgc3RhcnRMaW5lLCBlbmRMaW5lLCAqbGV4aWNhbFZhcmlhYmxlcyk7Ci0g
ICAgZWxzZQorICAgICAgICByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZUZvck9mTG9vcChpc0F3YWl0
Rm9yLCBsb2NhdGlvbiwgZGVjbHMsIGV4cHIsIHN0YXRlbWVudCwgZGVjbExvY2F0aW9uLCBkZWNs
c1N0YXJ0LCBkZWNsc0VuZCwgZXhwckVuZCwgc3RhcnRMaW5lLCBlbmRMaW5lLCAqbGV4aWNhbFZh
cmlhYmxlcyk7CisgICAgZWxzZSB7CisgICAgICAgIEFTU0VSVCghaXNBd2FpdEZvcik7CiAgICAg
ICAgIHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlRm9ySW5Mb29wKGxvY2F0aW9uLCBkZWNscywgZXhw
ciwgc3RhdGVtZW50LCBkZWNsTG9jYXRpb24sIGRlY2xzU3RhcnQsIGRlY2xzRW5kLCBleHByRW5k
LCBzdGFydExpbmUsIGVuZExpbmUsICpsZXhpY2FsVmFyaWFibGVzKTsKKyAgICB9CiAgICAgcG9w
TGV4aWNhbFNjb3BlSWZOZWNlc3NhcnkoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgKaW5kZXggNzdjZjBjZWMxOWY1YjIyOGI2OTJlM2Fi
OWM4MTBlOTg1ODY5OTE4ZC4uNTYwZGIxMzk3YTQ1YjUxOTU5MjFkZGRmMzgyZTY1NTIyM2JhODU0
YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCkBAIC03MzAsNiArNzMwLDgg
QEAgcHJpdmF0ZToKICAgICB2b2lkIHNldElzQXJyb3dGdW5jdGlvbigpCiAgICAgewogICAgICAg
ICBzZXRJc0Z1bmN0aW9uKCk7CisgICAgICAgIG1faXNBc3luY0Z1bmN0aW9uID0gZmFsc2U7Cisg
ICAgICAgIG1faXNBc3luY0Z1bmN0aW9uQm91bmRhcnkgPSBmYWxzZTsKICAgICAgICAgbV9pc0Fy
cm93RnVuY3Rpb25Cb3VuZGFyeSA9IHRydWU7CiAgICAgICAgIG1faXNBcnJvd0Z1bmN0aW9uID0g
dHJ1ZTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5
bnRheENoZWNrZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU3ludGF4Q2hlY2tl
ci5oCmluZGV4IDk0MWRmZGU2MTJmMWJiNTVkN2FlYmQyYzA2YzMwMTEzYjg1MzA3YWMuLjliNTQ5
NjM4MWY1YjZlNTVhM2RmNjZmYWZiZGJhNDU1YjA0YzM2YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wYXJzZXIvU3ludGF4Q2hlY2tlci5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvU3ludGF4Q2hlY2tlci5oCkBAIC0yNDYsNyArMjQ2LDcgQEAgcHVibGlj
OgogICAgIGludCBjcmVhdGVJZlN0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBpbnQs
IGludCwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gU3RhdGVtZW50UmVzdWx0OyB9CiAgICAgaW50
IGNyZWF0ZUZvckxvb3AoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBpbnQsIGludCwgaW50
LCBpbnQsIGludCwgVmFyaWFibGVFbnZpcm9ubWVudCYpIHsgcmV0dXJuIFN0YXRlbWVudFJlc3Vs
dDsgfQogICAgIGludCBjcmVhdGVGb3JJbkxvb3AoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50
LCBpbnQsIGludCwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBpbnQsIGludCwgaW50LCBp
bnQsIFZhcmlhYmxlRW52aXJvbm1lbnQmKSB7IHJldHVybiBTdGF0ZW1lbnRSZXN1bHQ7IH0KLSAg
ICBpbnQgY3JlYXRlRm9yT2ZMb29wKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwgaW50LCBp
bnQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBWYXJp
YWJsZUVudmlyb25tZW50JikgeyByZXR1cm4gU3RhdGVtZW50UmVzdWx0OyB9CisgICAgaW50IGNy
ZWF0ZUZvck9mTG9vcChib29sLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBpbnQsIGludCwgaW50
LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgVmFyaWFi
bGVFbnZpcm9ubWVudCYpIHsgcmV0dXJuIFN0YXRlbWVudFJlc3VsdDsgfQogICAgIGludCBjcmVh
dGVFbXB0eVN0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mKSB7IHJldHVybiBTdGF0ZW1l
bnRSZXN1bHQ7IH0KICAgICBpbnQgY3JlYXRlRGVjbGFyYXRpb25TdGF0ZW1lbnQoY29uc3QgSlNU
b2tlbkxvY2F0aW9uJiwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gU3RhdGVtZW50UmVzdWx0OyB9
CiAgICAgaW50IGNyZWF0ZVJldHVyblN0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBp
bnQsIGludCwgaW50KSB7IHJldHVybiBTdGF0ZW1lbnRSZXN1bHQ7IH0KZGlmZiAtLWdpdCBhL0pT
VGVzdHMvQ2hhbmdlTG9nIGIvSlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXggODgyMjZhYzBkZTU3NWIx
YjhmZDVlNGZlY2RmMjQwYjhiMjAyMDg5OS4uZjQ2MTQxYTY2NTE1MjJlNGQ0MzcyOTYxODIxNjNm
ZjE5Nzk0NDAyMCAxMDA2NDQKLS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIvSlNUZXN0cy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAxNy0wOC0yOCAgT2xla3NhbmRyIFNrYWNoa292
ICA8Z3NrYWNoa292QGdtYWlsLmNvbT4KKworICAgICAgICBbRVNOZXh0XSBBc3luYyBpdGVyYXRp
b24gLSBJbXBsZW1lbnQgYXN5bmMgaXRlcmF0aW9uIHN0YXRlbWVudDogZm9yLWF3YWl0LW9mCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY2OTgKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHN0cmVzcy9h
c3luYy1pdGVyYXRpb24tZm9yLWF3YWl0LW9mLXN5bnRheC5qczogQWRkZWQuCisgICAgICAgIChh
c3NlcnQpOgorICAgICAgICAoY2hlY2tTeW50YXgpOgorICAgICAgICAoY2hlY2tTeW50YXhFcnJv
cik6CisgICAgICAgIChjaGVja1NpbXBsZUFzeW5jR2VuZXJhdG9yU2xvcHB5TW9kZSk6CisgICAg
ICAgIChjaGVja1NpbXBsZUFzeW5jR2VuZXJhdG9yU3RyaWN0TW9kZSk6CisgICAgICAgIChjaGVj
a05lc3RlZEFzeW5jR2VuZXJhdG9ycyk6CisgICAgICAgIChjaGVja1NpbXBsZUFzeW5jR2VuZXJh
dG9yU3ludGF4RXJyb3JJblN0cmljdE1vZGUpOgorICAgICAgICAqIHN0cmVzcy9hc3luYy1pdGVy
YXRpb24tZm9yLWF3YWl0LW9mLmpzOiBBZGRlZC4KKyAgICAgICAgKGFzc2VydCk6CisgICAgICAg
IChhc3luYy5mb28pOgorICAgICAgICAoYXN5bmMuYm9vKToKKyAgICAgICAgKGNvbnN0LmJvby5h
c3luYyk6CisKIDIwMTctMDgtMjQgIENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQu
b3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIyMjExMTksIHIyMjExMjQs
IGFuZCByMjIxMTQzLgpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3MvYXN5bmMtaXRlcmF0aW9u
LWZvci1hd2FpdC1vZi1zeW50YXguanMgYi9KU1Rlc3RzL3N0cmVzcy9hc3luYy1pdGVyYXRpb24t
Zm9yLWF3YWl0LW9mLXN5bnRheC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMGJiNTBjMDZmNzVkM2JjY2E1M2Iy
YTk2OTY2ZDEwZGNjOWYzZDZlCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9zdHJlc3MvYXN5
bmMtaXRlcmF0aW9uLWZvci1hd2FpdC1vZi1zeW50YXguanMKQEAgLTAsMCArMSwxMTIgQEAKK3Zh
ciBhc3NlcnQgPSBmdW5jdGlvbiAocmVzdWx0LCBleHBlY3RlZCwgbWVzc2FnZSA9ICIiKSB7Cisg
IGlmIChyZXN1bHQgIT09IGV4cGVjdGVkKSB7CisgICAgdGhyb3cgbmV3IEVycm9yKCdFcnJvciBp
biBhc3NlcnQuIEV4cGVjdGVkICInICsgZXhwZWN0ZWQgKyAnIiBidXQgd2FzICInICsgcmVzdWx0
ICsgJyI6JyArIG1lc3NhZ2UgKTsKKyAgfQorfTsKKworZnVuY3Rpb24gY2hlY2tTeW50YXgoc3Jj
KSB7CisgICAgdHJ5IHsKKyAgICAgICAgZXZhbChzcmMpOworICAgIH0gY2F0Y2ggKGVycm9yKSB7
CisgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFN5bnRheEVycm9yKQorICAgICAgICAgICAg
dGhyb3cgbmV3IEVycm9yKCJTeW50YXggRXJyb3I6ICIgKyBTdHJpbmcoZXJyb3IpICsgIlxuIHNj
cmlwdDogYCIgKyBzcmMgKyAiYCIpOworICAgIH0KK30KKworZnVuY3Rpb24gY2hlY2tTeW50YXhF
cnJvcihzcmMsIG1lc3NhZ2UpIHsKKyAgICB2YXIgYkVycm9yID0gZmFsc2U7CisgICAgdHJ5IHsK
KyAgICAgICAgZXZhbChzcmMpOworICAgIH0gY2F0Y2ggKGVycm9yKSB7CisgICAgICAgIGJFcnJv
ciA9IGVycm9yIGluc3RhbmNlb2YgU3ludGF4RXJyb3IgJiYgKFN0cmluZyhlcnJvcikgPT09IG1l
c3NhZ2UgfHwgdHlwZW9mIG1lc3NhZ2UgPT09ICd1bmRlZmluZWQnKTsgCisgICAgfQorICAgIGlm
ICghYkVycm9yKSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgc3ludGF4IEVy
cm9yOiAiICsgbWVzc2FnZSArICJcbiBpbiBzY3JpcHQ6IGAiICsgc3JjICsgImAiKTsKKyAgICB9
Cit9CisKKyhmdW5jdGlvbiBjaGVja1NpbXBsZUFzeW5jR2VuZXJhdG9yU2xvcHB5TW9kZSgpIHsK
KyAgICBjaGVja1N5bnRheCgndmFyIGExID0gYXN5bmMgZnVuY3Rpb24qYXN5bmNHZW5XaXRoTmFt
ZTEoKXsgZm9yIGF3YWl0KGNvbnN0IHZhbHVlIG9mIGZvbygpKSB7fSB9Jyk7CisgICAgY2hlY2tT
eW50YXgoJ3ZhciBhMSA9IGFzeW5jIGZ1bmN0aW9uIGFzeW5jV2l0aE5hbWUxKCl7IGZvciBhd2Fp
dChjb25zdCB2YWx1ZSBvZiBmb28oKSkge30gfScpOworICAgIGNoZWNrU3ludGF4KCd2YXIgYTEg
PSBhc3luYyBmdW5jdGlvbiphc3luY0dlbldpdGhOYW1lMSgpeyBmb3IgYXdhaXQobGV0IHZhbHVl
IG9mIGZvbygpKSB7fSB9Jyk7CisgICAgY2hlY2tTeW50YXgoJ3ZhciBhMSA9IGFzeW5jIGZ1bmN0
aW9uIGFzeW5jV2l0aE5hbWUxKCl7IGZvciBhd2FpdChsZXQgdmFsdWUgb2YgZm9vKCkpIHt9IH0n
KTsKK30pKCk7CisKKyhmdW5jdGlvbiBjaGVja1NpbXBsZUFzeW5jR2VuZXJhdG9yU3RyaWN0TW9k
ZSgpIHsKKyAgICBjaGVja1N5bnRheCgnInVzZSBzdHJpY3QiOyB2YXIgYTEgPSBhc3luYyBmdW5j
dGlvbiphc3luY0dlbldpdGhOYW1lMSgpeyBmb3IgYXdhaXQoY29uc3QgdmFsdWUgb2YgZm9vKCkp
IHt9ICB9Jyk7CisgICAgY2hlY2tTeW50YXgoJyJ1c2Ugc3RyaWN0IjsgdmFyIGExID0gYXN5bmMg
ZnVuY3Rpb24gYXN5bmNXaXRoTmFtZTEoKXsgZm9yIGF3YWl0KGNvbnN0IHZhbHVlIG9mIGZvbygp
KSB7fSB9Jyk7CisgICAgY2hlY2tTeW50YXgoJyJ1c2Ugc3RyaWN0IjsgdmFyIGExID0gYXN5bmMg
ZnVuY3Rpb24qYXN5bmNHZW5XaXRoTmFtZTEoKXsgZm9yIGF3YWl0KGxldCB2YWx1ZSBvZiBmb28o
KSkge30gfScpOworICAgIGNoZWNrU3ludGF4KCcidXNlIHN0cmljdCI7IHZhciBhMSA9IGFzeW5j
IGZ1bmN0aW9uIGFzeW5jV2l0aE5hbWUxKCl7IGZvciBhd2FpdChsZXQgdmFsdWUgb2YgZm9vKCkp
IHt9IH0nKTsKK30pKCk7CisKKworKGZ1bmN0aW9uIGNoZWNrTmVzdGVkQXN5bmNHZW5lcmF0b3Jz
KCkgeyAKKyAgICB2YXIgd3JhcHBlcnMgPSBbCisgICAgICAgIHtzdGFydDogJ3ZhciBhMSA9IGFz
eW5jIGZ1bmN0aW9uKmFzeW5jR2VuV2l0aE5hbWUxKCl7JywgZmluaXNoOiAnfSd9LAorICAgICAg
ICB7c3RhcnQ6ICdhc3luYyBmdW5jdGlvbiphc3luY0dlbldpdGhOYW1lMigpeyAnLCBmaW5pc2g6
ICd9J30sCisgICAgICAgIHtzdGFydDogJ2FzeW5jIGZ1bmN0aW9uIGFzeW5jV2l0aE5hbWUyKCl7
ICcsIGZpbmlzaDogJ30nfSwKKyAgICAgICAge3N0YXJ0OiAnY2xhc3MgQSB7IGFzeW5jICogbWV0
aG9kKCkgeyAnLCBmaW5pc2g6ICcgfSB9J30sCisgICAgICAgIHtzdGFydDogJ3ZhciBhMSA9IGFz
eW5jICgpID0+IHsnLCBmaW5pc2g6ICd9J30sCisgICAgXTsKKworICAgIGV4cHJlc3Npb25zID0g
WworICAgICAgICAnZm9yIGF3YWl0KGNvbnN0IHZhbHVlIG9mIGZvbygpKSB7fScsCisgICAgICAg
ICdmb3IgYXdhaXQobGV0IHZhbHVlIG9mIGZvbygpKSB7fScsCisgICAgICAgICdmb3IgYXdhaXQo
dmFyIHZhbHVlIG9mIGZvbygpKSB7fScsCisgICAgICAgICdmb3IgYXdhaXQodmFyIFthLCBiXSBv
ZiBmb28oKSkge30nLAorICAgICAgICAnZm9yIGF3YWl0KGxldCB7YSwgYn0gb2YgZm9vKCkpIHt9
JywKKyAgICAgICAgJ2ZvciBhd2FpdChjb25zdCBbLi4uIGJdIG9mIGZvbygpKSB7fScsCisgICAg
ICAgICdmb3IgYXdhaXQoY29uc3QgWywsLCBiXSBvZiBmb28oKSkge30nLAorICAgICAgICAnZm9y
IGF3YWl0KGNvbnN0IHZhbHVlIG9mIGJvbykge30nLAorICAgICAgICAnZm9yIGF3YWl0KGxldCB2
YWx1ZSBvZiBib28pIHt9JywKKyAgICAgICAgJ2ZvciBhd2FpdChjb25zdCB2YWx1ZSBvZiBmb28o
KS5ib28oKSkge30nLAorICAgICAgICAnZm9yIGF3YWl0KGxldCB2YWx1ZSBvZiBmb28uYm9vKCkp
IHt9JywKKyAgICAgICAgJ2ZvciBhd2FpdChsZXQgdmFsdWUgb2YgZm9vLmJvbyh2YWx1ZSkpIHt9
JywKKyAgICAgICAgJ2ZvciBhd2FpdChsZXQgdmFsdWUgb2YgWzEsMiwzXSkge30nLAorICAgICAg
ICAndHJ5IHsgZm9yIGF3YWl0KGNvbnN0IHZhbHVlIG9mIGZvbygpKSB7fSB9IGNhdGNoIChlKSB7
fScsCisgICAgICAgICd7IGZvciBhd2FpdChjb25zdCB2YWx1ZSBvZiBmb28oKSkge30gfScsCisg
ICAgICAgICdpZiAodHJ1ZSl7IGZvciBhd2FpdChjb25zdCB2YWx1ZSBvZiBmb28oKSkge30gfScs
CisgICAgICAgICdpZiAodHJ1ZSkgZm9yIGF3YWl0KGNvbnN0IHZhbHVlIG9mIGZvbygpKSB7fScs
CisgICAgICAgICdpZiAodHJ1ZSkgZm9vKCk7IGVsc2UgeyBmb3IgYXdhaXQoY29uc3QgdmFsdWUg
b2YgZm9vKCkpIHt9IH0nLAorICAgICAgICAnd2hpbGUgKHRydWUpIHsgZm9yIGF3YWl0KGNvbnN0
IHZhbHVlIG9mIGZvbygpKSB7fSB9JywKKyAgICAgICAgJ2Zvcig7OykgeyBmb3IgYXdhaXQoY29u
c3QgdmFsdWUgb2YgZm9vKCkpIHt9IH0nLAorICAgICAgICAnc3dpdGNoKGUpIHsgY2FzZSBcJzFc
JyA6IGZvciBhd2FpdChjb25zdCB2YWx1ZSBvZiBmb28oKSkge307IH0nLAorICAgIF07CisKKyAg
ICB3cmFwcGVycy5mb3JFYWNoKHdyYXBwZXIgPT4geworICAgICAgICBleHByZXNzaW9ucy5mb3JF
YWNoKGV4cCA9PiB7CisgICAgICAgICAgICBjaGVja1N5bnRheCh3cmFwcGVyLnN0YXJ0ICsgZXhw
ICsgd3JhcHBlci5maW5pc2gpOworICAgICAgICB9KTsKKyAgICB9KQorfSkoKTsKKworCisoZnVu
Y3Rpb24gY2hlY2tTaW1wbGVBc3luY0dlbmVyYXRvclN5bnRheEVycm9ySW5TbG9wcHlNb2RlKCkg
eworICAgIGNoZWNrU3ludGF4RXJyb3IoInZhciBhc3luY0dlbkZuID0gZnVuY3Rpb24gKCkgeyBm
b3IgYXdhaXQoY29uc3QgdmFsdWUgb2YgZm9vKCkpIHt9IH0iKTsKKyAgICBjaGVja1N5bnRheEVy
cm9yKCJ2YXIgYXN5bmNHZW5GbiA9IGFzeW5jIGZ1bmN0aW9uICgpIHsgdmFyIGFyciA9ICgpID0+
IHsgZm9yIGF3YWl0KGNvbnN0IHZhbHVlIG9mIGZvbygpKSB7fSB9IH0iKTsKKyAgICBjaGVja1N5
bnRheEVycm9yKCJ2YXIgYXN5bmNHZW5GbiA9IGZ1bmN0aW9uKiAoKSB7IGZvciBhd2FpdChjb25z
dCB2YWx1ZSBvZiBmb28oKSkge30gfSIpOworICAgIGNoZWNrU3ludGF4RXJyb3IoInZhciBhc3lu
Y0dlbkZuID0gYXN5bmMgZnVuY3Rpb24qICgpIHsgdmFyIGFyciA9ICgpID0+IHsgZm9yIGF3YWl0
KGNvbnN0IHZhbHVlIG9mIGZvbygpKSB7fSB9IH0iKTsKKyAgICBjaGVja1N5bnRheEVycm9yKCd2
YXIgYTEgPSBhc3luYyBmdW5jdGlvbiphc3luY0dlbldpdGhOYW1lMSgpeyBmb3IgYXdhaXQoY29u
c3QgdmFsdWUgaW4gZm9vKCkpIHt9IH0nKTsKKyAgICBjaGVja1N5bnRheEVycm9yKCd2YXIgYTEg
PSBhc3luYyBmdW5jdGlvbiBhc3luY1dpdGhOYW1lMSgpeyBmb3IgYXdhaXQoY29uc3QgdmFsdWUg
aW4gZm9vKCkpIHt9IH0nKTsKKyAgICBjaGVja1N5bnRheEVycm9yKCd2YXIgYTEgPSBhc3luYyBm
dW5jdGlvbiBhc3luY1dpdGhOYW1lMSgpeyBmb3IgYXdhaXQgKDs7KSB7fSB9Jyk7CisgICAgY2hl
Y2tTeW50YXhFcnJvcigidmFyIGExID0gYXN5bmMgZnVuY3Rpb24gYXN5bmNXaXRoTmFtZTEoKXsg
Zm9yIGF3YWl0IChsZXQgdiA9IDQ7Oykge30gfSIpOworICAgIGNoZWNrU3ludGF4RXJyb3IoInZh
ciBhMSA9IGFzeW5jIGZ1bmN0aW9uIGFzeW5jV2l0aE5hbWUxKCl7IGZvciBhd2FpdCAobGV0IHYg
b2YgZigpOzspIHt9IH0iKTsKKyAgICBjaGVja1N5bnRheEVycm9yKCJ2YXIgYTEgPSBhc3luYyBm
dW5jdGlvbiBhc3luY1dpdGhOYW1lMSgpeyBmb3IgYXdhaXQgKGxldCB2IG9mIGJvbzs7KSB7fSB9
Iik7CisgICAgY2hlY2tTeW50YXhFcnJvcigidmFyIGExID0gYXN5bmMgZnVuY3Rpb24gYXN5bmNX
aXRoTmFtZTEoKXsgZm9yIGF3YWl0IChsZXQgdiBvZiBib28gb2YpIHt9IH0iKTsKKyAgICBjaGVj
a1N5bnRheEVycm9yKCJhc3luYyBmdW5jdGlvbiBhc3luY1dpdGhOYW1lMSgpeyBmb3IgYXdhaXQg
KGxldCB2IG9mIGJvbyBpbikge30gfSIpOworfSkoKTsKKworKGZ1bmN0aW9uIGNoZWNrU2ltcGxl
QXN5bmNHZW5lcmF0b3JTeW50YXhFcnJvckluU3RyaWN0TW9kZSgpIHsKKyAgICBjaGVja1N5bnRh
eEVycm9yKCIndXNlIHN0cmljdCc7IHZhciBhc3luY0dlbkZuID0gZnVuY3Rpb24gKCkgeyBmb3Ig
YXdhaXQoY29uc3QgdmFsdWUgb2YgZm9vKCkpIHt9IH0iKTsKKyAgICBjaGVja1N5bnRheEVycm9y
KCIndXNlIHN0cmljdCc7IHZhciBhc3luY0dlbkZuID0gYXN5bmMgZnVuY3Rpb24gKCkgeyB2YXIg
YXJyID0gKCkgPT4geyBmb3IgYXdhaXQoY29uc3QgdmFsdWUgb2YgZm9vKCkpIHt9IH0gfSIpOwor
ICAgIGNoZWNrU3ludGF4RXJyb3IoIid1c2Ugc3RyaWN0JzsgdmFyIGFzeW5jR2VuRm4gPSBmdW5j
dGlvbiogKCkgeyBmb3IgYXdhaXQoY29uc3QgdmFsdWUgb2YgZm9vKCkpIHt9IH0iKTsKKyAgICBj
aGVja1N5bnRheEVycm9yKCIndXNlIHN0cmljdCc7IHZhciBhc3luY0dlbkZuID0gYXN5bmMgZnVu
Y3Rpb24qICgpIHsgdmFyIGFyciA9ICgpID0+IHsgZm9yIGF3YWl0KGNvbnN0IHZhbHVlIG9mIGZv
bygpKSB7fSB9IH0iKTsKKyAgICBjaGVja1N5bnRheEVycm9yKCIndXNlIHN0cmljdCc7IHZhciBh
MSA9IGFzeW5jIGZ1bmN0aW9uKmFzeW5jR2VuV2l0aE5hbWUxKCl7IGZvciBhd2FpdChjb25zdCB2
YWx1ZSBpbiBmb28oKSkge30gfSIpOworICAgIGNoZWNrU3ludGF4RXJyb3IoIid1c2Ugc3RyaWN0
JzsgdmFyIGExID0gYXN5bmMgZnVuY3Rpb24gYXN5bmNXaXRoTmFtZTEoKXsgZm9yIGF3YWl0KGNv
bnN0IHZhbHVlIGluIGZvbygpKSB7fSB9Iik7CisgICAgY2hlY2tTeW50YXhFcnJvcigiJ3VzZSBz
dHJpY3QnOyB2YXIgYTEgPSBhc3luYyBmdW5jdGlvbiBhc3luY1dpdGhOYW1lMSgpeyBmb3IgYXdh
aXQgKDs7KSB7fSB9Iik7CisgICAgY2hlY2tTeW50YXhFcnJvcigiJ3VzZSBzdHJpY3QnOyB2YXIg
YTEgPSBhc3luYyBmdW5jdGlvbiBhc3luY1dpdGhOYW1lMSgpeyBmb3IgYXdhaXQgKGxldCB2ID0g
NDs7KSB7fSB9Iik7CisgICAgY2hlY2tTeW50YXhFcnJvcigiJ3VzZSBzdHJpY3QnOyB2YXIgYTEg
PSBhc3luYyBmdW5jdGlvbiBhc3luY1dpdGhOYW1lMSgpeyBmb3IgYXdhaXQgKGxldCB2IG9mIGYo
KTs7KSB7fSB9Iik7CisgICAgY2hlY2tTeW50YXhFcnJvcigiJ3VzZSBzdHJpY3QnOyB2YXIgYTEg
PSBhc3luYyBmdW5jdGlvbiBhc3luY1dpdGhOYW1lMSgpeyBmb3IgYXdhaXQgKGxldCB2IG9mIGJv
bzs7KSB7fSB9Iik7CisgICAgY2hlY2tTeW50YXhFcnJvcigiJ3VzZSBzdHJpY3QnOyB2YXIgYTEg
PSBhc3luYyBmdW5jdGlvbiBhc3luY1dpdGhOYW1lMSgpeyBmb3IgYXdhaXQgKGxldCB2IG9mIGJv
byBvZikge30gfSIpOworICAgIGNoZWNrU3ludGF4RXJyb3IoIid1c2Ugc3RyaWN0JzsgYXN5bmMg
ZnVuY3Rpb24gYXN5bmNXaXRoTmFtZTEoKXsgZm9yIGF3YWl0IChsZXQgdiBvZiBib28gaW4pIHt9
IH0iKTsKK30pKCk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9hc3luYy1pdGVyYXRpb24t
Zm9yLWF3YWl0LW9mLmpzIGIvSlNUZXN0cy9zdHJlc3MvYXN5bmMtaXRlcmF0aW9uLWZvci1hd2Fp
dC1vZi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi42ZWNhZDBmNzZkOThkYzAyYWYyZWY5ZTkxMDlkN2E2ZGMwYjBk
YTQ5Ci0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9zdHJlc3MvYXN5bmMtaXRlcmF0aW9uLWZv
ci1hd2FpdC1vZi5qcwpAQCAtMCwwICsxLDI4MCBAQAordmFyIGFzc2VydCA9IGZ1bmN0aW9uIChy
ZXN1bHQsIGV4cGVjdGVkLCBtZXNzYWdlID0gIiIpIHsKKyAgaWYgKHJlc3VsdCAhPT0gZXhwZWN0
ZWQpIHsKKyAgICB0aHJvdyBuZXcgRXJyb3IoJ0Vycm9yIGluIGFzc2VydC4gRXhwZWN0ZWQgIicg
KyBleHBlY3RlZCArICciIGJ1dCB3YXMgIicgKyByZXN1bHQgKyAnIjonICsgbWVzc2FnZSApOwor
ICB9Cit9OwordmFyIHJlc3VsdCA9IDA7Cithc3luYyBmdW5jdGlvbiAqIGZvbygpIHsgeWllbGQg
MTsgeWllbGQgUHJvbWlzZS5yZXNvbHZlKDIpOyByZXR1cm4gMzt9OworCithc3luYyBmdW5jdGlv
biBib28gKCkgeworICAgIGZvciBhd2FpdCAoY29uc3QgdmFsdWUgb2YgZm9vKCkpIHsKKyAgICAg
ICAgcmVzdWx0ID0gcmVzdWx0ICsgdmFsdWU7CisgICAgfQorfQorCitib28oKTsKKworZHJhaW5N
aWNyb3Rhc2tzKCk7CisKK2Fzc2VydChyZXN1bHQsIDMpOworCityZXN1bHQgPSAgMDsKKworewor
ICAgIGNvbnN0IGJvbyA9ICBhc3luYyBmdW5jdGlvbiAoKSB7CisgICAgICAgIGZvciBhd2FpdCAo
Y29uc3QgdmFsIG9mIGZvbygpKSB7CisgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgKyB2YWw7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBib28oKTsKKworICAgIGRyYWluTWljcm90YXNrcygp
OworCisgICAgYXNzZXJ0KHJlc3VsdCwgMyk7Cit9CisKK3sKKyAgICByZXN1bHQgPSAgMDsKKyAg
ICBjb25zdCBib28gPSBhc3luYyBmdW5jdGlvbiAoKSB7CisgICAgICAgIGZvciBhd2FpdCAoY29u
c3QgdmFsIG9mIFsxLCAyLCAzXSkgeworICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICsgdmFs
OworICAgICAgICB9CisgICAgfQorCisgICAgYm9vKCk7CisKKyAgICBkcmFpbk1pY3JvdGFza3Mo
KTsKKworICAgIGFzc2VydChyZXN1bHQsIDYpOworfQorCit7IAorICAgIGxldCBlcnJvciA9IGZh
bHNlOworCisgICAgY29uc3QgYm9vID0gYXN5bmMgZnVuY3Rpb24gKCkgeworICAgICAgICBmb3Ig
YXdhaXQgKGNvbnN0IHZhbCBvZiAxKSB7CisgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgKyB2
YWw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBib28oKS5jYXRjaChyYWlzZWRFcnJvciA9PiBl
cnJvciA9IHJhaXNlZEVycm9yIGluc3RhbmNlb2YgVHlwZUVycm9yKTsKKworICAgIGRyYWluTWlj
cm90YXNrcygpOworCisgICAgYXNzZXJ0KGVycm9yLCB0cnVlKTsKK30KKworeworICAgIGxldCBj
b250ZXIgPSAwOworICAgIGNvbnN0IG8gPSB7CisgICAgICAgIFtTeW1ib2wuYXN5bmNJdGVyYXRv
cl0oKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcworICAgICAgICB9LAorICAgICAgICBuZXh0
KGFyZ3MpIHsKKyAgICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUgfQorICAgICAgICB9Cisg
ICAgfQorCisgICAgcmVzdWx0ID0gLTE7CisgICAgY29uc3QgYm9vID0gYXN5bmMgZnVuY3Rpb24g
KCkgeworICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IHZhbCBvZiBvKSB7CisgICAgICAgICAgICBj
b250ZXIrKzsKKyAgICAgICAgICAgIHJlc3VsdCA9IHZhbDsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGJvbygpOworCisgICAgZHJhaW5NaWNyb3Rhc2tzKCk7CisKKyAgICBhc3NlcnQoY29udGVy
LCAwKTsKKyAgICBhc3NlcnQocmVzdWx0LCAtMSk7Cit9CisKK3sKKyAgICBsZXQgY29udGVyID0g
MDsKKyAgICBjb25zdCBvID0geworICAgICAgICBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkgewor
ICAgICAgICAgICAgdGhpcy5pbmRleCA9IDA7CisgICAgICAgICAgICByZXR1cm4gdGhpcworICAg
ICAgICB9LAorICAgICAgICBuZXh0KGFyZ3MpIHsKKyAgICAgICAgICAgIHRoaXMuaW5kZXgrKzsK
KyAgICAgICAgICAgIGlmICh0aGlzLmluZGV4IDw9IDEwKQorICAgICAgICAgICAgICAgIHJldHVy
biB7IGRvbmU6IGZhbHNlLCB2YWx1ZTogdGhpcy5pbmRleCB9OworICAgICAgICAgICAgZWxzZSAK
KyAgICAgICAgICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogdGhpcy5pbmRleCB9
OworICAgICAgICB9CisgICAgfQorCisgICAgcmVzdWx0ID0gMDsKKyAgICBjb25zdCBib28gPSBh
c3luYyBmdW5jdGlvbiAoKSB7CisgICAgICAgIGZvciBhd2FpdCAoY29uc3QgdmFsIG9mIG8pIHsK
KyAgICAgICAgICAgIGNvbnRlcisrOworICAgICAgICAgICAgcmVzdWx0ICs9IHZhbDsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGJvbygpOworCisgICAgZHJhaW5NaWNyb3Rhc2tzKCk7CisKKyAg
ICBhc3NlcnQoY29udGVyLCAxMCk7CisgICAgYXNzZXJ0KHJlc3VsdCwgNTUpOworfQorCit7Cisg
ICAgbGV0IGNvbnRlciA9IDA7CisgICAgbGV0IGVycm9yID0gZmFsc2U7CisKKyAgICBjb25zdCBv
ID0geworICAgICAgICBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkgeworICAgICAgICAgICAgdGhp
cy5pbmRleCA9IDA7CisgICAgICAgICAgICByZXR1cm4gdGhpcworICAgICAgICB9LAorICAgICAg
ICBuZXh0KGFyZ3MpIHsKKyAgICAgICAgICAgIHRoaXMuaW5kZXgrKzsKKyAgICAgICAgICAgIGlm
ICh0aGlzLmluZGV4IDw9IDEwKQorICAgICAgICAgICAgICAgIHJldHVybiB7IGRvbmU6IGZhbHNl
LCB2YWx1ZTogdGhpcy5pbmRleCB9OworICAgICAgICAgICAgZWxzZSAKKyAgICAgICAgICAgICAg
ICB0aHJvdyBuZXcgRXJyb3IoJ3NvbWUgZXJyb3InKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHJlc3VsdCA9IDA7CisgICAgY29uc3QgYm9vID0gYXN5bmMgZnVuY3Rpb24gKCkgeworICAgICAg
ICBmb3IgYXdhaXQgKGNvbnN0IHZhbCBvZiBvKSB7CisgICAgICAgICAgICBjb250ZXIrKzsKKyAg
ICAgICAgICAgIHJlc3VsdCArPSB2YWw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBib28oKS5j
YXRjaChlID0+IHsgZXJyb3IgPSBlIGluc3RhbmNlb2YgRXJyb3IgJiYgZS5tZXNzYWdlID09PSAn
c29tZSBlcnJvcic7IH0pOworCisgICAgZHJhaW5NaWNyb3Rhc2tzKCk7CisKKyAgICBhc3NlcnQo
Y29udGVyLCAxMCk7CisgICAgYXNzZXJ0KHJlc3VsdCwgNTUpOworICAgIGFzc2VydChlcnJvciwg
dHJ1ZSk7Cit9CisKK3sKKyAgICBsZXQgY29udGVyID0gMDsKKyAgICBsZXQgZXJyb3IgPSBmYWxz
ZTsKKyAgICBsZXQgZW1wdHlQYXJhbSA9IGZhbHNlOworCisgICAgY29uc3QgbyA9IHsKKyAgICAg
ICAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpIHsKKyAgICAgICAgICAgIHRoaXMuaW5kZXggPSAw
OworICAgICAgICAgICAgcmV0dXJuIHRoaXMKKyAgICAgICAgfSwKKyAgICAgICAgbmV4dChhcmdz
KSB7CisgICAgICAgICAgICBlbXB0eVBhcmFtID0gYXJncyA9PT0gdW5kZWZpbmVkOworICAgICAg
ICAgICAgdGhpcy5pbmRleCsrOworICAgICAgICAgICAgaWYgKHRoaXMuaW5kZXggPD0gMTApCisg
ICAgICAgICAgICAgICAgcmV0dXJuIHsgZG9uZTogZmFsc2UsIHZhbHVlOiB0aGlzLmluZGV4IH07
CisgICAgICAgICAgICBlbHNlIAorICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc29t
ZSBlcnJvcicpOworICAgICAgICB9CisgICAgfQorCisgICAgcmVzdWx0ID0gMDsKKyAgICBjb25z
dCBib28gPSBhc3luYyBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBm
b3IgYXdhaXQgKGNvbnN0IHZhbCBvZiBvKSB7CisgICAgICAgICAgICAgICAgY29udGVyKys7Cisg
ICAgICAgICAgICAgICAgcmVzdWx0ICs9IHZhbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBj
YXRjaCAoZSkgeworICAgICAgICAgICAgZXJyb3IgPSAgZSBpbnN0YW5jZW9mIEVycm9yICYmIGUu
bWVzc2FnZSA9PT0gJ3NvbWUgZXJyb3InOworICAgICAgICB9CisgICAgfQorCisgICAgYm9vKCk7
CisKKyAgICBkcmFpbk1pY3JvdGFza3MoKTsKKworICAgIGFzc2VydChjb250ZXIsIDEwKTsKKyAg
ICBhc3NlcnQocmVzdWx0LCA1NSk7CisgICAgYXNzZXJ0KGVycm9yLCB0cnVlKTsKKyAgICBhc3Nl
cnQoZW1wdHlQYXJhbSwgdHJ1ZSk7Cit9CisKK3sKKyAgICBsZXQgY29udGVyID0gMDsKKyAgICBs
ZXQgZXJyb3IgPSBmYWxzZTsKKworICAgIGNvbnN0IG8gPSB7CisgICAgICAgIFtTeW1ib2wuYXN5
bmNJdGVyYXRvcl0oKSB7CisgICAgICAgICAgICB0aGlzLmluZGV4ID0gMDsKKyAgICAgICAgICAg
IHJldHVybiB0aGlzCisgICAgICAgIH0sCisgICAgICAgIG5leHQoYXJncykgeworICAgICAgICAg
ICAgdGhpcy5pbmRleCsrOworICAgICAgICAgICAgaWYgKHRoaXMuaW5kZXggPD0gMTApCisgICAg
ICAgICAgICAgICAgcmV0dXJuIHsgZG9uZTogZmFsc2UsIHZhbHVlOiB0aGlzLmluZGV4IH07Cisg
ICAgICAgICAgICBlbHNlIAorICAgICAgICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZh
bHVlOiB0aGlzLmluZGV4IH07CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXN1bHQgPSAwOwor
ICAgIGNvbnN0IGJvbyA9IGFzeW5jIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRydWUpIHsK
KyAgICAgICAgICAgIGZvciBhd2FpdCAoY29uc3QgdmFsIG9mIG8pIHsKKyAgICAgICAgICAgICAg
ICBjb250ZXIrKzsKKyAgICAgICAgICAgICAgICByZXN1bHQgKz0gdmFsOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorCisgICAgYm9vKCk7CisKKyAgICBkcmFpbk1pY3JvdGFza3Mo
KTsKKworICAgIGFzc2VydChjb250ZXIsIDEwKTsKKyAgICBhc3NlcnQocmVzdWx0LCA1NSk7Cit9
CisKK3sKKyAgICBsZXQgY29udGVyID0gMDsKKyAgICBsZXQgZXJyb3IgPSBmYWxzZTsKKyAgICBs
ZXQgZW1wdHlQYXJhbSA9IGZhbHNlOworCisgICAgY29uc3QgbyA9IHsKKyAgICAgICAgW1N5bWJv
bC5pdGVyYXRvcl0oKSB7CisgICAgICAgICAgICB0aGlzLmluZGV4ID0gMDsKKyAgICAgICAgICAg
IHJldHVybiB0aGlzCisgICAgICAgIH0sCisgICAgICAgIG5leHQoYXJncykgeworICAgICAgICAg
ICAgZW1wdHlQYXJhbSA9IGFyZ3MgPT09IHVuZGVmaW5lZDsKKyAgICAgICAgICAgIHRoaXMuaW5k
ZXgrKzsKKyAgICAgICAgICAgIGlmICh0aGlzLmluZGV4IDw9IDEwKQorICAgICAgICAgICAgICAg
IHJldHVybiB7IGRvbmU6IGZhbHNlLCB2YWx1ZTogdGhpcy5pbmRleCB9OworICAgICAgICAgICAg
ZWxzZSAKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NvbWUgZXJyb3InKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHJlc3VsdCA9IDA7CisgICAgY29uc3QgYm9vID0gYXN5bmMg
ZnVuY3Rpb24gKCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgZm9yIGF3YWl0IChjb25z
dCB2YWwgb2YgbykgeworICAgICAgICAgICAgICAgIGNvbnRlcisrOworICAgICAgICAgICAgICAg
IHJlc3VsdCArPSB2YWw7CisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAg
ICAgICAgICAgIGVycm9yID0gIGUgaW5zdGFuY2VvZiBFcnJvciAmJiBlLm1lc3NhZ2UgPT09ICdz
b21lIGVycm9yJzsKKyAgICAgICAgfQorICAgIH0KKworICAgIGJvbygpOworCisgICAgZHJhaW5N
aWNyb3Rhc2tzKCk7CisKKyAgICBhc3NlcnQoY29udGVyLCAxMCk7CisgICAgYXNzZXJ0KHJlc3Vs
dCwgNTUpOworICAgIGFzc2VydChlcnJvciwgdHJ1ZSk7CisgICAgYXNzZXJ0KGVtcHR5UGFyYW0s
IHRydWUpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319354</attachid>
            <date>2017-08-30 01:27:25 -0700</date>
            <delta_ts>2017-08-30 02:51:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-166698-20170830112722.patch</filename>
            <type>text/plain</type>
            <size>33800</size>
            <attacher name="GSkachkov">gskachkov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIxMTg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA3
ODQ2MzdjZGNjMTM5MWFjN2NhYTQzNWZjNTI5YzU2YTcyYTYyNDY3Li4xYjUyOWJmMDAzZDJiMDI2
YjEwZTAzZjJkMmY0MDU1MDMyNTNjMzA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzMiBAQAorMjAxNy0wOC0zMCAgT2xla3NhbmRyIFNrYWNoa292ICA8Z3NrYWNoa292QGdt
YWlsLmNvbT4KKworICAgICAgICBbRVNOZXh0XSBBc3luYyBpdGVyYXRpb24gLSBJbXBsZW1lbnQg
YXN5bmMgaXRlcmF0aW9uIHN0YXRlbWVudDogZm9yLWF3YWl0LW9mCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY2OTgKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgZm9y
LWF3YWl0LW9mIHN0YXRlbWVudC4KKworICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdl
bmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RW51bWVy
YXRpb24pOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEl0ZXJhdG9yTmV4
dCk6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmg6CisgICAgICAg
ICogcGFyc2VyL0FTVEJ1aWxkZXIuaDoKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRl
Rm9yT2ZMb29wKToKKyAgICAgICAgKiBwYXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5oOgorICAgICAg
ICAoSlNDOjpGb3JPZk5vZGU6OkZvck9mTm9kZSk6CisgICAgICAgICogcGFyc2VyL05vZGVzLmg6
CisgICAgICAgIChKU0M6OkZvck9mTm9kZTo6aXNGb3JBd2FpdCBjb25zdCk6CisgICAgICAgICog
cGFyc2VyL1BhcnNlci5jcHA6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJz
ZUZvclN0YXRlbWVudCk6CisgICAgICAgICogcGFyc2VyL1BhcnNlci5oOgorICAgICAgICAoSlND
OjpTY29wZTo6c2V0U291cmNlUGFyc2VNb2RlKToKKyAgICAgICAgKEpTQzo6U2NvcGU6OnNldElz
RnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpTY29wZTo6c2V0SXNBc3luY0dlbmVyYXRvckZ1bmN0
aW9uKToKKyAgICAgICAgKEpTQzo6U2NvcGU6OnNldElzQXN5bmNHZW5lcmF0b3JGdW5jdGlvbkJv
ZHkpOgorICAgICAgICAqIHBhcnNlci9TeW50YXhDaGVja2VyLmg6CisgICAgICAgIChKU0M6OlN5
bnRheENoZWNrZXI6OmNyZWF0ZUZvck9mTG9vcCk6CisKIDIwMTctMDgtMjQgIENvbW1pdCBRdWV1
ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxp
bmcgb3V0IHIyMjExMTksIHIyMjExMjQsIGFuZCByMjIxMTQzLgpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAppbmRl
eCA2MmI1NjE1NTRjYzAxNGE5YjYyMTY5YTFmYWJjODJjODVlOGZmZDBjLi5kNDU1ZGJkYjNlZjM3
NDAwMjA3ZDI4YjhkZDZkYzM4MjZhZjVjMTFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcApAQCAtNDI5OCwx
NiArNDI5OCwxNSBAQCBib29sIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UmVhZE9ubHlFeGNlcHRp
b25JZk5lZWRlZChjb25zdCBWYXJpYWJsZSYgdmFyaWFibGUpCiAKIHZvaWQgQnl0ZWNvZGVHZW5l
cmF0b3I6OmVtaXRFbnVtZXJhdGlvbihUaHJvd2FibGVFeHByZXNzaW9uRGF0YSogbm9kZSwgRXhw
cmVzc2lvbk5vZGUqIHN1YmplY3ROb2RlLCBjb25zdCBzdGQ6OmZ1bmN0aW9uPHZvaWQoQnl0ZWNv
ZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKik+JiBjYWxsQmFjaywgRm9yT2ZOb2RlKiBmb3JMb29w
Tm9kZSwgUmVnaXN0ZXJJRCogZm9yTG9vcFN5bWJvbFRhYmxlKQogeworICAgIGJvb2wgaXNGb3JB
d2FpdCA9IGZvckxvb3BOb2RlID8gZm9yTG9vcE5vZGUtPmlzRm9yQXdhaXQoKSA6IGZhbHNlOwor
ICAgIEFTU0VSVCghaXNGb3JBd2FpdCB8fCAoaXNGb3JBd2FpdCAmJiBpc0FzeW5jRnVuY3Rpb25Q
YXJzZU1vZGUocGFyc2VNb2RlKCkpKSk7CisKICAgICBDb21wbGV0aW9uUmVjb3JkU2NvcGUgY29t
cGxldGlvblJlY29yZFNjb3BlKCp0aGlzKTsKIAogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzdWJq
ZWN0ID0gbmV3VGVtcG9yYXJ5KCk7CiAgICAgZW1pdE5vZGUoc3ViamVjdC5nZXQoKSwgc3ViamVj
dE5vZGUpOwotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBpdGVyYXRvciA9IGVtaXRHZXRCeUlkKG5l
d1RlbXBvcmFyeSgpLCBzdWJqZWN0LmdldCgpLCBwcm9wZXJ0eU5hbWVzKCkuaXRlcmF0b3JTeW1i
b2wpOwotICAgIHsKLSAgICAgICAgQ2FsbEFyZ3VtZW50cyBhcmdzKCp0aGlzLCBudWxscHRyKTsK
LSAgICAgICAgZW1pdE1vdmUoYXJncy50aGlzUmVnaXN0ZXIoKSwgc3ViamVjdC5nZXQoKSk7Ci0g
ICAgICAgIGVtaXRDYWxsKGl0ZXJhdG9yLmdldCgpLCBpdGVyYXRvci5nZXQoKSwgTm9FeHBlY3Rl
ZEZ1bmN0aW9uLCBhcmdzLCBub2RlLT5kaXZvdCgpLCBub2RlLT5kaXZvdFN0YXJ0KCksIG5vZGUt
PmRpdm90RW5kKCksIERlYnVnZ2FibGVDYWxsOjpObyk7Ci0gICAgfQorCisgICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IGl0ZXJhdG9yID0gaXNGb3JBd2FpdCA/IGVtaXRHZXRBc3luY0l0ZXJhdG9yKHN1
YmplY3QuZ2V0KCksIG5vZGUpIDogZW1pdEdldEl0ZXJhdG9yKHN1YmplY3QuZ2V0KCksIG5vZGUp
OwogCiAgICAgUmVmPExhYmVsPiBsb29wRG9uZSA9IG5ld0xhYmVsKCk7CiAgICAgUmVmPExhYmVs
PiB0cnlTdGFydExhYmVsID0gbmV3TGFiZWwoKTsKQEAgLTQzNjgsNiArNDM2NywxMCBAQCB2b2lk
IEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RW51bWVyYXRpb24oVGhyb3dhYmxlRXhwcmVzc2lvbkRh
dGEqIG5vZGUsIEV4cHJlc3NpbwogICAgICAgICAgICAgQ2FsbEFyZ3VtZW50cyByZXR1cm5Bcmd1
bWVudHMoKnRoaXMsIG51bGxwdHIpOwogICAgICAgICAgICAgZW1pdE1vdmUocmV0dXJuQXJndW1l
bnRzLnRoaXNSZWdpc3RlcigpLCBpdGVyYXRvci5nZXQoKSk7CiAgICAgICAgICAgICBlbWl0Q2Fs
bCh2YWx1ZS5nZXQoKSwgcmV0dXJuTWV0aG9kLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIHJl
dHVybkFyZ3VtZW50cywgbm9kZS0+ZGl2b3QoKSwgbm9kZS0+ZGl2b3RTdGFydCgpLCBub2RlLT5k
aXZvdEVuZCgpLCBEZWJ1Z2dhYmxlQ2FsbDo6Tm8pOworCisgICAgICAgICAgICBpZiAoaXNGb3JB
d2FpdCkKKyAgICAgICAgICAgICAgICBlbWl0QXdhaXQodmFsdWUuZ2V0KCkpOworCiAgICAgICAg
ICAgICBlbWl0SnVtcElmVHJ1ZShlbWl0SXNPYmplY3QobmV3VGVtcG9yYXJ5KCksIHZhbHVlLmdl
dCgpKSwgZmluYWxseURvbmUuZ2V0KCkpOwogICAgICAgICAgICAgZW1pdFRocm93VHlwZUVycm9y
KEFTQ0lJTGl0ZXJhbCgiSXRlcmF0b3IgcmVzdWx0IGludGVyZmFjZSBpcyBub3QgYW4gb2JqZWN0
LiIpKTsKIApAQCAtNDQwOSw3ICs0NDEyLDggQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1p
dEVudW1lcmF0aW9uKFRocm93YWJsZUV4cHJlc3Npb25EYXRhKiBub2RlLCBFeHByZXNzaW8KICAg
ICAgICAgfQogCiAgICAgICAgIHsKLSAgICAgICAgICAgIGVtaXRJdGVyYXRvck5leHQodmFsdWUu
Z2V0KCksIGl0ZXJhdG9yLmdldCgpLCBub2RlKTsKKyAgICAgICAgICAgIGVtaXRJdGVyYXRvck5l
eHQodmFsdWUuZ2V0KCksIGl0ZXJhdG9yLmdldCgpLCBub2RlLCBpc0ZvckF3YWl0ID8gRW1pdEF3
YWl0OjpZZXMgOiBFbWl0QXdhaXQ6Ok5vKTsKKwogICAgICAgICAgICAgZW1pdEp1bXBJZlRydWUo
ZW1pdEdldEJ5SWQobmV3VGVtcG9yYXJ5KCksIHZhbHVlLmdldCgpLCBwcm9wZXJ0eU5hbWVzKCku
ZG9uZSksIGxvb3BEb25lLmdldCgpKTsKICAgICAgICAgICAgIGVtaXRHZXRCeUlkKHZhbHVlLmdl
dCgpLCB2YWx1ZS5nZXQoKSwgcHJvcGVydHlOYW1lcygpLnZhbHVlKTsKICAgICAgICAgICAgIGVt
aXRKdW1wKGxvb3BTdGFydC5nZXQoKSk7CkBAIC00NDIxLDcgKzQ0MjUsNyBAQCB2b2lkIEJ5dGVj
b2RlR2VuZXJhdG9yOjplbWl0RW51bWVyYXRpb24oVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEqIG5v
ZGUsIEV4cHJlc3NpbwogICAgICAgICBwb3BGaW5hbGx5Q29udHJvbEZsb3dTY29wZSgpOwogICAg
ICAgICBpZiAoYnJlYWtMYWJlbElzQm91bmQpIHsKICAgICAgICAgICAgIC8vIEl0ZXJhdG9yQ2xv
c2Ugc2VxdWVuY2UgZm9yIGJyZWFrLWVkIGNvbnRyb2wgZmxvdy4KLSAgICAgICAgICAgIGVtaXRJ
dGVyYXRvckNsb3NlKGl0ZXJhdG9yLmdldCgpLCBub2RlKTsKKyAgICAgICAgICAgIGVtaXRJdGVy
YXRvckNsb3NlKGl0ZXJhdG9yLmdldCgpLCBub2RlLCBpc0ZvckF3YWl0ID8gRW1pdEF3YWl0OjpZ
ZXMgOiBFbWl0QXdhaXQ6Ok5vKTsKICAgICAgICAgfQogICAgIH0KICAgICBlbWl0TGFiZWwobG9v
cERvbmUuZ2V0KCkpOwpAQCAtNDU3MywxMyArNDU3NywxNiBAQCBSZWdpc3RlcklEKiBCeXRlY29k
ZUdlbmVyYXRvcjo6ZW1pdElzRW1wdHkoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMp
CiAgICAgcmV0dXJuIGRzdDsKIH0KICAgICAKLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0SXRlcmF0b3JOZXh0KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogaXRlcmF0b3Is
IGNvbnN0IFRocm93YWJsZUV4cHJlc3Npb25EYXRhKiBub2RlKQorUmVnaXN0ZXJJRCogQnl0ZWNv
ZGVHZW5lcmF0b3I6OmVtaXRJdGVyYXRvck5leHQoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklE
KiBpdGVyYXRvciwgY29uc3QgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEqIG5vZGUsIEVtaXRBd2Fp
dCBkb0VtaXRBd2FpdCkKIHsKICAgICB7CiAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBuZXh0
ID0gZW1pdEdldEJ5SWQobmV3VGVtcG9yYXJ5KCksIGl0ZXJhdG9yLCBwcm9wZXJ0eU5hbWVzKCku
bmV4dCk7CiAgICAgICAgIENhbGxBcmd1bWVudHMgbmV4dEFyZ3VtZW50cygqdGhpcywgbnVsbHB0
cik7CiAgICAgICAgIGVtaXRNb3ZlKG5leHRBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGl0ZXJh
dG9yKTsKICAgICAgICAgZW1pdENhbGwoZHN0LCBuZXh0LmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rp
b24sIG5leHRBcmd1bWVudHMsIG5vZGUtPmRpdm90KCksIG5vZGUtPmRpdm90U3RhcnQoKSwgbm9k
ZS0+ZGl2b3RFbmQoKSwgRGVidWdnYWJsZUNhbGw6Ok5vKTsKKworICAgICAgICBpZiAoZG9FbWl0
QXdhaXQgPT0gRW1pdEF3YWl0OjpZZXMpCisgICAgICAgICAgICBlbWl0QXdhaXQoZHN0KTsKICAg
ICB9CiAgICAgewogICAgICAgICBSZWY8TGFiZWw+IHR5cGVJc09iamVjdCA9IG5ld0xhYmVsKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmgKaW5kZXggMTdmNjVmZTljOWM4NzY5MWZkOWFhNDhkMzcyZmQxZTljMzI1ZjQx
YS4uM2Q3YmZlYjk4OTMxYjJlNDg4YjE2NmY0NzViMTFlYzQ0YjhmYzY5MSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3Iu
aApAQCAtNzgwLDcgKzc4MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBSZWdpc3RlcklE
KiBlbWl0SXNEZXJpdmVkQXJyYXkoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpIHsg
cmV0dXJuIGVtaXRJc0NlbGxXaXRoVHlwZShkc3QsIHNyYywgRGVyaXZlZEFycmF5VHlwZSk7IH0K
ICAgICAgICAgdm9pZCBlbWl0UmVxdWlyZU9iamVjdENvZXJjaWJsZShSZWdpc3RlcklEKiB2YWx1
ZSwgY29uc3QgU3RyaW5nJiBlcnJvcik7CiAKLSAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEl0ZXJh
dG9yTmV4dChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGl0ZXJhdG9yLCBjb25zdCBUaHJv
d2FibGVFeHByZXNzaW9uRGF0YSogbm9kZSk7CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJdGVy
YXRvck5leHQoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBpdGVyYXRvciwgY29uc3QgVGhy
b3dhYmxlRXhwcmVzc2lvbkRhdGEqIG5vZGUsIEpTQzo6RW1pdEF3YWl0ID0gSlNDOjpFbWl0QXdh
aXQ6Ok5vKTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEl0ZXJhdG9yTmV4dFdpdGhWYWx1ZShS
ZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGl0ZXJhdG9yLCBSZWdpc3RlcklEKiB2YWx1ZSwg
Y29uc3QgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEqIG5vZGUpOwogICAgICAgICB2b2lkIGVtaXRJ
dGVyYXRvckNsb3NlKFJlZ2lzdGVySUQqIGl0ZXJhdG9yLCBjb25zdCBUaHJvd2FibGVFeHByZXNz
aW9uRGF0YSogbm9kZSwgRW1pdEF3YWl0ID0gRW1pdEF3YWl0OjpObyk7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9BU1RCdWlsZGVyLmgKaW5kZXggNTllZmFlZmZkNTlhM2UyYjFjMTNk
NzMzZTkxMjNmYTdmMTcxODQ2MC4uYjIwZGExOGUxNTc0MmNmYjhhODVkYzc4NWE2MzBhNzY0YTFh
Zjc4NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9BU1RCdWlsZGVy
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9BU1RCdWlsZGVyLmgKQEAgLTYw
MiwxOCArNjAyLDE4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGNyZWF0ZUZvckluTG9vcChs
b2NhdGlvbiwgbGV4cHIsIGl0ZXIsIHN0YXRlbWVudHMsIGRlY2xMb2NhdGlvbiwgZVN0YXJ0LCBl
RGl2b3QsIGVFbmQsIHN0YXJ0LCBlbmQsIGxleGljYWxWYXJpYWJsZXMpOwogICAgIH0KICAgICAK
LSAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVGb3JPZkxvb3AoY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGxocywgRXhwcmVzc2lvbk5vZGUqIGl0ZXIsIFN0
YXRlbWVudE5vZGUqIHN0YXRlbWVudHMsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IEpT
VGV4dFBvc2l0aW9uJiBlU3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBlRGl2b3QsIGNvbnN0
IEpTVGV4dFBvc2l0aW9uJiBlRW5kLCBpbnQgc3RhcnQsIGludCBlbmQsIFZhcmlhYmxlRW52aXJv
bm1lbnQmIGxleGljYWxWYXJpYWJsZXMpCisgICAgU3RhdGVtZW50Tm9kZSogY3JlYXRlRm9yT2ZM
b29wKGJvb2wgaXNGb3JBd2FpdCwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhw
cmVzc2lvbk5vZGUqIGxocywgRXhwcmVzc2lvbk5vZGUqIGl0ZXIsIFN0YXRlbWVudE5vZGUqIHN0
YXRlbWVudHMsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBl
U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBlRGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9u
JiBlRW5kLCBpbnQgc3RhcnQsIGludCBlbmQsIFZhcmlhYmxlRW52aXJvbm1lbnQmIGxleGljYWxW
YXJpYWJsZXMpCiAgICAgewotICAgICAgICBGb3JPZk5vZGUqIHJlc3VsdCA9IG5ldyAobV9wYXJz
ZXJBcmVuYSkgRm9yT2ZOb2RlKGxvY2F0aW9uLCBsaHMsIGl0ZXIsIHN0YXRlbWVudHMsIGxleGlj
YWxWYXJpYWJsZXMpOworICAgICAgICBGb3JPZk5vZGUqIHJlc3VsdCA9IG5ldyAobV9wYXJzZXJB
cmVuYSkgRm9yT2ZOb2RlKGlzRm9yQXdhaXQsIGxvY2F0aW9uLCBsaHMsIGl0ZXIsIHN0YXRlbWVu
dHMsIGxleGljYWxWYXJpYWJsZXMpOwogICAgICAgICByZXN1bHQtPnNldExvYyhzdGFydCwgZW5k
LCBsb2NhdGlvbi5zdGFydE9mZnNldCwgbG9jYXRpb24ubGluZVN0YXJ0T2Zmc2V0KTsKICAgICAg
ICAgc2V0RXhjZXB0aW9uTG9jYXRpb24ocmVzdWx0LCBlU3RhcnQsIGVEaXZvdCwgZUVuZCk7CiAg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIAotICAgIFN0YXRlbWVudE5vZGUqIGNy
ZWF0ZUZvck9mTG9vcChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBEZXN0cnVjdHVy
aW5nUGF0dGVybk5vZGUqIHBhdHRlcm4sIEV4cHJlc3Npb25Ob2RlKiBpdGVyLCBTdGF0ZW1lbnRO
b2RlKiBzdGF0ZW1lbnRzLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGRlY2xMb2NhdGlvbiwgY29u
c3QgSlNUZXh0UG9zaXRpb24mIGVTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGVEaXZvdCwg
Y29uc3QgSlNUZXh0UG9zaXRpb24mIGVFbmQsIGludCBzdGFydCwgaW50IGVuZCwgVmFyaWFibGVF
bnZpcm9ubWVudCYgbGV4aWNhbFZhcmlhYmxlcykKKyAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVG
b3JPZkxvb3AoYm9vbCBpc0ZvckF3YWl0LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9u
LCBEZXN0cnVjdHVyaW5nUGF0dGVybk5vZGUqIHBhdHRlcm4sIEV4cHJlc3Npb25Ob2RlKiBpdGVy
LCBTdGF0ZW1lbnROb2RlKiBzdGF0ZW1lbnRzLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGRlY2xM
b2NhdGlvbiwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGVTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRp
b24mIGVEaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGVFbmQsIGludCBzdGFydCwgaW50IGVu
ZCwgVmFyaWFibGVFbnZpcm9ubWVudCYgbGV4aWNhbFZhcmlhYmxlcykKICAgICB7CiAgICAgICAg
IGF1dG8gbGV4cHIgPSBuZXcgKG1fcGFyc2VyQXJlbmEpIERlc3RydWN0dXJpbmdBc3NpZ25tZW50
Tm9kZShkZWNsTG9jYXRpb24sIHBhdHRlcm4sIG51bGxwdHIpOwotICAgICAgICByZXR1cm4gY3Jl
YXRlRm9yT2ZMb29wKGxvY2F0aW9uLCBsZXhwciwgaXRlciwgc3RhdGVtZW50cywgZGVjbExvY2F0
aW9uLCBlU3RhcnQsIGVEaXZvdCwgZUVuZCwgc3RhcnQsIGVuZCwgbGV4aWNhbFZhcmlhYmxlcyk7
CisgICAgICAgIHJldHVybiBjcmVhdGVGb3JPZkxvb3AoaXNGb3JBd2FpdCwgbG9jYXRpb24sIGxl
eHByLCBpdGVyLCBzdGF0ZW1lbnRzLCBkZWNsTG9jYXRpb24sIGVTdGFydCwgZURpdm90LCBlRW5k
LCBzdGFydCwgZW5kLCBsZXhpY2FsVmFyaWFibGVzKTsKICAgICB9CiAKICAgICBib29sIGlzQmlu
ZGluZ05vZGUoY29uc3QgRGVzdHJ1Y3R1cmluZ1BhdHRlcm4mIHBhdHRlcm4pCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5oCmluZGV4IGIwYmFkZmM5
ODY4NDEzNTBjMWVkNDA5MjU0NDA2NTVkOTdlZTkzNWUuLjM3NjljOTU5YzBlM2IwOTRiZjVlMjk2
ZDhmZDQwYjUzYzRhMDY2OGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvTm9kZUNvbnN0cnVjdG9ycy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
Tm9kZUNvbnN0cnVjdG9ycy5oCkBAIC0xMDQwLDggKzEwNDAsOSBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICB7CiAgICAgfQogICAgIAotICAgIGlubGluZSBGb3JPZk5vZGU6OkZvck9mTm9kZShjb25z
dCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogbGV4cHIsIEV4cHJl
c3Npb25Ob2RlKiBleHByLCBTdGF0ZW1lbnROb2RlKiBzdGF0ZW1lbnQsIFZhcmlhYmxlRW52aXJv
bm1lbnQmIGxleGljYWxWYXJpYWJsZXMpCisgICAgaW5saW5lIEZvck9mTm9kZTo6Rm9yT2ZOb2Rl
KGJvb2wgaXNGb3JBd2FpdCwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVz
c2lvbk5vZGUqIGxleHByLCBFeHByZXNzaW9uTm9kZSogZXhwciwgU3RhdGVtZW50Tm9kZSogc3Rh
dGVtZW50LCBWYXJpYWJsZUVudmlyb25tZW50JiBsZXhpY2FsVmFyaWFibGVzKQogICAgICAgICA6
IEVudW1lcmF0aW9uTm9kZShsb2NhdGlvbiwgbGV4cHIsIGV4cHIsIHN0YXRlbWVudCwgbGV4aWNh
bFZhcmlhYmxlcykKKyAgICAgICAgLCBtX2lzRm9yQXdhaXQoaXNGb3JBd2FpdCkKICAgICB7CiAg
ICAgfQogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rl
cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCmluZGV4IDZmMTczODI4
YjM4MTIxODIxM2RhYWFkMzJjM2JlYTE0YzI1OTAyMTQuLmE1M2E2OWYyZjhjOWZjNWJjNjYxMGRj
YTJlNDkyNGI3NGI1NTdmZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvTm9kZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgKQEAg
LTE1MjMsMTEgKzE1MjMsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgCiAgICAgY2xhc3MgRm9y
T2ZOb2RlIDogcHVibGljIEVudW1lcmF0aW9uTm9kZSB7CiAgICAgcHVibGljOgotICAgICAgICBG
b3JPZk5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvbk5vZGUqLCBFeHByZXNz
aW9uTm9kZSosIFN0YXRlbWVudE5vZGUqLCBWYXJpYWJsZUVudmlyb25tZW50Jik7CisgICAgICAg
IEZvck9mTm9kZShib29sLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSos
IEV4cHJlc3Npb25Ob2RlKiwgU3RhdGVtZW50Tm9kZSosIFZhcmlhYmxlRW52aXJvbm1lbnQmKTsK
ICAgICAgICAgYm9vbCBpc0Zvck9mTm9kZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7
IH0KKyAgICAgICAgYm9vbCBpc0ZvckF3YWl0KCkgY29uc3QgeyByZXR1cm4gbV9pc0ZvckF3YWl0
OyB9CiAKICAgICBwcml2YXRlOgogICAgICAgICB2b2lkIGVtaXRCeXRlY29kZShCeXRlY29kZUdl
bmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgb3ZlcnJpZGU7CisKKyAgICAgICAgY29uc3QgYm9v
bCBtX2lzRm9yQXdhaXQ7CiAgICAgfTsKIAogICAgIGNsYXNzIENvbnRpbnVlTm9kZSA6IHB1Ymxp
YyBTdGF0ZW1lbnROb2RlLCBwdWJsaWMgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEgewpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCmluZGV4IGU3NDhjNTQwZDRjYzg0N2RlOTYw
ZGZjZTY5NmQ3MWVmYjAzMGE5YmQuLjhiYzIwZDIyMDM3YTAwZGJkNzcyNTk4NzM4Njk1YzQ0ZjQ4
Zjg1MjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAKQEAgLTEyNjcs
MTEgKzEyNjcsMTggQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50
IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUZvclN0YXRlbWVudCgKICAgICBBU1NFUlQobWF0Y2go
Rk9SKSk7CiAgICAgSlNUb2tlbkxvY2F0aW9uIGxvY2F0aW9uKHRva2VuTG9jYXRpb24oKSk7CiAg
ICAgaW50IHN0YXJ0TGluZSA9IHRva2VuTGluZSgpOworICAgIGJvb2wgaXNBd2FpdEZvciA9IGZh
bHNlOwogICAgIG5leHQoKTsKIAogICAgIERlcHRoTWFuYWdlciBzdGF0ZW1lbnREZXB0aCgmbV9z
dGF0ZW1lbnREZXB0aCk7CiAgICAgbV9zdGF0ZW1lbnREZXB0aCsrOwogCisgICAgaWYgKE9wdGlv
bnM6OnVzZUFzeW5jSXRlcmF0b3IoKSAmJiBtYXRjaChBV0FJVCkpIHsKKyAgICAgICAgc2VtYW50
aWNGYWlsSWZGYWxzZShjdXJyZW50U2NvcGUoKS0+aXNBc3luY0Z1bmN0aW9uKCksICJmb3ItYXdh
aXQtb2YgY2FuJ3QgYmUgdXNlZCBvbmx5IGluIGFzeW5jIGZ1bmN0aW9uIG9yIGFzeW5jIGdlbmVy
YXRvci4iKTsKKyAgICAgICAgaXNBd2FpdEZvciA9IHRydWU7CisgICAgICAgIG5leHQoKTsKKyAg
ICB9CisKICAgICBoYW5kbGVQcm9kdWN0aW9uT3JGYWlsKE9QRU5QQVJFTiwgIigiLCAic3RhcnQi
LCAiZm9yLWxvb3AgaGVhZGVyIik7CiAgICAgaW50IG5vbkxIU0NvdW50ID0gbV9wYXJzZXJTdGF0
ZS5ub25MSFNDb3VudDsKICAgICBpbnQgZGVjbGFyYXRpb25zID0gMDsKQEAgLTEzNDEsMTEgKzEz
NDgsMTUgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50IFBhcnNl
cjxMZXhlclR5cGU+OjpwYXJzZUZvclN0YXRlbWVudCgKICAgICAgICAgLy8gSGFuZGxlIGZvci1p
biB3aXRoIHZhciBkZWNsYXJhdGlvbgogICAgICAgICBKU1RleHRQb3NpdGlvbiBpbkxvY2F0aW9u
ID0gdG9rZW5TdGFydFBvc2l0aW9uKCk7CiAgICAgICAgIGJvb2wgaXNPZkVudW1lcmF0aW9uID0g
ZmFsc2U7Ci0gICAgICAgIGlmICghY29uc3VtZShJTlRPS0VOKSkgeworICAgICAgICBpZiAoIW1h
dGNoKElOVE9LRU4pKSB7CiAgICAgICAgICAgICBmYWlsSWZGYWxzZShtYXRjaChJREVOVCkgJiYg
Km1fdG9rZW4ubV9kYXRhLmlkZW50ID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPm9mLCAiRXhwZWN0
ZWQgZWl0aGVyICdpbicgb3IgJ29mJyBpbiBlbnVtZXJhdGlvbiBzeW50YXgiKTsKICAgICAgICAg
ICAgIGlzT2ZFbnVtZXJhdGlvbiA9IHRydWU7CiAgICAgICAgICAgICBuZXh0KCk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBmYWlsSWZGYWxzZSghaXNBd2FpdEZvciwgIkV4cGVjdGVk
ICdvZicgaW4gZm9yLWF3YWl0IHN5bnRheCIpOworICAgICAgICAgICAgbmV4dCgpOwogICAgICAg
ICB9CisKICAgICAgICAgYm9vbCBoYXNBbnlBc3NpZ25tZW50cyA9ICEhZm9ySW5Jbml0aWFsaXpl
cjsKICAgICAgICAgaWYgKGhhc0FueUFzc2lnbm1lbnRzKSB7CiAgICAgICAgICAgICBpZiAoaXNP
ZkVudW1lcmF0aW9uKQpAQCAtMTM3MCw4ICsxMzgxLDkgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVC
dWlsZGVyPiBUcmVlU3RhdGVtZW50IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUZvclN0YXRlbWVu
dCgKICAgICAgICAgZ2F0aGVyTGV4aWNhbFZhcmlhYmxlc0lmTmVjZXNzYXJ5KCk7CiAgICAgICAg
IFRyZWVTdGF0ZW1lbnQgcmVzdWx0OwogICAgICAgICBpZiAoaXNPZkVudW1lcmF0aW9uKQotICAg
ICAgICAgICAgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVGb3JPZkxvb3AobG9jYXRpb24sIGZvcklu
VGFyZ2V0LCBleHByLCBzdGF0ZW1lbnQsIGRlY2xMb2NhdGlvbiwgZGVjbHNTdGFydCwgaW5Mb2Nh
dGlvbiwgZXhwckVuZCwgc3RhcnRMaW5lLCBlbmRMaW5lLCAqbGV4aWNhbFZhcmlhYmxlcyk7Cisg
ICAgICAgICAgICByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZUZvck9mTG9vcChpc0F3YWl0Rm9yLCBs
b2NhdGlvbiwgZm9ySW5UYXJnZXQsIGV4cHIsIHN0YXRlbWVudCwgZGVjbExvY2F0aW9uLCBkZWNs
c1N0YXJ0LCBpbkxvY2F0aW9uLCBleHByRW5kLCBzdGFydExpbmUsIGVuZExpbmUsICpsZXhpY2Fs
VmFyaWFibGVzKTsKICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQoIWlzQXdhaXRG
b3IpOwogICAgICAgICAgICAgaWYgKGlzVmFyRGVjbGFyYXRvbiAmJiBmb3JJbkluaXRpYWxpemVy
KQogICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlRm9ySW5Mb29wKGxvY2F0
aW9uLCBkZWNscywgZXhwciwgc3RhdGVtZW50LCBkZWNsTG9jYXRpb24sIGRlY2xzU3RhcnQsIGlu
TG9jYXRpb24sIGV4cHJFbmQsIHN0YXJ0TGluZSwgZW5kTGluZSwgKmxleGljYWxWYXJpYWJsZXMp
OwogICAgICAgICAgICAgZWxzZQpAQCAtMTQwMyw2ICsxNDE1LDcgQEAgdGVtcGxhdGUgPGNsYXNz
IFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUZvclN0
YXRlbWVudCgKICAgICAKICAgICBpZiAobWF0Y2goU0VNSUNPTE9OKSkgewogICAgIHN0YW5kYXJk
Rm9yTG9vcDoKKyAgICAgICAgZmFpbElmRmFsc2UoIWlzQXdhaXRGb3IsICJVbmV4cGVjdGVkIGEg
JzsnIGluIGZvci1hd2FpdC1vZiBoZWFkZXIiKTsKICAgICAgICAgLy8gU3RhbmRhcmQgZm9yIGxv
b3AKICAgICAgICAgaWYgKGRlY2xzKQogICAgICAgICAgICAgcmVjb3JkUGF1c2VMb2NhdGlvbihj
b250ZXh0LmJyZWFrcG9pbnRMb2NhdGlvbihkZWNscykpOwpAQCAtMTQ0MCwxMSArMTQ1MywxNSBA
QCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgUGFyc2VyPExleGVy
VHlwZT46OnBhcnNlRm9yU3RhdGVtZW50KAogZW51bWVyYXRpb25Mb29wOgogICAgIGZhaWxJZkZh
bHNlKG5vbkxIU0NvdW50ID09IG1fcGFyc2VyU3RhdGUubm9uTEhTQ291bnQsICJFeHBlY3RlZCBh
IHJlZmVyZW5jZSBvbiB0aGUgbGVmdCBoYW5kIHNpZGUgb2YgYW4gZW51bWVyYXRpb24gc3RhdGVt
ZW50Iik7CiAgICAgYm9vbCBpc09mRW51bWVyYXRpb24gPSBmYWxzZTsKLSAgICBpZiAoIWNvbnN1
bWUoSU5UT0tFTikpIHsKKyAgICBpZiAoIW1hdGNoKElOVE9LRU4pKSB7CiAgICAgICAgIGZhaWxJ
ZkZhbHNlKG1hdGNoKElERU5UKSAmJiAqbV90b2tlbi5tX2RhdGEuaWRlbnQgPT0gbV92bS0+cHJv
cGVydHlOYW1lcy0+b2YsICJFeHBlY3RlZCBlaXRoZXIgJ2luJyBvciAnb2YnIGluIGVudW1lcmF0
aW9uIHN5bnRheCIpOwogICAgICAgICBpc09mRW51bWVyYXRpb24gPSB0cnVlOwogICAgICAgICBu
ZXh0KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZmFpbElmRmFsc2UoIWlzQXdhaXRGb3IsICJF
eHBlY3RlZCAnb2YnIGluIGZvci1hd2FpdCBzeW50YXgiKTsKKyAgICAgICAgbmV4dCgpOwogICAg
IH0KKwogICAgIFRyZWVFeHByZXNzaW9uIGV4cHIgPSBwYXJzZUV4cHJlc3Npb24oY29udGV4dCk7
CiAgICAgZmFpbElmRmFsc2UoZXhwciwgIkNhbm5vdCBwYXJzZSBzdWJqZWN0IGZvci0iLCBpc09m
RW51bWVyYXRpb24gPyAib2YiIDogImluIiwgIiBzdGF0ZW1lbnQiKTsKICAgICByZWNvcmRQYXVz
ZUxvY2F0aW9uKGNvbnRleHQuYnJlYWtwb2ludExvY2F0aW9uKGV4cHIpKTsKQEAgLTE0NjIsMTcg
KzE0NzksMjEgQEAgZW51bWVyYXRpb25Mb29wOgogICAgIGlmIChwYXR0ZXJuKSB7CiAgICAgICAg
IEFTU0VSVCghZGVjbHMpOwogICAgICAgICBpZiAoaXNPZkVudW1lcmF0aW9uKQotICAgICAgICAg
ICAgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVGb3JPZkxvb3AobG9jYXRpb24sIHBhdHRlcm4sIGV4
cHIsIHN0YXRlbWVudCwgZGVjbExvY2F0aW9uLCBkZWNsc1N0YXJ0LCBkZWNsc0VuZCwgZXhwckVu
ZCwgc3RhcnRMaW5lLCBlbmRMaW5lLCAqbGV4aWNhbFZhcmlhYmxlcyk7Ci0gICAgICAgIGVsc2Ug
CisgICAgICAgICAgICByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZUZvck9mTG9vcChpc0F3YWl0Rm9y
LCBsb2NhdGlvbiwgcGF0dGVybiwgZXhwciwgc3RhdGVtZW50LCBkZWNsTG9jYXRpb24sIGRlY2xz
U3RhcnQsIGRlY2xzRW5kLCBleHByRW5kLCBzdGFydExpbmUsIGVuZExpbmUsICpsZXhpY2FsVmFy
aWFibGVzKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQoIWlzQXdhaXRGb3Ip
OwogICAgICAgICAgICAgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVGb3JJbkxvb3AobG9jYXRpb24s
IHBhdHRlcm4sIGV4cHIsIHN0YXRlbWVudCwgZGVjbExvY2F0aW9uLCBkZWNsc1N0YXJ0LCBkZWNs
c0VuZCwgZXhwckVuZCwgc3RhcnRMaW5lLCBlbmRMaW5lLCAqbGV4aWNhbFZhcmlhYmxlcyk7Cisg
ICAgICAgIH0KIAogICAgICAgICBwb3BMZXhpY2FsU2NvcGVJZk5lY2Vzc2FyeSgpOwogICAgICAg
ICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICBpZiAoaXNPZkVudW1lcmF0aW9uKQotICAgICAg
ICByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZUZvck9mTG9vcChsb2NhdGlvbiwgZGVjbHMsIGV4cHIs
IHN0YXRlbWVudCwgZGVjbExvY2F0aW9uLCBkZWNsc1N0YXJ0LCBkZWNsc0VuZCwgZXhwckVuZCwg
c3RhcnRMaW5lLCBlbmRMaW5lLCAqbGV4aWNhbFZhcmlhYmxlcyk7Ci0gICAgZWxzZQorICAgICAg
ICByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZUZvck9mTG9vcChpc0F3YWl0Rm9yLCBsb2NhdGlvbiwg
ZGVjbHMsIGV4cHIsIHN0YXRlbWVudCwgZGVjbExvY2F0aW9uLCBkZWNsc1N0YXJ0LCBkZWNsc0Vu
ZCwgZXhwckVuZCwgc3RhcnRMaW5lLCBlbmRMaW5lLCAqbGV4aWNhbFZhcmlhYmxlcyk7CisgICAg
ZWxzZSB7CisgICAgICAgIEFTU0VSVCghaXNBd2FpdEZvcik7CiAgICAgICAgIHJlc3VsdCA9IGNv
bnRleHQuY3JlYXRlRm9ySW5Mb29wKGxvY2F0aW9uLCBkZWNscywgZXhwciwgc3RhdGVtZW50LCBk
ZWNsTG9jYXRpb24sIGRlY2xzU3RhcnQsIGRlY2xzRW5kLCBleHByRW5kLCBzdGFydExpbmUsIGVu
ZExpbmUsICpsZXhpY2FsVmFyaWFibGVzKTsKKyAgICB9CiAgICAgcG9wTGV4aWNhbFNjb3BlSWZO
ZWNlc3NhcnkoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvUGFyc2VyLmgKaW5kZXggNzdjZjBjZWMxOWY1YjIyOGI2OTJlM2FiOWM4MTBlOTg1ODY5OTE4
ZC4uYjFlYWQ3MTEzZTMzYjdjODM0NTU2MzA1MjRmMTQ5YTcwNzdlNGFhZiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCkBAIC0yMjYsOCArMjI2LDcgQEAgcHVibGljOgogICAg
IHsKICAgICAgICAgc3dpdGNoIChtb2RlKSB7CiAgICAgICAgIGNhc2UgU291cmNlUGFyc2VNb2Rl
OjpBc3luY0dlbmVyYXRvckJvZHlNb2RlOgotICAgICAgICAgICAgc2V0SXNBc3luY0Z1bmN0aW9u
Qm9keSgpOwotICAgICAgICAgICAgc2V0SXNHZW5lcmF0b3IoKTsKKyAgICAgICAgICAgIHNldElz
QXN5bmNHZW5lcmF0b3JGdW5jdGlvbkJvZHkoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIFNvdXJjZVBhcnNlTW9kZTo6QXN5bmNBcnJvd0Z1bmN0aW9uQm9keU1vZGU6CiAgICAg
ICAgICAgICBzZXRJc0FzeW5jQXJyb3dGdW5jdGlvbkJvZHkoKTsKQEAgLTI0OCw4ICsyNDcsNyBA
QCBwdWJsaWM6CiAKICAgICAgICAgY2FzZSBTb3VyY2VQYXJzZU1vZGU6OkFzeW5jR2VuZXJhdG9y
V3JhcHBlck1ldGhvZE1vZGU6CiAgICAgICAgIGNhc2UgU291cmNlUGFyc2VNb2RlOjpBc3luY0dl
bmVyYXRvcldyYXBwZXJGdW5jdGlvbk1vZGU6Ci0gICAgICAgICAgICBzZXRJc0FzeW5jRnVuY3Rp
b24oKTsKLSAgICAgICAgICAgIHNldElzR2VuZXJhdG9yRnVuY3Rpb24oKTsKKyAgICAgICAgICAg
IHNldElzQXN5bmNHZW5lcmF0b3JGdW5jdGlvbigpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
CiAgICAgICAgIGNhc2UgU291cmNlUGFyc2VNb2RlOjpOb3JtYWxGdW5jdGlvbk1vZGU6CkBAIC03
MTEsNiArNzA5LDggQEAgcHJpdmF0ZToKICAgICAgICAgbV9pc0dlbmVyYXRvckJvdW5kYXJ5ID0g
ZmFsc2U7CiAgICAgICAgIG1faXNBcnJvd0Z1bmN0aW9uQm91bmRhcnkgPSBmYWxzZTsKICAgICAg
ICAgbV9pc0Fycm93RnVuY3Rpb24gPSBmYWxzZTsKKyAgICAgICAgbV9pc0FzeW5jRnVuY3Rpb24g
PSBmYWxzZTsKKyAgICAgICAgbV9pc0FzeW5jRnVuY3Rpb25Cb3VuZGFyeSA9IGZhbHNlOwogICAg
IH0KIAogICAgIHZvaWQgc2V0SXNHZW5lcmF0b3JGdW5jdGlvbigpCkBAIC03NDYsNiArNzQ2LDIz
IEBAIHByaXZhdGU6CiAgICAgICAgIG1faXNBc3luY0Z1bmN0aW9uID0gdHJ1ZTsKICAgICB9CiAK
KyAgICB2b2lkIHNldElzQXN5bmNHZW5lcmF0b3JGdW5jdGlvbigpCisgICAgeworICAgICAgICBz
ZXRJc0Z1bmN0aW9uKCk7CisgICAgICAgIG1faXNBc3luY0Z1bmN0aW9uID0gdHJ1ZTsKKyAgICAg
ICAgbV9pc0dlbmVyYXRvciA9IHRydWU7CisgICAgfQorCisgICAgdm9pZCBzZXRJc0FzeW5jR2Vu
ZXJhdG9yRnVuY3Rpb25Cb2R5KCkKKyAgICB7CisgICAgICAgIHNldElzRnVuY3Rpb24oKTsKKyAg
ICAgICAgbV9oYXNBcmd1bWVudHMgPSBmYWxzZTsKKyAgICAgICAgbV9pc0dlbmVyYXRvciA9IHRy
dWU7CisgICAgICAgIG1faXNHZW5lcmF0b3JCb3VuZGFyeSA9IHRydWU7CisgICAgICAgIG1faXNB
c3luY0Z1bmN0aW9uID0gdHJ1ZTsKKyAgICAgICAgbV9pc0FzeW5jRnVuY3Rpb25Cb3VuZGFyeSA9
IHRydWU7CisgICAgfQorCiAgICAgdm9pZCBzZXRJc0FzeW5jRnVuY3Rpb25Cb2R5KCkKICAgICB7
CiAgICAgICAgIHNldElzRnVuY3Rpb24oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wYXJzZXIvU3ludGF4Q2hlY2tlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9TeW50YXhDaGVja2VyLmgKaW5kZXggOTQxZGZkZTYxMmYxYmI1NWQ3YWViZDJjMDZjMzAxMTNi
ODUzMDdhYy4uOWI1NDk2MzgxZjViNmU1NWEzZGY2NmZhZmJkYmE0NTViMDRjMzZiOSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9TeW50YXhDaGVja2VyLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9TeW50YXhDaGVja2VyLmgKQEAgLTI0Niw3ICsy
NDYsNyBAQCBwdWJsaWM6CiAgICAgaW50IGNyZWF0ZUlmU3RhdGVtZW50KGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYsIGludCwgaW50LCBpbnQsIGludCwgaW50KSB7IHJldHVybiBTdGF0ZW1lbnRSZXN1
bHQ7IH0KICAgICBpbnQgY3JlYXRlRm9yTG9vcChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBpbnQs
IGludCwgaW50LCBpbnQsIGludCwgaW50LCBWYXJpYWJsZUVudmlyb25tZW50JikgeyByZXR1cm4g
U3RhdGVtZW50UmVzdWx0OyB9CiAgICAgaW50IGNyZWF0ZUZvckluTG9vcChjb25zdCBKU1Rva2Vu
TG9jYXRpb24mLCBpbnQsIGludCwgaW50LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBpbnQsIGlu
dCwgaW50LCBpbnQsIGludCwgVmFyaWFibGVFbnZpcm9ubWVudCYpIHsgcmV0dXJuIFN0YXRlbWVu
dFJlc3VsdDsgfQotICAgIGludCBjcmVhdGVGb3JPZkxvb3AoY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiwgaW50LCBpbnQsIGludCwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBpbnQsIGludCwg
aW50LCBpbnQsIFZhcmlhYmxlRW52aXJvbm1lbnQmKSB7IHJldHVybiBTdGF0ZW1lbnRSZXN1bHQ7
IH0KKyAgICBpbnQgY3JlYXRlRm9yT2ZMb29wKGJvb2wsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYs
IGludCwgaW50LCBpbnQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwgaW50LCBpbnQsIGlu
dCwgaW50LCBWYXJpYWJsZUVudmlyb25tZW50JikgeyByZXR1cm4gU3RhdGVtZW50UmVzdWx0OyB9
CiAgICAgaW50IGNyZWF0ZUVtcHR5U3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYpIHsg
cmV0dXJuIFN0YXRlbWVudFJlc3VsdDsgfQogICAgIGludCBjcmVhdGVEZWNsYXJhdGlvblN0YXRl
bWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBpbnQsIGludCwgaW50KSB7IHJldHVybiBTdGF0
ZW1lbnRSZXN1bHQ7IH0KICAgICBpbnQgY3JlYXRlUmV0dXJuU3RhdGVtZW50KGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIFN0YXRlbWVudFJlc3VsdDsgfQpk
aWZmIC0tZ2l0IGEvSlNUZXN0cy9DaGFuZ2VMb2cgYi9KU1Rlc3RzL0NoYW5nZUxvZwppbmRleCA4
ODIyNmFjMGRlNTc1YjFiOGZkNWU0ZmVjZGYyNDBiOGIyMDIwODk5Li41MjM2OWNlYTQxNmNkMjQz
YzU2YzYyMjJiNWYwMTIxYThkNTBkZDc0IDEwMDY0NAotLS0gYS9KU1Rlc3RzL0NoYW5nZUxvZwor
KysgYi9KU1Rlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDE3LTA4LTMwICBPbGVr
c2FuZHIgU2thY2hrb3YgIDxnc2thY2hrb3ZAZ21haWwuY29tPgorCisgICAgICAgIFtFU05leHRd
IEFzeW5jIGl0ZXJhdGlvbiAtIEltcGxlbWVudCBhc3luYyBpdGVyYXRpb24gc3RhdGVtZW50OiBm
b3ItYXdhaXQtb2YKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2NjY5OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogc3RyZXNzL2FzeW5jLWl0ZXJhdGlvbi1mb3ItYXdhaXQtb2Ytc3ludGF4LmpzOiBBZGRl
ZC4KKyAgICAgICAgKGFzc2VydCk6CisgICAgICAgIChjaGVja1N5bnRheCk6CisgICAgICAgIChj
aGVja1N5bnRheEVycm9yKToKKyAgICAgICAgKGNoZWNrU2ltcGxlQXN5bmNHZW5lcmF0b3JTbG9w
cHlNb2RlKToKKyAgICAgICAgKGNoZWNrU2ltcGxlQXN5bmNHZW5lcmF0b3JTdHJpY3RNb2RlKToK
KyAgICAgICAgKGNoZWNrTmVzdGVkQXN5bmNHZW5lcmF0b3JzKToKKyAgICAgICAgKGNoZWNrU2lt
cGxlQXN5bmNHZW5lcmF0b3JTeW50YXhFcnJvckluU3RyaWN0TW9kZSk6CisgICAgICAgICogc3Ry
ZXNzL2FzeW5jLWl0ZXJhdGlvbi1mb3ItYXdhaXQtb2YuanM6IEFkZGVkLgorICAgICAgICAoYXNz
ZXJ0KToKKyAgICAgICAgKGFzeW5jLmZvbyk6CisgICAgICAgIChhc3luYy5ib28pOgorICAgICAg
ICAoY29uc3QuYm9vLmFzeW5jKToKKwogMjAxNy0wOC0yNCAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0
LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjIy
MTExOSwgcjIyMTEyNCwgYW5kIHIyMjExNDMuCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9h
c3luYy1pdGVyYXRpb24tZm9yLWF3YWl0LW9mLXN5bnRheC5qcyBiL0pTVGVzdHMvc3RyZXNzL2Fz
eW5jLWl0ZXJhdGlvbi1mb3ItYXdhaXQtb2Ytc3ludGF4LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJhMTYyMWMx
MWJhNTdlMDA1YjI1Y2ViYWJkYjkzMDU1NDEwNjYyZTQKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rl
c3RzL3N0cmVzcy9hc3luYy1pdGVyYXRpb24tZm9yLWF3YWl0LW9mLXN5bnRheC5qcwpAQCAtMCww
ICsxLDExOCBAQAordmFyIGFzc2VydCA9IGZ1bmN0aW9uIChyZXN1bHQsIGV4cGVjdGVkLCBtZXNz
YWdlID0gIiIpIHsKKyAgaWYgKHJlc3VsdCAhPT0gZXhwZWN0ZWQpIHsKKyAgICB0aHJvdyBuZXcg
RXJyb3IoJ0Vycm9yIGluIGFzc2VydC4gRXhwZWN0ZWQgIicgKyBleHBlY3RlZCArICciIGJ1dCB3
YXMgIicgKyByZXN1bHQgKyAnIjonICsgbWVzc2FnZSApOworICB9Cit9OworCitmdW5jdGlvbiBj
aGVja1N5bnRheChzcmMpIHsKKyAgICB0cnkgeworICAgICAgICBldmFsKHNyYyk7CisgICAgfSBj
YXRjaCAoZXJyb3IpIHsKKyAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgU3ludGF4RXJyb3Ip
CisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlN5bnRheCBFcnJvcjogIiArIFN0cmluZyhl
cnJvcikgKyAiXG4gc2NyaXB0OiBgIiArIHNyYyArICJgIik7CisgICAgfQorfQorCitmdW5jdGlv
biBjaGVja1N5bnRheEVycm9yKHNyYywgbWVzc2FnZSkgeworICAgIHZhciBiRXJyb3IgPSBmYWxz
ZTsKKyAgICB0cnkgeworICAgICAgICBldmFsKHNyYyk7CisgICAgfSBjYXRjaCAoZXJyb3IpIHsK
KyAgICAgICAgYkVycm9yID0gZXJyb3IgaW5zdGFuY2VvZiBTeW50YXhFcnJvciAmJiAoU3RyaW5n
KGVycm9yKSA9PT0gbWVzc2FnZSB8fCB0eXBlb2YgbWVzc2FnZSA9PT0gJ3VuZGVmaW5lZCcpOyAK
KyAgICB9CisgICAgaWYgKCFiRXJyb3IpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJFeHBl
Y3RlZCBzeW50YXggRXJyb3I6ICIgKyBtZXNzYWdlICsgIlxuIGluIHNjcmlwdDogYCIgKyBzcmMg
KyAiYCIpOworICAgIH0KK30KKworKGZ1bmN0aW9uIGNoZWNrU2ltcGxlQXN5bmNHZW5lcmF0b3JT
bG9wcHlNb2RlKCkgeworICAgIGNoZWNrU3ludGF4KCd2YXIgYTEgPSBhc3luYyBmdW5jdGlvbiph
c3luY0dlbldpdGhOYW1lMSgpeyBmb3IgYXdhaXQoY29uc3QgdmFsdWUgb2YgZm9vKCkpIHt9IH0n
KTsKKyAgICBjaGVja1N5bnRheCgndmFyIGExID0gYXN5bmMgZnVuY3Rpb24gYXN5bmNXaXRoTmFt
ZTEoKXsgZm9yIGF3YWl0KGNvbnN0IHZhbHVlIG9mIGZvbygpKSB7fSB9Jyk7CisgICAgY2hlY2tT
eW50YXgoJ3ZhciBhMSA9IGFzeW5jIGZ1bmN0aW9uKmFzeW5jR2VuV2l0aE5hbWUxKCl7IGZvciBh
d2FpdChsZXQgdmFsdWUgb2YgZm9vKCkpIHt9IH0nKTsKKyAgICBjaGVja1N5bnRheCgndmFyIGEx
ID0gYXN5bmMgZnVuY3Rpb24gYXN5bmNXaXRoTmFtZTEoKXsgZm9yIGF3YWl0KGxldCB2YWx1ZSBv
ZiBmb28oKSkge30gfScpOworfSkoKTsKKworKGZ1bmN0aW9uIGNoZWNrU2ltcGxlQXN5bmNHZW5l
cmF0b3JTdHJpY3RNb2RlKCkgeworICAgIGNoZWNrU3ludGF4KCcidXNlIHN0cmljdCI7IHZhciBh
MSA9IGFzeW5jIGZ1bmN0aW9uKmFzeW5jR2VuV2l0aE5hbWUxKCl7IGZvciBhd2FpdChjb25zdCB2
YWx1ZSBvZiBmb28oKSkge30gIH0nKTsKKyAgICBjaGVja1N5bnRheCgnInVzZSBzdHJpY3QiOyB2
YXIgYTEgPSBhc3luYyBmdW5jdGlvbiBhc3luY1dpdGhOYW1lMSgpeyBmb3IgYXdhaXQoY29uc3Qg
dmFsdWUgb2YgZm9vKCkpIHt9IH0nKTsKKyAgICBjaGVja1N5bnRheCgnInVzZSBzdHJpY3QiOyB2
YXIgYTEgPSBhc3luYyBmdW5jdGlvbiphc3luY0dlbldpdGhOYW1lMSgpeyBmb3IgYXdhaXQobGV0
IHZhbHVlIG9mIGZvbygpKSB7fSB9Jyk7CisgICAgY2hlY2tTeW50YXgoJyJ1c2Ugc3RyaWN0Ijsg
dmFyIGExID0gYXN5bmMgZnVuY3Rpb24gYXN5bmNXaXRoTmFtZTEoKXsgZm9yIGF3YWl0KGxldCB2
YWx1ZSBvZiBmb28oKSkge30gfScpOworfSkoKTsKKworCisoZnVuY3Rpb24gY2hlY2tOZXN0ZWRB
c3luY0dlbmVyYXRvcnMoKSB7IAorICAgIHZhciB3cmFwcGVycyA9IFsKKyAgICAgICAge3N0YXJ0
OiAndmFyIGExID0gYXN5bmMgZnVuY3Rpb24qYXN5bmNHZW5XaXRoTmFtZTEoKXsnLCBmaW5pc2g6
ICd9J30sCisgICAgICAgIHtzdGFydDogJ2FzeW5jIGZ1bmN0aW9uKmFzeW5jR2VuV2l0aE5hbWUy
KCl7ICcsIGZpbmlzaDogJ30nfSwKKyAgICAgICAge3N0YXJ0OiAnYXN5bmMgZnVuY3Rpb24gYXN5
bmNXaXRoTmFtZTIoKXsgJywgZmluaXNoOiAnfSd9LAorICAgICAgICB7c3RhcnQ6ICdjbGFzcyBB
IHsgYXN5bmMgKiBtZXRob2QoKSB7ICcsIGZpbmlzaDogJyB9IH0nfSwKKyAgICAgICAge3N0YXJ0
OiAndmFyIGExID0gYXN5bmMgKCkgPT4geycsIGZpbmlzaDogJ30nfSwKKyAgICAgICAge3N0YXJ0
OiAndmFyIGExID0gYXN5bmMgKCkgPT4geyB0cnkgeyAgICcsIGZpbmlzaDogJyB9IGNhdGNoIChl
KSB7fSB9J30sCisgICAgICAgIHtzdGFydDogJ3ZhciBhMSA9IGFzeW5jICgpID0+IHsgeyAgICcs
IGZpbmlzaDogJyB9IH0nfSwKKyAgICAgICAge3N0YXJ0OiAndmFyIGExID0gYXN5bmMgKCkgPT4g
eyBpZiAodHJ1ZSkgeyAgICcsIGZpbmlzaDogJyB9IH0nfSwKKyAgICAgICAge3N0YXJ0OiAndmFy
IGExID0gYXN5bmMgKCkgPT4geyBpZiAodHJ1ZSkgJywgZmluaXNoOiAnIH0nfSwKKyAgICAgICAg
e3N0YXJ0OiAndmFyIGExID0gYXN5bmMgKCkgPT4geyBpZiAodHJ1ZSkgZm9vKCk7IGVsc2UgeyAn
LCBmaW5pc2g6ICcgfSB9J30sCisgICAgICAgIHtzdGFydDogJ3ZhciBhMSA9IGFzeW5jICgpID0+
IHsgd2hpbGUgKHRydWUpIHsgJywgZmluaXNoOiAnIH0gfSd9LAorICAgICAgICB7c3RhcnQ6ICd2
YXIgYTEgPSBhc3luYyAoKSA9PiB7IGZvcig7OykgeyAnLCBmaW5pc2g6ICcgfSB9J30sCisgICAg
ICAgIHtzdGFydDogJ3ZhciBhMSA9IGFzeW5jICgpID0+IHsgc3dpdGNoKGUpIHsgY2FzZSBcJzFc
JyA6ICAnLCBmaW5pc2g6ICcgfSB9J30sCisgICAgXTsKKworICAgIGV4cHJlc3Npb25zID0gWwor
ICAgICAgICAnZm9yIGF3YWl0KGNvbnN0IHZhbHVlIG9mIGZvbygpKSB7fScsCisgICAgICAgICdm
b3IgYXdhaXQobGV0IHZhbHVlIG9mIGZvbygpKSB7fScsCisgICAgICAgICdmb3IgYXdhaXQodmFy
IHZhbHVlIG9mIGZvbygpKSB7fScsCisgICAgICAgICdmb3IgYXdhaXQodmFyIFthLCBiXSBvZiBm
b28oKSkge30nLAorICAgICAgICAnZm9yIGF3YWl0KGxldCB7YSwgYn0gb2YgZm9vKCkpIHt9JywK
KyAgICAgICAgJ2ZvciBhd2FpdChjb25zdCBbLi4uIGJdIG9mIGZvbygpKSB7fScsCisgICAgICAg
ICdmb3IgYXdhaXQoY29uc3QgWywsLCBiXSBvZiBmb28oKSkge30nLAorICAgICAgICAnZm9yIGF3
YWl0KGNvbnN0IHZhbHVlIG9mIGJvbykge30nLAorICAgICAgICAnZm9yIGF3YWl0KGxldCB2YWx1
ZSBvZiBib28pIHt9JywKKyAgICAgICAgJ2ZvciBhd2FpdChjb25zdCB2YWx1ZSBvZiBmb28oKS5i
b28oKSkge30nLAorICAgICAgICAnZm9yIGF3YWl0KGxldCB2YWx1ZSBvZiBmb28uYm9vKCkpIHt9
JywKKyAgICAgICAgJ2ZvciBhd2FpdChsZXQgdmFsdWUgb2YgZm9vLmJvbyh2YWx1ZSkpIHt9JywK
KyAgICAgICAgJ2ZvciBhd2FpdChsZXQgdmFsdWUgb2YgWzEsMiwzXSkge30nLAorICAgICAgICAn
Zm9yIGF3YWl0KHZhbHVlIG9mIFsxLDIsM10pIHt9JywKKyAgICAgICAgJ2ZvciBhd2FpdCh2YWx1
ZSBvZiB4ICsgeCkge30nLAorICAgICAgICAnZm9yIGF3YWl0KHZhbHVlIG9mIGYoKSkge30nLAor
ICAgICAgICAnZm9yIGF3YWl0KHZhbHVlIG9mICh4ICsgeCkpIHt9JywKKyAgICBdOworCisgICAg
d3JhcHBlcnMuZm9yRWFjaCh3cmFwcGVyID0+IHsKKyAgICAgICAgZXhwcmVzc2lvbnMuZm9yRWFj
aChleHAgPT4geworICAgICAgICAgICAgY2hlY2tTeW50YXgod3JhcHBlci5zdGFydCArIGV4cCAr
IHdyYXBwZXIuZmluaXNoKTsKKyAgICAgICAgfSk7CisgICAgfSkKK30pKCk7CisKKworKGZ1bmN0
aW9uIGNoZWNrU2ltcGxlQXN5bmNHZW5lcmF0b3JTeW50YXhFcnJvckluU2xvcHB5TW9kZSgpIHsK
KyAgICBjaGVja1N5bnRheEVycm9yKCJ2YXIgYXN5bmNHZW5GbiA9IGZ1bmN0aW9uICgpIHsgZm9y
IGF3YWl0KGNvbnN0IHZhbHVlIG9mIGZvbygpKSB7fSB9Iik7CisgICAgY2hlY2tTeW50YXhFcnJv
cigidmFyIGFzeW5jR2VuRm4gPSBhc3luYyBmdW5jdGlvbiAoKSB7IHZhciBhcnIgPSAoKSA9PiB7
IGZvciBhd2FpdChjb25zdCB2YWx1ZSBvZiBmb28oKSkge30gfSB9Iik7CisgICAgY2hlY2tTeW50
YXhFcnJvcigidmFyIGFzeW5jR2VuRm4gPSBmdW5jdGlvbiogKCkgeyBmb3IgYXdhaXQoY29uc3Qg
dmFsdWUgb2YgZm9vKCkpIHt9IH0iKTsKKyAgICBjaGVja1N5bnRheEVycm9yKCJ2YXIgYXN5bmNH
ZW5GbiA9IGFzeW5jIGZ1bmN0aW9uKiAoKSB7IHZhciBhcnIgPSAoKSA9PiB7IGZvciBhd2FpdChj
b25zdCB2YWx1ZSBvZiBmb28oKSkge30gfSB9Iik7CisgICAgY2hlY2tTeW50YXhFcnJvcigndmFy
IGExID0gYXN5bmMgZnVuY3Rpb24qYXN5bmNHZW5XaXRoTmFtZTEoKXsgZm9yIGF3YWl0KGNvbnN0
IHZhbHVlIGluIGZvbygpKSB7fSB9Jyk7CisgICAgY2hlY2tTeW50YXhFcnJvcigndmFyIGExID0g
YXN5bmMgZnVuY3Rpb24gYXN5bmNXaXRoTmFtZTEoKXsgZm9yIGF3YWl0KGNvbnN0IHZhbHVlIGlu
IGZvbygpKSB7fSB9Jyk7CisgICAgY2hlY2tTeW50YXhFcnJvcigndmFyIGExID0gYXN5bmMgZnVu
Y3Rpb24gYXN5bmNXaXRoTmFtZTEoKXsgZm9yIGF3YWl0ICg7Oykge30gfScpOworICAgIGNoZWNr
U3ludGF4RXJyb3IoInZhciBhMSA9IGFzeW5jIGZ1bmN0aW9uIGFzeW5jV2l0aE5hbWUxKCl7IGZv
ciBhd2FpdCAobGV0IHYgPSA0OzspIHt9IH0iKTsKKyAgICBjaGVja1N5bnRheEVycm9yKCJ2YXIg
YTEgPSBhc3luYyBmdW5jdGlvbiBhc3luY1dpdGhOYW1lMSgpeyBmb3IgYXdhaXQgKGxldCB2IG9m
IGYoKTs7KSB7fSB9Iik7CisgICAgY2hlY2tTeW50YXhFcnJvcigidmFyIGExID0gYXN5bmMgZnVu
Y3Rpb24gYXN5bmNXaXRoTmFtZTEoKXsgZm9yIGF3YWl0IChsZXQgdiBvZiBib287Oykge30gfSIp
OworICAgIGNoZWNrU3ludGF4RXJyb3IoInZhciBhMSA9IGFzeW5jIGZ1bmN0aW9uIGFzeW5jV2l0
aE5hbWUxKCl7IGZvciBhd2FpdCAobGV0IHYgb2YgYm9vIG9mKSB7fSB9Iik7CisgICAgY2hlY2tT
eW50YXhFcnJvcigiYXN5bmMgZnVuY3Rpb24gYXN5bmNXaXRoTmFtZTEoKXsgZm9yIGF3YWl0IChs
ZXQgdiBvZiBib28gaW4pIHt9IH0iKTsKKyAgICBjaGVja1N5bnRheEVycm9yKCJhc3luYyBmdW5j
dGlvbiBhc3luY1dpdGhOYW1lMSgpeyBmb3IgYXdhaXQgKHYgaW4geCArIHggKSB7fSB9Iik7Cit9
KSgpOworCisoZnVuY3Rpb24gY2hlY2tTaW1wbGVBc3luY0dlbmVyYXRvclN5bnRheEVycm9ySW5T
dHJpY3RNb2RlKCkgeworICAgIGNoZWNrU3ludGF4RXJyb3IoIid1c2Ugc3RyaWN0JzsgdmFyIGFz
eW5jR2VuRm4gPSBmdW5jdGlvbiAoKSB7IGZvciBhd2FpdChjb25zdCB2YWx1ZSBvZiBmb28oKSkg
e30gfSIpOworICAgIGNoZWNrU3ludGF4RXJyb3IoIid1c2Ugc3RyaWN0JzsgdmFyIGFzeW5jR2Vu
Rm4gPSBhc3luYyBmdW5jdGlvbiAoKSB7IHZhciBhcnIgPSAoKSA9PiB7IGZvciBhd2FpdChjb25z
dCB2YWx1ZSBvZiBmb28oKSkge30gfSB9Iik7CisgICAgY2hlY2tTeW50YXhFcnJvcigiJ3VzZSBz
dHJpY3QnOyB2YXIgYXN5bmNHZW5GbiA9IGZ1bmN0aW9uKiAoKSB7IGZvciBhd2FpdChjb25zdCB2
YWx1ZSBvZiBmb28oKSkge30gfSIpOworICAgIGNoZWNrU3ludGF4RXJyb3IoIid1c2Ugc3RyaWN0
JzsgdmFyIGFzeW5jR2VuRm4gPSBhc3luYyBmdW5jdGlvbiogKCkgeyB2YXIgYXJyID0gKCkgPT4g
eyBmb3IgYXdhaXQoY29uc3QgdmFsdWUgb2YgZm9vKCkpIHt9IH0gfSIpOworICAgIGNoZWNrU3lu
dGF4RXJyb3IoIid1c2Ugc3RyaWN0JzsgdmFyIGExID0gYXN5bmMgZnVuY3Rpb24qYXN5bmNHZW5X
aXRoTmFtZTEoKXsgZm9yIGF3YWl0KGNvbnN0IHZhbHVlIGluIGZvbygpKSB7fSB9Iik7CisgICAg
Y2hlY2tTeW50YXhFcnJvcigiJ3VzZSBzdHJpY3QnOyB2YXIgYTEgPSBhc3luYyBmdW5jdGlvbiBh
c3luY1dpdGhOYW1lMSgpeyBmb3IgYXdhaXQoY29uc3QgdmFsdWUgaW4gZm9vKCkpIHt9IH0iKTsK
KyAgICBjaGVja1N5bnRheEVycm9yKCIndXNlIHN0cmljdCc7IHZhciBhMSA9IGFzeW5jIGZ1bmN0
aW9uIGFzeW5jV2l0aE5hbWUxKCl7IGZvciBhd2FpdCAoOzspIHt9IH0iKTsKKyAgICBjaGVja1N5
bnRheEVycm9yKCIndXNlIHN0cmljdCc7IHZhciBhMSA9IGFzeW5jIGZ1bmN0aW9uIGFzeW5jV2l0
aE5hbWUxKCl7IGZvciBhd2FpdCAobGV0IHYgPSA0OzspIHt9IH0iKTsKKyAgICBjaGVja1N5bnRh
eEVycm9yKCIndXNlIHN0cmljdCc7IHZhciBhMSA9IGFzeW5jIGZ1bmN0aW9uIGFzeW5jV2l0aE5h
bWUxKCl7IGZvciBhd2FpdCAobGV0IHYgb2YgZigpOzspIHt9IH0iKTsKKyAgICBjaGVja1N5bnRh
eEVycm9yKCIndXNlIHN0cmljdCc7IHZhciBhMSA9IGFzeW5jIGZ1bmN0aW9uIGFzeW5jV2l0aE5h
bWUxKCl7IGZvciBhd2FpdCAobGV0IHYgb2YgYm9vOzspIHt9IH0iKTsKKyAgICBjaGVja1N5bnRh
eEVycm9yKCIndXNlIHN0cmljdCc7IHZhciBhMSA9IGFzeW5jIGZ1bmN0aW9uIGFzeW5jV2l0aE5h
bWUxKCl7IGZvciBhd2FpdCAobGV0IHYgb2YgYm9vIG9mKSB7fSB9Iik7CisgICAgY2hlY2tTeW50
YXhFcnJvcigiJ3VzZSBzdHJpY3QnOyBhc3luYyBmdW5jdGlvbiBhc3luY1dpdGhOYW1lMSgpeyBm
b3IgYXdhaXQgKGxldCB2IG9mIGJvbyBpbikge30gfSIpOworICAgIGNoZWNrU3ludGF4RXJyb3Io
Iid1c2Ugc3RyaWN0JzsgYXN5bmMgZnVuY3Rpb24gYXN5bmNXaXRoTmFtZTEoKXsgZm9yIGF3YWl0
ICh2IGluIHggKyB4ICkge30gfSIpOworfSkoKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNz
L2FzeW5jLWl0ZXJhdGlvbi1mb3ItYXdhaXQtb2YuanMgYi9KU1Rlc3RzL3N0cmVzcy9hc3luYy1p
dGVyYXRpb24tZm9yLWF3YWl0LW9mLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZlY2FkMGY3NmQ5OGRjMDJhZjJl
ZjllOTEwOWQ3YTZkYzBiMGRhNDkKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3N0cmVzcy9h
c3luYy1pdGVyYXRpb24tZm9yLWF3YWl0LW9mLmpzCkBAIC0wLDAgKzEsMjgwIEBACit2YXIgYXNz
ZXJ0ID0gZnVuY3Rpb24gKHJlc3VsdCwgZXhwZWN0ZWQsIG1lc3NhZ2UgPSAiIikgeworICBpZiAo
cmVzdWx0ICE9PSBleHBlY3RlZCkgeworICAgIHRocm93IG5ldyBFcnJvcignRXJyb3IgaW4gYXNz
ZXJ0LiBFeHBlY3RlZCAiJyArIGV4cGVjdGVkICsgJyIgYnV0IHdhcyAiJyArIHJlc3VsdCArICci
OicgKyBtZXNzYWdlICk7CisgIH0KK307Cit2YXIgcmVzdWx0ID0gMDsKK2FzeW5jIGZ1bmN0aW9u
ICogZm9vKCkgeyB5aWVsZCAxOyB5aWVsZCBQcm9taXNlLnJlc29sdmUoMik7IHJldHVybiAzO307
CisKK2FzeW5jIGZ1bmN0aW9uIGJvbyAoKSB7CisgICAgZm9yIGF3YWl0IChjb25zdCB2YWx1ZSBv
ZiBmb28oKSkgeworICAgICAgICByZXN1bHQgPSByZXN1bHQgKyB2YWx1ZTsKKyAgICB9Cit9CisK
K2JvbygpOworCitkcmFpbk1pY3JvdGFza3MoKTsKKworYXNzZXJ0KHJlc3VsdCwgMyk7CisKK3Jl
c3VsdCA9ICAwOworCit7CisgICAgY29uc3QgYm9vID0gIGFzeW5jIGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgZm9yIGF3YWl0IChjb25zdCB2YWwgb2YgZm9vKCkpIHsKKyAgICAgICAgICAgIHJlc3Vs
dCA9IHJlc3VsdCArIHZhbDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGJvbygpOworCisgICAg
ZHJhaW5NaWNyb3Rhc2tzKCk7CisKKyAgICBhc3NlcnQocmVzdWx0LCAzKTsKK30KKworeworICAg
IHJlc3VsdCA9ICAwOworICAgIGNvbnN0IGJvbyA9IGFzeW5jIGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgZm9yIGF3YWl0IChjb25zdCB2YWwgb2YgWzEsIDIsIDNdKSB7CisgICAgICAgICAgICByZXN1
bHQgPSByZXN1bHQgKyB2YWw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBib28oKTsKKworICAg
IGRyYWluTWljcm90YXNrcygpOworCisgICAgYXNzZXJ0KHJlc3VsdCwgNik7Cit9CisKK3sgCisg
ICAgbGV0IGVycm9yID0gZmFsc2U7CisKKyAgICBjb25zdCBib28gPSBhc3luYyBmdW5jdGlvbiAo
KSB7CisgICAgICAgIGZvciBhd2FpdCAoY29uc3QgdmFsIG9mIDEpIHsKKyAgICAgICAgICAgIHJl
c3VsdCA9IHJlc3VsdCArIHZhbDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGJvbygpLmNhdGNo
KHJhaXNlZEVycm9yID0+IGVycm9yID0gcmFpc2VkRXJyb3IgaW5zdGFuY2VvZiBUeXBlRXJyb3Ip
OworCisgICAgZHJhaW5NaWNyb3Rhc2tzKCk7CisKKyAgICBhc3NlcnQoZXJyb3IsIHRydWUpOwor
fQorCit7CisgICAgbGV0IGNvbnRlciA9IDA7CisgICAgY29uc3QgbyA9IHsKKyAgICAgICAgW1N5
bWJvbC5hc3luY0l0ZXJhdG9yXSgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzCisgICAgICAg
IH0sCisgICAgICAgIG5leHQoYXJncykgeworICAgICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1
ZSB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXN1bHQgPSAtMTsKKyAgICBjb25zdCBib28g
PSBhc3luYyBmdW5jdGlvbiAoKSB7CisgICAgICAgIGZvciBhd2FpdCAoY29uc3QgdmFsIG9mIG8p
IHsKKyAgICAgICAgICAgIGNvbnRlcisrOworICAgICAgICAgICAgcmVzdWx0ID0gdmFsOworICAg
ICAgICB9CisgICAgfQorCisgICAgYm9vKCk7CisKKyAgICBkcmFpbk1pY3JvdGFza3MoKTsKKwor
ICAgIGFzc2VydChjb250ZXIsIDApOworICAgIGFzc2VydChyZXN1bHQsIC0xKTsKK30KKworewor
ICAgIGxldCBjb250ZXIgPSAwOworICAgIGNvbnN0IG8gPSB7CisgICAgICAgIFtTeW1ib2wuYXN5
bmNJdGVyYXRvcl0oKSB7CisgICAgICAgICAgICB0aGlzLmluZGV4ID0gMDsKKyAgICAgICAgICAg
IHJldHVybiB0aGlzCisgICAgICAgIH0sCisgICAgICAgIG5leHQoYXJncykgeworICAgICAgICAg
ICAgdGhpcy5pbmRleCsrOworICAgICAgICAgICAgaWYgKHRoaXMuaW5kZXggPD0gMTApCisgICAg
ICAgICAgICAgICAgcmV0dXJuIHsgZG9uZTogZmFsc2UsIHZhbHVlOiB0aGlzLmluZGV4IH07Cisg
ICAgICAgICAgICBlbHNlIAorICAgICAgICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZh
bHVlOiB0aGlzLmluZGV4IH07CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXN1bHQgPSAwOwor
ICAgIGNvbnN0IGJvbyA9IGFzeW5jIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZm9yIGF3YWl0IChj
b25zdCB2YWwgb2YgbykgeworICAgICAgICAgICAgY29udGVyKys7CisgICAgICAgICAgICByZXN1
bHQgKz0gdmFsOworICAgICAgICB9CisgICAgfQorCisgICAgYm9vKCk7CisKKyAgICBkcmFpbk1p
Y3JvdGFza3MoKTsKKworICAgIGFzc2VydChjb250ZXIsIDEwKTsKKyAgICBhc3NlcnQocmVzdWx0
LCA1NSk7Cit9CisKK3sKKyAgICBsZXQgY29udGVyID0gMDsKKyAgICBsZXQgZXJyb3IgPSBmYWxz
ZTsKKworICAgIGNvbnN0IG8gPSB7CisgICAgICAgIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSB7
CisgICAgICAgICAgICB0aGlzLmluZGV4ID0gMDsKKyAgICAgICAgICAgIHJldHVybiB0aGlzCisg
ICAgICAgIH0sCisgICAgICAgIG5leHQoYXJncykgeworICAgICAgICAgICAgdGhpcy5pbmRleCsr
OworICAgICAgICAgICAgaWYgKHRoaXMuaW5kZXggPD0gMTApCisgICAgICAgICAgICAgICAgcmV0
dXJuIHsgZG9uZTogZmFsc2UsIHZhbHVlOiB0aGlzLmluZGV4IH07CisgICAgICAgICAgICBlbHNl
IAorICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc29tZSBlcnJvcicpOworICAgICAg
ICB9CisgICAgfQorCisgICAgcmVzdWx0ID0gMDsKKyAgICBjb25zdCBib28gPSBhc3luYyBmdW5j
dGlvbiAoKSB7CisgICAgICAgIGZvciBhd2FpdCAoY29uc3QgdmFsIG9mIG8pIHsKKyAgICAgICAg
ICAgIGNvbnRlcisrOworICAgICAgICAgICAgcmVzdWx0ICs9IHZhbDsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGJvbygpLmNhdGNoKGUgPT4geyBlcnJvciA9IGUgaW5zdGFuY2VvZiBFcnJvciAm
JiBlLm1lc3NhZ2UgPT09ICdzb21lIGVycm9yJzsgfSk7CisKKyAgICBkcmFpbk1pY3JvdGFza3Mo
KTsKKworICAgIGFzc2VydChjb250ZXIsIDEwKTsKKyAgICBhc3NlcnQocmVzdWx0LCA1NSk7Cisg
ICAgYXNzZXJ0KGVycm9yLCB0cnVlKTsKK30KKworeworICAgIGxldCBjb250ZXIgPSAwOworICAg
IGxldCBlcnJvciA9IGZhbHNlOworICAgIGxldCBlbXB0eVBhcmFtID0gZmFsc2U7CisKKyAgICBj
b25zdCBvID0geworICAgICAgICBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkgeworICAgICAgICAg
ICAgdGhpcy5pbmRleCA9IDA7CisgICAgICAgICAgICByZXR1cm4gdGhpcworICAgICAgICB9LAor
ICAgICAgICBuZXh0KGFyZ3MpIHsKKyAgICAgICAgICAgIGVtcHR5UGFyYW0gPSBhcmdzID09PSB1
bmRlZmluZWQ7CisgICAgICAgICAgICB0aGlzLmluZGV4Kys7CisgICAgICAgICAgICBpZiAodGhp
cy5pbmRleCA8PSAxMCkKKyAgICAgICAgICAgICAgICByZXR1cm4geyBkb25lOiBmYWxzZSwgdmFs
dWU6IHRoaXMuaW5kZXggfTsKKyAgICAgICAgICAgIGVsc2UgCisgICAgICAgICAgICAgICAgdGhy
b3cgbmV3IEVycm9yKCdzb21lIGVycm9yJyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXN1
bHQgPSAwOworICAgIGNvbnN0IGJvbyA9IGFzeW5jIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdHJ5
IHsKKyAgICAgICAgICAgIGZvciBhd2FpdCAoY29uc3QgdmFsIG9mIG8pIHsKKyAgICAgICAgICAg
ICAgICBjb250ZXIrKzsKKyAgICAgICAgICAgICAgICByZXN1bHQgKz0gdmFsOworICAgICAgICAg
ICAgfQorICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICBlcnJvciA9ICBlIGluc3Rh
bmNlb2YgRXJyb3IgJiYgZS5tZXNzYWdlID09PSAnc29tZSBlcnJvcic7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBib28oKTsKKworICAgIGRyYWluTWljcm90YXNrcygpOworCisgICAgYXNzZXJ0
KGNvbnRlciwgMTApOworICAgIGFzc2VydChyZXN1bHQsIDU1KTsKKyAgICBhc3NlcnQoZXJyb3Is
IHRydWUpOworICAgIGFzc2VydChlbXB0eVBhcmFtLCB0cnVlKTsKK30KKworeworICAgIGxldCBj
b250ZXIgPSAwOworICAgIGxldCBlcnJvciA9IGZhbHNlOworCisgICAgY29uc3QgbyA9IHsKKyAg
ICAgICAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpIHsKKyAgICAgICAgICAgIHRoaXMuaW5kZXgg
PSAwOworICAgICAgICAgICAgcmV0dXJuIHRoaXMKKyAgICAgICAgfSwKKyAgICAgICAgbmV4dChh
cmdzKSB7CisgICAgICAgICAgICB0aGlzLmluZGV4Kys7CisgICAgICAgICAgICBpZiAodGhpcy5p
bmRleCA8PSAxMCkKKyAgICAgICAgICAgICAgICByZXR1cm4geyBkb25lOiBmYWxzZSwgdmFsdWU6
IHRoaXMuaW5kZXggfTsKKyAgICAgICAgICAgIGVsc2UgCisgICAgICAgICAgICAgICAgcmV0dXJu
IHsgZG9uZTogdHJ1ZSwgdmFsdWU6IHRoaXMuaW5kZXggfTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHJlc3VsdCA9IDA7CisgICAgY29uc3QgYm9vID0gYXN5bmMgZnVuY3Rpb24gKCkgeworICAg
ICAgICBpZiAodHJ1ZSkgeworICAgICAgICAgICAgZm9yIGF3YWl0IChjb25zdCB2YWwgb2Ygbykg
eworICAgICAgICAgICAgICAgIGNvbnRlcisrOworICAgICAgICAgICAgICAgIHJlc3VsdCArPSB2
YWw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBib28oKTsKKworICAg
IGRyYWluTWljcm90YXNrcygpOworCisgICAgYXNzZXJ0KGNvbnRlciwgMTApOworICAgIGFzc2Vy
dChyZXN1bHQsIDU1KTsKK30KKworeworICAgIGxldCBjb250ZXIgPSAwOworICAgIGxldCBlcnJv
ciA9IGZhbHNlOworICAgIGxldCBlbXB0eVBhcmFtID0gZmFsc2U7CisKKyAgICBjb25zdCBvID0g
eworICAgICAgICBbU3ltYm9sLml0ZXJhdG9yXSgpIHsKKyAgICAgICAgICAgIHRoaXMuaW5kZXgg
PSAwOworICAgICAgICAgICAgcmV0dXJuIHRoaXMKKyAgICAgICAgfSwKKyAgICAgICAgbmV4dChh
cmdzKSB7CisgICAgICAgICAgICBlbXB0eVBhcmFtID0gYXJncyA9PT0gdW5kZWZpbmVkOworICAg
ICAgICAgICAgdGhpcy5pbmRleCsrOworICAgICAgICAgICAgaWYgKHRoaXMuaW5kZXggPD0gMTAp
CisgICAgICAgICAgICAgICAgcmV0dXJuIHsgZG9uZTogZmFsc2UsIHZhbHVlOiB0aGlzLmluZGV4
IH07CisgICAgICAgICAgICBlbHNlIAorICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcign
c29tZSBlcnJvcicpOworICAgICAgICB9CisgICAgfQorCisgICAgcmVzdWx0ID0gMDsKKyAgICBj
b25zdCBib28gPSBhc3luYyBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAg
ICBmb3IgYXdhaXQgKGNvbnN0IHZhbCBvZiBvKSB7CisgICAgICAgICAgICAgICAgY29udGVyKys7
CisgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHZhbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fSBjYXRjaCAoZSkgeworICAgICAgICAgICAgZXJyb3IgPSAgZSBpbnN0YW5jZW9mIEVycm9yICYm
IGUubWVzc2FnZSA9PT0gJ3NvbWUgZXJyb3InOworICAgICAgICB9CisgICAgfQorCisgICAgYm9v
KCk7CisKKyAgICBkcmFpbk1pY3JvdGFza3MoKTsKKworICAgIGFzc2VydChjb250ZXIsIDEwKTsK
KyAgICBhc3NlcnQocmVzdWx0LCA1NSk7CisgICAgYXNzZXJ0KGVycm9yLCB0cnVlKTsKKyAgICBh
c3NlcnQoZW1wdHlQYXJhbSwgdHJ1ZSk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>