<?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>30274</bug_id>
          
          <creation_ts>2009-10-10 02:27:09 -0700</creation_ts>
          <short_desc>HistoryController should point back to FrameLoader not Frame</short_desc>
          <delta_ts>2009-10-14 21:26:51 -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>Page Loading</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WORKSFORME</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>29947</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>eric</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>153856</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-10-10 02:27:09 -0700</bug_when>
    <thetext>Eric thinks HistoryController should point back to FrameLoader instead of Frame.  I&apos;m not entirely convinced, but I made a patch to see what it would be like.  If he thinks we should do this, I&apos;ll defer to his experience.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153857</commentid>
    <comment_count>1</comment_count>
      <attachid>40987</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-10-10 02:28:54 -0700</bug_when>
    <thetext>Created attachment 40987
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153859</commentid>
    <comment_count>2</comment_count>
      <attachid>40988</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-10-10 02:42:08 -0700</bug_when>
    <thetext>Created attachment 40988
HistoryController back pointer</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153973</commentid>
    <comment_count>3</comment_count>
      <attachid>40988</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-10-11 20:28:40 -0700</bug_when>
    <thetext>Comment on attachment 40988
HistoryController back pointer

I think this is OK either way.

Pointing back to the frame is OK because everybody points back to the frame. It&apos;s all one big frame-lifetime-associated family of objects.

Pointing back to the frame loader is OK because the frame loader is the immediate owner of the history controller, and it&apos;s the thing the creates and destroys the history controller.

I have a hard time getting strong feelings either way.

The part I don&apos;t like is functions that are only needed once per page on the main frame that exist here on a pre-frame object.

r=me, and you can decide whether or not to land this. I really have no preference.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>154704</commentid>
    <comment_count>4</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-10-14 21:26:51 -0700</bug_when>
    <thetext>I think I&apos;m going to leave this as-is.  Thanks for your comments.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>40987</attachid>
            <date>2009-10-10 02:28:54 -0700</date>
            <delta_ts>2009-10-10 02:42:01 -0700</delta_ts>
            <desc>Patch v1</desc>
            <filename>bug-30274-20091010022853.patch</filename>
            <type>text/plain</type>
            <size>30273</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZTExZGQzOC4uZjU5NWMxNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MCBAQAorMjAwOS0xMC0xMSAgQWRhbSBCYXJ0aCAg
