<?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>139550</bug_id>
          
          <creation_ts>2014-12-11 12:31:11 -0800</creation_ts>
          <short_desc>[iOS] Crash in WebKit::WebPageProxy::dispatchViewStateChange() tapping a link from another app while playing a video</short_desc>
          <delta_ts>2014-12-16 11:20:08 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jer Noble">jer.noble</reporter>
          <assigned_to name="Jer Noble">jer.noble</assigned_to>
          <cc>andersca</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>glenn</cc>
    
    <cc>jeremyj-wk</cc>
    
    <cc>philipj</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1054581</commentid>
    <comment_count>0</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2014-12-11 12:31:11 -0800</bug_when>
    <thetext>[iOS] Crash in WebKit::WebPageProxy::dispatchViewStateChange() tapping a link from another app while playing a video</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1054583</commentid>
    <comment_count>1</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2014-12-11 12:39:46 -0800</bug_when>
    <thetext>&lt;rdar://problem/18912280&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1054584</commentid>
    <comment_count>2</comment_count>
      <attachid>243138</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2014-12-11 12:40:20 -0800</bug_when>
    <thetext>Created attachment 243138
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1054625</commentid>
    <comment_count>3</comment_count>
      <attachid>243149</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2014-12-11 14:53:29 -0800</bug_when>
    <thetext>Created attachment 243149
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1054627</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-12-11 14:56:22 -0800</bug_when>
    <thetext>Attachment 243149 did not pass style-queue:


ERROR: Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm:879:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm:894:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm:918:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm:964:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm:969:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm:1071:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 6 in 3 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1054858</commentid>
    <comment_count>5</comment_count>
      <attachid>243205</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2014-12-12 10:58:48 -0800</bug_when>
    <thetext>Created attachment 243205
Patch

Fixed some errors that crept in during rebasing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1054859</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-12-12 11:00:18 -0800</bug_when>
    <thetext>Attachment 243205 did not pass style-queue:


ERROR: Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm:879:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm:894:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm:918:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm:966:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm:972:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm:1074:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 6 in 3 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1056016</commentid>
    <comment_count>7</comment_count>
      <attachid>243205</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-12-16 11:20:01 -0800</bug_when>
    <thetext>Comment on attachment 243205
Patch

Clearing flags on attachment: 243205

Committed r177375: &lt;http://trac.webkit.org/changeset/177375&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1056017</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-12-16 11:20:08 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>243138</attachid>
            <date>2014-12-11 12:40:20 -0800</date>
            <delta_ts>2014-12-11 14:53:27 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-139550-20141211124103.patch</filename>
            <type>text/plain</type>
            <size>32519</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc2ODYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGM5MGU1OGU0MGE1MjNl
