<?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>122925</bug_id>
          
          <creation_ts>2013-10-16 16:41:43 -0700</creation_ts>
          <short_desc>Transition remaining op_get* JITStubs to JIT operations</short_desc>
          <delta_ts>2013-10-17 00:19:53 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>122287</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>940575</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-10-16 16:41:43 -0700</bug_when>
    <thetext>Transitioning:
    cti_op_get_by_id_generic
    cti_op_get_by_val
    cti_op_get_by_val_generic
    cti_op_get_by_val_string</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>940657</commentid>
    <comment_count>1</comment_count>
      <attachid>214422</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-10-16 23:40:07 -0700</bug_when>
    <thetext>Created attachment 214422
the patch.

Turns out the failures I saw wile testing this change were due to https://bugs.webkit.org/show_bug.cgi?id=122938.  With 122938 now fixed, this patch passes the javascriptcore tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>940658</commentid>
    <comment_count>2</comment_count>
      <attachid>214422</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-10-16 23:46:20 -0700</bug_when>
    <thetext>Comment on attachment 214422
the patch.

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

&gt; Source/JavaScriptCore/jit/JITOperations.cpp:1344
&gt; +EncodedJSValue JIT_OPERATION operationGetByValDefault(ExecState* exec, EncodedJSValue encodedBase, EncodedJSValue encodedSubscript)

I&apos;m not sure that &quot;operationGetByValDefault&quot; is the best name for this function.  I had to rename it because there&apos;s already a DFG operationGetByVal.  Looking at the code, this function seems to be a more generic get_by_val then operationGetByValGeneric.  As such, I was not able to tease out why the original JITStub author chose the naming scheme for these get_by_val inline cache implementations.  Please suggest a better name if you have one.  Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>940663</commentid>
    <comment_count>3</comment_count>
      <attachid>214422</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-10-17 00:13:23 -0700</bug_when>
    <thetext>Comment on attachment 214422
the patch.

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

r=me

&gt;&gt; Source/JavaScriptCore/jit/JITOperations.cpp:1344
&gt;&gt; +EncodedJSValue JIT_OPERATION operationGetByValDefault(ExecState* exec, EncodedJSValue encodedBase, EncodedJSValue encodedSubscript)
&gt; 
&gt; I&apos;m not sure that &quot;operationGetByValDefault&quot; is the best name for this function.  I had to rename it because there&apos;s already a DFG operationGetByVal.  Looking at the code, this function seems to be a more generic get_by_val then operationGetByValGeneric.  As such, I was not able to tease out why the original JITStub author chose the naming scheme for these get_by_val inline cache implementations.  Please suggest a better name if you have one.  Thanks.

I think the naming here is fine, since this is the default function we call before any inline caching.

I think the fundamental issue here is that we need to consolidate helper functions between the DFG, the baseline JIT, and the LLInt -- now that they all use the C calling convention.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>940667</commentid>
    <comment_count>4</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-10-17 00:19:53 -0700</bug_when>
    <thetext>Thanks for the review.  Landed in r157559: &lt;http://trac.webkit.org/r157559&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>214422</attachid>
            <date>2013-10-16 23:40:07 -0700</date>
            <delta_ts>2013-10-17 00:13:23 -0700</delta_ts>
            <desc>the patch.</desc>
            <filename>bug-122925.patch</filename>
            <type>text/plain</type>
            <size>27619</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU3NTU4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQzIEBA
CisyMDEzLTEwLTE2ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBU
cmFuc2l0aW9uIHJlbWFpbmluZyBvcF9nZXQqIEpJVFN0dWJzIHRvIEpJVCBvcGVyYXRpb25zLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIyOTI1Lgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRyYW5zaXRp
b25pbmc6CisgICAgICAgICAgICBjdGlfb3BfZ2V0X2J5X2lkX2dlbmVyaWMKKyAgICAgICAgICAg
IGN0aV9vcF9nZXRfYnlfdmFsCisgICAgICAgICAgICBjdGlfb3BfZ2V0X2J5X3ZhbF9nZW5lcmlj
CisgICAgICAgICAgICBjdGlfb3BfZ2V0X2J5X3ZhbF9zdHJpbmcKKworICAgICAgICAqIGRmZy9E
RkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5oOgorICAgICAg
ICAqIGppdC9KSVQuaDoKKyAgICAgICAgKiBqaXQvSklUSW5saW5lcy5oOgorICAgICAgICAoSlND
OjpKSVQ6OmNhbGxPcGVyYXRpb24pOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYXJndW1lbnRzX2xlbmd0aCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2FyZ3VtZW50X2J5X3ZhbCk6CisgICAgICAg
ICogaml0L0pJVE9wY29kZXMzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3df
b3BfZ2V0X2FyZ3VtZW50c19sZW5ndGgpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29w
X2dldF9hcmd1bWVudF9ieV92YWwpOgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoK
KyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5oOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0
eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3BuYW1lKToKKyAgICAgICAg
KEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5VmFsKToKKyAgICAgICAgKiBqaXQvSklUUHJv
cGVydHlBY2Nlc3MzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3BuYW1lKToK
KyAgICAgICAgKiBqaXQvSklUU3R1YnMuY3BwOgorICAgICAgICAqIGppdC9KSVRTdHVicy5oOgor
ICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5jcHA6CisgICAgICAgIChKU0M6OnNldHVwTExJ
bnQpOiBBZGRlZCBzb21lIFVOVVNFRF9QQVJBTXMgdG8gZml4IHRoZSBubyBMTElOVCBidWlsZC4K
KyAgICAgICAgKiBydW50aW1lL09wdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpPcHRpb25zOjpp
bml0aWFsaXplKToKKwogMjAxMy0xMC0xNiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29t
PgogCiAgICAgICAgIGxpYmxsdm1Gb3JKU0Mgc2hvdWxkbid0IGNhbGwgZXhpdCgxKSBvbiByZXBv
cnRfZmF0YWxfZXJyb3IoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVy
YXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09w
ZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxNTc1NTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OTksMTggKzY5OSw2IEBA
IHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25UZWFyT2ZmSW5saW4KICAgICBqc0Nhc3Q8QXJn
dW1lbnRzKj4oYXJndW1lbnRzQ2VsbCktPnRlYXJPZmYoZXhlYywgaW5saW5lQ2FsbEZyYW1lKTsK
IH0KIAotRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRBcmd1bWVudHNM
ZW5ndGgoRXhlY1N0YXRlKiBleGVjLCBpbnQzMl90IGFyZ3VtZW50c1JlZ2lzdGVyKQotewotICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigm
dm0sIGV4ZWMpOwotICAgIC8vIEhlcmUgd2UgY2FuIGFzc3VtZSB0aGF0IHRoZSBhcmd1bWVybnRz
IHdlcmUgY3JlYXRlZC4gQmVjYXVzZSBvdGhlcndpc2UgdGhlIEpJVCBjb2RlIHdvdWxkCi0gICAg
Ly8gaGF2ZSBub3QgbWFkZSB0aGlzIGNhbGwuCi0gICAgSWRlbnRpZmllciBpZGVudCgmdm0sICJs
ZW5ndGgiKTsKLSAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IGV4ZWMtPnVuY2hlY2tlZFIoYXJndW1l
bnRzUmVnaXN0ZXIpLmpzVmFsdWUoKTsKLSAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUp
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYmFzZVZhbHVlLmdldChleGVjLCBpZGVudCwg
c2xvdCkpOwotfQotCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEFy
Z3VtZW50QnlWYWwoRXhlY1N0YXRlKiBleGVjLCBpbnQzMl90IGFyZ3VtZW50c1JlZ2lzdGVyLCBp
bnQzMl90IGluZGV4KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkocmV2aXNpb24gMTU3NTU4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkK
QEAgLTkyLDcgKzkyLDYgQEAgc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0
cgogc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxKEV4ZWNTdGF0
ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIp
IFdURl9JTlRFUk5BTDsKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVJbmxp
bmVkQXJndW1lbnRzKEV4ZWNTdGF0ZSosIElubGluZUNhbGxGcmFtZSopIFdURl9JTlRFUk5BTDsK
IHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25UZWFyT2ZmSW5saW5lZEFyZ3VtZW50cyhFeGVj
U3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqLCBJbmxpbmVDYWxsRnJhbWUqKSBXVEZfSU5URVJOQUw7
Ci1FbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEFyZ3VtZW50c0xlbmd0
aChFeGVjU3RhdGUqLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkdldElubGluZWRBcmd1bWVudEJ5VmFsKEV4ZWNTdGF0ZSosIGlu
dDMyX3QsIElubGluZUNhbGxGcmFtZSosIGludDMyX3QpIFdURl9JTlRFUk5BTDsKIEVuY29kZWRK
U1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QXJndW1lbnRCeVZhbChFeGVjU3RhdGUq
LCBpbnQzMl90LCBpbnQzMl90KSBXVEZfSU5URVJOQUw7CiBKU0NlbGwqIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uTmV3RnVuY3Rpb25Ob0NoZWNrKEV4ZWNTdGF0ZSosIEpTQ2VsbCopIFdURl9JTlRF
Uk5BTDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMTU3NTU4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNzg3LDYg
Kzc4NywxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgogICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKSWRjLCBpbnQsIEdQUlJlZywg
Y29uc3QgSWRlbnRpZmllciopOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKSiwgaW50LCBHUFJSZWcsIEdQUlJlZyk7CisjaWYgVVNF
KEpTVkFMVUU2NCkKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihX
aXRoUHJvZmlsZVRhZywgSl9KSVRPcGVyYXRpb25fRUpKLCBpbnQsIEdQUlJlZywgR1BSUmVnKTsK
KyNlbHNlCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oV2l0aFBy
b2ZpbGVUYWcsIEpfSklUT3BlcmF0aW9uX0VKSiwgaW50LCBHUFJSZWcsIEdQUlJlZywgR1BSUmVn
LCBHUFJSZWcpOworI2VuZGlmCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oSl9KSVRPcGVyYXRpb25fRVAsIGludCwgdm9pZCopOwogICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFdpdGhQcm9maWxlVGFnLCBKX0pJVE9wZXJhdGlvbl9F
UGMsIGludCwgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2Fs
bE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FWiwgaW50LCBpbnQzMl90KTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCShyZXZpc2lvbiAxNTc1NTgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjE3
LDYgKzIxNywxMiBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6CiAg
ICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW1QdHIodWlkKSk7
CiAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0
V2l0aFByb2ZpbGUob3BlcmF0aW9uLCBkc3QpOwogfQorCitBTFdBWVNfSU5MSU5FIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIEpJVDo6Y2FsbE9wZXJhdGlvbihKSVQ6OldpdGhQcm9maWxlVGFnLCBKX0pJ
VE9wZXJhdGlvbl9FSkogb3BlcmF0aW9uLCBpbnQgZHN0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFy
ZzIpCit7CisgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOworICAg
IHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQ
cm9maWxlKG9wZXJhdGlvbiwgZHN0KTsKK30KICNlbmRpZgogCiBBTFdBWVNfSU5MSU5FIE1hY3Jv
QXNzZW1ibGVyOjpDYWxsIEpJVDo6Y2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FIG9wZXJh
dGlvbiwgaW50IGRzdCkKQEAgLTQ1OSw2ICs0NjUsMTIgQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBKSVQ6OgogICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrU2V0SlNWYWx1ZVJlc3VsdChvcGVyYXRpb24sIGRzdCk7CiB9CiAKK0FMV0FZU19JTkxJTkUg
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjpjYWxsT3BlcmF0aW9uKEpJVDo6V2l0aFByb2ZpbGVU
YWcsIEpfSklUT3BlcmF0aW9uX0VKSiBvcGVyYXRpb24sIGludCBkc3QsIEdQUlJlZyBhcmcxVGFn
LCBHUFJSZWcgYXJnMVBheWxvYWQsIEdQUlJlZyBhcmcyVGFnLCBHUFJSZWcgYXJnMlBheWxvYWQp
Cit7CisgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEVBQklfMzJCSVRfRFVNTVlfQVJH
IGFyZzFQYXlsb2FkLCBhcmcxVGFnLCBTSDRfMzJCSVRfRFVNTVlfQVJHIGFyZzJQYXlsb2FkLCBh
cmcyVGFnKTsKKyAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFs
dWVSZXN1bHRXaXRoUHJvZmlsZShvcGVyYXRpb24sIGRzdCk7Cit9CisKIEFMV0FZU19JTkxJTkUg
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjpjYWxsT3BlcmF0aW9uKFBfSklUT3BlcmF0aW9uX0VK
UyBvcGVyYXRpb24sIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQsIHNpemVfdCBh
cmcyKQogewogICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1Z
X0FSRyBhcmcxUGF5bG9hZCwgYXJnMVRhZywgVHJ1c3RlZEltbVB0cihhcmcyKSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCShyZXZpc2lv
biAxNTc1NTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDA5LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwOSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgUGF0cmljayBHYW5zdGVyZXIgPHBhcm9nYUBwYXJvZ2EuY29tPgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dApAQCAtMTE5MiwxMiArMTE5Miw3IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9nZXRfYXJndW1lbnRzX2xlbmcKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiAgICAgaW50
IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CiAgICAgaW50IGJhc2UgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIGludCBpZGVudCA9IGN1cnJlbnRJ
bnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAgCi0gICAgSklUU3R1YkNhbGwgc3R1YkNhbGwo
dGhpcywgY3RpX29wX2dldF9ieV9pZF9nZW5lcmljKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVu
dChiYXNlKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tUHRyKCYobV9jb2Rl
QmxvY2stPmlkZW50aWZpZXIoaWRlbnQpKSkpOwotICAgIHN0dWJDYWxsLmNhbGwoZHN0KTsKKyAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkdldEFyZ3VtZW50c0xlbmd0aCwgZHN0LCBiYXNlKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2FyZ3VtZW50X2J5X3ZhbChJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQpAQCAtMTIzNiwxMCArMTIzMSw5IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9nZXRfYXJndW1lbnRfYnlfdmEKICAgICBlbWl0U3RvcmVDZWxsKHVubW9kaWZpZWRB
cmd1bWVudHNSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzKSkub2Zmc2V0KCksIHJl
dHVyblZhbHVlUmVnaXN0ZXIpOwogICAgIAogICAgIHNraXBBcmd1bWVudHNDcmVhdGlvbi5saW5r
KHRoaXMpOwotICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9nZXRfYnlfdmFs
X2dlbmVyaWMpOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KGFyZ3VtZW50cyk7Ci0gICAgc3R1
YkNhbGwuYWRkQXJndW1lbnQocHJvcGVydHkpOwotICAgIHN0dWJDYWxsLmNhbGxXaXRoVmFsdWVQ
cm9maWxpbmcoZHN0KTsKKyAgICBlbWl0TG9hZChhcmd1bWVudHMsIHJlZ1QxLCByZWdUMCk7Cisg
ICAgZW1pdExvYWQocHJvcGVydHksIHJlZ1QzLCByZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihX
aXRoUHJvZmlsZSwgb3BlcmF0aW9uR2V0QnlWYWxHZW5lcmljLCBkc3QsIHJlZ1QxLCByZWdUMCwg
cmVnVDMsIHJlZ1QyKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDE1NzU1OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMiwgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgUGF0cmlj
ayBHYW5zdGVyZXIgPHBhcm9nYUBwYXJvZ2EuY29tPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMTA2
OSwxMyArMTA2OSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYXJndW1lbnRzX2xlbmcK
ICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiAgICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQ7CiAgICAgaW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5v
cGVyYW5kOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7Ci0gICAgCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgSklUU3R1YkNhbGwgc3R1YkNh
bGwodGhpcywgY3RpX29wX2dldF9ieV9pZF9nZW5lcmljKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1
bWVudChyZWdUMCk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cihpZGVu
dCkpOwotICAgIHN0dWJDYWxsLmNhbGwoZHN0KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkdldEFyZ3VtZW50c0xlbmd0aCwgZHN0LCBiYXNlKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X2FyZ3VtZW50X2J5X3ZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
MTExMywxMCArMTEwNyw5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYXJndW1lbnRfYnlf
dmEKICAgICBlbWl0U3RvcmVDZWxsKHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3RlcihWaXJ0dWFs
UmVnaXN0ZXIoYXJndW1lbnRzKSksIHJldHVyblZhbHVlUmVnaXN0ZXIpOwogICAgIAogICAgIHNr
aXBBcmd1bWVudHNDcmVhdGlvbi5saW5rKHRoaXMpOwotICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxs
KHRoaXMsIGN0aV9vcF9nZXRfYnlfdmFsX2dlbmVyaWMpOwotICAgIHN0dWJDYWxsLmFkZEFyZ3Vt
ZW50KGFyZ3VtZW50cywgcmVnVDIpOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHByb3BlcnR5
LCByZWdUMik7Ci0gICAgc3R1YkNhbGwuY2FsbFdpdGhWYWx1ZVByb2ZpbGluZyhkc3QpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMCk7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOworICAgIGNhbGxPcGVyYXRpb24oV2l0aFBy
b2ZpbGUsIG9wZXJhdGlvbkdldEJ5VmFsR2VuZXJpYywgZHN0LCByZWdUMCwgcmVnVDEpOwogfQog
CiAjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTU3NTU4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI5NSw2
ICsxMjk1LDEyNCBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlQXJnCiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVy
YXRpb25HZXRBcmd1bWVudHNMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCBpbnQzMl90IGFyZ3VtZW50
c1JlZ2lzdGVyKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIC8vIEhlcmUgd2UgY2FuIGFzc3VtZSB0
aGF0IHRoZSBhcmd1bWVybnRzIHdlcmUgY3JlYXRlZC4gQmVjYXVzZSBvdGhlcndpc2UgdGhlIEpJ
VCBjb2RlIHdvdWxkCisgICAgLy8gaGF2ZSBub3QgbWFkZSB0aGlzIGNhbGwuCisgICAgSWRlbnRp
ZmllciBpZGVudCgmdm0sICJsZW5ndGgiKTsKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IGV4ZWMt
PnVuY2hlY2tlZFIoYXJndW1lbnRzUmVnaXN0ZXIpLmpzVmFsdWUoKTsKKyAgICBQcm9wZXJ0eVNs
b3Qgc2xvdChiYXNlVmFsdWUpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYmFzZVZhbHVl
LmdldChleGVjLCBpZGVudCwgc2xvdCkpOworfQorCitzdGF0aWMgSlNWYWx1ZSBnZXRCeVZhbChF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVlIHN1YnNjcmlwdCwgUmV0
dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQoreworICAgIGlmIChMSUtFTFkoYmFzZVZhbHVl
LmlzQ2VsbCgpICYmIHN1YnNjcmlwdC5pc1N0cmluZygpKSkgeworICAgICAgICBpZiAoSlNWYWx1
ZSByZXN1bHQgPSBiYXNlVmFsdWUuYXNDZWxsKCktPmZhc3RHZXRPd25Qcm9wZXJ0eShleGVjLCBh
c1N0cmluZyhzdWJzY3JpcHQpLT52YWx1ZShleGVjKSkpCisgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KKworICAgIGlmIChzdWJzY3JpcHQuaXNVSW50MzIoKSkgeworICAgICAgICB1
aW50MzJfdCBpID0gc3Vic2NyaXB0LmFzVUludDMyKCk7CisgICAgICAgIGlmIChpc0pTU3RyaW5n
KGJhc2VWYWx1ZSkgJiYgYXNTdHJpbmcoYmFzZVZhbHVlKS0+Y2FuR2V0SW5kZXgoaSkpIHsKKyAg
ICAgICAgICAgIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhleGVjLT5jb2RlQmxvY2soKSwg
cmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIob3BlcmF0aW9uR2V0QnlWYWxTdHJpbmcpKTsKKyAg
ICAgICAgICAgIHJldHVybiBhc1N0cmluZyhiYXNlVmFsdWUpLT5nZXRJbmRleChleGVjLCBpKTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gYmFzZVZhbHVlLmdldChleGVjLCBpKTsKKyAgICB9
CisKKyAgICBpZiAoaXNOYW1lKHN1YnNjcmlwdCkpCisgICAgICAgIHJldHVybiBiYXNlVmFsdWUu
Z2V0KGV4ZWMsIGpzQ2FzdDxOYW1lSW5zdGFuY2UqPihzdWJzY3JpcHQuYXNDZWxsKCkpLT5wcml2
YXRlTmFtZSgpKTsKKworICAgIElkZW50aWZpZXIgcHJvcGVydHkoZXhlYywgc3Vic2NyaXB0LnRv
U3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CisgICAgcmV0dXJuIGJhc2VWYWx1ZS5nZXQoZXhl
YywgcHJvcGVydHkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkdldEJ5VmFsR2VuZXJpYyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRC
YXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0KQoreworICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwor
ICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKTsKKyAg
ICBKU1ZhbHVlIHN1YnNjcmlwdCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0KTsK
KworICAgIEpTVmFsdWUgcmVzdWx0ID0gZ2V0QnlWYWwoZXhlYywgYmFzZVZhbHVlLCBzdWJzY3Jp
cHQsIFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNTKSk7CisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShyZXN1bHQpOworfQorCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbkdldEJ5VmFsRGVmYXVsdChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0KQoreworICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0s
IGV4ZWMpOworICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRC
YXNlKTsKKyAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkU3Vi
c2NyaXB0KTsKKyAgICAKKyAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkgJiYgc3Vic2NyaXB0
LmlzSW50MzIoKSkgeworICAgICAgICAvLyBTZWUgaWYgaXQncyB3b3J0aCBvcHRpbWl6aW5nIHRo
aXMgYXQgYWxsLgorICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVl
KTsKKyAgICAgICAgYm9vbCBkaWRPcHRpbWl6ZSA9IGZhbHNlOworCisgICAgICAgIHVuc2lnbmVk
IGJ5dGVjb2RlT2Zmc2V0ID0gZXhlYy0+bG9jYXRpb25Bc0J5dGVjb2RlT2Zmc2V0KCk7CisgICAg
ICAgIEFTU0VSVChieXRlY29kZU9mZnNldCk7CisgICAgICAgIEJ5VmFsSW5mbyYgYnlWYWxJbmZv
ID0gZXhlYy0+Y29kZUJsb2NrKCktPmdldEJ5VmFsSW5mbyhieXRlY29kZU9mZnNldCAtIDEpOwor
ICAgICAgICBBU1NFUlQoIWJ5VmFsSW5mby5zdHViUm91dGluZSk7CisgICAgICAgIAorICAgICAg
ICBpZiAoaGFzT3B0aW1pemFibGVJbmRleGluZyhvYmplY3QtPnN0cnVjdHVyZSgpKSkgeworICAg
ICAgICAgICAgLy8gQXR0ZW1wdCB0byBvcHRpbWl6ZS4KKyAgICAgICAgICAgIEpJVEFycmF5TW9k
ZSBhcnJheU1vZGUgPSBqaXRBcnJheU1vZGVGb3JTdHJ1Y3R1cmUob2JqZWN0LT5zdHJ1Y3R1cmUo
KSk7CisgICAgICAgICAgICBpZiAoYXJyYXlNb2RlICE9IGJ5VmFsSW5mby5hcnJheU1vZGUpIHsK
KyAgICAgICAgICAgICAgICBKSVQ6OmNvbXBpbGVHZXRCeVZhbCgmdm0sIGV4ZWMtPmNvZGVCbG9j
aygpLCAmYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyKE9VUl9SRVRVUk5fQUREUkVTUyksIGFy
cmF5TW9kZSk7CisgICAgICAgICAgICAgICAgZGlkT3B0aW1pemUgPSB0cnVlOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIWRpZE9wdGltaXplKSB7Cisg
ICAgICAgICAgICAvLyBJZiB3ZSB0YWtlIHNsb3cgcGF0aCBtb3JlIHRoYW4gMTAgdGltZXMgd2l0
aG91dCBwYXRjaGluZyB0aGVuIG1ha2Ugc3VyZSB3ZQorICAgICAgICAgICAgLy8gbmV2ZXIgbWFr
ZSB0aGF0IG1pc3Rha2UgYWdhaW4uIE9yLCBpZiB3ZSBmYWlsZWQgdG8gcGF0Y2ggYW5kIHdlIGhh
dmUgc29tZSBvYmplY3QKKyAgICAgICAgICAgIC8vIHRoYXQgaW50ZXJjZXB0cyBpbmRleGVkIGdl
dCwgdGhlbiBkb24ndCBldmVuIHdhaXQgdW50aWwgMTAgdGltZXMuIEZvciBjYXNlcworICAgICAg
ICAgICAgLy8gd2hlcmUgd2Ugc2VlIG5vbi1pbmRleC1pbnRlcmNlcHRpbmcgb2JqZWN0cywgdGhp
cyBnaXZlcyAxMCBpdGVyYXRpb25zIHdvcnRoIG9mCisgICAgICAgICAgICAvLyBvcHBvcnR1bml0
eSBmb3IgdXMgdG8gb2JzZXJ2ZSB0aGF0IHRoZSBnZXRfYnlfdmFsIG1heSBiZSBwb2x5bW9ycGhp
Yy4KKyAgICAgICAgICAgIGlmICgrK2J5VmFsSW5mby5zbG93UGF0aENvdW50ID49IDEwCisgICAg
ICAgICAgICAgICAgfHwgb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5pbnRlcmNlcHRz
R2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvKCkpIHsKKyAg
ICAgICAgICAgICAgICAvLyBEb24ndCBldmVyIHRyeSB0byBvcHRpbWl6ZS4KKyAgICAgICAgICAg
ICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoZXhlYy0+Y29kZUJsb2NrKCkpOworICAg
ICAgICAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihSZXR1cm5B
ZGRyZXNzUHRyKE9VUl9SRVRVUk5fQUREUkVTUyksIEZ1bmN0aW9uUHRyKG9wZXJhdGlvbkdldEJ5
VmFsR2VuZXJpYykpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAg
IEpTVmFsdWUgcmVzdWx0ID0gZ2V0QnlWYWwoZXhlYywgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIFJl
dHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNTKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShyZXN1bHQpOworfQorICAgIAorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBv
cGVyYXRpb25HZXRCeVZhbFN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0KQoreworICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4
ZWMpOworICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNl
KTsKKyAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkU3Vic2Ny
aXB0KTsKKyAgICAKKyAgICBKU1ZhbHVlIHJlc3VsdDsKKyAgICBpZiAoTElLRUxZKHN1YnNjcmlw
dC5pc1VJbnQzMigpKSkgeworICAgICAgICB1aW50MzJfdCBpID0gc3Vic2NyaXB0LmFzVUludDMy
KCk7CisgICAgICAgIGlmIChpc0pTU3RyaW5nKGJhc2VWYWx1ZSkgJiYgYXNTdHJpbmcoYmFzZVZh
bHVlKS0+Y2FuR2V0SW5kZXgoaSkpCisgICAgICAgICAgICByZXN1bHQgPSBhc1N0cmluZyhiYXNl
VmFsdWUpLT5nZXRJbmRleChleGVjLCBpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBy
ZXN1bHQgPSBiYXNlVmFsdWUuZ2V0KGV4ZWMsIGkpOworICAgICAgICAgICAgaWYgKCFpc0pTU3Ry
aW5nKGJhc2VWYWx1ZSkpCisgICAgICAgICAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRy
ZXNzKGV4ZWMtPmNvZGVCbG9jaygpLCBSZXR1cm5BZGRyZXNzUHRyKE9VUl9SRVRVUk5fQUREUkVT
UyksIEZ1bmN0aW9uUHRyKG9wZXJhdGlvbkdldEJ5VmFsRGVmYXVsdCkpOworICAgICAgICB9Cisg
ICAgfSBlbHNlIGlmIChpc05hbWUoc3Vic2NyaXB0KSkKKyAgICAgICAgcmVzdWx0ID0gYmFzZVZh
bHVlLmdldChleGVjLCBqc0Nhc3Q8TmFtZUluc3RhbmNlKj4oc3Vic2NyaXB0LmFzQ2VsbCgpKS0+
cHJpdmF0ZU5hbWUoKSk7CisgICAgZWxzZSB7CisgICAgICAgIElkZW50aWZpZXIgcHJvcGVydHko
ZXhlYywgc3Vic2NyaXB0LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CisgICAgICAgIHJl
c3VsdCA9IGJhc2VWYWx1ZS5nZXQoZXhlYywgcHJvcGVydHkpOworICAgIH0KKworICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKK30KKyAgICAKIHZvaWQgSklUX09QRVJBVElPTiBv
cGVyYXRpb25UZWFyT2ZmQWN0aXZhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYWN0aXZh
dGlvbkNlbGwpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxNTc1NTgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAt
Mjc4LDYgKzI3OCwxMCBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHJvZmlsZVdpbGxD
CiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNoZWNrSGFzSW5zdGFuY2Uo
RXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGJhc2VWYWwpIFdURl9J
TlRFUk5BTDsKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVBY3RpdmF0aW9u
KEV4ZWNTdGF0ZSosIGludDMyX3Qgb2Zmc2V0KSBXVEZfSU5URVJOQUw7CiBKU0NlbGwqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlQXJndW1lbnRzKEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5B
TDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QXJndW1lbnRzTGVu
Z3RoKEV4ZWNTdGF0ZSosIGludDMyX3QpIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlWYWxEZWZhdWx0KEV4ZWNTdGF0ZSosIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0KSBXVEZf
SU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5VmFs
R2VuZXJpYyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFN1YnNjcmlwdCkgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiBvcGVyYXRpb25HZXRCeVZhbFN0cmluZyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCkgV1RGX0lO
VEVSTkFMOwogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRlYXJPZmZBY3RpdmF0aW9uKEV4
ZWNTdGF0ZSosIEpTQ2VsbCopIFdURl9JTlRFUk5BTDsKIHZvaWQgSklUX09QRVJBVElPTiBvcGVy
YXRpb25UZWFyT2ZmQXJndW1lbnRzKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCopIFdURl9J
TlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGVsZXRlQnlJ
ZChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBiYXNlLCBjb25zdCBJZGVudGlmaWVyKikgV1RG
X0lOVEVSTkFMOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lvbiAxNTc1NTgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNjIsMTAgKzI2Miw5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKElu
c3RydWMKICAgICAKICAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7CiAgICAgCi0gICAgSklU
U3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX2dldF9ieV92YWwpOwotICAgIHN0dWJDYWxs
LmFkZEFyZ3VtZW50KGJhc2UpOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHByb3BlcnR5KTsK
LSAgICBDYWxsIGNhbGwgPSBzdHViQ2FsbC5jYWxsKGRzdCk7CisgICAgZW1pdExvYWQoYmFzZSwg
cmVnVDEsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZChwcm9wZXJ0eSwgcmVnVDMsIHJlZ1QyKTsKKyAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkdldEJ5VmFsRGVmYXVsdCwgZHN0
LCByZWdUMSwgcmVnVDAsIHJlZ1QzLCByZWdUMik7CiAKICAgICBtX2J5VmFsQ29tcGlsYXRpb25J
bmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5zbG93UGF0aFRhcmdldCA9IHNsb3dQYXRoOwog
ICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnJldHVy
bkFkZHJlc3MgPSBjYWxsOwpAQCAtNzAyLDEwICs3MDEsOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfZ2V0X2J5X3BuYW1lKEluc3RyCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogICAgIGxpbmtT
bG93Q2FzZShpdGVyKTsKICAgICAKLSAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlf
b3BfZ2V0X2J5X3ZhbF9nZW5lcmljKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChiYXNlKTsK
LSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChwcm9wZXJ0eSk7Ci0gICAgc3R1YkNhbGwuY2FsbChk
c3QpOworICAgIGVtaXRMb2FkKGJhc2UsIHJlZ1QxLCByZWdUMCk7CisgICAgZW1pdExvYWQocHJv
cGVydHksIHJlZ1QzLCByZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRCeVZh
bEdlbmVyaWMsIGRzdCwgcmVnVDEsIHJlZ1QwLCByZWdUMywgcmVnVDIpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNw
cAkocmV2aXNpb24gMTU3NTU4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9w
ZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMCwxMCArMjMwLDkgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoSW5zdHJ1YwogICAgIAogICAgIExhYmVsIHNsb3dQ
YXRoID0gbGFiZWwoKTsKICAgICAKLSAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlf
b3BfZ2V0X2J5X3ZhbCk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoYmFzZSwgcmVnVDIpOwot
ICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHByb3BlcnR5LCByZWdUMik7Ci0gICAgQ2FsbCBjYWxs
ID0gc3R1YkNhbGwuY2FsbChkc3QpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
cmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKKyAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkdldEJ5VmFsRGVmYXVsdCwgZHN0
LCByZWdUMCwgcmVnVDEpOwogCiAgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5z
dHJ1Y3Rpb25JbmRleF0uc2xvd1BhdGhUYXJnZXQgPSBzbG93UGF0aDsKICAgICBtX2J5VmFsQ29t
cGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5yZXR1cm5BZGRyZXNzID0gY2Fs
bDsKQEAgLTMwNywxMCArMzA2LDkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9wbmFt
ZShJbnN0cgogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7
CiAKLSAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfZ2V0X2J5X3ZhbF9nZW5l
cmljKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChiYXNlLCByZWdUMik7Ci0gICAgc3R1YkNh
bGwuYWRkQXJndW1lbnQocHJvcGVydHksIHJlZ1QyKTsKLSAgICBzdHViQ2FsbC5jYWxsKGRzdCk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uR2V0QnlWYWxHZW5lcmljLCBkc3QsIHJlZ1QwLCByZWdUMSk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTk5
Miw3ICs5OTAsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeVZhbChCeVZhbEluCiAg
ICAgCiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKICAgICBy
ZXBhdGNoQnVmZmVyLnJlbGluayhieVZhbEluZm8tPmJhZFR5cGVKdW1wLCBDb2RlTG9jYXRpb25M
YWJlbChieVZhbEluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7Ci0gICAgcmVwYXRj
aEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9uKHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRy
KGN0aV9vcF9nZXRfYnlfdmFsX2dlbmVyaWMpKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGlua0Nh
bGxlclRvRnVuY3Rpb24ocmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIob3BlcmF0aW9uR2V0QnlW
YWxHZW5lcmljKSk7CiB9CiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKEJ5VmFs
SW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5
TW9kZSBhcnJheU1vZGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNw
cAkocmV2aXNpb24gMTU3NTU4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVi
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3MiwxMzkgKzI3Miw2IEBAIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0YXRpYyBUIHRocm93RXhjZXAKICNkZWZpbmUgREVGSU5FX1NUVUJfRlVOQ1RJT04o
cnR5cGUsIG9wKSBydHlwZSBKSVRfU1RVQiBjdGlfIyNvcChTVFVCX0FSR1NfREVDTEFSQVRJT04p
CiAjZW5kaWYKIAotLy8gRklYTUU6IFRoaXMgaXMgc3RpbGwgdXNlZCBieSBnZXRfYXJndW1lbnRz
X2xlbmd0aCwgYnV0IG90aGVyIHRoYW4gdGhhdCBpdCdzIGRlYWQuCi1ERUZJTkVfU1RVQl9GVU5D
VElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfZ2V0X2J5X2lkX2dlbmVyaWMpCi17Ci0gICAgU1RVQl9J
TklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwotCi0gICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUg
PSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsKLSAgICBJZGVudGlmaWVyJiBpZGVudCA9IHN0YWNrRnJh
bWUuYXJnc1sxXS5pZGVudGlmaWVyKCk7Ci0KLSAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IHN0YWNr
RnJhbWUuYXJnc1swXS5qc1ZhbHVlKCk7Ci0gICAgUHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVl
KTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGJhc2VWYWx1ZS5nZXQoY2FsbEZyYW1lLCBpZGVudCwg
c2xvdCk7Ci0KLSAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgpOwotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKLX0KLQotc3RhdGljIEpTVmFsdWUgZ2V0QnlWYWwoCi0g
ICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVlIHN1YnNj
cmlwdCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQotewotICAgIGlmIChMSUtFTFko
YmFzZVZhbHVlLmlzQ2VsbCgpICYmIHN1YnNjcmlwdC5pc1N0cmluZygpKSkgewotICAgICAgICBp
ZiAoSlNWYWx1ZSByZXN1bHQgPSBiYXNlVmFsdWUuYXNDZWxsKCktPmZhc3RHZXRPd25Qcm9wZXJ0
eShjYWxsRnJhbWUsIGFzU3RyaW5nKHN1YnNjcmlwdCktPnZhbHVlKGNhbGxGcmFtZSkpKQotICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBpZiAoc3Vic2NyaXB0LmlzVUlu
dDMyKCkpIHsKLSAgICAgICAgdWludDMyX3QgaSA9IHN1YnNjcmlwdC5hc1VJbnQzMigpOwotICAg
ICAgICBpZiAoaXNKU1N0cmluZyhiYXNlVmFsdWUpICYmIGFzU3RyaW5nKGJhc2VWYWx1ZSktPmNh
bkdldEluZGV4KGkpKSB7Ci0gICAgICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3Mo
Y2FsbEZyYW1lLT5jb2RlQmxvY2soKSwgcmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIoY3RpX29w
X2dldF9ieV92YWxfc3RyaW5nKSk7Ci0gICAgICAgICAgICByZXR1cm4gYXNTdHJpbmcoYmFzZVZh
bHVlKS0+Z2V0SW5kZXgoY2FsbEZyYW1lLCBpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4g
YmFzZVZhbHVlLmdldChjYWxsRnJhbWUsIGkpOwotICAgIH0KLQotICAgIGlmIChpc05hbWUoc3Vi
c2NyaXB0KSkKLSAgICAgICAgcmV0dXJuIGJhc2VWYWx1ZS5nZXQoY2FsbEZyYW1lLCBqc0Nhc3Q8
TmFtZUluc3RhbmNlKj4oc3Vic2NyaXB0LmFzQ2VsbCgpKS0+cHJpdmF0ZU5hbWUoKSk7Ci0KLSAg
ICBJZGVudGlmaWVyIHByb3BlcnR5KGNhbGxGcmFtZSwgc3Vic2NyaXB0LnRvU3RyaW5nKGNhbGxG
cmFtZSktPnZhbHVlKGNhbGxGcmFtZSkpOwotICAgIHJldHVybiBiYXNlVmFsdWUuZ2V0KGNhbGxG
cmFtZSwgcHJvcGVydHkpOwotfQotCi1ERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1
ZSwgb3BfZ2V0X2J5X3ZhbCkKLXsKLSAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFt
ZSk7Ci0KLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOwot
Ci0gICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBzdGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgpOwot
ICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gc3RhY2tGcmFtZS5hcmdzWzFdLmpzVmFsdWUoKTsKLSAg
ICAKLSAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkgJiYgc3Vic2NyaXB0LmlzSW50MzIoKSkg
ewotICAgICAgICAvLyBTZWUgaWYgaXQncyB3b3J0aCBvcHRpbWl6aW5nIHRoaXMgYXQgYWxsLgot
ICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKLSAgICAgICAg
Ym9vbCBkaWRPcHRpbWl6ZSA9IGZhbHNlOwotCi0gICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zm
c2V0ID0gY2FsbEZyYW1lLT5sb2NhdGlvbkFzQnl0ZWNvZGVPZmZzZXQoKTsKLSAgICAgICAgQVNT
RVJUKGJ5dGVjb2RlT2Zmc2V0KTsKLSAgICAgICAgQnlWYWxJbmZvJiBieVZhbEluZm8gPSBjYWxs
RnJhbWUtPmNvZGVCbG9jaygpLT5nZXRCeVZhbEluZm8oYnl0ZWNvZGVPZmZzZXQgLSAxKTsKLSAg
ICAgICAgQVNTRVJUKCFieVZhbEluZm8uc3R1YlJvdXRpbmUpOwotICAgICAgICAKLSAgICAgICAg
aWYgKGhhc09wdGltaXphYmxlSW5kZXhpbmcob2JqZWN0LT5zdHJ1Y3R1cmUoKSkpIHsKLSAgICAg
ICAgICAgIC8vIEF0dGVtcHQgdG8gb3B0aW1pemUuCi0gICAgICAgICAgICBKSVRBcnJheU1vZGUg
YXJyYXlNb2RlID0gaml0QXJyYXlNb2RlRm9yU3RydWN0dXJlKG9iamVjdC0+c3RydWN0dXJlKCkp
OwotICAgICAgICAgICAgaWYgKGFycmF5TW9kZSAhPSBieVZhbEluZm8uYXJyYXlNb2RlKSB7Ci0g
ICAgICAgICAgICAgICAgSklUOjpjb21waWxlR2V0QnlWYWwoJmNhbGxGcmFtZS0+dm0oKSwgY2Fs
bEZyYW1lLT5jb2RlQmxvY2soKSwgJmJ5VmFsSW5mbywgU1RVQl9SRVRVUk5fQUREUkVTUywgYXJy
YXlNb2RlKTsKLSAgICAgICAgICAgICAgICBkaWRPcHRpbWl6ZSA9IHRydWU7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmICghZGlkT3B0aW1pemUpIHsKLSAg
ICAgICAgICAgIC8vIElmIHdlIHRha2Ugc2xvdyBwYXRoIG1vcmUgdGhhbiAxMCB0aW1lcyB3aXRo
b3V0IHBhdGNoaW5nIHRoZW4gbWFrZSBzdXJlIHdlCi0gICAgICAgICAgICAvLyBuZXZlciBtYWtl
IHRoYXQgbWlzdGFrZSBhZ2Fpbi4gT3IsIGlmIHdlIGZhaWxlZCB0byBwYXRjaCBhbmQgd2UgaGF2
ZSBzb21lIG9iamVjdAotICAgICAgICAgICAgLy8gdGhhdCBpbnRlcmNlcHRzIGluZGV4ZWQgZ2V0
LCB0aGVuIGRvbid0IGV2ZW4gd2FpdCB1bnRpbCAxMCB0aW1lcy4gRm9yIGNhc2VzCi0gICAgICAg
ICAgICAvLyB3aGVyZSB3ZSBzZWUgbm9uLWluZGV4LWludGVyY2VwdGluZyBvYmplY3RzLCB0aGlz
IGdpdmVzIDEwIGl0ZXJhdGlvbnMgd29ydGggb2YKLSAgICAgICAgICAgIC8vIG9wcG9ydHVuaXR5
IGZvciB1cyB0byBvYnNlcnZlIHRoYXQgdGhlIGdldF9ieV92YWwgbWF5IGJlIHBvbHltb3JwaGlj
LgotICAgICAgICAgICAgaWYgKCsrYnlWYWxJbmZvLnNsb3dQYXRoQ291bnQgPj0gMTAKLSAgICAg
ICAgICAgICAgICB8fCBvYmplY3QtPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLmludGVyY2VwdHNH
ZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8oKSkgewotICAg
ICAgICAgICAgICAgIC8vIERvbid0IGV2ZXIgdHJ5IHRvIG9wdGltaXplLgotICAgICAgICAgICAg
ICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjYWxsRnJhbWUtPmNvZGVCbG9jaygpKTsK
LSAgICAgICAgICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxlclRvRnVuY3Rpb24oU1RV
Ql9SRVRVUk5fQUREUkVTUywgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV92YWxfZ2VuZXJpYykp
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIEpTVmFsdWUgcmVz
dWx0ID0gZ2V0QnlWYWwoY2FsbEZyYW1lLCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgU1RVQl9SRVRV
Uk5fQUREUkVTUyk7Ci0gICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUocmVzdWx0KTsKLX0KLSAgICAKLURFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29k
ZWRKU1ZhbHVlLCBvcF9nZXRfYnlfdmFsX2dlbmVyaWMpCi17Ci0gICAgU1RVQl9JTklUX1NUQUNL
X0ZSQU1FKHN0YWNrRnJhbWUpOwotCi0gICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0Zy
YW1lLmNhbGxGcmFtZTsKLQotICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gc3RhY2tGcmFtZS5hcmdz
WzBdLmpzVmFsdWUoKTsKLSAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IHN0YWNrRnJhbWUuYXJnc1sx
XS5qc1ZhbHVlKCk7Ci0gICAgCi0gICAgSlNWYWx1ZSByZXN1bHQgPSBnZXRCeVZhbChjYWxsRnJh
bWUsIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCBTVFVCX1JFVFVSTl9BRERSRVNTKTsKLSAgICBDSEVD
S19GT1JfRVhDRVBUSU9OKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwot
fQotICAgIAotREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wX2dldF9ieV92
YWxfc3RyaW5nKQotewotICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKLSAg
ICAKLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOwotICAg
IAotICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKTsK
LSAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IHN0YWNrRnJhbWUuYXJnc1sxXS5qc1ZhbHVlKCk7Ci0g
ICAgCi0gICAgSlNWYWx1ZSByZXN1bHQ7Ci0gICAgCi0gICAgaWYgKExJS0VMWShzdWJzY3JpcHQu
aXNVSW50MzIoKSkpIHsKLSAgICAgICAgdWludDMyX3QgaSA9IHN1YnNjcmlwdC5hc1VJbnQzMigp
OwotICAgICAgICBpZiAoaXNKU1N0cmluZyhiYXNlVmFsdWUpICYmIGFzU3RyaW5nKGJhc2VWYWx1
ZSktPmNhbkdldEluZGV4KGkpKQotICAgICAgICAgICAgcmVzdWx0ID0gYXNTdHJpbmcoYmFzZVZh
bHVlKS0+Z2V0SW5kZXgoY2FsbEZyYW1lLCBpKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICByZXN1bHQgPSBiYXNlVmFsdWUuZ2V0KGNhbGxGcmFtZSwgaSk7Ci0gICAgICAgICAgICBpZiAo
IWlzSlNTdHJpbmcoYmFzZVZhbHVlKSkKLSAgICAgICAgICAgICAgICBjdGlQYXRjaENhbGxCeVJl
dHVybkFkZHJlc3MoY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwgU1RVQl9SRVRVUk5fQUREUkVTUywg
RnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV92YWwpKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBp
ZiAoaXNOYW1lKHN1YnNjcmlwdCkpCi0gICAgICAgIHJlc3VsdCA9IGJhc2VWYWx1ZS5nZXQoY2Fs
bEZyYW1lLCBqc0Nhc3Q8TmFtZUluc3RhbmNlKj4oc3Vic2NyaXB0LmFzQ2VsbCgpKS0+cHJpdmF0
ZU5hbWUoKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIElkZW50aWZpZXIgcHJvcGVydHkoY2FsbEZy
YW1lLCBzdWJzY3JpcHQudG9TdHJpbmcoY2FsbEZyYW1lKS0+dmFsdWUoY2FsbEZyYW1lKSk7Ci0g
ICAgICAgIHJlc3VsdCA9IGJhc2VWYWx1ZS5nZXQoY2FsbEZyYW1lLCBwcm9wZXJ0eSk7Ci0gICAg
fQotICAgIAotICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShyZXN1bHQpOwotfQotCiBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkKiwg
b3BfdGhyb3cpCiB7CiAgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAkocmV2aXNpb24gMTU3NTU4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
NTUsMTAgKzM1NSw2IEBAIGV4dGVybiAiQyIgdm9pZCBjdGlNYXNtUHJvYmVUcmFtcG9saW5lKCkK
IHZvaWQgcGVyZm9ybVBsYXRmb3JtU3BlY2lmaWNKSVRBc3NlcnRpb25zKFZNKik7CiAKIGV4dGVy
biAiQyIgewotRW5jb2RlZEpTVmFsdWUgSklUX1NUVUIgY3RpX29wX2dldF9ieV9pZF9nZW5lcmlj
KFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgSklU
X1NUVUIgY3RpX29wX2dldF9ieV92YWwoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJO
QUw7Ci1FbmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlfb3BfZ2V0X2J5X3ZhbF9nZW5lcmljKFNU
VUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgSklUX1NU
VUIgY3RpX29wX2dldF9ieV92YWxfc3RyaW5nKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lO
VEVSTkFMOwogdm9pZCBKSVRfU1RVQiBjdGlfb3BfdGhyb3dfc3RhdGljX2Vycm9yKFNUVUJfQVJH
U19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogdm9pZCogSklUX1NUVUIgY3RpX29wX3Rocm93
KFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogdm9pZCogSklUX1NUVUIgY3Rp
X3ZtX3Rocm93KFNUVUJfQVJHU19ERUNMQVJBVElPTikgUkVGRVJFTkNFRF9GUk9NX0FTTSBXVEZf
SU5URVJOQUw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRh
YmxlLmNwcAkocmV2aXNpb24gMTU3NTU4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2NSw2ICsyNjUsOCBAQCBzdGF0
aWMgdm9pZCBzZXR1cExMSW50KFZNJiB2bSwgQ29kZUJsb2NrCiAjaWYgRU5BQkxFKExMSU5UKQog
ICAgIExMSW50OjpzZXRFbnRyeXBvaW50KHZtLCBjb2RlQmxvY2spOwogI2Vsc2UKKyAgICBVTlVT
RURfUEFSQU0odm0pOworICAgIFVOVVNFRF9QQVJBTShjb2RlQmxvY2spOwogICAgIFVOUkVBQ0hB
QkxFX0ZPUl9QTEFURk9STSgpOwogI2VuZGlmCiB9Cg==
</data>
<flag name="review"
          id="236962"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>