<?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>218924</bug_id>
          
          <creation_ts>2020-11-13 15:13:27 -0800</creation_ts>
          <short_desc>[GPUProcess] Add basic GPUProcess crash handling for canvas</short_desc>
          <delta_ts>2020-11-16 16:44:25 -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>WebKit2</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=219007</see_also>
          <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="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>darin</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1707405</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-11-13 15:13:27 -0800</bug_when>
    <thetext>Add basic GPUProcess crash handling for canvas.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1707406</commentid>
    <comment_count>1</comment_count>
      <attachid>414098</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-11-13 15:22:46 -0800</bug_when>
    <thetext>Created attachment 414098
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1707417</commentid>
    <comment_count>2</comment_count>
      <attachid>414098</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-11-13 15:59:44 -0800</bug_when>
    <thetext>Comment on attachment 414098
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=414098&amp;action=review

&gt; Source/WebKit/WebProcess/GPU/graphics/RemoteImageBufferProxy.h:83
&gt; +    float resolutionScale() const override { return m_resolutionScale; }

final?

&gt; Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp:66
&gt; +    // Register itself as a MessageReceiver in the GPUProcessConnection.

Comment doesn&apos;t add anything.

&gt; Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp:70
&gt; +    IPC::MessageReceiverMap&amp; messageReceiverMap = connection.messageReceiverMap();

auto?

&gt; Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp:74
&gt; +    send(Messages::GPUConnectionToWebProcess::CreateRenderingBackend(m_renderingBackendIdentifier), 0);

Comment doesn&apos;t add anything.

&gt; Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp:101
&gt; +    connectToGPUProcess();
&gt; +
&gt; +    for (auto&amp; pair : m_remoteResourceCacheProxy.imageBuffers()) {
&gt; +        if (auto&amp; baseImageBuffer = pair.value) {
&gt; +            if (is&lt;AcceleratedRemoteImageBufferProxy&gt;(*baseImageBuffer))
&gt; +                recreateImageBuffer(*this, downcast&lt;AcceleratedRemoteImageBufferProxy&gt;(*baseImageBuffer), pair.key, m_renderingBackendIdentifier);
&gt; +            else
&gt; +                recreateImageBuffer(*this, downcast&lt;UnacceleratedRemoteImageBufferProxy&gt;(*baseImageBuffer), pair.key, m_renderingBackendIdentifier);
&gt; +        }
&gt; +    }

It&apos;s weird to see this code in a &quot;didClose&quot; function. It would be nicer to move this to a &quot;reestablishGPUConnection&quot; function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1707423</commentid>
    <comment_count>3</comment_count>
      <attachid>414103</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-11-13 16:14:15 -0800</bug_when>
    <thetext>Created attachment 414103
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1707448</commentid>
    <comment_count>4</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-11-13 18:11:53 -0800</bug_when>
    <thetext>Committed r269809: &lt;https://trac.webkit.org/changeset/269809&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 414103.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1707449</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-11-13 18:12:20 -0800</bug_when>
    <thetext>&lt;rdar://problem/71392812&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1707650</commentid>
    <comment_count>6</comment_count>
      <attachid>414103</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-11-15 13:17:09 -0800</bug_when>
    <thetext>Comment on attachment 414103
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=414103&amp;action=review

&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/GPUProcess.mm:416
&gt; +        RetainPtr&lt;CGContextRef&gt; context = CGBitmapContextCreate(rgba, viewWidthInPixels, viewHeightInPixels, 8, 4 * viewWidthInPixels, colorSpace.get(), kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);