MWM2NTgzY2I5M2M4MTMzNmU5MmIzMGY4Yi4uYzE3ZTdjYTI3NzhlZjE3NzkwNDM1MDIwODlmNGJj
NWJmZDM2N2NiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDE0LTEyLTExICBKZXIg
Tm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgorCisgICAgICAgIFtpT1NdIENyYXNoIGluIFdl
YktpdDo6V2ViUGFnZVByb3h5OjpkaXNwYXRjaFZpZXdTdGF0ZUNoYW5nZSgpIHRhcHBpbmcgYSBs
aW5rIGZyb20gYW5vdGhlciBhcHAgd2hpbGUgcGxheWluZyBhIHZpZGVvCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzk1NTAKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgZXhpc3RpbmcgImRpc3BhdGNo
IHRvIFdlYlRocmVhZCwgdGhlbiByZWxlYXNlIiBtb2RlbCBpcyBpbnN1ZmZpY2llbnQgYW5kIHN0
aWxsCisgICAgICAgIGNhbiByZXN1bHQgaW4gUmVmUHRyIHJhY2UgY29uZGl0aW9ucyBiZXR3ZWVu
IHRoZSBtYWluIHRocmVhZCBhbmQgdGhlIHdlYiB0aHJlYWQuCisgICAgICAgIE1ha2UgV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQgYSB0aHJlYWQtc2FmZSByZWYtY291bnRlZCBjbGFz
cywgd2hpY2gKKyAgICAgICAgZWxpbWluYXRlcyB0aGUgbmVjZXNzaXR5IG9mIGRpc3B0YWNoaW5n
IGJhY2sgdG8gdGhlIHdlYiB0aHJlYWQgYmVmb3JlIHJlbGVhc2luZy4KKworICAgICAgICAqIHBs
YXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oOgorICAgICAgICAq
IHBsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbToKKyAgICAg
ICAgKFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXREdXJhdGlvbik6IFVzZSBh
IHN0cm9uZ1RoaXMgbW9kZWwuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdDo6c2V0Q3VycmVudFRpbWUpOiBEaXR0by4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0OjpzZXRSYXRlKTogRGl0dG8uCisgICAgICAgIChXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0VmlkZW9EaW1lbnNpb25zKTogRGl0dG8uCisgICAgICAg
IChXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0U2Vla2FibGVSYW5nZXMpOiBE
aXR0by4KKyAgICAgICAgKG1lZGlhU2VsZWN0aW9uT3B0aW9ucyk6IFJldHVybiBhIFJldGFpblB0
ciBvYmplY3QuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0
QXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnMpOiBVc2UgYSBzdHJvbmdUaGlzIG1vZGVsLgorICAg
ICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldExlZ2libGVNZWRpYVNl
bGVjdGlvbk9wdGlvbnMpOiBEaXR0by4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0OjpzZXRFeHRlcm5hbFBsYXliYWNrKTogRGl0dG8uCisgICAgICAgIChXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0dXBGdWxsc2NyZWVuKTogRGl0dG8uCisgICAg
ICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZW50ZXJGdWxsc2NyZWVuKTog
RGl0dG8uCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZXhpdEZ1
bGxzY3JlZW4pOiBEaXR0by4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0OjpjbGVhbnVwRnVsbHNjcmVlbik6IERpdHRvLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQ6OnNldHVwRnVsbHNjcmVlbkludGVybmFsKTogQWRkZWQgdXRpbGl0
eQorICAgICAgICAgICAgZnVuY3Rpb24uIExldHMgdXMgdXNlIHRoZSBpbXBsaWVkIHRoaXMgcG9p
bnRlciByYXRoZXIgdGhhbiBhbiBleHBsaWNpdAorICAgICAgICAgICAgc3Ryb25nVGhpcy4KKyAg
ICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjplbnRlckZ1bGxzY3JlZW5P
cHRpbWl6ZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0OjplbnRlckZ1bGxzY3JlZW5TdGFuZGFyZCk6IERpdHRvLgorICAgICAgICAoV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmV4aXRGdWxsc2NyZWVuSW50ZXJuYWwpOiBEaXR0by4K
KyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpjbGVhbnVwRnVsbHNj
cmVlbkludGVybmFsKTogRGl0dG8uCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdDo6cmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbik6IFVzZSBhIHN0cm9uZ1RoaXMg
bW9kZWwuCisKIDIwMTQtMTItMDUgIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CiAK
ICAgICAgICAgW1dURl0gTWVkaWFUaW1lIHNob3VsZCBzdXBwb3J0IHJvdW5kLXRyaXBwaW5nIGZy
b20gYW5kIHRvIGRvdWJsZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
b3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oCmluZGV4IGRhYTBi
N2I3MDVjNjA1ZWFlZjhlNDVjMTQxOTQxYjhmZGM0MDk2MmMuLjk4ZmQxNzkyNmNjZjE5YTVmZmQ2
MzNmOGFjMTUyZWU1OTBjYWUxMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oCkBAIC0z
NSw2ICszNSw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2UuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgogCiBPQkpDX0NMQVNTIFdl
YkFWUGxheWVyQ29udHJvbGxlcjsKIE9CSkNfQ0xBU1MgQVZQbGF5ZXJWaWV3Q29udHJvbGxlcjsK
QEAgLTYzLDcgKzY0LDcgQEAgcHVibGljOgogCiBjbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdAogICAgIDogcHVibGljIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZQotICAg
ICwgcHVibGljIFJlZkNvdW50ZWQ8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHsK
KyAgICAsIHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdD4gewogCiBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQVZLaXQoKTsKQEAgLTkxLDcgKzkyLDEyIEBAIHB1YmxpYzoKICAgICBI
VE1MTWVkaWFFbGVtZW50OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUoKSBjb25zdCB7IHJldHVy
biBtX21vZGU7IH0KIAogcHJvdGVjdGVkOgotICAgICAgICAKKyAgICB2b2lkIHNldHVwRnVsbHNj
cmVlbkludGVybmFsKFBsYXRmb3JtTGF5ZXImLCBJbnRSZWN0IGluaXRpYWxSZWN0LCBVSVZpZXcg
KiwgSFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9vbCBhbGxvd09wdGlt
aXplZEZ1bGxzY3JlZW4pOworICAgIHZvaWQgZW50ZXJGdWxsc2NyZWVuT3B0aW1pemVkKCk7Cisg
ICAgdm9pZCBlbnRlckZ1bGxzY3JlZW5TdGFuZGFyZCgpOworICAgIHZvaWQgZXhpdEZ1bGxzY3Jl
ZW5JbnRlcm5hbChJbnRSZWN0IGZpbmFsUmVjdCk7CisgICAgdm9pZCBjbGVhbnVwRnVsbHNjcmVl
bkludGVybmFsKCk7CisKICAgICBSZXRhaW5QdHI8V2ViQVZQbGF5ZXJDb250cm9sbGVyPiBtX3Bs
YXllckNvbnRyb2xsZXI7CiAgICAgUmV0YWluUHRyPEFWUGxheWVyVmlld0NvbnRyb2xsZXI+IG1f
cGxheWVyVmlld0NvbnRyb2xsZXI7CiAgICAgUmV0YWluUHRyPENBTGF5ZXI+IG1fdmlkZW9MYXll
cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbQppbmRleCAyZDY0NDYxNDZlZGY4MDc4Zjhm
YjUyNTUxZDI3ZTZjMmYzOTE5NTk1Li42MzA1MmQ2NjhkYTIwNDE1YmM3MjQ4YzA4NzdkOWE5ODg4
YWYwZWE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tCkBAIC02MjEsMTEgKzYyMSwx
MSBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXRXZWJWaWRlb0Z1
bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcihXZWJWaQogCiB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0OjpzZXREdXJhdGlvbihkb3VibGUgZHVyYXRpb24pCiB7Ci0gICAgV2ViQVZQ
bGF5ZXJDb250cm9sbGVyKiBwbGF5ZXJDb250cm9sbGVyID0gdGhpcy0+cGxheWVyQ29udHJvbGxl
cigpOworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gc3Ryb25n
VGhpcyh0aGlzKTsKICAgICAKLSAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdD4gcHJvdGVjdCh0aGlzKTsKLSAgICAKLSAgICBkaXNwYXRjaF9hc3luYyhk
aXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeeworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNo
X2dldF9tYWluX3F1ZXVlKCksIFtzdHJvbmdUaGlzLCBkdXJhdGlvbl0geworICAgICAgICBXZWJB
VlBsYXllckNvbnRyb2xsZXIqIHBsYXllckNvbnRyb2xsZXIgPSBzdHJvbmdUaGlzLT5wbGF5ZXJD
b250cm9sbGVyKCk7CisKICAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMjcwMTcgdXNlIGNvcnJlY3QgdmFsdWVzIGluc3RlYWQgb2YgZHVy
YXRpb24gZm9yIGFsbCB0aGVzZQogICAgICAgICBwbGF5ZXJDb250cm9sbGVyLmNvbnRlbnREdXJh
dGlvbiA9IGR1cmF0aW9uOwogICAgICAgICBwbGF5ZXJDb250cm9sbGVyLm1heFRpbWUgPSBkdXJh
dGlvbjsKQEAgLTY0MCw1OSArNjQwLDQzIEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ6OnNldER1cmF0aW9uKGRvdWJsZSBkdXJhdGlvbikKICAgICAgICAgcGxheWVyQ29u
dHJvbGxlci5jYW5TZWVrID0gWUVTOwogICAgICAgICBwbGF5ZXJDb250cm9sbGVyLm1pblRpbWUg
PSAwOwogICAgICAgICBwbGF5ZXJDb250cm9sbGVyLnN0YXR1cyA9IEFWUGxheWVyQ29udHJvbGxl
clN0YXR1c1JlYWR5VG9QbGF5OwotICAgICAgICAKLSAgICAgICAgV2ViVGhyZWFkUnVuKF57Ci0g
ICAgICAgICAgICBwcm90ZWN0ID0gbnVsbHB0cjsKLSAgICAgICAgfSk7CiAgICAgfSk7CiB9CiAK
IHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldEN1cnJlbnRUaW1lKGRv
dWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUpCiB7Ci0gICAgX19ibG9jayBSZWZQ
dHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHByb3RlY3QodGhpcyk7CisgICAg
UmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBzdHJvbmdUaGlzKHRoaXMp
OwogICAgIAotICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57
Ci0gICAgICAgIE5TVGltZUludGVydmFsIGFuY2hvclRpbWVTdGFtcCA9ICFbcGxheWVyQ29udHJv
bGxlcigpIHJhdGVdID8gTkFOIDogYW5jaG9yVGltZTsKKyAgICBkaXNwYXRjaF9hc3luYyhkaXNw
YXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbc3Ryb25nVGhpcywgY3VycmVudFRpbWUsIGFuY2hvclRp
bWVdIHsKKyAgICAgICAgTlNUaW1lSW50ZXJ2YWwgYW5jaG9yVGltZVN0YW1wID0gIVtzdHJvbmdU
aGlzLT5wbGF5ZXJDb250cm9sbGVyKCkgcmF0ZV0gPyBOQU4gOiBhbmNob3JUaW1lOwogICAgICAg
ICBBVlZhbHVlVGltaW5nICp0aW1pbmcgPSBbZ2V0QVZWYWx1ZVRpbWluZ0NsYXNzKCkgdmFsdWVU
aW1pbmdXaXRoQW5jaG9yVmFsdWU6Y3VycmVudFRpbWUKICAgICAgICAgICAgIGFuY2hvclRpbWVT
dGFtcDphbmNob3JUaW1lU3RhbXAgcmF0ZTowXTsKLSAgICAgICAgcGxheWVyQ29udHJvbGxlcigp
LnRpbWluZyA9IHRpbWluZzsKLSAgICAgICAgCi0gICAgICAgIFdlYlRocmVhZFJ1biheewotICAg
ICAgICAgICAgcHJvdGVjdCA9IG51bGxwdHI7Ci0gICAgICAgIH0pOworICAgICAgICBzdHJvbmdU
aGlzLT5wbGF5ZXJDb250cm9sbGVyKCkudGltaW5nID0gdGltaW5nOwogICAgIH0pOwogfQogCiB2
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXRSYXRlKGJvb2wgaXNQbGF5
aW5nLCBmbG9hdCBwbGF5YmFja1JhdGUpCiB7Ci0gICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHByb3RlY3QodGhpcyk7CisgICAgUmVmUHRyPFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBzdHJvbmdUaGlzKHRoaXMpOwogICAgIAotICAg
IGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57Ci0gICAgICAgIHBs
YXllckNvbnRyb2xsZXIoKS5yYXRlID0gaXNQbGF5aW5nID8gcGxheWJhY2tSYXRlIDogMC47Ci0g
ICAgICAgIAotICAgICAgICBXZWJUaHJlYWRSdW4oXnsKLSAgICAgICAgICAgIHByb3RlY3QgPSBu
dWxscHRyOwotICAgICAgICB9KTsKKyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFp
bl9xdWV1ZSgpLCBbc3Ryb25nVGhpcywgaXNQbGF5aW5nLCBwbGF5YmFja1JhdGVdIHsKKyAgICAg
ICAgc3Ryb25nVGhpcy0+cGxheWVyQ29udHJvbGxlcigpLnJhdGUgPSBpc1BsYXlpbmcgPyBwbGF5
YmFja1JhdGUgOiAwLjsKICAgICB9KTsKIH0KIAogdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdDo6c2V0VmlkZW9EaW1lbnNpb25zKGJvb2wgaGFzVmlkZW8sIGZsb2F0IHdpZHRo
LCBmbG9hdCBoZWlnaHQpCiB7Ci0gICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQ+IHByb3RlY3QodGhpcyk7CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0PiBzdHJvbmdUaGlzKHRoaXMpOwogICAgIAotICAgIGRpc3BhdGNo
X2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57Ci0gICAgICAgIHBsYXllckNvbnRy
b2xsZXIoKS5oYXNFbmFibGVkVmlkZW8gPSBoYXNWaWRlbzsKLSAgICAgICAgcGxheWVyQ29udHJv
bGxlcigpLmNvbnRlbnREaW1lbnNpb25zID0gQ0dTaXplTWFrZSh3aWR0aCwgaGVpZ2h0KTsKLSAg
ICAgICAgCi0gICAgICAgIFdlYlRocmVhZFJ1biheewotICAgICAgICAgICAgcHJvdGVjdCA9IG51
bGxwdHI7Ci0gICAgICAgIH0pOworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWlu
X3F1ZXVlKCksIFtzdHJvbmdUaGlzLCBoYXNWaWRlbywgd2lkdGgsIGhlaWdodF0geworICAgICAg
ICBzdHJvbmdUaGlzLT5wbGF5ZXJDb250cm9sbGVyKCkuaGFzRW5hYmxlZFZpZGVvID0gaGFzVmlk
ZW87CisgICAgICAgIHN0cm9uZ1RoaXMtPnBsYXllckNvbnRyb2xsZXIoKS5jb250ZW50RGltZW5z
aW9ucyA9IENHU2l6ZU1ha2Uod2lkdGgsIGhlaWdodCk7CiAgICAgfSk7CiB9CiAKIHZvaWQgV2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldFNlZWthYmxlUmFuZ2VzKGNvbnN0IFRp
bWVSYW5nZXMmIHRpbWVSYW5nZXMpCiB7Ci0gICAgTlNNdXRhYmxlQXJyYXkqIHNlZWthYmxlUmFu
Z2VzID0gW05TTXV0YWJsZUFycmF5IGFycmF5XTsKKyAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJy
YXk+IHNlZWthYmxlUmFuZ2VzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0
XSk7CiAgICAgRXhjZXB0aW9uQ29kZSBleGNlcHRpb25Db2RlOwogCiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHRpbWVSYW5nZXMubGVuZ3RoKCk7IGkrKykgewpAQCAtNzAzLDE0ICs2ODcs
MTAgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0U2Vla2FibGVS
YW5nZXMoY29uc3QgVGltZVJhbmdlcyYgdGltZVIKICAgICAgICAgW3NlZWthYmxlUmFuZ2VzIGFk
ZE9iamVjdDpbTlNWYWx1ZSB2YWx1ZVdpdGhDTVRpbWVSYW5nZTpyYW5nZV1dOwogICAgIH0KICAg
ICAKLSAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4g
cHJvdGVjdCh0aGlzKTsKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQ+IHN0cm9uZ1RoaXModGhpcyk7CiAgICAgCi0gICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hf
Z2V0X21haW5fcXVldWUoKSwgXnsKLSAgICAgICAgcGxheWVyQ29udHJvbGxlcigpLnNlZWthYmxl
VGltZVJhbmdlcyA9IHNlZWthYmxlUmFuZ2VzOwotICAgICAgICAKLSAgICAgICAgV2ViVGhyZWFk
UnVuKF57Ci0gICAgICAgICAgICBwcm90ZWN0ID0gbnVsbHB0cjsKLSAgICAgICAgfSk7CisgICAg
ZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3N0cm9uZ1RoaXMsIHNl
ZWthYmxlUmFuZ2VzXSB7CisgICAgICAgIHN0cm9uZ1RoaXMtPnBsYXllckNvbnRyb2xsZXIoKS5z
ZWVrYWJsZVRpbWVSYW5nZXMgPSBzZWVrYWJsZVJhbmdlcy5nZXQoKTsKICAgICB9KTsKIH0KIApA
QCAtNzE5LDkgKzY5OSw5IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6
OnNldENhblBsYXlGYXN0UmV2ZXJzZShib29sIGNhblBsYXlGYXN0UmV2CiAgICAgcGxheWVyQ29u
dHJvbGxlcigpLmNhblNjYW5CYWNrd2FyZCA9IGNhblBsYXlGYXN0UmV2ZXJzZTsKIH0KIAotc3Rh
dGljIE5TTXV0YWJsZUFycmF5ICptZWRpYVNlbGVjdGlvbk9wdGlvbnMoY29uc3QgVmVjdG9yPFN0
cmluZz4mIG9wdGlvbnMpCitzdGF0aWMgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBtZWRpYVNl
bGVjdGlvbk9wdGlvbnMoY29uc3QgVmVjdG9yPFN0cmluZz4mIG9wdGlvbnMpCiB7Ci0gICAgTlNN
dXRhYmxlQXJyYXkgKndlYk9wdGlvbnMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNp
dHk6b3B0aW9ucy5zaXplKCldOworICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gd2ViT3B0
aW9ucyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpv
cHRpb25zLnNpemUoKV0pOwogICAgIGZvciAoYXV0byYgbmFtZSA6IG9wdGlvbnMpIHsKICAgICAg
ICAgUmV0YWluUHRyPFdlYkFWTWVkaWFTZWxlY3Rpb25PcHRpb24+IHdlYk9wdGlvbiA9IGFkb3B0
TlMoW1tXZWJBVk1lZGlhU2VsZWN0aW9uT3B0aW9uIGFsbG9jXSBpbml0XSk7CiAgICAgICAgIFt3
ZWJPcHRpb24gc2V0TG9jYWxpemVkRGlzcGxheU5hbWU6bmFtZV07CkBAIC03MzIsMzMgKzcxMiwy
NSBAQCBzdGF0aWMgTlNNdXRhYmxlQXJyYXkgKm1lZGlhU2VsZWN0aW9uT3B0aW9ucyhjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgb3B0aW9ucykKIAogdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdDo6c2V0QXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnMoY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCiB7Ci0gICAgTlNNdXRhYmxlQXJy
YXkgKndlYk9wdGlvbnMgPSBtZWRpYVNlbGVjdGlvbk9wdGlvbnMob3B0aW9ucyk7Ci0gICAgX19i
bG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHByb3RlY3QodGhp
cyk7CisgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiB3ZWJPcHRpb25zID0gbWVkaWFTZWxl
Y3Rpb25PcHRpb25zKG9wdGlvbnMpOworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdD4gc3Ryb25nVGhpcyh0aGlzKTsKICAgICAKLSAgICBkaXNwYXRjaF9hc3luYyhk
aXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeewotICAgICAgICBwbGF5ZXJDb250cm9sbGVyKCku
YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnMgPSB3ZWJPcHRpb25zOwotICAgICAgICBpZiAoc2Vs
ZWN0ZWRJbmRleCA8IHdlYk9wdGlvbnMuY291bnQpCi0gICAgICAgICAgICBwbGF5ZXJDb250cm9s
bGVyKCkuY3VycmVudEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb24gPSB3ZWJPcHRpb25zWyhzaXpl
X3Qpc2VsZWN0ZWRJbmRleF07Ci0gICAgICAgIAotICAgICAgICBXZWJUaHJlYWRSdW4oXnsKLSAg
ICAgICAgICAgIHByb3RlY3QgPSBudWxscHRyOwotICAgICAgICB9KTsKKyAgICBkaXNwYXRjaF9h
c3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbd2ViT3B0aW9ucywgc3Ryb25nVGhpcywg
c2VsZWN0ZWRJbmRleF0geworICAgICAgICBzdHJvbmdUaGlzLT5wbGF5ZXJDb250cm9sbGVyKCku
YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnMgPSB3ZWJPcHRpb25zLmdldCgpOworICAgICAgICBp
ZiAoc2VsZWN0ZWRJbmRleCA8IFt3ZWJPcHRpb25zIGNvdW50XSkKKyAgICAgICAgICAgIHN0cm9u
Z1RoaXMtPnBsYXllckNvbnRyb2xsZXIoKS5jdXJyZW50QXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlv
biA9IFt3ZWJPcHRpb25zIG9iamVjdEF0SW5kZXg6c2VsZWN0ZWRJbmRleF07CiAgICAgfSk7CiB9
CiAKIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldExlZ2libGVNZWRp
YVNlbGVjdGlvbk9wdGlvbnMoY29uc3QgVmVjdG9yPFN0cmluZz4mIG9wdGlvbnMsIHVpbnQ2NF90
IHNlbGVjdGVkSW5kZXgpCiB7Ci0gICAgTlNNdXRhYmxlQXJyYXkgKndlYk9wdGlvbnMgPSBtZWRp
YVNlbGVjdGlvbk9wdGlvbnMob3B0aW9ucyk7Ci0gICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHByb3RlY3QodGhpcyk7Ci0gICAgCi0gICAgZGlzcGF0
Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKLSAgICAgICAgcGxheWVyQ29u
dHJvbGxlcigpLmxlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMgPSB3ZWJPcHRpb25zOwotICAg
ICAgICBpZiAoc2VsZWN0ZWRJbmRleCA8IHdlYk9wdGlvbnMuY291bnQpCi0gICAgICAgICAgICBw
bGF5ZXJDb250cm9sbGVyKCkuY3VycmVudExlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbiA9IHdl
Yk9wdGlvbnNbKHNpemVfdClzZWxlY3RlZEluZGV4XTsKLSAgICAgICAgCi0gICAgICAgIFdlYlRo
cmVhZFJ1biheewotICAgICAgICAgICAgcHJvdGVjdCA9IG51bGxwdHI7Ci0gICAgICAgIH0pOwor
ICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gd2ViT3B0aW9ucyA9IG1lZGlhU2VsZWN0aW9u
T3B0aW9ucyhvcHRpb25zKTsKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQ+IHN0cm9uZ1RoaXModGhpcyk7CisKKyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9n
ZXRfbWFpbl9xdWV1ZSgpLCBbd2ViT3B0aW9ucywgc3Ryb25nVGhpcywgc2VsZWN0ZWRJbmRleF0g
eworICAgICAgICBzdHJvbmdUaGlzLT5wbGF5ZXJDb250cm9sbGVyKCkubGVnaWJsZU1lZGlhU2Vs
ZWN0aW9uT3B0aW9ucyA9IHdlYk9wdGlvbnMuZ2V0KCk7CisgICAgICAgIGlmIChzZWxlY3RlZElu
ZGV4IDwgW3dlYk9wdGlvbnMgY291bnRdKQorICAgICAgICAgICAgc3Ryb25nVGhpcy0+cGxheWVy
Q29udHJvbGxlcigpLmN1cnJlbnRMZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb24gPSBbd2ViT3B0
aW9ucyBvYmplY3RBdEluZGV4OnNlbGVjdGVkSW5kZXhdOwogICAgIH0pOwogfQogCkBAIC03NzAs
MTk0ICs3NDIsMjA3IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNl
dEV4dGVybmFsUGxheWJhY2soYm9vbCBlbmFibGVkLCBFeHRlcm5hCiAgICAgZWxzZSBpZiAodGFy
Z2V0VHlwZSA9PSBUYXJnZXRUeXBlVFZPdXQpCiAgICAgICAgIGV4dGVybmFsUGxheWJhY2tUeXBl
ID0gQVZQbGF5ZXJDb250cm9sbGVyRXh0ZXJuYWxQbGF5YmFja1R5cGVUVk91dDsKIAotICAgIF9f
YmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBwcm90ZWN0KHRo
aXMpOwotICAgIAotICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCks
IF57Ci0gICAgICAgIHBsYXllckNvbnRyb2xsZXIoKS5leHRlcm5hbFBsYXliYWNrQWlyUGxheURl
dmljZUxvY2FsaXplZE5hbWUgPSBsb2NhbGl6ZWREZXZpY2VOYW1lOwotICAgICAgICBwbGF5ZXJD
b250cm9sbGVyKCkuZXh0ZXJuYWxQbGF5YmFja1R5cGUgPSBleHRlcm5hbFBsYXliYWNrVHlwZTsK
LSAgICAgICAgcGxheWVyQ29udHJvbGxlcigpLmV4dGVybmFsUGxheWJhY2tBY3RpdmUgPSBlbmFi
bGVkOwotICAgICAgICBbbV92aWRlb0xheWVyQ29udGFpbmVyLmdldCgpIHNldEhpZGRlbjplbmFi
bGVkXTsKLSAgICAgICAgCi0gICAgICAgIFdlYlRocmVhZFJ1biheewotICAgICAgICAgICAgcHJv
dGVjdCA9IG51bGxwdHI7Ci0gICAgICAgIH0pOworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdD4gc3Ryb25nVGhpcyh0aGlzKTsKKworICAgIGRpc3BhdGNoX2FzeW5j
KGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtzdHJvbmdUaGlzLCBlbmFibGVkLCBsb2NhbGl6
ZWREZXZpY2VOYW1lLCBleHRlcm5hbFBsYXliYWNrVHlwZV0geworICAgICAgICBXZWJBVlBsYXll
ckNvbnRyb2xsZXIqIHBsYXllckNvbnRyb2xsZXIgPSBzdHJvbmdUaGlzLT5wbGF5ZXJDb250cm9s
bGVyKCk7CisgICAgICAgIHBsYXllckNvbnRyb2xsZXIuZXh0ZXJuYWxQbGF5YmFja0FpclBsYXlE
ZXZpY2VMb2NhbGl6ZWROYW1lID0gbG9jYWxpemVkRGV2aWNlTmFtZTsKKyAgICAgICAgcGxheWVy
Q29udHJvbGxlci5leHRlcm5hbFBsYXliYWNrVHlwZSA9IGV4dGVybmFsUGxheWJhY2tUeXBlOwor
ICAgICAgICBwbGF5ZXJDb250cm9sbGVyLmV4dGVybmFsUGxheWJhY2tBY3RpdmUgPSBlbmFibGVk
OworICAgICAgICBbc3Ryb25nVGhpcy0+bV92aWRlb0xheWVyQ29udGFpbmVyLmdldCgpIHNldEhp
ZGRlbjplbmFibGVkXTsKICAgICB9KTsKIH0KIAogdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdDo6c2V0dXBGdWxsc2NyZWVuKFBsYXRmb3JtTGF5ZXImIHZpZGVvTGF5ZXIsIFdl
YkNvcmU6OkludFJlY3QgaW5pdGlhbFJlY3QsIFVJVmlldyogcGFyZW50VmlldywgSFRNTE1lZGlh
RWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlLCBib29sIGFsbG93T3B0aW1pemVkRnVs
bHNjcmVlbikKIHsKLSAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdD4gcHJvdGVjdCh0aGlzKTsKLSAgICAKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQ+IHN0cm9uZ1RoaXModGhpcyk7CisKICAgICBBU1NFUlQobW9kZSAh
PSBIVE1MTWVkaWFFbGVtZW50OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSk7CiAgICAgbV92aWRl
b0xheWVyID0gJnZpZGVvTGF5ZXI7CiAgICAgCiAgICAgbV9tb2RlID0gbW9kZTsKICAgICAKLSAg
ICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeewotCi0gICAgICAg
IFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsKLSAgICAgICAgW0NBVHJhbnNhY3Rpb24gc2V0RGlzYWJs
ZUFjdGlvbnM6WUVTXTsKLSAgICAgICAgbV9wYXJlbnRWaWV3ID0gcGFyZW50VmlldzsKLSAgICAg
ICAgbV9wYXJlbnRXaW5kb3cgPSBwYXJlbnRWaWV3LndpbmRvdzsKLQotICAgICAgICBpZiAoIWFw
cGxpY2F0aW9uSXNBZFNoZWV0KCkpIHsKLSAgICAgICAgICAgIG1fd2luZG93ID0gYWRvcHROUyhb
W2dldFVJV2luZG93Q2xhc3MoKSBhbGxvY10gaW5pdFdpdGhGcmFtZTpbW2dldFVJU2NyZWVuQ2xh
c3MoKSBtYWluU2NyZWVuXSBib3VuZHNdXSk7Ci0gICAgICAgICAgICBbbV93aW5kb3cgc2V0QmFj
a2dyb3VuZENvbG9yOltnZXRVSUNvbG9yQ2xhc3MoKSBjbGVhckNvbG9yXV07Ci0gICAgICAgICAg
ICBtX3ZpZXdDb250cm9sbGVyID0gYWRvcHROUyhbW2dldFVJVmlld0NvbnRyb2xsZXJDbGFzcygp
IGFsbG9jXSBpbml0XSk7Ci0gICAgICAgICAgICBbW21fdmlld0NvbnRyb2xsZXIgdmlld10gc2V0
RnJhbWU6W21fd2luZG93IGJvdW5kc11dOwotICAgICAgICAgICAgW21fd2luZG93IHNldFJvb3RW
aWV3Q29udHJvbGxlcjptX3ZpZXdDb250cm9sbGVyLmdldCgpXTsKLSAgICAgICAgICAgIFttX3dp
bmRvdyBtYWtlS2V5QW5kVmlzaWJsZV07Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFtt
X3ZpZGVvTGF5ZXIgcmVtb3ZlRnJvbVN1cGVybGF5ZXJdOwotICAgICAgICAKLSAgICAgICAgbV92
aWRlb0xheWVyQ29udGFpbmVyID0gW1dlYkFWVmlkZW9MYXllciB2aWRlb0xheWVyXTsKLSAgICAg
ICAgW21fdmlkZW9MYXllckNvbnRhaW5lciBzZXRIaWRkZW46cGxheWVyQ29udHJvbGxlcigpLmV4
dGVybmFsUGxheWJhY2tBY3RpdmVdOwotICAgICAgICBbbV92aWRlb0xheWVyQ29udGFpbmVyIHNl
dFZpZGVvU3VibGF5ZXI6bV92aWRlb0xheWVyLmdldCgpXTsKLSAgICAgICAgCi0gICAgICAgIENH
U2l6ZSB2aWRlb1NpemUgPSBwbGF5ZXJDb250cm9sbGVyKCkuY29udGVudERpbWVuc2lvbnM7Ci0g
ICAgICAgIENHUmVjdCB2aWRlb1JlY3QgPSBDR1JlY3RNYWtlKDAsIDAsIHZpZGVvU2l6ZS53aWR0
aCwgdmlkZW9TaXplLmhlaWdodCk7Ci0gICAgICAgIFttX3ZpZGVvTGF5ZXJDb250YWluZXIgc2V0
VmlkZW9SZWN0OnZpZGVvUmVjdF07Ci0KLSAgICAgICAgbV9wbGF5ZXJWaWV3Q29udHJvbGxlciA9
IGFkb3B0TlMoW1tnZXRBVlBsYXllclZpZXdDb250cm9sbGVyQ2xhc3MoKSBhbGxvY10gaW5pdFdp
dGhWaWRlb0xheWVyOm1fdmlkZW9MYXllckNvbnRhaW5lci5nZXQoKV0pOwotICAgICAgICBbbV9w
bGF5ZXJWaWV3Q29udHJvbGxlciBzZXRTaG93c1BsYXliYWNrQ29udHJvbHM6Tk9dOwotICAgICAg
ICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzZXRQbGF5ZXJDb250cm9sbGVyOihBVlBsYXllckNv
bnRyb2xsZXIgKilwbGF5ZXJDb250cm9sbGVyKCldOwotICAgICAgICBbbV9wbGF5ZXJWaWV3Q29u
dHJvbGxlciBzZXREZWxlZ2F0ZTpwbGF5ZXJDb250cm9sbGVyKCldOwotICAgICAgICBbbV9wbGF5
ZXJWaWV3Q29udHJvbGxlciBzZXRBbGxvd3NPcHRpbWl6ZWRGdWxsc2NyZWVuOmFsbG93T3B0aW1p
emVkRnVsbHNjcmVlbl07Ci0KLSAgICAgICAgW21fdmlkZW9MYXllckNvbnRhaW5lciBzZXRQbGF5
ZXJWaWV3Q29udHJvbGxlcjptX3BsYXllclZpZXdDb250cm9sbGVyLmdldCgpXTsKLQotICAgICAg
ICBpZiAobV92aWV3Q29udHJvbGxlcikgewotICAgICAgICAgICAgW21fdmlld0NvbnRyb2xsZXIg
YWRkQ2hpbGRWaWV3Q29udHJvbGxlcjptX3BsYXllclZpZXdDb250cm9sbGVyLmdldCgpXTsKLSAg
ICAgICAgICAgIFtbbV92aWV3Q29udHJvbGxlciB2aWV3XSBhZGRTdWJ2aWV3OlttX3BsYXllclZp
ZXdDb250cm9sbGVyIHZpZXddXTsKLSAgICAgICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVy
IHZpZXddLmZyYW1lID0gW3BhcmVudFZpZXcgY29udmVydFJlY3Q6aW5pdGlhbFJlY3QgdG9WaWV3
Om5pbF07Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBbcGFyZW50VmlldyBhZGRTdWJ2
aWV3OlttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddXTsKLSAgICAgICAgICAgIFttX3BsYXll
clZpZXdDb250cm9sbGVyIHZpZXddLmZyYW1lID0gaW5pdGlhbFJlY3Q7Ci0gICAgICAgIH0KKyAg
ICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbc3Ryb25nVGhpcywg
JnZpZGVvTGF5ZXIsIGluaXRpYWxSZWN0LCBwYXJlbnRWaWV3LCBtb2RlLCBhbGxvd09wdGltaXpl
ZEZ1bGxzY3JlZW5dIHsKKyAgICAgICAgc3Ryb25nVGhpcy0+c2V0dXBGdWxsc2NyZWVuSW50ZXJu
YWwodmlkZW9MYXllciwgaW5pdGlhbFJlY3QsIHBhcmVudFZpZXcsIG1vZGUsIGFsbG93T3B0aW1p
emVkRnVsbHNjcmVlbik7CisgICAgfSk7Cit9CiAKLSAgICAgICAgW1ttX3BsYXllclZpZXdDb250
cm9sbGVyIHZpZXddIHNldEJhY2tncm91bmRDb2xvcjpbZ2V0VUlDb2xvckNsYXNzKCkgY2xlYXJD
b2xvcl1dOwotICAgICAgICBbW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10gc2V0TmVlZHNM
YXlvdXRdOwotICAgICAgICBbW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10gbGF5b3V0SWZO
ZWVkZWRdOwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0dXBGdWxs
c2NyZWVuSW50ZXJuYWwoUGxhdGZvcm1MYXllciYgdmlkZW9MYXllciwgV2ViQ29yZTo6SW50UmVj
dCBpbml0aWFsUmVjdCwgVUlWaWV3KiBwYXJlbnRWaWV3LCBIVE1MTWVkaWFFbGVtZW50OjpWaWRl
b0Z1bGxzY3JlZW5Nb2RlIG1vZGUsIGJvb2wgYWxsb3dPcHRpbWl6ZWRGdWxsc2NyZWVuKQorewor
ICAgIFVOVVNFRF9QQVJBTSh2aWRlb0xheWVyKTsKKyAgICBVTlVTRURfUEFSQU0obW9kZSk7CiAK
LSAgICAgICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKKyAgICBbQ0FUcmFuc2FjdGlvbiBiZWdp
bl07CisgICAgW0NBVHJhbnNhY3Rpb24gc2V0RGlzYWJsZUFjdGlvbnM6WUVTXTsKKyAgICBtX3Bh
cmVudFZpZXcgPSBwYXJlbnRWaWV3OworICAgIG1fcGFyZW50V2luZG93ID0gcGFyZW50Vmlldy53
aW5kb3c7CisKKyAgICBpZiAoIWFwcGxpY2F0aW9uSXNBZFNoZWV0KCkpIHsKKyAgICAgICAgbV93
aW5kb3cgPSBhZG9wdE5TKFtbZ2V0VUlXaW5kb3dDbGFzcygpIGFsbG9jXSBpbml0V2l0aEZyYW1l
OltbZ2V0VUlTY3JlZW5DbGFzcygpIG1haW5TY3JlZW5dIGJvdW5kc11dKTsKKyAgICAgICAgW21f
d2luZG93IHNldEJhY2tncm91bmRDb2xvcjpbZ2V0VUlDb2xvckNsYXNzKCkgY2xlYXJDb2xvcl1d
OworICAgICAgICBtX3ZpZXdDb250cm9sbGVyID0gYWRvcHROUyhbW2dldFVJVmlld0NvbnRyb2xs
ZXJDbGFzcygpIGFsbG9jXSBpbml0XSk7CisgICAgICAgIFtbbV92aWV3Q29udHJvbGxlciB2aWV3
XSBzZXRGcmFtZTpbbV93aW5kb3cgYm91bmRzXV07CisgICAgICAgIFttX3dpbmRvdyBzZXRSb290
Vmlld0NvbnRyb2xsZXI6bV92aWV3Q29udHJvbGxlci5nZXQoKV07CisgICAgICAgIFttX3dpbmRv
dyBtYWtlS2V5QW5kVmlzaWJsZV07CisgICAgfQorICAgIAorICAgIFttX3ZpZGVvTGF5ZXIgcmVt
b3ZlRnJvbVN1cGVybGF5ZXJdOworICAgIAorICAgIG1fdmlkZW9MYXllckNvbnRhaW5lciA9IFtX
ZWJBVlZpZGVvTGF5ZXIgdmlkZW9MYXllcl07CisgICAgW21fdmlkZW9MYXllckNvbnRhaW5lciBz
ZXRIaWRkZW46cGxheWVyQ29udHJvbGxlcigpLmV4dGVybmFsUGxheWJhY2tBY3RpdmVdOworICAg
IFttX3ZpZGVvTGF5ZXJDb250YWluZXIgc2V0VmlkZW9TdWJsYXllcjptX3ZpZGVvTGF5ZXIuZ2V0
KCldOworICAgIAorICAgIENHU2l6ZSB2aWRlb1NpemUgPSBwbGF5ZXJDb250cm9sbGVyKCkuY29u
dGVudERpbWVuc2lvbnM7CisgICAgQ0dSZWN0IHZpZGVvUmVjdCA9IENHUmVjdE1ha2UoMCwgMCwg
dmlkZW9TaXplLndpZHRoLCB2aWRlb1NpemUuaGVpZ2h0KTsKKyAgICBbbV92aWRlb0xheWVyQ29u
dGFpbmVyIHNldFZpZGVvUmVjdDp2aWRlb1JlY3RdOworCisgICAgbV9wbGF5ZXJWaWV3Q29udHJv
bGxlciA9IGFkb3B0TlMoW1tnZXRBVlBsYXllclZpZXdDb250cm9sbGVyQ2xhc3MoKSBhbGxvY10g
aW5pdFdpdGhWaWRlb0xheWVyOm1fdmlkZW9MYXllckNvbnRhaW5lci5nZXQoKV0pOworICAgIFtt
X3BsYXllclZpZXdDb250cm9sbGVyIHNldFNob3dzUGxheWJhY2tDb250cm9sczpOT107CisgICAg
W21fcGxheWVyVmlld0NvbnRyb2xsZXIgc2V0UGxheWVyQ29udHJvbGxlcjooQVZQbGF5ZXJDb250
cm9sbGVyICopcGxheWVyQ29udHJvbGxlcigpXTsKKyAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxl
ciBzZXREZWxlZ2F0ZTpwbGF5ZXJDb250cm9sbGVyKCldOworICAgIFttX3BsYXllclZpZXdDb250
cm9sbGVyIHNldEFsbG93c09wdGltaXplZEZ1bGxzY3JlZW46YWxsb3dPcHRpbWl6ZWRGdWxsc2Ny
ZWVuXTsKKworICAgIFttX3ZpZGVvTGF5ZXJDb250YWluZXIgc2V0UGxheWVyVmlld0NvbnRyb2xs
ZXI6bV9wbGF5ZXJWaWV3Q29udHJvbGxlci5nZXQoKV07CisKKyAgICBpZiAobV92aWV3Q29udHJv
bGxlcikgeworICAgICAgICBbbV92aWV3Q29udHJvbGxlciBhZGRDaGlsZFZpZXdDb250cm9sbGVy
Om1fcGxheWVyVmlld0NvbnRyb2xsZXIuZ2V0KCldOworICAgICAgICBbW21fdmlld0NvbnRyb2xs
ZXIgdmlld10gYWRkU3VidmlldzpbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XV07CisgICAg
ICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddLmZyYW1lID0gW3BhcmVudFZpZXcgY29u
dmVydFJlY3Q6aW5pdGlhbFJlY3QgdG9WaWV3Om5pbF07CisgICAgfSBlbHNlIHsKKyAgICAgICAg
W3BhcmVudFZpZXcgYWRkU3VidmlldzpbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XV07Cisg
ICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddLmZyYW1lID0gaW5pdGlhbFJlY3Q7
CisgICAgfQogCi0gICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVl
KCksIF57Ci0gICAgICAgICAgICBXZWJUaHJlYWRSdW4oXnsKLSAgICAgICAgICAgICAgICBpZiAo
bV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCi0gICAgICAgICAgICAgICAgICAgIG1fZnVsbHNj
cmVlbkNoYW5nZU9ic2VydmVyLT5kaWRTZXR1cEZ1bGxzY3JlZW4oKTsKKyAgICBbW21fcGxheWVy
Vmlld0NvbnRyb2xsZXIgdmlld10gc2V0QmFja2dyb3VuZENvbG9yOltnZXRVSUNvbG9yQ2xhc3Mo
KSBjbGVhckNvbG9yXV07CisgICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddIHNldE5l
ZWRzTGF5b3V0XTsKKyAgICBbW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10gbGF5b3V0SWZO
ZWVkZWRdOwogCi0gICAgICAgICAgICAgICAgcHJvdGVjdCA9IG51bGxwdHI7Ci0gICAgICAgICAg
ICB9KTsKLSAgICAgICAgfSk7CisgICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKKworICAgIFJl
ZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gc3Ryb25nVGhpcyh0aGlzKTsK
KyAgICBXZWJUaHJlYWRSdW4oW3N0cm9uZ1RoaXNdIHsKKyAgICAgICAgaWYgKHN0cm9uZ1RoaXMt
Pm1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQorICAgICAgICAgICAgc3Ryb25nVGhpcy0+bV9m
dWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZFNldHVwRnVsbHNjcmVlbigpOwogICAgIH0pOwog
fQogCiB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjplbnRlckZ1bGxzY3Jl
ZW4oKQogewotICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0PiBwcm90ZWN0KHRoaXMpOwotICAgIAogICAgIG1fZXhpdENvbXBsZXRlZCA9IGZhbHNlOwog
ICAgIG1fZXhpdFJlcXVlc3RlZCA9IGZhbHNlOwogICAgIG1fZW50ZXJSZXF1ZXN0ZWQgPSB0cnVl
OwogICAgIAotICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57
Ci0gICAgICAgIFttX3ZpZGVvTGF5ZXJDb250YWluZXIgc2V0QmFja2dyb3VuZENvbG9yOltbZ2V0
VUlDb2xvckNsYXNzKCkgYmxhY2tDb2xvcl0gQ0dDb2xvcl1dOwotICAgICAgICBpZiAobV9tb2Rl
ID09IEhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGVPcHRpbWl6ZWQpIHsKLSAg
ICAgICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHN0YXJ0T3B0aW1pemVkRnVsbHNjcmVl
bldpdGhTdGFydENvbXBsZXRpb25IYW5kbGVyOl4oQk9PTCBzdWNjZXNzLCBOU0Vycm9yICopIHsK
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxl
ciBzZXRTaG93c1BsYXliYWNrQ29udHJvbHM6WUVTXTsKLSAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICBXZWJUaHJlYWRSdW4oXnsKLSAgICAgICAgICAgICAgICAgICAgW21fd2luZG93
IHNldEhpZGRlbjpZRVNdOwotICAgICAgICAgICAgICAgICAgICBpZiAobV9mdWxsc2NyZWVuQ2hh
bmdlT2JzZXJ2ZXIpCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VP
YnNlcnZlci0+ZGlkRW50ZXJGdWxsc2NyZWVuKCk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwtPnJlcXVlc3RFeGl0RnVsbHNjcmVlbigpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgcHJvdGVjdCA9IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0gc3RvcENvbXBsZXRpb25IYW5k
bGVyOl4oQVZQbGF5ZXJWaWV3Q29udHJvbGxlck9wdGltaXplZEZ1bGxzY3JlZW5TdG9wUmVhc29u
KSB7Ci0gICAgICAgICAgICAgICAgbV9leGl0Q29tcGxldGVkID0gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICBpZiAobV9leGl0UmVxdWVzdGVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIFttX3ZpZGVv
TGF5ZXJDb250YWluZXIgc2V0QmFja2dyb3VuZENvbG9yOltbZ2V0VUlDb2xvckNsYXNzKCkgY2xl
YXJDb2xvcl0gQ0dDb2xvcl1dOwotICAgICAgICAgICAgICAgICAgICBbW21fcGxheWVyVmlld0Nv
bnRyb2xsZXIgdmlld10gc2V0QmFja2dyb3VuZENvbG9yOltnZXRVSUNvbG9yQ2xhc3MoKSBjbGVh
ckNvbG9yXV07Ci0gICAgICAgICAgICAgICAgICAgIFdlYlRocmVhZFJ1biheewotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5kaWRFeGl0RnVs
bHNjcmVlbigpOwotICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdCA9IG51bGxwdHI7Ci0g
ICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsKQotICAgICAgICAgICAgICAg
ICAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+cmVxdWVzdEV4aXRGdWxsc2NyZWVuKCk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfV07Ci0gICAgICAgIH0gZWxzZQotICAg
ICAgICBpZiAobV9tb2RlID09IEhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGVT
dGFuZGFyZCkgewotICAgICAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgZW50ZXJGdWxs
U2NyZWVuV2l0aENvbXBsZXRpb25IYW5kbGVyOl4oQk9PTCwgTlNFcnJvciopCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc2V0U2hvd3NQbGF5
YmFja0NvbnRyb2xzOllFU107Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgV2Vi
VGhyZWFkUnVuKF57Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX2Z1bGxzY3JlZW5DaGFuZ2VP
YnNlcnZlcikKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2Vy
dmVyLT5kaWRFbnRlckZ1bGxzY3JlZW4oKTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgICAgIHByb3RlY3QgPSBudWxscHRyOwotICAgICAgICAgICAgICAgIH0pOwotICAg
ICAgICAgICAgfV07Ci0gICAgICAgIH0KKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQ+IHN0cm9uZ1RoaXModGhpcyk7CisgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0
Y2hfZ2V0X21haW5fcXVldWUoKSwgW3N0cm9uZ1RoaXNdIHsKKyAgICAgICAgW3N0cm9uZ1RoaXMt
Pm1fdmlkZW9MYXllckNvbnRhaW5lciBzZXRCYWNrZ3JvdW5kQ29sb3I6W1tnZXRVSUNvbG9yQ2xh
c3MoKSBibGFja0NvbG9yXSBDR0NvbG9yXV07CisgICAgICAgIGlmIChzdHJvbmdUaGlzLT5tb2Rl
KCkgPT0gSFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZU9wdGltaXplZCkKKyAg
ICAgICAgICAgIHN0cm9uZ1RoaXMtPmVudGVyRnVsbHNjcmVlbk9wdGltaXplZCgpOworICAgICAg
ICBlbHNlIGlmIChzdHJvbmdUaGlzLT5tb2RlKCkgPT0gSFRNTE1lZGlhRWxlbWVudDo6VmlkZW9G
dWxsc2NyZWVuTW9kZVN0YW5kYXJkKQorICAgICAgICAgICAgc3Ryb25nVGhpcy0+ZW50ZXJGdWxs
c2NyZWVuU3RhbmRhcmQoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgfSk7CiB9CiAKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQ6OmVudGVyRnVsbHNjcmVlbk9wdGltaXplZCgpCit7CisgICAgUmVmUHRyPFdlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBzdHJvbmdUaGlzKHRoaXMpOworCisgICAgYXV0byBz
dGFydENvbXBsZXRpb25IYW5kbGVyID0gW3RoaXMsIHN0cm9uZ1RoaXNdIChCT09MIHN1Y2Nlc3Ms
IE5TRXJyb3IgKikgeworICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzZXRTaG93c1Bs
YXliYWNrQ29udHJvbHM6WUVTXTsKKworICAgICAgICBXZWJUaHJlYWRSdW4oW3RoaXMsIHN0cm9u
Z1RoaXMsIHN1Y2Nlc3NdIHsKKyAgICAgICAgICAgIFttX3dpbmRvdyBzZXRIaWRkZW46WUVTXTsK
KyAgICAgICAgICAgIGlmIChtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKKyAgICAgICAgICAg
ICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+ZGlkRW50ZXJGdWxsc2NyZWVuKCk7CisK
KyAgICAgICAgICAgIGlmICghc3VjY2VzcykgeworICAgICAgICAgICAgICAgIGlmIChtX3ZpZGVv
RnVsbHNjcmVlbk1vZGVsKQorICAgICAgICAgICAgICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1v
ZGVsLT5yZXF1ZXN0RXhpdEZ1bGxzY3JlZW4oKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7
CisgICAgfTsKKworICAgIGF1dG8gc3RvcENvbXBsZXRpb25IYW5kbGVyID0gW3RoaXMsIHN0cm9u
Z1RoaXNdIChBVlBsYXllclZpZXdDb250cm9sbGVyT3B0aW1pemVkRnVsbHNjcmVlblN0b3BSZWFz
b24pIHsKKyAgICAgICAgbV9leGl0Q29tcGxldGVkID0gdHJ1ZTsKKyAgICAgICAgaWYgKG1fZXhp
dFJlcXVlc3RlZCkgeworICAgICAgICAgICAgW21fdmlkZW9MYXllckNvbnRhaW5lciBzZXRCYWNr
Z3JvdW5kQ29sb3I6W1tnZXRVSUNvbG9yQ2xhc3MoKSBjbGVhckNvbG9yXSBDR0NvbG9yXV07Cisg
ICAgICAgICAgICBbW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10gc2V0QmFja2dyb3VuZENv
bG9yOltnZXRVSUNvbG9yQ2xhc3MoKSBjbGVhckNvbG9yXV07CisgICAgICAgICAgICBXZWJUaHJl
YWRSdW4oW3RoaXMsIHN0cm9uZ1RoaXNdIHsKKyAgICAgICAgICAgICAgICBpZiAobV9mdWxsc2Ny
ZWVuQ2hhbmdlT2JzZXJ2ZXIpCisgICAgICAgICAgICAgICAgICAgIG1fZnVsbHNjcmVlbkNoYW5n
ZU9ic2VydmVyLT5kaWRFeGl0RnVsbHNjcmVlbigpOworICAgICAgICAgICAgfSk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBpZiAobV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCkKKyAgICAg
ICAgICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5yZXF1ZXN0RXhpdEZ1bGxzY3JlZW4o
KTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzdGFy
dE9wdGltaXplZEZ1bGxzY3JlZW5XaXRoU3RhcnRDb21wbGV0aW9uSGFuZGxlcjpzdGFydENvbXBs
ZXRpb25IYW5kbGVyIHN0b3BDb21wbGV0aW9uSGFuZGxlcjpzdG9wQ29tcGxldGlvbkhhbmRsZXJd
OworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjplbnRlckZ1bGxz
Y3JlZW5TdGFuZGFyZCgpCit7CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0PiBzdHJvbmdUaGlzKHRoaXMpOworICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIGVu
dGVyRnVsbFNjcmVlbldpdGhDb21wbGV0aW9uSGFuZGxlcjpbdGhpcywgc3Ryb25nVGhpc10gKEJP
T0wsIE5TRXJyb3IqKSB7CisgICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHNldFNob3dz
UGxheWJhY2tDb250cm9sczpZRVNdOworCisgICAgICAgIFdlYlRocmVhZFJ1bihbdGhpcywgc3Ry
b25nVGhpc10geworICAgICAgICAgICAgaWYgKG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQor
ICAgICAgICAgICAgICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5kaWRFbnRlckZ1bGxz
Y3JlZW4oKTsKKyAgICAgICAgfSk7CisgICAgfV07Cit9CisKIHZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQ6OmV4aXRGdWxsc2NyZWVuKFdlYkNvcmU6OkludFJlY3QgZmluYWxS
ZWN0KQogewotICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0PiBwcm90ZWN0KHRoaXMpOwotICAgIAorICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdD4gc3Ryb25nVGhpcyh0aGlzKTsKKwogICAgIG1fZXhpdFJlcXVlc3RlZCA9
IHRydWU7CiAgICAgaWYgKG1fZXhpdENvbXBsZXRlZCkgewotICAgICAgICBXZWJUaHJlYWRSdW4o
XnsKLSAgICAgICAgICAgIGlmIChtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKLSAgICAgICAg
ICAgICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+ZGlkRXhpdEZ1bGxzY3JlZW4oKTsK
LSAgICAgICAgICAgIHByb3RlY3QgPSBudWxscHRyOworICAgICAgICBXZWJUaHJlYWRSdW4oW3N0
cm9uZ1RoaXNdIHsKKyAgICAgICAgICAgIGlmIChzdHJvbmdUaGlzLT5tX2Z1bGxzY3JlZW5DaGFu
Z2VPYnNlcnZlcikKKyAgICAgICAgICAgICAgICBzdHJvbmdUaGlzLT5tX2Z1bGxzY3JlZW5DaGFu
Z2VPYnNlcnZlci0+ZGlkRXhpdEZ1bGxzY3JlZW4oKTsKICAgICAgICAgfSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9Ci0gICAgCisKICAgICBtX3BsYXllckNvbnRyb2xsZXIgPSBuaWw7Ci0gICAg
Ci0gICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKLSAgICAg
ICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc2V0U2hvd3NQbGF5YmFja0NvbnRyb2xzOk5PXTsK
LSAgICAgICAgaWYgKG1fdmlld0NvbnRyb2xsZXIpCi0gICAgICAgICAgICBbbV9wbGF5ZXJWaWV3
Q29udHJvbGxlciB2aWV3XS5mcmFtZSA9IFttX3BhcmVudFZpZXcgY29udmVydFJlY3Q6ZmluYWxS
ZWN0IHRvVmlldzpuaWxdOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBbbV9wbGF5ZXJWaWV3
Q29udHJvbGxlciB2aWV3XS5mcmFtZSA9IGZpbmFsUmVjdDsKIAotICAgICAgICBpZiAoW21fdmlk
ZW9MYXllckNvbnRhaW5lciB2aWRlb0xheWVyR3Jhdml0eV0gIT0gQVZWaWRlb0xheWVyR3Jhdml0
eVJlc2l6ZUFzcGVjdCkKLSAgICAgICAgICAgIFttX3ZpZGVvTGF5ZXJDb250YWluZXIgc2V0Vmlk
ZW9MYXllckdyYXZpdHk6QVZWaWRlb0xheWVyR3Jhdml0eVJlc2l6ZUFzcGVjdF07Ci0gICAgICAg
IFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBsYXlvdXRJZk5lZWRlZF07Ci0gICAgICAg
IAotICAgICAgICBpZiAobV9tb2RlID09IEhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVl
bk1vZGVPcHRpbWl6ZWQpIHsKLSAgICAgICAgICAgIFttX3dpbmRvdyBzZXRIaWRkZW46Tk9dOwot
ICAgICAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc3RvcE9wdGltaXplZEZ1bGxzY3Jl
ZW5dOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgaWYgKG1fbW9kZSA9PSBIVE1MTWVkaWFFbGVt
ZW50OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQpIHsKLSAgICAgICAgICAgIFttX3BsYXll
clZpZXdDb250cm9sbGVyIGV4aXRGdWxsU2NyZWVuV2l0aENvbXBsZXRpb25IYW5kbGVyOl4oQk9P
TCwgTlNFcnJvciopIHsKLSAgICAgICAgICAgICAgICBtX2V4aXRDb21wbGV0ZWQgPSB0cnVlOwot
ICAgICAgICAgICAgICAgIFttX3ZpZGVvTGF5ZXJDb250YWluZXIgc2V0QmFja2dyb3VuZENvbG9y
OltbZ2V0VUlDb2xvckNsYXNzKCkgY2xlYXJDb2xvcl0gQ0dDb2xvcl1dOwotICAgICAgICAgICAg
ICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBzZXRCYWNrZ3JvdW5kQ29sb3I6W2dl
dFVJQ29sb3JDbGFzcygpIGNsZWFyQ29sb3JdXTsKLSAgICAgICAgICAgICAgICBXZWJUaHJlYWRS
dW4oXnsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVy
KQotICAgICAgICAgICAgICAgICAgICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRp
ZEV4aXRGdWxsc2NyZWVuKCk7Ci0gICAgICAgICAgICAgICAgICAgIHByb3RlY3QgPSBudWxscHRy
OwotICAgICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICB9XTsKLSAgICAgICAgfQorICAg
IGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtzdHJvbmdUaGlzLCBm
aW5hbFJlY3RdIHsKKyAgICAgICAgc3Ryb25nVGhpcy0+ZXhpdEZ1bGxzY3JlZW5JbnRlcm5hbChm
aW5hbFJlY3QpOwogICAgIH0pOwogfQogCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0OjpleGl0RnVsbHNjcmVlbkludGVybmFsKFdlYkNvcmU6OkludFJlY3QgZmluYWxSZWN0
KQoreworICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHNldFNob3dzUGxheWJhY2tDb250cm9s
czpOT107CisgICAgaWYgKG1fdmlld0NvbnRyb2xsZXIpCisgICAgICAgIFttX3BsYXllclZpZXdD
b250cm9sbGVyIHZpZXddLmZyYW1lID0gW21fcGFyZW50VmlldyBjb252ZXJ0UmVjdDpmaW5hbFJl
Y3QgdG9WaWV3Om5pbF07CisgICAgZWxzZQorICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxl
ciB2aWV3XS5mcmFtZSA9IGZpbmFsUmVjdDsKKworICAgIGlmIChbbV92aWRlb0xheWVyQ29udGFp
bmVyIHZpZGVvTGF5ZXJHcmF2aXR5XSAhPSBBVlZpZGVvTGF5ZXJHcmF2aXR5UmVzaXplQXNwZWN0
KQorICAgICAgICBbbV92aWRlb0xheWVyQ29udGFpbmVyIHNldFZpZGVvTGF5ZXJHcmF2aXR5OkFW
VmlkZW9MYXllckdyYXZpdHlSZXNpemVBc3BlY3RdOworICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJv
bGxlciB2aWV3XSBsYXlvdXRJZk5lZWRlZF07CisgICAgCisgICAgaWYgKG1fbW9kZSA9PSBIVE1M
TWVkaWFFbGVtZW50OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlT3B0aW1pemVkKSB7CisgICAgICAgIFtt
X3dpbmRvdyBzZXRIaWRkZW46Tk9dOworICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBz
dG9wT3B0aW1pemVkRnVsbHNjcmVlbl07CisgICAgfSBlbHNlIGlmIChtX21vZGUgPT0gSFRNTE1l
ZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkKSB7CisgICAgICAgIFJlZlB0
cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gc3Ryb25nVGhpcyh0aGlzKTsKKyAg
ICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgZXhpdEZ1bGxTY3JlZW5XaXRoQ29tcGxldGlv
bkhhbmRsZXI6W3N0cm9uZ1RoaXNdIChCT09MLCBOU0Vycm9yKikgeworICAgICAgICAgICAgc3Ry
b25nVGhpcy0+bV9leGl0Q29tcGxldGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIFtzdHJvbmdUaGlz
LT5tX3ZpZGVvTGF5ZXJDb250YWluZXIgc2V0QmFja2dyb3VuZENvbG9yOltbZ2V0VUlDb2xvckNs
YXNzKCkgY2xlYXJDb2xvcl0gQ0dDb2xvcl1dOworICAgICAgICAgICAgW1tzdHJvbmdUaGlzLT5t
X3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddIHNldEJhY2tncm91bmRDb2xvcjpbZ2V0VUlDb2xv
ckNsYXNzKCkgY2xlYXJDb2xvcl1dOworICAgICAgICAgICAgV2ViVGhyZWFkUnVuKFtzdHJvbmdU
aGlzXSB7CisgICAgICAgICAgICAgICAgaWYgKHN0cm9uZ1RoaXMtPm1fZnVsbHNjcmVlbkNoYW5n
ZU9ic2VydmVyKQorICAgICAgICAgICAgICAgICAgICBzdHJvbmdUaGlzLT5tX2Z1bGxzY3JlZW5D
aGFuZ2VPYnNlcnZlci0+ZGlkRXhpdEZ1bGxzY3JlZW4oKTsKKyAgICAgICAgICAgIH0pOworICAg
ICAgICB9XTsKKyAgICB9Cit9CisKIEBpbnRlcmZhY2UgVUlBcHBsaWNhdGlvbiAoKQogLSh2b2lk
KV9zZXRTdGF0dXNCYXJPcmllbnRhdGlvbjooVUlJbnRlcmZhY2VPcmllbnRhdGlvbilvOwogQGVu
ZApAQCAtOTY4LDM5ICs5NTMsNDMgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdDo6ZXhpdEZ1bGxzY3JlZW4oV2ViQ29yZTo6SW50UmVjdCBmaW5hbFJlY3QKIAogdm9pZCBX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6Y2xlYW51cEZ1bGxzY3JlZW4oKQogewot
ICAgIC8vIFJldGFpbiB0aGlzIHRvIGV4dGVuZCBvYmplY3QgbGlmZSB1bnRpbCBhc3luYyBibG9j
ayBjb21wbGV0ZXMuCi0gICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ+IHByb3RlY3QodGhpcyk7CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0PiBzdHJvbmdUaGlzKHRoaXMpOwogICAgIAotICAgIGRpc3BhdGNoX2FzeW5j
KGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57Ci0gICAgICAgIGlmIChtX3dpbmRvdykgewot
ICAgICAgICAgICAgW21fd2luZG93IHNldEhpZGRlbjpZRVNdOwotICAgICAgICAgICAgW21fd2lu
ZG93IHNldFJvb3RWaWV3Q29udHJvbGxlcjpuaWxdOwotICAgICAgICAgICAgaWYgKG1fcGFyZW50
V2luZG93KQotICAgICAgICAgICAgICAgIFtbZ2V0VUlBcHBsaWNhdGlvbkNsYXNzKCkgc2hhcmVk
QXBwbGljYXRpb25dIF9zZXRTdGF0dXNCYXJPcmllbnRhdGlvbjpbbV9wYXJlbnRXaW5kb3cgaW50
ZXJmYWNlT3JpZW50YXRpb25dXTsKLSAgICAgICAgfQotICAgICAgICBbbV9wbGF5ZXJWaWV3Q29u
dHJvbGxlciBzZXREZWxlZ2F0ZTpuaWxdOwotICAgICAgICBbW21fcGxheWVyVmlld0NvbnRyb2xs
ZXIgdmlld10gcmVtb3ZlRnJvbVN1cGVydmlld107Ci0gICAgICAgIGlmIChtX3ZpZXdDb250cm9s
bGVyKQotICAgICAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgcmVtb3ZlRnJvbVBhcmVu
dFZpZXdDb250cm9sbGVyXTsKLSAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc2V0UGxh
eWVyQ29udHJvbGxlcjpuaWxdOwotICAgICAgICBtX3BsYXllclZpZXdDb250cm9sbGVyID0gbmls
OwotICAgICAgICBbbV92aWRlb0xheWVyIHJlbW92ZUZyb21TdXBlcmxheWVyXTsKLSAgICAgICAg
bV92aWRlb0xheWVyID0gbmlsOwotICAgICAgICBbbV92aWRlb0xheWVyQ29udGFpbmVyIHJlbW92
ZUZyb21TdXBlcmxheWVyXTsKLSAgICAgICAgW21fdmlkZW9MYXllckNvbnRhaW5lciBzZXRQbGF5
ZXJWaWV3Q29udHJvbGxlcjpuaWxdOwotICAgICAgICBtX3ZpZGVvTGF5ZXJDb250YWluZXIgPSBu
aWw7Ci0gICAgICAgIFtbbV92aWV3Q29udHJvbGxlciB2aWV3XSByZW1vdmVGcm9tU3VwZXJ2aWV3
XTsKLSAgICAgICAgbV92aWV3Q29udHJvbGxlciA9IG5pbDsKLSAgICAgICAgbV93aW5kb3cgPSBu
aWw7Ci0gICAgICAgIG1fcGFyZW50VmlldyA9IG5pbDsKLSAgICAgICAgbV9wYXJlbnRXaW5kb3cg
PSBuaWw7Ci0gICAgICAgIAotICAgICAgICBXZWJUaHJlYWRSdW4oXnsKLSAgICAgICAgICAgIGlm
IChtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKLSAgICAgICAgICAgICAgICBtX2Z1bGxzY3Jl
ZW5DaGFuZ2VPYnNlcnZlci0+ZGlkQ2xlYW51cEZ1bGxzY3JlZW4oKTsKLSAgICAgICAgICAgIG1f
ZW50ZXJSZXF1ZXN0ZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIHByb3RlY3QgPSBudWxscHRyOwot
ICAgICAgICB9KTsKKyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgp
LCBbc3Ryb25nVGhpc10geworICAgICAgICBzdHJvbmdUaGlzLT5jbGVhbnVwRnVsbHNjcmVlbklu
dGVybmFsKCk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQ6OmNsZWFudXBGdWxsc2NyZWVuSW50ZXJuYWwoKQoreworICAgIGlmIChtX3dpbmRvdykg
eworICAgICAgICBbbV93aW5kb3cgc2V0SGlkZGVuOllFU107CisgICAgICAgIFttX3dpbmRvdyBz
ZXRSb290Vmlld0NvbnRyb2xsZXI6bmlsXTsKKyAgICAgICAgaWYgKG1fcGFyZW50V2luZG93KQor
ICAgICAgICAgICAgW1tnZXRVSUFwcGxpY2F0aW9uQ2xhc3MoKSBzaGFyZWRBcHBsaWNhdGlvbl0g
X3NldFN0YXR1c0Jhck9yaWVudGF0aW9uOlttX3BhcmVudFdpbmRvdyBpbnRlcmZhY2VPcmllbnRh
dGlvbl1dOworICAgIH0KKyAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzZXREZWxlZ2F0ZTpu
aWxdOworICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSByZW1vdmVGcm9tU3VwZXJ2
aWV3XTsKKyAgICBpZiAobV92aWV3Q29udHJvbGxlcikKKyAgICAgICAgW21fcGxheWVyVmlld0Nv
bnRyb2xsZXIgcmVtb3ZlRnJvbVBhcmVudFZpZXdDb250cm9sbGVyXTsKKyAgICBbbV9wbGF5ZXJW
aWV3Q29udHJvbGxlciBzZXRQbGF5ZXJDb250cm9sbGVyOm5pbF07CisgICAgbV9wbGF5ZXJWaWV3
Q29udHJvbGxlciA9IG5pbDsKKyAgICBbbV92aWRlb0xheWVyIHJlbW92ZUZyb21TdXBlcmxheWVy
XTsKKyAgICBtX3ZpZGVvTGF5ZXIgPSBuaWw7CisgICAgW21fdmlkZW9MYXllckNvbnRhaW5lciBy
ZW1vdmVGcm9tU3VwZXJsYXllcl07CisgICAgW21fdmlkZW9MYXllckNvbnRhaW5lciBzZXRQbGF5
ZXJWaWV3Q29udHJvbGxlcjpuaWxdOworICAgIG1fdmlkZW9MYXllckNvbnRhaW5lciA9IG5pbDsK
KyAgICBbW21fdmlld0NvbnRyb2xsZXIgdmlld10gcmVtb3ZlRnJvbVN1cGVydmlld107CisgICAg
bV92aWV3Q29udHJvbGxlciA9IG5pbDsKKyAgICBtX3dpbmRvdyA9IG5pbDsKKyAgICBtX3BhcmVu
dFZpZXcgPSBuaWw7CisgICAgbV9wYXJlbnRXaW5kb3cgPSBuaWw7CisgICAgCisgICAgUmVmUHRy
PFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBzdHJvbmdUaGlzKHRoaXMpOworICAg
IFdlYlRocmVhZFJ1bihbc3Ryb25nVGhpc10geworICAgICAgICBpZiAoc3Ryb25nVGhpcy0+bV9m
dWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCisgICAgICAgICAgICBzdHJvbmdUaGlzLT5tX2Z1bGxz
Y3JlZW5DaGFuZ2VPYnNlcnZlci0+ZGlkQ2xlYW51cEZ1bGxzY3JlZW4oKTsKKyAgICAgICAgc3Ry
b25nVGhpcy0+bV9lbnRlclJlcXVlc3RlZCA9IGZhbHNlOwogICAgIH0pOwogfQogCkBAIC0xMDM5
LDEzICsxMDI4LDEwIEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnJl
cXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4oKQogICAgIGlmIChtX21vZGUgPT0gSFRNTE1lZGlh
RWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZU9wdGltaXplZCkKICAgICAgICAgcmV0dXJuOwog
ICAgIAotICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
PiBwcm90ZWN0KHRoaXMpOwotICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1
ZXVlKCksIF57Ci0gICAgICAgIFttX3dpbmRvdyBzZXRIaWRkZW46WUVTXTsKLSAgICAgICAgW21f
cGxheWVyVmlld0NvbnRyb2xsZXIgZXhpdEZ1bGxTY3JlZW5BbmltYXRlZDpOTyBjb21wbGV0aW9u
SGFuZGxlcjpeKEJPT0wsIE5TRXJyb3IqKSB7Ci0gICAgICAgICAgICBXZWJUaHJlYWRSdW4oXnsK
LSAgICAgICAgICAgICAgICBwcm90ZWN0ID0gbnVsbHB0cjsKLSAgICAgICAgICAgIH0pOworICAg
IFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gc3Ryb25nVGhpcyh0aGlz
KTsKKyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbc3Ryb25n
VGhpc10geworICAgICAgICBbc3Ryb25nVGhpcy0+bV93aW5kb3cgc2V0SGlkZGVuOllFU107Cisg
ICAgICAgIFtzdHJvbmdUaGlzLT5tX3BsYXllclZpZXdDb250cm9sbGVyIGV4aXRGdWxsU2NyZWVu
QW5pbWF0ZWQ6Tk8gY29tcGxldGlvbkhhbmRsZXI6W3N0cm9uZ1RoaXNdIChCT09MLCBOU0Vycm9y
KikgewogICAgICAgICB9XTsKICAgICB9KTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>243149</attachid>
            <date>2014-12-11 14:53:29 -0800</date>
            <delta_ts>2014-12-12 10:58:45 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-139550-20141211145413.patch</filename>
            <type>text/plain</type>
            <size>33658</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc3MTgzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTIzOTVkMWVkMjA5Njc5
ZWM2Yjk4OGFkYmM5OGZkMjJlMjJiMjU3OC4uZTM0NWJkMzRmZmJkMTEwZTliMTU3MWNlY2JiZjQ1
Y2U5MThkZmNlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDE0LTEyLTExICBKZXIg
Tm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgorCisgICAgICAgIFtpT1NdIENyYXNoIGluIFdl
YktpdDo6V2ViUGFnZVByb3h5OjpkaXNwYXRjaFZpZXdTdGF0ZUNoYW5nZSgpIHRhcHBpbmcgYSBs
aW5rIGZyb20gYW5vdGhlciBhcHAgd2hpbGUgcGxheWluZyBhIHZpZGVvCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzk1NTAKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgZXhpc3RpbmcgImRpc3BhdGNo
IHRvIFdlYlRocmVhZCwgdGhlbiByZWxlYXNlIiBtb2RlbCBpcyBpbnN1ZmZpY2llbnQgYW5kIHN0
aWxsCisgICAgICAgIGNhbiByZXN1bHQgaW4gUmVmUHRyIHJhY2UgY29uZGl0aW9ucyBiZXR3ZWVu
IHRoZSBtYWluIHRocmVhZCBhbmQgdGhlIHdlYiB0aHJlYWQuCisgICAgICAgIE1ha2UgV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQgYSB0aHJlYWQtc2FmZSByZWYtY291bnRlZCBjbGFz
cywgd2hpY2gKKyAgICAgICAgZWxpbWluYXRlcyB0aGUgbmVjZXNzaXR5IG9mIGRpc3B0YWNoaW5n
IGJhY2sgdG8gdGhlIHdlYiB0aHJlYWQgYmVmb3JlIHJlbGVhc2luZy4KKworICAgICAgICAqIHBs
YXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oOgorICAgICAgICAq
IHBsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbToKKyAgICAg
ICAgKFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXREdXJhdGlvbik6IFVzZSBh
IHN0cm9uZ1RoaXMgbW9kZWwuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdDo6c2V0Q3VycmVudFRpbWUpOiBEaXR0by4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0OjpzZXRSYXRlKTogRGl0dG8uCisgICAgICAgIChXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0VmlkZW9EaW1lbnNpb25zKTogRGl0dG8uCisgICAgICAg
IChXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0U2Vla2FibGVSYW5nZXMpOiBE
aXR0by4KKyAgICAgICAgKG1lZGlhU2VsZWN0aW9uT3B0aW9ucyk6IFJldHVybiBhIFJldGFpblB0
ciBvYmplY3QuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0
QXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnMpOiBVc2UgYSBzdHJvbmdUaGlzIG1vZGVsLgorICAg
ICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldExlZ2libGVNZWRpYVNl
bGVjdGlvbk9wdGlvbnMpOiBEaXR0by4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0OjpzZXRFeHRlcm5hbFBsYXliYWNrKTogRGl0dG8uCisgICAgICAgIChXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0dXBGdWxsc2NyZWVuKTogRGl0dG8uCisgICAg
ICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZW50ZXJGdWxsc2NyZWVuKTog
RGl0dG8uCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZXhpdEZ1
bGxzY3JlZW4pOiBEaXR0by4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0OjpjbGVhbnVwRnVsbHNjcmVlbik6IERpdHRvLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQ6OnNldHVwRnVsbHNjcmVlbkludGVybmFsKTogQWRkZWQgdXRpbGl0
eQorICAgICAgICAgICAgZnVuY3Rpb24uIExldHMgdXMgdXNlIHRoZSBpbXBsaWVkIHRoaXMgcG9p
bnRlciByYXRoZXIgdGhhbiBhbiBleHBsaWNpdAorICAgICAgICAgICAgc3Ryb25nVGhpcy4KKyAg
ICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjplbnRlckZ1bGxzY3JlZW5P
cHRpbWl6ZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0OjplbnRlckZ1bGxzY3JlZW5TdGFuZGFyZCk6IERpdHRvLgorICAgICAgICAoV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmV4aXRGdWxsc2NyZWVuSW50ZXJuYWwpOiBEaXR0by4K
KyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpjbGVhbnVwRnVsbHNj
cmVlbkludGVybmFsKTogRGl0dG8uCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdDo6cmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbik6IFVzZSBhIHN0cm9uZ1RoaXMg
bW9kZWwuCisKIDIwMTQtMTItMTEgIFRpbW90aHkgSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBw
bGUuY29tPgogCiAgICAgICAgIEZpeCB0aGUgYnVpbGQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dC5oCmluZGV4IDRhOThkZWJjYjQzN2VmNThiN2ZhOGJjNmUxZTI3ZTRjY2MxNDM1YmYuLjNmNzFi
YTI1YTVlZmIxNzFjYmMyMTdmMDRhOTRiZThmOGVmMjQxZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdC5oCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9XZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2UuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8
d3RmL1JldGFpblB0ci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgog
CiBPQkpDX0NMQVNTIFdlYkFWUGxheWVyQ29udHJvbGxlcjsKIE9CSkNfQ0xBU1MgQVZQbGF5ZXJW
aWV3Q29udHJvbGxlcjsKQEAgLTY0LDcgKzY1LDcgQEAgcHVibGljOgogCiBjbGFzcyBXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdAogICAgIDogcHVibGljIFdlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZQotICAgICwgcHVibGljIFJlZkNvdW50ZWQ8V2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQ+IHsKKyAgICAsIHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gewogCiBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBP
UlQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQoKTsKQEAgLTk0LDcgKzk1LDEyIEBA
IHB1YmxpYzoKICAgICBib29sIG1heUF1dG9tYXRpY2FsbHlTaG93VmlkZW9PcHRpbWl6ZWQoKTsK
IAogcHJvdGVjdGVkOgotICAgICAgICAKKyAgICB2b2lkIHNldHVwRnVsbHNjcmVlbkludGVybmFs
KFBsYXRmb3JtTGF5ZXImLCBJbnRSZWN0IGluaXRpYWxSZWN0LCBVSVZpZXcgKiwgSFRNTE1lZGlh
RWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9vbCBhbGxvd09wdGltaXplZEZ1bGxzY3Jl
ZW4pOworICAgIHZvaWQgZW50ZXJGdWxsc2NyZWVuT3B0aW1pemVkKCk7CisgICAgdm9pZCBlbnRl
ckZ1bGxzY3JlZW5TdGFuZGFyZCgpOworICAgIHZvaWQgZXhpdEZ1bGxzY3JlZW5JbnRlcm5hbChJ
bnRSZWN0IGZpbmFsUmVjdCk7CisgICAgdm9pZCBjbGVhbnVwRnVsbHNjcmVlbkludGVybmFsKCk7
CisKICAgICBSZXRhaW5QdHI8V2ViQVZQbGF5ZXJDb250cm9sbGVyPiBtX3BsYXllckNvbnRyb2xs
ZXI7CiAgICAgUmV0YWluUHRyPEFWUGxheWVyVmlld0NvbnRyb2xsZXI+IG1fcGxheWVyVmlld0Nv
bnRyb2xsZXI7CiAgICAgUmV0YWluUHRyPENBTGF5ZXI+IG1fdmlkZW9MYXllcjsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdC5tbQppbmRleCA3NDU4ZTI2N2UxZjc5OWJjYjA3NjkwYjJlNWRkYmFi
YjE5NmQzNTVlLi4zYzA1OWY0MjU2MjVlZDljN2JiOWEwOGYxNTllOTU0OWZjNzk3ZWFmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tCkBAIC02NDksMTEgKzY0OSwxMSBAQCB2b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXRXZWJWaWRlb0Z1bGxzY3JlZW5DaGFu
Z2VPYnNlcnZlcihXZWJWaQogCiB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
OjpzZXREdXJhdGlvbihkb3VibGUgZHVyYXRpb24pCiB7Ci0gICAgV2ViQVZQbGF5ZXJDb250cm9s
bGVyKiBwbGF5ZXJDb250cm9sbGVyID0gdGhpcy0+cGxheWVyQ29udHJvbGxlcigpOworICAgIFJl
ZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gc3Ryb25nVGhpcyh0aGlzKTsK
ICAgICAKLSAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dD4gcHJvdGVjdCh0aGlzKTsKLSAgICAKLSAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRf
bWFpbl9xdWV1ZSgpLCBeeworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1
ZXVlKCksIFtzdHJvbmdUaGlzLCBkdXJhdGlvbl0geworICAgICAgICBXZWJBVlBsYXllckNvbnRy
b2xsZXIqIHBsYXllckNvbnRyb2xsZXIgPSBzdHJvbmdUaGlzLT5wbGF5ZXJDb250cm9sbGVyKCk7
CisKICAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMjcwMTcgdXNlIGNvcnJlY3QgdmFsdWVzIGluc3RlYWQgb2YgZHVyYXRpb24gZm9yIGFs
bCB0aGVzZQogICAgICAgICBwbGF5ZXJDb250cm9sbGVyLmNvbnRlbnREdXJhdGlvbiA9IGR1cmF0
aW9uOwogICAgICAgICBwbGF5ZXJDb250cm9sbGVyLm1heFRpbWUgPSBkdXJhdGlvbjsKQEAgLTY2
OCw1OSArNjY4LDQzIEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNl
dER1cmF0aW9uKGRvdWJsZSBkdXJhdGlvbikKICAgICAgICAgcGxheWVyQ29udHJvbGxlci5jYW5T
ZWVrID0gWUVTOwogICAgICAgICBwbGF5ZXJDb250cm9sbGVyLm1pblRpbWUgPSAwOwogICAgICAg
ICBwbGF5ZXJDb250cm9sbGVyLnN0YXR1cyA9IEFWUGxheWVyQ29udHJvbGxlclN0YXR1c1JlYWR5
VG9QbGF5OwotICAgICAgICAKLSAgICAgICAgV2ViVGhyZWFkUnVuKF57Ci0gICAgICAgICAgICBw
cm90ZWN0ID0gbnVsbHB0cjsKLSAgICAgICAgfSk7CiAgICAgfSk7CiB9CiAKIHZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldEN1cnJlbnRUaW1lKGRvdWJsZSBjdXJyZW50
VGltZSwgZG91YmxlIGFuY2hvclRpbWUpCiB7Ci0gICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHByb3RlY3QodGhpcyk7CisgICAgUmVmUHRyPFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBzdHJvbmdUaGlzKHRoaXMpOwogICAgIAotICAg
IGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57Ci0gICAgICAgIE5T
VGltZUludGVydmFsIGFuY2hvclRpbWVTdGFtcCA9ICFbcGxheWVyQ29udHJvbGxlcigpIHJhdGVd
ID8gTkFOIDogYW5jaG9yVGltZTsKKyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFp
bl9xdWV1ZSgpLCBbc3Ryb25nVGhpcywgY3VycmVudFRpbWUsIGFuY2hvclRpbWVdIHsKKyAgICAg
ICAgTlNUaW1lSW50ZXJ2YWwgYW5jaG9yVGltZVN0YW1wID0gIVtzdHJvbmdUaGlzLT5wbGF5ZXJD
b250cm9sbGVyKCkgcmF0ZV0gPyBOQU4gOiBhbmNob3JUaW1lOwogICAgICAgICBBVlZhbHVlVGlt
aW5nICp0aW1pbmcgPSBbZ2V0QVZWYWx1ZVRpbWluZ0NsYXNzKCkgdmFsdWVUaW1pbmdXaXRoQW5j
aG9yVmFsdWU6Y3VycmVudFRpbWUKICAgICAgICAgICAgIGFuY2hvclRpbWVTdGFtcDphbmNob3JU
aW1lU3RhbXAgcmF0ZTowXTsKLSAgICAgICAgcGxheWVyQ29udHJvbGxlcigpLnRpbWluZyA9IHRp
bWluZzsKLSAgICAgICAgCi0gICAgICAgIFdlYlRocmVhZFJ1biheewotICAgICAgICAgICAgcHJv
dGVjdCA9IG51bGxwdHI7Ci0gICAgICAgIH0pOworICAgICAgICBzdHJvbmdUaGlzLT5wbGF5ZXJD
b250cm9sbGVyKCkudGltaW5nID0gdGltaW5nOwogICAgIH0pOwogfQogCiB2b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXRSYXRlKGJvb2wgaXNQbGF5aW5nLCBmbG9hdCBw
bGF5YmFja1JhdGUpCiB7Ci0gICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQ+IHByb3RlY3QodGhpcyk7CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0PiBzdHJvbmdUaGlzKHRoaXMpOwogICAgIAotICAgIGRpc3BhdGNoX2Fz
eW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57Ci0gICAgICAgIHBsYXllckNvbnRyb2xs
ZXIoKS5yYXRlID0gaXNQbGF5aW5nID8gcGxheWJhY2tSYXRlIDogMC47Ci0gICAgICAgIAotICAg
ICAgICBXZWJUaHJlYWRSdW4oXnsKLSAgICAgICAgICAgIHByb3RlY3QgPSBudWxscHRyOwotICAg
ICAgICB9KTsKKyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBb
c3Ryb25nVGhpcywgaXNQbGF5aW5nLCBwbGF5YmFja1JhdGVdIHsKKyAgICAgICAgc3Ryb25nVGhp
cy0+cGxheWVyQ29udHJvbGxlcigpLnJhdGUgPSBpc1BsYXlpbmcgPyBwbGF5YmFja1JhdGUgOiAw
LjsKICAgICB9KTsKIH0KIAogdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6
c2V0VmlkZW9EaW1lbnNpb25zKGJvb2wgaGFzVmlkZW8sIGZsb2F0IHdpZHRoLCBmbG9hdCBoZWln
aHQpCiB7Ci0gICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQ+IHByb3RlY3QodGhpcyk7CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0PiBzdHJvbmdUaGlzKHRoaXMpOwogICAgIAotICAgIGRpc3BhdGNoX2FzeW5jKGRpc3Bh
dGNoX2dldF9tYWluX3F1ZXVlKCksIF57Ci0gICAgICAgIHBsYXllckNvbnRyb2xsZXIoKS5oYXNF
bmFibGVkVmlkZW8gPSBoYXNWaWRlbzsKLSAgICAgICAgcGxheWVyQ29udHJvbGxlcigpLmNvbnRl
bnREaW1lbnNpb25zID0gQ0dTaXplTWFrZSh3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgCi0gICAg
ICAgIFdlYlRocmVhZFJ1biheewotICAgICAgICAgICAgcHJvdGVjdCA9IG51bGxwdHI7Ci0gICAg
ICAgIH0pOworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtz
dHJvbmdUaGlzLCBoYXNWaWRlbywgd2lkdGgsIGhlaWdodF0geworICAgICAgICBzdHJvbmdUaGlz
LT5wbGF5ZXJDb250cm9sbGVyKCkuaGFzRW5hYmxlZFZpZGVvID0gaGFzVmlkZW87CisgICAgICAg
IHN0cm9uZ1RoaXMtPnBsYXllckNvbnRyb2xsZXIoKS5jb250ZW50RGltZW5zaW9ucyA9IENHU2l6
ZU1ha2Uod2lkdGgsIGhlaWdodCk7CiAgICAgfSk7CiB9CiAKIHZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQ6OnNldFNlZWthYmxlUmFuZ2VzKGNvbnN0IFRpbWVSYW5nZXMmIHRp
bWVSYW5nZXMpCiB7Ci0gICAgTlNNdXRhYmxlQXJyYXkqIHNlZWthYmxlUmFuZ2VzID0gW05TTXV0
YWJsZUFycmF5IGFycmF5XTsKKyAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IHNlZWthYmxl
UmFuZ2VzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7CiAgICAgRXhj
ZXB0aW9uQ29kZSBleGNlcHRpb25Db2RlOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHRpbWVSYW5nZXMubGVuZ3RoKCk7IGkrKykgewpAQCAtNzMxLDE0ICs3MTUsMTAgQEAgdm9pZCBX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0U2Vla2FibGVSYW5nZXMoY29uc3Qg
VGltZVJhbmdlcyYgdGltZVIKICAgICAgICAgW3NlZWthYmxlUmFuZ2VzIGFkZE9iamVjdDpbTlNW
YWx1ZSB2YWx1ZVdpdGhDTVRpbWVSYW5nZTpyYW5nZV1dOwogICAgIH0KICAgICAKLSAgICBfX2Js
b2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gcHJvdGVjdCh0aGlz
KTsKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHN0cm9uZ1Ro
aXModGhpcyk7CiAgICAgCi0gICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVl
dWUoKSwgXnsKLSAgICAgICAgcGxheWVyQ29udHJvbGxlcigpLnNlZWthYmxlVGltZVJhbmdlcyA9
IHNlZWthYmxlUmFuZ2VzOwotICAgICAgICAKLSAgICAgICAgV2ViVGhyZWFkUnVuKF57Ci0gICAg
ICAgICAgICBwcm90ZWN0ID0gbnVsbHB0cjsKLSAgICAgICAgfSk7CisgICAgZGlzcGF0Y2hfYXN5
bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3N0cm9uZ1RoaXMsIHNlZWthYmxlUmFuZ2Vz
XSB7CisgICAgICAgIHN0cm9uZ1RoaXMtPnBsYXllckNvbnRyb2xsZXIoKS5zZWVrYWJsZVRpbWVS
YW5nZXMgPSBzZWVrYWJsZVJhbmdlcy5nZXQoKTsKICAgICB9KTsKIH0KIApAQCAtNzQ3LDkgKzcy
Nyw5IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldENhblBsYXlG
YXN0UmV2ZXJzZShib29sIGNhblBsYXlGYXN0UmV2CiAgICAgcGxheWVyQ29udHJvbGxlcigpLmNh
blNjYW5CYWNrd2FyZCA9IGNhblBsYXlGYXN0UmV2ZXJzZTsKIH0KIAotc3RhdGljIE5TTXV0YWJs
ZUFycmF5ICptZWRpYVNlbGVjdGlvbk9wdGlvbnMoY29uc3QgVmVjdG9yPFN0cmluZz4mIG9wdGlv
bnMpCitzdGF0aWMgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBtZWRpYVNlbGVjdGlvbk9wdGlv
bnMoY29uc3QgVmVjdG9yPFN0cmluZz4mIG9wdGlvbnMpCiB7Ci0gICAgTlNNdXRhYmxlQXJyYXkg
KndlYk9wdGlvbnMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6b3B0aW9ucy5z
aXplKCldOworICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gd2ViT3B0aW9ucyA9IGFkb3B0
TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpvcHRpb25zLnNpemUo
KV0pOwogICAgIGZvciAoYXV0byYgbmFtZSA6IG9wdGlvbnMpIHsKICAgICAgICAgUmV0YWluUHRy
PFdlYkFWTWVkaWFTZWxlY3Rpb25PcHRpb24+IHdlYk9wdGlvbiA9IGFkb3B0TlMoW1tXZWJBVk1l
ZGlhU2VsZWN0aW9uT3B0aW9uIGFsbG9jXSBpbml0XSk7CiAgICAgICAgIFt3ZWJPcHRpb24gc2V0
TG9jYWxpemVkRGlzcGxheU5hbWU6bmFtZV07CkBAIC03NjAsMzMgKzc0MCwyNSBAQCBzdGF0aWMg
TlNNdXRhYmxlQXJyYXkgKm1lZGlhU2VsZWN0aW9uT3B0aW9ucyhjb25zdCBWZWN0b3I8U3RyaW5n
PiYgb3B0aW9ucykKIAogdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0
QXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnMoY29uc3QgVmVjdG9yPFN0cmluZz4mIG9wdGlvbnMs
IHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCiB7Ci0gICAgTlNNdXRhYmxlQXJyYXkgKndlYk9wdGlv
bnMgPSBtZWRpYVNlbGVjdGlvbk9wdGlvbnMob3B0aW9ucyk7Ci0gICAgX19ibG9jayBSZWZQdHI8
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHByb3RlY3QodGhpcyk7CisgICAgUmV0
YWluUHRyPE5TTXV0YWJsZUFycmF5PiB3ZWJPcHRpb25zID0gbWVkaWFTZWxlY3Rpb25PcHRpb25z
KG9wdGlvbnMpOworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4g
c3Ryb25nVGhpcyh0aGlzKTsKICAgICAKLSAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRf
bWFpbl9xdWV1ZSgpLCBeewotICAgICAgICBwbGF5ZXJDb250cm9sbGVyKCkuYXVkaW9NZWRpYVNl
bGVjdGlvbk9wdGlvbnMgPSB3ZWJPcHRpb25zOwotICAgICAgICBpZiAoc2VsZWN0ZWRJbmRleCA8
IHdlYk9wdGlvbnMuY291bnQpCi0gICAgICAgICAgICBwbGF5ZXJDb250cm9sbGVyKCkuY3VycmVu
dEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb24gPSB3ZWJPcHRpb25zWyhzaXplX3Qpc2VsZWN0ZWRJ
bmRleF07Ci0gICAgICAgIAotICAgICAgICBXZWJUaHJlYWRSdW4oXnsKLSAgICAgICAgICAgIHBy
b3RlY3QgPSBudWxscHRyOwotICAgICAgICB9KTsKKyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRj
aF9nZXRfbWFpbl9xdWV1ZSgpLCBbd2ViT3B0aW9ucywgc3Ryb25nVGhpcywgc2VsZWN0ZWRJbmRl
eF0geworICAgICAgICBzdHJvbmdUaGlzLT5wbGF5ZXJDb250cm9sbGVyKCkuYXVkaW9NZWRpYVNl
bGVjdGlvbk9wdGlvbnMgPSB3ZWJPcHRpb25zLmdldCgpOworICAgICAgICBpZiAoc2VsZWN0ZWRJ
bmRleCA8IFt3ZWJPcHRpb25zIGNvdW50XSkKKyAgICAgICAgICAgIHN0cm9uZ1RoaXMtPnBsYXll
ckNvbnRyb2xsZXIoKS5jdXJyZW50QXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbiA9IFt3ZWJPcHRp
b25zIG9iamVjdEF0SW5kZXg6c2VsZWN0ZWRJbmRleF07CiAgICAgfSk7CiB9CiAKIHZvaWQgV2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldExlZ2libGVNZWRpYVNlbGVjdGlvbk9w
dGlvbnMoY29uc3QgVmVjdG9yPFN0cmluZz4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5k
ZXgpCiB7Ci0gICAgTlNNdXRhYmxlQXJyYXkgKndlYk9wdGlvbnMgPSBtZWRpYVNlbGVjdGlvbk9w
dGlvbnMob3B0aW9ucyk7Ci0gICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQ+IHByb3RlY3QodGhpcyk7Ci0gICAgCi0gICAgZGlzcGF0Y2hfYXN5bmMoZGlz
cGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKLSAgICAgICAgcGxheWVyQ29udHJvbGxlcigpLmxl
Z2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMgPSB3ZWJPcHRpb25zOwotICAgICAgICBpZiAoc2Vs
ZWN0ZWRJbmRleCA8IHdlYk9wdGlvbnMuY291bnQpCi0gICAgICAgICAgICBwbGF5ZXJDb250cm9s
bGVyKCkuY3VycmVudExlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbiA9IHdlYk9wdGlvbnNbKHNp
emVfdClzZWxlY3RlZEluZGV4XTsKLSAgICAgICAgCi0gICAgICAgIFdlYlRocmVhZFJ1biheewot
ICAgICAgICAgICAgcHJvdGVjdCA9IG51bGxwdHI7Ci0gICAgICAgIH0pOworICAgIFJldGFpblB0
cjxOU011dGFibGVBcnJheT4gd2ViT3B0aW9ucyA9IG1lZGlhU2VsZWN0aW9uT3B0aW9ucyhvcHRp
b25zKTsKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHN0cm9u
Z1RoaXModGhpcyk7CisKKyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1
ZSgpLCBbd2ViT3B0aW9ucywgc3Ryb25nVGhpcywgc2VsZWN0ZWRJbmRleF0geworICAgICAgICBz
dHJvbmdUaGlzLT5wbGF5ZXJDb250cm9sbGVyKCkubGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9u
cyA9IHdlYk9wdGlvbnMuZ2V0KCk7CisgICAgICAgIGlmIChzZWxlY3RlZEluZGV4IDwgW3dlYk9w
dGlvbnMgY291bnRdKQorICAgICAgICAgICAgc3Ryb25nVGhpcy0+cGxheWVyQ29udHJvbGxlcigp
LmN1cnJlbnRMZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb24gPSBbd2ViT3B0aW9ucyBvYmplY3RB
dEluZGV4OnNlbGVjdGVkSW5kZXhdOwogICAgIH0pOwogfQogCkBAIC03OTgsMTk5ICs3NzAsMjEy
IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldEV4dGVybmFsUGxh
eWJhY2soYm9vbCBlbmFibGVkLCBFeHRlcm5hCiAgICAgZWxzZSBpZiAodGFyZ2V0VHlwZSA9PSBU
YXJnZXRUeXBlVFZPdXQpCiAgICAgICAgIGV4dGVybmFsUGxheWJhY2tUeXBlID0gQVZQbGF5ZXJD
b250cm9sbGVyRXh0ZXJuYWxQbGF5YmFja1R5cGVUVk91dDsKIAotICAgIF9fYmxvY2sgUmVmUHRy
PFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBwcm90ZWN0KHRoaXMpOwotICAgIAot
ICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57Ci0gICAgICAg
IHBsYXllckNvbnRyb2xsZXIoKS5leHRlcm5hbFBsYXliYWNrQWlyUGxheURldmljZUxvY2FsaXpl
ZE5hbWUgPSBsb2NhbGl6ZWREZXZpY2VOYW1lOwotICAgICAgICBwbGF5ZXJDb250cm9sbGVyKCku
ZXh0ZXJuYWxQbGF5YmFja1R5cGUgPSBleHRlcm5hbFBsYXliYWNrVHlwZTsKLSAgICAgICAgcGxh
eWVyQ29udHJvbGxlcigpLmV4dGVybmFsUGxheWJhY2tBY3RpdmUgPSBlbmFibGVkOwotICAgICAg
ICBbbV92aWRlb0xheWVyQ29udGFpbmVyLmdldCgpIHNldEhpZGRlbjplbmFibGVkXTsKLSAgICAg
ICAgCi0gICAgICAgIFdlYlRocmVhZFJ1biheewotICAgICAgICAgICAgcHJvdGVjdCA9IG51bGxw
dHI7Ci0gICAgICAgIH0pOworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdD4gc3Ryb25nVGhpcyh0aGlzKTsKKworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dl
dF9tYWluX3F1ZXVlKCksIFtzdHJvbmdUaGlzLCBlbmFibGVkLCBsb2NhbGl6ZWREZXZpY2VOYW1l
LCBleHRlcm5hbFBsYXliYWNrVHlwZV0geworICAgICAgICBXZWJBVlBsYXllckNvbnRyb2xsZXIq
IHBsYXllckNvbnRyb2xsZXIgPSBzdHJvbmdUaGlzLT5wbGF5ZXJDb250cm9sbGVyKCk7CisgICAg
ICAgIHBsYXllckNvbnRyb2xsZXIuZXh0ZXJuYWxQbGF5YmFja0FpclBsYXlEZXZpY2VMb2NhbGl6
ZWROYW1lID0gbG9jYWxpemVkRGV2aWNlTmFtZTsKKyAgICAgICAgcGxheWVyQ29udHJvbGxlci5l
eHRlcm5hbFBsYXliYWNrVHlwZSA9IGV4dGVybmFsUGxheWJhY2tUeXBlOworICAgICAgICBwbGF5
ZXJDb250cm9sbGVyLmV4dGVybmFsUGxheWJhY2tBY3RpdmUgPSBlbmFibGVkOworICAgICAgICBb
c3Ryb25nVGhpcy0+bV92aWRlb0xheWVyQ29udGFpbmVyLmdldCgpIHNldEhpZGRlbjplbmFibGVk
XTsKICAgICB9KTsKIH0KIAogdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6
c2V0dXBGdWxsc2NyZWVuKFBsYXRmb3JtTGF5ZXImIHZpZGVvTGF5ZXIsIFdlYkNvcmU6OkludFJl
Y3QgaW5pdGlhbFJlY3QsIFVJVmlldyogcGFyZW50VmlldywgSFRNTE1lZGlhRWxlbWVudDo6Vmlk
ZW9GdWxsc2NyZWVuTW9kZSBtb2RlLCBib29sIGFsbG93T3B0aW1pemVkRnVsbHNjcmVlbikKIHsK
LSAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gcHJv
dGVjdCh0aGlzKTsKLSAgICAKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQ+IHN0cm9uZ1RoaXModGhpcyk7CisKICAgICBBU1NFUlQobW9kZSAhPSBIVE1MTWVkaWFF
bGVtZW50OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSk7CiAgICAgbV92aWRlb0xheWVyID0gJnZp
ZGVvTGF5ZXI7Ci0gICAgCisKICAgICBtX21vZGUgPSBtb2RlOwotICAgIAotICAgIGRpc3BhdGNo
X2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57Ci0KLSAgICAgICAgW0NBVHJhbnNh
Y3Rpb24gYmVnaW5dOwotICAgICAgICBbQ0FUcmFuc2FjdGlvbiBzZXREaXNhYmxlQWN0aW9uczpZ
RVNdOwotICAgICAgICBtX3BhcmVudFZpZXcgPSBwYXJlbnRWaWV3OwotICAgICAgICBtX3BhcmVu
dFdpbmRvdyA9IHBhcmVudFZpZXcud2luZG93OwotCi0gICAgICAgIGlmICghYXBwbGljYXRpb25J
c0FkU2hlZXQoKSkgewotICAgICAgICAgICAgbV93aW5kb3cgPSBhZG9wdE5TKFthbGxvY1VJV2lu
ZG93SW5zdGFuY2UoKSBpbml0V2l0aEZyYW1lOltbZ2V0VUlTY3JlZW5DbGFzcygpIG1haW5TY3Jl
ZW5dIGJvdW5kc11dKTsKLSAgICAgICAgICAgIFttX3dpbmRvdyBzZXRCYWNrZ3JvdW5kQ29sb3I6
W2dldFVJQ29sb3JDbGFzcygpIGNsZWFyQ29sb3JdXTsKLSAgICAgICAgICAgIG1fdmlld0NvbnRy
b2xsZXIgPSBhZG9wdE5TKFthbGxvY1VJVmlld0NvbnRyb2xsZXJJbnN0YW5jZSgpIGluaXRdKTsK
LSAgICAgICAgICAgIFtbbV92aWV3Q29udHJvbGxlciB2aWV3XSBzZXRGcmFtZTpbbV93aW5kb3cg
Ym91bmRzXV07Ci0gICAgICAgICAgICBbbV93aW5kb3cgc2V0Um9vdFZpZXdDb250cm9sbGVyOm1f
dmlld0NvbnRyb2xsZXIuZ2V0KCldOwotICAgICAgICAgICAgW21fd2luZG93IG1ha2VLZXlBbmRW
aXNpYmxlXTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgW21fdmlkZW9MYXllciByZW1v
dmVGcm9tU3VwZXJsYXllcl07Ci0gICAgICAgIAotICAgICAgICBtX3ZpZGVvTGF5ZXJDb250YWlu
ZXIgPSBbV2ViQVZWaWRlb0xheWVyIHZpZGVvTGF5ZXJdOwotICAgICAgICBbbV92aWRlb0xheWVy
Q29udGFpbmVyIHNldEhpZGRlbjpwbGF5ZXJDb250cm9sbGVyKCkuZXh0ZXJuYWxQbGF5YmFja0Fj
dGl2ZV07Ci0gICAgICAgIFttX3ZpZGVvTGF5ZXJDb250YWluZXIgc2V0VmlkZW9TdWJsYXllcjpt
X3ZpZGVvTGF5ZXIuZ2V0KCldOwotICAgICAgICAKLSAgICAgICAgQ0dTaXplIHZpZGVvU2l6ZSA9
IHBsYXllckNvbnRyb2xsZXIoKS5jb250ZW50RGltZW5zaW9uczsKLSAgICAgICAgQ0dSZWN0IHZp
ZGVvUmVjdCA9IENHUmVjdE1ha2UoMCwgMCwgdmlkZW9TaXplLndpZHRoLCB2aWRlb1NpemUuaGVp
Z2h0KTsKLSAgICAgICAgW21fdmlkZW9MYXllckNvbnRhaW5lciBzZXRWaWRlb1JlY3Q6dmlkZW9S
ZWN0XTsKLQotICAgICAgICBtX3BsYXllclZpZXdDb250cm9sbGVyID0gYWRvcHROUyhbYWxsb2NB
VlBsYXllclZpZXdDb250cm9sbGVySW5zdGFuY2UoKSBpbml0V2l0aFZpZGVvTGF5ZXI6bV92aWRl
b0xheWVyQ29udGFpbmVyLmdldCgpXSk7Ci0gICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVy
IHNldFNob3dzUGxheWJhY2tDb250cm9sczpOT107Ci0gICAgICAgIFttX3BsYXllclZpZXdDb250
cm9sbGVyIHNldFBsYXllckNvbnRyb2xsZXI6KEFWUGxheWVyQ29udHJvbGxlciAqKXBsYXllckNv
bnRyb2xsZXIoKV07Ci0gICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHNldERlbGVnYXRl
OnBsYXllckNvbnRyb2xsZXIoKV07Ci0gICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHNl
dEFsbG93c09wdGltaXplZEZ1bGxzY3JlZW46YWxsb3dPcHRpbWl6ZWRGdWxsc2NyZWVuXTsKLQot
ICAgICAgICBbbV92aWRlb0xheWVyQ29udGFpbmVyIHNldFBsYXllclZpZXdDb250cm9sbGVyOm1f
cGxheWVyVmlld0NvbnRyb2xsZXIuZ2V0KCldOwotCi0gICAgICAgIGlmIChtX3ZpZXdDb250cm9s
bGVyKSB7Ci0gICAgICAgICAgICBbbV92aWV3Q29udHJvbGxlciBhZGRDaGlsZFZpZXdDb250cm9s
bGVyOm1fcGxheWVyVmlld0NvbnRyb2xsZXIuZ2V0KCldOwotICAgICAgICAgICAgW1ttX3ZpZXdD
b250cm9sbGVyIHZpZXddIGFkZFN1YnZpZXc6W21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld11d
OwotICAgICAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10uZnJhbWUgPSBbcGFy
ZW50VmlldyBjb252ZXJ0UmVjdDppbml0aWFsUmVjdCB0b1ZpZXc6bmlsXTsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIFtwYXJlbnRWaWV3IGFkZFN1YnZpZXc6W21fcGxheWVyVmlld0Nv
bnRyb2xsZXIgdmlld11dOwotICAgICAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmll
d10uZnJhbWUgPSBpbml0aWFsUmVjdDsKLSAgICAgICAgfQogCi0gICAgICAgIFtbbV9wbGF5ZXJW
aWV3Q29udHJvbGxlciB2aWV3XSBzZXRCYWNrZ3JvdW5kQ29sb3I6W2dldFVJQ29sb3JDbGFzcygp
IGNsZWFyQ29sb3JdXTsKLSAgICAgICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddIHNl
dE5lZWRzTGF5b3V0XTsKLSAgICAgICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddIGxh
eW91dElmTmVlZGVkXTsKKyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1
ZSgpLCBbc3Ryb25nVGhpcywgJnZpZGVvTGF5ZXIsIGluaXRpYWxSZWN0LCBwYXJlbnRWaWV3LCBt
b2RlLCBhbGxvd09wdGltaXplZEZ1bGxzY3JlZW5dIHsKKyAgICAgICAgc3Ryb25nVGhpcy0+c2V0
dXBGdWxsc2NyZWVuSW50ZXJuYWwodmlkZW9MYXllciwgaW5pdGlhbFJlY3QsIHBhcmVudFZpZXcs
IG1vZGUsIGFsbG93T3B0aW1pemVkRnVsbHNjcmVlbik7CisgICAgfSk7Cit9CiAKLSAgICAgICAg
W0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQ6OnNldHVwRnVsbHNjcmVlbkludGVybmFsKFBsYXRmb3JtTGF5ZXImIHZpZGVvTGF5ZXIs
IFdlYkNvcmU6OkludFJlY3QgaW5pdGlhbFJlY3QsIFVJVmlldyogcGFyZW50VmlldywgSFRNTE1l
ZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlLCBib29sIGFsbG93T3B0aW1pemVk
RnVsbHNjcmVlbikKK3sKKyAgICBVTlVTRURfUEFSQU0odmlkZW9MYXllcik7CisgICAgVU5VU0VE
X1BBUkFNKG1vZGUpOwogCi0gICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWlu
X3F1ZXVlKCksIF57Ci0gICAgICAgICAgICBXZWJUaHJlYWRSdW4oXnsKLSAgICAgICAgICAgICAg
ICBpZiAobV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCi0gICAgICAgICAgICAgICAgICAgIG1f
ZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5kaWRTZXR1cEZ1bGxzY3JlZW4oKTsKKyAgICBbQ0FU
cmFuc2FjdGlvbiBiZWdpbl07CisgICAgW0NBVHJhbnNhY3Rpb24gc2V0RGlzYWJsZUFjdGlvbnM6
WUVTXTsKKyAgICBtX3BhcmVudFZpZXcgPSBwYXJlbnRWaWV3OworICAgIG1fcGFyZW50V2luZG93
ID0gcGFyZW50Vmlldy53aW5kb3c7CisKKyAgICBpZiAoIWFwcGxpY2F0aW9uSXNBZFNoZWV0KCkp
IHsKKyAgICAgICAgbV93aW5kb3cgPSBhZG9wdE5TKFthbGxvY1VJV2luZG93SW5zdGFuY2UoKSBp
bml0V2l0aEZyYW1lOltbZ2V0VUlTY3JlZW5DbGFzcygpIG1haW5TY3JlZW5dIGJvdW5kc11dKTsK
KyAgICAgICAgW21fd2luZG93IHNldEJhY2tncm91bmRDb2xvcjpbZ2V0VUlDb2xvckNsYXNzKCkg
Y2xlYXJDb2xvcl1dOworICAgICAgICBtX3ZpZXdDb250cm9sbGVyID0gYWRvcHROUyhbYWxsb2NV
SVZpZXdDb250cm9sbGVySW5zdGFuY2UoKSBpbml0XSk7CisgICAgICAgIFtbbV92aWV3Q29udHJv
bGxlciB2aWV3XSBzZXRGcmFtZTpbbV93aW5kb3cgYm91bmRzXV07CisgICAgICAgIFttX3dpbmRv
dyBzZXRSb290Vmlld0NvbnRyb2xsZXI6bV92aWV3Q29udHJvbGxlci5nZXQoKV07CisgICAgICAg
IFttX3dpbmRvdyBtYWtlS2V5QW5kVmlzaWJsZV07CisgICAgfQogCi0gICAgICAgICAgICAgICAg
cHJvdGVjdCA9IG51bGxwdHI7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSk7CisgICAgW21f
dmlkZW9MYXllciByZW1vdmVGcm9tU3VwZXJsYXllcl07CisKKyAgICBtX3ZpZGVvTGF5ZXJDb250
YWluZXIgPSBbV2ViQVZWaWRlb0xheWVyIHZpZGVvTGF5ZXJdOworICAgIFttX3ZpZGVvTGF5ZXJD
b250YWluZXIgc2V0SGlkZGVuOnBsYXllckNvbnRyb2xsZXIoKS5leHRlcm5hbFBsYXliYWNrQWN0
aXZlXTsKKyAgICBbbV92aWRlb0xheWVyQ29udGFpbmVyIHNldFZpZGVvU3VibGF5ZXI6bV92aWRl
b0xheWVyLmdldCgpXTsKKworICAgIENHU2l6ZSB2aWRlb1NpemUgPSBwbGF5ZXJDb250cm9sbGVy
KCkuY29udGVudERpbWVuc2lvbnM7CisgICAgQ0dSZWN0IHZpZGVvUmVjdCA9IENHUmVjdE1ha2Uo
MCwgMCwgdmlkZW9TaXplLndpZHRoLCB2aWRlb1NpemUuaGVpZ2h0KTsKKyAgICBbbV92aWRlb0xh
eWVyQ29udGFpbmVyIHNldFZpZGVvUmVjdDp2aWRlb1JlY3RdOworCisgICAgbV9wbGF5ZXJWaWV3
Q29udHJvbGxlciA9IGFkb3B0TlMoW2FsbG9jQVZQbGF5ZXJWaWV3Q29udHJvbGxlckluc3RhbmNl
KCkgaW5pdFdpdGhWaWRlb0xheWVyOm1fdmlkZW9MYXllckNvbnRhaW5lci5nZXQoKV0pOworICAg
IFttX3BsYXllclZpZXdDb250cm9sbGVyIHNldFNob3dzUGxheWJhY2tDb250cm9sczpOT107Cisg
ICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc2V0UGxheWVyQ29udHJvbGxlcjooQVZQbGF5ZXJD
b250cm9sbGVyICopcGxheWVyQ29udHJvbGxlcigpXTsKKyAgICBbbV9wbGF5ZXJWaWV3Q29udHJv
bGxlciBzZXREZWxlZ2F0ZTpwbGF5ZXJDb250cm9sbGVyKCldOworICAgIFttX3BsYXllclZpZXdD
b250cm9sbGVyIHNldEFsbG93c09wdGltaXplZEZ1bGxzY3JlZW46YWxsb3dPcHRpbWl6ZWRGdWxs
c2NyZWVuXTsKKworICAgIFttX3ZpZGVvTGF5ZXJDb250YWluZXIgc2V0UGxheWVyVmlld0NvbnRy
b2xsZXI6bV9wbGF5ZXJWaWV3Q29udHJvbGxlci5nZXQoKV07CisKKyAgICBpZiAobV92aWV3Q29u
dHJvbGxlcikgeworICAgICAgICBbbV92aWV3Q29udHJvbGxlciBhZGRDaGlsZFZpZXdDb250cm9s
bGVyOm1fcGxheWVyVmlld0NvbnRyb2xsZXIuZ2V0KCldOworICAgICAgICBbW21fdmlld0NvbnRy
b2xsZXIgdmlld10gYWRkU3VidmlldzpbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XV07Cisg
ICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddLmZyYW1lID0gW3BhcmVudFZpZXcg
Y29udmVydFJlY3Q6aW5pdGlhbFJlY3QgdG9WaWV3Om5pbF07CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgW3BhcmVudFZpZXcgYWRkU3VidmlldzpbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XV07
CisgICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddLmZyYW1lID0gaW5pdGlhbFJl
Y3Q7CisgICAgfQorCisgICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddIHNldEJhY2tn
cm91bmRDb2xvcjpbZ2V0VUlDb2xvckNsYXNzKCkgY2xlYXJDb2xvcl1dOworICAgIFtbbV9wbGF5
ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBzZXROZWVkc0xheW91dF07CisgICAgW1ttX3BsYXllclZp
ZXdDb250cm9sbGVyIHZpZXddIGxheW91dElmTmVlZGVkXTsKKworICAgIFtDQVRyYW5zYWN0aW9u
IGNvbW1pdF07CisKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+
IHN0cm9uZ1RoaXModGhpcyk7CisgICAgV2ViVGhyZWFkUnVuKFtzdHJvbmdUaGlzXSB7CisgICAg
ICAgIGlmIChzdHJvbmdUaGlzLT5tX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKKyAgICAgICAg
ICAgIHN0cm9uZ1RoaXMtPm1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5kaWRTZXR1cEZ1bGxz
Y3JlZW4oKTsKICAgICB9KTsKIH0KIAogdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdDo6ZW50ZXJGdWxsc2NyZWVuKCkKIHsKLSAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gcHJvdGVjdCh0aGlzKTsKLSAgICAKICAgICBtX2V4aXRD
b21wbGV0ZWQgPSBmYWxzZTsKICAgICBtX2V4aXRSZXF1ZXN0ZWQgPSBmYWxzZTsKICAgICBtX2Vu
dGVyUmVxdWVzdGVkID0gdHJ1ZTsKLSAgICAKLSAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9n
ZXRfbWFpbl9xdWV1ZSgpLCBeewotICAgICAgICBbbV92aWRlb0xheWVyQ29udGFpbmVyIHNldEJh
Y2tncm91bmRDb2xvcjpbW2dldFVJQ29sb3JDbGFzcygpIGJsYWNrQ29sb3JdIENHQ29sb3JdXTsK
LSAgICAgICAgaWYgKG1fbW9kZSA9PSBIVE1MTWVkaWFFbGVtZW50OjpWaWRlb0Z1bGxzY3JlZW5N
b2RlT3B0aW1pemVkKSB7Ci0gICAgICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzdGFy
dE9wdGltaXplZEZ1bGxzY3JlZW5XaXRoU3RhcnRDb21wbGV0aW9uSGFuZGxlcjpeKEJPT0wgc3Vj
Y2VzcywgTlNFcnJvciAqKSB7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgW21f
cGxheWVyVmlld0NvbnRyb2xsZXIgc2V0U2hvd3NQbGF5YmFja0NvbnRyb2xzOllFU107Ci0gICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgV2ViVGhyZWFkUnVuKF57Ci0gICAgICAgICAg
ICAgICAgICAgIFttX3dpbmRvdyBzZXRIaWRkZW46WUVTXTsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQotICAgICAgICAgICAgICAgICAgICAgICAg
bV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZEVudGVyRnVsbHNjcmVlbigpOwotICAgICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFzdWNjZXNzKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAobV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5yZXF1ZXN0RXhpdEZ1
bGxzY3JlZW4oKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3QgPSBudWxscHRyOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9
IHN0b3BDb21wbGV0aW9uSGFuZGxlcjpeKEFWUGxheWVyVmlld0NvbnRyb2xsZXJPcHRpbWl6ZWRG
dWxsc2NyZWVuU3RvcFJlYXNvbiByZWFzb24pIHsKLSAgICAgICAgICAgICAgICBtX2V4aXRDb21w
bGV0ZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChtX2Z1
bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciAmJiByZWFzb24gPT0gQVZQbGF5ZXJWaWV3Q29udHJvbGxl
ck9wdGltaXplZEZ1bGxzY3JlZW5TdG9wUmVhc29uU3RvcHBlZCkKLSAgICAgICAgICAgICAgICAg
ICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGlu
ZSgpOwotCi0gICAgICAgICAgICAgICAgaWYgKG1fZXhpdFJlcXVlc3RlZCkgewotICAgICAgICAg
ICAgICAgICAgICBbbV92aWRlb0xheWVyQ29udGFpbmVyIHNldEJhY2tncm91bmRDb2xvcjpbW2dl
dFVJQ29sb3JDbGFzcygpIGNsZWFyQ29sb3JdIENHQ29sb3JdXTsKLSAgICAgICAgICAgICAgICAg
ICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddIHNldEJhY2tncm91bmRDb2xvcjpbZ2V0
VUlDb2xvckNsYXNzKCkgY2xlYXJDb2xvcl1dOwotICAgICAgICAgICAgICAgICAgICBXZWJUaHJl
YWRSdW4oXnsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX2Z1bGxzY3JlZW5DaGFuZ2VP
YnNlcnZlcikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VP
YnNlcnZlci0+ZGlkRXhpdEZ1bGxzY3JlZW4oKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBy
b3RlY3QgPSBudWxscHRyOwotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAobV92aWRlb0Z1bGxzY3JlZW5Nb2Rl
bCkKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwtPnJlcXVl
c3RFeGl0RnVsbHNjcmVlbigpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH1dOwot
ICAgICAgICB9IGVsc2UgaWYgKG1fbW9kZSA9PSBIVE1MTWVkaWFFbGVtZW50OjpWaWRlb0Z1bGxz
Y3JlZW5Nb2RlU3RhbmRhcmQpIHsKLSAgICAgICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVy
IGVudGVyRnVsbFNjcmVlbldpdGhDb21wbGV0aW9uSGFuZGxlcjpeKEJPT0wsIE5TRXJyb3IqKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHNl
dFNob3dzUGxheWJhY2tDb250cm9sczpZRVNdOwotICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIFdlYlRocmVhZFJ1biheewotICAgICAgICAgICAgICAgICAgICBpZiAobV9mdWxsc2Ny
ZWVuQ2hhbmdlT2JzZXJ2ZXIpCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2Z1bGxzY3JlZW5D
aGFuZ2VPYnNlcnZlci0+ZGlkRW50ZXJGdWxsc2NyZWVuKCk7Ci0gICAgICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAg
ICB9KTsKLSAgICAgICAgICAgIH1dOwotICAgICAgICB9CisKKyAgICBSZWZQdHI8V2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHN0cm9uZ1RoaXModGhpcyk7CisgICAgZGlzcGF0Y2hf
YXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3N0cm9uZ1RoaXNdIHsKKyAgICAgICAg
W3N0cm9uZ1RoaXMtPm1fdmlkZW9MYXllckNvbnRhaW5lciBzZXRCYWNrZ3JvdW5kQ29sb3I6W1tn
ZXRVSUNvbG9yQ2xhc3MoKSBibGFja0NvbG9yXSBDR0NvbG9yXV07CisgICAgICAgIGlmIChzdHJv
bmdUaGlzLT5tb2RlKCkgPT0gSFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZU9w
dGltaXplZCkKKyAgICAgICAgICAgIHN0cm9uZ1RoaXMtPmVudGVyRnVsbHNjcmVlbk9wdGltaXpl
ZCgpOworICAgICAgICBlbHNlIGlmIChzdHJvbmdUaGlzLT5tb2RlKCkgPT0gSFRNTE1lZGlhRWxl
bWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkKQorICAgICAgICAgICAgc3Ryb25nVGhp
cy0+ZW50ZXJGdWxsc2NyZWVuU3RhbmRhcmQoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfSk7CiB9CiAKK3ZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQ6OmVudGVyRnVsbHNjcmVlbk9wdGltaXplZCgpCit7CisgICAgUmVm
UHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBzdHJvbmdUaGlzKHRoaXMpOwor
CisgICAgYXV0byBzdGFydENvbXBsZXRpb25IYW5kbGVyID0gW3RoaXMsIHN0cm9uZ1RoaXNdIChC
T09MIHN1Y2Nlc3MsIE5TRXJyb3IgKikgeworICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxl
ciBzZXRTaG93c1BsYXliYWNrQ29udHJvbHM6WUVTXTsKKworICAgICAgICBXZWJUaHJlYWRSdW4o
W3RoaXMsIHN0cm9uZ1RoaXMsIHN1Y2Nlc3NdIHsKKyAgICAgICAgICAgIFttX3dpbmRvdyBzZXRI
aWRkZW46WUVTXTsKKyAgICAgICAgICAgIGlmIChtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikK
KyAgICAgICAgICAgICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+ZGlkRW50ZXJGdWxs
c2NyZWVuKCk7CisKKyAgICAgICAgICAgIGlmICghc3VjY2VzcykgeworICAgICAgICAgICAgICAg
IGlmIChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsKQorICAgICAgICAgICAgICAgICAgICBtX3ZpZGVv
RnVsbHNjcmVlbk1vZGVsLT5yZXF1ZXN0RXhpdEZ1bGxzY3JlZW4oKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSk7CisgICAgfTsKKworICAgIGF1dG8gc3RvcENvbXBsZXRpb25IYW5kbGVyID0g
W3RoaXMsIHN0cm9uZ1RoaXNdIChBVlBsYXllclZpZXdDb250cm9sbGVyT3B0aW1pemVkRnVsbHNj
cmVlblN0b3BSZWFzb24gcmVhc29uKSB7CisgICAgICAgIG1fZXhpdENvbXBsZXRlZCA9IHRydWU7
CisKKyAgICAgICAgaWYgKG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyICYmIHJlYXNvbiA9PSBB
VlBsYXllclZpZXdDb250cm9sbGVyT3B0aW1pemVkRnVsbHNjcmVlblN0b3BSZWFzb25TdG9wcGVk
KQorICAgICAgICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmZ1bGxzY3JlZW5NYXlS
ZXR1cm5Ub0lubGluZSgpOworICAgICAgICBpZiAobV9leGl0UmVxdWVzdGVkKSB7CisgICAgICAg
ICAgICBbbV92aWRlb0xheWVyQ29udGFpbmVyIHNldEJhY2tncm91bmRDb2xvcjpbW2dldFVJQ29s
b3JDbGFzcygpIGNsZWFyQ29sb3JdIENHQ29sb3JdXTsKKyAgICAgICAgICAgIFtbbV9wbGF5ZXJW
aWV3Q29udHJvbGxlciB2aWV3XSBzZXRCYWNrZ3JvdW5kQ29sb3I6W2dldFVJQ29sb3JDbGFzcygp
IGNsZWFyQ29sb3JdXTsKKyAgICAgICAgICAgIFdlYlRocmVhZFJ1bihbdGhpcywgc3Ryb25nVGhp
c10geworICAgICAgICAgICAgICAgIGlmIChtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKKyAg
ICAgICAgICAgICAgICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZEV4aXRGdWxs
c2NyZWVuKCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IGlmIChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsKQorICAgICAgICAgICAgICAgIG1fdmlkZW9GdWxs
c2NyZWVuTW9kZWwtPnJlcXVlc3RFeGl0RnVsbHNjcmVlbigpOworICAgICAgICB9CisgICAgfTsK
KworICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHN0YXJ0T3B0aW1pemVkRnVsbHNjcmVlbldp
dGhTdGFydENvbXBsZXRpb25IYW5kbGVyOnN0YXJ0Q29tcGxldGlvbkhhbmRsZXIgc3RvcENvbXBs
ZXRpb25IYW5kbGVyOnN0b3BDb21wbGV0aW9uSGFuZGxlcl07Cit9CisKK3ZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmVudGVyRnVsbHNjcmVlblN0YW5kYXJkKCkKK3sKKyAg
ICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHN0cm9uZ1RoaXModGhp
cyk7CisgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgZW50ZXJGdWxsU2NyZWVuV2l0aENvbXBs
ZXRpb25IYW5kbGVyOlt0aGlzLCBzdHJvbmdUaGlzXSAoQk9PTCwgTlNFcnJvciopIHsKKyAgICAg
ICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc2V0U2hvd3NQbGF5YmFja0NvbnRyb2xzOllFU107
CisKKyAgICAgICAgV2ViVGhyZWFkUnVuKFt0aGlzLCBzdHJvbmdUaGlzXSB7CisgICAgICAgICAg
ICBpZiAobV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCisgICAgICAgICAgICAgICAgbV9mdWxs
c2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZEVudGVyRnVsbHNjcmVlbigpOworICAgICAgICB9KTsK
KyAgICB9XTsKK30KKwogdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZXhp
dEZ1bGxzY3JlZW4oV2ViQ29yZTo6SW50UmVjdCBmaW5hbFJlY3QpCiB7Ci0gICAgX19ibG9jayBS
ZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHByb3RlY3QodGhpcyk7Ci0g
ICAgCisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBzdHJvbmdU
aGlzKHRoaXMpOworCiAgICAgbV9leGl0UmVxdWVzdGVkID0gdHJ1ZTsKICAgICBpZiAobV9leGl0
Q29tcGxldGVkKSB7Ci0gICAgICAgIFdlYlRocmVhZFJ1biheewotICAgICAgICAgICAgaWYgKG1f
ZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQotICAgICAgICAgICAgICAgIG1fZnVsbHNjcmVlbkNo
YW5nZU9ic2VydmVyLT5kaWRFeGl0RnVsbHNjcmVlbigpOwotICAgICAgICAgICAgcHJvdGVjdCA9
IG51bGxwdHI7CisgICAgICAgIFdlYlRocmVhZFJ1bihbc3Ryb25nVGhpc10geworICAgICAgICAg
ICAgaWYgKHN0cm9uZ1RoaXMtPm1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQorICAgICAgICAg
ICAgICAgIHN0cm9uZ1RoaXMtPm1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5kaWRFeGl0RnVs
bHNjcmVlbigpOwogICAgICAgICB9KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAKKwog
ICAgIG1fcGxheWVyQ29udHJvbGxlciA9IG5pbDsKLSAgICAKLSAgICBkaXNwYXRjaF9hc3luYyhk
aXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeewotICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJv
bGxlciBzZXRTaG93c1BsYXliYWNrQ29udHJvbHM6Tk9dOwotICAgICAgICBpZiAobV92aWV3Q29u
dHJvbGxlcikKLSAgICAgICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddLmZyYW1l
ID0gW21fcGFyZW50VmlldyBjb252ZXJ0UmVjdDpmaW5hbFJlY3QgdG9WaWV3Om5pbF07Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddLmZyYW1l
ID0gZmluYWxSZWN0OwogCi0gICAgICAgIGlmIChbbV92aWRlb0xheWVyQ29udGFpbmVyIHZpZGVv
TGF5ZXJHcmF2aXR5XSAhPSBBVlZpZGVvTGF5ZXJHcmF2aXR5UmVzaXplQXNwZWN0KQotICAgICAg
ICAgICAgW21fdmlkZW9MYXllckNvbnRhaW5lciBzZXRWaWRlb0xheWVyR3Jhdml0eTpBVlZpZGVv
TGF5ZXJHcmF2aXR5UmVzaXplQXNwZWN0XTsKLSAgICAgICAgW1ttX3BsYXllclZpZXdDb250cm9s
bGVyIHZpZXddIGxheW91dElmTmVlZGVkXTsKLSAgICAgICAgCi0gICAgICAgIGlmIChtX21vZGUg
PT0gSFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZU9wdGltaXplZCkgeworICAg
IGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtzdHJvbmdUaGlzLCBm
aW5hbFJlY3RdIHsKKyAgICAgICAgc3Ryb25nVGhpcy0+ZXhpdEZ1bGxzY3JlZW5JbnRlcm5hbChm
aW5hbFJlY3QpOworICAgIH0pOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0OjpleGl0RnVsbHNjcmVlbkludGVybmFsKFdlYkNvcmU6OkludFJlY3QgZmluYWxSZWN0
KQoreworICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHNldFNob3dzUGxheWJhY2tDb250cm9s
czpOT107CisgICAgaWYgKG1fdmlld0NvbnRyb2xsZXIpCisgICAgICAgIFttX3BsYXllclZpZXdD
b250cm9sbGVyIHZpZXddLmZyYW1lID0gW21fcGFyZW50VmlldyBjb252ZXJ0UmVjdDpmaW5hbFJl
Y3QgdG9WaWV3Om5pbF07CisgICAgZWxzZQorICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxl
ciB2aWV3XS5mcmFtZSA9IGZpbmFsUmVjdDsKKworICAgIGlmIChbbV92aWRlb0xheWVyQ29udGFp
bmVyIHZpZGVvTGF5ZXJHcmF2aXR5XSAhPSBBVlZpZGVvTGF5ZXJHcmF2aXR5UmVzaXplQXNwZWN0
KQorICAgICAgICBbbV92aWRlb0xheWVyQ29udGFpbmVyIHNldFZpZGVvTGF5ZXJHcmF2aXR5OkFW
VmlkZW9MYXllckdyYXZpdHlSZXNpemVBc3BlY3RdOworICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJv
bGxlciB2aWV3XSBsYXlvdXRJZk5lZWRlZF07CisKKyAgICBpZiAobV9tb2RlID09IEhUTUxNZWRp
YUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGVPcHRpbWl6ZWQpIHsKKyAgICAgICAgW21fd2lu
ZG93IHNldEhpZGRlbjpOT107CisgICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHN0b3BP
cHRpbWl6ZWRGdWxsc2NyZWVuXTsKKyAgICB9IGVsc2UgaWYgKG1fbW9kZSA9PSAoSFRNTE1lZGlh
RWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZU9wdGltaXplZCB8IEhUTUxNZWRpYUVsZW1lbnQ6
OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCkpIHsKKyAgICAgICAgW21fcGxheWVyVmlld0Nv
bnRyb2xsZXIgZXhpdEZ1bGxTY3JlZW5BbmltYXRlZDpOTyBjb21wbGV0aW9uSGFuZGxlcjpeKEJP
T0wgLCBOU0Vycm9yICopIHsKICAgICAgICAgICAgIFttX3dpbmRvdyBzZXRIaWRkZW46Tk9dOwog
ICAgICAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc3RvcE9wdGltaXplZEZ1bGxzY3Jl
ZW5dOwotICAgICAgICB9IGVsc2UgaWYgKG1fbW9kZSA9PSAoSFRNTE1lZGlhRWxlbWVudDo6Vmlk
ZW9GdWxsc2NyZWVuTW9kZU9wdGltaXplZCB8IEhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNj
cmVlbk1vZGVTdGFuZGFyZCkpIHsKLSAgICAgICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVy
IGV4aXRGdWxsU2NyZWVuQW5pbWF0ZWQ6Tk8gY29tcGxldGlvbkhhbmRsZXI6XihCT09MICwgTlNF
cnJvciAqKSB7Ci0gICAgICAgICAgICAgICAgW21fd2luZG93IHNldEhpZGRlbjpOT107Ci0gICAg
ICAgICAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc3RvcE9wdGltaXplZEZ1bGxzY3Jl
ZW5dOwotICAgICAgICAgICAgfV07Ci0gICAgICAgIH0gZWxzZSBpZiAobV9tb2RlID09IEhUTUxN
ZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCkgewotICAgICAgICAgICAg
W21fcGxheWVyVmlld0NvbnRyb2xsZXIgZXhpdEZ1bGxTY3JlZW5XaXRoQ29tcGxldGlvbkhhbmRs
ZXI6XihCT09MLCBOU0Vycm9yKikgewotICAgICAgICAgICAgICAgIG1fZXhpdENvbXBsZXRlZCA9
IHRydWU7Ci0gICAgICAgICAgICAgICAgW21fdmlkZW9MYXllckNvbnRhaW5lciBzZXRCYWNrZ3Jv
dW5kQ29sb3I6W1tnZXRVSUNvbG9yQ2xhc3MoKSBjbGVhckNvbG9yXSBDR0NvbG9yXV07Ci0gICAg
ICAgICAgICAgICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddIHNldEJhY2tncm91bmRD
b2xvcjpbZ2V0VUlDb2xvckNsYXNzKCkgY2xlYXJDb2xvcl1dOwotICAgICAgICAgICAgICAgIFdl
YlRocmVhZFJ1biheewotICAgICAgICAgICAgICAgICAgICBpZiAobV9mdWxsc2NyZWVuQ2hhbmdl
T2JzZXJ2ZXIpCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNl
cnZlci0+ZGlkRXhpdEZ1bGxzY3JlZW4oKTsKLSAgICAgICAgICAgICAgICAgICAgcHJvdGVjdCA9
IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgIH1dOwotICAgICAg
ICB9Ci0gICAgfSk7CisgICAgICAgIH1dOworICAgIH0gZWxzZSBpZiAobV9tb2RlID09IEhUTUxN
ZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCkgeworICAgICAgICBbbV9w
bGF5ZXJWaWV3Q29udHJvbGxlciBleGl0RnVsbFNjcmVlbldpdGhDb21wbGV0aW9uSGFuZGxlcjpb
c3Ryb25nVGhpc10gKEJPT0wsIE5TRXJyb3IqKSB7CisgICAgICAgICAgICBzdHJvbmdUaGlzLT5t
X2V4aXRDb21wbGV0ZWQgPSB0cnVlOworICAgICAgICAgICAgW3N0cm9uZ1RoaXMtPm1fdmlkZW9M
YXllckNvbnRhaW5lciBzZXRCYWNrZ3JvdW5kQ29sb3I6W1tnZXRVSUNvbG9yQ2xhc3MoKSBjbGVh
ckNvbG9yXSBDR0NvbG9yXV07CisgICAgICAgICAgICBbW3N0cm9uZ1RoaXMtPm1fcGxheWVyVmll
d0NvbnRyb2xsZXIgdmlld10gc2V0QmFja2dyb3VuZENvbG9yOltnZXRVSUNvbG9yQ2xhc3MoKSBj
bGVhckNvbG9yXV07CisgICAgICAgICAgICBXZWJUaHJlYWRSdW4oW3N0cm9uZ1RoaXNdIHsKKyAg
ICAgICAgICAgICAgICBpZiAoc3Ryb25nVGhpcy0+bV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIp
CisgICAgICAgICAgICAgICAgICAgIHN0cm9uZ1RoaXMtPm1fZnVsbHNjcmVlbkNoYW5nZU9ic2Vy
dmVyLT5kaWRFeGl0RnVsbHNjcmVlbigpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH1dCisg
ICAgfTsKIH0KIAogQGludGVyZmFjZSBVSUFwcGxpY2F0aW9uICgpCkBAIC0xMDAzLDM5ICs5ODgs
NDMgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZXhpdEZ1bGxzY3Jl
ZW4oV2ViQ29yZTo6SW50UmVjdCBmaW5hbFJlY3QKIAogdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdDo6Y2xlYW51cEZ1bGxzY3JlZW4oKQogewotICAgIC8vIFJldGFpbiB0aGlz
IHRvIGV4dGVuZCBvYmplY3QgbGlmZSB1bnRpbCBhc3luYyBibG9jayBjb21wbGV0ZXMuCi0gICAg
X19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHByb3RlY3Qo
dGhpcyk7CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBzdHJv
bmdUaGlzKHRoaXMpOwogICAgIAotICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWlu
X3F1ZXVlKCksIF57Ci0gICAgICAgIGlmIChtX3dpbmRvdykgewotICAgICAgICAgICAgW21fd2lu
ZG93IHNldEhpZGRlbjpZRVNdOwotICAgICAgICAgICAgW21fd2luZG93IHNldFJvb3RWaWV3Q29u
dHJvbGxlcjpuaWxdOwotICAgICAgICAgICAgaWYgKG1fcGFyZW50V2luZG93KQotICAgICAgICAg
ICAgICAgIFtbZ2V0VUlBcHBsaWNhdGlvbkNsYXNzKCkgc2hhcmVkQXBwbGljYXRpb25dIF9zZXRT
dGF0dXNCYXJPcmllbnRhdGlvbjpbbV9wYXJlbnRXaW5kb3cgaW50ZXJmYWNlT3JpZW50YXRpb25d
XTsKLSAgICAgICAgfQotICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzZXREZWxlZ2F0
ZTpuaWxdOwotICAgICAgICBbW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10gcmVtb3ZlRnJv
bVN1cGVydmlld107Ci0gICAgICAgIGlmIChtX3ZpZXdDb250cm9sbGVyKQotICAgICAgICAgICAg
W21fcGxheWVyVmlld0NvbnRyb2xsZXIgcmVtb3ZlRnJvbVBhcmVudFZpZXdDb250cm9sbGVyXTsK
LSAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc2V0UGxheWVyQ29udHJvbGxlcjpuaWxd
OwotICAgICAgICBtX3BsYXllclZpZXdDb250cm9sbGVyID0gbmlsOwotICAgICAgICBbbV92aWRl
b0xheWVyIHJlbW92ZUZyb21TdXBlcmxheWVyXTsKLSAgICAgICAgbV92aWRlb0xheWVyID0gbmls
OwotICAgICAgICBbbV92aWRlb0xheWVyQ29udGFpbmVyIHJlbW92ZUZyb21TdXBlcmxheWVyXTsK
LSAgICAgICAgW21fdmlkZW9MYXllckNvbnRhaW5lciBzZXRQbGF5ZXJWaWV3Q29udHJvbGxlcjpu
aWxdOwotICAgICAgICBtX3ZpZGVvTGF5ZXJDb250YWluZXIgPSBuaWw7Ci0gICAgICAgIFtbbV92
aWV3Q29udHJvbGxlciB2aWV3XSByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKLSAgICAgICAgbV92aWV3
Q29udHJvbGxlciA9IG5pbDsKLSAgICAgICAgbV93aW5kb3cgPSBuaWw7Ci0gICAgICAgIG1fcGFy
ZW50VmlldyA9IG5pbDsKLSAgICAgICAgbV9wYXJlbnRXaW5kb3cgPSBuaWw7Ci0gICAgICAgIAot
ICAgICAgICBXZWJUaHJlYWRSdW4oXnsKLSAgICAgICAgICAgIGlmIChtX2Z1bGxzY3JlZW5DaGFu
Z2VPYnNlcnZlcikKLSAgICAgICAgICAgICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+
ZGlkQ2xlYW51cEZ1bGxzY3JlZW4oKTsKLSAgICAgICAgICAgIG1fZW50ZXJSZXF1ZXN0ZWQgPSBm
YWxzZTsKLSAgICAgICAgICAgIHByb3RlY3QgPSBudWxscHRyOwotICAgICAgICB9KTsKKyAgICBk
aXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbc3Ryb25nVGhpc10gewor
ICAgICAgICBzdHJvbmdUaGlzLT5jbGVhbnVwRnVsbHNjcmVlbkludGVybmFsKCk7CisgICAgfSk7
Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmNsZWFudXBGdWxs
c2NyZWVuSW50ZXJuYWwoKQoreworICAgIGlmIChtX3dpbmRvdykgeworICAgICAgICBbbV93aW5k
b3cgc2V0SGlkZGVuOllFU107CisgICAgICAgIFttX3dpbmRvdyBzZXRSb290Vmlld0NvbnRyb2xs
ZXI6bmlsXTsKKyAgICAgICAgaWYgKG1fcGFyZW50V2luZG93KQorICAgICAgICAgICAgW1tnZXRV
SUFwcGxpY2F0aW9uQ2xhc3MoKSBzaGFyZWRBcHBsaWNhdGlvbl0gX3NldFN0YXR1c0Jhck9yaWVu
dGF0aW9uOlttX3BhcmVudFdpbmRvdyBpbnRlcmZhY2VPcmllbnRhdGlvbl1dOworICAgIH0KKyAg
ICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzZXREZWxlZ2F0ZTpuaWxdOworICAgIFtbbV9wbGF5
ZXJWaWV3Q29udHJvbGxlciB2aWV3XSByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKKyAgICBpZiAobV92
aWV3Q29udHJvbGxlcikKKyAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgcmVtb3ZlRnJv
bVBhcmVudFZpZXdDb250cm9sbGVyXTsKKyAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzZXRQ
bGF5ZXJDb250cm9sbGVyOm5pbF07CisgICAgbV9wbGF5ZXJWaWV3Q29udHJvbGxlciA9IG5pbDsK
KyAgICBbbV92aWRlb0xheWVyIHJlbW92ZUZyb21TdXBlcmxheWVyXTsKKyAgICBtX3ZpZGVvTGF5
ZXIgPSBuaWw7CisgICAgW21fdmlkZW9MYXllckNvbnRhaW5lciByZW1vdmVGcm9tU3VwZXJsYXll
cl07CisgICAgW21fdmlkZW9MYXllckNvbnRhaW5lciBzZXRQbGF5ZXJWaWV3Q29udHJvbGxlcjpu
aWxdOworICAgIG1fdmlkZW9MYXllckNvbnRhaW5lciA9IG5pbDsKKyAgICBbW21fdmlld0NvbnRy
b2xsZXIgdmlld10gcmVtb3ZlRnJvbVN1cGVydmlld107CisgICAgbV92aWV3Q29udHJvbGxlciA9
IG5pbDsKKyAgICBtX3dpbmRvdyA9IG5pbDsKKyAgICBtX3BhcmVudFZpZXcgPSBuaWw7CisgICAg
bV9wYXJlbnRXaW5kb3cgPSBuaWw7CisgICAgCisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0PiBzdHJvbmdUaGlzKHRoaXMpOworICAgIFdlYlRocmVhZFJ1bihbc3Ry
b25nVGhpc10geworICAgICAgICBpZiAoc3Ryb25nVGhpcy0+bV9mdWxsc2NyZWVuQ2hhbmdlT2Jz
ZXJ2ZXIpCisgICAgICAgICAgICBzdHJvbmdUaGlzLT5tX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZl
ci0+ZGlkQ2xlYW51cEZ1bGxzY3JlZW4oKTsKKyAgICAgICAgc3Ryb25nVGhpcy0+bV9lbnRlclJl
cXVlc3RlZCA9IGZhbHNlOwogICAgIH0pOwogfQogCkBAIC0xMDc2LDEzICsxMDY1LDEwIEBAIHZv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnJlcXVlc3RIaWRlQW5kRXhpdEZ1
bGxzY3JlZW4oKQogICAgIGlmIChtX21vZGUgJiBIVE1MTWVkaWFFbGVtZW50OjpWaWRlb0Z1bGxz
Y3JlZW5Nb2RlT3B0aW1pemVkKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgX19ibG9jayBS
ZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHByb3RlY3QodGhpcyk7Ci0g
ICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKLSAgICAgICAg
W21fd2luZG93IHNldEhpZGRlbjpZRVNdOwotICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxl
ciBleGl0RnVsbFNjcmVlbkFuaW1hdGVkOk5PIGNvbXBsZXRpb25IYW5kbGVyOl4oQk9PTCwgTlNF
cnJvciopIHsKLSAgICAgICAgICAgIFdlYlRocmVhZFJ1biheewotICAgICAgICAgICAgICAgIHBy
b3RlY3QgPSBudWxscHRyOwotICAgICAgICAgICAgfSk7CisgICAgUmVmUHRyPFdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0PiBzdHJvbmdUaGlzKHRoaXMpOworICAgIGRpc3BhdGNoX2Fz
eW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtzdHJvbmdUaGlzXSB7CisgICAgICAgIFtz
dHJvbmdUaGlzLT5tX3dpbmRvdyBzZXRIaWRkZW46WUVTXTsKKyAgICAgICAgW3N0cm9uZ1RoaXMt
Pm1fcGxheWVyVmlld0NvbnRyb2xsZXIgZXhpdEZ1bGxTY3JlZW5BbmltYXRlZDpOTyBjb21wbGV0
aW9uSGFuZGxlcjpbc3Ryb25nVGhpc10gKEJPT0wsIE5TRXJyb3IqKSB7CiAgICAgICAgIH1dOwog
ICAgIH0pOwogCkBAIC0xMTEyLDcgKzEwOTgsNyBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0OjpzZXRJc09wdGltaXplZChib29sIGFjdGl2ZSkKIAogICAgIGlmICghbV9l
eGl0UmVxdWVzdGVkIHx8IGFjdGl2ZSkKICAgICAgICAgcmV0dXJuOwotICAgIAorCiAgICAgbV9l
eGl0Q29tcGxldGVkID0gdHJ1ZTsKICAgICBbbV92aWRlb0xheWVyQ29udGFpbmVyIHNldEJhY2tn
cm91bmRDb2xvcjpbW2dldFVJQ29sb3JDbGFzcygpIGNsZWFyQ29sb3JdIENHQ29sb3JdXTsKICAg
ICBbW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10gc2V0QmFja2dyb3VuZENvbG9yOltnZXRV
SUNvbG9yQ2xhc3MoKSBjbGVhckNvbG9yXV07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>243205</attachid>
            <date>2014-12-12 10:58:48 -0800</date>
            <delta_ts>2014-12-16 11:20:01 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-139550-20141212105932.patch</filename>
            <type>text/plain</type>
            <size>34036</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc3MjI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzc4ZGVkOTNmOGI0YTBm
