<?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>27635</bug_id>
          
          <creation_ts>2009-07-23 21:22:23 -0700</creation_ts>
          <short_desc>Make get_by_id/put_by_id/method_check/call defer optimization using a data flag rather than a code modification.</short_desc>
          <delta_ts>2009-08-06 20:13:43 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</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="Gavin Barraclough">barraclough</reporter>
          <assigned_to name="Gavin Barraclough">barraclough</assigned_to>
          <cc>ggaren</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>134358</commentid>
    <comment_count>0</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-07-23 21:22:23 -0700</bug_when>
    <thetext>This will improve the performance of ENABLE(ASSEMBLER_WX_EXCLUSIVE) builds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134361</commentid>
    <comment_count>1</comment_count>
      <attachid>33406</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-07-23 22:05:22 -0700</bug_when>
    <thetext>Created attachment 33406
The Patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134364</commentid>
    <comment_count>2</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2009-07-23 22:32:59 -0700</bug_when>
    <thetext>It looks like this patch might create conflicts with the merge I&apos;m working on.

The PtrAndFlags, StructureStubInfo and CodeBlock changes probably won&apos;t conflict, and removing virtualCallPreLinkBegin probably won&apos;t conflict too much (modulo a file move), but I&apos;m worried that the JITCall and JITStubs changes risk making diff very confused, since I&apos;ve made a lot of changes in the same areas.

Do you think you can hold off landing until after Friday?

I gave the patch a brief review, and it looks good to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136094</commentid>
    <comment_count>3</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-07-30 19:21:06 -0700</bug_when>
    <thetext>Sending        JavaScriptCore/ChangeLog
Sending        JavaScriptCore/bytecode/CodeBlock.cpp
Sending        JavaScriptCore/bytecode/CodeBlock.h
Sending        JavaScriptCore/bytecode/StructureStubInfo.cpp
Sending        JavaScriptCore/bytecode/StructureStubInfo.h
Sending        JavaScriptCore/bytecompiler/BytecodeGenerator.cpp
Sending        JavaScriptCore/jit/JIT.cpp
Sending        JavaScriptCore/jit/JIT.h
Sending        JavaScriptCore/jit/JITCall.cpp
Sending        JavaScriptCore/jit/JITOpcodes.cpp
Sending        JavaScriptCore/jit/JITStubs.cpp
Sending        JavaScriptCore/jit/JITStubs.h
Sending        JavaScriptCore/wtf/PtrAndFlags.h
Transmitting file data .............
Committed revision 46618.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137756</commentid>
    <comment_count>4</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-08-06 20:13:43 -0700</bug_when>
    <thetext>Sending        JavaScriptCore/ChangeLog
Sending        JavaScriptCore/bytecode/CodeBlock.cpp
Sending        JavaScriptCore/bytecode/CodeBlock.h
Sending        JavaScriptCore/bytecode/StructureStubInfo.cpp
Sending        JavaScriptCore/bytecode/StructureStubInfo.h
Sending        JavaScriptCore/bytecompiler/BytecodeGenerator.cpp
Sending        JavaScriptCore/jit/JIT.cpp
Sending        JavaScriptCore/jit/JIT.h
Sending        JavaScriptCore/jit/JITCall.cpp
Sending        JavaScriptCore/jit/JITOpcodes.cpp
Sending        JavaScriptCore/jit/JITPropertyAccess.cpp
Sending        JavaScriptCore/jit/JITStubs.cpp
Sending        JavaScriptCore/jit/JITStubs.h
Sending        JavaScriptCore/wtf/PtrAndFlags.h
Transmitting file data ..............
Committed revision 46879.

Trying again.....</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33406</attachid>
            <date>2009-07-23 22:05:22 -0700</date>
            <delta_ts>2009-07-23 22:36:10 -0700</delta_ts>
            <desc>The Patch.</desc>
            <filename>patch.repatchSecond2nd.txt</filename>
            <type>text/plain</type>
            <size>47482</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ2MzExKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzkgQEAKKzIwMDktMDctMjMgIEdhdmluIEJh
cnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1ha2UgZ2V0X2J5X2lkL3B1dF9ieV9pZC9tZXRo
b2RfY2hlY2svY2FsbCBkZWZlciBvcHRpbWl6YXRpb24gdXNpbmcgYSBkYXRhIGZsYWcgcmF0aGVy
IHRoYW4gYSBjb2RlIG1vZGlmaWNhdGlvbi4KKyAgICAgICAgKCBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjc2MzUgKQorCisgICAgICAgIFRoaXMgaW1wcm92ZXMgcGVy
Zm9ybWFuY2Ugb2YgRU5BQkxFKEFTU0VNQkxFUl9XWF9FWENMVVNJVkUpIGJ1aWxkcyBieSAyLTIu
NSUsIHJlZHVjaW5nIHRoZSBvdmVyaGVhZCB0byBhYm91dCAyLjUlLgorICAgICAgICAoTm8gcGVy
Zm9ybWFuY2UgaW1wYWN0IHdpdGggQVNTRU1CTEVSX1dYX0VYQ0xVU0lWRSBkaXNhYmxlZCkuCisK
KyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpwcmludFN0
cnVjdHVyZVN0dWJJbmZvKToKKyAgICAgICAgICAgIC0gTWFrZSBTdHJ1Y3R1cmVTdHViSW5mbyBz
dG9yZSB0aGUgdHlwZSBhcyBhbiBpbnRlZ2VyLCByYXRoZXIgdGhhbiBhbiBPcGNvZGVJRC4KKwor
ICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjopOgorICAgICAg
ICAoSlNDOjpDYWxsTGlua0luZm86OnNlZW5PbmNlKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJ
bmZvOjpzZXRTZWVuKToKKyAgICAgICAgKEpTQzo6TWV0aG9kQ2FsbExpbmtJbmZvOjpzZWVuT25j
ZSk6CisgICAgICAgIChKU0M6Ok1ldGhvZENhbGxMaW5rSW5mbzo6c2V0U2Vlbik6CisgICAgICAg
ICAgICAtIENoYW5nZSBhIHBvaW50ZXIgaW4gQ2FsbExpbmtJbmZvL01ldGhvZENhbGxMaW5rSW5m
byB0byB1c2UgYSBQdHJBbmRGbGFncywgdXNlIGEgZmxhZyB0byB0cmFjayB3aGVuIGFuIG9wIGhh
cyBiZWVuIGV4ZWN1dGVkIG9uY2UuCisKKyAgICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVTdHVi
SW5mby5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpkZXJlZik6CisgICAg
ICAgICAgICAtIE1ha2UgU3RydWN0dXJlU3R1YkluZm8gc3RvcmUgdGhlIHR5cGUgYXMgYW4gaW50
ZWdlciwgcmF0aGVyIHRoYW4gYW4gT3Bjb2RlSUQuCisKKyAgICAgICAgKiBieXRlY29kZS9TdHJ1
Y3R1cmVTdHViSW5mby5oOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6U3RydWN0
dXJlU3R1YkluZm8pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdEdldEJ5
SWRTZWxmKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OmluaXRHZXRCeUlkUHJv
dG8pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdEdldEJ5SWRDaGFpbik6
CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjppbml0R2V0QnlJZFNlbGZMaXN0KToK
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OmluaXRHZXRCeUlkUHJvdG9MaXN0KToK
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OmluaXRQdXRCeUlkVHJhbnNpdGlvbik6
CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjppbml0UHV0QnlJZFJlcGxhY2UpOgor
ICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6c2Vlbk9uY2UpOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmVTdHViSW5mbzo6c2V0U2Vlbik6CisgICAgICAgICAgICAtIE1ha2UgU3RydWN0
dXJlU3R1YkluZm8gc3RvcmUgdGhlIHR5cGUgYXMgYW4gaW50ZWdlciwgcmF0aGVyIHRoYW4gYW4g
T3Bjb2RlSUQsIGFkZCBhIGZsYWcgdG8gdHJhY2sgd2hlbiBhbiBvcCBoYXMgYmVlbiBleGVjdXRl
ZCBvbmNlLgorCisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoK
KyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRCeUlkKToKKyAgICAgICAg
KEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRQdXRCeUlkKToKKyAgICAgICAgICAgIC0gTWFr
ZSBTdHJ1Y3R1cmVTdHViSW5mbyBzdG9yZSB0aGUgdHlwZSBhcyBhbiBpbnRlZ2VyLCByYXRoZXIg
dGhhbiBhbiBPcGNvZGVJRC4KKworICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlND
OjpKSVQ6OnByaXZhdGVDb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKToKKyAgICAgICAgKEpT
Qzo6SklUOjp1bmxpbmtDYWxsKToKKyAgICAgICAgICAgIC0gUmVtb3ZlIHRoZSAiZG9uJ3QgbGF6
eSBsaW5rIiBzdGFnZSBvZiBjYWxscy4KKworICAgICAgICAqIGppdC9KSVQuaDoKKyAgICAgICAg
KEpTQzo6SklUOjpjb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKToKKyAgICAgICAgICAgIC0g
UmVtb3ZlIHRoZSAiZG9uJ3QgbGF6eSBsaW5rIiBzdGFnZSBvZiBjYWxscy4KKworICAgICAgICAq
IGppdC9KSVRDYWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BDYWxsU2xvd0Nh
c2UpOgorICAgICAgICAgICAgLSBSZW1vdmUgdGhlICJkb24ndCBsYXp5IGxpbmsiIHN0YWdlIG9m
IGNhbGxzLgorCisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAgKEpTQzo6SklU
VGh1bmtzOjpKSVRUaHVua3MpOgorICAgICAgICAoSlNDOjpKSVRUaHVua3M6OnRyeUNhY2hlUHV0
QnlJRCk6CisgICAgICAgIChKU0M6OkpJVFRodW5rczo6dHJ5Q2FjaGVHZXRCeUlEKToKKyAgICAg
ICAgKEpTQzo6SklUU3R1YnM6OkRFRklORV9TVFVCX0ZVTkNUSU9OKToKKyAgICAgICAgKEpTQzo6
SklUU3R1YnM6OmdldFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdFNsb3QpOgorICAgICAg
ICAgICAgLSBSZW1vdmUgdGhlICJkb24ndCBsYXp5IGxpbmsiIHN0YWdlIG9mIGNhbGxzLCBhbmQg
dGhlICJfc2Vjb25kIiBzdGFnZSBvZiBnZXRfYnlfaWQvcHV0X2J5X2lkL21ldGhvZF9jaGVjay4K
KworICAgICAgICAqIGppdC9KSVRTdHVicy5oOgorICAgICAgICAoSlNDOjpKSVRUaHVua3M6OmN0
aVN0cmluZ0xlbmd0aFRyYW1wb2xpbmUpOgorICAgICAgICAoSlNDOjpKSVRTdHViczo6KToKKyAg
ICAgICAgICAgIC0gUmVtb3ZlIHRoZSAiZG9uJ3QgbGF6eSBsaW5rIiBzdGFnZSBvZiBjYWxscywg
YW5kIHRoZSAiX3NlY29uZCIgc3RhZ2Ugb2YgZ2V0X2J5X2lkL3B1dF9ieV9pZC9tZXRob2RfY2hl
Y2suCisKKyAgICAgICAgKiB3dGYvUHRyQW5kRmxhZ3MuaDoKKyAgICAgICAgKFdURjo6UHRyQW5k
RmxhZ3M6OlB0ckFuZEZsYWdzKToKKyAgICAgICAgKFdURjo6UHRyQW5kRmxhZ3M6Om9wZXJhdG9y
ISk6CisgICAgICAgIChXVEY6OlB0ckFuZEZsYWdzOjpvcGVyYXRvci0+KToKKyAgICAgICAgICAg
IC0gQWRkICEgYW5kIC0+IG9wZXJhdG9ycywgYWRkIGNvbnN0dWN0b3Igd2l0aCBwb2ludGVyIGFy
Z3VtZW50LgorCiAyMDA5LTA3LTIzICBLZXZpbiBPbGxpdmllciAgPGtldmlub0B0aGVvbGxpdmll
cnMuY29tPgogCiAgICAgICAgIHd4IGJ1aWxkIGZpeCwgYWRkaW5nIG1pc3NpbmcgaGVhZGVyLgpJ
bmRleDogSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiA0NjMxMSkK
KysrIEphdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIyNyw0NCArMjI3LDQ0IEBAIHN0YXRpYyB2b2lkIHByaW50R2xvYmFsUmVzb2x2ZUluZm8o
Y29uc3QKIAogc3RhdGljIHZvaWQgcHJpbnRTdHJ1Y3R1cmVTdHViSW5mbyhjb25zdCBTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8sIHVuc2lnbmVkIGluc3RydWN0aW9uT2Zmc2V0KQogewotICAg
IHN3aXRjaCAoc3R1YkluZm8ub3Bjb2RlSUQpIHsKLSAgICBjYXNlIG9wX2dldF9ieV9pZF9zZWxm
OgorICAgIHN3aXRjaCAoc3R1YkluZm8uYWNjZXNzVHlwZSkgeworICAgIGNhc2UgYWNjZXNzX2dl
dF9ieV9pZF9zZWxmOgogICAgICAgICBwcmludGYoIiAgWyU0ZF0gJXM6ICVzXG4iLCBpbnN0cnVj
dGlvbk9mZnNldCwgImdldF9ieV9pZF9zZWxmIiwgcG9pbnRlclRvU291cmNlU3RyaW5nKHN0dWJJ
bmZvLnUuZ2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZSkuVVRGOFN0cmluZygpLmNfc3Ry
KCkpOwogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBvcF9nZXRfYnlfaWRfcHJvdG86CisgICAg
Y2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3Byb3RvOgogICAgICAgICBwcmludGYoIiAgWyU0ZF0gJXM6
ICVzLCAlc1xuIiwgaW5zdHJ1Y3Rpb25PZmZzZXQsICJnZXRfYnlfaWRfcHJvdG8iLCBwb2ludGVy
VG9Tb3VyY2VTdHJpbmcoc3R1YkluZm8udS5nZXRCeUlkUHJvdG8uYmFzZU9iamVjdFN0cnVjdHVy
ZSkuVVRGOFN0cmluZygpLmNfc3RyKCksIHBvaW50ZXJUb1NvdXJjZVN0cmluZyhzdHViSW5mby51
LmdldEJ5SWRQcm90by5wcm90b3R5cGVTdHJ1Y3R1cmUpLlVURjhTdHJpbmcoKS5jX3N0cigpKTsK
ICAgICAgICAgcmV0dXJuOwotICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2NoYWluOgorICAgIGNhc2Ug
YWNjZXNzX2dldF9ieV9pZF9jaGFpbjoKICAgICAgICAgcHJpbnRmKCIgIFslNGRdICVzOiAlcywg
JXNcbiIsIGluc3RydWN0aW9uT2Zmc2V0LCAiZ2V0X2J5X2lkX2NoYWluIiwgcG9pbnRlclRvU291
cmNlU3RyaW5nKHN0dWJJbmZvLnUuZ2V0QnlJZENoYWluLmJhc2VPYmplY3RTdHJ1Y3R1cmUpLlVU
RjhTdHJpbmcoKS5jX3N0cigpLCBwb2ludGVyVG9Tb3VyY2VTdHJpbmcoc3R1YkluZm8udS5nZXRC
eUlkQ2hhaW4uY2hhaW4pLlVURjhTdHJpbmcoKS5jX3N0cigpKTsKICAgICAgICAgcmV0dXJuOwot
ICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3NlbGZfbGlzdDoKKyAgICBjYXNlIGFjY2Vzc19nZXRfYnlf
aWRfc2VsZl9saXN0OgogICAgICAgICBwcmludGYoIiAgWyU0ZF0gJXM6ICVzICglZClcbiIsIGlu
c3RydWN0aW9uT2Zmc2V0LCAib3BfZ2V0X2J5X2lkX3NlbGZfbGlzdCIsIHBvaW50ZXJUb1NvdXJj
ZVN0cmluZyhzdHViSW5mby51LmdldEJ5SWRTZWxmTGlzdC5zdHJ1Y3R1cmVMaXN0KS5VVEY4U3Ry
aW5nKCkuY19zdHIoKSwgc3R1YkluZm8udS5nZXRCeUlkU2VsZkxpc3QubGlzdFNpemUpOwogICAg
ICAgICByZXR1cm47Ci0gICAgY2FzZSBvcF9nZXRfYnlfaWRfcHJvdG9fbGlzdDoKKyAgICBjYXNl
IGFjY2Vzc19nZXRfYnlfaWRfcHJvdG9fbGlzdDoKICAgICAgICAgcHJpbnRmKCIgIFslNGRdICVz
OiAlcyAoJWQpXG4iLCBpbnN0cnVjdGlvbk9mZnNldCwgIm9wX2dldF9ieV9pZF9wcm90b19saXN0
IiwgcG9pbnRlclRvU291cmNlU3RyaW5nKHN0dWJJbmZvLnUuZ2V0QnlJZFByb3RvTGlzdC5zdHJ1
Y3R1cmVMaXN0KS5VVEY4U3RyaW5nKCkuY19zdHIoKSwgc3R1YkluZm8udS5nZXRCeUlkUHJvdG9M
aXN0Lmxpc3RTaXplKTsKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3Ry
YW5zaXRpb246CisgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb246CiAgICAgICAg
IHByaW50ZigiICBbJTRkXSAlczogJXMsICVzLCAlc1xuIiwgaW5zdHJ1Y3Rpb25PZmZzZXQsICJw
dXRfYnlfaWRfdHJhbnNpdGlvbiIsIHBvaW50ZXJUb1NvdXJjZVN0cmluZyhzdHViSW5mby51LnB1
dEJ5SWRUcmFuc2l0aW9uLnByZXZpb3VzU3RydWN0dXJlKS5VVEY4U3RyaW5nKCkuY19zdHIoKSwg
cG9pbnRlclRvU291cmNlU3RyaW5nKHN0dWJJbmZvLnUucHV0QnlJZFRyYW5zaXRpb24uc3RydWN0
dXJlKS5VVEY4U3RyaW5nKCkuY19zdHIoKSwgcG9pbnRlclRvU291cmNlU3RyaW5nKHN0dWJJbmZv
LnUucHV0QnlJZFRyYW5zaXRpb24uY2hhaW4pLlVURjhTdHJpbmcoKS5jX3N0cigpKTsKICAgICAg
ICAgcmV0dXJuOwotICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3JlcGxhY2U6CisgICAgY2FzZSBhY2Nl
c3NfcHV0X2J5X2lkX3JlcGxhY2U6CiAgICAgICAgIHByaW50ZigiICBbJTRkXSAlczogJXNcbiIs
IGluc3RydWN0aW9uT2Zmc2V0LCAicHV0X2J5X2lkX3JlcGxhY2UiLCBwb2ludGVyVG9Tb3VyY2VT
dHJpbmcoc3R1YkluZm8udS5wdXRCeUlkUmVwbGFjZS5iYXNlT2JqZWN0U3RydWN0dXJlKS5VVEY4
U3RyaW5nKCkuY19zdHIoKSk7CiAgICAgICAgIHJldHVybjsKLSAgICBjYXNlIG9wX2dldF9ieV9p
ZDoKKyAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWQ6CiAgICAgICAgIHByaW50ZigiICBbJTRkXSAl
c1xuIiwgaW5zdHJ1Y3Rpb25PZmZzZXQsICJnZXRfYnlfaWQiKTsKICAgICAgICAgcmV0dXJuOwot
ICAgIGNhc2Ugb3BfcHV0X2J5X2lkOgorICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZDoKICAgICAg
ICAgcHJpbnRmKCIgIFslNGRdICVzXG4iLCBpbnN0cnVjdGlvbk9mZnNldCwgInB1dF9ieV9pZCIp
OwogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBvcF9nZXRfYnlfaWRfZ2VuZXJpYzoKKyAgICBj
YXNlIGFjY2Vzc19nZXRfYnlfaWRfZ2VuZXJpYzoKICAgICAgICAgcHJpbnRmKCIgIFslNGRdICVz
XG4iLCBpbnN0cnVjdGlvbk9mZnNldCwgIm9wX2dldF9ieV9pZF9nZW5lcmljIik7CiAgICAgICAg
IHJldHVybjsKLSAgICBjYXNlIG9wX3B1dF9ieV9pZF9nZW5lcmljOgorICAgIGNhc2UgYWNjZXNz
X3B1dF9ieV9pZF9nZW5lcmljOgogICAgICAgICBwcmludGYoIiAgWyU0ZF0gJXNcbiIsIGluc3Ry
dWN0aW9uT2Zmc2V0LCAib3BfcHV0X2J5X2lkX2dlbmVyaWMiKTsKICAgICAgICAgcmV0dXJuOwot
ICAgIGNhc2Ugb3BfZ2V0X2FycmF5X2xlbmd0aDoKKyAgICBjYXNlIGFjY2Vzc19nZXRfYXJyYXlf
bGVuZ3RoOgogICAgICAgICBwcmludGYoIiAgWyU0ZF0gJXNcbiIsIGluc3RydWN0aW9uT2Zmc2V0
LCAib3BfZ2V0X2FycmF5X2xlbmd0aCIpOwogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBvcF9n
ZXRfc3RyaW5nX2xlbmd0aDoKKyAgICBjYXNlIGFjY2Vzc19nZXRfc3RyaW5nX2xlbmd0aDoKICAg
ICAgICAgcHJpbnRmKCIgIFslNGRdICVzXG4iLCBpbnN0cnVjdGlvbk9mZnNldCwgIm9wX2dldF9z
dHJpbmdfbGVuZ3RoIik7CiAgICAgICAgIHJldHVybjsKICAgICBkZWZhdWx0OgpJbmRleDogSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDQ2MzExKQorKysgSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcg
QEAKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIkp1bXBUYWJsZS5oIgog
I2luY2x1ZGUgIk5vZGVzLmgiCisjaW5jbHVkZSAiUHRyQW5kRmxhZ3MuaCIKICNpbmNsdWRlICJS
ZWdFeHAuaCIKICNpbmNsdWRlICJVU3RyaW5nLmgiCiAjaW5jbHVkZSA8d3RmL0Zhc3RBbGxvY0Jh
c2UuaD4KQEAgLTU0LDYgKzU1LDEwIEBAIHN0YXRpYyBjb25zdCBpbnQgRmlyc3RDb25zdGFudFJl
Z2lzdGVySW4KIAogbmFtZXNwYWNlIEpTQyB7CiAKKyAgICBlbnVtIEhhc1NlZW5TaG91bGRSZXBh
dGNoIHsKKyAgICAgICAgaGFzU2VlblNob3VsZFJlcGF0Y2gKKyAgICB9OworCiAgICAgY2xhc3Mg
RXhlY1N0YXRlOwogCiAgICAgZW51bSBDb2RlVHlwZSB7IEdsb2JhbENvZGUsIEV2YWxDb2RlLCBG
dW5jdGlvbkNvZGUsIE5hdGl2ZUNvZGUgfTsKQEAgLTEwNSwxMiArMTEwLDIyIEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbCBjYWxsUmV0dXJuTG9jYXRpb247
CiAgICAgICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciBob3RQYXRoQmVnaW47CiAgICAgICAg
IENvZGVMb2NhdGlvbk5lYXJDYWxsIGhvdFBhdGhPdGhlcjsKLSAgICAgICAgQ29kZUJsb2NrKiBv
d25lckNvZGVCbG9jazsKKyAgICAgICAgUHRyQW5kRmxhZ3M8Q29kZUJsb2NrLCBIYXNTZWVuU2hv
dWxkUmVwYXRjaD4gb3duZXJDb2RlQmxvY2s7CiAgICAgICAgIENvZGVCbG9jayogY2FsbGVlOwog
ICAgICAgICB1bnNpZ25lZCBwb3NpdGlvbjsKICAgICAgICAgCiAgICAgICAgIHZvaWQgc2V0VW5s
aW5rZWQoKSB7IGNhbGxlZSA9IDA7IH0KICAgICAgICAgYm9vbCBpc0xpbmtlZCgpIHsgcmV0dXJu
IGNhbGxlZTsgfQorCisgICAgICAgIGJvb2wgc2Vlbk9uY2UoKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gb3duZXJDb2RlQmxvY2suaXNGbGFnU2V0KGhhc1NlZW5TaG91bGRSZXBhdGNo
KTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgc2V0U2VlbigpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG93bmVyQ29kZUJsb2NrLnNldEZsYWcoaGFzU2VlblNob3VsZFJlcGF0Y2gpOworICAg
ICAgICB9CiAgICAgfTsKIAogICAgIHN0cnVjdCBNZXRob2RDYWxsTGlua0luZm8gewpAQCAtMTIw
LDEwICsxMzUsMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgfQogCisg
ICAgICAgIGJvb2wgc2Vlbk9uY2UoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gY2Fj
aGVkUHJvdG90eXBlU3RydWN0dXJlLmlzRmxhZ1NldChoYXNTZWVuU2hvdWxkUmVwYXRjaCk7Cisg
ICAgICAgIH0KKworICAgICAgICB2b2lkIHNldFNlZW4oKQorICAgICAgICB7CisgICAgICAgICAg
ICBjYWNoZWRQcm90b3R5cGVTdHJ1Y3R1cmUuc2V0RmxhZyhoYXNTZWVuU2hvdWxkUmVwYXRjaCk7
CisgICAgICAgIH0KKwogICAgICAgICBDb2RlTG9jYXRpb25DYWxsIGNhbGxSZXR1cm5Mb2NhdGlv
bjsKICAgICAgICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyIHN0cnVjdHVyZUxhYmVsOwogICAg
ICAgICBTdHJ1Y3R1cmUqIGNhY2hlZFN0cnVjdHVyZTsKLSAgICAgICAgU3RydWN0dXJlKiBjYWNo
ZWRQcm90b3R5cGVTdHJ1Y3R1cmU7CisgICAgICAgIFB0ckFuZEZsYWdzPFN0cnVjdHVyZSwgSGFz
U2VlblNob3VsZFJlcGF0Y2g+IGNhY2hlZFByb3RvdHlwZVN0cnVjdHVyZTsKICAgICB9OwogCiAg
ICAgc3RydWN0IEZ1bmN0aW9uUmVnaXN0ZXJJbmZvIHsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAJKHJldmlzaW9uIDQ2MzExKQorKysgSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMSw0NCArMzEsNDQgQEAgbmFtZXNwYWNlIEpTQyB7CiAjaWYgRU5BQkxFKEpJVCkKIHZv
aWQgU3RydWN0dXJlU3R1YkluZm86OmRlcmVmKCkKIHsKLSAgICBzd2l0Y2ggKG9wY29kZUlEKSB7
Ci0gICAgY2FzZSBvcF9nZXRfYnlfaWRfc2VsZjoKKyAgICBzd2l0Y2ggKGFjY2Vzc1R5cGUpIHsK
KyAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfc2VsZjoKICAgICAgICAgdS5nZXRCeUlkU2VsZi5i
YXNlT2JqZWN0U3RydWN0dXJlLT5kZXJlZigpOwogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBv
cF9nZXRfYnlfaWRfcHJvdG86CisgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3Byb3RvOgogICAg
ICAgICB1LmdldEJ5SWRQcm90by5iYXNlT2JqZWN0U3RydWN0dXJlLT5kZXJlZigpOwogICAgICAg
ICB1LmdldEJ5SWRQcm90by5wcm90b3R5cGVTdHJ1Y3R1cmUtPmRlcmVmKCk7CiAgICAgICAgIHJl
dHVybjsKLSAgICBjYXNlIG9wX2dldF9ieV9pZF9jaGFpbjoKKyAgICBjYXNlIGFjY2Vzc19nZXRf
YnlfaWRfY2hhaW46CiAgICAgICAgIHUuZ2V0QnlJZENoYWluLmJhc2VPYmplY3RTdHJ1Y3R1cmUt
PmRlcmVmKCk7CiAgICAgICAgIHUuZ2V0QnlJZENoYWluLmNoYWluLT5kZXJlZigpOwogICAgICAg
ICByZXR1cm47Ci0gICAgY2FzZSBvcF9nZXRfYnlfaWRfc2VsZl9saXN0OiB7CisgICAgY2FzZSBh
Y2Nlc3NfZ2V0X2J5X2lkX3NlbGZfbGlzdDogewogICAgICAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0
cnVjdHVyZUxpc3QqIHBvbHltb3JwaGljU3RydWN0dXJlcyA9IHUuZ2V0QnlJZFNlbGZMaXN0LnN0
cnVjdHVyZUxpc3Q7CiAgICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlcy0+ZGVyZWZTdHJ1Y3R1
cmVzKHUuZ2V0QnlJZFNlbGZMaXN0Lmxpc3RTaXplKTsKICAgICAgICAgZGVsZXRlIHBvbHltb3Jw
aGljU3RydWN0dXJlczsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBjYXNlIG9wX2dldF9i
eV9pZF9wcm90b19saXN0OiB7CisgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3Byb3RvX2xpc3Q6
IHsKICAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwb2x5bW9ycGhpY1N0
cnVjdHVyZXMgPSB1LmdldEJ5SWRQcm90b0xpc3Quc3RydWN0dXJlTGlzdDsKICAgICAgICAgcG9s
eW1vcnBoaWNTdHJ1Y3R1cmVzLT5kZXJlZlN0cnVjdHVyZXModS5nZXRCeUlkUHJvdG9MaXN0Lmxp
c3RTaXplKTsKICAgICAgICAgZGVsZXRlIHBvbHltb3JwaGljU3RydWN0dXJlczsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KLSAgICBjYXNlIG9wX3B1dF9ieV9pZF90cmFuc2l0aW9uOgorICAgIGNh
c2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uOgogICAgICAgICB1LnB1dEJ5SWRUcmFuc2l0
aW9uLnByZXZpb3VzU3RydWN0dXJlLT5kZXJlZigpOwogICAgICAgICB1LnB1dEJ5SWRUcmFuc2l0
aW9uLnN0cnVjdHVyZS0+ZGVyZWYoKTsKICAgICAgICAgdS5wdXRCeUlkVHJhbnNpdGlvbi5jaGFp
bi0+ZGVyZWYoKTsKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3JlcGxh
Y2U6CisgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3JlcGxhY2U6CiAgICAgICAgIHUucHV0QnlJ
ZFJlcGxhY2UuYmFzZU9iamVjdFN0cnVjdHVyZS0+ZGVyZWYoKTsKICAgICAgICAgcmV0dXJuOwot
ICAgIGNhc2Ugb3BfZ2V0X2J5X2lkOgotICAgIGNhc2Ugb3BfcHV0X2J5X2lkOgotICAgIGNhc2Ug
b3BfZ2V0X2J5X2lkX2dlbmVyaWM6Ci0gICAgY2FzZSBvcF9wdXRfYnlfaWRfZ2VuZXJpYzoKLSAg
ICBjYXNlIG9wX2dldF9hcnJheV9sZW5ndGg6Ci0gICAgY2FzZSBvcF9nZXRfc3RyaW5nX2xlbmd0
aDoKKyAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWQ6CisgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lk
OgorICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9nZW5lcmljOgorICAgIGNhc2UgYWNjZXNzX3B1
dF9ieV9pZF9nZW5lcmljOgorICAgIGNhc2UgYWNjZXNzX2dldF9hcnJheV9sZW5ndGg6CisgICAg
Y2FzZSBhY2Nlc3NfZ2V0X3N0cmluZ19sZW5ndGg6CiAgICAgICAgIC8vIFRoZXNlIGluc3RydWN0
aW9ucyBkb24ndCByZWYgdGhlaXIgU3RydWN0dXJlcy4KICAgICAgICAgcmV0dXJuOwogICAgIGRl
ZmF1bHQ6CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZv
LmgJKHJldmlzaW9uIDQ2MzExKQorKysgSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJl
U3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTcgKzMzLDMzIEBACiAjaW5jbHVkZSAi
T3Bjb2RlLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAKKwogbmFtZXNwYWNlIEpTQyB7CiAK
KyAgICBzdGF0aWMgY29uc3QgaW50IGFjY2Vzc19nZXRfYnlfaWRfc2VsZiA9IDA7CisgICAgc3Rh
dGljIGNvbnN0IGludCBhY2Nlc3NfZ2V0X2J5X2lkX3Byb3RvID0gMTsKKyAgICBzdGF0aWMgY29u
c3QgaW50IGFjY2Vzc19nZXRfYnlfaWRfY2hhaW4gPSAyOworICAgIHN0YXRpYyBjb25zdCBpbnQg
YWNjZXNzX2dldF9ieV9pZF9zZWxmX2xpc3QgPSAzOworICAgIHN0YXRpYyBjb25zdCBpbnQgYWNj
ZXNzX2dldF9ieV9pZF9wcm90b19saXN0ID0gNDsKKyAgICBzdGF0aWMgY29uc3QgaW50IGFjY2Vz
c19wdXRfYnlfaWRfdHJhbnNpdGlvbiA9IDU7CisgICAgc3RhdGljIGNvbnN0IGludCBhY2Nlc3Nf
cHV0X2J5X2lkX3JlcGxhY2UgPSA2OworICAgIHN0YXRpYyBjb25zdCBpbnQgYWNjZXNzX2dldF9i
eV9pZCA9IDc7CisgICAgc3RhdGljIGNvbnN0IGludCBhY2Nlc3NfcHV0X2J5X2lkID0gODsKKyAg
ICBzdGF0aWMgY29uc3QgaW50IGFjY2Vzc19nZXRfYnlfaWRfZ2VuZXJpYyA9IDk7CisgICAgc3Rh
dGljIGNvbnN0IGludCBhY2Nlc3NfcHV0X2J5X2lkX2dlbmVyaWMgPSAxMDsKKyAgICBzdGF0aWMg
Y29uc3QgaW50IGFjY2Vzc19nZXRfYXJyYXlfbGVuZ3RoID0gMTE7CisgICAgc3RhdGljIGNvbnN0
IGludCBhY2Nlc3NfZ2V0X3N0cmluZ19sZW5ndGggPSAxMjsKKwogICAgIHN0cnVjdCBTdHJ1Y3R1
cmVTdHViSW5mbyB7Ci0gICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvKE9wY29kZUlEIG9wY29kZUlE
KQotICAgICAgICAgICAgOiBvcGNvZGVJRChvcGNvZGVJRCkKKyAgICAgICAgU3RydWN0dXJlU3R1
YkluZm8oaW50IGFjY2Vzc1R5cGUpCisgICAgICAgICAgICA6IGFjY2Vzc1R5cGUoYWNjZXNzVHlw
ZSkKKyAgICAgICAgICAgICwgc2VlbihmYWxzZSkKICAgICAgICAgewogICAgICAgICB9CiAKICAg
ICAgICAgdm9pZCBpbml0R2V0QnlJZFNlbGYoU3RydWN0dXJlKiBiYXNlT2JqZWN0U3RydWN0dXJl
KQogICAgICAgICB7Ci0gICAgICAgICAgICBvcGNvZGVJRCA9IG9wX2dldF9ieV9pZF9zZWxmOwor
ICAgICAgICAgICAgYWNjZXNzVHlwZSA9IGFjY2Vzc19nZXRfYnlfaWRfc2VsZjsKIAogICAgICAg
ICAgICAgdS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlID0gYmFzZU9iamVjdFN0cnVj
dHVyZTsKICAgICAgICAgICAgIGJhc2VPYmplY3RTdHJ1Y3R1cmUtPnJlZigpOwpAQCAtNTEsNyAr
NjcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIGluaXRHZXRCeUlkUHJvdG8o
U3RydWN0dXJlKiBiYXNlT2JqZWN0U3RydWN0dXJlLCBTdHJ1Y3R1cmUqIHByb3RvdHlwZVN0cnVj
dHVyZSkKICAgICAgICAgewotICAgICAgICAgICAgb3Bjb2RlSUQgPSBvcF9nZXRfYnlfaWRfcHJv
dG87CisgICAgICAgICAgICBhY2Nlc3NUeXBlID0gYWNjZXNzX2dldF9ieV9pZF9wcm90bzsKIAog
ICAgICAgICAgICAgdS5nZXRCeUlkUHJvdG8uYmFzZU9iamVjdFN0cnVjdHVyZSA9IGJhc2VPYmpl
Y3RTdHJ1Y3R1cmU7CiAgICAgICAgICAgICBiYXNlT2JqZWN0U3RydWN0dXJlLT5yZWYoKTsKQEAg
LTYyLDcgKzc4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBpbml0R2V0QnlJ
ZENoYWluKFN0cnVjdHVyZSogYmFzZU9iamVjdFN0cnVjdHVyZSwgU3RydWN0dXJlQ2hhaW4qIGNo
YWluKQogICAgICAgICB7Ci0gICAgICAgICAgICBvcGNvZGVJRCA9IG9wX2dldF9ieV9pZF9jaGFp
bjsKKyAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBhY2Nlc3NfZ2V0X2J5X2lkX2NoYWluOwogCiAg
ICAgICAgICAgICB1LmdldEJ5SWRDaGFpbi5iYXNlT2JqZWN0U3RydWN0dXJlID0gYmFzZU9iamVj
dFN0cnVjdHVyZTsKICAgICAgICAgICAgIGJhc2VPYmplY3RTdHJ1Y3R1cmUtPnJlZigpOwpAQCAt
NzMsNyArODksNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIGluaXRHZXRCeUlk
U2VsZkxpc3QoUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBzdHJ1Y3R1cmVMaXN0LCBp
bnQgbGlzdFNpemUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG9wY29kZUlEID0gb3BfZ2V0X2J5
X2lkX3NlbGZfbGlzdDsKKyAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBhY2Nlc3NfZ2V0X2J5X2lk
X3NlbGZfbGlzdDsKIAogICAgICAgICAgICAgdS5nZXRCeUlkUHJvdG9MaXN0LnN0cnVjdHVyZUxp
c3QgPSBzdHJ1Y3R1cmVMaXN0OwogICAgICAgICAgICAgdS5nZXRCeUlkUHJvdG9MaXN0Lmxpc3RT
aXplID0gbGlzdFNpemU7CkBAIC04MSw3ICs5Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAg
ICAgIHZvaWQgaW5pdEdldEJ5SWRQcm90b0xpc3QoUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVM
aXN0KiBzdHJ1Y3R1cmVMaXN0LCBpbnQgbGlzdFNpemUpCiAgICAgICAgIHsKLSAgICAgICAgICAg
IG9wY29kZUlEID0gb3BfZ2V0X2J5X2lkX3Byb3RvX2xpc3Q7CisgICAgICAgICAgICBhY2Nlc3NU
eXBlID0gYWNjZXNzX2dldF9ieV9pZF9wcm90b19saXN0OwogCiAgICAgICAgICAgICB1LmdldEJ5
SWRQcm90b0xpc3Quc3RydWN0dXJlTGlzdCA9IHN0cnVjdHVyZUxpc3Q7CiAgICAgICAgICAgICB1
LmdldEJ5SWRQcm90b0xpc3QubGlzdFNpemUgPSBsaXN0U2l6ZTsKQEAgLTkxLDcgKzEwNyw3IEBA
IG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgaW5pdFB1dEJ5SWRUcmFuc2l0aW9uKFN0
cnVjdHVyZSogcHJldmlvdXNTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJ1Y3R1
cmVDaGFpbiogY2hhaW4pCiAgICAgICAgIHsKLSAgICAgICAgICAgIG9wY29kZUlEID0gb3BfcHV0
X2J5X2lkX3RyYW5zaXRpb247CisgICAgICAgICAgICBhY2Nlc3NUeXBlID0gYWNjZXNzX3B1dF9i
eV9pZF90cmFuc2l0aW9uOwogCiAgICAgICAgICAgICB1LnB1dEJ5SWRUcmFuc2l0aW9uLnByZXZp
b3VzU3RydWN0dXJlID0gcHJldmlvdXNTdHJ1Y3R1cmU7CiAgICAgICAgICAgICBwcmV2aW91c1N0
cnVjdHVyZS0+cmVmKCk7CkBAIC0xMDUsNyArMTIxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAg
ICAgICAgdm9pZCBpbml0UHV0QnlJZFJlcGxhY2UoU3RydWN0dXJlKiBiYXNlT2JqZWN0U3RydWN0
dXJlKQogICAgICAgICB7Ci0gICAgICAgICAgICBvcGNvZGVJRCA9IG9wX3B1dF9ieV9pZF9yZXBs
YWNlOworICAgICAgICAgICAgYWNjZXNzVHlwZSA9IGFjY2Vzc19wdXRfYnlfaWRfcmVwbGFjZTsK
ICAgICAKICAgICAgICAgICAgIHUucHV0QnlJZFJlcGxhY2UuYmFzZU9iamVjdFN0cnVjdHVyZSA9
IGJhc2VPYmplY3RTdHJ1Y3R1cmU7CiAgICAgICAgICAgICBiYXNlT2JqZWN0U3RydWN0dXJlLT5y
ZWYoKTsKQEAgLTExMyw3ICsxMjksMTkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9p
ZCBkZXJlZigpOwogCi0gICAgICAgIE9wY29kZUlEIG9wY29kZUlEOworICAgICAgICBib29sIHNl
ZW5PbmNlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHNlZW47CisgICAgICAgIH0K
KworICAgICAgICB2b2lkIHNldFNlZW4oKQorICAgICAgICB7CisgICAgICAgICAgICBzZWVuID0g
dHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGludCBhY2Nlc3NUeXBlIDogMzE7CisgICAgICAg
IGludCBzZWVuIDogMTsKKwogICAgICAgICB1bmlvbiB7CiAgICAgICAgICAgICBzdHJ1Y3Qgewog
ICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogYmFzZU9iamVjdFN0cnVjdHVyZTsKSW5kZXg6IEph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAko
cmV2aXNpb24gNDYzMTEpCisrKyBKYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVH
ZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAwLDcgKzEyMDAsNyBAQCB2b2lkIEJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0TWV0aG9kQ2hlY2soCiBSZWdpc3RlcklEKiBCeXRlY29kZUdl
bmVyYXRvcjo6ZW1pdEdldEJ5SWQoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSkKIHsKICNpZiBFTkFCTEUoSklUKQotICAgIG1fY29k
ZUJsb2NrLT5hZGRTdHJ1Y3R1cmVTdHViSW5mbyhTdHJ1Y3R1cmVTdHViSW5mbyhvcF9nZXRfYnlf
aWQpKTsKKyAgICBtX2NvZGVCbG9jay0+YWRkU3RydWN0dXJlU3R1YkluZm8oU3RydWN0dXJlU3R1
YkluZm8oYWNjZXNzX2dldF9ieV9pZCkpOwogI2Vsc2UKICAgICBtX2NvZGVCbG9jay0+YWRkUHJv
cGVydHlBY2Nlc3NJbnN0cnVjdGlvbihpbnN0cnVjdGlvbnMoKS5zaXplKCkpOwogI2VuZGlmCkBA
IC0xMjE5LDcgKzEyMTksNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdl
dEJ5CiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFB1dEJ5SWQoUmVnaXN0ZXJJ
RCogYmFzZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHksIFJlZ2lzdGVySUQqIHZhbHVlKQog
ewogI2lmIEVOQUJMRShKSVQpCi0gICAgbV9jb2RlQmxvY2stPmFkZFN0cnVjdHVyZVN0dWJJbmZv
KFN0cnVjdHVyZVN0dWJJbmZvKG9wX3B1dF9ieV9pZCkpOworICAgIG1fY29kZUJsb2NrLT5hZGRT
dHJ1Y3R1cmVTdHViSW5mbyhTdHJ1Y3R1cmVTdHViSW5mbyhhY2Nlc3NfcHV0X2J5X2lkKSk7CiAj
ZWxzZQogICAgIG1fY29kZUJsb2NrLT5hZGRQcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uKGluc3Ry
dWN0aW9ucygpLnNpemUoKSk7CiAjZW5kaWYKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2ppdC9KSVQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiA0
NjMxMSkKKysrIEphdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
MDksNyArNTA5LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlKCkKICAgICBtX2NvZGVCbG9j
ay0+c2V0SklUQ29kZShwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKSk7CiB9CiAKLXZvaWQgSklU
Ojpwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyhSZWZQdHI8RXhlY3V0YWJsZVBv
b2w+KiBleGVjdXRhYmxlUG9vbCwgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBDb2RlUHRyKiBj
dGlBcnJheUxlbmd0aFRyYW1wb2xpbmUsIENvZGVQdHIqIGN0aVN0cmluZ0xlbmd0aFRyYW1wb2xp
bmUsIENvZGVQdHIqIGN0aVZpcnR1YWxDYWxsUHJlTGluaywgQ29kZVB0ciogY3RpVmlydHVhbENh
bGxMaW5rLCBDb2RlUHRyKiBjdGlWaXJ0dWFsQ2FsbCwgQ29kZVB0ciogY3RpTmF0aXZlQ2FsbFRo
dW5rKQordm9pZCBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKFJlZlB0
cjxFeGVjdXRhYmxlUG9vbD4qIGV4ZWN1dGFibGVQb29sLCBKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEsIENvZGVQdHIqIGN0aUFycmF5TGVuZ3RoVHJhbXBvbGluZSwgQ29kZVB0ciogY3RpU3RyaW5n
TGVuZ3RoVHJhbXBvbGluZSwgQ29kZVB0ciogY3RpVmlydHVhbENhbGxMaW5rLCBDb2RlUHRyKiBj
dGlWaXJ0dWFsQ2FsbCwgQ29kZVB0ciogY3RpTmF0aXZlQ2FsbFRodW5rKQogewogI2lmIEVOQUJM
RShKSVRfT1BUSU1JWkVfUFJPUEVSVFlfQUNDRVNTKQogICAgIC8vICgxKSBUaGUgZmlyc3QgZnVu
Y3Rpb24gcHJvdmlkZXMgZmFzdCBwcm9wZXJ0eSBhY2Nlc3MgZm9yIGFycmF5IGxlbmd0aApAQCAt
NTUyLDQ3ICs1NTIsNiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBv
CiAgICAgLy8gKDMpIFRyYW1wb2xpbmVzIGZvciB0aGUgc2xvdyBjYXNlcyBvZiBvcF9jYWxsIC8g
b3BfY2FsbF9ldmFsIC8gb3BfY29uc3RydWN0LgogICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihD
b2RlVHlwZSkgPT0gNCwgQ29kZVR5cGVFbnVtTXVzdEJlMzJCaXQpOwogCi0gICAgTGFiZWwgdmly
dHVhbENhbGxQcmVMaW5rQmVnaW4gPSBhbGlnbigpOwotCi0gICAgLy8gTG9hZCB0aGUgY2FsbGVl
IENvZGVCbG9jayogaW50byBlYXgKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIE9CSkVDVF9P
RkZTRVRPRihKU0Z1bmN0aW9uLCBtX2JvZHkpKSwgcmVnVDMpOwotICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEZ1bmN0aW9uQm9keU5vZGUsIG1fY29kZSkpLCByZWdU
MCk7Ci0gICAgSnVtcCBoYXNDb2RlQmxvY2sxID0gYnJhbmNoVGVzdFB0cihOb25aZXJvLCByZWdU
MCk7Ci0gICAgcHJldmVydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKHJlZ1QzKTsKLSAgICByZXN0
b3JlQXJndW1lbnRSZWZlcmVuY2UoKTsKLSAgICBDYWxsIGNhbGxKU0Z1bmN0aW9uMSA9IGNhbGwo
KTsKLSAgICBlbWl0R2V0SklUU3R1YkFyZygxLCByZWdUMik7Ci0gICAgZW1pdEdldEpJVFN0dWJB
cmcoMywgcmVnVDEpOwotICAgIHJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKHJlZ1Qz
KTsKLSAgICBoYXNDb2RlQmxvY2sxLmxpbmsodGhpcyk7Ci0KLSAgICBKdW1wIGlzTmF0aXZlRnVu
YzEgPSBicmFuY2gzMihFcXVhbCwgQWRkcmVzcyhyZWdUMCwgT0JKRUNUX09GRlNFVE9GKENvZGVC
bG9jaywgbV9jb2RlVHlwZSkpLCBJbW0zMihOYXRpdmVDb2RlKSk7Ci0KLSAgICAvLyBDaGVjayBh
cmdDb3VudCBtYXRjaGVzIGNhbGxlZSBhcml0eS4KLSAgICBKdW1wIGFyaXR5Q2hlY2tPa2F5MSA9
IGJyYW5jaDMyKEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2Nr
LCBtX251bVBhcmFtZXRlcnMpKSwgcmVnVDEpOwotICAgIHByZXZlcnZlUmV0dXJuQWRkcmVzc0Fm
dGVyQ2FsbChyZWdUMyk7Ci0gICAgZW1pdFB1dEpJVFN0dWJBcmcocmVnVDMsIDIpOwotICAgIGVt
aXRQdXRKSVRTdHViQXJnKHJlZ1QwLCA0KTsKLSAgICByZXN0b3JlQXJndW1lbnRSZWZlcmVuY2Uo
KTsKLSAgICBDYWxsIGNhbGxBcml0eUNoZWNrMSA9IGNhbGwoKTsKLSAgICBtb3ZlKHJlZ1QxLCBj
YWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgZW1pdEdldEpJVFN0dWJBcmcoMSwgcmVnVDIpOwotICAg
IGVtaXRHZXRKSVRTdHViQXJnKDMsIHJlZ1QxKTsKLSAgICByZXN0b3JlUmV0dXJuQWRkcmVzc0Jl
Zm9yZVJldHVybihyZWdUMyk7Ci0gICAgYXJpdHlDaGVja09rYXkxLmxpbmsodGhpcyk7Ci0gICAg
aXNOYXRpdmVGdW5jMS5saW5rKHRoaXMpOwotICAgIAotICAgIGNvbXBpbGVPcENhbGxJbml0aWFs
aXplQ2FsbEZyYW1lKCk7Ci0KLSAgICBwcmV2ZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwocmVn
VDMpOwotICAgIGVtaXRQdXRKSVRTdHViQXJnKHJlZ1QzLCAyKTsKLSAgICByZXN0b3JlQXJndW1l
bnRSZWZlcmVuY2UoKTsKLSAgICBDYWxsIGNhbGxEb250TGF6eUxpbmtDYWxsID0gY2FsbCgpOwot
ICAgIGVtaXRHZXRKSVRTdHViQXJnKDEsIHJlZ1QyKTsKLSAgICByZXN0b3JlUmV0dXJuQWRkcmVz
c0JlZm9yZVJldHVybihyZWdUMyk7Ci0KLSAgICBqdW1wKHJlZ1QwKTsKLQogICAgIExhYmVsIHZp
cnR1YWxDYWxsTGlua0JlZ2luID0gYWxpZ24oKTsKIAogICAgIC8vIExvYWQgdGhlIGNhbGxlZSBD
b2RlQmxvY2sqIGludG8gZWF4CkBAIC04NTcsMjYgKzgxNiwyMCBAQCB2b2lkIEpJVDo6cHJpdmF0
ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcih0aGlz
LCBtX2dsb2JhbERhdGEtPmV4ZWN1dGFibGVBbGxvY2F0b3IucG9vbEZvclNpemUobV9hc3NlbWJs
ZXIuc2l6ZSgpKSk7CiAKICNpZiBFTkFCTEUoSklUX09QVElNSVpFX1BST1BFUlRZX0FDQ0VTUykK
LSAgICBwYXRjaEJ1ZmZlci5saW5rKGFycmF5X2ZhaWx1cmVDYXNlczFDYWxsLCBGdW5jdGlvblB0
cihKSVRTdHViczo6Y3RpX29wX2dldF9ieV9pZF9hcnJheV9mYWlsKSk7CiAgICAgcGF0Y2hCdWZm
ZXIubGluayhhcnJheV9mYWlsdXJlQ2FzZXMyQ2FsbCwgRnVuY3Rpb25QdHIoSklUU3R1YnM6OmN0
aV9vcF9nZXRfYnlfaWRfYXJyYXlfZmFpbCkpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoYXJyYXlf
ZmFpbHVyZUNhc2VzM0NhbGwsIEZ1bmN0aW9uUHRyKEpJVFN0dWJzOjpjdGlfb3BfZ2V0X2J5X2lk
X2FycmF5X2ZhaWwpKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHN0cmluZ19mYWlsdXJlQ2FzZXMx
Q2FsbCwgRnVuY3Rpb25QdHIoSklUU3R1YnM6OmN0aV9vcF9nZXRfYnlfaWRfc3RyaW5nX2ZhaWwp
KTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKHN0cmluZ19mYWlsdXJlQ2FzZXMyQ2FsbCwgRnVuY3Rp
b25QdHIoSklUU3R1YnM6OmN0aV9vcF9nZXRfYnlfaWRfc3RyaW5nX2ZhaWwpKTsKICAgICBwYXRj
aEJ1ZmZlci5saW5rKHN0cmluZ19mYWlsdXJlQ2FzZXMzQ2FsbCwgRnVuY3Rpb25QdHIoSklUU3R1
YnM6OmN0aV9vcF9nZXRfYnlfaWRfc3RyaW5nX2ZhaWwpKTsKICNlbmRpZgotICAgIHBhdGNoQnVm
ZmVyLmxpbmsoY2FsbEFyaXR5Q2hlY2sxLCBGdW5jdGlvblB0cihKSVRTdHViczo6Y3RpX29wX2Nh
bGxfYXJpdHlDaGVjaykpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbEFyaXR5Q2hlY2syLCBG
dW5jdGlvblB0cihKSVRTdHViczo6Y3RpX29wX2NhbGxfYXJpdHlDaGVjaykpOwogICAgIHBhdGNo
QnVmZmVyLmxpbmsoY2FsbEFyaXR5Q2hlY2szLCBGdW5jdGlvblB0cihKSVRTdHViczo6Y3RpX29w
X2NhbGxfYXJpdHlDaGVjaykpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbEpTRnVuY3Rpb24x
LCBGdW5jdGlvblB0cihKSVRTdHViczo6Y3RpX29wX2NhbGxfSlNGdW5jdGlvbikpOwogICAgIHBh
dGNoQnVmZmVyLmxpbmsoY2FsbEpTRnVuY3Rpb24yLCBGdW5jdGlvblB0cihKSVRTdHViczo6Y3Rp
X29wX2NhbGxfSlNGdW5jdGlvbikpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbEpTRnVuY3Rp
b24zLCBGdW5jdGlvblB0cihKSVRTdHViczo6Y3RpX29wX2NhbGxfSlNGdW5jdGlvbikpOwotICAg
IHBhdGNoQnVmZmVyLmxpbmsoY2FsbERvbnRMYXp5TGlua0NhbGwsIEZ1bmN0aW9uUHRyKEpJVFN0
dWJzOjpjdGlfdm1fZG9udExhenlMaW5rQ2FsbCkpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoY2Fs
bExhenlMaW5rQ2FsbCwgRnVuY3Rpb25QdHIoSklUU3R1YnM6OmN0aV92bV9sYXp5TGlua0NhbGwp
KTsKIAogICAgIENvZGVSZWYgZmluYWxDb2RlID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7
CiAgICAgKmV4ZWN1dGFibGVQb29sID0gZmluYWxDb2RlLm1fZXhlY3V0YWJsZVBvb2w7CiAKLSAg
ICAqY3RpVmlydHVhbENhbGxQcmVMaW5rID0gdHJhbXBvbGluZUF0KGZpbmFsQ29kZSwgdmlydHVh
bENhbGxQcmVMaW5rQmVnaW4pOwogICAgICpjdGlWaXJ0dWFsQ2FsbExpbmsgPSB0cmFtcG9saW5l
QXQoZmluYWxDb2RlLCB2aXJ0dWFsQ2FsbExpbmtCZWdpbik7CiAgICAgKmN0aVZpcnR1YWxDYWxs
ID0gdHJhbXBvbGluZUF0KGZpbmFsQ29kZSwgdmlydHVhbENhbGxCZWdpbik7CiAgICAgKmN0aU5h
dGl2ZUNhbGxUaHVuayA9IHRyYW1wb2xpbmVBdChmaW5hbENvZGUsIG5hdGl2ZUNhbGxUaHVuayk7
CkBAIC05MDgsNyArODYxLDcgQEAgdm9pZCBKSVQ6OnVubGlua0NhbGwoQ2FsbExpbmtJbmZvKiBj
YWxsTAogICAgIC8vIFdoZW4gdGhlIEpTRnVuY3Rpb24gaXMgZGVsZXRlZCB0aGUgcG9pbnRlciBl
bWJlZGRlZCBpbiB0aGUgaW5zdHJ1Y3Rpb24gc3RyZWFtIHdpbGwgbm8gbG9uZ2VyIGJlIHZhbGlk
CiAgICAgLy8gKGFuZCwgaWYgYSBuZXcgSlNGdW5jdGlvbiBoYXBwZW5lZCB0byBiZSBjb25zdHJ1
Y3RlZCBhdCB0aGUgc2FtZSBsb2NhdGlvbiwgd2UgY291bGQgZ2V0IGEgZmFsc2UgcG9zaXRpdmUK
ICAgICAvLyBtYXRjaCkuICBSZXNldCB0aGUgY2hlY2sgc28gaXQgbm8gbG9uZ2VyIG1hdGNoZXMu
Ci0gICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNhbGxMaW5rSW5mby0+b3duZXJDb2Rl
QmxvY2spOworICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjYWxsTGlua0luZm8tPm93
bmVyQ29kZUJsb2NrLmdldCgpKTsKICAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goY2FsbExpbmtJ
bmZvLT5ob3RQYXRoQmVnaW4sIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKTsKIH0KIApJbmRl
eDogSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuaAkocmV2aXNpb24gNDYzMTEpCisrKyBKYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM3MywxMCArMzczLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICAgICAgaml0LnByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5zaXRpb24oc3R1YkluZm8sIG9s
ZFN0cnVjdHVyZSwgbmV3U3RydWN0dXJlLCBjYWNoZWRPZmZzZXQsIGNoYWluLCByZXR1cm5BZGRy
ZXNzKTsKICAgICAgICAgfQogCi0gICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVDVElNYWNoaW5l
VHJhbXBvbGluZXMoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBSZWZQdHI8RXhlY3V0YWJsZVBv
b2w+KiBleGVjdXRhYmxlUG9vbCwgQ29kZVB0ciogY3RpQXJyYXlMZW5ndGhUcmFtcG9saW5lLCBD
b2RlUHRyKiBjdGlTdHJpbmdMZW5ndGhUcmFtcG9saW5lLCBDb2RlUHRyKiBjdGlWaXJ0dWFsQ2Fs
bFByZUxpbmssIENvZGVQdHIqIGN0aVZpcnR1YWxDYWxsTGluaywgQ29kZVB0ciogY3RpVmlydHVh
bENhbGwsIENvZGVQdHIqIGN0aU5hdGl2ZUNhbGxUaHVuaykKKyAgICAgICAgc3RhdGljIHZvaWQg
Y29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFJl
ZlB0cjxFeGVjdXRhYmxlUG9vbD4qIGV4ZWN1dGFibGVQb29sLCBDb2RlUHRyKiBjdGlBcnJheUxl
bmd0aFRyYW1wb2xpbmUsIENvZGVQdHIqIGN0aVN0cmluZ0xlbmd0aFRyYW1wb2xpbmUsIENvZGVQ
dHIqIGN0aVZpcnR1YWxDYWxsTGluaywgQ29kZVB0ciogY3RpVmlydHVhbENhbGwsIENvZGVQdHIq
IGN0aU5hdGl2ZUNhbGxUaHVuaykKICAgICAgICAgewogICAgICAgICAgICAgSklUIGppdChnbG9i
YWxEYXRhKTsKLSAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG9s
aW5lcyhleGVjdXRhYmxlUG9vbCwgZ2xvYmFsRGF0YSwgY3RpQXJyYXlMZW5ndGhUcmFtcG9saW5l
LCBjdGlTdHJpbmdMZW5ndGhUcmFtcG9saW5lLCBjdGlWaXJ0dWFsQ2FsbFByZUxpbmssIGN0aVZp
cnR1YWxDYWxsTGluaywgY3RpVmlydHVhbENhbGwsIGN0aU5hdGl2ZUNhbGxUaHVuayk7CisgICAg
ICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvbGluZXMoZXhlY3V0YWJs
ZVBvb2wsIGdsb2JhbERhdGEsIGN0aUFycmF5TGVuZ3RoVHJhbXBvbGluZSwgY3RpU3RyaW5nTGVu
Z3RoVHJhbXBvbGluZSwgY3RpVmlydHVhbENhbGxMaW5rLCBjdGlWaXJ0dWFsQ2FsbCwgY3RpTmF0
aXZlQ2FsbFRodW5rKTsKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyB2b2lkIHBhdGNoR2V0
QnlJZFNlbGYoQ29kZUJsb2NrKiBjb2RlYmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiwgU3RydWN0
dXJlKiwgc2l6ZV90IGNhY2hlZE9mZnNldCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNz
KTsKQEAgLTQxNyw3ICs0MTcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBwcml2
YXRlQ29tcGlsZUdldEJ5SWRDaGFpbihTdHJ1Y3R1cmVTdHViSW5mbyosIFN0cnVjdHVyZSosIFN0
cnVjdHVyZUNoYWluKiwgc2l6ZV90IGNvdW50LCBzaXplX3QgY2FjaGVkT2Zmc2V0LCBSZXR1cm5B
ZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIENhbGxGcmFtZSogY2FsbEZyYW1lKTsKICAgICAgICAg
dm9pZCBwcml2YXRlQ29tcGlsZVB1dEJ5SWRUcmFuc2l0aW9uKFN0cnVjdHVyZVN0dWJJbmZvKiwg
U3RydWN0dXJlKiwgU3RydWN0dXJlKiwgc2l6ZV90IGNhY2hlZE9mZnNldCwgU3RydWN0dXJlQ2hh
aW4qLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpOwogCi0gICAgICAgIHZvaWQgcHJp
dmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvbGluZXMoUmVmUHRyPEV4ZWN1dGFibGVQb29sPiog
ZXhlY3V0YWJsZVBvb2wsIEpTR2xvYmFsRGF0YSogZGF0YSwgQ29kZVB0ciogY3RpQXJyYXlMZW5n
dGhUcmFtcG9saW5lLCBDb2RlUHRyKiBjdGlTdHJpbmdMZW5ndGhUcmFtcG9saW5lLCBDb2RlUHRy
KiBjdGlWaXJ0dWFsQ2FsbFByZUxpbmssIENvZGVQdHIqIGN0aVZpcnR1YWxDYWxsTGluaywgQ29k
ZVB0ciogY3RpVmlydHVhbENhbGwsIENvZGVQdHIqIGN0aU5hdGl2ZUNhbGxUaHVuayk7CisgICAg
ICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvbGluZXMoUmVmUHRyPEV4ZWN1
dGFibGVQb29sPiogZXhlY3V0YWJsZVBvb2wsIEpTR2xvYmFsRGF0YSogZGF0YSwgQ29kZVB0ciog
Y3RpQXJyYXlMZW5ndGhUcmFtcG9saW5lLCBDb2RlUHRyKiBjdGlTdHJpbmdMZW5ndGhUcmFtcG9s
aW5lLCBDb2RlUHRyKiBjdGlWaXJ0dWFsQ2FsbExpbmssIENvZGVQdHIqIGN0aVZpcnR1YWxDYWxs
LCBDb2RlUHRyKiBjdGlOYXRpdmVDYWxsVGh1bmspOwogICAgICAgICB2b2lkIHByaXZhdGVDb21w
aWxlUGF0Y2hHZXRBcnJheUxlbmd0aChSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpOwog
CiAgICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoSnVtcCk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9q
aXQvSklUQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwu
Y3BwCShyZXZpc2lvbiA0NjMxMSkKKysrIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjkwLDcgKzI5MCw3IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxs
U2xvd0Nhc2UoSW5zdHJ1Y3QKICAgICBhZGRQdHIoSW1tMzIocmVnaXN0ZXJPZmZzZXQgKiBzdGF0
aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSwgY2FsbEZyYW1lUmVnaXN0ZXIpOwogICAg
IG1vdmUoSW1tMzIoYXJnQ291bnQpLCByZWdUMSk7CiAKLSAgICBtX2NhbGxTdHJ1Y3R1cmVTdHVi
Q29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsUmV0dXJuTG9jYXRpb24gPSBl
bWl0TmFrZWRDYWxsKG1fZ2xvYmFsRGF0YS0+aml0U3R1YnMuY3RpVmlydHVhbENhbGxQcmVMaW5r
KCkpOworICAgIG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZv
SW5kZXhdLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGVtaXROYWtlZENhbGwobV9nbG9iYWxEYXRhLT5q
aXRTdHVicy5jdGlWaXJ0dWFsQ2FsbExpbmsoKSk7CiAKICAgICAvLyBQdXQgdGhlIHJldHVybiB2
YWx1ZSBpbiBkc3QuCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwpJbmRleDogSmF2
YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS9qaXQvSklUU3R1YnMuY3BwCShyZXZpc2lvbiA0NjMxMSkKKysrIEphdmFTY3JpcHRDb3JlL2pp
dC9KSVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyNiw3ICszMjYsNyBAQCBleHRlcm4g
IkMiIHsKIAogSklUVGh1bmtzOjpKSVRUaHVua3MoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQog
ewotICAgIEpJVDo6Y29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyhnbG9iYWxEYXRhLCAmbV9l
eGVjdXRhYmxlUG9vbCwgJm1fY3RpQXJyYXlMZW5ndGhUcmFtcG9saW5lLCAmbV9jdGlTdHJpbmdM
ZW5ndGhUcmFtcG9saW5lLCAmbV9jdGlWaXJ0dWFsQ2FsbFByZUxpbmssICZtX2N0aVZpcnR1YWxD
YWxsTGluaywgJm1fY3RpVmlydHVhbENhbGwsICZtX2N0aU5hdGl2ZUNhbGxUaHVuayk7CisgICAg
SklUOjpjb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKGdsb2JhbERhdGEsICZtX2V4ZWN1dGFi
bGVQb29sLCAmbV9jdGlBcnJheUxlbmd0aFRyYW1wb2xpbmUsICZtX2N0aVN0cmluZ0xlbmd0aFRy
YW1wb2xpbmUsICZtX2N0aVZpcnR1YWxDYWxsTGluaywgJm1fY3RpVmlydHVhbENhbGwsICZtX2N0
aU5hdGl2ZUNhbGxUaHVuayk7CiAKICNpZiBQTEFURk9STV9BUk1fQVJDSCg3KQogICAgIC8vIFVu
Zm9ydHVuYXRlIHRoZSBhcm0gY29tcGlsZXIgZG9lcyBub3QgbGlrZSB0aGUgdXNlIG9mIG9mZnNl
dG9mIG9uIEpJVFN0YWNrRnJhbWUgKHNpbmNlIGl0IGNvbnRhaW5zIG5vbiBQT0QgdHlwZXMpLApA
QCAtMzQ5LDcgKzM0OSw3IEBAIEpJVFRodW5rczo6SklUVGh1bmtzKEpTR2xvYmFsRGF0YSogZ2xv
YmEKIAogI2lmIEVOQUJMRShKSVRfT1BUSU1JWkVfUFJPUEVSVFlfQUNDRVNTKQogCi1ORVZFUl9J
TkxJTkUgdm9pZCBKSVRUaHVua3M6OnRyeUNhY2hlUHV0QnlJRChDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywg
SlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKK05FVkVSX0lO
TElORSB2b2lkIEpJVFRodW5rczo6dHJ5Q2FjaGVQdXRCeUlEKENhbGxGcmFtZSogY2FsbEZyYW1l
LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBK
U1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVT
dHViSW5mbyogc3R1YkluZm8pCiB7CiAgICAgLy8gVGhlIGludGVycHJldGVyIGNoZWNrcyBmb3Ig
cmVjdXJzaW9uIGhlcmU7IEkgZG8gbm90IGJlbGlldmUgdGhpcyBjYW4gb2NjdXIgaW4gQ1RJLgog
CkBAIC0zNzYsOCArMzc2LDYgQEAgTkVWRVJfSU5MSU5FIHZvaWQgSklUVGh1bmtzOjp0cnlDYWNo
ZVB1dAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgU3RydWN0dXJlU3R1YkluZm8qIHN0
dWJJbmZvID0gJmNvZGVCbG9jay0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7Ci0KICAgICAv
LyBDYWNoZSBoaXQ6IFNwZWNpYWxpemUgaW5zdHJ1Y3Rpb24gYW5kIHJlZiBTdHJ1Y3R1cmVzLgog
CiAgICAgLy8gU3RydWN0dXJlIHRyYW5zaXRpb24sIGNhY2hlIHRyYW5zaXRpb24gaW5mbwpAQCAt
Mzk3LDcgKzM5NSw3IEBAIE5FVkVSX0lOTElORSB2b2lkIEpJVFRodW5rczo6dHJ5Q2FjaGVQdXQK
ICAgICBKSVQ6OnBhdGNoUHV0QnlJZFJlcGxhY2UoY29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0
dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpLCByZXR1cm5BZGRyZXNzKTsKIH0KIAotTkVWRVJfSU5M
SU5FIHZvaWQgSklUVGh1bmtzOjp0cnlDYWNoZUdldEJ5SUQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUs
IENvZGVCbG9jayogY29kZUJsb2NrLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpT
VmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFBy
b3BlcnR5U2xvdCYgc2xvdCkKK05FVkVSX0lOTElORSB2b2lkIEpJVFRodW5rczo6dHJ5Q2FjaGVH
ZXRCeUlEKENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgUmV0dXJu
QWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0
dWJJbmZvKiBzdHViSW5mbykKIHsKICAgICAvLyBGSVhNRTogV3JpdGUgYSB0ZXN0IHRoYXQgcHJv
dmVzIHdlIG5lZWQgdG8gY2hlY2sgZm9yIHJlY3Vyc2lvbiBoZXJlIGp1c3QKICAgICAvLyBsaWtl
IHRoZSBpbnRlcnByZXRlciBkb2VzLCB0aGVuIGFkZCBhIGNoZWNrIGZvciByZWN1cnNpb24uCkBA
IC00MzYsMTEgKzQzNCw2IEBAIE5FVkVSX0lOTElORSB2b2lkIEpJVFRodW5rczo6dHJ5Q2FjaGVH
ZXQKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIC8vIEluIHRoZSBpbnRlcnByZXRlciB0
aGUgbGFzdCBzdHJ1Y3R1cmUgaXMgdHJhcHBlZCBoZXJlOyBpbiBDVEkgd2UgdXNlIHRoZQotICAg
IC8vICpfc2Vjb25kIG1ldGhvZCB0byBhY2hpZXZlIGEgc2ltaWxhciAoYnV0IG5vdCBxdWl0ZSB0
aGUgc2FtZSkgZWZmZWN0LgotCi0gICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gJmNv
ZGVCbG9jay0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7Ci0KICAgICAvLyBDYWNoZSBoaXQ6
IFNwZWNpYWxpemUgaW5zdHJ1Y3Rpb24gYW5kIHJlZiBTdHJ1Y3R1cmVzLgogCiAgICAgaWYgKHNs
b3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUpIHsKQEAgLTQ2OSw3ICs0NjIsNyBAQCBORVZFUl9J
TkxJTkUgdm9pZCBKSVRUaHVua3M6OnRyeUNhY2hlR2V0CiAKICAgICBzaXplX3QgY291bnQgPSBj
b3VudFByb3RvdHlwZUNoYWluRW50cmllc0FuZENoZWNrRm9yUHJveGllcyhjYWxsRnJhbWUsIGJh
c2VWYWx1ZSwgc2xvdCk7CiAgICAgaWYgKCFjb3VudCkgewotICAgICAgICBzdHViSW5mby0+b3Bj
b2RlSUQgPSBvcF9nZXRfYnlfaWRfZ2VuZXJpYzsKKyAgICAgICAgc3R1YkluZm8tPmFjY2Vzc1R5
cGUgPSBhY2Nlc3NfZ2V0X2J5X2lkX2dlbmVyaWM7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
QEAgLTc3MywyMiArNzY2LDE2IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wX3B1dF9i
eV9pZCkKIAogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7
CiAgICAgSWRlbnRpZmllciYgaWRlbnQgPSBzdGFja0ZyYW1lLmFyZ3NbMV0uaWRlbnRpZmllcigp
OwotCiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Q7CiAgICAgc3RhY2tGcmFtZS5hcmdzWzBdLmpz
VmFsdWUoKS5wdXQoY2FsbEZyYW1lLCBpZGVudCwgc3RhY2tGcmFtZS5hcmdzWzJdLmpzVmFsdWUo
KSwgc2xvdCk7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBzdGFja0ZyYW1lLmNhbGxGcmFt
ZS0+Y29kZUJsb2NrKCk7CisgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gJmNvZGVC
bG9jay0+Z2V0U3R1YkluZm8oU1RVQl9SRVRVUk5fQUREUkVTUyk7CiAKLSAgICBjdGlQYXRjaENh
bGxCeVJldHVybkFkZHJlc3MoY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwgU1RVQl9SRVRVUk5fQURE
UkVTUywgRnVuY3Rpb25QdHIoY3RpX29wX3B1dF9ieV9pZF9zZWNvbmQpKTsKLQotICAgIENIRUNL
X0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7Ci19Ci0KLURFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQs
IG9wX3B1dF9ieV9pZF9zZWNvbmQpCi17Ci0gICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNr
RnJhbWUpOworICAgIGlmICghc3R1YkluZm8tPnNlZW5PbmNlKCkpCisgICAgICAgIHN0dWJJbmZv
LT5zZXRTZWVuKCk7CisgICAgZWxzZQorICAgICAgICBKSVRUaHVua3M6OnRyeUNhY2hlUHV0QnlJ
RChjYWxsRnJhbWUsIGNvZGVCbG9jaywgU1RVQl9SRVRVUk5fQUREUkVTUywgc3RhY2tGcmFtZS5h
cmdzWzBdLmpzVmFsdWUoKSwgc2xvdCwgc3R1YkluZm8pOwogCi0gICAgUHV0UHJvcGVydHlTbG90
IHNsb3Q7Ci0gICAgc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKS5wdXQoc3RhY2tGcmFtZS5j
YWxsRnJhbWUsIHN0YWNrRnJhbWUuYXJnc1sxXS5pZGVudGlmaWVyKCksIHN0YWNrRnJhbWUuYXJn
c1syXS5qc1ZhbHVlKCksIHNsb3QpOwotICAgIEpJVFRodW5rczo6dHJ5Q2FjaGVQdXRCeUlEKHN0
YWNrRnJhbWUuY2FsbEZyYW1lLCBzdGFja0ZyYW1lLmNhbGxGcmFtZS0+Y29kZUJsb2NrKCksIFNU
VUJfUkVUVVJOX0FERFJFU1MsIHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCksIHNsb3QpOwog
ICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7CiB9CiAKQEAgLTgyMCwxMTcgKzgwNyw4
OSBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfCiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShiYXNlVmFsdWUpOwogfQogCi1ERUZJTkVfU1RVQl9GVU5DVElPTihF
bmNvZGVkSlNWYWx1ZSwgb3BfZ2V0X2J5X2lkKQotewotICAgIFNUVUJfSU5JVF9TVEFDS19GUkFN
RShzdGFja0ZyYW1lKTsKLQotICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5j
YWxsRnJhbWU7Ci0gICAgSWRlbnRpZmllciYgaWRlbnQgPSBzdGFja0ZyYW1lLmFyZ3NbMV0uaWRl
bnRpZmllcigpOwotCi0gICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBzdGFja0ZyYW1lLmFyZ3NbMF0u
anNWYWx1ZSgpOwotICAgIFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSk7Ci0gICAgSlNWYWx1
ZSByZXN1bHQgPSBiYXNlVmFsdWUuZ2V0KGNhbGxGcmFtZSwgaWRlbnQsIHNsb3QpOwotCi0gICAg
Y3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksIFNUVUJf
UkVUVVJOX0FERFJFU1MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfaWRfc2Vjb25kKSk7Ci0K
LSAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgpOwotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUocmVzdWx0KTsKLX0KLQogREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUs
IG9wX2dldF9ieV9pZF9tZXRob2RfY2hlY2spCiB7CiAgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1F
KHN0YWNrRnJhbWUpOwogCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNh
bGxGcmFtZTsKICAgICBJZGVudGlmaWVyJiBpZGVudCA9IHN0YWNrRnJhbWUuYXJnc1sxXS5pZGVu
dGlmaWVyKCk7Ci0KLSAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IHN0YWNrRnJhbWUuYXJnc1swXS5q
c1ZhbHVlKCk7Ci0gICAgUHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlKTsKLSAgICBKU1ZhbHVl
IHJlc3VsdCA9IGJhc2VWYWx1ZS5nZXQoY2FsbEZyYW1lLCBpZGVudCwgc2xvdCk7Ci0KLSAgICBj
dGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwgU1RVQl9S
RVRVUk5fQUREUkVTUywgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV9pZF9tZXRob2RfY2hlY2tf
c2Vjb25kKSk7Ci0KLSAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgpOwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKLX0KLQotREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5j
b2RlZEpTVmFsdWUsIG9wX2dldF9ieV9pZF9tZXRob2RfY2hlY2tfc2Vjb25kKQotewotICAgIFNU
VUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKLQotICAgIENhbGxGcmFtZSogY2FsbEZy
YW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7Ci0gICAgSWRlbnRpZmllciYgaWRlbnQgPSBzdGFj
a0ZyYW1lLmFyZ3NbMV0uaWRlbnRpZmllcigpOwotCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBz
dGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgpOwogICAgIFByb3BlcnR5U2xvdCBzbG90KGJhc2VW
YWx1ZSk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBiYXNlVmFsdWUuZ2V0KGNhbGxGcmFtZSwgaWRl
bnQsIHNsb3QpOwotCiAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOworICAgIE1ldGhvZENhbGxM
aW5rSW5mbyYgbWV0aG9kQ2FsbExpbmtJbmZvID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+Z2V0
TWV0aG9kQ2FsbExpbmtJbmZvKFNUVUJfUkVUVVJOX0FERFJFU1MpOwogCi0gICAgLy8gSWYgd2Ug
c3VjY2Vzc2Z1bGx5IGdvdCBzb21ldGhpbmcsIHRoZW4gdGhlIGJhc2UgZnJvbSB3aGljaCBpdCBp
cyBiZWluZyBhY2Nlc3NlZCBtdXN0Ci0gICAgLy8gYmUgYW4gb2JqZWN0LiAgKEFzc2VydGlvbiB0
byBlbnN1cmUgYXNPYmplY3QoKSBjYWxsIGJlbG93IGlzIHNhZmUsIHdoaWNoIGNvbWVzIGFmdGVy
Ci0gICAgLy8gYW4gaXNDYWNoZWFibGUoKSBjaGNlY2suCi0gICAgQVNTRVJUKCFzbG90LmlzQ2Fj
aGVhYmxlKCkgfHwgc2xvdC5zbG90QmFzZSgpLmlzT2JqZWN0KCkpOwotCi0gICAgLy8gQ2hlY2sg
dGhhdDoKLSAgICAvLyAgICogV2UncmUgZGVhbGluZyB3aXRoIGEgSlNDZWxsLAotICAgIC8vICAg
KiB0aGUgcHJvcGVydHkgaXMgY2FjaGFibGUsCi0gICAgLy8gICAqIGl0J3Mgbm90IGEgZGljdGlv
bmFyeQotICAgIC8vICAgKiB0aGVyZSBpcyBhIGZ1bmN0aW9uIGNhY2hlZC4KLSAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZTsKLSAgICBKU0NlbGwqIHNwZWNpZmljOwotICAgIEpTT2JqZWN0KiBzbG90
QmFzZU9iamVjdDsKLSAgICBpZiAoYmFzZVZhbHVlLmlzQ2VsbCgpCi0gICAgICAgICYmIHNsb3Qu
aXNDYWNoZWFibGUoKQotICAgICAgICAmJiAhKHN0cnVjdHVyZSA9IGFzQ2VsbChiYXNlVmFsdWUp
LT5zdHJ1Y3R1cmUoKSktPmlzRGljdGlvbmFyeSgpCi0gICAgICAgICYmIChzbG90QmFzZU9iamVj
dCA9IGFzT2JqZWN0KHNsb3Quc2xvdEJhc2UoKSkpLT5nZXRQcm9wZXJ0eVNwZWNpZmljVmFsdWUo
Y2FsbEZyYW1lLCBpZGVudCwgc3BlY2lmaWMpCi0gICAgICAgICYmIHNwZWNpZmljCi0gICAgICAg
ICkgewotCi0gICAgICAgIEpTRnVuY3Rpb24qIGNhbGxlZSA9IChKU0Z1bmN0aW9uKilzcGVjaWZp
YzsKLQotICAgICAgICAvLyBTaW5jZSB3ZSdyZSBhY2Nlc3NpbmcgYSBwcm90b3R5cGUgaW4gYSBs
b29wLCBpdCdzIGEgZ29vZCBiZXQgdGhhdCBpdAotICAgICAgICAvLyBzaG91bGQgbm90IGJlIHRy
ZWF0ZWQgYXMgYSBkaWN0aW9uYXJ5LgotICAgICAgICBpZiAoc2xvdEJhc2VPYmplY3QtPnN0cnVj
dHVyZSgpLT5pc0RpY3Rpb25hcnkoKSkKLSAgICAgICAgICAgIHNsb3RCYXNlT2JqZWN0LT5zZXRT
dHJ1Y3R1cmUoU3RydWN0dXJlOjpmcm9tRGljdGlvbmFyeVRyYW5zaXRpb24oc2xvdEJhc2VPYmpl
Y3QtPnN0cnVjdHVyZSgpKSk7Ci0KLSAgICAgICAgLy8gVGhlIHJlc3VsdCBmZXRjaGVkIHNob3Vs
ZCBhbHdheXMgYmUgdGhlIGNhbGxlZSEKLSAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBKU1ZhbHVl
KGNhbGxlZSkpOwotICAgICAgICBNZXRob2RDYWxsTGlua0luZm8mIG1ldGhvZENhbGxMaW5rSW5m
byA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmdldE1ldGhvZENhbGxMaW5rSW5mbyhTVFVCX1JF
VFVSTl9BRERSRVNTKTsKKyAgICBpZiAoIW1ldGhvZENhbGxMaW5rSW5mby5zZWVuT25jZSgpKQor
ICAgICAgICBtZXRob2RDYWxsTGlua0luZm8uc2V0U2VlbigpOworICAgIGVsc2UgeworICAgICAg
ICAvLyBJZiB3ZSBzdWNjZXNzZnVsbHkgZ290IHNvbWV0aGluZywgdGhlbiB0aGUgYmFzZSBmcm9t
IHdoaWNoIGl0IGlzIGJlaW5nIGFjY2Vzc2VkIG11c3QKKyAgICAgICAgLy8gYmUgYW4gb2JqZWN0
LiAgKEFzc2VydGlvbiB0byBlbnN1cmUgYXNPYmplY3QoKSBjYWxsIGJlbG93IGlzIHNhZmUsIHdo
aWNoIGNvbWVzIGFmdGVyCisgICAgICAgIC8vIGFuIGlzQ2FjaGVhYmxlKCkgY2hjZWNrLgorICAg
ICAgICBBU1NFUlQoIXNsb3QuaXNDYWNoZWFibGUoKSB8fCBzbG90LnNsb3RCYXNlKCkuaXNPYmpl
Y3QoKSk7CisKKyAgICAgICAgLy8gQ2hlY2sgdGhhdDoKKyAgICAgICAgLy8gICAqIFdlJ3JlIGRl
YWxpbmcgd2l0aCBhIEpTQ2VsbCwKKyAgICAgICAgLy8gICAqIHRoZSBwcm9wZXJ0eSBpcyBjYWNo
YWJsZSwKKyAgICAgICAgLy8gICAqIGl0J3Mgbm90IGEgZGljdGlvbmFyeQorICAgICAgICAvLyAg
ICogdGhlcmUgaXMgYSBmdW5jdGlvbiBjYWNoZWQuCisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlOworICAgICAgICBKU0NlbGwqIHNwZWNpZmljOworICAgICAgICBKU09iamVjdCogc2xvdEJh
c2VPYmplY3Q7CisgICAgICAgIGlmIChiYXNlVmFsdWUuaXNDZWxsKCkKKyAgICAgICAgICAgICYm
IHNsb3QuaXNDYWNoZWFibGUoKQorICAgICAgICAgICAgJiYgIShzdHJ1Y3R1cmUgPSBhc0NlbGwo
YmFzZVZhbHVlKS0+c3RydWN0dXJlKCkpLT5pc0RpY3Rpb25hcnkoKQorICAgICAgICAgICAgJiYg
KHNsb3RCYXNlT2JqZWN0ID0gYXNPYmplY3Qoc2xvdC5zbG90QmFzZSgpKSktPmdldFByb3BlcnR5
U3BlY2lmaWNWYWx1ZShjYWxsRnJhbWUsIGlkZW50LCBzcGVjaWZpYykKKyAgICAgICAgICAgICYm
IHNwZWNpZmljCisgICAgICAgICAgICApIHsKKworICAgICAgICAgICAgSlNGdW5jdGlvbiogY2Fs
bGVlID0gKEpTRnVuY3Rpb24qKXNwZWNpZmljOworCisgICAgICAgICAgICAvLyBTaW5jZSB3ZSdy
ZSBhY2Nlc3NpbmcgYSBwcm90b3R5cGUgaW4gYSBsb29wLCBpdCdzIGEgZ29vZCBiZXQgdGhhdCBp
dAorICAgICAgICAgICAgLy8gc2hvdWxkIG5vdCBiZSB0cmVhdGVkIGFzIGEgZGljdGlvbmFyeS4K
KyAgICAgICAgICAgIGlmIChzbG90QmFzZU9iamVjdC0+c3RydWN0dXJlKCktPmlzRGljdGlvbmFy
eSgpKQorICAgICAgICAgICAgICAgIHNsb3RCYXNlT2JqZWN0LT5zZXRTdHJ1Y3R1cmUoU3RydWN0
dXJlOjpmcm9tRGljdGlvbmFyeVRyYW5zaXRpb24oc2xvdEJhc2VPYmplY3QtPnN0cnVjdHVyZSgp
KSk7CisKKyAgICAgICAgICAgIC8vIFRoZSByZXN1bHQgZmV0Y2hlZCBzaG91bGQgYWx3YXlzIGJl
IHRoZSBjYWxsZWUhCisgICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEpTVmFsdWUoY2FsbGVl
KSk7CisKKyAgICAgICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGUgZnVuY3Rpb24gaXMgb24g
dGhlIG9iamVjdCdzIHByb3RvdHlwZS4gIFBhdGNoIHVwIHRoZSBjb2RlIHRvIG9wdGltaXplLgor
ICAgICAgICAgICAgaWYgKHNsb3Quc2xvdEJhc2UoKSA9PSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUZv
ckxvb2t1cChjYWxsRnJhbWUpKQorICAgICAgICAgICAgICAgIEpJVDo6cGF0Y2hNZXRob2RDYWxs
UHJvdG8oY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwgbWV0aG9kQ2FsbExpbmtJbmZvLCBjYWxsZWUs
IHN0cnVjdHVyZSwgc2xvdEJhc2VPYmplY3QpOworICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2Vl
IGlmIHRoZSBmdW5jdGlvbiBpcyBvbiB0aGUgb2JqZWN0IGl0c2VsZi4KKyAgICAgICAgICAgIC8v
IFNpbmNlIHdlIGdlbmVyYXRlIHRoZSBtZXRob2QtY2hlY2sgdG8gY2hlY2sgYm90aCB0aGUgc3Ry
dWN0dXJlIGFuZCBhIHByb3RvdHlwZS1zdHJ1Y3R1cmUgKHNpbmNlIHRoaXMKKyAgICAgICAgICAg
IC8vIGlzIHRoZSBjb21tb24gY2FzZSkgd2UgaGF2ZSBhIHByb2JsZW0gLSB3ZSBuZWVkIHRvIHBh
dGNoIHRoZSBwcm90b3R5cGUgc3RydWN0dXJlIGNoZWNrIHRvIGRvIHNvbWV0aGluZworICAgICAg
ICAgICAgLy8gdXNlZnVsLiAgV2UgY291bGQgdHJ5IHRvIG5vcCBpdCBvdXQgYWx0b2dldGhlciwg
YnV0IHRoYXQncyBhIGxpdHRsZSBtZXNzeSwgc28gbGV0cyBkbyBzb21ldGhpbmcgc2ltcGxlcgor
ICAgICAgICAgICAgLy8gZm9yIG5vdy4gIEZvciBub3cgaXQgcGVyZm9ybXMgYSBjaGVjayBvbiBh
IHNwZWNpYWwgb2JqZWN0IG9uIHRoZSBnbG9iYWwgb2JqZWN0IG9ubHkgdXNlZCBmb3IgdGhpcwor
ICAgICAgICAgICAgLy8gcHVycG9zZS4gIFRoZSBvYmplY3QgaXMgaW4gbm8gd2F5IGV4cG9zZWQs
IGFuZCBhcyBzdWNoIHRoZSBjaGVjayB3aWxsIGFsd2F5cyBwYXNzLgorICAgICAgICAgICAgZWxz
ZSBpZiAoc2xvdC5zbG90QmFzZSgpID09IGJhc2VWYWx1ZSkKKyAgICAgICAgICAgICAgICBKSVQ6
OnBhdGNoTWV0aG9kQ2FsbFByb3RvKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksIG1ldGhvZENhbGxM
aW5rSW5mbywgY2FsbGVlLCBzdHJ1Y3R1cmUsIGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpLT5nbG9i
YWxPYmplY3QoKS0+bWV0aG9kQ2FsbER1bW15KCkpOwogCi0gICAgICAgIC8vIENoZWNrIHRvIHNl
ZSBpZiB0aGUgZnVuY3Rpb24gaXMgb24gdGhlIG9iamVjdCdzIHByb3RvdHlwZS4gIFBhdGNoIHVw
IHRoZSBjb2RlIHRvIG9wdGltaXplLgotICAgICAgICBpZiAoc2xvdC5zbG90QmFzZSgpID09IHN0
cnVjdHVyZS0+cHJvdG90eXBlRm9yTG9va3VwKGNhbGxGcmFtZSkpCi0gICAgICAgICAgICBKSVQ6
OnBhdGNoTWV0aG9kQ2FsbFByb3RvKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksIG1ldGhvZENhbGxM
aW5rSW5mbywgY2FsbGVlLCBzdHJ1Y3R1cmUsIHNsb3RCYXNlT2JqZWN0KTsKLSAgICAgICAgLy8g
Q2hlY2sgdG8gc2VlIGlmIHRoZSBmdW5jdGlvbiBpcyBvbiB0aGUgb2JqZWN0IGl0c2VsZi4KLSAg
ICAgICAgLy8gU2luY2Ugd2UgZ2VuZXJhdGUgdGhlIG1ldGhvZC1jaGVjayB0byBjaGVjayBib3Ro
IHRoZSBzdHJ1Y3R1cmUgYW5kIGEgcHJvdG90eXBlLXN0cnVjdHVyZSAoc2luY2UgdGhpcwotICAg
ICAgICAvLyBpcyB0aGUgY29tbW9uIGNhc2UpIHdlIGhhdmUgYSBwcm9ibGVtIC0gd2UgbmVlZCB0
byBwYXRjaCB0aGUgcHJvdG90eXBlIHN0cnVjdHVyZSBjaGVjayB0byBkbyBzb21ldGhpbmcKLSAg
ICAgICAgLy8gdXNlZnVsLiAgV2UgY291bGQgdHJ5IHRvIG5vcCBpdCBvdXQgYWx0b2dldGhlciwg
YnV0IHRoYXQncyBhIGxpdHRsZSBtZXNzeSwgc28gbGV0cyBkbyBzb21ldGhpbmcgc2ltcGxlcgot
ICAgICAgICAvLyBmb3Igbm93LiAgRm9yIG5vdyBpdCBwZXJmb3JtcyBhIGNoZWNrIG9uIGEgc3Bl
Y2lhbCBvYmplY3Qgb24gdGhlIGdsb2JhbCBvYmplY3Qgb25seSB1c2VkIGZvciB0aGlzCi0gICAg
ICAgIC8vIHB1cnBvc2UuICBUaGUgb2JqZWN0IGlzIGluIG5vIHdheSBleHBvc2VkLCBhbmQgYXMg
c3VjaCB0aGUgY2hlY2sgd2lsbCBhbHdheXMgcGFzcy4KLSAgICAgICAgZWxzZSBpZiAoc2xvdC5z
bG90QmFzZSgpID09IGJhc2VWYWx1ZSkKLSAgICAgICAgICAgIEpJVDo6cGF0Y2hNZXRob2RDYWxs
UHJvdG8oY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwgbWV0aG9kQ2FsbExpbmtJbmZvLCBjYWxsZWUs
IHN0cnVjdHVyZSwgY2FsbEZyYW1lLT5zY29wZUNoYWluKCktPmdsb2JhbE9iamVjdCgpLT5tZXRo
b2RDYWxsRHVtbXkoKSk7CisgICAgICAgICAgICAvLyBGb3Igbm93IGxldCBhbnkgb3RoZXIgY2Fz
ZSBiZSBjYWNoZWQgYXMgYSBub3JtYWwgZ2V0X2J5X2lkLgorICAgICAgICB9CiAKLSAgICAgICAg
Ly8gRm9yIG5vdyBsZXQgYW55IG90aGVyIGNhc2UgYmUgY2FjaGVkIGFzIGEgbm9ybWFsIGdldF9i
eV9pZC4KKyAgICAgICAgLy8gUmV2ZXJ0IHRoZSBnZXRfYnlfaWQgb3AgYmFjayB0byBiZWluZyBh
IHJlZ3VsYXIgZ2V0X2J5X2lkIC0gYWxsb3cgaXQgdG8gY2FjaGUgbGlrZSBub3JtYWwsIGlmIGl0
IG5lZWRzIHRvLgorICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoY2FsbEZyYW1l
LT5jb2RlQmxvY2soKSwgU1RVQl9SRVRVUk5fQUREUkVTUywgRnVuY3Rpb25QdHIoY3RpX29wX2dl
dF9ieV9pZCkpOwogICAgIH0KIAotICAgIC8vIFJldmVydCB0aGUgZ2V0X2J5X2lkIG9wIGJhY2sg
dG8gYmVpbmcgYSByZWd1bGFyIGdldF9ieV9pZCAtIGFsbG93IGl0IHRvIGNhY2hlIGxpa2Ugbm9y
bWFsLCBpZiBpdCBuZWVkcyB0by4KLSAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoY2Fs
bEZyYW1lLT5jb2RlQmxvY2soKSwgU1RVQl9SRVRVUk5fQUREUkVTUywgRnVuY3Rpb25QdHIoY3Rp
X29wX2dldF9ieV9pZCkpOwotCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwog
fQogCi1ERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfZ2V0X2J5X2lkX3Nl
Y29uZCkKK0RFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF9nZXRfYnlfaWQp
CiB7CiAgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwogCiAgICAgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsKICAgICBJZGVudGlmaWVyJiBp
ZGVudCA9IHN0YWNrRnJhbWUuYXJnc1sxXS5pZGVudGlmaWVyKCk7Ci0KICAgICBKU1ZhbHVlIGJh
c2VWYWx1ZSA9IHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCk7CiAgICAgUHJvcGVydHlTbG90
IHNsb3QoYmFzZVZhbHVlKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGJhc2VWYWx1ZS5nZXQoY2Fs
bEZyYW1lLCBpZGVudCwgc2xvdCk7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJh
bWUtPmNvZGVCbG9jaygpOworICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9ICZjb2Rl
QmxvY2stPmdldFN0dWJJbmZvKFNUVUJfUkVUVVJOX0FERFJFU1MpOwogCi0gICAgSklUVGh1bmtz
Ojp0cnlDYWNoZUdldEJ5SUQoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCBTVFVC
X1JFVFVSTl9BRERSRVNTLCBiYXNlVmFsdWUsIGlkZW50LCBzbG90KTsKKyAgICBpZiAoIXN0dWJJ
bmZvLT5zZWVuT25jZSgpKQorICAgICAgICBzdHViSW5mby0+c2V0U2VlbigpOworICAgIGVsc2UK
KyAgICAgICAgSklUVGh1bmtzOjp0cnlDYWNoZUdldEJ5SUQoY2FsbEZyYW1lLCBjb2RlQmxvY2ss
IFNUVUJfUkVUVVJOX0FERFJFU1MsIGJhc2VWYWx1ZSwgaWRlbnQsIHNsb3QsIHN0dWJJbmZvKTsK
IAogICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShyZXN1bHQpOwpAQCAtOTYyLDcgKzkyMSw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9O
KEVuY29kZWRKU1ZhbHVlLCBvcF8KICAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVM
aXN0KiBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3Q7CiAgICAgICAgIGludCBsaXN0SW5kZXggPSAx
OwogCi0gICAgICAgIGlmIChzdHViSW5mby0+b3Bjb2RlSUQgPT0gb3BfZ2V0X2J5X2lkX3NlbGYp
IHsKKyAgICAgICAgaWYgKHN0dWJJbmZvLT5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRf
c2VsZikgewogICAgICAgICAgICAgQVNTRVJUKCFzdHViSW5mby0+c3R1YlJvdXRpbmUpOwogICAg
ICAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3JwaGljQWNjZXNz
U3RydWN0dXJlTGlzdChDb2RlTG9jYXRpb25MYWJlbCgpLCBzdHViSW5mby0+dS5nZXRCeUlkU2Vs
Zi5iYXNlT2JqZWN0U3RydWN0dXJlKTsKICAgICAgICAgICAgIHN0dWJJbmZvLT5pbml0R2V0QnlJ
ZFNlbGZMaXN0KHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCwgMik7CkBAIC05ODYsMTggKzk0NSwx
OCBAQCBzdGF0aWMgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBnCiAgICAgUG9seW1v
cnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwcm90b3R5cGVTdHJ1Y3R1cmVMaXN0ID0gMDsKICAg
ICBsaXN0SW5kZXggPSAxOwogCi0gICAgc3dpdGNoIChzdHViSW5mby0+b3Bjb2RlSUQpIHsKLSAg
ICBjYXNlIG9wX2dldF9ieV9pZF9wcm90bzoKKyAgICBzd2l0Y2ggKHN0dWJJbmZvLT5hY2Nlc3NU
eXBlKSB7CisgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3Byb3RvOgogICAgICAgICBwcm90b3R5
cGVTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdChzdHVi
SW5mby0+c3R1YlJvdXRpbmUsIHN0dWJJbmZvLT51LmdldEJ5SWRQcm90by5iYXNlT2JqZWN0U3Ry
dWN0dXJlLCBzdHViSW5mby0+dS5nZXRCeUlkUHJvdG8ucHJvdG90eXBlU3RydWN0dXJlKTsKICAg
ICAgICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gQ29kZUxvY2F0aW9uTGFiZWwoKTsKICAgICAg
ICAgc3R1YkluZm8tPmluaXRHZXRCeUlkUHJvdG9MaXN0KHByb3RvdHlwZVN0cnVjdHVyZUxpc3Qs
IDIpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIG9wX2dldF9ieV9pZF9jaGFpbjoKKyAgICBj
YXNlIGFjY2Vzc19nZXRfYnlfaWRfY2hhaW46CiAgICAgICAgIHByb3RvdHlwZVN0cnVjdHVyZUxp
c3QgPSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KHN0dWJJbmZvLT5zdHViUm91
dGluZSwgc3R1YkluZm8tPnUuZ2V0QnlJZENoYWluLmJhc2VPYmplY3RTdHJ1Y3R1cmUsIHN0dWJJ
bmZvLT51LmdldEJ5SWRDaGFpbi5jaGFpbik7CiAgICAgICAgIHN0dWJJbmZvLT5zdHViUm91dGlu
ZSA9IENvZGVMb2NhdGlvbkxhYmVsKCk7CiAgICAgICAgIHN0dWJJbmZvLT5pbml0R2V0QnlJZFBy
b3RvTGlzdChwcm90b3R5cGVTdHJ1Y3R1cmVMaXN0LCAyKTsKICAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBvcF9nZXRfYnlfaWRfcHJvdG9fbGlzdDoKKyAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRf
cHJvdG9fbGlzdDoKICAgICAgICAgcHJvdG90eXBlU3RydWN0dXJlTGlzdCA9IHN0dWJJbmZvLT51
LmdldEJ5SWRQcm90b0xpc3Quc3RydWN0dXJlTGlzdDsKICAgICAgICAgbGlzdEluZGV4ID0gc3R1
YkluZm8tPnUuZ2V0QnlJZFByb3RvTGlzdC5saXN0U2l6ZTsKICAgICAgICAgc3R1YkluZm8tPnUu
Z2V0QnlJZFByb3RvTGlzdC5saXN0U2l6ZSsrOwpAQCAtMTI2MywzMyArMTIyMiwyNyBAQCBERUZJ
TkVfU1RVQl9GVU5DVElPTihWb2lkUHRyUGFpciwgb3BfY2FsCiAgICAgUkVUVVJOX1BPSU5URVJf
UEFJUihuZXdDb2RlQmxvY2ssIGNhbGxGcmFtZSk7CiB9CiAKLURFRklORV9TVFVCX0ZVTkNUSU9O
KHZvaWQqLCB2bV9kb250TGF6eUxpbmtDYWxsKQorREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCos
IHZtX2xhenlMaW5rQ2FsbCkKIHsKICAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFt
ZSk7CiAKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSBzdGFja0ZyYW1lLmdsb2JhbERh
dGE7CiAgICAgSlNGdW5jdGlvbiogY2FsbGVlID0gYXNGdW5jdGlvbihzdGFja0ZyYW1lLmFyZ3Nb
MF0uanNWYWx1ZSgpKTsKKyAgICBKSVRDb2RlJiBqaXRDb2RlID0gY2FsbGVlLT5ib2R5KCktPmdl
bmVyYXRlZEpJVENvZGUoKTsKKyAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9ICZzdGFj
a0ZyYW1lLmNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2NrKCktPmdldENhbGxMaW5r
SW5mbyhzdGFja0ZyYW1lLmFyZ3NbMV0ucmV0dXJuQWRkcmVzcygpKTsKIAotICAgIGN0aVBhdGNo
TmVhckNhbGxCeVJldHVybkFkZHJlc3Moc3RhY2tGcmFtZS5jYWxsRnJhbWUtPmNhbGxlckZyYW1l
KCktPmNvZGVCbG9jaygpLCBzdGFja0ZyYW1lLmFyZ3NbMV0ucmV0dXJuQWRkcmVzcygpLCBnbG9i
YWxEYXRhLT5qaXRTdHVicy5jdGlWaXJ0dWFsQ2FsbExpbmsoKSk7Ci0KLSAgICByZXR1cm4gY2Fs
bGVlLT5ib2R5KCktPmdlbmVyYXRlZEpJVENvZGUoKS5hZGRyZXNzRm9yQ2FsbCgpLmV4ZWN1dGFi
bGVBZGRyZXNzKCk7Ci19Ci0KLURFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQqLCB2bV9sYXp5TGlu
a0NhbGwpCi17Ci0gICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOworICAgIGlm
ICghY2FsbExpbmtJbmZvLT5zZWVuT25jZSgpKQorICAgICAgICBjYWxsTGlua0luZm8tPnNldFNl
ZW4oKTsKKyAgICBlbHNlIHsKIAotICAgIEpTRnVuY3Rpb24qIGNhbGxlZSA9IGFzRnVuY3Rpb24o
c3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKSk7Ci0gICAgSklUQ29kZSYgaml0Q29kZSA9IGNh
bGxlZS0+Ym9keSgpLT5nZW5lcmF0ZWRKSVRDb2RlKCk7Ci0gICAgCi0gICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2sgPSAwOwotICAgIGlmICghY2FsbGVlLT5pc0hvc3RGdW5jdGlvbigpKQotICAgICAg
ICBjb2RlQmxvY2sgPSAmY2FsbGVlLT5ib2R5KCktPmJ5dGVjb2RlKGNhbGxlZS0+c2NvcGUoKS5u
b2RlKCkpOwotICAgIGVsc2UKLSAgICAgICAgY29kZUJsb2NrID0gJmNhbGxlZS0+Ym9keSgpLT5n
ZW5lcmF0ZWRCeXRlY29kZSgpOworICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IDA7Cisg
ICAgICAgIGlmICghY2FsbGVlLT5pc0hvc3RGdW5jdGlvbigpKQorICAgICAgICAgICAgY29kZUJs
b2NrID0gJmNhbGxlZS0+Ym9keSgpLT5ieXRlY29kZShjYWxsZWUtPnNjb3BlKCkubm9kZSgpKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29kZUJsb2NrID0gJmNhbGxlZS0+Ym9keSgpLT5n
ZW5lcmF0ZWRCeXRlY29kZSgpOworICAgICAgICBKSVQ6OmxpbmtDYWxsKGNhbGxlZSwgc3RhY2tG
cmFtZS5jYWxsRnJhbWUtPmNhbGxlckZyYW1lKCktPmNvZGVCbG9jaygpLCBjb2RlQmxvY2ssIGpp
dENvZGUsIGNhbGxMaW5rSW5mbywgc3RhY2tGcmFtZS5hcmdzWzJdLmludDMyKCksIGdsb2JhbERh
dGEpOwogCi0gICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSAmc3RhY2tGcmFtZS5jYWxs
RnJhbWUtPmNhbGxlckZyYW1lKCktPmNvZGVCbG9jaygpLT5nZXRDYWxsTGlua0luZm8oc3RhY2tG
cmFtZS5hcmdzWzFdLnJldHVybkFkZHJlc3MoKSk7Ci0gICAgSklUOjpsaW5rQ2FsbChjYWxsZWUs
IHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpLT5jb2RlQmxvY2soKSwgY29kZUJs
b2NrLCBqaXRDb2RlLCBjYWxsTGlua0luZm8sIHN0YWNrRnJhbWUuYXJnc1syXS5pbnQzMigpLCBz
dGFja0ZyYW1lLmdsb2JhbERhdGEpOworICAgIH0KIAogICAgIHJldHVybiBqaXRDb2RlLmFkZHJl
c3NGb3JDYWxsKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKIH0KSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L2ppdC9KSVRTdHVicy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVi
cy5oCShyZXZpc2lvbiA0NjMxMSkKKysrIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCSh3
b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1NSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNz
IEZ1bmNFeHByTm9kZTsKICAgICBjbGFzcyBSZWdFeHA7CiAKKyAgICBzdHJ1Y3QgU3RydWN0dXJl
U3R1YkluZm87CisKICAgICB1bmlvbiBKSVRTdHViQXJnIHsKICAgICAgICAgdm9pZCogYXNQb2lu
dGVyOwogICAgICAgICBFbmNvZGVkSlNWYWx1ZSBhc0VuY29kZWRKU1ZhbHVlOwpAQCAtMTk1LDEy
ICsxOTcsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgcHVibGljOgogICAgICAgICBKSVRUaHVu
a3MoSlNHbG9iYWxEYXRhKik7CiAKLSAgICAgICAgc3RhdGljIHZvaWQgdHJ5Q2FjaGVHZXRCeUlE
KENhbGxGcmFtZSosIENvZGVCbG9jayosIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywg
SlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3Qg
UHJvcGVydHlTbG90Jik7Ci0gICAgICAgIHN0YXRpYyB2b2lkIHRyeUNhY2hlUHV0QnlJRChDYWxs
RnJhbWUqLCBDb2RlQmxvY2sqLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpTVmFs
dWUgYmFzZVZhbHVlLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgCisgICAgICAg
IHN0YXRpYyB2b2lkIHRyeUNhY2hlR2V0QnlJRChDYWxsRnJhbWUqLCBDb2RlQmxvY2sqLCBSZXR1
cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpTVmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJ
bmZvKiBzdHViSW5mbyk7CisgICAgICAgIHN0YXRpYyB2b2lkIHRyeUNhY2hlUHV0QnlJRChDYWxs
RnJhbWUqLCBDb2RlQmxvY2sqLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpTVmFs
dWUgYmFzZVZhbHVlLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyog
c3R1YkluZm8pOworCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjdGlBcnJheUxlbmd0
aFRyYW1wb2xpbmUoKSB7IHJldHVybiBtX2N0aUFycmF5TGVuZ3RoVHJhbXBvbGluZTsgfQogICAg
ICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY3RpU3RyaW5nTGVuZ3RoVHJhbXBvbGluZSgpIHsg
cmV0dXJuIG1fY3RpU3RyaW5nTGVuZ3RoVHJhbXBvbGluZTsgfQotICAgICAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIgY3RpVmlydHVhbENhbGxQcmVMaW5rKCkgeyByZXR1cm4gbV9jdGlWaXJ0dWFs
Q2FsbFByZUxpbms7IH0KICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGN0aVZpcnR1YWxD
YWxsTGluaygpIHsgcmV0dXJuIG1fY3RpVmlydHVhbENhbGxMaW5rOyB9CiAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0ciBjdGlWaXJ0dWFsQ2FsbCgpIHsgcmV0dXJuIG1fY3RpVmlydHVhbENh
bGw7IH0KICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGN0aU5hdGl2ZUNhbGxUaHVuaygp
IHsgcmV0dXJuIG1fY3RpTmF0aXZlQ2FsbFRodW5rOyB9CkBAIC0yMTAsNyArMjExLDYgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIG1fY3RpQXJyYXlM
ZW5ndGhUcmFtcG9saW5lOwogICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbV9jdGlTdHJp
bmdMZW5ndGhUcmFtcG9saW5lOwotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbV9jdGlW
aXJ0dWFsQ2FsbFByZUxpbms7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBtX2N0aVZp
cnR1YWxDYWxsTGluazsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIG1fY3RpVmlydHVh
bENhbGw7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBtX2N0aU5hdGl2ZUNhbGxUaHVu
azsKQEAgLTIyOSw3ICsyMjksNiBAQCBuYW1lc3BhY2UgSklUU3R1YnMgeyBleHRlcm4gIkMiIHsK
ICAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcF9wdXRfYnlfaWQoU1RVQl9BUkdTX0RFQ0xBUkFUSU9O
KTsKICAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcF9wdXRfYnlfaWRfZmFpbChTVFVCX0FSR1NfREVD
TEFSQVRJT04pOwogICAgIHZvaWQgSklUX1NUVUIgY3RpX29wX3B1dF9ieV9pZF9nZW5lcmljKFNU
VUJfQVJHU19ERUNMQVJBVElPTik7Ci0gICAgdm9pZCBKSVRfU1RVQiBjdGlfb3BfcHV0X2J5X2lk
X3NlY29uZChTVFVCX0FSR1NfREVDTEFSQVRJT04pOwogICAgIHZvaWQgSklUX1NUVUIgY3RpX29w
X3B1dF9ieV9pbmRleChTVFVCX0FSR1NfREVDTEFSQVRJT04pOwogICAgIHZvaWQgSklUX1NUVUIg
Y3RpX29wX3B1dF9ieV92YWwoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKICAgICB2b2lkIEpJVF9T
VFVCIGN0aV9vcF9wdXRfYnlfdmFsX2FycmF5KFNUVUJfQVJHU19ERUNMQVJBVElPTik7CkBAIC0y
NTIsNyArMjUxLDYgQEAgbmFtZXNwYWNlIEpJVFN0dWJzIHsgZXh0ZXJuICJDIiB7CiAgICAgdm9p
ZCogSklUX1NUVUIgY3RpX29wX3N3aXRjaF9jaGFyKFNUVUJfQVJHU19ERUNMQVJBVElPTik7CiAg
ICAgdm9pZCogSklUX1NUVUIgY3RpX29wX3N3aXRjaF9pbW0oU1RVQl9BUkdTX0RFQ0xBUkFUSU9O
KTsKICAgICB2b2lkKiBKSVRfU1RVQiBjdGlfb3Bfc3dpdGNoX3N0cmluZyhTVFVCX0FSR1NfREVD
TEFSQVRJT04pOwotICAgIHZvaWQqIEpJVF9TVFVCIGN0aV92bV9kb250TGF6eUxpbmtDYWxsKFNU
VUJfQVJHU19ERUNMQVJBVElPTik7CiAgICAgdm9pZCogSklUX1NUVUIgY3RpX3ZtX2xhenlMaW5r
Q2FsbChTVFVCX0FSR1NfREVDTEFSQVRJT04pOwogICAgIEpTT2JqZWN0KiBKSVRfU1RVQiBjdGlf
b3BfY29uc3RydWN0X0pTQ29uc3RydWN0KFNUVUJfQVJHU19ERUNMQVJBVElPTik7CiAgICAgSlNP
YmplY3QqIEpJVF9TVFVCIGN0aV9vcF9jb252ZXJ0X3RoaXMoU1RVQl9BUkdTX0RFQ0xBUkFUSU9O
KTsKQEAgLTI4MCwxMyArMjc4LDExIEBAIG5hbWVzcGFjZSBKSVRTdHVicyB7IGV4dGVybiAiQyIg
ewogICAgIEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9lcShTVFVCX0FSR1NfREVDTEFS
QVRJT04pOwogICAgIEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9nZXRfYnlfaWQoU1RV
Ql9BUkdTX0RFQ0xBUkFUSU9OKTsKICAgICBFbmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlfb3Bf
Z2V0X2J5X2lkX21ldGhvZF9jaGVjayhTVFVCX0FSR1NfREVDTEFSQVRJT04pOwotICAgIEVuY29k
ZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9nZXRfYnlfaWRfbWV0aG9kX2NoZWNrX3NlY29uZChT
VFVCX0FSR1NfREVDTEFSQVRJT04pOwogICAgIEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9v
cF9nZXRfYnlfaWRfYXJyYXlfZmFpbChTVFVCX0FSR1NfREVDTEFSQVRJT04pOwogICAgIEVuY29k
ZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9nZXRfYnlfaWRfZ2VuZXJpYyhTVFVCX0FSR1NfREVD
TEFSQVRJT04pOwogICAgIEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9nZXRfYnlfaWRf
cHJvdG9fZmFpbChTVFVCX0FSR1NfREVDTEFSQVRJT04pOwogICAgIEVuY29kZWRKU1ZhbHVlIEpJ
VF9TVFVCIGN0aV9vcF9nZXRfYnlfaWRfcHJvdG9fbGlzdChTVFVCX0FSR1NfREVDTEFSQVRJT04p
OwogICAgIEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9nZXRfYnlfaWRfcHJvdG9fbGlz
dF9mdWxsKFNUVUJfQVJHU19ERUNMQVJBVElPTik7Ci0gICAgRW5jb2RlZEpTVmFsdWUgSklUX1NU
VUIgY3RpX29wX2dldF9ieV9pZF9zZWNvbmQoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKICAgICBF
bmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlfb3BfZ2V0X2J5X2lkX3NlbGZfZmFpbChTVFVCX0FS
R1NfREVDTEFSQVRJT04pOwogICAgIEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9nZXRf
YnlfaWRfc3RyaW5nX2ZhaWwoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKICAgICBFbmNvZGVkSlNW
YWx1ZSBKSVRfU1RVQiBjdGlfb3BfZ2V0X2J5X3ZhbChTVFVCX0FSR1NfREVDTEFSQVRJT04pOwpJ
bmRleDogSmF2YVNjcmlwdENvcmUvd3RmL1B0ckFuZEZsYWdzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUvd3RmL1B0ckFuZEZsYWdzLmgJKHJldmlzaW9uIDQ2MzExKQorKysgSmF2YVNj
cmlwdENvcmUvd3RmL1B0ckFuZEZsYWdzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcg
QEAgbmFtZXNwYWNlIFdURiB7CiAgICAgdGVtcGxhdGU8Y2xhc3MgVCwgdHlwZW5hbWUgRmxhZ0Vu
dW0+IGNsYXNzIFB0ckFuZEZsYWdzIHsKICAgICBwdWJsaWM6CiAgICAgICAgIFB0ckFuZEZsYWdz
KCkgOiBtX3B0ckFuZEZsYWdzKDApIHt9CisgICAgICAgIFB0ckFuZEZsYWdzKFQqIHB0cikgOiBt
X3B0ckFuZEZsYWdzKDApIHsgc2V0KHB0cik7IH0KIAogICAgICAgICBib29sIGlzRmxhZ1NldChG
bGFnRW51bSBmbGFnTnVtYmVyKSBjb25zdCB7IEFTU0VSVChmbGFnTnVtYmVyIDwgMik7IHJldHVy
biBtX3B0ckFuZEZsYWdzICYgKDEgPDwgZmxhZ051bWJlcik7IH0KICAgICAgICAgdm9pZCBzZXRG
bGFnKEZsYWdFbnVtIGZsYWdOdW1iZXIpIHsgQVNTRVJUKGZsYWdOdW1iZXIgPCAyKTsgbV9wdHJB
bmRGbGFncyB8PSAoMSA8PCBmbGFnTnVtYmVyKTt9CkBAIC01MSw2ICs1Miw5IEBAIG5hbWVzcGFj
ZSBXVEYgewogI2VuZGlmCiAgICAgICAgIH0KIAorICAgICAgICBib29sIG9wZXJhdG9yISgpIGNv
bnN0IHsgcmV0dXJuICFnZXQoKTsgfQorICAgICAgICBUKiBvcGVyYXRvci0+KCkgY29uc3QgeyBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUKj4obV9wdHJBbmRGbGFncyAmIH4zKTsgfQorCiAgICAg
cHJpdmF0ZToKICAgICAgICAgaW50cHRyX3QgbV9wdHJBbmRGbGFnczsKICNpZm5kZWYgTkRFQlVH
Cg==
</data>
<flag name="review"
          id="17697"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>