PGFiYXJ0aEB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEhpc3RvcnlDb250cm9sbGVyIHNob3VsZCBwb2ludCBiYWNrIHRvIEZyYW1l
TG9hZGVyIG5vdCBGcmFtZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MzAyNzQKKworICAgICAgICBIaXN0b3J5Q29udHJvbGxlciBpcyBhICJzdWJjb250
cm9sbGVyIiBvZiBGcmFtZUxvYWRlci4gIEluc3RlYWQgb2YKKyAgICAgICAgcG9pbnRpbmcgYmFj
ayBkaXJlY3RseSB0byBGcmFtZSwgSGlzdG9yeUNvbnRyb2xsZXIgc2hvdWxkIGhvbGQgYSBiYWNr
CisgICAgICAgIHBvaW50ZXIgdG8gRnJhbWVMb2FkZXIuCisKKyAgICAgICAgKiBsb2FkZXIvRnJh
bWVMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OkZyYW1lTG9hZGVy
KToKKyAgICAgICAgKiBsb2FkZXIvSGlzdG9yeUNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SGlzdG9yeUNvbnRyb2xsZXI6Okhpc3RvcnlDb250cm9sbGVyKToKKyAgICAgICAgKFdl
YkNvcmU6Okhpc3RvcnlDb250cm9sbGVyOjpzYXZlU2Nyb2xsUG9zaXRpb25BbmRWaWV3U3RhdGVU
b0l0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6SGlzdG9yeUNvbnRyb2xsZXI6OnJlc3RvcmVTY3Jv
bGxQb3NpdGlvbkFuZFZpZXdTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIaXN0b3J5Q29udHJv
bGxlcjo6c2F2ZURvY3VtZW50U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SGlzdG9yeUNvbnRy
b2xsZXI6OnNhdmVEb2N1bWVudEFuZFNjcm9sbFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okhp
c3RvcnlDb250cm9sbGVyOjpyZXN0b3JlRG9jdW1lbnRTdGF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpIaXN0b3J5Q29udHJvbGxlcjo6aW52YWxpZGF0ZUN1cnJlbnRJdGVtQ2FjaGVkUGFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpIaXN0b3J5Q29udHJvbGxlcjo6Z29Ub0l0ZW0pOgorICAgICAgICAo
V2ViQ29yZTo6SGlzdG9yeUNvbnRyb2xsZXI6OnVybHNNYXRjaEl0ZW0pOgorICAgICAgICAoV2Vi
Q29yZTo6SGlzdG9yeUNvbnRyb2xsZXI6OnVwZGF0ZUZvckJhY2tGb3J3YXJkTmF2aWdhdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpIaXN0b3J5Q29udHJvbGxlcjo6dXBkYXRlRm9yUmVsb2FkKToK
KyAgICAgICAgKFdlYkNvcmU6Okhpc3RvcnlDb250cm9sbGVyOjp1cGRhdGVGb3JTdGFuZGFyZExv
YWQpOgorICAgICAgICAoV2ViQ29yZTo6SGlzdG9yeUNvbnRyb2xsZXI6OnVwZGF0ZUZvclJlZGly
ZWN0V2l0aExvY2tlZEJhY2tGb3J3YXJkTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpIaXN0b3J5
Q29udHJvbGxlcjo6dXBkYXRlRm9yQ2xpZW50UmVkaXJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
SGlzdG9yeUNvbnRyb2xsZXI6OnVwZGF0ZUZvckNvbW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpI
aXN0b3J5Q29udHJvbGxlcjo6dXBkYXRlRm9yQW5jaG9yU2Nyb2xsKToKKyAgICAgICAgKFdlYkNv
cmU6Okhpc3RvcnlDb250cm9sbGVyOjpjcmVhdGVJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6Okhp
c3RvcnlDb250cm9sbGVyOjpjcmVhdGVJdGVtVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpIaXN0
b3J5Q29udHJvbGxlcjo6cmVjdXJzaXZlR29Ub0l0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6SGlz
dG9yeUNvbnRyb2xsZXI6OmNoaWxkRnJhbWVzTWF0Y2hJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6
Okhpc3RvcnlDb250cm9sbGVyOjp1cGRhdGVCYWNrRm9yd2FyZExpc3RDbGlwcGVkQXRUYXJnZXQp
OgorICAgICAgICAqIGxvYWRlci9IaXN0b3J5Q29udHJvbGxlci5oOgorCiAyMDA5LTEwLTEwICBB
ZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgT2xp
dmVyIEh1bnQuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAgYi9X
ZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKaW5kZXggNTk5MjhlNC4uOWNjMTlkNyAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCisrKyBiL1dlYkNvcmUvbG9h
ZGVyL0ZyYW1lTG9hZGVyLmNwcApAQCAtMTY3LDcgKzE2Nyw3IEBAIEZyYW1lTG9hZGVyOjpGcmFt
ZUxvYWRlcihGcmFtZSogZnJhbWUsIEZyYW1lTG9hZGVyQ2xpZW50KiBjbGllbnQpCiAgICAgOiBt
X2ZyYW1lKGZyYW1lKQogICAgICwgbV9jbGllbnQoY2xpZW50KQogICAgICwgbV9wb2xpY3lDaGVj
a2VyKGZyYW1lKQotICAgICwgbV9oaXN0b3J5KGZyYW1lKQorICAgICwgbV9oaXN0b3J5KHRoaXMp
CiAgICAgLCBtX3N0YXRlKEZyYW1lU3RhdGVDb21taXR0ZWRQYWdlKQogICAgICwgbV9sb2FkVHlw
ZShGcmFtZUxvYWRUeXBlU3RhbmRhcmQpCiAgICAgLCBtX2RlbGVnYXRlSXNIYW5kbGluZ1Byb3Zp
c2lvbmFsTG9hZEVycm9yKGZhbHNlKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9sb2FkZXIvSGlzdG9y
eUNvbnRyb2xsZXIuY3BwIGIvV2ViQ29yZS9sb2FkZXIvSGlzdG9yeUNvbnRyb2xsZXIuY3BwCmlu
ZGV4IDUwMTY0MGEuLmRkYzI0YTEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvbG9hZGVyL0hpc3RvcnlD
b250cm9sbGVyLmNwcAorKysgYi9XZWJDb3JlL2xvYWRlci9IaXN0b3J5Q29udHJvbGxlci5jcHAK
QEAgLTQ4LDggKzQ4LDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1IaXN0b3J5Q29udHJv
bGxlcjo6SGlzdG9yeUNvbnRyb2xsZXIoRnJhbWUqIGZyYW1lKQotICAgIDogbV9mcmFtZShmcmFt
ZSkKK0hpc3RvcnlDb250cm9sbGVyOjpIaXN0b3J5Q29udHJvbGxlcihGcmFtZUxvYWRlciogZnJh
bWVMb2FkZXIpCisgICAgOiBtX2ZyYW1lTG9hZGVyKGZyYW1lTG9hZGVyKQogewogfQogCkBAIC01
OSwxMiArNTksMTIgQEAgSGlzdG9yeUNvbnRyb2xsZXI6On5IaXN0b3J5Q29udHJvbGxlcigpCiAK
IHZvaWQgSGlzdG9yeUNvbnRyb2xsZXI6OnNhdmVTY3JvbGxQb3NpdGlvbkFuZFZpZXdTdGF0ZVRv
SXRlbShIaXN0b3J5SXRlbSogaXRlbSkKIHsKLSAgICBpZiAoIWl0ZW0gfHwgIW1fZnJhbWUtPnZp
ZXcoKSkKKyAgICBpZiAoIWl0ZW0gfHwgIW1fZnJhbWVMb2FkZXItPmZyYW1lKCktPnZpZXcoKSkK
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICBpdGVtLT5zZXRTY3JvbGxQb2ludChtX2Zy
YW1lLT52aWV3KCktPnNjcm9sbFBvc2l0aW9uKCkpOworICAgIGl0ZW0tPnNldFNjcm9sbFBvaW50
KG1fZnJhbWVMb2FkZXItPmZyYW1lKCktPnZpZXcoKS0+c2Nyb2xsUG9zaXRpb24oKSk7CiAgICAg
Ly8gRklYTUU6IEl0IHdvdWxkIGJlIGdyZWF0IHRvIHdvcmsgb3V0IGEgd2F5IHRvIHB1dCB0aGlz
IGNvZGUgaW4gV2ViQ29yZSBpbnN0ZWFkIG9mIGNhbGxpbmcgdGhyb3VnaCB0byB0aGUgY2xpZW50
LgotICAgIG1fZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+c2F2ZVZpZXdTdGF0ZVRvSXRlbShp
dGVtKTsKKyAgICBtX2ZyYW1lTG9hZGVyLT5jbGllbnQoKS0+c2F2ZVZpZXdTdGF0ZVRvSXRlbShp
dGVtKTsKIH0KIAogLyoKQEAgLTgwLDcgKzgwLDcgQEAgdm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6
c2F2ZVNjcm9sbFBvc2l0aW9uQW5kVmlld1N0YXRlVG9JdGVtKEhpc3RvcnlJdGVtKiBpdGVtKQog
Ki8KIHZvaWQgSGlzdG9yeUNvbnRyb2xsZXI6OnJlc3RvcmVTY3JvbGxQb3NpdGlvbkFuZFZpZXdT
dGF0ZSgpCiB7Ci0gICAgaWYgKCFtX2ZyYW1lLT5sb2FkZXIoKS0+Y29tbWl0dGVkRmlyc3RSZWFs
RG9jdW1lbnRMb2FkKCkpCisgICAgaWYgKCFtX2ZyYW1lTG9hZGVyLT5jb21taXR0ZWRGaXJzdFJl
YWxEb2N1bWVudExvYWQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQVNTRVJUKG1fY3VycmVu
dEl0ZW0pOwpAQCAtOTUsOSArOTUsOSBAQCB2b2lkIEhpc3RvcnlDb250cm9sbGVyOjpyZXN0b3Jl
U2Nyb2xsUG9zaXRpb25BbmRWaWV3U3RhdGUoKQogICAgIAogICAgIC8vIEZJWE1FOiBJdCB3b3Vs
ZCBiZSBncmVhdCB0byB3b3JrIG91dCBhIHdheSB0byBwdXQgdGhpcyBjb2RlIGluIFdlYkNvcmUg
aW5zdGVhZCBvZiBjYWxsaW5nCiAgICAgLy8gdGhyb3VnaCB0byB0aGUgY2xpZW50LiBJdCdzIGN1
cnJlbnRseSB1c2VkIG9ubHkgZm9yIHRoZSBQREYgdmlldyBvbiBNYWMuCi0gICAgbV9mcmFtZS0+
bG9hZGVyKCktPmNsaWVudCgpLT5yZXN0b3JlVmlld1N0YXRlKCk7CisgICAgbV9mcmFtZUxvYWRl
ci0+Y2xpZW50KCktPnJlc3RvcmVWaWV3U3RhdGUoKTsKICAgICAKLSAgICBpZiAoRnJhbWVWaWV3
KiB2aWV3ID0gbV9mcmFtZS0+dmlldygpKQorICAgIGlmIChGcmFtZVZpZXcqIHZpZXcgPSBtX2Zy
YW1lTG9hZGVyLT5mcmFtZSgpLT52aWV3KCkpCiAgICAgICAgIGlmICghdmlldy0+d2FzU2Nyb2xs
ZWRCeVVzZXIoKSkKICAgICAgICAgICAgIHZpZXctPnNldFNjcm9sbFBvc2l0aW9uKG1fY3VycmVu
dEl0ZW0tPnNjcm9sbFBvaW50KCkpOwogfQpAQCAtMTExLDcgKzExMSw3IEBAIHZvaWQgSGlzdG9y
eUNvbnRyb2xsZXI6OnNhdmVEb2N1bWVudFN0YXRlKCkKIHsKICAgICAvLyBGSVhNRTogUmVhZGlu
ZyB0aGlzIGJpdCBvZiBGcmFtZUxvYWRlciBzdGF0ZSBoZXJlIGlzIHVuZm9ydHVuYXRlLiAgSSBu
ZWVkIHRvIHN0dWR5CiAgICAgLy8gdGhpcyBtb3JlIHRvIHNlZSBpZiB3ZSBjYW4gcmVtb3ZlIHRo
aXMgZGVwZW5kZW5jeS4KLSAgICBpZiAobV9mcmFtZS0+bG9hZGVyKCktPmNyZWF0aW5nSW5pdGlh
bEVtcHR5RG9jdW1lbnQoKSkKKyAgICBpZiAobV9mcmFtZUxvYWRlci0+Y3JlYXRpbmdJbml0aWFs
RW1wdHlEb2N1bWVudCgpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBGb3IgYSBzdGFuZGFy
ZCBwYWdlIGxvYWQsIHdlIHdpbGwgaGF2ZSBhIHByZXZpb3VzIGl0ZW0gc2V0LCB3aGljaCB3aWxs
IGJlIHVzZWQgdG8KQEAgLTEyOSwxMSArMTI5LDExIEBAIHZvaWQgSGlzdG9yeUNvbnRyb2xsZXI6
OnNhdmVEb2N1bWVudFN0YXRlKCkKICAgICBpZiAoIWl0ZW0pCiAgICAgICAgIHJldHVybjsKIAot
ICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fZnJhbWUtPmRvY3VtZW50KCk7CisgICAgRG9jdW1l
bnQqIGRvY3VtZW50ID0gbV9mcmFtZUxvYWRlci0+ZnJhbWUoKS0+ZG9jdW1lbnQoKTsKICAgICBB
U1NFUlQoZG9jdW1lbnQpOwogICAgIAogICAgIGlmIChpdGVtLT5pc0N1cnJlbnREb2N1bWVudChk
b2N1bWVudCkpIHsKLSAgICAgICAgTE9HKExvYWRpbmcsICJXZWJDb3JlTG9hZGluZyAlczogc2F2
aW5nIGZvcm0gc3RhdGUgdG8gJXAiLCBtX2ZyYW1lLT50cmVlKCktPm5hbWUoKS5zdHJpbmcoKS51
dGY4KCkuZGF0YSgpLCBpdGVtKTsKKyAgICAgICAgTE9HKExvYWRpbmcsICJXZWJDb3JlTG9hZGlu
ZyAlczogc2F2aW5nIGZvcm0gc3RhdGUgdG8gJXAiLCBtX2ZyYW1lTG9hZGVyLT5mcmFtZSgpLT50
cmVlKCktPm5hbWUoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBpdGVtKTsKICAgICAgICAgaXRl
bS0+c2V0RG9jdW1lbnRTdGF0ZShkb2N1bWVudC0+Zm9ybUVsZW1lbnRzU3RhdGUoKSk7CiAgICAg
fQogfQpAQCAtMTQyLDcgKzE0Miw3IEBAIHZvaWQgSGlzdG9yeUNvbnRyb2xsZXI6OnNhdmVEb2N1
bWVudFN0YXRlKCkKIC8vIGhpc3RvcnkgaXRlbS4KIHZvaWQgSGlzdG9yeUNvbnRyb2xsZXI6OnNh
dmVEb2N1bWVudEFuZFNjcm9sbFN0YXRlKCkKIHsKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IG1f
ZnJhbWU7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnRyYXZlcnNlTmV4dChtX2ZyYW1l
KSkgeworICAgIGZvciAoRnJhbWUqIGZyYW1lID0gbV9mcmFtZUxvYWRlci0+ZnJhbWUoKTsgZnJh
bWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+dHJhdmVyc2VOZXh0KG1fZnJhbWUpKSB7CiAgICAg
ICAgIGZyYW1lLT5sb2FkZXIoKS0+aGlzdG9yeSgpLT5zYXZlRG9jdW1lbnRTdGF0ZSgpOwogICAg
ICAgICBmcmFtZS0+bG9hZGVyKCktPmhpc3RvcnkoKS0+c2F2ZVNjcm9sbFBvc2l0aW9uQW5kVmll
d1N0YXRlVG9JdGVtKGZyYW1lLT5sb2FkZXIoKS0+aGlzdG9yeSgpLT5jdXJyZW50SXRlbSgpKTsK
ICAgICB9CkBAIC0xNTAsMTEgKzE1MCwxMSBAQCB2b2lkIEhpc3RvcnlDb250cm9sbGVyOjpzYXZl
RG9jdW1lbnRBbmRTY3JvbGxTdGF0ZSgpCiAKIHZvaWQgSGlzdG9yeUNvbnRyb2xsZXI6OnJlc3Rv
cmVEb2N1bWVudFN0YXRlKCkKIHsKLSAgICBEb2N1bWVudCogZG9jID0gbV9mcmFtZS0+ZG9jdW1l
bnQoKTsKKyAgICBEb2N1bWVudCogZG9jID0gbV9mcmFtZUxvYWRlci0+ZnJhbWUoKS0+ZG9jdW1l
bnQoKTsKICAgICAgICAgCiAgICAgSGlzdG9yeUl0ZW0qIGl0ZW1Ub1Jlc3RvcmUgPSAwOwogICAg
IAotICAgIHN3aXRjaCAobV9mcmFtZS0+bG9hZGVyKCktPmxvYWRUeXBlKCkpIHsKKyAgICBzd2l0
Y2ggKG1fZnJhbWVMb2FkZXItPmxvYWRUeXBlKCkpIHsKICAgICAgICAgY2FzZSBGcmFtZUxvYWRU
eXBlUmVsb2FkOgogICAgICAgICBjYXNlIEZyYW1lTG9hZFR5cGVSZWxvYWRGcm9tT3JpZ2luOgog
ICAgICAgICBjYXNlIEZyYW1lTG9hZFR5cGVTYW1lOgpAQCAtMTcyLDcgKzE3Miw3IEBAIHZvaWQg
SGlzdG9yeUNvbnRyb2xsZXI6OnJlc3RvcmVEb2N1bWVudFN0YXRlKCkKICAgICBpZiAoIWl0ZW1U
b1Jlc3RvcmUpCiAgICAgICAgIHJldHVybjsKIAotICAgIExPRyhMb2FkaW5nLCAiV2ViQ29yZUxv
YWRpbmcgJXM6IHJlc3RvcmluZyBmb3JtIHN0YXRlIGZyb20gJXAiLCBtX2ZyYW1lLT50cmVlKCkt
Pm5hbWUoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBpdGVtVG9SZXN0b3JlKTsKKyAgICBMT0co
TG9hZGluZywgIldlYkNvcmVMb2FkaW5nICVzOiByZXN0b3JpbmcgZm9ybSBzdGF0ZSBmcm9tICVw
IiwgbV9mcmFtZUxvYWRlci0+ZnJhbWUoKS0+dHJlZSgpLT5uYW1lKCkuc3RyaW5nKCkudXRmOCgp
LmRhdGEoKSwgaXRlbVRvUmVzdG9yZSk7CiAgICAgZG9jLT5zZXRTdGF0ZUZvck5ld0Zvcm1FbGVt
ZW50cyhpdGVtVG9SZXN0b3JlLT5kb2N1bWVudFN0YXRlKCkpOwogfQogCkBAIC0xODUsOCArMTg1
LDggQEAgdm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6aW52YWxpZGF0ZUN1cnJlbnRJdGVtQ2FjaGVk
UGFnZSgpCiAgICAgLy8gU29tZWhvdyB0aGUgUGFnZVN0YXRlIG9iamVjdCBpcyBub3QgcHJvcGVy
bHkgdXBkYXRlZCwgYW5kIGlzIGhvbGRpbmcgb250byBhIHN0YWxlIGRvY3VtZW50LgogICAgIC8v
IEJvdGggWGNvZGUgYW5kIEZpbGVNYWtlciBzZWUgdGhpcyBjcmFzaCwgU2FmYXJpIGRvZXMgbm90
LgogICAgIAotICAgIEFTU0VSVCghY2FjaGVkUGFnZSB8fCBjYWNoZWRQYWdlLT5kb2N1bWVudCgp
ID09IG1fZnJhbWUtPmRvY3VtZW50KCkpOwotICAgIGlmIChjYWNoZWRQYWdlICYmIGNhY2hlZFBh
Z2UtPmRvY3VtZW50KCkgPT0gbV9mcmFtZS0+ZG9jdW1lbnQoKSkgeworICAgIEFTU0VSVCghY2Fj
aGVkUGFnZSB8fCBjYWNoZWRQYWdlLT5kb2N1bWVudCgpID09IG1fZnJhbWVMb2FkZXItPmZyYW1l
KCktPmRvY3VtZW50KCkpOworICAgIGlmIChjYWNoZWRQYWdlICYmIGNhY2hlZFBhZ2UtPmRvY3Vt
ZW50KCkgPT0gbV9mcmFtZUxvYWRlci0+ZnJhbWUoKS0+ZG9jdW1lbnQoKSkgewogICAgICAgICBj
YWNoZWRQYWdlLT5kb2N1bWVudCgpLT5zZXRJblBhZ2VDYWNoZShmYWxzZSk7CiAgICAgICAgIGNh
Y2hlZFBhZ2UtPmNsZWFyKCk7CiAgICAgfQpAQCAtMTk5LDE2ICsxOTksMTYgQEAgdm9pZCBIaXN0
b3J5Q29udHJvbGxlcjo6aW52YWxpZGF0ZUN1cnJlbnRJdGVtQ2FjaGVkUGFnZSgpCiAvLyBUaGlz
IGluY2x1ZGVzIHJlY3Vyc2lvbiB0byBoYW5kbGUgbG9hZGluZyBpbnRvIGZyYW1lc2V0cyBwcm9w
ZXJseQogdm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6Z29Ub0l0ZW0oSGlzdG9yeUl0ZW0qIHRhcmdl
dEl0ZW0sIEZyYW1lTG9hZFR5cGUgdHlwZSkKIHsKLSAgICBBU1NFUlQoIW1fZnJhbWUtPnRyZWUo
KS0+cGFyZW50KCkpOworICAgIEFTU0VSVCghbV9mcmFtZUxvYWRlci0+ZnJhbWUoKS0+dHJlZSgp
LT5wYXJlbnQoKSk7CiAgICAgCiAgICAgLy8gc2hvdWxkR29Ub0hpc3RvcnlJdGVtIGlzIGEgcHJp
dmF0ZSBkZWxlZ2F0ZSBtZXRob2QuIFRoaXMgaXMgbmVlZGVkIHRvIGZpeDoKICAgICAvLyA8cmRh
cjovL3Byb2JsZW0vMzk1MTI4Mz4gY2FuIHZpZXcgcGFnZXMgZnJvbSB0aGUgYmFjay9mb3J3YXJk
IGNhY2hlIHRoYXQgc2hvdWxkIGJlIGRpc2FsbG93ZWQgYnkgUGFyZW50YWwgQ29udHJvbHMKICAg
ICAvLyBVbHRpbWF0ZWx5LCBoaXN0b3J5IGl0ZW0gbmF2aWdhdGlvbnMgc2hvdWxkIGdvIHRocm91
Z2ggdGhlIHBvbGljeSBkZWxlZ2F0ZS4gVGhhdCdzIGNvdmVyZWQgaW46CiAgICAgLy8gPHJkYXI6
Ly9wcm9ibGVtLzM5Nzk1Mzk+IGJhY2svZm9yd2FyZCBjYWNoZSBuYXZpZ2F0aW9ucyBzaG91bGQg
Y29uc3VsdCBwb2xpY3kgZGVsZWdhdGUKLSAgICBQYWdlKiBwYWdlID0gbV9mcmFtZS0+cGFnZSgp
OworICAgIFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lTG9hZGVyLT5mcmFtZSgpLT5wYWdlKCk7CiAgICAg
aWYgKCFwYWdlKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFtX2ZyYW1lLT5sb2FkZXIoKS0+
Y2xpZW50KCktPnNob3VsZEdvVG9IaXN0b3J5SXRlbSh0YXJnZXRJdGVtKSkKKyAgICBpZiAoIW1f
ZnJhbWVMb2FkZXItPmNsaWVudCgpLT5zaG91bGRHb1RvSGlzdG9yeUl0ZW0odGFyZ2V0SXRlbSkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFNldCB0aGUgQkYgY3Vyc29yIGJlZm9yZSBjb21t
aXQsIHdoaWNoIGxldHMgdGhlIHVzZXIgcXVpY2tseSBjbGljayBiYWNrL2ZvcndhcmQgYWdhaW4u
CkBAIC0yMTcsNyArMjE3LDcgQEAgdm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6Z29Ub0l0ZW0oSGlz
dG9yeUl0ZW0qIHRhcmdldEl0ZW0sIEZyYW1lTG9hZFR5cGUgdHlwZSkKICAgICBCYWNrRm9yd2Fy
ZExpc3QqIGJmTGlzdCA9IHBhZ2UtPmJhY2tGb3J3YXJkTGlzdCgpOwogICAgIEhpc3RvcnlJdGVt
KiBjdXJyZW50SXRlbSA9IGJmTGlzdC0+Y3VycmVudEl0ZW0oKTsgICAgCiAgICAgYmZMaXN0LT5n
b1RvSXRlbSh0YXJnZXRJdGVtKTsKLSAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBtX2ZyYW1lLT5z
ZXR0aW5ncygpOworICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IG1fZnJhbWVMb2FkZXItPmZyYW1l
KCktPnNldHRpbmdzKCk7CiAgICAgcGFnZS0+c2V0R2xvYmFsSGlzdG9yeUl0ZW0oKCFzZXR0aW5n
cyB8fCBzZXR0aW5ncy0+cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpKSA/IDAgOiB0YXJnZXRJdGVt
KTsKICAgICByZWN1cnNpdmVHb1RvSXRlbSh0YXJnZXRJdGVtLCBjdXJyZW50SXRlbSwgdHlwZSk7
CiB9CkBAIC0yMjUsNyArMjI1LDcgQEAgdm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6Z29Ub0l0ZW0o
SGlzdG9yeUl0ZW0qIHRhcmdldEl0ZW0sIEZyYW1lTG9hZFR5cGUgdHlwZSkKIC8vIFdhbGsgdGhl
IGZyYW1lIHRyZWUgYW5kIGVuc3VyZSB0aGF0IHRoZSBVUkxzIG1hdGNoIHRoZSBVUkxzIGluIHRo
ZSBpdGVtLgogYm9vbCBIaXN0b3J5Q29udHJvbGxlcjo6dXJsc01hdGNoSXRlbShIaXN0b3J5SXRl
bSogaXRlbSkgY29uc3QKIHsKLSAgICBjb25zdCBLVVJMJiBjdXJyZW50VVJMID0gbV9mcmFtZS0+
bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPnVybCgpOworICAgIGNvbnN0IEtVUkwmIGN1cnJl
bnRVUkwgPSBtX2ZyYW1lTG9hZGVyLT5kb2N1bWVudExvYWRlcigpLT51cmwoKTsKICAgICBpZiAo
IWVxdWFsSWdub3JpbmdGcmFnbWVudElkZW50aWZpZXIoY3VycmVudFVSTCwgaXRlbS0+dXJsKCkp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTIzMyw3ICsyMzMsNyBAQCBib29sIEhpc3Rv
cnlDb250cm9sbGVyOjp1cmxzTWF0Y2hJdGVtKEhpc3RvcnlJdGVtKiBpdGVtKSBjb25zdAogCiAg
ICAgdW5zaWduZWQgc2l6ZSA9IGNoaWxkSXRlbXMuc2l6ZSgpOwogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgRnJhbWUqIGNoaWxkRnJhbWUgPSBtX2Zy
YW1lLT50cmVlKCktPmNoaWxkKGNoaWxkSXRlbXNbaV0tPnRhcmdldCgpKTsKKyAgICAgICAgRnJh
bWUqIGNoaWxkRnJhbWUgPSBtX2ZyYW1lTG9hZGVyLT5mcmFtZSgpLT50cmVlKCktPmNoaWxkKGNo
aWxkSXRlbXNbaV0tPnRhcmdldCgpKTsKICAgICAgICAgaWYgKGNoaWxkRnJhbWUgJiYgIWNoaWxk
RnJhbWUtPmxvYWRlcigpLT5oaXN0b3J5KCktPnVybHNNYXRjaEl0ZW0oY2hpbGRJdGVtc1tpXS5n
ZXQoKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtMjQ0LDggKzI0NCw4
IEBAIGJvb2wgSGlzdG9yeUNvbnRyb2xsZXI6OnVybHNNYXRjaEl0ZW0oSGlzdG9yeUl0ZW0qIGl0
ZW0pIGNvbnN0CiB2b2lkIEhpc3RvcnlDb250cm9sbGVyOjp1cGRhdGVGb3JCYWNrRm9yd2FyZE5h
dmlnYXRpb24oKQogewogI2lmICFMT0dfRElTQUJMRUQKLSAgICBpZiAobV9mcmFtZS0+bG9hZGVy
KCktPmRvY3VtZW50TG9hZGVyKCkpCi0gICAgICAgIExPRyhIaXN0b3J5LCAiV2ViQ29yZUhpc3Rv
cnk6IFVwZGF0aW5nIEhpc3RvcnkgZm9yIGJhY2svZm9yd2FyZCBuYXZpZ2F0aW9uIGluIGZyYW1l
ICVzIiwgbV9mcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPnRpdGxlKCkudXRmOCgp
LmRhdGEoKSk7CisgICAgaWYgKG1fZnJhbWVMb2FkZXItPmRvY3VtZW50TG9hZGVyKCkpCisgICAg
ICAgIExPRyhIaXN0b3J5LCAiV2ViQ29yZUhpc3Rvcnk6IFVwZGF0aW5nIEhpc3RvcnkgZm9yIGJh
Y2svZm9yd2FyZCBuYXZpZ2F0aW9uIGluIGZyYW1lICVzIiwgbV9mcmFtZUxvYWRlci0+ZG9jdW1l
bnRMb2FkZXIoKS0+dGl0bGUoKS51dGY4KCkuZGF0YSgpKTsKICNlbmRpZgogCiAgICAgLy8gTXVz
dCBncmFiIHRoZSBjdXJyZW50IHNjcm9sbCBwb3NpdGlvbiBiZWZvcmUgZGlzdHVyYmluZyBpdApA
QCAtMjU1LDE5ICsyNTUsMTkgQEAgdm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6dXBkYXRlRm9yQmFj
a0ZvcndhcmROYXZpZ2F0aW9uKCkKIHZvaWQgSGlzdG9yeUNvbnRyb2xsZXI6OnVwZGF0ZUZvclJl
bG9hZCgpCiB7CiAjaWYgIUxPR19ESVNBQkxFRAotICAgIGlmIChtX2ZyYW1lLT5sb2FkZXIoKS0+
ZG9jdW1lbnRMb2FkZXIoKSkKLSAgICAgICAgTE9HKEhpc3RvcnksICJXZWJDb3JlSGlzdG9yeTog
VXBkYXRpbmcgSGlzdG9yeSBmb3IgcmVsb2FkIGluIGZyYW1lICVzIiwgbV9mcmFtZS0+bG9hZGVy
KCktPmRvY3VtZW50TG9hZGVyKCktPnRpdGxlKCkudXRmOCgpLmRhdGEoKSk7CisgICAgaWYgKG1f
ZnJhbWVMb2FkZXItPmRvY3VtZW50TG9hZGVyKCkpCisgICAgICAgIExPRyhIaXN0b3J5LCAiV2Vi
Q29yZUhpc3Rvcnk6IFVwZGF0aW5nIEhpc3RvcnkgZm9yIHJlbG9hZCBpbiBmcmFtZSAlcyIsIG1f
ZnJhbWVMb2FkZXItPmRvY3VtZW50TG9hZGVyKCktPnRpdGxlKCkudXRmOCgpLmRhdGEoKSk7CiAj
ZW5kaWYKIAogICAgIGlmIChtX2N1cnJlbnRJdGVtKSB7CiAgICAgICAgIHBhZ2VDYWNoZSgpLT5y
ZW1vdmUobV9jdXJyZW50SXRlbS5nZXQoKSk7CiAgICAgCi0gICAgICAgIGlmIChtX2ZyYW1lLT5s
b2FkZXIoKS0+bG9hZFR5cGUoKSA9PSBGcmFtZUxvYWRUeXBlUmVsb2FkIHx8IG1fZnJhbWUtPmxv
YWRlcigpLT5sb2FkVHlwZSgpID09IEZyYW1lTG9hZFR5cGVSZWxvYWRGcm9tT3JpZ2luKQorICAg
ICAgICBpZiAobV9mcmFtZUxvYWRlci0+bG9hZFR5cGUoKSA9PSBGcmFtZUxvYWRUeXBlUmVsb2Fk
IHx8IG1fZnJhbWVMb2FkZXItPmxvYWRUeXBlKCkgPT0gRnJhbWVMb2FkVHlwZVJlbG9hZEZyb21P
cmlnaW4pCiAgICAgICAgICAgICBzYXZlU2Nyb2xsUG9zaXRpb25BbmRWaWV3U3RhdGVUb0l0ZW0o
bV9jdXJyZW50SXRlbS5nZXQoKSk7CiAgICAgCiAgICAgICAgIC8vIFNvbWV0aW1lcyBsb2FkaW5n
IGEgcGFnZSBhZ2FpbiBsZWFkcyB0byBhIGRpZmZlcmVudCByZXN1bHQgYmVjYXVzZSBvZiBjb29r
aWVzLiBCdWd6aWxsYSA0MDcyCi0gICAgICAgIGlmIChtX2ZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1l
bnRMb2FkZXIoKS0+dW5yZWFjaGFibGVVUkwoKS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBtX2N1
cnJlbnRJdGVtLT5zZXRVUkwobV9mcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPnJl
cXVlc3RVUkwoKSk7CisgICAgICAgIGlmIChtX2ZyYW1lTG9hZGVyLT5kb2N1bWVudExvYWRlcigp
LT51bnJlYWNoYWJsZVVSTCgpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIG1fY3VycmVudEl0ZW0t
PnNldFVSTChtX2ZyYW1lTG9hZGVyLT5kb2N1bWVudExvYWRlcigpLT5yZXF1ZXN0VVJMKCkpOwog
ICAgIH0KIH0KIApAQCAtMjc5LDg5ICsyNzksODcgQEAgdm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6
dXBkYXRlRm9yUmVsb2FkKCkKIAogdm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6dXBkYXRlRm9yU3Rh
bmRhcmRMb2FkKCkKIHsKLSAgICBMT0coSGlzdG9yeSwgIldlYkNvcmVIaXN0b3J5OiBVcGRhdGlu
ZyBIaXN0b3J5IGZvciBTdGFuZGFyZCBMb2FkIGluIGZyYW1lICVzIiwgbV9mcmFtZS0+bG9hZGVy
KCktPmRvY3VtZW50TG9hZGVyKCktPnVybCgpLnN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKKyAg
ICBMT0coSGlzdG9yeSwgIldlYkNvcmVIaXN0b3J5OiBVcGRhdGluZyBIaXN0b3J5IGZvciBTdGFu
ZGFyZCBMb2FkIGluIGZyYW1lICVzIiwgbV9mcmFtZUxvYWRlci0+ZG9jdW1lbnRMb2FkZXIoKS0+
dXJsKCkuc3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOwogCi0gICAgRnJhbWVMb2FkZXIqIGZyYW1l
TG9hZGVyID0gbV9mcmFtZS0+bG9hZGVyKCk7Ci0KLSAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBt
X2ZyYW1lLT5zZXR0aW5ncygpOworICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IG1fZnJhbWVMb2Fk
ZXItPmZyYW1lKCktPnNldHRpbmdzKCk7CiAgICAgYm9vbCBuZWVkUHJpdmFjeSA9ICFzZXR0aW5n
cyB8fCBzZXR0aW5ncy0+cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpOwotICAgIGNvbnN0IEtVUkwm
IGhpc3RvcnlVUkwgPSBmcmFtZUxvYWRlci0+ZG9jdW1lbnRMb2FkZXIoKS0+dXJsRm9ySGlzdG9y
eSgpOworICAgIGNvbnN0IEtVUkwmIGhpc3RvcnlVUkwgPSBtX2ZyYW1lTG9hZGVyLT5kb2N1bWVu
dExvYWRlcigpLT51cmxGb3JIaXN0b3J5KCk7CiAKLSAgICBpZiAoIWZyYW1lTG9hZGVyLT5kb2N1
bWVudExvYWRlcigpLT5pc0NsaWVudFJlZGlyZWN0KCkpIHsKKyAgICBpZiAoIW1fZnJhbWVMb2Fk
ZXItPmRvY3VtZW50TG9hZGVyKCktPmlzQ2xpZW50UmVkaXJlY3QoKSkgewogICAgICAgICBpZiAo
IWhpc3RvcnlVUkwuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICB1cGRhdGVCYWNrRm9yd2FyZExp
c3RDbGlwcGVkQXRUYXJnZXQodHJ1ZSk7CiAgICAgICAgICAgICBpZiAoIW5lZWRQcml2YWN5KSB7
Ci0gICAgICAgICAgICAgICAgZnJhbWVMb2FkZXItPmNsaWVudCgpLT51cGRhdGVHbG9iYWxIaXN0
b3J5KCk7Ci0gICAgICAgICAgICAgICAgZnJhbWVMb2FkZXItPmRvY3VtZW50TG9hZGVyKCktPnNl
dERpZENyZWF0ZUdsb2JhbEhpc3RvcnlFbnRyeSh0cnVlKTsKLSAgICAgICAgICAgICAgICBpZiAo
ZnJhbWVMb2FkZXItPmRvY3VtZW50TG9hZGVyKCktPnVucmVhY2hhYmxlVVJMKCkuaXNFbXB0eSgp
KQotICAgICAgICAgICAgICAgICAgICBmcmFtZUxvYWRlci0+Y2xpZW50KCktPnVwZGF0ZUdsb2Jh
bEhpc3RvcnlSZWRpcmVjdExpbmtzKCk7CisgICAgICAgICAgICAgICAgbV9mcmFtZUxvYWRlci0+
Y2xpZW50KCktPnVwZGF0ZUdsb2JhbEhpc3RvcnkoKTsKKyAgICAgICAgICAgICAgICBtX2ZyYW1l
TG9hZGVyLT5kb2N1bWVudExvYWRlcigpLT5zZXREaWRDcmVhdGVHbG9iYWxIaXN0b3J5RW50cnko
dHJ1ZSk7CisgICAgICAgICAgICAgICAgaWYgKG1fZnJhbWVMb2FkZXItPmRvY3VtZW50TG9hZGVy
KCktPnVucmVhY2hhYmxlVVJMKCkuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgICAgICBtX2Zy
YW1lTG9hZGVyLT5jbGllbnQoKS0+dXBkYXRlR2xvYmFsSGlzdG9yeVJlZGlyZWN0TGlua3MoKTsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChQYWdlKiBwYWdlID0gbV9mcmFtZS0+cGFn
ZSgpKQorICAgICAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lTG9hZGVyLT5mcmFtZSgp
LT5wYWdlKCkpCiAgICAgICAgICAgICAgICAgcGFnZS0+c2V0R2xvYmFsSGlzdG9yeUl0ZW0obmVl
ZFByaXZhY3kgPyAwIDogcGFnZS0+YmFja0ZvcndhcmRMaXN0KCktPmN1cnJlbnRJdGVtKCkpOwog
ICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChmcmFtZUxvYWRlci0+ZG9jdW1lbnRMb2FkZXIoKS0+
dW5yZWFjaGFibGVVUkwoKS5pc0VtcHR5KCkgJiYgbV9jdXJyZW50SXRlbSkgewotICAgICAgICBt
X2N1cnJlbnRJdGVtLT5zZXRVUkwoZnJhbWVMb2FkZXItPmRvY3VtZW50TG9hZGVyKCktPnVybCgp
KTsKLSAgICAgICAgbV9jdXJyZW50SXRlbS0+c2V0Rm9ybUluZm9Gcm9tUmVxdWVzdChmcmFtZUxv
YWRlci0+ZG9jdW1lbnRMb2FkZXIoKS0+cmVxdWVzdCgpKTsKKyAgICB9IGVsc2UgaWYgKG1fZnJh
bWVMb2FkZXItPmRvY3VtZW50TG9hZGVyKCktPnVucmVhY2hhYmxlVVJMKCkuaXNFbXB0eSgpICYm
IG1fY3VycmVudEl0ZW0pIHsKKyAgICAgICAgbV9jdXJyZW50SXRlbS0+c2V0VVJMKG1fZnJhbWVM
b2FkZXItPmRvY3VtZW50TG9hZGVyKCktPnVybCgpKTsKKyAgICAgICAgbV9jdXJyZW50SXRlbS0+
c2V0Rm9ybUluZm9Gcm9tUmVxdWVzdChtX2ZyYW1lTG9hZGVyLT5kb2N1bWVudExvYWRlcigpLT5y
ZXF1ZXN0KCkpOwogICAgIH0KIAogICAgIGlmICghaGlzdG9yeVVSTC5pc0VtcHR5KCkgJiYgIW5l
ZWRQcml2YWN5KSB7Ci0gICAgICAgIGlmIChQYWdlKiBwYWdlID0gbV9mcmFtZS0+cGFnZSgpKQor
ICAgICAgICBpZiAoUGFnZSogcGFnZSA9IG1fZnJhbWVMb2FkZXItPmZyYW1lKCktPnBhZ2UoKSkK
ICAgICAgICAgICAgIHBhZ2UtPmdyb3VwKCkuYWRkVmlzaXRlZExpbmsoaGlzdG9yeVVSTCk7CiAK
LSAgICAgICAgaWYgKCFmcmFtZUxvYWRlci0+ZG9jdW1lbnRMb2FkZXIoKS0+ZGlkQ3JlYXRlR2xv
YmFsSGlzdG9yeUVudHJ5KCkgJiYgZnJhbWVMb2FkZXItPmRvY3VtZW50TG9hZGVyKCktPnVucmVh
Y2hhYmxlVVJMKCkuaXNFbXB0eSgpICYmICFmcmFtZUxvYWRlci0+dXJsKCkuaXNFbXB0eSgpKQot
ICAgICAgICAgICAgZnJhbWVMb2FkZXItPmNsaWVudCgpLT51cGRhdGVHbG9iYWxIaXN0b3J5UmVk
aXJlY3RMaW5rcygpOworICAgICAgICBpZiAoIW1fZnJhbWVMb2FkZXItPmRvY3VtZW50TG9hZGVy
KCktPmRpZENyZWF0ZUdsb2JhbEhpc3RvcnlFbnRyeSgpICYmIG1fZnJhbWVMb2FkZXItPmRvY3Vt
ZW50TG9hZGVyKCktPnVucmVhY2hhYmxlVVJMKCkuaXNFbXB0eSgpICYmICFtX2ZyYW1lTG9hZGVy
LT51cmwoKS5pc0VtcHR5KCkpCisgICAgICAgICAgICBtX2ZyYW1lTG9hZGVyLT5jbGllbnQoKS0+
dXBkYXRlR2xvYmFsSGlzdG9yeVJlZGlyZWN0TGlua3MoKTsKICAgICB9CiB9CiAKIHZvaWQgSGlz
dG9yeUNvbnRyb2xsZXI6OnVwZGF0ZUZvclJlZGlyZWN0V2l0aExvY2tlZEJhY2tGb3J3YXJkTGlz
dCgpCiB7CiAjaWYgIUxPR19ESVNBQkxFRAotICAgIGlmIChtX2ZyYW1lLT5sb2FkZXIoKS0+ZG9j
dW1lbnRMb2FkZXIoKSkKLSAgICAgICAgTE9HKEhpc3RvcnksICJXZWJDb3JlSGlzdG9yeTogVXBk
YXRpbmcgSGlzdG9yeSBmb3IgcmVkaXJlY3QgbG9hZCBpbiBmcmFtZSAlcyIsIG1fZnJhbWUtPmxv
YWRlcigpLT5kb2N1bWVudExvYWRlcigpLT50aXRsZSgpLnV0ZjgoKS5kYXRhKCkpOworICAgIGlm
IChtX2ZyYW1lTG9hZGVyLT5kb2N1bWVudExvYWRlcigpKQorICAgICAgICBMT0coSGlzdG9yeSwg
IldlYkNvcmVIaXN0b3J5OiBVcGRhdGluZyBIaXN0b3J5IGZvciByZWRpcmVjdCBsb2FkIGluIGZy
YW1lICVzIiwgbV9mcmFtZUxvYWRlci0+ZG9jdW1lbnRMb2FkZXIoKS0+dGl0bGUoKS51dGY4KCku
ZGF0YSgpKTsKICNlbmRpZgogICAgIAotICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IG1fZnJhbWUt
PnNldHRpbmdzKCk7CisgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gbV9mcmFtZUxvYWRlci0+ZnJh
bWUoKS0+c2V0dGluZ3MoKTsKICAgICBib29sIG5lZWRQcml2YWN5ID0gIXNldHRpbmdzIHx8IHNl
dHRpbmdzLT5wcml2YXRlQnJvd3NpbmdFbmFibGVkKCk7Ci0gICAgY29uc3QgS1VSTCYgaGlzdG9y
eVVSTCA9IG1fZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT51cmxGb3JIaXN0b3J5
KCk7CisgICAgY29uc3QgS1VSTCYgaGlzdG9yeVVSTCA9IG1fZnJhbWVMb2FkZXItPmRvY3VtZW50
TG9hZGVyKCktPnVybEZvckhpc3RvcnkoKTsKIAotICAgIGlmIChtX2ZyYW1lLT5sb2FkZXIoKS0+
ZG9jdW1lbnRMb2FkZXIoKS0+aXNDbGllbnRSZWRpcmVjdCgpKSB7Ci0gICAgICAgIGlmICghbV9j
dXJyZW50SXRlbSAmJiAhbV9mcmFtZS0+dHJlZSgpLT5wYXJlbnQoKSkgeworICAgIGlmIChtX2Zy
YW1lTG9hZGVyLT5kb2N1bWVudExvYWRlcigpLT5pc0NsaWVudFJlZGlyZWN0KCkpIHsKKyAgICAg
ICAgaWYgKCFtX2N1cnJlbnRJdGVtICYmICFtX2ZyYW1lTG9hZGVyLT5wYXJlbnQoKSkgewogICAg
ICAgICAgICAgaWYgKCFoaXN0b3J5VVJMLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgIHVw
ZGF0ZUJhY2tGb3J3YXJkTGlzdENsaXBwZWRBdFRhcmdldCh0cnVlKTsKICAgICAgICAgICAgICAg
ICBpZiAoIW5lZWRQcml2YWN5KSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fZnJhbWUtPmxvYWRl
cigpLT5jbGllbnQoKS0+dXBkYXRlR2xvYmFsSGlzdG9yeSgpOwotICAgICAgICAgICAgICAgICAg
ICBtX2ZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+c2V0RGlkQ3JlYXRlR2xvYmFs
SGlzdG9yeUVudHJ5KHRydWUpOwotICAgICAgICAgICAgICAgICAgICBpZiAobV9mcmFtZS0+bG9h
ZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPnVucmVhY2hhYmxlVVJMKCkuaXNFbXB0eSgpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgbV9mcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT51cGRhdGVH
bG9iYWxIaXN0b3J5UmVkaXJlY3RMaW5rcygpOworICAgICAgICAgICAgICAgICAgICBtX2ZyYW1l
TG9hZGVyLT5jbGllbnQoKS0+dXBkYXRlR2xvYmFsSGlzdG9yeSgpOworICAgICAgICAgICAgICAg
ICAgICBtX2ZyYW1lTG9hZGVyLT5kb2N1bWVudExvYWRlcigpLT5zZXREaWRDcmVhdGVHbG9iYWxI
aXN0b3J5RW50cnkodHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX2ZyYW1lTG9hZGVy
LT5kb2N1bWVudExvYWRlcigpLT51bnJlYWNoYWJsZVVSTCgpLmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG1fZnJhbWVMb2FkZXItPmNsaWVudCgpLT51cGRhdGVHbG9iYWxIaXN0
b3J5UmVkaXJlY3RMaW5rcygpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBp
ZiAoUGFnZSogcGFnZSA9IG1fZnJhbWUtPnBhZ2UoKSkKKyAgICAgICAgICAgICAgICBpZiAoUGFn
ZSogcGFnZSA9IG1fZnJhbWVMb2FkZXItPmZyYW1lKCktPnBhZ2UoKSkKICAgICAgICAgICAgICAg
ICAgICAgcGFnZS0+c2V0R2xvYmFsSGlzdG9yeUl0ZW0obmVlZFByaXZhY3kgPyAwIDogcGFnZS0+
YmFja0ZvcndhcmRMaXN0KCktPmN1cnJlbnRJdGVtKCkpOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgICAgIGlmIChtX2N1cnJlbnRJdGVtKSB7Ci0gICAgICAgICAgICBtX2N1cnJlbnRJ
dGVtLT5zZXRVUkwobV9mcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPnVybCgpKTsK
LSAgICAgICAgICAgIG1fY3VycmVudEl0ZW0tPnNldEZvcm1JbmZvRnJvbVJlcXVlc3QobV9mcmFt
ZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPnJlcXVlc3QoKSk7CisgICAgICAgICAgICBt
X2N1cnJlbnRJdGVtLT5zZXRVUkwobV9mcmFtZUxvYWRlci0+ZG9jdW1lbnRMb2FkZXIoKS0+dXJs
KCkpOworICAgICAgICAgICAgbV9jdXJyZW50SXRlbS0+c2V0Rm9ybUluZm9Gcm9tUmVxdWVzdCht
X2ZyYW1lTG9hZGVyLT5kb2N1bWVudExvYWRlcigpLT5yZXF1ZXN0KCkpOwogICAgICAgICB9CiAg
ICAgfSBlbHNlIHsKLSAgICAgICAgRnJhbWUqIHBhcmVudEZyYW1lID0gbV9mcmFtZS0+dHJlZSgp
LT5wYXJlbnQoKTsKKyAgICAgICAgRnJhbWUqIHBhcmVudEZyYW1lID0gbV9mcmFtZUxvYWRlci0+
ZnJhbWUoKS0+dHJlZSgpLT5wYXJlbnQoKTsKICAgICAgICAgaWYgKHBhcmVudEZyYW1lICYmIHBh
cmVudEZyYW1lLT5sb2FkZXIoKS0+aGlzdG9yeSgpLT5tX2N1cnJlbnRJdGVtKQogICAgICAgICAg
ICAgcGFyZW50RnJhbWUtPmxvYWRlcigpLT5oaXN0b3J5KCktPm1fY3VycmVudEl0ZW0tPnNldENo
aWxkSXRlbShjcmVhdGVJdGVtKHRydWUpKTsKICAgICB9CiAKICAgICBpZiAoIWhpc3RvcnlVUkwu
aXNFbXB0eSgpICYmICFuZWVkUHJpdmFjeSkgewotICAgICAgICBpZiAoUGFnZSogcGFnZSA9IG1f
ZnJhbWUtPnBhZ2UoKSkKKyAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lTG9hZGVyLT5m
cmFtZSgpLT5wYWdlKCkpCiAgICAgICAgICAgICBwYWdlLT5ncm91cCgpLmFkZFZpc2l0ZWRMaW5r
KGhpc3RvcnlVUkwpOwogCi0gICAgICAgIGlmICghbV9mcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50
TG9hZGVyKCktPmRpZENyZWF0ZUdsb2JhbEhpc3RvcnlFbnRyeSgpICYmIG1fZnJhbWUtPmxvYWRl
cigpLT5kb2N1bWVudExvYWRlcigpLT51bnJlYWNoYWJsZVVSTCgpLmlzRW1wdHkoKSAmJiAhbV9m
cmFtZS0+bG9hZGVyKCktPnVybCgpLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIG1fZnJhbWUtPmxv
YWRlcigpLT5jbGllbnQoKS0+dXBkYXRlR2xvYmFsSGlzdG9yeVJlZGlyZWN0TGlua3MoKTsKKyAg
ICAgICAgaWYgKCFtX2ZyYW1lTG9hZGVyLT5kb2N1bWVudExvYWRlcigpLT5kaWRDcmVhdGVHbG9i
YWxIaXN0b3J5RW50cnkoKSAmJiBtX2ZyYW1lTG9hZGVyLT5kb2N1bWVudExvYWRlcigpLT51bnJl
YWNoYWJsZVVSTCgpLmlzRW1wdHkoKSAmJiAhbV9mcmFtZUxvYWRlci0+dXJsKCkuaXNFbXB0eSgp
KQorICAgICAgICAgICAgbV9mcmFtZUxvYWRlci0+Y2xpZW50KCktPnVwZGF0ZUdsb2JhbEhpc3Rv
cnlSZWRpcmVjdExpbmtzKCk7CiAgICAgfQogfQogCiB2b2lkIEhpc3RvcnlDb250cm9sbGVyOjp1
cGRhdGVGb3JDbGllbnRSZWRpcmVjdCgpCiB7CiAjaWYgIUxPR19ESVNBQkxFRAotICAgIGlmICht
X2ZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKSkKLSAgICAgICAgTE9HKEhpc3Rvcnks
ICJXZWJDb3JlSGlzdG9yeTogVXBkYXRpbmcgSGlzdG9yeSBmb3IgY2xpZW50IHJlZGlyZWN0IGlu
IGZyYW1lICVzIiwgbV9mcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPnRpdGxlKCku
dXRmOCgpLmRhdGEoKSk7CisgICAgaWYgKG1fZnJhbWVMb2FkZXItPmRvY3VtZW50TG9hZGVyKCkp
CisgICAgICAgIExPRyhIaXN0b3J5LCAiV2ViQ29yZUhpc3Rvcnk6IFVwZGF0aW5nIEhpc3Rvcnkg
Zm9yIGNsaWVudCByZWRpcmVjdCBpbiBmcmFtZSAlcyIsIG1fZnJhbWVMb2FkZXItPmRvY3VtZW50
TG9hZGVyKCktPnRpdGxlKCkudXRmOCgpLmRhdGEoKSk7CiAjZW5kaWYKIAogICAgIC8vIENsZWFy
IG91dCBmb3JtIGRhdGEgc28gd2UgZG9uJ3QgdHJ5IHRvIHJlc3RvcmUgaXQgaW50byB0aGUgaW5j
b21pbmcgcGFnZS4gIE11c3QgaGFwcGVuIGFmdGVyCkBAIC0zNzEsMjYgKzM2OSwyNSBAQCB2b2lk
IEhpc3RvcnlDb250cm9sbGVyOjp1cGRhdGVGb3JDbGllbnRSZWRpcmVjdCgpCiAgICAgICAgIG1f
Y3VycmVudEl0ZW0tPmNsZWFyU2Nyb2xsUG9pbnQoKTsKICAgICB9CiAKLSAgICBTZXR0aW5ncyog
c2V0dGluZ3MgPSBtX2ZyYW1lLT5zZXR0aW5ncygpOworICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9
IG1fZnJhbWVMb2FkZXItPmZyYW1lKCktPnNldHRpbmdzKCk7CiAgICAgYm9vbCBuZWVkUHJpdmFj
eSA9ICFzZXR0aW5ncyB8fCBzZXR0aW5ncy0+cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpOwotICAg
IGNvbnN0IEtVUkwmIGhpc3RvcnlVUkwgPSBtX2ZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2Fk
ZXIoKS0+dXJsRm9ySGlzdG9yeSgpOworICAgIGNvbnN0IEtVUkwmIGhpc3RvcnlVUkwgPSBtX2Zy
YW1lTG9hZGVyLT5kb2N1bWVudExvYWRlcigpLT51cmxGb3JIaXN0b3J5KCk7CiAKICAgICBpZiAo
IWhpc3RvcnlVUkwuaXNFbXB0eSgpICYmICFuZWVkUHJpdmFjeSkgewotICAgICAgICBpZiAoUGFn
ZSogcGFnZSA9IG1fZnJhbWUtPnBhZ2UoKSkKKyAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX2Zy
YW1lTG9hZGVyLT5mcmFtZSgpLT5wYWdlKCkpCiAgICAgICAgICAgICBwYWdlLT5ncm91cCgpLmFk
ZFZpc2l0ZWRMaW5rKGhpc3RvcnlVUkwpOwogICAgIH0KIH0KIAogdm9pZCBIaXN0b3J5Q29udHJv
bGxlcjo6dXBkYXRlRm9yQ29tbWl0KCkKIHsKLSAgICBGcmFtZUxvYWRlciogZnJhbWVMb2FkZXIg
PSBtX2ZyYW1lLT5sb2FkZXIoKTsKICNpZiAhTE9HX0RJU0FCTEVECi0gICAgaWYgKGZyYW1lTG9h
ZGVyLT5kb2N1bWVudExvYWRlcigpKQotICAgICAgICBMT0coSGlzdG9yeSwgIldlYkNvcmVIaXN0
b3J5OiBVcGRhdGluZyBIaXN0b3J5IGZvciBjb21taXQgaW4gZnJhbWUgJXMiLCBmcmFtZUxvYWRl
ci0+ZG9jdW1lbnRMb2FkZXIoKS0+dGl0bGUoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBpZiAobV9m
cmFtZUxvYWRlci0+ZG9jdW1lbnRMb2FkZXIoKSkKKyAgICAgICAgTE9HKEhpc3RvcnksICJXZWJD
b3JlSGlzdG9yeTogVXBkYXRpbmcgSGlzdG9yeSBmb3IgY29tbWl0IGluIGZyYW1lICVzIiwgbV9m
cmFtZUxvYWRlci0+ZG9jdW1lbnRMb2FkZXIoKS0+dGl0bGUoKS51dGY4KCkuZGF0YSgpKTsKICNl
bmRpZgotICAgIEZyYW1lTG9hZFR5cGUgdHlwZSA9IGZyYW1lTG9hZGVyLT5sb2FkVHlwZSgpOwor
ICAgIEZyYW1lTG9hZFR5cGUgdHlwZSA9IG1fZnJhbWVMb2FkZXItPmxvYWRUeXBlKCk7CiAgICAg
aWYgKGlzQmFja0ZvcndhcmRMb2FkVHlwZSh0eXBlKSB8fAotICAgICAgICAoKHR5cGUgPT0gRnJh
bWVMb2FkVHlwZVJlbG9hZCB8fCB0eXBlID09IEZyYW1lTG9hZFR5cGVSZWxvYWRGcm9tT3JpZ2lu
KSAmJiAhZnJhbWVMb2FkZXItPnByb3Zpc2lvbmFsRG9jdW1lbnRMb2FkZXIoKS0+dW5yZWFjaGFi
bGVVUkwoKS5pc0VtcHR5KCkpKSB7CisgICAgICAgICgodHlwZSA9PSBGcmFtZUxvYWRUeXBlUmVs
b2FkIHx8IHR5cGUgPT0gRnJhbWVMb2FkVHlwZVJlbG9hZEZyb21PcmlnaW4pICYmICFtX2ZyYW1l
TG9hZGVyLT5wcm92aXNpb25hbERvY3VtZW50TG9hZGVyKCktPnVucmVhY2hhYmxlVVJMKCkuaXNF
bXB0eSgpKSkgewogICAgICAgICAvLyBPbmNlIGNvbW1pdHRlZCwgd2Ugd2FudCB0byB1c2UgY3Vy
cmVudCBpdGVtIGZvciBzYXZpbmcgRG9jU3RhdGUsIGFuZAogICAgICAgICAvLyB0aGUgcHJvdmlz
aW9uYWwgaXRlbSBmb3IgcmVzdG9yaW5nIHN0YXRlLgogICAgICAgICAvLyBOb3RlIHByZXZpb3Vz
SXRlbSBtdXN0IGJlIHNldCBiZWZvcmUgd2UgY2xvc2UgdGhlIFVSTCwgd2hpY2ggd2lsbApAQCAt
NDA0LDE4ICs0MDEsMTggQEAgdm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6dXBkYXRlRm9yQ29tbWl0
KCkKIAogdm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6dXBkYXRlRm9yQW5jaG9yU2Nyb2xsKCkKIHsK
LSAgICBpZiAobV9mcmFtZS0+bG9hZGVyKCktPnVybCgpLmlzRW1wdHkoKSkKKyAgICBpZiAobV9m
cmFtZUxvYWRlci0+dXJsKCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBTZXR0
aW5ncyogc2V0dGluZ3MgPSBtX2ZyYW1lLT5zZXR0aW5ncygpOworICAgIFNldHRpbmdzKiBzZXR0
aW5ncyA9IG1fZnJhbWVMb2FkZXItPmZyYW1lKCktPnNldHRpbmdzKCk7CiAgICAgaWYgKCFzZXR0
aW5ncyB8fCBzZXR0aW5ncy0+cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBQYWdlKiBwYWdlID0gbV9mcmFtZS0+cGFnZSgpOworICAgIFBhZ2UqIHBhZ2Ug
PSBtX2ZyYW1lTG9hZGVyLT5mcmFtZSgpLT5wYWdlKCk7CiAgICAgaWYgKCFwYWdlKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBwYWdlLT5ncm91cCgpLmFkZFZpc2l0ZWRMaW5rKG1fZnJhbWUtPmxv
YWRlcigpLT51cmwoKSk7CisgICAgcGFnZS0+Z3JvdXAoKS5hZGRWaXNpdGVkTGluayhtX2ZyYW1l
TG9hZGVyLT51cmwoKSk7CiB9CiAKIHZvaWQgSGlzdG9yeUNvbnRyb2xsZXI6OnVwZGF0ZUZvckZy
YW1lTG9hZENvbXBsZXRlZCgpCkBAIC00NDMsNyArNDQwLDcgQEAgdm9pZCBIaXN0b3J5Q29udHJv
bGxlcjo6c2V0UHJvdmlzaW9uYWxJdGVtKEhpc3RvcnlJdGVtKiBpdGVtKQogCiBQYXNzUmVmUHRy
PEhpc3RvcnlJdGVtPiBIaXN0b3J5Q29udHJvbGxlcjo6Y3JlYXRlSXRlbShib29sIHVzZU9yaWdp
bmFsKQogewotICAgIERvY3VtZW50TG9hZGVyKiBkb2NMb2FkZXIgPSBtX2ZyYW1lLT5sb2FkZXIo
KS0+ZG9jdW1lbnRMb2FkZXIoKTsKKyAgICBEb2N1bWVudExvYWRlciogZG9jTG9hZGVyID0gbV9m
cmFtZUxvYWRlci0+ZG9jdW1lbnRMb2FkZXIoKTsKICAgICAKICAgICBLVVJMIHVucmVhY2hhYmxl
VVJMID0gZG9jTG9hZGVyID8gZG9jTG9hZGVyLT51bnJlYWNoYWJsZVVSTCgpIDogS1VSTCgpOwog
ICAgIApAQCAtNDczLDExICs0NzAsMTEgQEAgUGFzc1JlZlB0cjxIaXN0b3J5SXRlbT4gSGlzdG9y
eUNvbnRyb2xsZXI6OmNyZWF0ZUl0ZW0oYm9vbCB1c2VPcmlnaW5hbCkKICAgICBpZiAob3JpZ2lu
YWxVUkwuaXNFbXB0eSgpKQogICAgICAgICBvcmlnaW5hbFVSTCA9IGJsYW5rVVJMKCk7CiAgICAg
Ci0gICAgRnJhbWUqIHBhcmVudEZyYW1lID0gbV9mcmFtZS0+dHJlZSgpLT5wYXJlbnQoKTsKKyAg
ICBGcmFtZSogcGFyZW50RnJhbWUgPSBtX2ZyYW1lTG9hZGVyLT5mcmFtZSgpLT50cmVlKCktPnBh
cmVudCgpOwogICAgIFN0cmluZyBwYXJlbnQgPSBwYXJlbnRGcmFtZSA/IHBhcmVudEZyYW1lLT50
cmVlKCktPm5hbWUoKSA6ICIiOwogICAgIFN0cmluZyB0aXRsZSA9IGRvY0xvYWRlciA/IGRvY0xv
YWRlci0+dGl0bGUoKSA6ICIiOwogCi0gICAgUmVmUHRyPEhpc3RvcnlJdGVtPiBpdGVtID0gSGlz
dG9yeUl0ZW06OmNyZWF0ZSh1cmwsIG1fZnJhbWUtPnRyZWUoKS0+bmFtZSgpLCBwYXJlbnQsIHRp
dGxlKTsKKyAgICBSZWZQdHI8SGlzdG9yeUl0ZW0+IGl0ZW0gPSBIaXN0b3J5SXRlbTo6Y3JlYXRl
KHVybCwgbV9mcmFtZUxvYWRlci0+ZnJhbWUoKS0+dHJlZSgpLT5uYW1lKCksIHBhcmVudCwgdGl0
bGUpOwogICAgIGl0ZW0tPnNldE9yaWdpbmFsVVJMU3RyaW5nKG9yaWdpbmFsVVJMLnN0cmluZygp
KTsKIAogICAgIGlmICghdW5yZWFjaGFibGVVUkwuaXNFbXB0eSgpIHx8ICFkb2NMb2FkZXIgfHwg
ZG9jTG9hZGVyLT5yZXNwb25zZSgpLmh0dHBTdGF0dXNDb2RlKCkgPj0gNDAwKQpAQCAtNTAwLDEz
ICs0OTcsMTMgQEAgUGFzc1JlZlB0cjxIaXN0b3J5SXRlbT4gSGlzdG9yeUNvbnRyb2xsZXI6OmNy
ZWF0ZUl0ZW0oYm9vbCB1c2VPcmlnaW5hbCkKIAogUGFzc1JlZlB0cjxIaXN0b3J5SXRlbT4gSGlz
dG9yeUNvbnRyb2xsZXI6OmNyZWF0ZUl0ZW1UcmVlKEZyYW1lKiB0YXJnZXRGcmFtZSwgYm9vbCBj
bGlwQXRUYXJnZXQpCiB7Ci0gICAgUmVmUHRyPEhpc3RvcnlJdGVtPiBiZkl0ZW0gPSBjcmVhdGVJ
dGVtKG1fZnJhbWUtPnRyZWUoKS0+cGFyZW50KCkgPyB0cnVlIDogZmFsc2UpOworICAgIFJlZlB0
cjxIaXN0b3J5SXRlbT4gYmZJdGVtID0gY3JlYXRlSXRlbShtX2ZyYW1lTG9hZGVyLT5mcmFtZSgp
LT50cmVlKCktPnBhcmVudCgpID8gdHJ1ZSA6IGZhbHNlKTsKICAgICBpZiAobV9wcmV2aW91c0l0
ZW0pCiAgICAgICAgIHNhdmVTY3JvbGxQb3NpdGlvbkFuZFZpZXdTdGF0ZVRvSXRlbShtX3ByZXZp
b3VzSXRlbS5nZXQoKSk7Ci0gICAgaWYgKCEoY2xpcEF0VGFyZ2V0ICYmIG1fZnJhbWUgPT0gdGFy
Z2V0RnJhbWUpKSB7CisgICAgaWYgKCEoY2xpcEF0VGFyZ2V0ICYmIG1fZnJhbWVMb2FkZXItPmZy
YW1lKCkgPT0gdGFyZ2V0RnJhbWUpKSB7CiAgICAgICAgIC8vIHNhdmUgZnJhbWUgc3RhdGUgZm9y
IGl0ZW1zIHRoYXQgYXJlbid0IGxvYWRpbmcgKGtodG1sIGRvZXNuJ3Qgc2F2ZSB0aG9zZSkKICAg
ICAgICAgc2F2ZURvY3VtZW50U3RhdGUoKTsKLSAgICAgICAgZm9yIChGcmFtZSogY2hpbGQgPSBt
X2ZyYW1lLT50cmVlKCktPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnRyZWUo
KS0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICBmb3IgKEZyYW1lKiBjaGlsZCA9IG1fZnJhbWVM
b2FkZXItPmZyYW1lKCktPnRyZWUoKS0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGls
ZC0+dHJlZSgpLT5uZXh0U2libGluZygpKSB7CiAgICAgICAgICAgICBGcmFtZUxvYWRlciogY2hp
bGRMb2FkZXIgPSBjaGlsZC0+bG9hZGVyKCk7CiAgICAgICAgICAgICBib29sIGhhc0NoaWxkTG9h
ZGVkID0gY2hpbGRMb2FkZXItPmZyYW1lSGFzTG9hZGVkKCk7CiAKQEAgLTUxOCw3ICs1MTUsNyBA
QCBQYXNzUmVmUHRyPEhpc3RvcnlJdGVtPiBIaXN0b3J5Q29udHJvbGxlcjo6Y3JlYXRlSXRlbVRy
ZWUoRnJhbWUqIHRhcmdldEZyYW1lLCBibwogICAgICAgICAgICAgICAgIGJmSXRlbS0+YWRkQ2hp
bGRJdGVtKGNoaWxkTG9hZGVyLT5oaXN0b3J5KCktPmNyZWF0ZUl0ZW1UcmVlKHRhcmdldEZyYW1l
LCBjbGlwQXRUYXJnZXQpKTsKICAgICAgICAgfQogICAgIH0KLSAgICBpZiAobV9mcmFtZSA9PSB0
YXJnZXRGcmFtZSkKKyAgICBpZiAobV9mcmFtZUxvYWRlci0+ZnJhbWUoKSA9PSB0YXJnZXRGcmFt
ZSkKICAgICAgICAgYmZJdGVtLT5zZXRJc1RhcmdldEl0ZW0odHJ1ZSk7CiAgICAgcmV0dXJuIGJm
SXRlbTsKIH0KQEAgLTUzNCw4ICs1MzEsOCBAQCB2b2lkIEhpc3RvcnlDb250cm9sbGVyOjpyZWN1
cnNpdmVHb1RvSXRlbShIaXN0b3J5SXRlbSogaXRlbSwgSGlzdG9yeUl0ZW0qIGZyb21JdAogCiAg
ICAgS1VSTCBpdGVtVVJMID0gaXRlbS0+dXJsKCk7CiAgICAgS1VSTCBjdXJyZW50VVJMOwotICAg
IGlmIChtX2ZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKSkKLSAgICAgICAgY3VycmVu
dFVSTCA9IG1fZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT51cmwoKTsKKyAgICBp
ZiAobV9mcmFtZUxvYWRlci0+ZG9jdW1lbnRMb2FkZXIoKSkKKyAgICAgICAgY3VycmVudFVSTCA9
IG1fZnJhbWVMb2FkZXItPmRvY3VtZW50TG9hZGVyKCktPnVybCgpOwogCiAgICAgLy8gQWx3YXlz
IHJlbG9hZCB0aGUgdGFyZ2V0IGZyYW1lIG9mIHRoZSBpdGVtIHdlJ3JlIGdvaW5nIHRvLiAgVGhp
cyBlbnN1cmVzIHRoYXQgd2Ugd2lsbAogICAgIC8vIGRvIC1zb21lLSBsb2FkIGZvciB0aGUgdHJh
bnNpdGlvbiwgd2hpY2ggbWVhbnMgYSBwcm9wZXIgbm90aWZpY2F0aW9uIHdpbGwgYmUgcG9zdGVk
CkBAIC01NDUsNyArNTQyLDcgQEAgdm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6cmVjdXJzaXZlR29U
b0l0ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0sIEhpc3RvcnlJdGVtKiBmcm9tSXQKICAgICAvLyBUaGUg
Y3VycmVudCBmcmFtZSB0cmVlIGFuZCB0aGUgZnJhbWUgdHJlZSBzbmFwc2hvdCBpbiB0aGUgaXRl
bSBoYXZlIHRvIG1hdGNoLgogICAgIGlmICghaXRlbS0+aXNUYXJnZXRJdGVtKCkgJiYKICAgICAg
ICAgaXRlbVVSTCA9PSBjdXJyZW50VVJMICYmCi0gICAgICAgICgobV9mcmFtZS0+dHJlZSgpLT5u
YW1lKCkuaXNFbXB0eSgpICYmIGl0ZW0tPnRhcmdldCgpLmlzRW1wdHkoKSkgfHwgbV9mcmFtZS0+
dHJlZSgpLT5uYW1lKCkgPT0gaXRlbS0+dGFyZ2V0KCkpICYmCisgICAgICAgICgobV9mcmFtZUxv
YWRlci0+ZnJhbWUoKS0+dHJlZSgpLT5uYW1lKCkuaXNFbXB0eSgpICYmIGl0ZW0tPnRhcmdldCgp
LmlzRW1wdHkoKSkgfHwgbV9mcmFtZUxvYWRlci0+ZnJhbWUoKS0+dHJlZSgpLT5uYW1lKCkgPT0g
aXRlbS0+dGFyZ2V0KCkpICYmCiAgICAgICAgIGNoaWxkRnJhbWVzTWF0Y2hJdGVtKGl0ZW0pKQog
ICAgIHsKICAgICAgICAgLy8gVGhpcyBjb250ZW50IGlzIGdvb2QsIHNvIGxlYXZlIGl0IGFsb25l
IGFuZCBsb29rIGZvciBjaGlsZHJlbiB0aGF0IG5lZWQgcmVsb2FkaW5nCkBAIC01NTQsNyArNTUx
LDcgQEAgdm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6cmVjdXJzaXZlR29Ub0l0ZW0oSGlzdG9yeUl0
ZW0qIGl0ZW0sIEhpc3RvcnlJdGVtKiBmcm9tSXQKICAgICAgICAgc2F2ZURvY3VtZW50U3RhdGUo
KTsKICAgICAgICAgc2F2ZVNjcm9sbFBvc2l0aW9uQW5kVmlld1N0YXRlVG9JdGVtKG1fY3VycmVu
dEl0ZW0uZ2V0KCkpOwogCi0gICAgICAgIGlmIChGcmFtZVZpZXcqIHZpZXcgPSBtX2ZyYW1lLT52
aWV3KCkpCisgICAgICAgIGlmIChGcmFtZVZpZXcqIHZpZXcgPSBtX2ZyYW1lTG9hZGVyLT5mcmFt
ZSgpLT52aWV3KCkpCiAgICAgICAgICAgICB2aWV3LT5zZXRXYXNTY3JvbGxlZEJ5VXNlcihmYWxz
ZSk7CiAKICAgICAgICAgbV9jdXJyZW50SXRlbSA9IGl0ZW07CkBAIC01NzIsMTIgKzU2OSwxMiBA
QCB2b2lkIEhpc3RvcnlDb250cm9sbGVyOjpyZWN1cnNpdmVHb1RvSXRlbShIaXN0b3J5SXRlbSog
aXRlbSwgSGlzdG9yeUl0ZW0qIGZyb21JdAogICAgICAgICAgICAgU3RyaW5nIGNoaWxkRnJhbWVO
YW1lID0gY2hpbGRJdGVtc1tpXS0+dGFyZ2V0KCk7CiAgICAgICAgICAgICBIaXN0b3J5SXRlbSog
ZnJvbUNoaWxkSXRlbSA9IGZyb21JdGVtLT5jaGlsZEl0ZW1XaXRoVGFyZ2V0KGNoaWxkRnJhbWVO
YW1lKTsKICAgICAgICAgICAgIEFTU0VSVChmcm9tQ2hpbGRJdGVtIHx8IGZyb21JdGVtLT5pc1Rh
cmdldEl0ZW0oKSk7Ci0gICAgICAgICAgICBGcmFtZSogY2hpbGRGcmFtZSA9IG1fZnJhbWUtPnRy
ZWUoKS0+Y2hpbGQoY2hpbGRGcmFtZU5hbWUpOworICAgICAgICAgICAgRnJhbWUqIGNoaWxkRnJh
bWUgPSBtX2ZyYW1lTG9hZGVyLT5mcmFtZSgpLT50cmVlKCktPmNoaWxkKGNoaWxkRnJhbWVOYW1l
KTsKICAgICAgICAgICAgIEFTU0VSVChjaGlsZEZyYW1lKTsKICAgICAgICAgICAgIGNoaWxkRnJh
bWUtPmxvYWRlcigpLT5oaXN0b3J5KCktPnJlY3Vyc2l2ZUdvVG9JdGVtKGNoaWxkSXRlbXNbaV0u
Z2V0KCksIGZyb21DaGlsZEl0ZW0sIHR5cGUpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAg
ICAgICAgbV9mcmFtZS0+bG9hZGVyKCktPmxvYWRJdGVtKGl0ZW0sIHR5cGUpOworICAgICAgICBt
X2ZyYW1lTG9hZGVyLT5sb2FkSXRlbShpdGVtLCB0eXBlKTsKICAgICB9CiB9CiAKQEAgLTU4Niwx
MiArNTgzLDEyIEBAIHZvaWQgSGlzdG9yeUNvbnRyb2xsZXI6OnJlY3Vyc2l2ZUdvVG9JdGVtKEhp
c3RvcnlJdGVtKiBpdGVtLCBIaXN0b3J5SXRlbSogZnJvbUl0CiBib29sIEhpc3RvcnlDb250cm9s
bGVyOjpjaGlsZEZyYW1lc01hdGNoSXRlbShIaXN0b3J5SXRlbSogaXRlbSkgY29uc3QKIHsKICAg
ICBjb25zdCBIaXN0b3J5SXRlbVZlY3RvciYgY2hpbGRJdGVtcyA9IGl0ZW0tPmNoaWxkcmVuKCk7
Ci0gICAgaWYgKGNoaWxkSXRlbXMuc2l6ZSgpICE9IG1fZnJhbWUtPnRyZWUoKS0+Y2hpbGRDb3Vu
dCgpKQorICAgIGlmIChjaGlsZEl0ZW1zLnNpemUoKSAhPSBtX2ZyYW1lTG9hZGVyLT5mcmFtZSgp
LT50cmVlKCktPmNoaWxkQ291bnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAg
IHVuc2lnbmVkIHNpemUgPSBjaGlsZEl0ZW1zLnNpemUoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIGlmICghbV9mcmFtZS0+dHJlZSgpLT5jaGls
ZChjaGlsZEl0ZW1zW2ldLT50YXJnZXQoKSkpCisgICAgICAgIGlmICghbV9mcmFtZUxvYWRlci0+
ZnJhbWUoKS0+dHJlZSgpLT5jaGlsZChjaGlsZEl0ZW1zW2ldLT50YXJnZXQoKSkpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIApAQCAtNjA2LDExICs2MDMsMTEgQEAgdm9p
ZCBIaXN0b3J5Q29udHJvbGxlcjo6dXBkYXRlQmFja0ZvcndhcmRMaXN0Q2xpcHBlZEF0VGFyZ2V0
KGJvb2wgZG9DbGlwKQogICAgIC8vIFdoZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBk
b0NsaXA9dHJ1ZSB3ZSdyZSBhYmxlIHRvIGNyZWF0ZSB0aGUgd2hvbGUgdHJlZSBleGNlcHQgZm9y
IHRoZSB0YXJnZXQncyBjaGlsZHJlbiwgCiAgICAgLy8gd2hpY2ggd2lsbCBiZSBsb2FkZWQgaW4g
dGhlIGZ1dHVyZS4gVGhhdCBwYXJ0IG9mIHRoZSB0cmVlIHdpbGwgYmUgZmlsbGVkIG91dCBhcyB0
aGUgY2hpbGQgbG9hZHMgYXJlIGNvbW1pdHRlZC4KIAotICAgIFBhZ2UqIHBhZ2UgPSBtX2ZyYW1l
LT5wYWdlKCk7CisgICAgUGFnZSogcGFnZSA9IG1fZnJhbWVMb2FkZXItPmZyYW1lKCktPnBhZ2Uo
KTsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX2ZyYW1lLT5s
b2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+dXJsRm9ySGlzdG9yeSgpLmlzRW1wdHkoKSkKKyAg
ICBpZiAobV9mcmFtZUxvYWRlci0+ZG9jdW1lbnRMb2FkZXIoKS0+dXJsRm9ySGlzdG9yeSgpLmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgRnJhbWUqIG1haW5GcmFtZSA9IHBhZ2Ut
Pm1haW5GcmFtZSgpOwpAQCAtNjE5LDggKzYxNiw4IEBAIHZvaWQgSGlzdG9yeUNvbnRyb2xsZXI6
OnVwZGF0ZUJhY2tGb3J3YXJkTGlzdENsaXBwZWRBdFRhcmdldChib29sIGRvQ2xpcCkKIAogICAg
IGZyYW1lTG9hZGVyLT5jaGVja0RpZFBlcmZvcm1GaXJzdE5hdmlnYXRpb24oKTsKIAotICAgIFJl
ZlB0cjxIaXN0b3J5SXRlbT4gaXRlbSA9IGZyYW1lTG9hZGVyLT5oaXN0b3J5KCktPmNyZWF0ZUl0
ZW1UcmVlKG1fZnJhbWUsIGRvQ2xpcCk7Ci0gICAgTE9HKEJhY2tGb3J3YXJkLCAiV2ViQ29yZUJh
Y2tGb3J3YXJkIC0gQWRkaW5nIGJhY2tmb3J3YXJkIGl0ZW0gJXAgZm9yIGZyYW1lICVzIiwgaXRl
bS5nZXQoKSwgbV9mcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPnVybCgpLnN0cmlu
ZygpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICBSZWZQdHI8SGlzdG9yeUl0ZW0+IGl0ZW0gPSBmcmFt
ZUxvYWRlci0+aGlzdG9yeSgpLT5jcmVhdGVJdGVtVHJlZShtX2ZyYW1lTG9hZGVyLT5mcmFtZSgp
LCBkb0NsaXApOworICAgIExPRyhCYWNrRm9yd2FyZCwgIldlYkNvcmVCYWNrRm9yd2FyZCAtIEFk
ZGluZyBiYWNrZm9yd2FyZCBpdGVtICVwIGZvciBmcmFtZSAlcyIsIGl0ZW0uZ2V0KCksIG1fZnJh
bWVMb2FkZXItPmRvY3VtZW50TG9hZGVyKCktPnVybCgpLnN0cmluZygpLmFzY2lpKCkuZGF0YSgp
KTsKICAgICBwYWdlLT5iYWNrRm9yd2FyZExpc3QoKS0+YWRkSXRlbShpdGVtKTsKIH0KIApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9sb2FkZXIvSGlzdG9yeUNvbnRyb2xsZXIuaCBiL1dlYkNvcmUvbG9h
ZGVyL0hpc3RvcnlDb250cm9sbGVyLmgKaW5kZXggYzE2MTUxNi4uNDRiZTk1YSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9sb2FkZXIvSGlzdG9yeUNvbnRyb2xsZXIuaAorKysgYi9XZWJDb3JlL2xvYWRl
ci9IaXN0b3J5Q29udHJvbGxlci5oCkBAIC0zNywxMiArMzcsMTIgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi0gICAgY2xhc3MgRnJhbWU7CisgICAgY2xhc3MgRnJhbWVMb2FkZXI7CiAgICAg
Y2xhc3MgSGlzdG9yeUl0ZW07CiAKICAgICBjbGFzcyBIaXN0b3J5Q29udHJvbGxlciA6IHB1Ymxp
YyBOb25jb3B5YWJsZSB7CiAgICAgcHVibGljOgotICAgICAgICBIaXN0b3J5Q29udHJvbGxlcihG
cmFtZSopOworICAgICAgICBIaXN0b3J5Q29udHJvbGxlcihGcmFtZUxvYWRlciopOwogICAgICAg
ICB+SGlzdG9yeUNvbnRyb2xsZXIoKTsKIAogICAgICAgICB2b2lkIHNhdmVTY3JvbGxQb3NpdGlv
bkFuZFZpZXdTdGF0ZVRvSXRlbShIaXN0b3J5SXRlbSopOwpAQCAtODMsNyArODMsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgY2hpbGRGcmFtZXNNYXRjaEl0ZW0oSGlzdG9y
eUl0ZW0qKSBjb25zdDsKICAgICAgICAgdm9pZCB1cGRhdGVCYWNrRm9yd2FyZExpc3RDbGlwcGVk
QXRUYXJnZXQoYm9vbCBkb0NsaXApOwogCi0gICAgICAgIEZyYW1lKiBtX2ZyYW1lOworICAgICAg
ICBGcmFtZUxvYWRlciogbV9mcmFtZUxvYWRlcjsKIAogICAgICAgICBSZWZQdHI8SGlzdG9yeUl0
ZW0+IG1fY3VycmVudEl0ZW07CiAgICAgICAgIFJlZlB0cjxIaXN0b3J5SXRlbT4gbV9wcmV2aW91
c0l0ZW07
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>40988</attachid>
            <date>2009-10-10 02:42:08 -0700</date>
            <delta_ts>2009-10-11 20:28:39 -0700</delta_ts>
            <desc>HistoryController back pointer</desc>
            <filename>bug-30274-20091010024206.patch</filename>
            <type>text/plain</type>
            <size>30303</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZTExZGQzOC4uZjU5NWMxNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MCBAQAorMjAwOS0xMC0xMSAgQWRhbSBCYXJ0aCAg
