<?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>30887</bug_id>
          
          <creation_ts>2009-10-28 15:35:42 -0700</creation_ts>
          <short_desc>Improve for..in enumeration performance</short_desc>
          <delta_ts>2009-10-29 13:40:00 -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="Oliver Hunt">oliver</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>eric</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>158748</commentid>
    <comment_count>0</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-10-28 15:35:42 -0700</bug_when>
    <thetext>Task bug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>158756</commentid>
    <comment_count>1</comment_count>
      <attachid>42063</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-10-28 15:46:25 -0700</bug_when>
    <thetext>Created attachment 42063
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>158780</commentid>
    <comment_count>2</comment_count>
      <attachid>42063</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2009-10-28 17:08:53 -0700</bug_when>
    <thetext>Comment on attachment 42063
Patch v1

Looks good. A few comments:

(1) No performance numbers. Is this a speedup?

(2) op_get_by_pname:

+        if (subscript == expectedSubscript &amp;&amp; baseValue.isObject() &amp;&amp; (asObject(baseValue)-&gt;structure() == it-&gt;cachedStructure()) &amp;&amp; it-&gt;getOffset(index, offset)) {

Use isCell instead of isObject -- isCell is faster. Testing against the cached structure ensures that, if the object was an object last time, it&apos;s an object this time, too.

(3) op_get_by_pname stub:

Same comment. Also, don&apos;t waste time testing for the fast case in the stub; you&apos;re in the stub because the inline fast case has failed.

(4) JSValue and OBJECT_OFFSETOF:

I dont&apos;t think the refactoring you did in this area was necessary. See other code that uses the idiom &quot;OBJECT_OFFSETOF(JSValue, u.asBits.XXX)&quot; -- you don&apos;t need to name the type of the union to get offsets into it.

(5) Register idioms on JSVALUE32_64:

+    emitLoad2(property, regT1, regT2, base, regT3, regT0);

The idiom for code like this is: emitLoad2(x, regT1, regT0, y, regT3, regT2). Following this idiom ensures that result chaining doesn&apos;t have to do any register-to-register moves. (It also ensures that you don&apos;t accidentally tickle any untested edge cases in the result chaining logic.)

+    emitStore(dst, regT0, regT1);

Here, the idiom is: emitStore(dst, regT1, regT0);

You want to end emit_op_get_by_pname with a call to &quot;map&quot;, to map the virtual register into physical registers for result chaining. That way, the code that uses the result of the bracket access doesn&apos;t have to stall, reloading it. The form for map is:

    map(m_bytecodeIndex + OPCODE_LENGTH(op_get_by_pname), dst, tagRegister, payloadRegister);

Be sure that the result is loaded into the same tag/payload registers on the hot and cold paths. Currently, it is not, so the cold path would cause a crash if you just added the call to map without changing the register allocation.

I think your patch will work as-is, but making these improvements will make it even faster and even more readable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>158810</commentid>
    <comment_count>3</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-10-28 18:26:03 -0700</bug_when>
    <thetext>Committed r50254</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>159050</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-10-29 13:40:00 -0700</bug_when>
    <thetext>Looks like this was landed.  Closing.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42063</attachid>
            <date>2009-10-28 15:46:25 -0700</date>
            <delta_ts>2009-10-28 17:08:53 -0700</delta_ts>
            <desc>Patch v1</desc>
            <filename>bug-30887-20091028154624.patch</filename>
            <type>text/plain</type>
            <size>34733</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCA4YjFjOGFmLi41ZDU1OTc1IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjMg
QEAKKzIwMDktMTAtMjggIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXByb3ZlIGZvci4uaW4g
ZW51bWVyYXRpb24gcGVyZm9ybWFuY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTMwODg3CisKKyAgICAgICAgSW1wcm92ZSBpbmRleGluZyBvZiBhbiBv
YmplY3Qgd2l0aCBhIGZvci4uaW4gaXRlcmF0b3IgYnkKKyAgICAgICAgaWRlbnRpZnlpbmcgY2Fz
ZXMgd2hlcmUgZ2V0X2J5X3ZhbCBpcyBiZWluZyB1c2VkIHdpdGggYSBpdGVyYXRvcgorICAgICAg
ICBhcyB0aGUgc3Vic2NyaXB0IGFuZCByZXBsYWNlIGl0IHdpdGggYSBuZXcgZ2V0X2J5X3BuYW1l
CisgICAgICAgIGJ5dGVjb2RlLiAgZ2V0X2J5X3BuYW1lIHRoZW4gb3B0aW1pemVzIGxvb2t1cHMg
dGhhdCBkaXJlY3RseSBhY2Nlc3MKKyAgICAgICAgdGhlIGJhc2Ugb2JqZWN0LgorCisgICAgICAg
ICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkdW1w
KToKKyAgICAgICAgKiBieXRlY29kZS9PcGNvZGUuaDoKKyAgICAgICAgKiBieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdEdldEJ5VmFsKToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3Iu
aDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hPcHRpbWlzZWRGb3JJbik6
CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BPcHRpbWlzZWRGb3JJbik6Cisg
ICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOgorICAgICAgICAoSlNDOjpJbnRl
cnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUpOgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAg
ICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MpOgorICAgICAgICAoSlNDOjpKSVQ6
OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAg
ICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxl
R2V0RGlyZWN0T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV9wbmFt
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3BuYW1lKToKKyAgICAg
ICAgKiBqaXQvSklUU3R1YnMuY3BwOgorICAgICAgICAoSlNDOjpERUZJTkVfU1RVQl9GVU5DVElP
Tik6CisgICAgICAgICogaml0L0pJVFN0dWJzLmg6CisgICAgICAgIChKU0M6Oik6CisgICAgICAg
ICogcGFyc2VyL05vZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6Rm9ySW5Ob2RlOjplbWl0Qnl0ZWNv
ZGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuaDoKKyAgICAgICAgKiBydW50aW1lL0pT
UHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpKU1Byb3BlcnR5TmFtZUl0
ZXJhdG9yOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRv
ci5oOgorICAgICAgICAoSlNDOjpKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOjpnZXRPZmZzZXQpOgor
ICAgICAgICAoSlNDOjpKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOjpKU1Byb3BlcnR5TmFtZUl0ZXJh
dG9yKToKKyAgICAgICAgKiBydW50aW1lL0pTVmFsdWUuaDoKKyAgICAgICAgKEpTQzo6SlNWYWx1
ZTo6KToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5jcHA6CisgICAgICAgIChKU0M6OlN0
cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
OjpjaGFuZ2VQcm90b3R5cGVUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpk
ZXNwZWNpZnlGdW5jdGlvblRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmFk
ZEFub255bW91c1Nsb3RzVHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Z2V0
dGVyU2V0dGVyVHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6dG9EaWN0aW9u
YXJ5VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6YWRkUHJvcGVydHlXaXRo
b3V0VHJhbnNpdGlvbik6CisgICAgICAgICAgVHJhY2sgdGhlIGV4aXN0ZW5jZSAob3Igbm90KSBv
ZiBub24tZW51bWVyYWJsZSBwcm9wZXJ0aWVzLgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJl
Lmg6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6cHJvcGVydHlTdG9yYWdlQ2FwYWNpdHkpOgor
ICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnByb3BlcnR5U3RvcmFnZVNpemUpOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmU6Omhhc05vbkVudW1lcmFibGVQcm9wZXJ0aWVzKToKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlOjpoYXNBbm9ueW1vdXNTbG90cyk6CisKIDIwMDktMTAtMjcgIEdlb2ZmcmV5
IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTYW0gV2Vp
bmlnLgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcCBi
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKaW5kZXggMThjYTJhZS4uYzkx
NTkzNCAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAor
KysgYi9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCkBAIC04MjQsNiArODI0
LDE2IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVmVjdG9y
PEluc3RydWN0aW9uPjo6Y29uc3RfaXRlcmF0b3ImCiAgICAgICAgICAgICBwcmludGYoIlslNGRd
IGdldF9ieV92YWxcdCAlcywgJXMsICVzXG4iLCBsb2NhdGlvbiwgcmVnaXN0ZXJOYW1lKHIwKS5j
X3N0cigpLCByZWdpc3Rlck5hbWUocjEpLmNfc3RyKCksIHJlZ2lzdGVyTmFtZShyMikuY19zdHIo
KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2dldF9i
eV9wbmFtZTogeworICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAg
ICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCByMiA9
ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIzID0gKCsraXQpLT51Lm9wZXJh
bmQ7CisgICAgICAgICAgICBpbnQgcjQgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAg
IGludCByNSA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRmKCJbJTRkXSBn
ZXRfYnlfcG5hbWVcdCAlcywgJXMsICVzLCAlcywgJXMsICVzXG4iLCBsb2NhdGlvbiwgcmVnaXN0
ZXJOYW1lKHIwKS5jX3N0cigpLCByZWdpc3Rlck5hbWUocjEpLmNfc3RyKCksIHJlZ2lzdGVyTmFt
ZShyMikuY19zdHIoKSwgcmVnaXN0ZXJOYW1lKHIzKS5jX3N0cigpLCByZWdpc3Rlck5hbWUocjQp
LmNfc3RyKCksIHJlZ2lzdGVyTmFtZShyNSkuY19zdHIoKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQogICAgICAgICBjYXNlIG9wX3B1dF9ieV92YWw6IHsKICAgICAgICAgICAgIGlu
dCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51
Lm9wZXJhbmQ7CkBAIC0xMDE1LDE0ICsxMDI1LDE3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgVmVjdG9yPEluc3RydWN0aW9uPjo6Y29uc3RfaXRlcmF0b3Im
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX2dldF9wbmFt
ZXM6IHsKLSAgICAgICAgICAgIGludCByMCA9IGl0WzBdLnUub3BlcmFuZDsKLSAgICAgICAgICAg
IGludCByMSA9IGl0WzFdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIHByaW50ZigiWyU0ZF0gZ2V0
X3BuYW1lc1x0ICVzLCAlc1xuIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShyMCkuY19zdHIoKSwg
cmVnaXN0ZXJOYW1lKHIxKS5jX3N0cigpKTsKKyAgICAgICAgICAgIGludCByMCA9IGl0WzFdLnUu
b3BlcmFuZDsKKyAgICAgICAgICAgIGludCByMSA9IGl0WzJdLnUub3BlcmFuZDsKKyAgICAgICAg
ICAgIGludCByMiA9IGl0WzNdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCByMyA9IGl0WzRd
LnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBvZmZzZXQgPSBpdFs1XS51Lm9wZXJhbmQ7Cisg
ICAgICAgICAgICBwcmludGYoIlslNGRdIGdldF9wbmFtZXNcdCAlcywgJXMsICVzLCAlcywgJWQo
LT4lZClcbiIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUocjApLmNfc3RyKCksIHJlZ2lzdGVyTmFt
ZShyMSkuY19zdHIoKSwgcmVnaXN0ZXJOYW1lKHIyKS5jX3N0cigpLCByZWdpc3Rlck5hbWUocjMp
LmNfc3RyKCksIG9mZnNldCwgbG9jYXRpb24gKyBvZmZzZXQpOwogICAgICAgICAgICAgaXQgKz0g
T1BDT0RFX0xFTkdUSChvcF9nZXRfcG5hbWVzKSAtIDE7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICBjYXNlIG9wX25leHRfcG5hbWU6IHsKLSAgICAgICAgICAgIGludCBk
ZXN0ID0gaXRbMF0udS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGRlc3QgPSBpdFsxXS51Lm9w
ZXJhbmQ7CiAgICAgICAgICAgICBpbnQgaXRlciA9IGl0WzRdLnUub3BlcmFuZDsKICAgICAgICAg
ICAgIGludCBvZmZzZXQgPSBpdFs1XS51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBwcmludGYoIlsl
NGRdIG5leHRfcG5hbWVcdCAlcywgJXMsICVkKC0+JWQpXG4iLCBsb2NhdGlvbiwgcmVnaXN0ZXJO
YW1lKGRlc3QpLmNfc3RyKCksIHJlZ2lzdGVyTmFtZShpdGVyKS5jX3N0cigpLCBvZmZzZXQsIGxv
Y2F0aW9uICsgb2Zmc2V0KTsKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09w
Y29kZS5oIGIvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgKaW5kZXggODk2ODI1Mi4u
NGZhY2JlZiAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgKKysr
IGIvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgKQEAgLTExMyw2ICsxMTMsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgbWFjcm8ob3BfcHV0X2J5X2lkX2dlbmVyaWMsIDgpIFwK
ICAgICAgICAgbWFjcm8ob3BfZGVsX2J5X2lkLCA0KSBcCiAgICAgICAgIG1hY3JvKG9wX2dldF9i
eV92YWwsIDQpIFwKKyAgICAgICAgbWFjcm8ob3BfZ2V0X2J5X3BuYW1lLCA3KSBcCiAgICAgICAg
IG1hY3JvKG9wX3B1dF9ieV92YWwsIDQpIFwKICAgICAgICAgbWFjcm8ob3BfZGVsX2J5X3ZhbCwg
NCkgXAogICAgICAgICBtYWNybyhvcF9wdXRfYnlfaW5kZXgsIDQpIFwKZGlmZiAtLWdpdCBhL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAgYi9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCmluZGV4IDQxYjVjMzku
LjA0ZGFlMTUgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29k
ZUdlbmVyYXRvci5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmNwcApAQCAtMTI4MSw2ICsxMjgxLDE5IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2Rl
R2VuZXJhdG9yOjplbWl0RGVsZXRlQnlJZChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJh
c2UsCiAKIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0QnlWYWwoUmVnaXN0
ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eSkKIHsKKyAg
ICBmb3IgKHNpemVfdCBpID0gbV9mb3JJbkNvbnRleHRTdGFjay5zaXplKCk7IGkgPiAwOyBpLS0p
IHsKKyAgICAgICAgRm9ySW5Db250ZXh0JiBjb250ZXh0ID0gbV9mb3JJbkNvbnRleHRTdGFja1tp
IC0gMV07CisgICAgICAgIGlmIChjb250ZXh0LnByb3BlcnR5UmVnaXN0ZXIgPT0gcHJvcGVydHkp
IHsKKyAgICAgICAgICAgIGVtaXRPcGNvZGUob3BfZ2V0X2J5X3BuYW1lKTsKKyAgICAgICAgICAg
IGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOworICAgICAgICAgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKGJhc2UtPmluZGV4KCkpOworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKHByb3BlcnR5LT5pbmRleCgpKTsKKyAgICAgICAgICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZChjb250ZXh0LmV4cGVjdGVkU3Vic2NyaXB0UmVnaXN0ZXItPmluZGV4KCkpOworICAg
ICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGNvbnRleHQuaXRlclJlZ2lzdGVyLT5pbmRl
eCgpKTsKKyAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChjb250ZXh0LmluZGV4UmVn
aXN0ZXItPmluZGV4KCkpOworICAgICAgICAgICAgcmV0dXJuIGRzdDsKKyAgICAgICAgfQorICAg
IH0KICAgICBlbWl0T3Bjb2RlKG9wX2dldF9ieV92YWwpOwogICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChkc3QtPmluZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChiYXNlLT5pbmRl
eCgpKTsKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdl
bmVyYXRvci5oIGIvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9y
LmgKaW5kZXggNjFkZTE3My4uNDY0OGZiNSAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKKysrIGIvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKQEAgLTYxLDYgKzYxLDEzIEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBGaW5hbGx5Q29udGV4dCBmaW5hbGx5Q29udGV4dDsKICAgICB9OwogCisg
ICAgc3RydWN0IEZvckluQ29udGV4dCB7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBleHBl
Y3RlZFN1YnNjcmlwdFJlZ2lzdGVyOworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gaXRlclJl
Z2lzdGVyOworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gaW5kZXhSZWdpc3RlcjsKKyAgICAg
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3BlcnR5UmVnaXN0ZXI7CisgICAgfTsKKwogICAgIGNs
YXNzIEJ5dGVjb2RlR2VuZXJhdG9yIDogcHVibGljIEZhc3RBbGxvY0Jhc2UgewogICAgIHB1Ymxp
YzoKICAgICAgICAgdHlwZWRlZiBEZWNsYXJhdGlvblN0YWNrczo6VmFyU3RhY2sgVmFyU3RhY2s7
CkBAIC0zMzEsNiArMzM4LDE3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIHB1c2hG
aW5hbGx5Q29udGV4dChMYWJlbCogdGFyZ2V0LCBSZWdpc3RlcklEKiByZXR1cm5BZGRyRHN0KTsK
ICAgICAgICAgdm9pZCBwb3BGaW5hbGx5Q29udGV4dCgpOwogCisgICAgICAgIHZvaWQgcHVzaE9w
dGltaXNlZEZvckluKFJlZ2lzdGVySUQqIGV4cGVjdGVkQmFzZSwgUmVnaXN0ZXJJRCogaXRlciwg
UmVnaXN0ZXJJRCogaW5kZXgsIFJlZ2lzdGVySUQqIHByb3BlcnR5UmVnaXN0ZXIpCisgICAgICAg
IHsKKyAgICAgICAgICAgIEZvckluQ29udGV4dCBjb250ZXh0ID0geyBleHBlY3RlZEJhc2UsIGl0
ZXIsIGluZGV4LCBwcm9wZXJ0eVJlZ2lzdGVyIH07CisgICAgICAgICAgICBtX2ZvckluQ29udGV4
dFN0YWNrLmFwcGVuZChjb250ZXh0KTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgcG9wT3B0
aW1pc2VkRm9ySW4oKQorICAgICAgICB7CisgICAgICAgICAgICBtX2ZvckluQ29udGV4dFN0YWNr
LnJlbW92ZUxhc3QoKTsKKyAgICAgICAgfQorCiAgICAgICAgIExhYmVsU2NvcGUqIGJyZWFrVGFy
Z2V0KGNvbnN0IElkZW50aWZpZXImKTsKICAgICAgICAgTGFiZWxTY29wZSogY29udGludWVUYXJn
ZXQoY29uc3QgSWRlbnRpZmllciYpOwogCkBAIC00NjcsNiArNDg1LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAKICAgICAgICAgVmVjdG9yPENvbnRyb2xGbG93Q29udGV4dD4gbV9zY29wZUNvbnRleHRT
dGFjazsKICAgICAgICAgVmVjdG9yPFN3aXRjaEluZm8+IG1fc3dpdGNoQ29udGV4dFN0YWNrOwor
ICAgICAgICBWZWN0b3I8Rm9ySW5Db250ZXh0PiBtX2ZvckluQ29udGV4dFN0YWNrOwogCiAgICAg
ICAgIGludCBtX25leHRHbG9iYWxJbmRleDsKICAgICAgICAgaW50IG1fbmV4dFBhcmFtZXRlcklu
ZGV4OwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIu
Y3BwIGIvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCmluZGV4IDUz
OTY0YWQuLjJjMzk2NzYgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0lu
dGVycHJldGVyLmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRl
ci5jcHAKQEAgLTI0MTcsNiArMjQxNywzMyBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpwcml2YXRl
RXhlY3V0ZShFeGVjdXRpb25GbGFnIGZsYWcsIFJlZ2lzdGVyRmlsZSogcmVnaXN0ZXJGaQogICAg
ICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9kZWxfYnlfaWQpOwogICAgICAgICBORVhUX0lO
U1RSVUNUSU9OKCk7CiAgICAgfQorICAgIERFRklORV9PUENPREUob3BfZ2V0X2J5X3BuYW1lKSB7
CisgICAgICAgIGludCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOworICAgICAgICBpbnQgYmFzZSA9
IHZQQ1syXS51Lm9wZXJhbmQ7CisgICAgICAgIGludCBwcm9wZXJ0eSA9IHZQQ1szXS51Lm9wZXJh
bmQ7CisgICAgICAgIGludCBleHBlY3RlZCA9IHZQQ1s0XS51Lm9wZXJhbmQ7CisgICAgICAgIGlu
dCBpdGVyID0gdlBDWzVdLnUub3BlcmFuZDsKKyAgICAgICAgaW50IGkgPSB2UENbNl0udS5vcGVy
YW5kOworCisgICAgICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gY2FsbEZyYW1lLT5yKGJhc2UpLmpz
VmFsdWUoKTsKKyAgICAgICAgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogaXQgPSBjYWxsRnJhbWUt
PnIoaXRlcikucHJvcGVydHlOYW1lSXRlcmF0b3IoKTsKKyAgICAgICAgSlNWYWx1ZSBzdWJzY3Jp
cHQgPSBjYWxsRnJhbWUtPnIocHJvcGVydHkpLmpzVmFsdWUoKTsKKyAgICAgICAgSlNWYWx1ZSBl
eHBlY3RlZFN1YnNjcmlwdCA9IGNhbGxGcmFtZS0+cihleHBlY3RlZCkuanNWYWx1ZSgpOworICAg
ICAgICBpbnQgaW5kZXggPSBjYWxsRnJhbWUtPnIoaSkuaSgpIC0gMTsKKyAgICAgICAgSlNWYWx1
ZSByZXN1bHQ7CisgICAgICAgIGludCBvZmZzZXQgPSAwOworICAgICAgICBpZiAoc3Vic2NyaXB0
ID09IGV4cGVjdGVkU3Vic2NyaXB0ICYmIGJhc2VWYWx1ZS5pc09iamVjdCgpICYmIChhc09iamVj
dChiYXNlVmFsdWUpLT5zdHJ1Y3R1cmUoKSA9PSBpdC0+Y2FjaGVkU3RydWN0dXJlKCkpICYmIGl0
LT5nZXRPZmZzZXQoaW5kZXgsIG9mZnNldCkpIHsKKyAgICAgICAgICAgIGNhbGxGcmFtZS0+cihk
c3QpID0gYXNPYmplY3QoYmFzZVZhbHVlKS0+Z2V0RGlyZWN0T2Zmc2V0KG9mZnNldCk7CisgICAg
ICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9nZXRfYnlfcG5hbWUpOworICAgICAgICAg
ICAgTkVYVF9JTlNUUlVDVElPTigpOworICAgICAgICB9CisgICAgICAgIElkZW50aWZpZXIgcHJv
cGVydHlOYW1lKGNhbGxGcmFtZSwgc3Vic2NyaXB0LnRvU3RyaW5nKGNhbGxGcmFtZSkpOworICAg
ICAgICByZXN1bHQgPSBiYXNlVmFsdWUuZ2V0KGNhbGxGcmFtZSwgcHJvcGVydHlOYW1lKTsKKyAg
ICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOworICAgICAgICBjYWxsRnJhbWUtPnIoZHN0KSA9
IHJlc3VsdDsKKyAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfZ2V0X2J5X3BuYW1lKTsK
KyAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOworICAgIH0KICAgICBERUZJTkVfT1BDT0RFKG9w
X2dldF9ieV92YWwpIHsKICAgICAgICAgLyogZ2V0X2J5X3ZhbCBkc3QocikgYmFzZShyKSBwcm9w
ZXJ0eShyKQogCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcCBiL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuY3BwCmluZGV4IGZhMGFjMmUuLjAwMGU0YjggMTAwNjQ0Ci0tLSBh
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
Y3BwCkBAIC0yMzksNiArMjM5LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3Mo
KQogICAgICAgICBERUZJTkVfT1Aob3BfZXFfbnVsbCkKICAgICAgICAgREVGSU5FX09QKG9wX2dl
dF9ieV9pZCkKICAgICAgICAgREVGSU5FX09QKG9wX2dldF9ieV92YWwpCisgICAgICAgIERFRklO
RV9PUChvcF9nZXRfYnlfcG5hbWUpCiAgICAgICAgIERFRklORV9PUChvcF9nZXRfZ2xvYmFsX3Zh
cikKICAgICAgICAgREVGSU5FX09QKG9wX2dldF9wbmFtZXMpCiAgICAgICAgIERFRklORV9PUChv
cF9nZXRfc2NvcGVkX3ZhcikKQEAgLTM4NSw2ICszODYsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVTbG93Q2FzZXMoKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfZXEpCiAgICAg
ICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9nZXRfYnlfaWQpCiAgICAgICAgIERFRklORV9TTE9X
Q0FTRV9PUChvcF9nZXRfYnlfdmFsKQorICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfZ2V0
X2J5X3BuYW1lKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfaW5zdGFuY2VvZikKICAg
ICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2pmYWxzZSkKICAgICAgICAgREVGSU5FX1NMT1dD
QVNFX09QKG9wX2pubGVzcykKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaCBi
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAppbmRleCA0MGQ3Zjc3Li5kMjgxYzJkIDEwMDY0NAot
LS0gYS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKKysrIGIvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5oCkBAIC00MjYsNiArNDI2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKICAgICAgICAg
dm9pZCBjb21waWxlR2V0RGlyZWN0T2Zmc2V0KFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBy
ZXN1bHRUYWcsIFJlZ2lzdGVySUQgcmVzdWx0UGF5bG9hZCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IHNpemVfdCBjYWNoZWRPZmZzZXQpOwogICAgICAgICB2b2lkIGNvbXBpbGVHZXREaXJlY3RPZmZz
ZXQoSlNPYmplY3QqIGJhc2UsIFJlZ2lzdGVySUQgdGVtcCwgUmVnaXN0ZXJJRCByZXN1bHRUYWcs
IFJlZ2lzdGVySUQgcmVzdWx0UGF5bG9hZCwgc2l6ZV90IGNhY2hlZE9mZnNldCk7CisgICAgICAg
IHZvaWQgY29tcGlsZUdldERpcmVjdE9mZnNldChSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQg
cmVzdWx0VGFnLCBSZWdpc3RlcklEIHJlc3VsdFBheWxvYWQsIFJlZ2lzdGVySUQgc3RydWN0dXJl
LCBSZWdpc3RlcklEIG9mZnNldCwgUmVnaXN0ZXJJRCBzY3JhdGNoKTsKICAgICAgICAgdm9pZCBj
b21waWxlUHV0RGlyZWN0T2Zmc2V0KFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCB2YWx1ZVRh
ZywgUmVnaXN0ZXJJRCB2YWx1ZVBheWxvYWQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3Qg
Y2FjaGVkT2Zmc2V0KTsKIAogICAgICAgICAvLyBBcml0aG1ldGljIG9wY29kZSBoZWxwZXJzCkBA
IC01MjcsNiArNTI4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKICAgICAgICAgdm9pZCBj
b21waWxlR2V0RGlyZWN0T2Zmc2V0KFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCByZXN1bHQs
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3QgY2FjaGVkT2Zmc2V0KTsKICAgICAgICAgdm9p
ZCBjb21waWxlR2V0RGlyZWN0T2Zmc2V0KEpTT2JqZWN0KiBiYXNlLCBSZWdpc3RlcklEIHRlbXAs
IFJlZ2lzdGVySUQgcmVzdWx0LCBzaXplX3QgY2FjaGVkT2Zmc2V0KTsKKyAgICAgICAgdm9pZCBj
b21waWxlR2V0RGlyZWN0T2Zmc2V0KFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCByZXN1bHQs
IFJlZ2lzdGVySUQgc3RydWN0dXJlLCBSZWdpc3RlcklEIG9mZnNldCwgUmVnaXN0ZXJJRCBzY3Jh
dGNoKTsKICAgICAgICAgdm9pZCBjb21waWxlUHV0RGlyZWN0T2Zmc2V0KFJlZ2lzdGVySUQgYmFz
ZSwgUmVnaXN0ZXJJRCB2YWx1ZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBjYWNoZWRP
ZmZzZXQpOwogCiAjaWYgUExBVEZPUk0oWDg2XzY0KQpAQCAtNjgxLDYgKzY4Myw3IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfb3BfZXFfbnVsbChJbnN0cnVjdGlvbiopOwog
ICAgICAgICB2b2lkIGVtaXRfb3BfZ2V0X2J5X2lkKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZv
aWQgZW1pdF9vcF9nZXRfYnlfdmFsKEluc3RydWN0aW9uKik7CisgICAgICAgIHZvaWQgZW1pdF9v
cF9nZXRfYnlfcG5hbWUoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2dldF9n
bG9iYWxfdmFyKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9nZXRfc2NvcGVk
X3ZhcihJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfaW5pdF9hcmd1bWVudHMo
SW5zdHJ1Y3Rpb24qKTsKQEAgLTc3MCw2ICs3NzMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9lcShJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWQoSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfcG5hbWUoSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZmFsc2UoSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3Bfam5sZXNzKEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNj
ZXNzLmNwcCBiL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKaW5kZXgg
NDI0MTExMS4uMzdiMjRlMyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3Bl
cnR5QWNjZXNzLmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3Mu
Y3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiSklUU3R1YkNhbGwuaCIKICNpbmNsdWRl
ICJKU0FycmF5LmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgorI2luY2x1ZGUgIkpTUHJvcGVy
dHlOYW1lSXRlcmF0b3IuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkxp
bmtCdWZmZXIuaCIKICNpbmNsdWRlICJSZXBhdGNoQnVmZmVyLmgiCkBAIC05MzQsNiArOTM1LDY4
IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbihTdHJ1Y3R1cmVTdHViSW5m
byogc3R1YkluZm8sIFN0cnVjdHVyZSogc3RyCiAKICNlbmRpZiAvLyAhRU5BQkxFKEpJVF9PUFRJ
TUlaRV9QUk9QRVJUWV9BQ0NFU1MpCiAKK3ZvaWQgSklUOjpjb21waWxlR2V0RGlyZWN0T2Zmc2V0
KFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCByZXN1bHRUYWcsIFJlZ2lzdGVySUQgcmVzdWx0
UGF5bG9hZCwgUmVnaXN0ZXJJRCBzdHJ1Y3R1cmUsIFJlZ2lzdGVySUQgb2Zmc2V0LCBSZWdpc3Rl
cklEIHNjcmF0Y2gpCit7CisgICAgQVNTRVJUKHNpemVvZigoKFN0cnVjdHVyZSopMCktPm1fcHJv
cGVydHlTdG9yYWdlQ2FwYWNpdHkpID09IHNpemVvZihpbnQzMl90KSk7CisgICAgQVNTRVJUKHNp
emVvZihKU09iamVjdDo6aW5saW5lU3RvcmFnZUNhcGFjaXR5KSA9PSBzaXplb2YoaW50MzJfdCkp
OworICAgIEFTU0VSVChzaXplb2YoSlNWYWx1ZSkgPT0gOCk7CisKKyAgICBKdW1wIG5vdFVzaW5n
SW5saW5lU3RvcmFnZSA9IGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHN0cnVjdHVyZSwgT0JK
RUNUX09GRlNFVE9GKFN0cnVjdHVyZSwgbV9wcm9wZXJ0eVN0b3JhZ2VDYXBhY2l0eSkpLCBJbW0z
MihKU09iamVjdDo6aW5saW5lU3RvcmFnZUNhcGFjaXR5KSk7CisgICAgbG9hZFB0cihCYXNlSW5k
ZXgoYmFzZSwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNPYmplY3QsIG1f
aW5saW5lU3RvcmFnZSkrT0JKRUNUX09GRlNFVE9GKEpTVmFsdWU6OlZhbHVlNjRVbmlvbjo6Qml0
cywgcGF5bG9hZCkpLCByZXN1bHRQYXlsb2FkKTsKKyAgICBsb2FkUHRyKEJhc2VJbmRleChiYXNl
LCBvZmZzZXQsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU09iamVjdCwgbV9pbmxpbmVT
dG9yYWdlKStPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZTo6VmFsdWU2NFVuaW9uOjpCaXRzLCB0YWcp
KSwgcmVzdWx0VGFnKTsKKyAgICBKdW1wIGZpbmlzaGVkTG9hZCA9IGp1bXAoKTsKKyAgICBub3RV
c2luZ0lubGluZVN0b3JhZ2UubGluayh0aGlzKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwg
T0JKRUNUX09GRlNFVE9GKEpTT2JqZWN0LCBtX2V4dGVybmFsU3RvcmFnZSkpLCBzdHJ1Y3R1cmUp
OworICAgIGxvYWRQdHIoQmFzZUluZGV4KHNjcmF0Y2gsIG9mZnNldCwgVGltZXNFaWdodCwgT0JK
RUNUX09GRlNFVE9GKEpTVmFsdWU6OlZhbHVlNjRVbmlvbjo6Qml0cywgcGF5bG9hZCkpLCByZXN1
bHRQYXlsb2FkKTsKKyAgICBsb2FkUHRyKEJhc2VJbmRleChzY3JhdGNoLCBvZmZzZXQsIFRpbWVz
RWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlOjpWYWx1ZTY0VW5pb246OkJpdHMsIHRhZykp
LCByZXN1bHRUYWcpOworICAgIGZpbmlzaGVkTG9hZC5saW5rKHRoaXMpOworfQorCit2b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfYnlfcG5hbWUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
K3sKKyAgICB1bnNpZ25lZCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwor
ICAgIHVuc2lnbmVkIGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAg
IHVuc2lnbmVkIHByb3BlcnR5ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAg
ICB1bnNpZ25lZCBleHBlY3RlZCA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQ7Cisg
ICAgdW5zaWduZWQgaXRlciA9IGN1cnJlbnRJbnN0cnVjdGlvbls1XS51Lm9wZXJhbmQ7CisgICAg
dW5zaWduZWQgaSA9IGN1cnJlbnRJbnN0cnVjdGlvbls2XS51Lm9wZXJhbmQ7CisKKyAgICBlbWl0
TG9hZDIocHJvcGVydHksIHJlZ1QxLCByZWdUMiwgYmFzZSwgcmVnVDMsIHJlZ1QwKTsKKyAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocHJvcGVydHksIHJlZ1QxKTsKKyAgICBhZGRTbG93
Q2FzZShicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QyLCBwYXlsb2FkRm9yKGV4cGVjdGVkKSkpOwor
CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QzKTsKKyAgICBlbWl0
TG9hZFBheWxvYWQoaXRlciwgcmVnVDEpOworICAgIAorICAgIC8vIFRlc3QgYmFzZSdzIHN0cnVj
dHVyZQorICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgT0JKRUNUX09GRlNFVE9GKEpTQ2VsbCwg
bV9zdHJ1Y3R1cmUpKSwgcmVnVDIpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaFB0cihOb3RFcXVh
bCwgcmVnVDIsIEFkZHJlc3MocmVnVDEsIE9CSkVDVF9PRkZTRVRPRihKU1Byb3BlcnR5TmFtZUl0
ZXJhdG9yLCBtX2NhY2hlZFN0cnVjdHVyZSkpKSk7CisgICAgbG9hZDMyKGFkZHJlc3NGb3IoaSks
IHJlZ1QzKTsKKyAgICBzdWIzMihJbW0zMigxKSwgcmVnVDMpOworICAgIGFkZFNsb3dDYXNlKGJy
YW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDMsIEFkZHJlc3MocmVnVDEsIE9CSkVDVF9PRkZTRVRP
RihKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLCBtX251bUNhY2hlYWJsZVNsb3RzKSkpKTsKKyAgICBj
b21waWxlR2V0RGlyZWN0T2Zmc2V0KHJlZ1QwLCByZWdUMCwgcmVnVDEsIHJlZ1QyLCByZWdUMywg
cmVnVDIpOworICAgIAorICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QwLCByZWdUMSk7Cit9CisKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfcG5hbWUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3sKKyAgICB1
bnNpZ25lZCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIHVuc2ln
bmVkIGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIHVuc2lnbmVk
IHByb3BlcnR5ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICAKKyAgICBs
aW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVyLCBwcm9wZXJ0eSk7CisgICAgbGlua1Nsb3dDYXNl
KGl0ZXIpOworICAgIGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKGl0ZXIsIGJhc2UpOworICAgIGxp
bmtTbG93Q2FzZShpdGVyKTsKKyAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CisgICAgCisgICAgSklU
U3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX2dldF9ieV92YWwpOworICAgIHN0dWJDYWxs
LmFkZEFyZ3VtZW50KGJhc2UpOworICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHByb3BlcnR5KTsK
KyAgICBzdHViQ2FsbC5jYWxsKGRzdCk7Cit9CisKICNlbHNlIC8vIFVTRShKU1ZBTFVFMzJfNjQp
CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKQEAgLTk2Nyw2ICsxMDMwLDQ4IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92
YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CiB9CiAKK3ZvaWQgSklUOjplbWl0X29wX2dldF9ieV9wbmFtZShJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIHVuc2lnbmVkIGRzdCA9IGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgdW5zaWduZWQgYmFzZSA9IGN1cnJlbnRJbnN0
cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgdW5zaWduZWQgcHJvcGVydHkgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIHVuc2lnbmVkIGV4cGVjdGVkID0gY3VycmVudElu
c3RydWN0aW9uWzRdLnUub3BlcmFuZDsKKyAgICB1bnNpZ25lZCBpdGVyID0gY3VycmVudEluc3Ry
dWN0aW9uWzVdLnUub3BlcmFuZDsKKyAgICB1bnNpZ25lZCBpID0gY3VycmVudEluc3RydWN0aW9u
WzZdLnUub3BlcmFuZDsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJl
Z1QwKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QwLCBhZGRyZXNz
Rm9yKGV4cGVjdGVkKSkpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2UsIHJlZ1Qw
LCBpdGVyLCByZWdUMSk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBi
YXNlKTsKKworICAgIC8vIFRlc3QgYmFzZSdzIHN0cnVjdHVyZQorICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMCwgT0JKRUNUX09GRlNFVE9GKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpKSwgcmVnVDIpOwor
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDIsIEFkZHJlc3MocmVnVDEs
IE9CSkVDVF9PRkZTRVRPRihKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLCBtX2NhY2hlZFN0cnVjdHVy
ZSkpKSk7CisgICAgbG9hZDMyKGFkZHJlc3NGb3IoaSksIHJlZ1QzKTsKKyAgICBzdWIzMihJbW0z
MigxKSwgcmVnVDMpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVn
VDMsIEFkZHJlc3MocmVnVDEsIE9CSkVDVF9PRkZTRVRPRihKU1Byb3BlcnR5TmFtZUl0ZXJhdG9y
LCBtX251bUNhY2hlYWJsZVNsb3RzKSkpKTsKKyAgICBjb21waWxlR2V0RGlyZWN0T2Zmc2V0KHJl
Z1QwLCByZWdUMCwgcmVnVDIsIHJlZ1QzLCByZWdUMSk7CisKKyAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwgcmVnVDApOworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3Bu
YW1lKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit7CisgICAgdW5zaWduZWQgZHN0ID0gY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZDsKKyAgICB1bnNpZ25lZCBiYXNlID0gY3VycmVudEluc3RydWN0aW9u
WzJdLnUub3BlcmFuZDsKKyAgICB1bnNpZ25lZCBwcm9wZXJ0eSA9IGN1cnJlbnRJbnN0cnVjdGlv
blszXS51Lm9wZXJhbmQ7CisKKyAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CisgICAgbGlua1Nsb3dD
YXNlSWZOb3RKU0NlbGwoaXRlciwgYmFzZSk7CisgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOworICAg
IGxpbmtTbG93Q2FzZShpdGVyKTsKKworICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0
aV9vcF9nZXRfYnlfdmFsKTsKKyAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChiYXNlLCByZWdUMik7
CisgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQocHJvcGVydHksIHJlZ1QyKTsKKyAgICBzdHViQ2Fs
bC5jYWxsKGRzdCk7Cit9CisKIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICB1bnNpZ25lZCBiYXNlID0gY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZDsKQEAgLTEzNTEsNiArMTQ1NiwyMCBAQCB2b2lkIEpJVDo6
Y29tcGlsZUdldERpcmVjdE9mZnNldChKU09iamVjdCogYmFzZSwgUmVnaXN0ZXJJRCB0ZW1wLCBS
ZWdpc3RlcklEIHJlcwogICAgIH0gCiB9CiAKK3ZvaWQgSklUOjpjb21waWxlR2V0RGlyZWN0T2Zm
c2V0KFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCByZXN1bHQsIFJlZ2lzdGVySUQgc3RydWN0
dXJlLCBSZWdpc3RlcklEIG9mZnNldCwgUmVnaXN0ZXJJRCBzY3JhdGNoKQoreworICAgIEFTU0VS
VChzaXplb2YoKChTdHJ1Y3R1cmUqKTApLT5tX3Byb3BlcnR5U3RvcmFnZUNhcGFjaXR5KSA9PSBz
aXplb2YoaW50MzJfdCkpOworICAgIEFTU0VSVChzaXplb2YoSlNPYmplY3Q6OmlubGluZVN0b3Jh
Z2VDYXBhY2l0eSkgPT0gc2l6ZW9mKGludDMyX3QpKTsKKworICAgIEp1bXAgbm90VXNpbmdJbmxp
bmVTdG9yYWdlID0gYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3Moc3RydWN0dXJlLCBPQkpFQ1Rf
T0ZGU0VUT0YoU3RydWN0dXJlLCBtX3Byb3BlcnR5U3RvcmFnZUNhcGFjaXR5KSksIEltbTMyKEpT
T2JqZWN0OjppbmxpbmVTdG9yYWdlQ2FwYWNpdHkpKTsKKyAgICBsb2FkUHRyKEJhc2VJbmRleChi
YXNlLCBvZmZzZXQsIFNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoSlNPYmplY3QsIG1faW5saW5l
U3RvcmFnZSkpLCByZXN1bHQpOworICAgIEp1bXAgZmluaXNoZWRMb2FkID0ganVtcCgpOworICAg
IG5vdFVzaW5nSW5saW5lU3RvcmFnZS5saW5rKHRoaXMpOworICAgIGxvYWRQdHIoQWRkcmVzcyhi
YXNlLCBPQkpFQ1RfT0ZGU0VUT0YoSlNPYmplY3QsIG1fZXh0ZXJuYWxTdG9yYWdlKSksIHNjcmF0
Y2gpOworICAgIGxvYWRQdHIoQmFzZUluZGV4KHNjcmF0Y2gsIG9mZnNldCwgU2NhbGVQdHIsIDAp
LCByZXN1bHQpOyAgICAKKyAgICBmaW5pc2hlZExvYWQubGluayh0aGlzKTsKK30KKwogdm9pZCBK
SVQ6OnRlc3RQcm90b3R5cGUoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEp1bXBMaXN0JiBmYWlsdXJl
Q2FzZXMpCiB7CiAgICAgaWYgKHN0cnVjdHVyZS0+bV9wcm90b3R5cGUuaXNOdWxsKCkpCmRpZmYg
LS1naXQgYS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwIGIvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFN0dWJzLmNwcAppbmRleCBjOTk5NjE4Li5hOGQ5MDA0IDEwMDY0NAotLS0gYS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRT
dHVicy5jcHAKQEAgLTE4ODQsNiArMTg4NCwyOCBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNv
ZGVkSlNWYWx1ZSwgb3BfZ2V0X2J5X3ZhbF9ieXRlX2FycmF5KQogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUocmVzdWx0KTsKIH0KIAorREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFs
dWUsIG9wX2dldF9ieV9wbmFtZSkKK3sKKyAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tG
cmFtZSk7CisgICAgCisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxG
cmFtZTsKKworICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFs
dWUoKTsKKyAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IHN0YWNrRnJhbWUuYXJnc1sxXS5qc1ZhbHVl
KCk7CisgICAgSlNWYWx1ZSBleHBlY3RlZFN1YnNjcmlwdCA9IHN0YWNrRnJhbWUuYXJnc1syXS5q
c1ZhbHVlKCk7CisgICAgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogaXQgPSBzdGF0aWNfY2FzdDxK
U1Byb3BlcnR5TmFtZUl0ZXJhdG9yKj4oc3RhY2tGcmFtZS5hcmdzWzNdLmpzVmFsdWUoKS5hc0Nl
bGwoKSk7CisgICAgaW50IGluZGV4ID0gc3RhY2tGcmFtZS5hcmdzWzRdLmludDMyKCkgLSAxOwor
ICAgIEpTVmFsdWUgcmVzdWx0OworICAgIGludCBvZmZzZXQgPSAwOworICAgIGlmIChzdWJzY3Jp
cHQgPT0gZXhwZWN0ZWRTdWJzY3JpcHQgJiYgYmFzZVZhbHVlLmlzT2JqZWN0KCkgJiYgKGFzT2Jq
ZWN0KGJhc2VWYWx1ZSktPnN0cnVjdHVyZSgpID09IGl0LT5jYWNoZWRTdHJ1Y3R1cmUoKSkgJiYg
aXQtPmdldE9mZnNldChpbmRleCwgb2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShhc09iamVjdChiYXNlVmFsdWUpLT5nZXREaXJlY3RPZmZzZXQob2Zmc2V0KSk7CisKKyAg
ICBJZGVudGlmaWVyIHByb3BlcnR5TmFtZShjYWxsRnJhbWUsIHN1YnNjcmlwdC50b1N0cmluZyhj
YWxsRnJhbWUpKTsKKyAgICByZXN1bHQgPSBiYXNlVmFsdWUuZ2V0KGNhbGxGcmFtZSwgcHJvcGVy
dHlOYW1lKTsKKyAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShyZXN1bHQpOworfQorCiBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1
ZSwgb3Bfc3ViKQogewogICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKZGlm
ZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oIGIvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFN0dWJzLmgKaW5kZXggNjk3NzZjYi4uZDFmY2Y3YiAxMDA2NDQKLS0tIGEvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFN0dWJzLmgKKysrIGIvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJz
LmgKQEAgLTI3Niw2ICsyNzYsNyBAQCBleHRlcm4gIkMiIHsKICAgICBFbmNvZGVkSlNWYWx1ZSBK
SVRfU1RVQiBjdGlfb3BfZ2V0X2J5X3ZhbChTVFVCX0FSR1NfREVDTEFSQVRJT04pOwogICAgIEVu
Y29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9nZXRfYnlfdmFsX2J5dGVfYXJyYXkoU1RVQl9B
UkdTX0RFQ0xBUkFUSU9OKTsKICAgICBFbmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlfb3BfZ2V0
X2J5X3ZhbF9zdHJpbmcoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKKyAgICBFbmNvZGVkSlNWYWx1
ZSBKSVRfU1RVQiBjdGlfb3BfZ2V0X2J5X3BuYW1lKFNUVUJfQVJHU19ERUNMQVJBVElPTik7CiAg
ICAgRW5jb2RlZEpTVmFsdWUgSklUX1NUVUIgY3RpX29wX2luKFNUVUJfQVJHU19ERUNMQVJBVElP
Tik7CiAgICAgRW5jb2RlZEpTVmFsdWUgSklUX1NUVUIgY3RpX29wX2luc3RhbmNlb2YoU1RVQl9B
UkdTX0RFQ0xBUkFUSU9OKTsKICAgICBFbmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlfb3BfaXNf
Ym9vbGVhbihTVFVCX0FSR1NfREVDTEFSQVRJT04pOwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL05vZGVzLmNwcCBiL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5jcHAKaW5k
ZXggYjFlMzE3ZS4uNDUwMDlkYyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05v
ZGVzLmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuY3BwCkBAIC0xNDc3LDYg
KzE0NzcsNyBAQCBSZWdpc3RlcklEKiBGb3JJbk5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdl
bmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkcwogICAgIGdlbmVyYXRvci5lbWl0Tm9k
ZShiYXNlLmdldCgpLCBtX2V4cHIpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBpID0gZ2VuZXJh
dG9yLm5ld1RlbXBvcmFyeSgpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzaXplID0gZ2VuZXJh
dG9yLm5ld1RlbXBvcmFyeSgpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBleHBlY3RlZFN1YnNj
cmlwdDsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gaXRlciA9IGdlbmVyYXRvci5lbWl0R2V0UHJv
cGVydHlOYW1lcyhnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGJhc2UuZ2V0KCksIGkuZ2V0KCks
IHNpemUuZ2V0KCksIHNjb3BlLT5icmVha1RhcmdldCgpKTsKICAgICBnZW5lcmF0b3IuZW1pdEp1
bXAoc2NvcGUtPmNvbnRpbnVlVGFyZ2V0KCkpOwogCkBAIC0xNDg0LDYgKzE0ODUsNyBAQCBSZWdp
c3RlcklEKiBGb3JJbk5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJh
dG9yLCBSZWdpc3RlcklEKiBkcwogICAgIGdlbmVyYXRvci5lbWl0TGFiZWwobG9vcFN0YXJ0Lmdl
dCgpKTsKIAogICAgIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFtZTsKKyAgICBib29sIG9wdGltaXpl
ZEZvcmluQWNjZXNzID0gZmFsc2U7CiAgICAgaWYgKG1fbGV4cHItPmlzUmVzb2x2ZU5vZGUoKSkg
ewogICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IHN0YXRpY19jYXN0PFJlc29sdmVO
b2RlKj4obV9sZXhwciktPmlkZW50aWZpZXIoKTsKICAgICAgICAgcHJvcGVydHlOYW1lID0gZ2Vu
ZXJhdG9yLnJlZ2lzdGVyRm9yKGlkZW50KTsKQEAgLTE0OTQsNiArMTQ5NiwxMCBAQCBSZWdpc3Rl
cklEKiBGb3JJbk5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9y
LCBSZWdpc3RlcklEKiBkcwogCiAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25J
bmZvKGRpdm90KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsKICAgICAgICAgICAgIGdl
bmVyYXRvci5lbWl0UHV0QnlJZChiYXNlLCBpZGVudCwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIGV4cGVjdGVkU3Vic2NyaXB0ID0gZ2VuZXJhdG9yLmVtaXRN
b3ZlKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAg
IGdlbmVyYXRvci5wdXNoT3B0aW1pc2VkRm9ySW4oZXhwZWN0ZWRTdWJzY3JpcHQuZ2V0KCksIGl0
ZXIuZ2V0KCksIGkuZ2V0KCksIHByb3BlcnR5TmFtZSk7CisgICAgICAgICAgICBvcHRpbWl6ZWRG
b3JpbkFjY2VzcyA9IHRydWU7CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKG1fbGV4cHItPmlz
RG90QWNjZXNzb3JOb2RlKCkpIHsKICAgICAgICAgRG90QWNjZXNzb3JOb2RlKiBhc3NpZ25Ob2Rl
ID0gc3RhdGljX2Nhc3Q8RG90QWNjZXNzb3JOb2RlKj4obV9sZXhwcik7CkBAIC0xNTE4LDYgKzE1
MjQsOSBAQCBSZWdpc3RlcklEKiBGb3JJbk5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVy
YXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkcwogCiAgICAgZ2VuZXJhdG9yLmVtaXROb2Rl
KGRzdCwgbV9zdGF0ZW1lbnQpOwogCisgICAgaWYgKG9wdGltaXplZEZvcmluQWNjZXNzKQorICAg
ICAgICBnZW5lcmF0b3IucG9wT3B0aW1pc2VkRm9ySW4oKTsKKwogICAgIGdlbmVyYXRvci5lbWl0
TGFiZWwoc2NvcGUtPmNvbnRpbnVlVGFyZ2V0KCkpOwogICAgIGdlbmVyYXRvci5lbWl0TmV4dFBy
b3BlcnR5TmFtZShwcm9wZXJ0eU5hbWUsIGJhc2UuZ2V0KCksIGkuZ2V0KCksIHNpemUuZ2V0KCks
IGl0ZXIuZ2V0KCksIGxvb3BTdGFydC5nZXQoKSk7CiAgICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hv
b2soV2lsbEV4ZWN1dGVTdGF0ZW1lbnQsIGZpcnN0TGluZSgpLCBsYXN0TGluZSgpKTsKZGlmZiAt
LWdpdCBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaCBiL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNPYmplY3QuaAppbmRleCAxZGJhYjk0Li41YTg5YzQwIDEwMDY0NAotLS0gYS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKKysrIGIvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU09iamVjdC5oCkBAIC0yMDIsOCArMjAyLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHZvaWQgYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VJbmxpbmUoc2l6ZV90IG9sZFNpemUsIHNp
emVfdCBuZXdTaXplKTsKICAgICAgICAgYm9vbCBpc1VzaW5nSW5saW5lU3RvcmFnZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RydWN0dXJlLT5pc1VzaW5nSW5saW5lU3RvcmFnZSgpOyB9CiAKLSAgICAg
ICAgc3RhdGljIGNvbnN0IHNpemVfdCBpbmxpbmVTdG9yYWdlQ2FwYWNpdHkgPSBzaXplb2YoRW5j
b2RlZEpTVmFsdWUpID09IDIgKiBzaXplb2Yodm9pZCopID8gNCA6IDM7Ci0gICAgICAgIHN0YXRp
YyBjb25zdCBzaXplX3Qgbm9uSW5saW5lQmFzZVN0b3JhZ2VDYXBhY2l0eSA9IDE2OworICAgICAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW5saW5lU3RvcmFnZUNhcGFjaXR5ID0gc2l6ZW9mKEVu
Y29kZWRKU1ZhbHVlKSA9PSAyICogc2l6ZW9mKHZvaWQqKSA/IDQgOiAzOworICAgICAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgbm9uSW5saW5lQmFzZVN0b3JhZ2VDYXBhY2l0eSA9IDE2OwogCiAg
ICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gY3JlYXRlU3RydWN0dXJlKEpTVmFs
dWUgcHJvdG90eXBlKQogICAgICAgICB7CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcAppbmRleCAyY2Q5Zjc1Li42ZmQwMzQ0IDEwMDY0NAot
LS0gYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwCisr
KyBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAKQEAg
LTQzLDcgKzQzLDEyIEBAIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIEpTUHJvcGVydHlOYW1lSXRl
cmF0b3I6OmNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0CiAKICAgICBQcm9wZXJ0eU5h
bWVBcnJheSBwcm9wZXJ0eU5hbWVzKGV4ZWMpOwogICAgIG8tPmdldFByb3BlcnR5TmFtZXMoZXhl
YywgcHJvcGVydHlOYW1lcyk7Ci0gICAgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcioganNQcm9wZXJ0
eU5hbWVJdGVyYXRvciA9IG5ldyAoZXhlYykgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcihleGVjLCBw
cm9wZXJ0eU5hbWVzLmRhdGEoKSk7CisgICAgc2l6ZV90IG51bUNhY2hlYWJsZVNsb3RzID0gMDsK
KyAgICBpZiAoIW8tPnN0cnVjdHVyZSgpLT5oYXNOb25FbnVtZXJhYmxlUHJvcGVydGllcygpICYm
ICFvLT5zdHJ1Y3R1cmUoKS0+aGFzQW5vbnltb3VzU2xvdHMoKSAmJgorICAgICAgICAhby0+c3Ry
dWN0dXJlKCktPmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkgJiYgIW8tPnN0cnVjdHVyZSgpLT50
eXBlSW5mbygpLm92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMoKSkKKyAgICAgICAgbnVtQ2FjaGVh
YmxlU2xvdHMgPSBvLT5zdHJ1Y3R1cmUoKS0+cHJvcGVydHlTdG9yYWdlU2l6ZSgpOworCisgICAg
SlNQcm9wZXJ0eU5hbWVJdGVyYXRvcioganNQcm9wZXJ0eU5hbWVJdGVyYXRvciA9IG5ldyAoZXhl
YykgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcihleGVjLCBwcm9wZXJ0eU5hbWVzLmRhdGEoKSwgbnVt
Q2FjaGVhYmxlU2xvdHMpOwogCiAgICAgaWYgKG8tPnN0cnVjdHVyZSgpLT5pc0RpY3Rpb25hcnko
KSkKICAgICAgICAgcmV0dXJuIGpzUHJvcGVydHlOYW1lSXRlcmF0b3I7CmRpZmYgLS1naXQgYS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuaCBiL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oCmluZGV4IDE0ZDg4MmIuLjUy
OWFlOGIgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJ
dGVyYXRvci5oCisrKyBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVy
YXRvci5oCkBAIC01NCw2ICs1NCwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2aXJ0
dWFsIHZvaWQgbWFya0NoaWxkcmVuKE1hcmtTdGFjayYpOwogCisgICAgICAgIGJvb2wgZ2V0T2Zm
c2V0KHNpemVfdCBpLCBpbnQmIG9mZnNldCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGkg
Pj0gbV9udW1DYWNoZWFibGVTbG90cykKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICBvZmZzZXQgPSBpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IH0KKwogICAgICAgICBKU1ZhbHVlIGdldChFeGVjU3RhdGUqLCBKU09iamVjdCosIHNpemVfdCBp
KTsKICAgICAgICAgc2l6ZV90IHNpemUoKSB7IHJldHVybiBtX2pzU3RyaW5nc1NpemU7IH0KIApA
QCAtNjQsMTcgKzcyLDE5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBTdHJ1Y3R1cmVDaGFp
biogY2FjaGVkUHJvdG90eXBlQ2hhaW4oKSB7IHJldHVybiBtX2NhY2hlZFByb3RvdHlwZUNoYWlu
LmdldCgpOyB9CiAKICAgICBwcml2YXRlOgotICAgICAgICBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9y
KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5RGF0YSogcHJvcGVydHlOYW1lQXJyYXlEYXRh
KTsKKyAgICAgICAgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcihFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWVBcnJheURhdGEqIHByb3BlcnR5TmFtZUFycmF5RGF0YSwgc2l6ZV90IG51bUNhY2hlYWJsZVNs
b3QpOwogCiAgICAgICAgIFN0cnVjdHVyZSogbV9jYWNoZWRTdHJ1Y3R1cmU7CiAgICAgICAgIFJl
ZlB0cjxTdHJ1Y3R1cmVDaGFpbj4gbV9jYWNoZWRQcm90b3R5cGVDaGFpbjsKLSAgICAgICAgc2l6
ZV90IG1fanNTdHJpbmdzU2l6ZTsKKyAgICAgICAgdWludDMyX3QgbV9udW1DYWNoZWFibGVTbG90
czsKKyAgICAgICAgdWludDMyX3QgbV9qc1N0cmluZ3NTaXplOwogICAgICAgICBPd25BcnJheVB0
cjxKU1ZhbHVlPiBtX2pzU3RyaW5nczsKICAgICB9OwogCi1pbmxpbmUgSlNQcm9wZXJ0eU5hbWVJ
dGVyYXRvcjo6SlNQcm9wZXJ0eU5hbWVJdGVyYXRvcihFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZUFycmF5RGF0YSogcHJvcGVydHlOYW1lQXJyYXlEYXRhKQoraW5saW5lIEpTUHJvcGVydHlO
YW1lSXRlcmF0b3I6OkpTUHJvcGVydHlOYW1lSXRlcmF0b3IoRXhlY1N0YXRlKiBleGVjLCBQcm9w
ZXJ0eU5hbWVBcnJheURhdGEqIHByb3BlcnR5TmFtZUFycmF5RGF0YSwgc2l6ZV90IG51bUNhY2hl
YWJsZVNsb3RzKQogICAgIDogSlNDZWxsKGV4ZWMtPmdsb2JhbERhdGEoKS5wcm9wZXJ0eU5hbWVJ
dGVyYXRvclN0cnVjdHVyZS5nZXQoKSkKICAgICAsIG1fY2FjaGVkU3RydWN0dXJlKDApCisgICAg
LCBtX251bUNhY2hlYWJsZVNsb3RzKG51bUNhY2hlYWJsZVNsb3RzKQogICAgICwgbV9qc1N0cmlu
Z3NTaXplKHByb3BlcnR5TmFtZUFycmF5RGF0YS0+cHJvcGVydHlOYW1lVmVjdG9yKCkuc2l6ZSgp
KQogICAgICwgbV9qc1N0cmluZ3MobmV3IEpTVmFsdWVbbV9qc1N0cmluZ3NTaXplXSkKIHsKZGlm
ZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5oIGIvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1ZhbHVlLmgKaW5kZXggMTA2M2NkYy4uY2FmMjcwYyAxMDA2NDQKLS0tIGEv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmgKKysrIGIvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1ZhbHVlLmgKQEAgLTIyNSwxNiArMjI1LDE2IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBKU09iamVjdCogc3ludGhlc2l6ZU9iamVjdChFeGVjU3RhdGUqKSBjb25zdDsKIAogI2lm
IFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIHVuaW9uIHsKKyAgICAgICAgdW5pb24gVmFsdWU2
NFVuaW9uIHsKICAgICAgICAgICAgIEVuY29kZWRKU1ZhbHVlIGFzRW5jb2RlZEpTVmFsdWU7CiAg
ICAgICAgICAgICBkb3VibGUgYXNEb3VibGU7CiAjaWYgUExBVEZPUk0oQklHX0VORElBTikKLSAg
ICAgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICBzdHJ1Y3QgQml0cyB7CiAgICAgICAgICAg
ICAgICAgaW50MzJfdCB0YWc7CiAgICAgICAgICAgICAgICAgaW50MzJfdCBwYXlsb2FkOwogICAg
ICAgICAgICAgfSBhc0JpdHM7CiAjZWxzZQotICAgICAgICAgICAgc3RydWN0IHsKKyAgICAgICAg
ICAgIHN0cnVjdCBCaXRzIHsKICAgICAgICAgICAgICAgICBpbnQzMl90IHBheWxvYWQ7CiAgICAg
ICAgICAgICAgICAgaW50MzJfdCB0YWc7CiAgICAgICAgICAgICB9IGFzQml0czsKZGlmZiAtLWdp
dCBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcCBiL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlLmNwcAppbmRleCBhMTEwNTBmLi42NWI2MmY5IDEwMDY0NAotLS0g
YS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKKysrIGIvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCkBAIC0zNzUsNiArMzc1LDcgQEAgUGFzc1JlZlB0cjxT
dHJ1Y3R1cmU+IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uKFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBjb24KICAgICB0cmFuc2l0aW9uLT5tX3NwZWNpZmljVmFsdWVJblByZXZpb3VzID0g
c3BlY2lmaWNWYWx1ZTsKICAgICB0cmFuc2l0aW9uLT5tX3Byb3BlcnR5U3RvcmFnZUNhcGFjaXR5
ID0gc3RydWN0dXJlLT5tX3Byb3BlcnR5U3RvcmFnZUNhcGFjaXR5OwogICAgIHRyYW5zaXRpb24t
Pm1faGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcyA9IHN0cnVjdHVyZS0+bV9oYXNHZXR0ZXJTZXR0
ZXJQcm9wZXJ0aWVzOworICAgIHRyYW5zaXRpb24tPm1faGFzTm9uRW51bWVyYWJsZVByb3BlcnRp
ZXMgPSBzdHJ1Y3R1cmUtPm1faGFzTm9uRW51bWVyYWJsZVByb3BlcnRpZXM7CiAKICAgICBpZiAo
c3RydWN0dXJlLT5tX3Byb3BlcnR5VGFibGUpIHsKICAgICAgICAgaWYgKHN0cnVjdHVyZS0+bV9p
c1Bpbm5lZFByb3BlcnR5VGFibGUpCkBAIC00MTcsNiArNDE4LDcgQEAgUGFzc1JlZlB0cjxTdHJ1
Y3R1cmU+IFN0cnVjdHVyZTo6Y2hhbmdlUHJvdG90eXBlVHJhbnNpdGlvbihTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwKIAogICAgIHRyYW5zaXRpb24tPm1fcHJvcGVydHlTdG9yYWdlQ2FwYWNpdHkgPSBz
dHJ1Y3R1cmUtPm1fcHJvcGVydHlTdG9yYWdlQ2FwYWNpdHk7CiAgICAgdHJhbnNpdGlvbi0+bV9o
YXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzID0gc3RydWN0dXJlLT5tX2hhc0dldHRlclNldHRlclBy
b3BlcnRpZXM7CisgICAgdHJhbnNpdGlvbi0+bV9oYXNOb25FbnVtZXJhYmxlUHJvcGVydGllcyA9
IHN0cnVjdHVyZS0+bV9oYXNOb25FbnVtZXJhYmxlUHJvcGVydGllczsKIAogICAgIC8vIERvbid0
IHNldCBtX29mZnNldCwgYXMgb25lIGNhbiBub3QgdHJhbnNpdGlvbiB0byB0aGlzLgogCkBAIC00
MzMsNiArNDM1LDcgQEAgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IFN0cnVjdHVyZTo6ZGVzcGVjaWZ5
RnVuY3Rpb25UcmFuc2l0aW9uKFN0cnVjdHVyZSogc3RydWN0dXIKIAogICAgIHRyYW5zaXRpb24t
Pm1fcHJvcGVydHlTdG9yYWdlQ2FwYWNpdHkgPSBzdHJ1Y3R1cmUtPm1fcHJvcGVydHlTdG9yYWdl
Q2FwYWNpdHk7CiAgICAgdHJhbnNpdGlvbi0+bV9oYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzID0g
c3RydWN0dXJlLT5tX2hhc0dldHRlclNldHRlclByb3BlcnRpZXM7CisgICAgdHJhbnNpdGlvbi0+
bV9oYXNOb25FbnVtZXJhYmxlUHJvcGVydGllcyA9IHN0cnVjdHVyZS0+bV9oYXNOb25FbnVtZXJh
YmxlUHJvcGVydGllczsKIAogICAgIC8vIERvbid0IHNldCBtX29mZnNldCwgYXMgb25lIGNhbiBu
b3QgdHJhbnNpdGlvbiB0byB0aGlzLgogCkBAIC00NjQsNiArNDY3LDcgQEAgUGFzc1JlZlB0cjxT
dHJ1Y3R1cmU+IFN0cnVjdHVyZTo6YWRkQW5vbnltb3VzU2xvdHNUcmFuc2l0aW9uKFN0cnVjdHVy
ZSogc3RydWN0dXIKICAgICB0cmFuc2l0aW9uLT5tX3NwZWNpZmljVmFsdWVJblByZXZpb3VzID0g
MDsKICAgICB0cmFuc2l0aW9uLT5tX3Byb3BlcnR5U3RvcmFnZUNhcGFjaXR5ID0gc3RydWN0dXJl
LT5tX3Byb3BlcnR5U3RvcmFnZUNhcGFjaXR5OwogICAgIHRyYW5zaXRpb24tPm1faGFzR2V0dGVy
U2V0dGVyUHJvcGVydGllcyA9IHN0cnVjdHVyZS0+bV9oYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVz
OworICAgIHRyYW5zaXRpb24tPm1faGFzTm9uRW51bWVyYWJsZVByb3BlcnRpZXMgPSBzdHJ1Y3R1
cmUtPm1faGFzTm9uRW51bWVyYWJsZVByb3BlcnRpZXM7CiAKICAgICBpZiAoc3RydWN0dXJlLT5t
X3Byb3BlcnR5VGFibGUpIHsKICAgICAgICAgaWYgKHN0cnVjdHVyZS0+bV9pc1Bpbm5lZFByb3Bl
cnR5VGFibGUpCkBAIC00OTIsNiArNDk2LDcgQEAgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IFN0cnVj
dHVyZTo6Z2V0dGVyU2V0dGVyVHJhbnNpdGlvbihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICBS
ZWZQdHI8U3RydWN0dXJlPiB0cmFuc2l0aW9uID0gY3JlYXRlKHN0cnVjdHVyZS0+c3RvcmVkUHJv
dG90eXBlKCksIHN0cnVjdHVyZS0+dHlwZUluZm8oKSk7CiAgICAgdHJhbnNpdGlvbi0+bV9wcm9w
ZXJ0eVN0b3JhZ2VDYXBhY2l0eSA9IHN0cnVjdHVyZS0+bV9wcm9wZXJ0eVN0b3JhZ2VDYXBhY2l0
eTsKICAgICB0cmFuc2l0aW9uLT5tX2hhc0dldHRlclNldHRlclByb3BlcnRpZXMgPSB0cmFuc2l0
aW9uLT5tX2hhc0dldHRlclNldHRlclByb3BlcnRpZXM7CisgICAgdHJhbnNpdGlvbi0+bV9oYXNO
b25FbnVtZXJhYmxlUHJvcGVydGllcyA9IHN0cnVjdHVyZS0+bV9oYXNOb25FbnVtZXJhYmxlUHJv
cGVydGllczsKIAogICAgIC8vIERvbid0IHNldCBtX29mZnNldCwgYXMgb25lIGNhbiBub3QgdHJh
bnNpdGlvbiB0byB0aGlzLgogCkBAIC01MTAsNiArNTE1LDcgQEAgUGFzc1JlZlB0cjxTdHJ1Y3R1
cmU+IFN0cnVjdHVyZTo6dG9EaWN0aW9uYXJ5VHJhbnNpdGlvbihTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgRGkKICAgICB0cmFuc2l0aW9uLT5tX2RpY3Rpb25hcnlLaW5kID0ga2luZDsKICAgICB0cmFu
c2l0aW9uLT5tX3Byb3BlcnR5U3RvcmFnZUNhcGFjaXR5ID0gc3RydWN0dXJlLT5tX3Byb3BlcnR5
U3RvcmFnZUNhcGFjaXR5OwogICAgIHRyYW5zaXRpb24tPm1faGFzR2V0dGVyU2V0dGVyUHJvcGVy
dGllcyA9IHN0cnVjdHVyZS0+bV9oYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzOworICAgIHRyYW5z
aXRpb24tPm1faGFzTm9uRW51bWVyYWJsZVByb3BlcnRpZXMgPSBzdHJ1Y3R1cmUtPm1faGFzTm9u
RW51bWVyYWJsZVByb3BlcnRpZXM7CiAgICAgCiAgICAgc3RydWN0dXJlLT5tYXRlcmlhbGl6ZVBy
b3BlcnR5TWFwSWZOZWNlc3NhcnkoKTsKICAgICB0cmFuc2l0aW9uLT5tX3Byb3BlcnR5VGFibGUg
PSBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlKCk7CkBAIC01NTAsNiArNTU2LDkgQEAgc2l6
ZV90IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihjb25zdCBJZGVudGlm
aWVyJiBwcm9wZXJ0eU5hbWUsIHUKICAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nh
cnkoKTsKIAogICAgIG1faXNQaW5uZWRQcm9wZXJ0eVRhYmxlID0gdHJ1ZTsKKyAgICBpZiAoYXR0
cmlidXRlcyAmIERvbnRFbnVtKQorICAgICAgICBtX2hhc05vbkVudW1lcmFibGVQcm9wZXJ0aWVz
ID0gdHJ1ZTsKKwogICAgIHNpemVfdCBvZmZzZXQgPSBwdXQocHJvcGVydHlOYW1lLCBhdHRyaWJ1
dGVzLCBzcGVjaWZpY1ZhbHVlKTsKICAgICBpZiAocHJvcGVydHlTdG9yYWdlU2l6ZSgpID4gcHJv
cGVydHlTdG9yYWdlQ2FwYWNpdHkoKSkKICAgICAgICAgZ3Jvd1Byb3BlcnR5U3RvcmFnZUNhcGFj
aXR5KCk7CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oIGIv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAppbmRleCAyNDk2YzFiLi5mMzU1YzUz
IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCisrKyBiL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKQEAgLTk1LDggKzk1LDggQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIFN0cnVjdHVyZSogcHJldmlvdXNJRCgpIGNvbnN0IHsgcmV0dXJu
IG1fcHJldmlvdXMuZ2V0KCk7IH0KIAogICAgICAgICB2b2lkIGdyb3dQcm9wZXJ0eVN0b3JhZ2VD
YXBhY2l0eSgpOwotICAgICAgICBzaXplX3QgcHJvcGVydHlTdG9yYWdlQ2FwYWNpdHkoKSBjb25z
dCB7IHJldHVybiBtX3Byb3BlcnR5U3RvcmFnZUNhcGFjaXR5OyB9Ci0gICAgICAgIHNpemVfdCBw
cm9wZXJ0eVN0b3JhZ2VTaXplKCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0eVRhYmxlID8gbV9w
cm9wZXJ0eVRhYmxlLT5rZXlDb3VudCArIG1fcHJvcGVydHlUYWJsZS0+YW5vbnltb3VzU2xvdENv
dW50ICsgKG1fcHJvcGVydHlUYWJsZS0+ZGVsZXRlZE9mZnNldHMgPyBtX3Byb3BlcnR5VGFibGUt
PmRlbGV0ZWRPZmZzZXRzLT5zaXplKCkgOiAwKSA6IG1fb2Zmc2V0ICsgMTsgfQorICAgICAgICB1
bnNpZ25lZCBwcm9wZXJ0eVN0b3JhZ2VDYXBhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVy
dHlTdG9yYWdlQ2FwYWNpdHk7IH0KKyAgICAgICAgdW5zaWduZWQgcHJvcGVydHlTdG9yYWdlU2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydHlUYWJsZSA/IG1fcHJvcGVydHlUYWJsZS0+a2V5
Q291bnQgKyBtX3Byb3BlcnR5VGFibGUtPmFub255bW91c1Nsb3RDb3VudCArIChtX3Byb3BlcnR5
VGFibGUtPmRlbGV0ZWRPZmZzZXRzID8gbV9wcm9wZXJ0eVRhYmxlLT5kZWxldGVkT2Zmc2V0cy0+
c2l6ZSgpIDogMCkgOiBtX29mZnNldCArIDE7IH0KICAgICAgICAgYm9vbCBpc1VzaW5nSW5saW5l
U3RvcmFnZSgpIGNvbnN0OwogCiAgICAgICAgIHNpemVfdCBnZXQoY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lKTsKQEAgLTExOSw2ICsxMTksMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIGJvb2wgaGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcygpIGNvbnN0IHsgcmV0dXJuIG1faGFz
R2V0dGVyU2V0dGVyUHJvcGVydGllczsgfQogICAgICAgICB2b2lkIHNldEhhc0dldHRlclNldHRl
clByb3BlcnRpZXMoYm9vbCBoYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKSB7IG1faGFzR2V0dGVy
U2V0dGVyUHJvcGVydGllcyA9IGhhc0dldHRlclNldHRlclByb3BlcnRpZXM7IH0KIAorICAgICAg
ICBib29sIGhhc05vbkVudW1lcmFibGVQcm9wZXJ0aWVzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNO
b25FbnVtZXJhYmxlUHJvcGVydGllczsgfQorCisgICAgICAgIGJvb2wgaGFzQW5vbnltb3VzU2xv
dHMoKSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnR5VGFibGUgJiYgbV9wcm9wZXJ0eVRhYmxlLT5h
bm9ueW1vdXNTbG90Q291bnQ7IH0KKyAgICAgICAgCiAgICAgICAgIGJvb2wgaXNFbXB0eSgpIGNv
bnN0IHsgcmV0dXJuIG1fcHJvcGVydHlUYWJsZSA/ICFtX3Byb3BlcnR5VGFibGUtPmtleUNvdW50
IDogbV9vZmZzZXQgPT0gbm9PZmZzZXQ7IH0KIAogICAgICAgICBKU0NlbGwqIHNwZWNpZmljVmFs
dWUoKSB7IHJldHVybiBtX3NwZWNpZmljVmFsdWVJblByZXZpb3VzOyB9CkBAIC0xOTAsMTIgKzE5
NCwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBQcm9wZXJ0eU1hcEhhc2hUYWJsZSog
bV9wcm9wZXJ0eVRhYmxlOwogCi0gICAgICAgIHNpemVfdCBtX3Byb3BlcnR5U3RvcmFnZUNhcGFj
aXR5OworICAgICAgICB1aW50MzJfdCBtX3Byb3BlcnR5U3RvcmFnZUNhcGFjaXR5OwogICAgICAg
ICBzaWduZWQgY2hhciBtX29mZnNldDsKIAogICAgICAgICB1bnNpZ25lZCBtX2RpY3Rpb25hcnlL
aW5kIDogMjsKICAgICAgICAgYm9vbCBtX2lzUGlubmVkUHJvcGVydHlUYWJsZSA6IDE7CiAgICAg
ICAgIGJvb2wgbV9oYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzIDogMTsKKyAgICAgICAgYm9vbCBt
X2hhc05vbkVudW1lcmFibGVQcm9wZXJ0aWVzIDogMTsKICNpZiBDT01QSUxFUihXSU5TQ1cpCiAg
ICAgICAgIC8vIFdvcmthcm91bmQgZm9yIFN5bWJpYW4gV0lOU0NXIGNvbXBpbGVyIHRoYXQgY2Fu
bm90IHJlc29sdmUgdW5zaWduZWQgdHlwZSBvZiB0aGUgZGVjbGFyZWQgCiAgICAgICAgIC8vIGJp
dGZpZWxkLCB3aGVuIHVzZWQgYXMgYXJndW1lbnQgaW4gbWFrZV9wYWlyKCkgZnVuY3Rpb24gY2Fs
bHMgaW4gc3RydWN0dXJlLmNjcC4=
</data>
<flag name="review"
          id="23563"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>