<?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>35991</bug_id>
          
          <creation_ts>2010-03-10 15:29:42 -0800</creation_ts>
          <short_desc>Would be faster to not use a thread specific to implement StringImpl::empty()</short_desc>
          <delta_ts>2010-03-10 19:53:33 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Gavin Barraclough">barraclough</reporter>
          <assigned_to name="Gavin Barraclough">barraclough</assigned_to>
          <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>198387</commentid>
    <comment_count>0</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-03-10 15:29:42 -0800</bug_when>
    <thetext>Copy JavaScriptCore in making &apos;static&apos; strings threadsafe, make the empty string a static, shared by all threads.

Change JSC::UStringImpl&apos;s implementation to match (use a static defined within the empty() method), change interface to match StringImpl (return a pointer not a reference).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198392</commentid>
    <comment_count>1</comment_count>
      <attachid>50447</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-03-10 15:34:54 -0800</bug_when>
    <thetext>Created attachment 50447
The patch

 ~0% performance impact in JSC (possible minor progression from moving empty() from .h to .cpp).
~2% progression on Dromaeo DOM core &amp; JS lib tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198397</commentid>
    <comment_count>2</comment_count>
      <attachid>50447</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-03-10 15:50:26 -0800</bug_when>
    <thetext>Comment on attachment 50447
The patch

r=me assuming you ran all the regression tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198409</commentid>
    <comment_count>3</comment_count>
      <attachid>50447</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-03-10 16:27:50 -0800</bug_when>
    <thetext>Comment on attachment 50447
The patch

Sorry -- I said r- on IRC because DEFINE_STATIC_LOCAL is not threadsafe. The solution we agreed upon was to add a call to empty() at startup, to ensure that initialization of the shared empty static occurs before any JSC or WebCore threads are created.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198412</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-03-10 16:32:52 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Sorry -- I said r- on IRC because DEFINE_STATIC_LOCAL is not threadsafe. The
&gt; solution we agreed upon was to add a call to empty() at startup, to ensure that
&gt; initialization of the shared empty static occurs before any JSC or WebCore
&gt; threads are created.

WebCore has “startup” but I’m not sure JavaScriptCore does.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198430</commentid>
    <comment_count>5</comment_count>
      <attachid>50456</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-03-10 17:21:44 -0800</bug_when>
    <thetext>Created attachment 50456
The patch

Added call to UStringImpl::empty() from initializeThreadingOnce() to ensure empty() is called in a threadsafe fashion the first time it is used.
Added call to StringImpl::empty() from the ThreadGlobalData constructor, to ensure empty() has been called from the main thread before any further threads are created.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198431</commentid>
    <comment_count>6</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-03-10 17:22:33 -0800</bug_when>
    <thetext>Implemented fix as discussed with geoff on IRC, does anyone know a better startup hook I should be using in WebCore?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198443</commentid>
    <comment_count>7</comment_count>
      <attachid>50456</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2010-03-10 18:11:32 -0800</bug_when>
    <thetext>Comment on attachment 50456
The patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198463</commentid>
    <comment_count>8</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-03-10 19:53:22 -0800</bug_when>
    <thetext>landed in r55825</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50447</attachid>
            <date>2010-03-10 15:34:54 -0800</date>
            <delta_ts>2010-03-10 17:21:44 -0800</delta_ts>
            <desc>The patch</desc>
            <filename>patch.emptystatic.txt</filename>
            <type>text/plain</type>
            <size>16116</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDU1ODEyKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzMgQEAKKzIwMTAtMDMtMTAgIEdhdmluIEJh
cnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0zNTk5MQorICAgICAgICBXb3VsZCBiZSBmYXN0ZXIgdG8gbm90IHVzZSBhIHRo
cmVhZCBzcGVjaWZpYyB0byBpbXBsZW1lbnQgU3RyaW5nSW1wbDo6ZW1wdHkoKQorCisgICAgICAg
IENoYW5nZSBKU0M6OlVTdHJpbmdJbXBsJ3MgaW1wbGVtZW50YXRpb24gb2YgZW1wdHkoKSBtYXRj
aCB0byBtYXRjaCBTdHJpbmdJbXBsJ3MgbmV3IGltcGxlbWVudGF0aW9uCisgICAgICAgICh1c2Ug
YSBzdGF0aWMgZGVmaW5lZCB3aXRoaW4gdGhlIGVtcHR5KCkgbWV0aG9kKSwgYW5kIGNoYW5nZSB0
aGUgaW50ZXJmYWNlIHRvIG1hdGNoIHRvbyAocmV0dXJuCisgICAgICAgIGEgcG9pbnRlciBub3Qg
YSByZWZlcmVuY2UpLiAKKworICAgICAgICB+MCUgcGVyZm9ybWFuY2UgaW1wYWN0IChwb3NzaWJs
ZSBtaW5vciBwcm9ncmVzc2lvbiBmcm9tIG1vdmluZyBlbXB0eSgpIGZyb20gLmggdG8gLmNwcCku
CisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS5leHA6CisgICAgICAgICogcnVudGltZS9JZGVu
dGlmaWVyLmNwcDoKKyAgICAgICAgKEpTQzo6SWRlbnRpZmllcjo6YWRkKToKKyAgICAgICAgKEpT
Qzo6SWRlbnRpZmllcjo6YWRkU2xvd0Nhc2UpOgorICAgICAgICAqIHJ1bnRpbWUvUHJvcGVydHlO
YW1lQXJyYXkuY3BwOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eU5hbWVBcnJheTo6YWRkKToKKyAg
ICAgICAgKiBydW50aW1lL1VTdHJpbmcuY3BwOgorICAgICAgICAoSlNDOjppbml0aWFsaXplVVN0
cmluZyk6CisgICAgICAgIChKU0M6OlVTdHJpbmc6OlVTdHJpbmcpOgorICAgICAgICAqIHJ1bnRp
bWUvVVN0cmluZ0ltcGwuY3BwOgorICAgICAgICAoSlNDOjpVU3RyaW5nSW1wbDo6ZW1wdHkpOgor
ICAgICAgICAoSlNDOjpVU3RyaW5nSW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL1VT
dHJpbmdJbXBsLmg6CisgICAgICAgIChKU0M6OlVTdHJpbmdJbXBsOjphZG9wdCk6CisgICAgICAg
IChKU0M6OlVTdHJpbmdJbXBsOjpjcmVhdGVVbmluaXRpYWxpemVkKToKKyAgICAgICAgKEpTQzo6
VVN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQpOgorCiAyMDEwLTAzLTA5ICBHZW9m
ZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWxl
eGV5IFByb3NrdXJ5YWtvdiwgRGFyaW4gQWRsZXIsIGFuZCBTYW0gV2VpbmlnLgpJbmRleDogSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLmV4cAkocmV2aXNpb24gNTU2NzYpCisrKyBKYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS5leHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw3ICsxMDYsNiBAQCBf
X1pOM0pTQzExSlNCeXRlQXJyYXkxNWNyZWF0ZVN0cnVjdHVyZUVOCiBfX1pOM0pTQzExSlNCeXRl
QXJyYXlDMUVQTlNfOUV4ZWNTdGF0ZUVOM1dURjE3Tm9uTnVsbFBhc3NSZWZQdHJJTlNfOVN0cnVj
dHVyZUVFRVBOUzNfOUJ5dGVBcnJheUVQS05TXzlDbGFzc0luZm9FCiBfX1pOM0pTQzExUGFyc2Vy
QXJlbmE1cmVzZXRFdgogX19aTjNKU0MxMVVTdHJpbmdJbXBsMTJzaGFyZWRCdWZmZXJFdgotX19a
TjNKU0MxMVVTdHJpbmdJbXBsN3NfZW1wdHlFCiBfX1pOM0pTQzExVVN0cmluZ0ltcGxEMUV2CiBf
X1pOM0pTQzExY2hlY2tTeW50YXhFUE5TXzlFeGVjU3RhdGVFUktOU18xMFNvdXJjZUNvZGVFCiBf
X1pOM0pTQzEyRGF0ZUluc3RhbmNlNGluZm9FCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0lkZW50aWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRl
bnRpZmllci5jcHAJKHJldmlzaW9uIDU1Njc2KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
ZGVudGlmaWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI3LDggKzEyNyw4IEBAIFBhc3NSZWZQ
dHI8VVN0cmluZzo6UmVwPiBJZGVudGlmaWVyOjphZGQKICAgICBBU1NFUlQoYyk7CiAKICAgICBp
ZiAoIWNbMF0pIHsKLSAgICAgICAgVVN0cmluZzo6UmVwOjplbXB0eSgpLmhhc2goKTsKLSAgICAg
ICAgcmV0dXJuICZVU3RyaW5nOjpSZXA6OmVtcHR5KCk7CisgICAgICAgIFVTdHJpbmc6OlJlcDo6
ZW1wdHkoKS0+aGFzaCgpOworICAgICAgICByZXR1cm4gVVN0cmluZzo6UmVwOjplbXB0eSgpOwog
ICAgIH0KICAgICBpZiAoIWNbMV0pCiAgICAgICAgIHJldHVybiBhZGQoZ2xvYmFsRGF0YSwgZ2xv
YmFsRGF0YS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZ1JlcChzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBjaGFyPihjWzBdKSkpOwpAQCAtMTkxLDggKzE5MSw4IEBAIFBhc3NSZWZQdHI8
VVN0cmluZzo6UmVwPiBJZGVudGlmaWVyOjphZGQKICAgICAgICAgICAgIHJldHVybiBhZGQoZ2xv
YmFsRGF0YSwgZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZ1Jl
cChjKSk7CiAgICAgfQogICAgIGlmICghbGVuZ3RoKSB7Ci0gICAgICAgIFVTdHJpbmc6OlJlcDo6
ZW1wdHkoKS5oYXNoKCk7Ci0gICAgICAgIHJldHVybiAmVVN0cmluZzo6UmVwOjplbXB0eSgpOwor
ICAgICAgICBVU3RyaW5nOjpSZXA6OmVtcHR5KCktPmhhc2goKTsKKyAgICAgICAgcmV0dXJuIFVT
dHJpbmc6OlJlcDo6ZW1wdHkoKTsKICAgICB9CiAgICAgVUNoYXJCdWZmZXIgYnVmID0ge3MsIGxl
bmd0aH07IAogICAgIHBhaXI8SGFzaFNldDxVU3RyaW5nOjpSZXAqPjo6aXRlcmF0b3IsIGJvb2w+
IGFkZFJlc3VsdCA9IGdsb2JhbERhdGEtPmlkZW50aWZpZXJUYWJsZS0+YWRkPFVDaGFyQnVmZmVy
LCBVQ2hhckJ1ZmZlclRyYW5zbGF0b3I+KGJ1Zik7CkBAIC0yMjIsOCArMjIyLDggQEAgUGFzc1Jl
ZlB0cjxVU3RyaW5nOjpSZXA+IElkZW50aWZpZXI6OmFkZAogICAgICAgICAgICAgfQogICAgIH0K
ICAgICBpZiAoIXItPmxlbmd0aCgpKSB7Ci0gICAgICAgIFVTdHJpbmc6OlJlcDo6ZW1wdHkoKS5o
YXNoKCk7Ci0gICAgICAgIHJldHVybiAmVVN0cmluZzo6UmVwOjplbXB0eSgpOworICAgICAgICBV
U3RyaW5nOjpSZXA6OmVtcHR5KCktPmhhc2goKTsKKyAgICAgICAgcmV0dXJuIFVTdHJpbmc6OlJl
cDo6ZW1wdHkoKTsKICAgICB9CiAgICAgcmV0dXJuICpnbG9iYWxEYXRhLT5pZGVudGlmaWVyVGFi
bGUtPmFkZChyKS5maXJzdDsKIH0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVy
dHlOYW1lQXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJv
cGVydHlOYW1lQXJyYXkuY3BwCShyZXZpc2lvbiA1NTY3NikKKysrIEphdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUHJvcGVydHlOYW1lQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3
IEBAIHN0YXRpYyBjb25zdCBzaXplX3Qgc2V0VGhyZXNob2xkID0gMjA7CiAKIHZvaWQgUHJvcGVy
dHlOYW1lQXJyYXk6OmFkZChVU3RyaW5nOjpSZXAqIGlkZW50aWZpZXIpCiB7Ci0gICAgQVNTRVJU
KGlkZW50aWZpZXIgPT0gJlVTdHJpbmc6OlJlcDo6ZW1wdHkoKSB8fCBpZGVudGlmaWVyLT5pc0lk
ZW50aWZpZXIoKSk7CisgICAgQVNTRVJUKGlkZW50aWZpZXIgPT0gVVN0cmluZzo6UmVwOjplbXB0
eSgpIHx8IGlkZW50aWZpZXItPmlzSWRlbnRpZmllcigpKTsKIAogICAgIHNpemVfdCBzaXplID0g
bV9kYXRhLT5wcm9wZXJ0eU5hbWVWZWN0b3IoKS5zaXplKCk7CiAgICAgaWYgKHNpemUgPCBzZXRU
aHJlc2hvbGQpIHsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0cmluZy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9VU3RyaW5nLmNwcAkocmV2aXNpb24g
NTU2NzYpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VTdHJpbmcuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNDYsMTggKzE0NiwxMiBAQCBib29sIG9wZXJhdG9yPT0oY29uc3QgQ1N0cmluZyYg
YzEsIGNvbnN0CiAgICAgcmV0dXJuIGxlbiA9PSBjMi5zaXplKCkgJiYgKGxlbiA9PSAwIHx8IG1l
bWNtcChjMS5jX3N0cigpLCBjMi5jX3N0cigpLCBsZW4pID09IDApOwogfQogCi0vLyBUaGVzZSBz
dGF0aWMgc3RyaW5ncyBhcmUgaW1tdXRhYmxlLCBleGNlcHQgZm9yIHJjLCB3aG9zZSBpbml0aWFs
IHZhbHVlIGlzIGNob3NlbiB0bwotLy8gcmVkdWNlIHRoZSBwb3NzaWJpbGl0eSBvZiBpdCBiZWNv
bWluZyB6ZXJvIGR1ZSB0byByZWYvZGVyZWYgbm90IGJlaW5nIHRocmVhZC1zYWZlLgotc3RhdGlj
IFVDaGFyIHNoYXJlZEVtcHR5Q2hhcjsKLVVTdHJpbmdJbXBsKiBVU3RyaW5nSW1wbDo6c19lbXB0
eTsKLQorLy8gVGhlIG51bGwgc3RyaW5nIGlzIGltbXV0YWJsZSwgZXhjZXB0IGZvciByZWZDb3Vu
dC4KIFVTdHJpbmc6OlJlcCogVVN0cmluZzo6c19udWxsUmVwOwogVVN0cmluZyogVVN0cmluZzo6
c19udWxsVVN0cmluZzsKIAogdm9pZCBpbml0aWFsaXplVVN0cmluZygpCiB7Ci0gICAgVVN0cmlu
Z0ltcGw6OnNfZW1wdHkgPSBuZXcgVVN0cmluZ0ltcGwoJnNoYXJlZEVtcHR5Q2hhciwgMCwgVVN0
cmluZ0ltcGw6OkNvbnN0cnVjdFN0YXRpY1N0cmluZyk7Ci0KICAgICBVU3RyaW5nOjpzX251bGxS
ZXAgPSBuZXcgVVN0cmluZ0ltcGwoMCwgMCwgVVN0cmluZ0ltcGw6OkNvbnN0cnVjdFN0YXRpY1N0
cmluZyk7CiAgICAgVVN0cmluZzo6c19udWxsVVN0cmluZyA9IG5ldyBVU3RyaW5nOwogfQpAQCAt
MTczLDExICsxNjcsOCBAQCBVU3RyaW5nOjpVU3RyaW5nKGNvbnN0IGNoYXIqIGMsIHVuc2lnbmVk
CiB9CiAKIFVTdHJpbmc6OlVTdHJpbmcoY29uc3QgVUNoYXIqIGMsIHVuc2lnbmVkIGxlbmd0aCkK
KyAgICA6IG1fcmVwKFJlcDo6Y3JlYXRlKGMsIGxlbmd0aCkpCiB7Ci0gICAgaWYgKGxlbmd0aCA9
PSAwKQotICAgICAgICBtX3JlcCA9ICZSZXA6OmVtcHR5KCk7Ci0gICAgZWxzZQotICAgICAgICBt
X3JlcCA9IFJlcDo6Y3JlYXRlKGMsIGxlbmd0aCk7CiB9CiAKIFVTdHJpbmcgVVN0cmluZzo6ZnJv
bShpbnQgaSkKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0cmluZ0ltcGwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0cmluZ0ltcGwuY3BwCShyZXZp
c2lvbiA1NTY3OSkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0cmluZ0ltcGwuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiVVN0cmluZ0ltcGwuaCIK
IAogI2luY2x1ZGUgIklkZW50aWZpZXIuaCIKKyNpbmNsdWRlICJTdGRMaWJFeHRyYXMuaCIKICNp
bmNsdWRlICJVU3RyaW5nLmgiCiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVVRGOC5oPgogCkBAIC0z
NSw0MSArMzYsNDIgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIEpTQyB7CiAK
LVBhc3NSZWZQdHI8VVN0cmluZ0ltcGw+IFVTdHJpbmdJbXBsOjpjcmVhdGUoY29uc3QgY2hhciog
YykKK1VTdHJpbmdJbXBsKiBVU3RyaW5nSW1wbDo6ZW1wdHkoKQogewotICAgIEFTU0VSVChjKTsK
KyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFVTdHJpbmdJbXBsLCBlbXB0eVN0cmluZywgKDAsIDAs
IENvbnN0cnVjdFN0YXRpY1N0cmluZykpOworICAgIHJldHVybiAmZW1wdHlTdHJpbmc7Cit9CiAK
LSAgICBpZiAoIWNbMF0pCi0gICAgICAgIHJldHVybiAmVVN0cmluZ0ltcGw6OmVtcHR5KCk7CitQ
YXNzUmVmUHRyPFVTdHJpbmdJbXBsPiBVU3RyaW5nSW1wbDo6Y3JlYXRlKGNvbnN0IFVDaGFyKiBj
aGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgaWYgKCFjaGFyYWN0ZXJzIHx8ICFs
ZW5ndGgpCisgICAgICAgIHJldHVybiBlbXB0eSgpOwogCi0gICAgc2l6ZV90IGxlbmd0aCA9IHN0
cmxlbihjKTsKLSAgICBVQ2hhciogZDsKLSAgICBQYXNzUmVmUHRyPFVTdHJpbmdJbXBsPiByZXN1
bHQgPSBVU3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGQpOwotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspCi0gICAgICAgIGRbaV0gPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBjaGFyPihjW2ldKTsgLy8gdXNlIHVuc2lnbmVkIGNoYXIgdG8gemVyby1l
eHRlbmQgaW5zdGVhZCBvZiBzaWduLWV4dGVuZAotICAgIHJldHVybiByZXN1bHQ7CisgICAgVUNo
YXIqIGRhdGE7CisgICAgUGFzc1JlZlB0cjxVU3RyaW5nSW1wbD4gc3RyaW5nID0gY3JlYXRlVW5p
bml0aWFsaXplZChsZW5ndGgsIGRhdGEpOworICAgIG1lbWNweShkYXRhLCBjaGFyYWN0ZXJzLCBs
ZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKKyAgICByZXR1cm4gc3RyaW5nOwogfQogCi1QYXNzUmVm
UHRyPFVTdHJpbmdJbXBsPiBVU3RyaW5nSW1wbDo6Y3JlYXRlKGNvbnN0IGNoYXIqIGMsIHVuc2ln
bmVkIGxlbmd0aCkKK1Bhc3NSZWZQdHI8VVN0cmluZ0ltcGw+IFVTdHJpbmdJbXBsOjpjcmVhdGUo
Y29uc3QgY2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQogewotICAgIEFTU0VSVChj
KTsKKyAgICBpZiAoIWNoYXJhY3RlcnMgfHwgIWxlbmd0aCkKKyAgICAgICAgcmV0dXJuIGVtcHR5
KCk7CiAKLSAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuICZVU3RyaW5nSW1wbDo6ZW1w
dHkoKTsKLQotICAgIFVDaGFyKiBkOwotICAgIFBhc3NSZWZQdHI8VVN0cmluZ0ltcGw+IHJlc3Vs
dCA9IFVTdHJpbmdJbXBsOjpjcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCwgZCk7Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKQotICAgICAgICBkW2ldID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgY2hhcj4oY1tpXSk7IC8vIHVzZSB1bnNpZ25lZCBjaGFyIHRvIHplcm8t
ZXh0ZW5kIGluc3RlYWQgb2Ygc2lnbi1leHRlbmQKLSAgICByZXR1cm4gcmVzdWx0OworICAgIFVD
aGFyKiBkYXRhOworICAgIFBhc3NSZWZQdHI8VVN0cmluZ0ltcGw+IHN0cmluZyA9IGNyZWF0ZVVu
aW5pdGlhbGl6ZWQobGVuZ3RoLCBkYXRhKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpICE9
IGxlbmd0aDsgKytpKSB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IGNoYXJhY3RlcnNbaV07
CisgICAgICAgIGRhdGFbaV0gPSBjOworICAgIH0KKyAgICByZXR1cm4gc3RyaW5nOwogfQogCi1Q
YXNzUmVmUHRyPFVTdHJpbmdJbXBsPiBVU3RyaW5nSW1wbDo6Y3JlYXRlKGNvbnN0IFVDaGFyKiBi
dWZmZXIsIHVuc2lnbmVkIGxlbmd0aCkKK1Bhc3NSZWZQdHI8VVN0cmluZ0ltcGw+IFVTdHJpbmdJ
bXBsOjpjcmVhdGUoY29uc3QgY2hhciogc3RyaW5nKQogewotICAgIFVDaGFyKiBuZXdCdWZmZXI7
Ci0gICAgUGFzc1JlZlB0cjxVU3RyaW5nSW1wbD4gaW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQo
bGVuZ3RoLCBuZXdCdWZmZXIpOwotICAgIGNvcHlDaGFycyhuZXdCdWZmZXIsIGJ1ZmZlciwgbGVu
Z3RoKTsKLSAgICByZXR1cm4gaW1wbDsKKyAgICBpZiAoIXN0cmluZykKKyAgICAgICAgcmV0dXJu
IGVtcHR5KCk7CisgICAgcmV0dXJuIGNyZWF0ZShzdHJpbmcsIHN0cmxlbihzdHJpbmcpKTsKIH0K
IAogU2hhcmVkVUNoYXIqIFVTdHJpbmdJbXBsOjpiYXNlU2hhcmVkQnVmZmVyKCkKSW5kZXg6IEph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0cmluZ0ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1VTdHJpbmdJbXBsLmgJKHJldmlzaW9uIDU1Njc5KQorKysgSmF2YVNj
cmlwdENvcmUvcnVudGltZS9VU3RyaW5nSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsMTIg
KzExMywxMiBAQCBwdWJsaWM6CiAgICAgICAgICAgICBBU1NFUlQodmVjdG9yLmRhdGEoKSk7CiAg
ICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFVTdHJpbmdJbXBsKHZlY3Rvci5yZWxlYXNl
QnVmZmVyKCksIGxlbmd0aCkpOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiAmZW1wdHkoKTsK
KyAgICAgICAgcmV0dXJuIGVtcHR5KCk7CiAgICAgfQogCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8
VVN0cmluZ0ltcGw+IGNyZWF0ZShjb25zdCBjaGFyKiBjKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0
cjxVU3RyaW5nSW1wbD4gY3JlYXRlKGNvbnN0IGNoYXIqIGMsIHVuc2lnbmVkIGxlbmd0aCk7CiAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8VVN0cmluZ0ltcGw+IGNyZWF0ZShjb25zdCBVQ2hhciogYnVm
ZmVyLCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFVTdHJpbmdJbXBs
PiBjcmVhdGUoY29uc3QgY2hhciogYywgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxVU3RyaW5nSW1wbD4gY3JlYXRlKGNvbnN0IGNoYXIqIGMpOwogCiAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8VVN0cmluZ0ltcGw+IGNyZWF0ZShQYXNzUmVmUHRyPFVTdHJpbmdJbXBsPiBy
ZXAsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogICAgIHsKQEAgLTEzNiw3ICsx
MzYsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAoIWxlbmd0aCkgewogICAgICAgICAg
ICAgb3V0cHV0ID0gMDsKLSAgICAgICAgICAgIHJldHVybiAmZW1wdHkoKTsKKyAgICAgICAgICAg
IHJldHVybiBlbXB0eSgpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGxlbmd0aCA+ICgoc3Rk
OjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSAtIHNpemVvZihVU3RyaW5nSW1wbCkpIC8g
c2l6ZW9mKFVDaGFyKSkpCkBAIC0xNTAsNyArMTUwLDcgQEAgcHVibGljOgogICAgIHsKICAgICAg
ICAgaWYgKCFsZW5ndGgpIHsKICAgICAgICAgICAgIG91dHB1dCA9IDA7Ci0gICAgICAgICAgICBy
ZXR1cm4gJmVtcHR5KCk7CisgICAgICAgICAgICByZXR1cm4gZW1wdHkoKTsKICAgICAgICAgfQog
CiAgICAgICAgIGlmIChsZW5ndGggPiAoKHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4
KCkgLSBzaXplb2YoVVN0cmluZ0ltcGwpKSAvIHNpemVvZihVQ2hhcikpKQpAQCAtMjAzLDcgKzIw
Myw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdW5zaWduZWQgY29tcHV0ZUhhc2goY29uc3QgY2hh
ciogcywgdW5zaWduZWQgbGVuZ3RoKSB7IHJldHVybiBXVEY6OnN0cmluZ0hhc2gocywgbGVuZ3Ro
KTsgfQogICAgIHN0YXRpYyB1bnNpZ25lZCBjb21wdXRlSGFzaChjb25zdCBjaGFyKiBzKSB7IHJl
dHVybiBXVEY6OnN0cmluZ0hhc2gocyk7IH0KIAotICAgIHN0YXRpYyBVU3RyaW5nSW1wbCYgZW1w
dHkoKSB7IHJldHVybiAqc19lbXB0eTsgfQorICAgIHN0YXRpYyBVU3RyaW5nSW1wbCogZW1wdHko
KTsKIAogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBjaGVja0NvbnNpc3RlbmN5KCkgY29uc3QKICAg
ICB7CkBAIC0yOTUsOCArMjk1LDYgQEAgcHJpdmF0ZToKICAgICB9OwogICAgIG11dGFibGUgdW5z
aWduZWQgbV9oYXNoOwogCi0gICAgSlNfRVhQT1JUREFUQSBzdGF0aWMgVVN0cmluZ0ltcGwqIHNf
ZW1wdHk7Ci0KICAgICBmcmllbmQgY2xhc3MgSklUOwogICAgIGZyaWVuZCBjbGFzcyBTbWFsbFN0
cmluZ3NTdG9yYWdlOwogICAgIGZyaWVuZCBjbGFzcyBVU3RyaW5nT3JSb3BlSW1wbDsKSW5kZXg6
IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9nCShyZXZp
c2lvbiA1NTgxMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMjcgQEAKKzIwMTAtMDMtMTAgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBw
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNTk5MQorICAgICAgICBX
b3VsZCBiZSBmYXN0ZXIgdG8gbm90IHVzZSBhIHRocmVhZCBzcGVjaWZpYyB0byBpbXBsZW1lbnQg
U3RyaW5nSW1wbDo6ZW1wdHkoKQorCisgICAgICAgIENvcHkgSmF2YVNjcmlwdENvcmUgaW4gbWFr
aW5nICdzdGF0aWMnIHN0cmluZ3MgdGhyZWFkc2FmZSwgbWFrZSB0aGUgZW1wdHkgc3RyaW5nIGEg
c3RhdGljLAorICAgICAgICBzaGFyZWQgYnkgYWxsIHRocmVhZHMuCisKKyAgICAgICAgfjIlIHBy
b2dyZXNzaW9uIG9uIERyb21hZW8gRE9NIGNvcmUgJiBKUyBsaWIgdGVzdHMuCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9UaHJlYWRHbG9iYWxEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRocmVh
ZEdsb2JhbERhdGE6OlRocmVhZEdsb2JhbERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGhyZWFk
R2xvYmFsRGF0YTo6flRocmVhZEdsb2JhbERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL1RocmVh
ZEdsb2JhbERhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OlRocmVhZEdsb2JhbERhdGE6OmV2ZW50
TmFtZXMpOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvU3RyaW5nSW1wbC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTdHJpbmdJbXBsOjpTdHJpbmdJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
cmluZ0ltcGw6OmVtcHR5KToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1N0cmluZ0ltcGwuaDoK
KyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0ltcGw6OmRlcmVmKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0cmluZ0ltcGw6Omhhc09uZVJlZik6CisKIDIwMTAtMDMtMTAgIElseWEgVGlraG9ub3Zza3kg
IDxsb2lzbG9AbG9pc2xvLW1hY2Jvb2twcm8ubG9jYWw+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
UGF2ZWwgRmVsZG1hbi4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vVGhyZWFkR2xvYmFsRGF0YS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9UaHJlYWRHbG9iYWxEYXRhLmNwcAko
cmV2aXNpb24gNTU2NzYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1RocmVhZEdsb2JhbERhdGEuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01NSw4ICs1NSw3IEBAIFRocmVhZEdsb2JhbERhdGEqIFRocmVh
ZEdsb2JhbERhdGE6OnN0YXQKICNlbmRpZgogCiBUaHJlYWRHbG9iYWxEYXRhOjpUaHJlYWRHbG9i
YWxEYXRhKCkKLSAgICA6IG1fZW1wdHlTdHJpbmcobmV3IFN0cmluZ0ltcGwpCi0gICAgLCBtX2F0
b21pY1N0cmluZ1RhYmxlKG5ldyBIYXNoU2V0PFN0cmluZ0ltcGwqPikKKyAgICA6IG1fYXRvbWlj
U3RyaW5nVGFibGUobmV3IEhhc2hTZXQ8U3RyaW5nSW1wbCo+KQogICAgICwgbV9ldmVudE5hbWVz
KG5ldyBFdmVudE5hbWVzKQogICAgICwgbV90aHJlYWRUaW1lcnMobmV3IFRocmVhZFRpbWVycykK
ICNpZm5kZWYgTkRFQlVHCkBAIC04MiwxNCArODEsNiBAQCBUaHJlYWRHbG9iYWxEYXRhOjp+VGhy
ZWFkR2xvYmFsRGF0YSgpCiAgICAgZGVsZXRlIG1fZXZlbnROYW1lczsKICAgICBkZWxldGUgbV9h
dG9taWNTdHJpbmdUYWJsZTsKICAgICBkZWxldGUgbV90aHJlYWRUaW1lcnM7Ci0KLSAgICAvLyBV
c2luZyBtZW1iZXIgdmFyaWFibGUgbV9pc01haW5UaHJlYWQgaW5zdGVhZCBvZiBjYWxsaW5nIFdU
Rjo6aXNNYWluVGhyZWFkKCkgZGlyZWN0bHkKLSAgICAvLyB0byBhdm9pZCBpc3N1ZXMgZGVzY3Jp
YmVkIGluIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNTk3My4KLSAg
ICAvLyBJbiBzaG9ydCwgc29tZSBwdGhyZWFkLWJhc2VkIHBsYXRmb3JtcyBhbmQgcG9ydHMgY2Fu
IG5vdCB1c2UgV1RGOjpDdXJyZW50VGhyZWFkKCkgYW5kIFdURjo6aXNNYWluVGhyZWFkKCkKLSAg
ICAvLyBpbiBkZXN0cnVjdG9ycyBvZiB0aHJlYWQtc3BlY2lmaWMgZGF0YS4KLSAgICBBU1NFUlQo
bV9pc01haW5UaHJlYWQgfHwgbV9lbXB0eVN0cmluZy0+aGFzT25lUmVmKCkpOyAvLyBXZSBpbnRl
bnRpb25hbGx5IGRvbid0IGNsZWFuIHVwIHN0YXRpYyBkYXRhIG9uIGFwcGxpY2F0aW9uIHF1aXQs
IHNvIHRoZXJlIHdpbGwgYmUgbWFueSBzdHJpbmdzIHJlbWFpbmluZyBvbiB0aGUgbWFpbiB0aHJl
YWQuCi0KLSAgICBkZWxldGUgbV9lbXB0eVN0cmluZzsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9UaHJlYWRHbG9iYWxEYXRhLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9UaHJlYWRHbG9iYWxEYXRhLmgJKHJldmlzaW9uIDU1Njc2
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9UaHJlYWRHbG9iYWxEYXRhLmgJKHdvcmtpbmcgY29weSkK
QEAgLTUxLDcgKzUxLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB+VGhyZWFkR2xv
YmFsRGF0YSgpOwogCiAgICAgICAgIEV2ZW50TmFtZXMmIGV2ZW50TmFtZXMoKSB7IHJldHVybiAq
bV9ldmVudE5hbWVzOyB9Ci0gICAgICAgIFN0cmluZ0ltcGwqIGVtcHR5U3RyaW5nKCkgeyByZXR1
cm4gbV9lbXB0eVN0cmluZzsgfQogICAgICAgICBIYXNoU2V0PFN0cmluZ0ltcGwqPiYgYXRvbWlj
U3RyaW5nVGFibGUoKSB7IHJldHVybiAqbV9hdG9taWNTdHJpbmdUYWJsZTsgfQogICAgICAgICBU
aHJlYWRUaW1lcnMmIHRocmVhZFRpbWVycygpIHsgcmV0dXJuICptX3RocmVhZFRpbWVyczsgfQog
CkBAIC02NCw3ICs2Myw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNlbmRpZgogCiAgICAgcHJp
dmF0ZToKLSAgICAgICAgU3RyaW5nSW1wbCogbV9lbXB0eVN0cmluZzsKICAgICAgICAgSGFzaFNl
dDxTdHJpbmdJbXBsKj4qIG1fYXRvbWljU3RyaW5nVGFibGU7CiAgICAgICAgIEV2ZW50TmFtZXMq
IG1fZXZlbnROYW1lczsKICAgICAgICAgVGhyZWFkVGltZXJzKiBtX3RocmVhZFRpbWVyczsKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdJbXBsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nSW1wbC5jcHAJKHJldmlzaW9uIDU1Njc2KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZ0ltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
Nyw3ICs1Nyw3IEBAIFN0cmluZ0ltcGw6OlN0cmluZ0ltcGwoKQogICAgIDogbV9kYXRhKDApCiAg
ICAgLCBtX3NoYXJlZEJ1ZmZlcigwKQogICAgICwgbV9sZW5ndGgoMCkKLSAgICAsIG1fcmVmQ291
bnRBbmRGbGFncyhzX3JlZkNvdW50SW5jcmVtZW50IHwgQnVmZmVySW50ZXJuYWwpCisgICAgLCBt
X3JlZkNvdW50QW5kRmxhZ3Moc19yZWZDb3VudEZsYWdTdGF0aWMgfCBCdWZmZXJJbnRlcm5hbCkK
ICAgICAsIG1faGFzaCgwKQogewogICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBoYXNoIGlzIGNvbXB1
dGVkIHNvIHRoYXQgQXRvbWljU3RyaW5nSGFzaCBjYW4gY2FsbCBleGlzdGluZ0hhc2goKQpAQCAt
MTIwLDcgKzEyMCw4IEBAIFN0cmluZ0ltcGw6On5TdHJpbmdJbXBsKCkKIAogU3RyaW5nSW1wbCog
U3RyaW5nSW1wbDo6ZW1wdHkoKQogewotICAgIHJldHVybiB0aHJlYWRHbG9iYWxEYXRhKCkuZW1w
dHlTdHJpbmcoKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZ0ltcGwsIGVtcHR5U3Ry
aW5nLCAoKSk7CisgICAgcmV0dXJuICZlbXB0eVN0cmluZzsKIH0KIAogYm9vbCBTdHJpbmdJbXBs
Ojpjb250YWluc09ubHlXaGl0ZXNwYWNlKCkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9T
dHJpbmdJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZ0lt
cGwuaAkocmV2aXNpb24gNTU2NzYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nSW1w
bC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTksOCArMTE5LDggQEAgcHVibGljOgogICAgIGlubGlu
ZSBzdGF0aWMgdW5zaWduZWQgY29tcHV0ZUhhc2goY29uc3QgY2hhciogZGF0YSkgeyByZXR1cm4g
V1RGOjpzdHJpbmdIYXNoKGRhdGEpOyB9CiAKICAgICBTdHJpbmdJbXBsKiByZWYoKSB7IG1fcmVm
Q291bnRBbmRGbGFncyArPSBzX3JlZkNvdW50SW5jcmVtZW50OyByZXR1cm4gdGhpczsgfQotICAg
IEFMV0FZU19JTkxJTkUgdm9pZCBkZXJlZigpIHsgbV9yZWZDb3VudEFuZEZsYWdzIC09IHNfcmVm
Q291bnRJbmNyZW1lbnQ7IGlmICghKG1fcmVmQ291bnRBbmRGbGFncyAmIHNfcmVmQ291bnRNYXNr
KSkgZGVsZXRlIHRoaXM7IH0KLSAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaGFzT25lUmVmKCkgY29u
c3QgeyByZXR1cm4gKG1fcmVmQ291bnRBbmRGbGFncyAmIHNfcmVmQ291bnRNYXNrKSA9PSBzX3Jl
ZkNvdW50SW5jcmVtZW50OyB9CisgICAgQUxXQVlTX0lOTElORSB2b2lkIGRlcmVmKCkgeyBtX3Jl
ZkNvdW50QW5kRmxhZ3MgLT0gc19yZWZDb3VudEluY3JlbWVudDsgaWYgKCEobV9yZWZDb3VudEFu
ZEZsYWdzICYgKHNfcmVmQ291bnRNYXNrIHwgc19yZWZDb3VudEZsYWdTdGF0aWMpKSkgZGVsZXRl
IHRoaXM7IH0KKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaGFzT25lUmVmKCkgY29uc3QgeyByZXR1
cm4gKG1fcmVmQ291bnRBbmRGbGFncyAmIChzX3JlZkNvdW50TWFzayB8IHNfcmVmQ291bnRGbGFn
U3RhdGljKSkgPT0gc19yZWZDb3VudEluY3JlbWVudDsgfQogCiAgICAgLy8gUmV0dXJucyBhIFN0
cmluZ0ltcGwgc3VpdGFibGUgZm9yIHVzZSBvbiBhbm90aGVyIHRocmVhZC4KICAgICBQYXNzUmVm
UHRyPFN0cmluZ0ltcGw+IGNyb3NzVGhyZWFkU3RyaW5nKCk7CkBAIC0yMDEsOCArMjAxLDkgQEAg
cHJpdmF0ZToKICAgICAvLyBJbiB0aGlzIGNhc2UsIHRoZSBtX2RhdGEgcG9pbnRlciBpcyBhbiAi
aW50ZXJuYWwgYnVmZmVyIiwgYW5kIGRvZXMgbm90IG5lZWQgdG8gYmUgZGVhbGxvY2F0ZWQuCiAg
ICAgQnVmZmVyT3duZXJzaGlwIGJ1ZmZlck93bmVyc2hpcCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRp
Y19jYXN0PEJ1ZmZlck93bmVyc2hpcD4obV9yZWZDb3VudEFuZEZsYWdzICYgc19yZWZDb3VudE1h
c2tCdWZmZXJPd25lcnNoaXApOyB9CiAKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc19yZWZD
b3VudE1hc2sgPSAweEZGRkZGRkYwOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzX3JlZkNv
dW50SW5jcmVtZW50ID0gMHgxMDsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc19yZWZDb3Vu
dE1hc2sgPSAweEZGRkZGRkUwOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzX3JlZkNvdW50
SW5jcmVtZW50ID0gMHgyMDsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc19yZWZDb3VudEZs
YWdTdGF0aWMgPSAweDEwOwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzX3JlZkNvdW50Rmxh
Z0hhc1Rlcm1pbmF0aW5nTnVsbENoYXJhY3RlciA9IDB4ODsKICAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgc19yZWZDb3VudEZsYWdJblRhYmxlID0gMHg0OwogICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBzX3JlZkNvdW50TWFza0J1ZmZlck93bmVyc2hpcCA9IDB4MzsK
</data>
<flag name="review"
          id="33597"
          type_id="1"
          status="-"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50456</attachid>
            <date>2010-03-10 17:21:44 -0800</date>
            <delta_ts>2010-03-10 18:11:31 -0800</delta_ts>
            <desc>The patch</desc>
            <filename>patch.emptystatic.2.txt</filename>
            <type>text/plain</type>
            <size>17140</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDU1ODEyKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzMgQEAKKzIwMTAtMDMtMTAgIEdhdmluIEJh
cnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0zNTk5MQorICAgICAgICBXb3VsZCBiZSBmYXN0ZXIgdG8gbm90IHVzZSBhIHRo
cmVhZCBzcGVjaWZpYyB0byBpbXBsZW1lbnQgU3RyaW5nSW1wbDo6ZW1wdHkoKQorCisgICAgICAg
IENoYW5nZSBKU0M6OlVTdHJpbmdJbXBsJ3MgaW1wbGVtZW50YXRpb24gb2YgZW1wdHkoKSBtYXRj
aCB0byBtYXRjaCBTdHJpbmdJbXBsJ3MgbmV3IGltcGxlbWVudGF0aW9uCisgICAgICAgICh1c2Ug
YSBzdGF0aWMgZGVmaW5lZCB3aXRoaW4gdGhlIGVtcHR5KCkgbWV0aG9kKSwgYW5kIGNoYW5nZSB0
aGUgaW50ZXJmYWNlIHRvIG1hdGNoIHRvbyAocmV0dXJuCisgICAgICAgIGEgcG9pbnRlciBub3Qg
YSByZWZlcmVuY2UpLiAKKworICAgICAgICB+MCUgcGVyZm9ybWFuY2UgaW1wYWN0IChwb3NzaWJs
ZSBtaW5vciBwcm9ncmVzc2lvbiBmcm9tIG1vdmluZyBlbXB0eSgpIGZyb20gLmggdG8gLmNwcCku
CisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS5leHA6CisgICAgICAgICogcnVudGltZS9JZGVu
dGlmaWVyLmNwcDoKKyAgICAgICAgKEpTQzo6SWRlbnRpZmllcjo6YWRkKToKKyAgICAgICAgKEpT
Qzo6SWRlbnRpZmllcjo6YWRkU2xvd0Nhc2UpOgorICAgICAgICAqIHJ1bnRpbWUvUHJvcGVydHlO
YW1lQXJyYXkuY3BwOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eU5hbWVBcnJheTo6YWRkKToKKyAg
ICAgICAgKiBydW50aW1lL1VTdHJpbmcuY3BwOgorICAgICAgICAoSlNDOjppbml0aWFsaXplVVN0
cmluZyk6CisgICAgICAgIChKU0M6OlVTdHJpbmc6OlVTdHJpbmcpOgorICAgICAgICAqIHJ1bnRp
bWUvVVN0cmluZ0ltcGwuY3BwOgorICAgICAgICAoSlNDOjpVU3RyaW5nSW1wbDo6ZW1wdHkpOgor
ICAgICAgICAoSlNDOjpVU3RyaW5nSW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL1VT
dHJpbmdJbXBsLmg6CisgICAgICAgIChKU0M6OlVTdHJpbmdJbXBsOjphZG9wdCk6CisgICAgICAg
IChKU0M6OlVTdHJpbmdJbXBsOjpjcmVhdGVVbmluaXRpYWxpemVkKToKKyAgICAgICAgKEpTQzo6
VVN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQpOgorCiAyMDEwLTAzLTA5ICBHZW9m
ZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWxl
eGV5IFByb3NrdXJ5YWtvdiwgRGFyaW4gQWRsZXIsIGFuZCBTYW0gV2VpbmlnLgpJbmRleDogSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLmV4cAkocmV2aXNpb24gNTU2NzYpCisrKyBKYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS5leHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCBf
X1pOM0pTQzExSlNCeXRlQXJyYXkxNWNyZWF0ZVN0cnVjdHVyZUVOCiBfX1pOM0pTQzExSlNCeXRl
QXJyYXlDMUVQTlNfOUV4ZWNTdGF0ZUVOM1dURjE3Tm9uTnVsbFBhc3NSZWZQdHJJTlNfOVN0cnVj
dHVyZUVFRVBOUzNfOUJ5dGVBcnJheUVQS05TXzlDbGFzc0luZm9FCiBfX1pOM0pTQzExUGFyc2Vy
QXJlbmE1cmVzZXRFdgogX19aTjNKU0MxMVVTdHJpbmdJbXBsMTJzaGFyZWRCdWZmZXJFdgotX19a
TjNKU0MxMVVTdHJpbmdJbXBsN3NfZW1wdHlFCitfX1pOM0pTQzExVVN0cmluZ0ltcGw1ZW1wdHlF
dgogX19aTjNKU0MxMVVTdHJpbmdJbXBsRDFFdgogX19aTjNKU0MxMWNoZWNrU3ludGF4RVBOU185
RXhlY1N0YXRlRVJLTlNfMTBTb3VyY2VDb2RlRQogX19aTjNKU0MxMkRhdGVJbnN0YW5jZTRpbmZv
RQpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXIuY3BwCShyZXZpc2lvbiA1NTY3
NikKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEyNyw4ICsxMjcsOCBAQCBQYXNzUmVmUHRyPFVTdHJpbmc6OlJlcD4gSWRlbnRpZmll
cjo6YWRkCiAgICAgQVNTRVJUKGMpOwogCiAgICAgaWYgKCFjWzBdKSB7Ci0gICAgICAgIFVTdHJp
bmc6OlJlcDo6ZW1wdHkoKS5oYXNoKCk7Ci0gICAgICAgIHJldHVybiAmVVN0cmluZzo6UmVwOjpl
bXB0eSgpOworICAgICAgICBVU3RyaW5nOjpSZXA6OmVtcHR5KCktPmhhc2goKTsKKyAgICAgICAg
cmV0dXJuIFVTdHJpbmc6OlJlcDo6ZW1wdHkoKTsKICAgICB9CiAgICAgaWYgKCFjWzFdKQogICAg
ICAgICByZXR1cm4gYWRkKGdsb2JhbERhdGEsIGdsb2JhbERhdGEtPnNtYWxsU3RyaW5ncy5zaW5n
bGVDaGFyYWN0ZXJTdHJpbmdSZXAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oY1swXSkpKTsK
QEAgLTE5MSw4ICsxOTEsOCBAQCBQYXNzUmVmUHRyPFVTdHJpbmc6OlJlcD4gSWRlbnRpZmllcjo6
YWRkCiAgICAgICAgICAgICByZXR1cm4gYWRkKGdsb2JhbERhdGEsIGdsb2JhbERhdGEtPnNtYWxs
U3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmdSZXAoYykpOwogICAgIH0KICAgICBpZiAoIWxl
bmd0aCkgewotICAgICAgICBVU3RyaW5nOjpSZXA6OmVtcHR5KCkuaGFzaCgpOwotICAgICAgICBy
ZXR1cm4gJlVTdHJpbmc6OlJlcDo6ZW1wdHkoKTsKKyAgICAgICAgVVN0cmluZzo6UmVwOjplbXB0
eSgpLT5oYXNoKCk7CisgICAgICAgIHJldHVybiBVU3RyaW5nOjpSZXA6OmVtcHR5KCk7CiAgICAg
fQogICAgIFVDaGFyQnVmZmVyIGJ1ZiA9IHtzLCBsZW5ndGh9OyAKICAgICBwYWlyPEhhc2hTZXQ8
VVN0cmluZzo6UmVwKj46Oml0ZXJhdG9yLCBib29sPiBhZGRSZXN1bHQgPSBnbG9iYWxEYXRhLT5p
ZGVudGlmaWVyVGFibGUtPmFkZDxVQ2hhckJ1ZmZlciwgVUNoYXJCdWZmZXJUcmFuc2xhdG9yPihi
dWYpOwpAQCAtMjIyLDggKzIyMiw4IEBAIFBhc3NSZWZQdHI8VVN0cmluZzo6UmVwPiBJZGVudGlm
aWVyOjphZGQKICAgICAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKCFyLT5sZW5ndGgoKSkgewot
ICAgICAgICBVU3RyaW5nOjpSZXA6OmVtcHR5KCkuaGFzaCgpOwotICAgICAgICByZXR1cm4gJlVT
dHJpbmc6OlJlcDo6ZW1wdHkoKTsKKyAgICAgICAgVVN0cmluZzo6UmVwOjplbXB0eSgpLT5oYXNo
KCk7CisgICAgICAgIHJldHVybiBVU3RyaW5nOjpSZXA6OmVtcHR5KCk7CiAgICAgfQogICAgIHJl
dHVybiAqZ2xvYmFsRGF0YS0+aWRlbnRpZmllclRhYmxlLT5hZGQocikuZmlyc3Q7CiB9CkluZGV4
OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5TmFtZUFycmF5LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5TmFtZUFycmF5LmNwcAkocmV2aXNp
b24gNTU2NzYpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5TmFtZUFycmF5LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQCBzdGF0aWMgY29uc3Qgc2l6ZV90IHNl
dFRocmVzaG9sZCA9IDIwOwogCiB2b2lkIFByb3BlcnR5TmFtZUFycmF5OjphZGQoVVN0cmluZzo6
UmVwKiBpZGVudGlmaWVyKQogewotICAgIEFTU0VSVChpZGVudGlmaWVyID09ICZVU3RyaW5nOjpS
ZXA6OmVtcHR5KCkgfHwgaWRlbnRpZmllci0+aXNJZGVudGlmaWVyKCkpOworICAgIEFTU0VSVChp
ZGVudGlmaWVyID09IFVTdHJpbmc6OlJlcDo6ZW1wdHkoKSB8fCBpZGVudGlmaWVyLT5pc0lkZW50
aWZpZXIoKSk7CiAKICAgICBzaXplX3Qgc2l6ZSA9IG1fZGF0YS0+cHJvcGVydHlOYW1lVmVjdG9y
KCkuc2l6ZSgpOwogICAgIGlmIChzaXplIDwgc2V0VGhyZXNob2xkKSB7CkluZGV4OiBKYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1VTdHJpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVVN0cmluZy5jcHAJKHJldmlzaW9uIDU1Njc2KQorKysgSmF2YVNjcmlwdENvcmUv
cnVudGltZS9VU3RyaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ2LDE3ICsxNDYsMTUgQEAg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IENTdHJpbmcmIGMxLCBjb25zdAogICAgIHJldHVybiBsZW4g
PT0gYzIuc2l6ZSgpICYmIChsZW4gPT0gMCB8fCBtZW1jbXAoYzEuY19zdHIoKSwgYzIuY19zdHIo
KSwgbGVuKSA9PSAwKTsKIH0KIAotLy8gVGhlc2Ugc3RhdGljIHN0cmluZ3MgYXJlIGltbXV0YWJs
ZSwgZXhjZXB0IGZvciByYywgd2hvc2UgaW5pdGlhbCB2YWx1ZSBpcyBjaG9zZW4gdG8KLS8vIHJl
ZHVjZSB0aGUgcG9zc2liaWxpdHkgb2YgaXQgYmVjb21pbmcgemVybyBkdWUgdG8gcmVmL2RlcmVm
IG5vdCBiZWluZyB0aHJlYWQtc2FmZS4KLXN0YXRpYyBVQ2hhciBzaGFyZWRFbXB0eUNoYXI7Ci1V
U3RyaW5nSW1wbCogVVN0cmluZ0ltcGw6OnNfZW1wdHk7Ci0KKy8vIFRoZSBudWxsIHN0cmluZyBp
cyBpbW11dGFibGUsIGV4Y2VwdCBmb3IgcmVmQ291bnQuCiBVU3RyaW5nOjpSZXAqIFVTdHJpbmc6
OnNfbnVsbFJlcDsKIFVTdHJpbmcqIFVTdHJpbmc6OnNfbnVsbFVTdHJpbmc7CiAKIHZvaWQgaW5p
dGlhbGl6ZVVTdHJpbmcoKQogewotICAgIFVTdHJpbmdJbXBsOjpzX2VtcHR5ID0gbmV3IFVTdHJp
bmdJbXBsKCZzaGFyZWRFbXB0eUNoYXIsIDAsIFVTdHJpbmdJbXBsOjpDb25zdHJ1Y3RTdGF0aWNT
dHJpbmcpOworICAgIC8vIFVTdHJpbmdJbXBsOjplbXB0eSgpIGRvZXMgbm90IGNvbnN0cnVjdCBp
dHMgc3RhdGljIHN0cmluZyBpbiBhIHRocmVhZHNhZmUgZmFzaGlvbiwKKyAgICAvLyBzbyBlbnN1
cmUgaXQgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgZnJvbSBoZXJlLgorICAgIFVTdHJpbmdJbXBsOjpl
bXB0eSgpOwogCiAgICAgVVN0cmluZzo6c19udWxsUmVwID0gbmV3IFVTdHJpbmdJbXBsKDAsIDAs
IFVTdHJpbmdJbXBsOjpDb25zdHJ1Y3RTdGF0aWNTdHJpbmcpOwogICAgIFVTdHJpbmc6OnNfbnVs
bFVTdHJpbmcgPSBuZXcgVVN0cmluZzsKQEAgLTE3MywxMSArMTcxLDggQEAgVVN0cmluZzo6VVN0
cmluZyhjb25zdCBjaGFyKiBjLCB1bnNpZ25lZAogfQogCiBVU3RyaW5nOjpVU3RyaW5nKGNvbnN0
IFVDaGFyKiBjLCB1bnNpZ25lZCBsZW5ndGgpCisgICAgOiBtX3JlcChSZXA6OmNyZWF0ZShjLCBs
ZW5ndGgpKQogewotICAgIGlmIChsZW5ndGggPT0gMCkKLSAgICAgICAgbV9yZXAgPSAmUmVwOjpl
bXB0eSgpOwotICAgIGVsc2UKLSAgICAgICAgbV9yZXAgPSBSZXA6OmNyZWF0ZShjLCBsZW5ndGgp
OwogfQogCiBVU3RyaW5nIFVTdHJpbmc6OmZyb20oaW50IGkpCkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1VTdHJpbmdJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1VTdHJpbmdJbXBsLmNwcAkocmV2aXNpb24gNTU2NzkpCisrKyBKYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1VTdHJpbmdJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBA
QAogI2luY2x1ZGUgIlVTdHJpbmdJbXBsLmgiCiAKICNpbmNsdWRlICJJZGVudGlmaWVyLmgiCisj
aW5jbHVkZSAiU3RkTGliRXh0cmFzLmgiCiAjaW5jbHVkZSAiVVN0cmluZy5oIgogI2luY2x1ZGUg
PHd0Zi91bmljb2RlL1VURjguaD4KIApAQCAtMzUsNDEgKzM2LDQ1IEBAIHVzaW5nIG5hbWVzcGFj
ZSBzdGQ7CiAKIG5hbWVzcGFjZSBKU0MgewogCi1QYXNzUmVmUHRyPFVTdHJpbmdJbXBsPiBVU3Ry
aW5nSW1wbDo6Y3JlYXRlKGNvbnN0IGNoYXIqIGMpCitVU3RyaW5nSW1wbCogVVN0cmluZ0ltcGw6
OmVtcHR5KCkKIHsKLSAgICBBU1NFUlQoYyk7CisgICAgLy8gQSBub24tbnVsbCBwb2ludGVyIGF0
IGFuIGludmFsaWQgYWRkcmVzcyAoaW4gcGFnZSB6ZXJvKSBzbyB0aGF0IGlmIGl0IHdlcmUgdG8g
YmUgYWNjZXNzZWQgd2UKKyAgICAvLyBzaG91bGQgY2F0Y2ggdGhlIGVycm9yIHdpdGggZmF1bHQg
KGhvd2V2ZXIgaXQgc2hvdWxkIGJlIGltcG9zc2libGUgdG8gYWNjZXNzLCBzaW5jZSBsZW5ndGgg
aXMgemVybykuCisgICAgc3RhdGljIGNvbnN0IFVDaGFyKiBpbnZhbGlkTm9uTnVsbFVDaGFyUHRy
ID0gcmVpbnRlcnByZXRfY2FzdDxVQ2hhcio+KHN0YXRpY19jYXN0PGludHB0cl90PigxKSk7Cisg
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChVU3RyaW5nSW1wbCwgZW1wdHlTdHJpbmcsIChpbnZhbGlk
Tm9uTnVsbFVDaGFyUHRyLCAwLCBDb25zdHJ1Y3RTdGF0aWNTdHJpbmcpKTsKKyAgICByZXR1cm4g
JmVtcHR5U3RyaW5nOworfQogCi0gICAgaWYgKCFjWzBdKQotICAgICAgICByZXR1cm4gJlVTdHJp
bmdJbXBsOjplbXB0eSgpOworUGFzc1JlZlB0cjxVU3RyaW5nSW1wbD4gVVN0cmluZ0ltcGw6OmNy
ZWF0ZShjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIGlm
ICghY2hhcmFjdGVycyB8fCAhbGVuZ3RoKQorICAgICAgICByZXR1cm4gZW1wdHkoKTsKIAotICAg
IHNpemVfdCBsZW5ndGggPSBzdHJsZW4oYyk7Ci0gICAgVUNoYXIqIGQ7Ci0gICAgUGFzc1JlZlB0
cjxVU3RyaW5nSW1wbD4gcmVzdWx0ID0gVVN0cmluZ0ltcGw6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQo
bGVuZ3RoLCBkKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKQotICAg
ICAgICBkW2ldID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oY1tpXSk7IC8vIHVzZSB1bnNp
Z25lZCBjaGFyIHRvIHplcm8tZXh0ZW5kIGluc3RlYWQgb2Ygc2lnbi1leHRlbmQKLSAgICByZXR1
cm4gcmVzdWx0OworICAgIFVDaGFyKiBkYXRhOworICAgIFBhc3NSZWZQdHI8VVN0cmluZ0ltcGw+
IHN0cmluZyA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBkYXRhKTsKKyAgICBtZW1jcHko
ZGF0YSwgY2hhcmFjdGVycywgbGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7CisgICAgcmV0dXJuIHN0
cmluZzsKIH0KIAotUGFzc1JlZlB0cjxVU3RyaW5nSW1wbD4gVVN0cmluZ0ltcGw6OmNyZWF0ZShj
b25zdCBjaGFyKiBjLCB1bnNpZ25lZCBsZW5ndGgpCitQYXNzUmVmUHRyPFVTdHJpbmdJbXBsPiBV
U3RyaW5nSW1wbDo6Y3JlYXRlKGNvbnN0IGNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0
aCkKIHsKLSAgICBBU1NFUlQoYyk7CisgICAgaWYgKCFjaGFyYWN0ZXJzIHx8ICFsZW5ndGgpCisg
ICAgICAgIHJldHVybiBlbXB0eSgpOwogCi0gICAgaWYgKCFsZW5ndGgpCi0gICAgICAgIHJldHVy
biAmVVN0cmluZ0ltcGw6OmVtcHR5KCk7Ci0KLSAgICBVQ2hhciogZDsKLSAgICBQYXNzUmVmUHRy
PFVTdHJpbmdJbXBsPiByZXN1bHQgPSBVU3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFsaXplZChs
ZW5ndGgsIGQpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykKLSAg
ICAgICAgZFtpXSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGNbaV0pOyAvLyB1c2UgdW5z
aWduZWQgY2hhciB0byB6ZXJvLWV4dGVuZCBpbnN0ZWFkIG9mIHNpZ24tZXh0ZW5kCi0gICAgcmV0
dXJuIHJlc3VsdDsKKyAgICBVQ2hhciogZGF0YTsKKyAgICBQYXNzUmVmUHRyPFVTdHJpbmdJbXBs
PiBzdHJpbmcgPSBjcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCwgZGF0YSk7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSAhPSBsZW5ndGg7ICsraSkgeworICAgICAgICB1bnNpZ25lZCBjaGFy
IGMgPSBjaGFyYWN0ZXJzW2ldOworICAgICAgICBkYXRhW2ldID0gYzsKKyAgICB9CisgICAgcmV0
dXJuIHN0cmluZzsKIH0KIAotUGFzc1JlZlB0cjxVU3RyaW5nSW1wbD4gVVN0cmluZ0ltcGw6OmNy
ZWF0ZShjb25zdCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBsZW5ndGgpCitQYXNzUmVmUHRyPFVT
dHJpbmdJbXBsPiBVU3RyaW5nSW1wbDo6Y3JlYXRlKGNvbnN0IGNoYXIqIHN0cmluZykKIHsKLSAg
ICBVQ2hhciogbmV3QnVmZmVyOwotICAgIFBhc3NSZWZQdHI8VVN0cmluZ0ltcGw+IGltcGwgPSBj
cmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCwgbmV3QnVmZmVyKTsKLSAgICBjb3B5Q2hhcnMobmV3
QnVmZmVyLCBidWZmZXIsIGxlbmd0aCk7Ci0gICAgcmV0dXJuIGltcGw7CisgICAgaWYgKCFzdHJp
bmcpCisgICAgICAgIHJldHVybiBlbXB0eSgpOworICAgIHJldHVybiBjcmVhdGUoc3RyaW5nLCBz
dHJsZW4oc3RyaW5nKSk7CiB9CiAKIFNoYXJlZFVDaGFyKiBVU3RyaW5nSW1wbDo6YmFzZVNoYXJl
ZEJ1ZmZlcigpCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VTdHJpbmdJbXBsLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9VU3RyaW5nSW1wbC5oCShyZXZpc2lv
biA1NTY3OSkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0cmluZ0ltcGwuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTEzLDEyICsxMTMsMTIgQEAgcHVibGljOgogICAgICAgICAgICAgQVNTRVJU
KHZlY3Rvci5kYXRhKCkpOwogICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBVU3RyaW5n
SW1wbCh2ZWN0b3IucmVsZWFzZUJ1ZmZlcigpLCBsZW5ndGgpKTsKICAgICAgICAgfQotICAgICAg
ICByZXR1cm4gJmVtcHR5KCk7CisgICAgICAgIHJldHVybiBlbXB0eSgpOwogICAgIH0KIAotICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFVTdHJpbmdJbXBsPiBjcmVhdGUoY29uc3QgY2hhciogYyk7Ci0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8VVN0cmluZ0ltcGw+IGNyZWF0ZShjb25zdCBjaGFyKiBjLCB1
bnNpZ25lZCBsZW5ndGgpOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFVTdHJpbmdJbXBsPiBjcmVh
dGUoY29uc3QgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxVU3RyaW5nSW1wbD4gY3JlYXRlKGNvbnN0IGNoYXIqIGMsIHVuc2lnbmVkIGxlbmd0
aCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VVN0cmluZ0ltcGw+IGNyZWF0ZShjb25zdCBjaGFy
KiBjKTsKIAogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFVTdHJpbmdJbXBsPiBjcmVhdGUoUGFzc1Jl
ZlB0cjxVU3RyaW5nSW1wbD4gcmVwLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkK
ICAgICB7CkBAIC0xMzYsNyArMTM2LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKCFs
ZW5ndGgpIHsKICAgICAgICAgICAgIG91dHB1dCA9IDA7Ci0gICAgICAgICAgICByZXR1cm4gJmVt
cHR5KCk7CisgICAgICAgICAgICByZXR1cm4gZW1wdHkoKTsKICAgICAgICAgfQogCiAgICAgICAg
IGlmIChsZW5ndGggPiAoKHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkgLSBzaXpl
b2YoVVN0cmluZ0ltcGwpKSAvIHNpemVvZihVQ2hhcikpKQpAQCAtMTUwLDcgKzE1MCw3IEBAIHB1
YmxpYzoKICAgICB7CiAgICAgICAgIGlmICghbGVuZ3RoKSB7CiAgICAgICAgICAgICBvdXRwdXQg
PSAwOwotICAgICAgICAgICAgcmV0dXJuICZlbXB0eSgpOworICAgICAgICAgICAgcmV0dXJuIGVt
cHR5KCk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAobGVuZ3RoID4gKChzdGQ6Om51bWVyaWNf
bGltaXRzPHNpemVfdD46Om1heCgpIC0gc2l6ZW9mKFVTdHJpbmdJbXBsKSkgLyBzaXplb2YoVUNo
YXIpKSkKQEAgLTIwMyw3ICsyMDMsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHVuc2lnbmVkIGNv
bXB1dGVIYXNoKGNvbnN0IGNoYXIqIHMsIHVuc2lnbmVkIGxlbmd0aCkgeyByZXR1cm4gV1RGOjpz
dHJpbmdIYXNoKHMsIGxlbmd0aCk7IH0KICAgICBzdGF0aWMgdW5zaWduZWQgY29tcHV0ZUhhc2go
Y29uc3QgY2hhciogcykgeyByZXR1cm4gV1RGOjpzdHJpbmdIYXNoKHMpOyB9CiAKLSAgICBzdGF0
aWMgVVN0cmluZ0ltcGwmIGVtcHR5KCkgeyByZXR1cm4gKnNfZW1wdHk7IH0KKyAgICBzdGF0aWMg
VVN0cmluZ0ltcGwqIGVtcHR5KCk7CiAKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgY2hlY2tDb25z
aXN0ZW5jeSgpIGNvbnN0CiAgICAgewpAQCAtMjk1LDggKzI5NSw2IEBAIHByaXZhdGU6CiAgICAg
fTsKICAgICBtdXRhYmxlIHVuc2lnbmVkIG1faGFzaDsKIAotICAgIEpTX0VYUE9SVERBVEEgc3Rh
dGljIFVTdHJpbmdJbXBsKiBzX2VtcHR5OwotCiAgICAgZnJpZW5kIGNsYXNzIEpJVDsKICAgICBm
cmllbmQgY2xhc3MgU21hbGxTdHJpbmdzU3RvcmFnZTsKICAgICBmcmllbmQgY2xhc3MgVVN0cmlu
Z09yUm9wZUltcGw7CkluZGV4OiBXZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL0NoYW5nZUxvZwkocmV2aXNpb24gNTU4MTIpCisrKyBXZWJDb3JlL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDI3IEBACisyMDEwLTAzLTEwICBHYXZpbiBCYXJyYWNsb3Vn
aCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MzU5OTEKKyAgICAgICAgV291bGQgYmUgZmFzdGVyIHRvIG5vdCB1c2UgYSB0aHJlYWQgc3Bl
Y2lmaWMgdG8gaW1wbGVtZW50IFN0cmluZ0ltcGw6OmVtcHR5KCkKKworICAgICAgICBDb3B5IEph
dmFTY3JpcHRDb3JlIGluIG1ha2luZyAnc3RhdGljJyBzdHJpbmdzIHRocmVhZHNhZmUsIG1ha2Ug
dGhlIGVtcHR5IHN0cmluZyBhIHN0YXRpYywKKyAgICAgICAgc2hhcmVkIGJ5IGFsbCB0aHJlYWRz
LgorCisgICAgICAgIH4yJSBwcm9ncmVzc2lvbiBvbiBEcm9tYWVvIERPTSBjb3JlICYgSlMgbGli
IHRlc3RzLgorCisgICAgICAgICogcGxhdGZvcm0vVGhyZWFkR2xvYmFsRGF0YS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpUaHJlYWRHbG9iYWxEYXRhOjpUaHJlYWRHbG9iYWxEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRocmVhZEdsb2JhbERhdGE6On5UaHJlYWRHbG9iYWxEYXRhKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9UaHJlYWRHbG9iYWxEYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpUaHJl
YWRHbG9iYWxEYXRhOjpldmVudE5hbWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1N0cmlu
Z0ltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nSW1wbDo6U3RyaW5nSW1wbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHJpbmdJbXBsOjplbXB0eSk6CisgICAgICAgICogcGxhdGZvcm0v
dGV4dC9TdHJpbmdJbXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdJbXBsOjpkZXJlZik6
CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdJbXBsOjpoYXNPbmVSZWYpOgorCiAyMDEwLTAzLTEw
ICBJbHlhIFRpa2hvbm92c2t5ICA8bG9pc2xvQGxvaXNsby1tYWNib29rcHJvLmxvY2FsPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IFBhdmVsIEZlbGRtYW4uCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L1RocmVhZEdsb2JhbERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vVGhy
ZWFkR2xvYmFsRGF0YS5jcHAJKHJldmlzaW9uIDU1Njc2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9U
aHJlYWRHbG9iYWxEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsOCArNTUsNyBAQCBUaHJl
YWRHbG9iYWxEYXRhKiBUaHJlYWRHbG9iYWxEYXRhOjpzdGF0CiAjZW5kaWYKIAogVGhyZWFkR2xv
YmFsRGF0YTo6VGhyZWFkR2xvYmFsRGF0YSgpCi0gICAgOiBtX2VtcHR5U3RyaW5nKG5ldyBTdHJp
bmdJbXBsKQotICAgICwgbV9hdG9taWNTdHJpbmdUYWJsZShuZXcgSGFzaFNldDxTdHJpbmdJbXBs
Kj4pCisgICAgOiBtX2F0b21pY1N0cmluZ1RhYmxlKG5ldyBIYXNoU2V0PFN0cmluZ0ltcGwqPikK
ICAgICAsIG1fZXZlbnROYW1lcyhuZXcgRXZlbnROYW1lcykKICAgICAsIG1fdGhyZWFkVGltZXJz
KG5ldyBUaHJlYWRUaW1lcnMpCiAjaWZuZGVmIE5ERUJVRwpAQCAtNjksNiArNjgsMTIgQEAgVGhy
ZWFkR2xvYmFsRGF0YTo6VGhyZWFkR2xvYmFsRGF0YSgpCiAgICAgLCBtX2NhY2hlZENvbnZlcnRl
clRFQyhuZXcgVEVDQ29udmVydGVyV3JhcHBlcikKICNlbmRpZgogeworICAgIC8vIFN0cmluZ0lt
cGw6OmVtcHR5KCkgZG9lcyBub3QgY29uc3RydWN0IGl0cyBzdGF0aWMgc3RyaW5nIGluIGEgdGhy
ZWFkc2FmZSBmYXNoaW9uLAorICAgIC8vIHNvIGVuc3VyZSBpdCBoYXMgYmVlbiBpbml0aWFsaXpl
ZCBmcm9tIGhlcmUuCisgICAgLy8KKyAgICAvLyBUaGlzIGNvbnN0cnVjdG9yIHdpbGwgaGF2ZSBi
ZWVuIGNhbGxlZCBvbiB0aGUgbWFpbiB0aHJlYWQgYmVmb3JlIGJlaW5nIGNhbGxlZCBvbgorICAg
IC8vIGFueSBvdGhlciB0aHJlYWQsIGFuZCBpcyBvbmx5IGNhbGxlZCBvbmNlIHBlciB0aHJlYWQu
CisgICAgU3RyaW5nSW1wbDo6ZW1wdHkoKTsKIH0KIAogVGhyZWFkR2xvYmFsRGF0YTo6flRocmVh
ZEdsb2JhbERhdGEoKQpAQCAtODIsMTQgKzg3LDYgQEAgVGhyZWFkR2xvYmFsRGF0YTo6flRocmVh
ZEdsb2JhbERhdGEoKQogICAgIGRlbGV0ZSBtX2V2ZW50TmFtZXM7CiAgICAgZGVsZXRlIG1fYXRv
bWljU3RyaW5nVGFibGU7CiAgICAgZGVsZXRlIG1fdGhyZWFkVGltZXJzOwotCi0gICAgLy8gVXNp
bmcgbWVtYmVyIHZhcmlhYmxlIG1faXNNYWluVGhyZWFkIGluc3RlYWQgb2YgY2FsbGluZyBXVEY6
OmlzTWFpblRocmVhZCgpIGRpcmVjdGx5Ci0gICAgLy8gdG8gYXZvaWQgaXNzdWVzIGRlc2NyaWJl
ZCBpbiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjU5NzMuCi0gICAg
Ly8gSW4gc2hvcnQsIHNvbWUgcHRocmVhZC1iYXNlZCBwbGF0Zm9ybXMgYW5kIHBvcnRzIGNhbiBu
b3QgdXNlIFdURjo6Q3VycmVudFRocmVhZCgpIGFuZCBXVEY6OmlzTWFpblRocmVhZCgpCi0gICAg
Ly8gaW4gZGVzdHJ1Y3RvcnMgb2YgdGhyZWFkLXNwZWNpZmljIGRhdGEuCi0gICAgQVNTRVJUKG1f
aXNNYWluVGhyZWFkIHx8IG1fZW1wdHlTdHJpbmctPmhhc09uZVJlZigpKTsgLy8gV2UgaW50ZW50
aW9uYWxseSBkb24ndCBjbGVhbiB1cCBzdGF0aWMgZGF0YSBvbiBhcHBsaWNhdGlvbiBxdWl0LCBz
byB0aGVyZSB3aWxsIGJlIG1hbnkgc3RyaW5ncyByZW1haW5pbmcgb24gdGhlIG1haW4gdGhyZWFk
LgotCi0gICAgZGVsZXRlIG1fZW1wdHlTdHJpbmc7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vVGhyZWFkR2xvYmFsRGF0YS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vVGhyZWFkR2xvYmFsRGF0YS5oCShyZXZpc2lvbiA1NTY3NikK
KysrIFdlYkNvcmUvcGxhdGZvcm0vVGhyZWFkR2xvYmFsRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBA
IC01MSw3ICs1MSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgflRocmVhZEdsb2Jh
bERhdGEoKTsKIAogICAgICAgICBFdmVudE5hbWVzJiBldmVudE5hbWVzKCkgeyByZXR1cm4gKm1f
ZXZlbnROYW1lczsgfQotICAgICAgICBTdHJpbmdJbXBsKiBlbXB0eVN0cmluZygpIHsgcmV0dXJu
IG1fZW1wdHlTdHJpbmc7IH0KICAgICAgICAgSGFzaFNldDxTdHJpbmdJbXBsKj4mIGF0b21pY1N0
cmluZ1RhYmxlKCkgeyByZXR1cm4gKm1fYXRvbWljU3RyaW5nVGFibGU7IH0KICAgICAgICAgVGhy
ZWFkVGltZXJzJiB0aHJlYWRUaW1lcnMoKSB7IHJldHVybiAqbV90aHJlYWRUaW1lcnM7IH0KIApA
QCAtNjQsNyArNjMsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjZW5kaWYKIAogICAgIHByaXZh
dGU6Ci0gICAgICAgIFN0cmluZ0ltcGwqIG1fZW1wdHlTdHJpbmc7CiAgICAgICAgIEhhc2hTZXQ8
U3RyaW5nSW1wbCo+KiBtX2F0b21pY1N0cmluZ1RhYmxlOwogICAgICAgICBFdmVudE5hbWVzKiBt
X2V2ZW50TmFtZXM7CiAgICAgICAgIFRocmVhZFRpbWVycyogbV90aHJlYWRUaW1lcnM7CkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZ0ltcGwuY3BwCShyZXZpc2lvbiA1NTY3NikKKysrIFdl
YkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcs
NyArNTcsNyBAQCBTdHJpbmdJbXBsOjpTdHJpbmdJbXBsKCkKICAgICA6IG1fZGF0YSgwKQogICAg
ICwgbV9zaGFyZWRCdWZmZXIoMCkKICAgICAsIG1fbGVuZ3RoKDApCi0gICAgLCBtX3JlZkNvdW50
QW5kRmxhZ3Moc19yZWZDb3VudEluY3JlbWVudCB8IEJ1ZmZlckludGVybmFsKQorICAgICwgbV9y
ZWZDb3VudEFuZEZsYWdzKHNfcmVmQ291bnRGbGFnU3RhdGljIHwgQnVmZmVySW50ZXJuYWwpCiAg
ICAgLCBtX2hhc2goMCkKIHsKICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgaGFzaCBpcyBjb21wdXRl
ZCBzbyB0aGF0IEF0b21pY1N0cmluZ0hhc2ggY2FuIGNhbGwgZXhpc3RpbmdIYXNoKCkKQEAgLTEy
MCw3ICsxMjAsOCBAQCBTdHJpbmdJbXBsOjp+U3RyaW5nSW1wbCgpCiAKIFN0cmluZ0ltcGwqIFN0
cmluZ0ltcGw6OmVtcHR5KCkKIHsKLSAgICByZXR1cm4gdGhyZWFkR2xvYmFsRGF0YSgpLmVtcHR5
U3RyaW5nKCk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmdJbXBsLCBlbXB0eVN0cmlu
ZywgKCkpOworICAgIHJldHVybiAmZW1wdHlTdHJpbmc7CiB9CiAKIGJvb2wgU3RyaW5nSW1wbDo6
Y29udGFpbnNPbmx5V2hpdGVzcGFjZSgpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3RleHQvU3Ry
aW5nSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdJbXBs
LmgJKHJldmlzaW9uIDU1Njc2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZ0ltcGwu
aAkod29ya2luZyBjb3B5KQpAQCAtMTE5LDggKzExOSw4IEBAIHB1YmxpYzoKICAgICBpbmxpbmUg
c3RhdGljIHVuc2lnbmVkIGNvbXB1dGVIYXNoKGNvbnN0IGNoYXIqIGRhdGEpIHsgcmV0dXJuIFdU
Rjo6c3RyaW5nSGFzaChkYXRhKTsgfQogCiAgICAgU3RyaW5nSW1wbCogcmVmKCkgeyBtX3JlZkNv
dW50QW5kRmxhZ3MgKz0gc19yZWZDb3VudEluY3JlbWVudDsgcmV0dXJuIHRoaXM7IH0KLSAgICBB
TFdBWVNfSU5MSU5FIHZvaWQgZGVyZWYoKSB7IG1fcmVmQ291bnRBbmRGbGFncyAtPSBzX3JlZkNv
dW50SW5jcmVtZW50OyBpZiAoIShtX3JlZkNvdW50QW5kRmxhZ3MgJiBzX3JlZkNvdW50TWFzaykp
IGRlbGV0ZSB0aGlzOyB9Ci0gICAgQUxXQVlTX0lOTElORSBib29sIGhhc09uZVJlZigpIGNvbnN0
IHsgcmV0dXJuIChtX3JlZkNvdW50QW5kRmxhZ3MgJiBzX3JlZkNvdW50TWFzaykgPT0gc19yZWZD
b3VudEluY3JlbWVudDsgfQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBkZXJlZigpIHsgbV9yZWZD
b3VudEFuZEZsYWdzIC09IHNfcmVmQ291bnRJbmNyZW1lbnQ7IGlmICghKG1fcmVmQ291bnRBbmRG
bGFncyAmIChzX3JlZkNvdW50TWFzayB8IHNfcmVmQ291bnRGbGFnU3RhdGljKSkpIGRlbGV0ZSB0
aGlzOyB9CisgICAgQUxXQVlTX0lOTElORSBib29sIGhhc09uZVJlZigpIGNvbnN0IHsgcmV0dXJu
IChtX3JlZkNvdW50QW5kRmxhZ3MgJiAoc19yZWZDb3VudE1hc2sgfCBzX3JlZkNvdW50RmxhZ1N0
YXRpYykpID09IHNfcmVmQ291bnRJbmNyZW1lbnQ7IH0KIAogICAgIC8vIFJldHVybnMgYSBTdHJp
bmdJbXBsIHN1aXRhYmxlIGZvciB1c2Ugb24gYW5vdGhlciB0aHJlYWQuCiAgICAgUGFzc1JlZlB0
cjxTdHJpbmdJbXBsPiBjcm9zc1RocmVhZFN0cmluZygpOwpAQCAtMjAxLDggKzIwMSw5IEBAIHBy
aXZhdGU6CiAgICAgLy8gSW4gdGhpcyBjYXNlLCB0aGUgbV9kYXRhIHBvaW50ZXIgaXMgYW4gImlu
dGVybmFsIGJ1ZmZlciIsIGFuZCBkb2VzIG5vdCBuZWVkIHRvIGJlIGRlYWxsb2NhdGVkLgogICAg
IEJ1ZmZlck93bmVyc2hpcCBidWZmZXJPd25lcnNoaXAoKSBjb25zdCB7IHJldHVybiBzdGF0aWNf
Y2FzdDxCdWZmZXJPd25lcnNoaXA+KG1fcmVmQ291bnRBbmRGbGFncyAmIHNfcmVmQ291bnRNYXNr
QnVmZmVyT3duZXJzaGlwKTsgfQogCi0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNfcmVmQ291
bnRNYXNrID0gMHhGRkZGRkZGMDsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc19yZWZDb3Vu
dEluY3JlbWVudCA9IDB4MTA7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNfcmVmQ291bnRN
YXNrID0gMHhGRkZGRkZFMDsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc19yZWZDb3VudElu
Y3JlbWVudCA9IDB4MjA7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNfcmVmQ291bnRGbGFn
U3RhdGljID0gMHgxMDsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc19yZWZDb3VudEZsYWdI
YXNUZXJtaW5hdGluZ051bGxDaGFyYWN0ZXIgPSAweDg7CiAgICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIHNfcmVmQ291bnRGbGFnSW5UYWJsZSA9IDB4NDsKICAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgc19yZWZDb3VudE1hc2tCdWZmZXJPd25lcnNoaXAgPSAweDM7Cg==
</data>
<flag name="review"
          id="33608"
          type_id="1"
          status="+"
          setter="mjs"
    />
          </attachment>
      

    </bug>

</bugzilla>