PGFiYXJ0aEB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEhpc3RvcnlDb250cm9sbGVyIHNob3VsZCBwb2ludCBiYWNrIHRvIEZyYW1l
TG9hZGVyIG5vdCBGcmFtZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MzAyNzQKKworICAgICAgICBIaXN0b3J5Q29udHJvbGxlciBpcyBhICJzdWJjb250
cm9sbGVyIiBvZiBGcmFtZUxvYWRlci4gIEluc3RlYWQgb2YKKyAgICAgICAgcG9pbnRpbmcgYmFj
ayBkaXJlY3RseSB0byBGcmFtZSwgSGlzdG9yeUNvbnRyb2xsZXIgc2hvdWxkIGhvbGQgYSBiYWNr
CisgICAgICAgIHBvaW50ZXIgdG8gRnJhbWVMb2FkZXIuCisKKyAgICAgICAgKiBsb2FkZXIvRnJh
bWVMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OkZyYW1lTG9hZGVy
KToKKyAgICAgICAgKiBsb2FkZXIvSGlzdG9yeUNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SGlzdG9yeUNvbnRyb2xsZXI6Okhpc3RvcnlDb250cm9sbGVyKToKKyAgICAgICAgKFdl
YkNvcmU6Okhpc3RvcnlDb250cm9sbGVyOjpzYXZlU2Nyb2xsUG9zaXRpb25BbmRWaWV3U3RhdGVU
b0l0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6SGlzdG9yeUNvbnRyb2xsZXI6OnJlc3RvcmVTY3Jv
bGxQb3NpdGlvbkFuZFZpZXdTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIaXN0b3J5Q29udHJv
bGxlcjo6c2F2ZURvY3VtZW50U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SGlzdG9yeUNvbnRy
b2xsZXI6OnNhdmVEb2N1bWVudEFuZFNjcm9sbFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okhp
c3RvcnlDb250cm9sbGVyOjpyZXN0b3JlRG9jdW1lbnRTdGF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpIaXN0b3J5Q29udHJvbGxlcjo6aW52YWxpZGF0ZUN1cnJlbnRJdGVtQ2FjaGVkUGFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpIaXN0b3J5Q29udHJvbGxlcjo6Z29Ub0l0ZW0pOgorICAgICAgICAo
V2ViQ29yZTo6SGlzdG9yeUNvbnRyb2xsZXI6OnVybHNNYXRjaEl0ZW0pOgorICAgICAgICAoV2Vi
Q29yZTo6SGlzdG9yeUNvbnRyb2xsZXI6OnVwZGF0ZUZvckJhY2tGb3J3YXJkTmF2aWdhdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpIaXN0b3J5Q29udHJvbGxlcjo6dXBkYXRlRm9yUmVsb2FkKToK
KyAgICAgICAgKFdlYkNvcmU6Okhpc3RvcnlDb250cm9sbGVyOjp1cGRhdGVGb3JTdGFuZGFyZExv
YWQpOgorICAgICAgICAoV2ViQ29yZTo6SGlzdG9yeUNvbnRyb2xsZXI6OnVwZGF0ZUZvclJlZGly
ZWN0V2l0aExvY2tlZEJhY2tGb3J3YXJkTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpIaXN0b3J5
Q29udHJvbGxlcjo6dXBkYXRlRm9yQ2xpZW50UmVkaXJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
SGlzdG9yeUNvbnRyb2xsZXI6OnVwZGF0ZUZvckNvbW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpI
aXN0b3J5Q29udHJvbGxlcjo6dXBkYXRlRm9yQW5jaG9yU2Nyb2xsKToKKyAgICAgICAgKFdlYkNv
cmU6Okhpc3RvcnlDb250cm9sbGVyOjpjcmVhdGVJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6Okhp
c3RvcnlDb250cm9sbGVyOjpjcmVhdGVJdGVtVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpIaXN0
b3J5Q29udHJvbGxlcjo6cmVjdXJzaXZlR29Ub0l0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6SGlz
dG9yeUNvbnRyb2xsZXI6OmNoaWxkRnJhbWVzTWF0Y2hJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6
Okhpc3RvcnlDb250cm9sbGVyOjp1cGRhdGVCYWNrRm9yd2FyZExpc3RDbGlwcGVkQXRUYXJnZXQp
OgorICAgICAgICAqIGxvYWRlci9IaXN0b3J5Q29udHJvbGxlci5oOgorCiAyMDA5LTEwLTEwICBB
ZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgT2xp
dmVyIEh1bnQuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAgYi9X
ZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKaW5kZXggNTk5MjhlNC4uOWNjMTlkNyAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCisrKyBiL1dlYkNvcmUvbG9h
ZGVyL0ZyYW1lTG9hZGVyLmNwcApAQCAtMTY3LDcgKzE2Nyw3IEBAIEZyYW1lTG9hZGVyOjpGcmFt
ZUxvYWRlcihGcmFtZSogZnJhbWUsIEZyYW1lTG9hZGVyQ2xpZW50KiBjbGllbnQpCiAgICAgOiBt
X2ZyYW1lKGZyYW1lKQogICAgICwgbV9jbGllbnQoY2xpZW50KQogICAgICwgbV9wb2xpY3lDaGVj
a2VyKGZyYW1lKQotICAgICwgbV9oaXN0b3J5KGZyYW1lKQorICAgICwgbV9oaXN0b3J5KHRoaXMp
CiAgICAgLCBtX3N0YXRlKEZyYW1lU3RhdGVDb21taXR0ZWRQYWdlKQogICAgICwgbV9sb2FkVHlw
ZShGcmFtZUxvYWRUeXBlU3RhbmRhcmQpCiAgICAgLCBtX2RlbGVnYXRlSXNIYW5kbGluZ1Byb3Zp
c2lvbmFsTG9hZEVycm9yKGZhbHNlKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9sb2FkZXIvSGlzdG9y
eUNvbnRyb2xsZXIuY3BwIGIvV2ViQ29yZS9sb2FkZXIvSGlzdG9yeUNvbnRyb2xsZXIuY3BwCmlu
ZGV4IDUwMTY0MGEuLjg5MmNjZjIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvbG9hZGVyL0hpc3RvcnlD
b250cm9sbGVyLmNwcAorKysgYi9XZWJDb3JlL2xvYWRlci9IaXN0b3J5Q29udHJvbGxlci5jcHAK
QEAgLTQ4LDggKzQ4LDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1IaXN0b3J5Q29udHJv
bGxlcjo6SGlzdG9yeUNvbnRyb2xsZXIoRnJhbWUqIGZyYW1lKQotICAgIDogbV9mcmFtZShmcmFt
ZSkKK0hpc3RvcnlDb250cm9sbGVyOjpIaXN0b3J5Q29udHJvbGxlcihGcmFtZUxvYWRlciogZnJh
bWVMb2FkZXIpCisgICAgOiBtX2ZyYW1lTG9hZGVyKGZyYW1lTG9hZGVyKQogewogfQogCkBAIC01
OSwxMiArNTksMTIgQEAgSGlzdG9yeUNvbnRyb2xsZXI6On5IaXN0b3J5Q29udHJvbGxlcigpCiAK
IHZvaWQgSGlzdG9yeUNvbnRyb2xsZXI6OnNhdmVTY3JvbGxQb3NpdGlvbkFuZFZpZXdTdGF0ZVRv
SXRlbShIaXN0b3J5SXRlbSogaXRlbSkKIHsKLSAgICBpZiAoIWl0ZW0gfHwgIW1fZnJhbWUtPnZp
ZXcoKSkKKyAgICBpZiAoIWl0ZW0gfHwgIW1fZnJhbWVMb2FkZXItPmZyYW1lKCktPnZpZXcoKSkK
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICBpdGVtLT5zZXRTY3JvbGxQb2ludChtX2Zy
YW1lLT52aWV3KCktPnNjcm9sbFBvc2l0aW9uKCkpOworICAgIGl0ZW0tPnNldFNjcm9sbFBvaW50
KG1fZnJhbWVMb2FkZXItPmZyYW1lKCktPnZpZXcoKS0+c2Nyb2xsUG9zaXRpb24oKSk7CiAgICAg
Ly8gRklYTUU6IEl0IHdvdWxkIGJlIGdyZWF0IHRvIHdvcmsgb3V0IGEgd2F5IHRvIHB1dCB0aGlz
IGNvZGUgaW4gV2ViQ29yZSBpbnN0ZWFkIG9mIGNhbGxpbmcgdGhyb3VnaCB0byB0aGUgY2xpZW50
LgotICAgIG1fZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+c2F2ZVZpZXdTdGF0ZVRvSXRlbShp
dGVtKTsKKyAgICBtX2ZyYW1lTG9hZGVyLT5jbGllbnQoKS0+c2F2ZVZpZXdTdGF0ZVRvSXRlbShp
dGVtKTsKIH0KIAogLyoKQEAgLTgwLDcgKzgwLDcgQEAgdm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6
c2F2ZVNjcm9sbFBvc2l0aW9uQW5kVmlld1N0YXRlVG9JdGVtKEhpc3RvcnlJdGVtKiBpdGVtKQog
Ki8KIHZvaWQgSGlzdG9yeUNvbnRyb2xsZXI6OnJlc3RvcmVTY3JvbGxQb3NpdGlvbkFuZFZpZXdT
dGF0ZSgpCiB7Ci0gICAgaWYgKCFtX2ZyYW1lLT5sb2FkZXIoKS0+Y29tbWl0dGVkRmlyc3RSZWFs
RG9jdW1lbnRMb2FkKCkpCisgICAgaWYgKCFtX2ZyYW1lTG9hZGVyLT5jb21taXR0ZWRGaXJzdFJl
YWxEb2N1bWVudExvYWQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQVNTRVJUKG1fY3VycmVu
dEl0ZW0pOwpAQCAtOTUsOSArOTUsOSBAQCB2b2lkIEhpc3RvcnlDb250cm9sbGVyOjpyZXN0b3Jl
U2Nyb2xsUG9zaXRpb25BbmRWaWV3U3RhdGUoKQogICAgIAogICAgIC8vIEZJWE1FOiBJdCB3b3Vs
ZCBiZSBncmVhdCB0byB3b3JrIG91dCBhIHdheSB0byBwdXQgdGhpcyBjb2RlIGluIFdlYkNvcmUg
aW5zdGVhZCBvZiBjYWxsaW5nCiAgICAgLy8gdGhyb3VnaCB0byB0aGUgY2xpZW50LiBJdCdzIGN1
cnJlbnRseSB1c2VkIG9ubHkgZm9yIHRoZSBQREYgdmlldyBvbiBNYWMuCi0gICAgbV9mcmFtZS0+
bG9hZGVyKCktPmNsaWVudCgpLT5yZXN0b3JlVmlld1N0YXRlKCk7CisgICAgbV9mcmFtZUxvYWRl
ci0+Y2xpZW50KCktPnJlc3RvcmVWaWV3U3RhdGUoKTsKICAgICAKLSAgICBpZiAoRnJhbWVWaWV3
KiB2aWV3ID0gbV9mcmFtZS0+dmlldygpKQorICAgIGlmIChGcmFtZVZpZXcqIHZpZXcgPSBtX2Zy
YW1lTG9hZGVyLT5mcmFtZSgpLT52aWV3KCkpCiAgICAgICAgIGlmICghdmlldy0+d2FzU2Nyb2xs
ZWRCeVVzZXIoKSkKICAgICAgICAgICAgIHZpZXctPnNldFNjcm9sbFBvc2l0aW9uKG1fY3VycmVu
dEl0ZW0tPnNjcm9sbFBvaW50KCkpOwogfQpAQCAtMTExLDcgKzExMSw3IEBAIHZvaWQgSGlzdG9y
eUNvbnRyb2xsZXI6OnNhdmVEb2N1bWVudFN0YXRlKCkKIHsKICAgICAvLyBGSVhNRTogUmVhZGlu
ZyB0aGlzIGJpdCBvZiBGcmFtZUxvYWRlciBzdGF0ZSBoZXJlIGlzIHVuZm9ydHVuYXRlLiAgSSBu
ZWVkIHRvIHN0dWR5CiAgICAgLy8gdGhpcyBtb3JlIHRvIHNlZSBpZiB3ZSBjYW4gcmVtb3ZlIHRo
aXMgZGVwZW5kZW5jeS4KLSAgICBpZiAobV9mcmFtZS0+bG9hZGVyKCktPmNyZWF0aW5nSW5pdGlh
bEVtcHR5RG9jdW1lbnQoKSkKKyAgICBpZiAobV9mcmFtZUxvYWRlci0+Y3JlYXRpbmdJbml0aWFs
RW1wdHlEb2N1bWVudCgpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBGb3IgYSBzdGFuZGFy
ZCBwYWdlIGxvYWQsIHdlIHdpbGwgaGF2ZSBhIHByZXZpb3VzIGl0ZW0gc2V0LCB3aGljaCB3aWxs
IGJlIHVzZWQgdG8KQEAgLTEyOSwxMSArMTI5LDExIEBAIHZvaWQgSGlzdG9yeUNvbnRyb2xsZXI6
OnNhdmVEb2N1bWVudFN0YXRlKCkKICAgICBpZiAoIWl0ZW0pCiAgICAgICAgIHJldHVybjsKIAot
ICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fZnJhbWUtPmRvY3VtZW50KCk7CisgICAgRG9jdW1l
bnQqIGRvY3VtZW50ID0gbV9mcmFtZUxvYWRlci0+ZnJhbWUoKS0+ZG9jdW1lbnQoKTsKICAgICBB
U1NFUlQoZG9jdW1lbnQpOwogICAgIAogICAgIGlmIChpdGVtLT5pc0N1cnJlbnREb2N1bWVudChk
b2N1bWVudCkpIHsKLSAgICAgICAgTE9HKExvYWRpbmcsICJXZWJDb3JlTG9hZGluZyAlczogc2F2
aW5nIGZvcm0gc3RhdGUgdG8gJXAiLCBtX2ZyYW1lLT50cmVlKCktPm5hbWUoKS5zdHJpbmcoKS51
dGY4KCkuZGF0YSgpLCBpdGVtKTsKKyAgICAgICAgTE9HKExvYWRpbmcsICJXZWJDb3JlTG9hZGlu
ZyAlczogc2F2aW5nIGZvcm0gc3RhdGUgdG8gJXAiLCBtX2ZyYW1lTG9hZGVyLT5mcmFtZSgpLT50
cmVlKCktPm5hbWUoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBpdGVtKTsKICAgICAgICAgaXRl
bS0+c2V0RG9jdW1lbnRTdGF0ZShkb2N1bWVudC0+Zm9ybUVsZW1lbnRzU3RhdGUoKSk7CiAgICAg
fQogfQpAQCAtMTQyLDcgKzE0Miw3IEBAIHZvaWQgSGlzdG9yeUNvbnRyb2xsZXI6OnNhdmVEb2N1
bWVudFN0YXRlKCkKIC8vIGhpc3RvcnkgaXRlbS4KIHZvaWQgSGlzdG9yeUNvbnRyb2xsZXI6OnNh
dmVEb2N1bWVudEFuZFNjcm9sbFN0YXRlKCkKIHsKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IG1f
ZnJhbWU7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnRyYXZlcnNlTmV4dChtX2ZyYW1l
KSkgeworICAgIGZvciAoRnJhbWUqIGZyYW1lID0gbV9mcmFtZUxvYWRlci0+ZnJhbWUoKTsgZnJh
bWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+dHJhdmVyc2VOZXh0KG1fZnJhbWVMb2FkZXItPmZy
YW1lKCkpKSB7CiAgICAgICAgIGZyYW1lLT5sb2FkZXIoKS0+aGlzdG9yeSgpLT5zYXZlRG9jdW1l
bnRTdGF0ZSgpOwogICAgICAgICBmcmFtZS0+bG9hZGVyKCktPmhpc3RvcnkoKS0+c2F2ZVNjcm9s
bFBvc2l0aW9uQW5kVmlld1N0YXRlVG9JdGVtKGZyYW1lLT5sb2FkZXIoKS0+aGlzdG9yeSgpLT5j
dXJyZW50SXRlbSgpKTsKICAgICB9CkBAIC0xNTAsMTEgKzE1MCwxMSBAQCB2b2lkIEhpc3RvcnlD
b250cm9sbGVyOjpzYXZlRG9jdW1lbnRBbmRTY3JvbGxTdGF0ZSgpCiAKIHZvaWQgSGlzdG9yeUNv
bnRyb2xsZXI6OnJlc3RvcmVEb2N1bWVudFN0YXRlKCkKIHsKLSAgICBEb2N1bWVudCogZG9jID0g
bV9mcmFtZS0+ZG9jdW1lbnQoKTsKKyAgICBEb2N1bWVudCogZG9jID0gbV9mcmFtZUxvYWRlci0+
ZnJhbWUoKS0+ZG9jdW1lbnQoKTsKICAgICAgICAgCiAgICAgSGlzdG9yeUl0ZW0qIGl0ZW1Ub1Jl
c3RvcmUgPSAwOwogICAgIAotICAgIHN3aXRjaCAobV9mcmFtZS0+bG9hZGVyKCktPmxvYWRUeXBl
KCkpIHsKKyAgICBzd2l0Y2ggKG1fZnJhbWVMb2FkZXItPmxvYWRUeXBlKCkpIHsKICAgICAgICAg
Y2FzZSBGcmFtZUxvYWRUeXBlUmVsb2FkOgogICAgICAgICBjYXNlIEZyYW1lTG9hZFR5cGVSZWxv
YWRGcm9tT3JpZ2luOgogICAgICAgICBjYXNlIEZyYW1lTG9hZFR5cGVTYW1lOgpAQCAtMTcyLDcg
KzE3Miw3IEBAIHZvaWQgSGlzdG9yeUNvbnRyb2xsZXI6OnJlc3RvcmVEb2N1bWVudFN0YXRlKCkK
ICAgICBpZiAoIWl0ZW1Ub1Jlc3RvcmUpCiAgICAgICAgIHJldHVybjsKIAotICAgIExPRyhMb2Fk
aW5nLCAiV2ViQ29yZUxvYWRpbmcgJXM6IHJlc3RvcmluZyBmb3JtIHN0YXRlIGZyb20gJXAiLCBt
X2ZyYW1lLT50cmVlKCktPm5hbWUoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBpdGVtVG9SZXN0
b3JlKTsKKyAgICBMT0coTG9hZGluZywgIldlYkNvcmVMb2FkaW5nICVzOiByZXN0b3JpbmcgZm9y
bSBzdGF0ZSBmcm9tICVwIiwgbV9mcmFtZUxvYWRlci0+ZnJhbWUoKS0+dHJlZSgpLT5uYW1lKCku
c3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgaXRlbVRvUmVzdG9yZSk7CiAgICAgZG9jLT5zZXRTdGF0
ZUZvck5ld0Zvcm1FbGVtZW50cyhpdGVtVG9SZXN0b3JlLT5kb2N1bWVudFN0YXRlKCkpOwogfQog
CkBAIC0xODUsOCArMTg1LDggQEAgdm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6aW52YWxpZGF0ZUN1
cnJlbnRJdGVtQ2FjaGVkUGFnZSgpCiAgICAgLy8gU29tZWhvdyB0aGUgUGFnZVN0YXRlIG9iamVj
dCBpcyBub3QgcHJvcGVybHkgdXBkYXRlZCwgYW5kIGlzIGhvbGRpbmcgb250byBhIHN0YWxlIGRv
Y3VtZW50LgogICAgIC8vIEJvdGggWGNvZGUgYW5kIEZpbGVNYWtlciBzZWUgdGhpcyBjcmFzaCwg
U2FmYXJpIGRvZXMgbm90LgogICAgIAotICAgIEFTU0VSVCghY2FjaGVkUGFnZSB8fCBjYWNoZWRQ
YWdlLT5kb2N1bWVudCgpID09IG1fZnJhbWUtPmRvY3VtZW50KCkpOwotICAgIGlmIChjYWNoZWRQ
YWdlICYmIGNhY2hlZFBhZ2UtPmRvY3VtZW50KCkgPT0gbV9mcmFtZS0+ZG9jdW1lbnQoKSkgewor
ICAgIEFTU0VSVCghY2FjaGVkUGFnZSB8fCBjYWNoZWRQYWdlLT5kb2N1bWVudCgpID09IG1fZnJh
bWVMb2FkZXItPmZyYW1lKCktPmRvY3VtZW50KCkpOworICAgIGlmIChjYWNoZWRQYWdlICYmIGNh
Y2hlZFBhZ2UtPmRvY3VtZW50KCkgPT0gbV9mcmFtZUxvYWRlci0+ZnJhbWUoKS0+ZG9jdW1lbnQo
KSkgewogICAgICAgICBjYWNoZWRQYWdlLT5kb2N1bWVudCgpLT5zZXRJblBhZ2VDYWNoZShmYWxz
ZSk7CiAgICAgICAgIGNhY2hlZFBhZ2UtPmNsZWFyKCk7CiAgICAgfQpAQCAtMTk5LDE2ICsxOTks
MTYgQEAgdm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6aW52YWxpZGF0ZUN1cnJlbnRJdGVtQ2FjaGVk
UGFnZSgpCiAvLyBUaGlzIGluY2x1ZGVzIHJlY3Vyc2lvbiB0byBoYW5kbGUgbG9hZGluZyBpbnRv
IGZyYW1lc2V0cyBwcm9wZXJseQogdm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6Z29Ub0l0ZW0oSGlz
dG9yeUl0ZW0qIHRhcmdldEl0ZW0sIEZyYW1lTG9hZFR5cGUgdHlwZSkKIHsKLSAgICBBU1NFUlQo
IW1fZnJhbWUtPnRyZWUoKS0+cGFyZW50KCkpOworICAgIEFTU0VSVCghbV9mcmFtZUxvYWRlci0+
ZnJhbWUoKS0+dHJlZSgpLT5wYXJlbnQoKSk7CiAgICAgCiAgICAgLy8gc2hvdWxkR29Ub0hpc3Rv
cnlJdGVtIGlzIGEgcHJpdmF0ZSBkZWxlZ2F0ZSBtZXRob2QuIFRoaXMgaXMgbmVlZGVkIHRvIGZp
eDoKICAgICAvLyA8cmRhcjovL3Byb2JsZW0vMzk1MTI4Mz4gY2FuIHZpZXcgcGFnZXMgZnJvbSB0
aGUgYmFjay9mb3J3YXJkIGNhY2hlIHRoYXQgc2hvdWxkIGJlIGRpc2FsbG93ZWQgYnkgUGFyZW50
YWwgQ29udHJvbHMKICAgICAvLyBVbHRpbWF0ZWx5LCBoaXN0b3J5IGl0ZW0gbmF2aWdhdGlvbnMg
c2hvdWxkIGdvIHRocm91Z2ggdGhlIHBvbGljeSBkZWxlZ2F0ZS4gVGhhdCdzIGNvdmVyZWQgaW46
CiAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzM5Nzk1Mzk+IGJhY2svZm9yd2FyZCBjYWNoZSBuYXZp
Z2F0aW9ucyBzaG91bGQgY29uc3VsdCBwb2xpY3kgZGVsZWdhdGUKLSAgICBQYWdlKiBwYWdlID0g
bV9mcmFtZS0+cGFnZSgpOworICAgIFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lTG9hZGVyLT5mcmFtZSgp
LT5wYWdlKCk7CiAgICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFtX2Zy
YW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPnNob3VsZEdvVG9IaXN0b3J5SXRlbSh0YXJnZXRJdGVt
KSkKKyAgICBpZiAoIW1fZnJhbWVMb2FkZXItPmNsaWVudCgpLT5zaG91bGRHb1RvSGlzdG9yeUl0
ZW0odGFyZ2V0SXRlbSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFNldCB0aGUgQkYgY3Vy
c29yIGJlZm9yZSBjb21taXQsIHdoaWNoIGxldHMgdGhlIHVzZXIgcXVpY2tseSBjbGljayBiYWNr
L2ZvcndhcmQgYWdhaW4uCkBAIC0yMTcsNyArMjE3LDcgQEAgdm9pZCBIaXN0b3J5Q29udHJvbGxl
cjo6Z29Ub0l0ZW0oSGlzdG9yeUl0ZW0qIHRhcmdldEl0ZW0sIEZyYW1lTG9hZFR5cGUgdHlwZSkK
ICAgICBCYWNrRm9yd2FyZExpc3QqIGJmTGlzdCA9IHBhZ2UtPmJhY2tGb3J3YXJkTGlzdCgpOwog
ICAgIEhpc3RvcnlJdGVtKiBjdXJyZW50SXRlbSA9IGJmTGlzdC0+Y3VycmVudEl0ZW0oKTsgICAg
CiAgICAgYmZMaXN0LT5nb1RvSXRlbSh0YXJnZXRJdGVtKTsKLSAgICBTZXR0aW5ncyogc2V0dGlu
Z3MgPSBtX2ZyYW1lLT5zZXR0aW5ncygpOworICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IG1fZnJh
bWVMb2FkZXItPmZyYW1lKCktPnNldHRpbmdzKCk7CiAgICAgcGFnZS0+c2V0R2xvYmFsSGlzdG9y
eUl0ZW0oKCFzZXR0aW5ncyB8fCBzZXR0aW5ncy0+cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpKSA/
IDAgOiB0YXJnZXRJdGVtKTsKICAgICByZWN1cnNpdmVHb1RvSXRlbSh0YXJnZXRJdGVtLCBjdXJy
ZW50SXRlbSwgdHlwZSk7CiB9CkBAIC0yMjUsNyArMjI1LDcgQEAgdm9pZCBIaXN0b3J5Q29udHJv
bGxlcjo6Z29Ub0l0ZW0oSGlzdG9yeUl0ZW0qIHRhcmdldEl0ZW0sIEZyYW1lTG9hZFR5cGUgdHlw
ZSkKIC8vIFdhbGsgdGhlIGZyYW1lIHRyZWUgYW5kIGVuc3VyZSB0aGF0IHRoZSBVUkxzIG1hdGNo
IHRoZSBVUkxzIGluIHRoZSBpdGVtLgogYm9vbCBIaXN0b3J5Q29udHJvbGxlcjo6dXJsc01hdGNo
SXRlbShIaXN0b3J5SXRlbSogaXRlbSkgY29uc3QKIHsKLSAgICBjb25zdCBLVVJMJiBjdXJyZW50
VVJMID0gbV9mcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPnVybCgpOworICAgIGNv
bnN0IEtVUkwmIGN1cnJlbnRVUkwgPSBtX2ZyYW1lTG9hZGVyLT5kb2N1bWVudExvYWRlcigpLT51
cmwoKTsKICAgICBpZiAoIWVxdWFsSWdub3JpbmdGcmFnbWVudElkZW50aWZpZXIoY3VycmVudFVS
TCwgaXRlbS0+dXJsKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTIzMyw3ICsyMzMs
NyBAQCBib29sIEhpc3RvcnlDb250cm9sbGVyOjp1cmxzTWF0Y2hJdGVtKEhpc3RvcnlJdGVtKiBp
dGVtKSBjb25zdAogCiAgICAgdW5zaWduZWQgc2l6ZSA9IGNoaWxkSXRlbXMuc2l6ZSgpOwogICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgRnJhbWUqIGNo
aWxkRnJhbWUgPSBtX2ZyYW1lLT50cmVlKCktPmNoaWxkKGNoaWxkSXRlbXNbaV0tPnRhcmdldCgp
KTsKKyAgICAgICAgRnJhbWUqIGNoaWxkRnJhbWUgPSBtX2ZyYW1lTG9hZGVyLT5mcmFtZSgpLT50
cmVlKCktPmNoaWxkKGNoaWxkSXRlbXNbaV0tPnRhcmdldCgpKTsKICAgICAgICAgaWYgKGNoaWxk
RnJhbWUgJiYgIWNoaWxkRnJhbWUtPmxvYWRlcigpLT5oaXN0b3J5KCktPnVybHNNYXRjaEl0ZW0o
Y2hpbGRJdGVtc1tpXS5nZXQoKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpA
QCAtMjQ0LDggKzI0NCw4IEBAIGJvb2wgSGlzdG9yeUNvbnRyb2xsZXI6OnVybHNNYXRjaEl0ZW0o
SGlzdG9yeUl0ZW0qIGl0ZW0pIGNvbnN0CiB2b2lkIEhpc3RvcnlDb250cm9sbGVyOjp1cGRhdGVG
b3JCYWNrRm9yd2FyZE5hdmlnYXRpb24oKQogewogI2lmICFMT0dfRElTQUJMRUQKLSAgICBpZiAo
bV9mcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCkpCi0gICAgICAgIExPRyhIaXN0b3J5
LCAiV2ViQ29yZUhpc3Rvcnk6IFVwZGF0aW5nIEhpc3RvcnkgZm9yIGJhY2svZm9yd2FyZCBuYXZp
Z2F0aW9uIGluIGZyYW1lICVzIiwgbV9mcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCkt
PnRpdGxlKCkudXRmOCgpLmRhdGEoKSk7CisgICAgaWYgKG1fZnJhbWVMb2FkZXItPmRvY3VtZW50
TG9hZGVyKCkpCisgICAgICAgIExPRyhIaXN0b3J5LCAiV2ViQ29yZUhpc3Rvcnk6IFVwZGF0aW5n
IEhpc3RvcnkgZm9yIGJhY2svZm9yd2FyZCBuYXZpZ2F0aW9uIGluIGZyYW1lICVzIiwgbV9mcmFt
ZUxvYWRlci0+ZG9jdW1lbnRMb2FkZXIoKS0+dGl0bGUoKS51dGY4KCkuZGF0YSgpKTsKICNlbmRp
ZgogCiAgICAgLy8gTXVzdCBncmFiIHRoZSBjdXJyZW50IHNjcm9sbCBwb3NpdGlvbiBiZWZvcmUg
ZGlzdHVyYmluZyBpdApAQCAtMjU1LDE5ICsyNTUsMTkgQEAgdm9pZCBIaXN0b3J5Q29udHJvbGxl
cjo6dXBkYXRlRm9yQmFja0ZvcndhcmROYXZpZ2F0aW9uKCkKIHZvaWQgSGlzdG9yeUNvbnRyb2xs
ZXI6OnVwZGF0ZUZvclJlbG9hZCgpCiB7CiAjaWYgIUxPR19ESVNBQkxFRAotICAgIGlmIChtX2Zy
YW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKSkKLSAgICAgICAgTE9HKEhpc3RvcnksICJX
ZWJDb3JlSGlzdG9yeTogVXBkYXRpbmcgSGlzdG9yeSBmb3IgcmVsb2FkIGluIGZyYW1lICVzIiwg
bV9mcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPnRpdGxlKCkudXRmOCgpLmRhdGEo
KSk7CisgICAgaWYgKG1fZnJhbWVMb2FkZXItPmRvY3VtZW50TG9hZGVyKCkpCisgICAgICAgIExP
RyhIaXN0b3J5LCAiV2ViQ29yZUhpc3Rvcnk6IFVwZGF0aW5nIEhpc3RvcnkgZm9yIHJlbG9hZCBp
biBmcmFtZSAlcyIsIG1fZnJhbWVMb2FkZXItPmRvY3VtZW50TG9hZGVyKCktPnRpdGxlKCkudXRm
OCgpLmRhdGEoKSk7CiAjZW5kaWYKIAogICAgIGlmIChtX2N1cnJlbnRJdGVtKSB7CiAgICAgICAg
IHBhZ2VDYWNoZSgpLT5yZW1vdmUobV9jdXJyZW50SXRlbS5nZXQoKSk7CiAgICAgCi0gICAgICAg
IGlmIChtX2ZyYW1lLT5sb2FkZXIoKS0+bG9hZFR5cGUoKSA9PSBGcmFtZUxvYWRUeXBlUmVsb2Fk
IHx8IG1fZnJhbWUtPmxvYWRlcigpLT5sb2FkVHlwZSgpID09IEZyYW1lTG9hZFR5cGVSZWxvYWRG
cm9tT3JpZ2luKQorICAgICAgICBpZiAobV9mcmFtZUxvYWRlci0+bG9hZFR5cGUoKSA9PSBGcmFt
ZUxvYWRUeXBlUmVsb2FkIHx8IG1fZnJhbWVMb2FkZXItPmxvYWRUeXBlKCkgPT0gRnJhbWVMb2Fk
VHlwZVJlbG9hZEZyb21PcmlnaW4pCiAgICAgICAgICAgICBzYXZlU2Nyb2xsUG9zaXRpb25BbmRW
aWV3U3RhdGVUb0l0ZW0obV9jdXJyZW50SXRlbS5nZXQoKSk7CiAgICAgCiAgICAgICAgIC8vIFNv
bWV0aW1lcyBsb2FkaW5nIGEgcGFnZSBhZ2FpbiBsZWFkcyB0byBhIGRpZmZlcmVudCByZXN1bHQg
YmVjYXVzZSBvZiBjb29raWVzLiBCdWd6aWxsYSA0MDcyCi0gICAgICAgIGlmIChtX2ZyYW1lLT5s
b2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+dW5yZWFjaGFibGVVUkwoKS5pc0VtcHR5KCkpCi0g
ICAgICAgICAgICBtX2N1cnJlbnRJdGVtLT5zZXRVUkwobV9mcmFtZS0+bG9hZGVyKCktPmRvY3Vt
ZW50TG9hZGVyKCktPnJlcXVlc3RVUkwoKSk7CisgICAgICAgIGlmIChtX2ZyYW1lTG9hZGVyLT5k
b2N1bWVudExvYWRlcigpLT51bnJlYWNoYWJsZVVSTCgpLmlzRW1wdHkoKSkKKyAgICAgICAgICAg
IG1fY3VycmVudEl0ZW0tPnNldFVSTChtX2ZyYW1lTG9hZGVyLT5kb2N1bWVudExvYWRlcigpLT5y
ZXF1ZXN0VVJMKCkpOwogICAgIH0KIH0KIApAQCAtMjc5LDg5ICsyNzksODcgQEAgdm9pZCBIaXN0
b3J5Q29udHJvbGxlcjo6dXBkYXRlRm9yUmVsb2FkKCkKIAogdm9pZCBIaXN0b3J5Q29udHJvbGxl
cjo6dXBkYXRlRm9yU3RhbmRhcmRMb2FkKCkKIHsKLSAgICBMT0coSGlzdG9yeSwgIldlYkNvcmVI
aXN0b3J5OiBVcGRhdGluZyBIaXN0b3J5IGZvciBTdGFuZGFyZCBMb2FkIGluIGZyYW1lICVzIiwg
bV9mcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPnVybCgpLnN0cmluZygpLmFzY2lp
KCkuZGF0YSgpKTsKKyAgICBMT0coSGlzdG9yeSwgIldlYkNvcmVIaXN0b3J5OiBVcGRhdGluZyBI
aXN0b3J5IGZvciBTdGFuZGFyZCBMb2FkIGluIGZyYW1lICVzIiwgbV9mcmFtZUxvYWRlci0+ZG9j
dW1lbnRMb2FkZXIoKS0+dXJsKCkuc3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOwogCi0gICAgRnJh
bWVMb2FkZXIqIGZyYW1lTG9hZGVyID0gbV9mcmFtZS0+bG9hZGVyKCk7Ci0KLSAgICBTZXR0aW5n
cyogc2V0dGluZ3MgPSBtX2ZyYW1lLT5zZXR0aW5ncygpOworICAgIFNldHRpbmdzKiBzZXR0aW5n
cyA9IG1fZnJhbWVMb2FkZXItPmZyYW1lKCktPnNldHRpbmdzKCk7CiAgICAgYm9vbCBuZWVkUHJp
dmFjeSA9ICFzZXR0aW5ncyB8fCBzZXR0aW5ncy0+cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpOwot
ICAgIGNvbnN0IEtVUkwmIGhpc3RvcnlVUkwgPSBmcmFtZUxvYWRlci0+ZG9jdW1lbnRMb2FkZXIo
KS0+dXJsRm9ySGlzdG9yeSgpOworICAgIGNvbnN0IEtVUkwmIGhpc3RvcnlVUkwgPSBtX2ZyYW1l
TG9hZGVyLT5kb2N1bWVudExvYWRlcigpLT51cmxGb3JIaXN0b3J5KCk7CiAKLSAgICBpZiAoIWZy
YW1lTG9hZGVyLT5kb2N1bWVudExvYWRlcigpLT5pc0NsaWVudFJlZGlyZWN0KCkpIHsKKyAgICBp
ZiAoIW1fZnJhbWVMb2FkZXItPmRvY3VtZW50TG9hZGVyKCktPmlzQ2xpZW50UmVkaXJlY3QoKSkg
ewogICAgICAgICBpZiAoIWhpc3RvcnlVUkwuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICB1cGRh
dGVCYWNrRm9yd2FyZExpc3RDbGlwcGVkQXRUYXJnZXQodHJ1ZSk7CiAgICAgICAgICAgICBpZiAo
IW5lZWRQcml2YWN5KSB7Ci0gICAgICAgICAgICAgICAgZnJhbWVMb2FkZXItPmNsaWVudCgpLT51
cGRhdGVHbG9iYWxIaXN0b3J5KCk7Ci0gICAgICAgICAgICAgICAgZnJhbWVMb2FkZXItPmRvY3Vt
ZW50TG9hZGVyKCktPnNldERpZENyZWF0ZUdsb2JhbEhpc3RvcnlFbnRyeSh0cnVlKTsKLSAgICAg
ICAgICAgICAgICBpZiAoZnJhbWVMb2FkZXItPmRvY3VtZW50TG9hZGVyKCktPnVucmVhY2hhYmxl
VVJMKCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgICAgICBmcmFtZUxvYWRlci0+Y2xpZW50
KCktPnVwZGF0ZUdsb2JhbEhpc3RvcnlSZWRpcmVjdExpbmtzKCk7CisgICAgICAgICAgICAgICAg
bV9mcmFtZUxvYWRlci0+Y2xpZW50KCktPnVwZGF0ZUdsb2JhbEhpc3RvcnkoKTsKKyAgICAgICAg
ICAgICAgICBtX2ZyYW1lTG9hZGVyLT5kb2N1bWVudExvYWRlcigpLT5zZXREaWRDcmVhdGVHbG9i
YWxIaXN0b3J5RW50cnkodHJ1ZSk7CisgICAgICAgICAgICAgICAgaWYgKG1fZnJhbWVMb2FkZXIt
PmRvY3VtZW50TG9hZGVyKCktPnVucmVhY2hhYmxlVVJMKCkuaXNFbXB0eSgpKQorICAgICAgICAg
ICAgICAgICAgICBtX2ZyYW1lTG9hZGVyLT5jbGllbnQoKS0+dXBkYXRlR2xvYmFsSGlzdG9yeVJl
ZGlyZWN0TGlua3MoKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChQYWdlKiBwYWdl
ID0gbV9mcmFtZS0+cGFnZSgpKQorICAgICAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX2ZyYW1l
TG9hZGVyLT5mcmFtZSgpLT5wYWdlKCkpCiAgICAgICAgICAgICAgICAgcGFnZS0+c2V0R2xvYmFs
SGlzdG9yeUl0ZW0obmVlZFByaXZhY3kgPyAwIDogcGFnZS0+YmFja0ZvcndhcmRMaXN0KCktPmN1
cnJlbnRJdGVtKCkpOwogICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChmcmFtZUxvYWRlci0+ZG9j
dW1lbnRMb2FkZXIoKS0+dW5yZWFjaGFibGVVUkwoKS5pc0VtcHR5KCkgJiYgbV9jdXJyZW50SXRl
bSkgewotICAgICAgICBtX2N1cnJlbnRJdGVtLT5zZXRVUkwoZnJhbWVMb2FkZXItPmRvY3VtZW50
TG9hZGVyKCktPnVybCgpKTsKLSAgICAgICAgbV9jdXJyZW50SXRlbS0+c2V0Rm9ybUluZm9Gcm9t
UmVxdWVzdChmcmFtZUxvYWRlci0+ZG9jdW1lbnRMb2FkZXIoKS0+cmVxdWVzdCgpKTsKKyAgICB9
IGVsc2UgaWYgKG1fZnJhbWVMb2FkZXItPmRvY3VtZW50TG9hZGVyKCktPnVucmVhY2hhYmxlVVJM
KCkuaXNFbXB0eSgpICYmIG1fY3VycmVudEl0ZW0pIHsKKyAgICAgICAgbV9jdXJyZW50SXRlbS0+
c2V0VVJMKG1fZnJhbWVMb2FkZXItPmRvY3VtZW50TG9hZGVyKCktPnVybCgpKTsKKyAgICAgICAg
bV9jdXJyZW50SXRlbS0+c2V0Rm9ybUluZm9Gcm9tUmVxdWVzdChtX2ZyYW1lTG9hZGVyLT5kb2N1
bWVudExvYWRlcigpLT5yZXF1ZXN0KCkpOwogICAgIH0KIAogICAgIGlmICghaGlzdG9yeVVSTC5p
c0VtcHR5KCkgJiYgIW5lZWRQcml2YWN5KSB7Ci0gICAgICAgIGlmIChQYWdlKiBwYWdlID0gbV9m
cmFtZS0+cGFnZSgpKQorICAgICAgICBpZiAoUGFnZSogcGFnZSA9IG1fZnJhbWVMb2FkZXItPmZy
YW1lKCktPnBhZ2UoKSkKICAgICAgICAgICAgIHBhZ2UtPmdyb3VwKCkuYWRkVmlzaXRlZExpbmso
aGlzdG9yeVVSTCk7CiAKLSAgICAgICAgaWYgKCFmcmFtZUxvYWRlci0+ZG9jdW1lbnRMb2FkZXIo
KS0+ZGlkQ3JlYXRlR2xvYmFsSGlzdG9yeUVudHJ5KCkgJiYgZnJhbWVMb2FkZXItPmRvY3VtZW50
TG9hZGVyKCktPnVucmVhY2hhYmxlVVJMKCkuaXNFbXB0eSgpICYmICFmcmFtZUxvYWRlci0+dXJs
KCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgZnJhbWVMb2FkZXItPmNsaWVudCgpLT51cGRhdGVH
bG9iYWxIaXN0b3J5UmVkaXJlY3RMaW5rcygpOworICAgICAgICBpZiAoIW1fZnJhbWVMb2FkZXIt
PmRvY3VtZW50TG9hZGVyKCktPmRpZENyZWF0ZUdsb2JhbEhpc3RvcnlFbnRyeSgpICYmIG1fZnJh
bWVMb2FkZXItPmRvY3VtZW50TG9hZGVyKCktPnVucmVhY2hhYmxlVVJMKCkuaXNFbXB0eSgpICYm
ICFtX2ZyYW1lTG9hZGVyLT51cmwoKS5pc0VtcHR5KCkpCisgICAgICAgICAgICBtX2ZyYW1lTG9h
ZGVyLT5jbGllbnQoKS0+dXBkYXRlR2xvYmFsSGlzdG9yeVJlZGlyZWN0TGlua3MoKTsKICAgICB9
CiB9CiAKIHZvaWQgSGlzdG9yeUNvbnRyb2xsZXI6OnVwZGF0ZUZvclJlZGlyZWN0V2l0aExvY2tl
ZEJhY2tGb3J3YXJkTGlzdCgpCiB7CiAjaWYgIUxPR19ESVNBQkxFRAotICAgIGlmIChtX2ZyYW1l
LT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKSkKLSAgICAgICAgTE9HKEhpc3RvcnksICJXZWJD
b3JlSGlzdG9yeTogVXBkYXRpbmcgSGlzdG9yeSBmb3IgcmVkaXJlY3QgbG9hZCBpbiBmcmFtZSAl
cyIsIG1fZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT50aXRsZSgpLnV0ZjgoKS5k
YXRhKCkpOworICAgIGlmIChtX2ZyYW1lTG9hZGVyLT5kb2N1bWVudExvYWRlcigpKQorICAgICAg
ICBMT0coSGlzdG9yeSwgIldlYkNvcmVIaXN0b3J5OiBVcGRhdGluZyBIaXN0b3J5IGZvciByZWRp
cmVjdCBsb2FkIGluIGZyYW1lICVzIiwgbV9mcmFtZUxvYWRlci0+ZG9jdW1lbnRMb2FkZXIoKS0+
dGl0bGUoKS51dGY4KCkuZGF0YSgpKTsKICNlbmRpZgogICAgIAotICAgIFNldHRpbmdzKiBzZXR0
aW5ncyA9IG1fZnJhbWUtPnNldHRpbmdzKCk7CisgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gbV9m
cmFtZUxvYWRlci0+ZnJhbWUoKS0+c2V0dGluZ3MoKTsKICAgICBib29sIG5lZWRQcml2YWN5ID0g
IXNldHRpbmdzIHx8IHNldHRpbmdzLT5wcml2YXRlQnJvd3NpbmdFbmFibGVkKCk7Ci0gICAgY29u
c3QgS1VSTCYgaGlzdG9yeVVSTCA9IG1fZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigp
LT51cmxGb3JIaXN0b3J5KCk7CisgICAgY29uc3QgS1VSTCYgaGlzdG9yeVVSTCA9IG1fZnJhbWVM
b2FkZXItPmRvY3VtZW50TG9hZGVyKCktPnVybEZvckhpc3RvcnkoKTsKIAotICAgIGlmIChtX2Zy
YW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+aXNDbGllbnRSZWRpcmVjdCgpKSB7Ci0g
ICAgICAgIGlmICghbV9jdXJyZW50SXRlbSAmJiAhbV9mcmFtZS0+dHJlZSgpLT5wYXJlbnQoKSkg
eworICAgIGlmIChtX2ZyYW1lTG9hZGVyLT5kb2N1bWVudExvYWRlcigpLT5pc0NsaWVudFJlZGly
ZWN0KCkpIHsKKyAgICAgICAgaWYgKCFtX2N1cnJlbnRJdGVtICYmICFtX2ZyYW1lTG9hZGVyLT5m
cmFtZSgpLT50cmVlKCktPnBhcmVudCgpKSB7CiAgICAgICAgICAgICBpZiAoIWhpc3RvcnlVUkwu
aXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgdXBkYXRlQmFja0ZvcndhcmRMaXN0Q2xpcHBl
ZEF0VGFyZ2V0KHRydWUpOwogICAgICAgICAgICAgICAgIGlmICghbmVlZFByaXZhY3kpIHsKLSAg
ICAgICAgICAgICAgICAgICAgbV9mcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT51cGRhdGVHbG9i
YWxIaXN0b3J5KCk7Ci0gICAgICAgICAgICAgICAgICAgIG1fZnJhbWUtPmxvYWRlcigpLT5kb2N1
bWVudExvYWRlcigpLT5zZXREaWRDcmVhdGVHbG9iYWxIaXN0b3J5RW50cnkodHJ1ZSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChtX2ZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+
dW5yZWFjaGFibGVVUkwoKS5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2Zy
YW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPnVwZGF0ZUdsb2JhbEhpc3RvcnlSZWRpcmVjdExpbmtz
KCk7CisgICAgICAgICAgICAgICAgICAgIG1fZnJhbWVMb2FkZXItPmNsaWVudCgpLT51cGRhdGVH
bG9iYWxIaXN0b3J5KCk7CisgICAgICAgICAgICAgICAgICAgIG1fZnJhbWVMb2FkZXItPmRvY3Vt
ZW50TG9hZGVyKCktPnNldERpZENyZWF0ZUdsb2JhbEhpc3RvcnlFbnRyeSh0cnVlKTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKG1fZnJhbWVMb2FkZXItPmRvY3VtZW50TG9hZGVyKCktPnVucmVh
Y2hhYmxlVVJMKCkuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgbV9mcmFtZUxv
YWRlci0+Y2xpZW50KCktPnVwZGF0ZUdsb2JhbEhpc3RvcnlSZWRpcmVjdExpbmtzKCk7CiAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChQYWdlKiBwYWdlID0gbV9mcmFtZS0+
cGFnZSgpKQorICAgICAgICAgICAgICAgIGlmIChQYWdlKiBwYWdlID0gbV9mcmFtZUxvYWRlci0+
ZnJhbWUoKS0+cGFnZSgpKQogICAgICAgICAgICAgICAgICAgICBwYWdlLT5zZXRHbG9iYWxIaXN0
b3J5SXRlbShuZWVkUHJpdmFjeSA/IDAgOiBwYWdlLT5iYWNrRm9yd2FyZExpc3QoKS0+Y3VycmVu
dEl0ZW0oKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaWYgKG1fY3VycmVu
dEl0ZW0pIHsKLSAgICAgICAgICAgIG1fY3VycmVudEl0ZW0tPnNldFVSTChtX2ZyYW1lLT5sb2Fk
ZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+dXJsKCkpOwotICAgICAgICAgICAgbV9jdXJyZW50SXRl
bS0+c2V0Rm9ybUluZm9Gcm9tUmVxdWVzdChtX2ZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2Fk
ZXIoKS0+cmVxdWVzdCgpKTsKKyAgICAgICAgICAgIG1fY3VycmVudEl0ZW0tPnNldFVSTChtX2Zy
YW1lTG9hZGVyLT5kb2N1bWVudExvYWRlcigpLT51cmwoKSk7CisgICAgICAgICAgICBtX2N1cnJl
bnRJdGVtLT5zZXRGb3JtSW5mb0Zyb21SZXF1ZXN0KG1fZnJhbWVMb2FkZXItPmRvY3VtZW50TG9h
ZGVyKCktPnJlcXVlc3QoKSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBGcmFt
ZSogcGFyZW50RnJhbWUgPSBtX2ZyYW1lLT50cmVlKCktPnBhcmVudCgpOworICAgICAgICBGcmFt
ZSogcGFyZW50RnJhbWUgPSBtX2ZyYW1lTG9hZGVyLT5mcmFtZSgpLT50cmVlKCktPnBhcmVudCgp
OwogICAgICAgICBpZiAocGFyZW50RnJhbWUgJiYgcGFyZW50RnJhbWUtPmxvYWRlcigpLT5oaXN0
b3J5KCktPm1fY3VycmVudEl0ZW0pCiAgICAgICAgICAgICBwYXJlbnRGcmFtZS0+bG9hZGVyKCkt
Pmhpc3RvcnkoKS0+bV9jdXJyZW50SXRlbS0+c2V0Q2hpbGRJdGVtKGNyZWF0ZUl0ZW0odHJ1ZSkp
OwogICAgIH0KIAogICAgIGlmICghaGlzdG9yeVVSTC5pc0VtcHR5KCkgJiYgIW5lZWRQcml2YWN5
KSB7Ci0gICAgICAgIGlmIChQYWdlKiBwYWdlID0gbV9mcmFtZS0+cGFnZSgpKQorICAgICAgICBp
ZiAoUGFnZSogcGFnZSA9IG1fZnJhbWVMb2FkZXItPmZyYW1lKCktPnBhZ2UoKSkKICAgICAgICAg
ICAgIHBhZ2UtPmdyb3VwKCkuYWRkVmlzaXRlZExpbmsoaGlzdG9yeVVSTCk7CiAKLSAgICAgICAg
aWYgKCFtX2ZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+ZGlkQ3JlYXRlR2xvYmFs
SGlzdG9yeUVudHJ5KCkgJiYgbV9mcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPnVu
cmVhY2hhYmxlVVJMKCkuaXNFbXB0eSgpICYmICFtX2ZyYW1lLT5sb2FkZXIoKS0+dXJsKCkuaXNF
bXB0eSgpKQotICAgICAgICAgICAgbV9mcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT51cGRhdGVH
bG9iYWxIaXN0b3J5UmVkaXJlY3RMaW5rcygpOworICAgICAgICBpZiAoIW1fZnJhbWVMb2FkZXIt
PmRvY3VtZW50TG9hZGVyKCktPmRpZENyZWF0ZUdsb2JhbEhpc3RvcnlFbnRyeSgpICYmIG1fZnJh
bWVMb2FkZXItPmRvY3VtZW50TG9hZGVyKCktPnVucmVhY2hhYmxlVVJMKCkuaXNFbXB0eSgpICYm
ICFtX2ZyYW1lTG9hZGVyLT51cmwoKS5pc0VtcHR5KCkpCisgICAgICAgICAgICBtX2ZyYW1lTG9h
ZGVyLT5jbGllbnQoKS0+dXBkYXRlR2xvYmFsSGlzdG9yeVJlZGlyZWN0TGlua3MoKTsKICAgICB9
CiB9CiAKIHZvaWQgSGlzdG9yeUNvbnRyb2xsZXI6OnVwZGF0ZUZvckNsaWVudFJlZGlyZWN0KCkK
IHsKICNpZiAhTE9HX0RJU0FCTEVECi0gICAgaWYgKG1fZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVu
dExvYWRlcigpKQotICAgICAgICBMT0coSGlzdG9yeSwgIldlYkNvcmVIaXN0b3J5OiBVcGRhdGlu
ZyBIaXN0b3J5IGZvciBjbGllbnQgcmVkaXJlY3QgaW4gZnJhbWUgJXMiLCBtX2ZyYW1lLT5sb2Fk
ZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+dGl0bGUoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBpZiAo
bV9mcmFtZUxvYWRlci0+ZG9jdW1lbnRMb2FkZXIoKSkKKyAgICAgICAgTE9HKEhpc3RvcnksICJX
ZWJDb3JlSGlzdG9yeTogVXBkYXRpbmcgSGlzdG9yeSBmb3IgY2xpZW50IHJlZGlyZWN0IGluIGZy
YW1lICVzIiwgbV9mcmFtZUxvYWRlci0+ZG9jdW1lbnRMb2FkZXIoKS0+dGl0bGUoKS51dGY4KCku
ZGF0YSgpKTsKICNlbmRpZgogCiAgICAgLy8gQ2xlYXIgb3V0IGZvcm0gZGF0YSBzbyB3ZSBkb24n
dCB0cnkgdG8gcmVzdG9yZSBpdCBpbnRvIHRoZSBpbmNvbWluZyBwYWdlLiAgTXVzdCBoYXBwZW4g
YWZ0ZXIKQEAgLTM3MSwyNiArMzY5LDI1IEBAIHZvaWQgSGlzdG9yeUNvbnRyb2xsZXI6OnVwZGF0
ZUZvckNsaWVudFJlZGlyZWN0KCkKICAgICAgICAgbV9jdXJyZW50SXRlbS0+Y2xlYXJTY3JvbGxQ
b2ludCgpOwogICAgIH0KIAotICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IG1fZnJhbWUtPnNldHRp
bmdzKCk7CisgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gbV9mcmFtZUxvYWRlci0+ZnJhbWUoKS0+
c2V0dGluZ3MoKTsKICAgICBib29sIG5lZWRQcml2YWN5ID0gIXNldHRpbmdzIHx8IHNldHRpbmdz
LT5wcml2YXRlQnJvd3NpbmdFbmFibGVkKCk7Ci0gICAgY29uc3QgS1VSTCYgaGlzdG9yeVVSTCA9
IG1fZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT51cmxGb3JIaXN0b3J5KCk7Cisg
ICAgY29uc3QgS1VSTCYgaGlzdG9yeVVSTCA9IG1fZnJhbWVMb2FkZXItPmRvY3VtZW50TG9hZGVy
KCktPnVybEZvckhpc3RvcnkoKTsKIAogICAgIGlmICghaGlzdG9yeVVSTC5pc0VtcHR5KCkgJiYg
IW5lZWRQcml2YWN5KSB7Ci0gICAgICAgIGlmIChQYWdlKiBwYWdlID0gbV9mcmFtZS0+cGFnZSgp
KQorICAgICAgICBpZiAoUGFnZSogcGFnZSA9IG1fZnJhbWVMb2FkZXItPmZyYW1lKCktPnBhZ2Uo
KSkKICAgICAgICAgICAgIHBhZ2UtPmdyb3VwKCkuYWRkVmlzaXRlZExpbmsoaGlzdG9yeVVSTCk7
CiAgICAgfQogfQogCiB2b2lkIEhpc3RvcnlDb250cm9sbGVyOjp1cGRhdGVGb3JDb21taXQoKQog
ewotICAgIEZyYW1lTG9hZGVyKiBmcmFtZUxvYWRlciA9IG1fZnJhbWUtPmxvYWRlcigpOwogI2lm
ICFMT0dfRElTQUJMRUQKLSAgICBpZiAoZnJhbWVMb2FkZXItPmRvY3VtZW50TG9hZGVyKCkpCi0g
ICAgICAgIExPRyhIaXN0b3J5LCAiV2ViQ29yZUhpc3Rvcnk6IFVwZGF0aW5nIEhpc3RvcnkgZm9y
IGNvbW1pdCBpbiBmcmFtZSAlcyIsIGZyYW1lTG9hZGVyLT5kb2N1bWVudExvYWRlcigpLT50aXRs
ZSgpLnV0ZjgoKS5kYXRhKCkpOworICAgIGlmIChtX2ZyYW1lTG9hZGVyLT5kb2N1bWVudExvYWRl
cigpKQorICAgICAgICBMT0coSGlzdG9yeSwgIldlYkNvcmVIaXN0b3J5OiBVcGRhdGluZyBIaXN0
b3J5IGZvciBjb21taXQgaW4gZnJhbWUgJXMiLCBtX2ZyYW1lTG9hZGVyLT5kb2N1bWVudExvYWRl
cigpLT50aXRsZSgpLnV0ZjgoKS5kYXRhKCkpOwogI2VuZGlmCi0gICAgRnJhbWVMb2FkVHlwZSB0
eXBlID0gZnJhbWVMb2FkZXItPmxvYWRUeXBlKCk7CisgICAgRnJhbWVMb2FkVHlwZSB0eXBlID0g
bV9mcmFtZUxvYWRlci0+bG9hZFR5cGUoKTsKICAgICBpZiAoaXNCYWNrRm9yd2FyZExvYWRUeXBl
KHR5cGUpIHx8Ci0gICAgICAgICgodHlwZSA9PSBGcmFtZUxvYWRUeXBlUmVsb2FkIHx8IHR5cGUg
PT0gRnJhbWVMb2FkVHlwZVJlbG9hZEZyb21PcmlnaW4pICYmICFmcmFtZUxvYWRlci0+cHJvdmlz
aW9uYWxEb2N1bWVudExvYWRlcigpLT51bnJlYWNoYWJsZVVSTCgpLmlzRW1wdHkoKSkpIHsKKyAg
ICAgICAgKCh0eXBlID09IEZyYW1lTG9hZFR5cGVSZWxvYWQgfHwgdHlwZSA9PSBGcmFtZUxvYWRU
eXBlUmVsb2FkRnJvbU9yaWdpbikgJiYgIW1fZnJhbWVMb2FkZXItPnByb3Zpc2lvbmFsRG9jdW1l
bnRMb2FkZXIoKS0+dW5yZWFjaGFibGVVUkwoKS5pc0VtcHR5KCkpKSB7CiAgICAgICAgIC8vIE9u
Y2UgY29tbWl0dGVkLCB3ZSB3YW50IHRvIHVzZSBjdXJyZW50IGl0ZW0gZm9yIHNhdmluZyBEb2NT
dGF0ZSwgYW5kCiAgICAgICAgIC8vIHRoZSBwcm92aXNpb25hbCBpdGVtIGZvciByZXN0b3Jpbmcg
c3RhdGUuCiAgICAgICAgIC8vIE5vdGUgcHJldmlvdXNJdGVtIG11c3QgYmUgc2V0IGJlZm9yZSB3
ZSBjbG9zZSB0aGUgVVJMLCB3aGljaCB3aWxsCkBAIC00MDQsMTggKzQwMSwxOCBAQCB2b2lkIEhp
c3RvcnlDb250cm9sbGVyOjp1cGRhdGVGb3JDb21taXQoKQogCiB2b2lkIEhpc3RvcnlDb250cm9s
bGVyOjp1cGRhdGVGb3JBbmNob3JTY3JvbGwoKQogewotICAgIGlmIChtX2ZyYW1lLT5sb2FkZXIo
KS0+dXJsKCkuaXNFbXB0eSgpKQorICAgIGlmIChtX2ZyYW1lTG9hZGVyLT51cmwoKS5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IG1fZnJhbWUt
PnNldHRpbmdzKCk7CisgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gbV9mcmFtZUxvYWRlci0+ZnJh
bWUoKS0+c2V0dGluZ3MoKTsKICAgICBpZiAoIXNldHRpbmdzIHx8IHNldHRpbmdzLT5wcml2YXRl
QnJvd3NpbmdFbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFBhZ2UqIHBhZ2UgPSBt
X2ZyYW1lLT5wYWdlKCk7CisgICAgUGFnZSogcGFnZSA9IG1fZnJhbWVMb2FkZXItPmZyYW1lKCkt
PnBhZ2UoKTsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIHBhZ2UtPmdy
b3VwKCkuYWRkVmlzaXRlZExpbmsobV9mcmFtZS0+bG9hZGVyKCktPnVybCgpKTsKKyAgICBwYWdl
LT5ncm91cCgpLmFkZFZpc2l0ZWRMaW5rKG1fZnJhbWVMb2FkZXItPnVybCgpKTsKIH0KIAogdm9p
ZCBIaXN0b3J5Q29udHJvbGxlcjo6dXBkYXRlRm9yRnJhbWVMb2FkQ29tcGxldGVkKCkKQEAgLTQ0
Myw3ICs0NDAsNyBAQCB2b2lkIEhpc3RvcnlDb250cm9sbGVyOjpzZXRQcm92aXNpb25hbEl0ZW0o
SGlzdG9yeUl0ZW0qIGl0ZW0pCiAKIFBhc3NSZWZQdHI8SGlzdG9yeUl0ZW0+IEhpc3RvcnlDb250
cm9sbGVyOjpjcmVhdGVJdGVtKGJvb2wgdXNlT3JpZ2luYWwpCiB7Ci0gICAgRG9jdW1lbnRMb2Fk
ZXIqIGRvY0xvYWRlciA9IG1fZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpOworICAg
IERvY3VtZW50TG9hZGVyKiBkb2NMb2FkZXIgPSBtX2ZyYW1lTG9hZGVyLT5kb2N1bWVudExvYWRl
cigpOwogICAgIAogICAgIEtVUkwgdW5yZWFjaGFibGVVUkwgPSBkb2NMb2FkZXIgPyBkb2NMb2Fk
ZXItPnVucmVhY2hhYmxlVVJMKCkgOiBLVVJMKCk7CiAgICAgCkBAIC00NzMsMTEgKzQ3MCwxMSBA
QCBQYXNzUmVmUHRyPEhpc3RvcnlJdGVtPiBIaXN0b3J5Q29udHJvbGxlcjo6Y3JlYXRlSXRlbShi
b29sIHVzZU9yaWdpbmFsKQogICAgIGlmIChvcmlnaW5hbFVSTC5pc0VtcHR5KCkpCiAgICAgICAg
IG9yaWdpbmFsVVJMID0gYmxhbmtVUkwoKTsKICAgICAKLSAgICBGcmFtZSogcGFyZW50RnJhbWUg
PSBtX2ZyYW1lLT50cmVlKCktPnBhcmVudCgpOworICAgIEZyYW1lKiBwYXJlbnRGcmFtZSA9IG1f
ZnJhbWVMb2FkZXItPmZyYW1lKCktPnRyZWUoKS0+cGFyZW50KCk7CiAgICAgU3RyaW5nIHBhcmVu
dCA9IHBhcmVudEZyYW1lID8gcGFyZW50RnJhbWUtPnRyZWUoKS0+bmFtZSgpIDogIiI7CiAgICAg
U3RyaW5nIHRpdGxlID0gZG9jTG9hZGVyID8gZG9jTG9hZGVyLT50aXRsZSgpIDogIiI7CiAKLSAg
ICBSZWZQdHI8SGlzdG9yeUl0ZW0+IGl0ZW0gPSBIaXN0b3J5SXRlbTo6Y3JlYXRlKHVybCwgbV9m
cmFtZS0+dHJlZSgpLT5uYW1lKCksIHBhcmVudCwgdGl0bGUpOworICAgIFJlZlB0cjxIaXN0b3J5
SXRlbT4gaXRlbSA9IEhpc3RvcnlJdGVtOjpjcmVhdGUodXJsLCBtX2ZyYW1lTG9hZGVyLT5mcmFt
ZSgpLT50cmVlKCktPm5hbWUoKSwgcGFyZW50LCB0aXRsZSk7CiAgICAgaXRlbS0+c2V0T3JpZ2lu
YWxVUkxTdHJpbmcob3JpZ2luYWxVUkwuc3RyaW5nKCkpOwogCiAgICAgaWYgKCF1bnJlYWNoYWJs
ZVVSTC5pc0VtcHR5KCkgfHwgIWRvY0xvYWRlciB8fCBkb2NMb2FkZXItPnJlc3BvbnNlKCkuaHR0
cFN0YXR1c0NvZGUoKSA+PSA0MDApCkBAIC01MDAsMTMgKzQ5NywxMyBAQCBQYXNzUmVmUHRyPEhp
c3RvcnlJdGVtPiBIaXN0b3J5Q29udHJvbGxlcjo6Y3JlYXRlSXRlbShib29sIHVzZU9yaWdpbmFs
KQogCiBQYXNzUmVmUHRyPEhpc3RvcnlJdGVtPiBIaXN0b3J5Q29udHJvbGxlcjo6Y3JlYXRlSXRl
bVRyZWUoRnJhbWUqIHRhcmdldEZyYW1lLCBib29sIGNsaXBBdFRhcmdldCkKIHsKLSAgICBSZWZQ
dHI8SGlzdG9yeUl0ZW0+IGJmSXRlbSA9IGNyZWF0ZUl0ZW0obV9mcmFtZS0+dHJlZSgpLT5wYXJl
bnQoKSA/IHRydWUgOiBmYWxzZSk7CisgICAgUmVmUHRyPEhpc3RvcnlJdGVtPiBiZkl0ZW0gPSBj
cmVhdGVJdGVtKG1fZnJhbWVMb2FkZXItPmZyYW1lKCktPnRyZWUoKS0+cGFyZW50KCkgPyB0cnVl
IDogZmFsc2UpOwogICAgIGlmIChtX3ByZXZpb3VzSXRlbSkKICAgICAgICAgc2F2ZVNjcm9sbFBv
c2l0aW9uQW5kVmlld1N0YXRlVG9JdGVtKG1fcHJldmlvdXNJdGVtLmdldCgpKTsKLSAgICBpZiAo
IShjbGlwQXRUYXJnZXQgJiYgbV9mcmFtZSA9PSB0YXJnZXRGcmFtZSkpIHsKKyAgICBpZiAoIShj
bGlwQXRUYXJnZXQgJiYgbV9mcmFtZUxvYWRlci0+ZnJhbWUoKSA9PSB0YXJnZXRGcmFtZSkpIHsK
ICAgICAgICAgLy8gc2F2ZSBmcmFtZSBzdGF0ZSBmb3IgaXRlbXMgdGhhdCBhcmVuJ3QgbG9hZGlu
ZyAoa2h0bWwgZG9lc24ndCBzYXZlIHRob3NlKQogICAgICAgICBzYXZlRG9jdW1lbnRTdGF0ZSgp
OwotICAgICAgICBmb3IgKEZyYW1lKiBjaGlsZCA9IG1fZnJhbWUtPnRyZWUoKS0+Zmlyc3RDaGls
ZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+dHJlZSgpLT5uZXh0U2libGluZygpKSB7CisgICAg
ICAgIGZvciAoRnJhbWUqIGNoaWxkID0gbV9mcmFtZUxvYWRlci0+ZnJhbWUoKS0+dHJlZSgpLT5m
aXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT50cmVlKCktPm5leHRTaWJsaW5nKCkp
IHsKICAgICAgICAgICAgIEZyYW1lTG9hZGVyKiBjaGlsZExvYWRlciA9IGNoaWxkLT5sb2FkZXIo
KTsKICAgICAgICAgICAgIGJvb2wgaGFzQ2hpbGRMb2FkZWQgPSBjaGlsZExvYWRlci0+ZnJhbWVI
YXNMb2FkZWQoKTsKIApAQCAtNTE4LDcgKzUxNSw3IEBAIFBhc3NSZWZQdHI8SGlzdG9yeUl0ZW0+
IEhpc3RvcnlDb250cm9sbGVyOjpjcmVhdGVJdGVtVHJlZShGcmFtZSogdGFyZ2V0RnJhbWUsIGJv
CiAgICAgICAgICAgICAgICAgYmZJdGVtLT5hZGRDaGlsZEl0ZW0oY2hpbGRMb2FkZXItPmhpc3Rv
cnkoKS0+Y3JlYXRlSXRlbVRyZWUodGFyZ2V0RnJhbWUsIGNsaXBBdFRhcmdldCkpOwogICAgICAg
ICB9CiAgICAgfQotICAgIGlmIChtX2ZyYW1lID09IHRhcmdldEZyYW1lKQorICAgIGlmIChtX2Zy
YW1lTG9hZGVyLT5mcmFtZSgpID09IHRhcmdldEZyYW1lKQogICAgICAgICBiZkl0ZW0tPnNldElz
VGFyZ2V0SXRlbSh0cnVlKTsKICAgICByZXR1cm4gYmZJdGVtOwogfQpAQCAtNTM0LDggKzUzMSw4
IEBAIHZvaWQgSGlzdG9yeUNvbnRyb2xsZXI6OnJlY3Vyc2l2ZUdvVG9JdGVtKEhpc3RvcnlJdGVt
KiBpdGVtLCBIaXN0b3J5SXRlbSogZnJvbUl0CiAKICAgICBLVVJMIGl0ZW1VUkwgPSBpdGVtLT51
cmwoKTsKICAgICBLVVJMIGN1cnJlbnRVUkw7Ci0gICAgaWYgKG1fZnJhbWUtPmxvYWRlcigpLT5k
b2N1bWVudExvYWRlcigpKQotICAgICAgICBjdXJyZW50VVJMID0gbV9mcmFtZS0+bG9hZGVyKCkt
PmRvY3VtZW50TG9hZGVyKCktPnVybCgpOworICAgIGlmIChtX2ZyYW1lTG9hZGVyLT5kb2N1bWVu
dExvYWRlcigpKQorICAgICAgICBjdXJyZW50VVJMID0gbV9mcmFtZUxvYWRlci0+ZG9jdW1lbnRM
b2FkZXIoKS0+dXJsKCk7CiAKICAgICAvLyBBbHdheXMgcmVsb2FkIHRoZSB0YXJnZXQgZnJhbWUg
b2YgdGhlIGl0ZW0gd2UncmUgZ29pbmcgdG8uICBUaGlzIGVuc3VyZXMgdGhhdCB3ZSB3aWxsCiAg
ICAgLy8gZG8gLXNvbWUtIGxvYWQgZm9yIHRoZSB0cmFuc2l0aW9uLCB3aGljaCBtZWFucyBhIHBy
b3BlciBub3RpZmljYXRpb24gd2lsbCBiZSBwb3N0ZWQKQEAgLTU0NSw3ICs1NDIsNyBAQCB2b2lk
IEhpc3RvcnlDb250cm9sbGVyOjpyZWN1cnNpdmVHb1RvSXRlbShIaXN0b3J5SXRlbSogaXRlbSwg
SGlzdG9yeUl0ZW0qIGZyb21JdAogICAgIC8vIFRoZSBjdXJyZW50IGZyYW1lIHRyZWUgYW5kIHRo
ZSBmcmFtZSB0cmVlIHNuYXBzaG90IGluIHRoZSBpdGVtIGhhdmUgdG8gbWF0Y2guCiAgICAgaWYg
KCFpdGVtLT5pc1RhcmdldEl0ZW0oKSAmJgogICAgICAgICBpdGVtVVJMID09IGN1cnJlbnRVUkwg
JiYKLSAgICAgICAgKChtX2ZyYW1lLT50cmVlKCktPm5hbWUoKS5pc0VtcHR5KCkgJiYgaXRlbS0+
dGFyZ2V0KCkuaXNFbXB0eSgpKSB8fCBtX2ZyYW1lLT50cmVlKCktPm5hbWUoKSA9PSBpdGVtLT50
YXJnZXQoKSkgJiYKKyAgICAgICAgKChtX2ZyYW1lTG9hZGVyLT5mcmFtZSgpLT50cmVlKCktPm5h
bWUoKS5pc0VtcHR5KCkgJiYgaXRlbS0+dGFyZ2V0KCkuaXNFbXB0eSgpKSB8fCBtX2ZyYW1lTG9h
ZGVyLT5mcmFtZSgpLT50cmVlKCktPm5hbWUoKSA9PSBpdGVtLT50YXJnZXQoKSkgJiYKICAgICAg
ICAgY2hpbGRGcmFtZXNNYXRjaEl0ZW0oaXRlbSkpCiAgICAgewogICAgICAgICAvLyBUaGlzIGNv
bnRlbnQgaXMgZ29vZCwgc28gbGVhdmUgaXQgYWxvbmUgYW5kIGxvb2sgZm9yIGNoaWxkcmVuIHRo
YXQgbmVlZCByZWxvYWRpbmcKQEAgLTU1NCw3ICs1NTEsNyBAQCB2b2lkIEhpc3RvcnlDb250cm9s
bGVyOjpyZWN1cnNpdmVHb1RvSXRlbShIaXN0b3J5SXRlbSogaXRlbSwgSGlzdG9yeUl0ZW0qIGZy
b21JdAogICAgICAgICBzYXZlRG9jdW1lbnRTdGF0ZSgpOwogICAgICAgICBzYXZlU2Nyb2xsUG9z
aXRpb25BbmRWaWV3U3RhdGVUb0l0ZW0obV9jdXJyZW50SXRlbS5nZXQoKSk7CiAKLSAgICAgICAg
aWYgKEZyYW1lVmlldyogdmlldyA9IG1fZnJhbWUtPnZpZXcoKSkKKyAgICAgICAgaWYgKEZyYW1l
VmlldyogdmlldyA9IG1fZnJhbWVMb2FkZXItPmZyYW1lKCktPnZpZXcoKSkKICAgICAgICAgICAg
IHZpZXctPnNldFdhc1Njcm9sbGVkQnlVc2VyKGZhbHNlKTsKIAogICAgICAgICBtX2N1cnJlbnRJ
dGVtID0gaXRlbTsKQEAgLTU3MiwxMiArNTY5LDEyIEBAIHZvaWQgSGlzdG9yeUNvbnRyb2xsZXI6
OnJlY3Vyc2l2ZUdvVG9JdGVtKEhpc3RvcnlJdGVtKiBpdGVtLCBIaXN0b3J5SXRlbSogZnJvbUl0
CiAgICAgICAgICAgICBTdHJpbmcgY2hpbGRGcmFtZU5hbWUgPSBjaGlsZEl0ZW1zW2ldLT50YXJn
ZXQoKTsKICAgICAgICAgICAgIEhpc3RvcnlJdGVtKiBmcm9tQ2hpbGRJdGVtID0gZnJvbUl0ZW0t
PmNoaWxkSXRlbVdpdGhUYXJnZXQoY2hpbGRGcmFtZU5hbWUpOwogICAgICAgICAgICAgQVNTRVJU
KGZyb21DaGlsZEl0ZW0gfHwgZnJvbUl0ZW0tPmlzVGFyZ2V0SXRlbSgpKTsKLSAgICAgICAgICAg
IEZyYW1lKiBjaGlsZEZyYW1lID0gbV9mcmFtZS0+dHJlZSgpLT5jaGlsZChjaGlsZEZyYW1lTmFt
ZSk7CisgICAgICAgICAgICBGcmFtZSogY2hpbGRGcmFtZSA9IG1fZnJhbWVMb2FkZXItPmZyYW1l
KCktPnRyZWUoKS0+Y2hpbGQoY2hpbGRGcmFtZU5hbWUpOwogICAgICAgICAgICAgQVNTRVJUKGNo
aWxkRnJhbWUpOwogICAgICAgICAgICAgY2hpbGRGcmFtZS0+bG9hZGVyKCktPmhpc3RvcnkoKS0+
cmVjdXJzaXZlR29Ub0l0ZW0oY2hpbGRJdGVtc1tpXS5nZXQoKSwgZnJvbUNoaWxkSXRlbSwgdHlw
ZSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+
bG9hZEl0ZW0oaXRlbSwgdHlwZSk7CisgICAgICAgIG1fZnJhbWVMb2FkZXItPmxvYWRJdGVtKGl0
ZW0sIHR5cGUpOwogICAgIH0KIH0KIApAQCAtNTg2LDEyICs1ODMsMTIgQEAgdm9pZCBIaXN0b3J5
Q29udHJvbGxlcjo6cmVjdXJzaXZlR29Ub0l0ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0sIEhpc3RvcnlJ
dGVtKiBmcm9tSXQKIGJvb2wgSGlzdG9yeUNvbnRyb2xsZXI6OmNoaWxkRnJhbWVzTWF0Y2hJdGVt
KEhpc3RvcnlJdGVtKiBpdGVtKSBjb25zdAogewogICAgIGNvbnN0IEhpc3RvcnlJdGVtVmVjdG9y
JiBjaGlsZEl0ZW1zID0gaXRlbS0+Y2hpbGRyZW4oKTsKLSAgICBpZiAoY2hpbGRJdGVtcy5zaXpl
KCkgIT0gbV9mcmFtZS0+dHJlZSgpLT5jaGlsZENvdW50KCkpCisgICAgaWYgKGNoaWxkSXRlbXMu
c2l6ZSgpICE9IG1fZnJhbWVMb2FkZXItPmZyYW1lKCktPnRyZWUoKS0+Y2hpbGRDb3VudCgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgdW5zaWduZWQgc2l6ZSA9IGNoaWxkSXRl
bXMuc2l6ZSgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAg
ICAgICAgaWYgKCFtX2ZyYW1lLT50cmVlKCktPmNoaWxkKGNoaWxkSXRlbXNbaV0tPnRhcmdldCgp
KSkKKyAgICAgICAgaWYgKCFtX2ZyYW1lTG9hZGVyLT5mcmFtZSgpLT50cmVlKCktPmNoaWxkKGNo
aWxkSXRlbXNbaV0tPnRhcmdldCgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAgICAgCkBAIC02MDYsMTEgKzYwMywxMSBAQCB2b2lkIEhpc3RvcnlDb250cm9sbGVyOjp1cGRh
dGVCYWNrRm9yd2FyZExpc3RDbGlwcGVkQXRUYXJnZXQoYm9vbCBkb0NsaXApCiAgICAgLy8gV2hl
biB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIGRvQ2xpcD10cnVlIHdlJ3JlIGFibGUgdG8g
Y3JlYXRlIHRoZSB3aG9sZSB0cmVlIGV4Y2VwdCBmb3IgdGhlIHRhcmdldCdzIGNoaWxkcmVuLCAK
ICAgICAvLyB3aGljaCB3aWxsIGJlIGxvYWRlZCBpbiB0aGUgZnV0dXJlLiBUaGF0IHBhcnQgb2Yg
dGhlIHRyZWUgd2lsbCBiZSBmaWxsZWQgb3V0IGFzIHRoZSBjaGlsZCBsb2FkcyBhcmUgY29tbWl0
dGVkLgogCi0gICAgUGFnZSogcGFnZSA9IG1fZnJhbWUtPnBhZ2UoKTsKKyAgICBQYWdlKiBwYWdl
ID0gbV9mcmFtZUxvYWRlci0+ZnJhbWUoKS0+cGFnZSgpOwogICAgIGlmICghcGFnZSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgaWYgKG1fZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigp
LT51cmxGb3JIaXN0b3J5KCkuaXNFbXB0eSgpKQorICAgIGlmIChtX2ZyYW1lTG9hZGVyLT5kb2N1
bWVudExvYWRlcigpLT51cmxGb3JIaXN0b3J5KCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47
CiAKICAgICBGcmFtZSogbWFpbkZyYW1lID0gcGFnZS0+bWFpbkZyYW1lKCk7CkBAIC02MTksOCAr
NjE2LDggQEAgdm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6dXBkYXRlQmFja0ZvcndhcmRMaXN0Q2xp
cHBlZEF0VGFyZ2V0KGJvb2wgZG9DbGlwKQogCiAgICAgZnJhbWVMb2FkZXItPmNoZWNrRGlkUGVy
Zm9ybUZpcnN0TmF2aWdhdGlvbigpOwogCi0gICAgUmVmUHRyPEhpc3RvcnlJdGVtPiBpdGVtID0g
ZnJhbWVMb2FkZXItPmhpc3RvcnkoKS0+Y3JlYXRlSXRlbVRyZWUobV9mcmFtZSwgZG9DbGlwKTsK
LSAgICBMT0coQmFja0ZvcndhcmQsICJXZWJDb3JlQmFja0ZvcndhcmQgLSBBZGRpbmcgYmFja2Zv
cndhcmQgaXRlbSAlcCBmb3IgZnJhbWUgJXMiLCBpdGVtLmdldCgpLCBtX2ZyYW1lLT5sb2FkZXIo
KS0+ZG9jdW1lbnRMb2FkZXIoKS0+dXJsKCkuc3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOworICAg
IFJlZlB0cjxIaXN0b3J5SXRlbT4gaXRlbSA9IGZyYW1lTG9hZGVyLT5oaXN0b3J5KCktPmNyZWF0
ZUl0ZW1UcmVlKG1fZnJhbWVMb2FkZXItPmZyYW1lKCksIGRvQ2xpcCk7CisgICAgTE9HKEJhY2tG
b3J3YXJkLCAiV2ViQ29yZUJhY2tGb3J3YXJkIC0gQWRkaW5nIGJhY2tmb3J3YXJkIGl0ZW0gJXAg
Zm9yIGZyYW1lICVzIiwgaXRlbS5nZXQoKSwgbV9mcmFtZUxvYWRlci0+ZG9jdW1lbnRMb2FkZXIo
KS0+dXJsKCkuc3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOwogICAgIHBhZ2UtPmJhY2tGb3J3YXJk
TGlzdCgpLT5hZGRJdGVtKGl0ZW0pOwogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2xvYWRlci9I
aXN0b3J5Q29udHJvbGxlci5oIGIvV2ViQ29yZS9sb2FkZXIvSGlzdG9yeUNvbnRyb2xsZXIuaApp
bmRleCBjMTYxNTE2Li45NzY5NzFkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2xvYWRlci9IaXN0b3J5
Q29udHJvbGxlci5oCisrKyBiL1dlYkNvcmUvbG9hZGVyL0hpc3RvcnlDb250cm9sbGVyLmgKQEAg
LTM4LDExICszOCwxMiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgRnJhbWU7
CisgICAgY2xhc3MgRnJhbWVMb2FkZXI7CiAgICAgY2xhc3MgSGlzdG9yeUl0ZW07CiAKICAgICBj
bGFzcyBIaXN0b3J5Q29udHJvbGxlciA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiAgICAgcHVibGlj
OgotICAgICAgICBIaXN0b3J5Q29udHJvbGxlcihGcmFtZSopOworICAgICAgICBIaXN0b3J5Q29u
dHJvbGxlcihGcmFtZUxvYWRlciopOwogICAgICAgICB+SGlzdG9yeUNvbnRyb2xsZXIoKTsKIAog
ICAgICAgICB2b2lkIHNhdmVTY3JvbGxQb3NpdGlvbkFuZFZpZXdTdGF0ZVRvSXRlbShIaXN0b3J5
SXRlbSopOwpAQCAtODMsNyArODQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJv
b2wgY2hpbGRGcmFtZXNNYXRjaEl0ZW0oSGlzdG9yeUl0ZW0qKSBjb25zdDsKICAgICAgICAgdm9p
ZCB1cGRhdGVCYWNrRm9yd2FyZExpc3RDbGlwcGVkQXRUYXJnZXQoYm9vbCBkb0NsaXApOwogCi0g
ICAgICAgIEZyYW1lKiBtX2ZyYW1lOworICAgICAgICBGcmFtZUxvYWRlciogbV9mcmFtZUxvYWRl
cjsKIAogICAgICAgICBSZWZQdHI8SGlzdG9yeUl0ZW0+IG1fY3VycmVudEl0ZW07CiAgICAgICAg
IFJlZlB0cjxIaXN0b3J5SXRlbT4gbV9wcmV2aW91c0l0ZW07
</data>
<flag name="review"
          id="22290"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>