Missing adoptCF here, so this bitmap context will leak.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1707835</commentid>
    <comment_count>7</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-11-16 08:54:54 -0800</bug_when>
    <thetext>(In reply to Darin Adler from comment #6)
&gt; Comment on attachment 414103 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=414103&amp;action=review
&gt; 
&gt; &gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/GPUProcess.mm:416
&gt; &gt; +        RetainPtr&lt;CGContextRef&gt; context = CGBitmapContextCreate(rgba, viewWidthInPixels, viewHeightInPixels, 8, 4 * viewWidthInPixels, colorSpace.get(), kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
&gt; 
&gt; Missing adoptCF here, so this bitmap context will leak.

I had copied from an existing screenshot tests. Will fix existing tests and new tests via https://bugs.webkit.org/show_bug.cgi?id=218988. Thanks.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>414098</attachid>
            <date>2020-11-13 15:22:46 -0800</date>
            <delta_ts>2020-11-13 16:13:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-218924-20201113152239.patch</filename>
            <type>text/plain</type>
            <size>20755</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY5Nzg5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGVjMmY5YTdhZmUyNGY3ZjYw
Y2Q2ZTMwZTE4ZTAyNTQ1ZjI2ZDM1YzQuLjZkMTI2NzkyYWU5ZGVhMjM5M2YwOTgyMTVlZmQ1N2Q4
OTE1ZTY5ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzMgQEAKKzIwMjAtMTEtMTMgIENocmlzIER1
bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVUHJvY2Vzc10gQWRkIGJhc2lj
IEdQVVByb2Nlc3MgY3Jhc2ggaGFuZGxpbmcgZm9yIGNhbnZhcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE4OTI0CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlIFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eSB0byBiZSBhIEdQVVByb2Nlc3NDb25uZWN0aW9uOjpDbGllbnQgc28gdGhhdCBpdAor
ICAgICAgICBnZXRzIG5vdGlmaWVkIHdoZW4gdGhlIElQQyBjb25uZWN0aW9uIHRvIHRoZSBHUFVQ
cm9jZXNzIGdldHMgc2V2ZXJlZC4gV2hlbiB0aGlzCisgICAgICAgIGhhcHBlbnMsIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eSBjbGVhcnMgYWxsIGl0cyBTaGFyZWRNZW1vcnkgaGFuZGxlcyBh
bmQKKyAgICAgICAgc2VuZHMgSVBDIG1lc3NhZ2VzIHRvIHRoZSBHUFUgcHJvY2VzcyB0byByZWNy
ZWF0ZSBhbGwgdGhlIEltYWdlQnVmZmVycyB3ZSBoYWQuCisKKyAgICAgICAgKiBXZWJQcm9jZXNz
L0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lmg6CisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZUltYWdlQnVmZmVyUHJveHk6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZUltYWdlQnVmZmVyUHJveHk6OmNsZWFyQmFja2VuZCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZUltYWdlQnVmZmVyUHJveHk6OnNpemUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJ
bWFnZUJ1ZmZlclByb3h5OjpyZW5kZXJpbmdNb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6Y29sb3JTcGFjZSBjb25zdCk6CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZUltYWdlQnVmZmVyUHJveHk6OnBpeGVsRm9ybWF0IGNvbnN0KToKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eSk6
CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNvbm5lY3RUb0dQVVByb2Nlc3MpOgorICAgICAgICAoV2Vi
S2l0OjpyZWNyZWF0ZUltYWdlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5OjpncHVQcm9jZXNzQ29ubmVjdGlvbkRpZENsb3NlKToKKyAgICAgICAgKFdlYktp
dDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpjcmVhdGVJbWFnZUJ1ZmZlcik6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNo
ZVByb3h5Lmg6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlc291cmNlQ2FjaGVQcm94eTo6aW1h
Z2VCdWZmZXJzIGNvbnN0KToKKwogMjAyMC0xMS0xMyAgQ2xhdWRpbyBTYWF2ZWRyYSAgPGNzYWF2
ZWRyYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIE5vbi11bmlmaWVkIGJ1aWxkIGZpeGVzLgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFn
ZUJ1ZmZlclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1Jl
bW90ZUltYWdlQnVmZmVyUHJveHkuaAppbmRleCAyN2U4ZmMwNWIzMjdkZDJmNWJjZDdmMWJjN2Mw
OTgwODk0NTZjOWU3Li4yMzBlYjFmMjdlZTY4YTI1ZTIwYzhmY2VjZjMzN2I3MjMyMzhkYzU3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUlt
YWdlQnVmZmVyUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBo
aWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaApAQCAtNDgsMTIgKzQ4LDEyIEBAIGNsYXNzIFJl
bW90ZUltYWdlQnVmZmVyUHJveHkgOiBwdWJsaWMgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkltYWdl
QnVmZmVyPEJhY2tlbmRUCiAgICAgdXNpbmcgQmFzZURpc3BsYXlMaXN0SW1hZ2VCdWZmZXI6Om1f
cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyOwogCiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZlB0
cjxSZW1vdGVJbWFnZUJ1ZmZlclByb3h5PiBjcmVhdGUoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXpl
JiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eSYgcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KQorICAgIHN0YXRpYyBSZWZQdHI8UmVtb3Rl
SW1hZ2VCdWZmZXJQcm94eT4gY3JlYXRlKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgc2l6ZSwg
V2ViQ29yZTo6UmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2Nh
bGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UgY29sb3JTcGFjZSwgV2ViQ29yZTo6UGl4ZWxGb3JtYXQg
cGl4ZWxGb3JtYXQsIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSYgcmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5KQogICAgIHsKICAgICAgICAgaWYgKEJhY2tlbmRUeXBlOjpjYWxjdWxhdGVC
YWNrZW5kU2l6ZShzaXplLCByZXNvbHV0aW9uU2NhbGUpLmlzRW1wdHkoKSkKICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwogCi0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUmVtb3RlSW1h
Z2VCdWZmZXJQcm94eShzaXplLCByZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpKTsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5KHNpemUsIHJlbmRl
cmluZ01vZGUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgcGl4ZWxGb3JtYXQsIHJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSkpOwogICAgIH0KIAogICAgIH5SZW1vdGVJbWFnZUJ1ZmZl
clByb3h5KCkKQEAgLTY1LDYgKzY1LDggQEAgcHVibGljOgogICAgICAgICBtX3JlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eS0+cmVsZWFzZVJlbW90ZVJlc291cmNlKG1fcmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyKTsKICAgICB9CiAKKyAgICB2b2lkIGNsZWFyQmFja2VuZCgpIHsgbV9iYWNr
ZW5kID0gbnVsbHB0cjsgfQorCiAgICAgdm9pZCBjcmVhdGVCYWNrZW5kKGNvbnN0IFdlYkNvcmU6
OkZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGJhY2tlbmRT
aXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UgY29sb3JTcGFj
ZSwgV2ViQ29yZTo6UGl4ZWxGb3JtYXQgcGl4ZWxGb3JtYXQsIEltYWdlQnVmZmVyQmFja2VuZEhh
bmRsZSBoYW5kbGUpCiAgICAgewogICAgICAgICBBU1NFUlQoIW1fYmFja2VuZCk7CkBAIC03Niwx
MCArNzgsMjEgQEAgcHVibGljOgogICAgICAgICBtX3JlY2VpdmVkRmx1c2hJZGVudGlmaWVyID0g
Zmx1c2hJZGVudGlmaWVyOwogICAgIH0KIAorICAgIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYg
c2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQorICAgIFdlYkNvcmU6OlJlbmRlcmluZ01v
ZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyaW5nTW9kZTsgfQorICAg
IGZsb2F0IHJlc29sdXRpb25TY2FsZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVzb2x1
dGlvblNjYWxlOyB9CisgICAgV2ViQ29yZTo6Q29sb3JTcGFjZSBjb2xvclNwYWNlKCkgY29uc3Qg
eyByZXR1cm4gbV9jb2xvclNwYWNlOyB9CisgICAgV2ViQ29yZTo6UGl4ZWxGb3JtYXQgcGl4ZWxG
b3JtYXQoKSBjb25zdCB7IHJldHVybiBtX3BpeGVsRm9ybWF0OyB9CisKIHByb3RlY3RlZDoKLSAg
ICBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5KGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgc2l6ZSwg
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5JiByZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkp
CisgICAgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eShjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIHNp
emUsIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlv
blNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlIGNvbG9yU3BhY2UsIFdlYkNvcmU6OlBpeGVsRm9y
bWF0IHBpeGVsRm9ybWF0LCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkmIHJlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eSkKICAgICAgICAgOiBCYXNlRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcihz
aXplLCB0aGlzKQogICAgICAgICAsIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KG1ha2VX
ZWFrUHRyKHJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSkpCisgICAgICAgICwgbV9zaXplKHNp
emUpCisgICAgICAgICwgbV9yZW5kZXJpbmdNb2RlKHJlbmRlcmluZ01vZGUpCisgICAgICAgICwg
bV9yZXNvbHV0aW9uU2NhbGUocmVzb2x1dGlvblNjYWxlKQorICAgICAgICAsIG1fY29sb3JTcGFj
ZShjb2xvclNwYWNlKQorICAgICAgICAsIG1fcGl4ZWxGb3JtYXQocGl4ZWxGb3JtYXQpCiAgICAg
ewogICAgICAgICBBU1NFUlQobV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpOwogICAgICAg
ICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+cmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5
KCkuY2FjaGVJbWFnZUJ1ZmZlcigqdGhpcyk7CkBAIC0zMDMsNiArMzE2LDExIEBAIHByb3RlY3Rl
ZDoKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Rmx1c2hJZGVudGlmaWVyIG1fcmVjZWl2ZWRG
bHVzaElkZW50aWZpZXI7CiAgICAgV2Vha1B0cjxSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk+
IG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OwogICAgIHNpemVfdCBtX2l0ZW1Db3VudElu
Q3VycmVudERpc3BsYXlMaXN0IHsgMCB9OworICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBtX3NpemU7
CisgICAgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSBtX3JlbmRlcmluZ01vZGU7CisgICAgZmxvYXQg
bV9yZXNvbHV0aW9uU2NhbGU7CisgICAgV2ViQ29yZTo6Q29sb3JTcGFjZSBtX2NvbG9yU3BhY2U7
CisgICAgV2ViQ29yZTo6UGl4ZWxGb3JtYXQgbV9waXhlbEZvcm1hdDsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9n
cmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCmlu
ZGV4IDcwMGY1ZWMwZjBhMDg5MGQwNzcwYmU3NTgwOTllNjNiNDliMWE2MjMuLjIzYjQ4NTk2ODI5
MWFiNDhhNmU2NmRhNzQyMjg4YWRlYmY5MzY1ZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eS5jcHAKQEAgLTMwLDcgKzMwLDYgQEAKIAogI2luY2x1ZGUgIkRpc3BsYXlM
aXN0V3JpdGVySGFuZGxlLmgiCiAjaW5jbHVkZSAiR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5o
IgotI2luY2x1ZGUgIkdQVVByb2Nlc3NDb25uZWN0aW9uLmgiCiAjaW5jbHVkZSAiSW1hZ2VEYXRh
UmVmZXJlbmNlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1SZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lmgi
CiAjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZE1lc3NhZ2VzLmgiCkBAIC00OSwxMiAr
NDgsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5PiBSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0ZQogCiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHk6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSgpCiB7Ci0gICAgLy8gUmVnaXN0ZXIg
aXRzZWxmIGFzIGEgTWVzc2FnZVJlY2VpdmVyIGluIHRoZSBHUFVQcm9jZXNzQ29ubmVjdGlvbi4K
LSAgICBJUEM6Ok1lc3NhZ2VSZWNlaXZlck1hcCYgbWVzc2FnZVJlY2VpdmVyTWFwID0gV2ViUHJv
Y2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKS5tZXNzYWdlUmVj
ZWl2ZXJNYXAoKTsKLSAgICBtZXNzYWdlUmVjZWl2ZXJNYXAuYWRkTWVzc2FnZVJlY2VpdmVyKE1l
c3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUo
KSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci50b1VJbnQ2NCgpLCAqdGhpcyk7Ci0KLSAg
ICAvLyBDcmVhdGUgdGhlIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQKLSAgICBzZW5kKE1lc3NhZ2Vz
OjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpDcmVhdGVSZW5kZXJpbmdCYWNrZW5kKG1fcmVu
ZGVyaW5nQmFja2VuZElkZW50aWZpZXIpLCAwKTsKKyAgICBjb25uZWN0VG9HUFVQcm9jZXNzKCk7
CiB9CiAKIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6flJlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eSgpCkBAIC02Nyw2ICs2MSw0NiBAQCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6
On5SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkoKQogICAgIHNlbmQoTWVzc2FnZXM6OkdQVUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlJlbGVhc2VSZW5kZXJpbmdCYWNrZW5kKG1fcmVuZGVyaW5n
QmFja2VuZElkZW50aWZpZXIpLCAwKTsKIH0KIAordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHk6OmNvbm5lY3RUb0dQVVByb2Nlc3MoKQoreworICAgIC8vIFJlZ2lzdGVyIGl0c2VsZiBh
cyBhIE1lc3NhZ2VSZWNlaXZlciBpbiB0aGUgR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uCisgICAgYXV0
byYgY29ubmVjdGlvbiA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZUdQVVByb2Nlc3ND
b25uZWN0aW9uKCk7CisgICAgY29ubmVjdGlvbi5hZGRDbGllbnQoKnRoaXMpOworCisgICAgSVBD
OjpNZXNzYWdlUmVjZWl2ZXJNYXAmIG1lc3NhZ2VSZWNlaXZlck1hcCA9IGNvbm5lY3Rpb24ubWVz
c2FnZVJlY2VpdmVyTWFwKCk7CisgICAgbWVzc2FnZVJlY2VpdmVyTWFwLmFkZE1lc3NhZ2VSZWNl
aXZlcihNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjptZXNzYWdlUmVjZWl2
ZXJOYW1lKCksIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIudG9VSW50NjQoKSwgKnRoaXMp
OworCisgICAgLy8gQ3JlYXRlIHRoZSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kCisgICAgc2VuZChN
ZXNzYWdlczo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Q3JlYXRlUmVuZGVyaW5nQmFja2Vu
ZChtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKSwgMCk7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+CitzdGF0aWMgdm9pZCByZWNyZWF0ZUltYWdlQnVmZmVyKFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eSYgcHJveHksIFQmIGltYWdlQnVmZmVyLCBSZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIgcmVzb3VyY2VJZGVudGlmaWVyLCBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5k
ZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKK3sKKyAgICBpbWFnZUJ1ZmZlci5jbGVhckJhY2tlbmQo
KTsKKyAgICBwcm94eS5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpDcmVh
dGVJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlci5zaXplKCksIGltYWdlQnVmZmVyLnJlbmRlcmluZ01v
ZGUoKSwgaW1hZ2VCdWZmZXIucmVzb2x1dGlvblNjYWxlKCksIGltYWdlQnVmZmVyLmNvbG9yU3Bh
Y2UoKSwgaW1hZ2VCdWZmZXIucGl4ZWxGb3JtYXQoKSwgcmVzb3VyY2VJZGVudGlmaWVyKSwgcmVu
ZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworfQorCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eTo6Z3B1UHJvY2Vzc0Nvbm5lY3Rpb25EaWRDbG9zZShHUFVQcm9jZXNzQ29ubmVjdGlv
biYgcHJldmlvdXNDb25uZWN0aW9uKQoreworICAgIHByZXZpb3VzQ29ubmVjdGlvbi5yZW1vdmVD
bGllbnQoKnRoaXMpOworCisgICAgbV9pZGVudGlmaWVyc09mUmV1c2FibGVIYW5kbGVzLmNsZWFy
KCk7CisgICAgbV9pZGVudGlmaWVyc09mSGFuZGxlc0F2YWlsYWJsZUZvcldyaXRpbmcuY2xlYXIo
KTsKKyAgICBtX3NoYXJlZERpc3BsYXlMaXN0SGFuZGxlcy5jbGVhcigpOworCisgICAgY29ubmVj
dFRvR1BVUHJvY2VzcygpOworCisgICAgZm9yIChhdXRvJiBwYWlyIDogbV9yZW1vdGVSZXNvdXJj
ZUNhY2hlUHJveHkuaW1hZ2VCdWZmZXJzKCkpIHsKKyAgICAgICAgaWYgKGF1dG8mIGJhc2VJbWFn
ZUJ1ZmZlciA9IHBhaXIudmFsdWUpIHsKKyAgICAgICAgICAgIGlmIChpczxBY2NlbGVyYXRlZFJl
bW90ZUltYWdlQnVmZmVyUHJveHk+KCpiYXNlSW1hZ2VCdWZmZXIpKQorICAgICAgICAgICAgICAg
IHJlY3JlYXRlSW1hZ2VCdWZmZXIoKnRoaXMsIGRvd25jYXN0PEFjY2VsZXJhdGVkUmVtb3RlSW1h
Z2VCdWZmZXJQcm94eT4oKmJhc2VJbWFnZUJ1ZmZlciksIHBhaXIua2V5LCBtX3JlbmRlcmluZ0Jh
Y2tlbmRJZGVudGlmaWVyKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZWNy
ZWF0ZUltYWdlQnVmZmVyKCp0aGlzLCBkb3duY2FzdDxVbmFjY2VsZXJhdGVkUmVtb3RlSW1hZ2VC
dWZmZXJQcm94eT4oKmJhc2VJbWFnZUJ1ZmZlciksIHBhaXIua2V5LCBtX3JlbmRlcmluZ0JhY2tl
bmRJZGVudGlmaWVyKTsKKyAgICAgICAgfQorICAgIH0KK30KKwogSVBDOjpDb25uZWN0aW9uKiBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29u
c3QKIHsKICAgICByZXR1cm4gJldlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZUdQVVByb2Nl
c3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpOwpAQCAtOTQsMTAgKzEyOCwxMCBAQCBSZWZQdHI8
SW1hZ2VCdWZmZXI+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y3JlYXRlSW1hZ2VCdWZm
ZXIoY29uc3QgRmxvYXRTaQogICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXI7CiAK
ICAgICBpZiAocmVuZGVyaW5nTW9kZSA9PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCkKLSAg
ICAgICAgaW1hZ2VCdWZmZXIgPSBBY2NlbGVyYXRlZFJlbW90ZUltYWdlQnVmZmVyUHJveHk6OmNy
ZWF0ZShzaXplLCByZXNvbHV0aW9uU2NhbGUsICp0aGlzKTsKKyAgICAgICAgaW1hZ2VCdWZmZXIg
PSBBY2NlbGVyYXRlZFJlbW90ZUltYWdlQnVmZmVyUHJveHk6OmNyZWF0ZShzaXplLCByZW5kZXJp
bmdNb2RlLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIHBpeGVsRm9ybWF0LCAqdGhpcyk7
CiAKICAgICBpZiAoIWltYWdlQnVmZmVyKQotICAgICAgICBpbWFnZUJ1ZmZlciA9IFVuYWNjZWxl
cmF0ZWRSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpjcmVhdGUoc2l6ZSwgcmVzb2x1dGlvblNjYWxl
LCAqdGhpcyk7CisgICAgICAgIGltYWdlQnVmZmVyID0gVW5hY2NlbGVyYXRlZFJlbW90ZUltYWdl
QnVmZmVyUHJveHk6OmNyZWF0ZShzaXplLCByZW5kZXJpbmdNb2RlLCByZXNvbHV0aW9uU2NhbGUs
IGNvbG9yU3BhY2UsIHBpeGVsRm9ybWF0LCAqdGhpcyk7CiAKICAgICBpZiAoaW1hZ2VCdWZmZXIp
IHsKICAgICAgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Q3JlYXRl
SW1hZ2VCdWZmZXIoc2l6ZSwgcmVuZGVyaW5nTW9kZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNw
YWNlLCBwaXhlbEZvcm1hdCwgaW1hZ2VCdWZmZXItPnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
cigpKSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHkuaAppbmRleCA3ODU0NThiNzU2ZDk4OGUzMWM2ODE5ZGNkMWFjNjQ0YmYy
Njk4OGMzLi5lNzAxNWY5NGY3MzQ2NDE0ODc2NzQxNmFhZGI3MGNiYzllOTVjOTFkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhp
Y3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lm
IEVOQUJMRShHUFVfUFJPQ0VTUykKIAorI2luY2x1ZGUgIkdQVVByb2Nlc3NDb25uZWN0aW9uLmgi
CiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlLmgiCiAjaW5jbHVkZSAiTWVzc2Fn
ZVJlY2VpdmVyLmgiCiAjaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5oIgpAQCAtNTYsNyArNTcsNyBA
QCBjbGFzcyBEaXNwbGF5TGlzdFdyaXRlckhhbmRsZTsKIGNsYXNzIFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eQogICAgIDogcHVibGljIElQQzo6TWVzc2FnZVNlbmRlcgogICAgICwgcHJpdmF0
ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgotICAgICwgcHVibGljIENhbk1ha2VXZWFrUHRyPFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eT4geworICAgICwgcHVibGljIEdQVVByb2Nlc3NDb25uZWN0
aW9uOjpDbGllbnQgewogcHVibGljOgogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5PiBjcmVhdGUoKTsKIApAQCAtODYsNiArODcsMTAgQEAgcHVi
bGljOgogcHJpdmF0ZToKICAgICBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkoKTsKIAorICAg
IC8vIEdQVVByb2Nlc3NDb25uZWN0aW9uOjpDbGllbnQKKyAgICB2b2lkIGdwdVByb2Nlc3NDb25u
ZWN0aW9uRGlkQ2xvc2UoR1BVUHJvY2Vzc0Nvbm5lY3Rpb24mKSBmaW5hbDsKKworICAgIHZvaWQg
Y29ubmVjdFRvR1BVUHJvY2VzcygpOwogICAgIHZvaWQgdXBkYXRlUmV1c2FibGVIYW5kbGVzKCk7
CiAKICAgICAvLyBNZXNzYWdlcyB0byBiZSByZWNlaXZlZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5Lmgg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlc291cmNlQ2Fj
aGVQcm94eS5oCmluZGV4IGNjZDM4YzdiNDI3MjQwOGZhMmU0MWI1MTA0OTY1YmViYjdkNGYzYmQu
LjA2ZGQ0ZjY4YjkzYTllOTdmYTU0OWMwM2RmYzQ5ZGI5Mzg4OGJiZmIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZVBy
b3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVS
ZXNvdXJjZUNhY2hlUHJveHkuaApAQCAtNDksOCArNDksMTAgQEAgcHVibGljOgogCiAgICAgdm9p
ZCBjYWNoZU5hdGl2ZUltYWdlKFdlYkNvcmU6Ok5hdGl2ZUltYWdlJik7CiAKLXByaXZhdGU6CiAg
ICAgdXNpbmcgSW1hZ2VCdWZmZXJIYXNoTWFwID0gSGFzaE1hcDxXZWJDb3JlOjpSZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIsIFdlYWtQdHI8V2ViQ29yZTo6SW1hZ2VCdWZmZXI+PjsKKyAgICBj
b25zdCBJbWFnZUJ1ZmZlckhhc2hNYXAmIGltYWdlQnVmZmVycygpIGNvbnN0IHsgcmV0dXJuIG1f
aW1hZ2VCdWZmZXJzOyB9CisKK3ByaXZhdGU6CiAgICAgdXNpbmcgTmF0aXZlSW1hZ2VIYXNoTWFw
ID0gSGFzaE1hcDxXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIFdlYWtQdHI8
V2ViQ29yZTo6TmF0aXZlSW1hZ2U+PjsKICAgICAKICAgICB2b2lkIHJlbGVhc2VOYXRpdmVJbWFn
ZShXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpIG92ZXJyaWRlOwpkaWZmIC0t
Z2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDY5ZWQ2ODY1OGEx
N2NiMmQxZGE1ZTJkZWMzMGJmZmZkYTk3MjNiMTYuLmVjMDlkNGU2NTc2MmE5MWM4Zjg3NzlkOGU1
ZjUzMjQxOTgxNTM1MGMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAyMC0xMS0xMyAgQ2hyaXMgRHVtZXogIDxjZHVt
ZXpAYXBwbGUuY29tPgorCisgICAgICAgIFtHUFVQcm9jZXNzXSBBZGQgYmFzaWMgR1BVUHJvY2Vz
cyBjcmFzaCBoYW5kbGluZyBmb3IgY2FudmFzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTg5MjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGQgQVBJIHRlc3QgY292ZXJhZ2UuCisKKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0dQVVByb2Nlc3MubW06CisgICAgICAgIChj
b252ZXJ0VG9DR0ltYWdlKToKKyAgICAgICAgKGdldFBpeGVsSW5kZXgpOgorICAgICAgICAoVEVT
VCk6CisKIDIwMjAtMTEtMTMgIEpvbmF0aGFuIEJlZGFyZCAgPGpiZWRhcmRAYXBwbGUuY29tPgog
CiAgICAgICAgIFJFR1JFU1NJT046IHIyNjk1MTQgUmVzZXQgc2VydmVyIHBvcnQgYmVmb3JlIHJl
c3RhcnRpbmcgd2Vic2VydmVyCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL0dQVVByb2Nlc3MubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL0dQVVByb2Nlc3MubW0KaW5kZXggOGQ4ODRkMWU3ZDk2MWU3ZjgzYmQxZGViZmQz
MTRmYjEwYjE4Zjc3NS4uZmRlMmI5N2RjNjI2MGI1MThlMTRmNmQ1YzVhYjg3OGJhZGJjNTgxOCAx
MDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9HUFVQcm9j
ZXNzLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvR1BVUHJv
Y2Vzcy5tbQpAQCAtMzUsNiArMzUsMzAgQEAKICNpbXBvcnQgPFdlYktpdC9fV0tJbnRlcm5hbERl
YnVnRmVhdHVyZS5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogCisjaWYgUExBVEZPUk0o
TUFDKQordHlwZWRlZiBOU0ltYWdlICpQbGF0Zm9ybUltYWdlOwordHlwZWRlZiBOU1dpbmRvdyAq
UGxhdGZvcm1XaW5kb3c7CisKK3N0YXRpYyBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY29udmVydFRv
Q0dJbWFnZShOU0ltYWdlICppbWFnZSkKK3sKKyAgICByZXR1cm4gW2ltYWdlIENHSW1hZ2VGb3JQ
cm9wb3NlZFJlY3Q6bmlsIGNvbnRleHQ6bmlsIGhpbnRzOm5pbF07Cit9CisKKyNlbHNlCit0eXBl
ZGVmIFVJSW1hZ2UgKlBsYXRmb3JtSW1hZ2U7Cit0eXBlZGVmIFVJV2luZG93ICpQbGF0Zm9ybVdp
bmRvdzsKKworc3RhdGljIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjb252ZXJ0VG9DR0ltYWdlKFVJ
SW1hZ2UgKmltYWdlKQoreworICAgIHJldHVybiBpbWFnZS5DR0ltYWdlOworfQorI2VuZGlmCisK
K3N0YXRpYyBOU0ludGVnZXIgZ2V0UGl4ZWxJbmRleChOU0ludGVnZXIgeCwgTlNJbnRlZ2VyIHks
IE5TSW50ZWdlciB3aWR0aCkKK3sKKyAgICByZXR1cm4gKHkgKiB3aWR0aCArIHgpICogNDsKK30K
KwogVEVTVChHUFVQcm9jZXNzLCBSZWxhdW5jaE9uQ3Jhc2gpCiB7CiAgICAgYXV0byBjb25maWd1
cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsK
QEAgLTI2MCwzICsyODQsMTUxIEBAIFRFU1QoR1BVUHJvY2VzcywgQ3Jhc2hXaGlsZVBsYXlpbmdW
aWRlbykKICAgICBFWFBFQ1RfRVEoZ3B1UHJvY2Vzc1BJRCwgW3Byb2Nlc3NQb29sIF9ncHVQcm9j
ZXNzSWRlbnRpZmllcl0pOwogICAgIEVYUEVDVF9FUSh3ZWJWaWV3UElELCBbd2ViVmlldyBfd2Vi
UHJvY2Vzc0lkZW50aWZpZXJdKTsKIH0KKworc3RhdGljIE5TU3RyaW5nICp0ZXN0Q2FudmFzUGFn
ZSA9IEAiPGJvZHk+IFxuIgorICAgICI8Y2FudmFzIGlkPSdteUNhbnZhcycgd2lkdGg9JzQwMHB4
JyBoZWlnaHQ9JzQwMHB4Jz5cbiIKKyAgICAiPHNjcmlwdD4gXG4iCisgICAgInZhciBjb250ZXh0
ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ215Q2FudmFzJykuZ2V0Q29udGV4dCgnMmQnKTsg
XG4iCisgICAgIjwvc2NyaXB0PiBcbiIKKyAgICAiPC9ib2R5PiI7CisKK1RFU1QoR1BVUHJvY2Vz
cywgQ2FudmFzQmFzaWNDcmFzaEhhbmRsaW5nKQoreworICAgIGF1dG8gY29uZmlndXJhdGlvbiA9
IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CisgICAgZm9y
IChfV0tJbnRlcm5hbERlYnVnRmVhdHVyZSAqZmVhdHVyZSBpbiBbV0tQcmVmZXJlbmNlcyBfaW50
ZXJuYWxEZWJ1Z0ZlYXR1cmVzXSkgeworICAgICAgICBpZiAoW2ZlYXR1cmUua2V5IGlzRXF1YWxU
b1N0cmluZzpAIlVzZUdQVVByb2Nlc3NGb3JDYW52YXNSZW5kZXJpbmdFbmFibGVkIl0pIHsKKyAg
ICAgICAgICAgIFtbY29uZmlndXJhdGlvbiBwcmVmZXJlbmNlc10gX3NldEVuYWJsZWQ6WUVTIGZv
ckludGVybmFsRGVidWdGZWF0dXJlOmZlYXR1cmVdOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBOU0ludGVnZXIgdmlld1dpZHRoID0gNDAwOworICAgIE5TSW50
ZWdlciB2aWV3SGVpZ2h0ID0gNDAwOworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0
V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgdmlld1dpZHRo
LCB2aWV3SGVpZ2h0KSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCkgYWRkVG9XaW5k
b3c6Tk9dKTsKKworICAgIFJldGFpblB0cjxQbGF0Zm9ybVdpbmRvdz4gd2luZG93OworICAgIENH
RmxvYXQgYmFja2luZ1NjYWxlRmFjdG9yOworCisjaWYgUExBVEZPUk0oTUFDKQorICAgIHdpbmRv
dyA9IGFkb3B0TlMoW1tOU1dpbmRvdyBhbGxvY10gaW5pdFdpdGhDb250ZW50UmVjdDpbd2ViVmll
dyBmcmFtZV0gc3R5bGVNYXNrOk5TQm9yZGVybGVzc1dpbmRvd01hc2sgYmFja2luZzpOU0JhY2tp
bmdTdG9yZUJ1ZmZlcmVkIGRlZmVyOk5PXSk7CisgICAgW1t3aW5kb3cgY29udGVudFZpZXddIGFk
ZFN1YnZpZXc6d2ViVmlldy5nZXQoKV07CisgICAgYmFja2luZ1NjYWxlRmFjdG9yID0gW3dpbmRv
dyBiYWNraW5nU2NhbGVGYWN0b3JdOworI2VsaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICB3
aW5kb3cgPSBhZG9wdE5TKFtbVUlXaW5kb3cgYWxsb2NdIGluaXRXaXRoRnJhbWU6W3dlYlZpZXcg
ZnJhbWVdXSk7CisgICAgW3dpbmRvdyBhZGRTdWJ2aWV3OndlYlZpZXcuZ2V0KCldOworICAgIGJh
Y2tpbmdTY2FsZUZhY3RvciA9IFtbd2luZG93IHNjcmVlbl0gc2NhbGVdOworI2VuZGlmCisKKyAg
ICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmc6dGVzdENhbnZhc1BhZ2VdOwor
CisgICAgYXV0byB3ZWJWaWV3UElEID0gW3dlYlZpZXcgX3dlYlByb2Nlc3NJZGVudGlmaWVyXTsK
KworICAgIC8vIFRyeSBwYWludGluZyB0aGUgY2FudmFzIHJlZC4KKyAgICBfX2Jsb2NrIGJvb2wg
ZG9uZSA9IGZhbHNlOworICAgIFt3ZWJWaWV3IGV2YWx1YXRlSmF2YVNjcmlwdDpAImNvbnRleHQu
ZmlsbFN0eWxlID0gJyNGRjAwMDAnOyBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIDQwMCwgNDAwKTsi
IGNvbXBsZXRpb25IYW5kbGVyOl4oaWQgcmVzdWx0LCBOU0Vycm9yICplcnJvcikgeworICAgICAg
ICBFWFBFQ1RfVFJVRSghZXJyb3IpOworICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICB9XTsKKyAg
ICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOworCisgICAgW3dlYlZpZXcgd2FpdEZv
ck5leHRQcmVzZW50YXRpb25VcGRhdGVdOworCisgICAgLy8gVGhlIEdQVSBwcm9jZXNzIHNob3Vs
ZCBoYXZlIGJlZW4gbGF1bmNoZWQuCisgICAgYXV0byogcHJvY2Vzc1Bvb2wgPSBjb25maWd1cmF0
aW9uLmdldCgpLnByb2Nlc3NQb29sOworICAgIHVuc2lnbmVkIHRpbWVvdXQgPSAwOworICAgIHdo
aWxlICghW3Byb2Nlc3NQb29sIF9ncHVQcm9jZXNzSWRlbnRpZmllcl0gJiYgdGltZW91dCsrIDwg
MTAwKQorICAgICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpzbGVlcCgwLjEpOworICAgIGF1dG8g
Z3B1UHJvY2Vzc1BJRCA9IFtwcm9jZXNzUG9vbCBfZ3B1UHJvY2Vzc0lkZW50aWZpZXJdOworICAg
IEVYUEVDVF9ORSgwLCBncHVQcm9jZXNzUElEKTsKKworICAgIGF1dG8gc25hcHNob3RDb25maWd1
cmF0aW9uID0gYWRvcHROUyhbW1dLU25hcHNob3RDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7
CisgICAgW3NuYXBzaG90Q29uZmlndXJhdGlvbiBzZXRSZWN0Ok5TTWFrZVJlY3QoMCwgMCwgMTUw
LCAxNTApXTsKKyAgICBbc25hcHNob3RDb25maWd1cmF0aW9uIHNldFNuYXBzaG90V2lkdGg6QCgx
NTApXTsKKyAgICBbc25hcHNob3RDb25maWd1cmF0aW9uIHNldEFmdGVyU2NyZWVuVXBkYXRlczpZ
RVNdOworCisgICAgLy8gTWFrZSBzdXJlIGEgcmVkIHNxdWFyZSBpcyBwYWludGVkLgorICAgIGRv
bmUgPSBmYWxzZTsKKyAgICBbd2ViVmlldyB0YWtlU25hcHNob3RXaXRoQ29uZmlndXJhdGlvbjpz
bmFwc2hvdENvbmZpZ3VyYXRpb24uZ2V0KCkgY29tcGxldGlvbkhhbmRsZXI6XihQbGF0Zm9ybUlt
YWdlIHNuYXBzaG90SW1hZ2UsIE5TRXJyb3IgKmVycm9yKSB7CisgICAgICAgIEVYUEVDVF9UUlVF
KCFlcnJvcik7CisKKyAgICAgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGNnSW1hZ2UgPSBjb252
ZXJ0VG9DR0ltYWdlKHNuYXBzaG90SW1hZ2UpOworICAgICAgICBSZXRhaW5QdHI8Q0dDb2xvclNw
YWNlUmVmPiBjb2xvclNwYWNlID0gYWRvcHRDRihDR0NvbG9yU3BhY2VDcmVhdGVEZXZpY2VSR0Io
KSk7CisKKyAgICAgICAgTlNJbnRlZ2VyIHZpZXdXaWR0aEluUGl4ZWxzID0gdmlld1dpZHRoICog
YmFja2luZ1NjYWxlRmFjdG9yOworICAgICAgICBOU0ludGVnZXIgdmlld0hlaWdodEluUGl4ZWxz
ID0gdmlld0hlaWdodCAqIGJhY2tpbmdTY2FsZUZhY3RvcjsKKworICAgICAgICB1aW50OF90ICpy
Z2JhID0gKHVuc2lnbmVkIGNoYXIgKiljYWxsb2Modmlld1dpZHRoSW5QaXhlbHMgKiB2aWV3SGVp
Z2h0SW5QaXhlbHMgKiA0LCBzaXplb2YodW5zaWduZWQgY2hhcikpOworICAgICAgICBSZXRhaW5Q
dHI8Q0dDb250ZXh0UmVmPiBjb250ZXh0ID0gQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKHJnYmEsIHZp
ZXdXaWR0aEluUGl4ZWxzLCB2aWV3SGVpZ2h0SW5QaXhlbHMsIDgsIDQgKiB2aWV3V2lkdGhJblBp
eGVscywgY29sb3JTcGFjZS5nZXQoKSwga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0IHwg
a0NHQml0bWFwQnl0ZU9yZGVyMzJCaWcpOworICAgICAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29u
dGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCB2aWV3V2lkdGhJblBpeGVscywgdmlld0hlaWdo
dEluUGl4ZWxzKSwgY2dJbWFnZS5nZXQoKSk7CisKKyAgICAgICAgTlNJbnRlZ2VyIHBpeGVsSW5k
ZXggPSBnZXRQaXhlbEluZGV4KDUwLCA1MCwgdmlld1dpZHRoSW5QaXhlbHMpOworICAgICAgICBF
WFBFQ1RfRVEoMjU1LCByZ2JhW3BpeGVsSW5kZXhdKTsKKyAgICAgICAgRVhQRUNUX0VRKDAsIHJn
YmFbcGl4ZWxJbmRleCArIDFdKTsKKyAgICAgICAgRVhQRUNUX0VRKDAsIHJnYmFbcGl4ZWxJbmRl
eCArIDJdKTsKKworICAgICAgICBwaXhlbEluZGV4ID0gZ2V0UGl4ZWxJbmRleCgxMDAsIDEwMCwg
dmlld1dpZHRoSW5QaXhlbHMpOworICAgICAgICBFWFBFQ1RfRVEoMjU1LCByZ2JhW3BpeGVsSW5k
ZXhdKTsKKyAgICAgICAgRVhQRUNUX0VRKDAsIHJnYmFbcGl4ZWxJbmRleCArIDFdKTsKKyAgICAg
ICAgRVhQRUNUX0VRKDAsIHJnYmFbcGl4ZWxJbmRleCArIDJdKTsKKworICAgICAgICBmcmVlKHJn
YmEpOworCisgICAgICAgIGRvbmUgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6
OlV0aWw6OnJ1bigmZG9uZSk7CisKKyAgICAvLyBLaWxsIHRoZSBHUFVQcm9jZXNzLgorICAgIGtp
bGwoZ3B1UHJvY2Vzc1BJRCwgOSk7CisKKyAgICAvLyBHUFUgUHJvY2VzcyBzaG91bGQgZ2V0IHJl
bGF1bmNoZWQuCisgICAgdGltZW91dCA9IDA7CisgICAgd2hpbGUgKCghW3Byb2Nlc3NQb29sIF9n
cHVQcm9jZXNzSWRlbnRpZmllcl0gfHwgW3Byb2Nlc3NQb29sIF9ncHVQcm9jZXNzSWRlbnRpZmll
cl0gPT0gZ3B1UHJvY2Vzc1BJRCkgJiYgdGltZW91dCsrIDwgMTAwKQorICAgICAgICBUZXN0V2Vi
S2l0QVBJOjpVdGlsOjpzbGVlcCgwLjEpOworICAgIEVYUEVDVF9ORShbcHJvY2Vzc1Bvb2wgX2dw
dVByb2Nlc3NJZGVudGlmaWVyXSwgMCk7CisgICAgRVhQRUNUX05FKFtwcm9jZXNzUG9vbCBfZ3B1
UHJvY2Vzc0lkZW50aWZpZXJdLCBncHVQcm9jZXNzUElEKTsKKyAgICBncHVQcm9jZXNzUElEID0g
W3Byb2Nlc3NQb29sIF9ncHVQcm9jZXNzSWRlbnRpZmllcl07CisKKyAgICAvLyBXZWJQcm9jZXNz
IHNob3VsZCBub3QgaGF2ZSBjcmFzaGVkLgorICAgIEVYUEVDVF9FUSh3ZWJWaWV3UElELCBbd2Vi
VmlldyBfd2ViUHJvY2Vzc0lkZW50aWZpZXJdKTsKKworICAgIC8vIFRyeSBwYWludGluZyB0aGUg
Y2FudmFzIGdyZWVuLgorICAgIGRvbmUgPSBmYWxzZTsKKyAgICBbd2ViVmlldyBldmFsdWF0ZUph
dmFTY3JpcHQ6QCJjb250ZXh0LmZpbGxTdHlsZSA9ICcjMDBGRjAwJzsgY29udGV4dC5maWxsUmVj
dCgwLCAwLCA0MDAsIDQwMCk7IiBjb21wbGV0aW9uSGFuZGxlcjpeKGlkIHJlc3VsdCwgTlNFcnJv
ciAqZXJyb3IpIHsKKyAgICAgICAgRVhQRUNUX1RSVUUoIWVycm9yKTsKKyAgICAgICAgZG9uZSA9
IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKKwor
ICAgIFt3ZWJWaWV3IHdhaXRGb3JOZXh0UHJlc2VudGF0aW9uVXBkYXRlXTsKKworICAgIC8vIE1h
a2Ugc3VyZSBhIGdyZWVuIHNxdWFyZSBpcyBwYWludGVkLgorICAgIGRvbmUgPSBmYWxzZTsKKyAg
ICBbd2ViVmlldyB0YWtlU25hcHNob3RXaXRoQ29uZmlndXJhdGlvbjpzbmFwc2hvdENvbmZpZ3Vy
YXRpb24uZ2V0KCkgY29tcGxldGlvbkhhbmRsZXI6XihQbGF0Zm9ybUltYWdlIHNuYXBzaG90SW1h
Z2UsIE5TRXJyb3IgKmVycm9yKSB7CisgICAgICAgIEVYUEVDVF9UUlVFKCFlcnJvcik7CisKKyAg
ICAgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGNnSW1hZ2UgPSBjb252ZXJ0VG9DR0ltYWdlKHNu
YXBzaG90SW1hZ2UpOworICAgICAgICBSZXRhaW5QdHI8Q0dDb2xvclNwYWNlUmVmPiBjb2xvclNw
YWNlID0gYWRvcHRDRihDR0NvbG9yU3BhY2VDcmVhdGVEZXZpY2VSR0IoKSk7CisKKyAgICAgICAg
TlNJbnRlZ2VyIHZpZXdXaWR0aEluUGl4ZWxzID0gdmlld1dpZHRoICogYmFja2luZ1NjYWxlRmFj
dG9yOworICAgICAgICBOU0ludGVnZXIgdmlld0hlaWdodEluUGl4ZWxzID0gdmlld0hlaWdodCAq
IGJhY2tpbmdTY2FsZUZhY3RvcjsKKworICAgICAgICB1aW50OF90ICpyZ2JhID0gKHVuc2lnbmVk
IGNoYXIgKiljYWxsb2Modmlld1dpZHRoSW5QaXhlbHMgKiB2aWV3SGVpZ2h0SW5QaXhlbHMgKiA0
LCBzaXplb2YodW5zaWduZWQgY2hhcikpOworICAgICAgICBSZXRhaW5QdHI8Q0dDb250ZXh0UmVm
PiBjb250ZXh0ID0gQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKHJnYmEsIHZpZXdXaWR0aEluUGl4ZWxz
LCB2aWV3SGVpZ2h0SW5QaXhlbHMsIDgsIDQgKiB2aWV3V2lkdGhJblBpeGVscywgY29sb3JTcGFj
ZS5nZXQoKSwga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0IHwga0NHQml0bWFwQnl0ZU9y
ZGVyMzJCaWcpOworICAgICAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dC5nZXQoKSwgQ0dS
ZWN0TWFrZSgwLCAwLCB2aWV3V2lkdGhJblBpeGVscywgdmlld0hlaWdodEluUGl4ZWxzKSwgY2dJ
bWFnZS5nZXQoKSk7CisKKyAgICAgICAgTlNJbnRlZ2VyIHBpeGVsSW5kZXggPSBnZXRQaXhlbElu
ZGV4KDUwLCA1MCwgdmlld1dpZHRoSW5QaXhlbHMpOworICAgICAgICBFWFBFQ1RfRVEoMCwgcmdi
YVtwaXhlbEluZGV4XSk7CisgICAgICAgIEVYUEVDVF9FUSgyNTUsIHJnYmFbcGl4ZWxJbmRleCAr
IDFdKTsKKyAgICAgICAgRVhQRUNUX0VRKDAsIHJnYmFbcGl4ZWxJbmRleCArIDJdKTsKKworICAg
ICAgICBwaXhlbEluZGV4ID0gZ2V0UGl4ZWxJbmRleCgxMDAsIDEwMCwgdmlld1dpZHRoSW5QaXhl
bHMpOworICAgICAgICBFWFBFQ1RfRVEoMCwgcmdiYVtwaXhlbEluZGV4XSk7CisgICAgICAgIEVY
UEVDVF9FUSgyNTUsIHJnYmFbcGl4ZWxJbmRleCArIDFdKTsKKyAgICAgICAgRVhQRUNUX0VRKDAs
IHJnYmFbcGl4ZWxJbmRleCArIDJdKTsKKworICAgICAgICBmcmVlKHJnYmEpOworCisgICAgICAg
IGRvbmUgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9u
ZSk7Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>414103</attachid>
            <date>2020-11-13 16:14:15 -0800</date>
            <delta_ts>2020-11-13 18:11:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-218924-20201113161402.patch</filename>
            <type>text/plain</type>
            <size>20721</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY5Nzg5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGVjMmY5YTdhZmUyNGY3ZjYw
Y2Q2ZTMwZTE4ZTAyNTQ1ZjI2ZDM1YzQuLmI3ODhmYWRjMGUxNzYzZWQzMzA5YmQxZWIxNTkyMGYx
MzE4M2QwNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzMgQEAKKzIwMjAtMTEtMTMgIENocmlzIER1
bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVUHJvY2Vzc10gQWRkIGJhc2lj
IEdQVVByb2Nlc3MgY3Jhc2ggaGFuZGxpbmcgZm9yIGNhbnZhcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE4OTI0CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgU2ltb24gRnJhc2VyLgorCisgICAgICAgIFVwZGF0ZSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHkgdG8gYmUgYSBHUFVQcm9jZXNzQ29ubmVjdGlvbjo6Q2xpZW50IHNvIHRoYXQgaXQKKyAg
ICAgICAgZ2V0cyBub3RpZmllZCB3aGVuIHRoZSBJUEMgY29ubmVjdGlvbiB0byB0aGUgR1BVUHJv
Y2VzcyBnZXRzIHNldmVyZWQuIFdoZW4gdGhpcworICAgICAgICBoYXBwZW5zLCBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHkgY2xlYXJzIGFsbCBpdHMgU2hhcmVkTWVtb3J5IGhhbmRsZXMgYW5k
CisgICAgICAgIHNlbmRzIElQQyBtZXNzYWdlcyB0byB0aGUgR1BVIHByb2Nlc3MgdG8gcmVjcmVh
dGUgYWxsIHRoZSBJbWFnZUJ1ZmZlcnMgd2UgaGFkLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9H
UFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJ
bWFnZUJ1ZmZlclByb3h5OjpjbGVhckJhY2tlbmQpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJ
bWFnZUJ1ZmZlclByb3h5OjpzaXplIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1h
Z2VCdWZmZXJQcm94eTo6cmVuZGVyaW5nTW9kZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZUltYWdlQnVmZmVyUHJveHk6OmNvbG9yU3BhY2UgY29uc3QpOgorICAgICAgICAoV2ViS2l0
OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpwaXhlbEZvcm1hdCBjb25zdCk6CisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyUHJveHk6OlJlbW90ZUltYWdlQnVmZmVyUHJveHkpOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5Ojpjb25uZWN0VG9HUFVQcm9jZXNzKToKKyAgICAgICAgKFdlYktp
dDo6cmVjcmVhdGVJbWFnZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eTo6Z3B1UHJvY2Vzc0Nvbm5lY3Rpb25EaWRDbG9zZSk6CisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y3JlYXRlSW1hZ2VCdWZmZXIpOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5o
OgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlc291cmNlQ2FjaGVQ
cm94eS5oOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZXNvdXJjZUNhY2hlUHJveHk6OmltYWdl
QnVmZmVycyBjb25zdCk6CisKIDIwMjAtMTEtMTMgIENsYXVkaW8gU2FhdmVkcmEgIDxjc2FhdmVk
cmFAaWdhbGlhLmNvbT4KIAogICAgICAgICBOb24tdW5pZmllZCBidWlsZCBmaXhlcy4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VC
dWZmZXJQcm94eS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1v
dGVJbWFnZUJ1ZmZlclByb3h5LmgKaW5kZXggMjdlOGZjMDViMzI3ZGQyZjViY2Q3ZjFiYzdjMDk4
MDg5NDU2YzllNy4uNjE3ZDVkOGRkODBkNmE3YTg5YzM1ZTY2ZjQ1Y2Q5NTdjMjdkODU0YiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFn
ZUJ1ZmZlclByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGlj
cy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKQEAgLTQ4LDEyICs0OCwxMiBAQCBjbGFzcyBSZW1v
dGVJbWFnZUJ1ZmZlclByb3h5IDogcHVibGljIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJbWFnZUJ1
ZmZlcjxCYWNrZW5kVAogICAgIHVzaW5nIEJhc2VEaXNwbGF5TGlzdEltYWdlQnVmZmVyOjptX3Jl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcjsKIAogcHVibGljOgotICAgIHN0YXRpYyBSZWZQdHI8
UmVtb3RlSW1hZ2VCdWZmZXJQcm94eT4gY3JlYXRlKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYg
c2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkm
IHJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSkKKyAgICBzdGF0aWMgUmVmUHRyPFJlbW90ZUlt
YWdlQnVmZmVyUHJveHk+IGNyZWF0ZShjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIHNpemUsIFdl
YkNvcmU6OlJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxl
LCBXZWJDb3JlOjpDb2xvclNwYWNlIGNvbG9yU3BhY2UsIFdlYkNvcmU6OlBpeGVsRm9ybWF0IHBp
eGVsRm9ybWF0LCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkmIHJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eSkKICAgICB7CiAgICAgICAgIGlmIChCYWNrZW5kVHlwZTo6Y2FsY3VsYXRlQmFj
a2VuZFNpemUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlKS5pc0VtcHR5KCkpCiAgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIAotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJlbW90ZUltYWdl
QnVmZmVyUHJveHkoc2l6ZSwgcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KSk7CisgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eShzaXplLCByZW5kZXJp
bmdNb2RlLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIHBpeGVsRm9ybWF0LCByZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkpKTsKICAgICB9CiAKICAgICB+UmVtb3RlSW1hZ2VCdWZmZXJQ
cm94eSgpCkBAIC02NSw2ICs2NSw4IEBAIHB1YmxpYzoKICAgICAgICAgbV9yZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHktPnJlbGVhc2VSZW1vdGVSZXNvdXJjZShtX3JlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllcik7CiAgICAgfQogCisgICAgdm9pZCBjbGVhckJhY2tlbmQoKSB7IG1fYmFja2Vu
ZCA9IG51bGxwdHI7IH0KKwogICAgIHZvaWQgY3JlYXRlQmFja2VuZChjb25zdCBXZWJDb3JlOjpG
bG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBiYWNrZW5kU2l6
ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlIGNvbG9yU3BhY2Us
IFdlYkNvcmU6OlBpeGVsRm9ybWF0IHBpeGVsRm9ybWF0LCBJbWFnZUJ1ZmZlckJhY2tlbmRIYW5k
bGUgaGFuZGxlKQogICAgIHsKICAgICAgICAgQVNTRVJUKCFtX2JhY2tlbmQpOwpAQCAtNzYsMTAg
Kzc4LDIxIEBAIHB1YmxpYzoKICAgICAgICAgbV9yZWNlaXZlZEZsdXNoSWRlbnRpZmllciA9IGZs
dXNoSWRlbnRpZmllcjsKICAgICB9CiAKKyAgICBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIHNp
emUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICBXZWJDb3JlOjpSZW5kZXJpbmdNb2Rl
IHJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmluZ01vZGU7IH0KKyAgICBm
bG9hdCByZXNvbHV0aW9uU2NhbGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3Jlc29sdXRpb25T
Y2FsZTsgfQorICAgIFdlYkNvcmU6OkNvbG9yU3BhY2UgY29sb3JTcGFjZSgpIGNvbnN0IHsgcmV0
dXJuIG1fY29sb3JTcGFjZTsgfQorICAgIFdlYkNvcmU6OlBpeGVsRm9ybWF0IHBpeGVsRm9ybWF0
KCkgY29uc3QgeyByZXR1cm4gbV9waXhlbEZvcm1hdDsgfQorCiBwcm90ZWN0ZWQ6Ci0gICAgUmVt
b3RlSW1hZ2VCdWZmZXJQcm94eShjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIHNpemUsIFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSYgcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KQorICAg
IFJlbW90ZUltYWdlQnVmZmVyUHJveHkoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBzaXplLCBX
ZWJDb3JlOjpSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2Fs
ZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSBjb2xvclNwYWNlLCBXZWJDb3JlOjpQaXhlbEZvcm1hdCBw
aXhlbEZvcm1hdCwgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5JiByZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHkpCiAgICAgICAgIDogQmFzZURpc3BsYXlMaXN0SW1hZ2VCdWZmZXIoc2l6ZSwg
dGhpcykKICAgICAgICAgLCBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eShtYWtlV2Vha1B0
cihyZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpKQorICAgICAgICAsIG1fc2l6ZShzaXplKQor
ICAgICAgICAsIG1fcmVuZGVyaW5nTW9kZShyZW5kZXJpbmdNb2RlKQorICAgICAgICAsIG1fcmVz
b2x1dGlvblNjYWxlKHJlc29sdXRpb25TY2FsZSkKKyAgICAgICAgLCBtX2NvbG9yU3BhY2UoY29s
b3JTcGFjZSkKKyAgICAgICAgLCBtX3BpeGVsRm9ybWF0KHBpeGVsRm9ybWF0KQogICAgIHsKICAg
ICAgICAgQVNTRVJUKG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KTsKICAgICAgICAgbV9y
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHktPnJlbW90ZVJlc291cmNlQ2FjaGVQcm94eSgpLmNh
Y2hlSW1hZ2VCdWZmZXIoKnRoaXMpOwpAQCAtMzAzLDYgKzMxNiwxMSBAQCBwcm90ZWN0ZWQ6CiAg
ICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZsdXNoSWRlbnRpZmllciBtX3JlY2VpdmVkRmx1c2hJ
ZGVudGlmaWVyOwogICAgIFdlYWtQdHI8UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5PiBtX3Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTsKICAgICBzaXplX3QgbV9pdGVtQ291bnRJbkN1cnJl
bnREaXNwbGF5TGlzdCB7IDAgfTsKKyAgICBXZWJDb3JlOjpGbG9hdFNpemUgbV9zaXplOworICAg
IFdlYkNvcmU6OlJlbmRlcmluZ01vZGUgbV9yZW5kZXJpbmdNb2RlOworICAgIGZsb2F0IG1fcmVz
b2x1dGlvblNjYWxlOworICAgIFdlYkNvcmU6OkNvbG9yU3BhY2UgbV9jb2xvclNwYWNlOworICAg
IFdlYkNvcmU6OlBpeGVsRm9ybWF0IG1fcGl4ZWxGb3JtYXQ7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhp
Y3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcAppbmRleCA3
MDBmNWVjMGYwYTA4OTBkMDc3MGJlNzU4MDk5ZTYzYjQ5YjFhNjIzLi4zNmIwM2QzODFlZDJjNTI0
MWNmY2QzZjViMzU1MTc4YmIzOGNmNmE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkuY3BwCkBAIC0zMCw3ICszMCw2IEBACiAKICNpbmNsdWRlICJEaXNwbGF5TGlzdFdy
aXRlckhhbmRsZS5oIgogI2luY2x1ZGUgIkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaCIKLSNp
bmNsdWRlICJHUFVQcm9jZXNzQ29ubmVjdGlvbi5oIgogI2luY2x1ZGUgIkltYWdlRGF0YVJlZmVy
ZW5jZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oIgogI2lu
Y2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRNZXNzYWdlcy5oIgpAQCAtNDksMTIgKzQ4LDcg
QEAgc3RkOjp1bmlxdWVfcHRyPFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eT4gUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5OjpjcmVhdGUKIAogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkoKQogewotICAgIC8vIFJlZ2lzdGVyIGl0c2Vs
ZiBhcyBhIE1lc3NhZ2VSZWNlaXZlciBpbiB0aGUgR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uCi0gICAg
SVBDOjpNZXNzYWdlUmVjZWl2ZXJNYXAmIG1lc3NhZ2VSZWNlaXZlck1hcCA9IFdlYlByb2Nlc3M6
OnNpbmdsZXRvbigpLmVuc3VyZUdQVVByb2Nlc3NDb25uZWN0aW9uKCkubWVzc2FnZVJlY2VpdmVy
TWFwKCk7Ci0gICAgbWVzc2FnZVJlY2VpdmVyTWFwLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdl
czo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1f
cmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIudG9VSW50NjQoKSwgKnRoaXMpOwotCi0gICAgLy8g
Q3JlYXRlIHRoZSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kCi0gICAgc2VuZChNZXNzYWdlczo6R1BV
Q29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Q3JlYXRlUmVuZGVyaW5nQmFja2VuZChtX3JlbmRlcmlu
Z0JhY2tlbmRJZGVudGlmaWVyKSwgMCk7CisgICAgY29ubmVjdFRvR1BVUHJvY2VzcygpOwogfQog
CiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6On5SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHkoKQpAQCAtNjcsNiArNjEsNDcgQEAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Ojp+UmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KCkKICAgICBzZW5kKE1lc3NhZ2VzOjpHUFVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzOjpSZWxlYXNlUmVuZGVyaW5nQmFja2VuZChtX3JlbmRlcmluZ0JhY2tl
bmRJZGVudGlmaWVyKSwgMCk7CiB9CiAKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
Ojpjb25uZWN0VG9HUFVQcm9jZXNzKCkKK3sKKyAgICBhdXRvJiBjb25uZWN0aW9uID0gV2ViUHJv
Y2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKTsKKyAgICBjb25u
ZWN0aW9uLmFkZENsaWVudCgqdGhpcyk7CisgICAgY29ubmVjdGlvbi5tZXNzYWdlUmVjZWl2ZXJN
YXAoKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVy
LnRvVUludDY0KCksICp0aGlzKTsKKworICAgIHNlbmQoTWVzc2FnZXM6OkdQVUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3M6OkNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQobV9yZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllciksIDApOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RhdGljIHZvaWQgcmVj
cmVhdGVJbWFnZUJ1ZmZlcihSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkmIHByb3h5LCBUJiBp
bWFnZUJ1ZmZlciwgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlc291cmNlSWRlbnRpZmll
ciwgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIp
Cit7CisgICAgaW1hZ2VCdWZmZXIuY2xlYXJCYWNrZW5kKCk7CisgICAgcHJveHkuc2VuZChNZXNz
YWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Q3JlYXRlSW1hZ2VCdWZmZXIoaW1hZ2VCdWZm
ZXIuc2l6ZSgpLCBpbWFnZUJ1ZmZlci5yZW5kZXJpbmdNb2RlKCksIGltYWdlQnVmZmVyLnJlc29s
dXRpb25TY2FsZSgpLCBpbWFnZUJ1ZmZlci5jb2xvclNwYWNlKCksIGltYWdlQnVmZmVyLnBpeGVs
Rm9ybWF0KCksIHJlc291cmNlSWRlbnRpZmllciksIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVy
KTsKK30KKwordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnJlZXN0YWJsaXNoR1BV
UHJvY2Vzc0Nvbm5lY3Rpb24oKQoreworICAgIGNvbm5lY3RUb0dQVVByb2Nlc3MoKTsKKworICAg
IGZvciAoYXV0byYgcGFpciA6IG1fcmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5LmltYWdlQnVmZmVy
cygpKSB7CisgICAgICAgIGlmIChhdXRvJiBiYXNlSW1hZ2VCdWZmZXIgPSBwYWlyLnZhbHVlKSB7
CisgICAgICAgICAgICBpZiAoaXM8QWNjZWxlcmF0ZWRSZW1vdGVJbWFnZUJ1ZmZlclByb3h5Pigq
YmFzZUltYWdlQnVmZmVyKSkKKyAgICAgICAgICAgICAgICByZWNyZWF0ZUltYWdlQnVmZmVyKCp0
aGlzLCBkb3duY2FzdDxBY2NlbGVyYXRlZFJlbW90ZUltYWdlQnVmZmVyUHJveHk+KCpiYXNlSW1h
Z2VCdWZmZXIpLCBwYWlyLmtleSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmVjcmVhdGVJbWFnZUJ1ZmZlcigqdGhpcywg
ZG93bmNhc3Q8VW5hY2NlbGVyYXRlZFJlbW90ZUltYWdlQnVmZmVyUHJveHk+KCpiYXNlSW1hZ2VC
dWZmZXIpLCBwYWlyLmtleSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CisgICAgICAg
IH0KKyAgICB9Cit9CisKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpncHVQcm9j
ZXNzQ29ubmVjdGlvbkRpZENsb3NlKEdQVVByb2Nlc3NDb25uZWN0aW9uJiBwcmV2aW91c0Nvbm5l
Y3Rpb24pCit7CisgICAgcHJldmlvdXNDb25uZWN0aW9uLnJlbW92ZUNsaWVudCgqdGhpcyk7CisK
KyAgICBtX2lkZW50aWZpZXJzT2ZSZXVzYWJsZUhhbmRsZXMuY2xlYXIoKTsKKyAgICBtX2lkZW50
aWZpZXJzT2ZIYW5kbGVzQXZhaWxhYmxlRm9yV3JpdGluZy5jbGVhcigpOworICAgIG1fc2hhcmVk
RGlzcGxheUxpc3RIYW5kbGVzLmNsZWFyKCk7CisKKyAgICByZWVzdGFibGlzaEdQVVByb2Nlc3ND
b25uZWN0aW9uKCk7Cit9CisKIElQQzo6Q29ubmVjdGlvbiogUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5OjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0CiB7CiAgICAgcmV0dXJuICZX
ZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5l
Y3Rpb24oKTsKQEAgLTk0LDEwICsxMjksMTAgQEAgUmVmUHRyPEltYWdlQnVmZmVyPiBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2kKICAg
ICBSZWZQdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyOwogCiAgICAgaWYgKHJlbmRlcmluZ01v
ZGUgPT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQpCi0gICAgICAgIGltYWdlQnVmZmVyID0g
QWNjZWxlcmF0ZWRSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpjcmVhdGUoc2l6ZSwgcmVzb2x1dGlv
blNjYWxlLCAqdGhpcyk7CisgICAgICAgIGltYWdlQnVmZmVyID0gQWNjZWxlcmF0ZWRSZW1vdGVJ
bWFnZUJ1ZmZlclByb3h5OjpjcmVhdGUoc2l6ZSwgcmVuZGVyaW5nTW9kZSwgcmVzb2x1dGlvblNj
YWxlLCBjb2xvclNwYWNlLCBwaXhlbEZvcm1hdCwgKnRoaXMpOwogCiAgICAgaWYgKCFpbWFnZUJ1
ZmZlcikKLSAgICAgICAgaW1hZ2VCdWZmZXIgPSBVbmFjY2VsZXJhdGVkUmVtb3RlSW1hZ2VCdWZm
ZXJQcm94eTo6Y3JlYXRlKHNpemUsIHJlc29sdXRpb25TY2FsZSwgKnRoaXMpOworICAgICAgICBp
bWFnZUJ1ZmZlciA9IFVuYWNjZWxlcmF0ZWRSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpjcmVhdGUo
c2l6ZSwgcmVuZGVyaW5nTW9kZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBwaXhlbEZv
cm1hdCwgKnRoaXMpOwogCiAgICAgaWYgKGltYWdlQnVmZmVyKSB7CiAgICAgICAgIHNlbmQoTWVz
c2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkNyZWF0ZUltYWdlQnVmZmVyKHNpemUsIHJl
bmRlcmluZ01vZGUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgcGl4ZWxGb3JtYXQsIGlt
YWdlQnVmZmVyLT5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSksIG1fcmVuZGVyaW5nQmFj
a2VuZElkZW50aWZpZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgKaW5k
ZXggNzg1NDU4Yjc1NmQ5ODhlMzFjNjgxOWRjZDFhYzY0NGJmMjY5ODhjMy4uYjA5NWEwMDYwNTc0
ZDliNDRhOGQ3YTU2ZDdmODcxNGViNTZmMjBkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eS5oCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpZiBFTkFCTEUoR1BVX1BST0NFU1Mp
CiAKKyNpbmNsdWRlICJHUFVQcm9jZXNzQ29ubmVjdGlvbi5oIgogI2luY2x1ZGUgIkltYWdlQnVm
ZmVyQmFja2VuZEhhbmRsZS5oIgogI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgogI2luY2x1
ZGUgIk1lc3NhZ2VTZW5kZXIuaCIKQEAgLTU2LDcgKzU3LDcgQEAgY2xhc3MgRGlzcGxheUxpc3RX
cml0ZXJIYW5kbGU7CiBjbGFzcyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkKICAgICA6IHB1
YmxpYyBJUEM6Ok1lc3NhZ2VTZW5kZXIKICAgICAsIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2
ZXIKLSAgICAsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHk+IHsKKyAgICAsIHB1YmxpYyBHUFVQcm9jZXNzQ29ubmVjdGlvbjo6Q2xpZW50IHsKIHB1Ymxp
YzoKICAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eT4gY3JlYXRlKCk7CiAKQEAgLTg2LDYgKzg3LDExIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAg
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KCk7CiAKKyAgICAvLyBHUFVQcm9jZXNzQ29ubmVj
dGlvbjo6Q2xpZW50CisgICAgdm9pZCBncHVQcm9jZXNzQ29ubmVjdGlvbkRpZENsb3NlKEdQVVBy
b2Nlc3NDb25uZWN0aW9uJikgZmluYWw7CisKKyAgICB2b2lkIGNvbm5lY3RUb0dQVVByb2Nlc3Mo
KTsKKyAgICB2b2lkIHJlZXN0YWJsaXNoR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKTsKICAgICB2b2lk
IHVwZGF0ZVJldXNhYmxlSGFuZGxlcygpOwogCiAgICAgLy8gTWVzc2FnZXMgdG8gYmUgcmVjZWl2
ZWQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1Jl
bW90ZVJlc291cmNlQ2FjaGVQcm94eS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9n
cmFwaGljcy9SZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkuaAppbmRleCBjY2QzOGM3YjQyNzI0MDhm
YTJlNDFiNTEwNDk2NWJlYmI3ZDRmM2JkLi4wNmRkNGY2OGI5M2E5ZTk3ZmE1NDljMDNkZmM0OWRi
OTM4ODhiYmZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBo
aWNzL1JlbW90ZVJlc291cmNlQ2FjaGVQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5LmgKQEAgLTQ5LDggKzQ5
LDEwIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgY2FjaGVOYXRpdmVJbWFnZShXZWJDb3JlOjpOYXRp
dmVJbWFnZSYpOwogCi1wcml2YXRlOgogICAgIHVzaW5nIEltYWdlQnVmZmVySGFzaE1hcCA9IEhh
c2hNYXA8V2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBXZWFrUHRyPFdlYkNv
cmU6OkltYWdlQnVmZmVyPj47CisgICAgY29uc3QgSW1hZ2VCdWZmZXJIYXNoTWFwJiBpbWFnZUJ1
ZmZlcnMoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlQnVmZmVyczsgfQorCitwcml2YXRlOgogICAg
IHVzaW5nIE5hdGl2ZUltYWdlSGFzaE1hcCA9IEhhc2hNYXA8V2ViQ29yZTo6UmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyLCBXZWFrUHRyPFdlYkNvcmU6Ok5hdGl2ZUltYWdlPj47CiAgICAgCiAg
ICAgdm9pZCByZWxlYXNlTmF0aXZlSW1hZ2UoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyKSBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0No
YW5nZUxvZwppbmRleCA2OWVkNjg2NThhMTdjYjJkMWRhNWUyZGVjMzBiZmZmZGE5NzIzYjE2Li5k
ZDE2MjExNjM4Y2Q1ZTVjODJjMTZjZWI5YzE2N2M1MzFhNjcwMmNhIDEwMDY0NAotLS0gYS9Ub29s
cy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMjAt
MTEtMTMgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVUHJv
Y2Vzc10gQWRkIGJhc2ljIEdQVVByb2Nlc3MgY3Jhc2ggaGFuZGxpbmcgZm9yIGNhbnZhcworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE4OTI0CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2VyLgorCisgICAgICAgIEFkZCBBUEkgdGVzdCBj
b3ZlcmFnZS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvR1BV
UHJvY2Vzcy5tbToKKyAgICAgICAgKGNvbnZlcnRUb0NHSW1hZ2UpOgorICAgICAgICAoZ2V0UGl4
ZWxJbmRleCk6CisgICAgICAgIChURVNUKToKKwogMjAyMC0xMS0xMyAgSm9uYXRoYW4gQmVkYXJk
ICA8amJlZGFyZEBhcHBsZS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTjogcjI2OTUxNCBSZXNl
dCBzZXJ2ZXIgcG9ydCBiZWZvcmUgcmVzdGFydGluZyB3ZWJzZXJ2ZXIKZGlmZiAtLWdpdCBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvR1BVUHJvY2Vzcy5tbSBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvR1BVUHJvY2Vzcy5tbQppbmRleCA4ZDg4
NGQxZTdkOTYxZTdmODNiZDFkZWJmZDMxNGZiMTBiMThmNzc1Li5mZGUyYjk3ZGM2MjYwYjUxOGUx
NGY2ZDVjNWFiODc4YmFkYmM1ODE4IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL0dQVVByb2Nlc3MubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9HUFVQcm9jZXNzLm1tCkBAIC0zNSw2ICszNSwzMCBAQAogI2ltcG9y
dCA8V2ViS2l0L19XS0ludGVybmFsRGVidWdGZWF0dXJlLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWlu
UHRyLmg+CiAKKyNpZiBQTEFURk9STShNQUMpCit0eXBlZGVmIE5TSW1hZ2UgKlBsYXRmb3JtSW1h
Z2U7Cit0eXBlZGVmIE5TV2luZG93ICpQbGF0Zm9ybVdpbmRvdzsKKworc3RhdGljIFJldGFpblB0
cjxDR0ltYWdlUmVmPiBjb252ZXJ0VG9DR0ltYWdlKE5TSW1hZ2UgKmltYWdlKQoreworICAgIHJl
dHVybiBbaW1hZ2UgQ0dJbWFnZUZvclByb3Bvc2VkUmVjdDpuaWwgY29udGV4dDpuaWwgaGludHM6
bmlsXTsKK30KKworI2Vsc2UKK3R5cGVkZWYgVUlJbWFnZSAqUGxhdGZvcm1JbWFnZTsKK3R5cGVk
ZWYgVUlXaW5kb3cgKlBsYXRmb3JtV2luZG93OworCitzdGF0aWMgUmV0YWluUHRyPENHSW1hZ2VS
ZWY+IGNvbnZlcnRUb0NHSW1hZ2UoVUlJbWFnZSAqaW1hZ2UpCit7CisgICAgcmV0dXJuIGltYWdl
LkNHSW1hZ2U7Cit9CisjZW5kaWYKKworc3RhdGljIE5TSW50ZWdlciBnZXRQaXhlbEluZGV4KE5T
SW50ZWdlciB4LCBOU0ludGVnZXIgeSwgTlNJbnRlZ2VyIHdpZHRoKQoreworICAgIHJldHVybiAo
eSAqIHdpZHRoICsgeCkgKiA0OworfQorCiBURVNUKEdQVVByb2Nlc3MsIFJlbGF1bmNoT25DcmFz
aCkKIHsKICAgICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmln
dXJhdGlvbiBhbGxvY10gaW5pdF0pOwpAQCAtMjYwLDMgKzI4NCwxNTEgQEAgVEVTVChHUFVQcm9j
ZXNzLCBDcmFzaFdoaWxlUGxheWluZ1ZpZGVvKQogICAgIEVYUEVDVF9FUShncHVQcm9jZXNzUElE
LCBbcHJvY2Vzc1Bvb2wgX2dwdVByb2Nlc3NJZGVudGlmaWVyXSk7CiAgICAgRVhQRUNUX0VRKHdl
YlZpZXdQSUQsIFt3ZWJWaWV3IF93ZWJQcm9jZXNzSWRlbnRpZmllcl0pOwogfQorCitzdGF0aWMg
TlNTdHJpbmcgKnRlc3RDYW52YXNQYWdlID0gQCI8Ym9keT4gXG4iCisgICAgIjxjYW52YXMgaWQ9
J215Q2FudmFzJyB3aWR0aD0nNDAwcHgnIGhlaWdodD0nNDAwcHgnPlxuIgorICAgICI8c2NyaXB0
PiBcbiIKKyAgICAidmFyIGNvbnRleHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXlDYW52
YXMnKS5nZXRDb250ZXh0KCcyZCcpOyBcbiIKKyAgICAiPC9zY3JpcHQ+IFxuIgorICAgICI8L2Jv
ZHk+IjsKKworVEVTVChHUFVQcm9jZXNzLCBDYW52YXNCYXNpY0NyYXNoSGFuZGxpbmcpCit7Cisg
ICAgYXV0byBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24g
YWxsb2NdIGluaXRdKTsKKyAgICBmb3IgKF9XS0ludGVybmFsRGVidWdGZWF0dXJlICpmZWF0dXJl
IGluIFtXS1ByZWZlcmVuY2VzIF9pbnRlcm5hbERlYnVnRmVhdHVyZXNdKSB7CisgICAgICAgIGlm
IChbZmVhdHVyZS5rZXkgaXNFcXVhbFRvU3RyaW5nOkAiVXNlR1BVUHJvY2Vzc0ZvckNhbnZhc1Jl
bmRlcmluZ0VuYWJsZWQiXSkgeworICAgICAgICAgICAgW1tjb25maWd1cmF0aW9uIHByZWZlcmVu
Y2VzXSBfc2V0RW5hYmxlZDpZRVMgZm9ySW50ZXJuYWxEZWJ1Z0ZlYXR1cmU6ZmVhdHVyZV07Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIE5TSW50ZWdlciB2aWV3
V2lkdGggPSA0MDA7CisgICAgTlNJbnRlZ2VyIHZpZXdIZWlnaHQgPSA0MDA7CisgICAgYXV0byB3
ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dS
ZWN0TWFrZSgwLCAwLCB2aWV3V2lkdGgsIHZpZXdIZWlnaHQpIGNvbmZpZ3VyYXRpb246Y29uZmln
dXJhdGlvbi5nZXQoKSBhZGRUb1dpbmRvdzpOT10pOworCisgICAgUmV0YWluUHRyPFBsYXRmb3Jt
V2luZG93PiB3aW5kb3c7CisgICAgQ0dGbG9hdCBiYWNraW5nU2NhbGVGYWN0b3I7CisKKyNpZiBQ
TEFURk9STShNQUMpCisgICAgd2luZG93ID0gYWRvcHROUyhbW05TV2luZG93IGFsbG9jXSBpbml0
V2l0aENvbnRlbnRSZWN0Olt3ZWJWaWV3IGZyYW1lXSBzdHlsZU1hc2s6TlNCb3JkZXJsZXNzV2lu
ZG93TWFzayBiYWNraW5nOk5TQmFja2luZ1N0b3JlQnVmZmVyZWQgZGVmZXI6Tk9dKTsKKyAgICBb
W3dpbmRvdyBjb250ZW50Vmlld10gYWRkU3Vidmlldzp3ZWJWaWV3LmdldCgpXTsKKyAgICBiYWNr
aW5nU2NhbGVGYWN0b3IgPSBbd2luZG93IGJhY2tpbmdTY2FsZUZhY3Rvcl07CisjZWxpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKQorICAgIHdpbmRvdyA9IGFkb3B0TlMoW1tVSVdpbmRvdyBhbGxvY10g
aW5pdFdpdGhGcmFtZTpbd2ViVmlldyBmcmFtZV1dKTsKKyAgICBbd2luZG93IGFkZFN1YnZpZXc6
d2ViVmlldy5nZXQoKV07CisgICAgYmFja2luZ1NjYWxlRmFjdG9yID0gW1t3aW5kb3cgc2NyZWVu
XSBzY2FsZV07CisjZW5kaWYKKworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0
cmluZzp0ZXN0Q2FudmFzUGFnZV07CisKKyAgICBhdXRvIHdlYlZpZXdQSUQgPSBbd2ViVmlldyBf
d2ViUHJvY2Vzc0lkZW50aWZpZXJdOworCisgICAgLy8gVHJ5IHBhaW50aW5nIHRoZSBjYW52YXMg
cmVkLgorICAgIF9fYmxvY2sgYm9vbCBkb25lID0gZmFsc2U7CisgICAgW3dlYlZpZXcgZXZhbHVh
dGVKYXZhU2NyaXB0OkAiY29udGV4dC5maWxsU3R5bGUgPSAnI0ZGMDAwMCc7IGNvbnRleHQuZmls
bFJlY3QoMCwgMCwgNDAwLCA0MDApOyIgY29tcGxldGlvbkhhbmRsZXI6XihpZCByZXN1bHQsIE5T
RXJyb3IgKmVycm9yKSB7CisgICAgICAgIEVYUEVDVF9UUlVFKCFlcnJvcik7CisgICAgICAgIGRv
bmUgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7
CisKKyAgICBbd2ViVmlldyB3YWl0Rm9yTmV4dFByZXNlbnRhdGlvblVwZGF0ZV07CisKKyAgICAv
LyBUaGUgR1BVIHByb2Nlc3Mgc2hvdWxkIGhhdmUgYmVlbiBsYXVuY2hlZC4KKyAgICBhdXRvKiBw
cm9jZXNzUG9vbCA9IGNvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2w7CisgICAgdW5zaWdu
ZWQgdGltZW91dCA9IDA7CisgICAgd2hpbGUgKCFbcHJvY2Vzc1Bvb2wgX2dwdVByb2Nlc3NJZGVu
dGlmaWVyXSAmJiB0aW1lb3V0KysgPCAxMDApCisgICAgICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6
OnNsZWVwKDAuMSk7CisgICAgYXV0byBncHVQcm9jZXNzUElEID0gW3Byb2Nlc3NQb29sIF9ncHVQ
cm9jZXNzSWRlbnRpZmllcl07CisgICAgRVhQRUNUX05FKDAsIGdwdVByb2Nlc3NQSUQpOworCisg
ICAgYXV0byBzbmFwc2hvdENvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tTbmFwc2hvdENvbmZp
Z3VyYXRpb24gYWxsb2NdIGluaXRdKTsKKyAgICBbc25hcHNob3RDb25maWd1cmF0aW9uIHNldFJl
Y3Q6TlNNYWtlUmVjdCgwLCAwLCAxNTAsIDE1MCldOworICAgIFtzbmFwc2hvdENvbmZpZ3VyYXRp
b24gc2V0U25hcHNob3RXaWR0aDpAKDE1MCldOworICAgIFtzbmFwc2hvdENvbmZpZ3VyYXRpb24g
c2V0QWZ0ZXJTY3JlZW5VcGRhdGVzOllFU107CisKKyAgICAvLyBNYWtlIHN1cmUgYSByZWQgc3F1
YXJlIGlzIHBhaW50ZWQuCisgICAgZG9uZSA9IGZhbHNlOworICAgIFt3ZWJWaWV3IHRha2VTbmFw
c2hvdFdpdGhDb25maWd1cmF0aW9uOnNuYXBzaG90Q29uZmlndXJhdGlvbi5nZXQoKSBjb21wbGV0
aW9uSGFuZGxlcjpeKFBsYXRmb3JtSW1hZ2Ugc25hcHNob3RJbWFnZSwgTlNFcnJvciAqZXJyb3Ip
IHsKKyAgICAgICAgRVhQRUNUX1RSVUUoIWVycm9yKTsKKworICAgICAgICBSZXRhaW5QdHI8Q0dJ
bWFnZVJlZj4gY2dJbWFnZSA9IGNvbnZlcnRUb0NHSW1hZ2Uoc25hcHNob3RJbWFnZSk7CisgICAg
ICAgIFJldGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+IGNvbG9yU3BhY2UgPSBhZG9wdENGKENHQ29s
b3JTcGFjZUNyZWF0ZURldmljZVJHQigpKTsKKworICAgICAgICBOU0ludGVnZXIgdmlld1dpZHRo
SW5QaXhlbHMgPSB2aWV3V2lkdGggKiBiYWNraW5nU2NhbGVGYWN0b3I7CisgICAgICAgIE5TSW50
ZWdlciB2aWV3SGVpZ2h0SW5QaXhlbHMgPSB2aWV3SGVpZ2h0ICogYmFja2luZ1NjYWxlRmFjdG9y
OworCisgICAgICAgIHVpbnQ4X3QgKnJnYmEgPSAodW5zaWduZWQgY2hhciAqKWNhbGxvYyh2aWV3
V2lkdGhJblBpeGVscyAqIHZpZXdIZWlnaHRJblBpeGVscyAqIDQsIHNpemVvZih1bnNpZ25lZCBj
aGFyKSk7CisgICAgICAgIFJldGFpblB0cjxDR0NvbnRleHRSZWY+IGNvbnRleHQgPSBDR0JpdG1h
cENvbnRleHRDcmVhdGUocmdiYSwgdmlld1dpZHRoSW5QaXhlbHMsIHZpZXdIZWlnaHRJblBpeGVs
cywgOCwgNCAqIHZpZXdXaWR0aEluUGl4ZWxzLCBjb2xvclNwYWNlLmdldCgpLCBrQ0dJbWFnZUFs
cGhhUHJlbXVsdGlwbGllZExhc3QgfCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkJpZyk7CisgICAgICAg
IENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAsIHZpZXdX
aWR0aEluUGl4ZWxzLCB2aWV3SGVpZ2h0SW5QaXhlbHMpLCBjZ0ltYWdlLmdldCgpKTsKKworICAg
ICAgICBOU0ludGVnZXIgcGl4ZWxJbmRleCA9IGdldFBpeGVsSW5kZXgoNTAsIDUwLCB2aWV3V2lk
dGhJblBpeGVscyk7CisgICAgICAgIEVYUEVDVF9FUSgyNTUsIHJnYmFbcGl4ZWxJbmRleF0pOwor
ICAgICAgICBFWFBFQ1RfRVEoMCwgcmdiYVtwaXhlbEluZGV4ICsgMV0pOworICAgICAgICBFWFBF
Q1RfRVEoMCwgcmdiYVtwaXhlbEluZGV4ICsgMl0pOworCisgICAgICAgIHBpeGVsSW5kZXggPSBn
ZXRQaXhlbEluZGV4KDEwMCwgMTAwLCB2aWV3V2lkdGhJblBpeGVscyk7CisgICAgICAgIEVYUEVD
VF9FUSgyNTUsIHJnYmFbcGl4ZWxJbmRleF0pOworICAgICAgICBFWFBFQ1RfRVEoMCwgcmdiYVtw
aXhlbEluZGV4ICsgMV0pOworICAgICAgICBFWFBFQ1RfRVEoMCwgcmdiYVtwaXhlbEluZGV4ICsg
Ml0pOworCisgICAgICAgIGZyZWUocmdiYSk7CisKKyAgICAgICAgZG9uZSA9IHRydWU7CisgICAg
fV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKKworICAgIC8vIEtpbGwg
dGhlIEdQVVByb2Nlc3MuCisgICAga2lsbChncHVQcm9jZXNzUElELCA5KTsKKworICAgIC8vIEdQ
VSBQcm9jZXNzIHNob3VsZCBnZXQgcmVsYXVuY2hlZC4KKyAgICB0aW1lb3V0ID0gMDsKKyAgICB3
aGlsZSAoKCFbcHJvY2Vzc1Bvb2wgX2dwdVByb2Nlc3NJZGVudGlmaWVyXSB8fCBbcHJvY2Vzc1Bv
b2wgX2dwdVByb2Nlc3NJZGVudGlmaWVyXSA9PSBncHVQcm9jZXNzUElEKSAmJiB0aW1lb3V0Kysg
PCAxMDApCisgICAgICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNsZWVwKDAuMSk7CisgICAgRVhQ
RUNUX05FKFtwcm9jZXNzUG9vbCBfZ3B1UHJvY2Vzc0lkZW50aWZpZXJdLCAwKTsKKyAgICBFWFBF
Q1RfTkUoW3Byb2Nlc3NQb29sIF9ncHVQcm9jZXNzSWRlbnRpZmllcl0sIGdwdVByb2Nlc3NQSUQp
OworICAgIGdwdVByb2Nlc3NQSUQgPSBbcHJvY2Vzc1Bvb2wgX2dwdVByb2Nlc3NJZGVudGlmaWVy
XTsKKworICAgIC8vIFdlYlByb2Nlc3Mgc2hvdWxkIG5vdCBoYXZlIGNyYXNoZWQuCisgICAgRVhQ
RUNUX0VRKHdlYlZpZXdQSUQsIFt3ZWJWaWV3IF93ZWJQcm9jZXNzSWRlbnRpZmllcl0pOworCisg
ICAgLy8gVHJ5IHBhaW50aW5nIHRoZSBjYW52YXMgZ3JlZW4uCisgICAgZG9uZSA9IGZhbHNlOwor
ICAgIFt3ZWJWaWV3IGV2YWx1YXRlSmF2YVNjcmlwdDpAImNvbnRleHQuZmlsbFN0eWxlID0gJyMw
MEZGMDAnOyBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIDQwMCwgNDAwKTsiIGNvbXBsZXRpb25IYW5k
bGVyOl4oaWQgcmVzdWx0LCBOU0Vycm9yICplcnJvcikgeworICAgICAgICBFWFBFQ1RfVFJVRSgh
ZXJyb3IpOworICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJ
OjpVdGlsOjpydW4oJmRvbmUpOworCisgICAgW3dlYlZpZXcgd2FpdEZvck5leHRQcmVzZW50YXRp
b25VcGRhdGVdOworCisgICAgLy8gTWFrZSBzdXJlIGEgZ3JlZW4gc3F1YXJlIGlzIHBhaW50ZWQu
CisgICAgZG9uZSA9IGZhbHNlOworICAgIFt3ZWJWaWV3IHRha2VTbmFwc2hvdFdpdGhDb25maWd1
cmF0aW9uOnNuYXBzaG90Q29uZmlndXJhdGlvbi5nZXQoKSBjb21wbGV0aW9uSGFuZGxlcjpeKFBs
YXRmb3JtSW1hZ2Ugc25hcHNob3RJbWFnZSwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICAgICAgRVhQ
RUNUX1RSVUUoIWVycm9yKTsKKworICAgICAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY2dJbWFn
ZSA9IGNvbnZlcnRUb0NHSW1hZ2Uoc25hcHNob3RJbWFnZSk7CisgICAgICAgIFJldGFpblB0cjxD
R0NvbG9yU3BhY2VSZWY+IGNvbG9yU3BhY2UgPSBhZG9wdENGKENHQ29sb3JTcGFjZUNyZWF0ZURl
dmljZVJHQigpKTsKKworICAgICAgICBOU0ludGVnZXIgdmlld1dpZHRoSW5QaXhlbHMgPSB2aWV3
V2lkdGggKiBiYWNraW5nU2NhbGVGYWN0b3I7CisgICAgICAgIE5TSW50ZWdlciB2aWV3SGVpZ2h0
SW5QaXhlbHMgPSB2aWV3SGVpZ2h0ICogYmFja2luZ1NjYWxlRmFjdG9yOworCisgICAgICAgIHVp
bnQ4X3QgKnJnYmEgPSAodW5zaWduZWQgY2hhciAqKWNhbGxvYyh2aWV3V2lkdGhJblBpeGVscyAq
IHZpZXdIZWlnaHRJblBpeGVscyAqIDQsIHNpemVvZih1bnNpZ25lZCBjaGFyKSk7CisgICAgICAg
IFJldGFpblB0cjxDR0NvbnRleHRSZWY+IGNvbnRleHQgPSBDR0JpdG1hcENvbnRleHRDcmVhdGUo
cmdiYSwgdmlld1dpZHRoSW5QaXhlbHMsIHZpZXdIZWlnaHRJblBpeGVscywgOCwgNCAqIHZpZXdX
aWR0aEluUGl4ZWxzLCBjb2xvclNwYWNlLmdldCgpLCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGll
ZExhc3QgfCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkJpZyk7CisgICAgICAgIENHQ29udGV4dERyYXdJ
bWFnZShjb250ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAsIHZpZXdXaWR0aEluUGl4ZWxzLCB2
aWV3SGVpZ2h0SW5QaXhlbHMpLCBjZ0ltYWdlLmdldCgpKTsKKworICAgICAgICBOU0ludGVnZXIg
cGl4ZWxJbmRleCA9IGdldFBpeGVsSW5kZXgoNTAsIDUwLCB2aWV3V2lkdGhJblBpeGVscyk7Cisg
ICAgICAgIEVYUEVDVF9FUSgwLCByZ2JhW3BpeGVsSW5kZXhdKTsKKyAgICAgICAgRVhQRUNUX0VR
KDI1NSwgcmdiYVtwaXhlbEluZGV4ICsgMV0pOworICAgICAgICBFWFBFQ1RfRVEoMCwgcmdiYVtw
aXhlbEluZGV4ICsgMl0pOworCisgICAgICAgIHBpeGVsSW5kZXggPSBnZXRQaXhlbEluZGV4KDEw
MCwgMTAwLCB2aWV3V2lkdGhJblBpeGVscyk7CisgICAgICAgIEVYUEVDVF9FUSgwLCByZ2JhW3Bp
eGVsSW5kZXhdKTsKKyAgICAgICAgRVhQRUNUX0VRKDI1NSwgcmdiYVtwaXhlbEluZGV4ICsgMV0p
OworICAgICAgICBFWFBFQ1RfRVEoMCwgcmdiYVtwaXhlbEluZGV4ICsgMl0pOworCisgICAgICAg
IGZyZWUocmdiYSk7CisKKyAgICAgICAgZG9uZSA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdl
YktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKK30K
</data>

          </attachment>
      

    </bug>

</bugzilla>