<?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>119681</bug_id>
          
          <creation_ts>2013-08-12 05:35:40 -0700</creation_ts>
          <short_desc>Add ElementTraversal::next/previousSibling</short_desc>
          <delta_ts>2013-08-12 09:01:11 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>916262</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-08-12 05:35:40 -0700</bug_when>
    <thetext>Better internal traversal.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>916271</commentid>
    <comment_count>1</comment_count>
      <attachid>208538</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-08-12 06:46:11 -0700</bug_when>
    <thetext>Created attachment 208538
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>916289</commentid>
    <comment_count>2</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-08-12 08:51:42 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/153942</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>208538</attachid>
            <date>2013-08-12 06:46:11 -0700</date>
            <delta_ts>2013-08-12 06:59:44 -0700</delta_ts>
            <desc>patch</desc>
            <filename>element-next-sibling-2.patch</filename>
            <type>text/plain</type>
            <size>28182</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1Mzk0MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY3IEBACisyMDEzLTA4LTEyICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgRWxlbWVudFRyYXZlcnNh
bDo6bmV4dC9wcmV2aW91c1NpYmxpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTExOTY4MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEFkZCBuZXh0U2libGluZy9wcmV2aW91c1NpYmxpbmcvbGFzdFdpdGhp
biB0byBFbGVtZW5lbnRUcmF2ZXJzYWwuCisgICAgICAgIAorICAgICAgICAtIFVzZSB0aGVtIHRv
IHJlcGxhY2UgaW50ZXJuYWwgdXNlIG9mIEVsZW1lbnQ6Om5leHQvcHJldmlvdXNFbGVtZW50U2li
bGluZyBET00gQVBJIGZvciB0cmF2ZXJzYWwuCisgICAgICAgIC0gUmVwbGFjZSBzb21lIE5vZGU6
Om5leHRTaWJsaW5nKCkgdXNhZ2Ugd2l0aCBFbGVtZW50VHJhdmVyc2FsOjpuZXh0U2libGluZygp
IGZvciB0aWdodGVyIGNvZGUuCisgICAgICAgIC0gUmVwbGFjZSBFbGVtZW50VHJhdmVyc2FsOjpu
ZXh0U2tpcHBpbmdDaGlsZHJlbiB3aGVyZSBpdCBpcyB1c2VkIHRvIHRyYXZlcnNlIG92ZXIgaW1t
ZWRpYXRlIGNoaWxkcmVuIG9ubHkuCisKKyAgICAgICAgKiBjc3MvU2VsZWN0b3JDaGVja2VyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmlzRmlyc3RDaGlsZEVsZW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6aXNMYXN0Q2hpbGRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OmlzRmlyc3RPZlR5
cGUpOgorICAgICAgICAoV2ViQ29yZTo6aXNMYXN0T2ZUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6
OmNvdW50RWxlbWVudHNCZWZvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Y291bnRFbGVtZW50c09m
VHlwZUJlZm9yZSk6CisgICAgICAgIChXZWJDb3JlOjpjb3VudEVsZW1lbnRzQWZ0ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6Y291bnRFbGVtZW50c09mVHlwZUFmdGVyKToKKyAgICAgICAgKiBkb20v
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpsYXN0RWxlbWVudENoaWxk
KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnByZXZpb3VzRWxlbWVudFNpYmxpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6bmV4dEVsZW1lbnRTaWJsaW5nKToKKyAgICAgICAg
KiBkb20vRWxlbWVudC5oOgorICAgICAgICAqIGRvbS9FbGVtZW50VHJhdmVyc2FsLmg6CisgICAg
ICAgIChXZWJDb3JlOjpFbGVtZW50VHJhdmVyc2FsOjpsYXN0RWxlbWVudFdpdGhpblRlbXBsYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRUcmF2ZXJzYWw6Omxhc3RXaXRoaW4pOgorICAg
ICAgICAoV2ViQ29yZTo6RWxlbWVudFRyYXZlcnNhbDo6dHJhdmVyc2VOZXh0U2libGluZ0VsZW1l
bnRUZW1wbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50VHJhdmVyc2FsOjpuZXh0U2li
bGluZyk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50VHJhdmVyc2FsOjp0cmF2ZXJzZVByZXZp
b3VzU2libGluZ0VsZW1lbnRUZW1wbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50VHJh
dmVyc2FsOjpwcmV2aW91c1NpYmxpbmcpOgorICAgICAgICAqIGVkaXRpbmcvQXBwbHlTdHlsZUNv
bW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNTcGFuV2l0aG91dEF0dHJpYnV0ZXNPclVu
c3R5bGVkU3R5bGVTcGFuKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpj
bGVhbnVwVW5zdHlsZWRBcHBsZVN0eWxlU3BhbnMpOgorICAgICAgICAqIGVkaXRpbmcvQ29tcG9z
aXRlRWRpdENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1h
bmQ6OmJyZWFrT3V0T2ZFbXB0eUxpc3RJdGVtKToKKyAgICAgICAgKiBlZGl0aW5nL0luZGVudE91
dGRlbnRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkluZGVudE91dGRlbnRDb21tYW5k
Ojp0cnlJbmRlbnRpbmdBc0xpc3RJdGVtKToKKyAgICAgICAgKiBlZGl0aW5nL0luc2VydExpc3RD
b21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc2VydExpc3RDb21tYW5kOjptZXJnZVdp
dGhOZWlnaGJvcmluZ0xpc3RzKToKKyAgICAgICAgKiBlZGl0aW5nL21hcmt1cC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQpOgorICAgICAgICAqIGh0bWwv
SFRNTENvbGxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Zmlyc3RNYXRjaGluZ0NoaWxk
RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpuZXh0TWF0Y2hpbmdTaWJsaW5nRWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbjo6dHJhdmVyc2VOZXh0RWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbjo6dHJhdmVyc2VGb3J3YXJkVG9PZmZz
ZXQpOgorICAgICAgICAqIGh0bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MRmllbGRTZXRFbGVtZW50OjpjaGlsZHJlbkNoYW5nZWQpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTEZpZWxkU2V0RWxlbWVudDo6bGVnZW5kKToKKyAgICAgICAgKiBodG1sL0hU
TUxNZWRpYUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6
ZmluaXNoUGFyc2luZ0NoaWxkcmVuKToKKyAgICAgICAgKiBodG1sL0hUTUxPYmplY3RFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50Ojpjb250YWluc0phdmFB
cHBsZXQpOgorICAgICAgICAqIHJlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3RSZW5kZXJlcjo6YnVpbGRSZWZlcmVuY2VGaWx0
ZXIpOgorICAgICAgICAqIHN0eWxlL1N0eWxlUmVzb2x2ZVRyZWUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGU6OnJlc29sdmVUcmVlKToKKyAgICAgICAgKiBzdmcvU1ZHU3R5bGVkRWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTdHlsZWRFbGVtZW50Ojp0aXRsZSk6CisKIDIw
MTMtMDgtMTIgIEFsbGFuIFNhbmRmZWxkIEplbnNlbiAgPGFsbGFuLmplbnNlbkBkaWdpYS5jb20+
CiAKICAgICAgICAgW1F0XSBBZGQgU3VwcG9ydCBmb3IgY2FudmFzIGJsZW5kIG1vZGVzCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcAkocmV2aXNpb24gMTUzOTM4KQor
KysgU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJDU1NTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNT
U1NlbGVjdG9yTGlzdC5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRWxlbWVu
dFRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIkZvY3VzQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkZy
YW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24uaCIKQEAgLTY2LDE3ICs2NywxNyBAQCB1
c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogICAgIAogc3RhdGljIGlubGluZSBib29sIGlzRmly
c3RDaGlsZEVsZW1lbnQoY29uc3QgRWxlbWVudCogZWxlbWVudCkKIHsKLSAgICByZXR1cm4gIWVs
ZW1lbnQtPnByZXZpb3VzRWxlbWVudFNpYmxpbmcoKTsKKyAgICByZXR1cm4gIUVsZW1lbnRUcmF2
ZXJzYWw6OnByZXZpb3VzU2libGluZyhlbGVtZW50KTsKIH0KIAogc3RhdGljIGlubGluZSBib29s
IGlzTGFzdENoaWxkRWxlbWVudChjb25zdCBFbGVtZW50KiBlbGVtZW50KQogewotICAgIHJldHVy
biAhZWxlbWVudC0+bmV4dEVsZW1lbnRTaWJsaW5nKCk7CisgICAgcmV0dXJuICFFbGVtZW50VHJh
dmVyc2FsOjpuZXh0U2libGluZyhlbGVtZW50KTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIGlz
Rmlyc3RPZlR5cGUoY29uc3QgRWxlbWVudCogZWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYg
dHlwZSkKIHsKLSAgICBmb3IgKGNvbnN0IEVsZW1lbnQqIHNpYmxpbmcgPSBlbGVtZW50LT5wcmV2
aW91c0VsZW1lbnRTaWJsaW5nKCk7IHNpYmxpbmc7IHNpYmxpbmcgPSBzaWJsaW5nLT5wcmV2aW91
c0VsZW1lbnRTaWJsaW5nKCkpIHsKKyAgICBmb3IgKGNvbnN0IEVsZW1lbnQqIHNpYmxpbmcgPSBF
bGVtZW50VHJhdmVyc2FsOjpwcmV2aW91c1NpYmxpbmcoZWxlbWVudCk7IHNpYmxpbmc7IHNpYmxp
bmcgPSBFbGVtZW50VHJhdmVyc2FsOjpwcmV2aW91c1NpYmxpbmcoc2libGluZykpIHsKICAgICAg
ICAgaWYgKHNpYmxpbmctPmhhc1RhZ05hbWUodHlwZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQpAQCAtODUsNyArODYsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNGaXJzdE9m
VHlwZShjb25zdCBFCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0xhc3RPZlR5cGUoY29uc3QgRWxl
bWVudCogZWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgdHlwZSkKIHsKLSAgICBmb3IgKGNv
bnN0IEVsZW1lbnQqIHNpYmxpbmcgPSBlbGVtZW50LT5uZXh0RWxlbWVudFNpYmxpbmcoKTsgc2li
bGluZzsgc2libGluZyA9IHNpYmxpbmctPm5leHRFbGVtZW50U2libGluZygpKSB7CisgICAgZm9y
IChjb25zdCBFbGVtZW50KiBzaWJsaW5nID0gRWxlbWVudFRyYXZlcnNhbDo6bmV4dFNpYmxpbmco
ZWxlbWVudCk7IHNpYmxpbmc7IHNpYmxpbmcgPSBFbGVtZW50VHJhdmVyc2FsOjpuZXh0U2libGlu
ZyhzaWJsaW5nKSkgewogICAgICAgICBpZiAoc2libGluZy0+aGFzVGFnTmFtZSh0eXBlKSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC05NSw3ICs5Niw3IEBAIHN0YXRpYyBp
bmxpbmUgYm9vbCBpc0xhc3RPZlR5cGUoY29uc3QgRWwKIHN0YXRpYyBpbmxpbmUgaW50IGNvdW50
RWxlbWVudHNCZWZvcmUoY29uc3QgRWxlbWVudCogZWxlbWVudCkKIHsKICAgICBpbnQgY291bnQg
PSAwOwotICAgIGZvciAoY29uc3QgRWxlbWVudCogc2libGluZyA9IGVsZW1lbnQtPnByZXZpb3Vz
RWxlbWVudFNpYmxpbmcoKTsgc2libGluZzsgc2libGluZyA9IHNpYmxpbmctPnByZXZpb3VzRWxl
bWVudFNpYmxpbmcoKSkgeworICAgIGZvciAoY29uc3QgRWxlbWVudCogc2libGluZyA9IEVsZW1l
bnRUcmF2ZXJzYWw6OnByZXZpb3VzU2libGluZyhlbGVtZW50KTsgc2libGluZzsgc2libGluZyA9
IEVsZW1lbnRUcmF2ZXJzYWw6OnByZXZpb3VzU2libGluZyhzaWJsaW5nKSkgewogICAgICAgICB1
bnNpZ25lZCBpbmRleCA9IHNpYmxpbmctPmNoaWxkSW5kZXgoKTsKICAgICAgICAgaWYgKGluZGV4
KSB7CiAgICAgICAgICAgICBjb3VudCArPSBpbmRleDsKQEAgLTEwOSw3ICsxMTAsNyBAQCBzdGF0
aWMgaW5saW5lIGludCBjb3VudEVsZW1lbnRzQmVmb3JlKGNvCiBzdGF0aWMgaW5saW5lIGludCBj
b3VudEVsZW1lbnRzT2ZUeXBlQmVmb3JlKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFF1
YWxpZmllZE5hbWUmIHR5cGUpCiB7CiAgICAgaW50IGNvdW50ID0gMDsKLSAgICBmb3IgKGNvbnN0
IEVsZW1lbnQqIHNpYmxpbmcgPSBlbGVtZW50LT5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKCk7IHNp
Ymxpbmc7IHNpYmxpbmcgPSBzaWJsaW5nLT5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKCkpIHsKKyAg
ICBmb3IgKGNvbnN0IEVsZW1lbnQqIHNpYmxpbmcgPSBFbGVtZW50VHJhdmVyc2FsOjpwcmV2aW91
c1NpYmxpbmcoZWxlbWVudCk7IHNpYmxpbmc7IHNpYmxpbmcgPSBFbGVtZW50VHJhdmVyc2FsOjpw
cmV2aW91c1NpYmxpbmcoc2libGluZykpIHsKICAgICAgICAgaWYgKHNpYmxpbmctPmhhc1RhZ05h
bWUodHlwZSkpCiAgICAgICAgICAgICArK2NvdW50OwogICAgIH0KQEAgLTExOSw3ICsxMjAsNyBA
QCBzdGF0aWMgaW5saW5lIGludCBjb3VudEVsZW1lbnRzT2ZUeXBlQmVmCiBzdGF0aWMgaW5saW5l
IGludCBjb3VudEVsZW1lbnRzQWZ0ZXIoY29uc3QgRWxlbWVudCogZWxlbWVudCkKIHsKICAgICBp
bnQgY291bnQgPSAwOwotICAgIGZvciAoY29uc3QgRWxlbWVudCogc2libGluZyA9IGVsZW1lbnQt
Pm5leHRFbGVtZW50U2libGluZygpOyBzaWJsaW5nOyBzaWJsaW5nID0gc2libGluZy0+bmV4dEVs
ZW1lbnRTaWJsaW5nKCkpCisgICAgZm9yIChjb25zdCBFbGVtZW50KiBzaWJsaW5nID0gRWxlbWVu
dFRyYXZlcnNhbDo6bmV4dFNpYmxpbmcoZWxlbWVudCk7IHNpYmxpbmc7IHNpYmxpbmcgPSBFbGVt
ZW50VHJhdmVyc2FsOjpuZXh0U2libGluZyhzaWJsaW5nKSkKICAgICAgICAgKytjb3VudDsKICAg
ICByZXR1cm4gY291bnQ7CiB9CkBAIC0xMjcsNyArMTI4LDcgQEAgc3RhdGljIGlubGluZSBpbnQg
Y291bnRFbGVtZW50c0FmdGVyKGNvbgogc3RhdGljIGlubGluZSBpbnQgY291bnRFbGVtZW50c09m
VHlwZUFmdGVyKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIHR5
cGUpCiB7CiAgICAgaW50IGNvdW50ID0gMDsKLSAgICBmb3IgKGNvbnN0IEVsZW1lbnQqIHNpYmxp
bmcgPSBlbGVtZW50LT5uZXh0RWxlbWVudFNpYmxpbmcoKTsgc2libGluZzsgc2libGluZyA9IHNp
YmxpbmctPm5leHRFbGVtZW50U2libGluZygpKSB7CisgICAgZm9yIChjb25zdCBFbGVtZW50KiBz
aWJsaW5nID0gRWxlbWVudFRyYXZlcnNhbDo6bmV4dFNpYmxpbmcoZWxlbWVudCk7IHNpYmxpbmc7
IHNpYmxpbmcgPSBFbGVtZW50VHJhdmVyc2FsOjpuZXh0U2libGluZyhzaWJsaW5nKSkgewogICAg
ICAgICBpZiAoc2libGluZy0+aGFzVGFnTmFtZSh0eXBlKSkKICAgICAgICAgICAgICsrY291bnQ7
CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkocmV2aXNpb24gMTUzOTM5KQorKysg
U291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzc4LDEw
ICsyMzc4LDE3IEBAIEVsZW1lbnQqIEVsZW1lbnQ6OmZpcnN0RWxlbWVudENoaWxkKCkgY28KIAog
RWxlbWVudCogRWxlbWVudDo6bGFzdEVsZW1lbnRDaGlsZCgpIGNvbnN0CiB7Ci0gICAgTm9kZSog
biA9IGxhc3RDaGlsZCgpOwotICAgIHdoaWxlIChuICYmICFuLT5pc0VsZW1lbnROb2RlKCkpCi0g
ICAgICAgIG4gPSBuLT5wcmV2aW91c1NpYmxpbmcoKTsKLSAgICByZXR1cm4gdG9FbGVtZW50KG4p
OworICAgIHJldHVybiBFbGVtZW50VHJhdmVyc2FsOjpsYXN0V2l0aGluKHRoaXMpOworfQorCitF
bGVtZW50KiBFbGVtZW50OjpwcmV2aW91c0VsZW1lbnRTaWJsaW5nKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gRWxlbWVudFRyYXZlcnNhbDo6cHJldmlvdXNTaWJsaW5nKHRoaXMpOworfQorCitFbGVt
ZW50KiBFbGVtZW50OjpuZXh0RWxlbWVudFNpYmxpbmcoKSBjb25zdAoreworICAgIHJldHVybiBF
bGVtZW50VHJhdmVyc2FsOjpuZXh0U2libGluZyh0aGlzKTsKIH0KIAogdW5zaWduZWQgRWxlbWVu
dDo6Y2hpbGRFbGVtZW50Q291bnQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0Vs
ZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCShyZXZp
c2lvbiAxNTM5MzgpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC04MjUsMjIgKzgyNSw2IEBAIGlubGluZSBFbGVtZW50KiBOb2RlOjpwYXJlbnRFbGVt
ZW50KCkgY28KICAgICByZXR1cm4gcGFyZW50ICYmIHBhcmVudC0+aXNFbGVtZW50Tm9kZSgpID8g
dG9FbGVtZW50KHBhcmVudCkgOiAwOwogfQogCi1pbmxpbmUgRWxlbWVudCogRWxlbWVudDo6cHJl
dmlvdXNFbGVtZW50U2libGluZygpIGNvbnN0Ci17Ci0gICAgTm9kZSogbiA9IHByZXZpb3VzU2li
bGluZygpOwotICAgIHdoaWxlIChuICYmICFuLT5pc0VsZW1lbnROb2RlKCkpCi0gICAgICAgIG4g
PSBuLT5wcmV2aW91c1NpYmxpbmcoKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RWxlbWVudCo+
KG4pOwotfQotCi1pbmxpbmUgRWxlbWVudCogRWxlbWVudDo6bmV4dEVsZW1lbnRTaWJsaW5nKCkg
Y29uc3QKLXsKLSAgICBOb2RlKiBuID0gbmV4dFNpYmxpbmcoKTsKLSAgICB3aGlsZSAobiAmJiAh
bi0+aXNFbGVtZW50Tm9kZSgpKQotICAgICAgICBuID0gbi0+bmV4dFNpYmxpbmcoKTsKLSAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4pOwotfQotCiBpbmxpbmUgYm9vbCBFbGVtZW50
OjpmYXN0SGFzQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpIGNvbnN0CiB7CiAg
ICAgQVNTRVJUKGZhc3RBdHRyaWJ1dGVMb29rdXBBbGxvd2VkKG5hbWUpKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2RvbS9FbGVtZW50VHJhdmVyc2FsLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZG9tL0VsZW1lbnRUcmF2ZXJzYWwuaAkocmV2aXNpb24gMTUzOTM5KQorKysgU291cmNl
L1dlYkNvcmUvZG9tL0VsZW1lbnRUcmF2ZXJzYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsOSAr
MzEsMTEgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBFbGVtZW50VHJhdmVyc2Fs
IHsKIAotLy8gRmlyc3QgZWxlbWVudCBjaGlsZCBvZiB0aGUgbm9kZS4KKy8vIEZpcnN0IG9yIGxh
c3QgZWxlbWVudCBjaGlsZCBvZiB0aGUgbm9kZS4KIEVsZW1lbnQqIGZpcnN0V2l0aGluKGNvbnN0
IE5vZGUqKTsKIEVsZW1lbnQqIGZpcnN0V2l0aGluKGNvbnN0IENvbnRhaW5lck5vZGUqKTsKK0Vs
ZW1lbnQqIGxhc3RXaXRoaW4oY29uc3QgTm9kZSopOworRWxlbWVudCogbGFzdFdpdGhpbihjb25z
dCBDb250YWluZXJOb2RlKik7CiAKIC8vIFByZS1vcmRlciB0cmF2ZXJzYWwgc2tpcHBpbmcgbm9u
LWVsZW1lbnQgbm9kZXMuCiBFbGVtZW50KiBuZXh0KGNvbnN0IE5vZGUqKTsKQEAgLTQxLDYgKzQz
LDEyIEBAIEVsZW1lbnQqIG5leHQoY29uc3QgTm9kZSosIGNvbnN0IE5vZGUqIHMKIEVsZW1lbnQq
IG5leHQoY29uc3QgQ29udGFpbmVyTm9kZSopOwogRWxlbWVudCogbmV4dChjb25zdCBDb250YWlu
ZXJOb2RlKiwgY29uc3QgTm9kZSogc3RheVdpdGhpbik7CiAKKy8vIE5leHQgb3IgcHJldmlvdXMg
RWxlbWVudCBzaWJsaW5nIGlmIHRoZXJlIGlzIG9uZS4KK0VsZW1lbnQqIG5leHRTaWJsaW5nKGNv
bnN0IE5vZGUqKTsKK0VsZW1lbnQqIG5leHRTaWJsaW5nKGNvbnN0IENvbnRhaW5lck5vZGUqKTsK
K0VsZW1lbnQqIHByZXZpb3VzU2libGluZyhjb25zdCBOb2RlKik7CitFbGVtZW50KiBwcmV2aW91
c1NpYmxpbmcoY29uc3QgQ29udGFpbmVyTm9kZSopOworCiAvLyBMaWtlIG5leHQsIGJ1dCBza2lw
cyBjaGlsZHJlbi4KIEVsZW1lbnQqIG5leHRTa2lwcGluZ0NoaWxkcmVuKGNvbnN0IE5vZGUqKTsK
IEVsZW1lbnQqIG5leHRTa2lwcGluZ0NoaWxkcmVuKGNvbnN0IE5vZGUqLCBjb25zdCBOb2RlKiBz
dGF5V2l0aGluKTsKQEAgLTU4LDYgKzY2LDcgQEAgRWxlbWVudCogcHNldWRvQXdhcmVQcmV2aW91
c1NpYmxpbmcoY29ucwogfQogCiBuYW1lc3BhY2UgRWxlbWVudFRyYXZlcnNhbCB7CisKIHRlbXBs
YXRlIDxjbGFzcyBOb2RlVHlwZT4KIGlubGluZSBFbGVtZW50KiBmaXJzdEVsZW1lbnRXaXRoaW5U
ZW1wbGF0ZShOb2RlVHlwZSogY3VycmVudCkKIHsKQEAgLTcxLDYgKzgwLDE3IEBAIGlubGluZSBF
bGVtZW50KiBmaXJzdFdpdGhpbihjb25zdCBDb250YWkKIGlubGluZSBFbGVtZW50KiBmaXJzdFdp
dGhpbihjb25zdCBOb2RlKiBjdXJyZW50KSB7IHJldHVybiBmaXJzdEVsZW1lbnRXaXRoaW5UZW1w
bGF0ZShjdXJyZW50KTsgfQogCiB0ZW1wbGF0ZSA8Y2xhc3MgTm9kZVR5cGU+CitpbmxpbmUgRWxl
bWVudCogbGFzdEVsZW1lbnRXaXRoaW5UZW1wbGF0ZShOb2RlVHlwZSogY3VycmVudCkKK3sKKyAg
ICBOb2RlKiBub2RlID0gY3VycmVudC0+bGFzdENoaWxkKCk7CisgICAgd2hpbGUgKG5vZGUgJiYg
IW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgbm9kZSA9IG5vZGUtPnByZXZpb3VzU2li
bGluZygpOworICAgIHJldHVybiB0b0VsZW1lbnQobm9kZSk7Cit9CitpbmxpbmUgRWxlbWVudCog
bGFzdFdpdGhpbihjb25zdCBDb250YWluZXJOb2RlKiBjdXJyZW50KSB7IHJldHVybiBsYXN0RWxl
bWVudFdpdGhpblRlbXBsYXRlKGN1cnJlbnQpOyB9CitpbmxpbmUgRWxlbWVudCogbGFzdFdpdGhp
bihjb25zdCBOb2RlKiBjdXJyZW50KSB7IHJldHVybiBsYXN0RWxlbWVudFdpdGhpblRlbXBsYXRl
KGN1cnJlbnQpOyB9CisKK3RlbXBsYXRlIDxjbGFzcyBOb2RlVHlwZT4KIGlubGluZSBFbGVtZW50
KiB0cmF2ZXJzZU5leHRFbGVtZW50VGVtcGxhdGUoTm9kZVR5cGUqIGN1cnJlbnQpCiB7CiAgICAg
Tm9kZSogbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoY3VycmVudCk7CkBAIC05Myw2ICsxMTMs
MjggQEAgaW5saW5lIEVsZW1lbnQqIG5leHQoY29uc3QgQ29udGFpbmVyTm9kZQogaW5saW5lIEVs
ZW1lbnQqIG5leHQoY29uc3QgTm9kZSogY3VycmVudCwgY29uc3QgTm9kZSogc3RheVdpdGhpbikg
eyByZXR1cm4gdHJhdmVyc2VOZXh0RWxlbWVudFRlbXBsYXRlKGN1cnJlbnQsIHN0YXlXaXRoaW4p
OyB9CiAKIHRlbXBsYXRlIDxjbGFzcyBOb2RlVHlwZT4KK2lubGluZSBFbGVtZW50KiB0cmF2ZXJz
ZU5leHRTaWJsaW5nRWxlbWVudFRlbXBsYXRlKE5vZGVUeXBlKiBjdXJyZW50KQoreworICAgIE5v
ZGUqIG5vZGUgPSBjdXJyZW50LT5uZXh0U2libGluZygpOworICAgIHdoaWxlIChub2RlICYmICFu
b2RlLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgIG5vZGUgPSBub2RlLT5uZXh0U2libGluZygp
OworICAgIHJldHVybiB0b0VsZW1lbnQobm9kZSk7Cit9CitpbmxpbmUgRWxlbWVudCogbmV4dFNp
YmxpbmcoY29uc3QgQ29udGFpbmVyTm9kZSogY3VycmVudCkgeyByZXR1cm4gdHJhdmVyc2VOZXh0
U2libGluZ0VsZW1lbnRUZW1wbGF0ZShjdXJyZW50KTsgfQoraW5saW5lIEVsZW1lbnQqIG5leHRT
aWJsaW5nKGNvbnN0IE5vZGUqIGN1cnJlbnQpIHsgcmV0dXJuIHRyYXZlcnNlTmV4dFNpYmxpbmdF
bGVtZW50VGVtcGxhdGUoY3VycmVudCk7IH0KKwordGVtcGxhdGUgPGNsYXNzIE5vZGVUeXBlPgor
aW5saW5lIEVsZW1lbnQqIHRyYXZlcnNlUHJldmlvdXNTaWJsaW5nRWxlbWVudFRlbXBsYXRlKE5v
ZGVUeXBlKiBjdXJyZW50KQoreworICAgIE5vZGUqIG5vZGUgPSBjdXJyZW50LT5wcmV2aW91c1Np
YmxpbmcoKTsKKyAgICB3aGlsZSAobm9kZSAmJiAhbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQorICAg
ICAgICBub2RlID0gbm9kZS0+cHJldmlvdXNTaWJsaW5nKCk7CisgICAgcmV0dXJuIHRvRWxlbWVu
dChub2RlKTsKK30KK2lubGluZSBFbGVtZW50KiBwcmV2aW91c1NpYmxpbmcoY29uc3QgQ29udGFp
bmVyTm9kZSogY3VycmVudCkgeyByZXR1cm4gdHJhdmVyc2VQcmV2aW91c1NpYmxpbmdFbGVtZW50
VGVtcGxhdGUoY3VycmVudCk7IH0KK2lubGluZSBFbGVtZW50KiBwcmV2aW91c1NpYmxpbmcoY29u
c3QgTm9kZSogY3VycmVudCkgeyByZXR1cm4gdHJhdmVyc2VQcmV2aW91c1NpYmxpbmdFbGVtZW50
VGVtcGxhdGUoY3VycmVudCk7IH0KKwordGVtcGxhdGUgPGNsYXNzIE5vZGVUeXBlPgogaW5saW5l
IEVsZW1lbnQqIHRyYXZlcnNlTmV4dEVsZW1lbnRTa2lwcGluZ0NoaWxkcmVuVGVtcGxhdGUoTm9k
ZVR5cGUqIGN1cnJlbnQpCiB7CiAgICAgTm9kZSogbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHRT
a2lwcGluZ0NoaWxkcmVuKGN1cnJlbnQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9B
cHBseVN0eWxlQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9BcHBseVN0eWxlQ29tbWFuZC5jcHAJKHJldmlzaW9uIDE1MzkzOCkKKysrIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2
ICszNCw3IEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFZGl0aW5nU3R5bGUu
aCIKICNpbmNsdWRlICJFZGl0b3IuaCIKKyNpbmNsdWRlICJFbGVtZW50VHJhdmVyc2FsLmgiCiAj
aW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJIVE1MRm9udEVsZW1lbnQuaCIKICNpbmNsdWRl
ICJIVE1MSW50ZXJjaGFuZ2UuaCIKQEAgLTk5LDExICsxMDAsMTEgQEAgYm9vbCBpc1N0eWxlU3Bh
bk9yU3BhbldpdGhPbmx5U3R5bGVBdHRyaQogICAgIHJldHVybiBoYXNOb0F0dHJpYnV0ZU9yT25s
eVN0eWxlQXR0cmlidXRlKHRvSFRNTEVsZW1lbnQoZWxlbWVudCksIEFsbG93Tm9uRW1wdHlTdHls
ZUF0dHJpYnV0ZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBpc1NwYW5XaXRob3V0QXR0cmli
dXRlc09yVW5zdHlsZWRTdHlsZVNwYW4oY29uc3QgTm9kZSogbm9kZSkKK3N0YXRpYyBpbmxpbmUg
Ym9vbCBpc1NwYW5XaXRob3V0QXR0cmlidXRlc09yVW5zdHlsZWRTdHlsZVNwYW4oY29uc3QgRWxl
bWVudCogZWxlbWVudCkKIHsKLSAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlzSFRNTEVsZW1lbnQo
KSB8fCAhbm9kZS0+aGFzVGFnTmFtZShzcGFuVGFnKSkKKyAgICBpZiAoIWVsZW1lbnQgfHwgIWVs
ZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSB8fCAhZWxlbWVudC0+aGFzVGFnTmFtZShzcGFuVGFnKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBoYXNOb0F0dHJpYnV0ZU9yT25seVN0
eWxlQXR0cmlidXRlKHRvSFRNTEVsZW1lbnQobm9kZSksIFN0eWxlQXR0cmlidXRlU2hvdWxkQmVF
bXB0eSk7CisgICAgcmV0dXJuIGhhc05vQXR0cmlidXRlT3JPbmx5U3R5bGVBdHRyaWJ1dGUodG9I
VE1MRWxlbWVudChlbGVtZW50KSwgU3R5bGVBdHRyaWJ1dGVTaG91bGRCZUVtcHR5KTsKIH0KIAog
Ym9vbCBpc0VtcHR5Rm9udFRhZyhjb25zdCBFbGVtZW50KiBlbGVtZW50LCBTaG91bGRTdHlsZUF0
dHJpYnV0ZUJlRW1wdHkgc2hvdWxkU3R5bGVBdHRyaWJ1dGVCZUVtcHR5KQpAQCAtNDQwLDEyICs0
NDEsMTEgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6Y2xlYW51cFVuc3R5bGVkQQogICAgIC8v
IGNhbiBiZSBwcm9wYWdhdGVkLCB3aGljaCBjYW4gcmVzdWx0IGluIG1vcmUgc3BsaXR0aW5nLiBJ
ZiBhIGR1bW15IHNwYW4gZ2V0cwogICAgIC8vIGNsb25lZC9zcGxpdCwgdGhlIG5ldyBub2RlIGlz
IGFsd2F5cyBhIHNpYmxpbmcgb2YgaXQuIFRoZXJlZm9yZSwgd2Ugc2NhbgogICAgIC8vIGFsbCB0
aGUgY2hpbGRyZW4gb2YgdGhlIGR1bW15J3MgcGFyZW50Ci0gICAgTm9kZSogbmV4dDsKLSAgICBm
b3IgKE5vZGUqIG5vZGUgPSBkdW1teVNwYW5BbmNlc3Rvci0+Zmlyc3RDaGlsZCgpOyBub2RlOyBu
b2RlID0gbmV4dCkgewotICAgICAgICBuZXh0ID0gbm9kZS0+bmV4dFNpYmxpbmcoKTsKLSAgICAg
ICAgaWYgKGlzU3BhbldpdGhvdXRBdHRyaWJ1dGVzT3JVbnN0eWxlZFN0eWxlU3Bhbihub2RlKSkK
LSAgICAgICAgICAgIHJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4obm9kZSk7Ci0gICAgICAg
IG5vZGUgPSBuZXh0OworICAgIEVsZW1lbnQqIG5leHQ7CisgICAgZm9yIChFbGVtZW50KiBlbGVt
ZW50ID0gRWxlbWVudFRyYXZlcnNhbDo6Zmlyc3RXaXRoaW4oZHVtbXlTcGFuQW5jZXN0b3IpOyBl
bGVtZW50OyBlbGVtZW50ID0gbmV4dCkgeworICAgICAgICBuZXh0ID0gRWxlbWVudFRyYXZlcnNh
bDo6bmV4dFNpYmxpbmcoZWxlbWVudCk7CisgICAgICAgIGlmIChpc1NwYW5XaXRob3V0QXR0cmli
dXRlc09yVW5zdHlsZWRTdHlsZVNwYW4oZWxlbWVudCkpCisgICAgICAgICAgICByZW1vdmVOb2Rl
UHJlc2VydmluZ0NoaWxkcmVuKGVsZW1lbnQpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAJKHJldmlzaW9uIDE1
MzkzOCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiRG9jdW1lbnRNYXJr
ZXJDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRWRpdG9yLmgiCiAjaW5jbHVkZSAiRWRpdG9ySW5z
ZXJ0QWN0aW9uLmgiCisjaW5jbHVkZSAiRWxlbWVudFRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIkV4
Y2VwdGlvbkNvZGVQbGFjZWhvbGRlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAi
SFRNTEVsZW1lbnQuaCIKQEAgLTEzMDYsOCArMTMwNyw4IEBAIGJvb2wgQ29tcG9zaXRlRWRpdENv
bW1hbmQ6OmJyZWFrT3V0T2ZFbXAKICAgICBpZiAoIW5ld0Jsb2NrKQogICAgICAgICBuZXdCbG9j
ayA9IGNyZWF0ZURlZmF1bHRQYXJhZ3JhcGhFbGVtZW50KGRvY3VtZW50KCkpOwogCi0gICAgUmVm
UHRyPE5vZGU+IHByZXZpb3VzTGlzdE5vZGUgPSBlbXB0eUxpc3RJdGVtLT5pc0VsZW1lbnROb2Rl
KCkgPyB0b0VsZW1lbnQoZW1wdHlMaXN0SXRlbS5nZXQoKSktPnByZXZpb3VzRWxlbWVudFNpYmxp
bmcoKTogZW1wdHlMaXN0SXRlbS0+cHJldmlvdXNTaWJsaW5nKCk7Ci0gICAgUmVmUHRyPE5vZGU+
IG5leHRMaXN0Tm9kZSA9IGVtcHR5TGlzdEl0ZW0tPmlzRWxlbWVudE5vZGUoKSA/IHRvRWxlbWVu
dChlbXB0eUxpc3RJdGVtLmdldCgpKS0+bmV4dEVsZW1lbnRTaWJsaW5nKCk6IGVtcHR5TGlzdEl0
ZW0tPm5leHRTaWJsaW5nKCk7CisgICAgUmVmUHRyPE5vZGU+IHByZXZpb3VzTGlzdE5vZGUgPSBl
bXB0eUxpc3RJdGVtLT5pc0VsZW1lbnROb2RlKCkgPyBFbGVtZW50VHJhdmVyc2FsOjpwcmV2aW91
c1NpYmxpbmcoZW1wdHlMaXN0SXRlbS5nZXQoKSk6IGVtcHR5TGlzdEl0ZW0tPnByZXZpb3VzU2li
bGluZygpOworICAgIFJlZlB0cjxOb2RlPiBuZXh0TGlzdE5vZGUgPSBlbXB0eUxpc3RJdGVtLT5p
c0VsZW1lbnROb2RlKCkgPyBFbGVtZW50VHJhdmVyc2FsOjpuZXh0U2libGluZyhlbXB0eUxpc3RJ
dGVtLmdldCgpKTogZW1wdHlMaXN0SXRlbS0+bmV4dFNpYmxpbmcoKTsKICAgICBpZiAoaXNMaXN0
SXRlbShuZXh0TGlzdE5vZGUuZ2V0KCkpIHx8IGlzTGlzdEVsZW1lbnQobmV4dExpc3ROb2RlLmdl
dCgpKSkgewogICAgICAgICAvLyBJZiBlbXB0eUxpc3RJdGVtIGZvbGxvd3MgYW5vdGhlciBsaXN0
IGl0ZW0gb3IgbmVzdGVkIGxpc3QsIHNwbGl0IHRoZSBsaXN0IG5vZGUuCiAgICAgICAgIGlmIChp
c0xpc3RJdGVtKHByZXZpb3VzTGlzdE5vZGUuZ2V0KCkpIHx8IGlzTGlzdEVsZW1lbnQocHJldmlv
dXNMaXN0Tm9kZS5nZXQoKSkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luZGVudE91
dGRlbnRDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0lu
ZGVudE91dGRlbnRDb21tYW5kLmNwcAkocmV2aXNpb24gMTUzOTM4KQorKysgU291cmNlL1dlYkNv
cmUvZWRpdGluZy9JbmRlbnRPdXRkZW50Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDYgKzI3LDcgQEAKICNpbmNsdWRlICJJbmRlbnRPdXRkZW50Q29tbWFuZC5oIgogCiAjaW5jbHVk
ZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFbGVtZW50VHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAi
SFRNTEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJJbnNlcnRM
aW5lQnJlYWtDb21tYW5kLmgiCkBAIC03MSw4ICs3Miw4IEBAIGJvb2wgSW5kZW50T3V0ZGVudENv
bW1hbmQ6OnRyeUluZGVudGluZ0EKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIC8v
IEZJWE1FOiBwcmV2aW91c0VsZW1lbnRTaWJsaW5nIGRvZXMgbm90IGlnbm9yZSBub24tcmVuZGVy
ZWQgY29udGVudCBsaWtlIDxzcGFuPjwvc3Bhbj4uICBTaG91bGQgd2U/Ci0gICAgRWxlbWVudCog
cHJldmlvdXNMaXN0ID0gc2VsZWN0ZWRMaXN0SXRlbS0+cHJldmlvdXNFbGVtZW50U2libGluZygp
OwotICAgIEVsZW1lbnQqIG5leHRMaXN0ID0gc2VsZWN0ZWRMaXN0SXRlbS0+bmV4dEVsZW1lbnRT
aWJsaW5nKCk7CisgICAgRWxlbWVudCogcHJldmlvdXNMaXN0ID0gRWxlbWVudFRyYXZlcnNhbDo6
cHJldmlvdXNTaWJsaW5nKHNlbGVjdGVkTGlzdEl0ZW0pOworICAgIEVsZW1lbnQqIG5leHRMaXN0
ID0gRWxlbWVudFRyYXZlcnNhbDo6bmV4dFNpYmxpbmcoc2VsZWN0ZWRMaXN0SXRlbSk7CiAKICAg
ICBSZWZQdHI8RWxlbWVudD4gbmV3TGlzdCA9IGRvY3VtZW50KCktPmNyZWF0ZUVsZW1lbnQobGlz
dE5vZGUtPnRhZ1FOYW1lKCksIGZhbHNlKTsKICAgICBpbnNlcnROb2RlQmVmb3JlKG5ld0xpc3Qs
IHNlbGVjdGVkTGlzdEl0ZW0pOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRM
aXN0Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNl
cnRMaXN0Q29tbWFuZC5jcHAJKHJldmlzaW9uIDE1MzkzOCkKKysrIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3
IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVk
ZSAiRWxlbWVudFRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIkluc2VydExpc3RDb21tYW5kLmgiCiAj
aW5jbHVkZSAiRXhjZXB0aW9uQ29kZVBsYWNlaG9sZGVyLmgiCiAjaW5jbHVkZSAiaHRtbGVkaXRp
bmcuaCIKQEAgLTY5LDEwICs3MCwxMyBAQCBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBJbnNlcnRM
aXN0Q29tbWFuCiAgICAgaWYgKGNhbk1lcmdlTGlzdHMocHJldmlvdXNMaXN0LCBsaXN0LmdldCgp
KSkKICAgICAgICAgbWVyZ2VJZGVudGljYWxFbGVtZW50cyhwcmV2aW91c0xpc3QsIGxpc3QpOwog
Ci0gICAgaWYgKCFsaXN0IHx8ICFsaXN0LT5uZXh0RWxlbWVudFNpYmxpbmcoKSB8fCAhbGlzdC0+
bmV4dEVsZW1lbnRTaWJsaW5nKCktPmlzSFRNTEVsZW1lbnQoKSkKKyAgICBpZiAoIWxpc3QpCisg
ICAgICAgIHJldHVybiAwOworICAgIEVsZW1lbnQqIHNpYmxpbmcgPSBFbGVtZW50VHJhdmVyc2Fs
OjpuZXh0U2libGluZyhsaXN0LmdldCgpKTsKKyAgICBpZiAoIXNpYmxpbmcgfHwgIXNpYmxpbmct
PmlzSFRNTEVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGxpc3QucmVsZWFzZSgpOwogCi0gICAg
UmVmUHRyPEhUTUxFbGVtZW50PiBuZXh0TGlzdCA9IHRvSFRNTEVsZW1lbnQobGlzdC0+bmV4dEVs
ZW1lbnRTaWJsaW5nKCkpOworICAgIFJlZlB0cjxIVE1MRWxlbWVudD4gbmV4dExpc3QgPSB0b0hU
TUxFbGVtZW50KHNpYmxpbmcpOwogICAgIGlmIChjYW5NZXJnZUxpc3RzKGxpc3QuZ2V0KCksIG5l
eHRMaXN0LmdldCgpKSkgewogICAgICAgICBtZXJnZUlkZW50aWNhbEVsZW1lbnRzKGxpc3QsIG5l
eHRMaXN0KTsKICAgICAgICAgcmV0dXJuIG5leHRMaXN0LnJlbGVhc2UoKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL21hcmt1cC5jcHAJKHJldmlzaW9uIDE1MzkzOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvbWFya3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1MywxNCArMTA1MywxNCBA
QCBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUNvbnRlCiAgICAgLy8gYWNjb21t
b2RhdGUgZm9sa3MgcGFzc2luZyBjb21wbGV0ZSBIVE1MIGRvY3VtZW50cyB0byBtYWtlIHRoZQog
ICAgIC8vIGNoaWxkIG9mIGFuIGVsZW1lbnQuCiAKLSAgICBSZWZQdHI8Tm9kZT4gbmV4dE5vZGU7
Ci0gICAgZm9yIChSZWZQdHI8Tm9kZT4gbm9kZSA9IGZyYWdtZW50LT5maXJzdENoaWxkKCk7IG5v
ZGU7IG5vZGUgPSBuZXh0Tm9kZSkgewotICAgICAgICBuZXh0Tm9kZSA9IG5vZGUtPm5leHRTaWJs
aW5nKCk7Ci0gICAgICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKGh0bWxUYWcpIHx8IG5vZGUtPmhh
c1RhZ05hbWUoaGVhZFRhZykgfHwgbm9kZS0+aGFzVGFnTmFtZShib2R5VGFnKSkgewotICAgICAg
ICAgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSB0b0hUTUxFbGVtZW50KG5vZGUuZ2V0KCkpOwot
ICAgICAgICAgICAgaWYgKE5vZGUqIGZpcnN0Q2hpbGQgPSBlbGVtZW50LT5maXJzdENoaWxkKCkp
Ci0gICAgICAgICAgICAgICAgbmV4dE5vZGUgPSBmaXJzdENoaWxkOwotICAgICAgICAgICAgcmVt
b3ZlRWxlbWVudFByZXNlcnZpbmdDaGlsZHJlbihmcmFnbWVudCwgZWxlbWVudCk7CisgICAgUmVm
UHRyPEVsZW1lbnQ+IG5leHRFbGVtZW50OworICAgIGZvciAoUmVmUHRyPEVsZW1lbnQ+IGVsZW1l
bnQgPSBFbGVtZW50VHJhdmVyc2FsOjpmaXJzdFdpdGhpbihmcmFnbWVudC5nZXQoKSk7IGVsZW1l
bnQ7IGVsZW1lbnQgPSBuZXh0RWxlbWVudCkgeworICAgICAgICBuZXh0RWxlbWVudCA9IEVsZW1l
bnRUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKGVsZW1lbnQuZ2V0KCkpOworICAgICAgICBpZiAoZWxl
bWVudC0+aGFzVGFnTmFtZShodG1sVGFnKSB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKGhlYWRUYWcp
IHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoYm9keVRhZykpIHsKKyAgICAgICAgICAgIEhUTUxFbGVt
ZW50KiBodG1sRWxlbWVudCA9IHRvSFRNTEVsZW1lbnQoZWxlbWVudC5nZXQoKSk7CisgICAgICAg
ICAgICBpZiAoRWxlbWVudCogZmlyc3RDaGlsZCA9IEVsZW1lbnRUcmF2ZXJzYWw6OmZpcnN0V2l0
aGluKGh0bWxFbGVtZW50KSkKKyAgICAgICAgICAgICAgICBuZXh0RWxlbWVudCA9IGZpcnN0Q2hp
bGQ7CisgICAgICAgICAgICByZW1vdmVFbGVtZW50UHJlc2VydmluZ0NoaWxkcmVuKGZyYWdtZW50
LCBodG1sRWxlbWVudCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIGZyYWdtZW50LnJl
bGVhc2UoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENvbGxlY3Rpb24uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENvbGxlY3Rpb24uY3BwCShyZXZp
c2lvbiAxNTM5MzkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTE0LDE0ICs1MTQsMTQgQEAgaW5saW5lIEVsZW1lbnQqIGZpcnN0
TWF0Y2hpbmdDaGlsZEVsZW1lbgogewogICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBFbGVtZW50VHJh
dmVyc2FsOjpmaXJzdFdpdGhpbihyb290KTsKICAgICB3aGlsZSAoZWxlbWVudCAmJiAhaXNNYXRj
aGluZ0VsZW1lbnQobm9kZUxpc3QsIGVsZW1lbnQpKQotICAgICAgICBlbGVtZW50ID0gRWxlbWVu
dFRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4oZWxlbWVudCwgcm9vdCk7CisgICAgICAg
IGVsZW1lbnQgPSBFbGVtZW50VHJhdmVyc2FsOjpuZXh0U2libGluZyhlbGVtZW50KTsKICAgICBy
ZXR1cm4gZWxlbWVudDsKIH0KIAotaW5saW5lIEVsZW1lbnQqIG5leHRNYXRjaGluZ0NoaWxkRWxl
bWVudChjb25zdCBIVE1MQ29sbGVjdGlvbiogbm9kZUxpc3QsIEVsZW1lbnQqIGN1cnJlbnQsIENv
bnRhaW5lck5vZGUqIHJvb3QpCitpbmxpbmUgRWxlbWVudCogbmV4dE1hdGNoaW5nU2libGluZ0Vs
ZW1lbnQoY29uc3QgSFRNTENvbGxlY3Rpb24qIG5vZGVMaXN0LCBFbGVtZW50KiBjdXJyZW50KQog
ewogICAgIGRvIHsKLSAgICAgICAgY3VycmVudCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHRTa2lw
cGluZ0NoaWxkcmVuKGN1cnJlbnQsIHJvb3QpOworICAgICAgICBjdXJyZW50ID0gRWxlbWVudFRy
YXZlcnNhbDo6bmV4dFNpYmxpbmcoY3VycmVudCk7CiAgICAgfSB3aGlsZSAoY3VycmVudCAmJiAh
aXNNYXRjaGluZ0VsZW1lbnQobm9kZUxpc3QsIGN1cnJlbnQpKTsKICAgICByZXR1cm4gY3VycmVu
dDsKIH0KQEAgLTU0Miw3ICs1NDIsNyBAQCBpbmxpbmUgRWxlbWVudCogSFRNTENvbGxlY3Rpb246
OnRyYXZlcnNlCiAgICAgICAgIHJldHVybiB2aXJ0dWFsSXRlbUFmdGVyKG9mZnNldEluQXJyYXks
IHByZXZpb3VzKTsKICAgICBBU1NFUlQoIW9mZnNldEluQXJyYXkpOwogICAgIGlmIChzaG91bGRP
bmx5SW5jbHVkZURpcmVjdENoaWxkcmVuKCkpCi0gICAgICAgIHJldHVybiBuZXh0TWF0Y2hpbmdD
aGlsZEVsZW1lbnQodGhpcywgcHJldmlvdXMsIHJvb3QpOworICAgICAgICByZXR1cm4gbmV4dE1h
dGNoaW5nU2libGluZ0VsZW1lbnQodGhpcywgcHJldmlvdXMpOwogICAgIHJldHVybiBuZXh0TWF0
Y2hpbmdFbGVtZW50KHRoaXMsIHByZXZpb3VzLCByb290KTsKIH0KIApAQCAtNTU4LDcgKzU1OCw3
IEBAIGlubGluZSBFbGVtZW50KiBIVE1MQ29sbGVjdGlvbjo6dHJhdmVyc2UKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgfQogICAgIGlmIChzaG91bGRPbmx5SW5jbHVkZURpcmVjdENoaWxkcmVuKCkp
IHsKLSAgICAgICAgd2hpbGUgKChjdXJyZW50RWxlbWVudCA9IG5leHRNYXRjaGluZ0NoaWxkRWxl
bWVudCh0aGlzLCBjdXJyZW50RWxlbWVudCwgcm9vdCkpKSB7CisgICAgICAgIHdoaWxlICgoY3Vy
cmVudEVsZW1lbnQgPSBuZXh0TWF0Y2hpbmdTaWJsaW5nRWxlbWVudCh0aGlzLCBjdXJyZW50RWxl
bWVudCkpKSB7CiAgICAgICAgICAgICBpZiAoKytjdXJyZW50T2Zmc2V0ID09IG9mZnNldCkKICAg
ICAgICAgICAgICAgICByZXR1cm4gY3VycmVudEVsZW1lbnQ7CiAgICAgICAgIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmNwcAkocmV2aXNpb24gMTUz
OTM5KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjcsNyArNjcsNyBAQCB2b2lkIEhUTUxGaWVsZFNldEVsZW1lbnQ6OmRp
c2FibGVkQXR0cmliCiB2b2lkIEhUTUxGaWVsZFNldEVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZChi
b29sIGNoYW5nZWRCeVBhcnNlciwgTm9kZSogYmVmb3JlQ2hhbmdlLCBOb2RlKiBhZnRlckNoYW5n
ZSwgaW50IGNoaWxkQ291bnREZWx0YSkKIHsKICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojpj
aGlsZHJlbkNoYW5nZWQoY2hhbmdlZEJ5UGFyc2VyLCBiZWZvcmVDaGFuZ2UsIGFmdGVyQ2hhbmdl
LCBjaGlsZENvdW50RGVsdGEpOwotICAgIGZvciAoRWxlbWVudCogZWxlbWVudCA9IEVsZW1lbnRU
cmF2ZXJzYWw6OmZpcnN0V2l0aGluKHRoaXMpOyBlbGVtZW50OyBlbGVtZW50ID0gRWxlbWVudFRy
YXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4oZWxlbWVudCwgdGhpcykpIHsKKyAgICBmb3Ig
KEVsZW1lbnQqIGVsZW1lbnQgPSBFbGVtZW50VHJhdmVyc2FsOjpmaXJzdFdpdGhpbih0aGlzKTsg
ZWxlbWVudDsgZWxlbWVudCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKGVsZW1lbnQp
KSB7CiAgICAgICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKGxlZ2VuZFRhZykpCiAgICAgICAg
ICAgICBpbnZhbGlkYXRlRGlzYWJsZWRTdGF0ZVVuZGVyKGVsZW1lbnQpOwogICAgIH0KQEAgLTkx
LDcgKzkxLDcgQEAgUmVuZGVyT2JqZWN0KiBIVE1MRmllbGRTZXRFbGVtZW50OjpjcmVhdAogCiBI
VE1MTGVnZW5kRWxlbWVudCogSFRNTEZpZWxkU2V0RWxlbWVudDo6bGVnZW5kKCkgY29uc3QKIHsK
LSAgICBmb3IgKEVsZW1lbnQqIGNoaWxkID0gRWxlbWVudFRyYXZlcnNhbDo6Zmlyc3RXaXRoaW4o
dGhpcyk7IGNoaWxkOyBjaGlsZCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxk
cmVuKGNoaWxkLCB0aGlzKSkgeworICAgIGZvciAoRWxlbWVudCogY2hpbGQgPSBFbGVtZW50VHJh
dmVyc2FsOjpmaXJzdFdpdGhpbih0aGlzKTsgY2hpbGQ7IGNoaWxkID0gRWxlbWVudFRyYXZlcnNh
bDo6bmV4dFNpYmxpbmcoY2hpbGQpKSB7CiAgICAgICAgIGlmIChjaGlsZC0+aGFzVGFnTmFtZShs
ZWdlbmRUYWcpKQogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxMZWdlbmRFbGVt
ZW50Kj4oY2hpbGQpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlh
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFF
bGVtZW50LmNwcAkocmV2aXNpb24gMTUzOTM4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
TWVkaWFFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1
ZGUgIkRpYWdub3N0aWNMb2dnaW5nS2V5cy5oIgogI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgi
CiAjaW5jbHVkZSAiRWxlbWVudFNoYWRvdy5oIgorI2luY2x1ZGUgIkVsZW1lbnRUcmF2ZXJzYWwu
aCIKICNpbmNsdWRlICJFdmVudC5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRl
ICJFeGNlcHRpb25Db2RlLmgiCkBAIC01MzQsOSArNTM1LDkgQEAgdm9pZCBIVE1MTWVkaWFFbGVt
ZW50OjpmaW5pc2hQYXJzaW5nQ2hpbAogI2lmIEVOQUJMRShWSURFT19UUkFDSykKICAgICBpZiAo
IVJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OndlYmtpdFZpZGVvVHJhY2tFbmFibGVkKCkpCiAgICAg
ICAgIHJldHVybjsKLSAgICAKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSBmaXJzdENoaWxkKCk7IG5v
ZGU7IG5vZGUgPSBub2RlLT5uZXh0U2libGluZygpKSB7Ci0gICAgICAgIGlmIChub2RlLT5oYXNU
YWdOYW1lKHRyYWNrVGFnKSkgeworCisgICAgZm9yIChFbGVtZW50KiBlbGVtZW50ID0gRWxlbWVu
dFRyYXZlcnNhbDo6Zmlyc3RXaXRoaW4odGhpcyk7IGVsZW1lbnQ7IGVsZW1lbnQgPSBFbGVtZW50
VHJhdmVyc2FsOjpuZXh0U2libGluZyhlbGVtZW50KSkgeworICAgICAgICBpZiAoZWxlbWVudC0+
aGFzVGFnTmFtZSh0cmFja1RhZykpIHsKICAgICAgICAgICAgIHNjaGVkdWxlRGVsYXllZEFjdGlv
bihDb25maWd1cmVUZXh0VHJhY2tzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcAkocmV2aXNpb24g
MTUzOTM5KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ2Niw3ICs0NjYsNyBAQCBib29sIEhUTUxPYmplY3RFbGVtZW50Ojpj
b250YWluc0phdmFBcHBsCiAgICAgaWYgKE1JTUVUeXBlUmVnaXN0cnk6OmlzSmF2YUFwcGxldE1J
TUVUeXBlKGdldEF0dHJpYnV0ZSh0eXBlQXR0cikpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgCi0gICAgZm9yIChFbGVtZW50KiBjaGlsZCA9IEVsZW1lbnRUcmF2ZXJzYWw6OmZpcnN0
V2l0aGluKHRoaXMpOyBjaGlsZDsgY2hpbGQgPSBFbGVtZW50VHJhdmVyc2FsOjpuZXh0U2tpcHBp
bmdDaGlsZHJlbihjaGlsZCwgdGhpcykpIHsKKyAgICBmb3IgKEVsZW1lbnQqIGNoaWxkID0gRWxl
bWVudFRyYXZlcnNhbDo6Zmlyc3RXaXRoaW4odGhpcyk7IGNoaWxkOyBjaGlsZCA9IEVsZW1lbnRU
cmF2ZXJzYWw6Om5leHRTaWJsaW5nKGNoaWxkKSkgewogICAgICAgICBpZiAoY2hpbGQtPmhhc1Rh
Z05hbWUocGFyYW1UYWcpCiAgICAgICAgICAgICAgICAgJiYgZXF1YWxJZ25vcmluZ0Nhc2UoY2hp
bGQtPmdldE5hbWVBdHRyaWJ1dGUoKSwgInR5cGUiKQogICAgICAgICAgICAgICAgICYmIE1JTUVU
eXBlUmVnaXN0cnk6OmlzSmF2YUFwcGxldE1JTUVUeXBlKGNoaWxkLT5nZXRBdHRyaWJ1dGUodmFs
dWVBdHRyKS5zdHJpbmcoKSkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmlsdGVy
RWZmZWN0UmVuZGVyZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAJKHJldmlzaW9uIDE1MzkzOCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMxLDYgKzMxLDcgQEAKIAogI2luY2x1ZGUgIkNvbG9yU3BhY2UuaCIKICNpbmNsdWRlICJE
b2N1bWVudC5oIgorI2luY2x1ZGUgIkVsZW1lbnRUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJGRUNv
bG9yTWF0cml4LmgiCiAjaW5jbHVkZSAiRkVDb21wb25lbnRUcmFuc2Zlci5oIgogI2luY2x1ZGUg
IkZFRHJvcFNoYWRvdy5oIgpAQCAtMTU5LDE1ICsxNjAsMTMgQEAgUGFzc1JlZlB0cjxGaWx0ZXJF
ZmZlY3Q+IEZpbHRlckVmZmVjdFJlbgogICAgIC8vIFRoaXMgbWF5IG5lZWQgYSBzcGVjIGNsYXJp
ZmljYXRpb24uCiAgICAgUmVmUHRyPFNWR0ZpbHRlckJ1aWxkZXI+IGJ1aWxkZXIgPSBTVkdGaWx0
ZXJCdWlsZGVyOjpjcmVhdGUocHJldmlvdXNFZmZlY3QsIFNvdXJjZUFscGhhOjpjcmVhdGUodGhp
cykpOwogCi0gICAgZm9yIChOb2RlKiBub2RlID0gZmlsdGVyLT5maXJzdENoaWxkKCk7IG5vZGU7
IG5vZGUgPSBub2RlLT5uZXh0U2libGluZygpKSB7Ci0gICAgICAgIGlmICghbm9kZS0+aXNTVkdF
bGVtZW50KCkpCisgICAgZm9yIChFbGVtZW50KiBlbGVtZW50ID0gRWxlbWVudFRyYXZlcnNhbDo6
Zmlyc3RXaXRoaW4oZmlsdGVyKTsgZWxlbWVudDsgZWxlbWVudCA9IEVsZW1lbnRUcmF2ZXJzYWw6
Om5leHRTaWJsaW5nKGVsZW1lbnQpKSB7CisgICAgICAgIGlmICghZWxlbWVudC0+aXNTVkdFbGVt
ZW50KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBTVkdFbGVtZW50KiBlbGVt
ZW50ID0gdG9TVkdFbGVtZW50KG5vZGUpOwotICAgICAgICBpZiAoIWVsZW1lbnQtPmlzRmlsdGVy
RWZmZWN0KCkpCisgICAgICAgIFNWR0VsZW1lbnQqIHN2Z0VsZW1lbnQgPSB0b1NWR0VsZW1lbnQo
ZWxlbWVudCk7CisgICAgICAgIGlmICghc3ZnRWxlbWVudC0+aXNGaWx0ZXJFZmZlY3QoKSkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJk
QXR0cmlidXRlcyogZWZmZWN0RWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0ZpbHRlclByaW1pdGl2
ZVN0YW5kYXJkQXR0cmlidXRlcyo+KGVsZW1lbnQpOworICAgICAgICBTVkdGaWx0ZXJQcmltaXRp
dmVTdGFuZGFyZEF0dHJpYnV0ZXMqIGVmZmVjdEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdGaWx0
ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMqPihzdmdFbGVtZW50KTsKIAogICAgICAgICBl
ZmZlY3QgPSBlZmZlY3RFbGVtZW50LT5idWlsZChidWlsZGVyLmdldCgpLCB0aGlzKTsKICAgICAg
ICAgaWYgKCFlZmZlY3QpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVU
cmVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVU
cmVlLmNwcAkocmV2aXNpb24gMTUzOTM4KQorKysgU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVS
ZXNvbHZlVHJlZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1
ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJFbGVtZW50UmFyZURhdGEuaCIKKyNpbmNsdWRlICJF
bGVtZW50VHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiTm9kZVJlbmRlclN0eWxlLmgiCiAjaW5jbHVk
ZSAiTm9kZVRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgpAQCAtMjkzLDEy
ICsyOTQsMTAgQEAgdm9pZCByZXNvbHZlVHJlZShEb2N1bWVudCogZG9jdW1lbnQsIENoYQogICAg
ICAgICAgICAgZG9jdW1lbnQtPnJlbmRlcmVyKCktPnNldFN0eWxlKGRvY3VtZW50U3R5bGUucmVs
ZWFzZSgpKTsKICAgICB9CiAKLSAgICBmb3IgKE5vZGUqIGNoaWxkID0gZG9jdW1lbnQtPmZpcnN0
Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAg
aWYgKCFjaGlsZC0+aXNFbGVtZW50Tm9kZSgpKQorICAgIGZvciAoRWxlbWVudCogY2hpbGQgPSBF
bGVtZW50VHJhdmVyc2FsOjpmaXJzdFdpdGhpbihkb2N1bWVudCk7IGNoaWxkOyBjaGlsZCA9IEVs
ZW1lbnRUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKGNoaWxkKSkgeworICAgICAgICBpZiAoY2hhbmdl
IDwgSW5oZXJpdCAmJiAhY2hpbGQtPmNoaWxkTmVlZHNTdHlsZVJlY2FsYygpICYmICFjaGlsZC0+
bmVlZHNTdHlsZVJlY2FsYygpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIEVsZW1l
bnQqIGVsZW1lbnRDaGlsZCA9IHRvRWxlbWVudChjaGlsZCk7Ci0gICAgICAgIGlmIChjaGFuZ2Ug
Pj0gSW5oZXJpdCB8fCBlbGVtZW50Q2hpbGQtPmNoaWxkTmVlZHNTdHlsZVJlY2FsYygpIHx8IGVs
ZW1lbnRDaGlsZC0+bmVlZHNTdHlsZVJlY2FsYygpKQotICAgICAgICAgICAgcmVzb2x2ZVRyZWUo
ZWxlbWVudENoaWxkLCBjaGFuZ2UpOworICAgICAgICByZXNvbHZlVHJlZShjaGlsZCwgY2hhbmdl
KTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHlsZWRFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVkRWxlbWVudC5j
cHAJKHJldmlzaW9uIDE1MzkzOSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHlsZWRFbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDcgKzEwMiw3IEBAIFN0cmluZyBTVkdTdHls
ZWRFbGVtZW50Ojp0aXRsZSgpIGNvbnN0CiAgICAgLy8gSWYgd2UgYXJlbid0IGFuIGluc3RhbmNl
IGluIGEgPHVzZT4gb3IgdGhlIDx1c2U+IHRpdGxlIHdhcyBub3QgZm91bmQsIHRoZW4gZmluZCB0
aGUgZmlyc3QKICAgICAvLyA8dGl0bGU+IGNoaWxkIG9mIHRoaXMgZWxlbWVudC4KICAgICBFbGVt
ZW50KiB0aXRsZUVsZW1lbnQgPSBFbGVtZW50VHJhdmVyc2FsOjpmaXJzdFdpdGhpbih0aGlzKTsK
LSAgICBmb3IgKDsgdGl0bGVFbGVtZW50OyB0aXRsZUVsZW1lbnQgPSBFbGVtZW50VHJhdmVyc2Fs
OjpuZXh0U2tpcHBpbmdDaGlsZHJlbih0aXRsZUVsZW1lbnQsIHRoaXMpKSB7CisgICAgZm9yICg7
IHRpdGxlRWxlbWVudDsgdGl0bGVFbGVtZW50ID0gRWxlbWVudFRyYXZlcnNhbDo6bmV4dFNpYmxp
bmcodGl0bGVFbGVtZW50KSkgewogICAgICAgICBpZiAodGl0bGVFbGVtZW50LT5oYXNUYWdOYW1l
KFNWR05hbWVzOjp0aXRsZVRhZykgJiYgdGl0bGVFbGVtZW50LT5pc1NWR0VsZW1lbnQoKSkKICAg
ICAgICAgICAgIGJyZWFrOwogICAgIH0K
</data>
<flag name="review"
          id="230446"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>