ZTBlZGRlOTU4NDJlZjhmZWEzNWUwNjZhNC4uODk5MjBkYjEwNjJhOWUzZGM4MDZiNmVjODJmMjhh
MTNmYjRkYTYyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDE0LTEyLTExICBKZXIg
Tm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgorCisgICAgICAgIFtpT1NdIENyYXNoIGluIFdl
YktpdDo6V2ViUGFnZVByb3h5OjpkaXNwYXRjaFZpZXdTdGF0ZUNoYW5nZSgpIHRhcHBpbmcgYSBs
aW5rIGZyb20gYW5vdGhlciBhcHAgd2hpbGUgcGxheWluZyBhIHZpZGVvCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzk1NTAKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgZXhpc3RpbmcgImRpc3BhdGNo
IHRvIFdlYlRocmVhZCwgdGhlbiByZWxlYXNlIiBtb2RlbCBpcyBpbnN1ZmZpY2llbnQgYW5kIHN0
aWxsCisgICAgICAgIGNhbiByZXN1bHQgaW4gUmVmUHRyIHJhY2UgY29uZGl0aW9ucyBiZXR3ZWVu
IHRoZSBtYWluIHRocmVhZCBhbmQgdGhlIHdlYiB0aHJlYWQuCisgICAgICAgIE1ha2UgV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQgYSB0aHJlYWQtc2FmZSByZWYtY291bnRlZCBjbGFz
cywgd2hpY2gKKyAgICAgICAgZWxpbWluYXRlcyB0aGUgbmVjZXNzaXR5IG9mIGRpc3B0YWNoaW5n
IGJhY2sgdG8gdGhlIHdlYiB0aHJlYWQgYmVmb3JlIHJlbGVhc2luZy4KKworICAgICAgICAqIHBs
YXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oOgorICAgICAgICAq
IHBsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbToKKyAgICAg
ICAgKFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXREdXJhdGlvbik6IFVzZSBh
IHN0cm9uZ1RoaXMgbW9kZWwuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdDo6c2V0Q3VycmVudFRpbWUpOiBEaXR0by4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0OjpzZXRSYXRlKTogRGl0dG8uCisgICAgICAgIChXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0VmlkZW9EaW1lbnNpb25zKTogRGl0dG8uCisgICAgICAg
IChXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0U2Vla2FibGVSYW5nZXMpOiBE
aXR0by4KKyAgICAgICAgKG1lZGlhU2VsZWN0aW9uT3B0aW9ucyk6IFJldHVybiBhIFJldGFpblB0
ciBvYmplY3QuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0
QXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnMpOiBVc2UgYSBzdHJvbmdUaGlzIG1vZGVsLgorICAg
ICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldExlZ2libGVNZWRpYVNl
bGVjdGlvbk9wdGlvbnMpOiBEaXR0by4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0OjpzZXRFeHRlcm5hbFBsYXliYWNrKTogRGl0dG8uCisgICAgICAgIChXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0dXBGdWxsc2NyZWVuKTogRGl0dG8uCisgICAg
ICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZW50ZXJGdWxsc2NyZWVuKTog
RGl0dG8uCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZXhpdEZ1
bGxzY3JlZW4pOiBEaXR0by4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0OjpjbGVhbnVwRnVsbHNjcmVlbik6IERpdHRvLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQ6OnNldHVwRnVsbHNjcmVlbkludGVybmFsKTogQWRkZWQgdXRpbGl0
eQorICAgICAgICAgICAgZnVuY3Rpb24uIExldHMgdXMgdXNlIHRoZSBpbXBsaWVkIHRoaXMgcG9p
bnRlciByYXRoZXIgdGhhbiBhbiBleHBsaWNpdAorICAgICAgICAgICAgc3Ryb25nVGhpcy4KKyAg
ICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjplbnRlckZ1bGxzY3JlZW5P
cHRpbWl6ZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0OjplbnRlckZ1bGxzY3JlZW5TdGFuZGFyZCk6IERpdHRvLgorICAgICAgICAoV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmV4aXRGdWxsc2NyZWVuSW50ZXJuYWwpOiBEaXR0by4K
KyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpjbGVhbnVwRnVsbHNj
cmVlbkludGVybmFsKTogRGl0dG8uCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdDo6cmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbik6IFVzZSBhIHN0cm9uZ1RoaXMg
bW9kZWwuCisKIDIwMTQtMTItMTIgIFJhZHUgU3RhdmlsYSAgPHN0YXZpbGFAYWRvYmUuY29tPgog
CiAgICAgICAgIFtTVkcgTWFza2luZ10gRW5hYmxlIHRoZSB1c2Ugb2YgPG1hc2s+IGVsZW1lbnRz
IGZvciAtd2Via2l0LW1hc2staW1hZ2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LmgKaW5kZXgg
NGE5OGRlYmNiNDM3ZWY1OGI3ZmE4YmM2ZTFlMjdlNGNjYzE0MzViZi4uM2Y3MWJhMjVhNWVmYjE3
MWNiYzIxN2YwNGE5NGJlOGY4ZWYyNDFlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LmgK
QEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1dlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZS5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWlu
UHRyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAKIE9CSkNfQ0xB
U1MgV2ViQVZQbGF5ZXJDb250cm9sbGVyOwogT0JKQ19DTEFTUyBBVlBsYXllclZpZXdDb250cm9s
bGVyOwpAQCAtNjQsNyArNjUsNyBAQCBwdWJsaWM6CiAKIGNsYXNzIFdlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0CiAgICAgOiBwdWJsaWMgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
Ci0gICAgLCBwdWJsaWMgUmVmQ291bnRlZDxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dD4geworICAgICwgcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFdlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0PiB7CiAKIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdCgpOwpAQCAtOTQsNyArOTUsMTIgQEAgcHVibGljOgog
ICAgIGJvb2wgbWF5QXV0b21hdGljYWxseVNob3dWaWRlb09wdGltaXplZCgpOwogCiBwcm90ZWN0
ZWQ6Ci0gICAgICAgIAorICAgIHZvaWQgc2V0dXBGdWxsc2NyZWVuSW50ZXJuYWwoUGxhdGZvcm1M
YXllciYsIEludFJlY3QgaW5pdGlhbFJlY3QsIFVJVmlldyAqLCBIVE1MTWVkaWFFbGVtZW50OjpW
aWRlb0Z1bGxzY3JlZW5Nb2RlLCBib29sIGFsbG93T3B0aW1pemVkRnVsbHNjcmVlbik7CisgICAg
dm9pZCBlbnRlckZ1bGxzY3JlZW5PcHRpbWl6ZWQoKTsKKyAgICB2b2lkIGVudGVyRnVsbHNjcmVl
blN0YW5kYXJkKCk7CisgICAgdm9pZCBleGl0RnVsbHNjcmVlbkludGVybmFsKEludFJlY3QgZmlu
YWxSZWN0KTsKKyAgICB2b2lkIGNsZWFudXBGdWxsc2NyZWVuSW50ZXJuYWwoKTsKKwogICAgIFJl
dGFpblB0cjxXZWJBVlBsYXllckNvbnRyb2xsZXI+IG1fcGxheWVyQ29udHJvbGxlcjsKICAgICBS
ZXRhaW5QdHI8QVZQbGF5ZXJWaWV3Q29udHJvbGxlcj4gbV9wbGF5ZXJWaWV3Q29udHJvbGxlcjsK
ICAgICBSZXRhaW5QdHI8Q0FMYXllcj4gbV92aWRlb0xheWVyOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1t
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0Lm1tCmluZGV4IGJmZGZjZmQ3NDRlZWI2NWM3YTY3MzFkMjYwMzM0MmQzZjcxNjJhM2Yu
LmYzZTJmZWQ2MzIwNjM4YTMzMjMxNzFmODdiNzMxM2UyMWQ5Nzg4NWQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQubW0KQEAgLTY0OSwxMSArNjQ5LDExIEBAIHZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVy
KFdlYlZpCiAKIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldER1cmF0
aW9uKGRvdWJsZSBkdXJhdGlvbikKIHsKLSAgICBXZWJBVlBsYXllckNvbnRyb2xsZXIqIHBsYXll
ckNvbnRyb2xsZXIgPSB0aGlzLT5wbGF5ZXJDb250cm9sbGVyKCk7CisgICAgUmVmUHRyPFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBzdHJvbmdUaGlzKHRoaXMpOwogICAgIAotICAg
IF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBwcm90ZWN0
KHRoaXMpOwotICAgIAotICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVl
KCksIF57CisgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3N0
cm9uZ1RoaXMsIGR1cmF0aW9uXSB7CisgICAgICAgIFdlYkFWUGxheWVyQ29udHJvbGxlciogcGxh
eWVyQ29udHJvbGxlciA9IHN0cm9uZ1RoaXMtPnBsYXllckNvbnRyb2xsZXIoKTsKKwogICAgICAg
ICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNzAx
NyB1c2UgY29ycmVjdCB2YWx1ZXMgaW5zdGVhZCBvZiBkdXJhdGlvbiBmb3IgYWxsIHRoZXNlCiAg
ICAgICAgIHBsYXllckNvbnRyb2xsZXIuY29udGVudER1cmF0aW9uID0gZHVyYXRpb247CiAgICAg
ICAgIHBsYXllckNvbnRyb2xsZXIubWF4VGltZSA9IGR1cmF0aW9uOwpAQCAtNjY4LDU5ICs2Njgs
NDMgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0RHVyYXRpb24o
ZG91YmxlIGR1cmF0aW9uKQogICAgICAgICBwbGF5ZXJDb250cm9sbGVyLmNhblNlZWsgPSBZRVM7
CiAgICAgICAgIHBsYXllckNvbnRyb2xsZXIubWluVGltZSA9IDA7CiAgICAgICAgIHBsYXllckNv
bnRyb2xsZXIuc3RhdHVzID0gQVZQbGF5ZXJDb250cm9sbGVyU3RhdHVzUmVhZHlUb1BsYXk7Ci0g
ICAgICAgIAotICAgICAgICBXZWJUaHJlYWRSdW4oXnsKLSAgICAgICAgICAgIHByb3RlY3QgPSBu
dWxscHRyOwotICAgICAgICB9KTsKICAgICB9KTsKIH0KIAogdm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdDo6c2V0Q3VycmVudFRpbWUoZG91YmxlIGN1cnJlbnRUaW1lLCBkb3Vi
bGUgYW5jaG9yVGltZSkKIHsKLSAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdD4gcHJvdGVjdCh0aGlzKTsKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQ+IHN0cm9uZ1RoaXModGhpcyk7CiAgICAgCi0gICAgZGlzcGF0Y2hf
YXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKLSAgICAgICAgTlNUaW1lSW50ZXJ2
YWwgYW5jaG9yVGltZVN0YW1wID0gIVtwbGF5ZXJDb250cm9sbGVyKCkgcmF0ZV0gPyBOQU4gOiBh
bmNob3JUaW1lOworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCks
IFtzdHJvbmdUaGlzLCBjdXJyZW50VGltZSwgYW5jaG9yVGltZV0geworICAgICAgICBOU1RpbWVJ
bnRlcnZhbCBhbmNob3JUaW1lU3RhbXAgPSAhW3N0cm9uZ1RoaXMtPnBsYXllckNvbnRyb2xsZXIo
KSByYXRlXSA/IE5BTiA6IGFuY2hvclRpbWU7CiAgICAgICAgIEFWVmFsdWVUaW1pbmcgKnRpbWlu
ZyA9IFtnZXRBVlZhbHVlVGltaW5nQ2xhc3MoKSB2YWx1ZVRpbWluZ1dpdGhBbmNob3JWYWx1ZTpj
dXJyZW50VGltZQogICAgICAgICAgICAgYW5jaG9yVGltZVN0YW1wOmFuY2hvclRpbWVTdGFtcCBy
YXRlOjBdOwotICAgICAgICBwbGF5ZXJDb250cm9sbGVyKCkudGltaW5nID0gdGltaW5nOwotICAg
ICAgICAKLSAgICAgICAgV2ViVGhyZWFkUnVuKF57Ci0gICAgICAgICAgICBwcm90ZWN0ID0gbnVs
bHB0cjsKLSAgICAgICAgfSk7CisgICAgICAgIHN0cm9uZ1RoaXMtPnBsYXllckNvbnRyb2xsZXIo
KS50aW1pbmcgPSB0aW1pbmc7CiAgICAgfSk7CiB9CiAKIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQ6OnNldFJhdGUoYm9vbCBpc1BsYXlpbmcsIGZsb2F0IHBsYXliYWNrUmF0
ZSkKIHsKLSAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dD4gcHJvdGVjdCh0aGlzKTsKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQ+IHN0cm9uZ1RoaXModGhpcyk7CiAgICAgCi0gICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0
Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKLSAgICAgICAgcGxheWVyQ29udHJvbGxlcigpLnJhdGUg
PSBpc1BsYXlpbmcgPyBwbGF5YmFja1JhdGUgOiAwLjsKLSAgICAgICAgCi0gICAgICAgIFdlYlRo
cmVhZFJ1biheewotICAgICAgICAgICAgcHJvdGVjdCA9IG51bGxwdHI7Ci0gICAgICAgIH0pOwor
ICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtzdHJvbmdUaGlz
LCBpc1BsYXlpbmcsIHBsYXliYWNrUmF0ZV0geworICAgICAgICBzdHJvbmdUaGlzLT5wbGF5ZXJD
b250cm9sbGVyKCkucmF0ZSA9IGlzUGxheWluZyA/IHBsYXliYWNrUmF0ZSA6IDAuOwogICAgIH0p
OwogfQogCiB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXRWaWRlb0Rp
bWVuc2lvbnMoYm9vbCBoYXNWaWRlbywgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCkKIHsKLSAg
ICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gcHJvdGVj
dCh0aGlzKTsKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHN0
cm9uZ1RoaXModGhpcyk7CiAgICAgCi0gICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21h
aW5fcXVldWUoKSwgXnsKLSAgICAgICAgcGxheWVyQ29udHJvbGxlcigpLmhhc0VuYWJsZWRWaWRl
byA9IGhhc1ZpZGVvOwotICAgICAgICBwbGF5ZXJDb250cm9sbGVyKCkuY29udGVudERpbWVuc2lv
bnMgPSBDR1NpemVNYWtlKHdpZHRoLCBoZWlnaHQpOwotICAgICAgICAKLSAgICAgICAgV2ViVGhy
ZWFkUnVuKF57Ci0gICAgICAgICAgICBwcm90ZWN0ID0gbnVsbHB0cjsKLSAgICAgICAgfSk7Cisg
ICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3N0cm9uZ1RoaXMs
IGhhc1ZpZGVvLCB3aWR0aCwgaGVpZ2h0XSB7CisgICAgICAgIHN0cm9uZ1RoaXMtPnBsYXllckNv
bnRyb2xsZXIoKS5oYXNFbmFibGVkVmlkZW8gPSBoYXNWaWRlbzsKKyAgICAgICAgc3Ryb25nVGhp
cy0+cGxheWVyQ29udHJvbGxlcigpLmNvbnRlbnREaW1lbnNpb25zID0gQ0dTaXplTWFrZSh3aWR0
aCwgaGVpZ2h0KTsKICAgICB9KTsKIH0KIAogdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdDo6c2V0U2Vla2FibGVSYW5nZXMoY29uc3QgVGltZVJhbmdlcyYgdGltZVJhbmdlcykK
IHsKLSAgICBOU011dGFibGVBcnJheSogc2Vla2FibGVSYW5nZXMgPSBbTlNNdXRhYmxlQXJyYXkg
YXJyYXldOworICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gc2Vla2FibGVSYW5nZXMgPSBh
ZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKICAgICBFeGNlcHRpb25Db2Rl
IGV4Y2VwdGlvbkNvZGU7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGltZVJhbmdl
cy5sZW5ndGgoKTsgaSsrKSB7CkBAIC03MzEsMTQgKzcxNSwxMCBAQCB2b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXRTZWVrYWJsZVJhbmdlcyhjb25zdCBUaW1lUmFuZ2Vz
JiB0aW1lUgogICAgICAgICBbc2Vla2FibGVSYW5nZXMgYWRkT2JqZWN0OltOU1ZhbHVlIHZhbHVl
V2l0aENNVGltZVJhbmdlOnJhbmdlXV07CiAgICAgfQogICAgIAotICAgIF9fYmxvY2sgUmVmUHRy
PFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBwcm90ZWN0KHRoaXMpOworICAgIFJl
ZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gc3Ryb25nVGhpcyh0aGlzKTsK
ICAgICAKLSAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeewot
ICAgICAgICBwbGF5ZXJDb250cm9sbGVyKCkuc2Vla2FibGVUaW1lUmFuZ2VzID0gc2Vla2FibGVS
YW5nZXM7Ci0gICAgICAgIAotICAgICAgICBXZWJUaHJlYWRSdW4oXnsKLSAgICAgICAgICAgIHBy
b3RlY3QgPSBudWxscHRyOwotICAgICAgICB9KTsKKyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRj
aF9nZXRfbWFpbl9xdWV1ZSgpLCBbc3Ryb25nVGhpcywgc2Vla2FibGVSYW5nZXNdIHsKKyAgICAg
ICAgc3Ryb25nVGhpcy0+cGxheWVyQ29udHJvbGxlcigpLnNlZWthYmxlVGltZVJhbmdlcyA9IHNl
ZWthYmxlUmFuZ2VzLmdldCgpOwogICAgIH0pOwogfQogCkBAIC03NDcsOSArNzI3LDkgQEAgdm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0Q2FuUGxheUZhc3RSZXZlcnNl
KGJvb2wgY2FuUGxheUZhc3RSZXYKICAgICBwbGF5ZXJDb250cm9sbGVyKCkuY2FuU2NhbkJhY2t3
YXJkID0gY2FuUGxheUZhc3RSZXZlcnNlOwogfQogCi1zdGF0aWMgTlNNdXRhYmxlQXJyYXkgKm1l
ZGlhU2VsZWN0aW9uT3B0aW9ucyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgb3B0aW9ucykKK3N0YXRp
YyBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IG1lZGlhU2VsZWN0aW9uT3B0aW9ucyhjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgb3B0aW9ucykKIHsKLSAgICBOU011dGFibGVBcnJheSAqd2ViT3B0aW9u
cyA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTpvcHRpb25zLnNpemUoKV07Cisg
ICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiB3ZWJPcHRpb25zID0gYWRvcHROUyhbW05TTXV0
YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5Om9wdGlvbnMuc2l6ZSgpXSk7CiAgICAg
Zm9yIChhdXRvJiBuYW1lIDogb3B0aW9ucykgewogICAgICAgICBSZXRhaW5QdHI8V2ViQVZNZWRp
YVNlbGVjdGlvbk9wdGlvbj4gd2ViT3B0aW9uID0gYWRvcHROUyhbW1dlYkFWTWVkaWFTZWxlY3Rp
b25PcHRpb24gYWxsb2NdIGluaXRdKTsKICAgICAgICAgW3dlYk9wdGlvbiBzZXRMb2NhbGl6ZWRE
aXNwbGF5TmFtZTpuYW1lXTsKQEAgLTc2MCwzMyArNzQwLDI1IEBAIHN0YXRpYyBOU011dGFibGVB
cnJheSAqbWVkaWFTZWxlY3Rpb25PcHRpb25zKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBvcHRpb25z
KQogCiB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXRBdWRpb01lZGlh
U2VsZWN0aW9uT3B0aW9ucyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgb3B0aW9ucywgdWludDY0X3Qg
c2VsZWN0ZWRJbmRleCkKIHsKLSAgICBOU011dGFibGVBcnJheSAqd2ViT3B0aW9ucyA9IG1lZGlh
U2VsZWN0aW9uT3B0aW9ucyhvcHRpb25zKTsKLSAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gcHJvdGVjdCh0aGlzKTsKKyAgICBSZXRhaW5QdHI8TlNN
dXRhYmxlQXJyYXk+IHdlYk9wdGlvbnMgPSBtZWRpYVNlbGVjdGlvbk9wdGlvbnMob3B0aW9ucyk7
CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBzdHJvbmdUaGlz
KHRoaXMpOwogICAgIAotICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVl
KCksIF57Ci0gICAgICAgIHBsYXllckNvbnRyb2xsZXIoKS5hdWRpb01lZGlhU2VsZWN0aW9uT3B0
aW9ucyA9IHdlYk9wdGlvbnM7Ci0gICAgICAgIGlmIChzZWxlY3RlZEluZGV4IDwgd2ViT3B0aW9u
cy5jb3VudCkKLSAgICAgICAgICAgIHBsYXllckNvbnRyb2xsZXIoKS5jdXJyZW50QXVkaW9NZWRp
YVNlbGVjdGlvbk9wdGlvbiA9IHdlYk9wdGlvbnNbKHNpemVfdClzZWxlY3RlZEluZGV4XTsKLSAg
ICAgICAgCi0gICAgICAgIFdlYlRocmVhZFJ1biheewotICAgICAgICAgICAgcHJvdGVjdCA9IG51
bGxwdHI7Ci0gICAgICAgIH0pOworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWlu
X3F1ZXVlKCksIFt3ZWJPcHRpb25zLCBzdHJvbmdUaGlzLCBzZWxlY3RlZEluZGV4XSB7CisgICAg
ICAgIHN0cm9uZ1RoaXMtPnBsYXllckNvbnRyb2xsZXIoKS5hdWRpb01lZGlhU2VsZWN0aW9uT3B0
aW9ucyA9IHdlYk9wdGlvbnMuZ2V0KCk7CisgICAgICAgIGlmIChzZWxlY3RlZEluZGV4IDwgW3dl
Yk9wdGlvbnMgY291bnRdKQorICAgICAgICAgICAgc3Ryb25nVGhpcy0+cGxheWVyQ29udHJvbGxl
cigpLmN1cnJlbnRBdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uID0gW3dlYk9wdGlvbnMgb2JqZWN0
QXRJbmRleDpzZWxlY3RlZEluZGV4XTsKICAgICB9KTsKIH0KIAogdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0TGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucyhjb25z
dCBWZWN0b3I8U3RyaW5nPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKIHsKLSAg
ICBOU011dGFibGVBcnJheSAqd2ViT3B0aW9ucyA9IG1lZGlhU2VsZWN0aW9uT3B0aW9ucyhvcHRp
b25zKTsKLSAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dD4gcHJvdGVjdCh0aGlzKTsKLSAgICAKLSAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRf
bWFpbl9xdWV1ZSgpLCBeewotICAgICAgICBwbGF5ZXJDb250cm9sbGVyKCkubGVnaWJsZU1lZGlh
U2VsZWN0aW9uT3B0aW9ucyA9IHdlYk9wdGlvbnM7Ci0gICAgICAgIGlmIChzZWxlY3RlZEluZGV4
IDwgd2ViT3B0aW9ucy5jb3VudCkKLSAgICAgICAgICAgIHBsYXllckNvbnRyb2xsZXIoKS5jdXJy
ZW50TGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uID0gd2ViT3B0aW9uc1soc2l6ZV90KXNlbGVj
dGVkSW5kZXhdOwotICAgICAgICAKLSAgICAgICAgV2ViVGhyZWFkUnVuKF57Ci0gICAgICAgICAg
ICBwcm90ZWN0ID0gbnVsbHB0cjsKLSAgICAgICAgfSk7CisgICAgUmV0YWluUHRyPE5TTXV0YWJs
ZUFycmF5PiB3ZWJPcHRpb25zID0gbWVkaWFTZWxlY3Rpb25PcHRpb25zKG9wdGlvbnMpOworICAg
IFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gc3Ryb25nVGhpcyh0aGlz
KTsKKworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFt3ZWJP
cHRpb25zLCBzdHJvbmdUaGlzLCBzZWxlY3RlZEluZGV4XSB7CisgICAgICAgIHN0cm9uZ1RoaXMt
PnBsYXllckNvbnRyb2xsZXIoKS5sZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zID0gd2ViT3B0
aW9ucy5nZXQoKTsKKyAgICAgICAgaWYgKHNlbGVjdGVkSW5kZXggPCBbd2ViT3B0aW9ucyBjb3Vu
dF0pCisgICAgICAgICAgICBzdHJvbmdUaGlzLT5wbGF5ZXJDb250cm9sbGVyKCkuY3VycmVudExl
Z2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbiA9IFt3ZWJPcHRpb25zIG9iamVjdEF0SW5kZXg6c2Vs
ZWN0ZWRJbmRleF07CiAgICAgfSk7CiB9CiAKQEAgLTc5OCwyMDEgKzc3MCwyMTcgQEAgdm9pZCBX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0RXh0ZXJuYWxQbGF5YmFjayhib29s
IGVuYWJsZWQsIEV4dGVybmEKICAgICBlbHNlIGlmICh0YXJnZXRUeXBlID09IFRhcmdldFR5cGVU
Vk91dCkKICAgICAgICAgZXh0ZXJuYWxQbGF5YmFja1R5cGUgPSBBVlBsYXllckNvbnRyb2xsZXJF
eHRlcm5hbFBsYXliYWNrVHlwZVRWT3V0OwogCi0gICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHByb3RlY3QodGhpcyk7Ci0gICAgCi0gICAgZGlzcGF0
Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKLSAgICAgICAgcGxheWVyQ29u
dHJvbGxlcigpLmV4dGVybmFsUGxheWJhY2tBaXJQbGF5RGV2aWNlTG9jYWxpemVkTmFtZSA9IGxv
Y2FsaXplZERldmljZU5hbWU7Ci0gICAgICAgIHBsYXllckNvbnRyb2xsZXIoKS5leHRlcm5hbFBs
YXliYWNrVHlwZSA9IGV4dGVybmFsUGxheWJhY2tUeXBlOwotICAgICAgICBwbGF5ZXJDb250cm9s
bGVyKCkuZXh0ZXJuYWxQbGF5YmFja0FjdGl2ZSA9IGVuYWJsZWQ7Ci0gICAgICAgIFttX3ZpZGVv
TGF5ZXJDb250YWluZXIuZ2V0KCkgc2V0SGlkZGVuOmVuYWJsZWRdOwotICAgICAgICAKLSAgICAg
ICAgV2ViVGhyZWFkUnVuKF57Ci0gICAgICAgICAgICBwcm90ZWN0ID0gbnVsbHB0cjsKLSAgICAg
ICAgfSk7CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBzdHJv
bmdUaGlzKHRoaXMpOworCisgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVl
dWUoKSwgW3N0cm9uZ1RoaXMsIGVuYWJsZWQsIGxvY2FsaXplZERldmljZU5hbWUsIGV4dGVybmFs
UGxheWJhY2tUeXBlXSB7CisgICAgICAgIFdlYkFWUGxheWVyQ29udHJvbGxlciogcGxheWVyQ29u
dHJvbGxlciA9IHN0cm9uZ1RoaXMtPnBsYXllckNvbnRyb2xsZXIoKTsKKyAgICAgICAgcGxheWVy
Q29udHJvbGxlci5leHRlcm5hbFBsYXliYWNrQWlyUGxheURldmljZUxvY2FsaXplZE5hbWUgPSBs
b2NhbGl6ZWREZXZpY2VOYW1lOworICAgICAgICBwbGF5ZXJDb250cm9sbGVyLmV4dGVybmFsUGxh
eWJhY2tUeXBlID0gZXh0ZXJuYWxQbGF5YmFja1R5cGU7CisgICAgICAgIHBsYXllckNvbnRyb2xs
ZXIuZXh0ZXJuYWxQbGF5YmFja0FjdGl2ZSA9IGVuYWJsZWQ7CisgICAgICAgIFtzdHJvbmdUaGlz
LT5tX3ZpZGVvTGF5ZXJDb250YWluZXIuZ2V0KCkgc2V0SGlkZGVuOmVuYWJsZWRdOwogICAgIH0p
OwogfQogCiB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXR1cEZ1bGxz
Y3JlZW4oUGxhdGZvcm1MYXllciYgdmlkZW9MYXllciwgV2ViQ29yZTo6SW50UmVjdCBpbml0aWFs
UmVjdCwgVUlWaWV3KiBwYXJlbnRWaWV3LCBIVE1MTWVkaWFFbGVtZW50OjpWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlIG1vZGUsIGJvb2wgYWxsb3dPcHRpbWl6ZWRGdWxsc2NyZWVuKQogewotICAgIF9fYmxv
Y2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBwcm90ZWN0KHRoaXMp
OwotICAgIAorICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gc3Ry
b25nVGhpcyh0aGlzKTsKKwogICAgIEFTU0VSVChtb2RlICE9IEhUTUxNZWRpYUVsZW1lbnQ6OlZp
ZGVvRnVsbHNjcmVlbk1vZGVOb25lKTsKICAgICBtX3ZpZGVvTGF5ZXIgPSAmdmlkZW9MYXllcjsK
LSAgICAKKwogICAgIG1fbW9kZSA9IG1vZGU7Ci0gICAgCi0gICAgZGlzcGF0Y2hfYXN5bmMoZGlz
cGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKLQotICAgICAgICBbQ0FUcmFuc2FjdGlvbiBiZWdp
bl07Ci0gICAgICAgIFtDQVRyYW5zYWN0aW9uIHNldERpc2FibGVBY3Rpb25zOllFU107Ci0gICAg
ICAgIG1fcGFyZW50VmlldyA9IHBhcmVudFZpZXc7Ci0gICAgICAgIG1fcGFyZW50V2luZG93ID0g
cGFyZW50Vmlldy53aW5kb3c7Ci0KLSAgICAgICAgaWYgKCFhcHBsaWNhdGlvbklzQWRTaGVldCgp
KSB7Ci0gICAgICAgICAgICBtX3dpbmRvdyA9IGFkb3B0TlMoW2FsbG9jVUlXaW5kb3dJbnN0YW5j
ZSgpIGluaXRXaXRoRnJhbWU6W1tnZXRVSVNjcmVlbkNsYXNzKCkgbWFpblNjcmVlbl0gYm91bmRz
XV0pOwotICAgICAgICAgICAgW21fd2luZG93IHNldEJhY2tncm91bmRDb2xvcjpbZ2V0VUlDb2xv
ckNsYXNzKCkgY2xlYXJDb2xvcl1dOwotICAgICAgICAgICAgbV92aWV3Q29udHJvbGxlciA9IGFk
b3B0TlMoW2FsbG9jVUlWaWV3Q29udHJvbGxlckluc3RhbmNlKCkgaW5pdF0pOwotICAgICAgICAg
ICAgW1ttX3ZpZXdDb250cm9sbGVyIHZpZXddIHNldEZyYW1lOlttX3dpbmRvdyBib3VuZHNdXTsK
LSAgICAgICAgICAgIFttX3dpbmRvdyBzZXRSb290Vmlld0NvbnRyb2xsZXI6bV92aWV3Q29udHJv
bGxlci5nZXQoKV07Ci0gICAgICAgICAgICBbbV93aW5kb3cgbWFrZUtleUFuZFZpc2libGVdOwot
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBbbV92aWRlb0xheWVyIHJlbW92ZUZyb21TdXBl
cmxheWVyXTsKLSAgICAgICAgCi0gICAgICAgIG1fdmlkZW9MYXllckNvbnRhaW5lciA9IFtXZWJB
VlZpZGVvTGF5ZXIgdmlkZW9MYXllcl07Ci0gICAgICAgIFttX3ZpZGVvTGF5ZXJDb250YWluZXIg
c2V0SGlkZGVuOnBsYXllckNvbnRyb2xsZXIoKS5leHRlcm5hbFBsYXliYWNrQWN0aXZlXTsKLSAg
ICAgICAgW21fdmlkZW9MYXllckNvbnRhaW5lciBzZXRWaWRlb1N1YmxheWVyOm1fdmlkZW9MYXll
ci5nZXQoKV07Ci0gICAgICAgIAotICAgICAgICBDR1NpemUgdmlkZW9TaXplID0gcGxheWVyQ29u
dHJvbGxlcigpLmNvbnRlbnREaW1lbnNpb25zOwotICAgICAgICBDR1JlY3QgdmlkZW9SZWN0ID0g
Q0dSZWN0TWFrZSgwLCAwLCB2aWRlb1NpemUud2lkdGgsIHZpZGVvU2l6ZS5oZWlnaHQpOwotICAg
ICAgICBbbV92aWRlb0xheWVyQ29udGFpbmVyIHNldFZpZGVvUmVjdDp2aWRlb1JlY3RdOwotCi0g
ICAgICAgIG1fcGxheWVyVmlld0NvbnRyb2xsZXIgPSBhZG9wdE5TKFthbGxvY0FWUGxheWVyVmll
d0NvbnRyb2xsZXJJbnN0YW5jZSgpIGluaXRXaXRoVmlkZW9MYXllcjptX3ZpZGVvTGF5ZXJDb250
YWluZXIuZ2V0KCldKTsKLSAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc2V0U2hvd3NQ
bGF5YmFja0NvbnRyb2xzOk5PXTsKLSAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc2V0
UGxheWVyQ29udHJvbGxlcjooQVZQbGF5ZXJDb250cm9sbGVyICopcGxheWVyQ29udHJvbGxlcigp
XTsKLSAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc2V0RGVsZWdhdGU6cGxheWVyQ29u
dHJvbGxlcigpXTsKLSAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc2V0QWxsb3dzT3B0
aW1pemVkRnVsbHNjcmVlbjphbGxvd09wdGltaXplZEZ1bGxzY3JlZW5dOwotCi0gICAgICAgIFtt
X3ZpZGVvTGF5ZXJDb250YWluZXIgc2V0UGxheWVyVmlld0NvbnRyb2xsZXI6bV9wbGF5ZXJWaWV3
Q29udHJvbGxlci5nZXQoKV07Ci0KLSAgICAgICAgaWYgKG1fdmlld0NvbnRyb2xsZXIpIHsKLSAg
ICAgICAgICAgIFttX3ZpZXdDb250cm9sbGVyIGFkZENoaWxkVmlld0NvbnRyb2xsZXI6bV9wbGF5
ZXJWaWV3Q29udHJvbGxlci5nZXQoKV07Ci0gICAgICAgICAgICBbW21fdmlld0NvbnRyb2xsZXIg
dmlld10gYWRkU3VidmlldzpbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XV07Ci0gICAgICAg
ICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XS5mcmFtZSA9IFtwYXJlbnRWaWV3IGNv
bnZlcnRSZWN0OmluaXRpYWxSZWN0IHRvVmlldzpuaWxdOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgW3BhcmVudFZpZXcgYWRkU3VidmlldzpbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2
aWV3XV07Ci0gICAgICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XS5mcmFtZSA9
IGluaXRpYWxSZWN0OwotICAgICAgICB9CiAKLSAgICAgICAgW1ttX3BsYXllclZpZXdDb250cm9s
bGVyIHZpZXddIHNldEJhY2tncm91bmRDb2xvcjpbZ2V0VUlDb2xvckNsYXNzKCkgY2xlYXJDb2xv
cl1dOwotICAgICAgICBbW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10gc2V0TmVlZHNMYXlv
dXRdOwotICAgICAgICBbW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10gbGF5b3V0SWZOZWVk
ZWRdOworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtzdHJv
bmdUaGlzLCAmdmlkZW9MYXllciwgaW5pdGlhbFJlY3QsIHBhcmVudFZpZXcsIG1vZGUsIGFsbG93
T3B0aW1pemVkRnVsbHNjcmVlbl0geworICAgICAgICBzdHJvbmdUaGlzLT5zZXR1cEZ1bGxzY3Jl
ZW5JbnRlcm5hbCh2aWRlb0xheWVyLCBpbml0aWFsUmVjdCwgcGFyZW50VmlldywgbW9kZSwgYWxs
b3dPcHRpbWl6ZWRGdWxsc2NyZWVuKTsKKyAgICB9KTsKK30KIAotICAgICAgICBbQ0FUcmFuc2Fj
dGlvbiBjb21taXRdOwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0
dXBGdWxsc2NyZWVuSW50ZXJuYWwoUGxhdGZvcm1MYXllciYgdmlkZW9MYXllciwgV2ViQ29yZTo6
SW50UmVjdCBpbml0aWFsUmVjdCwgVUlWaWV3KiBwYXJlbnRWaWV3LCBIVE1MTWVkaWFFbGVtZW50
OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUsIGJvb2wgYWxsb3dPcHRpbWl6ZWRGdWxsc2NyZWVu
KQoreworICAgIFVOVVNFRF9QQVJBTSh2aWRlb0xheWVyKTsKKyAgICBVTlVTRURfUEFSQU0obW9k
ZSk7CiAKLSAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwg
XnsKLSAgICAgICAgICAgIFdlYlRocmVhZFJ1biheewotICAgICAgICAgICAgICAgIGlmIChtX2Z1
bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKLSAgICAgICAgICAgICAgICAgICAgbV9mdWxsc2NyZWVu
Q2hhbmdlT2JzZXJ2ZXItPmRpZFNldHVwRnVsbHNjcmVlbigpOworICAgIFtDQVRyYW5zYWN0aW9u
IGJlZ2luXTsKKyAgICBbQ0FUcmFuc2FjdGlvbiBzZXREaXNhYmxlQWN0aW9uczpZRVNdOworICAg
IG1fcGFyZW50VmlldyA9IHBhcmVudFZpZXc7CisgICAgbV9wYXJlbnRXaW5kb3cgPSBwYXJlbnRW
aWV3LndpbmRvdzsKKworICAgIGlmICghYXBwbGljYXRpb25Jc0FkU2hlZXQoKSkgeworICAgICAg
ICBtX3dpbmRvdyA9IGFkb3B0TlMoW2FsbG9jVUlXaW5kb3dJbnN0YW5jZSgpIGluaXRXaXRoRnJh
bWU6W1tnZXRVSVNjcmVlbkNsYXNzKCkgbWFpblNjcmVlbl0gYm91bmRzXV0pOworICAgICAgICBb
bV93aW5kb3cgc2V0QmFja2dyb3VuZENvbG9yOltnZXRVSUNvbG9yQ2xhc3MoKSBjbGVhckNvbG9y
XV07CisgICAgICAgIG1fdmlld0NvbnRyb2xsZXIgPSBhZG9wdE5TKFthbGxvY1VJVmlld0NvbnRy
b2xsZXJJbnN0YW5jZSgpIGluaXRdKTsKKyAgICAgICAgW1ttX3ZpZXdDb250cm9sbGVyIHZpZXdd
IHNldEZyYW1lOlttX3dpbmRvdyBib3VuZHNdXTsKKyAgICAgICAgW21fd2luZG93IHNldFJvb3RW
aWV3Q29udHJvbGxlcjptX3ZpZXdDb250cm9sbGVyLmdldCgpXTsKKyAgICAgICAgW21fd2luZG93
IG1ha2VLZXlBbmRWaXNpYmxlXTsKKyAgICB9CiAKLSAgICAgICAgICAgICAgICBwcm90ZWN0ID0g
bnVsbHB0cjsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9KTsKKyAgICBbbV92aWRlb0xheWVy
IHJlbW92ZUZyb21TdXBlcmxheWVyXTsKKworICAgIG1fdmlkZW9MYXllckNvbnRhaW5lciA9IFtX
ZWJBVlZpZGVvTGF5ZXIgdmlkZW9MYXllcl07CisgICAgW21fdmlkZW9MYXllckNvbnRhaW5lciBz
ZXRIaWRkZW46cGxheWVyQ29udHJvbGxlcigpLmV4dGVybmFsUGxheWJhY2tBY3RpdmVdOworICAg
IFttX3ZpZGVvTGF5ZXJDb250YWluZXIgc2V0VmlkZW9TdWJsYXllcjptX3ZpZGVvTGF5ZXIuZ2V0
KCldOworCisgICAgQ0dTaXplIHZpZGVvU2l6ZSA9IHBsYXllckNvbnRyb2xsZXIoKS5jb250ZW50
RGltZW5zaW9uczsKKyAgICBDR1JlY3QgdmlkZW9SZWN0ID0gQ0dSZWN0TWFrZSgwLCAwLCB2aWRl
b1NpemUud2lkdGgsIHZpZGVvU2l6ZS5oZWlnaHQpOworICAgIFttX3ZpZGVvTGF5ZXJDb250YWlu
ZXIgc2V0VmlkZW9SZWN0OnZpZGVvUmVjdF07CisKKyAgICBtX3BsYXllclZpZXdDb250cm9sbGVy
ID0gYWRvcHROUyhbYWxsb2NBVlBsYXllclZpZXdDb250cm9sbGVySW5zdGFuY2UoKSBpbml0V2l0
aFZpZGVvTGF5ZXI6bV92aWRlb0xheWVyQ29udGFpbmVyLmdldCgpXSk7CisgICAgW21fcGxheWVy
Vmlld0NvbnRyb2xsZXIgc2V0U2hvd3NQbGF5YmFja0NvbnRyb2xzOk5PXTsKKyAgICBbbV9wbGF5
ZXJWaWV3Q29udHJvbGxlciBzZXRQbGF5ZXJDb250cm9sbGVyOihBVlBsYXllckNvbnRyb2xsZXIg
KilwbGF5ZXJDb250cm9sbGVyKCldOworICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHNldERl
bGVnYXRlOnBsYXllckNvbnRyb2xsZXIoKV07CisgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIg
c2V0QWxsb3dzT3B0aW1pemVkRnVsbHNjcmVlbjphbGxvd09wdGltaXplZEZ1bGxzY3JlZW5dOwor
CisgICAgW21fdmlkZW9MYXllckNvbnRhaW5lciBzZXRQbGF5ZXJWaWV3Q29udHJvbGxlcjptX3Bs
YXllclZpZXdDb250cm9sbGVyLmdldCgpXTsKKworICAgIGlmIChtX3ZpZXdDb250cm9sbGVyKSB7
CisgICAgICAgIFttX3ZpZXdDb250cm9sbGVyIGFkZENoaWxkVmlld0NvbnRyb2xsZXI6bV9wbGF5
ZXJWaWV3Q29udHJvbGxlci5nZXQoKV07CisgICAgICAgIFtbbV92aWV3Q29udHJvbGxlciB2aWV3
XSBhZGRTdWJ2aWV3OlttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddXTsKKyAgICAgICAgW21f
cGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10uZnJhbWUgPSBbcGFyZW50VmlldyBjb252ZXJ0UmVj
dDppbml0aWFsUmVjdCB0b1ZpZXc6bmlsXTsKKyAgICB9IGVsc2UgeworICAgICAgICBbcGFyZW50
VmlldyBhZGRTdWJ2aWV3OlttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddXTsKKyAgICAgICAg
W21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10uZnJhbWUgPSBpbml0aWFsUmVjdDsKKyAgICB9
CisKKyAgICBbW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10gc2V0QmFja2dyb3VuZENvbG9y
OltnZXRVSUNvbG9yQ2xhc3MoKSBjbGVhckNvbG9yXV07CisgICAgW1ttX3BsYXllclZpZXdDb250
cm9sbGVyIHZpZXddIHNldE5lZWRzTGF5b3V0XTsKKyAgICBbW21fcGxheWVyVmlld0NvbnRyb2xs
ZXIgdmlld10gbGF5b3V0SWZOZWVkZWRdOworCisgICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsK
KworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gc3Ryb25nVGhp
cyh0aGlzKTsKKyAgICBXZWJUaHJlYWRSdW4oW3N0cm9uZ1RoaXNdIHsKKyAgICAgICAgaWYgKHN0
cm9uZ1RoaXMtPm1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQorICAgICAgICAgICAgc3Ryb25n
VGhpcy0+bV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZFNldHVwRnVsbHNjcmVlbigpOwog
ICAgIH0pOwogfQogCiB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjplbnRl
ckZ1bGxzY3JlZW4oKQogewotICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0PiBwcm90ZWN0KHRoaXMpOwotICAgIAogICAgIG1fZXhpdENvbXBsZXRlZCA9
IGZhbHNlOwogICAgIG1fZXhpdFJlcXVlc3RlZCA9IGZhbHNlOwogICAgIG1fZW50ZXJSZXF1ZXN0
ZWQgPSB0cnVlOwotICAgIAotICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1
ZXVlKCksIF57Ci0gICAgICAgIFttX3ZpZGVvTGF5ZXJDb250YWluZXIgc2V0QmFja2dyb3VuZENv
bG9yOltbZ2V0VUlDb2xvckNsYXNzKCkgYmxhY2tDb2xvcl0gQ0dDb2xvcl1dOwotICAgICAgICBp
ZiAobV9tb2RlID09IEhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGVPcHRpbWl6
ZWQpIHsKLSAgICAgICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHN0YXJ0T3B0aW1pemVk
RnVsbHNjcmVlbldpdGhTdGFydENvbXBsZXRpb25IYW5kbGVyOl4oQk9PTCBzdWNjZXNzLCBOU0Vy
cm9yICopIHsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBbbV9wbGF5ZXJWaWV3
Q29udHJvbGxlciBzZXRTaG93c1BsYXliYWNrQ29udHJvbHM6WUVTXTsKLSAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICBXZWJUaHJlYWRSdW4oXnsKLSAgICAgICAgICAgICAgICAgICAg
W21fd2luZG93IHNldEhpZGRlbjpZRVNdOwotICAgICAgICAgICAgICAgICAgICBpZiAobV9mdWxs
c2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2Z1bGxzY3Jl
ZW5DaGFuZ2VPYnNlcnZlci0+ZGlkRW50ZXJGdWxsc2NyZWVuKCk7Ci0gICAgICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwtPnJlcXVlc3RFeGl0RnVsbHNjcmVlbigp
OwotICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdCA9IG51bGxwdHI7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0gc3RvcENvbXBs
ZXRpb25IYW5kbGVyOl4oQVZQbGF5ZXJWaWV3Q29udHJvbGxlck9wdGltaXplZEZ1bGxzY3JlZW5T
dG9wUmVhc29uIHJlYXNvbikgewotICAgICAgICAgICAgICAgIG1fZXhpdENvbXBsZXRlZCA9IHRy
dWU7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKG1fZnVsbHNjcmVlbkNo
YW5nZU9ic2VydmVyICYmIHJlYXNvbiA9PSBBVlBsYXllclZpZXdDb250cm9sbGVyT3B0aW1pemVk
RnVsbHNjcmVlblN0b3BSZWFzb25TdG9wcGVkKQotICAgICAgICAgICAgICAgICAgICBtX2Z1bGxz
Y3JlZW5DaGFuZ2VPYnNlcnZlci0+ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKCk7Ci0KLSAg
ICAgICAgICAgICAgICBpZiAobV9leGl0UmVxdWVzdGVkKSB7Ci0gICAgICAgICAgICAgICAgICAg
IFttX3ZpZGVvTGF5ZXJDb250YWluZXIgc2V0QmFja2dyb3VuZENvbG9yOltbZ2V0VUlDb2xvckNs
YXNzKCkgY2xlYXJDb2xvcl0gQ0dDb2xvcl1dOwotICAgICAgICAgICAgICAgICAgICBbW21fcGxh
eWVyVmlld0NvbnRyb2xsZXIgdmlld10gc2V0QmFja2dyb3VuZENvbG9yOltnZXRVSUNvbG9yQ2xh
c3MoKSBjbGVhckNvbG9yXV07Ci0gICAgICAgICAgICAgICAgICAgIFdlYlRocmVhZFJ1biheewot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5k
aWRFeGl0RnVsbHNjcmVlbigpOwotICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdCA9IG51
bGxwdHI7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsKQotICAgICAg
ICAgICAgICAgICAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+cmVxdWVzdEV4aXRGdWxs
c2NyZWVuKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfV07Ci0gICAgICAgIH0g
ZWxzZSBpZiAobV9tb2RlID09IEhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGVT
dGFuZGFyZCkgewotICAgICAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgZW50ZXJGdWxs
U2NyZWVuV2l0aENvbXBsZXRpb25IYW5kbGVyOl4oQk9PTCwgTlNFcnJvciopCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc2V0U2hvd3NQbGF5
YmFja0NvbnRyb2xzOllFU107Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgV2Vi
VGhyZWFkUnVuKF57Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX2Z1bGxzY3JlZW5DaGFuZ2VP
YnNlcnZlcikKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2Vy
dmVyLT5kaWRFbnRlckZ1bGxzY3JlZW4oKTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgICAgIHByb3RlY3QgPSBudWxscHRyOwotICAgICAgICAgICAgICAgIH0pOwotICAg
ICAgICAgICAgfV07Ci0gICAgICAgIH0KKworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdD4gc3Ryb25nVGhpcyh0aGlzKTsKKyAgICBkaXNwYXRjaF9hc3luYyhkaXNw
YXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbc3Ryb25nVGhpc10geworICAgICAgICBbc3Ryb25nVGhp
cy0+bV92aWRlb0xheWVyQ29udGFpbmVyIHNldEJhY2tncm91bmRDb2xvcjpbW2dldFVJQ29sb3JD
bGFzcygpIGJsYWNrQ29sb3JdIENHQ29sb3JdXTsKKyAgICAgICAgaWYgKHN0cm9uZ1RoaXMtPm1v
ZGUoKSA9PSBIVE1MTWVkaWFFbGVtZW50OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlT3B0aW1pemVkKQor
ICAgICAgICAgICAgc3Ryb25nVGhpcy0+ZW50ZXJGdWxsc2NyZWVuT3B0aW1pemVkKCk7CisgICAg
ICAgIGVsc2UgaWYgKHN0cm9uZ1RoaXMtPm1vZGUoKSA9PSBIVE1MTWVkaWFFbGVtZW50OjpWaWRl
b0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQpCisgICAgICAgICAgICBzdHJvbmdUaGlzLT5lbnRlckZ1
bGxzY3JlZW5TdGFuZGFyZCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICB9KTsKIH0KIAordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdDo6ZW50ZXJGdWxsc2NyZWVuT3B0aW1pemVkKCkKK3sKKyAgICBSZWZQdHI8V2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHN0cm9uZ1RoaXModGhpcyk7CisKKyAgICBhdXRv
IHN0YXJ0Q29tcGxldGlvbkhhbmRsZXIgPSBbdGhpcywgc3Ryb25nVGhpc10gKEJPT0wgc3VjY2Vz
cywgTlNFcnJvciAqKSB7CisgICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHNldFNob3dz
UGxheWJhY2tDb250cm9sczpZRVNdOworCisgICAgICAgIFdlYlRocmVhZFJ1bihbdGhpcywgc3Ry
b25nVGhpcywgc3VjY2Vzc10geworICAgICAgICAgICAgW21fd2luZG93IHNldEhpZGRlbjpZRVNd
OworICAgICAgICAgICAgaWYgKG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQorICAgICAgICAg
ICAgICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5kaWRFbnRlckZ1bGxzY3JlZW4oKTsK
KworICAgICAgICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fdmlk
ZW9GdWxsc2NyZWVuTW9kZWwpCisgICAgICAgICAgICAgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVu
TW9kZWwtPnJlcXVlc3RFeGl0RnVsbHNjcmVlbigpOworICAgICAgICAgICAgfQorICAgICAgICB9
KTsKKyAgICB9OworCisgICAgYXV0byBzdG9wQ29tcGxldGlvbkhhbmRsZXIgPSBbdGhpcywgc3Ry
b25nVGhpc10gKEFWUGxheWVyVmlld0NvbnRyb2xsZXJPcHRpbWl6ZWRGdWxsc2NyZWVuU3RvcFJl
YXNvbiByZWFzb24pIHsKKyAgICAgICAgbV9leGl0Q29tcGxldGVkID0gdHJ1ZTsKKworICAgICAg
ICBpZiAobV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIgJiYgcmVhc29uID09IEFWUGxheWVyVmll
d0NvbnRyb2xsZXJPcHRpbWl6ZWRGdWxsc2NyZWVuU3RvcFJlYXNvblN0b3BwZWQpCisgICAgICAg
ICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+ZnVsbHNjcmVlbk1heVJldHVyblRvSW5s
aW5lKCk7CisgICAgICAgIGlmIChtX2V4aXRSZXF1ZXN0ZWQpIHsKKyAgICAgICAgICAgIFttX3Zp
ZGVvTGF5ZXJDb250YWluZXIgc2V0QmFja2dyb3VuZENvbG9yOltbZ2V0VUlDb2xvckNsYXNzKCkg
Y2xlYXJDb2xvcl0gQ0dDb2xvcl1dOworICAgICAgICAgICAgW1ttX3BsYXllclZpZXdDb250cm9s
bGVyIHZpZXddIHNldEJhY2tncm91bmRDb2xvcjpbZ2V0VUlDb2xvckNsYXNzKCkgY2xlYXJDb2xv
cl1dOworICAgICAgICAgICAgV2ViVGhyZWFkUnVuKFt0aGlzLCBzdHJvbmdUaGlzXSB7CisgICAg
ICAgICAgICAgICAgaWYgKG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQorICAgICAgICAgICAg
ICAgICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+ZGlkRXhpdEZ1bGxzY3JlZW4oKTsK
KyAgICAgICAgICAgIH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKG1fdmlk
ZW9GdWxsc2NyZWVuTW9kZWwpCisgICAgICAgICAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2Rl
bC0+cmVxdWVzdEV4aXRGdWxsc2NyZWVuKCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgW21f
cGxheWVyVmlld0NvbnRyb2xsZXIgc3RhcnRPcHRpbWl6ZWRGdWxsc2NyZWVuV2l0aFN0YXJ0Q29t
cGxldGlvbkhhbmRsZXI6c3RhcnRDb21wbGV0aW9uSGFuZGxlciBzdG9wQ29tcGxldGlvbkhhbmRs
ZXI6c3RvcENvbXBsZXRpb25IYW5kbGVyXTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdDo6ZW50ZXJGdWxsc2NyZWVuU3RhbmRhcmQoKQoreworICAgIFJlZlB0cjxX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gc3Ryb25nVGhpcyh0aGlzKTsKKyAgICBb
bV9wbGF5ZXJWaWV3Q29udHJvbGxlciBlbnRlckZ1bGxTY3JlZW5XaXRoQ29tcGxldGlvbkhhbmRs
ZXI6W3RoaXMsIHN0cm9uZ1RoaXNdIChCT09MLCBOU0Vycm9yKikgeworICAgICAgICBbbV9wbGF5
ZXJWaWV3Q29udHJvbGxlciBzZXRTaG93c1BsYXliYWNrQ29udHJvbHM6WUVTXTsKKworICAgICAg
ICBXZWJUaHJlYWRSdW4oW3RoaXMsIHN0cm9uZ1RoaXNdIHsKKyAgICAgICAgICAgIGlmIChtX2Z1
bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKKyAgICAgICAgICAgICAgICBtX2Z1bGxzY3JlZW5DaGFu
Z2VPYnNlcnZlci0+ZGlkRW50ZXJGdWxsc2NyZWVuKCk7CisgICAgICAgIH0pOworICAgIH1dOwor
fQorCiB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpleGl0RnVsbHNjcmVl
bihXZWJDb3JlOjpJbnRSZWN0IGZpbmFsUmVjdCkKIHsKLSAgICBfX2Jsb2NrIFJlZlB0cjxXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gcHJvdGVjdCh0aGlzKTsKLSAgICAKKyAgICBS
ZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHN0cm9uZ1RoaXModGhpcyk7
CisKICAgICBtX2V4aXRSZXF1ZXN0ZWQgPSB0cnVlOwogICAgIGlmIChtX2V4aXRDb21wbGV0ZWQp
IHsKLSAgICAgICAgV2ViVGhyZWFkUnVuKF57Ci0gICAgICAgICAgICBpZiAobV9mdWxsc2NyZWVu
Q2hhbmdlT2JzZXJ2ZXIpCi0gICAgICAgICAgICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2
ZXItPmRpZEV4aXRGdWxsc2NyZWVuKCk7Ci0gICAgICAgICAgICBwcm90ZWN0ID0gbnVsbHB0cjsK
KyAgICAgICAgV2ViVGhyZWFkUnVuKFtzdHJvbmdUaGlzXSB7CisgICAgICAgICAgICBpZiAoc3Ry
b25nVGhpcy0+bV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCisgICAgICAgICAgICAgICAgc3Ry
b25nVGhpcy0+bV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZEV4aXRGdWxsc2NyZWVuKCk7
CiAgICAgICAgIH0pOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIAorCiAgICAgbV9wbGF5
ZXJDb250cm9sbGVyID0gbmlsOwotICAgIAotICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dl
dF9tYWluX3F1ZXVlKCksIF57Ci0gICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHNldFNo
b3dzUGxheWJhY2tDb250cm9sczpOT107Ci0gICAgICAgIGlmIChtX3ZpZXdDb250cm9sbGVyKQot
ICAgICAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10uZnJhbWUgPSBbbV9wYXJl
bnRWaWV3IGNvbnZlcnRSZWN0OmZpbmFsUmVjdCB0b1ZpZXc6bmlsXTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10uZnJhbWUgPSBmaW5hbFJl
Y3Q7CiAKLSAgICAgICAgaWYgKFttX3ZpZGVvTGF5ZXJDb250YWluZXIgdmlkZW9MYXllckdyYXZp
dHldICE9IEFWVmlkZW9MYXllckdyYXZpdHlSZXNpemVBc3BlY3QpCi0gICAgICAgICAgICBbbV92
aWRlb0xheWVyQ29udGFpbmVyIHNldFZpZGVvTGF5ZXJHcmF2aXR5OkFWVmlkZW9MYXllckdyYXZp
dHlSZXNpemVBc3BlY3RdOwotICAgICAgICBbW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10g
bGF5b3V0SWZOZWVkZWRdOwotICAgICAgICAKLSAgICAgICAgaWYgKG1fbW9kZSA9PSBIVE1MTWVk
aWFFbGVtZW50OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlT3B0aW1pemVkKSB7Ci0gICAgICAgICAgICBb
bV93aW5kb3cgc2V0SGlkZGVuOk5PXTsKLSAgICAgICAgICAgIFttX3BsYXllclZpZXdDb250cm9s
bGVyIHN0b3BPcHRpbWl6ZWRGdWxsc2NyZWVuXTsKLSAgICAgICAgfSBlbHNlIGlmIChtX21vZGUg
PT0gKEhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGVPcHRpbWl6ZWQgfCBIVE1M
TWVkaWFFbGVtZW50OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQpKSB7Ci0gICAgICAgICAg
ICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBleGl0RnVsbFNjcmVlbkFuaW1hdGVkOk5PIGNvbXBs
ZXRpb25IYW5kbGVyOl4oQk9PTCAsIE5TRXJyb3IgKikgewotICAgICAgICAgICAgICAgIFttX3dp
bmRvdyBzZXRIaWRkZW46Tk9dOwotICAgICAgICAgICAgICAgIFttX3BsYXllclZpZXdDb250cm9s
bGVyIHN0b3BPcHRpbWl6ZWRGdWxsc2NyZWVuXTsKLSAgICAgICAgICAgIH1dOwotICAgICAgICB9
IGVsc2UgaWYgKG1fbW9kZSA9PSBIVE1MTWVkaWFFbGVtZW50OjpWaWRlb0Z1bGxzY3JlZW5Nb2Rl
U3RhbmRhcmQpIHsKLSAgICAgICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIGV4aXRGdWxs
U2NyZWVuV2l0aENvbXBsZXRpb25IYW5kbGVyOl4oQk9PTCwgTlNFcnJvciopIHsKLSAgICAgICAg
ICAgICAgICBtX2V4aXRDb21wbGV0ZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIFttX3ZpZGVv
TGF5ZXJDb250YWluZXIgc2V0QmFja2dyb3VuZENvbG9yOltbZ2V0VUlDb2xvckNsYXNzKCkgY2xl
YXJDb2xvcl0gQ0dDb2xvcl1dOwotICAgICAgICAgICAgICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJv
bGxlciB2aWV3XSBzZXRCYWNrZ3JvdW5kQ29sb3I6W2dldFVJQ29sb3JDbGFzcygpIGNsZWFyQ29s
b3JdXTsKLSAgICAgICAgICAgICAgICBXZWJUaHJlYWRSdW4oXnsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQotICAgICAgICAgICAgICAgICAgICAg
ICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZEV4aXRGdWxsc2NyZWVuKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIHByb3RlY3QgPSBudWxscHRyOwotICAgICAgICAgICAgICAgIH0pOwot
Ci0gICAgICAgICAgICB9XTsKLSAgICAgICAgfQorICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNo
X2dldF9tYWluX3F1ZXVlKCksIFtzdHJvbmdUaGlzLCBmaW5hbFJlY3RdIHsKKyAgICAgICAgc3Ry
b25nVGhpcy0+ZXhpdEZ1bGxzY3JlZW5JbnRlcm5hbChmaW5hbFJlY3QpOwogICAgIH0pOwogfQog
Cit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpleGl0RnVsbHNjcmVlbklu
dGVybmFsKFdlYkNvcmU6OkludFJlY3QgZmluYWxSZWN0KQoreworICAgIFttX3BsYXllclZpZXdD
b250cm9sbGVyIHNldFNob3dzUGxheWJhY2tDb250cm9sczpOT107CisgICAgaWYgKG1fdmlld0Nv
bnRyb2xsZXIpCisgICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddLmZyYW1lID0g
W21fcGFyZW50VmlldyBjb252ZXJ0UmVjdDpmaW5hbFJlY3QgdG9WaWV3Om5pbF07CisgICAgZWxz
ZQorICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XS5mcmFtZSA9IGZpbmFsUmVj
dDsKKworICAgIGlmIChbbV92aWRlb0xheWVyQ29udGFpbmVyIHZpZGVvTGF5ZXJHcmF2aXR5XSAh
PSBBVlZpZGVvTGF5ZXJHcmF2aXR5UmVzaXplQXNwZWN0KQorICAgICAgICBbbV92aWRlb0xheWVy
Q29udGFpbmVyIHNldFZpZGVvTGF5ZXJHcmF2aXR5OkFWVmlkZW9MYXllckdyYXZpdHlSZXNpemVB
c3BlY3RdOworICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBsYXlvdXRJZk5lZWRl
ZF07CisKKworICAgIGlmIChtX21vZGUgPT0gSFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2Ny
ZWVuTW9kZU9wdGltaXplZCkgeworICAgICAgICBbbV93aW5kb3cgc2V0SGlkZGVuOk5PXTsKKyAg
ICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc3RvcE9wdGltaXplZEZ1bGxzY3JlZW5dOwor
ICAgIH0gZWxzZSBpZiAobV9tb2RlID09IChIVE1MTWVkaWFFbGVtZW50OjpWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlT3B0aW1pemVkIHwgSFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0
YW5kYXJkKSkgeworICAgICAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQ+IHN0cm9uZ1RoaXModGhpcyk7CisgICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIGV4
aXRGdWxsU2NyZWVuQW5pbWF0ZWQ6Tk8gY29tcGxldGlvbkhhbmRsZXI6W3N0cm9uZ1RoaXNdIChC
T09MLCBOU0Vycm9yKikgeworICAgICAgICAgICAgW3N0cm9uZ1RoaXMtPm1fd2luZG93IHNldEhp
ZGRlbjpOT107CisgICAgICAgICAgICBbc3Ryb25nVGhpcy0+bV9wbGF5ZXJWaWV3Q29udHJvbGxl
ciBzdG9wT3B0aW1pemVkRnVsbHNjcmVlbl07CisgICAgICAgIH1dOworICAgIH0gZWxzZSBpZiAo
bV9tb2RlID09IEhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCkg
eworICAgICAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHN0cm9u
Z1RoaXModGhpcyk7CisgICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIGV4aXRGdWxsU2Ny
ZWVuV2l0aENvbXBsZXRpb25IYW5kbGVyOltzdHJvbmdUaGlzXSAoQk9PTCwgTlNFcnJvciopIHsK
KyAgICAgICAgICAgIHN0cm9uZ1RoaXMtPm1fZXhpdENvbXBsZXRlZCA9IHRydWU7CisgICAgICAg
ICAgICBbc3Ryb25nVGhpcy0+bV92aWRlb0xheWVyQ29udGFpbmVyIHNldEJhY2tncm91bmRDb2xv
cjpbW2dldFVJQ29sb3JDbGFzcygpIGNsZWFyQ29sb3JdIENHQ29sb3JdXTsKKyAgICAgICAgICAg
IFtbc3Ryb25nVGhpcy0+bV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBzZXRCYWNrZ3JvdW5k
Q29sb3I6W2dldFVJQ29sb3JDbGFzcygpIGNsZWFyQ29sb3JdXTsKKyAgICAgICAgICAgIFdlYlRo
cmVhZFJ1bihbc3Ryb25nVGhpc10geworICAgICAgICAgICAgICAgIGlmIChzdHJvbmdUaGlzLT5t
X2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKKyAgICAgICAgICAgICAgICAgICAgc3Ryb25nVGhp
cy0+bV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZEV4aXRGdWxsc2NyZWVuKCk7CisgICAg
ICAgICAgICB9KTsKKyAgICAgICAgfV07CisgICAgfTsKK30KKwogQGludGVyZmFjZSBVSUFwcGxp
Y2F0aW9uICgpCiAtKHZvaWQpX3NldFN0YXR1c0Jhck9yaWVudGF0aW9uOihVSUludGVyZmFjZU9y
aWVudGF0aW9uKW87CiBAZW5kCkBAIC0xMDAzLDM5ICs5OTEsNDMgQEAgdm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZXhpdEZ1bGxzY3JlZW4oV2ViQ29yZTo6SW50UmVjdCBm
aW5hbFJlY3QKIAogdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6Y2xlYW51
cEZ1bGxzY3JlZW4oKQogewotICAgIC8vIFJldGFpbiB0aGlzIHRvIGV4dGVuZCBvYmplY3QgbGlm
ZSB1bnRpbCBhc3luYyBibG9jayBjb21wbGV0ZXMuCi0gICAgX19ibG9jayBSZWZQdHI8V2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHByb3RlY3QodGhpcyk7CisgICAgUmVmUHRyPFdl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBzdHJvbmdUaGlzKHRoaXMpOwogICAgIAot
ICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57Ci0gICAgICAg
IGlmIChtX3dpbmRvdykgewotICAgICAgICAgICAgW21fd2luZG93IHNldEhpZGRlbjpZRVNdOwot
ICAgICAgICAgICAgW21fd2luZG93IHNldFJvb3RWaWV3Q29udHJvbGxlcjpuaWxdOwotICAgICAg
ICAgICAgaWYgKG1fcGFyZW50V2luZG93KQotICAgICAgICAgICAgICAgIFtbZ2V0VUlBcHBsaWNh
dGlvbkNsYXNzKCkgc2hhcmVkQXBwbGljYXRpb25dIF9zZXRTdGF0dXNCYXJPcmllbnRhdGlvbjpb
bV9wYXJlbnRXaW5kb3cgaW50ZXJmYWNlT3JpZW50YXRpb25dXTsKLSAgICAgICAgfQotICAgICAg
ICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzZXREZWxlZ2F0ZTpuaWxdOwotICAgICAgICBbW21f
cGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10gcmVtb3ZlRnJvbVN1cGVydmlld107Ci0gICAgICAg
IGlmIChtX3ZpZXdDb250cm9sbGVyKQotICAgICAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xs
ZXIgcmVtb3ZlRnJvbVBhcmVudFZpZXdDb250cm9sbGVyXTsKLSAgICAgICAgW21fcGxheWVyVmll
d0NvbnRyb2xsZXIgc2V0UGxheWVyQ29udHJvbGxlcjpuaWxdOwotICAgICAgICBtX3BsYXllclZp
ZXdDb250cm9sbGVyID0gbmlsOwotICAgICAgICBbbV92aWRlb0xheWVyIHJlbW92ZUZyb21TdXBl
cmxheWVyXTsKLSAgICAgICAgbV92aWRlb0xheWVyID0gbmlsOwotICAgICAgICBbbV92aWRlb0xh
eWVyQ29udGFpbmVyIHJlbW92ZUZyb21TdXBlcmxheWVyXTsKLSAgICAgICAgW21fdmlkZW9MYXll
ckNvbnRhaW5lciBzZXRQbGF5ZXJWaWV3Q29udHJvbGxlcjpuaWxdOwotICAgICAgICBtX3ZpZGVv
TGF5ZXJDb250YWluZXIgPSBuaWw7Ci0gICAgICAgIFtbbV92aWV3Q29udHJvbGxlciB2aWV3XSBy
ZW1vdmVGcm9tU3VwZXJ2aWV3XTsKLSAgICAgICAgbV92aWV3Q29udHJvbGxlciA9IG5pbDsKLSAg
ICAgICAgbV93aW5kb3cgPSBuaWw7Ci0gICAgICAgIG1fcGFyZW50VmlldyA9IG5pbDsKLSAgICAg
ICAgbV9wYXJlbnRXaW5kb3cgPSBuaWw7Ci0gICAgICAgIAotICAgICAgICBXZWJUaHJlYWRSdW4o
XnsKLSAgICAgICAgICAgIGlmIChtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKLSAgICAgICAg
ICAgICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+ZGlkQ2xlYW51cEZ1bGxzY3JlZW4o
KTsKLSAgICAgICAgICAgIG1fZW50ZXJSZXF1ZXN0ZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIHBy
b3RlY3QgPSBudWxscHRyOwotICAgICAgICB9KTsKKyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRj
aF9nZXRfbWFpbl9xdWV1ZSgpLCBbc3Ryb25nVGhpc10geworICAgICAgICBzdHJvbmdUaGlzLT5j
bGVhbnVwRnVsbHNjcmVlbkludGVybmFsKCk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmNsZWFudXBGdWxsc2NyZWVuSW50ZXJuYWwoKQorewor
ICAgIGlmIChtX3dpbmRvdykgeworICAgICAgICBbbV93aW5kb3cgc2V0SGlkZGVuOllFU107Cisg
ICAgICAgIFttX3dpbmRvdyBzZXRSb290Vmlld0NvbnRyb2xsZXI6bmlsXTsKKyAgICAgICAgaWYg
KG1fcGFyZW50V2luZG93KQorICAgICAgICAgICAgW1tnZXRVSUFwcGxpY2F0aW9uQ2xhc3MoKSBz
aGFyZWRBcHBsaWNhdGlvbl0gX3NldFN0YXR1c0Jhck9yaWVudGF0aW9uOlttX3BhcmVudFdpbmRv
dyBpbnRlcmZhY2VPcmllbnRhdGlvbl1dOworICAgIH0KKyAgICBbbV9wbGF5ZXJWaWV3Q29udHJv
bGxlciBzZXREZWxlZ2F0ZTpuaWxdOworICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3
XSByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKKyAgICBpZiAobV92aWV3Q29udHJvbGxlcikKKyAgICAg
ICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgcmVtb3ZlRnJvbVBhcmVudFZpZXdDb250cm9sbGVy
XTsKKyAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzZXRQbGF5ZXJDb250cm9sbGVyOm5pbF07
CisgICAgbV9wbGF5ZXJWaWV3Q29udHJvbGxlciA9IG5pbDsKKyAgICBbbV92aWRlb0xheWVyIHJl
bW92ZUZyb21TdXBlcmxheWVyXTsKKyAgICBtX3ZpZGVvTGF5ZXIgPSBuaWw7CisgICAgW21fdmlk
ZW9MYXllckNvbnRhaW5lciByZW1vdmVGcm9tU3VwZXJsYXllcl07CisgICAgW21fdmlkZW9MYXll
ckNvbnRhaW5lciBzZXRQbGF5ZXJWaWV3Q29udHJvbGxlcjpuaWxdOworICAgIG1fdmlkZW9MYXll
ckNvbnRhaW5lciA9IG5pbDsKKyAgICBbW21fdmlld0NvbnRyb2xsZXIgdmlld10gcmVtb3ZlRnJv
bVN1cGVydmlld107CisgICAgbV92aWV3Q29udHJvbGxlciA9IG5pbDsKKyAgICBtX3dpbmRvdyA9
IG5pbDsKKyAgICBtX3BhcmVudFZpZXcgPSBuaWw7CisgICAgbV9wYXJlbnRXaW5kb3cgPSBuaWw7
CisgICAgCisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBzdHJv
bmdUaGlzKHRoaXMpOworICAgIFdlYlRocmVhZFJ1bihbc3Ryb25nVGhpc10geworICAgICAgICBp
ZiAoc3Ryb25nVGhpcy0+bV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCisgICAgICAgICAgICBz
dHJvbmdUaGlzLT5tX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+ZGlkQ2xlYW51cEZ1bGxzY3Jl
ZW4oKTsKKyAgICAgICAgc3Ryb25nVGhpcy0+bV9lbnRlclJlcXVlc3RlZCA9IGZhbHNlOwogICAg
IH0pOwogfQogCkBAIC0xMDc2LDEzICsxMDY4LDEwIEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQ6OnJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4oKQogICAgIGlmICht
X21vZGUgJiBIVE1MTWVkaWFFbGVtZW50OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlT3B0aW1pemVkKQog
ICAgICAgICByZXR1cm47CiAgICAgCi0gICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQ+IHByb3RlY3QodGhpcyk7Ci0gICAgZGlzcGF0Y2hfYXN5bmMoZGlz
cGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKLSAgICAgICAgW21fd2luZG93IHNldEhpZGRlbjpZ
RVNdOwotICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBleGl0RnVsbFNjcmVlbkFuaW1h
dGVkOk5PIGNvbXBsZXRpb25IYW5kbGVyOl4oQk9PTCwgTlNFcnJvciopIHsKLSAgICAgICAgICAg
IFdlYlRocmVhZFJ1biheewotICAgICAgICAgICAgICAgIHByb3RlY3QgPSBudWxscHRyOwotICAg
ICAgICAgICAgfSk7CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
PiBzdHJvbmdUaGlzKHRoaXMpOworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWlu
X3F1ZXVlKCksIFtzdHJvbmdUaGlzXSB7CisgICAgICAgIFtzdHJvbmdUaGlzLT5tX3dpbmRvdyBz
ZXRIaWRkZW46WUVTXTsKKyAgICAgICAgW3N0cm9uZ1RoaXMtPm1fcGxheWVyVmlld0NvbnRyb2xs
ZXIgZXhpdEZ1bGxTY3JlZW5BbmltYXRlZDpOTyBjb21wbGV0aW9uSGFuZGxlcjpbc3Ryb25nVGhp
c10gKEJPT0wsIE5TRXJyb3IqKSB7CiAgICAgICAgIH1dOwogICAgIH0pOwogCkBAIC0xMTEyLDcg
KzExMDEsNyBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXRJc09w
dGltaXplZChib29sIGFjdGl2ZSkKIAogICAgIGlmICghbV9leGl0UmVxdWVzdGVkIHx8IGFjdGl2
ZSkKICAgICAgICAgcmV0dXJuOwotICAgIAorCiAgICAgbV9leGl0Q29tcGxldGVkID0gdHJ1ZTsK
ICAgICBbbV92aWRlb0xheWVyQ29udGFpbmVyIHNldEJhY2tncm91bmRDb2xvcjpbW2dldFVJQ29s
b3JDbGFzcygpIGNsZWFyQ29sb3JdIENHQ29sb3JdXTsKICAgICBbW21fcGxheWVyVmlld0NvbnRy
b2xsZXIgdmlld10gc2V0QmFja2dyb3VuZENvbG9yOltnZXRVSUNvbG9yQ2xhc3MoKSBjbGVhckNv
bG9yXV07Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>