<?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>170217</bug_id>
          
          <creation_ts>2017-03-28 17:20:23 -0700</creation_ts>
          <short_desc>WebAssembly: We should have Origins</short_desc>
          <delta_ts>2017-03-29 11:03:54 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Keith Miller">keith_miller</reporter>
          <assigned_to name="Keith Miller">keith_miller</assigned_to>
          <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1292214</commentid>
    <comment_count>0</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-03-28 17:20:23 -0700</bug_when>
    <thetext>WebAssembly: We should have Origins</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292220</commentid>
    <comment_count>1</comment_count>
      <attachid>305681</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-03-28 17:24:07 -0700</bug_when>
    <thetext>Created attachment 305681
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292222</commentid>
    <comment_count>2</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-03-28 17:25:43 -0700</bug_when>
    <thetext>Here&apos;s a sample:

BB#0: ; frequency = 1.000000
    Int64 @4 = Patchpoint(generator = 0x10f487fa8, earlyClobbered = [], lateClobbered = [], usedRegisters = [], resultConstraint = SomeRegister)
    Int64 @5 = FramePointer()
    Void @8 = Store(@4, @5, offset = 24, ControlDependent|Writes:Top)
    Int64 @10 = Const64(0)
    Void @12 = Store($0(@10), @5, offset = 16, ControlDependent|Writes:Top)
    Int64 @13 = Patchpoint(generator = 0x10f4be7f0, earlyClobbered = [], lateClobbered = [], usedRegisters = [], resultConstraint = SomeRegister, ExitsSideways|ControlDependent|WritesPinned|ReadsPinned|Fence|Writes:Top|Reads:Top)
    Int64 @16 = ArgumentReg(%rdi)
    Int64 @18 = ArgumentReg(%rsi)
    Int32 @22 = Trunc(@18, Wasm: {opcode: I64Rotl, location: 5})
    Int64 @23 = RotL(@16, @22, Wasm: {opcode: I64Rotl, location: 5})
    Void @27 = Return(@23, Terminal, Wasm: {opcode: End, location: 6})</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292231</commentid>
    <comment_count>3</comment_count>
      <attachid>305681</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-03-28 17:38:47 -0700</bug_when>
    <thetext>Comment on attachment 305681
Patch

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

r=me if it builds.

&gt; Source/JavaScriptCore/ChangeLog:9
&gt; +        This patch adds wasm origins for B3::Values, called OpcodeOrigin. Currently,
&gt; +        OpcodeOrigin just tracks the original opcode and the location of that opcode.

I think it would be nice to have the sample output after this paragraph.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292238</commentid>
    <comment_count>4</comment_count>
      <attachid>305685</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-03-28 17:56:39 -0700</bug_when>
    <thetext>Created attachment 305685
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292288</commentid>
    <comment_count>5</comment_count>
      <attachid>305685</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-03-28 21:02:39 -0700</bug_when>
    <thetext>Comment on attachment 305685
Patch for landing

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

&gt; Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj:6299
&gt; +				53C6FEF01E8AFE0C00B18425 /* WasmOpcodeOrigin.cpp */,

You need to add this to CMakeLists.txt as well.  That&apos;s what&apos;s ailing the GTK build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292300</commentid>
    <comment_count>6</comment_count>
      <attachid>305705</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-03-28 21:51:21 -0700</bug_when>
    <thetext>Created attachment 305705
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292305</commentid>
    <comment_count>7</comment_count>
      <attachid>305705</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-03-28 22:32:49 -0700</bug_when>
    <thetext>Comment on attachment 305705
Patch for landing

Clearing flags on attachment: 305705

Committed r214529: &lt;http://trac.webkit.org/changeset/214529&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292306</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-03-28 22:32:52 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292322</commentid>
    <comment_count>9</comment_count>
      <attachid>305705</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-29 01:19:00 -0700</bug_when>
    <thetext>Comment on attachment 305705
Patch for landing

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

&gt; Source/JavaScriptCore/wasm/WasmOpcodeOrigin.h:45
&gt; +    const OpType opcode;

Can you pack this into a 64-bit word so we don&apos;t need to heap allocate these while compiling?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292457</commentid>
    <comment_count>10</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-03-29 10:17:06 -0700</bug_when>
    <thetext>(In reply to Saam Barati from comment #9)
&gt; Comment on attachment 305705 [details]
&gt; Patch for landing
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=305705&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/wasm/WasmOpcodeOrigin.h:45
&gt; &gt; +    const OpType opcode;
&gt; 
&gt; Can you pack this into a 64-bit word so we don&apos;t need to heap allocate these
&gt; while compiling?

I thought of this at one point but then I decided against it; I don&apos;t know why. I put a fix in: https://bugs.webkit.org/show_bug.cgi?id=170244</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292483</commentid>
    <comment_count>11</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-29 11:03:54 -0700</bug_when>
    <thetext>(In reply to Keith Miller from comment #10)
&gt; (In reply to Saam Barati from comment #9)
&gt; &gt; Comment on attachment 305705 [details]
&gt; &gt; Patch for landing
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=305705&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/wasm/WasmOpcodeOrigin.h:45
&gt; &gt; &gt; +    const OpType opcode;
&gt; &gt; 
&gt; &gt; Can you pack this into a 64-bit word so we don&apos;t need to heap allocate these
&gt; &gt; while compiling?
&gt; 
&gt; I thought of this at one point but then I decided against it; I don&apos;t know
&gt; why. I put a fix in: https://bugs.webkit.org/show_bug.cgi?id=170244
👍🏽</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305681</attachid>
            <date>2017-03-28 17:24:07 -0700</date>
            <delta_ts>2017-03-28 17:56:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-170217-20170328172406.patch</filename>
            <type>text/plain</type>
            <size>93752</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE0NDAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
MDRhMDdmMzJiNDI2MTEwYjBmYWVmMWU4MWMwZjg0Yjc4NjdmZjYwLi43ZTgzZmU1NjYxNmQxNjZi
NDlhNjc2MTdmMmM1YWJjZGUxMTVjYmFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0MyBAQAorMjAxNy0wMy0yOCAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBXZWJBc3NlbWJseTogV2Ugc2hvdWxkIGhhdmUgT3JpZ2lucworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwMjE3CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBh
ZGRzIHdhc20gb3JpZ2lucyBmb3IgQjM6OlZhbHVlcywgY2FsbGVkIE9wY29kZU9yaWdpbi4gQ3Vy
cmVudGx5LAorICAgICAgICBPcGNvZGVPcmlnaW4ganVzdCB0cmFja3MgdGhlIG9yaWdpbmFsIG9w
Y29kZSBhbmQgdGhlIGxvY2F0aW9uIG9mIHRoYXQgb3Bjb2RlLgorCisgICAgICAgICogSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiMy9CM1ZhbHVl
LmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjpkZWVwRHVtcCk6CisgICAgICAgICogd2Fz
bS9XYXNtQjNJUkdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0
b3I6OnNldFBhcnNlcik6CisgICAgICAgIChKU0M6Oldhc206OnJlc3RvcmVXZWJBc3NlbWJseUds
b2JhbFN0YXRlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6ZW1pdENoZWNr
QW5kUHJlcGFyZVBvaW50ZXIpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpl
bWl0TG9hZE9wKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6ZW1pdFN0b3Jl
T3ApOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRDb25zdGFudCk6Cisg
ICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZExvb3ApOgorICAgICAgICAoSlND
OjpXYXNtOjpCM0lSR2VuZXJhdG9yOjp1bmlmeSk6CisgICAgICAgIChKU0M6Oldhc206OnBhcnNl
QW5kQ29tcGlsZSk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmVtaXRDaGVj
a3NGb3JNb2RPckRpdik6CisgICAgICAgIChKU0M6Oldhc206OmdldE1lbW9yeUJhc2VBbmRTaXpl
KTogRGVsZXRlZC4KKyAgICAgICAgKiB3YXNtL1dhc21GdW5jdGlvblBhcnNlci5oOgorICAgICAg
ICAoSlNDOjpXYXNtOjpGdW5jdGlvblBhcnNlcjo6Y3VycmVudE9wY29kZSk6CisgICAgICAgIChK
U0M6Oldhc206OkZ1bmN0aW9uUGFyc2VyOjpjdXJyZW50T3Bjb2RlU3RhcnRpbmdPZmZzZXQpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6RnVuY3Rpb25QYXJz
ZXIpOgorICAgICAgICAqIHdhc20vV2FzbU9wY29kZU9yaWdpbi5jcHA6IEFkZGVkLgorICAgICAg
ICAoSlNDOjpXYXNtOjpPcGNvZGVPcmlnaW46OmR1bXApOgorICAgICAgICAqIHdhc20vV2FzbU9w
Y29kZU9yaWdpbi5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6T3Bjb2RlT3JpZ2luOjpP
cGNvZGVPcmlnaW4pOgorICAgICAgICAqIHdhc20vV2FzbVZhbGlkYXRlLmNwcDoKKyAgICAgICAg
KEpTQzo6V2FzbTo6VmFsaWRhdGU6OnNldFBhcnNlcik6CisgICAgICAgICogd2FzbS9nZW5lcmF0
ZVdhc21CM0lSR2VuZXJhdG9ySW5saW5lc0hlYWRlci5weToKKyAgICAgICAgKENvZGVHZW5lcmF0
b3IuZ2VuZXJhdGUpOgorICAgICAgICAoZ2VuZXJhdGVCM09wQ29kZSk6CisgICAgICAgIChnZW5l
cmF0ZUNvbnN0Q29kZSk6CisKIDIwMTctMDMtMjQgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUu
Y29tPgogCiAgICAgICAgIEFkZCBzb21lIGluc3RydW1lbnRhdGlvbiBpbiBIZWFwOjpyZXN1bWVU
aGVQZXJpcGhlcnkoKSB0byBoZWxwIGRlYnVnIGFuIGlzc3VlLgpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2og
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagppbmRleCA2MDAzMTBjMzdhYjE0YTcyZGY1N2FiMjkxYzgyY2E3NDAzNzgzYzBkLi5k
ZWQ1Nzc1YmZmM2NjYzg4NzJjODA2ZjM1ZTVhNDU0YjI4YWMzMzE0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagpAQCAtMTM0NSw2ICsxMzQ1LDggQEAKIAkJNTNCMEJFMzQxRTU2MUFDOTAw
QThGQzI5IC8qIEdldHRlclNldHRlckFjY2Vzc0Nhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNCMEJFMzMxRTU2MUFDOTAwQThGQzI5IC8qIEdl
dHRlclNldHRlckFjY2Vzc0Nhc2UuY3BwICovOyB9OwogCQk1M0IwQkUzNjFFNTYxQjA5MDBBOEZD
MjkgLyogUHJveHlhYmxlQWNjZXNzQ2FzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1M0IwQkUzNTFFNTYxQjA5MDBBOEZDMjkgLyogUHJveHlhYmxl
QWNjZXNzQ2FzZS5jcHAgKi87IH07CiAJCTUzQjBCRTM4MUU1NjFCMjQwMEE4RkMyOSAvKiBJbnRy
aW5zaWNHZXR0ZXJBY2Nlc3NDYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUzQjBCRTM3MUU1NjFCMjQwMEE4RkMyOSAvKiBJbnRyaW5zaWNHZXR0
ZXJBY2Nlc3NDYXNlLmNwcCAqLzsgfTsKKwkJNTNDNkZFRUYxRThBREZBOTAwQjE4NDI1IC8qIFdh
c21PcGNvZGVPcmlnaW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUzQzZGRUVFMUU4QURGQTkwMEIxODQyNSAvKiBXYXNtT3Bjb2RlT3JpZ2luLmggKi87
IH07CisJCTUzQzZGRUYxMUU4QUZFMEMwMEIxODQyNSAvKiBXYXNtT3Bjb2RlT3JpZ2luLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzQzZGRUYwMUU4
QUZFMEMwMEIxODQyNSAvKiBXYXNtT3Bjb2RlT3JpZ2luLmNwcCAqLzsgfTsKIAkJNTNENDQ0REMx
REFGMDhBQjAwQjkyNzg0IC8qIEIzV2FzbUFkZHJlc3NWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNENDQ0REIxREFGMDhBQjAwQjkyNzg0IC8q
IEIzV2FzbUFkZHJlc3NWYWx1ZS5oICovOyB9OwogCQk1M0Q0NDRERTFEQUYwOUEwMDBCOTI3ODQg
LyogQjNXYXNtQWRkcmVzc1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUzRDQ0NEREMURBRjA5QTAwMEI5Mjc4NCAvKiBCM1dhc21BZGRyZXNz
VmFsdWUuY3BwICovOyB9OwogCQk1M0Y0MEU4NTFENThGOTc3MDA5OUExQjYgLyogV2FzbVNlY3Rp
b25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0Y0
MEU4NDFENThGOTc3MDA5OUExQjYgLyogV2FzbVNlY3Rpb25zLmggKi87IH07CkBAIC0zODM0LDYg
KzM4MzYsOCBAQAogCQk1M0IwQkUzMzFFNTYxQUM5MDBBOEZDMjkgLyogR2V0dGVyU2V0dGVyQWNj
ZXNzQ2FzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHZXR0ZXJT
ZXR0ZXJBY2Nlc3NDYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNCMEJF
MzUxRTU2MUIwOTAwQThGQzI5IC8qIFByb3h5YWJsZUFjY2Vzc0Nhc2UuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHJveHlhYmxlQWNjZXNzQ2FzZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzQjBCRTM3MUU1NjFCMjQwMEE4RkMyOSAvKiBJbnRy
aW5zaWNHZXR0ZXJBY2Nlc3NDYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk1M0M2RkVFRTFFOEFERkE5MDBCMTg0MjUgLyogV2FzbU9wY29kZU9yaWdpbi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtT3Bjb2RlT3JpZ2luLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzQzZGRUYwMUU4QUZFMEMwMEIxODQyNSAvKiBX
YXNtT3Bjb2RlT3JpZ2luLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFdhc21PcGNvZGVPcmlnaW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0Q0
NDREQjFEQUYwOEFCMDBCOTI3ODQgLyogQjNXYXNtQWRkcmVzc1ZhbHVlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzV2FzbUFkZHJlc3NWYWx1ZS5oOyBwYXRoID0gYjMvQjNX
YXNtQWRkcmVzc1ZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRDQ0NERE
MURBRjA5QTAwMEI5Mjc4NCAvKiBCM1dhc21BZGRyZXNzVmFsdWUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNXYXNtQWRkcmVzc1ZhbHVlLmNwcDsgcGF0aCA9IGIz
L0IzV2FzbUFkZHJlc3NWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUz
RjI1NkUxMUI4N0UyODAwMEI0Qjc2OCAvKiBKU1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTVHlwZWRBcnJheVZpZXdQcm90
b3R5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjI2OSw2ICs2MjczLDgg
QEAKIAkJCQlBREI2RjY3QzFFMTVENzUwMDA4MkYzODQgLyogV2FzbVBhZ2VDb3VudC5jcHAgKi8s
CiAJCQkJNTM4MUI5MzYxRTYwRTk2NjAwOTBGNzk0IC8qIFdhc21GYXVsdFNpZ25hbEhhbmRsZXIu
Y3BwICovLAogCQkJCTUzODFCOTM4MUU2MEU5N0QwMDkwRjc5NCAvKiBXYXNtRmF1bHRTaWduYWxI
YW5kbGVyLmggKi8sCisJCQkJNTNDNkZFRjAxRThBRkUwQzAwQjE4NDI1IC8qIFdhc21PcGNvZGVP
cmlnaW4uY3BwICovLAorCQkJCTUzQzZGRUVFMUU4QURGQTkwMEIxODQyNSAvKiBXYXNtT3Bjb2Rl
T3JpZ2luLmggKi8sCiAJCQkJNzlCNzU5NzMxREZBNEM2MDAwNTIxNzRDIC8qIFdhc21QYWdlQ291
bnQuaCAqLywKIAkJCQk1M0Y0MEU4QzFENTkwMUYyMDA5OUExQjYgLyogV2FzbVBhcnNlci5oICov
LAogCQkJCTUzMTM3NEJFMUQ1Q0U5NTAwMEFGN0EwQiAvKiBXYXNtUGxhbi5jcHAgKi8sCkBAIC04
NjA4LDYgKzg2MTQsNyBAQAogCQkJCTBGREIyQ0NBMTczREE1MjMwMDdCM0MxQiAvKiBGVExWYWx1
ZUZyb21CbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1QTYyODQxODhDOThENDAwNzJDOURG
IC8qIEZUTFZhbHVlUmFuZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMDMzMkM2MThCNTNGQTkw
MDVGOTc5QSAvKiBGVExXZWlnaHQuaCBpbiBIZWFkZXJzICovLAorCQkJCTUzQzZGRUVGMUU4QURG
QTkwMEIxODQyNSAvKiBXYXNtT3Bjb2RlT3JpZ2luLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjAz
MzJDODE4QjU0NkVDMDA1Rjk3OUEgLyogRlRMV2VpZ2h0ZWRUYXJnZXQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGNjY2RUMxMTgzNTY2RjkwMEQwMTdGMSAvKiBGdWxsQnl0ZWNvZGVMaXZlbmVzcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMkE4MzYzOEExOEQ3RDBGRTAwMDBFQkNDIC8qIEZ1bGxHQ0Fj
dGl2aXR5Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovLApAQCAtOTg5NSw2ICs5OTAyLDcgQEAKIAkJ
CQkwRkVDODU3NTFCREFDREM3MDA4MEZGNzQgLyogQWlyQ29kZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjYxODMyQjFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ3VzdG9tLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGNDU3MDM4MUJFNDRDOTEwMDYyQTYyOSAvKiBBaXJFbGltaW5hdGVEZWFkQ29k
ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1M0M2RkVGMTFFOEFGRTBDMDBCMTg0MjUgLyogV2Fz
bU9wY29kZU9yaWdpbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjYxODMyQzFDNDVCRjA3MDA3
MjQ1MEIgLyogQWlyRW1pdFNodWZmbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0REUxQ0Ux
QzRDMUI1NDAwNEQ2QzExIC8qIEFpckZpeE9idmlvdXNTcGlsbHMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMjYyRDg1QjYxQzBENjUwRjAwNkFDQjYxIC8qIEFpckZpeFBhcnRpYWxSZWdpc3RlclN0
YWxscy5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1ZhbHVlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmNwcApp
bmRleCA5MzQ4M2VjODc3M2VjYTQ3OTEyNzI4N2MyYWFlN2FhYmU3ZGZjZjg5Li44YzkxMGFhZjQx
YjgyMTJmYzY3NDFhNmQ3NWQ0Y2Q0MWYzOGI3YWQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
VmFsdWUuY3BwCkBAIC0yMjIsOSArMjIyLDYgQEAgdm9pZCBWYWx1ZTo6ZGVlcER1bXAoY29uc3Qg
UHJvY2VkdXJlKiBwcm9jLCBQcmludFN0cmVhbSYgb3V0KSBjb25zdAogICAgIENvbW1hUHJpbnRl
ciBjb21tYTsKICAgICBkdW1wQ2hpbGRyZW4oY29tbWEsIG91dCk7CiAKLSAgICBpZiAobV9vcmln
aW4pCi0gICAgICAgIG91dC5wcmludChjb21tYSwgT3JpZ2luRHVtcChwcm9jLCBtX29yaWdpbikp
OwotCiAgICAgZHVtcE1ldGEoY29tbWEsIG91dCk7CiAKICAgICB7CkBAIC0yMzMsNiArMjMwLDkg
QEAgdm9pZCBWYWx1ZTo6ZGVlcER1bXAoY29uc3QgUHJvY2VkdXJlKiBwcm9jLCBQcmludFN0cmVh
bSYgb3V0KSBjb25zdAogICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBzdHJpbmcpOwogICAg
IH0KIAorICAgIGlmIChtX29yaWdpbikKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCBPcmlnaW5E
dW1wKHByb2MsIG1fb3JpZ2luKSk7CisKICAgICBvdXQucHJpbnQoIikiKTsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCmluZGV4IGZh
YzU3YWRkYWYwNzRlOWE4Y2ZlNjA2MzMzNWYzMGRhMmU5NmQzYTIuLmY4YmIxM2Y2NmQ4Zjk0ZGFk
NTA0ZTE4N2Q3MDM5MGNmMzI0MGY0ZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKQEAgLTUzLDYgKzUzLDcgQEAKICNpbmNsdWRlICJX
YXNtRXhjZXB0aW9uVHlwZS5oIgogI2luY2x1ZGUgIldhc21GdW5jdGlvblBhcnNlci5oIgogI2lu
Y2x1ZGUgIldhc21NZW1vcnkuaCIKKyNpbmNsdWRlICJXYXNtT3Bjb2RlT3JpZ2luLmgiCiAjaW5j
bHVkZSA8d3RmL09wdGlvbmFsLmg+CiAKIHZvaWQgZHVtcFByb2NlZHVyZSh2b2lkKiBwdHIpCkBA
IC0yMDQsMTQgKzIwNSwxNSBAQCBwdWJsaWM6CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNF
RF9SRVRVUk4gYWRkVW5yZWFjaGFibGUoKTsKIAogICAgIHZvaWQgZHVtcChjb25zdCBWZWN0b3I8
Q29udHJvbEVudHJ5PiYgY29udHJvbFN0YWNrLCBjb25zdCBFeHByZXNzaW9uTGlzdCogZXhwcmVz
c2lvblN0YWNrKTsKKyAgICB2b2lkIHNldFBhcnNlcihGdW5jdGlvblBhcnNlcjxCM0lSR2VuZXJh
dG9yPiogcGFyc2VyKSB7IG1fcGFyc2VyID0gcGFyc2VyOyB9OwogCitwcml2YXRlOgogICAgIHZv
aWQgZW1pdEV4Y2VwdGlvbkNoZWNrKENDYWxsSGVscGVycyYsIEV4Y2VwdGlvblR5cGUpOwogCi1w
cml2YXRlOgogICAgIEV4cHJlc3Npb25UeXBlIGVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVyKEV4
cHJlc3Npb25UeXBlIHBvaW50ZXIsIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3Qgc2l6ZU9mT3Ap
OwogICAgIEIzOjpLaW5kIG1lbW9yeUtpbmQoQjM6Ok9wY29kZSBtZW1vcnlPcCk7Ci0gICAgRXhw
cmVzc2lvblR5cGUgZW1pdExvYWRPcChMb2FkT3BUeXBlLCBPcmlnaW4sIEV4cHJlc3Npb25UeXBl
IHBvaW50ZXIsIHVpbnQzMl90IG9mZnNldCk7Ci0gICAgdm9pZCBlbWl0U3RvcmVPcChTdG9yZU9w
VHlwZSwgT3JpZ2luLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSB2YWx1
ZSwgdWludDMyX3Qgb2Zmc2V0KTsKKyAgICBFeHByZXNzaW9uVHlwZSBlbWl0TG9hZE9wKExvYWRP
cFR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIHVpbnQzMl90IG9mZnNldCk7CisgICAgdm9p
ZCBlbWl0U3RvcmVPcChTdG9yZU9wVHlwZSwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVz
c2lvblR5cGUgdmFsdWUsIHVpbnQzMl90IG9mZnNldCk7CiAKICAgICB2b2lkIHVuaWZ5KFZhcmlh
YmxlKiB0YXJnZXQsIGNvbnN0IEV4cHJlc3Npb25UeXBlIHNvdXJjZSk7CiAgICAgdm9pZCB1bmlm
eVZhbHVlc1dpdGhCbG9jayhjb25zdCBFeHByZXNzaW9uTGlzdCYgcmVzdWx0U3RhY2ssIFJlc3Vs
dExpc3QmIHN0YWNrKTsKQEAgLTIxOSwxMiArMjIxLDE2IEBAIHByaXZhdGU6CiAKICAgICB2b2lk
IGVtaXRDaGVja3NGb3JNb2RPckRpdihCMzo6T3Bjb2RlLCBFeHByZXNzaW9uVHlwZSBsZWZ0LCBF
eHByZXNzaW9uVHlwZSByaWdodCk7CiAKKyAgICBPcmlnaW4gb3JpZ2luKCk7CisKICAgICBWTSYg
bV92bTsKKyAgICBGdW5jdGlvblBhcnNlcjxCM0lSR2VuZXJhdG9yPiogbV9wYXJzZXI7CiAgICAg
Y29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIG1faW5mbzsKICAgICBQcm9jZWR1cmUmIG1fcHJvYzsK
ICAgICBCYXNpY0Jsb2NrKiBtX2N1cnJlbnRCbG9jazsKICAgICBWZWN0b3I8VmFyaWFibGUqPiBt
X2xvY2FsczsKICAgICBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIG1fdW5saW5rZWRX
YXNtVG9XYXNtQ2FsbHM7IC8vIExpc3QgZWFjaCBjYWxsIHNpdGUgYW5kIHRoZSBmdW5jdGlvbiBp
bmRleCB3aG9zZSBhZGRyZXNzIGl0IHNob3VsZCBiZSBwYXRjaGVkIHdpdGguCisgICAgVmVjdG9y
PHN0ZDo6dW5pcXVlX3B0cjxPcGNvZGVPcmlnaW4+PiBtX29yaWdpbnM7CiAgICAgR1BSUmVnIG1f
bWVtb3J5QmFzZUdQUjsKICAgICBHUFJSZWcgbV9tZW1vcnlTaXplR1BSOwogICAgIFZhbHVlKiBt
X3plcm9WYWx1ZXNbbnVtVHlwZXNdOwpAQCAtMzAyLDI1ICszMDgsNyBAQCBCM0lSR2VuZXJhdG9y
OjpCM0lSR2VuZXJhdG9yKFZNJiB2bSwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIFBy
b2NlZHVyZSYgcAogICAgIG1faW5zdGFuY2VWYWx1ZSA9IGxvYWRXYXNtQ29udGV4dChtX3Byb2Ms
IG1fY3VycmVudEJsb2NrKTsKIH0KIAotc3RydWN0IE1lbW9yeUJhc2VBbmRTaXplIHsKLSAgICBW
YWx1ZSogYmFzZTsKLSAgICBWYWx1ZSogc2l6ZTsKLX07Ci0KLXN0YXRpYyBNZW1vcnlCYXNlQW5k
U2l6ZSBnZXRNZW1vcnlCYXNlQW5kU2l6ZShWTSYgdm0sIFZhbHVlKiBpbnN0YW5jZSwgUHJvY2Vk
dXJlJiBwcm9jLCBCYXNpY0Jsb2NrKiBibG9jaykKLXsKLSAgICBWYWx1ZSogbWVtb3J5T2JqZWN0
ID0gYmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgTG9hZCwgcG9pbnRlclR5cGUo
KSwgT3JpZ2luKCksIGluc3RhbmNlLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mTWVt
b3J5KCkpOwotCi0gICAgc3RhdGljX2Fzc2VydChzaXplb2YoZGVjbHR5cGUobG9hZFdhc21Db250
ZXh0KHZtKS0+bWVtb3J5KCktPm1lbW9yeSgpLm1lbW9yeSgpKSkgPT0gc2l6ZW9mKHZvaWQqKSwg
ImNvZGVnZW4gcmVsaWVzIG9uIHRoaXMgc2l6ZSIpOwotICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9m
KGRlY2x0eXBlKGxvYWRXYXNtQ29udGV4dCh2bSktPm1lbW9yeSgpLT5tZW1vcnkoKS5zaXplKCkp
KSA9PSBzaXplb2YodWludDY0X3QpLCAiY29kZWdlbiByZWxpZXMgb24gdGhpcyBzaXplIik7Ci0g
ICAgTWVtb3J5QmFzZUFuZFNpemUgcmVzdWx0OwotICAgIHJlc3VsdC5iYXNlID0gYmxvY2stPmFw
cGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgT3JpZ2luKCks
IG1lbW9yeU9iamVjdCwgSlNXZWJBc3NlbWJseU1lbW9yeTo6b2Zmc2V0T2ZNZW1vcnkoKSk7Ci0g
ICAgcmVzdWx0LnNpemUgPSBibG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihwcm9jLCBMb2Fk
LCBJbnQ2NCwgT3JpZ2luKCksIG1lbW9yeU9iamVjdCwgSlNXZWJBc3NlbWJseU1lbW9yeTo6b2Zm
c2V0T2ZTaXplKCkpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIHZvaWQgcmVz
dG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUoY29uc3QgTWVtb3J5SW5mb3JtYXRpb24mIG1lbW9y
eSwgVmFsdWUqIGluc3RhbmNlLCBQcm9jZWR1cmUmIHByb2MsIEJhc2ljQmxvY2sqIGJsb2NrKQor
c3RhdGljIHZvaWQgcmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUoY29uc3QgTWVtb3J5SW5m
b3JtYXRpb24mIG1lbW9yeSwgVmFsdWUqIGluc3RhbmNlLCBQcm9jZWR1cmUmIHByb2MsIEJhc2lj
QmxvY2sqIGJsb2NrLCBPcmlnaW4gb3JpZ2luKQogewogICAgIHN0b3JlV2FzbUNvbnRleHQocHJv
YywgYmxvY2ssIGluc3RhbmNlKTsKIApAQCAtMzMxLDcgKzMxOSw3IEBAIHN0YXRpYyB2b2lkIHJl
c3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKGNvbnN0IE1lbW9yeUluZm9ybWF0aW9uJiBtZW1v
cnksIFZhbHVlCiAgICAgICAgIGZvciAoYXV0byBpbmZvIDogcGlubmVkUmVncy0+c2l6ZVJlZ2lz
dGVycykKICAgICAgICAgICAgIGNsb2JiZXJzLnNldChpbmZvLnNpemVSZWdpc3Rlcik7CiAKLSAg
ICAgICAgQjM6OlBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IGJsb2NrLT5hcHBlbmROZXc8
QjM6OlBhdGNocG9pbnRWYWx1ZT4ocHJvYywgQjM6OlZvaWQsIE9yaWdpbigpKTsKKyAgICAgICAg
QjM6OlBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IGJsb2NrLT5hcHBlbmROZXc8QjM6OlBh
dGNocG9pbnRWYWx1ZT4ocHJvYywgQjM6OlZvaWQsIG9yaWdpbik7CiAgICAgICAgIEVmZmVjdHMg
ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKICAgICAgICAgZWZmZWN0cy53cml0ZXNQaW5uZWQg
PSB0cnVlOwogICAgICAgICBlZmZlY3RzLnJlYWRzID0gQjM6OkhlYXBSYW5nZTo6dG9wKCk7CkBA
IC0zODAsNyArMzY4LDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRMb2NhbChUeXBlIHR5cGUs
IHVpbnQzMl90IGNvdW50KSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgZm9yICh1aW50MzJfdCBpID0g
MDsgaSA8IGNvdW50OyArK2kpIHsKICAgICAgICAgVmFyaWFibGUqIGxvY2FsID0gbV9wcm9jLmFk
ZFZhcmlhYmxlKHRvQjNUeXBlKHR5cGUpKTsKICAgICAgICAgbV9sb2NhbHMudW5jaGVja2VkQXBw
ZW5kKGxvY2FsKTsKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYXJpYWJsZVZh
bHVlPihtX3Byb2MsIFNldCwgT3JpZ2luKCksIGxvY2FsLCB6ZXJvRm9yVHlwZSh0eXBlKSk7Cisg
ICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4obV9wcm9jLCBT
ZXQsIG9yaWdpbigpLCBsb2NhbCwgemVyb0ZvclR5cGUodHlwZSkpOwogICAgIH0KICAgICByZXR1
cm4geyB9OwogfQpAQCAtNDAzLDEzICszOTEsMTMgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRB
cmd1bWVudHMoY29uc3QgU2lnbmF0dXJlKiBzaWduYXR1cmUpIC0+IFBhcnRpYWxSZXN1bHQKIGF1
dG8gQjNJUkdlbmVyYXRvcjo6Z2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBBU1NFUlQobV9sb2NhbHNbaW5kZXhd
KTsKLSAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+
KG1fcHJvYywgQjM6OkdldCwgT3JpZ2luKCksIG1fbG9jYWxzW2luZGV4XSk7CisgICAgcmVzdWx0
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihtX3Byb2MsIEIzOjpH
ZXQsIG9yaWdpbigpLCBtX2xvY2Fsc1tpbmRleF0pOwogICAgIHJldHVybiB7IH07CiB9CiAKIGF1
dG8gQjNJUkdlbmVyYXRvcjo6YWRkVW5yZWFjaGFibGUoKSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0g
ICAgQjM6OlBhdGNocG9pbnRWYWx1ZSogdW5yZWFjaGFibGUgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PEIzOjpQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgQjM6OlZvaWQsIE9yaWdpbigpKTsK
KyAgICBCMzo6UGF0Y2hwb2ludFZhbHVlKiB1bnJlYWNoYWJsZSA9IG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8QjM6OlBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBCMzo6Vm9pZCwgb3JpZ2luKCkp
OwogICAgIHVucmVhY2hhYmxlLT5zZXRHZW5lcmF0b3IoW3RoaXNdIChDQ2FsbEhlbHBlcnMmIGpp
dCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKICAgICAgICAgdGhpcy0+
ZW1pdEV4Y2VwdGlvbkNoZWNrKGppdCwgRXhjZXB0aW9uVHlwZTo6VW5yZWFjaGFibGUpOwogICAg
IH0pOwpAQCAtNDM4LDI1ICs0MjYsMjggQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRHcm93TWVt
b3J5KEV4cHJlc3Npb25UeXBlIGRlbHRhLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KQogICAgICAg
ICByZXR1cm4gcmVzdWx0LnBhZ2VDb3VudCgpOwogICAgIH07CiAKLSAgICByZXN1bHQgPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJvYywgSW50MzIsIE9yaWdpbigp
LAotICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KG1fcHJv
YywgT3JpZ2luKCksIGJpdHdpc2VfY2FzdDx2b2lkKj4oZ3Jvd01lbW9yeSkpLAotICAgICAgICBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6RnJhbWVQb2lu
dGVyLCBPcmlnaW4oKSksIGRlbHRhKTsKKyAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJvYywgSW50MzIsIG9yaWdpbigpLAorICAgICAgICBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIGJp
dHdpc2VfY2FzdDx2b2lkKj4oZ3Jvd01lbW9yeSkpLAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6RnJhbWVQb2ludGVyLCBvcmlnaW4oKSks
IGRlbHRhKTsKIAotICAgIHJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKG1faW5mby5tZW1v
cnksIG1faW5zdGFuY2VWYWx1ZSwgbV9wcm9jLCBtX2N1cnJlbnRCbG9jayk7CisgICAgcmVzdG9y
ZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUobV9pbmZvLm1lbW9yeSwgbV9pbnN0YW5jZVZhbHVlLCBt
X3Byb2MsIG1fY3VycmVudEJsb2NrLCBvcmlnaW4oKSk7CiAKICAgICByZXR1cm4geyB9OwogfQog
CiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZEN1cnJlbnRNZW1vcnkoRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewotICAgIGF1dG8gbWVtb3J5VmFsdWUgPSBnZXRNZW1v
cnlCYXNlQW5kU2l6ZShtX3ZtLCBtX2luc3RhbmNlVmFsdWUsIG1fcHJvYywgbV9jdXJyZW50Qmxv
Y2spOworICAgIFZhbHVlKiBtZW1vcnlPYmplY3QgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBtX2lu
c3RhbmNlVmFsdWUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZNZW1vcnkoKSk7CiAK
KyAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihkZWNsdHlwZShsb2FkV2FzbUNvbnRleHQobV92bSkt
Pm1lbW9yeSgpLT5tZW1vcnkoKS5zaXplKCkpKSA9PSBzaXplb2YodWludDY0X3QpLCAiY29kZWdl
biByZWxpZXMgb24gdGhpcyBzaXplIik7CisgICAgVmFsdWUqIHNpemUgPSBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIEludDY0LCBvcmlnaW4oKSwg
bWVtb3J5T2JqZWN0LCBKU1dlYkFzc2VtYmx5TWVtb3J5OjpvZmZzZXRPZlNpemUoKSk7CisgICAg
CiAgICAgY29uc3RleHByIHVpbnQzMl90IHNoaWZ0VmFsdWUgPSAxNjsKICAgICBzdGF0aWNfYXNz
ZXJ0KFBhZ2VDb3VudDo6cGFnZVNpemUgPT0gMSA8PCBzaGlmdFZhbHVlLCAiVGhpcyBtdXN0IGhv
bGQgZm9yIHRoZSBjb2RlIGJlbG93IHRvIGJlIGNvcnJlY3QuIik7Ci0gICAgVmFsdWUqIG51bVBh
Z2VzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBaU2hyLCBPcmln
aW4oKSwKLSAgICAgICAgbWVtb3J5VmFsdWUuc2l6ZSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxDb25zdDMyVmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIHNoaWZ0VmFsdWUpKTsKKyAgICBWYWx1
ZSogbnVtUGFnZXMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIFpT
aHIsIG9yaWdpbigpLAorICAgICAgICBzaXplLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENv
bnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgc2hpZnRWYWx1ZSkpOwogCi0gICAgcmVzdWx0
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBUcnVuYywgT3JpZ2lu
KCksIG51bVBhZ2VzKTsKKyAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZh
bHVlPihtX3Byb2MsIFRydW5jLCBvcmlnaW4oKSwgbnVtUGFnZXMpOwogCiAgICAgcmV0dXJuIHsg
fTsKIH0KQEAgLTQ2NCwyMiArNDU1LDIyIEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ3VycmVu
dE1lbW9yeShFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiBhdXRvIEIz
SVJHZW5lcmF0b3I6OnNldExvY2FsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1
ZSkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIEFTU0VSVChtX2xvY2Fsc1tpbmRleF0pOwotICAg
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4obV9wcm9jLCBCMzo6U2V0
LCBPcmlnaW4oKSwgbV9sb2NhbHNbaW5kZXhdLCB2YWx1ZSk7CisgICAgbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihtX3Byb2MsIEIzOjpTZXQsIG9yaWdpbigpLCBtX2xv
Y2Fsc1tpbmRleF0sIHZhbHVlKTsKICAgICByZXR1cm4geyB9OwogfQogCiBhdXRvIEIzSVJHZW5l
cmF0b3I6OmdldEdsb2JhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkg
LT4gUGFydGlhbFJlc3VsdAogewotICAgIFZhbHVlKiBnbG9iYWxzQXJyYXkgPSBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCks
IE9yaWdpbigpLCBtX2luc3RhbmNlVmFsdWUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0
T2ZHbG9iYWxzKCkpOwotICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVt
b3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgdG9CM1R5cGUobV9pbmZvLmdsb2JhbHNbaW5kZXhdLnR5
cGUpLCBPcmlnaW4oKSwgZ2xvYmFsc0FycmF5LCBpbmRleCAqIHNpemVvZihSZWdpc3RlcikpOwor
ICAgIFZhbHVlKiBnbG9iYWxzQXJyYXkgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9y
eVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBtX2luc3RhbmNl
VmFsdWUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZHbG9iYWxzKCkpOworICAgIHJl
c3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9h
ZCwgdG9CM1R5cGUobV9pbmZvLmdsb2JhbHNbaW5kZXhdLnR5cGUpLCBvcmlnaW4oKSwgZ2xvYmFs
c0FycmF5LCBpbmRleCAqIHNpemVvZihSZWdpc3RlcikpOwogICAgIHJldHVybiB7IH07CiB9CiAK
IGF1dG8gQjNJUkdlbmVyYXRvcjo6c2V0R2xvYmFsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9u
VHlwZSB2YWx1ZSkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIEFTU0VSVCh0b0IzVHlwZShtX2lu
Zm8uZ2xvYmFsc1tpbmRleF0udHlwZSkgPT0gdmFsdWUtPnR5cGUoKSk7Ci0gICAgVmFsdWUqIGds
b2JhbHNBcnJheSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJv
YywgTG9hZCwgcG9pbnRlclR5cGUoKSwgT3JpZ2luKCksIG1faW5zdGFuY2VWYWx1ZSwgSlNXZWJB
c3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkdsb2JhbHMoKSk7Ci0gICAgbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBTdG9yZSwgT3JpZ2luKCksIHZhbHVlLCBn
bG9iYWxzQXJyYXksIGluZGV4ICogc2l6ZW9mKFJlZ2lzdGVyKSk7CisgICAgVmFsdWUqIGdsb2Jh
bHNBcnJheSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywg
TG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIG1faW5zdGFuY2VWYWx1ZSwgSlNXZWJBc3Nl
bWJseUluc3RhbmNlOjpvZmZzZXRPZkdsb2JhbHMoKSk7CisgICAgbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBTdG9yZSwgb3JpZ2luKCksIHZhbHVlLCBnbG9i
YWxzQXJyYXksIGluZGV4ICogc2l6ZW9mKFJlZ2lzdGVyKSk7CiAgICAgcmV0dXJuIHsgfTsKIH0K
IApAQCAtNDg5LDEwICs0ODAsMTAgQEAgaW5saW5lIFZhbHVlKiBCM0lSR2VuZXJhdG9yOjplbWl0
Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihFeHByZXNzaW9uVHlwZSBwb2ludGVyLAogICAgIGlmICht
X2luZm8ubWVtb3J5Lm1vZGUoKSA9PSBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZykgewogICAg
ICAgICBBU1NFUlQobV9tZW1vcnlTaXplR1BSKTsKICAgICAgICAgQVNTRVJUKHNpemVPZk9wZXJh
dGlvbiArIG9mZnNldCA+IG9mZnNldCk7Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8V2FzbUJvdW5kc0NoZWNrVmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIHBvaW50ZXIsIG1fbWVt
b3J5U2l6ZUdQUiwgc2l6ZU9mT3BlcmF0aW9uICsgb2Zmc2V0IC0gMSk7CisgICAgICAgIG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8V2FzbUJvdW5kc0NoZWNrVmFsdWU+KG1fcHJvYywgb3JpZ2lu
KCksIHBvaW50ZXIsIG1fbWVtb3J5U2l6ZUdQUiwgc2l6ZU9mT3BlcmF0aW9uICsgb2Zmc2V0IC0g
MSk7CiAgICAgfQotICAgIHBvaW50ZXIgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVl
PihtX3Byb2MsIFpFeHQzMiwgT3JpZ2luKCksIHBvaW50ZXIpOwotICAgIHJldHVybiBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PFdhc21BZGRyZXNzVmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIHBv
aW50ZXIsIG1fbWVtb3J5QmFzZUdQUik7CisgICAgcG9pbnRlciA9IG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8VmFsdWU+KG1fcHJvYywgWkV4dDMyLCBvcmlnaW4oKSwgcG9pbnRlcik7CisgICAg
cmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8V2FzbUFkZHJlc3NWYWx1ZT4obV9wcm9j
LCBvcmlnaW4oKSwgcG9pbnRlciwgbV9tZW1vcnlCYXNlR1BSKTsKIH0KIAogaW5saW5lIHVpbnQz
Ml90IHNpemVPZkxvYWRPcChMb2FkT3BUeXBlIG9wKQpAQCAtNTI3LDc0ICs1MTgsNzQgQEAgaW5s
aW5lIEIzOjpLaW5kIEIzSVJHZW5lcmF0b3I6Om1lbW9yeUtpbmQoQjM6Ok9wY29kZSBtZW1vcnlP
cCkKICAgICByZXR1cm4gbWVtb3J5T3A7CiB9CiAKLWlubGluZSBWYWx1ZSogQjNJUkdlbmVyYXRv
cjo6ZW1pdExvYWRPcChMb2FkT3BUeXBlIG9wLCBPcmlnaW4gb3JpZ2luLCBFeHByZXNzaW9uVHlw
ZSBwb2ludGVyLCB1aW50MzJfdCBvZmZzZXQpCitpbmxpbmUgVmFsdWUqIEIzSVJHZW5lcmF0b3I6
OmVtaXRMb2FkT3AoTG9hZE9wVHlwZSBvcCwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMy
X3Qgb2Zmc2V0KQogewogICAgIHN3aXRjaCAob3ApIHsKICAgICBjYXNlIExvYWRPcFR5cGU6Okkz
MkxvYWQ4UzogewotICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1v
cnlWYWx1ZT4obV9wcm9jLCBtZW1vcnlLaW5kKExvYWQ4UyksIG9yaWdpbiwgcG9pbnRlciwgb2Zm
c2V0KTsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFs
dWU+KG1fcHJvYywgbWVtb3J5S2luZChMb2FkOFMpLCBvcmlnaW4oKSwgcG9pbnRlciwgb2Zmc2V0
KTsKICAgICB9CiAKICAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQ4UzogewotICAgICAgICBW
YWx1ZSogdmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3By
b2MsIG1lbW9yeUtpbmQoTG9hZDhTKSwgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQpOwotICAgICAg
ICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBTRXh0MzIs
IG9yaWdpbiwgdmFsdWUpOworICAgICAgICBWYWx1ZSogdmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIG1lbW9yeUtpbmQoTG9hZDhTKSwgb3JpZ2lu
KCksIHBvaW50ZXIsIG9mZnNldCk7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFZhbHVlPihtX3Byb2MsIFNFeHQzMiwgb3JpZ2luKCksIHZhbHVlKTsKICAgICB9CiAK
ICAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQ4VTogewotICAgICAgICByZXR1cm4gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBtZW1vcnlLaW5kKExvYWQ4
WiksIG9yaWdpbiwgcG9pbnRlciwgb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgbWVtb3J5S2luZChMb2FkOFopLCBv
cmlnaW4oKSwgcG9pbnRlciwgb2Zmc2V0KTsKICAgICB9CiAKICAgICBjYXNlIExvYWRPcFR5cGU6
Okk2NExvYWQ4VTogewotICAgICAgICBWYWx1ZSogdmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIG1lbW9yeUtpbmQoTG9hZDhaKSwgb3JpZ2luLCBw
b2ludGVyLCBvZmZzZXQpOwotICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxWYWx1ZT4obV9wcm9jLCBaRXh0MzIsIG9yaWdpbiwgdmFsdWUpOworICAgICAgICBWYWx1ZSog
dmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIG1l
bW9yeUtpbmQoTG9hZDhaKSwgb3JpZ2luKCksIHBvaW50ZXIsIG9mZnNldCk7CisgICAgICAgIHJl
dHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIFpFeHQzMiwgb3Jp
Z2luKCksIHZhbHVlKTsKICAgICB9CiAKICAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQxNlM6
IHsKLSAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+
KG1fcHJvYywgbWVtb3J5S2luZChMb2FkMTZTKSwgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQpOwor
ICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9w
cm9jLCBtZW1vcnlLaW5kKExvYWQxNlMpLCBvcmlnaW4oKSwgcG9pbnRlciwgb2Zmc2V0KTsKICAg
ICB9CiAgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkMTZTOiB7Ci0gICAgICAgIFZhbHVlKiB2
YWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgbWVt
b3J5S2luZChMb2FkMTZTKSwgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQpOwotICAgICAgICByZXR1
cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBTRXh0MzIsIG9yaWdp
biwgdmFsdWUpOworICAgICAgICBWYWx1ZSogdmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIG1lbW9yeUtpbmQoTG9hZDE2UyksIG9yaWdpbigpLCBw
b2ludGVyLCBvZmZzZXQpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxWYWx1ZT4obV9wcm9jLCBTRXh0MzIsIG9yaWdpbigpLCB2YWx1ZSk7CiAgICAgfQogCiAgICAg
Y2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkOiB7Ci0gICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIG1lbW9yeUtpbmQoTG9hZCksIEludDMy
LCBvcmlnaW4sIHBvaW50ZXIsIG9mZnNldCk7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIG1lbW9yeUtpbmQoTG9hZCksIEludDMy
LCBvcmlnaW4oKSwgcG9pbnRlciwgb2Zmc2V0KTsKICAgICB9CiAKICAgICBjYXNlIExvYWRPcFR5
cGU6Okk2NExvYWQzMlU6IHsKLSAgICAgICAgVmFsdWUqIHZhbHVlID0gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBtZW1vcnlLaW5kKExvYWQpLCBJbnQzMiwg
b3JpZ2luLCBwb2ludGVyLCBvZmZzZXQpOwotICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBaRXh0MzIsIG9yaWdpbiwgdmFsdWUpOworICAgICAg
ICBWYWx1ZSogdmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPiht
X3Byb2MsIG1lbW9yeUtpbmQoTG9hZCksIEludDMyLCBvcmlnaW4oKSwgcG9pbnRlciwgb2Zmc2V0
KTsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJv
YywgWkV4dDMyLCBvcmlnaW4oKSwgdmFsdWUpOwogICAgIH0KIAogICAgIGNhc2UgTG9hZE9wVHlw
ZTo6STY0TG9hZDMyUzogewotICAgICAgICBWYWx1ZSogdmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIG1lbW9yeUtpbmQoTG9hZCksIEludDMyLCBv
cmlnaW4sIHBvaW50ZXIsIG9mZnNldCk7Ci0gICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIFNFeHQzMiwgb3JpZ2luLCB2YWx1ZSk7CisgICAgICAg
IFZhbHVlKiB2YWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1f
cHJvYywgbWVtb3J5S2luZChMb2FkKSwgSW50MzIsIG9yaWdpbigpLCBwb2ludGVyLCBvZmZzZXQp
OworICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9j
LCBTRXh0MzIsIG9yaWdpbigpLCB2YWx1ZSk7CiAgICAgfQogCiAgICAgY2FzZSBMb2FkT3BUeXBl
OjpJNjRMb2FkOiB7Ci0gICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1l
bW9yeVZhbHVlPihtX3Byb2MsIG1lbW9yeUtpbmQoTG9hZCksIEludDY0LCBvcmlnaW4sIHBvaW50
ZXIsIG9mZnNldCk7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1l
bW9yeVZhbHVlPihtX3Byb2MsIG1lbW9yeUtpbmQoTG9hZCksIEludDY0LCBvcmlnaW4oKSwgcG9p
bnRlciwgb2Zmc2V0KTsKICAgICB9CiAKICAgICBjYXNlIExvYWRPcFR5cGU6OkYzMkxvYWQ6IHsK
LSAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1f
cHJvYywgbWVtb3J5S2luZChMb2FkKSwgRmxvYXQsIG9yaWdpbiwgcG9pbnRlciwgb2Zmc2V0KTsK
KyAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1f
cHJvYywgbWVtb3J5S2luZChMb2FkKSwgRmxvYXQsIG9yaWdpbigpLCBwb2ludGVyLCBvZmZzZXQp
OwogICAgIH0KIAogICAgIGNhc2UgTG9hZE9wVHlwZTo6RjY0TG9hZDogewotICAgICAgICByZXR1
cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBtZW1vcnlL
aW5kKExvYWQpLCBEb3VibGUsIG9yaWdpbiwgcG9pbnRlciwgb2Zmc2V0KTsKKyAgICAgICAgcmV0
dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgbWVtb3J5
S2luZChMb2FkKSwgRG91YmxlLCBvcmlnaW4oKSwgcG9pbnRlciwgb2Zmc2V0KTsKICAgICB9CiAK
ICAgICAvLyBGSVhNRTogQjMgZG9lc24ndCBzdXBwb3J0IExvYWQxNlogeWV0LiBXZSBzaG91bGQg
bG93ZXIgdG8gdGhhdCB2YWx1ZSB3aGVuCiAgICAgLy8gaXQncyBhZGRlZC4gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTg4NAogICAgIGNhc2UgTG9hZE9wVHlwZTo6
STMyTG9hZDE2VTogewotICAgICAgICBWYWx1ZSogdmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIG1lbW9yeUtpbmQoTG9hZDE2UyksIG9yaWdpbiwg
cG9pbnRlciwgb2Zmc2V0KTsKLSAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8VmFsdWU+KG1fcHJvYywgQml0QW5kLCBPcmlnaW4oKSwgdmFsdWUsCi0gICAgICAgICAgICAg
ICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywgT3JpZ2lu
KCksIDB4MDAwMGZmZmYpKTsKKyAgICAgICAgVmFsdWUqIHZhbHVlID0gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBtZW1vcnlLaW5kKExvYWQxNlMpLCBvcmln
aW4oKSwgcG9pbnRlciwgb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQml0QW5kLCBvcmlnaW4oKSwgdmFsdWUsCisgICAgICAg
ICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmln
aW4oKSwgMHgwMDAwZmZmZikpOwogICAgIH0KICAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQx
NlU6IHsKLSAgICAgICAgVmFsdWUqIHZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxN
ZW1vcnlWYWx1ZT4obV9wcm9jLCBtZW1vcnlLaW5kKExvYWQxNlMpLCBvcmlnaW4sIHBvaW50ZXIs
IG9mZnNldCk7Ci0gICAgICAgIFZhbHVlKiBwYXJ0aWFsUmVzdWx0ID0gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCaXRBbmQsIE9yaWdpbigpLCB2YWx1ZSwKLSAgICAg
ICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9j
LCBPcmlnaW4oKSwgMHgwMDAwZmZmZikpOworICAgICAgICBWYWx1ZSogdmFsdWUgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIG1lbW9yeUtpbmQoTG9hZDE2
UyksIG9yaWdpbigpLCBwb2ludGVyLCBvZmZzZXQpOworICAgICAgICBWYWx1ZSogcGFydGlhbFJl
c3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQml0QW5kLCBv
cmlnaW4oKSwgdmFsdWUsCisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENv
bnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgMHgwMDAwZmZmZikpOwogCi0gICAgICAgIHJl
dHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIFpFeHQzMiwgT3Jp
Z2luKCksIHBhcnRpYWxSZXN1bHQpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBaRXh0MzIsIG9yaWdpbigpLCBwYXJ0aWFsUmVzdWx0KTsK
ICAgICB9CiAgICAgfQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC02MDcs
NyArNTk4LDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjpsb2FkKExvYWRPcFR5cGUgb3AsIEV4cHJl
c3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlJgogICAgIGlmIChVTkxJS0VMWShzdW1P
dmVyZmxvd3M8dWludDMyX3Q+KG9mZnNldCwgc2l6ZU9mTG9hZE9wKG9wKSkpKSB7CiAgICAgICAg
IC8vIEZJWE1FOiBFdmVuIHRob3VnaCB0aGlzIGlzIHByb3ZhYmx5IG91dCBvZiBib3VuZHMsIGl0
J3Mgbm90IGEgdmFsaWRhdGlvbiBlcnJvciwgc28gd2UgaGF2ZSB0byBoYW5kbGUgaXQKICAgICAg
ICAgLy8gYXMgYSBydW50aW1lIGV4Y2VwdGlvbi4gSG93ZXZlciwgdGhpcyBtYXkgY2hhbmdlOiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2NDM1Ci0gICAgICAgIEIz
OjpQYXRjaHBvaW50VmFsdWUqIHRocm93RXhjZXB0aW9uID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxCMzo6UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEIzOjpWb2lkLCBPcmlnaW4oKSk7Cisg
ICAgICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIHRocm93RXhjZXB0aW9uID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxCMzo6UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEIzOjpWb2lkLCBvcmln
aW4oKSk7CiAgICAgICAgIHRocm93RXhjZXB0aW9uLT5zZXRHZW5lcmF0b3IoW3RoaXNdIChDQ2Fs
bEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKICAg
ICAgICAgICAgIHRoaXMtPmVtaXRFeGNlcHRpb25DaGVjayhqaXQsIEV4Y2VwdGlvblR5cGU6Ok91
dE9mQm91bmRzTWVtb3J5QWNjZXNzKTsKICAgICAgICAgfSk7CkBAIC02MzgsNyArNjI5LDcgQEAg
YXV0byBCM0lSR2VuZXJhdG9yOjpsb2FkKExvYWRPcFR5cGUgb3AsIEV4cHJlc3Npb25UeXBlIHBv
aW50ZXIsIEV4cHJlc3Npb25UeXBlJgogICAgICAgICB9CiAKICAgICB9IGVsc2UKLSAgICAgICAg
cmVzdWx0ID0gZW1pdExvYWRPcChvcCwgT3JpZ2luKCksIGVtaXRDaGVja0FuZFByZXBhcmVQb2lu
dGVyKHBvaW50ZXIsIG9mZnNldCwgc2l6ZU9mTG9hZE9wKG9wKSksIG9mZnNldCk7CisgICAgICAg
IHJlc3VsdCA9IGVtaXRMb2FkT3Aob3AsIGVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVyKHBvaW50
ZXIsIG9mZnNldCwgc2l6ZU9mTG9hZE9wKG9wKSksIG9mZnNldCk7CiAKICAgICByZXR1cm4geyB9
OwogfQpAQCAtNjY0LDM0ICs2NTUsMzQgQEAgaW5saW5lIHVpbnQzMl90IHNpemVPZlN0b3JlT3Ao
U3RvcmVPcFR5cGUgb3ApCiB9CiAKIAotaW5saW5lIHZvaWQgQjNJUkdlbmVyYXRvcjo6ZW1pdFN0
b3JlT3AoU3RvcmVPcFR5cGUgb3AsIE9yaWdpbiBvcmlnaW4sIEV4cHJlc3Npb25UeXBlIHBvaW50
ZXIsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCB1aW50MzJfdCBvZmZzZXQpCitpbmxpbmUgdm9pZCBC
M0lSR2VuZXJhdG9yOjplbWl0U3RvcmVPcChTdG9yZU9wVHlwZSBvcCwgRXhwcmVzc2lvblR5cGUg
cG9pbnRlciwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQzMl90IG9mZnNldCkKIHsKICAgICBz
d2l0Y2ggKG9wKSB7CiAgICAgY2FzZSBTdG9yZU9wVHlwZTo6STY0U3RvcmU4OgotICAgICAgICB2
YWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgVHJ1bmMsIG9y
aWdpbiwgdmFsdWUpOworICAgICAgICB2YWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
VmFsdWU+KG1fcHJvYywgVHJ1bmMsIG9yaWdpbigpLCB2YWx1ZSk7CiAgICAgICAgIEZBTExUSFJP
VUdIOwogCiAgICAgY2FzZSBTdG9yZU9wVHlwZTo6STMyU3RvcmU4OgotICAgICAgICBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIG1lbW9yeUtpbmQoU3RvcmU4
KSwgb3JpZ2luLCB2YWx1ZSwgcG9pbnRlciwgb2Zmc2V0KTsKKyAgICAgICAgbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBtZW1vcnlLaW5kKFN0b3JlOCksIG9y
aWdpbigpLCB2YWx1ZSwgcG9pbnRlciwgb2Zmc2V0KTsKICAgICAgICAgcmV0dXJuOwogCiAgICAg
Y2FzZSBTdG9yZU9wVHlwZTo6STY0U3RvcmUxNjoKLSAgICAgICAgdmFsdWUgPSBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIFRydW5jLCBvcmlnaW4sIHZhbHVlKTsKKyAg
ICAgICAgdmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIFRy
dW5jLCBvcmlnaW4oKSwgdmFsdWUpOwogICAgICAgICBGQUxMVEhST1VHSDsKIAogICAgIGNhc2Ug
U3RvcmVPcFR5cGU6OkkzMlN0b3JlMTY6Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgbWVtb3J5S2luZChTdG9yZTE2KSwgb3JpZ2luLCB2YWx1
ZSwgcG9pbnRlciwgb2Zmc2V0KTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxN
ZW1vcnlWYWx1ZT4obV9wcm9jLCBtZW1vcnlLaW5kKFN0b3JlMTYpLCBvcmlnaW4oKSwgdmFsdWUs
IHBvaW50ZXIsIG9mZnNldCk7CiAgICAgICAgIHJldHVybjsKIAogICAgIGNhc2UgU3RvcmVPcFR5
cGU6Okk2NFN0b3JlMzI6Ci0gICAgICAgIHZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxWYWx1ZT4obV9wcm9jLCBUcnVuYywgb3JpZ2luLCB2YWx1ZSk7CisgICAgICAgIHZhbHVlID0g
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBUcnVuYywgb3JpZ2luKCks
IHZhbHVlKTsKICAgICAgICAgRkFMTFRIUk9VR0g7CiAKICAgICBjYXNlIFN0b3JlT3BUeXBlOjpJ
NjRTdG9yZToKICAgICBjYXNlIFN0b3JlT3BUeXBlOjpJMzJTdG9yZToKICAgICBjYXNlIFN0b3Jl
T3BUeXBlOjpGMzJTdG9yZToKICAgICBjYXNlIFN0b3JlT3BUeXBlOjpGNjRTdG9yZToKLSAgICAg
ICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBtZW1vcnlL
aW5kKFN0b3JlKSwgb3JpZ2luLCB2YWx1ZSwgcG9pbnRlciwgb2Zmc2V0KTsKKyAgICAgICAgbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBtZW1vcnlLaW5kKFN0
b3JlKSwgb3JpZ2luKCksIHZhbHVlLCBwb2ludGVyLCBvZmZzZXQpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC03MDQsMTkgKzY5
NSwxOSBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OnN0b3JlKFN0b3JlT3BUeXBlIG9wLCBFeHByZXNz
aW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZQogICAgIGlmIChVTkxJS0VMWShzdW1PdmVy
Zmxvd3M8dWludDMyX3Q+KG9mZnNldCwgc2l6ZU9mU3RvcmVPcChvcCkpKSkgewogICAgICAgICAv
LyBGSVhNRTogRXZlbiB0aG91Z2ggdGhpcyBpcyBwcm92YWJseSBvdXQgb2YgYm91bmRzLCBpdCdz
IG5vdCBhIHZhbGlkYXRpb24gZXJyb3IsIHNvIHdlIGhhdmUgdG8gaGFuZGxlIGl0CiAgICAgICAg
IC8vIGFzIGEgcnVudGltZSBleGNlcHRpb24uIEhvd2V2ZXIsIHRoaXMgbWF5IGNoYW5nZTogaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjQzNQotICAgICAgICBCMzo6
UGF0Y2hwb2ludFZhbHVlKiB0aHJvd0V4Y2VwdGlvbiA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8QjM6OlBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBCMzo6Vm9pZCwgT3JpZ2luKCkpOworICAg
ICAgICBCMzo6UGF0Y2hwb2ludFZhbHVlKiB0aHJvd0V4Y2VwdGlvbiA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8QjM6OlBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBCMzo6Vm9pZCwgb3JpZ2lu
KCkpOwogICAgICAgICB0aHJvd0V4Y2VwdGlvbi0+c2V0R2VuZXJhdG9yKFt0aGlzXSAoQ0NhbGxI
ZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CiAgICAg
ICAgICAgICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRpb25UeXBlOjpPdXRP
ZkJvdW5kc01lbW9yeUFjY2Vzcyk7CiAgICAgICAgIH0pOwogICAgIH0gZWxzZQotICAgICAgICBl
bWl0U3RvcmVPcChvcCwgT3JpZ2luKCksIGVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVyKHBvaW50
ZXIsIG9mZnNldCwgc2l6ZU9mU3RvcmVPcChvcCkpLCB2YWx1ZSwgb2Zmc2V0KTsKKyAgICAgICAg
ZW1pdFN0b3JlT3Aob3AsIGVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVyKHBvaW50ZXIsIG9mZnNl
dCwgc2l6ZU9mU3RvcmVPcChvcCkpLCB2YWx1ZSwgb2Zmc2V0KTsKIAogICAgIHJldHVybiB7IH07
CiB9CiAKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkU2VsZWN0KEV4cHJlc3Npb25UeXBlIGNvbmRp
dGlvbiwgRXhwcmVzc2lvblR5cGUgbm9uWmVybywgRXhwcmVzc2lvblR5cGUgemVybywgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewotICAgIHJlc3VsdCA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQjM6OlNlbGVjdCwgT3JpZ2luKCks
IGNvbmRpdGlvbiwgbm9uWmVybywgemVybyk7CisgICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCMzo6U2VsZWN0LCBvcmlnaW4oKSwgY29uZGl0aW9u
LCBub25aZXJvLCB6ZXJvKTsKICAgICByZXR1cm4geyB9OwogfQogCkBAIC03MjQsMTMgKzcxNSwx
MyBAQCBCM0lSR2VuZXJhdG9yOjpFeHByZXNzaW9uVHlwZSBCM0lSR2VuZXJhdG9yOjphZGRDb25z
dGFudChUeXBlIHR5cGUsIHVpbnQ2NF90IHZhbAogewogICAgIHN3aXRjaCAodHlwZSkgewogICAg
IGNhc2UgV2FzbTo6STMyOgotICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxDb25zdDMyVmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIHN0YXRpY19jYXN0PGludDMyX3Q+KHZh
bHVlKSk7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJW
YWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgc3RhdGljX2Nhc3Q8aW50MzJfdD4odmFsdWUpKTsKICAg
ICBjYXNlIFdhc206Okk2NDoKLSAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8Q29uc3Q2NFZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCB2YWx1ZSk7CisgICAgICAgIHJldHVy
biBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4obV9wcm9jLCBvcmlnaW4o
KSwgdmFsdWUpOwogICAgIGNhc2UgV2FzbTo6RjMyOgotICAgICAgICByZXR1cm4gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxDb25zdEZsb2F0VmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIGJpdHdp
c2VfY2FzdDxmbG9hdD4oc3RhdGljX2Nhc3Q8aW50MzJfdD4odmFsdWUpKSk7CisgICAgICAgIHJl
dHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0RmxvYXRWYWx1ZT4obV9wcm9jLCBv
cmlnaW4oKSwgYml0d2lzZV9jYXN0PGZsb2F0PihzdGF0aWNfY2FzdDxpbnQzMl90Pih2YWx1ZSkp
KTsKICAgICBjYXNlIFdhc206OkY2NDoKLSAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8Q29uc3REb3VibGVWYWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwgYml0d2lzZV9jYXN0
PGRvdWJsZT4odmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8Q29uc3REb3VibGVWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgYml0d2lzZV9jYXN0PGRvdWJs
ZT4odmFsdWUpKTsKICAgICBjYXNlIFdhc206OlZvaWQ6CiAgICAgY2FzZSBXYXNtOjpGdW5jOgog
ICAgIGNhc2UgV2FzbTo6QW55ZnVuYzoKQEAgLTc1NCw3ICs3NDUsNyBAQCBCM0lSR2VuZXJhdG9y
OjpDb250cm9sRGF0YSBCM0lSR2VuZXJhdG9yOjphZGRMb29wKFR5cGUgc2lnbmF0dXJlKQogewog
ICAgIEJhc2ljQmxvY2sqIGJvZHkgPSBtX3Byb2MuYWRkQmxvY2soKTsKICAgICBCYXNpY0Jsb2Nr
KiBjb250aW51YXRpb24gPSBtX3Byb2MuYWRkQmxvY2soKTsKLSAgICBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgSnVtcCwgT3JpZ2luKCksIGJvZHkpOworICAg
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBvcmln
aW4oKSwgYm9keSk7CiAgICAgYm9keS0+YWRkUHJlZGVjZXNzb3IobV9jdXJyZW50QmxvY2spOwog
ICAgIG1fY3VycmVudEJsb2NrID0gYm9keTsKICAgICByZXR1cm4gQ29udHJvbERhdGEobV9wcm9j
LCBzaWduYXR1cmUsIEJsb2NrVHlwZTo6TG9vcCwgY29udGludWF0aW9uLCBib2R5KTsKQEAgLTc2
OCw3ICs3NTksNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZElmKEV4cHJlc3Npb25UeXBlIGNv
bmRpdGlvbiwgVHlwZSBzaWduYXR1cmUsIENvbnRyb2xUeXBlJgogICAgIEJhc2ljQmxvY2sqIG5v
dFRha2VuID0gbV9wcm9jLmFkZEJsb2NrKCk7CiAgICAgQmFzaWNCbG9jayogY29udGludWF0aW9u
ID0gbV9wcm9jLmFkZEJsb2NrKCk7CiAKLSAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZh
bHVlPihtX3Byb2MsIEIzOjpCcmFuY2gsIE9yaWdpbigpLCBjb25kaXRpb24pOworICAgIG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQjM6OkJyYW5jaCwgb3JpZ2luKCks
IGNvbmRpdGlvbik7CiAgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMoRnJlcXVlbnRl
ZEJsb2NrKHRha2VuKSwgRnJlcXVlbnRlZEJsb2NrKG5vdFRha2VuKSk7CiAgICAgdGFrZW4tPmFk
ZFByZWRlY2Vzc29yKG1fY3VycmVudEJsb2NrKTsKICAgICBub3RUYWtlbi0+YWRkUHJlZGVjZXNz
b3IobV9jdXJyZW50QmxvY2spOwpAQCAtNzgxLDcgKzc3Miw3IEBAIGF1dG8gQjNJUkdlbmVyYXRv
cjo6YWRkSWYoRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBUeXBlIHNpZ25hdHVyZSwgQ29udHJv
bFR5cGUmCiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZEVsc2UoQ29udHJvbERhdGEmIGRhdGEsIGNv
bnN0IEV4cHJlc3Npb25MaXN0JiBjdXJyZW50U3RhY2spIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAg
ICB1bmlmeVZhbHVlc1dpdGhCbG9jayhjdXJyZW50U3RhY2ssIGRhdGEucmVzdWx0KTsKLSAgICBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgSnVtcCwgT3JpZ2lu
KCksIGRhdGEuY29udGludWF0aW9uKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3Q29u
dHJvbFZhbHVlKG1fcHJvYywgSnVtcCwgb3JpZ2luKCksIGRhdGEuY29udGludWF0aW9uKTsKICAg
ICByZXR1cm4gYWRkRWxzZVRvVW5yZWFjaGFibGUoZGF0YSk7CiB9CiAKQEAgLTc5Nyw5ICs3ODgs
OSBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZFJldHVybihjb25zdCBDb250cm9sRGF0YSYsIGNv
bnN0IEV4cHJlc3Npb25MaXN0JiByZXR1cm5WYQogewogICAgIEFTU0VSVChyZXR1cm5WYWx1ZXMu
c2l6ZSgpIDw9IDEpOwogICAgIGlmIChyZXR1cm5WYWx1ZXMuc2l6ZSgpKQotICAgICAgICBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgQjM6OlJldHVybiwgT3Jp
Z2luKCksIHJldHVyblZhbHVlc1swXSk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXdDb250cm9sVmFsdWUobV9wcm9jLCBCMzo6UmV0dXJuLCBvcmlnaW4oKSwgcmV0dXJuVmFsdWVz
WzBdKTsKICAgICBlbHNlCi0gICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXdDb250cm9s
VmFsdWUobV9wcm9jLCBCMzo6UmV0dXJuLCBPcmlnaW4oKSk7CisgICAgICAgIG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBCMzo6UmV0dXJuLCBvcmlnaW4oKSk7
CiAgICAgcmV0dXJuIHsgfTsKIH0KIApAQCAtODExLDEzICs4MDIsMTMgQEAgYXV0byBCM0lSR2Vu
ZXJhdG9yOjphZGRCcmFuY2goQ29udHJvbERhdGEmIGRhdGEsIEV4cHJlc3Npb25UeXBlIGNvbmRp
dGlvbiwgY29uc3QKICAgICBCYXNpY0Jsb2NrKiB0YXJnZXQgPSBkYXRhLnRhcmdldEJsb2NrRm9y
QnJhbmNoKCk7CiAgICAgaWYgKGNvbmRpdGlvbikgewogICAgICAgICBCYXNpY0Jsb2NrKiBjb250
aW51YXRpb24gPSBtX3Byb2MuYWRkQmxvY2soKTsKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCMzo6QnJhbmNoLCBPcmlnaW4oKSwgY29uZGl0aW9uKTsK
KyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCMzo6QnJh
bmNoLCBvcmlnaW4oKSwgY29uZGl0aW9uKTsKICAgICAgICAgbV9jdXJyZW50QmxvY2stPnNldFN1
Y2Nlc3NvcnMoRnJlcXVlbnRlZEJsb2NrKHRhcmdldCksIEZyZXF1ZW50ZWRCbG9jayhjb250aW51
YXRpb24pKTsKICAgICAgICAgdGFyZ2V0LT5hZGRQcmVkZWNlc3NvcihtX2N1cnJlbnRCbG9jayk7
CiAgICAgICAgIGNvbnRpbnVhdGlvbi0+YWRkUHJlZGVjZXNzb3IobV9jdXJyZW50QmxvY2spOwog
ICAgICAgICBtX2N1cnJlbnRCbG9jayA9IGNvbnRpbnVhdGlvbjsKICAgICB9IGVsc2UgewotICAg
ICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgSnVtcCwg
T3JpZ2luKCksIEZyZXF1ZW50ZWRCbG9jayh0YXJnZXQpKTsKKyAgICAgICAgbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEp1bXAsIG9yaWdpbigpLCBGcmVxdWVu
dGVkQmxvY2sodGFyZ2V0KSk7CiAgICAgICAgIHRhcmdldC0+YWRkUHJlZGVjZXNzb3IobV9jdXJy
ZW50QmxvY2spOwogICAgIH0KIApAQCAtODMwLDcgKzgyMSw3IEBAIGF1dG8gQjNJUkdlbmVyYXRv
cjo6YWRkU3dpdGNoKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgVmVjdG9yPENvbnRy
b2xEYXRhCiAgICAgICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGV4cHJlc3Npb25TdGFjaywgdGFy
Z2V0c1tpXS0+cmVzdWx0KTsKICAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhleHByZXNzaW9uU3Rh
Y2ssIGRlZmF1bHRUYXJnZXQucmVzdWx0KTsKIAotICAgIFN3aXRjaFZhbHVlKiBzd2l0Y2hWYWx1
ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8U3dpdGNoVmFsdWU+KG1fcHJvYywgT3JpZ2lu
KCksIGNvbmRpdGlvbik7CisgICAgU3dpdGNoVmFsdWUqIHN3aXRjaFZhbHVlID0gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxTd2l0Y2hWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgY29uZGl0aW9u
KTsKICAgICBzd2l0Y2hWYWx1ZS0+c2V0RmFsbFRocm91Z2goRnJlcXVlbnRlZEJsb2NrKGRlZmF1
bHRUYXJnZXQudGFyZ2V0QmxvY2tGb3JCcmFuY2goKSkpOwogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgdGFyZ2V0cy5zaXplKCk7ICsraSkKICAgICAgICAgc3dpdGNoVmFsdWUtPmFwcGVuZENh
c2UoU3dpdGNoQ2FzZShpLCBGcmVxdWVudGVkQmxvY2sodGFyZ2V0c1tpXS0+dGFyZ2V0QmxvY2tG
b3JCcmFuY2goKSkpKTsKQEAgLTg0Myw3ICs4MzQsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmVu
ZEJsb2NrKENvbnRyb2xFbnRyeSYgZW50cnksIEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3Rh
YwogICAgIENvbnRyb2xEYXRhJiBkYXRhID0gZW50cnkuY29udHJvbERhdGE7CiAKICAgICB1bmlm
eVZhbHVlc1dpdGhCbG9jayhleHByZXNzaW9uU3RhY2ssIGRhdGEucmVzdWx0KTsKLSAgICBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgSnVtcCwgT3JpZ2luKCks
IGRhdGEuY29udGludWF0aW9uKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3Q29udHJv
bFZhbHVlKG1fcHJvYywgSnVtcCwgb3JpZ2luKCksIGRhdGEuY29udGludWF0aW9uKTsKICAgICBk
YXRhLmNvbnRpbnVhdGlvbi0+YWRkUHJlZGVjZXNzb3IobV9jdXJyZW50QmxvY2spOwogCiAgICAg
cmV0dXJuIGFkZEVuZFRvVW5yZWFjaGFibGUoZW50cnkpOwpAQCAtODU2LDEyICs4NDcsMTIgQEAg
YXV0byBCM0lSR2VuZXJhdG9yOjphZGRFbmRUb1VucmVhY2hhYmxlKENvbnRyb2xFbnRyeSYgZW50
cnkpIC0+IFBhcnRpYWxSZXN1bHQKICAgICBtX2N1cnJlbnRCbG9jayA9IGRhdGEuY29udGludWF0
aW9uOwogCiAgICAgaWYgKGRhdGEudHlwZSgpID09IEJsb2NrVHlwZTo6SWYpIHsKLSAgICAgICAg
ZGF0YS5zcGVjaWFsLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBPcmlnaW4o
KSwgbV9jdXJyZW50QmxvY2spOworICAgICAgICBkYXRhLnNwZWNpYWwtPmFwcGVuZE5ld0NvbnRy
b2xWYWx1ZShtX3Byb2MsIEp1bXAsIG9yaWdpbigpLCBtX2N1cnJlbnRCbG9jayk7CiAgICAgICAg
IG1fY3VycmVudEJsb2NrLT5hZGRQcmVkZWNlc3NvcihkYXRhLnNwZWNpYWwpOwogICAgIH0KIAog
ICAgIGZvciAoVmFyaWFibGUqIHJlc3VsdCA6IGRhdGEucmVzdWx0KQotICAgICAgICBlbnRyeS5l
bmNsb3NlZEV4cHJlc3Npb25TdGFjay5hcHBlbmQobV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxW
YXJpYWJsZVZhbHVlPihtX3Byb2MsIEIzOjpHZXQsIE9yaWdpbigpLCByZXN1bHQpKTsKKyAgICAg
ICAgZW50cnkuZW5jbG9zZWRFeHByZXNzaW9uU3RhY2suYXBwZW5kKG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8VmFyaWFibGVWYWx1ZT4obV9wcm9jLCBCMzo6R2V0LCBvcmlnaW4oKSwgcmVzdWx0
KSk7CiAKICAgICAvLyBUb3BMZXZlbCBkb2VzIG5vdCBoYXZlIGFueSBjb2RlIGFmdGVyIHRoaXMg
c28gd2UgbmVlZCB0byBtYWtlIHN1cmUgd2UgZW1pdCBhIHJldHVybiBoZXJlLgogICAgIGlmIChk
YXRhLnR5cGUoKSA9PSBCbG9ja1R5cGU6OlRvcExldmVsKQpAQCAtODc5LDE2ICs4NzAsMTYgQEAg
YXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0
IFNpZ25hdHVyZSogc2lnbmF0dXJlLAogCiAgICAgaWYgKG1faW5mby5pc0ltcG9ydGVkRnVuY3Rp
b25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXgpKSB7CiAgICAgICAgIC8vIEZJ
WE1FIGltcG9ydHMgY2FuIGJlIGxpbmtlZCBoZXJlLCBpbnN0ZWFkIG9mIGdlbmVyYXRpbmcgYSBw
YXRjaHBvaW50LCBiZWNhdXNlIGFsbCBpbXBvcnQgc3R1YnMgYXJlIGdlbmVyYXRlZCBiZWZvcmUg
QjMgY29tcGlsYXRpb24gc3RhcnRzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTY2NDYyCi0gICAgICAgIFZhbHVlKiBmdW5jdGlvbkltcG9ydCA9IG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwg
T3JpZ2luKCksIG1faW5zdGFuY2VWYWx1ZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRP
ZkltcG9ydEZ1bmN0aW9uKGZ1bmN0aW9uSW5kZXgpKTsKLSAgICAgICAgVmFsdWUqIGpzVHlwZU9m
SW1wb3J0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBM
b2FkOFosIE9yaWdpbigpLCBmdW5jdGlvbkltcG9ydCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZz
ZXQoKSk7Ci0gICAgICAgIFZhbHVlKiBpc1dhc21DYWxsID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgT3JpZ2luKCksIGpzVHlwZU9mSW1wb3J0LCBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwgV2Vi
QXNzZW1ibHlGdW5jdGlvblR5cGUpKTsKKyAgICAgICAgVmFsdWUqIGZ1bmN0aW9uSW1wb3J0ID0g
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2lu
dGVyVHlwZSgpLCBvcmlnaW4oKSwgbV9pbnN0YW5jZVZhbHVlLCBKU1dlYkFzc2VtYmx5SW5zdGFu
Y2U6Om9mZnNldE9mSW1wb3J0RnVuY3Rpb24oZnVuY3Rpb25JbmRleCkpOworICAgICAgICBWYWx1
ZSoganNUeXBlT2ZJbXBvcnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVl
PihtX3Byb2MsIExvYWQ4Wiwgb3JpZ2luKCksIGZ1bmN0aW9uSW1wb3J0LCBKU0NlbGw6OnR5cGVJ
bmZvVHlwZU9mZnNldCgpKTsKKyAgICAgICAgVmFsdWUqIGlzV2FzbUNhbGwgPSBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwganNUeXBlT2ZJ
bXBvcnQsIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9y
aWdpbigpLCBXZWJBc3NlbWJseUZ1bmN0aW9uVHlwZSkpOwogCiAgICAgICAgIEJhc2ljQmxvY2sq
IGlzV2FzbUJsb2NrID0gbV9wcm9jLmFkZEJsb2NrKCk7CiAgICAgICAgIEJhc2ljQmxvY2sqIGlz
SlNCbG9jayA9IG1fcHJvYy5hZGRCbG9jaygpOwogICAgICAgICBCYXNpY0Jsb2NrKiBjb250aW51
YXRpb24gPSBtX3Byb2MuYWRkQmxvY2soKTsKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEIzOjpCcmFuY2gsIE9yaWdpbigpLCBpc1dhc21DYWxs
LCBGcmVxdWVudGVkQmxvY2soaXNXYXNtQmxvY2spLCBGcmVxdWVudGVkQmxvY2soaXNKU0Jsb2Nr
KSk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9j
LCBCMzo6QnJhbmNoLCBvcmlnaW4oKSwgaXNXYXNtQ2FsbCwgRnJlcXVlbnRlZEJsb2NrKGlzV2Fz
bUJsb2NrKSwgRnJlcXVlbnRlZEJsb2NrKGlzSlNCbG9jaykpOwogCi0gICAgICAgIFZhbHVlKiB3
YXNtQ2FsbFJlc3VsdCA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLnNldHVwQ2FsbChtX3Byb2Ms
IGlzV2FzbUJsb2NrLCBPcmlnaW4oKSwgYXJncywgdG9CM1R5cGUocmV0dXJuVHlwZSksCisgICAg
ICAgIFZhbHVlKiB3YXNtQ2FsbFJlc3VsdCA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLnNldHVw
Q2FsbChtX3Byb2MsIGlzV2FzbUJsb2NrLCBvcmlnaW4oKSwgYXJncywgdG9CM1R5cGUocmV0dXJu
VHlwZSksCiAgICAgICAgICAgICBbJl0gKFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCkgewog
ICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1ZTsK
ICAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLnJlYWRzUGlubmVkID0gdHJ1ZTsK
QEAgLTkwMCwxMCArODkxLDEwIEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJf
dCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSwKICAgICAgICAgICAg
ICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9KTsKLSAgICAg
ICAgVXBzaWxvblZhbHVlKiB3YXNtQ2FsbFJlc3VsdFVwc2lsb24gPSByZXR1cm5UeXBlID09IFZv
aWQgPyBudWxscHRyIDogaXNXYXNtQmxvY2stPmFwcGVuZE5ldzxVcHNpbG9uVmFsdWU+KG1fcHJv
YywgT3JpZ2luKCksIHdhc21DYWxsUmVzdWx0KTsKLSAgICAgICAgaXNXYXNtQmxvY2stPmFwcGVu
ZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEp1bXAsIE9yaWdpbigpLCBjb250aW51YXRpb24pOwor
ICAgICAgICBVcHNpbG9uVmFsdWUqIHdhc21DYWxsUmVzdWx0VXBzaWxvbiA9IHJldHVyblR5cGUg
PT0gVm9pZCA/IG51bGxwdHIgOiBpc1dhc21CbG9jay0+YXBwZW5kTmV3PFVwc2lsb25WYWx1ZT4o
bV9wcm9jLCBvcmlnaW4oKSwgd2FzbUNhbGxSZXN1bHQpOworICAgICAgICBpc1dhc21CbG9jay0+
YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgSnVtcCwgb3JpZ2luKCksIGNvbnRpbnVhdGlv
bik7CiAKLSAgICAgICAgVmFsdWUqIGpzQ2FsbFJlc3VsdCA9IHdhc21DYWxsaW5nQ29udmVudGlv
bigpLnNldHVwQ2FsbChtX3Byb2MsIGlzSlNCbG9jaywgT3JpZ2luKCksIGFyZ3MsIHRvQjNUeXBl
KHJldHVyblR5cGUpLAorICAgICAgICBWYWx1ZSoganNDYWxsUmVzdWx0ID0gd2FzbUNhbGxpbmdD
b252ZW50aW9uKCkuc2V0dXBDYWxsKG1fcHJvYywgaXNKU0Jsb2NrLCBvcmlnaW4oKSwgYXJncywg
dG9CM1R5cGUocmV0dXJuVHlwZSksCiAgICAgICAgICAgICBbJl0gKFBhdGNocG9pbnRWYWx1ZSog
cGF0Y2hwb2ludCkgewogICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMud3JpdGVz
UGlubmVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLnJlYWRz
UGlubmVkID0gdHJ1ZTsKQEAgLTkxNSwyMyArOTA2LDIzIEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6
YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVy
ZSwKICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAg
ICAgICB9KTsKLSAgICAgICAgVXBzaWxvblZhbHVlKiBqc0NhbGxSZXN1bHRVcHNpbG9uID0gcmV0
dXJuVHlwZSA9PSBWb2lkID8gbnVsbHB0ciA6IGlzSlNCbG9jay0+YXBwZW5kTmV3PFVwc2lsb25W
YWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwganNDYWxsUmVzdWx0KTsKLSAgICAgICAgaXNKU0Jsb2Nr
LT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBPcmlnaW4oKSwgY29udGludWF0
aW9uKTsKKyAgICAgICAgVXBzaWxvblZhbHVlKiBqc0NhbGxSZXN1bHRVcHNpbG9uID0gcmV0dXJu
VHlwZSA9PSBWb2lkID8gbnVsbHB0ciA6IGlzSlNCbG9jay0+YXBwZW5kTmV3PFVwc2lsb25WYWx1
ZT4obV9wcm9jLCBvcmlnaW4oKSwganNDYWxsUmVzdWx0KTsKKyAgICAgICAgaXNKU0Jsb2NrLT5h
cHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBvcmlnaW4oKSwgY29udGludWF0aW9u
KTsKIAogICAgICAgICBtX2N1cnJlbnRCbG9jayA9IGNvbnRpbnVhdGlvbjsKIAogICAgICAgICBp
ZiAocmV0dXJuVHlwZSA9PSBWb2lkKQogICAgICAgICAgICAgcmVzdWx0ID0gbnVsbHB0cjsKICAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBjb250aW51YXRpb24tPmFwcGVuZE5l
dzxWYWx1ZT4obV9wcm9jLCBQaGksIHRvQjNUeXBlKHJldHVyblR5cGUpLCBPcmlnaW4oKSk7Cisg
ICAgICAgICAgICByZXN1bHQgPSBjb250aW51YXRpb24tPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9j
LCBQaGksIHRvQjNUeXBlKHJldHVyblR5cGUpLCBvcmlnaW4oKSk7CiAgICAgICAgICAgICB3YXNt
Q2FsbFJlc3VsdFVwc2lsb24tPnNldFBoaShyZXN1bHQpOwogICAgICAgICAgICAganNDYWxsUmVz
dWx0VXBzaWxvbi0+c2V0UGhpKHJlc3VsdCk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBUaGUg
Y2FsbCBjb3VsZCBoYXZlIGJlZW4gdG8gYW5vdGhlciBXZWJBc3NlbWJseSBpbnN0YW5jZSwgYW5k
IC8gb3IgY291bGQgaGF2ZSBtb2RpZmllZCBvdXIgTWVtb3J5LgotICAgICAgICByZXN0b3JlV2Vi
QXNzZW1ibHlHbG9iYWxTdGF0ZShtX2luZm8ubWVtb3J5LCBtX2luc3RhbmNlVmFsdWUsIG1fcHJv
YywgY29udGludWF0aW9uKTsKKyAgICAgICAgcmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUo
bV9pbmZvLm1lbW9yeSwgbV9pbnN0YW5jZVZhbHVlLCBtX3Byb2MsIGNvbnRpbnVhdGlvbiwgb3Jp
Z2luKCkpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHJlc3VsdCA9IHdhc21DYWxsaW5nQ29udmVu
dGlvbigpLnNldHVwQ2FsbChtX3Byb2MsIG1fY3VycmVudEJsb2NrLCBPcmlnaW4oKSwgYXJncywg
dG9CM1R5cGUocmV0dXJuVHlwZSksCisgICAgICAgIHJlc3VsdCA9IHdhc21DYWxsaW5nQ29udmVu
dGlvbigpLnNldHVwQ2FsbChtX3Byb2MsIG1fY3VycmVudEJsb2NrLCBvcmlnaW4oKSwgYXJncywg
dG9CM1R5cGUocmV0dXJuVHlwZSksCiAgICAgICAgICAgICBbJl0gKFBhdGNocG9pbnRWYWx1ZSog
cGF0Y2hwb2ludCkgewogICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMud3JpdGVz
UGlubmVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLnJlYWRz
UGlubmVkID0gdHJ1ZTsKQEAgLTk1NywxOCArOTQ4LDE4IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6
YWRkQ2FsbEluZGlyZWN0KGNvbnN0IFNpZ25hdHVyZSogc2lnbmF0dXJlLCBTaWduYXR1cmVJbmRl
eCBzCiAgICAgRXhwcmVzc2lvblR5cGUgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlcjsKICAgICBFeHBy
ZXNzaW9uVHlwZSBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyU2l6ZTsKICAgICB7Ci0gICAgICAgIEV4
cHJlc3Npb25UeXBlIHRhYmxlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1
ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBPcmlnaW4oKSwKKyAgICAgICAgRXhwcmVz
c2lvblR5cGUgdGFibGUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPiht
X3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLAogICAgICAgICAgICAgbV9pbnN0
YW5jZVZhbHVlLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mVGFibGUoKSk7Ci0gICAg
ICAgIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXIgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1l
bW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIE9yaWdpbigpLAorICAgICAg
ICBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1v
cnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwKICAgICAgICAg
ICAgIHRhYmxlLCBKU1dlYkFzc2VtYmx5VGFibGU6Om9mZnNldE9mRnVuY3Rpb25zKCkpOwotICAg
ICAgICBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyU2l6ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgSW50MzIsIE9yaWdpbigpLAorICAgICAgICBj
YWxsYWJsZUZ1bmN0aW9uQnVmZmVyU2l6ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVt
b3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgSW50MzIsIG9yaWdpbigpLAogICAgICAgICAgICAgdGFi
bGUsIEpTV2ViQXNzZW1ibHlUYWJsZTo6b2Zmc2V0T2ZTaXplKCkpOwogICAgIH0KIAogICAgIC8v
IENoZWNrIHRoZSBpbmRleCB3ZSBhcmUgbG9va2luZyBmb3IgaXMgdmFsaWQuCiAgICAgewotICAg
ICAgICBDaGVja1ZhbHVlKiBjaGVjayA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tW
YWx1ZT4obV9wcm9jLCBDaGVjaywgT3JpZ2luKCksCi0gICAgICAgICAgICBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEFib3ZlRXF1YWwsIE9yaWdpbigpLCBjYWxsZWVJ
bmRleCwgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlclNpemUpKTsKKyAgICAgICAgQ2hlY2tWYWx1ZSog
Y2hlY2sgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hl
Y2ssIG9yaWdpbigpLAorICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1
ZT4obV9wcm9jLCBBYm92ZUVxdWFsLCBvcmlnaW4oKSwgY2FsbGVlSW5kZXgsIGNhbGxhYmxlRnVu
Y3Rpb25CdWZmZXJTaXplKSk7CiAKICAgICAgICAgY2hlY2stPnNldEdlbmVyYXRvcihbPV0gKEND
YWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgewog
ICAgICAgICAgICAgdGhpcy0+ZW1pdEV4Y2VwdGlvbkNoZWNrKGppdCwgRXhjZXB0aW9uVHlwZTo6
T3V0T2ZCb3VuZHNDYWxsSW5kaXJlY3QpOwpAQCAtOTc2LDE5ICs5NjcsMTkgQEAgYXV0byBCM0lS
R2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QoY29uc3QgU2lnbmF0dXJlKiBzaWduYXR1cmUsIFNp
Z25hdHVyZUluZGV4IHMKICAgICB9CiAKICAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQgaW4gdGhl
IHRhYmxlIGluZGV4IHNwYWNlIHdlIGFyZSBsb29raW5nIGZvci4KLSAgICBFeHByZXNzaW9uVHlw
ZSBvZmZzZXQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIE11bCwg
T3JpZ2luKCksCi0gICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJv
YywgWkV4dDMyLCBPcmlnaW4oKSwgY2FsbGVlSW5kZXgpLAotICAgICAgICBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kSW50Q29uc3RhbnQobV9wcm9jLCBPcmlnaW4oKSwgcG9pbnRlclR5cGUoKSwgc2l6
ZW9mKENhbGxhYmxlRnVuY3Rpb24pKSk7Ci0gICAgRXhwcmVzc2lvblR5cGUgY2FsbGFibGVGdW5j
dGlvbiA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQWRkLCBPcmln
aW4oKSwgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlciwgb2Zmc2V0KTsKKyAgICBFeHByZXNzaW9uVHlw
ZSBvZmZzZXQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIE11bCwg
b3JpZ2luKCksCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJv
YywgWkV4dDMyLCBvcmlnaW4oKSwgY2FsbGVlSW5kZXgpLAorICAgICAgICBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kSW50Q29uc3RhbnQobV9wcm9jLCBvcmlnaW4oKSwgcG9pbnRlclR5cGUoKSwgc2l6
ZW9mKENhbGxhYmxlRnVuY3Rpb24pKSk7CisgICAgRXhwcmVzc2lvblR5cGUgY2FsbGFibGVGdW5j
dGlvbiA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQWRkLCBvcmln
aW4oKSwgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlciwgb2Zmc2V0KTsKIAogICAgIC8vIENoZWNrIHRo
YXQgdGhlIENhbGxhYmxlRnVuY3Rpb24gaXMgaW5pdGlhbGl6ZWQuIFdlIHRyYXAgaWYgaXQgaXNu
J3QuIEFuICJpbnZhbGlkIiBTaWduYXR1cmVJbmRleCBpbmRpY2F0ZXMgaXQncyBub3QgaW5pdGlh
bGl6ZWQuCiAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoQ2FsbGFibGVGdW5jdGlvbjo6c2lnbmF0
dXJlSW5kZXgpID09IHNpemVvZih1aW50MzJfdCksICJMb2FkIGNvZGVnZW4gYXNzdW1lcyBpMzIi
KTsKLSAgICBFeHByZXNzaW9uVHlwZSBjYWxsZWVTaWduYXR1cmVJbmRleCA9IG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgSW50MzIsIE9yaWdpbigp
LCBjYWxsYWJsZUZ1bmN0aW9uLCBPQkpFQ1RfT0ZGU0VUT0YoQ2FsbGFibGVGdW5jdGlvbiwgc2ln
bmF0dXJlSW5kZXgpKTsKKyAgICBFeHByZXNzaW9uVHlwZSBjYWxsZWVTaWduYXR1cmVJbmRleCA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgSW50
MzIsIG9yaWdpbigpLCBjYWxsYWJsZUZ1bmN0aW9uLCBPQkpFQ1RfT0ZGU0VUT0YoQ2FsbGFibGVG
dW5jdGlvbiwgc2lnbmF0dXJlSW5kZXgpKTsKICAgICB7Ci0gICAgICAgIENoZWNrVmFsdWUqIGNo
ZWNrID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNr
LCBPcmlnaW4oKSwKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+
KG1fcHJvYywgRXF1YWwsIE9yaWdpbigpLAorICAgICAgICBDaGVja1ZhbHVlKiBjaGVjayA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgb3JpZ2lu
KCksCisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2Ms
IEVxdWFsLCBvcmlnaW4oKSwKICAgICAgICAgICAgICAgICBjYWxsZWVTaWduYXR1cmVJbmRleCwK
LSAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4o
bV9wcm9jLCBPcmlnaW4oKSwgU2lnbmF0dXJlOjppbnZhbGlkSW5kZXgpKSk7CisgICAgICAgICAg
ICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywgb3Jp
Z2luKCksIFNpZ25hdHVyZTo6aW52YWxpZEluZGV4KSkpOwogCiAgICAgICAgIGNoZWNrLT5zZXRH
ZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJh
dGlvblBhcmFtcyYpIHsKICAgICAgICAgICAgIHRoaXMtPmVtaXRFeGNlcHRpb25DaGVjayhqaXQs
IEV4Y2VwdGlvblR5cGU6Ok51bGxUYWJsZUVudHJ5KTsKQEAgLTk5NywxOSArOTg4LDE5IEBAIGF1
dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KGNvbnN0IFNpZ25hdHVyZSogc2lnbmF0
dXJlLCBTaWduYXR1cmVJbmRleCBzCiAKICAgICAvLyBDaGVjayB0aGUgc2lnbmF0dXJlIG1hdGNo
ZXMgdGhlIHZhbHVlIHdlIGV4cGVjdC4KICAgICB7Ci0gICAgICAgIEV4cHJlc3Npb25UeXBlIGV4
cGVjdGVkU2lnbmF0dXJlSW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJW
YWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwgc2lnbmF0dXJlSW5kZXgpOwotICAgICAgICBDaGVja1Zh
bHVlKiBjaGVjayA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9j
LCBDaGVjaywgT3JpZ2luKCksCi0gICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PFZhbHVlPihtX3Byb2MsIE5vdEVxdWFsLCBPcmlnaW4oKSwgY2FsbGVlU2lnbmF0dXJlSW5kZXgs
IGV4cGVjdGVkU2lnbmF0dXJlSW5kZXgpKTsKKyAgICAgICAgRXhwcmVzc2lvblR5cGUgZXhwZWN0
ZWRTaWduYXR1cmVJbmRleCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVl
PihtX3Byb2MsIG9yaWdpbigpLCBzaWduYXR1cmVJbmRleCk7CisgICAgICAgIENoZWNrVmFsdWUq
IGNoZWNrID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENo
ZWNrLCBvcmlnaW4oKSwKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFs
dWU+KG1fcHJvYywgTm90RXF1YWwsIG9yaWdpbigpLCBjYWxsZWVTaWduYXR1cmVJbmRleCwgZXhw
ZWN0ZWRTaWduYXR1cmVJbmRleCkpOwogCiAgICAgICAgIGNoZWNrLT5zZXRHZW5lcmF0b3IoWz1d
IChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYp
IHsKICAgICAgICAgICAgIHRoaXMtPmVtaXRFeGNlcHRpb25DaGVjayhqaXQsIEV4Y2VwdGlvblR5
cGU6OkJhZFNpZ25hdHVyZSk7CiAgICAgICAgIH0pOwogICAgIH0KIAotICAgIEV4cHJlc3Npb25U
eXBlIGNhbGxlZUNvZGUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPiht
X3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIE9yaWdpbigpLCBjYWxsYWJsZUZ1bmN0aW9uLCBP
QkpFQ1RfT0ZGU0VUT0YoQ2FsbGFibGVGdW5jdGlvbiwgY29kZSkpOworICAgIEV4cHJlc3Npb25U
eXBlIGNhbGxlZUNvZGUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPiht
X3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBjYWxsYWJsZUZ1bmN0aW9uLCBP
QkpFQ1RfT0ZGU0VUT0YoQ2FsbGFibGVGdW5jdGlvbiwgY29kZSkpOwogCiAgICAgVHlwZSByZXR1
cm5UeXBlID0gc2lnbmF0dXJlLT5yZXR1cm5UeXBlKCk7Ci0gICAgcmVzdWx0ID0gd2FzbUNhbGxp
bmdDb252ZW50aW9uKCkuc2V0dXBDYWxsKG1fcHJvYywgbV9jdXJyZW50QmxvY2ssIE9yaWdpbigp
LCBhcmdzLCB0b0IzVHlwZShyZXR1cm5UeXBlKSwKKyAgICByZXN1bHQgPSB3YXNtQ2FsbGluZ0Nv
bnZlbnRpb24oKS5zZXR1cENhbGwobV9wcm9jLCBtX2N1cnJlbnRCbG9jaywgb3JpZ2luKCksIGFy
Z3MsIHRvQjNUeXBlKHJldHVyblR5cGUpLAogICAgICAgICBbJl0gKFBhdGNocG9pbnRWYWx1ZSog
cGF0Y2hwb2ludCkgewogICAgICAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy53cml0ZXNQaW5u
ZWQgPSB0cnVlOwogICAgICAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy5yZWFkc1Bpbm5lZCA9
IHRydWU7CkBAIC0xMDIzLDE0ICsxMDE0LDE0IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2Fs
bEluZGlyZWN0KGNvbnN0IFNpZ25hdHVyZSogc2lnbmF0dXJlLCBTaWduYXR1cmVJbmRleCBzCiAg
ICAgICAgIH0pOwogCiAgICAgLy8gVGhlIGNhbGwgY291bGQgaGF2ZSBiZWVuIHRvIGFub3RoZXIg
V2ViQXNzZW1ibHkgaW5zdGFuY2UsIGFuZCAvIG9yIGNvdWxkIGhhdmUgbW9kaWZpZWQgb3VyIE1l
bW9yeS4KLSAgICByZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZShtX2luZm8ubWVtb3J5LCBt
X2luc3RhbmNlVmFsdWUsIG1fcHJvYywgbV9jdXJyZW50QmxvY2spOworICAgIHJlc3RvcmVXZWJB
c3NlbWJseUdsb2JhbFN0YXRlKG1faW5mby5tZW1vcnksIG1faW5zdGFuY2VWYWx1ZSwgbV9wcm9j
LCBtX2N1cnJlbnRCbG9jaywgb3JpZ2luKCkpOwogCiAgICAgcmV0dXJuIHsgfTsKIH0KIAogdm9p
ZCBCM0lSR2VuZXJhdG9yOjp1bmlmeShWYXJpYWJsZSogdmFyaWFibGUsIEV4cHJlc3Npb25UeXBl
IHNvdXJjZSkKIHsKLSAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+
KG1fcHJvYywgU2V0LCBPcmlnaW4oKSwgdmFyaWFibGUsIHNvdXJjZSk7CisgICAgbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihtX3Byb2MsIFNldCwgb3JpZ2luKCksIHZh
cmlhYmxlLCBzb3VyY2UpOwogfQogCiB2b2lkIEIzSVJHZW5lcmF0b3I6OnVuaWZ5VmFsdWVzV2l0
aEJsb2NrKGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXN1bHRTdGFjaywgUmVzdWx0TGlzdCYgcmVz
dWx0KQpAQCAtMTIyOCw2ICsxMjE5LDE0IEBAIHN0YXRpYyB2b2lkIGNyZWF0ZUpTVG9XYXNtV3Jh
cHBlcihDb21waWxhdGlvbkNvbnRleHQmIGNvbXBpbGF0aW9uQ29udGV4dCwgV2FzbUluCiAgICAg
aml0LnJldCgpOwogfQogCithdXRvIEIzSVJHZW5lcmF0b3I6Om9yaWdpbigpIC0+IE9yaWdpbgor
eworICAgIGlmIChtX29yaWdpbnMuaXNFbXB0eSgpIHx8IG1fb3JpZ2lucy5sYXN0KCktPmxvY2F0
aW9uICE9IG1fcGFyc2VyLT5jdXJyZW50T3Bjb2RlU3RhcnRpbmdPZmZzZXQoKSkKKyAgICAgICAg
bV9vcmlnaW5zLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPE9wY29kZU9yaWdpbj4obV9wYXJzZXIt
PmN1cnJlbnRPcGNvZGUoKSwgbV9wYXJzZXItPmN1cnJlbnRPcGNvZGVTdGFydGluZ09mZnNldCgp
KSk7CisKKyAgICByZXR1cm4gT3JpZ2luKG1fb3JpZ2lucy5sYXN0KCkuZ2V0KCkpOworfQorCiBF
eHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8V2FzbUludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBh
cnNlQW5kQ29tcGlsZShWTSYgdm0sIENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGlsYXRpb25Db250
ZXh0LCBjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0LCBzaXplX3QgZnVuY3Rpb25MZW5ndGgs
IGNvbnN0IFNpZ25hdHVyZSogc2lnbmF0dXJlLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5m
bywgY29uc3QgVmVjdG9yPFNpZ25hdHVyZUluZGV4PiYgbW9kdWxlU2lnbmF0dXJlSW5kaWNlc1Rv
VW5pcXVlZFNpZ25hdHVyZUluZGljZXMsIHVuc2lnbmVkIG9wdExldmVsKQogewogICAgIGF1dG8g
cmVzdWx0ID0gc3RkOjptYWtlX3VuaXF1ZTxXYXNtSW50ZXJuYWxGdW5jdGlvbj4oKTsKQEAgLTEy
MzYsNiArMTIzNSwxMSBAQCBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8V2FzbUludGVybmFsRnVu
Y3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZShWTSYgdm0sCiAgICAgY29tcGlsYXRpb25D
b250ZXh0Lndhc21FbnRyeXBvaW50SklUID0gc3RkOjptYWtlX3VuaXF1ZTxDQ2FsbEhlbHBlcnM+
KCZ2bSk7CiAKICAgICBQcm9jZWR1cmUgcHJvY2VkdXJlOworICAgIHByb2NlZHVyZS5zZXRPcmln
aW5QcmludGVyKFtdIChQcmludFN0cmVhbSYgb3V0LCBPcmlnaW4gb3JpZ2luKSB7CisgICAgICAg
IGlmIChvcmlnaW4uZGF0YSgpKQorICAgICAgICAgICAgb3V0LnByaW50KCJXYXNtOiAiLCAqYml0
d2lzZV9jYXN0PE9wY29kZU9yaWdpbio+KG9yaWdpbi5kYXRhKCkpKTsKKyAgICB9KTsKKwogICAg
IEIzSVJHZW5lcmF0b3IgY29udGV4dCh2bSwgaW5mbywgcHJvY2VkdXJlLCByZXN1bHQuZ2V0KCks
IHVubGlua2VkV2FzbVRvV2FzbUNhbGxzKTsKICAgICBGdW5jdGlvblBhcnNlcjxCM0lSR2VuZXJh
dG9yPiBwYXJzZXIoJnZtLCBjb250ZXh0LCBmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwg
c2lnbmF0dXJlLCBpbmZvLCBtb2R1bGVTaWduYXR1cmVJbmRpY2VzVG9VbmlxdWVkU2lnbmF0dXJl
SW5kaWNlcyk7CiAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZXIucGFyc2UoKSk7
CkBAIC0xMjY3LDkgKzEyNzEsOSBAQCB2b2lkIEIzSVJHZW5lcmF0b3I6OmVtaXRDaGVja3NGb3JN
b2RPckRpdihCMzo6T3Bjb2RlIG9wZXJhdGlvbiwgRXhwcmVzc2lvblR5cGUgbAogICAgIGNvbnN0
IEIzOjpUeXBlIHR5cGUgPSBsZWZ0LT50eXBlKCk7CiAKICAgICB7Ci0gICAgICAgIENoZWNrVmFs
dWUqIGNoZWNrID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2Ms
IENoZWNrLCBPcmlnaW4oKSwKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
VmFsdWU+KG1fcHJvYywgRXF1YWwsIE9yaWdpbigpLCByaWdodCwKLSAgICAgICAgICAgICAgICBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kSW50Q29uc3RhbnQobV9wcm9jLCBPcmlnaW4oKSwgdHlwZSwg
MCkpKTsKKyAgICAgICAgQ2hlY2tWYWx1ZSogY2hlY2sgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIG9yaWdpbigpLAorICAgICAgICAgICAgbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2luKCksIHJp
Z2h0LAorICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmRJbnRDb25zdGFudCht
X3Byb2MsIG9yaWdpbigpLCB0eXBlLCAwKSkpOwogCiAgICAgICAgIGNoZWNrLT5zZXRHZW5lcmF0
b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBh
cmFtcyYpIHsKICAgICAgICAgICAgIHRoaXMtPmVtaXRFeGNlcHRpb25DaGVjayhqaXQsIEV4Y2Vw
dGlvblR5cGU6OkRpdmlzaW9uQnlaZXJvKTsKQEAgLTEyNzksMTIgKzEyODMsMTIgQEAgdm9pZCBC
M0lSR2VuZXJhdG9yOjplbWl0Q2hlY2tzRm9yTW9kT3JEaXYoQjM6Ok9wY29kZSBvcGVyYXRpb24s
IEV4cHJlc3Npb25UeXBlIGwKICAgICBpZiAob3BlcmF0aW9uID09IERpdikgewogICAgICAgICBp
bnQ2NF90IG1pbiA9IHR5cGUgPT0gSW50MzIgPyBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+
OjptaW4oKSA6IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1pbigpOwogCi0gICAgICAg
IENoZWNrVmFsdWUqIGNoZWNrID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVl
PihtX3Byb2MsIENoZWNrLCBPcmlnaW4oKSwKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQml0QW5kLCBPcmlnaW4oKSwKLSAgICAgICAgICAgICAg
ICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBPcmlnaW4o
KSwgbGVmdCwKLSAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZEludENv
bnN0YW50KG1fcHJvYywgT3JpZ2luKCksIHR5cGUsIG1pbikpLAotICAgICAgICAgICAgICAgIG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIE9yaWdpbigpLCBy
aWdodCwKLSAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZEludENvbnN0
YW50KG1fcHJvYywgT3JpZ2luKCksIHR5cGUsIC0xKSkpKTsKKyAgICAgICAgQ2hlY2tWYWx1ZSog
Y2hlY2sgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hl
Y2ssIG9yaWdpbigpLAorICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1
ZT4obV9wcm9jLCBCaXRBbmQsIG9yaWdpbigpLAorICAgICAgICAgICAgICAgIG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLCBsZWZ0LAorICAg
ICAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kSW50Q29uc3RhbnQobV9wcm9j
LCBvcmlnaW4oKSwgdHlwZSwgbWluKSksCisgICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2luKCksIHJpZ2h0LAorICAgICAg
ICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kSW50Q29uc3RhbnQobV9wcm9jLCBv
cmlnaW4oKSwgdHlwZSwgLTEpKSkpOwogCiAgICAgICAgIGNoZWNrLT5zZXRHZW5lcmF0b3IoWz1d
IChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYp
IHsKICAgICAgICAgICAgIHRoaXMtPmVtaXRFeGNlcHRpb25DaGVjayhqaXQsIEV4Y2VwdGlvblR5
cGU6OkludGVnZXJPdmVyZmxvdyk7CkBAIC0xMjk3LDcgKzEzMDEsNyBAQCBhdXRvIEIzSVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyRGl2Uz4oRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVz
c2lvblR5cGUgcgogewogICAgIGNvbnN0IEIzOjpPcGNvZGUgb3AgPSBEaXY7CiAgICAgZW1pdENo
ZWNrc0Zvck1vZE9yRGl2KG9wLCBsZWZ0LCByaWdodCk7Ci0gICAgcmVzdWx0ID0gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBvcCwgT3JpZ2luKCksIGxlZnQsIHJpZ2h0
KTsKKyAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2Ms
IG9wLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOwogICAgIHJldHVybiB7IH07CiB9CiAKQEAgLTEz
MDYsNyArMTMxMCw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJSZW1T
PihFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByCiB7CiAgICAgY29uc3QgQjM6
Ok9wY29kZSBvcCA9IE1vZDsKICAgICBlbWl0Q2hlY2tzRm9yTW9kT3JEaXYob3AsIGxlZnQsIHJp
Z2h0KTsKLSAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3By
b2MsIGNoaWxsKG9wKSwgT3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICByZXN1bHQgPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIGNoaWxsKG9wKSwgb3JpZ2luKCks
IGxlZnQsIHJpZ2h0KTsKICAgICByZXR1cm4geyB9OwogfQogCkBAIC0xMzE1LDcgKzEzMTksNyBA
QCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyRGl2VT4oRXhwcmVzc2lvblR5
cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcgogewogICAgIGNvbnN0IEIzOjpPcGNvZGUgb3AgPSBV
RGl2OwogICAgIGVtaXRDaGVja3NGb3JNb2RPckRpdihvcCwgbGVmdCwgcmlnaHQpOwotICAgIHJl
c3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgb3AsIE9yaWdp
bigpLCBsZWZ0LCByaWdodCk7CisgICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxWYWx1ZT4obV9wcm9jLCBvcCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKICAgICByZXR1cm4g
eyB9OwogfQogCkBAIC0xMzI0LDcgKzEzMjgsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STMyUmVtVT4oRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcgog
ewogICAgIGNvbnN0IEIzOjpPcGNvZGUgb3AgPSBVTW9kOwogICAgIGVtaXRDaGVja3NGb3JNb2RP
ckRpdihvcCwgbGVmdCwgcmlnaHQpOwotICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8VmFsdWU+KG1fcHJvYywgb3AsIE9yaWdpbigpLCBsZWZ0LCByaWdodCk7CisgICAgcmVz
dWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBvcCwgb3JpZ2lu
KCksIGxlZnQsIHJpZ2h0KTsKICAgICByZXR1cm4geyB9OwogfQogCkBAIC0xMzMzLDcgKzEzMzcs
NyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0RGl2Uz4oRXhwcmVzc2lv
blR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcgogewogICAgIGNvbnN0IEIzOjpPcGNvZGUgb3Ag
PSBEaXY7CiAgICAgZW1pdENoZWNrc0Zvck1vZE9yRGl2KG9wLCBsZWZ0LCByaWdodCk7Ci0gICAg
cmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBvcCwgT3Jp
Z2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFZhbHVlPihtX3Byb2MsIG9wLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOwogICAgIHJldHVy
biB7IH07CiB9CiAKQEAgLTEzNDIsNyArMTM0Niw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpJNjRSZW1TPihFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSBy
CiB7CiAgICAgY29uc3QgQjM6Ok9wY29kZSBvcCA9IE1vZDsKICAgICBlbWl0Q2hlY2tzRm9yTW9k
T3JEaXYob3AsIGxlZnQsIHJpZ2h0KTsKLSAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFZhbHVlPihtX3Byb2MsIGNoaWxsKG9wKSwgT3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsK
KyAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIGNo
aWxsKG9wKSwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKICAgICByZXR1cm4geyB9OwogfQogCkBA
IC0xMzUxLDcgKzEzNTUsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0
RGl2VT4oRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcgogewogICAgIGNvbnN0
IEIzOjpPcGNvZGUgb3AgPSBVRGl2OwogICAgIGVtaXRDaGVja3NGb3JNb2RPckRpdihvcCwgbGVm
dCwgcmlnaHQpOwotICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+
KG1fcHJvYywgb3AsIE9yaWdpbigpLCBsZWZ0LCByaWdodCk7CisgICAgcmVzdWx0ID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBvcCwgb3JpZ2luKCksIGxlZnQsIHJp
Z2h0KTsKICAgICByZXR1cm4geyB9OwogfQogCkBAIC0xMzYwLDE0ICsxMzY0LDE0IEBAIGF1dG8g
QjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRSZW1VPihFeHByZXNzaW9uVHlwZSBsZWZ0
LCBFeHByZXNzaW9uVHlwZSByCiB7CiAgICAgY29uc3QgQjM6Ok9wY29kZSBvcCA9IFVNb2Q7CiAg
ICAgZW1pdENoZWNrc0Zvck1vZE9yRGl2KG9wLCBsZWZ0LCByaWdodCk7Ci0gICAgcmVzdWx0ID0g
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBvcCwgT3JpZ2luKCksIGxl
ZnQsIHJpZ2h0KTsKKyAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVl
PihtX3Byb2MsIG9wLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOwogICAgIHJldHVybiB7IH07CiB9
CiAKIHRlbXBsYXRlPD4KIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJDdHo+
KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJl
c3VsdAogewotICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEludDMyLCBPcmlnaW4oKSk7Cisg
ICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgSW50MzIsIG9yaWdpbigpKTsKICAgICBwYXRjaHBv
aW50LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKICAgICBwYXRjaHBvaW50
LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5l
cmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgaml0LmNvdW50VHJhaWxpbmdaZXJvczMy
KHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKQEAgLTEzODAsNyArMTM4NCw3IEBA
IGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJDdHo+KEV4cHJlc3Npb25UeXBl
IGFyZywgRXhwcmVzc2lvblR5cGUmIHJlCiB0ZW1wbGF0ZTw+CiBhdXRvIEIzSVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6STY0Q3R6PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNo
cG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9j
LCBJbnQ2NCwgT3JpZ2luKCkpOworICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEludDY0LCBv
cmlnaW4oKSk7CiAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGFyZywgVmFsdWVSZXA6OlNvbWVSZWdp
c3Rlcik7CiAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBq
aXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgIGpp
dC5jb3VudFRyYWlsaW5nWmVyb3M2NChwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1swXS5ncHIoKSk7
CkBAIC0xMzk2LDggKzE0MDAsOCBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6
STMyUG9wY250PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJgogICAgIC8vIEZJ
WE1FOiBUaGlzIHNob3VsZCB1c2UgdGhlIHBvcGNudCBpbnN0cnVjdGlvbiBpZiBTU0U0IGlzIGF2
YWlsYWJsZSBidXQgd2UgZG9uJ3QgaGF2ZSBjb2RlIHRvIGRldGVjdCBTU0U0IHlldC4KICAgICAv
LyBzZWU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjUzNjMKICAg
ICB1aW50MzJfdCAoKnBvcGNvdW50KShpbnQzMl90KSA9IFtdIChpbnQzMl90IHZhbHVlKSAtPiB1
aW50MzJfdCB7IHJldHVybiBfX2J1aWx0aW5fcG9wY291bnQodmFsdWUpOyB9OwotICAgIFZhbHVl
KiBmdW5jQWRkcmVzcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4o
bV9wcm9jLCBPcmlnaW4oKSwgYml0d2lzZV9jYXN0PHZvaWQqPihwb3Bjb3VudCkpOwotICAgIHJl
c3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9jLCBJbnQz
MiwgT3JpZ2luKCksIEVmZmVjdHM6Om5vbmUoKSwgZnVuY0FkZHJlc3MsIGFyZyk7CisgICAgVmFs
dWUqIGZ1bmNBZGRyZXNzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVl
PihtX3Byb2MsIG9yaWdpbigpLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHBvcGNvdW50KSk7CisgICAg
cmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPihtX3Byb2MsIElu
dDMyLCBvcmlnaW4oKSwgRWZmZWN0czo6bm9uZSgpLCBmdW5jQWRkcmVzcywgYXJnKTsKICAgICBy
ZXR1cm4geyB9OwogfQogCkBAIC0xNDA3LDE1ICsxNDExLDE1IEBAIGF1dG8gQjNJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpJNjRQb3BjbnQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lv
blR5cGUmCiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSB0aGUgcG9wY250IGluc3RydWN0
aW9uIGlmIFNTRTQgaXMgYXZhaWxhYmxlIGJ1dCB3ZSBkb24ndCBoYXZlIGNvZGUgdG8gZGV0ZWN0
IFNTRTQgeWV0LgogICAgIC8vIHNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2NTM2MwogICAgIHVpbnQ2NF90ICgqcG9wY291bnQpKGludDY0X3QpID0gW10gKGlu
dDY0X3QgdmFsdWUpIC0+IHVpbnQ2NF90IHsgcmV0dXJuIF9fYnVpbHRpbl9wb3Bjb3VudGxsKHZh
bHVlKTsgfTsKLSAgICBWYWx1ZSogZnVuY0FkZHJlc3MgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PENvbnN0UHRyVmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIGJpdHdpc2VfY2FzdDx2b2lkKj4o
cG9wY291bnQpKTsKLSAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxs
VmFsdWU+KG1fcHJvYywgSW50NjQsIE9yaWdpbigpLCBFZmZlY3RzOjpub25lKCksIGZ1bmNBZGRy
ZXNzLCBhcmcpOworICAgIFZhbHVlKiBmdW5jQWRkcmVzcyA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8Q29uc3RQdHJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgYml0d2lzZV9jYXN0PHZvaWQq
Pihwb3Bjb3VudCkpOworICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0Nh
bGxWYWx1ZT4obV9wcm9jLCBJbnQ2NCwgb3JpZ2luKCksIEVmZmVjdHM6Om5vbmUoKSwgZnVuY0Fk
ZHJlc3MsIGFyZyk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAogdGVtcGxhdGU8PgogYXV0byBCM0lS
R2VuZXJhdG9yOjphZGRPcDxGNjRDb252ZXJ0VUk2ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgUGF0Y2hwb2ludFZh
bHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFs
dWU+KG1fcHJvYywgRG91YmxlLCBPcmlnaW4oKSk7CisgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRj
aHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJv
YywgRG91YmxlLCBvcmlnaW4oKSk7CiAgICAgaWYgKGlzWDg2KCkpCiAgICAgICAgIHBhdGNocG9p
bnQtPm51bUdQU2NyYXRjaFJlZ2lzdGVycyA9IDE7CiAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKENv
bnN0cmFpbmVkVmFsdWUoYXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKSk7CkBAIC0xNDM1LDcg
KzE0MzksNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPEY2NENvbnZlcnRVSTY0PihFeHBy
ZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZQogdGVtcGxhdGU8PgogYXV0byBCM0lS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkNvbnZlcnRVSTY0PihFeHByZXNzaW9uVHlwZSBh
cmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBQYXRj
aHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNo
cG9pbnRWYWx1ZT4obV9wcm9jLCBGbG9hdCwgT3JpZ2luKCkpOworICAgIFBhdGNocG9pbnRWYWx1
ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVl
PihtX3Byb2MsIEZsb2F0LCBvcmlnaW4oKSk7CiAgICAgaWYgKGlzWDg2KCkpCiAgICAgICAgIHBh
dGNocG9pbnQtPm51bUdQU2NyYXRjaFJlZ2lzdGVycyA9IDE7CiAgICAgcGF0Y2hwb2ludC0+YXBw
ZW5kKENvbnN0cmFpbmVkVmFsdWUoYXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKSk7CkBAIC0x
NDU1LDcgKzE0NTksNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyQ29u
dmVydFVJNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvbgogdGVtcGxhdGU8PgogYXV0
byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NE5lYXJlc3Q+KEV4cHJlc3Npb25UeXBl
IGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewotICAgIFBh
dGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0
Y2hwb2ludFZhbHVlPihtX3Byb2MsIERvdWJsZSwgT3JpZ2luKCkpOworICAgIFBhdGNocG9pbnRW
YWx1ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZh
bHVlPihtX3Byb2MsIERvdWJsZSwgb3JpZ2luKCkpOwogICAgIHBhdGNocG9pbnQtPmFwcGVuZChh
cmcsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOwogICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRv
cihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMm
IHBhcmFtcykgewogICAgICAgICBqaXQucm91bmRUb3dhcmROZWFyZXN0SW50RG91YmxlKHBhcmFt
c1sxXS5mcHIoKSwgcGFyYW1zWzBdLmZwcigpKTsKQEAgLTE0NjgsNyArMTQ3Miw3IEBAIGF1dG8g
QjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjROZWFyZXN0PihFeHByZXNzaW9uVHlwZSBh
cmcsIEV4cHJlc3Npb25UeXBlCiB0ZW1wbGF0ZTw+CiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6RjMyTmVhcmVzdD4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBv
aW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywg
RmxvYXQsIE9yaWdpbigpKTsKKyAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBGbG9hdCwgb3Jp
Z2luKCkpOwogICAgIHBhdGNocG9pbnQtPmFwcGVuZChhcmcsIFZhbHVlUmVwOjpTb21lUmVnaXN0
ZXIpOwogICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0
LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICBqaXQu
cm91bmRUb3dhcmROZWFyZXN0SW50RmxvYXQocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZnBy
KCkpOwpAQCAtMTQ4MSw3ICsxNDg1LDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6OkYzMk5lYXJlc3Q+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUKIHRlbXBs
YXRlPD4KIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRUcnVuYz4oRXhwcmVz
c2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7
Ci0gICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgRG91YmxlLCBPcmlnaW4oKSk7CisgICAgUGF0
Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRj
aHBvaW50VmFsdWU+KG1fcHJvYywgRG91YmxlLCBvcmlnaW4oKSk7CiAgICAgcGF0Y2hwb2ludC0+
YXBwZW5kKGFyZywgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CiAgICAgcGF0Y2hwb2ludC0+c2V0
R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlv
blBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgIGppdC5yb3VuZFRvd2FyZFplcm9Eb3VibGUocGFy
YW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZnByKCkpOwpAQCAtMTQ5NCw3ICsxNDk4LDcgQEAgYXV0
byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NFRydW5jPihFeHByZXNzaW9uVHlwZSBh
cmcsIEV4cHJlc3Npb25UeXBlJgogdGVtcGxhdGU8PgogYXV0byBCM0lSR2VuZXJhdG9yOjphZGRP
cDxPcFR5cGU6OkYzMlRydW5jPihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9p
bnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBG
bG9hdCwgT3JpZ2luKCkpOworICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEZsb2F0LCBvcmln
aW4oKSk7CiAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGFyZywgVmFsdWVSZXA6OlNvbWVSZWdpc3Rl
cik7CiAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQs
IGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgIGppdC5y
b3VuZFRvd2FyZFplcm9GbG9hdChwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5mcHIoKSk7CkBA
IC0xNTA3LDE3ICsxNTExLDE3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpG
MzJUcnVuYz4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYKIHRlbXBsYXRlPD4K
IGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJUcnVuY1NGNjQ+KEV4cHJlc3Np
b25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewot
ICAgIFZhbHVlKiBtYXggPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0RG91YmxlVmFs
dWU+KG1fcHJvYywgT3JpZ2luKCksIC1zdGF0aWNfY2FzdDxkb3VibGU+KHN0ZDo6bnVtZXJpY19s
aW1pdHM8aW50MzJfdD46Om1pbigpKSk7Ci0gICAgVmFsdWUqIG1pbiA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8Q29uc3REb3VibGVWYWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwgc3RhdGljX2Nh
c3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptaW4oKSkpOwotICAgIFZh
bHVlKiBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJv
YywgQml0QW5kLCBPcmlnaW4oKSwKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxW
YWx1ZT4obV9wcm9jLCBMZXNzVGhhbiwgT3JpZ2luKCksIGFyZywgbWF4KSwKLSAgICAgICAgbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBHcmVhdGVyRXF1YWwsIE9yaWdp
bigpLCBhcmcsIG1pbikpOwotICAgIG91dE9mQm91bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgT3JpZ2luKCksIG91dE9mQm91bmRzLCB6ZXJvRm9y
VHlwZShJMzIpKTsKLSAgICBDaGVja1ZhbHVlKiB0cmFwID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBPcmlnaW4oKSwgb3V0T2ZCb3VuZHMpOwor
ICAgIFZhbHVlKiBtYXggPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0RG91YmxlVmFs
dWU+KG1fcHJvYywgb3JpZ2luKCksIC1zdGF0aWNfY2FzdDxkb3VibGU+KHN0ZDo6bnVtZXJpY19s
aW1pdHM8aW50MzJfdD46Om1pbigpKSk7CisgICAgVmFsdWUqIG1pbiA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8Q29uc3REb3VibGVWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgc3RhdGljX2Nh
c3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptaW4oKSkpOworICAgIFZh
bHVlKiBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJv
YywgQml0QW5kLCBvcmlnaW4oKSwKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxW
YWx1ZT4obV9wcm9jLCBMZXNzVGhhbiwgb3JpZ2luKCksIGFyZywgbWF4KSwKKyAgICAgICAgbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBHcmVhdGVyRXF1YWwsIG9yaWdp
bigpLCBhcmcsIG1pbikpOworICAgIG91dE9mQm91bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2luKCksIG91dE9mQm91bmRzLCB6ZXJvRm9y
VHlwZShJMzIpKTsKKyAgICBDaGVja1ZhbHVlKiB0cmFwID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBvcmlnaW4oKSwgb3V0T2ZCb3VuZHMpOwog
ICAgIHRyYXAtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFj
a21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CiAgICAgICAgIHRoaXMtPmVtaXRFeGNlcHRpb25DaGVj
ayhqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzVHJ1bmMpOwogICAgIH0pOwotICAgIFBh
dGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0
Y2hwb2ludFZhbHVlPihtX3Byb2MsIEludDMyLCBPcmlnaW4oKSk7CisgICAgUGF0Y2hwb2ludFZh
bHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFs
dWU+KG1fcHJvYywgSW50MzIsIG9yaWdpbigpKTsKICAgICBwYXRjaHBvaW50LT5hcHBlbmQoYXJn
LCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3Io
Wz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBw
YXJhbXMpIHsKICAgICAgICAgaml0LnRydW5jYXRlRG91YmxlVG9JbnQzMihwYXJhbXNbMV0uZnBy
KCksIHBhcmFtc1swXS5ncHIoKSk7CkBAIC0xNTMwLDE3ICsxNTM0LDE3IEBAIGF1dG8gQjNJUkdl
bmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJUcnVuY1NGNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywg
RXhwcmVzc2lvblR5CiB0ZW1wbGF0ZTw+CiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlw
ZTo6STMyVHJ1bmNTRjMyPihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBWYWx1ZSogbWF4ID0gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxDb25zdEZsb2F0VmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIC1zdGF0aWNfY2Fz
dDxmbG9hdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpKTsKLSAgICBWYWx1
ZSogbWluID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdEZsb2F0VmFsdWU+KG1fcHJv
YywgT3JpZ2luKCksIHN0YXRpY19jYXN0PGZsb2F0PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMy
X3Q+OjptaW4oKSkpOwotICAgIFZhbHVlKiBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQml0QW5kLCBPcmlnaW4oKSwKLSAgICAgICAgbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBMZXNzVGhhbiwgT3JpZ2luKCksIGFy
ZywgbWF4KSwKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9j
LCBHcmVhdGVyRXF1YWwsIE9yaWdpbigpLCBhcmcsIG1pbikpOwotICAgIG91dE9mQm91bmRzID0g
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgT3JpZ2luKCks
IG91dE9mQm91bmRzLCB6ZXJvRm9yVHlwZShJMzIpKTsKLSAgICBDaGVja1ZhbHVlKiB0cmFwID0g
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBPcmln
aW4oKSwgb3V0T2ZCb3VuZHMpOworICAgIFZhbHVlKiBtYXggPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PENvbnN0RmxvYXRWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgLXN0YXRpY19jYXN0PGZs
b2F0PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptaW4oKSkpOworICAgIFZhbHVlKiBt
aW4gPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0RmxvYXRWYWx1ZT4obV9wcm9jLCBv
cmlnaW4oKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46
Om1pbigpKSk7CisgICAgVmFsdWUqIG91dE9mQm91bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxWYWx1ZT4obV9wcm9jLCBCaXRBbmQsIG9yaWdpbigpLAorICAgICAgICBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIExlc3NUaGFuLCBvcmlnaW4oKSwgYXJnLCBt
YXgpLAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEdy
ZWF0ZXJFcXVhbCwgb3JpZ2luKCksIGFyZywgbWluKSk7CisgICAgb3V0T2ZCb3VuZHMgPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwgb3V0
T2ZCb3VuZHMsIHplcm9Gb3JUeXBlKEkzMikpOworICAgIENoZWNrVmFsdWUqIHRyYXAgPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIG9yaWdpbigp
LCBvdXRPZkJvdW5kcyk7CiAgICAgdHJhcC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJz
JiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKICAgICAgICAgdGhpcy0+
ZW1pdEV4Y2VwdGlvbkNoZWNrKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNUcnVuYyk7
CiAgICAgfSk7Ci0gICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgSW50MzIsIE9yaWdpbigpKTsK
KyAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBJbnQzMiwgb3JpZ2luKCkpOwogICAgIHBhdGNo
cG9pbnQtPmFwcGVuZChhcmcsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOwogICAgIHBhdGNocG9p
bnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdl
bmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICBqaXQudHJ1bmNhdGVGbG9hdFRvSW50
MzIocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOwpAQCAtMTU1NCwxNyArMTU1OCwx
NyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNTRjMyPihFeHBy
ZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeQogdGVtcGxhdGU8PgogYXV0byBCM0lSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6OkkzMlRydW5jVUY2ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgVmFsdWUqIG1heCA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3REb3VibGVWYWx1ZT4obV9wcm9jLCBPcmln
aW4oKSwgc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+Ojpt
aW4oKSkgKiAtMi4wKTsKLSAgICBWYWx1ZSogbWluID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxDb25zdERvdWJsZVZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCAtMS4wKTsKLSAgICBWYWx1ZSog
b3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEJp
dEFuZCwgT3JpZ2luKCksCi0gICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+
KG1fcHJvYywgTGVzc1RoYW4sIE9yaWdpbigpLCBhcmcsIG1heCksCi0gICAgICAgIG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgR3JlYXRlclRoYW4sIE9yaWdpbigpLCBh
cmcsIG1pbikpOwotICAgIG91dE9mQm91bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxW
YWx1ZT4obV9wcm9jLCBFcXVhbCwgT3JpZ2luKCksIG91dE9mQm91bmRzLCB6ZXJvRm9yVHlwZShJ
MzIpKTsKLSAgICBDaGVja1ZhbHVlKiB0cmFwID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxD
aGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBPcmlnaW4oKSwgb3V0T2ZCb3VuZHMpOworICAgIFZh
bHVlKiBtYXggPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0RG91YmxlVmFsdWU+KG1f
cHJvYywgb3JpZ2luKCksIHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxp
bnQzMl90Pjo6bWluKCkpICogLTIuMCk7CisgICAgVmFsdWUqIG1pbiA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8Q29uc3REb3VibGVWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgLTEuMCk7Cisg
ICAgVmFsdWUqIG91dE9mQm91bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4o
bV9wcm9jLCBCaXRBbmQsIG9yaWdpbigpLAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFZhbHVlPihtX3Byb2MsIExlc3NUaGFuLCBvcmlnaW4oKSwgYXJnLCBtYXgpLAorICAgICAg
ICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEdyZWF0ZXJUaGFuLCBv
cmlnaW4oKSwgYXJnLCBtaW4pKTsKKyAgICBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLCBvdXRPZkJvdW5kcywgemVy
b0ZvclR5cGUoSTMyKSk7CisgICAgQ2hlY2tWYWx1ZSogdHJhcCA9IG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgb3JpZ2luKCksIG91dE9mQm91bmRz
KTsKICAgICB0cmFwLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3Qg
U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgewogICAgICAgICB0aGlzLT5lbWl0RXhjZXB0aW9u
Q2hlY2soaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc1RydW5jKTsKICAgICB9KTsKLSAg
ICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBJbnQzMiwgT3JpZ2luKCkpOworICAgIFBhdGNocG9p
bnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2lu
dFZhbHVlPihtX3Byb2MsIEludDMyLCBvcmlnaW4oKSk7CiAgICAgcGF0Y2hwb2ludC0+YXBwZW5k
KGFyZywgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CiAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJh
dG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFt
cyYgcGFyYW1zKSB7CiAgICAgICAgIGppdC50cnVuY2F0ZURvdWJsZVRvVWludDMyKHBhcmFtc1sx
XS5mcHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKQEAgLTE1NzcsMTcgKzE1ODEsMTcgQEAgYXV0byBC
M0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlRydW5jVUY2ND4oRXhwcmVzc2lvblR5cGUg
YXJnLCBFeHByZXNzaW9uVHkKIHRlbXBsYXRlPD4KIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpJMzJUcnVuY1VGMzI+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewotICAgIFZhbHVlKiBtYXggPSBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PENvbnN0RmxvYXRWYWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwgc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1pbigpKSAqIC0yLjAp
OwotICAgIFZhbHVlKiBtaW4gPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0RmxvYXRW
YWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwgLTEuMCk7Ci0gICAgVmFsdWUqIG91dE9mQm91bmRzID0g
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCaXRBbmQsIE9yaWdpbigp
LAotICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIExlc3NU
aGFuLCBPcmlnaW4oKSwgYXJnLCBtYXgpLAotICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFZhbHVlPihtX3Byb2MsIEdyZWF0ZXJUaGFuLCBPcmlnaW4oKSwgYXJnLCBtaW4pKTsKLSAg
ICBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywg
RXF1YWwsIE9yaWdpbigpLCBvdXRPZkJvdW5kcywgemVyb0ZvclR5cGUoSTMyKSk7Ci0gICAgQ2hl
Y2tWYWx1ZSogdHJhcCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9w
cm9jLCBDaGVjaywgT3JpZ2luKCksIG91dE9mQm91bmRzKTsKKyAgICBWYWx1ZSogbWF4ID0gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdEZsb2F0VmFsdWU+KG1fcHJvYywgb3JpZ2luKCks
IHN0YXRpY19jYXN0PGZsb2F0PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptaW4oKSkg
KiAtMi4wKTsKKyAgICBWYWx1ZSogbWluID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25z
dEZsb2F0VmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIC0xLjApOworICAgIFZhbHVlKiBvdXRPZkJv
dW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQml0QW5kLCBv
cmlnaW4oKSwKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9j
LCBMZXNzVGhhbiwgb3JpZ2luKCksIGFyZywgbWF4KSwKKyAgICAgICAgbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBHcmVhdGVyVGhhbiwgb3JpZ2luKCksIGFyZywgbWlu
KSk7CisgICAgb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPiht
X3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwgb3V0T2ZCb3VuZHMsIHplcm9Gb3JUeXBlKEkzMikpOwor
ICAgIENoZWNrVmFsdWUqIHRyYXAgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENoZWNrVmFs
dWU+KG1fcHJvYywgQ2hlY2ssIG9yaWdpbigpLCBvdXRPZkJvdW5kcyk7CiAgICAgdHJhcC0+c2V0
R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlv
blBhcmFtcyYpIHsKICAgICAgICAgdGhpcy0+ZW1pdEV4Y2VwdGlvbkNoZWNrKGppdCwgRXhjZXB0
aW9uVHlwZTo6T3V0T2ZCb3VuZHNUcnVuYyk7CiAgICAgfSk7Ci0gICAgUGF0Y2hwb2ludFZhbHVl
KiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+
KG1fcHJvYywgSW50MzIsIE9yaWdpbigpKTsKKyAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9p
bnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBJ
bnQzMiwgb3JpZ2luKCkpOwogICAgIHBhdGNocG9pbnQtPmFwcGVuZChhcmcsIFZhbHVlUmVwOjpT
b21lUmVnaXN0ZXIpOwogICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVs
cGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAg
ICAgICBqaXQudHJ1bmNhdGVGbG9hdFRvVWludDMyKHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBd
LmdwcigpKTsKQEAgLTE2MDAsMTcgKzE2MDQsMTcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRP
cDxPcFR5cGU6OkkzMlRydW5jVUYzMj4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHkK
IHRlbXBsYXRlPD4KIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRUcnVuY1NG
NjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAogewotICAgIFZhbHVlKiBtYXggPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENv
bnN0RG91YmxlVmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIC1zdGF0aWNfY2FzdDxkb3VibGU+KHN0
ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1pbigpKSk7Ci0gICAgVmFsdWUqIG1pbiA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3REb3VibGVWYWx1ZT4obV9wcm9jLCBPcmlnaW4o
KSwgc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptaW4o
KSkpOwotICAgIFZhbHVlKiBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
VmFsdWU+KG1fcHJvYywgQml0QW5kLCBPcmlnaW4oKSwKLSAgICAgICAgbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBMZXNzVGhhbiwgT3JpZ2luKCksIGFyZywgbWF4KSwK
LSAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBHcmVhdGVy
RXF1YWwsIE9yaWdpbigpLCBhcmcsIG1pbikpOwotICAgIG91dE9mQm91bmRzID0gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgT3JpZ2luKCksIG91dE9mQm91
bmRzLCB6ZXJvRm9yVHlwZShJMzIpKTsKLSAgICBDaGVja1ZhbHVlKiB0cmFwID0gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBPcmlnaW4oKSwgb3V0
T2ZCb3VuZHMpOworICAgIFZhbHVlKiBtYXggPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENv
bnN0RG91YmxlVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIC1zdGF0aWNfY2FzdDxkb3VibGU+KHN0
ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1pbigpKSk7CisgICAgVmFsdWUqIG1pbiA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3REb3VibGVWYWx1ZT4obV9wcm9jLCBvcmlnaW4o
KSwgc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptaW4o
KSkpOworICAgIFZhbHVlKiBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
VmFsdWU+KG1fcHJvYywgQml0QW5kLCBvcmlnaW4oKSwKKyAgICAgICAgbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBMZXNzVGhhbiwgb3JpZ2luKCksIGFyZywgbWF4KSwK
KyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBHcmVhdGVy
RXF1YWwsIG9yaWdpbigpLCBhcmcsIG1pbikpOworICAgIG91dE9mQm91bmRzID0gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2luKCksIG91dE9mQm91
bmRzLCB6ZXJvRm9yVHlwZShJMzIpKTsKKyAgICBDaGVja1ZhbHVlKiB0cmFwID0gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBvcmlnaW4oKSwgb3V0
T2ZCb3VuZHMpOwogICAgIHRyYXAtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0
LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CiAgICAgICAgIHRoaXMtPmVtaXRF
eGNlcHRpb25DaGVjayhqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzVHJ1bmMpOwogICAg
IH0pOwotICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEludDY0LCBPcmlnaW4oKSk7CisgICAg
UGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQ
YXRjaHBvaW50VmFsdWU+KG1fcHJvYywgSW50NjQsIG9yaWdpbigpKTsKICAgICBwYXRjaHBvaW50
LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKICAgICBwYXRjaHBvaW50LT5z
ZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0
aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgaml0LnRydW5jYXRlRG91YmxlVG9JbnQ2NChw
YXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5ncHIoKSk7CkBAIC0xNjIzLDEzICsxNjI3LDEzIEBA
IGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRUcnVuY1NGNjQ+KEV4cHJlc3Np
b25UeXBlIGFyZywgRXhwcmVzc2lvblR5CiB0ZW1wbGF0ZTw+CiBhdXRvIEIzSVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNVRjY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBWYWx1ZSogbWF4ID0gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdERvdWJsZVZhbHVlPihtX3Byb2MsIE9yaWdpbigp
LCBzdGF0aWNfY2FzdDxkb3VibGU+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1pbigp
KSAqIC0yLjApOwotICAgIFZhbHVlKiBtaW4gPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENv
bnN0RG91YmxlVmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIC0xLjApOwotICAgIFZhbHVlKiBvdXRP
ZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQml0QW5k
LCBPcmlnaW4oKSwKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9w
cm9jLCBMZXNzVGhhbiwgT3JpZ2luKCksIGFyZywgbWF4KSwKLSAgICAgICAgbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBHcmVhdGVyVGhhbiwgT3JpZ2luKCksIGFyZywg
bWluKSk7Ci0gICAgb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVl
PihtX3Byb2MsIEVxdWFsLCBPcmlnaW4oKSwgb3V0T2ZCb3VuZHMsIHplcm9Gb3JUeXBlKEkzMikp
OwotICAgIENoZWNrVmFsdWUqIHRyYXAgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENoZWNr
VmFsdWU+KG1fcHJvYywgQ2hlY2ssIE9yaWdpbigpLCBvdXRPZkJvdW5kcyk7CisgICAgVmFsdWUq
IG1heCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3REb3VibGVWYWx1ZT4obV9wcm9j
LCBvcmlnaW4oKSwgc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0
X3Q+OjptaW4oKSkgKiAtMi4wKTsKKyAgICBWYWx1ZSogbWluID0gbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxDb25zdERvdWJsZVZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCAtMS4wKTsKKyAgICBW
YWx1ZSogb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3By
b2MsIEJpdEFuZCwgb3JpZ2luKCksCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
VmFsdWU+KG1fcHJvYywgTGVzc1RoYW4sIG9yaWdpbigpLCBhcmcsIG1heCksCisgICAgICAgIG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgR3JlYXRlclRoYW4sIG9yaWdp
bigpLCBhcmcsIG1pbikpOworICAgIG91dE9mQm91bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2luKCksIG91dE9mQm91bmRzLCB6ZXJvRm9y
VHlwZShJMzIpKTsKKyAgICBDaGVja1ZhbHVlKiB0cmFwID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBvcmlnaW4oKSwgb3V0T2ZCb3VuZHMpOwog
ICAgIHRyYXAtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFj
a21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CiAgICAgICAgIHRoaXMtPmVtaXRFeGNlcHRpb25DaGVj
ayhqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzVHJ1bmMpOwogICAgIH0pOwpAQCAtMTYz
OSw5ICsxNjQzLDkgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydW5j
VUY2ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHkKICAgICAgICAgLy8gU2luY2Ug
eDg2IGRvZXNuJ3QgaGF2ZSBhbiBpbnN0cnVjdGlvbiB0byBjb252ZXJ0IGZsb2F0aW5nIHBvaW50
cyB0byB1bnNpZ25lZCBpbnRlZ2Vycywgd2UgYXQgbGVhc3QgdHJ5IHRvIGRvIHRoZSBzbWFydCB0
aGluZyBpZgogICAgICAgICAvLyB0aGUgbnVtYmVycyBhcmUgd291bGQgYmUgcG9zaXRpdmUgYW55
d2F5IGFzIGEgc2lnbmVkIGludGVnZXIuIFNpbmNlIHdlIGNhbm5vdCBtYXRlcmlhbGl6ZSBjb25z
dGFudHMgaW50byBmcHJzIHdlIGhhdmUgYjMgZG8gaXQKICAgICAgICAgLy8gc28gd2UgY2FuIHBv
b2wgdGhlbSBpZiBuZWVkZWQuCi0gICAgICAgIGNvbnN0YW50ID0gbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxDb25zdERvdWJsZVZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCBzdGF0aWNfY2FzdDxk
b3VibGU+KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+OjptYXgoKSAtIHN0ZDo6bnVtZXJp
Y19saW1pdHM8aW50NjRfdD46Om1heCgpKSk7CisgICAgICAgIGNvbnN0YW50ID0gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxDb25zdERvdWJsZVZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBzdGF0
aWNfY2FzdDxkb3VibGU+KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+OjptYXgoKSAtIHN0
ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1heCgpKSk7CiAgICAgfQotICAgIFBhdGNocG9p
bnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2lu
dFZhbHVlPihtX3Byb2MsIEludDY0LCBPcmlnaW4oKSk7CisgICAgUGF0Y2hwb2ludFZhbHVlKiBw
YXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1f
cHJvYywgSW50NjQsIG9yaWdpbigpKTsKICAgICBwYXRjaHBvaW50LT5hcHBlbmQoYXJnLCBWYWx1
ZVJlcDo6U29tZVJlZ2lzdGVyKTsKICAgICBpZiAoaXNYODYoKSkgewogICAgICAgICBwYXRjaHBv
aW50LT5hcHBlbmQoY29uc3RhbnQsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOwpAQCAtMTY2NSwx
NyArMTY2OSwxNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNV
RjY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeQogdGVtcGxhdGU8PgogYXV0byBC
M0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydW5jU0YzMj4oRXhwcmVzc2lvblR5cGUg
YXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgVmFs
dWUqIG1heCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RGbG9hdFZhbHVlPihtX3By
b2MsIE9yaWdpbigpLCAtc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50
NjRfdD46Om1pbigpKSk7Ci0gICAgVmFsdWUqIG1pbiA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8Q29uc3RGbG9hdFZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCBzdGF0aWNfY2FzdDxmbG9hdD4o
c3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWluKCkpKTsKLSAgICBWYWx1ZSogb3V0T2ZC
b3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEJpdEFuZCwg
T3JpZ2luKCksCi0gICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJv
YywgTGVzc1RoYW4sIE9yaWdpbigpLCBhcmcsIG1heCksCi0gICAgICAgIG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgR3JlYXRlckVxdWFsLCBPcmlnaW4oKSwgYXJnLCBt
aW4pKTsKLSAgICBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+
KG1fcHJvYywgRXF1YWwsIE9yaWdpbigpLCBvdXRPZkJvdW5kcywgemVyb0ZvclR5cGUoSTMyKSk7
Ci0gICAgQ2hlY2tWYWx1ZSogdHJhcCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tW
YWx1ZT4obV9wcm9jLCBDaGVjaywgT3JpZ2luKCksIG91dE9mQm91bmRzKTsKKyAgICBWYWx1ZSog
bWF4ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdEZsb2F0VmFsdWU+KG1fcHJvYywg
b3JpZ2luKCksIC1zdGF0aWNfY2FzdDxmbG9hdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90
Pjo6bWluKCkpKTsKKyAgICBWYWx1ZSogbWluID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxD
b25zdEZsb2F0VmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHN0YXRpY19jYXN0PGZsb2F0PihzdGQ6
Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptaW4oKSkpOworICAgIFZhbHVlKiBvdXRPZkJvdW5k
cyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQml0QW5kLCBvcmln
aW4oKSwKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBM
ZXNzVGhhbiwgb3JpZ2luKCksIGFyZywgbWF4KSwKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBHcmVhdGVyRXF1YWwsIG9yaWdpbigpLCBhcmcsIG1pbikp
OworICAgIG91dE9mQm91bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9w
cm9jLCBFcXVhbCwgb3JpZ2luKCksIG91dE9mQm91bmRzLCB6ZXJvRm9yVHlwZShJMzIpKTsKKyAg
ICBDaGVja1ZhbHVlKiB0cmFwID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVl
PihtX3Byb2MsIENoZWNrLCBvcmlnaW4oKSwgb3V0T2ZCb3VuZHMpOwogICAgIHRyYXAtPnNldEdl
bmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25Q
YXJhbXMmKSB7CiAgICAgICAgIHRoaXMtPmVtaXRFeGNlcHRpb25DaGVjayhqaXQsIEV4Y2VwdGlv
blR5cGU6Ok91dE9mQm91bmRzVHJ1bmMpOwogICAgIH0pOwotICAgIFBhdGNocG9pbnRWYWx1ZSog
cGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPiht
X3Byb2MsIEludDY0LCBPcmlnaW4oKSk7CisgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgSW50
NjQsIG9yaWdpbigpKTsKICAgICBwYXRjaHBvaW50LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6U29t
ZVJlZ2lzdGVyKTsKICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBl
cnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAg
ICAgaml0LnRydW5jYXRlRmxvYXRUb0ludDY0KHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmdw
cigpKTsKQEAgLTE2ODgsMTMgKzE2OTIsMTMgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6Okk2NFRydW5jU0YzMj4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHkKIHRl
bXBsYXRlPD4KIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRUcnVuY1VGMzI+
KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJl
c3VsdAogewotICAgIFZhbHVlKiBtYXggPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0
RmxvYXRWYWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVt
ZXJpY19saW1pdHM8aW50NjRfdD46Om1pbigpKSAqIC0yLjApOwotICAgIFZhbHVlKiBtaW4gPSBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0RmxvYXRWYWx1ZT4obV9wcm9jLCBPcmlnaW4o
KSwgLTEuMCk7Ci0gICAgVmFsdWUqIG91dE9mQm91bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxWYWx1ZT4obV9wcm9jLCBCaXRBbmQsIE9yaWdpbigpLAotICAgICAgICBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIExlc3NUaGFuLCBPcmlnaW4oKSwgYXJnLCBt
YXgpLAotICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEdy
ZWF0ZXJUaGFuLCBPcmlnaW4oKSwgYXJnLCBtaW4pKTsKLSAgICBvdXRPZkJvdW5kcyA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIE9yaWdpbigpLCBvdXRP
ZkJvdW5kcywgemVyb0ZvclR5cGUoSTMyKSk7Ci0gICAgQ2hlY2tWYWx1ZSogdHJhcCA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgT3JpZ2luKCks
IG91dE9mQm91bmRzKTsKKyAgICBWYWx1ZSogbWF4ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxDb25zdEZsb2F0VmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHN0YXRpY19jYXN0PGZsb2F0Pihz
dGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptaW4oKSkgKiAtMi4wKTsKKyAgICBWYWx1ZSog
bWluID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdEZsb2F0VmFsdWU+KG1fcHJvYywg
b3JpZ2luKCksIC0xLjApOworICAgIFZhbHVlKiBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQml0QW5kLCBvcmlnaW4oKSwKKyAgICAgICAgbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBMZXNzVGhhbiwgb3JpZ2luKCks
IGFyZywgbWF4KSwKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9w
cm9jLCBHcmVhdGVyVGhhbiwgb3JpZ2luKCksIGFyZywgbWluKSk7CisgICAgb3V0T2ZCb3VuZHMg
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4o
KSwgb3V0T2ZCb3VuZHMsIHplcm9Gb3JUeXBlKEkzMikpOworICAgIENoZWNrVmFsdWUqIHRyYXAg
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIG9y
aWdpbigpLCBvdXRPZkJvdW5kcyk7CiAgICAgdHJhcC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxI
ZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKICAgICAgICAg
dGhpcy0+ZW1pdEV4Y2VwdGlvbkNoZWNrKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNU
cnVuYyk7CiAgICAgfSk7CkBAIC0xNzA0LDkgKzE3MDgsOSBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNVRjMyPihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Np
b25UeQogICAgICAgICAvLyBTaW5jZSB4ODYgZG9lc24ndCBoYXZlIGFuIGluc3RydWN0aW9uIHRv
IGNvbnZlcnQgZmxvYXRpbmcgcG9pbnRzIHRvIHVuc2lnbmVkIGludGVnZXJzLCB3ZSBhdCBsZWFz
dCB0cnkgdG8gZG8gdGhlIHNtYXJ0IHRoaW5nIGlmCiAgICAgICAgIC8vIHRoZSBudW1iZXJzIGFy
ZSB3b3VsZCBiZSBwb3NpdGl2ZSBhbnl3YXkgYXMgYSBzaWduZWQgaW50ZWdlci4gU2luY2Ugd2Ug
Y2Fubm90IG1hdGVyaWFsaXplIGNvbnN0YW50cyBpbnRvIGZwcnMgd2UgaGF2ZSBiMyBkbyBpdAog
ICAgICAgICAvLyBzbyB3ZSBjYW4gcG9vbCB0aGVtIGlmIG5lZWRlZC4KLSAgICAgICAgY29uc3Rh
bnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0RmxvYXRWYWx1ZT4obV9wcm9jLCBP
cmlnaW4oKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+
OjptYXgoKSAtIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1heCgpKSk7CisgICAgICAg
IGNvbnN0YW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdEZsb2F0VmFsdWU+KG1f
cHJvYywgb3JpZ2luKCksIHN0YXRpY19jYXN0PGZsb2F0PihzdGQ6Om51bWVyaWNfbGltaXRzPHVp
bnQ2NF90Pjo6bWF4KCkgLSBzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptYXgoKSkpOwog
ICAgIH0KLSAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBJbnQ2NCwgT3JpZ2luKCkpOworICAg
IFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEludDY0LCBvcmlnaW4oKSk7CiAgICAgcGF0Y2hwb2lu
dC0+YXBwZW5kKGFyZywgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CiAgICAgaWYgKGlzWDg2KCkp
IHsKICAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGNvbnN0YW50LCBWYWx1ZVJlcDo6U29tZVJl
Z2lzdGVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5j
dGlvblBhcnNlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFy
c2VyLmgKaW5kZXggZjJiOTQxMTVjYjY0ZjY3YzZiNTg2MWRlZGM4YzJiOTUzN2M3M2JhMi4uZTA3
NWYzNzc4Nzc2ZjViMzU1OWRmMmQ0NWFmMDNjYTEzNDE2MDg2OSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmgKQEAgLTU1LDEyICs1NSwxNSBA
QCBwdWJsaWM6CiAgICAgICAgIENvbnRyb2xUeXBlIGNvbnRyb2xEYXRhOwogICAgIH07CiAKKyAg
ICBPcFR5cGUgY3VycmVudE9wY29kZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudE9wY29kZTsg
fQorICAgIHNpemVfdCBjdXJyZW50T3Bjb2RlU3RhcnRpbmdPZmZzZXQoKSBjb25zdCB7IHJldHVy
biBtX2N1cnJlbnRPcGNvZGVTdGFydGluZ09mZnNldDsgfQorCiBwcml2YXRlOgogICAgIHN0YXRp
YyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKIAogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9V
TlVTRURfUkVUVVJOIHBhcnNlQm9keSgpOwotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURf
UkVUVVJOIHBhcnNlRXhwcmVzc2lvbihPcFR5cGUpOwotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9V
TlVTRURfUkVUVVJOIHBhcnNlVW5yZWFjaGFibGVFeHByZXNzaW9uKE9wVHlwZSk7CisgICAgUGFy
dGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VFeHByZXNzaW9uKCk7CisgICAgUGFy
dGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VVbnJlYWNoYWJsZUV4cHJlc3Npb24o
KTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiB1bmlmeUNvbnRyb2woVmVj
dG9yPEV4cHJlc3Npb25UeXBlPiYsIHVuc2lnbmVkIGxldmVsKTsKIAogI2RlZmluZSBXQVNNX1RS
WV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKHJlc3VsdCwgd2hhdCkgZG8geyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCkBAIC04NCw2ICs4NywxMCBAQCBwcml2YXRlOgogICAgIGNv
bnN0IFNpZ25hdHVyZSogbV9zaWduYXR1cmU7CiAgICAgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24m
IG1faW5mbzsKICAgICBjb25zdCBWZWN0b3I8U2lnbmF0dXJlSW5kZXg+JiBtX21vZHVsZVNpZ25h
dHVyZUluZGljZXNUb1VuaXF1ZWRTaWduYXR1cmVJbmRpY2VzOworCisgICAgT3BUeXBlIG1fY3Vy
cmVudE9wY29kZTsKKyAgICBzaXplX3QgbV9jdXJyZW50T3Bjb2RlU3RhcnRpbmdPZmZzZXQgeyAw
IH07CisKICAgICB1bnNpZ25lZCBtX3VucmVhY2hhYmxlQmxvY2tzIHsgMCB9OwogfTsKIApAQCAt
OTcsNiArMTA0LDcgQEAgRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OkZ1bmN0aW9uUGFyc2VyKFZN
KiB2bSwgQ29udGV4dCYgY29udGV4dCwgY29uc3QgdWludDhfdCoKIHsKICAgICBpZiAodmVyYm9z
ZSkKICAgICAgICAgZGF0YUxvZ0xuKCJQYXJzaW5nIGZ1bmN0aW9uIHN0YXJ0aW5nIGF0OiAiLCAo
dWludHB0cl90KWZ1bmN0aW9uU3RhcnQsICIgb2YgbGVuZ3RoOiAiLCBmdW5jdGlvbkxlbmd0aCk7
CisgICAgbV9jb250ZXh0LnNldFBhcnNlcih0aGlzKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUg
Q29udGV4dD4KQEAgLTEyOSwxOCArMTM3LDIxIEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4
dD46OnBhcnNlQm9keSgpIC0+IFBhcnRpYWxSZXN1bHQKICAgICBtX2NvbnRyb2xTdGFjay5hcHBl
bmQoeyBFeHByZXNzaW9uTGlzdCgpLCBtX2NvbnRleHQuYWRkVG9wTGV2ZWwobV9zaWduYXR1cmUt
PnJldHVyblR5cGUoKSkgfSk7CiAgICAgdWludDhfdCBvcDsKICAgICB3aGlsZSAobV9jb250cm9s
U3RhY2suc2l6ZSgpKSB7CisgICAgICAgIG1fY3VycmVudE9wY29kZVN0YXJ0aW5nT2Zmc2V0ID0g
bV9vZmZzZXQ7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVUludDgob3ApLCAi
Y2FuJ3QgZGVjb2RlIG9wY29kZSIpOwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFpc1Zh
bGlkT3BUeXBlKG9wKSwgImludmFsaWQgb3Bjb2RlICIsIG9wKTsKIAorICAgICAgICBtX2N1cnJl
bnRPcGNvZGUgPSBzdGF0aWNfY2FzdDxPcFR5cGU+KG9wKTsKKwogICAgICAgICBpZiAodmVyYm9z
ZSkgewogICAgICAgICAgICAgZGF0YUxvZ0xuKCJwcm9jZXNzaW5nIG9wICgiLCBtX3VucmVhY2hh
YmxlQmxvY2tzLCAiKTogIiwgIFJhd1BvaW50ZXIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ob3Ap
KSwgIiwgIiwgbWFrZVN0cmluZyhzdGF0aWNfY2FzdDxPcFR5cGU+KG9wKSksICIgYXQgb2Zmc2V0
OiAiLCBSYXdQb2ludGVyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG1fb2Zmc2V0KSkpOwogICAg
ICAgICAgICAgbV9jb250ZXh0LmR1bXAobV9jb250cm9sU3RhY2ssICZtX2V4cHJlc3Npb25TdGFj
ayk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAobV91bnJlYWNoYWJsZUJsb2NrcykKLSAgICAg
ICAgICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VVbnJlYWNoYWJsZUV4cHJlc3Np
b24oc3RhdGljX2Nhc3Q8T3BUeXBlPihvcCkpKTsKKyAgICAgICAgICAgIFdBU01fRkFJTF9JRl9I
RUxQRVJfRkFJTFMocGFyc2VVbnJlYWNoYWJsZUV4cHJlc3Npb24oKSk7CiAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VFeHByZXNzaW9uKHN0
YXRpY19jYXN0PE9wVHlwZT4ob3ApKSk7CisgICAgICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVS
X0ZBSUxTKHBhcnNlRXhwcmVzc2lvbigpKTsKICAgICB9CiAKICAgICBBU1NFUlQob3AgPT0gT3BU
eXBlOjpFbmQpOwpAQCAtMTc4LDkgKzE4OSw5IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4
dD46OnVuYXJ5Q2FzZSgpIC0+IFBhcnRpYWxSZXN1bHQKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUg
Q29udGV4dD4KLWF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhwcmVzc2lvbihP
cFR5cGUgb3ApIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46
OnBhcnNlRXhwcmVzc2lvbigpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBzd2l0Y2ggKG9wKSB7
CisgICAgc3dpdGNoIChtX2N1cnJlbnRPcGNvZGUpIHsKICNkZWZpbmUgQ1JFQVRFX0NBU0UobmFt
ZSwgaWQsIGIzb3AsIGluYykgY2FzZSBPcFR5cGU6Om5hbWU6IHJldHVybiBiaW5hcnlDYXNlPE9w
VHlwZTo6bmFtZT4oKTsKICAgICBGT1JfRUFDSF9XQVNNX0JJTkFSWV9PUChDUkVBVEVfQ0FTRSkK
ICN1bmRlZiBDUkVBVEVfQ0FTRQpAQCAtMjE1LDcgKzIyNiw3IEBAIGF1dG8gRnVuY3Rpb25QYXJz
ZXI8Q29udGV4dD46OnBhcnNlRXhwcmVzc2lvbihPcFR5cGUgb3ApIC0+IFBhcnRpYWxSZXN1bHQK
ICAgICAgICAgLy8gRklYTUUgdmFsaWRhdGUgYWxpZ25tZW50LiBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY4ODM2CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IXBhcnNlVmFyVUludDMyKG9mZnNldCksICJjYW4ndCBnZXQgbG9hZCBvZmZzZXQiKTsKICAgICAg
ICAgV0FTTV9UUllfUE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5UTyhwb2ludGVyLCAibG9hZCBwb2lu
dGVyIik7Ci0gICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGxvYWQoc3RhdGljX2Nhc3Q8
TG9hZE9wVHlwZT4ob3ApLCBwb2ludGVyLCByZXN1bHQsIG9mZnNldCkpOworICAgICAgICBXQVNN
X1RSWV9BRERfVE9fQ09OVEVYVChsb2FkKHN0YXRpY19jYXN0PExvYWRPcFR5cGU+KG1fY3VycmVu
dE9wY29kZSksIHBvaW50ZXIsIHJlc3VsdCwgb2Zmc2V0KSk7CiAgICAgICAgIG1fZXhwcmVzc2lv
blN0YWNrLmFwcGVuZChyZXN1bHQpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KQEAgLTIz
MCw3ICsyNDEsNyBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Np
b24oT3BUeXBlIG9wKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoIXBhcnNlVmFyVUludDMyKG9mZnNldCksICJjYW4ndCBnZXQgc3RvcmUgb2Zmc2V0Iik7CiAg
ICAgICAgIFdBU01fVFJZX1BPUF9FWFBSRVNTSU9OX1NUQUNLX0lOVE8odmFsdWUsICJzdG9yZSB2
YWx1ZSIpOwogICAgICAgICBXQVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKHBvaW50
ZXIsICJzdG9yZSBwb2ludGVyIik7Ci0gICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKHN0
b3JlKHN0YXRpY19jYXN0PFN0b3JlT3BUeXBlPihvcCksIHBvaW50ZXIsIHZhbHVlLCBvZmZzZXQp
KTsKKyAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoc3RvcmUoc3RhdGljX2Nhc3Q8U3Rv
cmVPcFR5cGU+KG1fY3VycmVudE9wY29kZSksIHBvaW50ZXIsIHZhbHVlLCBvZmZzZXQpKTsKICAg
ICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAjdW5kZWYgQ1JFQVRFX0NBU0UKQEAgLTQwMyw3ICs0
MTQsNyBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24oT3BU
eXBlIG9wKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgICAgIEV4cHJlc3Npb25UeXBlIGNvbmRpdGlv
biA9IENvbnRleHQ6OmVtcHR5RXhwcmVzc2lvbjsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9J
RighcGFyc2VWYXJVSW50MzIodGFyZ2V0KSwgImNhbid0IGdldCBiciAvIGJyX2lmJ3MgdGFyZ2V0
Iik7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYodGFyZ2V0ID49IG1fY29udHJvbFN0YWNr
LnNpemUoKSwgImJyIC8gYnJfaWYncyB0YXJnZXQgIiwgdGFyZ2V0LCAiIGV4Y2VlZHMgY29udHJv
bCBzdGFjayBzaXplICIsIG1fY29udHJvbFN0YWNrLnNpemUoKSk7Ci0gICAgICAgIGlmIChvcCA9
PSBCcklmKQorICAgICAgICBpZiAobV9jdXJyZW50T3Bjb2RlID09IEJySWYpCiAgICAgICAgICAg
ICBXQVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKGNvbmRpdGlvbiwgImJyIC8gYnJf
aWYgY29uZGl0aW9uIik7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1fdW5yZWFjaGFibGVC
bG9ja3MgPSAxOwpAQCAtNTE4LDExICs1MjksMTEgQEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250
ZXh0Pjo6cGFyc2VFeHByZXNzaW9uKE9wVHlwZSBvcCkgLT4gUGFydGlhbFJlc3VsdAogCiAvLyBG
SVhNRTogV2Ugc2hvdWxkIHRyeSB0byB1c2UgdGhlIHNhbWUgZGVjb2RlciBmdW5jdGlvbiBmb3Ig
Ym90aCB1bnJlYWNoYWJsZSBhbmQgcmVhY2hhYmxlIGNvZGUuIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU5NjUKIHRlbXBsYXRlPHR5cGVuYW1lIENvbnRleHQ+Ci1h
dXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZVVucmVhY2hhYmxlRXhwcmVzc2lvbihP
cFR5cGUgb3ApIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46
OnBhcnNlVW5yZWFjaGFibGVFeHByZXNzaW9uKCkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIEFT
U0VSVChtX3VucmVhY2hhYmxlQmxvY2tzKTsKICNkZWZpbmUgQ1JFQVRFX0NBU0UobmFtZSwgaWQs
IGIzb3AsIGluYykgY2FzZSBPcFR5cGU6Om5hbWU6Ci0gICAgc3dpdGNoIChvcCkgeworICAgIHN3
aXRjaCAobV9jdXJyZW50T3Bjb2RlKSB7CiAgICAgY2FzZSBFbHNlOiB7CiAgICAgICAgIGlmICht
X3VucmVhY2hhYmxlQmxvY2tzID4gMSkKICAgICAgICAgICAgIHJldHVybiB7IH07CkBAIC01NDks
NyArNTYwLDcgQEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VVbnJlYWNoYWJs
ZUV4cHJlc3Npb24oT3BUeXBlIG9wKSAtPiBQYXJ0aWFsUmUKICAgICBjYXNlIEJsb2NrOiB7CiAg
ICAgICAgIG1fdW5yZWFjaGFibGVCbG9ja3MrKzsKICAgICAgICAgVHlwZSB1bnVzZWQ7Ci0gICAg
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlUmVzdWx0VHlwZSh1bnVzZWQpLCAiY2FuJ3Qg
Z2V0IGlubGluZSB0eXBlIGZvciAiLCBvcCwgIiBpbiB1bnJlYWNoYWJsZSBjb250ZXh0Iik7Cisg
ICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlUmVzdWx0VHlwZSh1bnVzZWQpLCAiY2Fu
J3QgZ2V0IGlubGluZSB0eXBlIGZvciAiLCBtX2N1cnJlbnRPcGNvZGUsICIgaW4gdW5yZWFjaGFi
bGUgY29udGV4dCIpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIApAQCAtNTkwLDggKzYw
MSw4IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlVW5yZWFjaGFibGVFeHBy
ZXNzaW9uKE9wVHlwZSBvcCkgLT4gUGFydGlhbFJlCiAgICAgRk9SX0VBQ0hfV0FTTV9NRU1PUllf
TE9BRF9PUChDUkVBVEVfQ0FTRSkKICAgICBGT1JfRUFDSF9XQVNNX01FTU9SWV9TVE9SRV9PUChD
UkVBVEVfQ0FTRSkgewogICAgICAgICB1aW50MzJfdCB1bnVzZWQ7Ci0gICAgICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKHVudXNlZCksICJjYW4ndCBnZXQgZmlyc3QgaW1t
ZWRpYXRlIGZvciAiLCBvcCwgIiBpbiB1bnJlYWNoYWJsZSBjb250ZXh0Iik7Ci0gICAgICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKHVudXNlZCksICJjYW4ndCBnZXQgc2Vj
b25kIGltbWVkaWF0ZSBmb3IgIiwgb3AsICIgaW4gdW5yZWFjaGFibGUgY29udGV4dCIpOworICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMih1bnVzZWQpLCAiY2FuJ3Qg
Z2V0IGZpcnN0IGltbWVkaWF0ZSBmb3IgIiwgbV9jdXJyZW50T3Bjb2RlLCAiIGluIHVucmVhY2hh
YmxlIGNvbnRleHQiKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50
MzIodW51c2VkKSwgImNhbid0IGdldCBzZWNvbmQgaW1tZWRpYXRlIGZvciAiLCBtX2N1cnJlbnRP
cGNvZGUsICIgaW4gdW5yZWFjaGFibGUgY29udGV4dCIpOwogICAgICAgICByZXR1cm4geyB9Owog
ICAgIH0KIApAQCAtNjA3LDcgKzYxOCw3IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46
OnBhcnNlVW5yZWFjaGFibGVFeHByZXNzaW9uKE9wVHlwZSBvcCkgLT4gUGFydGlhbFJlCiAgICAg
Y2FzZSBCcklmOgogICAgIGNhc2UgQ2FsbDogewogICAgICAgICB1aW50MzJfdCB1bnVzZWQ7Ci0g
ICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKHVudXNlZCksICJjYW4n
dCBnZXQgaW1tZWRpYXRlIGZvciAiLCBvcCwgIiBpbiB1bnJlYWNoYWJsZSBjb250ZXh0Iik7Cisg
ICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKHVudXNlZCksICJjYW4n
dCBnZXQgaW1tZWRpYXRlIGZvciAiLCBtX2N1cnJlbnRPcGNvZGUsICIgaW4gdW5yZWFjaGFibGUg
Y29udGV4dCIpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9wY29kZU9yaWdpbi5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtT3Bjb2RlT3JpZ2luLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMTE4ODJm
NzA2NWVkNzVlYjFhNjE4Y2RmMjk4OGJlNGFkODFjMjdmCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9wY29kZU9yaWdpbi5jcHAKQEAgLTAsMCArMSw0
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXYXNtT3Bjb2RlT3JpZ2luLmgiCisKKyNpZiBFTkFC
TEUoV0VCQVNTRU1CTFkpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK3Zv
aWQgT3Bjb2RlT3JpZ2luOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0
LnByaW50KCJ7b3Bjb2RlOiAiLCBtYWtlU3RyaW5nKG9wY29kZSksICIsIGxvY2F0aW9uOiAiLCBs
b2NhdGlvbiwgIn0iKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlm
IC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21PcGNvZGVPcmlnaW4uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21PcGNvZGVPcmlnaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40YjFkYzA3NmZhMTBkNDcwMzhkNjg1MzEyZDg4
MWIzYjYxOWQxYjE5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU9wY29kZU9yaWdpbi5oCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisj
aW5jbHVkZSAiQjNPcmlnaW4uaCIKKyNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK2NsYXNzIE9wY29kZU9yaWdpbiB7CisgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoT3Bjb2RlT3Jp
Z2luKTsKK3B1YmxpYzoKKyAgICBPcGNvZGVPcmlnaW4oT3BUeXBlIG9wLCBzaXplX3Qgb2Zmc2V0
KQorICAgICAgICA6IG9wY29kZShvcCkKKyAgICAgICAgLCBsb2NhdGlvbihvZmZzZXQpCisgICAg
eworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCisgICAgY29u
c3QgT3BUeXBlIG9wY29kZTsKKyAgICBjb25zdCBzaXplX3QgbG9jYXRpb247Cit9OworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVZhbGlkYXRlLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5jcHAKaW5kZXggNzVkMzgy
NmNhZDIxYjM4OTZlNDFlZWJkYzM3NGZjYWU2NTQ2MTIxNC4uOGFlMjA2MjBmY2FiNWZhMDFjY2Q5
ZmY5YWQ5MTllOGY2NDZiNmViNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbVZhbGlkYXRlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
VmFsaWRhdGUuY3BwCkBAIC0xNDksNiArMTQ5LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHZv
aWQgZHVtcChjb25zdCBWZWN0b3I8Q29udHJvbEVudHJ5PiYsIGNvbnN0IEV4cHJlc3Npb25MaXN0
Kik7CisgICAgdm9pZCBzZXRQYXJzZXIoRnVuY3Rpb25QYXJzZXI8VmFsaWRhdGU+KikgeyB9CiAK
IHByaXZhdGU6CiAgICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiB1bmlmeShjb25zdCBFeHBy
ZXNzaW9uTGlzdCYsIGNvbnN0IENvbnRyb2xEYXRhJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9nZW5lcmF0ZVdhc21CM0lSR2VuZXJhdG9ySW5saW5lc0hlYWRlci5w
eSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2dlbmVyYXRlV2FzbUIzSVJHZW5lcmF0b3JJ
bmxpbmVzSGVhZGVyLnB5CmluZGV4IDU5NmQ4NTk3YWZlNDFjMzdlYjE5NTBmMWYwZmEwYTU4Mjli
OWUwN2EuLjE5YzJmY2M5MTEwMjc4MjM5ZDFjNDI0Yzg4MjA5ZTkyOTE0YmE1MzIgMTAwNzU1Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2dlbmVyYXRlV2FzbUIzSVJHZW5lcmF0b3JJ
bmxpbmVzSGVhZGVyLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2dlbmVyYXRl
V2FzbUIzSVJHZW5lcmF0b3JJbmxpbmVzSGVhZGVyLnB5CkBAIC0xNTksNyArMTU5LDcgQEAgY2xh
c3MgQ29kZUdlbmVyYXRvcjoKICAgICBkZWYgZ2VuZXJhdGUoc2VsZiwgd2FzbU9wKToKICAgICAg
ICAgaWYgbGVuKHNlbGYudG9rZW5zKSA9PSAxOgogICAgICAgICAgICAgcGFyYW1zID0gWyJhcmci
ICsgc3RyKHBhcmFtKSBmb3IgcGFyYW0gaW4gcmFuZ2UobGVuKHdhc21PcFsicGFyYW1ldGVyIl0p
KV0KLSAgICAgICAgICAgIHJldHVybiAiICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8VmFsdWU+KG1fcHJvYywgQjM6OiIgKyBzZWxmLnRva2VuKCkgKyAiLCBPcmlnaW4oKSwg
IiArICIsICIuam9pbihwYXJhbXMpICsgIikiCisgICAgICAgICAgICByZXR1cm4gIiAgICByZXN1
bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEIzOjoiICsgc2Vs
Zi50b2tlbigpICsgIiwgb3JpZ2luKCksICIgKyAiLCAiLmpvaW4ocGFyYW1zKSArICIpIgogICAg
ICAgICByZXN1bHQgPSBzZWxmLmdlbmVyYXRlT3Bjb2RlKCkKICAgICAgICAgc2VsZi5jb2RlLmFw
cGVuZCgicmVzdWx0ID0gIiArIHJlc3VsdCkKICAgICAgICAgcmV0dXJuICIgICAgIiArICIgICAg
XG4iLmpvaW4oc2VsZi5jb2RlKQpAQCAtMTcwLDExICsxNzAsMTEgQEAgZGVmIHRlbXAoaW5kZXgp
OgogCiAKIGRlZiBnZW5lcmF0ZUIzT3BDb2RlKGluZGV4LCBvcCwgcGFyYW1zKToKLSAgICByZXR1
cm4gIlZhbHVlKiAiICsgdGVtcChpbmRleCkgKyAiID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxWYWx1ZT4obV9wcm9jLCBCMzo6IiArIG9wICsgIiwgT3JpZ2luKCksICIgKyAiLCAiLmpvaW4o
cGFyYW1zKSArICIpOyIKKyAgICByZXR1cm4gIlZhbHVlKiAiICsgdGVtcChpbmRleCkgKyAiID0g
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCMzo6IiArIG9wICsgIiwg
b3JpZ2luKCksICIgKyAiLCAiLmpvaW4ocGFyYW1zKSArICIpOyIKIAogCiBkZWYgZ2VuZXJhdGVD
b25zdENvZGUoaW5kZXgsIHZhbHVlLCB0eXBlKToKLSAgICByZXR1cm4gIlZhbHVlKiAiICsgdGVt
cChpbmRleCkgKyAiID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZEludENvbnN0YW50KG1fcHJvYywg
T3JpZ2luKCksIEIzOjoiICsgdHlwZSArICIsICIgKyB2YWx1ZSArICIpOyIKKyAgICByZXR1cm4g
IlZhbHVlKiAiICsgdGVtcChpbmRleCkgKyAiID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZEludENv
bnN0YW50KG1fcHJvYywgb3JpZ2luKCksIEIzOjoiICsgdHlwZSArICIsICIgKyB2YWx1ZSArICIp
OyIKIAogCiBkZWYgZ2VuZXJhdGVCM0NvZGUod2FzbU9wLCBzb3VyY2UpOgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305685</attachid>
            <date>2017-03-28 17:56:39 -0700</date>
            <delta_ts>2017-03-28 21:51:18 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-170217-20170328175638.patch</filename>
            <type>text/plain</type>
            <size>94548</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE0NTA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
MzNhNmNjOTk3NzNjMGQzYWZiNmFhYzNmMDU5NGI5N2VjZjliOThiLi5jMjk3NDQ4NGExMzQ0ZjY0
ZTdiMzIyZjhhMzIwZGYxMGM1ZDI3YjA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
NSArMSw2MCBAQAogMjAxNy0wMy0yOCAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KIAorICAgICAgICBXZWJBc3NlbWJseTogV2Ugc2hvdWxkIGhhdmUgT3JpZ2lucworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwMjE3CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTWFyayBMYW0uCisKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRzIHdh
c20gb3JpZ2lucyBmb3IgQjM6OlZhbHVlcywgY2FsbGVkIE9wY29kZU9yaWdpbi4gQ3VycmVudGx5
LAorICAgICAgICBPcGNvZGVPcmlnaW4ganVzdCB0cmFja3MgdGhlIG9yaWdpbmFsIG9wY29kZSBh
bmQgdGhlIGxvY2F0aW9uIG9mIHRoYXQgb3Bjb2RlLgorCisgICAgICAgIEhlcmUncyBhIHNhbXBs
ZToKKworICAgICAgICBCQiMwOiA7IGZyZXF1ZW5jeSA9IDEuMDAwMDAwCisgICAgICAgICAgICBJ
bnQ2NCBANCA9IFBhdGNocG9pbnQoZ2VuZXJhdG9yID0gMHgxMGY0ODdmYTgsIGVhcmx5Q2xvYmJl
cmVkID0gW10sIGxhdGVDbG9iYmVyZWQgPSBbXSwgdXNlZFJlZ2lzdGVycyA9IFtdLCByZXN1bHRD
b25zdHJhaW50ID0gU29tZVJlZ2lzdGVyKQorICAgICAgICAgICAgSW50NjQgQDUgPSBGcmFtZVBv
aW50ZXIoKQorICAgICAgICAgICAgVm9pZCBAOCA9IFN0b3JlKEA0LCBANSwgb2Zmc2V0ID0gMjQs
IENvbnRyb2xEZXBlbmRlbnR8V3JpdGVzOlRvcCkKKyAgICAgICAgICAgIEludDY0IEAxMCA9IENv
bnN0NjQoMCkKKyAgICAgICAgICAgIFZvaWQgQDEyID0gU3RvcmUoJDAoQDEwKSwgQDUsIG9mZnNl
dCA9IDE2LCBDb250cm9sRGVwZW5kZW50fFdyaXRlczpUb3ApCisgICAgICAgICAgICBJbnQ2NCBA
MTMgPSBQYXRjaHBvaW50KGdlbmVyYXRvciA9IDB4MTBmNGJlN2YwLCBlYXJseUNsb2JiZXJlZCA9
IFtdLCBsYXRlQ2xvYmJlcmVkID0gW10sIHVzZWRSZWdpc3RlcnMgPSBbXSwgcmVzdWx0Q29uc3Ry
YWludCA9IFNvbWVSZWdpc3RlciwgRXhpdHNTaWRld2F5c3xDb250cm9sRGVwZW5kZW50fFdyaXRl
c1Bpbm5lZHxSZWFkc1Bpbm5lZHxGZW5jZXxXcml0ZXM6VG9wfFJlYWRzOlRvcCkKKyAgICAgICAg
ICAgIEludDY0IEAxNiA9IEFyZ3VtZW50UmVnKCVyZGkpCisgICAgICAgICAgICBJbnQ2NCBAMTgg
PSBBcmd1bWVudFJlZyglcnNpKQorICAgICAgICAgICAgSW50MzIgQDIyID0gVHJ1bmMoQDE4LCBX
YXNtOiB7b3Bjb2RlOiBJNjRSb3RsLCBsb2NhdGlvbjogNX0pCisgICAgICAgICAgICBJbnQ2NCBA
MjMgPSBSb3RMKEAxNiwgQDIyLCBXYXNtOiB7b3Bjb2RlOiBJNjRSb3RsLCBsb2NhdGlvbjogNX0p
CisgICAgICAgICAgICBWb2lkIEAyNyA9IFJldHVybihAMjMsIFRlcm1pbmFsLCBXYXNtOiB7b3Bj
b2RlOiBFbmQsIGxvY2F0aW9uOiA2fSkKKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYjMvQjNWYWx1ZS5jcHA6CisgICAgICAg
IChKU0M6OkIzOjpWYWx1ZTo6ZGVlcER1bXApOgorICAgICAgICAqIHdhc20vV2FzbUIzSVJHZW5l
cmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpzZXRQYXJzZXIp
OgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpyZXN0b3JlV2ViQXNzZW1ibHlH
bG9iYWxTdGF0ZSk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmVtaXRDaGVj
a0FuZFByZXBhcmVQb2ludGVyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6
ZW1pdExvYWRPcCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmVtaXRTdG9y
ZU9wKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkQ29uc3RhbnQpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRMb29wKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6dW5pZnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpwYXJz
ZUFuZENvbXBpbGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjplbWl0Q2hl
Y2tzRm9yTW9kT3JEaXYpOgorICAgICAgICAoSlNDOjpXYXNtOjpnZXRNZW1vcnlCYXNlQW5kU2l6
ZSk6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaDoKKyAgICAg
ICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25QYXJzZXI6OmN1cnJlbnRPcGNvZGUpOgorICAgICAgICAo
SlNDOjpXYXNtOjpGdW5jdGlvblBhcnNlcjo6Y3VycmVudE9wY29kZVN0YXJ0aW5nT2Zmc2V0KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OkZ1bmN0aW9uUGFy
c2VyKToKKyAgICAgICAgKiB3YXNtL1dhc21PcGNvZGVPcmlnaW4uY3BwOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6V2FzbTo6T3Bjb2RlT3JpZ2luOjpkdW1wKToKKyAgICAgICAgKiB3YXNtL1dhc21P
cGNvZGVPcmlnaW4uaDogQWRkZWQuCisgICAgICAgIChKU0M6Oldhc206Ok9wY29kZU9yaWdpbjo6
T3Bjb2RlT3JpZ2luKToKKyAgICAgICAgKiB3YXNtL1dhc21WYWxpZGF0ZS5jcHA6CisgICAgICAg
IChKU0M6Oldhc206OlZhbGlkYXRlOjpzZXRQYXJzZXIpOgorICAgICAgICAqIHdhc20vZ2VuZXJh
dGVXYXNtQjNJUkdlbmVyYXRvcklubGluZXNIZWFkZXIucHk6CisgICAgICAgIChDb2RlR2VuZXJh
dG9yLmdlbmVyYXRlKToKKyAgICAgICAgKGdlbmVyYXRlQjNPcENvZGUpOgorICAgICAgICAoZ2Vu
ZXJhdGVDb25zdENvZGUpOgorCisyMDE3LTAzLTI4ICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxs
ZXJAYXBwbGUuY29tPgorCiAgICAgICAgIFdlYkFzc2VtYmx5OiBNYWtlIFdlYkFzc2VtYmx5Lmlu
c3RhbnRpYXRlL2NvbXBpbGUgdHJ1bHkgYXN5bmNocm9ub3VzCiAgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjkxODcKIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2og
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagppbmRleCBmMDA3MGZhZjI5YTMwMmM3MmJiNDBiNzhiNmQzNjZlNGQ4M2VhMzEwLi5h
OGZiOTk5NGZlYmFiMzAwMGJiYTIyYzRhYzQwOTNhYjhjYzI1Y2UwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagpAQCAtMTM1NSw2ICsxMzU1LDggQEAKIAkJNTNCMEJFMzQxRTU2MUFDOTAw
QThGQzI5IC8qIEdldHRlclNldHRlckFjY2Vzc0Nhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNCMEJFMzMxRTU2MUFDOTAwQThGQzI5IC8qIEdl
dHRlclNldHRlckFjY2Vzc0Nhc2UuY3BwICovOyB9OwogCQk1M0IwQkUzNjFFNTYxQjA5MDBBOEZD
MjkgLyogUHJveHlhYmxlQWNjZXNzQ2FzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1M0IwQkUzNTFFNTYxQjA5MDBBOEZDMjkgLyogUHJveHlhYmxl
QWNjZXNzQ2FzZS5jcHAgKi87IH07CiAJCTUzQjBCRTM4MUU1NjFCMjQwMEE4RkMyOSAvKiBJbnRy
aW5zaWNHZXR0ZXJBY2Nlc3NDYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUzQjBCRTM3MUU1NjFCMjQwMEE4RkMyOSAvKiBJbnRyaW5zaWNHZXR0
ZXJBY2Nlc3NDYXNlLmNwcCAqLzsgfTsKKwkJNTNDNkZFRUYxRThBREZBOTAwQjE4NDI1IC8qIFdh
c21PcGNvZGVPcmlnaW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUzQzZGRUVFMUU4QURGQTkwMEIxODQyNSAvKiBXYXNtT3Bjb2RlT3JpZ2luLmggKi87
IH07CisJCTUzQzZGRUYxMUU4QUZFMEMwMEIxODQyNSAvKiBXYXNtT3Bjb2RlT3JpZ2luLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzQzZGRUYwMUU4
QUZFMEMwMEIxODQyNSAvKiBXYXNtT3Bjb2RlT3JpZ2luLmNwcCAqLzsgfTsKIAkJNTNENDQ0REMx
REFGMDhBQjAwQjkyNzg0IC8qIEIzV2FzbUFkZHJlc3NWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNENDQ0REIxREFGMDhBQjAwQjkyNzg0IC8q
IEIzV2FzbUFkZHJlc3NWYWx1ZS5oICovOyB9OwogCQk1M0Q0NDRERTFEQUYwOUEwMDBCOTI3ODQg
LyogQjNXYXNtQWRkcmVzc1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUzRDQ0NEREMURBRjA5QTAwMEI5Mjc4NCAvKiBCM1dhc21BZGRyZXNz
VmFsdWUuY3BwICovOyB9OwogCQk1M0Y0MEU4NTFENThGOTc3MDA5OUExQjYgLyogV2FzbVNlY3Rp
b25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0Y0
MEU4NDFENThGOTc3MDA5OUExQjYgLyogV2FzbVNlY3Rpb25zLmggKi87IH07CkBAIC0zODU0LDYg
KzM4NTYsOCBAQAogCQk1M0IwQkUzMzFFNTYxQUM5MDBBOEZDMjkgLyogR2V0dGVyU2V0dGVyQWNj
ZXNzQ2FzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHZXR0ZXJT
ZXR0ZXJBY2Nlc3NDYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNCMEJF
MzUxRTU2MUIwOTAwQThGQzI5IC8qIFByb3h5YWJsZUFjY2Vzc0Nhc2UuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHJveHlhYmxlQWNjZXNzQ2FzZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzQjBCRTM3MUU1NjFCMjQwMEE4RkMyOSAvKiBJbnRy
aW5zaWNHZXR0ZXJBY2Nlc3NDYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk1M0M2RkVFRTFFOEFERkE5MDBCMTg0MjUgLyogV2FzbU9wY29kZU9yaWdpbi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtT3Bjb2RlT3JpZ2luLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzQzZGRUYwMUU4QUZFMEMwMEIxODQyNSAvKiBX
YXNtT3Bjb2RlT3JpZ2luLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFdhc21PcGNvZGVPcmlnaW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0Q0
NDREQjFEQUYwOEFCMDBCOTI3ODQgLyogQjNXYXNtQWRkcmVzc1ZhbHVlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzV2FzbUFkZHJlc3NWYWx1ZS5oOyBwYXRoID0gYjMvQjNX
YXNtQWRkcmVzc1ZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRDQ0NERE
MURBRjA5QTAwMEI5Mjc4NCAvKiBCM1dhc21BZGRyZXNzVmFsdWUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNXYXNtQWRkcmVzc1ZhbHVlLmNwcDsgcGF0aCA9IGIz
L0IzV2FzbUFkZHJlc3NWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUz
RjI1NkUxMUI4N0UyODAwMEI0Qjc2OCAvKiBKU1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTVHlwZWRBcnJheVZpZXdQcm90
b3R5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjI5Miw2ICs2Mjk2LDgg
QEAKIAkJCQlBREI2RjY3QzFFMTVENzUwMDA4MkYzODQgLyogV2FzbVBhZ2VDb3VudC5jcHAgKi8s
CiAJCQkJNTM4MUI5MzYxRTYwRTk2NjAwOTBGNzk0IC8qIFdhc21GYXVsdFNpZ25hbEhhbmRsZXIu
Y3BwICovLAogCQkJCTUzODFCOTM4MUU2MEU5N0QwMDkwRjc5NCAvKiBXYXNtRmF1bHRTaWduYWxI
YW5kbGVyLmggKi8sCisJCQkJNTNDNkZFRjAxRThBRkUwQzAwQjE4NDI1IC8qIFdhc21PcGNvZGVP
cmlnaW4uY3BwICovLAorCQkJCTUzQzZGRUVFMUU4QURGQTkwMEIxODQyNSAvKiBXYXNtT3Bjb2Rl
T3JpZ2luLmggKi8sCiAJCQkJNzlCNzU5NzMxREZBNEM2MDAwNTIxNzRDIC8qIFdhc21QYWdlQ291
bnQuaCAqLywKIAkJCQk1M0Y0MEU4QzFENTkwMUYyMDA5OUExQjYgLyogV2FzbVBhcnNlci5oICov
LAogCQkJCTUzMTM3NEJFMUQ1Q0U5NTAwMEFGN0EwQiAvKiBXYXNtUGxhbi5jcHAgKi8sCkBAIC04
NjQzLDYgKzg2NDksNyBAQAogCQkJCTBGREIyQ0NBMTczREE1MjMwMDdCM0MxQiAvKiBGVExWYWx1
ZUZyb21CbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1QTYyODQxODhDOThENDAwNzJDOURG
IC8qIEZUTFZhbHVlUmFuZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMDMzMkM2MThCNTNGQTkw
MDVGOTc5QSAvKiBGVExXZWlnaHQuaCBpbiBIZWFkZXJzICovLAorCQkJCTUzQzZGRUVGMUU4QURG
QTkwMEIxODQyNSAvKiBXYXNtT3Bjb2RlT3JpZ2luLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjAz
MzJDODE4QjU0NkVDMDA1Rjk3OUEgLyogRlRMV2VpZ2h0ZWRUYXJnZXQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGNjY2RUMxMTgzNTY2RjkwMEQwMTdGMSAvKiBGdWxsQnl0ZWNvZGVMaXZlbmVzcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMkE4MzYzOEExOEQ3RDBGRTAwMDBFQkNDIC8qIEZ1bGxHQ0Fj
dGl2aXR5Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovLApAQCAtOTkzMSw2ICs5OTM4LDcgQEAKIAkJ
CQkwRkVDODU3NTFCREFDREM3MDA4MEZGNzQgLyogQWlyQ29kZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjYxODMyQjFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ3VzdG9tLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGNDU3MDM4MUJFNDRDOTEwMDYyQTYyOSAvKiBBaXJFbGltaW5hdGVEZWFkQ29k
ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1M0M2RkVGMTFFOEFGRTBDMDBCMTg0MjUgLyogV2Fz
bU9wY29kZU9yaWdpbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjYxODMyQzFDNDVCRjA3MDA3
MjQ1MEIgLyogQWlyRW1pdFNodWZmbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0REUxQ0Ux
QzRDMUI1NDAwNEQ2QzExIC8qIEFpckZpeE9idmlvdXNTcGlsbHMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMjYyRDg1QjYxQzBENjUwRjAwNkFDQjYxIC8qIEFpckZpeFBhcnRpYWxSZWdpc3RlclN0
YWxscy5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1ZhbHVlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmNwcApp
bmRleCA5MzQ4M2VjODc3M2VjYTQ3OTEyNzI4N2MyYWFlN2FhYmU3ZGZjZjg5Li44YzkxMGFhZjQx
YjgyMTJmYzY3NDFhNmQ3NWQ0Y2Q0MWYzOGI3YWQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
VmFsdWUuY3BwCkBAIC0yMjIsOSArMjIyLDYgQEAgdm9pZCBWYWx1ZTo6ZGVlcER1bXAoY29uc3Qg
UHJvY2VkdXJlKiBwcm9jLCBQcmludFN0cmVhbSYgb3V0KSBjb25zdAogICAgIENvbW1hUHJpbnRl
ciBjb21tYTsKICAgICBkdW1wQ2hpbGRyZW4oY29tbWEsIG91dCk7CiAKLSAgICBpZiAobV9vcmln
aW4pCi0gICAgICAgIG91dC5wcmludChjb21tYSwgT3JpZ2luRHVtcChwcm9jLCBtX29yaWdpbikp
OwotCiAgICAgZHVtcE1ldGEoY29tbWEsIG91dCk7CiAKICAgICB7CkBAIC0yMzMsNiArMjMwLDkg
QEAgdm9pZCBWYWx1ZTo6ZGVlcER1bXAoY29uc3QgUHJvY2VkdXJlKiBwcm9jLCBQcmludFN0cmVh
bSYgb3V0KSBjb25zdAogICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBzdHJpbmcpOwogICAg
IH0KIAorICAgIGlmIChtX29yaWdpbikKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCBPcmlnaW5E
dW1wKHByb2MsIG1fb3JpZ2luKSk7CisKICAgICBvdXQucHJpbnQoIikiKTsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCmluZGV4IDg3
ZDlhNDI0N2JlOTNmMzY3MjgwNDM4Mzg0ZTE1OGFkYzMyZjZjMTcuLmMzZmFkZmM5ODc2YThjODYy
MTlmMDQwOTJjZTdiYjkzOTAyZWFjYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKQEAgLTUzLDYgKzUzLDcgQEAKICNpbmNsdWRlICJX
YXNtRXhjZXB0aW9uVHlwZS5oIgogI2luY2x1ZGUgIldhc21GdW5jdGlvblBhcnNlci5oIgogI2lu
Y2x1ZGUgIldhc21NZW1vcnkuaCIKKyNpbmNsdWRlICJXYXNtT3Bjb2RlT3JpZ2luLmgiCiAjaW5j
bHVkZSA8d3RmL09wdGlvbmFsLmg+CiAKIHZvaWQgZHVtcFByb2NlZHVyZSh2b2lkKiBwdHIpCkBA
IC0yMDQsMTQgKzIwNSwxNSBAQCBwdWJsaWM6CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNF
RF9SRVRVUk4gYWRkVW5yZWFjaGFibGUoKTsKIAogICAgIHZvaWQgZHVtcChjb25zdCBWZWN0b3I8
Q29udHJvbEVudHJ5PiYgY29udHJvbFN0YWNrLCBjb25zdCBFeHByZXNzaW9uTGlzdCogZXhwcmVz
c2lvblN0YWNrKTsKKyAgICB2b2lkIHNldFBhcnNlcihGdW5jdGlvblBhcnNlcjxCM0lSR2VuZXJh
dG9yPiogcGFyc2VyKSB7IG1fcGFyc2VyID0gcGFyc2VyOyB9OwogCitwcml2YXRlOgogICAgIHZv
aWQgZW1pdEV4Y2VwdGlvbkNoZWNrKENDYWxsSGVscGVycyYsIEV4Y2VwdGlvblR5cGUpOwogCi1w
cml2YXRlOgogICAgIEV4cHJlc3Npb25UeXBlIGVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVyKEV4
cHJlc3Npb25UeXBlIHBvaW50ZXIsIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3Qgc2l6ZU9mT3Ap
OwogICAgIEIzOjpLaW5kIG1lbW9yeUtpbmQoQjM6Ok9wY29kZSBtZW1vcnlPcCk7Ci0gICAgRXhw
cmVzc2lvblR5cGUgZW1pdExvYWRPcChMb2FkT3BUeXBlLCBPcmlnaW4sIEV4cHJlc3Npb25UeXBl
IHBvaW50ZXIsIHVpbnQzMl90IG9mZnNldCk7Ci0gICAgdm9pZCBlbWl0U3RvcmVPcChTdG9yZU9w
VHlwZSwgT3JpZ2luLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSB2YWx1
ZSwgdWludDMyX3Qgb2Zmc2V0KTsKKyAgICBFeHByZXNzaW9uVHlwZSBlbWl0TG9hZE9wKExvYWRP
cFR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIHVpbnQzMl90IG9mZnNldCk7CisgICAgdm9p
ZCBlbWl0U3RvcmVPcChTdG9yZU9wVHlwZSwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVz
c2lvblR5cGUgdmFsdWUsIHVpbnQzMl90IG9mZnNldCk7CiAKICAgICB2b2lkIHVuaWZ5KFZhcmlh
YmxlKiB0YXJnZXQsIGNvbnN0IEV4cHJlc3Npb25UeXBlIHNvdXJjZSk7CiAgICAgdm9pZCB1bmlm
eVZhbHVlc1dpdGhCbG9jayhjb25zdCBFeHByZXNzaW9uTGlzdCYgcmVzdWx0U3RhY2ssIFJlc3Vs
dExpc3QmIHN0YWNrKTsKQEAgLTIyMywxMyArMjI1LDE3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBy
ZXN0b3JlV2FzbUNvbnRleHQoUHJvY2VkdXJlJiwgQmFzaWNCbG9jayosIFZhbHVlKik7CiAgICAg
dm9pZCByZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZShjb25zdCBNZW1vcnlJbmZvcm1hdGlv
biYsIFZhbHVlKiBpbnN0YW5jZSwgUHJvY2VkdXJlJiwgQmFzaWNCbG9jayopOwogCisgICAgT3Jp
Z2luIG9yaWdpbigpOworCiAgICAgVk0mIG1fdm07CisgICAgRnVuY3Rpb25QYXJzZXI8QjNJUkdl
bmVyYXRvcj4qIG1fcGFyc2VyOwogICAgIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBtX2luZm87
CiAgICAgTWVtb3J5TW9kZSBtX21vZGU7CiAgICAgUHJvY2VkdXJlJiBtX3Byb2M7CiAgICAgQmFz
aWNCbG9jayogbV9jdXJyZW50QmxvY2s7CiAgICAgVmVjdG9yPFZhcmlhYmxlKj4gbV9sb2NhbHM7
CiAgICAgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiBtX3VubGlua2VkV2FzbVRvV2Fz
bUNhbGxzOyAvLyBMaXN0IGVhY2ggY2FsbCBzaXRlIGFuZCB0aGUgZnVuY3Rpb24gaW5kZXggd2hv
c2UgYWRkcmVzcyBpdCBzaG91bGQgYmUgcGF0Y2hlZCB3aXRoLgorICAgIFZlY3RvcjxzdGQ6OnVu
aXF1ZV9wdHI8T3Bjb2RlT3JpZ2luPj4gbV9vcmlnaW5zOwogICAgIEdQUlJlZyBtX21lbW9yeUJh
c2VHUFI7CiAgICAgR1BSUmVnIG1fbWVtb3J5U2l6ZUdQUjsKICAgICBHUFJSZWcgbV93YXNtQ29u
dGV4dEdQUjsKQEAgLTMzOSwyNCArMzQ1LDYgQEAgQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRv
cihWTSYgdm0sIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBQcm9jZWR1cmUmIHAKICAg
ICBtX2luc3RhbmNlVmFsdWUgPSBtYXRlcmlhbGl6ZVdhc21Db250ZXh0KG1fcHJvYywgbV9jdXJy
ZW50QmxvY2spOwogfQogCi1zdHJ1Y3QgTWVtb3J5QmFzZUFuZFNpemUgewotICAgIFZhbHVlKiBi
YXNlOwotICAgIFZhbHVlKiBzaXplOwotfTsKLQotc3RhdGljIE1lbW9yeUJhc2VBbmRTaXplIGdl
dE1lbW9yeUJhc2VBbmRTaXplKFZhbHVlKiBpbnN0YW5jZSwgUHJvY2VkdXJlJiBwcm9jLCBCYXNp
Y0Jsb2NrKiBibG9jaykKLXsKLSAgICBWYWx1ZSogbWVtb3J5T2JqZWN0ID0gYmxvY2stPmFwcGVu
ZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgT3JpZ2luKCksIGlu
c3RhbmNlLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mTWVtb3J5KCkpOwotCi0gICAg
c3RhdGljX2Fzc2VydChzaXplb2YoZGVjbHR5cGUoc3RhdGljX2Nhc3Q8SlNXZWJBc3NlbWJseUlu
c3RhbmNlKj4obnVsbHB0ciktPm1lbW9yeSgpLT5tZW1vcnkoKS5tZW1vcnkoKSkpID09IHNpemVv
Zih2b2lkKiksICJjb2RlZ2VuIHJlbGllcyBvbiB0aGlzIHNpemUiKTsKLSAgICBzdGF0aWNfYXNz
ZXJ0KHNpemVvZihkZWNsdHlwZShzdGF0aWNfY2FzdDxKU1dlYkFzc2VtYmx5SW5zdGFuY2UqPihu
dWxscHRyKS0+bWVtb3J5KCktPm1lbW9yeSgpLnNpemUoKSkpID09IHNpemVvZih1aW50NjRfdCks
ICJjb2RlZ2VuIHJlbGllcyBvbiB0aGlzIHNpemUiKTsKLSAgICBNZW1vcnlCYXNlQW5kU2l6ZSBy
ZXN1bHQ7Ci0gICAgcmVzdWx0LmJhc2UgPSBibG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihw
cm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBPcmlnaW4oKSwgbWVtb3J5T2JqZWN0LCBKU1dlYkFz
c2VtYmx5TWVtb3J5OjpvZmZzZXRPZk1lbW9yeSgpKTsKLSAgICByZXN1bHQuc2l6ZSA9IGJsb2Nr
LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KHByb2MsIExvYWQsIEludDY0LCBPcmlnaW4oKSwgbWVt
b3J5T2JqZWN0LCBKU1dlYkFzc2VtYmx5TWVtb3J5OjpvZmZzZXRPZlNpemUoKSk7Ci0KLSAgICBy
ZXR1cm4gcmVzdWx0OwotfQotCiB2b2lkIEIzSVJHZW5lcmF0b3I6OnJlc3RvcmVXZWJBc3NlbWJs
eUdsb2JhbFN0YXRlKGNvbnN0IE1lbW9yeUluZm9ybWF0aW9uJiBtZW1vcnksIFZhbHVlKiBpbnN0
YW5jZSwgUHJvY2VkdXJlJiBwcm9jLCBCYXNpY0Jsb2NrKiBibG9jaykKIHsKICAgICByZXN0b3Jl
V2FzbUNvbnRleHQocHJvYywgYmxvY2ssIGluc3RhbmNlKTsKQEAgLTM2OCw3ICszNTYsNyBAQCB2
b2lkIEIzSVJHZW5lcmF0b3I6OnJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKGNvbnN0IE1l
bW9yeUluZm9ybWF0aW9uJiBtZW1vcgogICAgICAgICBmb3IgKGF1dG8gaW5mbyA6IHBpbm5lZFJl
Z3MtPnNpemVSZWdpc3RlcnMpCiAgICAgICAgICAgICBjbG9iYmVycy5zZXQoaW5mby5zaXplUmVn
aXN0ZXIpOwogCi0gICAgICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBibG9j
ay0+YXBwZW5kTmV3PEIzOjpQYXRjaHBvaW50VmFsdWU+KHByb2MsIEIzOjpWb2lkLCBPcmlnaW4o
KSk7CisgICAgICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBibG9jay0+YXBw
ZW5kTmV3PEIzOjpQYXRjaHBvaW50VmFsdWU+KHByb2MsIEIzOjpWb2lkLCBvcmlnaW4oKSk7CiAg
ICAgICAgIEVmZmVjdHMgZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKICAgICAgICAgZWZmZWN0
cy53cml0ZXNQaW5uZWQgPSB0cnVlOwogICAgICAgICBlZmZlY3RzLnJlYWRzID0gQjM6OkhlYXBS
YW5nZTo6dG9wKCk7CkBAIC00MTcsNyArNDA1LDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRM
b2NhbChUeXBlIHR5cGUsIHVpbnQzMl90IGNvdW50KSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgZm9y
ICh1aW50MzJfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKICAgICAgICAgVmFyaWFibGUqIGxv
Y2FsID0gbV9wcm9jLmFkZFZhcmlhYmxlKHRvQjNUeXBlKHR5cGUpKTsKICAgICAgICAgbV9sb2Nh
bHMudW5jaGVja2VkQXBwZW5kKGxvY2FsKTsKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxWYXJpYWJsZVZhbHVlPihtX3Byb2MsIFNldCwgT3JpZ2luKCksIGxvY2FsLCB6ZXJvRm9y
VHlwZSh0eXBlKSk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFyaWFibGVW
YWx1ZT4obV9wcm9jLCBTZXQsIG9yaWdpbigpLCBsb2NhbCwgemVyb0ZvclR5cGUodHlwZSkpOwog
ICAgIH0KICAgICByZXR1cm4geyB9OwogfQpAQCAtNDQwLDEzICs0MjgsMTMgQEAgYXV0byBCM0lS
R2VuZXJhdG9yOjphZGRBcmd1bWVudHMoY29uc3QgU2lnbmF0dXJlKiBzaWduYXR1cmUpIC0+IFBh
cnRpYWxSZXN1bHQKIGF1dG8gQjNJUkdlbmVyYXRvcjo6Z2V0TG9jYWwodWludDMyX3QgaW5kZXgs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBBU1NFUlQo
bV9sb2NhbHNbaW5kZXhdKTsKLSAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PFZhcmlhYmxlVmFsdWU+KG1fcHJvYywgQjM6OkdldCwgT3JpZ2luKCksIG1fbG9jYWxzW2luZGV4
XSk7CisgICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVl
PihtX3Byb2MsIEIzOjpHZXQsIG9yaWdpbigpLCBtX2xvY2Fsc1tpbmRleF0pOwogICAgIHJldHVy
biB7IH07CiB9CiAKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkVW5yZWFjaGFibGUoKSAtPiBQYXJ0
aWFsUmVzdWx0CiB7Ci0gICAgQjM6OlBhdGNocG9pbnRWYWx1ZSogdW5yZWFjaGFibGUgPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PEIzOjpQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgQjM6OlZv
aWQsIE9yaWdpbigpKTsKKyAgICBCMzo6UGF0Y2hwb2ludFZhbHVlKiB1bnJlYWNoYWJsZSA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8QjM6OlBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBCMzo6
Vm9pZCwgb3JpZ2luKCkpOwogICAgIHVucmVhY2hhYmxlLT5zZXRHZW5lcmF0b3IoW3RoaXNdIChD
Q2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsK
ICAgICAgICAgdGhpcy0+ZW1pdEV4Y2VwdGlvbkNoZWNrKGppdCwgRXhjZXB0aW9uVHlwZTo6VW5y
ZWFjaGFibGUpOwogICAgIH0pOwpAQCAtNDc0LDkgKzQ2Miw5IEBAIGF1dG8gQjNJUkdlbmVyYXRv
cjo6YWRkR3Jvd01lbW9yeShFeHByZXNzaW9uVHlwZSBkZWx0YSwgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkKICAgICAgICAgcmV0dXJuIHJlc3VsdC5wYWdlQ291bnQoKTsKICAgICB9OwogCi0gICAg
cmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPihtX3Byb2MsIElu
dDMyLCBPcmlnaW4oKSwKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdFB0
clZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KGdyb3dNZW1vcnkp
KSwKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywg
QjM6OkZyYW1lUG9pbnRlciwgT3JpZ2luKCkpLCBtX2luc3RhbmNlVmFsdWUsIGRlbHRhKTsKKyAg
ICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJvYywg
SW50MzIsIG9yaWdpbigpLAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0
UHRyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIGJpdHdpc2VfY2FzdDx2b2lkKj4oZ3Jvd01lbW9y
eSkpLAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9j
LCBCMzo6RnJhbWVQb2ludGVyLCBvcmlnaW4oKSksIG1faW5zdGFuY2VWYWx1ZSwgZGVsdGEpOwog
CiAgICAgcmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUobV9pbmZvLm1lbW9yeSwgbV9pbnN0
YW5jZVZhbHVlLCBtX3Byb2MsIG1fY3VycmVudEJsb2NrKTsKIApAQCAtNDg1LDE0ICs0NzMsMTcg
QEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRHcm93TWVtb3J5KEV4cHJlc3Npb25UeXBlIGRlbHRh
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KQogCiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZEN1cnJl
bnRNZW1vcnkoRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewotICAg
IGF1dG8gbWVtb3J5VmFsdWUgPSBnZXRNZW1vcnlCYXNlQW5kU2l6ZShtX2luc3RhbmNlVmFsdWUs
IG1fcHJvYywgbV9jdXJyZW50QmxvY2spOworICAgIFZhbHVlKiBtZW1vcnlPYmplY3QgPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJU
eXBlKCksIG9yaWdpbigpLCBtX2luc3RhbmNlVmFsdWUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6
b2Zmc2V0T2ZNZW1vcnkoKSk7CiAKKyAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihkZWNsdHlwZShz
dGF0aWNfY2FzdDxKU1dlYkFzc2VtYmx5SW5zdGFuY2UqPihudWxscHRyKS0+bWVtb3J5KCktPm1l
bW9yeSgpLnNpemUoKSkpID09IHNpemVvZih1aW50NjRfdCksICJjb2RlZ2VuIHJlbGllcyBvbiB0
aGlzIHNpemUiKTsKKyAgICBWYWx1ZSogc2l6ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgSW50NjQsIG9yaWdpbigpLCBtZW1vcnlPYmplY3Qs
IEpTV2ViQXNzZW1ibHlNZW1vcnk6Om9mZnNldE9mU2l6ZSgpKTsKKyAgICAKICAgICBjb25zdGV4
cHIgdWludDMyX3Qgc2hpZnRWYWx1ZSA9IDE2OwogICAgIHN0YXRpY19hc3NlcnQoUGFnZUNvdW50
OjpwYWdlU2l6ZSA9PSAxIDw8IHNoaWZ0VmFsdWUsICJUaGlzIG11c3QgaG9sZCBmb3IgdGhlIGNv
ZGUgYmVsb3cgdG8gYmUgY29ycmVjdC4iKTsKLSAgICBWYWx1ZSogbnVtUGFnZXMgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIFpTaHIsIE9yaWdpbigpLAotICAgICAg
ICBtZW1vcnlWYWx1ZS5zaXplLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1
ZT4obV9wcm9jLCBPcmlnaW4oKSwgc2hpZnRWYWx1ZSkpOworICAgIFZhbHVlKiBudW1QYWdlcyA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgWlNociwgb3JpZ2luKCks
CisgICAgICAgIHNpemUsIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPiht
X3Byb2MsIG9yaWdpbigpLCBzaGlmdFZhbHVlKSk7CiAKLSAgICByZXN1bHQgPSBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIFRydW5jLCBPcmlnaW4oKSwgbnVtUGFnZXMp
OworICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywg
VHJ1bmMsIG9yaWdpbigpLCBudW1QYWdlcyk7CiAKICAgICByZXR1cm4geyB9OwogfQpAQCAtNTAw
LDIyICs0OTEsMjIgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDdXJyZW50TWVtb3J5KEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIGF1dG8gQjNJUkdlbmVyYXRvcjo6
c2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKSAtPiBQYXJ0aWFs
UmVzdWx0CiB7CiAgICAgQVNTRVJUKG1fbG9jYWxzW2luZGV4XSk7Ci0gICAgbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihtX3Byb2MsIEIzOjpTZXQsIE9yaWdpbigpLCBt
X2xvY2Fsc1tpbmRleF0sIHZhbHVlKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZh
cmlhYmxlVmFsdWU+KG1fcHJvYywgQjM6OlNldCwgb3JpZ2luKCksIG1fbG9jYWxzW2luZGV4XSwg
dmFsdWUpOwogICAgIHJldHVybiB7IH07CiB9CiAKIGF1dG8gQjNJUkdlbmVyYXRvcjo6Z2V0R2xv
YmFsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0CiB7Ci0gICAgVmFsdWUqIGdsb2JhbHNBcnJheSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgT3JpZ2luKCksIG1f
aW5zdGFuY2VWYWx1ZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkdsb2JhbHMoKSk7
Ci0gICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9w
cm9jLCBMb2FkLCB0b0IzVHlwZShtX2luZm8uZ2xvYmFsc1tpbmRleF0udHlwZSksIE9yaWdpbigp
LCBnbG9iYWxzQXJyYXksIGluZGV4ICogc2l6ZW9mKFJlZ2lzdGVyKSk7CisgICAgVmFsdWUqIGds
b2JhbHNBcnJheSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJv
YywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIG1faW5zdGFuY2VWYWx1ZSwgSlNXZWJB
c3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkdsb2JhbHMoKSk7CisgICAgcmVzdWx0ID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCB0b0IzVHlwZSht
X2luZm8uZ2xvYmFsc1tpbmRleF0udHlwZSksIG9yaWdpbigpLCBnbG9iYWxzQXJyYXksIGluZGV4
ICogc2l6ZW9mKFJlZ2lzdGVyKSk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAogYXV0byBCM0lSR2Vu
ZXJhdG9yOjpzZXRHbG9iYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKSAt
PiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgQVNTRVJUKHRvQjNUeXBlKG1faW5mby5nbG9iYWxzW2lu
ZGV4XS50eXBlKSA9PSB2YWx1ZS0+dHlwZSgpKTsKLSAgICBWYWx1ZSogZ2xvYmFsc0FycmF5ID0g
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2lu
dGVyVHlwZSgpLCBPcmlnaW4oKSwgbV9pbnN0YW5jZVZhbHVlLCBKU1dlYkFzc2VtYmx5SW5zdGFu
Y2U6Om9mZnNldE9mR2xvYmFscygpKTsKLSAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1l
bW9yeVZhbHVlPihtX3Byb2MsIFN0b3JlLCBPcmlnaW4oKSwgdmFsdWUsIGdsb2JhbHNBcnJheSwg
aW5kZXggKiBzaXplb2YoUmVnaXN0ZXIpKTsKKyAgICBWYWx1ZSogZ2xvYmFsc0FycmF5ID0gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVy
VHlwZSgpLCBvcmlnaW4oKSwgbV9pbnN0YW5jZVZhbHVlLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6
Om9mZnNldE9mR2xvYmFscygpKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9y
eVZhbHVlPihtX3Byb2MsIFN0b3JlLCBvcmlnaW4oKSwgdmFsdWUsIGdsb2JhbHNBcnJheSwgaW5k
ZXggKiBzaXplb2YoUmVnaXN0ZXIpKTsKICAgICByZXR1cm4geyB9OwogfQogCkBAIC01MjUsMTAg
KzUxNiwxMCBAQCBpbmxpbmUgVmFsdWUqIEIzSVJHZW5lcmF0b3I6OmVtaXRDaGVja0FuZFByZXBh
cmVQb2ludGVyKEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsCiAgICAgaWYgKG1fbW9kZSA9PSBNZW1v
cnlNb2RlOjpCb3VuZHNDaGVja2luZykgewogICAgICAgICBBU1NFUlQobV9tZW1vcnlTaXplR1BS
KTsKICAgICAgICAgQVNTRVJUKHNpemVPZk9wZXJhdGlvbiArIG9mZnNldCA+IG9mZnNldCk7Ci0g
ICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8V2FzbUJvdW5kc0NoZWNrVmFsdWU+KG1f
cHJvYywgT3JpZ2luKCksIHBvaW50ZXIsIG1fbWVtb3J5U2l6ZUdQUiwgc2l6ZU9mT3BlcmF0aW9u
ICsgb2Zmc2V0IC0gMSk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8V2FzbUJv
dW5kc0NoZWNrVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHBvaW50ZXIsIG1fbWVtb3J5U2l6ZUdQ
Uiwgc2l6ZU9mT3BlcmF0aW9uICsgb2Zmc2V0IC0gMSk7CiAgICAgfQotICAgIHBvaW50ZXIgPSBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIFpFeHQzMiwgT3JpZ2luKCks
IHBvaW50ZXIpOwotICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFdhc21BZGRy
ZXNzVmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIHBvaW50ZXIsIG1fbWVtb3J5QmFzZUdQUik7Cisg
ICAgcG9pbnRlciA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgWkV4
dDMyLCBvcmlnaW4oKSwgcG9pbnRlcik7CisgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8V2FzbUFkZHJlc3NWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgcG9pbnRlciwgbV9tZW1v
cnlCYXNlR1BSKTsKIH0KIAogaW5saW5lIHVpbnQzMl90IHNpemVPZkxvYWRPcChMb2FkT3BUeXBl
IG9wKQpAQCAtNTYzLDc0ICs1NTQsNzQgQEAgaW5saW5lIEIzOjpLaW5kIEIzSVJHZW5lcmF0b3I6
Om1lbW9yeUtpbmQoQjM6Ok9wY29kZSBtZW1vcnlPcCkKICAgICByZXR1cm4gbWVtb3J5T3A7CiB9
CiAKLWlubGluZSBWYWx1ZSogQjNJUkdlbmVyYXRvcjo6ZW1pdExvYWRPcChMb2FkT3BUeXBlIG9w
LCBPcmlnaW4gb3JpZ2luLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCB1aW50MzJfdCBvZmZzZXQp
CitpbmxpbmUgVmFsdWUqIEIzSVJHZW5lcmF0b3I6OmVtaXRMb2FkT3AoTG9hZE9wVHlwZSBvcCwg
RXhwcmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMyX3Qgb2Zmc2V0KQogewogICAgIHN3aXRjaCAo
b3ApIHsKICAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQ4UzogewotICAgICAgICByZXR1cm4g
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBtZW1vcnlLaW5k
KExvYWQ4UyksIG9yaWdpbiwgcG9pbnRlciwgb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgbWVtb3J5S2luZChMb2Fk
OFMpLCBvcmlnaW4oKSwgcG9pbnRlciwgb2Zmc2V0KTsKICAgICB9CiAKICAgICBjYXNlIExvYWRP
cFR5cGU6Okk2NExvYWQ4UzogewotICAgICAgICBWYWx1ZSogdmFsdWUgPSBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIG1lbW9yeUtpbmQoTG9hZDhTKSwgb3Jp
Z2luLCBwb2ludGVyLCBvZmZzZXQpOwotICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBTRXh0MzIsIG9yaWdpbiwgdmFsdWUpOworICAgICAgICBW
YWx1ZSogdmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3By
b2MsIG1lbW9yeUtpbmQoTG9hZDhTKSwgb3JpZ2luKCksIHBvaW50ZXIsIG9mZnNldCk7CisgICAg
ICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIFNFeHQz
Miwgb3JpZ2luKCksIHZhbHVlKTsKICAgICB9CiAKICAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxv
YWQ4VTogewotICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlW
YWx1ZT4obV9wcm9jLCBtZW1vcnlLaW5kKExvYWQ4WiksIG9yaWdpbiwgcG9pbnRlciwgb2Zmc2V0
KTsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+
KG1fcHJvYywgbWVtb3J5S2luZChMb2FkOFopLCBvcmlnaW4oKSwgcG9pbnRlciwgb2Zmc2V0KTsK
ICAgICB9CiAKICAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQ4VTogewotICAgICAgICBWYWx1
ZSogdmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2Ms
IG1lbW9yeUtpbmQoTG9hZDhaKSwgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQpOwotICAgICAgICBy
ZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBaRXh0MzIsIG9y
aWdpbiwgdmFsdWUpOworICAgICAgICBWYWx1ZSogdmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIG1lbW9yeUtpbmQoTG9hZDhaKSwgb3JpZ2luKCks
IHBvaW50ZXIsIG9mZnNldCk7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFZhbHVlPihtX3Byb2MsIFpFeHQzMiwgb3JpZ2luKCksIHZhbHVlKTsKICAgICB9CiAKICAg
ICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQxNlM6IHsKLSAgICAgICAgcmV0dXJuIG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgbWVtb3J5S2luZChMb2FkMTZT
KSwgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBtZW1vcnlLaW5kKExvYWQxNlMpLCBv
cmlnaW4oKSwgcG9pbnRlciwgb2Zmc2V0KTsKICAgICB9CiAgICAgY2FzZSBMb2FkT3BUeXBlOjpJ
NjRMb2FkMTZTOiB7Ci0gICAgICAgIFZhbHVlKiB2YWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgbWVtb3J5S2luZChMb2FkMTZTKSwgb3JpZ2luLCBw
b2ludGVyLCBvZmZzZXQpOwotICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxWYWx1ZT4obV9wcm9jLCBTRXh0MzIsIG9yaWdpbiwgdmFsdWUpOworICAgICAgICBWYWx1ZSog
dmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIG1l
bW9yeUtpbmQoTG9hZDE2UyksIG9yaWdpbigpLCBwb2ludGVyLCBvZmZzZXQpOworICAgICAgICBy
ZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBTRXh0MzIsIG9y
aWdpbigpLCB2YWx1ZSk7CiAgICAgfQogCiAgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkOiB7
Ci0gICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPiht
X3Byb2MsIG1lbW9yeUtpbmQoTG9hZCksIEludDMyLCBvcmlnaW4sIHBvaW50ZXIsIG9mZnNldCk7
CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPiht
X3Byb2MsIG1lbW9yeUtpbmQoTG9hZCksIEludDMyLCBvcmlnaW4oKSwgcG9pbnRlciwgb2Zmc2V0
KTsKICAgICB9CiAKICAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQzMlU6IHsKLSAgICAgICAg
VmFsdWUqIHZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9w
cm9jLCBtZW1vcnlLaW5kKExvYWQpLCBJbnQzMiwgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQpOwot
ICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBa
RXh0MzIsIG9yaWdpbiwgdmFsdWUpOworICAgICAgICBWYWx1ZSogdmFsdWUgPSBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIG1lbW9yeUtpbmQoTG9hZCksIElu
dDMyLCBvcmlnaW4oKSwgcG9pbnRlciwgb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgWkV4dDMyLCBvcmlnaW4oKSwgdmFsdWUp
OwogICAgIH0KIAogICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDMyUzogewotICAgICAgICBW
YWx1ZSogdmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3By
b2MsIG1lbW9yeUtpbmQoTG9hZCksIEludDMyLCBvcmlnaW4sIHBvaW50ZXIsIG9mZnNldCk7Ci0g
ICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIFNF
eHQzMiwgb3JpZ2luLCB2YWx1ZSk7CisgICAgICAgIFZhbHVlKiB2YWx1ZSA9IG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgbWVtb3J5S2luZChMb2FkKSwgSW50
MzIsIG9yaWdpbigpLCBwb2ludGVyLCBvZmZzZXQpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBTRXh0MzIsIG9yaWdpbigpLCB2YWx1ZSk7
CiAgICAgfQogCiAgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkOiB7Ci0gICAgICAgIHJldHVy
biBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIG1lbW9yeUtp
bmQoTG9hZCksIEludDY0LCBvcmlnaW4sIHBvaW50ZXIsIG9mZnNldCk7CisgICAgICAgIHJldHVy
biBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIG1lbW9yeUtp
bmQoTG9hZCksIEludDY0LCBvcmlnaW4oKSwgcG9pbnRlciwgb2Zmc2V0KTsKICAgICB9CiAKICAg
ICBjYXNlIExvYWRPcFR5cGU6OkYzMkxvYWQ6IHsKLSAgICAgICAgcmV0dXJuIG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgbWVtb3J5S2luZChMb2FkKSwgRmxv
YXQsIG9yaWdpbiwgcG9pbnRlciwgb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgbWVtb3J5S2luZChMb2FkKSwgRmxv
YXQsIG9yaWdpbigpLCBwb2ludGVyLCBvZmZzZXQpOwogICAgIH0KIAogICAgIGNhc2UgTG9hZE9w
VHlwZTo6RjY0TG9hZDogewotICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBtZW1vcnlLaW5kKExvYWQpLCBEb3VibGUsIG9yaWdpbiwg
cG9pbnRlciwgb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgbWVtb3J5S2luZChMb2FkKSwgRG91YmxlLCBvcmlnaW4o
KSwgcG9pbnRlciwgb2Zmc2V0KTsKICAgICB9CiAKICAgICAvLyBGSVhNRTogQjMgZG9lc24ndCBz
dXBwb3J0IExvYWQxNlogeWV0LiBXZSBzaG91bGQgbG93ZXIgdG8gdGhhdCB2YWx1ZSB3aGVuCiAg
ICAgLy8gaXQncyBhZGRlZC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2NTg4NAogICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDE2VTogewotICAgICAgICBWYWx1
ZSogdmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2Ms
IG1lbW9yeUtpbmQoTG9hZDE2UyksIG9yaWdpbiwgcG9pbnRlciwgb2Zmc2V0KTsKLSAgICAgICAg
cmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQml0QW5kLCBP
cmlnaW4oKSwgdmFsdWUsCi0gICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxDb25zdDMyVmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIDB4MDAwMGZmZmYpKTsKKyAgICAgICAg
VmFsdWUqIHZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9w
cm9jLCBtZW1vcnlLaW5kKExvYWQxNlMpLCBvcmlnaW4oKSwgcG9pbnRlciwgb2Zmc2V0KTsKKyAg
ICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQml0
QW5kLCBvcmlnaW4oKSwgdmFsdWUsCisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgMHgwMDAwZmZmZikpOwogICAgIH0K
ICAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQxNlU6IHsKLSAgICAgICAgVmFsdWUqIHZhbHVl
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBtZW1vcnlL
aW5kKExvYWQxNlMpLCBvcmlnaW4sIHBvaW50ZXIsIG9mZnNldCk7Ci0gICAgICAgIFZhbHVlKiBw
YXJ0aWFsUmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBC
aXRBbmQsIE9yaWdpbigpLCB2YWx1ZSwKLSAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwgMHgwMDAwZmZmZikpOwor
ICAgICAgICBWYWx1ZSogdmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZh
bHVlPihtX3Byb2MsIG1lbW9yeUtpbmQoTG9hZDE2UyksIG9yaWdpbigpLCBwb2ludGVyLCBvZmZz
ZXQpOworICAgICAgICBWYWx1ZSogcGFydGlhbFJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8VmFsdWU+KG1fcHJvYywgQml0QW5kLCBvcmlnaW4oKSwgdmFsdWUsCisgICAgICAgICAg
ICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4o
KSwgMHgwMDAwZmZmZikpOwogCi0gICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFZhbHVlPihtX3Byb2MsIFpFeHQzMiwgT3JpZ2luKCksIHBhcnRpYWxSZXN1bHQpOworICAg
ICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBaRXh0
MzIsIG9yaWdpbigpLCBwYXJ0aWFsUmVzdWx0KTsKICAgICB9CiAgICAgfQogICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC02NDMsNyArNjM0LDcgQEAgYXV0byBCM0lSR2VuZXJh
dG9yOjpsb2FkKExvYWRPcFR5cGUgb3AsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Np
b25UeXBlJgogICAgIGlmIChVTkxJS0VMWShzdW1PdmVyZmxvd3M8dWludDMyX3Q+KG9mZnNldCwg
c2l6ZU9mTG9hZE9wKG9wKSkpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBFdmVuIHRob3VnaCB0aGlz
IGlzIHByb3ZhYmx5IG91dCBvZiBib3VuZHMsIGl0J3Mgbm90IGEgdmFsaWRhdGlvbiBlcnJvciwg
c28gd2UgaGF2ZSB0byBoYW5kbGUgaXQKICAgICAgICAgLy8gYXMgYSBydW50aW1lIGV4Y2VwdGlv
bi4gSG93ZXZlciwgdGhpcyBtYXkgY2hhbmdlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTY2NDM1Ci0gICAgICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIHRocm93RXhj
ZXB0aW9uID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxCMzo6UGF0Y2hwb2ludFZhbHVlPiht
X3Byb2MsIEIzOjpWb2lkLCBPcmlnaW4oKSk7CisgICAgICAgIEIzOjpQYXRjaHBvaW50VmFsdWUq
IHRocm93RXhjZXB0aW9uID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxCMzo6UGF0Y2hwb2lu
dFZhbHVlPihtX3Byb2MsIEIzOjpWb2lkLCBvcmlnaW4oKSk7CiAgICAgICAgIHRocm93RXhjZXB0
aW9uLT5zZXRHZW5lcmF0b3IoW3RoaXNdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0
YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKICAgICAgICAgICAgIHRoaXMtPmVtaXRFeGNlcHRp
b25DaGVjayhqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzTWVtb3J5QWNjZXNzKTsKICAg
ICAgICAgfSk7CkBAIC02NzQsNyArNjY1LDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjpsb2FkKExv
YWRPcFR5cGUgb3AsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlJgogICAg
ICAgICB9CiAKICAgICB9IGVsc2UKLSAgICAgICAgcmVzdWx0ID0gZW1pdExvYWRPcChvcCwgT3Jp
Z2luKCksIGVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVyKHBvaW50ZXIsIG9mZnNldCwgc2l6ZU9m
TG9hZE9wKG9wKSksIG9mZnNldCk7CisgICAgICAgIHJlc3VsdCA9IGVtaXRMb2FkT3Aob3AsIGVt
aXRDaGVja0FuZFByZXBhcmVQb2ludGVyKHBvaW50ZXIsIG9mZnNldCwgc2l6ZU9mTG9hZE9wKG9w
KSksIG9mZnNldCk7CiAKICAgICByZXR1cm4geyB9OwogfQpAQCAtNzAwLDM0ICs2OTEsMzQgQEAg
aW5saW5lIHVpbnQzMl90IHNpemVPZlN0b3JlT3AoU3RvcmVPcFR5cGUgb3ApCiB9CiAKIAotaW5s
aW5lIHZvaWQgQjNJUkdlbmVyYXRvcjo6ZW1pdFN0b3JlT3AoU3RvcmVPcFR5cGUgb3AsIE9yaWdp
biBvcmlnaW4sIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCB1
aW50MzJfdCBvZmZzZXQpCitpbmxpbmUgdm9pZCBCM0lSR2VuZXJhdG9yOjplbWl0U3RvcmVPcChT
dG9yZU9wVHlwZSBvcCwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUgdmFs
dWUsIHVpbnQzMl90IG9mZnNldCkKIHsKICAgICBzd2l0Y2ggKG9wKSB7CiAgICAgY2FzZSBTdG9y
ZU9wVHlwZTo6STY0U3RvcmU4OgotICAgICAgICB2YWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8VmFsdWU+KG1fcHJvYywgVHJ1bmMsIG9yaWdpbiwgdmFsdWUpOworICAgICAgICB2YWx1
ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgVHJ1bmMsIG9yaWdp
bigpLCB2YWx1ZSk7CiAgICAgICAgIEZBTExUSFJPVUdIOwogCiAgICAgY2FzZSBTdG9yZU9wVHlw
ZTo6STMyU3RvcmU4OgotICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZh
bHVlPihtX3Byb2MsIG1lbW9yeUtpbmQoU3RvcmU4KSwgb3JpZ2luLCB2YWx1ZSwgcG9pbnRlciwg
b2Zmc2V0KTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4o
bV9wcm9jLCBtZW1vcnlLaW5kKFN0b3JlOCksIG9yaWdpbigpLCB2YWx1ZSwgcG9pbnRlciwgb2Zm
c2V0KTsKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2FzZSBTdG9yZU9wVHlwZTo6STY0U3RvcmUx
NjoKLSAgICAgICAgdmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3By
b2MsIFRydW5jLCBvcmlnaW4sIHZhbHVlKTsKKyAgICAgICAgdmFsdWUgPSBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIFRydW5jLCBvcmlnaW4oKSwgdmFsdWUpOwogICAg
ICAgICBGQUxMVEhST1VHSDsKIAogICAgIGNhc2UgU3RvcmVPcFR5cGU6OkkzMlN0b3JlMTY6Ci0g
ICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgbWVt
b3J5S2luZChTdG9yZTE2KSwgb3JpZ2luLCB2YWx1ZSwgcG9pbnRlciwgb2Zmc2V0KTsKKyAgICAg
ICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBtZW1vcnlL
aW5kKFN0b3JlMTYpLCBvcmlnaW4oKSwgdmFsdWUsIHBvaW50ZXIsIG9mZnNldCk7CiAgICAgICAg
IHJldHVybjsKIAogICAgIGNhc2UgU3RvcmVPcFR5cGU6Okk2NFN0b3JlMzI6Ci0gICAgICAgIHZh
bHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBUcnVuYywgb3Jp
Z2luLCB2YWx1ZSk7CisgICAgICAgIHZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxW
YWx1ZT4obV9wcm9jLCBUcnVuYywgb3JpZ2luKCksIHZhbHVlKTsKICAgICAgICAgRkFMTFRIUk9V
R0g7CiAKICAgICBjYXNlIFN0b3JlT3BUeXBlOjpJNjRTdG9yZToKICAgICBjYXNlIFN0b3JlT3BU
eXBlOjpJMzJTdG9yZToKICAgICBjYXNlIFN0b3JlT3BUeXBlOjpGMzJTdG9yZToKICAgICBjYXNl
IFN0b3JlT3BUeXBlOjpGNjRTdG9yZToKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBtZW1vcnlLaW5kKFN0b3JlKSwgb3JpZ2luLCB2YWx1ZSwg
cG9pbnRlciwgb2Zmc2V0KTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1v
cnlWYWx1ZT4obV9wcm9jLCBtZW1vcnlLaW5kKFN0b3JlKSwgb3JpZ2luKCksIHZhbHVlLCBwb2lu
dGVyLCBvZmZzZXQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CkBAIC03NDAsMTkgKzczMSwxOSBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6
OnN0b3JlKFN0b3JlT3BUeXBlIG9wLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9u
VHlwZQogICAgIGlmIChVTkxJS0VMWShzdW1PdmVyZmxvd3M8dWludDMyX3Q+KG9mZnNldCwgc2l6
ZU9mU3RvcmVPcChvcCkpKSkgewogICAgICAgICAvLyBGSVhNRTogRXZlbiB0aG91Z2ggdGhpcyBp
cyBwcm92YWJseSBvdXQgb2YgYm91bmRzLCBpdCdzIG5vdCBhIHZhbGlkYXRpb24gZXJyb3IsIHNv
IHdlIGhhdmUgdG8gaGFuZGxlIGl0CiAgICAgICAgIC8vIGFzIGEgcnVudGltZSBleGNlcHRpb24u
IEhvd2V2ZXIsIHRoaXMgbWF5IGNoYW5nZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2NjQzNQotICAgICAgICBCMzo6UGF0Y2hwb2ludFZhbHVlKiB0aHJvd0V4Y2Vw
dGlvbiA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8QjM6OlBhdGNocG9pbnRWYWx1ZT4obV9w
cm9jLCBCMzo6Vm9pZCwgT3JpZ2luKCkpOworICAgICAgICBCMzo6UGF0Y2hwb2ludFZhbHVlKiB0
aHJvd0V4Y2VwdGlvbiA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8QjM6OlBhdGNocG9pbnRW
YWx1ZT4obV9wcm9jLCBCMzo6Vm9pZCwgb3JpZ2luKCkpOwogICAgICAgICB0aHJvd0V4Y2VwdGlv
bi0+c2V0R2VuZXJhdG9yKFt0aGlzXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFj
a21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CiAgICAgICAgICAgICB0aGlzLT5lbWl0RXhjZXB0aW9u
Q2hlY2soaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc01lbW9yeUFjY2Vzcyk7CiAgICAg
ICAgIH0pOwogICAgIH0gZWxzZQotICAgICAgICBlbWl0U3RvcmVPcChvcCwgT3JpZ2luKCksIGVt
aXRDaGVja0FuZFByZXBhcmVQb2ludGVyKHBvaW50ZXIsIG9mZnNldCwgc2l6ZU9mU3RvcmVPcChv
cCkpLCB2YWx1ZSwgb2Zmc2V0KTsKKyAgICAgICAgZW1pdFN0b3JlT3Aob3AsIGVtaXRDaGVja0Fu
ZFByZXBhcmVQb2ludGVyKHBvaW50ZXIsIG9mZnNldCwgc2l6ZU9mU3RvcmVPcChvcCkpLCB2YWx1
ZSwgb2Zmc2V0KTsKIAogICAgIHJldHVybiB7IH07CiB9CiAKIGF1dG8gQjNJUkdlbmVyYXRvcjo6
YWRkU2VsZWN0KEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgRXhwcmVzc2lvblR5cGUgbm9uWmVy
bywgRXhwcmVzc2lvblR5cGUgemVybywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAogewotICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+
KG1fcHJvYywgQjM6OlNlbGVjdCwgT3JpZ2luKCksIGNvbmRpdGlvbiwgbm9uWmVybywgemVybyk7
CisgICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBC
Mzo6U2VsZWN0LCBvcmlnaW4oKSwgY29uZGl0aW9uLCBub25aZXJvLCB6ZXJvKTsKICAgICByZXR1
cm4geyB9OwogfQogCkBAIC03NjAsMTMgKzc1MSwxMyBAQCBCM0lSR2VuZXJhdG9yOjpFeHByZXNz
aW9uVHlwZSBCM0lSR2VuZXJhdG9yOjphZGRDb25zdGFudChUeXBlIHR5cGUsIHVpbnQ2NF90IHZh
bAogewogICAgIHN3aXRjaCAodHlwZSkgewogICAgIGNhc2UgV2FzbTo6STMyOgotICAgICAgICBy
ZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywgT3Jp
Z2luKCksIHN0YXRpY19jYXN0PGludDMyX3Q+KHZhbHVlKSk7CisgICAgICAgIHJldHVybiBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgc3Rh
dGljX2Nhc3Q8aW50MzJfdD4odmFsdWUpKTsKICAgICBjYXNlIFdhc206Okk2NDoKLSAgICAgICAg
cmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihtX3Byb2MsIE9y
aWdpbigpLCB2YWx1ZSk7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PENvbnN0NjRWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdmFsdWUpOwogICAgIGNhc2UgV2FzbTo6
RjMyOgotICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdEZsb2F0
VmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIGJpdHdpc2VfY2FzdDxmbG9hdD4oc3RhdGljX2Nhc3Q8
aW50MzJfdD4odmFsdWUpKSk7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PENvbnN0RmxvYXRWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgYml0d2lzZV9jYXN0PGZsb2F0
PihzdGF0aWNfY2FzdDxpbnQzMl90Pih2YWx1ZSkpKTsKICAgICBjYXNlIFdhc206OkY2NDoKLSAg
ICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3REb3VibGVWYWx1ZT4o
bV9wcm9jLCBPcmlnaW4oKSwgYml0d2lzZV9jYXN0PGRvdWJsZT4odmFsdWUpKTsKKyAgICAgICAg
cmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3REb3VibGVWYWx1ZT4obV9wcm9j
LCBvcmlnaW4oKSwgYml0d2lzZV9jYXN0PGRvdWJsZT4odmFsdWUpKTsKICAgICBjYXNlIFdhc206
OlZvaWQ6CiAgICAgY2FzZSBXYXNtOjpGdW5jOgogICAgIGNhc2UgV2FzbTo6QW55ZnVuYzoKQEAg
LTc5MCw3ICs3ODEsNyBAQCBCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0YSBCM0lSR2VuZXJhdG9y
OjphZGRMb29wKFR5cGUgc2lnbmF0dXJlKQogewogICAgIEJhc2ljQmxvY2sqIGJvZHkgPSBtX3By
b2MuYWRkQmxvY2soKTsKICAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX3Byb2MuYWRk
QmxvY2soKTsKLSAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJv
YywgSnVtcCwgT3JpZ2luKCksIGJvZHkpOworICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXdD
b250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBvcmlnaW4oKSwgYm9keSk7CiAgICAgYm9keS0+YWRk
UHJlZGVjZXNzb3IobV9jdXJyZW50QmxvY2spOwogICAgIG1fY3VycmVudEJsb2NrID0gYm9keTsK
ICAgICByZXR1cm4gQ29udHJvbERhdGEobV9wcm9jLCBzaWduYXR1cmUsIEJsb2NrVHlwZTo6TG9v
cCwgY29udGludWF0aW9uLCBib2R5KTsKQEAgLTgwNCw3ICs3OTUsNyBAQCBhdXRvIEIzSVJHZW5l
cmF0b3I6OmFkZElmKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgVHlwZSBzaWduYXR1cmUsIENv
bnRyb2xUeXBlJgogICAgIEJhc2ljQmxvY2sqIG5vdFRha2VuID0gbV9wcm9jLmFkZEJsb2NrKCk7
CiAgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9wcm9jLmFkZEJsb2NrKCk7CiAKLSAg
ICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEIzOjpCcmFuY2gsIE9y
aWdpbigpLCBjb25kaXRpb24pOworICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+
KG1fcHJvYywgQjM6OkJyYW5jaCwgb3JpZ2luKCksIGNvbmRpdGlvbik7CiAgICAgbV9jdXJyZW50
QmxvY2stPnNldFN1Y2Nlc3NvcnMoRnJlcXVlbnRlZEJsb2NrKHRha2VuKSwgRnJlcXVlbnRlZEJs
b2NrKG5vdFRha2VuKSk7CiAgICAgdGFrZW4tPmFkZFByZWRlY2Vzc29yKG1fY3VycmVudEJsb2Nr
KTsKICAgICBub3RUYWtlbi0+YWRkUHJlZGVjZXNzb3IobV9jdXJyZW50QmxvY2spOwpAQCAtODE3
LDcgKzgwOCw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkSWYoRXhwcmVzc2lvblR5cGUgY29u
ZGl0aW9uLCBUeXBlIHNpZ25hdHVyZSwgQ29udHJvbFR5cGUmCiBhdXRvIEIzSVJHZW5lcmF0b3I6
OmFkZEVsc2UoQ29udHJvbERhdGEmIGRhdGEsIGNvbnN0IEV4cHJlc3Npb25MaXN0JiBjdXJyZW50
U3RhY2spIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhjdXJy
ZW50U3RhY2ssIGRhdGEucmVzdWx0KTsKLSAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3Q29u
dHJvbFZhbHVlKG1fcHJvYywgSnVtcCwgT3JpZ2luKCksIGRhdGEuY29udGludWF0aW9uKTsKKyAg
ICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgSnVtcCwgb3Jp
Z2luKCksIGRhdGEuY29udGludWF0aW9uKTsKICAgICByZXR1cm4gYWRkRWxzZVRvVW5yZWFjaGFi
bGUoZGF0YSk7CiB9CiAKQEAgLTgzMyw5ICs4MjQsOSBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFk
ZFJldHVybihjb25zdCBDb250cm9sRGF0YSYsIGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXR1cm5W
YQogewogICAgIEFTU0VSVChyZXR1cm5WYWx1ZXMuc2l6ZSgpIDw9IDEpOwogICAgIGlmIChyZXR1
cm5WYWx1ZXMuc2l6ZSgpKQotICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3Q29udHJv
bFZhbHVlKG1fcHJvYywgQjM6OlJldHVybiwgT3JpZ2luKCksIHJldHVyblZhbHVlc1swXSk7Cisg
ICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBCMzo6
UmV0dXJuLCBvcmlnaW4oKSwgcmV0dXJuVmFsdWVzWzBdKTsKICAgICBlbHNlCi0gICAgICAgIG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBCMzo6UmV0dXJuLCBP
cmlnaW4oKSk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUo
bV9wcm9jLCBCMzo6UmV0dXJuLCBvcmlnaW4oKSk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIApAQCAt
ODQ3LDEzICs4MzgsMTMgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRCcmFuY2goQ29udHJvbERh
dGEmIGRhdGEsIEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QKICAgICBCYXNpY0Jsb2Nr
KiB0YXJnZXQgPSBkYXRhLnRhcmdldEJsb2NrRm9yQnJhbmNoKCk7CiAgICAgaWYgKGNvbmRpdGlv
bikgewogICAgICAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX3Byb2MuYWRkQmxvY2so
KTsKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCMzo6
QnJhbmNoLCBPcmlnaW4oKSwgY29uZGl0aW9uKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCMzo6QnJhbmNoLCBvcmlnaW4oKSwgY29uZGl0aW9uKTsK
ICAgICAgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMoRnJlcXVlbnRlZEJsb2NrKHRh
cmdldCksIEZyZXF1ZW50ZWRCbG9jayhjb250aW51YXRpb24pKTsKICAgICAgICAgdGFyZ2V0LT5h
ZGRQcmVkZWNlc3NvcihtX2N1cnJlbnRCbG9jayk7CiAgICAgICAgIGNvbnRpbnVhdGlvbi0+YWRk
UHJlZGVjZXNzb3IobV9jdXJyZW50QmxvY2spOwogICAgICAgICBtX2N1cnJlbnRCbG9jayA9IGNv
bnRpbnVhdGlvbjsKICAgICB9IGVsc2UgewotICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3Q29udHJvbFZhbHVlKG1fcHJvYywgSnVtcCwgT3JpZ2luKCksIEZyZXF1ZW50ZWRCbG9jayh0
YXJnZXQpKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSht
X3Byb2MsIEp1bXAsIG9yaWdpbigpLCBGcmVxdWVudGVkQmxvY2sodGFyZ2V0KSk7CiAgICAgICAg
IHRhcmdldC0+YWRkUHJlZGVjZXNzb3IobV9jdXJyZW50QmxvY2spOwogICAgIH0KIApAQCAtODY2
LDcgKzg1Nyw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkU3dpdGNoKEV4cHJlc3Npb25UeXBl
IGNvbmRpdGlvbiwgY29uc3QgVmVjdG9yPENvbnRyb2xEYXRhCiAgICAgICAgIHVuaWZ5VmFsdWVz
V2l0aEJsb2NrKGV4cHJlc3Npb25TdGFjaywgdGFyZ2V0c1tpXS0+cmVzdWx0KTsKICAgICB1bmlm
eVZhbHVlc1dpdGhCbG9jayhleHByZXNzaW9uU3RhY2ssIGRlZmF1bHRUYXJnZXQucmVzdWx0KTsK
IAotICAgIFN3aXRjaFZhbHVlKiBzd2l0Y2hWYWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8U3dpdGNoVmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIGNvbmRpdGlvbik7CisgICAgU3dpdGNo
VmFsdWUqIHN3aXRjaFZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxTd2l0Y2hWYWx1
ZT4obV9wcm9jLCBvcmlnaW4oKSwgY29uZGl0aW9uKTsKICAgICBzd2l0Y2hWYWx1ZS0+c2V0RmFs
bFRocm91Z2goRnJlcXVlbnRlZEJsb2NrKGRlZmF1bHRUYXJnZXQudGFyZ2V0QmxvY2tGb3JCcmFu
Y2goKSkpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGFyZ2V0cy5zaXplKCk7ICsraSkK
ICAgICAgICAgc3dpdGNoVmFsdWUtPmFwcGVuZENhc2UoU3dpdGNoQ2FzZShpLCBGcmVxdWVudGVk
QmxvY2sodGFyZ2V0c1tpXS0+dGFyZ2V0QmxvY2tGb3JCcmFuY2goKSkpKTsKQEAgLTg3OSw3ICs4
NzAsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmVuZEJsb2NrKENvbnRyb2xFbnRyeSYgZW50cnks
IEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhYwogICAgIENvbnRyb2xEYXRhJiBkYXRhID0g
ZW50cnkuY29udHJvbERhdGE7CiAKICAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhleHByZXNzaW9u
U3RhY2ssIGRhdGEucmVzdWx0KTsKLSAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3Q29udHJv
bFZhbHVlKG1fcHJvYywgSnVtcCwgT3JpZ2luKCksIGRhdGEuY29udGludWF0aW9uKTsKKyAgICBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgSnVtcCwgb3JpZ2lu
KCksIGRhdGEuY29udGludWF0aW9uKTsKICAgICBkYXRhLmNvbnRpbnVhdGlvbi0+YWRkUHJlZGVj
ZXNzb3IobV9jdXJyZW50QmxvY2spOwogCiAgICAgcmV0dXJuIGFkZEVuZFRvVW5yZWFjaGFibGUo
ZW50cnkpOwpAQCAtODkyLDEyICs4ODMsMTIgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRFbmRU
b1VucmVhY2hhYmxlKENvbnRyb2xFbnRyeSYgZW50cnkpIC0+IFBhcnRpYWxSZXN1bHQKICAgICBt
X2N1cnJlbnRCbG9jayA9IGRhdGEuY29udGludWF0aW9uOwogCiAgICAgaWYgKGRhdGEudHlwZSgp
ID09IEJsb2NrVHlwZTo6SWYpIHsKLSAgICAgICAgZGF0YS5zcGVjaWFsLT5hcHBlbmROZXdDb250
cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBPcmlnaW4oKSwgbV9jdXJyZW50QmxvY2spOworICAgICAg
ICBkYXRhLnNwZWNpYWwtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEp1bXAsIG9yaWdp
bigpLCBtX2N1cnJlbnRCbG9jayk7CiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hZGRQcmVkZWNl
c3NvcihkYXRhLnNwZWNpYWwpOwogICAgIH0KIAogICAgIGZvciAoVmFyaWFibGUqIHJlc3VsdCA6
IGRhdGEucmVzdWx0KQotICAgICAgICBlbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjay5hcHBl
bmQobV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihtX3Byb2MsIEIzOjpH
ZXQsIE9yaWdpbigpLCByZXN1bHQpKTsKKyAgICAgICAgZW50cnkuZW5jbG9zZWRFeHByZXNzaW9u
U3RhY2suYXBwZW5kKG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4obV9w
cm9jLCBCMzo6R2V0LCBvcmlnaW4oKSwgcmVzdWx0KSk7CiAKICAgICAvLyBUb3BMZXZlbCBkb2Vz
IG5vdCBoYXZlIGFueSBjb2RlIGFmdGVyIHRoaXMgc28gd2UgbmVlZCB0byBtYWtlIHN1cmUgd2Ug
ZW1pdCBhIHJldHVybiBoZXJlLgogICAgIGlmIChkYXRhLnR5cGUoKSA9PSBCbG9ja1R5cGU6OlRv
cExldmVsKQpAQCAtOTE1LDE2ICs5MDYsMTYgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxs
KHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSogc2lnbmF0dXJlLAogCiAg
ICAgaWYgKG1faW5mby5pc0ltcG9ydGVkRnVuY3Rpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1
bmN0aW9uSW5kZXgpKSB7CiAgICAgICAgIC8vIEZJWE1FIGltcG9ydHMgY2FuIGJlIGxpbmtlZCBo
ZXJlLCBpbnN0ZWFkIG9mIGdlbmVyYXRpbmcgYSBwYXRjaHBvaW50LCBiZWNhdXNlIGFsbCBpbXBv
cnQgc3R1YnMgYXJlIGdlbmVyYXRlZCBiZWZvcmUgQjMgY29tcGlsYXRpb24gc3RhcnRzLiBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2NDYyCi0gICAgICAgIFZhbHVl
KiBmdW5jdGlvbkltcG9ydCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+
KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgT3JpZ2luKCksIG1faW5zdGFuY2VWYWx1ZSwg
SlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkltcG9ydEZ1bmN0aW9uKGZ1bmN0aW9uSW5k
ZXgpKTsKLSAgICAgICAgVmFsdWUqIGpzVHlwZU9mSW1wb3J0ID0gbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkOFosIE9yaWdpbigpLCBmdW5jdGlvbklt
cG9ydCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSk7Ci0gICAgICAgIFZhbHVlKiBpc1dh
c21DYWxsID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwg
T3JpZ2luKCksIGpzVHlwZU9mSW1wb3J0LCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0
MzJWYWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwgV2ViQXNzZW1ibHlGdW5jdGlvblR5cGUpKTsKKyAg
ICAgICAgVmFsdWUqIGZ1bmN0aW9uSW1wb3J0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxN
ZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwgbV9pbnN0
YW5jZVZhbHVlLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mSW1wb3J0RnVuY3Rpb24o
ZnVuY3Rpb25JbmRleCkpOworICAgICAgICBWYWx1ZSoganNUeXBlT2ZJbXBvcnQgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQ4Wiwgb3JpZ2luKCks
IGZ1bmN0aW9uSW1wb3J0LCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKTsKKyAgICAgICAg
VmFsdWUqIGlzV2FzbUNhbGwgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3By
b2MsIEVxdWFsLCBvcmlnaW4oKSwganNUeXBlT2ZJbXBvcnQsIG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBXZWJBc3NlbWJseUZ1bmN0aW9u
VHlwZSkpOwogCiAgICAgICAgIEJhc2ljQmxvY2sqIGlzV2FzbUJsb2NrID0gbV9wcm9jLmFkZEJs
b2NrKCk7CiAgICAgICAgIEJhc2ljQmxvY2sqIGlzSlNCbG9jayA9IG1fcHJvYy5hZGRCbG9jaygp
OwogICAgICAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX3Byb2MuYWRkQmxvY2soKTsK
LSAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEIz
OjpCcmFuY2gsIE9yaWdpbigpLCBpc1dhc21DYWxsLCBGcmVxdWVudGVkQmxvY2soaXNXYXNtQmxv
Y2spLCBGcmVxdWVudGVkQmxvY2soaXNKU0Jsb2NrKSk7CisgICAgICAgIG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBCMzo6QnJhbmNoLCBvcmlnaW4oKSwgaXNX
YXNtQ2FsbCwgRnJlcXVlbnRlZEJsb2NrKGlzV2FzbUJsb2NrKSwgRnJlcXVlbnRlZEJsb2NrKGlz
SlNCbG9jaykpOwogCi0gICAgICAgIFZhbHVlKiB3YXNtQ2FsbFJlc3VsdCA9IHdhc21DYWxsaW5n
Q29udmVudGlvbigpLnNldHVwQ2FsbChtX3Byb2MsIGlzV2FzbUJsb2NrLCBPcmlnaW4oKSwgYXJn
cywgdG9CM1R5cGUocmV0dXJuVHlwZSksCisgICAgICAgIFZhbHVlKiB3YXNtQ2FsbFJlc3VsdCA9
IHdhc21DYWxsaW5nQ29udmVudGlvbigpLnNldHVwQ2FsbChtX3Byb2MsIGlzV2FzbUJsb2NrLCBv
cmlnaW4oKSwgYXJncywgdG9CM1R5cGUocmV0dXJuVHlwZSksCiAgICAgICAgICAgICBbPV0gKFBh
dGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCkgewogICAgICAgICAgICAgICAgIHBhdGNocG9pbnQt
PmVmZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBwYXRjaHBvaW50
LT5lZmZlY3RzLnJlYWRzUGlubmVkID0gdHJ1ZTsKQEAgLTkzNywxMCArOTI4LDEwIEBAIGF1dG8g
QjNJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWdu
YXR1cmUqIHNpZ25hdHVyZSwKICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAg
ICAgfSk7CiAgICAgICAgICAgICB9KTsKLSAgICAgICAgVXBzaWxvblZhbHVlKiB3YXNtQ2FsbFJl
c3VsdFVwc2lsb24gPSByZXR1cm5UeXBlID09IFZvaWQgPyBudWxscHRyIDogaXNXYXNtQmxvY2st
PmFwcGVuZE5ldzxVcHNpbG9uVmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIHdhc21DYWxsUmVzdWx0
KTsKLSAgICAgICAgaXNXYXNtQmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEp1
bXAsIE9yaWdpbigpLCBjb250aW51YXRpb24pOworICAgICAgICBVcHNpbG9uVmFsdWUqIHdhc21D
YWxsUmVzdWx0VXBzaWxvbiA9IHJldHVyblR5cGUgPT0gVm9pZCA/IG51bGxwdHIgOiBpc1dhc21C
bG9jay0+YXBwZW5kTmV3PFVwc2lsb25WYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgd2FzbUNhbGxS
ZXN1bHQpOworICAgICAgICBpc1dhc21CbG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJv
YywgSnVtcCwgb3JpZ2luKCksIGNvbnRpbnVhdGlvbik7CiAKLSAgICAgICAgVmFsdWUqIGpzQ2Fs
bFJlc3VsdCA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLnNldHVwQ2FsbChtX3Byb2MsIGlzSlNC
bG9jaywgT3JpZ2luKCksIGFyZ3MsIHRvQjNUeXBlKHJldHVyblR5cGUpLAorICAgICAgICBWYWx1
ZSoganNDYWxsUmVzdWx0ID0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkuc2V0dXBDYWxsKG1fcHJv
YywgaXNKU0Jsb2NrLCBvcmlnaW4oKSwgYXJncywgdG9CM1R5cGUocmV0dXJuVHlwZSksCiAgICAg
ICAgICAgICBbPV0gKFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCkgewogICAgICAgICAgICAg
ICAgIHBhdGNocG9pbnQtPmVmZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1ZTsKICAgICAgICAgICAg
ICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLnJlYWRzUGlubmVkID0gdHJ1ZTsKQEAgLTk1MywxNSAr
OTQ0LDE1IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlvbklu
ZGV4LCBjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSwKICAgICAgICAgICAgICAgICAgICAgfSk7
CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9KTsKLSAgICAgICAgVXBzaWxvblZh
bHVlKiBqc0NhbGxSZXN1bHRVcHNpbG9uID0gcmV0dXJuVHlwZSA9PSBWb2lkID8gbnVsbHB0ciA6
IGlzSlNCbG9jay0+YXBwZW5kTmV3PFVwc2lsb25WYWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwganND
YWxsUmVzdWx0KTsKLSAgICAgICAgaXNKU0Jsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9w
cm9jLCBKdW1wLCBPcmlnaW4oKSwgY29udGludWF0aW9uKTsKKyAgICAgICAgVXBzaWxvblZhbHVl
KiBqc0NhbGxSZXN1bHRVcHNpbG9uID0gcmV0dXJuVHlwZSA9PSBWb2lkID8gbnVsbHB0ciA6IGlz
SlNCbG9jay0+YXBwZW5kTmV3PFVwc2lsb25WYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwganNDYWxs
UmVzdWx0KTsKKyAgICAgICAgaXNKU0Jsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9j
LCBKdW1wLCBvcmlnaW4oKSwgY29udGludWF0aW9uKTsKIAogICAgICAgICBtX2N1cnJlbnRCbG9j
ayA9IGNvbnRpbnVhdGlvbjsKIAogICAgICAgICBpZiAocmV0dXJuVHlwZSA9PSBWb2lkKQogICAg
ICAgICAgICAgcmVzdWx0ID0gbnVsbHB0cjsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBy
ZXN1bHQgPSBjb250aW51YXRpb24tPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBQaGksIHRvQjNU
eXBlKHJldHVyblR5cGUpLCBPcmlnaW4oKSk7CisgICAgICAgICAgICByZXN1bHQgPSBjb250aW51
YXRpb24tPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBQaGksIHRvQjNUeXBlKHJldHVyblR5cGUp
LCBvcmlnaW4oKSk7CiAgICAgICAgICAgICB3YXNtQ2FsbFJlc3VsdFVwc2lsb24tPnNldFBoaShy
ZXN1bHQpOwogICAgICAgICAgICAganNDYWxsUmVzdWx0VXBzaWxvbi0+c2V0UGhpKHJlc3VsdCk7
CiAgICAgICAgIH0KQEAgLTk2OSw3ICs5NjAsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENh
bGwodWludDMyX3QgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlKiBzaWduYXR1cmUsCiAg
ICAgICAgIC8vIFRoZSBjYWxsIGNvdWxkIGhhdmUgYmVlbiB0byBhbm90aGVyIFdlYkFzc2VtYmx5
IGluc3RhbmNlLCBhbmQgLyBvciBjb3VsZCBoYXZlIG1vZGlmaWVkIG91ciBNZW1vcnkuCiAgICAg
ICAgIHJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKG1faW5mby5tZW1vcnksIG1faW5zdGFu
Y2VWYWx1ZSwgbV9wcm9jLCBjb250aW51YXRpb24pOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHJl
c3VsdCA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLnNldHVwQ2FsbChtX3Byb2MsIG1fY3VycmVu
dEJsb2NrLCBPcmlnaW4oKSwgYXJncywgdG9CM1R5cGUocmV0dXJuVHlwZSksCisgICAgICAgIHJl
c3VsdCA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLnNldHVwQ2FsbChtX3Byb2MsIG1fY3VycmVu
dEJsb2NrLCBvcmlnaW4oKSwgYXJncywgdG9CM1R5cGUocmV0dXJuVHlwZSksCiAgICAgICAgICAg
ICBbPV0gKFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCkgewogICAgICAgICAgICAgICAgIHBh
dGNocG9pbnQtPmVmZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBw
YXRjaHBvaW50LT5lZmZlY3RzLnJlYWRzUGlubmVkID0gdHJ1ZTsKQEAgLTk5NiwxOCArOTg3LDE4
IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KGNvbnN0IFNpZ25hdHVyZSog
c2lnbmF0dXJlLCBTaWduYXR1cmVJbmRleCBzCiAgICAgRXhwcmVzc2lvblR5cGUgY2FsbGFibGVG
dW5jdGlvbkJ1ZmZlcjsKICAgICBFeHByZXNzaW9uVHlwZSBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVy
U2l6ZTsKICAgICB7Ci0gICAgICAgIEV4cHJlc3Npb25UeXBlIHRhYmxlID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBP
cmlnaW4oKSwKKyAgICAgICAgRXhwcmVzc2lvblR5cGUgdGFibGUgPSBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdp
bigpLAogICAgICAgICAgICAgbV9pbnN0YW5jZVZhbHVlLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6
Om9mZnNldE9mVGFibGUoKSk7Ci0gICAgICAgIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXIgPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJU
eXBlKCksIE9yaWdpbigpLAorICAgICAgICBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlw
ZSgpLCBvcmlnaW4oKSwKICAgICAgICAgICAgIHRhYmxlLCBKU1dlYkFzc2VtYmx5VGFibGU6Om9m
ZnNldE9mRnVuY3Rpb25zKCkpOwotICAgICAgICBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyU2l6ZSA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgSW50
MzIsIE9yaWdpbigpLAorICAgICAgICBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyU2l6ZSA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgSW50MzIsIG9y
aWdpbigpLAogICAgICAgICAgICAgdGFibGUsIEpTV2ViQXNzZW1ibHlUYWJsZTo6b2Zmc2V0T2ZT
aXplKCkpOwogICAgIH0KIAogICAgIC8vIENoZWNrIHRoZSBpbmRleCB3ZSBhcmUgbG9va2luZyBm
b3IgaXMgdmFsaWQuCiAgICAgewotICAgICAgICBDaGVja1ZhbHVlKiBjaGVjayA9IG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgT3JpZ2luKCksCi0g
ICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEFib3Zl
RXF1YWwsIE9yaWdpbigpLCBjYWxsZWVJbmRleCwgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlclNpemUp
KTsKKyAgICAgICAgQ2hlY2tWYWx1ZSogY2hlY2sgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIG9yaWdpbigpLAorICAgICAgICAgICAgbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBBYm92ZUVxdWFsLCBvcmlnaW4oKSwg
Y2FsbGVlSW5kZXgsIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXJTaXplKSk7CiAKICAgICAgICAgY2hl
Y2stPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2tt
YXBHZW5lcmF0aW9uUGFyYW1zJikgewogICAgICAgICAgICAgdGhpcy0+ZW1pdEV4Y2VwdGlvbkNo
ZWNrKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNDYWxsSW5kaXJlY3QpOwpAQCAtMTAx
NSwxOSArMTAwNiwxOSBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdChjb25z
dCBTaWduYXR1cmUqIHNpZ25hdHVyZSwgU2lnbmF0dXJlSW5kZXggcwogICAgIH0KIAogICAgIC8v
IENvbXB1dGUgdGhlIG9mZnNldCBpbiB0aGUgdGFibGUgaW5kZXggc3BhY2Ugd2UgYXJlIGxvb2tp
bmcgZm9yLgotICAgIEV4cHJlc3Npb25UeXBlIG9mZnNldCA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8VmFsdWU+KG1fcHJvYywgTXVsLCBPcmlnaW4oKSwKLSAgICAgICAgbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBaRXh0MzIsIE9yaWdpbigpLCBjYWxsZWVJbmRl
eCksCi0gICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmRJbnRDb25zdGFudChtX3Byb2MsIE9y
aWdpbigpLCBwb2ludGVyVHlwZSgpLCBzaXplb2YoQ2FsbGFibGVGdW5jdGlvbikpKTsKLSAgICBF
eHByZXNzaW9uVHlwZSBjYWxsYWJsZUZ1bmN0aW9uID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxWYWx1ZT4obV9wcm9jLCBBZGQsIE9yaWdpbigpLCBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyLCBv
ZmZzZXQpOworICAgIEV4cHJlc3Npb25UeXBlIG9mZnNldCA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8VmFsdWU+KG1fcHJvYywgTXVsLCBvcmlnaW4oKSwKKyAgICAgICAgbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBaRXh0MzIsIG9yaWdpbigpLCBjYWxsZWVJbmRl
eCksCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmRJbnRDb25zdGFudChtX3Byb2MsIG9y
aWdpbigpLCBwb2ludGVyVHlwZSgpLCBzaXplb2YoQ2FsbGFibGVGdW5jdGlvbikpKTsKKyAgICBF
eHByZXNzaW9uVHlwZSBjYWxsYWJsZUZ1bmN0aW9uID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxWYWx1ZT4obV9wcm9jLCBBZGQsIG9yaWdpbigpLCBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyLCBv
ZmZzZXQpOwogCiAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgQ2FsbGFibGVGdW5jdGlvbiBpcyBpbml0
aWFsaXplZC4gV2UgdHJhcCBpZiBpdCBpc24ndC4gQW4gImludmFsaWQiIFNpZ25hdHVyZUluZGV4
IGluZGljYXRlcyBpdCdzIG5vdCBpbml0aWFsaXplZC4KICAgICBzdGF0aWNfYXNzZXJ0KHNpemVv
ZihDYWxsYWJsZUZ1bmN0aW9uOjpzaWduYXR1cmVJbmRleCkgPT0gc2l6ZW9mKHVpbnQzMl90KSwg
IkxvYWQgY29kZWdlbiBhc3N1bWVzIGkzMiIpOwotICAgIEV4cHJlc3Npb25UeXBlIGNhbGxlZVNp
Z25hdHVyZUluZGV4ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9w
cm9jLCBMb2FkLCBJbnQzMiwgT3JpZ2luKCksIGNhbGxhYmxlRnVuY3Rpb24sIE9CSkVDVF9PRkZT
RVRPRihDYWxsYWJsZUZ1bmN0aW9uLCBzaWduYXR1cmVJbmRleCkpOworICAgIEV4cHJlc3Npb25U
eXBlIGNhbGxlZVNpZ25hdHVyZUluZGV4ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1v
cnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBJbnQzMiwgb3JpZ2luKCksIGNhbGxhYmxlRnVuY3Rpb24s
IE9CSkVDVF9PRkZTRVRPRihDYWxsYWJsZUZ1bmN0aW9uLCBzaWduYXR1cmVJbmRleCkpOwogICAg
IHsKLSAgICAgICAgQ2hlY2tWYWx1ZSogY2hlY2sgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIE9yaWdpbigpLAotICAgICAgICAgICAgbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgT3JpZ2luKCksCisgICAg
ICAgIENoZWNrVmFsdWUqIGNoZWNrID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1Zh
bHVlPihtX3Byb2MsIENoZWNrLCBvcmlnaW4oKSwKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLAogICAgICAgICAgICAg
ICAgIGNhbGxlZVNpZ25hdHVyZUluZGV4LAotICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCBTaWduYXR1cmU6Omlu
dmFsaWRJbmRleCkpKTsKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgU2lnbmF0dXJlOjppbnZhbGlkSW5kZXgp
KSk7CiAKICAgICAgICAgY2hlY2stPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0
LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgewogICAgICAgICAgICAgdGhp
cy0+ZW1pdEV4Y2VwdGlvbkNoZWNrKGppdCwgRXhjZXB0aW9uVHlwZTo6TnVsbFRhYmxlRW50cnkp
OwpAQCAtMTAzNiwxOSArMTAyNywxOSBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGxJbmRp
cmVjdChjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSwgU2lnbmF0dXJlSW5kZXggcwogCiAgICAg
Ly8gQ2hlY2sgdGhlIHNpZ25hdHVyZSBtYXRjaGVzIHRoZSB2YWx1ZSB3ZSBleHBlY3QuCiAgICAg
ewotICAgICAgICBFeHByZXNzaW9uVHlwZSBleHBlY3RlZFNpZ25hdHVyZUluZGV4ID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIHNpZ25h
dHVyZUluZGV4KTsKLSAgICAgICAgQ2hlY2tWYWx1ZSogY2hlY2sgPSBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIE9yaWdpbigpLAotICAgICAgICAg
ICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBOb3RFcXVhbCwgT3Jp
Z2luKCksIGNhbGxlZVNpZ25hdHVyZUluZGV4LCBleHBlY3RlZFNpZ25hdHVyZUluZGV4KSk7Cisg
ICAgICAgIEV4cHJlc3Npb25UeXBlIGV4cGVjdGVkU2lnbmF0dXJlSW5kZXggPSBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgc2lnbmF0dXJl
SW5kZXgpOworICAgICAgICBDaGVja1ZhbHVlKiBjaGVjayA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgb3JpZ2luKCksCisgICAgICAgICAgICBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIE5vdEVxdWFsLCBvcmlnaW4o
KSwgY2FsbGVlU2lnbmF0dXJlSW5kZXgsIGV4cGVjdGVkU2lnbmF0dXJlSW5kZXgpKTsKIAogICAg
ICAgICBjaGVjay0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIz
OjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CiAgICAgICAgICAgICB0aGlzLT5lbWl0RXhj
ZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRpb25UeXBlOjpCYWRTaWduYXR1cmUpOwogICAgICAgICB9
KTsKICAgICB9CiAKLSAgICBFeHByZXNzaW9uVHlwZSBjYWxsZWVDb2RlID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBP
cmlnaW4oKSwgY2FsbGFibGVGdW5jdGlvbiwgT0JKRUNUX09GRlNFVE9GKENhbGxhYmxlRnVuY3Rp
b24sIGNvZGUpKTsKKyAgICBFeHByZXNzaW9uVHlwZSBjYWxsZWVDb2RlID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBv
cmlnaW4oKSwgY2FsbGFibGVGdW5jdGlvbiwgT0JKRUNUX09GRlNFVE9GKENhbGxhYmxlRnVuY3Rp
b24sIGNvZGUpKTsKIAogICAgIFR5cGUgcmV0dXJuVHlwZSA9IHNpZ25hdHVyZS0+cmV0dXJuVHlw
ZSgpOwotICAgIHJlc3VsdCA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLnNldHVwQ2FsbChtX3By
b2MsIG1fY3VycmVudEJsb2NrLCBPcmlnaW4oKSwgYXJncywgdG9CM1R5cGUocmV0dXJuVHlwZSks
CisgICAgcmVzdWx0ID0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkuc2V0dXBDYWxsKG1fcHJvYywg
bV9jdXJyZW50QmxvY2ssIG9yaWdpbigpLCBhcmdzLCB0b0IzVHlwZShyZXR1cm5UeXBlKSwKICAg
ICAgICAgWz1dIChQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQpIHsKICAgICAgICAgICAgIHBh
dGNocG9pbnQtPmVmZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1ZTsKICAgICAgICAgICAgIHBhdGNo
cG9pbnQtPmVmZmVjdHMucmVhZHNQaW5uZWQgPSB0cnVlOwpAQCAtMTA2OSw3ICsxMDYwLDcgQEAg
YXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QoY29uc3QgU2lnbmF0dXJlKiBzaWdu
YXR1cmUsIFNpZ25hdHVyZUluZGV4IHMKIAogdm9pZCBCM0lSR2VuZXJhdG9yOjp1bmlmeShWYXJp
YWJsZSogdmFyaWFibGUsIEV4cHJlc3Npb25UeXBlIHNvdXJjZSkKIHsKLSAgICBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1fcHJvYywgU2V0LCBPcmlnaW4oKSwgdmFy
aWFibGUsIHNvdXJjZSk7CisgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYXJpYWJsZVZh
bHVlPihtX3Byb2MsIFNldCwgb3JpZ2luKCksIHZhcmlhYmxlLCBzb3VyY2UpOwogfQogCiB2b2lk
IEIzSVJHZW5lcmF0b3I6OnVuaWZ5VmFsdWVzV2l0aEJsb2NrKGNvbnN0IEV4cHJlc3Npb25MaXN0
JiByZXN1bHRTdGFjaywgUmVzdWx0TGlzdCYgcmVzdWx0KQpAQCAtMTI3OSw2ICsxMjcwLDE0IEBA
IHN0YXRpYyB2b2lkIGNyZWF0ZUpTVG9XYXNtV3JhcHBlcihDb21waWxhdGlvbkNvbnRleHQmIGNv
bXBpbGF0aW9uQ29udGV4dCwgV2FzbUluCiAgICAgaml0LnJldCgpOwogfQogCithdXRvIEIzSVJH
ZW5lcmF0b3I6Om9yaWdpbigpIC0+IE9yaWdpbgoreworICAgIGlmIChtX29yaWdpbnMuaXNFbXB0
eSgpIHx8IG1fb3JpZ2lucy5sYXN0KCktPmxvY2F0aW9uICE9IG1fcGFyc2VyLT5jdXJyZW50T3Bj
b2RlU3RhcnRpbmdPZmZzZXQoKSkKKyAgICAgICAgbV9vcmlnaW5zLmFwcGVuZChzdGQ6Om1ha2Vf
dW5pcXVlPE9wY29kZU9yaWdpbj4obV9wYXJzZXItPmN1cnJlbnRPcGNvZGUoKSwgbV9wYXJzZXIt
PmN1cnJlbnRPcGNvZGVTdGFydGluZ09mZnNldCgpKSk7CisKKyAgICByZXR1cm4gT3JpZ2luKG1f
b3JpZ2lucy5sYXN0KCkuZ2V0KCkpOworfQorCiBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8V2Fz
bUludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZShWTSYgdm0sIENvbXBp
bGF0aW9uQ29udGV4dCYgY29tcGlsYXRpb25Db250ZXh0LCBjb25zdCB1aW50OF90KiBmdW5jdGlv
blN0YXJ0LCBzaXplX3QgZnVuY3Rpb25MZW5ndGgsIGNvbnN0IFNpZ25hdHVyZSogc2lnbmF0dXJl
LCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxz
LCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgY29uc3QgVmVjdG9yPFNpZ25hdHVyZUlu
ZGV4PiYgbW9kdWxlU2lnbmF0dXJlSW5kaWNlc1RvVW5pcXVlZFNpZ25hdHVyZUluZGljZXMsIE1l
bW9yeU1vZGUgbW9kZSwgdW5zaWduZWQgb3B0TGV2ZWwpCiB7CiAgICAgYXV0byByZXN1bHQgPSBz
dGQ6Om1ha2VfdW5pcXVlPFdhc21JbnRlcm5hbEZ1bmN0aW9uPigpOwpAQCAtMTI4Nyw2ICsxMjg2
LDEyIEBAIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxXYXNtSW50ZXJuYWxGdW5jdGlvbj4sIFN0
cmluZz4gcGFyc2VBbmRDb21waWxlKFZNJiB2bSwKICAgICBjb21waWxhdGlvbkNvbnRleHQud2Fz
bUVudHJ5cG9pbnRKSVQgPSBzdGQ6Om1ha2VfdW5pcXVlPENDYWxsSGVscGVycz4oJnZtKTsKIAog
ICAgIFByb2NlZHVyZSBwcm9jZWR1cmU7CisKKyAgICBwcm9jZWR1cmUuc2V0T3JpZ2luUHJpbnRl
cihbXSAoUHJpbnRTdHJlYW0mIG91dCwgT3JpZ2luIG9yaWdpbikgeworICAgICAgICBpZiAob3Jp
Z2luLmRhdGEoKSkKKyAgICAgICAgICAgIG91dC5wcmludCgiV2FzbTogIiwgKmJpdHdpc2VfY2Fz
dDxPcGNvZGVPcmlnaW4qPihvcmlnaW4uZGF0YSgpKSk7CisgICAgfSk7CisKICAgICBCM0lSR2Vu
ZXJhdG9yIGNvbnRleHQodm0sIGluZm8sIHByb2NlZHVyZSwgcmVzdWx0LmdldCgpLCB1bmxpbmtl
ZFdhc21Ub1dhc21DYWxscywgbW9kZSk7CiAgICAgRnVuY3Rpb25QYXJzZXI8QjNJUkdlbmVyYXRv
cj4gcGFyc2VyKCZ2bSwgY29udGV4dCwgZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNp
Z25hdHVyZSwgaW5mbywgbW9kdWxlU2lnbmF0dXJlSW5kaWNlc1RvVW5pcXVlZFNpZ25hdHVyZUlu
ZGljZXMpOwogICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VyLnBhcnNlKCkpOwpA
QCAtMTMxOCw5ICsxMzIzLDkgQEAgdm9pZCBCM0lSR2VuZXJhdG9yOjplbWl0Q2hlY2tzRm9yTW9k
T3JEaXYoQjM6Ok9wY29kZSBvcGVyYXRpb24sIEV4cHJlc3Npb25UeXBlIGwKICAgICBjb25zdCBC
Mzo6VHlwZSB0eXBlID0gbGVmdC0+dHlwZSgpOwogCiAgICAgewotICAgICAgICBDaGVja1ZhbHVl
KiBjaGVjayA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBD
aGVjaywgT3JpZ2luKCksCi0gICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZh
bHVlPihtX3Byb2MsIEVxdWFsLCBPcmlnaW4oKSwgcmlnaHQsCi0gICAgICAgICAgICAgICAgbV9j
dXJyZW50QmxvY2stPmFwcGVuZEludENvbnN0YW50KG1fcHJvYywgT3JpZ2luKCksIHR5cGUsIDAp
KSk7CisgICAgICAgIENoZWNrVmFsdWUqIGNoZWNrID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBvcmlnaW4oKSwKKyAgICAgICAgICAgIG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLCByaWdo
dCwKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kSW50Q29uc3RhbnQobV9w
cm9jLCBvcmlnaW4oKSwgdHlwZSwgMCkpKTsKIAogICAgICAgICBjaGVjay0+c2V0R2VuZXJhdG9y
KFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJh
bXMmKSB7CiAgICAgICAgICAgICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRp
b25UeXBlOjpEaXZpc2lvbkJ5WmVybyk7CkBAIC0xMzMwLDEyICsxMzM1LDEyIEBAIHZvaWQgQjNJ
UkdlbmVyYXRvcjo6ZW1pdENoZWNrc0Zvck1vZE9yRGl2KEIzOjpPcGNvZGUgb3BlcmF0aW9uLCBF
eHByZXNzaW9uVHlwZSBsCiAgICAgaWYgKG9wZXJhdGlvbiA9PSBEaXYpIHsKICAgICAgICAgaW50
NjRfdCBtaW4gPSB0eXBlID09IEludDMyID8gc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6
bWluKCkgOiBzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptaW4oKTsKIAotICAgICAgICBD
aGVja1ZhbHVlKiBjaGVjayA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4o
bV9wcm9jLCBDaGVjaywgT3JpZ2luKCksCi0gICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFZhbHVlPihtX3Byb2MsIEJpdEFuZCwgT3JpZ2luKCksCi0gICAgICAgICAgICAgICAg
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgT3JpZ2luKCks
IGxlZnQsCi0gICAgICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmRJbnRDb25z
dGFudChtX3Byb2MsIE9yaWdpbigpLCB0eXBlLCBtaW4pKSwKLSAgICAgICAgICAgICAgICBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBPcmlnaW4oKSwgcmln
aHQsCi0gICAgICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmRJbnRDb25zdGFu
dChtX3Byb2MsIE9yaWdpbigpLCB0eXBlLCAtMSkpKSk7CisgICAgICAgIENoZWNrVmFsdWUqIGNo
ZWNrID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNr
LCBvcmlnaW4oKSwKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+
KG1fcHJvYywgQml0QW5kLCBvcmlnaW4oKSwKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwgbGVmdCwKKyAgICAg
ICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZEludENvbnN0YW50KG1fcHJvYywg
b3JpZ2luKCksIHR5cGUsIG1pbikpLAorICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLCByaWdodCwKKyAgICAgICAg
ICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZEludENvbnN0YW50KG1fcHJvYywgb3Jp
Z2luKCksIHR5cGUsIC0xKSkpKTsKIAogICAgICAgICBjaGVjay0+c2V0R2VuZXJhdG9yKFs9XSAo
Q0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7
CiAgICAgICAgICAgICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRpb25UeXBl
OjpJbnRlZ2VyT3ZlcmZsb3cpOwpAQCAtMTM0OCw3ICsxMzUzLDcgQEAgYXV0byBCM0lSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6OkkzMkRpdlM+KEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Np
b25UeXBlIHIKIHsKICAgICBjb25zdCBCMzo6T3Bjb2RlIG9wID0gRGl2OwogICAgIGVtaXRDaGVj
a3NGb3JNb2RPckRpdihvcCwgbGVmdCwgcmlnaHQpOwotICAgIHJlc3VsdCA9IG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgb3AsIE9yaWdpbigpLCBsZWZ0LCByaWdodCk7
CisgICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBv
cCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKICAgICByZXR1cm4geyB9OwogfQogCkBAIC0xMzU3
LDcgKzEzNjIsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyUmVtUz4o
RXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcgogewogICAgIGNvbnN0IEIzOjpP
cGNvZGUgb3AgPSBNb2Q7CiAgICAgZW1pdENoZWNrc0Zvck1vZE9yRGl2KG9wLCBsZWZ0LCByaWdo
dCk7Ci0gICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9j
LCBjaGlsbChvcCksIE9yaWdpbigpLCBsZWZ0LCByaWdodCk7CisgICAgcmVzdWx0ID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBjaGlsbChvcCksIG9yaWdpbigpLCBs
ZWZ0LCByaWdodCk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIApAQCAtMTM2Niw3ICsxMzcxLDcgQEAg
YXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkRpdlU+KEV4cHJlc3Npb25UeXBl
IGxlZnQsIEV4cHJlc3Npb25UeXBlIHIKIHsKICAgICBjb25zdCBCMzo6T3Bjb2RlIG9wID0gVURp
djsKICAgICBlbWl0Q2hlY2tzRm9yTW9kT3JEaXYob3AsIGxlZnQsIHJpZ2h0KTsKLSAgICByZXN1
bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIG9wLCBPcmlnaW4o
KSwgbGVmdCwgcmlnaHQpOworICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
VmFsdWU+KG1fcHJvYywgb3AsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CiAgICAgcmV0dXJuIHsg
fTsKIH0KIApAQCAtMTM3NSw3ICsxMzgwLDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6OkkzMlJlbVU+KEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHIKIHsK
ICAgICBjb25zdCBCMzo6T3Bjb2RlIG9wID0gVU1vZDsKICAgICBlbWl0Q2hlY2tzRm9yTW9kT3JE
aXYob3AsIGxlZnQsIHJpZ2h0KTsKLSAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFZhbHVlPihtX3Byb2MsIG9wLCBPcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJlc3Vs
dCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgb3AsIG9yaWdpbigp
LCBsZWZ0LCByaWdodCk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIApAQCAtMTM4NCw3ICsxMzg5LDcg
QEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NERpdlM+KEV4cHJlc3Npb25U
eXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHIKIHsKICAgICBjb25zdCBCMzo6T3Bjb2RlIG9wID0g
RGl2OwogICAgIGVtaXRDaGVja3NGb3JNb2RPckRpdihvcCwgbGVmdCwgcmlnaHQpOwotICAgIHJl
c3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgb3AsIE9yaWdp
bigpLCBsZWZ0LCByaWdodCk7CisgICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxWYWx1ZT4obV9wcm9jLCBvcCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKICAgICByZXR1cm4g
eyB9OwogfQogCkBAIC0xMzkzLDcgKzEzOTgsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STY0UmVtUz4oRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcgog
ewogICAgIGNvbnN0IEIzOjpPcGNvZGUgb3AgPSBNb2Q7CiAgICAgZW1pdENoZWNrc0Zvck1vZE9y
RGl2KG9wLCBsZWZ0LCByaWdodCk7Ci0gICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxWYWx1ZT4obV9wcm9jLCBjaGlsbChvcCksIE9yaWdpbigpLCBsZWZ0LCByaWdodCk7Cisg
ICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBjaGls
bChvcCksIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIApAQCAt
MTQwMiw3ICsxNDA3LDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NERp
dlU+KEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHIKIHsKICAgICBjb25zdCBC
Mzo6T3Bjb2RlIG9wID0gVURpdjsKICAgICBlbWl0Q2hlY2tzRm9yTW9kT3JEaXYob3AsIGxlZnQs
IHJpZ2h0KTsKLSAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPiht
X3Byb2MsIG9wLCBPcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJlc3VsdCA9IG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgb3AsIG9yaWdpbigpLCBsZWZ0LCByaWdo
dCk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIApAQCAtMTQxMSwxNCArMTQxNiwxNCBAQCBhdXRvIEIz
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0UmVtVT4oRXhwcmVzc2lvblR5cGUgbGVmdCwg
RXhwcmVzc2lvblR5cGUgcgogewogICAgIGNvbnN0IEIzOjpPcGNvZGUgb3AgPSBVTW9kOwogICAg
IGVtaXRDaGVja3NGb3JNb2RPckRpdihvcCwgbGVmdCwgcmlnaHQpOwotICAgIHJlc3VsdCA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgb3AsIE9yaWdpbigpLCBsZWZ0
LCByaWdodCk7CisgICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4o
bV9wcm9jLCBvcCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKICAgICByZXR1cm4geyB9OwogfQog
CiB0ZW1wbGF0ZTw+CiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyQ3R6PihF
eHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKIHsKLSAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBJbnQzMiwgT3JpZ2luKCkpOworICAg
IFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEludDMyLCBvcmlnaW4oKSk7CiAgICAgcGF0Y2hwb2lu
dC0+YXBwZW5kKGFyZywgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CiAgICAgcGF0Y2hwb2ludC0+
c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJh
dGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgIGppdC5jb3VudFRyYWlsaW5nWmVyb3MzMihw
YXJhbXNbMV0uZ3ByKCksIHBhcmFtc1swXS5ncHIoKSk7CkBAIC0xNDMxLDcgKzE0MzYsNyBAQCBh
dXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyQ3R6PihFeHByZXNzaW9uVHlwZSBh
cmcsIEV4cHJlc3Npb25UeXBlJiByZQogdGVtcGxhdGU8PgogYXV0byBCM0lSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6Okk2NEN0ej4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBv
aW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywg
SW50NjQsIE9yaWdpbigpKTsKKyAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBJbnQ2NCwgb3Jp
Z2luKCkpOwogICAgIHBhdGNocG9pbnQtPmFwcGVuZChhcmcsIFZhbHVlUmVwOjpTb21lUmVnaXN0
ZXIpOwogICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0
LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICBqaXQu
Y291bnRUcmFpbGluZ1plcm9zNjQocGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOwpA
QCAtMTQ0Nyw4ICsxNDUyLDggQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okkz
MlBvcGNudD4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYKICAgICAvLyBGSVhN
RTogVGhpcyBzaG91bGQgdXNlIHRoZSBwb3BjbnQgaW5zdHJ1Y3Rpb24gaWYgU1NFNCBpcyBhdmFp
bGFibGUgYnV0IHdlIGRvbid0IGhhdmUgY29kZSB0byBkZXRlY3QgU1NFNCB5ZXQuCiAgICAgLy8g
c2VlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1MzYzCiAgICAg
dWludDMyX3QgKCpwb3Bjb3VudCkoaW50MzJfdCkgPSBbXSAoaW50MzJfdCB2YWx1ZSkgLT4gdWlu
dDMyX3QgeyByZXR1cm4gX19idWlsdGluX3BvcGNvdW50KHZhbHVlKTsgfTsKLSAgICBWYWx1ZSog
ZnVuY0FkZHJlc3MgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KG1f
cHJvYywgT3JpZ2luKCksIGJpdHdpc2VfY2FzdDx2b2lkKj4ocG9wY291bnQpKTsKLSAgICByZXN1
bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJvYywgSW50MzIs
IE9yaWdpbigpLCBFZmZlY3RzOjpub25lKCksIGZ1bmNBZGRyZXNzLCBhcmcpOworICAgIFZhbHVl
KiBmdW5jQWRkcmVzcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4o
bV9wcm9jLCBvcmlnaW4oKSwgYml0d2lzZV9jYXN0PHZvaWQqPihwb3Bjb3VudCkpOworICAgIHJl
c3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9jLCBJbnQz
Miwgb3JpZ2luKCksIEVmZmVjdHM6Om5vbmUoKSwgZnVuY0FkZHJlc3MsIGFyZyk7CiAgICAgcmV0
dXJuIHsgfTsKIH0KIApAQCAtMTQ1OCwxNSArMTQ2MywxNSBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6STY0UG9wY250PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25U
eXBlJgogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2UgdGhlIHBvcGNudCBpbnN0cnVjdGlv
biBpZiBTU0U0IGlzIGF2YWlsYWJsZSBidXQgd2UgZG9uJ3QgaGF2ZSBjb2RlIHRvIGRldGVjdCBT
U0U0IHlldC4KICAgICAvLyBzZWU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjUzNjMKICAgICB1aW50NjRfdCAoKnBvcGNvdW50KShpbnQ2NF90KSA9IFtdIChpbnQ2
NF90IHZhbHVlKSAtPiB1aW50NjRfdCB7IHJldHVybiBfX2J1aWx0aW5fcG9wY291bnRsbCh2YWx1
ZSk7IH07Ci0gICAgVmFsdWUqIGZ1bmNBZGRyZXNzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxDb25zdFB0clZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHBv
cGNvdW50KSk7Ci0gICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZh
bHVlPihtX3Byb2MsIEludDY0LCBPcmlnaW4oKSwgRWZmZWN0czo6bm9uZSgpLCBmdW5jQWRkcmVz
cywgYXJnKTsKKyAgICBWYWx1ZSogZnVuY0FkZHJlc3MgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PENvbnN0UHRyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIGJpdHdpc2VfY2FzdDx2b2lkKj4o
cG9wY291bnQpKTsKKyAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxs
VmFsdWU+KG1fcHJvYywgSW50NjQsIG9yaWdpbigpLCBFZmZlY3RzOjpub25lKCksIGZ1bmNBZGRy
ZXNzLCBhcmcpOwogICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPD4KIGF1dG8gQjNJUkdl
bmVyYXRvcjo6YWRkT3A8RjY0Q29udmVydFVJNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewotICAgIFBhdGNocG9pbnRWYWx1
ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVl
PihtX3Byb2MsIERvdWJsZSwgT3JpZ2luKCkpOworICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hw
b2ludCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2Ms
IERvdWJsZSwgb3JpZ2luKCkpOwogICAgIGlmIChpc1g4NigpKQogICAgICAgICBwYXRjaHBvaW50
LT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMgPSAxOwogICAgIHBhdGNocG9pbnQtPmFwcGVuZChDb25z
dHJhaW5lZFZhbHVlKGFyZywgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcikpOwpAQCAtMTQ4Niw3ICsx
NDkxLDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxGNjRDb252ZXJ0VUk2ND4oRXhwcmVz
c2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmUKIHRlbXBsYXRlPD4KIGF1dG8gQjNJUkdl
bmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJDb252ZXJ0VUk2ND4oRXhwcmVzc2lvblR5cGUgYXJn
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgUGF0Y2hw
b2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBv
aW50VmFsdWU+KG1fcHJvYywgRmxvYXQsIE9yaWdpbigpKTsKKyAgICBQYXRjaHBvaW50VmFsdWUq
IHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4o
bV9wcm9jLCBGbG9hdCwgb3JpZ2luKCkpOwogICAgIGlmIChpc1g4NigpKQogICAgICAgICBwYXRj
aHBvaW50LT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMgPSAxOwogICAgIHBhdGNocG9pbnQtPmFwcGVu
ZChDb25zdHJhaW5lZFZhbHVlKGFyZywgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcikpOwpAQCAtMTUw
Niw3ICsxNTExLDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkNvbnZl
cnRVSTY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb24KIHRlbXBsYXRlPD4KIGF1dG8g
QjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjROZWFyZXN0PihFeHByZXNzaW9uVHlwZSBh
cmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBQYXRj
aHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNo
cG9pbnRWYWx1ZT4obV9wcm9jLCBEb3VibGUsIE9yaWdpbigpKTsKKyAgICBQYXRjaHBvaW50VmFs
dWUqIHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1
ZT4obV9wcm9jLCBEb3VibGUsIG9yaWdpbigpKTsKICAgICBwYXRjaHBvaW50LT5hcHBlbmQoYXJn
LCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3Io
Wz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBw
YXJhbXMpIHsKICAgICAgICAgaml0LnJvdW5kVG93YXJkTmVhcmVzdEludERvdWJsZShwYXJhbXNb
MV0uZnByKCksIHBhcmFtc1swXS5mcHIoKSk7CkBAIC0xNTE5LDcgKzE1MjQsNyBAQCBhdXRvIEIz
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0TmVhcmVzdD4oRXhwcmVzc2lvblR5cGUgYXJn
LCBFeHByZXNzaW9uVHlwZQogdGVtcGxhdGU8PgogYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6OkYzMk5lYXJlc3Q+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewotICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2lu
dCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEZs
b2F0LCBPcmlnaW4oKSk7CisgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgRmxvYXQsIG9yaWdp
bigpKTsKICAgICBwYXRjaHBvaW50LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVy
KTsKICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwg
Y29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgaml0LnJv
dW5kVG93YXJkTmVhcmVzdEludEZsb2F0KHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmZwcigp
KTsKQEAgLTE1MzIsNyArMTUzNyw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpGMzJOZWFyZXN0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlCiB0ZW1wbGF0
ZTw+CiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0VHJ1bmM+KEV4cHJlc3Np
b25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewot
ICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIERvdWJsZSwgT3JpZ2luKCkpOworICAgIFBhdGNo
cG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hw
b2ludFZhbHVlPihtX3Byb2MsIERvdWJsZSwgb3JpZ2luKCkpOwogICAgIHBhdGNocG9pbnQtPmFw
cGVuZChhcmcsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOwogICAgIHBhdGNocG9pbnQtPnNldEdl
bmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25Q
YXJhbXMmIHBhcmFtcykgewogICAgICAgICBqaXQucm91bmRUb3dhcmRaZXJvRG91YmxlKHBhcmFt
c1sxXS5mcHIoKSwgcGFyYW1zWzBdLmZwcigpKTsKQEAgLTE1NDUsNyArMTU1MCw3IEBAIGF1dG8g
QjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRUcnVuYz4oRXhwcmVzc2lvblR5cGUgYXJn
LCBFeHByZXNzaW9uVHlwZSYKIHRlbXBsYXRlPD4KIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpGMzJUcnVuYz4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgRmxv
YXQsIE9yaWdpbigpKTsKKyAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBGbG9hdCwgb3JpZ2lu
KCkpOwogICAgIHBhdGNocG9pbnQtPmFwcGVuZChhcmcsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIp
OwogICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBj
b25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICBqaXQucm91
bmRUb3dhcmRaZXJvRmxvYXQocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZnByKCkpOwpAQCAt
MTU1OCwxNyArMTU2MywxNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMy
VHJ1bmM+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmCiB0ZW1wbGF0ZTw+CiBh
dXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNTRjY0PihFeHByZXNzaW9u
VHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAg
ICBWYWx1ZSogbWF4ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdERvdWJsZVZhbHVl
PihtX3Byb2MsIE9yaWdpbigpLCAtc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGlt
aXRzPGludDMyX3Q+OjptaW4oKSkpOwotICAgIFZhbHVlKiBtaW4gPSBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PENvbnN0RG91YmxlVmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIHN0YXRpY19jYXN0
PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpKTsKLSAgICBWYWx1
ZSogb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2Ms
IEJpdEFuZCwgT3JpZ2luKCksCi0gICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFs
dWU+KG1fcHJvYywgTGVzc1RoYW4sIE9yaWdpbigpLCBhcmcsIG1heCksCi0gICAgICAgIG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgR3JlYXRlckVxdWFsLCBPcmlnaW4o
KSwgYXJnLCBtaW4pKTsKLSAgICBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIE9yaWdpbigpLCBvdXRPZkJvdW5kcywgemVyb0ZvclR5
cGUoSTMyKSk7Ci0gICAgQ2hlY2tWYWx1ZSogdHJhcCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgT3JpZ2luKCksIG91dE9mQm91bmRzKTsKKyAg
ICBWYWx1ZSogbWF4ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdERvdWJsZVZhbHVl
PihtX3Byb2MsIG9yaWdpbigpLCAtc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGlt
aXRzPGludDMyX3Q+OjptaW4oKSkpOworICAgIFZhbHVlKiBtaW4gPSBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PENvbnN0RG91YmxlVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHN0YXRpY19jYXN0
PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpKTsKKyAgICBWYWx1
ZSogb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2Ms
IEJpdEFuZCwgb3JpZ2luKCksCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFs
dWU+KG1fcHJvYywgTGVzc1RoYW4sIG9yaWdpbigpLCBhcmcsIG1heCksCisgICAgICAgIG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgR3JlYXRlckVxdWFsLCBvcmlnaW4o
KSwgYXJnLCBtaW4pKTsKKyAgICBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLCBvdXRPZkJvdW5kcywgemVyb0ZvclR5
cGUoSTMyKSk7CisgICAgQ2hlY2tWYWx1ZSogdHJhcCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgb3JpZ2luKCksIG91dE9mQm91bmRzKTsKICAg
ICB0cmFwLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2tt
YXBHZW5lcmF0aW9uUGFyYW1zJikgewogICAgICAgICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hlY2so
aml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc1RydW5jKTsKICAgICB9KTsKLSAgICBQYXRj
aHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNo
cG9pbnRWYWx1ZT4obV9wcm9jLCBJbnQzMiwgT3JpZ2luKCkpOworICAgIFBhdGNocG9pbnRWYWx1
ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVl
PihtX3Byb2MsIEludDMyLCBvcmlnaW4oKSk7CiAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGFyZywg
VmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CiAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9
XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFy
YW1zKSB7CiAgICAgICAgIGppdC50cnVuY2F0ZURvdWJsZVRvSW50MzIocGFyYW1zWzFdLmZwcigp
LCBwYXJhbXNbMF0uZ3ByKCkpOwpAQCAtMTU4MSwxNyArMTU4NiwxNyBAQCBhdXRvIEIzSVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNTRjY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4
cHJlc3Npb25UeQogdGVtcGxhdGU8PgogYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
OkkzMlRydW5jU0YzMj4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgVmFsdWUqIG1heCA9IG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8Q29uc3RGbG9hdFZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCAtc3RhdGljX2Nhc3Q8
ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1pbigpKSk7Ci0gICAgVmFsdWUq
IG1pbiA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RGbG9hdFZhbHVlPihtX3Byb2Ms
IE9yaWdpbigpLCBzdGF0aWNfY2FzdDxmbG9hdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90
Pjo6bWluKCkpKTsKLSAgICBWYWx1ZSogb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFZhbHVlPihtX3Byb2MsIEJpdEFuZCwgT3JpZ2luKCksCi0gICAgICAgIG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgTGVzc1RoYW4sIE9yaWdpbigpLCBhcmcs
IG1heCksCi0gICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywg
R3JlYXRlckVxdWFsLCBPcmlnaW4oKSwgYXJnLCBtaW4pKTsKLSAgICBvdXRPZkJvdW5kcyA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIE9yaWdpbigpLCBv
dXRPZkJvdW5kcywgemVyb0ZvclR5cGUoSTMyKSk7Ci0gICAgQ2hlY2tWYWx1ZSogdHJhcCA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgT3JpZ2lu
KCksIG91dE9mQm91bmRzKTsKKyAgICBWYWx1ZSogbWF4ID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxDb25zdEZsb2F0VmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIC1zdGF0aWNfY2FzdDxmbG9h
dD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpKTsKKyAgICBWYWx1ZSogbWlu
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdEZsb2F0VmFsdWU+KG1fcHJvYywgb3Jp
Z2luKCksIHN0YXRpY19jYXN0PGZsb2F0PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+Ojpt
aW4oKSkpOworICAgIFZhbHVlKiBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8VmFsdWU+KG1fcHJvYywgQml0QW5kLCBvcmlnaW4oKSwKKyAgICAgICAgbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBMZXNzVGhhbiwgb3JpZ2luKCksIGFyZywgbWF4
KSwKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBHcmVh
dGVyRXF1YWwsIG9yaWdpbigpLCBhcmcsIG1pbikpOworICAgIG91dE9mQm91bmRzID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2luKCksIG91dE9m
Qm91bmRzLCB6ZXJvRm9yVHlwZShJMzIpKTsKKyAgICBDaGVja1ZhbHVlKiB0cmFwID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBvcmlnaW4oKSwg
b3V0T2ZCb3VuZHMpOwogICAgIHRyYXAtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYg
aml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CiAgICAgICAgIHRoaXMtPmVt
aXRFeGNlcHRpb25DaGVjayhqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzVHJ1bmMpOwog
ICAgIH0pOwotICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEludDMyLCBPcmlnaW4oKSk7Cisg
ICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgSW50MzIsIG9yaWdpbigpKTsKICAgICBwYXRjaHBv
aW50LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKICAgICBwYXRjaHBvaW50
LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5l
cmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgaml0LnRydW5jYXRlRmxvYXRUb0ludDMy
KHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKQEAgLTE2MDUsMTcgKzE2MTAsMTcg
QEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlRydW5jU0YzMj4oRXhwcmVz
c2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHkKIHRlbXBsYXRlPD4KIGF1dG8gQjNJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpJMzJUcnVuY1VGNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewotICAgIFZhbHVlKiBtYXggPSBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0RG91YmxlVmFsdWU+KG1fcHJvYywgT3JpZ2lu
KCksIHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWlu
KCkpICogLTIuMCk7Ci0gICAgVmFsdWUqIG1pbiA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
Q29uc3REb3VibGVWYWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwgLTEuMCk7Ci0gICAgVmFsdWUqIG91
dE9mQm91bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCaXRB
bmQsIE9yaWdpbigpLAotICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPiht
X3Byb2MsIExlc3NUaGFuLCBPcmlnaW4oKSwgYXJnLCBtYXgpLAotICAgICAgICBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEdyZWF0ZXJUaGFuLCBPcmlnaW4oKSwgYXJn
LCBtaW4pKTsKLSAgICBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFs
dWU+KG1fcHJvYywgRXF1YWwsIE9yaWdpbigpLCBvdXRPZkJvdW5kcywgemVyb0ZvclR5cGUoSTMy
KSk7Ci0gICAgQ2hlY2tWYWx1ZSogdHJhcCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hl
Y2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgT3JpZ2luKCksIG91dE9mQm91bmRzKTsKKyAgICBWYWx1
ZSogbWF4ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdERvdWJsZVZhbHVlPihtX3By
b2MsIG9yaWdpbigpLCBzdGF0aWNfY2FzdDxkb3VibGU+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50
MzJfdD46Om1pbigpKSAqIC0yLjApOworICAgIFZhbHVlKiBtaW4gPSBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PENvbnN0RG91YmxlVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIC0xLjApOworICAg
IFZhbHVlKiBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1f
cHJvYywgQml0QW5kLCBvcmlnaW4oKSwKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxWYWx1ZT4obV9wcm9jLCBMZXNzVGhhbiwgb3JpZ2luKCksIGFyZywgbWF4KSwKKyAgICAgICAg
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBHcmVhdGVyVGhhbiwgb3Jp
Z2luKCksIGFyZywgbWluKSk7CisgICAgb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwgb3V0T2ZCb3VuZHMsIHplcm9G
b3JUeXBlKEkzMikpOworICAgIENoZWNrVmFsdWUqIHRyYXAgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIG9yaWdpbigpLCBvdXRPZkJvdW5kcyk7
CiAgICAgdHJhcC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0
YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKICAgICAgICAgdGhpcy0+ZW1pdEV4Y2VwdGlvbkNo
ZWNrKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNUcnVuYyk7CiAgICAgfSk7Ci0gICAg
UGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQ
YXRjaHBvaW50VmFsdWU+KG1fcHJvYywgSW50MzIsIE9yaWdpbigpKTsKKyAgICBQYXRjaHBvaW50
VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRW
YWx1ZT4obV9wcm9jLCBJbnQzMiwgb3JpZ2luKCkpOwogICAgIHBhdGNocG9pbnQtPmFwcGVuZChh
cmcsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOwogICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRv
cihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMm
IHBhcmFtcykgewogICAgICAgICBqaXQudHJ1bmNhdGVEb3VibGVUb1VpbnQzMihwYXJhbXNbMV0u
ZnByKCksIHBhcmFtc1swXS5ncHIoKSk7CkBAIC0xNjI4LDE3ICsxNjMzLDE3IEBAIGF1dG8gQjNJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJUcnVuY1VGNjQ+KEV4cHJlc3Npb25UeXBlIGFy
ZywgRXhwcmVzc2lvblR5CiB0ZW1wbGF0ZTw+CiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6STMyVHJ1bmNVRjMyPihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBWYWx1ZSogbWF4ID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxDb25zdEZsb2F0VmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIHN0YXRpY19j
YXN0PGZsb2F0PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptaW4oKSkgKiAtMi4wKTsK
LSAgICBWYWx1ZSogbWluID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdEZsb2F0VmFs
dWU+KG1fcHJvYywgT3JpZ2luKCksIC0xLjApOwotICAgIFZhbHVlKiBvdXRPZkJvdW5kcyA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQml0QW5kLCBPcmlnaW4oKSwK
LSAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBMZXNzVGhh
biwgT3JpZ2luKCksIGFyZywgbWF4KSwKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxWYWx1ZT4obV9wcm9jLCBHcmVhdGVyVGhhbiwgT3JpZ2luKCksIGFyZywgbWluKSk7Ci0gICAg
b3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVx
dWFsLCBPcmlnaW4oKSwgb3V0T2ZCb3VuZHMsIHplcm9Gb3JUeXBlKEkzMikpOwotICAgIENoZWNr
VmFsdWUqIHRyYXAgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJv
YywgQ2hlY2ssIE9yaWdpbigpLCBvdXRPZkJvdW5kcyk7CisgICAgVmFsdWUqIG1heCA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RGbG9hdFZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBz
dGF0aWNfY2FzdDxmbG9hdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpICog
LTIuMCk7CisgICAgVmFsdWUqIG1pbiA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RG
bG9hdFZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCAtMS4wKTsKKyAgICBWYWx1ZSogb3V0T2ZCb3Vu
ZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEJpdEFuZCwgb3Jp
Z2luKCksCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywg
TGVzc1RoYW4sIG9yaWdpbigpLCBhcmcsIG1heCksCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8VmFsdWU+KG1fcHJvYywgR3JlYXRlclRoYW4sIG9yaWdpbigpLCBhcmcsIG1pbikp
OworICAgIG91dE9mQm91bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9w
cm9jLCBFcXVhbCwgb3JpZ2luKCksIG91dE9mQm91bmRzLCB6ZXJvRm9yVHlwZShJMzIpKTsKKyAg
ICBDaGVja1ZhbHVlKiB0cmFwID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVl
PihtX3Byb2MsIENoZWNrLCBvcmlnaW4oKSwgb3V0T2ZCb3VuZHMpOwogICAgIHRyYXAtPnNldEdl
bmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25Q
YXJhbXMmKSB7CiAgICAgICAgIHRoaXMtPmVtaXRFeGNlcHRpb25DaGVjayhqaXQsIEV4Y2VwdGlv
blR5cGU6Ok91dE9mQm91bmRzVHJ1bmMpOwogICAgIH0pOwotICAgIFBhdGNocG9pbnRWYWx1ZSog
cGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPiht
X3Byb2MsIEludDMyLCBPcmlnaW4oKSk7CisgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgSW50
MzIsIG9yaWdpbigpKTsKICAgICBwYXRjaHBvaW50LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6U29t
ZVJlZ2lzdGVyKTsKICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBl
cnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAg
ICAgaml0LnRydW5jYXRlRmxvYXRUb1VpbnQzMihwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5n
cHIoKSk7CkBAIC0xNjUxLDE3ICsxNjU2LDE3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpJMzJUcnVuY1VGMzI+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5CiB0
ZW1wbGF0ZTw+CiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNTRjY0
PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKIHsKLSAgICBWYWx1ZSogbWF4ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25z
dERvdWJsZVZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCAtc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6
Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptaW4oKSkpOwotICAgIFZhbHVlKiBtaW4gPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0RG91YmxlVmFsdWU+KG1fcHJvYywgT3JpZ2luKCks
IHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWluKCkp
KTsKLSAgICBWYWx1ZSogb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZh
bHVlPihtX3Byb2MsIEJpdEFuZCwgT3JpZ2luKCksCi0gICAgICAgIG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8VmFsdWU+KG1fcHJvYywgTGVzc1RoYW4sIE9yaWdpbigpLCBhcmcsIG1heCksCi0g
ICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgR3JlYXRlckVx
dWFsLCBPcmlnaW4oKSwgYXJnLCBtaW4pKTsKLSAgICBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIE9yaWdpbigpLCBvdXRPZkJvdW5k
cywgemVyb0ZvclR5cGUoSTMyKSk7Ci0gICAgQ2hlY2tWYWx1ZSogdHJhcCA9IG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgT3JpZ2luKCksIG91dE9m
Qm91bmRzKTsKKyAgICBWYWx1ZSogbWF4ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25z
dERvdWJsZVZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCAtc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6
Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptaW4oKSkpOworICAgIFZhbHVlKiBtaW4gPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0RG91YmxlVmFsdWU+KG1fcHJvYywgb3JpZ2luKCks
IHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWluKCkp
KTsKKyAgICBWYWx1ZSogb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZh
bHVlPihtX3Byb2MsIEJpdEFuZCwgb3JpZ2luKCksCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8VmFsdWU+KG1fcHJvYywgTGVzc1RoYW4sIG9yaWdpbigpLCBhcmcsIG1heCksCisg
ICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgR3JlYXRlckVx
dWFsLCBvcmlnaW4oKSwgYXJnLCBtaW4pKTsKKyAgICBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLCBvdXRPZkJvdW5k
cywgemVyb0ZvclR5cGUoSTMyKSk7CisgICAgQ2hlY2tWYWx1ZSogdHJhcCA9IG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgb3JpZ2luKCksIG91dE9m
Qm91bmRzKTsKICAgICB0cmFwLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwg
Y29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgewogICAgICAgICB0aGlzLT5lbWl0RXhj
ZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc1RydW5jKTsKICAgICB9
KTsKLSAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBJbnQ2NCwgT3JpZ2luKCkpOworICAgIFBh
dGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0
Y2hwb2ludFZhbHVlPihtX3Byb2MsIEludDY0LCBvcmlnaW4oKSk7CiAgICAgcGF0Y2hwb2ludC0+
YXBwZW5kKGFyZywgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CiAgICAgcGF0Y2hwb2ludC0+c2V0
R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlv
blBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgIGppdC50cnVuY2F0ZURvdWJsZVRvSW50NjQocGFy
YW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOwpAQCAtMTY3NCwxMyArMTY3OSwxMyBAQCBh
dXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNTRjY0PihFeHByZXNzaW9u
VHlwZSBhcmcsIEV4cHJlc3Npb25UeQogdGVtcGxhdGU8PgogYXV0byBCM0lSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6Okk2NFRydW5jVUY2ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgVmFsdWUqIG1heCA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3REb3VibGVWYWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwg
c3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptaW4oKSkg
KiAtMi4wKTsKLSAgICBWYWx1ZSogbWluID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25z
dERvdWJsZVZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCAtMS4wKTsKLSAgICBWYWx1ZSogb3V0T2ZC
b3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEJpdEFuZCwg
T3JpZ2luKCksCi0gICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJv
YywgTGVzc1RoYW4sIE9yaWdpbigpLCBhcmcsIG1heCksCi0gICAgICAgIG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgR3JlYXRlclRoYW4sIE9yaWdpbigpLCBhcmcsIG1p
bikpOwotICAgIG91dE9mQm91bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4o
bV9wcm9jLCBFcXVhbCwgT3JpZ2luKCksIG91dE9mQm91bmRzLCB6ZXJvRm9yVHlwZShJMzIpKTsK
LSAgICBDaGVja1ZhbHVlKiB0cmFwID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1Zh
bHVlPihtX3Byb2MsIENoZWNrLCBPcmlnaW4oKSwgb3V0T2ZCb3VuZHMpOworICAgIFZhbHVlKiBt
YXggPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0RG91YmxlVmFsdWU+KG1fcHJvYywg
b3JpZ2luKCksIHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90
Pjo6bWluKCkpICogLTIuMCk7CisgICAgVmFsdWUqIG1pbiA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8Q29uc3REb3VibGVWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgLTEuMCk7CisgICAgVmFs
dWUqIG91dE9mQm91bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9j
LCBCaXRBbmQsIG9yaWdpbigpLAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZh
bHVlPihtX3Byb2MsIExlc3NUaGFuLCBvcmlnaW4oKSwgYXJnLCBtYXgpLAorICAgICAgICBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEdyZWF0ZXJUaGFuLCBvcmlnaW4o
KSwgYXJnLCBtaW4pKTsKKyAgICBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLCBvdXRPZkJvdW5kcywgemVyb0ZvclR5
cGUoSTMyKSk7CisgICAgQ2hlY2tWYWx1ZSogdHJhcCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgb3JpZ2luKCksIG91dE9mQm91bmRzKTsKICAg
ICB0cmFwLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2tt
YXBHZW5lcmF0aW9uUGFyYW1zJikgewogICAgICAgICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hlY2so
aml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc1RydW5jKTsKICAgICB9KTsKQEAgLTE2OTAs
OSArMTY5NSw5IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRUcnVuY1VG
NjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5CiAgICAgICAgIC8vIFNpbmNlIHg4
NiBkb2Vzbid0IGhhdmUgYW4gaW5zdHJ1Y3Rpb24gdG8gY29udmVydCBmbG9hdGluZyBwb2ludHMg
dG8gdW5zaWduZWQgaW50ZWdlcnMsIHdlIGF0IGxlYXN0IHRyeSB0byBkbyB0aGUgc21hcnQgdGhp
bmcgaWYKICAgICAgICAgLy8gdGhlIG51bWJlcnMgYXJlIHdvdWxkIGJlIHBvc2l0aXZlIGFueXdh
eSBhcyBhIHNpZ25lZCBpbnRlZ2VyLiBTaW5jZSB3ZSBjYW5ub3QgbWF0ZXJpYWxpemUgY29uc3Rh
bnRzIGludG8gZnBycyB3ZSBoYXZlIGIzIGRvIGl0CiAgICAgICAgIC8vIHNvIHdlIGNhbiBwb29s
IHRoZW0gaWYgbmVlZGVkLgotICAgICAgICBjb25zdGFudCA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8Q29uc3REb3VibGVWYWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwgc3RhdGljX2Nhc3Q8ZG91
YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4KCkgLSBzdGQ6Om51bWVyaWNf
bGltaXRzPGludDY0X3Q+OjptYXgoKSkpOworICAgICAgICBjb25zdGFudCA9IG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8Q29uc3REb3VibGVWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgc3RhdGlj
X2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4KCkgLSBzdGQ6
Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptYXgoKSkpOwogICAgIH0KLSAgICBQYXRjaHBvaW50
VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRW
YWx1ZT4obV9wcm9jLCBJbnQ2NCwgT3JpZ2luKCkpOworICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0
Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3By
b2MsIEludDY0LCBvcmlnaW4oKSk7CiAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGFyZywgVmFsdWVS
ZXA6OlNvbWVSZWdpc3Rlcik7CiAgICAgaWYgKGlzWDg2KCkpIHsKICAgICAgICAgcGF0Y2hwb2lu
dC0+YXBwZW5kKGNvbnN0YW50LCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKQEAgLTE3MTYsMTcg
KzE3MjEsMTcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydW5jVUY2
ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHkKIHRlbXBsYXRlPD4KIGF1dG8gQjNJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRUcnVuY1NGMzI+KEV4cHJlc3Npb25UeXBlIGFy
ZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewotICAgIFZhbHVl
KiBtYXggPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0RmxvYXRWYWx1ZT4obV9wcm9j
LCBPcmlnaW4oKSwgLXN0YXRpY19jYXN0PGZsb2F0PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0
X3Q+OjptaW4oKSkpOwotICAgIFZhbHVlKiBtaW4gPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PENvbnN0RmxvYXRWYWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0
ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1pbigpKSk7Ci0gICAgVmFsdWUqIG91dE9mQm91
bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCaXRBbmQsIE9y
aWdpbigpLAotICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2Ms
IExlc3NUaGFuLCBPcmlnaW4oKSwgYXJnLCBtYXgpLAotICAgICAgICBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEdyZWF0ZXJFcXVhbCwgT3JpZ2luKCksIGFyZywgbWlu
KSk7Ci0gICAgb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPiht
X3Byb2MsIEVxdWFsLCBPcmlnaW4oKSwgb3V0T2ZCb3VuZHMsIHplcm9Gb3JUeXBlKEkzMikpOwot
ICAgIENoZWNrVmFsdWUqIHRyYXAgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENoZWNrVmFs
dWU+KG1fcHJvYywgQ2hlY2ssIE9yaWdpbigpLCBvdXRPZkJvdW5kcyk7CisgICAgVmFsdWUqIG1h
eCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RGbG9hdFZhbHVlPihtX3Byb2MsIG9y
aWdpbigpLCAtc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46
Om1pbigpKSk7CisgICAgVmFsdWUqIG1pbiA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29u
c3RGbG9hdFZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBzdGF0aWNfY2FzdDxmbG9hdD4oc3RkOjpu
dW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWluKCkpKTsKKyAgICBWYWx1ZSogb3V0T2ZCb3VuZHMg
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEJpdEFuZCwgb3JpZ2lu
KCksCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgTGVz
c1RoYW4sIG9yaWdpbigpLCBhcmcsIG1heCksCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8VmFsdWU+KG1fcHJvYywgR3JlYXRlckVxdWFsLCBvcmlnaW4oKSwgYXJnLCBtaW4pKTsK
KyAgICBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJv
YywgRXF1YWwsIG9yaWdpbigpLCBvdXRPZkJvdW5kcywgemVyb0ZvclR5cGUoSTMyKSk7CisgICAg
Q2hlY2tWYWx1ZSogdHJhcCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4o
bV9wcm9jLCBDaGVjaywgb3JpZ2luKCksIG91dE9mQm91bmRzKTsKICAgICB0cmFwLT5zZXRHZW5l
cmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFy
YW1zJikgewogICAgICAgICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRpb25U
eXBlOjpPdXRPZkJvdW5kc1RydW5jKTsKICAgICB9KTsKLSAgICBQYXRjaHBvaW50VmFsdWUqIHBh
dGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9w
cm9jLCBJbnQ2NCwgT3JpZ2luKCkpOworICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEludDY0
LCBvcmlnaW4oKSk7CiAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGFyZywgVmFsdWVSZXA6OlNvbWVS
ZWdpc3Rlcik7CiAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJz
JiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAg
IGppdC50cnVuY2F0ZUZsb2F0VG9JbnQ2NChwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5ncHIo
KSk7CkBAIC0xNzM5LDEzICsxNzQ0LDEzIEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BU
eXBlOjpJNjRUcnVuY1NGMzI+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5CiB0ZW1w
bGF0ZTw+CiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNVRjMyPihF
eHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKIHsKLSAgICBWYWx1ZSogbWF4ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdEZs
b2F0VmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIHN0YXRpY19jYXN0PGZsb2F0PihzdGQ6Om51bWVy
aWNfbGltaXRzPGludDY0X3Q+OjptaW4oKSkgKiAtMi4wKTsKLSAgICBWYWx1ZSogbWluID0gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdEZsb2F0VmFsdWU+KG1fcHJvYywgT3JpZ2luKCks
IC0xLjApOwotICAgIFZhbHVlKiBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8VmFsdWU+KG1fcHJvYywgQml0QW5kLCBPcmlnaW4oKSwKLSAgICAgICAgbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBMZXNzVGhhbiwgT3JpZ2luKCksIGFyZywgbWF4
KSwKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBHcmVh
dGVyVGhhbiwgT3JpZ2luKCksIGFyZywgbWluKSk7Ci0gICAgb3V0T2ZCb3VuZHMgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBPcmlnaW4oKSwgb3V0T2ZC
b3VuZHMsIHplcm9Gb3JUeXBlKEkzMikpOwotICAgIENoZWNrVmFsdWUqIHRyYXAgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIE9yaWdpbigpLCBv
dXRPZkJvdW5kcyk7CisgICAgVmFsdWUqIG1heCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
Q29uc3RGbG9hdFZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBzdGF0aWNfY2FzdDxmbG9hdD4oc3Rk
OjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWluKCkpICogLTIuMCk7CisgICAgVmFsdWUqIG1p
biA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RGbG9hdFZhbHVlPihtX3Byb2MsIG9y
aWdpbigpLCAtMS4wKTsKKyAgICBWYWx1ZSogb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEJpdEFuZCwgb3JpZ2luKCksCisgICAgICAgIG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgTGVzc1RoYW4sIG9yaWdpbigpLCBh
cmcsIG1heCksCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJv
YywgR3JlYXRlclRoYW4sIG9yaWdpbigpLCBhcmcsIG1pbikpOworICAgIG91dE9mQm91bmRzID0g
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2luKCks
IG91dE9mQm91bmRzLCB6ZXJvRm9yVHlwZShJMzIpKTsKKyAgICBDaGVja1ZhbHVlKiB0cmFwID0g
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBvcmln
aW4oKSwgb3V0T2ZCb3VuZHMpOwogICAgIHRyYXAtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVs
cGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CiAgICAgICAgIHRo
aXMtPmVtaXRFeGNlcHRpb25DaGVjayhqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzVHJ1
bmMpOwogICAgIH0pOwpAQCAtMTc1NSw5ICsxNzYwLDkgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6Okk2NFRydW5jVUYzMj4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9u
VHkKICAgICAgICAgLy8gU2luY2UgeDg2IGRvZXNuJ3QgaGF2ZSBhbiBpbnN0cnVjdGlvbiB0byBj
b252ZXJ0IGZsb2F0aW5nIHBvaW50cyB0byB1bnNpZ25lZCBpbnRlZ2Vycywgd2UgYXQgbGVhc3Qg
dHJ5IHRvIGRvIHRoZSBzbWFydCB0aGluZyBpZgogICAgICAgICAvLyB0aGUgbnVtYmVycyBhcmUg
d291bGQgYmUgcG9zaXRpdmUgYW55d2F5IGFzIGEgc2lnbmVkIGludGVnZXIuIFNpbmNlIHdlIGNh
bm5vdCBtYXRlcmlhbGl6ZSBjb25zdGFudHMgaW50byBmcHJzIHdlIGhhdmUgYjMgZG8gaXQKICAg
ICAgICAgLy8gc28gd2UgY2FuIHBvb2wgdGhlbSBpZiBuZWVkZWQuCi0gICAgICAgIGNvbnN0YW50
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdEZsb2F0VmFsdWU+KG1fcHJvYywgT3Jp
Z2luKCksIHN0YXRpY19jYXN0PGZsb2F0PihzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6
bWF4KCkgLSBzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptYXgoKSkpOworICAgICAgICBj
b25zdGFudCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RGbG9hdFZhbHVlPihtX3By
b2MsIG9yaWdpbigpLCBzdGF0aWNfY2FzdDxmbG9hdD4oc3RkOjpudW1lcmljX2xpbWl0czx1aW50
NjRfdD46Om1heCgpIC0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWF4KCkpKTsKICAg
ICB9Ci0gICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgSW50NjQsIE9yaWdpbigpKTsKKyAgICBQ
YXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBh
dGNocG9pbnRWYWx1ZT4obV9wcm9jLCBJbnQ2NCwgb3JpZ2luKCkpOwogICAgIHBhdGNocG9pbnQt
PmFwcGVuZChhcmcsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOwogICAgIGlmIChpc1g4NigpKSB7
CiAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChjb25zdGFudCwgVmFsdWVSZXA6OlNvbWVSZWdp
c3Rlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rp
b25QYXJzZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvblBhcnNl
ci5oCmluZGV4IGQ0MjA1NjBiNzI0ZTRiNDY1NWQyNmFhY2NjN2Q0Y2UyMWFkNGNhNzcuLjc1ODdm
MWJmNDlmMzAzMWVmYzJlMWJmZTQ2OGVmNjY0NGZhMTQxNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvblBhcnNlci5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvblBhcnNlci5oCkBAIC01NSwxMiArNTUsMTUgQEAg
cHVibGljOgogICAgICAgICBDb250cm9sVHlwZSBjb250cm9sRGF0YTsKICAgICB9OwogCisgICAg
T3BUeXBlIGN1cnJlbnRPcGNvZGUoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRPcGNvZGU7IH0K
KyAgICBzaXplX3QgY3VycmVudE9wY29kZVN0YXJ0aW5nT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4g
bV9jdXJyZW50T3Bjb2RlU3RhcnRpbmdPZmZzZXQ7IH0KKwogcHJpdmF0ZToKICAgICBzdGF0aWMg
Y29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiAKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5V
U0VEX1JFVFVSTiBwYXJzZUJvZHkoKTsKLSAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JF
VFVSTiBwYXJzZUV4cHJlc3Npb24oT3BUeXBlKTsKLSAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5V
U0VEX1JFVFVSTiBwYXJzZVVucmVhY2hhYmxlRXhwcmVzc2lvbihPcFR5cGUpOworICAgIFBhcnRp
YWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlRXhwcmVzc2lvbigpOworICAgIFBhcnRp
YWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlVW5yZWFjaGFibGVFeHByZXNzaW9uKCk7
CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gdW5pZnlDb250cm9sKFZlY3Rv
cjxFeHByZXNzaW9uVHlwZT4mLCB1bnNpZ25lZCBsZXZlbCk7CiAKICNkZWZpbmUgV0FTTV9UUllf
UE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5UTyhyZXN1bHQsIHdoYXQpIGRvIHsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXApAQCAtODQsNiArODcsMTAgQEAgcHJpdmF0ZToKICAgICBjb25z
dCBTaWduYXR1cmUqIG1fc2lnbmF0dXJlOwogICAgIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBt
X2luZm87CiAgICAgY29uc3QgVmVjdG9yPFNpZ25hdHVyZUluZGV4PiYgbV9tb2R1bGVTaWduYXR1
cmVJbmRpY2VzVG9VbmlxdWVkU2lnbmF0dXJlSW5kaWNlczsKKworICAgIE9wVHlwZSBtX2N1cnJl
bnRPcGNvZGU7CisgICAgc2l6ZV90IG1fY3VycmVudE9wY29kZVN0YXJ0aW5nT2Zmc2V0IHsgMCB9
OworCiAgICAgdW5zaWduZWQgbV91bnJlYWNoYWJsZUJsb2NrcyB7IDAgfTsKIH07CiAKQEAgLTk3
LDYgKzEwNCw3IEBAIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpGdW5jdGlvblBhcnNlcihWTSog
dm0sIENvbnRleHQmIGNvbnRleHQsIGNvbnN0IHVpbnQ4X3QqCiB7CiAgICAgaWYgKHZlcmJvc2Up
CiAgICAgICAgIGRhdGFMb2dMbigiUGFyc2luZyBmdW5jdGlvbiBzdGFydGluZyBhdDogIiwgKHVp
bnRwdHJfdClmdW5jdGlvblN0YXJ0LCAiIG9mIGxlbmd0aDogIiwgZnVuY3Rpb25MZW5ndGgpOwor
ICAgIG1fY29udGV4dC5zZXRQYXJzZXIodGhpcyk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENv
bnRleHQ+CkBAIC0xMjksMTggKzEzNywyMSBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+
OjpwYXJzZUJvZHkoKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgbV9jb250cm9sU3RhY2suYXBwZW5k
KHsgRXhwcmVzc2lvbkxpc3QoKSwgbV9jb250ZXh0LmFkZFRvcExldmVsKG1fc2lnbmF0dXJlLT5y
ZXR1cm5UeXBlKCkpIH0pOwogICAgIHVpbnQ4X3Qgb3A7CiAgICAgd2hpbGUgKG1fY29udHJvbFN0
YWNrLnNpemUoKSkgeworICAgICAgICBtX2N1cnJlbnRPcGNvZGVTdGFydGluZ09mZnNldCA9IG1f
b2Zmc2V0OwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVVJbnQ4KG9wKSwgImNh
bid0IGRlY29kZSBvcGNvZGUiKTsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighaXNWYWxp
ZE9wVHlwZShvcCksICJpbnZhbGlkIG9wY29kZSAiLCBvcCk7CiAKKyAgICAgICAgbV9jdXJyZW50
T3Bjb2RlID0gc3RhdGljX2Nhc3Q8T3BUeXBlPihvcCk7CisKICAgICAgICAgaWYgKHZlcmJvc2Up
IHsKICAgICAgICAgICAgIGRhdGFMb2dMbigicHJvY2Vzc2luZyBvcCAoIiwgbV91bnJlYWNoYWJs
ZUJsb2NrcywgIik6ICIsICBSYXdQb2ludGVyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG9wKSks
ICIsICIsIG1ha2VTdHJpbmcoc3RhdGljX2Nhc3Q8T3BUeXBlPihvcCkpLCAiIGF0IG9mZnNldDog
IiwgUmF3UG9pbnRlcihyZWludGVycHJldF9jYXN0PHZvaWQqPihtX29mZnNldCkpKTsKICAgICAg
ICAgICAgIG1fY29udGV4dC5kdW1wKG1fY29udHJvbFN0YWNrLCAmbV9leHByZXNzaW9uU3RhY2sp
OwogICAgICAgICB9CiAKICAgICAgICAgaWYgKG1fdW5yZWFjaGFibGVCbG9ja3MpCi0gICAgICAg
ICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlVW5yZWFjaGFibGVFeHByZXNzaW9u
KHN0YXRpY19jYXN0PE9wVHlwZT4ob3ApKSk7CisgICAgICAgICAgICBXQVNNX0ZBSUxfSUZfSEVM
UEVSX0ZBSUxTKHBhcnNlVW5yZWFjaGFibGVFeHByZXNzaW9uKCkpOwogICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlRXhwcmVzc2lvbihzdGF0
aWNfY2FzdDxPcFR5cGU+KG9wKSkpOworICAgICAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9G
QUlMUyhwYXJzZUV4cHJlc3Npb24oKSk7CiAgICAgfQogCiAgICAgQVNTRVJUKG9wID09IE9wVHlw
ZTo6RW5kKTsKQEAgLTE3OCw5ICsxODksOSBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+
Ojp1bmFyeUNhc2UoKSAtPiBQYXJ0aWFsUmVzdWx0CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENv
bnRleHQ+Ci1hdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24oT3BU
eXBlIG9wKSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+Ojpw
YXJzZUV4cHJlc3Npb24oKSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgc3dpdGNoIChvcCkgewor
ICAgIHN3aXRjaCAobV9jdXJyZW50T3Bjb2RlKSB7CiAjZGVmaW5lIENSRUFURV9DQVNFKG5hbWUs
IGlkLCBiM29wLCBpbmMpIGNhc2UgT3BUeXBlOjpuYW1lOiByZXR1cm4gYmluYXJ5Q2FzZTxPcFR5
cGU6Om5hbWU+KCk7CiAgICAgRk9SX0VBQ0hfV0FTTV9CSU5BUllfT1AoQ1JFQVRFX0NBU0UpCiAj
dW5kZWYgQ1JFQVRFX0NBU0UKQEAgLTIxNSw3ICsyMjYsNyBAQCBhdXRvIEZ1bmN0aW9uUGFyc2Vy
PENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24oT3BUeXBlIG9wKSAtPiBQYXJ0aWFsUmVzdWx0CiAg
ICAgICAgIC8vIEZJWE1FIHZhbGlkYXRlIGFsaWdubWVudC4gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2ODgzNgogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFw
YXJzZVZhclVJbnQzMihvZmZzZXQpLCAiY2FuJ3QgZ2V0IGxvYWQgb2Zmc2V0Iik7CiAgICAgICAg
IFdBU01fVFJZX1BPUF9FWFBSRVNTSU9OX1NUQUNLX0lOVE8ocG9pbnRlciwgImxvYWQgcG9pbnRl
ciIpOwotICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChsb2FkKHN0YXRpY19jYXN0PExv
YWRPcFR5cGU+KG9wKSwgcG9pbnRlciwgcmVzdWx0LCBvZmZzZXQpKTsKKyAgICAgICAgV0FTTV9U
UllfQUREX1RPX0NPTlRFWFQobG9hZChzdGF0aWNfY2FzdDxMb2FkT3BUeXBlPihtX2N1cnJlbnRP
cGNvZGUpLCBwb2ludGVyLCByZXN1bHQsIG9mZnNldCkpOwogICAgICAgICBtX2V4cHJlc3Npb25T
dGFjay5hcHBlbmQocmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CkBAIC0yMzAs
NyArMjQxLDcgQEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VFeHByZXNzaW9u
KE9wVHlwZSBvcCkgLT4gUGFydGlhbFJlc3VsdAogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KCFwYXJzZVZhclVJbnQzMihvZmZzZXQpLCAiY2FuJ3QgZ2V0IHN0b3JlIG9mZnNldCIpOwogICAg
ICAgICBXQVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKHZhbHVlLCAic3RvcmUgdmFs
dWUiKTsKICAgICAgICAgV0FTTV9UUllfUE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5UTyhwb2ludGVy
LCAic3RvcmUgcG9pbnRlciIpOwotICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChzdG9y
ZShzdGF0aWNfY2FzdDxTdG9yZU9wVHlwZT4ob3ApLCBwb2ludGVyLCB2YWx1ZSwgb2Zmc2V0KSk7
CisgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKHN0b3JlKHN0YXRpY19jYXN0PFN0b3Jl
T3BUeXBlPihtX2N1cnJlbnRPcGNvZGUpLCBwb2ludGVyLCB2YWx1ZSwgb2Zmc2V0KSk7CiAgICAg
ICAgIHJldHVybiB7IH07CiAgICAgfQogI3VuZGVmIENSRUFURV9DQVNFCkBAIC00MDMsNyArNDE0
LDcgQEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VFeHByZXNzaW9uKE9wVHlw
ZSBvcCkgLT4gUGFydGlhbFJlc3VsdAogICAgICAgICBFeHByZXNzaW9uVHlwZSBjb25kaXRpb24g
PSBDb250ZXh0OjplbXB0eUV4cHJlc3Npb247CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IXBhcnNlVmFyVUludDMyKHRhcmdldCksICJjYW4ndCBnZXQgYnIgLyBicl9pZidzIHRhcmdldCIp
OwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHRhcmdldCA+PSBtX2NvbnRyb2xTdGFjay5z
aXplKCksICJiciAvIGJyX2lmJ3MgdGFyZ2V0ICIsIHRhcmdldCwgIiBleGNlZWRzIGNvbnRyb2wg
c3RhY2sgc2l6ZSAiLCBtX2NvbnRyb2xTdGFjay5zaXplKCkpOwotICAgICAgICBpZiAob3AgPT0g
QnJJZikKKyAgICAgICAgaWYgKG1fY3VycmVudE9wY29kZSA9PSBCcklmKQogICAgICAgICAgICAg
V0FTTV9UUllfUE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5UTyhjb25kaXRpb24sICJiciAvIGJyX2lm
IGNvbmRpdGlvbiIpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX3VucmVhY2hhYmxlQmxv
Y2tzID0gMTsKQEAgLTUxOCwxMSArNTI5LDExIEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4
dD46OnBhcnNlRXhwcmVzc2lvbihPcFR5cGUgb3ApIC0+IFBhcnRpYWxSZXN1bHQKIAogLy8gRklY
TUU6IFdlIHNob3VsZCB0cnkgdG8gdXNlIHRoZSBzYW1lIGRlY29kZXIgZnVuY3Rpb24gZm9yIGJv
dGggdW5yZWFjaGFibGUgYW5kIHJlYWNoYWJsZSBjb2RlLiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTY1OTY1CiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb250ZXh0PgotYXV0
byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VVbnJlYWNoYWJsZUV4cHJlc3Npb24oT3BU
eXBlIG9wKSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+Ojpw
YXJzZVVucmVhY2hhYmxlRXhwcmVzc2lvbigpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBBU1NF
UlQobV91bnJlYWNoYWJsZUJsb2Nrcyk7CiAjZGVmaW5lIENSRUFURV9DQVNFKG5hbWUsIGlkLCBi
M29wLCBpbmMpIGNhc2UgT3BUeXBlOjpuYW1lOgotICAgIHN3aXRjaCAob3ApIHsKKyAgICBzd2l0
Y2ggKG1fY3VycmVudE9wY29kZSkgewogICAgIGNhc2UgRWxzZTogewogICAgICAgICBpZiAobV91
bnJlYWNoYWJsZUJsb2NrcyA+IDEpCiAgICAgICAgICAgICByZXR1cm4geyB9OwpAQCAtNTQ5LDcg
KzU2MCw3IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlVW5yZWFjaGFibGVF
eHByZXNzaW9uKE9wVHlwZSBvcCkgLT4gUGFydGlhbFJlCiAgICAgY2FzZSBCbG9jazogewogICAg
ICAgICBtX3VucmVhY2hhYmxlQmxvY2tzKys7CiAgICAgICAgIFR5cGUgdW51c2VkOwotICAgICAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVJlc3VsdFR5cGUodW51c2VkKSwgImNhbid0IGdl
dCBpbmxpbmUgdHlwZSBmb3IgIiwgb3AsICIgaW4gdW5yZWFjaGFibGUgY29udGV4dCIpOworICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVJlc3VsdFR5cGUodW51c2VkKSwgImNhbid0
IGdldCBpbmxpbmUgdHlwZSBmb3IgIiwgbV9jdXJyZW50T3Bjb2RlLCAiIGluIHVucmVhY2hhYmxl
IGNvbnRleHQiKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKQEAgLTU5MCw4ICs2MDEs
OCBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZVVucmVhY2hhYmxlRXhwcmVz
c2lvbihPcFR5cGUgb3ApIC0+IFBhcnRpYWxSZQogICAgIEZPUl9FQUNIX1dBU01fTUVNT1JZX0xP
QURfT1AoQ1JFQVRFX0NBU0UpCiAgICAgRk9SX0VBQ0hfV0FTTV9NRU1PUllfU1RPUkVfT1AoQ1JF
QVRFX0NBU0UpIHsKICAgICAgICAgdWludDMyX3QgdW51c2VkOwotICAgICAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMih1bnVzZWQpLCAiY2FuJ3QgZ2V0IGZpcnN0IGltbWVk
aWF0ZSBmb3IgIiwgb3AsICIgaW4gdW5yZWFjaGFibGUgY29udGV4dCIpOwotICAgICAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMih1bnVzZWQpLCAiY2FuJ3QgZ2V0IHNlY29u
ZCBpbW1lZGlhdGUgZm9yICIsIG9wLCAiIGluIHVucmVhY2hhYmxlIGNvbnRleHQiKTsKKyAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIodW51c2VkKSwgImNhbid0IGdl
dCBmaXJzdCBpbW1lZGlhdGUgZm9yICIsIG1fY3VycmVudE9wY29kZSwgIiBpbiB1bnJlYWNoYWJs
ZSBjb250ZXh0Iik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMy
KHVudXNlZCksICJjYW4ndCBnZXQgc2Vjb25kIGltbWVkaWF0ZSBmb3IgIiwgbV9jdXJyZW50T3Bj
b2RlLCAiIGluIHVucmVhY2hhYmxlIGNvbnRleHQiKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAg
ICB9CiAKQEAgLTYwNyw3ICs2MTgsNyBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+Ojpw
YXJzZVVucmVhY2hhYmxlRXhwcmVzc2lvbihPcFR5cGUgb3ApIC0+IFBhcnRpYWxSZQogICAgIGNh
c2UgQnJJZjoKICAgICBjYXNlIENhbGw6IHsKICAgICAgICAgdWludDMyX3QgdW51c2VkOwotICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMih1bnVzZWQpLCAiY2FuJ3Qg
Z2V0IGltbWVkaWF0ZSBmb3IgIiwgb3AsICIgaW4gdW5yZWFjaGFibGUgY29udGV4dCIpOworICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMih1bnVzZWQpLCAiY2FuJ3Qg
Z2V0IGltbWVkaWF0ZSBmb3IgIiwgbV9jdXJyZW50T3Bjb2RlLCAiIGluIHVucmVhY2hhYmxlIGNv
bnRleHQiKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGNvZGVPcmlnaW4uY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbU9wY29kZU9yaWdpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTExODgyZjcw
NjVlZDc1ZWIxYTYxOGNkZjI5ODhiZTRhZDgxYzI3ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGNvZGVPcmlnaW4uY3BwCkBAIC0wLDAgKzEsNDAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2FzbU9wY29kZU9yaWdpbi5oIgorCisjaWYgRU5BQkxF
KFdFQkFTU0VNQkxZKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20geworCit2b2lk
IE9wY29kZU9yaWdpbjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5w
cmludCgie29wY29kZTogIiwgbWFrZVN0cmluZyhvcGNvZGUpLCAiLCBsb2NhdGlvbjogIiwgbG9j
YXRpb24sICJ9Iik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAv
LyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtT3Bjb2RlT3JpZ2luLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
T3Bjb2RlT3JpZ2luLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGIxZGMwNzZmYTEwZDQ3MDM4ZDY4NTMxMmQ4ODFi
M2I2MTlkMWIxOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21PcGNvZGVPcmlnaW4uaApAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2lu
Y2x1ZGUgIkIzT3JpZ2luLmgiCisjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIFdhc20geworCitjbGFzcyBPcGNvZGVPcmlnaW4geworICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE9wY29kZU9yaWdp
bik7CitwdWJsaWM6CisgICAgT3Bjb2RlT3JpZ2luKE9wVHlwZSBvcCwgc2l6ZV90IG9mZnNldCkK
KyAgICAgICAgOiBvcGNvZGUob3ApCisgICAgICAgICwgbG9jYXRpb24ob2Zmc2V0KQorICAgIHsK
KyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworICAgIGNvbnN0
IE9wVHlwZSBvcGNvZGU7CisgICAgY29uc3Qgc2l6ZV90IGxvY2F0aW9uOworfTsKKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVmFsaWRhdGUuY3BwCmluZGV4IDkyMzg1OTRi
YTk3ZjUzZjkyYWE1ZGMyMDg0OTU1NmFkYjg0ZmFmODkuLjhhNDU3ODNkODZlYWUyYjIwMTU5ODc5
YmMwNzQzMDA1ZTM4NzZlOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21WYWxpZGF0ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVZh
bGlkYXRlLmNwcApAQCAtMTQ5LDYgKzE0OSw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB2b2lk
IGR1bXAoY29uc3QgVmVjdG9yPENvbnRyb2xFbnRyeT4mLCBjb25zdCBFeHByZXNzaW9uTGlzdCop
OworICAgIHZvaWQgc2V0UGFyc2VyKEZ1bmN0aW9uUGFyc2VyPFZhbGlkYXRlPiopIHsgfQogCiBw
cml2YXRlOgogICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gdW5pZnkoY29uc3QgRXhwcmVz
c2lvbkxpc3QmLCBjb25zdCBDb250cm9sRGF0YSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vZ2VuZXJhdGVXYXNtQjNJUkdlbmVyYXRvcklubGluZXNIZWFkZXIucHkg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9nZW5lcmF0ZVdhc21CM0lSR2VuZXJhdG9ySW5s
aW5lc0hlYWRlci5weQppbmRleCA1OTZkODU5N2FmZTQxYzM3ZWIxOTUwZjFmMGZhMGE1ODI5Yjll
MDdhLi4xOWMyZmNjOTExMDI3ODIzOWQxYzQyNGM4ODIwOWU5MjkxNGJhNTMyIDEwMDc1NQotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9nZW5lcmF0ZVdhc21CM0lSR2VuZXJhdG9ySW5s
aW5lc0hlYWRlci5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9nZW5lcmF0ZVdh
c21CM0lSR2VuZXJhdG9ySW5saW5lc0hlYWRlci5weQpAQCAtMTU5LDcgKzE1OSw3IEBAIGNsYXNz
IENvZGVHZW5lcmF0b3I6CiAgICAgZGVmIGdlbmVyYXRlKHNlbGYsIHdhc21PcCk6CiAgICAgICAg
IGlmIGxlbihzZWxmLnRva2VucykgPT0gMToKICAgICAgICAgICAgIHBhcmFtcyA9IFsiYXJnIiAr
IHN0cihwYXJhbSkgZm9yIHBhcmFtIGluIHJhbmdlKGxlbih3YXNtT3BbInBhcmFtZXRlciJdKSld
Ci0gICAgICAgICAgICByZXR1cm4gIiAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFZhbHVlPihtX3Byb2MsIEIzOjoiICsgc2VsZi50b2tlbigpICsgIiwgT3JpZ2luKCksICIg
KyAiLCAiLmpvaW4ocGFyYW1zKSArICIpIgorICAgICAgICAgICAgcmV0dXJuICIgICAgcmVzdWx0
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCMzo6IiArIHNlbGYu
dG9rZW4oKSArICIsIG9yaWdpbigpLCAiICsgIiwgIi5qb2luKHBhcmFtcykgKyAiKSIKICAgICAg
ICAgcmVzdWx0ID0gc2VsZi5nZW5lcmF0ZU9wY29kZSgpCiAgICAgICAgIHNlbGYuY29kZS5hcHBl
bmQoInJlc3VsdCA9ICIgKyByZXN1bHQpCiAgICAgICAgIHJldHVybiAiICAgICIgKyAiICAgIFxu
Ii5qb2luKHNlbGYuY29kZSkKQEAgLTE3MCwxMSArMTcwLDExIEBAIGRlZiB0ZW1wKGluZGV4KToK
IAogCiBkZWYgZ2VuZXJhdGVCM09wQ29kZShpbmRleCwgb3AsIHBhcmFtcyk6Ci0gICAgcmV0dXJu
ICJWYWx1ZSogIiArIHRlbXAoaW5kZXgpICsgIiA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
VmFsdWU+KG1fcHJvYywgQjM6OiIgKyBvcCArICIsIE9yaWdpbigpLCAiICsgIiwgIi5qb2luKHBh
cmFtcykgKyAiKTsiCisgICAgcmV0dXJuICJWYWx1ZSogIiArIHRlbXAoaW5kZXgpICsgIiA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQjM6OiIgKyBvcCArICIsIG9y
aWdpbigpLCAiICsgIiwgIi5qb2luKHBhcmFtcykgKyAiKTsiCiAKIAogZGVmIGdlbmVyYXRlQ29u
c3RDb2RlKGluZGV4LCB2YWx1ZSwgdHlwZSk6Ci0gICAgcmV0dXJuICJWYWx1ZSogIiArIHRlbXAo
aW5kZXgpICsgIiA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRJbnRDb25zdGFudChtX3Byb2MsIE9y
aWdpbigpLCBCMzo6IiArIHR5cGUgKyAiLCAiICsgdmFsdWUgKyAiKTsiCisgICAgcmV0dXJuICJW
YWx1ZSogIiArIHRlbXAoaW5kZXgpICsgIiA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRJbnRDb25z
dGFudChtX3Byb2MsIG9yaWdpbigpLCBCMzo6IiArIHR5cGUgKyAiLCAiICsgdmFsdWUgKyAiKTsi
CiAKIAogZGVmIGdlbmVyYXRlQjNDb2RlKHdhc21PcCwgc291cmNlKToK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305705</attachid>
            <date>2017-03-28 21:51:21 -0700</date>
            <delta_ts>2017-03-28 22:32:49 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-170217-20170328215120.patch</filename>
            <type>text/plain</type>
            <size>95543</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE0NTA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
MzNhNmNjOTk3NzNjMGQzYWZiNmFhYzNmMDU5NGI5N2VjZjliOThiLi5jMjk3NDQ4NGExMzQ0ZjY0
ZTdiMzIyZjhhMzIwZGYxMGM1ZDI3YjA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
NSArMSw2MCBAQAogMjAxNy0wMy0yOCAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KIAorICAgICAgICBXZWJBc3NlbWJseTogV2Ugc2hvdWxkIGhhdmUgT3JpZ2lucworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwMjE3CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTWFyayBMYW0uCisKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRzIHdh
c20gb3JpZ2lucyBmb3IgQjM6OlZhbHVlcywgY2FsbGVkIE9wY29kZU9yaWdpbi4gQ3VycmVudGx5
LAorICAgICAgICBPcGNvZGVPcmlnaW4ganVzdCB0cmFja3MgdGhlIG9yaWdpbmFsIG9wY29kZSBh
bmQgdGhlIGxvY2F0aW9uIG9mIHRoYXQgb3Bjb2RlLgorCisgICAgICAgIEhlcmUncyBhIHNhbXBs
ZToKKworICAgICAgICBCQiMwOiA7IGZyZXF1ZW5jeSA9IDEuMDAwMDAwCisgICAgICAgICAgICBJ
bnQ2NCBANCA9IFBhdGNocG9pbnQoZ2VuZXJhdG9yID0gMHgxMGY0ODdmYTgsIGVhcmx5Q2xvYmJl
cmVkID0gW10sIGxhdGVDbG9iYmVyZWQgPSBbXSwgdXNlZFJlZ2lzdGVycyA9IFtdLCByZXN1bHRD
b25zdHJhaW50ID0gU29tZVJlZ2lzdGVyKQorICAgICAgICAgICAgSW50NjQgQDUgPSBGcmFtZVBv
aW50ZXIoKQorICAgICAgICAgICAgVm9pZCBAOCA9IFN0b3JlKEA0LCBANSwgb2Zmc2V0ID0gMjQs
IENvbnRyb2xEZXBlbmRlbnR8V3JpdGVzOlRvcCkKKyAgICAgICAgICAgIEludDY0IEAxMCA9IENv
bnN0NjQoMCkKKyAgICAgICAgICAgIFZvaWQgQDEyID0gU3RvcmUoJDAoQDEwKSwgQDUsIG9mZnNl
dCA9IDE2LCBDb250cm9sRGVwZW5kZW50fFdyaXRlczpUb3ApCisgICAgICAgICAgICBJbnQ2NCBA
MTMgPSBQYXRjaHBvaW50KGdlbmVyYXRvciA9IDB4MTBmNGJlN2YwLCBlYXJseUNsb2JiZXJlZCA9
IFtdLCBsYXRlQ2xvYmJlcmVkID0gW10sIHVzZWRSZWdpc3RlcnMgPSBbXSwgcmVzdWx0Q29uc3Ry
YWludCA9IFNvbWVSZWdpc3RlciwgRXhpdHNTaWRld2F5c3xDb250cm9sRGVwZW5kZW50fFdyaXRl
c1Bpbm5lZHxSZWFkc1Bpbm5lZHxGZW5jZXxXcml0ZXM6VG9wfFJlYWRzOlRvcCkKKyAgICAgICAg
ICAgIEludDY0IEAxNiA9IEFyZ3VtZW50UmVnKCVyZGkpCisgICAgICAgICAgICBJbnQ2NCBAMTgg
PSBBcmd1bWVudFJlZyglcnNpKQorICAgICAgICAgICAgSW50MzIgQDIyID0gVHJ1bmMoQDE4LCBX
YXNtOiB7b3Bjb2RlOiBJNjRSb3RsLCBsb2NhdGlvbjogNX0pCisgICAgICAgICAgICBJbnQ2NCBA
MjMgPSBSb3RMKEAxNiwgQDIyLCBXYXNtOiB7b3Bjb2RlOiBJNjRSb3RsLCBsb2NhdGlvbjogNX0p
CisgICAgICAgICAgICBWb2lkIEAyNyA9IFJldHVybihAMjMsIFRlcm1pbmFsLCBXYXNtOiB7b3Bj
b2RlOiBFbmQsIGxvY2F0aW9uOiA2fSkKKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYjMvQjNWYWx1ZS5jcHA6CisgICAgICAg
IChKU0M6OkIzOjpWYWx1ZTo6ZGVlcER1bXApOgorICAgICAgICAqIHdhc20vV2FzbUIzSVJHZW5l
cmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpzZXRQYXJzZXIp
OgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpyZXN0b3JlV2ViQXNzZW1ibHlH
bG9iYWxTdGF0ZSk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmVtaXRDaGVj
a0FuZFByZXBhcmVQb2ludGVyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6
ZW1pdExvYWRPcCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmVtaXRTdG9y
ZU9wKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkQ29uc3RhbnQpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRMb29wKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6dW5pZnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpwYXJz
ZUFuZENvbXBpbGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjplbWl0Q2hl
Y2tzRm9yTW9kT3JEaXYpOgorICAgICAgICAoSlNDOjpXYXNtOjpnZXRNZW1vcnlCYXNlQW5kU2l6
ZSk6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaDoKKyAgICAg
ICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25QYXJzZXI6OmN1cnJlbnRPcGNvZGUpOgorICAgICAgICAo
SlNDOjpXYXNtOjpGdW5jdGlvblBhcnNlcjo6Y3VycmVudE9wY29kZVN0YXJ0aW5nT2Zmc2V0KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OkZ1bmN0aW9uUGFy
c2VyKToKKyAgICAgICAgKiB3YXNtL1dhc21PcGNvZGVPcmlnaW4uY3BwOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6V2FzbTo6T3Bjb2RlT3JpZ2luOjpkdW1wKToKKyAgICAgICAgKiB3YXNtL1dhc21P
cGNvZGVPcmlnaW4uaDogQWRkZWQuCisgICAgICAgIChKU0M6Oldhc206Ok9wY29kZU9yaWdpbjo6
T3Bjb2RlT3JpZ2luKToKKyAgICAgICAgKiB3YXNtL1dhc21WYWxpZGF0ZS5jcHA6CisgICAgICAg
IChKU0M6Oldhc206OlZhbGlkYXRlOjpzZXRQYXJzZXIpOgorICAgICAgICAqIHdhc20vZ2VuZXJh
dGVXYXNtQjNJUkdlbmVyYXRvcklubGluZXNIZWFkZXIucHk6CisgICAgICAgIChDb2RlR2VuZXJh
dG9yLmdlbmVyYXRlKToKKyAgICAgICAgKGdlbmVyYXRlQjNPcENvZGUpOgorICAgICAgICAoZ2Vu
ZXJhdGVDb25zdENvZGUpOgorCisyMDE3LTAzLTI4ICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxs
ZXJAYXBwbGUuY29tPgorCiAgICAgICAgIFdlYkFzc2VtYmx5OiBNYWtlIFdlYkFzc2VtYmx5Lmlu
c3RhbnRpYXRlL2NvbXBpbGUgdHJ1bHkgYXN5bmNocm9ub3VzCiAgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjkxODcKIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NN
YWtlTGlzdHMudHh0CmluZGV4IDdhM2NhMDFlNjJlNmVmYWYyZjBkNjBmNzIwYmJkNjQyMWMyMGEw
ZjkuLjVjZDViNGVlZmU1MmVkOGNiNjA1ZWU2OGUyMmM1Njc4ZDQ4OTI0OTMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTk0Myw2ICs5NDMsNyBAQCBzZXQoSmF2YVNjcmlw
dENvcmVfU09VUkNFUwogICAgIHdhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAKICAgICB3YXNtL1dh
c21QYWdlQ291bnQuY3BwCiAgICAgd2FzbS9XYXNtUGxhbi5jcHAKKyAgICB3YXNtL1dhc21PcGNv
ZGVPcmlnaW4uY3BwCiAgICAgd2FzbS9XYXNtU2lnbmF0dXJlLmNwcAogICAgIHdhc20vV2FzbVZh
bGlkYXRlLmNwcAogICAgIHdhc20vV2FzbVdvcmtsaXN0LmNwcApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2og
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagppbmRleCBmMDA3MGZhZjI5YTMwMmM3MmJiNDBiNzhiNmQzNjZlNGQ4M2VhMzEwLi5h
OGZiOTk5NGZlYmFiMzAwMGJiYTIyYzRhYzQwOTNhYjhjYzI1Y2UwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagpAQCAtMTM1NSw2ICsxMzU1LDggQEAKIAkJNTNCMEJFMzQxRTU2MUFDOTAw
QThGQzI5IC8qIEdldHRlclNldHRlckFjY2Vzc0Nhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNCMEJFMzMxRTU2MUFDOTAwQThGQzI5IC8qIEdl
dHRlclNldHRlckFjY2Vzc0Nhc2UuY3BwICovOyB9OwogCQk1M0IwQkUzNjFFNTYxQjA5MDBBOEZD
MjkgLyogUHJveHlhYmxlQWNjZXNzQ2FzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1M0IwQkUzNTFFNTYxQjA5MDBBOEZDMjkgLyogUHJveHlhYmxl
QWNjZXNzQ2FzZS5jcHAgKi87IH07CiAJCTUzQjBCRTM4MUU1NjFCMjQwMEE4RkMyOSAvKiBJbnRy
aW5zaWNHZXR0ZXJBY2Nlc3NDYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUzQjBCRTM3MUU1NjFCMjQwMEE4RkMyOSAvKiBJbnRyaW5zaWNHZXR0
ZXJBY2Nlc3NDYXNlLmNwcCAqLzsgfTsKKwkJNTNDNkZFRUYxRThBREZBOTAwQjE4NDI1IC8qIFdh
c21PcGNvZGVPcmlnaW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUzQzZGRUVFMUU4QURGQTkwMEIxODQyNSAvKiBXYXNtT3Bjb2RlT3JpZ2luLmggKi87
IH07CisJCTUzQzZGRUYxMUU4QUZFMEMwMEIxODQyNSAvKiBXYXNtT3Bjb2RlT3JpZ2luLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzQzZGRUYwMUU4
QUZFMEMwMEIxODQyNSAvKiBXYXNtT3Bjb2RlT3JpZ2luLmNwcCAqLzsgfTsKIAkJNTNENDQ0REMx
REFGMDhBQjAwQjkyNzg0IC8qIEIzV2FzbUFkZHJlc3NWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNENDQ0REIxREFGMDhBQjAwQjkyNzg0IC8q
IEIzV2FzbUFkZHJlc3NWYWx1ZS5oICovOyB9OwogCQk1M0Q0NDRERTFEQUYwOUEwMDBCOTI3ODQg
LyogQjNXYXNtQWRkcmVzc1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUzRDQ0NEREMURBRjA5QTAwMEI5Mjc4NCAvKiBCM1dhc21BZGRyZXNz
VmFsdWUuY3BwICovOyB9OwogCQk1M0Y0MEU4NTFENThGOTc3MDA5OUExQjYgLyogV2FzbVNlY3Rp
b25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0Y0
MEU4NDFENThGOTc3MDA5OUExQjYgLyogV2FzbVNlY3Rpb25zLmggKi87IH07CkBAIC0zODU0LDYg
KzM4NTYsOCBAQAogCQk1M0IwQkUzMzFFNTYxQUM5MDBBOEZDMjkgLyogR2V0dGVyU2V0dGVyQWNj
ZXNzQ2FzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHZXR0ZXJT
ZXR0ZXJBY2Nlc3NDYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNCMEJF
MzUxRTU2MUIwOTAwQThGQzI5IC8qIFByb3h5YWJsZUFjY2Vzc0Nhc2UuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHJveHlhYmxlQWNjZXNzQ2FzZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzQjBCRTM3MUU1NjFCMjQwMEE4RkMyOSAvKiBJbnRy
aW5zaWNHZXR0ZXJBY2Nlc3NDYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk1M0M2RkVFRTFFOEFERkE5MDBCMTg0MjUgLyogV2FzbU9wY29kZU9yaWdpbi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtT3Bjb2RlT3JpZ2luLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzQzZGRUYwMUU4QUZFMEMwMEIxODQyNSAvKiBX
YXNtT3Bjb2RlT3JpZ2luLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFdhc21PcGNvZGVPcmlnaW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0Q0
NDREQjFEQUYwOEFCMDBCOTI3ODQgLyogQjNXYXNtQWRkcmVzc1ZhbHVlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzV2FzbUFkZHJlc3NWYWx1ZS5oOyBwYXRoID0gYjMvQjNX
YXNtQWRkcmVzc1ZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRDQ0NERE
MURBRjA5QTAwMEI5Mjc4NCAvKiBCM1dhc21BZGRyZXNzVmFsdWUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNXYXNtQWRkcmVzc1ZhbHVlLmNwcDsgcGF0aCA9IGIz
L0IzV2FzbUFkZHJlc3NWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUz
RjI1NkUxMUI4N0UyODAwMEI0Qjc2OCAvKiBKU1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTVHlwZWRBcnJheVZpZXdQcm90
b3R5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjI5Miw2ICs2Mjk2LDgg
QEAKIAkJCQlBREI2RjY3QzFFMTVENzUwMDA4MkYzODQgLyogV2FzbVBhZ2VDb3VudC5jcHAgKi8s
CiAJCQkJNTM4MUI5MzYxRTYwRTk2NjAwOTBGNzk0IC8qIFdhc21GYXVsdFNpZ25hbEhhbmRsZXIu
Y3BwICovLAogCQkJCTUzODFCOTM4MUU2MEU5N0QwMDkwRjc5NCAvKiBXYXNtRmF1bHRTaWduYWxI
YW5kbGVyLmggKi8sCisJCQkJNTNDNkZFRjAxRThBRkUwQzAwQjE4NDI1IC8qIFdhc21PcGNvZGVP
cmlnaW4uY3BwICovLAorCQkJCTUzQzZGRUVFMUU4QURGQTkwMEIxODQyNSAvKiBXYXNtT3Bjb2Rl
T3JpZ2luLmggKi8sCiAJCQkJNzlCNzU5NzMxREZBNEM2MDAwNTIxNzRDIC8qIFdhc21QYWdlQ291
bnQuaCAqLywKIAkJCQk1M0Y0MEU4QzFENTkwMUYyMDA5OUExQjYgLyogV2FzbVBhcnNlci5oICov
LAogCQkJCTUzMTM3NEJFMUQ1Q0U5NTAwMEFGN0EwQiAvKiBXYXNtUGxhbi5jcHAgKi8sCkBAIC04
NjQzLDYgKzg2NDksNyBAQAogCQkJCTBGREIyQ0NBMTczREE1MjMwMDdCM0MxQiAvKiBGVExWYWx1
ZUZyb21CbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1QTYyODQxODhDOThENDAwNzJDOURG
IC8qIEZUTFZhbHVlUmFuZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMDMzMkM2MThCNTNGQTkw
MDVGOTc5QSAvKiBGVExXZWlnaHQuaCBpbiBIZWFkZXJzICovLAorCQkJCTUzQzZGRUVGMUU4QURG
QTkwMEIxODQyNSAvKiBXYXNtT3Bjb2RlT3JpZ2luLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjAz
MzJDODE4QjU0NkVDMDA1Rjk3OUEgLyogRlRMV2VpZ2h0ZWRUYXJnZXQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGNjY2RUMxMTgzNTY2RjkwMEQwMTdGMSAvKiBGdWxsQnl0ZWNvZGVMaXZlbmVzcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMkE4MzYzOEExOEQ3RDBGRTAwMDBFQkNDIC8qIEZ1bGxHQ0Fj
dGl2aXR5Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovLApAQCAtOTkzMSw2ICs5OTM4LDcgQEAKIAkJ
CQkwRkVDODU3NTFCREFDREM3MDA4MEZGNzQgLyogQWlyQ29kZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjYxODMyQjFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ3VzdG9tLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGNDU3MDM4MUJFNDRDOTEwMDYyQTYyOSAvKiBBaXJFbGltaW5hdGVEZWFkQ29k
ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1M0M2RkVGMTFFOEFGRTBDMDBCMTg0MjUgLyogV2Fz
bU9wY29kZU9yaWdpbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjYxODMyQzFDNDVCRjA3MDA3
MjQ1MEIgLyogQWlyRW1pdFNodWZmbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0REUxQ0Ux
QzRDMUI1NDAwNEQ2QzExIC8qIEFpckZpeE9idmlvdXNTcGlsbHMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMjYyRDg1QjYxQzBENjUwRjAwNkFDQjYxIC8qIEFpckZpeFBhcnRpYWxSZWdpc3RlclN0
YWxscy5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1ZhbHVlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmNwcApp
bmRleCA5MzQ4M2VjODc3M2VjYTQ3OTEyNzI4N2MyYWFlN2FhYmU3ZGZjZjg5Li44YzkxMGFhZjQx
YjgyMTJmYzY3NDFhNmQ3NWQ0Y2Q0MWYzOGI3YWQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
VmFsdWUuY3BwCkBAIC0yMjIsOSArMjIyLDYgQEAgdm9pZCBWYWx1ZTo6ZGVlcER1bXAoY29uc3Qg
UHJvY2VkdXJlKiBwcm9jLCBQcmludFN0cmVhbSYgb3V0KSBjb25zdAogICAgIENvbW1hUHJpbnRl
ciBjb21tYTsKICAgICBkdW1wQ2hpbGRyZW4oY29tbWEsIG91dCk7CiAKLSAgICBpZiAobV9vcmln
aW4pCi0gICAgICAgIG91dC5wcmludChjb21tYSwgT3JpZ2luRHVtcChwcm9jLCBtX29yaWdpbikp
OwotCiAgICAgZHVtcE1ldGEoY29tbWEsIG91dCk7CiAKICAgICB7CkBAIC0yMzMsNiArMjMwLDkg
QEAgdm9pZCBWYWx1ZTo6ZGVlcER1bXAoY29uc3QgUHJvY2VkdXJlKiBwcm9jLCBQcmludFN0cmVh
bSYgb3V0KSBjb25zdAogICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBzdHJpbmcpOwogICAg
IH0KIAorICAgIGlmIChtX29yaWdpbikKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCBPcmlnaW5E
dW1wKHByb2MsIG1fb3JpZ2luKSk7CisKICAgICBvdXQucHJpbnQoIikiKTsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCmluZGV4IDg3
ZDlhNDI0N2JlOTNmMzY3MjgwNDM4Mzg0ZTE1OGFkYzMyZjZjMTcuLmMzZmFkZmM5ODc2YThjODYy
MTlmMDQwOTJjZTdiYjkzOTAyZWFjYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKQEAgLTUzLDYgKzUzLDcgQEAKICNpbmNsdWRlICJX
YXNtRXhjZXB0aW9uVHlwZS5oIgogI2luY2x1ZGUgIldhc21GdW5jdGlvblBhcnNlci5oIgogI2lu
Y2x1ZGUgIldhc21NZW1vcnkuaCIKKyNpbmNsdWRlICJXYXNtT3Bjb2RlT3JpZ2luLmgiCiAjaW5j
bHVkZSA8d3RmL09wdGlvbmFsLmg+CiAKIHZvaWQgZHVtcFByb2NlZHVyZSh2b2lkKiBwdHIpCkBA
IC0yMDQsMTQgKzIwNSwxNSBAQCBwdWJsaWM6CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNF
RF9SRVRVUk4gYWRkVW5yZWFjaGFibGUoKTsKIAogICAgIHZvaWQgZHVtcChjb25zdCBWZWN0b3I8
Q29udHJvbEVudHJ5PiYgY29udHJvbFN0YWNrLCBjb25zdCBFeHByZXNzaW9uTGlzdCogZXhwcmVz
c2lvblN0YWNrKTsKKyAgICB2b2lkIHNldFBhcnNlcihGdW5jdGlvblBhcnNlcjxCM0lSR2VuZXJh
dG9yPiogcGFyc2VyKSB7IG1fcGFyc2VyID0gcGFyc2VyOyB9OwogCitwcml2YXRlOgogICAgIHZv
aWQgZW1pdEV4Y2VwdGlvbkNoZWNrKENDYWxsSGVscGVycyYsIEV4Y2VwdGlvblR5cGUpOwogCi1w
cml2YXRlOgogICAgIEV4cHJlc3Npb25UeXBlIGVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVyKEV4
cHJlc3Npb25UeXBlIHBvaW50ZXIsIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3Qgc2l6ZU9mT3Ap
OwogICAgIEIzOjpLaW5kIG1lbW9yeUtpbmQoQjM6Ok9wY29kZSBtZW1vcnlPcCk7Ci0gICAgRXhw
cmVzc2lvblR5cGUgZW1pdExvYWRPcChMb2FkT3BUeXBlLCBPcmlnaW4sIEV4cHJlc3Npb25UeXBl
IHBvaW50ZXIsIHVpbnQzMl90IG9mZnNldCk7Ci0gICAgdm9pZCBlbWl0U3RvcmVPcChTdG9yZU9w
VHlwZSwgT3JpZ2luLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSB2YWx1
ZSwgdWludDMyX3Qgb2Zmc2V0KTsKKyAgICBFeHByZXNzaW9uVHlwZSBlbWl0TG9hZE9wKExvYWRP
cFR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIHVpbnQzMl90IG9mZnNldCk7CisgICAgdm9p
ZCBlbWl0U3RvcmVPcChTdG9yZU9wVHlwZSwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVz
c2lvblR5cGUgdmFsdWUsIHVpbnQzMl90IG9mZnNldCk7CiAKICAgICB2b2lkIHVuaWZ5KFZhcmlh
YmxlKiB0YXJnZXQsIGNvbnN0IEV4cHJlc3Npb25UeXBlIHNvdXJjZSk7CiAgICAgdm9pZCB1bmlm
eVZhbHVlc1dpdGhCbG9jayhjb25zdCBFeHByZXNzaW9uTGlzdCYgcmVzdWx0U3RhY2ssIFJlc3Vs
dExpc3QmIHN0YWNrKTsKQEAgLTIyMywxMyArMjI1LDE3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBy
ZXN0b3JlV2FzbUNvbnRleHQoUHJvY2VkdXJlJiwgQmFzaWNCbG9jayosIFZhbHVlKik7CiAgICAg
dm9pZCByZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZShjb25zdCBNZW1vcnlJbmZvcm1hdGlv
biYsIFZhbHVlKiBpbnN0YW5jZSwgUHJvY2VkdXJlJiwgQmFzaWNCbG9jayopOwogCisgICAgT3Jp
Z2luIG9yaWdpbigpOworCiAgICAgVk0mIG1fdm07CisgICAgRnVuY3Rpb25QYXJzZXI8QjNJUkdl
bmVyYXRvcj4qIG1fcGFyc2VyOwogICAgIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBtX2luZm87
CiAgICAgTWVtb3J5TW9kZSBtX21vZGU7CiAgICAgUHJvY2VkdXJlJiBtX3Byb2M7CiAgICAgQmFz
aWNCbG9jayogbV9jdXJyZW50QmxvY2s7CiAgICAgVmVjdG9yPFZhcmlhYmxlKj4gbV9sb2NhbHM7
CiAgICAgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiBtX3VubGlua2VkV2FzbVRvV2Fz
bUNhbGxzOyAvLyBMaXN0IGVhY2ggY2FsbCBzaXRlIGFuZCB0aGUgZnVuY3Rpb24gaW5kZXggd2hv
c2UgYWRkcmVzcyBpdCBzaG91bGQgYmUgcGF0Y2hlZCB3aXRoLgorICAgIFZlY3RvcjxzdGQ6OnVu
aXF1ZV9wdHI8T3Bjb2RlT3JpZ2luPj4gbV9vcmlnaW5zOwogICAgIEdQUlJlZyBtX21lbW9yeUJh
c2VHUFI7CiAgICAgR1BSUmVnIG1fbWVtb3J5U2l6ZUdQUjsKICAgICBHUFJSZWcgbV93YXNtQ29u
dGV4dEdQUjsKQEAgLTMzOSwyNCArMzQ1LDYgQEAgQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRv
cihWTSYgdm0sIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBQcm9jZWR1cmUmIHAKICAg
ICBtX2luc3RhbmNlVmFsdWUgPSBtYXRlcmlhbGl6ZVdhc21Db250ZXh0KG1fcHJvYywgbV9jdXJy
ZW50QmxvY2spOwogfQogCi1zdHJ1Y3QgTWVtb3J5QmFzZUFuZFNpemUgewotICAgIFZhbHVlKiBi
YXNlOwotICAgIFZhbHVlKiBzaXplOwotfTsKLQotc3RhdGljIE1lbW9yeUJhc2VBbmRTaXplIGdl
dE1lbW9yeUJhc2VBbmRTaXplKFZhbHVlKiBpbnN0YW5jZSwgUHJvY2VkdXJlJiBwcm9jLCBCYXNp
Y0Jsb2NrKiBibG9jaykKLXsKLSAgICBWYWx1ZSogbWVtb3J5T2JqZWN0ID0gYmxvY2stPmFwcGVu
ZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgT3JpZ2luKCksIGlu
c3RhbmNlLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mTWVtb3J5KCkpOwotCi0gICAg
c3RhdGljX2Fzc2VydChzaXplb2YoZGVjbHR5cGUoc3RhdGljX2Nhc3Q8SlNXZWJBc3NlbWJseUlu
c3RhbmNlKj4obnVsbHB0ciktPm1lbW9yeSgpLT5tZW1vcnkoKS5tZW1vcnkoKSkpID09IHNpemVv
Zih2b2lkKiksICJjb2RlZ2VuIHJlbGllcyBvbiB0aGlzIHNpemUiKTsKLSAgICBzdGF0aWNfYXNz
ZXJ0KHNpemVvZihkZWNsdHlwZShzdGF0aWNfY2FzdDxKU1dlYkFzc2VtYmx5SW5zdGFuY2UqPihu
dWxscHRyKS0+bWVtb3J5KCktPm1lbW9yeSgpLnNpemUoKSkpID09IHNpemVvZih1aW50NjRfdCks
ICJjb2RlZ2VuIHJlbGllcyBvbiB0aGlzIHNpemUiKTsKLSAgICBNZW1vcnlCYXNlQW5kU2l6ZSBy
ZXN1bHQ7Ci0gICAgcmVzdWx0LmJhc2UgPSBibG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihw
cm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBPcmlnaW4oKSwgbWVtb3J5T2JqZWN0LCBKU1dlYkFz
c2VtYmx5TWVtb3J5OjpvZmZzZXRPZk1lbW9yeSgpKTsKLSAgICByZXN1bHQuc2l6ZSA9IGJsb2Nr
LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KHByb2MsIExvYWQsIEludDY0LCBPcmlnaW4oKSwgbWVt
b3J5T2JqZWN0LCBKU1dlYkFzc2VtYmx5TWVtb3J5OjpvZmZzZXRPZlNpemUoKSk7Ci0KLSAgICBy
ZXR1cm4gcmVzdWx0OwotfQotCiB2b2lkIEIzSVJHZW5lcmF0b3I6OnJlc3RvcmVXZWJBc3NlbWJs
eUdsb2JhbFN0YXRlKGNvbnN0IE1lbW9yeUluZm9ybWF0aW9uJiBtZW1vcnksIFZhbHVlKiBpbnN0
YW5jZSwgUHJvY2VkdXJlJiBwcm9jLCBCYXNpY0Jsb2NrKiBibG9jaykKIHsKICAgICByZXN0b3Jl
V2FzbUNvbnRleHQocHJvYywgYmxvY2ssIGluc3RhbmNlKTsKQEAgLTM2OCw3ICszNTYsNyBAQCB2
b2lkIEIzSVJHZW5lcmF0b3I6OnJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKGNvbnN0IE1l
bW9yeUluZm9ybWF0aW9uJiBtZW1vcgogICAgICAgICBmb3IgKGF1dG8gaW5mbyA6IHBpbm5lZFJl
Z3MtPnNpemVSZWdpc3RlcnMpCiAgICAgICAgICAgICBjbG9iYmVycy5zZXQoaW5mby5zaXplUmVn
aXN0ZXIpOwogCi0gICAgICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBibG9j
ay0+YXBwZW5kTmV3PEIzOjpQYXRjaHBvaW50VmFsdWU+KHByb2MsIEIzOjpWb2lkLCBPcmlnaW4o
KSk7CisgICAgICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBibG9jay0+YXBw
ZW5kTmV3PEIzOjpQYXRjaHBvaW50VmFsdWU+KHByb2MsIEIzOjpWb2lkLCBvcmlnaW4oKSk7CiAg
ICAgICAgIEVmZmVjdHMgZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKICAgICAgICAgZWZmZWN0
cy53cml0ZXNQaW5uZWQgPSB0cnVlOwogICAgICAgICBlZmZlY3RzLnJlYWRzID0gQjM6OkhlYXBS
YW5nZTo6dG9wKCk7CkBAIC00MTcsNyArNDA1LDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRM
b2NhbChUeXBlIHR5cGUsIHVpbnQzMl90IGNvdW50KSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgZm9y
ICh1aW50MzJfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKICAgICAgICAgVmFyaWFibGUqIGxv
Y2FsID0gbV9wcm9jLmFkZFZhcmlhYmxlKHRvQjNUeXBlKHR5cGUpKTsKICAgICAgICAgbV9sb2Nh
bHMudW5jaGVja2VkQXBwZW5kKGxvY2FsKTsKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxWYXJpYWJsZVZhbHVlPihtX3Byb2MsIFNldCwgT3JpZ2luKCksIGxvY2FsLCB6ZXJvRm9y
VHlwZSh0eXBlKSk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFyaWFibGVW
YWx1ZT4obV9wcm9jLCBTZXQsIG9yaWdpbigpLCBsb2NhbCwgemVyb0ZvclR5cGUodHlwZSkpOwog
ICAgIH0KICAgICByZXR1cm4geyB9OwogfQpAQCAtNDQwLDEzICs0MjgsMTMgQEAgYXV0byBCM0lS
R2VuZXJhdG9yOjphZGRBcmd1bWVudHMoY29uc3QgU2lnbmF0dXJlKiBzaWduYXR1cmUpIC0+IFBh
cnRpYWxSZXN1bHQKIGF1dG8gQjNJUkdlbmVyYXRvcjo6Z2V0TG9jYWwodWludDMyX3QgaW5kZXgs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBBU1NFUlQo
bV9sb2NhbHNbaW5kZXhdKTsKLSAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PFZhcmlhYmxlVmFsdWU+KG1fcHJvYywgQjM6OkdldCwgT3JpZ2luKCksIG1fbG9jYWxzW2luZGV4
XSk7CisgICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVl
PihtX3Byb2MsIEIzOjpHZXQsIG9yaWdpbigpLCBtX2xvY2Fsc1tpbmRleF0pOwogICAgIHJldHVy
biB7IH07CiB9CiAKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkVW5yZWFjaGFibGUoKSAtPiBQYXJ0
aWFsUmVzdWx0CiB7Ci0gICAgQjM6OlBhdGNocG9pbnRWYWx1ZSogdW5yZWFjaGFibGUgPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PEIzOjpQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgQjM6OlZv
aWQsIE9yaWdpbigpKTsKKyAgICBCMzo6UGF0Y2hwb2ludFZhbHVlKiB1bnJlYWNoYWJsZSA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8QjM6OlBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBCMzo6
Vm9pZCwgb3JpZ2luKCkpOwogICAgIHVucmVhY2hhYmxlLT5zZXRHZW5lcmF0b3IoW3RoaXNdIChD
Q2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsK
ICAgICAgICAgdGhpcy0+ZW1pdEV4Y2VwdGlvbkNoZWNrKGppdCwgRXhjZXB0aW9uVHlwZTo6VW5y
ZWFjaGFibGUpOwogICAgIH0pOwpAQCAtNDc0LDkgKzQ2Miw5IEBAIGF1dG8gQjNJUkdlbmVyYXRv
cjo6YWRkR3Jvd01lbW9yeShFeHByZXNzaW9uVHlwZSBkZWx0YSwgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkKICAgICAgICAgcmV0dXJuIHJlc3VsdC5wYWdlQ291bnQoKTsKICAgICB9OwogCi0gICAg
cmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPihtX3Byb2MsIElu
dDMyLCBPcmlnaW4oKSwKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdFB0
clZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KGdyb3dNZW1vcnkp
KSwKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywg
QjM6OkZyYW1lUG9pbnRlciwgT3JpZ2luKCkpLCBtX2luc3RhbmNlVmFsdWUsIGRlbHRhKTsKKyAg
ICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJvYywg
SW50MzIsIG9yaWdpbigpLAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0
UHRyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIGJpdHdpc2VfY2FzdDx2b2lkKj4oZ3Jvd01lbW9y
eSkpLAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9j
LCBCMzo6RnJhbWVQb2ludGVyLCBvcmlnaW4oKSksIG1faW5zdGFuY2VWYWx1ZSwgZGVsdGEpOwog
CiAgICAgcmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUobV9pbmZvLm1lbW9yeSwgbV9pbnN0
YW5jZVZhbHVlLCBtX3Byb2MsIG1fY3VycmVudEJsb2NrKTsKIApAQCAtNDg1LDE0ICs0NzMsMTcg
QEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRHcm93TWVtb3J5KEV4cHJlc3Npb25UeXBlIGRlbHRh
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KQogCiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZEN1cnJl
bnRNZW1vcnkoRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewotICAg
IGF1dG8gbWVtb3J5VmFsdWUgPSBnZXRNZW1vcnlCYXNlQW5kU2l6ZShtX2luc3RhbmNlVmFsdWUs
IG1fcHJvYywgbV9jdXJyZW50QmxvY2spOworICAgIFZhbHVlKiBtZW1vcnlPYmplY3QgPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJU
eXBlKCksIG9yaWdpbigpLCBtX2luc3RhbmNlVmFsdWUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6
b2Zmc2V0T2ZNZW1vcnkoKSk7CiAKKyAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihkZWNsdHlwZShz
dGF0aWNfY2FzdDxKU1dlYkFzc2VtYmx5SW5zdGFuY2UqPihudWxscHRyKS0+bWVtb3J5KCktPm1l
bW9yeSgpLnNpemUoKSkpID09IHNpemVvZih1aW50NjRfdCksICJjb2RlZ2VuIHJlbGllcyBvbiB0
aGlzIHNpemUiKTsKKyAgICBWYWx1ZSogc2l6ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgSW50NjQsIG9yaWdpbigpLCBtZW1vcnlPYmplY3Qs
IEpTV2ViQXNzZW1ibHlNZW1vcnk6Om9mZnNldE9mU2l6ZSgpKTsKKyAgICAKICAgICBjb25zdGV4
cHIgdWludDMyX3Qgc2hpZnRWYWx1ZSA9IDE2OwogICAgIHN0YXRpY19hc3NlcnQoUGFnZUNvdW50
OjpwYWdlU2l6ZSA9PSAxIDw8IHNoaWZ0VmFsdWUsICJUaGlzIG11c3QgaG9sZCBmb3IgdGhlIGNv
ZGUgYmVsb3cgdG8gYmUgY29ycmVjdC4iKTsKLSAgICBWYWx1ZSogbnVtUGFnZXMgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIFpTaHIsIE9yaWdpbigpLAotICAgICAg
ICBtZW1vcnlWYWx1ZS5zaXplLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1
ZT4obV9wcm9jLCBPcmlnaW4oKSwgc2hpZnRWYWx1ZSkpOworICAgIFZhbHVlKiBudW1QYWdlcyA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgWlNociwgb3JpZ2luKCks
CisgICAgICAgIHNpemUsIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPiht
X3Byb2MsIG9yaWdpbigpLCBzaGlmdFZhbHVlKSk7CiAKLSAgICByZXN1bHQgPSBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIFRydW5jLCBPcmlnaW4oKSwgbnVtUGFnZXMp
OworICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywg
VHJ1bmMsIG9yaWdpbigpLCBudW1QYWdlcyk7CiAKICAgICByZXR1cm4geyB9OwogfQpAQCAtNTAw
LDIyICs0OTEsMjIgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDdXJyZW50TWVtb3J5KEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIGF1dG8gQjNJUkdlbmVyYXRvcjo6
c2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKSAtPiBQYXJ0aWFs
UmVzdWx0CiB7CiAgICAgQVNTRVJUKG1fbG9jYWxzW2luZGV4XSk7Ci0gICAgbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihtX3Byb2MsIEIzOjpTZXQsIE9yaWdpbigpLCBt
X2xvY2Fsc1tpbmRleF0sIHZhbHVlKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZh
cmlhYmxlVmFsdWU+KG1fcHJvYywgQjM6OlNldCwgb3JpZ2luKCksIG1fbG9jYWxzW2luZGV4XSwg
dmFsdWUpOwogICAgIHJldHVybiB7IH07CiB9CiAKIGF1dG8gQjNJUkdlbmVyYXRvcjo6Z2V0R2xv
YmFsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0CiB7Ci0gICAgVmFsdWUqIGdsb2JhbHNBcnJheSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgT3JpZ2luKCksIG1f
aW5zdGFuY2VWYWx1ZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkdsb2JhbHMoKSk7
Ci0gICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9w
cm9jLCBMb2FkLCB0b0IzVHlwZShtX2luZm8uZ2xvYmFsc1tpbmRleF0udHlwZSksIE9yaWdpbigp
LCBnbG9iYWxzQXJyYXksIGluZGV4ICogc2l6ZW9mKFJlZ2lzdGVyKSk7CisgICAgVmFsdWUqIGds
b2JhbHNBcnJheSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJv
YywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIG1faW5zdGFuY2VWYWx1ZSwgSlNXZWJB
c3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkdsb2JhbHMoKSk7CisgICAgcmVzdWx0ID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCB0b0IzVHlwZSht
X2luZm8uZ2xvYmFsc1tpbmRleF0udHlwZSksIG9yaWdpbigpLCBnbG9iYWxzQXJyYXksIGluZGV4
ICogc2l6ZW9mKFJlZ2lzdGVyKSk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAogYXV0byBCM0lSR2Vu
ZXJhdG9yOjpzZXRHbG9iYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKSAt
PiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgQVNTRVJUKHRvQjNUeXBlKG1faW5mby5nbG9iYWxzW2lu
ZGV4XS50eXBlKSA9PSB2YWx1ZS0+dHlwZSgpKTsKLSAgICBWYWx1ZSogZ2xvYmFsc0FycmF5ID0g
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2lu
dGVyVHlwZSgpLCBPcmlnaW4oKSwgbV9pbnN0YW5jZVZhbHVlLCBKU1dlYkFzc2VtYmx5SW5zdGFu
Y2U6Om9mZnNldE9mR2xvYmFscygpKTsKLSAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1l
bW9yeVZhbHVlPihtX3Byb2MsIFN0b3JlLCBPcmlnaW4oKSwgdmFsdWUsIGdsb2JhbHNBcnJheSwg
aW5kZXggKiBzaXplb2YoUmVnaXN0ZXIpKTsKKyAgICBWYWx1ZSogZ2xvYmFsc0FycmF5ID0gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVy
VHlwZSgpLCBvcmlnaW4oKSwgbV9pbnN0YW5jZVZhbHVlLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6
Om9mZnNldE9mR2xvYmFscygpKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9y
eVZhbHVlPihtX3Byb2MsIFN0b3JlLCBvcmlnaW4oKSwgdmFsdWUsIGdsb2JhbHNBcnJheSwgaW5k
ZXggKiBzaXplb2YoUmVnaXN0ZXIpKTsKICAgICByZXR1cm4geyB9OwogfQogCkBAIC01MjUsMTAg
KzUxNiwxMCBAQCBpbmxpbmUgVmFsdWUqIEIzSVJHZW5lcmF0b3I6OmVtaXRDaGVja0FuZFByZXBh
cmVQb2ludGVyKEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsCiAgICAgaWYgKG1fbW9kZSA9PSBNZW1v
cnlNb2RlOjpCb3VuZHNDaGVja2luZykgewogICAgICAgICBBU1NFUlQobV9tZW1vcnlTaXplR1BS
KTsKICAgICAgICAgQVNTRVJUKHNpemVPZk9wZXJhdGlvbiArIG9mZnNldCA+IG9mZnNldCk7Ci0g
ICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8V2FzbUJvdW5kc0NoZWNrVmFsdWU+KG1f
cHJvYywgT3JpZ2luKCksIHBvaW50ZXIsIG1fbWVtb3J5U2l6ZUdQUiwgc2l6ZU9mT3BlcmF0aW9u
ICsgb2Zmc2V0IC0gMSk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8V2FzbUJv
dW5kc0NoZWNrVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHBvaW50ZXIsIG1fbWVtb3J5U2l6ZUdQ
Uiwgc2l6ZU9mT3BlcmF0aW9uICsgb2Zmc2V0IC0gMSk7CiAgICAgfQotICAgIHBvaW50ZXIgPSBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIFpFeHQzMiwgT3JpZ2luKCks
IHBvaW50ZXIpOwotICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFdhc21BZGRy
ZXNzVmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIHBvaW50ZXIsIG1fbWVtb3J5QmFzZUdQUik7Cisg
ICAgcG9pbnRlciA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgWkV4
dDMyLCBvcmlnaW4oKSwgcG9pbnRlcik7CisgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8V2FzbUFkZHJlc3NWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgcG9pbnRlciwgbV9tZW1v
cnlCYXNlR1BSKTsKIH0KIAogaW5saW5lIHVpbnQzMl90IHNpemVPZkxvYWRPcChMb2FkT3BUeXBl
IG9wKQpAQCAtNTYzLDc0ICs1NTQsNzQgQEAgaW5saW5lIEIzOjpLaW5kIEIzSVJHZW5lcmF0b3I6
Om1lbW9yeUtpbmQoQjM6Ok9wY29kZSBtZW1vcnlPcCkKICAgICByZXR1cm4gbWVtb3J5T3A7CiB9
CiAKLWlubGluZSBWYWx1ZSogQjNJUkdlbmVyYXRvcjo6ZW1pdExvYWRPcChMb2FkT3BUeXBlIG9w
LCBPcmlnaW4gb3JpZ2luLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCB1aW50MzJfdCBvZmZzZXQp
CitpbmxpbmUgVmFsdWUqIEIzSVJHZW5lcmF0b3I6OmVtaXRMb2FkT3AoTG9hZE9wVHlwZSBvcCwg
RXhwcmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMyX3Qgb2Zmc2V0KQogewogICAgIHN3aXRjaCAo
b3ApIHsKICAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQ4UzogewotICAgICAgICByZXR1cm4g
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBtZW1vcnlLaW5k
KExvYWQ4UyksIG9yaWdpbiwgcG9pbnRlciwgb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgbWVtb3J5S2luZChMb2Fk
OFMpLCBvcmlnaW4oKSwgcG9pbnRlciwgb2Zmc2V0KTsKICAgICB9CiAKICAgICBjYXNlIExvYWRP
cFR5cGU6Okk2NExvYWQ4UzogewotICAgICAgICBWYWx1ZSogdmFsdWUgPSBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIG1lbW9yeUtpbmQoTG9hZDhTKSwgb3Jp
Z2luLCBwb2ludGVyLCBvZmZzZXQpOwotICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBTRXh0MzIsIG9yaWdpbiwgdmFsdWUpOworICAgICAgICBW
YWx1ZSogdmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3By
b2MsIG1lbW9yeUtpbmQoTG9hZDhTKSwgb3JpZ2luKCksIHBvaW50ZXIsIG9mZnNldCk7CisgICAg
ICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIFNFeHQz
Miwgb3JpZ2luKCksIHZhbHVlKTsKICAgICB9CiAKICAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxv
YWQ4VTogewotICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlW
YWx1ZT4obV9wcm9jLCBtZW1vcnlLaW5kKExvYWQ4WiksIG9yaWdpbiwgcG9pbnRlciwgb2Zmc2V0
KTsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+
KG1fcHJvYywgbWVtb3J5S2luZChMb2FkOFopLCBvcmlnaW4oKSwgcG9pbnRlciwgb2Zmc2V0KTsK
ICAgICB9CiAKICAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQ4VTogewotICAgICAgICBWYWx1
ZSogdmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2Ms
IG1lbW9yeUtpbmQoTG9hZDhaKSwgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQpOwotICAgICAgICBy
ZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBaRXh0MzIsIG9y
aWdpbiwgdmFsdWUpOworICAgICAgICBWYWx1ZSogdmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIG1lbW9yeUtpbmQoTG9hZDhaKSwgb3JpZ2luKCks
IHBvaW50ZXIsIG9mZnNldCk7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFZhbHVlPihtX3Byb2MsIFpFeHQzMiwgb3JpZ2luKCksIHZhbHVlKTsKICAgICB9CiAKICAg
ICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQxNlM6IHsKLSAgICAgICAgcmV0dXJuIG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgbWVtb3J5S2luZChMb2FkMTZT
KSwgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBtZW1vcnlLaW5kKExvYWQxNlMpLCBv
cmlnaW4oKSwgcG9pbnRlciwgb2Zmc2V0KTsKICAgICB9CiAgICAgY2FzZSBMb2FkT3BUeXBlOjpJ
NjRMb2FkMTZTOiB7Ci0gICAgICAgIFZhbHVlKiB2YWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgbWVtb3J5S2luZChMb2FkMTZTKSwgb3JpZ2luLCBw
b2ludGVyLCBvZmZzZXQpOwotICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxWYWx1ZT4obV9wcm9jLCBTRXh0MzIsIG9yaWdpbiwgdmFsdWUpOworICAgICAgICBWYWx1ZSog
dmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIG1l
bW9yeUtpbmQoTG9hZDE2UyksIG9yaWdpbigpLCBwb2ludGVyLCBvZmZzZXQpOworICAgICAgICBy
ZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBTRXh0MzIsIG9y
aWdpbigpLCB2YWx1ZSk7CiAgICAgfQogCiAgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkOiB7
Ci0gICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPiht
X3Byb2MsIG1lbW9yeUtpbmQoTG9hZCksIEludDMyLCBvcmlnaW4sIHBvaW50ZXIsIG9mZnNldCk7
CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPiht
X3Byb2MsIG1lbW9yeUtpbmQoTG9hZCksIEludDMyLCBvcmlnaW4oKSwgcG9pbnRlciwgb2Zmc2V0
KTsKICAgICB9CiAKICAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQzMlU6IHsKLSAgICAgICAg
VmFsdWUqIHZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9w
cm9jLCBtZW1vcnlLaW5kKExvYWQpLCBJbnQzMiwgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQpOwot
ICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBa
RXh0MzIsIG9yaWdpbiwgdmFsdWUpOworICAgICAgICBWYWx1ZSogdmFsdWUgPSBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIG1lbW9yeUtpbmQoTG9hZCksIElu
dDMyLCBvcmlnaW4oKSwgcG9pbnRlciwgb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgWkV4dDMyLCBvcmlnaW4oKSwgdmFsdWUp
OwogICAgIH0KIAogICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDMyUzogewotICAgICAgICBW
YWx1ZSogdmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3By
b2MsIG1lbW9yeUtpbmQoTG9hZCksIEludDMyLCBvcmlnaW4sIHBvaW50ZXIsIG9mZnNldCk7Ci0g
ICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIFNF
eHQzMiwgb3JpZ2luLCB2YWx1ZSk7CisgICAgICAgIFZhbHVlKiB2YWx1ZSA9IG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgbWVtb3J5S2luZChMb2FkKSwgSW50
MzIsIG9yaWdpbigpLCBwb2ludGVyLCBvZmZzZXQpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBTRXh0MzIsIG9yaWdpbigpLCB2YWx1ZSk7
CiAgICAgfQogCiAgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkOiB7Ci0gICAgICAgIHJldHVy
biBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIG1lbW9yeUtp
bmQoTG9hZCksIEludDY0LCBvcmlnaW4sIHBvaW50ZXIsIG9mZnNldCk7CisgICAgICAgIHJldHVy
biBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIG1lbW9yeUtp
bmQoTG9hZCksIEludDY0LCBvcmlnaW4oKSwgcG9pbnRlciwgb2Zmc2V0KTsKICAgICB9CiAKICAg
ICBjYXNlIExvYWRPcFR5cGU6OkYzMkxvYWQ6IHsKLSAgICAgICAgcmV0dXJuIG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgbWVtb3J5S2luZChMb2FkKSwgRmxv
YXQsIG9yaWdpbiwgcG9pbnRlciwgb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgbWVtb3J5S2luZChMb2FkKSwgRmxv
YXQsIG9yaWdpbigpLCBwb2ludGVyLCBvZmZzZXQpOwogICAgIH0KIAogICAgIGNhc2UgTG9hZE9w
VHlwZTo6RjY0TG9hZDogewotICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBtZW1vcnlLaW5kKExvYWQpLCBEb3VibGUsIG9yaWdpbiwg
cG9pbnRlciwgb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgbWVtb3J5S2luZChMb2FkKSwgRG91YmxlLCBvcmlnaW4o
KSwgcG9pbnRlciwgb2Zmc2V0KTsKICAgICB9CiAKICAgICAvLyBGSVhNRTogQjMgZG9lc24ndCBz
dXBwb3J0IExvYWQxNlogeWV0LiBXZSBzaG91bGQgbG93ZXIgdG8gdGhhdCB2YWx1ZSB3aGVuCiAg
ICAgLy8gaXQncyBhZGRlZC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2NTg4NAogICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDE2VTogewotICAgICAgICBWYWx1
ZSogdmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2Ms
IG1lbW9yeUtpbmQoTG9hZDE2UyksIG9yaWdpbiwgcG9pbnRlciwgb2Zmc2V0KTsKLSAgICAgICAg
cmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQml0QW5kLCBP
cmlnaW4oKSwgdmFsdWUsCi0gICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxDb25zdDMyVmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIDB4MDAwMGZmZmYpKTsKKyAgICAgICAg
VmFsdWUqIHZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9w
cm9jLCBtZW1vcnlLaW5kKExvYWQxNlMpLCBvcmlnaW4oKSwgcG9pbnRlciwgb2Zmc2V0KTsKKyAg
ICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQml0
QW5kLCBvcmlnaW4oKSwgdmFsdWUsCisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgMHgwMDAwZmZmZikpOwogICAgIH0K
ICAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQxNlU6IHsKLSAgICAgICAgVmFsdWUqIHZhbHVl
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBtZW1vcnlL
aW5kKExvYWQxNlMpLCBvcmlnaW4sIHBvaW50ZXIsIG9mZnNldCk7Ci0gICAgICAgIFZhbHVlKiBw
YXJ0aWFsUmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBC
aXRBbmQsIE9yaWdpbigpLCB2YWx1ZSwKLSAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwgMHgwMDAwZmZmZikpOwor
ICAgICAgICBWYWx1ZSogdmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZh
bHVlPihtX3Byb2MsIG1lbW9yeUtpbmQoTG9hZDE2UyksIG9yaWdpbigpLCBwb2ludGVyLCBvZmZz
ZXQpOworICAgICAgICBWYWx1ZSogcGFydGlhbFJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8VmFsdWU+KG1fcHJvYywgQml0QW5kLCBvcmlnaW4oKSwgdmFsdWUsCisgICAgICAgICAg
ICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4o
KSwgMHgwMDAwZmZmZikpOwogCi0gICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFZhbHVlPihtX3Byb2MsIFpFeHQzMiwgT3JpZ2luKCksIHBhcnRpYWxSZXN1bHQpOworICAg
ICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBaRXh0
MzIsIG9yaWdpbigpLCBwYXJ0aWFsUmVzdWx0KTsKICAgICB9CiAgICAgfQogICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC02NDMsNyArNjM0LDcgQEAgYXV0byBCM0lSR2VuZXJh
dG9yOjpsb2FkKExvYWRPcFR5cGUgb3AsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Np
b25UeXBlJgogICAgIGlmIChVTkxJS0VMWShzdW1PdmVyZmxvd3M8dWludDMyX3Q+KG9mZnNldCwg
c2l6ZU9mTG9hZE9wKG9wKSkpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBFdmVuIHRob3VnaCB0aGlz
IGlzIHByb3ZhYmx5IG91dCBvZiBib3VuZHMsIGl0J3Mgbm90IGEgdmFsaWRhdGlvbiBlcnJvciwg
c28gd2UgaGF2ZSB0byBoYW5kbGUgaXQKICAgICAgICAgLy8gYXMgYSBydW50aW1lIGV4Y2VwdGlv
bi4gSG93ZXZlciwgdGhpcyBtYXkgY2hhbmdlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTY2NDM1Ci0gICAgICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIHRocm93RXhj
ZXB0aW9uID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxCMzo6UGF0Y2hwb2ludFZhbHVlPiht
X3Byb2MsIEIzOjpWb2lkLCBPcmlnaW4oKSk7CisgICAgICAgIEIzOjpQYXRjaHBvaW50VmFsdWUq
IHRocm93RXhjZXB0aW9uID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxCMzo6UGF0Y2hwb2lu
dFZhbHVlPihtX3Byb2MsIEIzOjpWb2lkLCBvcmlnaW4oKSk7CiAgICAgICAgIHRocm93RXhjZXB0
aW9uLT5zZXRHZW5lcmF0b3IoW3RoaXNdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0
YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKICAgICAgICAgICAgIHRoaXMtPmVtaXRFeGNlcHRp
b25DaGVjayhqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzTWVtb3J5QWNjZXNzKTsKICAg
ICAgICAgfSk7CkBAIC02NzQsNyArNjY1LDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjpsb2FkKExv
YWRPcFR5cGUgb3AsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlJgogICAg
ICAgICB9CiAKICAgICB9IGVsc2UKLSAgICAgICAgcmVzdWx0ID0gZW1pdExvYWRPcChvcCwgT3Jp
Z2luKCksIGVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVyKHBvaW50ZXIsIG9mZnNldCwgc2l6ZU9m
TG9hZE9wKG9wKSksIG9mZnNldCk7CisgICAgICAgIHJlc3VsdCA9IGVtaXRMb2FkT3Aob3AsIGVt
aXRDaGVja0FuZFByZXBhcmVQb2ludGVyKHBvaW50ZXIsIG9mZnNldCwgc2l6ZU9mTG9hZE9wKG9w
KSksIG9mZnNldCk7CiAKICAgICByZXR1cm4geyB9OwogfQpAQCAtNzAwLDM0ICs2OTEsMzQgQEAg
aW5saW5lIHVpbnQzMl90IHNpemVPZlN0b3JlT3AoU3RvcmVPcFR5cGUgb3ApCiB9CiAKIAotaW5s
aW5lIHZvaWQgQjNJUkdlbmVyYXRvcjo6ZW1pdFN0b3JlT3AoU3RvcmVPcFR5cGUgb3AsIE9yaWdp
biBvcmlnaW4sIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCB1
aW50MzJfdCBvZmZzZXQpCitpbmxpbmUgdm9pZCBCM0lSR2VuZXJhdG9yOjplbWl0U3RvcmVPcChT
dG9yZU9wVHlwZSBvcCwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUgdmFs
dWUsIHVpbnQzMl90IG9mZnNldCkKIHsKICAgICBzd2l0Y2ggKG9wKSB7CiAgICAgY2FzZSBTdG9y
ZU9wVHlwZTo6STY0U3RvcmU4OgotICAgICAgICB2YWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8VmFsdWU+KG1fcHJvYywgVHJ1bmMsIG9yaWdpbiwgdmFsdWUpOworICAgICAgICB2YWx1
ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgVHJ1bmMsIG9yaWdp
bigpLCB2YWx1ZSk7CiAgICAgICAgIEZBTExUSFJPVUdIOwogCiAgICAgY2FzZSBTdG9yZU9wVHlw
ZTo6STMyU3RvcmU4OgotICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZh
bHVlPihtX3Byb2MsIG1lbW9yeUtpbmQoU3RvcmU4KSwgb3JpZ2luLCB2YWx1ZSwgcG9pbnRlciwg
b2Zmc2V0KTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4o
bV9wcm9jLCBtZW1vcnlLaW5kKFN0b3JlOCksIG9yaWdpbigpLCB2YWx1ZSwgcG9pbnRlciwgb2Zm
c2V0KTsKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2FzZSBTdG9yZU9wVHlwZTo6STY0U3RvcmUx
NjoKLSAgICAgICAgdmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3By
b2MsIFRydW5jLCBvcmlnaW4sIHZhbHVlKTsKKyAgICAgICAgdmFsdWUgPSBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIFRydW5jLCBvcmlnaW4oKSwgdmFsdWUpOwogICAg
ICAgICBGQUxMVEhST1VHSDsKIAogICAgIGNhc2UgU3RvcmVPcFR5cGU6OkkzMlN0b3JlMTY6Ci0g
ICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgbWVt
b3J5S2luZChTdG9yZTE2KSwgb3JpZ2luLCB2YWx1ZSwgcG9pbnRlciwgb2Zmc2V0KTsKKyAgICAg
ICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBtZW1vcnlL
aW5kKFN0b3JlMTYpLCBvcmlnaW4oKSwgdmFsdWUsIHBvaW50ZXIsIG9mZnNldCk7CiAgICAgICAg
IHJldHVybjsKIAogICAgIGNhc2UgU3RvcmVPcFR5cGU6Okk2NFN0b3JlMzI6Ci0gICAgICAgIHZh
bHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBUcnVuYywgb3Jp
Z2luLCB2YWx1ZSk7CisgICAgICAgIHZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxW
YWx1ZT4obV9wcm9jLCBUcnVuYywgb3JpZ2luKCksIHZhbHVlKTsKICAgICAgICAgRkFMTFRIUk9V
R0g7CiAKICAgICBjYXNlIFN0b3JlT3BUeXBlOjpJNjRTdG9yZToKICAgICBjYXNlIFN0b3JlT3BU
eXBlOjpJMzJTdG9yZToKICAgICBjYXNlIFN0b3JlT3BUeXBlOjpGMzJTdG9yZToKICAgICBjYXNl
IFN0b3JlT3BUeXBlOjpGNjRTdG9yZToKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBtZW1vcnlLaW5kKFN0b3JlKSwgb3JpZ2luLCB2YWx1ZSwg
cG9pbnRlciwgb2Zmc2V0KTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1v
cnlWYWx1ZT4obV9wcm9jLCBtZW1vcnlLaW5kKFN0b3JlKSwgb3JpZ2luKCksIHZhbHVlLCBwb2lu
dGVyLCBvZmZzZXQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CkBAIC03NDAsMTkgKzczMSwxOSBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6
OnN0b3JlKFN0b3JlT3BUeXBlIG9wLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9u
VHlwZQogICAgIGlmIChVTkxJS0VMWShzdW1PdmVyZmxvd3M8dWludDMyX3Q+KG9mZnNldCwgc2l6
ZU9mU3RvcmVPcChvcCkpKSkgewogICAgICAgICAvLyBGSVhNRTogRXZlbiB0aG91Z2ggdGhpcyBp
cyBwcm92YWJseSBvdXQgb2YgYm91bmRzLCBpdCdzIG5vdCBhIHZhbGlkYXRpb24gZXJyb3IsIHNv
IHdlIGhhdmUgdG8gaGFuZGxlIGl0CiAgICAgICAgIC8vIGFzIGEgcnVudGltZSBleGNlcHRpb24u
IEhvd2V2ZXIsIHRoaXMgbWF5IGNoYW5nZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2NjQzNQotICAgICAgICBCMzo6UGF0Y2hwb2ludFZhbHVlKiB0aHJvd0V4Y2Vw
dGlvbiA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8QjM6OlBhdGNocG9pbnRWYWx1ZT4obV9w
cm9jLCBCMzo6Vm9pZCwgT3JpZ2luKCkpOworICAgICAgICBCMzo6UGF0Y2hwb2ludFZhbHVlKiB0
aHJvd0V4Y2VwdGlvbiA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8QjM6OlBhdGNocG9pbnRW
YWx1ZT4obV9wcm9jLCBCMzo6Vm9pZCwgb3JpZ2luKCkpOwogICAgICAgICB0aHJvd0V4Y2VwdGlv
bi0+c2V0R2VuZXJhdG9yKFt0aGlzXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFj
a21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CiAgICAgICAgICAgICB0aGlzLT5lbWl0RXhjZXB0aW9u
Q2hlY2soaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc01lbW9yeUFjY2Vzcyk7CiAgICAg
ICAgIH0pOwogICAgIH0gZWxzZQotICAgICAgICBlbWl0U3RvcmVPcChvcCwgT3JpZ2luKCksIGVt
aXRDaGVja0FuZFByZXBhcmVQb2ludGVyKHBvaW50ZXIsIG9mZnNldCwgc2l6ZU9mU3RvcmVPcChv
cCkpLCB2YWx1ZSwgb2Zmc2V0KTsKKyAgICAgICAgZW1pdFN0b3JlT3Aob3AsIGVtaXRDaGVja0Fu
ZFByZXBhcmVQb2ludGVyKHBvaW50ZXIsIG9mZnNldCwgc2l6ZU9mU3RvcmVPcChvcCkpLCB2YWx1
ZSwgb2Zmc2V0KTsKIAogICAgIHJldHVybiB7IH07CiB9CiAKIGF1dG8gQjNJUkdlbmVyYXRvcjo6
YWRkU2VsZWN0KEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgRXhwcmVzc2lvblR5cGUgbm9uWmVy
bywgRXhwcmVzc2lvblR5cGUgemVybywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAogewotICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+
KG1fcHJvYywgQjM6OlNlbGVjdCwgT3JpZ2luKCksIGNvbmRpdGlvbiwgbm9uWmVybywgemVybyk7
CisgICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBC
Mzo6U2VsZWN0LCBvcmlnaW4oKSwgY29uZGl0aW9uLCBub25aZXJvLCB6ZXJvKTsKICAgICByZXR1
cm4geyB9OwogfQogCkBAIC03NjAsMTMgKzc1MSwxMyBAQCBCM0lSR2VuZXJhdG9yOjpFeHByZXNz
aW9uVHlwZSBCM0lSR2VuZXJhdG9yOjphZGRDb25zdGFudChUeXBlIHR5cGUsIHVpbnQ2NF90IHZh
bAogewogICAgIHN3aXRjaCAodHlwZSkgewogICAgIGNhc2UgV2FzbTo6STMyOgotICAgICAgICBy
ZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywgT3Jp
Z2luKCksIHN0YXRpY19jYXN0PGludDMyX3Q+KHZhbHVlKSk7CisgICAgICAgIHJldHVybiBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgc3Rh
dGljX2Nhc3Q8aW50MzJfdD4odmFsdWUpKTsKICAgICBjYXNlIFdhc206Okk2NDoKLSAgICAgICAg
cmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihtX3Byb2MsIE9y
aWdpbigpLCB2YWx1ZSk7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PENvbnN0NjRWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdmFsdWUpOwogICAgIGNhc2UgV2FzbTo6
RjMyOgotICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdEZsb2F0
VmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIGJpdHdpc2VfY2FzdDxmbG9hdD4oc3RhdGljX2Nhc3Q8
aW50MzJfdD4odmFsdWUpKSk7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PENvbnN0RmxvYXRWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgYml0d2lzZV9jYXN0PGZsb2F0
PihzdGF0aWNfY2FzdDxpbnQzMl90Pih2YWx1ZSkpKTsKICAgICBjYXNlIFdhc206OkY2NDoKLSAg
ICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3REb3VibGVWYWx1ZT4o
bV9wcm9jLCBPcmlnaW4oKSwgYml0d2lzZV9jYXN0PGRvdWJsZT4odmFsdWUpKTsKKyAgICAgICAg
cmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3REb3VibGVWYWx1ZT4obV9wcm9j
LCBvcmlnaW4oKSwgYml0d2lzZV9jYXN0PGRvdWJsZT4odmFsdWUpKTsKICAgICBjYXNlIFdhc206
OlZvaWQ6CiAgICAgY2FzZSBXYXNtOjpGdW5jOgogICAgIGNhc2UgV2FzbTo6QW55ZnVuYzoKQEAg
LTc5MCw3ICs3ODEsNyBAQCBCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0YSBCM0lSR2VuZXJhdG9y
OjphZGRMb29wKFR5cGUgc2lnbmF0dXJlKQogewogICAgIEJhc2ljQmxvY2sqIGJvZHkgPSBtX3By
b2MuYWRkQmxvY2soKTsKICAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX3Byb2MuYWRk
QmxvY2soKTsKLSAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJv
YywgSnVtcCwgT3JpZ2luKCksIGJvZHkpOworICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXdD
b250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBvcmlnaW4oKSwgYm9keSk7CiAgICAgYm9keS0+YWRk
UHJlZGVjZXNzb3IobV9jdXJyZW50QmxvY2spOwogICAgIG1fY3VycmVudEJsb2NrID0gYm9keTsK
ICAgICByZXR1cm4gQ29udHJvbERhdGEobV9wcm9jLCBzaWduYXR1cmUsIEJsb2NrVHlwZTo6TG9v
cCwgY29udGludWF0aW9uLCBib2R5KTsKQEAgLTgwNCw3ICs3OTUsNyBAQCBhdXRvIEIzSVJHZW5l
cmF0b3I6OmFkZElmKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgVHlwZSBzaWduYXR1cmUsIENv
bnRyb2xUeXBlJgogICAgIEJhc2ljQmxvY2sqIG5vdFRha2VuID0gbV9wcm9jLmFkZEJsb2NrKCk7
CiAgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9wcm9jLmFkZEJsb2NrKCk7CiAKLSAg
ICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEIzOjpCcmFuY2gsIE9y
aWdpbigpLCBjb25kaXRpb24pOworICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+
KG1fcHJvYywgQjM6OkJyYW5jaCwgb3JpZ2luKCksIGNvbmRpdGlvbik7CiAgICAgbV9jdXJyZW50
QmxvY2stPnNldFN1Y2Nlc3NvcnMoRnJlcXVlbnRlZEJsb2NrKHRha2VuKSwgRnJlcXVlbnRlZEJs
b2NrKG5vdFRha2VuKSk7CiAgICAgdGFrZW4tPmFkZFByZWRlY2Vzc29yKG1fY3VycmVudEJsb2Nr
KTsKICAgICBub3RUYWtlbi0+YWRkUHJlZGVjZXNzb3IobV9jdXJyZW50QmxvY2spOwpAQCAtODE3
LDcgKzgwOCw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkSWYoRXhwcmVzc2lvblR5cGUgY29u
ZGl0aW9uLCBUeXBlIHNpZ25hdHVyZSwgQ29udHJvbFR5cGUmCiBhdXRvIEIzSVJHZW5lcmF0b3I6
OmFkZEVsc2UoQ29udHJvbERhdGEmIGRhdGEsIGNvbnN0IEV4cHJlc3Npb25MaXN0JiBjdXJyZW50
U3RhY2spIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhjdXJy
ZW50U3RhY2ssIGRhdGEucmVzdWx0KTsKLSAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3Q29u
dHJvbFZhbHVlKG1fcHJvYywgSnVtcCwgT3JpZ2luKCksIGRhdGEuY29udGludWF0aW9uKTsKKyAg
ICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgSnVtcCwgb3Jp
Z2luKCksIGRhdGEuY29udGludWF0aW9uKTsKICAgICByZXR1cm4gYWRkRWxzZVRvVW5yZWFjaGFi
bGUoZGF0YSk7CiB9CiAKQEAgLTgzMyw5ICs4MjQsOSBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFk
ZFJldHVybihjb25zdCBDb250cm9sRGF0YSYsIGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXR1cm5W
YQogewogICAgIEFTU0VSVChyZXR1cm5WYWx1ZXMuc2l6ZSgpIDw9IDEpOwogICAgIGlmIChyZXR1
cm5WYWx1ZXMuc2l6ZSgpKQotICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3Q29udHJv
bFZhbHVlKG1fcHJvYywgQjM6OlJldHVybiwgT3JpZ2luKCksIHJldHVyblZhbHVlc1swXSk7Cisg
ICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBCMzo6
UmV0dXJuLCBvcmlnaW4oKSwgcmV0dXJuVmFsdWVzWzBdKTsKICAgICBlbHNlCi0gICAgICAgIG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBCMzo6UmV0dXJuLCBP
cmlnaW4oKSk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUo
bV9wcm9jLCBCMzo6UmV0dXJuLCBvcmlnaW4oKSk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIApAQCAt
ODQ3LDEzICs4MzgsMTMgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRCcmFuY2goQ29udHJvbERh
dGEmIGRhdGEsIEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QKICAgICBCYXNpY0Jsb2Nr
KiB0YXJnZXQgPSBkYXRhLnRhcmdldEJsb2NrRm9yQnJhbmNoKCk7CiAgICAgaWYgKGNvbmRpdGlv
bikgewogICAgICAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX3Byb2MuYWRkQmxvY2so
KTsKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCMzo6
QnJhbmNoLCBPcmlnaW4oKSwgY29uZGl0aW9uKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCMzo6QnJhbmNoLCBvcmlnaW4oKSwgY29uZGl0aW9uKTsK
ICAgICAgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMoRnJlcXVlbnRlZEJsb2NrKHRh
cmdldCksIEZyZXF1ZW50ZWRCbG9jayhjb250aW51YXRpb24pKTsKICAgICAgICAgdGFyZ2V0LT5h
ZGRQcmVkZWNlc3NvcihtX2N1cnJlbnRCbG9jayk7CiAgICAgICAgIGNvbnRpbnVhdGlvbi0+YWRk
UHJlZGVjZXNzb3IobV9jdXJyZW50QmxvY2spOwogICAgICAgICBtX2N1cnJlbnRCbG9jayA9IGNv
bnRpbnVhdGlvbjsKICAgICB9IGVsc2UgewotICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3Q29udHJvbFZhbHVlKG1fcHJvYywgSnVtcCwgT3JpZ2luKCksIEZyZXF1ZW50ZWRCbG9jayh0
YXJnZXQpKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSht
X3Byb2MsIEp1bXAsIG9yaWdpbigpLCBGcmVxdWVudGVkQmxvY2sodGFyZ2V0KSk7CiAgICAgICAg
IHRhcmdldC0+YWRkUHJlZGVjZXNzb3IobV9jdXJyZW50QmxvY2spOwogICAgIH0KIApAQCAtODY2
LDcgKzg1Nyw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkU3dpdGNoKEV4cHJlc3Npb25UeXBl
IGNvbmRpdGlvbiwgY29uc3QgVmVjdG9yPENvbnRyb2xEYXRhCiAgICAgICAgIHVuaWZ5VmFsdWVz
V2l0aEJsb2NrKGV4cHJlc3Npb25TdGFjaywgdGFyZ2V0c1tpXS0+cmVzdWx0KTsKICAgICB1bmlm
eVZhbHVlc1dpdGhCbG9jayhleHByZXNzaW9uU3RhY2ssIGRlZmF1bHRUYXJnZXQucmVzdWx0KTsK
IAotICAgIFN3aXRjaFZhbHVlKiBzd2l0Y2hWYWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8U3dpdGNoVmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIGNvbmRpdGlvbik7CisgICAgU3dpdGNo
VmFsdWUqIHN3aXRjaFZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxTd2l0Y2hWYWx1
ZT4obV9wcm9jLCBvcmlnaW4oKSwgY29uZGl0aW9uKTsKICAgICBzd2l0Y2hWYWx1ZS0+c2V0RmFs
bFRocm91Z2goRnJlcXVlbnRlZEJsb2NrKGRlZmF1bHRUYXJnZXQudGFyZ2V0QmxvY2tGb3JCcmFu
Y2goKSkpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGFyZ2V0cy5zaXplKCk7ICsraSkK
ICAgICAgICAgc3dpdGNoVmFsdWUtPmFwcGVuZENhc2UoU3dpdGNoQ2FzZShpLCBGcmVxdWVudGVk
QmxvY2sodGFyZ2V0c1tpXS0+dGFyZ2V0QmxvY2tGb3JCcmFuY2goKSkpKTsKQEAgLTg3OSw3ICs4
NzAsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmVuZEJsb2NrKENvbnRyb2xFbnRyeSYgZW50cnks
IEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhYwogICAgIENvbnRyb2xEYXRhJiBkYXRhID0g
ZW50cnkuY29udHJvbERhdGE7CiAKICAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhleHByZXNzaW9u
U3RhY2ssIGRhdGEucmVzdWx0KTsKLSAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3Q29udHJv
bFZhbHVlKG1fcHJvYywgSnVtcCwgT3JpZ2luKCksIGRhdGEuY29udGludWF0aW9uKTsKKyAgICBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgSnVtcCwgb3JpZ2lu
KCksIGRhdGEuY29udGludWF0aW9uKTsKICAgICBkYXRhLmNvbnRpbnVhdGlvbi0+YWRkUHJlZGVj
ZXNzb3IobV9jdXJyZW50QmxvY2spOwogCiAgICAgcmV0dXJuIGFkZEVuZFRvVW5yZWFjaGFibGUo
ZW50cnkpOwpAQCAtODkyLDEyICs4ODMsMTIgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRFbmRU
b1VucmVhY2hhYmxlKENvbnRyb2xFbnRyeSYgZW50cnkpIC0+IFBhcnRpYWxSZXN1bHQKICAgICBt
X2N1cnJlbnRCbG9jayA9IGRhdGEuY29udGludWF0aW9uOwogCiAgICAgaWYgKGRhdGEudHlwZSgp
ID09IEJsb2NrVHlwZTo6SWYpIHsKLSAgICAgICAgZGF0YS5zcGVjaWFsLT5hcHBlbmROZXdDb250
cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBPcmlnaW4oKSwgbV9jdXJyZW50QmxvY2spOworICAgICAg
ICBkYXRhLnNwZWNpYWwtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEp1bXAsIG9yaWdp
bigpLCBtX2N1cnJlbnRCbG9jayk7CiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hZGRQcmVkZWNl
c3NvcihkYXRhLnNwZWNpYWwpOwogICAgIH0KIAogICAgIGZvciAoVmFyaWFibGUqIHJlc3VsdCA6
IGRhdGEucmVzdWx0KQotICAgICAgICBlbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjay5hcHBl
bmQobV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihtX3Byb2MsIEIzOjpH
ZXQsIE9yaWdpbigpLCByZXN1bHQpKTsKKyAgICAgICAgZW50cnkuZW5jbG9zZWRFeHByZXNzaW9u
U3RhY2suYXBwZW5kKG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4obV9w
cm9jLCBCMzo6R2V0LCBvcmlnaW4oKSwgcmVzdWx0KSk7CiAKICAgICAvLyBUb3BMZXZlbCBkb2Vz
IG5vdCBoYXZlIGFueSBjb2RlIGFmdGVyIHRoaXMgc28gd2UgbmVlZCB0byBtYWtlIHN1cmUgd2Ug
ZW1pdCBhIHJldHVybiBoZXJlLgogICAgIGlmIChkYXRhLnR5cGUoKSA9PSBCbG9ja1R5cGU6OlRv
cExldmVsKQpAQCAtOTE1LDE2ICs5MDYsMTYgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxs
KHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSogc2lnbmF0dXJlLAogCiAg
ICAgaWYgKG1faW5mby5pc0ltcG9ydGVkRnVuY3Rpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1
bmN0aW9uSW5kZXgpKSB7CiAgICAgICAgIC8vIEZJWE1FIGltcG9ydHMgY2FuIGJlIGxpbmtlZCBo
ZXJlLCBpbnN0ZWFkIG9mIGdlbmVyYXRpbmcgYSBwYXRjaHBvaW50LCBiZWNhdXNlIGFsbCBpbXBv
cnQgc3R1YnMgYXJlIGdlbmVyYXRlZCBiZWZvcmUgQjMgY29tcGlsYXRpb24gc3RhcnRzLiBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2NDYyCi0gICAgICAgIFZhbHVl
KiBmdW5jdGlvbkltcG9ydCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+
KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgT3JpZ2luKCksIG1faW5zdGFuY2VWYWx1ZSwg
SlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkltcG9ydEZ1bmN0aW9uKGZ1bmN0aW9uSW5k
ZXgpKTsKLSAgICAgICAgVmFsdWUqIGpzVHlwZU9mSW1wb3J0ID0gbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkOFosIE9yaWdpbigpLCBmdW5jdGlvbklt
cG9ydCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSk7Ci0gICAgICAgIFZhbHVlKiBpc1dh
c21DYWxsID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwg
T3JpZ2luKCksIGpzVHlwZU9mSW1wb3J0LCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0
MzJWYWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwgV2ViQXNzZW1ibHlGdW5jdGlvblR5cGUpKTsKKyAg
ICAgICAgVmFsdWUqIGZ1bmN0aW9uSW1wb3J0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxN
ZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwgbV9pbnN0
YW5jZVZhbHVlLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mSW1wb3J0RnVuY3Rpb24o
ZnVuY3Rpb25JbmRleCkpOworICAgICAgICBWYWx1ZSoganNUeXBlT2ZJbXBvcnQgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQ4Wiwgb3JpZ2luKCks
IGZ1bmN0aW9uSW1wb3J0LCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKTsKKyAgICAgICAg
VmFsdWUqIGlzV2FzbUNhbGwgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3By
b2MsIEVxdWFsLCBvcmlnaW4oKSwganNUeXBlT2ZJbXBvcnQsIG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBXZWJBc3NlbWJseUZ1bmN0aW9u
VHlwZSkpOwogCiAgICAgICAgIEJhc2ljQmxvY2sqIGlzV2FzbUJsb2NrID0gbV9wcm9jLmFkZEJs
b2NrKCk7CiAgICAgICAgIEJhc2ljQmxvY2sqIGlzSlNCbG9jayA9IG1fcHJvYy5hZGRCbG9jaygp
OwogICAgICAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX3Byb2MuYWRkQmxvY2soKTsK
LSAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEIz
OjpCcmFuY2gsIE9yaWdpbigpLCBpc1dhc21DYWxsLCBGcmVxdWVudGVkQmxvY2soaXNXYXNtQmxv
Y2spLCBGcmVxdWVudGVkQmxvY2soaXNKU0Jsb2NrKSk7CisgICAgICAgIG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBCMzo6QnJhbmNoLCBvcmlnaW4oKSwgaXNX
YXNtQ2FsbCwgRnJlcXVlbnRlZEJsb2NrKGlzV2FzbUJsb2NrKSwgRnJlcXVlbnRlZEJsb2NrKGlz
SlNCbG9jaykpOwogCi0gICAgICAgIFZhbHVlKiB3YXNtQ2FsbFJlc3VsdCA9IHdhc21DYWxsaW5n
Q29udmVudGlvbigpLnNldHVwQ2FsbChtX3Byb2MsIGlzV2FzbUJsb2NrLCBPcmlnaW4oKSwgYXJn
cywgdG9CM1R5cGUocmV0dXJuVHlwZSksCisgICAgICAgIFZhbHVlKiB3YXNtQ2FsbFJlc3VsdCA9
IHdhc21DYWxsaW5nQ29udmVudGlvbigpLnNldHVwQ2FsbChtX3Byb2MsIGlzV2FzbUJsb2NrLCBv
cmlnaW4oKSwgYXJncywgdG9CM1R5cGUocmV0dXJuVHlwZSksCiAgICAgICAgICAgICBbPV0gKFBh
dGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCkgewogICAgICAgICAgICAgICAgIHBhdGNocG9pbnQt
PmVmZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBwYXRjaHBvaW50
LT5lZmZlY3RzLnJlYWRzUGlubmVkID0gdHJ1ZTsKQEAgLTkzNywxMCArOTI4LDEwIEBAIGF1dG8g
QjNJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWdu
YXR1cmUqIHNpZ25hdHVyZSwKICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAg
ICAgfSk7CiAgICAgICAgICAgICB9KTsKLSAgICAgICAgVXBzaWxvblZhbHVlKiB3YXNtQ2FsbFJl
c3VsdFVwc2lsb24gPSByZXR1cm5UeXBlID09IFZvaWQgPyBudWxscHRyIDogaXNXYXNtQmxvY2st
PmFwcGVuZE5ldzxVcHNpbG9uVmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIHdhc21DYWxsUmVzdWx0
KTsKLSAgICAgICAgaXNXYXNtQmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEp1
bXAsIE9yaWdpbigpLCBjb250aW51YXRpb24pOworICAgICAgICBVcHNpbG9uVmFsdWUqIHdhc21D
YWxsUmVzdWx0VXBzaWxvbiA9IHJldHVyblR5cGUgPT0gVm9pZCA/IG51bGxwdHIgOiBpc1dhc21C
bG9jay0+YXBwZW5kTmV3PFVwc2lsb25WYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgd2FzbUNhbGxS
ZXN1bHQpOworICAgICAgICBpc1dhc21CbG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJv
YywgSnVtcCwgb3JpZ2luKCksIGNvbnRpbnVhdGlvbik7CiAKLSAgICAgICAgVmFsdWUqIGpzQ2Fs
bFJlc3VsdCA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLnNldHVwQ2FsbChtX3Byb2MsIGlzSlNC
bG9jaywgT3JpZ2luKCksIGFyZ3MsIHRvQjNUeXBlKHJldHVyblR5cGUpLAorICAgICAgICBWYWx1
ZSoganNDYWxsUmVzdWx0ID0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkuc2V0dXBDYWxsKG1fcHJv
YywgaXNKU0Jsb2NrLCBvcmlnaW4oKSwgYXJncywgdG9CM1R5cGUocmV0dXJuVHlwZSksCiAgICAg
ICAgICAgICBbPV0gKFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCkgewogICAgICAgICAgICAg
ICAgIHBhdGNocG9pbnQtPmVmZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1ZTsKICAgICAgICAgICAg
ICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLnJlYWRzUGlubmVkID0gdHJ1ZTsKQEAgLTk1MywxNSAr
OTQ0LDE1IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlvbklu
ZGV4LCBjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSwKICAgICAgICAgICAgICAgICAgICAgfSk7
CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9KTsKLSAgICAgICAgVXBzaWxvblZh
bHVlKiBqc0NhbGxSZXN1bHRVcHNpbG9uID0gcmV0dXJuVHlwZSA9PSBWb2lkID8gbnVsbHB0ciA6
IGlzSlNCbG9jay0+YXBwZW5kTmV3PFVwc2lsb25WYWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwganND
YWxsUmVzdWx0KTsKLSAgICAgICAgaXNKU0Jsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9w
cm9jLCBKdW1wLCBPcmlnaW4oKSwgY29udGludWF0aW9uKTsKKyAgICAgICAgVXBzaWxvblZhbHVl
KiBqc0NhbGxSZXN1bHRVcHNpbG9uID0gcmV0dXJuVHlwZSA9PSBWb2lkID8gbnVsbHB0ciA6IGlz
SlNCbG9jay0+YXBwZW5kTmV3PFVwc2lsb25WYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwganNDYWxs
UmVzdWx0KTsKKyAgICAgICAgaXNKU0Jsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9j
LCBKdW1wLCBvcmlnaW4oKSwgY29udGludWF0aW9uKTsKIAogICAgICAgICBtX2N1cnJlbnRCbG9j
ayA9IGNvbnRpbnVhdGlvbjsKIAogICAgICAgICBpZiAocmV0dXJuVHlwZSA9PSBWb2lkKQogICAg
ICAgICAgICAgcmVzdWx0ID0gbnVsbHB0cjsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBy
ZXN1bHQgPSBjb250aW51YXRpb24tPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBQaGksIHRvQjNU
eXBlKHJldHVyblR5cGUpLCBPcmlnaW4oKSk7CisgICAgICAgICAgICByZXN1bHQgPSBjb250aW51
YXRpb24tPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBQaGksIHRvQjNUeXBlKHJldHVyblR5cGUp
LCBvcmlnaW4oKSk7CiAgICAgICAgICAgICB3YXNtQ2FsbFJlc3VsdFVwc2lsb24tPnNldFBoaShy
ZXN1bHQpOwogICAgICAgICAgICAganNDYWxsUmVzdWx0VXBzaWxvbi0+c2V0UGhpKHJlc3VsdCk7
CiAgICAgICAgIH0KQEAgLTk2OSw3ICs5NjAsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENh
bGwodWludDMyX3QgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlKiBzaWduYXR1cmUsCiAg
ICAgICAgIC8vIFRoZSBjYWxsIGNvdWxkIGhhdmUgYmVlbiB0byBhbm90aGVyIFdlYkFzc2VtYmx5
IGluc3RhbmNlLCBhbmQgLyBvciBjb3VsZCBoYXZlIG1vZGlmaWVkIG91ciBNZW1vcnkuCiAgICAg
ICAgIHJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKG1faW5mby5tZW1vcnksIG1faW5zdGFu
Y2VWYWx1ZSwgbV9wcm9jLCBjb250aW51YXRpb24pOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHJl
c3VsdCA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLnNldHVwQ2FsbChtX3Byb2MsIG1fY3VycmVu
dEJsb2NrLCBPcmlnaW4oKSwgYXJncywgdG9CM1R5cGUocmV0dXJuVHlwZSksCisgICAgICAgIHJl
c3VsdCA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLnNldHVwQ2FsbChtX3Byb2MsIG1fY3VycmVu
dEJsb2NrLCBvcmlnaW4oKSwgYXJncywgdG9CM1R5cGUocmV0dXJuVHlwZSksCiAgICAgICAgICAg
ICBbPV0gKFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCkgewogICAgICAgICAgICAgICAgIHBh
dGNocG9pbnQtPmVmZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBw
YXRjaHBvaW50LT5lZmZlY3RzLnJlYWRzUGlubmVkID0gdHJ1ZTsKQEAgLTk5NiwxOCArOTg3LDE4
IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KGNvbnN0IFNpZ25hdHVyZSog
c2lnbmF0dXJlLCBTaWduYXR1cmVJbmRleCBzCiAgICAgRXhwcmVzc2lvblR5cGUgY2FsbGFibGVG
dW5jdGlvbkJ1ZmZlcjsKICAgICBFeHByZXNzaW9uVHlwZSBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVy
U2l6ZTsKICAgICB7Ci0gICAgICAgIEV4cHJlc3Npb25UeXBlIHRhYmxlID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBP
cmlnaW4oKSwKKyAgICAgICAgRXhwcmVzc2lvblR5cGUgdGFibGUgPSBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdp
bigpLAogICAgICAgICAgICAgbV9pbnN0YW5jZVZhbHVlLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6
Om9mZnNldE9mVGFibGUoKSk7Ci0gICAgICAgIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXIgPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJU
eXBlKCksIE9yaWdpbigpLAorICAgICAgICBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlw
ZSgpLCBvcmlnaW4oKSwKICAgICAgICAgICAgIHRhYmxlLCBKU1dlYkFzc2VtYmx5VGFibGU6Om9m
ZnNldE9mRnVuY3Rpb25zKCkpOwotICAgICAgICBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyU2l6ZSA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgSW50
MzIsIE9yaWdpbigpLAorICAgICAgICBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyU2l6ZSA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgSW50MzIsIG9y
aWdpbigpLAogICAgICAgICAgICAgdGFibGUsIEpTV2ViQXNzZW1ibHlUYWJsZTo6b2Zmc2V0T2ZT
aXplKCkpOwogICAgIH0KIAogICAgIC8vIENoZWNrIHRoZSBpbmRleCB3ZSBhcmUgbG9va2luZyBm
b3IgaXMgdmFsaWQuCiAgICAgewotICAgICAgICBDaGVja1ZhbHVlKiBjaGVjayA9IG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgT3JpZ2luKCksCi0g
ICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEFib3Zl
RXF1YWwsIE9yaWdpbigpLCBjYWxsZWVJbmRleCwgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlclNpemUp
KTsKKyAgICAgICAgQ2hlY2tWYWx1ZSogY2hlY2sgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIG9yaWdpbigpLAorICAgICAgICAgICAgbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBBYm92ZUVxdWFsLCBvcmlnaW4oKSwg
Y2FsbGVlSW5kZXgsIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXJTaXplKSk7CiAKICAgICAgICAgY2hl
Y2stPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2tt
YXBHZW5lcmF0aW9uUGFyYW1zJikgewogICAgICAgICAgICAgdGhpcy0+ZW1pdEV4Y2VwdGlvbkNo
ZWNrKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNDYWxsSW5kaXJlY3QpOwpAQCAtMTAx
NSwxOSArMTAwNiwxOSBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdChjb25z
dCBTaWduYXR1cmUqIHNpZ25hdHVyZSwgU2lnbmF0dXJlSW5kZXggcwogICAgIH0KIAogICAgIC8v
IENvbXB1dGUgdGhlIG9mZnNldCBpbiB0aGUgdGFibGUgaW5kZXggc3BhY2Ugd2UgYXJlIGxvb2tp
bmcgZm9yLgotICAgIEV4cHJlc3Npb25UeXBlIG9mZnNldCA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8VmFsdWU+KG1fcHJvYywgTXVsLCBPcmlnaW4oKSwKLSAgICAgICAgbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBaRXh0MzIsIE9yaWdpbigpLCBjYWxsZWVJbmRl
eCksCi0gICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmRJbnRDb25zdGFudChtX3Byb2MsIE9y
aWdpbigpLCBwb2ludGVyVHlwZSgpLCBzaXplb2YoQ2FsbGFibGVGdW5jdGlvbikpKTsKLSAgICBF
eHByZXNzaW9uVHlwZSBjYWxsYWJsZUZ1bmN0aW9uID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxWYWx1ZT4obV9wcm9jLCBBZGQsIE9yaWdpbigpLCBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyLCBv
ZmZzZXQpOworICAgIEV4cHJlc3Npb25UeXBlIG9mZnNldCA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8VmFsdWU+KG1fcHJvYywgTXVsLCBvcmlnaW4oKSwKKyAgICAgICAgbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBaRXh0MzIsIG9yaWdpbigpLCBjYWxsZWVJbmRl
eCksCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmRJbnRDb25zdGFudChtX3Byb2MsIG9y
aWdpbigpLCBwb2ludGVyVHlwZSgpLCBzaXplb2YoQ2FsbGFibGVGdW5jdGlvbikpKTsKKyAgICBF
eHByZXNzaW9uVHlwZSBjYWxsYWJsZUZ1bmN0aW9uID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxWYWx1ZT4obV9wcm9jLCBBZGQsIG9yaWdpbigpLCBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyLCBv
ZmZzZXQpOwogCiAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgQ2FsbGFibGVGdW5jdGlvbiBpcyBpbml0
aWFsaXplZC4gV2UgdHJhcCBpZiBpdCBpc24ndC4gQW4gImludmFsaWQiIFNpZ25hdHVyZUluZGV4
IGluZGljYXRlcyBpdCdzIG5vdCBpbml0aWFsaXplZC4KICAgICBzdGF0aWNfYXNzZXJ0KHNpemVv
ZihDYWxsYWJsZUZ1bmN0aW9uOjpzaWduYXR1cmVJbmRleCkgPT0gc2l6ZW9mKHVpbnQzMl90KSwg
IkxvYWQgY29kZWdlbiBhc3N1bWVzIGkzMiIpOwotICAgIEV4cHJlc3Npb25UeXBlIGNhbGxlZVNp
Z25hdHVyZUluZGV4ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9w
cm9jLCBMb2FkLCBJbnQzMiwgT3JpZ2luKCksIGNhbGxhYmxlRnVuY3Rpb24sIE9CSkVDVF9PRkZT
RVRPRihDYWxsYWJsZUZ1bmN0aW9uLCBzaWduYXR1cmVJbmRleCkpOworICAgIEV4cHJlc3Npb25U
eXBlIGNhbGxlZVNpZ25hdHVyZUluZGV4ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1v
cnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBJbnQzMiwgb3JpZ2luKCksIGNhbGxhYmxlRnVuY3Rpb24s
IE9CSkVDVF9PRkZTRVRPRihDYWxsYWJsZUZ1bmN0aW9uLCBzaWduYXR1cmVJbmRleCkpOwogICAg
IHsKLSAgICAgICAgQ2hlY2tWYWx1ZSogY2hlY2sgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIE9yaWdpbigpLAotICAgICAgICAgICAgbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgT3JpZ2luKCksCisgICAg
ICAgIENoZWNrVmFsdWUqIGNoZWNrID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1Zh
bHVlPihtX3Byb2MsIENoZWNrLCBvcmlnaW4oKSwKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLAogICAgICAgICAgICAg
ICAgIGNhbGxlZVNpZ25hdHVyZUluZGV4LAotICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCBTaWduYXR1cmU6Omlu
dmFsaWRJbmRleCkpKTsKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgU2lnbmF0dXJlOjppbnZhbGlkSW5kZXgp
KSk7CiAKICAgICAgICAgY2hlY2stPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0
LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgewogICAgICAgICAgICAgdGhp
cy0+ZW1pdEV4Y2VwdGlvbkNoZWNrKGppdCwgRXhjZXB0aW9uVHlwZTo6TnVsbFRhYmxlRW50cnkp
OwpAQCAtMTAzNiwxOSArMTAyNywxOSBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGxJbmRp
cmVjdChjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSwgU2lnbmF0dXJlSW5kZXggcwogCiAgICAg
Ly8gQ2hlY2sgdGhlIHNpZ25hdHVyZSBtYXRjaGVzIHRoZSB2YWx1ZSB3ZSBleHBlY3QuCiAgICAg
ewotICAgICAgICBFeHByZXNzaW9uVHlwZSBleHBlY3RlZFNpZ25hdHVyZUluZGV4ID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIHNpZ25h
dHVyZUluZGV4KTsKLSAgICAgICAgQ2hlY2tWYWx1ZSogY2hlY2sgPSBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIE9yaWdpbigpLAotICAgICAgICAg
ICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBOb3RFcXVhbCwgT3Jp
Z2luKCksIGNhbGxlZVNpZ25hdHVyZUluZGV4LCBleHBlY3RlZFNpZ25hdHVyZUluZGV4KSk7Cisg
ICAgICAgIEV4cHJlc3Npb25UeXBlIGV4cGVjdGVkU2lnbmF0dXJlSW5kZXggPSBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgc2lnbmF0dXJl
SW5kZXgpOworICAgICAgICBDaGVja1ZhbHVlKiBjaGVjayA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgb3JpZ2luKCksCisgICAgICAgICAgICBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIE5vdEVxdWFsLCBvcmlnaW4o
KSwgY2FsbGVlU2lnbmF0dXJlSW5kZXgsIGV4cGVjdGVkU2lnbmF0dXJlSW5kZXgpKTsKIAogICAg
ICAgICBjaGVjay0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIz
OjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CiAgICAgICAgICAgICB0aGlzLT5lbWl0RXhj
ZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRpb25UeXBlOjpCYWRTaWduYXR1cmUpOwogICAgICAgICB9
KTsKICAgICB9CiAKLSAgICBFeHByZXNzaW9uVHlwZSBjYWxsZWVDb2RlID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBP
cmlnaW4oKSwgY2FsbGFibGVGdW5jdGlvbiwgT0JKRUNUX09GRlNFVE9GKENhbGxhYmxlRnVuY3Rp
b24sIGNvZGUpKTsKKyAgICBFeHByZXNzaW9uVHlwZSBjYWxsZWVDb2RlID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBv
cmlnaW4oKSwgY2FsbGFibGVGdW5jdGlvbiwgT0JKRUNUX09GRlNFVE9GKENhbGxhYmxlRnVuY3Rp
b24sIGNvZGUpKTsKIAogICAgIFR5cGUgcmV0dXJuVHlwZSA9IHNpZ25hdHVyZS0+cmV0dXJuVHlw
ZSgpOwotICAgIHJlc3VsdCA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLnNldHVwQ2FsbChtX3By
b2MsIG1fY3VycmVudEJsb2NrLCBPcmlnaW4oKSwgYXJncywgdG9CM1R5cGUocmV0dXJuVHlwZSks
CisgICAgcmVzdWx0ID0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkuc2V0dXBDYWxsKG1fcHJvYywg
bV9jdXJyZW50QmxvY2ssIG9yaWdpbigpLCBhcmdzLCB0b0IzVHlwZShyZXR1cm5UeXBlKSwKICAg
ICAgICAgWz1dIChQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQpIHsKICAgICAgICAgICAgIHBh
dGNocG9pbnQtPmVmZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1ZTsKICAgICAgICAgICAgIHBhdGNo
cG9pbnQtPmVmZmVjdHMucmVhZHNQaW5uZWQgPSB0cnVlOwpAQCAtMTA2OSw3ICsxMDYwLDcgQEAg
YXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QoY29uc3QgU2lnbmF0dXJlKiBzaWdu
YXR1cmUsIFNpZ25hdHVyZUluZGV4IHMKIAogdm9pZCBCM0lSR2VuZXJhdG9yOjp1bmlmeShWYXJp
YWJsZSogdmFyaWFibGUsIEV4cHJlc3Npb25UeXBlIHNvdXJjZSkKIHsKLSAgICBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1fcHJvYywgU2V0LCBPcmlnaW4oKSwgdmFy
aWFibGUsIHNvdXJjZSk7CisgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYXJpYWJsZVZh
bHVlPihtX3Byb2MsIFNldCwgb3JpZ2luKCksIHZhcmlhYmxlLCBzb3VyY2UpOwogfQogCiB2b2lk
IEIzSVJHZW5lcmF0b3I6OnVuaWZ5VmFsdWVzV2l0aEJsb2NrKGNvbnN0IEV4cHJlc3Npb25MaXN0
JiByZXN1bHRTdGFjaywgUmVzdWx0TGlzdCYgcmVzdWx0KQpAQCAtMTI3OSw2ICsxMjcwLDE0IEBA
IHN0YXRpYyB2b2lkIGNyZWF0ZUpTVG9XYXNtV3JhcHBlcihDb21waWxhdGlvbkNvbnRleHQmIGNv
bXBpbGF0aW9uQ29udGV4dCwgV2FzbUluCiAgICAgaml0LnJldCgpOwogfQogCithdXRvIEIzSVJH
ZW5lcmF0b3I6Om9yaWdpbigpIC0+IE9yaWdpbgoreworICAgIGlmIChtX29yaWdpbnMuaXNFbXB0
eSgpIHx8IG1fb3JpZ2lucy5sYXN0KCktPmxvY2F0aW9uICE9IG1fcGFyc2VyLT5jdXJyZW50T3Bj
b2RlU3RhcnRpbmdPZmZzZXQoKSkKKyAgICAgICAgbV9vcmlnaW5zLmFwcGVuZChzdGQ6Om1ha2Vf
dW5pcXVlPE9wY29kZU9yaWdpbj4obV9wYXJzZXItPmN1cnJlbnRPcGNvZGUoKSwgbV9wYXJzZXIt
PmN1cnJlbnRPcGNvZGVTdGFydGluZ09mZnNldCgpKSk7CisKKyAgICByZXR1cm4gT3JpZ2luKG1f
b3JpZ2lucy5sYXN0KCkuZ2V0KCkpOworfQorCiBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8V2Fz
bUludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZShWTSYgdm0sIENvbXBp
bGF0aW9uQ29udGV4dCYgY29tcGlsYXRpb25Db250ZXh0LCBjb25zdCB1aW50OF90KiBmdW5jdGlv
blN0YXJ0LCBzaXplX3QgZnVuY3Rpb25MZW5ndGgsIGNvbnN0IFNpZ25hdHVyZSogc2lnbmF0dXJl
LCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxz
LCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgY29uc3QgVmVjdG9yPFNpZ25hdHVyZUlu
ZGV4PiYgbW9kdWxlU2lnbmF0dXJlSW5kaWNlc1RvVW5pcXVlZFNpZ25hdHVyZUluZGljZXMsIE1l
bW9yeU1vZGUgbW9kZSwgdW5zaWduZWQgb3B0TGV2ZWwpCiB7CiAgICAgYXV0byByZXN1bHQgPSBz
dGQ6Om1ha2VfdW5pcXVlPFdhc21JbnRlcm5hbEZ1bmN0aW9uPigpOwpAQCAtMTI4Nyw2ICsxMjg2
LDEyIEBAIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxXYXNtSW50ZXJuYWxGdW5jdGlvbj4sIFN0
cmluZz4gcGFyc2VBbmRDb21waWxlKFZNJiB2bSwKICAgICBjb21waWxhdGlvbkNvbnRleHQud2Fz
bUVudHJ5cG9pbnRKSVQgPSBzdGQ6Om1ha2VfdW5pcXVlPENDYWxsSGVscGVycz4oJnZtKTsKIAog
ICAgIFByb2NlZHVyZSBwcm9jZWR1cmU7CisKKyAgICBwcm9jZWR1cmUuc2V0T3JpZ2luUHJpbnRl
cihbXSAoUHJpbnRTdHJlYW0mIG91dCwgT3JpZ2luIG9yaWdpbikgeworICAgICAgICBpZiAob3Jp
Z2luLmRhdGEoKSkKKyAgICAgICAgICAgIG91dC5wcmludCgiV2FzbTogIiwgKmJpdHdpc2VfY2Fz
dDxPcGNvZGVPcmlnaW4qPihvcmlnaW4uZGF0YSgpKSk7CisgICAgfSk7CisKICAgICBCM0lSR2Vu
ZXJhdG9yIGNvbnRleHQodm0sIGluZm8sIHByb2NlZHVyZSwgcmVzdWx0LmdldCgpLCB1bmxpbmtl
ZFdhc21Ub1dhc21DYWxscywgbW9kZSk7CiAgICAgRnVuY3Rpb25QYXJzZXI8QjNJUkdlbmVyYXRv
cj4gcGFyc2VyKCZ2bSwgY29udGV4dCwgZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNp
Z25hdHVyZSwgaW5mbywgbW9kdWxlU2lnbmF0dXJlSW5kaWNlc1RvVW5pcXVlZFNpZ25hdHVyZUlu
ZGljZXMpOwogICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VyLnBhcnNlKCkpOwpA
QCAtMTMxOCw5ICsxMzIzLDkgQEAgdm9pZCBCM0lSR2VuZXJhdG9yOjplbWl0Q2hlY2tzRm9yTW9k
T3JEaXYoQjM6Ok9wY29kZSBvcGVyYXRpb24sIEV4cHJlc3Npb25UeXBlIGwKICAgICBjb25zdCBC
Mzo6VHlwZSB0eXBlID0gbGVmdC0+dHlwZSgpOwogCiAgICAgewotICAgICAgICBDaGVja1ZhbHVl
KiBjaGVjayA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBD
aGVjaywgT3JpZ2luKCksCi0gICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZh
bHVlPihtX3Byb2MsIEVxdWFsLCBPcmlnaW4oKSwgcmlnaHQsCi0gICAgICAgICAgICAgICAgbV9j
dXJyZW50QmxvY2stPmFwcGVuZEludENvbnN0YW50KG1fcHJvYywgT3JpZ2luKCksIHR5cGUsIDAp
KSk7CisgICAgICAgIENoZWNrVmFsdWUqIGNoZWNrID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBvcmlnaW4oKSwKKyAgICAgICAgICAgIG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLCByaWdo
dCwKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kSW50Q29uc3RhbnQobV9w
cm9jLCBvcmlnaW4oKSwgdHlwZSwgMCkpKTsKIAogICAgICAgICBjaGVjay0+c2V0R2VuZXJhdG9y
KFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJh
bXMmKSB7CiAgICAgICAgICAgICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRp
b25UeXBlOjpEaXZpc2lvbkJ5WmVybyk7CkBAIC0xMzMwLDEyICsxMzM1LDEyIEBAIHZvaWQgQjNJ
UkdlbmVyYXRvcjo6ZW1pdENoZWNrc0Zvck1vZE9yRGl2KEIzOjpPcGNvZGUgb3BlcmF0aW9uLCBF
eHByZXNzaW9uVHlwZSBsCiAgICAgaWYgKG9wZXJhdGlvbiA9PSBEaXYpIHsKICAgICAgICAgaW50
NjRfdCBtaW4gPSB0eXBlID09IEludDMyID8gc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6
bWluKCkgOiBzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptaW4oKTsKIAotICAgICAgICBD
aGVja1ZhbHVlKiBjaGVjayA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4o
bV9wcm9jLCBDaGVjaywgT3JpZ2luKCksCi0gICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFZhbHVlPihtX3Byb2MsIEJpdEFuZCwgT3JpZ2luKCksCi0gICAgICAgICAgICAgICAg
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgT3JpZ2luKCks
IGxlZnQsCi0gICAgICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmRJbnRDb25z
dGFudChtX3Byb2MsIE9yaWdpbigpLCB0eXBlLCBtaW4pKSwKLSAgICAgICAgICAgICAgICBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBPcmlnaW4oKSwgcmln
aHQsCi0gICAgICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmRJbnRDb25zdGFu
dChtX3Byb2MsIE9yaWdpbigpLCB0eXBlLCAtMSkpKSk7CisgICAgICAgIENoZWNrVmFsdWUqIGNo
ZWNrID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNr
LCBvcmlnaW4oKSwKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+
KG1fcHJvYywgQml0QW5kLCBvcmlnaW4oKSwKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwgbGVmdCwKKyAgICAg
ICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZEludENvbnN0YW50KG1fcHJvYywg
b3JpZ2luKCksIHR5cGUsIG1pbikpLAorICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLCByaWdodCwKKyAgICAgICAg
ICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZEludENvbnN0YW50KG1fcHJvYywgb3Jp
Z2luKCksIHR5cGUsIC0xKSkpKTsKIAogICAgICAgICBjaGVjay0+c2V0R2VuZXJhdG9yKFs9XSAo
Q0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7
CiAgICAgICAgICAgICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRpb25UeXBl
OjpJbnRlZ2VyT3ZlcmZsb3cpOwpAQCAtMTM0OCw3ICsxMzUzLDcgQEAgYXV0byBCM0lSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6OkkzMkRpdlM+KEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Np
b25UeXBlIHIKIHsKICAgICBjb25zdCBCMzo6T3Bjb2RlIG9wID0gRGl2OwogICAgIGVtaXRDaGVj
a3NGb3JNb2RPckRpdihvcCwgbGVmdCwgcmlnaHQpOwotICAgIHJlc3VsdCA9IG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgb3AsIE9yaWdpbigpLCBsZWZ0LCByaWdodCk7
CisgICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBv
cCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKICAgICByZXR1cm4geyB9OwogfQogCkBAIC0xMzU3
LDcgKzEzNjIsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyUmVtUz4o
RXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcgogewogICAgIGNvbnN0IEIzOjpP
cGNvZGUgb3AgPSBNb2Q7CiAgICAgZW1pdENoZWNrc0Zvck1vZE9yRGl2KG9wLCBsZWZ0LCByaWdo
dCk7Ci0gICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9j
LCBjaGlsbChvcCksIE9yaWdpbigpLCBsZWZ0LCByaWdodCk7CisgICAgcmVzdWx0ID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBjaGlsbChvcCksIG9yaWdpbigpLCBs
ZWZ0LCByaWdodCk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIApAQCAtMTM2Niw3ICsxMzcxLDcgQEAg
YXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkRpdlU+KEV4cHJlc3Npb25UeXBl
IGxlZnQsIEV4cHJlc3Npb25UeXBlIHIKIHsKICAgICBjb25zdCBCMzo6T3Bjb2RlIG9wID0gVURp
djsKICAgICBlbWl0Q2hlY2tzRm9yTW9kT3JEaXYob3AsIGxlZnQsIHJpZ2h0KTsKLSAgICByZXN1
bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIG9wLCBPcmlnaW4o
KSwgbGVmdCwgcmlnaHQpOworICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
VmFsdWU+KG1fcHJvYywgb3AsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CiAgICAgcmV0dXJuIHsg
fTsKIH0KIApAQCAtMTM3NSw3ICsxMzgwLDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6OkkzMlJlbVU+KEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHIKIHsK
ICAgICBjb25zdCBCMzo6T3Bjb2RlIG9wID0gVU1vZDsKICAgICBlbWl0Q2hlY2tzRm9yTW9kT3JE
aXYob3AsIGxlZnQsIHJpZ2h0KTsKLSAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFZhbHVlPihtX3Byb2MsIG9wLCBPcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJlc3Vs
dCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgb3AsIG9yaWdpbigp
LCBsZWZ0LCByaWdodCk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIApAQCAtMTM4NCw3ICsxMzg5LDcg
QEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NERpdlM+KEV4cHJlc3Npb25U
eXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHIKIHsKICAgICBjb25zdCBCMzo6T3Bjb2RlIG9wID0g
RGl2OwogICAgIGVtaXRDaGVja3NGb3JNb2RPckRpdihvcCwgbGVmdCwgcmlnaHQpOwotICAgIHJl
c3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgb3AsIE9yaWdp
bigpLCBsZWZ0LCByaWdodCk7CisgICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxWYWx1ZT4obV9wcm9jLCBvcCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKICAgICByZXR1cm4g
eyB9OwogfQogCkBAIC0xMzkzLDcgKzEzOTgsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STY0UmVtUz4oRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcgog
ewogICAgIGNvbnN0IEIzOjpPcGNvZGUgb3AgPSBNb2Q7CiAgICAgZW1pdENoZWNrc0Zvck1vZE9y
RGl2KG9wLCBsZWZ0LCByaWdodCk7Ci0gICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxWYWx1ZT4obV9wcm9jLCBjaGlsbChvcCksIE9yaWdpbigpLCBsZWZ0LCByaWdodCk7Cisg
ICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBjaGls
bChvcCksIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIApAQCAt
MTQwMiw3ICsxNDA3LDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NERp
dlU+KEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHIKIHsKICAgICBjb25zdCBC
Mzo6T3Bjb2RlIG9wID0gVURpdjsKICAgICBlbWl0Q2hlY2tzRm9yTW9kT3JEaXYob3AsIGxlZnQs
IHJpZ2h0KTsKLSAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPiht
X3Byb2MsIG9wLCBPcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJlc3VsdCA9IG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgb3AsIG9yaWdpbigpLCBsZWZ0LCByaWdo
dCk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIApAQCAtMTQxMSwxNCArMTQxNiwxNCBAQCBhdXRvIEIz
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0UmVtVT4oRXhwcmVzc2lvblR5cGUgbGVmdCwg
RXhwcmVzc2lvblR5cGUgcgogewogICAgIGNvbnN0IEIzOjpPcGNvZGUgb3AgPSBVTW9kOwogICAg
IGVtaXRDaGVja3NGb3JNb2RPckRpdihvcCwgbGVmdCwgcmlnaHQpOwotICAgIHJlc3VsdCA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgb3AsIE9yaWdpbigpLCBsZWZ0
LCByaWdodCk7CisgICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4o
bV9wcm9jLCBvcCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKICAgICByZXR1cm4geyB9OwogfQog
CiB0ZW1wbGF0ZTw+CiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyQ3R6PihF
eHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKIHsKLSAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBJbnQzMiwgT3JpZ2luKCkpOworICAg
IFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEludDMyLCBvcmlnaW4oKSk7CiAgICAgcGF0Y2hwb2lu
dC0+YXBwZW5kKGFyZywgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CiAgICAgcGF0Y2hwb2ludC0+
c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJh
dGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgIGppdC5jb3VudFRyYWlsaW5nWmVyb3MzMihw
YXJhbXNbMV0uZ3ByKCksIHBhcmFtc1swXS5ncHIoKSk7CkBAIC0xNDMxLDcgKzE0MzYsNyBAQCBh
dXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyQ3R6PihFeHByZXNzaW9uVHlwZSBh
cmcsIEV4cHJlc3Npb25UeXBlJiByZQogdGVtcGxhdGU8PgogYXV0byBCM0lSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6Okk2NEN0ej4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBv
aW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywg
SW50NjQsIE9yaWdpbigpKTsKKyAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBJbnQ2NCwgb3Jp
Z2luKCkpOwogICAgIHBhdGNocG9pbnQtPmFwcGVuZChhcmcsIFZhbHVlUmVwOjpTb21lUmVnaXN0
ZXIpOwogICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0
LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICBqaXQu
Y291bnRUcmFpbGluZ1plcm9zNjQocGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOwpA
QCAtMTQ0Nyw4ICsxNDUyLDggQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okkz
MlBvcGNudD4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYKICAgICAvLyBGSVhN
RTogVGhpcyBzaG91bGQgdXNlIHRoZSBwb3BjbnQgaW5zdHJ1Y3Rpb24gaWYgU1NFNCBpcyBhdmFp
bGFibGUgYnV0IHdlIGRvbid0IGhhdmUgY29kZSB0byBkZXRlY3QgU1NFNCB5ZXQuCiAgICAgLy8g
c2VlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1MzYzCiAgICAg
dWludDMyX3QgKCpwb3Bjb3VudCkoaW50MzJfdCkgPSBbXSAoaW50MzJfdCB2YWx1ZSkgLT4gdWlu
dDMyX3QgeyByZXR1cm4gX19idWlsdGluX3BvcGNvdW50KHZhbHVlKTsgfTsKLSAgICBWYWx1ZSog
ZnVuY0FkZHJlc3MgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KG1f
cHJvYywgT3JpZ2luKCksIGJpdHdpc2VfY2FzdDx2b2lkKj4ocG9wY291bnQpKTsKLSAgICByZXN1
bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJvYywgSW50MzIs
IE9yaWdpbigpLCBFZmZlY3RzOjpub25lKCksIGZ1bmNBZGRyZXNzLCBhcmcpOworICAgIFZhbHVl
KiBmdW5jQWRkcmVzcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4o
bV9wcm9jLCBvcmlnaW4oKSwgYml0d2lzZV9jYXN0PHZvaWQqPihwb3Bjb3VudCkpOworICAgIHJl
c3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9jLCBJbnQz
Miwgb3JpZ2luKCksIEVmZmVjdHM6Om5vbmUoKSwgZnVuY0FkZHJlc3MsIGFyZyk7CiAgICAgcmV0
dXJuIHsgfTsKIH0KIApAQCAtMTQ1OCwxNSArMTQ2MywxNSBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6STY0UG9wY250PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25U
eXBlJgogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2UgdGhlIHBvcGNudCBpbnN0cnVjdGlv
biBpZiBTU0U0IGlzIGF2YWlsYWJsZSBidXQgd2UgZG9uJ3QgaGF2ZSBjb2RlIHRvIGRldGVjdCBT
U0U0IHlldC4KICAgICAvLyBzZWU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjUzNjMKICAgICB1aW50NjRfdCAoKnBvcGNvdW50KShpbnQ2NF90KSA9IFtdIChpbnQ2
NF90IHZhbHVlKSAtPiB1aW50NjRfdCB7IHJldHVybiBfX2J1aWx0aW5fcG9wY291bnRsbCh2YWx1
ZSk7IH07Ci0gICAgVmFsdWUqIGZ1bmNBZGRyZXNzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxDb25zdFB0clZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHBv
cGNvdW50KSk7Ci0gICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZh
bHVlPihtX3Byb2MsIEludDY0LCBPcmlnaW4oKSwgRWZmZWN0czo6bm9uZSgpLCBmdW5jQWRkcmVz
cywgYXJnKTsKKyAgICBWYWx1ZSogZnVuY0FkZHJlc3MgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PENvbnN0UHRyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIGJpdHdpc2VfY2FzdDx2b2lkKj4o
cG9wY291bnQpKTsKKyAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxs
VmFsdWU+KG1fcHJvYywgSW50NjQsIG9yaWdpbigpLCBFZmZlY3RzOjpub25lKCksIGZ1bmNBZGRy
ZXNzLCBhcmcpOwogICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPD4KIGF1dG8gQjNJUkdl
bmVyYXRvcjo6YWRkT3A8RjY0Q29udmVydFVJNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewotICAgIFBhdGNocG9pbnRWYWx1
ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVl
PihtX3Byb2MsIERvdWJsZSwgT3JpZ2luKCkpOworICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hw
b2ludCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2Ms
IERvdWJsZSwgb3JpZ2luKCkpOwogICAgIGlmIChpc1g4NigpKQogICAgICAgICBwYXRjaHBvaW50
LT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMgPSAxOwogICAgIHBhdGNocG9pbnQtPmFwcGVuZChDb25z
dHJhaW5lZFZhbHVlKGFyZywgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcikpOwpAQCAtMTQ4Niw3ICsx
NDkxLDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxGNjRDb252ZXJ0VUk2ND4oRXhwcmVz
c2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmUKIHRlbXBsYXRlPD4KIGF1dG8gQjNJUkdl
bmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJDb252ZXJ0VUk2ND4oRXhwcmVzc2lvblR5cGUgYXJn
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgUGF0Y2hw
b2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBv
aW50VmFsdWU+KG1fcHJvYywgRmxvYXQsIE9yaWdpbigpKTsKKyAgICBQYXRjaHBvaW50VmFsdWUq
IHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4o
bV9wcm9jLCBGbG9hdCwgb3JpZ2luKCkpOwogICAgIGlmIChpc1g4NigpKQogICAgICAgICBwYXRj
aHBvaW50LT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMgPSAxOwogICAgIHBhdGNocG9pbnQtPmFwcGVu
ZChDb25zdHJhaW5lZFZhbHVlKGFyZywgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcikpOwpAQCAtMTUw
Niw3ICsxNTExLDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkNvbnZl
cnRVSTY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb24KIHRlbXBsYXRlPD4KIGF1dG8g
QjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjROZWFyZXN0PihFeHByZXNzaW9uVHlwZSBh
cmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBQYXRj
aHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNo
cG9pbnRWYWx1ZT4obV9wcm9jLCBEb3VibGUsIE9yaWdpbigpKTsKKyAgICBQYXRjaHBvaW50VmFs
dWUqIHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1
ZT4obV9wcm9jLCBEb3VibGUsIG9yaWdpbigpKTsKICAgICBwYXRjaHBvaW50LT5hcHBlbmQoYXJn
LCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3Io
Wz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBw
YXJhbXMpIHsKICAgICAgICAgaml0LnJvdW5kVG93YXJkTmVhcmVzdEludERvdWJsZShwYXJhbXNb
MV0uZnByKCksIHBhcmFtc1swXS5mcHIoKSk7CkBAIC0xNTE5LDcgKzE1MjQsNyBAQCBhdXRvIEIz
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0TmVhcmVzdD4oRXhwcmVzc2lvblR5cGUgYXJn
LCBFeHByZXNzaW9uVHlwZQogdGVtcGxhdGU8PgogYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6OkYzMk5lYXJlc3Q+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewotICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2lu
dCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEZs
b2F0LCBPcmlnaW4oKSk7CisgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgRmxvYXQsIG9yaWdp
bigpKTsKICAgICBwYXRjaHBvaW50LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVy
KTsKICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwg
Y29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgaml0LnJv
dW5kVG93YXJkTmVhcmVzdEludEZsb2F0KHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmZwcigp
KTsKQEAgLTE1MzIsNyArMTUzNyw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpGMzJOZWFyZXN0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlCiB0ZW1wbGF0
ZTw+CiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0VHJ1bmM+KEV4cHJlc3Np
b25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewot
ICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIERvdWJsZSwgT3JpZ2luKCkpOworICAgIFBhdGNo
cG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hw
b2ludFZhbHVlPihtX3Byb2MsIERvdWJsZSwgb3JpZ2luKCkpOwogICAgIHBhdGNocG9pbnQtPmFw
cGVuZChhcmcsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOwogICAgIHBhdGNocG9pbnQtPnNldEdl
bmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25Q
YXJhbXMmIHBhcmFtcykgewogICAgICAgICBqaXQucm91bmRUb3dhcmRaZXJvRG91YmxlKHBhcmFt
c1sxXS5mcHIoKSwgcGFyYW1zWzBdLmZwcigpKTsKQEAgLTE1NDUsNyArMTU1MCw3IEBAIGF1dG8g
QjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRUcnVuYz4oRXhwcmVzc2lvblR5cGUgYXJn
LCBFeHByZXNzaW9uVHlwZSYKIHRlbXBsYXRlPD4KIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpGMzJUcnVuYz4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgRmxv
YXQsIE9yaWdpbigpKTsKKyAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBGbG9hdCwgb3JpZ2lu
KCkpOwogICAgIHBhdGNocG9pbnQtPmFwcGVuZChhcmcsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIp
OwogICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBj
b25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICBqaXQucm91
bmRUb3dhcmRaZXJvRmxvYXQocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZnByKCkpOwpAQCAt
MTU1OCwxNyArMTU2MywxNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMy
VHJ1bmM+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmCiB0ZW1wbGF0ZTw+CiBh
dXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNTRjY0PihFeHByZXNzaW9u
VHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAg
ICBWYWx1ZSogbWF4ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdERvdWJsZVZhbHVl
PihtX3Byb2MsIE9yaWdpbigpLCAtc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGlt
aXRzPGludDMyX3Q+OjptaW4oKSkpOwotICAgIFZhbHVlKiBtaW4gPSBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PENvbnN0RG91YmxlVmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIHN0YXRpY19jYXN0
PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpKTsKLSAgICBWYWx1
ZSogb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2Ms
IEJpdEFuZCwgT3JpZ2luKCksCi0gICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFs
dWU+KG1fcHJvYywgTGVzc1RoYW4sIE9yaWdpbigpLCBhcmcsIG1heCksCi0gICAgICAgIG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgR3JlYXRlckVxdWFsLCBPcmlnaW4o
KSwgYXJnLCBtaW4pKTsKLSAgICBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIE9yaWdpbigpLCBvdXRPZkJvdW5kcywgemVyb0ZvclR5
cGUoSTMyKSk7Ci0gICAgQ2hlY2tWYWx1ZSogdHJhcCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgT3JpZ2luKCksIG91dE9mQm91bmRzKTsKKyAg
ICBWYWx1ZSogbWF4ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdERvdWJsZVZhbHVl
PihtX3Byb2MsIG9yaWdpbigpLCAtc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGlt
aXRzPGludDMyX3Q+OjptaW4oKSkpOworICAgIFZhbHVlKiBtaW4gPSBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PENvbnN0RG91YmxlVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHN0YXRpY19jYXN0
PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpKTsKKyAgICBWYWx1
ZSogb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2Ms
IEJpdEFuZCwgb3JpZ2luKCksCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFs
dWU+KG1fcHJvYywgTGVzc1RoYW4sIG9yaWdpbigpLCBhcmcsIG1heCksCisgICAgICAgIG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgR3JlYXRlckVxdWFsLCBvcmlnaW4o
KSwgYXJnLCBtaW4pKTsKKyAgICBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLCBvdXRPZkJvdW5kcywgemVyb0ZvclR5
cGUoSTMyKSk7CisgICAgQ2hlY2tWYWx1ZSogdHJhcCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgb3JpZ2luKCksIG91dE9mQm91bmRzKTsKICAg
ICB0cmFwLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2tt
YXBHZW5lcmF0aW9uUGFyYW1zJikgewogICAgICAgICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hlY2so
aml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc1RydW5jKTsKICAgICB9KTsKLSAgICBQYXRj
aHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNo
cG9pbnRWYWx1ZT4obV9wcm9jLCBJbnQzMiwgT3JpZ2luKCkpOworICAgIFBhdGNocG9pbnRWYWx1
ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVl
PihtX3Byb2MsIEludDMyLCBvcmlnaW4oKSk7CiAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGFyZywg
VmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CiAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9
XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFy
YW1zKSB7CiAgICAgICAgIGppdC50cnVuY2F0ZURvdWJsZVRvSW50MzIocGFyYW1zWzFdLmZwcigp
LCBwYXJhbXNbMF0uZ3ByKCkpOwpAQCAtMTU4MSwxNyArMTU4NiwxNyBAQCBhdXRvIEIzSVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNTRjY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4
cHJlc3Npb25UeQogdGVtcGxhdGU8PgogYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
OkkzMlRydW5jU0YzMj4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgVmFsdWUqIG1heCA9IG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8Q29uc3RGbG9hdFZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCAtc3RhdGljX2Nhc3Q8
ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1pbigpKSk7Ci0gICAgVmFsdWUq
IG1pbiA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RGbG9hdFZhbHVlPihtX3Byb2Ms
IE9yaWdpbigpLCBzdGF0aWNfY2FzdDxmbG9hdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90
Pjo6bWluKCkpKTsKLSAgICBWYWx1ZSogb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFZhbHVlPihtX3Byb2MsIEJpdEFuZCwgT3JpZ2luKCksCi0gICAgICAgIG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgTGVzc1RoYW4sIE9yaWdpbigpLCBhcmcs
IG1heCksCi0gICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywg
R3JlYXRlckVxdWFsLCBPcmlnaW4oKSwgYXJnLCBtaW4pKTsKLSAgICBvdXRPZkJvdW5kcyA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIE9yaWdpbigpLCBv
dXRPZkJvdW5kcywgemVyb0ZvclR5cGUoSTMyKSk7Ci0gICAgQ2hlY2tWYWx1ZSogdHJhcCA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgT3JpZ2lu
KCksIG91dE9mQm91bmRzKTsKKyAgICBWYWx1ZSogbWF4ID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxDb25zdEZsb2F0VmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIC1zdGF0aWNfY2FzdDxmbG9h
dD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpKTsKKyAgICBWYWx1ZSogbWlu
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdEZsb2F0VmFsdWU+KG1fcHJvYywgb3Jp
Z2luKCksIHN0YXRpY19jYXN0PGZsb2F0PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+Ojpt
aW4oKSkpOworICAgIFZhbHVlKiBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8VmFsdWU+KG1fcHJvYywgQml0QW5kLCBvcmlnaW4oKSwKKyAgICAgICAgbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBMZXNzVGhhbiwgb3JpZ2luKCksIGFyZywgbWF4
KSwKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBHcmVh
dGVyRXF1YWwsIG9yaWdpbigpLCBhcmcsIG1pbikpOworICAgIG91dE9mQm91bmRzID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2luKCksIG91dE9m
Qm91bmRzLCB6ZXJvRm9yVHlwZShJMzIpKTsKKyAgICBDaGVja1ZhbHVlKiB0cmFwID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBvcmlnaW4oKSwg
b3V0T2ZCb3VuZHMpOwogICAgIHRyYXAtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYg
aml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CiAgICAgICAgIHRoaXMtPmVt
aXRFeGNlcHRpb25DaGVjayhqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzVHJ1bmMpOwog
ICAgIH0pOwotICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEludDMyLCBPcmlnaW4oKSk7Cisg
ICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgSW50MzIsIG9yaWdpbigpKTsKICAgICBwYXRjaHBv
aW50LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKICAgICBwYXRjaHBvaW50
LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5l
cmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgaml0LnRydW5jYXRlRmxvYXRUb0ludDMy
KHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKQEAgLTE2MDUsMTcgKzE2MTAsMTcg
QEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlRydW5jU0YzMj4oRXhwcmVz
c2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHkKIHRlbXBsYXRlPD4KIGF1dG8gQjNJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpJMzJUcnVuY1VGNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewotICAgIFZhbHVlKiBtYXggPSBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0RG91YmxlVmFsdWU+KG1fcHJvYywgT3JpZ2lu
KCksIHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWlu
KCkpICogLTIuMCk7Ci0gICAgVmFsdWUqIG1pbiA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
Q29uc3REb3VibGVWYWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwgLTEuMCk7Ci0gICAgVmFsdWUqIG91
dE9mQm91bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCaXRB
bmQsIE9yaWdpbigpLAotICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPiht
X3Byb2MsIExlc3NUaGFuLCBPcmlnaW4oKSwgYXJnLCBtYXgpLAotICAgICAgICBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEdyZWF0ZXJUaGFuLCBPcmlnaW4oKSwgYXJn
LCBtaW4pKTsKLSAgICBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFs
dWU+KG1fcHJvYywgRXF1YWwsIE9yaWdpbigpLCBvdXRPZkJvdW5kcywgemVyb0ZvclR5cGUoSTMy
KSk7Ci0gICAgQ2hlY2tWYWx1ZSogdHJhcCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hl
Y2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgT3JpZ2luKCksIG91dE9mQm91bmRzKTsKKyAgICBWYWx1
ZSogbWF4ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdERvdWJsZVZhbHVlPihtX3By
b2MsIG9yaWdpbigpLCBzdGF0aWNfY2FzdDxkb3VibGU+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50
MzJfdD46Om1pbigpKSAqIC0yLjApOworICAgIFZhbHVlKiBtaW4gPSBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PENvbnN0RG91YmxlVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIC0xLjApOworICAg
IFZhbHVlKiBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1f
cHJvYywgQml0QW5kLCBvcmlnaW4oKSwKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxWYWx1ZT4obV9wcm9jLCBMZXNzVGhhbiwgb3JpZ2luKCksIGFyZywgbWF4KSwKKyAgICAgICAg
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBHcmVhdGVyVGhhbiwgb3Jp
Z2luKCksIGFyZywgbWluKSk7CisgICAgb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwgb3V0T2ZCb3VuZHMsIHplcm9G
b3JUeXBlKEkzMikpOworICAgIENoZWNrVmFsdWUqIHRyYXAgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIG9yaWdpbigpLCBvdXRPZkJvdW5kcyk7
CiAgICAgdHJhcC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0
YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKICAgICAgICAgdGhpcy0+ZW1pdEV4Y2VwdGlvbkNo
ZWNrKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNUcnVuYyk7CiAgICAgfSk7Ci0gICAg
UGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQ
YXRjaHBvaW50VmFsdWU+KG1fcHJvYywgSW50MzIsIE9yaWdpbigpKTsKKyAgICBQYXRjaHBvaW50
VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRW
YWx1ZT4obV9wcm9jLCBJbnQzMiwgb3JpZ2luKCkpOwogICAgIHBhdGNocG9pbnQtPmFwcGVuZChh
cmcsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOwogICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRv
cihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMm
IHBhcmFtcykgewogICAgICAgICBqaXQudHJ1bmNhdGVEb3VibGVUb1VpbnQzMihwYXJhbXNbMV0u
ZnByKCksIHBhcmFtc1swXS5ncHIoKSk7CkBAIC0xNjI4LDE3ICsxNjMzLDE3IEBAIGF1dG8gQjNJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJUcnVuY1VGNjQ+KEV4cHJlc3Npb25UeXBlIGFy
ZywgRXhwcmVzc2lvblR5CiB0ZW1wbGF0ZTw+CiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6STMyVHJ1bmNVRjMyPihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBWYWx1ZSogbWF4ID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxDb25zdEZsb2F0VmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIHN0YXRpY19j
YXN0PGZsb2F0PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptaW4oKSkgKiAtMi4wKTsK
LSAgICBWYWx1ZSogbWluID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdEZsb2F0VmFs
dWU+KG1fcHJvYywgT3JpZ2luKCksIC0xLjApOwotICAgIFZhbHVlKiBvdXRPZkJvdW5kcyA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQml0QW5kLCBPcmlnaW4oKSwK
LSAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBMZXNzVGhh
biwgT3JpZ2luKCksIGFyZywgbWF4KSwKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxWYWx1ZT4obV9wcm9jLCBHcmVhdGVyVGhhbiwgT3JpZ2luKCksIGFyZywgbWluKSk7Ci0gICAg
b3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVx
dWFsLCBPcmlnaW4oKSwgb3V0T2ZCb3VuZHMsIHplcm9Gb3JUeXBlKEkzMikpOwotICAgIENoZWNr
VmFsdWUqIHRyYXAgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJv
YywgQ2hlY2ssIE9yaWdpbigpLCBvdXRPZkJvdW5kcyk7CisgICAgVmFsdWUqIG1heCA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RGbG9hdFZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBz
dGF0aWNfY2FzdDxmbG9hdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpICog
LTIuMCk7CisgICAgVmFsdWUqIG1pbiA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RG
bG9hdFZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCAtMS4wKTsKKyAgICBWYWx1ZSogb3V0T2ZCb3Vu
ZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEJpdEFuZCwgb3Jp
Z2luKCksCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywg
TGVzc1RoYW4sIG9yaWdpbigpLCBhcmcsIG1heCksCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8VmFsdWU+KG1fcHJvYywgR3JlYXRlclRoYW4sIG9yaWdpbigpLCBhcmcsIG1pbikp
OworICAgIG91dE9mQm91bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9w
cm9jLCBFcXVhbCwgb3JpZ2luKCksIG91dE9mQm91bmRzLCB6ZXJvRm9yVHlwZShJMzIpKTsKKyAg
ICBDaGVja1ZhbHVlKiB0cmFwID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVl
PihtX3Byb2MsIENoZWNrLCBvcmlnaW4oKSwgb3V0T2ZCb3VuZHMpOwogICAgIHRyYXAtPnNldEdl
bmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25Q
YXJhbXMmKSB7CiAgICAgICAgIHRoaXMtPmVtaXRFeGNlcHRpb25DaGVjayhqaXQsIEV4Y2VwdGlv
blR5cGU6Ok91dE9mQm91bmRzVHJ1bmMpOwogICAgIH0pOwotICAgIFBhdGNocG9pbnRWYWx1ZSog
cGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPiht
X3Byb2MsIEludDMyLCBPcmlnaW4oKSk7CisgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgSW50
MzIsIG9yaWdpbigpKTsKICAgICBwYXRjaHBvaW50LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6U29t
ZVJlZ2lzdGVyKTsKICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBl
cnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAg
ICAgaml0LnRydW5jYXRlRmxvYXRUb1VpbnQzMihwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5n
cHIoKSk7CkBAIC0xNjUxLDE3ICsxNjU2LDE3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpJMzJUcnVuY1VGMzI+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5CiB0
ZW1wbGF0ZTw+CiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNTRjY0
PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKIHsKLSAgICBWYWx1ZSogbWF4ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25z
dERvdWJsZVZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCAtc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6
Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptaW4oKSkpOwotICAgIFZhbHVlKiBtaW4gPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0RG91YmxlVmFsdWU+KG1fcHJvYywgT3JpZ2luKCks
IHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWluKCkp
KTsKLSAgICBWYWx1ZSogb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZh
bHVlPihtX3Byb2MsIEJpdEFuZCwgT3JpZ2luKCksCi0gICAgICAgIG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8VmFsdWU+KG1fcHJvYywgTGVzc1RoYW4sIE9yaWdpbigpLCBhcmcsIG1heCksCi0g
ICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgR3JlYXRlckVx
dWFsLCBPcmlnaW4oKSwgYXJnLCBtaW4pKTsKLSAgICBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIE9yaWdpbigpLCBvdXRPZkJvdW5k
cywgemVyb0ZvclR5cGUoSTMyKSk7Ci0gICAgQ2hlY2tWYWx1ZSogdHJhcCA9IG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgT3JpZ2luKCksIG91dE9m
Qm91bmRzKTsKKyAgICBWYWx1ZSogbWF4ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25z
dERvdWJsZVZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCAtc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6
Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptaW4oKSkpOworICAgIFZhbHVlKiBtaW4gPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0RG91YmxlVmFsdWU+KG1fcHJvYywgb3JpZ2luKCks
IHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWluKCkp
KTsKKyAgICBWYWx1ZSogb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZh
bHVlPihtX3Byb2MsIEJpdEFuZCwgb3JpZ2luKCksCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8VmFsdWU+KG1fcHJvYywgTGVzc1RoYW4sIG9yaWdpbigpLCBhcmcsIG1heCksCisg
ICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgR3JlYXRlckVx
dWFsLCBvcmlnaW4oKSwgYXJnLCBtaW4pKTsKKyAgICBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLCBvdXRPZkJvdW5k
cywgemVyb0ZvclR5cGUoSTMyKSk7CisgICAgQ2hlY2tWYWx1ZSogdHJhcCA9IG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgb3JpZ2luKCksIG91dE9m
Qm91bmRzKTsKICAgICB0cmFwLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwg
Y29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgewogICAgICAgICB0aGlzLT5lbWl0RXhj
ZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc1RydW5jKTsKICAgICB9
KTsKLSAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBJbnQ2NCwgT3JpZ2luKCkpOworICAgIFBh
dGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0
Y2hwb2ludFZhbHVlPihtX3Byb2MsIEludDY0LCBvcmlnaW4oKSk7CiAgICAgcGF0Y2hwb2ludC0+
YXBwZW5kKGFyZywgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CiAgICAgcGF0Y2hwb2ludC0+c2V0
R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlv
blBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgIGppdC50cnVuY2F0ZURvdWJsZVRvSW50NjQocGFy
YW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOwpAQCAtMTY3NCwxMyArMTY3OSwxMyBAQCBh
dXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNTRjY0PihFeHByZXNzaW9u
VHlwZSBhcmcsIEV4cHJlc3Npb25UeQogdGVtcGxhdGU8PgogYXV0byBCM0lSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6Okk2NFRydW5jVUY2ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgVmFsdWUqIG1heCA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3REb3VibGVWYWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwg
c3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptaW4oKSkg
KiAtMi4wKTsKLSAgICBWYWx1ZSogbWluID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25z
dERvdWJsZVZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCAtMS4wKTsKLSAgICBWYWx1ZSogb3V0T2ZC
b3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEJpdEFuZCwg
T3JpZ2luKCksCi0gICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJv
YywgTGVzc1RoYW4sIE9yaWdpbigpLCBhcmcsIG1heCksCi0gICAgICAgIG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgR3JlYXRlclRoYW4sIE9yaWdpbigpLCBhcmcsIG1p
bikpOwotICAgIG91dE9mQm91bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4o
bV9wcm9jLCBFcXVhbCwgT3JpZ2luKCksIG91dE9mQm91bmRzLCB6ZXJvRm9yVHlwZShJMzIpKTsK
LSAgICBDaGVja1ZhbHVlKiB0cmFwID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1Zh
bHVlPihtX3Byb2MsIENoZWNrLCBPcmlnaW4oKSwgb3V0T2ZCb3VuZHMpOworICAgIFZhbHVlKiBt
YXggPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0RG91YmxlVmFsdWU+KG1fcHJvYywg
b3JpZ2luKCksIHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90
Pjo6bWluKCkpICogLTIuMCk7CisgICAgVmFsdWUqIG1pbiA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8Q29uc3REb3VibGVWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgLTEuMCk7CisgICAgVmFs
dWUqIG91dE9mQm91bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9j
LCBCaXRBbmQsIG9yaWdpbigpLAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZh
bHVlPihtX3Byb2MsIExlc3NUaGFuLCBvcmlnaW4oKSwgYXJnLCBtYXgpLAorICAgICAgICBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEdyZWF0ZXJUaGFuLCBvcmlnaW4o
KSwgYXJnLCBtaW4pKTsKKyAgICBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLCBvdXRPZkJvdW5kcywgemVyb0ZvclR5
cGUoSTMyKSk7CisgICAgQ2hlY2tWYWx1ZSogdHJhcCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgb3JpZ2luKCksIG91dE9mQm91bmRzKTsKICAg
ICB0cmFwLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2tt
YXBHZW5lcmF0aW9uUGFyYW1zJikgewogICAgICAgICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hlY2so
aml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc1RydW5jKTsKICAgICB9KTsKQEAgLTE2OTAs
OSArMTY5NSw5IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRUcnVuY1VG
NjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5CiAgICAgICAgIC8vIFNpbmNlIHg4
NiBkb2Vzbid0IGhhdmUgYW4gaW5zdHJ1Y3Rpb24gdG8gY29udmVydCBmbG9hdGluZyBwb2ludHMg
dG8gdW5zaWduZWQgaW50ZWdlcnMsIHdlIGF0IGxlYXN0IHRyeSB0byBkbyB0aGUgc21hcnQgdGhp
bmcgaWYKICAgICAgICAgLy8gdGhlIG51bWJlcnMgYXJlIHdvdWxkIGJlIHBvc2l0aXZlIGFueXdh
eSBhcyBhIHNpZ25lZCBpbnRlZ2VyLiBTaW5jZSB3ZSBjYW5ub3QgbWF0ZXJpYWxpemUgY29uc3Rh
bnRzIGludG8gZnBycyB3ZSBoYXZlIGIzIGRvIGl0CiAgICAgICAgIC8vIHNvIHdlIGNhbiBwb29s
IHRoZW0gaWYgbmVlZGVkLgotICAgICAgICBjb25zdGFudCA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8Q29uc3REb3VibGVWYWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwgc3RhdGljX2Nhc3Q8ZG91
YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4KCkgLSBzdGQ6Om51bWVyaWNf
bGltaXRzPGludDY0X3Q+OjptYXgoKSkpOworICAgICAgICBjb25zdGFudCA9IG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8Q29uc3REb3VibGVWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgc3RhdGlj
X2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4KCkgLSBzdGQ6
Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptYXgoKSkpOwogICAgIH0KLSAgICBQYXRjaHBvaW50
VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRW
YWx1ZT4obV9wcm9jLCBJbnQ2NCwgT3JpZ2luKCkpOworICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0
Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3By
b2MsIEludDY0LCBvcmlnaW4oKSk7CiAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGFyZywgVmFsdWVS
ZXA6OlNvbWVSZWdpc3Rlcik7CiAgICAgaWYgKGlzWDg2KCkpIHsKICAgICAgICAgcGF0Y2hwb2lu
dC0+YXBwZW5kKGNvbnN0YW50LCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKQEAgLTE3MTYsMTcg
KzE3MjEsMTcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydW5jVUY2
ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHkKIHRlbXBsYXRlPD4KIGF1dG8gQjNJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRUcnVuY1NGMzI+KEV4cHJlc3Npb25UeXBlIGFy
ZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewotICAgIFZhbHVl
KiBtYXggPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0RmxvYXRWYWx1ZT4obV9wcm9j
LCBPcmlnaW4oKSwgLXN0YXRpY19jYXN0PGZsb2F0PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0
X3Q+OjptaW4oKSkpOwotICAgIFZhbHVlKiBtaW4gPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PENvbnN0RmxvYXRWYWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0
ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1pbigpKSk7Ci0gICAgVmFsdWUqIG91dE9mQm91
bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCaXRBbmQsIE9y
aWdpbigpLAotICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2Ms
IExlc3NUaGFuLCBPcmlnaW4oKSwgYXJnLCBtYXgpLAotICAgICAgICBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEdyZWF0ZXJFcXVhbCwgT3JpZ2luKCksIGFyZywgbWlu
KSk7Ci0gICAgb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPiht
X3Byb2MsIEVxdWFsLCBPcmlnaW4oKSwgb3V0T2ZCb3VuZHMsIHplcm9Gb3JUeXBlKEkzMikpOwot
ICAgIENoZWNrVmFsdWUqIHRyYXAgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENoZWNrVmFs
dWU+KG1fcHJvYywgQ2hlY2ssIE9yaWdpbigpLCBvdXRPZkJvdW5kcyk7CisgICAgVmFsdWUqIG1h
eCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RGbG9hdFZhbHVlPihtX3Byb2MsIG9y
aWdpbigpLCAtc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46
Om1pbigpKSk7CisgICAgVmFsdWUqIG1pbiA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29u
c3RGbG9hdFZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBzdGF0aWNfY2FzdDxmbG9hdD4oc3RkOjpu
dW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWluKCkpKTsKKyAgICBWYWx1ZSogb3V0T2ZCb3VuZHMg
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEJpdEFuZCwgb3JpZ2lu
KCksCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgTGVz
c1RoYW4sIG9yaWdpbigpLCBhcmcsIG1heCksCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8VmFsdWU+KG1fcHJvYywgR3JlYXRlckVxdWFsLCBvcmlnaW4oKSwgYXJnLCBtaW4pKTsK
KyAgICBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJv
YywgRXF1YWwsIG9yaWdpbigpLCBvdXRPZkJvdW5kcywgemVyb0ZvclR5cGUoSTMyKSk7CisgICAg
Q2hlY2tWYWx1ZSogdHJhcCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4o
bV9wcm9jLCBDaGVjaywgb3JpZ2luKCksIG91dE9mQm91bmRzKTsKICAgICB0cmFwLT5zZXRHZW5l
cmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFy
YW1zJikgewogICAgICAgICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRpb25U
eXBlOjpPdXRPZkJvdW5kc1RydW5jKTsKICAgICB9KTsKLSAgICBQYXRjaHBvaW50VmFsdWUqIHBh
dGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9w
cm9jLCBJbnQ2NCwgT3JpZ2luKCkpOworICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEludDY0
LCBvcmlnaW4oKSk7CiAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGFyZywgVmFsdWVSZXA6OlNvbWVS
ZWdpc3Rlcik7CiAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJz
JiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAg
IGppdC50cnVuY2F0ZUZsb2F0VG9JbnQ2NChwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5ncHIo
KSk7CkBAIC0xNzM5LDEzICsxNzQ0LDEzIEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BU
eXBlOjpJNjRUcnVuY1NGMzI+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5CiB0ZW1w
bGF0ZTw+CiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNVRjMyPihF
eHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKIHsKLSAgICBWYWx1ZSogbWF4ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdEZs
b2F0VmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIHN0YXRpY19jYXN0PGZsb2F0PihzdGQ6Om51bWVy
aWNfbGltaXRzPGludDY0X3Q+OjptaW4oKSkgKiAtMi4wKTsKLSAgICBWYWx1ZSogbWluID0gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdEZsb2F0VmFsdWU+KG1fcHJvYywgT3JpZ2luKCks
IC0xLjApOwotICAgIFZhbHVlKiBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8VmFsdWU+KG1fcHJvYywgQml0QW5kLCBPcmlnaW4oKSwKLSAgICAgICAgbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBMZXNzVGhhbiwgT3JpZ2luKCksIGFyZywgbWF4
KSwKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBHcmVh
dGVyVGhhbiwgT3JpZ2luKCksIGFyZywgbWluKSk7Ci0gICAgb3V0T2ZCb3VuZHMgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBPcmlnaW4oKSwgb3V0T2ZC
b3VuZHMsIHplcm9Gb3JUeXBlKEkzMikpOwotICAgIENoZWNrVmFsdWUqIHRyYXAgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIE9yaWdpbigpLCBv
dXRPZkJvdW5kcyk7CisgICAgVmFsdWUqIG1heCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
Q29uc3RGbG9hdFZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBzdGF0aWNfY2FzdDxmbG9hdD4oc3Rk
OjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWluKCkpICogLTIuMCk7CisgICAgVmFsdWUqIG1p
biA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RGbG9hdFZhbHVlPihtX3Byb2MsIG9y
aWdpbigpLCAtMS4wKTsKKyAgICBWYWx1ZSogb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEJpdEFuZCwgb3JpZ2luKCksCisgICAgICAgIG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgTGVzc1RoYW4sIG9yaWdpbigpLCBh
cmcsIG1heCksCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJv
YywgR3JlYXRlclRoYW4sIG9yaWdpbigpLCBhcmcsIG1pbikpOworICAgIG91dE9mQm91bmRzID0g
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2luKCks
IG91dE9mQm91bmRzLCB6ZXJvRm9yVHlwZShJMzIpKTsKKyAgICBDaGVja1ZhbHVlKiB0cmFwID0g
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBvcmln
aW4oKSwgb3V0T2ZCb3VuZHMpOwogICAgIHRyYXAtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVs
cGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CiAgICAgICAgIHRo
aXMtPmVtaXRFeGNlcHRpb25DaGVjayhqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzVHJ1
bmMpOwogICAgIH0pOwpAQCAtMTc1NSw5ICsxNzYwLDkgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6Okk2NFRydW5jVUYzMj4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9u
VHkKICAgICAgICAgLy8gU2luY2UgeDg2IGRvZXNuJ3QgaGF2ZSBhbiBpbnN0cnVjdGlvbiB0byBj
b252ZXJ0IGZsb2F0aW5nIHBvaW50cyB0byB1bnNpZ25lZCBpbnRlZ2Vycywgd2UgYXQgbGVhc3Qg
dHJ5IHRvIGRvIHRoZSBzbWFydCB0aGluZyBpZgogICAgICAgICAvLyB0aGUgbnVtYmVycyBhcmUg
d291bGQgYmUgcG9zaXRpdmUgYW55d2F5IGFzIGEgc2lnbmVkIGludGVnZXIuIFNpbmNlIHdlIGNh
bm5vdCBtYXRlcmlhbGl6ZSBjb25zdGFudHMgaW50byBmcHJzIHdlIGhhdmUgYjMgZG8gaXQKICAg
ICAgICAgLy8gc28gd2UgY2FuIHBvb2wgdGhlbSBpZiBuZWVkZWQuCi0gICAgICAgIGNvbnN0YW50
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdEZsb2F0VmFsdWU+KG1fcHJvYywgT3Jp
Z2luKCksIHN0YXRpY19jYXN0PGZsb2F0PihzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6
bWF4KCkgLSBzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptYXgoKSkpOworICAgICAgICBj
b25zdGFudCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RGbG9hdFZhbHVlPihtX3By
b2MsIG9yaWdpbigpLCBzdGF0aWNfY2FzdDxmbG9hdD4oc3RkOjpudW1lcmljX2xpbWl0czx1aW50
NjRfdD46Om1heCgpIC0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWF4KCkpKTsKICAg
ICB9Ci0gICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgSW50NjQsIE9yaWdpbigpKTsKKyAgICBQ
YXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBh
dGNocG9pbnRWYWx1ZT4obV9wcm9jLCBJbnQ2NCwgb3JpZ2luKCkpOwogICAgIHBhdGNocG9pbnQt
PmFwcGVuZChhcmcsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOwogICAgIGlmIChpc1g4NigpKSB7
CiAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChjb25zdGFudCwgVmFsdWVSZXA6OlNvbWVSZWdp
c3Rlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rp
b25QYXJzZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvblBhcnNl
ci5oCmluZGV4IGQ0MjA1NjBiNzI0ZTRiNDY1NWQyNmFhY2NjN2Q0Y2UyMWFkNGNhNzcuLjc1ODdm
MWJmNDlmMzAzMWVmYzJlMWJmZTQ2OGVmNjY0NGZhMTQxNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvblBhcnNlci5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvblBhcnNlci5oCkBAIC01NSwxMiArNTUsMTUgQEAg
cHVibGljOgogICAgICAgICBDb250cm9sVHlwZSBjb250cm9sRGF0YTsKICAgICB9OwogCisgICAg
T3BUeXBlIGN1cnJlbnRPcGNvZGUoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRPcGNvZGU7IH0K
KyAgICBzaXplX3QgY3VycmVudE9wY29kZVN0YXJ0aW5nT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4g
bV9jdXJyZW50T3Bjb2RlU3RhcnRpbmdPZmZzZXQ7IH0KKwogcHJpdmF0ZToKICAgICBzdGF0aWMg
Y29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiAKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5V
U0VEX1JFVFVSTiBwYXJzZUJvZHkoKTsKLSAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JF
VFVSTiBwYXJzZUV4cHJlc3Npb24oT3BUeXBlKTsKLSAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5V
U0VEX1JFVFVSTiBwYXJzZVVucmVhY2hhYmxlRXhwcmVzc2lvbihPcFR5cGUpOworICAgIFBhcnRp
YWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlRXhwcmVzc2lvbigpOworICAgIFBhcnRp
YWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlVW5yZWFjaGFibGVFeHByZXNzaW9uKCk7
CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gdW5pZnlDb250cm9sKFZlY3Rv
cjxFeHByZXNzaW9uVHlwZT4mLCB1bnNpZ25lZCBsZXZlbCk7CiAKICNkZWZpbmUgV0FTTV9UUllf
UE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5UTyhyZXN1bHQsIHdoYXQpIGRvIHsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXApAQCAtODQsNiArODcsMTAgQEAgcHJpdmF0ZToKICAgICBjb25z
dCBTaWduYXR1cmUqIG1fc2lnbmF0dXJlOwogICAgIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBt
X2luZm87CiAgICAgY29uc3QgVmVjdG9yPFNpZ25hdHVyZUluZGV4PiYgbV9tb2R1bGVTaWduYXR1
cmVJbmRpY2VzVG9VbmlxdWVkU2lnbmF0dXJlSW5kaWNlczsKKworICAgIE9wVHlwZSBtX2N1cnJl
bnRPcGNvZGU7CisgICAgc2l6ZV90IG1fY3VycmVudE9wY29kZVN0YXJ0aW5nT2Zmc2V0IHsgMCB9
OworCiAgICAgdW5zaWduZWQgbV91bnJlYWNoYWJsZUJsb2NrcyB7IDAgfTsKIH07CiAKQEAgLTk3
LDYgKzEwNCw3IEBAIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpGdW5jdGlvblBhcnNlcihWTSog
dm0sIENvbnRleHQmIGNvbnRleHQsIGNvbnN0IHVpbnQ4X3QqCiB7CiAgICAgaWYgKHZlcmJvc2Up
CiAgICAgICAgIGRhdGFMb2dMbigiUGFyc2luZyBmdW5jdGlvbiBzdGFydGluZyBhdDogIiwgKHVp
bnRwdHJfdClmdW5jdGlvblN0YXJ0LCAiIG9mIGxlbmd0aDogIiwgZnVuY3Rpb25MZW5ndGgpOwor
ICAgIG1fY29udGV4dC5zZXRQYXJzZXIodGhpcyk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENv
bnRleHQ+CkBAIC0xMjksMTggKzEzNywyMSBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+
OjpwYXJzZUJvZHkoKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgbV9jb250cm9sU3RhY2suYXBwZW5k
KHsgRXhwcmVzc2lvbkxpc3QoKSwgbV9jb250ZXh0LmFkZFRvcExldmVsKG1fc2lnbmF0dXJlLT5y
ZXR1cm5UeXBlKCkpIH0pOwogICAgIHVpbnQ4X3Qgb3A7CiAgICAgd2hpbGUgKG1fY29udHJvbFN0
YWNrLnNpemUoKSkgeworICAgICAgICBtX2N1cnJlbnRPcGNvZGVTdGFydGluZ09mZnNldCA9IG1f
b2Zmc2V0OwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVVJbnQ4KG9wKSwgImNh
bid0IGRlY29kZSBvcGNvZGUiKTsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighaXNWYWxp
ZE9wVHlwZShvcCksICJpbnZhbGlkIG9wY29kZSAiLCBvcCk7CiAKKyAgICAgICAgbV9jdXJyZW50
T3Bjb2RlID0gc3RhdGljX2Nhc3Q8T3BUeXBlPihvcCk7CisKICAgICAgICAgaWYgKHZlcmJvc2Up
IHsKICAgICAgICAgICAgIGRhdGFMb2dMbigicHJvY2Vzc2luZyBvcCAoIiwgbV91bnJlYWNoYWJs
ZUJsb2NrcywgIik6ICIsICBSYXdQb2ludGVyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG9wKSks
ICIsICIsIG1ha2VTdHJpbmcoc3RhdGljX2Nhc3Q8T3BUeXBlPihvcCkpLCAiIGF0IG9mZnNldDog
IiwgUmF3UG9pbnRlcihyZWludGVycHJldF9jYXN0PHZvaWQqPihtX29mZnNldCkpKTsKICAgICAg
ICAgICAgIG1fY29udGV4dC5kdW1wKG1fY29udHJvbFN0YWNrLCAmbV9leHByZXNzaW9uU3RhY2sp
OwogICAgICAgICB9CiAKICAgICAgICAgaWYgKG1fdW5yZWFjaGFibGVCbG9ja3MpCi0gICAgICAg
ICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlVW5yZWFjaGFibGVFeHByZXNzaW9u
KHN0YXRpY19jYXN0PE9wVHlwZT4ob3ApKSk7CisgICAgICAgICAgICBXQVNNX0ZBSUxfSUZfSEVM
UEVSX0ZBSUxTKHBhcnNlVW5yZWFjaGFibGVFeHByZXNzaW9uKCkpOwogICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlRXhwcmVzc2lvbihzdGF0
aWNfY2FzdDxPcFR5cGU+KG9wKSkpOworICAgICAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9G
QUlMUyhwYXJzZUV4cHJlc3Npb24oKSk7CiAgICAgfQogCiAgICAgQVNTRVJUKG9wID09IE9wVHlw
ZTo6RW5kKTsKQEAgLTE3OCw5ICsxODksOSBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+
Ojp1bmFyeUNhc2UoKSAtPiBQYXJ0aWFsUmVzdWx0CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENv
bnRleHQ+Ci1hdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24oT3BU
eXBlIG9wKSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+Ojpw
YXJzZUV4cHJlc3Npb24oKSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgc3dpdGNoIChvcCkgewor
ICAgIHN3aXRjaCAobV9jdXJyZW50T3Bjb2RlKSB7CiAjZGVmaW5lIENSRUFURV9DQVNFKG5hbWUs
IGlkLCBiM29wLCBpbmMpIGNhc2UgT3BUeXBlOjpuYW1lOiByZXR1cm4gYmluYXJ5Q2FzZTxPcFR5
cGU6Om5hbWU+KCk7CiAgICAgRk9SX0VBQ0hfV0FTTV9CSU5BUllfT1AoQ1JFQVRFX0NBU0UpCiAj
dW5kZWYgQ1JFQVRFX0NBU0UKQEAgLTIxNSw3ICsyMjYsNyBAQCBhdXRvIEZ1bmN0aW9uUGFyc2Vy
PENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24oT3BUeXBlIG9wKSAtPiBQYXJ0aWFsUmVzdWx0CiAg
ICAgICAgIC8vIEZJWE1FIHZhbGlkYXRlIGFsaWdubWVudC4gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2ODgzNgogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFw
YXJzZVZhclVJbnQzMihvZmZzZXQpLCAiY2FuJ3QgZ2V0IGxvYWQgb2Zmc2V0Iik7CiAgICAgICAg
IFdBU01fVFJZX1BPUF9FWFBSRVNTSU9OX1NUQUNLX0lOVE8ocG9pbnRlciwgImxvYWQgcG9pbnRl
ciIpOwotICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChsb2FkKHN0YXRpY19jYXN0PExv
YWRPcFR5cGU+KG9wKSwgcG9pbnRlciwgcmVzdWx0LCBvZmZzZXQpKTsKKyAgICAgICAgV0FTTV9U
UllfQUREX1RPX0NPTlRFWFQobG9hZChzdGF0aWNfY2FzdDxMb2FkT3BUeXBlPihtX2N1cnJlbnRP
cGNvZGUpLCBwb2ludGVyLCByZXN1bHQsIG9mZnNldCkpOwogICAgICAgICBtX2V4cHJlc3Npb25T
dGFjay5hcHBlbmQocmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CkBAIC0yMzAs
NyArMjQxLDcgQEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VFeHByZXNzaW9u
KE9wVHlwZSBvcCkgLT4gUGFydGlhbFJlc3VsdAogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KCFwYXJzZVZhclVJbnQzMihvZmZzZXQpLCAiY2FuJ3QgZ2V0IHN0b3JlIG9mZnNldCIpOwogICAg
ICAgICBXQVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKHZhbHVlLCAic3RvcmUgdmFs
dWUiKTsKICAgICAgICAgV0FTTV9UUllfUE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5UTyhwb2ludGVy
LCAic3RvcmUgcG9pbnRlciIpOwotICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChzdG9y
ZShzdGF0aWNfY2FzdDxTdG9yZU9wVHlwZT4ob3ApLCBwb2ludGVyLCB2YWx1ZSwgb2Zmc2V0KSk7
CisgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKHN0b3JlKHN0YXRpY19jYXN0PFN0b3Jl
T3BUeXBlPihtX2N1cnJlbnRPcGNvZGUpLCBwb2ludGVyLCB2YWx1ZSwgb2Zmc2V0KSk7CiAgICAg
ICAgIHJldHVybiB7IH07CiAgICAgfQogI3VuZGVmIENSRUFURV9DQVNFCkBAIC00MDMsNyArNDE0
LDcgQEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VFeHByZXNzaW9uKE9wVHlw
ZSBvcCkgLT4gUGFydGlhbFJlc3VsdAogICAgICAgICBFeHByZXNzaW9uVHlwZSBjb25kaXRpb24g
PSBDb250ZXh0OjplbXB0eUV4cHJlc3Npb247CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IXBhcnNlVmFyVUludDMyKHRhcmdldCksICJjYW4ndCBnZXQgYnIgLyBicl9pZidzIHRhcmdldCIp
OwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHRhcmdldCA+PSBtX2NvbnRyb2xTdGFjay5z
aXplKCksICJiciAvIGJyX2lmJ3MgdGFyZ2V0ICIsIHRhcmdldCwgIiBleGNlZWRzIGNvbnRyb2wg
c3RhY2sgc2l6ZSAiLCBtX2NvbnRyb2xTdGFjay5zaXplKCkpOwotICAgICAgICBpZiAob3AgPT0g
QnJJZikKKyAgICAgICAgaWYgKG1fY3VycmVudE9wY29kZSA9PSBCcklmKQogICAgICAgICAgICAg
V0FTTV9UUllfUE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5UTyhjb25kaXRpb24sICJiciAvIGJyX2lm
IGNvbmRpdGlvbiIpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX3VucmVhY2hhYmxlQmxv
Y2tzID0gMTsKQEAgLTUxOCwxMSArNTI5LDExIEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4
dD46OnBhcnNlRXhwcmVzc2lvbihPcFR5cGUgb3ApIC0+IFBhcnRpYWxSZXN1bHQKIAogLy8gRklY
TUU6IFdlIHNob3VsZCB0cnkgdG8gdXNlIHRoZSBzYW1lIGRlY29kZXIgZnVuY3Rpb24gZm9yIGJv
dGggdW5yZWFjaGFibGUgYW5kIHJlYWNoYWJsZSBjb2RlLiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTY1OTY1CiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb250ZXh0PgotYXV0
byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VVbnJlYWNoYWJsZUV4cHJlc3Npb24oT3BU
eXBlIG9wKSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+Ojpw
YXJzZVVucmVhY2hhYmxlRXhwcmVzc2lvbigpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBBU1NF
UlQobV91bnJlYWNoYWJsZUJsb2Nrcyk7CiAjZGVmaW5lIENSRUFURV9DQVNFKG5hbWUsIGlkLCBi
M29wLCBpbmMpIGNhc2UgT3BUeXBlOjpuYW1lOgotICAgIHN3aXRjaCAob3ApIHsKKyAgICBzd2l0
Y2ggKG1fY3VycmVudE9wY29kZSkgewogICAgIGNhc2UgRWxzZTogewogICAgICAgICBpZiAobV91
bnJlYWNoYWJsZUJsb2NrcyA+IDEpCiAgICAgICAgICAgICByZXR1cm4geyB9OwpAQCAtNTQ5LDcg
KzU2MCw3IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlVW5yZWFjaGFibGVF
eHByZXNzaW9uKE9wVHlwZSBvcCkgLT4gUGFydGlhbFJlCiAgICAgY2FzZSBCbG9jazogewogICAg
ICAgICBtX3VucmVhY2hhYmxlQmxvY2tzKys7CiAgICAgICAgIFR5cGUgdW51c2VkOwotICAgICAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVJlc3VsdFR5cGUodW51c2VkKSwgImNhbid0IGdl
dCBpbmxpbmUgdHlwZSBmb3IgIiwgb3AsICIgaW4gdW5yZWFjaGFibGUgY29udGV4dCIpOworICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVJlc3VsdFR5cGUodW51c2VkKSwgImNhbid0
IGdldCBpbmxpbmUgdHlwZSBmb3IgIiwgbV9jdXJyZW50T3Bjb2RlLCAiIGluIHVucmVhY2hhYmxl
IGNvbnRleHQiKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKQEAgLTU5MCw4ICs2MDEs
OCBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZVVucmVhY2hhYmxlRXhwcmVz
c2lvbihPcFR5cGUgb3ApIC0+IFBhcnRpYWxSZQogICAgIEZPUl9FQUNIX1dBU01fTUVNT1JZX0xP
QURfT1AoQ1JFQVRFX0NBU0UpCiAgICAgRk9SX0VBQ0hfV0FTTV9NRU1PUllfU1RPUkVfT1AoQ1JF
QVRFX0NBU0UpIHsKICAgICAgICAgdWludDMyX3QgdW51c2VkOwotICAgICAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMih1bnVzZWQpLCAiY2FuJ3QgZ2V0IGZpcnN0IGltbWVk
aWF0ZSBmb3IgIiwgb3AsICIgaW4gdW5yZWFjaGFibGUgY29udGV4dCIpOwotICAgICAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMih1bnVzZWQpLCAiY2FuJ3QgZ2V0IHNlY29u
ZCBpbW1lZGlhdGUgZm9yICIsIG9wLCAiIGluIHVucmVhY2hhYmxlIGNvbnRleHQiKTsKKyAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIodW51c2VkKSwgImNhbid0IGdl
dCBmaXJzdCBpbW1lZGlhdGUgZm9yICIsIG1fY3VycmVudE9wY29kZSwgIiBpbiB1bnJlYWNoYWJs
ZSBjb250ZXh0Iik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMy
KHVudXNlZCksICJjYW4ndCBnZXQgc2Vjb25kIGltbWVkaWF0ZSBmb3IgIiwgbV9jdXJyZW50T3Bj
b2RlLCAiIGluIHVucmVhY2hhYmxlIGNvbnRleHQiKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAg
ICB9CiAKQEAgLTYwNyw3ICs2MTgsNyBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+Ojpw
YXJzZVVucmVhY2hhYmxlRXhwcmVzc2lvbihPcFR5cGUgb3ApIC0+IFBhcnRpYWxSZQogICAgIGNh
c2UgQnJJZjoKICAgICBjYXNlIENhbGw6IHsKICAgICAgICAgdWludDMyX3QgdW51c2VkOwotICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMih1bnVzZWQpLCAiY2FuJ3Qg
Z2V0IGltbWVkaWF0ZSBmb3IgIiwgb3AsICIgaW4gdW5yZWFjaGFibGUgY29udGV4dCIpOworICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMih1bnVzZWQpLCAiY2FuJ3Qg
Z2V0IGltbWVkaWF0ZSBmb3IgIiwgbV9jdXJyZW50T3Bjb2RlLCAiIGluIHVucmVhY2hhYmxlIGNv
bnRleHQiKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGNvZGVPcmlnaW4uY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbU9wY29kZU9yaWdpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTExODgyZjcw
NjVlZDc1ZWIxYTYxOGNkZjI5ODhiZTRhZDgxYzI3ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGNvZGVPcmlnaW4uY3BwCkBAIC0wLDAgKzEsNDAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2FzbU9wY29kZU9yaWdpbi5oIgorCisjaWYgRU5BQkxF
KFdFQkFTU0VNQkxZKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20geworCit2b2lk
IE9wY29kZU9yaWdpbjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5w
cmludCgie29wY29kZTogIiwgbWFrZVN0cmluZyhvcGNvZGUpLCAiLCBsb2NhdGlvbjogIiwgbG9j
YXRpb24sICJ9Iik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAv
LyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtT3Bjb2RlT3JpZ2luLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
T3Bjb2RlT3JpZ2luLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGIxZGMwNzZmYTEwZDQ3MDM4ZDY4NTMxMmQ4ODFi
M2I2MTlkMWIxOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21PcGNvZGVPcmlnaW4uaApAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2lu
Y2x1ZGUgIkIzT3JpZ2luLmgiCisjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIFdhc20geworCitjbGFzcyBPcGNvZGVPcmlnaW4geworICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE9wY29kZU9yaWdp
bik7CitwdWJsaWM6CisgICAgT3Bjb2RlT3JpZ2luKE9wVHlwZSBvcCwgc2l6ZV90IG9mZnNldCkK
KyAgICAgICAgOiBvcGNvZGUob3ApCisgICAgICAgICwgbG9jYXRpb24ob2Zmc2V0KQorICAgIHsK
KyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworICAgIGNvbnN0
IE9wVHlwZSBvcGNvZGU7CisgICAgY29uc3Qgc2l6ZV90IGxvY2F0aW9uOworfTsKKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcAppbmRleCBjZWM5ZTdmNDhiYmRiMmE1
YTExMmRmNDA1NGM3ZGVmNGRmMDZjM2NkLi4zODUzODJkYmE0ZWQwNTJmYjUyZWYyOGZmODA4Y2Y0
MDJjMDA0ZmUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxh
bi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCkBAIC0y
MTUsNiArMjE1LDcgQEAgdm9pZCBQbGFuOjpjb21waWxlRnVuY3Rpb25zKCkKIAogICAgIGlmICht
X3N0YXRlID49IFN0YXRlOjpDb21waWxlZCkKICAgICAgICAgcmV0dXJuOworCiAgICAgVGhyZWFk
Q291bnRIb2xkZXIgaG9sZGVyKCp0aGlzKTsKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICB1
aW50MzJfdCBmdW5jdGlvbkluZGV4OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbVZhbGlkYXRlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21W
YWxpZGF0ZS5jcHAKaW5kZXggOTIzODU5NGJhOTdmNTNmOTJhYTVkYzIwODQ5NTU2YWRiODRmYWY4
OS4uOGE0NTc4M2Q4NmVhZTJiMjAxNTk4NzliYzA3NDMwMDVlMzg3NmU5ZCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVZhbGlkYXRlLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVmFsaWRhdGUuY3BwCkBAIC0xNDksNiArMTQ5LDcgQEAg
cHVibGljOgogICAgIH0KIAogICAgIHZvaWQgZHVtcChjb25zdCBWZWN0b3I8Q29udHJvbEVudHJ5
PiYsIGNvbnN0IEV4cHJlc3Npb25MaXN0Kik7CisgICAgdm9pZCBzZXRQYXJzZXIoRnVuY3Rpb25Q
YXJzZXI8VmFsaWRhdGU+KikgeyB9CiAKIHByaXZhdGU6CiAgICAgUmVzdWx0IFdBUk5fVU5VU0VE
X1JFVFVSTiB1bmlmeShjb25zdCBFeHByZXNzaW9uTGlzdCYsIGNvbnN0IENvbnRyb2xEYXRhJik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9nZW5lcmF0ZVdhc21CM0lS
R2VuZXJhdG9ySW5saW5lc0hlYWRlci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2dl
bmVyYXRlV2FzbUIzSVJHZW5lcmF0b3JJbmxpbmVzSGVhZGVyLnB5CmluZGV4IDU5NmQ4NTk3YWZl
NDFjMzdlYjE5NTBmMWYwZmEwYTU4MjliOWUwN2EuLjE5YzJmY2M5MTEwMjc4MjM5ZDFjNDI0Yzg4
MjA5ZTkyOTE0YmE1MzIgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2dl
bmVyYXRlV2FzbUIzSVJHZW5lcmF0b3JJbmxpbmVzSGVhZGVyLnB5CisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2dlbmVyYXRlV2FzbUIzSVJHZW5lcmF0b3JJbmxpbmVzSGVhZGVyLnB5
CkBAIC0xNTksNyArMTU5LDcgQEAgY2xhc3MgQ29kZUdlbmVyYXRvcjoKICAgICBkZWYgZ2VuZXJh
dGUoc2VsZiwgd2FzbU9wKToKICAgICAgICAgaWYgbGVuKHNlbGYudG9rZW5zKSA9PSAxOgogICAg
ICAgICAgICAgcGFyYW1zID0gWyJhcmciICsgc3RyKHBhcmFtKSBmb3IgcGFyYW0gaW4gcmFuZ2Uo
bGVuKHdhc21PcFsicGFyYW1ldGVyIl0pKV0KLSAgICAgICAgICAgIHJldHVybiAiICAgIHJlc3Vs
dCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQjM6OiIgKyBzZWxm
LnRva2VuKCkgKyAiLCBPcmlnaW4oKSwgIiArICIsICIuam9pbihwYXJhbXMpICsgIikiCisgICAg
ICAgICAgICByZXR1cm4gIiAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZh
bHVlPihtX3Byb2MsIEIzOjoiICsgc2VsZi50b2tlbigpICsgIiwgb3JpZ2luKCksICIgKyAiLCAi
LmpvaW4ocGFyYW1zKSArICIpIgogICAgICAgICByZXN1bHQgPSBzZWxmLmdlbmVyYXRlT3Bjb2Rl
KCkKICAgICAgICAgc2VsZi5jb2RlLmFwcGVuZCgicmVzdWx0ID0gIiArIHJlc3VsdCkKICAgICAg
ICAgcmV0dXJuICIgICAgIiArICIgICAgXG4iLmpvaW4oc2VsZi5jb2RlKQpAQCAtMTcwLDExICsx
NzAsMTEgQEAgZGVmIHRlbXAoaW5kZXgpOgogCiAKIGRlZiBnZW5lcmF0ZUIzT3BDb2RlKGluZGV4
LCBvcCwgcGFyYW1zKToKLSAgICByZXR1cm4gIlZhbHVlKiAiICsgdGVtcChpbmRleCkgKyAiID0g
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCMzo6IiArIG9wICsgIiwg
T3JpZ2luKCksICIgKyAiLCAiLmpvaW4ocGFyYW1zKSArICIpOyIKKyAgICByZXR1cm4gIlZhbHVl
KiAiICsgdGVtcChpbmRleCkgKyAiID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4o
bV9wcm9jLCBCMzo6IiArIG9wICsgIiwgb3JpZ2luKCksICIgKyAiLCAiLmpvaW4ocGFyYW1zKSAr
ICIpOyIKIAogCiBkZWYgZ2VuZXJhdGVDb25zdENvZGUoaW5kZXgsIHZhbHVlLCB0eXBlKToKLSAg
ICByZXR1cm4gIlZhbHVlKiAiICsgdGVtcChpbmRleCkgKyAiID0gbV9jdXJyZW50QmxvY2stPmFw
cGVuZEludENvbnN0YW50KG1fcHJvYywgT3JpZ2luKCksIEIzOjoiICsgdHlwZSArICIsICIgKyB2
YWx1ZSArICIpOyIKKyAgICByZXR1cm4gIlZhbHVlKiAiICsgdGVtcChpbmRleCkgKyAiID0gbV9j
dXJyZW50QmxvY2stPmFwcGVuZEludENvbnN0YW50KG1fcHJvYywgb3JpZ2luKCksIEIzOjoiICsg
dHlwZSArICIsICIgKyB2YWx1ZSArICIpOyIKIAogCiBkZWYgZ2VuZXJhdGVCM0NvZGUod2FzbU9w
LCBzb3VyY2UpOgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>