<?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>68301</bug_id>
          
          <creation_ts>2011-09-16 18:29:02 -0700</creation_ts>
          <short_desc>Macro assembler branch8 &amp; 16 methods vary in treatment of upper bits</short_desc>
          <delta_ts>2011-09-27 16:34:28 -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>All</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Saboff">msaboff</reporter>
          <assigned_to name="Michael Saboff">msaboff</assigned_to>
          <cc>barraclough</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>468971</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-09-16 18:29:02 -0700</bug_when>
    <thetext>The martial register macro assembler functions vary in their handling of the &quot;unused&quot; bits.  Some of the functions generate code that ignores the unused bits, either via anding with a mask or shifting.  Other functions assume that the unused bits are zero.  Below are some examples of each.

There are two ways we can proceed, either fix functions that don&apos;t ignore to ignore the unused bits or change the convention so that a 32 bit compare will work in all cases.  For architectures that can perform zero filled (unsigned extend) loads of 8 and 16 bit quantities, the later solution would be fine.  

Function that generates code to ignore unused bits:

From MacroAssemblerARM.h:
    Jump branch16(RelationalCondition cond, RegisterID left, TrustedImm32 right)
    {
        ASSERT(!(right.m_value &amp; 0xFFFF0000));
        right.m_value &lt;&lt;= 16;
        m_assembler.mov_r(ARMRegisters::S1, left);
        lshift32(TrustedImm32(16), ARMRegisters::S1);
        return branch32(cond, ARMRegisters::S1, right);
    }

From MacroAssemblerARMv7.h:
    Jump branch16(RelationalCondition cond, BaseIndex left, TrustedImm32 right)
    {
        // use addressTempRegister incase the branch32 we call uses dataTempRegister. :-/
        load16(left, addressTempRegister);
        m_assembler.lsl(addressTempRegister, addressTempRegister, 16);
        return branch32(cond, addressTempRegister, TrustedImm32(right.m_value &lt;&lt; 16));
    }

Function that assumes unused bits are zero:

From MacroAssemblerArmv7.h:
    Jump branch8(RelationalCondition cond, RegisterID left, TrustedImm32 right)
    {
        compare32(left, right);
        return Jump(makeBranch(cond));
    }

From MacroAssemblerMIPS.h:
    Jump branch16(RelationalCondition cond, BaseIndex left, RegisterID right)
    {
        load16(left, dataTempRegister);
        return branch32(cond, dataTempRegister, right);
    }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>468985</commentid>
    <comment_count>1</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-09-16 19:07:16 -0700</bug_when>
    <thetext>In the case of branch8/16, the current intended behaviour is for any bits other than the low N to be ignored (where N is 8/16).  Any MacroAssembler implementation that does otherwise may function incorrectly.

This is easy to implement correctly on x86, but may be expensive on other platforms.  In many cases we may be able to change the JIT to ensure the full 32-bit value is known (e.g. zero extended), and call branch32 instead.

If we can change all client code to use branch32 we can fix this by simply removing the 8/16 bit compares.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>472732</commentid>
    <comment_count>2</comment_count>
      <attachid>108579</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-09-24 00:29:53 -0700</bug_when>
    <thetext>Created attachment 108579
Fix for branch16</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474343</commentid>
    <comment_count>3</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-09-27 16:34:28 -0700</bug_when>
    <thetext>Fixed (removed) branch16 in r96169, but still need to check correctness of branch8.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108579</attachid>
            <date>2011-09-24 00:29:53 -0700</date>
            <delta_ts>2011-09-25 12:05:02 -0700</delta_ts>
            <desc>Fix for branch16</desc>
            <filename>68301.patch</filename>
            <type>text/plain</type>
            <size>18003</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTU5MDYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjYgQEAK
KzIwMTEtMDktMjQgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgor
CisgICAgICAgIE1hY3JvIGFzc2VtYmxlciBicmFuY2g4ICYgMTYgbWV0aG9kcyB2YXJ5IGluIHRy
ZWF0bWVudCBvZiB1cHBlciBiaXRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD02ODMwMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEZpeCBmb3IgYnJhbmNoMTYgLSByZW1vdmUgaXQhCisgICAgICAgIE5vIHBl
cmZvcm1hbmNlIGltcGFjdC4KKworICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5o
OgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTS5oOgorICAgICAgICAqIGFz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3Lmg6CisgICAgICAgICogYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyTUlQUy5oOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclNINC5o
OgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oOgorICAgICAg
ICAqIHlhcnIvWWFyckpJVC5jcHA6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJHZW5lcmF0b3I6
Omp1bXBJZkNoYXJOb3RFcXVhbHMpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9y
OjpnZW5lcmF0ZVBhdHRlcm5DaGFyYWN0ZXJPbmNlKToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFy
ckdlbmVyYXRvcjo6Z2VuZXJhdGVQYXR0ZXJuQ2hhcmFjdGVyRml4ZWQpOgorICAgICAgICAoSlND
OjpZYXJyOjpZYXJyR2VuZXJhdG9yOjpnZW5lcmF0ZVBhdHRlcm5DaGFyYWN0ZXJHcmVlZHkpOgor
ICAgICAgICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjpiYWNrdHJhY2tQYXR0ZXJuQ2hhcmFj
dGVyTm9uR3JlZWR5KToKKwogMjAxMS0wOS0yMyAgWXVxaWFuZyBYaWFuICA8eXVxaWFuZy54aWFu
QGludGVsLmNvbT4KIAogICAgICAgICBBZGQgSlNWQUxVRTMyXzY0IHN1cHBvcnQgdG8gREZHIEpJ
VApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXIuaAkocmV2aXNpb24gOTU5MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL01hY3JvQXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDYgQEAgcHVi
bGljOgogICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyQmFzZTo6cG9wOwogICAgIHVzaW5nIE1hY3Jv
QXNzZW1ibGVyQmFzZTo6anVtcDsKICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlckJhc2U6OmJyYW5j
aDMyOwotICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyQmFzZTo6YnJhbmNoMTY7CiAjaWYgQ1BVKFg4
Nl82NCkKICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlckJhc2U6OmJyYW5jaFB0cjsKICAgICB1c2lu
ZyBNYWNyb0Fzc2VtYmxlckJhc2U6OmJyYW5jaFRlc3RQdHI7CkBAIC0xMzAsMTEgKzEyOSw2IEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGJyYW5jaDMyKGNvbW11dGUoY29uZCksIHJpZ2h0LCBs
ZWZ0KTsKICAgICB9CiAKLSAgICB2b2lkIGJyYW5jaDE2KFJlbGF0aW9uYWxDb25kaXRpb24gY29u
ZCwgQmFzZUluZGV4IGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQsIExhYmVsIHRhcmdldCkKLSAgICB7
Ci0gICAgICAgIGJyYW5jaDE2KGNvbmQsIGxlZnQsIHJpZ2h0KS5saW5rVG8odGFyZ2V0LCB0aGlz
KTsKLSAgICB9Ci0gICAgCiAgICAgdm9pZCBicmFuY2hUZXN0UHRyKFJlc3VsdENvbmRpdGlvbiBj
b25kLCBSZWdpc3RlcklEIHJlZywgTGFiZWwgdGFyZ2V0KQogICAgIHsKICAgICAgICAgYnJhbmNo
VGVzdFB0cihjb25kLCByZWcpLmxpbmtUbyh0YXJnZXQsIHRoaXMpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk0uaAkocmV2
aXNpb24gOTU5MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyQVJNLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyNiwxNSArNDI2LDYgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gYnJhbmNoMzIoY29uZCwgQVJNUmVnaXN0ZXJzOjpTMSwgcmlnaHQpOwog
ICAgIH0KIAotICAgIEp1bXAgYnJhbmNoMTYoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBSZWdp
c3RlcklEIGxlZnQsIFRydXN0ZWRJbW0zMiByaWdodCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCgh
KHJpZ2h0Lm1fdmFsdWUgJiAweEZGRkYwMDAwKSk7Ci0gICAgICAgIHJpZ2h0Lm1fdmFsdWUgPDw9
IDE2OwotICAgICAgICBtX2Fzc2VtYmxlci5tb3ZfcihBUk1SZWdpc3RlcnM6OlMxLCBsZWZ0KTsK
LSAgICAgICAgbHNoaWZ0MzIoVHJ1c3RlZEltbTMyKDE2KSwgQVJNUmVnaXN0ZXJzOjpTMSk7Ci0g
ICAgICAgIHJldHVybiBicmFuY2gzMihjb25kLCBBUk1SZWdpc3RlcnM6OlMxLCByaWdodCk7Ci0g
ICAgfQotCiAgICAgSnVtcCBicmFuY2gzMihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFJlZ2lz
dGVySUQgbGVmdCwgUmVnaXN0ZXJJRCByaWdodCwgaW50IHVzZUNvbnN0YW50UG9vbCA9IDApCiAg
ICAgewogICAgICAgICBtX2Fzc2VtYmxlci5jbXBfcihsZWZ0LCByaWdodCk7CkBAIC00ODYsMjMg
KzQ3Nyw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGJyYW5jaDMyKGNvbmQsIEFSTVJlZ2lz
dGVyczo6UzEsIHJpZ2h0KTsKICAgICB9CiAKLSAgICBKdW1wIGJyYW5jaDE2KFJlbGF0aW9uYWxD
b25kaXRpb24gY29uZCwgQmFzZUluZGV4IGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQpCi0gICAgewot
ICAgICAgICBVTlVTRURfUEFSQU0oY29uZCk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShsZWZ0KTsK
LSAgICAgICAgVU5VU0VEX1BBUkFNKHJpZ2h0KTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgICAgIHJldHVybiBqdW1wKCk7Ci0gICAgfQotCi0gICAgSnVtcCBicmFuY2gxNihS
ZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIEJhc2VJbmRleCBsZWZ0LCBUcnVzdGVkSW1tMzIgcmln
aHQpCi0gICAgewotICAgICAgICBsb2FkMTYobGVmdCwgQVJNUmVnaXN0ZXJzOjpTMCk7Ci0gICAg
ICAgIG1vdmUocmlnaHQsIEFSTVJlZ2lzdGVyczo6UzEpOwotICAgICAgICBtX2Fzc2VtYmxlci5j
bXBfcihBUk1SZWdpc3RlcnM6OlMwLCBBUk1SZWdpc3RlcnM6OlMxKTsKLSAgICAgICAgcmV0dXJu
IG1fYXNzZW1ibGVyLmptcChBUk1Db25kaXRpb24oY29uZCkpOwotICAgIH0KLQogICAgIEp1bXAg
YnJhbmNoVGVzdDgoUmVzdWx0Q29uZGl0aW9uIGNvbmQsIEFkZHJlc3MgYWRkcmVzcywgVHJ1c3Rl
ZEltbTMyIG1hc2sgPSBUcnVzdGVkSW1tMzIoLTEpKQogICAgIHsKICAgICAgICAgbG9hZDgoYWRk
cmVzcywgQVJNUmVnaXN0ZXJzOjpTMSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNdjcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNdjcuaAkocmV2aXNpb24gOTU5MDUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNdjcu
aAkod29ya2luZyBjb3B5KQpAQCAtOTY1LDMwICs5NjUsNiBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBicmFuY2gzMihjb25kLCBhZGRyZXNzVGVtcFJlZ2lzdGVyLCByaWdodCk7CiAgICAgfQog
Ci0gICAgSnVtcCBicmFuY2gxNihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIEJhc2VJbmRleCBs
ZWZ0LCBSZWdpc3RlcklEIHJpZ2h0KQotICAgIHsKLSAgICAgICAgbG9hZDE2KGxlZnQsIGRhdGFU
ZW1wUmVnaXN0ZXIpOwotICAgICAgICBtX2Fzc2VtYmxlci5sc2woYWRkcmVzc1RlbXBSZWdpc3Rl
ciwgcmlnaHQsIDE2KTsKLSAgICAgICAgbV9hc3NlbWJsZXIubHNsKGRhdGFUZW1wUmVnaXN0ZXIs
IGRhdGFUZW1wUmVnaXN0ZXIsIDE2KTsKLSAgICAgICAgcmV0dXJuIGJyYW5jaDMyKGNvbmQsIGRh
dGFUZW1wUmVnaXN0ZXIsIGFkZHJlc3NUZW1wUmVnaXN0ZXIpOwotICAgIH0KLQotICAgIEp1bXAg
YnJhbmNoMTYoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIFRydXN0
ZWRJbW0zMiByaWdodCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghKDB4ZmZmZjAwMDAgJiByaWdo
dC5tX3ZhbHVlKSk7Ci0gICAgICAgIC8vIEV4dHJhY3QgdGhlIGxvd2VyIDE2IGJpdHMgaW50byBh
IHRlbXAgZm9yIGNvbXBhcmlzb24KLSAgICAgICAgbV9hc3NlbWJsZXIudWJmeChkYXRhVGVtcFJl
Z2lzdGVyLCBsZWZ0LCAwLCAxNik7Ci0gICAgICAgIHJldHVybiBicmFuY2gzMihjb25kLCBkYXRh
VGVtcFJlZ2lzdGVyLCByaWdodCk7Ci0gICAgfQotICAgIAotICAgIEp1bXAgYnJhbmNoMTYoUmVs
YXRpb25hbENvbmRpdGlvbiBjb25kLCBCYXNlSW5kZXggbGVmdCwgVHJ1c3RlZEltbTMyIHJpZ2h0
KQotICAgIHsKLSAgICAgICAgLy8gdXNlIGFkZHJlc3NUZW1wUmVnaXN0ZXIgaW5jYXNlIHRoZSBi
cmFuY2gzMiB3ZSBjYWxsIHVzZXMgZGF0YVRlbXBSZWdpc3Rlci4gOi0vCi0gICAgICAgIGxvYWQx
NihsZWZ0LCBhZGRyZXNzVGVtcFJlZ2lzdGVyKTsKLSAgICAgICAgbV9hc3NlbWJsZXIubHNsKGFk
ZHJlc3NUZW1wUmVnaXN0ZXIsIGFkZHJlc3NUZW1wUmVnaXN0ZXIsIDE2KTsKLSAgICAgICAgcmV0
dXJuIGJyYW5jaDMyKGNvbmQsIGFkZHJlc3NUZW1wUmVnaXN0ZXIsIFRydXN0ZWRJbW0zMihyaWdo
dC5tX3ZhbHVlIDw8IDE2KSk7Ci0gICAgfQotCiAgICAgSnVtcCBicmFuY2g4KFJlbGF0aW9uYWxD
b25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBUcnVzdGVkSW1tMzIgcmlnaHQpCiAgICAg
ewogICAgICAgICBjb21wYXJlMzIobGVmdCwgcmlnaHQpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlck1JUFMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyTUlQUy5oCShyZXZpc2lv
biA5NTkwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXJNSVBTLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNzYsMzAgKzEwNzYsNiBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBicmFuY2gzMihjb25kLCBkYXRhVGVtcFJlZ2lzdGVyLCBpbW1UZW1wUmVn
aXN0ZXIpOwogICAgIH0KIAotICAgIEp1bXAgYnJhbmNoMTYoUmVsYXRpb25hbENvbmRpdGlvbiBj
b25kLCBSZWdpc3RlcklEIGxlZnQsIFRydXN0ZWRJbW0zMiByaWdodCkKLSAgICB7Ci0gICAgICAg
IC8vIE1ha2Ugc3VyZSB0aGUgaW1tZWRpYXRlIHZhbHVlIGlzIHVuc2lnbmVkIDE2IGJpdHMuCi0g
ICAgICAgIEFTU0VSVCghKHJpZ2h0Lm1fdmFsdWUgJiAweEZGRkYwMDAwKSk7Ci0gICAgICAgIG1f
YXNzZW1ibGVyLmFuZGkoaW1tVGVtcFJlZ2lzdGVyLCBsZWZ0LCAweGZmZmYpOwotICAgICAgICBy
ZXR1cm4gYnJhbmNoMzIoY29uZCwgaW1tVGVtcFJlZ2lzdGVyLCByaWdodCk7Ci0gICAgfQotCi0g
ICAgSnVtcCBicmFuY2gxNihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIEJhc2VJbmRleCBsZWZ0
LCBSZWdpc3RlcklEIHJpZ2h0KQotICAgIHsKLSAgICAgICAgbG9hZDE2KGxlZnQsIGRhdGFUZW1w
UmVnaXN0ZXIpOwotICAgICAgICByZXR1cm4gYnJhbmNoMzIoY29uZCwgZGF0YVRlbXBSZWdpc3Rl
ciwgcmlnaHQpOwotICAgIH0KLQotICAgIEp1bXAgYnJhbmNoMTYoUmVsYXRpb25hbENvbmRpdGlv
biBjb25kLCBCYXNlSW5kZXggbGVmdCwgVHJ1c3RlZEltbTMyIHJpZ2h0KQotICAgIHsKLSAgICAg
ICAgQVNTRVJUKCEocmlnaHQubV92YWx1ZSAmIDB4RkZGRjAwMDApKTsKLSAgICAgICAgbG9hZDE2
KGxlZnQsIGRhdGFUZW1wUmVnaXN0ZXIpOwotICAgICAgICAvLyBCZSBjYXJlZnVsIHRoYXQgdGhl
IHByZXZpb3VzIGxvYWQxNigpIHVzZXMgaW1tVGVtcFJlZ2lzdGVyLgotICAgICAgICAvLyBTbywg
d2UgbmVlZCB0byBwdXQgbW92ZSgpIGFmdGVyIGxvYWQxNigpLgotICAgICAgICBtb3ZlKHJpZ2h0
LCBpbW1UZW1wUmVnaXN0ZXIpOwotICAgICAgICByZXR1cm4gYnJhbmNoMzIoY29uZCwgZGF0YVRl
bXBSZWdpc3RlciwgaW1tVGVtcFJlZ2lzdGVyKTsKLSAgICB9Ci0KICAgICBKdW1wIGJyYW5jaFRl
c3QzMihSZXN1bHRDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCByZWcsIFJlZ2lzdGVySUQgbWFz
aykKICAgICB7CiAgICAgICAgIEFTU0VSVCgoY29uZCA9PSBaZXJvKSB8fCAoY29uZCA9PSBOb25a
ZXJvKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyU0g0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlclNINC5oCShyZXZpc2lvbiA5NTkwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJTSDQuaAkod29ya2luZyBjb3B5KQpAQCAtMTM5
NSw2MSArMTM5NSw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGJyYW5jaDMyKGNvbmQsIHNj
ciwgc2NyMSk7CiAgICAgfQogCi0gICAgSnVtcCBicmFuY2gxNihSZWxhdGlvbmFsQ29uZGl0aW9u
IGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgVHJ1c3RlZEltbTMyIHJpZ2h0KQotICAgIHsKLSAgICAg
ICAgQVNTRVJUKCEocmlnaHQubV92YWx1ZSAmIDB4RkZGRjAwMDApKTsKLSAgICAgICAgUmVnaXN0
ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKLQotICAgICAgICBleHR1dyhsZWZ0LCBzY3IpOwot
ICAgICAgICBpZiAoKChjb25kID09IEVxdWFsKSB8fCAoY29uZCA9PSBOb3RFcXVhbCkpICYmICFy
aWdodC5tX3ZhbHVlKQotICAgICAgICAgICAgbV9hc3NlbWJsZXIudGVzdGxSZWdSZWcoc2NyLCBz
Y3IpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb21wYXJlMzIocmlnaHQubV92YWx1ZSwg
c2NyLCBjb25kKTsKLQotICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOwotCi0gICAgICAgIGlm
IChjb25kID09IE5vdEVxdWFsKQotICAgICAgICAgICAgcmV0dXJuIGJyYW5jaEZhbHNlKCk7Ci0g
ICAgICAgIHJldHVybiBicmFuY2hUcnVlKCk7Ci0gICAgfQotCi0gICAgSnVtcCBicmFuY2gxNihS
ZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsICBCYXNlSW5kZXggbGVmdCwgUmVnaXN0ZXJJRCByaWdo
dCkKLSAgICB7Ci0gICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7Ci0KLSAg
ICAgICAgbW92ZShsZWZ0LmluZGV4LCBzY3IpOwotICAgICAgICBsc2hpZnQzMihUcnVzdGVkSW1t
MzIobGVmdC5zY2FsZSksIHNjcik7Ci0KLSAgICAgICAgaWYgKGxlZnQub2Zmc2V0KQotICAgICAg
ICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKGxlZnQub2Zmc2V0KSwgc2NyKTsKLSAgICAgICAgYWRk
MzIobGVmdC5iYXNlLCBzY3IpOwotICAgICAgICBsb2FkMTYoc2NyLCBzY3IpOwotICAgICAgICBl
eHR1dyhzY3IsIHNjcik7Ci0gICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7Ci0KLSAgICAgICAg
cmV0dXJuIGJyYW5jaDMyKGNvbmQsIHNjciwgcmlnaHQpOwotICAgIH0KLQotICAgIEp1bXAgYnJh
bmNoMTYoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBCYXNlSW5kZXggbGVmdCwgVHJ1c3RlZElt
bTMyIHJpZ2h0KQotICAgIHsKLSAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2go
KTsKLQotICAgICAgICBtb3ZlKGxlZnQuaW5kZXgsIHNjcik7Ci0gICAgICAgIGxzaGlmdDMyKFRy
dXN0ZWRJbW0zMihsZWZ0LnNjYWxlKSwgc2NyKTsKLQotICAgICAgICBpZiAobGVmdC5vZmZzZXQp
Ci0gICAgICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIobGVmdC5vZmZzZXQpLCBzY3IpOwotICAg
ICAgICBhZGQzMihsZWZ0LmJhc2UsIHNjcik7Ci0gICAgICAgIGxvYWQxNihzY3IsIHNjcik7Ci0g
ICAgICAgIGV4dHV3KHNjciwgc2NyKTsKLSAgICAgICAgUmVnaXN0ZXJJRCBzY3IxID0gY2xhaW1T
Y3JhdGNoKCk7Ci0gICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudChyaWdodC5tX3ZhbHVl
LCBzY3IxKTsKLSAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKLSAgICAgICAgcmVsZWFzZVNj
cmF0Y2goc2NyMSk7Ci0KLSAgICAgICAgcmV0dXJuIGJyYW5jaDMyKGNvbmQsIHNjciwgc2NyMSk7
Ci0gICAgfQotCiAgICAgSnVtcCBicmFuY2hUZXN0MzIoUmVzdWx0Q29uZGl0aW9uIGNvbmQsIFJl
Z2lzdGVySUQgcmVnLCBSZWdpc3RlcklEIG1hc2spCiAgICAgewogICAgICAgICBBU1NFUlQoKGNv
bmQgPT0gWmVybykgfHwgKGNvbmQgPT0gTm9uWmVybykpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24u
aAkocmV2aXNpb24gOTU5MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTg5MCwyOSArODkwLDYg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gYnJhbmNoMzIoY29uZCwgbGVmdCwgcmlnaHQpOwog
ICAgIH0KIAotICAgIEp1bXAgYnJhbmNoMTYoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBSZWdp
c3RlcklEIGxlZnQsIFRydXN0ZWRJbW0zMiByaWdodCkKLSAgICB7Ci0gICAgICAgIGlmICgoKGNv
bmQgPT0gRXF1YWwpIHx8IChjb25kID09IE5vdEVxdWFsKSkgJiYgIXJpZ2h0Lm1fdmFsdWUpCi0g
ICAgICAgICAgICBtX2Fzc2VtYmxlci50ZXN0d19ycihsZWZ0LCBsZWZ0KTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgbV9hc3NlbWJsZXIuY21wd19pcihyaWdodC5tX3ZhbHVlLCBsZWZ0KTsK
LSAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuakNDKHg4NkNvbmRpdGlvbihjb25kKSkp
OwotICAgIH0KLQotICAgIEp1bXAgYnJhbmNoMTYoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBC
YXNlSW5kZXggbGVmdCwgUmVnaXN0ZXJJRCByaWdodCkKLSAgICB7Ci0gICAgICAgIG1fYXNzZW1i
bGVyLmNtcHdfcm0ocmlnaHQsIGxlZnQub2Zmc2V0LCBsZWZ0LmJhc2UsIGxlZnQuaW5kZXgsIGxl
ZnQuc2NhbGUpOwotICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qQ0MoeDg2Q29uZGl0
aW9uKGNvbmQpKSk7Ci0gICAgfQotCi0gICAgSnVtcCBicmFuY2gxNihSZWxhdGlvbmFsQ29uZGl0
aW9uIGNvbmQsIEJhc2VJbmRleCBsZWZ0LCBUcnVzdGVkSW1tMzIgcmlnaHQpCi0gICAgewotICAg
ICAgICBBU1NFUlQoIShyaWdodC5tX3ZhbHVlICYgMHhGRkZGMDAwMCkpOwotCi0gICAgICAgIG1f
YXNzZW1ibGVyLmNtcHdfaW0ocmlnaHQubV92YWx1ZSwgbGVmdC5vZmZzZXQsIGxlZnQuYmFzZSwg
bGVmdC5pbmRleCwgbGVmdC5zY2FsZSk7Ci0gICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVy
LmpDQyh4ODZDb25kaXRpb24oY29uZCkpKTsKLSAgICB9Ci0KICAgICBKdW1wIGJyYW5jaFRlc3Qz
MihSZXN1bHRDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCByZWcsIFJlZ2lzdGVySUQgbWFzaykK
ICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLnRlc3RsX3JyKHJlZywgbWFzayk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmNwcAkocmV2aXNpb24gOTU5MDUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjU2LDExICsyNTYsMTkgQEAgY2xhc3MgWWFyckdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3Nl
bQogICAgICAgICByZXR1cm4gYnJhbmNoMzIoTm90RXF1YWwsIGluZGV4LCBsZW5ndGgpOwogICAg
IH0KIAotICAgIEp1bXAganVtcElmQ2hhck5vdEVxdWFscyhVQ2hhciBjaCwgaW50IGlucHV0UG9z
aXRpb24pCisgICAgSnVtcCBqdW1wSWZDaGFyTm90RXF1YWxzKFVDaGFyIGNoLCBpbnQgaW5wdXRQ
b3NpdGlvbiwgUmVnaXN0ZXJJRCBjaGFyYWN0ZXIpCiAgICAgewotICAgICAgICBpZiAobV9jaGFy
U2l6ZSA9PSBDaGFyOCkKLSAgICAgICAgICAgIHJldHVybiBicmFuY2g4KE5vdEVxdWFsLCBCYXNl
SW5kZXgoaW5wdXQsIGluZGV4LCBUaW1lc09uZSwgaW5wdXRQb3NpdGlvbiAqIHNpemVvZihjaGFy
KSksIEltbTMyKGNoKSk7Ci0gICAgICAgIHJldHVybiBicmFuY2gxNihOb3RFcXVhbCwgQmFzZUlu
ZGV4KGlucHV0LCBpbmRleCwgVGltZXNUd28sIGlucHV0UG9zaXRpb24gKiBzaXplb2YoVUNoYXIp
KSwgSW1tMzIoY2gpKTsKKyAgICAgICAgcmVhZENoYXJhY3RlcihpbnB1dFBvc2l0aW9uLCBjaGFy
YWN0ZXIpOworCisgICAgICAgIC8vIEZvciBjYXNlLWluc2VzaXRpdmUgY29tcGFyZXMsIG5vbi1h
c2NpaSBjaGFyYWN0ZXJzIHRoYXQgaGF2ZSBkaWZmZXJlbnQKKyAgICAgICAgLy8gdXBwZXIgJiBs
b3dlciBjYXNlIHJlcHJlc2VudGF0aW9ucyBhcmUgY29udmVydGVkIHRvIGEgY2hhcmFjdGVyIGNs
YXNzLgorICAgICAgICBBU1NFUlQoIW1fcGF0dGVybi5tX2lnbm9yZUNhc2UgfHwgaXNBU0NJSUFs
cGhhKGNoKSB8fCAoVW5pY29kZTo6dG9Mb3dlcihjaCkgPT0gVW5pY29kZTo6dG9VcHBlcihjaCkp
KTsKKyAgICAgICAgaWYgKG1fcGF0dGVybi5tX2lnbm9yZUNhc2UgJiYgaXNBU0NJSUFscGhhKGNo
KSkgeworICAgICAgICAgICAgb3IzMihUcnVzdGVkSW1tMzIoMzIpLCBjaGFyYWN0ZXIpOworICAg
ICAgICAgICAgY2ggPSBVbmljb2RlOjp0b0xvd2VyKGNoKTsKKyAgICAgICAgfQorCisgICAgICAg
IHJldHVybiBicmFuY2gzMihOb3RFcXVhbCwgY2hhcmFjdGVyLCBJbW0zMihjaCkpOwogICAgIH0K
IAogICAgIHZvaWQgcmVhZENoYXJhY3RlcihpbnQgaW5wdXRQb3NpdGlvbiwgUmVnaXN0ZXJJRCBy
ZWcpCkBAIC02NzksNiArNjg3LDkgQEAgY2xhc3MgWWFyckdlbmVyYXRvciA6IHByaXZhdGUgTWFj
cm9Bc3NlbQogICAgICAgICAgICAgICAgIGludCBtYXNrID0gMDsKICAgICAgICAgICAgICAgICBp
bnQgY2hQYWlyID0gY2ggfCAoY2gyIDw8IHNoaWZ0QW1vdW50KTsKIAorICAgICAgICAgICAgICAg
IC8vIEZvciBjYXNlLWluc2VzaXRpdmUgY29tcGFyZXMsIG5vbi1hc2NpaSBjaGFyYWN0ZXJzIHRo
YXQgaGF2ZSBkaWZmZXJlbnQKKyAgICAgICAgICAgICAgICAvLyB1cHBlciAmIGxvd2VyIGNhc2Ug
cmVwcmVzZW50YXRpb25zIGFyZSBjb252ZXJ0ZWQgdG8gYSBjaGFyYWN0ZXIgY2xhc3MuCisgICAg
ICAgICAgICAgICAgQVNTRVJUKCFtX3BhdHRlcm4ubV9pZ25vcmVDYXNlIHx8IGlzQVNDSUlBbHBo
YShjaCkgfHwgKFVuaWNvZGU6OnRvTG93ZXIoY2gpID09IFVuaWNvZGU6OnRvVXBwZXIoY2gpKSk7
CiAgICAgICAgICAgICAgICAgaWYgKG1fcGF0dGVybi5tX2lnbm9yZUNhc2UpIHsKICAgICAgICAg
ICAgICAgICAgICAgaWYgKGlzQVNDSUlBbHBoYShjaCkpCiAgICAgICAgICAgICAgICAgICAgICAg
ICBtYXNrIHw9IDMyOwpAQCAtNjg4LDM0ICs2OTksMjEgQEAgY2xhc3MgWWFyckdlbmVyYXRvciA6
IHByaXZhdGUgTWFjcm9Bc3NlbQogCiAgICAgICAgICAgICAgICAgaWYgKG1fY2hhclNpemUgPT0g
Q2hhcjgpIHsKICAgICAgICAgICAgICAgICAgICAgQmFzZUluZGV4IGFkZHJlc3MoaW5wdXQsIGlu
ZGV4LCBUaW1lc09uZSwgKHRlcm0tPmlucHV0UG9zaXRpb24gLSBtX2NoZWNrZWQpICogc2l6ZW9m
KGNoYXIpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1hc2spIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGxvYWQxNihhZGRyZXNzLCBjaGFyYWN0ZXIpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgb3IzMihJbW0zMihtYXNrKSwgY2hhcmFjdGVyKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG9wLm1fanVtcHMuYXBwZW5kKGJyYW5jaDE2KE5vdEVxdWFsLCBjaGFyYWN0ZXIsIEltbTMy
KGNoUGFpciB8IG1hc2spKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQoYnJhbmNoMTYoTm90RXF1YWwsIGFkZHJl
c3MsIEltbTMyKGNoUGFpcikpKTsKKyAgICAgICAgICAgICAgICAgICAgbG9hZDE2KGFkZHJlc3Ms
IGNoYXJhY3Rlcik7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAg
ICAgQmFzZUluZGV4IGFkZHJlc3MoaW5wdXQsIGluZGV4LCBUaW1lc1R3bywgKHRlcm0tPmlucHV0
UG9zaXRpb24gLSBtX2NoZWNrZWQpICogc2l6ZW9mKFVDaGFyKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChtYXNrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb2FkMzJXaXRoVW5hbGln
bmVkSGFsZldvcmRzKGFkZHJlc3MsIGNoYXJhY3Rlcik7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBvcjMyKEltbTMyKG1hc2spLCBjaGFyYWN0ZXIpOwotICAgICAgICAgICAgICAgICAgICAgICAg
b3AubV9qdW1wcy5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIGNoYXJhY3RlciwgSW1tMzIoY2hQ
YWlyIHwgbWFzaykpKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAg
ICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChicmFuY2gzMldpdGhVbmFsaWduZWRIYWxmV29y
ZHMoTm90RXF1YWwsIGFkZHJlc3MsIEltbTMyKGNoUGFpcikpKTsKKyAgICAgICAgICAgICAgICAg
ICAgbG9hZDMyV2l0aFVuYWxpZ25lZEhhbGZXb3JkcyhhZGRyZXNzLCBjaGFyYWN0ZXIpOwogICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAobWFzaykKKyAgICAgICAgICAgICAg
ICAgICAgb3IzMihJbW0zMihtYXNrKSwgY2hhcmFjdGVyKTsKKyAgICAgICAgICAgICAgICBvcC5t
X2p1bXBzLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgY2hhcmFjdGVyLCBJbW0zMihjaFBhaXIg
fCBtYXNrKSkpOworCiAgICAgICAgICAgICAgICAgbmV4dE9wLm1faXNEZWFkQ29kZSA9IHRydWU7
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAg
ICAgICAgaWYgKG1fcGF0dGVybi5tX2lnbm9yZUNhc2UgJiYgaXNBU0NJSUFscGhhKGNoKSkgewot
ICAgICAgICAgICAgcmVhZENoYXJhY3Rlcih0ZXJtLT5pbnB1dFBvc2l0aW9uIC0gbV9jaGVja2Vk
LCBjaGFyYWN0ZXIpOwotICAgICAgICAgICAgb3IzMihUcnVzdGVkSW1tMzIoMzIpLCBjaGFyYWN0
ZXIpOwotICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIGNo
YXJhY3RlciwgSW1tMzIoVW5pY29kZTo6dG9Mb3dlcihjaCkpKSk7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBBU1NFUlQoIW1fcGF0dGVybi5tX2lnbm9yZUNhc2UgfHwgKFVuaWNvZGU6
OnRvTG93ZXIoY2gpID09IFVuaWNvZGU6OnRvVXBwZXIoY2gpKSk7Ci0gICAgICAgICAgICBvcC5t
X2p1bXBzLmFwcGVuZChqdW1wSWZDaGFyTm90RXF1YWxzKGNoLCB0ZXJtLT5pbnB1dFBvc2l0aW9u
IC0gbV9jaGVja2VkKSk7Ci0gICAgICAgIH0KKyAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQoanVt
cElmQ2hhck5vdEVxdWFscyhjaCwgdGVybS0+aW5wdXRQb3NpdGlvbiAtIG1fY2hlY2tlZCwgY2hh
cmFjdGVyKSk7CiAgICAgfQogICAgIHZvaWQgYmFja3RyYWNrUGF0dGVybkNoYXJhY3Rlck9uY2Uo
c2l6ZV90IG9wSW5kZXgpCiAgICAgewpAQCAtNzM3LDIwICs3MzUsMjAgQEAgY2xhc3MgWWFyckdl
bmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlbQogICAgICAgICBMYWJlbCBsb29wKHRoaXMpOwog
ICAgICAgICBCYXNlSW5kZXggYWRkcmVzcyhpbnB1dCwgY291bnRSZWdpc3RlciwgbV9jaGFyU2Nh
bGUsIChDaGVja2VkPGludD4odGVybS0+aW5wdXRQb3NpdGlvbiAtIG1fY2hlY2tlZCArIENoZWNr
ZWQ8aW50NjRfdD4odGVybS0+cXVhbnRpdHlDb3VudCkpICogc3RhdGljX2Nhc3Q8aW50PihtX2No
YXJTaXplID09IENoYXI4ID8gc2l6ZW9mKGNoYXIpIDogc2l6ZW9mKFVDaGFyKSkpLnVuc2FmZUdl
dCgpKTsKIAorICAgICAgICBpZiAobV9jaGFyU2l6ZSA9PSBDaGFyOCkKKyAgICAgICAgICAgIGxv
YWQ4KGFkZHJlc3MsIGNoYXJhY3Rlcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxvYWQx
NihhZGRyZXNzLCBjaGFyYWN0ZXIpOworCisgICAgICAgIC8vIEZvciBjYXNlLWluc2VzaXRpdmUg
Y29tcGFyZXMsIG5vbi1hc2NpaSBjaGFyYWN0ZXJzIHRoYXQgaGF2ZSBkaWZmZXJlbnQKKyAgICAg
ICAgLy8gdXBwZXIgJiBsb3dlciBjYXNlIHJlcHJlc2VudGF0aW9ucyBhcmUgY29udmVydGVkIHRv
IGEgY2hhcmFjdGVyIGNsYXNzLgorICAgICAgICBBU1NFUlQoIW1fcGF0dGVybi5tX2lnbm9yZUNh
c2UgfHwgaXNBU0NJSUFscGhhKGNoKSB8fCAoVW5pY29kZTo6dG9Mb3dlcihjaCkgPT0gVW5pY29k
ZTo6dG9VcHBlcihjaCkpKTsKICAgICAgICAgaWYgKG1fcGF0dGVybi5tX2lnbm9yZUNhc2UgJiYg
aXNBU0NJSUFscGhhKGNoKSkgewotICAgICAgICAgICAgaWYgKG1fY2hhclNpemUgPT0gQ2hhcjgp
Ci0gICAgICAgICAgICAgICAgbG9hZDgoYWRkcmVzcywgY2hhcmFjdGVyKTsKLSAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICBsb2FkMTYoYWRkcmVzcywgY2hhcmFjdGVyKTsKICAgICAg
ICAgICAgIG9yMzIoVHJ1c3RlZEltbTMyKDMyKSwgY2hhcmFjdGVyKTsKLSAgICAgICAgICAgIG9w
Lm1fanVtcHMuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCBjaGFyYWN0ZXIsIEltbTMyKFVuaWNv
ZGU6OnRvTG93ZXIoY2gpKSkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQVNTRVJU
KCFtX3BhdHRlcm4ubV9pZ25vcmVDYXNlIHx8IChVbmljb2RlOjp0b0xvd2VyKGNoKSA9PSBVbmlj
b2RlOjp0b1VwcGVyKGNoKSkpOwotICAgICAgICAgICAgaWYgKG1fY2hhclNpemUgPT0gQ2hhcjgp
Ci0gICAgICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQoYnJhbmNoOChOb3RFcXVhbCwgYWRk
cmVzcywgSW1tMzIoY2gpKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgb3Au
bV9qdW1wcy5hcHBlbmQoYnJhbmNoMTYoTm90RXF1YWwsIGFkZHJlc3MsIEltbTMyKGNoKSkpOwor
ICAgICAgICAgICAgY2ggPSBVbmljb2RlOjp0b0xvd2VyKGNoKTsKICAgICAgICAgfQorCisgICAg
ICAgIG9wLm1fanVtcHMuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCBjaGFyYWN0ZXIsIEltbTMy
KGNoKSkpOwogICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIGNvdW50UmVnaXN0ZXIpOwog
ICAgICAgICBicmFuY2gzMihOb3RFcXVhbCwgY291bnRSZWdpc3RlciwgaW5kZXgpLmxpbmtUbyhs
b29wLCB0aGlzKTsKICAgICB9CkBAIC03NzcsMTQgKzc3NSw3IEBAIGNsYXNzIFlhcnJHZW5lcmF0
b3IgOiBwcml2YXRlIE1hY3JvQXNzZW0KICAgICAgICAgICAgIEp1bXBMaXN0IGZhaWx1cmVzOwog
ICAgICAgICAgICAgTGFiZWwgbG9vcCh0aGlzKTsKICAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVu
ZChhdEVuZE9mSW5wdXQoKSk7Ci0gICAgICAgICAgICBpZiAobV9wYXR0ZXJuLm1faWdub3JlQ2Fz
ZSAmJiBpc0FTQ0lJQWxwaGEoY2gpKSB7Ci0gICAgICAgICAgICAgICAgcmVhZENoYXJhY3Rlcih0
ZXJtLT5pbnB1dFBvc2l0aW9uIC0gbV9jaGVja2VkLCBjaGFyYWN0ZXIpOwotICAgICAgICAgICAg
ICAgIG9yMzIoVHJ1c3RlZEltbTMyKDMyKSwgY2hhcmFjdGVyKTsKLSAgICAgICAgICAgICAgICBm
YWlsdXJlcy5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIGNoYXJhY3RlciwgSW1tMzIoVW5pY29k
ZTo6dG9Mb3dlcihjaCkpKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
IEFTU0VSVCghbV9wYXR0ZXJuLm1faWdub3JlQ2FzZSB8fCAoVW5pY29kZTo6dG9Mb3dlcihjaCkg
PT0gVW5pY29kZTo6dG9VcHBlcihjaCkpKTsKLSAgICAgICAgICAgICAgICBmYWlsdXJlcy5hcHBl
bmQoanVtcElmQ2hhck5vdEVxdWFscyhjaCwgdGVybS0+aW5wdXRQb3NpdGlvbiAtIG1fY2hlY2tl
ZCkpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKGp1bXBJZkNo
YXJOb3RFcXVhbHMoY2gsIHRlcm0tPmlucHV0UG9zaXRpb24gLSBtX2NoZWNrZWQsIGNoYXJhY3Rl
cikpOwogCiAgICAgICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIGNvdW50UmVnaXN0ZXIp
OwogICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBpbmRleCk7CkBAIC04NDksMTQg
Kzg0MCw3IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZW0KICAgICAg
ICAgICAgIG5vbkdyZWVkeUZhaWx1cmVzLmFwcGVuZChhdEVuZE9mSW5wdXQoKSk7CiAgICAgICAg
ICAgICBpZiAodGVybS0+cXVhbnRpdHlDb3VudCAhPSBxdWFudGlmeUluZmluaXRlKQogICAgICAg
ICAgICAgICAgIG5vbkdyZWVkeUZhaWx1cmVzLmFwcGVuZChicmFuY2gzMihFcXVhbCwgY291bnRS
ZWdpc3RlciwgSW1tMzIodGVybS0+cXVhbnRpdHlDb3VudC51bnNhZmVHZXQoKSkpKTsKLSAgICAg
ICAgICAgIGlmIChtX3BhdHRlcm4ubV9pZ25vcmVDYXNlICYmIGlzQVNDSUlBbHBoYShjaCkpIHsK
LSAgICAgICAgICAgICAgICByZWFkQ2hhcmFjdGVyKHRlcm0tPmlucHV0UG9zaXRpb24gLSBtX2No
ZWNrZWQsIGNoYXJhY3Rlcik7Ci0gICAgICAgICAgICAgICAgb3IzMihUcnVzdGVkSW1tMzIoMzIp
LCBjaGFyYWN0ZXIpOwotICAgICAgICAgICAgICAgIG5vbkdyZWVkeUZhaWx1cmVzLmFwcGVuZChi
cmFuY2gzMihOb3RFcXVhbCwgY2hhcmFjdGVyLCBJbW0zMihVbmljb2RlOjp0b0xvd2VyKGNoKSkp
KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKCFtX3BhdHRl
cm4ubV9pZ25vcmVDYXNlIHx8IChVbmljb2RlOjp0b0xvd2VyKGNoKSA9PSBVbmljb2RlOjp0b1Vw
cGVyKGNoKSkpOwotICAgICAgICAgICAgICAgIG5vbkdyZWVkeUZhaWx1cmVzLmFwcGVuZChqdW1w
SWZDaGFyTm90RXF1YWxzKGNoLCB0ZXJtLT5pbnB1dFBvc2l0aW9uIC0gbV9jaGVja2VkKSk7Ci0g
ICAgICAgICAgICB9CisgICAgICAgICAgICBub25HcmVlZHlGYWlsdXJlcy5hcHBlbmQoanVtcElm
Q2hhck5vdEVxdWFscyhjaCwgdGVybS0+aW5wdXRQb3NpdGlvbiAtIG1fY2hlY2tlZCwgY2hhcmFj
dGVyKSk7CiAKICAgICAgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgY291bnRSZWdpc3Rl
cik7CiAgICAgICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIGluZGV4KTsK
</data>
<flag name="review"
          id="105578"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>