<?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>7852</bug_id>
          
          <creation_ts>2006-03-18 16:19:13 -0800</creation_ts>
          <short_desc>New unicode abstraction layer</short_desc>
          <delta_ts>2006-04-03 16:46:43 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>420+</version>
          <rep_platform>Other</rep_platform>
          <op_sys>Linux</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>7383</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="George Staikos">staikos</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ap</cc>
    
    <cc>darin</cc>
    
    <cc>mjs</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>36862</commentid>
    <comment_count>0</comment_count>
    <who name="George Staikos">staikos</who>
    <bug_when>2006-03-18 16:19:13 -0800</bug_when>
    <thetext>A unicode abstraction layer is required to break the libicu dependency.  This is a heavy penalty for some platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>36863</commentid>
    <comment_count>1</comment_count>
      <attachid>7161</attachid>
    <who name="George Staikos">staikos</who>
    <bug_when>2006-03-18 16:21:31 -0800</bug_when>
    <thetext>Created attachment 7161
My proposed solution</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>36885</commentid>
    <comment_count>2</comment_count>
      <attachid>7161</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-03-18 19:34:42 -0800</bug_when>
    <thetext>Comment on attachment 7161
My proposed solution

Looks like a fine approach to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>36895</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-03-18 22:49:13 -0800</bug_when>
    <thetext>Something that doesn&apos;t look right to me is that this artificially limits Unicode support to UCS-2:

inline unsigned short toLower(unsigned short c) {
  return static_cast&lt;unsigned short&gt;(u_tolower(uc));
}

Admittedly, exisiting code also uses unsigned shorts, see bug 4920.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>36918</commentid>
    <comment_count>4</comment_count>
    <who name="George Staikos">staikos</who>
    <bug_when>2006-03-19 05:21:29 -0800</bug_when>
    <thetext>Any suggestions on how to change it?  I didn&apos;t see any use of it that this wouldn&apos;t serve so far, and it&apos;s not like we can&apos;t change this after... it&apos;s internal to KJS anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>36924</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-03-19 06:20:56 -0800</bug_when>
    <thetext>I think that a real API for tolower/toupper can only work with complete strings, not individual characters (there are some evil examples in bug 6310).

Could the following work?

1) KJS::Unicode::isFormatChar() and KJS::Unicode::isSeparatorSpace() take uint32_t parameters (complete Unicode code point in UTF-32 encoding). This won&apos;t change their existing uses, and will still be easily implementable with Qt, because format chars and spaces are all in the first Unicode plane AFAIK.
2) KJS::Unicode::toLower() and KJS::Unicode::toUpper work on unsigned short (UTF-16) buffers, with implementation details hidden behind the API. They should be able to change the length of the string.
3) UChar::toUpper() and UChar::toLower() are removed altogether (it doesn&apos;t look like they are actually used for anything but strings).

I think that this abstraction may eventially become useful in WebCore, too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>37135</commentid>
    <comment_count>6</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2006-03-21 01:20:54 -0800</bug_when>
    <thetext>It&apos;s nice that the API layer came out so thin.

I don&apos;t think George needs to perfect the abstraction in all ways before landing. But there are the following issues, I believe:

* The patch shows an include of one of the platform-specific headers. I think it would be better to include a single header, which uses PLATFORM macros to pick the right per-platform implementation.

+#include &quot;unicode/qt4/kjs_unicode.h&quot;

* This method is not implemented in the ICU code path:

inline CharCategory category(unsigned short c)

* I think it would be better to put this in kxmlcore instead of kjs, so it can be used in the future by WebCore and/or khtml.

I think enhancing the API to go beyond KJS&apos;s current uses can be done in a separate pass, but these issues seem relatively important.

r- for now because I think the included patch would break the JavaScriptCore build and we need to straighten out the header issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>38330</commentid>
    <comment_count>7</comment_count>
      <attachid>7478</attachid>
    <who name="George Staikos">staikos</who>
    <bug_when>2006-04-02 22:30:42 -0700</bug_when>
    <thetext>Created attachment 7478
Updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>38390</commentid>
    <comment_count>8</comment_count>
      <attachid>7478</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-04-03 08:53:39 -0700</bug_when>
    <thetext>Comment on attachment 7478
Updated patch

+    } while (KJS::Unicode::isFormatChar(next3));

You should remove the KJS:: prefixes in all these places, because the code is already in the KJS prefix.

+      return static_cast&lt;unsigned short&gt;(u_tolower(c));

+      return static_cast&lt;unsigned short&gt;(u_toupper(c));

No need for the type casts here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>38394</commentid>
    <comment_count>9</comment_count>
    <who name="George Staikos">staikos</who>
    <bug_when>2006-04-03 09:19:13 -0700</bug_when>
    <thetext>Ok I&apos;ve corrected it locally.  Any other issues?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>38434</commentid>
    <comment_count>10</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2006-04-03 15:54:05 -0700</bug_when>
    <thetext>Looks pretty good. A few minor comments:

- this should be in namespace KXMLCore, not namespace KJS
- ideally the headers should follow the kxmlcore naming convention, so Unicode.h, UnicodeICU.h, UnicodeQt4.h

I&apos;ll let you fix this up as part of landing, or else it can be fixed later, so r+.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>38443</commentid>
    <comment_count>11</comment_count>
    <who name="George Staikos">staikos</who>
    <bug_when>2006-04-03 16:46:43 -0700</bug_when>
    <thetext>Done</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>7161</attachid>
            <date>2006-03-18 16:21:31 -0800</date>
            <delta_ts>2006-04-02 22:30:42 -0700</delta_ts>
            <desc>My proposed solution</desc>
            <filename>unicode.zip</filename>
            <type>application/octet-stream</type>
            <size>5515</size>
            <attacher name="George Staikos">staikos</attacher>
            
              <data encoding="base64">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
