<?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>216229</bug_id>
          
          <creation_ts>2020-09-06 13:23:46 -0700</creation_ts>
          <short_desc>Make TextCodecCJK and TextCodecSingleByte thread-safe and refactor a bit to share code</short_desc>
          <delta_ts>2020-09-07 10:44:29 -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>Text</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>achristensen</cc>
    
    <cc>clopez</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1686209</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-09-06 13:23:46 -0700</bug_when>
    <thetext>Make TextCodecCJK and TextCodecSingleByte thread-safe and refactor a bit to share code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686210</commentid>
    <comment_count>1</comment_count>
      <attachid>408129</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-09-06 14:02:01 -0700</bug_when>
    <thetext>Created attachment 408129
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686212</commentid>
    <comment_count>2</comment_count>
      <attachid>408130</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-09-06 14:14:21 -0700</bug_when>
    <thetext>Created attachment 408130
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686214</commentid>
    <comment_count>3</comment_count>
      <attachid>408132</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-09-06 14:18:44 -0700</bug_when>
    <thetext>Created attachment 408132
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686219</commentid>
    <comment_count>4</comment_count>
      <attachid>408134</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-09-06 14:31:38 -0700</bug_when>
    <thetext>Created attachment 408134
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686280</commentid>
    <comment_count>5</comment_count>
      <attachid>408156</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-09-06 17:56:49 -0700</bug_when>
    <thetext>Created attachment 408156
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686281</commentid>
    <comment_count>6</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2020-09-06 17:57:34 -0700</bug_when>
    <thetext>This patch modifies the imported WPT tests. Please ensure that any changes on the tests (not coming from a WPT import) are exported to WPT. Please see https://trac.webkit.org/wiki/WPTExportProcess</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686373</commentid>
    <comment_count>7</comment_count>
      <attachid>408156</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-09-07 09:49:18 -0700</bug_when>
    <thetext>Comment on attachment 408156
Patch

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

&gt; Source/WebCore/platform/text/EncodingTables.h:45
&gt; +// FIXME: Consider moving these somewhere else since they are likely useful for by more than just encoding tables.

Seem like a good fit for wtf/StdLibExtras.h in the future.

&gt; Source/WebCore/platform/text/TextCodecCJK.cpp:132
&gt; +    static JIS0208DecodeIndex* table;
&gt; +    static std::once_flag once;
&gt; +    std::call_once(once, [&amp;] {
&gt; +        table = new JIS0208DecodeIndex;

Not new, but might be useful to have a comment here about why we are choosing to do this as an allocation / lazy sort rather than a compile time content table, which I presume is due to jis0208 already being huge, and not wanting to bloat the WebCore binary even more. Same with eucKREncodingIndex/Big5 below.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686381</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-09-07 10:11:49 -0700</bug_when>
    <thetext>Committed r266703: &lt;https://trac.webkit.org/changeset/266703&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686382</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-09-07 10:12:16 -0700</bug_when>
    <thetext>&lt;rdar://problem/68468669&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686386</commentid>
    <comment_count>10</comment_count>
      <attachid>408156</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-07 10:26:57 -0700</bug_when>
    <thetext>Comment on attachment 408156
Patch

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

&gt; LayoutTests/platform/mac-wk2/TestExpectations:-1112
&gt;  # &lt;rdar://problem/37330377&gt; ASan tests exiting early due to timeouts
&gt; -[ Release ] imported/w3c/web-platform-tests/encoding [ Skip ]

We probably still want to skip these tests in ASan builds, or at least the tests that just test that each code point is correct.  They take too long.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686389</commentid>
    <comment_count>11</comment_count>
      <attachid>408156</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-09-07 10:35:58 -0700</bug_when>
    <thetext>Comment on attachment 408156
Patch

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

&gt;&gt; LayoutTests/platform/mac-wk2/TestExpectations:-1112
&gt;&gt; -[ Release ] imported/w3c/web-platform-tests/encoding [ Skip ]
&gt; 
&gt; We probably still want to skip these tests in ASan builds, or at least the tests that just test that each code point is correct.  They take too long.

Oops, yes, I checked this in accidentally.

The reason I un-skipped is that a lot of the encoding tests are skipped in all Debug builds due to an entry in TestExpectations, also due to the fact that they are too slow. Thus, also skipping them in Release builds means never running them at all. Luckily this is (for some reason) specifically Mac Modern WebKit only? If the intent is to skip specifically in ASan builds, we need to find a way to do that. The bug cited just above this was closed in 2018, so I think it’s in a strange state.

What do you think we should do?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686390</commentid>
    <comment_count>12</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-07 10:37:56 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #11)
&gt; What do you think we should do?
I think we should revert this one line.  WK1 release runs all these tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686391</commentid>
    <comment_count>13</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-09-07 10:44:29 -0700</bug_when>
    <thetext>(In reply to Alex Christensen from comment #12)
&gt; I think we should revert this one line.  WK1 release runs all these tests.

OK, done in r266704.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408129</attachid>
            <date>2020-09-06 14:02:01 -0700</date>
            <delta_ts>2020-09-06 14:14:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216229-20200906140200.patch</filename>
            <type>text/plain</type>
            <size>30741</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2NjgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzY2NDFhNTYzMjViZTYx
YWNkZTIxYmI4NzA1MmZmNTFjZjA0NjZjNC4uMzdkNzJhNTIxOTUwYTY4MzBkMmMxZTBiZDMyMGQ2
ZTUzN2E3OWUyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcxIEBACisyMDIwLTA5LTA2ICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIFRleHRDb2RlY0NKSyBh
bmQgVGV4dENvZGVjU2luZ2xlQnl0ZSB0aHJlYWQtc2FmZSBhbmQgcmVmYWN0b3IgYSBiaXQgdG8g
c2hhcmUgY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjE2MjI5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGhlIHRleHQgZW5jb2RpbmcgbWFjaGluZXJ5IGlzIHVzYWJsZSBvbiBtdWx0aXBsZSB0aHJl
YWRzLCBidXQgb3VyIG5ldyBUZXh0Q29kZWMKKyAgICAgICAgY2xhc3NlcyBoYXZlIHNvbWUgZ2xv
YmFsIGRhdGEgc3RydWN0dXJlcyB0aGF0IG5lZWQgdG8gYmUgZ3VhcmRlZCB0byBrZWVwIHRoYXQg
aW50YWN0LgorCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9FbmNvZGluZ1RhYmxlcy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpjaGVja0VuY29kaW5nVGFibGVJbnZhcmlhbnRzKTogT25lLXRpbWUg
Y2hlY2sgZm9yIGludmFyaWFudHMgdGhhdCBjbGllbnRzCisgICAgICAgIG9mIHRoZXNlIHRhYmxl
cyBkZXBlbmQgb24uCisKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L0VuY29kaW5nVGFibGVzLmg6
IEFkZGVkIGNoZWNrRW5jb2RpbmdUYWJsZUludmFyaWFudHMuIEFsc28gQWRkZWQKKyAgICAgICAg
ZnVuY3Rpb24gdGVtcGxhdGVzIGZvciBlbmNvZGluZyB0YWJsZXM6IEFkZGVkIGZpbmRGaXJzdElu
U29ydGVkUGFpcnMgYW5kCisgICAgICAgIGZpbmRJblNvcnRlZFBhaXJzIGZvciBzZWFyY2hpbmcg
YSBzb3J0ZWQgYXJyYXkgb2YgcGFpcnMgdXNlZCBhcyBhIG1hcC4gQWRkZWQKKyAgICAgICAgc29y
dEJ5Rmlyc3QgdG8gYWlkIGluIHRoZSBjcmVhdGlvbiBvZiBzdWNoIGEgc29ydGVkIGFycmF5LiBB
bmQgYWRkZWQgaXNTb3J0ZWRCeUZpcnN0CisgICAgICAgIGFuZCBzb3J0ZWRGaXJzdHNBcmVVbmlx
dWUgc28gd2UgY2FuIGFzc2VydCB0aG9zZSBpbnZhcmlhbnRzLiBPbmUgb2YgdGhlIGdvb2QKKyAg
ICAgICAgZmVhdHVyZXMgb2YgdGhlIGZpbmRJblNvcnRlZFBhaXJzIGZ1bmN0aW9ucyBpcyB0aGF0
IHRoZXkgaGFuZGxlcyBpbnRlZ2VyIHZhbHVlcyB0aGF0CisgICAgICAgIGRvbid0IGZpdCBpbiBh
biBpbnRlZ3JhbCBrZXkgdHlwZSwgcmV0dXJuaW5nIFdURjo6bnVsbG9wdCBpbiB0aGF0IGNhc2Uu
IFRoYXQgbGV0cyB1cworICAgICAgICBwYXNzIGNvZGUgcG9pbnQgdmFsdWVzIHdoZW4gbG9va2lu
ZyBpbiB0YWJsZXMgdGhhdCB1c2UgY29kZSB1bml0cyBhcyB0aGVpciBrZXksIHdpdGhvdXQKKyAg
ICAgICAgc2VwYXJhdGVseSBjaGVja2luZyBpZiB0aGV5IGFyZSBpbiByYW5nZSwgd2hpY2ggb3Ro
ZXJ3aXNlIHJlcXVpcmVzIGNvbnZlcnRpbmcgdG8gVUNoYXIKKyAgICAgICAgYW5kIGNoZWNraW5n
IGZvciBlcXVhbGl0eSBvciBjYWxsaW5nIFVfSVNfQk1QLgorCisgICAgICAgICogcGxhdGZvcm0v
dGV4dC9UZXh0Q29kZWNDSksuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjQ0pLOjpU
ZXh0Q29kZWNDSkspOiBDYWxsIGNoZWNrRW5jb2RpbmdUYWJsZUludmFyaWFudHMuCisgICAgICAg
IChXZWJDb3JlOjpUZXh0Q29kZWNDSks6OmVuY29kZSBjb25zdCk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6amlzMDIwOERlY29kZUluZGV4KTogVXNlIHN0ZDo6Y2FsbF9vbmNlIGZvciB0aHJl
YWQgc2FmZXR5LgorICAgICAgICBVc2Ugc29ydEJ5Rmlyc3QgYW5kIHNvcnRlZEZpcnN0c0FyZVVu
aXF1ZS4KKyAgICAgICAgKFdlYkNvcmU6OmNvZGVQb2ludEpJUzAyMDgpOiBVc2UgZmluZEZpcnN0
SW5Tb3J0ZWRQYWlycy4KKyAgICAgICAgKFdlYkNvcmU6OmNvZGVQb2ludEpJUzAyMTIpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY0NKSzo6ZXVjSlBEZWNvZGUpOiBDYXN0IHRv
IGNoYXIgaW5zdGFkIG9mIExDaGFyIHdoZW4gYWRkaW5nCisgICAgICAgIGFuIEFTQ0lJIGNoYXJh
Y3RlciB0byBhIFN0cmluZ0J1aWxkZXIuCisgICAgICAgIChXZWJDb3JlOjpldWNKUEVuY29kZSk6
IFVzZSB0aGUgbmFtZSBjb2RlUG9pbnQgaW5zdGVhZCBvZiBjIHRvIG1hdGNoIG90aGVyCisgICAg
ICAgIHN1cnJvdW5kaW5nIGNvZGUuIFVzZSBmaW5kRmlyc3RJblNvcnRlZFBhaXJzLgorICAgICAg
ICAoV2ViQ29yZTo6aXNvMjAyMkpQRW5jb2RlKTogUmVtb3ZlZCBzb21lIHVubmVlZGVkIGNhc3Rz
IHRvIHVpbnQ4X3Qgd2hlbiBhcHBlbmRpbmcKKyAgICAgICAgYnl0ZXMgdG8gYSBWZWN0b3IuIEFk
ZGVkIGEgc3RhdGljX2Fzc2VydCB0byBjaGVjayB0aGUgc2l6ZSBvZiBpc28yMDIySlBLYXRha2Fu
YS4KKyAgICAgICAgVXNlIGZpbmRGaXJzdEluU29ydGVkUGFpcnMuCisgICAgICAgIChXZWJDb3Jl
OjpzaGlmdEpJU0VuY29kZSk6IFVzZSBmaW5kSW5Tb3J0ZWRQYWlycy4KKyAgICAgICAgKFdlYkNv
cmU6OmV1Y0tSRW5jb2RpbmdJbmRleCk6IFVzZSBzdGQ6OmNhbGxfb25jZSBmb3IgdGhyZWFkIHNh
ZmV0eS4KKyAgICAgICAgVXNlIHNvcnRCeUZpcnN0IGFuZCBzb3J0ZWRGaXJzdHNBcmVVbmlxdWUu
CisgICAgICAgIChXZWJDb3JlOjpldWNLUkVuY29kZSk6IFJlbW92ZWQgc29tZSB1bm5lZWRlZCBj
YXN0cyB0byB1aW50OF90IHdoZW4gYXBwZW5kaW5nCisgICAgICAgIGJ5dGVzIHRvIGEgVmVjdG9y
LiBVc2UgZmluZEZpcnN0SW5Tb3J0ZWRQYWlycy4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2Rl
Y0NKSzo6ZXVjS1JEZWNvZGUpOiBVc2UgZmluZEZpcnN0SW5Tb3J0ZWRQYWlycy4KKyAgICAgICAg
KFdlYkNvcmU6OmJpZzVFbmNvZGUpOiBVc2UgZmluZEluU29ydGVkUGFpcnMuIEFsc28gcmVuYW1l
ZCBjIHRvIGNvZGVQb2ludC4KKyAgICAgICAgKFdlYkNvcmU6OmJpZzVEZWNvZGVJbmRleCk6IFVz
ZSBzdGQ6OmNhbGxfb25jZSBmb3IgdGhyZWFkIHNhZmV0eS4KKyAgICAgICAgVXNlIHNvcnRCeUZp
cnN0IGFuZCBzb3J0ZWRGaXJzdHNBcmVVbmlxdWUuCisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29k
ZWNDSks6OmJpZzVEZWNvZGUpOiBVc2UgZmluZEZpcnN0SW5Tb3J0ZWRQYWlycy4gQ2FzdCB0byBj
aGFyCisgICAgICAgIGluc3RhZCBvZiBMQ2hhciB3aGVuIGFkZGluZyBhbiBBU0NJSSBjaGFyYWN0
ZXIgdG8gYSBTdHJpbmdCdWlsZGVyLgorCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0Q29k
ZWNTaW5nbGVCeXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRhYmxlRm9yRW5jb2RpbmcpOiBS
ZXR1cm4gYW4gSXRlcmF0b3JSYW5nZSBpbnN0ZWFkIG9mIGEgcGFpciBvZgorICAgICAgICBwb2lu
dGVyIGFuZCBzaXplLiBUaGlzIHdvcmtzIHdpdGggc3RkOjpiZWdpbi9lbmQuIEFsc28gbWFrZSB0
YWJsZSB3aXRoIGFjdHVhbAorICAgICAgICBlbmNvZGVkIGJ5dGVzLCBieSBhZGRpbmcgMHg4MCBo
ZXJlLCByYXRoZXIgdGhhbiBkb2luZyB0aGF0IHdoZW4gdXNpbmcgdGhlIHRhYmxlLgorICAgICAg
ICAoV2ViQ29yZTo6ZW5jb2RlKTogVXNlIHN0ZDo6Y2FsbF9vbmNlIGZvciB0aHJlYWQgc2FmZXR5
LgorICAgICAgICBVc2Ugc29ydEJ5Rmlyc3QgYW5kIHNvcnRlZEZpcnN0c0FyZVVuaXF1ZS4gVGhl
IGNvZGUgYmVmb3JlIHdhcyBub3Qgc29ydGluZyBhdAorICAgICAgICBhbGwsIHdoaWNoIG1lYW5z
IGl0IHByb2JhYmx5IGRpZG4ndCB3b3JrIGluIGFueSBjYXNlcyB3aGVyZSB0aGUgY29kZSB1bml0
cworICAgICAgICBoYXBwZW4gdG8gbm90IGJlIGluIGFzY2VuZGluZyBvcmRlci4gV2Ugc2hvdWxk
IGFkZCBzb21lIHRlc3QgY2FzZXMuCisgICAgICAgIChXZWJDb3JlOjpkZWNvZGUpOiBVc2UgZmlu
ZEZpcnN0SW5Tb3J0ZWRQYWlycy4gQWxzbyB1c2UgU3RyaW5nVmlldzo6Y29kZVBvaW50cworICAg
ICAgICBiZWNhdXNlIHRoZXNlIGFyZSBsaWtlbHkgdG8gYmUgOC1iaXQgc3RyaW5ncyBhbmQgd2Ug
ZG9uJ3QgbmVlZCB0byB0ZW1wb3JhcmlseQorICAgICAgICB1cGNvbnZlcnQgdGhlbSB0byAxNi1i
aXQganVzdCB0byBlbmNvZGUgdGhlbS4gU2hvdWxkIHByb2JhYmx5IGxhdGVyIG1lYXN1cmUgaWYK
KyAgICAgICAgdGhlIHVzZSBvZiBTdHJpbmdWaWV3Ojp1cGNvbnZlcnRlZENoYXJhY3RlcnMgcGx1
cyBDb2RlUG9pbnRJdGVyYXRvcjxVQ2hhcj4KKyAgICAgICAgaW5zdGVhZCBvZiBTdHJpbmdWaWV3
Ojpjb2RlUG9pbnRzIGlzIGJldHRlciBmb3IgcGVyZm9ybWFuY2UgaW4gdGhlIENKSyBlbmNvZGlu
ZworICAgICAgICBmdW5jdGlvbnMuIFRoaXMgYXBwcm9hY2ggbWVhbnMgbW9yZSBicmFuY2hpbmcg
aW5zaWRlIHRoZSBsb29wLCBidXQgdGhlIG90aGVyCisgICAgICAgIHZlcnNpb24gaW52b2x2ZXMg
bWVtb3J5IGFsbG9jYXRpb24gYW5kIGEgc2Vjb25kIGxvb3Agd2hlbiB0aGUgY2hhcmFjdGVycyBh
cmUKKyAgICAgICAgYWxsIDgtYml0LgorCiAyMDIwLTA5LTA2ICBEYXJpbiBBZGxlciAgPGRhcmlu
QGFwcGxlLmNvbT4KIAogICAgICAgICBUZXh0Q29kZWMgcmVmaW5lbWVudHMKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvRW5jb2RpbmdUYWJsZXMuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9FbmNvZGluZ1RhYmxlcy5jcHAKaW5kZXggNzJiMjJmOTVk
Y2I5OWMwYmE3MWZkY2MzZTY5Y2Q3OGQzMDk2MjU0Ni4uZWQyZjU0YzY1MmU5YzYxZTUyM2RiNGFl
MTQzNzUwZDYyMGVmZjdkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC9FbmNvZGluZ1RhYmxlcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9F
bmNvZGluZ1RhYmxlcy5jcHAKQEAgLTI2LDYgKzI2LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJFbmNvZGluZ1RhYmxlcy5oIgogCisjaW5jbHVkZSA8bXV0ZXg+CisKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogLy8gRklYTUU6IENvbXByZXNzIHRoZXNlIHRhYmxlcyBhbmQgZGVj
b21wcmVzcyB0aGVtIGlmIHRoZXkgYXJlIGFjdHVhbGx5IHVzZWQuIFRoaXMgd2lsbCBzaWduaWZp
Y2FudGx5IGRlY3JlYXNlIHRoZSBzaXplIG9mIFdlYkNvcmUncyBiaW5hcnkuCkBAIC02MjM2LDQg
KzYyMzgsMjQgQEAgY29uc3Qgc3RkOjpwYWlyPHVpbnQxNl90LCBVQ2hhcj4gZXVjS1JEZWNvZGlu
Z0luZGV4WzE3MDQ4XSB7CiAgICAgeyAyMzc0MiwgMHg3MTk5IH0sIHsgMjM3NDMsIDB4NzFCOSB9
LCB7IDIzNzQ0LCAweDcxQkEgfSwgeyAyMzc0NSwgMHg3MkE3IH0sIHsgMjM3NDYsIDB4NzlBNyB9
LCB7IDIzNzQ3LCAweDdBMDAgfSwgeyAyMzc0OCwgMHg3RkIyIH0sIHsgMjM3NDksIDB4OEE3MCB9
LAogfTsKIAorI2lmIEFTU0VSVF9FTkFCTEVECisKK3ZvaWQgY2hlY2tFbmNvZGluZ1RhYmxlSW52
YXJpYW50cygpCit7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2U7CisgICAgc3RkOjpj
YWxsX29uY2Uob25jZSwgW10geworICAgICAgICBBU1NFUlQoaXNTb3J0ZWRCeUZpcnN0KGppczAy
MDgpKTsKKworICAgICAgICBBU1NFUlQoaXNTb3J0ZWRCeUZpcnN0KGppczAyMTIpKTsKKyAgICAg
ICAgQVNTRVJUKHNvcnRlZEZpcnN0c0FyZVVuaXF1ZShqaXMwMjEyKSk7CisKKyAgICAgICAgQVNT
RVJUKGlzU29ydGVkQnlGaXJzdChiaWc1RW5jb2RpbmdNYXApKTsKKworICAgICAgICBBU1NFUlQo
aXNTb3J0ZWRCeUZpcnN0KGV1Y0tSRGVjb2RpbmdJbmRleCkpOworICAgICAgICBBU1NFUlQoc29y
dGVkRmlyc3RzQXJlVW5pcXVlKGV1Y0tSRGVjb2RpbmdJbmRleCkpOworICAgIH0pOworfQorCisj
ZW5kaWYKKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9FbmNv
ZGluZ1RhYmxlcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9FbmNvZGluZ1RhYmxl
cy5oCmluZGV4IGRmOTNjMWNiMGI2Y2Q0NzQ3MGJkNmNiODM4N2FmZTgxODk3NzAyZTQuLmI0M2Q3
MjE4N2RkNzJkNTUwNThmNWIyOGUyNzMyMGVkZWQ4ZGEzZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvRW5jb2RpbmdUYWJsZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L0VuY29kaW5nVGFibGVzLmgKQEAgLTM1LDQgKzM1LDY4IEBAIGV4dGVy
biBjb25zdCBzdGQ6OnBhaXI8VUNoYXIzMiwgdWludDE2X3Q+IGJpZzVFbmNvZGluZ01hcFsxNDY4
Nl07CiBleHRlcm4gY29uc3Qgc3RkOjpwYWlyPHVpbnQxNl90LCBVQ2hhcjMyPiBiaWc1RGVjb2Rp
bmdFeHRyYXNbMzkwNF07CiBleHRlcm4gY29uc3Qgc3RkOjpwYWlyPHVpbnQxNl90LCBVQ2hhcj4g
ZXVjS1JEZWNvZGluZ0luZGV4WzE3MDQ4XTsKIAordm9pZCBjaGVja0VuY29kaW5nVGFibGVJbnZh
cmlhbnRzKCk7CisKKy8vIEZ1bmN0aW9ucyBmb3IgdXNpbmcgc29ydGVkIGFycmF5cyBvZiBwYWly
cyBhcyBhIG1hcC4KKy8vIEZJWE1FOiBDb25zaWRlciBtb3ZpbmcgdGhlc2Ugc29tZXdoZXJlIGVs
c2Ugc2luY2UgdGhleSBhcmUgbGlrZWx5IHVzZWZ1bCBmb3IgYnkgbW9yZSB0aGFuIGp1c3QgZW5j
b2RpbmcgdGFibGVzLgordGVtcGxhdGU8dHlwZW5hbWUgQ29sbGVjdGlvblR5cGU+IHZvaWQgc29y
dEJ5Rmlyc3QoQ29sbGVjdGlvblR5cGUmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIENvbGxlY3Rpb25U
eXBlPiBib29sIGlzU29ydGVkQnlGaXJzdChjb25zdCBDb2xsZWN0aW9uVHlwZSYpOwordGVtcGxh
dGU8dHlwZW5hbWUgQ29sbGVjdGlvblR5cGU+IGJvb2wgc29ydGVkRmlyc3RzQXJlVW5pcXVlKGNv
bnN0IENvbGxlY3Rpb25UeXBlJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xsZWN0aW9uVHlwZSwg
dHlwZW5hbWUgS2V5VHlwZT4gc3RhdGljIGF1dG8gZmluZEZpcnN0SW5Tb3J0ZWRQYWlycyhjb25z
dCBDb2xsZWN0aW9uVHlwZSYgY29sbGVjdGlvbiwgY29uc3QgS2V5VHlwZSYpIC0+IE9wdGlvbmFs
PGRlY2x0eXBlKHN0ZDo6YmVnaW4oY29sbGVjdGlvbiktPnNlY29uZCk+OwordGVtcGxhdGU8dHlw
ZW5hbWUgQ29sbGVjdGlvblR5cGUsIHR5cGVuYW1lIEtleVR5cGU+IHN0YXRpYyBhdXRvIGZpbmRJ
blNvcnRlZFBhaXJzKGNvbnN0IENvbGxlY3Rpb25UeXBlJiBjb2xsZWN0aW9uLCBjb25zdCBLZXlU
eXBlJikgLT4gc3RkOjpwYWlyPGRlY2x0eXBlKHN0ZDo6YmVnaW4oY29sbGVjdGlvbikpLCBkZWNs
dHlwZShzdGQ6OmJlZ2luKGNvbGxlY3Rpb24pKT47CisKKyNpZiAhQVNTRVJUX0VOQUJMRUQKK2lu
bGluZSB2b2lkIGNoZWNrRW5jb2RpbmdUYWJsZUludmFyaWFudHMoKSB7IH0KKyNlbmRpZgorCitz
dHJ1Y3QgQ29tcGFyZUZpcnN0IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlQSwgdHlwZW5h
bWUgVHlwZUI+IGJvb2wgb3BlcmF0b3IoKShjb25zdCBUeXBlQSYgYSwgY29uc3QgVHlwZUImIGIp
CisgICAgeworICAgICAgICByZXR1cm4gYS5maXJzdCA8IGIuZmlyc3Q7CisgICAgfQorfTsKKwor
c3RydWN0IEVxdWFsRmlyc3QgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGVBLCB0eXBlbmFt
ZSBUeXBlQj4gYm9vbCBvcGVyYXRvcigpKGNvbnN0IFR5cGVBJiBhLCBjb25zdCBUeXBlQiYgYikK
KyAgICB7CisgICAgICAgIHJldHVybiBhLmZpcnN0ID09IGIuZmlyc3Q7CisgICAgfQorfTsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgQ29sbGVjdGlvblR5cGU+IHZvaWQgc29ydEJ5Rmlyc3QoQ29sbGVj
dGlvblR5cGUmIGNvbGxlY3Rpb24pCit7CisgICAgc3RkOjpzb3J0KHN0ZDo6YmVnaW4oY29sbGVj
dGlvbiksIHN0ZDo6ZW5kKGNvbGxlY3Rpb24pLCBDb21wYXJlRmlyc3QgeyB9KTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgQ29sbGVjdGlvblR5cGU+IGJvb2wgaXNTb3J0ZWRCeUZpcnN0KGNvbnN0
IENvbGxlY3Rpb25UeXBlJiBjb2xsZWN0aW9uKQoreworICAgIHJldHVybiBzdGQ6OmlzX3NvcnRl
ZChzdGQ6OmJlZ2luKGNvbGxlY3Rpb24pLCBzdGQ6OmVuZChjb2xsZWN0aW9uKSwgQ29tcGFyZUZp
cnN0IHsgfSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbGxlY3Rpb25UeXBlPiBib29sIHNv
cnRlZEZpcnN0c0FyZVVuaXF1ZShjb25zdCBDb2xsZWN0aW9uVHlwZSYgY29sbGVjdGlvbikKK3sK
KyAgICByZXR1cm4gc3RkOjphZGphY2VudF9maW5kKHN0ZDo6YmVnaW4oY29sbGVjdGlvbiksIHN0
ZDo6ZW5kKGNvbGxlY3Rpb24pLCBFcXVhbEZpcnN0IHsgfSkgPT0gc3RkOjplbmQoY29sbGVjdGlv
bik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbGxlY3Rpb25UeXBlLCB0eXBlbmFtZSBLZXlU
eXBlPiBzdGF0aWMgYXV0byBmaW5kRmlyc3RJblNvcnRlZFBhaXJzKGNvbnN0IENvbGxlY3Rpb25U
eXBlJiBjb2xsZWN0aW9uLCBjb25zdCBLZXlUeXBlJiBrZXkpIC0+IE9wdGlvbmFsPGRlY2x0eXBl
KHN0ZDo6YmVnaW4oY29sbGVjdGlvbiktPnNlY29uZCk+Cit7CisgICAgaWYgY29uc3RleHByIChz
dGQ6OmlzX2ludGVncmFsX3Y8S2V5VHlwZT4pIHsKKyAgICAgICAgaWYgKGtleSAhPSBkZWNsdHlw
ZShzdGQ6OmJlZ2luKGNvbGxlY3Rpb24pLT5maXJzdCkoa2V5KSkKKyAgICAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CisgICAgfQorICAgIGF1dG8gaXRlcmF0b3IgPSBzdGQ6Omxvd2VyX2Jv
dW5kKHN0ZDo6YmVnaW4oY29sbGVjdGlvbiksIHN0ZDo6ZW5kKGNvbGxlY3Rpb24pLCBzdGQ6Om1h
a2VfcGFpcihrZXksIGRlY2x0eXBlKHN0ZDo6YmVnaW4oY29sbGVjdGlvbiktPnNlY29uZCkgeyB9
KSwgQ29tcGFyZUZpcnN0IHsgfSk7CisgICAgaWYgKGl0ZXJhdG9yID09IHN0ZDo6ZW5kKGNvbGxl
Y3Rpb24pIHx8IGtleSA8IGl0ZXJhdG9yLT5maXJzdCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKyAgICByZXR1cm4gaXRlcmF0b3ItPnNlY29uZDsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgQ29sbGVjdGlvblR5cGUsIHR5cGVuYW1lIEtleVR5cGU+IHN0YXRpYyBhdXRvIGZpbmRJblNv
cnRlZFBhaXJzKGNvbnN0IENvbGxlY3Rpb25UeXBlJiBjb2xsZWN0aW9uLCBjb25zdCBLZXlUeXBl
JiBrZXkpIC0+IHN0ZDo6cGFpcjxkZWNsdHlwZShzdGQ6OmJlZ2luKGNvbGxlY3Rpb24pKSwgZGVj
bHR5cGUoc3RkOjpiZWdpbihjb2xsZWN0aW9uKSk+Cit7CisgICAgaWYgY29uc3RleHByIChzdGQ6
OmlzX2ludGVncmFsX3Y8S2V5VHlwZT4pIHsKKyAgICAgICAgaWYgKGtleSAhPSBkZWNsdHlwZShz
dGQ6OmJlZ2luKGNvbGxlY3Rpb24pLT5maXJzdCkoa2V5KSkKKyAgICAgICAgICAgIHJldHVybiB7
IHN0ZDo6ZW5kKGNvbGxlY3Rpb24pLCBzdGQ6OmVuZChjb2xsZWN0aW9uKSB9OworICAgIH0KKyAg
ICByZXR1cm4gc3RkOjplcXVhbF9yYW5nZShzdGQ6OmJlZ2luKGNvbGxlY3Rpb24pLCBzdGQ6OmVu
ZChjb2xsZWN0aW9uKSwgc3RkOjptYWtlX3BhaXIoa2V5LCBkZWNsdHlwZShzdGQ6OmJlZ2luKGNv
bGxlY3Rpb24pLT5zZWNvbmQpIHsgfSksIENvbXBhcmVGaXJzdCB7IH0pOworfQorCiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0NKSy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0NKSy5jcHAKaW5kZXggNjgwN2Yz
NzI3NDEzMWM0YzFhMWZiZTk2ZTA3YzcxY2E1Zjc4ZThkYy4uZmUzNWQxNmI4YjJiMTljYTAwYjg3
NTFkMGRhZGVmZmEyNDVhOWUxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC9UZXh0Q29kZWNDSksuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQv
VGV4dENvZGVjQ0pLLmNwcApAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIlRleHRDb2RlY0NK
Sy5oIgogCiAjaW5jbHVkZSAiRW5jb2RpbmdUYWJsZXMuaCIKKyNpbmNsdWRlIDxtdXRleD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9Db2RlUG9pbnRJdGVyYXRvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0J1aWxkZXIuaD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9DaGFyYWN0ZXJOYW1lcy5o
PgpAQCAtNDQsNiArNDUsNyBAQCBlbnVtIGNsYXNzIFRleHRDb2RlY0NKSzo6RW5jb2RpbmcgOiB1
aW50OF90IHsKIFRleHRDb2RlY0NKSzo6VGV4dENvZGVjQ0pLKEVuY29kaW5nIGVuY29kaW5nKQog
ICAgIDogbV9lbmNvZGluZyhlbmNvZGluZykKIHsKKyAgICBjaGVja0VuY29kaW5nVGFibGVJbnZh
cmlhbnRzKCk7CiB9CiAKIHZvaWQgVGV4dENvZGVjQ0pLOjpyZWdpc3RlckVuY29kaW5nTmFtZXMo
RW5jb2RpbmdOYW1lUmVnaXN0cmFyIHJlZ2lzdHJhcikKQEAgLTEyNCwxNiArMTI2LDE2IEBAIHZv
aWQgVGV4dENvZGVjQ0pLOjpyZWdpc3RlckNvZGVjcyhUZXh0Q29kZWNSZWdpc3RyYXIgcmVnaXN0
cmFyKQogdXNpbmcgSklTMDIwOERlY29kZUluZGV4ID0gc3RkOjphcnJheTxzdGQ6OnBhaXI8dWlu
dDE2X3QsIFVDaGFyPiwgc3RkOjpzaXplKGppczAyMDgpPjsKIHN0YXRpYyBjb25zdCBKSVMwMjA4
RGVjb2RlSW5kZXgmIGppczAyMDhEZWNvZGVJbmRleCgpCiB7Ci0gICAgc3RhdGljIGF1dG8mIHRh
YmxlID0gKltdIHsKLSAgICAgICAgYXV0byogdGFibGUgPSBuZXcgSklTMDIwOERlY29kZUluZGV4
OworICAgIHN0YXRpYyBKSVMwMjA4RGVjb2RlSW5kZXgqIHRhYmxlOworICAgIHN0YXRpYyBzdGQ6
Om9uY2VfZmxhZyBvbmNlOworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2UsIFsmXSB7CisgICAgICAg
IHRhYmxlID0gbmV3IEpJUzAyMDhEZWNvZGVJbmRleDsKICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBzdGQ6OnNpemUoamlzMDIwOCk7IGkrKykKICAgICAgICAgICAgICgqdGFibGUpW2ld
ID0geyBqaXMwMjA4W2ldLnNlY29uZCwgamlzMDIwOFtpXS5maXJzdCB9OwotICAgICAgICBzdGQ6
OnNvcnQodGFibGUtPmJlZ2luKCksIHRhYmxlLT5lbmQoKSwgW10gKGF1dG8mIGEsIGF1dG8mIGIp
IHsKLSAgICAgICAgICAgIHJldHVybiBhLmZpcnN0IDwgYi5maXJzdDsKLSAgICAgICAgfSk7Ci0g
ICAgICAgIHJldHVybiB0YWJsZTsKLSAgICB9KCk7Ci0gICAgcmV0dXJuIHRhYmxlOworICAgICAg
ICBzb3J0QnlGaXJzdCgqdGFibGUpOworICAgICAgICBBU1NFUlQoc29ydGVkRmlyc3RzQXJlVW5p
cXVlKCp0YWJsZSkpOworICAgIH0pOworICAgIHJldHVybiAqdGFibGU7CiB9CiAKIFN0cmluZyBU
ZXh0Q29kZWNDSks6OmRlY29kZUNvbW1vbihjb25zdCB1aW50OF90KiBieXRlcywgc2l6ZV90IGxl
bmd0aCwgYm9vbCBmbHVzaCwgYm9vbCBzdG9wT25FcnJvciwgYm9vbCYgc2F3RXJyb3IsIGNvbnN0
IEZ1bmN0aW9uPFNhd0Vycm9yKHVpbnQ4X3QsIFN0cmluZ0J1aWxkZXImKT4mIGJ5dGVQYXJzZXIp
CkBAIC0xNzksMjcgKzE4MSwxMiBAQCBTdHJpbmcgVGV4dENvZGVjQ0pLOjpkZWNvZGVDb21tb24o
Y29uc3QgdWludDhfdCogYnl0ZXMsIHNpemVfdCBsZW5ndGgsIGJvb2wgZmx1cwogCiBzdGF0aWMg
T3B0aW9uYWw8VUNoYXI+IGNvZGVQb2ludEpJUzAyMDgodWludDE2X3QgcG9pbnRlcikKIHsKLSAg
ICBhdXRvJiBpbmRleCA9IGppczAyMDhEZWNvZGVJbmRleCgpOwotICAgIGF1dG8gcmFuZ2UgPSBz
dGQ6OmVxdWFsX3JhbmdlKGluZGV4LmJlZ2luKCksIGluZGV4LmVuZCgpLCBzdGQ6OnBhaXI8dWlu
dDE2X3QsIFVDaGFyPihwb2ludGVyLCAwKSwgW10oY29uc3QgYXV0byYgYSwgY29uc3QgYXV0byYg
YikgewotICAgICAgICByZXR1cm4gYS5maXJzdCA8IGIuZmlyc3Q7Ci0gICAgfSk7Ci0gICAgaWYg
KHJhbmdlLmZpcnN0ICE9IHJhbmdlLnNlY29uZCkgewotICAgICAgICBBU1NFUlQocmFuZ2UuZmly
c3QgKyAxID09IHJhbmdlLnNlY29uZCk7Ci0gICAgICAgIHJldHVybiByYW5nZS5maXJzdC0+c2Vj
b25kOwotICAgIH0KLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiBmaW5kRmly
c3RJblNvcnRlZFBhaXJzKGppczAyMDhEZWNvZGVJbmRleCgpLCBwb2ludGVyKTsKIH0KIAogc3Rh
dGljIE9wdGlvbmFsPFVDaGFyPiBjb2RlUG9pbnRKSVMwMjEyKHVpbnQxNl90IHBvaW50ZXIpCiB7
Ci0gICAgYXV0byByYW5nZSA9IHN0ZDo6ZXF1YWxfcmFuZ2UoamlzMDIxMiwgamlzMDIxMiArIHN0
ZDo6c2l6ZShqaXMwMjEyKSwgc3RkOjpwYWlyPHVpbnQxNl90LCBVQ2hhcj4ocG9pbnRlciwgMCks
IFtdKGNvbnN0IGF1dG8mIGEsIGNvbnN0IGF1dG8mIGIpIHsKLSAgICAgICAgcmV0dXJuIGEuZmly
c3QgPCBiLmZpcnN0OwotICAgIH0pOwotICAgIGlmIChyYW5nZS5maXJzdCAhPSByYW5nZS5zZWNv
bmQpIHsKLSAgICAgICAgQVNTRVJUKHJhbmdlLmZpcnN0ICsgMSA9PSByYW5nZS5zZWNvbmQpOwot
ICAgICAgICByZXR1cm4gcmFuZ2UuZmlyc3QtPnNlY29uZDsKLSAgICB9Ci0gICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKyAgICByZXR1cm4gZmluZEZpcnN0SW5Tb3J0ZWRQYWlycyhqaXMwMjEyLCBw
b2ludGVyKTsKIH0KIAogLy8gaHR0cHM6Ly9lbmNvZGluZy5zcGVjLndoYXR3Zy5vcmcvI2V1Yy1q
cC1kZWNvZGVyCkBAIC0yMjgsNyArMjE1LDcgQEAgU3RyaW5nIFRleHRDb2RlY0NKSzo6ZXVjSlBE
ZWNvZGUoY29uc3QgdWludDhfdCogYnl0ZXMsIHNpemVfdCBsZW5ndGgsIGJvb2wgZmx1c2gKICAg
ICAgICAgICAgIHJldHVybiBTYXdFcnJvcjo6WWVzOwogICAgICAgICB9CiAgICAgICAgIGlmIChp
c0FTQ0lJKGJ5dGUpKSB7Ci0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKHN0YXRpY19jYXN0PExD
aGFyPihieXRlKSk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHN0YXRpY19jYXN0PGNoYXI+
KGJ5dGUpKTsKICAgICAgICAgICAgIHJldHVybiBTYXdFcnJvcjo6Tm87CiAgICAgICAgIH0KICAg
ICAgICAgaWYgKGJ5dGUgPT0gMHg4RSB8fCBieXRlID09IDB4OEYgfHwgKGJ5dGUgPj0gMHhBMSAm
JiBieXRlIDw9IDB4RkUpKSB7CkBAIC0yNDcsNDIgKzIzNCwzNCBAQCBzdGF0aWMgVmVjdG9yPHVp
bnQ4X3Q+IGV1Y0pQRW5jb2RlKFN0cmluZ1ZpZXcgc3RyaW5nLCBGdW5jdGlvbjx2b2lkKFVDaGFy
MzIsIFZlYwogCiAgICAgYXV0byBjaGFyYWN0ZXJzID0gc3RyaW5nLnVwY29udmVydGVkQ2hhcmFj
dGVycygpOwogICAgIGZvciAoV1RGOjpDb2RlUG9pbnRJdGVyYXRvcjxVQ2hhcj4gaXRlcmF0b3Io
Y2hhcmFjdGVycy5nZXQoKSwgY2hhcmFjdGVycy5nZXQoKSArIHN0cmluZy5sZW5ndGgoKSk7ICFp
dGVyYXRvci5hdEVuZCgpOyArK2l0ZXJhdG9yKSB7Ci0gICAgICAgIGF1dG8gYyA9ICppdGVyYXRv
cjsKLSAgICAgICAgaWYgKGlzQVNDSUkoYykpIHsKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQo
Yyk7CisgICAgICAgIGF1dG8gY29kZVBvaW50ID0gKml0ZXJhdG9yOworICAgICAgICBpZiAoaXNB
U0NJSShjb2RlUG9pbnQpKSB7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGNvZGVQb2ludCk7
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBpZiAoYyA9PSAweDAw
QTUpIHsKKyAgICAgICAgaWYgKGNvZGVQb2ludCA9PSAweDAwQTUpIHsKICAgICAgICAgICAgIHJl
c3VsdC5hcHBlbmQoMHg1Qyk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAg
ICAgICBpZiAoYyA9PSAweDIwM0UpIHsKKyAgICAgICAgaWYgKGNvZGVQb2ludCA9PSAweDIwM0Up
IHsKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMHg3RSk7CiAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgfQotICAgICAgICBpZiAoYyA+PSAweEZGNjEgJiYgYyA8PSAweEZGOUYpIHsK
KyAgICAgICAgaWYgKGNvZGVQb2ludCA+PSAweEZGNjEgJiYgY29kZVBvaW50IDw9IDB4RkY5Rikg
ewogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgweDhFKTsKLSAgICAgICAgICAgIHJlc3VsdC5h
cHBlbmQoYyAtIDB4RkY2MSArIDB4QTEpOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChjb2Rl
UG9pbnQgLSAweEZGNjEgKyAweEExKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9
Ci0gICAgICAgIGlmIChjID09IDB4MjIxMikKLSAgICAgICAgICAgIGMgPSAweEZGMEQ7CisgICAg
ICAgIGlmIChjb2RlUG9pbnQgPT0gMHgyMjEyKQorICAgICAgICAgICAgY29kZVBvaW50ID0gMHhG
RjBEOwogCi0gICAgICAgIGlmIChzdGF0aWNfY2FzdDxVQ2hhcj4oYykgIT0gYykgewotICAgICAg
ICAgICAgdW5lbmNvZGFibGVIYW5kbGVyKGMsIHJlc3VsdCk7Ci0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgYXV0byBwb2ludGVyUmFuZ2UgPSBzdGQ6
OmVxdWFsX3JhbmdlKHN0ZDo6YmVnaW4oamlzMDIwOCksIHN0ZDo6ZW5kKGppczAyMDgpLCBzdGQ6
OnBhaXI8VUNoYXIsIHVpbnQxNl90PihzdGF0aWNfY2FzdDxVQ2hhcj4oYyksIDApLCBbXShjb25z
dCBhdXRvJiBhLCBjb25zdCBhdXRvJiBiKSB7Ci0gICAgICAgICAgICByZXR1cm4gYS5maXJzdCA8
IGIuZmlyc3Q7Ci0gICAgICAgIH0pOwotICAgICAgICBpZiAocG9pbnRlclJhbmdlLmZpcnN0ID09
IHBvaW50ZXJSYW5nZS5zZWNvbmQpIHsKLSAgICAgICAgICAgIHVuZW5jb2RhYmxlSGFuZGxlcihj
LCByZXN1bHQpOworICAgICAgICBhdXRvIHBvaW50ZXIgPSBmaW5kRmlyc3RJblNvcnRlZFBhaXJz
KGppczAyMDgsIGNvZGVQb2ludCk7CisgICAgICAgIGlmICghcG9pbnRlcikgeworICAgICAgICAg
ICAgdW5lbmNvZGFibGVIYW5kbGVyKGNvZGVQb2ludCwgcmVzdWx0KTsKICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIHVpbnQxNl90IHBvaW50ZXIgPSAocG9pbnRlclJh
bmdlLnNlY29uZCAtIDEpLT5zZWNvbmQ7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQocG9pbnRlciAv
IDk0ICsgMHhBMSk7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQocG9pbnRlciAlIDk0ICsgMHhBMSk7
CisgICAgICAgIHJlc3VsdC5hcHBlbmQoKnBvaW50ZXIgLyA5NCArIDB4QTEpOworICAgICAgICBy
ZXN1bHQuYXBwZW5kKCpwb2ludGVyICUgOTQgKyAweEExKTsKICAgICB9CiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KQEAgLTUwNCwxMiArNDgzLDEyIEBAIHN0YXRpYyBWZWN0b3I8dWludDhfdD4gaXNv
MjAyMkpQRW5jb2RlKFN0cmluZ1ZpZXcgc3RyaW5nLCBGdW5jdGlvbjx2b2lkKFVDaGFyMzIsCiAg
ICAgRnVuY3Rpb248dm9pZChVQ2hhcjMyKT4gcGFyc2VDb2RlUG9pbnQ7CiAgICAgcGFyc2VDb2Rl
UG9pbnQgPSBbJl0gKFVDaGFyMzIgY29kZVBvaW50KSB7CiAgICAgICAgIGlmIChzdGF0ZSA9PSBT
dGF0ZTo6QVNDSUkgJiYgaXNBU0NJSShjb2RlUG9pbnQpKSB7Ci0gICAgICAgICAgICByZXN1bHQu
YXBwZW5kKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGNvZGVQb2ludCkpOworICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZChjb2RlUG9pbnQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAg
ICAgICAgIGlmIChzdGF0ZSA9PSBTdGF0ZTo6Um9tYW4pIHsKICAgICAgICAgICAgIGlmIChpc0FT
Q0lJKGNvZGVQb2ludCkgJiYgY29kZVBvaW50ICE9IDB4MDA1QyAmJiBjb2RlUG9pbnQgIT0weDAw
N0UpIHsKLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHN0YXRpY19jYXN0PHVpbnQ4X3Q+
KGNvZGVQb2ludCkpOworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoY29kZVBvaW50KTsK
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAo
Y29kZVBvaW50ID09IDB4MDBBNSkgewpAQCAtNTQ1LDE5ICs1MjQsMTIgQEAgc3RhdGljIFZlY3Rv
cjx1aW50OF90PiBpc28yMDIySlBFbmNvZGUoU3RyaW5nVmlldyBzdHJpbmcsIEZ1bmN0aW9uPHZv
aWQoVUNoYXIzMiwKICAgICAgICAgICAgICAgICAweDMwQzEsIDB4MzBDNCwgMHgzMEM2LCAweDMw
QzgsIDB4MzBDQSwgMHgzMENCLCAweDMwQ0MsIDB4MzBDRCwgMHgzMENFLCAweDMwQ0YsIDB4MzBE
MiwgMHgzMEQ1LCAweDMwRDgsIDB4MzBEQiwgMHgzMERFLCAweDMwREYsCiAgICAgICAgICAgICAg
ICAgMHgzMEUwLCAweDMwRTEsIDB4MzBFMiwgMHgzMEU0LCAweDMwRTYsIDB4MzBFOCwgMHgzMEU5
LCAweDMwRUEsIDB4MzBFQiwgMHgzMEVDLCAweDMwRUQsIDB4MzBFRiwgMHgzMEYzLCAweDMwOUIs
IDB4MzA5QwogICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjpz
aXplKGlzbzIwMjJKUEthdGFrYW5hKSA9PSAweEZGOUYgLSAweEZGNjEgKyAxKTsKICAgICAgICAg
ICAgIGNvZGVQb2ludCA9IGlzbzIwMjJKUEthdGFrYW5hW2NvZGVQb2ludCAtIDB4RkY2MV07CiAg
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGF1dG8gY29kZVVuaXQgPSBzdGF0aWNfY2FzdDxV
Q2hhcj4oY29kZVBvaW50KTsKLSAgICAgICAgaWYgKGNvZGVVbml0ICE9IGNvZGVQb2ludCkgewot
ICAgICAgICAgICAgc3RhdGVmdWxVbmVuY29kYWJsZUhhbmRsZXIoY29kZVBvaW50LCByZXN1bHQp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBhdXRv
IHJhbmdlID0gc3RkOjplcXVhbF9yYW5nZShzdGQ6OmJlZ2luKGppczAyMDgpLCBzdGQ6OmVuZChq
aXMwMjA4KSwgc3RkOjpwYWlyPFVDaGFyLCB1aW50MTZfdD4oY29kZVVuaXQsIDApLCBbXShjb25z
dCBhdXRvJiBhLCBjb25zdCBhdXRvJiBiKSB7Ci0gICAgICAgICAgICByZXR1cm4gYS5maXJzdCA8
IGIuZmlyc3Q7Ci0gICAgICAgIH0pOwotICAgICAgICBpZiAocmFuZ2UuZmlyc3QgPT0gcmFuZ2Uu
c2Vjb25kKSB7CisKKyAgICAgICAgYXV0byBwb2ludGVyID0gZmluZEZpcnN0SW5Tb3J0ZWRQYWly
cyhqaXMwMjA4LCBjb2RlUG9pbnQpOworICAgICAgICBpZiAoIXBvaW50ZXIpIHsKICAgICAgICAg
ICAgIHN0YXRlZnVsVW5lbmNvZGFibGVIYW5kbGVyKGNvZGVQb2ludCwgcmVzdWx0KTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtNTY5LDkgKzU0MSw4IEBAIHN0YXRpYyBWZWN0
b3I8dWludDhfdD4gaXNvMjAyMkpQRW5jb2RlKFN0cmluZ1ZpZXcgc3RyaW5nLCBGdW5jdGlvbjx2
b2lkKFVDaGFyMzIsCiAgICAgICAgICAgICBwYXJzZUNvZGVQb2ludChjb2RlUG9pbnQpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIHVpbnQxNl90IHBvaW50ZXIgPSAo
cmFuZ2Uuc2Vjb25kIC0gMSktPnNlY29uZDsKLSAgICAgICAgcmVzdWx0LmFwcGVuZChwb2ludGVy
IC8gOTQgKyAweDIxKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZChwb2ludGVyICUgOTQgKyAweDIx
KTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgqcG9pbnRlciAvIDk0ICsgMHgyMSk7CisgICAgICAg
IHJlc3VsdC5hcHBlbmQoKnBvaW50ZXIgJSA5NCArIDB4MjEpOwogICAgIH07CiAgICAgCiAgICAg
YXV0byBjaGFyYWN0ZXJzID0gc3RyaW5nLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwpAQCAtNjUw
LDIwICs2MjEsMTIgQEAgc3RhdGljIFZlY3Rvcjx1aW50OF90PiBzaGlmdEpJU0VuY29kZShTdHJp
bmdWaWV3IHN0cmluZywgRnVuY3Rpb248dm9pZChVQ2hhcjMyLAogICAgICAgICBpZiAoY29kZVBv
aW50ID09IDB4MjIxMikKICAgICAgICAgICAgIGNvZGVQb2ludCA9IDB4RkYwRDsKICAgICAgICAg
Ci0gICAgICAgIGF1dG8gY29kZVVuaXQgPSBzdGF0aWNfY2FzdDxVQ2hhcj4oY29kZVBvaW50KTsK
LSAgICAgICAgaWYgKGNvZGVVbml0ICE9IGNvZGVQb2ludCkgewotICAgICAgICAgICAgdW5lbmNv
ZGFibGVIYW5kbGVyKGNvZGVQb2ludCwgcmVzdWx0KTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBhdXRvIHJhbmdlID0gc3RkOjplcXVhbF9yYW5n
ZShzdGQ6OmJlZ2luKGppczAyMDgpLCBzdGQ6OmVuZChqaXMwMjA4KSwgc3RkOjpwYWlyPFVDaGFy
LCB1aW50MTZfdD4oY29kZVVuaXQsIDApLCBbXShjb25zdCBhdXRvJiBhLCBjb25zdCBhdXRvJiBi
KSB7Ci0gICAgICAgICAgICByZXR1cm4gYS5maXJzdCA8IGIuZmlyc3Q7Ci0gICAgICAgIH0pOwor
ICAgICAgICBhdXRvIHJhbmdlID0gZmluZEluU29ydGVkUGFpcnMoamlzMDIwOCwgY29kZVBvaW50
KTsKICAgICAgICAgaWYgKHJhbmdlLmZpcnN0ID09IHJhbmdlLnNlY29uZCkgewogICAgICAgICAg
ICAgdW5lbmNvZGFibGVIYW5kbGVyKGNvZGVQb2ludCwgcmVzdWx0KTsKICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIEFTU0VSVChyYW5nZS5maXJz
dCArIDMgPj0gcmFuZ2Uuc2Vjb25kKTsKICAgICAgICAgZm9yIChhdXRvKiBwYWlyID0gcmFuZ2Uu
c2Vjb25kIC0gMTsgcGFpciA+PSByYW5nZS5maXJzdDsgcGFpci0tKSB7CiAgICAgICAgICAgICB1
aW50MTZfdCBwb2ludGVyID0gcGFpci0+c2Vjb25kOwpAQCAtNjg0LDE2ICs2NDcsMTYgQEAgc3Rh
dGljIFZlY3Rvcjx1aW50OF90PiBzaGlmdEpJU0VuY29kZShTdHJpbmdWaWV3IHN0cmluZywgRnVu
Y3Rpb248dm9pZChVQ2hhcjMyLAogdXNpbmcgRVVDS1JFbmNvZGluZ0luZGV4ID0gc3RkOjphcnJh
eTxzdGQ6OnBhaXI8VUNoYXIsIHVpbnQxNl90Piwgc3RkOjpzaXplKGV1Y0tSRGVjb2RpbmdJbmRl
eCk+Owogc3RhdGljIGNvbnN0IEVVQ0tSRW5jb2RpbmdJbmRleCYgZXVjS1JFbmNvZGluZ0luZGV4
KCkKIHsKLSAgICBzdGF0aWMgYXV0byYgdGFibGUgPSAqW10gewotICAgICAgICBhdXRvIHRhYmxl
ID0gbmV3IEVVQ0tSRW5jb2RpbmdJbmRleDsKKyAgICBzdGF0aWMgRVVDS1JFbmNvZGluZ0luZGV4
KiB0YWJsZTsKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZTsKKyAgICBzdGQ6OmNhbGxf
b25jZShvbmNlLCBbJl0geworICAgICAgICB0YWJsZSA9IG5ldyBFVUNLUkVuY29kaW5nSW5kZXg7
CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RkOjpzaXplKGV1Y0tSRGVjb2RpbmdJ
bmRleCk7IGkrKykKICAgICAgICAgICAgICgqdGFibGUpW2ldID0geyBldWNLUkRlY29kaW5nSW5k
ZXhbaV0uc2Vjb25kLCBldWNLUkRlY29kaW5nSW5kZXhbaV0uZmlyc3QgfTsKLSAgICAgICAgc3Rk
Ojpzb3J0KHRhYmxlLT5iZWdpbigpLCB0YWJsZS0+ZW5kKCksIFtdIChhdXRvJiBhLCBhdXRvJiBi
KSB7Ci0gICAgICAgICAgICByZXR1cm4gYS5maXJzdCA8IGIuZmlyc3Q7Ci0gICAgICAgIH0pOwot
ICAgICAgICByZXR1cm4gdGFibGU7Ci0gICAgfSgpOwotICAgIHJldHVybiB0YWJsZTsKKyAgICAg
ICAgc29ydEJ5Rmlyc3QoKnRhYmxlKTsKKyAgICAgICAgQVNTRVJUKHNvcnRlZEZpcnN0c0FyZVVu
aXF1ZSgqdGFibGUpKTsKKyAgICB9KTsKKyAgICByZXR1cm4gKnRhYmxlOwogfQogCiAvLyBodHRw
czovL2VuY29kaW5nLnNwZWMud2hhdHdnLm9yZy8jZXVjLWtyLWVuY29kZXIKQEAgLTcwNiwyNiAr
NjY5LDE3IEBAIHN0YXRpYyBWZWN0b3I8dWludDhfdD4gZXVjS1JFbmNvZGUoU3RyaW5nVmlldyBz
dHJpbmcsIEZ1bmN0aW9uPHZvaWQoVUNoYXIzMiwgVmVjCiAgICAgZm9yIChXVEY6OkNvZGVQb2lu
dEl0ZXJhdG9yPFVDaGFyPiBpdGVyYXRvcihjaGFyYWN0ZXJzLmdldCgpLCBjaGFyYWN0ZXJzLmdl
dCgpICsgc3RyaW5nLmxlbmd0aCgpKTsgIWl0ZXJhdG9yLmF0RW5kKCk7ICsraXRlcmF0b3IpIHsK
ICAgICAgICAgYXV0byBjb2RlUG9pbnQgPSAqaXRlcmF0b3I7CiAgICAgICAgIGlmIChpc0FTQ0lJ
KGNvZGVQb2ludCkpIHsKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoc3RhdGljX2Nhc3Q8dWlu
dDhfdD4oY29kZVBvaW50KSk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGNvZGVQb2ludCk7
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgYXV0
byBjb2RlVW5pdCA9IHN0YXRpY19jYXN0PFVDaGFyPihjb2RlUG9pbnQpOwotICAgICAgICBpZiAo
Y29kZVVuaXQgIT0gY29kZVBvaW50KSB7CisgICAgICAgIGF1dG8gcG9pbnRlciA9IGZpbmRGaXJz
dEluU29ydGVkUGFpcnMoZXVjS1JFbmNvZGluZ0luZGV4KCksIGNvZGVQb2ludCk7CisgICAgICAg
IGlmICghcG9pbnRlcikgewogICAgICAgICAgICAgdW5lbmNvZGFibGVIYW5kbGVyKGNvZGVQb2lu
dCwgcmVzdWx0KTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIGF1
dG8mIGluZGV4ID0gZXVjS1JFbmNvZGluZ0luZGV4KCk7Ci0gICAgICAgIGF1dG8gcmFuZ2UgPSBz
dGQ6OmVxdWFsX3JhbmdlKGluZGV4LmJlZ2luKCksIGluZGV4LmVuZCgpLCBzdGQ6OnBhaXI8VUNo
YXIsIHVpbnQxNl90Pihjb2RlUG9pbnQsIDApLCBbXShjb25zdCBhdXRvJiBhLCBjb25zdCBhdXRv
JiBiKSB7Ci0gICAgICAgICAgICByZXR1cm4gYS5maXJzdCA8IGIuZmlyc3Q7Ci0gICAgICAgIH0p
OwotICAgICAgICBpZiAocmFuZ2UuZmlyc3QgPT0gcmFuZ2Uuc2Vjb25kKSB7Ci0gICAgICAgICAg
ICB1bmVuY29kYWJsZUhhbmRsZXIoY29kZVBvaW50LCByZXN1bHQpOwotICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgdWludDE2X3QgcG9pbnRlciA9IHJhbmdlLmZpcnN0
LT5zZWNvbmQ7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQocG9pbnRlciAvIDE5MCArIDB4ODEpOwot
ICAgICAgICByZXN1bHQuYXBwZW5kKHBvaW50ZXIgJSAxOTAgKyAweDQxKTsKKyAgICAgICAgcmVz
dWx0LmFwcGVuZCgqcG9pbnRlciAvIDE5MCArIDB4ODEpOworICAgICAgICByZXN1bHQuYXBwZW5k
KCpwb2ludGVyICUgMTkwICsgMHg0MSk7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CiB9CkBA
IC03MzYsMTIgKzY5MCw4IEBAIFN0cmluZyBUZXh0Q29kZWNDSks6OmV1Y0tSRGVjb2RlKGNvbnN0
IHVpbnQ4X3QqIGJ5dGVzLCBzaXplX3QgbGVuZ3RoLCBib29sIGZsdXNoCiAgICAgcmV0dXJuIGRl
Y29kZUNvbW1vbihieXRlcywgbGVuZ3RoLCBmbHVzaCwgc3RvcE9uRXJyb3IsIHNhd0Vycm9yLCBb
dGhpc10gKHVpbnQ4X3QgYnl0ZSwgU3RyaW5nQnVpbGRlciYgcmVzdWx0KSB7CiAgICAgICAgIGlm
ICh1aW50OF90IGxlYWQgPSBzdGQ6OmV4Y2hhbmdlKG1fbGVhZCwgMHgwMCkpIHsKICAgICAgICAg
ICAgIGlmIChieXRlID49IDB4NDEgJiYgYnl0ZSA8PSAweEZFKSB7Ci0gICAgICAgICAgICAgICAg
dWludDE2X3QgcG9pbnRlciA9IChsZWFkIC0gMHg4MSkgKiAxOTAgKyBieXRlIC0gMHg0MTsKLSAg
ICAgICAgICAgICAgICBhdXRvIHJhbmdlID0gc3RkOjplcXVhbF9yYW5nZShzdGQ6OmJlZ2luKGV1
Y0tSRGVjb2RpbmdJbmRleCksIHN0ZDo6ZW5kKGV1Y0tSRGVjb2RpbmdJbmRleCksIHN0ZDo6cGFp
cjx1aW50MTZfdCwgVUNoYXI+KHBvaW50ZXIsIDApLCBbXSAoY29uc3QgYXV0byYgYSwgY29uc3Qg
YXV0byYgYikgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gYS5maXJzdCA8IGIuZmlyc3Q7
Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgaWYgKHJhbmdlLmZpcnN0ICE9
IHJhbmdlLnNlY29uZCkgewotICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHJhbmdl
LmZpcnN0LT5zZWNvbmQpOworICAgICAgICAgICAgICAgIGlmIChhdXRvIGNvZGVQb2ludCA9IGZp
bmRGaXJzdEluU29ydGVkUGFpcnMoZXVjS1JEZWNvZGluZ0luZGV4LCAobGVhZCAtIDB4ODEpICog
MTkwICsgYnl0ZSAtIDB4NDEpKSB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQo
KmNvZGVQb2ludCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTYXdFcnJvcjo6Tm87CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtNzY5LDIzICs3MTksMjAgQEAgc3Rh
dGljIFZlY3Rvcjx1aW50OF90PiBiaWc1RW5jb2RlKFN0cmluZ1ZpZXcgc3RyaW5nLCBGdW5jdGlv
bjx2b2lkKFVDaGFyMzIsIFZlY3QKIAogICAgIGF1dG8gY2hhcmFjdGVycyA9IHN0cmluZy51cGNv
bnZlcnRlZENoYXJhY3RlcnMoKTsKICAgICBmb3IgKFdURjo6Q29kZVBvaW50SXRlcmF0b3I8VUNo
YXI+IGl0ZXJhdG9yKGNoYXJhY3RlcnMuZ2V0KCksIGNoYXJhY3RlcnMuZ2V0KCkgKyBzdHJpbmcu
bGVuZ3RoKCkpOyAhaXRlcmF0b3IuYXRFbmQoKTsgKytpdGVyYXRvcikgewotICAgICAgICBhdXRv
IGMgPSAqaXRlcmF0b3I7Ci0gICAgICAgIGlmIChpc0FTQ0lJKGMpKSB7Ci0gICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKGMpOworICAgICAgICBhdXRvIGNvZGVQb2ludCA9ICppdGVyYXRvcjsKKyAg
ICAgICAgaWYgKGlzQVNDSUkoY29kZVBvaW50KSkgeworICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZChjb2RlUG9pbnQpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAg
ICBhdXRvIHBvaW50ZXJSYW5nZSA9IHN0ZDo6ZXF1YWxfcmFuZ2Uoc3RkOjpiZWdpbihiaWc1RW5j
b2RpbmdNYXApLCBzdGQ6OmVuZChiaWc1RW5jb2RpbmdNYXApLCBzdGQ6OnBhaXI8VUNoYXIzMiwg
dWludDE2X3Q+KGMsIDApLCBbXShjb25zdCBhdXRvJiBhLCBjb25zdCBhdXRvJiBiKSB7Ci0gICAg
ICAgICAgICByZXR1cm4gYS5maXJzdCA8IGIuZmlyc3Q7Ci0gICAgICAgIH0pOwotICAgICAgICAK
KyAgICAgICAgYXV0byBwb2ludGVyUmFuZ2UgPSBmaW5kSW5Tb3J0ZWRQYWlycyhiaWc1RW5jb2Rp
bmdNYXAsIGNvZGVQb2ludCk7CiAgICAgICAgIGlmIChwb2ludGVyUmFuZ2UuZmlyc3QgPT0gcG9p
bnRlclJhbmdlLnNlY29uZCkgewotICAgICAgICAgICAgdW5lbmNvZGFibGVIYW5kbGVyKGMsIHJl
c3VsdCk7CisgICAgICAgICAgICB1bmVuY29kYWJsZUhhbmRsZXIoY29kZVBvaW50LCByZXN1bHQp
OwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAogICAgICAgICB1aW50MTZfdCBw
b2ludGVyID0gMDsKLSAgICAgICAgaWYgKGMgPT0gMHgyNTUwIHx8IGMgPT0gMHgyNTVFIHx8IGMg
PT0gMHgyNTYxIHx8IGMgPT0gMHgyNTZBIHx8IGMgPT0gMHg1MzQxIHx8IGMgPT0gMHg1MzQ1KQor
ICAgICAgICBpZiAoY29kZVBvaW50ID09IDB4MjU1MCB8fCBjb2RlUG9pbnQgPT0gMHgyNTVFIHx8
IGNvZGVQb2ludCA9PSAweDI1NjEgfHwgY29kZVBvaW50ID09IDB4MjU2QSB8fCBjb2RlUG9pbnQg
PT0gMHg1MzQxIHx8IGNvZGVQb2ludCA9PSAweDUzNDUpCiAgICAgICAgICAgICBwb2ludGVyID0g
KHBvaW50ZXJSYW5nZS5zZWNvbmQgLSAxKS0+c2Vjb25kOwogICAgICAgICBlbHNlCiAgICAgICAg
ICAgICBwb2ludGVyID0gcG9pbnRlclJhbmdlLmZpcnN0LT5zZWNvbmQ7CkBAIC04NTQsMTggKzgw
MSwxOCBAQCBGdW5jdGlvbjx2b2lkKFVDaGFyMzIsIFZlY3Rvcjx1aW50OF90PiYpPiB1bmVuY29k
YWJsZUhhbmRsZXIoVW5lbmNvZGFibGVIYW5kbGluZwogdXNpbmcgQmlnNURlY29kZUluZGV4ID0g
c3RkOjphcnJheTxzdGQ6OnBhaXI8dWludDE2X3QsIFVDaGFyMzI+LCBzdGQ6OnNpemUoYmlnNURl
Y29kaW5nRXh0cmFzKSArIHN0ZDo6c2l6ZShiaWc1RW5jb2RpbmdNYXApPjsKIHN0YXRpYyBjb25z
dCBCaWc1RGVjb2RlSW5kZXgmIGJpZzVEZWNvZGVJbmRleCgpCiB7Ci0gICAgc3RhdGljIGF1dG8m
IHRhYmxlID0gKltdIHsKLSAgICAgICAgYXV0byB0YWJsZSA9IG5ldyBCaWc1RGVjb2RlSW5kZXg7
CisgICAgc3RhdGljIEJpZzVEZWNvZGVJbmRleCogdGFibGU7CisgICAgc3RhdGljIHN0ZDo6b25j
ZV9mbGFnIG9uY2U7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZSwgWyZdIHsKKyAgICAgICAgdGFi
bGUgPSBuZXcgQmlnNURlY29kZUluZGV4OwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHN0ZDo6c2l6ZShiaWc1RGVjb2RpbmdFeHRyYXMpOyBpKyspCiAgICAgICAgICAgICAoKnRhYmxl
KVtpXSA9IGJpZzVEZWNvZGluZ0V4dHJhc1tpXTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBzdGQ6OnNpemUoYmlnNUVuY29kaW5nTWFwKTsgaSsrKQogICAgICAgICAgICAgKCp0YWJs
ZSlbaSArIHN0ZDo6c2l6ZShiaWc1RGVjb2RpbmdFeHRyYXMpXSA9IHsgYmlnNUVuY29kaW5nTWFw
W2ldLnNlY29uZCwgYmlnNUVuY29kaW5nTWFwW2ldLmZpcnN0IH07Ci0gICAgICAgIHN0ZDo6c29y
dCh0YWJsZS0+YmVnaW4oKSwgdGFibGUtPmVuZCgpLCBbXSAoYXV0byYgYSwgYXV0byYgYikgewot
ICAgICAgICAgICAgcmV0dXJuIGEuZmlyc3QgPCBiLmZpcnN0OwotICAgICAgICB9KTsKLSAgICAg
ICAgcmV0dXJuIHRhYmxlOwotICAgIH0oKTsKLSAgICByZXR1cm4gdGFibGU7CisgICAgICAgIHNv
cnRCeUZpcnN0KCp0YWJsZSk7CisgICAgICAgIEFTU0VSVChzb3J0ZWRGaXJzdHNBcmVVbmlxdWUo
KnRhYmxlKSk7CisgICAgfSk7CisgICAgcmV0dXJuICp0YWJsZTsKIH0KIAogU3RyaW5nIFRleHRD
b2RlY0NKSzo6YmlnNURlY29kZShjb25zdCB1aW50OF90KiBieXRlcywgc2l6ZV90IGxlbmd0aCwg
Ym9vbCBmbHVzaCwgYm9vbCBzdG9wT25FcnJvciwgYm9vbCYgc2F3RXJyb3IpCkBAIC04ODgsMTQg
KzgzNSw5IEBAIFN0cmluZyBUZXh0Q29kZWNDSks6OmJpZzVEZWNvZGUoY29uc3QgdWludDhfdCog
Ynl0ZXMsIHNpemVfdCBsZW5ndGgsIGJvb2wgZmx1c2gsCiAgICAgICAgICAgICAgICAgICAgIHJl
c3VsdC5hcHBlbmRDaGFyYWN0ZXIoMHgwMEVBKTsKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZENoYXJhY3RlcigweDAzMEMpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGF1dG8mIGluZGV4ID0gYmlnNURlY29kZUluZGV4KCk7Ci0gICAgICAg
ICAgICAgICAgICAgIGF1dG8gcmFuZ2UgPSBzdGQ6OmVxdWFsX3JhbmdlKGluZGV4LmJlZ2luKCks
IGluZGV4LmVuZCgpLCBzdGQ6OnBhaXI8dWludDE2X3QsIFVDaGFyMzI+KHBvaW50ZXIsIDApLCBb
XShjb25zdCBhdXRvJiBhLCBjb25zdCBhdXRvJiBiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gYS5maXJzdCA8IGIuZmlyc3Q7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAg
ICAgICAgICAgICAgICAgICBpZiAocmFuZ2UuZmlyc3QgIT0gcmFuZ2Uuc2Vjb25kKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQocmFuZ2UuZmlyc3QgKyAxID09IHJhbmdlLnNlY29u
ZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kQ2hhcmFjdGVyKHJhbmdl
LmZpcnN0LT5zZWNvbmQpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGF1dG8gY29kZVBvaW50ID0gZmluZEZpcnN0SW5Tb3J0ZWRQYWlycyhiaWc1
RGVjb2RlSW5kZXgoKSwgcG9pbnRlcikpCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQu
YXBwZW5kQ2hhcmFjdGVyKCpjb2RlUG9pbnQpOworICAgICAgICAgICAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU2F3RXJyb3I6OlllczsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgcmV0dXJuIFNhd0Vycm9yOjpObzsKQEAgLTkwNSw3ICs4
NDcsNyBAQCBTdHJpbmcgVGV4dENvZGVjQ0pLOjpiaWc1RGVjb2RlKGNvbnN0IHVpbnQ4X3QqIGJ5
dGVzLCBzaXplX3QgbGVuZ3RoLCBib29sIGZsdXNoLAogICAgICAgICAgICAgcmV0dXJuIFNhd0Vy
cm9yOjpZZXM7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGlzQVNDSUkoYnl0ZSkpIHsKLSAgICAg
ICAgICAgIHJlc3VsdC5hcHBlbmQoc3RhdGljX2Nhc3Q8TENoYXI+KGJ5dGUpKTsKKyAgICAgICAg
ICAgIHJlc3VsdC5hcHBlbmQoc3RhdGljX2Nhc3Q8Y2hhcj4oYnl0ZSkpOwogICAgICAgICAgICAg
cmV0dXJuIFNhd0Vycm9yOjpObzsKICAgICAgICAgfQogICAgICAgICBpZiAoYnl0ZSA+PSAweDgx
ICYmIGJ5dGUgPD0gMHhGRSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC9UZXh0Q29kZWNTaW5nbGVCeXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvVGV4dENvZGVjU2luZ2xlQnl0ZS5jcHAKaW5kZXggYTBiMTU3OWIxODdmZDI2NTI3MTNkNjYw
MTJmOTc0N2M2NTg0ZDE3Ny4uODA3NjE3MDQ3NmFiZjIyMTQyZTNmMjljMzJkOWM3MGIzMTY5OTlj
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNTaW5n
bGVCeXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1Np
bmdsZUJ5dGUuY3BwCkBAIC0yNiw2ICsyNiw5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiVGV4dENvZGVjU2luZ2xlQnl0ZS5oIgogCisjaW5jbHVkZSAiRW5jb2RpbmdUYWJsZXMu
aCIKKyNpbmNsdWRlIDxtdXRleD4KKyNpbmNsdWRlIDx3dGYvSXRlcmF0b3JSYW5nZS5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NvZGVQb2ludEl0ZXJhdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nQnVpbGRlci5oPgogI2luY2x1ZGUgPHd0Zi91bmljb2RlL0NoYXJhY3Rlck5hbWVzLmg+
CkBAIC00Niw3ICs0OSw4IEBAIGVudW0gY2xhc3MgVGV4dENvZGVjU2luZ2xlQnl0ZTo6RW5jb2Rp
bmcgOiB1aW50OF90IHsKIH07CiAKIHVzaW5nIFNpbmdsZUJ5dGVEZWNvZGVUYWJsZSA9IHN0ZDo6
YXJyYXk8VUNoYXIsIDEyOD47Ci11c2luZyBTaW5nbGVCeXRlRW5jb2RlVGFibGUgPSBzdGQ6OnBh
aXI8Y29uc3Qgc3RkOjpwYWlyPFVDaGFyLCB1aW50OF90PiosIHNpemVfdD47Cit1c2luZyBTaW5n
bGVCeXRlRW5jb2RlVGFibGVFbnRyeSA9IHN0ZDo6cGFpcjxVQ2hhciwgdWludDhfdD47Cit1c2lu
ZyBTaW5nbGVCeXRlRW5jb2RlVGFibGUgPSBXVEY6Okl0ZXJhdG9yUmFuZ2U8Y29uc3QgU2luZ2xl
Qnl0ZUVuY29kZVRhYmxlRW50cnkqPjsKIAogLy8gRnJvbSBodHRwczovL2VuY29kaW5nLnNwZWMu
d2hhdHdnLm9yZy9pbmRleC1pc28tODg1OS0zLnR4dCB3aXRoIDB4RkZGRCBmaWxsaW5nIHRoZSBn
YXBzCiBzdGF0aWMgY29uc3RleHByIFNpbmdsZUJ5dGVEZWNvZGVUYWJsZSBpc284ODU5MyB7CkBA
IC0xNzAsMTcgKzE3NCwyMyBAQCBzdGF0aWMgY29uc3RleHByIFNpbmdsZUJ5dGVEZWNvZGVUYWJs
ZSBpYm04NjYgewogdGVtcGxhdGU8Y29uc3QgU2luZ2xlQnl0ZURlY29kZVRhYmxlJiBkZWNvZGVU
YWJsZT4gU2luZ2xlQnl0ZUVuY29kZVRhYmxlIHRhYmxlRm9yRW5jb2RpbmcoKQogewogICAgIC8v
IEZJWE1FOiBXaXRoIHRoZSBDKysyMCB2ZXJzaW9uIG9mIHN0ZDo6Y291bnQsIHdlIHNob3VsZCBi
ZSBhYmxlIHRvIGNoYW5nZSB0aGlzIGZyb20gY29uc3QgdG8gY29uc3RleHByIGFuZCBnZXQgaXQg
Y29tcHV0ZWQgYXQgY29tcGlsZSB0aW1lLgotICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc2l6ZSA9
IHN0ZDo6c2l6ZShkZWNvZGVUYWJsZSkgLSBzdGQ6OmNvdW50KHN0ZDo6YmVnaW4oZGVjb2RlVGFi
bGUpLCBzdGQ6OmVuZChkZWNvZGVUYWJsZSksIHJlcGxhY2VtZW50Q2hhcmFjdGVyKTsKLSAgICBz
dGF0aWMgY29uc3QgYXV0byB0YWJsZSA9IFsmXSB7Ci0gICAgICAgIGF1dG8gdGFibGUgPSBuZXcg
c3RkOjpwYWlyPFVDaGFyLCB1aW50OF90PltzaXplXTsKKyAgICBzdGF0aWMgY29uc3QgYXV0byBz
aXplID0gc3RkOjpzaXplKGRlY29kZVRhYmxlKSAtIHN0ZDo6Y291bnQoc3RkOjpiZWdpbihkZWNv
ZGVUYWJsZSksIHN0ZDo6ZW5kKGRlY29kZVRhYmxlKSwgcmVwbGFjZW1lbnRDaGFyYWN0ZXIpOwor
ICAgIHN0YXRpYyBjb25zdCBTaW5nbGVCeXRlRW5jb2RlVGFibGVFbnRyeSogZW50cmllczsKKyAg
ICBzdGQ6Om9uY2VfZmxhZyBvbmNlOworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2UsIFsmXSB7Cisg
ICAgICAgIGF1dG8qIG11dGFibGVFbnRyaWVzID0gbmV3IFNpbmdsZUJ5dGVFbmNvZGVUYWJsZUVu
dHJ5W3NpemVdOwogICAgICAgICBzaXplX3QgaiA9IDA7CiAgICAgICAgIGZvciAodWludDhfdCBp
ID0gMDsgaSA8IHN0ZDo6c2l6ZShkZWNvZGVUYWJsZSk7IGkrKykgewogICAgICAgICAgICAgaWYg
KGRlY29kZVRhYmxlW2ldICE9IHJlcGxhY2VtZW50Q2hhcmFjdGVyKQotICAgICAgICAgICAgICAg
IHRhYmxlW2orK10gPSB7IGRlY29kZVRhYmxlW2ldLCBpIH07CisgICAgICAgICAgICAgICAgbXV0
YWJsZUVudHJpZXNbaisrXSA9IHsgZGVjb2RlVGFibGVbaV0sIGkgKyAweDgwIH07CiAgICAgICAg
IH0KLSAgICAgICAgcmV0dXJuIHRhYmxlOwotICAgIH0oKTsKLSAgICByZXR1cm4geyB0YWJsZSwg
c2l6ZSB9OworICAgICAgICBBU1NFUlQoaiA9PSBzaXplKTsKKyAgICAgICAgYXV0byBjb2xsZWN0
aW9uID0gV1RGOjptYWtlSXRlcmF0b3JSYW5nZShtdXRhYmxlRW50cmllcyArIDAsIG11dGFibGVF
bnRyaWVzICsgc2l6ZSk7CisgICAgICAgIHNvcnRCeUZpcnN0KGNvbGxlY3Rpb24pOworICAgICAg
ICBBU1NFUlQoc29ydGVkRmlyc3RzQXJlVW5pcXVlKGNvbGxlY3Rpb24pKTsKKyAgICAgICAgZW50
cmllcyA9IG11dGFibGVFbnRyaWVzOworICAgIH0pOworICAgIHJldHVybiBXVEY6Om1ha2VJdGVy
YXRvclJhbmdlKGVudHJpZXMgKyAwLCBlbnRyaWVzICsgc2l6ZSk7CiB9CiAKIHN0YXRpYyBTaW5n
bGVCeXRlRW5jb2RlVGFibGUgdGFibGVGb3JFbmNvZGluZyhUZXh0Q29kZWNTaW5nbGVCeXRlOjpF
bmNvZGluZyBlbmNvZGluZykKQEAgLTI0MCwzMSArMjUwLDIwIEBAIHN0YXRpYyBjb25zdGV4cHIg
Y29uc3QgU2luZ2xlQnl0ZURlY29kZVRhYmxlJiB0YWJsZUZvckRlY29kaW5nKFRleHRDb2RlY1Np
bmdsZUJ5CiAvLyBodHRwczovL2VuY29kaW5nLnNwZWMud2hhdHdnLm9yZy8jc2luZ2xlLWJ5dGUt
ZW5jb2Rlcgogc3RhdGljIFZlY3Rvcjx1aW50OF90PiBlbmNvZGUoY29uc3QgU2luZ2xlQnl0ZUVu
Y29kZVRhYmxlJiB0YWJsZSwgU3RyaW5nVmlldyBzdHJpbmcsIEZ1bmN0aW9uPHZvaWQoVUNoYXIz
MiwgVmVjdG9yPHVpbnQ4X3Q+Jik+JiYgdW5lbmNvZGFibGVIYW5kbGVyKQogeworICAgIC8vIEZJ
WE1FOiBDb25zaWRlciBhZGRpbmcgYW4gQVNDSUkgZmFzdCBwYXRoIGxpa2UgdGhlIG9uZSBpbiBU
ZXh0Q29kZWNMYXRpbjE6OmRlY29kZS4KICAgICBWZWN0b3I8dWludDhfdD4gcmVzdWx0OwogICAg
IHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHN0cmluZy5sZW5ndGgoKSk7Ci0KLSAgICBh
dXRvIGNoYXJhY3RlcnMgPSBzdHJpbmcudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgZm9y
IChXVEY6OkNvZGVQb2ludEl0ZXJhdG9yPFVDaGFyPiBpdGVyYXRvcihjaGFyYWN0ZXJzLmdldCgp
LCBjaGFyYWN0ZXJzLmdldCgpICsgc3RyaW5nLmxlbmd0aCgpKTsgIWl0ZXJhdG9yLmF0RW5kKCk7
ICsraXRlcmF0b3IpIHsKLSAgICAgICAgYXV0byBjb2RlUG9pbnQgPSAqaXRlcmF0b3I7CisgICAg
Zm9yIChhdXRvIGNvZGVQb2ludCA6IHN0cmluZy5jb2RlUG9pbnRzKCkpIHsKICAgICAgICAgaWYg
KGlzQVNDSUkoY29kZVBvaW50KSkgewogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChjb2RlUG9p
bnQpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLQotICAgICAgICBhdXRvIGNv
ZGVVbml0ID0gc3RhdGljX2Nhc3Q8VUNoYXI+KGNvZGVQb2ludCk7Ci0gICAgICAgIGlmIChjb2Rl
VW5pdCAhPSBjb2RlUG9pbnQpIHsKLSAgICAgICAgICAgIHVuZW5jb2RhYmxlSGFuZGxlcihjb2Rl
UG9pbnQsIHJlc3VsdCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgYXV0byByYW5nZSA9IHN0ZDo6ZXF1YWxfcmFuZ2UodGFibGUuZmlyc3QsIHRh
YmxlLmZpcnN0ICsgdGFibGUuc2Vjb25kLCBzdGQ6OnBhaXI8VUNoYXIsIHVpbnQ4X3Q+KGNvZGVV
bml0LCAwKSwgW10oY29uc3QgYXV0byYgYSwgY29uc3QgYXV0byYgYikgewotICAgICAgICAgICAg
cmV0dXJuIGEuZmlyc3QgPCBiLmZpcnN0OwotICAgICAgICB9KTsKLSAgICAgICAgaWYgKHJhbmdl
LmZpcnN0ID09IHJhbmdlLnNlY29uZCkgeworICAgICAgICBhdXRvIGJ5dGUgPSBmaW5kRmlyc3RJ
blNvcnRlZFBhaXJzKHRhYmxlLCBjb2RlUG9pbnQpOworICAgICAgICBpZiAoIWJ5dGUpIHsKICAg
ICAgICAgICAgIHVuZW5jb2RhYmxlSGFuZGxlcihjb2RlUG9pbnQsIHJlc3VsdCk7CiAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICByZXN1bHQuYXBwZW5kKHJhbmdlLmZp
cnN0LT5zZWNvbmQgKyAweDgwKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgqYnl0ZSk7CiAgICAg
fQogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC0yODQsNyArMjgzLDYgQEAgc3RhdGljIFN0cmlu
ZyBkZWNvZGUoY29uc3QgU2luZ2xlQnl0ZURlY29kZVRhYmxlJiB0YWJsZSwgY29uc3QgdWludDhf
dCogYnl0ZXMsIHMKICAgICAgICAgICAgIHNhd0Vycm9yID0gdHJ1ZTsKICAgICAgICAgcmVzdWx0
LmFwcGVuZChjb2RlUG9pbnQpOwogICAgIH07Ci0KICAgICBpZiAoc3RvcE9uRXJyb3IpIHsKICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgICAgICAg
cGFyc2VCeXRlKGJ5dGVzW2ldKTsKQEAgLTI5NSw3ICsyOTMsNiBAQCBzdGF0aWMgU3RyaW5nIGRl
Y29kZShjb25zdCBTaW5nbGVCeXRlRGVjb2RlVGFibGUmIHRhYmxlLCBjb25zdCB1aW50OF90KiBi
eXRlcywgcwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKQogICAg
ICAgICAgICAgcGFyc2VCeXRlKGJ5dGVzW2ldKTsKICAgICB9Ci0KICAgICByZXR1cm4gcmVzdWx0
LnRvU3RyaW5nKCk7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408130</attachid>
            <date>2020-09-06 14:14:21 -0700</date>
            <delta_ts>2020-09-06 14:18:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216229-20200906141421.patch</filename>
            <type>text/plain</type>
            <size>30897</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2NjgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzY2NDFhNTYzMjViZTYx
YWNkZTIxYmI4NzA1MmZmNTFjZjA0NjZjNC4uMzdkNzJhNTIxOTUwYTY4MzBkMmMxZTBiZDMyMGQ2
ZTUzN2E3OWUyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcxIEBACisyMDIwLTA5LTA2ICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIFRleHRDb2RlY0NKSyBh
bmQgVGV4dENvZGVjU2luZ2xlQnl0ZSB0aHJlYWQtc2FmZSBhbmQgcmVmYWN0b3IgYSBiaXQgdG8g
c2hhcmUgY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjE2MjI5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGhlIHRleHQgZW5jb2RpbmcgbWFjaGluZXJ5IGlzIHVzYWJsZSBvbiBtdWx0aXBsZSB0aHJl
YWRzLCBidXQgb3VyIG5ldyBUZXh0Q29kZWMKKyAgICAgICAgY2xhc3NlcyBoYXZlIHNvbWUgZ2xv
YmFsIGRhdGEgc3RydWN0dXJlcyB0aGF0IG5lZWQgdG8gYmUgZ3VhcmRlZCB0byBrZWVwIHRoYXQg
aW50YWN0LgorCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9FbmNvZGluZ1RhYmxlcy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpjaGVja0VuY29kaW5nVGFibGVJbnZhcmlhbnRzKTogT25lLXRpbWUg
Y2hlY2sgZm9yIGludmFyaWFudHMgdGhhdCBjbGllbnRzCisgICAgICAgIG9mIHRoZXNlIHRhYmxl
cyBkZXBlbmQgb24uCisKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L0VuY29kaW5nVGFibGVzLmg6
IEFkZGVkIGNoZWNrRW5jb2RpbmdUYWJsZUludmFyaWFudHMuIEFsc28gQWRkZWQKKyAgICAgICAg
ZnVuY3Rpb24gdGVtcGxhdGVzIGZvciBlbmNvZGluZyB0YWJsZXM6IEFkZGVkIGZpbmRGaXJzdElu
U29ydGVkUGFpcnMgYW5kCisgICAgICAgIGZpbmRJblNvcnRlZFBhaXJzIGZvciBzZWFyY2hpbmcg
YSBzb3J0ZWQgYXJyYXkgb2YgcGFpcnMgdXNlZCBhcyBhIG1hcC4gQWRkZWQKKyAgICAgICAgc29y
dEJ5Rmlyc3QgdG8gYWlkIGluIHRoZSBjcmVhdGlvbiBvZiBzdWNoIGEgc29ydGVkIGFycmF5LiBB
bmQgYWRkZWQgaXNTb3J0ZWRCeUZpcnN0CisgICAgICAgIGFuZCBzb3J0ZWRGaXJzdHNBcmVVbmlx
dWUgc28gd2UgY2FuIGFzc2VydCB0aG9zZSBpbnZhcmlhbnRzLiBPbmUgb2YgdGhlIGdvb2QKKyAg
ICAgICAgZmVhdHVyZXMgb2YgdGhlIGZpbmRJblNvcnRlZFBhaXJzIGZ1bmN0aW9ucyBpcyB0aGF0
IHRoZXkgaGFuZGxlcyBpbnRlZ2VyIHZhbHVlcyB0aGF0CisgICAgICAgIGRvbid0IGZpdCBpbiBh
biBpbnRlZ3JhbCBrZXkgdHlwZSwgcmV0dXJuaW5nIFdURjo6bnVsbG9wdCBpbiB0aGF0IGNhc2Uu
IFRoYXQgbGV0cyB1cworICAgICAgICBwYXNzIGNvZGUgcG9pbnQgdmFsdWVzIHdoZW4gbG9va2lu
ZyBpbiB0YWJsZXMgdGhhdCB1c2UgY29kZSB1bml0cyBhcyB0aGVpciBrZXksIHdpdGhvdXQKKyAg
ICAgICAgc2VwYXJhdGVseSBjaGVja2luZyBpZiB0aGV5IGFyZSBpbiByYW5nZSwgd2hpY2ggb3Ro
ZXJ3aXNlIHJlcXVpcmVzIGNvbnZlcnRpbmcgdG8gVUNoYXIKKyAgICAgICAgYW5kIGNoZWNraW5n
IGZvciBlcXVhbGl0eSBvciBjYWxsaW5nIFVfSVNfQk1QLgorCisgICAgICAgICogcGxhdGZvcm0v
dGV4dC9UZXh0Q29kZWNDSksuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjQ0pLOjpU
ZXh0Q29kZWNDSkspOiBDYWxsIGNoZWNrRW5jb2RpbmdUYWJsZUludmFyaWFudHMuCisgICAgICAg
IChXZWJDb3JlOjpUZXh0Q29kZWNDSks6OmVuY29kZSBjb25zdCk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6amlzMDIwOERlY29kZUluZGV4KTogVXNlIHN0ZDo6Y2FsbF9vbmNlIGZvciB0aHJl
YWQgc2FmZXR5LgorICAgICAgICBVc2Ugc29ydEJ5Rmlyc3QgYW5kIHNvcnRlZEZpcnN0c0FyZVVu
aXF1ZS4KKyAgICAgICAgKFdlYkNvcmU6OmNvZGVQb2ludEpJUzAyMDgpOiBVc2UgZmluZEZpcnN0
SW5Tb3J0ZWRQYWlycy4KKyAgICAgICAgKFdlYkNvcmU6OmNvZGVQb2ludEpJUzAyMTIpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY0NKSzo6ZXVjSlBEZWNvZGUpOiBDYXN0IHRv
IGNoYXIgaW5zdGFkIG9mIExDaGFyIHdoZW4gYWRkaW5nCisgICAgICAgIGFuIEFTQ0lJIGNoYXJh
Y3RlciB0byBhIFN0cmluZ0J1aWxkZXIuCisgICAgICAgIChXZWJDb3JlOjpldWNKUEVuY29kZSk6
IFVzZSB0aGUgbmFtZSBjb2RlUG9pbnQgaW5zdGVhZCBvZiBjIHRvIG1hdGNoIG90aGVyCisgICAg
ICAgIHN1cnJvdW5kaW5nIGNvZGUuIFVzZSBmaW5kRmlyc3RJblNvcnRlZFBhaXJzLgorICAgICAg
ICAoV2ViQ29yZTo6aXNvMjAyMkpQRW5jb2RlKTogUmVtb3ZlZCBzb21lIHVubmVlZGVkIGNhc3Rz
IHRvIHVpbnQ4X3Qgd2hlbiBhcHBlbmRpbmcKKyAgICAgICAgYnl0ZXMgdG8gYSBWZWN0b3IuIEFk
ZGVkIGEgc3RhdGljX2Fzc2VydCB0byBjaGVjayB0aGUgc2l6ZSBvZiBpc28yMDIySlBLYXRha2Fu
YS4KKyAgICAgICAgVXNlIGZpbmRGaXJzdEluU29ydGVkUGFpcnMuCisgICAgICAgIChXZWJDb3Jl
OjpzaGlmdEpJU0VuY29kZSk6IFVzZSBmaW5kSW5Tb3J0ZWRQYWlycy4KKyAgICAgICAgKFdlYkNv
cmU6OmV1Y0tSRW5jb2RpbmdJbmRleCk6IFVzZSBzdGQ6OmNhbGxfb25jZSBmb3IgdGhyZWFkIHNh
ZmV0eS4KKyAgICAgICAgVXNlIHNvcnRCeUZpcnN0IGFuZCBzb3J0ZWRGaXJzdHNBcmVVbmlxdWUu
CisgICAgICAgIChXZWJDb3JlOjpldWNLUkVuY29kZSk6IFJlbW92ZWQgc29tZSB1bm5lZWRlZCBj
YXN0cyB0byB1aW50OF90IHdoZW4gYXBwZW5kaW5nCisgICAgICAgIGJ5dGVzIHRvIGEgVmVjdG9y
LiBVc2UgZmluZEZpcnN0SW5Tb3J0ZWRQYWlycy4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2Rl
Y0NKSzo6ZXVjS1JEZWNvZGUpOiBVc2UgZmluZEZpcnN0SW5Tb3J0ZWRQYWlycy4KKyAgICAgICAg
KFdlYkNvcmU6OmJpZzVFbmNvZGUpOiBVc2UgZmluZEluU29ydGVkUGFpcnMuIEFsc28gcmVuYW1l
ZCBjIHRvIGNvZGVQb2ludC4KKyAgICAgICAgKFdlYkNvcmU6OmJpZzVEZWNvZGVJbmRleCk6IFVz
ZSBzdGQ6OmNhbGxfb25jZSBmb3IgdGhyZWFkIHNhZmV0eS4KKyAgICAgICAgVXNlIHNvcnRCeUZp
cnN0IGFuZCBzb3J0ZWRGaXJzdHNBcmVVbmlxdWUuCisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29k
ZWNDSks6OmJpZzVEZWNvZGUpOiBVc2UgZmluZEZpcnN0SW5Tb3J0ZWRQYWlycy4gQ2FzdCB0byBj
aGFyCisgICAgICAgIGluc3RhZCBvZiBMQ2hhciB3aGVuIGFkZGluZyBhbiBBU0NJSSBjaGFyYWN0
ZXIgdG8gYSBTdHJpbmdCdWlsZGVyLgorCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0Q29k
ZWNTaW5nbGVCeXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRhYmxlRm9yRW5jb2RpbmcpOiBS
ZXR1cm4gYW4gSXRlcmF0b3JSYW5nZSBpbnN0ZWFkIG9mIGEgcGFpciBvZgorICAgICAgICBwb2lu
dGVyIGFuZCBzaXplLiBUaGlzIHdvcmtzIHdpdGggc3RkOjpiZWdpbi9lbmQuIEFsc28gbWFrZSB0
YWJsZSB3aXRoIGFjdHVhbAorICAgICAgICBlbmNvZGVkIGJ5dGVzLCBieSBhZGRpbmcgMHg4MCBo
ZXJlLCByYXRoZXIgdGhhbiBkb2luZyB0aGF0IHdoZW4gdXNpbmcgdGhlIHRhYmxlLgorICAgICAg
ICAoV2ViQ29yZTo6ZW5jb2RlKTogVXNlIHN0ZDo6Y2FsbF9vbmNlIGZvciB0aHJlYWQgc2FmZXR5
LgorICAgICAgICBVc2Ugc29ydEJ5Rmlyc3QgYW5kIHNvcnRlZEZpcnN0c0FyZVVuaXF1ZS4gVGhl
IGNvZGUgYmVmb3JlIHdhcyBub3Qgc29ydGluZyBhdAorICAgICAgICBhbGwsIHdoaWNoIG1lYW5z
IGl0IHByb2JhYmx5IGRpZG4ndCB3b3JrIGluIGFueSBjYXNlcyB3aGVyZSB0aGUgY29kZSB1bml0
cworICAgICAgICBoYXBwZW4gdG8gbm90IGJlIGluIGFzY2VuZGluZyBvcmRlci4gV2Ugc2hvdWxk
IGFkZCBzb21lIHRlc3QgY2FzZXMuCisgICAgICAgIChXZWJDb3JlOjpkZWNvZGUpOiBVc2UgZmlu
ZEZpcnN0SW5Tb3J0ZWRQYWlycy4gQWxzbyB1c2UgU3RyaW5nVmlldzo6Y29kZVBvaW50cworICAg
ICAgICBiZWNhdXNlIHRoZXNlIGFyZSBsaWtlbHkgdG8gYmUgOC1iaXQgc3RyaW5ncyBhbmQgd2Ug
ZG9uJ3QgbmVlZCB0byB0ZW1wb3JhcmlseQorICAgICAgICB1cGNvbnZlcnQgdGhlbSB0byAxNi1i
aXQganVzdCB0byBlbmNvZGUgdGhlbS4gU2hvdWxkIHByb2JhYmx5IGxhdGVyIG1lYXN1cmUgaWYK
KyAgICAgICAgdGhlIHVzZSBvZiBTdHJpbmdWaWV3Ojp1cGNvbnZlcnRlZENoYXJhY3RlcnMgcGx1
cyBDb2RlUG9pbnRJdGVyYXRvcjxVQ2hhcj4KKyAgICAgICAgaW5zdGVhZCBvZiBTdHJpbmdWaWV3
Ojpjb2RlUG9pbnRzIGlzIGJldHRlciBmb3IgcGVyZm9ybWFuY2UgaW4gdGhlIENKSyBlbmNvZGlu
ZworICAgICAgICBmdW5jdGlvbnMuIFRoaXMgYXBwcm9hY2ggbWVhbnMgbW9yZSBicmFuY2hpbmcg
aW5zaWRlIHRoZSBsb29wLCBidXQgdGhlIG90aGVyCisgICAgICAgIHZlcnNpb24gaW52b2x2ZXMg
bWVtb3J5IGFsbG9jYXRpb24gYW5kIGEgc2Vjb25kIGxvb3Agd2hlbiB0aGUgY2hhcmFjdGVycyBh
cmUKKyAgICAgICAgYWxsIDgtYml0LgorCiAyMDIwLTA5LTA2ICBEYXJpbiBBZGxlciAgPGRhcmlu
QGFwcGxlLmNvbT4KIAogICAgICAgICBUZXh0Q29kZWMgcmVmaW5lbWVudHMKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvRW5jb2RpbmdUYWJsZXMuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9FbmNvZGluZ1RhYmxlcy5jcHAKaW5kZXggNzJiMjJmOTVk
Y2I5OWMwYmE3MWZkY2MzZTY5Y2Q3OGQzMDk2MjU0Ni4uZWQyZjU0YzY1MmU5YzYxZTUyM2RiNGFl
MTQzNzUwZDYyMGVmZjdkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC9FbmNvZGluZ1RhYmxlcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9F
bmNvZGluZ1RhYmxlcy5jcHAKQEAgLTI2LDYgKzI2LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJFbmNvZGluZ1RhYmxlcy5oIgogCisjaW5jbHVkZSA8bXV0ZXg+CisKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogLy8gRklYTUU6IENvbXByZXNzIHRoZXNlIHRhYmxlcyBhbmQgZGVj
b21wcmVzcyB0aGVtIGlmIHRoZXkgYXJlIGFjdHVhbGx5IHVzZWQuIFRoaXMgd2lsbCBzaWduaWZp
Y2FudGx5IGRlY3JlYXNlIHRoZSBzaXplIG9mIFdlYkNvcmUncyBiaW5hcnkuCkBAIC02MjM2LDQg
KzYyMzgsMjQgQEAgY29uc3Qgc3RkOjpwYWlyPHVpbnQxNl90LCBVQ2hhcj4gZXVjS1JEZWNvZGlu
Z0luZGV4WzE3MDQ4XSB7CiAgICAgeyAyMzc0MiwgMHg3MTk5IH0sIHsgMjM3NDMsIDB4NzFCOSB9
LCB7IDIzNzQ0LCAweDcxQkEgfSwgeyAyMzc0NSwgMHg3MkE3IH0sIHsgMjM3NDYsIDB4NzlBNyB9
LCB7IDIzNzQ3LCAweDdBMDAgfSwgeyAyMzc0OCwgMHg3RkIyIH0sIHsgMjM3NDksIDB4OEE3MCB9
LAogfTsKIAorI2lmIEFTU0VSVF9FTkFCTEVECisKK3ZvaWQgY2hlY2tFbmNvZGluZ1RhYmxlSW52
YXJpYW50cygpCit7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2U7CisgICAgc3RkOjpj
YWxsX29uY2Uob25jZSwgW10geworICAgICAgICBBU1NFUlQoaXNTb3J0ZWRCeUZpcnN0KGppczAy
MDgpKTsKKworICAgICAgICBBU1NFUlQoaXNTb3J0ZWRCeUZpcnN0KGppczAyMTIpKTsKKyAgICAg
ICAgQVNTRVJUKHNvcnRlZEZpcnN0c0FyZVVuaXF1ZShqaXMwMjEyKSk7CisKKyAgICAgICAgQVNT
RVJUKGlzU29ydGVkQnlGaXJzdChiaWc1RW5jb2RpbmdNYXApKTsKKworICAgICAgICBBU1NFUlQo
aXNTb3J0ZWRCeUZpcnN0KGV1Y0tSRGVjb2RpbmdJbmRleCkpOworICAgICAgICBBU1NFUlQoc29y
dGVkRmlyc3RzQXJlVW5pcXVlKGV1Y0tSRGVjb2RpbmdJbmRleCkpOworICAgIH0pOworfQorCisj
ZW5kaWYKKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9FbmNv
ZGluZ1RhYmxlcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9FbmNvZGluZ1RhYmxl
cy5oCmluZGV4IGRmOTNjMWNiMGI2Y2Q0NzQ3MGJkNmNiODM4N2FmZTgxODk3NzAyZTQuLjdjN2I1
NGY4ZWI4M2Y5YzkzMDNiMWQwODYyMzUwNmE4MDZkMTU0NGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvRW5jb2RpbmdUYWJsZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L0VuY29kaW5nVGFibGVzLmgKQEAgLTI1LDcgKzI1LDEwIEBACiAKICNw
cmFnbWEgb25jZQogCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGl0ZXJhdG9yPgog
I2luY2x1ZGUgPHVuaWNvZGUvdW1hY2hpbmUuaD4KKyNpbmNsdWRlIDx1dGlsaXR5PgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM1LDQgKzM4LDY4IEBAIGV4dGVybiBjb25zdCBzdGQ6OnBh
aXI8VUNoYXIzMiwgdWludDE2X3Q+IGJpZzVFbmNvZGluZ01hcFsxNDY4Nl07CiBleHRlcm4gY29u
c3Qgc3RkOjpwYWlyPHVpbnQxNl90LCBVQ2hhcjMyPiBiaWc1RGVjb2RpbmdFeHRyYXNbMzkwNF07
CiBleHRlcm4gY29uc3Qgc3RkOjpwYWlyPHVpbnQxNl90LCBVQ2hhcj4gZXVjS1JEZWNvZGluZ0lu
ZGV4WzE3MDQ4XTsKIAordm9pZCBjaGVja0VuY29kaW5nVGFibGVJbnZhcmlhbnRzKCk7CisKKy8v
IEZ1bmN0aW9ucyBmb3IgdXNpbmcgc29ydGVkIGFycmF5cyBvZiBwYWlycyBhcyBhIG1hcC4KKy8v
IEZJWE1FOiBDb25zaWRlciBtb3ZpbmcgdGhlc2Ugc29tZXdoZXJlIGVsc2Ugc2luY2UgdGhleSBh
cmUgbGlrZWx5IHVzZWZ1bCBmb3IgYnkgbW9yZSB0aGFuIGp1c3QgZW5jb2RpbmcgdGFibGVzLgor
dGVtcGxhdGU8dHlwZW5hbWUgQ29sbGVjdGlvblR5cGU+IHZvaWQgc29ydEJ5Rmlyc3QoQ29sbGVj
dGlvblR5cGUmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIENvbGxlY3Rpb25UeXBlPiBib29sIGlzU29y
dGVkQnlGaXJzdChjb25zdCBDb2xsZWN0aW9uVHlwZSYpOwordGVtcGxhdGU8dHlwZW5hbWUgQ29s
bGVjdGlvblR5cGU+IGJvb2wgc29ydGVkRmlyc3RzQXJlVW5pcXVlKGNvbnN0IENvbGxlY3Rpb25U
eXBlJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xsZWN0aW9uVHlwZSwgdHlwZW5hbWUgS2V5VHlw
ZT4gc3RhdGljIGF1dG8gZmluZEZpcnN0SW5Tb3J0ZWRQYWlycyhjb25zdCBDb2xsZWN0aW9uVHlw
ZSYgY29sbGVjdGlvbiwgY29uc3QgS2V5VHlwZSYpIC0+IE9wdGlvbmFsPGRlY2x0eXBlKHN0ZDo6
YmVnaW4oY29sbGVjdGlvbiktPnNlY29uZCk+OwordGVtcGxhdGU8dHlwZW5hbWUgQ29sbGVjdGlv
blR5cGUsIHR5cGVuYW1lIEtleVR5cGU+IHN0YXRpYyBhdXRvIGZpbmRJblNvcnRlZFBhaXJzKGNv
bnN0IENvbGxlY3Rpb25UeXBlJiBjb2xsZWN0aW9uLCBjb25zdCBLZXlUeXBlJikgLT4gc3RkOjpw
YWlyPGRlY2x0eXBlKHN0ZDo6YmVnaW4oY29sbGVjdGlvbikpLCBkZWNsdHlwZShzdGQ6OmJlZ2lu
KGNvbGxlY3Rpb24pKT47CisKKyNpZiAhQVNTRVJUX0VOQUJMRUQKK2lubGluZSB2b2lkIGNoZWNr
RW5jb2RpbmdUYWJsZUludmFyaWFudHMoKSB7IH0KKyNlbmRpZgorCitzdHJ1Y3QgQ29tcGFyZUZp
cnN0IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlQSwgdHlwZW5hbWUgVHlwZUI+IGJvb2wg
b3BlcmF0b3IoKShjb25zdCBUeXBlQSYgYSwgY29uc3QgVHlwZUImIGIpCisgICAgeworICAgICAg
ICByZXR1cm4gYS5maXJzdCA8IGIuZmlyc3Q7CisgICAgfQorfTsKKworc3RydWN0IEVxdWFsRmly
c3QgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGVBLCB0eXBlbmFtZSBUeXBlQj4gYm9vbCBv
cGVyYXRvcigpKGNvbnN0IFR5cGVBJiBhLCBjb25zdCBUeXBlQiYgYikKKyAgICB7CisgICAgICAg
IHJldHVybiBhLmZpcnN0ID09IGIuZmlyc3Q7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5h
bWUgQ29sbGVjdGlvblR5cGU+IHZvaWQgc29ydEJ5Rmlyc3QoQ29sbGVjdGlvblR5cGUmIGNvbGxl
Y3Rpb24pCit7CisgICAgc3RkOjpzb3J0KHN0ZDo6YmVnaW4oY29sbGVjdGlvbiksIHN0ZDo6ZW5k
KGNvbGxlY3Rpb24pLCBDb21wYXJlRmlyc3QgeyB9KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
Q29sbGVjdGlvblR5cGU+IGJvb2wgaXNTb3J0ZWRCeUZpcnN0KGNvbnN0IENvbGxlY3Rpb25UeXBl
JiBjb2xsZWN0aW9uKQoreworICAgIHJldHVybiBzdGQ6OmlzX3NvcnRlZChzdGQ6OmJlZ2luKGNv
bGxlY3Rpb24pLCBzdGQ6OmVuZChjb2xsZWN0aW9uKSwgQ29tcGFyZUZpcnN0IHsgfSk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIENvbGxlY3Rpb25UeXBlPiBib29sIHNvcnRlZEZpcnN0c0FyZVVu
aXF1ZShjb25zdCBDb2xsZWN0aW9uVHlwZSYgY29sbGVjdGlvbikKK3sKKyAgICByZXR1cm4gc3Rk
OjphZGphY2VudF9maW5kKHN0ZDo6YmVnaW4oY29sbGVjdGlvbiksIHN0ZDo6ZW5kKGNvbGxlY3Rp
b24pLCBFcXVhbEZpcnN0IHsgfSkgPT0gc3RkOjplbmQoY29sbGVjdGlvbik7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIENvbGxlY3Rpb25UeXBlLCB0eXBlbmFtZSBLZXlUeXBlPiBzdGF0aWMgYXV0
byBmaW5kRmlyc3RJblNvcnRlZFBhaXJzKGNvbnN0IENvbGxlY3Rpb25UeXBlJiBjb2xsZWN0aW9u
LCBjb25zdCBLZXlUeXBlJiBrZXkpIC0+IE9wdGlvbmFsPGRlY2x0eXBlKHN0ZDo6YmVnaW4oY29s
bGVjdGlvbiktPnNlY29uZCk+Cit7CisgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2ludGVncmFs
X3Y8S2V5VHlwZT4pIHsKKyAgICAgICAgaWYgKGtleSAhPSBkZWNsdHlwZShzdGQ6OmJlZ2luKGNv
bGxlY3Rpb24pLT5maXJzdCkoa2V5KSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CisgICAgfQorICAgIGF1dG8gaXRlcmF0b3IgPSBzdGQ6Omxvd2VyX2JvdW5kKHN0ZDo6YmVnaW4o
Y29sbGVjdGlvbiksIHN0ZDo6ZW5kKGNvbGxlY3Rpb24pLCBzdGQ6Om1ha2VfcGFpcihrZXksIGRl
Y2x0eXBlKHN0ZDo6YmVnaW4oY29sbGVjdGlvbiktPnNlY29uZCkgeyB9KSwgQ29tcGFyZUZpcnN0
IHsgfSk7CisgICAgaWYgKGl0ZXJhdG9yID09IHN0ZDo6ZW5kKGNvbGxlY3Rpb24pIHx8IGtleSA8
IGl0ZXJhdG9yLT5maXJzdCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1
cm4gaXRlcmF0b3ItPnNlY29uZDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ29sbGVjdGlvblR5
cGUsIHR5cGVuYW1lIEtleVR5cGU+IHN0YXRpYyBhdXRvIGZpbmRJblNvcnRlZFBhaXJzKGNvbnN0
IENvbGxlY3Rpb25UeXBlJiBjb2xsZWN0aW9uLCBjb25zdCBLZXlUeXBlJiBrZXkpIC0+IHN0ZDo6
cGFpcjxkZWNsdHlwZShzdGQ6OmJlZ2luKGNvbGxlY3Rpb24pKSwgZGVjbHR5cGUoc3RkOjpiZWdp
bihjb2xsZWN0aW9uKSk+Cit7CisgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2ludGVncmFsX3Y8
S2V5VHlwZT4pIHsKKyAgICAgICAgaWYgKGtleSAhPSBkZWNsdHlwZShzdGQ6OmJlZ2luKGNvbGxl
Y3Rpb24pLT5maXJzdCkoa2V5KSkKKyAgICAgICAgICAgIHJldHVybiB7IHN0ZDo6ZW5kKGNvbGxl
Y3Rpb24pLCBzdGQ6OmVuZChjb2xsZWN0aW9uKSB9OworICAgIH0KKyAgICByZXR1cm4gc3RkOjpl
cXVhbF9yYW5nZShzdGQ6OmJlZ2luKGNvbGxlY3Rpb24pLCBzdGQ6OmVuZChjb2xsZWN0aW9uKSwg
c3RkOjptYWtlX3BhaXIoa2V5LCBkZWNsdHlwZShzdGQ6OmJlZ2luKGNvbGxlY3Rpb24pLT5zZWNv
bmQpIHsgfSksIENvbXBhcmVGaXJzdCB7IH0pOworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0NKSy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L1RleHRDb2RlY0NKSy5jcHAKaW5kZXggNjgwN2YzNzI3NDEzMWM0YzFhMWZi
ZTk2ZTA3YzcxY2E1Zjc4ZThkYy4uZmUzNWQxNmI4YjJiMTljYTAwYjg3NTFkMGRhZGVmZmEyNDVh
OWUxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWND
SksuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjQ0pLLmNw
cApAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIlRleHRDb2RlY0NKSy5oIgogCiAjaW5jbHVk
ZSAiRW5jb2RpbmdUYWJsZXMuaCIKKyNpbmNsdWRlIDxtdXRleD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9Db2RlUG9pbnRJdGVyYXRvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIu
aD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9DaGFyYWN0ZXJOYW1lcy5oPgpAQCAtNDQsNiArNDUs
NyBAQCBlbnVtIGNsYXNzIFRleHRDb2RlY0NKSzo6RW5jb2RpbmcgOiB1aW50OF90IHsKIFRleHRD
b2RlY0NKSzo6VGV4dENvZGVjQ0pLKEVuY29kaW5nIGVuY29kaW5nKQogICAgIDogbV9lbmNvZGlu
ZyhlbmNvZGluZykKIHsKKyAgICBjaGVja0VuY29kaW5nVGFibGVJbnZhcmlhbnRzKCk7CiB9CiAK
IHZvaWQgVGV4dENvZGVjQ0pLOjpyZWdpc3RlckVuY29kaW5nTmFtZXMoRW5jb2RpbmdOYW1lUmVn
aXN0cmFyIHJlZ2lzdHJhcikKQEAgLTEyNCwxNiArMTI2LDE2IEBAIHZvaWQgVGV4dENvZGVjQ0pL
OjpyZWdpc3RlckNvZGVjcyhUZXh0Q29kZWNSZWdpc3RyYXIgcmVnaXN0cmFyKQogdXNpbmcgSklT
MDIwOERlY29kZUluZGV4ID0gc3RkOjphcnJheTxzdGQ6OnBhaXI8dWludDE2X3QsIFVDaGFyPiwg
c3RkOjpzaXplKGppczAyMDgpPjsKIHN0YXRpYyBjb25zdCBKSVMwMjA4RGVjb2RlSW5kZXgmIGpp
czAyMDhEZWNvZGVJbmRleCgpCiB7Ci0gICAgc3RhdGljIGF1dG8mIHRhYmxlID0gKltdIHsKLSAg
ICAgICAgYXV0byogdGFibGUgPSBuZXcgSklTMDIwOERlY29kZUluZGV4OworICAgIHN0YXRpYyBK
SVMwMjA4RGVjb2RlSW5kZXgqIHRhYmxlOworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNl
OworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2UsIFsmXSB7CisgICAgICAgIHRhYmxlID0gbmV3IEpJ
UzAyMDhEZWNvZGVJbmRleDsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdGQ6OnNp
emUoamlzMDIwOCk7IGkrKykKICAgICAgICAgICAgICgqdGFibGUpW2ldID0geyBqaXMwMjA4W2ld
LnNlY29uZCwgamlzMDIwOFtpXS5maXJzdCB9OwotICAgICAgICBzdGQ6OnNvcnQodGFibGUtPmJl
Z2luKCksIHRhYmxlLT5lbmQoKSwgW10gKGF1dG8mIGEsIGF1dG8mIGIpIHsKLSAgICAgICAgICAg
IHJldHVybiBhLmZpcnN0IDwgYi5maXJzdDsKLSAgICAgICAgfSk7Ci0gICAgICAgIHJldHVybiB0
YWJsZTsKLSAgICB9KCk7Ci0gICAgcmV0dXJuIHRhYmxlOworICAgICAgICBzb3J0QnlGaXJzdCgq
dGFibGUpOworICAgICAgICBBU1NFUlQoc29ydGVkRmlyc3RzQXJlVW5pcXVlKCp0YWJsZSkpOwor
ICAgIH0pOworICAgIHJldHVybiAqdGFibGU7CiB9CiAKIFN0cmluZyBUZXh0Q29kZWNDSks6OmRl
Y29kZUNvbW1vbihjb25zdCB1aW50OF90KiBieXRlcywgc2l6ZV90IGxlbmd0aCwgYm9vbCBmbHVz
aCwgYm9vbCBzdG9wT25FcnJvciwgYm9vbCYgc2F3RXJyb3IsIGNvbnN0IEZ1bmN0aW9uPFNhd0Vy
cm9yKHVpbnQ4X3QsIFN0cmluZ0J1aWxkZXImKT4mIGJ5dGVQYXJzZXIpCkBAIC0xNzksMjcgKzE4
MSwxMiBAQCBTdHJpbmcgVGV4dENvZGVjQ0pLOjpkZWNvZGVDb21tb24oY29uc3QgdWludDhfdCog
Ynl0ZXMsIHNpemVfdCBsZW5ndGgsIGJvb2wgZmx1cwogCiBzdGF0aWMgT3B0aW9uYWw8VUNoYXI+
IGNvZGVQb2ludEpJUzAyMDgodWludDE2X3QgcG9pbnRlcikKIHsKLSAgICBhdXRvJiBpbmRleCA9
IGppczAyMDhEZWNvZGVJbmRleCgpOwotICAgIGF1dG8gcmFuZ2UgPSBzdGQ6OmVxdWFsX3Jhbmdl
KGluZGV4LmJlZ2luKCksIGluZGV4LmVuZCgpLCBzdGQ6OnBhaXI8dWludDE2X3QsIFVDaGFyPihw
b2ludGVyLCAwKSwgW10oY29uc3QgYXV0byYgYSwgY29uc3QgYXV0byYgYikgewotICAgICAgICBy
ZXR1cm4gYS5maXJzdCA8IGIuZmlyc3Q7Ci0gICAgfSk7Ci0gICAgaWYgKHJhbmdlLmZpcnN0ICE9
IHJhbmdlLnNlY29uZCkgewotICAgICAgICBBU1NFUlQocmFuZ2UuZmlyc3QgKyAxID09IHJhbmdl
LnNlY29uZCk7Ci0gICAgICAgIHJldHVybiByYW5nZS5maXJzdC0+c2Vjb25kOwotICAgIH0KLSAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiBmaW5kRmlyc3RJblNvcnRlZFBhaXJz
KGppczAyMDhEZWNvZGVJbmRleCgpLCBwb2ludGVyKTsKIH0KIAogc3RhdGljIE9wdGlvbmFsPFVD
aGFyPiBjb2RlUG9pbnRKSVMwMjEyKHVpbnQxNl90IHBvaW50ZXIpCiB7Ci0gICAgYXV0byByYW5n
ZSA9IHN0ZDo6ZXF1YWxfcmFuZ2UoamlzMDIxMiwgamlzMDIxMiArIHN0ZDo6c2l6ZShqaXMwMjEy
KSwgc3RkOjpwYWlyPHVpbnQxNl90LCBVQ2hhcj4ocG9pbnRlciwgMCksIFtdKGNvbnN0IGF1dG8m
IGEsIGNvbnN0IGF1dG8mIGIpIHsKLSAgICAgICAgcmV0dXJuIGEuZmlyc3QgPCBiLmZpcnN0Owot
ICAgIH0pOwotICAgIGlmIChyYW5nZS5maXJzdCAhPSByYW5nZS5zZWNvbmQpIHsKLSAgICAgICAg
QVNTRVJUKHJhbmdlLmZpcnN0ICsgMSA9PSByYW5nZS5zZWNvbmQpOwotICAgICAgICByZXR1cm4g
cmFuZ2UuZmlyc3QtPnNlY29uZDsKLSAgICB9Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAg
ICByZXR1cm4gZmluZEZpcnN0SW5Tb3J0ZWRQYWlycyhqaXMwMjEyLCBwb2ludGVyKTsKIH0KIAog
Ly8gaHR0cHM6Ly9lbmNvZGluZy5zcGVjLndoYXR3Zy5vcmcvI2V1Yy1qcC1kZWNvZGVyCkBAIC0y
MjgsNyArMjE1LDcgQEAgU3RyaW5nIFRleHRDb2RlY0NKSzo6ZXVjSlBEZWNvZGUoY29uc3QgdWlu
dDhfdCogYnl0ZXMsIHNpemVfdCBsZW5ndGgsIGJvb2wgZmx1c2gKICAgICAgICAgICAgIHJldHVy
biBTYXdFcnJvcjo6WWVzOwogICAgICAgICB9CiAgICAgICAgIGlmIChpc0FTQ0lJKGJ5dGUpKSB7
Ci0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKHN0YXRpY19jYXN0PExDaGFyPihieXRlKSk7Cisg
ICAgICAgICAgICByZXN1bHQuYXBwZW5kKHN0YXRpY19jYXN0PGNoYXI+KGJ5dGUpKTsKICAgICAg
ICAgICAgIHJldHVybiBTYXdFcnJvcjo6Tm87CiAgICAgICAgIH0KICAgICAgICAgaWYgKGJ5dGUg
PT0gMHg4RSB8fCBieXRlID09IDB4OEYgfHwgKGJ5dGUgPj0gMHhBMSAmJiBieXRlIDw9IDB4RkUp
KSB7CkBAIC0yNDcsNDIgKzIzNCwzNCBAQCBzdGF0aWMgVmVjdG9yPHVpbnQ4X3Q+IGV1Y0pQRW5j
b2RlKFN0cmluZ1ZpZXcgc3RyaW5nLCBGdW5jdGlvbjx2b2lkKFVDaGFyMzIsIFZlYwogCiAgICAg
YXV0byBjaGFyYWN0ZXJzID0gc3RyaW5nLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwogICAgIGZv
ciAoV1RGOjpDb2RlUG9pbnRJdGVyYXRvcjxVQ2hhcj4gaXRlcmF0b3IoY2hhcmFjdGVycy5nZXQo
KSwgY2hhcmFjdGVycy5nZXQoKSArIHN0cmluZy5sZW5ndGgoKSk7ICFpdGVyYXRvci5hdEVuZCgp
OyArK2l0ZXJhdG9yKSB7Ci0gICAgICAgIGF1dG8gYyA9ICppdGVyYXRvcjsKLSAgICAgICAgaWYg
KGlzQVNDSUkoYykpIHsKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoYyk7CisgICAgICAgIGF1
dG8gY29kZVBvaW50ID0gKml0ZXJhdG9yOworICAgICAgICBpZiAoaXNBU0NJSShjb2RlUG9pbnQp
KSB7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGNvZGVQb2ludCk7CiAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgfQotICAgICAgICBpZiAoYyA9PSAweDAwQTUpIHsKKyAgICAgICAg
aWYgKGNvZGVQb2ludCA9PSAweDAwQTUpIHsKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMHg1
Qyk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBpZiAoYyA9PSAw
eDIwM0UpIHsKKyAgICAgICAgaWYgKGNvZGVQb2ludCA9PSAweDIwM0UpIHsKICAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQoMHg3RSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQot
ICAgICAgICBpZiAoYyA+PSAweEZGNjEgJiYgYyA8PSAweEZGOUYpIHsKKyAgICAgICAgaWYgKGNv
ZGVQb2ludCA+PSAweEZGNjEgJiYgY29kZVBvaW50IDw9IDB4RkY5RikgewogICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZCgweDhFKTsKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoYyAtIDB4RkY2
MSArIDB4QTEpOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChjb2RlUG9pbnQgLSAweEZGNjEg
KyAweEExKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIGlmIChj
ID09IDB4MjIxMikKLSAgICAgICAgICAgIGMgPSAweEZGMEQ7CisgICAgICAgIGlmIChjb2RlUG9p
bnQgPT0gMHgyMjEyKQorICAgICAgICAgICAgY29kZVBvaW50ID0gMHhGRjBEOwogCi0gICAgICAg
IGlmIChzdGF0aWNfY2FzdDxVQ2hhcj4oYykgIT0gYykgewotICAgICAgICAgICAgdW5lbmNvZGFi
bGVIYW5kbGVyKGMsIHJlc3VsdCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgYXV0byBwb2ludGVyUmFuZ2UgPSBzdGQ6OmVxdWFsX3JhbmdlKHN0
ZDo6YmVnaW4oamlzMDIwOCksIHN0ZDo6ZW5kKGppczAyMDgpLCBzdGQ6OnBhaXI8VUNoYXIsIHVp
bnQxNl90PihzdGF0aWNfY2FzdDxVQ2hhcj4oYyksIDApLCBbXShjb25zdCBhdXRvJiBhLCBjb25z
dCBhdXRvJiBiKSB7Ci0gICAgICAgICAgICByZXR1cm4gYS5maXJzdCA8IGIuZmlyc3Q7Ci0gICAg
ICAgIH0pOwotICAgICAgICBpZiAocG9pbnRlclJhbmdlLmZpcnN0ID09IHBvaW50ZXJSYW5nZS5z
ZWNvbmQpIHsKLSAgICAgICAgICAgIHVuZW5jb2RhYmxlSGFuZGxlcihjLCByZXN1bHQpOworICAg
ICAgICBhdXRvIHBvaW50ZXIgPSBmaW5kRmlyc3RJblNvcnRlZFBhaXJzKGppczAyMDgsIGNvZGVQ
b2ludCk7CisgICAgICAgIGlmICghcG9pbnRlcikgeworICAgICAgICAgICAgdW5lbmNvZGFibGVI
YW5kbGVyKGNvZGVQb2ludCwgcmVzdWx0KTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICB9Ci0gICAgICAgIHVpbnQxNl90IHBvaW50ZXIgPSAocG9pbnRlclJhbmdlLnNlY29uZCAtIDEp
LT5zZWNvbmQ7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQocG9pbnRlciAvIDk0ICsgMHhBMSk7Ci0g
ICAgICAgIHJlc3VsdC5hcHBlbmQocG9pbnRlciAlIDk0ICsgMHhBMSk7CisgICAgICAgIHJlc3Vs
dC5hcHBlbmQoKnBvaW50ZXIgLyA5NCArIDB4QTEpOworICAgICAgICByZXN1bHQuYXBwZW5kKCpw
b2ludGVyICUgOTQgKyAweEExKTsKICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTUw
NCwxMiArNDgzLDEyIEBAIHN0YXRpYyBWZWN0b3I8dWludDhfdD4gaXNvMjAyMkpQRW5jb2RlKFN0
cmluZ1ZpZXcgc3RyaW5nLCBGdW5jdGlvbjx2b2lkKFVDaGFyMzIsCiAgICAgRnVuY3Rpb248dm9p
ZChVQ2hhcjMyKT4gcGFyc2VDb2RlUG9pbnQ7CiAgICAgcGFyc2VDb2RlUG9pbnQgPSBbJl0gKFVD
aGFyMzIgY29kZVBvaW50KSB7CiAgICAgICAgIGlmIChzdGF0ZSA9PSBTdGF0ZTo6QVNDSUkgJiYg
aXNBU0NJSShjb2RlUG9pbnQpKSB7Ci0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKHN0YXRpY19j
YXN0PHVpbnQ4X3Q+KGNvZGVQb2ludCkpOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChjb2Rl
UG9pbnQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGlmIChzdGF0
ZSA9PSBTdGF0ZTo6Um9tYW4pIHsKICAgICAgICAgICAgIGlmIChpc0FTQ0lJKGNvZGVQb2ludCkg
JiYgY29kZVBvaW50ICE9IDB4MDA1QyAmJiBjb2RlUG9pbnQgIT0weDAwN0UpIHsKLSAgICAgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGNvZGVQb2ludCkpOwor
ICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoY29kZVBvaW50KTsKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoY29kZVBvaW50ID09IDB4
MDBBNSkgewpAQCAtNTQ1LDE5ICs1MjQsMTIgQEAgc3RhdGljIFZlY3Rvcjx1aW50OF90PiBpc28y
MDIySlBFbmNvZGUoU3RyaW5nVmlldyBzdHJpbmcsIEZ1bmN0aW9uPHZvaWQoVUNoYXIzMiwKICAg
ICAgICAgICAgICAgICAweDMwQzEsIDB4MzBDNCwgMHgzMEM2LCAweDMwQzgsIDB4MzBDQSwgMHgz
MENCLCAweDMwQ0MsIDB4MzBDRCwgMHgzMENFLCAweDMwQ0YsIDB4MzBEMiwgMHgzMEQ1LCAweDMw
RDgsIDB4MzBEQiwgMHgzMERFLCAweDMwREYsCiAgICAgICAgICAgICAgICAgMHgzMEUwLCAweDMw
RTEsIDB4MzBFMiwgMHgzMEU0LCAweDMwRTYsIDB4MzBFOCwgMHgzMEU5LCAweDMwRUEsIDB4MzBF
QiwgMHgzMEVDLCAweDMwRUQsIDB4MzBFRiwgMHgzMEYzLCAweDMwOUIsIDB4MzA5QwogICAgICAg
ICAgICAgfTsKKyAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjpzaXplKGlzbzIwMjJKUEth
dGFrYW5hKSA9PSAweEZGOUYgLSAweEZGNjEgKyAxKTsKICAgICAgICAgICAgIGNvZGVQb2ludCA9
IGlzbzIwMjJKUEthdGFrYW5hW2NvZGVQb2ludCAtIDB4RkY2MV07CiAgICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIGF1dG8gY29kZVVuaXQgPSBzdGF0aWNfY2FzdDxVQ2hhcj4oY29kZVBvaW50
KTsKLSAgICAgICAgaWYgKGNvZGVVbml0ICE9IGNvZGVQb2ludCkgewotICAgICAgICAgICAgc3Rh
dGVmdWxVbmVuY29kYWJsZUhhbmRsZXIoY29kZVBvaW50LCByZXN1bHQpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBhdXRvIHJhbmdlID0gc3RkOjpl
cXVhbF9yYW5nZShzdGQ6OmJlZ2luKGppczAyMDgpLCBzdGQ6OmVuZChqaXMwMjA4KSwgc3RkOjpw
YWlyPFVDaGFyLCB1aW50MTZfdD4oY29kZVVuaXQsIDApLCBbXShjb25zdCBhdXRvJiBhLCBjb25z
dCBhdXRvJiBiKSB7Ci0gICAgICAgICAgICByZXR1cm4gYS5maXJzdCA8IGIuZmlyc3Q7Ci0gICAg
ICAgIH0pOwotICAgICAgICBpZiAocmFuZ2UuZmlyc3QgPT0gcmFuZ2Uuc2Vjb25kKSB7CisKKyAg
ICAgICAgYXV0byBwb2ludGVyID0gZmluZEZpcnN0SW5Tb3J0ZWRQYWlycyhqaXMwMjA4LCBjb2Rl
UG9pbnQpOworICAgICAgICBpZiAoIXBvaW50ZXIpIHsKICAgICAgICAgICAgIHN0YXRlZnVsVW5l
bmNvZGFibGVIYW5kbGVyKGNvZGVQb2ludCwgcmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQpAQCAtNTY5LDkgKzU0MSw4IEBAIHN0YXRpYyBWZWN0b3I8dWludDhfdD4gaXNv
MjAyMkpQRW5jb2RlKFN0cmluZ1ZpZXcgc3RyaW5nLCBGdW5jdGlvbjx2b2lkKFVDaGFyMzIsCiAg
ICAgICAgICAgICBwYXJzZUNvZGVQb2ludChjb2RlUG9pbnQpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9Ci0gICAgICAgIHVpbnQxNl90IHBvaW50ZXIgPSAocmFuZ2Uuc2Vjb25kIC0g
MSktPnNlY29uZDsKLSAgICAgICAgcmVzdWx0LmFwcGVuZChwb2ludGVyIC8gOTQgKyAweDIxKTsK
LSAgICAgICAgcmVzdWx0LmFwcGVuZChwb2ludGVyICUgOTQgKyAweDIxKTsKKyAgICAgICAgcmVz
dWx0LmFwcGVuZCgqcG9pbnRlciAvIDk0ICsgMHgyMSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQo
KnBvaW50ZXIgJSA5NCArIDB4MjEpOwogICAgIH07CiAgICAgCiAgICAgYXV0byBjaGFyYWN0ZXJz
ID0gc3RyaW5nLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwpAQCAtNjUwLDIwICs2MjEsMTIgQEAg
c3RhdGljIFZlY3Rvcjx1aW50OF90PiBzaGlmdEpJU0VuY29kZShTdHJpbmdWaWV3IHN0cmluZywg
RnVuY3Rpb248dm9pZChVQ2hhcjMyLAogICAgICAgICBpZiAoY29kZVBvaW50ID09IDB4MjIxMikK
ICAgICAgICAgICAgIGNvZGVQb2ludCA9IDB4RkYwRDsKICAgICAgICAgCi0gICAgICAgIGF1dG8g
Y29kZVVuaXQgPSBzdGF0aWNfY2FzdDxVQ2hhcj4oY29kZVBvaW50KTsKLSAgICAgICAgaWYgKGNv
ZGVVbml0ICE9IGNvZGVQb2ludCkgewotICAgICAgICAgICAgdW5lbmNvZGFibGVIYW5kbGVyKGNv
ZGVQb2ludCwgcmVzdWx0KTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAg
ICAgIAotICAgICAgICBhdXRvIHJhbmdlID0gc3RkOjplcXVhbF9yYW5nZShzdGQ6OmJlZ2luKGpp
czAyMDgpLCBzdGQ6OmVuZChqaXMwMjA4KSwgc3RkOjpwYWlyPFVDaGFyLCB1aW50MTZfdD4oY29k
ZVVuaXQsIDApLCBbXShjb25zdCBhdXRvJiBhLCBjb25zdCBhdXRvJiBiKSB7Ci0gICAgICAgICAg
ICByZXR1cm4gYS5maXJzdCA8IGIuZmlyc3Q7Ci0gICAgICAgIH0pOworICAgICAgICBhdXRvIHJh
bmdlID0gZmluZEluU29ydGVkUGFpcnMoamlzMDIwOCwgY29kZVBvaW50KTsKICAgICAgICAgaWYg
KHJhbmdlLmZpcnN0ID09IHJhbmdlLnNlY29uZCkgewogICAgICAgICAgICAgdW5lbmNvZGFibGVI
YW5kbGVyKGNvZGVQb2ludCwgcmVzdWx0KTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICB9Ci0gICAgICAgIAorCiAgICAgICAgIEFTU0VSVChyYW5nZS5maXJzdCArIDMgPj0gcmFuZ2Uu
c2Vjb25kKTsKICAgICAgICAgZm9yIChhdXRvKiBwYWlyID0gcmFuZ2Uuc2Vjb25kIC0gMTsgcGFp
ciA+PSByYW5nZS5maXJzdDsgcGFpci0tKSB7CiAgICAgICAgICAgICB1aW50MTZfdCBwb2ludGVy
ID0gcGFpci0+c2Vjb25kOwpAQCAtNjg0LDE2ICs2NDcsMTYgQEAgc3RhdGljIFZlY3Rvcjx1aW50
OF90PiBzaGlmdEpJU0VuY29kZShTdHJpbmdWaWV3IHN0cmluZywgRnVuY3Rpb248dm9pZChVQ2hh
cjMyLAogdXNpbmcgRVVDS1JFbmNvZGluZ0luZGV4ID0gc3RkOjphcnJheTxzdGQ6OnBhaXI8VUNo
YXIsIHVpbnQxNl90Piwgc3RkOjpzaXplKGV1Y0tSRGVjb2RpbmdJbmRleCk+Owogc3RhdGljIGNv
bnN0IEVVQ0tSRW5jb2RpbmdJbmRleCYgZXVjS1JFbmNvZGluZ0luZGV4KCkKIHsKLSAgICBzdGF0
aWMgYXV0byYgdGFibGUgPSAqW10gewotICAgICAgICBhdXRvIHRhYmxlID0gbmV3IEVVQ0tSRW5j
b2RpbmdJbmRleDsKKyAgICBzdGF0aWMgRVVDS1JFbmNvZGluZ0luZGV4KiB0YWJsZTsKKyAgICBz
dGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZTsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlLCBbJl0g
eworICAgICAgICB0YWJsZSA9IG5ldyBFVUNLUkVuY29kaW5nSW5kZXg7CiAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgc3RkOjpzaXplKGV1Y0tSRGVjb2RpbmdJbmRleCk7IGkrKykKICAg
ICAgICAgICAgICgqdGFibGUpW2ldID0geyBldWNLUkRlY29kaW5nSW5kZXhbaV0uc2Vjb25kLCBl
dWNLUkRlY29kaW5nSW5kZXhbaV0uZmlyc3QgfTsKLSAgICAgICAgc3RkOjpzb3J0KHRhYmxlLT5i
ZWdpbigpLCB0YWJsZS0+ZW5kKCksIFtdIChhdXRvJiBhLCBhdXRvJiBiKSB7Ci0gICAgICAgICAg
ICByZXR1cm4gYS5maXJzdCA8IGIuZmlyc3Q7Ci0gICAgICAgIH0pOwotICAgICAgICByZXR1cm4g
dGFibGU7Ci0gICAgfSgpOwotICAgIHJldHVybiB0YWJsZTsKKyAgICAgICAgc29ydEJ5Rmlyc3Qo
KnRhYmxlKTsKKyAgICAgICAgQVNTRVJUKHNvcnRlZEZpcnN0c0FyZVVuaXF1ZSgqdGFibGUpKTsK
KyAgICB9KTsKKyAgICByZXR1cm4gKnRhYmxlOwogfQogCiAvLyBodHRwczovL2VuY29kaW5nLnNw
ZWMud2hhdHdnLm9yZy8jZXVjLWtyLWVuY29kZXIKQEAgLTcwNiwyNiArNjY5LDE3IEBAIHN0YXRp
YyBWZWN0b3I8dWludDhfdD4gZXVjS1JFbmNvZGUoU3RyaW5nVmlldyBzdHJpbmcsIEZ1bmN0aW9u
PHZvaWQoVUNoYXIzMiwgVmVjCiAgICAgZm9yIChXVEY6OkNvZGVQb2ludEl0ZXJhdG9yPFVDaGFy
PiBpdGVyYXRvcihjaGFyYWN0ZXJzLmdldCgpLCBjaGFyYWN0ZXJzLmdldCgpICsgc3RyaW5nLmxl
bmd0aCgpKTsgIWl0ZXJhdG9yLmF0RW5kKCk7ICsraXRlcmF0b3IpIHsKICAgICAgICAgYXV0byBj
b2RlUG9pbnQgPSAqaXRlcmF0b3I7CiAgICAgICAgIGlmIChpc0FTQ0lJKGNvZGVQb2ludCkpIHsK
LSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoc3RhdGljX2Nhc3Q8dWludDhfdD4oY29kZVBvaW50
KSk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGNvZGVQb2ludCk7CiAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgYXV0byBjb2RlVW5pdCA9IHN0
YXRpY19jYXN0PFVDaGFyPihjb2RlUG9pbnQpOwotICAgICAgICBpZiAoY29kZVVuaXQgIT0gY29k
ZVBvaW50KSB7CisgICAgICAgIGF1dG8gcG9pbnRlciA9IGZpbmRGaXJzdEluU29ydGVkUGFpcnMo
ZXVjS1JFbmNvZGluZ0luZGV4KCksIGNvZGVQb2ludCk7CisgICAgICAgIGlmICghcG9pbnRlcikg
ewogICAgICAgICAgICAgdW5lbmNvZGFibGVIYW5kbGVyKGNvZGVQb2ludCwgcmVzdWx0KTsKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIGF1dG8mIGluZGV4ID0gZXVj
S1JFbmNvZGluZ0luZGV4KCk7Ci0gICAgICAgIGF1dG8gcmFuZ2UgPSBzdGQ6OmVxdWFsX3Jhbmdl
KGluZGV4LmJlZ2luKCksIGluZGV4LmVuZCgpLCBzdGQ6OnBhaXI8VUNoYXIsIHVpbnQxNl90Pihj
b2RlUG9pbnQsIDApLCBbXShjb25zdCBhdXRvJiBhLCBjb25zdCBhdXRvJiBiKSB7Ci0gICAgICAg
ICAgICByZXR1cm4gYS5maXJzdCA8IGIuZmlyc3Q7Ci0gICAgICAgIH0pOwotICAgICAgICBpZiAo
cmFuZ2UuZmlyc3QgPT0gcmFuZ2Uuc2Vjb25kKSB7Ci0gICAgICAgICAgICB1bmVuY29kYWJsZUhh
bmRsZXIoY29kZVBvaW50LCByZXN1bHQpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IH0KLSAgICAgICAgdWludDE2X3QgcG9pbnRlciA9IHJhbmdlLmZpcnN0LT5zZWNvbmQ7Ci0gICAg
ICAgIHJlc3VsdC5hcHBlbmQocG9pbnRlciAvIDE5MCArIDB4ODEpOwotICAgICAgICByZXN1bHQu
YXBwZW5kKHBvaW50ZXIgJSAxOTAgKyAweDQxKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgqcG9p
bnRlciAvIDE5MCArIDB4ODEpOworICAgICAgICByZXN1bHQuYXBwZW5kKCpwb2ludGVyICUgMTkw
ICsgMHg0MSk7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC03MzYsMTIgKzY5MCw4
IEBAIFN0cmluZyBUZXh0Q29kZWNDSks6OmV1Y0tSRGVjb2RlKGNvbnN0IHVpbnQ4X3QqIGJ5dGVz
LCBzaXplX3QgbGVuZ3RoLCBib29sIGZsdXNoCiAgICAgcmV0dXJuIGRlY29kZUNvbW1vbihieXRl
cywgbGVuZ3RoLCBmbHVzaCwgc3RvcE9uRXJyb3IsIHNhd0Vycm9yLCBbdGhpc10gKHVpbnQ4X3Qg
Ynl0ZSwgU3RyaW5nQnVpbGRlciYgcmVzdWx0KSB7CiAgICAgICAgIGlmICh1aW50OF90IGxlYWQg
PSBzdGQ6OmV4Y2hhbmdlKG1fbGVhZCwgMHgwMCkpIHsKICAgICAgICAgICAgIGlmIChieXRlID49
IDB4NDEgJiYgYnl0ZSA8PSAweEZFKSB7Ci0gICAgICAgICAgICAgICAgdWludDE2X3QgcG9pbnRl
ciA9IChsZWFkIC0gMHg4MSkgKiAxOTAgKyBieXRlIC0gMHg0MTsKLSAgICAgICAgICAgICAgICBh
dXRvIHJhbmdlID0gc3RkOjplcXVhbF9yYW5nZShzdGQ6OmJlZ2luKGV1Y0tSRGVjb2RpbmdJbmRl
eCksIHN0ZDo6ZW5kKGV1Y0tSRGVjb2RpbmdJbmRleCksIHN0ZDo6cGFpcjx1aW50MTZfdCwgVUNo
YXI+KHBvaW50ZXIsIDApLCBbXSAoY29uc3QgYXV0byYgYSwgY29uc3QgYXV0byYgYikgewotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gYS5maXJzdCA8IGIuZmlyc3Q7Ci0gICAgICAgICAgICAg
ICAgfSk7Ci0gICAgICAgICAgICAgICAgaWYgKHJhbmdlLmZpcnN0ICE9IHJhbmdlLnNlY29uZCkg
ewotICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHJhbmdlLmZpcnN0LT5zZWNvbmQp
OworICAgICAgICAgICAgICAgIGlmIChhdXRvIGNvZGVQb2ludCA9IGZpbmRGaXJzdEluU29ydGVk
UGFpcnMoZXVjS1JEZWNvZGluZ0luZGV4LCAobGVhZCAtIDB4ODEpICogMTkwICsgYnl0ZSAtIDB4
NDEpKSB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoKmNvZGVQb2ludCk7CiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBTYXdFcnJvcjo6Tm87CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQpAQCAtNzY5LDIzICs3MTksMjAgQEAgc3RhdGljIFZlY3Rvcjx1aW50
OF90PiBiaWc1RW5jb2RlKFN0cmluZ1ZpZXcgc3RyaW5nLCBGdW5jdGlvbjx2b2lkKFVDaGFyMzIs
IFZlY3QKIAogICAgIGF1dG8gY2hhcmFjdGVycyA9IHN0cmluZy51cGNvbnZlcnRlZENoYXJhY3Rl
cnMoKTsKICAgICBmb3IgKFdURjo6Q29kZVBvaW50SXRlcmF0b3I8VUNoYXI+IGl0ZXJhdG9yKGNo
YXJhY3RlcnMuZ2V0KCksIGNoYXJhY3RlcnMuZ2V0KCkgKyBzdHJpbmcubGVuZ3RoKCkpOyAhaXRl
cmF0b3IuYXRFbmQoKTsgKytpdGVyYXRvcikgewotICAgICAgICBhdXRvIGMgPSAqaXRlcmF0b3I7
Ci0gICAgICAgIGlmIChpc0FTQ0lJKGMpKSB7Ci0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKGMp
OworICAgICAgICBhdXRvIGNvZGVQb2ludCA9ICppdGVyYXRvcjsKKyAgICAgICAgaWYgKGlzQVND
SUkoY29kZVBvaW50KSkgeworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChjb2RlUG9pbnQpOwog
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBhdXRvIHBvaW50ZXJS
YW5nZSA9IHN0ZDo6ZXF1YWxfcmFuZ2Uoc3RkOjpiZWdpbihiaWc1RW5jb2RpbmdNYXApLCBzdGQ6
OmVuZChiaWc1RW5jb2RpbmdNYXApLCBzdGQ6OnBhaXI8VUNoYXIzMiwgdWludDE2X3Q+KGMsIDAp
LCBbXShjb25zdCBhdXRvJiBhLCBjb25zdCBhdXRvJiBiKSB7Ci0gICAgICAgICAgICByZXR1cm4g
YS5maXJzdCA8IGIuZmlyc3Q7Ci0gICAgICAgIH0pOwotICAgICAgICAKKyAgICAgICAgYXV0byBw
b2ludGVyUmFuZ2UgPSBmaW5kSW5Tb3J0ZWRQYWlycyhiaWc1RW5jb2RpbmdNYXAsIGNvZGVQb2lu
dCk7CiAgICAgICAgIGlmIChwb2ludGVyUmFuZ2UuZmlyc3QgPT0gcG9pbnRlclJhbmdlLnNlY29u
ZCkgewotICAgICAgICAgICAgdW5lbmNvZGFibGVIYW5kbGVyKGMsIHJlc3VsdCk7CisgICAgICAg
ICAgICB1bmVuY29kYWJsZUhhbmRsZXIoY29kZVBvaW50LCByZXN1bHQpOwogICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgIH0KIAogICAgICAgICB1aW50MTZfdCBwb2ludGVyID0gMDsKLSAg
ICAgICAgaWYgKGMgPT0gMHgyNTUwIHx8IGMgPT0gMHgyNTVFIHx8IGMgPT0gMHgyNTYxIHx8IGMg
PT0gMHgyNTZBIHx8IGMgPT0gMHg1MzQxIHx8IGMgPT0gMHg1MzQ1KQorICAgICAgICBpZiAoY29k
ZVBvaW50ID09IDB4MjU1MCB8fCBjb2RlUG9pbnQgPT0gMHgyNTVFIHx8IGNvZGVQb2ludCA9PSAw
eDI1NjEgfHwgY29kZVBvaW50ID09IDB4MjU2QSB8fCBjb2RlUG9pbnQgPT0gMHg1MzQxIHx8IGNv
ZGVQb2ludCA9PSAweDUzNDUpCiAgICAgICAgICAgICBwb2ludGVyID0gKHBvaW50ZXJSYW5nZS5z
ZWNvbmQgLSAxKS0+c2Vjb25kOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBwb2ludGVyID0g
cG9pbnRlclJhbmdlLmZpcnN0LT5zZWNvbmQ7CkBAIC04NTQsMTggKzgwMSwxOCBAQCBGdW5jdGlv
bjx2b2lkKFVDaGFyMzIsIFZlY3Rvcjx1aW50OF90PiYpPiB1bmVuY29kYWJsZUhhbmRsZXIoVW5l
bmNvZGFibGVIYW5kbGluZwogdXNpbmcgQmlnNURlY29kZUluZGV4ID0gc3RkOjphcnJheTxzdGQ6
OnBhaXI8dWludDE2X3QsIFVDaGFyMzI+LCBzdGQ6OnNpemUoYmlnNURlY29kaW5nRXh0cmFzKSAr
IHN0ZDo6c2l6ZShiaWc1RW5jb2RpbmdNYXApPjsKIHN0YXRpYyBjb25zdCBCaWc1RGVjb2RlSW5k
ZXgmIGJpZzVEZWNvZGVJbmRleCgpCiB7Ci0gICAgc3RhdGljIGF1dG8mIHRhYmxlID0gKltdIHsK
LSAgICAgICAgYXV0byB0YWJsZSA9IG5ldyBCaWc1RGVjb2RlSW5kZXg7CisgICAgc3RhdGljIEJp
ZzVEZWNvZGVJbmRleCogdGFibGU7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2U7Cisg
ICAgc3RkOjpjYWxsX29uY2Uob25jZSwgWyZdIHsKKyAgICAgICAgdGFibGUgPSBuZXcgQmlnNURl
Y29kZUluZGV4OwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0ZDo6c2l6ZShiaWc1
RGVjb2RpbmdFeHRyYXMpOyBpKyspCiAgICAgICAgICAgICAoKnRhYmxlKVtpXSA9IGJpZzVEZWNv
ZGluZ0V4dHJhc1tpXTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdGQ6OnNpemUo
YmlnNUVuY29kaW5nTWFwKTsgaSsrKQogICAgICAgICAgICAgKCp0YWJsZSlbaSArIHN0ZDo6c2l6
ZShiaWc1RGVjb2RpbmdFeHRyYXMpXSA9IHsgYmlnNUVuY29kaW5nTWFwW2ldLnNlY29uZCwgYmln
NUVuY29kaW5nTWFwW2ldLmZpcnN0IH07Ci0gICAgICAgIHN0ZDo6c29ydCh0YWJsZS0+YmVnaW4o
KSwgdGFibGUtPmVuZCgpLCBbXSAoYXV0byYgYSwgYXV0byYgYikgewotICAgICAgICAgICAgcmV0
dXJuIGEuZmlyc3QgPCBiLmZpcnN0OwotICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJuIHRhYmxl
OwotICAgIH0oKTsKLSAgICByZXR1cm4gdGFibGU7CisgICAgICAgIHNvcnRCeUZpcnN0KCp0YWJs
ZSk7CisgICAgICAgIEFTU0VSVChzb3J0ZWRGaXJzdHNBcmVVbmlxdWUoKnRhYmxlKSk7CisgICAg
fSk7CisgICAgcmV0dXJuICp0YWJsZTsKIH0KIAogU3RyaW5nIFRleHRDb2RlY0NKSzo6YmlnNURl
Y29kZShjb25zdCB1aW50OF90KiBieXRlcywgc2l6ZV90IGxlbmd0aCwgYm9vbCBmbHVzaCwgYm9v
bCBzdG9wT25FcnJvciwgYm9vbCYgc2F3RXJyb3IpCkBAIC04ODgsMTQgKzgzNSw5IEBAIFN0cmlu
ZyBUZXh0Q29kZWNDSks6OmJpZzVEZWNvZGUoY29uc3QgdWludDhfdCogYnl0ZXMsIHNpemVfdCBs
ZW5ndGgsIGJvb2wgZmx1c2gsCiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmRDaGFy
YWN0ZXIoMHgwMEVBKTsKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZENoYXJhY3Rl
cigweDAzMEMpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
IGF1dG8mIGluZGV4ID0gYmlnNURlY29kZUluZGV4KCk7Ci0gICAgICAgICAgICAgICAgICAgIGF1
dG8gcmFuZ2UgPSBzdGQ6OmVxdWFsX3JhbmdlKGluZGV4LmJlZ2luKCksIGluZGV4LmVuZCgpLCBz
dGQ6OnBhaXI8dWludDE2X3QsIFVDaGFyMzI+KHBvaW50ZXIsIDApLCBbXShjb25zdCBhdXRvJiBh
LCBjb25zdCBhdXRvJiBiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYS5maXJz
dCA8IGIuZmlyc3Q7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAg
ICBpZiAocmFuZ2UuZmlyc3QgIT0gcmFuZ2Uuc2Vjb25kKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQocmFuZ2UuZmlyc3QgKyAxID09IHJhbmdlLnNlY29uZCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kQ2hhcmFjdGVyKHJhbmdlLmZpcnN0LT5zZWNvbmQp
OwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgaWYgKGF1
dG8gY29kZVBvaW50ID0gZmluZEZpcnN0SW5Tb3J0ZWRQYWlycyhiaWc1RGVjb2RlSW5kZXgoKSwg
cG9pbnRlcikpCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kQ2hhcmFjdGVy
KCpjb2RlUG9pbnQpOworICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gU2F3RXJyb3I6OlllczsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIFNhd0Vycm9yOjpObzsKQEAgLTkwNSw3ICs4NDcsNyBAQCBTdHJpbmcg
VGV4dENvZGVjQ0pLOjpiaWc1RGVjb2RlKGNvbnN0IHVpbnQ4X3QqIGJ5dGVzLCBzaXplX3QgbGVu
Z3RoLCBib29sIGZsdXNoLAogICAgICAgICAgICAgcmV0dXJuIFNhd0Vycm9yOjpZZXM7CiAgICAg
ICAgIH0KICAgICAgICAgaWYgKGlzQVNDSUkoYnl0ZSkpIHsKLSAgICAgICAgICAgIHJlc3VsdC5h
cHBlbmQoc3RhdGljX2Nhc3Q8TENoYXI+KGJ5dGUpKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQoc3RhdGljX2Nhc3Q8Y2hhcj4oYnl0ZSkpOwogICAgICAgICAgICAgcmV0dXJuIFNhd0Vycm9y
OjpObzsKICAgICAgICAgfQogICAgICAgICBpZiAoYnl0ZSA+PSAweDgxICYmIGJ5dGUgPD0gMHhG
RSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNT
aW5nbGVCeXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjU2lu
Z2xlQnl0ZS5jcHAKaW5kZXggYTBiMTU3OWIxODdmZDI2NTI3MTNkNjYwMTJmOTc0N2M2NTg0ZDE3
Ny4uODA3NjE3MDQ3NmFiZjIyMTQyZTNmMjljMzJkOWM3MGIzMTY5OTljMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNTaW5nbGVCeXRlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1NpbmdsZUJ5dGUuY3BwCkBA
IC0yNiw2ICsyNiw5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGV4dENvZGVj
U2luZ2xlQnl0ZS5oIgogCisjaW5jbHVkZSAiRW5jb2RpbmdUYWJsZXMuaCIKKyNpbmNsdWRlIDxt
dXRleD4KKyNpbmNsdWRlIDx3dGYvSXRlcmF0b3JSYW5nZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L0NvZGVQb2ludEl0ZXJhdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5o
PgogI2luY2x1ZGUgPHd0Zi91bmljb2RlL0NoYXJhY3Rlck5hbWVzLmg+CkBAIC00Niw3ICs0OSw4
IEBAIGVudW0gY2xhc3MgVGV4dENvZGVjU2luZ2xlQnl0ZTo6RW5jb2RpbmcgOiB1aW50OF90IHsK
IH07CiAKIHVzaW5nIFNpbmdsZUJ5dGVEZWNvZGVUYWJsZSA9IHN0ZDo6YXJyYXk8VUNoYXIsIDEy
OD47Ci11c2luZyBTaW5nbGVCeXRlRW5jb2RlVGFibGUgPSBzdGQ6OnBhaXI8Y29uc3Qgc3RkOjpw
YWlyPFVDaGFyLCB1aW50OF90PiosIHNpemVfdD47Cit1c2luZyBTaW5nbGVCeXRlRW5jb2RlVGFi
bGVFbnRyeSA9IHN0ZDo6cGFpcjxVQ2hhciwgdWludDhfdD47Cit1c2luZyBTaW5nbGVCeXRlRW5j
b2RlVGFibGUgPSBXVEY6Okl0ZXJhdG9yUmFuZ2U8Y29uc3QgU2luZ2xlQnl0ZUVuY29kZVRhYmxl
RW50cnkqPjsKIAogLy8gRnJvbSBodHRwczovL2VuY29kaW5nLnNwZWMud2hhdHdnLm9yZy9pbmRl
eC1pc28tODg1OS0zLnR4dCB3aXRoIDB4RkZGRCBmaWxsaW5nIHRoZSBnYXBzCiBzdGF0aWMgY29u
c3RleHByIFNpbmdsZUJ5dGVEZWNvZGVUYWJsZSBpc284ODU5MyB7CkBAIC0xNzAsMTcgKzE3NCwy
MyBAQCBzdGF0aWMgY29uc3RleHByIFNpbmdsZUJ5dGVEZWNvZGVUYWJsZSBpYm04NjYgewogdGVt
cGxhdGU8Y29uc3QgU2luZ2xlQnl0ZURlY29kZVRhYmxlJiBkZWNvZGVUYWJsZT4gU2luZ2xlQnl0
ZUVuY29kZVRhYmxlIHRhYmxlRm9yRW5jb2RpbmcoKQogewogICAgIC8vIEZJWE1FOiBXaXRoIHRo
ZSBDKysyMCB2ZXJzaW9uIG9mIHN0ZDo6Y291bnQsIHdlIHNob3VsZCBiZSBhYmxlIHRvIGNoYW5n
ZSB0aGlzIGZyb20gY29uc3QgdG8gY29uc3RleHByIGFuZCBnZXQgaXQgY29tcHV0ZWQgYXQgY29t
cGlsZSB0aW1lLgotICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc2l6ZSA9IHN0ZDo6c2l6ZShkZWNv
ZGVUYWJsZSkgLSBzdGQ6OmNvdW50KHN0ZDo6YmVnaW4oZGVjb2RlVGFibGUpLCBzdGQ6OmVuZChk
ZWNvZGVUYWJsZSksIHJlcGxhY2VtZW50Q2hhcmFjdGVyKTsKLSAgICBzdGF0aWMgY29uc3QgYXV0
byB0YWJsZSA9IFsmXSB7Ci0gICAgICAgIGF1dG8gdGFibGUgPSBuZXcgc3RkOjpwYWlyPFVDaGFy
LCB1aW50OF90PltzaXplXTsKKyAgICBzdGF0aWMgY29uc3QgYXV0byBzaXplID0gc3RkOjpzaXpl
KGRlY29kZVRhYmxlKSAtIHN0ZDo6Y291bnQoc3RkOjpiZWdpbihkZWNvZGVUYWJsZSksIHN0ZDo6
ZW5kKGRlY29kZVRhYmxlKSwgcmVwbGFjZW1lbnRDaGFyYWN0ZXIpOworICAgIHN0YXRpYyBjb25z
dCBTaW5nbGVCeXRlRW5jb2RlVGFibGVFbnRyeSogZW50cmllczsKKyAgICBzdGQ6Om9uY2VfZmxh
ZyBvbmNlOworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2UsIFsmXSB7CisgICAgICAgIGF1dG8qIG11
dGFibGVFbnRyaWVzID0gbmV3IFNpbmdsZUJ5dGVFbmNvZGVUYWJsZUVudHJ5W3NpemVdOwogICAg
ICAgICBzaXplX3QgaiA9IDA7CiAgICAgICAgIGZvciAodWludDhfdCBpID0gMDsgaSA8IHN0ZDo6
c2l6ZShkZWNvZGVUYWJsZSk7IGkrKykgewogICAgICAgICAgICAgaWYgKGRlY29kZVRhYmxlW2ld
ICE9IHJlcGxhY2VtZW50Q2hhcmFjdGVyKQotICAgICAgICAgICAgICAgIHRhYmxlW2orK10gPSB7
IGRlY29kZVRhYmxlW2ldLCBpIH07CisgICAgICAgICAgICAgICAgbXV0YWJsZUVudHJpZXNbaisr
XSA9IHsgZGVjb2RlVGFibGVbaV0sIGkgKyAweDgwIH07CiAgICAgICAgIH0KLSAgICAgICAgcmV0
dXJuIHRhYmxlOwotICAgIH0oKTsKLSAgICByZXR1cm4geyB0YWJsZSwgc2l6ZSB9OworICAgICAg
ICBBU1NFUlQoaiA9PSBzaXplKTsKKyAgICAgICAgYXV0byBjb2xsZWN0aW9uID0gV1RGOjptYWtl
SXRlcmF0b3JSYW5nZShtdXRhYmxlRW50cmllcyArIDAsIG11dGFibGVFbnRyaWVzICsgc2l6ZSk7
CisgICAgICAgIHNvcnRCeUZpcnN0KGNvbGxlY3Rpb24pOworICAgICAgICBBU1NFUlQoc29ydGVk
Rmlyc3RzQXJlVW5pcXVlKGNvbGxlY3Rpb24pKTsKKyAgICAgICAgZW50cmllcyA9IG11dGFibGVF
bnRyaWVzOworICAgIH0pOworICAgIHJldHVybiBXVEY6Om1ha2VJdGVyYXRvclJhbmdlKGVudHJp
ZXMgKyAwLCBlbnRyaWVzICsgc2l6ZSk7CiB9CiAKIHN0YXRpYyBTaW5nbGVCeXRlRW5jb2RlVGFi
bGUgdGFibGVGb3JFbmNvZGluZyhUZXh0Q29kZWNTaW5nbGVCeXRlOjpFbmNvZGluZyBlbmNvZGlu
ZykKQEAgLTI0MCwzMSArMjUwLDIwIEBAIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgU2luZ2xlQnl0
ZURlY29kZVRhYmxlJiB0YWJsZUZvckRlY29kaW5nKFRleHRDb2RlY1NpbmdsZUJ5CiAvLyBodHRw
czovL2VuY29kaW5nLnNwZWMud2hhdHdnLm9yZy8jc2luZ2xlLWJ5dGUtZW5jb2Rlcgogc3RhdGlj
IFZlY3Rvcjx1aW50OF90PiBlbmNvZGUoY29uc3QgU2luZ2xlQnl0ZUVuY29kZVRhYmxlJiB0YWJs
ZSwgU3RyaW5nVmlldyBzdHJpbmcsIEZ1bmN0aW9uPHZvaWQoVUNoYXIzMiwgVmVjdG9yPHVpbnQ4
X3Q+Jik+JiYgdW5lbmNvZGFibGVIYW5kbGVyKQogeworICAgIC8vIEZJWE1FOiBDb25zaWRlciBh
ZGRpbmcgYW4gQVNDSUkgZmFzdCBwYXRoIGxpa2UgdGhlIG9uZSBpbiBUZXh0Q29kZWNMYXRpbjE6
OmRlY29kZS4KICAgICBWZWN0b3I8dWludDhfdD4gcmVzdWx0OwogICAgIHJlc3VsdC5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KHN0cmluZy5sZW5ndGgoKSk7Ci0KLSAgICBhdXRvIGNoYXJhY3RlcnMg
PSBzdHJpbmcudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgZm9yIChXVEY6OkNvZGVQb2lu
dEl0ZXJhdG9yPFVDaGFyPiBpdGVyYXRvcihjaGFyYWN0ZXJzLmdldCgpLCBjaGFyYWN0ZXJzLmdl
dCgpICsgc3RyaW5nLmxlbmd0aCgpKTsgIWl0ZXJhdG9yLmF0RW5kKCk7ICsraXRlcmF0b3IpIHsK
LSAgICAgICAgYXV0byBjb2RlUG9pbnQgPSAqaXRlcmF0b3I7CisgICAgZm9yIChhdXRvIGNvZGVQ
b2ludCA6IHN0cmluZy5jb2RlUG9pbnRzKCkpIHsKICAgICAgICAgaWYgKGlzQVNDSUkoY29kZVBv
aW50KSkgewogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChjb2RlUG9pbnQpOwogICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgIH0KLQotICAgICAgICBhdXRvIGNvZGVVbml0ID0gc3RhdGlj
X2Nhc3Q8VUNoYXI+KGNvZGVQb2ludCk7Ci0gICAgICAgIGlmIChjb2RlVW5pdCAhPSBjb2RlUG9p
bnQpIHsKLSAgICAgICAgICAgIHVuZW5jb2RhYmxlSGFuZGxlcihjb2RlUG9pbnQsIHJlc3VsdCk7
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgYXV0
byByYW5nZSA9IHN0ZDo6ZXF1YWxfcmFuZ2UodGFibGUuZmlyc3QsIHRhYmxlLmZpcnN0ICsgdGFi
bGUuc2Vjb25kLCBzdGQ6OnBhaXI8VUNoYXIsIHVpbnQ4X3Q+KGNvZGVVbml0LCAwKSwgW10oY29u
c3QgYXV0byYgYSwgY29uc3QgYXV0byYgYikgewotICAgICAgICAgICAgcmV0dXJuIGEuZmlyc3Qg
PCBiLmZpcnN0OwotICAgICAgICB9KTsKLSAgICAgICAgaWYgKHJhbmdlLmZpcnN0ID09IHJhbmdl
LnNlY29uZCkgeworICAgICAgICBhdXRvIGJ5dGUgPSBmaW5kRmlyc3RJblNvcnRlZFBhaXJzKHRh
YmxlLCBjb2RlUG9pbnQpOworICAgICAgICBpZiAoIWJ5dGUpIHsKICAgICAgICAgICAgIHVuZW5j
b2RhYmxlSGFuZGxlcihjb2RlUG9pbnQsIHJlc3VsdCk7CiAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgfQotICAgICAgICByZXN1bHQuYXBwZW5kKHJhbmdlLmZpcnN0LT5zZWNvbmQgKyAw
eDgwKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgqYnl0ZSk7CiAgICAgfQogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CkBAIC0yODQsNyArMjgzLDYgQEAgc3RhdGljIFN0cmluZyBkZWNvZGUoY29uc3Qg
U2luZ2xlQnl0ZURlY29kZVRhYmxlJiB0YWJsZSwgY29uc3QgdWludDhfdCogYnl0ZXMsIHMKICAg
ICAgICAgICAgIHNhd0Vycm9yID0gdHJ1ZTsKICAgICAgICAgcmVzdWx0LmFwcGVuZChjb2RlUG9p
bnQpOwogICAgIH07Ci0KICAgICBpZiAoc3RvcE9uRXJyb3IpIHsKICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgICAgICAgcGFyc2VCeXRlKGJ5dGVz
W2ldKTsKQEAgLTI5NSw3ICsyOTMsNiBAQCBzdGF0aWMgU3RyaW5nIGRlY29kZShjb25zdCBTaW5n
bGVCeXRlRGVjb2RlVGFibGUmIHRhYmxlLCBjb25zdCB1aW50OF90KiBieXRlcywgcwogICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKQogICAgICAgICAgICAgcGFyc2VC
eXRlKGJ5dGVzW2ldKTsKICAgICB9Ci0KICAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CiB9
CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408132</attachid>
            <date>2020-09-06 14:18:44 -0700</date>
            <delta_ts>2020-09-06 14:31:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216229-20200906141843.patch</filename>
            <type>text/plain</type>
            <size>30924</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2NjgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzY2NDFhNTYzMjViZTYx
YWNkZTIxYmI4NzA1MmZmNTFjZjA0NjZjNC4uMzdkNzJhNTIxOTUwYTY4MzBkMmMxZTBiZDMyMGQ2
ZTUzN2E3OWUyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcxIEBACisyMDIwLTA5LTA2ICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIFRleHRDb2RlY0NKSyBh
bmQgVGV4dENvZGVjU2luZ2xlQnl0ZSB0aHJlYWQtc2FmZSBhbmQgcmVmYWN0b3IgYSBiaXQgdG8g
c2hhcmUgY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjE2MjI5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGhlIHRleHQgZW5jb2RpbmcgbWFjaGluZXJ5IGlzIHVzYWJsZSBvbiBtdWx0aXBsZSB0aHJl
YWRzLCBidXQgb3VyIG5ldyBUZXh0Q29kZWMKKyAgICAgICAgY2xhc3NlcyBoYXZlIHNvbWUgZ2xv
YmFsIGRhdGEgc3RydWN0dXJlcyB0aGF0IG5lZWQgdG8gYmUgZ3VhcmRlZCB0byBrZWVwIHRoYXQg
aW50YWN0LgorCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9FbmNvZGluZ1RhYmxlcy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpjaGVja0VuY29kaW5nVGFibGVJbnZhcmlhbnRzKTogT25lLXRpbWUg
Y2hlY2sgZm9yIGludmFyaWFudHMgdGhhdCBjbGllbnRzCisgICAgICAgIG9mIHRoZXNlIHRhYmxl
cyBkZXBlbmQgb24uCisKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L0VuY29kaW5nVGFibGVzLmg6
IEFkZGVkIGNoZWNrRW5jb2RpbmdUYWJsZUludmFyaWFudHMuIEFsc28gQWRkZWQKKyAgICAgICAg
ZnVuY3Rpb24gdGVtcGxhdGVzIGZvciBlbmNvZGluZyB0YWJsZXM6IEFkZGVkIGZpbmRGaXJzdElu
U29ydGVkUGFpcnMgYW5kCisgICAgICAgIGZpbmRJblNvcnRlZFBhaXJzIGZvciBzZWFyY2hpbmcg
YSBzb3J0ZWQgYXJyYXkgb2YgcGFpcnMgdXNlZCBhcyBhIG1hcC4gQWRkZWQKKyAgICAgICAgc29y
dEJ5Rmlyc3QgdG8gYWlkIGluIHRoZSBjcmVhdGlvbiBvZiBzdWNoIGEgc29ydGVkIGFycmF5LiBB
bmQgYWRkZWQgaXNTb3J0ZWRCeUZpcnN0CisgICAgICAgIGFuZCBzb3J0ZWRGaXJzdHNBcmVVbmlx
dWUgc28gd2UgY2FuIGFzc2VydCB0aG9zZSBpbnZhcmlhbnRzLiBPbmUgb2YgdGhlIGdvb2QKKyAg
ICAgICAgZmVhdHVyZXMgb2YgdGhlIGZpbmRJblNvcnRlZFBhaXJzIGZ1bmN0aW9ucyBpcyB0aGF0
IHRoZXkgaGFuZGxlcyBpbnRlZ2VyIHZhbHVlcyB0aGF0CisgICAgICAgIGRvbid0IGZpdCBpbiBh
biBpbnRlZ3JhbCBrZXkgdHlwZSwgcmV0dXJuaW5nIFdURjo6bnVsbG9wdCBpbiB0aGF0IGNhc2Uu
IFRoYXQgbGV0cyB1cworICAgICAgICBwYXNzIGNvZGUgcG9pbnQgdmFsdWVzIHdoZW4gbG9va2lu
ZyBpbiB0YWJsZXMgdGhhdCB1c2UgY29kZSB1bml0cyBhcyB0aGVpciBrZXksIHdpdGhvdXQKKyAg
ICAgICAgc2VwYXJhdGVseSBjaGVja2luZyBpZiB0aGV5IGFyZSBpbiByYW5nZSwgd2hpY2ggb3Ro
ZXJ3aXNlIHJlcXVpcmVzIGNvbnZlcnRpbmcgdG8gVUNoYXIKKyAgICAgICAgYW5kIGNoZWNraW5n
IGZvciBlcXVhbGl0eSBvciBjYWxsaW5nIFVfSVNfQk1QLgorCisgICAgICAgICogcGxhdGZvcm0v
dGV4dC9UZXh0Q29kZWNDSksuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjQ0pLOjpU
ZXh0Q29kZWNDSkspOiBDYWxsIGNoZWNrRW5jb2RpbmdUYWJsZUludmFyaWFudHMuCisgICAgICAg
IChXZWJDb3JlOjpUZXh0Q29kZWNDSks6OmVuY29kZSBjb25zdCk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6amlzMDIwOERlY29kZUluZGV4KTogVXNlIHN0ZDo6Y2FsbF9vbmNlIGZvciB0aHJl
YWQgc2FmZXR5LgorICAgICAgICBVc2Ugc29ydEJ5Rmlyc3QgYW5kIHNvcnRlZEZpcnN0c0FyZVVu
aXF1ZS4KKyAgICAgICAgKFdlYkNvcmU6OmNvZGVQb2ludEpJUzAyMDgpOiBVc2UgZmluZEZpcnN0
SW5Tb3J0ZWRQYWlycy4KKyAgICAgICAgKFdlYkNvcmU6OmNvZGVQb2ludEpJUzAyMTIpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY0NKSzo6ZXVjSlBEZWNvZGUpOiBDYXN0IHRv
IGNoYXIgaW5zdGFkIG9mIExDaGFyIHdoZW4gYWRkaW5nCisgICAgICAgIGFuIEFTQ0lJIGNoYXJh
Y3RlciB0byBhIFN0cmluZ0J1aWxkZXIuCisgICAgICAgIChXZWJDb3JlOjpldWNKUEVuY29kZSk6
IFVzZSB0aGUgbmFtZSBjb2RlUG9pbnQgaW5zdGVhZCBvZiBjIHRvIG1hdGNoIG90aGVyCisgICAg
ICAgIHN1cnJvdW5kaW5nIGNvZGUuIFVzZSBmaW5kRmlyc3RJblNvcnRlZFBhaXJzLgorICAgICAg
ICAoV2ViQ29yZTo6aXNvMjAyMkpQRW5jb2RlKTogUmVtb3ZlZCBzb21lIHVubmVlZGVkIGNhc3Rz
IHRvIHVpbnQ4X3Qgd2hlbiBhcHBlbmRpbmcKKyAgICAgICAgYnl0ZXMgdG8gYSBWZWN0b3IuIEFk
ZGVkIGEgc3RhdGljX2Fzc2VydCB0byBjaGVjayB0aGUgc2l6ZSBvZiBpc28yMDIySlBLYXRha2Fu
YS4KKyAgICAgICAgVXNlIGZpbmRGaXJzdEluU29ydGVkUGFpcnMuCisgICAgICAgIChXZWJDb3Jl
OjpzaGlmdEpJU0VuY29kZSk6IFVzZSBmaW5kSW5Tb3J0ZWRQYWlycy4KKyAgICAgICAgKFdlYkNv
cmU6OmV1Y0tSRW5jb2RpbmdJbmRleCk6IFVzZSBzdGQ6OmNhbGxfb25jZSBmb3IgdGhyZWFkIHNh
ZmV0eS4KKyAgICAgICAgVXNlIHNvcnRCeUZpcnN0IGFuZCBzb3J0ZWRGaXJzdHNBcmVVbmlxdWUu
CisgICAgICAgIChXZWJDb3JlOjpldWNLUkVuY29kZSk6IFJlbW92ZWQgc29tZSB1bm5lZWRlZCBj
YXN0cyB0byB1aW50OF90IHdoZW4gYXBwZW5kaW5nCisgICAgICAgIGJ5dGVzIHRvIGEgVmVjdG9y
LiBVc2UgZmluZEZpcnN0SW5Tb3J0ZWRQYWlycy4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2Rl
Y0NKSzo6ZXVjS1JEZWNvZGUpOiBVc2UgZmluZEZpcnN0SW5Tb3J0ZWRQYWlycy4KKyAgICAgICAg
KFdlYkNvcmU6OmJpZzVFbmNvZGUpOiBVc2UgZmluZEluU29ydGVkUGFpcnMuIEFsc28gcmVuYW1l
ZCBjIHRvIGNvZGVQb2ludC4KKyAgICAgICAgKFdlYkNvcmU6OmJpZzVEZWNvZGVJbmRleCk6IFVz
ZSBzdGQ6OmNhbGxfb25jZSBmb3IgdGhyZWFkIHNhZmV0eS4KKyAgICAgICAgVXNlIHNvcnRCeUZp
cnN0IGFuZCBzb3J0ZWRGaXJzdHNBcmVVbmlxdWUuCisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29k
ZWNDSks6OmJpZzVEZWNvZGUpOiBVc2UgZmluZEZpcnN0SW5Tb3J0ZWRQYWlycy4gQ2FzdCB0byBj
aGFyCisgICAgICAgIGluc3RhZCBvZiBMQ2hhciB3aGVuIGFkZGluZyBhbiBBU0NJSSBjaGFyYWN0
ZXIgdG8gYSBTdHJpbmdCdWlsZGVyLgorCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0Q29k
ZWNTaW5nbGVCeXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRhYmxlRm9yRW5jb2RpbmcpOiBS
ZXR1cm4gYW4gSXRlcmF0b3JSYW5nZSBpbnN0ZWFkIG9mIGEgcGFpciBvZgorICAgICAgICBwb2lu
dGVyIGFuZCBzaXplLiBUaGlzIHdvcmtzIHdpdGggc3RkOjpiZWdpbi9lbmQuIEFsc28gbWFrZSB0
YWJsZSB3aXRoIGFjdHVhbAorICAgICAgICBlbmNvZGVkIGJ5dGVzLCBieSBhZGRpbmcgMHg4MCBo
ZXJlLCByYXRoZXIgdGhhbiBkb2luZyB0aGF0IHdoZW4gdXNpbmcgdGhlIHRhYmxlLgorICAgICAg
ICAoV2ViQ29yZTo6ZW5jb2RlKTogVXNlIHN0ZDo6Y2FsbF9vbmNlIGZvciB0aHJlYWQgc2FmZXR5
LgorICAgICAgICBVc2Ugc29ydEJ5Rmlyc3QgYW5kIHNvcnRlZEZpcnN0c0FyZVVuaXF1ZS4gVGhl
IGNvZGUgYmVmb3JlIHdhcyBub3Qgc29ydGluZyBhdAorICAgICAgICBhbGwsIHdoaWNoIG1lYW5z
IGl0IHByb2JhYmx5IGRpZG4ndCB3b3JrIGluIGFueSBjYXNlcyB3aGVyZSB0aGUgY29kZSB1bml0
cworICAgICAgICBoYXBwZW4gdG8gbm90IGJlIGluIGFzY2VuZGluZyBvcmRlci4gV2Ugc2hvdWxk
IGFkZCBzb21lIHRlc3QgY2FzZXMuCisgICAgICAgIChXZWJDb3JlOjpkZWNvZGUpOiBVc2UgZmlu
ZEZpcnN0SW5Tb3J0ZWRQYWlycy4gQWxzbyB1c2UgU3RyaW5nVmlldzo6Y29kZVBvaW50cworICAg
ICAgICBiZWNhdXNlIHRoZXNlIGFyZSBsaWtlbHkgdG8gYmUgOC1iaXQgc3RyaW5ncyBhbmQgd2Ug
ZG9uJ3QgbmVlZCB0byB0ZW1wb3JhcmlseQorICAgICAgICB1cGNvbnZlcnQgdGhlbSB0byAxNi1i
aXQganVzdCB0byBlbmNvZGUgdGhlbS4gU2hvdWxkIHByb2JhYmx5IGxhdGVyIG1lYXN1cmUgaWYK
KyAgICAgICAgdGhlIHVzZSBvZiBTdHJpbmdWaWV3Ojp1cGNvbnZlcnRlZENoYXJhY3RlcnMgcGx1
cyBDb2RlUG9pbnRJdGVyYXRvcjxVQ2hhcj4KKyAgICAgICAgaW5zdGVhZCBvZiBTdHJpbmdWaWV3
Ojpjb2RlUG9pbnRzIGlzIGJldHRlciBmb3IgcGVyZm9ybWFuY2UgaW4gdGhlIENKSyBlbmNvZGlu
ZworICAgICAgICBmdW5jdGlvbnMuIFRoaXMgYXBwcm9hY2ggbWVhbnMgbW9yZSBicmFuY2hpbmcg
aW5zaWRlIHRoZSBsb29wLCBidXQgdGhlIG90aGVyCisgICAgICAgIHZlcnNpb24gaW52b2x2ZXMg
bWVtb3J5IGFsbG9jYXRpb24gYW5kIGEgc2Vjb25kIGxvb3Agd2hlbiB0aGUgY2hhcmFjdGVycyBh
cmUKKyAgICAgICAgYWxsIDgtYml0LgorCiAyMDIwLTA5LTA2ICBEYXJpbiBBZGxlciAgPGRhcmlu
QGFwcGxlLmNvbT4KIAogICAgICAgICBUZXh0Q29kZWMgcmVmaW5lbWVudHMKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvRW5jb2RpbmdUYWJsZXMuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9FbmNvZGluZ1RhYmxlcy5jcHAKaW5kZXggNzJiMjJmOTVk
Y2I5OWMwYmE3MWZkY2MzZTY5Y2Q3OGQzMDk2MjU0Ni4uZWQyZjU0YzY1MmU5YzYxZTUyM2RiNGFl
MTQzNzUwZDYyMGVmZjdkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC9FbmNvZGluZ1RhYmxlcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9F
bmNvZGluZ1RhYmxlcy5jcHAKQEAgLTI2LDYgKzI2LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJFbmNvZGluZ1RhYmxlcy5oIgogCisjaW5jbHVkZSA8bXV0ZXg+CisKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogLy8gRklYTUU6IENvbXByZXNzIHRoZXNlIHRhYmxlcyBhbmQgZGVj
b21wcmVzcyB0aGVtIGlmIHRoZXkgYXJlIGFjdHVhbGx5IHVzZWQuIFRoaXMgd2lsbCBzaWduaWZp
Y2FudGx5IGRlY3JlYXNlIHRoZSBzaXplIG9mIFdlYkNvcmUncyBiaW5hcnkuCkBAIC02MjM2LDQg
KzYyMzgsMjQgQEAgY29uc3Qgc3RkOjpwYWlyPHVpbnQxNl90LCBVQ2hhcj4gZXVjS1JEZWNvZGlu
Z0luZGV4WzE3MDQ4XSB7CiAgICAgeyAyMzc0MiwgMHg3MTk5IH0sIHsgMjM3NDMsIDB4NzFCOSB9
LCB7IDIzNzQ0LCAweDcxQkEgfSwgeyAyMzc0NSwgMHg3MkE3IH0sIHsgMjM3NDYsIDB4NzlBNyB9
LCB7IDIzNzQ3LCAweDdBMDAgfSwgeyAyMzc0OCwgMHg3RkIyIH0sIHsgMjM3NDksIDB4OEE3MCB9
LAogfTsKIAorI2lmIEFTU0VSVF9FTkFCTEVECisKK3ZvaWQgY2hlY2tFbmNvZGluZ1RhYmxlSW52
YXJpYW50cygpCit7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2U7CisgICAgc3RkOjpj
YWxsX29uY2Uob25jZSwgW10geworICAgICAgICBBU1NFUlQoaXNTb3J0ZWRCeUZpcnN0KGppczAy
MDgpKTsKKworICAgICAgICBBU1NFUlQoaXNTb3J0ZWRCeUZpcnN0KGppczAyMTIpKTsKKyAgICAg
ICAgQVNTRVJUKHNvcnRlZEZpcnN0c0FyZVVuaXF1ZShqaXMwMjEyKSk7CisKKyAgICAgICAgQVNT
RVJUKGlzU29ydGVkQnlGaXJzdChiaWc1RW5jb2RpbmdNYXApKTsKKworICAgICAgICBBU1NFUlQo
aXNTb3J0ZWRCeUZpcnN0KGV1Y0tSRGVjb2RpbmdJbmRleCkpOworICAgICAgICBBU1NFUlQoc29y
dGVkRmlyc3RzQXJlVW5pcXVlKGV1Y0tSRGVjb2RpbmdJbmRleCkpOworICAgIH0pOworfQorCisj
ZW5kaWYKKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9FbmNv
ZGluZ1RhYmxlcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9FbmNvZGluZ1RhYmxl
cy5oCmluZGV4IGRmOTNjMWNiMGI2Y2Q0NzQ3MGJkNmNiODM4N2FmZTgxODk3NzAyZTQuLjAzOWE1
OTcyNWMxMDdiNzMwZmEzMzY5OTJjOTA1OTkxMjVjY2FiZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvRW5jb2RpbmdUYWJsZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L0VuY29kaW5nVGFibGVzLmgKQEAgLTI1LDcgKzI1LDExIEBACiAKICNw
cmFnbWEgb25jZQogCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGl0ZXJhdG9yPgog
I2luY2x1ZGUgPHVuaWNvZGUvdW1hY2hpbmUuaD4KKyNpbmNsdWRlIDx1dGlsaXR5PgorI2luY2x1
ZGUgPHd0Zi9PcHRpb25hbC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM1LDQgKzM5
LDY4IEBAIGV4dGVybiBjb25zdCBzdGQ6OnBhaXI8VUNoYXIzMiwgdWludDE2X3Q+IGJpZzVFbmNv
ZGluZ01hcFsxNDY4Nl07CiBleHRlcm4gY29uc3Qgc3RkOjpwYWlyPHVpbnQxNl90LCBVQ2hhcjMy
PiBiaWc1RGVjb2RpbmdFeHRyYXNbMzkwNF07CiBleHRlcm4gY29uc3Qgc3RkOjpwYWlyPHVpbnQx
Nl90LCBVQ2hhcj4gZXVjS1JEZWNvZGluZ0luZGV4WzE3MDQ4XTsKIAordm9pZCBjaGVja0VuY29k
aW5nVGFibGVJbnZhcmlhbnRzKCk7CisKKy8vIEZ1bmN0aW9ucyBmb3IgdXNpbmcgc29ydGVkIGFy
cmF5cyBvZiBwYWlycyBhcyBhIG1hcC4KKy8vIEZJWE1FOiBDb25zaWRlciBtb3ZpbmcgdGhlc2Ug
c29tZXdoZXJlIGVsc2Ugc2luY2UgdGhleSBhcmUgbGlrZWx5IHVzZWZ1bCBmb3IgYnkgbW9yZSB0
aGFuIGp1c3QgZW5jb2RpbmcgdGFibGVzLgordGVtcGxhdGU8dHlwZW5hbWUgQ29sbGVjdGlvblR5
cGU+IHZvaWQgc29ydEJ5Rmlyc3QoQ29sbGVjdGlvblR5cGUmKTsKK3RlbXBsYXRlPHR5cGVuYW1l
IENvbGxlY3Rpb25UeXBlPiBib29sIGlzU29ydGVkQnlGaXJzdChjb25zdCBDb2xsZWN0aW9uVHlw
ZSYpOwordGVtcGxhdGU8dHlwZW5hbWUgQ29sbGVjdGlvblR5cGU+IGJvb2wgc29ydGVkRmlyc3Rz
QXJlVW5pcXVlKGNvbnN0IENvbGxlY3Rpb25UeXBlJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xs
ZWN0aW9uVHlwZSwgdHlwZW5hbWUgS2V5VHlwZT4gc3RhdGljIGF1dG8gZmluZEZpcnN0SW5Tb3J0
ZWRQYWlycyhjb25zdCBDb2xsZWN0aW9uVHlwZSYgY29sbGVjdGlvbiwgY29uc3QgS2V5VHlwZSYp
IC0+IE9wdGlvbmFsPGRlY2x0eXBlKHN0ZDo6YmVnaW4oY29sbGVjdGlvbiktPnNlY29uZCk+Owor
dGVtcGxhdGU8dHlwZW5hbWUgQ29sbGVjdGlvblR5cGUsIHR5cGVuYW1lIEtleVR5cGU+IHN0YXRp
YyBhdXRvIGZpbmRJblNvcnRlZFBhaXJzKGNvbnN0IENvbGxlY3Rpb25UeXBlJiBjb2xsZWN0aW9u
LCBjb25zdCBLZXlUeXBlJikgLT4gc3RkOjpwYWlyPGRlY2x0eXBlKHN0ZDo6YmVnaW4oY29sbGVj
dGlvbikpLCBkZWNsdHlwZShzdGQ6OmJlZ2luKGNvbGxlY3Rpb24pKT47CisKKyNpZiAhQVNTRVJU
X0VOQUJMRUQKK2lubGluZSB2b2lkIGNoZWNrRW5jb2RpbmdUYWJsZUludmFyaWFudHMoKSB7IH0K
KyNlbmRpZgorCitzdHJ1Y3QgQ29tcGFyZUZpcnN0IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
eXBlQSwgdHlwZW5hbWUgVHlwZUI+IGJvb2wgb3BlcmF0b3IoKShjb25zdCBUeXBlQSYgYSwgY29u
c3QgVHlwZUImIGIpCisgICAgeworICAgICAgICByZXR1cm4gYS5maXJzdCA8IGIuZmlyc3Q7Cisg
ICAgfQorfTsKKworc3RydWN0IEVxdWFsRmlyc3QgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFR5
cGVBLCB0eXBlbmFtZSBUeXBlQj4gYm9vbCBvcGVyYXRvcigpKGNvbnN0IFR5cGVBJiBhLCBjb25z
dCBUeXBlQiYgYikKKyAgICB7CisgICAgICAgIHJldHVybiBhLmZpcnN0ID09IGIuZmlyc3Q7Cisg
ICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgQ29sbGVjdGlvblR5cGU+IHZvaWQgc29ydEJ5
Rmlyc3QoQ29sbGVjdGlvblR5cGUmIGNvbGxlY3Rpb24pCit7CisgICAgc3RkOjpzb3J0KHN0ZDo6
YmVnaW4oY29sbGVjdGlvbiksIHN0ZDo6ZW5kKGNvbGxlY3Rpb24pLCBDb21wYXJlRmlyc3QgeyB9
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ29sbGVjdGlvblR5cGU+IGJvb2wgaXNTb3J0ZWRC
eUZpcnN0KGNvbnN0IENvbGxlY3Rpb25UeXBlJiBjb2xsZWN0aW9uKQoreworICAgIHJldHVybiBz
dGQ6OmlzX3NvcnRlZChzdGQ6OmJlZ2luKGNvbGxlY3Rpb24pLCBzdGQ6OmVuZChjb2xsZWN0aW9u
KSwgQ29tcGFyZUZpcnN0IHsgfSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbGxlY3Rpb25U
eXBlPiBib29sIHNvcnRlZEZpcnN0c0FyZVVuaXF1ZShjb25zdCBDb2xsZWN0aW9uVHlwZSYgY29s
bGVjdGlvbikKK3sKKyAgICByZXR1cm4gc3RkOjphZGphY2VudF9maW5kKHN0ZDo6YmVnaW4oY29s
bGVjdGlvbiksIHN0ZDo6ZW5kKGNvbGxlY3Rpb24pLCBFcXVhbEZpcnN0IHsgfSkgPT0gc3RkOjpl
bmQoY29sbGVjdGlvbik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbGxlY3Rpb25UeXBlLCB0
eXBlbmFtZSBLZXlUeXBlPiBzdGF0aWMgYXV0byBmaW5kRmlyc3RJblNvcnRlZFBhaXJzKGNvbnN0
IENvbGxlY3Rpb25UeXBlJiBjb2xsZWN0aW9uLCBjb25zdCBLZXlUeXBlJiBrZXkpIC0+IE9wdGlv
bmFsPGRlY2x0eXBlKHN0ZDo6YmVnaW4oY29sbGVjdGlvbiktPnNlY29uZCk+Cit7CisgICAgaWYg
Y29uc3RleHByIChzdGQ6OmlzX2ludGVncmFsX3Y8S2V5VHlwZT4pIHsKKyAgICAgICAgaWYgKGtl
eSAhPSBkZWNsdHlwZShzdGQ6OmJlZ2luKGNvbGxlY3Rpb24pLT5maXJzdCkoa2V5KSkKKyAgICAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgfQorICAgIGF1dG8gaXRlcmF0b3IgPSBz
dGQ6Omxvd2VyX2JvdW5kKHN0ZDo6YmVnaW4oY29sbGVjdGlvbiksIHN0ZDo6ZW5kKGNvbGxlY3Rp
b24pLCBzdGQ6Om1ha2VfcGFpcihrZXksIGRlY2x0eXBlKHN0ZDo6YmVnaW4oY29sbGVjdGlvbikt
PnNlY29uZCkgeyB9KSwgQ29tcGFyZUZpcnN0IHsgfSk7CisgICAgaWYgKGl0ZXJhdG9yID09IHN0
ZDo6ZW5kKGNvbGxlY3Rpb24pIHx8IGtleSA8IGl0ZXJhdG9yLT5maXJzdCkKKyAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gaXRlcmF0b3ItPnNlY29uZDsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgQ29sbGVjdGlvblR5cGUsIHR5cGVuYW1lIEtleVR5cGU+IHN0YXRpYyBh
dXRvIGZpbmRJblNvcnRlZFBhaXJzKGNvbnN0IENvbGxlY3Rpb25UeXBlJiBjb2xsZWN0aW9uLCBj
b25zdCBLZXlUeXBlJiBrZXkpIC0+IHN0ZDo6cGFpcjxkZWNsdHlwZShzdGQ6OmJlZ2luKGNvbGxl
Y3Rpb24pKSwgZGVjbHR5cGUoc3RkOjpiZWdpbihjb2xsZWN0aW9uKSk+Cit7CisgICAgaWYgY29u
c3RleHByIChzdGQ6OmlzX2ludGVncmFsX3Y8S2V5VHlwZT4pIHsKKyAgICAgICAgaWYgKGtleSAh
PSBkZWNsdHlwZShzdGQ6OmJlZ2luKGNvbGxlY3Rpb24pLT5maXJzdCkoa2V5KSkKKyAgICAgICAg
ICAgIHJldHVybiB7IHN0ZDo6ZW5kKGNvbGxlY3Rpb24pLCBzdGQ6OmVuZChjb2xsZWN0aW9uKSB9
OworICAgIH0KKyAgICByZXR1cm4gc3RkOjplcXVhbF9yYW5nZShzdGQ6OmJlZ2luKGNvbGxlY3Rp
b24pLCBzdGQ6OmVuZChjb2xsZWN0aW9uKSwgc3RkOjptYWtlX3BhaXIoa2V5LCBkZWNsdHlwZShz
dGQ6OmJlZ2luKGNvbGxlY3Rpb24pLT5zZWNvbmQpIHsgfSksIENvbXBhcmVGaXJzdCB7IH0pOwor
fQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2Rl
Y0NKSy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0NKSy5jcHAK
aW5kZXggNjgwN2YzNzI3NDEzMWM0YzFhMWZiZTk2ZTA3YzcxY2E1Zjc4ZThkYy4uZmUzNWQxNmI4
YjJiMTljYTAwYjg3NTFkMGRhZGVmZmEyNDVhOWUxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNDSksuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3RleHQvVGV4dENvZGVjQ0pLLmNwcApAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUg
IlRleHRDb2RlY0NKSy5oIgogCiAjaW5jbHVkZSAiRW5jb2RpbmdUYWJsZXMuaCIKKyNpbmNsdWRl
IDxtdXRleD4KICNpbmNsdWRlIDx3dGYvdGV4dC9Db2RlUG9pbnRJdGVyYXRvci5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9DaGFy
YWN0ZXJOYW1lcy5oPgpAQCAtNDQsNiArNDUsNyBAQCBlbnVtIGNsYXNzIFRleHRDb2RlY0NKSzo6
RW5jb2RpbmcgOiB1aW50OF90IHsKIFRleHRDb2RlY0NKSzo6VGV4dENvZGVjQ0pLKEVuY29kaW5n
IGVuY29kaW5nKQogICAgIDogbV9lbmNvZGluZyhlbmNvZGluZykKIHsKKyAgICBjaGVja0VuY29k
aW5nVGFibGVJbnZhcmlhbnRzKCk7CiB9CiAKIHZvaWQgVGV4dENvZGVjQ0pLOjpyZWdpc3RlckVu
Y29kaW5nTmFtZXMoRW5jb2RpbmdOYW1lUmVnaXN0cmFyIHJlZ2lzdHJhcikKQEAgLTEyNCwxNiAr
MTI2LDE2IEBAIHZvaWQgVGV4dENvZGVjQ0pLOjpyZWdpc3RlckNvZGVjcyhUZXh0Q29kZWNSZWdp
c3RyYXIgcmVnaXN0cmFyKQogdXNpbmcgSklTMDIwOERlY29kZUluZGV4ID0gc3RkOjphcnJheTxz
dGQ6OnBhaXI8dWludDE2X3QsIFVDaGFyPiwgc3RkOjpzaXplKGppczAyMDgpPjsKIHN0YXRpYyBj
b25zdCBKSVMwMjA4RGVjb2RlSW5kZXgmIGppczAyMDhEZWNvZGVJbmRleCgpCiB7Ci0gICAgc3Rh
dGljIGF1dG8mIHRhYmxlID0gKltdIHsKLSAgICAgICAgYXV0byogdGFibGUgPSBuZXcgSklTMDIw
OERlY29kZUluZGV4OworICAgIHN0YXRpYyBKSVMwMjA4RGVjb2RlSW5kZXgqIHRhYmxlOworICAg
IHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlOworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2UsIFsm
XSB7CisgICAgICAgIHRhYmxlID0gbmV3IEpJUzAyMDhEZWNvZGVJbmRleDsKICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBzdGQ6OnNpemUoamlzMDIwOCk7IGkrKykKICAgICAgICAgICAg
ICgqdGFibGUpW2ldID0geyBqaXMwMjA4W2ldLnNlY29uZCwgamlzMDIwOFtpXS5maXJzdCB9Owot
ICAgICAgICBzdGQ6OnNvcnQodGFibGUtPmJlZ2luKCksIHRhYmxlLT5lbmQoKSwgW10gKGF1dG8m
IGEsIGF1dG8mIGIpIHsKLSAgICAgICAgICAgIHJldHVybiBhLmZpcnN0IDwgYi5maXJzdDsKLSAg
ICAgICAgfSk7Ci0gICAgICAgIHJldHVybiB0YWJsZTsKLSAgICB9KCk7Ci0gICAgcmV0dXJuIHRh
YmxlOworICAgICAgICBzb3J0QnlGaXJzdCgqdGFibGUpOworICAgICAgICBBU1NFUlQoc29ydGVk
Rmlyc3RzQXJlVW5pcXVlKCp0YWJsZSkpOworICAgIH0pOworICAgIHJldHVybiAqdGFibGU7CiB9
CiAKIFN0cmluZyBUZXh0Q29kZWNDSks6OmRlY29kZUNvbW1vbihjb25zdCB1aW50OF90KiBieXRl
cywgc2l6ZV90IGxlbmd0aCwgYm9vbCBmbHVzaCwgYm9vbCBzdG9wT25FcnJvciwgYm9vbCYgc2F3
RXJyb3IsIGNvbnN0IEZ1bmN0aW9uPFNhd0Vycm9yKHVpbnQ4X3QsIFN0cmluZ0J1aWxkZXImKT4m
IGJ5dGVQYXJzZXIpCkBAIC0xNzksMjcgKzE4MSwxMiBAQCBTdHJpbmcgVGV4dENvZGVjQ0pLOjpk
ZWNvZGVDb21tb24oY29uc3QgdWludDhfdCogYnl0ZXMsIHNpemVfdCBsZW5ndGgsIGJvb2wgZmx1
cwogCiBzdGF0aWMgT3B0aW9uYWw8VUNoYXI+IGNvZGVQb2ludEpJUzAyMDgodWludDE2X3QgcG9p
bnRlcikKIHsKLSAgICBhdXRvJiBpbmRleCA9IGppczAyMDhEZWNvZGVJbmRleCgpOwotICAgIGF1
dG8gcmFuZ2UgPSBzdGQ6OmVxdWFsX3JhbmdlKGluZGV4LmJlZ2luKCksIGluZGV4LmVuZCgpLCBz
dGQ6OnBhaXI8dWludDE2X3QsIFVDaGFyPihwb2ludGVyLCAwKSwgW10oY29uc3QgYXV0byYgYSwg
Y29uc3QgYXV0byYgYikgewotICAgICAgICByZXR1cm4gYS5maXJzdCA8IGIuZmlyc3Q7Ci0gICAg
fSk7Ci0gICAgaWYgKHJhbmdlLmZpcnN0ICE9IHJhbmdlLnNlY29uZCkgewotICAgICAgICBBU1NF
UlQocmFuZ2UuZmlyc3QgKyAxID09IHJhbmdlLnNlY29uZCk7Ci0gICAgICAgIHJldHVybiByYW5n
ZS5maXJzdC0+c2Vjb25kOwotICAgIH0KLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJl
dHVybiBmaW5kRmlyc3RJblNvcnRlZFBhaXJzKGppczAyMDhEZWNvZGVJbmRleCgpLCBwb2ludGVy
KTsKIH0KIAogc3RhdGljIE9wdGlvbmFsPFVDaGFyPiBjb2RlUG9pbnRKSVMwMjEyKHVpbnQxNl90
IHBvaW50ZXIpCiB7Ci0gICAgYXV0byByYW5nZSA9IHN0ZDo6ZXF1YWxfcmFuZ2UoamlzMDIxMiwg
amlzMDIxMiArIHN0ZDo6c2l6ZShqaXMwMjEyKSwgc3RkOjpwYWlyPHVpbnQxNl90LCBVQ2hhcj4o
cG9pbnRlciwgMCksIFtdKGNvbnN0IGF1dG8mIGEsIGNvbnN0IGF1dG8mIGIpIHsKLSAgICAgICAg
cmV0dXJuIGEuZmlyc3QgPCBiLmZpcnN0OwotICAgIH0pOwotICAgIGlmIChyYW5nZS5maXJzdCAh
PSByYW5nZS5zZWNvbmQpIHsKLSAgICAgICAgQVNTRVJUKHJhbmdlLmZpcnN0ICsgMSA9PSByYW5n
ZS5zZWNvbmQpOwotICAgICAgICByZXR1cm4gcmFuZ2UuZmlyc3QtPnNlY29uZDsKLSAgICB9Ci0g
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gZmluZEZpcnN0SW5Tb3J0ZWRQYWly
cyhqaXMwMjEyLCBwb2ludGVyKTsKIH0KIAogLy8gaHR0cHM6Ly9lbmNvZGluZy5zcGVjLndoYXR3
Zy5vcmcvI2V1Yy1qcC1kZWNvZGVyCkBAIC0yMjgsNyArMjE1LDcgQEAgU3RyaW5nIFRleHRDb2Rl
Y0NKSzo6ZXVjSlBEZWNvZGUoY29uc3QgdWludDhfdCogYnl0ZXMsIHNpemVfdCBsZW5ndGgsIGJv
b2wgZmx1c2gKICAgICAgICAgICAgIHJldHVybiBTYXdFcnJvcjo6WWVzOwogICAgICAgICB9CiAg
ICAgICAgIGlmIChpc0FTQ0lJKGJ5dGUpKSB7Ci0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKHN0
YXRpY19jYXN0PExDaGFyPihieXRlKSk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHN0YXRp
Y19jYXN0PGNoYXI+KGJ5dGUpKTsKICAgICAgICAgICAgIHJldHVybiBTYXdFcnJvcjo6Tm87CiAg
ICAgICAgIH0KICAgICAgICAgaWYgKGJ5dGUgPT0gMHg4RSB8fCBieXRlID09IDB4OEYgfHwgKGJ5
dGUgPj0gMHhBMSAmJiBieXRlIDw9IDB4RkUpKSB7CkBAIC0yNDcsNDIgKzIzNCwzNCBAQCBzdGF0
aWMgVmVjdG9yPHVpbnQ4X3Q+IGV1Y0pQRW5jb2RlKFN0cmluZ1ZpZXcgc3RyaW5nLCBGdW5jdGlv
bjx2b2lkKFVDaGFyMzIsIFZlYwogCiAgICAgYXV0byBjaGFyYWN0ZXJzID0gc3RyaW5nLnVwY29u
dmVydGVkQ2hhcmFjdGVycygpOwogICAgIGZvciAoV1RGOjpDb2RlUG9pbnRJdGVyYXRvcjxVQ2hh
cj4gaXRlcmF0b3IoY2hhcmFjdGVycy5nZXQoKSwgY2hhcmFjdGVycy5nZXQoKSArIHN0cmluZy5s
ZW5ndGgoKSk7ICFpdGVyYXRvci5hdEVuZCgpOyArK2l0ZXJhdG9yKSB7Ci0gICAgICAgIGF1dG8g
YyA9ICppdGVyYXRvcjsKLSAgICAgICAgaWYgKGlzQVNDSUkoYykpIHsKLSAgICAgICAgICAgIHJl
c3VsdC5hcHBlbmQoYyk7CisgICAgICAgIGF1dG8gY29kZVBvaW50ID0gKml0ZXJhdG9yOworICAg
ICAgICBpZiAoaXNBU0NJSShjb2RlUG9pbnQpKSB7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5k
KGNvZGVQb2ludCk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBp
ZiAoYyA9PSAweDAwQTUpIHsKKyAgICAgICAgaWYgKGNvZGVQb2ludCA9PSAweDAwQTUpIHsKICAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMHg1Qyk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgfQotICAgICAgICBpZiAoYyA9PSAweDIwM0UpIHsKKyAgICAgICAgaWYgKGNvZGVQb2lu
dCA9PSAweDIwM0UpIHsKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMHg3RSk7CiAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBpZiAoYyA+PSAweEZGNjEgJiYgYyA8
PSAweEZGOUYpIHsKKyAgICAgICAgaWYgKGNvZGVQb2ludCA+PSAweEZGNjEgJiYgY29kZVBvaW50
IDw9IDB4RkY5RikgewogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgweDhFKTsKLSAgICAgICAg
ICAgIHJlc3VsdC5hcHBlbmQoYyAtIDB4RkY2MSArIDB4QTEpOworICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZChjb2RlUG9pbnQgLSAweEZGNjEgKyAweEExKTsKICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICB9Ci0gICAgICAgIGlmIChjID09IDB4MjIxMikKLSAgICAgICAgICAgIGMgPSAw
eEZGMEQ7CisgICAgICAgIGlmIChjb2RlUG9pbnQgPT0gMHgyMjEyKQorICAgICAgICAgICAgY29k
ZVBvaW50ID0gMHhGRjBEOwogCi0gICAgICAgIGlmIChzdGF0aWNfY2FzdDxVQ2hhcj4oYykgIT0g
YykgewotICAgICAgICAgICAgdW5lbmNvZGFibGVIYW5kbGVyKGMsIHJlc3VsdCk7Ci0gICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgYXV0byBwb2ludGVy
UmFuZ2UgPSBzdGQ6OmVxdWFsX3JhbmdlKHN0ZDo6YmVnaW4oamlzMDIwOCksIHN0ZDo6ZW5kKGpp
czAyMDgpLCBzdGQ6OnBhaXI8VUNoYXIsIHVpbnQxNl90PihzdGF0aWNfY2FzdDxVQ2hhcj4oYyks
IDApLCBbXShjb25zdCBhdXRvJiBhLCBjb25zdCBhdXRvJiBiKSB7Ci0gICAgICAgICAgICByZXR1
cm4gYS5maXJzdCA8IGIuZmlyc3Q7Ci0gICAgICAgIH0pOwotICAgICAgICBpZiAocG9pbnRlclJh
bmdlLmZpcnN0ID09IHBvaW50ZXJSYW5nZS5zZWNvbmQpIHsKLSAgICAgICAgICAgIHVuZW5jb2Rh
YmxlSGFuZGxlcihjLCByZXN1bHQpOworICAgICAgICBhdXRvIHBvaW50ZXIgPSBmaW5kRmlyc3RJ
blNvcnRlZFBhaXJzKGppczAyMDgsIGNvZGVQb2ludCk7CisgICAgICAgIGlmICghcG9pbnRlcikg
eworICAgICAgICAgICAgdW5lbmNvZGFibGVIYW5kbGVyKGNvZGVQb2ludCwgcmVzdWx0KTsKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIHVpbnQxNl90IHBvaW50ZXIg
PSAocG9pbnRlclJhbmdlLnNlY29uZCAtIDEpLT5zZWNvbmQ7Ci0gICAgICAgIHJlc3VsdC5hcHBl
bmQocG9pbnRlciAvIDk0ICsgMHhBMSk7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQocG9pbnRlciAl
IDk0ICsgMHhBMSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoKnBvaW50ZXIgLyA5NCArIDB4QTEp
OworICAgICAgICByZXN1bHQuYXBwZW5kKCpwb2ludGVyICUgOTQgKyAweEExKTsKICAgICB9CiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTUwNCwxMiArNDgzLDEyIEBAIHN0YXRpYyBWZWN0b3I8
dWludDhfdD4gaXNvMjAyMkpQRW5jb2RlKFN0cmluZ1ZpZXcgc3RyaW5nLCBGdW5jdGlvbjx2b2lk
KFVDaGFyMzIsCiAgICAgRnVuY3Rpb248dm9pZChVQ2hhcjMyKT4gcGFyc2VDb2RlUG9pbnQ7CiAg
ICAgcGFyc2VDb2RlUG9pbnQgPSBbJl0gKFVDaGFyMzIgY29kZVBvaW50KSB7CiAgICAgICAgIGlm
IChzdGF0ZSA9PSBTdGF0ZTo6QVNDSUkgJiYgaXNBU0NJSShjb2RlUG9pbnQpKSB7Ci0gICAgICAg
ICAgICByZXN1bHQuYXBwZW5kKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGNvZGVQb2ludCkpOworICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZChjb2RlUG9pbnQpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAgICAgICAgIGlmIChzdGF0ZSA9PSBTdGF0ZTo6Um9tYW4pIHsKICAgICAgICAg
ICAgIGlmIChpc0FTQ0lJKGNvZGVQb2ludCkgJiYgY29kZVBvaW50ICE9IDB4MDA1QyAmJiBjb2Rl
UG9pbnQgIT0weDAwN0UpIHsKLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHN0YXRpY19j
YXN0PHVpbnQ4X3Q+KGNvZGVQb2ludCkpOworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQo
Y29kZVBvaW50KTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBpZiAoY29kZVBvaW50ID09IDB4MDBBNSkgewpAQCAtNTQ1LDE5ICs1MjQsMTIgQEAg
c3RhdGljIFZlY3Rvcjx1aW50OF90PiBpc28yMDIySlBFbmNvZGUoU3RyaW5nVmlldyBzdHJpbmcs
IEZ1bmN0aW9uPHZvaWQoVUNoYXIzMiwKICAgICAgICAgICAgICAgICAweDMwQzEsIDB4MzBDNCwg
MHgzMEM2LCAweDMwQzgsIDB4MzBDQSwgMHgzMENCLCAweDMwQ0MsIDB4MzBDRCwgMHgzMENFLCAw
eDMwQ0YsIDB4MzBEMiwgMHgzMEQ1LCAweDMwRDgsIDB4MzBEQiwgMHgzMERFLCAweDMwREYsCiAg
ICAgICAgICAgICAgICAgMHgzMEUwLCAweDMwRTEsIDB4MzBFMiwgMHgzMEU0LCAweDMwRTYsIDB4
MzBFOCwgMHgzMEU5LCAweDMwRUEsIDB4MzBFQiwgMHgzMEVDLCAweDMwRUQsIDB4MzBFRiwgMHgz
MEYzLCAweDMwOUIsIDB4MzA5QwogICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIHN0YXRpY19h
c3NlcnQoc3RkOjpzaXplKGlzbzIwMjJKUEthdGFrYW5hKSA9PSAweEZGOUYgLSAweEZGNjEgKyAx
KTsKICAgICAgICAgICAgIGNvZGVQb2ludCA9IGlzbzIwMjJKUEthdGFrYW5hW2NvZGVQb2ludCAt
IDB4RkY2MV07CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGF1dG8gY29kZVVuaXQgPSBz
dGF0aWNfY2FzdDxVQ2hhcj4oY29kZVBvaW50KTsKLSAgICAgICAgaWYgKGNvZGVVbml0ICE9IGNv
ZGVQb2ludCkgewotICAgICAgICAgICAgc3RhdGVmdWxVbmVuY29kYWJsZUhhbmRsZXIoY29kZVBv
aW50LCByZXN1bHQpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICBhdXRvIHJhbmdlID0gc3RkOjplcXVhbF9yYW5nZShzdGQ6OmJlZ2luKGppczAyMDgp
LCBzdGQ6OmVuZChqaXMwMjA4KSwgc3RkOjpwYWlyPFVDaGFyLCB1aW50MTZfdD4oY29kZVVuaXQs
IDApLCBbXShjb25zdCBhdXRvJiBhLCBjb25zdCBhdXRvJiBiKSB7Ci0gICAgICAgICAgICByZXR1
cm4gYS5maXJzdCA8IGIuZmlyc3Q7Ci0gICAgICAgIH0pOwotICAgICAgICBpZiAocmFuZ2UuZmly
c3QgPT0gcmFuZ2Uuc2Vjb25kKSB7CisKKyAgICAgICAgYXV0byBwb2ludGVyID0gZmluZEZpcnN0
SW5Tb3J0ZWRQYWlycyhqaXMwMjA4LCBjb2RlUG9pbnQpOworICAgICAgICBpZiAoIXBvaW50ZXIp
IHsKICAgICAgICAgICAgIHN0YXRlZnVsVW5lbmNvZGFibGVIYW5kbGVyKGNvZGVQb2ludCwgcmVz
dWx0KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtNTY5LDkgKzU0MSw4IEBA
IHN0YXRpYyBWZWN0b3I8dWludDhfdD4gaXNvMjAyMkpQRW5jb2RlKFN0cmluZ1ZpZXcgc3RyaW5n
LCBGdW5jdGlvbjx2b2lkKFVDaGFyMzIsCiAgICAgICAgICAgICBwYXJzZUNvZGVQb2ludChjb2Rl
UG9pbnQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIHVpbnQxNl90
IHBvaW50ZXIgPSAocmFuZ2Uuc2Vjb25kIC0gMSktPnNlY29uZDsKLSAgICAgICAgcmVzdWx0LmFw
cGVuZChwb2ludGVyIC8gOTQgKyAweDIxKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZChwb2ludGVy
ICUgOTQgKyAweDIxKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgqcG9pbnRlciAvIDk0ICsgMHgy
MSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoKnBvaW50ZXIgJSA5NCArIDB4MjEpOwogICAgIH07
CiAgICAgCiAgICAgYXV0byBjaGFyYWN0ZXJzID0gc3RyaW5nLnVwY29udmVydGVkQ2hhcmFjdGVy
cygpOwpAQCAtNjUwLDIwICs2MjEsMTIgQEAgc3RhdGljIFZlY3Rvcjx1aW50OF90PiBzaGlmdEpJ
U0VuY29kZShTdHJpbmdWaWV3IHN0cmluZywgRnVuY3Rpb248dm9pZChVQ2hhcjMyLAogICAgICAg
ICBpZiAoY29kZVBvaW50ID09IDB4MjIxMikKICAgICAgICAgICAgIGNvZGVQb2ludCA9IDB4RkYw
RDsKICAgICAgICAgCi0gICAgICAgIGF1dG8gY29kZVVuaXQgPSBzdGF0aWNfY2FzdDxVQ2hhcj4o
Y29kZVBvaW50KTsKLSAgICAgICAgaWYgKGNvZGVVbml0ICE9IGNvZGVQb2ludCkgewotICAgICAg
ICAgICAgdW5lbmNvZGFibGVIYW5kbGVyKGNvZGVQb2ludCwgcmVzdWx0KTsKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBhdXRvIHJhbmdlID0gc3Rk
OjplcXVhbF9yYW5nZShzdGQ6OmJlZ2luKGppczAyMDgpLCBzdGQ6OmVuZChqaXMwMjA4KSwgc3Rk
OjpwYWlyPFVDaGFyLCB1aW50MTZfdD4oY29kZVVuaXQsIDApLCBbXShjb25zdCBhdXRvJiBhLCBj
b25zdCBhdXRvJiBiKSB7Ci0gICAgICAgICAgICByZXR1cm4gYS5maXJzdCA8IGIuZmlyc3Q7Ci0g
ICAgICAgIH0pOworICAgICAgICBhdXRvIHJhbmdlID0gZmluZEluU29ydGVkUGFpcnMoamlzMDIw
OCwgY29kZVBvaW50KTsKICAgICAgICAgaWYgKHJhbmdlLmZpcnN0ID09IHJhbmdlLnNlY29uZCkg
ewogICAgICAgICAgICAgdW5lbmNvZGFibGVIYW5kbGVyKGNvZGVQb2ludCwgcmVzdWx0KTsKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIEFTU0VS
VChyYW5nZS5maXJzdCArIDMgPj0gcmFuZ2Uuc2Vjb25kKTsKICAgICAgICAgZm9yIChhdXRvKiBw
YWlyID0gcmFuZ2Uuc2Vjb25kIC0gMTsgcGFpciA+PSByYW5nZS5maXJzdDsgcGFpci0tKSB7CiAg
ICAgICAgICAgICB1aW50MTZfdCBwb2ludGVyID0gcGFpci0+c2Vjb25kOwpAQCAtNjg0LDE2ICs2
NDcsMTYgQEAgc3RhdGljIFZlY3Rvcjx1aW50OF90PiBzaGlmdEpJU0VuY29kZShTdHJpbmdWaWV3
IHN0cmluZywgRnVuY3Rpb248dm9pZChVQ2hhcjMyLAogdXNpbmcgRVVDS1JFbmNvZGluZ0luZGV4
ID0gc3RkOjphcnJheTxzdGQ6OnBhaXI8VUNoYXIsIHVpbnQxNl90Piwgc3RkOjpzaXplKGV1Y0tS
RGVjb2RpbmdJbmRleCk+Owogc3RhdGljIGNvbnN0IEVVQ0tSRW5jb2RpbmdJbmRleCYgZXVjS1JF
bmNvZGluZ0luZGV4KCkKIHsKLSAgICBzdGF0aWMgYXV0byYgdGFibGUgPSAqW10gewotICAgICAg
ICBhdXRvIHRhYmxlID0gbmV3IEVVQ0tSRW5jb2RpbmdJbmRleDsKKyAgICBzdGF0aWMgRVVDS1JF
bmNvZGluZ0luZGV4KiB0YWJsZTsKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZTsKKyAg
ICBzdGQ6OmNhbGxfb25jZShvbmNlLCBbJl0geworICAgICAgICB0YWJsZSA9IG5ldyBFVUNLUkVu
Y29kaW5nSW5kZXg7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RkOjpzaXplKGV1
Y0tSRGVjb2RpbmdJbmRleCk7IGkrKykKICAgICAgICAgICAgICgqdGFibGUpW2ldID0geyBldWNL
UkRlY29kaW5nSW5kZXhbaV0uc2Vjb25kLCBldWNLUkRlY29kaW5nSW5kZXhbaV0uZmlyc3QgfTsK
LSAgICAgICAgc3RkOjpzb3J0KHRhYmxlLT5iZWdpbigpLCB0YWJsZS0+ZW5kKCksIFtdIChhdXRv
JiBhLCBhdXRvJiBiKSB7Ci0gICAgICAgICAgICByZXR1cm4gYS5maXJzdCA8IGIuZmlyc3Q7Ci0g
ICAgICAgIH0pOwotICAgICAgICByZXR1cm4gdGFibGU7Ci0gICAgfSgpOwotICAgIHJldHVybiB0
YWJsZTsKKyAgICAgICAgc29ydEJ5Rmlyc3QoKnRhYmxlKTsKKyAgICAgICAgQVNTRVJUKHNvcnRl
ZEZpcnN0c0FyZVVuaXF1ZSgqdGFibGUpKTsKKyAgICB9KTsKKyAgICByZXR1cm4gKnRhYmxlOwog
fQogCiAvLyBodHRwczovL2VuY29kaW5nLnNwZWMud2hhdHdnLm9yZy8jZXVjLWtyLWVuY29kZXIK
QEAgLTcwNiwyNiArNjY5LDE3IEBAIHN0YXRpYyBWZWN0b3I8dWludDhfdD4gZXVjS1JFbmNvZGUo
U3RyaW5nVmlldyBzdHJpbmcsIEZ1bmN0aW9uPHZvaWQoVUNoYXIzMiwgVmVjCiAgICAgZm9yIChX
VEY6OkNvZGVQb2ludEl0ZXJhdG9yPFVDaGFyPiBpdGVyYXRvcihjaGFyYWN0ZXJzLmdldCgpLCBj
aGFyYWN0ZXJzLmdldCgpICsgc3RyaW5nLmxlbmd0aCgpKTsgIWl0ZXJhdG9yLmF0RW5kKCk7ICsr
aXRlcmF0b3IpIHsKICAgICAgICAgYXV0byBjb2RlUG9pbnQgPSAqaXRlcmF0b3I7CiAgICAgICAg
IGlmIChpc0FTQ0lJKGNvZGVQb2ludCkpIHsKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoc3Rh
dGljX2Nhc3Q8dWludDhfdD4oY29kZVBvaW50KSk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5k
KGNvZGVQb2ludCk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICAK
LSAgICAgICAgYXV0byBjb2RlVW5pdCA9IHN0YXRpY19jYXN0PFVDaGFyPihjb2RlUG9pbnQpOwot
ICAgICAgICBpZiAoY29kZVVuaXQgIT0gY29kZVBvaW50KSB7CisgICAgICAgIGF1dG8gcG9pbnRl
ciA9IGZpbmRGaXJzdEluU29ydGVkUGFpcnMoZXVjS1JFbmNvZGluZ0luZGV4KCksIGNvZGVQb2lu
dCk7CisgICAgICAgIGlmICghcG9pbnRlcikgewogICAgICAgICAgICAgdW5lbmNvZGFibGVIYW5k
bGVyKGNvZGVQb2ludCwgcmVzdWx0KTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9
Ci0gICAgICAgIGF1dG8mIGluZGV4ID0gZXVjS1JFbmNvZGluZ0luZGV4KCk7Ci0gICAgICAgIGF1
dG8gcmFuZ2UgPSBzdGQ6OmVxdWFsX3JhbmdlKGluZGV4LmJlZ2luKCksIGluZGV4LmVuZCgpLCBz
dGQ6OnBhaXI8VUNoYXIsIHVpbnQxNl90Pihjb2RlUG9pbnQsIDApLCBbXShjb25zdCBhdXRvJiBh
LCBjb25zdCBhdXRvJiBiKSB7Ci0gICAgICAgICAgICByZXR1cm4gYS5maXJzdCA8IGIuZmlyc3Q7
Ci0gICAgICAgIH0pOwotICAgICAgICBpZiAocmFuZ2UuZmlyc3QgPT0gcmFuZ2Uuc2Vjb25kKSB7
Ci0gICAgICAgICAgICB1bmVuY29kYWJsZUhhbmRsZXIoY29kZVBvaW50LCByZXN1bHQpOwotICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgdWludDE2X3QgcG9pbnRlciA9
IHJhbmdlLmZpcnN0LT5zZWNvbmQ7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQocG9pbnRlciAvIDE5
MCArIDB4ODEpOwotICAgICAgICByZXN1bHQuYXBwZW5kKHBvaW50ZXIgJSAxOTAgKyAweDQxKTsK
KyAgICAgICAgcmVzdWx0LmFwcGVuZCgqcG9pbnRlciAvIDE5MCArIDB4ODEpOworICAgICAgICBy
ZXN1bHQuYXBwZW5kKCpwb2ludGVyICUgMTkwICsgMHg0MSk7CiAgICAgfQogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CkBAIC03MzYsMTIgKzY5MCw4IEBAIFN0cmluZyBUZXh0Q29kZWNDSks6OmV1Y0tS
RGVjb2RlKGNvbnN0IHVpbnQ4X3QqIGJ5dGVzLCBzaXplX3QgbGVuZ3RoLCBib29sIGZsdXNoCiAg
ICAgcmV0dXJuIGRlY29kZUNvbW1vbihieXRlcywgbGVuZ3RoLCBmbHVzaCwgc3RvcE9uRXJyb3Is
IHNhd0Vycm9yLCBbdGhpc10gKHVpbnQ4X3QgYnl0ZSwgU3RyaW5nQnVpbGRlciYgcmVzdWx0KSB7
CiAgICAgICAgIGlmICh1aW50OF90IGxlYWQgPSBzdGQ6OmV4Y2hhbmdlKG1fbGVhZCwgMHgwMCkp
IHsKICAgICAgICAgICAgIGlmIChieXRlID49IDB4NDEgJiYgYnl0ZSA8PSAweEZFKSB7Ci0gICAg
ICAgICAgICAgICAgdWludDE2X3QgcG9pbnRlciA9IChsZWFkIC0gMHg4MSkgKiAxOTAgKyBieXRl
IC0gMHg0MTsKLSAgICAgICAgICAgICAgICBhdXRvIHJhbmdlID0gc3RkOjplcXVhbF9yYW5nZShz
dGQ6OmJlZ2luKGV1Y0tSRGVjb2RpbmdJbmRleCksIHN0ZDo6ZW5kKGV1Y0tSRGVjb2RpbmdJbmRl
eCksIHN0ZDo6cGFpcjx1aW50MTZfdCwgVUNoYXI+KHBvaW50ZXIsIDApLCBbXSAoY29uc3QgYXV0
byYgYSwgY29uc3QgYXV0byYgYikgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gYS5maXJz
dCA8IGIuZmlyc3Q7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgaWYgKHJh
bmdlLmZpcnN0ICE9IHJhbmdlLnNlY29uZCkgewotICAgICAgICAgICAgICAgICAgICByZXN1bHQu
YXBwZW5kKHJhbmdlLmZpcnN0LT5zZWNvbmQpOworICAgICAgICAgICAgICAgIGlmIChhdXRvIGNv
ZGVQb2ludCA9IGZpbmRGaXJzdEluU29ydGVkUGFpcnMoZXVjS1JEZWNvZGluZ0luZGV4LCAobGVh
ZCAtIDB4ODEpICogMTkwICsgYnl0ZSAtIDB4NDEpKSB7CisgICAgICAgICAgICAgICAgICAgIHJl
c3VsdC5hcHBlbmQoKmNvZGVQb2ludCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTYXdF
cnJvcjo6Tm87CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtNzY5LDIzICs3
MTksMjAgQEAgc3RhdGljIFZlY3Rvcjx1aW50OF90PiBiaWc1RW5jb2RlKFN0cmluZ1ZpZXcgc3Ry
aW5nLCBGdW5jdGlvbjx2b2lkKFVDaGFyMzIsIFZlY3QKIAogICAgIGF1dG8gY2hhcmFjdGVycyA9
IHN0cmluZy51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKICAgICBmb3IgKFdURjo6Q29kZVBvaW50
SXRlcmF0b3I8VUNoYXI+IGl0ZXJhdG9yKGNoYXJhY3RlcnMuZ2V0KCksIGNoYXJhY3RlcnMuZ2V0
KCkgKyBzdHJpbmcubGVuZ3RoKCkpOyAhaXRlcmF0b3IuYXRFbmQoKTsgKytpdGVyYXRvcikgewot
ICAgICAgICBhdXRvIGMgPSAqaXRlcmF0b3I7Ci0gICAgICAgIGlmIChpc0FTQ0lJKGMpKSB7Ci0g
ICAgICAgICAgICByZXN1bHQuYXBwZW5kKGMpOworICAgICAgICBhdXRvIGNvZGVQb2ludCA9ICpp
dGVyYXRvcjsKKyAgICAgICAgaWYgKGlzQVNDSUkoY29kZVBvaW50KSkgeworICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZChjb2RlUG9pbnQpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IH0KIAotICAgICAgICBhdXRvIHBvaW50ZXJSYW5nZSA9IHN0ZDo6ZXF1YWxfcmFuZ2Uoc3RkOjpi
ZWdpbihiaWc1RW5jb2RpbmdNYXApLCBzdGQ6OmVuZChiaWc1RW5jb2RpbmdNYXApLCBzdGQ6OnBh
aXI8VUNoYXIzMiwgdWludDE2X3Q+KGMsIDApLCBbXShjb25zdCBhdXRvJiBhLCBjb25zdCBhdXRv
JiBiKSB7Ci0gICAgICAgICAgICByZXR1cm4gYS5maXJzdCA8IGIuZmlyc3Q7Ci0gICAgICAgIH0p
OwotICAgICAgICAKKyAgICAgICAgYXV0byBwb2ludGVyUmFuZ2UgPSBmaW5kSW5Tb3J0ZWRQYWly
cyhiaWc1RW5jb2RpbmdNYXAsIGNvZGVQb2ludCk7CiAgICAgICAgIGlmIChwb2ludGVyUmFuZ2Uu
Zmlyc3QgPT0gcG9pbnRlclJhbmdlLnNlY29uZCkgewotICAgICAgICAgICAgdW5lbmNvZGFibGVI
YW5kbGVyKGMsIHJlc3VsdCk7CisgICAgICAgICAgICB1bmVuY29kYWJsZUhhbmRsZXIoY29kZVBv
aW50LCByZXN1bHQpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAogICAgICAg
ICB1aW50MTZfdCBwb2ludGVyID0gMDsKLSAgICAgICAgaWYgKGMgPT0gMHgyNTUwIHx8IGMgPT0g
MHgyNTVFIHx8IGMgPT0gMHgyNTYxIHx8IGMgPT0gMHgyNTZBIHx8IGMgPT0gMHg1MzQxIHx8IGMg
PT0gMHg1MzQ1KQorICAgICAgICBpZiAoY29kZVBvaW50ID09IDB4MjU1MCB8fCBjb2RlUG9pbnQg
PT0gMHgyNTVFIHx8IGNvZGVQb2ludCA9PSAweDI1NjEgfHwgY29kZVBvaW50ID09IDB4MjU2QSB8
fCBjb2RlUG9pbnQgPT0gMHg1MzQxIHx8IGNvZGVQb2ludCA9PSAweDUzNDUpCiAgICAgICAgICAg
ICBwb2ludGVyID0gKHBvaW50ZXJSYW5nZS5zZWNvbmQgLSAxKS0+c2Vjb25kOwogICAgICAgICBl
bHNlCiAgICAgICAgICAgICBwb2ludGVyID0gcG9pbnRlclJhbmdlLmZpcnN0LT5zZWNvbmQ7CkBA
IC04NTQsMTggKzgwMSwxOCBAQCBGdW5jdGlvbjx2b2lkKFVDaGFyMzIsIFZlY3Rvcjx1aW50OF90
PiYpPiB1bmVuY29kYWJsZUhhbmRsZXIoVW5lbmNvZGFibGVIYW5kbGluZwogdXNpbmcgQmlnNURl
Y29kZUluZGV4ID0gc3RkOjphcnJheTxzdGQ6OnBhaXI8dWludDE2X3QsIFVDaGFyMzI+LCBzdGQ6
OnNpemUoYmlnNURlY29kaW5nRXh0cmFzKSArIHN0ZDo6c2l6ZShiaWc1RW5jb2RpbmdNYXApPjsK
IHN0YXRpYyBjb25zdCBCaWc1RGVjb2RlSW5kZXgmIGJpZzVEZWNvZGVJbmRleCgpCiB7Ci0gICAg
c3RhdGljIGF1dG8mIHRhYmxlID0gKltdIHsKLSAgICAgICAgYXV0byB0YWJsZSA9IG5ldyBCaWc1
RGVjb2RlSW5kZXg7CisgICAgc3RhdGljIEJpZzVEZWNvZGVJbmRleCogdGFibGU7CisgICAgc3Rh
dGljIHN0ZDo6b25jZV9mbGFnIG9uY2U7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZSwgWyZdIHsK
KyAgICAgICAgdGFibGUgPSBuZXcgQmlnNURlY29kZUluZGV4OwogICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHN0ZDo6c2l6ZShiaWc1RGVjb2RpbmdFeHRyYXMpOyBpKyspCiAgICAgICAg
ICAgICAoKnRhYmxlKVtpXSA9IGJpZzVEZWNvZGluZ0V4dHJhc1tpXTsKICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBzdGQ6OnNpemUoYmlnNUVuY29kaW5nTWFwKTsgaSsrKQogICAgICAg
ICAgICAgKCp0YWJsZSlbaSArIHN0ZDo6c2l6ZShiaWc1RGVjb2RpbmdFeHRyYXMpXSA9IHsgYmln
NUVuY29kaW5nTWFwW2ldLnNlY29uZCwgYmlnNUVuY29kaW5nTWFwW2ldLmZpcnN0IH07Ci0gICAg
ICAgIHN0ZDo6c29ydCh0YWJsZS0+YmVnaW4oKSwgdGFibGUtPmVuZCgpLCBbXSAoYXV0byYgYSwg
YXV0byYgYikgewotICAgICAgICAgICAgcmV0dXJuIGEuZmlyc3QgPCBiLmZpcnN0OwotICAgICAg
ICB9KTsKLSAgICAgICAgcmV0dXJuIHRhYmxlOwotICAgIH0oKTsKLSAgICByZXR1cm4gdGFibGU7
CisgICAgICAgIHNvcnRCeUZpcnN0KCp0YWJsZSk7CisgICAgICAgIEFTU0VSVChzb3J0ZWRGaXJz
dHNBcmVVbmlxdWUoKnRhYmxlKSk7CisgICAgfSk7CisgICAgcmV0dXJuICp0YWJsZTsKIH0KIAog
U3RyaW5nIFRleHRDb2RlY0NKSzo6YmlnNURlY29kZShjb25zdCB1aW50OF90KiBieXRlcywgc2l6
ZV90IGxlbmd0aCwgYm9vbCBmbHVzaCwgYm9vbCBzdG9wT25FcnJvciwgYm9vbCYgc2F3RXJyb3Ip
CkBAIC04ODgsMTQgKzgzNSw5IEBAIFN0cmluZyBUZXh0Q29kZWNDSks6OmJpZzVEZWNvZGUoY29u
c3QgdWludDhfdCogYnl0ZXMsIHNpemVfdCBsZW5ndGgsIGJvb2wgZmx1c2gsCiAgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmRDaGFyYWN0ZXIoMHgwMEVBKTsKICAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZENoYXJhY3RlcigweDAzMEMpOwogICAgICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8mIGluZGV4ID0gYmlnNURlY29kZUluZGV4
KCk7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gcmFuZ2UgPSBzdGQ6OmVxdWFsX3JhbmdlKGlu
ZGV4LmJlZ2luKCksIGluZGV4LmVuZCgpLCBzdGQ6OnBhaXI8dWludDE2X3QsIFVDaGFyMzI+KHBv
aW50ZXIsIDApLCBbXShjb25zdCBhdXRvJiBhLCBjb25zdCBhdXRvJiBiKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gYS5maXJzdCA8IGIuZmlyc3Q7Ci0gICAgICAgICAgICAgICAg
ICAgIH0pOwotICAgICAgICAgICAgICAgICAgICBpZiAocmFuZ2UuZmlyc3QgIT0gcmFuZ2Uuc2Vj
b25kKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQocmFuZ2UuZmlyc3QgKyAxID09
IHJhbmdlLnNlY29uZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kQ2hh
cmFjdGVyKHJhbmdlLmZpcnN0LT5zZWNvbmQpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG8gY29kZVBvaW50ID0gZmluZEZpcnN0SW5Tb3J0
ZWRQYWlycyhiaWc1RGVjb2RlSW5kZXgoKSwgcG9pbnRlcikpCisgICAgICAgICAgICAgICAgICAg
ICAgICByZXN1bHQuYXBwZW5kQ2hhcmFjdGVyKCpjb2RlUG9pbnQpOworICAgICAgICAgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU2F3RXJyb3I6OlllczsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcmV0dXJuIFNhd0Vycm9yOjpObzsK
QEAgLTkwNSw3ICs4NDcsNyBAQCBTdHJpbmcgVGV4dENvZGVjQ0pLOjpiaWc1RGVjb2RlKGNvbnN0
IHVpbnQ4X3QqIGJ5dGVzLCBzaXplX3QgbGVuZ3RoLCBib29sIGZsdXNoLAogICAgICAgICAgICAg
cmV0dXJuIFNhd0Vycm9yOjpZZXM7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGlzQVNDSUkoYnl0
ZSkpIHsKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoc3RhdGljX2Nhc3Q8TENoYXI+KGJ5dGUp
KTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoc3RhdGljX2Nhc3Q8Y2hhcj4oYnl0ZSkpOwog
ICAgICAgICAgICAgcmV0dXJuIFNhd0Vycm9yOjpObzsKICAgICAgICAgfQogICAgICAgICBpZiAo
Ynl0ZSA+PSAweDgxICYmIGJ5dGUgPD0gMHhGRSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNTaW5nbGVCeXRlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvVGV4dENvZGVjU2luZ2xlQnl0ZS5jcHAKaW5kZXggYTBiMTU3OWIxODdm
ZDI2NTI3MTNkNjYwMTJmOTc0N2M2NTg0ZDE3Ny4uODA3NjE3MDQ3NmFiZjIyMTQyZTNmMjljMzJk
OWM3MGIzMTY5OTljMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9U
ZXh0Q29kZWNTaW5nbGVCeXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L1RleHRDb2RlY1NpbmdsZUJ5dGUuY3BwCkBAIC0yNiw2ICsyNiw5IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiVGV4dENvZGVjU2luZ2xlQnl0ZS5oIgogCisjaW5jbHVkZSAiRW5j
b2RpbmdUYWJsZXMuaCIKKyNpbmNsdWRlIDxtdXRleD4KKyNpbmNsdWRlIDx3dGYvSXRlcmF0b3JS
YW5nZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NvZGVQb2ludEl0ZXJhdG9yLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogI2luY2x1ZGUgPHd0Zi91bmljb2RlL0NoYXJh
Y3Rlck5hbWVzLmg+CkBAIC00Niw3ICs0OSw4IEBAIGVudW0gY2xhc3MgVGV4dENvZGVjU2luZ2xl
Qnl0ZTo6RW5jb2RpbmcgOiB1aW50OF90IHsKIH07CiAKIHVzaW5nIFNpbmdsZUJ5dGVEZWNvZGVU
YWJsZSA9IHN0ZDo6YXJyYXk8VUNoYXIsIDEyOD47Ci11c2luZyBTaW5nbGVCeXRlRW5jb2RlVGFi
bGUgPSBzdGQ6OnBhaXI8Y29uc3Qgc3RkOjpwYWlyPFVDaGFyLCB1aW50OF90PiosIHNpemVfdD47
Cit1c2luZyBTaW5nbGVCeXRlRW5jb2RlVGFibGVFbnRyeSA9IHN0ZDo6cGFpcjxVQ2hhciwgdWlu
dDhfdD47Cit1c2luZyBTaW5nbGVCeXRlRW5jb2RlVGFibGUgPSBXVEY6Okl0ZXJhdG9yUmFuZ2U8
Y29uc3QgU2luZ2xlQnl0ZUVuY29kZVRhYmxlRW50cnkqPjsKIAogLy8gRnJvbSBodHRwczovL2Vu
Y29kaW5nLnNwZWMud2hhdHdnLm9yZy9pbmRleC1pc28tODg1OS0zLnR4dCB3aXRoIDB4RkZGRCBm
aWxsaW5nIHRoZSBnYXBzCiBzdGF0aWMgY29uc3RleHByIFNpbmdsZUJ5dGVEZWNvZGVUYWJsZSBp
c284ODU5MyB7CkBAIC0xNzAsMTcgKzE3NCwyMyBAQCBzdGF0aWMgY29uc3RleHByIFNpbmdsZUJ5
dGVEZWNvZGVUYWJsZSBpYm04NjYgewogdGVtcGxhdGU8Y29uc3QgU2luZ2xlQnl0ZURlY29kZVRh
YmxlJiBkZWNvZGVUYWJsZT4gU2luZ2xlQnl0ZUVuY29kZVRhYmxlIHRhYmxlRm9yRW5jb2Rpbmco
KQogewogICAgIC8vIEZJWE1FOiBXaXRoIHRoZSBDKysyMCB2ZXJzaW9uIG9mIHN0ZDo6Y291bnQs
IHdlIHNob3VsZCBiZSBhYmxlIHRvIGNoYW5nZSB0aGlzIGZyb20gY29uc3QgdG8gY29uc3RleHBy
IGFuZCBnZXQgaXQgY29tcHV0ZWQgYXQgY29tcGlsZSB0aW1lLgotICAgIHN0YXRpYyBjb25zdCBz
aXplX3Qgc2l6ZSA9IHN0ZDo6c2l6ZShkZWNvZGVUYWJsZSkgLSBzdGQ6OmNvdW50KHN0ZDo6YmVn
aW4oZGVjb2RlVGFibGUpLCBzdGQ6OmVuZChkZWNvZGVUYWJsZSksIHJlcGxhY2VtZW50Q2hhcmFj
dGVyKTsKLSAgICBzdGF0aWMgY29uc3QgYXV0byB0YWJsZSA9IFsmXSB7Ci0gICAgICAgIGF1dG8g
dGFibGUgPSBuZXcgc3RkOjpwYWlyPFVDaGFyLCB1aW50OF90PltzaXplXTsKKyAgICBzdGF0aWMg
Y29uc3QgYXV0byBzaXplID0gc3RkOjpzaXplKGRlY29kZVRhYmxlKSAtIHN0ZDo6Y291bnQoc3Rk
OjpiZWdpbihkZWNvZGVUYWJsZSksIHN0ZDo6ZW5kKGRlY29kZVRhYmxlKSwgcmVwbGFjZW1lbnRD
aGFyYWN0ZXIpOworICAgIHN0YXRpYyBjb25zdCBTaW5nbGVCeXRlRW5jb2RlVGFibGVFbnRyeSog
ZW50cmllczsKKyAgICBzdGQ6Om9uY2VfZmxhZyBvbmNlOworICAgIHN0ZDo6Y2FsbF9vbmNlKG9u
Y2UsIFsmXSB7CisgICAgICAgIGF1dG8qIG11dGFibGVFbnRyaWVzID0gbmV3IFNpbmdsZUJ5dGVF
bmNvZGVUYWJsZUVudHJ5W3NpemVdOwogICAgICAgICBzaXplX3QgaiA9IDA7CiAgICAgICAgIGZv
ciAodWludDhfdCBpID0gMDsgaSA8IHN0ZDo6c2l6ZShkZWNvZGVUYWJsZSk7IGkrKykgewogICAg
ICAgICAgICAgaWYgKGRlY29kZVRhYmxlW2ldICE9IHJlcGxhY2VtZW50Q2hhcmFjdGVyKQotICAg
ICAgICAgICAgICAgIHRhYmxlW2orK10gPSB7IGRlY29kZVRhYmxlW2ldLCBpIH07CisgICAgICAg
ICAgICAgICAgbXV0YWJsZUVudHJpZXNbaisrXSA9IHsgZGVjb2RlVGFibGVbaV0sIGkgKyAweDgw
IH07CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRhYmxlOwotICAgIH0oKTsKLSAgICByZXR1
cm4geyB0YWJsZSwgc2l6ZSB9OworICAgICAgICBBU1NFUlQoaiA9PSBzaXplKTsKKyAgICAgICAg
YXV0byBjb2xsZWN0aW9uID0gV1RGOjptYWtlSXRlcmF0b3JSYW5nZShtdXRhYmxlRW50cmllcyAr
IDAsIG11dGFibGVFbnRyaWVzICsgc2l6ZSk7CisgICAgICAgIHNvcnRCeUZpcnN0KGNvbGxlY3Rp
b24pOworICAgICAgICBBU1NFUlQoc29ydGVkRmlyc3RzQXJlVW5pcXVlKGNvbGxlY3Rpb24pKTsK
KyAgICAgICAgZW50cmllcyA9IG11dGFibGVFbnRyaWVzOworICAgIH0pOworICAgIHJldHVybiBX
VEY6Om1ha2VJdGVyYXRvclJhbmdlKGVudHJpZXMgKyAwLCBlbnRyaWVzICsgc2l6ZSk7CiB9CiAK
IHN0YXRpYyBTaW5nbGVCeXRlRW5jb2RlVGFibGUgdGFibGVGb3JFbmNvZGluZyhUZXh0Q29kZWNT
aW5nbGVCeXRlOjpFbmNvZGluZyBlbmNvZGluZykKQEAgLTI0MCwzMSArMjUwLDIwIEBAIHN0YXRp
YyBjb25zdGV4cHIgY29uc3QgU2luZ2xlQnl0ZURlY29kZVRhYmxlJiB0YWJsZUZvckRlY29kaW5n
KFRleHRDb2RlY1NpbmdsZUJ5CiAvLyBodHRwczovL2VuY29kaW5nLnNwZWMud2hhdHdnLm9yZy8j
c2luZ2xlLWJ5dGUtZW5jb2Rlcgogc3RhdGljIFZlY3Rvcjx1aW50OF90PiBlbmNvZGUoY29uc3Qg
U2luZ2xlQnl0ZUVuY29kZVRhYmxlJiB0YWJsZSwgU3RyaW5nVmlldyBzdHJpbmcsIEZ1bmN0aW9u
PHZvaWQoVUNoYXIzMiwgVmVjdG9yPHVpbnQ4X3Q+Jik+JiYgdW5lbmNvZGFibGVIYW5kbGVyKQog
eworICAgIC8vIEZJWE1FOiBDb25zaWRlciBhZGRpbmcgYW4gQVNDSUkgZmFzdCBwYXRoIGxpa2Ug
dGhlIG9uZSBpbiBUZXh0Q29kZWNMYXRpbjE6OmRlY29kZS4KICAgICBWZWN0b3I8dWludDhfdD4g
cmVzdWx0OwogICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHN0cmluZy5sZW5ndGgo
KSk7Ci0KLSAgICBhdXRvIGNoYXJhY3RlcnMgPSBzdHJpbmcudXBjb252ZXJ0ZWRDaGFyYWN0ZXJz
KCk7Ci0gICAgZm9yIChXVEY6OkNvZGVQb2ludEl0ZXJhdG9yPFVDaGFyPiBpdGVyYXRvcihjaGFy
YWN0ZXJzLmdldCgpLCBjaGFyYWN0ZXJzLmdldCgpICsgc3RyaW5nLmxlbmd0aCgpKTsgIWl0ZXJh
dG9yLmF0RW5kKCk7ICsraXRlcmF0b3IpIHsKLSAgICAgICAgYXV0byBjb2RlUG9pbnQgPSAqaXRl
cmF0b3I7CisgICAgZm9yIChhdXRvIGNvZGVQb2ludCA6IHN0cmluZy5jb2RlUG9pbnRzKCkpIHsK
ICAgICAgICAgaWYgKGlzQVNDSUkoY29kZVBvaW50KSkgewogICAgICAgICAgICAgcmVzdWx0LmFw
cGVuZChjb2RlUG9pbnQpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLQotICAg
ICAgICBhdXRvIGNvZGVVbml0ID0gc3RhdGljX2Nhc3Q8VUNoYXI+KGNvZGVQb2ludCk7Ci0gICAg
ICAgIGlmIChjb2RlVW5pdCAhPSBjb2RlUG9pbnQpIHsKLSAgICAgICAgICAgIHVuZW5jb2RhYmxl
SGFuZGxlcihjb2RlUG9pbnQsIHJlc3VsdCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgYXV0byByYW5nZSA9IHN0ZDo6ZXF1YWxfcmFuZ2UodGFi
bGUuZmlyc3QsIHRhYmxlLmZpcnN0ICsgdGFibGUuc2Vjb25kLCBzdGQ6OnBhaXI8VUNoYXIsIHVp
bnQ4X3Q+KGNvZGVVbml0LCAwKSwgW10oY29uc3QgYXV0byYgYSwgY29uc3QgYXV0byYgYikgewot
ICAgICAgICAgICAgcmV0dXJuIGEuZmlyc3QgPCBiLmZpcnN0OwotICAgICAgICB9KTsKLSAgICAg
ICAgaWYgKHJhbmdlLmZpcnN0ID09IHJhbmdlLnNlY29uZCkgeworICAgICAgICBhdXRvIGJ5dGUg
PSBmaW5kRmlyc3RJblNvcnRlZFBhaXJzKHRhYmxlLCBjb2RlUG9pbnQpOworICAgICAgICBpZiAo
IWJ5dGUpIHsKICAgICAgICAgICAgIHVuZW5jb2RhYmxlSGFuZGxlcihjb2RlUG9pbnQsIHJlc3Vs
dCk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICByZXN1bHQuYXBw
ZW5kKHJhbmdlLmZpcnN0LT5zZWNvbmQgKyAweDgwKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgq
Ynl0ZSk7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC0yODQsNyArMjgzLDYgQEAg
c3RhdGljIFN0cmluZyBkZWNvZGUoY29uc3QgU2luZ2xlQnl0ZURlY29kZVRhYmxlJiB0YWJsZSwg
Y29uc3QgdWludDhfdCogYnl0ZXMsIHMKICAgICAgICAgICAgIHNhd0Vycm9yID0gdHJ1ZTsKICAg
ICAgICAgcmVzdWx0LmFwcGVuZChjb2RlUG9pbnQpOwogICAgIH07Ci0KICAgICBpZiAoc3RvcE9u
RXJyb3IpIHsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewog
ICAgICAgICAgICAgcGFyc2VCeXRlKGJ5dGVzW2ldKTsKQEAgLTI5NSw3ICsyOTMsNiBAQCBzdGF0
aWMgU3RyaW5nIGRlY29kZShjb25zdCBTaW5nbGVCeXRlRGVjb2RlVGFibGUmIHRhYmxlLCBjb25z
dCB1aW50OF90KiBieXRlcywgcwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0
aDsgaSsrKQogICAgICAgICAgICAgcGFyc2VCeXRlKGJ5dGVzW2ldKTsKICAgICB9Ci0KICAgICBy
ZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408134</attachid>
            <date>2020-09-06 14:31:38 -0700</date>
            <delta_ts>2020-09-06 17:56:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216229-20200906143137.patch</filename>
            <type>text/plain</type>
            <size>30924</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2NjgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzY2NDFhNTYzMjViZTYx
YWNkZTIxYmI4NzA1MmZmNTFjZjA0NjZjNC4uMzdkNzJhNTIxOTUwYTY4MzBkMmMxZTBiZDMyMGQ2
ZTUzN2E3OWUyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcxIEBACisyMDIwLTA5LTA2ICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIFRleHRDb2RlY0NKSyBh
bmQgVGV4dENvZGVjU2luZ2xlQnl0ZSB0aHJlYWQtc2FmZSBhbmQgcmVmYWN0b3IgYSBiaXQgdG8g
c2hhcmUgY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjE2MjI5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGhlIHRleHQgZW5jb2RpbmcgbWFjaGluZXJ5IGlzIHVzYWJsZSBvbiBtdWx0aXBsZSB0aHJl
YWRzLCBidXQgb3VyIG5ldyBUZXh0Q29kZWMKKyAgICAgICAgY2xhc3NlcyBoYXZlIHNvbWUgZ2xv
YmFsIGRhdGEgc3RydWN0dXJlcyB0aGF0IG5lZWQgdG8gYmUgZ3VhcmRlZCB0byBrZWVwIHRoYXQg
aW50YWN0LgorCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9FbmNvZGluZ1RhYmxlcy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpjaGVja0VuY29kaW5nVGFibGVJbnZhcmlhbnRzKTogT25lLXRpbWUg
Y2hlY2sgZm9yIGludmFyaWFudHMgdGhhdCBjbGllbnRzCisgICAgICAgIG9mIHRoZXNlIHRhYmxl
cyBkZXBlbmQgb24uCisKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L0VuY29kaW5nVGFibGVzLmg6
IEFkZGVkIGNoZWNrRW5jb2RpbmdUYWJsZUludmFyaWFudHMuIEFsc28gQWRkZWQKKyAgICAgICAg
ZnVuY3Rpb24gdGVtcGxhdGVzIGZvciBlbmNvZGluZyB0YWJsZXM6IEFkZGVkIGZpbmRGaXJzdElu
U29ydGVkUGFpcnMgYW5kCisgICAgICAgIGZpbmRJblNvcnRlZFBhaXJzIGZvciBzZWFyY2hpbmcg
YSBzb3J0ZWQgYXJyYXkgb2YgcGFpcnMgdXNlZCBhcyBhIG1hcC4gQWRkZWQKKyAgICAgICAgc29y
dEJ5Rmlyc3QgdG8gYWlkIGluIHRoZSBjcmVhdGlvbiBvZiBzdWNoIGEgc29ydGVkIGFycmF5LiBB
bmQgYWRkZWQgaXNTb3J0ZWRCeUZpcnN0CisgICAgICAgIGFuZCBzb3J0ZWRGaXJzdHNBcmVVbmlx
dWUgc28gd2UgY2FuIGFzc2VydCB0aG9zZSBpbnZhcmlhbnRzLiBPbmUgb2YgdGhlIGdvb2QKKyAg
ICAgICAgZmVhdHVyZXMgb2YgdGhlIGZpbmRJblNvcnRlZFBhaXJzIGZ1bmN0aW9ucyBpcyB0aGF0
IHRoZXkgaGFuZGxlcyBpbnRlZ2VyIHZhbHVlcyB0aGF0CisgICAgICAgIGRvbid0IGZpdCBpbiBh
biBpbnRlZ3JhbCBrZXkgdHlwZSwgcmV0dXJuaW5nIFdURjo6bnVsbG9wdCBpbiB0aGF0IGNhc2Uu
IFRoYXQgbGV0cyB1cworICAgICAgICBwYXNzIGNvZGUgcG9pbnQgdmFsdWVzIHdoZW4gbG9va2lu
ZyBpbiB0YWJsZXMgdGhhdCB1c2UgY29kZSB1bml0cyBhcyB0aGVpciBrZXksIHdpdGhvdXQKKyAg
ICAgICAgc2VwYXJhdGVseSBjaGVja2luZyBpZiB0aGV5IGFyZSBpbiByYW5nZSwgd2hpY2ggb3Ro
ZXJ3aXNlIHJlcXVpcmVzIGNvbnZlcnRpbmcgdG8gVUNoYXIKKyAgICAgICAgYW5kIGNoZWNraW5n
IGZvciBlcXVhbGl0eSBvciBjYWxsaW5nIFVfSVNfQk1QLgorCisgICAgICAgICogcGxhdGZvcm0v
dGV4dC9UZXh0Q29kZWNDSksuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjQ0pLOjpU
ZXh0Q29kZWNDSkspOiBDYWxsIGNoZWNrRW5jb2RpbmdUYWJsZUludmFyaWFudHMuCisgICAgICAg
IChXZWJDb3JlOjpUZXh0Q29kZWNDSks6OmVuY29kZSBjb25zdCk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6amlzMDIwOERlY29kZUluZGV4KTogVXNlIHN0ZDo6Y2FsbF9vbmNlIGZvciB0aHJl
YWQgc2FmZXR5LgorICAgICAgICBVc2Ugc29ydEJ5Rmlyc3QgYW5kIHNvcnRlZEZpcnN0c0FyZVVu
aXF1ZS4KKyAgICAgICAgKFdlYkNvcmU6OmNvZGVQb2ludEpJUzAyMDgpOiBVc2UgZmluZEZpcnN0
SW5Tb3J0ZWRQYWlycy4KKyAgICAgICAgKFdlYkNvcmU6OmNvZGVQb2ludEpJUzAyMTIpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY0NKSzo6ZXVjSlBEZWNvZGUpOiBDYXN0IHRv
IGNoYXIgaW5zdGFkIG9mIExDaGFyIHdoZW4gYWRkaW5nCisgICAgICAgIGFuIEFTQ0lJIGNoYXJh
Y3RlciB0byBhIFN0cmluZ0J1aWxkZXIuCisgICAgICAgIChXZWJDb3JlOjpldWNKUEVuY29kZSk6
IFVzZSB0aGUgbmFtZSBjb2RlUG9pbnQgaW5zdGVhZCBvZiBjIHRvIG1hdGNoIG90aGVyCisgICAg
ICAgIHN1cnJvdW5kaW5nIGNvZGUuIFVzZSBmaW5kRmlyc3RJblNvcnRlZFBhaXJzLgorICAgICAg
ICAoV2ViQ29yZTo6aXNvMjAyMkpQRW5jb2RlKTogUmVtb3ZlZCBzb21lIHVubmVlZGVkIGNhc3Rz
IHRvIHVpbnQ4X3Qgd2hlbiBhcHBlbmRpbmcKKyAgICAgICAgYnl0ZXMgdG8gYSBWZWN0b3IuIEFk
ZGVkIGEgc3RhdGljX2Fzc2VydCB0byBjaGVjayB0aGUgc2l6ZSBvZiBpc28yMDIySlBLYXRha2Fu
YS4KKyAgICAgICAgVXNlIGZpbmRGaXJzdEluU29ydGVkUGFpcnMuCisgICAgICAgIChXZWJDb3Jl
OjpzaGlmdEpJU0VuY29kZSk6IFVzZSBmaW5kSW5Tb3J0ZWRQYWlycy4KKyAgICAgICAgKFdlYkNv
cmU6OmV1Y0tSRW5jb2RpbmdJbmRleCk6IFVzZSBzdGQ6OmNhbGxfb25jZSBmb3IgdGhyZWFkIHNh
ZmV0eS4KKyAgICAgICAgVXNlIHNvcnRCeUZpcnN0IGFuZCBzb3J0ZWRGaXJzdHNBcmVVbmlxdWUu
CisgICAgICAgIChXZWJDb3JlOjpldWNLUkVuY29kZSk6IFJlbW92ZWQgc29tZSB1bm5lZWRlZCBj
YXN0cyB0byB1aW50OF90IHdoZW4gYXBwZW5kaW5nCisgICAgICAgIGJ5dGVzIHRvIGEgVmVjdG9y
LiBVc2UgZmluZEZpcnN0SW5Tb3J0ZWRQYWlycy4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2Rl
Y0NKSzo6ZXVjS1JEZWNvZGUpOiBVc2UgZmluZEZpcnN0SW5Tb3J0ZWRQYWlycy4KKyAgICAgICAg
KFdlYkNvcmU6OmJpZzVFbmNvZGUpOiBVc2UgZmluZEluU29ydGVkUGFpcnMuIEFsc28gcmVuYW1l
ZCBjIHRvIGNvZGVQb2ludC4KKyAgICAgICAgKFdlYkNvcmU6OmJpZzVEZWNvZGVJbmRleCk6IFVz
ZSBzdGQ6OmNhbGxfb25jZSBmb3IgdGhyZWFkIHNhZmV0eS4KKyAgICAgICAgVXNlIHNvcnRCeUZp
cnN0IGFuZCBzb3J0ZWRGaXJzdHNBcmVVbmlxdWUuCisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29k
ZWNDSks6OmJpZzVEZWNvZGUpOiBVc2UgZmluZEZpcnN0SW5Tb3J0ZWRQYWlycy4gQ2FzdCB0byBj
aGFyCisgICAgICAgIGluc3RhZCBvZiBMQ2hhciB3aGVuIGFkZGluZyBhbiBBU0NJSSBjaGFyYWN0
ZXIgdG8gYSBTdHJpbmdCdWlsZGVyLgorCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0Q29k
ZWNTaW5nbGVCeXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRhYmxlRm9yRW5jb2RpbmcpOiBS
ZXR1cm4gYW4gSXRlcmF0b3JSYW5nZSBpbnN0ZWFkIG9mIGEgcGFpciBvZgorICAgICAgICBwb2lu
dGVyIGFuZCBzaXplLiBUaGlzIHdvcmtzIHdpdGggc3RkOjpiZWdpbi9lbmQuIEFsc28gbWFrZSB0
YWJsZSB3aXRoIGFjdHVhbAorICAgICAgICBlbmNvZGVkIGJ5dGVzLCBieSBhZGRpbmcgMHg4MCBo
ZXJlLCByYXRoZXIgdGhhbiBkb2luZyB0aGF0IHdoZW4gdXNpbmcgdGhlIHRhYmxlLgorICAgICAg
ICAoV2ViQ29yZTo6ZW5jb2RlKTogVXNlIHN0ZDo6Y2FsbF9vbmNlIGZvciB0aHJlYWQgc2FmZXR5
LgorICAgICAgICBVc2Ugc29ydEJ5Rmlyc3QgYW5kIHNvcnRlZEZpcnN0c0FyZVVuaXF1ZS4gVGhl
IGNvZGUgYmVmb3JlIHdhcyBub3Qgc29ydGluZyBhdAorICAgICAgICBhbGwsIHdoaWNoIG1lYW5z
IGl0IHByb2JhYmx5IGRpZG4ndCB3b3JrIGluIGFueSBjYXNlcyB3aGVyZSB0aGUgY29kZSB1bml0
cworICAgICAgICBoYXBwZW4gdG8gbm90IGJlIGluIGFzY2VuZGluZyBvcmRlci4gV2Ugc2hvdWxk
IGFkZCBzb21lIHRlc3QgY2FzZXMuCisgICAgICAgIChXZWJDb3JlOjpkZWNvZGUpOiBVc2UgZmlu
ZEZpcnN0SW5Tb3J0ZWRQYWlycy4gQWxzbyB1c2UgU3RyaW5nVmlldzo6Y29kZVBvaW50cworICAg
ICAgICBiZWNhdXNlIHRoZXNlIGFyZSBsaWtlbHkgdG8gYmUgOC1iaXQgc3RyaW5ncyBhbmQgd2Ug
ZG9uJ3QgbmVlZCB0byB0ZW1wb3JhcmlseQorICAgICAgICB1cGNvbnZlcnQgdGhlbSB0byAxNi1i
aXQganVzdCB0byBlbmNvZGUgdGhlbS4gU2hvdWxkIHByb2JhYmx5IGxhdGVyIG1lYXN1cmUgaWYK
KyAgICAgICAgdGhlIHVzZSBvZiBTdHJpbmdWaWV3Ojp1cGNvbnZlcnRlZENoYXJhY3RlcnMgcGx1
cyBDb2RlUG9pbnRJdGVyYXRvcjxVQ2hhcj4KKyAgICAgICAgaW5zdGVhZCBvZiBTdHJpbmdWaWV3
Ojpjb2RlUG9pbnRzIGlzIGJldHRlciBmb3IgcGVyZm9ybWFuY2UgaW4gdGhlIENKSyBlbmNvZGlu
ZworICAgICAgICBmdW5jdGlvbnMuIFRoaXMgYXBwcm9hY2ggbWVhbnMgbW9yZSBicmFuY2hpbmcg
aW5zaWRlIHRoZSBsb29wLCBidXQgdGhlIG90aGVyCisgICAgICAgIHZlcnNpb24gaW52b2x2ZXMg
bWVtb3J5IGFsbG9jYXRpb24gYW5kIGEgc2Vjb25kIGxvb3Agd2hlbiB0aGUgY2hhcmFjdGVycyBh
cmUKKyAgICAgICAgYWxsIDgtYml0LgorCiAyMDIwLTA5LTA2ICBEYXJpbiBBZGxlciAgPGRhcmlu
QGFwcGxlLmNvbT4KIAogICAgICAgICBUZXh0Q29kZWMgcmVmaW5lbWVudHMKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvRW5jb2RpbmdUYWJsZXMuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9FbmNvZGluZ1RhYmxlcy5jcHAKaW5kZXggNzJiMjJmOTVk
Y2I5OWMwYmE3MWZkY2MzZTY5Y2Q3OGQzMDk2MjU0Ni4uZWQyZjU0YzY1MmU5YzYxZTUyM2RiNGFl
MTQzNzUwZDYyMGVmZjdkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC9FbmNvZGluZ1RhYmxlcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9F
bmNvZGluZ1RhYmxlcy5jcHAKQEAgLTI2LDYgKzI2LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJFbmNvZGluZ1RhYmxlcy5oIgogCisjaW5jbHVkZSA8bXV0ZXg+CisKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogLy8gRklYTUU6IENvbXByZXNzIHRoZXNlIHRhYmxlcyBhbmQgZGVj
b21wcmVzcyB0aGVtIGlmIHRoZXkgYXJlIGFjdHVhbGx5IHVzZWQuIFRoaXMgd2lsbCBzaWduaWZp
Y2FudGx5IGRlY3JlYXNlIHRoZSBzaXplIG9mIFdlYkNvcmUncyBiaW5hcnkuCkBAIC02MjM2LDQg
KzYyMzgsMjQgQEAgY29uc3Qgc3RkOjpwYWlyPHVpbnQxNl90LCBVQ2hhcj4gZXVjS1JEZWNvZGlu
Z0luZGV4WzE3MDQ4XSB7CiAgICAgeyAyMzc0MiwgMHg3MTk5IH0sIHsgMjM3NDMsIDB4NzFCOSB9
LCB7IDIzNzQ0LCAweDcxQkEgfSwgeyAyMzc0NSwgMHg3MkE3IH0sIHsgMjM3NDYsIDB4NzlBNyB9
LCB7IDIzNzQ3LCAweDdBMDAgfSwgeyAyMzc0OCwgMHg3RkIyIH0sIHsgMjM3NDksIDB4OEE3MCB9
LAogfTsKIAorI2lmIEFTU0VSVF9FTkFCTEVECisKK3ZvaWQgY2hlY2tFbmNvZGluZ1RhYmxlSW52
YXJpYW50cygpCit7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2U7CisgICAgc3RkOjpj
YWxsX29uY2Uob25jZSwgW10geworICAgICAgICBBU1NFUlQoaXNTb3J0ZWRCeUZpcnN0KGppczAy
MDgpKTsKKworICAgICAgICBBU1NFUlQoaXNTb3J0ZWRCeUZpcnN0KGppczAyMTIpKTsKKyAgICAg
ICAgQVNTRVJUKHNvcnRlZEZpcnN0c0FyZVVuaXF1ZShqaXMwMjEyKSk7CisKKyAgICAgICAgQVNT
RVJUKGlzU29ydGVkQnlGaXJzdChiaWc1RW5jb2RpbmdNYXApKTsKKworICAgICAgICBBU1NFUlQo
aXNTb3J0ZWRCeUZpcnN0KGV1Y0tSRGVjb2RpbmdJbmRleCkpOworICAgICAgICBBU1NFUlQoc29y
dGVkRmlyc3RzQXJlVW5pcXVlKGV1Y0tSRGVjb2RpbmdJbmRleCkpOworICAgIH0pOworfQorCisj
ZW5kaWYKKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9FbmNv
ZGluZ1RhYmxlcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9FbmNvZGluZ1RhYmxl
cy5oCmluZGV4IGRmOTNjMWNiMGI2Y2Q0NzQ3MGJkNmNiODM4N2FmZTgxODk3NzAyZTQuLjAzOWE1
OTcyNWMxMDdiNzMwZmEzMzY5OTJjOTA1OTkxMjVjY2FiZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvRW5jb2RpbmdUYWJsZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L0VuY29kaW5nVGFibGVzLmgKQEAgLTI1LDcgKzI1LDExIEBACiAKICNw
cmFnbWEgb25jZQogCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGl0ZXJhdG9yPgog
I2luY2x1ZGUgPHVuaWNvZGUvdW1hY2hpbmUuaD4KKyNpbmNsdWRlIDx1dGlsaXR5PgorI2luY2x1
ZGUgPHd0Zi9PcHRpb25hbC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM1LDQgKzM5
LDY4IEBAIGV4dGVybiBjb25zdCBzdGQ6OnBhaXI8VUNoYXIzMiwgdWludDE2X3Q+IGJpZzVFbmNv
ZGluZ01hcFsxNDY4Nl07CiBleHRlcm4gY29uc3Qgc3RkOjpwYWlyPHVpbnQxNl90LCBVQ2hhcjMy
PiBiaWc1RGVjb2RpbmdFeHRyYXNbMzkwNF07CiBleHRlcm4gY29uc3Qgc3RkOjpwYWlyPHVpbnQx
Nl90LCBVQ2hhcj4gZXVjS1JEZWNvZGluZ0luZGV4WzE3MDQ4XTsKIAordm9pZCBjaGVja0VuY29k
aW5nVGFibGVJbnZhcmlhbnRzKCk7CisKKy8vIEZ1bmN0aW9ucyBmb3IgdXNpbmcgc29ydGVkIGFy
cmF5cyBvZiBwYWlycyBhcyBhIG1hcC4KKy8vIEZJWE1FOiBDb25zaWRlciBtb3ZpbmcgdGhlc2Ug
c29tZXdoZXJlIGVsc2Ugc2luY2UgdGhleSBhcmUgbGlrZWx5IHVzZWZ1bCBmb3IgYnkgbW9yZSB0
aGFuIGp1c3QgZW5jb2RpbmcgdGFibGVzLgordGVtcGxhdGU8dHlwZW5hbWUgQ29sbGVjdGlvblR5
cGU+IHZvaWQgc29ydEJ5Rmlyc3QoQ29sbGVjdGlvblR5cGUmKTsKK3RlbXBsYXRlPHR5cGVuYW1l
IENvbGxlY3Rpb25UeXBlPiBib29sIGlzU29ydGVkQnlGaXJzdChjb25zdCBDb2xsZWN0aW9uVHlw
ZSYpOwordGVtcGxhdGU8dHlwZW5hbWUgQ29sbGVjdGlvblR5cGU+IGJvb2wgc29ydGVkRmlyc3Rz
QXJlVW5pcXVlKGNvbnN0IENvbGxlY3Rpb25UeXBlJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xs
ZWN0aW9uVHlwZSwgdHlwZW5hbWUgS2V5VHlwZT4gc3RhdGljIGF1dG8gZmluZEZpcnN0SW5Tb3J0
ZWRQYWlycyhjb25zdCBDb2xsZWN0aW9uVHlwZSYgY29sbGVjdGlvbiwgY29uc3QgS2V5VHlwZSYp
IC0+IE9wdGlvbmFsPGRlY2x0eXBlKHN0ZDo6YmVnaW4oY29sbGVjdGlvbiktPnNlY29uZCk+Owor
dGVtcGxhdGU8dHlwZW5hbWUgQ29sbGVjdGlvblR5cGUsIHR5cGVuYW1lIEtleVR5cGU+IHN0YXRp
YyBhdXRvIGZpbmRJblNvcnRlZFBhaXJzKGNvbnN0IENvbGxlY3Rpb25UeXBlJiBjb2xsZWN0aW9u
LCBjb25zdCBLZXlUeXBlJikgLT4gc3RkOjpwYWlyPGRlY2x0eXBlKHN0ZDo6YmVnaW4oY29sbGVj
dGlvbikpLCBkZWNsdHlwZShzdGQ6OmJlZ2luKGNvbGxlY3Rpb24pKT47CisKKyNpZiAhQVNTRVJU
X0VOQUJMRUQKK2lubGluZSB2b2lkIGNoZWNrRW5jb2RpbmdUYWJsZUludmFyaWFudHMoKSB7IH0K
KyNlbmRpZgorCitzdHJ1Y3QgQ29tcGFyZUZpcnN0IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
eXBlQSwgdHlwZW5hbWUgVHlwZUI+IGJvb2wgb3BlcmF0b3IoKShjb25zdCBUeXBlQSYgYSwgY29u
c3QgVHlwZUImIGIpCisgICAgeworICAgICAgICByZXR1cm4gYS5maXJzdCA8IGIuZmlyc3Q7Cisg
ICAgfQorfTsKKworc3RydWN0IEVxdWFsRmlyc3QgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFR5
cGVBLCB0eXBlbmFtZSBUeXBlQj4gYm9vbCBvcGVyYXRvcigpKGNvbnN0IFR5cGVBJiBhLCBjb25z
dCBUeXBlQiYgYikKKyAgICB7CisgICAgICAgIHJldHVybiBhLmZpcnN0ID09IGIuZmlyc3Q7Cisg
ICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgQ29sbGVjdGlvblR5cGU+IHZvaWQgc29ydEJ5
Rmlyc3QoQ29sbGVjdGlvblR5cGUmIGNvbGxlY3Rpb24pCit7CisgICAgc3RkOjpzb3J0KHN0ZDo6
YmVnaW4oY29sbGVjdGlvbiksIHN0ZDo6ZW5kKGNvbGxlY3Rpb24pLCBDb21wYXJlRmlyc3QgeyB9
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ29sbGVjdGlvblR5cGU+IGJvb2wgaXNTb3J0ZWRC
eUZpcnN0KGNvbnN0IENvbGxlY3Rpb25UeXBlJiBjb2xsZWN0aW9uKQoreworICAgIHJldHVybiBz
dGQ6OmlzX3NvcnRlZChzdGQ6OmJlZ2luKGNvbGxlY3Rpb24pLCBzdGQ6OmVuZChjb2xsZWN0aW9u
KSwgQ29tcGFyZUZpcnN0IHsgfSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbGxlY3Rpb25U
eXBlPiBib29sIHNvcnRlZEZpcnN0c0FyZVVuaXF1ZShjb25zdCBDb2xsZWN0aW9uVHlwZSYgY29s
bGVjdGlvbikKK3sKKyAgICByZXR1cm4gc3RkOjphZGphY2VudF9maW5kKHN0ZDo6YmVnaW4oY29s
bGVjdGlvbiksIHN0ZDo6ZW5kKGNvbGxlY3Rpb24pLCBFcXVhbEZpcnN0IHsgfSkgPT0gc3RkOjpl
bmQoY29sbGVjdGlvbik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbGxlY3Rpb25UeXBlLCB0
eXBlbmFtZSBLZXlUeXBlPiBzdGF0aWMgYXV0byBmaW5kRmlyc3RJblNvcnRlZFBhaXJzKGNvbnN0
IENvbGxlY3Rpb25UeXBlJiBjb2xsZWN0aW9uLCBjb25zdCBLZXlUeXBlJiBrZXkpIC0+IE9wdGlv
bmFsPGRlY2x0eXBlKHN0ZDo6YmVnaW4oY29sbGVjdGlvbiktPnNlY29uZCk+Cit7CisgICAgaWYg
Y29uc3RleHByIChzdGQ6OmlzX2ludGVncmFsX3Y8S2V5VHlwZT4pIHsKKyAgICAgICAgaWYgKGtl
eSAhPSBkZWNsdHlwZShzdGQ6OmJlZ2luKGNvbGxlY3Rpb24pLT5maXJzdCkoa2V5KSkKKyAgICAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgfQorICAgIGF1dG8gaXRlcmF0b3IgPSBz
dGQ6Omxvd2VyX2JvdW5kKHN0ZDo6YmVnaW4oY29sbGVjdGlvbiksIHN0ZDo6ZW5kKGNvbGxlY3Rp
b24pLCBzdGQ6Om1ha2VfcGFpcihrZXksIGRlY2x0eXBlKHN0ZDo6YmVnaW4oY29sbGVjdGlvbikt
PnNlY29uZCkgeyB9KSwgQ29tcGFyZUZpcnN0IHsgfSk7CisgICAgaWYgKGl0ZXJhdG9yID09IHN0
ZDo6ZW5kKGNvbGxlY3Rpb24pIHx8IGtleSA8IGl0ZXJhdG9yLT5maXJzdCkKKyAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gaXRlcmF0b3ItPnNlY29uZDsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgQ29sbGVjdGlvblR5cGUsIHR5cGVuYW1lIEtleVR5cGU+IHN0YXRpYyBh
dXRvIGZpbmRJblNvcnRlZFBhaXJzKGNvbnN0IENvbGxlY3Rpb25UeXBlJiBjb2xsZWN0aW9uLCBj
b25zdCBLZXlUeXBlJiBrZXkpIC0+IHN0ZDo6cGFpcjxkZWNsdHlwZShzdGQ6OmJlZ2luKGNvbGxl
Y3Rpb24pKSwgZGVjbHR5cGUoc3RkOjpiZWdpbihjb2xsZWN0aW9uKSk+Cit7CisgICAgaWYgY29u
c3RleHByIChzdGQ6OmlzX2ludGVncmFsX3Y8S2V5VHlwZT4pIHsKKyAgICAgICAgaWYgKGtleSAh
PSBkZWNsdHlwZShzdGQ6OmJlZ2luKGNvbGxlY3Rpb24pLT5maXJzdCkoa2V5KSkKKyAgICAgICAg
ICAgIHJldHVybiB7IHN0ZDo6ZW5kKGNvbGxlY3Rpb24pLCBzdGQ6OmVuZChjb2xsZWN0aW9uKSB9
OworICAgIH0KKyAgICByZXR1cm4gc3RkOjplcXVhbF9yYW5nZShzdGQ6OmJlZ2luKGNvbGxlY3Rp
b24pLCBzdGQ6OmVuZChjb2xsZWN0aW9uKSwgc3RkOjptYWtlX3BhaXIoa2V5LCBkZWNsdHlwZShz
dGQ6OmJlZ2luKGNvbGxlY3Rpb24pLT5zZWNvbmQpIHsgfSksIENvbXBhcmVGaXJzdCB7IH0pOwor
fQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2Rl
Y0NKSy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0NKSy5jcHAK
aW5kZXggNjgwN2YzNzI3NDEzMWM0YzFhMWZiZTk2ZTA3YzcxY2E1Zjc4ZThkYy4uZmUzNWQxNmI4
YjJiMTljYTAwYjg3NTFkMGRhZGVmZmEyNDVhOWUxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNDSksuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3RleHQvVGV4dENvZGVjQ0pLLmNwcApAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUg
IlRleHRDb2RlY0NKSy5oIgogCiAjaW5jbHVkZSAiRW5jb2RpbmdUYWJsZXMuaCIKKyNpbmNsdWRl
IDxtdXRleD4KICNpbmNsdWRlIDx3dGYvdGV4dC9Db2RlUG9pbnRJdGVyYXRvci5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9DaGFy
YWN0ZXJOYW1lcy5oPgpAQCAtNDQsNiArNDUsNyBAQCBlbnVtIGNsYXNzIFRleHRDb2RlY0NKSzo6
RW5jb2RpbmcgOiB1aW50OF90IHsKIFRleHRDb2RlY0NKSzo6VGV4dENvZGVjQ0pLKEVuY29kaW5n
IGVuY29kaW5nKQogICAgIDogbV9lbmNvZGluZyhlbmNvZGluZykKIHsKKyAgICBjaGVja0VuY29k
aW5nVGFibGVJbnZhcmlhbnRzKCk7CiB9CiAKIHZvaWQgVGV4dENvZGVjQ0pLOjpyZWdpc3RlckVu
Y29kaW5nTmFtZXMoRW5jb2RpbmdOYW1lUmVnaXN0cmFyIHJlZ2lzdHJhcikKQEAgLTEyNCwxNiAr
MTI2LDE2IEBAIHZvaWQgVGV4dENvZGVjQ0pLOjpyZWdpc3RlckNvZGVjcyhUZXh0Q29kZWNSZWdp
c3RyYXIgcmVnaXN0cmFyKQogdXNpbmcgSklTMDIwOERlY29kZUluZGV4ID0gc3RkOjphcnJheTxz
dGQ6OnBhaXI8dWludDE2X3QsIFVDaGFyPiwgc3RkOjpzaXplKGppczAyMDgpPjsKIHN0YXRpYyBj
b25zdCBKSVMwMjA4RGVjb2RlSW5kZXgmIGppczAyMDhEZWNvZGVJbmRleCgpCiB7Ci0gICAgc3Rh
dGljIGF1dG8mIHRhYmxlID0gKltdIHsKLSAgICAgICAgYXV0byogdGFibGUgPSBuZXcgSklTMDIw
OERlY29kZUluZGV4OworICAgIHN0YXRpYyBKSVMwMjA4RGVjb2RlSW5kZXgqIHRhYmxlOworICAg
IHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlOworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2UsIFsm
XSB7CisgICAgICAgIHRhYmxlID0gbmV3IEpJUzAyMDhEZWNvZGVJbmRleDsKICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBzdGQ6OnNpemUoamlzMDIwOCk7IGkrKykKICAgICAgICAgICAg
ICgqdGFibGUpW2ldID0geyBqaXMwMjA4W2ldLnNlY29uZCwgamlzMDIwOFtpXS5maXJzdCB9Owot
ICAgICAgICBzdGQ6OnNvcnQodGFibGUtPmJlZ2luKCksIHRhYmxlLT5lbmQoKSwgW10gKGF1dG8m
IGEsIGF1dG8mIGIpIHsKLSAgICAgICAgICAgIHJldHVybiBhLmZpcnN0IDwgYi5maXJzdDsKLSAg
ICAgICAgfSk7Ci0gICAgICAgIHJldHVybiB0YWJsZTsKLSAgICB9KCk7Ci0gICAgcmV0dXJuIHRh
YmxlOworICAgICAgICBzb3J0QnlGaXJzdCgqdGFibGUpOworICAgICAgICBBU1NFUlQoc29ydGVk
Rmlyc3RzQXJlVW5pcXVlKCp0YWJsZSkpOworICAgIH0pOworICAgIHJldHVybiAqdGFibGU7CiB9
CiAKIFN0cmluZyBUZXh0Q29kZWNDSks6OmRlY29kZUNvbW1vbihjb25zdCB1aW50OF90KiBieXRl
cywgc2l6ZV90IGxlbmd0aCwgYm9vbCBmbHVzaCwgYm9vbCBzdG9wT25FcnJvciwgYm9vbCYgc2F3
RXJyb3IsIGNvbnN0IEZ1bmN0aW9uPFNhd0Vycm9yKHVpbnQ4X3QsIFN0cmluZ0J1aWxkZXImKT4m
IGJ5dGVQYXJzZXIpCkBAIC0xNzksMjcgKzE4MSwxMiBAQCBTdHJpbmcgVGV4dENvZGVjQ0pLOjpk
ZWNvZGVDb21tb24oY29uc3QgdWludDhfdCogYnl0ZXMsIHNpemVfdCBsZW5ndGgsIGJvb2wgZmx1
cwogCiBzdGF0aWMgT3B0aW9uYWw8VUNoYXI+IGNvZGVQb2ludEpJUzAyMDgodWludDE2X3QgcG9p
bnRlcikKIHsKLSAgICBhdXRvJiBpbmRleCA9IGppczAyMDhEZWNvZGVJbmRleCgpOwotICAgIGF1
dG8gcmFuZ2UgPSBzdGQ6OmVxdWFsX3JhbmdlKGluZGV4LmJlZ2luKCksIGluZGV4LmVuZCgpLCBz
dGQ6OnBhaXI8dWludDE2X3QsIFVDaGFyPihwb2ludGVyLCAwKSwgW10oY29uc3QgYXV0byYgYSwg
Y29uc3QgYXV0byYgYikgewotICAgICAgICByZXR1cm4gYS5maXJzdCA8IGIuZmlyc3Q7Ci0gICAg
fSk7Ci0gICAgaWYgKHJhbmdlLmZpcnN0ICE9IHJhbmdlLnNlY29uZCkgewotICAgICAgICBBU1NF
UlQocmFuZ2UuZmlyc3QgKyAxID09IHJhbmdlLnNlY29uZCk7Ci0gICAgICAgIHJldHVybiByYW5n
ZS5maXJzdC0+c2Vjb25kOwotICAgIH0KLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJl
dHVybiBmaW5kRmlyc3RJblNvcnRlZFBhaXJzKGppczAyMDhEZWNvZGVJbmRleCgpLCBwb2ludGVy
KTsKIH0KIAogc3RhdGljIE9wdGlvbmFsPFVDaGFyPiBjb2RlUG9pbnRKSVMwMjEyKHVpbnQxNl90
IHBvaW50ZXIpCiB7Ci0gICAgYXV0byByYW5nZSA9IHN0ZDo6ZXF1YWxfcmFuZ2UoamlzMDIxMiwg
amlzMDIxMiArIHN0ZDo6c2l6ZShqaXMwMjEyKSwgc3RkOjpwYWlyPHVpbnQxNl90LCBVQ2hhcj4o
cG9pbnRlciwgMCksIFtdKGNvbnN0IGF1dG8mIGEsIGNvbnN0IGF1dG8mIGIpIHsKLSAgICAgICAg
cmV0dXJuIGEuZmlyc3QgPCBiLmZpcnN0OwotICAgIH0pOwotICAgIGlmIChyYW5nZS5maXJzdCAh
PSByYW5nZS5zZWNvbmQpIHsKLSAgICAgICAgQVNTRVJUKHJhbmdlLmZpcnN0ICsgMSA9PSByYW5n
ZS5zZWNvbmQpOwotICAgICAgICByZXR1cm4gcmFuZ2UuZmlyc3QtPnNlY29uZDsKLSAgICB9Ci0g
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gZmluZEZpcnN0SW5Tb3J0ZWRQYWly
cyhqaXMwMjEyLCBwb2ludGVyKTsKIH0KIAogLy8gaHR0cHM6Ly9lbmNvZGluZy5zcGVjLndoYXR3
Zy5vcmcvI2V1Yy1qcC1kZWNvZGVyCkBAIC0yMjgsNyArMjE1LDcgQEAgU3RyaW5nIFRleHRDb2Rl
Y0NKSzo6ZXVjSlBEZWNvZGUoY29uc3QgdWludDhfdCogYnl0ZXMsIHNpemVfdCBsZW5ndGgsIGJv
b2wgZmx1c2gKICAgICAgICAgICAgIHJldHVybiBTYXdFcnJvcjo6WWVzOwogICAgICAgICB9CiAg
ICAgICAgIGlmIChpc0FTQ0lJKGJ5dGUpKSB7Ci0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKHN0
YXRpY19jYXN0PExDaGFyPihieXRlKSk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHN0YXRp
Y19jYXN0PGNoYXI+KGJ5dGUpKTsKICAgICAgICAgICAgIHJldHVybiBTYXdFcnJvcjo6Tm87CiAg
ICAgICAgIH0KICAgICAgICAgaWYgKGJ5dGUgPT0gMHg4RSB8fCBieXRlID09IDB4OEYgfHwgKGJ5
dGUgPj0gMHhBMSAmJiBieXRlIDw9IDB4RkUpKSB7CkBAIC0yNDcsNDIgKzIzNCwzNCBAQCBzdGF0
aWMgVmVjdG9yPHVpbnQ4X3Q+IGV1Y0pQRW5jb2RlKFN0cmluZ1ZpZXcgc3RyaW5nLCBGdW5jdGlv
bjx2b2lkKFVDaGFyMzIsIFZlYwogCiAgICAgYXV0byBjaGFyYWN0ZXJzID0gc3RyaW5nLnVwY29u
dmVydGVkQ2hhcmFjdGVycygpOwogICAgIGZvciAoV1RGOjpDb2RlUG9pbnRJdGVyYXRvcjxVQ2hh
cj4gaXRlcmF0b3IoY2hhcmFjdGVycy5nZXQoKSwgY2hhcmFjdGVycy5nZXQoKSArIHN0cmluZy5s
ZW5ndGgoKSk7ICFpdGVyYXRvci5hdEVuZCgpOyArK2l0ZXJhdG9yKSB7Ci0gICAgICAgIGF1dG8g
YyA9ICppdGVyYXRvcjsKLSAgICAgICAgaWYgKGlzQVNDSUkoYykpIHsKLSAgICAgICAgICAgIHJl
c3VsdC5hcHBlbmQoYyk7CisgICAgICAgIGF1dG8gY29kZVBvaW50ID0gKml0ZXJhdG9yOworICAg
ICAgICBpZiAoaXNBU0NJSShjb2RlUG9pbnQpKSB7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5k
KGNvZGVQb2ludCk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBp
ZiAoYyA9PSAweDAwQTUpIHsKKyAgICAgICAgaWYgKGNvZGVQb2ludCA9PSAweDAwQTUpIHsKICAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMHg1Qyk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgfQotICAgICAgICBpZiAoYyA9PSAweDIwM0UpIHsKKyAgICAgICAgaWYgKGNvZGVQb2lu
dCA9PSAweDIwM0UpIHsKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMHg3RSk7CiAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBpZiAoYyA+PSAweEZGNjEgJiYgYyA8
PSAweEZGOUYpIHsKKyAgICAgICAgaWYgKGNvZGVQb2ludCA+PSAweEZGNjEgJiYgY29kZVBvaW50
IDw9IDB4RkY5RikgewogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgweDhFKTsKLSAgICAgICAg
ICAgIHJlc3VsdC5hcHBlbmQoYyAtIDB4RkY2MSArIDB4QTEpOworICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZChjb2RlUG9pbnQgLSAweEZGNjEgKyAweEExKTsKICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICB9Ci0gICAgICAgIGlmIChjID09IDB4MjIxMikKLSAgICAgICAgICAgIGMgPSAw
eEZGMEQ7CisgICAgICAgIGlmIChjb2RlUG9pbnQgPT0gMHgyMjEyKQorICAgICAgICAgICAgY29k
ZVBvaW50ID0gMHhGRjBEOwogCi0gICAgICAgIGlmIChzdGF0aWNfY2FzdDxVQ2hhcj4oYykgIT0g
YykgewotICAgICAgICAgICAgdW5lbmNvZGFibGVIYW5kbGVyKGMsIHJlc3VsdCk7Ci0gICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgYXV0byBwb2ludGVy
UmFuZ2UgPSBzdGQ6OmVxdWFsX3JhbmdlKHN0ZDo6YmVnaW4oamlzMDIwOCksIHN0ZDo6ZW5kKGpp
czAyMDgpLCBzdGQ6OnBhaXI8VUNoYXIsIHVpbnQxNl90PihzdGF0aWNfY2FzdDxVQ2hhcj4oYyks
IDApLCBbXShjb25zdCBhdXRvJiBhLCBjb25zdCBhdXRvJiBiKSB7Ci0gICAgICAgICAgICByZXR1
cm4gYS5maXJzdCA8IGIuZmlyc3Q7Ci0gICAgICAgIH0pOwotICAgICAgICBpZiAocG9pbnRlclJh
bmdlLmZpcnN0ID09IHBvaW50ZXJSYW5nZS5zZWNvbmQpIHsKLSAgICAgICAgICAgIHVuZW5jb2Rh
YmxlSGFuZGxlcihjLCByZXN1bHQpOworICAgICAgICBhdXRvIHBvaW50ZXIgPSBmaW5kRmlyc3RJ
blNvcnRlZFBhaXJzKGppczAyMDgsIGNvZGVQb2ludCk7CisgICAgICAgIGlmICghcG9pbnRlcikg
eworICAgICAgICAgICAgdW5lbmNvZGFibGVIYW5kbGVyKGNvZGVQb2ludCwgcmVzdWx0KTsKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIHVpbnQxNl90IHBvaW50ZXIg
PSAocG9pbnRlclJhbmdlLnNlY29uZCAtIDEpLT5zZWNvbmQ7Ci0gICAgICAgIHJlc3VsdC5hcHBl
bmQocG9pbnRlciAvIDk0ICsgMHhBMSk7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQocG9pbnRlciAl
IDk0ICsgMHhBMSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoKnBvaW50ZXIgLyA5NCArIDB4QTEp
OworICAgICAgICByZXN1bHQuYXBwZW5kKCpwb2ludGVyICUgOTQgKyAweEExKTsKICAgICB9CiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTUwNCwxMiArNDgzLDEyIEBAIHN0YXRpYyBWZWN0b3I8
dWludDhfdD4gaXNvMjAyMkpQRW5jb2RlKFN0cmluZ1ZpZXcgc3RyaW5nLCBGdW5jdGlvbjx2b2lk
KFVDaGFyMzIsCiAgICAgRnVuY3Rpb248dm9pZChVQ2hhcjMyKT4gcGFyc2VDb2RlUG9pbnQ7CiAg
ICAgcGFyc2VDb2RlUG9pbnQgPSBbJl0gKFVDaGFyMzIgY29kZVBvaW50KSB7CiAgICAgICAgIGlm
IChzdGF0ZSA9PSBTdGF0ZTo6QVNDSUkgJiYgaXNBU0NJSShjb2RlUG9pbnQpKSB7Ci0gICAgICAg
ICAgICByZXN1bHQuYXBwZW5kKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGNvZGVQb2ludCkpOworICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZChjb2RlUG9pbnQpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAgICAgICAgIGlmIChzdGF0ZSA9PSBTdGF0ZTo6Um9tYW4pIHsKICAgICAgICAg
ICAgIGlmIChpc0FTQ0lJKGNvZGVQb2ludCkgJiYgY29kZVBvaW50ICE9IDB4MDA1QyAmJiBjb2Rl
UG9pbnQgIT0weDAwN0UpIHsKLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHN0YXRpY19j
YXN0PHVpbnQ4X3Q+KGNvZGVQb2ludCkpOworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQo
Y29kZVBvaW50KTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBpZiAoY29kZVBvaW50ID09IDB4MDBBNSkgewpAQCAtNTQ1LDE5ICs1MjQsMTIgQEAg
c3RhdGljIFZlY3Rvcjx1aW50OF90PiBpc28yMDIySlBFbmNvZGUoU3RyaW5nVmlldyBzdHJpbmcs
IEZ1bmN0aW9uPHZvaWQoVUNoYXIzMiwKICAgICAgICAgICAgICAgICAweDMwQzEsIDB4MzBDNCwg
MHgzMEM2LCAweDMwQzgsIDB4MzBDQSwgMHgzMENCLCAweDMwQ0MsIDB4MzBDRCwgMHgzMENFLCAw
eDMwQ0YsIDB4MzBEMiwgMHgzMEQ1LCAweDMwRDgsIDB4MzBEQiwgMHgzMERFLCAweDMwREYsCiAg
ICAgICAgICAgICAgICAgMHgzMEUwLCAweDMwRTEsIDB4MzBFMiwgMHgzMEU0LCAweDMwRTYsIDB4
MzBFOCwgMHgzMEU5LCAweDMwRUEsIDB4MzBFQiwgMHgzMEVDLCAweDMwRUQsIDB4MzBFRiwgMHgz
MEYzLCAweDMwOUIsIDB4MzA5QwogICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIHN0YXRpY19h
c3NlcnQoc3RkOjpzaXplKGlzbzIwMjJKUEthdGFrYW5hKSA9PSAweEZGOUYgLSAweEZGNjEgKyAx
KTsKICAgICAgICAgICAgIGNvZGVQb2ludCA9IGlzbzIwMjJKUEthdGFrYW5hW2NvZGVQb2ludCAt
IDB4RkY2MV07CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGF1dG8gY29kZVVuaXQgPSBz
dGF0aWNfY2FzdDxVQ2hhcj4oY29kZVBvaW50KTsKLSAgICAgICAgaWYgKGNvZGVVbml0ICE9IGNv
ZGVQb2ludCkgewotICAgICAgICAgICAgc3RhdGVmdWxVbmVuY29kYWJsZUhhbmRsZXIoY29kZVBv
aW50LCByZXN1bHQpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICBhdXRvIHJhbmdlID0gc3RkOjplcXVhbF9yYW5nZShzdGQ6OmJlZ2luKGppczAyMDgp
LCBzdGQ6OmVuZChqaXMwMjA4KSwgc3RkOjpwYWlyPFVDaGFyLCB1aW50MTZfdD4oY29kZVVuaXQs
IDApLCBbXShjb25zdCBhdXRvJiBhLCBjb25zdCBhdXRvJiBiKSB7Ci0gICAgICAgICAgICByZXR1
cm4gYS5maXJzdCA8IGIuZmlyc3Q7Ci0gICAgICAgIH0pOwotICAgICAgICBpZiAocmFuZ2UuZmly
c3QgPT0gcmFuZ2Uuc2Vjb25kKSB7CisKKyAgICAgICAgYXV0byBwb2ludGVyID0gZmluZEZpcnN0
SW5Tb3J0ZWRQYWlycyhqaXMwMjA4LCBjb2RlUG9pbnQpOworICAgICAgICBpZiAoIXBvaW50ZXIp
IHsKICAgICAgICAgICAgIHN0YXRlZnVsVW5lbmNvZGFibGVIYW5kbGVyKGNvZGVQb2ludCwgcmVz
dWx0KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtNTY5LDkgKzU0MSw4IEBA
IHN0YXRpYyBWZWN0b3I8dWludDhfdD4gaXNvMjAyMkpQRW5jb2RlKFN0cmluZ1ZpZXcgc3RyaW5n
LCBGdW5jdGlvbjx2b2lkKFVDaGFyMzIsCiAgICAgICAgICAgICBwYXJzZUNvZGVQb2ludChjb2Rl
UG9pbnQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIHVpbnQxNl90
IHBvaW50ZXIgPSAocmFuZ2Uuc2Vjb25kIC0gMSktPnNlY29uZDsKLSAgICAgICAgcmVzdWx0LmFw
cGVuZChwb2ludGVyIC8gOTQgKyAweDIxKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZChwb2ludGVy
ICUgOTQgKyAweDIxKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgqcG9pbnRlciAvIDk0ICsgMHgy
MSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoKnBvaW50ZXIgJSA5NCArIDB4MjEpOwogICAgIH07
CiAgICAgCiAgICAgYXV0byBjaGFyYWN0ZXJzID0gc3RyaW5nLnVwY29udmVydGVkQ2hhcmFjdGVy
cygpOwpAQCAtNjUwLDIwICs2MjEsMTIgQEAgc3RhdGljIFZlY3Rvcjx1aW50OF90PiBzaGlmdEpJ
U0VuY29kZShTdHJpbmdWaWV3IHN0cmluZywgRnVuY3Rpb248dm9pZChVQ2hhcjMyLAogICAgICAg
ICBpZiAoY29kZVBvaW50ID09IDB4MjIxMikKICAgICAgICAgICAgIGNvZGVQb2ludCA9IDB4RkYw
RDsKICAgICAgICAgCi0gICAgICAgIGF1dG8gY29kZVVuaXQgPSBzdGF0aWNfY2FzdDxVQ2hhcj4o
Y29kZVBvaW50KTsKLSAgICAgICAgaWYgKGNvZGVVbml0ICE9IGNvZGVQb2ludCkgewotICAgICAg
ICAgICAgdW5lbmNvZGFibGVIYW5kbGVyKGNvZGVQb2ludCwgcmVzdWx0KTsKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBhdXRvIHJhbmdlID0gc3Rk
OjplcXVhbF9yYW5nZShzdGQ6OmJlZ2luKGppczAyMDgpLCBzdGQ6OmVuZChqaXMwMjA4KSwgc3Rk
OjpwYWlyPFVDaGFyLCB1aW50MTZfdD4oY29kZVVuaXQsIDApLCBbXShjb25zdCBhdXRvJiBhLCBj
b25zdCBhdXRvJiBiKSB7Ci0gICAgICAgICAgICByZXR1cm4gYS5maXJzdCA8IGIuZmlyc3Q7Ci0g
ICAgICAgIH0pOworICAgICAgICBhdXRvIHJhbmdlID0gZmluZEluU29ydGVkUGFpcnMoamlzMDIw
OCwgY29kZVBvaW50KTsKICAgICAgICAgaWYgKHJhbmdlLmZpcnN0ID09IHJhbmdlLnNlY29uZCkg
ewogICAgICAgICAgICAgdW5lbmNvZGFibGVIYW5kbGVyKGNvZGVQb2ludCwgcmVzdWx0KTsKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIEFTU0VS
VChyYW5nZS5maXJzdCArIDMgPj0gcmFuZ2Uuc2Vjb25kKTsKICAgICAgICAgZm9yIChhdXRvKiBw
YWlyID0gcmFuZ2Uuc2Vjb25kIC0gMTsgcGFpciA+PSByYW5nZS5maXJzdDsgcGFpci0tKSB7CiAg
ICAgICAgICAgICB1aW50MTZfdCBwb2ludGVyID0gcGFpci0+c2Vjb25kOwpAQCAtNjg0LDE2ICs2
NDcsMTYgQEAgc3RhdGljIFZlY3Rvcjx1aW50OF90PiBzaGlmdEpJU0VuY29kZShTdHJpbmdWaWV3
IHN0cmluZywgRnVuY3Rpb248dm9pZChVQ2hhcjMyLAogdXNpbmcgRVVDS1JFbmNvZGluZ0luZGV4
ID0gc3RkOjphcnJheTxzdGQ6OnBhaXI8VUNoYXIsIHVpbnQxNl90Piwgc3RkOjpzaXplKGV1Y0tS
RGVjb2RpbmdJbmRleCk+Owogc3RhdGljIGNvbnN0IEVVQ0tSRW5jb2RpbmdJbmRleCYgZXVjS1JF
bmNvZGluZ0luZGV4KCkKIHsKLSAgICBzdGF0aWMgYXV0byYgdGFibGUgPSAqW10gewotICAgICAg
ICBhdXRvIHRhYmxlID0gbmV3IEVVQ0tSRW5jb2RpbmdJbmRleDsKKyAgICBzdGF0aWMgRVVDS1JF
bmNvZGluZ0luZGV4KiB0YWJsZTsKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZTsKKyAg
ICBzdGQ6OmNhbGxfb25jZShvbmNlLCBbJl0geworICAgICAgICB0YWJsZSA9IG5ldyBFVUNLUkVu
Y29kaW5nSW5kZXg7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RkOjpzaXplKGV1
Y0tSRGVjb2RpbmdJbmRleCk7IGkrKykKICAgICAgICAgICAgICgqdGFibGUpW2ldID0geyBldWNL
UkRlY29kaW5nSW5kZXhbaV0uc2Vjb25kLCBldWNLUkRlY29kaW5nSW5kZXhbaV0uZmlyc3QgfTsK
LSAgICAgICAgc3RkOjpzb3J0KHRhYmxlLT5iZWdpbigpLCB0YWJsZS0+ZW5kKCksIFtdIChhdXRv
JiBhLCBhdXRvJiBiKSB7Ci0gICAgICAgICAgICByZXR1cm4gYS5maXJzdCA8IGIuZmlyc3Q7Ci0g
ICAgICAgIH0pOwotICAgICAgICByZXR1cm4gdGFibGU7Ci0gICAgfSgpOwotICAgIHJldHVybiB0
YWJsZTsKKyAgICAgICAgc29ydEJ5Rmlyc3QoKnRhYmxlKTsKKyAgICAgICAgQVNTRVJUKHNvcnRl
ZEZpcnN0c0FyZVVuaXF1ZSgqdGFibGUpKTsKKyAgICB9KTsKKyAgICByZXR1cm4gKnRhYmxlOwog
fQogCiAvLyBodHRwczovL2VuY29kaW5nLnNwZWMud2hhdHdnLm9yZy8jZXVjLWtyLWVuY29kZXIK
QEAgLTcwNiwyNiArNjY5LDE3IEBAIHN0YXRpYyBWZWN0b3I8dWludDhfdD4gZXVjS1JFbmNvZGUo
U3RyaW5nVmlldyBzdHJpbmcsIEZ1bmN0aW9uPHZvaWQoVUNoYXIzMiwgVmVjCiAgICAgZm9yIChX
VEY6OkNvZGVQb2ludEl0ZXJhdG9yPFVDaGFyPiBpdGVyYXRvcihjaGFyYWN0ZXJzLmdldCgpLCBj
aGFyYWN0ZXJzLmdldCgpICsgc3RyaW5nLmxlbmd0aCgpKTsgIWl0ZXJhdG9yLmF0RW5kKCk7ICsr
aXRlcmF0b3IpIHsKICAgICAgICAgYXV0byBjb2RlUG9pbnQgPSAqaXRlcmF0b3I7CiAgICAgICAg
IGlmIChpc0FTQ0lJKGNvZGVQb2ludCkpIHsKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoc3Rh
dGljX2Nhc3Q8dWludDhfdD4oY29kZVBvaW50KSk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5k
KGNvZGVQb2ludCk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICAK
LSAgICAgICAgYXV0byBjb2RlVW5pdCA9IHN0YXRpY19jYXN0PFVDaGFyPihjb2RlUG9pbnQpOwot
ICAgICAgICBpZiAoY29kZVVuaXQgIT0gY29kZVBvaW50KSB7CisgICAgICAgIGF1dG8gcG9pbnRl
ciA9IGZpbmRGaXJzdEluU29ydGVkUGFpcnMoZXVjS1JFbmNvZGluZ0luZGV4KCksIGNvZGVQb2lu
dCk7CisgICAgICAgIGlmICghcG9pbnRlcikgewogICAgICAgICAgICAgdW5lbmNvZGFibGVIYW5k
bGVyKGNvZGVQb2ludCwgcmVzdWx0KTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9
Ci0gICAgICAgIGF1dG8mIGluZGV4ID0gZXVjS1JFbmNvZGluZ0luZGV4KCk7Ci0gICAgICAgIGF1
dG8gcmFuZ2UgPSBzdGQ6OmVxdWFsX3JhbmdlKGluZGV4LmJlZ2luKCksIGluZGV4LmVuZCgpLCBz
dGQ6OnBhaXI8VUNoYXIsIHVpbnQxNl90Pihjb2RlUG9pbnQsIDApLCBbXShjb25zdCBhdXRvJiBh
LCBjb25zdCBhdXRvJiBiKSB7Ci0gICAgICAgICAgICByZXR1cm4gYS5maXJzdCA8IGIuZmlyc3Q7
Ci0gICAgICAgIH0pOwotICAgICAgICBpZiAocmFuZ2UuZmlyc3QgPT0gcmFuZ2Uuc2Vjb25kKSB7
Ci0gICAgICAgICAgICB1bmVuY29kYWJsZUhhbmRsZXIoY29kZVBvaW50LCByZXN1bHQpOwotICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgdWludDE2X3QgcG9pbnRlciA9
IHJhbmdlLmZpcnN0LT5zZWNvbmQ7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQocG9pbnRlciAvIDE5
MCArIDB4ODEpOwotICAgICAgICByZXN1bHQuYXBwZW5kKHBvaW50ZXIgJSAxOTAgKyAweDQxKTsK
KyAgICAgICAgcmVzdWx0LmFwcGVuZCgqcG9pbnRlciAvIDE5MCArIDB4ODEpOworICAgICAgICBy
ZXN1bHQuYXBwZW5kKCpwb2ludGVyICUgMTkwICsgMHg0MSk7CiAgICAgfQogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CkBAIC03MzYsMTIgKzY5MCw4IEBAIFN0cmluZyBUZXh0Q29kZWNDSks6OmV1Y0tS
RGVjb2RlKGNvbnN0IHVpbnQ4X3QqIGJ5dGVzLCBzaXplX3QgbGVuZ3RoLCBib29sIGZsdXNoCiAg
ICAgcmV0dXJuIGRlY29kZUNvbW1vbihieXRlcywgbGVuZ3RoLCBmbHVzaCwgc3RvcE9uRXJyb3Is
IHNhd0Vycm9yLCBbdGhpc10gKHVpbnQ4X3QgYnl0ZSwgU3RyaW5nQnVpbGRlciYgcmVzdWx0KSB7
CiAgICAgICAgIGlmICh1aW50OF90IGxlYWQgPSBzdGQ6OmV4Y2hhbmdlKG1fbGVhZCwgMHgwMCkp
IHsKICAgICAgICAgICAgIGlmIChieXRlID49IDB4NDEgJiYgYnl0ZSA8PSAweEZFKSB7Ci0gICAg
ICAgICAgICAgICAgdWludDE2X3QgcG9pbnRlciA9IChsZWFkIC0gMHg4MSkgKiAxOTAgKyBieXRl
IC0gMHg0MTsKLSAgICAgICAgICAgICAgICBhdXRvIHJhbmdlID0gc3RkOjplcXVhbF9yYW5nZShz
dGQ6OmJlZ2luKGV1Y0tSRGVjb2RpbmdJbmRleCksIHN0ZDo6ZW5kKGV1Y0tSRGVjb2RpbmdJbmRl
eCksIHN0ZDo6cGFpcjx1aW50MTZfdCwgVUNoYXI+KHBvaW50ZXIsIDApLCBbXSAoY29uc3QgYXV0
byYgYSwgY29uc3QgYXV0byYgYikgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gYS5maXJz
dCA8IGIuZmlyc3Q7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgaWYgKHJh
bmdlLmZpcnN0ICE9IHJhbmdlLnNlY29uZCkgewotICAgICAgICAgICAgICAgICAgICByZXN1bHQu
YXBwZW5kKHJhbmdlLmZpcnN0LT5zZWNvbmQpOworICAgICAgICAgICAgICAgIGlmIChhdXRvIGNv
ZGVQb2ludCA9IGZpbmRGaXJzdEluU29ydGVkUGFpcnMoZXVjS1JEZWNvZGluZ0luZGV4LCAobGVh
ZCAtIDB4ODEpICogMTkwICsgYnl0ZSAtIDB4NDEpKSB7CisgICAgICAgICAgICAgICAgICAgIHJl
c3VsdC5hcHBlbmQoKmNvZGVQb2ludCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTYXdF
cnJvcjo6Tm87CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtNzY5LDIzICs3
MTksMjAgQEAgc3RhdGljIFZlY3Rvcjx1aW50OF90PiBiaWc1RW5jb2RlKFN0cmluZ1ZpZXcgc3Ry
aW5nLCBGdW5jdGlvbjx2b2lkKFVDaGFyMzIsIFZlY3QKIAogICAgIGF1dG8gY2hhcmFjdGVycyA9
IHN0cmluZy51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKICAgICBmb3IgKFdURjo6Q29kZVBvaW50
SXRlcmF0b3I8VUNoYXI+IGl0ZXJhdG9yKGNoYXJhY3RlcnMuZ2V0KCksIGNoYXJhY3RlcnMuZ2V0
KCkgKyBzdHJpbmcubGVuZ3RoKCkpOyAhaXRlcmF0b3IuYXRFbmQoKTsgKytpdGVyYXRvcikgewot
ICAgICAgICBhdXRvIGMgPSAqaXRlcmF0b3I7Ci0gICAgICAgIGlmIChpc0FTQ0lJKGMpKSB7Ci0g
ICAgICAgICAgICByZXN1bHQuYXBwZW5kKGMpOworICAgICAgICBhdXRvIGNvZGVQb2ludCA9ICpp
dGVyYXRvcjsKKyAgICAgICAgaWYgKGlzQVNDSUkoY29kZVBvaW50KSkgeworICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZChjb2RlUG9pbnQpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IH0KIAotICAgICAgICBhdXRvIHBvaW50ZXJSYW5nZSA9IHN0ZDo6ZXF1YWxfcmFuZ2Uoc3RkOjpi
ZWdpbihiaWc1RW5jb2RpbmdNYXApLCBzdGQ6OmVuZChiaWc1RW5jb2RpbmdNYXApLCBzdGQ6OnBh
aXI8VUNoYXIzMiwgdWludDE2X3Q+KGMsIDApLCBbXShjb25zdCBhdXRvJiBhLCBjb25zdCBhdXRv
JiBiKSB7Ci0gICAgICAgICAgICByZXR1cm4gYS5maXJzdCA8IGIuZmlyc3Q7Ci0gICAgICAgIH0p
OwotICAgICAgICAKKyAgICAgICAgYXV0byBwb2ludGVyUmFuZ2UgPSBmaW5kSW5Tb3J0ZWRQYWly
cyhiaWc1RW5jb2RpbmdNYXAsIGNvZGVQb2ludCk7CiAgICAgICAgIGlmIChwb2ludGVyUmFuZ2Uu
Zmlyc3QgPT0gcG9pbnRlclJhbmdlLnNlY29uZCkgewotICAgICAgICAgICAgdW5lbmNvZGFibGVI
YW5kbGVyKGMsIHJlc3VsdCk7CisgICAgICAgICAgICB1bmVuY29kYWJsZUhhbmRsZXIoY29kZVBv
aW50LCByZXN1bHQpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAogICAgICAg
ICB1aW50MTZfdCBwb2ludGVyID0gMDsKLSAgICAgICAgaWYgKGMgPT0gMHgyNTUwIHx8IGMgPT0g
MHgyNTVFIHx8IGMgPT0gMHgyNTYxIHx8IGMgPT0gMHgyNTZBIHx8IGMgPT0gMHg1MzQxIHx8IGMg
PT0gMHg1MzQ1KQorICAgICAgICBpZiAoY29kZVBvaW50ID09IDB4MjU1MCB8fCBjb2RlUG9pbnQg
PT0gMHgyNTVFIHx8IGNvZGVQb2ludCA9PSAweDI1NjEgfHwgY29kZVBvaW50ID09IDB4MjU2QSB8
fCBjb2RlUG9pbnQgPT0gMHg1MzQxIHx8IGNvZGVQb2ludCA9PSAweDUzNDUpCiAgICAgICAgICAg
ICBwb2ludGVyID0gKHBvaW50ZXJSYW5nZS5zZWNvbmQgLSAxKS0+c2Vjb25kOwogICAgICAgICBl
bHNlCiAgICAgICAgICAgICBwb2ludGVyID0gcG9pbnRlclJhbmdlLmZpcnN0LT5zZWNvbmQ7CkBA
IC04NTQsMTggKzgwMSwxOCBAQCBGdW5jdGlvbjx2b2lkKFVDaGFyMzIsIFZlY3Rvcjx1aW50OF90
PiYpPiB1bmVuY29kYWJsZUhhbmRsZXIoVW5lbmNvZGFibGVIYW5kbGluZwogdXNpbmcgQmlnNURl
Y29kZUluZGV4ID0gc3RkOjphcnJheTxzdGQ6OnBhaXI8dWludDE2X3QsIFVDaGFyMzI+LCBzdGQ6
OnNpemUoYmlnNURlY29kaW5nRXh0cmFzKSArIHN0ZDo6c2l6ZShiaWc1RW5jb2RpbmdNYXApPjsK
IHN0YXRpYyBjb25zdCBCaWc1RGVjb2RlSW5kZXgmIGJpZzVEZWNvZGVJbmRleCgpCiB7Ci0gICAg
c3RhdGljIGF1dG8mIHRhYmxlID0gKltdIHsKLSAgICAgICAgYXV0byB0YWJsZSA9IG5ldyBCaWc1
RGVjb2RlSW5kZXg7CisgICAgc3RhdGljIEJpZzVEZWNvZGVJbmRleCogdGFibGU7CisgICAgc3Rh
dGljIHN0ZDo6b25jZV9mbGFnIG9uY2U7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZSwgWyZdIHsK
KyAgICAgICAgdGFibGUgPSBuZXcgQmlnNURlY29kZUluZGV4OwogICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHN0ZDo6c2l6ZShiaWc1RGVjb2RpbmdFeHRyYXMpOyBpKyspCiAgICAgICAg
ICAgICAoKnRhYmxlKVtpXSA9IGJpZzVEZWNvZGluZ0V4dHJhc1tpXTsKICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBzdGQ6OnNpemUoYmlnNUVuY29kaW5nTWFwKTsgaSsrKQogICAgICAg
ICAgICAgKCp0YWJsZSlbaSArIHN0ZDo6c2l6ZShiaWc1RGVjb2RpbmdFeHRyYXMpXSA9IHsgYmln
NUVuY29kaW5nTWFwW2ldLnNlY29uZCwgYmlnNUVuY29kaW5nTWFwW2ldLmZpcnN0IH07Ci0gICAg
ICAgIHN0ZDo6c29ydCh0YWJsZS0+YmVnaW4oKSwgdGFibGUtPmVuZCgpLCBbXSAoYXV0byYgYSwg
YXV0byYgYikgewotICAgICAgICAgICAgcmV0dXJuIGEuZmlyc3QgPCBiLmZpcnN0OwotICAgICAg
ICB9KTsKLSAgICAgICAgcmV0dXJuIHRhYmxlOwotICAgIH0oKTsKLSAgICByZXR1cm4gdGFibGU7
CisgICAgICAgIHNvcnRCeUZpcnN0KCp0YWJsZSk7CisgICAgICAgIEFTU0VSVChzb3J0ZWRGaXJz
dHNBcmVVbmlxdWUoKnRhYmxlKSk7CisgICAgfSk7CisgICAgcmV0dXJuICp0YWJsZTsKIH0KIAog
U3RyaW5nIFRleHRDb2RlY0NKSzo6YmlnNURlY29kZShjb25zdCB1aW50OF90KiBieXRlcywgc2l6
ZV90IGxlbmd0aCwgYm9vbCBmbHVzaCwgYm9vbCBzdG9wT25FcnJvciwgYm9vbCYgc2F3RXJyb3Ip
CkBAIC04ODgsMTQgKzgzNSw5IEBAIFN0cmluZyBUZXh0Q29kZWNDSks6OmJpZzVEZWNvZGUoY29u
c3QgdWludDhfdCogYnl0ZXMsIHNpemVfdCBsZW5ndGgsIGJvb2wgZmx1c2gsCiAgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmRDaGFyYWN0ZXIoMHgwMEVBKTsKICAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZENoYXJhY3RlcigweDAzMEMpOwogICAgICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8mIGluZGV4ID0gYmlnNURlY29kZUluZGV4
KCk7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gcmFuZ2UgPSBzdGQ6OmVxdWFsX3JhbmdlKGlu
ZGV4LmJlZ2luKCksIGluZGV4LmVuZCgpLCBzdGQ6OnBhaXI8dWludDE2X3QsIFVDaGFyMzI+KHBv
aW50ZXIsIDApLCBbXShjb25zdCBhdXRvJiBhLCBjb25zdCBhdXRvJiBiKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gYS5maXJzdCA8IGIuZmlyc3Q7Ci0gICAgICAgICAgICAgICAg
ICAgIH0pOwotICAgICAgICAgICAgICAgICAgICBpZiAocmFuZ2UuZmlyc3QgIT0gcmFuZ2Uuc2Vj
b25kKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQocmFuZ2UuZmlyc3QgKyAxID09
IHJhbmdlLnNlY29uZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kQ2hh
cmFjdGVyKHJhbmdlLmZpcnN0LT5zZWNvbmQpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG8gY29kZVBvaW50ID0gZmluZEZpcnN0SW5Tb3J0
ZWRQYWlycyhiaWc1RGVjb2RlSW5kZXgoKSwgcG9pbnRlcikpCisgICAgICAgICAgICAgICAgICAg
ICAgICByZXN1bHQuYXBwZW5kQ2hhcmFjdGVyKCpjb2RlUG9pbnQpOworICAgICAgICAgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU2F3RXJyb3I6OlllczsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcmV0dXJuIFNhd0Vycm9yOjpObzsK
QEAgLTkwNSw3ICs4NDcsNyBAQCBTdHJpbmcgVGV4dENvZGVjQ0pLOjpiaWc1RGVjb2RlKGNvbnN0
IHVpbnQ4X3QqIGJ5dGVzLCBzaXplX3QgbGVuZ3RoLCBib29sIGZsdXNoLAogICAgICAgICAgICAg
cmV0dXJuIFNhd0Vycm9yOjpZZXM7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGlzQVNDSUkoYnl0
ZSkpIHsKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoc3RhdGljX2Nhc3Q8TENoYXI+KGJ5dGUp
KTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoc3RhdGljX2Nhc3Q8Y2hhcj4oYnl0ZSkpOwog
ICAgICAgICAgICAgcmV0dXJuIFNhd0Vycm9yOjpObzsKICAgICAgICAgfQogICAgICAgICBpZiAo
Ynl0ZSA+PSAweDgxICYmIGJ5dGUgPD0gMHhGRSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNTaW5nbGVCeXRlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvVGV4dENvZGVjU2luZ2xlQnl0ZS5jcHAKaW5kZXggYTBiMTU3OWIxODdm
ZDI2NTI3MTNkNjYwMTJmOTc0N2M2NTg0ZDE3Ny4uYzJiZDU3NjViMjc0MGU3ZTYwOGY0ZGM3NGUx
YTFkNTk4Y2RhYWI4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9U
ZXh0Q29kZWNTaW5nbGVCeXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L1RleHRDb2RlY1NpbmdsZUJ5dGUuY3BwCkBAIC0yNiw2ICsyNiw5IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiVGV4dENvZGVjU2luZ2xlQnl0ZS5oIgogCisjaW5jbHVkZSAiRW5j
b2RpbmdUYWJsZXMuaCIKKyNpbmNsdWRlIDxtdXRleD4KKyNpbmNsdWRlIDx3dGYvSXRlcmF0b3JS
YW5nZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NvZGVQb2ludEl0ZXJhdG9yLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogI2luY2x1ZGUgPHd0Zi91bmljb2RlL0NoYXJh
Y3Rlck5hbWVzLmg+CkBAIC00Niw3ICs0OSw4IEBAIGVudW0gY2xhc3MgVGV4dENvZGVjU2luZ2xl
Qnl0ZTo6RW5jb2RpbmcgOiB1aW50OF90IHsKIH07CiAKIHVzaW5nIFNpbmdsZUJ5dGVEZWNvZGVU
YWJsZSA9IHN0ZDo6YXJyYXk8VUNoYXIsIDEyOD47Ci11c2luZyBTaW5nbGVCeXRlRW5jb2RlVGFi
bGUgPSBzdGQ6OnBhaXI8Y29uc3Qgc3RkOjpwYWlyPFVDaGFyLCB1aW50OF90PiosIHNpemVfdD47
Cit1c2luZyBTaW5nbGVCeXRlRW5jb2RlVGFibGVFbnRyeSA9IHN0ZDo6cGFpcjxVQ2hhciwgdWlu
dDhfdD47Cit1c2luZyBTaW5nbGVCeXRlRW5jb2RlVGFibGUgPSBXVEY6Okl0ZXJhdG9yUmFuZ2U8
Y29uc3QgU2luZ2xlQnl0ZUVuY29kZVRhYmxlRW50cnkqPjsKIAogLy8gRnJvbSBodHRwczovL2Vu
Y29kaW5nLnNwZWMud2hhdHdnLm9yZy9pbmRleC1pc28tODg1OS0zLnR4dCB3aXRoIDB4RkZGRCBm
aWxsaW5nIHRoZSBnYXBzCiBzdGF0aWMgY29uc3RleHByIFNpbmdsZUJ5dGVEZWNvZGVUYWJsZSBp
c284ODU5MyB7CkBAIC0xNzAsMTcgKzE3NCwyMyBAQCBzdGF0aWMgY29uc3RleHByIFNpbmdsZUJ5
dGVEZWNvZGVUYWJsZSBpYm04NjYgewogdGVtcGxhdGU8Y29uc3QgU2luZ2xlQnl0ZURlY29kZVRh
YmxlJiBkZWNvZGVUYWJsZT4gU2luZ2xlQnl0ZUVuY29kZVRhYmxlIHRhYmxlRm9yRW5jb2Rpbmco
KQogewogICAgIC8vIEZJWE1FOiBXaXRoIHRoZSBDKysyMCB2ZXJzaW9uIG9mIHN0ZDo6Y291bnQs
IHdlIHNob3VsZCBiZSBhYmxlIHRvIGNoYW5nZSB0aGlzIGZyb20gY29uc3QgdG8gY29uc3RleHBy
IGFuZCBnZXQgaXQgY29tcHV0ZWQgYXQgY29tcGlsZSB0aW1lLgotICAgIHN0YXRpYyBjb25zdCBz
aXplX3Qgc2l6ZSA9IHN0ZDo6c2l6ZShkZWNvZGVUYWJsZSkgLSBzdGQ6OmNvdW50KHN0ZDo6YmVn
aW4oZGVjb2RlVGFibGUpLCBzdGQ6OmVuZChkZWNvZGVUYWJsZSksIHJlcGxhY2VtZW50Q2hhcmFj
dGVyKTsKLSAgICBzdGF0aWMgY29uc3QgYXV0byB0YWJsZSA9IFsmXSB7Ci0gICAgICAgIGF1dG8g
dGFibGUgPSBuZXcgc3RkOjpwYWlyPFVDaGFyLCB1aW50OF90PltzaXplXTsKKyAgICBzdGF0aWMg
Y29uc3QgYXV0byBzaXplID0gc3RkOjpzaXplKGRlY29kZVRhYmxlKSAtIHN0ZDo6Y291bnQoc3Rk
OjpiZWdpbihkZWNvZGVUYWJsZSksIHN0ZDo6ZW5kKGRlY29kZVRhYmxlKSwgcmVwbGFjZW1lbnRD
aGFyYWN0ZXIpOworICAgIHN0YXRpYyBjb25zdCBTaW5nbGVCeXRlRW5jb2RlVGFibGVFbnRyeSog
ZW50cmllczsKKyAgICBzdGQ6Om9uY2VfZmxhZyBvbmNlOworICAgIHN0ZDo6Y2FsbF9vbmNlKG9u
Y2UsIFsmXSB7CisgICAgICAgIGF1dG8qIG11dGFibGVFbnRyaWVzID0gbmV3IFNpbmdsZUJ5dGVF
bmNvZGVUYWJsZUVudHJ5W3NpemVdOwogICAgICAgICBzaXplX3QgaiA9IDA7CiAgICAgICAgIGZv
ciAodWludDhfdCBpID0gMDsgaSA8IHN0ZDo6c2l6ZShkZWNvZGVUYWJsZSk7IGkrKykgewogICAg
ICAgICAgICAgaWYgKGRlY29kZVRhYmxlW2ldICE9IHJlcGxhY2VtZW50Q2hhcmFjdGVyKQotICAg
ICAgICAgICAgICAgIHRhYmxlW2orK10gPSB7IGRlY29kZVRhYmxlW2ldLCBpIH07CisgICAgICAg
ICAgICAgICAgbXV0YWJsZUVudHJpZXNbaisrXSA9IHsgZGVjb2RlVGFibGVbaV0sIGkgKyAweDgw
IH07CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRhYmxlOwotICAgIH0oKTsKLSAgICByZXR1
cm4geyB0YWJsZSwgc2l6ZSB9OworICAgICAgICBBU1NFUlQoaiA9PSBzaXplKTsKKyAgICAgICAg
YXV0byBjb2xsZWN0aW9uID0gV1RGOjptYWtlSXRlcmF0b3JSYW5nZSgmbXV0YWJsZUVudHJpZXNb
MF0sICZtdXRhYmxlRW50cmllc1tzaXplXSk7CisgICAgICAgIHNvcnRCeUZpcnN0KGNvbGxlY3Rp
b24pOworICAgICAgICBBU1NFUlQoc29ydGVkRmlyc3RzQXJlVW5pcXVlKGNvbGxlY3Rpb24pKTsK
KyAgICAgICAgZW50cmllcyA9IG11dGFibGVFbnRyaWVzOworICAgIH0pOworICAgIHJldHVybiBX
VEY6Om1ha2VJdGVyYXRvclJhbmdlKCZlbnRyaWVzWzBdLCAmZW50cmllc1tzaXplXSk7CiB9CiAK
IHN0YXRpYyBTaW5nbGVCeXRlRW5jb2RlVGFibGUgdGFibGVGb3JFbmNvZGluZyhUZXh0Q29kZWNT
aW5nbGVCeXRlOjpFbmNvZGluZyBlbmNvZGluZykKQEAgLTI0MCwzMSArMjUwLDIwIEBAIHN0YXRp
YyBjb25zdGV4cHIgY29uc3QgU2luZ2xlQnl0ZURlY29kZVRhYmxlJiB0YWJsZUZvckRlY29kaW5n
KFRleHRDb2RlY1NpbmdsZUJ5CiAvLyBodHRwczovL2VuY29kaW5nLnNwZWMud2hhdHdnLm9yZy8j
c2luZ2xlLWJ5dGUtZW5jb2Rlcgogc3RhdGljIFZlY3Rvcjx1aW50OF90PiBlbmNvZGUoY29uc3Qg
U2luZ2xlQnl0ZUVuY29kZVRhYmxlJiB0YWJsZSwgU3RyaW5nVmlldyBzdHJpbmcsIEZ1bmN0aW9u
PHZvaWQoVUNoYXIzMiwgVmVjdG9yPHVpbnQ4X3Q+Jik+JiYgdW5lbmNvZGFibGVIYW5kbGVyKQog
eworICAgIC8vIEZJWE1FOiBDb25zaWRlciBhZGRpbmcgYW4gQVNDSUkgZmFzdCBwYXRoIGxpa2Ug
dGhlIG9uZSBpbiBUZXh0Q29kZWNMYXRpbjE6OmRlY29kZS4KICAgICBWZWN0b3I8dWludDhfdD4g
cmVzdWx0OwogICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHN0cmluZy5sZW5ndGgo
KSk7Ci0KLSAgICBhdXRvIGNoYXJhY3RlcnMgPSBzdHJpbmcudXBjb252ZXJ0ZWRDaGFyYWN0ZXJz
KCk7Ci0gICAgZm9yIChXVEY6OkNvZGVQb2ludEl0ZXJhdG9yPFVDaGFyPiBpdGVyYXRvcihjaGFy
YWN0ZXJzLmdldCgpLCBjaGFyYWN0ZXJzLmdldCgpICsgc3RyaW5nLmxlbmd0aCgpKTsgIWl0ZXJh
dG9yLmF0RW5kKCk7ICsraXRlcmF0b3IpIHsKLSAgICAgICAgYXV0byBjb2RlUG9pbnQgPSAqaXRl
cmF0b3I7CisgICAgZm9yIChhdXRvIGNvZGVQb2ludCA6IHN0cmluZy5jb2RlUG9pbnRzKCkpIHsK
ICAgICAgICAgaWYgKGlzQVNDSUkoY29kZVBvaW50KSkgewogICAgICAgICAgICAgcmVzdWx0LmFw
cGVuZChjb2RlUG9pbnQpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLQotICAg
ICAgICBhdXRvIGNvZGVVbml0ID0gc3RhdGljX2Nhc3Q8VUNoYXI+KGNvZGVQb2ludCk7Ci0gICAg
ICAgIGlmIChjb2RlVW5pdCAhPSBjb2RlUG9pbnQpIHsKLSAgICAgICAgICAgIHVuZW5jb2RhYmxl
SGFuZGxlcihjb2RlUG9pbnQsIHJlc3VsdCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgYXV0byByYW5nZSA9IHN0ZDo6ZXF1YWxfcmFuZ2UodGFi
bGUuZmlyc3QsIHRhYmxlLmZpcnN0ICsgdGFibGUuc2Vjb25kLCBzdGQ6OnBhaXI8VUNoYXIsIHVp
bnQ4X3Q+KGNvZGVVbml0LCAwKSwgW10oY29uc3QgYXV0byYgYSwgY29uc3QgYXV0byYgYikgewot
ICAgICAgICAgICAgcmV0dXJuIGEuZmlyc3QgPCBiLmZpcnN0OwotICAgICAgICB9KTsKLSAgICAg
ICAgaWYgKHJhbmdlLmZpcnN0ID09IHJhbmdlLnNlY29uZCkgeworICAgICAgICBhdXRvIGJ5dGUg
PSBmaW5kRmlyc3RJblNvcnRlZFBhaXJzKHRhYmxlLCBjb2RlUG9pbnQpOworICAgICAgICBpZiAo
IWJ5dGUpIHsKICAgICAgICAgICAgIHVuZW5jb2RhYmxlSGFuZGxlcihjb2RlUG9pbnQsIHJlc3Vs
dCk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICByZXN1bHQuYXBw
ZW5kKHJhbmdlLmZpcnN0LT5zZWNvbmQgKyAweDgwKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgq
Ynl0ZSk7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC0yODQsNyArMjgzLDYgQEAg
c3RhdGljIFN0cmluZyBkZWNvZGUoY29uc3QgU2luZ2xlQnl0ZURlY29kZVRhYmxlJiB0YWJsZSwg
Y29uc3QgdWludDhfdCogYnl0ZXMsIHMKICAgICAgICAgICAgIHNhd0Vycm9yID0gdHJ1ZTsKICAg
ICAgICAgcmVzdWx0LmFwcGVuZChjb2RlUG9pbnQpOwogICAgIH07Ci0KICAgICBpZiAoc3RvcE9u
RXJyb3IpIHsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewog
ICAgICAgICAgICAgcGFyc2VCeXRlKGJ5dGVzW2ldKTsKQEAgLTI5NSw3ICsyOTMsNiBAQCBzdGF0
aWMgU3RyaW5nIGRlY29kZShjb25zdCBTaW5nbGVCeXRlRGVjb2RlVGFibGUmIHRhYmxlLCBjb25z
dCB1aW50OF90KiBieXRlcywgcwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0
aDsgaSsrKQogICAgICAgICAgICAgcGFyc2VCeXRlKGJ5dGVzW2ldKTsKICAgICB9Ci0KICAgICBy
ZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408156</attachid>
            <date>2020-09-06 17:56:49 -0700</date>
            <delta_ts>2020-09-07 09:49:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216229-20200906175648.patch</filename>
            <type>text/plain</type>
            <size>39934</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2Njg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTcyODExNzNkN2Y4YWU4
ZmI5MTUxN2YwN2ZkZTI2ZjNiZGQ4ZmViNS4uZGEyOTZkYTEwM2Y1NTU3NGNiZTNhNDljZThiY2Vk
ZWU0Mzc4Zjk2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcxIEBACisyMDIwLTA5LTA2ICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIFRleHRDb2RlY0NKSyBh
bmQgVGV4dENvZGVjU2luZ2xlQnl0ZSB0aHJlYWQtc2FmZSBhbmQgcmVmYWN0b3IgYSBiaXQgdG8g
c2hhcmUgY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjE2MjI5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGhlIHRleHQgZW5jb2RpbmcgbWFjaGluZXJ5IGlzIHVzYWJsZSBvbiBtdWx0aXBsZSB0aHJl
YWRzLCBidXQgb3VyIG5ldyBUZXh0Q29kZWMKKyAgICAgICAgY2xhc3NlcyBoYXZlIHNvbWUgZ2xv
YmFsIGRhdGEgc3RydWN0dXJlcyB0aGF0IG5lZWQgdG8gYmUgZ3VhcmRlZCB0byBrZWVwIHRoYXQg
aW50YWN0LgorCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9FbmNvZGluZ1RhYmxlcy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpjaGVja0VuY29kaW5nVGFibGVJbnZhcmlhbnRzKTogT25lLXRpbWUg
Y2hlY2sgZm9yIGludmFyaWFudHMgdGhhdCBjbGllbnRzCisgICAgICAgIG9mIHRoZXNlIHRhYmxl
cyBkZXBlbmQgb24uCisKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L0VuY29kaW5nVGFibGVzLmg6
IEFkZGVkIGNoZWNrRW5jb2RpbmdUYWJsZUludmFyaWFudHMuIEFsc28gQWRkZWQKKyAgICAgICAg
ZnVuY3Rpb24gdGVtcGxhdGVzIGZvciBlbmNvZGluZyB0YWJsZXM6IEFkZGVkIGZpbmRGaXJzdElu
U29ydGVkUGFpcnMsCisgICAgICAgIGZpbmRMYXN0SW5Tb3J0ZWRQYWlycyBhbmQgZmluZEluU29y
dGVkUGFpcnMgZm9yIHNlYXJjaGluZyBhIHNvcnRlZCBhcnJheSBvZiBwYWlycworICAgICAgICB1
c2VkIGFzIGEgbWFwLiBBZGRlZCBzb3J0QnlGaXJzdCB0byBhaWQgaW4gdGhlIGNyZWF0aW9uIG9m
IHN1Y2ggYSBzb3J0ZWQgYXJyYXkuCisgICAgICAgIEFuZCBhZGRlZCBpc1NvcnRlZEJ5Rmlyc3Qg
YW5kIHNvcnRlZEZpcnN0c0FyZVVuaXF1ZSBzbyB3ZSBjYW4gYXNzZXJ0IHRob3NlIGludmFyaWFu
dHMuCisgICAgICAgIE9uZSBvZiB0aGUgZ29vZCBmZWF0dXJlcyBvZiB0aGUgZmluZEluU29ydGVk
UGFpcnMgZnVuY3Rpb25zIGlzIHRoYXQgdGhleSBoYW5kbGUgaW50ZWdlcgorICAgICAgICB2YWx1
ZXMgdGhhdCBkb24ndCBmaXQgaW4gYW4gaW50ZWdyYWwga2V5IHR5cGUsIHJldHVybmluZyBXVEY6
Om51bGxvcHQgaW4gdGhhdCBjYXNlLgorICAgICAgICBUaGF0IGxldHMgdXMgcGFzcyBjb2RlIHBv
aW50IHZhbHVlcyB3aGVuIGxvb2tpbmcgaW4gdGFibGVzIHRoYXQgdXNlIGNvZGUgdW5pdHMgYXMg
dGhlaXIKKyAgICAgICAga2V5LCB3aXRob3V0IHNlcGFyYXRlbHkgY2hlY2tpbmcgaWYgdGhleSBh
cmUgaW4gcmFuZ2UsIHdoaWNoIG90aGVyd2lzZSByZXF1aXJlcworICAgICAgICBjb252ZXJ0aW5n
IHRvIFVDaGFyIGFuZCBjaGVja2luZyBmb3IgZXF1YWxpdHkgb3IgY2FsbGluZyBVX0lTX0JNUC4K
KworICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dENvZGVjQ0pLLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlRleHRDb2RlY0NKSzo6VGV4dENvZGVjQ0pLKTogQ2FsbCBjaGVja0VuY29kaW5nVGFi
bGVJbnZhcmlhbnRzLgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjQ0pLOjplbmNvZGUgY29u
c3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmppczAyMDhEZWNvZGVJbmRleCk6IFVzZSBz
dGQ6OmNhbGxfb25jZSBmb3IgdGhyZWFkIHNhZmV0eS4KKyAgICAgICAgVXNlIHNvcnRCeUZpcnN0
IGFuZCBzb3J0ZWRGaXJzdHNBcmVVbmlxdWUuCisgICAgICAgIChXZWJDb3JlOjpjb2RlUG9pbnRK
SVMwMjA4KTogVXNlIGZpbmRGaXJzdEluU29ydGVkUGFpcnMuCisgICAgICAgIChXZWJDb3JlOjpj
b2RlUG9pbnRKSVMwMjEyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29kZWNDSks6
OmV1Y0pQRGVjb2RlKTogQ2FzdCB0byBjaGFyIGluc3RhZCBvZiBMQ2hhciB3aGVuIGFkZGluZwor
ICAgICAgICBhbiBBU0NJSSBjaGFyYWN0ZXIgdG8gYSBTdHJpbmdCdWlsZGVyLgorICAgICAgICAo
V2ViQ29yZTo6ZXVjSlBFbmNvZGUpOiBVc2UgdGhlIG5hbWUgY29kZVBvaW50IGluc3RlYWQgb2Yg
YyB0byBtYXRjaCBvdGhlcgorICAgICAgICBzdXJyb3VuZGluZyBjb2RlLiBVc2UgZmluZExhc3RJ
blNvcnRlZFBhaXJzLgorICAgICAgICAoV2ViQ29yZTo6aXNvMjAyMkpQRW5jb2RlKTogUmVtb3Zl
ZCBzb21lIHVubmVlZGVkIGNhc3RzIHRvIHVpbnQ4X3Qgd2hlbiBhcHBlbmRpbmcKKyAgICAgICAg
Ynl0ZXMgdG8gYSBWZWN0b3IuIEFkZGVkIGEgc3RhdGljX2Fzc2VydCB0byBjaGVjayB0aGUgc2l6
ZSBvZiBpc28yMDIySlBLYXRha2FuYS4KKyAgICAgICAgVXNlIGZpbmRMYXN0SW5Tb3J0ZWRQYWly
cy4KKyAgICAgICAgKFdlYkNvcmU6OnNoaWZ0SklTRW5jb2RlKTogVXNlIGZpbmRJblNvcnRlZFBh
aXJzLgorICAgICAgICAoV2ViQ29yZTo6ZXVjS1JFbmNvZGluZ0luZGV4KTogVXNlIHN0ZDo6Y2Fs
bF9vbmNlIGZvciB0aHJlYWQgc2FmZXR5LgorICAgICAgICBVc2Ugc29ydEJ5Rmlyc3QgYW5kIHNv
cnRlZEZpcnN0c0FyZVVuaXF1ZS4KKyAgICAgICAgKFdlYkNvcmU6OmV1Y0tSRW5jb2RlKTogUmVt
b3ZlZCBzb21lIHVubmVlZGVkIGNhc3RzIHRvIHVpbnQ4X3Qgd2hlbiBhcHBlbmRpbmcKKyAgICAg
ICAgYnl0ZXMgdG8gYSBWZWN0b3IuIFVzZSBmaW5kRmlyc3RJblNvcnRlZFBhaXJzLgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dENvZGVjQ0pLOjpldWNLUkRlY29kZSk6IFVzZSBmaW5kRmlyc3RJblNv
cnRlZFBhaXJzLgorICAgICAgICAoV2ViQ29yZTo6YmlnNUVuY29kZSk6IFVzZSBmaW5kSW5Tb3J0
ZWRQYWlycy4gQWxzbyByZW5hbWVkIGMgdG8gY29kZVBvaW50LgorICAgICAgICAoV2ViQ29yZTo6
YmlnNURlY29kZUluZGV4KTogVXNlIHN0ZDo6Y2FsbF9vbmNlIGZvciB0aHJlYWQgc2FmZXR5Lgor
ICAgICAgICBVc2Ugc29ydEJ5Rmlyc3QgYW5kIHNvcnRlZEZpcnN0c0FyZVVuaXF1ZS4KKyAgICAg
ICAgKFdlYkNvcmU6OlRleHRDb2RlY0NKSzo6YmlnNURlY29kZSk6IFVzZSBmaW5kRmlyc3RJblNv
cnRlZFBhaXJzLiBDYXN0IHRvIGNoYXIKKyAgICAgICAgaW5zdGFkIG9mIExDaGFyIHdoZW4gYWRk
aW5nIGFuIEFTQ0lJIGNoYXJhY3RlciB0byBhIFN0cmluZ0J1aWxkZXIuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS90ZXh0L1RleHRDb2RlY1NpbmdsZUJ5dGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
dGFibGVGb3JFbmNvZGluZyk6IFJldHVybiBhbiBJdGVyYXRvclJhbmdlIGluc3RlYWQgb2YgYSBw
YWlyIG9mCisgICAgICAgIHBvaW50ZXIgYW5kIHNpemUuIFRoaXMgd29ya3Mgd2l0aCBzdGQ6OmJl
Z2luL2VuZC4gQWxzbyBtYWtlIHRhYmxlIHdpdGggYWN0dWFsCisgICAgICAgIGVuY29kZWQgYnl0
ZXMsIGJ5IGFkZGluZyAweDgwIGhlcmUsIHJhdGhlciB0aGFuIGRvaW5nIHRoYXQgd2hlbiB1c2lu
ZyB0aGUgdGFibGUuCisgICAgICAgIChXZWJDb3JlOjplbmNvZGUpOiBVc2Ugc3RkOjpjYWxsX29u
Y2UgZm9yIHRocmVhZCBzYWZldHkuCisgICAgICAgIFVzZSBzb3J0QnlGaXJzdCBhbmQgc29ydGVk
Rmlyc3RzQXJlVW5pcXVlLiBUaGUgY29kZSBiZWZvcmUgd2FzIG5vdCBzb3J0aW5nIGF0CisgICAg
ICAgIGFsbCwgd2hpY2ggbWVhbnMgaXQgcHJvYmFibHkgZGlkbid0IHdvcmsgaW4gYW55IGNhc2Vz
IHdoZXJlIHRoZSBjb2RlIHVuaXRzCisgICAgICAgIGhhcHBlbiB0byBub3QgYmUgaW4gYXNjZW5k
aW5nIG9yZGVyLiBXZSBzaG91bGQgYWRkIHNvbWUgdGVzdCBjYXNlcy4KKyAgICAgICAgKFdlYkNv
cmU6OmRlY29kZSk6IFVzZSBmaW5kRmlyc3RJblNvcnRlZFBhaXJzLiBBbHNvIHVzZSBTdHJpbmdW
aWV3Ojpjb2RlUG9pbnRzCisgICAgICAgIGJlY2F1c2UgdGhlc2UgYXJlIGxpa2VseSB0byBiZSA4
LWJpdCBzdHJpbmdzIGFuZCB3ZSBkb24ndCBuZWVkIHRvIHRlbXBvcmFyaWx5CisgICAgICAgIHVw
Y29udmVydCB0aGVtIHRvIDE2LWJpdCBqdXN0IHRvIGVuY29kZSB0aGVtLiBTaG91bGQgcHJvYmFi
bHkgbGF0ZXIgbWVhc3VyZSBpZgorICAgICAgICB0aGUgdXNlIG9mIFN0cmluZ1ZpZXc6OnVwY29u
dmVydGVkQ2hhcmFjdGVycyBwbHVzIENvZGVQb2ludEl0ZXJhdG9yPFVDaGFyPgorICAgICAgICBp
bnN0ZWFkIG9mIFN0cmluZ1ZpZXc6OmNvZGVQb2ludHMgaXMgYmV0dGVyIGZvciBwZXJmb3JtYW5j
ZSBpbiB0aGUgQ0pLIGVuY29kaW5nCisgICAgICAgIGZ1bmN0aW9ucy4gVGhpcyBhcHByb2FjaCBt
ZWFucyBtb3JlIGJyYW5jaGluZyBpbnNpZGUgdGhlIGxvb3AsIGJ1dCB0aGUgb3RoZXIKKyAgICAg
ICAgdmVyc2lvbiBpbnZvbHZlcyBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgYSBzZWNvbmQgbG9vcCB3
aGVuIHRoZSBjaGFyYWN0ZXJzIGFyZQorICAgICAgICBhbGwgOC1iaXQuCisKIDIwMjAtMDktMDYg
IE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtl
IEdseXBoQnVmZmVyQWR2YW5jZSBhbmQgR2x5cGhCdWZmZXJPcmlnaW4gbW9yZSByb2J1c3QKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvRW5jb2RpbmdUYWJsZXMuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9FbmNvZGluZ1RhYmxlcy5jcHAKaW5kZXgg
NzJiMjJmOTVkY2I5OWMwYmE3MWZkY2MzZTY5Y2Q3OGQzMDk2MjU0Ni4uZWQyZjU0YzY1MmU5YzYx
ZTUyM2RiNGFlMTQzNzUwZDYyMGVmZjdkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9FbmNvZGluZ1RhYmxlcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9FbmNvZGluZ1RhYmxlcy5jcHAKQEAgLTI2LDYgKzI2LDggQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJFbmNvZGluZ1RhYmxlcy5oIgogCisjaW5jbHVkZSA8bXV0ZXg+
CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gRklYTUU6IENvbXByZXNzIHRoZXNlIHRhYmxl
cyBhbmQgZGVjb21wcmVzcyB0aGVtIGlmIHRoZXkgYXJlIGFjdHVhbGx5IHVzZWQuIFRoaXMgd2ls
bCBzaWduaWZpY2FudGx5IGRlY3JlYXNlIHRoZSBzaXplIG9mIFdlYkNvcmUncyBiaW5hcnkuCkBA
IC02MjM2LDQgKzYyMzgsMjQgQEAgY29uc3Qgc3RkOjpwYWlyPHVpbnQxNl90LCBVQ2hhcj4gZXVj
S1JEZWNvZGluZ0luZGV4WzE3MDQ4XSB7CiAgICAgeyAyMzc0MiwgMHg3MTk5IH0sIHsgMjM3NDMs
IDB4NzFCOSB9LCB7IDIzNzQ0LCAweDcxQkEgfSwgeyAyMzc0NSwgMHg3MkE3IH0sIHsgMjM3NDYs
IDB4NzlBNyB9LCB7IDIzNzQ3LCAweDdBMDAgfSwgeyAyMzc0OCwgMHg3RkIyIH0sIHsgMjM3NDks
IDB4OEE3MCB9LAogfTsKIAorI2lmIEFTU0VSVF9FTkFCTEVECisKK3ZvaWQgY2hlY2tFbmNvZGlu
Z1RhYmxlSW52YXJpYW50cygpCit7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2U7Cisg
ICAgc3RkOjpjYWxsX29uY2Uob25jZSwgW10geworICAgICAgICBBU1NFUlQoaXNTb3J0ZWRCeUZp
cnN0KGppczAyMDgpKTsKKworICAgICAgICBBU1NFUlQoaXNTb3J0ZWRCeUZpcnN0KGppczAyMTIp
KTsKKyAgICAgICAgQVNTRVJUKHNvcnRlZEZpcnN0c0FyZVVuaXF1ZShqaXMwMjEyKSk7CisKKyAg
ICAgICAgQVNTRVJUKGlzU29ydGVkQnlGaXJzdChiaWc1RW5jb2RpbmdNYXApKTsKKworICAgICAg
ICBBU1NFUlQoaXNTb3J0ZWRCeUZpcnN0KGV1Y0tSRGVjb2RpbmdJbmRleCkpOworICAgICAgICBB
U1NFUlQoc29ydGVkRmlyc3RzQXJlVW5pcXVlKGV1Y0tSRGVjb2RpbmdJbmRleCkpOworICAgIH0p
OworfQorCisjZW5kaWYKKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC9FbmNvZGluZ1RhYmxlcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9FbmNv
ZGluZ1RhYmxlcy5oCmluZGV4IGRmOTNjMWNiMGI2Y2Q0NzQ3MGJkNmNiODM4N2FmZTgxODk3NzAy
ZTQuLmQwMDMyYjcxMzdmMGRjYzgxZDU3YTk3Mzk5Nzk1M2Q5MWMwNTc2ZjQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvRW5jb2RpbmdUYWJsZXMuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0VuY29kaW5nVGFibGVzLmgKQEAgLTI1LDcgKzI1LDEx
IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGl0
ZXJhdG9yPgogI2luY2x1ZGUgPHVuaWNvZGUvdW1hY2hpbmUuaD4KKyNpbmNsdWRlIDx1dGlsaXR5
PgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTM1LDQgKzM5LDg5IEBAIGV4dGVybiBjb25zdCBzdGQ6OnBhaXI8VUNoYXIzMiwgdWludDE2X3Q+
IGJpZzVFbmNvZGluZ01hcFsxNDY4Nl07CiBleHRlcm4gY29uc3Qgc3RkOjpwYWlyPHVpbnQxNl90
LCBVQ2hhcjMyPiBiaWc1RGVjb2RpbmdFeHRyYXNbMzkwNF07CiBleHRlcm4gY29uc3Qgc3RkOjpw
YWlyPHVpbnQxNl90LCBVQ2hhcj4gZXVjS1JEZWNvZGluZ0luZGV4WzE3MDQ4XTsKIAordm9pZCBj
aGVja0VuY29kaW5nVGFibGVJbnZhcmlhbnRzKCk7CisKKy8vIEZ1bmN0aW9ucyBmb3IgdXNpbmcg
c29ydGVkIGFycmF5cyBvZiBwYWlycyBhcyBhIG1hcC4KKy8vIEZJWE1FOiBDb25zaWRlciBtb3Zp
bmcgdGhlc2Ugc29tZXdoZXJlIGVsc2Ugc2luY2UgdGhleSBhcmUgbGlrZWx5IHVzZWZ1bCBmb3Ig
YnkgbW9yZSB0aGFuIGp1c3QgZW5jb2RpbmcgdGFibGVzLgordGVtcGxhdGU8dHlwZW5hbWUgQ29s
bGVjdGlvblR5cGU+IHZvaWQgc29ydEJ5Rmlyc3QoQ29sbGVjdGlvblR5cGUmKTsKK3RlbXBsYXRl
PHR5cGVuYW1lIENvbGxlY3Rpb25UeXBlPiBib29sIGlzU29ydGVkQnlGaXJzdChjb25zdCBDb2xs
ZWN0aW9uVHlwZSYpOwordGVtcGxhdGU8dHlwZW5hbWUgQ29sbGVjdGlvblR5cGU+IGJvb2wgc29y
dGVkRmlyc3RzQXJlVW5pcXVlKGNvbnN0IENvbGxlY3Rpb25UeXBlJik7Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBDb2xsZWN0aW9uVHlwZSwgdHlwZW5hbWUgS2V5VHlwZT4gc3RhdGljIGF1dG8gZmluZEZp
cnN0SW5Tb3J0ZWRQYWlycyhjb25zdCBDb2xsZWN0aW9uVHlwZSYgY29sbGVjdGlvbiwgY29uc3Qg
S2V5VHlwZSYpIC0+IE9wdGlvbmFsPGRlY2x0eXBlKHN0ZDo6YmVnaW4oY29sbGVjdGlvbiktPnNl
Y29uZCk+OwordGVtcGxhdGU8dHlwZW5hbWUgQ29sbGVjdGlvblR5cGUsIHR5cGVuYW1lIEtleVR5
cGU+IHN0YXRpYyBhdXRvIGZpbmRMYXN0SW5Tb3J0ZWRQYWlycyhjb25zdCBDb2xsZWN0aW9uVHlw
ZSYgY29sbGVjdGlvbiwgY29uc3QgS2V5VHlwZSYpIC0+IE9wdGlvbmFsPGRlY2x0eXBlKHN0ZDo6
YmVnaW4oY29sbGVjdGlvbiktPnNlY29uZCk+OwordGVtcGxhdGU8dHlwZW5hbWUgQ29sbGVjdGlv
blR5cGUsIHR5cGVuYW1lIEtleVR5cGU+IHN0YXRpYyBhdXRvIGZpbmRJblNvcnRlZFBhaXJzKGNv
bnN0IENvbGxlY3Rpb25UeXBlJiBjb2xsZWN0aW9uLCBjb25zdCBLZXlUeXBlJikgLT4gc3RkOjpw
YWlyPGRlY2x0eXBlKHN0ZDo6YmVnaW4oY29sbGVjdGlvbikpLCBkZWNsdHlwZShzdGQ6OmJlZ2lu
KGNvbGxlY3Rpb24pKT47CisKKyNpZiAhQVNTRVJUX0VOQUJMRUQKK2lubGluZSB2b2lkIGNoZWNr
RW5jb2RpbmdUYWJsZUludmFyaWFudHMoKSB7IH0KKyNlbmRpZgorCitzdHJ1Y3QgQ29tcGFyZUZp
cnN0IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlQSwgdHlwZW5hbWUgVHlwZUI+IGJvb2wg
b3BlcmF0b3IoKShjb25zdCBUeXBlQSYgYSwgY29uc3QgVHlwZUImIGIpCisgICAgeworICAgICAg
ICByZXR1cm4gYS5maXJzdCA8IGIuZmlyc3Q7CisgICAgfQorfTsKKworc3RydWN0IEVxdWFsRmly
c3QgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGVBLCB0eXBlbmFtZSBUeXBlQj4gYm9vbCBv
cGVyYXRvcigpKGNvbnN0IFR5cGVBJiBhLCBjb25zdCBUeXBlQiYgYikKKyAgICB7CisgICAgICAg
IHJldHVybiBhLmZpcnN0ID09IGIuZmlyc3Q7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IEZpcnN0QWRhcHRlciB7CisgICAgY29uc3QgVCYgZmlyc3Q7Cit9OwordGVt
cGxhdGU8dHlwZW5hbWUgVD4gRmlyc3RBZGFwdGVyPFQ+IG1ha2VGaXJzdEFkYXB0ZXIoY29uc3Qg
VCYgdmFsdWUpCit7CisgICAgcmV0dXJuIHsgdmFsdWUgfTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgQ29sbGVjdGlvblR5cGU+IHZvaWQgc29ydEJ5Rmlyc3QoQ29sbGVjdGlvblR5cGUmIGNvbGxl
Y3Rpb24pCit7CisgICAgc3RkOjpzb3J0KHN0ZDo6YmVnaW4oY29sbGVjdGlvbiksIHN0ZDo6ZW5k
KGNvbGxlY3Rpb24pLCBDb21wYXJlRmlyc3QgeyB9KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
Q29sbGVjdGlvblR5cGU+IGJvb2wgaXNTb3J0ZWRCeUZpcnN0KGNvbnN0IENvbGxlY3Rpb25UeXBl
JiBjb2xsZWN0aW9uKQoreworICAgIHJldHVybiBzdGQ6OmlzX3NvcnRlZChzdGQ6OmJlZ2luKGNv
bGxlY3Rpb24pLCBzdGQ6OmVuZChjb2xsZWN0aW9uKSwgQ29tcGFyZUZpcnN0IHsgfSk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIENvbGxlY3Rpb25UeXBlPiBib29sIHNvcnRlZEZpcnN0c0FyZVVu
aXF1ZShjb25zdCBDb2xsZWN0aW9uVHlwZSYgY29sbGVjdGlvbikKK3sKKyAgICByZXR1cm4gc3Rk
OjphZGphY2VudF9maW5kKHN0ZDo6YmVnaW4oY29sbGVjdGlvbiksIHN0ZDo6ZW5kKGNvbGxlY3Rp
b24pLCBFcXVhbEZpcnN0IHsgfSkgPT0gc3RkOjplbmQoY29sbGVjdGlvbik7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIENvbGxlY3Rpb25UeXBlLCB0eXBlbmFtZSBLZXlUeXBlPiBzdGF0aWMgYXV0
byBmaW5kRmlyc3RJblNvcnRlZFBhaXJzKGNvbnN0IENvbGxlY3Rpb25UeXBlJiBjb2xsZWN0aW9u
LCBjb25zdCBLZXlUeXBlJiBrZXkpIC0+IE9wdGlvbmFsPGRlY2x0eXBlKHN0ZDo6YmVnaW4oY29s
bGVjdGlvbiktPnNlY29uZCk+Cit7CisgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2ludGVncmFs
X3Y8S2V5VHlwZT4pIHsKKyAgICAgICAgaWYgKGtleSAhPSBkZWNsdHlwZShzdGQ6OmJlZ2luKGNv
bGxlY3Rpb24pLT5maXJzdCkoa2V5KSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CisgICAgfQorICAgIGF1dG8gaXRlcmF0b3IgPSBzdGQ6Omxvd2VyX2JvdW5kKHN0ZDo6YmVnaW4o
Y29sbGVjdGlvbiksIHN0ZDo6ZW5kKGNvbGxlY3Rpb24pLCBtYWtlRmlyc3RBZGFwdGVyKGtleSks
IENvbXBhcmVGaXJzdCB7IH0pOworICAgIGlmIChpdGVyYXRvciA9PSBzdGQ6OmVuZChjb2xsZWN0
aW9uKSB8fCBrZXkgPCBpdGVyYXRvci0+Zmlyc3QpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CisgICAgcmV0dXJuIGl0ZXJhdG9yLT5zZWNvbmQ7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IENvbGxlY3Rpb25UeXBlLCB0eXBlbmFtZSBLZXlUeXBlPiBzdGF0aWMgYXV0byBmaW5kTGFzdElu
U29ydGVkUGFpcnMoY29uc3QgQ29sbGVjdGlvblR5cGUmIGNvbGxlY3Rpb24sIGNvbnN0IEtleVR5
cGUmIGtleSkgLT4gT3B0aW9uYWw8ZGVjbHR5cGUoc3RkOjpiZWdpbihjb2xsZWN0aW9uKS0+c2Vj
b25kKT4KK3sKKyAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfaW50ZWdyYWxfdjxLZXlUeXBlPikg
eworICAgICAgICBpZiAoa2V5ICE9IGRlY2x0eXBlKHN0ZDo6YmVnaW4oY29sbGVjdGlvbiktPmZp
cnN0KShrZXkpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICB9CisgICAg
YXV0byBpdGVyYXRvciA9IHN0ZDo6dXBwZXJfYm91bmQoc3RkOjpiZWdpbihjb2xsZWN0aW9uKSwg
c3RkOjplbmQoY29sbGVjdGlvbiksIG1ha2VGaXJzdEFkYXB0ZXIoa2V5KSwgQ29tcGFyZUZpcnN0
IHsgfSk7CisgICAgaWYgKGl0ZXJhdG9yID09IHN0ZDo6YmVnaW4oY29sbGVjdGlvbikgfHwgKC0t
aXRlcmF0b3IpLT5maXJzdCA8IGtleSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAg
ICByZXR1cm4gaXRlcmF0b3ItPnNlY29uZDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ29sbGVj
dGlvblR5cGUsIHR5cGVuYW1lIEtleVR5cGU+IHN0YXRpYyBhdXRvIGZpbmRJblNvcnRlZFBhaXJz
KGNvbnN0IENvbGxlY3Rpb25UeXBlJiBjb2xsZWN0aW9uLCBjb25zdCBLZXlUeXBlJiBrZXkpIC0+
IHN0ZDo6cGFpcjxkZWNsdHlwZShzdGQ6OmJlZ2luKGNvbGxlY3Rpb24pKSwgZGVjbHR5cGUoc3Rk
OjpiZWdpbihjb2xsZWN0aW9uKSk+Cit7CisgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2ludGVn
cmFsX3Y8S2V5VHlwZT4pIHsKKyAgICAgICAgaWYgKGtleSAhPSBkZWNsdHlwZShzdGQ6OmJlZ2lu
KGNvbGxlY3Rpb24pLT5maXJzdCkoa2V5KSkKKyAgICAgICAgICAgIHJldHVybiB7IHN0ZDo6ZW5k
KGNvbGxlY3Rpb24pLCBzdGQ6OmVuZChjb2xsZWN0aW9uKSB9OworICAgIH0KKyAgICByZXR1cm4g
c3RkOjplcXVhbF9yYW5nZShzdGQ6OmJlZ2luKGNvbGxlY3Rpb24pLCBzdGQ6OmVuZChjb2xsZWN0
aW9uKSwgbWFrZUZpcnN0QWRhcHRlcihrZXkpLCBDb21wYXJlRmlyc3QgeyB9KTsKK30KKwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNDSksuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNDSksuY3BwCmluZGV4IDY4
MDdmMzcyNzQxMzFjNGMxYTFmYmU5NmUwN2M3MWNhNWY3OGU4ZGMuLmU2MzU0M2Y5MjE5YTNkNTYw
MzlkNTJkOTEyMGNiZDRjOWI3YTc2OTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvVGV4dENvZGVjQ0pLLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L1RleHRDb2RlY0NKSy5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJUZXh0Q29k
ZWNDSksuaCIKIAogI2luY2x1ZGUgIkVuY29kaW5nVGFibGVzLmgiCisjaW5jbHVkZSA8bXV0ZXg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvQ29kZVBvaW50SXRlcmF0b3IuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFt
ZXMuaD4KQEAgLTQ0LDYgKzQ1LDcgQEAgZW51bSBjbGFzcyBUZXh0Q29kZWNDSks6OkVuY29kaW5n
IDogdWludDhfdCB7CiBUZXh0Q29kZWNDSks6OlRleHRDb2RlY0NKSyhFbmNvZGluZyBlbmNvZGlu
ZykKICAgICA6IG1fZW5jb2RpbmcoZW5jb2RpbmcpCiB7CisgICAgY2hlY2tFbmNvZGluZ1RhYmxl
SW52YXJpYW50cygpOwogfQogCiB2b2lkIFRleHRDb2RlY0NKSzo6cmVnaXN0ZXJFbmNvZGluZ05h
bWVzKEVuY29kaW5nTmFtZVJlZ2lzdHJhciByZWdpc3RyYXIpCkBAIC0xMjQsMTYgKzEyNiwxNiBA
QCB2b2lkIFRleHRDb2RlY0NKSzo6cmVnaXN0ZXJDb2RlY3MoVGV4dENvZGVjUmVnaXN0cmFyIHJl
Z2lzdHJhcikKIHVzaW5nIEpJUzAyMDhEZWNvZGVJbmRleCA9IHN0ZDo6YXJyYXk8c3RkOjpwYWly
PHVpbnQxNl90LCBVQ2hhcj4sIHN0ZDo6c2l6ZShqaXMwMjA4KT47CiBzdGF0aWMgY29uc3QgSklT
MDIwOERlY29kZUluZGV4JiBqaXMwMjA4RGVjb2RlSW5kZXgoKQogewotICAgIHN0YXRpYyBhdXRv
JiB0YWJsZSA9ICpbXSB7Ci0gICAgICAgIGF1dG8qIHRhYmxlID0gbmV3IEpJUzAyMDhEZWNvZGVJ
bmRleDsKKyAgICBzdGF0aWMgSklTMDIwOERlY29kZUluZGV4KiB0YWJsZTsKKyAgICBzdGF0aWMg
c3RkOjpvbmNlX2ZsYWcgb25jZTsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlLCBbJl0geworICAg
ICAgICB0YWJsZSA9IG5ldyBKSVMwMjA4RGVjb2RlSW5kZXg7CiAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgc3RkOjpzaXplKGppczAyMDgpOyBpKyspCiAgICAgICAgICAgICAoKnRhYmxl
KVtpXSA9IHsgamlzMDIwOFtpXS5zZWNvbmQsIGppczAyMDhbaV0uZmlyc3QgfTsKLSAgICAgICAg
c3RkOjpzb3J0KHRhYmxlLT5iZWdpbigpLCB0YWJsZS0+ZW5kKCksIFtdIChhdXRvJiBhLCBhdXRv
JiBiKSB7Ci0gICAgICAgICAgICByZXR1cm4gYS5maXJzdCA8IGIuZmlyc3Q7Ci0gICAgICAgIH0p
OwotICAgICAgICByZXR1cm4gdGFibGU7Ci0gICAgfSgpOwotICAgIHJldHVybiB0YWJsZTsKKyAg
ICAgICAgc29ydEJ5Rmlyc3QoKnRhYmxlKTsKKyAgICAgICAgQVNTRVJUKHNvcnRlZEZpcnN0c0Fy
ZVVuaXF1ZSgqdGFibGUpKTsKKyAgICB9KTsKKyAgICByZXR1cm4gKnRhYmxlOwogfQogCiBTdHJp
bmcgVGV4dENvZGVjQ0pLOjpkZWNvZGVDb21tb24oY29uc3QgdWludDhfdCogYnl0ZXMsIHNpemVf
dCBsZW5ndGgsIGJvb2wgZmx1c2gsIGJvb2wgc3RvcE9uRXJyb3IsIGJvb2wmIHNhd0Vycm9yLCBj
b25zdCBGdW5jdGlvbjxTYXdFcnJvcih1aW50OF90LCBTdHJpbmdCdWlsZGVyJik+JiBieXRlUGFy
c2VyKQpAQCAtMTc5LDI3ICsxODEsMTIgQEAgU3RyaW5nIFRleHRDb2RlY0NKSzo6ZGVjb2RlQ29t
bW9uKGNvbnN0IHVpbnQ4X3QqIGJ5dGVzLCBzaXplX3QgbGVuZ3RoLCBib29sIGZsdXMKIAogc3Rh
dGljIE9wdGlvbmFsPFVDaGFyPiBjb2RlUG9pbnRKSVMwMjA4KHVpbnQxNl90IHBvaW50ZXIpCiB7
Ci0gICAgYXV0byYgaW5kZXggPSBqaXMwMjA4RGVjb2RlSW5kZXgoKTsKLSAgICBhdXRvIHJhbmdl
ID0gc3RkOjplcXVhbF9yYW5nZShpbmRleC5iZWdpbigpLCBpbmRleC5lbmQoKSwgc3RkOjpwYWly
PHVpbnQxNl90LCBVQ2hhcj4ocG9pbnRlciwgMCksIFtdKGNvbnN0IGF1dG8mIGEsIGNvbnN0IGF1
dG8mIGIpIHsKLSAgICAgICAgcmV0dXJuIGEuZmlyc3QgPCBiLmZpcnN0OwotICAgIH0pOwotICAg
IGlmIChyYW5nZS5maXJzdCAhPSByYW5nZS5zZWNvbmQpIHsKLSAgICAgICAgQVNTRVJUKHJhbmdl
LmZpcnN0ICsgMSA9PSByYW5nZS5zZWNvbmQpOwotICAgICAgICByZXR1cm4gcmFuZ2UuZmlyc3Qt
PnNlY29uZDsKLSAgICB9Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gZmlu
ZEZpcnN0SW5Tb3J0ZWRQYWlycyhqaXMwMjA4RGVjb2RlSW5kZXgoKSwgcG9pbnRlcik7CiB9CiAK
IHN0YXRpYyBPcHRpb25hbDxVQ2hhcj4gY29kZVBvaW50SklTMDIxMih1aW50MTZfdCBwb2ludGVy
KQogewotICAgIGF1dG8gcmFuZ2UgPSBzdGQ6OmVxdWFsX3JhbmdlKGppczAyMTIsIGppczAyMTIg
KyBzdGQ6OnNpemUoamlzMDIxMiksIHN0ZDo6cGFpcjx1aW50MTZfdCwgVUNoYXI+KHBvaW50ZXIs
IDApLCBbXShjb25zdCBhdXRvJiBhLCBjb25zdCBhdXRvJiBiKSB7Ci0gICAgICAgIHJldHVybiBh
LmZpcnN0IDwgYi5maXJzdDsKLSAgICB9KTsKLSAgICBpZiAocmFuZ2UuZmlyc3QgIT0gcmFuZ2Uu
c2Vjb25kKSB7Ci0gICAgICAgIEFTU0VSVChyYW5nZS5maXJzdCArIDEgPT0gcmFuZ2Uuc2Vjb25k
KTsKLSAgICAgICAgcmV0dXJuIHJhbmdlLmZpcnN0LT5zZWNvbmQ7Ci0gICAgfQotICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIGZpbmRGaXJzdEluU29ydGVkUGFpcnMoamlzMDIx
MiwgcG9pbnRlcik7CiB9CiAKIC8vIGh0dHBzOi8vZW5jb2Rpbmcuc3BlYy53aGF0d2cub3JnLyNl
dWMtanAtZGVjb2RlcgpAQCAtMjI4LDcgKzIxNSw3IEBAIFN0cmluZyBUZXh0Q29kZWNDSks6OmV1
Y0pQRGVjb2RlKGNvbnN0IHVpbnQ4X3QqIGJ5dGVzLCBzaXplX3QgbGVuZ3RoLCBib29sIGZsdXNo
CiAgICAgICAgICAgICByZXR1cm4gU2F3RXJyb3I6OlllczsKICAgICAgICAgfQogICAgICAgICBp
ZiAoaXNBU0NJSShieXRlKSkgewotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChzdGF0aWNfY2Fz
dDxMQ2hhcj4oYnl0ZSkpOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChzdGF0aWNfY2FzdDxj
aGFyPihieXRlKSk7CiAgICAgICAgICAgICByZXR1cm4gU2F3RXJyb3I6Ok5vOwogICAgICAgICB9
CiAgICAgICAgIGlmIChieXRlID09IDB4OEUgfHwgYnl0ZSA9PSAweDhGIHx8IChieXRlID49IDB4
QTEgJiYgYnl0ZSA8PSAweEZFKSkgewpAQCAtMjQ3LDQyICsyMzQsMzQgQEAgc3RhdGljIFZlY3Rv
cjx1aW50OF90PiBldWNKUEVuY29kZShTdHJpbmdWaWV3IHN0cmluZywgRnVuY3Rpb248dm9pZChV
Q2hhcjMyLCBWZWMKIAogICAgIGF1dG8gY2hhcmFjdGVycyA9IHN0cmluZy51cGNvbnZlcnRlZENo
YXJhY3RlcnMoKTsKICAgICBmb3IgKFdURjo6Q29kZVBvaW50SXRlcmF0b3I8VUNoYXI+IGl0ZXJh
dG9yKGNoYXJhY3RlcnMuZ2V0KCksIGNoYXJhY3RlcnMuZ2V0KCkgKyBzdHJpbmcubGVuZ3RoKCkp
OyAhaXRlcmF0b3IuYXRFbmQoKTsgKytpdGVyYXRvcikgewotICAgICAgICBhdXRvIGMgPSAqaXRl
cmF0b3I7Ci0gICAgICAgIGlmIChpc0FTQ0lJKGMpKSB7Ci0gICAgICAgICAgICByZXN1bHQuYXBw
ZW5kKGMpOworICAgICAgICBhdXRvIGNvZGVQb2ludCA9ICppdGVyYXRvcjsKKyAgICAgICAgaWYg
KGlzQVNDSUkoY29kZVBvaW50KSkgeworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChjb2RlUG9p
bnQpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGMgPT0g
MHgwMEE1KSB7CisgICAgICAgIGlmIChjb2RlUG9pbnQgPT0gMHgwMEE1KSB7CiAgICAgICAgICAg
ICByZXN1bHQuYXBwZW5kKDB4NUMpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0K
LSAgICAgICAgaWYgKGMgPT0gMHgyMDNFKSB7CisgICAgICAgIGlmIChjb2RlUG9pbnQgPT0gMHgy
MDNFKSB7CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKDB4N0UpOwogICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGMgPj0gMHhGRjYxICYmIGMgPD0gMHhGRjlG
KSB7CisgICAgICAgIGlmIChjb2RlUG9pbnQgPj0gMHhGRjYxICYmIGNvZGVQb2ludCA8PSAweEZG
OUYpIHsKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMHg4RSk7Ci0gICAgICAgICAgICByZXN1
bHQuYXBwZW5kKGMgLSAweEZGNjEgKyAweEExKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQo
Y29kZVBvaW50IC0gMHhGRjYxICsgMHhBMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgfQotICAgICAgICBpZiAoYyA9PSAweDIyMTIpCi0gICAgICAgICAgICBjID0gMHhGRjBEOwor
ICAgICAgICBpZiAoY29kZVBvaW50ID09IDB4MjIxMikKKyAgICAgICAgICAgIGNvZGVQb2ludCA9
IDB4RkYwRDsKIAotICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8VUNoYXI+KGMpICE9IGMpIHsKLSAg
ICAgICAgICAgIHVuZW5jb2RhYmxlSGFuZGxlcihjLCByZXN1bHQpOwotICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGF1dG8gcG9pbnRlclJhbmdlID0g
c3RkOjplcXVhbF9yYW5nZShzdGQ6OmJlZ2luKGppczAyMDgpLCBzdGQ6OmVuZChqaXMwMjA4KSwg
c3RkOjpwYWlyPFVDaGFyLCB1aW50MTZfdD4oc3RhdGljX2Nhc3Q8VUNoYXI+KGMpLCAwKSwgW10o
Y29uc3QgYXV0byYgYSwgY29uc3QgYXV0byYgYikgewotICAgICAgICAgICAgcmV0dXJuIGEuZmly
c3QgPCBiLmZpcnN0OwotICAgICAgICB9KTsKLSAgICAgICAgaWYgKHBvaW50ZXJSYW5nZS5maXJz
dCA9PSBwb2ludGVyUmFuZ2Uuc2Vjb25kKSB7Ci0gICAgICAgICAgICB1bmVuY29kYWJsZUhhbmRs
ZXIoYywgcmVzdWx0KTsKKyAgICAgICAgYXV0byBwb2ludGVyID0gZmluZExhc3RJblNvcnRlZFBh
aXJzKGppczAyMDgsIGNvZGVQb2ludCk7CisgICAgICAgIGlmICghcG9pbnRlcikgeworICAgICAg
ICAgICAgdW5lbmNvZGFibGVIYW5kbGVyKGNvZGVQb2ludCwgcmVzdWx0KTsKICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIHVpbnQxNl90IHBvaW50ZXIgPSAocG9pbnRl
clJhbmdlLnNlY29uZCAtIDEpLT5zZWNvbmQ7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQocG9pbnRl
ciAvIDk0ICsgMHhBMSk7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQocG9pbnRlciAlIDk0ICsgMHhB
MSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoKnBvaW50ZXIgLyA5NCArIDB4QTEpOworICAgICAg
ICByZXN1bHQuYXBwZW5kKCpwb2ludGVyICUgOTQgKyAweEExKTsKICAgICB9CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KQEAgLTUwNCwxMiArNDgzLDEyIEBAIHN0YXRpYyBWZWN0b3I8dWludDhfdD4g
aXNvMjAyMkpQRW5jb2RlKFN0cmluZ1ZpZXcgc3RyaW5nLCBGdW5jdGlvbjx2b2lkKFVDaGFyMzIs
CiAgICAgRnVuY3Rpb248dm9pZChVQ2hhcjMyKT4gcGFyc2VDb2RlUG9pbnQ7CiAgICAgcGFyc2VD
b2RlUG9pbnQgPSBbJl0gKFVDaGFyMzIgY29kZVBvaW50KSB7CiAgICAgICAgIGlmIChzdGF0ZSA9
PSBTdGF0ZTo6QVNDSUkgJiYgaXNBU0NJSShjb2RlUG9pbnQpKSB7Ci0gICAgICAgICAgICByZXN1
bHQuYXBwZW5kKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGNvZGVQb2ludCkpOworICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZChjb2RlUG9pbnQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAgICAgICAgIGlmIChzdGF0ZSA9PSBTdGF0ZTo6Um9tYW4pIHsKICAgICAgICAgICAgIGlmIChp
c0FTQ0lJKGNvZGVQb2ludCkgJiYgY29kZVBvaW50ICE9IDB4MDA1QyAmJiBjb2RlUG9pbnQgIT0w
eDAwN0UpIHsKLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHN0YXRpY19jYXN0PHVpbnQ4
X3Q+KGNvZGVQb2ludCkpOworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoY29kZVBvaW50
KTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBp
ZiAoY29kZVBvaW50ID09IDB4MDBBNSkgewpAQCAtNTQ1LDE5ICs1MjQsMTIgQEAgc3RhdGljIFZl
Y3Rvcjx1aW50OF90PiBpc28yMDIySlBFbmNvZGUoU3RyaW5nVmlldyBzdHJpbmcsIEZ1bmN0aW9u
PHZvaWQoVUNoYXIzMiwKICAgICAgICAgICAgICAgICAweDMwQzEsIDB4MzBDNCwgMHgzMEM2LCAw
eDMwQzgsIDB4MzBDQSwgMHgzMENCLCAweDMwQ0MsIDB4MzBDRCwgMHgzMENFLCAweDMwQ0YsIDB4
MzBEMiwgMHgzMEQ1LCAweDMwRDgsIDB4MzBEQiwgMHgzMERFLCAweDMwREYsCiAgICAgICAgICAg
ICAgICAgMHgzMEUwLCAweDMwRTEsIDB4MzBFMiwgMHgzMEU0LCAweDMwRTYsIDB4MzBFOCwgMHgz
MEU5LCAweDMwRUEsIDB4MzBFQiwgMHgzMEVDLCAweDMwRUQsIDB4MzBFRiwgMHgzMEYzLCAweDMw
OUIsIDB4MzA5QwogICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoc3Rk
OjpzaXplKGlzbzIwMjJKUEthdGFrYW5hKSA9PSAweEZGOUYgLSAweEZGNjEgKyAxKTsKICAgICAg
ICAgICAgIGNvZGVQb2ludCA9IGlzbzIwMjJKUEthdGFrYW5hW2NvZGVQb2ludCAtIDB4RkY2MV07
CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGF1dG8gY29kZVVuaXQgPSBzdGF0aWNfY2Fz
dDxVQ2hhcj4oY29kZVBvaW50KTsKLSAgICAgICAgaWYgKGNvZGVVbml0ICE9IGNvZGVQb2ludCkg
ewotICAgICAgICAgICAgc3RhdGVmdWxVbmVuY29kYWJsZUhhbmRsZXIoY29kZVBvaW50LCByZXN1
bHQpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBh
dXRvIHJhbmdlID0gc3RkOjplcXVhbF9yYW5nZShzdGQ6OmJlZ2luKGppczAyMDgpLCBzdGQ6OmVu
ZChqaXMwMjA4KSwgc3RkOjpwYWlyPFVDaGFyLCB1aW50MTZfdD4oY29kZVVuaXQsIDApLCBbXShj
b25zdCBhdXRvJiBhLCBjb25zdCBhdXRvJiBiKSB7Ci0gICAgICAgICAgICByZXR1cm4gYS5maXJz
dCA8IGIuZmlyc3Q7Ci0gICAgICAgIH0pOwotICAgICAgICBpZiAocmFuZ2UuZmlyc3QgPT0gcmFu
Z2Uuc2Vjb25kKSB7CisKKyAgICAgICAgYXV0byBwb2ludGVyID0gZmluZExhc3RJblNvcnRlZFBh
aXJzKGppczAyMDgsIGNvZGVQb2ludCk7CisgICAgICAgIGlmICghcG9pbnRlcikgewogICAgICAg
ICAgICAgc3RhdGVmdWxVbmVuY29kYWJsZUhhbmRsZXIoY29kZVBvaW50LCByZXN1bHQpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC01NjksOSArNTQxLDggQEAgc3RhdGljIFZl
Y3Rvcjx1aW50OF90PiBpc28yMDIySlBFbmNvZGUoU3RyaW5nVmlldyBzdHJpbmcsIEZ1bmN0aW9u
PHZvaWQoVUNoYXIzMiwKICAgICAgICAgICAgIHBhcnNlQ29kZVBvaW50KGNvZGVQb2ludCk7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgdWludDE2X3QgcG9pbnRlciA9
IChyYW5nZS5zZWNvbmQgLSAxKS0+c2Vjb25kOwotICAgICAgICByZXN1bHQuYXBwZW5kKHBvaW50
ZXIgLyA5NCArIDB4MjEpOwotICAgICAgICByZXN1bHQuYXBwZW5kKHBvaW50ZXIgJSA5NCArIDB4
MjEpOworICAgICAgICByZXN1bHQuYXBwZW5kKCpwb2ludGVyIC8gOTQgKyAweDIxKTsKKyAgICAg
ICAgcmVzdWx0LmFwcGVuZCgqcG9pbnRlciAlIDk0ICsgMHgyMSk7CiAgICAgfTsKICAgICAKICAg
ICBhdXRvIGNoYXJhY3RlcnMgPSBzdHJpbmcudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7CkBAIC02
NTAsMjAgKzYyMSwxMiBAQCBzdGF0aWMgVmVjdG9yPHVpbnQ4X3Q+IHNoaWZ0SklTRW5jb2RlKFN0
cmluZ1ZpZXcgc3RyaW5nLCBGdW5jdGlvbjx2b2lkKFVDaGFyMzIsCiAgICAgICAgIGlmIChjb2Rl
UG9pbnQgPT0gMHgyMjEyKQogICAgICAgICAgICAgY29kZVBvaW50ID0gMHhGRjBEOwogICAgICAg
ICAKLSAgICAgICAgYXV0byBjb2RlVW5pdCA9IHN0YXRpY19jYXN0PFVDaGFyPihjb2RlUG9pbnQp
OwotICAgICAgICBpZiAoY29kZVVuaXQgIT0gY29kZVBvaW50KSB7Ci0gICAgICAgICAgICB1bmVu
Y29kYWJsZUhhbmRsZXIoY29kZVBvaW50LCByZXN1bHQpOwotICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGF1dG8gcmFuZ2UgPSBzdGQ6OmVxdWFsX3Jh
bmdlKHN0ZDo6YmVnaW4oamlzMDIwOCksIHN0ZDo6ZW5kKGppczAyMDgpLCBzdGQ6OnBhaXI8VUNo
YXIsIHVpbnQxNl90Pihjb2RlVW5pdCwgMCksIFtdKGNvbnN0IGF1dG8mIGEsIGNvbnN0IGF1dG8m
IGIpIHsKLSAgICAgICAgICAgIHJldHVybiBhLmZpcnN0IDwgYi5maXJzdDsKLSAgICAgICAgfSk7
CisgICAgICAgIGF1dG8gcmFuZ2UgPSBmaW5kSW5Tb3J0ZWRQYWlycyhqaXMwMjA4LCBjb2RlUG9p
bnQpOwogICAgICAgICBpZiAocmFuZ2UuZmlyc3QgPT0gcmFuZ2Uuc2Vjb25kKSB7CiAgICAgICAg
ICAgICB1bmVuY29kYWJsZUhhbmRsZXIoY29kZVBvaW50LCByZXN1bHQpOwogICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgQVNTRVJUKHJhbmdlLmZp
cnN0ICsgMyA+PSByYW5nZS5zZWNvbmQpOwogICAgICAgICBmb3IgKGF1dG8qIHBhaXIgPSByYW5n
ZS5zZWNvbmQgLSAxOyBwYWlyID49IHJhbmdlLmZpcnN0OyBwYWlyLS0pIHsKICAgICAgICAgICAg
IHVpbnQxNl90IHBvaW50ZXIgPSBwYWlyLT5zZWNvbmQ7CkBAIC02ODQsMTYgKzY0NywxNiBAQCBz
dGF0aWMgVmVjdG9yPHVpbnQ4X3Q+IHNoaWZ0SklTRW5jb2RlKFN0cmluZ1ZpZXcgc3RyaW5nLCBG
dW5jdGlvbjx2b2lkKFVDaGFyMzIsCiB1c2luZyBFVUNLUkVuY29kaW5nSW5kZXggPSBzdGQ6OmFy
cmF5PHN0ZDo6cGFpcjxVQ2hhciwgdWludDE2X3Q+LCBzdGQ6OnNpemUoZXVjS1JEZWNvZGluZ0lu
ZGV4KT47CiBzdGF0aWMgY29uc3QgRVVDS1JFbmNvZGluZ0luZGV4JiBldWNLUkVuY29kaW5nSW5k
ZXgoKQogewotICAgIHN0YXRpYyBhdXRvJiB0YWJsZSA9ICpbXSB7Ci0gICAgICAgIGF1dG8gdGFi
bGUgPSBuZXcgRVVDS1JFbmNvZGluZ0luZGV4OworICAgIHN0YXRpYyBFVUNLUkVuY29kaW5nSW5k
ZXgqIHRhYmxlOworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlOworICAgIHN0ZDo6Y2Fs
bF9vbmNlKG9uY2UsIFsmXSB7CisgICAgICAgIHRhYmxlID0gbmV3IEVVQ0tSRW5jb2RpbmdJbmRl
eDsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdGQ6OnNpemUoZXVjS1JEZWNvZGlu
Z0luZGV4KTsgaSsrKQogICAgICAgICAgICAgKCp0YWJsZSlbaV0gPSB7IGV1Y0tSRGVjb2RpbmdJ
bmRleFtpXS5zZWNvbmQsIGV1Y0tSRGVjb2RpbmdJbmRleFtpXS5maXJzdCB9OwotICAgICAgICBz
dGQ6OnNvcnQodGFibGUtPmJlZ2luKCksIHRhYmxlLT5lbmQoKSwgW10gKGF1dG8mIGEsIGF1dG8m
IGIpIHsKLSAgICAgICAgICAgIHJldHVybiBhLmZpcnN0IDwgYi5maXJzdDsKLSAgICAgICAgfSk7
Ci0gICAgICAgIHJldHVybiB0YWJsZTsKLSAgICB9KCk7Ci0gICAgcmV0dXJuIHRhYmxlOworICAg
ICAgICBzb3J0QnlGaXJzdCgqdGFibGUpOworICAgICAgICBBU1NFUlQoc29ydGVkRmlyc3RzQXJl
VW5pcXVlKCp0YWJsZSkpOworICAgIH0pOworICAgIHJldHVybiAqdGFibGU7CiB9CiAKIC8vIGh0
dHBzOi8vZW5jb2Rpbmcuc3BlYy53aGF0d2cub3JnLyNldWMta3ItZW5jb2RlcgpAQCAtNzA2LDI2
ICs2NjksMTcgQEAgc3RhdGljIFZlY3Rvcjx1aW50OF90PiBldWNLUkVuY29kZShTdHJpbmdWaWV3
IHN0cmluZywgRnVuY3Rpb248dm9pZChVQ2hhcjMyLCBWZWMKICAgICBmb3IgKFdURjo6Q29kZVBv
aW50SXRlcmF0b3I8VUNoYXI+IGl0ZXJhdG9yKGNoYXJhY3RlcnMuZ2V0KCksIGNoYXJhY3RlcnMu
Z2V0KCkgKyBzdHJpbmcubGVuZ3RoKCkpOyAhaXRlcmF0b3IuYXRFbmQoKTsgKytpdGVyYXRvcikg
ewogICAgICAgICBhdXRvIGNvZGVQb2ludCA9ICppdGVyYXRvcjsKICAgICAgICAgaWYgKGlzQVND
SUkoY29kZVBvaW50KSkgewotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChzdGF0aWNfY2FzdDx1
aW50OF90Pihjb2RlUG9pbnQpKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoY29kZVBvaW50
KTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBh
dXRvIGNvZGVVbml0ID0gc3RhdGljX2Nhc3Q8VUNoYXI+KGNvZGVQb2ludCk7Ci0gICAgICAgIGlm
IChjb2RlVW5pdCAhPSBjb2RlUG9pbnQpIHsKKyAgICAgICAgYXV0byBwb2ludGVyID0gZmluZEZp
cnN0SW5Tb3J0ZWRQYWlycyhldWNLUkVuY29kaW5nSW5kZXgoKSwgY29kZVBvaW50KTsKKyAgICAg
ICAgaWYgKCFwb2ludGVyKSB7CiAgICAgICAgICAgICB1bmVuY29kYWJsZUhhbmRsZXIoY29kZVBv
aW50LCByZXN1bHQpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAg
YXV0byYgaW5kZXggPSBldWNLUkVuY29kaW5nSW5kZXgoKTsKLSAgICAgICAgYXV0byByYW5nZSA9
IHN0ZDo6ZXF1YWxfcmFuZ2UoaW5kZXguYmVnaW4oKSwgaW5kZXguZW5kKCksIHN0ZDo6cGFpcjxV
Q2hhciwgdWludDE2X3Q+KGNvZGVQb2ludCwgMCksIFtdKGNvbnN0IGF1dG8mIGEsIGNvbnN0IGF1
dG8mIGIpIHsKLSAgICAgICAgICAgIHJldHVybiBhLmZpcnN0IDwgYi5maXJzdDsKLSAgICAgICAg
fSk7Ci0gICAgICAgIGlmIChyYW5nZS5maXJzdCA9PSByYW5nZS5zZWNvbmQpIHsKLSAgICAgICAg
ICAgIHVuZW5jb2RhYmxlSGFuZGxlcihjb2RlUG9pbnQsIHJlc3VsdCk7Ci0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgfQotICAgICAgICB1aW50MTZfdCBwb2ludGVyID0gcmFuZ2UuZmly
c3QtPnNlY29uZDsKLSAgICAgICAgcmVzdWx0LmFwcGVuZChwb2ludGVyIC8gMTkwICsgMHg4MSk7
Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQocG9pbnRlciAlIDE5MCArIDB4NDEpOworICAgICAgICBy
ZXN1bHQuYXBwZW5kKCpwb2ludGVyIC8gMTkwICsgMHg4MSk7CisgICAgICAgIHJlc3VsdC5hcHBl
bmQoKnBvaW50ZXIgJSAxOTAgKyAweDQxKTsKICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
QEAgLTczNiwxMiArNjkwLDggQEAgU3RyaW5nIFRleHRDb2RlY0NKSzo6ZXVjS1JEZWNvZGUoY29u
c3QgdWludDhfdCogYnl0ZXMsIHNpemVfdCBsZW5ndGgsIGJvb2wgZmx1c2gKICAgICByZXR1cm4g
ZGVjb2RlQ29tbW9uKGJ5dGVzLCBsZW5ndGgsIGZsdXNoLCBzdG9wT25FcnJvciwgc2F3RXJyb3Is
IFt0aGlzXSAodWludDhfdCBieXRlLCBTdHJpbmdCdWlsZGVyJiByZXN1bHQpIHsKICAgICAgICAg
aWYgKHVpbnQ4X3QgbGVhZCA9IHN0ZDo6ZXhjaGFuZ2UobV9sZWFkLCAweDAwKSkgewogICAgICAg
ICAgICAgaWYgKGJ5dGUgPj0gMHg0MSAmJiBieXRlIDw9IDB4RkUpIHsKLSAgICAgICAgICAgICAg
ICB1aW50MTZfdCBwb2ludGVyID0gKGxlYWQgLSAweDgxKSAqIDE5MCArIGJ5dGUgLSAweDQxOwot
ICAgICAgICAgICAgICAgIGF1dG8gcmFuZ2UgPSBzdGQ6OmVxdWFsX3JhbmdlKHN0ZDo6YmVnaW4o
ZXVjS1JEZWNvZGluZ0luZGV4KSwgc3RkOjplbmQoZXVjS1JEZWNvZGluZ0luZGV4KSwgc3RkOjpw
YWlyPHVpbnQxNl90LCBVQ2hhcj4ocG9pbnRlciwgMCksIFtdIChjb25zdCBhdXRvJiBhLCBjb25z
dCBhdXRvJiBiKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBhLmZpcnN0IDwgYi5maXJz
dDsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICBpZiAocmFuZ2UuZmlyc3Qg
IT0gcmFuZ2Uuc2Vjb25kKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQocmFu
Z2UuZmlyc3QtPnNlY29uZCk7CisgICAgICAgICAgICAgICAgaWYgKGF1dG8gY29kZVBvaW50ID0g
ZmluZEZpcnN0SW5Tb3J0ZWRQYWlycyhldWNLUkRlY29kaW5nSW5kZXgsIChsZWFkIC0gMHg4MSkg
KiAxOTAgKyBieXRlIC0gMHg0MSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZCgqY29kZVBvaW50KTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNhd0Vycm9yOjpObzsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC03NjksMjMgKzcxOSwyMCBAQCBz
dGF0aWMgVmVjdG9yPHVpbnQ4X3Q+IGJpZzVFbmNvZGUoU3RyaW5nVmlldyBzdHJpbmcsIEZ1bmN0
aW9uPHZvaWQoVUNoYXIzMiwgVmVjdAogCiAgICAgYXV0byBjaGFyYWN0ZXJzID0gc3RyaW5nLnVw
Y29udmVydGVkQ2hhcmFjdGVycygpOwogICAgIGZvciAoV1RGOjpDb2RlUG9pbnRJdGVyYXRvcjxV
Q2hhcj4gaXRlcmF0b3IoY2hhcmFjdGVycy5nZXQoKSwgY2hhcmFjdGVycy5nZXQoKSArIHN0cmlu
Zy5sZW5ndGgoKSk7ICFpdGVyYXRvci5hdEVuZCgpOyArK2l0ZXJhdG9yKSB7Ci0gICAgICAgIGF1
dG8gYyA9ICppdGVyYXRvcjsKLSAgICAgICAgaWYgKGlzQVNDSUkoYykpIHsKLSAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQoYyk7CisgICAgICAgIGF1dG8gY29kZVBvaW50ID0gKml0ZXJhdG9yOwor
ICAgICAgICBpZiAoaXNBU0NJSShjb2RlUG9pbnQpKSB7CisgICAgICAgICAgICByZXN1bHQuYXBw
ZW5kKGNvZGVQb2ludCk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAg
ICAgIGF1dG8gcG9pbnRlclJhbmdlID0gc3RkOjplcXVhbF9yYW5nZShzdGQ6OmJlZ2luKGJpZzVF
bmNvZGluZ01hcCksIHN0ZDo6ZW5kKGJpZzVFbmNvZGluZ01hcCksIHN0ZDo6cGFpcjxVQ2hhcjMy
LCB1aW50MTZfdD4oYywgMCksIFtdKGNvbnN0IGF1dG8mIGEsIGNvbnN0IGF1dG8mIGIpIHsKLSAg
ICAgICAgICAgIHJldHVybiBhLmZpcnN0IDwgYi5maXJzdDsKLSAgICAgICAgfSk7Ci0gICAgICAg
IAorICAgICAgICBhdXRvIHBvaW50ZXJSYW5nZSA9IGZpbmRJblNvcnRlZFBhaXJzKGJpZzVFbmNv
ZGluZ01hcCwgY29kZVBvaW50KTsKICAgICAgICAgaWYgKHBvaW50ZXJSYW5nZS5maXJzdCA9PSBw
b2ludGVyUmFuZ2Uuc2Vjb25kKSB7Ci0gICAgICAgICAgICB1bmVuY29kYWJsZUhhbmRsZXIoYywg
cmVzdWx0KTsKKyAgICAgICAgICAgIHVuZW5jb2RhYmxlSGFuZGxlcihjb2RlUG9pbnQsIHJlc3Vs
dCk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCiAgICAgICAgIHVpbnQxNl90
IHBvaW50ZXIgPSAwOwotICAgICAgICBpZiAoYyA9PSAweDI1NTAgfHwgYyA9PSAweDI1NUUgfHwg
YyA9PSAweDI1NjEgfHwgYyA9PSAweDI1NkEgfHwgYyA9PSAweDUzNDEgfHwgYyA9PSAweDUzNDUp
CisgICAgICAgIGlmIChjb2RlUG9pbnQgPT0gMHgyNTUwIHx8IGNvZGVQb2ludCA9PSAweDI1NUUg
fHwgY29kZVBvaW50ID09IDB4MjU2MSB8fCBjb2RlUG9pbnQgPT0gMHgyNTZBIHx8IGNvZGVQb2lu
dCA9PSAweDUzNDEgfHwgY29kZVBvaW50ID09IDB4NTM0NSkKICAgICAgICAgICAgIHBvaW50ZXIg
PSAocG9pbnRlclJhbmdlLnNlY29uZCAtIDEpLT5zZWNvbmQ7CiAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIHBvaW50ZXIgPSBwb2ludGVyUmFuZ2UuZmlyc3QtPnNlY29uZDsKQEAgLTg1NCwxOCAr
ODAxLDE4IEBAIEZ1bmN0aW9uPHZvaWQoVUNoYXIzMiwgVmVjdG9yPHVpbnQ4X3Q+Jik+IHVuZW5j
b2RhYmxlSGFuZGxlcihVbmVuY29kYWJsZUhhbmRsaW5nCiB1c2luZyBCaWc1RGVjb2RlSW5kZXgg
PSBzdGQ6OmFycmF5PHN0ZDo6cGFpcjx1aW50MTZfdCwgVUNoYXIzMj4sIHN0ZDo6c2l6ZShiaWc1
RGVjb2RpbmdFeHRyYXMpICsgc3RkOjpzaXplKGJpZzVFbmNvZGluZ01hcCk+Owogc3RhdGljIGNv
bnN0IEJpZzVEZWNvZGVJbmRleCYgYmlnNURlY29kZUluZGV4KCkKIHsKLSAgICBzdGF0aWMgYXV0
byYgdGFibGUgPSAqW10gewotICAgICAgICBhdXRvIHRhYmxlID0gbmV3IEJpZzVEZWNvZGVJbmRl
eDsKKyAgICBzdGF0aWMgQmlnNURlY29kZUluZGV4KiB0YWJsZTsKKyAgICBzdGF0aWMgc3RkOjpv
bmNlX2ZsYWcgb25jZTsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlLCBbJl0geworICAgICAgICB0
YWJsZSA9IG5ldyBCaWc1RGVjb2RlSW5kZXg7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgc3RkOjpzaXplKGJpZzVEZWNvZGluZ0V4dHJhcyk7IGkrKykKICAgICAgICAgICAgICgqdGFi
bGUpW2ldID0gYmlnNURlY29kaW5nRXh0cmFzW2ldOwogICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHN0ZDo6c2l6ZShiaWc1RW5jb2RpbmdNYXApOyBpKyspCiAgICAgICAgICAgICAoKnRh
YmxlKVtpICsgc3RkOjpzaXplKGJpZzVEZWNvZGluZ0V4dHJhcyldID0geyBiaWc1RW5jb2RpbmdN
YXBbaV0uc2Vjb25kLCBiaWc1RW5jb2RpbmdNYXBbaV0uZmlyc3QgfTsKLSAgICAgICAgc3RkOjpz
b3J0KHRhYmxlLT5iZWdpbigpLCB0YWJsZS0+ZW5kKCksIFtdIChhdXRvJiBhLCBhdXRvJiBiKSB7
Ci0gICAgICAgICAgICByZXR1cm4gYS5maXJzdCA8IGIuZmlyc3Q7Ci0gICAgICAgIH0pOwotICAg
ICAgICByZXR1cm4gdGFibGU7Ci0gICAgfSgpOwotICAgIHJldHVybiB0YWJsZTsKKyAgICAgICAg
c29ydEJ5Rmlyc3QoKnRhYmxlKTsKKyAgICAgICAgQVNTRVJUKHNvcnRlZEZpcnN0c0FyZVVuaXF1
ZSgqdGFibGUpKTsKKyAgICB9KTsKKyAgICByZXR1cm4gKnRhYmxlOwogfQogCiBTdHJpbmcgVGV4
dENvZGVjQ0pLOjpiaWc1RGVjb2RlKGNvbnN0IHVpbnQ4X3QqIGJ5dGVzLCBzaXplX3QgbGVuZ3Ro
LCBib29sIGZsdXNoLCBib29sIHN0b3BPbkVycm9yLCBib29sJiBzYXdFcnJvcikKQEAgLTg4OCwx
NCArODM1LDkgQEAgU3RyaW5nIFRleHRDb2RlY0NKSzo6YmlnNURlY29kZShjb25zdCB1aW50OF90
KiBieXRlcywgc2l6ZV90IGxlbmd0aCwgYm9vbCBmbHVzaCwKICAgICAgICAgICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZENoYXJhY3RlcigweDAwRUEpOwogICAgICAgICAgICAgICAgICAgICByZXN1
bHQuYXBwZW5kQ2hhcmFjdGVyKDB4MDMwQyk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgYXV0byYgaW5kZXggPSBiaWc1RGVjb2RlSW5kZXgoKTsKLSAgICAg
ICAgICAgICAgICAgICAgYXV0byByYW5nZSA9IHN0ZDo6ZXF1YWxfcmFuZ2UoaW5kZXguYmVnaW4o
KSwgaW5kZXguZW5kKCksIHN0ZDo6cGFpcjx1aW50MTZfdCwgVUNoYXIzMj4ocG9pbnRlciwgMCks
IFtdKGNvbnN0IGF1dG8mIGEsIGNvbnN0IGF1dG8mIGIpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBhLmZpcnN0IDwgYi5maXJzdDsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChyYW5nZS5maXJzdCAhPSByYW5nZS5zZWNvbmQpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChyYW5nZS5maXJzdCArIDEgPT0gcmFuZ2Uuc2Vj
b25kKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmRDaGFyYWN0ZXIocmFu
Z2UuZmlyc3QtPnNlY29uZCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgICAgICAgICBpZiAoYXV0byBjb2RlUG9pbnQgPSBmaW5kRmlyc3RJblNvcnRlZFBhaXJzKGJp
ZzVEZWNvZGVJbmRleCgpLCBwb2ludGVyKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dC5hcHBlbmRDaGFyYWN0ZXIoKmNvZGVQb2ludCk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTYXdFcnJvcjo6WWVzOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICByZXR1cm4gU2F3RXJyb3I6Ok5vOwpAQCAtOTA1LDcg
Kzg0Nyw3IEBAIFN0cmluZyBUZXh0Q29kZWNDSks6OmJpZzVEZWNvZGUoY29uc3QgdWludDhfdCog
Ynl0ZXMsIHNpemVfdCBsZW5ndGgsIGJvb2wgZmx1c2gsCiAgICAgICAgICAgICByZXR1cm4gU2F3
RXJyb3I6OlllczsKICAgICAgICAgfQogICAgICAgICBpZiAoaXNBU0NJSShieXRlKSkgewotICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZChzdGF0aWNfY2FzdDxMQ2hhcj4oYnl0ZSkpOworICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZChzdGF0aWNfY2FzdDxjaGFyPihieXRlKSk7CiAgICAgICAgICAg
ICByZXR1cm4gU2F3RXJyb3I6Ok5vOwogICAgICAgICB9CiAgICAgICAgIGlmIChieXRlID49IDB4
ODEgJiYgYnl0ZSA8PSAweEZFKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L1RleHRDb2RlY1NpbmdsZUJ5dGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC9UZXh0Q29kZWNTaW5nbGVCeXRlLmNwcAppbmRleCBhMGIxNTc5YjE4N2ZkMjY1MjcxM2Q2
NjAxMmY5NzQ3YzY1ODRkMTc3Li5jMmJkNTc2NWIyNzQwZTdlNjA4ZjRkYzc0ZTFhMWQ1OThjZGFh
YjgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1Np
bmdsZUJ5dGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVj
U2luZ2xlQnl0ZS5jcHAKQEAgLTI2LDYgKzI2LDkgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJUZXh0Q29kZWNTaW5nbGVCeXRlLmgiCiAKKyNpbmNsdWRlICJFbmNvZGluZ1RhYmxl
cy5oIgorI2luY2x1ZGUgPG11dGV4PgorI2luY2x1ZGUgPHd0Zi9JdGVyYXRvclJhbmdlLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvQ29kZVBvaW50SXRlcmF0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdCdWlsZGVyLmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMu
aD4KQEAgLTQ2LDcgKzQ5LDggQEAgZW51bSBjbGFzcyBUZXh0Q29kZWNTaW5nbGVCeXRlOjpFbmNv
ZGluZyA6IHVpbnQ4X3QgewogfTsKIAogdXNpbmcgU2luZ2xlQnl0ZURlY29kZVRhYmxlID0gc3Rk
OjphcnJheTxVQ2hhciwgMTI4PjsKLXVzaW5nIFNpbmdsZUJ5dGVFbmNvZGVUYWJsZSA9IHN0ZDo6
cGFpcjxjb25zdCBzdGQ6OnBhaXI8VUNoYXIsIHVpbnQ4X3Q+Kiwgc2l6ZV90PjsKK3VzaW5nIFNp
bmdsZUJ5dGVFbmNvZGVUYWJsZUVudHJ5ID0gc3RkOjpwYWlyPFVDaGFyLCB1aW50OF90PjsKK3Vz
aW5nIFNpbmdsZUJ5dGVFbmNvZGVUYWJsZSA9IFdURjo6SXRlcmF0b3JSYW5nZTxjb25zdCBTaW5n
bGVCeXRlRW5jb2RlVGFibGVFbnRyeSo+OwogCiAvLyBGcm9tIGh0dHBzOi8vZW5jb2Rpbmcuc3Bl
Yy53aGF0d2cub3JnL2luZGV4LWlzby04ODU5LTMudHh0IHdpdGggMHhGRkZEIGZpbGxpbmcgdGhl
IGdhcHMKIHN0YXRpYyBjb25zdGV4cHIgU2luZ2xlQnl0ZURlY29kZVRhYmxlIGlzbzg4NTkzIHsK
QEAgLTE3MCwxNyArMTc0LDIzIEBAIHN0YXRpYyBjb25zdGV4cHIgU2luZ2xlQnl0ZURlY29kZVRh
YmxlIGlibTg2NiB7CiB0ZW1wbGF0ZTxjb25zdCBTaW5nbGVCeXRlRGVjb2RlVGFibGUmIGRlY29k
ZVRhYmxlPiBTaW5nbGVCeXRlRW5jb2RlVGFibGUgdGFibGVGb3JFbmNvZGluZygpCiB7CiAgICAg
Ly8gRklYTUU6IFdpdGggdGhlIEMrKzIwIHZlcnNpb24gb2Ygc3RkOjpjb3VudCwgd2Ugc2hvdWxk
IGJlIGFibGUgdG8gY2hhbmdlIHRoaXMgZnJvbSBjb25zdCB0byBjb25zdGV4cHIgYW5kIGdldCBp
dCBjb21wdXRlZCBhdCBjb21waWxlIHRpbWUuCi0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBzaXpl
ID0gc3RkOjpzaXplKGRlY29kZVRhYmxlKSAtIHN0ZDo6Y291bnQoc3RkOjpiZWdpbihkZWNvZGVU
YWJsZSksIHN0ZDo6ZW5kKGRlY29kZVRhYmxlKSwgcmVwbGFjZW1lbnRDaGFyYWN0ZXIpOwotICAg
IHN0YXRpYyBjb25zdCBhdXRvIHRhYmxlID0gWyZdIHsKLSAgICAgICAgYXV0byB0YWJsZSA9IG5l
dyBzdGQ6OnBhaXI8VUNoYXIsIHVpbnQ4X3Q+W3NpemVdOworICAgIHN0YXRpYyBjb25zdCBhdXRv
IHNpemUgPSBzdGQ6OnNpemUoZGVjb2RlVGFibGUpIC0gc3RkOjpjb3VudChzdGQ6OmJlZ2luKGRl
Y29kZVRhYmxlKSwgc3RkOjplbmQoZGVjb2RlVGFibGUpLCByZXBsYWNlbWVudENoYXJhY3Rlcik7
CisgICAgc3RhdGljIGNvbnN0IFNpbmdsZUJ5dGVFbmNvZGVUYWJsZUVudHJ5KiBlbnRyaWVzOwor
ICAgIHN0ZDo6b25jZV9mbGFnIG9uY2U7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZSwgWyZdIHsK
KyAgICAgICAgYXV0byogbXV0YWJsZUVudHJpZXMgPSBuZXcgU2luZ2xlQnl0ZUVuY29kZVRhYmxl
RW50cnlbc2l6ZV07CiAgICAgICAgIHNpemVfdCBqID0gMDsKICAgICAgICAgZm9yICh1aW50OF90
IGkgPSAwOyBpIDwgc3RkOjpzaXplKGRlY29kZVRhYmxlKTsgaSsrKSB7CiAgICAgICAgICAgICBp
ZiAoZGVjb2RlVGFibGVbaV0gIT0gcmVwbGFjZW1lbnRDaGFyYWN0ZXIpCi0gICAgICAgICAgICAg
ICAgdGFibGVbaisrXSA9IHsgZGVjb2RlVGFibGVbaV0sIGkgfTsKKyAgICAgICAgICAgICAgICBt
dXRhYmxlRW50cmllc1tqKytdID0geyBkZWNvZGVUYWJsZVtpXSwgaSArIDB4ODAgfTsKICAgICAg
ICAgfQotICAgICAgICByZXR1cm4gdGFibGU7Ci0gICAgfSgpOwotICAgIHJldHVybiB7IHRhYmxl
LCBzaXplIH07CisgICAgICAgIEFTU0VSVChqID09IHNpemUpOworICAgICAgICBhdXRvIGNvbGxl
Y3Rpb24gPSBXVEY6Om1ha2VJdGVyYXRvclJhbmdlKCZtdXRhYmxlRW50cmllc1swXSwgJm11dGFi
bGVFbnRyaWVzW3NpemVdKTsKKyAgICAgICAgc29ydEJ5Rmlyc3QoY29sbGVjdGlvbik7CisgICAg
ICAgIEFTU0VSVChzb3J0ZWRGaXJzdHNBcmVVbmlxdWUoY29sbGVjdGlvbikpOworICAgICAgICBl
bnRyaWVzID0gbXV0YWJsZUVudHJpZXM7CisgICAgfSk7CisgICAgcmV0dXJuIFdURjo6bWFrZUl0
ZXJhdG9yUmFuZ2UoJmVudHJpZXNbMF0sICZlbnRyaWVzW3NpemVdKTsKIH0KIAogc3RhdGljIFNp
bmdsZUJ5dGVFbmNvZGVUYWJsZSB0YWJsZUZvckVuY29kaW5nKFRleHRDb2RlY1NpbmdsZUJ5dGU6
OkVuY29kaW5nIGVuY29kaW5nKQpAQCAtMjQwLDMxICsyNTAsMjAgQEAgc3RhdGljIGNvbnN0ZXhw
ciBjb25zdCBTaW5nbGVCeXRlRGVjb2RlVGFibGUmIHRhYmxlRm9yRGVjb2RpbmcoVGV4dENvZGVj
U2luZ2xlQnkKIC8vIGh0dHBzOi8vZW5jb2Rpbmcuc3BlYy53aGF0d2cub3JnLyNzaW5nbGUtYnl0
ZS1lbmNvZGVyCiBzdGF0aWMgVmVjdG9yPHVpbnQ4X3Q+IGVuY29kZShjb25zdCBTaW5nbGVCeXRl
RW5jb2RlVGFibGUmIHRhYmxlLCBTdHJpbmdWaWV3IHN0cmluZywgRnVuY3Rpb248dm9pZChVQ2hh
cjMyLCBWZWN0b3I8dWludDhfdD4mKT4mJiB1bmVuY29kYWJsZUhhbmRsZXIpCiB7CisgICAgLy8g
RklYTUU6IENvbnNpZGVyIGFkZGluZyBhbiBBU0NJSSBmYXN0IHBhdGggbGlrZSB0aGUgb25lIGlu
IFRleHRDb2RlY0xhdGluMTo6ZGVjb2RlLgogICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQ7CiAg
ICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc3RyaW5nLmxlbmd0aCgpKTsKLQotICAg
IGF1dG8gY2hhcmFjdGVycyA9IHN0cmluZy51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKLSAgICBm
b3IgKFdURjo6Q29kZVBvaW50SXRlcmF0b3I8VUNoYXI+IGl0ZXJhdG9yKGNoYXJhY3RlcnMuZ2V0
KCksIGNoYXJhY3RlcnMuZ2V0KCkgKyBzdHJpbmcubGVuZ3RoKCkpOyAhaXRlcmF0b3IuYXRFbmQo
KTsgKytpdGVyYXRvcikgewotICAgICAgICBhdXRvIGNvZGVQb2ludCA9ICppdGVyYXRvcjsKKyAg
ICBmb3IgKGF1dG8gY29kZVBvaW50IDogc3RyaW5nLmNvZGVQb2ludHMoKSkgewogICAgICAgICBp
ZiAoaXNBU0NJSShjb2RlUG9pbnQpKSB7CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGNvZGVQ
b2ludCk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotCi0gICAgICAgIGF1dG8g
Y29kZVVuaXQgPSBzdGF0aWNfY2FzdDxVQ2hhcj4oY29kZVBvaW50KTsKLSAgICAgICAgaWYgKGNv
ZGVVbml0ICE9IGNvZGVQb2ludCkgewotICAgICAgICAgICAgdW5lbmNvZGFibGVIYW5kbGVyKGNv
ZGVQb2ludCwgcmVzdWx0KTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAg
ICAgIAotICAgICAgICBhdXRvIHJhbmdlID0gc3RkOjplcXVhbF9yYW5nZSh0YWJsZS5maXJzdCwg
dGFibGUuZmlyc3QgKyB0YWJsZS5zZWNvbmQsIHN0ZDo6cGFpcjxVQ2hhciwgdWludDhfdD4oY29k
ZVVuaXQsIDApLCBbXShjb25zdCBhdXRvJiBhLCBjb25zdCBhdXRvJiBiKSB7Ci0gICAgICAgICAg
ICByZXR1cm4gYS5maXJzdCA8IGIuZmlyc3Q7Ci0gICAgICAgIH0pOwotICAgICAgICBpZiAocmFu
Z2UuZmlyc3QgPT0gcmFuZ2Uuc2Vjb25kKSB7CisgICAgICAgIGF1dG8gYnl0ZSA9IGZpbmRGaXJz
dEluU29ydGVkUGFpcnModGFibGUsIGNvZGVQb2ludCk7CisgICAgICAgIGlmICghYnl0ZSkgewog
ICAgICAgICAgICAgdW5lbmNvZGFibGVIYW5kbGVyKGNvZGVQb2ludCwgcmVzdWx0KTsKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQocmFuZ2Uu
Zmlyc3QtPnNlY29uZCArIDB4ODApOworICAgICAgICByZXN1bHQuYXBwZW5kKCpieXRlKTsKICAg
ICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTI4NCw3ICsyODMsNiBAQCBzdGF0aWMgU3Ry
aW5nIGRlY29kZShjb25zdCBTaW5nbGVCeXRlRGVjb2RlVGFibGUmIHRhYmxlLCBjb25zdCB1aW50
OF90KiBieXRlcywgcwogICAgICAgICAgICAgc2F3RXJyb3IgPSB0cnVlOwogICAgICAgICByZXN1
bHQuYXBwZW5kKGNvZGVQb2ludCk7CiAgICAgfTsKLQogICAgIGlmIChzdG9wT25FcnJvcikgewog
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAg
ICBwYXJzZUJ5dGUoYnl0ZXNbaV0pOwpAQCAtMjk1LDcgKzI5Myw2IEBAIHN0YXRpYyBTdHJpbmcg
ZGVjb2RlKGNvbnN0IFNpbmdsZUJ5dGVEZWNvZGVUYWJsZSYgdGFibGUsIGNvbnN0IHVpbnQ4X3Qq
IGJ5dGVzLCBzCiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspCiAg
ICAgICAgICAgICBwYXJzZUJ5dGUoYnl0ZXNbaV0pOwogICAgIH0KLQogICAgIHJldHVybiByZXN1
bHQudG9TdHJpbmcoKTsKIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMv
Q2hhbmdlTG9nCmluZGV4IDYwMWU4YTc2ODA4ZTg0NDdkNzc3YWUxYTk2MmNmY2VkZTI0YzVmMjAu
LjIxMGU0ZWRhMGE1Zjg5NWUwZGEwM2M3MGZlM2RhNmEyYWEwOTA5YzUgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAy
MC0wOS0wNiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBU
ZXh0Q29kZWNDSksgYW5kIFRleHRDb2RlY1NpbmdsZUJ5dGUgdGhyZWFkLXNhZmUgYW5kIHJlZmFj
dG9yIGEgYml0IHRvIHNoYXJlIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIxNjIyOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU3RyaW5nVmlldy5jcHA6
CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKTogUmVtb3ZlZCBhbiB1bnVzZWQgdmFyaWFi
bGUuIEF0IG9uZSBwb2ludCwgd2l0aAorICAgICAgICBjb2RlIHRoYXQgSSB3cm90ZSBhbmQgbm93
IGhhdmUgcm9sbGVkIG91dCwgdGhpcyB3YXMgY2F1c2luZyBhIGJ1aWxkIGZhaWx1cmUuCisKIDIw
MjAtMDktMDYgIE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KIAogICAg
ICAgICBNYWtlIEdseXBoQnVmZmVyQWR2YW5jZSBhbmQgR2x5cGhCdWZmZXJPcmlnaW4gbW9yZSBy
b2J1c3QKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1N0cmluZ1Zp
ZXcuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU3RyaW5nVmlldy5jcHAKaW5k
ZXggNGIwYzRmMzM4YTZlMDEyYWRmNzY0N2FiNGRlOTRjMTdkNzEyYzJjMy4uODRlYzVkYWYyZTQz
YmVhOWM0ODUyN2NhMjVjZGZkODI5YWYwN2Y0MyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XVEYvU3RyaW5nVmlldy5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XVEYvU3RyaW5nVmlldy5jcHAKQEAgLTg5Niw3ICs4OTYsNiBAQCBURVNUKFdURiwgU3Ry
aW5nVmlld0VuZHNXaXRoSWdub3JpbmdBU0NJSUNhc2VXaXRoTGF0aW4xQ2hhcmFjdGVycykKIAog
VEVTVChXVEYsIFN0cmluZ1ZpZXc4Qml0KQogewotICAgIFN0cmluZ1ZpZXcgbnVsbFZpZXc7CiAg
ICAgRVhQRUNUX1RSVUUoU3RyaW5nVmlldygpLmlzOEJpdCgpKTsKICAgICBFWFBFQ1RfVFJVRShT
dHJpbmdWaWV3OjplbXB0eSgpLmlzOEJpdCgpKTsKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDI3YTMyMTc4NTI5YzZmYTBh
YmFhYTZmMzBlMDE2NDUyMDQ3NDFjNDUuLjU3ODk3ODg1MDBjM2MwNWNlZDAyZThlZTVlNWE2ZTEw
M2EwOTM4MGMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAyMC0wOS0wNiAgRGFyaW4gQWRsZXIg
IDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBUZXh0Q29kZWNDSksgYW5kIFRleHRD
b2RlY1NpbmdsZUJ5dGUgdGhyZWFkLXNhZmUgYW5kIHJlZmFjdG9yIGEgYml0IHRvIHNoYXJlIGNv
ZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjIy
OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVz
dEV4cGVjdGF0aW9uczogUmVtb3ZlZCBleHBlY3RhdGlvbiB0aGF0IHNraXBzIHRoZSB0aHJlZSBl
b2YtdXRmLTgKKyAgICAgICAgdGVzdHMuIFRoZXkgd2VyZSBmYWlsaW5nIGJlY2F1c2UgdGhlIHRl
c3RzIHdlcmUgaW1wb3J0ZWQgaW50byB0aGUgc291cmNlCisgICAgICAgIHRyZWUgaW1wcm9wZXJs
eSBhbmQgYXJlIHBhc3Npbmcgbm93IHRoYXQgaXMgZml4ZWQuCisKIDIwMjAtMDktMDYgIENocmlz
IER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBDb252b2x2ZXJOb2RlIGluY29y
cmVjdGx5IG91dHB1dHMgc2lsZW5jZSBiZWNhdXNlIG1fcmV2ZXJiIGlzIG51bGwKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2MvQ2hhbmdlTG9nCmluZGV4IDk0NjQ2ZWIwZjZkNjIxN2QwYWM4OGVhNmUwOWQ4MjIz
MWJiNGNlMTMuLjVmMTdlMGFiNjkzYzAzYjBiNmMyNWVmZTA3N2EzZDQzZmY5NDVkODYgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDIwLTA5LTA2ICBE
YXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIFRleHRDb2RlY0NK
SyBhbmQgVGV4dENvZGVjU2luZ2xlQnl0ZSB0aHJlYWQtc2FmZSBhbmQgcmVmYWN0b3IgYSBiaXQg
dG8gc2hhcmUgY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjE2MjI5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvZW5jb2RpbmcvZW9mLXV0Zi04LW9uZS5odG1sOgor
ICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9lbmNvZGluZy9lb2YtdXRmLTgtdGhyZWUuaHRt
bDoKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvZW5jb2RpbmcvZW9mLXV0Zi04LXR3by5o
dG1sOgorICAgICAgICBVcGRhdGVkIHRoZXNlIGZpbGVzIHdpdGggZnJlc2ggY29waWVzLiBTb21l
aG93LCB0aGUgdHJhaWxpbmcgaW52YWxpZAorICAgICAgICBVVEYtOCBzZXF1ZW5jZXMgZnJvbSB0
aGVzZSBmaWxlcyBtdXN0IGhhdmUgZ290dGVuIGxvc3Qgd2hlbiB3ZQorICAgICAgICByZS1zeW5j
ZWQgd2ViLXBsYXRmb3JtLXRlc3RzL2VuY29kaW5nIGZyb20gdXBzdHJlYW0uIElmIHdlIGRvIHRo
YXQKKyAgICAgICAgYWdhaW4sIHRoZW4gdGhlc2UgdGVzdHMgd2lsbCBzdGFydCBmYWlsaW5nIGFn
YWluLgorCiAyMDIwLTA5LTA2ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAg
ICAgICAgQ29udm9sdmVyTm9kZSBpbmNvcnJlY3RseSBvdXRwdXRzIHNpbGVuY2UgYmVjYXVzZSBt
X3JldmVyYiBpcyBudWxsCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9UZXN0RXhwZWN0YXRpb25z
IGIvTGF5b3V0VGVzdHMvVGVzdEV4cGVjdGF0aW9ucwppbmRleCAwMDIyZjFjYmE2YTc5M2I4NDIx
MWQwZjkxYzE1MDUzYjZmNDNmYTVmLi4xZWU1MDNkZTBlNmE1NjhlY2I5NGFlMGI1ZGJlYWQyNzVi
MTYzM2IxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xh
eW91dFRlc3RzL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTQ4Niw5ICs0ODYsNiBAQCBpbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50aWNzL3NjcmlwdGluZy0xL3RoZS1zY3Jp
cHQtZWxlbWVudC9qcwogIyBOZXdseSBpbXBvcnRlZCBXUFQgcmVmIHRlc3RzIGZhaWx1cmVzLgog
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL2VkaXRpbmcvZWRpdGluZy0wL3Nw
ZWxsaW5nLWFuZC1ncmFtbWFyLWNoZWNraW5nL3NwZWxsaW5nLW1hcmtlcnMtMDA4Lmh0bWwgWyBJ
bWFnZU9ubHlGYWlsdXJlIF0KIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9l
ZGl0aW5nL2VkaXRpbmctMC9zcGVsbGluZy1hbmQtZ3JhbW1hci1jaGVja2luZy9zcGVsbGluZy1t
YXJrZXJzLTAxMC5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCi1pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL2VuY29kaW5nL2VvZi11dGYtOC1vbmUuaHRtbCBbIEltYWdlT25seUZhaWx1
cmUgXQotaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9lbmNvZGluZy9lb2YtdXRmLTgt
dGhyZWUuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQotaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9lbmNvZGluZy9lb2YtdXRmLTgtdHdvLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0K
IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9yZW5kZXJpbmcvYmluZGluZ3Mv
dGhlLXNlbGVjdC1lbGVtZW50LTAvb3B0aW9uLWxhYmVsLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJl
IF0KIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9yZW5kZXJpbmcvbm9uLXJl
cGxhY2VkLWVsZW1lbnRzL2xpc3RzL2xpLXR5cGUtdW5zdXBwb3J0ZWQtbG93ZXItYWxwaGEuaHRt
bCBbIEltYWdlT25seUZhaWx1cmUgXQogaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9o
dG1sL3JlbmRlcmluZy9ub24tcmVwbGFjZWQtZWxlbWVudHMvbGlzdHMvbGktdHlwZS11bnN1cHBv
cnRlZC1sb3dlci1yb21hbi5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCkBAIC05MjUsNyArOTIy
LDcgQEAgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9mZXRjaC9hcGkvcmVkaXJlY3Qv
cmVkaXJlY3QtY291bnQuYW55Lndvcmtlci5odG0KIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvZmV0Y2gvY29udGVudC1lbmNvZGluZy9iYWQtZ3ppcC1ib2R5LmFueS5odG1sIFsgUGFz
cyBGYWlsdXJlIF0KIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvZmV0Y2gvaHR0cC1j
YWNoZS9iYXNpYy1hdXRoLWNhY2hlLXRlc3QuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQogCi0j
IEZldGNoIGZldGF0dXJlcyB0aGF0IGFyZSBub3QgaW1wbGVtZW50ZWQuCisjIEZldGNoIGZlYXR1
cmVzIHRoYXQgYXJlIG5vdCBpbXBsZW1lbnRlZC4KIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvZmV0Y2gvY29yYiBbIFNraXAgXQogaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9mZXRjaC9tZXRhZGF0YS8gWyBTa2lwIF0KIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvZmV0Y2gvc2VjLW1ldGFkYXRhIFsgU2tpcCBdCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2VuY29kaW5nL2VvZi11dGYtOC1vbmUuaHRt
bCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvZW5jb2Rpbmcv
ZW9mLXV0Zi04LW9uZS5odG1sCmluZGV4IDhlMTUxZjMxMGQxM2Y2NjkxMTdmOWQxZGNhZWEzY2Zi
YzExM2QyZjYuLjdmN2Y3ZWNkMTk1ZjhlZTNlNGI2MTNlODhlY2YwYTNkZTkyMjY5MWIgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvZW5jb2Rp
bmcvZW9mLXV0Zi04LW9uZS5odG1sCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvZW5jb2RpbmcvZW9mLXV0Zi04LW9uZS5odG1sCkBAIC0yLDQgKzIsNCBA
QAogPG1ldGEgY2hhcnNldD11dGYtOD4KIDx0aXRsZT5VVEYtOCBmaWxlIGVuZGluZyB3aXRoIGEg
b25lLWJ5dGUgdHJ1bmNhdGVkIHNlcXVlbmNlPC90aXRsZT4KIDxsaW5rIHJlbD1tYXRjaCBocmVm
PSJlb2YtdXRmLTgtb25lLXJlZi5odG1sIj4KLU9uZS1ieXRlIHRydW5jYXRlZCBzZXF1ZW5jZToK
XCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitPbmUtYnl0ZSB0cnVuY2F0ZWQgc2VxdWVuY2U6
8ApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvZW5jb2RpbmcvZW9mLXV0Zi04LXRocmVlLmh0
bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2VuY29kaW5n
L2VvZi11dGYtOC10aHJlZS5odG1sCmluZGV4IDA3YzcwZWEzN2YzNmNjODMyMWIzZTYyNGVmOTdk
OTUzNTYyODc1MDcuLmQxOTEzN2IxNzk1YmVlNjczNmNkMzkwYTFjNjJhZjhkYmU5YTkyYzggMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvZW5j
b2RpbmcvZW9mLXV0Zi04LXRocmVlLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9lbmNvZGluZy9lb2YtdXRmLTgtdGhyZWUuaHRtbApAQCAtMiw0
ICsyLDQgQEAKIDxtZXRhIGNoYXJzZXQ9dXRmLTg+CiA8dGl0bGU+VVRGLTggZmlsZSBlbmRpbmcg
d2l0aCBhIHRocmVlLWJ5dGUgdHJ1bmNhdGVkIHNlcXVlbmNlPC90aXRsZT4KIDxsaW5rIHJlbD1t
YXRjaCBocmVmPSJlb2YtdXRmLTgtdGhyZWUtcmVmLmh0bWwiPgotVGhyZWUtYnl0ZSB0cnVuY2F0
ZWQgc2VxdWVuY2U6ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorVGhyZWUtYnl0ZSB0cnVu
Y2F0ZWQgc2VxdWVuY2U68J+SClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9lbmNvZGluZy9l
b2YtdXRmLTgtdHdvLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL2VuY29kaW5nL2VvZi11dGYtOC10d28uaHRtbAppbmRleCAwZTgxNzFlNDdhMmRmOWZk
MDlkYTA0ZWQ1NjkwZGZlYjNhMzlmYTQ3Li40NjRkMDNiNzcxZmIxMTQ3YzQ5OGYxZTE0OGY1NjY2
NGE1YjI5MDJlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL2VuY29kaW5nL2VvZi11dGYtOC10d28uaHRtbAorKysgYi9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2VuY29kaW5nL2VvZi11dGYtOC10d28uaHRt
bApAQCAtMiw0ICsyLDQgQEAKIDxtZXRhIGNoYXJzZXQ9dXRmLTg+CiA8dGl0bGU+VVRGLTggZmls
ZSBlbmRpbmcgd2l0aCBhIHR3by1ieXRlIHRydW5jYXRlZCBzZXF1ZW5jZTwvdGl0bGU+CiA8bGlu
ayByZWw9bWF0Y2ggaHJlZj0iZW9mLXV0Zi04LXR3by1yZWYuaHRtbCI+Ci1Ud28tYnl0ZSB0cnVu
Y2F0ZWQgc2VxdWVuY2U6ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorVHdvLWJ5dGUgdHJ1
bmNhdGVkIHNlcXVlbmNlOvCfClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMi9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vbWFjLXdrMi9UZXN0RXhwZWN0YXRpb25zCmluZGV4IDBkMGEwMzU5NWQy
NmMyOTJkYzgwMWJjNjY3ZTZlZTQ4NmMxMDZjNmMuLmQzMmNhZWQwZDg1Y2NkZjBlMWJhNWIwODI0
MDQ0NjljYmI2YmFhMjQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy13azIv
VGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtd2syL1Rlc3RF
eHBlY3RhdGlvbnMKQEAgLTExMDksNyArMTEwOSw2IEBAIHdlYmtpdC5vcmcvYi8xODk2NzIgWyBN
b2phdmUgUmVsZWFzZSBdIHdlYmdsLzIuMC4wL2NvbmZvcm1hbmNlMi90ZXh0dXJlcy9jYW52YXNf
CiB3ZWJraXQub3JnL2IvMjE1NDY4IFsgTW9qYXZlIFJlbGVhc2UgXSBtZWRpYS9tb2Rlcm4tbWVk
aWEtY29udHJvbHMvc2NydWJiZXItc3VwcG9ydC9zY3J1YmJlci1zdXBwb3J0LWRyYWcuaHRtbCBb
IFBhc3MgRmFpbHVyZSBdCiAKICMgPHJkYXI6Ly9wcm9ibGVtLzM3MzMwMzc3PiBBU2FuIHRlc3Rz
IGV4aXRpbmcgZWFybHkgZHVlIHRvIHRpbWVvdXRzCi1bIFJlbGVhc2UgXSBpbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL2VuY29kaW5nIFsgU2tpcCBdCiBbIFJlbGVhc2UgXSBpbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL1dlYkNyeXB0b0FQSS9kZXJpdmVfYml0c19rZXlzIFsg
U2tpcCBdCiAKICMgPHJkYXI6Ly9wcm9ibGVtLzYwMDYzMDAyPiBSRUdSRVNTSU9OOiAocjI1Nzc1
OCkgaHR0cC90ZXN0cy9hZENsaWNrQXR0cmlidXRpb24vY29udmVyc2lvbi1kaXNhYmxlZC1pbi1l
cGhlbWVyYWwtc2Vzc2lvbi5odG1sIGlzIGNyYXNoaW5nCg==
</data>
<flag name="review"
          id="423528"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>