<?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>34964</bug_id>
          
          <creation_ts>2010-02-15 15:54:31 -0800</creation_ts>
          <short_desc>Leaks tool reports false memory leaks due to Rope implementation.</short_desc>
          <delta_ts>2010-02-16 16:02:40 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Gavin Barraclough">barraclough</reporter>
          <assigned_to name="Gavin Barraclough">barraclough</assigned_to>
          <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>190569</commentid>
    <comment_count>0</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-02-15 15:54:31 -0800</bug_when>
    <thetext>A rope is a recursive data structure where each node in the rope holds a set of pointers, each of which may reference either a string (in UStringImpl form) or another rope node.  A low bit in each pointer is used to distinguish between rope &amp; string elements, in a fashion similar to the recently-removed PtrAndFlags class (see https://bugs.webkit.org/show_bug.cgi?id=33731 ).  Again, this causes a problem for Leaks – refactor to remove the magic pointer mangling.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190784</commentid>
    <comment_count>1</comment_count>
      <attachid>48841</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-02-16 15:23:31 -0800</bug_when>
    <thetext>Created attachment 48841
The patch

No performance impact.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190785</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-02-16 15:26:28 -0800</bug_when>
    <thetext>Attachment 48841 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
JavaScriptCore/runtime/UStringImpl.h:187:  More than one command on the same line  [whitespace/newline] [4]
JavaScriptCore/runtime/UStringImpl.h:187:  More than one command on the same line in if  [whitespace/parens] [4]
JavaScriptCore/runtime/UStringImpl.h:328:  More than one command on the same line  [whitespace/newline] [4]
JavaScriptCore/runtime/UStringImpl.h:328:  More than one command on the same line in if  [whitespace/parens] [4]
Total errors found: 4


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190786</commentid>
    <comment_count>3</comment_count>
      <attachid>48841</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-02-16 15:26:46 -0800</bug_when>
    <thetext>Comment on attachment 48841
The patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190804</commentid>
    <comment_count>4</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-02-16 16:02:40 -0800</bug_when>
    <thetext>Fixed in r54843.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48841</attachid>
            <date>2010-02-16 15:23:31 -0800</date>
            <delta_ts>2010-02-16 15:26:46 -0800</delta_ts>
            <desc>The patch</desc>
            <filename>patch.ustringorropeimpl.5.txt</filename>
            <type>text/plain</type>
            <size>37592</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDU0ODM5KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODUgQEAKKzIwMTAtMDItMTYgIEdhdmluIEJh
cnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0zNDk2NAorICAgICAgICBMZWFrcyB0b29sIHJlcG9ydHMgZmFsc2UgbWVtb3J5
IGxlYWtzIGR1ZSB0byBSb3BlIGltcGxlbWVudGF0aW9uLgorCisgICAgICAgIEEgcm9wZSBpcyBh
IHJlY3Vyc2l2ZSBkYXRhIHN0cnVjdHVyZSB3aGVyZSBlYWNoIG5vZGUgaW4gdGhlIHJvcGUgaG9s
ZHMgYSBzZXQgb2YKKyAgICAgICAgcG9pbnRlcnMsIGVhY2ggb2Ygd2hpY2ggbWF5IHJlZmVyZW5j
ZSBlaXRoZXIgYSBzdHJpbmcgKGluIFVTdHJpbmdJbXBsIGZvcm0pIG9yCisgICAgICAgIGFub3Ro
ZXIgcm9wZSBub2RlLiAgQSBsb3cgYml0IGluIGVhY2ggcG9pbnRlciBpcyB1c2VkIHRvIGRpc3Rp
bmd1aXNoIGJldHdlZW4KKyAgICAgICAgcm9wZSAmIHN0cmluZyBlbGVtZW50cywgaW4gYSBmYXNo
aW9uIHNpbWlsYXIgdG8gdGhlIHJlY2VudGx5LXJlbW92ZWQKKyAgICAgICAgUHRyQW5kRmxhZ3Mg
Y2xhc3MgKHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzM3MzEg
KS4gIEFnYWluLAorICAgICAgICB0aGlzIGNhdXNlcyBhIHByb2JsZW0gZm9yIExlYWtzIOKAkyBy
ZWZhY3RvciB0byByZW1vdmUgdGhlIG1hZ2ljIHBvaW50ZXIKKyAgICAgICAgbWFuZ2xpbmcuCisK
KyAgICAgICAgTW92ZSBSb3BlIG91dCBmcm9tIEpTU3RyaW5nLmggYW5kIHJlbmFtZSB0byBVUm9w
ZUltcGwsIHRvIG1hdGNoIFVTdHJpbmdJbXBsLgorICAgICAgICBHaXZlIFVTdHJpbmdJbXBsIGFu
ZCBVUm9wZUltcGwgYSBjb21tb24gcGFyZW50IGNsYXNzLCBVU3RyaW5nT3JSb3BlSW1wbC4KKyAg
ICAgICAgUmVwdXJwb3NlIGFuIG90aGVyd2lzZSBpbnZhbGlkIHBlcm11dGF0aW9uIHRvIGZsYWdz
IChzdGF0aWMgJiBzaG91bGQgcmVwb3J0CisgICAgICAgIG1lbW9yeSBjb3N0KSB0byBpZGVudGlm
eSByb3Blcy4KKworICAgICAgICBUaGlzIGFsbG93cyB1cyB0byBjaGFuZ2UgdGhlIHJvcGUncyBm
aWJlcnMgdG8gaW50ZXJyb2dhdGUgdGhlIG9iamVjdCByYXRoZXIKKyAgICAgICAgdGhhbiBzdG9y
aW5nIGEgYm9vbCB3aXRoaW4gdGhlIGxvdyBiaXRzIG9mIHRoZSBwb2ludGVyIChvciBpbiBzb21l
IGNhc2VzIHRoZQorICAgICAgICB1c2Ugb2YgYSBjb21tb24gcGFyZW50IGNsYXNzIHJlbW92ZXMg
dGhlIG5lZWQgdG8gZGV0ZXJtaW5lIHRoZSB0eXBlIGF0IGFsbCAtCisgICAgICAgIHRoZXJlIGlz
IGEgY29tbW9uIGludGVyZmFjZSB0byByZWYgb3IgZ2V0IHRoZSBsZW5ndGggb2YgZWl0aGVyIHJv
cGVzIG9yIHN0cmluZ3MpLgorCisgICAgICAgICogQVBJL0pTQ2xhc3NSZWYuY3BwOgorICAgICAg
ICAoT3BhcXVlSlNDbGFzczo6T3BhcXVlSlNDbGFzcyk6CisgICAgICAgIChPcGFxdWVKU0NsYXNz
Q29udGV4dERhdGE6Ok9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YSk6CisgICAgICAgICogYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6a2V5Rm9yQ2hhcmFj
dGVyU3dpdGNoKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAg
ICAgIChKU0M6OkludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZSk6CisgICAgICAgICogaml0L0pJ
VFN0dWJzLmNwcDoKKyAgICAgICAgKEpTQzo6REVGSU5FX1NUVUJfRlVOQ1RJT04pOgorICAgICAg
ICAqIHJ1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjphcnJheVByb3Rv
RnVuY1RvU3RyaW5nKToKKyAgICAgICAgKiBydW50aW1lL0lkZW50aWZpZXIuY3BwOgorICAgICAg
ICAoSlNDOjpJZGVudGlmaWVyOjplcXVhbCk6CisgICAgICAgIChKU0M6OklkZW50aWZpZXI6OmFk
ZFNsb3dDYXNlKToKKyAgICAgICAgKiBydW50aW1lL0pTU3RyaW5nLmNwcDoKKyAgICAgICAgKEpT
Qzo6SlNTdHJpbmc6OnJlc29sdmVSb3BlKToKKyAgICAgICAgKiBydW50aW1lL0pTU3RyaW5nLmg6
CisgICAgICAgIChKU0M6Oik6CisgICAgICAgIChKU0M6OlJvcGVCdWlsZGVyOjpKU1N0cmluZyk6
CisgICAgICAgIChKU0M6OlJvcGVCdWlsZGVyOjp+SlNTdHJpbmcpOgorICAgICAgICAoSlNDOjpS
b3BlQnVpbGRlcjo6YXBwZW5kU3RyaW5nSW5Db25zdHJ1Y3QpOgorICAgICAgICAoSlNDOjpSb3Bl
QnVpbGRlcjo6YXBwZW5kVmFsdWVJbkNvbnN0cnVjdEFuZEluY3JlbWVudExlbmd0aCk6CisgICAg
ICAgIChKU0M6OlJvcGVCdWlsZGVyOjpKU1N0cmluZ0ZpbmFsaXplclN0cnVjdDo6SlNTdHJpbmdG
aW5hbGl6ZXJTdHJ1Y3QpOgorICAgICAgICAoSlNDOjpSb3BlQnVpbGRlcjo6SlNTdHJpbmdGaW5h
bGl6ZXJTdHJ1Y3Q6Oik6CisgICAgICAgICogcnVudGltZS9VU3RyaW5nLmNwcDoKKyAgICAgICAg
KEpTQzo6VVN0cmluZzo6dG9TdHJpY3RVSW50MzIpOgorICAgICAgICAoSlNDOjplcXVhbCk6Cisg
ICAgICAgICogcnVudGltZS9VU3RyaW5nLmg6CisgICAgICAgIChKU0M6OlVTdHJpbmc6OmlzRW1w
dHkpOgorICAgICAgICAoSlNDOjpVU3RyaW5nOjpzaXplKToKKyAgICAgICAgKiBydW50aW1lL1VT
dHJpbmdJbXBsLmNwcDoKKyAgICAgICAgKEpTQzo6VVJvcGVJbXBsOjpkZXJlZkZpYmVyc05vblJl
Y3Vyc2l2ZSk6CisgICAgICAgIChKU0M6OlVSb3BlSW1wbDo6ZGVzdHJ1Y3ROb25SZWN1cnNpdmUp
OgorICAgICAgICAqIHJ1bnRpbWUvVVN0cmluZ0ltcGwuaDoKKyAgICAgICAgKEpTQzo6VVN0cmlu
Z09yUm9wZUltcGw6OmlzUm9wZSk6CisgICAgICAgIChKU0M6OlVTdHJpbmdPclJvcGVJbXBsOjps
ZW5ndGgpOgorICAgICAgICAoSlNDOjpVU3RyaW5nT3JSb3BlSW1wbDo6cmVmKToKKyAgICAgICAg
KEpTQzo6VVN0cmluZ09yUm9wZUltcGw6Oik6CisgICAgICAgIChKU0M6OlVTdHJpbmdPclJvcGVJ
bXBsOjpvcGVyYXRvciBuZXcpOgorICAgICAgICAoSlNDOjpVU3RyaW5nT3JSb3BlSW1wbDo6VVN0
cmluZ09yUm9wZUltcGwpOgorICAgICAgICAoSlNDOjpVU3RyaW5nSW1wbDo6YWRvcHQpOgorICAg
ICAgICAoSlNDOjpVU3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFsaXplZCk6CisgICAgICAgIChK
U0M6OlVTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkKToKKyAgICAgICAgKEpTQzo6
VVN0cmluZ0ltcGw6OmRhdGEpOgorICAgICAgICAoSlNDOjpVU3RyaW5nSW1wbDo6Y29zdCk6Cisg
ICAgICAgIChKU0M6OlVTdHJpbmdJbXBsOjpkZXJlZik6CisgICAgICAgIChKU0M6OlVTdHJpbmdJ
bXBsOjpVU3RyaW5nSW1wbCk6CisgICAgICAgIChKU0M6OlVTdHJpbmdJbXBsOjopOgorICAgICAg
ICAoSlNDOjpVUm9wZUltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQpOgorICAgICAgICAoSlND
OjpVUm9wZUltcGw6OmluaXRpYWxpemVGaWJlcik6CisgICAgICAgIChKU0M6OlVSb3BlSW1wbDo6
ZmliZXJDb3VudCk6CisgICAgICAgIChKU0M6OlVSb3BlSW1wbDo6ZmliZXJzKToKKyAgICAgICAg
KEpTQzo6VVJvcGVJbXBsOjpkZXJlZik6CisgICAgICAgIChKU0M6OlVSb3BlSW1wbDo6VVJvcGVJ
bXBsKToKKyAgICAgICAgKEpTQzo6VVJvcGVJbXBsOjpoYXNPbmVSZWYpOgorICAgICAgICAoSlND
OjpVU3RyaW5nT3JSb3BlSW1wbDo6ZGVyZWYpOgorCiAyMDEwLTAyLTE1ICBHYWJvciBMb2tpICA8
bG9raUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEdhdmluIEJhcnJhY2xvdWdo
LgpJbmRleDogSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2xhc3NSZWYuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEphdmFTY3JpcHRDb3JlL0FQSS9KU0NsYXNzUmVmLmNwcAkocmV2aXNpb24gNTQ4MDQpCisrKyBK
YXZhU2NyaXB0Q29yZS9BUEkvSlNDbGFzc1JlZi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgyLDcg
KzgyLDkgQEAgT3BhcXVlSlNDbGFzczo6T3BhcXVlSlNDbGFzcyhjb25zdCBKU0NsYQogICAgICAg
ICAgICAgaWYgKCF2YWx1ZU5hbWUuaXNOdWxsKCkpIHsKICAgICAgICAgICAgICAgICAvLyBVc2Ug
YSBsb2NhbCB2YXJpYWJsZSBoZXJlIHRvIHNpZGVzdGVwIGFuIFJWQ1QgY29tcGlsZXIgYnVnLgog
ICAgICAgICAgICAgICAgIFN0YXRpY1ZhbHVlRW50cnkqIGVudHJ5ID0gbmV3IFN0YXRpY1ZhbHVl
RW50cnkoc3RhdGljVmFsdWUtPmdldFByb3BlcnR5LCBzdGF0aWNWYWx1ZS0+c2V0UHJvcGVydHks
IHN0YXRpY1ZhbHVlLT5hdHRyaWJ1dGVzKTsKLSAgICAgICAgICAgICAgICBtX3N0YXRpY1ZhbHVl
cy0+YWRkKHZhbHVlTmFtZS5yZXAoKS0+cmVmKCksIGVudHJ5KTsKKyAgICAgICAgICAgICAgICBV
U3RyaW5nSW1wbCogaW1wbCA9IHZhbHVlTmFtZS5yZXAoKTsKKyAgICAgICAgICAgICAgICBpbXBs
LT5yZWYoKTsKKyAgICAgICAgICAgICAgICBtX3N0YXRpY1ZhbHVlcy0+YWRkKGltcGwsIGVudHJ5
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICsrc3RhdGljVmFsdWU7CiAgICAgICAgIH0K
QEAgLTk1LDcgKzk3LDkgQEAgT3BhcXVlSlNDbGFzczo6T3BhcXVlSlNDbGFzcyhjb25zdCBKU0Ns
YQogICAgICAgICAgICAgaWYgKCFmdW5jdGlvbk5hbWUuaXNOdWxsKCkpIHsKICAgICAgICAgICAg
ICAgICAvLyBVc2UgYSBsb2NhbCB2YXJpYWJsZSBoZXJlIHRvIHNpZGVzdGVwIGFuIFJWQ1QgY29t
cGlsZXIgYnVnLgogICAgICAgICAgICAgICAgIFN0YXRpY0Z1bmN0aW9uRW50cnkqIGVudHJ5ID0g
bmV3IFN0YXRpY0Z1bmN0aW9uRW50cnkoc3RhdGljRnVuY3Rpb24tPmNhbGxBc0Z1bmN0aW9uLCBz
dGF0aWNGdW5jdGlvbi0+YXR0cmlidXRlcyk7Ci0gICAgICAgICAgICAgICAgbV9zdGF0aWNGdW5j
dGlvbnMtPmFkZChmdW5jdGlvbk5hbWUucmVwKCktPnJlZigpLCBlbnRyeSk7CisgICAgICAgICAg
ICAgICAgVVN0cmluZ0ltcGwqIGltcGwgPSBmdW5jdGlvbk5hbWUucmVwKCk7CisgICAgICAgICAg
ICAgICAgaW1wbC0+cmVmKCk7CisgICAgICAgICAgICAgICAgbV9zdGF0aWNGdW5jdGlvbnMtPmFk
ZChpbXBsLCBlbnRyeSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICArK3N0YXRpY0Z1bmN0
aW9uOwogICAgICAgICB9CkBAIC0xNjcsNyArMTcxLDcgQEAgT3BhcXVlSlNDbGFzc0NvbnRleHRE
YXRhOjpPcGFxdWVKU0NsYXNzQwogICAgICAgICAgICAgQVNTRVJUKCFpdC0+Zmlyc3QtPmlzSWRl
bnRpZmllcigpKTsKICAgICAgICAgICAgIC8vIFVzZSBhIGxvY2FsIHZhcmlhYmxlIGhlcmUgdG8g
c2lkZXN0ZXAgYW4gUlZDVCBjb21waWxlciBidWcuCiAgICAgICAgICAgICBTdGF0aWNWYWx1ZUVu
dHJ5KiBlbnRyeSA9IG5ldyBTdGF0aWNWYWx1ZUVudHJ5KGl0LT5zZWNvbmQtPmdldFByb3BlcnR5
LCBpdC0+c2Vjb25kLT5zZXRQcm9wZXJ0eSwgaXQtPnNlY29uZC0+YXR0cmlidXRlcyk7Ci0gICAg
ICAgICAgICBzdGF0aWNWYWx1ZXMtPmFkZChVU3RyaW5nOjpSZXA6OmNyZWF0ZShpdC0+Zmlyc3Qt
PmRhdGEoKSwgaXQtPmZpcnN0LT5zaXplKCkpLCBlbnRyeSk7CisgICAgICAgICAgICBzdGF0aWNW
YWx1ZXMtPmFkZChVU3RyaW5nOjpSZXA6OmNyZWF0ZShpdC0+Zmlyc3QtPmRhdGEoKSwgaXQtPmZp
cnN0LT5sZW5ndGgoKSksIGVudHJ5KTsKICAgICAgICAgfQogICAgIH0gZWxzZQogICAgICAgICBz
dGF0aWNWYWx1ZXMgPSAwOwpAQCAtMTc5LDcgKzE4Myw3IEBAIE9wYXF1ZUpTQ2xhc3NDb250ZXh0
RGF0YTo6T3BhcXVlSlNDbGFzc0MKICAgICAgICAgICAgIEFTU0VSVCghaXQtPmZpcnN0LT5pc0lk
ZW50aWZpZXIoKSk7CiAgICAgICAgICAgICAvLyBVc2UgYSBsb2NhbCB2YXJpYWJsZSBoZXJlIHRv
IHNpZGVzdGVwIGFuIFJWQ1QgY29tcGlsZXIgYnVnLgogICAgICAgICAgICAgU3RhdGljRnVuY3Rp
b25FbnRyeSogZW50cnkgPSBuZXcgU3RhdGljRnVuY3Rpb25FbnRyeShpdC0+c2Vjb25kLT5jYWxs
QXNGdW5jdGlvbiwgaXQtPnNlY29uZC0+YXR0cmlidXRlcyk7Ci0gICAgICAgICAgICBzdGF0aWNG
dW5jdGlvbnMtPmFkZChVU3RyaW5nOjpSZXA6OmNyZWF0ZShpdC0+Zmlyc3QtPmRhdGEoKSwgaXQt
PmZpcnN0LT5zaXplKCkpLCBlbnRyeSk7CisgICAgICAgICAgICBzdGF0aWNGdW5jdGlvbnMtPmFk
ZChVU3RyaW5nOjpSZXA6OmNyZWF0ZShpdC0+Zmlyc3QtPmRhdGEoKSwgaXQtPmZpcnN0LT5sZW5n
dGgoKSksIGVudHJ5KTsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgfSBlbHNlCkluZGV4
OiBKYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5j
cHAJKHJldmlzaW9uIDU0ODA0KQorKysgSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk0MCw3ICsxOTQwLDcgQEAgc3Rh
dGljIGludDMyX3Qga2V5Rm9yQ2hhcmFjdGVyU3dpdGNoKEV4cAogICAgIFVOVVNFRF9QQVJBTSht
YXgpOwogICAgIEFTU0VSVChub2RlLT5pc1N0cmluZygpKTsKICAgICBVU3RyaW5nOjpSZXAqIGNs
YXVzZSA9IHN0YXRpY19jYXN0PFN0cmluZ05vZGUqPihub2RlKS0+dmFsdWUoKS51c3RyaW5nKCku
cmVwKCk7Ci0gICAgQVNTRVJUKGNsYXVzZS0+c2l6ZSgpID09IDEpOworICAgIEFTU0VSVChjbGF1
c2UtPmxlbmd0aCgpID09IDEpOwogICAgIAogICAgIGludDMyX3Qga2V5ID0gY2xhdXNlLT5kYXRh
KClbMF07CiAgICAgQVNTRVJUKGtleSA+PSBtaW4pOwpJbmRleDogSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL0ludGVycHJldGVyLmNwcAkocmV2aXNpb24gNTQ4MDQpCisrKyBKYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5MjQs
NyArMjkyNCw3IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZWMKICAg
ICAgICAgICAgIHZQQyArPSBkZWZhdWx0T2Zmc2V0OwogICAgICAgICBlbHNlIHsKICAgICAgICAg
ICAgIFVTdHJpbmc6OlJlcCogdmFsdWUgPSBhc1N0cmluZyhzY3J1dGluZWUpLT52YWx1ZShjYWxs
RnJhbWUpLnJlcCgpOwotICAgICAgICAgICAgaWYgKHZhbHVlLT5zaXplKCkgIT0gMSkKKyAgICAg
ICAgICAgIGlmICh2YWx1ZS0+bGVuZ3RoKCkgIT0gMSkKICAgICAgICAgICAgICAgICB2UEMgKz0g
ZGVmYXVsdE9mZnNldDsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICB2UEMgKz0g
Y2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+Y2hhcmFjdGVyU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5k
ZXgpLm9mZnNldEZvclZhbHVlKHZhbHVlLT5kYXRhKClbMF0sIGRlZmF1bHRPZmZzZXQpOwpJbmRl
eDogSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2Ny
aXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCShyZXZpc2lvbiA1NDgwNCkKKysrIEphdmFTY3JpcHRD
b3JlL2ppdC9KSVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwMjMsNyArMzAyMyw3IEBA
IERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQqLCBvcF9zd2l0Y2hfY2gKIAogICAgIGlmIChzY3J1
dGluZWUuaXNTdHJpbmcoKSkgewogICAgICAgICBVU3RyaW5nOjpSZXAqIHZhbHVlID0gYXNTdHJp
bmcoc2NydXRpbmVlKS0+dmFsdWUoY2FsbEZyYW1lKS5yZXAoKTsKLSAgICAgICAgaWYgKHZhbHVl
LT5zaXplKCkgPT0gMSkKKyAgICAgICAgaWYgKHZhbHVlLT5sZW5ndGgoKSA9PSAxKQogICAgICAg
ICAgICAgcmVzdWx0ID0gY29kZUJsb2NrLT5jaGFyYWN0ZXJTd2l0Y2hKdW1wVGFibGUodGFibGVJ
bmRleCkuY3RpRm9yVmFsdWUodmFsdWUtPmRhdGEoKVswXSkuZXhlY3V0YWJsZUFkZHJlc3MoKTsK
ICAgICB9CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3Bw
CShyZXZpc2lvbiA1NDgwNCkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5
cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDEsNyArMjAxLDcgQEAgSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGFycmF5UHJvdG9GdW5jVG9TdAogICAgICAgICBpZiAoaSkKICAgICAgICAgICAgIGJ1
ZmZlci5hcHBlbmQoJywnKTsKICAgICAgICAgaWYgKFJlZlB0cjxVU3RyaW5nOjpSZXA+IHJlcCA9
IHN0ckJ1ZmZlcltpXSkKLSAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQocmVwLT5kYXRhKCksIHJl
cC0+c2l6ZSgpKTsKKyAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQocmVwLT5kYXRhKCksIHJlcC0+
bGVuZ3RoKCkpOwogICAgIH0KICAgICBBU1NFUlQoYnVmZmVyLnNpemUoKSA9PSB0b3RhbFNpemUp
OwogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBVU3RyaW5nOjphZG9wdChidWZmZXIpKTsKSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmNwcAkocmV2aXNpb24gNTQ4MDQpCisr
KyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03OSw3ICs3OSw3IEBAIHZvaWQgZGVsZXRlSWRlbnRpZmllclRhYmxlKElkZW50aWZpZXJUYWIK
IAogYm9vbCBJZGVudGlmaWVyOjplcXVhbChjb25zdCBVU3RyaW5nOjpSZXAqIHIsIGNvbnN0IGNo
YXIqIHMpCiB7Ci0gICAgaW50IGxlbmd0aCA9IHItPnNpemUoKTsKKyAgICBpbnQgbGVuZ3RoID0g
ci0+bGVuZ3RoKCk7CiAgICAgY29uc3QgVUNoYXIqIGQgPSByLT5kYXRhKCk7CiAgICAgZm9yIChp
bnQgaSA9IDA7IGkgIT0gbGVuZ3RoOyArK2kpCiAgICAgICAgIGlmIChkW2ldICE9ICh1bnNpZ25l
ZCBjaGFyKXNbaV0pCkBAIC04OSw3ICs4OSw3IEBAIGJvb2wgSWRlbnRpZmllcjo6ZXF1YWwoY29u
c3QgVVN0cmluZzo6UmUKIAogYm9vbCBJZGVudGlmaWVyOjplcXVhbChjb25zdCBVU3RyaW5nOjpS
ZXAqIHIsIGNvbnN0IFVDaGFyKiBzLCB1bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAgaWYgKHItPnNp
emUoKSAhPSBsZW5ndGgpCisgICAgaWYgKHItPmxlbmd0aCgpICE9IGxlbmd0aCkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIGNvbnN0IFVDaGFyKiBkID0gci0+ZGF0YSgpOwogICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgIT0gbGVuZ3RoOyArK2kpCkBAIC0yMDksNyArMjA5LDcgQEAgUGFz
c1JlZlB0cjxVU3RyaW5nOjpSZXA+IElkZW50aWZpZXI6OmFkZAogUGFzc1JlZlB0cjxVU3RyaW5n
OjpSZXA+IElkZW50aWZpZXI6OmFkZFNsb3dDYXNlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwg
VVN0cmluZzo6UmVwKiByKQogewogICAgIEFTU0VSVCghci0+aXNJZGVudGlmaWVyKCkpOwotICAg
IGlmIChyLT5zaXplKCkgPT0gMSkgeworICAgIGlmIChyLT5sZW5ndGgoKSA9PSAxKSB7CiAgICAg
ICAgIFVDaGFyIGMgPSByLT5kYXRhKClbMF07CiAgICAgICAgIGlmIChjIDw9IDB4RkYpCiAgICAg
ICAgICAgICByID0gZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmlu
Z1JlcChjKTsKQEAgLTIyMCw3ICsyMjAsNyBAQCBQYXNzUmVmUHRyPFVTdHJpbmc6OlJlcD4gSWRl
bnRpZmllcjo6YWRkCiAgICAgICAgICAgICAgICAgcmV0dXJuIHI7CiAgICAgICAgICAgICB9CiAg
ICAgfQotICAgIGlmICghci0+c2l6ZSgpKSB7CisgICAgaWYgKCFyLT5sZW5ndGgoKSkgewogICAg
ICAgICBVU3RyaW5nOjpSZXA6OmVtcHR5KCkuaGFzaCgpOwogICAgICAgICByZXR1cm4gJlVTdHJp
bmc6OlJlcDo6ZW1wdHkoKTsKICAgICB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5n
LmNwcAkocmV2aXNpb24gNTQ4MDQpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5n
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNDggKzMxLDEzIEBACiAKIG5hbWVzcGFjZSBKU0Mg
ewogCi12b2lkIFJvcGU6OmRlc3RydWN0Tm9uUmVjdXJzaXZlKCkKLXsKLSAgICBWZWN0b3I8Um9w
ZSosIDMyPiB3b3JrUXVldWU7Ci0gICAgUm9wZSogcm9wZSA9IHRoaXM7Ci0KLSAgICB3aGlsZSAo
dHJ1ZSkgewotICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSByb3BlLT5maWJlckNvdW50KCk7Ci0g
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICAg
ICAgRmliZXImIGZpYmVyID0gcm9wZS0+ZmliZXJzKGkpOwotICAgICAgICAgICAgaWYgKGZpYmVy
LmlzU3RyaW5nKCkpCi0gICAgICAgICAgICAgICAgZmliZXIuc3RyaW5nKCktPmRlcmVmKCk7Ci0g
ICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBSb3BlKiBuZXh0Um9wZSA9IGZpYmVy
LnJvcGUoKTsKLSAgICAgICAgICAgICAgICBpZiAobmV4dFJvcGUtPmhhc09uZVJlZigpKQotICAg
ICAgICAgICAgICAgICAgICB3b3JrUXVldWUuYXBwZW5kKG5leHRSb3BlKTsKLSAgICAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG5leHRSb3BlLT5kZXJlZigpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChyb3BlICE9IHRoaXMpCi0gICAgICAgICAg
ICBmYXN0RnJlZShyb3BlKTsKLQotICAgICAgICBpZiAod29ya1F1ZXVlLmlzRW1wdHkoKSkKLSAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICByb3BlID0gd29ya1F1ZXVlLmxhc3QoKTsKLSAg
ICAgICAgd29ya1F1ZXVlLnJlbW92ZUxhc3QoKTsKLSAgICB9Ci19Ci0KLVJvcGU6On5Sb3BlKCkK
LXsKLSAgICBkZXN0cnVjdE5vblJlY3Vyc2l2ZSgpOwotfQotCiAvLyBPdmVydmlldzogdGhpcyBt
ZXRob2RzIGNvbnZlcnRzIGEgSlNTdHJpbmcgZnJvbSBob2xkaW5nIGEgc3RyaW5nIGluIHJvcGUg
Zm9ybQogLy8gZG93biB0byBhIHNpbXBsZSBVU3RyaW5nIHJlcHJlc2VudGF0aW9uLiAgSXQgZG9l
cyBzbyBieSBidWlsZGluZyB1cCB0aGUgc3RyaW5nCiAvLyBiYWNrd2FyZHMsIHNpbmNlIHdlIHdh
bnQgdG8gYXZvaWQgcmVjdXJzaW9uLCB3ZSBleHBlY3QgdGhhdCB0aGUgdHJlZSBzdHJ1Y3R1cmUK
IC8vIHJlcHJlc2VudGluZyB0aGUgcm9wZSBpcyBsaWtlbHkgaW1iYWxhbmNlZCB3aXRoIG1vcmUg
bm9kZXMgZG93biB0aGUgbGVmdCBzaWRlCiAvLyAoc2luY2UgYXBwZW5kaW5nIHRvIHRoZSBzdHJp
bmcgaXMgbGlrZWx5IG1vcmUgY29tbW9uKSAtIGFuZCBhcyBzdWNoIHJlc29sdmluZwogLy8gaW4g
dGhpcyBmYXNoaW9uIHNob3VsZCBtaW5pbWl6ZSB3b3JrIHF1ZXVlIHNpemUuICAoSWYgd2UgYnVp
bHQgdGhlIHF1ZXVlIGZvcndhcmRzCi0vLyB3ZSB3b3VsZCBsaWtlbHkgaGF2ZSB0byBwbGFjZSBh
bGwgb2YgdGhlIGNvbnN0aXR1ZW50IFVTdHJpbmc6OlJlcHMgaW50byB0aGUKKy8vIHdlIHdvdWxk
IGxpa2VseSBoYXZlIHRvIHBsYWNlIGFsbCBvZiB0aGUgY29uc3RpdHVlbnQgVVN0cmluZ0ltcGxz
IGludG8gdGhlCiAvLyBWZWN0b3IgYmVmb3JlIHBlcmZvcm1pbmcgYW55IGNvbmNhdGVuYXRpb24s
IGJ1dCBieSB3b3JraW5nIGJhY2t3YXJkcyB3ZSBsaWtlbHkKIC8vIG9ubHkgZmlsbCB0aGUgcXVl
dWUgd2l0aCB0aGUgbnVtYmVyIG9mIHN1YnN0cmluZ3MgYXQgYW55IGdpdmVuIGxldmVsIGluIGEK
IC8vIHJvcGUtb2Ytcm9wZXMuKQpAQCAtODYsOCArNTEsOCBAQCB2b2lkIEpTU3RyaW5nOjpyZXNv
bHZlUm9wZShFeGVjU3RhdGUqIGV4CiAgICAgICAgIG1fdmFsdWUgPSBuZXdJbXBsOwogICAgIGVs
c2UgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9maWJlckNvdW50OyArK2kp
IHsKLSAgICAgICAgICAgIG1fZmliZXJzW2ldLmRlcmVmKCk7Ci0gICAgICAgICAgICBtX2ZpYmVy
c1tpXSA9IHN0YXRpY19jYXN0PHZvaWQqPigwKTsKKyAgICAgICAgICAgIG1fb3RoZXIubV9maWJl
cnNbaV0tPmRlcmVmKCk7CisgICAgICAgICAgICBtX290aGVyLm1fZmliZXJzW2ldID0gMDsKICAg
ICAgICAgfQogICAgICAgICBtX2ZpYmVyQ291bnQgPSAwOwogICAgICAgICBBU1NFUlQoIWlzUm9w
ZSgpKTsKQEAgLTEwMSwxMSArNjYsMTEgQEAgdm9pZCBKU1N0cmluZzo6cmVzb2x2ZVJvcGUoRXhl
Y1N0YXRlKiBleAogICAgIFZlY3RvcjxSb3BlOjpGaWJlciwgMzI+IHdvcmtRdWV1ZTsKICAgICBS
b3BlOjpGaWJlciBjdXJyZW50RmliZXI7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8ICht
X2ZpYmVyQ291bnQgLSAxKTsgKytpKQotICAgICAgICB3b3JrUXVldWUuYXBwZW5kKG1fZmliZXJz
W2ldKTsKLSAgICBjdXJyZW50RmliZXIgPSBtX2ZpYmVyc1ttX2ZpYmVyQ291bnQgLSAxXTsKKyAg
ICAgICAgd29ya1F1ZXVlLmFwcGVuZChtX290aGVyLm1fZmliZXJzW2ldKTsKKyAgICBjdXJyZW50
RmliZXIgPSBtX290aGVyLm1fZmliZXJzW21fZmliZXJDb3VudCAtIDFdOwogICAgIHdoaWxlICh0
cnVlKSB7Ci0gICAgICAgIGlmIChjdXJyZW50RmliZXIuaXNSb3BlKCkpIHsKLSAgICAgICAgICAg
IFJvcGUqIHJvcGUgPSBjdXJyZW50RmliZXIucm9wZSgpOworICAgICAgICBpZiAoY3VycmVudEZp
YmVyLT5pc1JvcGUoKSkgeworICAgICAgICAgICAgUm9wZSogcm9wZSA9IHN0YXRpY19jYXN0PFVS
b3BlSW1wbCo+KGN1cnJlbnRGaWJlcik7CiAgICAgICAgICAgICAvLyBDb3B5IHRoZSBjb250ZW50
cyBvZiB0aGUgY3VycmVudCByb3BlIGludG8gdGhlIHdvcmtRdWV1ZSwgd2l0aCB0aGUgbGFzdCBp
dGVtIGluICdjdXJyZW50RmliZXInCiAgICAgICAgICAgICAvLyAod2Ugd2lsbCBiZSB3b3JraW5n
IGJhY2t3YXJkcyBvdmVyIHRoZSByb3BlKS4KICAgICAgICAgICAgIHVuc2lnbmVkIGZpYmVyQ291
bnRNaW51c09uZSA9IHJvcGUtPmZpYmVyQ291bnQoKSAtIDE7CkBAIC0xMTMsOCArNzgsOCBAQCB2
b2lkIEpTU3RyaW5nOjpyZXNvbHZlUm9wZShFeGVjU3RhdGUqIGV4CiAgICAgICAgICAgICAgICAg
d29ya1F1ZXVlLmFwcGVuZChyb3BlLT5maWJlcnMoaSkpOwogICAgICAgICAgICAgY3VycmVudEZp
YmVyID0gcm9wZS0+ZmliZXJzKGZpYmVyQ291bnRNaW51c09uZSk7CiAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBVU3RyaW5nOjpSZXAqIHN0cmluZyA9IGN1cnJlbnRGaWJlci5zdHJpbmco
KTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmluZy0+c2l6ZSgpOworICAgICAg
ICAgICAgVVN0cmluZ0ltcGwqIHN0cmluZyA9IHN0YXRpY19jYXN0PFVTdHJpbmdJbXBsKj4oY3Vy
cmVudEZpYmVyKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmluZy0+bGVuZ3Ro
KCk7CiAgICAgICAgICAgICBwb3NpdGlvbiAtPSBsZW5ndGg7CiAgICAgICAgICAgICBVU3RyaW5n
SW1wbDo6Y29weUNoYXJzKHBvc2l0aW9uLCBzdHJpbmctPmRhdGEoKSwgbGVuZ3RoKTsKIApAQCAt
MTIzLDggKzg4LDggQEAgdm9pZCBKU1N0cmluZzo6cmVzb2x2ZVJvcGUoRXhlY1N0YXRlKiBleAog
ICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBhIHN0cmluZyBmcm9tIHRoZSBVQ2hhciBidWZmZXIs
IGNsZWFyIHRoZSByb3BlIFJlZlB0ci4KICAgICAgICAgICAgICAgICBBU1NFUlQoYnVmZmVyID09
IHBvc2l0aW9uKTsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9m
aWJlckNvdW50OyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9maWJlcnNbaV0uZGVyZWYo
KTsKLSAgICAgICAgICAgICAgICAgICAgbV9maWJlcnNbaV0gPSBzdGF0aWNfY2FzdDx2b2lkKj4o
MCk7CisgICAgICAgICAgICAgICAgICAgIG1fb3RoZXIubV9maWJlcnNbaV0tPmRlcmVmKCk7Cisg
ICAgICAgICAgICAgICAgICAgIG1fb3RoZXIubV9maWJlcnNbaV0gPSAwOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICBtX2ZpYmVyQ291bnQgPSAwOwogCkluZGV4OiBKYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1N0cmluZy5oCShyZXZpc2lvbiA1NDgwNCkKKysrIEphdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTdHJpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsOTUgKzMyLDYgQEAKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKLSAgICAvLyBGSVhNRTogdGhpcyBjbGFzcyBpcyBvbiBpdHMgd2F5IG91
dCBpbnRvIGEgZGlmZmVyZW50IGhlYWRlci4KLSAgICBjbGFzcyBSb3BlIDogcHVibGljIFJlZkNv
dW50ZWQ8Um9wZT4gewotICAgIHB1YmxpYzoKLSAgICAgICAgLy8gQSBSb3BlIGlzIGNvbXBvc2Vk
IGZyb20gYSBzZXQgb2Ygc21hbGxlciBzdHJpbmdzIGNhbGxlZCBGaWJlcnMuCi0gICAgICAgIC8v
IEVhY2ggRmliZXIgaW4gYSByb3BlIGlzIGVpdGhlciBVU3RyaW5nOjpSZXAgb3IgYW5vdGhlciBS
b3BlLgotICAgICAgICBjbGFzcyBGaWJlciB7Ci0gICAgICAgIHB1YmxpYzoKLSAgICAgICAgICAg
IEZpYmVyKCkgOiBtX3ZhbHVlKDApIHt9Ci0gICAgICAgICAgICBGaWJlcihVU3RyaW5nOjpSZXAq
IHN0cmluZykgOiBtX3ZhbHVlKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHN0cmluZykpIHt9
Ci0gICAgICAgICAgICBGaWJlcihSb3BlKiByb3BlKSA6IG1fdmFsdWUocmVpbnRlcnByZXRfY2Fz
dDxpbnRwdHJfdD4ocm9wZSkgfCAxKSB7fQotCi0gICAgICAgICAgICBGaWJlcih2b2lkKiBub25G
aWJlcikgOiBtX3ZhbHVlKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KG5vbkZpYmVyKSkge30K
LQotICAgICAgICAgICAgdm9pZCBkZXJlZigpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgaWYgKGlzUm9wZSgpKQotICAgICAgICAgICAgICAgICAgICByb3BlKCktPmRlcmVmKCk7Ci0g
ICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBzdHJpbmcoKS0+ZGVyZWYo
KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgRmliZXImIHJlZigpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgaWYgKGlzU3RyaW5nKCkpCi0gICAgICAgICAgICAgICAgICAg
IHN0cmluZygpLT5yZWYoKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgIHJvcGUoKS0+cmVmKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICB1bnNpZ25lZCByZWZBbmRHZXRMZW5ndGgoKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGlmIChpc1N0cmluZygpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIFVTdHJpbmc6OlJlcCogcmVwID0gc3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiByZXAtPnJlZigpLT5zaXplKCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgUm9wZSogciA9IHJvcGUoKTsKLSAgICAgICAgICAgICAgICAgICAg
ci0+cmVmKCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiByLT5sZW5ndGgoKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGJvb2wgaXNSb3BlKCkg
eyByZXR1cm4gbV92YWx1ZSAmIDE7IH0KLSAgICAgICAgICAgIFJvcGUqIHJvcGUoKSB7IHJldHVy
biByZWludGVycHJldF9jYXN0PFJvcGUqPihtX3ZhbHVlICYgfjEpOyB9Ci0gICAgICAgICAgICBi
b29sIGlzU3RyaW5nKCkgeyByZXR1cm4gIWlzUm9wZSgpOyB9Ci0gICAgICAgICAgICBVU3RyaW5n
OjpSZXAqIHN0cmluZygpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VVN0cmluZzo6UmVwKj4o
bV92YWx1ZSk7IH0KLQotICAgICAgICAgICAgdm9pZCogbm9uRmliZXIoKSB7IHJldHVybiByZWlu
dGVycHJldF9jYXN0PHZvaWQqPihtX3ZhbHVlKTsgfQotICAgICAgICBwcml2YXRlOgotICAgICAg
ICAgICAgaW50cHRyX3QgbV92YWx1ZTsKLSAgICAgICAgfTsKLQotICAgICAgICAvLyBDcmVhdGVz
IGEgUm9wZSBjb21wcmlzaW5nIG9mICdmaWJlckNvdW50JyBGaWJlcnMuCi0gICAgICAgIC8vIFRo
ZSBSb3BlIGlzIGNvbnN0cnVjdGVkIGluIGFuIHVuaW5pdGlhbGl6ZWQgc3RhdGUgLSBpbml0aWFs
aXplIG11c3QgYmUgY2FsbGVkIGZvciBlYWNoIEZpYmVyIGluIHRoZSBSb3BlLgotICAgICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxSb3BlPiB0cnlDcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGZp
YmVyQ291bnQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZvaWQqIGFsbG9jYXRpb247Ci0gICAg
ICAgICAgICBpZiAodHJ5RmFzdE1hbGxvYyhzaXplb2YoUm9wZSkgKyAoZmliZXJDb3VudCAtIDEp
ICogc2l6ZW9mKEZpYmVyKSkuZ2V0VmFsdWUoYWxsb2NhdGlvbikpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyAoYWxsb2NhdGlvbikgUm9wZShmaWJlckNvdW50KSk7Ci0gICAg
ICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotCi0gICAgICAgIH5Sb3BlKCk7Ci0gICAgICAg
IHZvaWQgZGVzdHJ1Y3ROb25SZWN1cnNpdmUoKTsKLQotICAgICAgICB2b2lkIGluaXRpYWxpemVG
aWJlcih1bnNpZ25lZCAmaW5kZXgsIEZpYmVyJiBmaWJlcikKLSAgICAgICAgewotICAgICAgICAg
ICAgbV9maWJlcnNbaW5kZXgrK10gPSBmaWJlcjsKLSAgICAgICAgICAgIG1fbGVuZ3RoICs9IGZp
YmVyLnJlZkFuZEdldExlbmd0aCgpOwotICAgICAgICB9Ci0gICAgICAgIHZvaWQgaW5pdGlhbGl6
ZUZpYmVyKHVuc2lnbmVkICZpbmRleCwgVVN0cmluZ0ltcGwqIGltcGwpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIG1fZmliZXJzW2luZGV4KytdID0gRmliZXIoaW1wbCk7Ci0gICAgICAgICAgICBt
X2xlbmd0aCArPSBpbXBsLT5yZWYoKS0+c2l6ZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgdW5z
aWduZWQgZmliZXJDb3VudCgpIHsgcmV0dXJuIG1fZmliZXJDb3VudDsgfQotICAgICAgICB1bnNp
Z25lZCBsZW5ndGgoKSB7IHJldHVybiBtX2xlbmd0aDsgfQotICAgICAgICBGaWJlciYgZmliZXJz
KHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBtX2ZpYmVyc1tpbmRleF07IH0KLQotICAgIHByaXZh
dGU6Ci0gICAgICAgIFJvcGUodW5zaWduZWQgZmliZXJDb3VudCkgOiBtX2ZpYmVyQ291bnQoZmli
ZXJDb3VudCksIG1fbGVuZ3RoKDApIHt9Ci0gICAgICAgIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXpl
X3QsIHZvaWQqIGluUGxhY2UpIHsgcmV0dXJuIGluUGxhY2U7IH0KLSAgICAgICAgCi0gICAgICAg
IHVuc2lnbmVkIG1fZmliZXJDb3VudDsKLSAgICAgICAgdW5zaWduZWQgbV9sZW5ndGg7Ci0gICAg
ICAgIEZpYmVyIG1fZmliZXJzWzFdOwotICAgIH07Ci0KICAgICBjbGFzcyBKU1N0cmluZzsKIAog
ICAgIEpTU3RyaW5nKiBqc0VtcHR5U3RyaW5nKEpTR2xvYmFsRGF0YSopOwpAQCAtMTU2LDYgKzY3
LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVQ7CiAgICAgICAg
IGZyaWVuZCBjbGFzcyBKU0dsb2JhbERhdGE7CiAKKyAgICAgICAgdHlwZWRlZiBVUm9wZUltcGwg
Um9wZTsKKwogICAgICAgICBjbGFzcyBSb3BlQnVpbGRlciB7CiAgICAgICAgIHB1YmxpYzoKICAg
ICAgICAgICAgIFJvcGVCdWlsZGVyKHVuc2lnbmVkIGZpYmVyQ291bnQpCkBAIC0xODAsNyArOTMs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBpZiAo
anNTdHJpbmctPmlzUm9wZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBqc1N0cmluZy0+bV9maWJlckNvdW50OyArK2kpCi0gICAgICAgICAgICAgICAg
ICAgICAgICBhcHBlbmQoanNTdHJpbmctPm1fZmliZXJzW2ldKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGFwcGVuZChqc1N0cmluZy0+bV9vdGhlci5tX2ZpYmVyc1tpXSk7CiAgICAgICAgICAg
ICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGFwcGVuZChqc1N0cmluZy0+c3RyaW5n
KCkpOwogICAgICAgICAgICAgfQpAQCAtMjE1LDcgKzEyOCw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB9CiAgICAgICAgIEpTU3RyaW5nKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgUGFz
c1JlZlB0cjxVU3RyaW5nOjpSZXA+IHZhbHVlLCBIYXNPdGhlck93bmVyVHlwZSkKICAgICAgICAg
ICAgIDogSlNDZWxsKGdsb2JhbERhdGEtPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkKLSAgICAgICAg
ICAgICwgbV9sZW5ndGgodmFsdWUtPnNpemUoKSkKKyAgICAgICAgICAgICwgbV9sZW5ndGgodmFs
dWUtPmxlbmd0aCgpKQogICAgICAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQogICAgICAgICAgICAg
LCBtX2ZpYmVyQ291bnQoMCkKICAgICAgICAgewpAQCAtMjI1LDcgKzEzOCw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICAgICAgLCBtX2xlbmd0aChyb3BlLT5sZW5ndGgoKSkKICAgICAgICAg
ICAgICwgbV9maWJlckNvdW50KDEpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1fZmliZXJzWzBd
ID0gcm9wZS5yZWxlYXNlUmVmKCk7CisgICAgICAgICAgICBtX290aGVyLm1fZmliZXJzWzBdID0g
cm9wZS5yZWxlYXNlUmVmKCk7CiAgICAgICAgIH0KICAgICAgICAgLy8gVGhpcyBjb25zdHJ1Y3Rv
ciBjb25zdHJ1Y3RzIGEgbmV3IHN0cmluZyBieSBjb25jYXRlbmF0aW5nIHMxICYgczIuCiAgICAg
ICAgIC8vIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdpdGggZmliZXJDb3VudCA8PSAzLgpA
QCAtMjg5LDggKzIwMiw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgLCBtX2ZpYmVy
Q291bnQoMCkKICAgICAgICAgewogICAgICAgICAgICAgLy8gbmFzdHkgaGFjayBiZWNhdXNlIHdl
IGNhbid0IHVuaW9uIG5vbi1QT0QgdHlwZXMKLSAgICAgICAgICAgIG1fZmliZXJzWzBdID0gcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDxwdHJkaWZmX3Q+KGZpbmFsaXpl
cikpOwotICAgICAgICAgICAgbV9maWJlcnNbMV0gPSBjb250ZXh0OworICAgICAgICAgICAgbV9v
dGhlci5tX2ZpbmFsaXplckNhbGxiYWNrID0gZmluYWxpemVyOworICAgICAgICAgICAgbV9vdGhl
ci5tX2ZpbmFsaXplckNvbnRleHQgPSBjb250ZXh0OwogICAgICAgICAgICAgSGVhcDo6aGVhcCh0
aGlzKS0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0KHZhbHVlLmNvc3QoKSk7CiAgICAgICAgIH0KIApA
QCAtMjk4LDEyICsyMTEsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAg
ICAgIEFTU0VSVCh2cHRyKCkgPT0gSlNHbG9iYWxEYXRhOjpqc1N0cmluZ1ZQdHIpOwogICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZmliZXJDb3VudDsgKytpKQotICAgICAg
ICAgICAgICAgIG1fZmliZXJzW2ldLmRlcmVmKCk7CisgICAgICAgICAgICAgICAgbV9vdGhlci5t
X2ZpYmVyc1tpXS0+ZGVyZWYoKTsKIAotICAgICAgICAgICAgaWYgKCFtX2ZpYmVyQ291bnQgJiYg
bV9maWJlcnNbMF0ubm9uRmliZXIoKSkgewotICAgICAgICAgICAgICAgIEpTU3RyaW5nRmluYWxp
emVyQ2FsbGJhY2sgZmluYWxpemVyID0gcmVpbnRlcnByZXRfY2FzdDxKU1N0cmluZ0ZpbmFsaXpl
ckNhbGxiYWNrPihtX2ZpYmVyc1swXS5ub25GaWJlcigpKTsKLSAgICAgICAgICAgICAgICBmaW5h
bGl6ZXIodGhpcywgbV9maWJlcnNbMV0ubm9uRmliZXIoKSk7Ci0gICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAoIW1fZmliZXJDb3VudCAmJiBtX290aGVyLm1fZmluYWxpemVyQ2FsbGJhY2sp
CisgICAgICAgICAgICAgICAgbV9vdGhlci5tX2ZpbmFsaXplckNhbGxiYWNrKHRoaXMsIG1fb3Ro
ZXIubV9maW5hbGl6ZXJDb250ZXh0KTsKICAgICAgICAgfQogCiAgICAgICAgIGNvbnN0IFVTdHJp
bmcmIHZhbHVlKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKQEAgLTM0MiwxNCArMjUzLDE5IEBAIG5h
bWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgYXBwZW5kU3RyaW5nSW5Db25zdHJ1Y3QodW5z
aWduZWQmIGluZGV4LCBjb25zdCBVU3RyaW5nJiBzdHJpbmcpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIG1fZmliZXJzW2luZGV4KytdID0gUm9wZTo6RmliZXIoc3RyaW5nLnJlcCgpLT5yZWYoKSk7
CisgICAgICAgICAgICBVU3RyaW5nSW1wbCogaW1wbCA9IHN0cmluZy5yZXAoKTsKKyAgICAgICAg
ICAgIGltcGwtPnJlZigpOworICAgICAgICAgICAgbV9vdGhlci5tX2ZpYmVyc1tpbmRleCsrXSA9
IGltcGw7CiAgICAgICAgIH0KIAogICAgICAgICB2b2lkIGFwcGVuZFN0cmluZ0luQ29uc3RydWN0
KHVuc2lnbmVkJiBpbmRleCwgSlNTdHJpbmcqIGpzU3RyaW5nKQogICAgICAgICB7CiAgICAgICAg
ICAgICBpZiAoanNTdHJpbmctPmlzUm9wZSgpKSB7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGpzU3RyaW5nLT5tX2ZpYmVyQ291bnQ7ICsraSkKLSAgICAgICAgICAg
ICAgICAgICAgbV9maWJlcnNbaW5kZXgrK10gPSBqc1N0cmluZy0+bV9maWJlcnNbaV0ucmVmKCk7
CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGpzU3RyaW5nLT5tX2Zp
YmVyQ291bnQ7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBSb3BlOjpGaWJlciBmaWJlciA9
IGpzU3RyaW5nLT5tX290aGVyLm1fZmliZXJzW2ldOworICAgICAgICAgICAgICAgICAgICBmaWJl
ci0+cmVmKCk7CisgICAgICAgICAgICAgICAgICAgIG1fb3RoZXIubV9maWJlcnNbaW5kZXgrK10g
PSBmaWJlcjsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAg
ICAgICAgICBhcHBlbmRTdHJpbmdJbkNvbnN0cnVjdChpbmRleCwganNTdHJpbmctPnN0cmluZygp
KTsKICAgICAgICAgfQpAQCAtMzY0LDcgKzI4MCw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICAgICAgICAgIG1fbGVuZ3RoICs9IHMtPmxlbmd0aCgpOwogICAgICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgICAgICBVU3RyaW5nIHUodi50b1N0cmluZyhleGVjKSk7Ci0gICAgICAgICAg
ICAgICAgbV9maWJlcnNbaW5kZXgrK10gPSBSb3BlOjpGaWJlcih1LnJlcCgpLT5yZWYoKSk7Cisg
ICAgICAgICAgICAgICAgVVN0cmluZ0ltcGwqIGltcGwgPSB1LnJlcCgpOworICAgICAgICAgICAg
ICAgIGltcGwtPnJlZigpOworICAgICAgICAgICAgICAgIG1fb3RoZXIubV9maWJlcnNbaW5kZXgr
K10gPSBpbXBsOwogICAgICAgICAgICAgICAgIG1fbGVuZ3RoICs9IHUuc2l6ZSgpOwogICAgICAg
ICAgICAgfQogICAgICAgICB9CkBAIC0zOTEsNyArMzA5LDE3IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB1bnNpZ25lZCBtX2xlbmd0aDsKICAgICAgICAgbXV0YWJsZSBVU3RyaW5nIG1fdmFs
dWU7CiAgICAgICAgIG11dGFibGUgdW5zaWduZWQgbV9maWJlckNvdW50OwotICAgICAgICBtdXRh
YmxlIFJvcGU6OkZpYmVyIG1fZmliZXJzW3NfbWF4SW50ZXJuYWxSb3BlTGVuZ3RoXTsKKyAgICAg
ICAgLy8gVGhpcyBzdHJ1Y3R1cmUgZXhpc3RzIHRvIHN1cHBvcnQgYSB0ZW1wb3Jhcnkgd29ya2Fy
b3VuZCBmb3IgYSBHQyBpc3N1ZS4KKyAgICAgICAgc3RydWN0IEpTU3RyaW5nRmluYWxpemVyU3Ry
dWN0IHsKKyAgICAgICAgICAgIEpTU3RyaW5nRmluYWxpemVyU3RydWN0KCkgOiBtX2ZpbmFsaXpl
ckNhbGxiYWNrKDApIHt9CisgICAgICAgICAgICB1bmlvbiB7CisgICAgICAgICAgICAgICAgbXV0
YWJsZSBSb3BlOjpGaWJlciBtX2ZpYmVyc1tzX21heEludGVybmFsUm9wZUxlbmd0aF07CisgICAg
ICAgICAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgICAgICAgICAgSlNTdHJpbmdGaW5hbGl6
ZXJDYWxsYmFjayBtX2ZpbmFsaXplckNhbGxiYWNrOworICAgICAgICAgICAgICAgICAgICB2b2lk
KiBtX2ZpbmFsaXplckNvbnRleHQ7CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH07
CisgICAgICAgIH0gbV9vdGhlcjsKIAogICAgICAgICBib29sIGlzUm9wZSgpIGNvbnN0IHsgcmV0
dXJuIG1fZmliZXJDb3VudDsgfQogICAgICAgICBVU3RyaW5nJiBzdHJpbmcoKSB7IEFTU0VSVCgh
aXNSb3BlKCkpOyByZXR1cm4gbV92YWx1ZTsgfQpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9VU3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VTdHJp
bmcuY3BwCShyZXZpc2lvbiA1NDgwNCkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0cmlu
Zy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5NSw3ICs0OTUsNyBAQCB1aW50MzJfdCBVU3RyaW5n
Ojp0b1N0cmljdFVJbnQzMihib29sKiBvCiAgICAgICAgICpvayA9IGZhbHNlOwogCiAgICAgLy8g
RW1wdHkgc3RyaW5nIGlzIG5vdCBPSy4KLSAgICB1bnNpZ25lZCBsZW4gPSBtX3JlcC0+c2l6ZSgp
OworICAgIHVuc2lnbmVkIGxlbiA9IG1fcmVwLT5sZW5ndGgoKTsKICAgICBpZiAobGVuID09IDAp
CiAgICAgICAgIHJldHVybiAwOwogICAgIGNvbnN0IFVDaGFyKiBwID0gbV9yZXAtPmRhdGEoKTsK
QEAgLTcxMiw4ICs3MTIsOCBAQCBpbnQgY29tcGFyZShjb25zdCBVU3RyaW5nJiBzMSwgY29uc3Qg
VVN0CiAKIGJvb2wgZXF1YWwoY29uc3QgVVN0cmluZzo6UmVwKiByLCBjb25zdCBVU3RyaW5nOjpS
ZXAqIGIpCiB7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gci0+c2l6ZSgpOwotICAgIGlmIChsZW5n
dGggIT0gYi0+c2l6ZSgpKQorICAgIHVuc2lnbmVkIGxlbmd0aCA9IHItPmxlbmd0aCgpOworICAg
IGlmIChsZW5ndGggIT0gYi0+bGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBj
b25zdCBVQ2hhciogZCA9IHItPmRhdGEoKTsKICAgICBjb25zdCBVQ2hhciogcyA9IGItPmRhdGEo
KTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0cmluZy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0cmluZy5oCShyZXZpc2lvbiA1NDgwNCkKKysrIEph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0cmluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzIsMTEg
KzEzMiwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgY29uc3QgVUNoYXIqIGRhdGEoKSBj
b25zdCB7IHJldHVybiBtX3JlcC0+ZGF0YSgpOyB9CiAKICAgICAgICAgYm9vbCBpc051bGwoKSBj
b25zdCB7IHJldHVybiBtX3JlcCA9PSBzX251bGxSZXA7IH0KLSAgICAgICAgYm9vbCBpc0VtcHR5
KCkgY29uc3QgeyByZXR1cm4gIW1fcmVwLT5zaXplKCk7IH0KKyAgICAgICAgYm9vbCBpc0VtcHR5
KCkgY29uc3QgeyByZXR1cm4gIW1fcmVwLT5sZW5ndGgoKTsgfQogCiAgICAgICAgIGJvb2wgaXM4
Qml0KCkgY29uc3Q7CiAKLSAgICAgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
cmVwLT5zaXplKCk7IH0KKyAgICAgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
cmVwLT5sZW5ndGgoKTsgfQogCiAgICAgICAgIFVDaGFyIG9wZXJhdG9yW10odW5zaWduZWQgcG9z
KSBjb25zdDsKIApJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9VU3RyaW5nSW1wbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9VU3RyaW5nSW1wbC5jcHAJKHJl
dmlzaW9uIDU0ODA0KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9VU3RyaW5nSW1wbC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTExOCw0ICsxMTgsMzUgQEAgVVN0cmluZ0ltcGw6On5VU3RyaW5n
SW1wbCgpCiAgICAgfQogfQogCit2b2lkIFVSb3BlSW1wbDo6ZGVyZWZGaWJlcnNOb25SZWN1cnNp
dmUoVmVjdG9yPFVSb3BlSW1wbCosIDMyPiYgd29ya1F1ZXVlKQoreworICAgIHVuc2lnbmVkIGxl
bmd0aCA9IGZpYmVyQ291bnQoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3Ro
OyArK2kpIHsKKyAgICAgICAgRmliZXImIGZpYmVyID0gZmliZXJzKGkpOworICAgICAgICBpZiAo
ZmliZXItPmlzUm9wZSgpKSB7CisgICAgICAgICAgICBVUm9wZUltcGwqIG5leHRSb3BlID0gc3Rh
dGljX2Nhc3Q8VVJvcGVJbXBsKj4oZmliZXIpOworICAgICAgICAgICAgaWYgKG5leHRSb3BlLT5o
YXNPbmVSZWYoKSkKKyAgICAgICAgICAgICAgICB3b3JrUXVldWUuYXBwZW5kKG5leHRSb3BlKTsK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBuZXh0Um9wZS0+ZGVyZWYoKTsKKyAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxVU3RyaW5nSW1wbCo+KGZpYmVy
KS0+ZGVyZWYoKTsKKyAgICB9CiB9CisKK3ZvaWQgVVJvcGVJbXBsOjpkZXN0cnVjdE5vblJlY3Vy
c2l2ZSgpCit7CisgICAgVmVjdG9yPFVSb3BlSW1wbCosIDMyPiB3b3JrUXVldWU7CisKKyAgICBk
ZXJlZkZpYmVyc05vblJlY3Vyc2l2ZSh3b3JrUXVldWUpOworICAgIGRlbGV0ZSB0aGlzOworCisg
ICAgd2hpbGUgKCF3b3JrUXVldWUuaXNFbXB0eSgpKSB7CisgICAgICAgIFVSb3BlSW1wbCogcm9w
ZSA9IHdvcmtRdWV1ZS5sYXN0KCk7CisgICAgICAgIHdvcmtRdWV1ZS5yZW1vdmVMYXN0KCk7Cisg
ICAgICAgIHJvcGUtPmRlcmVmRmliZXJzTm9uUmVjdXJzaXZlKHdvcmtRdWV1ZSk7CisgICAgICAg
IGRlbGV0ZSByb3BlOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1VTdHJpbmdJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlw
dENvcmUvcnVudGltZS9VU3RyaW5nSW1wbC5oCShyZXZpc2lvbiA1NDgwNCkKKysrIEphdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVVN0cmluZ0ltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTQgKzQw
LDc0IEBAIGNsYXNzIElkZW50aWZpZXJUYWJsZTsKICAgCiB0eXBlZGVmIENyb3NzVGhyZWFkUmVm
Q291bnRlZDxPd25GYXN0TWFsbG9jUHRyPFVDaGFyPiA+IFNoYXJlZFVDaGFyOwogCi1jbGFzcyBV
U3RyaW5nSW1wbCA6IE5vbmNvcHlhYmxlIHsKK2NsYXNzIFVTdHJpbmdPclJvcGVJbXBsIDogcHVi
bGljIE5vbmNvcHlhYmxlIHsKK3B1YmxpYzoKKyAgICBib29sIGlzUm9wZSgpIHsgcmV0dXJuICht
X3JlZkNvdW50QW5kRmxhZ3MgJiBzX3JlZkNvdW50SXNSb3BlKSA9PSBzX3JlZkNvdW50SXNSb3Bl
OyB9CisgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KKwor
ICAgIHZvaWQgcmVmKCkgeyBtX3JlZkNvdW50QW5kRmxhZ3MgKz0gc19yZWZDb3VudEluY3JlbWVu
dDsgfQorICAgIGlubGluZSB2b2lkIGRlcmVmKCk7CisKK3Byb3RlY3RlZDoKKyAgICBlbnVtIEJ1
ZmZlck93bmVyc2hpcCB7CisgICAgICAgIEJ1ZmZlckludGVybmFsLAorICAgICAgICBCdWZmZXJP
d25lZCwKKyAgICAgICAgQnVmZmVyU3Vic3RyaW5nLAorICAgICAgICBCdWZmZXJTaGFyZWQsCisg
ICAgfTsKKworICAgIHVzaW5nIE5vbmNvcHlhYmxlOjpvcGVyYXRvciBuZXc7CisgICAgdm9pZCog
b3BlcmF0b3IgbmV3KHNpemVfdCwgdm9pZCogaW5QbGFjZSkgeyByZXR1cm4gaW5QbGFjZTsgfQor
CisgICAgLy8gRm9yIFNtYWxsU3RyaW5nU3RvcmFnZSwgd2hpY2ggYWxsb2NhdGVzIGFuIGFycmF5
IGFuZCB1c2VzIGFuIGluLXBsYWNlIG5ldy4KKyAgICBVU3RyaW5nT3JSb3BlSW1wbCgpIHsgfQor
CisgICAgVVN0cmluZ09yUm9wZUltcGwodW5zaWduZWQgbGVuZ3RoLCBCdWZmZXJPd25lcnNoaXAg
b3duZXJzaGlwKQorICAgICAgICA6IG1fcmVmQ291bnRBbmRGbGFncyhzX3JlZkNvdW50SW5jcmVt
ZW50IHwgc19yZWZDb3VudEZsYWdTaG91bGRSZXBvcnRlZENvc3QgfCBvd25lcnNoaXApCisgICAg
ICAgICwgbV9sZW5ndGgobGVuZ3RoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFpc1JvcGUoKSk7
CisgICAgfQorCisgICAgZW51bSBTdGF0aWNTdHJpbmdDb25zdHJ1Y3RUeXBlIHsgQ29uc3RydWN0
U3RhdGljU3RyaW5nIH07CisgICAgVVN0cmluZ09yUm9wZUltcGwodW5zaWduZWQgbGVuZ3RoLCBT
dGF0aWNTdHJpbmdDb25zdHJ1Y3RUeXBlKQorICAgICAgICA6IG1fcmVmQ291bnRBbmRGbGFncyhz
X3JlZkNvdW50RmxhZ1N0YXRpYyB8IEJ1ZmZlck93bmVkKQorICAgICAgICAsIG1fbGVuZ3RoKGxl
bmd0aCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghaXNSb3BlKCkpOworICAgIH0KKworICAgIGVu
dW0gUm9wZUNvbnN0cnVjdFR5cGUgeyBDb25zdHJ1Y3RSb3BlIH07CisgICAgVVN0cmluZ09yUm9w
ZUltcGwoUm9wZUNvbnN0cnVjdFR5cGUpCisgICAgICAgIDogbV9yZWZDb3VudEFuZEZsYWdzKHNf
cmVmQ291bnRJbmNyZW1lbnQgfCBzX3JlZkNvdW50SXNSb3BlKQorICAgICAgICAsIG1fbGVuZ3Ro
KDApCisgICAgeworICAgICAgICBBU1NFUlQoaXNSb3BlKCkpOworICAgIH0KKworICAgIC8vIFdl
IGluaXRpYWxpemUgYW5kIGluY3JlbWVudC9kZWNyZW1lbnQgdGhlIHJlZkNvdW50IGZvciBhbGwg
bm9ybWFsIChub24tc3RhdGljKSBzdHJpbmdzIGJ5IHRoZSB2YWx1ZSAyLgorICAgIC8vIFdlIGlu
aXRpYWxpemUgc3RhdGljIHN0cmluZ3Mgd2l0aCBhbiBvZGQgbnVtYmVyIChzcGVjaWZpY2FsbHks
IDEpLCBzdWNoIHRoYXQgdGhlIHJlZkNvdW50IGNhbm5vdCByZWFjaCB6ZXJvLgorICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBzX3JlZkNvdW50TWFzayA9IDB4RkZGRkZGRTA7CisgICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIHNfcmVmQ291bnRJbmNyZW1lbnQgPSAweDIwOworICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBzX3JlZkNvdW50RmxhZ1N0YXRpYyA9IDB4MTA7CisgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIHNfcmVmQ291bnRGbGFnU2hvdWxkUmVwb3J0ZWRDb3N0ID0gMHg4OworICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzX3JlZkNvdW50RmxhZ0lzSWRlbnRpZmllciA9IDB4NDsK
KyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc19yZWZDb3VudE1hc2tCdWZmZXJPd25lcnNoaXAg
PSAweDM7CisgICAgLy8KKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc19yZWZDb3VudElzUm9w
ZSA9IHNfcmVmQ291bnRGbGFnU3RhdGljIHwgc19yZWZDb3VudEZsYWdTaG91bGRSZXBvcnRlZENv
c3Q7CisKKyAgICB1bnNpZ25lZCBtX3JlZkNvdW50QW5kRmxhZ3M7CisgICAgdW5zaWduZWQgbV9s
ZW5ndGg7Cit9OworCitjbGFzcyBVU3RyaW5nSW1wbCA6IHB1YmxpYyBVU3RyaW5nT3JSb3BlSW1w
bCB7CiBwdWJsaWM6CiAgICAgdGVtcGxhdGU8c2l6ZV90IGlubGluZUNhcGFjaXR5PgogICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFVTdHJpbmdJbXBsPiBhZG9wdChWZWN0b3I8VUNoYXIsIGlubGluZUNh
cGFjaXR5PiYgdmVjdG9yKQogICAgIHsKICAgICAgICAgaWYgKHVuc2lnbmVkIGxlbmd0aCA9IHZl
Y3Rvci5zaXplKCkpIHsKICAgICAgICAgICAgIEFTU0VSVCh2ZWN0b3IuZGF0YSgpKTsKLSAgICAg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVVN0cmluZ0ltcGwodmVjdG9yLnJlbGVhc2VCdWZm
ZXIoKSwgbGVuZ3RoLCBCdWZmZXJPd25lZCkpOworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBVU3RyaW5nSW1wbCh2ZWN0b3IucmVsZWFzZUJ1ZmZlcigpLCBsZW5ndGgpKTsKICAgICAg
ICAgfQogICAgICAgICByZXR1cm4gJmVtcHR5KCk7CiAgICAgfQpAQCAtNzksNyArMTM5LDcgQEAg
cHVibGljOgogICAgICAgICAgICAgQ1JBU0goKTsKICAgICAgICAgVVN0cmluZ0ltcGwqIHJlc3Vs
dEltcGwgPSBzdGF0aWNfY2FzdDxVU3RyaW5nSW1wbCo+KGZhc3RNYWxsb2Moc2l6ZW9mKFVDaGFy
KSAqIGxlbmd0aCArIHNpemVvZihVU3RyaW5nSW1wbCkpKTsKICAgICAgICAgb3V0cHV0ID0gcmVp
bnRlcnByZXRfY2FzdDxVQ2hhcio+KHJlc3VsdEltcGwgKyAxKTsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyhyZXN1bHRJbXBsKSBVU3RyaW5nSW1wbChvdXRwdXQsIGxlbmd0aCwgQnVmZmVy
SW50ZXJuYWwpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyhyZXN1bHRJbXBsKSBVU3Ry
aW5nSW1wbChsZW5ndGgpKTsKICAgICB9CiAKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxVU3RyaW5n
SW1wbD4gdHJ5Q3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiYgb3V0
cHV0KQpAQCAtOTUsMjIgKzE1NSwyMiBAQCBwdWJsaWM6CiAgICAgICAgIGlmICghdHJ5RmFzdE1h
bGxvYyhzaXplb2YoVUNoYXIpICogbGVuZ3RoICsgc2l6ZW9mKFVTdHJpbmdJbXBsKSkuZ2V0VmFs
dWUocmVzdWx0SW1wbCkpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgb3V0cHV0ID0g
cmVpbnRlcnByZXRfY2FzdDxVQ2hhcio+KHJlc3VsdEltcGwgKyAxKTsKLSAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyhyZXN1bHRJbXBsKSBVU3RyaW5nSW1wbChvdXRwdXQsIGxlbmd0aCwgQnVm
ZmVySW50ZXJuYWwpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyhyZXN1bHRJbXBsKSBV
U3RyaW5nSW1wbChsZW5ndGgpKTsKICAgICB9CiAKICAgICBTaGFyZWRVQ2hhciogc2hhcmVkQnVm
ZmVyKCk7CiAgICAgVUNoYXIqIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0KLSAgICB1
bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KICAgICBzaXplX3QgY29z
dCgpCiAgICAgewogICAgICAgICAvLyBGb3Igc3Vic3RyaW5ncywgcmV0dXJuIHRoZSBjb3N0IG9m
IHRoZSBiYXNlIHN0cmluZy4KICAgICAgICAgaWYgKGJ1ZmZlck93bmVyc2hpcCgpID09IEJ1ZmZl
clN1YnN0cmluZykKICAgICAgICAgICAgIHJldHVybiBtX2J1ZmZlclN1YnN0cmluZy0+Y29zdCgp
OwogCi0gICAgICAgIGlmIChtX3JlZkNvdW50QW5kRmxhZ3MgJiBzX3JlZkNvdW50RmxhZ0hhc1Jl
cG9ydGVkQ29zdCkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBtX3JlZkNvdW50QW5k
RmxhZ3MgfD0gc19yZWZDb3VudEZsYWdIYXNSZXBvcnRlZENvc3Q7Ci0gICAgICAgIHJldHVybiBt
X2xlbmd0aDsKKyAgICAgICAgaWYgKG1fcmVmQ291bnRBbmRGbGFncyAmIHNfcmVmQ291bnRGbGFn
U2hvdWxkUmVwb3J0ZWRDb3N0KSB7CisgICAgICAgICAgICBtX3JlZkNvdW50QW5kRmxhZ3MgJj0g
fnNfcmVmQ291bnRGbGFnU2hvdWxkUmVwb3J0ZWRDb3N0OworICAgICAgICAgICAgcmV0dXJuIG1f
bGVuZ3RoOworICAgICAgICB9CisgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICB1bnNpZ25l
ZCBoYXNoKCkgY29uc3QgeyBpZiAoIW1faGFzaCkgbV9oYXNoID0gY29tcHV0ZUhhc2goZGF0YSgp
LCBtX2xlbmd0aCk7IHJldHVybiBtX2hhc2g7IH0KICAgICB1bnNpZ25lZCBleGlzdGluZ0hhc2go
KSBjb25zdCB7IEFTU0VSVChtX2hhc2gpOyByZXR1cm4gbV9oYXNoOyB9IC8vIGZhc3QgcGF0aCBm
b3IgSWRlbnRpZmllcnMKQEAgLTEyNCw4ICsxODQsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBt
X3JlZkNvdW50QW5kRmxhZ3MgJj0gfnNfcmVmQ291bnRGbGFnSXNJZGVudGlmaWVyOwogICAgIH0K
IAotICAgIFVTdHJpbmdJbXBsKiByZWYoKSB7IG1fcmVmQ291bnRBbmRGbGFncyArPSBzX3JlZkNv
dW50SW5jcmVtZW50OyByZXR1cm4gdGhpczsgfQotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBkZXJl
ZigpIHsgbV9yZWZDb3VudEFuZEZsYWdzIC09IHNfcmVmQ291bnRJbmNyZW1lbnQ7IGlmICghKG1f
cmVmQ291bnRBbmRGbGFncyAmIHNfcmVmQ291bnRNYXNrKSkgZGVsZXRlIHRoaXM7IH0KKyAgICBB
TFdBWVNfSU5MSU5FIHZvaWQgZGVyZWYoKSB7IG1fcmVmQ291bnRBbmRGbGFncyAtPSBzX3JlZkNv
dW50SW5jcmVtZW50OyBpZiAoIShtX3JlZkNvdW50QW5kRmxhZ3MgJiAoc19yZWZDb3VudE1hc2sg
fCBzX3JlZkNvdW50RmxhZ1N0YXRpYykpKSBkZWxldGUgdGhpczsgfQogCiAgICAgc3RhdGljIHZv
aWQgY29weUNoYXJzKFVDaGFyKiBkZXN0aW5hdGlvbiwgY29uc3QgVUNoYXIqIHNvdXJjZSwgdW5z
aWduZWQgbnVtQ2hhcmFjdGVycykKICAgICB7CkBAIC0xNTEsMzcgKzIxMCwzNiBAQCBwdWJsaWM6
CiAgICAgfQogCiBwcml2YXRlOgotICAgIGVudW0gQnVmZmVyT3duZXJzaGlwIHsKLSAgICAgICAg
QnVmZmVySW50ZXJuYWwsCi0gICAgICAgIEJ1ZmZlck93bmVkLAotICAgICAgICBCdWZmZXJTdWJz
dHJpbmcsCi0gICAgICAgIEJ1ZmZlclNoYXJlZCwKLSAgICB9OwotCiAgICAgLy8gRm9yIFNtYWxs
U3RyaW5nU3RvcmFnZSwgd2hpY2ggYWxsb2NhdGVzIGFuIGFycmF5IGFuZCB1c2VzIGFuIGluLXBs
YWNlIG5ldy4KICAgICBVU3RyaW5nSW1wbCgpIHsgfQogCi0gICAgLy8gVXNlZCB0byBjb25zdHJ1
Y3Qgbm9ybWFsIHN0cmluZ3Mgd2l0aCBhbiBpbnRlcm5hbCBvciBleHRlcm5hbCBidWZmZXIuCi0g
ICAgVVN0cmluZ0ltcGwoVUNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCwgQnVmZmVyT3duZXJz
aGlwIG93bmVyc2hpcCkKLSAgICAgICAgOiBtX2RhdGEoZGF0YSkKKyAgICAvLyBVc2VkIHRvIGNv
bnN0cnVjdCBub3JtYWwgc3RyaW5ncyB3aXRoIGFuIGludGVybmFsIGJ1ZmZlci4KKyAgICBVU3Ry
aW5nSW1wbCh1bnNpZ25lZCBsZW5ndGgpCisgICAgICAgIDogVVN0cmluZ09yUm9wZUltcGwobGVu
Z3RoLCBCdWZmZXJJbnRlcm5hbCkKKyAgICAgICAgLCBtX2RhdGEocmVpbnRlcnByZXRfY2FzdDxV
Q2hhcio+KHRoaXMgKyAxKSkKKyAgICAgICAgLCBtX2J1ZmZlcigwKQorICAgICAgICAsIG1faGFz
aCgwKQorICAgIHsKKyAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOworICAgIH0KKworICAgIC8v
IFVzZWQgdG8gY29uc3RydWN0IG5vcm1hbCBzdHJpbmdzIHdpdGggYW4gZXh0ZXJuYWwgYnVmZmVy
LgorICAgIFVTdHJpbmdJbXBsKFVDaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpCisgICAgICAg
IDogVVN0cmluZ09yUm9wZUltcGwobGVuZ3RoLCBCdWZmZXJPd25lZCkKKyAgICAgICAgLCBtX2Rh
dGEoZGF0YSkKICAgICAgICAgLCBtX2J1ZmZlcigwKQotICAgICAgICAsIG1fbGVuZ3RoKGxlbmd0
aCkKLSAgICAgICAgLCBtX3JlZkNvdW50QW5kRmxhZ3Moc19yZWZDb3VudEluY3JlbWVudCB8IG93
bmVyc2hpcCkKICAgICAgICAgLCBtX2hhc2goMCkKICAgICB7Ci0gICAgICAgIEFTU0VSVCgob3du
ZXJzaGlwID09IEJ1ZmZlckludGVybmFsKSB8fCAob3duZXJzaGlwID09IEJ1ZmZlck93bmVkKSk7
CiAgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKICAgICB9CiAKICAgICAvLyBVc2VkIHRvIGNv
bnN0cnVjdCBzdGF0aWMgc3RyaW5ncywgd2hpY2ggaGF2ZSBhbiBzcGVjaWFsIHJlZkNvdW50IHRo
YXQgY2FuIG5ldmVyIGhpdCB6ZXJvLgogICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGUgc3RhdGlj
IHN0cmluZyB3aWxsIG5ldmVyIGJlIGRlc3Ryb3llZCwgd2hpY2ggaXMgaW1wb3J0YW50IGJlY2F1
c2UKICAgICAvLyBzdGF0aWMgc3RyaW5ncyB3aWxsIGJlIHNoYXJlZCBhY3Jvc3MgdGhyZWFkcyAm
IHJlZi1jb3VudGVkIGluIGEgbm9uLXRocmVhZHNhZmUgbWFubmVyLgotICAgIGVudW0gU3RhdGlj
U3RyaW5nQ29uc3RydWN0VHlwZSB7IENvbnN0cnVjdFN0YXRpY1N0cmluZyB9OwogICAgIFVTdHJp
bmdJbXBsKFVDaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgsIFN0YXRpY1N0cmluZ0NvbnN0cnVj
dFR5cGUpCi0gICAgICAgIDogbV9kYXRhKGRhdGEpCisgICAgICAgIDogVVN0cmluZ09yUm9wZUlt
cGwobGVuZ3RoLCBDb25zdHJ1Y3RTdGF0aWNTdHJpbmcpCisgICAgICAgICwgbV9kYXRhKGRhdGEp
CiAgICAgICAgICwgbV9idWZmZXIoMCkKLSAgICAgICAgLCBtX2xlbmd0aChsZW5ndGgpCi0gICAg
ICAgICwgbV9yZWZDb3VudEFuZEZsYWdzKHNfcmVmQ291bnRGbGFnU3RhdGljIHwgQnVmZmVyT3du
ZWQpCiAgICAgICAgICwgbV9oYXNoKDApCiAgICAgewogICAgICAgICBjaGVja0NvbnNpc3RlbmN5
KCk7CkBAIC0xODksNDcgKzI0NywzNCBAQCBwcml2YXRlOgogCiAgICAgLy8gVXNlZCB0byBjcmVh
dGUgbmV3IHN0cmluZ3MgdGhhdCBhcmUgYSBzdWJzdHJpbmcgb2YgYW4gZXhpc3Rpbmcgc3RyaW5n
LgogICAgIFVTdHJpbmdJbXBsKFVDaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgsIFBhc3NSZWZQ
dHI8VVN0cmluZ0ltcGw+IGJhc2UpCi0gICAgICAgIDogbV9kYXRhKGRhdGEpCisgICAgICAgIDog
VVN0cmluZ09yUm9wZUltcGwobGVuZ3RoLCBCdWZmZXJTdWJzdHJpbmcpCisgICAgICAgICwgbV9k
YXRhKGRhdGEpCiAgICAgICAgICwgbV9idWZmZXJTdWJzdHJpbmcoYmFzZS5yZWxlYXNlUmVmKCkp
Ci0gICAgICAgICwgbV9sZW5ndGgobGVuZ3RoKQotICAgICAgICAsIG1fcmVmQ291bnRBbmRGbGFn
cyhzX3JlZkNvdW50SW5jcmVtZW50IHwgQnVmZmVyU3Vic3RyaW5nKQogICAgICAgICAsIG1faGFz
aCgwKQogICAgIHsKICAgICAgICAgLy8gRG8gdXNlIHN0YXRpYyBzdHJpbmdzIGFzIGEgYmFzZSBm
b3Igc3Vic3RyaW5nczsgVW50eXBlZFB0ckFuZEJpdGZpZWxkIGFzc3VtZXMKICAgICAgICAgLy8g
dGhhdCBhbGwgcG9pbnRlcnMgd2lsbCBiZSBhdCBsZWFzdCA4LWJ5dGUgYWxpZ25lZCwgd2UgY2Fu
bm90IGd1YXJhbnRlZSB0aGF0IG9mCiAgICAgICAgIC8vIFVTdHJpbmdJbXBscyB0aGF0IGFyZSBu
b3QgaGVhcCBhbGxvY2F0ZWQuCi0gICAgICAgIEFTU0VSVChtX2J1ZmZlclN1YnN0cmluZy0+c2l6
ZSgpKTsKKyAgICAgICAgQVNTRVJUKG1fYnVmZmVyU3Vic3RyaW5nLT5sZW5ndGgoKSk7CiAgICAg
ICAgIEFTU0VSVCghbV9idWZmZXJTdWJzdHJpbmctPmlzU3RhdGljKCkpOwogICAgICAgICBjaGVj
a0NvbnNpc3RlbmN5KCk7CiAgICAgfQogCiAgICAgLy8gVXNlZCB0byBjb25zdHJ1Y3QgbmV3IHN0
cmluZ3Mgc2hhcmluZyBhbiBleGlzdGluZyBzaGFyZWQgYnVmZmVyLgogICAgIFVTdHJpbmdJbXBs
KFVDaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgsIFBhc3NSZWZQdHI8U2hhcmVkVUNoYXI+IHNo
YXJlZEJ1ZmZlcikKLSAgICAgICAgOiBtX2RhdGEoZGF0YSkKKyAgICAgICAgOiBVU3RyaW5nT3JS
b3BlSW1wbChsZW5ndGgsIEJ1ZmZlclNoYXJlZCkKKyAgICAgICAgLCBtX2RhdGEoZGF0YSkKICAg
ICAgICAgLCBtX2J1ZmZlclNoYXJlZChzaGFyZWRCdWZmZXIucmVsZWFzZVJlZigpKQotICAgICAg
ICAsIG1fbGVuZ3RoKGxlbmd0aCkKLSAgICAgICAgLCBtX3JlZkNvdW50QW5kRmxhZ3Moc19yZWZD
b3VudEluY3JlbWVudCB8IEJ1ZmZlclNoYXJlZCkKICAgICAgICAgLCBtX2hhc2goMCkKICAgICB7
CiAgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKICAgICB9CiAKLSAgICB1c2luZyBOb25jb3B5
YWJsZTo6b3BlcmF0b3IgbmV3OwotICAgIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3QsIHZvaWQq
IGluUGxhY2UpIHsgcmV0dXJuIGluUGxhY2U7IH0KLQogICAgIH5VU3RyaW5nSW1wbCgpOwogCiAg
ICAgLy8gVGhpcyBudW1iZXIgbXVzdCBiZSBhdCBsZWFzdCAyIHRvIGF2b2lkIHNoYXJpbmcgZW1w
dHksIG51bGwgYXMgd2VsbCBhcyAxIGNoYXJhY3RlciBzdHJpbmdzIGZyb20gU21hbGxTdHJpbmdz
LgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzX21pbkxlbmd0aFRvU2hhcmUgPSAxMDsKICAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc19jb3B5Q2hhcnNJbmxpbmVDdXRPZmYgPSAyMDsKLSAg
ICAvLyBXZSBpbml0aWFsaXplIGFuZCBpbmNyZW1lbnQvZGVjcmVtZW50IHRoZSByZWZDb3VudCBm
b3IgYWxsIG5vcm1hbCAobm9uLXN0YXRpYykgc3RyaW5ncyBieSB0aGUgdmFsdWUgMi4KLSAgICAv
LyBXZSBpbml0aWFsaXplIHN0YXRpYyBzdHJpbmdzIHdpdGggYW4gb2RkIG51bWJlciAoc3BlY2lm
aWNhbGx5LCAxKSwgc3VjaCB0aGF0IHRoZSByZWZDb3VudCBjYW5ub3QgcmVhY2ggemVyby4KLSAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc19yZWZDb3VudE1hc2sgPSAweEZGRkZGRkYwOwotICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzX3JlZkNvdW50SW5jcmVtZW50ID0gMHgyMDsKLSAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgc19yZWZDb3VudEZsYWdTdGF0aWMgPSAweDEwOwotICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBzX3JlZkNvdW50RmxhZ0hhc1JlcG9ydGVkQ29zdCA9IDB4ODsK
LSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc19yZWZDb3VudEZsYWdJc0lkZW50aWZpZXIgPSAw
eDQ7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNfcmVmQ291bnRNYXNrQnVmZmVyT3duZXJz
aGlwID0gMHgzOwogCiAgICAgVVN0cmluZ0ltcGwqIGJ1ZmZlck93bmVyU3RyaW5nKCkgeyByZXR1
cm4gKGJ1ZmZlck93bmVyc2hpcCgpID09IEJ1ZmZlclN1YnN0cmluZykgPyBtX2J1ZmZlclN1YnN0
cmluZyA6ICB0aGlzOyB9CiAgICAgY29uc3QgVVN0cmluZ0ltcGwqIGJ1ZmZlck93bmVyU3RyaW5n
KCkgY29uc3QgeyByZXR1cm4gKGJ1ZmZlck93bmVyc2hpcCgpID09IEJ1ZmZlclN1YnN0cmluZykg
PyBtX2J1ZmZlclN1YnN0cmluZyA6ICB0aGlzOyB9CkBAIC0yNDQsMTcgKzI4OSw2NyBAQCBwcml2
YXRlOgogICAgICAgICBVU3RyaW5nSW1wbCogbV9idWZmZXJTdWJzdHJpbmc7CiAgICAgICAgIFNo
YXJlZFVDaGFyKiBtX2J1ZmZlclNoYXJlZDsKICAgICB9OwotICAgIHVuc2lnbmVkIG1fbGVuZ3Ro
OwotICAgIHVuc2lnbmVkIG1fcmVmQ291bnRBbmRGbGFnczsKICAgICBtdXRhYmxlIHVuc2lnbmVk
IG1faGFzaDsKIAogICAgIEpTX0VYUE9SVERBVEEgc3RhdGljIFVTdHJpbmdJbXBsKiBzX2VtcHR5
OwogCiAgICAgZnJpZW5kIGNsYXNzIEpJVDsKICAgICBmcmllbmQgY2xhc3MgU21hbGxTdHJpbmdz
U3RvcmFnZTsKKyAgICBmcmllbmQgY2xhc3MgVVN0cmluZ09yUm9wZUltcGw7CiAgICAgZnJpZW5k
IHZvaWQgaW5pdGlhbGl6ZVVTdHJpbmcoKTsKIH07CiAKK2NsYXNzIFVSb3BlSW1wbCA6IHB1Ymxp
YyBVU3RyaW5nT3JSb3BlSW1wbCB7CitwdWJsaWM6CisgICAgLy8gQSBVUm9wZUltcGwgaXMgY29t
cG9zZWQgZnJvbSBhIHNldCBvZiBzbWFsbGVyIHN0cmluZ3MgY2FsbGVkIEZpYmVycy4KKyAgICAv
LyBFYWNoIEZpYmVyIGluIGEgcm9wZSBpcyBlaXRoZXIgVVN0cmluZ0ltcGwgb3IgYW5vdGhlciBV
Um9wZUltcGwuCisgICAgdHlwZWRlZiBVU3RyaW5nT3JSb3BlSW1wbCogRmliZXI7CisKKyAgICAv
LyBDcmVhdGVzIGEgVVJvcGVJbXBsIGNvbXByaXNpbmcgb2YgJ2ZpYmVyQ291bnQnIEZpYmVycy4K
KyAgICAvLyBUaGUgVVJvcGVJbXBsIGlzIGNvbnN0cnVjdGVkIGluIGFuIHVuaW5pdGlhbGl6ZWQg
c3RhdGUgLSBpbml0aWFsaXplIG11c3QgYmUgY2FsbGVkIGZvciBlYWNoIEZpYmVyIGluIHRoZSBV
Um9wZUltcGwuCisgICAgc3RhdGljIFBhc3NSZWZQdHI8VVJvcGVJbXBsPiB0cnlDcmVhdGVVbmlu
aXRpYWxpemVkKHVuc2lnbmVkIGZpYmVyQ291bnQpCisgICAgeworICAgICAgICB2b2lkKiBhbGxv
Y2F0aW9uOworICAgICAgICBpZiAodHJ5RmFzdE1hbGxvYyhzaXplb2YoVVJvcGVJbXBsKSArIChm
aWJlckNvdW50IC0gMSkgKiBzaXplb2YoRmliZXIpKS5nZXRWYWx1ZShhbGxvY2F0aW9uKSkKKyAg
ICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgKGFsbG9jYXRpb24pIFVSb3BlSW1wbChmaWJl
ckNvdW50KSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHZvaWQgaW5pdGlhbGl6
ZUZpYmVyKHVuc2lnbmVkICZpbmRleCwgRmliZXIgZmliZXIpCisgICAgeworICAgICAgICBtX2Zp
YmVyc1tpbmRleCsrXSA9IGZpYmVyOworICAgICAgICBmaWJlci0+cmVmKCk7CisgICAgICAgIG1f
bGVuZ3RoICs9IGZpYmVyLT5sZW5ndGgoKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBmaWJlckNv
dW50KCkgeyByZXR1cm4gbV9maWJlckNvdW50OyB9CisgICAgRmliZXImIGZpYmVycyh1bnNpZ25l
ZCBpbmRleCkgeyByZXR1cm4gbV9maWJlcnNbaW5kZXhdOyB9CisKKyAgICBBTFdBWVNfSU5MSU5F
IHZvaWQgZGVyZWYoKSB7IG1fcmVmQ291bnRBbmRGbGFncyAtPSBzX3JlZkNvdW50SW5jcmVtZW50
OyBpZiAoIShtX3JlZkNvdW50QW5kRmxhZ3MgJiBzX3JlZkNvdW50TWFzaykpIGRlc3RydWN0Tm9u
UmVjdXJzaXZlKCk7IH0KKworcHJpdmF0ZToKKyAgICBVUm9wZUltcGwodW5zaWduZWQgZmliZXJD
b3VudCkgOiBVU3RyaW5nT3JSb3BlSW1wbChDb25zdHJ1Y3RSb3BlKSwgbV9maWJlckNvdW50KGZp
YmVyQ291bnQpIHt9CisKKyAgICB2b2lkIGRlc3RydWN0Tm9uUmVjdXJzaXZlKCk7CisgICAgdm9p
ZCBkZXJlZkZpYmVyc05vblJlY3Vyc2l2ZShWZWN0b3I8VVJvcGVJbXBsKiwgMzI+JiB3b3JrUXVl
dWUpOworCisgICAgYm9vbCBoYXNPbmVSZWYoKSB7IHJldHVybiAobV9yZWZDb3VudEFuZEZsYWdz
ICYgc19yZWZDb3VudE1hc2spID09IHNfcmVmQ291bnRJbmNyZW1lbnQ7IH0KKworICAgIHVuc2ln
bmVkIG1fZmliZXJDb3VudDsKKyAgICBGaWJlciBtX2ZpYmVyc1sxXTsKK307CisKK2lubGluZSB2
b2lkIFVTdHJpbmdPclJvcGVJbXBsOjpkZXJlZigpCit7CisgICAgbV9yZWZDb3VudEFuZEZsYWdz
IC09IHNfcmVmQ291bnRJbmNyZW1lbnQ7CisgICAgaWYgKCEobV9yZWZDb3VudEFuZEZsYWdzICYg
c19yZWZDb3VudE1hc2spKSB7CisgICAgICAgIGlmIChpc1JvcGUoKSkKKyAgICAgICAgICAgIGRl
bGV0ZSBzdGF0aWNfY2FzdDxVUm9wZUltcGwqPih0aGlzKTsKKyAgICAgICAgZWxzZSBpZiAoIXNf
cmVmQ291bnRGbGFnU3RhdGljKQorICAgICAgICAgICAgZGVsZXRlIHN0YXRpY19jYXN0PFVTdHJp
bmdJbXBsKj4odGhpcyk7CisgICAgfQorfQorCiBib29sIGVxdWFsKGNvbnN0IFVTdHJpbmdJbXBs
KiwgY29uc3QgVVN0cmluZ0ltcGwqKTsKIAogfQo=
</data>
<flag name="review"
          id="31578"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>