</data>
<flag name="review"
          id="1884"
          type_id="1"
          status="-"
          setter="mjs"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>7478</attachid>
            <date>2006-04-02 22:30:42 -0700</date>
            <delta_ts>2006-04-03 15:54:16 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>webkit-unicode.patch</filename>
            <type>text/plain</type>
            <size>17438</size>
            <attacher name="George Staikos">staikos</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL2t4bWxjb3JlL3VuaWNvZGUvaWN1L2tqc191bmljb2RlX2lj
dS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2t4bWxjb3JlL3VuaWNvZGUvaWN1L2tq
c191bmljb2RlX2ljdS5oCShyZXZpc2lvbiAwKQorKysgSmF2YVNjcmlwdENvcmUva3htbGNvcmUv
dW5pY29kZS9pY3Uva2pzX3VuaWNvZGVfaWN1LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTE4
IEBACisvLyAtKi0gYy1iYXNpYy1vZmZzZXQ6IDIgLSotCisvKgorICogIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBLREUgbGlicmFyaWVzCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2IEdlb3JnZSBT
dGFpa29zIDxzdGFpa29zQGtkZS5vcmc+CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIEtKU19VTklD
T0RFX0lDVV9ICisjZGVmaW5lIEtKU19VTklDT0RFX0lDVV9ICisKKyNpbmNsdWRlIDx1bmljb2Rl
L3VjaGFyLmg+CisKKyNpbmNsdWRlICIuLi9ranNfdW5pY29kZV9jYXRlZ29yeS5oIgorCituYW1l
c3BhY2UgS0pTIHsKKyAgbmFtZXNwYWNlIFVuaWNvZGUgeworICAgIGlubGluZSB1bnNpZ25lZCBz
aG9ydCB0b0xvd2VyKHVuc2lnbmVkIHNob3J0IGMpIHsKKyAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBzaG9ydD4odV90b2xvd2VyKGMpKTsKKyAgICB9CisKKyAgICBpbmxpbmUgdW5z
aWduZWQgc2hvcnQgdG9VcHBlcih1bnNpZ25lZCBzaG9ydCBjKSB7CisgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KHVfdG91cHBlcihjKSk7CisgICAgfQorCisgICAgaW5s
aW5lIGJvb2wgaXNGb3JtYXRDaGFyKHVuc2lnbmVkIHNob3J0IGMpIHsKKyAgICAgIHJldHVybiB1
X2NoYXJUeXBlKGMpID09IFVfRk9STUFUX0NIQVI7CisgICAgfQorCisgICAgaW5saW5lIGJvb2wg
aXNTZXBhcmF0b3JTcGFjZSh1bnNpZ25lZCBzaG9ydCBjKSB7CisgICAgICByZXR1cm4gdV9jaGFy
VHlwZShjKSA9PSBVX1NQQUNFX1NFUEFSQVRPUjsKKyAgICB9CisKKyAgICBpbmxpbmUgQ2hhckNh
dGVnb3J5IGNhdGVnb3J5KHVuc2lnbmVkIHNob3J0IGMpIHsKKyAgICAgIHN3aXRjaCAodV9jaGFy
VHlwZShjKSkgeworICAgICAgICBjYXNlIFVfTk9OX1NQQUNJTkdfTUFSSzoKKyAgICAgICAgICBy
ZXR1cm4gTWFya19Ob25TcGFjaW5nOworICAgICAgICBjYXNlIFVfQ09NQklOSU5HX1NQQUNJTkdf
TUFSSzoKKyAgICAgICAgICByZXR1cm4gTWFya19TcGFjaW5nQ29tYmluaW5nOworICAgICAgICBj
YXNlIFVfRU5DTE9TSU5HX01BUks6CisgICAgICAgICAgcmV0dXJuIE1hcmtfRW5jbG9zaW5nOwor
ICAgICAgICBjYXNlIFVfREVDSU1BTF9ESUdJVF9OVU1CRVI6CisgICAgICAgICAgcmV0dXJuIE51
bWJlcl9EZWNpbWFsRGlnaXQ7CisgICAgICAgIGNhc2UgVV9MRVRURVJfTlVNQkVSOgorICAgICAg
ICAgIHJldHVybiBOdW1iZXJfTGV0dGVyOworICAgICAgICBjYXNlIFVfT1RIRVJfTlVNQkVSOgor
ICAgICAgICAgIHJldHVybiBOdW1iZXJfT3RoZXI7CisgICAgICAgIGNhc2UgVV9TUEFDRV9TRVBB
UkFUT1I6CisgICAgICAgICAgcmV0dXJuIFNlcGFyYXRvcl9TcGFjZTsKKyAgICAgICAgY2FzZSBV
X0xJTkVfU0VQQVJBVE9SOgorICAgICAgICAgIHJldHVybiBTZXBhcmF0b3JfTGluZTsKKyAgICAg
ICAgY2FzZSBVX1BBUkFHUkFQSF9TRVBBUkFUT1I6CisgICAgICAgICAgcmV0dXJuIFNlcGFyYXRv
cl9QYXJhZ3JhcGg7CisgICAgICAgIGNhc2UgVV9DT05UUk9MX0NIQVI6CisgICAgICAgICAgcmV0
dXJuIE90aGVyX0NvbnRyb2w7CisgICAgICAgIGNhc2UgVV9GT1JNQVRfQ0hBUjoKKyAgICAgICAg
ICByZXR1cm4gT3RoZXJfRm9ybWF0OworICAgICAgICBjYXNlIFVfU1VSUk9HQVRFOgorICAgICAg
ICAgIHJldHVybiBPdGhlcl9TdXJyb2dhdGU7CisgICAgICAgIGNhc2UgVV9QUklWQVRFX1VTRV9D
SEFSOgorICAgICAgICAgIHJldHVybiBPdGhlcl9Qcml2YXRlVXNlOworICAgICAgICBjYXNlIFVf
R0VORVJBTF9PVEhFUl9UWVBFUzoKKyAgICAgICAgICByZXR1cm4gT3RoZXJfTm90QXNzaWduZWQ7
CisgICAgICAgIGNhc2UgVV9VUFBFUkNBU0VfTEVUVEVSOgorICAgICAgICAgIHJldHVybiBMZXR0
ZXJfVXBwZXJjYXNlOworICAgICAgICBjYXNlIFVfTE9XRVJDQVNFX0xFVFRFUjoKKyAgICAgICAg
ICByZXR1cm4gTGV0dGVyX0xvd2VyY2FzZTsKKyAgICAgICAgY2FzZSBVX1RJVExFQ0FTRV9MRVRU
RVI6CisgICAgICAgICAgcmV0dXJuIExldHRlcl9UaXRsZWNhc2U7CisgICAgICAgIGNhc2UgVV9N
T0RJRklFUl9MRVRURVI6CisgICAgICAgICAgcmV0dXJuIExldHRlcl9Nb2RpZmllcjsKKyAgICAg
ICAgY2FzZSBVX09USEVSX0xFVFRFUjoKKyAgICAgICAgICByZXR1cm4gTGV0dGVyX090aGVyOwor
ICAgICAgICBjYXNlIFVfQ09OTkVDVE9SX1BVTkNUVUFUSU9OOgorICAgICAgICAgIHJldHVybiBQ
dW5jdHVhdGlvbl9Db25uZWN0b3I7CisgICAgICAgIGNhc2UgVV9EQVNIX1BVTkNUVUFUSU9OOgor
ICAgICAgICAgIHJldHVybiBQdW5jdHVhdGlvbl9EYXNoOworICAgICAgICBjYXNlIFVfU1RBUlRf
UFVOQ1RVQVRJT046CisgICAgICAgICAgcmV0dXJuIFB1bmN0dWF0aW9uX09wZW47CisgICAgICAg
IGNhc2UgVV9FTkRfUFVOQ1RVQVRJT046CisgICAgICAgICAgcmV0dXJuIFB1bmN0dWF0aW9uX0Ns
b3NlOworICAgICAgICBjYXNlIFVfSU5JVElBTF9QVU5DVFVBVElPTjoKKyAgICAgICAgICByZXR1
cm4gUHVuY3R1YXRpb25fSW5pdGlhbFF1b3RlOworICAgICAgICBjYXNlIFVfRklOQUxfUFVOQ1RV
QVRJT046CisgICAgICAgICAgcmV0dXJuIFB1bmN0dWF0aW9uX0ZpbmFsUXVvdGU7CisgICAgICAg
IGNhc2UgVV9PVEhFUl9QVU5DVFVBVElPTjoKKyAgICAgICAgICByZXR1cm4gUHVuY3R1YXRpb25f
T3RoZXI7CisgICAgICAgIGNhc2UgVV9NQVRIX1NZTUJPTDoKKyAgICAgICAgICByZXR1cm4gU3lt
Ym9sX01hdGg7CisgICAgICAgIGNhc2UgVV9DVVJSRU5DWV9TWU1CT0w6CisgICAgICAgICAgcmV0
dXJuIFN5bWJvbF9DdXJyZW5jeTsKKyAgICAgICAgY2FzZSBVX01PRElGSUVSX1NZTUJPTDoKKyAg
ICAgICAgICByZXR1cm4gU3ltYm9sX01vZGlmaWVyOworICAgICAgICBjYXNlIFVfT1RIRVJfU1lN
Qk9MOgorICAgICAgICAgIHJldHVybiBTeW1ib2xfT3RoZXI7CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgcmV0dXJuIE5vQ2F0ZWdvcnk7CisgICAgICB9CisgICAgfQorICB9Cit9CisKKyNl
bmRpZgorLy8gdmltOiB0cz0yIHN3PTIgZXQKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2t4bWxjb3Jl
L3VuaWNvZGUva2pzX3VuaWNvZGVfY2F0ZWdvcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9reG1sY29yZS91bmljb2RlL2tqc191bmljb2RlX2NhdGVnb3J5LmgJKHJldmlzaW9uIDAp
CisrKyBKYXZhU2NyaXB0Q29yZS9reG1sY29yZS91bmljb2RlL2tqc191bmljb2RlX2NhdGVnb3J5
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjUgQEAKKy8vIC0qLSBjLWJhc2ljLW9mZnNldDog
MiAtKi0KKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBsaWJyYXJpZXMKKyAq
ICBDb3B5cmlnaHQgKEMpIDIwMDYgR2VvcmdlIFN0YWlrb3MgPHN0YWlrb3NAa2RlLm9yZz4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKgorICovCisKKyNpZm5kZWYgS0pTX1VOSUNPREVfQ09NTU9OX0gKKyNkZWZpbmUgS0pTX1VO
SUNPREVfQ09NTU9OX0gKKworbmFtZXNwYWNlIEtKUyB7CisgIG5hbWVzcGFjZSBVbmljb2RlIHsK
KyAgICBlbnVtIENoYXJDYXRlZ29yeSB7CisgICAgICBOb0NhdGVnb3J5ID0gMCwKKyAgICAgIE1h
cmtfTm9uU3BhY2luZyA9IDB4MDAwMDAwMDEsICAgICAgICAgIC8vIFVuaWNvZGUgY2xhc3MgbmFt
ZSBNbgorICAgICAgTWFya19TcGFjaW5nQ29tYmluaW5nID0gMHgwMDAwMDAwMiwgICAgLy8gVW5p
Y29kZSBjbGFzcyBuYW1lIE1jCisgICAgICBNYXJrX0VuY2xvc2luZyA9IDB4MDAwMDAwMDQsICAg
ICAgICAgICAvLyBVbmljb2RlIGNsYXNzIG5hbWUgTWUKKyAgICAgIE51bWJlcl9EZWNpbWFsRGln
aXQgPSAweDAwMDAwMDA4LCAgICAgIC8vIFVuaWNvZGUgY2xhc3MgbmFtZSBOZAorICAgICAgTnVt
YmVyX0xldHRlciA9IDB4MDAwMDAwMTAsICAgICAgICAgICAgLy8gVW5pY29kZSBjbGFzcyBuYW1l
IE5sCisgICAgICBOdW1iZXJfT3RoZXIgPSAweDAwMDAwMDIwLCAgICAgICAgICAgICAvLyBVbmlj
b2RlIGNsYXNzIG5hbWUgTm8KKyAgICAgIFNlcGFyYXRvcl9TcGFjZSA9IDB4MDAwMDAwNDAsICAg
ICAgICAgIC8vIFVuaWNvZGUgY2xhc3MgbmFtZSBacworICAgICAgU2VwYXJhdG9yX0xpbmUgPSAw
eDAwMDAwMDgwLCAgICAgICAgICAgLy8gVW5pY29kZSBjbGFzcyBuYW1lIFpsCisgICAgICBTZXBh
cmF0b3JfUGFyYWdyYXBoID0gMHgwMDAwMDEwMCwgICAgICAvLyBVbmljb2RlIGNsYXNzIG5hbWUg
WnAKKyAgICAgIE90aGVyX0NvbnRyb2wgPSAweDAwMDAwMjAwLCAgICAgICAgICAgIC8vIFVuaWNv
ZGUgY2xhc3MgbmFtZSBDYworICAgICAgT3RoZXJfRm9ybWF0ID0gMHgwMDAwMDQwMCwgICAgICAg
ICAgICAgLy8gVW5pY29kZSBjbGFzcyBuYW1lIENmCisgICAgICBPdGhlcl9TdXJyb2dhdGUgPSAw
eDAwMDAwODAwLCAgICAgICAgICAvLyBVbmljb2RlIGNsYXNzIG5hbWUgQ3MKKyAgICAgIE90aGVy
X1ByaXZhdGVVc2UgPSAweDAwMDAxMDAwLCAgICAgICAgIC8vIFVuaWNvZGUgY2xhc3MgbmFtZSBD
bworICAgICAgT3RoZXJfTm90QXNzaWduZWQgPSAweDAwMDAyMDAwLCAgICAgICAgLy8gVW5pY29k
ZSBjbGFzcyBuYW1lIENuCisgICAgICBMZXR0ZXJfVXBwZXJjYXNlID0gMHgwMDAwNDAwMCwgICAg
ICAgICAvLyBVbmljb2RlIGNsYXNzIG5hbWUgTHUKKyAgICAgIExldHRlcl9Mb3dlcmNhc2UgPSAw
eDAwMDA4MDAwLCAgICAgICAgIC8vIFVuaWNvZGUgY2xhc3MgbmFtZSBMbAorICAgICAgTGV0dGVy
X1RpdGxlY2FzZSA9IDB4MDAwMTAwMDAsICAgICAgICAgLy8gVW5pY29kZSBjbGFzcyBuYW1lIEx0
CisgICAgICBMZXR0ZXJfTW9kaWZpZXIgPSAweDAwMDIwMDAwLCAgICAgICAgICAvLyBVbmljb2Rl
IGNsYXNzIG5hbWUgTG0KKyAgICAgIExldHRlcl9PdGhlciA9IDB4MDAwNDAwMDAsICAgICAgICAg
ICAgIC8vIFVuaWNvZGUgY2xhc3MgbmFtZSBMbworICAgICAgUHVuY3R1YXRpb25fQ29ubmVjdG9y
ID0gMHgwMDA4MDAwMCwgICAgLy8gVW5pY29kZSBjbGFzcyBuYW1lIFBjCisgICAgICBQdW5jdHVh
dGlvbl9EYXNoID0gMHgwMDEwMDAwMCwgICAgICAgICAvLyBVbmljb2RlIGNsYXNzIG5hbWUgUGQK
KyAgICAgIFB1bmN0dWF0aW9uX09wZW4gPSAweDAwMjAwMDAwLCAgICAgICAgIC8vIFVuaWNvZGUg
Y2xhc3MgbmFtZSBQcworICAgICAgUHVuY3R1YXRpb25fQ2xvc2UgPSAweDAwNDAwMDAwLCAgICAg
ICAgLy8gVW5pY29kZSBjbGFzcyBuYW1lIFBlCisgICAgICBQdW5jdHVhdGlvbl9Jbml0aWFsUXVv
dGUgPSAweDAwODAwMDAwLCAvLyBVbmljb2RlIGNsYXNzIG5hbWUgUGkKKyAgICAgIFB1bmN0dWF0
aW9uX0ZpbmFsUXVvdGUgPSAweDAxMDAwMDAwLCAgIC8vIFVuaWNvZGUgY2xhc3MgbmFtZSBQZgor
ICAgICAgUHVuY3R1YXRpb25fT3RoZXIgPSAweDAyMDAwMDAwLCAgICAgICAgLy8gVW5pY29kZSBj
bGFzcyBuYW1lIFBvCisgICAgICBTeW1ib2xfTWF0aCA9IDB4MDQwMDAwMDAsICAgICAgICAgICAg
ICAvLyBVbmljb2RlIGNsYXNzIG5hbWUgU20KKyAgICAgIFN5bWJvbF9DdXJyZW5jeSA9IDB4MDgw
MDAwMDAsICAgICAgICAgIC8vIFVuaWNvZGUgY2xhc3MgbmFtZSBTYworICAgICAgU3ltYm9sX01v
ZGlmaWVyID0gMHgxMDAwMDAwMCwgICAgICAgICAgLy8gVW5pY29kZSBjbGFzcyBuYW1lIFNrCisg
ICAgICBTeW1ib2xfT3RoZXIgPSAweDIwMDAwMDAwICAgICAgICAgICAgICAvLyBVbmljb2RlIGNs
YXNzIG5hbWUgU28KKyAgICB9OworICB9Cit9CisKKyNlbmRpZgorLy8gdmltOiB0cz0yIHN3PTIg
ZXQKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2t4bWxjb3JlL3VuaWNvZGUva2pzX3VuaWNvZGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9reG1sY29yZS91bmljb2RlL2tqc191bmljb2Rl
LmgJKHJldmlzaW9uIDApCisrKyBKYXZhU2NyaXB0Q29yZS9reG1sY29yZS91bmljb2RlL2tqc191
bmljb2RlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzcgQEAKKy8vIC0qLSBjLWJhc2ljLW9m
ZnNldDogMiAtKi0KKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBsaWJyYXJp
ZXMKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYgR2VvcmdlIFN0YWlrb3MgPHN0YWlrb3NAa2RlLm9y
Zz4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgS0pTX1VOSUNPREVfSAorI2RlZmluZSBLSlNfVU5J
Q09ERV9ICisKKyNpbmNsdWRlICIuLi9QbGF0Zm9ybS5oIgorCisjaWYgVVNFKFFUNF9VTklDT0RF
KQorI2luY2x1ZGUgInF0NC9ranNfdW5pY29kZV9xdDQuaCIKKyNlbGlmIFVTRShJQ1VfVU5JQ09E
RSkKKyNpbmNsdWRlICJpY3Uva2pzX3VuaWNvZGVfaWN1LmgiCisjZWxzZQorI2Vycm9yICJVbmtu
b3duIHVuaWNvZGUgaW1wbGVtZW50YXRpb24iCisjZW5kaWYKKworI2VuZGlmCisvLyB2aW06IHRz
PTIgc3c9MiBldApJbmRleDogSmF2YVNjcmlwdENvcmUva3htbGNvcmUvdW5pY29kZS9xdDQva2pz
X3VuaWNvZGVfcXQ0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva3htbGNvcmUvdW5p
Y29kZS9xdDQva2pzX3VuaWNvZGVfcXQ0LmgJKHJldmlzaW9uIDApCisrKyBKYXZhU2NyaXB0Q29y
ZS9reG1sY29yZS91bmljb2RlL3F0NC9ranNfdW5pY29kZV9xdDQuaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwxMTggQEAKKy8vIC0qLSBjLWJhc2ljLW9mZnNldDogMiAtKi0KKy8qCisgKiAgVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBsaWJyYXJpZXMKKyAqICBDb3B5cmlnaHQgKEMpIDIw
MDYgR2VvcmdlIFN0YWlrb3MgPHN0YWlrb3NAa2RlLm9yZz4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5k
ZWYgS0pTX1VOSUNPREVfUVQ0X0gKKyNkZWZpbmUgS0pTX1VOSUNPREVfUVQ0X0gKKworI2luY2x1
ZGUgPFFDaGFyPgorCisjaW5jbHVkZSAiLi4va2pzX3VuaWNvZGVfY2F0ZWdvcnkuaCIKKworbmFt
ZXNwYWNlIEtKUyB7CisgIG5hbWVzcGFjZSBVbmljb2RlIHsKKyAgICBpbmxpbmUgdW5zaWduZWQg
c2hvcnQgdG9Mb3dlcih1bnNpZ25lZCBzaG9ydCBjKSB7CisgICAgICByZXR1cm4gKHVuc2lnbmVk
IHNob3J0KVFDaGFyKGMpLnRvTG93ZXIoKS51bmljb2RlKCk7CisgICAgfQorCisgICAgaW5saW5l
IHVuc2lnbmVkIHNob3J0IHRvVXBwZXIodW5zaWduZWQgc2hvcnQgYykgeworICAgICAgcmV0dXJu
ICh1bnNpZ25lZCBzaG9ydClRQ2hhcihjKS50b1VwcGVyKCkudW5pY29kZSgpOworICAgIH0KKwor
ICAgIGlubGluZSBib29sIGlzRm9ybWF0Q2hhcih1bnNpZ25lZCBzaG9ydCBjKSB7CisgICAgICBy
ZXR1cm4gUUNoYXIoYykuY2F0ZWdvcnkoKSA9PSBRQ2hhcjo6T3RoZXJfRm9ybWF0OworICAgIH0K
KworICAgIGlubGluZSBib29sIGlzU2VwYXJhdG9yU3BhY2UodW5zaWduZWQgc2hvcnQgYykgewor
ICAgICAgcmV0dXJuIFFDaGFyKGMpLmNhdGVnb3J5KCkgPT0gUUNoYXI6OlNlcGFyYXRvcl9TcGFj
ZTsKKyAgICB9CisKKyAgICBpbmxpbmUgQ2hhckNhdGVnb3J5IGNhdGVnb3J5KHVuc2lnbmVkIHNo
b3J0IGMpIHsKKyAgICAgIHN3aXRjaCAoUUNoYXIoYykuY2F0ZWdvcnkoKSkgeworICAgICAgICBj
YXNlIFFDaGFyOjpNYXJrX05vblNwYWNpbmc6CisgICAgICAgICAgcmV0dXJuIE1hcmtfTm9uU3Bh
Y2luZzsKKyAgICAgICAgY2FzZSBRQ2hhcjo6TWFya19TcGFjaW5nQ29tYmluaW5nOgorICAgICAg
ICAgIHJldHVybiBNYXJrX1NwYWNpbmdDb21iaW5pbmc7CisgICAgICAgIGNhc2UgUUNoYXI6Ok1h
cmtfRW5jbG9zaW5nOgorICAgICAgICAgIHJldHVybiBNYXJrX0VuY2xvc2luZzsKKyAgICAgICAg
Y2FzZSBRQ2hhcjo6TnVtYmVyX0RlY2ltYWxEaWdpdDoKKyAgICAgICAgICByZXR1cm4gTnVtYmVy
X0RlY2ltYWxEaWdpdDsKKyAgICAgICAgY2FzZSBRQ2hhcjo6TnVtYmVyX0xldHRlcjoKKyAgICAg
ICAgICByZXR1cm4gTnVtYmVyX0xldHRlcjsKKyAgICAgICAgY2FzZSBRQ2hhcjo6TnVtYmVyX090
aGVyOgorICAgICAgICAgIHJldHVybiBOdW1iZXJfT3RoZXI7CisgICAgICAgIGNhc2UgUUNoYXI6
OlNlcGFyYXRvcl9TcGFjZToKKyAgICAgICAgICByZXR1cm4gU2VwYXJhdG9yX1NwYWNlOworICAg
ICAgICBjYXNlIFFDaGFyOjpTZXBhcmF0b3JfTGluZToKKyAgICAgICAgICByZXR1cm4gU2VwYXJh
dG9yX0xpbmU7CisgICAgICAgIGNhc2UgUUNoYXI6OlNlcGFyYXRvcl9QYXJhZ3JhcGg6CisgICAg
ICAgICAgcmV0dXJuIFNlcGFyYXRvcl9QYXJhZ3JhcGg7CisgICAgICAgIGNhc2UgUUNoYXI6Ok90
aGVyX0NvbnRyb2w6CisgICAgICAgICAgcmV0dXJuIE90aGVyX0NvbnRyb2w7CisgICAgICAgIGNh
c2UgUUNoYXI6Ok90aGVyX0Zvcm1hdDoKKyAgICAgICAgICByZXR1cm4gT3RoZXJfRm9ybWF0Owor
ICAgICAgICBjYXNlIFFDaGFyOjpPdGhlcl9TdXJyb2dhdGU6CisgICAgICAgICAgcmV0dXJuIE90
aGVyX1N1cnJvZ2F0ZTsKKyAgICAgICAgY2FzZSBRQ2hhcjo6T3RoZXJfUHJpdmF0ZVVzZToKKyAg
ICAgICAgICByZXR1cm4gT3RoZXJfUHJpdmF0ZVVzZTsKKyAgICAgICAgY2FzZSBRQ2hhcjo6T3Ro
ZXJfTm90QXNzaWduZWQ6CisgICAgICAgICAgcmV0dXJuIE90aGVyX05vdEFzc2lnbmVkOworICAg
ICAgICBjYXNlIFFDaGFyOjpMZXR0ZXJfVXBwZXJjYXNlOgorICAgICAgICAgIHJldHVybiBMZXR0
ZXJfVXBwZXJjYXNlOworICAgICAgICBjYXNlIFFDaGFyOjpMZXR0ZXJfTG93ZXJjYXNlOgorICAg
ICAgICAgIHJldHVybiBMZXR0ZXJfTG93ZXJjYXNlOworICAgICAgICBjYXNlIFFDaGFyOjpMZXR0
ZXJfVGl0bGVjYXNlOgorICAgICAgICAgIHJldHVybiBMZXR0ZXJfVGl0bGVjYXNlOworICAgICAg
ICBjYXNlIFFDaGFyOjpMZXR0ZXJfTW9kaWZpZXI6CisgICAgICAgICAgcmV0dXJuIExldHRlcl9N
b2RpZmllcjsKKyAgICAgICAgY2FzZSBRQ2hhcjo6TGV0dGVyX090aGVyOgorICAgICAgICAgIHJl
dHVybiBMZXR0ZXJfT3RoZXI7CisgICAgICAgIGNhc2UgUUNoYXI6OlB1bmN0dWF0aW9uX0Nvbm5l
Y3RvcjoKKyAgICAgICAgICByZXR1cm4gUHVuY3R1YXRpb25fQ29ubmVjdG9yOworICAgICAgICBj
YXNlIFFDaGFyOjpQdW5jdHVhdGlvbl9EYXNoOgorICAgICAgICAgIHJldHVybiBQdW5jdHVhdGlv
bl9EYXNoOworICAgICAgICBjYXNlIFFDaGFyOjpQdW5jdHVhdGlvbl9PcGVuOgorICAgICAgICAg
IHJldHVybiBQdW5jdHVhdGlvbl9PcGVuOworICAgICAgICBjYXNlIFFDaGFyOjpQdW5jdHVhdGlv
bl9DbG9zZToKKyAgICAgICAgICByZXR1cm4gUHVuY3R1YXRpb25fQ2xvc2U7CisgICAgICAgIGNh
c2UgUUNoYXI6OlB1bmN0dWF0aW9uX0luaXRpYWxRdW90ZToKKyAgICAgICAgICByZXR1cm4gUHVu
Y3R1YXRpb25fSW5pdGlhbFF1b3RlOworICAgICAgICBjYXNlIFFDaGFyOjpQdW5jdHVhdGlvbl9G
aW5hbFF1b3RlOgorICAgICAgICAgIHJldHVybiBQdW5jdHVhdGlvbl9GaW5hbFF1b3RlOworICAg
ICAgICBjYXNlIFFDaGFyOjpQdW5jdHVhdGlvbl9PdGhlcjoKKyAgICAgICAgICByZXR1cm4gUHVu
Y3R1YXRpb25fT3RoZXI7CisgICAgICAgIGNhc2UgUUNoYXI6OlN5bWJvbF9NYXRoOgorICAgICAg
ICAgIHJldHVybiBTeW1ib2xfTWF0aDsKKyAgICAgICAgY2FzZSBRQ2hhcjo6U3ltYm9sX0N1cnJl
bmN5OgorICAgICAgICAgIHJldHVybiBTeW1ib2xfQ3VycmVuY3k7CisgICAgICAgIGNhc2UgUUNo
YXI6OlN5bWJvbF9Nb2RpZmllcjoKKyAgICAgICAgICByZXR1cm4gU3ltYm9sX01vZGlmaWVyOwor
ICAgICAgICBjYXNlIFFDaGFyOjpTeW1ib2xfT3RoZXI6CisgICAgICAgICAgcmV0dXJuIFN5bWJv
bF9PdGhlcjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICByZXR1cm4gTm9DYXRlZ29yeTsK
KyAgICAgIH0KKyAgICB9CisgIH0KK30KKworI2VuZGlmCisvLyB2aW06IHRzPTIgc3c9MiBldApJ
bmRleDogSmF2YVNjcmlwdENvcmUva3htbGNvcmUvUGxhdGZvcm0uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS9reG1sY29yZS9QbGF0Zm9ybS5oCShyZXZpc2lvbiAxMzY0NykKKysrIEph
dmFTY3JpcHRDb3JlL2t4bWxjb3JlL1BsYXRmb3JtLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0OSw2
ICsxNDksMTEgQEAKIC8vIG11bHRpcGxlIHRocmVhZHMgb25seSBzdXBwb3J0ZWQgb24gT1MgWCBX
ZWJLaXQgZm9yIG5vdwogI2lmIFBMQVRGT1JNKE1BQykKICNkZWZpbmUgS1hNTENPUkVfVVNFX01V
TFRJUExFX1RIUkVBRFMgMQorI2RlZmluZSBLWE1MQ09SRV9VU0VfSUNVX1VOSUNPREUgMQorI2Vu
ZGlmCisKKyNpZiBQTEFURk9STShLREUpCisjZGVmaW5lIEtYTUxDT1JFX1VTRV9RVDRfVU5JQ09E
RSAxCiAjZW5kaWYKIAogI2VuZGlmIC8vIEtYTUxDT1JFX1BMQVRGT1JNX0gKSW5kZXg6IEphdmFT
Y3JpcHRDb3JlL2tqcy9sZXhlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pz
L2xleGVyLmNwcAkocmV2aXNpb24gMTM2NDcpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvbGV4ZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBACiAjaW5jbHVkZSAiaWRlbnRpZmll
ci5oIgogI2luY2x1ZGUgImxvb2t1cC5oIgogI2luY2x1ZGUgImludGVybmFsLmgiCi0jaW5jbHVk
ZSA8dW5pY29kZS91Y2hhci5oPgorI2luY2x1ZGUgPGt4bWxjb3JlL3VuaWNvZGUva2pzX3VuaWNv
ZGUuaD4KIAogc3RhdGljIGJvb2wgaXNEZWNpbWFsRGlnaXQodW5zaWduZWQgc2hvcnQgYyk7CiAK
QEAgLTEzNyw3ICsxMzcsNyBAQCB2b2lkIExleGVyOjpzaGlmdCh1bnNpZ25lZCBpbnQgcCkKICAg
ICAgICAgYnJlYWs7CiAgICAgICB9CiAgICAgICBuZXh0MyA9IGNvZGVbcG9zKytdLnVjOwotICAg
IH0gd2hpbGUgKHVfY2hhclR5cGUobmV4dDMpID09IFVfRk9STUFUX0NIQVIpOworICAgIH0gd2hp
bGUgKEtKUzo6VW5pY29kZTo6aXNGb3JtYXRDaGFyKG5leHQzKSk7CiAgIH0KIH0KIApAQCAtNTcy
LDcgKzU3Miw3IEBAIGludCBMZXhlcjo6bGV4KCkKIAogYm9vbCBMZXhlcjo6aXNXaGl0ZVNwYWNl
KCkgY29uc3QKIHsKLSAgcmV0dXJuIChjdXJyZW50ID09ICdcdCcgfHwgY3VycmVudCA9PSAweDBi
IHx8IGN1cnJlbnQgPT0gMHgwYyB8fCB1X2NoYXJUeXBlKGN1cnJlbnQpID09IFVfU1BBQ0VfU0VQ
QVJBVE9SKTsKKyAgcmV0dXJuIGN1cnJlbnQgPT0gJ1x0JyB8fCBjdXJyZW50ID09IDB4MGIgfHwg
Y3VycmVudCA9PSAweDBjIHx8IEtKUzo6VW5pY29kZTo6aXNTZXBhcmF0b3JTcGFjZShjdXJyZW50
KTsKIH0KIAogYm9vbCBMZXhlcjo6aXNMaW5lVGVybWluYXRvcigpCkBAIC01ODgsMTIgKzU4OCwy
NiBAQCBib29sIExleGVyOjppc0xpbmVUZXJtaW5hdG9yKCkKIAogYm9vbCBMZXhlcjo6aXNJZGVu
dFN0YXJ0KHVuc2lnbmVkIHNob3J0IGMpCiB7Ci0gIHJldHVybiAoVV9HRVRfR0NfTUFTSyhjKSAm
IChVX0dDX0xfTUFTSyB8IFVfR0NfTkxfTUFTSykpIHx8IGMgPT0gJyQnIHx8IGMgPT0gJ18nOwor
ICByZXR1cm4gKEtKUzo6VW5pY29kZTo6Y2F0ZWdvcnkoYykgJiAoS0pTOjpVbmljb2RlOjpMZXR0
ZXJfVXBwZXJjYXNlCisgICAgICAgIHwgS0pTOjpVbmljb2RlOjpMZXR0ZXJfTG93ZXJjYXNlCisg
ICAgICAgIHwgS0pTOjpVbmljb2RlOjpMZXR0ZXJfVGl0bGVjYXNlCisgICAgICAgIHwgS0pTOjpV
bmljb2RlOjpMZXR0ZXJfTW9kaWZpZXIKKyAgICAgICAgfCBLSlM6OlVuaWNvZGU6OkxldHRlcl9P
dGhlcikpCisgICAgfHwgYyA9PSAnJCcgfHwgYyA9PSAnXyc7CiB9CiAKIGJvb2wgTGV4ZXI6Omlz
SWRlbnRQYXJ0KHVuc2lnbmVkIHNob3J0IGMpCiB7Ci0gIHJldHVybiAoVV9HRVRfR0NfTUFTSyhj
KSAmIChVX0dDX0xfTUFTSyB8IFVfR0NfTkxfTUFTSyB8IFVfR0NfTU5fTUFTSyB8IFVfR0NfTUNf
TUFTSyB8IFVfR0NfTkRfTUFTSyB8IFVfR0NfUENfTUFTSykpIHx8IGMgPT0gJyQnIHx8IGMgPT0g
J18nOworICByZXR1cm4gKEtKUzo6VW5pY29kZTo6Y2F0ZWdvcnkoYykgJiAoS0pTOjpVbmljb2Rl
OjpMZXR0ZXJfVXBwZXJjYXNlCisgICAgICAgIHwgS0pTOjpVbmljb2RlOjpMZXR0ZXJfTG93ZXJj
YXNlCisgICAgICAgIHwgS0pTOjpVbmljb2RlOjpMZXR0ZXJfVGl0bGVjYXNlCisgICAgICAgIHwg
S0pTOjpVbmljb2RlOjpMZXR0ZXJfTW9kaWZpZXIKKyAgICAgICAgfCBLSlM6OlVuaWNvZGU6Okxl
dHRlcl9PdGhlcgorICAgICAgICB8IEtKUzo6VW5pY29kZTo6TWFya19Ob25TcGFjaW5nCisgICAg
ICAgIHwgS0pTOjpVbmljb2RlOjpNYXJrX1NwYWNpbmdDb21iaW5pbmcKKyAgICAgICAgfCBLSlM6
OlVuaWNvZGU6Ok51bWJlcl9EZWNpbWFsRGlnaXQKKyAgICAgICAgfCBLSlM6OlVuaWNvZGU6OlB1
bmN0dWF0aW9uX0Nvbm5lY3RvcikpCisgICAgfHwgYyA9PSAnJCcgfHwgYyA9PSAnXyc7CiB9CiAK
IHN0YXRpYyBib29sIGlzRGVjaW1hbERpZ2l0KHVuc2lnbmVkIHNob3J0IGMpCkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9ranMvZnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L2tqcy9mdW5jdGlvbi5jcHAJKHJldmlzaW9uIDEzNjQ3KQorKysgSmF2YVNjcmlwdENvcmUva2pz
L2Z1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQAogI2luY2x1ZGUg
PHN0cmluZy5oPgogI2luY2x1ZGUgPGN0eXBlLmg+CiAKLSNpbmNsdWRlIDx1bmljb2RlL3VjaGFy
Lmg+CisjaW5jbHVkZSA8a3htbGNvcmUvdW5pY29kZS9ranNfdW5pY29kZS5oPgogCiBuYW1lc3Bh
Y2UgS0pTIHsKIApAQCAtNjYxLDcgKzY2MSw3IEBAIHN0YXRpYyBib29sIGlzU3RyV2hpdGVTcGFj
ZSh1bnNpZ25lZCBzaG8KICAgICAgICAgY2FzZSAweDIwMjk6CiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiB1X2NoYXJUeXBlKGMp
ID09IFVfU1BBQ0VfU0VQQVJBVE9SOworICAgICAgICAgICAgcmV0dXJuIEtKUzo6VW5pY29kZTo6
aXNTZXBhcmF0b3JTcGFjZShjKTsKICAgICB9CiB9CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tq
cy91c3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvdXN0cmluZy5j
cHAJKHJldmlzaW9uIDEzNjQ3KQorKysgSmF2YVNjcmlwdENvcmUva2pzL3VzdHJpbmcuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBACiAKIHVzaW5nIHN0ZDo6bWF4OwogCi0jaW5j
bHVkZSA8dW5pY29kZS91Y2hhci5oPgorI2luY2x1ZGUgPGt4bWxjb3JlL3VuaWNvZGUva2pzX3Vu
aWNvZGUuaD4KIAogbmFtZXNwYWNlIEtKUyB7CiAKQEAgLTE0NCwxMiArMTQ0LDEyIEBAIHN0YXRp
YyBpbnQgc3RhdEJ1ZmZlclNpemUgPSAwOwogCiBVQ2hhciBVQ2hhcjo6dG9Mb3dlcigpIGNvbnN0
CiB7Ci0gIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4odV90b2xvd2VyKHVjKSk7
CisgIHJldHVybiBLSlM6OlVuaWNvZGU6OnRvTG93ZXIodWMpOwogfQogCiBVQ2hhciBVQ2hhcjo6
dG9VcHBlcigpIGNvbnN0CiB7Ci0gIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4o
dV90b3VwcGVyKHVjKSk7CisgIHJldHVybiBLSlM6OlVuaWNvZGU6OnRvVXBwZXIodWMpOwogfQog
CiBVQ2hhclJlZmVyZW5jZSYgVUNoYXJSZWZlcmVuY2U6Om9wZXJhdG9yPShVQ2hhciBjKQo=
</data>
<flag name="review"
          id="2035"
          type_id="1"
          status="+"
          setter="mjs"
    />
          </attachment>
      

    </bug>

</bugzilla>