<?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>59602</bug_id>
          
          <creation_ts>2011-04-27 05:02:08 -0700</creation_ts>
          <short_desc>[GTK] Move WebView to UIProcess/API/gtk</short_desc>
          <delta_ts>2011-04-28 10:00:10 -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>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>59686</dup_id>
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>59594</dependson>
          <blocked>57944</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>393503</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-04-27 05:02:08 -0700</bug_when>
    <thetext>And rename it to PageClientImpl since it&apos;s not a view, but a PageClient implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>393506</commentid>
    <comment_count>1</comment_count>
      <attachid>91272</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-04-27 05:05:54 -0700</bug_when>
    <thetext>Created attachment 91272
Patch

I&apos;ve left the editor stuff in PageClient for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394499</commentid>
    <comment_count>2</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-04-28 10:00:10 -0700</bug_when>
    <thetext>Sorry, I forgot this bug and opened a new one.

*** This bug has been marked as a duplicate of bug 59686 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91272</attachid>
            <date>2011-04-27 05:05:54 -0700</date>
            <delta_ts>2011-04-28 09:59:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-page-client-impl.diff</filename>
            <type>text/plain</type>
            <size>53628</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA0NDFhZTNjLi44Y2QxYTA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzMg
QEAKKzIwMTEtMDQtMjcgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtd
IE1vdmUgV2ViVmlldyB0byBVSVByb2Nlc3MvQVBJL2d0aworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTk2MDIKKworICAgICAgICBJdCBhbHNvIHJlbmFt
ZXMgaXQgYXMgUGFnZUNsaWVudEltcGwgc2luY2UgaXQncyBub3QgYSB2aWV3LCBidXQgYQorICAg
ICAgICBwYWdlIGNsaWVudCBpbXBsZW1lbnRhdGlvbi4KKworICAgICAgICAqIEdOVW1ha2VmaWxl
LmFtOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmNwcDogUmVu
YW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViVmlldy5jcHAuCisgICAg
ICAgIChXZWJLaXQ6OmJhY2tzcGFjZUNhbGxiYWNrKToKKyAgICAgICAgKFdlYktpdDo6c2VsZWN0
QWxsQ2FsbGJhY2spOgorICAgICAgICAoV2ViS2l0OjpjdXRDbGlwYm9hcmRDYWxsYmFjayk6Cisg
ICAgICAgIChXZWJLaXQ6OmNvcHlDbGlwYm9hcmRDYWxsYmFjayk6CisgICAgICAgIChXZWJLaXQ6
OnBhc3RlQ2xpcGJvYXJkQ2FsbGJhY2spOgorICAgICAgICAoV2ViS2l0Ojp0b2dnbGVPdmVyd3Jp
dGVDYWxsYmFjayk6CisgICAgICAgIChXZWJLaXQ6OnBvcHVwTWVudUNhbGxiYWNrKToKKyAgICAg
ICAgKFdlYktpdDo6c2hvd0hlbHBDYWxsYmFjayk6CisgICAgICAgIChXZWJLaXQ6OmRlbGV0ZUZy
b21DdXJzb3JDYWxsYmFjayk6CisgICAgICAgIChXZWJLaXQ6Om1vdmVDdXJzb3JDYWxsYmFjayk6
CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpQYWdlQ2xpZW50SW1wbCk6CisgICAg
ICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjp+UGFnZUNsaWVudEltcGwpOgorICAgICAgICAo
V2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6Z2V0RWRpdG9yQ29tbWFuZHNGb3JLZXlFdmVudCk6Cisg
ICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpjcmVhdGVEcmF3aW5nQXJlYVByb3h5KToK
KyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnNldFZpZXdOZWVkc0Rpc3BsYXkpOgor
ICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6ZGlzcGxheVZpZXcpOgorICAgICAgICAo
V2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6c2Nyb2xsVmlldyk6CisgICAgICAgIChXZWJLaXQ6OlBh
Z2VDbGllbnRJbXBsOjp2aWV3U2l6ZSk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBs
Ojppc1ZpZXdXaW5kb3dBY3RpdmUpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6
aXNWaWV3Rm9jdXNlZCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjppc1ZpZXdW
aXNpYmxlKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmlzVmlld0luV2luZG93
KToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OlBhZ2VDbGllbnRJbXBsOjpwcm9j
ZXNzRGlkQ3Jhc2gpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6ZGlkUmVsYXVu
Y2hQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnRha2VGb2N1cyk6
CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjp0b29sVGlwQ2hhbmdlZCk6CisgICAg
ICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpzZXRDdXJzb3IpOgorICAgICAgICAoV2ViS2l0
OjpQYWdlQ2xpZW50SW1wbDo6c2V0Vmlld3BvcnRBcmd1bWVudHMpOgorICAgICAgICAoV2ViS2l0
OjpQYWdlQ2xpZW50SW1wbDo6cmVnaXN0ZXJFZGl0Q29tbWFuZCk6CisgICAgICAgIChXZWJLaXQ6
OlBhZ2VDbGllbnRJbXBsOjpjbGVhckFsbEVkaXRDb21tYW5kcyk6CisgICAgICAgIChXZWJLaXQ6
OlBhZ2VDbGllbnRJbXBsOjpjYW5VbmRvUmVkbyk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGll
bnRJbXBsOjpleGVjdXRlVW5kb1JlZG8pOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1w
bDo6Y29udmVydFRvRGV2aWNlU3BhY2UpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1w
bDo6Y29udmVydFRvVXNlclNwYWNlKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6
OndpbmRvd1RvU2NyZWVuKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmRvbmVX
aXRoS2V5RXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6ZGlkTm90SGFu
ZGxlS2V5RXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6Y3JlYXRlUG9w
dXBNZW51UHJveHkpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6Y3JlYXRlQ29u
dGV4dE1lbnVQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpzZXRGaW5k
SW5kaWNhdG9yKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnBhZ2VEaWRFbnRl
ckFjY2VsZXJhdGVkQ29tcG9zaXRpbmcpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1w
bDo6cGFnZURpZExlYXZlQWNjZWxlcmF0ZWRDb21wb3NpdGluZyk6CisgICAgICAgIChXZWJLaXQ6
OlBhZ2VDbGllbnRJbXBsOjpkaWRDb21taXRMb2FkRm9yTWFpbkZyYW1lKToKKyAgICAgICAgKFdl
YktpdDo6UGFnZUNsaWVudEltcGw6OmRpZEZpbmlzaExvYWRpbmdEYXRhRm9yQ3VzdG9tUmVwcmVz
ZW50YXRpb24pOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6Y3VzdG9tUmVwcmVz
ZW50YXRpb25ab29tRmFjdG9yKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnNl
dEN1c3RvbVJlcHJlc2VudGF0aW9uWm9vbUZhY3Rvcik6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VD
bGllbnRJbXBsOjpwYWdlQ2xvc2VkKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6
OmRpZENoYW5nZVNjcm9sbGJhcnNGb3JNYWluRnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpQYWdl
Q2xpZW50SW1wbDo6Zmxhc2hCYWNraW5nU3RvcmVVcGRhdGVzKToKKyAgICAgICAgKFdlYktpdDo6
UGFnZUNsaWVudEltcGw6OmZpbmRTdHJpbmdJbkN1c3RvbVJlcHJlc2VudGF0aW9uKToKKyAgICAg
ICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmNvdW50U3RyaW5nTWF0Y2hlc0luQ3VzdG9tUmVw
cmVzZW50YXRpb24pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBs
Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlZpZXcuaC4K
KyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJL
aXQ6OlBhZ2VDbGllbnRJbXBsOjphZGRQZW5kaW5nRWRpdG9yQ29tbWFuZCk6CisgICAgICAgIChX
ZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjp1c2VyU3BhY2VTY2FsZUZhY3Rvcik6CisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwOgorICAgICAgICAod2Via2l0
X3dlYl92aWV3X2Jhc2VfaW5pdCk6CisKIDIwMTEtMDQtMjYgIENoYW5nIFNodSAgPGNzaHVAd2Vi
a2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBMYXN6bG8gR29tYm9zLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtl
ZmlsZS5hbQppbmRleCAyZGJmMzkxLi5jODliZTMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQpAQCAt
MzUxLDYgKzM1MSw4IEBAIGxpYndlYmtpdDJndGtfQFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lP
TkBfQFdFQktJVEdUS19BUElfTUlOT1JfVkVSU0lPTkBfbGFfU09VCiAJU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9DL1dLUmVzb3VyY2VDYWNoZU1hbmFnZXIuaCBcCiAJU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9DL1dLUmVzb3VyY2VDYWNoZU1hbmFnZXIuY3BwIFwKIAlTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2NwcC9XS1JldGFpblB0ci5oIFwKKwlTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5oIFwKKwlTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcCBcCiAJU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmggXApAQCAtMzgyLDgg
KzM4NCw2IEBAIGxpYndlYmtpdDJndGtfQFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkBfQFdF
QktJVEdUS19BUElfTUlOT1JfVkVSU0lPTkBfbGFfU09VCiAJU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2d0ay9XZWJJbnNwZWN0b3JHdGsuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
Z3RrL1dlYlBhZ2VQcm94eUd0ay5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsv
V2ViUHJlZmVyZW5jZXNHdGsuY3BwIFwKLQlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dl
YlZpZXcuY3BwIFwKLQlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlZpZXcuaCBcCiAJ
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL2d0ay9Qcm9jZXNzTGF1bmNoZXJHdGsu
Y3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvZ3RrL1RocmVhZExhdW5j
aGVyR3RrLmNwcCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL1Byb2Nlc3NM
YXVuY2hlci5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvUGFnZUNsaWVudEltcGwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
UGFnZUNsaWVudEltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIw
NzQ5ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9QYWdlQ2xpZW50SW1wbC5jcHAKQEAgLTAsMCArMSw1MDMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMgQ29w
eXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQYWdlQ2xpZW50SW1wbC5oIgorCisjaW5jbHVkZSAi
Q2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhUHJveHkuaCIKKyNpbmNsdWRlICJOYXRpdmVXZWJLZXli
b2FyZEV2ZW50LmgiCisjaW5jbHVkZSAiTmF0aXZlV2ViTW91c2VFdmVudC5oIgorI2luY2x1ZGUg
Ik5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiV2ViQ29udGV4dC5oIgorI2luY2x1ZGUgIldl
YkNvbnRleHRNZW51UHJveHkuaCIKKyNpbmNsdWRlICJXZWJFdmVudEZhY3RvcnkuaCIKKyNpbmNs
dWRlICJXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHku
aCIKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CisKK3R5cGVkZWYgSGFzaE1hcDxpbnQsIGNvbnN0IGNoYXIqPiBJbnRDb25zdENoYXJIYXNoTWFw
OworCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0
YXRpYyB2b2lkIGJhY2tzcGFjZUNhbGxiYWNrKEd0a1dpZGdldCogd2lkZ2V0LCBQYWdlQ2xpZW50
SW1wbCogY2xpZW50KQoreworICAgIGdfc2lnbmFsX3N0b3BfZW1pc3Npb25fYnlfbmFtZSh3aWRn
ZXQsICJiYWNrc3BhY2UiKTsKKyAgICBjbGllbnQtPmFkZFBlbmRpbmdFZGl0b3JDb21tYW5kKCJE
ZWxldGVCYWNrd2FyZCIpOworfQorCitzdGF0aWMgdm9pZCBzZWxlY3RBbGxDYWxsYmFjayhHdGtX
aWRnZXQqIHdpZGdldCwgZ2Jvb2xlYW4gc2VsZWN0LCBQYWdlQ2xpZW50SW1wbCogY2xpZW50KQor
eworICAgIGdfc2lnbmFsX3N0b3BfZW1pc3Npb25fYnlfbmFtZSh3aWRnZXQsICJzZWxlY3QtYWxs
Iik7CisgICAgY2xpZW50LT5hZGRQZW5kaW5nRWRpdG9yQ29tbWFuZChzZWxlY3QgPyAiU2VsZWN0
QWxsIiA6ICJVbnNlbGVjdCIpOworfQorCitzdGF0aWMgdm9pZCBjdXRDbGlwYm9hcmRDYWxsYmFj
ayhHdGtXaWRnZXQqIHdpZGdldCwgUGFnZUNsaWVudEltcGwqIGNsaWVudCkKK3sKKyAgICBnX3Np
Z25hbF9zdG9wX2VtaXNzaW9uX2J5X25hbWUod2lkZ2V0LCAiY3V0LWNsaXBib2FyZCIpOworICAg
IGNsaWVudC0+YWRkUGVuZGluZ0VkaXRvckNvbW1hbmQoIkN1dCIpOworfQorCitzdGF0aWMgdm9p
ZCBjb3B5Q2xpcGJvYXJkQ2FsbGJhY2soR3RrV2lkZ2V0KiB3aWRnZXQsIFBhZ2VDbGllbnRJbXBs
KiBjbGllbnQpCit7CisgICAgZ19zaWduYWxfc3RvcF9lbWlzc2lvbl9ieV9uYW1lKHdpZGdldCwg
ImNvcHktY2xpcGJvYXJkIik7CisgICAgY2xpZW50LT5hZGRQZW5kaW5nRWRpdG9yQ29tbWFuZCgi
Q29weSIpOworfQorCitzdGF0aWMgdm9pZCBwYXN0ZUNsaXBib2FyZENhbGxiYWNrKEd0a1dpZGdl
dCogd2lkZ2V0LCBQYWdlQ2xpZW50SW1wbCogY2xpZW50KQoreworICAgIGdfc2lnbmFsX3N0b3Bf
ZW1pc3Npb25fYnlfbmFtZSh3aWRnZXQsICJwYXN0ZS1jbGlwYm9hcmQiKTsKKyAgICBjbGllbnQt
PmFkZFBlbmRpbmdFZGl0b3JDb21tYW5kKCJQYXN0ZSIpOworfQorCitzdGF0aWMgdm9pZCB0b2dn
bGVPdmVyd3JpdGVDYWxsYmFjayhHdGtXaWRnZXQqIHdpZGdldCwgRWRpdG9yQ2xpZW50KikKK3sK
KyAgICAvLyBXZSBkb24ndCBzdXBwb3J0IHRvZ2dsaW5nIHRoZSBvdmVyd3JpdGUgbW9kZSwgYnV0
IHRoZSBkZWZhdWx0IGNhbGxiYWNrIGV4cGVjdHMKKyAgICAvLyB0aGUgR3RrVGV4dFZpZXcgdG8g
aGF2ZSBhIGxheW91dCwgc28gd2UgaGFuZGxlIHRoaXMgc2lnbmFsIGp1c3QgdG8gc3RvcCBpdC4K
KyAgICBnX3NpZ25hbF9zdG9wX2VtaXNzaW9uX2J5X25hbWUod2lkZ2V0LCAidG9nZ2xlLW92ZXJ3
cml0ZSIpOworfQorCisvLyBHVEsrIHdpbGwgc3RpbGwgc2VuZCB0aGVzZSBzaWduYWxzIHRvIHRo
ZSB3ZWIgdmlldy4gU28gd2UgY2FuIHNhZmVseSBzdG9wIHNpZ25hbAorLy8gZW1pc3Npb24gd2l0
aG91dCBicmVha2luZyBhY2Nlc3NpYmlsaXR5Lgorc3RhdGljIHZvaWQgcG9wdXBNZW51Q2FsbGJh
Y2soR3RrV2lkZ2V0KiB3aWRnZXQsIEVkaXRvckNsaWVudCopCit7CisgICAgZ19zaWduYWxfc3Rv
cF9lbWlzc2lvbl9ieV9uYW1lKHdpZGdldCwgInBvcHVwLW1lbnUiKTsKK30KKworc3RhdGljIHZv
aWQgc2hvd0hlbHBDYWxsYmFjayhHdGtXaWRnZXQqIHdpZGdldCwgRWRpdG9yQ2xpZW50KikKK3sK
KyAgICBnX3NpZ25hbF9zdG9wX2VtaXNzaW9uX2J5X25hbWUod2lkZ2V0LCAic2hvdy1oZWxwIik7
Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBndGtEZWxldGVDb21tYW5kc1tdWzJdID0g
eworICAgIHsgIkRlbGV0ZUJhY2t3YXJkIiwgICAgICAgICAgICAgICAiRGVsZXRlRm9yd2FyZCIg
ICAgICAgICAgICAgICAgICAgICAgICB9LCAvLyBDaGFyYWN0ZXJzCisgICAgeyAiRGVsZXRlV29y
ZEJhY2t3YXJkIiwgICAgICAgICAgICJEZWxldGVXb3JkRm9yd2FyZCIgICAgICAgICAgICAgICAg
ICAgIH0sIC8vIFdvcmQgZW5kcworICAgIHsgIkRlbGV0ZVdvcmRCYWNrd2FyZCIsICAgICAgICAg
ICAiRGVsZXRlV29yZEZvcndhcmQiICAgICAgICAgICAgICAgICAgICB9LCAvLyBXb3JkcworICAg
IHsgIkRlbGV0ZVRvQmVnaW5uaW5nT2ZMaW5lIiwgICAgICAiRGVsZXRlVG9FbmRPZkxpbmUiICAg
ICAgICAgICAgICAgICAgICB9LCAvLyBMaW5lcworICAgIHsgIkRlbGV0ZVRvQmVnaW5uaW5nT2ZM
aW5lIiwgICAgICAiRGVsZXRlVG9FbmRPZkxpbmUiICAgICAgICAgICAgICAgICAgICB9LCAvLyBM
aW5lIGVuZHMKKyAgICB7ICJEZWxldGVUb0JlZ2lubmluZ09mUGFyYWdyYXBoIiwgIkRlbGV0ZVRv
RW5kT2ZQYXJhZ3JhcGgiICAgICAgICAgICAgICAgfSwgLy8gUGFyYWdyYXBoIGVuZHMKKyAgICB7
ICJEZWxldGVUb0JlZ2lubmluZ09mUGFyYWdyYXBoIiwgIkRlbGV0ZVRvRW5kT2ZQYXJhZ3JhcGgi
ICAgICAgICAgICAgICAgfSwgLy8gUGFyYWdyYXBocworICAgIHsgMCwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IC8v
IFdoaXRlc3BhY2UgKE0tXCBpbiBFbWFjcykKK307CisKK3N0YXRpYyB2b2lkIGRlbGV0ZUZyb21D
dXJzb3JDYWxsYmFjayhHdGtXaWRnZXQqIHdpZGdldCwgR3RrRGVsZXRlVHlwZSBkZWxldGVUeXBl
LCBnaW50IGNvdW50LCBQYWdlQ2xpZW50SW1wbCogY2xpZW50KQoreworICAgIGdfc2lnbmFsX3N0
b3BfZW1pc3Npb25fYnlfbmFtZSh3aWRnZXQsICJkZWxldGUtZnJvbS1jdXJzb3IiKTsKKyAgICBp
bnQgZGlyZWN0aW9uID0gY291bnQgPiAwID8gMSA6IDA7CisKKyAgICAvLyBFbnN1cmluZyB0aGF0
IGRlbGV0ZVR5cGUgPD0gR19OX0VMRU1FTlRTIGhlcmUgcmVzdWx0cyBpbiBhIGNvbXBpbGVyIHdh
cm5pbmcKKyAgICAvLyB0aGF0IHRoZSBjb25kaXRpb24gaXMgYWx3YXlzIHRydWUuCisKKyAgICBp
ZiAoZGVsZXRlVHlwZSA9PSBHVEtfREVMRVRFX1dPUkRTKSB7CisgICAgICAgIGlmICghZGlyZWN0
aW9uKSB7CisgICAgICAgICAgICBjbGllbnQtPmFkZFBlbmRpbmdFZGl0b3JDb21tYW5kKCJNb3Zl
V29yZEZvcndhcmQiKTsKKyAgICAgICAgICAgIGNsaWVudC0+YWRkUGVuZGluZ0VkaXRvckNvbW1h
bmQoIk1vdmVXb3JkQmFja3dhcmQiKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNs
aWVudC0+YWRkUGVuZGluZ0VkaXRvckNvbW1hbmQoIk1vdmVXb3JkQmFja3dhcmQiKTsKKyAgICAg
ICAgICAgIGNsaWVudC0+YWRkUGVuZGluZ0VkaXRvckNvbW1hbmQoIk1vdmVXb3JkRm9yd2FyZCIp
OworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChkZWxldGVUeXBlID09IEdUS19ERUxFVEVfRElT
UExBWV9MSU5FUykgeworICAgICAgICBpZiAoIWRpcmVjdGlvbikKKyAgICAgICAgICAgIGNsaWVu
dC0+YWRkUGVuZGluZ0VkaXRvckNvbW1hbmQoIk1vdmVUb0JlZ2lubmluZ09mTGluZSIpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBjbGllbnQtPmFkZFBlbmRpbmdFZGl0b3JDb21tYW5kKCJN
b3ZlVG9FbmRPZkxpbmUiKTsKKyAgICB9IGVsc2UgaWYgKGRlbGV0ZVR5cGUgPT0gR1RLX0RFTEVU
RV9QQVJBR1JBUEhTKSB7CisgICAgICAgIGlmICghZGlyZWN0aW9uKQorICAgICAgICAgICAgY2xp
ZW50LT5hZGRQZW5kaW5nRWRpdG9yQ29tbWFuZCgiTW92ZVRvQmVnaW5uaW5nT2ZQYXJhZ3JhcGgi
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY2xpZW50LT5hZGRQZW5kaW5nRWRpdG9yQ29t
bWFuZCgiTW92ZVRvRW5kT2ZQYXJhZ3JhcGgiKTsKKyAgICB9CisKKyAgICBjb25zdCBjaGFyKiBy
YXdDb21tYW5kID0gZ3RrRGVsZXRlQ29tbWFuZHNbZGVsZXRlVHlwZV1bZGlyZWN0aW9uXTsKKyAg
ICBpZiAoIXJhd0NvbW1hbmQpCisgICAgICByZXR1cm47CisKKyAgICBmb3IgKGludCBpID0gMDsg
aSA8IGFicyhjb3VudCk7IGkrKykKKyAgICAgICAgY2xpZW50LT5hZGRQZW5kaW5nRWRpdG9yQ29t
bWFuZChyYXdDb21tYW5kKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGd0a01vdmVD
b21tYW5kc1tdWzRdID0geworICAgIHsgIk1vdmVCYWNrd2FyZCIsICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiTW92ZUZvcndhcmQiLAorICAgICAgIk1vdmVCYWNrd2FyZEFuZE1v
ZGlmeVNlbGVjdGlvbiIsICAgICAgICAgICAgICAgICAiTW92ZUZvcndhcmRBbmRNb2RpZnlTZWxl
Y3Rpb24iICAgICAgICAgICAgIH0sIC8vIEZvcndhcmQvYmFja3dhcmQgZ3JhcGhlbWUKKyAgICB7
ICJNb3ZlTGVmdCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1vdmVS
aWdodCIsCisgICAgICAiTW92ZUJhY2t3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uIiwgICAgICAgICAg
ICAgICAgICJNb3ZlRm9yd2FyZEFuZE1vZGlmeVNlbGVjdGlvbiIgICAgICAgICAgICAgfSwgLy8g
TGVmdC9yaWdodCBncmFwaGVtZQorICAgIHsgIk1vdmVXb3JkQmFja3dhcmQiLCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiTW92ZVdvcmRGb3J3YXJkIiwKKyAgICAgICJNb3ZlV29yZEJh
Y2t3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uIiwgICAgICAgICAgICAgIk1vdmVXb3JkRm9yd2FyZEFu
ZE1vZGlmeVNlbGVjdGlvbiIgICAgICAgICB9LCAvLyBGb3J3YXJkL2JhY2t3YXJkIHdvcmQKKyAg
ICB7ICJNb3ZlVXAiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1v
dmVEb3duIiwKKyAgICAgICJNb3ZlVXBBbmRNb2RpZnlTZWxlY3Rpb24iLCAgICAgICAgICAgICAg
ICAgICAgICAgIk1vdmVEb3duQW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgICAgICAgICAgICB9LCAv
LyBVcC9kb3duIGxpbmUKKyAgICB7ICJNb3ZlVG9CZWdpbm5pbmdPZkxpbmUiLCAgICAgICAgICAg
ICAgICAgICAgICAgICAgIk1vdmVUb0VuZE9mTGluZSIsCisgICAgICAiTW92ZVRvQmVnaW5uaW5n
T2ZMaW5lQW5kTW9kaWZ5U2VsZWN0aW9uIiwgICAgICAgICJNb3ZlVG9FbmRPZkxpbmVBbmRNb2Rp
ZnlTZWxlY3Rpb24iICAgICAgICAgfSwgLy8gVXAvZG93biBsaW5lIGVuZHMKKyAgICB7ICJNb3Zl
UGFyYWdyYXBoRm9yd2FyZCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1vdmVQYXJhZ3Jh
cGhCYWNrd2FyZCIsCisgICAgICAiTW92ZVBhcmFncmFwaEZvcndhcmRBbmRNb2RpZnlTZWxlY3Rp
b24iLCAgICAgICAgICJNb3ZlUGFyYWdyYXBoQmFja3dhcmRBbmRNb2RpZnlTZWxlY3Rpb24iICAg
fSwgLy8gVXAvZG93biBwYXJhZ3JhcGhzCisgICAgeyAiTW92ZVRvQmVnaW5uaW5nT2ZQYXJhZ3Jh
cGgiLCAgICAgICAgICAgICAgICAgICAgICJNb3ZlVG9FbmRPZlBhcmFncmFwaCIsCisgICAgICAi
TW92ZVRvQmVnaW5uaW5nT2ZQYXJhZ3JhcGhBbmRNb2RpZnlTZWxlY3Rpb24iLCAgICJNb3ZlVG9F
bmRPZlBhcmFncmFwaEFuZE1vZGlmeVNlbGVjdGlvbiIgICAgfSwgLy8gVXAvZG93biBwYXJhZ3Jh
cGggZW5kcy4KKyAgICB7ICJNb3ZlUGFnZVVwIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIk1vdmVQYWdlRG93biIsCisgICAgICAiTW92ZVBhZ2VVcEFuZE1vZGlmeVNlbGVj
dGlvbiIsICAgICAgICAgICAgICAgICAgICJNb3ZlUGFnZURvd25BbmRNb2RpZnlTZWxlY3Rpb24i
ICAgICAgICAgICAgfSwgLy8gVXAvZG93biBwYWdlCisgICAgeyAiTW92ZVRvQmVnaW5uaW5nT2ZE
b2N1bWVudCIsICAgICAgICAgICAgICAgICAgICAgICJNb3ZlVG9FbmRPZkRvY3VtZW50IiwKKyAg
ICAgICJNb3ZlVG9CZWdpbm5pbmdPZkRvY3VtZW50QW5kTW9kaWZ5U2VsZWN0aW9uIiwgICAgIk1v
dmVUb0VuZE9mRG9jdW1lbnRBbmRNb2RpZnlTZWxlY3Rpb24iICAgICB9LCAvLyBCZWdpbi9lbmQg
b2YgYnVmZmVyCisgICAgeyAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDAsCisgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fSAvLyBIb3Jpem9udGFsIHBhZ2UgbW92ZW1lbnQKK307CisKK3N0YXRpYyB2b2lkIG1vdmVDdXJz
b3JDYWxsYmFjayhHdGtXaWRnZXQqIHdpZGdldCwgR3RrTW92ZW1lbnRTdGVwIHN0ZXAsIGdpbnQg
Y291bnQsIGdib29sZWFuIGV4dGVuZFNlbGVjdGlvbiwgUGFnZUNsaWVudEltcGwqIGNsaWVudCkK
K3sKKyAgICBnX3NpZ25hbF9zdG9wX2VtaXNzaW9uX2J5X25hbWUod2lkZ2V0LCAibW92ZS1jdXJz
b3IiKTsKKyAgICBpbnQgZGlyZWN0aW9uID0gY291bnQgPiAwID8gMSA6IDA7CisgICAgaWYgKGV4
dGVuZFNlbGVjdGlvbikKKyAgICAgICAgZGlyZWN0aW9uICs9IDI7CisKKyAgICBpZiAoc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KHN0ZXApID49IEdfTl9FTEVNRU5UUyhndGtNb3ZlQ29tbWFuZHMpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBjaGFyKiByYXdDb21tYW5kID0gZ3RrTW92ZUNv
bW1hbmRzW3N0ZXBdW2RpcmVjdGlvbl07CisgICAgaWYgKCFyYXdDb21tYW5kKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGFicyhjb3VudCk7IGkrKykKKyAgICAg
ICAgY2xpZW50LT5hZGRQZW5kaW5nRWRpdG9yQ29tbWFuZChyYXdDb21tYW5kKTsKK30KKworc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIEN0cmxLZXkgPSAxIDw8IDA7CitzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgQWx0S2V5ID0gMSA8PCAxOworc3RhdGljIGNvbnN0IHVuc2lnbmVkIFNoaWZ0S2V5ID0gMSA8
PCAyOworCitzdHJ1Y3QgS2V5RG93bkVudHJ5IHsKKyAgICB1bnNpZ25lZCB2aXJ0dWFsS2V5Owor
ICAgIHVuc2lnbmVkIG1vZGlmaWVyczsKKyAgICBjb25zdCBjaGFyKiBuYW1lOworfTsKKworc3Ry
dWN0IEtleVByZXNzRW50cnkgeworICAgIHVuc2lnbmVkIGNoYXJDb2RlOworICAgIHVuc2lnbmVk
IG1vZGlmaWVyczsKKyAgICBjb25zdCBjaGFyKiBuYW1lOworfTsKKworc3RhdGljIGNvbnN0IEtl
eURvd25FbnRyeSBrZXlEb3duRW50cmllc1tdID0geworICAgIHsgJ0InLCAgICAgICBDdHJsS2V5
LCAgICAgICAgICAgICJUb2dnbGVCb2xkIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9LAorICAgIHsgJ0knLCAgICAgICBDdHJsS2V5LCAgICAgICAgICAgICJUb2dnbGVJdGFsaWMi
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgVktfRVNDQVBFLCAwLCAg
ICAgICAgICAgICAgICAgICJDYW5jZWwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9LAorICAgIHsgVktfT0VNX1BFUklPRCwgQ3RybEtleSwgICAgICAgICJDYW5jZWwiICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgVktfVEFCLCAgICAw
LCAgICAgICAgICAgICAgICAgICJJbnNlcnRUYWIiICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9LAorICAgIHsgVktfVEFCLCAgICBTaGlmdEtleSwgICAgICAgICAgICJJbnNlcnRC
YWNrdGFiIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgVktfUkVUVVJO
LCAwLCAgICAgICAgICAgICAgICAgICJJbnNlcnROZXdsaW5lIiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9LAorICAgIHsgVktfUkVUVVJOLCBDdHJsS2V5LCAgICAgICAgICAgICJJbnNl
cnROZXdsaW5lIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgVktfUkVU
VVJOLCBBbHRLZXksICAgICAgICAgICAgICJJbnNlcnROZXdsaW5lIiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9LAorICAgIHsgVktfUkVUVVJOLCBBbHRLZXkgfCBTaGlmdEtleSwgICJJ
bnNlcnROZXdsaW5lIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorfTsKKworc3Rh
dGljIGNvbnN0IEtleVByZXNzRW50cnkga2V5UHJlc3NFbnRyaWVzW10gPSB7CisgICAgeyAnXHQn
LCAgIDAsICAgICAgICAgICAgICAgICAgIkluc2VydFRhYiIgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0sCisgICAgeyAnXHQnLCAgIFNoaWZ0S2V5LCAgICAgICAgICAgIkluc2Vy
dEJhY2t0YWIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyAnXHInLCAg
IDAsICAgICAgICAgICAgICAgICAgIkluc2VydE5ld2xpbmUiICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0sCisgICAgeyAnXHInLCAgIEN0cmxLZXksICAgICAgICAgICAgIkluc2VydE5l
d2xpbmUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyAnXHInLCAgIEFs
dEtleSwgICAgICAgICAgICAgIkluc2VydE5ld2xpbmUiICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0sCisgICAgeyAnXHInLCAgIEFsdEtleSB8IFNoaWZ0S2V5LCAgIkluc2VydE5ld2xp
bmUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCit9OworCitQYWdlQ2xpZW50SW1w
bDo6UGFnZUNsaWVudEltcGwoR3RrV2lkZ2V0KiB2aWV3V2lkZ2V0KQorICAgIDogbV9uYXRpdmVX
aWRnZXQoZ3RrX3RleHRfdmlld19uZXcoKSkKK3sKKyAgICBtX3ZpZXdXaWRnZXQgPSB2aWV3V2lk
Z2V0OworCisgICAgZ19zaWduYWxfY29ubmVjdChtX25hdGl2ZVdpZGdldC5nZXQoKSwgImJhY2tz
cGFjZSIsIEdfQ0FMTEJBQ0soYmFja3NwYWNlQ2FsbGJhY2spLCB0aGlzKTsKKyAgICBnX3NpZ25h
bF9jb25uZWN0KG1fbmF0aXZlV2lkZ2V0LmdldCgpLCAiY3V0LWNsaXBib2FyZCIsIEdfQ0FMTEJB
Q0soY3V0Q2xpcGJvYXJkQ2FsbGJhY2spLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1f
bmF0aXZlV2lkZ2V0LmdldCgpLCAiY29weS1jbGlwYm9hcmQiLCBHX0NBTExCQUNLKGNvcHlDbGlw
Ym9hcmRDYWxsYmFjayksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9uYXRpdmVXaWRn
ZXQuZ2V0KCksICJwYXN0ZS1jbGlwYm9hcmQiLCBHX0NBTExCQUNLKHBhc3RlQ2xpcGJvYXJkQ2Fs
bGJhY2spLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1fbmF0aXZlV2lkZ2V0LmdldCgp
LCAic2VsZWN0LWFsbCIsIEdfQ0FMTEJBQ0soc2VsZWN0QWxsQ2FsbGJhY2spLCB0aGlzKTsKKyAg
ICBnX3NpZ25hbF9jb25uZWN0KG1fbmF0aXZlV2lkZ2V0LmdldCgpLCAibW92ZS1jdXJzb3IiLCBH
X0NBTExCQUNLKG1vdmVDdXJzb3JDYWxsYmFjayksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5l
Y3QobV9uYXRpdmVXaWRnZXQuZ2V0KCksICJkZWxldGUtZnJvbS1jdXJzb3IiLCBHX0NBTExCQUNL
KGRlbGV0ZUZyb21DdXJzb3JDYWxsYmFjayksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
bV9uYXRpdmVXaWRnZXQuZ2V0KCksICJ0b2dnbGUtb3ZlcndyaXRlIiwgR19DQUxMQkFDSyh0b2dn
bGVPdmVyd3JpdGVDYWxsYmFjayksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9uYXRp
dmVXaWRnZXQuZ2V0KCksICJwb3B1cC1tZW51IiwgR19DQUxMQkFDSyhwb3B1cE1lbnVDYWxsYmFj
ayksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9uYXRpdmVXaWRnZXQuZ2V0KCksICJz
aG93LWhlbHAiLCBHX0NBTExCQUNLKHNob3dIZWxwQ2FsbGJhY2spLCB0aGlzKTsKK30KKworUGFn
ZUNsaWVudEltcGw6On5QYWdlQ2xpZW50SW1wbCgpCit7Cit9CisKK3ZvaWQgUGFnZUNsaWVudElt
cGw6OmdldEVkaXRvckNvbW1hbmRzRm9yS2V5RXZlbnQoY29uc3QgTmF0aXZlV2ViS2V5Ym9hcmRF
dmVudCYgZXZlbnQsIFZlY3RvcjxXVEY6OlN0cmluZz4mIGNvbW1hbmRMaXN0KQoreworICAgIG1f
cGVuZGluZ0VkaXRvckNvbW1hbmRzLmNsZWFyKCk7CisKKyNpZmRlZiBHVEtfQVBJX1ZFUlNJT05f
MgorICAgIGd0a19iaW5kaW5nc19hY3RpdmF0ZV9ldmVudChHVEtfT0JKRUNUKG1fbmF0aXZlV2lk
Z2V0LmdldCgpKSwgY29uc3RfY2FzdDxHZGtFdmVudEtleSo+KCZldmVudC5uYXRpdmVFdmVudCgp
LT5rZXkpKTsKKyNlbHNlCisgICAgZ3RrX2JpbmRpbmdzX2FjdGl2YXRlX2V2ZW50KEdfT0JKRUNU
KG1fbmF0aXZlV2lkZ2V0LmdldCgpKSwgY29uc3RfY2FzdDxHZGtFdmVudEtleSo+KCZldmVudC5u
YXRpdmVFdmVudCgpLT5rZXkpKTsKKyNlbmRpZgorCisgICAgaWYgKG1fcGVuZGluZ0VkaXRvckNv
bW1hbmRzLmlzRW1wdHkoKSkgeworICAgICAgICBjb21tYW5kTGlzdC5hcHBlbmQobV9wZW5kaW5n
RWRpdG9yQ29tbWFuZHMpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgREVGSU5FX1NU
QVRJQ19MT0NBTChJbnRDb25zdENoYXJIYXNoTWFwLCBrZXlEb3duQ29tbWFuZHNNYXAsICgpKTsK
KyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEludENvbnN0Q2hhckhhc2hNYXAsIGtleVByZXNzQ29t
bWFuZHNNYXAsICgpKTsKKworICAgIGlmIChrZXlEb3duQ29tbWFuZHNNYXAuaXNFbXB0eSgpKSB7
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHX05fRUxFTUVOVFMoa2V5RG93bkVu
dHJpZXMpOyBpKyspCisgICAgICAgICAgICBrZXlEb3duQ29tbWFuZHNNYXAuc2V0KGtleURvd25F
bnRyaWVzW2ldLm1vZGlmaWVycyA8PCAxNiB8IGtleURvd25FbnRyaWVzW2ldLnZpcnR1YWxLZXks
IGtleURvd25FbnRyaWVzW2ldLm5hbWUpOworCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBHX05fRUxFTUVOVFMoa2V5UHJlc3NFbnRyaWVzKTsgaSsrKQorICAgICAgICAgICAga2V5
UHJlc3NDb21tYW5kc01hcC5zZXQoa2V5UHJlc3NFbnRyaWVzW2ldLm1vZGlmaWVycyA8PCAxNiB8
IGtleVByZXNzRW50cmllc1tpXS5jaGFyQ29kZSwga2V5UHJlc3NFbnRyaWVzW2ldLm5hbWUpOwor
ICAgIH0KKworICAgIHVuc2lnbmVkIG1vZGlmaWVycyA9IDA7CisgICAgaWYgKGV2ZW50LnNoaWZ0
S2V5KCkpCisgICAgICAgIG1vZGlmaWVycyB8PSBTaGlmdEtleTsKKyAgICBpZiAoZXZlbnQuYWx0
S2V5KCkpCisgICAgICAgIG1vZGlmaWVycyB8PSBBbHRLZXk7CisgICAgaWYgKGV2ZW50LmNvbnRy
b2xLZXkoKSkKKyAgICAgICAgbW9kaWZpZXJzIHw9IEN0cmxLZXk7CisKKyAgICAvLyBGb3Iga2V5
cHJlc3MgZXZlbnRzLCB3ZSB3YW50IGNoYXJDb2RlKCksIGJ1dCBrZXlDb2RlKCkgZG9lcyB0aGF0
LgorICAgIGludCBtYXBLZXkgPSBtb2RpZmllcnMgPDwgMTYgfCBldmVudC5uYXRpdmVWaXJ0dWFs
S2V5Q29kZSgpOworICAgIGlmIChtYXBLZXkpIHsKKyAgICAgICAgSGFzaE1hcDxpbnQsIGNvbnN0
IGNoYXIqPiogY29tbWFuZE1hcCA9IGV2ZW50LnR5cGUoKSA9PSBXZWJFdmVudDo6S2V5RG93biA/
CisgICAgICAgICAgICAma2V5RG93bkNvbW1hbmRzTWFwIDogJmtleVByZXNzQ29tbWFuZHNNYXA7
CisgICAgICAgIGlmIChjb25zdCBjaGFyKiBjb21tYW5kU3RyaW5nID0gY29tbWFuZE1hcC0+Z2V0
KG1hcEtleSkpCisgICAgICAgICAgICBtX3BlbmRpbmdFZGl0b3JDb21tYW5kcy5hcHBlbmQoY29t
bWFuZFN0cmluZyk7CisgICAgfQorCisgICAgY29tbWFuZExpc3QuYXBwZW5kKG1fcGVuZGluZ0Vk
aXRvckNvbW1hbmRzKTsKK30KKworLy8gUGFnZUNsaWVudCdzIHB1cmUgdmlydHVhbCBmdW5jdGlv
bnMKK1Bhc3NPd25QdHI8RHJhd2luZ0FyZWFQcm94eT4gUGFnZUNsaWVudEltcGw6OmNyZWF0ZURy
YXdpbmdBcmVhUHJveHkoKQoreworICAgIFdlYktpdFdlYlZpZXdCYXNlKiB2aWV3ID0gV0VCS0lU
X1dFQl9WSUVXX0JBU0UobV92aWV3V2lkZ2V0KTsKKyAgICByZXR1cm4gQ2h1bmtlZFVwZGF0ZURy
YXdpbmdBcmVhUHJveHk6OmNyZWF0ZSh2aWV3LCB3ZWJraXRXZWJWaWV3QmFzZUdldFBhZ2Uodmll
dykpOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpzZXRWaWV3TmVlZHNEaXNwbGF5KGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQg
UGFnZUNsaWVudEltcGw6OmRpc3BsYXlWaWV3KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpzY3JvbGxWaWV3KGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmIHNjcm9sbFJlY3QsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNjcm9sbE9mZnNldCkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitXZWJDb3JlOjpJbnRTaXplIFBhZ2VDbGllbnRJ
bXBsOjp2aWV3U2l6ZSgpCit7CisgICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uOworICAgIGd0
a193aWRnZXRfZ2V0X2FsbG9jYXRpb24obV92aWV3V2lkZ2V0LCAmYWxsb2NhdGlvbik7CisgICAg
cmV0dXJuIEludFNpemUoYWxsb2NhdGlvbi53aWR0aCwgYWxsb2NhdGlvbi5oZWlnaHQpOworfQor
Citib29sIFBhZ2VDbGllbnRJbXBsOjppc1ZpZXdXaW5kb3dBY3RpdmUoKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUGFnZUNsaWVudEltcGw6
OmlzVmlld0ZvY3VzZWQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgUGFnZUNsaWVudEltcGw6OmlzVmlld1Zpc2libGUoKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUGFnZUNsaWVudElt
cGw6OmlzVmlld0luV2luZG93KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVy
biB0cnVlOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpQYWdlQ2xpZW50SW1wbDo6cHJvY2Vz
c0RpZENyYXNoKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBhZ2VDbGll
bnRJbXBsOjpkaWRSZWxhdW5jaFByb2Nlc3MoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnRha2VGb2N1cyhib29sKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnRvb2xUaXBDaGFuZ2VkKGNvbnN0
IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
dm9pZCBQYWdlQ2xpZW50SW1wbDo6c2V0Q3Vyc29yKGNvbnN0IEN1cnNvciYgY3Vyc29yKQorewor
ICAgIC8vIFtHVEtdIFdpZGdldDo6c2V0Q3Vyc29yKCkgZ2V0cyBjYWxsZWQgZnJlcXVlbnRseQor
ICAgIC8vIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Mzg4CisgICAg
Ly8gU2V0dGluZyB0aGUgY3Vyc29yIG1heSBiZSBhbiBleHBlbnNpdmUgb3BlcmF0aW9uIGluIHNv
bWUgYmFja2VuZHMsCisgICAgLy8gc28gZG9uJ3QgcmUtc2V0IHRoZSBjdXJzb3IgaWYgaXQncyBh
bHJlYWR5IHNldCB0byB0aGUgdGFyZ2V0IHZhbHVlLgorICAgIEdka1dpbmRvdyogd2luZG93ID0g
Z3RrX3dpZGdldF9nZXRfd2luZG93KG1fdmlld1dpZGdldCk7CisgICAgR2RrQ3Vyc29yKiBjdXJy
ZW50Q3Vyc29yID0gZ2RrX3dpbmRvd19nZXRfY3Vyc29yKHdpbmRvdyk7CisgICAgR2RrQ3Vyc29y
KiBuZXdDdXJzb3IgPSBjdXJzb3IucGxhdGZvcm1DdXJzb3IoKS5nZXQoKTsKKyAgICBpZiAoY3Vy
cmVudEN1cnNvciAhPSBuZXdDdXJzb3IpCisgICAgICAgIGdka193aW5kb3dfc2V0X2N1cnNvcih3
aW5kb3csIG5ld0N1cnNvcik7Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnNldFZpZXdwb3J0
QXJndW1lbnRzKGNvbnN0IFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzJikKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpyZWdpc3RlckVkaXRDb21t
YW5kKFBhc3NSZWZQdHI8V2ViRWRpdENvbW1hbmRQcm94eT4sIFdlYlBhZ2VQcm94eTo6VW5kb09y
UmVkbykKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBs
OjpjbGVhckFsbEVkaXRDb21tYW5kcygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
Ym9vbCBQYWdlQ2xpZW50SW1wbDo6Y2FuVW5kb1JlZG8oV2ViUGFnZVByb3h5OjpVbmRvT3JSZWRv
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lk
IFBhZ2VDbGllbnRJbXBsOjpleGVjdXRlVW5kb1JlZG8oV2ViUGFnZVByb3h5OjpVbmRvT3JSZWRv
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK0Zsb2F0UmVjdCBQYWdlQ2xpZW50SW1w
bDo6Y29udmVydFRvRGV2aWNlU3BhY2UoY29uc3QgRmxvYXRSZWN0JiB2aWV3UmVjdCkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB2aWV3UmVjdDsKK30KKworRmxvYXRSZWN0
IFBhZ2VDbGllbnRJbXBsOjpjb252ZXJ0VG9Vc2VyU3BhY2UoY29uc3QgRmxvYXRSZWN0JiB2aWV3
UmVjdCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB2aWV3UmVjdDsKK30K
KworSW50UmVjdCBQYWdlQ2xpZW50SW1wbDo6d2luZG93VG9TY3JlZW4oY29uc3QgSW50UmVjdCYg
cmVjdCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBJbnRSZWN0KCk7Cit9
CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OmRvbmVXaXRoS2V5RXZlbnQoY29uc3QgTmF0aXZlV2Vi
S2V5Ym9hcmRFdmVudCYsIGJvb2wgd2FzRXZlbnRIYW5kbGVkKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OmRpZE5vdEhhbmRsZUtleUV2ZW50KGNv
bnN0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmIGV2ZW50KQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK1Bhc3NSZWZQdHI8V2ViUG9wdXBNZW51UHJveHk+IFBhZ2VDbGllbnRJbXBsOjpj
cmVhdGVQb3B1cE1lbnVQcm94eShXZWJQYWdlUHJveHkqKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgcmV0dXJuIDA7Cit9CisKK1Bhc3NSZWZQdHI8V2ViQ29udGV4dE1lbnVQcm94eT4g
UGFnZUNsaWVudEltcGw6OmNyZWF0ZUNvbnRleHRNZW51UHJveHkoV2ViUGFnZVByb3h5KikKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCit2b2lkIFBhZ2VDbGll
bnRJbXBsOjpzZXRGaW5kSW5kaWNhdG9yKFBhc3NSZWZQdHI8RmluZEluZGljYXRvcj4sIGJvb2wg
ZmFkZU91dCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCisjaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQordm9pZCBQYWdlQ2xpZW50SW1wbDo6cGFnZURpZEVudGVyQWNjZWxl
cmF0ZWRDb21wb3NpdGluZygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQ
YWdlQ2xpZW50SW1wbDo6cGFnZURpZExlYXZlQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OmRpZENvbW1pdExvYWRGb3JNYWluRnJhbWUo
Ym9vbCB1c2VDdXN0b21SZXByZXNlbnRhdGlvbikKK3sKK30KKwordm9pZCBQYWdlQ2xpZW50SW1w
bDo6ZGlkRmluaXNoTG9hZGluZ0RhdGFGb3JDdXN0b21SZXByZXNlbnRhdGlvbihjb25zdCBTdHJp
bmcmIHN1Z2dlc3RlZEZpbGVuYW1lLCBjb25zdCBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlJikKK3sK
K30KKworZG91YmxlIFBhZ2VDbGllbnRJbXBsOjpjdXN0b21SZXByZXNlbnRhdGlvblpvb21GYWN0
b3IoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQg
UGFnZUNsaWVudEltcGw6OnNldEN1c3RvbVJlcHJlc2VudGF0aW9uWm9vbUZhY3Rvcihkb3VibGUp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6cGFn
ZUNsb3NlZCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQYWdlQ2xpZW50
SW1wbDo6ZGlkQ2hhbmdlU2Nyb2xsYmFyc0Zvck1haW5GcmFtZSgpIGNvbnN0Cit7Cit9CisKK3Zv
aWQgUGFnZUNsaWVudEltcGw6OmZsYXNoQmFja2luZ1N0b3JlVXBkYXRlcyhjb25zdCBWZWN0b3I8
SW50UmVjdD4mKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUGFnZUNsaWVu
dEltcGw6OmZpbmRTdHJpbmdJbkN1c3RvbVJlcHJlc2VudGF0aW9uKGNvbnN0IFN0cmluZyYsIEZp
bmRPcHRpb25zLCB1bnNpZ25lZCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lk
IFBhZ2VDbGllbnRJbXBsOjpjb3VudFN0cmluZ01hdGNoZXNJbkN1c3RvbVJlcHJlc2VudGF0aW9u
KGNvbnN0IFN0cmluZyYsIEZpbmRPcHRpb25zLCB1bnNpZ25lZCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmggYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmE3ODNmOTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5oCkBAIC0wLDAgKzEsMTExIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIFBhZ2VDbGllbnRJbXBsX2gKKyNkZWZpbmUgUGFnZUNsaWVudElt
cGxfaAorCisjaW5jbHVkZSAiUGFnZUNsaWVudC5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5o
IgorI2luY2x1ZGUgIldpbmRvd3NLZXlib2FyZENvZGVzLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9J
bnRTaXplLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+CisKK3R5cGVkZWYgc3RydWN0IF9HdGtXaWRnZXQgR3RrV2lkZ2V0OworCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworY2xhc3MgRHJhd2luZ0FyZWFQcm94eTsKK2NsYXNzIFdlYlBhZ2VOYW1l
c3BhY2U7CisKK2NsYXNzIFBhZ2VDbGllbnRJbXBsIDogcHVibGljIFBhZ2VDbGllbnQgeworcHVi
bGljOgorICAgIH5QYWdlQ2xpZW50SW1wbCgpOworICAgIHN0YXRpYyBQYXNzT3duUHRyPFBhZ2VD
bGllbnRJbXBsPiBjcmVhdGUoR3RrV2lkZ2V0KiB3ZWJWaWV3KQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UHRyKG5ldyBQYWdlQ2xpZW50SW1wbCh3ZWJWaWV3KSk7CisgICAgfQorCisgICAg
dm9pZCBhZGRQZW5kaW5nRWRpdG9yQ29tbWFuZChjb25zdCBjaGFyKiBjb21tYW5kKSB7IG1fcGVu
ZGluZ0VkaXRvckNvbW1hbmRzLmFwcGVuZChXVEY6OlN0cmluZyhjb21tYW5kKSk7IH0KKworcHJp
dmF0ZToKKyAgICBQYWdlQ2xpZW50SW1wbChHdGtXaWRnZXQqKTsKKworICAgIHZpcnR1YWwgUGFz
c093blB0cjxEcmF3aW5nQXJlYVByb3h5PiBjcmVhdGVEcmF3aW5nQXJlYVByb3h5KCk7CisgICAg
dmlydHVhbCB2b2lkIHNldFZpZXdOZWVkc0Rpc3BsYXkoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYp
OworICAgIHZpcnR1YWwgdm9pZCBkaXNwbGF5VmlldygpOworICAgIHZpcnR1YWwgdm9pZCBzY3Jv
bGxWaWV3KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNjcm9sbFJlY3QsIGNvbnN0IFdlYkNvcmU6
OkludFNpemUmIHNjcm9sbE9mZnNldCk7CisgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRTaXplIHZp
ZXdTaXplKCk7CisgICAgdmlydHVhbCBib29sIGlzVmlld1dpbmRvd0FjdGl2ZSgpOworICAgIHZp
cnR1YWwgYm9vbCBpc1ZpZXdGb2N1c2VkKCk7CisgICAgdmlydHVhbCBib29sIGlzVmlld1Zpc2li
bGUoKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNWaWV3SW5XaW5kb3coKTsKKyAgICB2aXJ0dWFsIHZv
aWQgcHJvY2Vzc0RpZENyYXNoKCk7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlbGF1bmNoUHJvY2Vz
cygpOworICAgIHZpcnR1YWwgdm9pZCBwYWdlQ2xvc2VkKCk7CisgICAgdmlydHVhbCB2b2lkIHRh
a2VGb2N1cyhib29sIGRpcmVjdGlvbik7CisgICAgdmlydHVhbCB2b2lkIHRvb2xUaXBDaGFuZ2Vk
KGNvbnN0IFdURjo6U3RyaW5nJiwgY29uc3QgV1RGOjpTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0Q3Vyc29yKGNvbnN0IFdlYkNvcmU6OkN1cnNvciYpOworICAgIHZpcnR1YWwgdm9pZCBz
ZXRWaWV3cG9ydEFyZ3VtZW50cyhjb25zdCBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50cyYpOwor
ICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckVkaXRDb21tYW5kKFBhc3NSZWZQdHI8V2ViRWRpdENv
bW1hbmRQcm94eT4sIFdlYlBhZ2VQcm94eTo6VW5kb09yUmVkbyk7CisgICAgdmlydHVhbCB2b2lk
IGNsZWFyQWxsRWRpdENvbW1hbmRzKCk7CisgICAgdmlydHVhbCBib29sIGNhblVuZG9SZWRvKFdl
YlBhZ2VQcm94eTo6VW5kb09yUmVkbyk7CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVVbmRvUmVk
byhXZWJQYWdlUHJveHk6OlVuZG9PclJlZG8pOworICAgIHZpcnR1YWwgV2ViQ29yZTo6RmxvYXRS
ZWN0IGNvbnZlcnRUb0RldmljZVNwYWNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOworICAg
IHZpcnR1YWwgV2ViQ29yZTo6RmxvYXRSZWN0IGNvbnZlcnRUb1VzZXJTcGFjZShjb25zdCBXZWJD
b3JlOjpGbG9hdFJlY3QmKTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFJlY3Qgd2luZG93VG9T
Y3JlZW4oY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBkb25lV2l0
aEtleUV2ZW50KGNvbnN0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmLCBib29sIHdhc0V2ZW50SGFu
ZGxlZCk7CisgICAgdmlydHVhbCB2b2lkIGRpZE5vdEhhbmRsZUtleUV2ZW50KGNvbnN0IE5hdGl2
ZVdlYktleWJvYXJkRXZlbnQmKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViUG9wdXBNZW51
UHJveHk+IGNyZWF0ZVBvcHVwTWVudVByb3h5KFdlYlBhZ2VQcm94eSopOworICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxXZWJDb250ZXh0TWVudVByb3h5PiBjcmVhdGVDb250ZXh0TWVudVByb3h5KFdl
YlBhZ2VQcm94eSopOworICAgIHZpcnR1YWwgdm9pZCBzZXRGaW5kSW5kaWNhdG9yKFBhc3NSZWZQ
dHI8RmluZEluZGljYXRvcj4sIGJvb2wgZmFkZU91dCk7CisgICAgdmlydHVhbCB2b2lkIGRpZENo
YW5nZVNjcm9sbGJhcnNGb3JNYWluRnJhbWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgZmxh
c2hCYWNraW5nU3RvcmVVcGRhdGVzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpJbnRSZWN0PiYgdXBk
YXRlUmVjdHMpOworICAgIHZpcnR1YWwgZmxvYXQgdXNlclNwYWNlU2NhbGVGYWN0b3IoKSBjb25z
dCB7IHJldHVybiAxOyB9CisgICAgdmlydHVhbCB2b2lkIGdldEVkaXRvckNvbW1hbmRzRm9yS2V5
RXZlbnQoY29uc3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCYsIFZlY3RvcjxXVEY6OlN0cmluZz4m
KTsKKyAgICB2aXJ0dWFsIHZvaWQgZmluZFN0cmluZ0luQ3VzdG9tUmVwcmVzZW50YXRpb24oY29u
c3QgU3RyaW5nJiwgRmluZE9wdGlvbnMsIHVuc2lnbmVkKTsKKyAgICB2aXJ0dWFsIHZvaWQgY291
bnRTdHJpbmdNYXRjaGVzSW5DdXN0b21SZXByZXNlbnRhdGlvbihjb25zdCBTdHJpbmcmLCBGaW5k
T3B0aW9ucywgdW5zaWduZWQpOworCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQor
ICAgIHZpcnR1YWwgdm9pZCBwYWdlRGlkRW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCk7Cisg
ICAgdmlydHVhbCB2b2lkIHBhZ2VEaWRMZWF2ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKTsKKyNl
bmRpZgorCisgICAgdmlydHVhbCB2b2lkIGRpZENvbW1pdExvYWRGb3JNYWluRnJhbWUoYm9vbCB1
c2VDdXN0b21SZXByZXNlbnRhdGlvbik7CisgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRp
bmdEYXRhRm9yQ3VzdG9tUmVwcmVzZW50YXRpb24oY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxl
bmFtZSwgY29uc3QgQ29yZUlQQzo6RGF0YVJlZmVyZW5jZSYpOworICAgIHZpcnR1YWwgZG91Ymxl
IGN1c3RvbVJlcHJlc2VudGF0aW9uWm9vbUZhY3RvcigpOworICAgIHZpcnR1YWwgdm9pZCBzZXRD
dXN0b21SZXByZXNlbnRhdGlvblpvb21GYWN0b3IoZG91YmxlKTsKKworICAgIC8vIE1lbWJlcnMg
b2YgUGFnZUNsaWVudEltcGwgY2xhc3MKKyAgICBHdGtXaWRnZXQqIG1fdmlld1dpZGdldDsKKyAg
ICBWZWN0b3I8V1RGOjpTdHJpbmc+IG1fcGVuZGluZ0VkaXRvckNvbW1hbmRzOworICAgIEdSZWZQ
dHI8R3RrV2lkZ2V0PiBtX25hdGl2ZVdpZGdldDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorCisjZW5kaWYgLy8gUGFnZUNsaWVudEltcGxfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwCmluZGV4IGFlNDVmMTku
LmQ2N2ZjMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFdlYlZpZXdCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAKQEAgLTMzLDEyICszMywxMiBAQAogI2luY2x1ZGUgIk5h
dGl2ZVdlYktleWJvYXJkRXZlbnQuaCIKICNpbmNsdWRlICJOYXRpdmVXZWJNb3VzZUV2ZW50Lmgi
CiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQYWdlQ2xpZW50SW1wbC5o
IgogI2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgiCiAjaW5jbHVkZSAiV2ViQ29udGV4dC5oIgogI2lu
Y2x1ZGUgIldlYkV2ZW50RmFjdG9yeS5oIgogI2luY2x1ZGUgIldlYktpdFdlYlZpZXdCYXNlUHJp
dmF0ZS5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgotI2luY2x1ZGUgIldlYlZpZXcuaCIK
ICNpbmNsdWRlICJXaW5kb3dzS2V5Ym9hcmRDb2Rlcy5oIgogI2luY2x1ZGUgPFdlYktpdDIvV0tD
b250ZXh0Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgpAQCAtNDksNyArNDksNyBA
QCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIEdfREVGSU5FX1RZUEUoV2ViS2l0V2ViVmlld0Jh
c2UsIHdlYmtpdF93ZWJfdmlld19iYXNlLCBHVEtfVFlQRV9DT05UQUlORVIpCiAKIHN0cnVjdCBf
V2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlIHsKLSAgICBPd25QdHI8V2ViVmlldz4gcGFnZUNsaWVu
dDsKKyAgICBPd25QdHI8UGFnZUNsaWVudEltcGw+IHBhZ2VDbGllbnQ7CiAgICAgUmVmUHRyPFdl
YlBhZ2VQcm94eT4gcGFnZTsKICAgICBnYm9vbGVhbiBpc1BhZ2VBY3RpdmU7CiAKQEAgLTE0OCw3
ICsxNDgsNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfYmFzZV9pbml0KFdlYktpdFdl
YlZpZXdCYXNlKiB3ZWJWaWV3QmFzZSkKIAogICAgIGd0a193aWRnZXRfc2V0X2Nhbl9mb2N1cyhH
VEtfV0lER0VUKHdlYlZpZXdCYXNlKSwgVFJVRSk7CiAgICAgcHJpdi0+aW1Db250ZXh0ID0gZ3Rr
X2ltX211bHRpY29udGV4dF9uZXcoKTsKLSAgICBwcml2LT5wYWdlQ2xpZW50ID0gV2ViVmlldzo6
Y3JlYXRlKEdUS19XSURHRVQod2ViVmlld0Jhc2UpKTsKKyAgICBwcml2LT5wYWdlQ2xpZW50ID0g
UGFnZUNsaWVudEltcGw6OmNyZWF0ZShHVEtfV0lER0VUKHdlYlZpZXdCYXNlKSk7CiB9CiAKICNp
ZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2d0ay9XZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViVmll
dy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkYzVmYzkuLjAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJWaWV3LmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDUwMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rv
cm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMSBJZ2FsaWEgUy5MLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiV2ViVmlldy5oIgotCi0jaW5jbHVkZSAiQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhUHJv
eHkuaCIKLSNpbmNsdWRlICJOYXRpdmVXZWJLZXlib2FyZEV2ZW50LmgiCi0jaW5jbHVkZSAiTmF0
aXZlV2ViTW91c2VFdmVudC5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVk
ZSAiV2ViQ29udGV4dC5oIgotI2luY2x1ZGUgIldlYkNvbnRleHRNZW51UHJveHkuaCIKLSNpbmNs
dWRlICJXZWJFdmVudEZhY3RvcnkuaCIKLSNpbmNsdWRlICJXZWJLaXRXZWJWaWV3QmFzZVByaXZh
dGUuaCIKLSNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KLQotdHlwZWRlZiBIYXNoTWFwPGludCwgY29uc3QgY2hhcio+IEludENvbnN0Q2hh
ckhhc2hNYXA7Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0
IHsKLQotc3RhdGljIHZvaWQgYmFja3NwYWNlQ2FsbGJhY2soR3RrV2lkZ2V0KiB3aWRnZXQsIFdl
YlZpZXcqIGNsaWVudCkKLXsKLSAgICBnX3NpZ25hbF9zdG9wX2VtaXNzaW9uX2J5X25hbWUod2lk
Z2V0LCAiYmFja3NwYWNlIik7Ci0gICAgY2xpZW50LT5hZGRQZW5kaW5nRWRpdG9yQ29tbWFuZCgi
RGVsZXRlQmFja3dhcmQiKTsKLX0KLQotc3RhdGljIHZvaWQgc2VsZWN0QWxsQ2FsbGJhY2soR3Rr
V2lkZ2V0KiB3aWRnZXQsIGdib29sZWFuIHNlbGVjdCwgV2ViVmlldyogY2xpZW50KQotewotICAg
IGdfc2lnbmFsX3N0b3BfZW1pc3Npb25fYnlfbmFtZSh3aWRnZXQsICJzZWxlY3QtYWxsIik7Ci0g
ICAgY2xpZW50LT5hZGRQZW5kaW5nRWRpdG9yQ29tbWFuZChzZWxlY3QgPyAiU2VsZWN0QWxsIiA6
ICJVbnNlbGVjdCIpOwotfQotCi1zdGF0aWMgdm9pZCBjdXRDbGlwYm9hcmRDYWxsYmFjayhHdGtX
aWRnZXQqIHdpZGdldCwgV2ViVmlldyogY2xpZW50KQotewotICAgIGdfc2lnbmFsX3N0b3BfZW1p
c3Npb25fYnlfbmFtZSh3aWRnZXQsICJjdXQtY2xpcGJvYXJkIik7Ci0gICAgY2xpZW50LT5hZGRQ
ZW5kaW5nRWRpdG9yQ29tbWFuZCgiQ3V0Iik7Ci19Ci0KLXN0YXRpYyB2b2lkIGNvcHlDbGlwYm9h
cmRDYWxsYmFjayhHdGtXaWRnZXQqIHdpZGdldCwgV2ViVmlldyogY2xpZW50KQotewotICAgIGdf
c2lnbmFsX3N0b3BfZW1pc3Npb25fYnlfbmFtZSh3aWRnZXQsICJjb3B5LWNsaXBib2FyZCIpOwot
ICAgIGNsaWVudC0+YWRkUGVuZGluZ0VkaXRvckNvbW1hbmQoIkNvcHkiKTsKLX0KLQotc3RhdGlj
IHZvaWQgcGFzdGVDbGlwYm9hcmRDYWxsYmFjayhHdGtXaWRnZXQqIHdpZGdldCwgV2ViVmlldyog
Y2xpZW50KQotewotICAgIGdfc2lnbmFsX3N0b3BfZW1pc3Npb25fYnlfbmFtZSh3aWRnZXQsICJw
YXN0ZS1jbGlwYm9hcmQiKTsKLSAgICBjbGllbnQtPmFkZFBlbmRpbmdFZGl0b3JDb21tYW5kKCJQ
YXN0ZSIpOwotfQotCi1zdGF0aWMgdm9pZCB0b2dnbGVPdmVyd3JpdGVDYWxsYmFjayhHdGtXaWRn
ZXQqIHdpZGdldCwgRWRpdG9yQ2xpZW50KikKLXsKLSAgICAvLyBXZSBkb24ndCBzdXBwb3J0IHRv
Z2dsaW5nIHRoZSBvdmVyd3JpdGUgbW9kZSwgYnV0IHRoZSBkZWZhdWx0IGNhbGxiYWNrIGV4cGVj
dHMKLSAgICAvLyB0aGUgR3RrVGV4dFZpZXcgdG8gaGF2ZSBhIGxheW91dCwgc28gd2UgaGFuZGxl
IHRoaXMgc2lnbmFsIGp1c3QgdG8gc3RvcCBpdC4KLSAgICBnX3NpZ25hbF9zdG9wX2VtaXNzaW9u
X2J5X25hbWUod2lkZ2V0LCAidG9nZ2xlLW92ZXJ3cml0ZSIpOwotfQotCi0vLyBHVEsrIHdpbGwg
c3RpbGwgc2VuZCB0aGVzZSBzaWduYWxzIHRvIHRoZSB3ZWIgdmlldy4gU28gd2UgY2FuIHNhZmVs
eSBzdG9wIHNpZ25hbAotLy8gZW1pc3Npb24gd2l0aG91dCBicmVha2luZyBhY2Nlc3NpYmlsaXR5
Lgotc3RhdGljIHZvaWQgcG9wdXBNZW51Q2FsbGJhY2soR3RrV2lkZ2V0KiB3aWRnZXQsIEVkaXRv
ckNsaWVudCopCi17Ci0gICAgZ19zaWduYWxfc3RvcF9lbWlzc2lvbl9ieV9uYW1lKHdpZGdldCwg
InBvcHVwLW1lbnUiKTsKLX0KLQotc3RhdGljIHZvaWQgc2hvd0hlbHBDYWxsYmFjayhHdGtXaWRn
ZXQqIHdpZGdldCwgRWRpdG9yQ2xpZW50KikKLXsKLSAgICBnX3NpZ25hbF9zdG9wX2VtaXNzaW9u
X2J5X25hbWUod2lkZ2V0LCAic2hvdy1oZWxwIik7Ci19Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBj
b25zdCBndGtEZWxldGVDb21tYW5kc1tdWzJdID0gewotICAgIHsgIkRlbGV0ZUJhY2t3YXJkIiwg
ICAgICAgICAgICAgICAiRGVsZXRlRm9yd2FyZCIgICAgICAgICAgICAgICAgICAgICAgICB9LCAv
LyBDaGFyYWN0ZXJzCi0gICAgeyAiRGVsZXRlV29yZEJhY2t3YXJkIiwgICAgICAgICAgICJEZWxl
dGVXb3JkRm9yd2FyZCIgICAgICAgICAgICAgICAgICAgIH0sIC8vIFdvcmQgZW5kcwotICAgIHsg
IkRlbGV0ZVdvcmRCYWNrd2FyZCIsICAgICAgICAgICAiRGVsZXRlV29yZEZvcndhcmQiICAgICAg
ICAgICAgICAgICAgICB9LCAvLyBXb3JkcwotICAgIHsgIkRlbGV0ZVRvQmVnaW5uaW5nT2ZMaW5l
IiwgICAgICAiRGVsZXRlVG9FbmRPZkxpbmUiICAgICAgICAgICAgICAgICAgICB9LCAvLyBMaW5l
cwotICAgIHsgIkRlbGV0ZVRvQmVnaW5uaW5nT2ZMaW5lIiwgICAgICAiRGVsZXRlVG9FbmRPZkxp
bmUiICAgICAgICAgICAgICAgICAgICB9LCAvLyBMaW5lIGVuZHMKLSAgICB7ICJEZWxldGVUb0Jl
Z2lubmluZ09mUGFyYWdyYXBoIiwgIkRlbGV0ZVRvRW5kT2ZQYXJhZ3JhcGgiICAgICAgICAgICAg
ICAgfSwgLy8gUGFyYWdyYXBoIGVuZHMKLSAgICB7ICJEZWxldGVUb0JlZ2lubmluZ09mUGFyYWdy
YXBoIiwgIkRlbGV0ZVRvRW5kT2ZQYXJhZ3JhcGgiICAgICAgICAgICAgICAgfSwgLy8gUGFyYWdy
YXBocwotICAgIHsgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9IC8vIFdoaXRlc3BhY2UgKE0tXCBpbiBFbWFjcykK
LX07Ci0KLXN0YXRpYyB2b2lkIGRlbGV0ZUZyb21DdXJzb3JDYWxsYmFjayhHdGtXaWRnZXQqIHdp
ZGdldCwgR3RrRGVsZXRlVHlwZSBkZWxldGVUeXBlLCBnaW50IGNvdW50LCBXZWJWaWV3KiBjbGll
bnQpCi17Ci0gICAgZ19zaWduYWxfc3RvcF9lbWlzc2lvbl9ieV9uYW1lKHdpZGdldCwgImRlbGV0
ZS1mcm9tLWN1cnNvciIpOwotICAgIGludCBkaXJlY3Rpb24gPSBjb3VudCA+IDAgPyAxIDogMDsK
LQotICAgIC8vIEVuc3VyaW5nIHRoYXQgZGVsZXRlVHlwZSA8PSBHX05fRUxFTUVOVFMgaGVyZSBy
ZXN1bHRzIGluIGEgY29tcGlsZXIgd2FybmluZwotICAgIC8vIHRoYXQgdGhlIGNvbmRpdGlvbiBp
cyBhbHdheXMgdHJ1ZS4KLQotICAgIGlmIChkZWxldGVUeXBlID09IEdUS19ERUxFVEVfV09SRFMp
IHsKLSAgICAgICAgaWYgKCFkaXJlY3Rpb24pIHsKLSAgICAgICAgICAgIGNsaWVudC0+YWRkUGVu
ZGluZ0VkaXRvckNvbW1hbmQoIk1vdmVXb3JkRm9yd2FyZCIpOwotICAgICAgICAgICAgY2xpZW50
LT5hZGRQZW5kaW5nRWRpdG9yQ29tbWFuZCgiTW92ZVdvcmRCYWNrd2FyZCIpOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgY2xpZW50LT5hZGRQZW5kaW5nRWRpdG9yQ29tbWFuZCgiTW92
ZVdvcmRCYWNrd2FyZCIpOwotICAgICAgICAgICAgY2xpZW50LT5hZGRQZW5kaW5nRWRpdG9yQ29t
bWFuZCgiTW92ZVdvcmRGb3J3YXJkIik7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGRlbGV0
ZVR5cGUgPT0gR1RLX0RFTEVURV9ESVNQTEFZX0xJTkVTKSB7Ci0gICAgICAgIGlmICghZGlyZWN0
aW9uKQotICAgICAgICAgICAgY2xpZW50LT5hZGRQZW5kaW5nRWRpdG9yQ29tbWFuZCgiTW92ZVRv
QmVnaW5uaW5nT2ZMaW5lIik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNsaWVudC0+YWRk
UGVuZGluZ0VkaXRvckNvbW1hbmQoIk1vdmVUb0VuZE9mTGluZSIpOwotICAgIH0gZWxzZSBpZiAo
ZGVsZXRlVHlwZSA9PSBHVEtfREVMRVRFX1BBUkFHUkFQSFMpIHsKLSAgICAgICAgaWYgKCFkaXJl
Y3Rpb24pCi0gICAgICAgICAgICBjbGllbnQtPmFkZFBlbmRpbmdFZGl0b3JDb21tYW5kKCJNb3Zl
VG9CZWdpbm5pbmdPZlBhcmFncmFwaCIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjbGll
bnQtPmFkZFBlbmRpbmdFZGl0b3JDb21tYW5kKCJNb3ZlVG9FbmRPZlBhcmFncmFwaCIpOwotICAg
IH0KLQotICAgIGNvbnN0IGNoYXIqIHJhd0NvbW1hbmQgPSBndGtEZWxldGVDb21tYW5kc1tkZWxl
dGVUeXBlXVtkaXJlY3Rpb25dOwotICAgIGlmICghcmF3Q29tbWFuZCkKLSAgICAgIHJldHVybjsK
LQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYWJzKGNvdW50KTsgaSsrKQotICAgICAgICBjbGll
bnQtPmFkZFBlbmRpbmdFZGl0b3JDb21tYW5kKHJhd0NvbW1hbmQpOwotfQotCi1zdGF0aWMgY29u
c3QgY2hhciogY29uc3QgZ3RrTW92ZUNvbW1hbmRzW11bNF0gPSB7Ci0gICAgeyAiTW92ZUJhY2t3
YXJkIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNb3ZlRm9yd2FyZCIsCi0g
ICAgICAiTW92ZUJhY2t3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uIiwgICAgICAgICAgICAgICAgICJN
b3ZlRm9yd2FyZEFuZE1vZGlmeVNlbGVjdGlvbiIgICAgICAgICAgICAgfSwgLy8gRm9yd2FyZC9i
YWNrd2FyZCBncmFwaGVtZQotICAgIHsgIk1vdmVMZWZ0IiwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiTW92ZVJpZ2h0IiwKLSAgICAgICJNb3ZlQmFja3dhcmRBbmRNb2Rp
ZnlTZWxlY3Rpb24iLCAgICAgICAgICAgICAgICAgIk1vdmVGb3J3YXJkQW5kTW9kaWZ5U2VsZWN0
aW9uIiAgICAgICAgICAgICB9LCAvLyBMZWZ0L3JpZ2h0IGdyYXBoZW1lCi0gICAgeyAiTW92ZVdv
cmRCYWNrd2FyZCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNb3ZlV29yZEZvcndh
cmQiLAotICAgICAgIk1vdmVXb3JkQmFja3dhcmRBbmRNb2RpZnlTZWxlY3Rpb24iLCAgICAgICAg
ICAgICAiTW92ZVdvcmRGb3J3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgICAgIH0sIC8vIEZv
cndhcmQvYmFja3dhcmQgd29yZAotICAgIHsgIk1vdmVVcCIsICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiTW92ZURvd24iLAotICAgICAgIk1vdmVVcEFuZE1vZGlmeVNl
bGVjdGlvbiIsICAgICAgICAgICAgICAgICAgICAgICAiTW92ZURvd25BbmRNb2RpZnlTZWxlY3Rp
b24iICAgICAgICAgICAgICAgIH0sIC8vIFVwL2Rvd24gbGluZQotICAgIHsgIk1vdmVUb0JlZ2lu
bmluZ09mTGluZSIsICAgICAgICAgICAgICAgICAgICAgICAgICAiTW92ZVRvRW5kT2ZMaW5lIiwK
LSAgICAgICJNb3ZlVG9CZWdpbm5pbmdPZkxpbmVBbmRNb2RpZnlTZWxlY3Rpb24iLCAgICAgICAg
Ik1vdmVUb0VuZE9mTGluZUFuZE1vZGlmeVNlbGVjdGlvbiIgICAgICAgICB9LCAvLyBVcC9kb3du
IGxpbmUgZW5kcwotICAgIHsgIk1vdmVQYXJhZ3JhcGhGb3J3YXJkIiwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiTW92ZVBhcmFncmFwaEJhY2t3YXJkIiwKLSAgICAgICJNb3ZlUGFyYWdyYXBo
Rm9yd2FyZEFuZE1vZGlmeVNlbGVjdGlvbiIsICAgICAgICAgIk1vdmVQYXJhZ3JhcGhCYWNrd2Fy
ZEFuZE1vZGlmeVNlbGVjdGlvbiIgICB9LCAvLyBVcC9kb3duIHBhcmFncmFwaHMKLSAgICB7ICJN
b3ZlVG9CZWdpbm5pbmdPZlBhcmFncmFwaCIsICAgICAgICAgICAgICAgICAgICAgIk1vdmVUb0Vu
ZE9mUGFyYWdyYXBoIiwKLSAgICAgICJNb3ZlVG9CZWdpbm5pbmdPZlBhcmFncmFwaEFuZE1vZGlm
eVNlbGVjdGlvbiIsICAgIk1vdmVUb0VuZE9mUGFyYWdyYXBoQW5kTW9kaWZ5U2VsZWN0aW9uIiAg
ICB9LCAvLyBVcC9kb3duIHBhcmFncmFwaCBlbmRzLgotICAgIHsgIk1vdmVQYWdlVXAiLCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTW92ZVBhZ2VEb3duIiwKLSAgICAgICJN
b3ZlUGFnZVVwQW5kTW9kaWZ5U2VsZWN0aW9uIiwgICAgICAgICAgICAgICAgICAgIk1vdmVQYWdl
RG93bkFuZE1vZGlmeVNlbGVjdGlvbiIgICAgICAgICAgICB9LCAvLyBVcC9kb3duIHBhZ2UKLSAg
ICB7ICJNb3ZlVG9CZWdpbm5pbmdPZkRvY3VtZW50IiwgICAgICAgICAgICAgICAgICAgICAgIk1v
dmVUb0VuZE9mRG9jdW1lbnQiLAotICAgICAgIk1vdmVUb0JlZ2lubmluZ09mRG9jdW1lbnRBbmRN
b2RpZnlTZWxlY3Rpb24iLCAgICAiTW92ZVRvRW5kT2ZEb2N1bWVudEFuZE1vZGlmeVNlbGVjdGlv
biIgICAgIH0sIC8vIEJlZ2luL2VuZCBvZiBidWZmZXIKLSAgICB7IDAsICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKLSAgICAgIDAsICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9IC8vIEhvcml6b250YWwgcGFnZSBtb3ZlbWVudAotfTsK
LQotc3RhdGljIHZvaWQgbW92ZUN1cnNvckNhbGxiYWNrKEd0a1dpZGdldCogd2lkZ2V0LCBHdGtN
b3ZlbWVudFN0ZXAgc3RlcCwgZ2ludCBjb3VudCwgZ2Jvb2xlYW4gZXh0ZW5kU2VsZWN0aW9uLCBX
ZWJWaWV3KiBjbGllbnQpCi17Ci0gICAgZ19zaWduYWxfc3RvcF9lbWlzc2lvbl9ieV9uYW1lKHdp
ZGdldCwgIm1vdmUtY3Vyc29yIik7Ci0gICAgaW50IGRpcmVjdGlvbiA9IGNvdW50ID4gMCA/IDEg
OiAwOwotICAgIGlmIChleHRlbmRTZWxlY3Rpb24pCi0gICAgICAgIGRpcmVjdGlvbiArPSAyOwot
Ci0gICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGVwKSA+PSBHX05fRUxFTUVOVFMoZ3Rr
TW92ZUNvbW1hbmRzKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY29uc3QgY2hhciogcmF3Q29t
bWFuZCA9IGd0a01vdmVDb21tYW5kc1tzdGVwXVtkaXJlY3Rpb25dOwotICAgIGlmICghcmF3Q29t
bWFuZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhYnMoY291
bnQpOyBpKyspCi0gICAgICAgIGNsaWVudC0+YWRkUGVuZGluZ0VkaXRvckNvbW1hbmQocmF3Q29t
bWFuZCk7Ci19Ci0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBDdHJsS2V5ID0gMSA8PCAwOwotc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIEFsdEtleSA9IDEgPDwgMTsKLXN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBTaGlmdEtleSA9IDEgPDwgMjsKLQotc3RydWN0IEtleURvd25FbnRyeSB7Ci0gICAgdW5zaWdu
ZWQgdmlydHVhbEtleTsKLSAgICB1bnNpZ25lZCBtb2RpZmllcnM7Ci0gICAgY29uc3QgY2hhciog
bmFtZTsKLX07Ci0KLXN0cnVjdCBLZXlQcmVzc0VudHJ5IHsKLSAgICB1bnNpZ25lZCBjaGFyQ29k
ZTsKLSAgICB1bnNpZ25lZCBtb2RpZmllcnM7Ci0gICAgY29uc3QgY2hhciogbmFtZTsKLX07Ci0K
LXN0YXRpYyBjb25zdCBLZXlEb3duRW50cnkga2V5RG93bkVudHJpZXNbXSA9IHsKLSAgICB7ICdC
JywgICAgICAgQ3RybEtleSwgICAgICAgICAgICAiVG9nZ2xlQm9sZCIgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfSwKLSAgICB7ICdJJywgICAgICAgQ3RybEtleSwgICAgICAgICAg
ICAiVG9nZ2xlSXRhbGljIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7
IFZLX0VTQ0FQRSwgMCwgICAgICAgICAgICAgICAgICAiQ2FuY2VsIiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX09FTV9QRVJJT0QsIEN0cmxLZXksICAg
ICAgICAiQ2FuY2VsIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAg
ICB7IFZLX1RBQiwgICAgMCwgICAgICAgICAgICAgICAgICAiSW5zZXJ0VGFiIiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX1RBQiwgICAgU2hpZnRLZXksICAg
ICAgICAgICAiSW5zZXJ0QmFja3RhYiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwK
LSAgICB7IFZLX1JFVFVSTiwgMCwgICAgICAgICAgICAgICAgICAiSW5zZXJ0TmV3bGluZSIgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX1JFVFVSTiwgQ3RybEtleSwg
ICAgICAgICAgICAiSW5zZXJ0TmV3bGluZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fSwKLSAgICB7IFZLX1JFVFVSTiwgQWx0S2V5LCAgICAgICAgICAgICAiSW5zZXJ0TmV3bGluZSIg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX1JFVFVSTiwgQWx0S2V5
IHwgU2hpZnRLZXksICAiSW5zZXJ0TmV3bGluZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfSwKLX07Ci0KLXN0YXRpYyBjb25zdCBLZXlQcmVzc0VudHJ5IGtleVByZXNzRW50cmllc1td
ID0gewotICAgIHsgJ1x0JywgICAwLCAgICAgICAgICAgICAgICAgICJJbnNlcnRUYWIiICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsgJ1x0JywgICBTaGlmdEtleSwg
ICAgICAgICAgICJJbnNlcnRCYWNrdGFiIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
LAotICAgIHsgJ1xyJywgICAwLCAgICAgICAgICAgICAgICAgICJJbnNlcnROZXdsaW5lIiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsgJ1xyJywgICBDdHJsS2V5LCAgICAg
ICAgICAgICJJbnNlcnROZXdsaW5lIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAot
ICAgIHsgJ1xyJywgICBBbHRLZXksICAgICAgICAgICAgICJJbnNlcnROZXdsaW5lIiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsgJ1xyJywgICBBbHRLZXkgfCBTaGlmdEtl
eSwgICJJbnNlcnROZXdsaW5lIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotfTsK
LQotV2ViVmlldzo6V2ViVmlldyhHdGtXaWRnZXQqIHZpZXdXaWRnZXQpCi0gICAgOiBtX25hdGl2
ZVdpZGdldChndGtfdGV4dF92aWV3X25ldygpKQotewotICAgIG1fdmlld1dpZGdldCA9IHZpZXdX
aWRnZXQ7Ci0KLSAgICBnX3NpZ25hbF9jb25uZWN0KG1fbmF0aXZlV2lkZ2V0LmdldCgpLCAiYmFj
a3NwYWNlIiwgR19DQUxMQkFDSyhiYWNrc3BhY2VDYWxsYmFjayksIHRoaXMpOwotICAgIGdfc2ln
bmFsX2Nvbm5lY3QobV9uYXRpdmVXaWRnZXQuZ2V0KCksICJjdXQtY2xpcGJvYXJkIiwgR19DQUxM
QkFDSyhjdXRDbGlwYm9hcmRDYWxsYmFjayksIHRoaXMpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
bV9uYXRpdmVXaWRnZXQuZ2V0KCksICJjb3B5LWNsaXBib2FyZCIsIEdfQ0FMTEJBQ0soY29weUNs
aXBib2FyZENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChtX25hdGl2ZVdp
ZGdldC5nZXQoKSwgInBhc3RlLWNsaXBib2FyZCIsIEdfQ0FMTEJBQ0socGFzdGVDbGlwYm9hcmRD
YWxsYmFjayksIHRoaXMpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9uYXRpdmVXaWRnZXQuZ2V0
KCksICJzZWxlY3QtYWxsIiwgR19DQUxMQkFDSyhzZWxlY3RBbGxDYWxsYmFjayksIHRoaXMpOwot
ICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9uYXRpdmVXaWRnZXQuZ2V0KCksICJtb3ZlLWN1cnNvciIs
IEdfQ0FMTEJBQ0sobW92ZUN1cnNvckNhbGxiYWNrKSwgdGhpcyk7Ci0gICAgZ19zaWduYWxfY29u
bmVjdChtX25hdGl2ZVdpZGdldC5nZXQoKSwgImRlbGV0ZS1mcm9tLWN1cnNvciIsIEdfQ0FMTEJB
Q0soZGVsZXRlRnJvbUN1cnNvckNhbGxiYWNrKSwgdGhpcyk7Ci0gICAgZ19zaWduYWxfY29ubmVj
dChtX25hdGl2ZVdpZGdldC5nZXQoKSwgInRvZ2dsZS1vdmVyd3JpdGUiLCBHX0NBTExCQUNLKHRv
Z2dsZU92ZXJ3cml0ZUNhbGxiYWNrKSwgdGhpcyk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChtX25h
dGl2ZVdpZGdldC5nZXQoKSwgInBvcHVwLW1lbnUiLCBHX0NBTExCQUNLKHBvcHVwTWVudUNhbGxi
YWNrKSwgdGhpcyk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChtX25hdGl2ZVdpZGdldC5nZXQoKSwg
InNob3ctaGVscCIsIEdfQ0FMTEJBQ0soc2hvd0hlbHBDYWxsYmFjayksIHRoaXMpOwotfQotCi1X
ZWJWaWV3Ojp+V2ViVmlldygpCi17Ci19Ci0KLXZvaWQgV2ViVmlldzo6Z2V0RWRpdG9yQ29tbWFu
ZHNGb3JLZXlFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50JiBldmVudCwgVmVjdG9y
PFdURjo6U3RyaW5nPiYgY29tbWFuZExpc3QpCi17Ci0gICAgbV9wZW5kaW5nRWRpdG9yQ29tbWFu
ZHMuY2xlYXIoKTsKLQotI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCi0gICAgZ3RrX2JpbmRpbmdz
X2FjdGl2YXRlX2V2ZW50KEdUS19PQkpFQ1QobV9uYXRpdmVXaWRnZXQuZ2V0KCkpLCBjb25zdF9j
YXN0PEdka0V2ZW50S2V5Kj4oJmV2ZW50Lm5hdGl2ZUV2ZW50KCktPmtleSkpOwotI2Vsc2UKLSAg
ICBndGtfYmluZGluZ3NfYWN0aXZhdGVfZXZlbnQoR19PQkpFQ1QobV9uYXRpdmVXaWRnZXQuZ2V0
KCkpLCBjb25zdF9jYXN0PEdka0V2ZW50S2V5Kj4oJmV2ZW50Lm5hdGl2ZUV2ZW50KCktPmtleSkp
OwotI2VuZGlmCi0KLSAgICBpZiAobV9wZW5kaW5nRWRpdG9yQ29tbWFuZHMuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIGNvbW1hbmRMaXN0LmFwcGVuZChtX3BlbmRpbmdFZGl0b3JDb21tYW5kcyk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEludENvbnN0
Q2hhckhhc2hNYXAsIGtleURvd25Db21tYW5kc01hcCwgKCkpOwotICAgIERFRklORV9TVEFUSUNf
TE9DQUwoSW50Q29uc3RDaGFySGFzaE1hcCwga2V5UHJlc3NDb21tYW5kc01hcCwgKCkpOwotCi0g
ICAgaWYgKGtleURvd25Db21tYW5kc01hcC5pc0VtcHR5KCkpIHsKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IEdfTl9FTEVNRU5UUyhrZXlEb3duRW50cmllcyk7IGkrKykKLSAgICAg
ICAgICAgIGtleURvd25Db21tYW5kc01hcC5zZXQoa2V5RG93bkVudHJpZXNbaV0ubW9kaWZpZXJz
IDw8IDE2IHwga2V5RG93bkVudHJpZXNbaV0udmlydHVhbEtleSwga2V5RG93bkVudHJpZXNbaV0u
bmFtZSk7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdfTl9FTEVNRU5UUyhr
ZXlQcmVzc0VudHJpZXMpOyBpKyspCi0gICAgICAgICAgICBrZXlQcmVzc0NvbW1hbmRzTWFwLnNl
dChrZXlQcmVzc0VudHJpZXNbaV0ubW9kaWZpZXJzIDw8IDE2IHwga2V5UHJlc3NFbnRyaWVzW2ld
LmNoYXJDb2RlLCBrZXlQcmVzc0VudHJpZXNbaV0ubmFtZSk7Ci0gICAgfQotCi0gICAgdW5zaWdu
ZWQgbW9kaWZpZXJzID0gMDsKLSAgICBpZiAoZXZlbnQuc2hpZnRLZXkoKSkKLSAgICAgICAgbW9k
aWZpZXJzIHw9IFNoaWZ0S2V5OwotICAgIGlmIChldmVudC5hbHRLZXkoKSkKLSAgICAgICAgbW9k
aWZpZXJzIHw9IEFsdEtleTsKLSAgICBpZiAoZXZlbnQuY29udHJvbEtleSgpKQotICAgICAgICBt
b2RpZmllcnMgfD0gQ3RybEtleTsKLQotICAgIC8vIEZvciBrZXlwcmVzcyBldmVudHMsIHdlIHdh
bnQgY2hhckNvZGUoKSwgYnV0IGtleUNvZGUoKSBkb2VzIHRoYXQuCi0gICAgaW50IG1hcEtleSA9
IG1vZGlmaWVycyA8PCAxNiB8IGV2ZW50Lm5hdGl2ZVZpcnR1YWxLZXlDb2RlKCk7Ci0gICAgaWYg
KG1hcEtleSkgewotICAgICAgICBIYXNoTWFwPGludCwgY29uc3QgY2hhcio+KiBjb21tYW5kTWFw
ID0gZXZlbnQudHlwZSgpID09IFdlYkV2ZW50OjpLZXlEb3duID8KLSAgICAgICAgICAgICZrZXlE
b3duQ29tbWFuZHNNYXAgOiAma2V5UHJlc3NDb21tYW5kc01hcDsKLSAgICAgICAgaWYgKGNvbnN0
IGNoYXIqIGNvbW1hbmRTdHJpbmcgPSBjb21tYW5kTWFwLT5nZXQobWFwS2V5KSkKLSAgICAgICAg
ICAgIG1fcGVuZGluZ0VkaXRvckNvbW1hbmRzLmFwcGVuZChjb21tYW5kU3RyaW5nKTsKLSAgICB9
Ci0KLSAgICBjb21tYW5kTGlzdC5hcHBlbmQobV9wZW5kaW5nRWRpdG9yQ29tbWFuZHMpOwotfQot
Ci0vLyBQYWdlQ2xpZW50J3MgcHVyZSB2aXJ0dWFsIGZ1bmN0aW9ucwotUGFzc093blB0cjxEcmF3
aW5nQXJlYVByb3h5PiBXZWJWaWV3OjpjcmVhdGVEcmF3aW5nQXJlYVByb3h5KCkKLXsKLSAgICBX
ZWJLaXRXZWJWaWV3QmFzZSogdmlldyA9IFdFQktJVF9XRUJfVklFV19CQVNFKG1fdmlld1dpZGdl
dCk7Ci0gICAgcmV0dXJuIENodW5rZWRVcGRhdGVEcmF3aW5nQXJlYVByb3h5OjpjcmVhdGUodmll
dywgd2Via2l0V2ViVmlld0Jhc2VHZXRQYWdlKHZpZXcpKTsKLX0KLQotdm9pZCBXZWJWaWV3Ojpz
ZXRWaWV3TmVlZHNEaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViVmlldzo6ZGlzcGxheVZpZXcoKQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViVmlldzo6c2Nyb2xsVmlldyhjb25zdCBXZWJD
b3JlOjpJbnRSZWN0JiBzY3JvbGxSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxP
ZmZzZXQpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotV2ViQ29yZTo6SW50U2l6ZSBX
ZWJWaWV3Ojp2aWV3U2l6ZSgpCi17Ci0gICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uOwotICAg
IGd0a193aWRnZXRfZ2V0X2FsbG9jYXRpb24obV92aWV3V2lkZ2V0LCAmYWxsb2NhdGlvbik7Ci0g
ICAgcmV0dXJuIEludFNpemUoYWxsb2NhdGlvbi53aWR0aCwgYWxsb2NhdGlvbi5oZWlnaHQpOwot
fQotCi1ib29sIFdlYlZpZXc6OmlzVmlld1dpbmRvd0FjdGl2ZSgpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBXZWJWaWV3Ojppc1ZpZXdGb2N1
c2VkKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1i
b29sIFdlYlZpZXc6OmlzVmlld1Zpc2libGUoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgV2ViVmlldzo6aXNWaWV3SW5XaW5kb3coKQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgV2ViVmll
dzo6V2ViVmlldzo6cHJvY2Vzc0RpZENyYXNoKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
fQotCi12b2lkIFdlYlZpZXc6OmRpZFJlbGF1bmNoUHJvY2VzcygpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJWaWV3Ojp0YWtlRm9jdXMoYm9vbCkKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYlZpZXc6OnRvb2xUaXBDaGFuZ2VkKGNvbnN0IFN0
cmluZyYsIGNvbnN0IFN0cmluZyYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9p
ZCBXZWJWaWV3OjpzZXRDdXJzb3IoY29uc3QgQ3Vyc29yJiBjdXJzb3IpCi17Ci0gICAgLy8gW0dU
S10gV2lkZ2V0OjpzZXRDdXJzb3IoKSBnZXRzIGNhbGxlZCBmcmVxdWVudGx5Ci0gICAgLy8gaHR0
cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzODgKLSAgICAvLyBTZXR0aW5n
IHRoZSBjdXJzb3IgbWF5IGJlIGFuIGV4cGVuc2l2ZSBvcGVyYXRpb24gaW4gc29tZSBiYWNrZW5k
cywKLSAgICAvLyBzbyBkb24ndCByZS1zZXQgdGhlIGN1cnNvciBpZiBpdCdzIGFscmVhZHkgc2V0
IHRvIHRoZSB0YXJnZXQgdmFsdWUuCi0gICAgR2RrV2luZG93KiB3aW5kb3cgPSBndGtfd2lkZ2V0
X2dldF93aW5kb3cobV92aWV3V2lkZ2V0KTsKLSAgICBHZGtDdXJzb3IqIGN1cnJlbnRDdXJzb3Ig
PSBnZGtfd2luZG93X2dldF9jdXJzb3Iod2luZG93KTsKLSAgICBHZGtDdXJzb3IqIG5ld0N1cnNv
ciA9IGN1cnNvci5wbGF0Zm9ybUN1cnNvcigpLmdldCgpOwotICAgIGlmIChjdXJyZW50Q3Vyc29y
ICE9IG5ld0N1cnNvcikKLSAgICAgICAgZ2RrX3dpbmRvd19zZXRfY3Vyc29yKHdpbmRvdywgbmV3
Q3Vyc29yKTsKLX0KLQotdm9pZCBXZWJWaWV3OjpzZXRWaWV3cG9ydEFyZ3VtZW50cyhjb25zdCBX
ZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50cyYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0K
LQotdm9pZCBXZWJWaWV3OjpyZWdpc3RlckVkaXRDb21tYW5kKFBhc3NSZWZQdHI8V2ViRWRpdENv
bW1hbmRQcm94eT4sIFdlYlBhZ2VQcm94eTo6VW5kb09yUmVkbykKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotfQotCi12b2lkIFdlYlZpZXc6OmNsZWFyQWxsRWRpdENvbW1hbmRzKCkKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1ib29sIFdlYlZpZXc6OmNhblVuZG9SZWRvKFdlYlBh
Z2VQcm94eTo6VW5kb09yUmVkbykKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotdm9pZCBXZWJWaWV3OjpleGVjdXRlVW5kb1JlZG8oV2ViUGFnZVByb3h5
OjpVbmRvT3JSZWRvKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLUZsb2F0UmVjdCBX
ZWJWaWV3Ojpjb252ZXJ0VG9EZXZpY2VTcGFjZShjb25zdCBGbG9hdFJlY3QmIHZpZXdSZWN0KQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHZpZXdSZWN0OwotfQotCi1GbG9h
dFJlY3QgV2ViVmlldzo6Y29udmVydFRvVXNlclNwYWNlKGNvbnN0IEZsb2F0UmVjdCYgdmlld1Jl
Y3QpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gdmlld1JlY3Q7Ci19Ci0K
LUludFJlY3QgV2ViVmlldzo6d2luZG93VG9TY3JlZW4oY29uc3QgSW50UmVjdCYgcmVjdCkKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBJbnRSZWN0KCk7Ci19Ci0KLXZvaWQg
V2ViVmlldzo6ZG9uZVdpdGhLZXlFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50Jiwg
Ym9vbCB3YXNFdmVudEhhbmRsZWQpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9p
ZCBXZWJWaWV3OjpkaWROb3RIYW5kbGVLZXlFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2
ZW50JiBldmVudCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1QYXNzUmVmUHRyPFdl
YlBvcHVwTWVudVByb3h5PiBXZWJWaWV3OjpjcmVhdGVQb3B1cE1lbnVQcm94eShXZWJQYWdlUHJv
eHkqKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLVBhc3NS
ZWZQdHI8V2ViQ29udGV4dE1lbnVQcm94eT4gV2ViVmlldzo6Y3JlYXRlQ29udGV4dE1lbnVQcm94
eShXZWJQYWdlUHJveHkqKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7
Ci19Ci0KLXZvaWQgV2ViVmlldzo6c2V0RmluZEluZGljYXRvcihQYXNzUmVmUHRyPEZpbmRJbmRp
Y2F0b3I+LCBib29sIGZhZGVPdXQpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLXZvaWQgV2ViVmlldzo6cGFnZURpZEVudGVy
QWNjZWxlcmF0ZWRDb21wb3NpdGluZygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQot
dm9pZCBXZWJWaWV3OjpwYWdlRGlkTGVhdmVBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKLQotdm9pZCBXZWJWaWV3OjpkaWRDb21taXRMb2FkRm9yTWFpbkZyYW1lKGJvb2wgdXNl
Q3VzdG9tUmVwcmVzZW50YXRpb24pCi17Ci19Ci0KLXZvaWQgV2ViVmlldzo6ZGlkRmluaXNoTG9h
ZGluZ0RhdGFGb3JDdXN0b21SZXByZXNlbnRhdGlvbihjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZp
bGVuYW1lLCBjb25zdCBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlJikKLXsKLX0KLQotZG91YmxlIFdl
YlZpZXc6OmN1c3RvbVJlcHJlc2VudGF0aW9uWm9vbUZhY3RvcigpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBXZWJWaWV3OjpzZXRDdXN0b21SZXBy
ZXNlbnRhdGlvblpvb21GYWN0b3IoZG91YmxlKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLXZvaWQgV2ViVmlldzo6cGFnZUNsb3NlZCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LX0KLQotdm9pZCBXZWJWaWV3OjpkaWRDaGFuZ2VTY3JvbGxiYXJzRm9yTWFpbkZyYW1lKCkgY29u
c3QKLXsKLX0KLQotdm9pZCBXZWJWaWV3OjpmbGFzaEJhY2tpbmdTdG9yZVVwZGF0ZXMoY29uc3Qg
VmVjdG9yPEludFJlY3Q+JikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdl
YlZpZXc6OmZpbmRTdHJpbmdJbkN1c3RvbVJlcHJlc2VudGF0aW9uKGNvbnN0IFN0cmluZyYsIEZp
bmRPcHRpb25zLCB1bnNpZ25lZCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lk
IFdlYlZpZXc6OmNvdW50U3RyaW5nTWF0Y2hlc0luQ3VzdG9tUmVwcmVzZW50YXRpb24oY29uc3Qg
U3RyaW5nJiwgRmluZE9wdGlvbnMsIHVuc2lnbmVkKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL2d0ay9XZWJWaWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dl
YlZpZXcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2NjNjcyNS4uMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlZpZXcuaAorKysgL2Rldi9udWxs
CkBAIC0xLDExMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rv
cm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMSBJZ2FsaWEgUy5MLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFdlYlZpZXdfaAotI2RlZmlu
ZSBXZWJWaWV3X2gKLQotI2luY2x1ZGUgIlBhZ2VDbGllbnQuaCIKLSNpbmNsdWRlICJXZWJQYWdl
UHJveHkuaCIKLSNpbmNsdWRlICJXaW5kb3dzS2V5Ym9hcmRDb2Rlcy5oIgotI2luY2x1ZGUgPFdl
YkNvcmUvSW50U2l6ZS5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7
Ci0KLWNsYXNzIERyYXdpbmdBcmVhUHJveHk7Ci1jbGFzcyBXZWJQYWdlTmFtZXNwYWNlOwotCi1j
bGFzcyBXZWJWaWV3IDogcHVibGljIFBhZ2VDbGllbnQgewotcHVibGljOgotICAgIH5XZWJWaWV3
KCk7Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8V2ViVmlldz4gY3JlYXRlKEd0a1dpZGdldCogd2Vi
VmlldykKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgV2ViVmlldyh3ZWJWaWV3
KSk7Ci0gICAgfQotCi0gICAgdm9pZCBhZGRQZW5kaW5nRWRpdG9yQ29tbWFuZChjb25zdCBjaGFy
KiBjb21tYW5kKSB7IG1fcGVuZGluZ0VkaXRvckNvbW1hbmRzLmFwcGVuZChXVEY6OlN0cmluZyhj
b21tYW5kKSk7IH0KLQotcHJpdmF0ZToKLSAgICBXZWJWaWV3KEd0a1dpZGdldCopOwotCi0gICAg
Ly8gUGFnZUNsaWVudAotICAgIHZpcnR1YWwgUGFzc093blB0cjxEcmF3aW5nQXJlYVByb3h5PiBj
cmVhdGVEcmF3aW5nQXJlYVByb3h5KCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldFZpZXdOZWVkc0Rp
c3BsYXkoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBkaXNwbGF5
VmlldygpOwotICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxWaWV3KGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmIHNjcm9sbFJlY3QsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNjcm9sbE9mZnNldCk7Ci0g
ICAgdmlydHVhbCBXZWJDb3JlOjpJbnRTaXplIHZpZXdTaXplKCk7Ci0gICAgdmlydHVhbCBib29s
IGlzVmlld1dpbmRvd0FjdGl2ZSgpOwotICAgIHZpcnR1YWwgYm9vbCBpc1ZpZXdGb2N1c2VkKCk7
Ci0gICAgdmlydHVhbCBib29sIGlzVmlld1Zpc2libGUoKTsKLSAgICB2aXJ0dWFsIGJvb2wgaXNW
aWV3SW5XaW5kb3coKTsKLSAgICB2aXJ0dWFsIHZvaWQgcHJvY2Vzc0RpZENyYXNoKCk7Ci0gICAg
dmlydHVhbCB2b2lkIGRpZFJlbGF1bmNoUHJvY2VzcygpOwotICAgIHZpcnR1YWwgdm9pZCBwYWdl
Q2xvc2VkKCk7Ci0gICAgdmlydHVhbCB2b2lkIHRha2VGb2N1cyhib29sIGRpcmVjdGlvbik7Ci0g
ICAgdmlydHVhbCB2b2lkIHRvb2xUaXBDaGFuZ2VkKGNvbnN0IFdURjo6U3RyaW5nJiwgY29uc3Qg
V1RGOjpTdHJpbmcmKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q3Vyc29yKGNvbnN0IFdlYkNvcmU6
OkN1cnNvciYpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRWaWV3cG9ydEFyZ3VtZW50cyhjb25zdCBX
ZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50cyYpOwotICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckVk
aXRDb21tYW5kKFBhc3NSZWZQdHI8V2ViRWRpdENvbW1hbmRQcm94eT4sIFdlYlBhZ2VQcm94eTo6
VW5kb09yUmVkbyk7Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFyQWxsRWRpdENvbW1hbmRzKCk7Ci0g
ICAgdmlydHVhbCBib29sIGNhblVuZG9SZWRvKFdlYlBhZ2VQcm94eTo6VW5kb09yUmVkbyk7Ci0g
ICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVVbmRvUmVkbyhXZWJQYWdlUHJveHk6OlVuZG9PclJlZG8p
OwotICAgIHZpcnR1YWwgV2ViQ29yZTo6RmxvYXRSZWN0IGNvbnZlcnRUb0RldmljZVNwYWNlKGNv
bnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6RmxvYXRSZWN0
IGNvbnZlcnRUb1VzZXJTcGFjZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKLSAgICB2aXJ0
dWFsIFdlYkNvcmU6OkludFJlY3Qgd2luZG93VG9TY3JlZW4oY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYpOwotICAgIHZpcnR1YWwgdm9pZCBkb25lV2l0aEtleUV2ZW50KGNvbnN0IE5hdGl2ZVdlYktl
eWJvYXJkRXZlbnQmLCBib29sIHdhc0V2ZW50SGFuZGxlZCk7Ci0gICAgdmlydHVhbCB2b2lkIGRp
ZE5vdEhhbmRsZUtleUV2ZW50KGNvbnN0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmKTsKLSAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8V2ViUG9wdXBNZW51UHJveHk+IGNyZWF0ZVBvcHVwTWVudVByb3h5
KFdlYlBhZ2VQcm94eSopOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb250ZXh0TWVudVBy
b3h5PiBjcmVhdGVDb250ZXh0TWVudVByb3h5KFdlYlBhZ2VQcm94eSopOwotICAgIHZpcnR1YWwg
dm9pZCBzZXRGaW5kSW5kaWNhdG9yKFBhc3NSZWZQdHI8RmluZEluZGljYXRvcj4sIGJvb2wgZmFk
ZU91dCk7Ci0gICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZVNjcm9sbGJhcnNGb3JNYWluRnJhbWUo
KSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgZmxhc2hCYWNraW5nU3RvcmVVcGRhdGVzKGNvbnN0
IFZlY3RvcjxXZWJDb3JlOjpJbnRSZWN0PiYgdXBkYXRlUmVjdHMpOwotICAgIHZpcnR1YWwgZmxv
YXQgdXNlclNwYWNlU2NhbGVGYWN0b3IoKSBjb25zdCB7IHJldHVybiAxOyB9Ci0gICAgdmlydHVh
bCB2b2lkIGdldEVkaXRvckNvbW1hbmRzRm9yS2V5RXZlbnQoY29uc3QgTmF0aXZlV2ViS2V5Ym9h
cmRFdmVudCYsIFZlY3RvcjxXVEY6OlN0cmluZz4mKTsKLSAgICB2aXJ0dWFsIHZvaWQgZmluZFN0
cmluZ0luQ3VzdG9tUmVwcmVzZW50YXRpb24oY29uc3QgU3RyaW5nJiwgRmluZE9wdGlvbnMsIHVu
c2lnbmVkKTsKLSAgICB2aXJ0dWFsIHZvaWQgY291bnRTdHJpbmdNYXRjaGVzSW5DdXN0b21SZXBy
ZXNlbnRhdGlvbihjb25zdCBTdHJpbmcmLCBGaW5kT3B0aW9ucywgdW5zaWduZWQpOwotCi0jaWYg
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIHZpcnR1YWwgdm9pZCBwYWdlRGlkRW50
ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCk7Ci0gICAgdmlydHVhbCB2b2lkIHBhZ2VEaWRMZWF2
ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKTsKLSNlbmRpZgotCi0gICAgdmlydHVhbCB2b2lkIGRp
ZENvbW1pdExvYWRGb3JNYWluRnJhbWUoYm9vbCB1c2VDdXN0b21SZXByZXNlbnRhdGlvbik7Ci0g
ICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmdEYXRhRm9yQ3VzdG9tUmVwcmVzZW50YXRp
b24oY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSwgY29uc3QgQ29yZUlQQzo6RGF0YVJl
ZmVyZW5jZSYpOwotICAgIHZpcnR1YWwgZG91YmxlIGN1c3RvbVJlcHJlc2VudGF0aW9uWm9vbUZh
Y3RvcigpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRDdXN0b21SZXByZXNlbnRhdGlvblpvb21GYWN0
b3IoZG91YmxlKTsKLQotICAgIC8vIE1lbWJlcnMgb2YgV2ViVmlldyBjbGFzcwotICAgIEd0a1dp
ZGdldCogbV92aWV3V2lkZ2V0OwotICAgIFZlY3RvcjxXVEY6OlN0cmluZz4gbV9wZW5kaW5nRWRp
dG9yQ29tbWFuZHM7Ci0gICAgR1JlZlB0cjxHdGtXaWRnZXQ+IG1fbmF0aXZlV2lkZ2V0OwotfTsK
LQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBXZWJWaWV3X2gK
</data>

          </attachment>
      

    </bug>

</bugzilla>