<?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>37234</bug_id>
          
          <creation_ts>2010-04-07 15:06:56 -0700</creation_ts>
          <short_desc>[V8] Fix crash in NodeFilterCondition in detached iframe</short_desc>
          <delta_ts>2010-04-08 03:17:09 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Vitaly Repeshko">vitalyr</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>dglazkov</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>209863</commentid>
    <comment_count>0</comment_count>
    <who name="Vitaly Repeshko">vitalyr</who>
    <bug_when>2010-04-07 15:06:56 -0700</bug_when>
    <thetext>[V8] Fix crash in NodeFilterCondition in detached document</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209874</commentid>
    <comment_count>1</comment_count>
      <attachid>52791</attachid>
    <who name="Vitaly Repeshko">vitalyr</who>
    <bug_when>2010-04-07 15:34:09 -0700</bug_when>
    <thetext>Created attachment 52791
patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209878</commentid>
    <comment_count>2</comment_count>
      <attachid>52792</attachid>
    <who name="Vitaly Repeshko">vitalyr</who>
    <bug_when>2010-04-07 15:39:41 -0700</bug_when>
    <thetext>Created attachment 52792
patch v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209981</commentid>
    <comment_count>3</comment_count>
      <attachid>52792</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-04-07 21:04:23 -0700</bug_when>
    <thetext>Comment on attachment 52792
patch v2

can we use this func in other places too?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210109</commentid>
    <comment_count>4</comment_count>
    <who name="Vitaly Repeshko">vitalyr</who>
    <bug_when>2010-04-08 03:16:48 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 52792 [details])
&gt; can we use this func in other places too?

Yes, it actually should also be used in xpath ns resolver. I updated it as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210110</commentid>
    <comment_count>5</comment_count>
    <who name="Vitaly Repeshko">vitalyr</who>
    <bug_when>2010-04-08 03:17:09 -0700</bug_when>
    <thetext>	M	LayoutTests/ChangeLog
	A	LayoutTests/fast/dom/node-filter-detached-iframe-crash-expected.txt
	A	LayoutTests/fast/dom/node-filter-detached-iframe-crash.html
	M	WebCore/ChangeLog
	M	WebCore/bindings/v8/V8DOMWrapper.h
	M	WebCore/bindings/v8/V8NodeFilterCondition.cpp
	M	WebCore/bindings/v8/V8Proxy.cpp
	M	WebCore/bindings/v8/V8Proxy.h
	M	WebCore/bindings/v8/custom/V8CustomXPathNSResolver.cpp
	M	WebCore/bindings/v8/custom/V8CustomXPathNSResolver.h
	M	WebCore/bindings/v8/custom/V8DocumentCustom.cpp
Committed r57269</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>52791</attachid>
            <date>2010-04-07 15:34:09 -0700</date>
            <delta_ts>2010-04-07 15:39:41 -0700</delta_ts>
            <desc>patch v1</desc>
            <filename>node_filter_fix.patch</filename>
            <type>text/plain</type>
            <size>541521</size>
            <attacher name="Vitaly Repeshko">vitalyr</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA0OTNlNjA4Li45YjZjYmFj
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAK
KzIwMTAtMDQtMDcgIExhc3psbyBHb21ib3MgIDxsYXN6bG8uMS5nb21ib3NAbm9raWEuY29tPgor
CisgICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuLgorCisgICAg
ICAgIFtRdF0gRml4IHRydW5rIChub24tc3RhbmRhbG9uZSkgYnVpbGRzIGZvciBTeW1iaWFuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNzEzNgorCisg
ICAgICAgIFRlc3QgZm9yIHNvdXJjZSBmaWxlcyBiZWZvcmUgYnVpbGRpbmcgaW5zdGVhZCBvZiBy
ZWx5aW5nIG9uCisgICAgICAgIHN0YW5kYWxvbmVfcGFja2FnZSBjb25maWcuCisKKyAgICAgICAg
KiBXZWJLaXQucHJvOgorCiAyMDEwLTA0LTAxICBLaW51a28gWWFzdWRhICA8a2ludWtvQGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEbWl0cnkgVGl0b3YuCmRpZmYgLS1naXQg
YS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKaW5k
ZXggMDgwMzlkYi4uNjZlNDBjYyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9n
CisrKyBiL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc3IEBACisyMDEwLTA0
LTA3ICBFbnJpY2EgQ2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTM3MjE5CisgICAgICAgIAorICAgICAgICBUaGlzIGNoYW5nZSBkaXNhYmxl
cyB0ZXh0IGNhcmV0IGZvciB0aGUgaVBob25lIHBsYXRmbG9ybS4KKyAgICAgICAgCisgICAgICAg
ICogd3RmL1BsYXRmb3JtLmg6IERpc2FibGVkIHRleHQgY2FyZXQgZm9yIGlQaG9uZS4KKworMjAx
MC0wNC0wNiAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmll
d2VkIGJ5IEVyaWMgU2VpZGVsLgorCisgICAgICAgIFJFR1JFU1NJT046IFdvcmtlciB0ZXJtaW5h
dGlvbiB2aWEgSlMgdGltZW91dCBtYXkgY2F1c2Ugd29ya2VyIHRlc3RzIGxpa2UgZmFzdC93b3Jr
ZXJzL3dvcmtlci10ZXJtaW5hdGUuaHRtbCBmYWlsLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzY2NDYKKworICAgICAgICBBZGQgYSBuZXcgZXhjZXB0
aW9uIHR5cGUgZm9yIGZvcmNpYmx5IHRlcm1pbmF0aW5nIGEgSmF2YVNjcmlwdCBzdGFjay4KKyAg
ICAgICAgVGhlIG5ldyBleGNlcHRpb24gZnVuY3Rpb25zIHNpbWlsYXJseSB0byB0aGUKKyAgICAg
ICAgSW50ZXJydXB0ZWRFeGVjdXRpb25FeGNlcHRpb24gYnV0IGlzIGNvbmNlcHR1YWxseSBkaWZm
ZXJlbnQgYmVjYXVzZQorICAgICAgICBleGVjdXRpb24gaXMgdGVybWluYXRlZCBpbnN0ZWFkIG9m
IGp1c3QgaW50ZXJydXB0ZWQuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAg
ICAgIC0gQWRkZWQgbmV3IFRlcm1pbmF0b3IuaCBmaWxlLgorICAgICAgICAqIEphdmFTY3JpcHRD
b3JlLmd5cGk6CisgICAgICAgICAgICAtIEFkZGVkIG5ldyBUZXJtaW5hdG9yLmggZmlsZS4KKyAg
ICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUudmNwcm9qOgorICAgICAgICAgICAgLSBBZGRlZCBuZXcgVGVybWluYXRvci5oIGZpbGUuCisg
ICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgICAgIC0gQWRkZWQgbmV3IFRlcm1pbmF0b3IuaCBmaWxlLgorICAgICAgICAqIGludGVycHJl
dGVyL0ludGVycHJldGVyLmNwcDoKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnRocm93RXhj
ZXB0aW9uKToKKyAgICAgICAgICAgIC0gRnVsbHkgdW53aW5kIHRoZSBzdGFjayBmb3IgVGVybWlu
YXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbi4KKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnByaXZh
dGVFeGVjdXRlKToKKyAgICAgICAgICAgIC0gQ2hlY2sgaWYgd2UndmUgYmVlbiB0ZXJtaW5hdGVk
IGF0IHRoZSBzYW1lIHRpbWUgd2UgY2hlY2sgaWYgd2UndmUKKyAgICAgICAgICAgICAgdGltZWQg
b3V0LgorICAgICAgICAqIGppdC9KSVRTdHVicy5jcHA6CisgICAgICAgIChKU0M6OkRFRklORV9T
VFVCX0ZVTkNUSU9OKToKKyAgICAgICAgICAgIC0gQ2hlY2sgaWYgd2UndmUgYmVlbiB0ZXJtaW5h
dGVkIGF0IHRoZSBzYW1lIHRpbWUgd2UgY2hlY2sgaWYgd2UndmUKKyAgICAgICAgICAgICAgdGlt
ZWQgb3V0LgorICAgICAgICAqIHJ1bnRpbWUvQ29tcGxldGlvbi5jcHA6CisgICAgICAgICAgICAt
IFNvbWUgZXhjZXB0aW9ucyBkZWZpbmUgc3BlY2lhbCBjb21wbGV0aW9uIHR5cGVzIHNvIHRoYXQg
Y2FsbHMgY2FuCisgICAgICAgICAgICAgIHNlZSB3aHkgd2UgdGVybWluYXRlZCBldmFsdWF0aW9u
LgorICAgICAgICAoSlNDOjpldmFsdWF0ZSk6CisgICAgICAgICogcnVudGltZS9Db21wbGV0aW9u
Lmg6CisgICAgICAgICAgICAtIERlZmluZSBhIG5ldyBjb21wbGV0aW9uIHR5cGUgZm9yIHRlcm1p
bmF0aW9uLgorICAgICAgICAoSlNDOjopOgorICAgICAgICAqIHJ1bnRpbWUvRXhjZXB0aW9uSGVs
cGVycy5jcHA6CisgICAgICAgICAgICAtIERlZmluZSBUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0
aW9uIGFuZCByZWZhY3RvciBwc2V1ZG8tUlRUSQorICAgICAgICAgICAgICB2aXJ0dWFsIGZ1bmN0
aW9uIHRvIGJlIG1vcmUgc2VtYW50aWMuCisgICAgICAgIChKU0M6OkludGVycnVwdGVkRXhlY3V0
aW9uRXJyb3I6OmV4Y2VwdGlvblR5cGUpOgorICAgICAgICAoSlNDOjpUZXJtaW5hdGVkRXhlY3V0
aW9uRXJyb3I6OlRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvcik6CisgICAgICAgIChKU0M6OlRlcm1p
bmF0ZWRFeGVjdXRpb25FcnJvcjo6ZXhjZXB0aW9uVHlwZSk6CisgICAgICAgIChKU0M6OlRlcm1p
bmF0ZWRFeGVjdXRpb25FcnJvcjo6dG9TdHJpbmcpOgorICAgICAgICAoSlNDOjpjcmVhdGVUZXJt
aW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0V4Y2VwdGlvbkhl
bHBlcnMuaDoKKyAgICAgICAgICAgIC0gRW50cnkgcG9pbnQgZm9yIGdlbmVyYXRpbmcgYSBUZXJt
aW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uLgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxEYXRh
LmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxEYXRhOjpKU0dsb2JhbERhdGEpOgorICAgICAg
ICAgICAgLSBBZGQgYSBUZXJtaW5hdG9yIG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIHRvIGFzeW5j
aHJvbm91c2x5CisgICAgICAgICAgICAgIHRlcm1pbmF0ZSBhIEphdmFTY3JpcHQgZXhlY3V0aW9u
IHN0YWNrLgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxEYXRhLmg6CisgICAgICAgICogcnVu
dGltZS9KU09iamVjdC5oOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZXhjZXB0aW9uVHlwZSk6
CisgICAgICAgICAgICAtIERlZmluZSB0aGF0LCBieSBkZWZhdWx0LCB0aHJvd24gb2JqZWN0cyBo
YXZlIGEgbm9ybWFsIGV4Y2VwdGlvbgorICAgICAgICAgICAgICB0eXBlLgorICAgICAgICAqIHJ1
bnRpbWUvVGVybWluYXRvci5oOiBBZGRlZC4KKyAgICAgICAgICAgIC0gQWRkZWQgYSBuZXcgY29u
dHJvbGxlciBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCB0byB0ZXJtaW5hdGUKKyAgICAgICAgICAg
ICAgZXhlY3V0aW9uIGFzeW5jaHJvbm91c2x5LiAgVGhpcyBvYmplY3QgaXMgbW9yZSBvciBsZXNz
IGEKKyAgICAgICAgICAgICAgZ2xvcmlmaWVkIGJvb2wuCisgICAgICAgIChKU0M6OlRlcm1pbmF0
b3I6OlRlcm1pbmF0b3IpOgorICAgICAgICAoSlNDOjpUZXJtaW5hdG9yOjp0ZXJtaWFudGVTb29u
KToKKyAgICAgICAgKEpTQzo6VGVybWluYXRvcjo6c2hvdWxkVGVybWluYXRlKToKKwogMjAxMC0w
NC0wNSAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIEFuZCBhbm90
aGVyIG9uZS4KZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtIGIvSmF2
YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggOTJjY2RiNS4uODczYWY5NSAxMDA2NDQK
LS0tIGEvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvSmF2YVNjcmlwdENvcmUv
R05VbWFrZWZpbGUuYW0KQEAgLTIwOSw2ICsyMDksNyBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2Vz
ICs9IFwKIAlKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNoYWluLmNwcCBcCiAJSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVDaGFpbi5oIFwKIAlKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oIFwKKwlKYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1Rlcm1pbmF0b3IuaCBcCiAJSmF2YVNjcmlwdENvcmUvcnVudGltZS9UaW1lb3V0Q2hlY2tl
ci5jcHAgXAogCUphdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGltZW91dENoZWNrZXIuaCBcCiAJSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVJbmZvLmggXApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUuZ3lwaSBiL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lmd5cGkKaW5kZXggMzg5YWY3YS4uZWNjNjVkNyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUuZ3lwaQorKysgYi9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5n
eXBpCkBAIC0zMjUsNiArMzI1LDcgQEAKICAgICAgICAgICAgICdydW50aW1lL1N0cnVjdHVyZUNo
YWluLmgnLAogICAgICAgICAgICAgJ3J1bnRpbWUvU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlLmgn
LAogICAgICAgICAgICAgJ3J1bnRpbWUvU3ltYm9sVGFibGUuaCcsCisgICAgICAgICAgICAncnVu
dGltZS9UZXJtaW5hdG9yLmgnLAogICAgICAgICAgICAgJ3J1bnRpbWUvVGltZW91dENoZWNrZXIu
Y3BwJywKICAgICAgICAgICAgICdydW50aW1lL1RpbWVvdXRDaGVja2VyLmgnLAogICAgICAgICAg
ICAgJ3J1bnRpbWUvVHJhY2luZy5oJywKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ogYi9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUudmNwcm9qCmluZGV4IDhjY2MzNWYuLmQyNWFhMzMgMTAwNjQ0Ci0tLSBhL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS52Y3Byb2oKKysrIGIvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagpAQCAtMTIxMyw2ICsxMjEzLDEwIEBA
CiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4u
XHJ1bnRpbWVcVGVybWluYXRvci5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQog
CQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccnVudGltZVxUaW1lb3V0Q2hlY2tlci5jcHAiDQogCQkJ
CT4NCiAJCQk8L0ZpbGU+DQpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNjFiNzhjYy4uNzk5MGUyZiAxMDA2
NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagorKysgYi9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCkBAIC0yNjksNiArMjY5LDcgQEAKIAkJOTY5QTA3OUEwRUQxRDNBRTAwRjFG
NjgxIC8qIE9wY29kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5NjlBMDc5NDBFRDFEM0FFMDBGMUY2ODEgLyogT3Bjb2RlLmNwcCAqLzsgfTsKIAkJ
OTY5QTA3OUIwRUQxRDNBRTAwRjFGNjgxIC8qIE9wY29kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTY5QTA3OTUwRUQxRDNBRTAwRjFGNjgxIC8qIE9w
Y29kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTk2REQ3Mzc5MEY5REEzMTAwMDI3RkJDQyAvKiBWTVRhZ3MuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk2REQ3Mzc4MEY5REEzMTAwMDI3RkJDQyAvKiBW
TVRhZ3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQk5NzFFREVBNjExNjlFMEQzMDA1RTQyNjIgLyogVGVybWluYXRvci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTdGNjkwM0ExMTY5REY3RjAwQTZCQjQ2
IC8qIFRlcm1pbmF0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQlBNzI3MDA5MDBEQUM2QkJDMDBFNTQ4RDcgLyogSlNOb3RBbk9iamVjdC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzI3MDA3ODBE
QUM2MDU2MDBFNTQ4RDcgLyogSlNOb3RBbk9iamVjdC5jcHAgKi87IH07CiAJCUE3MjcwMUI5MERB
REU5NDkwMEU1NDhENyAvKiBFeGNlcHRpb25IZWxwZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzI3MDFCMzBEQURFOTQ5MDBFNTQ4RDcgLyogRXhj
ZXB0aW9uSGVscGVycy5oICovOyB9OwogCQlBNzI3RkY2QjBEQTMwOTIyMDBFNTQ4RDcgLyogSlNQ
cm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBNzI3RkY2NjBEQTMwNTNCMDBFNTQ4RDcgLyogSlNQcm9wZXJ0eU5hbWVJ
dGVyYXRvci5jcHAgKi87IH07CkBAIC04MjYsNiArODI3LDcgQEAKIAkJOTY5QTA3OTUwRUQxRDNB
RTAwRjFGNjgxIC8qIE9wY29kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBP
cGNvZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTY5QTA5MjIwRUQxRTA5QzAw
RjFGNjgxIC8qIENvbXBsZXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gQ29tcGxldGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk2REQ3
Mzc4MEY5REEzMTAwMDI3RkJDQyAvKiBWTVRhZ3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gVk1UYWdzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3RjY5MDNB
MTE2OURGN0YwMEE2QkI0NiAvKiBUZXJtaW5hdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFRlcm1pbmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTcy
NzAwNzcwREFDNjA1NjAwRTU0OEQ3IC8qIEpTTm90QW5PYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNOb3RBbk9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlBNzI3MDA3ODBEQUM2MDU2MDBFNTQ4RDcgLyogSlNOb3RBbk9iamVjdC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU05vdEFuT2JqZWN0LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTcyNzAxQjMwREFERTk0OTAwRTU0OEQ3IC8qIEV4
Y2VwdGlvbkhlbHBlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhjZXB0
aW9uSGVscGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTYxOCw2ICsxNjIw
LDcgQEAKIAkJCQk3RTRFRTcwODBFQkI3OTYzMDA1OTM0QUEgLyogU3RydWN0dXJlQ2hhaW4uaCAq
LywKIAkJCQlCQzkwNDE0NzBFQjkyNTA5MDBGRTI2RkEgLyogU3RydWN0dXJlVHJhbnNpdGlvblRh
YmxlLmggKi8sCiAJCQkJMTRBMzk2QTYwQ0QyOTMzMTAwQjVCNEZGIC8qIFN5bWJvbFRhYmxlLmgg
Ki8sCisJCQkJOTdGNjkwM0ExMTY5REY3RjAwQTZCQjQ2IC8qIFRlcm1pbmF0b3IuaCAqLywKIAkJ
CQkxNEE0MkUzRDBGNEY2MEVFMDA1OTkwOTkgLyogVGltZW91dENoZWNrZXIuY3BwICovLAogCQkJ
CTE0QTQyRTNFMEY0RjYwRUUwMDU5OTA5OSAvKiBUaW1lb3V0Q2hlY2tlci5oICovLAogCQkJCTVE
NTM3MjZEMEUxQzU0NkIwMDIxRTU0OSAvKiBUcmFjaW5nLmQgKi8sCkBAIC0yMDA4LDYgKzIwMTEs
NyBAQAogCQkJCTE4QkFCNTU0MTBEQUUwNjYwMDBEOTQ1QiAvKiBUaHJlYWRJZGVudGlmaWVyRGF0
YVB0aHJlYWRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ3MDBFMTZGNUNEMDBCMzQ0NjAg
LyogVGhyZWFkaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ3MTBFMTZGNUNEMDBCMzQ0
NjAgLyogVGhyZWFkU3BlY2lmaWMuaCBpbiBIZWFkZXJzICovLAorCQkJCTk3MUVERUE2MTE2OUUw
RDMwMDVFNDI2MiAvKiBUZXJtaW5hdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEE0MkU0MDBG
NEY2MEVFMDA1OTkwOTkgLyogVGltZW91dENoZWNrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTVE
NTM3MjZGMEUxQzU0ODgwMDIxRTU0OSAvKiBUcmFjaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
QjREN0U2MzBGMzE5QUM4MDBBRDdFNTggLyogVHlwZVRyYWl0cy5oIGluIEhlYWRlcnMgKi8sCmRp
ZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAgYi9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKaW5kZXggMjcxM2ZkNC4u
ZmE1ZDcyYyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0
ZXIuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcApA
QCAtNTIyLDggKzUyMiw5IEBAIE5FVkVSX0lOTElORSBIYW5kbGVySW5mbyogSW50ZXJwcmV0ZXI6
OnRocm93RXhjZXB0aW9uKENhbGxGcmFtZSomIGNhbGxGcmFtZSwgSlNWCiAgICAgICAgICAgICAg
ICAgZXhjZXB0aW9uLT5wdXRXaXRoQXR0cmlidXRlcyhjYWxsRnJhbWUsIElkZW50aWZpZXIoY2Fs
bEZyYW1lLCAic291cmNlSWQiKSwganNOdW1iZXIoY2FsbEZyYW1lLCBjb2RlQmxvY2stPm93bmVy
RXhlY3V0YWJsZSgpLT5zb3VyY2VJRCgpKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlKTsKICAgICAg
ICAgICAgICAgICBleGNlcHRpb24tPnB1dFdpdGhBdHRyaWJ1dGVzKGNhbGxGcmFtZSwgSWRlbnRp
ZmllcihjYWxsRnJhbWUsICJzb3VyY2VVUkwiKSwganNPd25lZFN0cmluZyhjYWxsRnJhbWUsIGNv
ZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPnNvdXJjZVVSTCgpKSwgUmVhZE9ubHkgfCBEb250
RGVsZXRlKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGV4
Y2VwdGlvbi0+aXNXYXRjaGRvZ0V4Y2VwdGlvbigpKSB7CisKKyAgICAgICAgICAgIENvbXBsVHlw
ZSBleGNlcHRpb25UeXBlID0gZXhjZXB0aW9uLT5leGNlcHRpb25UeXBlKCk7CisgICAgICAgICAg
ICBpZiAoZXhjZXB0aW9uVHlwZSA9PSBJbnRlcnJ1cHRlZCB8fCBleGNlcHRpb25UeXBlID09IFRl
cm1pbmF0ZWQpIHsKICAgICAgICAgICAgICAgICB3aGlsZSAodW53aW5kQ2FsbEZyYW1lKGNhbGxG
cmFtZSwgZXhjZXB0aW9uVmFsdWUsIGJ5dGVjb2RlT2Zmc2V0LCBjb2RlQmxvY2spKSB7CiAgICAg
ICAgICAgICAgICAgICAgIC8vIERvbid0IG5lZWQgaGFuZGxlciBjaGVja3Mgb3IgYW55dGhpbmcs
IHdlIGp1c3Qgd2FudCB0byB1bnJvbGwgYWxsIHRoZSBKUyBjYWxsZnJhbWVzIHBvc3NpYmxlLgog
ICAgICAgICAgICAgICAgIH0KQEAgLTExNzQsNyArMTE3NSw3IEBAIEpTVmFsdWUgSW50ZXJwcmV0
ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGlvbkZsYWcgZmxhZywgUmVnaXN0ZXJGaWxlKiByZWdp
c3RlckZpCiAKICNkZWZpbmUgQ0hFQ0tfRk9SX1RJTUVPVVQoKSBcCiAgICAgaWYgKCEtLXRpY2tD
b3VudCkgeyBcCi0gICAgICAgIGlmIChnbG9iYWxEYXRhLT50aW1lb3V0Q2hlY2tlci5kaWRUaW1l
T3V0KGNhbGxGcmFtZSkpIHsgXAorICAgICAgICBpZiAoZ2xvYmFsRGF0YS0+dGVybWluYXRvci5z
aG91bGRUZXJtaW5hdGUoKSB8fCBnbG9iYWxEYXRhLT50aW1lb3V0Q2hlY2tlci5kaWRUaW1lT3V0
KGNhbGxGcmFtZSkpIHsgXAogICAgICAgICAgICAgZXhjZXB0aW9uVmFsdWUgPSBqc051bGwoKTsg
XAogICAgICAgICAgICAgZ290byB2bV90aHJvdzsgXAogICAgICAgICB9IFwKZGlmZiAtLWdpdCBh
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAgYi9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
U3R1YnMuY3BwCmluZGV4IGIyMWZiM2QuLmFmMzNmNjkgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRTdHVicy5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNw
cApAQCAtMTI1NywxNSArMTI1NywxOCBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNW
YWx1ZSwgb3BfcHJlX2luYykKIERFRklORV9TVFVCX0ZVTkNUSU9OKGludCwgdGltZW91dF9jaGVj
aykKIHsKICAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7Ci0gICAgCisKICAg
ICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSBzdGFja0ZyYW1lLmdsb2JhbERhdGE7CiAgICAg
VGltZW91dENoZWNrZXImIHRpbWVvdXRDaGVja2VyID0gZ2xvYmFsRGF0YS0+dGltZW91dENoZWNr
ZXI7CiAKLSAgICBpZiAodGltZW91dENoZWNrZXIuZGlkVGltZU91dChzdGFja0ZyYW1lLmNhbGxG
cmFtZSkpIHsKKyAgICBpZiAoZ2xvYmFsRGF0YS0+dGVybWluYXRvci5zaG91bGRUZXJtaW5hdGUo
KSkgeworICAgICAgICBnbG9iYWxEYXRhLT5leGNlcHRpb24gPSBjcmVhdGVUZXJtaW5hdGVkRXhl
Y3V0aW9uRXhjZXB0aW9uKGdsb2JhbERhdGEpOworICAgICAgICBWTV9USFJPV19FWENFUFRJT05f
QVRfRU5EKCk7CisgICAgfSBlbHNlIGlmICh0aW1lb3V0Q2hlY2tlci5kaWRUaW1lT3V0KHN0YWNr
RnJhbWUuY2FsbEZyYW1lKSkgewogICAgICAgICBnbG9iYWxEYXRhLT5leGNlcHRpb24gPSBjcmVh
dGVJbnRlcnJ1cHRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihnbG9iYWxEYXRhKTsKICAgICAgICAgVk1f
VEhST1dfRVhDRVBUSU9OX0FUX0VORCgpOwogICAgIH0KLSAgICAKKwogICAgIHJldHVybiB0aW1l
b3V0Q2hlY2tlci50aWNrc1VudGlsTmV4dENoZWNrKCk7CiB9CiAKZGlmZiAtLWdpdCBhL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NvbXBsZXRpb24uY3BwCmluZGV4IDJmODhkZjkuLmJkZDgyZDggMTAwNjQ0Ci0tLSBhL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db21wbGV0aW9uLmNwcApAQCAtNjIsOSArNjIsMTAgQEAgQ29tcGxldGlvbiBldmFsdWF0
ZShFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW4mIHNjb3BlQ2hhaW4sIGNvbnN0IFNvdXJjZUNv
ZGUmIHMKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGV4ZWMtPmludGVycHJldGVyKCktPmV4ZWN1dGUo
cHJvZ3JhbS5nZXQoKSwgZXhlYywgc2NvcGVDaGFpbi5ub2RlKCksIHRoaXNPYmosICZleGNlcHRp
b24pOwogCiAgICAgaWYgKGV4Y2VwdGlvbikgewotICAgICAgICBpZiAoZXhjZXB0aW9uLmlzT2Jq
ZWN0KCkgJiYgYXNPYmplY3QoZXhjZXB0aW9uKS0+aXNXYXRjaGRvZ0V4Y2VwdGlvbigpKQotICAg
ICAgICAgICAgcmV0dXJuIENvbXBsZXRpb24oSW50ZXJydXB0ZWQsIGV4Y2VwdGlvbik7Ci0gICAg
ICAgIHJldHVybiBDb21wbGV0aW9uKFRocm93LCBleGNlcHRpb24pOworICAgICAgICBDb21wbFR5
cGUgZXhjZXB0aW9uVHlwZSA9IFRocm93OworICAgICAgICBpZiAoZXhjZXB0aW9uLmlzT2JqZWN0
KCkpCisgICAgICAgICAgICBleGNlcHRpb25UeXBlID0gYXNPYmplY3QoZXhjZXB0aW9uKS0+ZXhj
ZXB0aW9uVHlwZSgpOworICAgICAgICByZXR1cm4gQ29tcGxldGlvbihleGNlcHRpb25UeXBlLCBl
eGNlcHRpb24pOwogICAgIH0KICAgICByZXR1cm4gQ29tcGxldGlvbihOb3JtYWwsIHJlc3VsdCk7
CiB9CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uaCBiL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5oCmluZGV4IDQxYzlhNjQuLjYzYjMxNWUg
MTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5oCisrKyBiL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5oCkBAIC0zMSw3ICszMSw3IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgIGNsYXNzIFNjb3BlQ2hhaW47CiAgICAgY2xhc3MgU291cmNlQ29kZTsK
IAotICAgIGVudW0gQ29tcGxUeXBlIHsgTm9ybWFsLCBCcmVhaywgQ29udGludWUsIFJldHVyblZh
bHVlLCBUaHJvdywgSW50ZXJydXB0ZWQgfTsKKyAgICBlbnVtIENvbXBsVHlwZSB7IE5vcm1hbCwg
QnJlYWssIENvbnRpbnVlLCBSZXR1cm5WYWx1ZSwgVGhyb3csIEludGVycnVwdGVkLCBUZXJtaW5h
dGVkIH07CiAKICAgICAvKgogICAgICAqIENvbXBsZXRpb24gb2JqZWN0cyBhcmUgdXNlZCB0byBj
b252ZXkgdGhlIHJldHVybiBzdGF0dXMgYW5kIHZhbHVlCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwIGIvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9FeGNlcHRpb25IZWxwZXJzLmNwcAppbmRleCBiOWM2MzE5Li5hZWU2ZjMxIDEwMDY0NAotLS0g
YS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCisrKyBiL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHAKQEAgLTQ2LDcgKzQ2LDcgQEAg
cHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNXYXRjaGRvZ0V4Y2Vw
dGlvbigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIENvbXBsVHlwZSBleGNl
cHRpb25UeXBlKCkgY29uc3QgeyByZXR1cm4gSW50ZXJydXB0ZWQ7IH0KIAogICAgIHZpcnR1YWwg
VVN0cmluZyB0b1N0cmluZyhFeGVjU3RhdGUqKSBjb25zdCB7IHJldHVybiAiSmF2YVNjcmlwdCBl
eGVjdXRpb24gZXhjZWVkZWQgdGltZW91dC4iOyB9CiB9OwpAQCAtNTYsNiArNTYsMjMgQEAgSlNW
YWx1ZSBjcmVhdGVJbnRlcnJ1cHRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEpCiAgICAgcmV0dXJuIG5ldyAoZ2xvYmFsRGF0YSkgSW50ZXJydXB0ZWRFeGVjdXRp
b25FcnJvcihnbG9iYWxEYXRhKTsKIH0KIAorY2xhc3MgVGVybWluYXRlZEV4ZWN1dGlvbkVycm9y
IDogcHVibGljIEpTT2JqZWN0IHsKK3B1YmxpYzoKKyAgICBUZXJtaW5hdGVkRXhlY3V0aW9uRXJy
b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQorICAgICAgICA6IEpTT2JqZWN0KGdsb2JhbERh
dGEtPnRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvclN0cnVjdHVyZSkKKyAgICB7CisgICAgfQorCisg
ICAgdmlydHVhbCBDb21wbFR5cGUgZXhjZXB0aW9uVHlwZSgpIGNvbnN0IHsgcmV0dXJuIFRlcm1p
bmF0ZWQ7IH0KKworICAgIHZpcnR1YWwgVVN0cmluZyB0b1N0cmluZyhFeGVjU3RhdGUqKSBjb25z
dCB7IHJldHVybiAiSmF2YVNjcmlwdCBleGVjdXRpb24gdGVybWluYXRlZC4iOyB9Cit9OworCitK
U1ZhbHVlIGNyZWF0ZVRlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24oSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhKQoreworICAgIHJldHVybiBuZXcgKGdsb2JhbERhdGEpIFRlcm1pbmF0ZWRFeGVj
dXRpb25FcnJvcihnbG9iYWxEYXRhKTsKK30KKwogc3RhdGljIEpTVmFsdWUgY3JlYXRlRXJyb3Io
RXhlY1N0YXRlKiBleGVjLCBFcnJvclR5cGUgZSwgY29uc3QgY2hhciogbXNnKQogewogICAgIHJl
dHVybiBFcnJvcjo6Y3JlYXRlKGV4ZWMsIGUsIG1zZywgLTEsIC0xLCBVU3RyaW5nKCkpOwpkaWZm
IC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmggYi9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuaAppbmRleCBiNmU3MzczLi5iMTUy
NDM5IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMu
aAorKysgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuaApAQCAtNDMs
NiArNDMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBzdHJ1Y3QgSW5zdHJ1Y3Rpb247CiAgICAg
CiAgICAgSlNWYWx1ZSBjcmVhdGVJbnRlcnJ1cHRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihKU0dsb2Jh
bERhdGEqKTsKKyAgICBKU1ZhbHVlIGNyZWF0ZVRlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24o
SlNHbG9iYWxEYXRhKik7CiAgICAgSlNWYWx1ZSBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoRXhl
Y1N0YXRlKik7CiAgICAgSlNWYWx1ZSBjcmVhdGVUeXBlRXJyb3IoRXhlY1N0YXRlKiwgY29uc3Qg
Y2hhciogbWVzc2FnZSk7CiAgICAgSlNWYWx1ZSBjcmVhdGVVbmRlZmluZWRWYXJpYWJsZUVycm9y
KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCwg
Q29kZUJsb2NrKik7CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
RGF0YS5jcHAgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAKaW5kZXgg
NDVhYmM4Ni4uMTYwMGM3NyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ds
b2JhbERhdGEuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNw
cApAQCAtMTE1LDYgKzExNSw3IEBAIEpTR2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKGJvb2wgaXNT
aGFyZWQpCiAgICAgLCBzdHJpbmdUYWJsZShmYXN0TmV3PEhhc2hUYWJsZT4oSlNDOjpzdHJpbmdU
YWJsZSkpCiAgICAgLCBhY3RpdmF0aW9uU3RydWN0dXJlKEpTQWN0aXZhdGlvbjo6Y3JlYXRlU3Ry
dWN0dXJlKGpzTnVsbCgpKSkKICAgICAsIGludGVycnVwdGVkRXhlY3V0aW9uRXJyb3JTdHJ1Y3R1
cmUoSlNPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZShqc051bGwoKSkpCisgICAgLCB0ZXJtaW5hdGVk
RXhlY3V0aW9uRXJyb3JTdHJ1Y3R1cmUoSlNPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZShqc051bGwo
KSkpCiAgICAgLCBzdGF0aWNTY29wZVN0cnVjdHVyZShKU1N0YXRpY1Njb3BlT2JqZWN0OjpjcmVh
dGVTdHJ1Y3R1cmUoanNOdWxsKCkpKQogICAgICwgc3RyaW5nU3RydWN0dXJlKEpTU3RyaW5nOjpj
cmVhdGVTdHJ1Y3R1cmUoanNOdWxsKCkpKQogICAgICwgbm90QW5PYmplY3RFcnJvclN0dWJTdHJ1
Y3R1cmUoSlNOb3RBbk9iamVjdEVycm9yU3R1Yjo6Y3JlYXRlU3RydWN0dXJlKGpzTnVsbCgpKSkK
ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmggYi9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCmluZGV4IDBmMWYzYzYuLjIwZDYyZDUg
MTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgKKysrIGIv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaApAQCAtMzcsNiArMzcsNyBAQAog
I2luY2x1ZGUgIk1hcmtTdGFjay5oIgogI2luY2x1ZGUgIk51bWVyaWNTdHJpbmdzLmgiCiAjaW5j
bHVkZSAiU21hbGxTdHJpbmdzLmgiCisjaW5jbHVkZSAiVGVybWluYXRvci5oIgogI2luY2x1ZGUg
IlRpbWVvdXRDaGVja2VyLmgiCiAjaW5jbHVkZSAiV2Vha1JhbmRvbS5oIgogI2luY2x1ZGUgPHd0
Zi9Gb3J3YXJkLmg+CkBAIC0xMTYsNiArMTE3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IAogICAgICAgICBSZWZQdHI8U3RydWN0dXJlPiBhY3RpdmF0aW9uU3RydWN0dXJlOwogICAgICAg
ICBSZWZQdHI8U3RydWN0dXJlPiBpbnRlcnJ1cHRlZEV4ZWN1dGlvbkVycm9yU3RydWN0dXJlOwor
ICAgICAgICBSZWZQdHI8U3RydWN0dXJlPiB0ZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3JTdHJ1Y3R1
cmU7CiAgICAgICAgIFJlZlB0cjxTdHJ1Y3R1cmU+IHN0YXRpY1Njb3BlU3RydWN0dXJlOwogICAg
ICAgICBSZWZQdHI8U3RydWN0dXJlPiBzdHJpbmdTdHJ1Y3R1cmU7CiAgICAgICAgIFJlZlB0cjxT
dHJ1Y3R1cmU+IG5vdEFuT2JqZWN0RXJyb3JTdHViU3RydWN0dXJlOwpAQCAtMTUzLDYgKzE1NSw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKSVRUaHVua3Mgaml0U3R1YnM7CiAjZW5kaWYK
ICAgICAgICAgVGltZW91dENoZWNrZXIgdGltZW91dENoZWNrZXI7CisgICAgICAgIFRlcm1pbmF0
b3IgdGVybWluYXRvcjsKICAgICAgICAgSGVhcCBoZWFwOwogCiAgICAgICAgIEpTVmFsdWUgZXhj
ZXB0aW9uOwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oIGIv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCmluZGV4IGQ5NWM1MjkuLjY0YTExMTgg
MTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAorKysgYi9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRl
ICJBcmdMaXN0LmgiCiAjaW5jbHVkZSAiQ2xhc3NJbmZvLmgiCiAjaW5jbHVkZSAiQ29tbW9uSWRl
bnRpZmllcnMuaCIKKyNpbmNsdWRlICJDb21wbGV0aW9uLmgiCiAjaW5jbHVkZSAiQ2FsbEZyYW1l
LmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiSlNOdW1iZXJDZWxsLmgiCkBAIC0x
OTUsOSArMTk2LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNH
bG9iYWxPYmplY3QoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgICAgICB2aXJ0dWFsIGJv
b2wgaXNWYXJpYWJsZU9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIHZp
cnR1YWwgYm9vbCBpc0FjdGl2YXRpb25PYmplY3QoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQot
ICAgICAgICB2aXJ0dWFsIGJvb2wgaXNXYXRjaGRvZ0V4Y2VwdGlvbigpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc05vdEFuT2JqZWN0RXJyb3JTdHViKCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAorICAgICAgICB2aXJ0dWFsIENvbXBsVHlwZSBleGNl
cHRpb25UeXBlKCkgY29uc3QgeyByZXR1cm4gVGhyb3c7IH0KKwogICAgICAgICB2b2lkIGFsbG9j
YXRlUHJvcGVydHlTdG9yYWdlKHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSk7CiAgICAg
ICAgIHZvaWQgYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VJbmxpbmUoc2l6ZV90IG9sZFNpemUsIHNp
emVfdCBuZXdTaXplKTsKICAgICAgICAgYm9vbCBpc1VzaW5nSW5saW5lU3RvcmFnZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RydWN0dXJlLT5pc1VzaW5nSW5saW5lU3RvcmFnZSgpOyB9CmRpZmYgLS1n
aXQgYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Rlcm1pbmF0b3IuaCBiL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVGVybWluYXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjZiMGYyMzYKLS0tIC9kZXYvbnVsbAorKysgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Rlcm1p
bmF0b3IuaApAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiAoIkdvb2dsZSIpIG5vciB0aGUgbmFtZXMgb2YK
KyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgVGVybWluYXRvcl9oCisjZGVmaW5lIFRlcm1pbmF0
b3JfaAorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgVGVybWluYXRvciB7CitwdWJsaWM6Cisg
ICAgVGVybWluYXRvcigpIDogbV9zaG91bGRUZXJtaW5hdGUoZmFsc2UpIHsgfQorCisgICAgdm9p
ZCB0ZXJtaW5hdGVTb29uKCkgeyBtX3Nob3VsZFRlcm1pbmF0ZSA9IHRydWU7IH0KKyAgICBib29s
IHNob3VsZFRlcm1pbmF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkVGVybWluYXRlOyB9CisK
K3ByaXZhdGU6CisgICAgYm9vbCBtX3Nob3VsZFRlcm1pbmF0ZTsKK307CisKK30gLy8gbmFtZXNw
YWNlIEpTQworCisjZW5kaWYgLy8gVGVybWluYXRvcl9oCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0
Q29yZS93dGYvUGxhdGZvcm0uaCBiL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCmluZGV4
IGYyM2Q5M2MuLjgzMWMzYjkgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9y
bS5oCisrKyBiL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCkBAIC04NjcsNiArODY3LDEw
IEBACiAjZGVmaW5lIEVOQUJMRV9OT1RJRklDQVRJT05TIDAKICNlbmRpZgogCisjaWYgUExBVEZP
Uk0oSVBIT05FKQorI2RlZmluZSBFTkFCTEVfVEVYVF9DQVJFVCAwCisjZW5kaWYKKwogI2lmICFk
ZWZpbmVkKEVOQUJMRV9URVhUX0NBUkVUKQogI2RlZmluZSBFTkFCTEVfVEVYVF9DQVJFVCAxCiAj
ZW5kaWYKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0No
YW5nZUxvZwppbmRleCBjOTA0ZGNlLi45ZWEzYzhjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTgwIEBACisy
MDEwLTA0LTA3ICBWaXRhbHkgUmVwZXNoa28gIDx2aXRhbHlyQGNocm9taXVtLm9yZz4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbVjhdIEZpeCBjcmFz
aCBpbiBOb2RlRmlsdGVyQ29uZGl0aW9uIGluIGRldGFjaGVkIGlmcmFtZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzcyMzQKKworICAgICAgICAqIGZh
c3QvZG9tL25vZGUtZmlsdGVyLWRldGFjaGVkLWlmcmFtZS1jcmFzaC1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIGZhc3QvZG9tL25vZGUtZmlsdGVyLWRldGFjaGVkLWlmcmFtZS1jcmFz
aC5odG1sOiBBZGRlZC4KKworMjAxMC0wNC0wNyAgQW5kcmV3IFNjaGVya3VzICA8c2NoZXJrdXNA
Y2hyb21pdW0ub3JnPgorCisgICAgICAgIFVucmV2aWV3ZWQsIGNoZWNraW5nIGluIG1pc3Npbmcg
aW1hZ2UgYmFzZWxpbmVzIGZvciBmYXN0L2xheWVycy92aWRlby1sYXllci5odG1sCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS1saW51eC9mYXN0L2xheWVycy92aWRlby1sYXllci1leHBl
Y3RlZC5jaGVja3N1bTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0tbGludXgv
ZmFzdC9sYXllcnMvdmlkZW8tbGF5ZXItZXhwZWN0ZWQucG5nOiBBZGRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9jaHJvbWl1bS1tYWMvZmFzdC9sYXllcnMvdmlkZW8tbGF5ZXItZXhwZWN0ZWQuY2hl
Y2tzdW06IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtLW1hYy9mYXN0L2xheWVy
cy92aWRlby1sYXllci1leHBlY3RlZC5wbmc6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2No
cm9taXVtLXdpbi9mYXN0L2xheWVycy92aWRlby1sYXllci1leHBlY3RlZC5jaGVja3N1bTogVXBk
YXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS13aW4vZmFzdC9sYXllcnMvdmlkZW8t
bGF5ZXItZXhwZWN0ZWQucG5nOiBVcGRhdGVkLgorCisyMDEwLTA0LTA2ICBFbnJpY2EgQ2FzdWNj
aSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGF2ZSBIeWF0dC4K
KworICAgICAgICBUZXh0IHJlcGFpbnRpbmcgZG9lcyBub3QgYWNjb3VudCBmb3IgZ2x5cGhzIHdo
aWNoIGRyYXcgb3V0c2lkZSB0aGUgdHlwb2dyYXBoaWMgYm91bmRzIG9mIHRoZSBmb250ICg2Mjc0
KS4KKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzY2NDk3MzQ+CisgICAgICAgIDxodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjI3ND4KKworICAgICAgICAqIGZhc3QvcmVw
YWludC9zdGFja2VkLWRpYWNyaXRpY3MuaHRtbDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0v
bWFjL2Zhc3QvcmVwYWludC9zdGFja2VkLWRpYWNyaXRpY3MtZXhwZWN0ZWQuY2hlY2tzdW06IEFk
ZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9mYXN0L3JlcGFpbnQvc3RhY2tlZC1kaWFjcml0
aWNzLWV4cGVjdGVkLnBuZzogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjL2Zhc3QvcmVw
YWludC9zdGFja2VkLWRpYWNyaXRpY3MtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKworMjAxMC0wNC0w
NyAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CisKKyAgICAgICAg
VW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjU3MTk2LgorICAgICAgICBodHRwOi8vdHJhYy53ZWJr
aXQub3JnL2NoYW5nZXNldC81NzE5NgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MzcxOTYKKworICAgICAgICBNdWx0aXBsZSBsYXlvdXQgdGVzdCBmYWls
dXJlcyBvbiBDaHJvbWl1bSAoUmVxdWVzdGVkIGJ5IHl1cnlzCisgICAgICAgIG9uICN3ZWJraXQp
LgorCisgICAgICAgICogaW5zcGVjdG9yL3RpbWVsaW5lLXRlc3QuanM6CisKKzIwMTAtMDQtMDcg
IEphaW1lIFlhcCAgPGphaW1leWFwQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
WXVyeSBTZW1pa2hhdHNreS4KKworICAgICAgICBBZGRzIGNhbGxlckZ1bmNOYW1lIHRvIHRoZSBs
aXN0IG9mIG5vbmRldGVybWluaXN0aWMgZmllbGRzIGluIHRoZSB0aW1lbGluZQorICAgICAgICBs
YXlvdXQgdGVzdHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0zNjgzOQorCisgICAgICAgICogaW5zcGVjdG9yL3RpbWVsaW5lLXRlc3QuanM6CisKKzIw
MTAtMDQtMDYgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZp
ZXdlZCBieSBFcmljIFNlaWRlbC4KKworICAgICAgICBSRUdSRVNTSU9OOiBXb3JrZXIgdGVybWlu
YXRpb24gdmlhIEpTIHRpbWVvdXQgbWF5IGNhdXNlIHdvcmtlciB0ZXN0cyBsaWtlIGZhc3Qvd29y
a2Vycy93b3JrZXItdGVybWluYXRlLmh0bWwgZmFpbC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM2NjQ2CisKKyAgICAgICAgKiBmYXN0L3dvcmtlcnMv
cmVzb3VyY2VzL3dvcmtlci1ydW4tZm9yZXZlci5qczogQWRkZWQuCisgICAgICAgICogZmFzdC93
b3JrZXJzL3dvcmtlci10ZXJtaW5hdGUtZm9yZXZlci1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIGZhc3Qvd29ya2Vycy93b3JrZXItdGVybWluYXRlLWZvcmV2ZXIuaHRtbDogQWRkZWQu
CisgICAgICAgICAgICAtIFRlc3Qgd2hhdCBoYXBwZW5zIHdoZW4gd2UgdGVybWluYXRlIGFuIGlu
ZmluaXRlbHkgcnVubmluZyB3b3JrZXIuCisgICAgICAgICAgICAgIFRoZSBlc3NlbnRpYWwgcG9p
bnQgaXMgdGhhdCB3ZSBkb24ndCBzcGFtIHRoZSBjb25zb2xlIHdpdGgKKyAgICAgICAgICAgICAg
bm9uc2Vuc2UgYWJvdXQgYSB0aW1lb3V0LgorICAgICAgICAqIHBsYXRmb3JtL21hYy9Ta2lwcGVk
OgorICAgICAgICAgICAgLSBSZXNjdWUgd29ya2VyLXRlcm1pbmF0ZS5odG1sIGZyb20gdGhlIFNr
aXBwZWQgbGlzdCBub3cgdGhhdCB3ZSd2ZQorICAgICAgICAgICAgICBmaXhlZCB0aGUgdW5kZXJs
eWluZyBidWcgdGhhdCB3YXMgY2F1c2luZyB0aGUgZmxha2luZXNzLgorCisyMDEwLTA0LTA2ICBB
bmRyZXcgU2NoZXJrdXMgIDxzY2hlcmt1c0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgRXJpYyBTZWlkZWwuCisKKyAgICAgICAgQ2hlY2tpbmcgaW4gbmV3IGJhc2VsaW5lcyBm
b3IgbWVkaWEvdmlkZW8tY29udHJvbHMtcmVuZGVyaW5nLmh0bWwgYW5kIGZhc3QvbGF5ZXJzL3Zp
ZGVvLWxheWVyLmh0bWwuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0zNzE4MAorCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0tbGludXgvbWVkaWEv
dmlkZW8tY29udHJvbHMtcmVuZGVyaW5nLWV4cGVjdGVkLmNoZWNrc3VtOiBXYXNuJ3QgcmViYXNl
bGluZWQgd2hlbiBMaW51eCBzY3JvbGxiYXJzIGNoYW5nZWQuCisgICAgICAgICogcGxhdGZvcm0v
Y2hyb21pdW0tbGludXgvbWVkaWEvdmlkZW8tY29udHJvbHMtcmVuZGVyaW5nLWV4cGVjdGVkLnBu
ZzogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0tbWFjL2Zhc3QvbGF5ZXJzL3Zp
ZGVvLWxheWVyLWV4cGVjdGVkLnR4dDogV2Fzbid0IHJlYmFzZWxpbmVkIHdoZW4gYXVkaW8vdmlk
ZW8gVUkgd2FzIHJlZnJlc2hlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS13aW4vZmFz
dC9sYXllcnMvdmlkZW8tbGF5ZXItZXhwZWN0ZWQudHh0OiBEaXR0by4KKyAgICAgICAgKiBwbGF0
Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQ6IFJlbW92ZWQgZXhwZWN0YXRpb25z
IGZvciB0aGUgYWJvdmUgdHdvIHRlc3RzLgorCisyMDEwLTA0LTA2ICBNYXJrIFJvd2UgIDxtcm93
ZUBhcHBsZS5jb20+CisKKyAgICAgICAgUnViYmVyLXN0YW1wZWQgYnkgT2xpdmVyIEh1bnQuCisK
KyAgICAgICAgUkVHUkVTU0lPTiAocjU3MTEzKTogZWRpdGluZy9pbnNlcnRpbmcvYnJlYWstYmxv
Y2txdW90ZS1hZnRlci1kZWxldGUuaHRtbCBmYWlscyBvbiBXaW5kb3dzCisgICAgICAgIDxodHRw
Oi8vd2Via2l0Lm9yZy9iLzM3MTU2PiAvIDxyZGFyOi8vcHJvYmxlbS83ODMyNDA4PgorCisgICAg
ICAgIExhbmQgV2luZG93cy1zcGVjaWZpYyByZXN1bHRzIGZvciBlZGl0aW5nL2luc2VydGluZy9i
cmVhay1ibG9ja3F1b3RlLWFmdGVyLWRlbGV0ZS5odG1sLiAgPHJkYXI6Ly9wcm9ibGVtLzc4MzQy
ODA+CisgICAgICAgIHRyYWNrcyB1bmRlcnN0YW5kaW5nIHRoZSByb290IGNhdXNlIG9mIHRoaXMg
ZGlmZmVyZW5jZSBiZXR3ZWVuIE1hYyBhbmQgV2luZG93cy4KKworICAgICAgICAqIHBsYXRmb3Jt
L3dpbi9lZGl0aW5nL2luc2VydGluZy9icmVhay1ibG9ja3F1b3RlLWFmdGVyLWRlbGV0ZS1leHBl
Y3RlZC5jaGVja3N1bTogQ29waWVkIGZyb20gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2VkaXRp
bmcvaW5zZXJ0aW5nL2JyZWFrLWJsb2NrcXVvdGUtYWZ0ZXItZGVsZXRlLWV4cGVjdGVkLmNoZWNr
c3VtLgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9lZGl0aW5nL2luc2VydGluZy9icmVhay1ibG9j
a3F1b3RlLWFmdGVyLWRlbGV0ZS1leHBlY3RlZC5wbmc6IENvcGllZCBmcm9tIExheW91dFRlc3Rz
L3BsYXRmb3JtL21hYy9lZGl0aW5nL2luc2VydGluZy9icmVhay1ibG9ja3F1b3RlLWFmdGVyLWRl
bGV0ZS1leHBlY3RlZC5wbmcuCisgICAgICAgICogcGxhdGZvcm0vd2luL2VkaXRpbmcvaW5zZXJ0
aW5nL2JyZWFrLWJsb2NrcXVvdGUtYWZ0ZXItZGVsZXRlLWV4cGVjdGVkLnR4dDogQ29waWVkIGZy
b20gTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0tbWFjL2VkaXRpbmcvaW5zZXJ0aW5nL2Jy
ZWFrLWJsb2NrcXVvdGUtYWZ0ZXItZGVsZXRlLWV4cGVjdGVkLnR4dC4KKworMjAxMC0wNC0wNiAg
Q2hyaXMgRXZhbnMgIDxjZXZhbnNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IEFkYW0gQmFydGguCisKKyAgICAgICAgQWRkIHRlc3QgZm9yIGphdmFzY3JpcHQ6d2luZG93Lm9w
ZW4oKSBwb3B1cCBibG9ja2VyIGJ5cGFzcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTM3MTM4CisKKyAgICAgICAgKiBmYXN0L2V2ZW50cy9wb3B1cC1i
bG9ja2VkLWZyb20td2luZG93LW9wZW4uaHRtbDogYWRkZWQKKyAgICAgICAgKiBmYXN0L2V2ZW50
cy9wb3B1cC1ibG9ja2VkLWZyb20td2luZG93LW9wZW4tZXhwZWN0ZWQudHh0OiBhZGRlZAorCisy
MDEwLTA0LTA2ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgQWxleGV5IFByb3NrdXJ5YWtvdi4KKworICAgICAgICB0cmFuc2l0aW9ucy90cmFu
c2l0aW9uLWVuZC1ldmVudC10cmFuc2Zvcm0uaHRtbCBmYWlscyBpbnRlcm1pdHRlbnRseSBvbiBU
aWdlciBJbnRlbCBSZWxlYXNlIGJvdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MzcxNDUKKworICAgICAgICBUaGUgdGltZW91dCBvbiB0aGlzIHRlc3Qg
aXMgd3JvbmcgYmVjYXVzZSB0aGUgaGVscGVyIGxpYnJhcnkgYXNzdW1lcworICAgICAgICB0aGF0
IHdlJ3JlIG9ubHkgZ29pbmcgdG8gZG8gb25lIHRyYW5zaXRpb24sIGJ1dCB0aGUgdGVzdCBhY3R1
YWxseSBkb2VzCisgICAgICAgIHR3byBpbiBzZXF1ZW5jZS4gIFRoaXMgcGF0Y2ggZG91YmxlcyB0
aGUgdGltZW91dCB0byBhY2NvdW50IGZvciB0aGF0LgorCisgICAgICAgIFRoZSBkZXNpZ24gb2Yg
dGhlc2UgdGVzdHMgYXJlIHF1aXRlIHVuZm9ydHVuYXRlIGJlY2F1c2UgdGhlc2UgdGltZW91dAor
ICAgICAgICBiZWhhdmlvcnMgZG9uJ3Qgc2VlbSBsaWtlIHRoZXknZCBiZSByZWxpYWJsZSBvbiBz
bG93IG1hY2hpbmVzIGxpa2UKKyAgICAgICAgVGlnZXIuICBJJ20gbm90IDEwMCUgY29udmluY2Vk
IHRoYXQgdGhpcyB3aWxsIGZpeCB0aGUgZmxha2luZXNzLCBidXQgaXQKKyAgICAgICAgc2VlbXMg
bGlrZSBhbiBpbXByb3ZlbWVudC4KKworICAgICAgICBJJ2xsIGZpbGUgYSBzZXBhcmF0ZSBidWcg
YWJvdXQgRFJUIGxlYWtpbmcgc3RhdGUgZnJvbSBvbmUgdGVzdCB0bworICAgICAgICBhbm90aGVy
LgorCisgICAgICAgICogdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1lbmQtZXZlbnQtaGVscGVycy5q
czoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy90cmFuc2l0aW9uLWVuZC1ldmVudC1zZXQtbm9uZS5o
dG1sOgorCisyMDEwLTA0LTA2ICBLcml0aGlnYXNzcmVlIFNhbWJhbXVydGh5ICA8a3JpdGhpZ2Fz
c3JlZS5zYW1iYW11cnRoeUBub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTGFzemxv
IEdvbWJvcy4KKworICAgICAgICBbUXRdIFRoZXNlIHRlc3RzIGNhbiBiZSByZW1vdmVkIGZyb20g
dGhlIHNraXBwZWQgbGlzdCBzaW5jZSB0aGVzZQorICAgICAgICB3b3JrIGFmdGVyIHRoZSByZWRp
cmVjdGlvbiBsb29wIGRldGVjdGlvbiBpbXBsZW1lbnRlZCBpbiBxdCBuZXR3b3JrLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2lpP2lkPTM2NjkwCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9xdC9Ta2lwcGVkOgorCisyMDEwLTA0LTA2ICBBbmRyZXcgU2NoZXJrdXMg
IDxzY2hlcmt1c0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgVW5yZXZpZXdlZCwgbWVkaWEgdGVz
dCBleHBlY3RhdGlvbnMgdHdlYWsuCisKKyAgICAgICAgV2Ugbm93IHJlZ3VsYXJseSBydW4gaHR0
cC90ZXN0cy9tZWRpYSBhbmQgaGF2ZSB0byBtYXJrIGEgZmV3IHRlc3RzIGFzIFRJTUVPVVQuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQ6CisKKzIw
MTAtMDQtMDYgIENocmlzIEZsZWl6YWNoICA8Y2ZsZWl6YWNoQGFwcGxlLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBCZXRoIERha2luLgorCisgICAgICAgIGFyaWEtbGFiZWwgZG9lc24ndCB3
b3JrIG9uIGltYWdlIG1hcCBhcmVhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0zNjk3NworCisgICAgICAgICogcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxp
dHkvYXJlYS13aXRoLWFyaWEtbGFiZWwtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9hcmVhLXdpdGgtYXJpYS1sYWJlbC5odG1sOiBBZGRl
ZC4KKworMjAxMC0wNC0wNiAgQW5kcmV3IFNjaGVya3VzICA8c2NoZXJrdXNAY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIFVucmV2aWV3ZWQsIGNsZWFuaW5nIHVwIG1lZGlhIGxheW91dCB0ZXN0IGV4
cGVjdGF0aW9ucy4KKworICAgICAgICBNb3N0bHkgY29ycmVjdGluZyBidWcgbnVtYmVycywgdXBk
YXRpbmcgY29tbWVudHMsIGFuZCBmaXhpbmcgZXhwZWN0YXRpb25zLgorCisgICAgICAgICogcGxh
dGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0OgorCisyMDEwLTA0LTAxICBZdXpv
IEZ1amlzaGltYSAgPHl1em9AZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBEYXJp
biBBZGxlci4KKworICAgICAgICBGaXggYnVnOiBDU1MzIDpub3Qgc2VsZWN0b3Igd2l0aCBJRCBz
aW1wbGUgc2VsZWN0b3Igc2VxdWVuY2UgdGVzdCBmYWlscworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzYyNzYKKworICAgICAgICAqIGZhc3QvY3NzL2lu
dmFsaWQtbm90LXdpdGgtc2ltcGxlLXNlbGVjdG9yLXNlcXVlbmNlLWV4cGVjdGVkLnR4dDogQWRk
ZWQuCisgICAgICAgICogZmFzdC9jc3MvaW52YWxpZC1ub3Qtd2l0aC1zaW1wbGUtc2VsZWN0b3It
c2VxdWVuY2UuaHRtbDogQWRkZWQuCisKIDIwMTAtMDQtMDYgIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHI1NzEwOSk6IGVkaXRpbmcvcGFzdGVi
b2FyZC9kcmFnLWltYWdlLXRvLWNvbnRlbnRlZGl0YWJsZS1pbi1pZnJhbWUuaHRtbCBmYWlscyBv
biBXaW5kb3dzCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9ub2RlLWZpbHRlci1k
ZXRhY2hlZC1pZnJhbWUtY3Jhc2gtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20v
bm9kZS1maWx0ZXItZGV0YWNoZWQtaWZyYW1lLWNyYXNoLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDAyYjQxCi0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvZmFzdC9kb20vbm9kZS1maWx0ZXItZGV0YWNoZWQtaWZyYW1lLWNyYXNoLWV4cGVj
dGVkLnR4dApAQCAtMCwwICsxLDYgQEAKK0Vuc3VyZSB0aGF0IHVzaW5nIG5vZGUgZmlsdGVyIHdp
dGggYSBkZXRhY2hlZCBpZnJhbWUgZG9lc24ndCBjcmFzaC4KKworUEFTUyBEaWQgbm90IGNyYXNo
LgorUEFTUyBkdW1teUZpbHRlckNhbGxlZCBpcyB0cnVlCitQQVNTIGZvdW5kTm9kZS50b1N0cmlu
ZygpIGlzICJbb2JqZWN0IEhUTUxIdG1sRWxlbWVudF0iCisKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2Zhc3QvZG9tL25vZGUtZmlsdGVyLWRldGFjaGVkLWlmcmFtZS1jcmFzaC5odG1sIGIvTGF5
b3V0VGVzdHMvZmFzdC9kb20vbm9kZS1maWx0ZXItZGV0YWNoZWQtaWZyYW1lLWNyYXNoLmh0bWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU3M2U1ZQotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL25vZGUtZmlsdGVyLWRldGFjaGVkLWlmcmFtZS1j
cmFzaC5odG1sCkBAIC0wLDAgKzEsMzkgQEAKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0
eWxlc2hlZXQiIGhyZWY9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2Ny
aXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQ+CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgICAgIGxheW91dFRlc3RDb250
cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICB9CisKKyAgICB2YXIgZHVtbXlGaWx0ZXJDYWxsZWQg
PSBmYWxzZTsKKyAgICB2YXIgZm91bmROb2RlOworCisgICAgZnVuY3Rpb24gZHVtbXlGaWx0ZXIo
KSB7CisgICAgICAgIGR1bW15RmlsdGVyQ2FsbGVkID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIE5v
ZGVGaWx0ZXIuRklMVEVSX0FDQ0VQVDsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB0ZXN0KCkgewor
ICAgICAgICB2YXIgaWZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7Cisg
ICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaWZyYW1lKTsKKyAgICAgICAgdmFyIGRv
YyA9IGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50OworICAgICAgICBkb2N1bWVudC5ib2R5
LnJlbW92ZUNoaWxkKGlmcmFtZSk7CisgICAgICAgIHZhciBpdGVyYXRvciA9IGRvYy5jcmVhdGVO
b2RlSXRlcmF0b3IoZG9jLCBOb2RlRmlsdGVyLlNIT1dfRUxFTUVOVCwgZHVtbXlGaWx0ZXIsIGZh
bHNlKTsKKyAgICAgICAgZm91bmROb2RlID0gaXRlcmF0b3IubmV4dE5vZGUoKTsKKyAgICAgICAg
dGVzdFBhc3NlZCgiRGlkIG5vdCBjcmFzaC4iKTsKKyAgICAgICAgc2hvdWxkQmVUcnVlKCJkdW1t
eUZpbHRlckNhbGxlZCIpOworICAgICAgICBzaG91bGRCZSgiZm91bmROb2RlLnRvU3RyaW5nKCki
LCAiXCJbb2JqZWN0IEhUTUxIdG1sRWxlbWVudF1cIiIpOworCisgICAgICAgIGlmICh3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5u
b3RpZnlEb25lKCk7CisgICAgfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InRl
c3QoKSI+Cis8cD5FbnN1cmUgdGhhdCB1c2luZyBub2RlIGZpbHRlciB3aXRoIGEgZGV0YWNoZWQg
aWZyYW1lIGRvZXNuJ3QgY3Jhc2guPC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8L2Jv
ZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9wb3B1cC1i
bG9ja2VkLWZyb20td2luZG93LW9wZW4tZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9l
dmVudHMvcG9wdXAtYmxvY2tlZC1mcm9tLXdpbmRvdy1vcGVuLWV4cGVjdGVkLnR4dApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGRkZjAwCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvcG9wdXAtYmxvY2tlZC1mcm9tLXdpbmRvdy1vcGVuLWV4
cGVjdGVkLnR4dApAQCAtMCwwICsxIEBACitJZiB0aGUgaW5uZXIgcG9wLXVwIHdhcyBub3QgYmxv
Y2tlZCB0aGVuIHRoZXJlIHdpbGwgYmUgYW4gQUxFUlQgY29udGFpbmluZyBhIERPTVdpbmRvdyBv
YmplY3QuIE90aGVyd2lzZSwgdGhlIHRlc3QgcGFzc2VzLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvZmFzdC9ldmVudHMvcG9wdXAtYmxvY2tlZC1mcm9tLXdpbmRvdy1vcGVuLmh0bWwgYi9MYXlv
dXRUZXN0cy9mYXN0L2V2ZW50cy9wb3B1cC1ibG9ja2VkLWZyb20td2luZG93LW9wZW4uaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NGRiYTBiCi0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvcG9wdXAtYmxvY2tlZC1mcm9tLXdpbmRvdy1v
cGVuLmh0bWwKQEAgLTAsMCArMSwyMyBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+CitpZiAo
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgIGxheW91dFRlc3RDb250cm9sbGVyLmR1
bXBBc1RleHQoKTsKKyAgbGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0Q2FuT3BlbldpbmRvd3MoKTsK
KyAgbGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0UG9wdXBCbG9ja2luZ0VuYWJsZWQodHJ1ZSk7Cisg
IGxheW91dFRlc3RDb250cm9sbGVyLnNldENsb3NlUmVtYWluaW5nV2luZG93c1doZW5Db21wbGV0
ZSh0cnVlKTsKKyAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworfQorCitm
dW5jdGlvbiB0ZXN0KCkgeworICB3aW5kb3cub3BlbigiamF2YXNjcmlwdDphbGVydCh3aW5kb3cu
b3BlbignYWJvdXQ6YmxhbmsnKSkiKTsKKyAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
cikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9Cis8L3NjcmlwdD4K
KzwvaGVhZD4KKzxib2R5IG9ubG9hZD0idGVzdCgpIj4KK0lmIHRoZSBpbm5lciBwb3AtdXAgd2Fz
IG5vdCBibG9ja2VkIHRoZW4gdGhlcmUgd2lsbCBiZSBhbiBBTEVSVCBjb250YWluaW5nIGEKK0RP
TVdpbmRvdyBvYmplY3QuIE90aGVyd2lzZSwgdGhlIHRlc3QgcGFzc2VzLgorPC9ib2R5PgorPC9o
dG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9yZXBhaW50L3N0YWNrZWQtZGlhY3Jp
dGljcy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9yZXBhaW50L3N0YWNrZWQtZGlhY3JpdGljcy5o
dG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzYzdlYzIKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3JlcGFpbnQvc3RhY2tlZC1kaWFjcml0aWNzLmh0
bWwKQEAgLTAsMCArMSwzMyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBI
VE1MIDQuMDEvL0VOIgorICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvc3RyaWN0
LmR0ZCI+Cis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+
CisgICAgZGl2LnRlc3QgeyB3aWR0aDogMjAwcHg7IGhlaWdodDogMTIwcHg7IGJvcmRlcjogMXB4
IHNvbGlkIGJsdWU7IHBhZGRpbmc6IDEwcHg7IH0KKzwvc3R5bGU+CisgICAgPHNjcmlwdCBzcmM9
InJlc291cmNlcy9yZXBhaW50LmpzIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwvc2NyaXB0Pgor
ICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAgICAgICBmdW5jdGlvbiByZXBh
aW50VGVzdCgpCisgICAgICAgeworICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
c3RhY2tlZCcpLmlubmVyVGV4dCA9ICIiOworICAgICAgIH0KKyAgICA8L3NjcmlwdD4KKzwvaGVh
ZD4KKzxib2R5IG9ubG9hZD0icnVuUmVwYWludFRlc3QoKTsiPgorPHA+PGI+QlVHIElEOjwvYj4g
PGEgaHJlZj0iaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYyNzQiPiBC
dWd6aWxsYSBidWcgNjI3NDwvYT5UZXh0IHJlcGFpbnRpbmcgZG9lcyBub3QgYWNjb3VudCBmb3Ig
Z2x5cGhzIHdoaWNoIGRyYXcgb3V0c2lkZSB0aGUgdHlwb2dyYXBoaWMgYm91bmRzIG9mIHRoZSBm
b250LjwvcD4KKworPHAgaWQ9InN1Y2Nlc3MiIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOnBhbGVn
cmVlbjsgcGFkZGluZzozcHg7Ij48Yj5URVNUIFBBU1M6PC9iPiAKK1RoZSB0ZXh0IHdpbGwgZW50
aXJlbHkgZGlzYXBwZWFyLgorPC9wPgorCis8cCBpZD0iZmFpbHVyZSIgc3R5bGU9ImJhY2tncm91
bmQtY29sb3I6I0ZGMzMwMDsgcGFkZGluZzozcHg7Ij48Yj5URVNUIEZBSUw6PC9iPiAgCitNb3N0
IG9mIHRoZSB0ZXh0IHdpbGwgYmUgZ29uZSwgYnV0IHNvbWUgYXJ0aWZhY3RzIHdpbGwgYmUgbGVm
dCBiZWhpbmQgYXQgdGhlIHRvcCBvZiB0aGUgcGFnZS4KKzwvcD4KKworPGRpdiBjbGFzcz0idGVz
dCI+CisgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOiAzNnB4OyIgaWQ9InN0YWNrZWQiPiYjeDFF
QTY7JiN4MUVBNDsmI3gxRUFBOyYjeDFFQTg7JiN4MUVCMDs8L2Rpdj4KKzwvZGl2PgorPGJyPgor
Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMv
cmVzb3VyY2VzL3dvcmtlci1ydW4tZm9yZXZlci5qcyBiL0xheW91dFRlc3RzL2Zhc3Qvd29ya2Vy
cy9yZXNvdXJjZXMvd29ya2VyLXJ1bi1mb3JldmVyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjkxMmU0OWQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0
L3dvcmtlcnMvcmVzb3VyY2VzL3dvcmtlci1ydW4tZm9yZXZlci5qcwpAQCAtMCwwICsxIEBACit3
aGlsZSgxKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy93b3JrZXItdGVy
bWluYXRlLWZvcmV2ZXItZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3dv
cmtlci10ZXJtaW5hdGUtZm9yZXZlci1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uYmU1M2RkZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zh
c3Qvd29ya2Vycy93b3JrZXItdGVybWluYXRlLWZvcmV2ZXItZXhwZWN0ZWQudHh0CkBAIC0wLDAg
KzEgQEAKK1Rlc3QgV29ya2VyLnRlcm1pbmF0ZSgpIGZvciBhIHdvcmtlciB0aGF0IHRyaWVzIHRv
IHJ1biBmb3JldmVyLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3dvcmtl
ci10ZXJtaW5hdGUtZm9yZXZlci5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3dvcmtl
ci10ZXJtaW5hdGUtZm9yZXZlci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjFlYjJkMDMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMv
d29ya2VyLXRlcm1pbmF0ZS1mb3JldmVyLmh0bWwKQEAgLTAsMCArMSwxMSBAQAorPGJvZHk+Cis8
cD5UZXN0IFdvcmtlci50ZXJtaW5hdGUoKSBmb3IgYSB3b3JrZXIgdGhhdCB0cmllcyB0byBydW4g
Zm9yZXZlci48L3A+Cis8c2NyaXB0PgoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikK
KyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisKK3ZhciB3b3JrZXIgPSBu
ZXcgV29ya2VyKCdyZXNvdXJjZXMvd29ya2VyLXJ1bi1mb3JldmVyLmpzJyk7Cit3b3JrZXIudGVy
bWluYXRlKCk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtLWxpbnV4L2Zhc3QvbGF5ZXJzL3ZpZGVvLWxheWVyLWV4
cGVjdGVkLmNoZWNrc3VtIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0tbGludXgvZmFz
dC9sYXllcnMvdmlkZW8tbGF5ZXItZXhwZWN0ZWQuY2hlY2tzdW0KbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uNzE1OTBjNgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L3BsYXRmb3JtL2Nocm9taXVtLWxpbnV4L2Zhc3QvbGF5ZXJzL3ZpZGVvLWxheWVyLWV4cGVjdGVk
LmNoZWNrc3VtCkBAIC0wLDAgKzEgQEAKK2RjMjZlMzUwMWFhMDk3YTNkZDFkZGExNGVkOTJlOTZl
ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vY2hyb21pdW0tbGludXgvZmFzdC9sYXllcnMvdmlkZW8tbGF5ZXItZXhwZWN0ZWQucG5n
IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0tbGludXgvZmFzdC9sYXllcnMvdmlkZW8t
bGF5ZXItZXhwZWN0ZWQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3
M2VhMmUKQmluYXJ5IGZpbGVzIC9kZXYvbnVsbCBhbmQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9j
aHJvbWl1bS1saW51eC9mYXN0L2xheWVycy92aWRlby1sYXllci1leHBlY3RlZC5wbmcgZGlmZmVy
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS1saW51eC9tZWRpYS92
aWRlby1jb250cm9scy1yZW5kZXJpbmctZXhwZWN0ZWQuY2hlY2tzdW0gYi9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9jaHJvbWl1bS1saW51eC9tZWRpYS92aWRlby1jb250cm9scy1yZW5kZXJpbmctZXhw
ZWN0ZWQuY2hlY2tzdW0KaW5kZXggMjg1OTZlNy4uYTE2OTMzZSAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0tbGludXgvbWVkaWEvdmlkZW8tY29udHJvbHMtcmVuZGVy
aW5nLWV4cGVjdGVkLmNoZWNrc3VtCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVt
LWxpbnV4L21lZGlhL3ZpZGVvLWNvbnRyb2xzLXJlbmRlcmluZy1leHBlY3RlZC5jaGVja3N1bQpA
QCAtMSArMSBAQAotOTZkZjRjZmE0NDA3YTJhNmRjZmRjZjE3MDE5ODZlYmQKXCBObyBuZXdsaW5l
IGF0IGVuZCBvZiBmaWxlCis4ODRmYmQ1NzM2MjM0NzcwZDI5MjRhYzBkYjI4YzU4OApcIE5vIG5l
d2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2No
cm9taXVtLWxpbnV4L21lZGlhL3ZpZGVvLWNvbnRyb2xzLXJlbmRlcmluZy1leHBlY3RlZC5wbmcg
Yi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS1saW51eC9tZWRpYS92aWRlby1jb250cm9s
cy1yZW5kZXJpbmctZXhwZWN0ZWQucG5nCmluZGV4IDI3NTRmNDkuLjgwZTk4YjUgMTAwNjQ0CkJp
bmFyeSBmaWxlcyBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtLWxpbnV4L21lZGlhL3Zp
ZGVvLWNvbnRyb2xzLXJlbmRlcmluZy1leHBlY3RlZC5wbmcgYW5kIGIvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vY2hyb21pdW0tbGludXgvbWVkaWEvdmlkZW8tY29udHJvbHMtcmVuZGVyaW5nLWV4cGVj
dGVkLnBuZyBkaWZmZXIKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVt
LW1hYy9mYXN0L2xheWVycy92aWRlby1sYXllci1leHBlY3RlZC5jaGVja3N1bSBiL0xheW91dFRl
c3RzL3BsYXRmb3JtL2Nocm9taXVtLW1hYy9mYXN0L2xheWVycy92aWRlby1sYXllci1leHBlY3Rl
ZC5jaGVja3N1bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWI5MzczCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0tbWFjL2Zhc3Qv
bGF5ZXJzL3ZpZGVvLWxheWVyLWV4cGVjdGVkLmNoZWNrc3VtCkBAIC0wLDAgKzEgQEAKK2RlNmI4
Y2Q0YTcyZGQ0OWIyYmQ5NDM2NmM1ZjJhNjI3ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0tbWFjL2Zhc3QvbGF5ZXJz
L3ZpZGVvLWxheWVyLWV4cGVjdGVkLnBuZyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVt
LW1hYy9mYXN0L2xheWVycy92aWRlby1sYXllci1leHBlY3RlZC5wbmcKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uMWRhYWQxYQpCaW5hcnkgZmlsZXMgL2Rldi9udWxsIGFuZCBi
L0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtLW1hYy9mYXN0L2xheWVycy92aWRlby1sYXll
ci1leHBlY3RlZC5wbmcgZGlmZmVyCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9j
aHJvbWl1bS1tYWMvZmFzdC9sYXllcnMvdmlkZW8tbGF5ZXItZXhwZWN0ZWQudHh0IGIvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0tbWFjL2Zhc3QvbGF5ZXJzL3ZpZGVvLWxheWVyLWV4cGVj
dGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGI4YzY2Ci0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0tbWFjL2Zhc3QvbGF5
ZXJzL3ZpZGVvLWxheWVyLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDM2IEBACitsYXllciBhdCAo
MCwwKSBzaXplIDgwMHg2MDAKKyAgUmVuZGVyVmlldyBhdCAoMCwwKSBzaXplIDgwMHg2MDAKK2xh
eWVyIGF0ICgwLDApIHNpemUgODAweDYwMAorICBSZW5kZXJCbG9jayB7SFRNTH0gYXQgKDAsMCkg
c2l6ZSA4MDB4NjAwCisgICAgUmVuZGVyQm9keSB7Qk9EWX0gYXQgKDgsOCkgc2l6ZSA3ODR4NTg0
CisgICAgICBSZW5kZXJCbG9jayB7UH0gYXQgKDAsMCkgc2l6ZSA3ODR4MzYKKyAgICAgICAgUmVu
ZGVySW5saW5lIHtBfSBhdCAoMCwwKSBzaXplIDMwNXgxOCBbY29sb3I9IzAwMDBFRV0KKyAgICAg
ICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAzMDV4MTgKKyAgICAgICAgICAg
IHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDMwNTogImh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yNTA2NiIKKyAgICAgICAgUmVuZGVyQlIge0JSfSBhdCAoMzA1LDE0KSBz
aXplIDB4MAorICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMTgpIHNpemUgNDE1eDE4
CisgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMTgpIHdpZHRoIDQxNTogImNvbnRyb2xzIHNob3Vs
ZCBub3QgYmUgbWlzcGxhY2VkIHdoZW4gdmlkZW8gZ2V0cyBhIFJlbmRlckxheWVyLiIKKyAgICAg
IFJlbmRlckJsb2NrIChhbm9ueW1vdXMpIGF0ICgwLDUyKSBzaXplIDc4NHgyNTIKKyAgICAgICAg
UmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgMHgwCisgICAgICAgIFJlbmRlclRleHQg
eyN0ZXh0fSBhdCAoMCwwKSBzaXplIDB4MAorICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQg
KDAsMCkgc2l6ZSAweDAKKyAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUg
MHgwCitsYXllciBhdCAoNTgsMTEwKSBzaXplIDMwMngxNTIKKyAgUmVuZGVyVmlkZW8ge1ZJREVP
fSBhdCAoNTAsNTApIHNpemUgMzAyeDE1MiBbYm9yZGVyOiAoMXB4IHNvbGlkICMwMDAwMDApXQor
bGF5ZXIgYXQgKDU5LDExMSkgc2l6ZSAzMDB4MTUwCisgIFJlbmRlckJsb2NrIChyZWxhdGl2ZSBw
b3NpdGlvbmVkKSB7RElWfSBhdCAoMSwxKSBzaXplIDMwMHgxNTAKK2xheWVyIGF0ICg1OSwyMjkp
IHNpemUgMzAweDMyCisgIFJlbmRlckZsZXhpYmxlQm94IChwb3NpdGlvbmVkKSB7RElWfSBhdCAo
MCwxMTgpIHNpemUgMzAweDMyIFtiZ2NvbG9yPSMwMDAwMDA5OV0KK2xheWVyIGF0ICg2NiwyMzUp
IHNpemUgMTh4MTkKKyAgUmVuZGVyQnV0dG9uIHtJTlBVVH0gYXQgKDcsNikgc2l6ZSAxOHgxOQor
bGF5ZXIgYXQgKDg5LDIyOSkgc2l6ZSAyMzZ4MzIKKyAgUmVuZGVyRmxleGlibGVCb3ggKHBvc2l0
aW9uZWQpIHtESVZ9IGF0ICgzMCwwKSBzaXplIDIzNngzMiBbYm9yZGVyOiAoMXB4IHNvbGlkICNG
RkZGRkYzMykgbm9uZSAoMXB4IHNvbGlkICNGRkZGRkYzMyldCitsYXllciBhdCAoMjY2LDIzNSkg
c2l6ZSA1OHgyMAorICBSZW5kZXJCbG9jayAocG9zaXRpb25lZCkge0RJVn0gYXQgKDE3Nyw2KSBz
aXplIDU4eDIwIFtjb2xvcj0jRkZGRkZGXQorICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoOCwy
KSBzaXplIDQxeDE3CisgICAgICB0ZXh0IHJ1biBhdCAoOCwyKSB3aWR0aCA0MTogIjAwOjAwIgor
bGF5ZXIgYXQgKDk2LDIzNikgc2l6ZSAxNjN4MjQKKyAgUmVuZGVyU2xpZGVyIHtJTlBVVH0gYXQg
KDcsNykgc2l6ZSAxNjN4MTggW2NvbG9yPSMzMjhDREZdIFtiZ2NvbG9yPSNGRkZGRkYxNF0gW2Jv
cmRlcjogKDFweCBzb2xpZCAjRkZGRkZGMzMpXQorICAgIFJlbmRlckJsb2NrIHtESVZ9IGF0ICgz
LC01KSBzaXplIDl4MjkKK2xheWVyIGF0ICgzMjUsMjI5KSBzaXplIDM0eDMyCisgIFJlbmRlckJ1
dHRvbiB7SU5QVVR9IGF0ICgyNjYsMCkgc2l6ZSAzNHgzMgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vY2hyb21pdW0td2luL2Zhc3QvbGF5ZXJzL3ZpZGVvLWxheWVyLWV4cGVjdGVk
LmNoZWNrc3VtIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0td2luL2Zhc3QvbGF5ZXJz
L3ZpZGVvLWxheWVyLWV4cGVjdGVkLmNoZWNrc3VtCmluZGV4IDMxZTJlZmEuLjE5NDMyZjEgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtLXdpbi9mYXN0L2xheWVycy92
aWRlby1sYXllci1leHBlY3RlZC5jaGVja3N1bQorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9j
aHJvbWl1bS13aW4vZmFzdC9sYXllcnMvdmlkZW8tbGF5ZXItZXhwZWN0ZWQuY2hlY2tzdW0KQEAg
LTEgKzEgQEAKLWMwNjViMjM4YTNkMDA2YTMyNDI3NTBkYTllYjA4ZWRlClwgTm8gbmV3bGluZSBh
dCBlbmQgb2YgZmlsZQorMTdkZjAzMjIxNmI0NDA1MjJlYTM4NDNjZDM3YWIwZWEKXCBObyBuZXds
aW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJv
bWl1bS13aW4vZmFzdC9sYXllcnMvdmlkZW8tbGF5ZXItZXhwZWN0ZWQucG5nIGIvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vY2hyb21pdW0td2luL2Zhc3QvbGF5ZXJzL3ZpZGVvLWxheWVyLWV4cGVjdGVk
LnBuZwppbmRleCA3MzVmZDlkLi4xYjI1Y2UwIDEwMDY0NApCaW5hcnkgZmlsZXMgYS9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS13aW4vZmFzdC9sYXllcnMvdmlkZW8tbGF5ZXItZXhwZWN0
ZWQucG5nIGFuZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtLXdpbi9mYXN0L2xheWVy
cy92aWRlby1sYXllci1leHBlY3RlZC5wbmcgZGlmZmVyCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9jaHJvbWl1bS13aW4vZmFzdC9sYXllcnMvdmlkZW8tbGF5ZXItZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0td2luL2Zhc3QvbGF5ZXJzL3ZpZGVv
LWxheWVyLWV4cGVjdGVkLnR4dAppbmRleCA4MzQ4N2QyLi4wNjJiM2VlIDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS13aW4vZmFzdC9sYXllcnMvdmlkZW8tbGF5ZXIt
ZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtLXdpbi9mYXN0
L2xheWVycy92aWRlby1sYXllci1leHBlY3RlZC50eHQKQEAgLTIxLDE2ICsyMSwxNiBAQCBsYXll
ciBhdCAoNTksMTE1KSBzaXplIDMwMHgxNTAKICAgUmVuZGVyQmxvY2sgKHJlbGF0aXZlIHBvc2l0
aW9uZWQpIHtESVZ9IGF0ICgxLDEpIHNpemUgMzAweDE1MAogbGF5ZXIgYXQgKDU5LDIzMykgc2l6
ZSAzMDB4MzIKICAgUmVuZGVyRmxleGlibGVCb3ggKHBvc2l0aW9uZWQpIHtESVZ9IGF0ICgwLDEx
OCkgc2l6ZSAzMDB4MzIgW2JnY29sb3I9IzAwMDAwMDk5XQotbGF5ZXIgYXQgKDMyNSwyMzMpIHNp
emUgMzR4MzIKLSAgUmVuZGVyQnV0dG9uIHtJTlBVVH0gYXQgKDI2NiwwKSBzaXplIDM0eDMyCiBs
YXllciBhdCAoNjYsMjM5KSBzaXplIDE4eDE5CiAgIFJlbmRlckJ1dHRvbiB7SU5QVVR9IGF0ICg3
LDYpIHNpemUgMTh4MTkKIGxheWVyIGF0ICg4OSwyMzMpIHNpemUgMjM2eDMyCi0gIFJlbmRlckZs
ZXhpYmxlQm94IChwb3NpdGlvbmVkKSB7RElWfSBhdCAoMzAsMCkgc2l6ZSAyMzZ4MzIKLWxheWVy
IGF0ICgyNjcsMjM5KSBzaXplIDU4eDIwCi0gIFJlbmRlckJsb2NrIChwb3NpdGlvbmVkKSB7RElW
fSBhdCAoMTc4LDYpIHNpemUgNTh4MjAgW2NvbG9yPSNGRkZGRkZdCisgIFJlbmRlckZsZXhpYmxl
Qm94IChwb3NpdGlvbmVkKSB7RElWfSBhdCAoMzAsMCkgc2l6ZSAyMzZ4MzIgW2JvcmRlcjogKDFw
eCBzb2xpZCAjRkZGRkZGMzMpIG5vbmUgKDFweCBzb2xpZCAjRkZGRkZGMzMpXQorbGF5ZXIgYXQg
KDI2NiwyMzkpIHNpemUgNTh4MjAKKyAgUmVuZGVyQmxvY2sgKHBvc2l0aW9uZWQpIHtESVZ9IGF0
ICgxNzcsNikgc2l6ZSA1OHgyMCBbY29sb3I9I0ZGRkZGRl0KICAgICBSZW5kZXJUZXh0IHsjdGV4
dH0gYXQgKDgsMSkgc2l6ZSA0MngxOQogICAgICAgdGV4dCBydW4gYXQgKDgsMSkgd2lkdGggNDI6
ICIwMDowMCIKLWxheWVyIGF0ICg5NSwyNDEpIHNpemUgMTY1eDIzCi0gIFJlbmRlclNsaWRlciB7
SU5QVVR9IGF0ICg2LDgpIHNpemUgMTY1eDE2IFtjb2xvcj0jMzI4Q0RGXSBbYmdjb2xvcj0jRkZG
RkZGMTRdCi0gICAgUmVuZGVyQmxvY2sge0RJVn0gYXQgKDIsLTYpIHNpemUgOXgyOQorbGF5ZXIg
YXQgKDk2LDI0MCkgc2l6ZSAxNjN4MjQKKyAgUmVuZGVyU2xpZGVyIHtJTlBVVH0gYXQgKDcsNykg
c2l6ZSAxNjN4MTggW2NvbG9yPSMzMjhDREZdIFtiZ2NvbG9yPSNGRkZGRkYxNF0gW2JvcmRlcjog
KDFweCBzb2xpZCAjRkZGRkZGMzMpXQorICAgIFJlbmRlckJsb2NrIHtESVZ9IGF0ICgzLC01KSBz
aXplIDl4MjkKK2xheWVyIGF0ICgzMjUsMjMzKSBzaXplIDM0eDMyCisgIFJlbmRlckJ1dHRvbiB7
SU5QVVR9IGF0ICgyNjYsMCkgc2l6ZSAzNHgzMgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0CmluZGV4IGIxYzUwMGQuLmE5MGU0NjQg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRp
b25zLnR4dAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0
aW9ucy50eHQKQEAgLTc0Niw2OCArNzQ2LDU3IEBAIEJVRzI2NzM0IExJTlVYIE1BQyBTS0lQIDog
aHR0cC90ZXN0cy9pbnNwZWN0b3ItZW5hYmxlZCA9IFBBU1MKIEJVRzI2NzM0IFNLSVAgOiBpbnNw
ZWN0b3IvY29uc29sZS1mb3JtYXQtY29sbGVjdGlvbnMuaHRtbCA9IFRFWFQKIEJVRzI2NzM0IFNL
SVAgOiBpbnNwZWN0b3IvY29uc29sZS1mb3JtYXQuaHRtbCA9IFRFWFQKIAotLy8gVGhlc2UgdGVz
dHMgYXJlIGRpc2FibGVkIHVudGlsIDxhdWRpbz4gYW5kIDx2aWRlbz4gdGFncyBhcmUgc3VwcG9y
dGVkLgotLy8gRGlzYWJsZSA8dmlkZW8+IGFuZCA8YXVkaW8+IHRlc3RzIGZvciBtYWMgYW5kIGxp
bnV4IHVudGlsIHRoZXJlIGlzCi0vLyBwcm9wZXIgc3VwcG9ydC4KLUJVRzEzOTA3IDogZmFzdC9s
YXllcnMvdmlkZW8tbGF5ZXIuaHRtbCA9IEZBSUwKLUJVRzQzNjMgTElOVVggTUFDIFNLSVAgOiBm
YXN0L21lZGlhID0gUEFTUyBGQUlMCi1CVUc0MzYzIExJTlVYIE1BQyBTS0lQIDogaHR0cC90ZXN0
cy9zZWN1cml0eS9sb2NhbC12aWRlby1wb3N0ZXItZnJvbS1yZW1vdGUuaHRtbCA9IEZBSUwgVElN
RU9VVAotQlVHNDM2MyBMSU5VWCBNQUMgU0tJUCA6IGh0dHAvdGVzdHMvc2VjdXJpdHkvbG9jYWwt
dmlkZW8tc3JjLWZyb20tcmVtb3RlLmh0bWwgPSBQQVNTIEZBSUwKLUJVRzEzOTA3IFNLSVAgOiBo
dHRwL3Rlc3RzL3NlY3VyaXR5L2xvY2FsLXZpZGVvLXNvdXJjZS1mcm9tLXJlbW90ZS5odG1sID0g
RkFJTAotQlVHMTM5MDcgU0tJUCA6IGh0dHAvdGVzdHMvbWVkaWEgPSBGQUlMCisvLyBNZWRpYSBx
dWVyeSB0ZXN0cywgbmVlZCBiYXNlbGluZXMgZ2VuZXJhdGVkLgorLy8gTk9URTogVGhlc2UgYXJl
ICpub3QqIEhUTUwgYXVkaW8vdmlkZW8gbGF5b3V0IHRlc3RzIQorQlVHNDA1MDMgOiBmYXN0L21l
ZGlhID0gUEFTUyBGQUlMCiAKIC8vIExpbnV4IGRlYnVnIG1lZGlhIHRlc3RzIGhhdmUgc3B1cmlv
dXMgdGltZW91dHMgYW5kIGl0J3MgYW5ub3lpbmcuICBXZSBoYXZlIG5vIGlkZWEgd2h5LgogQlVH
MTM5MDcgQlVHMjUwOTQgTElOVVggREVCVUcgOiBtZWRpYSA9IFBBU1MgRkFJTCBUSU1FT1VUCiAK
LS8vIFRoZXNlIHRlc3RzIHNob3VsZCBiZSBwYXNzaW5nLiAgUmVtb3ZlIHRoZW0gb25jZSBjb25m
aXJtZWQgdGhleSdyZSBub3QgZmxha3kuCi1CVUc5Nzk4IEJVRzEzOTA3IFNMT1cgV0lOIExJTlVY
IDogbWVkaWEvdmlkZW8tcGxheWVkLWNvbGxhcHNlLmh0bWwgPSBQQVNTIEZBSUwKLUJVRzk3OTgg
QlVHMTM5MDcgU0xPVyBNQUMgOiBtZWRpYS92aWRlby1wbGF5ZWQtY29sbGFwc2UuaHRtbCA9IFBB
U1MKLQotLy8gV2Ugb3V0cHV0IGFuIGV4dHJhIHBsYXlpbmcgZXZlbnQgYW5kIHZpZGVvIGR1cmF0
aW9ucyBhcmUgZGlmZmVyZW50LgotQlVHMTM5MDcgU0tJUCA6IG1lZGlhL3ZpZGVvLWxvb3AuaHRt
bCA9IEZBSUwKLQotLy8gVGhpcyBvbmUgdGltZXMgb3V0IG9jY2FzaW9uYWxseS4KLUJVRzEzOTA3
IFdJTiBERUJVRyA6IG1lZGlhL3ZpZGVvLWxvYWQtbmV0d29ya1N0YXRlLmh0bWwgPSBQQVNTIFRJ
TUVPVVQKLUJVRzEzOTA3IFNMT1cgV0lOIFJFTEVBU0UgOiBtZWRpYS92aWRlby1sb2FkLW5ldHdv
cmtTdGF0ZS5odG1sID0gUEFTUwotCi0vLyBXZSBvY2Nhc2lvbmFsbHkgZmFpbCB0byBwZXJmb3Jt
IHRoZSB0aGlyZCBzZWVrLgotQlVHMTM5MDcgTElOVVggREVCVUcgOiBtZWRpYS92aWRlby1zZWVr
aW5nLmh0bWwgPSBQQVNTIEZBSUwKLQotLy8gU2Vla2luZyB0byA1MDBzIGNhdXNlcyB1cyB0byBz
ZWVrIHRvIDBzIGFuZCBjb250aW51ZSBwbGF5aW5nIChleHBlY3RlZCksIGJ1dCBXZWJLaXQgY2hl
Y2tzIHRvbyBmYXN0LgotLy8gVGhlIHRlc3QgdXNlcyBzZXRUaW1lb3V0KCkgYW5kIGlzIGZsYWt5
LgorLy8gVGhlc2UgdGVzdHMgbmVlZCB0byBiZSBjaGFuZ2VkIHRvIGJlIHBsYXRmb3JtIGluZGVw
ZW5kZW50LgorQlVHMTM5MDcgOiBodHRwL3Rlc3RzL21lZGlhL3JlbW92ZS13aGlsZS1sb2FkaW5n
Lmh0bWwgPSBUSU1FT1VUCitCVUcxMzkwNyA6IGh0dHAvdGVzdHMvbWVkaWEvdmlkZW8tcGxheS1z
dGFsbC1zZWVrLmh0bWwgPSBUSU1FT1VUCitCVUcxMzkwNyA6IGh0dHAvdGVzdHMvbWVkaWEvdmlk
ZW8tcGxheS1zdGFsbC5odG1sID0gVElNRU9VVAorQlVHMTM5MDcgOiBodHRwL3Rlc3RzL21lZGlh
L3ZpZGVvLXJlZmVyZXIuaHRtbCA9IFRJTUVPVVQKK0JVRzEzOTA3IDogaHR0cC90ZXN0cy9tZWRp
YS92aWRlby1zZWVrYWJsZS1zdGFsbC5odG1sID0gVElNRU9VVAorQlVHMTM5MDcgOiBodHRwL3Rl
c3RzL3NlY3VyaXR5L2xvY2FsLXZpZGVvLXBvc3Rlci1mcm9tLXJlbW90ZS5odG1sID0gUEFTUyBG
QUlMIFRJTUVPVVQKK0JVRzEzOTA3IDogaHR0cC90ZXN0cy9zZWN1cml0eS9sb2NhbC12aWRlby1z
b3VyY2UtZnJvbS1yZW1vdGUuaHRtbCA9IFBBU1MgRkFJTCBUSU1FT1VUCitCVUcxMzkwNyA6IGh0
dHAvdGVzdHMvc2VjdXJpdHkvbG9jYWwtdmlkZW8tc3JjLWZyb20tcmVtb3RlLmh0bWwgPSBQQVNT
IEZBSUwgVElNRU9VVAorQlVHMTM5MDcgOiBtZWRpYS92aWRlby1kaXNwbGF5LWFzcGVjdC1yYXRp
by5odG1sID0gUEFTUyBGQUlMIFRJTUVPVVQKK0JVRzEzOTA3IDogbWVkaWEvdmlkZW8tbG9vcC5o
dG1sID0gUEFTUyBGQUlMIFRJTUVPVVQKKworLy8gVGhlc2UgdGVzdHMgbmVlZCB0byBiZSBjaGFu
Z2VkIHRvIG5vdCByZWx5IG9uIHNldFRpbWVvdXQoKS4KK0JVRzEzOTA3IFNMT1cgV0lOIERFQlVH
IDogbWVkaWEvdmlkZW8tcGxheWVkLWNvbGxhcHNlLmh0bWwgPSBQQVNTIEZBSUwKIEJVRzEzOTA3
IDogbWVkaWEvdmlkZW8tc2Vlay1wYXN0LWVuZC1wbGF5aW5nLmh0bWwgPSBGQUlMCiAKIC8vIFdl
IHNvbWV0aW1lcyBlbWl0IGFuIGVycm9yIGZyb20gdGhlIHNhbWUgc291cmNlIGVsZW1lbnQgdHdp
Y2UuCi1CVUc5Nzk4IEJVRzEzOTA3IERFQlVHIDogbWVkaWEvdmlkZW8tc291cmNlLWVycm9yLmh0
bWwgPSBGQUlMIFBBU1MKLUJVRzk3OTggQlVHMTM5MDcgU0xPVyBXSU4gUkVMRUFTRSA6IG1lZGlh
L3ZpZGVvLXNvdXJjZS1lcnJvci5odG1sID0gRkFJTCBQQVNTCitCVUcxMzkwNyA6IG1lZGlhL3Zp
ZGVvLXNvdXJjZS1lcnJvci5odG1sID0gUEFTUyBGQUlMCiAKIC8vIEZhaWxpbmcgYmVjYXVzZSB3
ZSBzb21ldGltZXMgZW1pdCBhZGRpdGlvbmFsIHRpbWV1cGRhdGUgZXZlbnRzLgogLy8gVGVzdCBt
YXkgbmVlZCB0byBiZSByZXdyaXR0ZW4gb3Igb25seSBsb2cgdGhlIGZpcnN0IHRpbWV1cGRhdGUg
ZXZlbnQuCi1CVUcxMzkwNyBMSU5VWCBXSU4gOiBtZWRpYS9hdWRpby1kZWxldGUtd2hpbGUtc2xp
ZGVyLXRodW1iLWNsaWNrZWQuaHRtbCA9IFBBU1MgRkFJTAotQlVHMTM5MDcgTUFDIDogbWVkaWEv
YXVkaW8tZGVsZXRlLXdoaWxlLXNsaWRlci10aHVtYi1jbGlja2VkLmh0bWwgPSBGQUlMCitCVUcx
MzkwNyA6IG1lZGlhL2F1ZGlvLWRlbGV0ZS13aGlsZS1zbGlkZXItdGh1bWItY2xpY2tlZC5odG1s
ID0gUEFTUyBGQUlMCiAKIC8vIEZhaWxpbmcgYmVjYXVzZSB3ZSBzb21ldGltZXMgZW1pdCBhZGRp
dGlvbmFsIHRpbWV1cGRhdGUgZXZlbnRzLgogLy8gVGVzdCBtaWdodCBiZSBXT05URklYIGJlY2F1
c2Ugd2UgZG9uJ3QgZXhwb3J0IGEgc3RlcCBidXR0b24gaW4gdGhlIGZpcnN0IHBsYWNlLgogQlVH
MTM5MDcgQlVHMjUzNzUgU0tJUCA6IG1lZGlhL2F1ZGlvLWRlbGV0ZS13aGlsZS1zdGVwLWJ1dHRv
bi1jbGlja2VkLmh0bWwgPSBGQUlMCiAKIC8vIFNlZWtzIHRvIHRoZSBlbmQgb2YgZmlsZSwgd2hp
Y2ggcmVzdWx0cyBpbiBvZ2cgcGFja2V0cyB3aXRoIG5vIHRpbWVzdGFtcHMuCi1CVUcxMzkwNyBT
S0lQIDogbWVkaWEvZXZlbnQtYXR0cmlidXRlcy5odG1sID0gVElNRU9VVAorQlVHMTM5MDcgOiBt
ZWRpYS9ldmVudC1hdHRyaWJ1dGVzLmh0bWwgPSBQQVNTIEZBSUwgVElNRU9VVAogCiAvLyBUaGUg
bWVkaWEgdGltZSBkaXNwbGF5IGlzbid0IGFwcGVhcmluZy4KLUJVRzEzOTA3IFNLSVAgOiBtZWRp
YS92aWRlby16b29tLWNvbnRyb2xzLmh0bWwgPSBGQUlMCi0KLS8vIFRoZSB2aWRlbyBhcHBlYXJz
IGFzIGEgd2hpdGUgYm94IG9uIFdpbmRvd3MuCi1CVUcxMzkwNyBTS0lQIFdJTiA6IG1lZGlhL3Zp
ZGVvLXpvb20uaHRtbCA9IEZBSUwKK0JVRzEzOTA3IDogbWVkaWEvdmlkZW8tem9vbS1jb250cm9s
cy5odG1sID0gUEFTUyBGQUlMIFRJTUVPVVQKIAogLy8gVmlkZW8gaGFzIGEgZ3JlZW4gYmFja2dy
b3VuZCwgcHJvYmFibHkgZHVlIHRvIE1hYyByZXBhaW50IGRlYnVnZ2luZyBjb2RlLgorLy8gT24g
V2luZG93cyBhbmQgTGludXggdGhlIHNsaWRlciBjb250cm9sIG9jY2FzaW9uYWxseSBpc24ndCBy
ZW5kZXJlZC4KIEJVRzEzOTA3IEJVRzI1Mzc2IE1BQyBERUJVRyA6IG1lZGlhL3ZpZGVvLWVtcHR5
LXNvdXJjZS5odG1sID0gRkFJTAorQlVHMTM5MDcgV0lOIExJTlVYIDogbWVkaWEvdmlkZW8tZW1w
dHktc291cmNlLmh0bWwgPSBJTUFHRSBQQVNTCiAKIC8vIFRoZSBtZWRpYSB0aW1lIGRpc3BsYXkg
aXMgZ2V0dGluZyBzdHlsZWQgd2hlbiBpdCBzaG91bGRuJ3QgYmUuCiBCVUcxMzkwNyA6IG1lZGlh
L2NvbnRyb2xzLXN0eWxpbmcuaHRtbCA9IEZBSUwKIAogLy8gVGhlc2UgdGVzdHMgYXJlIGZsYWt5
IHdpdGggc3VidGxlIHBpeGVsIGRpZmZlcmVuY2VzLgotQlVHOTc5OCBCVUcxMzkwNyBMSU5VWCBN
QUMgOiBtZWRpYS92aWRlby10cmFuc2Zvcm1lZC5odG1sID0gSU1BR0UgUEFTUwotQlVHOTc5OCBC
VUcxMzkwNyBMSU5VWCBNQUMgOiBtZWRpYS92aWRlby1sYXllci1jcmFzaC5odG1sID0gSU1BR0Ug
UEFTUworQlVHMTM5MDcgTElOVVggTUFDIDogbWVkaWEvdmlkZW8tdHJhbnNmb3JtZWQuaHRtbCA9
IElNQUdFIFBBU1MKK0JVRzEzOTA3IExJTlVYIE1BQyA6IG1lZGlhL3ZpZGVvLWxheWVyLWNyYXNo
Lmh0bWwgPSBJTUFHRSBQQVNTCiAKIC8vIFRoZXNlIHRlc3RzIGFyZSBmYWlsaW5nIGJlY2F1c2Ug
dGhleSB1c2UgcG9zaXRpb24tZGVwZW5kZW50IG1vdXNlIGNsaWNrcy4KIEJVRzEzOTA3IEJVRzI1
Mzc1IDogbWVkaWEvdmlkZW8tY29udHJvbHMtdHJhbnNmb3JtZWQuaHRtbCA9IEZBSUwKQEAgLTgx
OSw5ICs4MDgsNiBAQCBCVUcxNjc3OSBXT05URklYIFNLSVAgOiBtZWRpYS9hdWRpby1tcGVnLXN1
cHBvcnRlZC5odG1sID0gRkFJTCBUSU1FT1VUCiBCVUcxNjc3OSBXT05URklYIFNLSVAgOiBtZWRp
YS9hdWRpby1kYXRhLXVybC5odG1sID0gRkFJTCBUSU1FT1VUCiBCVUcxNjc3OSBXT05URklYIFNL
SVAgOiBtZWRpYS92aWRlby1zaXplLWludHJpbnNpYy1zY2FsZS5odG1sID0gRkFJTCBUSU1FT1VU
CiAKLS8vIFNraXBwZWQgdG8gcmVkdWNlIGNyYXNoaW5lc3MgZHVyaW5nIGEgdGVzdCBydW4uCi1C
VUczODQ0NCBTS0lQIDogbWVkaWEvdmlkZW8tYXBwZW5kLXNvdXJjZS5odG1sID0gQ1JBU0ggUEFT
UyBUSU1FT1VUCi0KIC8vIFdlIGhhdmVuJ3QgaW1wbGVtZW50ZWQgdGhlIFdlYktpdCBmdWxsc2Ny
ZWVuIGV4dGVuc2lvbi4KIEJVRzE2NzM1IDogbWVkaWEvbWVkaWEtZnVsbHNjcmVlbi1pbmxpbmUu
aHRtbCA9IFRJTUVPVVQKIEJVRzE2NzM1IDogbWVkaWEvbWVkaWEtZnVsbHNjcmVlbi1ub3QtaW4t
ZG9jdW1lbnQuaHRtbCA9IFRJTUVPVVQKQEAgLTgzMyw0MCArODE5LDI2IEBAIEJVRzI4MzAxIDog
bWVkaWEvbWVkaWEtY2FwdGlvbnMuaHRtbCA9IFRJTUVPVVQKIEJVRzMzMDk5IDogbWVkaWEvdmlk
ZW8tcmV2ZXJzZS1wbGF5LWR1cmF0aW9uLmh0bWwgPSBUSU1FT1VUCiBCVUczMzA5OSA6IG1lZGlh
L3ZpZGVvLXRpbWV1cGRhdGUtcmV2ZXJzZS1wbGF5Lmh0bWwgPSBUSU1FT1VUCiAKLS8vIEZGbXBl
ZyByb2xsIGJyZWFrcyB0aGVzZQotQlVHMzU0OTIgTUFDIExJTlVYIDogbWVkaWEvdmlkZW8tcGxh
eWVkLXJhbmdlcy0xLmh0bWwgPSBGQUlMIFBBU1MKLUJVRzM1NDkyIDogbWVkaWEvdmlkZW8tcGxh
eWVkLXJlc2V0Lmh0bWwgPSBGQUlMCi1CVUczNTQ5MiA6IG1lZGlhL3ZpZGVvLWRpc3BsYXktdG9n
Z2xlLmh0bWwgPSBDUkFTSCBGQUlMIFBBU1MKLUJVRzM1NDkyIDogbWVkaWEvY29udHJvbHMtZHJh
Zy10aW1lYmFyLmh0bWwgPSBGQUlMIFRJTUVPVVQKKy8vIFdlIGhhdmVuJ3QgaW1wbGVtZW50ZWQg
dmlkZW8gcHJlbG9hZGluZyBhbmQgaXQgcGFzc2luZyBpcyBhIGZhbHNlIHBvc2l0aXZlLgorQlVH
MTY0ODIgOiBtZWRpYS92aWRlby1wcmVsb2FkLmh0bWwgPSBQQVNTIEZBSUwKKworLy8gVXBkYXRp
bmcgRkZtcGVnIGJyb2tlIHRoZXNlIHRlc3RzLiAgVGhleSBhbGwgZG8gc29tZSBmb3JtIG9mIHNl
ZWtpbmcgc28KKy8vIG91ciBodW5jaCBpcyB3ZSBuZWVkIHRoZSBWUDMgc2Vla2luZyBwYXRjaCBy
ZS1hcHBsaWVkLgorQlVHMzU0OTIgOiBtZWRpYS9jb250cm9scy1kcmFnLXRpbWViYXIuaHRtbCA9
IEZBSUwKIEJVRzM1NDkyIDogbWVkaWEvdmlkZW8tY3VycmVudFRpbWUtc2V0Lmh0bWwgPSBGQUlM
IFRJTUVPVVQKLS8vIFByZXZpb3VzIHRvIEZGbXBlZyByb2xsIGV4cGVjdGF0aW9ucwotLy9CVUc5
Nzk4IEJVRzEzOTA3IFNMT1cgTElOVVggTUFDIFJFTEVBU0UgOiBtZWRpYS92aWRlby1wbGF5ZWQt
cmFuZ2VzLTEuaHRtbCA9IEZBSUwKLS8vQlVHOTc5OCBCVUcxMzkwNyBTTE9XIFdJTiBSRUxFQVNF
IDogbWVkaWEvdmlkZW8tcGxheWVkLXJhbmdlcy0xLmh0bWwgPSBGQUlMCi0vL0JVRzk3OTggQlVH
MTM5MDcgV0lOIERFQlVHIDogbWVkaWEvY29udHJvbHMtZHJhZy10aW1lYmFyLmh0bWwgPSBURVhU
IFRJTUVPVVQKLS8vQlVHOTc5OCBCVUcxMzkwNyBSRUxFQVNFIDogbWVkaWEvY29udHJvbHMtZHJh
Zy10aW1lYmFyLmh0bWwgPSBURVhUCi0vL0JVRzk3OTggQlVHMTM5MDcgTElOVVggTUFDIERFQlVH
IDogbWVkaWEvY29udHJvbHMtZHJhZy10aW1lYmFyLmh0bWwgPSBURVhUCi0vL0JVRzk3OTggQlVH
MTM5MDcgU0xPVyBXSU4gUkVMRUFTRSA6IG1lZGlhL3ZpZGVvLXBsYXllZC1yYW5nZXMtMS5odG1s
ID0gUEFTUyBGQUlMCi0vL0JVRzk3OTggQlVHMTM5MDcgU0xPVyBNQUMgV0lOIFJFTEVBU0UgOiBt
ZWRpYS92aWRlby1wbGF5ZWQtcmVzZXQuaHRtbCA9IFBBU1MKLS8vQlVHOTc5OCBCVUcxMzkwNyBT
TE9XIExJTlVYIERFQlVHIDogbWVkaWEvdmlkZW8tcGxheWVkLXJlc2V0Lmh0bWwgPSBQQVNTCi0v
L0JVRzk3OTggQlVHMTM5MDcgOiBtZWRpYS92aWRlby1jdXJyZW50VGltZS1zZXQuaHRtbCA9IFBB
U1MgRkFJTAotCi0vLyBUaGUgdGVzdCB3YXMgYWRkZWQgaW4gV2ViS2l0IHI1NDc2NiBhbmQgdGlt
ZW91dHMgaW4gQ2hyb21pdW0uCi1CVUcxMzkwNyA6IG1lZGlhL3ZpZGVvLWRpc3BsYXktYXNwZWN0
LXJhdGlvLmh0bWwgPSBUSU1FT1VUIFBBU1MKLQotLy8gTm90IGtub3duIHdoZW4gdGhlc2Ugc3Rh
cnRlZCBmYWlsaW5nLgotQlVHOTc5OCBXSU4gREVCVUcgOiBtZWRpYS92aWRlby1lbXB0eS1zb3Vy
Y2UuaHRtbCA9IElNQUdFIFBBU1MKLUJVRzI5NzQ4IExJTlVYIDogbWVkaWEvdmlkZW8tY29udHJv
bHMtcmVuZGVyaW5nLmh0bWwgPSBJTUFHRQotQlVHMzU4NTggTUFDIExJTlVYIERFQlVHIDogbWVk
aWEvcmVtb3ZlLWZyb20tZG9jdW1lbnQuaHRtbCA9IENSQVNIIFBBU1MKLUJVRzM1ODU4IE1BQyBS
RUxFQVNFIDogbWVkaWEvcmVtb3ZlLWZyb20tZG9jdW1lbnQuaHRtbCA9IENSQVNIIFBBU1MgVElN
RU9VVAotQlVHMzU4NTggTUFDIDogbWVkaWEvdmlkZW8tc291cmNlLmh0bWwgPSBDUkFTSCBQQVNT
Ci1CVUczNTg1OCBMSU5VWCBERUJVRyA6IG1lZGlhL3ZpZGVvLXNvdXJjZS5odG1sID0gQ1JBU0gg
UEFTUwotQlVHMzU4NTggTUFDIExJTlVYIDogbWVkaWEvdmlkZW8tc291cmNlLXR5cGUuaHRtbCA9
IENSQVNIIFBBU1MKLUJVRzM1ODU4IE1BQyA6IG1lZGlhL3ZpZGVvLXNyYy5odG1sID0gQ1JBU0gg
UEFTUwotQlVHMzU4NTggTUFDIDogbWVkaWEvdmlkZW8tc3JjLXNvdXJjZS5odG1sID0gQ1JBU0gg
UEFTUwotQlVHMzU4NTggTUFDIDogbWVkaWEvdmlkZW8tdGltZXVwZGF0ZS1kdXJpbmctcGxheWJh
Y2suaHRtbCA9IENSQVNIIFBBU1MKLUJVRzM3NzEwIE1BQyBTS0lQIDogbWVkaWEvdmlkZW8tc3Jj
LWNoYW5nZS5odG1sID0gQ1JBU0ggUEFTUyAKLUJVRzM1OTIyIDogbWVkaWEvdmlkZW8tcmVwbGFj
ZXMtcG9zdGVyLmh0bWwgPSBJTUFHRQotQlVHMzc4OTYgOiBtZWRpYS92aWRlby1wcmVsb2FkLmh0
bWwgPSBURVhUCitCVUczNTQ5MiA6IG1lZGlhL3ZpZGVvLXJlcGxhY2VzLXBvc3Rlci5odG1sID0g
SU1BR0UKK0JVRzM1NDkyIDogbWVkaWEvdmlkZW8tcGxheWVkLXJlc2V0Lmh0bWwgPSBGQUlMCisK
Ky8vIFRoZXNlIGNyYXNoIGEgdG9uIG9uIE1hYy4gIFdlIGhhdmUgYSBmaXggYXJyaXZpbmcgc28g
d2UndmUgcmVtb3ZlZCBTS0lQLgorQlVHMzU4NTggTUFDIDogbWVkaWEvcmVtb3ZlLWZyb20tZG9j
dW1lbnQuaHRtbCA9IENSQVNIIFBBU1MgVElNRU9VVAorQlVHMzU4NTggTUFDIDogbWVkaWEvdmlk
ZW8tYXBwZW5kLXNvdXJjZS5odG1sID0gQ1JBU0ggUEFTUyBUSU1FT1VUCitCVUczNTg1OCBNQUMg
OiBtZWRpYS92aWRlby1kaXNwbGF5LXRvZ2dsZS5odG1sID0gQ1JBU0ggUEFTUyBUSU1FT1VUCitC
VUczNTg1OCBNQUMgOiBtZWRpYS92aWRlby1zb3VyY2UuaHRtbCA9IENSQVNIIFBBU1MgVElNRU9V
VAorQlVHMzU4NTggTUFDIDogbWVkaWEvdmlkZW8tc291cmNlLXR5cGUuaHRtbCA9IENSQVNIIFBB
U1MgVElNRU9VVAorQlVHMzU4NTggTUFDIDogbWVkaWEvdmlkZW8tc3JjLmh0bWwgPSBDUkFTSCBQ
QVNTIFRJTUVPVVQKK0JVRzM1ODU4IE1BQyA6IG1lZGlhL3ZpZGVvLXNyYy1jaGFuZ2UuaHRtbCA9
IENSQVNIIFBBU1MgVElNRU9VVAorQlVHMzU4NTggTUFDIDogbWVkaWEvdmlkZW8tc3JjLXNvdXJj
ZS5odG1sID0gQ1JBU0ggUEFTUyBUSU1FT1VUCitCVUczNTg1OCBNQUMgOiBtZWRpYS92aWRlby10
aW1ldXBkYXRlLWR1cmluZy1wbGF5YmFjay5odG1sID0gQ1JBU0ggUEFTUyBUSU1FT1VUCiAKIC8v
IEZ1bmN0aW9uIGFyZ3VtZW50cyBvYmplY3QgaXMgY29waWVkIGZvciBlYWNoIGFjY2Vzcy4KIEJV
RzI0MTk0IDogZmFzdC9qcy9rZGUvZnVuY3Rpb25fYXJndW1lbnRzLmh0bWwgPSBGQUlMCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvU2tpcHBlZCBiL0xheW91dFRlc3RzL3Bs
YXRmb3JtL21hYy9Ta2lwcGVkCmluZGV4IGE2MWFkMjEuLjc2OWZhYzQgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL3BsYXRmb3JtL21hYy9Ta2lwcGVkCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3Jt
L21hYy9Ta2lwcGVkCkBAIC0xNTEsOCArMTUxLDMgQEAgZmFzdC9tZWRpYS9tZWRpYS1mZWF0dXJl
LXdndC12aWV3LW1vZGUuaHRtbAogIyBUZXN0IGlzIGZsYWt5IGFuZCB0aHVzIG5vdCB1c2VmdWwg
dW50aWwgZml4ZWQuCiAjIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0z
NjY0MgogZmFzdC9yZXBsYWNlZC9ib3JkZXItcmFkaXVzLWNsaXAuaHRtbAotCi0jIFRoaXMgdGVz
dCBpcyB2ZXJ5IGZsYWt5IHdpdGggYSBoaWdoIGZhaWx1cmUgcmF0ZSAoYXJvdW5kIDI1JSkuCi0j
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNjY0NgotZmFzdC93b3Jr
ZXJzL3dvcmtlci10ZXJtaW5hdGUuaHRtbAotCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9hcmVhLXdpdGgtYXJpYS1sYWJlbC1leHBlY3RlZC50eHQg
Yi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9hcmVhLXdpdGgtYXJpYS1s
YWJlbC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE2
ZjYyZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nlc3Np
YmlsaXR5L2FyZWEtd2l0aC1hcmlhLWxhYmVsLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEyIEBA
CisgCitUaGlzIHRlc3RzIHRoYXQgYXJpYS1sYWJlbCB3b3JrcyBvbiBhcmVhIGVsZW1lbnRzLgor
CitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBm
b2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBhY2Nlc3NpYmlsaXR5Q29udHJv
bGxlci5mb2N1c2VkRWxlbWVudC5kZXNjcmlwdGlvbiBpcyAnQVhEZXNjcmlwdGlvbjogUHJldmlv
dXMnCitQQVNTIGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmZvY3VzZWRFbGVtZW50LmRlc2NyaXB0
aW9uIGlzICdBWERlc2NyaXB0aW9uOiBOZXh0JworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMg
dHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3Jt
L21hYy9hY2Nlc3NpYmlsaXR5L2FyZWEtd2l0aC1hcmlhLWxhYmVsLmh0bWwgYi9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9hcmVhLXdpdGgtYXJpYS1sYWJlbC5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyN2VhMjcKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9hcmVhLXdpdGgtYXJp
YS1sYWJlbC5odG1sCkBAIC0wLDAgKzEsMzkgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8v
SUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hl
ZXQiIGhyZWY9Ii4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4K
KzxzY3JpcHQ+Cit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gZmFsc2U7Cis8L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSIuLi8uLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9z
Y3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBpZD0iYm9keSI+CisKKzxtYXAgbmFtZT0iZm9yd2FyZGJh
Y2t3YXJkIj4KKyAgPGFyZWEgaWQ9ImJ0bl9wcmV2IiByb2xlPSJidXR0b24iIGFsdD0iIiB0YWJp
bmRleD0iMCIgYXJpYS1sYWJlbD0iUHJldmlvdXMiIHNoYXBlPSJyZWN0IiBjb29yZHM9IjIsMzUs
MjEsNDciIGhyZWY9IiMiPgorICA8YXJlYSBpZD0iYnRuX25leHQiIHJvbGU9ImJ1dHRvbiIgYWx0
PSIiIHRhYmluZGV4PSIwIiBhcmlhLWxhYmVsPSJOZXh0IiBzaGFwZT0icmVjdCIgY29vcmRzPSI1
NiwzNSw3NSw0NyIgaHJlZj0iIyI+Cis8L21hcD4KKzxpbWcgaWQ9ImZiIiBzcmM9IiMiIGJvcmRl
cj0iMSIgd2lkdGg9Ijc2IiBoZWlnaHQ9Ijc2IiB1c2VtYXA9IiNmb3J3YXJkYmFja3dhcmQiIGFs
dD0iIj4KKworPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rp
dj4KKworPHNjcmlwdD4KKworICAgIGRlc2NyaXB0aW9uKCJUaGlzIHRlc3RzIHRoYXQgYXJpYS1s
YWJlbCB3b3JrcyBvbiBhcmVhIGVsZW1lbnRzLiIpOworCisgICAgaWYgKHdpbmRvdy5hY2Nlc3Np
YmlsaXR5Q29udHJvbGxlcikgeworCisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJi
dG5fcHJldiIpLmZvY3VzKCk7CisgICAgICAgIHNob3VsZEJlKCJhY2Nlc3NpYmlsaXR5Q29udHJv
bGxlci5mb2N1c2VkRWxlbWVudC5kZXNjcmlwdGlvbiIsICInQVhEZXNjcmlwdGlvbjogUHJldmlv
dXMnIik7CisKKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJ0bl9uZXh0IikuZm9j
dXMoKTsKKyAgICAgICAgc2hvdWxkQmUoImFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmZvY3VzZWRF
bGVtZW50LmRlc2NyaXB0aW9uIiwgIidBWERlc2NyaXB0aW9uOiBOZXh0JyIpOworICAgIH0KKwor
ICAgIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Cis8L3NjcmlwdD4KKworPHNjcmlwdCBzcmM9
Ii4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8
L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFz
dC9yZXBhaW50L3N0YWNrZWQtZGlhY3JpdGljcy1leHBlY3RlZC5jaGVja3N1bSBiL0xheW91dFRl
c3RzL3BsYXRmb3JtL21hYy9mYXN0L3JlcGFpbnQvc3RhY2tlZC1kaWFjcml0aWNzLWV4cGVjdGVk
LmNoZWNrc3VtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxYTBhZDIKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9yZXBhaW50L3N0
YWNrZWQtZGlhY3JpdGljcy1leHBlY3RlZC5jaGVja3N1bQpAQCAtMCwwICsxIEBACitjZTliZTg2
Y2ZiOTQzM2E2NGZjNjVmODcxMGIwMjA1NgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L3JlcGFpbnQvc3RhY2tlZC1k
aWFjcml0aWNzLWV4cGVjdGVkLnBuZyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L3Jl
cGFpbnQvc3RhY2tlZC1kaWFjcml0aWNzLWV4cGVjdGVkLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi4wNGY5YzBkCkJpbmFyeSBmaWxlcyAvZGV2L251bGwgYW5kIGIvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3QvcmVwYWludC9zdGFja2VkLWRpYWNyaXRpY3MtZXhw
ZWN0ZWQucG5nIGRpZmZlcgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zh
c3QvcmVwYWludC9zdGFja2VkLWRpYWNyaXRpY3MtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vbWFjL2Zhc3QvcmVwYWludC9zdGFja2VkLWRpYWNyaXRpY3MtZXhwZWN0ZWQudHh0
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwZTQzZmMKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9yZXBhaW50L3N0YWNrZWQtZGlh
Y3JpdGljcy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwzNSBAQAorbGF5ZXIgYXQgKDAsMCkgc2l6
ZSA4MDB4NjAwCisgIFJlbmRlclZpZXcgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCitsYXllciBhdCAo
MCwwKSBzaXplIDgwMHgzMTYKKyAgUmVuZGVyQmxvY2sge0hUTUx9IGF0ICgwLDApIHNpemUgODAw
eDMxNgorICAgIFJlbmRlckJvZHkge0JPRFl9IGF0ICg4LDE2KSBzaXplIDc4NHgyOTIKKyAgICAg
IFJlbmRlckJsb2NrIHtQfSBhdCAoMCwwKSBzaXplIDc4NHgzNgorICAgICAgICBSZW5kZXJJbmxp
bmUge0J9IGF0ICgwLDApIHNpemUgNjJ4MTgKKyAgICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0g
YXQgKDAsMCkgc2l6ZSA2MngxOAorICAgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGgg
NjI6ICJCVUcgSUQ6IgorICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDYyLDApIHNpemUg
NHgxOAorICAgICAgICAgIHRleHQgcnVuIGF0ICg2MiwwKSB3aWR0aCA0OiAiICIKKyAgICAgICAg
UmVuZGVySW5saW5lIHtBfSBhdCAoMCwwKSBzaXplIDExN3gxOCBbY29sb3I9IzAwMDBFRV0KKyAg
ICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDY2LDApIHNpemUgMTE3eDE4CisgICAgICAg
ICAgICB0ZXh0IHJ1biBhdCAoNjYsMCkgd2lkdGggMTE3OiAiQnVnemlsbGEgYnVnIDYyNzQiCisg
ICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMTgzLDApIHNpemUgNzc3eDM2CisgICAgICAg
ICAgdGV4dCBydW4gYXQgKDE4MywwKSB3aWR0aCA1OTQ6ICJUZXh0IHJlcGFpbnRpbmcgZG9lcyBu
b3QgYWNjb3VudCBmb3IgZ2x5cGhzIHdoaWNoIGRyYXcgb3V0c2lkZSB0aGUgdHlwb2dyYXBoaWMg
Ym91bmRzIG9mIHRoZSIKKyAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwxOCkgd2lkdGggMjk6ICJm
b250LiIKKyAgICAgIFJlbmRlckJsb2NrIHtQfSBhdCAoMCw1Mikgc2l6ZSA3ODR4MjQgW2JnY29s
b3I9Izk4RkI5OF0KKyAgICAgICAgUmVuZGVySW5saW5lIHtCfSBhdCAoMCwwKSBzaXplIDkxeDE4
CisgICAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgzLDMpIHNpemUgOTF4MTgKKyAgICAg
ICAgICAgIHRleHQgcnVuIGF0ICgzLDMpIHdpZHRoIDkxOiAiVEVTVCBQQVNTOiIKKyAgICAgICAg
UmVuZGVyVGV4dCB7I3RleHR9IGF0ICg5NCwzKSBzaXplIDIwM3gxOAorICAgICAgICAgIHRleHQg
cnVuIGF0ICg5NCwzKSB3aWR0aCA0OiAiICIKKyAgICAgICAgICB0ZXh0IHJ1biBhdCAoOTgsMykg
d2lkdGggMTk5OiAiVGhlIHRleHQgd2lsbCBlbnRpcmVseSBkaXNhcHBlYXIuIgorICAgICAgUmVu
ZGVyQmxvY2sge1B9IGF0ICgwLDkyKSBzaXplIDc4NHgyNCBbYmdjb2xvcj0jRkYzMzAwXQorICAg
ICAgICBSZW5kZXJJbmxpbmUge0J9IGF0ICgwLDApIHNpemUgOTB4MTgKKyAgICAgICAgICBSZW5k
ZXJUZXh0IHsjdGV4dH0gYXQgKDMsMykgc2l6ZSA5MHgxOAorICAgICAgICAgICAgdGV4dCBydW4g
YXQgKDMsMykgd2lkdGggOTA6ICJURVNUIEZBSUw6IgorICAgICAgICBSZW5kZXJUZXh0IHsjdGV4
dH0gYXQgKDkzLDMpIHNpemUgNTYxeDE4CisgICAgICAgICAgdGV4dCBydW4gYXQgKDkzLDMpIHdp
ZHRoIDQ6ICIgIgorICAgICAgICAgIHRleHQgcnVuIGF0ICg5NywzKSB3aWR0aCA1NTc6ICJNb3N0
IG9mIHRoZSB0ZXh0IHdpbGwgYmUgZ29uZSwgYnV0IHNvbWUgYXJ0aWZhY3RzIHdpbGwgYmUgbGVm
dCBiZWhpbmQgYXQgdGhlIHRvcCBvZiB0aGUgcGFnZS4iCisgICAgICBSZW5kZXJCbG9jayB7RElW
fSBhdCAoMCwxMzIpIHNpemUgMjIyeDE0MiBbYm9yZGVyOiAoMXB4IHNvbGlkICMwMDAwRkYpXQor
ICAgICAgICBSZW5kZXJCbG9jayB7RElWfSBhdCAoMTEsMTEpIHNpemUgMjAweDAKKyAgICAgIFJl
bmRlckJsb2NrIChhbm9ueW1vdXMpIGF0ICgwLDI3NCkgc2l6ZSA3ODR4MTgKKyAgICAgICAgUmVu
ZGVyQlIge0JSfSBhdCAoMCwwKSBzaXplIDB4MTgKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3Bs
YXRmb3JtL3F0L1NraXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9Ta2lwcGVkCmluZGV4
IGYwZWMzOGYuLjBmZTc0OGYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L1Nr
aXBwZWQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvU2tpcHBlZApAQCAtMjMsMTAgKzIz
LDYgQEAgaHR0cC90ZXN0cy93bWwKIAogIyBTa2lwIGZhaWxlZCBhcHBjYWNoZSB0ZXN0IGNhc2Vz
CiBodHRwL3Rlc3RzL2FwcGNhY2hlL2F1dGguaHRtbAotaHR0cC90ZXN0cy9hcHBjYWNoZS9mYWxs
YmFjay5odG1sCi1odHRwL3Rlc3RzL2FwcGNhY2hlL21hbmlmZXN0LXJlZGlyZWN0LTIuaHRtbAot
aHR0cC90ZXN0cy9hcHBjYWNoZS9vZmZsaW5lLWFjY2Vzcy5odG1sCi1odHRwL3Rlc3RzL2FwcGNh
Y2hlL3Jlc291cmNlLXJlZGlyZWN0LTIuaHRtbAogCiAjIEZhaWxpbmcgVVJMIHRlc3QKIGh0dHAv
dGVzdHMvdXJpL2VzY2FwZWQtZW50aXR5Lmh0bWwKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3Bs
YXRmb3JtL3dpbi9lZGl0aW5nL2luc2VydGluZy9icmVhay1ibG9ja3F1b3RlLWFmdGVyLWRlbGV0
ZS1leHBlY3RlZC5jaGVja3N1bSBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9lZGl0aW5nL2lu
c2VydGluZy9icmVhay1ibG9ja3F1b3RlLWFmdGVyLWRlbGV0ZS1leHBlY3RlZC5jaGVja3N1bQpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzlkNWY3Ci0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL2VkaXRpbmcvaW5zZXJ0aW5nL2JyZWFrLWJs
b2NrcXVvdGUtYWZ0ZXItZGVsZXRlLWV4cGVjdGVkLmNoZWNrc3VtCkBAIC0wLDAgKzEgQEAKKzg3
ZDQyMzk0YzYyZDY2YzVlMTU4N2ZkNGU3ZGMyMGQ5ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmls
ZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL2VkaXRpbmcvaW5zZXJ0aW5n
L2JyZWFrLWJsb2NrcXVvdGUtYWZ0ZXItZGVsZXRlLWV4cGVjdGVkLnBuZyBiL0xheW91dFRlc3Rz
L3BsYXRmb3JtL3dpbi9lZGl0aW5nL2luc2VydGluZy9icmVhay1ibG9ja3F1b3RlLWFmdGVyLWRl
bGV0ZS1leHBlY3RlZC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDBj
MjZiYgpCaW5hcnkgZmlsZXMgL2Rldi9udWxsIGFuZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dp
bi9lZGl0aW5nL2luc2VydGluZy9icmVhay1ibG9ja3F1b3RlLWFmdGVyLWRlbGV0ZS1leHBlY3Rl
ZC5wbmcgZGlmZmVyCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vZWRpdGlu
Zy9pbnNlcnRpbmcvYnJlYWstYmxvY2txdW90ZS1hZnRlci1kZWxldGUtZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL2VkaXRpbmcvaW5zZXJ0aW5nL2JyZWFrLWJsb2NrcXVv
dGUtYWZ0ZXItZGVsZXRlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi44ZTc2ZWFjCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
d2luL2VkaXRpbmcvaW5zZXJ0aW5nL2JyZWFrLWJsb2NrcXVvdGUtYWZ0ZXItZGVsZXRlLWV4cGVj
dGVkLnR4dApAQCAtMCwwICsxLDI0IEBACitsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAg
UmVuZGVyVmlldyBhdCAoMCwwKSBzaXplIDgwMHg2MDAKK2xheWVyIGF0ICgwLDApIHNpemUgODAw
eDYwMAorICBSZW5kZXJCbG9jayB7SFRNTH0gYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgICAgUmVu
ZGVyQm9keSB7Qk9EWX0gYXQgKDgsOCkgc2l6ZSA3ODR4NTg0CisgICAgICBSZW5kZXJCbG9jayAo
YW5vbnltb3VzKSBhdCAoMCwwKSBzaXplIDc4NHgzNgorICAgICAgICBSZW5kZXJUZXh0IHsjdGV4
dH0gYXQgKDAsMCkgc2l6ZSA3NTl4MTgKKyAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0
aCA3NTk6ICJUaGlzIHRlc3RzIHRoYXQgdGhlIGJsb2NrcXVvdGUncyB0eXBpbmcgc3R5bGUgZG9l
c24ndCByZW1haW4gYWZ0ZXIgYnJlYWtpbmcgdGhlIGJsb2NrcXVvdGUgYW5kIHR5cGluZyBpbiB0
aGUgdW5xdW90ZWQgYXJlYS4iCisgICAgICAgIFJlbmRlckJSIHtCUn0gYXQgKDc1OSwxNCkgc2l6
ZSAweDAKKyAgICAgICAgUmVuZGVyQlIge0JSfSBhdCAoMCwxOCkgc2l6ZSAweDE4CisgICAgICBS
ZW5kZXJCbG9jayB7RElWfSBhdCAoMCwzNikgc2l6ZSA3ODR4NTQKKyAgICAgICAgUmVuZGVyQmxv
Y2sge0JMT0NLUVVPVEV9IGF0ICgwLDApIHNpemUgNzg0eDE4IFtjb2xvcj0jMDAwMEZGXSBbYm9y
ZGVyOiAoMnB4IHNvbGlkICMwMDAwRkYpXQorICAgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBh
dCAoMTIsMCkgc2l6ZSAyN3gxOAorICAgICAgICAgICAgdGV4dCBydW4gYXQgKDEyLDApIHdpZHRo
IDI3OiAiYmx1ZSIKKyAgICAgICAgUmVuZGVyQmxvY2sgKGFub255bW91cykgYXQgKDAsMTgpIHNp
emUgNzg0eDE4CisgICAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgMzR4
MTgKKyAgICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDM0OiAiYmxhY2siCisgICAg
ICAgICAgUmVuZGVyQlIge0JSfSBhdCAoMzQsMTQpIHNpemUgMHgwCisgICAgICAgIFJlbmRlckJs
b2NrIHtCTE9DS1FVT1RFfSBhdCAoMCwzNikgc2l6ZSA3ODR4MTggW2NvbG9yPSMwMDAwRkZdIFti
b3JkZXI6ICgycHggc29saWQgIzAwMDBGRildCisgICAgICAgICAgUmVuZGVyQmxvY2sge0RJVn0g
YXQgKDEyLDApIHNpemUgNzcyeDE4CisgICAgICAgICAgICBSZW5kZXJCbG9jayB7QkxPQ0tRVU9U
RX0gYXQgKDAsMCkgc2l6ZSA3NzJ4MTggW2NvbG9yPSMwMDgwMDBdIFtib3JkZXI6IG5vbmUgKDJw
eCBzb2xpZCAjMDA4MDAwKV0KKyAgICAgICAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgx
MiwwKSBzaXplIDM1eDE4CisgICAgICAgICAgICAgICAgdGV4dCBydW4gYXQgKDEyLDApIHdpZHRo
IDM1OiAiZ3JlZW4iCitjYXJldDogcG9zaXRpb24gNSBvZiBjaGlsZCAyIHsjdGV4dH0gb2YgY2hp
bGQgNCB7RElWfSBvZiBjaGlsZCAxIHtCT0RZfSBvZiBjaGlsZCAwIHtIVE1MfSBvZiBkb2N1bWVu
dApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1lbmQtZXZl
bnQtaGVscGVycy5qcyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24tZW5kLWV2
ZW50LWhlbHBlcnMuanMKaW5kZXggNWFmZWUzNC4uYWI2YWY5ZCAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1lbmQtZXZlbnQtaGVscGVycy5qcworKysgYi9M
YXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2l0aW9uLWVuZC1ldmVudC1oZWxwZXJzLmpzCkBA
IC0xMzQsMTIgKzEzNCwxMyBAQCBmdW5jdGlvbiBydW5UcmFuc2l0aW9uVGVzdChleHBlY3RlZCwg
Y2FsbGJhY2spCiAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKICAg
fQogCi0gIGZ1bmN0aW9uIHN0YXJ0VGVzdChleHBlY3RlZCwgY2FsbGJhY2spCisgIGZ1bmN0aW9u
IHN0YXJ0VGVzdChleHBlY3RlZCwgY2FsbGJhY2ssIG1heFRpbWUpCiAgIHsKICAgICBpZiAoY2Fs
bGJhY2spCiAgICAgICBjYWxsYmFjaygpOwogICAgIAotICAgIHZhciBtYXhUaW1lID0gMDsKKyAg
ICBpZiAoIW1heFRpbWUpCisgICAgICAgIG1heFRpbWUgPSAwOwogCiAgICAgZm9yICh2YXIgaT0w
OyBpIDwgZXhwZWN0ZWQubGVuZ3RoOyArK2kpIHsKICAgICAgIGlmIChleHBlY3RlZFtpXVszXSkg
ewpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1lbmQtZXZl
bnQtc2V0LW5vbmUuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24tZW5k
LWV2ZW50LXNldC1ub25lLmh0bWwKaW5kZXggNTQ4YzZmMi4uNWEwZDViMSAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1lbmQtZXZlbnQtc2V0LW5vbmUuaHRt
bAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2l0aW9uLWVuZC1ldmVudC1zZXQt
bm9uZS5odG1sCkBAIC01MSw3ICs1MSw5IEBACiAgICAgICBib3guY2xhc3NOYW1lID0gImJveCBi
b3gxIjsKICAgICB9CiAgICAgCi0gICAgcnVuVHJhbnNpdGlvblRlc3QoZXhwZWN0ZWRFbmRFdmVu
dHMsIHNldHVwVGVzdCk7CisgICAgLy8gV2UgbmVlZCB0byBwYXNzIGFuIGV4cGxpY2l0IG1heFRp
bWUgYmVjYXVzZSB3ZSB1c2UgdHdvIHNlcXVlbnRpYWwKKyAgICAvLyB0cmFuc2l0aW9ucyB0aGF0
IGVhY2ggdGFrZSAwLjJzLgorICAgIHJ1blRyYW5zaXRpb25UZXN0KGV4cGVjdGVkRW5kRXZlbnRz
LCBzZXR1cFRlc3QsIDAuNSk7CiAgICAgCiAgIDwvc2NyaXB0PgogPC9oZWFkPgpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9BbmRyb2lkLm1rIGIvV2ViQ29yZS9BbmRyb2lkLm1rCmluZGV4IDY2Y2QzYjcu
LmExOWQ3ZTIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQW5kcm9pZC5taworKysgYi9XZWJDb3JlL0Fu
ZHJvaWQubWsKQEAgLTQzNiw3ICs0MzYsNyBAQCBMT0NBTF9TUkNfRklMRVMgOj0gJChMT0NBTF9T
UkNfRklMRVMpIFwKIAlwbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFzdFBhdGguY3BwIFwKIAlwbGF0
Zm9ybS9ncmFwaGljcy9HZW5lcmF0ZWRJbWFnZS5jcHAgXAogCXBsYXRmb3JtL2dyYXBoaWNzL0ds
eXBoUGFnZVRyZWVOb2RlLmNwcCBcCi0JcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhXaWR0aE1hcC5j
cHAgXAorCXBsYXRmb3JtL2dyYXBoaWNzL0dseXBoTWV0cmljc01hcC5jcHAgXAogCXBsYXRmb3Jt
L2dyYXBoaWNzL0dyYWRpZW50LmNwcCBcCiAJcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0LmNwcCBcCiAJcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5jcHAgXApkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBhYjAzNGQw
Li45M2YyZTA0IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0No
YW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDEwLTA0LTA3ICBWaXRhbHkgUmVwZXNoa28gIDx2
aXRhbHlyQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBbVjhdIEZpeCBjcmFzaCBpbiBOb2RlRmlsdGVyQ29uZGl0aW9uIGluIGRl
dGFjaGVkIGlmcmFtZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MzcyMzQKKworICAgICAgICBUZXN0OiBmYXN0L2RvbS9ub2RlLWZpbHRlci1kZXRhY2hl
ZC1pZnJhbWUtY3Jhc2guaHRtbAorCisgICAgICAgICogYmluZGluZ3MvdjgvVjhOb2RlRmlsdGVy
Q29uZGl0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4Tm9kZUZpbHRlckNvbmRpdGlvbjo6
YWNjZXB0Tm9kZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhQcm94eS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpWOFByb3h5OjpjYWxsRnVuY3Rpb25XaXRob3V0RnJhbWUpOgorICAgICAgICAq
IGJpbmRpbmdzL3Y4L1Y4UHJveHkuaDoKKwogMjAxMC0wNC0wNiAgQW5keSBFc3RlcyAgPGFlc3Rl
c0BhcHBsZS5jb20+CiAKICAgICAgICAgUnViYmVyLXN0YW1wZWQgYnkgRGFuIEJlcm5zdGVpbi4K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMuY3BwIGIvV2ViQ29yZS9EZXJpdmVk
U291cmNlcy5jcHAKaW5kZXggYjE3MjJjMC4uNDZiNmFiOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9E
ZXJpdmVkU291cmNlcy5jcHAKKysrIGIvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5jcHAKQEAgLTM0
Myw2ICszNDMsOSBAQAogI2luY2x1ZGUgIkpTVGV4dEV2ZW50LmNwcCIKICNpbmNsdWRlICJKU1Rl
eHRNZXRyaWNzLmNwcCIKICNpbmNsdWRlICJKU1RpbWVSYW5nZXMuY3BwIgorI2luY2x1ZGUgIkpT
VG91Y2guY3BwIgorI2luY2x1ZGUgIkpTVG91Y2hFdmVudC5jcHAiCisjaW5jbHVkZSAiSlNUb3Vj
aExpc3QuY3BwIgogI2luY2x1ZGUgIkpTVHJlZVdhbGtlci5jcHAiCiAjaW5jbHVkZSAiSlNVSUV2
ZW50LmNwcCIKICNpbmNsdWRlICJKU1ZhbGlkaXR5U3RhdGUuY3BwIgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlIGIvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCmlu
ZGV4IDM2OTQyNzAuLjNiNDZhNTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMu
bWFrZQorKysgYi9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKQEAgLTQwMSw2ICs0MDEsOSBA
QCBET01fQ0xBU1NFUyA9IFwKICAgICBUZXh0RXZlbnQgXAogICAgIFRleHRNZXRyaWNzIFwKICAg
ICBUaW1lUmFuZ2VzIFwKKyAgICBUb3VjaCBcCisgICAgVG91Y2hFdmVudCBcCisgICAgVG91Y2hM
aXN0IFwKICAgICBUcmVlV2Fsa2VyIFwKICAgICBVSUV2ZW50IFwKICAgICBWYWxpZGl0eVN0YXRl
IFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvRW5nbGlzaC5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpz
IGIvV2ViQ29yZS9FbmdsaXNoLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanMKaW5kZXggNjJiYTJk
MS4uZDMxODExMSAxMDA2NDQKQmluYXJ5IGZpbGVzIGEvV2ViQ29yZS9FbmdsaXNoLmxwcm9qL2xv
Y2FsaXplZFN0cmluZ3MuanMgYW5kIGIvV2ViQ29yZS9FbmdsaXNoLmxwcm9qL2xvY2FsaXplZFN0
cmluZ3MuanMgZGlmZmVyCmRpZmYgLS1naXQgYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCBmZGVhYWEzLi5hNDdmNGIyIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL0dOVW1ha2VmaWxlLmFtCisrKyBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTE2
Miw2ICsxNjIsOSBAQCBJRExfQklORElOR1MgKz0gXAogCVdlYkNvcmUvZG9tL1JhbmdlRXhjZXB0
aW9uLmlkbCBcCiAJV2ViQ29yZS9kb20vVGV4dC5pZGwgXAogCVdlYkNvcmUvZG9tL1RleHRFdmVu
dC5pZGwgXAorCVdlYkNvcmUvZG9tL1RvdWNoLmlkbCBcCisJV2ViQ29yZS9kb20vVG91Y2hFdmVu
dC5pZGwgXAorCVdlYkNvcmUvZG9tL1RvdWNoTGlzdC5pZGwgXAogCVdlYkNvcmUvZG9tL1RyZWVX
YWxrZXIuaWRsIFwKIAlXZWJDb3JlL2RvbS9VSUV2ZW50LmlkbCBcCiAJV2ViQ29yZS9kb20vV2Vi
S2l0QW5pbWF0aW9uRXZlbnQuaWRsIFwKQEAgLTE2MTEsOCArMTYxNCw4IEBAIHdlYmNvcmVfc291
cmNlcyArPSBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaEJ1ZmZlci5oIFwKIAlX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZVRyZWVOb2RlLmNwcCBcCiAJV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2VUcmVlTm9kZS5oIFwKLQlXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dseXBoV2lkdGhNYXAuY3BwIFwKLQlXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dseXBoV2lkdGhNYXAuaCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaE1l
dHJpY3NNYXAuY3BwIFwKKwlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoTWV0cmljc01h
cC5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmNwcCBcCiAJV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dC5jcHAgXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLmJh
c2UuZXhwIGIvV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCmluZGV4IDExZmRhZjMuLjg1ZWM4ZjEg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAorKysgYi9XZWJDb3JlL1dlYkNv
cmUuYmFzZS5leHAKQEAgLTkwOCw3ICs5MDgsNyBAQCBfX1pOSzdXZWJDb3JlMjBSZXNvdXJjZVJl
c3BvbnNlQmFzZTE3c3VnZ2VzdGVkRmlsZW5hbWVFdgogX19aTks3V2ViQ29yZTIwUmVzb3VyY2VS
ZXNwb25zZUJhc2UzdXJsRXYKIF9fWk5LN1dlYkNvcmUyMFJlc291cmNlUmVzcG9uc2VCYXNlOG1p
bWVUeXBlRXYKIF9fWk5LN1dlYkNvcmUyNk5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyNmlzRG9u
ZUV2Ci1fX1pOSzdXZWJDb3JlNEZvbnQxMGZsb2F0V2lkdGhFUktOU183VGV4dFJ1bkVQTjNXVEY3
SGFzaFNldElQS05TXzE0U2ltcGxlRm9udERhdGFFTlM0XzdQdHJIYXNoSVM4X0VFTlM0XzEwSGFz
aFRyYWl0c0lTOF9FRUVFCitfX1pOSzdXZWJDb3JlNEZvbnQxMGZsb2F0V2lkdGhFUktOU183VGV4
dFJ1bkVQTjNXVEY3SGFzaFNldElQS05TXzE0U2ltcGxlRm9udERhdGFFTlM0XzdQdHJIYXNoSVM4
X0VFTlM0XzEwSGFzaFRyYWl0c0lTOF9FRUVFUE5TXzEzR2x5cGhPdmVyZmxvd0UKIF9fWk5LN1dl
YkNvcmU0Rm9udDExcHJpbWFyeUZvbnRFdgogX19aTks3V2ViQ29yZTRGb250OGRyYXdUZXh0RVBO
U18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzdUZXh0UnVuRVJLTlNfMTBGbG9hdFBvaW50RWlpCiBf
X1pOSzdXZWJDb3JlNEtVUkwxMWNyZWF0ZUNGVVJMRXYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2Vi
Q29yZS5neXAvV2ViQ29yZS5neXAgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCmlu
ZGV4IDliZWEwZWYuLmMxYTU2MGIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5neXAvV2Vi
Q29yZS5neXAKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cApAQCAtMTA2NCw2
ICsxMDY0LDkgQEAKICAgICAgICAgICAgICcuLi9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9za2lh
L0ltYWdlRGVjb2RlclNraWEuY3BwJywKICAgICAgICAgICAgICcuLi9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy94Ym0vWEJNSW1hZ2VEZWNvZGVyLmNwcCcsCiAgICAgICAgICAgICAnLi4vcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMveGJtL1hCTUltYWdlRGVjb2Rlci5oJywKKworICAgICAgICAgICAg
IyBBZ2FpbiwgU2tpYSBpcyBub3QgdXNlZCBvbiBNYWMuCisgICAgICAgICAgICAnLi4vcGxhdGZv
cm0vY2hyb21pdW0vRHJhZ0ltYWdlQ2hyb21pdW1Ta2lhLmNwcCcsCiAgICAgICAgICAgXSwKICAg
ICAgICAgICAnZGlyZWN0X2RlcGVuZGVudF9zZXR0aW5ncyc6IHsKICAgICAgICAgICAgICdpbmNs
dWRlX2RpcnMnOiBbCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1dlYkNvcmUv
V2ViQ29yZS5neXBpCmluZGV4IDg0NWI0NmYuLmI1NTFhOGIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
V2ViQ29yZS5neXBpCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0xOTU4LDcgKzE5NTgs
OCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL0N1cnNvckNocm9taXVtLmNwcCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vRHJhZ0RhdGFDaHJvbWl1bS5jcHAnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL0RyYWdEYXRhUmVmLmgnLAotICAgICAgICAg
ICAgJ3BsYXRmb3JtL2Nocm9taXVtL0RyYWdJbWFnZUNocm9taXVtLmNwcCcsCisgICAgICAgICAg
ICAncGxhdGZvcm0vY2hyb21pdW0vRHJhZ0ltYWdlQ2hyb21pdW1NYWMuY3BwJywKKyAgICAgICAg
ICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9EcmFnSW1hZ2VDaHJvbWl1bVNraWEuY3BwJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9EcmFnSW1hZ2VSZWYuaCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vY2hyb21pdW0vRmlsZUNob29zZXJDaHJvbWl1bS5jcHAnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2Nocm9taXVtL0ZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAnLApAQCAtMjMyMSw4ICsy
MzIyLDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9HbHlwaEJ1ZmZlci5oJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2VUcmVlTm9kZS5jcHAnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZVRyZWVOb2RlLmgnLAotICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoV2lkdGhNYXAuY3BwJywKLSAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFdpZHRoTWFwLmgnLAorICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL0dseXBoTWV0cmljc01hcC5jcHAnLAorICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL0dseXBoTWV0cmljc01hcC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9HcmFkaWVudC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0dy
YWRpZW50LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dC5jcHAnLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1dlYkNvcmUvV2ViQ29y
ZS5wcm8KaW5kZXggYWJmNGM0NS4uZWFiMTBlMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3Jl
LnBybworKysgYi9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC0yODUzLDcgKzI4NTMsNyBAQCBpbmNs
dWRlKCQkUFdELy4uL1dlYktpdC9xdC9BcGkvaGVhZGVycy5wcmkpCiBIRUFERVJTICs9ICQkV0VC
S0lUX0FQSV9IRUFERVJTCiAKICFDT05GSUcoUVRESVJfYnVpbGQpIHsKLSAgICBleGlzdHMoLi4v
aW5jbHVkZS9RdFdlYktpdC9jbGFzc2hlYWRlcnMucHJpKTppbmNsdWRlKC4uL2luY2x1ZGUvUXRX
ZWJLaXQvY2xhc3NoZWFkZXJzLnByaSkKKyAgICBleGlzdHMoJCRPVVRQVVRfRElSL2luY2x1ZGUv
UXRXZWJLaXQvY2xhc3NoZWFkZXJzLnByaSk6IGluY2x1ZGUoJCRPVVRQVVRfRElSL2luY2x1ZGUv
UXRXZWJLaXQvY2xhc3NoZWFkZXJzLnByaSkKICAgICBXRUJLSVRfSU5TVEFMTF9IRUFERVJTID0g
JCRXRUJLSVRfQVBJX0hFQURFUlMgJCRXRUJLSVRfQ0xBU1NfSEVBREVSUwogCiAgICAgIXN5bWJp
YW4gewpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBi
L1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggOGFjMWU3MC4uMDQw
ODg0OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagor
KysgYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC0yMjc3NiwxMSAr
MjI3NzYsMTEgQEAKIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQotCQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEdseXBoV2lkdGhNYXAuY3BwIg0KKwkJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xHbHlwaE1ldHJpY3NNYXAuY3BwIg0K
IAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XHBsYXRmb3JtXGdyYXBoaWNzXEdseXBoV2lkdGhNYXAuaCINCisJCQkJCVJlbGF0aXZlUGF0aD0i
Li5ccGxhdGZvcm1cZ3JhcGhpY3NcR2x5cGhNZXRyaWNzTWFwLmgiDQogCQkJCQk+DQogCQkJCTwv
RmlsZT4NCiAJCQkJPEZpbGUNCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCmluZGV4IGJlMDFmYjguLjZiZDZiNmIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCkBAIC0zODk4LDggKzM4OTgsNiBAQAogCQlCMkMzREE2QzBEMDA2Q0Q2
MDBFRjZGMjYgLyogR2x5cGhCdWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEIyQzNEQTVCMEQwMDZDRDYwMEVGNkYyNiAvKiBHbHlwaEJ1ZmZlci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUIyQzNE
QTZEMEQwMDZDRDYwMEVGNkYyNiAvKiBHbHlwaFBhZ2VUcmVlTm9kZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkMzREE1QzBEMDA2Q0Q2MDBFRjZG
MjYgLyogR2x5cGhQYWdlVHJlZU5vZGUuY3BwICovOyB9OwogCQlCMkMzREE2RTBEMDA2Q0Q2MDBF
RjZGMjYgLyogR2x5cGhQYWdlVHJlZU5vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEIyQzNEQTVEMEQwMDZDRDYwMEVGNkYyNiAvKiBHbHlwaFBhZ2VU
cmVlTm9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
Ci0JCUIyQzNEQTZGMEQwMDZDRDYwMEVGNkYyNiAvKiBHbHlwaFdpZHRoTWFwLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQzNEQTVFMEQwMDZDRDYw
MEVGNkYyNiAvKiBHbHlwaFdpZHRoTWFwLmNwcCAqLzsgfTsKLQkJQjJDM0RBNzAwRDAwNkNENjAw
RUY2RjI2IC8qIEdseXBoV2lkdGhNYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEIyQzNEQTVGMEQwMDZDRDYwMEVGNkYyNiAvKiBHbHlwaFdpZHRoTWFw
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQjJD
OTZEOEQwQjNBRjJCNzAwNUU4MEVDIC8qIEpTU1ZHUGF0aFNlZ0N1c3RvbS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkM5NkQ4QzBCM0FGMkI3MDA1
RTgwRUMgLyogSlNTVkdQYXRoU2VnQ3VzdG9tLmNwcCAqLzsgfTsKIAkJQjJDQjkyNDIwQjVCRDk2
NjAwOUJBQTc4IC8qIEpTU1ZHRWxlbWVudEluc3RhbmNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQ0I5MjNCMEI1QkQ5NDEwMDlCQUE3OCAvKiBK
U1NWR0VsZW1lbnRJbnN0YW5jZS5jcHAgKi87IH07CiAJCUIyQ0I5MjQ0MEI1QkQ5NzAwMDlCQUE3
OCAvKiBKU1NWR0VsZW1lbnRJbnN0YW5jZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQjJDQjkyM0MwQjVCRDk0MTAwOUJBQTc4IC8qIEpTU1ZHRWxlbWVu
dEluc3RhbmNlLmggKi87IH07CkBAIC00NzAwLDYgKzQ2OTgsOCBAQAogCQlDNTE2MEVFQjEwMDQ1
NDNBMDBBN0NFRTIgLyogU3RvcmFnZUFyZWFJbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTE2MEVFOTEwMDQ1NDNBMDBBN0NFRTIgLyogU3RvcmFn
ZUFyZWFJbXBsLmggKi87IH07CiAJCUM1NUUzOEJGMTAwNDBENUQwMEE1NkJEQiAvKiBTdG9yYWdl
TmFtZXNwYWNlSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQzU1RTM4QkIxMDA0MEQ1RDAwQTU2QkRCIC8qIFN0b3JhZ2VOYW1lc3BhY2VJbXBsLmgg
Ki87IH07CiAJCUM1NUUzOEMwMTAwNDBENUQwMEE1NkJEQiAvKiBTdG9yYWdlTmFtZXNwYWNlSW1w
bC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTVF
MzhCQzEwMDQwRDVEMDBBNTZCREIgLyogU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwICovOyB9Owor
CQlDNUQ0QUE3OTExNkJBRkI2MDA2OUNBOTMgLyogR2x5cGhNZXRyaWNzTWFwLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1RDRBQTc3MTE2QkFGQjYw
MDY5Q0E5MyAvKiBHbHlwaE1ldHJpY3NNYXAuY3BwICovOyB9OworCQlDNUQ0QUE3QTExNkJBRkI2
MDA2OUNBOTMgLyogR2x5cGhNZXRyaWNzTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDNUQ0QUE3ODExNkJBRkI2MDA2OUNBOTMgLyogR2x5cGhNZXRy
aWNzTWFwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJQzVFOUI2NzcxMDY5N0UxMzAwQzdCQjFBIC8qIFN0b3JhZ2VFdmVudERpc3BhdGNoZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzVFOUI2NzYx
MDY5N0UxMzAwQzdCQjFBIC8qIFN0b3JhZ2VFdmVudERpc3BhdGNoZXIuY3BwICovOyB9OwogCQlD
NUVCREQ4NDEwNUVEREVDMDA1NjgxNkYgLyogU3RvcmFnZUV2ZW50RGlzcGF0Y2hlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzVFQkREODExMDVFRERF
QzAwNTY4MTZGIC8qIFN0b3JhZ2VFdmVudERpc3BhdGNoZXIuaCAqLzsgfTsKIAkJQzZENzRBRDUw
OUFBMjgyRTAwMEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzZENzRBRDMwOUFBMjgyRTAwMEIw
QTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5oICovOyB9OwpAQCAtOTIyMiw4ICs5MjIy
LDYgQEAKIAkJQjJDM0RBNUIwRDAwNkNENjAwRUY2RjI2IC8qIEdseXBoQnVmZmVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHbHlwaEJ1ZmZlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlCMkMzREE1QzBEMDA2Q0Q2MDBFRjZGMjYgLyogR2x5cGhQYWdlVHJl
ZU5vZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdseXBoUGFn
ZVRyZWVOb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJDM0RBNUQwRDAw
NkNENjAwRUY2RjI2IC8qIEdseXBoUGFnZVRyZWVOb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBHbHlwaFBhZ2VUcmVlTm9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlCMkMzREE1RTBEMDA2Q0Q2MDBFRjZGMjYgLyogR2x5cGhXaWR0aE1hcC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR2x5cGhXaWR0aE1hcC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyQzNEQTVGMEQwMDZDRDYwMEVGNkYyNiAvKiBH
bHlwaFdpZHRoTWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHbHlwaFdp
ZHRoTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQzk2RDhDMEIzQUYyQjcw
MDVFODBFQyAvKiBKU1NWR1BhdGhTZWdDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpTU1ZHUGF0aFNlZ0N1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUIyQ0I5MjNCMEI1QkQ5NDEwMDlCQUE3OCAvKiBKU1NWR0VsZW1lbnRJbnN0
YW5jZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNTVkdFbGVt
ZW50SW5zdGFuY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkNCOTIzQzBC
NUJEOTQxMDA5QkFBNzggLyogSlNTVkdFbGVtZW50SW5zdGFuY2UuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTU1ZHRWxlbWVudEluc3RhbmNlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xMDA2MSw2ICsxMDA1OSw4IEBACiAJCUM1MTYwRUU5MTAwNDU0M0Ew
MEE3Q0VFMiAvKiBTdG9yYWdlQXJlYUltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU3RvcmFnZUFyZWFJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM1
NUUzOEJCMTAwNDBENUQwMEE1NkJEQiAvKiBTdG9yYWdlTmFtZXNwYWNlSW1wbC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9yYWdlTmFtZXNwYWNlSW1wbC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlDNTVFMzhCQzEwMDQwRDVEMDBBNTZCREIgLyogU3RvcmFn
ZU5hbWVzcGFjZUltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlD
NUQ0QUE3NzExNkJBRkI2MDA2OUNBOTMgLyogR2x5cGhNZXRyaWNzTWFwLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdseXBoTWV0cmljc01hcC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUM1RDRBQTc4MTE2QkFGQjYwMDY5Q0E5MyAvKiBHbHlwaE1l
dHJpY3NNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR2x5cGhNZXRyaWNz
TWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM1RTlCNjc2MTA2OTdFMTMwMEM3
QkIxQSAvKiBTdG9yYWdlRXZlbnREaXNwYXRjaGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFN0b3JhZ2VFdmVudERpc3BhdGNoZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlDNUVCREQ4MTEwNUVEREVDMDA1NjgxNkYgLyogU3RvcmFnZUV2ZW50
RGlzcGF0Y2hlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9yYWdlRXZl
bnREaXNwYXRjaGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM2RDc0QUQzMDlB
QTI4MkUwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNDY0NCwxMCArMTQ2NDQsMTAgQEAKIAkJCQlCQzIzRjBE
QTBEQUZGNEE0MDA5RkRDOTEgLyogR2VuZXJhdGVkSW1hZ2UuaCAqLywKIAkJCQlCQ0UwNEM4OTBE
QUZGN0EwMDA3QTBGNDEgLyogR2VuZXJhdG9yLmggKi8sCiAJCQkJQjJDM0RBNUIwRDAwNkNENjAw
RUY2RjI2IC8qIEdseXBoQnVmZmVyLmggKi8sCisJCQkJQzVENEFBNzcxMTZCQUZCNjAwNjlDQTkz
IC8qIEdseXBoTWV0cmljc01hcC5jcHAgKi8sCisJCQkJQzVENEFBNzgxMTZCQUZCNjAwNjlDQTkz
IC8qIEdseXBoTWV0cmljc01hcC5oICovLAogCQkJCUIyQzNEQTVDMEQwMDZDRDYwMEVGNkYyNiAv
KiBHbHlwaFBhZ2VUcmVlTm9kZS5jcHAgKi8sCiAJCQkJQjJDM0RBNUQwRDAwNkNENjAwRUY2RjI2
IC8qIEdseXBoUGFnZVRyZWVOb2RlLmggKi8sCi0JCQkJQjJDM0RBNUUwRDAwNkNENjAwRUY2RjI2
IC8qIEdseXBoV2lkdGhNYXAuY3BwICovLAotCQkJCUIyQzNEQTVGMEQwMDZDRDYwMEVGNkYyNiAv
KiBHbHlwaFdpZHRoTWFwLmggKi8sCiAJCQkJQkM1M0M2MDcwREE1NkM1NzAwMjFFQjVEIC8qIEdy
YWRpZW50LmNwcCAqLywKIAkJCQlCQzUzQzVGNDBEQTU2QjkyMDAyMUVCNUQgLyogR3JhZGllbnQu
aCAqLywKIAkJCQlCMkEwMTU5MjBBRjZDRDUzMDA2QkNFMEUgLyogR3JhcGhpY3NDb250ZXh0LmNw
cCAqLywKQEAgLTE3MzkyLDcgKzE3MzkyLDYgQEAKIAkJCQlGRTgwRDdDOTBFOUMxRjI1MDAwRDZG
NzUgLyogR2VvcG9zaXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUIyQzNEQTZDMEQwMDZDRDYw
MEVGNkYyNiAvKiBHbHlwaEJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJDM0RBNkUwRDAw
NkNENjAwRUY2RjI2IC8qIEdseXBoUGFnZVRyZWVOb2RlLmggaW4gSGVhZGVycyAqLywKLQkJCQlC
MkMzREE3MDBEMDA2Q0Q2MDBFRjZGMjYgLyogR2x5cGhXaWR0aE1hcC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkM1M0M1RjUwREE1NkI5MjAwMjFFQjVEIC8qIEdyYWRpZW50LmggaW4gSGVhZGVycyAq
LywKIAkJCQlCMjIyNzk2NDBEMDBCRjIyMDA3MUI3ODIgLyogR3JhZGllbnRBdHRyaWJ1dGVzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCMkEwMTVBOTBBRjZDRDUzMDA2QkNFMEUgLyogR3JhcGhpY3ND
b250ZXh0LmggaW4gSGVhZGVycyAqLywKQEAgLTE4ODE0LDYgKzE4ODEzLDcgQEAKIAkJCQk4OTUy
NTM1MzExNjQxQjM0MDBDQUJGMDAgLyogRmlsZVRocmVhZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
OTdDMDc4NTAxMTY1RDVCRTAwM0EzMkVGIC8qIFN1ZmZpeFRyZWUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTI1NDJGNERCMTE2NkMyNUEwMEU4OUE4NiAvKiBVc2VyR2VzdHVyZUluZGljYXRvci5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJQzVENEFBN0ExMTZCQUZCNjAwNjlDQTkzIC8qIEdseXBoTWV0cmlj
c01hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0
cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0xOTYzMSw3ICsxOTYzMSw2IEBACiAJCQkJNTlDNzdG
MkExMDU0NUIzQjAwNTA2MTA0IC8qIEdlb2xvY2F0aW9uU2VydmljZU1vY2suY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQjJDM0RBNkQwRDAwNkNENjAwRUY2RjI2IC8qIEdseXBoUGFnZVRyZWVOb2Rl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyQUZGQzgzMEQwMEE1QzEwMDMwMDc0RCAvKiBHbHlw
aFBhZ2VUcmVlTm9kZU1hYy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlCMkMzREE2RjBEMDA2Q0Q2
MDBFRjZGMjYgLyogR2x5cGhXaWR0aE1hcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzUzQzYw
ODBEQTU2QzU3MDAyMUVCNUQgLyogR3JhZGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM1
M0M2MEIwREE1NkNGMTAwMjFFQjVEIC8qIEdyYWRpZW50Q0cuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQjJBMDE1QTgwQUY2Q0Q1MzAwNkJDRTBFIC8qIEdyYXBoaWNzQ29udGV4dC5jcHAgaW4gU291
cmNlcyAqLywKQEAgLTIxMDM0LDYgKzIxMDMzLDcgQEAKIAkJCQkyRTNCQkYwNzExNjJEQTExMDBC
OTQwOUEgLyogVVVJRC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4OTUyNTM1MjExNjQxQjM0MDBD
QUJGMDAgLyogRmlsZVRocmVhZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyNTQyRjREQTExNjZD
MjVBMDBFODlBODYgLyogVXNlckdlc3R1cmVJbmRpY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJQzVENEFBNzkxMTZCQUZCNjAwNjlDQTkzIC8qIEdseXBoTWV0cmljc01hcC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0g
MDsKIAkJfTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
SW1hZ2VNYXBMaW5rLmNwcCBiL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5SW1h
Z2VNYXBMaW5rLmNwcAppbmRleCAwNjE1MGI5Li4yZWFjOGQzIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUltYWdlTWFwTGluay5jcHAKKysrIGIvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlJbWFnZU1hcExpbmsuY3BwCkBAIC0xMDMsNiAr
MTAzLDkgQEAgU3RyaW5nIEFjY2Vzc2liaWxpdHlJbWFnZU1hcExpbms6OmFjY2Vzc2liaWxpdHlE
ZXNjcmlwdGlvbigpIGNvbnN0CiAgICAgaWYgKCFtX2FyZWFFbGVtZW50KQogICAgICAgICByZXR1
cm4gU3RyaW5nKCk7CiAKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGFyaWFMYWJlbCA9IG1fYXJl
YUVsZW1lbnQtPmdldEF0dHJpYnV0ZShhcmlhX2xhYmVsQXR0cik7CisgICAgaWYgKCFhcmlhTGFi
ZWwuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gYXJpYUxhYmVsOwogICAgIGNvbnN0IEF0b21p
Y1N0cmluZyYgYWx0ID0gbV9hcmVhRWxlbWVudC0+Z2V0QXR0cmlidXRlKGFsdEF0dHIpOwogICAg
IGlmICghYWx0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGFsdDsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01CaW5kaW5nLmNwcAppbmRleCBmMjk0ZGFkLi45YjcyYjM3IDEwMDY0NAotLS0gYS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTUJpbmRpbmcuY3BwCkBAIC01MzMsNiArNTMzLDkgQEAgZG91YmxlIHZhbHVlVG9EYXRl
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKIAogdm9pZCByZXBvcnRFeGNlcHRpb24o
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGV4Y2VwdGlvbikKIHsKKyAgICBpZiAoZXhjZXB0aW9u
LmlzT2JqZWN0KCkgJiYgYXNPYmplY3QoZXhjZXB0aW9uKS0+ZXhjZXB0aW9uVHlwZSgpID09IFRl
cm1pbmF0ZWQpCisgICAgICAgIHJldHVybjsKKwogICAgIFVTdHJpbmcgZXJyb3JNZXNzYWdlID0g
ZXhjZXB0aW9uLnRvU3RyaW5nKGV4ZWMpOwogICAgIEpTT2JqZWN0KiBleGNlcHRpb25PYmplY3Qg
PSBleGNlcHRpb24udG9PYmplY3QoZXhlYyk7CiAgICAgaW50IGxpbmVOdW1iZXIgPSBleGNlcHRp
b25PYmplY3QtPmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsICJsaW5lIikpLnRvSW50MzIoZXhl
Yyk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRyb2xs
ZXIuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcApp
bmRleCBlMzcxNDIzLi41Y2VjNmQxIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dv
cmtlclNjcmlwdENvbnRyb2xsZXIuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvV29ya2Vy
U2NyaXB0Q29udHJvbGxlci5jcHAKQEAgLTE0MSwxMCArMTQxLDEwIEBAIHZvaWQgV29ya2VyU2Ny
aXB0Q29udHJvbGxlcjo6Zm9yYmlkRXhlY3V0aW9uKCkKICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlz
IGNhbGxlZCBmcm9tIGFub3RoZXIgdGhyZWFkLgogICAgIC8vIE11dGV4IHByb3RlY3Rpb24gZm9y
IG1fZXhlY3V0aW9uRm9yYmlkZGVuIGlzIG5lZWRlZCB0byBndWFyYW50ZWUgdGhhdCB0aGUgdmFs
dWUgaXMgc3luY2hyb25pemVkIGJldHdlZW4gcHJvY2Vzc29ycywgYmVjYXVzZQogICAgIC8vIGlm
IGl0IHdlcmUgbm90LCB0aGUgd29ya2VyIGNvdWxkIHJlLWVudGVyIEpTQzo6ZXZhbHVhdGUoKSwg
YnV0IHdpdGggdGltZW91dCBhbHJlYWR5IHJlc2V0LgotICAgIC8vIEl0IGlzIG5vdCBjcml0aWNh
bCBmb3IgSW50ZXJwcmV0ZXI6Om1fdGltZW91dFRpbWUgdG8gYmUgc3luY2hyb25pemVkLCB3ZSBq
dXN0IHJlbHkgb24gaXQgcmVhY2hpbmcgdGhlIHdvcmtlciB0aHJlYWQncyBwcm9jZXNzb3Igc29v
bmVyIG9yIGxhdGVyLgorICAgIC8vIEl0IGlzIG5vdCBjcml0aWNhbCBmb3IgVGVybWluYXRvcjo6
bV9zaG91bGRUZXJtaW5hdGUgdG8gYmUgc3luY2hyb25pemVkLCB3ZSBqdXN0IHJlbHkgb24gaXQg
cmVhY2hpbmcgdGhlIHdvcmtlciB0aHJlYWQncyBwcm9jZXNzb3Igc29vbmVyIG9yIGxhdGVyLgog
ICAgIE11dGV4TG9ja2VyIGxvY2sobV9zaGFyZWREYXRhTXV0ZXgpOwogICAgIG1fZXhlY3V0aW9u
Rm9yYmlkZGVuID0gdHJ1ZTsKLSAgICBtX2dsb2JhbERhdGEtPnRpbWVvdXRDaGVja2VyLnNldFRp
bWVvdXRJbnRlcnZhbCgxKTsgLy8gMW1zIGlzIHRoZSBzbWFsbGVzdCB0aW1lb3V0IHRoYXQgY2Fu
IGJlIHNldC4KKyAgICBtX2dsb2JhbERhdGEtPnRlcm1pbmF0b3IudGVybWluYXRlU29vbigpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JKUy5wbQppbmRleCA4M2VhZWQ0Li41YTIzNmE3IDEwMDY0NAotLS0gYS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCisrKyBiL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KQEAgLTE0NjYsNiArMTQ2NiwxMiBAQCBz
dWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgbXkgJHB1
dEZ1bmN0aW9uTmFtZSA9ICJzZXRKUyIgLiAkaW50ZXJmYWNlTmFtZSAuICAkY29kZUdlbmVyYXRv
ci0+V0tfdWNmaXJzdCgkbmFtZSkgLiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT50eXBlID1+IC9D
b25zdHJ1Y3RvciQvID8gIkNvbnN0cnVjdG9yIiA6ICIiKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIG15ICRpbXBsU2V0dGVyRnVuY3Rpb25OYW1lID0gJGNvZGVHZW5lcmF0b3ItPldLX3VjZmly
c3QoJG5hbWUpOwogCisgICAgICAgICAgICAgICAgICAgICAgICBteSAkY29uZGl0aW9uYWwgPSAk
YXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDb25kaXRpb25hbCJ9
OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRjb25kaXRpb25hbCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICRjb25kaXRpb25hbFN0cmluZyA9ICJFTkFCTEUoIiAuIGpvaW4o
IikgJiYgRU5BQkxFKCIsIHNwbGl0KC8mLywgJGNvbmRpdGlvbmFsKSkgLiAiKSI7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIjaWYgJHtjb25kaXRpb25h
bFN0cmluZ31cbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInZvaWQgJHtwdXRGdW5jdGlvbk5hbWV9KEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpXG4iKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CiAKQEAg
LTE1MzQsNyArMTU0MCwxMyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICJ9XG5cbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICJ9XG4iKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRjb25kaXRpb25hbCkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiI2VuZGlmXG4i
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbSBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2Rl
R2VuZXJhdG9yVjgucG0KaW5kZXggZDFlNzc0ZC4uZDc2MmY2ZCAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQorKysgYi9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCkBAIC0xMTAxLDEzICsxMTAxLDIyIEBAIEVO
RAogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICB9XG4iKTsKICAgICAg
ICAgfQogCi0gICAgICAgIGlmIChCYXNpY1R5cGVDYW5GYWlsQ29udmVyc2lvbigkcGFyYW1ldGVy
KSkgeworICAgICAgICBpZiAoJHBhcmFtZXRlci0+dHlwZSBlcSAiU2VyaWFsaXplZFNjcmlwdFZh
bHVlIikgeworICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siU2VyaWFsaXplZFNjcmlwdFZhbHVl
LmgifSA9IDE7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIGJvb2wg
JHtwYXJhbWV0ZXJOYW1lfURpZFRocm93ID0gZmFsc2U7XG4iKTsKKyAgICAgICAgfSBlbHNpZiAo
QmFzaWNUeXBlQ2FuRmFpbENvbnZlcnNpb24oJHBhcmFtZXRlcikpIHsKICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgYm9vbCAke3BhcmFtZXRlck5hbWV9T2s7XG4iKTsK
ICAgICAgICAgfQogCiAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgIiAuIEdl
dE5hdGl2ZVR5cGVGcm9tU2lnbmF0dXJlKCRwYXJhbWV0ZXIsICRwYXJhbUluZGV4KSAuICIgJHBh
cmFtZXRlck5hbWUgPSAiKTsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgSlNWYWx1
ZVRvTmF0aXZlKCRwYXJhbWV0ZXIsICJhcmdzWyRwYXJhbUluZGV4XSIsCi0gICAgICAgICAgIEJh
c2ljVHlwZUNhbkZhaWxDb252ZXJzaW9uKCRwYXJhbWV0ZXIpID8gICIke3BhcmFtZXRlck5hbWV9
T2siIDogdW5kZWYpIC4gIjtcbiIpOworCisgICAgICAgIGlmICgkcGFyYW1ldGVyLT50eXBlIGVx
ICJTZXJpYWxpemVkU2NyaXB0VmFsdWUiKSB7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dERlY2xzLCAiU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoYXJnc1skcGFyYW1JbmRleF0s
ICR7cGFyYW1ldGVyTmFtZX1EaWRUaHJvdyk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50RGVjbHMsICIgICAgaWYgKCR7cGFyYW1ldGVyTmFtZX1EaWRUaHJvdylcbiAgICByZXR1
cm4gdjg6OlVuZGVmaW5lZCgpO1xuIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudERlY2xzLCBKU1ZhbHVlVG9OYXRpdmUoJHBhcmFtZXRlciwgImFyZ3Nb
JHBhcmFtSW5kZXhdIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBCYXNpY1R5cGVDYW5GYWlsQ29udmVyc2lvbigkcGFyYW1ldGVyKSA/ICAiJHtw
YXJhbWV0ZXJOYW1lfU9rIiA6IHVuZGVmKSAuICI7XG4iKTsKKyAgICAgICAgfQogCiAgICAgICAg
IGlmIChUeXBlQ2FuRmFpbENvbnZlcnNpb24oJHBhcmFtZXRlcikpIHsKICAgICAgICAgICAgICRp
bXBsSW5jbHVkZXN7IkV4Y2VwdGlvbkNvZGUuaCJ9ID0gMTsKQEAgLTI0ODQsMTAgKzI0OTMsNyBA
QCBzdWIgSlNWYWx1ZVRvTmF0aXZlCiAgICAgICAgIHJldHVybiAkdmFsdWU7CiAgICAgfQogCi0g
ICAgaWYgKCR0eXBlIGVxICJTZXJpYWxpemVkU2NyaXB0VmFsdWUiKSB7Ci0gICAgICAgICRpbXBs
SW5jbHVkZXN7IlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIn0gPSAxOwotICAgICAgICByZXR1cm4g
IlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKCR2YWx1ZSkiOwotICAgIH0KKyAgICBkaWUg
IlVuZXhwZWN0ZWQgU2VyaWFsaXplZFNjcmlwdFZhbHVlIiBpZiAkdHlwZSBlcSAiU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlIjsKIAogICAgIGlmICgkdHlwZSBlcSAiRE9NT2JqZWN0IikgewogICAgICAg
ICAkaW1wbEluY2x1ZGVzeyJTY3JpcHRWYWx1ZS5oIn0gPSAxOwpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mvdjgv
U2NyaXB0Q29udHJvbGxlci5jcHAKaW5kZXggYThjN2M4Zi4uMzRiMDBlYSAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcAorKysgYi9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwCkBAIC0xOTIsOCArMTkyLDggQEAgYm9vbCBT
Y3JpcHRDb250cm9sbGVyOjpwcm9jZXNzaW5nVXNlckdlc3R1cmUoRE9NV3JhcHBlcldvcmxkKikg
Y29uc3QKICAgICAgICAgaWYgKGV2ZW50T2spCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9IGVsc2UgaWYgKG1fc291cmNlVVJMICYmIG1fc291cmNlVVJMLT5pc051bGwoKSAmJiAhYWN0
aXZlUHJveHktPnRpbWVyQ2FsbGJhY2soKSkgewotICAgICAgICAvLyBUaGlzIGlzIHRoZSA8YSBo
cmVmPSJqYXZhc2NyaXB0OndpbmRvdy5vcGVuKCcuLi4nKT4gY2FzZSAtPiB3ZSBsZXQgaXQgdGhy
b3VnaC4KLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIC8vIFRoaXMgaXMgdGhlIGphdmFz
Y3JpcHQ6d2luZG93Lm9wZW4oJy4uLicpIGNhc2UgLT4gd2UgbGV0IGl0IHRocm91Z2ggaWYgaXQg
d2FzIGEgPGEgaHJlZj4gdXNlciBjbGljayBhbmQgbm90IGlmIGl0IHdhcyB3aW5kb3cub3Blbigp
LgorICAgICAgICByZXR1cm4gVXNlckdlc3R1cmVJbmRpY2F0b3I6OnByb2Nlc3NpbmdVc2VyR2Vz
dHVyZSgpOwogICAgIH0KIAogICAgIC8vIFRoaXMgaXMgdGhlIDxzY3JpcHQ+d2luZG93Lm9wZW4o
Li4uKTwvc2NyaXB0PiBjYXNlIG9yIGEgdGltZXIgY2FsbGJhY2sgLT4gYmxvY2sgaXQuCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgYi9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKaW5kZXggOGI4NmVi
ZS4uMmFkNDU4NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TZXJpYWxpemVkU2Ny
aXB0VmFsdWUuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlwdFZh
bHVlLmNwcApAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1
ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2luY2x1ZGUgIlY4SW1hZ2VEYXRhLmgiCisjaW5jbHVkZSAi
VjhQcm94eS5oIgogCiAjaW5jbHVkZSA8djguaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5o
PgpAQCAtODY5LDEyICs4NzAsMTQgQEAgcHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2UKIAotU2Vy
aWFsaXplZFNjcmlwdFZhbHVlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWUodjg6OkhhbmRsZTx2ODo6
VmFsdWU+IHZhbHVlKQorU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpTZXJpYWxpemVkU2NyaXB0VmFs
dWUodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlLCBib29sJiBkaWRUaHJvdykKIHsKKyAgICBk
aWRUaHJvdyA9IGZhbHNlOwogICAgIFdyaXRlciB3cml0ZXI7CiAgICAgU2VyaWFsaXplciBzZXJp
YWxpemVyKHdyaXRlcik7CiAgICAgaWYgKCFzZXJpYWxpemVyLnNlcmlhbGl6ZSh2YWx1ZSkpIHsK
LSAgICAgICAgLy8gRklYTUU6IHRocm93IGV4Y2VwdGlvbgorICAgICAgICB0aHJvd0Vycm9yKE5P
VF9TVVBQT1JURURfRVJSKTsKKyAgICAgICAgZGlkVGhyb3cgPSB0cnVlOwogICAgICAgICByZXR1
cm47CiAgICAgfQogICAgIG1fZGF0YSA9IFN0cmluZ0ltcGw6OmFkb3B0KHdyaXRlci5kYXRhKCkp
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUu
aCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgKaW5kZXggYTdi
YzNiNi4uODIwNWE0MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TZXJpYWxpemVk
U2NyaXB0VmFsdWUuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRW
YWx1ZS5oCkBAIC01Niw3ICs1NiwyMCBAQCBwdWJsaWM6CiAgICAgLy8gQ3JlYXRlcyBhIHNlcmlh
bGl6ZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIFY4IHZhbHVlLgogICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gY3JlYXRlKHY4OjpIYW5kbGU8djg6OlZh
bHVlPiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlKHZhbHVlKSk7CisgICAgICAgIGJvb2wgZGlkVGhyb3c7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgU2VyaWFsaXplZFNjcmlwdFZhbHVlKHZhbHVlLCBkaWRUaHJvdykp
OworICAgIH0KKworICAgIC8vIENyZWF0ZXMgYSBzZXJpYWxpemVkIHJlcHJlc2VudGF0aW9uIG9m
IHRoZSBnaXZlbiBWOCB2YWx1ZS4KKyAgICAvLworICAgIC8vIElmIGEgc2VyaWFsaXphdGlvbiBl
cnJvciBvY2N1cnMgKGUuZy4sIGN5Y2xpYyBpbnB1dCB2YWx1ZSkgdGhpcworICAgIC8vIGZ1bmN0
aW9uIHJldHVybnMgYW4gZW1wdHkgcmVwcmVzZW50YXRpb24sIHNjaGVkdWxlcyBhIFY4IGV4Y2Vw
dGlvbiB0bworICAgIC8vIGJlIHRocm93biB1c2luZyB2ODo6VGhyb3dFeGNlcHRpb24oKSwgYW5k
IHNldHMgfGRpZFRocm93fC4gSW4gdGhpcyBjYXNlCisgICAgLy8gdGhlIGNhbGxlciBtdXN0IG5v
dCBpbnZva2UgYW55IFY4IG9wZXJhdGlvbnMgdW50aWwgY29udHJvbCByZXR1cm5zIHRvCisgICAg
Ly8gVjguIFdoZW4gc2VyaWFsaXphdGlvbiBpcyBzdWNjZXNzZnVsLCB8ZGlkVGhyb3d8IGlzIGZh
bHNlLgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gY3JlYXRl
KHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSwgYm9vbCYgZGlkVGhyb3cpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSh2YWx1ZSwgZGlk
VGhyb3cpKTsKICAgICB9CiAKICAgICAvLyBDcmVhdGVzIGEgc2VyaWFsaXplZCB2YWx1ZSB3aXRo
IHRoZSBnaXZlbiBkYXRhIG9idGFpbmVkIGZyb20gYQpAQCAtOTksNyArMTEyLDcgQEAgcHJpdmF0
ZToKIAogICAgIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSgpIHsgfQogCi0gICAgZXhwbGljaXQgU2Vy
aWFsaXplZFNjcmlwdFZhbHVlKHY4OjpIYW5kbGU8djg6OlZhbHVlPik7CisgICAgU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiwgYm9vbCYgZGlkVGhyb3cpOwogCiAg
ICAgU2VyaWFsaXplZFNjcmlwdFZhbHVlKFN0cmluZyBkYXRhLCBTdHJpbmdEYXRhTW9kZSBtb2Rl
KTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOE5vZGVGaWx0ZXJDb25kaXRp
b24uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOE5vZGVGaWx0ZXJDb25kaXRpb24uY3BwCmlu
ZGV4IGE4ODY4YjUuLjIxNzA2OTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhO
b2RlRmlsdGVyQ29uZGl0aW9uLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4Tm9kZUZp
bHRlckNvbmRpdGlvbi5jcHAKQEAgLTcyLDEwICs3Miw3IEBAIHNob3J0IFY4Tm9kZUZpbHRlckNv
bmRpdGlvbjo6YWNjZXB0Tm9kZShTY3JpcHRTdGF0ZSogc3RhdGUsIE5vZGUqIG5vZGUpIGNvbnN0
CiAgICAgT3duQXJyYXlQdHI8djg6OkhhbmRsZTx2ODo6VmFsdWU+ID4gYXJncyhuZXcgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+WzFdKTsKICAgICBhcmdzWzBdID0gdG9WOChub2RlKTsKIAotICAgIFY4
UHJveHkqIHByb3h5ID0gVjhQcm94eTo6cmV0cmlldmUoKTsKLSAgICBBU1NFUlQocHJveHkpOwot
Ci0gICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHJlc3VsdCA9IHByb3h5LT5jYWxsRnVuY3Rpb24o
Y2FsbGJhY2ssIG9iamVjdCwgMSwgYXJncy5nZXQoKSk7CisgICAgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IHJlc3VsdCA9IFY4UHJveHk6OmNhbGxGdW5jdGlvbldpdGhvdXRGcmFtZShjYWxsYmFjaywg
b2JqZWN0LCAxLCBhcmdzLmdldCgpKTsKIAogICAgIGlmIChleGNlcHRpb25DYXRjaGVyLkhhc0Nh
dWdodCgpKSB7CiAgICAgICAgIHN0YXRlLT5zZXRFeGNlcHRpb24oZXhjZXB0aW9uQ2F0Y2hlci5F
eGNlcHRpb24oKSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuY3Bw
IGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmNwcAppbmRleCA0MTY5ZjEyLi4xMGJjZmJj
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwCisrKyBiL1dlYkNv
cmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAKQEAgLTUxMiw2ICs1MTIsMTcgQEAgdjg6OkxvY2Fs
PHY4OjpWYWx1ZT4gVjhQcm94eTo6Y2FsbEZ1bmN0aW9uKHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9u
PiBmdW5jdGlvbiwgdjgKICAgICByZXR1cm4gcmVzdWx0OwogfQogCit2ODo6TG9jYWw8djg6OlZh
bHVlPiBWOFByb3h5OjpjYWxsRnVuY3Rpb25XaXRob3V0RnJhbWUodjg6OkhhbmRsZTx2ODo6RnVu
Y3Rpb24+IGZ1bmN0aW9uLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHJlY2VpdmVyLCBpbnQgYXJn
Yywgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGFyZ3NbXSkKK3sKKyAgICBWOEdDQ29udHJvbGxlcjo6
Y2hlY2tNZW1vcnlVc2FnZSgpOworICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHJlc3VsdCA9IGZ1
bmN0aW9uLT5DYWxsKHJlY2VpdmVyLCBhcmdjLCBhcmdzKTsKKworICAgIGlmICh2ODo6Vjg6Oklz
RGVhZCgpKQorICAgICAgICBoYW5kbGVGYXRhbEVycm9ySW5WOCgpOworCisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKwogdjg6OkxvY2FsPHY4OjpWYWx1ZT4gVjhQcm94eTo6bmV3SW5zdGFuY2Uodjg6
OkhhbmRsZTx2ODo6RnVuY3Rpb24+IGNvbnN0cnVjdG9yLCBpbnQgYXJnYywgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IGFyZ3NbXSkKIHsKICAgICAvLyBObyBhcnRpZmljaWFsIGxpbWl0YXRpb25zIG9u
IHRoZSBkZXB0aCBvZiByZWN1cnNpb24sIHNlZSBjb21tZW50IGluCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5o
CmluZGV4IGYyNDgzNWYuLjEzNDJiNmYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvdjgv
VjhQcm94eS5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5oCkBAIC0yMjAsNiAr
MjIwLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBDYWxsIHRoZSBmdW5jdGlv
biB3aXRoIHRoZSBnaXZlbiByZWNlaXZlciBhbmQgYXJndW1lbnRzLgogICAgICAgICB2ODo6TG9j
YWw8djg6OlZhbHVlPiBjYWxsRnVuY3Rpb24odjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+LCB2ODo6
SGFuZGxlPHY4OjpPYmplY3Q+LCBpbnQgYXJnYywgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGFyZ3Zb
XSk7CiAKKyAgICAgICAgLy8gQ2FsbCB0aGUgZnVuY3Rpb24gd2l0aCB0aGUgZ2l2ZW4gcmVjZWl2
ZXIgYW5kIGFyZ3VtZW50cy4KKyAgICAgICAgc3RhdGljIHY4OjpMb2NhbDx2ODo6VmFsdWU+IGNh
bGxGdW5jdGlvbldpdGhvdXRGcmFtZSh2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4sIHY4OjpIYW5k
bGU8djg6Ok9iamVjdD4sIGludCBhcmdjLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYXJndltdKTsK
KwogICAgICAgICAvLyBDYWxsIHRoZSBmdW5jdGlvbiBhcyBjb25zdHJ1Y3RvciB3aXRoIHRoZSBn
aXZlbiBhcmd1bWVudHMuCiAgICAgICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IG5ld0luc3RhbmNl
KHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiwgaW50IGFyZ2MsIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBhcmd2W10pOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1
c3RvbUlEQkNhbGxiYWNrcy5oIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21J
REJDYWxsYmFja3MuaAppbmRleCBjNzFhZWExLi44MDZmYTc2IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUlEQkNhbGxiYWNrcy5oCisrKyBiL1dlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tSURCQ2FsbGJhY2tzLmgKQEAgLTMxLDEwICszMSwx
MiBAQAogI2lmbmRlZiBWOEN1c3RvbUlEQkNhbGxiYWNrc19oCiAjZGVmaW5lIFY4Q3VzdG9tSURC
Q2FsbGJhY2tzX2gKIAorI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIK
ICNpbmNsdWRlICJJREJEYXRhYmFzZUVycm9yLmgiCiAjaW5jbHVkZSAiVjhDdXN0b21Wb2lkQ2Fs
bGJhY2suaCIKICNpbmNsdWRlICJWOElEQkRhdGFiYXNlRXJyb3IuaCIKKyNpbmNsdWRlICJXb3Js
ZENvbnRleHRIYW5kbGUuaCIKICNpbmNsdWRlIDx2OC5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KQEAgLTQ4LDkgKzUwLDkgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogdGVtcGxhdGUgPHR5cGVuYW1lIFJlc3VsdFR5cGUsIHR5cGVuYW1l
IFJlc3VsdFdyYXBwZXJUeXBlPgogY2xhc3MgVjhDdXN0b21JREJDYWxsYmFja3MgOiBwdWJsaWMg
SURCQ2FsbGJhY2tzPFJlc3VsdFR5cGU+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0
cjxWOEN1c3RvbUlEQkNhbGxiYWNrcz4gY3JlYXRlKHY4OjpMb2NhbDx2ODo6VmFsdWU+IG9uU3Vj
Y2Vzcywgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gb25FcnJvciwgRnJhbWUqIGZyYW1lKQorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFY4Q3VzdG9tSURCQ2FsbGJhY2tzPiBjcmVhdGUodjg6OkxvY2FsPHY4
OjpWYWx1ZT4gb25TdWNjZXNzLCB2ODo6TG9jYWw8djg6OlZhbHVlPiBvbkVycm9yLCBTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KQogICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBWOEN1c3RvbUlEQkNhbGxiYWNrcyhvblN1Y2Nlc3MsIG9uRXJy
b3IsIGZyYW1lKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVjhDdXN0b21JREJDYWxs
YmFja3Mob25TdWNjZXNzLCBvbkVycm9yLCBzY3JpcHRFeGVjdXRpb25Db250ZXh0KSk7CiAgICAg
fQogCiAgICAgdmlydHVhbCB+VjhDdXN0b21JREJDYWxsYmFja3MoKQpAQCAtNjEsNTQgKzYzLDU3
IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0cjxSZXN1
bHRUeXBlPiByZXN1bHQpCiAgICAgewotICAgICAgICBpZiAobV9vblN1Y2Nlc3MuSXNFbXB0eSgp
KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2Nv
cGU7Ci0gICAgICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQgPSBWOFByb3h5Ojpj
b250ZXh0KG1fZnJhbWUuZ2V0KCkpOwotICAgICAgICBpZiAoY29udGV4dC5Jc0VtcHR5KCkpCi0g
ICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdjg6OkNvbnRleHQ6OlNjb3BlIHNjb3BlKGNv
bnRleHQpOwotICAgICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYXJndltdID0gewotICAgICAg
ICAgICAgdG9WOChSZXN1bHRXcmFwcGVyVHlwZTo6Y3JlYXRlKHJlc3VsdCkpCi0gICAgICAgIH07
Ci0gICAgICAgIFJlZlB0cjxGcmFtZT4gcHJvdGVjdG9yKG1fZnJhbWUpOwotICAgICAgICBib29s
IGNhbGxiYWNrUmV0dXJuVmFsdWUgPSBmYWxzZTsKLSAgICAgICAgLy8gRklYTUU6IERvIHdlIGNh
cmUgaWYgdGhpcyB0aGluZyByZXR1cm5zIHRydWUgKGkuZS4gaXQgcmFpc2VkIGFuIGV4Y2VwdGlv
bik/Ci0gICAgICAgIGludm9rZUNhbGxiYWNrKG1fb25TdWNjZXNzLCAxLCBhcmd2LCBjYWxsYmFj
a1JldHVyblZhbHVlKTsKKyAgICAgICAgb25FdmVudChtX29uU3VjY2VzcywgUmVzdWx0V3JhcHBl
clR5cGU6OmNyZWF0ZShyZXN1bHQpKTsKICAgICB9CiAKICAgICB2aXJ0dWFsIHZvaWQgb25FcnJv
cihQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGVycm9yKQogICAgIHsKLSAgICAgICAgaWYg
KG1fb25FcnJvci5Jc0VtcHR5KCkpCisgICAgICAgIG9uRXZlbnQobV9vbkVycm9yLCBlcnJvcik7
CisgICAgfQorCisgICAgLy8gRklYTUU6IEhhbmRsZSBzdXNwZW5kL3Jlc3VtZSBjb3JyZWN0bHku
CisKK3ByaXZhdGU6CisgICAgVjhDdXN0b21JREJDYWxsYmFja3Modjg6OkxvY2FsPHY4OjpWYWx1
ZT4gb25TdWNjZXNzLCB2ODo6TG9jYWw8djg6OlZhbHVlPiBvbkVycm9yLCBTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KQorICAgICAgICA6IElEQkNhbGxiYWNr
czxSZXN1bHRUeXBlPihzY3JpcHRFeGVjdXRpb25Db250ZXh0LCB0aGlzKQorICAgICAgICAsIG1f
b25TdWNjZXNzKG9uU3VjY2Vzcy0+SXNPYmplY3QoKSA/IHY4OjpQZXJzaXN0ZW50PHY4OjpPYmpl
Y3Q+OjpOZXcob25TdWNjZXNzLT5Ub09iamVjdCgpKSA6IHY4OjpQZXJzaXN0ZW50PHY4OjpPYmpl
Y3Q+KCkpCisgICAgICAgICwgbV9vbkVycm9yKG9uRXJyb3ItPklzT2JqZWN0KCkgPyB2ODo6UGVy
c2lzdGVudDx2ODo6T2JqZWN0Pjo6TmV3KG9uRXJyb3ItPlRvT2JqZWN0KCkpIDogdjg6OlBlcnNp
c3RlbnQ8djg6Ok9iamVjdD4oKSkKKyAgICAgICAgLCBtX3dvcmxkQ29udGV4dChVc2VDdXJyZW50
V29ybGQpCisgICAgeworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUeXBlPgorICAg
IHZvaWQgb25FdmVudCh2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiBjYWxsYmFjaywgUGFzc1Jl
ZlB0cjxUeXBlPiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICghQWN0aXZlRE9NT2JqZWN0Ojpz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCiAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlm
IChjYWxsYmFjay5Jc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm47CisKICAgICAgICAgdjg6
OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwotICAgICAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0
PiBjb250ZXh0ID0gVjhQcm94eTo6Y29udGV4dChtX2ZyYW1lLmdldCgpKTsKKyAgICAgICAgdjg6
OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCA9IHRvVjhDb250ZXh0KEFjdGl2ZURPTU9iamVj
dDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBtX3dvcmxkQ29udGV4dCk7CiAgICAgICAgIGlm
IChjb250ZXh0LklzRW1wdHkoKSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICB2ODo6
Q29udGV4dDo6U2NvcGUgc2NvcGUoY29udGV4dCk7CiAgICAgICAgIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBhcmd2W10gPSB7Ci0gICAgICAgICAgICB0b1Y4KGVycm9yKQorICAgICAgICAgICAgdG9W
OCh2YWx1ZSkKICAgICAgICAgfTsKLSAgICAgICAgUmVmUHRyPEZyYW1lPiBwcm90ZWN0b3IobV9m
cmFtZSk7CisKKyAgICAgICAgLy8gRklYTUU6IE1ha2UgdGhpcyB3b3JrIGZvciB3b3JrZXJzLgor
ICAgICAgICBBU1NFUlQoQWN0aXZlRE9NT2JqZWN0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkt
PmlzRG9jdW1lbnQoKSk7CisgICAgICAgIFJlZlB0cjxGcmFtZT4gcHJvdGVjdG9yKHN0YXRpY19j
YXN0PERvY3VtZW50Kj4oQWN0aXZlRE9NT2JqZWN0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkp
LT5mcmFtZSgpKTsKKwogICAgICAgICBib29sIGNhbGxiYWNrUmV0dXJuVmFsdWUgPSBmYWxzZTsK
ICAgICAgICAgLy8gRklYTUU6IERvIHdlIGNhcmUgaWYgdGhpcyB0aGluZyByZXR1cm5zIHRydWUg
KGkuZS4gaXQgcmFpc2VkIGFuIGV4Y2VwdGlvbik/Ci0gICAgICAgIGludm9rZUNhbGxiYWNrKG1f
b25FcnJvciwgMSwgYXJndiwgY2FsbGJhY2tSZXR1cm5WYWx1ZSk7CisgICAgICAgIGludm9rZUNh
bGxiYWNrKGNhbGxiYWNrLCAxLCBhcmd2LCBjYWxsYmFja1JldHVyblZhbHVlKTsKICAgICB9CiAK
LXByaXZhdGU6Ci0gICAgVjhDdXN0b21JREJDYWxsYmFja3Modjg6OkxvY2FsPHY4OjpWYWx1ZT4g
b25TdWNjZXNzLCB2ODo6TG9jYWw8djg6OlZhbHVlPiBvbkVycm9yLCBGcmFtZSogZnJhbWUpCi0g
ICAgICAgIDogbV9vblN1Y2Nlc3Mob25TdWNjZXNzLT5Jc09iamVjdCgpID8gdjg6OlBlcnNpc3Rl
bnQ8djg6Ok9iamVjdD46Ok5ldyhvblN1Y2Nlc3MtPlRvT2JqZWN0KCkpIDogdjg6OlBlcnNpc3Rl
bnQ8djg6Ok9iamVjdD4oKSkKLSAgICAgICAgLCBtX29uRXJyb3Iob25FcnJvci0+SXNPYmplY3Qo
KSA/IHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpOZXcob25FcnJvci0+VG9PYmplY3QoKSkg
OiB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PigpKQotICAgICAgICAsIG1fZnJhbWUoZnJhbWUp
Ci0gICAgewotICAgIH0KLQotICAgIC8vIEZJWE1FOiBTaG91bGQgdGhlc2UgYmUgdjg6OkZ1bmN0
aW9ucz8gIEZvciBzb21lIHJlYXNvbiwgVm9pZENhbGxiYWNrICh3aGljaCB0aGlzIGNvcGllZCkg
dXNlcyB2ODo6T2JqZWN0cy4KKyAgICAvLyBGSVhNRTogVXNlIE93bkhhbmRsZXMuCiAgICAgdjg6
OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gbV9vblN1Y2Nlc3M7CiAgICAgdjg6OlBlcnNpc3RlbnQ8
djg6Ok9iamVjdD4gbV9vbkVycm9yOwotICAgIFJlZlB0cjxGcmFtZT4gbV9mcmFtZTsKKworICAg
IFdvcmxkQ29udGV4dEhhbmRsZSBtX3dvcmxkQ29udGV4dDsKIH07CiAKIH0KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NV2luZG93Q3VzdG9tLmNwcCBiL1dlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NV2luZG93Q3VzdG9tLmNwcAppbmRleCA2MjE1ZDM4
Li4yMmUxNThiIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVdp
bmRvd0N1c3RvbS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhET01XaW5k
b3dDdXN0b20uY3BwCkBAIC0zMjAsOCArMzIwLDExIEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBW
OERPTVdpbmRvdzo6cG9zdE1lc3NhZ2VDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdz
CiAgICAgRE9NV2luZG93KiBzb3VyY2UgPSBWOFByb3h5OjpyZXRyaWV2ZUZyYW1lRm9yQ2FsbGlu
Z0NvbnRleHQoKS0+ZG9tV2luZG93KCk7CiAgICAgQVNTRVJUKHNvdXJjZS0+ZnJhbWUoKSk7CiAK
LSAgICB2ODo6VHJ5Q2F0Y2ggdHJ5Q2F0Y2g7Ci0gICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4gbWVzc2FnZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGFyZ3NbMF0pOwor
ICAgIGJvb2wgZGlkVGhyb3cgPSBmYWxzZTsKKyAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiBtZXNzYWdlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoYXJnc1swXSwgZGlk
VGhyb3cpOworICAgIGlmIChkaWRUaHJvdykKKyAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQo
KTsKKwogICAgIE1lc3NhZ2VQb3J0QXJyYXkgcG9ydEFycmF5OwogICAgIFN0cmluZyB0YXJnZXRP
cmlnaW47CiAKQEAgLTMyOSw2ICszMzIsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhET01X
aW5kb3c6OnBvc3RNZXNzYWdlQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncwogICAg
IC8vICAgcG9zdE1lc3NhZ2UobWVzc2FnZSwgcG9ydCwgdGFyZ2V0T3JpZ2luKTsKICAgICAvLyBv
cgogICAgIC8vICAgcG9zdE1lc3NhZ2UobWVzc2FnZSwgdGFyZ2V0T3JpZ2luKTsKKyAgICB2ODo6
VHJ5Q2F0Y2ggdHJ5Q2F0Y2g7CiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPiAyKSB7CiAgICAgICAg
IGlmICghZ2V0TWVzc2FnZVBvcnRBcnJheShhcmdzWzFdLCBwb3J0QXJyYXkpKQogICAgICAgICAg
ICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4RGVkaWNhdGVkV29ya2VyQ29udGV4dEN1c3RvbS5jcHAgYi9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOERlZGljYXRlZFdvcmtlckNvbnRleHRDdXN0b20uY3BwCmluZGV4
IDQ0ODZkYmUuLjhmY2Y5YTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4RGVkaWNhdGVkV29ya2VyQ29udGV4dEN1c3RvbS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhEZWRpY2F0ZWRXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcApAQCAtNDYsNyAr
NDYsMTAgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4RGVkaWNhdGVkV29ya2VyQ29udGV4dDo6
cG9zdE1lc3NhZ2VDYWxsYmFjayhjb25zdCB2ODo6QXIKIHsKICAgICBJTkNfU1RBVFMoTCJET00u
RGVkaWNhdGVkV29ya2VyQ29udGV4dC5wb3N0TWVzc2FnZSIpOwogICAgIERlZGljYXRlZFdvcmtl
ckNvbnRleHQqIHdvcmtlckNvbnRleHQgPSBWOERlZGljYXRlZFdvcmtlckNvbnRleHQ6OnRvTmF0
aXZlKGFyZ3MuSG9sZGVyKCkpOwotICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IG1l
c3NhZ2UgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShhcmdzWzBdKTsKKyAgICBib29s
IGRpZFRocm93ID0gZmFsc2U7CisgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gbWVz
c2FnZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGFyZ3NbMF0sIGRpZFRocm93KTsK
KyAgICBpZiAoZGlkVGhyb3cpCisgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiAgICAg
TWVzc2FnZVBvcnRBcnJheSBwb3J0QXJyYXk7CiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPiAxKSB7
CiAgICAgICAgIGlmICghZ2V0TWVzc2FnZVBvcnRBcnJheShhcmdzWzFdLCBwb3J0QXJyYXkpKQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIaXN0b3J5Q3VzdG9tLmNw
cCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SGlzdG9yeUN1c3RvbS5jcHAKaW5kZXgg
ZWRmYzJkNi4uYWQyYjlhOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhIaXN0b3J5Q3VzdG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhp
c3RvcnlDdXN0b20uY3BwCkBAIC00Myw3ICs0MywxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEhpc3Rvcnk6OnB1c2hTdGF0ZUNhbGxiYWNrKGNvbnN0
IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7Ci0gICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZT4gaGlzdG9yeVN0YXRlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoYXJnc1swXSk7
CisgICAgYm9vbCBkaWRUaHJvdyA9IGZhbHNlOworICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+IGhpc3RvcnlTdGF0ZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGFyZ3Nb
MF0sIGRpZFRocm93KTsKKyAgICBpZiAoZGlkVGhyb3cpCisgICAgICAgIHJldHVybiB2ODo6VW5k
ZWZpbmVkKCk7CiAKICAgICB2ODo6VHJ5Q2F0Y2ggdHJ5Q2F0Y2g7CiAgICAgU3RyaW5nIHRpdGxl
ID0gdG9XZWJDb3JlU3RyaW5nV2l0aE51bGxPclVuZGVmaW5lZENoZWNrKGFyZ3NbMV0pOwpAQCAt
NjQsNyArNjcsMTAgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SGlzdG9yeTo6cHVzaFN0YXRl
Q2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIAogdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IFY4SGlzdG9yeTo6cmVwbGFjZVN0YXRlQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYg
YXJncykKIHsKLSAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBoaXN0b3J5U3RhdGUg
PSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShhcmdzWzBdKTsKKyAgICBib29sIGRpZFRo
cm93ID0gZmFsc2U7CisgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gaGlzdG9yeVN0
YXRlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoYXJnc1swXSwgZGlkVGhyb3cpOwor
ICAgIGlmIChkaWRUaHJvdykKKyAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKIAogICAg
IHY4OjpUcnlDYXRjaCB0cnlDYXRjaDsKICAgICBTdHJpbmcgdGl0bGUgPSB0b1dlYkNvcmVTdHJp
bmdXaXRoTnVsbE9yVW5kZWZpbmVkQ2hlY2soYXJnc1sxXSk7CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEluZGV4ZWREYXRhYmFzZVJlcXVlc3RDdXN0b20uY3BwIGIv
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJbmRleGVkRGF0YWJhc2VSZXF1ZXN0Q3VzdG9t
LmNwcAppbmRleCBlODQ4ZDg2Li5hZmFjNzAzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOEluZGV4ZWREYXRhYmFzZVJlcXVlc3RDdXN0b20uY3BwCisrKyBiL1dlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5kZXhlZERhdGFiYXNlUmVxdWVzdEN1c3RvbS5jcHAK
QEAgLTcyLDcgKzcyLDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SW5kZXhlZERhdGFiYXNl
UmVxdWVzdDo6b3BlbkNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMKIAogICAgIEZyYW1lKiBm
cmFtZSA9IFY4UHJveHk6OnJldHJpZXZlRnJhbWVGb3JDdXJyZW50Q29udGV4dCgpOwogICAgIFJl
ZlB0cjxWOEN1c3RvbUlEQkNhbGxiYWNrczxJREJEYXRhYmFzZSwgSURCRGF0YWJhc2VSZXF1ZXN0
PiA+IGNhbGxiYWNrcyA9Ci0gICAgICAgIFY4Q3VzdG9tSURCQ2FsbGJhY2tzPElEQkRhdGFiYXNl
LCBJREJEYXRhYmFzZVJlcXVlc3Q+OjpjcmVhdGUob25TdWNjZXNzLCBvbkVycm9yLCBmcmFtZSk7
CisgICAgICAgIFY4Q3VzdG9tSURCQ2FsbGJhY2tzPElEQkRhdGFiYXNlLCBJREJEYXRhYmFzZVJl
cXVlc3Q+OjpjcmVhdGUob25TdWNjZXNzLCBvbkVycm9yLCBmcmFtZS0+ZG9jdW1lbnQoKSk7CiAK
ICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBpbXAtPm9wZW4obmFtZSwgZGVzY3JpcHRp
b24sIG1vZGlmeURhdGFiYXNlLCBlYywgY2FsbGJhY2tzKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4TWVzc2FnZVBvcnRDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhNZXNzYWdlUG9ydEN1c3RvbS5jcHAKaW5kZXggNjQwMDQxYi4uYzQx
ZWQzOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhNZXNzYWdlUG9y
dEN1c3RvbS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhNZXNzYWdlUG9y
dEN1c3RvbS5jcHAKQEAgLTQ2LDcgKzQ2LDEwIEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOE1l
c3NhZ2VQb3J0Ojpwb3N0TWVzc2FnZUNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyCiB7
CiAgICAgSU5DX1NUQVRTKCJET00uTWVzc2FnZVBvcnQucG9zdE1lc3NhZ2UiKTsKICAgICBNZXNz
YWdlUG9ydCogbWVzc2FnZVBvcnQgPSBWOE1lc3NhZ2VQb3J0Ojp0b05hdGl2ZShhcmdzLkhvbGRl
cigpKTsKLSAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBtZXNzYWdlID0gU2VyaWFs
aXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoYXJnc1swXSk7CisgICAgYm9vbCBkaWRUaHJvdyA9IGZh
bHNlOworICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IG1lc3NhZ2UgPSBTZXJpYWxp
emVkU2NyaXB0VmFsdWU6OmNyZWF0ZShhcmdzWzBdLCBkaWRUaHJvdyk7CisgICAgaWYgKGRpZFRo
cm93KQorICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogICAgIE1lc3NhZ2VQb3J0QXJy
YXkgcG9ydEFycmF5OwogICAgIGlmIChhcmdzLkxlbmd0aCgpID4gMSkgewogICAgICAgICBpZiAo
IWdldE1lc3NhZ2VQb3J0QXJyYXkoYXJnc1sxXSwgcG9ydEFycmF5KSkKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4UG9wU3RhdGVFdmVudEN1c3RvbS5jcHAgYi9XZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFBvcFN0YXRlRXZlbnRDdXN0b20uY3BwCmluZGV4IDQ2
ZTk5MjkuLmNkYjE2MGQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
UG9wU3RhdGVFdmVudEN1c3RvbS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhQb3BTdGF0ZUV2ZW50Q3VzdG9tLmNwcApAQCAtMzUsNiArMzUsOCBAQAogI2luY2x1ZGUgIlNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIKIAorI2luY2x1ZGUg
PHY4Lmg+CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4
UG9wU3RhdGVFdmVudDo6aW5pdFBvcFN0YXRlRXZlbnRDYWxsYmFjayhjb25zdCB2ODo6QXJndW1l
bnRzJiBhcmdzKQpAQCAtNDQsNyArNDYsMTEgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4UG9w
U3RhdGVFdmVudDo6aW5pdFBvcFN0YXRlRXZlbnRDYWxsYmFjayhjb25zdCB2ODo6QXJndW0KICAg
ICBTdHJpbmcgdHlwZUFyZyA9IHY4VmFsdWVUb1dlYkNvcmVTdHJpbmcoYXJnc1swXSk7CiAgICAg
Ym9vbCBjYW5CdWJibGVBcmcgPSBhcmdzWzFdLT5Cb29sZWFuVmFsdWUoKTsKICAgICBib29sIGNh
bmNlbGFibGVBcmcgPSBhcmdzWzJdLT5Cb29sZWFuVmFsdWUoKTsKLSAgICBSZWZQdHI8U2VyaWFs
aXplZFNjcmlwdFZhbHVlPiBzdGF0ZUFyZyA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRl
KGFyZ3NbM10pOworCisgICAgYm9vbCBkaWRUaHJvdyA9IGZhbHNlOworICAgIFJlZlB0cjxTZXJp
YWxpemVkU2NyaXB0VmFsdWU+IHN0YXRlQXJnID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVh
dGUoYXJnc1szXSwgZGlkVGhyb3cpOworICAgIGlmIChkaWRUaHJvdykKKyAgICAgICAgcmV0dXJu
IHY4OjpVbmRlZmluZWQoKTsKIAogICAgIFBvcFN0YXRlRXZlbnQqIGV2ZW50ID0gVjhQb3BTdGF0
ZUV2ZW50Ojp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKICAgICBldmVudC0+aW5pdFBvcFN0YXRl
RXZlbnQodHlwZUFyZywgY2FuQnViYmxlQXJnLCBjYW5jZWxhYmxlQXJnLCBzdGF0ZUFyZy5yZWxl
YXNlKCkpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXb3JrZXJD
dXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXb3JrZXJDdXN0b20uY3Bw
CmluZGV4IGRjZjczYzIuLmZkYzY4MTUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4V29ya2VyQ3VzdG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOFdvcmtlckN1c3RvbS5jcHAKQEAgLTkxLDcgKzkxLDEwIEBAIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBWOFdvcmtlcjo6cG9zdE1lc3NhZ2VDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBh
cmdzKQogewogICAgIElOQ19TVEFUUygiRE9NLldvcmtlci5wb3N0TWVzc2FnZSIpOwogICAgIFdv
cmtlciogd29ya2VyID0gVjhXb3JrZXI6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwotICAgIFJl
ZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IG1lc3NhZ2UgPSBTZXJpYWxpemVkU2NyaXB0VmFs
dWU6OmNyZWF0ZShhcmdzWzBdKTsKKyAgICBib29sIGRpZFRocm93ID0gZmFsc2U7CisgICAgUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gbWVzc2FnZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZTo6Y3JlYXRlKGFyZ3NbMF0sIGRpZFRocm93KTsKKyAgICBpZiAoZGlkVGhyb3cpCisgICAgICAg
IHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiAgICAgTWVzc2FnZVBvcnRBcnJheSBwb3J0QXJyYXk7
CiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPiAxKSB7CiAgICAgICAgIGlmICghZ2V0TWVzc2FnZVBv
cnRBcnJheShhcmdzWzFdLCBwb3J0QXJyYXkpKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9icmlkZ2Uv
bnBhcGkuaCBiL1dlYkNvcmUvYnJpZGdlL25wYXBpLmgKaW5kZXggYzZjZDU1Ny4uNGE4NDkyZSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9icmlkZ2UvbnBhcGkuaAorKysgYi9XZWJDb3JlL2JyaWRnZS9u
cGFwaS5oCkBAIC01MCw3ICs1MCw3IEBACiAjZGVmaW5lIEpSSUVudiAgdm9pZAogI2VuZGlmCiAK
LSNpZmRlZiBfV0lOMzIKKyNpZiBkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoX19TWU1CSUFO
MzJfXykKICMgICAgaWZuZGVmIFhQX1dJTgogIyAgICAgICAgZGVmaW5lIFhQX1dJTiAxCiAjICAg
IGVuZGlmIC8qIFhQX1dJTiAqLwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9jb25maWcuaCBiL1dlYkNv
cmUvY29uZmlnLmgKaW5kZXggOGRmMTUzZS4uZGExYjcwNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9j
b25maWcuaAorKysgYi9XZWJDb3JlL2NvbmZpZy5oCkBAIC00Myw4ICs0Myw2IEBACiAjZGVmaW5l
IFdFQktJVF9FWFBPUlREQVRBCiAjZW5kaWYKIAotI2RlZmluZSBNT0JJTEUgMAotCiAjaWZkZWYg
X19BUFBMRV9fCiAjZGVmaW5lIEhBVkVfRlVOQ19VU0xFRVAgMQogI2VuZGlmIC8qIF9fQVBQTEVf
XyAqLwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9jc3MvQ1NTR3JhbW1hci55IGIvV2ViQ29yZS9jc3Mv
Q1NTR3JhbW1hci55CmluZGV4IDcxODNlZmEuLjljZjNjOTAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
Y3NzL0NTU0dyYW1tYXIueQorKysgYi9XZWJDb3JlL2Nzcy9DU1NHcmFtbWFyLnkKQEAgLTExNzMs
NyArMTE3Myw3IEBAIHBzZXVkbzoKICAgICB9CiAgICAgLy8gdXNlZCBieSA6bm90CiAgICAgfCAn
OicgTk9URlVOQ1RJT04gbWF5YmVfc3BhY2Ugc2ltcGxlX3NlbGVjdG9yIG1heWJlX3NwYWNlICcp
JyB7Ci0gICAgICAgIGlmICghJDQgfHwgJDQtPnNpbXBsZVNlbGVjdG9yKCkgfHwgJDQtPnRhZ0hp
c3RvcnkoKSB8fCAkNC0+bWF0Y2hlc1BzZXVkb0VsZW1lbnQoKSkKKyAgICAgICAgaWYgKCEkNCB8
fCAhJDQtPmlzU2ltcGxlKCkpCiAgICAgICAgICAgICAkJCA9IDA7CiAgICAgICAgIGVsc2Ugewog
ICAgICAgICAgICAgQ1NTUGFyc2VyKiBwID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyKj4ocGFyc2Vy
KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvY3NzL0NTU1NlbGVjdG9yLmNwcCBiL1dlYkNvcmUvY3Nz
L0NTU1NlbGVjdG9yLmNwcAppbmRleCA0NTM2NDJhLi45Y2ViNTAzIDEwMDY0NAotLS0gYS9XZWJD
b3JlL2Nzcy9DU1NTZWxlY3Rvci5jcHAKKysrIGIvV2ViQ29yZS9jc3MvQ1NTU2VsZWN0b3IuY3Bw
CkBAIC01NjYsNiArNTY2LDMxIEBAIGJvb2wgQ1NTU2VsZWN0b3I6Om1hdGNoTnRoKGludCBjb3Vu
dCkKICAgICByZXR1cm4gbV9kYXRhLm1fcmFyZURhdGEtPm1hdGNoTnRoKGNvdW50KTsKIH0KIAor
Ym9vbCBDU1NTZWxlY3Rvcjo6aXNTaW1wbGUoKSBjb25zdAoreworICAgIGlmIChzaW1wbGVTZWxl
Y3RvcigpIHx8IHRhZ0hpc3RvcnkoKSB8fCBtYXRjaGVzUHNldWRvRWxlbWVudCgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBpbnQgbnVtQ29uZGl0aW9ucyA9IDA7CisKKyAgICAvLyBo
YXNUYWcoKSBjYW5ub3QgYmUgYmUgdXNlZCBoZXJlIGJlY2F1c2UgbmFtZXNwYWNlIG1heSBub3Qg
YmUgbnVsbEF0b20uCisgICAgLy8gRXhhbXBsZToKKyAgICAvLyAgICAgQG5hbWVzcGFjZSAiaHR0
cDovL3d3dy53My5vcmcvMjAwMC9zdmciOworICAgIC8vICAgICBzdmc6bm90KDpyb290KSB7IC4u
LgorICAgIGlmIChtX3RhZyAhPSBzdGFyQXRvbSkKKyAgICAgICAgbnVtQ29uZGl0aW9ucysrOwor
CisgICAgaWYgKG1fbWF0Y2ggPT0gSWQgfHwgbV9tYXRjaCA9PSBDbGFzcyB8fCBtX21hdGNoID09
IFBzZXVkb0NsYXNzKQorICAgICAgICBudW1Db25kaXRpb25zKys7CisKKyAgICBpZiAobV9oYXNS
YXJlRGF0YSAmJiBtX2RhdGEubV9yYXJlRGF0YS0+bV9hdHRyaWJ1dGUgIT0gYW55UU5hbWUoKSkK
KyAgICAgICAgbnVtQ29uZGl0aW9ucysrOworCisgICAgLy8gbnVtQ29uZGl0aW9ucyBpcyAwIGZv
ciBhIHVuaXZlcnNhbCBzZWxlY3Rvci4KKyAgICAvLyBudW1Db25kaXRpb25zIGlzIDEgZm9yIG90
aGVyIHNpbXBsZSBzZWxlY3RvcnMuCisgICAgcmV0dXJuIG51bUNvbmRpdGlvbnMgPD0gMTsKK30K
KwogLy8gYSBoZWxwZXIgZnVuY3Rpb24gZm9yIHBhcnNpbmcgbnRoLWFyZ3VtZW50cwogYm9vbCBD
U1NTZWxlY3Rvcjo6UmFyZURhdGE6OnBhcnNlTnRoKCkKIHsKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
Y3NzL0NTU1NlbGVjdG9yLmggYi9XZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvci5oCmluZGV4IGU1NGI1
ZDUuLjhkOWQ2NGMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvY3NzL0NTU1NlbGVjdG9yLmgKKysrIGIv
V2ViQ29yZS9jc3MvQ1NTU2VsZWN0b3IuaApAQCAtMjIzLDYgKzIyMyw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogICAgICAgICBib29sIGlzTGFzdEluU2VsZWN0b3JMaXN0KCkgY29uc3QgeyBy
ZXR1cm4gbV9pc0xhc3RJblNlbGVjdG9yTGlzdDsgfQogICAgICAgICB2b2lkIHNldExhc3RJblNl
bGVjdG9yTGlzdCgpIHsgbV9pc0xhc3RJblNlbGVjdG9yTGlzdCA9IHRydWU7IH0KKyAgICAgICAg
Ym9vbCBpc1NpbXBsZSgpIGNvbnN0OwogCiAgICAgICAgIG11dGFibGUgQXRvbWljU3RyaW5nIG1f
dmFsdWU7CiAgICAgICAgIFF1YWxpZmllZE5hbWUgbV90YWc7CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2RvbS9Eb2N1bWVudC5jcHAgYi9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5kZXggZTYyNmI4
Mi4uYWNhYmIyYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1dl
YkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAtNDY1Nyw0OSArNDY1NywxMyBAQCB2b2lkIERvY3Vt
ZW50OjpwYXJzZUROU1ByZWZldGNoQ29udHJvbEhlYWRlcihjb25zdCBTdHJpbmcmIGRuc1ByZWZl
dGNoQ29udHJvbCkKIAogdm9pZCBEb2N1bWVudDo6cmVwb3J0RXhjZXB0aW9uKGNvbnN0IFN0cmlu
ZyYgZXJyb3JNZXNzYWdlLCBpbnQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwp
CiB7Ci0gICAgaWYgKERPTVdpbmRvdyogd2luZG93ID0gZG9tV2luZG93KCkpCi0gICAgICAgIHdp
bmRvdy0+Y29uc29sZSgpLT5hZGRNZXNzYWdlKEpTTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5
cGUsIEVycm9yTWVzc2FnZUxldmVsLCBlcnJvck1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZVVS
TCk7Ci19Ci0KLXZvaWQgRG9jdW1lbnQ6OmFkZE1lc3NhZ2UoTWVzc2FnZURlc3RpbmF0aW9uIGRl
c3RpbmF0aW9uLCBNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2FnZVR5cGUgdHlwZSwgTWVzc2Fn
ZUxldmVsIGxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIHVuc2lnbmVkIGxpbmVOdW1iZXIs
IGNvbnN0IFN0cmluZyYgc291cmNlVVJMKQotewotICAgIHN3aXRjaCAoZGVzdGluYXRpb24pIHsK
LSNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIGNhc2UgSW5zcGVjdG9yQ29udHJvbGxlckRlc3Rp
bmF0aW9uOgotICAgICAgICBpZiAocGFnZSgpKQotICAgICAgICAgICAgcGFnZSgpLT5pbnNwZWN0
b3JDb250cm9sbGVyKCktPmFkZE1lc3NhZ2VUb0NvbnNvbGUoc291cmNlLCB0eXBlLCBsZXZlbCwg
bWVzc2FnZSwgbGluZU51bWJlciwgc291cmNlVVJMKTsKLSAgICAgICAgcmV0dXJuOwotI2VuZGlm
Ci0gICAgY2FzZSBDb25zb2xlRGVzdGluYXRpb246Ci0gICAgICAgIGlmIChET01XaW5kb3cqIHdp
bmRvdyA9IGRvbVdpbmRvdygpKQotICAgICAgICAgICAgd2luZG93LT5jb25zb2xlKCktPmFkZE1l
c3NhZ2Uoc291cmNlLCB0eXBlLCBsZXZlbCwgbWVzc2FnZSwgbGluZU51bWJlciwgc291cmNlVVJM
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0K
LQotdm9pZCBEb2N1bWVudDo6cmVzb3VyY2VSZXRyaWV2ZWRCeVhNTEh0dHBSZXF1ZXN0KHVuc2ln
bmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgU2NyaXB0U3RyaW5nJiBzb3VyY2VTdHJpbmcpCi17
Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBpZiAocGFnZSgpKQotICAgICAgICBwYWdlKCkt
Pmluc3BlY3RvckNvbnRyb2xsZXIoKS0+cmVzb3VyY2VSZXRyaWV2ZWRCeVhNTEh0dHBSZXF1ZXN0
KGlkZW50aWZpZXIsIHNvdXJjZVN0cmluZyk7Ci0jZW5kaWYKLSAgICBGcmFtZSogZnJhbWUgPSB0
aGlzLT5mcmFtZSgpOwotICAgIGlmIChmcmFtZSkgewotICAgICAgICBGcmFtZUxvYWRlciogZnJh
bWVMb2FkZXIgPSBmcmFtZS0+bG9hZGVyKCk7Ci0gICAgICAgIGZyYW1lTG9hZGVyLT5ub3RpZmll
cigpLT5kaWRMb2FkUmVzb3VyY2VCeVhNTEh0dHBSZXF1ZXN0KGlkZW50aWZpZXIsIHNvdXJjZVN0
cmluZyk7Ci0gICAgfQorICAgIGFkZE1lc3NhZ2UoSlNNZXNzYWdlU291cmNlLCBMb2dNZXNzYWdl
VHlwZSwgRXJyb3JNZXNzYWdlTGV2ZWwsIGVycm9yTWVzc2FnZSwgbGluZU51bWJlciwgc291cmNl
VVJMKTsKIH0KIAotdm9pZCBEb2N1bWVudDo6c2NyaXB0SW1wb3J0ZWQodW5zaWduZWQgbG9uZyBp
ZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVN0cmluZykKK3ZvaWQgRG9jdW1lbnQ6OmFk
ZE1lc3NhZ2UoTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VUeXBlIHR5cGUsIE1lc3NhZ2VM
ZXZlbCBsZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBj
b25zdCBTdHJpbmcmIHNvdXJjZVVSTCkKIHsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIGlm
IChwYWdlKCkpCi0gICAgICAgIHBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5zY3JpcHRJ
bXBvcnRlZChpZGVudGlmaWVyLCBzb3VyY2VTdHJpbmcpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFS
QU0oaWRlbnRpZmllcik7Ci0gICAgVU5VU0VEX1BBUkFNKHNvdXJjZVN0cmluZyk7Ci0jZW5kaWYK
KyAgICBpZiAoRE9NV2luZG93KiB3aW5kb3cgPSBkb21XaW5kb3coKSkKKyAgICAgICAgd2luZG93
LT5jb25zb2xlKCktPmFkZE1lc3NhZ2Uoc291cmNlLCB0eXBlLCBsZXZlbCwgbWVzc2FnZSwgbGlu
ZU51bWJlciwgc291cmNlVVJMKTsKIH0KIAogc3RydWN0IFBlcmZvcm1UYXNrQ29udGV4dCA6IE5v
bmNvcHlhYmxlIHsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL0RvY3VtZW50LmggYi9XZWJDb3Jl
L2RvbS9Eb2N1bWVudC5oCmluZGV4IGNjM2U1NTkuLmU5MjIzN2EgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvZG9tL0RvY3VtZW50LmgKKysrIGIvV2ViQ29yZS9kb20vRG9jdW1lbnQuaApAQCAtODY4LDkg
Kzg2OCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHBhcnNlRE5TUHJlZmV0Y2hDb250cm9sSGVhZGVy
KGNvbnN0IFN0cmluZyYpOwogCiAgICAgdmlydHVhbCB2b2lkIHJlcG9ydEV4Y2VwdGlvbihjb25z
dCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgaW50IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291
cmNlVVJMKTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRkTWVzc2FnZShNZXNzYWdlRGVzdGluYXRpb24s
IE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYg
bWVzc2FnZSwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpOwot
ICAgIHZpcnR1YWwgdm9pZCByZXNvdXJjZVJldHJpZXZlZEJ5WE1MSHR0cFJlcXVlc3QodW5zaWdu
ZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBTY3JpcHRTdHJpbmcmIHNvdXJjZVN0cmluZyk7Ci0g
ICAgdmlydHVhbCB2b2lkIHNjcmlwdEltcG9ydGVkKHVuc2lnbmVkIGxvbmcsIGNvbnN0IFN0cmlu
ZyYpOworICAgIHZpcnR1YWwgdm9pZCBhZGRNZXNzYWdlKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VU
eXBlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgdW5zaWduZWQgbGluZU51
bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpOwogICAgIHZpcnR1YWwgdm9pZCBwb3N0VGFz
ayhQYXNzT3duUHRyPFRhc2s+KTsgLy8gRXhlY3V0ZXMgdGhlIHRhc2sgb24gY29udGV4dCdzIHRo
cmVhZCBhc3luY2hyb25vdXNseS4KIAogI2lmIFVTRShKU0MpCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2RvbS9Eb2N1bWVudC5pZGwgYi9XZWJDb3JlL2RvbS9Eb2N1bWVudC5pZGwKaW5kZXggMjZlZDdm
ZC4uODhiZDYzOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vRG9jdW1lbnQuaWRsCisrKyBiL1dl
YkNvcmUvZG9tL0RvY3VtZW50LmlkbApAQCAtMzA2LDEyICszMDYsMTAgQEAgbW9kdWxlIGNvcmUg
ewogICAgICAgICBhdHRyaWJ1dGUgW0RvbnRFbnVtXSBFdmVudExpc3RlbmVyIG9ucmVzZXQ7CiAg
ICAgICAgIGF0dHJpYnV0ZSBbRG9udEVudW1dIEV2ZW50TGlzdGVuZXIgb25zZWFyY2g7CiAgICAg
ICAgIGF0dHJpYnV0ZSBbRG9udEVudW1dIEV2ZW50TGlzdGVuZXIgb25zZWxlY3RzdGFydDsKLSNp
ZiBkZWZpbmVkKEVOQUJMRV9UT1VDSF9FVkVOVFMpICYmIEVOQUJMRV9UT1VDSF9FVkVOVFMKLSAg
ICAgICAgYXR0cmlidXRlIFtEb250RW51bV0gRXZlbnRMaXN0ZW5lciBvbnRvdWNoc3RhcnQ7Ci0g
ICAgICAgIGF0dHJpYnV0ZSBbRG9udEVudW1dIEV2ZW50TGlzdGVuZXIgb250b3VjaG1vdmU7Ci0g
ICAgICAgIGF0dHJpYnV0ZSBbRG9udEVudW1dIEV2ZW50TGlzdGVuZXIgb250b3VjaGVuZDsKLSAg
ICAgICAgYXR0cmlidXRlIFtEb250RW51bV0gRXZlbnRMaXN0ZW5lciBvbnRvdWNoY2FuY2VsOwot
I2VuZGlmCisgICAgICAgIGF0dHJpYnV0ZSBbRG9udEVudW0sQ29uZGl0aW9uYWw9VE9VQ0hfRVZF
TlRTXSBFdmVudExpc3RlbmVyIG9udG91Y2hzdGFydDsKKyAgICAgICAgYXR0cmlidXRlIFtEb250
RW51bSxDb25kaXRpb25hbD1UT1VDSF9FVkVOVFNdIEV2ZW50TGlzdGVuZXIgb250b3VjaG1vdmU7
CisgICAgICAgIGF0dHJpYnV0ZSBbRG9udEVudW0sQ29uZGl0aW9uYWw9VE9VQ0hfRVZFTlRTXSBF
dmVudExpc3RlbmVyIG9udG91Y2hlbmQ7CisgICAgICAgIGF0dHJpYnV0ZSBbRG9udEVudW0sQ29u
ZGl0aW9uYWw9VE9VQ0hfRVZFTlRTXSBFdmVudExpc3RlbmVyIG9udG91Y2hjYW5jZWw7CiAjZW5k
aWYKICAgICB9OwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9FbGVtZW50LmlkbCBiL1dlYkNv
cmUvZG9tL0VsZW1lbnQuaWRsCmluZGV4IGU1NjViYzAuLjEzNjg1MDMgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvZG9tL0VsZW1lbnQuaWRsCisrKyBiL1dlYkNvcmUvZG9tL0VsZW1lbnQuaWRsCkBAIC0x
OTUsMTIgKzE5NSwxMCBAQCBtb2R1bGUgY29yZSB7CiAgICAgICAgIGF0dHJpYnV0ZSBbRG9udEVu
dW1dIEV2ZW50TGlzdGVuZXIgb25yZXNldDsKICAgICAgICAgYXR0cmlidXRlIFtEb250RW51bV0g
RXZlbnRMaXN0ZW5lciBvbnNlYXJjaDsKICAgICAgICAgYXR0cmlidXRlIFtEb250RW51bV0gRXZl
bnRMaXN0ZW5lciBvbnNlbGVjdHN0YXJ0OwotI2lmIGRlZmluZWQoRU5BQkxFX1RPVUNIX0VWRU5U
UykgJiYgRU5BQkxFX1RPVUNIX0VWRU5UUwotICAgICAgICBhdHRyaWJ1dGUgW0RvbnRFbnVtXSBF
dmVudExpc3RlbmVyIG9udG91Y2hzdGFydDsKLSAgICAgICAgYXR0cmlidXRlIFtEb250RW51bV0g
RXZlbnRMaXN0ZW5lciBvbnRvdWNobW92ZTsKLSAgICAgICAgYXR0cmlidXRlIFtEb250RW51bV0g
RXZlbnRMaXN0ZW5lciBvbnRvdWNoZW5kOwotICAgICAgICBhdHRyaWJ1dGUgW0RvbnRFbnVtXSBF
dmVudExpc3RlbmVyIG9udG91Y2hjYW5jZWw7Ci0jZW5kaWYKKyAgICAgICAgYXR0cmlidXRlIFtE
b250RW51bSxDb25kaXRpb25hbD1UT1VDSF9FVkVOVFNdIEV2ZW50TGlzdGVuZXIgb250b3VjaHN0
YXJ0OworICAgICAgICBhdHRyaWJ1dGUgW0RvbnRFbnVtLENvbmRpdGlvbmFsPVRPVUNIX0VWRU5U
U10gRXZlbnRMaXN0ZW5lciBvbnRvdWNobW92ZTsKKyAgICAgICAgYXR0cmlidXRlIFtEb250RW51
bSxDb25kaXRpb25hbD1UT1VDSF9FVkVOVFNdIEV2ZW50TGlzdGVuZXIgb250b3VjaGVuZDsKKyAg
ICAgICAgYXR0cmlidXRlIFtEb250RW51bSxDb25kaXRpb25hbD1UT1VDSF9FVkVOVFNdIEV2ZW50
TGlzdGVuZXIgb250b3VjaGNhbmNlbDsKICNlbmRpZgogICAgIH07CiAKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCBiL1dlYkNvcmUvZG9tL1NjcmlwdEV4
ZWN1dGlvbkNvbnRleHQuaAppbmRleCBiZDE2ZGIyLi5kMGYyZTI2IDEwMDY0NAotLS0gYS9XZWJD
b3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmgKKysrIGIvV2ViQ29yZS9kb20vU2NyaXB0
RXhlY3V0aW9uQ29udGV4dC5oCkBAIC01NiwxMyArNTYsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgY2xhc3MgSW5zcGVjdG9yQ29udHJvbGxlcjsKICNlbmRpZgogCi0gICAgZW51bSBNZXNz
YWdlRGVzdGluYXRpb24gewotI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgICAgIEluc3BlY3Rv
ckNvbnRyb2xsZXJEZXN0aW5hdGlvbiwKLSNlbmRpZgotICAgICAgICBDb25zb2xlRGVzdGluYXRp
b24sCi0gICAgfTsKLQogICAgIGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgewogICAgIHB1
YmxpYzoKICAgICAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwpAQCAtOTUsOSArODgsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjZW5kaWYKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgcmVw
b3J0RXhjZXB0aW9uKGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBpbnQgbGluZU51bWJlciwg
Y29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpID0gMDsKLSAgICAgICAgdmlydHVhbCB2b2lkIGFkZE1l
c3NhZ2UoTWVzc2FnZURlc3RpbmF0aW9uLCBNZXNzYWdlU291cmNlLCBNZXNzYWdlVHlwZSwgTWVz
c2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGNv
bnN0IFN0cmluZyYgc291cmNlVVJMKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCByZXNvdXJj
ZVJldHJpZXZlZEJ5WE1MSHR0cFJlcXVlc3QodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25z
dCBTY3JpcHRTdHJpbmcmIHNvdXJjZVN0cmluZykgPSAwOwotICAgICAgICB2aXJ0dWFsIHZvaWQg
c2NyaXB0SW1wb3J0ZWQodW5zaWduZWQgbG9uZywgY29uc3QgU3RyaW5nJikgPSAwOworICAgICAg
ICB2aXJ0dWFsIHZvaWQgYWRkTWVzc2FnZShNZXNzYWdlU291cmNlLCBNZXNzYWdlVHlwZSwgTWVz
c2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGNv
bnN0IFN0cmluZyYgc291cmNlVVJMKSA9IDA7CiAgICAgICAgIAogICAgICAgICAvLyBBY3RpdmUg
b2JqZWN0cyBhcmUgbm90IGdhcmJhZ2UgY29sbGVjdGVkIGV2ZW4gaWYgaW5hY2Nlc3NpYmxlLCBl
LmcuIGJlY2F1c2UgdGhlaXIgYWN0aXZpdHkgbWF5IHJlc3VsdCBpbiBjYWxsYmFja3MgYmVpbmcg
aW52b2tlZC4KICAgICAgICAgYm9vbCBjYW5TdXNwZW5kQWN0aXZlRE9NT2JqZWN0cygpOwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwIGIvV2ViQ29y
ZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCmluZGV4IGM2YWVkNTUuLjAwMjIyNmQg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcAorKysg
Yi9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHAKQEAgLTEwMTEsMTQgKzEw
MTEsMTUgQEAgYm9vbCBTZWxlY3Rpb25Db250cm9sbGVyOjpyZWNvbXB1dGVDYXJldFJlY3QoKQog
ICAgIEludFJlY3Qgb2xkQWJzb2x1dGVDYXJldFJlcGFpbnRCb3VuZHMgPSBtX2Fic29sdXRlQ2Fy
ZXRSZXBhaW50Qm91bmRzOwogICAgIC8vIFdlIGJlbGlldmUgdGhhdCB3ZSBuZWVkIHRvIGluZmxh
dGUgdGhlIGxvY2FsIHJlY3QgYmVmb3JlIHRyYW5zZm9ybWluZyBpdCB0byBvYnRhaW4gdGhlIHJl
cGFpbnQgYm91bmRzLgogICAgIG1fYWJzb2x1dGVDYXJldFJlcGFpbnRCb3VuZHMgPSBjYXJldFJl
cGFpbnRSZWN0KCk7Ci0gICAgCisKKyNpZiBFTkFCTEUoVEVYVF9DQVJFVCkgICAgCiAgICAgaWYg
KFJlbmRlclZpZXcqIHZpZXcgPSB0b1JlbmRlclZpZXcobV9mcmFtZS0+ZG9jdW1lbnQoKS0+cmVu
ZGVyZXIoKSkpIHsKICAgICAgICAgLy8gRklYTUU6IG1ha2UgY2FyZXQgcmVwYWludGluZyBjb250
YWluZXItYXdhcmUuCiAgICAgICAgIHZpZXctPnJlcGFpbnRSZWN0YW5nbGVJblZpZXdBbmRDb21w
b3NpdGVkTGF5ZXJzKG9sZEFic29sdXRlQ2FyZXRSZXBhaW50Qm91bmRzLCBmYWxzZSk7CiAgICAg
ICAgIGlmIChzaG91bGRSZXBhaW50Q2FyZXQodmlldykpCiAgICAgICAgICAgICB2aWV3LT5yZXBh
aW50UmVjdGFuZ2xlSW5WaWV3QW5kQ29tcG9zaXRlZExheWVycyhtX2Fic29sdXRlQ2FyZXRSZXBh
aW50Qm91bmRzLCBmYWxzZSk7CiAgICAgfQotCisjZW5kaWYKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IApAQCAtMTA4Niw2ICsxMDg3LDExIEBAIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6cGFpbnRD
YXJldChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGludCB0eCwgaW50IHR5LCBjCiAgICAgfQog
CiAgICAgY29udGV4dC0+ZmlsbFJlY3QoY2FyZXQsIGNhcmV0Q29sb3IsIGNvbG9yU3BhY2UpOwor
I2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7CisgICAgVU5VU0VEX1BBUkFNKHR4KTsK
KyAgICBVTlVTRURfUEFSQU0odHkpOworICAgIFVOVVNFRF9QQVJBTShjbGlwUmVjdCk7CiAjZW5k
aWYKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxUb2tlbml6ZXIuY3BwIGIvV2Vi
Q29yZS9odG1sL0hUTUxUb2tlbml6ZXIuY3BwCmluZGV4IGQwZjM5NjUuLmM4MDdhNGYgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MVG9rZW5pemVyLmNwcAorKysgYi9XZWJDb3JlL2h0bWwv
SFRNTFRva2VuaXplci5jcHAKQEAgLTY3LDI1ICs2NywxNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLSNpZiBNT0JJTEUKLS8vIFRoZSBtb2Jp
bGUgZGV2aWNlIG5lZWRzIHRvIGJlIHJlc3BvbnNpdmUsIGFzIHN1Y2ggdGhlIHRva2VuaXplciBj
aHVuayBzaXplIGlzIHJlZHVjZWQuCiAvLyBUaGlzIHZhbHVlIGlzIHVzZWQgdG8gZGVmaW5lIGhv
dyBtYW55IGNoYXJhY3RlcnMgdGhlIHRva2VuaXplciB3aWxsIHByb2Nlc3MgYmVmb3JlIAogLy8g
eWVpbGRpbmcgY29udHJvbC4KLXN0YXRpYyBjb25zdCBpbnQgZGVmYXVsdFRva2VuaXplckNodW5r
U2l6ZSA9IDI1NjsKLSNlbHNlCisvLyBUbyBpbmNyZWFzZSByZXNwb25zaXZuZXNzIHJlZHVjZSB0
aGUgdG9rZW5pemVyIGNodW5rIHNpemUuCiBzdGF0aWMgY29uc3QgaW50IGRlZmF1bHRUb2tlbml6
ZXJDaHVua1NpemUgPSA0MDk2OwotI2VuZGlmCiAKLSNpZiBNT0JJTEUKLS8vIEFzIHRoZSBjaHVu
a3MgYXJlIHNtYWxsZXIgKGFib3ZlKSwgdGhlIHRva2VuaXplciBzaG91bGQgbm90IHlpZWxkIGZv
ciBhcyBsb25nIGEgcGVyaW9kLCBvdGhlcndpc2UKLS8vIGl0IHdpbGwgdGFrZSB3YXkgdG8gbG9u
ZyB0byBsb2FkIGEgcGFnZS4KLXN0YXRpYyBjb25zdCBkb3VibGUgZGVmYXVsdFRva2VuaXplclRp
bWVEZWxheSA9IDAuMzAwOwotI2Vsc2UKIC8vIEZJWE1FOiBXZSB3b3VsZCBsaWtlIHRoaXMgY29u
c3RhbnQgdG8gYmUgMjAwbXMuCiAvLyBZaWVsZGluZyBtb3JlIGFnZ3Jlc3NpdmVseSByZXN1bHRz
IGluIGluY3JlYXNlZCByZXNwb25zaXZlbmVzcyBhbmQgYmV0dGVyIGluY3JlbWVudGFsIHJlbmRl
cmluZy4KIC8vIEl0IHNsb3dzIGRvd24gb3ZlcmFsbCBwYWdlLWxvYWQgb24gc2xvd2VyIG1hY2hp
bmVzLCB0aG91Z2gsIHNvIGZvciBub3cgd2Ugc2V0IGEgdmFsdWUgb2YgNTAwLgorLy8gRm9yIHNt
YWxsZXIgY2h1bmtzIChhYm92ZSkgZGVjcmVhc2UgdGhlIHZhbHVlIG9mIFRpbWVyRGVsYXkgYXMg
dGhlIHRoZSB0b2tlbml6ZXIgc2hvdWxkIG5vdCAKKy8vIHlpZWxkIGZvciBhcyBsb25nIGEgcGVy
aW9kIG90aGVyd2lzZSBpdCB3aWxsIHRha2Ugd2F5IHRvIGxvbmcgdG8gbG9hZCBhIHBhZ2UuCiBz
dGF0aWMgY29uc3QgZG91YmxlIGRlZmF1bHRUb2tlbml6ZXJUaW1lRGVsYXkgPSAwLjUwMDsKLSNl
bmRpZgogCiBzdGF0aWMgY29uc3QgY2hhciBjb21tZW50U3RhcnQgW10gPSAiPCEtLSI7CiBzdGF0
aWMgY29uc3QgY2hhciBkb2N0eXBlU3RhcnQgW10gPSAiPCFkb2N0eXBlIjsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmlkbCBiL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmlkbAppbmRleCA3ODVkYTUxLi5hMjU3
NDUyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4
dC5pZGwKKysrIGIvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaWRs
CkBAIC01MjAsNyArNTIwLDcgQEAgbW9kdWxlIGh0bWwgewogICAgICAgICB2b2lkICAgICAgICAg
ZGlzYWJsZShpbiB1bnNpZ25lZCBsb25nIGNhcCk7CiAgICAgICAgIHZvaWQgICAgICAgICBkaXNh
YmxlVmVydGV4QXR0cmliQXJyYXkoaW4gdW5zaWduZWQgbG9uZyBpbmRleCkgcmFpc2VzKERPTUV4
Y2VwdGlvbik7CiAgICAgICAgIHZvaWQgICAgICAgICBkcmF3QXJyYXlzKGluIHVuc2lnbmVkIGxv
bmcgbW9kZSwgaW4gbG9uZyBmaXJzdCwgaW4gdW5zaWduZWQgbG9uZyBjb3VudCkgcmFpc2VzKERP
TUV4Y2VwdGlvbik7Ci0gICAgICAgIHZvaWQgICAgICAgICBkcmF3RWxlbWVudHMgKGluIHVuc2ln
bmVkIGxvbmcgbW9kZSwgaW4gbG9uZyBjb3VudCwgaW4gdW5zaWduZWQgbG9uZyB0eXBlLCBpbiB1
bnNpZ25lZCBsb25nIG9mZnNldCkgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisgICAgICAgIHZvaWQg
ICAgICAgICBkcmF3RWxlbWVudHMoaW4gdW5zaWduZWQgbG9uZyBtb2RlLCBpbiBsb25nIGNvdW50
LCBpbiB1bnNpZ25lZCBsb25nIHR5cGUsIGluIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KSByYWlzZXMo
RE9NRXhjZXB0aW9uKTsKIAogICAgICAgICB2b2lkICAgICAgICAgZW5hYmxlKGluIHVuc2lnbmVk
IGxvbmcgY2FwKTsKICAgICAgICAgdm9pZCAgICAgICAgIGVuYWJsZVZlcnRleEF0dHJpYkFycmF5
KGluIHVuc2lnbmVkIGxvbmcgaW5kZXgpIHJhaXNlcyhET01FeGNlcHRpb24pOwpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlVmlldy5qcyBiL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9JbWFnZVZpZXcuanMKaW5kZXggMTAyMGNiNy4uYzEzYzlhNSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlVmlldy5qcworKysgYi9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VWaWV3LmpzCkBAIC0zMSw0NSArMzEsNDgg
QEAgV2ViSW5zcGVjdG9yLkltYWdlVmlldyA9IGZ1bmN0aW9uKHJlc291cmNlKQogICAgIFdlYklu
c3BlY3Rvci5SZXNvdXJjZVZpZXcuY2FsbCh0aGlzLCByZXNvdXJjZSk7CiAKICAgICB0aGlzLmVs
ZW1lbnQuYWRkU3R5bGVDbGFzcygiaW1hZ2UiKTsKK30KIAotICAgIHZhciBjb250YWluZXIgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICBjb250YWluZXIuY2xhc3NOYW1lID0g
ImltYWdlIjsKLSAgICB0aGlzLmNvbnRlbnRFbGVtZW50LmFwcGVuZENoaWxkKGNvbnRhaW5lcik7
CitXZWJJbnNwZWN0b3IuSW1hZ2VWaWV3LnByb3RvdHlwZSA9IHsKKyAgICBjb250ZW50VGFiU2Vs
ZWN0ZWQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLl9jb250YWluZXIpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIHRoaXMuX2NvbnRhaW5lciA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoImRpdiIpOworICAgICAgICB0aGlzLl9jb250YWluZXIuY2xhc3NOYW1lID0g
ImltYWdlIjsKKyAgICAgICAgdGhpcy5jb250ZW50RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9j
b250YWluZXIpOwogCi0gICAgdGhpcy5pbWFnZVByZXZpZXdFbGVtZW50ID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgiaW1nIik7Ci0gICAgdGhpcy5pbWFnZVByZXZpZXdFbGVtZW50LmFkZFN0eWxl
Q2xhc3MoInJlc291cmNlLWltYWdlLXZpZXciKTsKLSAgICB0aGlzLmltYWdlUHJldmlld0VsZW1l
bnQuc2V0QXR0cmlidXRlKCJzcmMiLCB0aGlzLnJlc291cmNlLnVybCk7CisgICAgICAgIHRoaXMu
aW1hZ2VQcmV2aWV3RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImltZyIpOworICAg
ICAgICB0aGlzLmltYWdlUHJldmlld0VsZW1lbnQuYWRkU3R5bGVDbGFzcygicmVzb3VyY2UtaW1h
Z2UtdmlldyIpOworICAgICAgICB0aGlzLmltYWdlUHJldmlld0VsZW1lbnQuc2V0QXR0cmlidXRl
KCJzcmMiLCB0aGlzLnJlc291cmNlLnVybCk7CiAKLSAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQo
dGhpcy5pbWFnZVByZXZpZXdFbGVtZW50KTsKKyAgICAgICAgdGhpcy5fY29udGFpbmVyLmFwcGVu
ZENoaWxkKHRoaXMuaW1hZ2VQcmV2aWV3RWxlbWVudCk7CiAKLSAgICBjb250YWluZXIgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICBjb250YWluZXIuY2xhc3NOYW1lID0gImlu
Zm8iOwotICAgIHRoaXMuY29udGVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTsKKyAg
ICAgICAgdGhpcy5fY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Cisg
ICAgICAgIHRoaXMuX2NvbnRhaW5lci5jbGFzc05hbWUgPSAiaW5mbyI7CisgICAgICAgIHRoaXMu
Y29udGVudEVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5fY29udGFpbmVyKTsKIAotICAgIHZhciBp
bWFnZU5hbWVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaDEiKTsKLSAgICBpbWFn
ZU5hbWVFbGVtZW50LmNsYXNzTmFtZSA9ICJ0aXRsZSI7Ci0gICAgaW1hZ2VOYW1lRWxlbWVudC50
ZXh0Q29udGVudCA9IHRoaXMucmVzb3VyY2UuZGlzcGxheU5hbWU7Ci0gICAgY29udGFpbmVyLmFw
cGVuZENoaWxkKGltYWdlTmFtZUVsZW1lbnQpOworICAgICAgICB2YXIgaW1hZ2VOYW1lRWxlbWVu
dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImgxIik7CisgICAgICAgIGltYWdlTmFtZUVsZW1l
bnQuY2xhc3NOYW1lID0gInRpdGxlIjsKKyAgICAgICAgaW1hZ2VOYW1lRWxlbWVudC50ZXh0Q29u
dGVudCA9IHRoaXMucmVzb3VyY2UuZGlzcGxheU5hbWU7CisgICAgICAgIHRoaXMuX2NvbnRhaW5l
ci5hcHBlbmRDaGlsZChpbWFnZU5hbWVFbGVtZW50KTsKIAotICAgIHZhciBpbmZvTGlzdEVsZW1l
bnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkbCIpOwotICAgIGluZm9MaXN0RWxlbWVudC5j
bGFzc05hbWUgPSAiaW5mb0xpc3QiOworICAgICAgICB2YXIgaW5mb0xpc3RFbGVtZW50ID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgiZGwiKTsKKyAgICAgICAgaW5mb0xpc3RFbGVtZW50LmNsYXNz
TmFtZSA9ICJpbmZvTGlzdCI7CiAKLSAgICB2YXIgaW1hZ2VQcm9wZXJ0aWVzID0gWwotICAgICAg
ICB7IG5hbWU6IFdlYkluc3BlY3Rvci5VSVN0cmluZygiRGltZW5zaW9ucyIpLCB2YWx1ZTogV2Vi
SW5zcGVjdG9yLlVJU3RyaW5nKCIlZCDDlyAlZCIsIHRoaXMuaW1hZ2VQcmV2aWV3RWxlbWVudC5u
YXR1cmFsV2lkdGgsIHRoaXMuaW1hZ2VQcmV2aWV3RWxlbWVudC5oZWlnaHQpIH0sCi0gICAgICAg
IHsgbmFtZTogV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJGaWxlIHNpemUiKSwgdmFsdWU6IE51bWJl
ci5ieXRlc1RvU3RyaW5nKHRoaXMucmVzb3VyY2UucmVzb3VyY2VTaXplLCBXZWJJbnNwZWN0b3Iu
VUlTdHJpbmcuYmluZChXZWJJbnNwZWN0b3IpKSB9LAotICAgICAgICB7IG5hbWU6IFdlYkluc3Bl
Y3Rvci5VSVN0cmluZygiTUlNRSB0eXBlIiksIHZhbHVlOiB0aGlzLnJlc291cmNlLm1pbWVUeXBl
IH0KLSAgICBdOworICAgICAgICB2YXIgaW1hZ2VQcm9wZXJ0aWVzID0gWworICAgICAgICAgICAg
eyBuYW1lOiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkRpbWVuc2lvbnMiKSwgdmFsdWU6IFdlYklu
c3BlY3Rvci5VSVN0cmluZygiJWQgw5cgJWQiLCB0aGlzLmltYWdlUHJldmlld0VsZW1lbnQubmF0
dXJhbFdpZHRoLCB0aGlzLmltYWdlUHJldmlld0VsZW1lbnQuaGVpZ2h0KSB9LAorICAgICAgICAg
ICAgeyBuYW1lOiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkZpbGUgc2l6ZSIpLCB2YWx1ZTogTnVt
YmVyLmJ5dGVzVG9TdHJpbmcodGhpcy5yZXNvdXJjZS5yZXNvdXJjZVNpemUsIFdlYkluc3BlY3Rv
ci5VSVN0cmluZy5iaW5kKFdlYkluc3BlY3RvcikpIH0sCisgICAgICAgICAgICB7IG5hbWU6IFdl
Ykluc3BlY3Rvci5VSVN0cmluZygiTUlNRSB0eXBlIiksIHZhbHVlOiB0aGlzLnJlc291cmNlLm1p
bWVUeXBlIH0KKyAgICAgICAgXTsKIAotICAgIHZhciBsaXN0SFRNTCA9ICcnOwotICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgaW1hZ2VQcm9wZXJ0aWVzLmxlbmd0aDsgKytpKQotICAgICAgICBsaXN0
SFRNTCArPSAiPGR0PiIgKyBpbWFnZVByb3BlcnRpZXNbaV0ubmFtZSArICI8L2R0PjxkZD4iICsg
aW1hZ2VQcm9wZXJ0aWVzW2ldLnZhbHVlICsgIjwvZGQ+IjsKKyAgICAgICAgdmFyIGxpc3RIVE1M
ID0gJyc7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW1hZ2VQcm9wZXJ0aWVzLmxlbmd0
aDsgKytpKQorICAgICAgICAgICAgbGlzdEhUTUwgKz0gIjxkdD4iICsgaW1hZ2VQcm9wZXJ0aWVz
W2ldLm5hbWUgKyAiPC9kdD48ZGQ+IiArIGltYWdlUHJvcGVydGllc1tpXS52YWx1ZSArICI8L2Rk
PiI7CiAKLSAgICBpbmZvTGlzdEVsZW1lbnQuaW5uZXJIVE1MID0gbGlzdEhUTUw7Ci0gICAgY29u
dGFpbmVyLmFwcGVuZENoaWxkKGluZm9MaXN0RWxlbWVudCk7Ci19Ci0KLVdlYkluc3BlY3Rvci5J
bWFnZVZpZXcucHJvdG90eXBlID0gewotICAgIAorICAgICAgICBpbmZvTGlzdEVsZW1lbnQuaW5u
ZXJIVE1MID0gbGlzdEhUTUw7CisgICAgICAgIHRoaXMuX2NvbnRhaW5lci5hcHBlbmRDaGlsZChp
bmZvTGlzdEVsZW1lbnQpOworICAgIH0KIH0KIAogV2ViSW5zcGVjdG9yLkltYWdlVmlldy5wcm90
b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLlJlc291cmNlVmlldy5wcm90b3R5cGU7CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUmVzb3VyY2VWaWV3LmpzIGIv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Jlc291cmNlVmlldy5qcwppbmRleCA1NGNiYjAy
Li42MThhOTM1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUmVzb3Vy
Y2VWaWV3LmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNvdXJjZVZpZXcu
anMKQEAgLTE4Myw4ICsxODMsMTcgQEAgV2ViSW5zcGVjdG9yLlJlc291cmNlVmlldy5wcm90b3R5
cGUgPSB7CiAgICAgICAgIHRoaXMuaGVhZGVyc0VsZW1lbnQuYWRkU3R5bGVDbGFzcygiaGlkZGVu
Iik7CiAgICAgICAgIGlmICgicmVzaXplIiBpbiB0aGlzKQogICAgICAgICAgICAgdGhpcy5yZXNp
emUoKTsKLSAgICAgICAgaWYgKCJjb250ZW50VGFiU2VsZWN0ZWQiIGluIHRoaXMpCi0gICAgICAg
ICAgICB0aGlzLmNvbnRlbnRUYWJTZWxlY3RlZCgpOworICAgICAgICB0aGlzLmNvbnRlbnRUYWJT
ZWxlY3RlZCgpOworICAgIH0sCisKKyAgICBjb250ZW50VGFiU2VsZWN0ZWQ6IGZ1bmN0aW9uKCkK
KyAgICB7CisgICAgICAgIGlmICghdGhpcy5fY29udGVudFBsYWNlaG9sZGVyRWxlbWVudCkgewor
ICAgICAgICAgICAgdGhpcy5fY29udGVudFBsYWNlaG9sZGVyRWxlbWVudCA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoImRpdiIpOworICAgICAgICAgICAgdGhpcy5fY29udGVudFBsYWNlaG9sZGVy
RWxlbWVudC5jbGFzc05hbWUgPSAicmVzb3VyY2UtY29udGVudC11bmF2YWlsYWJsZSI7CisgICAg
ICAgICAgICB0aGlzLl9jb250ZW50UGxhY2Vob2xkZXJFbGVtZW50LnRleHRDb250ZW50ID0gV2Vi
SW5zcGVjdG9yLlVJU3RyaW5nKCJObyBDb250ZW50IEF2YWlsYWJsZSIpOworICAgICAgICAgICAg
dGhpcy5jb250ZW50RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9jb250ZW50UGxhY2Vob2xkZXJF
bGVtZW50KTsKKyAgICAgICAgfQogICAgIH0sCiAKICAgICBfcmVmcmVzaFVSTDogZnVuY3Rpb24o
KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5jc3Mg
Yi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmNzcwppbmRleCAzYjljYTEw
Li40ZDNiNGVkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVj
dG9yLmNzcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmNzcwpA
QCAtMzk1NiwzICszOTU2LDEwIEBAIGEud29ya2VyLWl0ZW06aG92ZXIgewogICAgIGNvbG9yOiBy
Z2IoMTUlLCAxNSUsIDE1JSk7CiB9CiAKKy5yZXNvdXJjZS1jb250ZW50LXVuYXZhaWxhYmxlIHsK
KyAgICBjb2xvcjogcmdiKDUwJSwgNTAlLCA1MCUpOworICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsK
KyAgICBmb250LXNpemU6IDE0cHg7CisgICAgdGV4dC1hbGlnbjogY2VudGVyOworICAgIHBhZGRp
bmc6IDMycHg7Cit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaCBi
L1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCmluZGV4IGY3M2U3MDkuLjZlZmU1MjEgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCisrKyBiL1dlYkNvcmUvbG9h
ZGVyL0VtcHR5Q2xpZW50cy5oCkBAIC0xOTksNyArMTk5LDYgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgdm9pZCBkaXNwYXRjaERpZEZpbmlzaExvYWRpbmcoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25l
ZCBsb25nKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRGYWlsTG9hZGluZyhEb2N1
bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcsIGNvbnN0IFJlc291cmNlRXJyb3ImKSB7IH0KICAg
ICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hEaWRMb2FkUmVzb3VyY2VGcm9tTWVtb3J5Q2FjaGUoRG9j
dW1lbnRMb2FkZXIqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlc3Bv
bnNlJiwgaW50KSB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERp
ZExvYWRSZXNvdXJjZUJ5WE1MSHR0cFJlcXVlc3QodW5zaWduZWQgbG9uZywgY29uc3QgU2NyaXB0
U3RyaW5nJikgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRIYW5kbGVPbmxvYWRF
dmVudHMoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRSZWNlaXZlU2VydmVyUmVk
aXJlY3RGb3JQcm92aXNpb25hbExvYWQoKSB7IH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvbG9hZGVy
L0ZyYW1lTG9hZGVyQ2xpZW50LmggYi9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlckNsaWVudC5o
CmluZGV4IGEwZGY5MWUuLjQ0MzllNDIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvbG9hZGVyL0ZyYW1l
TG9hZGVyQ2xpZW50LmgKKysrIGIvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXJDbGllbnQuaApA
QCAtMTEyLDcgKzExMiw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB2
b2lkIGRpc3BhdGNoRGlkRmluaXNoTG9hZGluZyhEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxv
bmcgaWRlbnRpZmllcikgPSAwOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRGYWls
TG9hZGluZyhEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3Qg
UmVzb3VyY2VFcnJvciYpID0gMDsKICAgICAgICAgdmlydHVhbCBib29sIGRpc3BhdGNoRGlkTG9h
ZFJlc291cmNlRnJvbU1lbW9yeUNhY2hlKERvY3VtZW50TG9hZGVyKiwgY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYsIGludCBsZW5ndGgpID0gMDsKLSAgICAg
ICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkTG9hZFJlc291cmNlQnlYTUxIdHRwUmVxdWVzdCh1
bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFNjcmlwdFN0cmluZyYpID0gMDsKIAogICAg
ICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRIYW5kbGVPbmxvYWRFdmVudHMoKSA9IDA7CiAg
ICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclBy
b3Zpc2lvbmFsTG9hZCgpID0gMDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNl
TG9hZE5vdGlmaWVyLmNwcCBiL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZE5vdGlmaWVyLmNw
cAppbmRleCA5MjgwNDM0Li5kMjI1Y2I4IDEwMDY0NAotLS0gYS9XZWJDb3JlL2xvYWRlci9SZXNv
dXJjZUxvYWROb3RpZmllci5jcHAKKysrIGIvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkTm90
aWZpZXIuY3BwCkBAIC0xMDMsMTEgKzEwMyw2IEBAIHZvaWQgUmVzb3VyY2VMb2FkTm90aWZpZXI6
OmRpZEZhaWxUb0xvYWQoUmVzb3VyY2VMb2FkZXIqIGxvYWRlciwgY29uc3QgUmVzb3VyY2VFCiAj
ZW5kaWYKIH0KIAotdm9pZCBSZXNvdXJjZUxvYWROb3RpZmllcjo6ZGlkTG9hZFJlc291cmNlQnlY
TUxIdHRwUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFNjcmlwdFN0cmlu
ZyYgc291cmNlU3RyaW5nKQotewotICAgIG1fZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+ZGlz
cGF0Y2hEaWRMb2FkUmVzb3VyY2VCeVhNTEh0dHBSZXF1ZXN0KGlkZW50aWZpZXIsIHNvdXJjZVN0
cmluZyk7Ci19Ci0KIHZvaWQgUmVzb3VyY2VMb2FkTm90aWZpZXI6OmFzc2lnbklkZW50aWZpZXJU
b0luaXRpYWxSZXF1ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRG9jdW1lbnRMb2FkZXIq
IGxvYWRlciwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogewogICAgIG1fZnJhbWUt
PmxvYWRlcigpLT5jbGllbnQoKS0+YXNzaWduSWRlbnRpZmllclRvSW5pdGlhbFJlcXVlc3QoaWRl
bnRpZmllciwgbG9hZGVyLCByZXF1ZXN0KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvbG9hZGVyL1Jl
c291cmNlTG9hZE5vdGlmaWVyLmggYi9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWROb3RpZmll
ci5oCmluZGV4IDIzZTQyNDYuLmIwYTVjYmYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvbG9hZGVyL1Jl
c291cmNlTG9hZE5vdGlmaWVyLmgKKysrIGIvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkTm90
aWZpZXIuaApAQCAtNTUsNyArNTUsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaWRSZWNlaXZlRGF0
YShSZXNvdXJjZUxvYWRlciosIGNvbnN0IGNoYXIqLCBpbnQsIGludCBsZW5ndGhSZWNlaXZlZCk7
CiAgICAgdm9pZCBkaWRGaW5pc2hMb2FkKFJlc291cmNlTG9hZGVyKik7CiAgICAgdm9pZCBkaWRG
YWlsVG9Mb2FkKFJlc291cmNlTG9hZGVyKiwgY29uc3QgUmVzb3VyY2VFcnJvciYpOwotICAgIHZv
aWQgZGlkTG9hZFJlc291cmNlQnlYTUxIdHRwUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlkZW50aWZp
ZXIsIGNvbnN0IFNjcmlwdFN0cmluZyYgc291cmNlU3RyaW5nKTsKIAogICAgIHZvaWQgYXNzaWdu
SWRlbnRpZmllclRvSW5pdGlhbFJlcXVlc3QodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBEb2N1
bWVudExvYWRlciosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOwogICAgIHZvaWQgZGlzcGF0Y2hX
aWxsU2VuZFJlcXVlc3QoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIs
IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9u
c2UpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwgYi9XZWJDb3JlL3Bh
Z2UvRE9NV2luZG93LmlkbAppbmRleCBkNDU3YmRjLi4zMWU0ZDRmIDEwMDY0NAotLS0gYS9XZWJD
b3JlL3BhZ2UvRE9NV2luZG93LmlkbAorKysgYi9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbApA
QCAtMjkzLDEyICsyOTMsMTAgQEAgbW9kdWxlIHdpbmRvdyB7CiAjaWYgZGVmaW5lZChFTkFCTEVf
T1JJRU5UQVRJT05fRVZFTlRTKSAmJiBFTkFCTEVfT1JJRU5UQVRJT05fRVZFTlRTCiAgICAgICAg
IGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9ub3JpZW50YXRpb25jaGFuZ2U7CiAjZW5kaWYKLSAj
aWYgZGVmaW5lZChFTkFCTEVfVE9VQ0hfRVZFTlRTKSAmJiBFTkFCTEVfVE9VQ0hfRVZFTlRTCi0g
ICAgICAgIGF0dHJpYnV0ZSBbRG9udEVudW1dIEV2ZW50TGlzdGVuZXIgb250b3VjaHN0YXJ0Owot
ICAgICAgICBhdHRyaWJ1dGUgW0RvbnRFbnVtXSBFdmVudExpc3RlbmVyIG9udG91Y2htb3ZlOwot
ICAgICAgICBhdHRyaWJ1dGUgW0RvbnRFbnVtXSBFdmVudExpc3RlbmVyIG9udG91Y2hlbmQ7Ci0g
ICAgICAgIGF0dHJpYnV0ZSBbRG9udEVudW1dIEV2ZW50TGlzdGVuZXIgb250b3VjaGNhbmNlbDsK
LSAjZW5kaWYKKyAgICAgICAgYXR0cmlidXRlIFtEb250RW51bSxDb25kaXRpb25hbD1UT1VDSF9F
VkVOVFNdIEV2ZW50TGlzdGVuZXIgb250b3VjaHN0YXJ0OworICAgICAgICBhdHRyaWJ1dGUgW0Rv
bnRFbnVtLENvbmRpdGlvbmFsPVRPVUNIX0VWRU5UU10gRXZlbnRMaXN0ZW5lciBvbnRvdWNobW92
ZTsKKyAgICAgICAgYXR0cmlidXRlIFtEb250RW51bSxDb25kaXRpb25hbD1UT1VDSF9FVkVOVFNd
IEV2ZW50TGlzdGVuZXIgb250b3VjaGVuZDsKKyAgICAgICAgYXR0cmlidXRlIFtEb250RW51bSxD
b25kaXRpb25hbD1UT1VDSF9FVkVOVFNdIEV2ZW50TGlzdGVuZXIgb250b3VjaGNhbmNlbDsKIAog
ICAgICAgICAvLyBFdmVudFRhcmdldCBpbnRlcmZhY2UKICAgICAgICAgW0N1c3RvbV0gdm9pZCBh
ZGRFdmVudExpc3RlbmVyKGluIERPTVN0cmluZyB0eXBlLApAQCAtNzEyLDkgKzcxMCw3IEBAIG1v
ZHVsZSB3aW5kb3cgewogI2VuZGlmCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoRU5BQkxFX1RPVUNI
X0VWRU5UUykgJiYgRU5BQkxFX1RPVUNIX0VWRU5UUwotICAgICAgICBhdHRyaWJ1dGUgVG91Y2hF
dmVudENvbnN0cnVjdG9yIFRvdWNoRXZlbnQ7Ci0jZW5kaWYKKyAgICAgICAgYXR0cmlidXRlIFtD
b25kaXRpb25hbD1UT1VDSF9FVkVOVFNdIFRvdWNoRXZlbnRDb25zdHJ1Y3RvciBUb3VjaEV2ZW50
OwogCiAgICAgICAgIGF0dHJpYnV0ZSBET01Gb3JtRGF0YUNvbnN0cnVjdG9yIEZvcm1EYXRhOwog
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcCBiL1dlYkNvcmUv
cGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCmluZGV4IDc5ZDg1MmIuLmY3YWJjYjEgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCisrKyBiL1dlYkNvcmUvcGFnZS9G
b2N1c0NvbnRyb2xsZXIuY3BwCkBAIC00MDYsNiArNDA2LDEwIEBAIHZvaWQgRm9jdXNDb250cm9s
bGVyOjpmaW5kRm9jdXNhYmxlTm9kZUluRGlyZWN0aW9uKERvY3VtZW50KiBkb2N1bWVudCwgTm9k
ZSogZm9jCiAgICAgICAgICAgICAvLyBHZXQgZGlzdGFuY2UgYW5kIGFsaWdubWVudCBmcm9tIGN1
cnJlbnQgY2FuZGlkYXRlLgogICAgICAgICAgICAgZGlzdGFuY2VEYXRhRm9yTm9kZShkaXJlY3Rp
b24sIGZvY3VzZWROb2RlLCBjdXJyZW50Rm9jdXNDYW5kaWRhdGUpOwogCisgICAgICAgICAgICAv
LyBCYWlsIG91dCBpZiBkaXN0YW5jZSBpcyBtYXhpbXVtLgorICAgICAgICAgICAgaWYgKGN1cnJl
bnRGb2N1c0NhbmRpZGF0ZS5kaXN0YW5jZSA9PSBtYXhEaXN0YW5jZSgpKQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworCiAgICAgICAgICAgICAvLyBJZiBjYW5kaWRhdGVQYXJlbnQgaXMgbm90
IG51bGwsIGl0IG1lYW5zIHRoYXQgd2UgYXJlIGluIGEgcmVjdXJzaXZlIGNhbGwKICAgICAgICAg
ICAgIC8vIGZyb20gZGVlcEZpbmVGb2N1c2FibGVOb2RlSW5EaXJlY3Rpb24gKGkuZS4gcHJvY2Vz
c2luZyBhbiBlbGVtZW50IGluIGFuIGlmcmFtZSksCiAgICAgICAgICAgICAvLyBhbmQgaG9sZHMg
dGhlIGRpc3RhbmNlIGFuZCBhbGlnbm1lbnQgZGF0YSBvZiB0aGUgaWZyYW1lIGVsZW1lbnQgaXRz
ZWxmLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcCBiL1dlYkNvcmUvcGFnZS9G
cmFtZS5jcHAKaW5kZXggMDRkN2E5ZS4uMjkyMWU1ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdl
L0ZyYW1lLmNwcAorKysgYi9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCkBAIC02NjAsNiArNjYwLDEx
IEBAIHZvaWQgRnJhbWU6OnBhaW50RHJhZ0NhcmV0KEdyYXBoaWNzQ29udGV4dCogcCwgaW50IHR4
LCBpbnQgdHksIGNvbnN0IEludFJlY3QmIGNsCiAgICAgQVNTRVJUKGRyYWdDYXJldENvbnRyb2xs
ZXItPnNlbGVjdGlvbigpLmlzQ2FyZXQoKSk7CiAgICAgaWYgKGRyYWdDYXJldENvbnRyb2xsZXIt
PnNlbGVjdGlvbigpLnN0YXJ0KCkubm9kZSgpLT5kb2N1bWVudCgpLT5mcmFtZSgpID09IHRoaXMp
CiAgICAgICAgIGRyYWdDYXJldENvbnRyb2xsZXItPnBhaW50Q2FyZXQocCwgdHgsIHR5LCBjbGlw
UmVjdCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShwKTsKKyAgICBVTlVTRURfUEFSQU0odHgp
OworICAgIFVOVVNFRF9QQVJBTSh0eSk7CisgICAgVU5VU0VEX1BBUkFNKGNsaXBSZWN0KTsKICNl
bmRpZgogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcCBiL1dlYkNv
cmUvcGFnZS9GcmFtZVZpZXcuY3BwCmluZGV4IDQ2YWY5MzQuLjRiNmNjMzYgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCisrKyBiL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcu
Y3BwCkBAIC04NzAsOCArODcwLDYgQEAgdm9pZCBGcmFtZVZpZXc6OnJlbW92ZVNsb3dSZXBhaW50
T2JqZWN0KCkKIAogdm9pZCBGcmFtZVZpZXc6OmFkZEZpeGVkT2JqZWN0KCkKIHsKLSAgICBpZiAo
IW1fZml4ZWRPYmplY3RDb3VudCAmJiBwbGF0Zm9ybVdpZGdldCgpKQotICAgICAgICBzZXRDYW5C
bGl0T25TY3JvbGwoZmFsc2UpOwogICAgICsrbV9maXhlZE9iamVjdENvdW50OwogfQogCkBAIC04
NzksNjQgKzg3Nyw2IEBAIHZvaWQgRnJhbWVWaWV3OjpyZW1vdmVGaXhlZE9iamVjdCgpCiB7CiAg
ICAgQVNTRVJUKG1fZml4ZWRPYmplY3RDb3VudCA+IDApOwogICAgIC0tbV9maXhlZE9iamVjdENv
dW50OwotICAgIGlmICghbV9maXhlZE9iamVjdENvdW50KQotICAgICAgICBzZXRDYW5CbGl0T25T
Y3JvbGwoIXVzZVNsb3dSZXBhaW50cygpKTsKLX0KLQotYm9vbCBGcmFtZVZpZXc6OnNjcm9sbENv
bnRlbnRzRmFzdFBhdGgoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEsIGNvbnN0IEludFJlY3Qm
IHJlY3RUb1Njcm9sbCwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpCi17Ci0gICAgY29uc3Qgc2l6
ZV90IGZpeGVkT2JqZWN0VGhyZXNob2xkID0gNTsKLQotICAgIExpc3RIYXNoU2V0PFJlbmRlckJv
eCo+KiBwb3NpdGlvbmVkT2JqZWN0cyA9IDA7Ci0gICAgaWYgKFJlbmRlclZpZXcqIHJvb3QgPSBt
X2ZyYW1lLT5jb250ZW50UmVuZGVyZXIoKSkKLSAgICAgICAgcG9zaXRpb25lZE9iamVjdHMgPSBy
b290LT5wb3NpdGlvbmVkT2JqZWN0cygpOwotCi0gICAgaWYgKCFwb3NpdGlvbmVkT2JqZWN0cyB8
fCBwb3NpdGlvbmVkT2JqZWN0cy0+aXNFbXB0eSgpKSB7Ci0gICAgICAgIGhvc3RXaW5kb3coKS0+
c2Nyb2xsKHNjcm9sbERlbHRhLCByZWN0VG9TY3JvbGwsIGNsaXBSZWN0KTsKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLy8gR2V0IHRoZSByZWN0cyBvZiB0aGUgZml4ZWQgb2Jq
ZWN0cyB2aXNpYmxlIGluIHRoZSByZWN0VG9TY3JvbGwKLSAgICBWZWN0b3I8SW50UmVjdCwgZml4
ZWRPYmplY3RUaHJlc2hvbGQ+IHN1YlJlY3RUb1VwZGF0ZTsKLSAgICBib29sIHVwZGF0ZUludmFs
aWRhdGVkU3ViUmVjdCA9IHRydWU7Ci0gICAgTGlzdEhhc2hTZXQ8UmVuZGVyQm94Kj46OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IHBvc2l0aW9uZWRPYmplY3RzLT5lbmQoKTsKLSAgICBmb3IgKExpc3RI
YXNoU2V0PFJlbmRlckJveCo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHBvc2l0aW9uZWRPYmplY3Rz
LT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgUmVuZGVyQm94KiByZW5kZXJC
b3ggPSAqaXQ7Ci0gICAgICAgIGlmIChyZW5kZXJCb3gtPnN0eWxlKCktPnBvc2l0aW9uKCkgIT0g
Rml4ZWRQb3NpdGlvbikKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBJbnRSZWN0IHRv
cExldmVsUmVjdDsKLSAgICAgICAgSW50UmVjdCB1cGRhdGVSZWN0ID0gcmVuZGVyQm94LT5wYWlu
dGluZ1Jvb3RSZWN0KHRvcExldmVsUmVjdCk7Ci0gICAgICAgIHVwZGF0ZVJlY3QubW92ZSgtc2Ny
b2xsWCgpLCAtc2Nyb2xsWSgpKTsKLSAgICAgICAgdXBkYXRlUmVjdC5pbnRlcnNlY3QocmVjdFRv
U2Nyb2xsKTsKLSAgICAgICAgaWYgKCF1cGRhdGVSZWN0LmlzRW1wdHkoKSkgewotICAgICAgICAg
ICAgaWYgKHN1YlJlY3RUb1VwZGF0ZS5zaXplKCkgPj0gZml4ZWRPYmplY3RUaHJlc2hvbGQpIHsK
LSAgICAgICAgICAgICAgICB1cGRhdGVJbnZhbGlkYXRlZFN1YlJlY3QgPSBmYWxzZTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHN1YlJlY3RUb1Vw
ZGF0ZS5hcHBlbmQodXBkYXRlUmVjdCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBTY3Jv
bGwgdGhlIHZpZXcKLSAgICBpZiAodXBkYXRlSW52YWxpZGF0ZWRTdWJSZWN0KSB7Ci0gICAgICAg
IC8vIDEpIHNjcm9sbAotICAgICAgICBob3N0V2luZG93KCktPnNjcm9sbChzY3JvbGxEZWx0YSwg
cmVjdFRvU2Nyb2xsLCBjbGlwUmVjdCk7Ci0KLSAgICAgICAgLy8gMikgdXBkYXRlIHRoZSBhcmVh
IG9mIGZpeGVkIG9iamVjdHMgdGhhdCBoYXMgYmVlbiBpbnZhbGlkYXRlZAotICAgICAgICBzaXpl
X3QgZml4T2JqZWN0c0NvdW50ID0gc3ViUmVjdFRvVXBkYXRlLnNpemUoKTsKLSAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBmaXhPYmplY3RzQ291bnQ7ICsraSkgewotICAgICAgICAgICAg
SW50UmVjdCB1cGRhdGVSZWN0ID0gc3ViUmVjdFRvVXBkYXRlW2ldOwotICAgICAgICAgICAgSW50
UmVjdCBzY3JvbGxlZFJlY3QgPSB1cGRhdGVSZWN0OwotICAgICAgICAgICAgc2Nyb2xsZWRSZWN0
Lm1vdmUoc2Nyb2xsRGVsdGEpOwotICAgICAgICAgICAgdXBkYXRlUmVjdC51bml0ZShzY3JvbGxl
ZFJlY3QpOwotICAgICAgICAgICAgdXBkYXRlUmVjdC5pbnRlcnNlY3QocmVjdFRvU2Nyb2xsKTsK
LSAgICAgICAgICAgIGhvc3RXaW5kb3coKS0+aW52YWxpZGF0ZUNvbnRlbnRzQW5kV2luZG93KHVw
ZGF0ZVJlY3QsIGZhbHNlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0KLSAgICAvLyB0aGUgbnVtYmVyIG9mIGZpeGVkIG9iamVjdHMgZXhjZWVkIHRoZSB0aHJlc2hv
bGQsIHdlIGNhbm5vdCB1c2UgdGhlIGZhc3QgcGF0aAotICAgIHJldHVybiBmYWxzZTsKIH0KIAog
dm9pZCBGcmFtZVZpZXc6OnNldElzT3ZlcmxhcHBlZChib29sIGlzT3ZlcmxhcHBlZCkKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaCBiL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcu
aAppbmRleCBkZWJiMGE5Li5jYmQwY2I5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvRnJhbWVW
aWV3LmgKKysrIGIvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCkBAIC0yMDksOSArMjA5LDYgQEAg
cHVibGljOgogICAgIGJvb2wgaXNGcmFtZVZpZXdTY3JvbGxDb3JuZXIoUmVuZGVyU2Nyb2xsYmFy
UGFydCogc2Nyb2xsQ29ybmVyKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbENvcm5lciA9PSBzY3Jv
bGxDb3JuZXI7IH0KICAgICB2b2lkIGludmFsaWRhdGVTY3JvbGxDb3JuZXIoKTsKIAotcHJvdGVj
dGVkOgotICAgIHZpcnR1YWwgYm9vbCBzY3JvbGxDb250ZW50c0Zhc3RQYXRoKGNvbnN0IEludFNp
emUmIHNjcm9sbERlbHRhLCBjb25zdCBJbnRSZWN0JiByZWN0VG9TY3JvbGwsIGNvbnN0IEludFJl
Y3QmIGNsaXBSZWN0KTsKLQogcHJpdmF0ZToKICAgICBGcmFtZVZpZXcoRnJhbWUqKTsKIApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wYWdlL0dlb2xvY2F0aW9uLmNwcCBiL1dlYkNvcmUvcGFnZS9HZW9s
b2NhdGlvbi5jcHAKaW5kZXggYmU4Njk2Ni4uZWFhN2YzZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9w
YWdlL0dlb2xvY2F0aW9uLmNwcAorKysgYi9XZWJDb3JlL3BhZ2UvR2VvbG9jYXRpb24uY3BwCkBA
IC0yMDYsNyArMjA2LDYgQEAgR2VvbG9jYXRpb246Okdlb2xvY2F0aW9uKEZyYW1lKiBmcmFtZSkK
ICAgICAsIG1fc2VydmljZShHZW9sb2NhdGlvblNlcnZpY2U6OmNyZWF0ZSh0aGlzKSkKICNlbmRp
ZgogICAgICwgbV9hbGxvd0dlb2xvY2F0aW9uKFVua25vd24pCi0gICAgLCBtX3Nob3VsZENsZWFy
Q2FjaGUoZmFsc2UpCiAgICAgLCBtX3Bvc2l0aW9uQ2FjaGUobmV3IEdlb2xvY2F0aW9uUG9zaXRp
b25DYWNoZSkKIHsKICAgICBpZiAoIW1fZnJhbWUpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2Uv
R2VvbG9jYXRpb24uaCBiL1dlYkNvcmUvcGFnZS9HZW9sb2NhdGlvbi5oCmluZGV4IDJiNjdmYWMu
Ljk1MDQ0NzUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9HZW9sb2NhdGlvbi5oCisrKyBiL1dl
YkNvcmUvcGFnZS9HZW9sb2NhdGlvbi5oCkBAIC0xNjksNyArMTY5LDYgQEAgcHJpdmF0ZToKICAg
ICAgICAgWWVzLAogICAgICAgICBObwogICAgIH0gbV9hbGxvd0dlb2xvY2F0aW9uOwotICAgIGJv
b2wgbV9zaG91bGRDbGVhckNhY2hlOwogCiAjaWYgRU5BQkxFKEdFT0xPQ0FUSU9OKQogICAgIE93
blB0cjxHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU+IG1fcG9zaXRpb25DYWNoZTsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGFnZS9jaHJvbWl1bS9EcmFnQ29udHJvbGxlckNocm9taXVtLmNwcCBiL1dl
YkNvcmUvcGFnZS9jaHJvbWl1bS9EcmFnQ29udHJvbGxlckNocm9taXVtLmNwcAppbmRleCA3YjA5
NThkLi5kZTUzZDE5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvY2hyb21pdW0vRHJhZ0NvbnRy
b2xsZXJDaHJvbWl1bS5jcHAKKysrIGIvV2ViQ29yZS9wYWdlL2Nocm9taXVtL0RyYWdDb250cm9s
bGVyQ2hyb21pdW0uY3BwCkBAIC02Niw3ICs2NiwxMiBAQCBib29sIERyYWdDb250cm9sbGVyOjpp
c0NvcHlLZXlEb3duKCkKICAgICAKIGNvbnN0IEludFNpemUmIERyYWdDb250cm9sbGVyOjptYXhE
cmFnSW1hZ2VTaXplKCkKIHsKKyNpZiBPUyhEQVJXSU4pCisgICAgLy8gTWF0Y2ggU2FmYXJpJ3Mg
ZHJhZyBpbWFnZSBzaXplLgorICAgIHN0YXRpYyBjb25zdCBJbnRTaXplIG1heERyYWdJbWFnZVNp
emUoNDAwLCA0MDApOworI2Vsc2UKICAgICBzdGF0aWMgY29uc3QgSW50U2l6ZSBtYXhEcmFnSW1h
Z2VTaXplKDIwMCwgMjAwKTsKKyNlbmRpZgogICAgIHJldHVybiBtYXhEcmFnSW1hZ2VTaXplOwog
fQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVTeXN0ZW0uaCBiL1dlYkNvcmUv
cGxhdGZvcm0vRmlsZVN5c3RlbS5oCmluZGV4IDgwMDIzZDQuLjM5Yzc5YmIgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvcGxhdGZvcm0vRmlsZVN5c3RlbS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vRmls
ZVN5c3RlbS5oCkBAIC0yNiw3ICsyNiw3IEBACiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKICAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCiAgKi8KLSAKKwogI2lmbmRlZiBGaWxlU3lzdGVtX2gKICNkZWZpbmUgRmlsZVN5c3RlbV9o
CiAKQEAgLTEyMiw2ICsxMjIsMTcgQEAgdHlwZWRlZiBpbnQgUGxhdGZvcm1GaWxlSGFuZGxlOwog
Y29uc3QgUGxhdGZvcm1GaWxlSGFuZGxlIGludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGUgPSAtMTsK
ICNlbmRpZgogCitlbnVtIEZpbGVPcGVuTW9kZSB7CisgICAgT3BlbkZvclJlYWQgPSAwLAorICAg
IE9wZW5Gb3JXcml0ZQorfTsKKworZW51bSBGaWxlU2Vla09yaWdpbiB7CisgICAgU2Vla0Zyb21C
ZWdpbm5pbmcgPSAwLAorICAgIFNlZWtGcm9tQ3VycmVudCwKKyAgICBTZWVrRnJvbUVuZAorfTsK
KwogYm9vbCBmaWxlRXhpc3RzKGNvbnN0IFN0cmluZyYpOwogYm9vbCBkZWxldGVGaWxlKGNvbnN0
IFN0cmluZyYpOwogYm9vbCBkZWxldGVFbXB0eURpcmVjdG9yeShjb25zdCBTdHJpbmcmKTsKQEAg
LTE0MSw4ICsxNTIsMTUgQEAgaW5saW5lIGJvb2wgaXNIYW5kbGVWYWxpZChjb25zdCBQbGF0Zm9y
bUZpbGVIYW5kbGUmIGhhbmRsZSkgeyByZXR1cm4gaGFuZGxlICE9IGkKIAogLy8gUHJlZml4IGlz
IHdoYXQgdGhlIGZpbGVuYW1lIHNob3VsZCBiZSBwcmVmaXhlZCB3aXRoLCBub3QgdGhlIGZ1bGwg
cGF0aC4KIFdURjo6Q1N0cmluZyBvcGVuVGVtcG9yYXJ5RmlsZShjb25zdCBjaGFyKiBwcmVmaXgs
IFBsYXRmb3JtRmlsZUhhbmRsZSYpOworUGxhdGZvcm1GaWxlSGFuZGxlIG9wZW5GaWxlKGNvbnN0
IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5Nb2RlKTsKIHZvaWQgY2xvc2VGaWxlKFBsYXRmb3JtRmls
ZUhhbmRsZSYpOworLy8gUmV0dXJucyB0aGUgcmVzdWx0aW5nIG9mZnNldCBmcm9tIHRoZSBiZWdp
bm5pbmcgb2YgdGhlIGZpbGUgaWYgc3VjY2Vzc2Z1bCwgLTEgb3RoZXJ3aXNlLgorbG9uZyBsb25n
IHNlZWtGaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSwgbG9uZyBsb25nIG9mZnNldCwgRmlsZVNlZWtP
cmlnaW4pOworYm9vbCB0cnVuY2F0ZUZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlLCBsb25nIGxvbmcg
b2Zmc2V0KTsKKy8vIFJldHVybnMgbnVtYmVyIG9mIGJ5dGVzIGFjdHVhbGx5IHJlYWQgaWYgc3Vj
Y2Vzc2Z1bCwgLTEgb3RoZXJ3aXNlLgogaW50IHdyaXRlVG9GaWxlKFBsYXRmb3JtRmlsZUhhbmRs
ZSwgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCk7CisvLyBSZXR1cm5zIG51bWJlciBvZiBi
eXRlcyBhY3R1YWxseSB3cml0dGVuIGlmIHN1Y2Nlc3NmdWwsIC0xIG90aGVyd2lzZS4KK2ludCBy
ZWFkRnJvbUZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlLCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKTsK
IAogLy8gTWV0aG9kcyBmb3IgZGVhbGluZyB3aXRoIGxvYWRhYmxlIG1vZHVsZXMKIGJvb2wgdW5s
b2FkTW9kdWxlKFBsYXRmb3JtTW9kdWxlKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
U2Nyb2xsVmlldy5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCmluZGV4IDIx
MzFjOTEuLjQ4NzIwMDcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5j
cHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcApAQCAtNTE4LDggKzUxOCw3
IEBAIHZvaWQgU2Nyb2xsVmlldzo6c2Nyb2xsQ29udGVudHMoY29uc3QgSW50U2l6ZSYgc2Nyb2xs
RGVsdGEpCiAKICAgICBpZiAoY2FuQmxpdE9uU2Nyb2xsKCkpIHsgLy8gVGhlIG1haW4gZnJhbWUg
Y2FuIGp1c3QgYmxpdCB0aGUgV2ViVmlldyB3aW5kb3cKICAgICAgICAgLy8gRklYTUU6IEZpbmQg
YSB3YXkgdG8gc2Nyb2xsIHN1YmZyYW1lcyB3aXRoIHRoaXMgZmFzdGVyIHBhdGgKLSAgICAgICAg
aWYgKCFzY3JvbGxDb250ZW50c0Zhc3RQYXRoKC1zY3JvbGxEZWx0YSwgc2Nyb2xsVmlld1JlY3Qs
IGNsaXBSZWN0KSkKLSAgICAgICAgICAgIGhvc3RXaW5kb3coKS0+aW52YWxpZGF0ZUNvbnRlbnRz
Rm9yU2xvd1Njcm9sbCh1cGRhdGVSZWN0LCBmYWxzZSk7CisgICAgICAgIGhvc3RXaW5kb3coKS0+
c2Nyb2xsKC1zY3JvbGxEZWx0YSwgc2Nyb2xsVmlld1JlY3QsIGNsaXBSZWN0KTsKICAgICB9IGVs
c2UgeyAKICAgICAgICAvLyBXZSBuZWVkIHRvIGdvIGFoZWFkIGFuZCByZXBhaW50IHRoZSBlbnRp
cmUgYmFja2luZyBzdG9yZS4gIERvIGl0IG5vdyBiZWZvcmUgbW92aW5nIHRoZQogICAgICAgIC8v
IHdpbmRvd2VkIHBsdWdpbnMuCkBAIC01MzMsMTIgKzUzMiw2IEBAIHZvaWQgU2Nyb2xsVmlldzo6
c2Nyb2xsQ29udGVudHMoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEpCiAgICAgaG9zdFdpbmRv
dygpLT5pbnZhbGlkYXRlV2luZG93KEludFJlY3QoKSwgdHJ1ZSk7CiB9CiAKLWJvb2wgU2Nyb2xs
Vmlldzo6c2Nyb2xsQ29udGVudHNGYXN0UGF0aChjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSwg
Y29uc3QgSW50UmVjdCYgcmVjdFRvU2Nyb2xsLCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkKLXsK
LSAgICBob3N0V2luZG93KCktPnNjcm9sbChzY3JvbGxEZWx0YSwgcmVjdFRvU2Nyb2xsLCBjbGlw
UmVjdCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIEludFBvaW50IFNjcm9sbFZpZXc6OndpbmRv
d1RvQ29udGVudHMoY29uc3QgSW50UG9pbnQmIHdpbmRvd1BvaW50KSBjb25zdAogewogICAgIElu
dFBvaW50IHZpZXdQb2ludCA9IGNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdyh3aW5kb3dQb2lu
dCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuaCBiL1dlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsVmlldy5oCmluZGV4IGMzNTZhNjAuLjc1ZGMyYjQgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vU2Ny
b2xsVmlldy5oCkBAIC0yNTIsOSArMjUyLDYgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGVTY3JvbGxDb3JuZXIoKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRTY3JvbGxDb3Ju
ZXIoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYgY29ybmVyUmVjdCk7CiAKLSAgICAv
LyBTY3JvbGwgdGhlIGNvbnRlbnQgYnkgYmxpdHRpbmcgdGhlIHBpeGVscwotICAgIHZpcnR1YWwg
Ym9vbCBzY3JvbGxDb250ZW50c0Zhc3RQYXRoKGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhLCBj
b25zdCBJbnRSZWN0JiByZWN0VG9TY3JvbGwsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KTsKLSAg
ICAKIHByaXZhdGU6CiAgICAgUmVmUHRyPFNjcm9sbGJhcj4gbV9ob3Jpem9udGFsU2Nyb2xsYmFy
OwogICAgIFJlZlB0cjxTY3JvbGxiYXI+IG1fdmVydGljYWxTY3JvbGxiYXI7CmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RyYWdJbWFnZUNocm9taXVtLmNwcCBiL1dlYkNv
cmUvcGxhdGZvcm0vY2hyb21pdW0vRHJhZ0ltYWdlQ2hyb21pdW0uY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA4YzE0ODRlLi4wMDAwMDAwCi0tLSBhL1dlYkNvcmUvcGxhdGZvcm0v
Y2hyb21pdW0vRHJhZ0ltYWdlQ2hyb21pdW0uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAwOCwgMjAwOSwgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBt
ZXQ6Ci0gKiAKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0g
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRHJhZ0ltYWdlLmgi
Ci0KLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LUludFNpemUgZHJhZ0ltYWdlU2l6ZShEcmFnSW1hZ2VSZWYgaW1hZ2UpCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLSAgICByZXR1cm4gSW50U2l6ZSgpOwotfQotCi12b2lkIGRlbGV0ZURyYWdJ
bWFnZShEcmFnSW1hZ2VSZWYgaW1hZ2UpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQot
RHJhZ0ltYWdlUmVmIHNjYWxlRHJhZ0ltYWdlKERyYWdJbWFnZVJlZiBpbWFnZSwgRmxvYXRTaXpl
IHNjYWxlKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0gICAg
Ci1EcmFnSW1hZ2VSZWYgZGlzc29sdmVEcmFnSW1hZ2VUb0ZyYWN0aW9uKERyYWdJbWFnZVJlZiBp
bWFnZSwgZmxvYXQpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gaW1hZ2U7
Ci19Ci0gICAgICAgIAotRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZyb21JbWFnZShJbWFn
ZSogaW1nKQoteyAgICAKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQot
ICAgIAotRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUljb25Gb3JDYWNoZWRJbWFnZShDYWNo
ZWRJbWFnZSopCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsgICAgIAot
fQotICAgIAotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0
Zm9ybS9jaHJvbWl1bS9EcmFnSW1hZ2VDaHJvbWl1bU1hYy5jcHAgYi9XZWJDb3JlL3BsYXRmb3Jt
L2Nocm9taXVtL0RyYWdJbWFnZUNocm9taXVtTWFjLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5iNzkxN2QyCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9y
bS9jaHJvbWl1bS9EcmFnSW1hZ2VDaHJvbWl1bU1hYy5jcHAKQEAgLTAsMCArMSwxMDcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICogCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRyYWdJbWFnZS5oIgorCisjaW5jbHVkZSAi
SW1hZ2UuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCisjaW5jbHVkZSA8Q29yZUdy
YXBoaWNzL0NHQml0bWFwQ29udGV4dC5oPgorI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0ltYWdl
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW50U2l6ZSBkcmFnSW1hZ2VTaXplKERyYWdJ
bWFnZVJlZiBpbWFnZSkKK3sKKyAgICBpZiAoIWltYWdlKQorICAgICAgICByZXR1cm4gSW50U2l6
ZSgpOworICAgIHJldHVybiBJbnRTaXplKENHSW1hZ2VHZXRXaWR0aChpbWFnZSksIENHSW1hZ2VH
ZXRIZWlnaHQoaW1hZ2UpKTsKK30KKwordm9pZCBkZWxldGVEcmFnSW1hZ2UoRHJhZ0ltYWdlUmVm
IGltYWdlKQoreworICAgIENHSW1hZ2VSZWxlYXNlKGltYWdlKTsKK30KKworRHJhZ0ltYWdlUmVm
IHNjYWxlRHJhZ0ltYWdlKERyYWdJbWFnZVJlZiBpbWFnZSwgRmxvYXRTaXplIHNjYWxlKQorewor
ICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybiAwOworICAgIHNpemVfdCB3aWR0aCA9IHJv
dW5kZihDR0ltYWdlR2V0V2lkdGgoaW1hZ2UpICogc2NhbGUud2lkdGgoKSk7CisgICAgc2l6ZV90
IGhlaWdodCA9IHJvdW5kZihDR0ltYWdlR2V0SGVpZ2h0KGltYWdlKSAqIHNjYWxlLmhlaWdodCgp
KTsKKyAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IENHQml0bWFwQ29udGV4dENyZWF0ZSgwLCB3
aWR0aCwgaGVpZ2h0LCA4LCB3aWR0aCAqIDQsIENHSW1hZ2VHZXRDb2xvclNwYWNlKGltYWdlKSwg
a0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdCB8IGtDR0JpdG1hcEJ5dGVPcmRlcjMySG9z
dCk7CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4gMDsKKyAgICBDR0NvbnRleHRE
cmF3SW1hZ2UoY29udGV4dCwgQ0dSZWN0TWFrZSgwLCAwLCB3aWR0aCwgaGVpZ2h0KSwgaW1hZ2Up
OworICAgIENHSW1hZ2VSZWxlYXNlKGltYWdlKTsKKworICAgIENHSW1hZ2VSZWYgc2NhbGVkSW1h
Z2UgPSBDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShjb250ZXh0KTsKKyAgICBDR0NvbnRleHRS
ZWxlYXNlKGNvbnRleHQpOworICAgIHJldHVybiBzY2FsZWRJbWFnZTsKK30KKworRHJhZ0ltYWdl
UmVmIGRpc3NvbHZlRHJhZ0ltYWdlVG9GcmFjdGlvbihEcmFnSW1hZ2VSZWYgaW1hZ2UsIGZsb2F0
IGRlbHRhKQoreworICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybiAwOworICAgIHNpemVf
dCB3aWR0aCA9IENHSW1hZ2VHZXRXaWR0aChpbWFnZSk7CisgICAgc2l6ZV90IGhlaWdodCA9IENH
SW1hZ2VHZXRIZWlnaHQoaW1hZ2UpOworICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gQ0dCaXRt
YXBDb250ZXh0Q3JlYXRlKDAsIHdpZHRoLCBoZWlnaHQsIDgsIHdpZHRoICogNCwgQ0dJbWFnZUdl
dENvbG9yU3BhY2UoaW1hZ2UpLCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0IHwga0NH
Qml0bWFwQnl0ZU9yZGVyMzJIb3N0KTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVy
biAwOworICAgIC8vIEZyb20gQ0dDb250ZXh0Lmg6CisgICAgLy8gICAgIFRoZSBQb3J0ZXItRHVm
ZiAic291cmNlIG92ZXIiIG1vZGUgaXMgY2FsbGVkIGBrQ0dCbGVuZE1vZGVOb3JtYWwnOgorICAg
IC8vICAgICAgIFIgPSBTICsgRCooMSAtIFNhKQorICAgIC8vICBUaGlzIGlzIHRoZSBzYW1lIGFz
IE5TQ29tcG9zaXRlU291cmNlT3Zlciwgd2hpY2ggaXMgd2hhdCAtW05TSW1hZ2UgZGlzc29sdmVU
b1BvaW50OmZyYWN0aW9uOl0gdXNlcy4KKyAgICBDR0NvbnRleHRTZXRBbHBoYShjb250ZXh0LCBk
ZWx0YSk7CisgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGNvbnRleHQsIGtDR0JsZW5kTW9kZU5v
cm1hbCk7CisgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQsIENHUmVjdE1ha2UoMCwgMCwg
d2lkdGgsIGhlaWdodCksIGltYWdlKTsKKyAgICBDR0ltYWdlUmVsZWFzZShpbWFnZSk7CisKKyAg
ICBDR0ltYWdlUmVmIGRpc3NvbHZlZEltYWdlID0gQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2Uo
Y29udGV4dCk7CisgICAgQ0dDb250ZXh0UmVsZWFzZShjb250ZXh0KTsKKyAgICByZXR1cm4gZGlz
c29sdmVkSW1hZ2U7Cit9CisKK0RyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VGcm9tSW1hZ2Uo
SW1hZ2UqIGltYWdlKQoreworICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybiAwOworICAg
IHJldHVybiBDR0ltYWdlQ3JlYXRlQ29weShpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJh
bWUoKSk7Cit9CisKK0RyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VJY29uRm9yQ2FjaGVkSW1h
Z2UoQ2FjaGVkSW1hZ2UqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vRHJhZ0ltYWdlQ2hyb21pdW1Ta2lhLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0v
Y2hyb21pdW0vRHJhZ0ltYWdlQ2hyb21pdW1Ta2lhLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi45ZDZmMGQ3Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9y
bS9jaHJvbWl1bS9EcmFnSW1hZ2VDaHJvbWl1bVNraWEuY3BwCkBAIC0wLDAgKzEsODggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKGMpIDIwMDgsIDIwMDksIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICog
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRyYWdJbWFnZS5oIgorCisjaW5j
bHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJOYXRpdmVJbWFnZVNraWEuaCIKKyNpbmNsdWRlICJO
b3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlJlZlB0ci5oIgorI2luY2x1ZGUgIlNrQml0bWFw
LmgiCisKKyNpbmNsdWRlICJza2lhL2V4dC9pbWFnZV9vcGVyYXRpb25zLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworSW50U2l6ZSBkcmFnSW1hZ2VTaXplKERyYWdJbWFnZVJlZiBpbWFnZSkK
K3sKKyAgICBpZiAoIWltYWdlKQorICAgICAgICByZXR1cm4gSW50U2l6ZSgpOworCisgICAgcmV0
dXJuIEludFNpemUoaW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSk7Cit9CisKK3ZvaWQg
ZGVsZXRlRHJhZ0ltYWdlKERyYWdJbWFnZVJlZiBpbWFnZSkKK3sKKyAgICBkZWxldGUgaW1hZ2U7
Cit9CisKK0RyYWdJbWFnZVJlZiBzY2FsZURyYWdJbWFnZShEcmFnSW1hZ2VSZWYgaW1hZ2UsIEZs
b2F0U2l6ZSBzY2FsZSkKK3sKKyAgICBpZiAoIWltYWdlKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIGludCBpbWFnZVdpZHRoID0gc2NhbGUud2lkdGgoKSAqIGltYWdlLT53aWR0aCgpOworICAg
IGludCBpbWFnZUhlaWdodCA9IHNjYWxlLmhlaWdodCgpICogaW1hZ2UtPmhlaWdodCgpOworICAg
IERyYWdJbWFnZVJlZiBzY2FsZWRJbWFnZSA9IG5ldyBTa0JpdG1hcCgKKyAgICAgICAgc2tpYTo6
SW1hZ2VPcGVyYXRpb25zOjpSZXNpemUoKmltYWdlLCBza2lhOjpJbWFnZU9wZXJhdGlvbnM6OlJF
U0laRV9MQU5DWk9TMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1h
Z2VXaWR0aCwgaW1hZ2VIZWlnaHQpKTsKKyAgICBkZWxldGUgaW1hZ2U7CisgICAgcmV0dXJuIHNj
YWxlZEltYWdlOworfQorCitEcmFnSW1hZ2VSZWYgZGlzc29sdmVEcmFnSW1hZ2VUb0ZyYWN0aW9u
KERyYWdJbWFnZVJlZiBpbWFnZSwgZmxvYXQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICByZXR1cm4gaW1hZ2U7Cit9CisKK0RyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VGcm9tSW1h
Z2UoSW1hZ2UqIGltYWdlKQoreworICAgIHJldHVybiBuZXcgU2tCaXRtYXAoKmltYWdlLT5uYXRp
dmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpKTsKK30KKworRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJ
bWFnZUljb25Gb3JDYWNoZWRJbWFnZShDYWNoZWRJbWFnZSopCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EcmFnSW1hZ2VSZWYuaCBiL1dlYkNvcmUv
cGxhdGZvcm0vY2hyb21pdW0vRHJhZ0ltYWdlUmVmLmgKaW5kZXggNTNlZGQ0Zi4uYTJkN2Y4ZCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EcmFnSW1hZ2VSZWYuaAorKysg
Yi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RyYWdJbWFnZVJlZi5oCkBAIC0yOSwxMSArMjks
MTkgQEAKICNpZm5kZWYgRHJhZ0ltYWdlUmVmX2gKICNkZWZpbmUgRHJhZ0ltYWdlUmVmX2gKIAor
I2lmIE9TKERBUldJTikKK3R5cGVkZWYgc3RydWN0IENHSW1hZ2UqIENHSW1hZ2VSZWY7CisjZWxz
ZQorY2xhc3MgU2tCaXRtYXA7CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAg
Ly8gRklYTUU6IE5lZWQgdG8gc3VwcG9ydCBpbWFnZSBkcmFnLW4tZHJvcC4gIEZvciBub3csIHdl
IGp1c3QgYWxsb3cgdGhpbmdzCi0gICAgLy8gdG8gY29tcGlsZSBieSBkZWZpbmluZyB0aGlzIGR1
bW15IHR5cGUuCi0gICAgdHlwZWRlZiB2b2lkKiBEcmFnSW1hZ2VSZWY7CisjaWYgT1MoREFSV0lO
KQordHlwZWRlZiBDR0ltYWdlUmVmIERyYWdJbWFnZVJlZjsKKyNlbHNlCit0eXBlZGVmIFNrQml0
bWFwKiBEcmFnSW1hZ2VSZWY7CisjZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwIGIvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcAppbmRleCAzZDNmZmUzLi43YmRlZmJhIDEwMDY0NAot
LS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCisrKyBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAKQEAgLTE4Miw3ICsxODIsNyBAQCB2b2lkIEZvbnQ6OmRy
YXdUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25z
dCBGbG9hdFBvaQogICAgIHJldHVybiBkcmF3Q29tcGxleFRleHQoY29udGV4dCwgcnVuLCBwb2lu
dCwgZnJvbSwgdG8pOwogfQogCi1mbG9hdCBGb250OjpmbG9hdFdpZHRoKGNvbnN0IFRleHRSdW4m
IHJ1biwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzKSBjb25z
dAorZmxvYXQgRm9udDo6ZmxvYXRXaWR0aChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29u
c3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhP
dmVyZmxvdykgY29uc3QKIHsKICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQogICAgIGlmIChwcmltYXJ5
Rm9udCgpLT5pc1NWR0ZvbnQoKSkKQEAgLTE5OCw3ICsxOTgsNyBAQCBmbG9hdCBGb250OjpmbG9h
dFdpZHRoKGNvbnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+
KiBmYWxsYgogICAgIH0KICNlbmRpZgogCi0gICAgcmV0dXJuIGZsb2F0V2lkdGhGb3JDb21wbGV4
VGV4dChydW4sIGZhbGxiYWNrRm9udHMpOworICAgIHJldHVybiBmbG9hdFdpZHRoRm9yQ29tcGxl
eFRleHQocnVuLCBmYWxsYmFja0ZvbnRzLCBnbHlwaE92ZXJmbG93KTsKIH0KIAogZmxvYXQgRm9u
dDo6ZmxvYXRXaWR0aChjb25zdCBUZXh0UnVuJiBydW4sIGludCBleHRyYUNoYXJzQXZhaWxhYmxl
LCBpbnQmIGNoYXJzQ29uc3VtZWQsIFN0cmluZyYgZ2x5cGhOYW1lKSBjb25zdApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmggYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnQuaAppbmRleCAzYzA3YmU3Li42MjUyNWIwIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnQuaApAQCAtNTYsNiArNTYsMjEgQEAgc3RydWN0IEdseXBoRGF0YTsKIAogY29uc3QgdW5z
aWduZWQgZGVmYXVsdFVuaXRzUGVyRW0gPSAxMDAwOwogCitzdHJ1Y3QgR2x5cGhPdmVyZmxvdyB7
CisgICAgR2x5cGhPdmVyZmxvdygpCisgICAgICAgIDogbGVmdCgwKQorICAgICAgICAsIHJpZ2h0
KDApCisgICAgICAgICwgdG9wKDApCisgICAgICAgICwgYm90dG9tKDApCisgICAgeworICAgIH0K
KworICAgIGludCBsZWZ0OworICAgIGludCByaWdodDsKKyAgICBpbnQgdG9wOworICAgIGludCBi
b3R0b207Cit9OworCiBjbGFzcyBGb250IHsKIHB1YmxpYzoKICAgICBGb250KCk7CkBAIC04MSw4
ICs5Niw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZHJhd1RleHQoR3JhcGhpY3NDb250ZXh0Kiwg
Y29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSA9IDAsIGludCB0byA9
IC0xKSBjb25zdDsKIAotICAgIGludCB3aWR0aChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8
Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDApIGNvbnN0IHsgcmV0dXJu
IGxyb3VuZGYoZmxvYXRXaWR0aChydW4sIGZhbGxiYWNrRm9udHMpKTsgfQotICAgIGZsb2F0IGZs
b2F0V2lkdGgoY29uc3QgVGV4dFJ1biYsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiog
ZmFsbGJhY2tGb250cyA9IDApIGNvbnN0OworICAgIGludCB3aWR0aChjb25zdCBUZXh0UnVuJiBy
dW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDAsIEds
eXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cgPSAwKSBjb25zdCB7IHJldHVybiBscm91bmRmKGZs
b2F0V2lkdGgocnVuLCBmYWxsYmFja0ZvbnRzLCBnbHlwaE92ZXJmbG93KSk7IH0KKyAgICBmbG9h
dCBmbG9hdFdpZHRoKGNvbnN0IFRleHRSdW4mLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRh
Kj4qIGZhbGxiYWNrRm9udHMgPSAwLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93ID0gMCkg
Y29uc3Q7CiAgICAgZmxvYXQgZmxvYXRXaWR0aChjb25zdCBUZXh0UnVuJiBydW4sIGludCBleHRy
YUNoYXJzQXZhaWxhYmxlLCBpbnQmIGNoYXJzQ29uc3VtZWQsIFN0cmluZyYgZ2x5cGhOYW1lKSBj
b25zdDsKIAogICAgIGludCBvZmZzZXRGb3JQb3NpdGlvbihjb25zdCBUZXh0UnVuJiwgaW50IHBv
c2l0aW9uLCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdDsKQEAgLTE1OSw3ICsxNzQs
NyBAQCBwcml2YXRlOgogI2VuZGlmCiAKICAgICB2b2lkIGRyYXdDb21wbGV4VGV4dChHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tLCBp
bnQgdG8pIGNvbnN0OwotICAgIGZsb2F0IGZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBU
ZXh0UnVuJiwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0g
MCkgY29uc3Q7CisgICAgZmxvYXQgZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRS
dW4mLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwLCBH
bHlwaE92ZXJmbG93KiA9IDApIGNvbnN0OwogICAgIGludCBvZmZzZXRGb3JQb3NpdGlvbkZvckNv
bXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBpbnQgcG9zaXRpb24sIGJvb2wgaW5jbHVkZVBhcnRp
YWxHbHlwaHMpIGNvbnN0OwogICAgIEZsb2F0UmVjdCBzZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRl
eHQoY29uc3QgVGV4dFJ1biYsIGNvbnN0IEludFBvaW50JiwgaW50IGgsIGludCBmcm9tLCBpbnQg
dG8pIGNvbnN0OwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRG
YXN0UGF0aC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYXN0UGF0aC5jcHAK
aW5kZXggNDI4ZTg1ZS4uNmUyYTc0NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250RmFzdFBhdGguY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dEZhc3RQYXRoLmNwcApAQCAtMjQsMTcgKzI0LDE3IEBACiAjaW5jbHVkZSAiRm9udC5oIgogCiAj
aW5jbHVkZSAiQ2hhcmFjdGVyTmFtZXMuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNs
dWRlICJGb250Q2FjaGUuaCIKICNpbmNsdWRlICJGb250RmFsbGJhY2tMaXN0LmgiCi0jaW5jbHVk
ZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKICNpbmNsdWRlICJHbHlw
aFBhZ2VUcmVlTm9kZS5oIgogI2luY2x1ZGUgIkludFBvaW50LmgiCiAjaW5jbHVkZSAiU2ltcGxl
Rm9udERhdGEuaCIKICNpbmNsdWRlICJXaWR0aEl0ZXJhdG9yLmgiCiAKLSNpbmNsdWRlIDx3dGYv
dW5pY29kZS9Vbmljb2RlLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRl
IDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiB1c2luZyBu
YW1lc3BhY2UgVW5pY29kZTsKQEAgLTIzNCw2ICsyMzQsMTMgQEAgYm9vbCBGb250OjpjYW5Vc2VH
bHlwaENhY2hlKGNvbnN0IFRleHRSdW4mIHJ1bikgY29uc3QKICAgICAgICAgaWYgKGMgPD0gMHgx
OTRGKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgICAgIC8vIEZJWE1FOiB3ZSBz
aG91bGQgbm90IHVzZSBjb21wbGV4IHRleHQgcGF0aCBmb3IgdGhlc2UgY2hhcmFjdGVycy4KKyAg
ICAgICAgCisgICAgICAgIGlmIChjIDwgMHgxRTAwKSAgICAgLy8gVSsxRTAwIHRocm91Z2ggVSsy
MDAwIGNoYXJhY3RlcnMgd2l0aCBkaWFjcml0aWNzIGFuZCBzdGFja2VkIGRpYWNyaXRpY3MKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoYyA8PSAweDIwMDApCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisKICAgICAgICAgaWYgKGMgPCAweDIwRDApICAgICAvLyBVKzIwRDAg
dGhyb3VnaCBVKzIwRkYgQ29tYmluaW5nIG1hcmtzIGZvciBzeW1ib2xzCiAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgaWYgKGMgPD0gMHgyMEZGKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HbHlwaE1ldHJpY3NNYXAuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HbHlwaE1ldHJpY3NNYXAuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmQzYzMxODAKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dseXBoTWV0cmljc01hcC5jcHAKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwNiwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJ
bmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAg
IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdseXBoTWV0cmljc01hcC5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK0dseXBoTWV0cmljc01hcDo6R2x5cGhNZXRyaWNzUGFnZSogR2x5cGhNZXRy
aWNzTWFwOjpsb2NhdGVQYWdlU2xvd0Nhc2UodW5zaWduZWQgcGFnZU51bWJlcikKK3sKKyAgICBH
bHlwaE1ldHJpY3NQYWdlKiBwYWdlOworICAgIGlmICghcGFnZU51bWJlcikgeworICAgICAgICBB
U1NFUlQoIW1fZmlsbGVkUHJpbWFyeVBhZ2UpOworICAgICAgICBwYWdlID0gJm1fcHJpbWFyeVBh
Z2U7CisgICAgICAgIG1fZmlsbGVkUHJpbWFyeVBhZ2UgPSB0cnVlOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGlmIChtX3BhZ2VzKSB7CisgICAgICAgICAgICBpZiAoKHBhZ2UgPSBtX3BhZ2VzLT5n
ZXQocGFnZU51bWJlcikpKQorICAgICAgICAgICAgICAgIHJldHVybiBwYWdlOworICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgIG1fcGFnZXMuc2V0KG5ldyBIYXNoTWFwPGludCwgR2x5cGhNZXRy
aWNzUGFnZSo+KTsKKyAgICAgICAgcGFnZSA9IG5ldyBHbHlwaE1ldHJpY3NQYWdlOworICAgICAg
ICBtX3BhZ2VzLT5zZXQocGFnZU51bWJlciwgcGFnZSk7CisgICAgfQorCisgICAgR2x5cGhNZXRy
aWNzIHVua25vd25NZXRyaWNzOworICAgIHVua25vd25NZXRyaWNzLmhvcml6b250YWxBZHZhbmNl
ID0gY0dseXBoU2l6ZVVua25vd247CisgICAgdW5rbm93bk1ldHJpY3MuYm91bmRpbmdCb3guc2V0
V2lkdGgoY0dseXBoU2l6ZVVua25vd24pOworICAgIHVua25vd25NZXRyaWNzLmJvdW5kaW5nQm94
LnNldEhlaWdodChjR2x5cGhTaXplVW5rbm93bik7CisgICAgLy8gRmlsbCBpbiB0aGUgd2hvbGUg
cGFnZSB3aXRoIHRoZSB1bmtub3duIGdseXBoIGluZm9ybWF0aW9uLgorICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBHbHlwaE1ldHJpY3NQYWdlOjpzaXplOyBpKyspCisgICAgICAgIHBhZ2Ut
PnNldE1ldHJpY3NGb3JJbmRleChpLCB1bmtub3duTWV0cmljcyk7CisKKyAgICByZXR1cm4gcGFn
ZTsKK30KKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaE1l
dHJpY3NNYXAuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhNZXRyaWNzTWFwLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk4NTRiZQotLS0gL2Rldi9udWxs
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhNZXRyaWNzTWFwLmgKQEAgLTAs
MCArMSwxMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0
aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBv
ZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgR2x5cGhNZXRyaWNzTWFwX2gKKyNkZWZpbmUg
R2x5cGhNZXRyaWNzTWFwX2gKKworI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi91bmlj
b2RlL1VuaWNvZGUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0eXBlZGVmIHVuc2lnbmVk
IHNob3J0IEdseXBoOworCitjb25zdCBmbG9hdCBjR2x5cGhTaXplVW5rbm93biA9IC0xOworCitz
dHJ1Y3QgR2x5cGhNZXRyaWNzIHsKKyAgICBmbG9hdCBob3Jpem9udGFsQWR2YW5jZTsKKyAgICBG
bG9hdFJlY3QgYm91bmRpbmdCb3g7Cit9OworCitjbGFzcyBHbHlwaE1ldHJpY3NNYXAgOiBwdWJs
aWMgTm9uY29weWFibGUgeworcHVibGljOgorICAgIEdseXBoTWV0cmljc01hcCgpIDogbV9maWxs
ZWRQcmltYXJ5UGFnZShmYWxzZSkgeyB9CisgICAgfkdseXBoTWV0cmljc01hcCgpCisgICAgeyAK
KyAgICAgICAgaWYgKG1fcGFnZXMpCisgICAgICAgICAgICBkZWxldGVBbGxWYWx1ZXMoKm1fcGFn
ZXMpOworICAgIH0KKworICAgIEdseXBoTWV0cmljcyBtZXRyaWNzRm9yR2x5cGgoR2x5cGggZ2x5
cGgpCisgICAgeworICAgICAgICByZXR1cm4gbG9jYXRlUGFnZShnbHlwaCAvIEdseXBoTWV0cmlj
c1BhZ2U6OnNpemUpLT5tZXRyaWNzRm9yR2x5cGgoZ2x5cGgpOworICAgIH0KKworICAgIGZsb2F0
IHdpZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpCisgICAgeworICAgICAgICByZXR1cm4gbG9jYXRl
UGFnZShnbHlwaCAvIEdseXBoTWV0cmljc1BhZ2U6OnNpemUpLT5tZXRyaWNzRm9yR2x5cGgoZ2x5
cGgpLmhvcml6b250YWxBZHZhbmNlOworICAgIH0KKworICAgIHZvaWQgc2V0TWV0cmljc0Zvckds
eXBoKEdseXBoIGdseXBoLCBjb25zdCBHbHlwaE1ldHJpY3MmIG1ldHJpY3MpCisgICAgeworICAg
ICAgICBsb2NhdGVQYWdlKGdseXBoIC8gR2x5cGhNZXRyaWNzUGFnZTo6c2l6ZSktPnNldE1ldHJp
Y3NGb3JHbHlwaChnbHlwaCwgbWV0cmljcyk7CisgICAgfQorCitwcml2YXRlOgorICAgIHN0cnVj
dCBHbHlwaE1ldHJpY3NQYWdlIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBzaXplID0g
MjU2OyAvLyBVc3VhbGx5IGNvdmVycyBMYXRpbi0xIGluIGEgc2luZ2xlIHBhZ2UuCisgICAgICAg
IEdseXBoTWV0cmljcyBtX21ldHJpY3Nbc2l6ZV07CisKKyAgICAgICAgR2x5cGhNZXRyaWNzIG1l
dHJpY3NGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QgeyByZXR1cm4gbV9tZXRyaWNzW2dseXBo
ICUgc2l6ZV07IH0KKyAgICAgICAgdm9pZCBzZXRNZXRyaWNzRm9yR2x5cGgoR2x5cGggZ2x5cGgs
IGNvbnN0IEdseXBoTWV0cmljcyYgbWV0cmljcykKKyAgICAgICAgeworICAgICAgICAgICAgc2V0
TWV0cmljc0ZvckluZGV4KGdseXBoICUgc2l6ZSwgbWV0cmljcyk7CisgICAgICAgIH0KKyAgICAg
ICAgdm9pZCBzZXRNZXRyaWNzRm9ySW5kZXgodW5zaWduZWQgaW5kZXgsIGNvbnN0IEdseXBoTWV0
cmljcyYgbWV0cmljcykKKyAgICAgICAgeworICAgICAgICAgICAgbV9tZXRyaWNzW2luZGV4XSA9
IG1ldHJpY3M7CisgICAgICAgIH0KKyAgICB9OworICAgIAorICAgIEdseXBoTWV0cmljc1BhZ2Uq
IGxvY2F0ZVBhZ2UodW5zaWduZWQgcGFnZU51bWJlcikKKyAgICB7CisgICAgICAgIGlmICghcGFn
ZU51bWJlciAmJiBtX2ZpbGxlZFByaW1hcnlQYWdlKQorICAgICAgICAgICAgcmV0dXJuICZtX3By
aW1hcnlQYWdlOworICAgICAgICByZXR1cm4gbG9jYXRlUGFnZVNsb3dDYXNlKHBhZ2VOdW1iZXIp
OworICAgIH0KKworICAgIEdseXBoTWV0cmljc1BhZ2UqIGxvY2F0ZVBhZ2VTbG93Q2FzZSh1bnNp
Z25lZCBwYWdlTnVtYmVyKTsKKyAgICAKKyAgICBib29sIG1fZmlsbGVkUHJpbWFyeVBhZ2U7Cisg
ICAgR2x5cGhNZXRyaWNzUGFnZSBtX3ByaW1hcnlQYWdlOyAvLyBXZSBvcHRpbWl6ZSBmb3IgdGhl
IHBhZ2UgdGhhdCBjb250YWlucyBnbHlwaCBpbmRpY2VzIDAtMjU1LgorICAgIE93blB0cjxIYXNo
TWFwPGludCwgR2x5cGhNZXRyaWNzUGFnZSo+ID4gbV9wYWdlczsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dseXBoV2lkdGhNYXAuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFdp
ZHRoTWFwLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDNjYWI2NS4uMDAwMDAw
MAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoV2lkdGhNYXAuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAw
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAq
IDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBu
b3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkdseXBoV2lkdGhNYXAuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1HbHlw
aFdpZHRoTWFwOjpHbHlwaFdpZHRoUGFnZSogR2x5cGhXaWR0aE1hcDo6bG9jYXRlUGFnZVNsb3dD
YXNlKHVuc2lnbmVkIHBhZ2VOdW1iZXIpCi17Ci0gICAgR2x5cGhXaWR0aFBhZ2UqIHBhZ2U7Ci0g
ICAgaWYgKHBhZ2VOdW1iZXIgPT0gMCkgewotICAgICAgICBBU1NFUlQoIW1fZmlsbGVkUHJpbWFy
eVBhZ2UpOwotICAgICAgICBwYWdlID0gJm1fcHJpbWFyeVBhZ2U7Ci0gICAgICAgIG1fZmlsbGVk
UHJpbWFyeVBhZ2UgPSB0cnVlOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChtX3BhZ2VzKSB7
Ci0gICAgICAgICAgICBpZiAoKHBhZ2UgPSBtX3BhZ2VzLT5nZXQocGFnZU51bWJlcikpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBwYWdlOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1f
cGFnZXMuc2V0KG5ldyBIYXNoTWFwPGludCwgR2x5cGhXaWR0aFBhZ2UqPik7Ci0gICAgICAgIHBh
Z2UgPSBuZXcgR2x5cGhXaWR0aFBhZ2U7Ci0gICAgICAgIG1fcGFnZXMtPnNldChwYWdlTnVtYmVy
LCBwYWdlKTsKLSAgICB9Ci0KLSAgICAvLyBGaWxsIGluIHRoZSB3aG9sZSBwYWdlIHdpdGggdGhl
IHVua25vd24gZ2x5cGggd2lkdGggdmFsdWUuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IEdseXBoV2lkdGhQYWdlOjpzaXplOyBpKyspCi0gICAgICAgIHBhZ2UtPnNldFdpZHRoRm9ySW5k
ZXgoaSwgY0dseXBoV2lkdGhVbmtub3duKTsKLQotICAgIHJldHVybiBwYWdlOwotfQotCi19CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoV2lkdGhNYXAuaCBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhXaWR0aE1hcC5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA2NmRlYTFmLi4wMDAwMDAwCi0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR2x5cGhXaWR0aE1hcC5oCisrKyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxl
IENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4gCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
LSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2lmbmRlZiBHbHlwaFdpZHRoTWFwX2gKLSNkZWZpbmUgR2x5cGhXaWR0aE1hcF9oCi0K
LSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLSNpbmNs
dWRlIDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdHlw
ZWRlZiB1bnNpZ25lZCBzaG9ydCBHbHlwaDsKLQotY29uc3QgZmxvYXQgY0dseXBoV2lkdGhVbmtu
b3duID0gLTE7Ci0KLWNsYXNzIEdseXBoV2lkdGhNYXAgOiBwdWJsaWMgTm9uY29weWFibGUgewot
cHVibGljOgotICAgIEdseXBoV2lkdGhNYXAoKSA6IG1fZmlsbGVkUHJpbWFyeVBhZ2UoZmFsc2Up
IHsgfQotICAgIH5HbHlwaFdpZHRoTWFwKCkgeyBpZiAobV9wYWdlcykgeyBkZWxldGVBbGxWYWx1
ZXMoKm1fcGFnZXMpOyB9IH0KLQotICAgIGZsb2F0IHdpZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgp
Ci0gICAgewotICAgICAgICByZXR1cm4gbG9jYXRlUGFnZShnbHlwaCAvIEdseXBoV2lkdGhQYWdl
OjpzaXplKS0+d2lkdGhGb3JHbHlwaChnbHlwaCk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRXaWR0
aEZvckdseXBoKEdseXBoIGdseXBoLCBmbG9hdCB3aWR0aCkKLSAgICB7Ci0gICAgICAgIGxvY2F0
ZVBhZ2UoZ2x5cGggLyBHbHlwaFdpZHRoUGFnZTo6c2l6ZSktPnNldFdpZHRoRm9yR2x5cGgoZ2x5
cGgsIHdpZHRoKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgc3RydWN0IEdseXBoV2lkdGhQYWdl
IHsKLSAgICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBzaXplID0gMjU2OyAvLyBVc3VhbGx5IGNv
dmVycyBMYXRpbi0xIGluIGEgc2luZ2xlIHBhZ2UuCi0gICAgICAgIGZsb2F0IG1fd2lkdGhzW3Np
emVdOwotCi0gICAgICAgIGZsb2F0IHdpZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0IHsg
cmV0dXJuIG1fd2lkdGhzW2dseXBoICUgc2l6ZV07IH0KLSAgICAgICAgdm9pZCBzZXRXaWR0aEZv
ckdseXBoKEdseXBoIGdseXBoLCBmbG9hdCB3aWR0aCkKLSAgICAgICAgewotICAgICAgICAgICAg
c2V0V2lkdGhGb3JJbmRleChnbHlwaCAlIHNpemUsIHdpZHRoKTsKLSAgICAgICAgfQotICAgICAg
ICB2b2lkIHNldFdpZHRoRm9ySW5kZXgodW5zaWduZWQgaW5kZXgsIGZsb2F0IHdpZHRoKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBtX3dpZHRoc1tpbmRleF0gPSB3aWR0aDsKLSAgICAgICAgfQot
ICAgIH07Ci0gICAgCi0gICAgR2x5cGhXaWR0aFBhZ2UqIGxvY2F0ZVBhZ2UodW5zaWduZWQgcGFn
ZU51bWJlcikKLSAgICB7Ci0gICAgICAgIGlmICghcGFnZU51bWJlciAmJiBtX2ZpbGxlZFByaW1h
cnlQYWdlKQotICAgICAgICAgICAgcmV0dXJuICZtX3ByaW1hcnlQYWdlOwotICAgICAgICByZXR1
cm4gbG9jYXRlUGFnZVNsb3dDYXNlKHBhZ2VOdW1iZXIpOwotICAgIH0KLQotICAgIEdseXBoV2lk
dGhQYWdlKiBsb2NhdGVQYWdlU2xvd0Nhc2UodW5zaWduZWQgcGFnZU51bWJlcik7Ci0gICAgCi0g
ICAgYm9vbCBtX2ZpbGxlZFByaW1hcnlQYWdlOwotICAgIEdseXBoV2lkdGhQYWdlIG1fcHJpbWFy
eVBhZ2U7IC8vIFdlIG9wdGltaXplIGZvciB0aGUgcGFnZSB0aGF0IGNvbnRhaW5zIGdseXBoIGlu
ZGljZXMgMC0yNTUuCi0gICAgT3duUHRyPEhhc2hNYXA8aW50LCBHbHlwaFdpZHRoUGFnZSo+ID4g
bV9wYWdlczsKLX07Ci0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dDNELmgKaW5kZXggN2E5YjFiOS4uOTZmNzdkOSAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCisrKyBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaApAQCAtMzMsNyArMzMsNyBA
QAogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAKIC8vIEZJWE1FOiBGaW5kIGEgYmV0dGVy
IHdheSB0byBhdm9pZCB0aGUgbmFtZSBjb25mbGljdGlvbiBmb3IgTk9fRVJST1IuCi0jaWYgKChQ
TEFURk9STShDSFJPTUlVTSkgJiYgT1MoV0lORE9XUykpIHx8IFBMQVRGT1JNKFdJTikpCisjaWYg
KChQTEFURk9STShDSFJPTUlVTSkgJiYgT1MoV0lORE9XUykpIHx8IFBMQVRGT1JNKFdJTikgfHwg
KFBMQVRGT1JNKFFUKSAmJiBPUyhXSU5ET1dTKSkpCiAjdW5kZWYgTk9fRVJST1IKICNlbmRpZgog
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuaCBi
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oCmluZGV4IGNhMDAzMWMu
LjM5YzI0OGQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NM
YXllci5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oCkBA
IC02NSw4ICs2NSw4IEBAIHR5cGVkZWYgUUdyYXBoaWNzSXRlbSBQbGF0Zm9ybUxheWVyOwogdHlw
ZWRlZiBRR3JhcGhpY3NJdGVtKiBOYXRpdmVMYXllcjsKICNlbGlmIFBMQVRGT1JNKENIUk9NSVVN
KQogbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgTGF5ZXJTa2lhOwotdHlwZWRlZiBMYXllclNr
aWEgUGxhdGZvcm1MYXllcjsKK2NsYXNzIExheWVyQ2hyb21pdW07Cit0eXBlZGVmIExheWVyQ2hy
b21pdW0gUGxhdGZvcm1MYXllcjsKIHR5cGVkZWYgdm9pZCogTmF0aXZlTGF5ZXI7CiB9CiAjZWxz
ZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5j
cHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmNwcAppbmRleCAy
ZWM4YWJiLi4wNGI2YWIxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Np
bXBsZUZvbnREYXRhLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZv
bnREYXRhLmNwcApAQCAtMTU3LDkgKzE1NywxMSBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0
Zm9ybUdseXBoSW5pdCgpCiAgICAgLy8gYXJlIG1hcHBlZCB0byB0aGUgWkVSTyBXSURUSCBTUEFD
RSBnbHlwaC4KICAgICBHbHlwaCB6ZXJvV2lkdGhTcGFjZUdseXBoID0gZ2x5cGhQYWdlWmVyby0+
Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKDApLmdseXBoOwogICAgIGlmICh6ZXJvV2lkdGhTcGFjZUds
eXBoKSB7Ci0gICAgICAgIGlmICh6ZXJvV2lkdGhTcGFjZUdseXBoICE9IG1fc3BhY2VHbHlwaCkK
LSAgICAgICAgICAgIG1fZ2x5cGhUb1dpZHRoTWFwLnNldFdpZHRoRm9yR2x5cGgoemVyb1dpZHRo
U3BhY2VHbHlwaCwgMCk7Ci0gICAgICAgIGVsc2UKKyAgICAgICAgaWYgKHplcm9XaWR0aFNwYWNl
R2x5cGggIT0gbV9zcGFjZUdseXBoKSB7CisgICAgICAgICAgICBHbHlwaE1ldHJpY3MgbWV0cmlj
czsKKyAgICAgICAgICAgIG1ldHJpY3MuaG9yaXpvbnRhbEFkdmFuY2UgPSAwOworICAgICAgICAg
ICAgbV9nbHlwaFRvTWV0cmljc01hcC5zZXRNZXRyaWNzRm9yR2x5cGgoemVyb1dpZHRoU3BhY2VH
bHlwaCwgbWV0cmljcyk7CisgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgTE9HX0VSUk9SKCJG
b250IG1hcHMgU1BBQ0UgYW5kIFpFUk8gV0lEVEggU1BBQ0UgdG8gdGhlIHNhbWUgZ2x5cGguIEds
eXBoIHdpZHRoIG5vdCBvdmVycmlkZGVuLiIpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9TaW1wbGVGb250RGF0YS5oCmluZGV4IDAzNjZlM2IuLmVmZGJiYTQgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmgKQEAgLTI2LDggKzI2LDggQEAK
IAogI2luY2x1ZGUgIkZvbnREYXRhLmgiCiAjaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgor
I2luY2x1ZGUgIkdseXBoTWV0cmljc01hcC5oIgogI2luY2x1ZGUgIkdseXBoUGFnZVRyZWVOb2Rl
LmgiCi0jaW5jbHVkZSAiR2x5cGhXaWR0aE1hcC5oIgogI2luY2x1ZGUgIlR5cGVzZXR0aW5nRmVh
dHVyZXMuaCIKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAKQEAgLTU4LDkgKzU4LDkgQEAgY2xh
c3MgRm9udERlc2NyaXB0aW9uOwogY2xhc3MgRm9udFBsYXRmb3JtRGF0YTsKIGNsYXNzIFNoYXJl
ZEJ1ZmZlcjsKIGNsYXNzIFNWR0ZvbnREYXRhOwotY2xhc3MgV2lkdGhNYXA7CiAKIGVudW0gUGl0
Y2ggeyBVbmtub3duUGl0Y2gsIEZpeGVkUGl0Y2gsIFZhcmlhYmxlUGl0Y2ggfTsKK2VudW0gR2x5
cGhNZXRyaWNzTW9kZSB7IEdseXBoQm91bmRpbmdCb3gsIEdseXBoV2lkdGhPbmx5IH07CiAKIGNs
YXNzIFNpbXBsZUZvbnREYXRhIDogcHVibGljIEZvbnREYXRhIHsKIHB1YmxpYzoKQEAgLTgxLDgg
KzgxLDkgQEAgcHVibGljOgogICAgIGZsb2F0IHhIZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX3hI
ZWlnaHQ7IH0KICAgICB1bnNpZ25lZCB1bml0c1BlckVtKCkgY29uc3QgeyByZXR1cm4gbV91bml0
c1BlckVtOyB9CiAKLSAgICBmbG9hdCB3aWR0aEZvckdseXBoKEdseXBoKSBjb25zdDsKLSAgICBm
bG9hdCBwbGF0Zm9ybVdpZHRoRm9yR2x5cGgoR2x5cGgpIGNvbnN0OworICAgIGZsb2F0IHdpZHRo
Rm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0IHsgcmV0dXJuIG1ldHJpY3NGb3JHbHlwaChnbHlw
aCwgR2x5cGhXaWR0aE9ubHkpLmhvcml6b250YWxBZHZhbmNlOyB9CisgICAgR2x5cGhNZXRyaWNz
IG1ldHJpY3NGb3JHbHlwaChHbHlwaCwgR2x5cGhNZXRyaWNzTW9kZSA9IEdseXBoQm91bmRpbmdC
b3gpIGNvbnN0OworICAgIEdseXBoTWV0cmljcyBwbGF0Zm9ybU1ldHJpY3NGb3JHbHlwaChHbHlw
aCwgR2x5cGhNZXRyaWNzTW9kZSkgY29uc3Q7CiAKICAgICBmbG9hdCBzcGFjZVdpZHRoKCkgY29u
c3QgeyByZXR1cm4gbV9zcGFjZVdpZHRoOyB9CiAgICAgZmxvYXQgYWRqdXN0ZWRTcGFjZVdpZHRo
KCkgY29uc3QgeyByZXR1cm4gbV9hZGp1c3RlZFNwYWNlV2lkdGg7IH0KQEAgLTE2Nyw3ICsxNjgs
NyBAQCBwcml2YXRlOgogICAgIHx8IChPUyhXSU5ET1dTKSAmJiBQTEFURk9STShXWCkpCiAgICAg
dm9pZCBpbml0R0RJRm9udCgpOwogICAgIHZvaWQgcGxhdGZvcm1Db21tb25EZXN0cm95KCk7Ci0g
ICAgZmxvYXQgd2lkdGhGb3JHRElHbHlwaChHbHlwaCBnbHlwaCkgY29uc3Q7CisgICAgR2x5cGhN
ZXRyaWNzIG1ldHJpY3NGb3JHRElHbHlwaChHbHlwaCBnbHlwaCkgY29uc3Q7CiAjZW5kaWYKIAog
ICAgIGludCBtX2FzY2VudDsKQEAgLTE4MSw3ICsxODIsNyBAQCBwcml2YXRlOgogCiAgICAgRm9u
dFBsYXRmb3JtRGF0YSBtX3BsYXRmb3JtRGF0YTsKIAotICAgIG11dGFibGUgR2x5cGhXaWR0aE1h
cCBtX2dseXBoVG9XaWR0aE1hcDsKKyAgICBtdXRhYmxlIEdseXBoTWV0cmljc01hcCBtX2dseXBo
VG9NZXRyaWNzTWFwOwogCiAgICAgYm9vbCBtX3RyZWF0QXNGaXhlZFBpdGNoOwogCkBAIC0yMzcs
MTYgKzIzOCwxNiBAQCBwcml2YXRlOgogICAgIAogICAgIAogI2lmICFQTEFURk9STShRVCkKLUFM
V0FZU19JTkxJTkUgZmxvYXQgU2ltcGxlRm9udERhdGE6OndpZHRoRm9yR2x5cGgoR2x5cGggZ2x5
cGgpIGNvbnN0CitBTFdBWVNfSU5MSU5FIEdseXBoTWV0cmljcyBTaW1wbGVGb250RGF0YTo6bWV0
cmljc0ZvckdseXBoKEdseXBoIGdseXBoLCBHbHlwaE1ldHJpY3NNb2RlIG1ldHJpY3NNb2RlKSBj
b25zdAogewotICAgIGZsb2F0IHdpZHRoID0gbV9nbHlwaFRvV2lkdGhNYXAud2lkdGhGb3JHbHlw
aChnbHlwaCk7Ci0gICAgaWYgKHdpZHRoICE9IGNHbHlwaFdpZHRoVW5rbm93bikKLSAgICAgICAg
cmV0dXJuIHdpZHRoOwotICAgIAotICAgIHdpZHRoID0gcGxhdGZvcm1XaWR0aEZvckdseXBoKGds
eXBoKTsKLSAgICBtX2dseXBoVG9XaWR0aE1hcC5zZXRXaWR0aEZvckdseXBoKGdseXBoLCB3aWR0
aCk7Ci0gICAgCi0gICAgcmV0dXJuIHdpZHRoOworICAgIEdseXBoTWV0cmljcyBtZXRyaWNzID0g
bV9nbHlwaFRvTWV0cmljc01hcC5tZXRyaWNzRm9yR2x5cGgoZ2x5cGgpOworICAgIGlmICgobWV0
cmljc01vZGUgPT0gR2x5cGhXaWR0aE9ubHkgJiYgbWV0cmljcy5ob3Jpem9udGFsQWR2YW5jZSAh
PSBjR2x5cGhTaXplVW5rbm93bikgfHwgKG1ldHJpY3NNb2RlID09IEdseXBoQm91bmRpbmdCb3gg
JiYgbWV0cmljcy5ib3VuZGluZ0JveC53aWR0aCgpICE9IGNHbHlwaFNpemVVbmtub3duKSkKKyAg
ICAgICAgcmV0dXJuIG1ldHJpY3M7CisKKyAgICBtZXRyaWNzID0gcGxhdGZvcm1NZXRyaWNzRm9y
R2x5cGgoZ2x5cGgsIG1ldHJpY3NNb2RlKTsKKyAgICBtX2dseXBoVG9NZXRyaWNzTWFwLnNldE1l
dHJpY3NGb3JHbHlwaChnbHlwaCwgbWV0cmljcyk7CisKKyAgICByZXR1cm4gbWV0cmljczsKIH0K
ICNlbmRpZgogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1Np
bXBsZUZvbnREYXRhQ2Fpcm8uY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9T
aW1wbGVGb250RGF0YUNhaXJvLmNwcAppbmRleCBkZjI1MzkzLi4wYmU0NWY2IDEwMDY0NAotLS0g
YS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1NpbXBsZUZvbnREYXRhQ2Fpcm8uY3Bw
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vU2ltcGxlRm9udERhdGFDYWly
by5jcHAKQEAgLTExNCw3ICsxMTQsNyBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpkZXRlcm1pbmVQ
aXRjaCgpCiAgICAgbV90cmVhdEFzRml4ZWRQaXRjaCA9IG1fcGxhdGZvcm1EYXRhLmlzRml4ZWRQ
aXRjaCgpOwogfQogCi1mbG9hdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1XaWR0aEZvckdseXBo
KEdseXBoIGdseXBoKSBjb25zdAorR2x5cGhNZXRyaWNzIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9y
bU1ldHJpY3NGb3JHbHlwaChHbHlwaCBnbHlwaCwgR2x5cGhNZXRyaWNzTW9kZSkgY29uc3QKIHsK
ICAgICBBU1NFUlQobV9wbGF0Zm9ybURhdGEubV9zY2FsZWRGb250KTsKIApAQCAtMTI1LDcgKzEy
NSwxMCBAQCBmbG9hdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBo
IGdseXBoKSBjb25zdAogICAgIGZsb2F0IHcgPSAoZmxvYXQpbV9zcGFjZVdpZHRoOwogICAgIGlm
IChjYWlyb19zY2FsZWRfZm9udF9zdGF0dXMobV9wbGF0Zm9ybURhdGEubV9zY2FsZWRGb250KSA9
PSBDQUlST19TVEFUVVNfU1VDQ0VTUyAmJiBleHRlbnRzLnhfYWR2YW5jZSAhPSAwKQogICAgICAg
ICB3ID0gKGZsb2F0KWV4dGVudHMueF9hZHZhbmNlOwotICAgIHJldHVybiB3OworICAgIAorICAg
IEdseXBoTWV0cmljcyBtZXRyaWNzOworICAgIG1ldHJpY3MuaG9yaXpvbnRhbEFkdmFuY2UgPSB3
OworICAgIHJldHVybiBtZXRyaWNzOwogfQogCiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDaHJvbWl1bVdpbi5jcHAgYi9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDaHJvbWl1bVdpbi5jcHAKaW5kZXggOWY4ZjM1NC4u
OTUzOGE4ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9G
b250Q2hyb21pdW1XaW4uY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vRm9udENocm9taXVtV2luLmNwcApAQCAtNTAzLDcgKzUwMyw3IEBAIHZvaWQgRm9udDo6ZHJh
d0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LAogICAgIGNvbnRl
eHQtPmNhbnZhcygpLT5lbmRQbGF0Zm9ybVBhaW50KCk7CiB9CiAKLWZsb2F0IEZvbnQ6OmZsb2F0
V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgU2lt
cGxlRm9udERhdGEqPiogLyogZmFsbGJhY2tGb250cyAqLykgY29uc3QKK2Zsb2F0IEZvbnQ6OmZs
b2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3Qg
U2ltcGxlRm9udERhdGEqPiogLyogZmFsbGJhY2tGb250cyAqLywgR2x5cGhPdmVyZmxvdyogLyog
Z2x5cGhPdmVyZmxvdyAqLykgY29uc3QKIHsKICAgICBVbmlzY3JpYmVIZWxwZXJUZXh0UnVuIHN0
YXRlKHJ1biwgKnRoaXMpOwogICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4oc3RhdGUud2lk
dGgoKSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Zv
bnRMaW51eC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRMaW51
eC5jcHAKaW5kZXggZTc2ZWNhOC4uZmE1NDljZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9Gb250TGludXguY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vRm9udExpbnV4LmNwcApAQCAtNTIxLDcgKzUyMSw3IEBAIHZvaWQg
Rm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogZ2MsIGNvbnN0IFRleHRSdW4m
IHJ1biwKICAgICB9CiB9CiAKLWZsb2F0IEZvbnQ6OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChj
b25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogLyogZmFs
bGJhY2tGb250cyAqLykgY29uc3QKK2Zsb2F0IEZvbnQ6OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4
dChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogLyog
ZmFsbGJhY2tGb250cyAqLywgR2x5cGhPdmVyZmxvdyogLyogZ2x5cGhPdmVyZmxvdyAqLykgY29u
c3QKIHsKICAgICBUZXh0UnVuV2Fsa2VyIHdhbGtlcihydW4sIDAsIHRoaXMpOwogICAgIHJldHVy
biB3YWxrZXIud2lkdGhPZkZ1bGxSdW4oKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vU2ltcGxlRm9udERhdGFDaHJvbWl1bVdpbi5jcHAgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NpbXBsZUZvbnREYXRhQ2hyb21pdW1XaW4uY3Bw
CmluZGV4IDNkNjhlYTguLjcyYmJmYjQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vU2ltcGxlRm9udERhdGFDaHJvbWl1bVdpbi5jcHAKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TaW1wbGVGb250RGF0YUNocm9taXVtV2luLmNw
cApAQCAtMTUxLDcgKzE1MSw3IEBAIHZvaWQgU2ltcGxlRm9udERhdGE6OmRldGVybWluZVBpdGNo
KCkKICAgICBSZWxlYXNlREMoMCwgZGMpOwogfQogCi1mbG9hdCBTaW1wbGVGb250RGF0YTo6cGxh
dGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAorR2x5cGhNZXRyaWNzIFNpbXBs
ZUZvbnREYXRhOjpwbGF0Zm9ybU1ldHJpY3NGb3JHbHlwaChHbHlwaCBnbHlwaCwgR2x5cGhNZXRy
aWNzTW9kZSkgY29uc3QKIHsKICAgICBIREMgZGMgPSBHZXREQygwKTsKICAgICBIR0RJT0JKIG9s
ZEZvbnQgPSBTZWxlY3RPYmplY3QoZGMsIG1fcGxhdGZvcm1EYXRhLmhmb250KCkpOwpAQCAtMTcw
LDcgKzE3MCw5IEBAIGZsb2F0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgo
R2x5cGggZ2x5cGgpIGNvbnN0CiAgICAgU2VsZWN0T2JqZWN0KGRjLCBvbGRGb250KTsKICAgICBS
ZWxlYXNlREMoMCwgZGMpOwogCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih3aWR0aCk7
CisgICAgR2x5cGhNZXRyaWNzIG1ldHJpY3M7CisgICAgbWV0cmljcy5ob3Jpem9udGFsQWR2YW5j
ZSA9IHN0YXRpY19jYXN0PGZsb2F0Pih3aWR0aCk7CisgICAgcmV0dXJuIG1ldHJpY3M7CiB9CiAK
IH0gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1NpbXBsZUZvbnREYXRhTGludXguY3BwIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9TaW1wbGVGb250RGF0YUxpbnV4LmNwcAppbmRleCA2MGIxYmE2
Li44YzYzOWFhIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1NpbXBsZUZvbnREYXRhTGludXguY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vU2ltcGxlRm9udERhdGFMaW51eC5jcHAKQEAgLTE3Miw3ICsxNzIsNyBAQCB2b2lk
IFNpbXBsZUZvbnREYXRhOjpkZXRlcm1pbmVQaXRjaCgpCiAgICAgbV90cmVhdEFzRml4ZWRQaXRj
aCA9IHBsYXRmb3JtRGF0YSgpLmlzRml4ZWRQaXRjaCgpOwogfQogCi1mbG9hdCBTaW1wbGVGb250
RGF0YTo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAorR2x5cGhNZXRy
aWNzIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybU1ldHJpY3NGb3JHbHlwaChHbHlwaCBnbHlwaCwg
R2x5cGhNZXRyaWNzTW9kZSAvKiBtZXRyaWNzTW9kZSAqLykgY29uc3QKIHsKICAgICBTa0FTU0VS
VChzaXplb2YoZ2x5cGgpID09IDIpOyAgIC8vIGNvbXBpbGUtdGltZSBhc3NlcnQKIApAQCAtMTg2
LDcgKzE4Niw5IEBAIGZsb2F0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgo
R2x5cGggZ2x5cGgpIGNvbnN0CiAgICAgLy8gVGhvdWdoIFdlYktpdCBzdXBwb3J0cyBub24taW50
ZWdyYWwgYWR2YW5jZXMsIFNraWEgb25seSBzdXBwb3J0cyB0aGVtCiAgICAgLy8gZm9yICJzdWJw
aXhlbCIgKGRpc3RpbmN0IGZyb20gTENEIHN1YnBpeGVsIGFudGlhbGlhc2luZykgdGV4dCwgd2hp
Y2gKICAgICAvLyB3ZSBkb24ndCB1c2UuCi0gICAgcmV0dXJuIHJvdW5kKFNrU2NhbGFyVG9GbG9h
dCh3aWR0aCkpOworICAgIEdseXBoTWV0cmljcyBtZXRyaWNzOworICAgIG1ldHJpY3MuaG9yaXpv
bnRhbEFkdmFuY2UgPSByb3VuZChTa1NjYWxhclRvRmxvYXQod2lkdGgpKTsKKyAgICByZXR1cm4g
bWV0cmljczsKIH0KIAogfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0ZvbnRFZmwuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9lZmwvRm9udEVmbC5jcHAKaW5kZXggYzdkNDExYS4uMmFlYjM5NyAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvRm9udEVmbC5jcHAKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvRm9udEVmbC5jcHAKQEAgLTQ1LDcgKzQ1LDcgQEAgYm9v
bCBGb250OjpjYW5SZXR1cm5GYWxsYmFja0ZvbnRzRm9yQ29tcGxleFRleHQoKQogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotZmxvYXQgRm9udDo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0
IFRleHRSdW4mLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qKSBjb25zdAorZmxvYXQg
Rm9udDo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBIYXNoU2V0PGNv
bnN0IFNpbXBsZUZvbnREYXRhKj4qLCBHbHlwaE92ZXJmbG93KikgY29uc3QKIHsKICAgICBub3RJ
bXBsZW1lbnRlZCgpOwogICAgIHJldHVybiAwLjBmOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ndGsvRm9udEd0ay5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2d0ay9Gb250R3RrLmNwcAppbmRleCA1YzMyMGUwLi4yOWI4M2RjIDEwMDY0NAotLS0gYS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250R3RrLmNwcAorKysgYi9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2d0ay9Gb250R3RrLmNwcApAQCAtMjg4LDcgKzI4OCw3IEBAIHN0YXRpYyBQ
YW5nb0xheW91dCogZ2V0RGVmYXVsdFBhbmdvTGF5b3V0KGNvbnN0IFRleHRSdW4mIHJ1bikKICAg
ICByZXR1cm4gbGF5b3V0OwogfQogCi1mbG9hdCBGb250OjpmbG9hdFdpZHRoRm9yQ29tcGxleFRl
eHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIC8q
IGZhbGxiYWNrRm9udHMgKi8pIGNvbnN0CitmbG9hdCBGb250OjpmbG9hdFdpZHRoRm9yQ29tcGxl
eFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4q
IC8qIGZhbGxiYWNrRm9udHMgKi8sIEdseXBoT3ZlcmZsb3cqKSBjb25zdAogewogICAgIGlmIChy
dW4ubGVuZ3RoKCkgPT0gMCkKICAgICAgICAgcmV0dXJuIDAuMGY7CmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9TaW1wbGVGb250RGF0YVBhbmdvLmNwcCBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL1NpbXBsZUZvbnREYXRhUGFuZ28uY3BwCmluZGV4IDk3
NTE0M2UuLjBlZDUzOTMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3Rr
L1NpbXBsZUZvbnREYXRhUGFuZ28uY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3RrL1NpbXBsZUZvbnREYXRhUGFuZ28uY3BwCkBAIC0xMTksNyArMTE5LDcgQEAgdm9pZCBTaW1w
bGVGb250RGF0YTo6ZGV0ZXJtaW5lUGl0Y2goKQogICAgIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPSBt
X3BsYXRmb3JtRGF0YS5pc0ZpeGVkUGl0Y2goKTsKIH0KIAotZmxvYXQgU2ltcGxlRm9udERhdGE6
OnBsYXRmb3JtV2lkdGhGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKK0dseXBoTWV0cmljcyBT
aW1wbGVGb250RGF0YTo6cGxhdGZvcm1NZXRyaWNzRm9yR2x5cGgoR2x5cGggZ2x5cGgsIEdseXBo
TWV0cmljc01vZGUpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1fcGxhdGZvcm1EYXRhLm1fc2NhbGVk
Rm9udCk7CiAKQEAgLTEzMCw3ICsxMzAsMTAgQEAgZmxvYXQgU2ltcGxlRm9udERhdGE6OnBsYXRm
b3JtV2lkdGhGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKICAgICBmbG9hdCB3ID0gKGZsb2F0
KW1fc3BhY2VXaWR0aDsKICAgICBpZiAoY2Fpcm9fc2NhbGVkX2ZvbnRfc3RhdHVzKG1fcGxhdGZv
cm1EYXRhLm1fc2NhbGVkRm9udCkgPT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MgJiYgZXh0ZW50cy54
X2FkdmFuY2UgIT0gMCkKICAgICAgICAgdyA9IChmbG9hdClleHRlbnRzLnhfYWR2YW5jZTsKLSAg
ICByZXR1cm4gdzsKKyAgICAKKyAgICBHbHlwaE1ldHJpY3MgbWV0cmljczsKKyAgICBtZXRyaWNz
Lmhvcml6b250YWxBZHZhbmNlID0gdzsKKyAgICByZXR1cm4gbWV0cmljczsKIH0KIAogfQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250SGFpa3UuY3BwIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250SGFpa3UuY3BwCmluZGV4IDQ4NzQ0
ZDkuLmQ0NjIyY2IgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3Uv
Rm9udEhhaWt1LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ZvbnRI
YWlrdS5jcHAKQEAgLTk0LDcgKzk0LDcgQEAgdm9pZCBGb250OjpkcmF3Q29tcGxleFRleHQoR3Jh
cGhpY3NDb250ZXh0KiBjdHgsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXQKIH0KIAog
Ci1mbG9hdCBGb250OjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVu
LCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMpIGNvbnN0Citm
bG9hdCBGb250OjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBI
YXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZs
b3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0CiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICBy
ZXR1cm4gMDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvU2lt
cGxlRm9udERhdGFIYWlrdS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L1Np
bXBsZUZvbnREYXRhSGFpa3UuY3BwCmluZGV4IGFkYjc1NzMuLmY0MjlhYjUgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvU2ltcGxlRm9udERhdGFIYWlrdS5jcHAK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9TaW1wbGVGb250RGF0YUhhaWt1
LmNwcApAQCAtOTMsNyArOTMsNyBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpkZXRlcm1pbmVQaXRj
aCgpCiAgICAgbV90cmVhdEFzRml4ZWRQaXRjaCA9IG1fcGxhdGZvcm1EYXRhLmZvbnQoKSAmJiBt
X3BsYXRmb3JtRGF0YS5mb250KCktPklzRml4ZWQoKTsKIH0KIAotZmxvYXQgU2ltcGxlRm9udERh
dGE6OnBsYXRmb3JtV2lkdGhGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKK0dseXBoTWV0cmlj
cyBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1NZXRyaWNzRm9yR2x5cGgoR2x5cGggZ2x5cGgsIEds
eXBoTWV0cmljc01vZGUpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3BsYXRmb3JtRGF0YS5mb250KCkp
CiAgICAgICAgIHJldHVybiAwOwpAQCAtMTAzLDcgKzEwMyw5IEBAIGZsb2F0IFNpbXBsZUZvbnRE
YXRhOjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CiAKICAgICBjaGFy
VW5pY29kZVRvVVRGOEhBQ0soZ2x5cGgsIGNoYXJBcnJheSk7CiAgICAgbV9wbGF0Zm9ybURhdGEu
Zm9udCgpLT5HZXRFc2NhcGVtZW50cyhjaGFyQXJyYXksIDEsIGVzY2FwZW1lbnRzKTsKLSAgICBy
ZXR1cm4gZXNjYXBlbWVudHNbMF0gKiBtX3BsYXRmb3JtRGF0YS5mb250KCktPlNpemUoKTsKKyAg
ICBHbHlwaE1ldHJpY3MgbWV0cmljczsKKyAgICBtZXRyaWNzLmhvcml6b250YWxBZHZhbmNlID0g
ZXNjYXBlbWVudHNbMF0gKiBtX3BsYXRmb3JtRGF0YS5mb250KCktPlNpemUoKTsKKyAgICByZXR1
cm4gbWV0cmljczsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyLmNwcCBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAKaW5k
ZXggYTNiYjhmZi4uYjUwMTI5MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCkBAIC02OCw2ICs2OCwxMCBAQCBD
b21wbGV4VGV4dENvbnRyb2xsZXI6OkNvbXBsZXhUZXh0Q29udHJvbGxlcihjb25zdCBGb250KiBm
b250LCBjb25zdCBUZXh0UnVuJiBydQogICAgICwgbV9jaGFyYWN0ZXJJbkN1cnJlbnRHbHlwaCgw
KQogICAgICwgbV9maW5hbFJvdW5kaW5nV2lkdGgoMCkKICAgICAsIG1fZmFsbGJhY2tGb250cyhm
YWxsYmFja0ZvbnRzKQorICAgICwgbV9taW5HbHlwaEJvdW5kaW5nQm94WChudW1lcmljX2xpbWl0
czxmbG9hdD46Om1heCgpKQorICAgICwgbV9tYXhHbHlwaEJvdW5kaW5nQm94WChudW1lcmljX2xp
bWl0czxmbG9hdD46Om1pbigpKQorICAgICwgbV9taW5HbHlwaEJvdW5kaW5nQm94WShudW1lcmlj
X2xpbWl0czxmbG9hdD46Om1heCgpKQorICAgICwgbV9tYXhHbHlwaEJvdW5kaW5nQm94WShudW1l
cmljX2xpbWl0czxmbG9hdD46Om1pbigpKQogICAgICwgbV9sYXN0Um91bmRpbmdHbHlwaCgwKQog
ewogICAgIG1fcGFkZGluZyA9IG1fcnVuLnBhZGRpbmcoKTsKQEAgLTQzOCw2ICs0NDIsNyBAQCB2
b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6YWRqdXN0R2x5cGhzQW5kQWR2YW5jZXMoKQogICAg
ICAgICBDR0Zsb2F0IHJvdW5kZWRTcGFjZVdpZHRoID0gcm91bmRDR0Zsb2F0KGZvbnREYXRhLT5z
cGFjZVdpZHRoKCkpOwogICAgICAgICBib29sIHJvdW5kc0FkdmFuY2VzID0gIW1fZm9udC5pc1By
aW50ZXJGb250KCkgJiYgZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLnJvdW5kc0dseXBoQWR2YW5j
ZXMoKTsKICAgICAgICAgYm9vbCBoYXNFeHRyYVNwYWNpbmcgPSAobV9mb250LmxldHRlclNwYWNp
bmcoKSB8fCBtX2ZvbnQud29yZFNwYWNpbmcoKSB8fCBtX3BhZGRpbmcpICYmICFtX3J1bi5zcGFj
aW5nRGlzYWJsZWQoKTsKKyAgICAgICAgQ0dQb2ludCBnbHlwaE9yaWdpbiA9IENHUG9pbnRaZXJv
OwogICAgICAgICBDRkluZGV4IGxhc3RDaGFyYWN0ZXJJbmRleCA9IG1fcnVuLmx0cigpID8gbnVt
ZXJpY19saW1pdHM8Q0ZJbmRleD46Om1pbigpIDogbnVtZXJpY19saW1pdHM8Q0ZJbmRleD46Om1h
eCgpOwogICAgICAgICBib29sIGlzTW9ub3RvbmljID0gdHJ1ZTsKIApAQCAtNTQxLDYgKzU0Niwx
NiBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6YWRqdXN0R2x5cGhzQW5kQWR2YW5jZXMo
KQogICAgICAgICAgICAgYWR2YW5jZS5oZWlnaHQgKj0gLTE7CiAgICAgICAgICAgICBtX2FkanVz
dGVkQWR2YW5jZXMuYXBwZW5kKGFkdmFuY2UpOwogICAgICAgICAgICAgbV9hZGp1c3RlZEdseXBo
cy5hcHBlbmQoZ2x5cGgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBHbHlwaE1ldHJpY3Mg
Z2x5cGhNZXRyaWNzID0gZm9udERhdGEtPm1ldHJpY3NGb3JHbHlwaChnbHlwaCk7CisgICAgICAg
ICAgICBnbHlwaE1ldHJpY3MuYm91bmRpbmdCb3gubW92ZShnbHlwaE9yaWdpbi54LCBnbHlwaE9y
aWdpbi55KTsKKyAgICAgICAgICAgIG1fbWluR2x5cGhCb3VuZGluZ0JveFggPSBtaW4obV9taW5H
bHlwaEJvdW5kaW5nQm94WCwgZ2x5cGhNZXRyaWNzLmJvdW5kaW5nQm94LngoKSk7CisgICAgICAg
ICAgICBtX21heEdseXBoQm91bmRpbmdCb3hYID0gbWF4KG1fbWF4R2x5cGhCb3VuZGluZ0JveFgs
IGdseXBoTWV0cmljcy5ib3VuZGluZ0JveC5yaWdodCgpKTsKKyAgICAgICAgICAgIG1fbWluR2x5
cGhCb3VuZGluZ0JveFkgPSBtaW4obV9taW5HbHlwaEJvdW5kaW5nQm94WSwgZ2x5cGhNZXRyaWNz
LmJvdW5kaW5nQm94LnkoKSk7CisgICAgICAgICAgICBtX21heEdseXBoQm91bmRpbmdCb3hZID0g
bWF4KG1fbWF4R2x5cGhCb3VuZGluZ0JveFksIGdseXBoTWV0cmljcy5ib3VuZGluZ0JveC5ib3R0
b20oKSk7CisgICAgICAgICAgICBnbHlwaE9yaWdpbi54ICs9IGFkdmFuY2Uud2lkdGg7CisgICAg
ICAgICAgICBnbHlwaE9yaWdpbi55ICs9IGFkdmFuY2UuaGVpZ2h0OworICAgICAgICAgICAgCiAg
ICAgICAgICAgICBsYXN0Q2hhcmFjdGVySW5kZXggPSBjaGFyYWN0ZXJJbmRleDsKICAgICAgICAg
fQogICAgICAgICBpZiAoIWlzTW9ub3RvbmljKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyLmggYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuaAppbmRleCA1M2U4ZjdhLi4yODAz
MjdmIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4
dENvbnRyb2xsZXIuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4
VGV4dENvbnRyb2xsZXIuaApAQCAtNjIsNiArNjIsMTEgQEAgcHVibGljOgogICAgIC8vIEV4dHJh
IHdpZHRoIHRvIHRoZSBsZWZ0IG9mIHRoZSBsZWZ0bW9zdCBnbHlwaC4KICAgICBmbG9hdCBmaW5h
bFJvdW5kaW5nV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2ZpbmFsUm91bmRpbmdXaWR0aDsgfQog
CisgICAgZmxvYXQgbWluR2x5cGhCb3VuZGluZ0JveFgoKSBjb25zdCB7IHJldHVybiBtX21pbkds
eXBoQm91bmRpbmdCb3hYOyB9CisgICAgZmxvYXQgbWF4R2x5cGhCb3VuZGluZ0JveFgoKSBjb25z
dCB7IHJldHVybiBtX21heEdseXBoQm91bmRpbmdCb3hYOyB9CisgICAgZmxvYXQgbWluR2x5cGhC
b3VuZGluZ0JveFkoKSBjb25zdCB7IHJldHVybiBtX21pbkdseXBoQm91bmRpbmdCb3hZOyB9Cisg
ICAgZmxvYXQgbWF4R2x5cGhCb3VuZGluZ0JveFkoKSBjb25zdCB7IHJldHVybiBtX21heEdseXBo
Qm91bmRpbmdCb3hZOyB9CisgICAgCiBwcml2YXRlOgogICAgIGNsYXNzIENvbXBsZXhUZXh0UnVu
IDogcHVibGljIFJlZkNvdW50ZWQ8Q29tcGxleFRleHRSdW4+IHsKICAgICBwdWJsaWM6CkBAIC0x
NzMsNiArMTc4LDExIEBAIHByaXZhdGU6CiAKICAgICBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnRE
YXRhKj4qIG1fZmFsbGJhY2tGb250czsKIAorICAgIGZsb2F0IG1fbWluR2x5cGhCb3VuZGluZ0Jv
eFg7CisgICAgZmxvYXQgbV9tYXhHbHlwaEJvdW5kaW5nQm94WDsKKyAgICBmbG9hdCBtX21pbkds
eXBoQm91bmRpbmdCb3hZOworICAgIGZsb2F0IG1fbWF4R2x5cGhCb3VuZGluZ0JveFk7CisgICAg
CiAgICAgdW5zaWduZWQgbV9sYXN0Um91bmRpbmdHbHlwaDsKIH07CiAKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDb21wbGV4VGV4dE1hYy5jcHAgYi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q29tcGxleFRleHRNYWMuY3BwCmluZGV4IDBk
YjI2MDEuLmI3ZWQwZTkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0ZvbnRDb21wbGV4VGV4dE1hYy5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9t
YWMvRm9udENvbXBsZXhUZXh0TWFjLmNwcApAQCAtMzMsNiArMzMsOCBAQAogI2luY2x1ZGUgIlNp
bXBsZUZvbnREYXRhLmgiCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAordXNpbmcgbmFt
ZXNwYWNlIHN0ZDsKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBGbG9hdFJlY3QgRm9udDo6c2Vs
ZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgSW50UG9p
bnQmIHBvaW50LCBpbnQgaCwKQEAgLTgzLDkgKzg1LDE1IEBAIHZvaWQgRm9udDo6ZHJhd0NvbXBs
ZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25z
dCBGCiAgICAgZHJhd0dseXBoQnVmZmVyKGNvbnRleHQsIGdseXBoQnVmZmVyLCBydW4sIHN0YXJ0
UG9pbnQpOwogfQogCi1mbG9hdCBGb250OjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3Qg
VGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9u
dHMpIGNvbnN0CitmbG9hdCBGb250OjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3QgVGV4
dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMs
IEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0CiB7CiAgICAgQ29tcGxleFRleHRD
b250cm9sbGVyIGNvbnRyb2xsZXIodGhpcywgcnVuLCB0cnVlLCBmYWxsYmFja0ZvbnRzKTsKKyAg
ICBpZiAoZ2x5cGhPdmVyZmxvdykgeworICAgICAgICBnbHlwaE92ZXJmbG93LT50b3AgPSBtYXg8
aW50PihnbHlwaE92ZXJmbG93LT50b3AsIGNlaWxmKC1jb250cm9sbGVyLm1pbkdseXBoQm91bmRp
bmdCb3hZKCkpIC0gYXNjZW50KCkpOworICAgICAgICBnbHlwaE92ZXJmbG93LT5ib3R0b20gPSBt
YXg8aW50PihnbHlwaE92ZXJmbG93LT5ib3R0b20sIGNlaWxmKGNvbnRyb2xsZXIubWF4R2x5cGhC
b3VuZGluZ0JveFkoKSkgLSBkZXNjZW50KCkpOworICAgICAgICBnbHlwaE92ZXJmbG93LT5sZWZ0
ID0gbWF4PGludD4oMCwgY2VpbGYoLWNvbnRyb2xsZXIubWluR2x5cGhCb3VuZGluZ0JveFgoKSkp
OworICAgICAgICBnbHlwaE92ZXJmbG93LT5yaWdodCA9IG1heDxpbnQ+KDAsIGNlaWxmKGNvbnRy
b2xsZXIubWF4R2x5cGhCb3VuZGluZ0JveFgoKSAtIGNvbnRyb2xsZXIudG90YWxXaWR0aCgpKSk7
CisgICAgfQogICAgIHJldHVybiBjb250cm9sbGVyLnRvdGFsV2lkdGgoKTsKIH0KIApkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW0g
Yi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YU1hYy5tbQppbmRl
eCAwOTk0N2Q4Li40NmU0NDIzIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L21hYy9TaW1wbGVGb250RGF0YU1hYy5tbQorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L21hYy9TaW1wbGVGb250RGF0YU1hYy5tbQpAQCAtNDA3LDE3ICs0MDcsMzEgQEAgdm9pZCBTaW1w
bGVGb250RGF0YTo6ZGV0ZXJtaW5lUGl0Y2goKQogICAgICAgICAgICBbbmFtZSBjYXNlSW5zZW5z
aXRpdmVDb21wYXJlOkAiTW9ub3R5cGVDb3JzaXZhIl0gIT0gTlNPcmRlcmVkU2FtZTsKIH0KIAot
ZmxvYXQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtV2lkdGhGb3JHbHlwaChHbHlwaCBnbHlwaCkg
Y29uc3QKK0dseXBoTWV0cmljcyBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1NZXRyaWNzRm9yR2x5
cGgoR2x5cGggZ2x5cGgsIEdseXBoTWV0cmljc01vZGUgbWV0cmljc01vZGUpIGNvbnN0CiB7Ci0g
ICAgTlNGb250KiBmb250ID0gbV9wbGF0Zm9ybURhdGEuZm9udCgpOwotICAgIGZsb2F0IHBvaW50
U2l6ZSA9IG1fcGxhdGZvcm1EYXRhLm1fc2l6ZTsKKyAgICBOU0ZvbnQqIGZvbnQgPSBwbGF0Zm9y
bURhdGEoKS5mb250KCk7CisgICAgZmxvYXQgcG9pbnRTaXplID0gcGxhdGZvcm1EYXRhKCkubV9z
aXplOwogICAgIENHQWZmaW5lVHJhbnNmb3JtIG0gPSBDR0FmZmluZVRyYW5zZm9ybU1ha2VTY2Fs
ZShwb2ludFNpemUsIHBvaW50U2l6ZSk7CiAgICAgQ0dTaXplIGFkdmFuY2U7Ci0gICAgaWYgKCF3
a0dldEdseXBoVHJhbnNmb3JtZWRBZHZhbmNlcyhtX3BsYXRmb3JtRGF0YS5jZ0ZvbnQoKSwgZm9u
dCwgJm0sICZnbHlwaCwgJmFkdmFuY2UpKSB7CisgICAgaWYgKCF3a0dldEdseXBoVHJhbnNmb3Jt
ZWRBZHZhbmNlcyhwbGF0Zm9ybURhdGEoKS5jZ0ZvbnQoKSwgZm9udCwgJm0sICZnbHlwaCwgJmFk
dmFuY2UpKSB7CiAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGNhY2hlIGdseXBoIHdpZHRo
cyBmb3IgJUAgJWYiLCBbZm9udCBkaXNwbGF5TmFtZV0sIHBvaW50U2l6ZSk7CiAgICAgICAgIGFk
dmFuY2Uud2lkdGggPSAwOwogICAgIH0KLSAgICByZXR1cm4gYWR2YW5jZS53aWR0aCArIG1fc3lu
dGhldGljQm9sZE9mZnNldDsKKyAgICBHbHlwaE1ldHJpY3MgbWV0cmljczsKKyAgICBtZXRyaWNz
Lmhvcml6b250YWxBZHZhbmNlID0gYWR2YW5jZS53aWR0aCArIG1fc3ludGhldGljQm9sZE9mZnNl
dDsKKyNpZm5kZWYgQlVJTERJTkdfT05fVElHRVIKKyAgICBpZiAobWV0cmljc01vZGUgPT0gR2x5
cGhCb3VuZGluZ0JveCkgeworICAgICAgICBDR1JlY3QgYm91bmRpbmdCb3g7CisgICAgICAgIENH
Rm9udEdldEdseXBoQkJveGVzKHBsYXRmb3JtRGF0YSgpLmNnRm9udCgpLCAmZ2x5cGgsIDEsICZi
b3VuZGluZ0JveCk7CisgICAgICAgIENHRmxvYXQgc2NhbGUgPSBwb2ludFNpemUgLyB1bml0c1Bl
ckVtKCk7CisgICAgICAgIG1ldHJpY3MuYm91bmRpbmdCb3ggPSBDR1JlY3RBcHBseUFmZmluZVRy
YW5zZm9ybShib3VuZGluZ0JveCwgQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlU2NhbGUoc2NhbGUsIC1z
Y2FsZSkpOworICAgICAgICBpZiAobV9zeW50aGV0aWNCb2xkT2Zmc2V0KQorICAgICAgICAgICAg
bWV0cmljcy5ib3VuZGluZ0JveC5zZXRXaWR0aChtZXRyaWNzLmJvdW5kaW5nQm94LndpZHRoKCkg
KyBtX3N5bnRoZXRpY0JvbGRPZmZzZXQpOworICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFN
KG1ldHJpY3NNb2RlKTsKKyNlbmRpZgorICAgIHJldHVybiBtZXRyaWNzOwogfQogCiAjaWYgVVNF
KEFUU1VJKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UXQu
Y3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UXQuY3BwCmluZGV4IGZkNzVl
MzQuLjNjNTFjNjcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9u
dFF0LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRRdC5jcHAKQEAg
LTE2OSw3ICsxNjksNyBAQCB2b2lkIEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRl
eHQqIGN0eCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdAogICAgICAgICBwLT5kcmF3
VGV4dChwdCwgc3RyaW5nLCBmbGFncywgcnVuLnBhZGRpbmcoKSk7CiB9CiAKLWZsb2F0IEZvbnQ6
OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29u
c3QgU2ltcGxlRm9udERhdGEqPiopIGNvbnN0CitmbG9hdCBGb250OjpmbG9hdFdpZHRoRm9yQ29t
cGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRh
Kj4qLCBHbHlwaE92ZXJmbG93KikgY29uc3QKIHsKICAgICBpZiAoIXJ1bi5sZW5ndGgoKSkKICAg
ICAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0
L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9H
cmFwaGljc0NvbnRleHQzRFF0LmNwcAppbmRleCBiOWRjZDhlLi5kOGRhNDdjIDEwMDY0NAotLS0g
YS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAK
QEAgLTUyLDYgKzUyLDkgQEAgdHlwZWRlZiBjaGFyIEdMY2hhcjsKICNkZWZpbmUgQVBJRU5UUlkK
ICNlbmRpZgogCit0eXBlZGVmIHB0cmRpZmZfdCBHTHNpemVpcHRyVHlwZTsKK3R5cGVkZWYgcHRy
ZGlmZl90IEdMaW50cHRyVHlwZTsKKwogdHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xBY3RpdmVU
ZXh0dXJlVHlwZSkgKEdMZW51bSk7CiB0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbEF0dGFjaFNo
YWRlclR5cGUpIChHTHVpbnQsIEdMdWludCk7CiB0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbEJp
bmRBdHRyaWJMb2NhdGlvblR5cGUpIChHTHVpbnQsIEdMdWludCwgY29uc3QgY2hhciopOwpAQCAt
NjIsOCArNjUsOCBAQCB0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbEJsZW5kQ29sb3JUeXBlKSAo
R0xjbGFtcGYsIEdMY2xhbXBmLCBHTGNsYW1wZiwgR0xjbGFtcAogdHlwZWRlZiB2b2lkIChBUElF
TlRSWSogZ2xCbGVuZEVxdWF0aW9uVHlwZSkgKEdMZW51bSk7CiB0eXBlZGVmIHZvaWQgKEFQSUVO
VFJZKiBnbEJsZW5kRXF1YXRpb25TZXBhcmF0ZVR5cGUpKEdMZW51bSwgR0xlbnVtKTsKIHR5cGVk
ZWYgdm9pZCAoQVBJRU5UUlkqIGdsQmxlbmRGdW5jU2VwYXJhdGVUeXBlKShHTGVudW0gc3JjUkdC
LCBHTGVudW0gZHN0UkdCLCBHTGVudW0gc3JjQWxwaGEsIEdMZW51bSBkc3RBbHBoYSk7Ci10eXBl
ZGVmIHZvaWQgKEFQSUVOVFJZKiBnbEJ1ZmZlckRhdGFUeXBlKSAoR0xlbnVtLCBHTHNpemVpcHRy
LCBjb25zdCBHTHZvaWQqLCBHTGVudW0pOwotdHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xCdWZm
ZXJTdWJEYXRhVHlwZSkgKEdMZW51bSwgR0xpbnRwdHIsIEdMc2l6ZWlwdHIsIGNvbnN0IEdMdm9p
ZCopOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xCdWZmZXJEYXRhVHlwZSkgKEdMZW51bSwg
R0xzaXplaXB0clR5cGUsIGNvbnN0IEdMdm9pZCosIEdMZW51bSk7Cit0eXBlZGVmIHZvaWQgKEFQ
SUVOVFJZKiBnbEJ1ZmZlclN1YkRhdGFUeXBlKSAoR0xlbnVtLCBHTGludHB0clR5cGUsIEdMc2l6
ZWlwdHJUeXBlLCBjb25zdCBHTHZvaWQqKTsKIHR5cGVkZWYgR0xlbnVtIChBUElFTlRSWSogZ2xD
aGVja0ZyYW1lYnVmZmVyU3RhdHVzVHlwZSkgKEdMZW51bSk7CiB0eXBlZGVmIHZvaWQgKEFQSUVO
VFJZKiBnbENvbXBpbGVTaGFkZXJUeXBlKSAoR0x1aW50KTsKIHR5cGVkZWYgR0x1aW50IChBUElF
TlRSWSogZ2xDcmVhdGVQcm9ncmFtVHlwZSkgKCk7CkBAIC0xNDksNiArMTUyLDggQEAgcHVibGlj
OgogCiAgICAgYm9vbCBpc0NvbnRleHRWYWxpZCgpIHsgcmV0dXJuIG1fY29udGV4dFZhbGlkOyB9
CiAKKworCiAgICAgZ2xBY3RpdmVUZXh0dXJlVHlwZSBhY3RpdmVUZXh0dXJlOwogICAgIGdsQXR0
YWNoU2hhZGVyVHlwZSBhdHRhY2hTaGFkZXI7CiAgICAgZ2xCaW5kQXR0cmliTG9jYXRpb25UeXBl
IGJpbmRBdHRyaWJMb2NhdGlvbjsKQEAgLTgxMywyMCArODE4LDIzIEBAIGJvb2wgR3JhcGhpY3ND
b250ZXh0M0Q6OmdldEFjdGl2ZUF0dHJpYihXZWJHTFByb2dyYW0qIHByb2dyYW0sIHVuc2lnbmVk
IGxvbmcgaW5kCiAgICAgR0xpbnQgbWF4TGVuZ3RoOwogICAgIG1faW50ZXJuYWwtPmdldFByb2dy
YW1pdihzdGF0aWNfY2FzdDxHTHVpbnQ+KHByb2dyYW0tPm9iamVjdCgpKSwgR3JhcGhpY3NDb250
ZXh0M0Q6OkFDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSCwgJm1heExlbmd0aCk7CiAKLSAgICBH
TGNoYXIgbmFtZVttYXhMZW5ndGhdOyAKKyAgICBHTGNoYXIqIG5hbWUgPSAoR0xjaGFyKikgZmFz
dE1hbGxvYyhtYXhMZW5ndGgpOwogICAgIEdMc2l6ZWkgbmFtZUxlbmd0aDsKICAgICBHTGludCBz
aXplOwogICAgIEdMZW51bSB0eXBlOwogCiAgICAgbV9pbnRlcm5hbC0+Z2V0QWN0aXZlQXR0cmli
KHN0YXRpY19jYXN0PEdMdWludD4ocHJvZ3JhbS0+b2JqZWN0KCkpLCBpbmRleCwgbWF4TGVuZ3Ro
LCAmbmFtZUxlbmd0aCwgJnNpemUsICZ0eXBlLCBuYW1lKTsKIAotICAgIGlmICghbmFtZUxlbmd0
aCkKKyAgICBpZiAoIW5hbWVMZW5ndGgpIHsKKyAgICAgICAgZmFzdEZyZWUobmFtZSk7CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKICAgICBpbmZvLm5hbWUgPSBTdHJpbmcobmFtZSwg
bmFtZUxlbmd0aCk7CiAgICAgaW5mby50eXBlID0gdHlwZTsKICAgICBpbmZvLnNpemUgPSBzaXpl
OwogCisgICAgZmFzdEZyZWUobmFtZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAgICAgCkBAIC04
NDIsMjAgKzg1MCwyMyBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBY3RpdmVVbmlmb3Jt
KFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgdW5zaWduZWQgbG9uZyBpbgogICAgIEdMaW50IG1heExl
bmd0aDsKICAgICBtX2ludGVybmFsLT5nZXRQcm9ncmFtaXYoc3RhdGljX2Nhc3Q8R0x1aW50Pihw
cm9ncmFtLT5vYmplY3QoKSksIEdyYXBoaWNzQ29udGV4dDNEOjpBQ1RJVkVfVU5JRk9STV9NQVhf
TEVOR1RILCAmbWF4TGVuZ3RoKTsKIAotICAgIEdMY2hhciBuYW1lW21heExlbmd0aF07CisgICAg
R0xjaGFyKiBuYW1lID0gKEdMY2hhciopIGZhc3RNYWxsb2MobWF4TGVuZ3RoKTsKICAgICBHTHNp
emVpIG5hbWVMZW5ndGg7CiAgICAgR0xpbnQgc2l6ZTsKICAgICBHTGVudW0gdHlwZTsKIAogICAg
IG1faW50ZXJuYWwtPmdldEFjdGl2ZVVuaWZvcm0oc3RhdGljX2Nhc3Q8R0x1aW50Pihwcm9ncmFt
LT5vYmplY3QoKSksIGluZGV4LCBtYXhMZW5ndGgsICZuYW1lTGVuZ3RoLCAmc2l6ZSwgJnR5cGUs
IG5hbWUpOwogCi0gICAgaWYgKCFuYW1lTGVuZ3RoKQorICAgIGlmICghbmFtZUxlbmd0aCkgewor
ICAgICAgICBmYXN0RnJlZShuYW1lKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAog
ICAgIGluZm8ubmFtZSA9IFN0cmluZyhuYW1lLCBuYW1lTGVuZ3RoKTsKICAgICBpbmZvLnR5cGUg
PSB0eXBlOwogICAgIGluZm8uc2l6ZSA9IHNpemU7CiAKKyAgICBmYXN0RnJlZShuYW1lKTsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL0dyYXBoaWNzTGF5ZXJTa2lhLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c2tpYS9HcmFwaGljc0xheWVyU2tpYS5jcHAKaW5kZXggZGJhMGU1NS4uYzhiMGJiYiAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzTGF5ZXJTa2lhLmNw
cAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NMYXllclNraWEu
Y3BwCkBAIC01OSwyMiArNTksMjIgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1zdGF0aWMgdm9pZCBzZXRMYXllckJvcmRlckNvbG9yKExheWVyU2tpYSYg
bGF5ZXIsIGNvbnN0IENvbG9yJiBjb2xvcikKK3N0YXRpYyB2b2lkIHNldExheWVyQm9yZGVyQ29s
b3IoTGF5ZXJDaHJvbWl1bSYgbGF5ZXIsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKICAgICBsYXll
ci5zZXRCb3JkZXJDb2xvcihjb2xvcik7CiB9CiAKLXN0YXRpYyB2b2lkIGNsZWFyQm9yZGVyQ29s
b3IoTGF5ZXJTa2lhJiBsYXllcikKK3N0YXRpYyB2b2lkIGNsZWFyQm9yZGVyQ29sb3IoTGF5ZXJD
aHJvbWl1bSYgbGF5ZXIpCiB7CiAgICAgbGF5ZXIuc2V0Qm9yZGVyQ29sb3IoMCk7CiB9CiAKLXN0
YXRpYyB2b2lkIHNldExheWVyQmFja2dyb3VuZENvbG9yKExheWVyU2tpYSYgbGF5ZXIsIGNvbnN0
IENvbG9yJiBjb2xvcikKK3N0YXRpYyB2b2lkIHNldExheWVyQmFja2dyb3VuZENvbG9yKExheWVy
Q2hyb21pdW0mIGxheWVyLCBjb25zdCBDb2xvciYgY29sb3IpCiB7CiAgICAgbGF5ZXIuc2V0QmFj
a2dyb3VuZENvbG9yKGNvbG9yKTsKIH0KIAotc3RhdGljIHZvaWQgY2xlYXJMYXllckJhY2tncm91
bmRDb2xvcihMYXllclNraWEmIGxheWVyKQorc3RhdGljIHZvaWQgY2xlYXJMYXllckJhY2tncm91
bmRDb2xvcihMYXllckNocm9taXVtJiBsYXllcikKIHsKICAgICBsYXllci5zZXRCYWNrZ3JvdW5k
Q29sb3IoMCk7CiB9CkBAIC04NiwyMCArODYsMjAgQEAgR3JhcGhpY3NMYXllcjo6Q29tcG9zaXRp
bmdDb29yZGluYXRlc09yaWVudGF0aW9uIEdyYXBoaWNzTGF5ZXI6OmNvbXBvc2l0aW5nQ29vcmQK
IAogUGFzc093blB0cjxHcmFwaGljc0xheWVyPiBHcmFwaGljc0xheWVyOjpjcmVhdGUoR3JhcGhp
Y3NMYXllckNsaWVudCogY2xpZW50KQogewotICAgIHJldHVybiBuZXcgR3JhcGhpY3NMYXllclNr
aWEoY2xpZW50KTsKKyAgICByZXR1cm4gbmV3IEdyYXBoaWNzTGF5ZXJDaHJvbWl1bShjbGllbnQp
OwogfQogCi1HcmFwaGljc0xheWVyU2tpYTo6R3JhcGhpY3NMYXllclNraWEoR3JhcGhpY3NMYXll
ckNsaWVudCogY2xpZW50KQorR3JhcGhpY3NMYXllckNocm9taXVtOjpHcmFwaGljc0xheWVyQ2hy
b21pdW0oR3JhcGhpY3NMYXllckNsaWVudCogY2xpZW50KQogICAgIDogR3JhcGhpY3NMYXllcihj
bGllbnQpCiAgICAgLCBtX2NvbnRlbnRzTGF5ZXJQdXJwb3NlKE5vQ29udGVudHNMYXllcikKICAg
ICAsIG1fY29udGVudHNMYXllckhhc0JhY2tncm91bmRDb2xvcihmYWxzZSkKIHsKLSAgICBtX2xh
eWVyID0gTGF5ZXJTa2lhOjpjcmVhdGUoTGF5ZXJTa2lhOjpMYXllciwgdGhpcyk7CisgICAgbV9s
YXllciA9IExheWVyQ2hyb21pdW06OmNyZWF0ZShMYXllckNocm9taXVtOjpMYXllciwgdGhpcyk7
CiAKICAgICB1cGRhdGVEZWJ1Z0luZGljYXRvcnMoKTsKIH0KIAotR3JhcGhpY3NMYXllclNraWE6
On5HcmFwaGljc0xheWVyU2tpYSgpCitHcmFwaGljc0xheWVyQ2hyb21pdW06On5HcmFwaGljc0xh
eWVyQ2hyb21pdW0oKQogewogICAgIC8vIENsZWFuIHVwIHRoZSBTa2lhIGxheWVyLgogICAgIGlm
IChtX2xheWVyKQpAQCAtMTA5LDE4ICsxMDksMTggQEAgR3JhcGhpY3NMYXllclNraWE6On5HcmFw
aGljc0xheWVyU2tpYSgpCiAgICAgICAgIG1fdHJhbnNmb3JtTGF5ZXItPnJlbW92ZUZyb21TdXBl
cmxheWVyKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NMYXllclNraWE6OnNldE5hbWUoY29uc3QgU3Ry
aW5nJiBpbk5hbWUpCit2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0TmFtZShjb25zdCBT
dHJpbmcmIGluTmFtZSkKIHsKLSAgICBTdHJpbmcgbmFtZSA9IFN0cmluZzo6Zm9ybWF0KCJHcmFw
aGljc0xheWVyU2tpYSglcCkgR3JhcGhpY3NMYXllciglcCkgIiwgbV9sYXllci5nZXQoKSwgdGhp
cykgKyBpbk5hbWU7CisgICAgU3RyaW5nIG5hbWUgPSBTdHJpbmc6OmZvcm1hdCgiR3JhcGhpY3NM
YXllckNocm9taXVtKCVwKSBHcmFwaGljc0xheWVyKCVwKSAiLCBtX2xheWVyLmdldCgpLCB0aGlz
KSArIGluTmFtZTsKICAgICBHcmFwaGljc0xheWVyOjpzZXROYW1lKG5hbWUpOwogfQogCi1OYXRp
dmVMYXllciBHcmFwaGljc0xheWVyU2tpYTo6bmF0aXZlTGF5ZXIoKSBjb25zdAorTmF0aXZlTGF5
ZXIgR3JhcGhpY3NMYXllckNocm9taXVtOjpuYXRpdmVMYXllcigpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIG1fbGF5ZXIuZ2V0KCk7CiB9CiAKLWJvb2wgR3JhcGhpY3NMYXllclNraWE6OnNldENoaWxk
cmVuKGNvbnN0IFZlY3RvcjxHcmFwaGljc0xheWVyKj4mIGNoaWxkcmVuKQorYm9vbCBHcmFwaGlj
c0xheWVyQ2hyb21pdW06OnNldENoaWxkcmVuKGNvbnN0IFZlY3RvcjxHcmFwaGljc0xheWVyKj4m
IGNoaWxkcmVuKQogewogICAgIGJvb2wgY2hpbGRyZW5DaGFuZ2VkID0gR3JhcGhpY3NMYXllcjo6
c2V0Q2hpbGRyZW4oY2hpbGRyZW4pOwogICAgIC8vIEZJWE1FOiBHcmFwaGljc0xheWVyOjpzZXRD
aGlsZHJlbiBjYWxscyBhZGRDaGlsZCgpIGZvciBlYWNoIHN1YmxheWVyLCB3aGljaApAQCAtMTMx
LDMxICsxMzEsMzEgQEAgYm9vbCBHcmFwaGljc0xheWVyU2tpYTo6c2V0Q2hpbGRyZW4oY29uc3Qg
VmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiYgY2hpbGRyZW4pCiAgICAgcmV0dXJuIGNoaWxkcmVuQ2hh
bmdlZDsKIH0KIAotdm9pZCBHcmFwaGljc0xheWVyU2tpYTo6YWRkQ2hpbGQoR3JhcGhpY3NMYXll
ciogY2hpbGRMYXllcikKK3ZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjphZGRDaGlsZChHcmFw
aGljc0xheWVyKiBjaGlsZExheWVyKQogewogICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkKGNo
aWxkTGF5ZXIpOwogICAgIHVwZGF0ZVN1YmxheWVyTGlzdCgpOwogfQogCi12b2lkIEdyYXBoaWNz
TGF5ZXJTa2lhOjphZGRDaGlsZEF0SW5kZXgoR3JhcGhpY3NMYXllciogY2hpbGRMYXllciwgaW50
IGluZGV4KQordm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OmFkZENoaWxkQXRJbmRleChHcmFw
aGljc0xheWVyKiBjaGlsZExheWVyLCBpbnQgaW5kZXgpCiB7CiAgICAgR3JhcGhpY3NMYXllcjo6
YWRkQ2hpbGRBdEluZGV4KGNoaWxkTGF5ZXIsIGluZGV4KTsKICAgICB1cGRhdGVTdWJsYXllckxp
c3QoKTsKIH0KIAotdm9pZCBHcmFwaGljc0xheWVyU2tpYTo6YWRkQ2hpbGRCZWxvdyhHcmFwaGlj
c0xheWVyKiBjaGlsZExheWVyLCBHcmFwaGljc0xheWVyKiBzaWJsaW5nKQordm9pZCBHcmFwaGlj
c0xheWVyQ2hyb21pdW06OmFkZENoaWxkQmVsb3coR3JhcGhpY3NMYXllciogY2hpbGRMYXllciwg
R3JhcGhpY3NMYXllciogc2libGluZykKIHsKICAgICBHcmFwaGljc0xheWVyOjphZGRDaGlsZEJl
bG93KGNoaWxkTGF5ZXIsIHNpYmxpbmcpOwogICAgIHVwZGF0ZVN1YmxheWVyTGlzdCgpOwogfQog
Ci12b2lkIEdyYXBoaWNzTGF5ZXJTa2lhOjphZGRDaGlsZEFib3ZlKEdyYXBoaWNzTGF5ZXIqIGNo
aWxkTGF5ZXIsIEdyYXBoaWNzTGF5ZXIgKnNpYmxpbmcpCit2b2lkIEdyYXBoaWNzTGF5ZXJDaHJv
bWl1bTo6YWRkQ2hpbGRBYm92ZShHcmFwaGljc0xheWVyKiBjaGlsZExheWVyLCBHcmFwaGljc0xh
eWVyICpzaWJsaW5nKQogewogICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQWJvdmUoY2hpbGRM
YXllciwgc2libGluZyk7CiAgICAgdXBkYXRlU3VibGF5ZXJMaXN0KCk7CiB9CiAKLWJvb2wgR3Jh
cGhpY3NMYXllclNraWE6OnJlcGxhY2VDaGlsZChHcmFwaGljc0xheWVyKiBvbGRDaGlsZCwgR3Jh
cGhpY3NMYXllciogbmV3Q2hpbGQpCitib29sIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6cmVwbGFj
ZUNoaWxkKEdyYXBoaWNzTGF5ZXIqIG9sZENoaWxkLCBHcmFwaGljc0xheWVyKiBuZXdDaGlsZCkK
IHsKICAgICBpZiAoR3JhcGhpY3NMYXllcjo6cmVwbGFjZUNoaWxkKG9sZENoaWxkLCBuZXdDaGls
ZCkpIHsKICAgICAgICAgdXBkYXRlU3VibGF5ZXJMaXN0KCk7CkBAIC0xNjQsMTkgKzE2NCwxOSBA
QCBib29sIEdyYXBoaWNzTGF5ZXJTa2lhOjpyZXBsYWNlQ2hpbGQoR3JhcGhpY3NMYXllciogb2xk
Q2hpbGQsIEdyYXBoaWNzTGF5ZXIqIG5ldwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBH
cmFwaGljc0xheWVyU2tpYTo6cmVtb3ZlRnJvbVBhcmVudCgpCit2b2lkIEdyYXBoaWNzTGF5ZXJD
aHJvbWl1bTo6cmVtb3ZlRnJvbVBhcmVudCgpCiB7CiAgICAgR3JhcGhpY3NMYXllcjo6cmVtb3Zl
RnJvbVBhcmVudCgpOwogICAgIGxheWVyRm9yU3VwZXJsYXllcigpLT5yZW1vdmVGcm9tU3VwZXJs
YXllcigpOwogfQogCi12b2lkIEdyYXBoaWNzTGF5ZXJTa2lhOjpzZXRQb3NpdGlvbihjb25zdCBG
bG9hdFBvaW50JiBwb2ludCkKK3ZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRQb3NpdGlv
bihjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKIHsKICAgICBHcmFwaGljc0xheWVyOjpzZXRQb3Np
dGlvbihwb2ludCk7CiAgICAgdXBkYXRlTGF5ZXJQb3NpdGlvbigpOwogfQogCi12b2lkIEdyYXBo
aWNzTGF5ZXJTa2lhOjpzZXRBbmNob3JQb2ludChjb25zdCBGbG9hdFBvaW50M0QmIHBvaW50KQor
dm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldEFuY2hvclBvaW50KGNvbnN0IEZsb2F0UG9p
bnQzRCYgcG9pbnQpCiB7CiAgICAgaWYgKHBvaW50ID09IG1fYW5jaG9yUG9pbnQpCiAgICAgICAg
IHJldHVybjsKQEAgLTE4NSw3ICsxODUsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJTa2lhOjpzZXRB
bmNob3JQb2ludChjb25zdCBGbG9hdFBvaW50M0QmIHBvaW50KQogICAgIHVwZGF0ZUFuY2hvclBv
aW50KCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NMYXllclNraWE6OnNldFNpemUoY29uc3QgRmxvYXRT
aXplJiBzaXplKQordm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldFNpemUoY29uc3QgRmxv
YXRTaXplJiBzaXplKQogewogICAgIGlmIChzaXplID09IG1fc2l6ZSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMTk0LDcgKzE5NCw3IEBAIHZvaWQgR3JhcGhpY3NMYXllclNraWE6OnNldFNpemUoY29u
c3QgRmxvYXRTaXplJiBzaXplKQogICAgIHVwZGF0ZUxheWVyU2l6ZSgpOwogfQogCi12b2lkIEdy
YXBoaWNzTGF5ZXJTa2lhOjpzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IHRyYW5zZm9ybSkKK3ZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRUcmFuc2Zvcm0oY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKIHsKICAgICBpZiAodHJhbnNmb3Jt
ID09IG1fdHJhbnNmb3JtKQogICAgICAgICByZXR1cm47CkBAIC0yMDMsNyArMjAzLDcgQEAgdm9p
ZCBHcmFwaGljc0xheWVyU2tpYTo6c2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiB0cmFuc2Zvcm0pCiAgICAgdXBkYXRlVHJhbnNmb3JtKCk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NMYXllclNraWE6OnNldENoaWxkcmVuVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiB0cmFuc2Zvcm0pCit2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0Q2hpbGRyZW5U
cmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKIHsKICAgICBp
ZiAodHJhbnNmb3JtID09IG1fY2hpbGRyZW5UcmFuc2Zvcm0pCiAgICAgICAgIHJldHVybjsKQEAg
LTIxMiw3ICsyMTIsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJTa2lhOjpzZXRDaGlsZHJlblRyYW5z
Zm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmbwogICAgIHVwZGF0ZUNoaWxk
cmVuVHJhbnNmb3JtKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NMYXllclNraWE6OnNldFByZXNlcnZl
czNEKGJvb2wgcHJlc2VydmVzM0QpCit2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0UHJl
c2VydmVzM0QoYm9vbCBwcmVzZXJ2ZXMzRCkKIHsKICAgICBpZiAocHJlc2VydmVzM0QgPT0gbV9w
cmVzZXJ2ZXMzRCkKICAgICAgICAgcmV0dXJuOwpAQCAtMjIxLDcgKzIyMSw3IEBAIHZvaWQgR3Jh
cGhpY3NMYXllclNraWE6OnNldFByZXNlcnZlczNEKGJvb2wgcHJlc2VydmVzM0QpCiAgICAgdXBk
YXRlTGF5ZXJQcmVzZXJ2ZXMzRCgpOwogfQogCi12b2lkIEdyYXBoaWNzTGF5ZXJTa2lhOjpzZXRN
YXNrc1RvQm91bmRzKGJvb2wgbWFza3NUb0JvdW5kcykKK3ZvaWQgR3JhcGhpY3NMYXllckNocm9t
aXVtOjpzZXRNYXNrc1RvQm91bmRzKGJvb2wgbWFza3NUb0JvdW5kcykKIHsKICAgICBpZiAobWFz
a3NUb0JvdW5kcyA9PSBtX21hc2tzVG9Cb3VuZHMpCiAgICAgICAgIHJldHVybjsKQEAgLTIzMCw3
ICsyMzAsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJTa2lhOjpzZXRNYXNrc1RvQm91bmRzKGJvb2wg
bWFza3NUb0JvdW5kcykKICAgICB1cGRhdGVNYXNrc1RvQm91bmRzKCk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NMYXllclNraWE6OnNldERyYXdzQ29udGVudChib29sIGRyYXdzQ29udGVudCkKK3ZvaWQg
R3JhcGhpY3NMYXllckNocm9taXVtOjpzZXREcmF3c0NvbnRlbnQoYm9vbCBkcmF3c0NvbnRlbnQp
CiB7CiAgICAgaWYgKGRyYXdzQ29udGVudCA9PSBtX2RyYXdzQ29udGVudCkKICAgICAgICAgcmV0
dXJuOwpAQCAtMjM5LDcgKzIzOSw3IEBAIHZvaWQgR3JhcGhpY3NMYXllclNraWE6OnNldERyYXdz
Q29udGVudChib29sIGRyYXdzQ29udGVudCkKICAgICB1cGRhdGVMYXllckRyYXdzQ29udGVudCgp
OwogfQogCi12b2lkIEdyYXBoaWNzTGF5ZXJTa2lhOjpzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3Qg
Q29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldEJhY2tncm91bmRD
b2xvcihjb25zdCBDb2xvciYgY29sb3IpCiB7CiAgICAgaWYgKG1fYmFja2dyb3VuZENvbG9yU2V0
ICYmIG1fYmFja2dyb3VuZENvbG9yID09IGNvbG9yKQogICAgICAgICByZXR1cm47CkBAIC0yNTAs
NyArMjUwLDcgQEAgdm9pZCBHcmFwaGljc0xheWVyU2tpYTo6c2V0QmFja2dyb3VuZENvbG9yKGNv
bnN0IENvbG9yJiBjb2xvcikKICAgICB1cGRhdGVMYXllckJhY2tncm91bmRDb2xvcigpOwogfQog
Ci12b2lkIEdyYXBoaWNzTGF5ZXJTa2lhOjpjbGVhckJhY2tncm91bmRDb2xvcigpCit2b2lkIEdy
YXBoaWNzTGF5ZXJDaHJvbWl1bTo6Y2xlYXJCYWNrZ3JvdW5kQ29sb3IoKQogewogICAgIGlmICgh
bV9iYWNrZ3JvdW5kQ29sb3JTZXQpCiAgICAgICAgIHJldHVybjsKQEAgLTI1OSw3ICsyNTksNyBA
QCB2b2lkIEdyYXBoaWNzTGF5ZXJTa2lhOjpjbGVhckJhY2tncm91bmRDb2xvcigpCiAgICAgY2xl
YXJMYXllckJhY2tncm91bmRDb2xvcigqbV9jb250ZW50c0xheWVyKTsKIH0KIAotdm9pZCBHcmFw
aGljc0xheWVyU2tpYTo6c2V0Q29udGVudHNPcGFxdWUoYm9vbCBvcGFxdWUpCit2b2lkIEdyYXBo
aWNzTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHNPcGFxdWUoYm9vbCBvcGFxdWUpCiB7CiAgICAg
aWYgKG1fY29udGVudHNPcGFxdWUgPT0gb3BhcXVlKQogICAgICAgICByZXR1cm47CkBAIC0yNjgs
NyArMjY4LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyU2tpYTo6c2V0Q29udGVudHNPcGFxdWUoYm9v
bCBvcGFxdWUpCiAgICAgdXBkYXRlQ29udGVudHNPcGFxdWUoKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0xheWVyU2tpYTo6c2V0QmFja2ZhY2VWaXNpYmlsaXR5KGJvb2wgdmlzaWJsZSkKK3ZvaWQgR3Jh
cGhpY3NMYXllckNocm9taXVtOjpzZXRCYWNrZmFjZVZpc2liaWxpdHkoYm9vbCB2aXNpYmxlKQog
ewogICAgIGlmIChtX2JhY2tmYWNlVmlzaWJpbGl0eSA9PSB2aXNpYmxlKQogICAgICAgICByZXR1
cm47CkBAIC0yNzcsNyArMjc3LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyU2tpYTo6c2V0QmFja2Zh
Y2VWaXNpYmlsaXR5KGJvb2wgdmlzaWJsZSkKICAgICB1cGRhdGVCYWNrZmFjZVZpc2liaWxpdHko
KTsKIH0KIAotdm9pZCBHcmFwaGljc0xheWVyU2tpYTo6c2V0T3BhY2l0eShmbG9hdCBvcGFjaXR5
KQordm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldE9wYWNpdHkoZmxvYXQgb3BhY2l0eSkK
IHsKICAgICBmbG9hdCBjbGFtcGVkT3BhY2l0eSA9IG1heChtaW4ob3BhY2l0eSwgMS4wZiksIDAu
MGYpOwogCkBAIC0yODgsMTkgKzI4OCwxOSBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJTa2lhOjpzZXRP
cGFjaXR5KGZsb2F0IG9wYWNpdHkpCiAgICAgcHJpbWFyeUxheWVyKCktPnNldE9wYWNpdHkob3Bh
Y2l0eSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NMYXllclNraWE6OnNldE5lZWRzRGlzcGxheSgpCit2
b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5KCkKIHsKICAgICBpZiAo
ZHJhd3NDb250ZW50KCkpCiAgICAgICAgIG1fbGF5ZXItPnNldE5lZWRzRGlzcGxheSgpOwogfQog
Ci12b2lkIEdyYXBoaWNzTGF5ZXJTa2lhOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldE5lZWRzRGlzcGxh
eUluUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7CiAgICAgaWYgKGRyYXdzQ29udGVudCgp
KQogICAgICAgICBtX2xheWVyLT5zZXROZWVkc0Rpc3BsYXkocmVjdCk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NMYXllclNraWE6OnNldENvbnRlbnRzUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQordm9p
ZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENvbnRlbnRzUmVjdChjb25zdCBJbnRSZWN0JiBy
ZWN0KQogewogICAgIGlmIChyZWN0ID09IG1fY29udGVudHNSZWN0KQogICAgICAgICByZXR1cm47
CkBAIC0zMDksMTcgKzMwOSwxNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJTa2lhOjpzZXRDb250ZW50
c1JlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKICAgICB1cGRhdGVDb250ZW50c1JlY3QoKTsKIH0K
IAotdm9pZCBHcmFwaGljc0xheWVyU2tpYTo6c2V0Q29udGVudHNUb0ltYWdlKEltYWdlKiBpbWFn
ZSkKK3ZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2Uq
IGltYWdlKQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQKIH0KIAotdm9pZCBHcmFwaGljc0xh
eWVyU2tpYTo6c2V0Q29udGVudHNUb1ZpZGVvKFBsYXRmb3JtTGF5ZXIqIHZpZGVvTGF5ZXIpCit2
b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHNUb1ZpZGVvKFBsYXRmb3JtTGF5
ZXIqIHZpZGVvTGF5ZXIpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudAogfQogCi12b2lkIEdy
YXBoaWNzTGF5ZXJTa2lhOjpzZXRHZW9tZXRyeU9yaWVudGF0aW9uKENvbXBvc2l0aW5nQ29vcmRp
bmF0ZXNPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKK3ZvaWQgR3JhcGhpY3NMYXllckNocm9taXVt
OjpzZXRHZW9tZXRyeU9yaWVudGF0aW9uKENvbXBvc2l0aW5nQ29vcmRpbmF0ZXNPcmllbnRhdGlv
biBvcmllbnRhdGlvbikKIHsKICAgICBpZiAob3JpZW50YXRpb24gPT0gbV9nZW9tZXRyeU9yaWVu
dGF0aW9uKQogICAgICAgICByZXR1cm47CkBAIC0zMjgsMjIgKzMyOCwyMiBAQCB2b2lkIEdyYXBo
aWNzTGF5ZXJTa2lhOjpzZXRHZW9tZXRyeU9yaWVudGF0aW9uKENvbXBvc2l0aW5nQ29vcmRpbmF0
ZXNPcmllbnRhdGlvbgogICAgIHVwZGF0ZUdlb21ldHJ5T3JpZW50YXRpb24oKTsKIH0KIAotUGxh
dGZvcm1MYXllciogR3JhcGhpY3NMYXllclNraWE6Omhvc3RMYXllckZvclN1YmxheWVycygpIGNv
bnN0CitQbGF0Zm9ybUxheWVyKiBHcmFwaGljc0xheWVyQ2hyb21pdW06Omhvc3RMYXllckZvclN1
YmxheWVycygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fdHJhbnNmb3JtTGF5ZXIgPyBtX3RyYW5z
Zm9ybUxheWVyLmdldCgpIDogbV9sYXllci5nZXQoKTsKIH0KIAotUGxhdGZvcm1MYXllciogR3Jh
cGhpY3NMYXllclNraWE6OmxheWVyRm9yU3VwZXJsYXllcigpIGNvbnN0CitQbGF0Zm9ybUxheWVy
KiBHcmFwaGljc0xheWVyQ2hyb21pdW06OmxheWVyRm9yU3VwZXJsYXllcigpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIG1fdHJhbnNmb3JtTGF5ZXIgPyBtX3RyYW5zZm9ybUxheWVyLmdldCgpIDogbV9s
YXllci5nZXQoKTsKIH0KIAotUGxhdGZvcm1MYXllciogR3JhcGhpY3NMYXllclNraWE6OnBsYXRm
b3JtTGF5ZXIoKSBjb25zdAorUGxhdGZvcm1MYXllciogR3JhcGhpY3NMYXllckNocm9taXVtOjpw
bGF0Zm9ybUxheWVyKCkgY29uc3QKIHsKICAgICByZXR1cm4gcHJpbWFyeUxheWVyKCk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NMYXllclNraWE6OnNldERlYnVnQmFja2dyb3VuZENvbG9yKGNvbnN0IENv
bG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXREZWJ1Z0JhY2tncm91
bmRDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCiB7CiAgICAgaWYgKGNvbG9yLmlzVmFsaWQoKSkK
ICAgICAgICAgc2V0TGF5ZXJCYWNrZ3JvdW5kQ29sb3IoKm1fbGF5ZXIsIGNvbG9yKTsKQEAgLTM1
MSw3ICszNTEsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJTa2lhOjpzZXREZWJ1Z0JhY2tncm91bmRD
b2xvcihjb25zdCBDb2xvciYgY29sb3IpCiAgICAgICAgIGNsZWFyTGF5ZXJCYWNrZ3JvdW5kQ29s
b3IoKm1fbGF5ZXIpOwogfQogCi12b2lkIEdyYXBoaWNzTGF5ZXJTa2lhOjpzZXREZWJ1Z0JvcmRl
cihjb25zdCBDb2xvciYgY29sb3IsIGZsb2F0IGJvcmRlcldpZHRoKQordm9pZCBHcmFwaGljc0xh
eWVyQ2hyb21pdW06OnNldERlYnVnQm9yZGVyKGNvbnN0IENvbG9yJiBjb2xvciwgZmxvYXQgYm9y
ZGVyV2lkdGgpCiB7CiAgICAgaWYgKGNvbG9yLmlzVmFsaWQoKSkgewogICAgICAgICBzZXRMYXll
ckJvcmRlckNvbG9yKCptX2xheWVyLCBjb2xvcik7CkBAIC0zNjIsOSArMzYyLDkgQEAgdm9pZCBH
cmFwaGljc0xheWVyU2tpYTo6c2V0RGVidWdCb3JkZXIoY29uc3QgQ29sb3ImIGNvbG9yLCBmbG9h
dCBib3JkZXJXaWR0aCkKICAgICB9CiB9CiAKLXZvaWQgR3JhcGhpY3NMYXllclNraWE6OnVwZGF0
ZVN1YmxheWVyTGlzdCgpCit2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlU3VibGF5
ZXJMaXN0KCkKIHsKLSAgICBWZWN0b3I8UmVmUHRyPExheWVyU2tpYT4gPiBuZXdTdWJsYXllcnM7
CisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IG5ld1N1YmxheWVyczsKIAogICAg
IGlmIChtX3RyYW5zZm9ybUxheWVyKSB7CiAgICAgICAgIC8vIEFkZCB0aGUgcHJpbWFyeSBsYXll
ciBmaXJzdC4gRXZlbiBpZiB3ZSBoYXZlIG5lZ2F0aXZlIHotb3JkZXIgY2hpbGRyZW4sIHRoZSBw
cmltYXJ5IGxheWVyIGFsd2F5cyBjb21lcyBiZWhpbmQuCkBAIC0zNzksOSArMzc5LDkgQEAgdm9p
ZCBHcmFwaGljc0xheWVyU2tpYTo6dXBkYXRlU3VibGF5ZXJMaXN0KCkKICAgICBjb25zdCBWZWN0
b3I8R3JhcGhpY3NMYXllcio+JiBjaGlsZExheWVycyA9IGNoaWxkcmVuKCk7CiAgICAgc2l6ZV90
IG51bUNoaWxkcmVuID0gY2hpbGRMYXllcnMuc2l6ZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbnVtQ2hpbGRyZW47ICsraSkgewotICAgICAgICBHcmFwaGljc0xheWVyU2tpYSogY3Vy
Q2hpbGQgPSBzdGF0aWNfY2FzdDxHcmFwaGljc0xheWVyU2tpYSo+KGNoaWxkTGF5ZXJzW2ldKTsK
KyAgICAgICAgR3JhcGhpY3NMYXllckNocm9taXVtKiBjdXJDaGlsZCA9IHN0YXRpY19jYXN0PEdy
YXBoaWNzTGF5ZXJDaHJvbWl1bSo+KGNoaWxkTGF5ZXJzW2ldKTsKIAotICAgICAgICBMYXllclNr
aWEqIGNoaWxkTGF5ZXIgPSBjdXJDaGlsZC0+bGF5ZXJGb3JTdXBlcmxheWVyKCk7CisgICAgICAg
IExheWVyQ2hyb21pdW0qIGNoaWxkTGF5ZXIgPSBjdXJDaGlsZC0+bGF5ZXJGb3JTdXBlcmxheWVy
KCk7CiAgICAgICAgIG5ld1N1YmxheWVycy5hcHBlbmQoY2hpbGRMYXllcik7CiAgICAgfQogCkBA
IC00MDEsMjkgKzQwMSwyNiBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJTa2lhOjp1cGRhdGVTdWJsYXll
ckxpc3QoKQogICAgICAgICBtX2xheWVyLT5zZXRTdWJsYXllcnMobmV3U3VibGF5ZXJzKTsKIH0K
IAotdm9pZCBHcmFwaGljc0xheWVyU2tpYTo6dXBkYXRlTGF5ZXJQb3NpdGlvbigpCit2b2lkIEdy
YXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJQb3NpdGlvbigpCiB7CiAgICAgLy8gUG9z
aXRpb24gaXMgb2Zmc2V0IG9uIHRoZSBsYXllciBieSB0aGUgbGF5ZXIgYW5jaG9yIHBvaW50Lgot
ICAgIFNrUG9pbnQgbGF5ZXJQb3NpdGlvbjsKLSAgICBsYXllclBvc2l0aW9uLnNldChtX3Bvc2l0
aW9uLngoKSArIG1fYW5jaG9yUG9pbnQueCgpICogbV9zaXplLndpZHRoKCksCi0gICAgICAgICAg
ICAgICAgICAgICAgbV9wb3NpdGlvbi55KCkgKyBtX2FuY2hvclBvaW50LnkoKSAqIG1fc2l6ZS5o
ZWlnaHQoKSk7CisgICAgRmxvYXRQb2ludCBsYXllclBvc2l0aW9uKG1fcG9zaXRpb24ueCgpICsg
bV9hbmNob3JQb2ludC54KCkgKiBtX3NpemUud2lkdGgoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbV9wb3NpdGlvbi55KCkgKyBtX2FuY2hvclBvaW50LnkoKSAqIG1fc2l6ZS5oZWln
aHQoKSk7CiAKICAgICBwcmltYXJ5TGF5ZXIoKS0+c2V0UG9zaXRpb24obGF5ZXJQb3NpdGlvbik7
CiB9CiAKLXZvaWQgR3JhcGhpY3NMYXllclNraWE6OnVwZGF0ZUxheWVyU2l6ZSgpCit2b2lkIEdy
YXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJTaXplKCkKIHsKLSAgICBTa0lSZWN0IHJl
Y3Q7Ci0gICAgcmVjdC5zZXQoMCwgMCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7
CisgICAgSW50U2l6ZSBsYXllclNpemUobV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7
CiAgICAgaWYgKG1fdHJhbnNmb3JtTGF5ZXIpIHsKLSAgICAgICAgbV90cmFuc2Zvcm1MYXllci0+
c2V0Qm91bmRzKHJlY3QpOworICAgICAgICBtX3RyYW5zZm9ybUxheWVyLT5zZXRCb3VuZHMobGF5
ZXJTaXplKTsKICAgICAgICAgLy8gVGhlIGFuY2hvciBvZiB0aGUgY29udGVudHMgbGF5ZXIgaXMg
YWx3YXlzIGF0IDAuNSwgMC41LCBzbyB0aGUgcG9zaXRpb24gaXMgY2VudGVyLXJlbGF0aXZlLgot
ICAgICAgICBTa1BvaW50IGNlbnRlclBvaW50OwotICAgICAgICBjZW50ZXJQb2ludC5zZXQobV9z
aXplLndpZHRoKCkgLyAyLjBmLCBtX3NpemUuaGVpZ2h0KCkgLyAyLjBmKTsKKyAgICAgICAgRmxv
YXRQb2ludCBjZW50ZXJQb2ludChtX3NpemUud2lkdGgoKSAvIDIsIG1fc2l6ZS5oZWlnaHQoKSAv
IDIpOwogICAgICAgICBtX2xheWVyLT5zZXRQb3NpdGlvbihjZW50ZXJQb2ludCk7CiAgICAgfQog
Ci0gICAgbV9sYXllci0+c2V0Qm91bmRzKHJlY3QpOworICAgIG1fbGF5ZXItPnNldEJvdW5kcyhs
YXllclNpemUpOwogCiAgICAgLy8gTm90ZSB0aGF0IHdlIGRvbid0IHJlc2l6ZSBtX2NvbnRlbnRz
TGF5ZXIuIEl0J3MgdXAgdGhlIGNhbGxlciB0byBkbyB0aGF0LgogCkBAIC00MzIsNDcgKzQyOSw0
NSBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJTa2lhOjp1cGRhdGVMYXllclNpemUoKQogICAgIHVwZGF0
ZUxheWVyUG9zaXRpb24oKTsKIH0KIAotdm9pZCBHcmFwaGljc0xheWVyU2tpYTo6dXBkYXRlQW5j
aG9yUG9pbnQoKQordm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZUFuY2hvclBvaW50
KCkKIHsKLSAgICBTa1BvaW50IGFuY2hvclBvaW50OwotICAgIGFuY2hvclBvaW50LnNldChtX2Fu
Y2hvclBvaW50LngoKSwgbV9hbmNob3JQb2ludC55KCkpOwotICAgIHByaW1hcnlMYXllcigpLT5z
ZXRBbmNob3JQb2ludChhbmNob3JQb2ludCk7CisgICAgcHJpbWFyeUxheWVyKCktPnNldEFuY2hv
clBvaW50KEZsb2F0UG9pbnQobV9hbmNob3JQb2ludC54KCksIG1fYW5jaG9yUG9pbnQueSgpKSk7
CiAgICAgcHJpbWFyeUxheWVyKCktPnNldEFuY2hvclBvaW50WihtX2FuY2hvclBvaW50LnooKSk7
CiAgICAgdXBkYXRlTGF5ZXJQb3NpdGlvbigpOwogfQogCi12b2lkIEdyYXBoaWNzTGF5ZXJTa2lh
Ojp1cGRhdGVUcmFuc2Zvcm0oKQordm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZVRy
YW5zZm9ybSgpCiB7Ci0gICAgcHJpbWFyeUxheWVyKCktPnNldFRyYW5zZm9ybShtX3RyYW5zZm9y
bS50b0FmZmluZVRyYW5zZm9ybSgpKTsKKyAgICBwcmltYXJ5TGF5ZXIoKS0+c2V0VHJhbnNmb3Jt
KG1fdHJhbnNmb3JtKTsKIH0KIAotdm9pZCBHcmFwaGljc0xheWVyU2tpYTo6dXBkYXRlQ2hpbGRy
ZW5UcmFuc2Zvcm0oKQordm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZUNoaWxkcmVu
VHJhbnNmb3JtKCkKIHsKICAgICBwcmltYXJ5TGF5ZXIoKS0+c2V0U3VibGF5ZXJUcmFuc2Zvcm0o
bV9jaGlsZHJlblRyYW5zZm9ybSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NMYXllclNraWE6OnVwZGF0
ZU1hc2tzVG9Cb3VuZHMoKQordm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZU1hc2tz
VG9Cb3VuZHMoKQogewogICAgIG1fbGF5ZXItPnNldE1hc2tzVG9Cb3VuZHMobV9tYXNrc1RvQm91
bmRzKTsKICAgICB1cGRhdGVEZWJ1Z0luZGljYXRvcnMoKTsKIH0KIAotdm9pZCBHcmFwaGljc0xh
eWVyU2tpYTo6dXBkYXRlQ29udGVudHNPcGFxdWUoKQordm9pZCBHcmFwaGljc0xheWVyQ2hyb21p
dW06OnVwZGF0ZUNvbnRlbnRzT3BhcXVlKCkKIHsKICAgICBtX2xheWVyLT5zZXRPcGFxdWUobV9j
b250ZW50c09wYXF1ZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NMYXllclNraWE6OnVwZGF0ZUJhY2tm
YWNlVmlzaWJpbGl0eSgpCit2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQmFja2Zh
Y2VWaXNpYmlsaXR5KCkKIHsKICAgICBtX2xheWVyLT5zZXREb3VibGVTaWRlZChtX2JhY2tmYWNl
VmlzaWJpbGl0eSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NMYXllclNraWE6OnVwZGF0ZUxheWVyUHJl
c2VydmVzM0QoKQordm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZUxheWVyUHJlc2Vy
dmVzM0QoKQogewogICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAotdm9pZCBHcmFwaGljc0xh
eWVyU2tpYTo6dXBkYXRlTGF5ZXJEcmF3c0NvbnRlbnQoKQordm9pZCBHcmFwaGljc0xheWVyQ2hy
b21pdW06OnVwZGF0ZUxheWVyRHJhd3NDb250ZW50KCkKIHsKICAgICBpZiAobV9kcmF3c0NvbnRl
bnQpCiAgICAgICAgIG1fbGF5ZXItPnNldE5lZWRzRGlzcGxheSgpOwpAQCAtNDgwLDcgKzQ3NSw3
IEBAIHZvaWQgR3JhcGhpY3NMYXllclNraWE6OnVwZGF0ZUxheWVyRHJhd3NDb250ZW50KCkKICAg
ICB1cGRhdGVEZWJ1Z0luZGljYXRvcnMoKTsKIH0KIAotdm9pZCBHcmFwaGljc0xheWVyU2tpYTo6
dXBkYXRlTGF5ZXJCYWNrZ3JvdW5kQ29sb3IoKQordm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06
OnVwZGF0ZUxheWVyQmFja2dyb3VuZENvbG9yKCkKIHsKICAgICBpZiAoIW1fY29udGVudHNMYXll
cikKICAgICAgICAgcmV0dXJuOwpAQCAtNDkyLDMxICs0ODcsMjYgQEAgdm9pZCBHcmFwaGljc0xh
eWVyU2tpYTo6dXBkYXRlTGF5ZXJCYWNrZ3JvdW5kQ29sb3IoKQogICAgICAgICBjbGVhckxheWVy
QmFja2dyb3VuZENvbG9yKCptX2NvbnRlbnRzTGF5ZXIpOwogfQogCi12b2lkIEdyYXBoaWNzTGF5
ZXJTa2lhOjp1cGRhdGVDb250ZW50c0ltYWdlKCkKK3ZvaWQgR3JhcGhpY3NMYXllckNocm9taXVt
Ojp1cGRhdGVDb250ZW50c0ltYWdlKCkKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50CiB9CiAK
LXZvaWQgR3JhcGhpY3NMYXllclNraWE6OnVwZGF0ZUNvbnRlbnRzVmlkZW8oKQordm9pZCBHcmFw
aGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzVmlkZW8oKQogewogICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQKIH0KIAotdm9pZCBHcmFwaGljc0xheWVyU2tpYTo6dXBkYXRlQ29udGVudHNS
ZWN0KCkKK3ZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50c1JlY3QoKQog
ewogICAgIGlmICghbV9jb250ZW50c0xheWVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBTa1Bv
aW50IHBvaW50OwotICAgIHBvaW50LnNldChtX2NvbnRlbnRzUmVjdC54KCksIG1fY29udGVudHNS
ZWN0LnkoKSk7Ci0gICAgU2tJUmVjdCByZWN0OwotICAgIHJlY3Quc2V0KDAsIDAsIG1fY29udGVu
dHNSZWN0LndpZHRoKCksIG1fY29udGVudHNSZWN0LmhlaWdodCgpKTsKLQotICAgIG1fY29udGVu
dHNMYXllci0+c2V0UG9zaXRpb24ocG9pbnQpOwotICAgIG1fY29udGVudHNMYXllci0+c2V0Qm91
bmRzKHJlY3QpOworICAgIG1fY29udGVudHNMYXllci0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCht
X2NvbnRlbnRzUmVjdC54KCksIG1fY29udGVudHNSZWN0LnkoKSkpOworICAgIG1fY29udGVudHNM
YXllci0+c2V0Qm91bmRzKEludFNpemUobV9jb250ZW50c1JlY3Qud2lkdGgoKSwgbV9jb250ZW50
c1JlY3QuaGVpZ2h0KCkpKTsKIH0KIAotdm9pZCBHcmFwaGljc0xheWVyU2tpYTo6dXBkYXRlR2Vv
bWV0cnlPcmllbnRhdGlvbigpCit2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlR2Vv
bWV0cnlPcmllbnRhdGlvbigpCiB7CiAgICAgc3dpdGNoIChnZW9tZXRyeU9yaWVudGF0aW9uKCkp
IHsKICAgICBjYXNlIENvbXBvc2l0aW5nQ29vcmRpbmF0ZXNUb3BEb3duOgpAQCAtNTMxLDcgKzUy
MSw3IEBAIHZvaWQgR3JhcGhpY3NMYXllclNraWE6OnVwZGF0ZUdlb21ldHJ5T3JpZW50YXRpb24o
KQogICAgIC8vIHNvIGlzIGhhbmRsZWQgdmlhIHNldEdlb21ldHJ5T3JpZW50YXRpb24oKS4KIH0K
IAotdm9pZCBHcmFwaGljc0xheWVyU2tpYTo6c2V0dXBDb250ZW50c0xheWVyKExheWVyU2tpYSog
Y29udGVudHNMYXllcikKK3ZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXR1cENvbnRlbnRz
TGF5ZXIoTGF5ZXJDaHJvbWl1bSogY29udGVudHNMYXllcikKIHsKICAgICBpZiAoY29udGVudHNM
YXllciA9PSBtX2NvbnRlbnRzTGF5ZXIpCiAgICAgICAgIHJldHVybjsKQEAgLTU0NCw5ICs1MzQs
NyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJTa2lhOjpzZXR1cENvbnRlbnRzTGF5ZXIoTGF5ZXJTa2lh
KiBjb250ZW50c0xheWVyKQogICAgIGlmIChjb250ZW50c0xheWVyKSB7CiAgICAgICAgIG1fY29u
dGVudHNMYXllciA9IGNvbnRlbnRzTGF5ZXI7CiAKLSAgICAgICAgU2tQb2ludCBhbmNob3JQb2lu
dDsKLSAgICAgICAgYW5jaG9yUG9pbnQuc2V0KDAuMGYsIDAuMGYpOwotICAgICAgICBtX2NvbnRl
bnRzTGF5ZXItPnNldEFuY2hvclBvaW50KGFuY2hvclBvaW50KTsKKyAgICAgICAgbV9jb250ZW50
c0xheWVyLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAsIDApKTsKIAogICAgICAgICAvLyBJ
bnNlcnQgdGhlIGNvbnRlbnQgbGF5ZXIgZmlyc3QuIFZpZGVvIGVsZW1lbnRzIHJlcXVpcmUgdGhp
cywgYmVjYXVzZSB0aGV5IGhhdmUKICAgICAgICAgLy8gc2hhZG93IGNvbnRlbnQgdGhhdCBtdXN0
IGRpc3BsYXkgaW4gZnJvbnQgb2YgdGhlIHZpZGVvLgpAQCAtNTU2LDE0ICs1NDQsMTQgQEAgdm9p
ZCBHcmFwaGljc0xheWVyU2tpYTo6c2V0dXBDb250ZW50c0xheWVyKExheWVyU2tpYSogY29udGVu
dHNMYXllcikKIAogICAgICAgICBpZiAoc2hvd0RlYnVnQm9yZGVycygpKSB7CiAgICAgICAgICAg
ICBzZXRMYXllckJvcmRlckNvbG9yKCptX2NvbnRlbnRzTGF5ZXIsIENvbG9yKDAsIDAsIDEyOCwg
MTgwKSk7Ci0gICAgICAgICAgICBtX2NvbnRlbnRzTGF5ZXItPnNldEJvcmRlcldpZHRoKDEuMGYp
OworICAgICAgICAgICAgbV9jb250ZW50c0xheWVyLT5zZXRCb3JkZXJXaWR0aCgxKTsKICAgICAg
ICAgfQogICAgIH0KICAgICB1cGRhdGVEZWJ1Z0luZGljYXRvcnMoKTsKIH0KIAogLy8gVGhpcyBm
dW5jdGlvbiBzaW1wbHkgbWltaWNzIHRoZSBvcGVyYXRpb24gb2YgR3JhcGhpY3NMYXllckNBCi12
b2lkIEdyYXBoaWNzTGF5ZXJTa2lhOjp1cGRhdGVPcGFjaXR5T25MYXllcigpCit2b2lkIEdyYXBo
aWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlT3BhY2l0eU9uTGF5ZXIoKQogewogICAgIHByaW1hcnlM
YXllcigpLT5zZXRPcGFjaXR5KG1fb3BhY2l0eSk7CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NMYXllclNraWEuaCBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0xheWVyU2tpYS5oCmluZGV4IGJhNDEzNjIuLmZlOTQx
NjIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0xh
eWVyU2tpYS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0xh
eWVyU2tpYS5oCkBAIC0zOCwxMiArMzgsMTIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1j
bGFzcyBMYXllclNraWE7CitjbGFzcyBMYXllckNocm9taXVtOwogCi1jbGFzcyBHcmFwaGljc0xh
eWVyU2tpYSA6IHB1YmxpYyBHcmFwaGljc0xheWVyIHsKK2NsYXNzIEdyYXBoaWNzTGF5ZXJDaHJv
bWl1bSA6IHB1YmxpYyBHcmFwaGljc0xheWVyIHsKIHB1YmxpYzoKLSAgICBHcmFwaGljc0xheWVy
U2tpYShHcmFwaGljc0xheWVyQ2xpZW50Kik7Ci0gICAgdmlydHVhbCB+R3JhcGhpY3NMYXllclNr
aWEoKTsKKyAgICBHcmFwaGljc0xheWVyQ2hyb21pdW0oR3JhcGhpY3NMYXllckNsaWVudCopOwor
ICAgIHZpcnR1YWwgfkdyYXBoaWNzTGF5ZXJDaHJvbWl1bSgpOwogCiAgICAgdmlydHVhbCB2b2lk
IHNldE5hbWUoY29uc3QgU3RyaW5nJik7CiAKQEAgLTEwMyw5ICsxMDMsOSBAQCBwdWJsaWM6CiBw
cml2YXRlOgogICAgIHZvaWQgdXBkYXRlT3BhY2l0eU9uTGF5ZXIoKTsKIAotICAgIExheWVyU2tp
YSogcHJpbWFyeUxheWVyKCkgY29uc3QgIHsgcmV0dXJuIG1fdHJhbnNmb3JtTGF5ZXIuZ2V0KCkg
PyBtX3RyYW5zZm9ybUxheWVyLmdldCgpIDogbV9sYXllci5nZXQoKTsgfQotICAgIExheWVyU2tp
YSogaG9zdExheWVyRm9yU3VibGF5ZXJzKCkgY29uc3Q7Ci0gICAgTGF5ZXJTa2lhKiBsYXllckZv
clN1cGVybGF5ZXIoKSBjb25zdDsKKyAgICBMYXllckNocm9taXVtKiBwcmltYXJ5TGF5ZXIoKSBj
b25zdCAgeyByZXR1cm4gbV90cmFuc2Zvcm1MYXllci5nZXQoKSA/IG1fdHJhbnNmb3JtTGF5ZXIu
Z2V0KCkgOiBtX2xheWVyLmdldCgpOyB9CisgICAgTGF5ZXJDaHJvbWl1bSogaG9zdExheWVyRm9y
U3VibGF5ZXJzKCkgY29uc3Q7CisgICAgTGF5ZXJDaHJvbWl1bSogbGF5ZXJGb3JTdXBlcmxheWVy
KCkgY29uc3Q7CiAKICAgICB2b2lkIHVwZGF0ZVN1YmxheWVyTGlzdCgpOwogICAgIHZvaWQgdXBk
YXRlTGF5ZXJQb3NpdGlvbigpOwpAQCAtMTI1LDEyICsxMjUsMTIgQEAgcHJpdmF0ZToKICAgICB2
b2lkIHVwZGF0ZUNvbnRlbnRzUmVjdCgpOwogICAgIHZvaWQgdXBkYXRlR2VvbWV0cnlPcmllbnRh
dGlvbigpOwogCi0gICAgdm9pZCBzZXR1cENvbnRlbnRzTGF5ZXIoTGF5ZXJTa2lhKik7Ci0gICAg
TGF5ZXJTa2lhKiBjb250ZW50c0xheWVyKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50c0xheWVy
LmdldCgpOyB9CisgICAgdm9pZCBzZXR1cENvbnRlbnRzTGF5ZXIoTGF5ZXJDaHJvbWl1bSopOwor
ICAgIExheWVyQ2hyb21pdW0qIGNvbnRlbnRzTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2NvbnRl
bnRzTGF5ZXIuZ2V0KCk7IH0KIAotICAgIFJlZlB0cjxMYXllclNraWE+IG1fbGF5ZXI7Ci0gICAg
UmVmUHRyPExheWVyU2tpYT4gbV90cmFuc2Zvcm1MYXllcjsKLSAgICBSZWZQdHI8TGF5ZXJTa2lh
PiBtX2NvbnRlbnRzTGF5ZXI7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IG1fbGF5ZXI7Cisg
ICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IG1fdHJhbnNmb3JtTGF5ZXI7CisgICAgUmVmUHRyPExh
eWVyQ2hyb21pdW0+IG1fY29udGVudHNMYXllcjsKIAogICAgIGVudW0gQ29udGVudHNMYXllclB1
cnBvc2UgewogICAgICAgICBOb0NvbnRlbnRzTGF5ZXIgPSAwLApkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0xheWVyUmVuZGVyZXJTa2lhLmNwcCBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9MYXllclJlbmRlcmVyU2tpYS5jcHAKaW5kZXggNDVlYmZh
YS4uZTViZjRjOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0xh
eWVyUmVuZGVyZXJTa2lhLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEv
TGF5ZXJSZW5kZXJlclNraWEuY3BwCkBAIC00MCwyOCArNDAsMzUgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1QYXNzT3duUHRyPExheWVyUmVuZGVyZXJTa2lhPiBMYXllclJlbmRlcmVyU2tp
YTo6Y3JlYXRlKCkKK1Bhc3NPd25QdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBMYXllclJlbmRl
cmVyQ2hyb21pdW06OmNyZWF0ZSgpCiB7Ci0gICAgcmV0dXJuIG5ldyBMYXllclJlbmRlcmVyU2tp
YSgpOworICAgIHJldHVybiBuZXcgTGF5ZXJSZW5kZXJlckNocm9taXVtKCk7CiB9CiAKLUxheWVy
UmVuZGVyZXJTa2lhOjpMYXllclJlbmRlcmVyU2tpYSgpCitMYXllclJlbmRlcmVyQ2hyb21pdW06
OkxheWVyUmVuZGVyZXJDaHJvbWl1bSgpCiAgICAgOiBtX3Jvb3RMYXllcigwKQogICAgICwgbV9u
ZWVkc0Rpc3BsYXkoZmFsc2UpCiB7CiB9CiAKLUxheWVyUmVuZGVyZXJTa2lhOjp+TGF5ZXJSZW5k
ZXJlclNraWEoKQorTGF5ZXJSZW5kZXJlckNocm9taXVtOjp+TGF5ZXJSZW5kZXJlckNocm9taXVt
KCkKIHsKIH0KIAotdm9pZCBMYXllclJlbmRlcmVyU2tpYTo6ZHJhd0xheWVyc0luQ2FudmFzKHNr
aWE6OlBsYXRmb3JtQ2FudmFzKiBjYW52YXMsIFNrUmVjdCBjbGlwUmVjdCkKK3ZvaWQgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXllckNvbnRlbnRzKCkKK3sKKyAgICBpZiAobV9yb290
TGF5ZXIpCisgICAgICAgIHVwZGF0ZUxheWVyQ29udGVudHNSZWN1cnNpdmUobV9yb290TGF5ZXIu
Z2V0KCkpOworfQorCisjaWYgUExBVEZPUk0oU0tJQSkKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpkcmF3TGF5ZXJzSW5DYW52YXMoc2tpYTo6UGxhdGZvcm1DYW52YXMqIGNhbnZhcywgY29u
c3QgSW50UmVjdCYgY2xpcFJlY3QpCiB7CiAgICAgaWYgKCFtX3Jvb3RMYXllcikKICAgICAgICAg
cmV0dXJuOwogCiAgICAgY2FudmFzLT5zYXZlKCk7Ci0gICAgY2FudmFzLT5jbGlwUmVjdChjbGlw
UmVjdCk7CisgICAgY2FudmFzLT5jbGlwUmVjdChTa1JlY3QoY2xpcFJlY3QpKTsKIAogICAgIC8v
IEZpcnN0IGNvbXBvc2l0ZSB0aGUgcm9vdCBsYXllciBpbnRvIHRoZSBjYW52YXMuCiAgICAgY2Fu
dmFzLT5kcmF3Qml0bWFwKG1fcm9vdExheWVyLT5wbGF0Zm9ybUNhbnZhcygpLT5nZXREZXZpY2Uo
KS0+YWNjZXNzQml0bWFwKGZhbHNlKSwgMCwgMCwgMCk7CkBAIC03MSw3ICs3OCw3IEBAIHZvaWQg
TGF5ZXJSZW5kZXJlclNraWE6OmRyYXdMYXllcnNJbkNhbnZhcyhza2lhOjpQbGF0Zm9ybUNhbnZh
cyogY2FudmFzLCBTa1JlY3QKICAgICBjYW52YXMtPnRyYW5zbGF0ZSgtbV9zY3JvbGxGcmFtZS5m
TGVmdCwgLW1fc2Nyb2xsRnJhbWUuZlRvcCk7CiAKICAgICBmbG9hdCBvcGFjaXR5ID0gMS4wZjsK
LSAgICBjb25zdCBWZWN0b3I8UmVmUHRyPExheWVyU2tpYT4gPiYgc3VibGF5ZXJzID0gbV9yb290
TGF5ZXItPmdldFN1YmxheWVycygpOworICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJv
bWl1bT4gPiYgc3VibGF5ZXJzID0gbV9yb290TGF5ZXItPmdldFN1YmxheWVycygpOwogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgc3VibGF5ZXJzLnNpemUoKTsgaSsrKQogICAgICAgICBkcmF3
TGF5ZXJJbkNhbnZhc1JlY3Vyc2l2ZShjYW52YXMsIHN1YmxheWVyc1tpXS5nZXQoKSwgb3BhY2l0
eSk7CiAKQEAgLTgwLDI2ICs4NywyMCBAQCB2b2lkIExheWVyUmVuZGVyZXJTa2lhOjpkcmF3TGF5
ZXJzSW5DYW52YXMoc2tpYTo6UGxhdGZvcm1DYW52YXMqIGNhbnZhcywgU2tSZWN0CiAgICAgbV9u
ZWVkc0Rpc3BsYXkgPSBmYWxzZTsKIH0KIAotdm9pZCBMYXllclJlbmRlcmVyU2tpYTo6dXBkYXRl
TGF5ZXJDb250ZW50cygpCi17Ci0gICAgaWYgKG1fcm9vdExheWVyKQotICAgICAgICB1cGRhdGVM
YXllckNvbnRlbnRzUmVjdXJzaXZlKG1fcm9vdExheWVyLmdldCgpKTsKLX0KLQotdm9pZCBMYXll
clJlbmRlcmVyU2tpYTo6ZHJhd0xheWVySW5DYW52YXNSZWN1cnNpdmUoc2tpYTo6UGxhdGZvcm1D
YW52YXMqIGNhbnZhcywgTGF5ZXJTa2lhKiBsYXllciwgZmxvYXQgb3BhY2l0eSkKK3ZvaWQgTGF5
ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJJbkNhbnZhc1JlY3Vyc2l2ZShza2lhOjpQbGF0
Zm9ybUNhbnZhcyogY2FudmFzLCBMYXllckNocm9taXVtKiBsYXllciwgZmxvYXQgb3BhY2l0eSkK
IHsKICAgICAvLyBHdWFyYW50ZWVzIHRoYXQgdGhlIGNhbnZhcyBpcyByZXN0b3JlZCB0byBhIGtu
b3duIHN0YXRlIG9uIGRlc3RydWN0aW9uLgogICAgIFNrQXV0b0NhbnZhc1Jlc3RvcmUgYXV0b1Jl
c3RvcmVDYW52YXMoY2FudmFzLCB0cnVlKTsKIAotICAgIFNrUG9pbnQgcG9zaXRpb24gPSBsYXll
ci0+cG9zaXRpb24oKTsKLSAgICBTa1BvaW50IGFuY2hvclBvaW50ID0gbGF5ZXItPmFuY2hvclBv
aW50KCk7Ci0gICAgU2tNYXRyaXggdHJhbnNmb3JtID0gbGF5ZXItPnRyYW5zZm9ybSgpOwotICAg
IFNrSVJlY3QgYm91bmRzID0gbGF5ZXItPmJvdW5kcygpOworICAgIEZsb2F0UG9pbnQgcG9zaXRp
b24gPSBsYXllci0+cG9zaXRpb24oKTsKKyAgICBGbG9hdFBvaW50IGFuY2hvclBvaW50ID0gbGF5
ZXItPmFuY2hvclBvaW50KCk7CisgICAgU2tNYXRyaXggdHJhbnNmb3JtID0gbGF5ZXItPnRyYW5z
Zm9ybSgpLnRvQWZmaW5lVHJhbnNmb3JtKCk7CisgICAgSW50U2l6ZSBib3VuZHMgPSBsYXllci0+
Ym91bmRzKCk7CiAKLSAgICBjYW52YXMtPnRyYW5zbGF0ZShwb3NpdGlvbi5mWCwgcG9zaXRpb24u
ZlkpOworICAgIGNhbnZhcy0+dHJhbnNsYXRlKHBvc2l0aW9uLngoKSwgcG9zaXRpb24ueSgpKTsK
IAotICAgIFNrU2NhbGFyIHR4ID0gU2tTY2FsYXJNdWwoYW5jaG9yUG9pbnQuZlgsIGJvdW5kcy53
aWR0aCgpKTsKLSAgICBTa1NjYWxhciB0eSA9IFNrU2NhbGFyTXVsKGFuY2hvclBvaW50LmZZLCBi
b3VuZHMuaGVpZ2h0KCkpOworICAgIFNrU2NhbGFyIHR4ID0gU2tTY2FsYXJNdWwoYW5jaG9yUG9p
bnQueCgpLCBib3VuZHMud2lkdGgoKSk7CisgICAgU2tTY2FsYXIgdHkgPSBTa1NjYWxhck11bChh
bmNob3JQb2ludC55KCksIGJvdW5kcy5oZWlnaHQoKSk7CiAgICAgY2FudmFzLT50cmFuc2xhdGUo
dHgsIHR5KTsKICAgICBjYW52YXMtPmNvbmNhdCh0cmFuc2Zvcm0pOwogICAgIGNhbnZhcy0+dHJh
bnNsYXRlKC10eCwgLXR5KTsKQEAgLTExNywxNiArMTE4LDE3IEBAIHZvaWQgTGF5ZXJSZW5kZXJl
clNraWE6OmRyYXdMYXllckluQ2FudmFzUmVjdXJzaXZlKHNraWE6OlBsYXRmb3JtQ2FudmFzKiBj
YW52YXMsCiAKICAgICBjYW52YXMtPmRyYXdCaXRtYXAobGF5ZXItPnBsYXRmb3JtQ2FudmFzKCkt
PmdldERldmljZSgpLT5hY2Nlc3NCaXRtYXAoZmFsc2UpLCAwLCAwLCAmb3BhY2l0eVBhaW50KTsK
IAotICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJTa2lhPiA+JiBzdWJsYXllcnMgPSBsYXll
ci0+Z2V0U3VibGF5ZXJzKCk7CisgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVt
PiA+JiBzdWJsYXllcnMgPSBsYXllci0+Z2V0U3VibGF5ZXJzKCk7CiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBzdWJsYXllcnMuc2l6ZSgpOyBpKyspCiAgICAgICAgIGRyYXdMYXllckluQ2Fu
dmFzUmVjdXJzaXZlKGNhbnZhcywgc3VibGF5ZXJzW2ldLmdldCgpLCBvcGFjaXR5KTsKIH0KKyNl
bmRpZiAvLyBQTEFURk9STShTS0lBKQogCi12b2lkIExheWVyUmVuZGVyZXJTa2lhOjp1cGRhdGVM
YXllckNvbnRlbnRzUmVjdXJzaXZlKExheWVyU2tpYSogbGF5ZXIpCit2b2lkIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJDb250ZW50c1JlY3Vyc2l2ZShMYXllckNocm9taXVtKiBs
YXllcikKIHsKICAgICBsYXllci0+dXBkYXRlQ29udGVudHMoKTsKIAotICAgIGNvbnN0IFZlY3Rv
cjxSZWZQdHI8TGF5ZXJTa2lhPiA+JiBzdWJsYXllcnMgPSBsYXllci0+Z2V0U3VibGF5ZXJzKCk7
CisgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiBzdWJsYXllcnMgPSBs
YXllci0+Z2V0U3VibGF5ZXJzKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdWJsYXll
cnMuc2l6ZSgpOyBpKyspCiAgICAgICAgIHVwZGF0ZUxheWVyQ29udGVudHNSZWN1cnNpdmUoc3Vi
bGF5ZXJzW2ldLmdldCgpKTsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9MYXllclJlbmRlcmVyU2tpYS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL0xheWVyUmVuZGVyZXJTa2lhLmgKaW5kZXggN2UxODkyMS4uZmM1NjYxNiAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0xheWVyUmVuZGVyZXJTa2lhLmgKKysr
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0xheWVyUmVuZGVyZXJTa2lhLmgKQEAg
LTM0LDYgKzM0LDcgQEAKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIAorI2lu
Y2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJMYXllclNraWEuaCIKICNpbmNsdWRlIDx3dGYv
Tm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgpAQCAtNDUsMjkgKzQ2
LDMyIEBAIGNsYXNzIFBsYXRmb3JtQ2FudmFzOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNs
YXNzIExheWVyUmVuZGVyZXJTa2lhIDogcHVibGljIE5vbmNvcHlhYmxlIHsKK2NsYXNzIExheWVy
UmVuZGVyZXJDaHJvbWl1bSA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiBwdWJsaWM6Ci0gICAgc3Rh
dGljIFBhc3NPd25QdHI8TGF5ZXJSZW5kZXJlclNraWE+IGNyZWF0ZSgpOworICAgIHN0YXRpYyBQ
YXNzT3duUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gY3JlYXRlKCk7CiAKLSAgICBMYXllclJl
bmRlcmVyU2tpYSgpOwotICAgIH5MYXllclJlbmRlcmVyU2tpYSgpOwotCi0gICAgdm9pZCBkcmF3
TGF5ZXJzSW5DYW52YXMoc2tpYTo6UGxhdGZvcm1DYW52YXMqLCBTa1JlY3QgY2xpcFJlY3QpOwor
ICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bSgpOworICAgIH5MYXllclJlbmRlcmVyQ2hyb21pdW0o
KTsKIAorI2lmIFBMQVRGT1JNKFNLSUEpCisgICAgdm9pZCBkcmF3TGF5ZXJzSW5DYW52YXMoc2tp
YTo6UGxhdGZvcm1DYW52YXMqLCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCk7CisjZW5kaWYKICAg
ICB2b2lkIHVwZGF0ZUxheWVyQ29udGVudHMoKTsKIAotICAgIHZvaWQgc2V0Um9vdExheWVyKFBh
c3NSZWZQdHI8TGF5ZXJTa2lhPiBsYXllcikgeyBtX3Jvb3RMYXllciA9IGxheWVyOyB9Ci0gICAg
TGF5ZXJTa2lhKiByb290TGF5ZXIoKSB7IHJldHVybiBtX3Jvb3RMYXllci5nZXQoKTsgfQorICAg
IHZvaWQgc2V0Um9vdExheWVyKFBhc3NSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbGF5ZXIpIHsgbV9y
b290TGF5ZXIgPSBsYXllcjsgfQorICAgIExheWVyQ2hyb21pdW0qIHJvb3RMYXllcigpIHsgcmV0
dXJuIG1fcm9vdExheWVyLmdldCgpOyB9CiAKICAgICB2b2lkIHNldE5lZWRzRGlzcGxheSgpIHsg
bV9uZWVkc0Rpc3BsYXkgPSB0cnVlOyB9CiAKICAgICB2b2lkIHNldFNjcm9sbEZyYW1lKFNrSVJl
Y3QmIHNjcm9sbEZyYW1lKSB7IG1fc2Nyb2xsRnJhbWUgPSBzY3JvbGxGcmFtZTsgfQogCiBwcml2
YXRlOgotICAgIHZvaWQgZHJhd0xheWVySW5DYW52YXNSZWN1cnNpdmUoc2tpYTo6UGxhdGZvcm1D
YW52YXMqLCBMYXllclNraWEqLCBmbG9hdCBvcGFjaXR5KTsKLSAgICB2b2lkIHVwZGF0ZUxheWVy
Q29udGVudHNSZWN1cnNpdmUoTGF5ZXJTa2lhKik7CisjaWYgUExBVEZPUk0oU0tJQSkKKyAgICB2
b2lkIGRyYXdMYXllckluQ2FudmFzUmVjdXJzaXZlKHNraWE6OlBsYXRmb3JtQ2FudmFzKiwgTGF5
ZXJDaHJvbWl1bSosIGZsb2F0IG9wYWNpdHkpOworI2VuZGlmCisgICAgdm9pZCB1cGRhdGVMYXll
ckNvbnRlbnRzUmVjdXJzaXZlKExheWVyQ2hyb21pdW0qKTsKIAotICAgIFJlZlB0cjxMYXllclNr
aWE+IG1fcm9vdExheWVyOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBtX3Jvb3RMYXllcjsK
IAogICAgIGJvb2wgbV9uZWVkc0Rpc3BsYXk7CiAgICAgU2tJUmVjdCBtX3Njcm9sbEZyYW1lOwpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0xheWVyU2tpYS5jcHAg
Yi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvTGF5ZXJTa2lhLmNwcAppbmRleCBhY2Ez
YzliLi5lZTlmMDNjIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEv
TGF5ZXJTa2lhLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvTGF5ZXJT
a2lhLmNwcApAQCAtNDIsMTIgKzQyLDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcg
bmFtZXNwYWNlIHN0ZDsKIAotUGFzc1JlZlB0cjxMYXllclNraWE+IExheWVyU2tpYTo6Y3JlYXRl
KExheWVyVHlwZSB0eXBlLCBHcmFwaGljc0xheWVyU2tpYSogb3duZXIpCitQYXNzUmVmUHRyPExh
eWVyQ2hyb21pdW0+IExheWVyQ2hyb21pdW06OmNyZWF0ZShMYXllclR5cGUgdHlwZSwgR3JhcGhp
Y3NMYXllckNocm9taXVtKiBvd25lcikKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IExheWVy
U2tpYSh0eXBlLCBvd25lcikpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1
bSh0eXBlLCBvd25lcikpOwogfQogCi1MYXllclNraWE6OkxheWVyU2tpYShMYXllclR5cGUgdHlw
ZSwgR3JhcGhpY3NMYXllclNraWEqIG93bmVyKQorTGF5ZXJDaHJvbWl1bTo6TGF5ZXJDaHJvbWl1
bShMYXllclR5cGUgdHlwZSwgR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcikKICAgICA6IG1f
bmVlZHNEaXNwbGF5T25Cb3VuZHNDaGFuZ2UoZmFsc2UpCiAgICAgLCBtX293bmVyKG93bmVyKQog
ICAgICwgbV9sYXllclR5cGUodHlwZSkKQEAgLTcwLDI4ICs3MCwyMSBAQCBMYXllclNraWE6Okxh
eWVyU2tpYShMYXllclR5cGUgdHlwZSwgR3JhcGhpY3NMYXllclNraWEqIG93bmVyKQogICAgICwg
bV9ncmFwaGljc0NvbnRleHQoMCkKICAgICAsIG1fZ2VvbWV0cnlGbGlwcGVkKGZhbHNlKQogewot
ICAgIG1fYm91bmRzLnNldEVtcHR5KCk7Ci0gICAgbV9iYWNraW5nU3RvcmVSZWN0LnNldEVtcHR5
KCk7Ci0gICAgbV9mcmFtZS5zZXRFbXB0eSgpOwotICAgIG1fcG9zaXRpb24uc2V0KDAsIDApOwot
ICAgIG1fYW5jaG9yUG9pbnQuc2V0KDAsIDApOwotICAgIG1fdHJhbnNmb3JtLnJlc2V0KCk7Ci0g
ICAgbV9zdWJsYXllclRyYW5zZm9ybS5yZXNldCgpOwotCiAgICAgdXBkYXRlR3JhcGhpY3NDb250
ZXh0KG1fYmFja2luZ1N0b3JlUmVjdCk7CiB9CiAKLUxheWVyU2tpYTo6fkxheWVyU2tpYSgpCitM
YXllckNocm9taXVtOjp+TGF5ZXJDaHJvbWl1bSgpCiB7CiAgICAgLy8gT3VyIHN1cGVybGF5ZXIg
c2hvdWxkIGJlIGhvbGRpbmcgYSByZWZlcmVuY2UgdG8gdXMsIHNvIHRoZXJlIHNob3VsZCBiZSBu
byB3YXkgZm9yIHVzIHRvIGJlIGRlc3Ryb3llZCB3aGlsZSB3ZSBzdGlsbCBoYXZlIGEgc3VwZXJs
YXllci4KICAgICBBU1NFUlQoIXN1cGVybGF5ZXIoKSk7CiB9CiAKLXZvaWQgTGF5ZXJTa2lhOjp1
cGRhdGVHcmFwaGljc0NvbnRleHQoY29uc3QgU2tJUmVjdCYgcmVjdCkKK3ZvaWQgTGF5ZXJDaHJv
bWl1bTo6dXBkYXRlR3JhcGhpY3NDb250ZXh0KGNvbnN0IEludFNpemUmIHNpemUpCiB7CisjaWYg
UExBVEZPUk0oU0tJQSkKICAgICAvLyBDcmVhdGUgbmV3IGNhbnZhcyBhbmQgY29udGV4dC4gT3du
UHRyIHRha2VzIGNhcmUgb2YgZnJlZWluZyB1cAogICAgIC8vIHRoZSBvbGQgb25lcy4KLSAgICBt
X2NhbnZhcyA9IG5ldyBza2lhOjpQbGF0Zm9ybUNhbnZhcyhyZWN0LndpZHRoKCksIHJlY3QuaGVp
Z2h0KCksIGZhbHNlKTsKKyAgICBtX2NhbnZhcyA9IG5ldyBza2lhOjpQbGF0Zm9ybUNhbnZhcyhz
aXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksIGZhbHNlKTsKICAgICBtX3NraWFDb250ZXh0ID0g
bmV3IFBsYXRmb3JtQ29udGV4dFNraWEobV9jYW52YXMuZ2V0KCkpOwogCiAgICAgLy8gVGhpcyBp
cyBuZWVkZWQgdG8gZ2V0IHRleHQgdG8gc2hvdyB1cCBjb3JyZWN0bHkuIFdpdGhvdXQgaXQsCkBA
IC0xMDAsMTQgKzkzLDE2IEBAIHZvaWQgTGF5ZXJTa2lhOjp1cGRhdGVHcmFwaGljc0NvbnRleHQo
Y29uc3QgU2tJUmVjdCYgcmVjdCkKICAgICBtX3NraWFDb250ZXh0LT5zZXREcmF3aW5nVG9JbWFn
ZUJ1ZmZlcih0cnVlKTsKIAogICAgIG1fZ3JhcGhpY3NDb250ZXh0ID0gbmV3IEdyYXBoaWNzQ29u
dGV4dChyZWludGVycHJldF9jYXN0PFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0Kj4obV9za2lhQ29u
dGV4dC5nZXQoKSkpOwotCisjZWxzZQorI2Vycm9yICJOZWVkIHRvIGltcGxlbWVudCBmb3IgeW91
ciBwbGF0Zm9ybS4iCisjZW5kaWYKICAgICAvLyBUaGUgYmFja2luZyBzdG9yZSBhbGxvY2F0ZWQg
Zm9yIGEgbGF5ZXIgY2FuIGJlIHNtYWxsZXIgdGhhbiB0aGUgbGF5ZXIncyBib3VuZHMuCiAgICAg
Ly8gVGhpcyBpcyBtb3N0bHkgdHJ1ZSBmb3IgdGhlIHJvb3QgbGF5ZXIgd2hvc2UgYmFja2luZyBz
dG9yZSBpcyBzaXplZCBiYXNlZCBvbiB0aGUgdmlzaWJsZQogICAgIC8vIHBvcnRpb24gb2YgdGhl
IGxheWVyIHJhdGhlciB0aGFuIHRoZSBhY3R1YWwgcGFnZSBzaXplLgotICAgIG1fYmFja2luZ1N0
b3JlUmVjdCA9IHJlY3Q7CisgICAgbV9iYWNraW5nU3RvcmVSZWN0ID0gc2l6ZTsKIH0KIAotdm9p
ZCBMYXllclNraWE6OnVwZGF0ZUNvbnRlbnRzKCkKK3ZvaWQgTGF5ZXJDaHJvbWl1bTo6dXBkYXRl
Q29udGVudHMoKQogewogICAgIFJlbmRlckxheWVyQmFja2luZyogYmFja2luZyA9IHN0YXRpY19j
YXN0PFJlbmRlckxheWVyQmFja2luZyo+KG1fb3duZXItPmNsaWVudCgpKTsKIApAQCAtMTE1LDcg
KzExMCw3IEBAIHZvaWQgTGF5ZXJTa2lhOjp1cGRhdGVDb250ZW50cygpCiAgICAgICAgIG1fb3du
ZXItPnBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKCptX2dyYXBoaWNzQ29udGV4dCwgSW50UmVj
dCgwLCAwLCBtX2JvdW5kcy53aWR0aCgpLCBtX2JvdW5kcy5oZWlnaHQoKSkpOwogfQogCi12b2lk
IExheWVyU2tpYTo6ZHJhd0RlYnVnQm9yZGVyKCkKK3ZvaWQgTGF5ZXJDaHJvbWl1bTo6ZHJhd0Rl
YnVnQm9yZGVyKCkKIHsKICAgICBtX2dyYXBoaWNzQ29udGV4dC0+c2V0U3Ryb2tlQ29sb3IobV9i
b3JkZXJDb2xvciwgRGV2aWNlQ29sb3JTcGFjZSk7CiAgICAgbV9ncmFwaGljc0NvbnRleHQtPnNl
dFN0cm9rZVRoaWNrbmVzcyhtX2JvcmRlcldpZHRoKTsKQEAgLTEyNSw3ICsxMjAsNyBAQCB2b2lk
IExheWVyU2tpYTo6ZHJhd0RlYnVnQm9yZGVyKCkKICAgICBtX2dyYXBoaWNzQ29udGV4dC0+ZHJh
d0xpbmUoSW50UG9pbnQoMCwgbV9ib3VuZHMuaGVpZ2h0KCkpLCBJbnRQb2ludChtX2JvdW5kcy53
aWR0aCgpLCBtX2JvdW5kcy5oZWlnaHQoKSkpOwogfQogCi12b2lkIExheWVyU2tpYTo6c2V0TmVl
ZHNDb21taXQoKQordm9pZCBMYXllckNocm9taXVtOjpzZXROZWVkc0NvbW1pdCgpCiB7CiAgICAg
Ly8gQ2FsbCBub3RpZnlTeW5jUmVxdWlyZWQoKSwgd2hpY2ggaW4gdGhpcyBpbXBsZW1lbnRhdGlv
biBwbHVtYnMgdGhyb3VnaCB0bwogICAgIC8vIGNhbGwgc2V0Um9vdExheWVyTmVlZHNEaXNwbGF5
KCkgb24gdGhlIFdlYlZpZXcsIHdoaWNoIHdpbGwgY2F1c2UgTGF5ZXJSZW5kZXJlclNraWEKQEAg
LTEzNCwxMiArMTI5LDEyIEBAIHZvaWQgTGF5ZXJTa2lhOjpzZXROZWVkc0NvbW1pdCgpCiAgICAg
ICAgIG1fb3duZXItPm5vdGlmeVN5bmNSZXF1aXJlZCgpOwogfQogCi12b2lkIExheWVyU2tpYTo6
YWRkU3VibGF5ZXIoUGFzc1JlZlB0cjxMYXllclNraWE+IHN1YmxheWVyKQordm9pZCBMYXllckNo
cm9taXVtOjphZGRTdWJsYXllcihQYXNzUmVmUHRyPExheWVyQ2hyb21pdW0+IHN1YmxheWVyKQog
ewogICAgIGluc2VydFN1YmxheWVyKHN1YmxheWVyLCBudW1TdWJsYXllcnMoKSk7CiB9CiAKLXZv
aWQgTGF5ZXJTa2lhOjppbnNlcnRTdWJsYXllcihQYXNzUmVmUHRyPExheWVyU2tpYT4gc3VibGF5
ZXIsIHNpemVfdCBpbmRleCkKK3ZvaWQgTGF5ZXJDaHJvbWl1bTo6aW5zZXJ0U3VibGF5ZXIoUGFz
c1JlZlB0cjxMYXllckNocm9taXVtPiBzdWJsYXllciwgc2l6ZV90IGluZGV4KQogewogICAgIGlu
ZGV4ID0gbWluKGluZGV4LCBtX3N1YmxheWVycy5zaXplKCkpOwogICAgIG1fc3VibGF5ZXJzLmlu
c2VydChpbmRleCwgc3VibGF5ZXIpOwpAQCAtMTQ3LDE2ICsxNDIsMTYgQEAgdm9pZCBMYXllclNr
aWE6Omluc2VydFN1YmxheWVyKFBhc3NSZWZQdHI8TGF5ZXJTa2lhPiBzdWJsYXllciwgc2l6ZV90
IGluZGV4KQogICAgIHNldE5lZWRzQ29tbWl0KCk7CiB9CiAKLXZvaWQgTGF5ZXJTa2lhOjpyZW1v
dmVGcm9tU3VwZXJsYXllcigpCit2b2lkIExheWVyQ2hyb21pdW06OnJlbW92ZUZyb21TdXBlcmxh
eWVyKCkKIHsKLSAgICBMYXllclNraWEqIHN1cGVybGF5ZXIgPSB0aGlzLT5zdXBlcmxheWVyKCk7
CisgICAgTGF5ZXJDaHJvbWl1bSogc3VwZXJsYXllciA9IHRoaXMtPnN1cGVybGF5ZXIoKTsKICAg
ICBpZiAoIXN1cGVybGF5ZXIpCiAgICAgICAgIHJldHVybjsKIAogICAgIHN1cGVybGF5ZXItPnJl
bW92ZVN1YmxheWVyKHRoaXMpOwogfQogCi12b2lkIExheWVyU2tpYTo6cmVtb3ZlU3VibGF5ZXIo
TGF5ZXJTa2lhKiBzdWJsYXllcikKK3ZvaWQgTGF5ZXJDaHJvbWl1bTo6cmVtb3ZlU3VibGF5ZXIo
TGF5ZXJDaHJvbWl1bSogc3VibGF5ZXIpCiB7CiAgICAgaW50IGZvdW5kSW5kZXggPSBpbmRleE9m
U3VibGF5ZXIoc3VibGF5ZXIpOwogICAgIGlmIChmb3VuZEluZGV4ID09IC0xKQpAQCAtMTY3LDcg
KzE2Miw3IEBAIHZvaWQgTGF5ZXJTa2lhOjpyZW1vdmVTdWJsYXllcihMYXllclNraWEqIHN1Ymxh
eWVyKQogICAgIHNldE5lZWRzQ29tbWl0KCk7CiB9CiAKLWludCBMYXllclNraWE6OmluZGV4T2ZT
dWJsYXllcihjb25zdCBMYXllclNraWEqIHJlZmVyZW5jZSkKK2ludCBMYXllckNocm9taXVtOjpp
bmRleE9mU3VibGF5ZXIoY29uc3QgTGF5ZXJDaHJvbWl1bSogcmVmZXJlbmNlKQogewogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9zdWJsYXllcnMuc2l6ZSgpOyBpKyspIHsKICAgICAgICAg
aWYgKG1fc3VibGF5ZXJzW2ldID09IHJlZmVyZW5jZSkKQEAgLTE3Niw3ICsxNzEsNyBAQCBpbnQg
TGF5ZXJTa2lhOjppbmRleE9mU3VibGF5ZXIoY29uc3QgTGF5ZXJTa2lhKiByZWZlcmVuY2UpCiAg
ICAgcmV0dXJuIC0xOwogfQogCi12b2lkIExheWVyU2tpYTo6c2V0QmFja2luZ1N0b3JlUmVjdChj
b25zdCBTa0lSZWN0JiByZWN0KQordm9pZCBMYXllckNocm9taXVtOjpzZXRCYWNraW5nU3RvcmVS
ZWN0KGNvbnN0IEludFNpemUmIHJlY3QpCiB7CiAgICAgaWYgKG1fYmFja2luZ1N0b3JlUmVjdCA9
PSByZWN0KQogICAgICAgICByZXR1cm47CkBAIC0xODQsNyArMTc5LDcgQEAgdm9pZCBMYXllclNr
aWE6OnNldEJhY2tpbmdTdG9yZVJlY3QoY29uc3QgU2tJUmVjdCYgcmVjdCkKICAgICB1cGRhdGVH
cmFwaGljc0NvbnRleHQocmVjdCk7CiB9CiAKLXZvaWQgTGF5ZXJTa2lhOjpzZXRCb3VuZHMoY29u
c3QgU2tJUmVjdCYgcmVjdCkKK3ZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0Qm91bmRzKGNvbnN0IElu
dFNpemUmIHJlY3QpCiB7CiAgICAgaWYgKHJlY3QgPT0gbV9ib3VuZHMpCiAgICAgICAgIHJldHVy
bjsKQEAgLTIwMSw3ICsxOTYsNyBAQCB2b2lkIExheWVyU2tpYTo6c2V0Qm91bmRzKGNvbnN0IFNr
SVJlY3QmIHJlY3QpCiAgICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIAotdm9pZCBMYXllclNraWE6
OnNldEZyYW1lKGNvbnN0IFNrUmVjdCYgcmVjdCkKK3ZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0RnJh
bWUoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewogICAgIGlmIChyZWN0ID09IG1fZnJhbWUpCiAg
ICAgICByZXR1cm47CkBAIC0yMTAsMzUgKzIwNSwzNSBAQCB2b2lkIExheWVyU2tpYTo6c2V0RnJh
bWUoY29uc3QgU2tSZWN0JiByZWN0KQogICAgIHNldE5lZWRzQ29tbWl0KCk7CiB9CiAKLWNvbnN0
IExheWVyU2tpYSogTGF5ZXJTa2lhOjpyb290TGF5ZXIoKSBjb25zdAorY29uc3QgTGF5ZXJDaHJv
bWl1bSogTGF5ZXJDaHJvbWl1bTo6cm9vdExheWVyKCkgY29uc3QKIHsKLSAgICBjb25zdCBMYXll
clNraWEqIGxheWVyID0gdGhpczsKLSAgICBmb3IgKExheWVyU2tpYSogc3VwZXJsYXllciA9IGxh
eWVyLT5zdXBlcmxheWVyKCk7IHN1cGVybGF5ZXI7IGxheWVyID0gc3VwZXJsYXllciwgc3VwZXJs
YXllciA9IHN1cGVybGF5ZXItPnN1cGVybGF5ZXIoKSkgeyB9CisgICAgY29uc3QgTGF5ZXJDaHJv
bWl1bSogbGF5ZXIgPSB0aGlzOworICAgIGZvciAoTGF5ZXJDaHJvbWl1bSogc3VwZXJsYXllciA9
IGxheWVyLT5zdXBlcmxheWVyKCk7IHN1cGVybGF5ZXI7IGxheWVyID0gc3VwZXJsYXllciwgc3Vw
ZXJsYXllciA9IHN1cGVybGF5ZXItPnN1cGVybGF5ZXIoKSkgeyB9CiAgICAgcmV0dXJuIGxheWVy
OwogfQogCi12b2lkIExheWVyU2tpYTo6cmVtb3ZlQWxsU3VibGF5ZXJzKCkKK3ZvaWQgTGF5ZXJD
aHJvbWl1bTo6cmVtb3ZlQWxsU3VibGF5ZXJzKCkKIHsKICAgICBtX3N1YmxheWVycy5jbGVhcigp
OwogICAgIHNldE5lZWRzQ29tbWl0KCk7CiB9CiAKLXZvaWQgTGF5ZXJTa2lhOjpzZXRTdWJsYXll
cnMoY29uc3QgVmVjdG9yPFJlZlB0cjxMYXllclNraWE+ID4mIHN1YmxheWVycykKK3ZvaWQgTGF5
ZXJDaHJvbWl1bTo6c2V0U3VibGF5ZXJzKGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1
bT4gPiYgc3VibGF5ZXJzKQogewogICAgIG1fc3VibGF5ZXJzID0gc3VibGF5ZXJzOwogfQogCi12
b2lkIExheWVyU2tpYTo6c2V0U3VwZXJsYXllcihMYXllclNraWEqIHN1cGVybGF5ZXIpCit2b2lk
IExheWVyQ2hyb21pdW06OnNldFN1cGVybGF5ZXIoTGF5ZXJDaHJvbWl1bSogc3VwZXJsYXllcikK
IHsKICAgICBtX3N1cGVybGF5ZXIgPSBzdXBlcmxheWVyOwogfQogCi1MYXllclNraWEqIExheWVy
U2tpYTo6c3VwZXJsYXllcigpIGNvbnN0CitMYXllckNocm9taXVtKiBMYXllckNocm9taXVtOjpz
dXBlcmxheWVyKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9zdXBlcmxheWVyOwogfQogCi12b2lk
IExheWVyU2tpYTo6c2V0TmVlZHNEaXNwbGF5KGNvbnN0IFNrUmVjdCYgZGlydHlSZWN0KQordm9p
ZCBMYXllckNocm9taXVtOjpzZXROZWVkc0Rpc3BsYXkoY29uc3QgRmxvYXRSZWN0JiBkaXJ0eVJl
Y3QpCiB7CiAgICAgLy8gUmVkcmF3IHRoZSBjb250ZW50cyBvZiB0aGUgbGF5ZXIuCiAgICAgdXBk
YXRlQ29udGVudHMoKTsKQEAgLTI0Niw3ICsyNDEsNyBAQCB2b2lkIExheWVyU2tpYTo6c2V0TmVl
ZHNEaXNwbGF5KGNvbnN0IFNrUmVjdCYgZGlydHlSZWN0KQogICAgIHNldE5lZWRzQ29tbWl0KCk7
CiB9CiAKLXZvaWQgTGF5ZXJTa2lhOjpzZXROZWVkc0Rpc3BsYXkoKQordm9pZCBMYXllckNocm9t
aXVtOjpzZXROZWVkc0Rpc3BsYXkoKQogewogICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9MYXllclNraWEuaCBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9MYXllclNraWEuaAppbmRleCA0MDEyYjNlLi42
YTMyYjQwIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvTGF5ZXJT
a2lhLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0xheWVyU2tpYS5oCkBA
IC0zNCwxMiArMzQsMTAgQEAKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIAot
CisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgog
I2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJTa2lhLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcu
aCIKLSNpbmNsdWRlICJTa0NvbG9yLmgiCi0jaW5jbHVkZSAiU2tQb2ludC5oIgogI2luY2x1ZGUg
IlN0cmluZ0hhc2guaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogI2luY2x1
ZGUgPHd0Zi9Pd25QdHIuaD4KQEAgLTU0LDI1ICs1MiwyNSBAQCBjbGFzcyBQbGF0Zm9ybUNhbnZh
czsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBMYXllclNraWEgOiBwdWJsaWMgUmVm
Q291bnRlZDxMYXllclNraWE+IHsKK2NsYXNzIExheWVyQ2hyb21pdW0gOiBwdWJsaWMgUmVmQ291
bnRlZDxMYXllckNocm9taXVtPiB7CiBwdWJsaWM6CiAgICAgZW51bSBMYXllclR5cGUgeyBMYXll
ciwgVHJhbnNmb3JtTGF5ZXIgfTsKICAgICBlbnVtIEZpbHRlclR5cGUgeyBMaW5lYXIsIE5lYXJl
c3QsIFRyaWxpbmVhciwgTGFuY3pvcyB9OwogICAgIGVudW0gQ29udGVudHNHcmF2aXR5VHlwZSB7
IENlbnRlciwgVG9wLCBCb3R0b20sIExlZnQsIFJpZ2h0LCBUb3BMZWZ0LCBUb3BSaWdodCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCb3R0b21MZWZ0LCBCb3R0b21SaWdodCwgUmVz
aXplLCBSZXNpemVBc3BlY3QsIFJlc2l6ZUFzcGVjdEZpbGwgfTsKIAotICAgIHN0YXRpYyBQYXNz
UmVmUHRyPExheWVyU2tpYT4gY3JlYXRlKExheWVyVHlwZSwgR3JhcGhpY3NMYXllclNraWEqIG93
bmVyID0gMCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY3JlYXRlKExh
eWVyVHlwZSwgR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lciA9IDApOwogCi0gICAgfkxheWVy
U2tpYSgpOworICAgIH5MYXllckNocm9taXVtKCk7CiAKICAgICB2b2lkIGRpc3BsYXkoUGxhdGZv
cm1HcmFwaGljc0NvbnRleHQqKTsKIAotICAgIHZvaWQgYWRkU3VibGF5ZXIoUGFzc1JlZlB0cjxM
YXllclNraWE+KTsKLSAgICB2b2lkIGluc2VydFN1YmxheWVyKFBhc3NSZWZQdHI8TGF5ZXJTa2lh
Piwgc2l6ZV90IGluZGV4KTsKKyAgICB2b2lkIGFkZFN1YmxheWVyKFBhc3NSZWZQdHI8TGF5ZXJD
aHJvbWl1bT4pOworICAgIHZvaWQgaW5zZXJ0U3VibGF5ZXIoUGFzc1JlZlB0cjxMYXllckNocm9t
aXVtPiwgc2l6ZV90IGluZGV4KTsKICAgICB2b2lkIHJlbW92ZUZyb21TdXBlcmxheWVyKCk7CiAK
LSAgICB2b2lkIHNldEFuY2hvclBvaW50KGNvbnN0IFNrUG9pbnQmIGFuY2hvclBvaW50KSB7IG1f
YW5jaG9yUG9pbnQgPSBhbmNob3JQb2ludDsgc2V0TmVlZHNDb21taXQoKTsgfQotICAgIFNrUG9p
bnQgYW5jaG9yUG9pbnQoKSBjb25zdCB7IHJldHVybiBtX2FuY2hvclBvaW50OyB9CisgICAgdm9p
ZCBzZXRBbmNob3JQb2ludChjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQb2ludCkgeyBtX2FuY2hv
clBvaW50ID0gYW5jaG9yUG9pbnQ7IHNldE5lZWRzQ29tbWl0KCk7IH0KKyAgICBGbG9hdFBvaW50
IGFuY2hvclBvaW50KCkgY29uc3QgeyByZXR1cm4gbV9hbmNob3JQb2ludDsgfQogCiAgICAgdm9p
ZCBzZXRBbmNob3JQb2ludFooZmxvYXQgYW5jaG9yUG9pbnRaKSB7IG1fYW5jaG9yUG9pbnRaID0g
YW5jaG9yUG9pbnRaOyBzZXROZWVkc0NvbW1pdCgpOyB9CiAgICAgZmxvYXQgYW5jaG9yUG9pbnRa
KCkgY29uc3QgeyByZXR1cm4gbV9hbmNob3JQb2ludFo7IH0KQEAgLTg0LDEwICs4MiwxMCBAQCBw
dWJsaWM6CiAgICAgQ29sb3IgYm9yZGVyQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX2JvcmRlckNv
bG9yOyB9CiAKICAgICB2b2lkIHNldEJvcmRlcldpZHRoKGZsb2F0IHdpZHRoKSB7IG1fYm9yZGVy
V2lkdGggPSB3aWR0aDsgc2V0TmVlZHNDb21taXQoKTsgfQotICAgIFNrU2NhbGFyIGJvcmRlcldp
ZHRoKCkgY29uc3QgeyByZXR1cm4gbV9ib3JkZXJXaWR0aDsgfQorICAgIGZsb2F0IGJvcmRlcldp
ZHRoKCkgY29uc3QgeyByZXR1cm4gbV9ib3JkZXJXaWR0aDsgfQogCi0gICAgdm9pZCBzZXRCb3Vu
ZHMoY29uc3QgU2tJUmVjdCYpOwotICAgIFNrSVJlY3QgYm91bmRzKCkgY29uc3QgeyByZXR1cm4g
bV9ib3VuZHM7IH0KKyAgICB2b2lkIHNldEJvdW5kcyhjb25zdCBJbnRTaXplJik7CisgICAgSW50
U2l6ZSBib3VuZHMoKSBjb25zdCB7IHJldHVybiBtX2JvdW5kczsgfQogCiAgICAgdm9pZCBzZXRD
bGVhcnNDb250ZXh0KGJvb2wgY2xlYXJzKSB7IG1fY2xlYXJzQ29udGV4dCA9IGNsZWFyczsgc2V0
TmVlZHNDb21taXQoKTsgfQogICAgIGJvb2wgY2xlYXJzQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJu
IG1fY2xlYXJzQ29udGV4dDsgfQpAQCAtMTAxLDggKzk5LDggQEAgcHVibGljOgogICAgIHZvaWQg
c2V0RWRnZUFudGlhbGlhc2luZ01hc2sodWludDMyX3QgbWFzaykgeyBtX2VkZ2VBbnRpYWxpYXNp
bmdNYXNrID0gbWFzazsgc2V0TmVlZHNDb21taXQoKTsgfQogICAgIHVpbnQzMl90IGVkZ2VBbnRp
YWxpYXNpbmdNYXNrKCkgY29uc3QgeyByZXR1cm4gbV9lZGdlQW50aWFsaWFzaW5nTWFzazsgfQog
Ci0gICAgdm9pZCBzZXRGcmFtZShjb25zdCBTa1JlY3QmKTsKLSAgICBTa1JlY3QgZnJhbWUoKSBj
b25zdCB7IHJldHVybiBtX2ZyYW1lOyB9CisgICAgdm9pZCBzZXRGcmFtZShjb25zdCBGbG9hdFJl
Y3QmKTsKKyAgICBGbG9hdFJlY3QgZnJhbWUoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lOyB9CiAK
ICAgICB2b2lkIHNldEhpZGRlbihib29sIGhpZGRlbikgeyBtX2hpZGRlbiA9IGhpZGRlbjsgc2V0
TmVlZHNDb21taXQoKTsgfQogICAgIGJvb2wgaXNIaWRkZW4oKSBjb25zdCB7IHJldHVybiBtX2hp
ZGRlbjsgfQpAQCAtMTEzLDcgKzExMSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldE5hbWUoY29u
c3QgU3RyaW5nJiBuYW1lKSB7IG1fbmFtZSA9IG5hbWU7IH0KICAgICBTdHJpbmcgbmFtZSgpIGNv
bnN0IHsgcmV0dXJuIG1fbmFtZTsgfQogCi0gICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoY29uc3Qg
U2tSZWN0JiBkaXJ0eVJlY3QpOworICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KGNvbnN0IEZsb2F0
UmVjdCYgZGlydHlSZWN0KTsKICAgICB2b2lkIHNldE5lZWRzRGlzcGxheSgpOwogCiAgICAgdm9p
ZCBzZXROZWVkc0Rpc3BsYXlPbkJvdW5kc0NoYW5nZShib29sIG5lZWRzRGlzcGxheSkgeyBtX25l
ZWRzRGlzcGxheU9uQm91bmRzQ2hhbmdlID0gbmVlZHNEaXNwbGF5OyB9CkBAIC0xMjQsMzAgKzEy
MiwzMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRPcGFxdWUoYm9vbCBvcGFxdWUpIHsgbV9vcGFx
dWUgPSBvcGFxdWU7IHNldE5lZWRzQ29tbWl0KCk7IH0KICAgICBib29sIG9wYXF1ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fb3BhcXVlOyB9CiAKLSAgICB2b2lkIHNldFBvc2l0aW9uKGNvbnN0IFNrUG9p
bnQmIHBvc2l0aW9uKSB7IG1fcG9zaXRpb24gPSBwb3NpdGlvbjsgIHNldE5lZWRzQ29tbWl0KCk7
IH0KKyAgICB2b2lkIHNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uKSB7IG1f
cG9zaXRpb24gPSBwb3NpdGlvbjsgIHNldE5lZWRzQ29tbWl0KCk7IH0KIAotICAgIFNrUG9pbnQg
cG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9CisgICAgRmxvYXRQb2ludCBw
b3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb247IH0KIAogICAgIHZvaWQgc2V0WlBv
c2l0aW9uKGZsb2F0IHpQb3NpdGlvbikgeyBtX3pQb3NpdGlvbiA9IHpQb3NpdGlvbjsgc2V0TmVl
ZHNDb21taXQoKTsgfQotICAgIFNrU2NhbGFyIHpQb3NpdGlvbigpIGNvbnN0IHsgIHJldHVybiBt
X3pQb3NpdGlvbjsgfQorICAgIGZsb2F0IHpQb3NpdGlvbigpIGNvbnN0IHsgIHJldHVybiBtX3pQ
b3NpdGlvbjsgfQogCi0gICAgY29uc3QgTGF5ZXJTa2lhKiByb290TGF5ZXIoKSBjb25zdDsKKyAg
ICBjb25zdCBMYXllckNocm9taXVtKiByb290TGF5ZXIoKSBjb25zdDsKIAogICAgIHZvaWQgcmVt
b3ZlQWxsU3VibGF5ZXJzKCk7CiAKLSAgICB2b2lkIHNldFN1YmxheWVycyhjb25zdCBWZWN0b3I8
UmVmUHRyPExheWVyU2tpYT4gPiYpOworICAgIHZvaWQgc2V0U3VibGF5ZXJzKGNvbnN0IFZlY3Rv
cjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYpOwogCi0gICAgY29uc3QgVmVjdG9yPFJlZlB0cjxM
YXllclNraWE+ID4mIGdldFN1YmxheWVycygpIGNvbnN0IHsgcmV0dXJuIG1fc3VibGF5ZXJzOyB9
CisgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiBnZXRTdWJsYXllcnMo
KSBjb25zdCB7IHJldHVybiBtX3N1YmxheWVyczsgfQogCi0gICAgdm9pZCBzZXRTdWJsYXllclRy
YW5zZm9ybShjb25zdCBTa01hdHJpeCYgdHJhbnNmb3JtKSB7IG1fc3VibGF5ZXJUcmFuc2Zvcm0g
PSB0cmFuc2Zvcm07IHNldE5lZWRzQ29tbWl0KCk7IH0KLSAgICBjb25zdCBTa01hdHJpeCYgc3Vi
bGF5ZXJUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3N1YmxheWVyVHJhbnNmb3JtOyB9Cisg
ICAgdm9pZCBzZXRTdWJsYXllclRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
dHJhbnNmb3JtKSB7IG1fc3VibGF5ZXJUcmFuc2Zvcm0gPSB0cmFuc2Zvcm07IHNldE5lZWRzQ29t
bWl0KCk7IH0KKyAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgc3VibGF5ZXJUcmFuc2Zv
cm0oKSBjb25zdCB7IHJldHVybiBtX3N1YmxheWVyVHJhbnNmb3JtOyB9CiAKLSAgICB2b2lkIHNl
dFN1cGVybGF5ZXIoTGF5ZXJTa2lhKiBzdXBlcmxheWVyKTsKLSAgICBMYXllclNraWEqIHN1cGVy
bGF5ZXIoKSBjb25zdDsKKyAgICB2b2lkIHNldFN1cGVybGF5ZXIoTGF5ZXJDaHJvbWl1bSogc3Vw
ZXJsYXllcik7CisgICAgTGF5ZXJDaHJvbWl1bSogc3VwZXJsYXllcigpIGNvbnN0OwogCiAKLSAg
ICB2b2lkIHNldFRyYW5zZm9ybShjb25zdCBTa01hdHJpeCYgdHJhbnNmb3JtKSB7IG1fdHJhbnNm
b3JtID0gdHJhbnNmb3JtOyBzZXROZWVkc0NvbW1pdCgpOyB9Ci0gICAgY29uc3QgU2tNYXRyaXgm
IHRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3JtOyB9CisgICAgdm9pZCBzZXRU
cmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkgeyBtX3RyYW5z
Zm9ybSA9IHRyYW5zZm9ybTsgc2V0TmVlZHNDb21taXQoKTsgfQorICAgIGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9ybTsgfQog
CiAgICAgdm9pZCBzZXRHZW9tZXRyeUZsaXBwZWQoYm9vbCBmbGlwcGVkKSB7IG1fZ2VvbWV0cnlG
bGlwcGVkID0gZmxpcHBlZDsgc2V0TmVlZHNDb21taXQoKTsgfQogICAgIGJvb2wgZ2VvbWV0cnlG
bGlwcGVkKCkgY29uc3QgeyByZXR1cm4gbV9nZW9tZXRyeUZsaXBwZWQ7IH0KQEAgLTE1NywxMiAr
MTU1LDEyIEBAIHB1YmxpYzoKICAgICBza2lhOjpQbGF0Zm9ybUNhbnZhcyogcGxhdGZvcm1DYW52
YXMoKSB7IHJldHVybiBtX2NhbnZhcy5nZXQoKTsgfQogICAgIEdyYXBoaWNzQ29udGV4dCogZ3Jh
cGhpY3NDb250ZXh0KCkgeyByZXR1cm4gbV9ncmFwaGljc0NvbnRleHQuZ2V0KCk7IH0KIAotICAg
IHZvaWQgc2V0QmFja2luZ1N0b3JlUmVjdChjb25zdCBTa0lSZWN0Jik7CisgICAgdm9pZCBzZXRC
YWNraW5nU3RvcmVSZWN0KGNvbnN0IEludFNpemUmKTsKIAogICAgIHZvaWQgZHJhd0RlYnVnQm9y
ZGVyKCk7CiAKIHByaXZhdGU6Ci0gICAgTGF5ZXJTa2lhKExheWVyVHlwZSwgR3JhcGhpY3NMYXll
clNraWEqIG93bmVyKTsKKyAgICBMYXllckNocm9taXVtKExheWVyVHlwZSwgR3JhcGhpY3NMYXll
ckNocm9taXVtKiBvd25lcik7CiAKICAgICB2b2lkIHNldE5lZWRzQ29tbWl0KCk7CiAKQEAgLTE3
NCwzNSArMTcyLDM1IEBAIHByaXZhdGU6CiAgICAgfQogCiAgICAgLy8gUmV0dXJucyB0aGUgaW5k
ZXggb2YgdGhlIHN1YmxheWVyIG9yIC0xIGlmIG5vdCBmb3VuZC4KLSAgICBpbnQgaW5kZXhPZlN1
YmxheWVyKGNvbnN0IExheWVyU2tpYSopOworICAgIGludCBpbmRleE9mU3VibGF5ZXIoY29uc3Qg
TGF5ZXJDaHJvbWl1bSopOwogCiAgICAgLy8gVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgZnJv
bSByZW1vdmVGcm9tU3VwZXJsYXllci4KLSAgICB2b2lkIHJlbW92ZVN1YmxheWVyKExheWVyU2tp
YSopOworICAgIHZvaWQgcmVtb3ZlU3VibGF5ZXIoTGF5ZXJDaHJvbWl1bSopOwogCiAgICAgLy8g
UmUtY3JlYXRlIHRoZSBjYW52YXMgYW5kIGdyYXBoaWNzIGNvbnRleHQuIFRoaXMgbWV0aG9kCiAg
ICAgLy8gbXVzdCBiZSBjYWxsZWQgZXZlcnkgdGltZSB0aGUgbGF5ZXIgaXMgcmVzaXplZC4KLSAg
ICB2b2lkIHVwZGF0ZUdyYXBoaWNzQ29udGV4dChjb25zdCBTa0lSZWN0Jik7CisgICAgdm9pZCB1
cGRhdGVHcmFwaGljc0NvbnRleHQoY29uc3QgSW50U2l6ZSYpOwogCi0gICAgVmVjdG9yPFJlZlB0
cjxMYXllclNraWE+ID4gbV9zdWJsYXllcnM7Ci0gICAgTGF5ZXJTa2lhKiBtX3N1cGVybGF5ZXI7
CisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IG1fc3VibGF5ZXJzOworICAgIExh
eWVyQ2hyb21pdW0qIG1fc3VwZXJsYXllcjsKIAotICAgIEdyYXBoaWNzTGF5ZXJTa2lhKiBtX293
bmVyOworICAgIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogbV9vd25lcjsKICAgICBPd25QdHI8c2tp
YTo6UGxhdGZvcm1DYW52YXM+IG1fY2FudmFzOwogICAgIE93blB0cjxQbGF0Zm9ybUNvbnRleHRT
a2lhPiBtX3NraWFDb250ZXh0OwogICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQ+IG1fZ3JhcGhp
Y3NDb250ZXh0OwogCiAgICAgTGF5ZXJUeXBlIG1fbGF5ZXJUeXBlOwogCi0gICAgU2tJUmVjdCBt
X2JvdW5kczsKLSAgICBTa0lSZWN0IG1fYmFja2luZ1N0b3JlUmVjdDsKLSAgICBTa1BvaW50IG1f
cG9zaXRpb247Ci0gICAgU2tQb2ludCBtX2FuY2hvclBvaW50OworICAgIEludFNpemUgbV9ib3Vu
ZHM7CisgICAgSW50U2l6ZSBtX2JhY2tpbmdTdG9yZVJlY3Q7CisgICAgRmxvYXRQb2ludCBtX3Bv
c2l0aW9uOworICAgIEZsb2F0UG9pbnQgbV9hbmNob3JQb2ludDsKICAgICBDb2xvciBtX2JhY2tn
cm91bmRDb2xvcjsKICAgICBDb2xvciBtX2JvcmRlckNvbG9yOwogCi0gICAgU2tSZWN0IG1fZnJh
bWU7Ci0gICAgU2tNYXRyaXggbV90cmFuc2Zvcm07Ci0gICAgU2tNYXRyaXggbV9zdWJsYXllclRy
YW5zZm9ybTsKKyAgICBGbG9hdFJlY3QgbV9mcmFtZTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBtX3RyYW5zZm9ybTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3N1YmxheWVyVHJhbnNm
b3JtOwogCiAgICAgdWludDMyX3QgbV9lZGdlQW50aWFsaWFzaW5nTWFzazsKICAgICBmbG9hdCBt
X29wYWNpdHk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250
V2luLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRXaW4uY3BwCmluZGV4
IDI3ZDhkZWUuLjcxNzE3MWYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ZvbnRXaW4uY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRX
aW4uY3BwCkBAIC0zNCw2ICszNCw4IEBACiAjaW5jbHVkZSAiVW5pc2NyaWJlQ29udHJvbGxlci5o
IgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogYm9vbCBGb250OjpjYW5SZXR1cm5GYWxsYmFja0ZvbnRz
Rm9yQ29tcGxleFRleHQoKQpAQCAtODksMTAgKzkxLDE2IEBAIHZvaWQgRm9udDo6ZHJhd0NvbXBs
ZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25z
dCBGCiAgICAgZHJhd0dseXBoQnVmZmVyKGNvbnRleHQsIGdseXBoQnVmZmVyLCBydW4sIHN0YXJ0
UG9pbnQpOwogfQogCi1mbG9hdCBGb250OjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3Qg
VGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9u
dHMpIGNvbnN0CitmbG9hdCBGb250OjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3QgVGV4
dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMs
IEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0CiB7CiAgICAgVW5pc2NyaWJlQ29u
dHJvbGxlciBjb250cm9sbGVyKHRoaXMsIHJ1biwgZmFsbGJhY2tGb250cyk7CiAgICAgY29udHJv
bGxlci5hZHZhbmNlKHJ1bi5sZW5ndGgoKSk7CisgICAgaWYgKGdseXBoT3ZlcmZsb3cpIHsKKyAg
ICAgICAgZ2x5cGhPdmVyZmxvdy0+dG9wID0gbWF4PGludD4oZ2x5cGhPdmVyZmxvdy0+dG9wLCBj
ZWlsZigtY29udHJvbGxlci5taW5HbHlwaEJvdW5kaW5nQm94WSgpKSAtIGFzY2VudCgpKTsKKyAg
ICAgICAgZ2x5cGhPdmVyZmxvdy0+Ym90dG9tID0gbWF4PGludD4oZ2x5cGhPdmVyZmxvdy0+Ym90
dG9tLCBjZWlsZihjb250cm9sbGVyLm1heEdseXBoQm91bmRpbmdCb3hZKCkpIC0gZGVzY2VudCgp
KTsKKyAgICAgICAgZ2x5cGhPdmVyZmxvdy0+bGVmdCA9IG1heDxpbnQ+KDAsIGNlaWxmKC1jb250
cm9sbGVyLm1pbkdseXBoQm91bmRpbmdCb3hYKCkpKTsKKyAgICAgICAgZ2x5cGhPdmVyZmxvdy0+
cmlnaHQgPSBtYXg8aW50PigwLCBjZWlsZihjb250cm9sbGVyLm1heEdseXBoQm91bmRpbmdCb3hY
KCkgLSBjb250cm9sbGVyLnJ1bldpZHRoU29GYXIoKSkpOworICAgIH0KICAgICByZXR1cm4gY29u
dHJvbGxlci5ydW5XaWR0aFNvRmFyKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhQ0dXaW4uY3BwIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFDR1dpbi5jcHAKaW5kZXggNmIzYTk2ZS4uZWUz
YTk4MCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9u
dERhdGFDR1dpbi5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxl
Rm9udERhdGFDR1dpbi5jcHAKQEAgLTEyNiwxMCArMTI2LDEwIEBAIHZvaWQgU2ltcGxlRm9udERh
dGE6OnBsYXRmb3JtQ2hhcldpZHRoSW5pdCgpCiAgICAgfQogfQogCi1mbG9hdCBTaW1wbGVGb250
RGF0YTo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAorR2x5cGhNZXRy
aWNzIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybU1ldHJpY3NGb3JHbHlwaChHbHlwaCBnbHlwaCwg
R2x5cGhNZXRyaWNzTW9kZSBtZXRyaWNzTW9kZSkgY29uc3QKIHsKICAgICBpZiAobV9wbGF0Zm9y
bURhdGEudXNlR0RJKCkpCi0gICAgICAgcmV0dXJuIHdpZHRoRm9yR0RJR2x5cGgoZ2x5cGgpOwor
ICAgICAgIHJldHVybiBtZXRyaWNzRm9yR0RJR2x5cGgoZ2x5cGgpOwogCiAgICAgQ0dGb250UmVm
IGZvbnQgPSBtX3BsYXRmb3JtRGF0YS5jZ0ZvbnQoKTsKICAgICBmbG9hdCBwb2ludFNpemUgPSBt
X3BsYXRmb3JtRGF0YS5zaXplKCk7CkBAIC0xMzksOCArMTM5LDE4IEBAIGZsb2F0IFNpbXBsZUZv
bnREYXRhOjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CiAgICAgLy8g
RklYTUU6IE5lZWQgdG8gYWRkIHJlYWwgc3VwcG9ydCBmb3IgcHJpbnRlciBmb250cy4KICAgICBi
b29sIGlzUHJpbnRlckZvbnQgPSBmYWxzZTsKICAgICB3a0dldEdseXBoQWR2YW5jZXMoZm9udCwg
bSwgbV9pc1N5c3RlbUZvbnQsIGlzUHJpbnRlckZvbnQsIGdseXBoLCBhZHZhbmNlKTsKLQotICAg
IHJldHVybiBhZHZhbmNlLndpZHRoICsgbV9zeW50aGV0aWNCb2xkT2Zmc2V0OworICAgIEdseXBo
TWV0cmljcyBtZXRyaWNzOworICAgIG1ldHJpY3MuaG9yaXpvbnRhbEFkdmFuY2UgPSBhZHZhbmNl
LndpZHRoICsgbV9zeW50aGV0aWNCb2xkT2Zmc2V0OworICAgIAorICAgIGlmIChtZXRyaWNzTW9k
ZSA9PSBHbHlwaEJvdW5kaW5nQm94KSB7CisgICAgICAgIENHUmVjdCBib3VuZGluZ0JveDsKKyAg
ICAgICAgQ0dGb250R2V0R2x5cGhCQm94ZXMoZm9udCwgJmdseXBoLCAxLCAmYm91bmRpbmdCb3gp
OworICAgICAgICBDR0Zsb2F0IHNjYWxlID0gcG9pbnRTaXplIC8gdW5pdHNQZXJFbSgpOworICAg
ICAgICBtZXRyaWNzLmJvdW5kaW5nQm94ID0gQ0dSZWN0QXBwbHlBZmZpbmVUcmFuc2Zvcm0oYm91
bmRpbmdCb3gsIENHQWZmaW5lVHJhbnNmb3JtTWFrZVNjYWxlKHNjYWxlLCAtc2NhbGUpKTsKKyAg
ICAgICAgaWYgKG1fc3ludGhldGljQm9sZE9mZnNldCkKKyAgICAgICAgICAgIG1ldHJpY3MuYm91
bmRpbmdCb3guc2V0V2lkdGgobWV0cmljcy5ib3VuZGluZ0JveC53aWR0aCgpICsgbV9zeW50aGV0
aWNCb2xkT2Zmc2V0KTsKKyAgICB9CisgICAgcmV0dXJuIG1ldHJpY3M7CiB9CiAKIH0KZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhV2luLmNw
cCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhV2luLmNwcApp
bmRleCA1YTMyNDRjLi5mODVmOWJhIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9TaW1wbGVGb250RGF0YVdpbi5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vU2ltcGxlRm9udERhdGFXaW4uY3BwCkBAIC0xNzksMTYgKzE3OSwyNSBAQCB2b2lk
IFNpbXBsZUZvbnREYXRhOjpkZXRlcm1pbmVQaXRjaCgpCiAgICAgUmVsZWFzZURDKDAsIGRjKTsK
IH0KIAotZmxvYXQgU2ltcGxlRm9udERhdGE6OndpZHRoRm9yR0RJR2x5cGgoR2x5cGggZ2x5cGgp
IGNvbnN0CitHbHlwaE1ldHJpY3MgU2ltcGxlRm9udERhdGE6Om1ldHJpY3NGb3JHRElHbHlwaChH
bHlwaCBnbHlwaCkgY29uc3QKIHsKICAgICBIREMgaGRjID0gR2V0REMoMCk7CiAgICAgU2V0R3Jh
cGhpY3NNb2RlKGhkYywgR01fQURWQU5DRUQpOwogICAgIEhHRElPQkogb2xkRm9udCA9IFNlbGVj
dE9iamVjdChoZGMsIG1fcGxhdGZvcm1EYXRhLmhmb250KCkpOwotICAgIGludCB3aWR0aDsKLSAg
ICBHZXRDaGFyV2lkdGhJKGhkYywgZ2x5cGgsIDEsIDAsICZ3aWR0aCk7CisKKyAgICBHTFlQSE1F
VFJJQ1MgZ2RpTWV0cmljczsKKyAgICBzdGF0aWMgY29uc3QgTUFUMiBpZGVudGl0eSA9IHsgMCwg
MSwgIDAsIDAsICAwLCAwLCAgMCwgMSB9OworICAgIEdldEdseXBoT3V0bGluZShoZGMsIGdseXBo
LCBHR09fTUVUUklDUyB8IEdHT19HTFlQSF9JTkRFWCwgJmdkaU1ldHJpY3MsIDAsIDAsICZpZGVu
dGl0eSk7CisKICAgICBTZWxlY3RPYmplY3QoaGRjLCBvbGRGb250KTsKICAgICBSZWxlYXNlREMo
MCwgaGRjKTsKLSAgICByZXR1cm4gd2lkdGggKyBtX3N5bnRoZXRpY0JvbGRPZmZzZXQ7CisKKyAg
ICBHbHlwaE1ldHJpY3MgZ2x5cGhNZXRyaWNzOworICAgIGdseXBoTWV0cmljcy5ob3Jpem9udGFs
QWR2YW5jZSA9IGdkaU1ldHJpY3MuZ21DZWxsSW5jWCArIG1fc3ludGhldGljQm9sZE9mZnNldDsK
KyAgICBnbHlwaE1ldHJpY3MuYm91bmRpbmdCb3ggPSBGbG9hdFJlY3QoZ2RpTWV0cmljcy5nbXB0
R2x5cGhPcmlnaW4ueCwgLWdkaU1ldHJpY3MuZ21wdEdseXBoT3JpZ2luLnksCisgICAgICAgIGdk
aU1ldHJpY3MuZ21CbGFja0JveFggKyBtX3N5bnRoZXRpY0JvbGRPZmZzZXQsIGdkaU1ldHJpY3Mu
Z21CbGFja0JveFkpOworCisgICAgcmV0dXJuIGdseXBoTWV0cmljczsKIH0KIAogU0NSSVBUX0ZP
TlRQUk9QRVJUSUVTKiBTaW1wbGVGb250RGF0YTo6c2NyaXB0Rm9udFByb3BlcnRpZXMoKSBjb25z
dApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVW5pc2NyaWJlQ29u
dHJvbGxlci5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9VbmlzY3JpYmVDb250
cm9sbGVyLmNwcAppbmRleCBmMzgyODU3Li5jZmExNWEyIDEwMDY0NAotLS0gYS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9VbmlzY3JpYmVDb250cm9sbGVyLmNwcAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9VbmlzY3JpYmVDb250cm9sbGVyLmNwcApAQCAtMzIsNiAr
MzIsOCBAQAogI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW5jbHVkZSA8d3RmL01hdGhF
eHRyYXMuaD4KIAordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKwogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiAvLyBGSVhNRTogUmVhcmNoaXRlY3QgdGhpcyB0byBiZSBtb3JlIGxpa2UgV2lkdGhJdGVyYXRv
ciBpbiBGb250LmNwcC4gIEhhdmUgYW4gYWR2YW5jZSgpIG1ldGhvZApAQCAtMzksMTYgKzQxLDIw
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIC8vIHRha2UgdGhlIEdseXBoQnVmZmVyIGFzIGFuIGFy
ZyBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gcG9wdWxhdGUgdGhlIGdseXBoIGJ1ZmZlciB3aGVu
CiAvLyBtZWFzdXJpbmcuCiBVbmlzY3JpYmVDb250cm9sbGVyOjpVbmlzY3JpYmVDb250cm9sbGVy
KGNvbnN0IEZvbnQqIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBTaW1w
bGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzKQotOiBtX2ZvbnQoKmZvbnQpCi0sIG1fcnVuKHJ1
bikKLSwgbV9mYWxsYmFja0ZvbnRzKGZhbGxiYWNrRm9udHMpCi0sIG1fZW5kKHJ1bi5sZW5ndGgo
KSkKLSwgbV9jdXJyZW50Q2hhcmFjdGVyKDApCi0sIG1fcnVuV2lkdGhTb0ZhcigwKQotLCBtX2Nv
bXB1dGluZ09mZnNldFBvc2l0aW9uKGZhbHNlKQotLCBtX2luY2x1ZGVQYXJ0aWFsR2x5cGhzKGZh
bHNlKQotLCBtX29mZnNldFgoMCkKLSwgbV9vZmZzZXRQb3NpdGlvbigwKQorICAgIDogbV9mb250
KCpmb250KQorICAgICwgbV9ydW4ocnVuKQorICAgICwgbV9mYWxsYmFja0ZvbnRzKGZhbGxiYWNr
Rm9udHMpCisgICAgLCBtX21pbkdseXBoQm91bmRpbmdCb3hYKG51bWVyaWNfbGltaXRzPGZsb2F0
Pjo6bWF4KCkpCisgICAgLCBtX21heEdseXBoQm91bmRpbmdCb3hYKG51bWVyaWNfbGltaXRzPGZs
b2F0Pjo6bWluKCkpCisgICAgLCBtX21pbkdseXBoQm91bmRpbmdCb3hZKG51bWVyaWNfbGltaXRz
PGZsb2F0Pjo6bWF4KCkpCisgICAgLCBtX21heEdseXBoQm91bmRpbmdCb3hZKG51bWVyaWNfbGlt
aXRzPGZsb2F0Pjo6bWluKCkpCisgICAgLCBtX2VuZChydW4ubGVuZ3RoKCkpCisgICAgLCBtX2N1
cnJlbnRDaGFyYWN0ZXIoMCkKKyAgICAsIG1fcnVuV2lkdGhTb0ZhcigwKQorICAgICwgbV9jb21w
dXRpbmdPZmZzZXRQb3NpdGlvbihmYWxzZSkKKyAgICAsIG1faW5jbHVkZVBhcnRpYWxHbHlwaHMo
ZmFsc2UpCisgICAgLCBtX29mZnNldFgoMCkKKyAgICAsIG1fb2Zmc2V0UG9zaXRpb24oMCkKIHsK
ICAgICBtX3BhZGRpbmcgPSBtX3J1bi5wYWRkaW5nKCk7CiAgICAgaWYgKCFtX3BhZGRpbmcpCkBA
IC0zNzQsNiArMzgwLDE0IEBAIGJvb2wgVW5pc2NyaWJlQ29udHJvbGxlcjo6c2hhcGVBbmRQbGFj
ZUl0ZW0oY29uc3QgVUNoYXIqIGNwLCB1bnNpZ25lZCBpLCBjb25zdCBTCiAgICAgICAgICAgICBn
bHlwaEJ1ZmZlci0+YWRkKGdseXBoLCBmb250RGF0YSwgYWR2YW5jZSwgJnNpemUpOwogICAgICAg
ICB9CiAKKyAgICAgICAgR2x5cGhNZXRyaWNzIGdseXBoTWV0cmljcyA9IGZvbnREYXRhLT5tZXRy
aWNzRm9yR2x5cGgoZ2x5cGgpOworICAgICAgICBnbHlwaE1ldHJpY3MuYm91bmRpbmdCb3gubW92
ZShtX2dseXBoT3JpZ2luLngoKSwgbV9nbHlwaE9yaWdpbi55KCkpOworICAgICAgICBtX21pbkds
eXBoQm91bmRpbmdCb3hYID0gbWluKG1fbWluR2x5cGhCb3VuZGluZ0JveFgsIGdseXBoTWV0cmlj
cy5ib3VuZGluZ0JveC54KCkpOworICAgICAgICBtX21heEdseXBoQm91bmRpbmdCb3hYID0gbWF4
KG1fbWF4R2x5cGhCb3VuZGluZ0JveFgsIGdseXBoTWV0cmljcy5ib3VuZGluZ0JveC5yaWdodCgp
KTsKKyAgICAgICAgbV9taW5HbHlwaEJvdW5kaW5nQm94WSA9IG1pbihtX21pbkdseXBoQm91bmRp
bmdCb3hZLCBnbHlwaE1ldHJpY3MuYm91bmRpbmdCb3gueSgpKTsKKyAgICAgICAgbV9tYXhHbHlw
aEJvdW5kaW5nQm94WSA9IG1heChtX21heEdseXBoQm91bmRpbmdCb3hZLCBnbHlwaE1ldHJpY3Mu
Ym91bmRpbmdCb3guYm90dG9tKCkpOworICAgICAgICBtX2dseXBoT3JpZ2luLm1vdmUoYWR2YW5j
ZSArIG9mZnNldFgsIC1vZmZzZXRZKTsKKwogICAgICAgICAvLyBNdXRhdGUgdGhlIGdseXBoIGFy
cmF5IHRvIGNvbnRhaW4gb3VyIGFsdGVyZWQgYWR2YW5jZXMuCiAgICAgICAgIGlmIChtX2NvbXB1
dGluZ09mZnNldFBvc2l0aW9uKQogICAgICAgICAgICAgYWR2YW5jZXNba10gPSBhZHZhbmNlOwpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVW5pc2NyaWJlQ29udHJv
bGxlci5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVW5pc2NyaWJlQ29udHJvbGxl
ci5oCmluZGV4IDIzYjgxMDguLjA5MjAzYjUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL1VuaXNjcmliZUNvbnRyb2xsZXIuaAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9VbmlzY3JpYmVDb250cm9sbGVyLmgKQEAgLTQ5LDYgKzQ5LDExIEBAIHB1
YmxpYzoKICAgICAvLyBSZXR1cm5zIHRoZSB3aWR0aCBvZiBldmVyeXRoaW5nIHdlJ3ZlIGNvbnN1
bWVkIHNvIGZhci4KICAgICBmbG9hdCBydW5XaWR0aFNvRmFyKCkgY29uc3QgeyByZXR1cm4gbV9y
dW5XaWR0aFNvRmFyOyB9CiAKKyAgICBmbG9hdCBtaW5HbHlwaEJvdW5kaW5nQm94WCgpIGNvbnN0
IHsgcmV0dXJuIG1fbWluR2x5cGhCb3VuZGluZ0JveFg7IH0KKyAgICBmbG9hdCBtYXhHbHlwaEJv
dW5kaW5nQm94WCgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4R2x5cGhCb3VuZGluZ0JveFg7IH0KKyAg
ICBmbG9hdCBtaW5HbHlwaEJvdW5kaW5nQm94WSgpIGNvbnN0IHsgcmV0dXJuIG1fbWluR2x5cGhC
b3VuZGluZ0JveFk7IH0KKyAgICBmbG9hdCBtYXhHbHlwaEJvdW5kaW5nQm94WSgpIGNvbnN0IHsg
cmV0dXJuIG1fbWF4R2x5cGhCb3VuZGluZ0JveFk7IH0KKwogcHJpdmF0ZTogICAgCiAgICAgdm9p
ZCByZXNldENvbnRyb2xBbmRTdGF0ZSgpOwogCkBAIC02MSw2ICs2NiwxMSBAQCBwcml2YXRlOgog
ICAgIGNvbnN0IEZvbnQmIG1fZm9udDsKICAgICBjb25zdCBUZXh0UnVuJiBtX3J1bjsKICAgICBI
YXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIG1fZmFsbGJhY2tGb250czsKKyAgICBGbG9h
dFBvaW50IG1fZ2x5cGhPcmlnaW47CisgICAgZmxvYXQgbV9taW5HbHlwaEJvdW5kaW5nQm94WDsK
KyAgICBmbG9hdCBtX21heEdseXBoQm91bmRpbmdCb3hYOworICAgIGZsb2F0IG1fbWluR2x5cGhC
b3VuZGluZ0JveFk7CisgICAgZmxvYXQgbV9tYXhHbHlwaEJvdW5kaW5nQm94WTsKIAogICAgIFND
UklQVF9DT05UUk9MIG1fY29udHJvbDsKICAgICBTQ1JJUFRfU1RBVEUgbV9zdGF0ZTsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udFdpbmNlLmNwcCBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udFdpbmNlLmNwcAppbmRleCA2YzAzNzEy
Li5mOGIxODg2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0Zv
bnRXaW5jZS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9Gb250V2lu
Y2UuY3BwCkBAIC0yMzUsNyArMjM1LDcgQEAgdm9pZCBGb250OjpkcmF3Q29tcGxleFRleHQoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEYKICAgICB9
CiB9CiAKLWZsb2F0IEZvbnQ6OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVu
JiBydW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cykgY29u
c3QKK2Zsb2F0IEZvbnQ6OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBy
dW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cywgR2x5cGhP
dmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKIHsKICAgICBUZXh0UnVuQ29tcG9uZW50cyBj
b21wb25lbnRzOwogICAgIGludCB3ID0gZ2VuZXJhdGVDb21wb25lbnRzKCZjb21wb25lbnRzLCAq
dGhpcywgcnVuKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvRm9u
dFd4LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvRm9udFd4LmNwcAppbmRleCA5
OGI1YTBhLi5kY2UzODQxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4
L0ZvbnRXeC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9Gb250V3guY3Bw
CkBAIC0xMjEsNyArMTIxLDcgQEAgdm9pZCBGb250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEYKIH0KIAogCi1mbG9h
dCBGb250OjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNo
U2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMpIGNvbnN0CitmbG9hdCBG
b250OjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0
PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqKSBj
b25zdAogewogI2lmIE9TKFdJTkRPV1MpCiAgICAgVW5pc2NyaWJlQ29udHJvbGxlciBjb250cm9s
bGVyKHRoaXMsIHJ1biwgZmFsbGJhY2tGb250cyk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3d4L1NpbXBsZUZvbnREYXRhV3guY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93eC9TaW1wbGVGb250RGF0YVd4LmNwcAppbmRleCBkOWZkMmIzLi4zYzhhMWRhIDEw
MDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L1NpbXBsZUZvbnREYXRhV3gu
Y3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvU2ltcGxlRm9udERhdGFXeC5j
cHAKQEAgLTExMiwxNyArMTEyLDE5IEBAIHZvaWQgU2ltcGxlRm9udERhdGE6OmRldGVybWluZVBp
dGNoKCkKICAgICAgICAgbV90cmVhdEFzRml4ZWRQaXRjaCA9IGZhbHNlOwogfQogCi1mbG9hdCBT
aW1wbGVGb250RGF0YTo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAor
R2x5cGhNZXRyaWNzIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybU1ldHJpY3NGb3JHbHlwaChHbHlw
aCBnbHlwaCwgR2x5cGhNZXRyaWNzTW9kZSkgY29uc3QKIHsKKyAgICBHbHlwaE1ldHJpY3MgbWV0
cmljczsKICNpZiBfX1dYTVNXX18KICAgICAvLyB1bmRlciBXaW5kb3dzIC8gd3hNU1cgd2UgY3Vy
cmVudGx5IGFsd2F5cyB1c2UgR0RJIGZvbnRzLgotICAgIHJldHVybiB3aWR0aEZvckdESUdseXBo
KGdseXBoKTsKKyAgICBtZXRyaWNzLmhvcml6b250YWxBZHZhbmNlID0gd2lkdGhGb3JHRElHbHlw
aChnbHlwaCk7CiAjZWxzZQogICAgIC8vIFRPRE86IGZpeCB0aGlzISBNYWtlIEdldFRleHRFeHRl
bnRzIGEgbWV0aG9kIG9mIHd4Rm9udCBpbiAyLjkKICAgICBpbnQgd2lkdGggPSAxMDsKICAgICBH
ZXRUZXh0RXh0ZW50KCptX3BsYXRmb3JtRGF0YS5mb250KCksICh3eENoYXIpZ2x5cGgsICZ3aWR0
aCwgTlVMTCk7Ci0gICAgcmV0dXJuIHdpZHRoOworICAgIG1ldHJpY3MuaG9yaXpvbnRhbEFkdmFu
Y2UgPSB3aWR0aDsKICNlbmRpZgorICAgIHJldHVybiBtZXRyaWNzOwogfQogCiAjaWYgT1MoV0lO
RE9XUykKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQUGFyc2Vycy5j
cHAgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRUUFBhcnNlcnMuY3BwCmluZGV4IDEwMzBj
ODYuLjE1MmE5ZDAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQUGFy
c2Vycy5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBQYXJzZXJzLmNwcApA
QCAtNzIsMzYgKzcyLDM0IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBza2lwVG9rZW4oY29uc3QgU3Ry
aW5nJiBzdHIsIGludCYgcG9zLCBjb25zdCBjaGFyKiB0b2tlbikKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotYm9vbCBzaG91bGRUcmVhdEFzQXR0YWNobWVudChjb25zdCBSZXNvdXJjZVJlc3BvbnNl
QmFzZSYgcmVzcG9uc2UpCi17Ci0gICAgY29uc3QgU3RyaW5nJiBjb250ZW50RGlzcG9zaXRpb24g
PSByZXNwb25zZS5odHRwSGVhZGVyRmllbGQoIkNvbnRlbnQtRGlzcG9zaXRpb24iKTsKLSAgICAK
K0NvbnRlbnREaXNwb3NpdGlvblR5cGUgY29udGVudERpc3Bvc2l0aW9uVHlwZShjb25zdCBTdHJp
bmcmIGNvbnRlbnREaXNwb3NpdGlvbikKK3sgICAKICAgICBpZiAoY29udGVudERpc3Bvc2l0aW9u
LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gQ29udGVu
dERpc3Bvc2l0aW9uTm9uZTsKIAogICAgIC8vIFNvbWUgYnJva2VuIHNpdGVzIGp1c3Qgc2VuZAog
ICAgIC8vIENvbnRlbnQtRGlzcG9zaXRpb246IDsgZmlsZW5hbWU9ImZpbGUiCiAgICAgLy8gc2Ny
ZWVuIHRob3NlIG91dCBoZXJlLgogICAgIGlmIChjb250ZW50RGlzcG9zaXRpb24uc3RhcnRzV2l0
aCgiOyIpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBDb250ZW50RGlz
cG9zaXRpb25Ob25lOwogCiAgICAgaWYgKGNvbnRlbnREaXNwb3NpdGlvbi5zdGFydHNXaXRoKCJp
bmxpbmUiLCBmYWxzZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIENv
bnRlbnREaXNwb3NpdGlvbklubGluZTsKIAogICAgIC8vIFNvbWUgYnJva2VuIHNpdGVzIGp1c3Qg
c2VuZAogICAgIC8vIENvbnRlbnQtRGlzcG9zaXRpb246IGZpbGVuYW1lPSJmaWxlIgogICAgIC8v
IHdpdGhvdXQgYSBkaXNwb3NpdGlvbiB0b2tlbi4uLiBzY3JlZW4gdGhvc2Ugb3V0LgogICAgIGlm
IChjb250ZW50RGlzcG9zaXRpb24uc3RhcnRzV2l0aCgiZmlsZW5hbWUiLCBmYWxzZSkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIENvbnRlbnREaXNwb3NpdGlvbk5vbmU7
CiAKICAgICAvLyBBbHNvIGluIHVzZSBpcyBDb250ZW50LURpc3Bvc2l0aW9uOiBuYW1lPSJmaWxl
IgogICAgIGlmIChjb250ZW50RGlzcG9zaXRpb24uc3RhcnRzV2l0aCgibmFtZSIsIGZhbHNlKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gQ29udGVudERpc3Bvc2l0aW9u
Tm9uZTsKIAogICAgIC8vIFdlIGhhdmUgYSBjb250ZW50LWRpc3Bvc2l0aW9uIG9mICJhdHRhY2ht
ZW50IiBvciB1bmtub3duLgogICAgIC8vIFJGQyAyMTgzLCBzZWN0aW9uIDIuOCBzYXlzIHRoYXQg
YW4gdW5rbm93biBkaXNwb3NpdGlvbgogICAgIC8vIHZhbHVlIHNob3VsZCBiZSB0cmVhdGVkIGFz
ICJhdHRhY2htZW50IgotICAgIHJldHVybiB0cnVlOyAgCisgICAgcmV0dXJuIENvbnRlbnREaXNw
b3NpdGlvbkF0dGFjaG1lbnQ7ICAKIH0KIAogYm9vbCBwYXJzZUhUVFBSZWZyZXNoKGNvbnN0IFN0
cmluZyYgcmVmcmVzaCwgYm9vbCBmcm9tSHR0cEVxdWl2TWV0YSwgZG91YmxlJiBkZWxheSwgU3Ry
aW5nJiB1cmwpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRUUFBhcnNl
cnMuaCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQUGFyc2Vycy5oCmluZGV4IGQ1Njhi
ZDQuLmJlNGM0ZDMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQUGFy
c2Vycy5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQUGFyc2Vycy5oCkBAIC00
MSw4ICs0MSwxNCBAQCBlbnVtIFhTU1Byb3RlY3Rpb25EaXNwb3NpdGlvbiB7CiAgICAgWFNTUHJv
dGVjdGlvbkJsb2NrRW5hYmxlZAogfTsKIAotCi1ib29sIHNob3VsZFRyZWF0QXNBdHRhY2htZW50
KGNvbnN0IFJlc291cmNlUmVzcG9uc2VCYXNlJiByZXNwb25zZSk7Cit0eXBlZGVmIGVudW0gewor
ICAgIENvbnRlbnREaXNwb3NpdGlvbk5vbmUsCisgICAgQ29udGVudERpc3Bvc2l0aW9uSW5saW5l
LAorICAgIENvbnRlbnREaXNwb3NpdGlvbkF0dGFjaG1lbnQsCisgICAgQ29udGVudERpc3Bvc2l0
aW9uT3RoZXIKK30gQ29udGVudERpc3Bvc2l0aW9uVHlwZTsKKworQ29udGVudERpc3Bvc2l0aW9u
VHlwZSBjb250ZW50RGlzcG9zaXRpb25UeXBlKGNvbnN0IFN0cmluZyYpOwogYm9vbCBwYXJzZUhU
VFBSZWZyZXNoKGNvbnN0IFN0cmluZyYgcmVmcmVzaCwgYm9vbCBmcm9tSHR0cEVxdWl2TWV0YSwg
ZG91YmxlJiBkZWxheSwgU3RyaW5nJiB1cmwpOwogZG91YmxlIHBhcnNlRGF0ZShjb25zdCBTdHJp
bmcmKTsKIFN0cmluZyBmaWxlbmFtZUZyb21IVFRQQ29udGVudERpc3Bvc2l0aW9uKGNvbnN0IFN0
cmluZyYpOyAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vcG9zaXgvRmlsZVN5c3RlbVBP
U0lYLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vcG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNwcAppbmRl
eCBkNjgwNGZiLi42ODc0MWI2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL3Bvc2l4L0Zp
bGVTeXN0ZW1QT1NJWC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9wb3NpeC9GaWxlU3lzdGVt
UE9TSVguY3BwCkBAIC0zMCwxMSArMzAsMTEgQEAKICNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCiAK
ICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KLQotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KICNpbmNsdWRl
IDxsaWJnZW4uaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBA
IC02NSw2ICs2NSw2OSBAQCBib29sIGRlbGV0ZUZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKQogICAg
IHJldHVybiAhdW5saW5rKGZzUmVwLmRhdGEoKSk7CiB9CiAKK1BsYXRmb3JtRmlsZUhhbmRsZSBv
cGVuRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIEZpbGVPcGVuTW9kZSBtb2RlKQoreworICAgIGlu
dCBwbGF0Zm9ybUZsYWcgPSAwOworICAgIGlmIChtb2RlID09IE9wZW5Gb3JSZWFkKQorICAgICAg
ICBwbGF0Zm9ybUZsYWcgfD0gT19SRE9OTFk7CisgICAgZWxzZSBpZiAobW9kZSA9PSBPcGVuRm9y
V3JpdGUpCisgICAgICAgIHBsYXRmb3JtRmxhZyB8PSAoT19XUk9OTFkgfCBPX0NSRUFUIHwgT19U
UlVOQyk7CisgICAgcmV0dXJuIG9wZW4ocGF0aC51dGY4KCkuZGF0YSgpLCBwbGF0Zm9ybUZsYWcs
IDA2NjYpOworfQorCit2b2lkIGNsb3NlRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUmIGhhbmRsZSkK
K3sKKyAgICBpZiAoaXNIYW5kbGVWYWxpZChoYW5kbGUpKSB7CisgICAgICAgIGNsb3NlKGhhbmRs
ZSk7CisgICAgICAgIGhhbmRsZSA9IGludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGU7CisgICAgfQor
fQorCitsb25nIGxvbmcgc2Vla0ZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgbG9uZyBs
b25nIG9mZnNldCwgRmlsZVNlZWtPcmlnaW4gb3JpZ2luKQoreworICAgIGludCB3aGVuY2UgPSBT
RUVLX1NFVDsKKyAgICBzd2l0Y2ggKG9yaWdpbikgeworICAgIGNhc2UgU2Vla0Zyb21CZWdpbm5p
bmc6CisgICAgICAgIHdoZW5jZSA9IFNFRUtfU0VUOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFNlZWtGcm9tQ3VycmVudDoKKyAgICAgICAgd2hlbmNlID0gU0VFS19DVVI7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgU2Vla0Zyb21FbmQ6CisgICAgICAgIHdoZW5jZSA9IFNFRUtfRU5EOwor
ICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICB9CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4obHNlZWsoaGFuZGxl
LCBvZmZzZXQsIHdoZW5jZSkpOworfQorCitib29sIHRydW5jYXRlRmlsZShQbGF0Zm9ybUZpbGVI
YW5kbGUgaGFuZGxlLCBsb25nIGxvbmcgb2Zmc2V0KQoreworICAgIC8vIGZ0cnVuY2F0ZSByZXR1
cm5zIDAgdG8gaW5kaWNhdGUgdGhlIHN1Y2Nlc3MuCisgICAgcmV0dXJuICFmdHJ1bmNhdGUoaGFu
ZGxlLCBvZmZzZXQpOworfQorCitpbnQgd3JpdGVUb0ZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhh
bmRsZSwgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKK3sKKyAgICBkbyB7CisgICAgICAg
IGludCBieXRlc1dyaXR0ZW4gPSB3cml0ZShoYW5kbGUsIGRhdGEsIHN0YXRpY19jYXN0PHNpemVf
dD4obGVuZ3RoKSk7CisgICAgICAgIGlmIChieXRlc1dyaXR0ZW4gPj0gMCkKKyAgICAgICAgICAg
IHJldHVybiBieXRlc1dyaXR0ZW47CisgICAgfSB3aGlsZSAoZXJybm8gPT0gRUlOVFIpOworICAg
IHJldHVybiAtMTsKK30KKworaW50IHJlYWRGcm9tRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFu
ZGxlLCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQoreworICAgIGRvIHsKKyAgICAgICAgaW50IGJ5
dGVzUmVhZCA9IHJlYWQoaGFuZGxlLCBkYXRhLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGxlbmd0aCkp
OworICAgICAgICBpZiAoYnl0ZXNSZWFkID49IDApCisgICAgICAgICAgICByZXR1cm4gYnl0ZXNS
ZWFkOworICAgIH0gd2hpbGUgKGVycm5vID09IEVJTlRSKTsKKyAgICByZXR1cm4gLTE7Cit9CisK
IGJvb2wgZGVsZXRlRW1wdHlEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoKQogewogICAgIENT
dHJpbmcgZnNSZXAgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7CmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BsYXRmb3JtL3d4L3d4Y29kZS9tYWMvY2FyYm9uL2ZvbnRwcm9wcy5tbSBiL1dl
YkNvcmUvcGxhdGZvcm0vd3gvd3hjb2RlL21hYy9jYXJib24vZm9udHByb3BzLm1tCmluZGV4IDIz
MTJkZWMuLmZmNGMxOGEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vd3gvd3hjb2RlL21h
Yy9jYXJib24vZm9udHByb3BzLm1tCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vd3gvd3hjb2RlL21h
Yy9jYXJib24vZm9udHByb3BzLm1tCkBAIC05Niw3ICs5Niw3IEBAIGJvb2wgd3hGb250Q29udGFp
bnNDaGFyYWN0ZXJzKGNvbnN0IHd4Rm9udCYgZm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMs
IGludCBsCiB7CiAjaWYgd3hPU1hfVVNFX0NPQ09BCiAgICAgTlNTdHJpbmcqIHN0cmluZyA9IFtb
TlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoQ2hhcmFjdGVyc05vQ29weTpjb25zdF9jYXN0PHVuaWNo
YXIqPihjaGFyYWN0ZXJzKSBsZW5ndGg6bGVuZ3RoIGZyZWVXaGVuRG9uZTpOT107Ci0gICAgTlND
aGFyYWN0ZXJTZXQqIHNldCA9IFtbZm9udC5HZXROU0ZvbnQoKSBjb3ZlcmVkQ2hhcmFjdGVyU2V0
XSBpbnZlcnRlZFNldF07CisgICAgTlNDaGFyYWN0ZXJTZXQqIHNldCA9IFtbZm9udC5PU1hHZXRO
U0ZvbnQoKSBjb3ZlcmVkQ2hhcmFjdGVyU2V0XSBpbnZlcnRlZFNldF07CiAgICAgYm9vbCByZXN1
bHQgPSBzZXQgJiYgW3N0cmluZyByYW5nZU9mQ2hhcmFjdGVyRnJvbVNldDpzZXRdLmxvY2F0aW9u
ID09IE5TTm90Rm91bmQ7CiAgICAgW3N0cmluZyByZWxlYXNlXTsKICAgICByZXR1cm4gcmVzdWx0
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAgYi9XZWJD
b3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAppbmRleCAyM2RjNGU3Li5mODNlYmM2IDEw
MDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAorKysgYi9XZWJD
b3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcApAQCAtMjg4LDggKzI4OCwxMCBAQCBpbnQg
SW5saW5lRmxvd0JveDo6cGxhY2VCb3hlc0hvcml6b250YWxseShpbnQgeFBvcywgYm9vbCYgbmVl
ZHNXb3JkU3BhY2luZykKICAgICAgICAgICAgIGludCBsZXR0ZXJTcGFjaW5nID0gbWluKDAsIChp
bnQpcnQtPnN0eWxlKG1fZmlyc3RMaW5lKS0+Zm9udCgpLmxldHRlclNwYWNpbmcoKSk7CiAgICAg
ICAgICAgICByaWdodExheW91dE92ZXJmbG93ID0gbWF4KHhQb3MgKyB0ZXh0LT53aWR0aCgpIC0g
bGV0dGVyU3BhY2luZywgcmlnaHRMYXlvdXRPdmVyZmxvdyk7CiAKLSAgICAgICAgICAgIGludCBs
ZWZ0R2x5cGhPdmVyZmxvdyA9IC1zdHJva2VPdmVyZmxvdzsKLSAgICAgICAgICAgIGludCByaWdo
dEdseXBoT3ZlcmZsb3cgPSBzdHJva2VPdmVyZmxvdyAtIGxldHRlclNwYWNpbmc7CisgICAgICAg
ICAgICBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93ID0gc3RhdGljX2Nhc3Q8SW5saW5lVGV4
dEJveCo+KGN1cnIpLT5nbHlwaE92ZXJmbG93KCk7CisKKyAgICAgICAgICAgIGludCBsZWZ0R2x5
cGhPdmVyZmxvdyA9IC1zdHJva2VPdmVyZmxvdyAtIChnbHlwaE92ZXJmbG93ID8gZ2x5cGhPdmVy
Zmxvdy0+bGVmdCA6IDApOworICAgICAgICAgICAgaW50IHJpZ2h0R2x5cGhPdmVyZmxvdyA9IHN0
cm9rZU92ZXJmbG93IC0gbGV0dGVyU3BhY2luZyArIChnbHlwaE92ZXJmbG93ID8gZ2x5cGhPdmVy
Zmxvdy0+cmlnaHQgOiAwKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaW50IGNoaWxkT3Zl
cmZsb3dMZWZ0ID0gbGVmdEdseXBoT3ZlcmZsb3c7CiAgICAgICAgICAgICBpbnQgY2hpbGRPdmVy
Zmxvd1JpZ2h0ID0gcmlnaHRHbHlwaE92ZXJmbG93OwpAQCAtNDEyLDM1ICs0MTQsMzUgQEAgdm9p
ZCBJbmxpbmVGbG93Qm94Ojpjb21wdXRlTG9naWNhbEJveEhlaWdodHMoaW50JiBtYXhQb3NpdGlv
blRvcCwgaW50JiBtYXhQb3NpdGkKIAogICAgICAgICBpbnQgbGluZUhlaWdodDsKICAgICAgICAg
aW50IGJhc2VsaW5lOwotICAgICAgICBWZWN0b3I8Y29uc3QgU2ltcGxlRm9udERhdGEqPiB1c2Vk
Rm9udHM7CisgICAgICAgIFZlY3Rvcjxjb25zdCBTaW1wbGVGb250RGF0YSo+KiB1c2VkRm9udHMg
PSAwOwogICAgICAgICBpZiAoY3Vyci0+aXNJbmxpbmVUZXh0Qm94KCkpCi0gICAgICAgICAgICBz
dGF0aWNfY2FzdDxJbmxpbmVUZXh0Qm94Kj4oY3VyciktPnRha2VGYWxsYmFja0ZvbnRzKHVzZWRG
b250cyk7CisgICAgICAgICAgICB1c2VkRm9udHMgPSBzdGF0aWNfY2FzdDxJbmxpbmVUZXh0Qm94
Kj4oY3VyciktPmZhbGxiYWNrRm9udHMoKTsKIAotICAgICAgICBpZiAoIXVzZWRGb250cy5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgICAgIHVzZWRGb250cy5hcHBlbmQoY3Vyci0+cmVuZGVyZXIoKS0+
c3R5bGUobV9maXJzdExpbmUpLT5mb250KCkucHJpbWFyeUZvbnQoKSk7CisgICAgICAgIGlmICh1
c2VkRm9udHMpIHsKKyAgICAgICAgICAgIHVzZWRGb250cy0+YXBwZW5kKGN1cnItPnJlbmRlcmVy
KCktPnN0eWxlKG1fZmlyc3RMaW5lKS0+Zm9udCgpLnByaW1hcnlGb250KCkpOwogICAgICAgICAg
ICAgTGVuZ3RoIHBhcmVudExpbmVIZWlnaHQgPSBjdXJyLT5yZW5kZXJlcigpLT5wYXJlbnQoKS0+
c3R5bGUoKS0+bGluZUhlaWdodCgpOwogICAgICAgICAgICAgaWYgKHBhcmVudExpbmVIZWlnaHQu
aXNOZWdhdGl2ZSgpKSB7CiAgICAgICAgICAgICAgICAgaW50IGJhc2VsaW5lVG9Cb3R0b20gPSAw
OwogICAgICAgICAgICAgICAgIGJhc2VsaW5lID0gMDsKLSAgICAgICAgICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHVzZWRGb250cy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAg
ICAgICBpbnQgaGFsZkxlYWRpbmcgPSAodXNlZEZvbnRzW2ldLT5saW5lU3BhY2luZygpIC0gdXNl
ZEZvbnRzW2ldLT5hc2NlbnQoKSAtIHVzZWRGb250c1tpXS0+ZGVzY2VudCgpKSAvIDI7Ci0gICAg
ICAgICAgICAgICAgICAgIGJhc2VsaW5lID0gbWF4KGJhc2VsaW5lLCBoYWxmTGVhZGluZyArIHVz
ZWRGb250c1tpXS0+YXNjZW50KCkpOwotICAgICAgICAgICAgICAgICAgICBiYXNlbGluZVRvQm90
dG9tID0gbWF4KGJhc2VsaW5lVG9Cb3R0b20sIHVzZWRGb250c1tpXS0+bGluZVNwYWNpbmcoKSAt
IHVzZWRGb250c1tpXS0+YXNjZW50KCkgLSB1c2VkRm9udHNbaV0tPmRlc2NlbnQoKSAtIGhhbGZM
ZWFkaW5nKTsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHVzZWRGb250
cy0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IGhhbGZMZWFkaW5nID0g
KHVzZWRGb250cy0+YXQoaSktPmxpbmVTcGFjaW5nKCkgLSB1c2VkRm9udHMtPmF0KGkpLT5hc2Nl
bnQoKSAtIHVzZWRGb250cy0+YXQoaSktPmRlc2NlbnQoKSkgLyAyOworICAgICAgICAgICAgICAg
ICAgICBiYXNlbGluZSA9IG1heChiYXNlbGluZSwgaGFsZkxlYWRpbmcgKyB1c2VkRm9udHMtPmF0
KGkpLT5hc2NlbnQoKSk7CisgICAgICAgICAgICAgICAgICAgIGJhc2VsaW5lVG9Cb3R0b20gPSBt
YXgoYmFzZWxpbmVUb0JvdHRvbSwgdXNlZEZvbnRzLT5hdChpKS0+bGluZVNwYWNpbmcoKSAtIHVz
ZWRGb250cy0+YXQoaSktPmFzY2VudCgpIC0gdXNlZEZvbnRzLT5hdChpKS0+ZGVzY2VudCgpIC0g
aGFsZkxlYWRpbmcpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBsaW5lSGVp
Z2h0ID0gYmFzZWxpbmUgKyBiYXNlbGluZVRvQm90dG9tOwogICAgICAgICAgICAgfSBlbHNlIGlm
IChwYXJlbnRMaW5lSGVpZ2h0LmlzUGVyY2VudCgpKSB7CiAgICAgICAgICAgICAgICAgbGluZUhl
aWdodCA9IHBhcmVudExpbmVIZWlnaHQuY2FsY01pblZhbHVlKGN1cnItPnJlbmRlcmVyKCktPnN0
eWxlKCktPmZvbnRTaXplKCkpOwogICAgICAgICAgICAgICAgIGJhc2VsaW5lID0gMDsKLSAgICAg
ICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHVzZWRGb250cy5zaXplKCk7ICsraSkg
ewotICAgICAgICAgICAgICAgICAgICBpbnQgaGFsZkxlYWRpbmcgPSAobGluZUhlaWdodCAtIHVz
ZWRGb250c1tpXS0+YXNjZW50KCkgLSB1c2VkRm9udHNbaV0tPmRlc2NlbnQoKSkgLyAyOwotICAg
ICAgICAgICAgICAgICAgICBiYXNlbGluZSA9IG1heChiYXNlbGluZSwgaGFsZkxlYWRpbmcgKyB1
c2VkRm9udHNbaV0tPmFzY2VudCgpKTsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHVzZWRGb250cy0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgaW50
IGhhbGZMZWFkaW5nID0gKGxpbmVIZWlnaHQgLSB1c2VkRm9udHMtPmF0KGkpLT5hc2NlbnQoKSAt
IHVzZWRGb250cy0+YXQoaSktPmRlc2NlbnQoKSkgLyAyOworICAgICAgICAgICAgICAgICAgICBi
YXNlbGluZSA9IG1heChiYXNlbGluZSwgaGFsZkxlYWRpbmcgKyB1c2VkRm9udHMtPmF0KGkpLT5h
c2NlbnQoKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgICAgICBsaW5lSGVpZ2h0ID0gcGFyZW50TGluZUhlaWdodC52YWx1ZSgpOwogICAgICAg
ICAgICAgICAgIGJhc2VsaW5lID0gMDsKLSAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHVzZWRGb250cy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgICAgICBpbnQg
aGFsZkxlYWRpbmcgPSAobGluZUhlaWdodCAtIHVzZWRGb250c1tpXS0+YXNjZW50KCkgLSB1c2Vk
Rm9udHNbaV0tPmRlc2NlbnQoKSkgLyAyOwotICAgICAgICAgICAgICAgICAgICBiYXNlbGluZSA9
IG1heChiYXNlbGluZSwgaGFsZkxlYWRpbmcgKyB1c2VkRm9udHNbaV0tPmFzY2VudCgpKTsKKyAg
ICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHVzZWRGb250cy0+c2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IGhhbGZMZWFkaW5nID0gKGxpbmVIZWlnaHQg
LSB1c2VkRm9udHMtPmF0KGkpLT5hc2NlbnQoKSAtIHVzZWRGb250cy0+YXQoaSktPmRlc2NlbnQo
KSkgLyAyOworICAgICAgICAgICAgICAgICAgICBiYXNlbGluZSA9IG1heChiYXNlbGluZSwgaGFs
ZkxlYWRpbmcgKyB1c2VkRm9udHMtPmF0KGkpLT5hc2NlbnQoKSk7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewpAQCAtNTYyLDEwICs1NjQsMTIgQEAg
dm9pZCBJbmxpbmVGbG93Qm94Ojpjb21wdXRlVmVydGljYWxPdmVyZmxvdyhpbnQgbGluZVRvcCwg
aW50IGxpbmVCb3R0b20sIGJvb2wgc3QKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAogICAg
ICAgICAgICAgaW50IHN0cm9rZU92ZXJmbG93ID0gc3RhdGljX2Nhc3Q8aW50PihjZWlsZihydC0+
c3R5bGUoKS0+dGV4dFN0cm9rZVdpZHRoKCkgLyAyLjBmKSk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIGludCB0b3BHbHlwaE92ZXJmbG93ID0gLXN0cm9rZU92ZXJmbG93OwotICAgICAgICAg
ICAgaW50IGJvdHRvbUdseXBoT3ZlcmZsb3cgPSBzdHJva2VPdmVyZmxvdzsKLSAgICAgICAgICAg
IAorCisgICAgICAgICAgICBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93ID0gc3RhdGljX2Nh
c3Q8SW5saW5lVGV4dEJveCo+KGN1cnIpLT5nbHlwaE92ZXJmbG93KCk7CisKKyAgICAgICAgICAg
IGludCB0b3BHbHlwaE92ZXJmbG93ID0gLXN0cm9rZU92ZXJmbG93IC0gKGdseXBoT3ZlcmZsb3cg
PyBnbHlwaE92ZXJmbG93LT50b3AgOiAwKTsKKyAgICAgICAgICAgIGludCBib3R0b21HbHlwaE92
ZXJmbG93ID0gc3Ryb2tlT3ZlcmZsb3cgKyAoZ2x5cGhPdmVyZmxvdyA/IGdseXBoT3ZlcmZsb3ct
PmJvdHRvbSA6IDApOworCiAgICAgICAgICAgICBpbnQgY2hpbGRPdmVyZmxvd1RvcCA9IHRvcEds
eXBoT3ZlcmZsb3c7CiAgICAgICAgICAgICBpbnQgY2hpbGRPdmVyZmxvd0JvdHRvbSA9IGJvdHRv
bUdseXBoT3ZlcmZsb3c7CiAgICAgICAgICAgICBmb3IgKFNoYWRvd0RhdGEqIHNoYWRvdyA9IHJ0
LT5zdHlsZSgpLT50ZXh0U2hhZG93KCk7IHNoYWRvdzsgc2hhZG93ID0gc2hhZG93LT5uZXh0KSB7
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcCBiL1dlYkNv
cmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCmluZGV4IDlmMTdiMGMuLjNjMGQxM2IgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCisrKyBiL1dlYkNv
cmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCkBAIC0xMDI5LDMwICsxMDI5LDQ4IEBAIGJv
b2wgSW5saW5lVGV4dEJveDo6Y29udGFpbnNDYXJldE9mZnNldChpbnQgb2Zmc2V0KSBjb25zdAog
ICAgIHJldHVybiB0cnVlOwogfQogCi10eXBlZGVmIEhhc2hNYXA8SW5saW5lVGV4dEJveCosIFZl
Y3Rvcjxjb25zdCBTaW1wbGVGb250RGF0YSo+ID4gRmFsbGJhY2tGb250c01hcDsKLXN0YXRpYyBG
YWxsYmFja0ZvbnRzTWFwKiBnRmFsbGJhY2tGb250c01hcDsKLQogdm9pZCBJbmxpbmVUZXh0Qm94
OjpzZXRGYWxsYmFja0ZvbnRzKGNvbnN0IEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiYg
ZmFsbGJhY2tGb250cykKIHsKLSAgICBpZiAoIWdGYWxsYmFja0ZvbnRzTWFwKQotICAgICAgICBn
RmFsbGJhY2tGb250c01hcCA9IG5ldyBGYWxsYmFja0ZvbnRzTWFwOworICAgIGlmICghc19nbHlw
aE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcCkKKyAgICAgICAgc19nbHlwaE92ZXJmbG93QW5k
RmFsbGJhY2tGb250c01hcCA9IG5ldyBHbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcDsK
IAotICAgIEZhbGxiYWNrRm9udHNNYXA6Oml0ZXJhdG9yIGl0ID0gZ0ZhbGxiYWNrRm9udHNNYXAt
PnNldCh0aGlzLCBWZWN0b3I8Y29uc3QgU2ltcGxlRm9udERhdGEqPigpKS5maXJzdDsKLSAgICBB
U1NFUlQoaXQtPnNlY29uZC5pc0VtcHR5KCkpOwotICAgIGNvcHlUb1ZlY3RvcihmYWxsYmFja0Zv
bnRzLCBpdC0+c2Vjb25kKTsKKyAgICBHbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcDo6
aXRlcmF0b3IgaXQgPSBzX2dseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFwLT5hZGQodGhp
cywgbWFrZV9wYWlyKFZlY3Rvcjxjb25zdCBTaW1wbGVGb250RGF0YSo+KCksIEdseXBoT3ZlcmZs
b3coKSkpLmZpcnN0OworICAgIEFTU0VSVChpdC0+c2Vjb25kLmZpcnN0LmlzRW1wdHkoKSk7Cisg
ICAgY29weVRvVmVjdG9yKGZhbGxiYWNrRm9udHMsIGl0LT5zZWNvbmQuZmlyc3QpOwogfQogCi12
b2lkIElubGluZVRleHRCb3g6OnRha2VGYWxsYmFja0ZvbnRzKFZlY3Rvcjxjb25zdCBTaW1wbGVG
b250RGF0YSo+JiBmYWxsYmFja0ZvbnRzKQorVmVjdG9yPGNvbnN0IFNpbXBsZUZvbnREYXRhKj4q
IElubGluZVRleHRCb3g6OmZhbGxiYWNrRm9udHMoKSBjb25zdAogewotICAgIGlmICghZ0ZhbGxi
YWNrRm9udHNNYXApCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAoIXNfZ2x5cGhPdmVyZmxvd0Fu
ZEZhbGxiYWNrRm9udHNNYXApCisgICAgICAgIHJldHVybiAwOwogCi0gICAgRmFsbGJhY2tGb250
c01hcDo6aXRlcmF0b3IgaXQgPSBnRmFsbGJhY2tGb250c01hcC0+ZmluZCh0aGlzKTsKLSAgICBp
ZiAoaXQgPT0gZ0ZhbGxiYWNrRm9udHNNYXAtPmVuZCgpKQotICAgICAgICByZXR1cm47CisgICAg
R2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXA6Oml0ZXJhdG9yIGl0ID0gc19nbHlwaE92
ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcC0+ZmluZCh0aGlzKTsKKyAgICBpZiAoaXQgPT0gc19n
bHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcC0+ZW5kKCkpCisgICAgICAgIHJldHVybiAw
OworCisgICAgcmV0dXJuICZpdC0+c2Vjb25kLmZpcnN0OworfQorCitJbmxpbmVUZXh0Qm94OjpH
bHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcCogSW5saW5lVGV4dEJveDo6c19nbHlwaE92
ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcCA9IDA7CisKK3ZvaWQgSW5saW5lVGV4dEJveDo6c2V0
R2x5cGhPdmVyZmxvdyhjb25zdCBHbHlwaE92ZXJmbG93JiBnbHlwaE92ZXJmbG93KQoreworICAg
IGlmICghc19nbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcCkKKyAgICAgICAgc19nbHlw
aE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcCA9IG5ldyBHbHlwaE92ZXJmbG93QW5kRmFsbGJh
Y2tGb250c01hcDsKKworICAgIEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFwOjppdGVy
YXRvciBpdCA9IHNfZ2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXAtPmFkZCh0aGlzLCBt
YWtlX3BhaXIoVmVjdG9yPGNvbnN0IFNpbXBsZUZvbnREYXRhKj4oKSwgR2x5cGhPdmVyZmxvdygp
KSkuZmlyc3Q7CisgICAgaXQtPnNlY29uZC5zZWNvbmQgPSBnbHlwaE92ZXJmbG93OworfQorCitH
bHlwaE92ZXJmbG93KiBJbmxpbmVUZXh0Qm94OjpnbHlwaE92ZXJmbG93KCkgY29uc3QKK3sKKyAg
ICBpZiAoIXNfZ2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXApCisgICAgICAgIHJldHVy
biAwOworICAgIEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFwOjppdGVyYXRvciBpdCA9
IHNfZ2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXAtPmZpbmQodGhpcyk7CisgICAgaWYg
KGl0ID09IHNfZ2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXAtPmVuZCgpKQorICAgICAg
ICByZXR1cm4gMDsKIAotICAgIGZhbGxiYWNrRm9udHMuc3dhcChpdC0+c2Vjb25kKTsKLSAgICBn
RmFsbGJhY2tGb250c01hcC0+cmVtb3ZlKGl0KTsKKyAgICByZXR1cm4gJml0LT5zZWNvbmQuc2Vj
b25kOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3Jl
bmRlcmluZy9JbmxpbmVUZXh0Qm94LmggYi9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94
LmgKaW5kZXggOTZjYTRjMy4uN2E0NDMyZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcv
SW5saW5lVGV4dEJveC5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaApA
QCAtNjQsNyArNjQsMTYgQEAgcHVibGljOgogICAgIHZvaWQgb2Zmc2V0UnVuKGludCBkKSB7IG1f
c3RhcnQgKz0gZDsgfQogCiAgICAgdm9pZCBzZXRGYWxsYmFja0ZvbnRzKGNvbnN0IEhhc2hTZXQ8
Y29uc3QgU2ltcGxlRm9udERhdGEqPiYpOwotICAgIHZvaWQgdGFrZUZhbGxiYWNrRm9udHMoVmVj
dG9yPGNvbnN0IFNpbXBsZUZvbnREYXRhKj4mKTsKKyAgICBWZWN0b3I8Y29uc3QgU2ltcGxlRm9u
dERhdGEqPiogZmFsbGJhY2tGb250cygpIGNvbnN0OworCisgICAgdm9pZCBzZXRHbHlwaE92ZXJm
bG93KGNvbnN0IEdseXBoT3ZlcmZsb3cmKTsKKyAgICBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJm
bG93KCkgY29uc3Q7CisKKyAgICBzdGF0aWMgdm9pZCBjbGVhckdseXBoT3ZlcmZsb3dBbmRGYWxs
YmFja0ZvbnRNYXAoKQorICAgIHsKKyAgICAgICAgaWYgKHNfZ2x5cGhPdmVyZmxvd0FuZEZhbGxi
YWNrRm9udHNNYXApCisgICAgICAgICAgICBzX2dseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRz
TWFwLT5jbGVhcigpOworICAgIH0KIAogICAgIHVuc2lnbmVkIHNob3J0IHRydW5jYXRpb24oKSB7
IHJldHVybiBtX3RydW5jYXRpb247IH0KIApAQCAtMTI5LDYgKzEzOCw5IEBAIHByaXZhdGU6CiAg
ICAgdW5zaWduZWQgc2hvcnQgbV90cnVuY2F0aW9uOyAvLyBXaGVyZSB0byB0cnVuY2F0ZSB3aGVu
IHRleHQgb3ZlcmZsb3cgaXMgYXBwbGllZC4gIFdlIHVzZSBzcGVjaWFsIGNvbnN0YW50cyB0bwog
ICAgICAgICAgICAgICAgICAgICAgIC8vIGRlbm90ZSBubyB0cnVuY2F0aW9uICh0aGUgd2hvbGUg
cnVuIHBhaW50cykgYW5kIGZ1bGwgdHJ1bmNhdGlvbiAobm90aGluZyBwYWludHMgYXQgYWxsKS4K
IAorICAgIHR5cGVkZWYgSGFzaE1hcDxjb25zdCBJbmxpbmVUZXh0Qm94KiwgcGFpcjxWZWN0b3I8
Y29uc3QgU2ltcGxlRm9udERhdGEqPiwgR2x5cGhPdmVyZmxvdz4gPiBHbHlwaE92ZXJmbG93QW5k
RmFsbGJhY2tGb250c01hcDsKKyAgICBzdGF0aWMgR2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9u
dHNNYXAqIHNfZ2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXA7CisKIHByb3RlY3RlZDoK
ICAgICB2b2lkIHBhaW50Q29tcG9zaXRpb25CYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCosIGlu
dCB0eCwgaW50IHR5LCBSZW5kZXJTdHlsZSosIGNvbnN0IEZvbnQmLCBpbnQgc3RhcnRQb3MsIGlu
dCBlbmRQb3MpOwogICAgIHZvaWQgcGFpbnREb2N1bWVudE1hcmtlcnMoR3JhcGhpY3NDb250ZXh0
KiwgaW50IHR4LCBpbnQgdHksIFJlbmRlclN0eWxlKiwgY29uc3QgRm9udCYsIGJvb2wgYmFja2dy
b3VuZCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlv
dXQuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAppbmRl
eCA2ZTg5MDYwLi45ZWY2YTIzIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
bG9ja0xpbmVMYXlvdXQuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGlu
ZUxheW91dC5jcHAKQEAgLTM0Miw3ICszNDIsOCBAQCB2b2lkIFJlbmRlckJsb2NrOjpjb21wdXRl
SG9yaXpvbnRhbFBvc2l0aW9uc0ZvckxpbmUoUm9vdElubGluZUJveCogbGluZUJveCwgYm9vbAog
ICAgICAgICAgICAgICAgIG5lZWRzV29yZFNwYWNpbmcgPSAhaXNTcGFjZU9yTmV3bGluZShydC0+
Y2hhcmFjdGVycygpW3ItPm1fc3RvcCAtIDFdKSAmJiByLT5tX3N0b3AgPT0gbGVuZ3RoOyAgICAg
ICAgICAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9u
dERhdGEqPiBmYWxsYmFja0ZvbnRzOwotICAgICAgICAgICAgci0+bV9ib3gtPnNldFdpZHRoKHJ0
LT53aWR0aChyLT5tX3N0YXJ0LCByLT5tX3N0b3AgLSByLT5tX3N0YXJ0LCB0b3RXaWR0aCwgZmly
c3RMaW5lLCAmZmFsbGJhY2tGb250cykpOworICAgICAgICAgICAgR2x5cGhPdmVyZmxvdyBnbHlw
aE92ZXJmbG93OworICAgICAgICAgICAgci0+bV9ib3gtPnNldFdpZHRoKHJ0LT53aWR0aChyLT5t
X3N0YXJ0LCByLT5tX3N0b3AgLSByLT5tX3N0YXJ0LCB0b3RXaWR0aCwgZmlyc3RMaW5lLCAmZmFs
bGJhY2tGb250cywgJmdseXBoT3ZlcmZsb3cpKTsKICAgICAgICAgICAgIGlmICghZmFsbGJhY2tG
b250cy5pc0VtcHR5KCkKICNpZiBFTkFCTEUoU1ZHKQogICAgICAgICAgICAgICAgICAgICAmJiAh
aXNTVkdUZXh0KCkKQEAgLTM1MSw2ICszNTIsMTQgQEAgdm9pZCBSZW5kZXJCbG9jazo6Y29tcHV0
ZUhvcml6b250YWxQb3NpdGlvbnNGb3JMaW5lKFJvb3RJbmxpbmVCb3gqIGxpbmVCb3gsIGJvb2wK
ICAgICAgICAgICAgICAgICBBU1NFUlQoci0+bV9ib3gtPmlzVGV4dCgpKTsKICAgICAgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxJbmxpbmVUZXh0Qm94Kj4oci0+bV9ib3gpLT5zZXRGYWxsYmFja0Zv
bnRzKGZhbGxiYWNrRm9udHMpOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKChnbHlw
aE92ZXJmbG93LnRvcCB8fCBnbHlwaE92ZXJmbG93LmJvdHRvbSB8fCBnbHlwaE92ZXJmbG93Lmxl
ZnQgfHwgZ2x5cGhPdmVyZmxvdy5yaWdodCkKKyNpZiBFTkFCTEUoU1ZHKQorICAgICAgICAgICAg
ICAgICYmICFpc1NWR1RleHQoKQorI2VuZGlmCisgICAgICAgICAgICApIHsKKyAgICAgICAgICAg
ICAgICBBU1NFUlQoci0+bV9ib3gtPmlzVGV4dCgpKTsKKyAgICAgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxJbmxpbmVUZXh0Qm94Kj4oci0+bV9ib3gpLT5zZXRHbHlwaE92ZXJmbG93KGdseXBoT3Zl
cmZsb3cpOworICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKCFyLT5tX29iamVjdC0+
aXNSZW5kZXJJbmxpbmUoKSkgewogICAgICAgICAgICAgUmVuZGVyQm94KiByZW5kZXJCb3ggPSB0
b1JlbmRlckJveChyLT5tX29iamVjdCk7CiAgICAgICAgICAgICByZW5kZXJCb3gtPmNhbGNXaWR0
aCgpOwpAQCAtNzM0LDYgKzc0Myw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dElubGluZUNo
aWxkcmVuKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgaW50JiByZXBhaW50VG9wLCBpCiAKICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIE5vdyBwb3NpdGlvbiBvdXIgdGV4dCBydW5zIHZlcnRpY2Fs
bHkuCiAgICAgICAgICAgICAgICAgICAgICAgICBjb21wdXRlVmVydGljYWxQb3NpdGlvbnNGb3JM
aW5lKGxpbmVCb3gsIHJlc29sdmVyLmZpcnN0UnVuKCkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgSW5saW5lVGV4dEJveDo6Y2xlYXJHbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250TWFwKCk7
CiAKICNpZiBFTkFCTEUoU1ZHKQogICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3BlY2lhbCBT
VkcgdGV4dCBsYXlvdXQgY29kZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
T2JqZWN0LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKaW5kZXggNzAw
MGI3MC4uMjQ0OTIwNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCkBAIC0xNjUyLDYg
KzE2NTIsOSBAQCB2b2lkIFJlbmRlck9iamVjdDo6c3R5bGVXaWxsQ2hhbmdlKFN0eWxlRGlmZmVy
ZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogbmV3UwogICAgICAgICBzX2FmZmVjdHNQYXJl
bnRCbG9jayA9IGZhbHNlOwogCiAgICAgaWYgKHZpZXcoKS0+ZnJhbWVWaWV3KCkpIHsKKyAgICAg
ICAgLy8gRklYTUU6IEEgYmV0dGVyIHNvbHV0aW9uIHdvdWxkIGJlIHRvIG9ubHkgaW52YWxpZGF0
ZSB0aGUgZml4ZWQgcmVnaW9ucyB3aGVuIHNjcm9sbGluZy4gIEl0J3Mgb3ZlcmtpbGwgdG8KKyAg
ICAgICAgLy8gcHJldmVudCB0aGUgZW50aXJlIHZpZXcgZnJvbSBibGl0dGluZyBvbiBhIHNjcm9s
bC4KKwogICAgICAgICBib29sIHNob3VsZEJsaXRPbkZpeGVkQmFja2dyb3VuZEltYWdlID0gZmFs
c2U7CiAjaWYgRU5BQkxFKEZBU1RfTU9CSUxFX1NDUk9MTElORykKICAgICAgICAgLy8gT24gbG93
LXBvd2VyZWQvbW9iaWxlIGRldmljZXMsIHByZXZlbnRpbmcgYmxpdHRpbmcgb24gYSBzY3JvbGwg
Y2FuIGNhdXNlIG5vdGljZWFibGUgZGVsYXlzCkBAIC0xNjYxLDggKzE2NjQsMTEgQEAgdm9pZCBS
ZW5kZXJPYmplY3Q6OnN0eWxlV2lsbENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3Qg
UmVuZGVyU3R5bGUqIG5ld1MKICAgICAgICAgc2hvdWxkQmxpdE9uRml4ZWRCYWNrZ3JvdW5kSW1h
Z2UgPSB0cnVlOwogI2VuZGlmCiAKLSAgICAgICAgYm9vbCBuZXdTdHlsZVNsb3dTY3JvbGwgPSBu
ZXdTdHlsZSAmJiAhc2hvdWxkQmxpdE9uRml4ZWRCYWNrZ3JvdW5kSW1hZ2UgJiYgbmV3U3R5bGUt
Pmhhc0ZpeGVkQmFja2dyb3VuZEltYWdlKCk7Ci0gICAgICAgIGJvb2wgb2xkU3R5bGVTbG93U2Ny
b2xsID0gbV9zdHlsZSAmJiAhc2hvdWxkQmxpdE9uRml4ZWRCYWNrZ3JvdW5kSW1hZ2UgJiYgbV9z
dHlsZS0+aGFzRml4ZWRCYWNrZ3JvdW5kSW1hZ2UoKTsKKyAgICAgICAgYm9vbCBuZXdTdHlsZVNs
b3dTY3JvbGwgPSBuZXdTdHlsZSAmJiAobmV3U3R5bGUtPnBvc2l0aW9uKCkgPT0gRml4ZWRQb3Np
dGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwg
KCFzaG91bGRCbGl0T25GaXhlZEJhY2tncm91bmRJbWFnZSAmJiBuZXdTdHlsZS0+aGFzRml4ZWRC
YWNrZ3JvdW5kSW1hZ2UoKSkpOworICAgICAgICBib29sIG9sZFN0eWxlU2xvd1Njcm9sbCA9IG1f
c3R5bGUgJiYgKG1fc3R5bGUtPnBvc2l0aW9uKCkgPT0gRml4ZWRQb3NpdGlvbgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKCFzaG91bGRCbGl0T25G
aXhlZEJhY2tncm91bmRJbWFnZSAmJiBtX3N0eWxlLT5oYXNGaXhlZEJhY2tncm91bmRJbWFnZSgp
KSk7CisKICAgICAgICAgaWYgKG9sZFN0eWxlU2xvd1Njcm9sbCAhPSBuZXdTdHlsZVNsb3dTY3Jv
bGwpIHsKICAgICAgICAgICAgIGlmIChvbGRTdHlsZVNsb3dTY3JvbGwpCiAgICAgICAgICAgICAg
ICAgdmlldygpLT5mcmFtZVZpZXcoKS0+cmVtb3ZlU2xvd1JlcGFpbnRPYmplY3QoKTsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwIGIvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGV4dC5jcHAKaW5kZXggNmExYzQxZi4uNjk1Mjk4ZiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGV4dC5jcHAKQEAgLTk4LDcgKzk4LDcgQEAgUmVuZGVyVGV4dDo6UmVuZGVyVGV4dChOb2Rl
KiBub2RlLCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHN0cikKICAgICAgLCBtX2xpbmVzRGlydHko
ZmFsc2UpCiAgICAgICwgbV9jb250YWluc1JldmVyc2VkVGV4dChmYWxzZSkKICAgICAgLCBtX2lz
QWxsQVNDSUkobV90ZXh0LmNvbnRhaW5zT25seUFTQ0lJKCkpCi0gICAgICwgbV9rbm93bk5vdFRv
VXNlRmFsbGJhY2tGb250cyhmYWxzZSkKKyAgICAgLCBtX2tub3duVG9IYXZlTm9PdmVyZmxvd0Fu
ZE5vRmFsbGJhY2tGb250cyhmYWxzZSkKIHsKICAgICBBU1NFUlQobV90ZXh0KTsKIApAQCAtMTQz
LDcgKzE0Myw3IEBAIHZvaWQgUmVuZGVyVGV4dDo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJl
bmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsCiAgICAgLy8gbmVlZCB0byByZWxh
eW91dC4KICAgICBpZiAoZGlmZiA9PSBTdHlsZURpZmZlcmVuY2VMYXlvdXQpIHsKICAgICAgICAg
c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7Ci0gICAgICAgIG1fa25vd25Ob3RU
b1VzZUZhbGxiYWNrRm9udHMgPSBmYWxzZTsKKyAgICAgICAgbV9rbm93blRvSGF2ZU5vT3ZlcmZs
b3dBbmROb0ZhbGxiYWNrRm9udHMgPSBmYWxzZTsKICAgICB9CiAKICAgICBFVGV4dFRyYW5zZm9y
bSBvbGRUcmFuc2Zvcm0gPSBvbGRTdHlsZSA/IG9sZFN0eWxlLT50ZXh0VHJhbnNmb3JtKCkgOiBU
VE5PTkU7CkBAIC00NjUsNyArNDY1LDcgQEAgSW50UmVjdCBSZW5kZXJUZXh0Ojpsb2NhbENhcmV0
UmVjdChJbmxpbmVCb3gqIGlubGluZUJveCwgaW50IGNhcmV0T2Zmc2V0LCBpbnQqIGUKICAgICBy
ZXR1cm4gSW50UmVjdChsZWZ0LCB0b3AsIGNhcmV0V2lkdGgsIGhlaWdodCk7CiB9CiAKLUFMV0FZ
U19JTkxJTkUgaW50IFJlbmRlclRleHQ6OndpZHRoRnJvbUNhY2hlKGNvbnN0IEZvbnQmIGYsIGlu
dCBzdGFydCwgaW50IGxlbiwgaW50IHhQb3MsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEq
PiogZmFsbGJhY2tGb250cykgY29uc3QKK0FMV0FZU19JTkxJTkUgaW50IFJlbmRlclRleHQ6Ondp
ZHRoRnJvbUNhY2hlKGNvbnN0IEZvbnQmIGYsIGludCBzdGFydCwgaW50IGxlbiwgaW50IHhQb3Ms
IEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cywgR2x5cGhPdmVy
ZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKIHsKICAgICBpZiAoZi5pc0ZpeGVkUGl0Y2goKSAm
JiAhZi5pc1NtYWxsQ2FwcygpICYmIG1faXNBbGxBU0NJSSkgewogICAgICAgICBpbnQgbW9ub3Nw
YWNlQ2hhcmFjdGVyV2lkdGggPSBmLnNwYWNlV2lkdGgoKTsKQEAgLTQ5Nyw3ICs0OTcsNyBAQCBB
TFdBWVNfSU5MSU5FIGludCBSZW5kZXJUZXh0Ojp3aWR0aEZyb21DYWNoZShjb25zdCBGb250JiBm
LCBpbnQgc3RhcnQsIGludCBsZW4sCiAgICAgICAgIHJldHVybiB3OwogICAgIH0KIAotICAgIHJl
dHVybiBmLndpZHRoKFRleHRSdW4odGV4dCgpLT5jaGFyYWN0ZXJzKCkgKyBzdGFydCwgbGVuLCBh
bGxvd1RhYnMoKSwgeFBvcyksIGZhbGxiYWNrRm9udHMpOworICAgIHJldHVybiBmLndpZHRoKFRl
eHRSdW4odGV4dCgpLT5jaGFyYWN0ZXJzKCkgKyBzdGFydCwgbGVuLCBhbGxvd1RhYnMoKSwgeFBv
cyksIGZhbGxiYWNrRm9udHMsIGdseXBoT3ZlcmZsb3cpOwogfQogCiB2b2lkIFJlbmRlclRleHQ6
OnRyaW1tZWRQcmVmV2lkdGhzKGludCBsZWFkV2lkdGgsCkBAIC01NjgsNyArNTY4LDcgQEAgdm9p
ZCBSZW5kZXJUZXh0Ojp0cmltbWVkUHJlZldpZHRocyhpbnQgbGVhZFdpZHRoLAogICAgICAgICAg
ICAgICAgIGxpbmVsZW4rKzsKIAogICAgICAgICAgICAgaWYgKGxpbmVsZW4pIHsKLSAgICAgICAg
ICAgICAgICBlbmRNYXhXID0gd2lkdGhGcm9tQ2FjaGUoZiwgaSwgbGluZWxlbiwgbGVhZFdpZHRo
ICsgZW5kTWF4VywgMCk7CisgICAgICAgICAgICAgICAgZW5kTWF4VyA9IHdpZHRoRnJvbUNhY2hl
KGYsIGksIGxpbmVsZW4sIGxlYWRXaWR0aCArIGVuZE1heFcsIDAsIDApOwogICAgICAgICAgICAg
ICAgIGlmIChmaXJzdExpbmUpIHsKICAgICAgICAgICAgICAgICAgICAgZmlyc3RMaW5lID0gZmFs
c2U7CiAgICAgICAgICAgICAgICAgICAgIGxlYWRXaWR0aCA9IDA7CkBAIC02MTMsMTQgKzYxMywx
NSBAQCBpbnQgUmVuZGVyVGV4dDo6bWF4UHJlZldpZHRoKCkgY29uc3QKIHZvaWQgUmVuZGVyVGV4
dDo6Y2FsY1ByZWZXaWR0aHMoaW50IGxlYWRXaWR0aCkKIHsKICAgICBIYXNoU2V0PGNvbnN0IFNp
bXBsZUZvbnREYXRhKj4gZmFsbGJhY2tGb250czsKLSAgICBjYWxjUHJlZldpZHRocyhsZWFkV2lk
dGgsIGZhbGxiYWNrRm9udHMpOwotICAgIGlmIChmYWxsYmFja0ZvbnRzLmlzRW1wdHkoKSkKLSAg
ICAgICAgbV9rbm93bk5vdFRvVXNlRmFsbGJhY2tGb250cyA9IHRydWU7CisgICAgR2x5cGhPdmVy
ZmxvdyBnbHlwaE92ZXJmbG93OworICAgIGNhbGNQcmVmV2lkdGhzKGxlYWRXaWR0aCwgZmFsbGJh
Y2tGb250cywgZ2x5cGhPdmVyZmxvdyk7CisgICAgaWYgKGZhbGxiYWNrRm9udHMuaXNFbXB0eSgp
ICYmICFnbHlwaE92ZXJmbG93LmxlZnQgJiYgIWdseXBoT3ZlcmZsb3cucmlnaHQgJiYgIWdseXBo
T3ZlcmZsb3cudG9wICYmICFnbHlwaE92ZXJmbG93LmJvdHRvbSkKKyAgICAgICAgbV9rbm93blRv
SGF2ZU5vT3ZlcmZsb3dBbmROb0ZhbGxiYWNrRm9udHMgPSB0cnVlOwogfQogCi12b2lkIFJlbmRl
clRleHQ6OmNhbGNQcmVmV2lkdGhzKGludCBsZWFkV2lkdGgsIEhhc2hTZXQ8Y29uc3QgU2ltcGxl
Rm9udERhdGEqPiYgZmFsbGJhY2tGb250cykKK3ZvaWQgUmVuZGVyVGV4dDo6Y2FsY1ByZWZXaWR0
aHMoaW50IGxlYWRXaWR0aCwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+JiBmYWxsYmFj
a0ZvbnRzLCBHbHlwaE92ZXJmbG93JiBnbHlwaE92ZXJmbG93KQogewotICAgIEFTU0VSVChtX2hh
c1RhYiB8fCBwcmVmV2lkdGhzRGlydHkoKSB8fCAhbV9rbm93bk5vdFRvVXNlRmFsbGJhY2tGb250
cyk7CisgICAgQVNTRVJUKG1faGFzVGFiIHx8IHByZWZXaWR0aHNEaXJ0eSgpIHx8ICFtX2tub3du
VG9IYXZlTm9PdmVyZmxvd0FuZE5vRmFsbGJhY2tGb250cyk7CiAKICAgICBtX21pbldpZHRoID0g
MDsKICAgICBtX2JlZ2luTWluV2lkdGggPSAwOwpAQCAtNjUwLDYgKzY1MSw4IEBAIHZvaWQgUmVu
ZGVyVGV4dDo6Y2FsY1ByZWZXaWR0aHMoaW50IGxlYWRXaWR0aCwgSGFzaFNldDxjb25zdCBTaW1w
bGVGb250RGF0YSo+JiBmCiAgICAgaW50IG5leHRCcmVha2FibGUgPSAtMTsKICAgICBpbnQgbGFz
dFdvcmRCb3VuZGFyeSA9IDA7CiAKKyAgICBpbnQgZmlyc3RHbHlwaExlZnRPdmVyZmxvdyA9IC0x
OworCiAgICAgYm9vbCBicmVha05CU1AgPSBzdHlsZSgpLT5hdXRvV3JhcCgpICYmIHN0eWxlKCkt
Pm5ic3BNb2RlKCkgPT0gU1BBQ0U7CiAgICAgYm9vbCBicmVha0FsbCA9IChzdHlsZSgpLT53b3Jk
QnJlYWsoKSA9PSBCcmVha0FsbFdvcmRCcmVhayB8fCBzdHlsZSgpLT53b3JkQnJlYWsoKSA9PSBC
cmVha1dvcmRCcmVhaykgJiYgc3R5bGUoKS0+YXV0b1dyYXAoKTsKIApAQCAtNjkyLDcgKzY5NSw5
IEBAIHZvaWQgUmVuZGVyVGV4dDo6Y2FsY1ByZWZXaWR0aHMoaW50IGxlYWRXaWR0aCwgSGFzaFNl
dDxjb25zdCBTaW1wbGVGb250RGF0YSo+JiBmCiAgICAgICAgICAgICBsYXN0V29yZEJvdW5kYXJ5
Kys7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfSBlbHNlIGlmIChjID09IHNvZnRI
eXBoZW4pIHsKLSAgICAgICAgICAgIGN1cnJNYXhXaWR0aCArPSB3aWR0aEZyb21DYWNoZShmLCBs
YXN0V29yZEJvdW5kYXJ5LCBpIC0gbGFzdFdvcmRCb3VuZGFyeSwgbGVhZFdpZHRoICsgY3Vyck1h
eFdpZHRoLCAmZmFsbGJhY2tGb250cyk7CisgICAgICAgICAgICBjdXJyTWF4V2lkdGggKz0gd2lk
dGhGcm9tQ2FjaGUoZiwgbGFzdFdvcmRCb3VuZGFyeSwgaSAtIGxhc3RXb3JkQm91bmRhcnksIGxl
YWRXaWR0aCArIGN1cnJNYXhXaWR0aCwgJmZhbGxiYWNrRm9udHMsICZnbHlwaE92ZXJmbG93KTsK
KyAgICAgICAgICAgIGlmIChmaXJzdEdseXBoTGVmdE92ZXJmbG93IDwgMCkKKyAgICAgICAgICAg
ICAgICBmaXJzdEdseXBoTGVmdE92ZXJmbG93ID0gZ2x5cGhPdmVyZmxvdy5sZWZ0OwogICAgICAg
ICAgICAgbGFzdFdvcmRCb3VuZGFyeSA9IGkgKyAxOwogICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgIH0KQEAgLTcxNSwxMyArNzIwLDE1IEBAIHZvaWQgUmVuZGVyVGV4dDo6Y2FsY1ByZWZX
aWR0aHMoaW50IGxlYWRXaWR0aCwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+JiBmCiAK
ICAgICAgICAgaW50IHdvcmRMZW4gPSBqIC0gaTsKICAgICAgICAgaWYgKHdvcmRMZW4pIHsKLSAg
ICAgICAgICAgIGludCB3ID0gd2lkdGhGcm9tQ2FjaGUoZiwgaSwgd29yZExlbiwgbGVhZFdpZHRo
ICsgY3Vyck1heFdpZHRoLCAmZmFsbGJhY2tGb250cyk7CisgICAgICAgICAgICBpbnQgdyA9IHdp
ZHRoRnJvbUNhY2hlKGYsIGksIHdvcmRMZW4sIGxlYWRXaWR0aCArIGN1cnJNYXhXaWR0aCwgJmZh
bGxiYWNrRm9udHMsICZnbHlwaE92ZXJmbG93KTsKKyAgICAgICAgICAgIGlmIChmaXJzdEdseXBo
TGVmdE92ZXJmbG93IDwgMCkKKyAgICAgICAgICAgICAgICBmaXJzdEdseXBoTGVmdE92ZXJmbG93
ID0gZ2x5cGhPdmVyZmxvdy5sZWZ0OwogICAgICAgICAgICAgY3Vyck1pbldpZHRoICs9IHc7CiAg
ICAgICAgICAgICBpZiAoYmV0d2VlbldvcmRzKSB7CiAgICAgICAgICAgICAgICAgaWYgKGxhc3RX
b3JkQm91bmRhcnkgPT0gaSkKICAgICAgICAgICAgICAgICAgICAgY3Vyck1heFdpZHRoICs9IHc7
CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBjdXJyTWF4V2lkdGgg
Kz0gd2lkdGhGcm9tQ2FjaGUoZiwgbGFzdFdvcmRCb3VuZGFyeSwgaiAtIGxhc3RXb3JkQm91bmRh
cnksIGxlYWRXaWR0aCArIGN1cnJNYXhXaWR0aCwgJmZhbGxiYWNrRm9udHMpOworICAgICAgICAg
ICAgICAgICAgICBjdXJyTWF4V2lkdGggKz0gd2lkdGhGcm9tQ2FjaGUoZiwgbGFzdFdvcmRCb3Vu
ZGFyeSwgaiAtIGxhc3RXb3JkQm91bmRhcnksIGxlYWRXaWR0aCArIGN1cnJNYXhXaWR0aCwgJmZh
bGxiYWNrRm9udHMsICZnbHlwaE92ZXJmbG93KTsKICAgICAgICAgICAgICAgICBsYXN0V29yZEJv
dW5kYXJ5ID0gajsKICAgICAgICAgICAgIH0KIApAQCAtNzc0LDYgKzc4MSw3IEBAIHZvaWQgUmVu
ZGVyVGV4dDo6Y2FsY1ByZWZXaWR0aHMoaW50IGxlYWRXaWR0aCwgSGFzaFNldDxjb25zdCBTaW1w
bGVGb250RGF0YSo+JiBmCiAgICAgICAgICAgICAgICAgY3Vyck1heFdpZHRoID0gMDsKICAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgY3Vyck1heFdpZHRoICs9IGYud2lkdGgo
VGV4dFJ1bih0eHQgKyBpLCAxLCBhbGxvd1RhYnMoKSwgbGVhZFdpZHRoICsgY3Vyck1heFdpZHRo
KSk7CisgICAgICAgICAgICAgICAgZ2x5cGhPdmVyZmxvdy5yaWdodCA9IDA7CiAgICAgICAgICAg
ICAgICAgbmVlZHNXb3JkU3BhY2luZyA9IGlzU3BhY2UgJiYgIXByZXZpb3VzQ2hhcmFjdGVySXNT
cGFjZSAmJiBpID09IGxlbiAtIDE7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBBU1NFUlQo
bGFzdFdvcmRCb3VuZGFyeSA9PSBpKTsKQEAgLTc4MSw2ICs3ODksOSBAQCB2b2lkIFJlbmRlclRl
eHQ6OmNhbGNQcmVmV2lkdGhzKGludCBsZWFkV2lkdGgsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9u
dERhdGEqPiYgZgogICAgICAgICB9CiAgICAgfQogCisgICAgaWYgKGZpcnN0R2x5cGhMZWZ0T3Zl
cmZsb3cgPiAwKQorICAgICAgICBnbHlwaE92ZXJmbG93LmxlZnQgPSBmaXJzdEdseXBoTGVmdE92
ZXJmbG93OworCiAgICAgaWYgKChuZWVkc1dvcmRTcGFjaW5nICYmIGxlbiA+IDEpIHx8IChpZ25v
cmluZ1NwYWNlcyAmJiAhZmlyc3RXb3JkKSkKICAgICAgICAgY3Vyck1heFdpZHRoICs9IHdvcmRT
cGFjaW5nOwogCkBAIC0xMDU2LDcgKzEwNjcsNyBAQCB2b2lkIFJlbmRlclRleHQ6OnNldFRleHQo
UGFzc1JlZlB0cjxTdHJpbmdJbXBsPiB0ZXh0LCBib29sIGZvcmNlKQogCiAgICAgc2V0VGV4dElu
dGVybmFsKHRleHQpOwogICAgIHNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwot
ICAgIG1fa25vd25Ob3RUb1VzZUZhbGxiYWNrRm9udHMgPSBmYWxzZTsKKyAgICBtX2tub3duVG9I
YXZlTm9PdmVyZmxvd0FuZE5vRmFsbGJhY2tGb250cyA9IGZhbHNlOwogICAgIAogICAgIEFYT2Jq
ZWN0Q2FjaGUqIGF4T2JqZWN0Q2FjaGUgPSBkb2N1bWVudCgpLT5heE9iamVjdENhY2hlKCk7CiAg
ICAgaWYgKGF4T2JqZWN0Q2FjaGUtPmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpCkBAIC0xMTIyLDcg
KzExMzMsNyBAQCB2b2lkIFJlbmRlclRleHQ6OnBvc2l0aW9uTGluZUJveChJbmxpbmVCb3gqIGJv
eCkKICAgICBtX2NvbnRhaW5zUmV2ZXJzZWRUZXh0IHw9IHMtPmRpcmVjdGlvbigpID09IFJUTDsK
IH0KIAotdW5zaWduZWQgUmVuZGVyVGV4dDo6d2lkdGgodW5zaWduZWQgZnJvbSwgdW5zaWduZWQg
bGVuLCBpbnQgeFBvcywgYm9vbCBmaXJzdExpbmUsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERh
dGEqPiogZmFsbGJhY2tGb250cykgY29uc3QKK3Vuc2lnbmVkIFJlbmRlclRleHQ6OndpZHRoKHVu
c2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbiwgaW50IHhQb3MsIGJvb2wgZmlyc3RMaW5lLCBIYXNo
U2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cq
IGdseXBoT3ZlcmZsb3cpIGNvbnN0CiB7CiAgICAgaWYgKGZyb20gPj0gdGV4dExlbmd0aCgpKQog
ICAgICAgICByZXR1cm4gMDsKQEAgLTExMzAsMTAgKzExNDEsMTAgQEAgdW5zaWduZWQgUmVuZGVy
VGV4dDo6d2lkdGgodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBpbnQgeFBvcywgYm9vbCBm
aXJzdExpbmUKICAgICBpZiAoZnJvbSArIGxlbiA+IHRleHRMZW5ndGgoKSkKICAgICAgICAgbGVu
ID0gdGV4dExlbmd0aCgpIC0gZnJvbTsKIAotICAgIHJldHVybiB3aWR0aChmcm9tLCBsZW4sIHN0
eWxlKGZpcnN0TGluZSktPmZvbnQoKSwgeFBvcywgZmFsbGJhY2tGb250cyk7CisgICAgcmV0dXJu
IHdpZHRoKGZyb20sIGxlbiwgc3R5bGUoZmlyc3RMaW5lKS0+Zm9udCgpLCB4UG9zLCBmYWxsYmFj
a0ZvbnRzLCBnbHlwaE92ZXJmbG93KTsKIH0KIAotdW5zaWduZWQgUmVuZGVyVGV4dDo6d2lkdGgo
dW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBjb25zdCBGb250JiBmLCBpbnQgeFBvcywgSGFz
aFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzKSBjb25zdAordW5zaWdu
ZWQgUmVuZGVyVGV4dDo6d2lkdGgodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBjb25zdCBG
b250JiBmLCBpbnQgeFBvcywgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFj
a0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93KSBjb25zdAogewogICAgIEFTU0VS
VChmcm9tICsgbGVuIDw9IHRleHRMZW5ndGgoKSk7CiAgICAgaWYgKCFjaGFyYWN0ZXJzKCkpCkBA
IC0xMTQzLDE4ICsxMTU0LDE5IEBAIHVuc2lnbmVkIFJlbmRlclRleHQ6OndpZHRoKHVuc2lnbmVk
IGZyb20sIHVuc2lnbmVkIGxlbiwgY29uc3QgRm9udCYgZiwgaW50IHhQb3MsCiAgICAgaWYgKCZm
ID09ICZzdHlsZSgpLT5mb250KCkpIHsKICAgICAgICAgaWYgKCFzdHlsZSgpLT5wcmVzZXJ2ZU5l
d2xpbmUoKSAmJiAhZnJvbSAmJiBsZW4gPT0gdGV4dExlbmd0aCgpKSB7CiAgICAgICAgICAgICBp
ZiAoZmFsbGJhY2tGb250cykgewotICAgICAgICAgICAgICAgIGlmIChwcmVmV2lkdGhzRGlydHko
KSB8fCAhbV9rbm93bk5vdFRvVXNlRmFsbGJhY2tGb250cykgewotICAgICAgICAgICAgICAgICAg
ICBjb25zdF9jYXN0PFJlbmRlclRleHQqPih0aGlzKS0+Y2FsY1ByZWZXaWR0aHMoMCwgKmZhbGxi
YWNrRm9udHMpOwotICAgICAgICAgICAgICAgICAgICBpZiAoZmFsbGJhY2tGb250cy0+aXNFbXB0
eSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgbV9rbm93bk5vdFRvVXNlRmFsbGJhY2tGb250
cyA9IHRydWU7CisgICAgICAgICAgICAgICAgQVNTRVJUKGdseXBoT3ZlcmZsb3cpOworICAgICAg
ICAgICAgICAgIGlmIChwcmVmV2lkdGhzRGlydHkoKSB8fCAhbV9rbm93blRvSGF2ZU5vT3ZlcmZs
b3dBbmROb0ZhbGxiYWNrRm9udHMpIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3RfY2FzdDxS
ZW5kZXJUZXh0Kj4odGhpcyktPmNhbGNQcmVmV2lkdGhzKDAsICpmYWxsYmFja0ZvbnRzLCAqZ2x5
cGhPdmVyZmxvdyk7CisgICAgICAgICAgICAgICAgICAgIGlmIChmYWxsYmFja0ZvbnRzLT5pc0Vt
cHR5KCkgJiYgIWdseXBoT3ZlcmZsb3ctPmxlZnQgJiYgIWdseXBoT3ZlcmZsb3ctPnJpZ2h0ICYm
ICFnbHlwaE92ZXJmbG93LT50b3AgJiYgIWdseXBoT3ZlcmZsb3ctPmJvdHRvbSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG1fa25vd25Ub0hhdmVOb092ZXJmbG93QW5kTm9GYWxsYmFja0ZvbnRz
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgdyA9IG1fbWF4V2lk
dGg7CiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICB3ID0gbWF4UHJlZldpZHRo
KCk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgdyA9IHdpZHRoRnJvbUNhY2hlKGYsIGZy
b20sIGxlbiwgeFBvcywgZmFsbGJhY2tGb250cyk7CisgICAgICAgICAgICB3ID0gd2lkdGhGcm9t
Q2FjaGUoZiwgZnJvbSwgbGVuLCB4UG9zLCBmYWxsYmFja0ZvbnRzLCBnbHlwaE92ZXJmbG93KTsK
ICAgICB9IGVsc2UKLSAgICAgICAgdyA9IGYud2lkdGgoVGV4dFJ1bih0ZXh0KCktPmNoYXJhY3Rl
cnMoKSArIGZyb20sIGxlbiwgYWxsb3dUYWJzKCksIHhQb3MpLCBmYWxsYmFja0ZvbnRzKTsKKyAg
ICAgICAgdyA9IGYud2lkdGgoVGV4dFJ1bih0ZXh0KCktPmNoYXJhY3RlcnMoKSArIGZyb20sIGxl
biwgYWxsb3dUYWJzKCksIHhQb3MpLCBmYWxsYmFja0ZvbnRzLCBnbHlwaE92ZXJmbG93KTsKIAog
ICAgIHJldHVybiB3OwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4
dC5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCmluZGV4IGU5ZWQxNDcuLjliMTQ2
N2QgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAorKysgYi9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgKQEAgLTY3LDggKzY3LDggQEAgcHVibGljOgogICAg
IHVuc2lnbmVkIHRleHRMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX3RleHQubGVuZ3RoKCk7IH0g
Ly8gbm9uIHZpcnR1YWwgaW1wbGVtZW50YXRpb24gb2YgbGVuZ3RoKCkKICAgICB2b2lkIHBvc2l0
aW9uTGluZUJveChJbmxpbmVCb3gqKTsKIAotICAgIHZpcnR1YWwgdW5zaWduZWQgd2lkdGgodW5z
aWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBjb25zdCBGb250JiwgaW50IHhQb3MsIEhhc2hTZXQ8
Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDApIGNvbnN0OwotICAgIHZp
cnR1YWwgdW5zaWduZWQgd2lkdGgodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBpbnQgeFBv
cywgYm9vbCBmaXJzdExpbmUgPSBmYWxzZSwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+
KiBmYWxsYmFja0ZvbnRzID0gMCkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNpZ25lZCB3aWR0aCh1
bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIGNvbnN0IEZvbnQmLCBpbnQgeFBvcywgSGFzaFNl
dDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwgR2x5cGhPdmVyZmxv
dyogPSAwKSBjb25zdDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIHdpZHRoKHVuc2lnbmVkIGZyb20s
IHVuc2lnbmVkIGxlbiwgaW50IHhQb3MsIGJvb2wgZmlyc3RMaW5lID0gZmFsc2UsIEhhc2hTZXQ8
Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDAsIEdseXBoT3ZlcmZsb3cq
ID0gMCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIGludCBsaW5lSGVpZ2h0KGJvb2wgZmlyc3RMaW5l
LCBib29sIGlzUm9vdExpbmVCb3ggPSBmYWxzZSkgY29uc3Q7CiAKQEAgLTEzMyw3ICsxMzMsNyBA
QCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBJbmxpbmVUZXh0Qm94KiBjcmVhdGVUZXh0Qm94KCk7
IC8vIFN1YmNsYXNzZWQgYnkgU1ZHLgogCiBwcml2YXRlOgotICAgIHZvaWQgY2FsY1ByZWZXaWR0
aHMoaW50IGxlYWRXaWR0aCwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+JiBmYWxsYmFj
a0ZvbnRzKTsKKyAgICB2b2lkIGNhbGNQcmVmV2lkdGhzKGludCBsZWFkV2lkdGgsIEhhc2hTZXQ8
Y29uc3QgU2ltcGxlRm9udERhdGEqPiYgZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyYpOwog
CiAgICAgLy8gTWFrZSBsZW5ndGgoKSBwcml2YXRlIHNvIHRoYXQgY2FsbGVycyB0aGF0IGhhdmUg
YSBSZW5kZXJUZXh0KgogICAgIC8vIHdpbGwgdXNlIHRoZSBtb3JlIGVmZmljaWVudCB0ZXh0TGVu
Z3RoKCkgaW5zdGVhZCwgd2hpbGUKQEAgLTE0Niw3ICsxNDYsNyBAQCBwcml2YXRlOgogCiAgICAg
dm9pZCBkZWxldGVUZXh0Qm94ZXMoKTsKICAgICBib29sIGNvbnRhaW5zT25seVdoaXRlc3BhY2Uo
dW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuKSBjb25zdDsKLSAgICBpbnQgd2lkdGhGcm9tQ2Fj
aGUoY29uc3QgRm9udCYsIGludCBzdGFydCwgaW50IGxlbiwgaW50IHhQb3MsIEhhc2hTZXQ8Y29u
c3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cykgY29uc3Q7CisgICAgaW50IHdpZHRo
RnJvbUNhY2hlKGNvbnN0IEZvbnQmLCBpbnQgc3RhcnQsIGludCBsZW4sIGludCB4UG9zLCBIYXNo
U2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cq
KSBjb25zdDsKICAgICBib29sIGlzQWxsQVNDSUkoKSBjb25zdCB7IHJldHVybiBtX2lzQWxsQVND
SUk7IH0KIAogICAgIGludCBtX21pbldpZHRoOyAvLyBoZXJlIHRvIG1pbmltaXplIHBhZGRpbmcg
aW4gNjQtYml0LgpAQCAtMTcxLDcgKzE3MSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBvciByZW1vdmVkKS4KICAgICBib29sIG1fY29udGFpbnNSZXZlcnNlZFRl
eHQgOiAxOwogICAgIGJvb2wgbV9pc0FsbEFTQ0lJIDogMTsKLSAgICBtdXRhYmxlIGJvb2wgbV9r
bm93bk5vdFRvVXNlRmFsbGJhY2tGb250cyA6IDE7CisgICAgbXV0YWJsZSBib29sIG1fa25vd25U
b0hhdmVOb092ZXJmbG93QW5kTm9GYWxsYmFja0ZvbnRzIDogMTsKIH07CiAKIGlubGluZSBSZW5k
ZXJUZXh0KiB0b1JlbmRlclRleHQoUmVuZGVyT2JqZWN0KiBvYmplY3QpCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3N0b3JhZ2UvSURCQ2FsbGJhY2tzLmggYi9XZWJDb3JlL3N0b3JhZ2UvSURCQ2FsbGJh
Y2tzLmgKaW5kZXggN2IwNmFjMy4uYTdkMzUyZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdl
L0lEQkNhbGxiYWNrcy5oCisrKyBiL1dlYkNvcmUvc3RvcmFnZS9JREJDYWxsYmFja3MuaApAQCAt
MjksNiArMjksNyBAQAogI2lmbmRlZiBJREJDYWxsYmFja3NfaAogI2RlZmluZSBJREJDYWxsYmFj
a3NfaAogCisjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCkBAIC0zNyw4ICszOCwxMCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBJREJEYXRhYmFzZUVycm9yOwogCiB0ZW1wbGF0
ZSA8dHlwZW5hbWUgUmVzdWx0VHlwZT4KLWNsYXNzIElEQkNhbGxiYWNrcyA6IHB1YmxpYyBSZWZD
b3VudGVkPElEQkNhbGxiYWNrczxSZXN1bHRUeXBlPiA+IHsKK2NsYXNzIElEQkNhbGxiYWNrcyA6
IHB1YmxpYyBSZWZDb3VudGVkPElEQkNhbGxiYWNrczxSZXN1bHRUeXBlPiA+LCBwdWJsaWMgQWN0
aXZlRE9NT2JqZWN0IHsKIHB1YmxpYzoKKyAgICBJREJDYWxsYmFja3MoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgdm9pZCogdXBjYXN0UG9pbnRlcikKKyAg
ICAgICAgOiBBY3RpdmVET01PYmplY3Qoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgdXBjYXN0UG9p
bnRlcikgeyB9CiAgICAgdmlydHVhbCB+SURCQ2FsbGJhY2tzKCkgeyB9CiAKICAgICB2aXJ0dWFs
IHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQdHI8UmVzdWx0VHlwZT4pID0gMDsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXQuY3BwIGIvV2ViQ29yZS93ZWJzb2NrZXRzL1dl
YlNvY2tldC5jcHAKaW5kZXggMDM5YzBjYy4uYTgyMGMyYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS93
ZWJzb2NrZXRzL1dlYlNvY2tldC5jcHAKKysrIGIvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tl
dC5jcHAKQEAgLTExOSwzMiArMTE5LDMyIEBAIHZvaWQgV2ViU29ja2V0Ojpjb25uZWN0KGNvbnN0
IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbCwgRXhjZXB0aW9uQ29kZSYKICAgICBt
X3Byb3RvY29sID0gcHJvdG9jb2w7CiAKICAgICBpZiAoIW1fdXJsLmlzVmFsaWQoKSkgewotICAg
ICAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmFkZE1lc3NhZ2UoQ29uc29sZURlc3RpbmF0
aW9uLCBKU01lc3NhZ2VTb3VyY2UsIExvZ01lc3NhZ2VUeXBlLCBFcnJvck1lc3NhZ2VMZXZlbCwg
IkludmFsaWQgdXJsIGZvciBXZWJTb2NrZXQgIiArIHVybC5zdHJpbmcoKSwgMCwgc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpLT5zZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpKTsKKyAgICAgICAg
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5hZGRNZXNzYWdlKEpTTWVzc2FnZVNvdXJjZSwgTG9n
TWVzc2FnZVR5cGUsIEVycm9yTWVzc2FnZUxldmVsLCAiSW52YWxpZCB1cmwgZm9yIFdlYlNvY2tl
dCAiICsgdXJsLnN0cmluZygpLCAwLCBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnNlY3VyaXR5
T3JpZ2luKCktPnRvU3RyaW5nKCkpOwogICAgICAgICBtX3N0YXRlID0gQ0xPU0VEOwogICAgICAg
ICBlYyA9IFNZTlRBWF9FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoIW1f
dXJsLnByb3RvY29sSXMoIndzIikgJiYgIW1fdXJsLnByb3RvY29sSXMoIndzcyIpKSB7Ci0gICAg
ICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+YWRkTWVzc2FnZShDb25zb2xlRGVzdGluYXRp
b24sIEpTTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIEVycm9yTWVzc2FnZUxldmVsLCAi
V3JvbmcgdXJsIHNjaGVtZSBmb3IgV2ViU29ja2V0ICIgKyB1cmwuc3RyaW5nKCksIDAsIHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKSk7CisgICAg
ICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+YWRkTWVzc2FnZShKU01lc3NhZ2VTb3VyY2Us
IExvZ01lc3NhZ2VUeXBlLCBFcnJvck1lc3NhZ2VMZXZlbCwgIldyb25nIHVybCBzY2hlbWUgZm9y
IFdlYlNvY2tldCAiICsgdXJsLnN0cmluZygpLCAwLCBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkt
PnNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCkpOwogICAgICAgICBtX3N0YXRlID0gQ0xPU0VE
OwogICAgICAgICBlYyA9IFNZTlRBWF9FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
aWYgKG1fdXJsLmhhc0ZyYWdtZW50SWRlbnRpZmllcigpKSB7Ci0gICAgICAgIHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKS0+YWRkTWVzc2FnZShDb25zb2xlRGVzdGluYXRpb24sIEpTTWVzc2FnZVNv
dXJjZSwgTG9nTWVzc2FnZVR5cGUsIEVycm9yTWVzc2FnZUxldmVsLCAiVVJMIGhhcyBmcmFnbWVu
dCBjb21wb25lbnQgIiArIHVybC5zdHJpbmcoKSwgMCwgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
LT5zZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpKTsKKyAgICAgICAgc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpLT5hZGRNZXNzYWdlKEpTTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIEVy
cm9yTWVzc2FnZUxldmVsLCAiVVJMIGhhcyBmcmFnbWVudCBjb21wb25lbnQgIiArIHVybC5zdHJp
bmcoKSwgMCwgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5zZWN1cml0eU9yaWdpbigpLT50b1N0
cmluZygpKTsKICAgICAgICAgbV9zdGF0ZSA9IENMT1NFRDsKICAgICAgICAgZWMgPSBTWU5UQVhf
RVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmICghaXNWYWxpZFByb3RvY29sU3Ry
aW5nKG1fcHJvdG9jb2wpKSB7Ci0gICAgICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+YWRk
TWVzc2FnZShDb25zb2xlRGVzdGluYXRpb24sIEpTTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5
cGUsIEVycm9yTWVzc2FnZUxldmVsLCAiV3JvbmcgcHJvdG9jb2wgZm9yIFdlYlNvY2tldCAnIiAr
IGVuY29kZVByb3RvY29sU3RyaW5nKG1fcHJvdG9jb2wpICsgIiciLCAwLCBzY3JpcHRFeGVjdXRp
b25Db250ZXh0KCktPnNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCkpOworICAgICAgICBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCktPmFkZE1lc3NhZ2UoSlNNZXNzYWdlU291cmNlLCBMb2dNZXNz
YWdlVHlwZSwgRXJyb3JNZXNzYWdlTGV2ZWwsICJXcm9uZyBwcm90b2NvbCBmb3IgV2ViU29ja2V0
ICciICsgZW5jb2RlUHJvdG9jb2xTdHJpbmcobV9wcm90b2NvbCkgKyAiJyIsIDAsIHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKSk7CiAgICAgICAg
IG1fc3RhdGUgPSBDTE9TRUQ7CiAgICAgICAgIGVjID0gU1lOVEFYX0VSUjsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICBpZiAoIXBvcnRBbGxvd2VkKHVybCkpIHsKLSAgICAgICAgc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpLT5hZGRNZXNzYWdlKENvbnNvbGVEZXN0aW5hdGlvbiwgSlNNZXNz
YWdlU291cmNlLCBMb2dNZXNzYWdlVHlwZSwgRXJyb3JNZXNzYWdlTGV2ZWwsIFN0cmluZzo6Zm9y
bWF0KCJXZWJTb2NrZXQgcG9ydCAlZCBibG9ja2VkIiwgdXJsLnBvcnQoKSksIDAsIHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKSk7CisgICAgICAg
IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+YWRkTWVzc2FnZShKU01lc3NhZ2VTb3VyY2UsIExv
Z01lc3NhZ2VUeXBlLCBFcnJvck1lc3NhZ2VMZXZlbCwgU3RyaW5nOjpmb3JtYXQoIldlYlNvY2tl
dCBwb3J0ICVkIGJsb2NrZWQiLCB1cmwucG9ydCgpKSwgMCwgc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpLT5zZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpKTsKICAgICAgICAgbV9zdGF0ZSA9IENM
T1NFRDsKICAgICAgICAgZWMgPSBTRUNVUklUWV9FUlI7CiAgICAgICAgIHJldHVybjsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXRDaGFubmVsLmNwcCBiL1dlYkNvcmUv
d2Vic29ja2V0cy9XZWJTb2NrZXRDaGFubmVsLmNwcAppbmRleCBhNGVhNTFiLi4wODgwZTQ1IDEw
MDY0NAotLS0gYS9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbC5jcHAKKysrIGIv
V2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5uZWwuY3BwCkBAIC0xMTgsNyArMTE4LDcg
QEAgdm9pZCBXZWJTb2NrZXRDaGFubmVsOjpkaWRPcGVuKFNvY2tldFN0cmVhbUhhbmRsZSogaGFu
ZGxlKQogICAgICAgICByZXR1cm47CiAgICAgY29uc3QgQ1N0cmluZyYgaGFuZHNoYWtlTWVzc2Fn
ZSA9IG1faGFuZHNoYWtlLmNsaWVudEhhbmRzaGFrZU1lc3NhZ2UoKTsKICAgICBpZiAoIWhhbmRs
ZS0+c2VuZChoYW5kc2hha2VNZXNzYWdlLmRhdGEoKSwgaGFuZHNoYWtlTWVzc2FnZS5sZW5ndGgo
KSkpIHsKLSAgICAgICAgbV9jb250ZXh0LT5hZGRNZXNzYWdlKENvbnNvbGVEZXN0aW5hdGlvbiwg
SlNNZXNzYWdlU291cmNlLCBMb2dNZXNzYWdlVHlwZSwgRXJyb3JNZXNzYWdlTGV2ZWwsICJFcnJv
ciBzZW5kaW5nIGhhbmRzaGFrZSBtZXNzYWdlLiIsIDAsIG1faGFuZHNoYWtlLmNsaWVudE9yaWdp
bigpKTsKKyAgICAgICAgbV9jb250ZXh0LT5hZGRNZXNzYWdlKEpTTWVzc2FnZVNvdXJjZSwgTG9n
TWVzc2FnZVR5cGUsIEVycm9yTWVzc2FnZUxldmVsLCAiRXJyb3Igc2VuZGluZyBoYW5kc2hha2Ug
bWVzc2FnZS4iLCAwLCBtX2hhbmRzaGFrZS5jbGllbnRPcmlnaW4oKSk7CiAgICAgICAgIGhhbmRs
ZS0+Y2xvc2UoKTsKICAgICB9CiB9CkBAIC0yNjUsNyArMjY1LDcgQEAgYm9vbCBXZWJTb2NrZXRD
aGFubmVsOjphcHBlbmRUb0J1ZmZlcihjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuKQogICAgICAg
ICBtX2J1ZmZlclNpemUgKz0gbGVuOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAg
bV9jb250ZXh0LT5hZGRNZXNzYWdlKENvbnNvbGVEZXN0aW5hdGlvbiwgSlNNZXNzYWdlU291cmNl
LCBMb2dNZXNzYWdlVHlwZSwgRXJyb3JNZXNzYWdlTGV2ZWwsIFN0cmluZzo6Zm9ybWF0KCJXZWJT
b2NrZXQgZnJhbWUgKGF0ICVkIGJ5dGVzKSBpcyB0b28gbG9uZy4iLCBtX2J1ZmZlclNpemUgKyBs
ZW4pLCAwLCBtX2hhbmRzaGFrZS5jbGllbnRPcmlnaW4oKSk7CisgICAgbV9jb250ZXh0LT5hZGRN
ZXNzYWdlKEpTTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIEVycm9yTWVzc2FnZUxldmVs
LCBTdHJpbmc6OmZvcm1hdCgiV2ViU29ja2V0IGZyYW1lIChhdCAlZCBieXRlcykgaXMgdG9vIGxv
bmcuIiwgbV9idWZmZXJTaXplICsgbGVuKSwgMCwgbV9oYW5kc2hha2UuY2xpZW50T3JpZ2luKCkp
OwogICAgIHJldHVybiBmYWxzZTsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS93ZWJzb2NrZXRz
L1dlYlNvY2tldEhhbmRzaGFrZS5jcHAgYi9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0SGFu
ZHNoYWtlLmNwcAppbmRleCA0YmM5NTU0Li4wYmE2YjExIDEwMDY0NAotLS0gYS9XZWJDb3JlL3dl
YnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcAorKysgYi9XZWJDb3JlL3dlYnNvY2tldHMv
V2ViU29ja2V0SGFuZHNoYWtlLmNwcApAQCAtMjQ2LDIyICsyNDYsMjIgQEAgaW50IFdlYlNvY2tl
dEhhbmRzaGFrZTo6cmVhZFNlcnZlckhhbmRzaGFrZShjb25zdCBjaGFyKiBoZWFkZXIsIHNpemVf
dCBsZW4pCiAgICAgZWxzZSB7CiAgICAgICAgIGNvbnN0IFN0cmluZyYgY29kZSA9IGV4dHJhY3RS
ZXNwb25zZUNvZGUoaGVhZGVyLCBsZW4pOwogICAgICAgICBpZiAoY29kZS5pc051bGwoKSkgewot
ICAgICAgICAgICAgbV9jb250ZXh0LT5hZGRNZXNzYWdlKENvbnNvbGVEZXN0aW5hdGlvbiwgSlNN
ZXNzYWdlU291cmNlLCBMb2dNZXNzYWdlVHlwZSwgRXJyb3JNZXNzYWdlTGV2ZWwsICJTaG9ydCBz
ZXJ2ZXIgaGFuZHNoYWtlOiAiICsgdHJpbUNvbnNvbGVNZXNzYWdlKGhlYWRlciwgbGVuKSwgMCwg
Y2xpZW50T3JpZ2luKCkpOworICAgICAgICAgICAgbV9jb250ZXh0LT5hZGRNZXNzYWdlKEpTTWVz
c2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIEVycm9yTWVzc2FnZUxldmVsLCAiU2hvcnQgc2Vy
dmVyIGhhbmRzaGFrZTogIiArIHRyaW1Db25zb2xlTWVzc2FnZShoZWFkZXIsIGxlbiksIDAsIGNs
aWVudE9yaWdpbigpKTsKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQogICAgICAg
ICBpZiAoY29kZS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIG1fbW9kZSA9IEZhaWxlZDsKLSAg
ICAgICAgICAgIG1fY29udGV4dC0+YWRkTWVzc2FnZShDb25zb2xlRGVzdGluYXRpb24sIEpTTWVz
c2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIEVycm9yTWVzc2FnZUxldmVsLCAiTm8gcmVzcG9u
c2UgY29kZSBmb3VuZDogIiArIHRyaW1Db25zb2xlTWVzc2FnZShoZWFkZXIsIGxlbiksIDAsIGNs
aWVudE9yaWdpbigpKTsKKyAgICAgICAgICAgIG1fY29udGV4dC0+YWRkTWVzc2FnZShKU01lc3Nh
Z2VTb3VyY2UsIExvZ01lc3NhZ2VUeXBlLCBFcnJvck1lc3NhZ2VMZXZlbCwgIk5vIHJlc3BvbnNl
IGNvZGUgZm91bmQ6ICIgKyB0cmltQ29uc29sZU1lc3NhZ2UoaGVhZGVyLCBsZW4pLCAwLCBjbGll
bnRPcmlnaW4oKSk7CiAgICAgICAgICAgICByZXR1cm4gbGVuOwogICAgICAgICB9CiAgICAgICAg
IExPRyhOZXR3b3JrLCAicmVzcG9uc2UgY29kZTogJXMiLCBjb2RlLnV0ZjgoKS5kYXRhKCkpOwog
ICAgICAgICBpZiAoY29kZSA9PSAiNDAxIikgewogICAgICAgICAgICAgbV9tb2RlID0gRmFpbGVk
OwotICAgICAgICAgICAgbV9jb250ZXh0LT5hZGRNZXNzYWdlKENvbnNvbGVEZXN0aW5hdGlvbiwg
SlNNZXNzYWdlU291cmNlLCBMb2dNZXNzYWdlVHlwZSwgRXJyb3JNZXNzYWdlTGV2ZWwsICJBdXRo
ZW50aWNhdGlvbiByZXF1aXJlZCwgYnV0IG5vdCBpbXBsZW1lbnRlZCB5ZXQuIiwgMCwgY2xpZW50
T3JpZ2luKCkpOworICAgICAgICAgICAgbV9jb250ZXh0LT5hZGRNZXNzYWdlKEpTTWVzc2FnZVNv
dXJjZSwgTG9nTWVzc2FnZVR5cGUsIEVycm9yTWVzc2FnZUxldmVsLCAiQXV0aGVudGljYXRpb24g
cmVxdWlyZWQsIGJ1dCBub3QgaW1wbGVtZW50ZWQgeWV0LiIsIDAsIGNsaWVudE9yaWdpbigpKTsK
ICAgICAgICAgICAgIHJldHVybiBsZW47CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBt
X21vZGUgPSBGYWlsZWQ7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPmFkZE1lc3NhZ2UoQ29uc29s
ZURlc3RpbmF0aW9uLCBKU01lc3NhZ2VTb3VyY2UsIExvZ01lc3NhZ2VUeXBlLCBFcnJvck1lc3Nh
Z2VMZXZlbCwgIlVuZXhwZWN0ZWQgcmVzcG9uc2UgY29kZToiICsgY29kZSwgMCwgY2xpZW50T3Jp
Z2luKCkpOworICAgICAgICAgICAgbV9jb250ZXh0LT5hZGRNZXNzYWdlKEpTTWVzc2FnZVNvdXJj
ZSwgTG9nTWVzc2FnZVR5cGUsIEVycm9yTWVzc2FnZUxldmVsLCAiVW5leHBlY3RlZCByZXNwb25z
ZSBjb2RlOiIgKyBjb2RlLCAwLCBjbGllbnRPcmlnaW4oKSk7CiAgICAgICAgICAgICByZXR1cm4g
bGVuOwogICAgICAgICB9CiAgICAgfQpAQCAtMjc2LDcgKzI3Niw3IEBAIGludCBXZWJTb2NrZXRI
YW5kc2hha2U6OnJlYWRTZXJ2ZXJIYW5kc2hha2UoY29uc3QgY2hhciogaGVhZGVyLCBzaXplX3Qg
bGVuKQogICAgICAgICB9CiAgICAgICAgIGlmIChtZW1jbXAocCwgd2ViU29ja2V0VXBncmFkZUhl
YWRlciwgc2l6ZW9mKHdlYlNvY2tldFVwZ3JhZGVIZWFkZXIpIC0gMSkpIHsKICAgICAgICAgICAg
IG1fbW9kZSA9IEZhaWxlZDsKLSAgICAgICAgICAgIG1fY29udGV4dC0+YWRkTWVzc2FnZShDb25z
b2xlRGVzdGluYXRpb24sIEpTTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIEVycm9yTWVz
c2FnZUxldmVsLCAiQmFkIFVwZ3JhZGUgaGVhZGVyOiAiICsgdHJpbUNvbnNvbGVNZXNzYWdlKHAs
IGVuZCAtIHApLCAwLCBjbGllbnRPcmlnaW4oKSk7CisgICAgICAgICAgICBtX2NvbnRleHQtPmFk
ZE1lc3NhZ2UoSlNNZXNzYWdlU291cmNlLCBMb2dNZXNzYWdlVHlwZSwgRXJyb3JNZXNzYWdlTGV2
ZWwsICJCYWQgVXBncmFkZSBoZWFkZXI6ICIgKyB0cmltQ29uc29sZU1lc3NhZ2UocCwgZW5kIC0g
cCksIDAsIGNsaWVudE9yaWdpbigpKTsKICAgICAgICAgICAgIHJldHVybiBwIC0gaGVhZGVyICsg
c2l6ZW9mKHdlYlNvY2tldFVwZ3JhZGVIZWFkZXIpIC0gMTsKICAgICAgICAgfQogICAgICAgICBw
ICs9IHNpemVvZih3ZWJTb2NrZXRVcGdyYWRlSGVhZGVyKSAtIDE7CkBAIC0yODgsNyArMjg4LDcg
QEAgaW50IFdlYlNvY2tldEhhbmRzaGFrZTo6cmVhZFNlcnZlckhhbmRzaGFrZShjb25zdCBjaGFy
KiBoZWFkZXIsIHNpemVfdCBsZW4pCiAgICAgICAgIH0KICAgICAgICAgaWYgKG1lbWNtcChwLCB3
ZWJTb2NrZXRDb25uZWN0aW9uSGVhZGVyLCBzaXplb2Yod2ViU29ja2V0Q29ubmVjdGlvbkhlYWRl
cikgLSAxKSkgewogICAgICAgICAgICAgbV9tb2RlID0gRmFpbGVkOwotICAgICAgICAgICAgbV9j
b250ZXh0LT5hZGRNZXNzYWdlKENvbnNvbGVEZXN0aW5hdGlvbiwgSlNNZXNzYWdlU291cmNlLCBM
b2dNZXNzYWdlVHlwZSwgRXJyb3JNZXNzYWdlTGV2ZWwsICJCYWQgQ29ubmVjdGlvbiBoZWFkZXI6
ICIgKyB0cmltQ29uc29sZU1lc3NhZ2UocCwgZW5kIC0gcCksIDAsIGNsaWVudE9yaWdpbigpKTsK
KyAgICAgICAgICAgIG1fY29udGV4dC0+YWRkTWVzc2FnZShKU01lc3NhZ2VTb3VyY2UsIExvZ01l
c3NhZ2VUeXBlLCBFcnJvck1lc3NhZ2VMZXZlbCwgIkJhZCBDb25uZWN0aW9uIGhlYWRlcjogIiAr
IHRyaW1Db25zb2xlTWVzc2FnZShwLCBlbmQgLSBwKSwgMCwgY2xpZW50T3JpZ2luKCkpOwogICAg
ICAgICAgICAgcmV0dXJuIHAgLSBoZWFkZXIgKyBzaXplb2Yod2ViU29ja2V0Q29ubmVjdGlvbkhl
YWRlcikgLSAxOwogICAgICAgICB9CiAgICAgICAgIHAgKz0gc2l6ZW9mKHdlYlNvY2tldENvbm5l
Y3Rpb25IZWFkZXIpIC0gMTsKQEAgLTM5OSwxMyArMzk5LDEzIEBAIGNvbnN0IGNoYXIqIFdlYlNv
Y2tldEhhbmRzaGFrZTo6cmVhZEhUVFBIZWFkZXJzKGNvbnN0IGNoYXIqIHN0YXJ0LCBjb25zdCBj
aGFyKiBlCiAgICAgICAgICAgICAgICAgaWYgKG5hbWUuaXNFbXB0eSgpKSB7CiAgICAgICAgICAg
ICAgICAgICAgIGlmIChwICsgMSA8IGVuZCAmJiAqKHAgKyAxKSA9PSAnXG4nKQogICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHAgKyAyOwotICAgICAgICAgICAgICAgICAgICBtX2NvbnRl
eHQtPmFkZE1lc3NhZ2UoQ29uc29sZURlc3RpbmF0aW9uLCBKU01lc3NhZ2VTb3VyY2UsIExvZ01l
c3NhZ2VUeXBlLCBFcnJvck1lc3NhZ2VMZXZlbCwgIkNSIGRvZXNuJ3QgZm9sbG93IExGIGF0ICIg
KyB0cmltQ29uc29sZU1lc3NhZ2UocCwgZW5kIC0gcCksIDAsIGNsaWVudE9yaWdpbigpKTsKKyAg
ICAgICAgICAgICAgICAgICAgbV9jb250ZXh0LT5hZGRNZXNzYWdlKEpTTWVzc2FnZVNvdXJjZSwg
TG9nTWVzc2FnZVR5cGUsIEVycm9yTWVzc2FnZUxldmVsLCAiQ1IgZG9lc24ndCBmb2xsb3cgTEYg
YXQgIiArIHRyaW1Db25zb2xlTWVzc2FnZShwLCBlbmQgLSBwKSwgMCwgY2xpZW50T3JpZ2luKCkp
OwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgbV9jb250ZXh0LT5hZGRNZXNzYWdlKENvbnNvbGVEZXN0aW5hdGlvbiwgSlNN
ZXNzYWdlU291cmNlLCBMb2dNZXNzYWdlVHlwZSwgRXJyb3JNZXNzYWdlTGV2ZWwsICJVbmV4cGVj
dGVkIENSIGluIG5hbWUgYXQgIiArIHRyaW1Db25zb2xlTWVzc2FnZShwLCBlbmQgLSBwKSwgMCwg
Y2xpZW50T3JpZ2luKCkpOworICAgICAgICAgICAgICAgIG1fY29udGV4dC0+YWRkTWVzc2FnZShK
U01lc3NhZ2VTb3VyY2UsIExvZ01lc3NhZ2VUeXBlLCBFcnJvck1lc3NhZ2VMZXZlbCwgIlVuZXhw
ZWN0ZWQgQ1IgaW4gbmFtZSBhdCAiICsgdHJpbUNvbnNvbGVNZXNzYWdlKHAsIGVuZCAtIHApLCAw
LCBjbGllbnRPcmlnaW4oKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAg
ICBjYXNlICdcbic6Ci0gICAgICAgICAgICAgICAgbV9jb250ZXh0LT5hZGRNZXNzYWdlKENvbnNv
bGVEZXN0aW5hdGlvbiwgSlNNZXNzYWdlU291cmNlLCBMb2dNZXNzYWdlVHlwZSwgRXJyb3JNZXNz
YWdlTGV2ZWwsICJVbmV4cGVjdGVkIExGIGluIG5hbWUgYXQgIiArIHRyaW1Db25zb2xlTWVzc2Fn
ZShwLCBlbmQgLSBwKSwgMCwgY2xpZW50T3JpZ2luKCkpOworICAgICAgICAgICAgICAgIG1fY29u
dGV4dC0+YWRkTWVzc2FnZShKU01lc3NhZ2VTb3VyY2UsIExvZ01lc3NhZ2VUeXBlLCBFcnJvck1l
c3NhZ2VMZXZlbCwgIlVuZXhwZWN0ZWQgTEYgaW4gbmFtZSBhdCAiICsgdHJpbUNvbnNvbGVNZXNz
YWdlKHAsIGVuZCAtIHApLCAwLCBjbGllbnRPcmlnaW4oKSk7CiAgICAgICAgICAgICAgICAgcmV0
dXJuIDA7CiAgICAgICAgICAgICBjYXNlICc6JzoKICAgICAgICAgICAgICAgICBicmVhazsKQEAg
LTQyOSw3ICs0MjksNyBAQCBjb25zdCBjaGFyKiBXZWJTb2NrZXRIYW5kc2hha2U6OnJlYWRIVFRQ
SGVhZGVycyhjb25zdCBjaGFyKiBzdGFydCwgY29uc3QgY2hhciogZQogICAgICAgICAgICAgY2Fz
ZSAnXHInOgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSAnXG4nOgot
ICAgICAgICAgICAgICAgIG1fY29udGV4dC0+YWRkTWVzc2FnZShDb25zb2xlRGVzdGluYXRpb24s
IEpTTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIEVycm9yTWVzc2FnZUxldmVsLCAiVW5l
eHBlY3RlZCBMRiBpbiB2YWx1ZSBhdCAiICsgdHJpbUNvbnNvbGVNZXNzYWdlKHAsIGVuZCAtIHAp
LCAwLCBjbGllbnRPcmlnaW4oKSk7CisgICAgICAgICAgICAgICAgbV9jb250ZXh0LT5hZGRNZXNz
YWdlKEpTTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIEVycm9yTWVzc2FnZUxldmVsLCAi
VW5leHBlY3RlZCBMRiBpbiB2YWx1ZSBhdCAiICsgdHJpbUNvbnNvbGVNZXNzYWdlKHAsIGVuZCAt
IHApLCAwLCBjbGllbnRPcmlnaW4oKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAg
ICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIHZhbHVlLmFwcGVuZCgqcCk7CkBAIC00
NDAsNyArNDQwLDcgQEAgY29uc3QgY2hhciogV2ViU29ja2V0SGFuZHNoYWtlOjpyZWFkSFRUUEhl
YWRlcnMoY29uc3QgY2hhciogc3RhcnQsIGNvbnN0IGNoYXIqIGUKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgICAgICBpZiAocCA+PSBlbmQgfHwgKnAgIT0gJ1xuJykgewotICAgICAgICAg
ICAgbV9jb250ZXh0LT5hZGRNZXNzYWdlKENvbnNvbGVEZXN0aW5hdGlvbiwgSlNNZXNzYWdlU291
cmNlLCBMb2dNZXNzYWdlVHlwZSwgRXJyb3JNZXNzYWdlTGV2ZWwsICJDUiBkb2Vzbid0IGZvbGxv
dyBMRiBhZnRlciB2YWx1ZSBhdCAiICsgdHJpbUNvbnNvbGVNZXNzYWdlKHAsIGVuZCAtIHApLCAw
LCBjbGllbnRPcmlnaW4oKSk7CisgICAgICAgICAgICBtX2NvbnRleHQtPmFkZE1lc3NhZ2UoSlNN
ZXNzYWdlU291cmNlLCBMb2dNZXNzYWdlVHlwZSwgRXJyb3JNZXNzYWdlTGV2ZWwsICJDUiBkb2Vz
bid0IGZvbGxvdyBMRiBhZnRlciB2YWx1ZSBhdCAiICsgdHJpbUNvbnNvbGVNZXNzYWdlKHAsIGVu
ZCAtIHApLCAwLCBjbGllbnRPcmlnaW4oKSk7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAg
ICAgfQogICAgICAgICBBdG9taWNTdHJpbmcgbmFtZVN0cihTdHJpbmc6OmZyb21VVEY4KG5hbWUu
ZGF0YSgpLCBuYW1lLnNpemUoKSkpOwpAQCAtNDgzLDI0ICs0ODMsMjQgQEAgdm9pZCBXZWJTb2Nr
ZXRIYW5kc2hha2U6OmNoZWNrUmVzcG9uc2VIZWFkZXJzKCkKICAgICBBU1NFUlQobV9tb2RlID09
IE5vcm1hbCk7CiAgICAgbV9tb2RlID0gRmFpbGVkOwogICAgIGlmIChtX3dzT3JpZ2luLmlzTnVs
bCgpKSB7Ci0gICAgICAgIG1fY29udGV4dC0+YWRkTWVzc2FnZShDb25zb2xlRGVzdGluYXRpb24s
IEpTTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIEVycm9yTWVzc2FnZUxldmVsLCAiRXJy
b3IgZHVyaW5nIFdlYlNvY2tldCBoYW5kc2hha2U6ICd3ZWJzb2NrZXQtb3JpZ2luJyBoZWFkZXIg
aXMgbWlzc2luZyIsIDAsIGNsaWVudE9yaWdpbigpKTsKKyAgICAgICAgbV9jb250ZXh0LT5hZGRN
ZXNzYWdlKEpTTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIEVycm9yTWVzc2FnZUxldmVs
LCAiRXJyb3IgZHVyaW5nIFdlYlNvY2tldCBoYW5kc2hha2U6ICd3ZWJzb2NrZXQtb3JpZ2luJyBo
ZWFkZXIgaXMgbWlzc2luZyIsIDAsIGNsaWVudE9yaWdpbigpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICBpZiAobV93c0xvY2F0aW9uLmlzTnVsbCgpKSB7Ci0gICAgICAgIG1fY29udGV4
dC0+YWRkTWVzc2FnZShDb25zb2xlRGVzdGluYXRpb24sIEpTTWVzc2FnZVNvdXJjZSwgTG9nTWVz
c2FnZVR5cGUsIEVycm9yTWVzc2FnZUxldmVsLCAiRXJyb3IgZHVyaW5nIFdlYlNvY2tldCBoYW5k
c2hha2U6ICd3ZWJzb2NrZXQtbG9jYXRpb24nIGhlYWRlciBpcyBtaXNzaW5nIiwgMCwgY2xpZW50
T3JpZ2luKCkpOworICAgICAgICBtX2NvbnRleHQtPmFkZE1lc3NhZ2UoSlNNZXNzYWdlU291cmNl
LCBMb2dNZXNzYWdlVHlwZSwgRXJyb3JNZXNzYWdlTGV2ZWwsICJFcnJvciBkdXJpbmcgV2ViU29j
a2V0IGhhbmRzaGFrZTogJ3dlYnNvY2tldC1sb2NhdGlvbicgaGVhZGVyIGlzIG1pc3NpbmciLCAw
LCBjbGllbnRPcmlnaW4oKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoY2xp
ZW50T3JpZ2luKCkgIT0gbV93c09yaWdpbikgewotICAgICAgICBtX2NvbnRleHQtPmFkZE1lc3Nh
Z2UoQ29uc29sZURlc3RpbmF0aW9uLCBKU01lc3NhZ2VTb3VyY2UsIExvZ01lc3NhZ2VUeXBlLCBF
cnJvck1lc3NhZ2VMZXZlbCwgIkVycm9yIGR1cmluZyBXZWJTb2NrZXQgaGFuZHNoYWtlOiBvcmln
aW4gbWlzbWF0Y2g6ICIgKyBjbGllbnRPcmlnaW4oKSArICIgIT0gIiArIG1fd3NPcmlnaW4sIDAs
IGNsaWVudE9yaWdpbigpKTsKKyAgICAgICAgbV9jb250ZXh0LT5hZGRNZXNzYWdlKEpTTWVzc2Fn
ZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIEVycm9yTWVzc2FnZUxldmVsLCAiRXJyb3IgZHVyaW5n
IFdlYlNvY2tldCBoYW5kc2hha2U6IG9yaWdpbiBtaXNtYXRjaDogIiArIGNsaWVudE9yaWdpbigp
ICsgIiAhPSAiICsgbV93c09yaWdpbiwgMCwgY2xpZW50T3JpZ2luKCkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogICAgIGlmIChjbGllbnRMb2NhdGlvbigpICE9IG1fd3NMb2NhdGlvbikgewot
ICAgICAgICBtX2NvbnRleHQtPmFkZE1lc3NhZ2UoQ29uc29sZURlc3RpbmF0aW9uLCBKU01lc3Nh
Z2VTb3VyY2UsIExvZ01lc3NhZ2VUeXBlLCBFcnJvck1lc3NhZ2VMZXZlbCwgIkVycm9yIGR1cmlu
ZyBXZWJTb2NrZXQgaGFuZHNoYWtlOiBsb2NhdGlvbiBtaXNtYXRjaDogIiArIGNsaWVudExvY2F0
aW9uKCkgKyAiICE9ICIgKyBtX3dzTG9jYXRpb24sIDAsIGNsaWVudE9yaWdpbigpKTsKKyAgICAg
ICAgbV9jb250ZXh0LT5hZGRNZXNzYWdlKEpTTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUs
IEVycm9yTWVzc2FnZUxldmVsLCAiRXJyb3IgZHVyaW5nIFdlYlNvY2tldCBoYW5kc2hha2U6IGxv
Y2F0aW9uIG1pc21hdGNoOiAiICsgY2xpZW50TG9jYXRpb24oKSArICIgIT0gIiArIG1fd3NMb2Nh
dGlvbiwgMCwgY2xpZW50T3JpZ2luKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlm
ICghbV9jbGllbnRQcm90b2NvbC5pc0VtcHR5KCkgJiYgbV9jbGllbnRQcm90b2NvbCAhPSBtX3dz
UHJvdG9jb2wpIHsKLSAgICAgICAgbV9jb250ZXh0LT5hZGRNZXNzYWdlKENvbnNvbGVEZXN0aW5h
dGlvbiwgSlNNZXNzYWdlU291cmNlLCBMb2dNZXNzYWdlVHlwZSwgRXJyb3JNZXNzYWdlTGV2ZWws
ICJFcnJvciBkdXJpbmcgV2ViU29ja2V0IGhhbmRzaGFrZTogcHJvdG9jb2wgbWlzbWF0Y2g6ICIg
KyBtX2NsaWVudFByb3RvY29sICsgIiAhPSAiICsgbV93c1Byb3RvY29sLCAwLCBjbGllbnRPcmln
aW4oKSk7CisgICAgICAgIG1fY29udGV4dC0+YWRkTWVzc2FnZShKU01lc3NhZ2VTb3VyY2UsIExv
Z01lc3NhZ2VUeXBlLCBFcnJvck1lc3NhZ2VMZXZlbCwgIkVycm9yIGR1cmluZyBXZWJTb2NrZXQg
aGFuZHNoYWtlOiBwcm90b2NvbCBtaXNtYXRjaDogIiArIG1fY2xpZW50UHJvdG9jb2wgKyAiICE9
ICIgKyBtX3dzUHJvdG9jb2wsIDAsIGNsaWVudE9yaWdpbigpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICBtX21vZGUgPSBDb25uZWN0ZWQ7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3dvcmtl
cnMvRGVmYXVsdFNoYXJlZFdvcmtlclJlcG9zaXRvcnkuY3BwIGIvV2ViQ29yZS93b3JrZXJzL0Rl
ZmF1bHRTaGFyZWRXb3JrZXJSZXBvc2l0b3J5LmNwcAppbmRleCBiMzZiMWJlLi44NWZmNzY4IDEw
MDY0NAotLS0gYS9XZWJDb3JlL3dvcmtlcnMvRGVmYXVsdFNoYXJlZFdvcmtlclJlcG9zaXRvcnku
Y3BwCisrKyBiL1dlYkNvcmUvd29ya2Vycy9EZWZhdWx0U2hhcmVkV29ya2VyUmVwb3NpdG9yeS5j
cHAKQEAgLTc5LDcgKzc5LDcgQEAgcHVibGljOgogCiAgICAgLy8gV29ya2VyUmVwb3J0aW5nUHJv
eHkKICAgICB2aXJ0dWFsIHZvaWQgcG9zdEV4Y2VwdGlvblRvV29ya2VyT2JqZWN0KGNvbnN0IFN0
cmluZyYgZXJyb3JNZXNzYWdlLCBpbnQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VV
UkwpOwotICAgIHZpcnR1YWwgdm9pZCBwb3N0Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdChN
ZXNzYWdlRGVzdGluYXRpb24sIE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2
ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgaW50IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYg
c291cmNlVVJMKTsKKyAgICB2aXJ0dWFsIHZvaWQgcG9zdENvbnNvbGVNZXNzYWdlVG9Xb3JrZXJP
YmplY3QoTWVzc2FnZVNvdXJjZSwgTWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3Ry
aW5nJiBtZXNzYWdlLCBpbnQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpOwog
ICAgIHZpcnR1YWwgdm9pZCB3b3JrZXJDb250ZXh0Q2xvc2VkKCk7CiAgICAgdmlydHVhbCB2b2lk
IHdvcmtlckNvbnRleHREZXN0cm95ZWQoKTsKIApAQCAtMTY1LDE2ICsxNjUsMTYgQEAgdm9pZCBT
aGFyZWRXb3JrZXJQcm94eTo6cG9zdEV4Y2VwdGlvblRvV29ya2VyT2JqZWN0KGNvbnN0IFN0cmlu
ZyYgZXJyb3JNZXNzYWdlLAogICAgICAgICAoKml0ZXIpLT5wb3N0VGFzayhjcmVhdGVDYWxsYmFj
a1Rhc2soJnBvc3RFeGNlcHRpb25UYXNrLCBlcnJvck1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJj
ZVVSTCkpOwogfQogCi1zdGF0aWMgdm9pZCBwb3N0Q29uc29sZU1lc3NhZ2VUYXNrKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGRvY3VtZW50LCBNZXNzYWdlRGVzdGluYXRpb24gZGVzdGluYXRpb24s
IE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlVHlwZSB0eXBlLCBNZXNzYWdlTGV2ZWwgbGV2
ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3Ry
aW5nJiBzb3VyY2VVUkwpCitzdGF0aWMgdm9pZCBwb3N0Q29uc29sZU1lc3NhZ2VUYXNrKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGRvY3VtZW50LCBNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2Fn
ZVR5cGUgdHlwZSwgTWVzc2FnZUxldmVsIGxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIHVu
c2lnbmVkIGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMKQogewotICAgIGRvY3Vt
ZW50LT5hZGRNZXNzYWdlKGRlc3RpbmF0aW9uLCBzb3VyY2UsIHR5cGUsIGxldmVsLCBtZXNzYWdl
LCBsaW5lTnVtYmVyLCBzb3VyY2VVUkwpOworICAgIGRvY3VtZW50LT5hZGRNZXNzYWdlKHNvdXJj
ZSwgdHlwZSwgbGV2ZWwsIG1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZVVSTCk7CiB9CiAKLXZv
aWQgU2hhcmVkV29ya2VyUHJveHk6OnBvc3RDb25zb2xlTWVzc2FnZVRvV29ya2VyT2JqZWN0KE1l
c3NhZ2VEZXN0aW5hdGlvbiBkZXN0aW5hdGlvbiwgTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3Nh
Z2VUeXBlIHR5cGUsIE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBp
bnQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpCit2b2lkIFNoYXJlZFdvcmtl
clByb3h5Ojpwb3N0Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdChNZXNzYWdlU291cmNlIHNv
dXJjZSwgTWVzc2FnZVR5cGUgdHlwZSwgTWVzc2FnZUxldmVsIGxldmVsLCBjb25zdCBTdHJpbmcm
IG1lc3NhZ2UsIGludCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCkKIHsKICAg
ICBNdXRleExvY2tlciBsb2NrKG1fd29ya2VyRG9jdW1lbnRzTG9jayk7CiAgICAgZm9yIChIYXNo
U2V0PERvY3VtZW50Kj46Oml0ZXJhdG9yIGl0ZXIgPSBtX3dvcmtlckRvY3VtZW50cy5iZWdpbigp
OyBpdGVyICE9IG1fd29ya2VyRG9jdW1lbnRzLmVuZCgpOyArK2l0ZXIpCi0gICAgICAgICgqaXRl
ciktPnBvc3RUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmcG9zdENvbnNvbGVNZXNzYWdlVGFzaywg
ZGVzdGluYXRpb24sIHNvdXJjZSwgdHlwZSwgbGV2ZWwsIG1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNv
dXJjZVVSTCkpOworICAgICAgICAoKml0ZXIpLT5wb3N0VGFzayhjcmVhdGVDYWxsYmFja1Rhc2so
JnBvc3RDb25zb2xlTWVzc2FnZVRhc2ssIHNvdXJjZSwgdHlwZSwgbGV2ZWwsIG1lc3NhZ2UsIGxp
bmVOdW1iZXIsIHNvdXJjZVVSTCkpOwogfQogCiB2b2lkIFNoYXJlZFdvcmtlclByb3h5Ojp3b3Jr
ZXJDb250ZXh0Q2xvc2VkKCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250
ZXh0LmNwcCBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcAppbmRleCBhZjM3YzZh
Li5kMDFlZmU4IDEwMDY0NAotLS0gYS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5jcHAK
KysrIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuY3BwCkBAIC0zOCw2ICszOCw3IEBA
CiAjaW5jbHVkZSAiRXJyb3JFdmVudC5oIgogI2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAi
RXZlbnRFeGNlcHRpb24uaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCiAjaW5j
bHVkZSAiTWVzc2FnZVBvcnQuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1
ZGUgIlNjcmlwdFNvdXJjZUNvZGUuaCIKQEAgLTE1MywxOCArMTU0LDYgQEAgYm9vbCBXb3JrZXJD
b250ZXh0OjpoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdAogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotdm9pZCBXb3JrZXJDb250ZXh0OjpyZXNvdXJjZVJldHJpZXZlZEJ5WE1MSHR0cFJlcXVlc3Qo
dW5zaWduZWQgbG9uZywgY29uc3QgU2NyaXB0U3RyaW5nJikKLXsKLSAgICAvLyBGSVhNRTogVGhl
IGltcGxlbWVudGF0aW9uIGlzIHBlbmRpbmcgdGhlIGZpeGVzIGluIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzE3NQotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0K
LXZvaWQgV29ya2VyQ29udGV4dDo6c2NyaXB0SW1wb3J0ZWQodW5zaWduZWQgbG9uZywgY29uc3Qg
U3RyaW5nJikKLXsKLSAgICAvLyBGSVhNRTogVGhlIGltcGxlbWVudGF0aW9uIGlzIHBlbmRpbmcg
dGhlIGZpeGVzIGluIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzE3
NQotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KIHZvaWQgV29ya2VyQ29udGV4dDo6cG9zdFRh
c2soUGFzc093blB0cjxUYXNrPiB0YXNrKQogewogICAgIHRocmVhZCgpLT5ydW5Mb29wKCkucG9z
dFRhc2sodGFzayk7CkBAIC0yMTUsNyArMjA0LDEwIEBAIHZvaWQgV29ya2VyQ29udGV4dDo6aW1w
b3J0U2NyaXB0cyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgdXJscywgRXhjZXB0aW9uQ29kZSYgZWMp
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBzY3JpcHRFeGVjdXRp
b25Db250ZXh0KCktPnNjcmlwdEltcG9ydGVkKHNjcmlwdExvYWRlci5pZGVudGlmaWVyKCksIHNj
cmlwdExvYWRlci5zY3JpcHQoKSk7CisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKyAgICAgICAgaWYg
KEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvciA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KS0+aW5zcGVjdG9yQ29udHJvbGxlcigpKQorICAgICAgICAgICAgaW5zcGVjdG9yLT5zY3JpcHRJ
bXBvcnRlZChzY3JpcHRMb2FkZXIuaWRlbnRpZmllcigpLCBzY3JpcHRMb2FkZXIuc2NyaXB0KCkp
OworI2VuZGlmCiAKICAgICAgICAgU2NyaXB0VmFsdWUgZXhjZXB0aW9uOwogICAgICAgICBtX3Nj
cmlwdC0+ZXZhbHVhdGUoU2NyaXB0U291cmNlQ29kZShzY3JpcHRMb2FkZXIuc2NyaXB0KCksICpp
dCksICZleGNlcHRpb24pOwpAQCAtMjQyLDkgKzIzNCw5IEBAIHZvaWQgV29ya2VyQ29udGV4dDo6
cmVwb3J0RXhjZXB0aW9uKGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBpbnQgbGluZU51bWJl
ciwKICAgICAgICAgdGhyZWFkKCktPndvcmtlclJlcG9ydGluZ1Byb3h5KCkucG9zdEV4Y2VwdGlv
blRvV29ya2VyT2JqZWN0KGVycm9yTWVzc2FnZSwgbGluZU51bWJlciwgc291cmNlVVJMKTsKIH0K
IAotdm9pZCBXb3JrZXJDb250ZXh0OjphZGRNZXNzYWdlKE1lc3NhZ2VEZXN0aW5hdGlvbiBkZXN0
aW5hdGlvbiwgTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VUeXBlIHR5cGUsIE1lc3NhZ2VM
ZXZlbCBsZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBj
b25zdCBTdHJpbmcmIHNvdXJjZVVSTCkKK3ZvaWQgV29ya2VyQ29udGV4dDo6YWRkTWVzc2FnZShN
ZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2FnZVR5cGUgdHlwZSwgTWVzc2FnZUxldmVsIGxldmVs
LCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGNvbnN0IFN0cmlu
ZyYgc291cmNlVVJMKQogewotICAgIHRocmVhZCgpLT53b3JrZXJSZXBvcnRpbmdQcm94eSgpLnBv
c3RDb25zb2xlTWVzc2FnZVRvV29ya2VyT2JqZWN0KGRlc3RpbmF0aW9uLCBzb3VyY2UsIHR5cGUs
IGxldmVsLCBtZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VVUkwpOworICAgIHRocmVhZCgpLT53
b3JrZXJSZXBvcnRpbmdQcm94eSgpLnBvc3RDb25zb2xlTWVzc2FnZVRvV29ya2VyT2JqZWN0KHNv
dXJjZSwgdHlwZSwgbGV2ZWwsIG1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZVVSTCk7CiB9CiAK
ICNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykKZGlmZiAtLWdpdCBhL1dlYkNvcmUvd29ya2Vycy9X
b3JrZXJDb250ZXh0LmggYi9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5oCmluZGV4IDM1
YjM2ZWYuLjcwMjZlMzUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0
LmgKKysrIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaApAQCAtNzUsOSArNzUsNiBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHko
KSBjb25zdDsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgcmVzb3VyY2VSZXRyaWV2ZWRCeVhNTEh0
dHBSZXF1ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgU2NyaXB0U3RyaW5nJiBz
b3VyY2VTdHJpbmcpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgc2NyaXB0SW1wb3J0ZWQodW5zaWdu
ZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVN0cmluZyk7Ci0KICAgICAg
ICAgdmlydHVhbCB2b2lkIHBvc3RUYXNrKFBhc3NPd25QdHI8VGFzaz4pOyAvLyBFeGVjdXRlcyB0
aGUgdGFzayBvbiBjb250ZXh0J3MgdGhyZWFkIGFzeW5jaHJvbm91c2x5LgogCiAgICAgICAgIC8v
IFdvcmtlckdsb2JhbFNjb3BlCkBAIC05OSw3ICs5Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogICAgICAgICAvLyBTY3JpcHRFeGVjdXRpb25Db250ZXh0CiAgICAgICAgIHZpcnR1YWwgdm9p
ZCByZXBvcnRFeGNlcHRpb24oY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIGludCBsaW5lTnVt
YmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBhZGRN
ZXNzYWdlKE1lc3NhZ2VEZXN0aW5hdGlvbiwgTWVzc2FnZVNvdXJjZSwgTWVzc2FnZVR5cGUsIE1l
c3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBj
b25zdCBTdHJpbmcmIHNvdXJjZVVSTCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBhZGRNZXNzYWdl
KE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYg
bWVzc2FnZSwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpOwog
CiAjaWYgRU5BQkxFKE5PVElGSUNBVElPTlMpCiAgICAgICAgIE5vdGlmaWNhdGlvbkNlbnRlciog
d2Via2l0Tm90aWZpY2F0aW9ucygpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS93b3JrZXJz
L1dvcmtlck1lc3NhZ2luZ1Byb3h5LmNwcCBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJNZXNzYWdp
bmdQcm94eS5jcHAKaW5kZXggMmUxZGZlMC4uMWIxOTc3NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS93
b3JrZXJzL1dvcmtlck1lc3NhZ2luZ1Byb3h5LmNwcAorKysgYi9XZWJDb3JlL3dvcmtlcnMvV29y
a2VyTWVzc2FnaW5nUHJveHkuY3BwCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiRXJyb3JF
dmVudC5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJHZW5lcmljV29y
a2VyVGFzay5oIgorI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJN
ZXNzYWdlRXZlbnQuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5j
bHVkZSAiV29ya2VyLmgiCkBAIC0yNzgsMTYgKzI3OSwxNiBAQCB2b2lkIFdvcmtlck1lc3NhZ2lu
Z1Byb3h5Ojpwb3N0RXhjZXB0aW9uVG9Xb3JrZXJPYmplY3QoY29uc3QgU3RyaW5nJiBlcnJvck1l
c3NhZwogICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cG9zdFRhc2soV29ya2VyRXhjZXB0
aW9uVGFzazo6Y3JlYXRlKGVycm9yTWVzc2FnZSwgbGluZU51bWJlciwgc291cmNlVVJMLCB0aGlz
KSk7CiB9CiAgICAgCi1zdGF0aWMgdm9pZCBwb3N0Q29uc29sZU1lc3NhZ2VUYXNrKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFdvcmtlck1lc3NhZ2luZ1Byb3h5KiBtZXNzYWdpbmdQ
cm94eSwgTWVzc2FnZURlc3RpbmF0aW9uIGRlc3RpbmF0aW9uLCBNZXNzYWdlU291cmNlIHNvdXJj
ZSwgTWVzc2FnZVR5cGUgdHlwZSwgTWVzc2FnZUxldmVsIGxldmVsLCBjb25zdCBTdHJpbmcmIG1l
c3NhZ2UsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMKQorc3Rh
dGljIHZvaWQgcG9zdENvbnNvbGVNZXNzYWdlVGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LCBXb3JrZXJNZXNzYWdpbmdQcm94eSogbWVzc2FnaW5nUHJveHksIE1lc3NhZ2VTb3Vy
Y2Ugc291cmNlLCBNZXNzYWdlVHlwZSB0eXBlLCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIGNvbnN0IFN0
cmluZyYgbWVzc2FnZSwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VV
UkwpCiB7CiAgICAgaWYgKG1lc3NhZ2luZ1Byb3h5LT5hc2tlZFRvVGVybWluYXRlKCkpCiAgICAg
ICAgIHJldHVybjsKLSAgICBjb250ZXh0LT5hZGRNZXNzYWdlKGRlc3RpbmF0aW9uLCBzb3VyY2Us
IHR5cGUsIGxldmVsLCBtZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VVUkwpOworICAgIGNvbnRl
eHQtPmFkZE1lc3NhZ2Uoc291cmNlLCB0eXBlLCBsZXZlbCwgbWVzc2FnZSwgbGluZU51bWJlciwg
c291cmNlVVJMKTsKIH0KIAotdm9pZCBXb3JrZXJNZXNzYWdpbmdQcm94eTo6cG9zdENvbnNvbGVN
ZXNzYWdlVG9Xb3JrZXJPYmplY3QoTWVzc2FnZURlc3RpbmF0aW9uIGRlc3RpbmF0aW9uLCBNZXNz
YWdlU291cmNlIHNvdXJjZSwgTWVzc2FnZVR5cGUgdHlwZSwgTWVzc2FnZUxldmVsIGxldmVsLCBj
b25zdCBTdHJpbmcmIG1lc3NhZ2UsIGludCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJj
ZVVSTCkKK3ZvaWQgV29ya2VyTWVzc2FnaW5nUHJveHk6OnBvc3RDb25zb2xlTWVzc2FnZVRvV29y
a2VyT2JqZWN0KE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlVHlwZSB0eXBlLCBNZXNzYWdl
TGV2ZWwgbGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgaW50IGxpbmVOdW1iZXIsIGNvbnN0
IFN0cmluZyYgc291cmNlVVJMKQogewotICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cG9z
dFRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZwb3N0Q29uc29sZU1lc3NhZ2VUYXNrLCB0aGlzLCBk
ZXN0aW5hdGlvbiwgc291cmNlLCB0eXBlLCBsZXZlbCwgbWVzc2FnZSwgbGluZU51bWJlciwgc291
cmNlVVJMKSk7CisgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5wb3N0VGFzayhjcmVhdGVD
YWxsYmFja1Rhc2soJnBvc3RDb25zb2xlTWVzc2FnZVRhc2ssIHRoaXMsIHNvdXJjZSwgdHlwZSwg
bGV2ZWwsIG1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZVVSTCkpOwogfQogCiB2b2lkIFdvcmtl
ck1lc3NhZ2luZ1Byb3h5Ojp3b3JrZXJUaHJlYWRDcmVhdGVkKFBhc3NSZWZQdHI8RGVkaWNhdGVk
V29ya2VyVGhyZWFkPiB3b3JrZXJUaHJlYWQpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3dvcmtlcnMv
V29ya2VyTWVzc2FnaW5nUHJveHkuaCBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJNZXNzYWdpbmdQ
cm94eS5oCmluZGV4IDkwYjg3ZjQuLjI5NmZhNDIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvd29ya2Vy
cy9Xb3JrZXJNZXNzYWdpbmdQcm94eS5oCisrKyBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJNZXNz
YWdpbmdQcm94eS5oCkBAIC02Miw3ICs2Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgLy8gKE9ubHkgdXNlIHRoZXNlIG1ldGhvZHMgaW4gdGhlIHdvcmtlciBjb250ZXh0IHRocmVh
ZC4pCiAgICAgICAgIHZpcnR1YWwgdm9pZCBwb3N0TWVzc2FnZVRvV29ya2VyT2JqZWN0KFBhc3NS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc093blB0cjxNZXNzYWdlUG9ydENoYW5u
ZWxBcnJheT4pOwogICAgICAgICB2aXJ0dWFsIHZvaWQgcG9zdEV4Y2VwdGlvblRvV29ya2VyT2Jq
ZWN0KGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBpbnQgbGluZU51bWJlciwgY29uc3QgU3Ry
aW5nJiBzb3VyY2VVUkwpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgcG9zdENvbnNvbGVNZXNzYWdl
VG9Xb3JrZXJPYmplY3QoTWVzc2FnZURlc3RpbmF0aW9uLCBNZXNzYWdlU291cmNlLCBNZXNzYWdl
VHlwZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGludCBsaW5lTnVtYmVy
LCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwb3N0Q29u
c29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdChNZXNzYWdlU291cmNlLCBNZXNzYWdlVHlwZSwgTWVz
c2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGludCBsaW5lTnVtYmVyLCBjb25zdCBT
dHJpbmcmIHNvdXJjZVVSTCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBjb25maXJtTWVzc2FnZUZy
b21Xb3JrZXJPYmplY3QoYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkpOwogICAgICAgICB2aXJ0dWFs
IHZvaWQgcmVwb3J0UGVuZGluZ0FjdGl2aXR5KGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KTsKICAg
ICAgICAgdmlydHVhbCB2b2lkIHdvcmtlckNvbnRleHRDbG9zZWQoKTsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvd29ya2Vycy9Xb3JrZXJSZXBvcnRpbmdQcm94eS5oIGIvV2ViQ29yZS93b3JrZXJzL1dv
cmtlclJlcG9ydGluZ1Byb3h5LmgKaW5kZXggZjA0NDdjOC4uMDYzZGM4MSAxMDA2NDQKLS0tIGEv
V2ViQ29yZS93b3JrZXJzL1dvcmtlclJlcG9ydGluZ1Byb3h5LmgKKysrIGIvV2ViQ29yZS93b3Jr
ZXJzL1dvcmtlclJlcG9ydGluZ1Byb3h5LmgKQEAgLTQ2LDcgKzQ2LDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBwb3N0RXhjZXB0aW9uVG9Xb3JrZXJPYmpl
Y3QoY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIGludCBsaW5lTnVtYmVyLCBjb25zdCBTdHJp
bmcmIHNvdXJjZVVSTCkgPSAwOwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBwb3N0Q29uc29sZU1l
c3NhZ2VUb1dvcmtlck9iamVjdChNZXNzYWdlRGVzdGluYXRpb24sIE1lc3NhZ2VTb3VyY2UsIE1l
c3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgaW50IGxpbmVO
dW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBwb3N0Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdChNZXNzYWdlU291cmNlLCBNZXNzYWdl
VHlwZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGludCBsaW5lTnVtYmVy
LCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCkgPSAwOwogCiAgICAgICAgIC8vIEludm9rZWQgd2hl
biBjbG9zZSgpIGlzIGludm9rZWQgb24gdGhlIHdvcmtlciBjb250ZXh0LgogICAgICAgICB2aXJ0
dWFsIHZvaWQgd29ya2VyQ29udGV4dENsb3NlZCgpID0gMDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
eG1sL1hNTEh0dHBSZXF1ZXN0LmNwcCBiL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcApp
bmRleCA4OTg0MmIzLi4xOGIwZWUwIDEwMDY0NAotLS0gYS9XZWJDb3JlL3htbC9YTUxIdHRwUmVx
dWVzdC5jcHAKKysrIGIvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCkBAIC0zMyw2ICsz
Myw3IEBACiAjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMu
aCIKICNpbmNsdWRlICJIVFRQUGFyc2Vycy5oIgorI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xs
ZXIuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JUaW1lbGluZUFnZW50LmgiCiAjaW5jbHVkZSAiUmVz
b3VyY2VFcnJvci5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgpAQCAtNjgxLDcgKzY4
Miw3IEBAIHN0YXRpYyB2b2lkIHJlcG9ydFVuc2FmZVVzYWdlKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbWVzCiAgICAgICAgIHJldHVybjsKICAgICAvLyBG
SVhNRTogSXQncyBub3QgZ29vZCB0byByZXBvcnQgdGhlIGJhZCB1c2FnZSB3aXRob3V0IGluZGlj
YXRpbmcgd2hhdCBzb3VyY2UgbGluZSBpdCBjYW1lIGZyb20uCiAgICAgLy8gV2Ugc2hvdWxkIHBh
c3MgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIHNvIHdlIGNhbiB0ZWxsIHRoZSBjb25zb2xlIHdoZXJl
IHRoZSBtaXN0YWtlIG9jY3VycmVkLgotICAgIGNvbnRleHQtPmFkZE1lc3NhZ2UoQ29uc29sZURl
c3RpbmF0aW9uLCBKU01lc3NhZ2VTb3VyY2UsIExvZ01lc3NhZ2VUeXBlLCBFcnJvck1lc3NhZ2VM
ZXZlbCwgbWVzc2FnZSwgMSwgU3RyaW5nKCkpOworICAgIGNvbnRleHQtPmFkZE1lc3NhZ2UoSlNN
ZXNzYWdlU291cmNlLCBMb2dNZXNzYWdlVHlwZSwgRXJyb3JNZXNzYWdlTGV2ZWwsIG1lc3NhZ2Us
IDEsIFN0cmluZygpKTsKIH0KIAogdm9pZCBYTUxIdHRwUmVxdWVzdDo6c2V0UmVxdWVzdEhlYWRl
cihjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUsIEV4Y2VwdGlv
bkNvZGUmIGVjKQpAQCAtODcxLDcgKzg3MiwxMCBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpkaWRG
aW5pc2hMb2FkaW5nKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcikKICAgICBpZiAobV9kZWNvZGVy
KQogICAgICAgICBtX3Jlc3BvbnNlVGV4dCArPSBtX2RlY29kZXItPmZsdXNoKCk7CiAKLSAgICBz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnJlc291cmNlUmV0cmlldmVkQnlYTUxIdHRwUmVxdWVz
dChpZGVudGlmaWVyLCBtX3Jlc3BvbnNlVGV4dCk7CisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKyAg
ICBpZiAoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yID0gc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkpCisgICAgICAgIGluc3BlY3Rvci0+cmVzb3Vy
Y2VSZXRyaWV2ZWRCeVhNTEh0dHBSZXF1ZXN0KGlkZW50aWZpZXIsIG1fcmVzcG9uc2VUZXh0KTsK
KyNlbmRpZgogCiAgICAgYm9vbCBoYWRMb2FkZXIgPSBtX2xvYWRlcjsKICAgICBtX2xvYWRlciA9
IDA7CmRpZmYgLS1naXQgYS9XZWJLaXQucHJvIGIvV2ViS2l0LnBybwppbmRleCAzYzZiMWE3Li42
ZDQ2NmUyIDEwMDY0NAotLS0gYS9XZWJLaXQucHJvCisrKyBiL1dlYktpdC5wcm8KQEAgLTUsMTkg
KzUsMTcgQEAgaW5jbHVkZShXZWJLaXQucHJpKQogCiBTVUJESVJTICs9IFwKICAgICAgICAgSmF2
YVNjcmlwdENvcmUgXAotICAgICAgICBXZWJDb3JlIFwKLSAgICAgICAgV2ViS2l0VG9vbHMvUXRM
YXVuY2hlcgorICAgICAgICBXZWJDb3JlCiAKLSFDT05GSUcoc3RhbmRhbG9uZV9wYWNrYWdlKSB7
Ci0gICAgU1VCRElSUyArPSBKYXZhU2NyaXB0Q29yZS9qc2MucHJvIFwKLSAgICAgICAgV2ViS2l0
L3F0L3Rlc3RzIFwKLSAgICAgICAgV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJl
bmRlclRyZWUucHJvCi0KLSAgICAhd2luMzI6IXN5bWJpYW4gewotICAgICAgICBTVUJESVJTICs9
IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0ltYWdlRGlmZi5wcm8KLSAgICAgICAgU1VC
RElSUyArPSBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9UZXN0TmV0c2NhcGVQbHVnaW4v
VGVzdE5ldHNjYXBlUGx1Z2luLnBybwotICAgIH0KKyMgSWYgdGhlIHNvdXJjZSBleGlzdHMsIGJ1
aWx0IGl0CitleGlzdHMoJCRQV0QvV2ViS2l0VG9vbHMvUXRMYXVuY2hlcik6IFNVQkRJUlMgKz0g
V2ViS2l0VG9vbHMvUXRMYXVuY2hlcgorZXhpc3RzKCQkUFdEL0phdmFTY3JpcHRDb3JlL2pzYy5w
cm8pOiBTVUJESVJTICs9IEphdmFTY3JpcHRDb3JlL2pzYy5wcm8KK2V4aXN0cygkJFBXRC9XZWJL
aXQvcXQvdGVzdHMpOiBTVUJESVJTICs9IFdlYktpdC9xdC90ZXN0cworZXhpc3RzKCQkUFdEL1dl
YktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlLnBybyk6IFNVQkRJUlMg
Kz0gV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWUucHJvCiAKKyF3
aW4zMjohc3ltYmlhbiB7CisgICAgZXhpc3RzKCQkUFdEL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJU
cmVlL3F0L0ltYWdlRGlmZi5wcm8pOiBTVUJESVJTICs9IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJU
cmVlL3F0L0ltYWdlRGlmZi5wcm8KKyAgICBleGlzdHMoJCRQV0QvV2ViS2l0VG9vbHMvRHVtcFJl
bmRlclRyZWUvcXQvVGVzdE5ldHNjYXBlUGx1Z2luL1Rlc3ROZXRzY2FwZVBsdWdpbi5wcm8pOiBT
VUJESVJTICs9IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L1Rlc3ROZXRzY2FwZVBsdWdp
bi9UZXN0TmV0c2NhcGVQbHVnaW4ucHJvCiB9CiAKIGJ1aWxkLXF0c2NyaXB0IHsKZGlmZiAtLWdp
dCBhL1dlYktpdC9DaGFuZ2VMb2cgYi9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGJjY2EzZTUuLmM5
OGJhZDYgMTAwNjQ0Ci0tLSBhL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE0IEBACisyMDEwLTA0LTA3ICBMZWFuZHJvIFBlcmVpcmEgIDxsZWFuZHJv
QHByb2Z1c2lvbi5tb2JpPgorCisgICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGggUm9oZGUgQ2hy
aXN0aWFuc2VuLgorCisgICAgICAgIEFkZCBld2tfdmlldyAodGhlIGhpZ2ggbGV2ZWwgb2JqZWN0
IHRvIGFjY2VzIHRoZSBXZWJLaXQtRUZMIGJyb3dzZXIKKyAgICAgICAgY29tcG9uZW50KSB0byBl
ZmwvZXdrLgorICAgICAgICBodHRwOi8vd2Via2l0Lm9yZy9iLzM1OTMyCisKKyAgICAgICAgKiBl
ZmwvZXdrL2V3a192aWV3LmNwcDogQWRkZWQuCisgICAgICAgICogZWZsL2V3ay9ld2tfdmlldy5o
OiBBZGRlZC4KKwogMjAxMC0wNC0wNSAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNv
bT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KZGlmZiAtLWdpdCBhL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGQ4
ODFjOWIuLmUzODdmNzIgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysr
IGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzNyBAQAorMjAxMC0wNC0w
NyAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZp
ZXdlZCBieSBZdXJ5IFNlbWlraGF0c2t5LgorCisgICAgICAgIENocm9taXVtOiBzdXBwb3J0IHRo
ZW1lcyBpbiBkZXZ0b29scyB3aW5kb3cuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvYXR0YWNobWVudC5jZ2k/YnVnaWQ9MzcyMTYKKworICAgICAgICAqIFdlYktpdC5neXBpOgor
ICAgICAgICAqIHNyYy9qcy9EZXZUb29scy5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5zZXRU
b29sYmFyQ29sb3JzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5yZXNldFRvb2xiYXJDb2xvcnMp
OgorICAgICAgICAqIHNyYy9qcy9JbWFnZXMvc2VnbWVudENocm9taXVtMi5wbmc6IEFkZGVkLgor
ICAgICAgICAqIHNyYy9qcy9JbWFnZXMvc2VnbWVudEhvdmVyQ2hyb21pdW0yLnBuZzogQWRkZWQu
CisgICAgICAgICogc3JjL2pzL0ltYWdlcy9zZWdtZW50U2VsZWN0ZWRDaHJvbWl1bTIucG5nOiBB
ZGRlZC4KKyAgICAgICAgKiBzcmMvanMvSW1hZ2VzL3N0YXR1c2JhckJhY2tncm91bmRDaHJvbWl1
bTIucG5nOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvanMvSW1hZ2VzL3N0YXR1c2Jhck1lbnVCdXR0
b25DaHJvbWl1bTIucG5nOiBBZGRlZC4KKworMjAxMC0wNC0wNyAgQW5kcmV5IEtvc3lha292ICA8
Y2FzZXFAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IFl1cnkgU2VtaWtoYXRz
a3kuCisKKyAgICAgICAgUmVtb3ZlZCBpbnNwZWN0b3IgbWV0aG9kcyBmcm9tIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQgYW5kIGRlcml2ZWQgY2xhc3Nlcy4KKyAgICAgICAgUmVtb3ZlZCBNZXNzYWdl
RGVzdGluYXRpb24gcGFyYW1ldGVyIGZyb20gY29uc29sZS1yZWxhdGVkIGNhbGxzICh3ZSBub3cg
YWx3YXlzCisgICAgICAgIGxvZyB0byB0aGUgc2FtZSBkZXN0aW5hdGlvbihzKSkuCisgICAgICAg
IFJlbW92ZWQgcmVkdW5kYW50IEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZExvYWRSZXNv
dXJjZUJ5WE1MSHR0cFJlcXVlc3QoKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MzY5NDkKKworICAgICAgICAqIHB1YmxpYy9XZWJDb21tb25Xb3JrZXJD
bGllbnQuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29tbW9uV29ya2VyQ2xpZW50Ojpwb3N0Q29u
c29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdCk6CisgICAgICAgICogc3JjL0ZyYW1lTG9hZGVyQ2xp
ZW50SW1wbC5jcHA6CisgICAgICAgICogc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5oOgorICAg
ICAgICAqIHNyYy9XZWJXb3JrZXJCYXNlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViV29ya2Vy
QmFzZTo6cG9zdENvbnNvbGVNZXNzYWdlVG9Xb3JrZXJPYmplY3QpOgorICAgICAgICAoV2ViS2l0
OjpXZWJXb3JrZXJCYXNlOjpwb3N0Q29uc29sZU1lc3NhZ2VUYXNrKToKKyAgICAgICAgKiBzcmMv
V2ViV29ya2VyQmFzZS5oOgorICAgICAgICAqIHNyYy9XZWJXb3JrZXJDbGllbnRJbXBsLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViV29ya2VyQ2xpZW50SW1wbDo6cG9zdENvbnNvbGVNZXNzYWdl
VG9Xb3JrZXJPYmplY3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJXb3JrZXJDbGllbnRJbXBsOjpw
b3N0Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdFRhc2spOgorICAgICAgICAqIHNyYy9XZWJX
b3JrZXJDbGllbnRJbXBsLmg6CisKKzIwMTAtMDQtMDcgIEplcmVteSBPcmxvdyAgPGpvcmxvd0Bj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gRmlzaGVyLgorCisgICAg
ICAgIFtDaHJvbWl1bV0gV2ViSURCRGF0YWJhc2VFcnJvcjo6YXNzaWduIGRvZXNuJ3Qgd29yayBj
b3JyZWN0bHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTM3MjA5CisKKyAgICAgICAgKiBzcmMvV2ViSURCRGF0YWJhc2VFcnJvci5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYklEQkRhdGFiYXNlRXJyb3I6OmFzc2lnbik6CisKKzIwMTAtMDQtMDcgIERh
d2l0IEFsZW1heWVodSAgPGFkYXdpdEBrZGUub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IFNp
bW9uIEhhdXNtYW5uLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0zNjgyNworCisgICAgICAgIFVwZGF0ZWQgdGhlIFdlYkNvcmU6OnNob3VsZFRyZWF0
QXNBdHRhY2hlbWVudCBmdW5jdGlvbiBjYWxsIHdpdGggdGhlCisgICAgICAgIG5ldyBtb3JlIGdl
bmVyaWMgcmVwbGFjZW1lbnQgV2ViQ29yZTo6Y29udGVudERpc3Bvc2l0aW9uVHlwZS4KKworICAg
ICAgICBTZWUgY29tbWVudHMgMzktNDIgaW4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTM2Mzk1CisKKyAgICAgICAgKiBzcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRJbXBsOjpkaXNwYXRjaERlY2lk
ZVBvbGljeUZvck1JTUVUeXBlKToKKworMjAxMC0wNC0wNyAgSm9jaGVuIEVpc2luZ2VyICA8am9j
aGVuQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBGaXNoZXIuCisK
KyAgICAgICAgQWRkIGNyZWF0ZUFwcGxpY2F0aW9uQ2FjaGVIb3N0IHRvIFdlYkZyYW1lQ2xpZW50
IHNvCisgICAgICAgIHRoZSBBcHBsaWNhdGlvbkNhY2hlSG9zdCBoYXMgYWNjZXNzIHRvIGl0cyBm
cmFtZS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MzY4ODIKKworICAgICAgICAqIHB1YmxpYy9XZWJGcmFtZUNsaWVudC5oOgorICAgICAgICAoV2Vi
S2l0OjpXZWJGcmFtZUNsaWVudDo6Y3JlYXRlQXBwbGljYXRpb25DYWNoZUhvc3QpOgorICAgICAg
ICAqIHNyYy9BcHBsaWNhdGlvbkNhY2hlSG9zdEludGVybmFsLmg6CisgICAgICAgIChXZWJDb3Jl
OjpBcHBsaWNhdGlvbkNhY2hlSG9zdEludGVybmFsOjpBcHBsaWNhdGlvbkNhY2hlSG9zdEludGVy
bmFsKToKKworMjAxMC0wNC0wNiAgTmljb2xhcyBXZWJlciAgPHRoYWtpc0BjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGltaXRyaSBHbGF6a292LgorCisgICAgICAgIFVzZSBk
cmFnIGltYWdlcyBvbiBPUyBYIGFzIHdlbGwuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0zNzA2OQorCisgICAgICAgICogc3JjL0RyYWdDbGllbnRJbXBs
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6RHJhZ0NsaWVudEltcGw6OnN0YXJ0RHJhZyk6CisKKzIw
MTAtMDQtMDYgIFZhbmdlbGlzIEtva2tldmlzICA8dmFuZ2VsaXNAY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IERpbWl0cmkgR2xhemtvdi4KKworICAgICAgICBDaGFuZ2luZyBy
ZWZlcmVuY2VzIHRvIEdyYXBoaWNzIExheWVyIHJlbGF0ZWQgY2xhc3NlcyBmcm9tICpTa2lhIHRv
ICpDaHJvbWl1bS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTM3MTE2CisKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWV3SW1wbDo6cGFpbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6
c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBs
Ojp1cGRhdGVSb290TGF5ZXJDb250ZW50cyk6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmg6
CisKKzIwMTAtMDQtMDYgIEphbWVzIEhhd2tpbnMgIDxqaGF3a2luc0BjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KKworICAgICAgICBbQ2hyb21pdW1dIElt
cGxlbWVudCBXZWJJbnB1dEVsZW1lbnQ6Om1heExlbmd0aC4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM3MTcyCisKKyAgICAgICAgKiBwdWJsaWMvV2Vi
SW5wdXRFbGVtZW50Lmg6CisgICAgICAgICogc3JjL1dlYklucHV0RWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYklucHV0RWxlbWVudDo6bWF4TGVuZ3RoKToKKworMjAxMC0wNC0wNiAg
RXZhbiBTdGFkZSAgPGVzdGFkZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
RGltaXRyaSBHbGF6a292LgorCisgICAgICAgIFtjaHJvbWl1bV0gbmVlZCBEcmFnSW1hZ2UgaW1w
bGVtZW50YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTM1ODExCisKKyAgICAgICAgQmFzaWMgaW1wbGVtZW50YXRpb24gdXNpbmcgU2tCaXRtYXAu
IFRyYW5zZm9ybWF0aW9ucyBhcmUgbm90IHN1cHBvcnRlZAorICAgICAgICB5ZXQuIE5vIGltcGxl
bWVudGF0aW9uIGZvciBtYWMuCisKKyAgICAgICAgVGhpcyB3YXMgcHJldmlvdXNseSBjb21taXR0
ZWQgYnV0IHJvbGxlZCBiYWNrIGZvciBicmVha2luZyBsYXlvdXQKKyAgICAgICAgdGVzdHMuCisK
KyAgICAgICAgKiBwdWJsaWMvV2ViVmlld0NsaWVudC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJW
aWV3Q2xpZW50OjpzdGFydERyYWdnaW5nKToKKyAgICAgICAgKiBzcmMvRHJhZ0NsaWVudEltcGwu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpEcmFnQ2xpZW50SW1wbDo6c3RhcnREcmFnKTogbmV3OiBj
aGVjayBmb3IgbnVsbCBkcmFnSW1hZ2UuCisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnN0YXJ0RHJhZ2dpbmcpOgorICAgICAgICAq
IHNyYy9XZWJWaWV3SW1wbC5oOgorCiAyMDEwLTA0LTA2ICBKYW1lcyBIYXdraW5zICA8amhhd2tp
bnNAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERpbWl0cmkgR2xhemtvdi4K
ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaSBiL1dlYktpdC9jaHJvbWl1
bS9XZWJLaXQuZ3lwaQppbmRleCA2OWIxNDc5Li5mMWM2YzJkIDEwMDY0NAotLS0gYS9XZWJLaXQv
Y2hyb21pdW0vV2ViS2l0Lmd5cGkKKysrIGIvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCkBA
IC00NywxNCArNDcsMTkgQEAKICAgICAgICAgXSwKICAgICAgICAgJ2RldnRvb2xzX2ltYWdlX2Zp
bGVzJzogWwogICAgICAgICAgICAgJ3NyYy9qcy9JbWFnZXMvc2VnbWVudENocm9taXVtLnBuZycs
CisgICAgICAgICAgICAnc3JjL2pzL0ltYWdlcy9zZWdtZW50Q2hyb21pdW0yLnBuZycsCiAgICAg
ICAgICAgICAnc3JjL2pzL0ltYWdlcy9zZWdtZW50SG92ZXJDaHJvbWl1bS5wbmcnLAorICAgICAg
ICAgICAgJ3NyYy9qcy9JbWFnZXMvc2VnbWVudEhvdmVyQ2hyb21pdW0yLnBuZycsCiAgICAgICAg
ICAgICAnc3JjL2pzL0ltYWdlcy9zZWdtZW50SG92ZXJFbmRDaHJvbWl1bS5wbmcnLAogICAgICAg
ICAgICAgJ3NyYy9qcy9JbWFnZXMvc2VnbWVudFNlbGVjdGVkQ2hyb21pdW0ucG5nJywKKyAgICAg
ICAgICAgICdzcmMvanMvSW1hZ2VzL3NlZ21lbnRTZWxlY3RlZENocm9taXVtMi5wbmcnLAogICAg
ICAgICAgICAgJ3NyYy9qcy9JbWFnZXMvc2VnbWVudFNlbGVjdGVkRW5kQ2hyb21pdW0ucG5nJywK
ICAgICAgICAgICAgICdzcmMvanMvSW1hZ2VzL3N0YXR1c2JhckJhY2tncm91bmRDaHJvbWl1bS5w
bmcnLAorICAgICAgICAgICAgJ3NyYy9qcy9JbWFnZXMvc3RhdHVzYmFyQmFja2dyb3VuZENocm9t
aXVtMi5wbmcnLAogICAgICAgICAgICAgJ3NyYy9qcy9JbWFnZXMvc3RhdHVzYmFyQm90dG9tQmFj
a2dyb3VuZENocm9taXVtLnBuZycsCiAgICAgICAgICAgICAnc3JjL2pzL0ltYWdlcy9zdGF0dXNi
YXJCdXR0b25zQ2hyb21pdW0ucG5nJywKICAgICAgICAgICAgICdzcmMvanMvSW1hZ2VzL3N0YXR1
c2Jhck1lbnVCdXR0b25DaHJvbWl1bS5wbmcnLAorICAgICAgICAgICAgJ3NyYy9qcy9JbWFnZXMv
c3RhdHVzYmFyTWVudUJ1dHRvbkNocm9taXVtMi5wbmcnLAogICAgICAgICAgICAgJ3NyYy9qcy9J
bWFnZXMvc3RhdHVzYmFyTWVudUJ1dHRvblNlbGVjdGVkQ2hyb21pdW0ucG5nJywKICAgICAgICAg
XSwKICAgICB9LApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDb21tb25X
b3JrZXJDbGllbnQuaCBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ29tbW9uV29ya2VyQ2xp
ZW50LmgKaW5kZXggNzcxZmZmZi4uZjRkZjE2ZCAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9XZWJDb21tb25Xb3JrZXJDbGllbnQuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYkNvbW1vbldvcmtlckNsaWVudC5oCkBAIC00OSwxNCArNDksMTggQEAgcHVibGljOgog
ICAgICAgICBjb25zdCBXZWJTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbGluZU51bWJlciwKICAg
ICAgICAgY29uc3QgV2ViU3RyaW5nJiBzb3VyY2VVUkwpID0gMDsKIAotICAgIHZpcnR1YWwgdm9p
ZCBwb3N0Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdCgKLSAgICAgICAgaW50IGRlc3RpbmF0
aW9uSWRlbnRpZmllciwKLSAgICAgICAgaW50IHNvdXJjZUlkZW50aWZpZXIsCi0gICAgICAgIGlu
dCBtZXNzYWdlVHlwZSwKLSAgICAgICAgaW50IG1lc3NhZ2VMZXZlbCwKLSAgICAgICAgY29uc3Qg
V2ViU3RyaW5nJiBtZXNzYWdlLAotICAgICAgICBpbnQgbGluZU51bWJlciwKLSAgICAgICAgY29u
c3QgV2ViU3RyaW5nJiBzb3VyY2VVUkwpID0gMDsKKyAgICAvLyBGSVhNRTogdGhlIGJlbG93IGlz
IGZvciBjb21wYXRpYmlsaXR5IG9ubHkgYW5kIHNob3VsZCBiZSAgIAorICAgIC8vIHJlbW92ZWQg
b25jZSBDaHJvbWl1bSBpcyB1cGRhdGVkIHRvIHJlbW92ZSBtZXNzYWdlCisgICAgLy8gZGVzdGlu
YXRpb24gcGFyYW1ldGVyIDxodHRwOi8vd2Via2l0Lm9yZy9iLzM3MTU1Pi4KKyAgICB2aXJ0dWFs
IHZvaWQgcG9zdENvbnNvbGVNZXNzYWdlVG9Xb3JrZXJPYmplY3QoaW50LCBpbnQgc291cmNlSWRl
bnRpZmllciwgaW50IG1lc3NhZ2VUeXBlLCBpbnQgbWVzc2FnZUxldmVsLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJTdHJpbmcmIG1l
c3NhZ2UsIGludCBsaW5lTnVtYmVyLCBjb25zdCBXZWJTdHJpbmcmIHNvdXJjZVVSTCkgPSAwOwor
CisgICAgdmlydHVhbCB2b2lkIHBvc3RDb25zb2xlTWVzc2FnZVRvV29ya2VyT2JqZWN0KGludCBz
b3VyY2VJZGVudGlmaWVyLCBpbnQgbWVzc2FnZVR5cGUsIGludCBtZXNzYWdlTGV2ZWwsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlN0
cmluZyYgbWVzc2FnZSwgaW50IGxpbmVOdW1iZXIsIGNvbnN0IFdlYlN0cmluZyYgc291cmNlVVJM
KQorICAgIHsKKyAgICAgICAgcG9zdENvbnNvbGVNZXNzYWdlVG9Xb3JrZXJPYmplY3QoMCwgc291
cmNlSWRlbnRpZmllciwgbWVzc2FnZVR5cGUsIG1lc3NhZ2VMZXZlbCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSwgbGluZU51bWJlciwgc291cmNlVVJM
KTsKKyAgICB9CiAKICAgICB2aXJ0dWFsIHZvaWQgd29ya2VyQ29udGV4dENsb3NlZCgpID0gMDsK
ICAgICB2aXJ0dWFsIHZvaWQgd29ya2VyQ29udGV4dERlc3Ryb3llZCgpID0gMDsKZGlmZiAtLWdp
dCBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRnJhbWVDbGllbnQuaCBiL1dlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViRnJhbWVDbGllbnQuaAppbmRleCAwMzYwMDg3Li4zMTVjZjg3IDEwMDY0
NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkZyYW1lQ2xpZW50LmgKKysrIGIvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9XZWJGcmFtZUNsaWVudC5oCkBAIC0zOCw2ICszOCw4IEBACiAK
IG5hbWVzcGFjZSBXZWJLaXQgewogCitjbGFzcyBXZWJBcHBsaWNhdGlvbkNhY2hlSG9zdDsKK2Ns
YXNzIFdlYkFwcGxpY2F0aW9uQ2FjaGVIb3N0Q2xpZW50OwogY2xhc3MgV2ViQ29va2llSmFyOwog
Y2xhc3MgV2ViRGF0YVNvdXJjZTsKIGNsYXNzIFdlYkZvcm1FbGVtZW50OwpAQCAtNzUsNiArNzcs
OSBAQCBwdWJsaWM6CiAgICAgLy8gTWF5IHJldHVybiBudWxsLgogICAgIHZpcnR1YWwgV2ViTWVk
aWFQbGF5ZXIqIGNyZWF0ZU1lZGlhUGxheWVyKFdlYkZyYW1lKiwgV2ViTWVkaWFQbGF5ZXJDbGll
bnQqKSB7IHJldHVybiAwOyB9CiAKKyAgICAvLyBNYXkgcmV0dXJuIG51bGwuCisgICAgdmlydHVh
bCBXZWJBcHBsaWNhdGlvbkNhY2hlSG9zdCogY3JlYXRlQXBwbGljYXRpb25DYWNoZUhvc3QoV2Vi
RnJhbWUqLCBXZWJBcHBsaWNhdGlvbkNhY2hlSG9zdENsaWVudCopIHsgcmV0dXJuIDA7IH0KKwog
ICAgIAogICAgIC8vIFNlcnZpY2VzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYklucHV0RWxlbWVudC5oIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJbnB1
dEVsZW1lbnQuaAppbmRleCA0MzRkNjNjLi4wZmVjNjNmIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hy
b21pdW0vcHVibGljL1dlYklucHV0RWxlbWVudC5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViSW5wdXRFbGVtZW50LmgKQEAgLTgyLDYgKzgyLDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7
CiAgICAgICAgIFdFQktJVF9BUEkgYm9vbCBhdXRvQ29tcGxldGUoKSBjb25zdDsKICAgICAgICAg
V0VCS0lUX0FQSSBib29sIGlzRW5hYmxlZEZvcm1Db250cm9sKCkgY29uc3Q7CiAgICAgICAgIFdF
QktJVF9BUEkgSW5wdXRUeXBlIGlucHV0VHlwZSgpIGNvbnN0OworICAgICAgICBXRUJLSVRfQVBJ
IGludCBtYXhMZW5ndGgoKSBjb25zdDsKICAgICAgICAgV0VCS0lUX0FQSSBib29sIGlzQWN0aXZh
dGVkU3VibWl0KCkgY29uc3Q7CiAgICAgICAgIFdFQktJVF9BUEkgdm9pZCBzZXRBY3RpdmF0ZWRT
dWJtaXQoYm9vbCk7CiAgICAgICAgIFdFQktJVF9BUEkgdm9pZCBzZXRWYWx1ZShjb25zdCBXZWJT
dHJpbmcmIHZhbHVlKTsKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVmll
d0NsaWVudC5oIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJWaWV3Q2xpZW50LmgKaW5kZXgg
NDFjYjNjOC4uYzJhOTZkYyAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJW
aWV3Q2xpZW50LmgKKysrIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJWaWV3Q2xpZW50LmgK
QEAgLTQ4LDYgKzQ4LDcgQEAgY2xhc3MgV2ViRHJhZ0RhdGE7CiBjbGFzcyBXZWJGaWxlQ2hvb3Nl
ckNvbXBsZXRpb247CiBjbGFzcyBXZWJGcmFtZTsKIGNsYXNzIFdlYkdlb2xvY2F0aW9uU2Vydmlj
ZTsKK2NsYXNzIFdlYkltYWdlOwogY2xhc3MgV2ViTm9kZTsKIGNsYXNzIFdlYk5vdGlmaWNhdGlv
blByZXNlbnRlcjsKIGNsYXNzIFdlYlJhbmdlOwpAQCAtMjI0LDcgKzIyNSw3IEBAIHB1YmxpYzoK
IAogICAgIC8vIENhbGxlZCB3aGVuIGEgZHJhZy1uLWRyb3Agb3BlcmF0aW9uIHNob3VsZCBiZWdp
bi4KICAgICB2aXJ0dWFsIHZvaWQgc3RhcnREcmFnZ2luZygKLSAgICAgICAgY29uc3QgV2ViUG9p
bnQmIGZyb20sIGNvbnN0IFdlYkRyYWdEYXRhJiwgV2ViRHJhZ09wZXJhdGlvbnNNYXNrKSB7IH0K
KyAgICAgICAgY29uc3QgV2ViRHJhZ0RhdGEmLCBXZWJEcmFnT3BlcmF0aW9uc01hc2ssIGNvbnN0
IFdlYkltYWdlJiwgY29uc3QgV2ViUG9pbnQmKSB7IH0KIAogICAgIC8vIENhbGxlZCB0byBkZXRl
cm1pbmUgaWYgZHJhZy1uLWRyb3Agb3BlcmF0aW9ucyBtYXkgaW5pdGlhdGUgYSBwYWdlCiAgICAg
Ly8gbmF2aWdhdGlvbi4KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvQXBwbGljYXRp
b25DYWNoZUhvc3RJbnRlcm5hbC5oIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9BcHBsaWNhdGlvbkNh
Y2hlSG9zdEludGVybmFsLmgKaW5kZXggM2U1MmMxYi4uZDMxMjBkYyAxMDA2NDQKLS0tIGEvV2Vi
S2l0L2Nocm9taXVtL3NyYy9BcHBsaWNhdGlvbkNhY2hlSG9zdEludGVybmFsLmgKKysrIGIvV2Vi
S2l0L2Nocm9taXVtL3NyYy9BcHBsaWNhdGlvbkNhY2hlSG9zdEludGVybmFsLmgKQEAgLTMzLDcg
KzMzLDEwIEBACiAKICNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQogCisjaW5j
bHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKICNpbmNsdWRlICJXZWJBcHBsaWNhdGlvbkNhY2hlSG9z
dENsaWVudC5oIgorI2luY2x1ZGUgIldlYkZyYW1lQ2xpZW50LmgiCisjaW5jbHVkZSAiV2ViRnJh
bWVJbXBsLmgiCiAjaW5jbHVkZSAiV2ViS2l0LmgiCiAjaW5jbHVkZSAiV2ViS2l0Q2xpZW50Lmgi
CiAKQEAgLTQ0LDcgKzQ3LDExIEBAIHB1YmxpYzoKICAgICBBcHBsaWNhdGlvbkNhY2hlSG9zdElu
dGVybmFsKEFwcGxpY2F0aW9uQ2FjaGVIb3N0KiBob3N0KQogICAgICAgICA6IG1faW5uZXJIb3N0
KGhvc3QpCiAgICAgewotICAgICAgICBtX291dGVySG9zdC5zZXQoV2ViS2l0Ojp3ZWJLaXRDbGll
bnQoKS0+Y3JlYXRlQXBwbGljYXRpb25DYWNoZUhvc3QodGhpcykpOworICAgICAgICBXZWJLaXQ6
OldlYkZyYW1lSW1wbCogd2ViRnJhbWUgPSBXZWJLaXQ6OldlYkZyYW1lSW1wbDo6ZnJvbUZyYW1l
KGhvc3QtPm1fZG9jdW1lbnRMb2FkZXItPmZyYW1lKCkpOworICAgICAgICBBU1NFUlQod2ViRnJh
bWUpOworICAgICAgICBtX291dGVySG9zdC5zZXQod2ViRnJhbWUtPmNsaWVudCgpLT5jcmVhdGVB
cHBsaWNhdGlvbkNhY2hlSG9zdCh3ZWJGcmFtZSwgdGhpcykpOworICAgICAgICBpZiAoIW1fb3V0
ZXJIb3N0LmdldCgpKQorICAgICAgICAgICAgbV9vdXRlckhvc3Quc2V0KFdlYktpdDo6d2ViS2l0
Q2xpZW50KCktPmNyZWF0ZUFwcGxpY2F0aW9uQ2FjaGVIb3N0KHRoaXMpKTsKICAgICB9CiAKICAg
ICB2aXJ0dWFsIHZvaWQgbm90aWZ5RXZlbnRMaXN0ZW5lcihXZWJLaXQ6OldlYkFwcGxpY2F0aW9u
Q2FjaGVIb3N0OjpFdmVudElEIGV2ZW50SUQpCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0v
c3JjL0RyYWdDbGllbnRJbXBsLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvRHJhZ0NsaWVudElt
cGwuY3BwCmluZGV4IDY3MWU3Y2EuLjk4NzQ0MDEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1
bS9zcmMvRHJhZ0NsaWVudEltcGwuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvRHJhZ0Ns
aWVudEltcGwuY3BwCkBAIC0zMCwxMSArMzAsMTQgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIkRyYWdDbGllbnRJbXBsLmgiCi0KKyNpbmNsdWRlICJEcmFnSW1hZ2VSZWYuaCIK
ICNpbmNsdWRlICJDaHJvbWl1bURhdGFPYmplY3QuaCIKICNpbmNsdWRlICJDbGlwYm9hcmRDaHJv
bWl1bS5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiTmF0aXZlSW1hZ2VTa2lhLmgi
CisjaW5jbHVkZSAiV2ViQ29tbW9uLmgiCiAjaW5jbHVkZSAiV2ViRHJhZ0RhdGEuaCIKKyNpbmNs
dWRlICJXZWJJbWFnZS5oIgogI2luY2x1ZGUgIldlYlZpZXdDbGllbnQuaCIKICNpbmNsdWRlICJX
ZWJWaWV3SW1wbC5oIgogCkBAIC04MSw4ICs4NCwxNiBAQCB2b2lkIERyYWdDbGllbnRJbXBsOjpz
dGFydERyYWcoRHJhZ0ltYWdlUmVmIGRyYWdJbWFnZSwKIAogICAgIERyYWdPcGVyYXRpb24gZHJh
Z09wZXJhdGlvbk1hc2sgPSBjbGlwYm9hcmQtPnNvdXJjZU9wZXJhdGlvbigpOwogCisgICAgSW50
U2l6ZSBvZmZzZXRTaXplKGV2ZW50UG9zIC0gZHJhZ0ltYWdlT3JpZ2luKTsKKyAgICBXZWJQb2lu
dCBvZmZzZXRQb2ludChvZmZzZXRTaXplLndpZHRoKCksIG9mZnNldFNpemUuaGVpZ2h0KCkpOwog
ICAgIG1fd2ViVmlldy0+c3RhcnREcmFnZ2luZygKLSAgICAgICAgZXZlbnRQb3MsIGRyYWdEYXRh
LCBzdGF0aWNfY2FzdDxXZWJEcmFnT3BlcmF0aW9uc01hc2s+KGRyYWdPcGVyYXRpb25NYXNrKSk7
CisgICAgICAgIGRyYWdEYXRhLCBzdGF0aWNfY2FzdDxXZWJEcmFnT3BlcmF0aW9uc01hc2s+KGRy
YWdPcGVyYXRpb25NYXNrKSwKKyNpZiBXRUJLSVRfVVNJTkdfU0tJQQorICAgICAgICBkcmFnSW1h
Z2UgPyBXZWJJbWFnZSgqZHJhZ0ltYWdlKSA6IFdlYkltYWdlKCksCisjZWxzZQorICAgICAgICBk
cmFnSW1hZ2UgPyBXZWJJbWFnZShkcmFnSW1hZ2UpIDogV2ViSW1hZ2UoKSwKKyNlbmRpZgorICAg
ICAgICBvZmZzZXRQb2ludCk7CiB9CiAKIERyYWdJbWFnZVJlZiBEcmFnQ2xpZW50SW1wbDo6Y3Jl
YXRlRHJhZ0ltYWdlRm9yTGluayhLVVJMJiwgY29uc3QgU3RyaW5nJiBsYWJlbCwgRnJhbWUqKQpk
aWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9GcmFtZUxvYWRlckNsaWVudEltcGwuY3Bw
IGIvV2ViS2l0L2Nocm9taXVtL3NyYy9GcmFtZUxvYWRlckNsaWVudEltcGwuY3BwCmluZGV4IGIw
MWI2NzUuLmNlY2ZiYjMgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvRnJhbWVMb2Fk
ZXJDbGllbnRJbXBsLmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0ZyYW1lTG9hZGVyQ2xp
ZW50SW1wbC5jcHAKQEAgLTQwNiwxMiArNDA2LDYgQEAgYm9vbCBGcmFtZUxvYWRlckNsaWVudElt
cGw6OmRpc3BhdGNoRGlkTG9hZFJlc291cmNlRnJvbU1lbW9yeUNhY2hlKAogICAgIHJldHVybiBm
YWxzZTsgIC8vIERvIG5vdCBzdXBwcmVzcyByZW1haW5pbmcgbm90aWZpY2F0aW9ucwogfQogCi12
b2lkIEZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6ZGlzcGF0Y2hEaWRMb2FkUmVzb3VyY2VCeVhNTEh0
dHBSZXF1ZXN0KAotICAgIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwKLSAgICBjb25zdCBTY3Jp
cHRTdHJpbmcmIHNvdXJjZSkKLXsKLX0KLQogdm9pZCBGcmFtZUxvYWRlckNsaWVudEltcGw6OmRp
c3BhdGNoRGlkSGFuZGxlT25sb2FkRXZlbnRzKCkKIHsKICAgICBpZiAobV93ZWJGcmFtZS0+Y2xp
ZW50KCkpCkBAIC04NDMsNyArODM3LDcgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudEltcGw6OmRp
c3BhdGNoRGVjaWRlUG9saWN5Rm9yTUlNRVR5cGUoCiAgICAgaWYgKHN0YXR1c0NvZGUgPT0gMjA0
IHx8IHN0YXR1c0NvZGUgPT0gMjA1KSB7CiAgICAgICAgIC8vIFRoZSBzZXJ2ZXIgZG9lcyBub3Qg
d2FudCB1cyB0byByZXBsYWNlIHRoZSBwYWdlIGNvbnRlbnRzLgogICAgICAgICBhY3Rpb24gPSBQ
b2xpY3lJZ25vcmU7Ci0gICAgfSBlbHNlIGlmIChXZWJDb3JlOjpzaG91bGRUcmVhdEFzQXR0YWNo
bWVudChyZXNwb25zZSkpIHsKKyAgICB9IGVsc2UgaWYgKFdlYkNvcmU6OmNvbnRlbnREaXNwb3Np
dGlvblR5cGUocmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkKCJDb250ZW50LURpc3Bvc2l0aW9uIikp
ID09IFdlYkNvcmU6OkNvbnRlbnREaXNwb3NpdGlvbkF0dGFjaG1lbnQpIHsKICAgICAgICAgLy8g
VGhlIHNlcnZlciB3YW50cyB1cyB0byBkb3dubG9hZCBpbnN0ZWFkIG9mIHJlcGxhY2luZyB0aGUg
cGFnZSBjb250ZW50cy4KICAgICAgICAgLy8gRG93bmxvYWRpbmcgaXMgaGFuZGxlZCBieSB0aGUg
ZW1iZWRkZXIsIGJ1dCB3ZSBzdGlsbCBnZXQgdGhlIGluaXRpYWwKICAgICAgICAgLy8gcmVzcG9u
c2Ugc28gdGhhdCB3ZSBjYW4gaWdub3JlIGl0IGFuZCBjbGVhbiB1cCBwcm9wZXJseS4KZGlmZiAt
LWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmggYi9XZWJL
aXQvY2hyb21pdW0vc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5oCmluZGV4IDg5ZDdhZDEuLjFj
YmMxZGUgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvRnJhbWVMb2FkZXJDbGllbnRJ
bXBsLmgKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9GcmFtZUxvYWRlckNsaWVudEltcGwuaApA
QCAtODksNyArODksNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkRmlu
aXNoTG9hZGluZyhXZWJDb3JlOjpEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcgaWRlbnRp
Zmllcik7CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkRmFpbExvYWRpbmcoV2ViQ29yZTo6
RG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6
OlJlc291cmNlRXJyb3ImKTsKICAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hEaWRMb2FkUmVzb3Vy
Y2VGcm9tTWVtb3J5Q2FjaGUoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqLCBjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgaW50
IGxlbmd0aCk7Ci0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkTG9hZFJlc291cmNlQnlYTUxI
dHRwUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OlNjcmlw
dFN0cmluZyYpOwogICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZEhhbmRsZU9ubG9hZEV2ZW50
cygpOwogICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZv
clByb3Zpc2lvbmFsTG9hZCgpOwogICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZENhbmNlbENs
aWVudFJlZGlyZWN0KCk7CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkRh
dGFiYXNlRXJyb3IuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJEYXRhYmFzZUVycm9y
LmNwcAppbmRleCAyYWU4NTQ0Li4xN2ZkZDM4IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYklEQkRhdGFiYXNlRXJyb3IuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
SURCRGF0YWJhc2VFcnJvci5jcHAKQEAgLTQ3LDcgKzQ3LDcgQEAgV2ViSURCRGF0YWJhc2VFcnJv
cjo6fldlYklEQkRhdGFiYXNlRXJyb3IoKQogCiB2b2lkIFdlYklEQkRhdGFiYXNlRXJyb3I6OmFz
c2lnbihjb25zdCBXZWJJREJEYXRhYmFzZUVycm9yJiB2YWx1ZSkKIHsKLSAgICBtX3ByaXZhdGUg
PSB2YWx1ZTsKKyAgICBtX3ByaXZhdGUgPSB2YWx1ZS5tX3ByaXZhdGU7CiB9CiAKIHZvaWQgV2Vi
SURCRGF0YWJhc2VFcnJvcjo6YXNzaWduKHVuc2lnbmVkIHNob3J0IGNvZGUsIGNvbnN0IFdlYlN0
cmluZyYgbWVzc2FnZSkKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW5wdXRF
bGVtZW50LmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW5wdXRFbGVtZW50LmNwcAppbmRl
eCAzNzVmYzVhLi4xZWFiOTFmIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklu
cHV0RWxlbWVudC5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJbnB1dEVsZW1lbnQu
Y3BwCkBAIC01NSw2ICs1NSwxMSBAQCBXZWJJbnB1dEVsZW1lbnQ6OklucHV0VHlwZSBXZWJJbnB1
dEVsZW1lbnQ6OmlucHV0VHlwZSgpIGNvbnN0CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PElucHV0
VHlwZT4oY29uc3RVbndyYXA8SFRNTElucHV0RWxlbWVudD4oKS0+aW5wdXRUeXBlKCkpOwogfQog
CitpbnQgV2ViSW5wdXRFbGVtZW50OjptYXhMZW5ndGgoKSBjb25zdAoreworICAgIHJldHVybiBj
b25zdFVud3JhcDxIVE1MSW5wdXRFbGVtZW50PigpLT5tYXhMZW5ndGgoKTsKK30KKwogYm9vbCBX
ZWJJbnB1dEVsZW1lbnQ6OmlzQWN0aXZhdGVkU3VibWl0KCkgY29uc3QKIHsKICAgICByZXR1cm4g
Y29uc3RVbndyYXA8SFRNTElucHV0RWxlbWVudD4oKS0+aXNBY3RpdmF0ZWRTdWJtaXQoKTsKZGlm
ZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwIGIvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKaW5kZXggZDg1NjMyOS4uNjNlMWU1ZiAxMDA2NDQK
LS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKKysrIGIvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKQEAgLTg3LDYgKzg3LDcgQEAKICNpbmNsdWRlICJX
ZWJEZXZUb29sc0FnZW50UHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYkRyYWdEYXRhLmgiCiAjaW5j
bHVkZSAiV2ViRnJhbWVJbXBsLmgiCisjaW5jbHVkZSAiV2ViSW1hZ2UuaCIKICNpbmNsdWRlICJX
ZWJJbnB1dEV2ZW50LmgiCiAjaW5jbHVkZSAiV2ViSW5wdXRFdmVudENvbnZlcnNpb24uaCIKICNp
bmNsdWRlICJXZWJNZWRpYVBsYXllckFjdGlvbi5oIgpAQCAtOTQxLDExICs5NDIsMTEgQEAgdm9p
ZCBXZWJWaWV3SW1wbDo6cGFpbnQoV2ViQ2FudmFzKiBjYW52YXMsIGNvbnN0IFdlYlJlY3QmIHJl
Y3QpCiAgICAgICAgIHVwZGF0ZVJvb3RMYXllckNvbnRlbnRzKHJlY3QpOwogCiAgICAgICAgIC8v
IENvbXBvc2l0ZSBldmVyeXRoaW5nIGludG8gdGhlIGNhbnZhcyB0aGF0J3MgcGFzc2VkIHRvIHVz
LgotICAgICAgICBTa0lSZWN0IGNhbnZhc0lSZWN0OwotICAgICAgICBjYW52YXNJUmVjdC5zZXQo
cmVjdC54LCByZWN0LnksIHJlY3QueCArIHJlY3Qud2lkdGgsIHJlY3QueSArIHJlY3QuaGVpZ2h0
KTsKLSAgICAgICAgU2tSZWN0IGNhbnZhc1JlY3Q7Ci0gICAgICAgIGNhbnZhc1JlY3Quc2V0KGNh
bnZhc0lSZWN0KTsKLSAgICAgICAgbV9sYXllclJlbmRlcmVyLT5kcmF3TGF5ZXJzSW5DYW52YXMo
c3RhdGljX2Nhc3Q8c2tpYTo6UGxhdGZvcm1DYW52YXMqPihjYW52YXMpLCBjYW52YXNSZWN0KTsK
KyNpZiBQTEFURk9STShTS0lBKQorICAgICAgICBtX2xheWVyUmVuZGVyZXItPmRyYXdMYXllcnNJ
bkNhbnZhcyhzdGF0aWNfY2FzdDxza2lhOjpQbGF0Zm9ybUNhbnZhcyo+KGNhbnZhcyksIEludFJl
Y3QocmVjdCkpOworI2VsaWYgUExBVEZPUk0oQ0cpCisjZXJyb3IgIk5lZWQgdG8gaW1wbGVtZW50
IENHIHZlcnNpb24iCisjZW5kaWYKICAgICB9CiAjZW5kaWYKIH0KQEAgLTE5MzIsMTUgKzE5MzMs
MTYgQEAgYm9vbCBXZWJWaWV3SW1wbDo6bmF2aWdhdGlvblBvbGljeUZyb21Nb3VzZUV2ZW50KHVu
c2lnbmVkIHNob3J0IGJ1dHRvbiwKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBXZWJWaWV3
SW1wbDo6c3RhcnREcmFnZ2luZyhjb25zdCBXZWJQb2ludCYgZXZlbnRQb3MsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYkRyYWdEYXRhJiBkcmFnRGF0YSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViRHJhZ09wZXJhdGlvbnNNYXNrIG1hc2spCit2
b2lkIFdlYlZpZXdJbXBsOjpzdGFydERyYWdnaW5nKGNvbnN0IFdlYkRyYWdEYXRhJiBkcmFnRGF0
YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViRHJhZ09wZXJhdGlvbnNNYXNr
IG1hc2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYkltYWdlJiBk
cmFnSW1hZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlBvaW50
JiBkcmFnSW1hZ2VPZmZzZXQpCiB7CiAgICAgaWYgKCFtX2NsaWVudCkKICAgICAgICAgcmV0dXJu
OwogICAgIEFTU0VSVCghbV9kb2luZ0RyYWdBbmREcm9wKTsKICAgICBtX2RvaW5nRHJhZ0FuZERy
b3AgPSB0cnVlOwotICAgIG1fY2xpZW50LT5zdGFydERyYWdnaW5nKGV2ZW50UG9zLCBkcmFnRGF0
YSwgbWFzayk7CisgICAgbV9jbGllbnQtPnN0YXJ0RHJhZ2dpbmcoZHJhZ0RhdGEsIG1hc2ssIGRy
YWdJbWFnZSwgZHJhZ0ltYWdlT2Zmc2V0KTsKIH0KIAogdm9pZCBXZWJWaWV3SW1wbDo6c2V0Q3Vy
cmVudEhpc3RvcnlJdGVtKEhpc3RvcnlJdGVtKiBpdGVtKQpAQCAtMjA0MCw3ICsyMDQyLDcgQEAg
dm9pZCBXZWJWaWV3SW1wbDo6c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZyhib29sIGFjY2VsZXJh
dGVkKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoYWNjZWxlcmF0ZWQpIHsKLSAgICAgICAg
bV9sYXllclJlbmRlcmVyID0gTGF5ZXJSZW5kZXJlclNraWE6OmNyZWF0ZSgpOworICAgICAgICBt
X2xheWVyUmVuZGVyZXIgPSBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZSgpOwogICAgICAg
ICBpZiAobV9sYXllclJlbmRlcmVyKQogICAgICAgICAgICAgbV9pc0FjY2VsZXJhdGVkQ29tcG9z
aXRpbmcgPSB0cnVlOwogICAgIH0gZWxzZSB7CkBAIC0yMDY1LDE3ICsyMDY3LDE1IEBAIHZvaWQg
V2ViVmlld0ltcGw6OnVwZGF0ZVJvb3RMYXllckNvbnRlbnRzKGNvbnN0IFdlYlJlY3QmIHJlY3Qp
CiAgICAgU2tJUmVjdCBzY3JvbGxGcmFtZTsKICAgICBzY3JvbGxGcmFtZS5zZXQodmlldy0+c2Ny
b2xsWCgpLCB2aWV3LT5zY3JvbGxZKCksIHZpZXctPmxheW91dFdpZHRoKCkgKyB2aWV3LT5zY3Jv
bGxYKCksIHZpZXctPmxheW91dEhlaWdodCgpICsgdmlldy0+c2Nyb2xsWSgpKTsKICAgICBtX2xh
eWVyUmVuZGVyZXItPnNldFNjcm9sbEZyYW1lKHNjcm9sbEZyYW1lKTsKLSAgICBMYXllclNraWEq
IHJvb3RMYXllciA9IG1fbGF5ZXJSZW5kZXJlci0+cm9vdExheWVyKCk7CisgICAgTGF5ZXJDaHJv
bWl1bSogcm9vdExheWVyID0gbV9sYXllclJlbmRlcmVyLT5yb290TGF5ZXIoKTsKICAgICBpZiAo
cm9vdExheWVyKSB7Ci0gICAgICAgIFNrSVJlY3Qgcm9vdExheWVyQm91bmRzOwogICAgICAgICBJ
bnRSZWN0IHZpc2libGVSZWN0ID0gdmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KHRydWUpOwogCiAg
ICAgICAgIC8vIFNldCB0aGUgYmFja2luZyBzdG9yZSBzaXplIHVzZWQgYnkgdGhlIHJvb3QgbGF5
ZXIgdG8gYmUgdGhlIHNpemUgb2YgdGhlIHZpc2libGUKICAgICAgICAgLy8gYXJlYS4gTm90ZSB0
aGF0IHRoZSByb290IGxheWVyIGJvdW5kcyBjb3VsZCBiZSBsYXJnZXIgdGhhbiB0aGUgYmFja2lu
ZyBzdG9yZSBzaXplLAogICAgICAgICAvLyBidXQgdGhlcmUncyBubyByZWFzb24gdG8gd2FzdGUg
bWVtb3J5IGJ5IGFsbG9jYXRpbmcgYmFja2luZyBzdG9yZSBsYXJnZXIgdGhhbiB0aGUKICAgICAg
ICAgLy8gdmlzaWJsZSBwb3J0aW9uLgotICAgICAgICByb290TGF5ZXJCb3VuZHMuc2V0KDAsIDAs
IHZpc2libGVSZWN0LndpZHRoKCksIHZpc2libGVSZWN0LmhlaWdodCgpKTsKLSAgICAgICAgcm9v
dExheWVyLT5zZXRCYWNraW5nU3RvcmVSZWN0KHJvb3RMYXllckJvdW5kcyk7CisgICAgICAgIHJv
b3RMYXllci0+c2V0QmFja2luZ1N0b3JlUmVjdChJbnRTaXplKHZpc2libGVSZWN0LndpZHRoKCks
IHZpc2libGVSZWN0LmhlaWdodCgpKSk7CiAgICAgICAgIEdyYXBoaWNzQ29udGV4dCogcm9vdExh
eWVyQ29udGV4dCA9IHJvb3RMYXllci0+Z3JhcGhpY3NDb250ZXh0KCk7CiAgICAgICAgIHJvb3RM
YXllckNvbnRleHQtPnNhdmUoKTsKIApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJWaWV3SW1wbC5oIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCmluZGV4IGM2
MDQyODUuLmU1NzYzYTQgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0lt
cGwuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKQEAgLTc0LDYgKzc0
LDcgQEAgY2xhc3MgU3VnZ2VzdGlvbnNQb3B1cE1lbnVDbGllbnQ7CiBjbGFzcyBXZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0OwogY2xhc3MgV2ViRGV2VG9vbHNBZ2VudFByaXZhdGU7CiBjbGFzcyBXZWJG
cmFtZUltcGw7CitjbGFzcyBXZWJJbWFnZTsKIGNsYXNzIFdlYktleWJvYXJkRXZlbnQ7CiBjbGFz
cyBXZWJNb3VzZUV2ZW50OwogY2xhc3MgV2ViTW91c2VXaGVlbEV2ZW50OwpAQCAtMjc0LDkgKzI3
NSwxMCBAQCBwdWJsaWM6CiAKICAgICAvLyBTdGFydCBhIHN5c3RlbSBkcmFnIGFuZCBkcm9wIG9w
ZXJhdGlvbi4KICAgICB2b2lkIHN0YXJ0RHJhZ2dpbmcoCi0gICAgICAgIGNvbnN0IFdlYlBvaW50
JiBldmVudFBvcywKICAgICAgICAgY29uc3QgV2ViRHJhZ0RhdGEmIGRyYWdEYXRhLAotICAgICAg
ICBXZWJEcmFnT3BlcmF0aW9uc01hc2sgZHJhZ1NvdXJjZU9wZXJhdGlvbk1hc2spOworICAgICAg
ICBXZWJEcmFnT3BlcmF0aW9uc01hc2sgbWFzaywKKyAgICAgICAgY29uc3QgV2ViSW1hZ2UmIGRy
YWdJbWFnZSwKKyAgICAgICAgY29uc3QgV2ViUG9pbnQmIGRyYWdJbWFnZU9mZnNldCk7CiAKICAg
ICB2b2lkIHN1Z2dlc3Rpb25zUG9wdXBEaWRIaWRlKCkKICAgICB7CkBAIC00ODksNyArNDkxLDcg
QEAgcHJpdmF0ZToKICAgICBib29sIG1faGF2ZU1vdXNlQ2FwdHVyZTsKIAogI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKLSAgICBPd25QdHI8V2ViQ29yZTo6TGF5ZXJSZW5kZXJlclNr
aWE+IG1fbGF5ZXJSZW5kZXJlcjsKKyAgICBPd25QdHI8V2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNo
cm9taXVtPiBtX2xheWVyUmVuZGVyZXI7CiAgICAgYm9vbCBtX2lzQWNjZWxlcmF0ZWRDb21wb3Np
dGluZzsKICNlbmRpZgogICAgIHN0YXRpYyBjb25zdCBXZWJJbnB1dEV2ZW50KiBtX2N1cnJlbnRJ
bnB1dEV2ZW50OwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJCYXNl
LmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViV29ya2VyQmFzZS5jcHAKaW5kZXggNDAwMTll
OC4uZGE1MTQxNCAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJCYXNl
LmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckJhc2UuY3BwCkBAIC0xOTks
OCArMTk5LDcgQEAgdm9pZCBXZWJXb3JrZXJCYXNlOjpwb3N0RXhjZXB0aW9uVGFzayhTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlVVJMKTsKIH0KIAotdm9pZCBXZWJXb3Jr
ZXJCYXNlOjpwb3N0Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdChNZXNzYWdlRGVzdGluYXRp
b24gZGVzdGluYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIE1lc3NhZ2VTb3VyY2Ugc291cmNlLAordm9pZCBXZWJXb3JrZXJCYXNlOjpw
b3N0Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdChNZXNzYWdlU291cmNlIHNvdXJjZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2Fn
ZVR5cGUgdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgTWVzc2FnZUxldmVsIGxldmVsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsCkBAIC0yMDgs
MTYgKzIwNywxMyBAQCB2b2lkIFdlYldvcmtlckJhc2U6OnBvc3RDb25zb2xlTWVzc2FnZVRvV29y
a2VyT2JqZWN0KE1lc3NhZ2VEZXN0aW5hdGlvbiBkZXN0aW5hdAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHNvdXJjZVVS
TCkKIHsKICAgICBkaXNwYXRjaFRhc2tUb01haW5UaHJlYWQoY3JlYXRlQ2FsbGJhY2tUYXNrKCZw
b3N0Q29uc29sZU1lc3NhZ2VUYXNrLCB0aGlzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihkZXN0aW5hdGlvbiksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxp
bnQ+KHNvdXJjZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxpbnQ+KHR5cGUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihsZXZlbCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UsIHR5cGUsIGxldmVs
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2Fn
ZSwgbGluZU51bWJlciwgc291cmNlVVJMKSk7CiB9CiAKIHZvaWQgV2ViV29ya2VyQmFzZTo6cG9z
dENvbnNvbGVNZXNzYWdlVGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYldvcmtlckJhc2UqIHRo
aXNQdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRl
c3RpbmF0aW9uLCBpbnQgc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBzb3VyY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IHR5cGUsIGludCBsZXZlbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxpbmVOdW1iZXIsCkBAIC0yMjUsNyArMjIx
LDcgQEAgdm9pZCBXZWJXb3JrZXJCYXNlOjpwb3N0Q29uc29sZU1lc3NhZ2VUYXNrKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCiB7CiAgICAgaWYgKCF0aGlzUHRyLT5jb21tb25DbGll
bnQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIHRoaXNQdHItPmNvbW1vbkNsaWVudCgpLT5wb3N0
Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdChkZXN0aW5hdGlvbiwgc291cmNlLAorICAgIHRo
aXNQdHItPmNvbW1vbkNsaWVudCgpLT5wb3N0Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdChz
b3VyY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHR5cGUsIGxldmVsLCBtZXNzYWdlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyLCBzb3Vy
Y2VVUkwpOwogfQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJCYXNl
LmggYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckJhc2UuaAppbmRleCBkN2U1MWZhLi4x
MjUyNzcwIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckJhc2UuaAor
KysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckJhc2UuaApAQCAtNjgsNyArNjgsNyBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHBvc3RFeGNlcHRpb25Ub1dvcmtlck9iamVjdCgK
ICAgICAgICAgY29uc3QgV2ViQ29yZTo6U3RyaW5nJiwgaW50LCBjb25zdCBXZWJDb3JlOjpTdHJp
bmcmKTsKICAgICB2aXJ0dWFsIHZvaWQgcG9zdENvbnNvbGVNZXNzYWdlVG9Xb3JrZXJPYmplY3Qo
Ci0gICAgICAgIFdlYkNvcmU6Ok1lc3NhZ2VEZXN0aW5hdGlvbiwgV2ViQ29yZTo6TWVzc2FnZVNv
dXJjZSwgV2ViQ29yZTo6TWVzc2FnZVR5cGUsCisgICAgICAgIFdlYkNvcmU6Ok1lc3NhZ2VTb3Vy
Y2UsIFdlYkNvcmU6Ok1lc3NhZ2VUeXBlLAogICAgICAgICBXZWJDb3JlOjpNZXNzYWdlTGV2ZWws
IGNvbnN0IFdlYkNvcmU6OlN0cmluZyYsIGludCwgY29uc3QgV2ViQ29yZTo6U3RyaW5nJik7CiAg
ICAgdmlydHVhbCB2b2lkIGNvbmZpcm1NZXNzYWdlRnJvbVdvcmtlck9iamVjdChib29sKTsKICAg
ICB2aXJ0dWFsIHZvaWQgcmVwb3J0UGVuZGluZ0FjdGl2aXR5KGJvb2wpOwpAQCAtMTE1LDcgKzEx
NSw2IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgcG9zdENvbnNvbGVNZXNzYWdlVGFzaygK
ICAgICAgICAgV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKICAgICAg
ICAgV2ViV29ya2VyQmFzZSogdGhpc1B0ciwKLSAgICAgICAgaW50IGRlc3RpbmF0aW9uLAogICAg
ICAgICBpbnQgc291cmNlLAogICAgICAgICBpbnQgdHlwZSwKICAgICAgICAgaW50IGxldmVsLApk
aWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJDbGllbnRJbXBsLmNwcCBi
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViV29ya2VyQ2xpZW50SW1wbC5jcHAKaW5kZXggZWVkYmNm
ZS4uNDFhZTAxOCAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJDbGll
bnRJbXBsLmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckNsaWVudEltcGwu
Y3BwCkBAIC0yNTIsNyArMjUyLDcgQEAgdm9pZCBXZWJXb3JrZXJDbGllbnRJbXBsOjpwb3N0RXhj
ZXB0aW9uVG9Xb3JrZXJPYmplY3QoY29uc3QgV2ViU3RyaW5nJiBlcnJvck1lc3MKICAgICAgICAg
bV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5yZXBvcnRFeGNlcHRpb24oZXJyb3JNZXNzYWdlLCBs
aW5lTnVtYmVyLCBzb3VyY2VVUkwpOwogfQogCi12b2lkIFdlYldvcmtlckNsaWVudEltcGw6OnBv
c3RDb25zb2xlTWVzc2FnZVRvV29ya2VyT2JqZWN0KGludCBkZXN0aW5hdGlvbklkLAordm9pZCBX
ZWJXb3JrZXJDbGllbnRJbXBsOjpwb3N0Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdChpbnQg
ZGVzdGluYXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBzb3VyY2VJZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1lc3NhZ2VUeXBlLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
bWVzc2FnZUxldmVsLApAQCAtMjYzLDcgKzI2Myw2IEBAIHZvaWQgV2ViV29ya2VyQ2xpZW50SW1w
bDo6cG9zdENvbnNvbGVNZXNzYWdlVG9Xb3JrZXJPYmplY3QoaW50IGRlc3RpbmF0aW9uSWQsCiAg
ICAgaWYgKGN1cnJlbnRUaHJlYWQoKSAhPSBtX3dvcmtlclRocmVhZElkKSB7CiAgICAgICAgIG1f
c2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cG9zdFRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZwb3N0
Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdFRhc2ssCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rp
bmF0aW9uSWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNvdXJjZUlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlVHlwZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2Fn
ZUxldmVsLApAQCAtMjczLDE0ICsyNzIsMjMgQEAgdm9pZCBXZWJXb3JrZXJDbGllbnRJbXBsOjpw
b3N0Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdChpbnQgZGVzdGluYXRpb25JZCwKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+YWRkTWVz
c2FnZShzdGF0aWNfY2FzdDxNZXNzYWdlRGVzdGluYXRpb24+KGRlc3RpbmF0aW9uSWQpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxNZXNzYWdl
U291cmNlPihzb3VyY2VJZCksCisgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5hZGRNZXNz
YWdlKHN0YXRpY19jYXN0PE1lc3NhZ2VTb3VyY2U+KHNvdXJjZUlkKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8TWVzc2FnZVR5cGU+KG1lc3Nh
Z2VUeXBlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8TWVzc2FnZUxldmVsPihtZXNzYWdlTGV2ZWwpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBTdHJpbmcobWVzc2FnZSksIGxpbmVOdW1iZXIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyhzb3VyY2VVUkwpKTsKIH0K
IAordm9pZCBXZWJXb3JrZXJDbGllbnRJbXBsOjpwb3N0Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9i
amVjdChpbnQgc291cmNlSWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBtZXNzYWdlVHlwZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1lc3NhZ2VMZXZl
bCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgV2ViU3RyaW5nJiBtZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGluZU51bWJlciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgV2ViU3RyaW5nJiBzb3VyY2VVUkwpCit7CisgICAgcG9zdENvbnNvbGVNZXNzYWdlVG9Xb3Jr
ZXJPYmplY3QoMCwgc291cmNlSWQsIG1lc3NhZ2VUeXBlLCBtZXNzYWdlTGV2ZWwsIG1lc3NhZ2Us
IGxpbmVOdW1iZXIsIHNvdXJjZVVSTCk7Cit9CisKIHZvaWQgV2ViV29ya2VyQ2xpZW50SW1wbDo6
Y29uZmlybU1lc3NhZ2VGcm9tV29ya2VyT2JqZWN0KGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KQog
ewogICAgIC8vIHVuY29uZmlybWVkX21lc3NhZ2VfY291bnRfIGNhbiBvbmx5IGJlIHVwZGF0ZWQg
b24gdGhlIHRocmVhZCB3aGVyZSBpdCdzCkBAIC0zODIsNyArMzkwLDYgQEAgdm9pZCBXZWJXb3Jr
ZXJDbGllbnRJbXBsOjpwb3N0RXhjZXB0aW9uVG9Xb3JrZXJPYmplY3RUYXNrKAogCiB2b2lkIFdl
YldvcmtlckNsaWVudEltcGw6OnBvc3RDb25zb2xlTWVzc2FnZVRvV29ya2VyT2JqZWN0VGFzayhT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViV29ya2VyQ2xpZW50SW1w
bCogdGhpc1B0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBkZXN0aW5hdGlvbklkLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvdXJjZUlk
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IG1lc3NhZ2VUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1lc3NhZ2VMZXZlbCwKQEAgLTM5
MCw4ICszOTcsNyBAQCB2b2lkIFdlYldvcmtlckNsaWVudEltcGw6OnBvc3RDb25zb2xlTWVzc2Fn
ZVRvV29ya2VyT2JqZWN0VGFzayhTY3JpcHRFeGVjdXRpb25DbwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxpbmVOdW1i
ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCkKIHsKLSAgICB0aGlzUHRyLT5tX3Nj
cmlwdEV4ZWN1dGlvbkNvbnRleHQtPmFkZE1lc3NhZ2Uoc3RhdGljX2Nhc3Q8TWVzc2FnZURlc3Rp
bmF0aW9uPihkZXN0aW5hdGlvbklkKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8TWVzc2FnZVNvdXJjZT4oc291cmNlSWQpLAor
ICAgIHRoaXNQdHItPm1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+YWRkTWVzc2FnZShzdGF0aWNf
Y2FzdDxNZXNzYWdlU291cmNlPihzb3VyY2VJZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PE1lc3NhZ2VUeXBlPihtZXNzYWdl
VHlwZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0YXRpY19jYXN0PE1lc3NhZ2VMZXZlbD4obWVzc2FnZUxldmVsKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSwgbGluZU51bWJlciwK
ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViV29ya2VyQ2xpZW50SW1wbC5oIGIv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJDbGllbnRJbXBsLmgKaW5kZXggNjNhY2ViYy4u
NGJkYzMzMiAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJDbGllbnRJ
bXBsLmgKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJDbGllbnRJbXBsLmgKQEAg
LTc4LDggKzc4LDEyIEBAIHB1YmxpYzoKICAgICAvLyBUaGVzZSBhcmUgY2FsbGVkIG9uIHRoZSBt
YWluIFdlYktpdCB0aHJlYWQuCiAgICAgdmlydHVhbCB2b2lkIHBvc3RNZXNzYWdlVG9Xb3JrZXJP
YmplY3QoY29uc3QgV2ViU3RyaW5nJiwgY29uc3QgV2ViTWVzc2FnZVBvcnRDaGFubmVsQXJyYXkm
KTsKICAgICB2aXJ0dWFsIHZvaWQgcG9zdEV4Y2VwdGlvblRvV29ya2VyT2JqZWN0KGNvbnN0IFdl
YlN0cmluZyYsIGludCwgY29uc3QgV2ViU3RyaW5nJik7Ci0gICAgdmlydHVhbCB2b2lkIHBvc3RD
b25zb2xlTWVzc2FnZVRvV29ya2VyT2JqZWN0KGludCwgaW50LCBpbnQsIGludCwgY29uc3QgV2Vi
U3RyaW5nJiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50LCBjb25zdCBXZWJTdHJpbmcmKTsKKworICAgIC8vIEZJWE1FOiB0aGUgYmVsb3cgaXMg
Zm9yIGNvbXBhdGliaWxpdHkgb25seSBhbmQgc2hvdWxkIGJlICAgICAKKyAgICAvLyByZW1vdmVk
IG9uY2UgQ2hyb21pdW0gaXMgdXBkYXRlZCB0byByZW1vdmUgbWVzc2FnZSAKKyAgICAvLyBkZXN0
aW5hdGlvbiBwYXJhbWV0ZXIgPGh0dHA6Ly93ZWJraXQub3JnL2IvMzcxNTU+LgorICAgIHZpcnR1
YWwgdm9pZCBwb3N0Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdChpbnQsIGludCwgaW50LCBp
bnQsIGNvbnN0IFdlYlN0cmluZyYsIGludCwgY29uc3QgV2ViU3RyaW5nJik7CisgICAgdmlydHVh
bCB2b2lkIHBvc3RDb25zb2xlTWVzc2FnZVRvV29ya2VyT2JqZWN0KGludCwgaW50LCBpbnQsIGNv
bnN0IFdlYlN0cmluZyYsIGludCwgY29uc3QgV2ViU3RyaW5nJik7CiAgICAgdmlydHVhbCB2b2lk
IGNvbmZpcm1NZXNzYWdlRnJvbVdvcmtlck9iamVjdChib29sKTsKICAgICB2aXJ0dWFsIHZvaWQg
cmVwb3J0UGVuZGluZ0FjdGl2aXR5KGJvb2wpOwogICAgIHZpcnR1YWwgdm9pZCB3b3JrZXJDb250
ZXh0Q2xvc2VkKCk7CkBAIC0xMjUsNyArMTI5LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYkNvcmU6OlN0cmluZyYg
c291cmNlVVJMKTsKICAgICBzdGF0aWMgdm9pZCBwb3N0Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9i
amVjdFRhc2soV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViV29ya2Vy
Q2xpZW50SW1wbCogdGhpc1B0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGRlc3RpbmF0aW9uSWQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzb3VyY2VJZCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1lc3NhZ2VU
eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgbWVzc2FnZUxldmVsLApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9E
ZXZUb29scy5qcyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvanMvRGV2VG9vbHMuanMKaW5kZXggNzc0
NzVhNi4uNWIyODhlYyAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9EZXZUb29s
cy5qcworKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0RldlRvb2xzLmpzCkBAIC00MTcsMyAr
NDE3LDkzIEBAIFdlYkluc3BlY3Rvci5wYXVzZWRTY3JpcHQgPSBmdW5jdGlvbihjYWxsRnJhbWVz
KQogewogICAgIHRoaXMucGFuZWxzLnNjcmlwdHMuZGVidWdnZXJQYXVzZWQoY2FsbEZyYW1lcyk7
CiB9OworCisvLyBDaHJvbWl1bSB0aGVtZSBzdXBwb3J0LgorV2ViSW5zcGVjdG9yLnNldFRvb2xi
YXJDb2xvcnMgPSBmdW5jdGlvbihiYWNrZ3JvdW5kQ29sb3IsIGNvbG9yKQoreworICAgIGlmICgh
V2ViSW5zcGVjdG9yLl90aGVtZVN0eWxlRWxlbWVudCkgeworICAgICAgICBXZWJJbnNwZWN0b3Iu
X3RoZW1lU3R5bGVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTsKKyAg
ICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChXZWJJbnNwZWN0b3IuX3RoZW1lU3R5bGVF
bGVtZW50KTsKKyAgICB9CisgICAgV2ViSW5zcGVjdG9yLl90aGVtZVN0eWxlRWxlbWVudC50ZXh0
Q29udGVudCA9CisgICAgICAgICJib2R5ICN0b29sYmFyLCBib2R5LmluYWN0aXZlICN0b29sYmFy
IHtcCisgICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZSAhaW1wb3J0YW50O1wKKyAg
ICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAiICsgYmFja2dyb3VuZENvbG9yICsgIiAhaW1w
b3J0YW50O1wKKyAgICAgICAgIH1cCisgICAgICAgICBcCisgICAgICAgICBib2R5IC5zdGF0dXMt
YmFyIHtcCisgICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKEltYWdlcy9zdGF0dXNi
YXJCYWNrZ3JvdW5kQ2hyb21pdW0yLnBuZykgIWltcG9ydGFudDtcCisgICAgICAgICAgICAgYmFj
a2dyb3VuZC1jb2xvcjogIiArIGJhY2tncm91bmRDb2xvciArICIgIWltcG9ydGFudDtcCisgICAg
ICAgICB9XAorICAgICAgICAgXAorICAgICAgICAgYm9keSBidXR0b24uc3RhdHVzLWJhci1pdGVt
IHtcCisgICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZSAhaW1wb3J0YW50O1wKKyAg
ICAgICAgIH1cCisgICAgICAgICBcCisgICAgICAgICBidXR0b24uc3RhdHVzLWJhci1pdGVtIHtc
CisgICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTtcCisgICAgICAgICAgICAgYm9y
ZGVyLXJpZ2h0OiAxcHggc29saWQgIiArIGJhY2tncm91bmRDb2xvciArICI7XAorICAgICAgICAg
fVwKKyAgICAgICAgIFwKKyAgICAgICAgIC5zdGF0dXMtYmFyIHtcCisgICAgICAgICAgICAgYmFj
a2dyb3VuZC1pbWFnZTogbm9uZTtcCisgICAgICAgICAgICAgY29sb3I6ICIgKyBjb2xvciArICI7
XAorICAgICAgICAgfVwKKyAgICAgICAgIFwKKyAgICAgICAgIGJvZHkgI2RyYXdlciB7XAorICAg
ICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmUgIWltcG9ydGFudDtcCisgICAgICAgICB9
XAorICAgICAgICAgXAorICAgICAgICAgI2RyYXdlci1zdGF0dXMtYmFyIHtcCisgICAgICAgICAg
ICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKEltYWdlcy9zdGF0dXNiYXJCYWNrZ3JvdW5kQ2hyb21p
dW0yLnBuZyk7XAorICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICIgKyBiYWNrZ3JvdW5k
Q29sb3IgKyAiO1wKKyAgICAgICAgIH1cCisgICAgICAgICBcCisgICAgICAgICBcCisgICAgICAg
ICBib2R5LmRyYXdlci12aXNpYmxlICNtYWluLXN0YXR1cy1iYXIge1wKKyAgICAgICAgICAgICBi
YWNrZ3JvdW5kLWltYWdlOiB1cmwoSW1hZ2VzL3N0YXR1c2JhckJhY2tncm91bmRDaHJvbWl1bTIu
cG5nKSAhaW1wb3J0YW50O1wKKyAgICAgICAgIH1cCisgICAgICAgICBcCisgICAgICAgICBib2R5
IC5jcnVtYnMgLmNydW1iLCBib2R5IC5jcnVtYnMgLmNydW1iLmVuZCB7XAorICAgICAgICAgICAg
IC13ZWJraXQtYm9yZGVyLWltYWdlOiB1cmwoSW1hZ2VzL3NlZ21lbnRDaHJvbWl1bTIucG5nKSAw
IDEyIDAgMiAhaW1wb3J0YW50O1wKKyAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAiICsg
YmFja2dyb3VuZENvbG9yICsgIiAhaW1wb3J0YW50O1wKKyAgICAgICAgIH1cCisgICAgICAgICBc
CisgICAgICAgICBib2R5IC5jcnVtYnMgLmNydW1iOmhvdmVyLCBib2R5IC5jcnVtYnMgLmNydW1i
LmRpbW1lZDpob3ZlciB7XAorICAgICAgICAgICAgIC13ZWJraXQtYm9yZGVyLWltYWdlOiB1cmwo
SW1hZ2VzL3NlZ21lbnRIb3ZlckNocm9taXVtMi5wbmcpIDAgMTIgMCAyICFpbXBvcnRhbnQ7XAor
ICAgICAgICAgfVwKKyAgICAgICAgIFwKKyAgICAgICAgIGJvZHkgLmNydW1icyAuY3J1bWIuZW5k
IHtcCisgICAgICAgICAgICAgLXdlYmtpdC1ib3JkZXItaW1hZ2U6IHVybChJbWFnZXMvc2VnbWVu
dENocm9taXVtMi5wbmcpIDAgMTIgMCAyICFpbXBvcnRhbnQ7XAorICAgICAgICAgfVwKKyAgICAg
ICAgIFwKKyAgICAgICAgIGJvZHkgLmNydW1icyAuY3J1bWIuc2VsZWN0ZWQ6aG92ZXIsIGJvZHkg
LmNydW1icyAuY3J1bWIuc2VsZWN0ZWQuZW5kLCAuY3J1bWJzIC5jcnVtYi5zZWxlY3RlZC5lbmQ6
aG92ZXIge1wKKyAgICAgICAgICAgICAtd2Via2l0LWJvcmRlci1pbWFnZTogdXJsKEltYWdlcy9z
ZWdtZW50U2VsZWN0ZWRDaHJvbWl1bTIucG5nKSAwIDEyIDAgMiAhaW1wb3J0YW50O1wKKyAgICAg
ICAgIH1cCisgICAgICAgICBcCisgICAgICAgICBib2R5IHNlbGVjdC5zdGF0dXMtYmFyLWl0ZW0g
e1wKKyAgICAgICAgICAgICAtd2Via2l0LWJvcmRlci1pbWFnZTogdXJsKEltYWdlcy9zdGF0dXNi
YXJNZW51QnV0dG9uQ2hyb21pdW0yLnBuZykgMCAxNyAwIDIgIWltcG9ydGFudDtcCisgICAgICAg
ICAgICAgYmFja2dyb3VuZC1jb2xvcjogIiArIGJhY2tncm91bmRDb2xvciArICIgIWltcG9ydGFu
dDtcCisgICAgICAgICAgICAgdGV4dC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcCisgICAgICAg
ICB9XAorICAgICAgICAgXAorICAgICAgICAgLmdseXBoIHtcCisgICAgICAgICAgICAgYmFja2dy
b3VuZC1jb2xvcjogIiArIGNvbG9yICsgIjtcCisgICAgICAgICB9XAorICAgICAgICAgXAorICAg
ICAgICAgYnV0dG9uLnN0YXR1cy1iYXItaXRlbSAuZ2x5cGguc2hhZG93IHtcCisgICAgICAgICAg
ICAgZGlzcGxheTogbm9uZTtcCisgICAgICAgICB9XAorICAgICAgICAgXAorICAgICAgICAgLmNy
dW1icywgLmNydW1icyAuY3J1bWI6aG92ZXIsICNkcmF3ZXIgLnNjb3BlLWJhcjpub3QoLmNvbnNv
bGUtZmlsdGVyLXRvcCkgbGksIC50b29sYmFyLWxhYmVsLCBzZWxlY3Quc3RhdHVzLWJhci1pdGVt
IHtcCisgICAgICAgICAgICAgdGV4dC1zaGFkb3c6IG5vbmU7XAorICAgICAgICAgICAgIGNvbG9y
OiAiICsgY29sb3IgKyAiO1wKKyAgICAgICAgIH0iOworfQorCitXZWJJbnNwZWN0b3IucmVzZXRU
b29sYmFyQ29sb3JzID0gZnVuY3Rpb24oKQoreworICAgIGlmIChXZWJJbnNwZWN0b3IuX3RoZW1l
U3R5bGVFbGVtZW50KQorICAgICAgICBXZWJJbnNwZWN0b3IuX3RoZW1lU3R5bGVFbGVtZW50LnRl
eHRDb250ZW50ID0gIiI7CisKK30KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvanMv
SW1hZ2VzL3NlZ21lbnRDaHJvbWl1bTIucG5nIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9JbWFn
ZXMvc2VnbWVudENocm9taXVtMi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAw
MC4uZTk0ZjU3MApCaW5hcnkgZmlsZXMgL2Rldi9udWxsIGFuZCBiL1dlYktpdC9jaHJvbWl1bS9z
cmMvanMvSW1hZ2VzL3NlZ21lbnRDaHJvbWl1bTIucG5nIGRpZmZlcgpkaWZmIC0tZ2l0IGEvV2Vi
S2l0L2Nocm9taXVtL3NyYy9qcy9JbWFnZXMvc2VnbWVudEhvdmVyQ2hyb21pdW0yLnBuZyBiL1dl
YktpdC9jaHJvbWl1bS9zcmMvanMvSW1hZ2VzL3NlZ21lbnRIb3ZlckNocm9taXVtMi5wbmcKbmV3
IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNGQ0YTIxMQpCaW5hcnkgZmlsZXMgL2Rl
di9udWxsIGFuZCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvanMvSW1hZ2VzL3NlZ21lbnRIb3ZlckNo
cm9taXVtMi5wbmcgZGlmZmVyCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0lt
YWdlcy9zZWdtZW50U2VsZWN0ZWRDaHJvbWl1bTIucG5nIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9q
cy9JbWFnZXMvc2VnbWVudFNlbGVjdGVkQ2hyb21pdW0yLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1
NQppbmRleCAwMDAwMDAwLi5mMmI2OTViCkJpbmFyeSBmaWxlcyAvZGV2L251bGwgYW5kIGIvV2Vi
S2l0L2Nocm9taXVtL3NyYy9qcy9JbWFnZXMvc2VnbWVudFNlbGVjdGVkQ2hyb21pdW0yLnBuZyBk
aWZmZXIKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvanMvSW1hZ2VzL3N0YXR1c2Jh
ckJhY2tncm91bmRDaHJvbWl1bTIucG5nIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9JbWFnZXMv
c3RhdHVzYmFyQmFja2dyb3VuZENocm9taXVtMi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5k
ZXggMDAwMDAwMC4uMTJkNjJiMQpCaW5hcnkgZmlsZXMgL2Rldi9udWxsIGFuZCBiL1dlYktpdC9j
aHJvbWl1bS9zcmMvanMvSW1hZ2VzL3N0YXR1c2JhckJhY2tncm91bmRDaHJvbWl1bTIucG5nIGRp
ZmZlcgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9JbWFnZXMvc3RhdHVzYmFy
TWVudUJ1dHRvbkNocm9taXVtMi5wbmcgYi9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0ltYWdlcy9z
dGF0dXNiYXJNZW51QnV0dG9uQ2hyb21pdW0yLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRl
eCAwMDAwMDAwLi45NTI3YWM4CkJpbmFyeSBmaWxlcyAvZGV2L251bGwgYW5kIGIvV2ViS2l0L2No
cm9taXVtL3NyYy9qcy9JbWFnZXMvc3RhdHVzYmFyTWVudUJ1dHRvbkNocm9taXVtMi5wbmcgZGlm
ZmVyCmRpZmYgLS1naXQgYS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5jcHAgYi9XZWJLaXQvZWZs
L2V3ay9ld2tfdmlldy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWVi
NjUzNQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9lZmwvZXdrL2V3a192aWV3LmNwcApAQCAt
MCwwICsxLDM2NDQgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9O
IGVtYmVkZGVkIHN5c3RlbXMKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVs
ZWN0cm9uaWNzCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAg
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
ICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImV3a192aWV3Lmgi
CisKKyNpbmNsdWRlICJDaHJvbWVDbGllbnRFZmwuaCIKKyNpbmNsdWRlICJDb250ZXh0TWVudUNs
aWVudEVmbC5oIgorI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCisjaW5jbHVkZSAiRHJhZ0Ns
aWVudEVmbC5oIgorI2luY2x1ZGUgIkVXZWJLaXQuaCIKKyNpbmNsdWRlICJFZGl0b3JDbGllbnRF
ZmwuaCIKKyNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRl
ckNsaWVudEVmbC5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgorI2luY2x1ZGUgIkluc3BlY3RvckNsaWVudEVmbC5oIgorI2luY2x1ZGUgIlBv
cHVwTWVudUNsaWVudC5oIgorI2luY2x1ZGUgIlByb2dyZXNzVHJhY2tlci5oIgorI2luY2x1ZGUg
ImV3a19wcml2YXRlLmgiCisKKyNpbmNsdWRlIDxFY29yZS5oPgorI2luY2x1ZGUgPEVpbmEuaD4K
KyNpbmNsdWRlIDxFdmFzLmg+CisjaW5jbHVkZSA8ZWluYV9zYWZldHlfY2hlY2tzLmg+CisjaW5j
bHVkZSA8c3lzL3RpbWUuaD4KKworI2RlZmluZSBaT09NX01JTiAoMC4wNSkKKyNkZWZpbmUgWk9P
TV9NQVggKDQuMCkKKworc3RhdGljIGNvbnN0IGNoYXIgRVdLX1ZJRVdfVFlQRV9TVFJbXSA9ICJF
V0tfVmlldyI7CisKK3N0YXRpYyBjb25zdCBzaXplX3QgRVdLX1ZJRVdfUkVQQUlOVFNfU0laRV9J
TklUSUFMID0gMzI7CitzdGF0aWMgY29uc3Qgc2l6ZV90IEVXS19WSUVXX1JFUEFJTlRTX1NJWkVf
U1RFUCA9IDg7CitzdGF0aWMgY29uc3Qgc2l6ZV90IEVXS19WSUVXX1JFUEFJTlRTX1NJWkVfTUFY
X0ZSRUUgPSA2NDsKKworc3RhdGljIGNvbnN0IHNpemVfdCBFV0tfVklFV19TQ1JPTExTX1NJWkVf
SU5JVElBTCA9IDg7CitzdGF0aWMgY29uc3Qgc2l6ZV90IEVXS19WSUVXX1NDUk9MTFNfU0laRV9T
VEVQID0gMjsKK3N0YXRpYyBjb25zdCBzaXplX3QgRVdLX1ZJRVdfU0NST0xMU19TSVpFX01BWF9G
UkVFID0gMzI7CisKK3N0cnVjdCBfRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhIHsKKyAgICBXZWJDb3Jl
OjpQYWdlKiBwYWdlOworICAgIFdlYkNvcmU6OlNldHRpbmdzKiBwYWdlX3NldHRpbmdzOworICAg
IFdlYkNvcmU6OkZyYW1lKiBtYWluX2ZyYW1lOworICAgIEV3a19IaXN0b3J5KiBoaXN0b3J5Owor
ICAgIHN0cnVjdCB7CisgICAgICAgIEV3a19NZW51IG1lbnU7CisgICAgICAgIFdlYkNvcmU6OlBv
cHVwTWVudUNsaWVudCogbWVudV9jbGllbnQ7CisgICAgfSBwb3B1cDsKKyAgICBzdHJ1Y3Qgewor
ICAgICAgICBFaW5hX1JlY3RhbmdsZSogYXJyYXk7CisgICAgICAgIHNpemVfdCBjb3VudDsKKyAg
ICAgICAgc2l6ZV90IGFsbG9jYXRlZDsKKyAgICB9IHJlcGFpbnRzOworICAgIHN0cnVjdCB7Cisg
ICAgICAgIEV3a19TY3JvbGxfUmVxdWVzdCogYXJyYXk7CisgICAgICAgIHNpemVfdCBjb3VudDsK
KyAgICAgICAgc2l6ZV90IGFsbG9jYXRlZDsKKyAgICB9IHNjcm9sbHM7CisgICAgc3RydWN0IHsK
KyAgICAgICAgY29uc3QgY2hhciogdXNlcl9hZ2VudDsKKyAgICAgICAgY29uc3QgY2hhciogdXNl
cl9zdHlsZXNoZWV0OworICAgICAgICBjb25zdCBjaGFyKiBlbmNvZGluZ19kZWZhdWx0OworICAg
ICAgICBjb25zdCBjaGFyKiBlbmNvZGluZ19jdXN0b207CisgICAgICAgIGludCBmb250X21pbmlt
dW1fc2l6ZTsKKyAgICAgICAgaW50IGZvbnRfbWluaW11bV9sb2dpY2FsX3NpemU7CisgICAgICAg
IGludCBmb250X2RlZmF1bHRfc2l6ZTsKKyAgICAgICAgaW50IGZvbnRfbW9ub3NwYWNlX3NpemU7
CisgICAgICAgIGNvbnN0IGNoYXIqIGZvbnRfc3RhbmRhcmQ7CisgICAgICAgIGNvbnN0IGNoYXIq
IGZvbnRfY3Vyc2l2ZTsKKyAgICAgICAgY29uc3QgY2hhciogZm9udF9tb25vc3BhY2U7CisgICAg
ICAgIGNvbnN0IGNoYXIqIGZvbnRfZmFudGFzeTsKKyAgICAgICAgY29uc3QgY2hhciogZm9udF9z
ZXJpZjsKKyAgICAgICAgY29uc3QgY2hhciogZm9udF9zYW5zX3NlcmlmOworICAgICAgICBFaW5h
X0Jvb2wgYXV0b19sb2FkX2ltYWdlczoxOworICAgICAgICBFaW5hX0Jvb2wgYXV0b19zaHJpbmtf
aW1hZ2VzOjE7CisgICAgICAgIEVpbmFfQm9vbCBlbmFibGVfc2NyaXB0czoxOworICAgICAgICBF
aW5hX0Jvb2wgZW5hYmxlX3BsdWdpbnM6MTsKKyAgICAgICAgRWluYV9Cb29sIHNjcmlwdHNfd2lu
ZG93X29wZW46MTsKKyAgICAgICAgRWluYV9Cb29sIHJlc2l6YWJsZV90ZXh0YXJlYXM6MTsKKyAg
ICAgICAgRWluYV9Cb29sIHByaXZhdGVfYnJvd3Npbmc6MTsKKyAgICAgICAgRWluYV9Cb29sIGNh
cmV0X2Jyb3dzaW5nOjE7CisgICAgfSBzZXR0aW5nczsKKyAgICBzdHJ1Y3QgeworICAgICAgICBz
dHJ1Y3QgeworICAgICAgICAgICAgZG91YmxlIHN0YXJ0OworICAgICAgICAgICAgZG91YmxlIGVu
ZDsKKyAgICAgICAgICAgIGRvdWJsZSBkdXJhdGlvbjsKKyAgICAgICAgfSB0aW1lOworICAgICAg
ICBzdHJ1Y3QgeworICAgICAgICAgICAgZmxvYXQgc3RhcnQ7CisgICAgICAgICAgICBmbG9hdCBl
bmQ7CisgICAgICAgICAgICBmbG9hdCByYW5nZTsKKyAgICAgICAgfSB6b29tOworICAgICAgICBz
dHJ1Y3QgeworICAgICAgICAgICAgRXZhc19Db29yZCB4LCB5OworICAgICAgICB9IGNlbnRlcjsK
KyAgICAgICAgRWNvcmVfQW5pbWF0b3IqIGFuaW1hdG9yOworICAgIH0gYW5pbWF0ZWRfem9vbTsK
KyAgICBzdHJ1Y3QgeworICAgICAgICBFdmFzX0Nvb3JkIHcsIGg7CisgICAgICAgIEVpbmFfQm9v
bCB1c2U6MTsKKyAgICB9IGZpeGVkX2xheW91dDsKK307CisKKyNpZm5kZWYgRVdLX1RZUEVfQ0hF
Q0sKKyNkZWZpbmUgRVdLX1ZJRVdfVFlQRV9DSEVDSyhvLCAuLi4pIGRvIHsgfSB3aGlsZSAoMCkK
KyNlbHNlCisjZGVmaW5lIEVXS19WSUVXX1RZUEVfQ0hFQ0sobywgLi4uKSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGNvbnN0
IGNoYXIqIF90bXBfb3R5cGUgPSBldmFzX29iamVjdF90eXBlX2dldChvKTsgICAgICAgICAgICAg
ICBcCisgICAgICAgIGNvbnN0IEV2YXNfU21hcnQqIF90bXBfcyA9IGV2YXNfb2JqZWN0X3NtYXJ0
X3NtYXJ0X2dldChvKTsgICAgICBcCisgICAgICAgIGlmIChFSU5BX1VOTElLRUxZKCFfdG1wX3Mp
KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBFSU5B
X0xPR19DUklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgICAgICAgICAgICAgKCIlcCAoJXMpIGlzIG5vdCBhIHNtYXJ0IG9iamVjdCEiLCBvLCAg
ICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgIF90bXBfb3R5cGUgPyBfdG1wX290
eXBlIDogIihudWxsKSIpOyAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICByZXR1cm4g
X19WQV9BUkdTX187ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgICAgIGNvbnN0IEV2YXNfU21hcnRfQ2xhc3MqIF90bXBfc2Mg
PSBldmFzX3NtYXJ0X2NsYXNzX2dldChfdG1wX3MpOyBcCisgICAgICAgIGlmIChFSU5BX1VOTElL
RUxZKCFfdG1wX3NjKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgICAgICBFSU5BX0xPR19DUklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgKCIlcCAoJXMpIGlzIG5vdCBhIHNtYXJ0IG9i
amVjdCEiLCBvLCAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgIF90bXBfb3R5
cGUgPyBfdG1wX290eXBlIDogIihudWxsKSIpOyAgICAgICAgICAgICAgICAgICBcCisgICAgICAg
ICAgICByZXR1cm4gX19WQV9BUkdTX187ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChFSU5BX1VOTElLRUxZKF90
bXBfc2MtPmRhdGEgIT0gRVdLX1ZJRVdfVFlQRV9TVFIpKSB7ICAgICAgICBcCisgICAgICAgICAg
ICBFSU5BX0xPR19DUklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgICAgICAgICAgICAgKCIlcCAoJXMpIGlzIG5vdCBvZiBhbiBld2tfdmlldyAo
bmVlZCAlcCwgZ290ICVwKSEiLCAgICBcCisgICAgICAgICAgICAgICAgIG8sIF90bXBfb3R5cGUg
PyBfdG1wX290eXBlIDogIihudWxsKSIsICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAg
ICAgIEVXS19WSUVXX1RZUEVfU1RSLCBfdG1wX3NjLT5kYXRhKTsgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgICAgICAgICByZXR1cm4gX19WQV9BUkdTX187ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkK
KyNlbmRpZgorCisjZGVmaW5lIEVXS19WSUVXX1NEX0dFVChvLCBwdHIpICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHB0ciA9IChFd2tf
Vmlld19TbWFydF9EYXRhKilldmFzX29iamVjdF9zbWFydF9kYXRhX2dldChvKQorCisjZGVmaW5l
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgcHRyLCAuLi4pICAgICAgICAgIFwKKyAgICBF
V0tfVklFV19UWVBFX0NIRUNLKG8sIF9fVkFfQVJHU19fKTsgICAgICAgICAgICAgICAgXAorICAg
IEVXS19WSUVXX1NEX0dFVChvLCBwdHIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgaWYgKCFwdHIpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICAgICAgQ1JJVElDQUwoIm5vIHNtYXJ0IGRhdGEgZm9yIG9iamVjdCAlcCAoJXMpIiwgICAg
XAorICAgICAgICAgICAgICAgICBvLCBldmFzX29iamVjdF90eXBlX2dldChvKSk7ICAgICAgICAg
ICBcCisgICAgICAgIHJldHVybiBfX1ZBX0FSR1NfXzsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICB9CisKKyNkZWZpbmUgRVdLX1ZJRVdfUFJJVl9HRVQoc2QsIHB0cikgICAgICAg
ICAgICAgIFwKKyAgICBFd2tfVmlld19Qcml2YXRlX0RhdGEqIHB0ciA9IHNkLT5fcHJpdgorCisj
ZGVmaW5lIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHRyLCAuLi4pICAgICAgICAg
ICAgICAgXAorICAgIEVXS19WSUVXX1BSSVZfR0VUKHNkLCBwdHIpOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoIXB0cikgeyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIENSSVRJQ0FMKCJubyBwcml2YXRl
IGRhdGEgZm9yIG9iamVjdCAlcCAoJXMpIiwgICAgICAgICAgXAorICAgICAgICAgICAgICAgICBz
ZC0+c2VsZiwgZXZhc19vYmplY3RfdHlwZV9nZXQoc2QtPnNlbGYpKTsgICAgIFwKKyAgICAgICAg
cmV0dXJuIF9fVkFfQVJHU19fOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgfQorCitzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfY2hhbmdlZChFd2tfVmlld19T
bWFydF9EYXRhKiBzZCkKK3sKKyAgICBpZiAoc2QtPmNoYW5nZWQuYW55KQorICAgICAgICByZXR1
cm47CisgICAgc2QtPmNoYW5nZWQuYW55ID0gRUlOQV9UUlVFOworICAgIGV2YXNfb2JqZWN0X3Nt
YXJ0X2NoYW5nZWQoc2QtPnNlbGYpOworfQorCitzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19y
ZXBhaW50c19yZXNpemUoRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBwcml2LCBzaXplX3Qgc2l6ZSkK
K3sKKyAgICB2b2lkKiB0bXAgPSByZWFsbG9jKHByaXYtPnJlcGFpbnRzLmFycmF5LCBzaXplICog
c2l6ZW9mKEVpbmFfUmVjdGFuZ2xlKSk7CisgICAgaWYgKCF0bXApIHsKKyAgICAgICAgQ1JJVElD
QUwoImNvdWxkIG5vdCByZWFsbG9jIHJlcGFpbnRzIGFycmF5IHRvICV6dSBlbGVtZW50cy4iLCBz
aXplKTsKKyAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CisgICAgfQorICAgIHByaXYtPnJlcGFp
bnRzLmFsbG9jYXRlZCA9IHNpemU7CisgICAgcHJpdi0+cmVwYWludHMuYXJyYXkgPSAoRWluYV9S
ZWN0YW5nbGUqKXRtcDsKKyAgICByZXR1cm4gRUlOQV9UUlVFOworfQorCitzdGF0aWMgdm9pZCBf
ZXdrX3ZpZXdfcmVwYWludF9hZGQoRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBwcml2LCBFdmFzX0Nv
b3JkIHgsIEV2YXNfQ29vcmQgeSwgRXZhc19Db29yZCB3LCBFdmFzX0Nvb3JkIGgpCit7CisgICAg
RWluYV9SZWN0YW5nbGUqIHI7CisKKyAgICAvLyBmcHJpbnRmKHN0ZGVyciwgIj4+PiByZXBhaW50
IHJlcXVlc3RlZDogJWQsJWQrJWR4JWRcbiIsIHgsIHksIHcsIGgpOworICAgIGlmIChwcml2LT5y
ZXBhaW50cy5hbGxvY2F0ZWQgPT0gcHJpdi0+cmVwYWludHMuY291bnQpIHsKKyAgICAgICAgc2l6
ZV90IHNpemU7CisgICAgICAgIGlmICghcHJpdi0+cmVwYWludHMuYWxsb2NhdGVkKQorICAgICAg
ICAgICAgc2l6ZSA9IEVXS19WSUVXX1JFUEFJTlRTX1NJWkVfSU5JVElBTDsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgc2l6ZSA9IHByaXYtPnJlcGFpbnRzLmFsbG9jYXRlZCArIEVXS19WSUVX
X1JFUEFJTlRTX1NJWkVfU1RFUDsKKyAgICAgICAgaWYgKCFfZXdrX3ZpZXdfcmVwYWludHNfcmVz
aXplKHByaXYsIHNpemUpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHIgPSBw
cml2LT5yZXBhaW50cy5hcnJheSArIHByaXYtPnJlcGFpbnRzLmNvdW50OworICAgIHByaXYtPnJl
cGFpbnRzLmNvdW50Kys7CisKKyAgICByLT54ID0geDsKKyAgICByLT55ID0geTsKKyAgICByLT53
ID0gdzsKKyAgICByLT5oID0gaDsKKworICAgIERCRygiYWRkIHJlcGFpbnQgJWQsJWQrJWR4JWQi
LCB4LCB5LCB3LCBoKTsKK30KKworc3RhdGljIHZvaWQgX2V3a192aWV3X3JlcGFpbnRzX2ZsdXNo
KEV3a19WaWV3X1ByaXZhdGVfRGF0YSogcHJpdikKK3sKKyAgICBwcml2LT5yZXBhaW50cy5jb3Vu
dCA9IDA7CisgICAgaWYgKHByaXYtPnJlcGFpbnRzLmFsbG9jYXRlZCA8PSBFV0tfVklFV19SRVBB
SU5UU19TSVpFX01BWF9GUkVFKQorICAgICAgICByZXR1cm47CisgICAgX2V3a192aWV3X3JlcGFp
bnRzX3Jlc2l6ZShwcml2LCBFV0tfVklFV19SRVBBSU5UU19TSVpFX01BWF9GUkVFKTsKK30KKwor
c3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc2Nyb2xsc19yZXNpemUoRXdrX1ZpZXdfUHJpdmF0
ZV9EYXRhKiBwcml2LCBzaXplX3Qgc2l6ZSkKK3sKKyAgICB2b2lkKiB0bXAgPSByZWFsbG9jKHBy
aXYtPnNjcm9sbHMuYXJyYXksIHNpemUgKiBzaXplb2YoRXdrX1Njcm9sbF9SZXF1ZXN0KSk7Cisg
ICAgaWYgKCF0bXApIHsKKyAgICAgICAgQ1JJVElDQUwoImNvdWxkIG5vdCByZWFsbG9jIHNjcm9s
bHMgYXJyYXkgdG8gJXp1IGVsZW1lbnRzLiIsIHNpemUpOworICAgICAgICByZXR1cm4gRUlOQV9G
QUxTRTsKKyAgICB9CisgICAgcHJpdi0+c2Nyb2xscy5hbGxvY2F0ZWQgPSBzaXplOworICAgIHBy
aXYtPnNjcm9sbHMuYXJyYXkgPSAoRXdrX1Njcm9sbF9SZXF1ZXN0Kil0bXA7CisgICAgcmV0dXJu
IEVJTkFfVFJVRTsKK30KKworc3RhdGljIHZvaWQgX2V3a192aWV3X3Njcm9sbF9hZGQoRXdrX1Zp
ZXdfUHJpdmF0ZV9EYXRhKiBwcml2LCBFdmFzX0Nvb3JkIGR4LCBFdmFzX0Nvb3JkIGR5LCBFdmFz
X0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgRXZhc19Db29yZCB3LCBFdmFzX0Nvb3JkIGgsIEVpbmFf
Qm9vbCBtYWluX3Njcm9sbCkKK3sKKyAgICBFd2tfU2Nyb2xsX1JlcXVlc3QqIHI7CisgICAgRXdr
X1Njcm9sbF9SZXF1ZXN0KiByX2VuZDsKKyAgICBFdmFzX0Nvb3JkIHgyID0geCArIHcsIHkyID0g
eSArIGg7CisKKyAgICByID0gcHJpdi0+c2Nyb2xscy5hcnJheTsKKyAgICByX2VuZCA9IHIgKyBw
cml2LT5zY3JvbGxzLmNvdW50OworICAgIGZvciAoOyByIDwgcl9lbmQ7IHIrKykgeworICAgICAg
ICBpZiAoci0+eCA9PSB4ICYmIHItPnkgPT0geSAmJiByLT53ID09IHcgJiYgci0+aCA9PSBoKSB7
CisgICAgICAgICAgICBEQkcoInJlZ2lvbiBhbHJlYWR5IHNjcm9sbGVkICVkLCVkKyVkeCVkICUr
MDNkLCUrMDNkIGFkZCAiCisgICAgICAgICAgICAgICAgIiUrMDNkLCUrMDNkIiwKKyAgICAgICAg
ICAgICAgICByLT54LCByLT55LCByLT53LCByLT5oLCByLT5keCwgci0+ZHksIGR4LCBkeSk7Cisg
ICAgICAgICAgICByLT5keCArPSBkeDsKKyAgICAgICAgICAgIHItPmR5ICs9IGR5OworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmICgoeCA8PSByLT54ICYmIHgyID49
IHItPngyKSAmJiAoeSA8PSByLT55ICYmIHkyID49IHItPnkyKSkgeworICAgICAgICAgICAgREJH
KCJvbGQgdmlld3BvcnQgKCVkLCVkKyVkeCVkICUrMDNkLCUrMDNkKSB3YXMgc2Nyb2xsZWQgaXRz
ZWxmLCAiCisgICAgICAgICAgICAgICAgImFkZCAlKzAzZCwlKzAzZCIsCisgICAgICAgICAgICAg
ICAgci0+eCwgci0+eSwgci0+dywgci0+aCwgci0+ZHgsIHItPmR5LCBkeCwgZHkpOworICAgICAg
ICAgICAgci0+eCArPSBkeDsKKyAgICAgICAgICAgIHItPnkgKz0gZHk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBpZiAocHJpdi0+c2Nyb2xscy5hbGxvY2F0ZWQgPT0gcHJpdi0+c2Nyb2xscy5j
b3VudCkgeworICAgICAgICBzaXplX3Qgc2l6ZTsKKyAgICAgICAgaWYgKCFwcml2LT5zY3JvbGxz
LmFsbG9jYXRlZCkKKyAgICAgICAgICAgIHNpemUgPSBFV0tfVklFV19TQ1JPTExTX1NJWkVfSU5J
VElBTDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2l6ZSA9IHByaXYtPnNjcm9sbHMuYWxs
b2NhdGVkICsgRVdLX1ZJRVdfU0NST0xMU19TSVpFX1NURVA7CisgICAgICAgIGlmICghX2V3a192
aWV3X3Njcm9sbHNfcmVzaXplKHByaXYsIHNpemUpKQorICAgICAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIHIgPSBwcml2LT5zY3JvbGxzLmFycmF5ICsgcHJpdi0+c2Nyb2xscy5jb3VudDsK
KyAgICBwcml2LT5zY3JvbGxzLmNvdW50Kys7CisKKyAgICByLT54ID0geDsKKyAgICByLT55ID0g
eTsKKyAgICByLT53ID0gdzsKKyAgICByLT5oID0gaDsKKyAgICByLT54MiA9IHgyOworICAgIHIt
PnkyID0geTI7CisgICAgci0+ZHggPSBkeDsKKyAgICByLT5keSA9IGR5OworICAgIHItPm1haW5f
c2Nyb2xsID0gbWFpbl9zY3JvbGw7CisgICAgREJHKCJhZGQgc2Nyb2xsIGluIHJlZ2lvbjogJWQs
JWQrJWR4JWQgJSswM2QsJSswM2QiLCB4LCB5LCB3LCBoLCBkeCwgZHkpOworCisgICAgRWluYV9S
ZWN0YW5nbGUqIHByOworICAgIEVpbmFfUmVjdGFuZ2xlKiBwcl9lbmQ7CisgICAgc2l6ZV90IGNv
dW50OworICAgIHByID0gcHJpdi0+cmVwYWludHMuYXJyYXk7CisgICAgY291bnQgPSBwcml2LT5y
ZXBhaW50cy5jb3VudDsKKyAgICBwcl9lbmQgPSBwciArIGNvdW50OworICAgIGZvciAoOyBwciA8
IHByX2VuZDsgcHIrKykgeworICAgICAgICBwci0+eCArPSBkeDsKKyAgICAgICAgcHItPnkgKz0g
ZHk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc2Nyb2xsc19mbHVzaChFd2tf
Vmlld19Qcml2YXRlX0RhdGEqIHByaXYpCit7CisgICAgcHJpdi0+c2Nyb2xscy5jb3VudCA9IDA7
CisgICAgaWYgKHByaXYtPnNjcm9sbHMuYWxsb2NhdGVkIDw9IEVXS19WSUVXX1NDUk9MTFNfU0la
RV9NQVhfRlJFRSkKKyAgICAgICAgcmV0dXJuOworICAgIF9ld2tfdmlld19zY3JvbGxzX3Jlc2l6
ZShwcml2LCBFV0tfVklFV19TQ1JPTExTX1NJWkVfTUFYX0ZSRUUpOworfQorCisvLyBEZWZhdWx0
IEV2ZW50IEhhbmRsaW5nIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8KK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3NtYXJ0X2ZvY3VzX2luKEV3a19WaWV3
X1NtYXJ0X0RhdGEqIHNkKQoreworICAgIEVXS19WSUVXX1BSSVZfR0VUKHNkLCBwcml2KTsKKyAg
ICBXZWJDb3JlOjpGb2N1c0NvbnRyb2xsZXIqIGZjID0gcHJpdi0+cGFnZS0+Zm9jdXNDb250cm9s
bGVyKCk7CisgICAgREJHKCJvPSVwLCBmYz0lcCIsIHNkLT5zZWxmLCBmYyk7CisgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGZjLCBFSU5BX0ZBTFNFKTsKKworICAgIGZjLT5zZXRB
Y3RpdmUodHJ1ZSk7CisgICAgZmMtPnNldEZvY3VzZWQodHJ1ZSk7CisgICAgcmV0dXJuIEVJTkFf
VFJVRTsKK30KKworc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRfZm9jdXNfb3V0KEV3
a19WaWV3X1NtYXJ0X0RhdGEqIHNkKQoreworICAgIEVXS19WSUVXX1BSSVZfR0VUKHNkLCBwcml2
KTsKKyAgICBXZWJDb3JlOjpGb2N1c0NvbnRyb2xsZXIqIGZjID0gcHJpdi0+cGFnZS0+Zm9jdXND
b250cm9sbGVyKCk7CisgICAgREJHKCJvPSVwLCBmYz0lcCIsIHNkLT5zZWxmLCBmYyk7CisgICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGZjLCBFSU5BX0ZBTFNFKTsKKworICAgIGZj
LT5zZXRBY3RpdmUoZmFsc2UpOworICAgIGZjLT5zZXRGb2N1c2VkKGZhbHNlKTsKKyAgICByZXR1
cm4gRUlOQV9UUlVFOworfQorCitzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19zbWFydF9tb3Vz
ZV93aGVlbChFd2tfVmlld19TbWFydF9EYXRhKiBzZCwgY29uc3QgRXZhc19FdmVudF9Nb3VzZV9X
aGVlbCogZXYpCit7CisgICAgcmV0dXJuIGV3a19mcmFtZV9mZWVkX21vdXNlX3doZWVsKHNkLT5t
YWluX2ZyYW1lLCBldik7Cit9CisKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3NtYXJ0X21v
dXNlX2Rvd24oRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QsIGNvbnN0IEV2YXNfRXZlbnRfTW91c2Vf
RG93biogZXYpCit7CisgICAgcmV0dXJuIGV3a19mcmFtZV9mZWVkX21vdXNlX2Rvd24oc2QtPm1h
aW5fZnJhbWUsIGV2KTsKK30KKworc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRfbW91
c2VfdXAoRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QsIGNvbnN0IEV2YXNfRXZlbnRfTW91c2VfVXAq
IGV2KQoreworICAgIHJldHVybiBld2tfZnJhbWVfZmVlZF9tb3VzZV91cChzZC0+bWFpbl9mcmFt
ZSwgZXYpOworfQorCitzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19zbWFydF9tb3VzZV9tb3Zl
KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkLCBjb25zdCBFdmFzX0V2ZW50X01vdXNlX01vdmUqIGV2
KQoreworICAgIHJldHVybiBld2tfZnJhbWVfZmVlZF9tb3VzZV9tb3ZlKHNkLT5tYWluX2ZyYW1l
LCBldik7Cit9CisKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3NtYXJ0X2tleV9kb3duKEV3
a19WaWV3X1NtYXJ0X0RhdGEqIHNkLCBjb25zdCBFdmFzX0V2ZW50X0tleV9Eb3duKiBldikKK3sK
KyAgICBFdmFzX09iamVjdCogZnJhbWUgPSBld2tfdmlld19mcmFtZV9mb2N1c2VkX2dldChzZC0+
c2VsZik7CisKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICBmcmFtZSA9IHNkLT5tYWluX2ZyYW1l
OworCisgICAgcmV0dXJuIGV3a19mcmFtZV9mZWVkX2tleV9kb3duKGZyYW1lLCBldik7Cit9CisK
K3N0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3NtYXJ0X2tleV91cChFd2tfVmlld19TbWFydF9E
YXRhKiBzZCwgY29uc3QgRXZhc19FdmVudF9LZXlfVXAqIGV2KQoreworICAgIEV2YXNfT2JqZWN0
KiBmcmFtZSA9IGV3a192aWV3X2ZyYW1lX2ZvY3VzZWRfZ2V0KHNkLT5zZWxmKTsKKworICAgIGlm
ICghZnJhbWUpCisgICAgICAgIGZyYW1lID0gc2QtPm1haW5fZnJhbWU7CisKKyAgICByZXR1cm4g
ZXdrX2ZyYW1lX2ZlZWRfa2V5X3VwKGZyYW1lLCBldik7Cit9CisKK3N0YXRpYyB2b2lkIF9ld2tf
dmlld19zbWFydF9hZGRfY29uc29sZV9tZXNzYWdlKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkLCBj
b25zdCBjaGFyKiBtZXNzYWdlLCB1bnNpZ25lZCBpbnQgbGluZU51bWJlciwgY29uc3QgY2hhciog
c291cmNlSUQpCit7CisgICAgSU5GKCJjb25zb2xlIG1lc3NhZ2U6ICVzIEAlZDogJXNcbiIsIHNv
dXJjZUlELCBsaW5lTnVtYmVyLCBtZXNzYWdlKTsKK30KKworc3RhdGljIHZvaWQgX2V3a192aWV3
X3NtYXJ0X3J1bl9qYXZhc2NyaXB0X2FsZXJ0KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkLCBFdmFz
X09iamVjdCogZnJhbWUsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCit7CisgICAgSU5GKCJqYXZhc2Ny
aXB0IGFsZXJ0OiAlc1xuIiwgbWVzc2FnZSk7Cit9CisKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a192
aWV3X3NtYXJ0X3J1bl9qYXZhc2NyaXB0X2NvbmZpcm0oRXdrX1ZpZXdfU21hcnRfRGF0YSogc2Qs
IEV2YXNfT2JqZWN0KiBmcmFtZSwgY29uc3QgY2hhciogbWVzc2FnZSkKK3sKKyAgICBJTkYoImph
dmFzY3JpcHQgY29uZmlybTogJXMiLCBtZXNzYWdlKTsKKyAgICBJTkYoImphdmFzY3JpcHQgY29u
ZmlybSAoSEFSRCBDT0RFRCk/IFlFUyIpOworICAgIHJldHVybiBFSU5BX1RSVUU7Cit9CisKK3N0
YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3NtYXJ0X3Nob3VsZF9pbnRlcnJ1cHRfamF2YXNjcmlw
dChFd2tfVmlld19TbWFydF9EYXRhKiBzZCkKK3sKKyAgICBJTkYoInNob3VsZCBpbnRlcnJ1cHQg
amF2YXNjcmlwdD9cbiIKKyAgICAgICAgICAgICJcdChIQVJEIENPREVEKSBOTyIpOworICAgIHJl
dHVybiBFSU5BX0ZBTFNFOworfQorCitzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19zbWFydF9y
dW5famF2YXNjcmlwdF9wcm9tcHQoRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QsIEV2YXNfT2JqZWN0
KiBmcmFtZSwgY29uc3QgY2hhciogbWVzc2FnZSwgY29uc3QgY2hhciogZGVmYXVsdFZhbHVlLCBj
aGFyKiogdmFsdWUpCit7CisgICAgKnZhbHVlID0gc3RyZHVwKCJ0ZXN0Iik7CisgICAgRWluYV9C
b29sIHJldCA9IEVJTkFfVFJVRTsKKyAgICBJTkYoImphdmFzY3JpcHQgcHJvbXB0OlxuIgorICAg
ICAgICAgICAgIlx0ICAgICAgbWVzc2FnZTogJXNcbiIKKyAgICAgICAgICAgICJcdGRlZmF1bHQg
dmFsdWU6ICVzXG4iCisgICAgICAgICAgICAiXHRnaXZpbmcgYW5zd2VyOiAlc1xuIgorICAgICAg
ICAgICAgIlx0ICAgICAgIGJ1dHRvbjogJXMiLCBtZXNzYWdlLCBkZWZhdWx0VmFsdWUsICp2YWx1
ZSwgcmV0PyJvayI6ImNhbmNlbCIpOworCisgICAgcmV0dXJuIHJldDsKK30KKworLy8gRXZlbnQg
SGFuZGxpbmcgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vCitzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfb25fZm9jdXNfaW4odm9pZCogZGF0YSwgRXZh
cyogZSwgRXZhc19PYmplY3QqIG8sIHZvaWQqIGV2ZW50X2luZm8pCit7CisgICAgRXdrX1ZpZXdf
U21hcnRfRGF0YSogc2QgPSAoRXdrX1ZpZXdfU21hcnRfRGF0YSopZGF0YTsKKyAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTihzZC0+YXBpLT5mb2N1c19pbik7CisgICAgc2QtPmFwaS0+Zm9jdXNfaW4oc2QpOworfQor
CitzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfb25fZm9jdXNfb3V0KHZvaWQqIGRhdGEsIEV2YXMqIGUs
IEV2YXNfT2JqZWN0KiBvLCB2b2lkKiBldmVudF9pbmZvKQoreworICAgIEV3a19WaWV3X1NtYXJ0
X0RhdGEqIHNkID0gKEV3a19WaWV3X1NtYXJ0X0RhdGEqKWRhdGE7CisgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk4oc2QtPmFwaSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4o
c2QtPmFwaS0+Zm9jdXNfb3V0KTsKKyAgICBzZC0+YXBpLT5mb2N1c19vdXQoc2QpOworfQorCitz
dGF0aWMgdm9pZCBfZXdrX3ZpZXdfb25fbW91c2Vfd2hlZWwodm9pZCogZGF0YSwgRXZhcyogZSwg
RXZhc19PYmplY3QqIG8sIHZvaWQqIGV2ZW50X2luZm8pCit7CisgICAgRXZhc19FdmVudF9Nb3Vz
ZV9XaGVlbCogZXYgPSAoRXZhc19FdmVudF9Nb3VzZV9XaGVlbCopZXZlbnRfaW5mbzsKKyAgICBF
d2tfVmlld19TbWFydF9EYXRhKiBzZCA9IChFd2tfVmlld19TbWFydF9EYXRhKilkYXRhOworICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGkpOworICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOKHNkLT5hcGktPm1vdXNlX3doZWVsKTsKKyAgICBzZC0+YXBpLT5tb3VzZV93
aGVlbChzZCwgZXYpOworfQorCitzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfb25fbW91c2VfZG93bih2
b2lkKiBkYXRhLCBFdmFzKiBlLCBFdmFzX09iamVjdCogbywgdm9pZCogZXZlbnRfaW5mbykKK3sK
KyAgICBFdmFzX0V2ZW50X01vdXNlX0Rvd24qIGV2ID0gKEV2YXNfRXZlbnRfTW91c2VfRG93biop
ZXZlbnRfaW5mbzsKKyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9IChFd2tfVmlld19TbWFy
dF9EYXRhKilkYXRhOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGkpOwor
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGktPm1vdXNlX2Rvd24pOworICAg
IHNkLT5hcGktPm1vdXNlX2Rvd24oc2QsIGV2KTsKK30KKworc3RhdGljIHZvaWQgX2V3a192aWV3
X29uX21vdXNlX3VwKHZvaWQqIGRhdGEsIEV2YXMqIGUsIEV2YXNfT2JqZWN0KiBvLCB2b2lkKiBl
dmVudF9pbmZvKQoreworICAgIEV2YXNfRXZlbnRfTW91c2VfVXAqIGV2ID0gKEV2YXNfRXZlbnRf
TW91c2VfVXAqKWV2ZW50X2luZm87CisgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QgPSAoRXdr
X1ZpZXdfU21hcnRfRGF0YSopZGF0YTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihz
ZC0+YXBpKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpLT5tb3VzZV91
cCk7CisgICAgc2QtPmFwaS0+bW91c2VfdXAoc2QsIGV2KTsKK30KKworc3RhdGljIHZvaWQgX2V3
a192aWV3X29uX21vdXNlX21vdmUodm9pZCogZGF0YSwgRXZhcyogZSwgRXZhc19PYmplY3QqIG8s
IHZvaWQqIGV2ZW50X2luZm8pCit7CisgICAgRXZhc19FdmVudF9Nb3VzZV9Nb3ZlKiBldiA9IChF
dmFzX0V2ZW50X01vdXNlX01vdmUqKWV2ZW50X2luZm87CisgICAgRXdrX1ZpZXdfU21hcnRfRGF0
YSogc2QgPSAoRXdrX1ZpZXdfU21hcnRfRGF0YSopZGF0YTsKKyAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTihzZC0+YXBpKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+
YXBpLT5tb3VzZV9tb3ZlKTsKKyAgICBzZC0+YXBpLT5tb3VzZV9tb3ZlKHNkLCBldik7Cit9CisK
K3N0YXRpYyB2b2lkIF9ld2tfdmlld19vbl9rZXlfZG93bih2b2lkKiBkYXRhLCBFdmFzKiBlLCBF
dmFzX09iamVjdCogbywgdm9pZCogZXZlbnRfaW5mbykKK3sKKyAgICBFdmFzX0V2ZW50X0tleV9E
b3duKiBldiA9IChFdmFzX0V2ZW50X0tleV9Eb3duKilldmVudF9pbmZvOworICAgIEV3a19WaWV3
X1NtYXJ0X0RhdGEqIHNkID0gKEV3a19WaWV3X1NtYXJ0X0RhdGEqKWRhdGE7CisgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk4oc2QtPmFwaS0+a2V5X2Rvd24pOworICAgIHNkLT5hcGktPmtleV9kb3duKHNkLCBldik7
Cit9CisKK3N0YXRpYyB2b2lkIF9ld2tfdmlld19vbl9rZXlfdXAodm9pZCogZGF0YSwgRXZhcyog
ZSwgRXZhc19PYmplY3QqIG8sIHZvaWQqIGV2ZW50X2luZm8pCit7CisgICAgRXZhc19FdmVudF9L
ZXlfVXAqIGV2ID0gKEV2YXNfRXZlbnRfS2V5X1VwKilldmVudF9pbmZvOworICAgIEV3a19WaWV3
X1NtYXJ0X0RhdGEqIHNkID0gKEV3a19WaWV3X1NtYXJ0X0RhdGEqKWRhdGE7CisgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk4oc2QtPmFwaS0+a2V5X3VwKTsKKyAgICBzZC0+YXBpLT5rZXlfdXAoc2QsIGV2KTsKK30K
Kworc3RhdGljIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpGcmFtZT4gX2V3a192aWV3X2NvcmVf
ZnJhbWVfbmV3KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkLCBFd2tfVmlld19Qcml2YXRlX0RhdGEq
IHByaXYsIFdlYkNvcmU6OkhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXIpCit7CisgICAgV2Vi
Q29yZTo6RnJhbWVMb2FkZXJDbGllbnRFZmwqIGZsYyA9IG5ldyBXZWJDb3JlOjpGcmFtZUxvYWRl
ckNsaWVudEVmbChzZC0+c2VsZik7CisgICAgaWYgKCFmbGMpIHsKKyAgICAgICAgQ1JJVElDQUwo
IkNvdWxkIG5vdCBjcmVhdGUgZnJhbWUgbG9hZGVyIGNsaWVudC4iKTsKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgfQorICAgIGZsYy0+c2V0Q3VzdG9tVXNlckFnZW50KFdlYkNvcmU6OlN0cmluZzo6
ZnJvbVVURjgocHJpdi0+c2V0dGluZ3MudXNlcl9hZ2VudCkpOworCisgICAgcmV0dXJuIFdlYkNv
cmU6OkZyYW1lOjpjcmVhdGUocHJpdi0+cGFnZSwgb3duZXIsIGZsYyk7Cit9CisKK3N0YXRpYyBF
dmFzX1NtYXJ0X0NsYXNzIF9wYXJlbnRfc2MgPSBFVkFTX1NNQVJUX0NMQVNTX0lOSVRfMDsKKwor
c3RhdGljIEV3a19WaWV3X1ByaXZhdGVfRGF0YSogX2V3a192aWV3X3ByaXZfbmV3KEV3a19WaWV3
X1NtYXJ0X0RhdGEqIHNkKQoreworICAgIEV3a19WaWV3X1ByaXZhdGVfRGF0YSogcHJpdiA9Cisg
ICAgICAgIChFd2tfVmlld19Qcml2YXRlX0RhdGEqKWNhbGxvYygxLCBzaXplb2YoRXdrX1ZpZXdf
UHJpdmF0ZV9EYXRhKSk7CisgICAgV2ViQ29yZTo6QXRvbWljU3RyaW5nIHM7CisgICAgV2ViQ29y
ZTo6S1VSTCB1cmw7CisKKyAgICBpZiAoIXByaXYpIHsKKyAgICAgICAgQ1JJVElDQUwoImNvdWxk
IG5vdCBhbGxvY2F0ZSBFd2tfVmlld19Qcml2YXRlX0RhdGEiKTsKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgfQorICAgIHByaXYtPnBhZ2UgPSBuZXcgV2ViQ29yZTo6UGFnZSgKKyAgICAgICAgc3Rh
dGljX2Nhc3Q8V2ViQ29yZTo6Q2hyb21lQ2xpZW50Kj4obmV3IFdlYkNvcmU6OkNocm9tZUNsaWVu
dEVmbChzZC0+c2VsZikpLAorICAgICAgICBzdGF0aWNfY2FzdDxXZWJDb3JlOjpDb250ZXh0TWVu
dUNsaWVudCo+KG5ldyBXZWJDb3JlOjpDb250ZXh0TWVudUNsaWVudEVmbChzZC0+c2VsZikpLAor
ICAgICAgICBzdGF0aWNfY2FzdDxXZWJDb3JlOjpFZGl0b3JDbGllbnQqPihuZXcgV2ViQ29yZTo6
RWRpdG9yQ2xpZW50RWZsKHNkLT5zZWxmKSksCisgICAgICAgIHN0YXRpY19jYXN0PFdlYkNvcmU6
OkRyYWdDbGllbnQqPihuZXcgV2ViQ29yZTo6RHJhZ0NsaWVudEVmbCksCisgICAgICAgIHN0YXRp
Y19jYXN0PFdlYkNvcmU6Okluc3BlY3RvckNsaWVudCo+KG5ldyBXZWJDb3JlOjpJbnNwZWN0b3JD
bGllbnRFZmwpLAorICAgICAgICAwLAorICAgICAgICAwKTsKKyAgICBpZiAoIXByaXYtPnBhZ2Up
IHsKKyAgICAgICAgQ1JJVElDQUwoIkNvdWxkIG5vdCBjcmVhdGUgV2ViS2l0IFBhZ2UiKTsKKyAg
ICAgICAgZ290byBlcnJvcl9wYWdlOworICAgIH0KKworICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3Mg
PSBwcml2LT5wYWdlLT5zZXR0aW5ncygpOworICAgIGlmICghcHJpdi0+cGFnZV9zZXR0aW5ncykg
eworICAgICAgICBDUklUSUNBTCgiQ291bGQgbm90IGdldCBwYWdlIHNldHRpbmdzLiIpOworICAg
ICAgICBnb3RvIGVycm9yX3NldHRpbmdzOworICAgIH0KKworICAgIHByaXYtPnBhZ2Vfc2V0dGlu
Z3MtPnNldExvYWRzSW1hZ2VzQXV0b21hdGljYWxseSh0cnVlKTsKKyAgICBwcml2LT5wYWdlX3Nl
dHRpbmdzLT5zZXREZWZhdWx0Rml4ZWRGb250U2l6ZSgxMik7CisgICAgcHJpdi0+cGFnZV9zZXR0
aW5ncy0+c2V0RGVmYXVsdEZvbnRTaXplKDE2KTsKKyAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5z
ZXRTZXJpZkZvbnRGYW1pbHkoInNlcmlmIik7CisgICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0
Rml4ZWRGb250RmFtaWx5KCJtb25vdHlwZSIpOworICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNl
dFNhbnNTZXJpZkZvbnRGYW1pbHkoInNhbnMiKTsKKyAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5z
ZXRTdGFuZGFyZEZvbnRGYW1pbHkoInNhbnMiKTsKKyAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5z
ZXRKYXZhU2NyaXB0RW5hYmxlZCh0cnVlKTsKKyAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXRQ
bHVnaW5zRW5hYmxlZCh0cnVlKTsKKworICAgIHVybCA9IHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnVz
ZXJTdHlsZVNoZWV0TG9jYXRpb24oKTsKKyAgICBwcml2LT5zZXR0aW5ncy51c2VyX3N0eWxlc2hl
ZXQgPSBlaW5hX3N0cmluZ3NoYXJlX2FkZCh1cmwucHJldHR5VVJMKCkudXRmOCgpLmRhdGEoKSk7
CisKKyAgICBwcml2LT5zZXR0aW5ncy5lbmNvZGluZ19kZWZhdWx0ID0gZWluYV9zdHJpbmdzaGFy
ZV9hZGQKKyAgICAgICAgKHByaXYtPnBhZ2Vfc2V0dGluZ3MtPmRlZmF1bHRUZXh0RW5jb2RpbmdO
YW1lKCkudXRmOCgpLmRhdGEoKSk7CisgICAgcHJpdi0+c2V0dGluZ3MuZW5jb2RpbmdfY3VzdG9t
ID0gMDsKKworICAgIHByaXYtPnNldHRpbmdzLmZvbnRfbWluaW11bV9zaXplID0gcHJpdi0+cGFn
ZV9zZXR0aW5ncy0+bWluaW11bUZvbnRTaXplKCk7CisgICAgcHJpdi0+c2V0dGluZ3MuZm9udF9t
aW5pbXVtX2xvZ2ljYWxfc2l6ZSA9IHByaXYtPnBhZ2Vfc2V0dGluZ3MtPm1pbmltdW1Mb2dpY2Fs
Rm9udFNpemUoKTsKKyAgICBwcml2LT5zZXR0aW5ncy5mb250X2RlZmF1bHRfc2l6ZSA9IHByaXYt
PnBhZ2Vfc2V0dGluZ3MtPmRlZmF1bHRGb250U2l6ZSgpOworICAgIHByaXYtPnNldHRpbmdzLmZv
bnRfbW9ub3NwYWNlX3NpemUgPSBwcml2LT5wYWdlX3NldHRpbmdzLT5kZWZhdWx0Rml4ZWRGb250
U2l6ZSgpOworCisgICAgcyA9IHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnN0YW5kYXJkRm9udEZhbWls
eSgpOworICAgIHByaXYtPnNldHRpbmdzLmZvbnRfc3RhbmRhcmQgPSBlaW5hX3N0cmluZ3NoYXJl
X2FkZChzLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIHMgPSBwcml2LT5wYWdlX3NldHRp
bmdzLT5jdXJzaXZlRm9udEZhbWlseSgpOworICAgIHByaXYtPnNldHRpbmdzLmZvbnRfY3Vyc2l2
ZSA9IGVpbmFfc3RyaW5nc2hhcmVfYWRkKHMuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAg
cyA9IHByaXYtPnBhZ2Vfc2V0dGluZ3MtPmZpeGVkRm9udEZhbWlseSgpOworICAgIHByaXYtPnNl
dHRpbmdzLmZvbnRfbW9ub3NwYWNlID0gZWluYV9zdHJpbmdzaGFyZV9hZGQocy5zdHJpbmcoKS51
dGY4KCkuZGF0YSgpKTsKKyAgICBzID0gcHJpdi0+cGFnZV9zZXR0aW5ncy0+ZmFudGFzeUZvbnRG
YW1pbHkoKTsKKyAgICBwcml2LT5zZXR0aW5ncy5mb250X2ZhbnRhc3kgPSBlaW5hX3N0cmluZ3No
YXJlX2FkZChzLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIHMgPSBwcml2LT5wYWdlX3Nl
dHRpbmdzLT5zZXJpZkZvbnRGYW1pbHkoKTsKKyAgICBwcml2LT5zZXR0aW5ncy5mb250X3Nlcmlm
ID0gZWluYV9zdHJpbmdzaGFyZV9hZGQocy5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBz
ID0gcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2Fuc1NlcmlmRm9udEZhbWlseSgpOworICAgIHByaXYt
PnNldHRpbmdzLmZvbnRfc2Fuc19zZXJpZiA9IGVpbmFfc3RyaW5nc2hhcmVfYWRkKHMuc3RyaW5n
KCkudXRmOCgpLmRhdGEoKSk7CisKKyAgICBwcml2LT5zZXR0aW5ncy5hdXRvX2xvYWRfaW1hZ2Vz
ID0gcHJpdi0+cGFnZV9zZXR0aW5ncy0+bG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5KCk7CisgICAg
cHJpdi0+c2V0dGluZ3MuYXV0b19zaHJpbmtfaW1hZ2VzID0gcHJpdi0+cGFnZV9zZXR0aW5ncy0+
c2hyaW5rc1N0YW5kYWxvbmVJbWFnZXNUb0ZpdCgpOworICAgIHByaXYtPnNldHRpbmdzLmVuYWJs
ZV9zY3JpcHRzID0gcHJpdi0+cGFnZV9zZXR0aW5ncy0+aXNKYXZhU2NyaXB0RW5hYmxlZCgpOwor
ICAgIHByaXYtPnNldHRpbmdzLmVuYWJsZV9wbHVnaW5zID0gcHJpdi0+cGFnZV9zZXR0aW5ncy0+
YXJlUGx1Z2luc0VuYWJsZWQoKTsKKyAgICBwcml2LT5zZXR0aW5ncy5zY3JpcHRzX3dpbmRvd19v
cGVuID0gcHJpdi0+cGFnZV9zZXR0aW5ncy0+YWxsb3dTY3JpcHRzVG9DbG9zZVdpbmRvd3MoKTsK
KyAgICBwcml2LT5zZXR0aW5ncy5yZXNpemFibGVfdGV4dGFyZWFzID0gcHJpdi0+cGFnZV9zZXR0
aW5ncy0+dGV4dEFyZWFzQXJlUmVzaXphYmxlKCk7CisgICAgcHJpdi0+c2V0dGluZ3MucHJpdmF0
ZV9icm93c2luZyA9IHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnByaXZhdGVCcm93c2luZ0VuYWJsZWQo
KTsKKyAgICBwcml2LT5zZXR0aW5ncy5jYXJldF9icm93c2luZyA9IHByaXYtPnBhZ2Vfc2V0dGlu
Z3MtPmNhcmV0QnJvd3NpbmdFbmFibGVkKCk7CisKKyAgICBwcml2LT5tYWluX2ZyYW1lID0gX2V3
a192aWV3X2NvcmVfZnJhbWVfbmV3KHNkLCBwcml2LCAwKS5nZXQoKTsKKyAgICBpZiAoIXByaXYt
Pm1haW5fZnJhbWUpIHsKKyAgICAgICAgQ1JJVElDQUwoIkNvdWxkIG5vdCBjcmVhdGUgbWFpbiBm
cmFtZS4iKTsKKyAgICAgICAgZ290byBlcnJvcl9tYWluX2ZyYW1lOworICAgIH0KKworICAgIHBy
aXYtPmhpc3RvcnkgPSBld2tfaGlzdG9yeV9uZXcocHJpdi0+cGFnZS0+YmFja0ZvcndhcmRMaXN0
KCkpOworICAgIGlmICghcHJpdi0+aGlzdG9yeSkgeworICAgICAgICBDUklUSUNBTCgiQ291bGQg
bm90IGNyZWF0ZSBoaXN0b3J5IGluc3RhbmNlIGZvciB2aWV3LiIpOworICAgICAgICBnb3RvIGVy
cm9yX2hpc3Rvcnk7CisgICAgfQorCisgICAgcmV0dXJuIHByaXY7CisKK2Vycm9yX2hpc3Rvcnk6
CisgICAgLy8gZGVsZXRlIHByaXYtPm1haW5fZnJhbWU7IC8qIGRvIG5vdCBkZWxldGUgcHJpdi0+
bWFpbl9mcmFtZSAqLworZXJyb3JfbWFpbl9mcmFtZToKK2Vycm9yX3NldHRpbmdzOgorICAgIGRl
bGV0ZSBwcml2LT5wYWdlOworZXJyb3JfcGFnZToKKyAgICBmcmVlKHByaXYpOworICAgIHJldHVy
biAwOworfQorCitzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfcHJpdl9kZWwoRXdrX1ZpZXdfUHJpdmF0
ZV9EYXRhKiBwcml2KQoreworICAgIGlmICghcHJpdikKKyAgICAgICAgcmV0dXJuOworCisgICAg
LyogZG8gbm90IGRlbGV0ZSBwcml2LT5tYWluX2ZyYW1lICovCisKKyAgICBmcmVlKHByaXYtPnJl
cGFpbnRzLmFycmF5KTsKKyAgICBmcmVlKHByaXYtPnNjcm9sbHMuYXJyYXkpOworCisgICAgZWlu
YV9zdHJpbmdzaGFyZV9kZWwocHJpdi0+c2V0dGluZ3MudXNlcl9hZ2VudCk7CisgICAgZWluYV9z
dHJpbmdzaGFyZV9kZWwocHJpdi0+c2V0dGluZ3MudXNlcl9zdHlsZXNoZWV0KTsKKyAgICBlaW5h
X3N0cmluZ3NoYXJlX2RlbChwcml2LT5zZXR0aW5ncy5lbmNvZGluZ19kZWZhdWx0KTsKKyAgICBl
aW5hX3N0cmluZ3NoYXJlX2RlbChwcml2LT5zZXR0aW5ncy5lbmNvZGluZ19jdXN0b20pOworICAg
IGVpbmFfc3RyaW5nc2hhcmVfZGVsKHByaXYtPnNldHRpbmdzLmZvbnRfc3RhbmRhcmQpOworICAg
IGVpbmFfc3RyaW5nc2hhcmVfZGVsKHByaXYtPnNldHRpbmdzLmZvbnRfY3Vyc2l2ZSk7CisgICAg
ZWluYV9zdHJpbmdzaGFyZV9kZWwocHJpdi0+c2V0dGluZ3MuZm9udF9tb25vc3BhY2UpOworICAg
IGVpbmFfc3RyaW5nc2hhcmVfZGVsKHByaXYtPnNldHRpbmdzLmZvbnRfZmFudGFzeSk7CisgICAg
ZWluYV9zdHJpbmdzaGFyZV9kZWwocHJpdi0+c2V0dGluZ3MuZm9udF9zZXJpZik7CisgICAgZWlu
YV9zdHJpbmdzaGFyZV9kZWwocHJpdi0+c2V0dGluZ3MuZm9udF9zYW5zX3NlcmlmKTsKKworICAg
IGlmIChwcml2LT5hbmltYXRlZF96b29tLmFuaW1hdG9yKQorICAgICAgICBlY29yZV9hbmltYXRv
cl9kZWwocHJpdi0+YW5pbWF0ZWRfem9vbS5hbmltYXRvcik7CisKKyAgICBld2tfaGlzdG9yeV9m
cmVlKHByaXYtPmhpc3RvcnkpOworCisgICAgZGVsZXRlIHByaXYtPnBhZ2U7CisgICAgZnJlZShw
cml2KTsKK30KKworc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X2FkZChFdmFzX09iamVjdCog
bykKK3sKKyAgICBjb25zdCBFdmFzX1NtYXJ0KiBzbWFydCA9IGV2YXNfb2JqZWN0X3NtYXJ0X3Nt
YXJ0X2dldChvKTsKKyAgICBjb25zdCBFdmFzX1NtYXJ0X0NsYXNzKiBzYyA9IGV2YXNfc21hcnRf
Y2xhc3NfZ2V0KHNtYXJ0KTsKKyAgICBjb25zdCBFd2tfVmlld19TbWFydF9DbGFzcyogYXBpID0g
KGNvbnN0IEV3a19WaWV3X1NtYXJ0X0NsYXNzKilzYzsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTihhcGktPmJhY2tpbmdfc3RvcmVfYWRkKTsKKyAgICBFV0tfVklFV19TRF9HRVQobywg
c2QpOworCisgICAgaWYgKCFzZCkgeworICAgICAgICBzZCA9IChFd2tfVmlld19TbWFydF9EYXRh
KiljYWxsb2MoMSwgc2l6ZW9mKEV3a19WaWV3X1NtYXJ0X0RhdGEpKTsKKyAgICAgICAgaWYgKCFz
ZCkKKyAgICAgICAgICAgIENSSVRJQ0FMKCJjb3VsZCBub3QgYWxsb2NhdGUgRXdrX1ZpZXdfU21h
cnRfRGF0YSIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBldmFzX29iamVjdF9zbWFydF9k
YXRhX3NldChvLCBzZCk7CisgICAgfQorCisgICAgc2QtPmJnX2NvbG9yLnIgPSAyNTU7CisgICAg
c2QtPmJnX2NvbG9yLmcgPSAyNTU7CisgICAgc2QtPmJnX2NvbG9yLmIgPSAyNTU7CisgICAgc2Qt
PmJnX2NvbG9yLmEgPSAyNTU7CisKKyAgICBzZC0+c2VsZiA9IG87CisgICAgc2QtPl9wcml2ID0g
X2V3a192aWV3X3ByaXZfbmV3KHNkKTsKKyAgICBzZC0+YXBpID0gYXBpOworCisgICAgX3BhcmVu
dF9zYy5hZGQobyk7CisKKyAgICBpZiAoIXNkLT5fcHJpdikKKyAgICAgICAgcmV0dXJuOworCisg
ICAgRVdLX1ZJRVdfUFJJVl9HRVQoc2QsIHByaXYpOworCisgICAgc2QtPmJhY2tpbmdfc3RvcmUg
PSBhcGktPmJhY2tpbmdfc3RvcmVfYWRkKHNkKTsKKyAgICBpZiAoIXNkLT5iYWNraW5nX3N0b3Jl
KSB7CisgICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBiYWNraW5nIHN0b3JlIG9iamVjdC4i
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJl
cl9hZGQoc2QtPmJhY2tpbmdfc3RvcmUsIG8pOworICAgIGV2YXNfb2JqZWN0X3Nob3coc2QtPmJh
Y2tpbmdfc3RvcmUpOworCisgICAgc2QtPm1haW5fZnJhbWUgPSBld2tfZnJhbWVfYWRkKHNkLT5i
YXNlLmV2YXMpOworICAgIGlmICghc2QtPm1haW5fZnJhbWUpIHsKKyAgICAgICAgRVJSKCJDb3Vs
ZCBub3QgY3JlYXRlIG1haW4gZnJhbWUgb2JqZWN0LiIpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKCFld2tfZnJhbWVfaW5pdChzZC0+bWFpbl9mcmFtZSwgbywgcHJpdi0+bWFp
bl9mcmFtZSkpIHsKKyAgICAgICAgRVJSKCJDb3VsZCBub3QgaW5pdGlhbGl6ZSBtYWluIGZybWUg
b2JqZWN0LiIpOworICAgICAgICBldmFzX29iamVjdF9kZWwoc2QtPm1haW5fZnJhbWUpOworICAg
ICAgICBzZC0+bWFpbl9mcmFtZSA9IDA7CisKKyAgICAgICAgZGVsZXRlIHByaXYtPm1haW5fZnJh
bWU7CisgICAgICAgIHByaXYtPm1haW5fZnJhbWUgPSAwOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgZXZhc19vYmplY3RfbmFtZV9zZXQoc2QtPm1haW5fZnJhbWUsICJFV0tfRnJhbWU6
bWFpbiIpOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJlcl9hZGQoc2QtPm1haW5fZnJhbWUs
IG8pOworICAgIGV2YXNfb2JqZWN0X3Nob3coc2QtPm1haW5fZnJhbWUpOworCisjZGVmaW5lIENP
Tk5FQ1QocywgYykgZXZhc19vYmplY3RfZXZlbnRfY2FsbGJhY2tfYWRkKG8sIHMsIGMsIHNkKQor
ICAgIENPTk5FQ1QoRVZBU19DQUxMQkFDS19GT0NVU19JTiwgX2V3a192aWV3X29uX2ZvY3VzX2lu
KTsKKyAgICBDT05ORUNUKEVWQVNfQ0FMTEJBQ0tfRk9DVVNfT1VULCBfZXdrX3ZpZXdfb25fZm9j
dXNfb3V0KTsKKyAgICBDT05ORUNUKEVWQVNfQ0FMTEJBQ0tfTU9VU0VfV0hFRUwsIF9ld2tfdmll
d19vbl9tb3VzZV93aGVlbCk7CisgICAgQ09OTkVDVChFVkFTX0NBTExCQUNLX01PVVNFX0RPV04s
IF9ld2tfdmlld19vbl9tb3VzZV9kb3duKTsKKyAgICBDT05ORUNUKEVWQVNfQ0FMTEJBQ0tfTU9V
U0VfVVAsIF9ld2tfdmlld19vbl9tb3VzZV91cCk7CisgICAgQ09OTkVDVChFVkFTX0NBTExCQUNL
X01PVVNFX01PVkUsIF9ld2tfdmlld19vbl9tb3VzZV9tb3ZlKTsKKyAgICBDT05ORUNUKEVWQVNf
Q0FMTEJBQ0tfS0VZX0RPV04sIF9ld2tfdmlld19vbl9rZXlfZG93bik7CisgICAgQ09OTkVDVChF
VkFTX0NBTExCQUNLX0tFWV9VUCwgX2V3a192aWV3X29uX2tleV91cCk7CisjdW5kZWYgQ09OTkVD
VAorfQorCitzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfZGVsKEV2YXNfT2JqZWN0KiBvKQor
eworICAgIEVXS19WSUVXX1NEX0dFVChvLCBzZCk7CisgICAgRXdrX1ZpZXdfUHJpdmF0ZV9EYXRh
KiBwcml2ID0gc2QgPyBzZC0+X3ByaXYgOiAwOworCisgICAgX3BhcmVudF9zYy5kZWwobyk7Cisg
ICAgX2V3a192aWV3X3ByaXZfZGVsKHByaXYpOworfQorCitzdGF0aWMgdm9pZCBfZXdrX3ZpZXdf
c21hcnRfcmVzaXplKEV2YXNfT2JqZWN0KiBvLCBFdmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCkK
K3sKKyAgICBFV0tfVklFV19TRF9HRVQobywgc2QpOworCisgICAgLy8gdGhlc2Ugc2hvdWxkIGJl
IHF1ZXVlZCBhbmQgcHJvY2Vzc2VkIGluIGNhbGN1bGF0ZSBhcyB3ZWxsIQorICAgIGV2YXNfb2Jq
ZWN0X3Jlc2l6ZShzZC0+YmFja2luZ19zdG9yZSwgdywgaCk7CisKKyAgICBzZC0+Y2hhbmdlZC5z
aXplID0gRUlOQV9UUlVFOworICAgIF9ld2tfdmlld19zbWFydF9jaGFuZ2VkKHNkKTsKK30KKwor
c3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X21vdmUoRXZhc19PYmplY3QqIG8sIEV2YXNfQ29v
cmQgeCwgRXZhc19Db29yZCB5KQoreworICAgIEVXS19WSUVXX1NEX0dFVChvLCBzZCk7CisgICAg
c2QtPmNoYW5nZWQucG9zaXRpb24gPSBFSU5BX1RSVUU7CisgICAgX2V3a192aWV3X3NtYXJ0X2No
YW5nZWQoc2QpOworfQorCitzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfY2FsY3VsYXRlKEV2
YXNfT2JqZWN0KiBvKQoreworICAgIEVXS19WSUVXX1NEX0dFVChvLCBzZCk7CisgICAgRVdLX1ZJ
RVdfUFJJVl9HRVQoc2QsIHByaXYpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNk
LT5hcGktPmNvbnRlbnRzX3Jlc2l6ZSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4o
c2QtPmFwaS0+c2Nyb2xsc19wcm9jZXNzKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
TihzZC0+YXBpLT5yZXBhaW50c19wcm9jZXNzKTsKKyAgICBFdmFzX0Nvb3JkIHgsIHksIHcsIGg7
CisKKyAgICBzZC0+Y2hhbmdlZC5hbnkgPSBFSU5BX0ZBTFNFOworCisgICAgaWYgKCFzZC0+bWFp
bl9mcmFtZSB8fCAhcHJpdi0+bWFpbl9mcmFtZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZXZh
c19vYmplY3RfZ2VvbWV0cnlfZ2V0KG8sICZ4LCAmeSwgJncsICZoKTsKKworICAgIERCRygibz0l
cCBnZW89WyVkLCAlZCArICVkeCVkXSwgY2hhbmdlZDogc2l6ZT0laGh1LCAiCisgICAgICAgICJz
Y3JvbGxzPSV6dSwgcmVwYWludHM9JXp1IiwKKyAgICAgICAgbywgeCwgeSwgdywgaCwgc2QtPmNo
YW5nZWQuc2l6ZSwKKyAgICAgICAgcHJpdi0+c2Nyb2xscy5jb3VudCwgcHJpdi0+cmVwYWludHMu
Y291bnQpOworCisgICAgaWYgKHNkLT5jaGFuZ2VkLnNpemUgJiYgKCh3ICE9IHNkLT52aWV3Lncp
IHx8IChoICE9IHNkLT52aWV3LmgpKSkgeworICAgICAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZp
ZXcgPSBwcml2LT5tYWluX2ZyYW1lLT52aWV3KCk7CisgICAgICAgIGlmICh2aWV3KSB7CisgICAg
ICAgICAgICB2aWV3LT5yZXNpemUodywgaCk7CisgICAgICAgICAgICB2aWV3LT5mb3JjZUxheW91
dCgpOworICAgICAgICAgICAgdmlldy0+YWRqdXN0Vmlld1NpemUoKTsKKyAgICAgICAgICAgIElu
dFNpemUgc2l6ZSA9IHZpZXctPmNvbnRlbnRzU2l6ZSgpOworICAgICAgICAgICAgaWYgKCFzZC0+
YXBpLT5jb250ZW50c19yZXNpemUoc2QsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSkpCisg
ICAgICAgICAgICAgICAgRVJSKCJmYWlsZWQgdG8gcmVzaXplIGNvbnRlbnRzIHRvICVkeCVkIiwK
KyAgICAgICAgICAgICAgICAgICAgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKKyAgICAg
ICAgfQorICAgICAgICBldmFzX29iamVjdF9yZXNpemUoc2QtPm1haW5fZnJhbWUsIHcsIGgpOwor
ICAgICAgICBzZC0+Y2hhbmdlZC5mcmFtZV9yZWN0ID0gRUlOQV9UUlVFOworICAgICAgICBzZC0+
dmlldy53ID0gdzsKKyAgICAgICAgc2QtPnZpZXcuaCA9IGg7CisgICAgfQorICAgIHNkLT5jaGFu
Z2VkLnNpemUgPSBFSU5BX0ZBTFNFOworCisgICAgaWYgKHNkLT5jaGFuZ2VkLnBvc2l0aW9uICYm
ICgoeCAhPSBzZC0+dmlldy54KSB8fCAoeSAhPSBzZC0+dmlldy55KSkpIHsKKyAgICAgICAgZXZh
c19vYmplY3RfbW92ZShzZC0+bWFpbl9mcmFtZSwgeCwgeSk7CisgICAgICAgIGV2YXNfb2JqZWN0
X21vdmUoc2QtPmJhY2tpbmdfc3RvcmUsIHgsIHkpOworICAgICAgICBzZC0+Y2hhbmdlZC5mcmFt
ZV9yZWN0ID0gRUlOQV9UUlVFOworICAgICAgICBzZC0+dmlldy54ID0geDsKKyAgICAgICAgc2Qt
PnZpZXcueSA9IHk7CisgICAgfQorICAgIHNkLT5jaGFuZ2VkLnBvc2l0aW9uID0gRUlOQV9GQUxT
RTsKKworICAgIGV3a192aWV3X2xheW91dF9pZl9uZWVkZWRfcmVjdXJzaXZlKHNkLT5fcHJpdik7
CisKKyAgICBpZiAoIXNkLT5hcGktPnNjcm9sbHNfcHJvY2VzcyhzZCkpCisgICAgICAgIEVSUigi
ZmFpbGVkIHRvIHByb2Nlc3Mgc2Nyb2xscy4iKTsKKyAgICBfZXdrX3ZpZXdfc2Nyb2xsc19mbHVz
aChwcml2KTsKKworICAgIGlmICghc2QtPmFwaS0+cmVwYWludHNfcHJvY2VzcyhzZCkpCisgICAg
ICAgIEVSUigiZmFpbGVkIHRvIHByb2Nlc3MgcmVwYWludHMuIik7CisgICAgX2V3a192aWV3X3Jl
cGFpbnRzX2ZsdXNoKHByaXYpOworCisgICAgaWYgKHNkLT5jaGFuZ2VkLmZyYW1lX3JlY3QpIHsK
KyAgICAgICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2aWV3ID0gcHJpdi0+bWFpbl9mcmFtZS0+dmll
dygpOworICAgICAgICB2aWV3LT5mcmFtZVJlY3RzQ2hhbmdlZCgpOyAvKiBmb3JjZSB0cmVlIHRv
IGdldCBwb3NpdGlvbiBmcm9tIHJvb3QgKi8KKyAgICAgICAgc2QtPmNoYW5nZWQuZnJhbWVfcmVj
dCA9IEVJTkFfRkFMU0U7CisgICAgfQorfQorCitzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19z
bWFydF9jb250ZW50c19yZXNpemUoRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QsIGludCB3LCBpbnQg
aCkKK3sKKyAgICByZXR1cm4gRUlOQV9UUlVFOworfQorCitzdGF0aWMgRWluYV9Cb29sIF9ld2tf
dmlld19zbWFydF96b29tX3NldChFd2tfVmlld19TbWFydF9EYXRhKiBzZCwgZmxvYXQgem9vbSwg
RXZhc19Db29yZCBjeCwgRXZhc19Db29yZCBjeSkKK3sKKyAgICBkb3VibGUgcHgsIHB5OworICAg
IEV2YXNfQ29vcmQgeCwgeSwgdywgaDsKKyAgICBFaW5hX0Jvb2wgcmV0OworCisgICAgZXdrX2Zy
YW1lX3Njcm9sbF9zaXplX2dldChzZC0+bWFpbl9mcmFtZSwgJncsICZoKTsKKyAgICBld2tfZnJh
bWVfc2Nyb2xsX3Bvc19nZXQoc2QtPm1haW5fZnJhbWUsICZ4LCAmeSk7CisKKyAgICBpZiAodyAr
IHNkLT52aWV3LncgPiAwKQorICAgICAgICBweCA9IChkb3VibGUpKHggKyBjeCkgLyAodyArIHNk
LT52aWV3LncpOworICAgIGVsc2UKKyAgICAgICAgcHggPSAwLjA7CisKKyAgICBpZiAoaCArIHNk
LT52aWV3LmggPiAwKQorICAgICAgICBweSA9IChkb3VibGUpKHkgKyBjeSkgLyAoaCArIHNkLT52
aWV3LmgpOworICAgIGVsc2UKKyAgICAgICAgcHkgPSAwLjA7CisKKyAgICByZXQgPSBld2tfZnJh
bWVfem9vbV9zZXQoc2QtPm1haW5fZnJhbWUsIHpvb20pOworCisgICAgZXdrX2ZyYW1lX3Njcm9s
bF9zaXplX2dldChzZC0+bWFpbl9mcmFtZSwgJncsICZoKTsKKyAgICB4ID0gKHcgKyBzZC0+dmll
dy53KSAqIHB4IC0gY3g7CisgICAgeSA9IChoICsgc2QtPnZpZXcuaCkgKiBweSAtIGN5OworICAg
IGV3a19mcmFtZV9zY3JvbGxfc2V0KHNkLT5tYWluX2ZyYW1lLCB4LCB5KTsKKyAgICByZXR1cm4g
cmV0OworfQorCitzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfZmx1c2goRXdrX1ZpZXdfU21h
cnRfRGF0YSogc2QpCit7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2
KTsKKyAgICBfZXdrX3ZpZXdfcmVwYWludHNfZmx1c2gocHJpdik7CisgICAgX2V3a192aWV3X3Nj
cm9sbHNfZmx1c2gocHJpdik7Cit9CisKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3NtYXJ0
X3ByZV9yZW5kZXJfcmVnaW9uKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkLCBFdmFzX0Nvb3JkIHgs
IEV2YXNfQ29vcmQgeSwgRXZhc19Db29yZCB3LCBFdmFzX0Nvb3JkIGgsIGZsb2F0IHpvb20pCit7
CisgICAgV1JOKCJub3Qgc3VwcG9ydGVkIGJ5IGVuZ2luZS4gc2Q9JXAgYXJlYT0lZCwlZCslZHgl
ZCwgem9vbT0lZiIsCisgICAgICAgIHNkLCB4LCB5LCB3LCBoLCB6b29tKTsKKyAgICByZXR1cm4g
RUlOQV9GQUxTRTsKK30KKworc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X3ByZV9yZW5kZXJf
Y2FuY2VsKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkKQoreworICAgIFdSTigibm90IHN1cHBvcnRl
ZCBieSBlbmdpbmUuIHNkPSVwIiwgc2QpOworfQorCitzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfem9v
bV9hbmltYXRlZF9tYXJrX3N0b3AoRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QpCit7CisgICAgc2Qt
PmFuaW1hdGVkX3pvb20uem9vbS5zdGFydCA9IDAuMDsKKyAgICBzZC0+YW5pbWF0ZWRfem9vbS56
b29tLmVuZCA9IDAuMDsKKyAgICBzZC0+YW5pbWF0ZWRfem9vbS56b29tLmN1cnJlbnQgPSAwLjA7
Cit9CisKK3N0YXRpYyB2b2lkIF9ld2tfdmlld196b29tX2FuaW1hdGVkX2ZpbmlzaChFd2tfVmll
d19TbWFydF9EYXRhKiBzZCkKK3sKKyAgICBFV0tfVklFV19QUklWX0dFVChzZCwgcHJpdik7Cisg
ICAgZWNvcmVfYW5pbWF0b3JfZGVsKHByaXYtPmFuaW1hdGVkX3pvb20uYW5pbWF0b3IpOworICAg
IHByaXYtPmFuaW1hdGVkX3pvb20uYW5pbWF0b3IgPSAwOworICAgIF9ld2tfdmlld196b29tX2Fu
aW1hdGVkX21hcmtfc3RvcChzZCk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2Fs
bChzZC0+c2VsZiwgInpvb20sYW5pbWF0ZWQsZW5kIiwgMCk7Cit9CisKK3N0YXRpYyBmbG9hdCBf
ZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9jdXJyZW50KEV3a19WaWV3X1ByaXZhdGVfRGF0YSogcHJp
dikKK3sKKyAgICBkb3VibGUgbm93ID0gZWNvcmVfbG9vcF90aW1lX2dldCgpOworICAgIGRvdWJs
ZSBkZWx0YSA9IG5vdyAtIHByaXYtPmFuaW1hdGVkX3pvb20udGltZS5zdGFydDsKKworICAgIGlm
IChkZWx0YSA+IHByaXYtPmFuaW1hdGVkX3pvb20udGltZS5kdXJhdGlvbikKKyAgICAgICAgZGVs
dGEgPSBwcml2LT5hbmltYXRlZF96b29tLnRpbWUuZHVyYXRpb247CisgICAgaWYgKGRlbHRhIDwg
MC4wKSAvLyB0aW1lIHdlbnQgYmFjaywgY2xvY2sgYWRqdXN0ZWQ/CisgICAgICAgIGRlbHRhID0g
MC4wOworCisgICAgZGVsdGEgLz0gcHJpdi0+YW5pbWF0ZWRfem9vbS50aW1lLmR1cmF0aW9uOwor
CisgICAgcmV0dXJuICgocHJpdi0+YW5pbWF0ZWRfem9vbS56b29tLnJhbmdlICogZGVsdGEpCisg
ICAgICAgICAgICArIHByaXYtPmFuaW1hdGVkX3pvb20uem9vbS5zdGFydCk7Cit9CisKK3N0YXRp
YyBpbnQgX2V3a192aWV3X3pvb21fYW5pbWF0b3JfY2Iodm9pZCogZGF0YSkKK3sKKyAgICBFd2tf
Vmlld19TbWFydF9EYXRhKiBzZCA9IChFd2tfVmlld19TbWFydF9EYXRhKilkYXRhOworICAgIEV2
YXNfQ29vcmQgY3gsIGN5OworICAgIEVXS19WSUVXX1BSSVZfR0VUKHNkLCBwcml2KTsKKyAgICBk
b3VibGUgbm93ID0gZWNvcmVfbG9vcF90aW1lX2dldCgpOworCisgICAgY3ggPSBwcml2LT5hbmlt
YXRlZF96b29tLmNlbnRlci54OworICAgIGN5ID0gcHJpdi0+YW5pbWF0ZWRfem9vbS5jZW50ZXIu
eTsKKworICAgIC8vIFRPRE86IHByb2dyZXNzaXZlbHkgY2VudGVyIChjeCwgY3kpIC0+ICh2aWV3
LnggKyB2aWV3LmgvMiwgdmlldy55ICsgdmlldy5oLzIpCisgICAgaWYgKGN4ID49IHNkLT52aWV3
LncpCisgICAgICAgIGN4ID0gc2QtPnZpZXcudyAtIDE7CisgICAgaWYgKGN5ID49IHNkLT52aWV3
LmgpCisgICAgICAgIGN5ID0gc2QtPnZpZXcuaCAtIDE7CisKKyAgICBpZiAoKG5vdyA+PSBwcml2
LT5hbmltYXRlZF96b29tLnRpbWUuZW5kKQorICAgICAgICB8fCAobm93IDwgcHJpdi0+YW5pbWF0
ZWRfem9vbS50aW1lLnN0YXJ0KSkgeworICAgICAgICBfZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9m
aW5pc2goc2QpOworICAgICAgICBld2tfdmlld196b29tX3NldChzZC0+c2VsZiwgcHJpdi0+YW5p
bWF0ZWRfem9vbS56b29tLmVuZCwgY3gsIGN5KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQor
CisgICAgc2QtPmFuaW1hdGVkX3pvb20uem9vbS5jdXJyZW50ID0gX2V3a192aWV3X3pvb21fYW5p
bWF0ZWRfY3VycmVudChwcml2KTsKKyAgICBzZC0+YXBpLT56b29tX3dlYWtfc2V0KHNkLCBzZC0+
YW5pbWF0ZWRfem9vbS56b29tLmN1cnJlbnQsIGN4LCBjeSk7CisgICAgcmV0dXJuIDE7Cit9CisK
K3N0YXRpYyB2b2lkIF9ld2tfdmlld196b29tX2FuaW1hdGlvbl9zdGFydChFd2tfVmlld19TbWFy
dF9EYXRhKiBzZCkKK3sKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYp
OworICAgIGlmIChwcml2LT5hbmltYXRlZF96b29tLmFuaW1hdG9yKQorICAgICAgICByZXR1cm47
CisgICAgcHJpdi0+YW5pbWF0ZWRfem9vbS5hbmltYXRvciA9IGVjb3JlX2FuaW1hdG9yX2FkZAor
ICAgICAgICAoX2V3a192aWV3X3pvb21fYW5pbWF0b3JfY2IsIHNkKTsKK30KKworLyoqCisgKiBT
ZXRzIHRoZSBzbWFydCBjbGFzcyBhcGkgd2l0aG91dCBhbnkgYmFja2luZyBzdG9yZSwgZW5hYmxp
bmcgdmlldworICogdG8gYmUgaW5oZXJpdGVkLgorICoKKyAqIEBwYXJhbSBhcGkgY2xhc3MgZGVm
aW5pdGlvbiB0byBiZSBzZXQsIGFsbCBtZW1iZXJzIHdpdGggdGhlCisgKiAgICAgICAgZXhjZXB0
aW9uIG9mIEV2YXNfU21hcnRfQ2xhc3MtPmRhdGEgbWF5IGJlIG92ZXJyaWRkZW4uIE11c3QKKyAq
ICAgICAgICBAYiBub3QgYmUgQGMgMC4KKyAqCisgKiBAbm90ZSBFdmFzX1NtYXJ0X0NsYXNzLT5k
YXRhIGlzIHVzZWQgdG8gaW1wbGVtZW50IHR5cGUgY2hlY2tpbmcgYW5kCisgKiAgICAgICBpcyBu
b3Qgc3VwcG9zZWQgdG8gYmUgY2hhbmdlZC9vdmVycmlkZGVuLiBJZiB5b3UgbmVlZCBleHRyYQor
ICogICAgICAgZGF0YSBmb3IgeW91ciBzbWFydCBjbGFzcyB0byB3b3JrLCBqdXN0IGV4dGVuZAor
ICogICAgICAgRXdrX1ZpZXdfU21hcnRfQ2xhc3MgaW5zdGVhZC4KKyAqCisgKiBAcmV0dXJuIEBj
IEVJTkFfVFJVRSBvbiBzdWNjZXNzLCBAYyBFSU5BX0ZBTFNFIG9uIGZhaWx1cmUgKHByb2JhYmx5
CisgKiAgICAgICAgIHZlcnNpb24gbWlzbWF0Y2gpLgorICoKKyAqIEBzZWUgZXdrX3ZpZXdfc2lu
Z2xlX3NtYXJ0X3NldCgpCisgKiBAc2VlIGV3a192aWV3X3RpbGVkX3NtYXJ0X3NldCgpCisgKi8K
K0VpbmFfQm9vbCBld2tfdmlld19iYXNlX3NtYXJ0X3NldChFd2tfVmlld19TbWFydF9DbGFzcyog
YXBpKQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChhcGksIEVJTkFfRkFM
U0UpOworCisgICAgaWYgKGFwaS0+dmVyc2lvbiAhPSBFV0tfVklFV19TTUFSVF9DTEFTU19WRVJT
SU9OKSB7CisgICAgICAgIEVJTkFfTE9HX0NSSVQKKyAgICAgICAgICAgICgiRXdrX1ZpZXdfU21h
cnRfQ2xhc3MgJXAgaXMgdmVyc2lvbiAlbHUgd2hpbGUgJWx1IHdhcyBleHBlY3RlZC4iLAorICAg
ICAgICAgICAgIGFwaSwgYXBpLT52ZXJzaW9uLCBFV0tfVklFV19TTUFSVF9DTEFTU19WRVJTSU9O
KTsKKyAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CisgICAgfQorCisgICAgaWYgKEVJTkFfVU5M
SUtFTFkoIV9wYXJlbnRfc2MuYWRkKSkKKyAgICAgICAgZXZhc19vYmplY3Rfc21hcnRfY2xpcHBl
ZF9zbWFydF9zZXQoJl9wYXJlbnRfc2MpOworCisgICAgZXZhc19vYmplY3Rfc21hcnRfY2xpcHBl
ZF9zbWFydF9zZXQoJmFwaS0+c2MpOworICAgIGFwaS0+c2MuYWRkID0gX2V3a192aWV3X3NtYXJ0
X2FkZDsKKyAgICBhcGktPnNjLmRlbCA9IF9ld2tfdmlld19zbWFydF9kZWw7CisgICAgYXBpLT5z
Yy5yZXNpemUgPSBfZXdrX3ZpZXdfc21hcnRfcmVzaXplOworICAgIGFwaS0+c2MubW92ZSA9IF9l
d2tfdmlld19zbWFydF9tb3ZlOworICAgIGFwaS0+c2MuY2FsY3VsYXRlID0gX2V3a192aWV3X3Nt
YXJ0X2NhbGN1bGF0ZTsKKyAgICBhcGktPnNjLmRhdGEgPSBFV0tfVklFV19UWVBFX1NUUjsgLyog
dXNlZCBieSB0eXBlIGNoZWNraW5nICovCisKKyAgICBhcGktPmNvbnRlbnRzX3Jlc2l6ZSA9IF9l
d2tfdmlld19zbWFydF9jb250ZW50c19yZXNpemU7CisgICAgYXBpLT56b29tX3NldCA9IF9ld2tf
dmlld19zbWFydF96b29tX3NldDsKKyAgICBhcGktPmZsdXNoID0gX2V3a192aWV3X3NtYXJ0X2Zs
dXNoOworICAgIGFwaS0+cHJlX3JlbmRlcl9yZWdpb24gPSBfZXdrX3ZpZXdfc21hcnRfcHJlX3Jl
bmRlcl9yZWdpb247CisgICAgYXBpLT5wcmVfcmVuZGVyX2NhbmNlbCA9IF9ld2tfdmlld19zbWFy
dF9wcmVfcmVuZGVyX2NhbmNlbDsKKworICAgIGFwaS0+Zm9jdXNfaW4gPSBfZXdrX3ZpZXdfc21h
cnRfZm9jdXNfaW47CisgICAgYXBpLT5mb2N1c19vdXQgPSBfZXdrX3ZpZXdfc21hcnRfZm9jdXNf
b3V0OworICAgIGFwaS0+bW91c2Vfd2hlZWwgPSBfZXdrX3ZpZXdfc21hcnRfbW91c2Vfd2hlZWw7
CisgICAgYXBpLT5tb3VzZV9kb3duID0gX2V3a192aWV3X3NtYXJ0X21vdXNlX2Rvd247CisgICAg
YXBpLT5tb3VzZV91cCA9IF9ld2tfdmlld19zbWFydF9tb3VzZV91cDsKKyAgICBhcGktPm1vdXNl
X21vdmUgPSBfZXdrX3ZpZXdfc21hcnRfbW91c2VfbW92ZTsKKyAgICBhcGktPmtleV9kb3duID0g
X2V3a192aWV3X3NtYXJ0X2tleV9kb3duOworICAgIGFwaS0+a2V5X3VwID0gX2V3a192aWV3X3Nt
YXJ0X2tleV91cDsKKworICAgIGFwaS0+YWRkX2NvbnNvbGVfbWVzc2FnZSA9IF9ld2tfdmlld19z
bWFydF9hZGRfY29uc29sZV9tZXNzYWdlOworICAgIGFwaS0+cnVuX2phdmFzY3JpcHRfYWxlcnQg
PSBfZXdrX3ZpZXdfc21hcnRfcnVuX2phdmFzY3JpcHRfYWxlcnQ7CisgICAgYXBpLT5ydW5famF2
YXNjcmlwdF9jb25maXJtID0gX2V3a192aWV3X3NtYXJ0X3J1bl9qYXZhc2NyaXB0X2NvbmZpcm07
CisgICAgYXBpLT5ydW5famF2YXNjcmlwdF9wcm9tcHQgPSBfZXdrX3ZpZXdfc21hcnRfcnVuX2ph
dmFzY3JpcHRfcHJvbXB0OworICAgIGFwaS0+c2hvdWxkX2ludGVycnVwdF9qYXZhc2NyaXB0ID0g
X2V3a192aWV3X3NtYXJ0X3Nob3VsZF9pbnRlcnJ1cHRfamF2YXNjcmlwdDsKKworICAgIHJldHVy
biBFSU5BX1RSVUU7Cit9CisKKy8qKgorICogU2V0IGEgZml4ZWQgbGF5b3V0IHNpemUgdG8gYmUg
dXNlZCwgZGlzc29jaWF0aW5nIGl0IGZyb20gdmlld3BvcnQgc2l6ZS4KKyAqCisgKiBTZXR0aW5n
IGEgd2lkdGggZGlmZmVyZW50IHRoYW4gemVybyBlbmFibGVzIGZpeGVkIGxheW91dCBvbiB0aGF0
CisgKiBzaXplLiBJdCdzIGF1dG9tYXRpY2FsbHkgc2NhbGVkIGJhc2VkIG9uIHpvb20sIGJ1dCB3
aWxsIG5vdCBjaGFuZ2UKKyAqIGlmIHZpZXdwb3J0IGNoYW5nZXMuCisgKgorICogU2V0dGluZyBi
b3RoIEBhIHcgYW5kIEBhIGggdG8gemVybyB3aWxsIGRpc2FibGUgZml4ZWQgbGF5b3V0LgorICoK
KyAqIEBwYXJhbSBvIHZpZXcgb2JqZWN0IHRvIGNoYW5nZSBmaXhlZCBsYXlvdXQuCisgKiBAcGFy
YW0gdyBmaXhlZCB3aWR0aCB0byB1c2UuIFRoaXMgc2l6ZSB3aWxsIGJlIGF1dG9tYXRpY2FsbHkg
c2NhbGVkCisgKiAgICAgICAgYmFzZWQgb24gem9vbSBsZXZlbC4KKyAqIEBwYXJhbSBoIGZpeGVk
IGhlaWdodCB0byB1c2UuIFRoaXMgc2l6ZSB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc2NhbGVkCisg
KiAgICAgICAgYmFzZWQgb24gem9vbSBsZXZlbC4KKyAqLwordm9pZCBld2tfdmlld19maXhlZF9s
YXlvdXRfc2l6ZV9zZXQoRXZhc19PYmplY3QqIG8sIEV2YXNfQ29vcmQgdywgRXZhc19Db29yZCBo
KQoreworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QpOworICAgIEVXS19WSUVX
X1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdik7CisgICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2
aWV3ID0gc2QtPl9wcml2LT5tYWluX2ZyYW1lLT52aWV3KCk7CisgICAgaWYgKHcgPD0gMCAmJiBo
IDw9IDApIHsKKyAgICAgICAgaWYgKCFwcml2LT5maXhlZF9sYXlvdXQudXNlKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICBwcml2LT5maXhlZF9sYXlvdXQudyA9IDA7CisgICAgICAgIHBy
aXYtPmZpeGVkX2xheW91dC5oID0gMDsKKyAgICAgICAgcHJpdi0+Zml4ZWRfbGF5b3V0LnVzZSA9
IEVJTkFfRkFMU0U7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHByaXYtPmZpeGVkX2xheW91
dC51c2UKKyAgICAgICAgICAgICYmIHByaXYtPmZpeGVkX2xheW91dC53ID09IHcgJiYgcHJpdi0+
Zml4ZWRfbGF5b3V0LmggPT0gaCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgcHJpdi0+
Zml4ZWRfbGF5b3V0LncgPSB3OworICAgICAgICBwcml2LT5maXhlZF9sYXlvdXQuaCA9IGg7Cisg
ICAgICAgIHByaXYtPmZpeGVkX2xheW91dC51c2UgPSBFSU5BX1RSVUU7CisKKyAgICAgICAgaWYg
KHZpZXcpCisgICAgICAgICAgICB2aWV3LT5zZXRGaXhlZExheW91dFNpemUoV2ViQ29yZTo6SW50
U2l6ZSh3LCBoKSk7CisgICAgfQorCisgICAgaWYgKCF2aWV3KQorICAgICAgICByZXR1cm47Cisg
ICAgdmlldy0+c2V0VXNlRml4ZWRMYXlvdXQocHJpdi0+Zml4ZWRfbGF5b3V0LnVzZSk7CisgICAg
dmlldy0+Zm9yY2VMYXlvdXQoKTsKK30KKworLyoqCisgKiBHZXQgZml4ZWQgbGF5b3V0IHNpemUg
aW4gdXNlLgorICoKKyAqIEBwYXJhbSBvIHZpZXcgb2JqZWN0IHRvIHF1ZXJ5IGZpeGVkIGxheW91
dCBzaXplLgorICogQHBhcmFtIHcgd2hlcmUgdG8gcmV0dXJuIHdpZHRoLiBSZXR1cm5zIDAgb24g
ZXJyb3Igb3IgaWYgbm8gZml4ZWQKKyAqICAgICAgICBsYXlvdXQgaW4gdXNlLgorICogQHBhcmFt
IGggd2hlcmUgdG8gcmV0dXJuIGhlaWdodC4gUmV0dXJucyAwIG9uIGVycm9yIG9yIGlmIG5vIGZp
eGVkCisgKiAgICAgICAgbGF5b3V0IGluIHVzZS4KKyAqLwordm9pZCBld2tfdmlld19maXhlZF9s
YXlvdXRfc2l6ZV9nZXQoRXZhc19PYmplY3QqIG8sIEV2YXNfQ29vcmQqIHcsIEV2YXNfQ29vcmQq
IGgpCit7CisgICAgaWYgKHcpCisgICAgICAgICp3ID0gMDsKKyAgICBpZiAoaCkKKyAgICAgICAg
KmggPSAwOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QpOworICAgIEVXS19W
SUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdik7CisgICAgaWYgKHByaXYtPmZpeGVkX2xh
eW91dC51c2UpIHsKKyAgICAgICAgaWYgKHcpCisgICAgICAgICAgICAqdyA9IHByaXYtPmZpeGVk
X2xheW91dC53OworICAgICAgICBpZiAoaCkKKyAgICAgICAgICAgICpoID0gcHJpdi0+Zml4ZWRf
bGF5b3V0Lmg7CisgICAgfQorfQorCisvKioKKyAqIFNldCB0aGUgdGhlbWUgcGF0aCB0byBiZSB1
c2VkIGJ5IHRoaXMgdmlldy4KKyAqCisgKiBUaGlzIGFsc28gc2V0cyB0aGUgdGhlbWUgb24gdGhl
IG1haW4gZnJhbWUuIEFzIGZyYW1lcyBpbmhlcml0IHRoZW1lCisgKiBmcm9tIHRoZWlyIHBhcmVu
dCwgdGhpcyB3aWxsIGhhdmUgYWxsIGZyYW1lcyB3aXRoIHVuc2V0IHRoZW1lIHRvCisgKiB1c2Ug
dGhpcyBvbmUuCisgKgorICogQHBhcmFtIG8gdmlldyBvYmplY3QgdG8gY2hhbmdlIHRoZW1lLgor
ICogQHBhcmFtIHBhdGggdGhlbWUgcGF0aCwgbWF5IGJlIEBjIDAgdG8gcmVzZXQgdG8gZGVmYXVs
dC4KKyAqLwordm9pZCBld2tfdmlld190aGVtZV9zZXQoRXZhc19PYmplY3QqIG8sIGNvbnN0IGNo
YXIqIHBhdGgpCit7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCk7CisgICAg
ZXdrX2ZyYW1lX3RoZW1lX3NldChzZC0+bWFpbl9mcmFtZSwgcGF0aCk7Cit9CisKKy8qKgorICog
R2V0cyB0aGUgdGhlbWUgc2V0IG9uIHRoaXMgZnJhbWUuCisgKgorICogVGhpcyByZXR1cm5zIHRo
ZSB2YWx1ZSBzZXQgYnkgZXdrX3ZpZXdfdGhlbWVfc2V0KCkuCisgKgorICogQHBhcmFtIG8gdmll
dyBvYmplY3QgdG8gZ2V0IHRoZW1lIHBhdGguCisgKgorICogQHJldHVybiB0aGVtZSBwYXRoLCBt
YXkgYmUgQGMgMCBpZiBub3Qgc2V0LgorICovCitjb25zdCBjaGFyKiBld2tfdmlld190aGVtZV9n
ZXQoRXZhc19PYmplY3QqIG8pCit7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBz
ZCwgMCk7CisgICAgcmV0dXJuIGV3a19mcmFtZV90aGVtZV9nZXQoc2QtPm1haW5fZnJhbWUpOwor
fQorCisvKioKKyAqIEdldCB0aGUgb2JqZWN0IHRoYXQgcmVwcmVzZW50cyB0aGUgbWFpbiBmcmFt
ZS4KKyAqCisgKiBAcGFyYW0gbyB2aWV3IG9iamVjdCB0byBnZXQgbWFpbiBmcmFtZS4KKyAqCisg
KiBAcmV0dXJuIGV3a19mcmFtZSBvYmplY3Qgb3IgQGMgMCBpZiBub25lIHlldC4KKyAqLworRXZh
c19PYmplY3QqIGV3a192aWV3X2ZyYW1lX21haW5fZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQor
eworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIDApOworICAgIHJldHVybiBz
ZC0+bWFpbl9mcmFtZTsKK30KKworLyoqCisgKiBHZXQgdGhlIGN1cnJlbnRseSBmb2N1c2VkIGZy
YW1lIG9iamVjdC4KKyAqCisgKiBAcGFyYW0gbyB2aWV3IG9iamVjdCB0byBnZXQgZm9jdXNlZCBm
cmFtZS4KKyAqCisgKiBAcmV0dXJuIGV3a19mcmFtZSBvYmplY3Qgb3IgQGMgMCBpZiBub25lIHll
dC4KKyAqLworRXZhc19PYmplY3QqIGV3a192aWV3X2ZyYW1lX2ZvY3VzZWRfZ2V0KGNvbnN0IEV2
YXNfT2JqZWN0KiBvKQoreworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIDAp
OworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgMCk7CisKKyAgICBX
ZWJDb3JlOjpGcmFtZSogY29yZSA9IHByaXYtPnBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1
c2VkRnJhbWUoKTsKKyAgICBpZiAoIWNvcmUpCisgICAgICAgIHJldHVybiAwOworCisgICAgV2Vi
Q29yZTo6RnJhbWVMb2FkZXJDbGllbnRFZmwqIGNsaWVudCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6
OkZyYW1lTG9hZGVyQ2xpZW50RWZsKj4oY29yZS0+bG9hZGVyKCktPmNsaWVudCgpKTsKKyAgICBp
ZiAoIWNsaWVudCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGNsaWVudC0+d2ViRnJh
bWUoKTsKK30KKworLyoqCisgKiBBc2sgbWFpbiBmcmFtZSB0byBsb2FkIHRoZSBnaXZlbiBVUkku
CisgKgorICogQHBhcmFtIG8gdmlldyBvYmplY3QgdG8gbG9hZCB1cmkuCisgKiBAcGFyYW0gdXJp
IHVuaWZvcm0gcmVzb3VyY2UgaWRlbnRpZmllciB0byBsb2FkLgorICoKKyAqIEByZXR1cm4gQGMg
RUlOQV9UUlVFIG9uIHN1Y2Nlc3NmdWwgcmVxdWVzdCwgQGMgRUlOQV9GQUxTRSBvbiBmYWlsdXJl
LgorICogICAgICAgICBOb3RlIHRoYXQgaXQgbWVhbnMgdGhlIHJlcXVlc3Qgd2FzIGRvbmUsIG5v
dCB0aGF0IGl0IHdhcworICogICAgICAgICBzYXRpc2ZpZWQuCisgKi8KK0VpbmFfQm9vbCBld2tf
dmlld191cmlfc2V0KEV2YXNfT2JqZWN0KiBvLCBjb25zdCBjaGFyKiB1cmkpCit7CisgICAgRVdL
X1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIGV3
a19mcmFtZV91cmlfc2V0KHNkLT5tYWluX2ZyYW1lLCB1cmkpOworfQorCisvKioKKyAqIEdldCB0
aGUgY3VycmVudCB1cmkgbG9hZGVkIGJ5IG1haW4gZnJhbWUuCisgKgorICogQHBhcmFtIG8gdmll
dyBvYmplY3QgdG8gZ2V0IGN1cnJlbnQgdXJpLgorICoKKyAqIEByZXR1cm4gY3VycmVudCB1cmkg
cmVmZXJlbmNlIG9yIEBjIDAuIEl0J3MgaW50ZXJuYWwsIGRvbid0IGNoYW5nZS4KKyAqLworY29u
c3QgY2hhciogZXdrX3ZpZXdfdXJpX2dldChjb25zdCBFdmFzX09iamVjdCogbykKK3sKKyAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsKKyAgICByZXR1cm4gZXdrX2ZyYW1l
X3VyaV9nZXQoc2QtPm1haW5fZnJhbWUpOworfQorCisvKioKKyAqIEdldCB0aGUgY3VycmVudCB0
aXRsZSBvZiBtYWluIGZyYW1lLgorICoKKyAqIEBwYXJhbSBvIHZpZXcgb2JqZWN0IHRvIGdldCBj
dXJyZW50IHRpdGxlLgorICoKKyAqIEByZXR1cm4gY3VycmVudCB0aXRsZSByZWZlcmVuY2Ugb3Ig
QGMgMC4gSXQncyBpbnRlcm5hbCwgZG9uJ3QgY2hhbmdlLgorICovCitjb25zdCBjaGFyKiBld2tf
dmlld190aXRsZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCit7CisgICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihvLCBzZCwgMCk7CisgICAgcmV0dXJuIGV3a19mcmFtZV90aXRsZV9nZXQo
c2QtPm1haW5fZnJhbWUpOworfQorCisvKioKKyAqIEdldHMgaWYgbWFpbiBmcmFtZSBpcyBlZGl0
YWJsZS4KKyAqCisgKiBAcGFyYW0gbyB2aWV3IG9iamVjdCB0byBnZXQgZWRpdGFibGUgc3RhdGUu
CisgKgorICogQHJldHVybiBAYyBFSU5BX1RSVUUgaWYgZWRpdGFibGUsIEBjIEVJTkFfRkFMU0Ug
b3RoZXJ3aXNlLgorICovCitFaW5hX0Jvb2wgZXdrX3ZpZXdfZWRpdGFibGVfZ2V0KGNvbnN0IEV2
YXNfT2JqZWN0KiBvKQoreworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJ
TkFfRkFMU0UpOworICAgIHJldHVybiBld2tfZnJhbWVfZWRpdGFibGVfZ2V0KHNkLT5tYWluX2Zy
YW1lKTsKK30KKworLyoqCisgKiBTZXQgYmFja2dyb3VuZCBjb2xvciBhbmQgdHJhbnNwYXJlbmN5
CisgKgorICogSnVzdCBhcyBpbiBFdmFzLCBjb2xvcnMgYXJlIHByZS1tdWx0aXBsaWVkLCBzbyA1
MCUgcmVkIGlzCisgKiAoMTI4LCAwLCAwLCAxMjgpIGFuZCBub3QgKDI1NSwgMCwgMCwgMTI4KSEK
KyAqCisgKiBAd2FybmluZyBXYXRjaCBvdXQgcGVyZm9ybWFuY2UgaXNzdWVzIHdpdGggdHJhbnNw
YXJlbmN5ISBPYmplY3QKKyAqICAgICAgICAgIHdpbGwgYmUgaGFuZGxlZCBhcyB0cmFuc3BhcmVu
dCBpbWFnZSBieSBldmFzIGV2ZW4gaWYgdGhlCisgKiAgICAgICAgICB3ZWJwYWdlIHNwZWNpZmll
cyBhIGJhY2tncm91bmQgY29sb3IuIFRoYXQgbWVhbiB5b3UnbGwgcGF5CisgKiAgICAgICAgICBh
IHByaWNlIGV2ZW4gaWYgaXQncyBub3QgcmVhbGx5IHRyYW5zcGFyZW50LCB0aHVzCisgKiAgICAg
ICAgICBzY3JvbGxpbmcvcGFubmluZyBhbmQgem9vbWluZyB3aWxsIGJlIGxpa2VseSBzbG93ZXIg
dGhhbgorICogICAgICAgICAgaWYgdHJhbnNwYXJlbmN5IGlzIG9mZi4KKyAqCisgKiBAcGFyYW0g
byB2aWV3IG9iamVjdCB0byBjaGFuZ2UuCisgKiBAcGFyYW0gciByZWQgY29tcG9uZW50LgorICog
QHBhcmFtIGcgZ3JlZW4gY29tcG9uZW50LgorICogQHBhcmFtIGIgYmx1ZSBjb21wb25lbnQuCisg
KiBAcGFyYW0gYSB0cmFuc3BhcmVuY3kuCisgKi8KK3ZvaWQgZXdrX3ZpZXdfYmdfY29sb3Jfc2V0
KEV2YXNfT2JqZWN0KiBvLCBpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSkKK3sKKyAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTihzZC0+YXBpKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpLT5i
Z19jb2xvcl9zZXQpOworCisgICAgaWYgKGEgPCAwKSB7CisgICAgICAgIFdSTigiQWxwaGEgbGVz
cyB0aGFuIHplcm8gKCVkKS4iLCBhKTsKKyAgICAgICAgYSA9IDA7CisgICAgfSBlbHNlIGlmIChh
ID4gMjU1KSB7CisgICAgICAgIFdSTigiQWxwaGEgaXMgbGFyZ2VyIHRoYW4gMjU1ICglZCkuIiwg
YSk7CisgICAgICAgIGEgPSAyNTU7CisgICAgfQorCisjZGVmaW5lIENIRUNLX1BSRU1VTF9DT0xP
UihjLCBhKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYg
KGMgPCAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgICAgIFdSTigiQ29sb3IgY29tcG9uZW50ICIjYyIgaXMgbGVzcyB0aGFu
IHplcm8gKCVkKS4iLCBjKTsgICAgICAgICBcCisgICAgICAgIGMgPSAwOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSBlbHNl
IGlmIChjID4gYSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgICAgIFdSTigiQ29sb3IgY29tcG9uZW50ICIjYyIgaXMgZ3JlYXRlciB0aGFu
IGFscGhhICglZCwgYWxwaGE9JWQpLiIsIFwKKyAgICAgICAgICAgIGMsIGEpOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgYyA9
IGE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICB9CisgICAgQ0hFQ0tfUFJFTVVMX0NPTE9SKHIsIGEpOworICAgIENIRUNLX1BS
RU1VTF9DT0xPUihnLCBhKTsKKyAgICBDSEVDS19QUkVNVUxfQ09MT1IoYiwgYSk7CisjdW5kZWYg
Q0hFQ0tfUFJFTVVMX0NPTE9SCisKKyAgICBzZC0+YmdfY29sb3IuciA9IHI7CisgICAgc2QtPmJn
X2NvbG9yLmcgPSBnOworICAgIHNkLT5iZ19jb2xvci5iID0gYjsKKyAgICBzZC0+YmdfY29sb3Iu
YSA9IGE7CisKKyAgICBzZC0+YXBpLT5iZ19jb2xvcl9zZXQoc2QsIHIsIGcsIGIsIGEpOworCisg
ICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2aWV3ID0gc2QtPl9wcml2LT5tYWluX2ZyYW1lLT52aWV3
KCk7CisgICAgaWYgKHZpZXcpIHsKKyAgICAgICAgV2ViQ29yZTo6Q29sb3IgY29sb3I7CisKKyAg
ICAgICAgaWYgKCFhKQorICAgICAgICAgICAgY29sb3IgPSBXZWJDb3JlOjpDb2xvcigwLCAwLCAw
LCAwKTsKKyAgICAgICAgZWxzZSBpZiAoYSA9PSAyNTUpCisgICAgICAgICAgICBjb2xvciA9IFdl
YkNvcmU6OkNvbG9yKHIsIGcsIGIsIGEpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjb2xv
ciA9IFdlYkNvcmU6OkNvbG9yKHIgKiAyNTUgLyBhLCBnICogMjU1IC8gYSwgYiAqIDI1NSAvIGEs
IGEpOworCisgICAgICAgIHZpZXctPnVwZGF0ZUJhY2tncm91bmRSZWN1cnNpdmVseShjb2xvciwg
IWEpOworICAgIH0KK30KKworLyoqCisgKiBRdWVyeSBpZiB2aWV3IG9iamVjdCBiYWNrZ3JvdW5k
IGNvbG9yLgorICoKKyAqIEp1c3QgYXMgaW4gRXZhcywgY29sb3JzIGFyZSBwcmUtbXVsdGlwbGll
ZCwgc28gNTAlIHJlZCBpcworICogKDEyOCwgMCwgMCwgMTI4KSBhbmQgbm90ICgyNTUsIDAsIDAs
IDEyOCkhCisgKgorICogQHBhcmFtIG8gdmlldyBvYmplY3QgdG8gcXVlcnkuCisgKiBAcGFyYW0g
ciB3aGVyZSB0byByZXR1cm4gcmVkIGNvbG9yIGNvbXBvbmVudC4KKyAqIEBwYXJhbSBnIHdoZXJl
IHRvIHJldHVybiBncmVlbiBjb2xvciBjb21wb25lbnQuCisgKiBAcGFyYW0gYiB3aGVyZSB0byBy
ZXR1cm4gYmx1ZSBjb2xvciBjb21wb25lbnQuCisgKiBAcGFyYW0gYSB3aGVyZSB0byByZXR1cm4g
YWxwaGEgdmFsdWUuCisgKi8KK3ZvaWQgZXdrX3ZpZXdfYmdfY29sb3JfZ2V0KGNvbnN0IEV2YXNf
T2JqZWN0KiBvLCBpbnQqIHIsIGludCogZywgaW50KiBiLCBpbnQqIGEpCit7CisgICAgaWYgKHIp
CisgICAgICAgICpyID0gMDsKKyAgICBpZiAoZykKKyAgICAgICAgKmcgPSAwOworICAgIGlmIChi
KQorICAgICAgICAqYiA9IDA7CisgICAgaWYgKGEpCisgICAgICAgICphID0gMDsKKyAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkKTsKKyAgICBpZiAocikKKyAgICAgICAgKnIgPSBz
ZC0+YmdfY29sb3IucjsKKyAgICBpZiAoZykKKyAgICAgICAgKmcgPSBzZC0+YmdfY29sb3IuZzsK
KyAgICBpZiAoYikKKyAgICAgICAgKmIgPSBzZC0+YmdfY29sb3IuYjsKKyAgICBpZiAoYSkKKyAg
ICAgICAgKmEgPSBzZC0+YmdfY29sb3IuYTsKK30KKworLyoqCisgKiBTZWFyY2ggdGhlIGdpdmVu
IHRleHQgc3RyaW5nIGluIGRvY3VtZW50LgorICoKKyAqIEBwYXJhbSBvIHZpZXcgb2JqZWN0IHdo
ZXJlIHRvIHNlYXJjaCB0ZXh0LgorICogQHBhcmFtIHN0cmluZyByZWZlcmVuY2Ugc3RyaW5nIHRv
IHNlYXJjaC4KKyAqIEBwYXJhbSBjYXNlX3NlbnNpdGl2ZSBpZiBzZWFyY2ggc2hvdWxkIGJlIGNh
c2Ugc2Vuc2l0aXZlIG9yIG5vdC4KKyAqIEBwYXJhbSBmb3J3YXJkIGlmIHNlYXJjaCBpcyBmcm9t
IGN1cnNvciBhbmQgb24gb3IgYmFja3dhcmRzLgorICogQHBhcmFtIHdyYXAgaWYgc2VhcmNoIHNo
b3VsZCB3cmFwIGF0IGVuZC4KKyAqCisgKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBpZiBmb3VuZCwg
QGMgRUlOQV9GQUxTRSBpZiBub3Qgb3IgZmFpbHVyZS4KKyAqLworRWluYV9Cb29sIGV3a192aWV3
X3RleHRfc2VhcmNoKGNvbnN0IEV2YXNfT2JqZWN0KiBvLCBjb25zdCBjaGFyKiBzdHJpbmcsIEVp
bmFfQm9vbCBjYXNlX3NlbnNpdGl2ZSwgRWluYV9Cb29sIGZvcndhcmQsIEVpbmFfQm9vbCB3cmFw
KQoreworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOwor
ICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7Cisg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHN0cmluZywgRUlOQV9GQUxTRSk7Cisg
ICAgV2ViQ29yZTo6VGV4dENhc2VTZW5zaXRpdml0eSBzZW5zaXRpdmU7CisgICAgV2ViQ29yZTo6
RmluZERpcmVjdGlvbiBkaXJlY3Rpb247CisKKyAgICBpZiAoY2FzZV9zZW5zaXRpdmUpCisgICAg
ICAgIHNlbnNpdGl2ZSA9IFdlYkNvcmU6OlRleHRDYXNlU2Vuc2l0aXZlOworICAgIGVsc2UKKyAg
ICAgICAgc2Vuc2l0aXZlID0gV2ViQ29yZTo6VGV4dENhc2VJbnNlbnNpdGl2ZTsKKworICAgIGlm
IChmb3J3YXJkKQorICAgICAgICBkaXJlY3Rpb24gPSBXZWJDb3JlOjpGaW5kRGlyZWN0aW9uRm9y
d2FyZDsKKyAgICBlbHNlCisgICAgICAgIGRpcmVjdGlvbiA9IFdlYkNvcmU6OkZpbmREaXJlY3Rp
b25CYWNrd2FyZDsKKworICAgIHJldHVybiBwcml2LT5wYWdlLT5maW5kU3RyaW5nKFdlYkNvcmU6
OlN0cmluZzo6ZnJvbVVURjgoc3RyaW5nKSwgc2Vuc2l0aXZlLCBkaXJlY3Rpb24sIHdyYXApOwor
fQorCisvKioKKyAqIE1hcmsgbWF0Y2hlcyB0aGUgZ2l2ZW4gdGV4dCBzdHJpbmcgaW4gZG9jdW1l
bnQuCisgKgorICogQHBhcmFtIG8gdmlldyBvYmplY3Qgd2hlcmUgdG8gc2VhcmNoIHRleHQuCisg
KiBAcGFyYW0gc3RyaW5nIHJlZmVyZW5jZSBzdHJpbmcgdG8gbWF0Y2guCisgKiBAcGFyYW0gY2Fz
ZV9zZW5zaXRpdmUgaWYgbWF0Y2ggc2hvdWxkIGJlIGNhc2Ugc2Vuc2l0aXZlIG9yIG5vdC4KKyAq
IEBwYXJhbSBoaWdobGlnaHQgaWYgbWF0Y2hlcyBzaG91bGQgYmUgaGlnaGxpZ2h0ZWQuCisgKiBA
cGFyYW0gbGltaXQgbWF4aW11bSBhbW91bnQgb2YgbWF0Y2hlcywgb3IgemVybyB0byB1bmxpbWl0
ZWQuCisgKgorICogQHJldHVybiBudW1iZXIgb2YgbWF0Y2hlcy4KKyAqLwordW5zaWduZWQgaW50
IGV3a192aWV3X3RleHRfbWF0Y2hlc19tYXJrKEV2YXNfT2JqZWN0KiBvLCBjb25zdCBjaGFyKiBz
dHJpbmcsIEVpbmFfQm9vbCBjYXNlX3NlbnNpdGl2ZSwgRWluYV9Cb29sIGhpZ2hsaWdodCwgdW5z
aWduZWQgaW50IGxpbWl0KQoreworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2Qs
IDApOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgMCk7CisgICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHN0cmluZywgMCk7CisgICAgV2ViQ29yZTo6
VGV4dENhc2VTZW5zaXRpdml0eSBzZW5zaXRpdmU7CisKKyAgICBpZiAoY2FzZV9zZW5zaXRpdmUp
CisgICAgICAgIHNlbnNpdGl2ZSA9IFdlYkNvcmU6OlRleHRDYXNlU2Vuc2l0aXZlOworICAgIGVs
c2UKKyAgICAgICAgc2Vuc2l0aXZlID0gV2ViQ29yZTo6VGV4dENhc2VJbnNlbnNpdGl2ZTsKKwor
ICAgIHJldHVybiBwcml2LT5wYWdlLT5tYXJrQWxsTWF0Y2hlc0ZvclRleHQoV2ViQ29yZTo6U3Ry
aW5nOjpmcm9tVVRGOChzdHJpbmcpLCBzZW5zaXRpdmUsIGhpZ2hsaWdodCwgbGltaXQpOworfQor
CisvKioKKyAqIFJldmVyc2VzIHRoZSBlZmZlY3Qgb2YgZXdrX3ZpZXdfdGV4dF9tYXRjaGVzX21h
cmsoKQorICoKKyAqIEBwYXJhbSBvIHZpZXcgb2JqZWN0IHdoZXJlIHRvIHNlYXJjaCB0ZXh0Lgor
ICoKKyAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIG9uIHN1Y2Nlc3MsIEBjIEVJTkFfRkFMU0UgZm9y
IGZhaWx1cmUuCisgKi8KK0VpbmFfQm9vbCBld2tfdmlld190ZXh0X21hdGNoZXNfdW5tYXJrX2Fs
bChFdmFzX09iamVjdCogbykKK3sKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNk
LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYs
IEVJTkFfRkFMU0UpOworICAgIHByaXYtPnBhZ2UtPnVubWFya0FsbFRleHRNYXRjaGVzKCk7Cisg
ICAgcmV0dXJuIEVJTkFfVFJVRTsKK30KKworLyoqCisgKiBTZXQgaWYgc2hvdWxkIGhpZ2hsaWdo
dCBtYXRjaGVzIG1hcmtlZCB3aXRoIGV3a192aWV3X3RleHRfbWF0Y2hlc19tYXJrKCkuCisgKgor
ICogQHBhcmFtIG8gdmlldyBvYmplY3Qgd2hlcmUgdG8gc2V0IGlmIG1hdGNoZXMgYXJlIGhpZ2hs
aWdodGVkIG9yIG5vdC4KKyAqIEBwYXJhbSBoaWdobGlnaHQgaWYgQGMgRUlOQV9UUlVFLCBtYXRj
aGVzIHdpbGwgYmUgaGlnaGxpZ2h0ZWQuCisgKgorICogQHJldHVybiBAYyBFSU5BX1RSVUUgb24g
c3VjY2VzcywgQGMgRUlOQV9GQUxTRSBmb3IgZmFpbHVyZS4KKyAqLworRWluYV9Cb29sIGV3a192
aWV3X3RleHRfbWF0Y2hlc19oaWdobGlnaHRfc2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wg
aGlnaGxpZ2h0KQoreworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFf
RkFMU0UpOworICAgIHJldHVybiBld2tfZnJhbWVfdGV4dF9tYXRjaGVzX2hpZ2hsaWdodF9zZXQo
c2QtPm1haW5fZnJhbWUsIGhpZ2hsaWdodCk7Cit9CisKKy8qKgorICogR2V0IGlmIHNob3VsZCBo
aWdobGlnaHQgbWF0Y2hlcyBtYXJrZWQgd2l0aCBld2tfdmlld190ZXh0X21hdGNoZXNfbWFyaygp
LgorICoKKyAqIEBwYXJhbSBvIHZpZXcgb2JqZWN0IHRvIHF1ZXJ5IGlmIG1hdGNoZXMgYXJlIGhp
Z2hsaWdodGVkIG9yIG5vdC4KKyAqCisgKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBpZiB0aGV5IGFy
ZSBoaWdobGlnaHRlZCwgQGMgRUlOQV9GQUxTRSBvdGhlcndpc2UuCisgKi8KK0VpbmFfQm9vbCBl
d2tfdmlld190ZXh0X21hdGNoZXNfaGlnaGxpZ2h0X2dldChjb25zdCBFdmFzX09iamVjdCogbykK
K3sKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAg
ICByZXR1cm4gZXdrX2ZyYW1lX3RleHRfbWF0Y2hlc19oaWdobGlnaHRfZ2V0KHNkLT5tYWluX2Zy
YW1lKTsKK30KKworLyoqCisgKiBTZXRzIGlmIG1haW4gZnJhbWUgaXMgZWRpdGFibGUuCisgKgor
ICogQHBhcmFtIG8gdmlldyBvYmplY3QgdG8gc2V0IGVkaXRhYmxlIHN0YXRlLgorICogQHBhcmFt
IGVkaXRhYmxlIG5ldyBzdGF0ZS4KKyAqCisgKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBvbiBzdWNj
ZXNzLCBAYyBFSU5BX0ZBTFNFIG90aGVyd2lzZS4KKyAqLworRWluYV9Cb29sIGV3a192aWV3X2Vk
aXRhYmxlX3NldChFdmFzX09iamVjdCogbywgRWluYV9Cb29sIGVkaXRhYmxlKQoreworICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIHJldHVybiBl
d2tfZnJhbWVfZWRpdGFibGVfc2V0KHNkLT5tYWluX2ZyYW1lLCBlZGl0YWJsZSk7Cit9CisKKy8q
KgorICogR2V0IHRoZSBjb3B5IG9mIHRoZSBzZWxlY3Rpb24gdGV4dC4KKyAqCisgKiBAcGFyYW0g
byB2aWV3IG9iamVjdCB0byBnZXQgc2VsZWN0aW9uIHRleHQuCisgKgorICogQHJldHVybiBuZXds
eSBhbGxvY2F0ZWQgc3RyaW5nIG9yIEBjIDAgaWYgbm90aGluZyBpcyBzZWxlY3RlZCBvciBmYWls
dXJlLgorICovCitjaGFyKiBld2tfdmlld19zZWxlY3Rpb25fZ2V0KGNvbnN0IEV2YXNfT2JqZWN0
KiBvKQoreworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIDApOworICAgIEVX
S19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgMCk7CisgICAgV2ViQ29yZTo6Q1N0
cmluZyBzID0gcHJpdi0+cGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFt
ZSgpLT5zZWxlY3RlZFRleHQoKS51dGY4KCk7CisgICAgaWYgKHMuaXNOdWxsKCkpCisgICAgICAg
IHJldHVybiAwOworICAgIHJldHVybiBzdHJkdXAocy5kYXRhKCkpOworfQorCitzdGF0aWMgRWlu
YV9Cb29sIF9ld2tfdmlld19lZGl0b3JfY29tbWFuZChFd2tfVmlld19Qcml2YXRlX0RhdGEqIHBy
aXYsIGNvbnN0IGNoYXIqIGNvbW1hbmQpCit7CisgICAgcmV0dXJuIHByaXYtPnBhZ2UtPmZvY3Vz
Q29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKS0+ZWRpdG9yKCktPmNvbW1hbmQoV2Vi
Q29yZTo6U3RyaW5nOjpmcm9tVVRGOChjb21tYW5kKSkuZXhlY3V0ZSgpOworfQorCisvKioKKyAq
IFVuc2VsZWN0cyB3aGF0ZXZlciB3YXMgc2VsZWN0ZWQuCisgKgorICogQHJldHVybiBAYyBFSU5B
X1RSVUUgaWYgb3BlcmF0aW9uIHdhcyBleGVjdXRlZCwgQGMgRUlOQV9GQUxTRSBvdGhlcndpc2Uu
CisgKi8KK0VpbmFfQm9vbCBld2tfdmlld19zZWxlY3Rfbm9uZShFdmFzX09iamVjdCogbykKK3sK
KyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBF
V0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIHJl
dHVybiBfZXdrX3ZpZXdfZWRpdG9yX2NvbW1hbmQocHJpdiwgIlVuc2VsZWN0Iik7Cit9CisKKy8q
KgorICogU2VsZWN0cyBldmVyeXRoaW5nLgorICoKKyAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIGlm
IG9wZXJhdGlvbiB3YXMgZXhlY3V0ZWQsIEBjIEVJTkFfRkFMU0Ugb3RoZXJ3aXNlLgorICovCitF
aW5hX0Jvb2wgZXdrX3ZpZXdfc2VsZWN0X2FsbChFdmFzX09iamVjdCogbykKK3sKKyAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19Q
UklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIHJldHVybiBfZXdr
X3ZpZXdfZWRpdG9yX2NvbW1hbmQocHJpdiwgIlNlbGVjdEFsbCIpOworfQorCisvKioKKyAqIFNl
bGVjdHMgdGhlIGN1cnJlbnQgcGFyYWdyYWguCisgKgorICogQHJldHVybiBAYyBFSU5BX1RSVUUg
aWYgb3BlcmF0aW9uIHdhcyBleGVjdXRlZCwgQGMgRUlOQV9GQUxTRSBvdGhlcndpc2UuCisgKi8K
K0VpbmFfQm9vbCBld2tfdmlld19zZWxlY3RfcGFyYWdyYXBoKEV2YXNfT2JqZWN0KiBvKQorewor
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVX
S19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgcmV0
dXJuIF9ld2tfdmlld19lZGl0b3JfY29tbWFuZChwcml2LCAiU2VsZWN0UGFyYWdyYXBoIik7Cit9
CisKKy8qKgorICogU2VsZWN0cyB0aGUgY3VycmVudCBzZW50ZW5jZS4KKyAqCisgKiBAcmV0dXJu
IEBjIEVJTkFfVFJVRSBpZiBvcGVyYXRpb24gd2FzIGV4ZWN1dGVkLCBAYyBFSU5BX0ZBTFNFIG90
aGVyd2lzZS4KKyAqLworRWluYV9Cb29sIGV3a192aWV3X3NlbGVjdF9zZW50ZW5jZShFdmFzX09i
amVjdCogbykKK3sKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZB
TFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFM
U0UpOworICAgIHJldHVybiBfZXdrX3ZpZXdfZWRpdG9yX2NvbW1hbmQocHJpdiwgIlNlbGVjdFNl
bnRlbmNlIik7Cit9CisKKy8qKgorICogU2VsZWN0cyB0aGUgY3VycmVudCBsaW5lLgorICoKKyAq
IEByZXR1cm4gQGMgRUlOQV9UUlVFIGlmIG9wZXJhdGlvbiB3YXMgZXhlY3V0ZWQsIEBjIEVJTkFf
RkFMU0Ugb3RoZXJ3aXNlLgorICovCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2VsZWN0X2xpbmUoRXZh
c19PYmplY3QqIG8pCit7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlO
QV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5B
X0ZBTFNFKTsKKyAgICByZXR1cm4gX2V3a192aWV3X2VkaXRvcl9jb21tYW5kKHByaXYsICJTZWxl
Y3RMaW5lIik7Cit9CisKKy8qKgorICogU2VsZWN0cyB0aGUgY3VycmVudCB3b3JkLgorICoKKyAq
IEByZXR1cm4gQGMgRUlOQV9UUlVFIGlmIG9wZXJhdGlvbiB3YXMgZXhlY3V0ZWQsIEBjIEVJTkFf
RkFMU0Ugb3RoZXJ3aXNlLgorICovCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2VsZWN0X3dvcmQoRXZh
c19PYmplY3QqIG8pCit7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlO
QV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5B
X0ZBTFNFKTsKKyAgICByZXR1cm4gX2V3a192aWV3X2VkaXRvcl9jb21tYW5kKHByaXYsICJTZWxl
Y3RXb3JkIik7Cit9CisKKy8qKgorICogR2V0IGN1cnJlbnQgbG9hZCBwcm9ncmVzcyBlc3RpbWF0
ZSBmcm9tIDAuMCB0byAxLjAuCisgKgorICogQHBhcmFtIG8gdmlldyBvYmplY3QgdG8gZ2V0IGN1
cnJlbnQgcHJvZ3Jlc3MuCisgKgorICogQHJldHVybiBwcm9ncmVzIHZhbHVlIGZyb20gMC4wIHRv
IDEuMCBvciAtMS4wIG9uIGVycm9yLgorICovCitkb3VibGUgZXdrX3ZpZXdfbG9hZF9wcm9ncmVz
c19nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCit7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JF
VFVSTihvLCBzZCwgLTEuMCk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBw
cml2LCAtMS4wKTsKKyAgICByZXR1cm4gcHJpdi0+cGFnZS0+cHJvZ3Jlc3MoKS0+ZXN0aW1hdGVk
UHJvZ3Jlc3MoKTsKK30KKworLyoqCisgKiBBc2sgbWFpbiBmcmFtZSB0byBzdG9wIGxvYWRpbmcu
CisgKgorICogQHBhcmFtIG8gdmlldyBvYmplY3QgdG8gc3RvcCBsb2FkaW5nLgorICoKKyAqIEBy
ZXR1cm4gQGMgRUlOQV9UUlVFIG9uIHN1Y2Nlc3MsIEBjIEVJTkFfRkFMU0Ugb3RoZXJ3aXNlLgor
ICoKKyAqIEBzZWUgZXdrX2ZyYW1lX3N0b3AoKQorICovCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc3Rv
cChFdmFzX09iamVjdCogbykKK3sKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNk
LCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gZXdrX2ZyYW1lX3N0b3Aoc2QtPm1haW5fZnJhbWUp
OworfQorCisvKioKKyAqIEFzayBtYWluIGZyYW1lIHRvIHJlbG9hZCBjdXJyZW50IGRvY3VtZW50
LgorICoKKyAqIEBwYXJhbSBvIHZpZXcgb2JqZWN0IHRvIHJlbG9hZC4KKyAqCisgKiBAcmV0dXJu
IEBjIEVJTkFfVFJVRSBvbiBzdWNjZXNzLCBAYyBFSU5BX0ZBTFNFIG90aGVyd2lzZS4KKyAqCisg
KiBAc2VlIGV3a19mcmFtZV9yZWxvYWQoKQorICovCitFaW5hX0Jvb2wgZXdrX3ZpZXdfcmVsb2Fk
KEV2YXNfT2JqZWN0KiBvKQoreworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2Qs
IEVJTkFfRkFMU0UpOworICAgIHJldHVybiBld2tfZnJhbWVfcmVsb2FkKHNkLT5tYWluX2ZyYW1l
KTsKK30KKworLyoqCisgKiBBc2sgbWFpbiBmcmFtZSB0byBmdWxseSByZWxvYWQgY3VycmVudCBk
b2N1bWVudCwgdXNpbmcgbm8gY2FjaGVzLgorICoKKyAqIEBwYXJhbSBvIHZpZXcgb2JqZWN0IHRv
IHJlbG9hZC4KKyAqCisgKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBvbiBzdWNjZXNzLCBAYyBFSU5B
X0ZBTFNFIG90aGVyd2lzZS4KKyAqCisgKiBAc2VlIGV3a19mcmFtZV9yZWxvYWRfZnVsbCgpCisg
Ki8KK0VpbmFfQm9vbCBld2tfdmlld19yZWxvYWRfZnVsbChFdmFzX09iamVjdCogbykKK3sKKyAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1
cm4gZXdrX2ZyYW1lX3JlbG9hZF9mdWxsKHNkLT5tYWluX2ZyYW1lKTsKK30KKworLyoqCisgKiBB
c2sgbWFpbiBmcmFtZSB0byBuYXZpZ2F0ZSBiYWNrIGluIGhpc3RvcnkuCisgKgorICogQHBhcmFt
IG8gdmlldyBvYmplY3QgdG8gbmF2aWdhdGUgYmFjay4KKyAqCisgKiBAcmV0dXJuIEBjIEVJTkFf
VFJVRSBvbiBzdWNjZXNzLCBAYyBFSU5BX0ZBTFNFIG90aGVyd2lzZS4KKyAqCisgKiBAc2VlIGV3
a19mcmFtZV9iYWNrKCkKKyAqLworRWluYV9Cb29sIGV3a192aWV3X2JhY2soRXZhc19PYmplY3Qq
IG8pCit7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7
CisgICAgcmV0dXJuIGV3a19mcmFtZV9iYWNrKHNkLT5tYWluX2ZyYW1lKTsKK30KKworLyoqCisg
KiBBc2sgbWFpbiBmcmFtZSB0byBuYXZpZ2F0ZSBmb3J3YXJkIGluIGhpc3RvcnkuCisgKgorICog
QHBhcmFtIG8gdmlldyBvYmplY3QgdG8gbmF2aWdhdGUgZm9yd2FyZC4KKyAqCisgKiBAcmV0dXJu
IEBjIEVJTkFfVFJVRSBvbiBzdWNjZXNzLCBAYyBFSU5BX0ZBTFNFIG90aGVyd2lzZS4KKyAqCisg
KiBAc2VlIGV3a19mcmFtZV9mb3J3YXJkKCkKKyAqLworRWluYV9Cb29sIGV3a192aWV3X2Zvcndh
cmQoRXZhc19PYmplY3QqIG8pCit7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBz
ZCwgRUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIGV3a19mcmFtZV9mb3J3YXJkKHNkLT5tYWluX2Zy
YW1lKTsKK30KKworLyoqCisgKiBOYXZpZ2F0ZSBiYWNrIG9yIGZvcndhcmQgaW4gaGlzdG9yeS4K
KyAqCisgKiBAcGFyYW0gbyB2aWV3IG9iamVjdCB0byBuYXZpZ2F0ZS4KKyAqIEBwYXJhbSBzdGVw
cyBpZiBwb3NpdGl2ZSBuYXZpZ2F0ZXMgdGhhdCBhbW91bnQgZm9yd2FyZHMsIGlmIG5lZ2F0aXZl
CisgKiAgICAgICAgZG9lcyBiYWNrd2FyZHMuCisgKgorICogQHJldHVybiBAYyBFSU5BX1RSVUUg
b24gc3VjY2VzcywgQGMgRUlOQV9GQUxTRSBvdGhlcndpc2UuCisgKgorICogQHNlZSBld2tfZnJh
bWVfbmF2aWdhdGUoKQorICovCitFaW5hX0Jvb2wgZXdrX3ZpZXdfbmF2aWdhdGUoRXZhc19PYmpl
Y3QqIG8sIGludCBzdGVwcykKK3sKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNk
LCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gZXdrX2ZyYW1lX25hdmlnYXRlKHNkLT5tYWluX2Zy
YW1lLCBzdGVwcyk7Cit9CisKKy8qKgorICogQ2hlY2sgaWYgaXQgaXMgcG9zc2libGUgdG8gbmF2
aWdhdGUgYmFja3dhcmRzIG9uZSBpdGVtIGluIGhpc3RvcnkuCisgKgorICogQHBhcmFtIG8gdmll
dyBvYmplY3QgdG8gY2hlY2sgaWYgYmFja3dhcmQgbmF2aWdhdGlvbiBpcyBwb3NzaWJsZS4KKyAq
CisgKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBpZiBwb3NzaWJsZSwgQGMgRUlOQV9GQUxTRSBvdGhl
cndpc2UuCisgKgorICogQHNlZSBld2tfdmlld19uYXZpZ2F0ZV9wb3NzaWJsZSgpCisgKi8KK0Vp
bmFfQm9vbCBld2tfdmlld19iYWNrX3Bvc3NpYmxlKEV2YXNfT2JqZWN0KiBvKQoreworICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIHJldHVybiBl
d2tfZnJhbWVfYmFja19wb3NzaWJsZShzZC0+bWFpbl9mcmFtZSk7Cit9CisKKy8qKgorICogQ2hl
Y2sgaWYgaXQgaXMgcG9zc2libGUgdG8gbmF2aWdhdGUgZm9yd2FyZHMgb25lIGl0ZW0gaW4gaGlz
dG9yeS4KKyAqCisgKiBAcGFyYW0gbyB2aWV3IG9iamVjdCB0byBjaGVjayBpZiBmb3J3YXJkIG5h
dmlnYXRpb24gaXMgcG9zc2libGUuCisgKgorICogQHJldHVybiBAYyBFSU5BX1RSVUUgaWYgcG9z
c2libGUsIEBjIEVJTkFfRkFMU0Ugb3RoZXJ3aXNlLgorICoKKyAqIEBzZWUgZXdrX3ZpZXdfbmF2
aWdhdGVfcG9zc2libGUoKQorICovCitFaW5hX0Jvb2wgZXdrX3ZpZXdfZm9yd2FyZF9wb3NzaWJs
ZShFdmFzX09iamVjdCogbykKK3sKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNk
LCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gZXdrX2ZyYW1lX2ZvcndhcmRfcG9zc2libGUoc2Qt
Pm1haW5fZnJhbWUpOworfQorCisvKioKKyAqIENoZWNrIGlmIGl0IGlzIHBvc3NpYmxlIHRvIG5h
dmlnYXRlIGdpdmVuIEBhIHN0ZXBzIGluIGhpc3RvcnkuCisgKgorICogQHBhcmFtIG8gdmlldyBv
YmplY3QgdG8gbmF2aWdhdGUuCisgKiBAcGFyYW0gc3RlcHMgaWYgcG9zaXRpdmUgbmF2aWdhdGVz
IHRoYXQgYW1vdW50IGZvcndhcmRzLCBpZiBuZWdhdGl2ZQorICogICAgICAgIGRvZXMgYmFja3dh
cmRzLgorICoKKyAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIGlmIHBvc3NpYmxlLCBAYyBFSU5BX0ZB
TFNFIG90aGVyd2lzZS4KKyAqLworRWluYV9Cb29sIGV3a192aWV3X25hdmlnYXRlX3Bvc3NpYmxl
KEV2YXNfT2JqZWN0KiBvLCBpbnQgc3RlcHMpCit7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JF
VFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIGV3a19mcmFtZV9uYXZpZ2F0ZV9w
b3NzaWJsZShzZC0+bWFpbl9mcmFtZSwgc3RlcHMpOworfQorCisvKioKKyAqIENoZWNrIGlmIG5h
dmlnYXRpb24gaGlzdG9yeSAoYmFjay1mb3J3YXJkIGxpc3RzKSBpcyBlbmFibGVkLgorICoKKyAq
IEBwYXJhbSBvIHZpZXcgb2JqZWN0IHRvIGNoZWNrIGlmIG5hdmlnYXRpb24gaGlzdG9yeSBpcyBl
bmFibGVkLgorICoKKyAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIGlmIHZpZXcga2VlcHMgaGlzdG9y
eSwgQGMgRUlOQV9GQUxTRSBvdGhlcndpc2UuCisgKi8KK0VpbmFfQm9vbCBld2tfdmlld19oaXN0
b3J5X2VuYWJsZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCit7CisgICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRf
T1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gcHJpdi0+cGFnZS0+
YmFja0ZvcndhcmRMaXN0KCktPmVuYWJsZWQoKTsKK30KKworLyoqCisgKiBTZXRzIGlmIG5hdmln
YXRpb24gaGlzdG9yeSAoYmFjay1mb3J3YXJkIGxpc3RzKSBpcyBlbmFibGVkLgorICoKKyAqIEBw
YXJhbSBvIHZpZXcgb2JqZWN0IHRvIHNldCBpZiBuYXZpZ2F0aW9uIGhpc3RvcnkgaXMgZW5hYmxl
ZC4KKyAqIEBwYXJhbSBlbmFibGUgQGMgRUlOQV9UUlVFIGlmIHdlIHdhbnQgdG8gZW5hYmxlIG5h
dmlnYXRpb24gaGlzdG9yeTsKKyAqIEBjIEVJTkFfRkFMU0Ugb3RoZXJ3aXNlLgorICoKKyAqIEBy
ZXR1cm4gQGMgRUlOQV9UUlVFIG9uIHN1Y2Nlc3MsIEBjIEVJTkFfRkFMU0Ugb3RoZXJ3aXNlLgor
ICovCitFaW5hX0Jvb2wgZXdrX3ZpZXdfaGlzdG9yeV9lbmFibGVfc2V0KEV2YXNfT2JqZWN0KiBv
LCBFaW5hX0Jvb2wgZW5hYmxlKQoreworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywg
c2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJp
diwgRUlOQV9GQUxTRSk7CisgICAgcHJpdi0+cGFnZS0+YmFja0ZvcndhcmRMaXN0KCktPnNldEVu
YWJsZWQoZW5hYmxlKTsKKyAgICByZXR1cm4gRUlOQV9UUlVFOworfQorCisvKioKKyAqIEdldHMg
dGhlIGhpc3RvcnkgKGJhY2stZm9yd2FyZCBsaXN0KSBhc3NvY2lhdGVkIHdpdGggdGhpcyB2aWV3
LgorICoKKyAqIEBwYXJhbSBvIHZpZXcgb2JqZWN0IHRvIGdldCBuYXZpZ2F0aW9uIGhpc3Rvcnkg
ZnJvbS4KKyAqCisgKiBAcmV0dXJuIHJldHVybnMgdGhlIGhpc3RvcnkgaW5zdGFuY2UgaGFuZGxl
IGFzc29jaWF0ZWQgd2l0aCB0aGlzCisgKiAgICAgICAgIHZpZXcgb3IgQGMgMCBvbiBlcnJvcnMg
KGluY2x1ZGluZyB3aGVuIGhpc3RvcnkgaXMgbm90CisgKiAgICAgICAgIGVuYWJsZWQgd2l0aCBl
d2tfdmlld19oaXN0b3J5X2VuYWJsZV9zZXQoKSkuIFRoaXMgaW5zdGFuY2UKKyAqICAgICAgICAg
aXMgdW5pcXVlIGZvciB0aGlzIHZpZXcgYW5kIHRodXMgbXVsdGlwbGUgY2FsbHMgdG8gdGhpcwor
ICogICAgICAgICBmdW5jdGlvbiB3aXRoIHRoZSBzYW1lIHZpZXcgYXMgcGFyYW1ldGVyIHJldHVy
bnMgdGhlIHNhbWUKKyAqICAgICAgICAgaGFuZGxlLiBUaGlzIGhhbmRsZSBpcyBhbGl2ZSB3aGls
ZSB2aWV3IGlzIGFsaXZlLCB0aHVzIG9uZQorICogICAgICAgICBtaWdodCB3YW50IHRvIGxpc3Rl
biBmb3IgRVZBU19DQUxMQkFDS19ERUwgb24gZ2l2ZW4gdmlldworICogICAgICAgICAoQGEgbykg
dG8ga25vdyB3aGVuIHRvIHN0b3AgdXNpbmcgcmV0dXJuZWQgaGFuZGxlLgorICoKKyAqIEBzZWUg
ZXdrX3ZpZXdfaGlzdG9yeV9lbmFibGVfc2V0KCkKKyAqLworRXdrX0hpc3RvcnkqIGV3a192aWV3
X2hpc3RvcnlfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQoreworICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4obywgc2QsIDApOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihz
ZCwgcHJpdiwgMCk7CisgICAgaWYgKCFwcml2LT5wYWdlLT5iYWNrRm9yd2FyZExpc3QoKS0+ZW5h
YmxlZCgpKSB7CisgICAgICAgIEVSUigiYXNrZWQgaGlzdG9yeSwgYnV0IGl0J3MgZGlzYWJsZWQh
IFJldHVybmluZyAwISIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIHBy
aXYtPmhpc3Rvcnk7Cit9CisKKy8qKgorICogR2V0IHRoZSBjdXJyZW50IHpvb20gbGV2ZWwgb2Yg
bWFpbiBmcmFtZS4KKyAqCisgKiBAcGFyYW0gbyB2aWV3IG9iamVjdCB0byBxdWVyeSB6b29tIGxl
dmVsLgorICoKKyAqIEByZXR1cm4gY3VycmVudCB6b29tIGxldmVsIGluIHVzZSBvciAtMS4wIG9u
IGVycm9yLgorICovCitmbG9hdCBld2tfdmlld196b29tX2dldChjb25zdCBFdmFzX09iamVjdCog
bykKK3sKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAtMS4wKTsKKyAgICBy
ZXR1cm4gZXdrX2ZyYW1lX3pvb21fZ2V0KHNkLT5tYWluX2ZyYW1lKTsKK30KKworLyoqCisgKiBT
ZXQgdGhlIGN1cnJlbnQgem9vbSBsZXZlbCBvZiBtYWluIGZyYW1lLgorICoKKyAqIEBwYXJhbSBv
IHZpZXcgb2JqZWN0IHRvIHNldCB6b29tIGxldmVsLgorICogQHBhcmFtIHpvb20gbmV3IGxldmVs
IHRvIHVzZS4KKyAqIEBwYXJhbSBjeCB4IG9mIGNlbnRlciBjb29yZGluYXRlCisgKiBAcGFyYW0g
Y3kgeSBvZiBjZW50ZXIgY29vcmRpbmF0ZQorICoKKyAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIG9u
IHN1Y2Nlc3MsIEBjIEVJTkFfRkFMU0Ugb3RoZXJ3aXNlLgorICovCitFaW5hX0Jvb2wgZXdrX3Zp
ZXdfem9vbV9zZXQoRXZhc19PYmplY3QqIG8sIGZsb2F0IHpvb20sIEV2YXNfQ29vcmQgY3gsIEV2
YXNfQ29vcmQgY3kpCit7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlO
QV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5hcGksIEVJ
TkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+YXBpLT56
b29tX3NldCwgRUlOQV9GQUxTRSk7CisgICAgaWYgKHpvb20gPCBaT09NX01JTikgeworICAgICAg
ICBXUk4oInpvb20gbGV2ZWwgaXMgPCAlZiA6ICVmIiwgKGRvdWJsZSlaT09NX01JTiwgKGRvdWJs
ZSl6b29tKTsKKyAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CisgICAgfQorICAgIGlmICh6b29t
ID4gWk9PTV9NQVgpIHsKKyAgICAgICAgV1JOKCJ6b29tIGxldmVsIGlzID4gJWYgOiAlZiIsIChk
b3VibGUpWk9PTV9NQVgsIChkb3VibGUpem9vbSk7CisgICAgICAgIHJldHVybiBFSU5BX0ZBTFNF
OworICAgIH0KKworICAgIGlmIChjeCA+PSBzZC0+dmlldy53KQorICAgICAgICBjeCA9IHNkLT52
aWV3LncgLSAxOworICAgIGlmIChjeSA+PSBzZC0+dmlldy5oKQorICAgICAgICBjeSA9IHNkLT52
aWV3LmggLSAxOworICAgIGlmIChjeCA8IDApCisgICAgICAgIGN4ID0gMDsKKyAgICBpZiAoY3kg
PCAwKQorICAgICAgICBjeSA9IDA7CisgICAgX2V3a192aWV3X3pvb21fYW5pbWF0ZWRfbWFya19z
dG9wKHNkKTsKKyAgICByZXR1cm4gc2QtPmFwaS0+em9vbV9zZXQoc2QsIHpvb20sIGN4LCBjeSk7
Cit9CisKK0VpbmFfQm9vbCBld2tfdmlld196b29tX3dlYWtfc21vb3RoX3NjYWxlX2dldChjb25z
dCBFdmFzX09iamVjdCogbykKK3sKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNk
LCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gc2QtPnpvb21fd2Vha19zbW9vdGhfc2NhbGU7Cit9
CisKK3ZvaWQgZXdrX3ZpZXdfem9vbV93ZWFrX3Ntb290aF9zY2FsZV9zZXQoRXZhc19PYmplY3Qq
IG8sIEVpbmFfQm9vbCBzbW9vdGhfc2NhbGUpCit7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JF
VFVSTihvLCBzZCk7CisgICAgc21vb3RoX3NjYWxlID0gISFzbW9vdGhfc2NhbGU7CisgICAgaWYg
KHNkLT56b29tX3dlYWtfc21vb3RoX3NjYWxlID09IHNtb290aF9zY2FsZSkKKyAgICAgICAgcmV0
dXJuOworICAgIHNkLT56b29tX3dlYWtfc21vb3RoX3NjYWxlID0gc21vb3RoX3NjYWxlOworICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGkpOworICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOKHNkLT5hcGktPnpvb21fd2Vha19zbW9vdGhfc2NhbGVfc2V0KTsKKyAgICBz
ZC0+YXBpLT56b29tX3dlYWtfc21vb3RoX3NjYWxlX3NldChzZCwgc21vb3RoX3NjYWxlKTsKK30K
KworLyoqCisgKiBTZXQgdGhlIGN1cnJlbnQgem9vbSBsZXZlbCBvZiBiYWNraW5nIHN0b3JlLCBj
ZW50ZXJlZCBhdCBnaXZlbiBwb2ludC4KKyAqCisgKiBVbmxpa2UgZXdrX3ZpZXdfem9vbV9zZXQo
KSwgdGhpcyBjYWxsIGRvIG5vdCBhc2sgV2ViS2l0IHRvIHJlbmRlcgorICogYXQgbmV3IHNpemUs
IGJ1dCBzY2FsZSB3aGF0IGlzIGFscmVhZHkgcmVuZGVyZWQsIGJlaW5nIG11Y2ggZmFzdGVyCisg
KiBidXQgd29yc2UgcXVhbGl0eS4KKyAqCisgKiBPZnRlbiBvbmUgc2hvdWxkIHVzZSBld2tfdmll
d196b29tX2FuaW1hdGVkX3NldCgpLCBpdCB3aWxsIGNhbGwgdGhlCisgKiBzYW1lIG1hY2hpbmVy
eSBpbnRlcm5hbGx5LgorICoKKyAqIEBub3RlIHRoaXMgd2lsbCBzZXQgdmFyaWFibGVzIHVzZWQg
YnkgZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9zZXQoKQorICogICAgICAgc28gc3ViLWNsYXNzZXMg
d2lsbCBub3QgcmVzZXQgaW50ZXJuYWwgc3RhdGUgb24gdGhlaXIKKyAqICAgICAgICJjYWxjdWxh
dGUiIHBoYXNlLiBUbyB1bnNldCB0aG9zZSBhbmQgZW5hYmxlIHN1Yi1jbGFzc2VzIHRvCisgKiAg
ICAgICByZXNldCB0aGVpciBpbnRlcm5hbCBzdGF0ZSwgY2FsbAorICogICAgICAgZXdrX3ZpZXdf
em9vbV9hbmltYXRlZF9tYXJrX3N0b3AoKS4gTmFtZWx5LCB0aGlzIGNhbGwgd2lsbAorICogICAg
ICAgc2V0IGV3a192aWV3X3pvb21fYW5pbWF0ZWRfbWFya19zdGFydCgpIHRvIGFjdHVhbCB3ZWJr
aXQgem9vbQorICogICAgICAgbGV2ZWwsIGV3a192aWV3X3pvb21fYW5pbWF0ZWRfbWFya19lbmQo
KSBhbmQKKyAqICAgICAgIGV3a192aWV3X3pvb21fYW5pbWF0ZWRfbWFya19jdXJyZW50KCkgdG8g
Z2l2ZW4gem9vbSBsZXZlbC4KKyAqCisgKiBAcGFyYW0gbyB2aWV3IG9iamVjdCB0byBzZXQgd2Vh
ayB6b29tIGxldmVsLgorICogQHBhcmFtIHpvb20gbGV2ZWwgdG8gc2NhbGUgYmFja2luZyBzdG9y
ZS4KKyAqIEBwYXJhbSBjeCBob3Jpem9udGFsIGNlbnRlciBvZmZzZXQsIHJlbGF0aXZlIHRvIG9i
amVjdCAody8yIGlzIG1pZGRsZSkuCisgKiBAcGFyYW0gY3kgdmVydGljYWwgY2VudGVyIG9mZnNl
dCwgcmVsYXRpdmUgdG8gb2JqZWN0IChoLzIgaXMgbWlkZGxlKS4KKyAqCisgKiBAcmV0dXJuIEBj
IEVJTkFfVFJVRSBvbiBzdWNjZXNzLCBAYyBFSU5BX0ZBTFNFIG90aGVyd2lzZS4KKyAqLworRWlu
YV9Cb29sIGV3a192aWV3X3pvb21fd2Vha19zZXQoRXZhc19PYmplY3QqIG8sIGZsb2F0IHpvb20s
IEV2YXNfQ29vcmQgY3gsIEV2YXNfQ29vcmQgY3kpCit7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk5fVkFMKHNkLT5hcGksIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOX1ZBTChzZC0+YXBpLT56b29tX3dlYWtfc2V0LCBFSU5BX0ZBTFNFKTsKKyAgICBpZiAoem9v
bSA8IFpPT01fTUlOKSB7CisgICAgICAgIFdSTigiem9vbSBsZXZlbCBpcyA8ICVmIDogJWYiLCAo
ZG91YmxlKVpPT01fTUlOLCAoZG91YmxlKXpvb20pOworICAgICAgICByZXR1cm4gRUlOQV9GQUxT
RTsKKyAgICB9CisgICAgaWYgKHpvb20gPiBaT09NX01BWCkgeworICAgICAgICBXUk4oInpvb20g
bGV2ZWwgaXMgPiAlZiA6ICVmIiwgKGRvdWJsZSlaT09NX01BWCwgKGRvdWJsZSl6b29tKTsKKyAg
ICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CisgICAgfQorCisgICAgaWYgKGN4ID49IHNkLT52aWV3
LncpCisgICAgICAgIGN4ID0gc2QtPnZpZXcudyAtIDE7CisgICAgaWYgKGN5ID49IHNkLT52aWV3
LmgpCisgICAgICAgIGN5ID0gc2QtPnZpZXcuaCAtIDE7CisgICAgaWYgKGN4IDwgMCkKKyAgICAg
ICAgY3ggPSAwOworICAgIGlmIChjeSA8IDApCisgICAgICAgIGN5ID0gMDsKKworICAgIHNkLT5h
bmltYXRlZF96b29tLnpvb20uc3RhcnQgPSBld2tfZnJhbWVfem9vbV9nZXQoc2QtPm1haW5fZnJh
bWUpOworICAgIHNkLT5hbmltYXRlZF96b29tLnpvb20uZW5kID0gem9vbTsKKyAgICBzZC0+YW5p
bWF0ZWRfem9vbS56b29tLmN1cnJlbnQgPSB6b29tOworICAgIHJldHVybiBzZC0+YXBpLT56b29t
X3dlYWtfc2V0KHNkLCB6b29tLCBjeCwgY3kpOworfQorCisvKioKKyAqIE1hcmsgaW50ZXJuYWwg
em9vbSBhbmltYXRpb24gc3RhdGUgdG8gZ2l2ZW4gem9vbS4KKyAqCisgKiBUaGlzIGRvZXMgbm90
IG1vZGlmeSBhbnkgYWN0dWFsIHpvb20gaW4gV2ViS2l0IG9yIGJhY2tpbmcgc3RvcmUsCisgKiBq
dXN0IHNldCB0aGUgRXdrX1ZpZXdfU21hcnRfRGF0YS0+YW5pbWF0ZWRfem9vbS56b29tLnN0YXJ0
IHNvCisgKiBzdWItY2xhc3NlcyB3aWxsIGtub3cgdGhleSBzaG91bGQgbm90IHJlc2V0IHRoZWly
IGludGVybmFsIHN0YXRlLgorICoKKyAqIEBwYXJhbSBvIHZpZXcgb2JqZWN0IHRvIGNoYW5nZSB2
YWx1ZS4KKyAqIEBwYXJhbSB6b29tIG5ldyBzdGFydCB2YWx1ZS4KKyAqCisgKiBAcmV0dXJuIEBj
IEVJTkFfVFJVRSBvbiBzdWNjZXNzLCBAYyBFSU5BX0ZBTFNFIG90aGVyd2lzZS4KKyAqCisgKiBA
c2VlIGV3a192aWV3X3pvb21fYW5pbWF0ZWRfc2V0KCkKKyAqIEBzZWUgZXdrX3ZpZXdfem9vbV93
ZWFrX3NldCgpCisgKiBAc2VlIGV3a192aWV3X3pvb21fYW5pbWF0ZWRfbWFya19zdG9wKCkKKyAq
IEBzZWUgZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9tYXJrX2VuZCgpCisgKiBAc2VlIGV3a192aWV3
X3pvb21fYW5pbWF0ZWRfbWFya19jdXJyZW50KCkKKyAqLworRWluYV9Cb29sIGV3a192aWV3X3pv
b21fYW5pbWF0ZWRfbWFya19zdGFydChFdmFzX09iamVjdCogbywgZmxvYXQgem9vbSkKK3sKKyAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBzZC0+
YW5pbWF0ZWRfem9vbS56b29tLnN0YXJ0ID0gem9vbTsKKyAgICByZXR1cm4gRUlOQV9UUlVFOwor
fQorCisvKioKKyAqIE1hcmsgaW50ZXJuYWwgem9vbSBhbmltYXRpb24gc3RhdGUgdG8gZ2l2ZW4g
em9vbS4KKyAqCisgKiBUaGlzIGRvZXMgbm90IG1vZGlmeSBhbnkgYWN0dWFsIHpvb20gaW4gV2Vi
S2l0IG9yIGJhY2tpbmcgc3RvcmUsCisgKiBqdXN0IHNldCB0aGUgRXdrX1ZpZXdfU21hcnRfRGF0
YS0+YW5pbWF0ZWRfem9vbS56b29tLmVuZCBzbworICogc3ViLWNsYXNzZXMgd2lsbCBrbm93IHRo
ZXkgc2hvdWxkIG5vdCByZXNldCB0aGVpciBpbnRlcm5hbCBzdGF0ZS4KKyAqCisgKiBAcGFyYW0g
byB2aWV3IG9iamVjdCB0byBjaGFuZ2UgdmFsdWUuCisgKiBAcGFyYW0gem9vbSBuZXcgZW5kIHZh
bHVlLgorICoKKyAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIG9uIHN1Y2Nlc3MsIEBjIEVJTkFfRkFM
U0Ugb3RoZXJ3aXNlLgorICoKKyAqIEBzZWUgZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9zZXQoKQor
ICogQHNlZSBld2tfdmlld196b29tX3dlYWtfc2V0KCkKKyAqIEBzZWUgZXdrX3ZpZXdfem9vbV9h
bmltYXRlZF9tYXJrX3N0b3AoKQorICogQHNlZSBld2tfdmlld196b29tX2FuaW1hdGVkX21hcmtf
c3RhcnQoKQorICogQHNlZSBld2tfdmlld196b29tX2FuaW1hdGVkX21hcmtfY3VycmVudCgpCisg
Ki8KK0VpbmFfQm9vbCBld2tfdmlld196b29tX2FuaW1hdGVkX21hcmtfZW5kKEV2YXNfT2JqZWN0
KiBvLCBmbG9hdCB6b29tKQoreworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2Qs
IEVJTkFfRkFMU0UpOworICAgIHNkLT5hbmltYXRlZF96b29tLnpvb20uZW5kID0gem9vbTsKKyAg
ICByZXR1cm4gRUlOQV9UUlVFOworfQorCisvKioKKyAqIE1hcmsgaW50ZXJuYWwgem9vbSBhbmlt
YXRpb24gc3RhdGUgdG8gZ2l2ZW4gem9vbS4KKyAqCisgKiBUaGlzIGRvZXMgbm90IG1vZGlmeSBh
bnkgYWN0dWFsIHpvb20gaW4gV2ViS2l0IG9yIGJhY2tpbmcgc3RvcmUsCisgKiBqdXN0IHNldCB0
aGUgRXdrX1ZpZXdfU21hcnRfRGF0YS0+YW5pbWF0ZWRfem9vbS56b29tLmN1cnJlbnQgc28KKyAq
IHN1Yi1jbGFzc2VzIHdpbGwga25vdyB0aGV5IHNob3VsZCBub3QgcmVzZXQgdGhlaXIgaW50ZXJu
YWwgc3RhdGUuCisgKgorICogQHBhcmFtIG8gdmlldyBvYmplY3QgdG8gY2hhbmdlIHZhbHVlLgor
ICogQHBhcmFtIHpvb20gbmV3IGN1cnJlbnQgdmFsdWUuCisgKgorICogQHJldHVybiBAYyBFSU5B
X1RSVUUgb24gc3VjY2VzcywgQGMgRUlOQV9GQUxTRSBvdGhlcndpc2UuCisgKgorICogQHNlZSBl
d2tfdmlld196b29tX2FuaW1hdGVkX3NldCgpCisgKiBAc2VlIGV3a192aWV3X3pvb21fd2Vha19z
ZXQoKQorICogQHNlZSBld2tfdmlld196b29tX2FuaW1hdGVkX21hcmtfc3RvcCgpCisgKiBAc2Vl
IGV3a192aWV3X3pvb21fYW5pbWF0ZWRfbWFya19zdGFydCgpCisgKiBAc2VlIGV3a192aWV3X3pv
b21fYW5pbWF0ZWRfbWFya19lbmQoKQorICovCitFaW5hX0Jvb2wgZXdrX3ZpZXdfem9vbV9hbmlt
YXRlZF9tYXJrX2N1cnJlbnQoRXZhc19PYmplY3QqIG8sIGZsb2F0IHpvb20pCit7CisgICAgRVdL
X1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgc2QtPmFuaW1h
dGVkX3pvb20uem9vbS5jdXJyZW50ID0gem9vbTsKKyAgICByZXR1cm4gRUlOQV9UUlVFOworfQor
CisvKioKKyAqIFVubWFyayBpbnRlcm5hbCB6b29tIGFuaW1hdGlvbiBzdGF0ZS4KKyAqCisgKiBU
aGlzIHplcm8gYWxsIHN0YXJ0LCBlbmQgYW5kIGN1cnJlbnQgdmFsdWVzLgorICoKKyAqIEBwYXJh
bSBvIHZpZXcgb2JqZWN0IHRvIG1hcmsgYXMgYW5pbWF0ZWQgaXMgc3RvcHBlZC4KKyAqCisgKiBA
c2VlIGV3a192aWV3X3pvb21fYW5pbWF0ZWRfbWFya19zdGFydCgpCisgKiBAc2VlIGV3a192aWV3
X3pvb21fYW5pbWF0ZWRfbWFya19lbmQoKQorICogQHNlZSBld2tfdmlld196b29tX2FuaW1hdGVk
X21hcmtfY3VycmVudCgpCisgKiBAc2VlIGV3a192aWV3X3pvb21fd2Vha19zZXQoKQorICovCitF
aW5hX0Jvb2wgZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9tYXJrX3N0b3AoRXZhc19PYmplY3QqIG8p
Cit7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7Cisg
ICAgX2V3a192aWV3X3pvb21fYW5pbWF0ZWRfbWFya19zdG9wKHNkKTsKKyAgICByZXR1cm4gRUlO
QV9UUlVFOworfQorCisvKioKKyAqIFNldCB0aGUgY3VycmVudCB6b29tIGxldmVsIHdoaWxlIGFu
aW1hdGluZy4KKyAqCisgKiBJZiB0aGUgdmlldyB3YXMgYWxyZWFkeSBhbmltYXRpbmcgdG8gYW5v
dGhlciB6b29tLCBpdCB3aWxsIHN0YXJ0CisgKiBmcm9tIGN1cnJlbnQgcG9pbnQgdG8gdGhlIG5l
eHQgcHJvdmlkZWQgem9vbSAoQGEgem9vbSBwYXJhbWV0ZXIpCisgKiBhbmQgZHVyYXRpb24gKEBh
IGR1cmF0aW9uIHBhcmFtZXRlcikuCisgKgorICogVGhpcyBpcyB0aGUgcmVjb21tZW5kZWQgd2F5
IHRvIGRvIHRyYW5zaXRpb25zIGZyb20gb25lIGxldmVsIHRvCisgKiBhbm90aGVyLiBIb3dldmVy
LCBvbmUgbWF5IHdpc2ggdG8gZG8gdGhvc2UgZnJvbSBvdXRzaWRlLCBpbiB0aGF0CisgKiBjYXNl
IHVzZSBld2tfdmlld196b29tX3dlYWtfc2V0KCkgYW5kIGxhdGVyIGNvbnRyb2wgaW50ZXJtZWRp
YXRlCisgKiBzdGF0ZXMgd2l0aCBld2tfdmlld196b29tX2FuaW1hdGVkX21hcmtfY3VycmVudCgp
LAorICogZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9tYXJrX2VuZCgpIGFuZAorICogZXdrX3ZpZXdf
em9vbV9hbmltYXRlZF9tYXJrX3N0b3AoKS4KKyAqCisgKiBAcGFyYW0gbyB2aWV3IG9iamVjdCB0
byBhbmltYXRlLgorICogQHBhcmFtIHpvb20gZmluYWwgem9vbSBsZXZlbCB0byB1c2UuCisgKiBA
cGFyYW0gZHVyYXRpb24gdGltZSBpbiBzZWNvbmRzIHRoZSBhbmltYXRpb24gc2hvdWxkIHRha2Uu
CisgKiBAcGFyYW0gY3ggb2Zmc2V0IGluc2lkZSBvYmplY3QgdGhhdCBkZWZpbmVzIHpvb20gY2Vu
dGVyLiAwIGlzIGxlZnQgc2lkZS4KKyAqIEBwYXJhbSBjeSBvZmZzZXQgaW5zaWRlIG9iamVjdCB0
aGF0IGRlZmluZXMgem9vbSBjZW50ZXIuIDAgaXMgdG9wIHNpZGUuCisgKiBAcmV0dXJuIEBjIEVJ
TkFfVFJVRSBpZiBhbmltYXRpb24gd2lsbCBiZSBzdGFydGVkLCBAYyBFSU5BX0ZBTFNFIGlmIG5v
dAorICogICAgICAgICAgICBiZWNhdXNlIHpvb20gaXMgdG9vIHNtYWxsL2JpZy4KKyAqLworRWlu
YV9Cb29sIGV3a192aWV3X3pvb21fYW5pbWF0ZWRfc2V0KEV2YXNfT2JqZWN0KiBvLCBmbG9hdCB6
b29tLCBmbG9hdCBkdXJhdGlvbiwgRXZhc19Db29yZCBjeCwgRXZhc19Db29yZCBjeSkKK3sKKyAg
ICBkb3VibGUgbm93OworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFf
RkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9G
QUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5hcGksIEVJTkFf
RkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+YXBpLT56b29t
X3dlYWtfc2V0LCBFSU5BX0ZBTFNFKTsKKworICAgIGlmICh6b29tIDwgWk9PTV9NSU4pIHsKKyAg
ICAgICAgV1JOKCJ6b29tIGxldmVsIGlzIDwgJWYgOiAlZiIsIChkb3VibGUpWk9PTV9NSU4sIChk
b3VibGUpem9vbSk7CisgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOworICAgIH0KKyAgICBpZiAo
em9vbSA+IFpPT01fTUFYKSB7CisgICAgICAgIFdSTigiem9vbSBsZXZlbCBpcyA+ICVmIDogJWYi
LCAoZG91YmxlKVpPT01fTUFYLCAoZG91YmxlKXpvb20pOworICAgICAgICByZXR1cm4gRUlOQV9G
QUxTRTsKKyAgICB9CisKKyAgICBpZiAocHJpdi0+YW5pbWF0ZWRfem9vbS5hbmltYXRvcikKKyAg
ICAgICAgcHJpdi0+YW5pbWF0ZWRfem9vbS56b29tLnN0YXJ0ID0gX2V3a192aWV3X3pvb21fYW5p
bWF0ZWRfY3VycmVudChwcml2KTsKKyAgICBlbHNlIHsKKyAgICAgICAgcHJpdi0+YW5pbWF0ZWRf
em9vbS56b29tLnN0YXJ0ID0gZXdrX2ZyYW1lX3pvb21fZ2V0KHNkLT5tYWluX2ZyYW1lKTsKKyAg
ICAgICAgX2V3a192aWV3X3pvb21fYW5pbWF0aW9uX3N0YXJ0KHNkKTsKKyAgICB9CisKKyAgICBp
ZiAoY3ggPCAwKQorICAgICAgICBjeCA9IDA7CisgICAgaWYgKGN5IDwgMCkKKyAgICAgICAgY3kg
PSAwOworCisgICAgbm93ID0gZWNvcmVfbG9vcF90aW1lX2dldCgpOworICAgIHByaXYtPmFuaW1h
dGVkX3pvb20udGltZS5zdGFydCA9IG5vdzsKKyAgICBwcml2LT5hbmltYXRlZF96b29tLnRpbWUu
ZW5kID0gbm93ICsgZHVyYXRpb247CisgICAgcHJpdi0+YW5pbWF0ZWRfem9vbS50aW1lLmR1cmF0
aW9uID0gZHVyYXRpb247CisgICAgcHJpdi0+YW5pbWF0ZWRfem9vbS56b29tLmVuZCA9IHpvb207
CisgICAgcHJpdi0+YW5pbWF0ZWRfem9vbS56b29tLnJhbmdlID0gKHByaXYtPmFuaW1hdGVkX3pv
b20uem9vbS5lbmQgLSBwcml2LT5hbmltYXRlZF96b29tLnpvb20uc3RhcnQpOworICAgIHByaXYt
PmFuaW1hdGVkX3pvb20uY2VudGVyLnggPSBjeDsKKyAgICBwcml2LT5hbmltYXRlZF96b29tLmNl
bnRlci55ID0gY3k7CisgICAgc2QtPmFuaW1hdGVkX3pvb20uem9vbS5jdXJyZW50ID0gcHJpdi0+
YW5pbWF0ZWRfem9vbS56b29tLnN0YXJ0OworICAgIHNkLT5hbmltYXRlZF96b29tLnpvb20uc3Rh
cnQgPSBwcml2LT5hbmltYXRlZF96b29tLnpvb20uc3RhcnQ7CisgICAgc2QtPmFuaW1hdGVkX3pv
b20uem9vbS5lbmQgPSBwcml2LT5hbmltYXRlZF96b29tLnpvb20uZW5kOworCisgICAgcmV0dXJu
IEVJTkFfVFJVRTsKK30KKworLyoqCisgKiBRdWVyeSBpZiB6b29tIGxldmVsIGp1c3QgYXBwbGll
cyB0byB0ZXh0IGFuZCBub3Qgb3RoZXIgZWxlbWVudHMuCisgKgorICogQHBhcmFtIG8gdmlldyB0
byBxdWVyeSBzZXR0aW5nLgorICoKKyAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIGlmIGp1c3QgdGV4
dCBhcmUgc2NhbGVkLCBAYyBFSU5BX0ZBTFNFIG90aGVyd2lzZS4KKyAqLworRWluYV9Cb29sIGV3
a192aWV3X3pvb21fdGV4dF9vbmx5X2dldChjb25zdCBFdmFzX09iamVjdCogbykKK3sKKyAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4g
ZXdrX2ZyYW1lX3pvb21fdGV4dF9vbmx5X2dldChzZC0+bWFpbl9mcmFtZSk7Cit9CisKKy8qKgor
ICogU2V0IGlmIHpvb20gbGV2ZWwganVzdCBhcHBsaWVzIHRvIHRleHQgYW5kIG5vdCBvdGhlciBl
bGVtZW50cy4KKyAqCisgKiBAcGFyYW0gbyB2aWV3IHRvIGNoYW5nZSBzZXR0aW5nLgorICogQHBh
cmFtIHNldHRpbmcgQGMgRUlOQV9UUlVFIGlmIHpvb20gc2hvdWxkIGp1c3QgYmUgYXBwbGllZCB0
byB0ZXh0LgorICoKKyAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIG9uIHN1Y2Nlc3MsIEBjIEVJTkFf
RkFMU0Ugb3RoZXJ3aXNlLgorICovCitFaW5hX0Jvb2wgZXdrX3ZpZXdfem9vbV90ZXh0X29ubHlf
c2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wgc2V0dGluZykKK3sKKyAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gZXdrX2ZyYW1l
X3pvb21fdGV4dF9vbmx5X3NldChzZC0+bWFpbl9mcmFtZSwgc2V0dGluZyk7Cit9CisKKy8qKgor
ICogSGludCBlbmdpbmUgdG8gcHJlLXJlbmRlciByZWdpb24uCisgKgorICogRW5naW5lcyBhbmQg
YmFja2luZyBzdG9yZSBtaWdodCBiZSBhYmxlIHRvIHByZS1yZW5kZXIgcmVnaW9ucyBpbgorICog
b3JkZXIgdG8gc3BlZWQgdXAgem9vbWluZyBvciBzY3JvbGxpbmcgdG8gdGhhdCByZWdpb24uIE5v
dCBhbGwKKyAqIGVuZ2luZXMgbWlnaHQgaW1wbGVtZW50IHRoYXQgYW5kIHRoZXkgd2lsbCByZXR1
cm4gQGMgRUlOQV9GQUxTRQorICogaW4gdGhhdCBjYXNlLgorICoKKyAqIFRoZSBnaXZlbiByZWdp
b24gaXMgYSBoaW50LiBFbmdpbmVzIG1pZ2h0IGRvIGJpZ2dlciBvciBzbWFsbGVyIGFyZWEKKyAq
IHRoYXQgY292ZXJzIHRoYXQgcmVnaW9uLiBQcmUtcmVuZGVyIG1pZ2h0IG5vdCBiZSBpbW1lZGlh
dGUsIGl0IG1heQorICogYmUgcG9zdHBvbmVkIHRvIGEgdGhyZWFkLCBvcGVyYXRlZCBjb29wZXJh
dGl2ZWx5IGluIHRoZSBtYWluIGxvb3AKKyAqIGFuZCBtYXkgYmUgZXZlbiBpZ25vcmVkIG9yIGNh
bmNlbGxlZCBhZnRlcndhcmRzLgorICoKKyAqIE11bHRpcGxlIHJlcXVlc3RzIG1pZ2h0IGJlIHF1
ZXVlZCBieSBlbmdpbmVzLiBPbmUgY2FuIGNsZWFyL2ZvcmdldAorICogYWJvdXQgdGhlbSB3aXRo
IGV3a192aWV3X3ByZV9yZW5kZXJfY2FuY2VsKCkuCisgKgorICogQHBhcmFtIG8gdmlldyB0byBh
c2sgcHJlLXJlbmRlciBvZiBnaXZlbiByZWdpb24uCisgKiBAcGFyYW0geCBhYnNvbHV0ZSBjb29y
ZGluYXRlICgwPWxlZnQpIHRvIHByZS1yZW5kZXIgYXQgem9vbS4KKyAqIEBwYXJhbSB5IGFic29s
dXRlIGNvb3JkaW5hdGUgKDA9dG9wKSB0byBwcmUtcmVuZGVyIGF0IHpvb20uCisgKiBAcGFyYW0g
dyB3aWR0aCB0byBwcmUtcmVuZGVyIHN0YXJ0aW5nIGZyb20gQGEgeCBhdCB6b29tLgorICogQHBh
cmFtIGggaGVpZ2h0IHRvIHByZS1yZW5kZXIgc3RhcnRpbmcgZnJvbSBAYSB5IGF0IHpvb20uCisg
KiBAcGFyYW0gem9vbSBkZXNpcmVkIHpvb20uCisgKgorICogQHJldHVybiBAYyBFSU5BX1RSVUUg
aWYgcmVxdWVzdCB3YXMgYWNjZXB0ZWQsIEBjIEVJTkFfRkFMU0UKKyAqICAgICAgICAgb3RoZXJ3
aXNlIChlcnJvcnMsIHByZS1yZW5kZXIgbm90IHN1cHBvcnRlZCwgZXRjKS4KKyAqCisgKiBAc2Vl
IGV3a192aWV3X3ByZV9yZW5kZXJfY2FuY2VsKCkKKyAqLworRWluYV9Cb29sIGV3a192aWV3X3By
ZV9yZW5kZXJfcmVnaW9uKEV2YXNfT2JqZWN0KiBvLCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQg
eSwgRXZhc19Db29yZCB3LCBFdmFzX0Nvb3JkIGgsIGZsb2F0IHpvb20pCit7CisgICAgRVdLX1ZJ
RVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk5fVkFMKHNkLT5hcGktPnByZV9yZW5kZXJfcmVnaW9uLCBFSU5BX0ZBTFNF
KTsKKyAgICBmbG9hdCBjdXJfem9vbSA9IGV3a19mcmFtZV96b29tX2dldChzZC0+bWFpbl9mcmFt
ZSk7CisgICAgRXZhc19Db29yZCBjdywgY2g7CisKKyAgICBpZiAoY3VyX3pvb20gPCAwLjAwMDAx
KQorICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKKyAgICBpZiAoIWV3a19mcmFtZV9jb250ZW50
c19zaXplX2dldChzZC0+bWFpbl9mcmFtZSwgJmN3LCAmY2gpKQorICAgICAgICByZXR1cm4gRUlO
QV9GQUxTRTsKKworICAgIGN3ICo9IHpvb20gLyBjdXJfem9vbTsKKyAgICBjaCAqPSB6b29tIC8g
Y3VyX3pvb207CisgICAgREJHKCJyZWdpb24gJWQsJWQrJWR4JWQgQCAlZiBjb250ZW50cz0lZHgl
ZCIsIHgsIHksIHcsIGgsIHpvb20sIGN3LCBjaCk7CisKKyAgICBpZiAoeCArIHcgPiBjdykKKyAg
ICAgICAgdyA9IGN3IC0geDsKKworICAgIGlmICh5ICsgaCA+IGNoKQorICAgICAgICBoID0gY2gg
LSB5OworCisgICAgaWYgKHggPCAwKSB7CisgICAgICAgIHcgKz0geDsKKyAgICAgICAgeCA9IDA7
CisgICAgfQorICAgIGlmICh5IDwgMCkgeworICAgICAgICBoICs9IHk7CisgICAgICAgIHkgPSAw
OworICAgIH0KKworICAgIHJldHVybiBzZC0+YXBpLT5wcmVfcmVuZGVyX3JlZ2lvbihzZCwgeCwg
eSwgdywgaCwgem9vbSk7Cit9CisKKy8qKgorICogQ2FuY2VsIChjbGVhcikgcHJldmlvdXMgcHJl
LXJlbmRlciByZXF1ZXN0cy4KKyAqCisgKiBAcGFyYW0gbyB2aWV3IHRvIGNsZWFyIHByZS1yZW5k
ZXIgcmVxdWVzdHMuCisgKi8KK3ZvaWQgZXdrX3ZpZXdfcHJlX3JlbmRlcl9jYW5jZWwoRXZhc19P
YmplY3QqIG8pCit7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCk7CisgICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaS0+cHJlX3JlbmRlcl9jYW5jZWwpOwor
ICAgIHNkLT5hcGktPnByZV9yZW5kZXJfY2FuY2VsKHNkKTsKK30KKworY29uc3QgY2hhciogZXdr
X3ZpZXdfc2V0dGluZ191c2VyX2FnZW50X2dldChjb25zdCBFdmFzX09iamVjdCogbykKK3sKKyAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsKKyAgICBFV0tfVklFV19QUklW
X0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIDApOworICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy51
c2VyX2FnZW50OworfQorCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ191c2VyX2FnZW50X3Nl
dChFdmFzX09iamVjdCogbywgY29uc3QgY2hhciogdXNlcl9hZ2VudCkKK3sKKyAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklW
X0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIGlmIChlaW5hX3N0cmlu
Z3NoYXJlX3JlcGxhY2UoJnByaXYtPnNldHRpbmdzLnVzZXJfYWdlbnQsIHVzZXJfYWdlbnQpKSB7
CisgICAgICAgIFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50RWZsKiBjbGllbnQgPSBzdGF0aWNf
Y2FzdDxXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEVmbCo+KHByaXYtPm1haW5fZnJhbWUtPmxv
YWRlcigpLT5jbGllbnQoKSk7CisgICAgICAgIGNsaWVudC0+c2V0Q3VzdG9tVXNlckFnZW50KFdl
YkNvcmU6OlN0cmluZzo6ZnJvbVVURjgodXNlcl9hZ2VudCkpOworICAgIH0KKyAgICByZXR1cm4g
RUlOQV9UUlVFOworfQorCitjb25zdCBjaGFyKiBld2tfdmlld19zZXR0aW5nX3VzZXJfc3R5bGVz
aGVldF9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCit7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihvLCBzZCwgMCk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBw
cml2LCAwKTsKKyAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MudXNlcl9zdHlsZXNoZWV0OworfQor
CitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ191c2VyX3N0eWxlc2hlZXRfc2V0KEV2YXNfT2Jq
ZWN0KiBvLCBjb25zdCBjaGFyKiB1cmkpCit7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
TihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNk
LCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBpZiAoZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZw
cml2LT5zZXR0aW5ncy51c2VyX3N0eWxlc2hlZXQsIHVyaSkpIHsKKyAgICAgICAgV2ViQ29yZTo6
S1VSTCBrdXJsKFdlYkNvcmU6OktVUkwoKSwgV2ViQ29yZTo6U3RyaW5nOjpmcm9tVVRGOCh1cmkp
KTsKKyAgICAgICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0VXNlclN0eWxlU2hlZXRMb2NhdGlv
bihrdXJsKTsKKyAgICB9CisgICAgcmV0dXJuIEVJTkFfVFJVRTsKK30KKworRWluYV9Cb29sIGV3
a192aWV3X3NldHRpbmdfYXV0b19sb2FkX2ltYWdlc19nZXQoY29uc3QgRXZhc19PYmplY3QqIG8p
Cit7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7Cisg
ICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAg
ICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuYXV0b19sb2FkX2ltYWdlczsKK30KKworRWluYV9Cb29s
IGV3a192aWV3X3NldHRpbmdfYXV0b19sb2FkX2ltYWdlc19zZXQoRXZhc19PYmplY3QqIG8sIEVp
bmFfQm9vbCBhdXRvbWF0aWMpCit7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBz
ZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2
LCBFSU5BX0ZBTFNFKTsKKyAgICBhdXRvbWF0aWMgPSAhIWF1dG9tYXRpYzsKKyAgICBpZiAocHJp
di0+c2V0dGluZ3MuYXV0b19sb2FkX2ltYWdlcyAhPSBhdXRvbWF0aWMpIHsKKyAgICAgICAgcHJp
di0+cGFnZV9zZXR0aW5ncy0+c2V0TG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5KGF1dG9tYXRpYyk7
CisgICAgICAgIHByaXYtPnNldHRpbmdzLmF1dG9fbG9hZF9pbWFnZXMgPSBhdXRvbWF0aWM7Cisg
ICAgfQorICAgIHJldHVybiBFSU5BX1RSVUU7Cit9CisKK0VpbmFfQm9vbCBld2tfdmlld19zZXR0
aW5nX2F1dG9fc2hyaW5rX2ltYWdlc19nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCit7CisgICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJ
RVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4g
cHJpdi0+c2V0dGluZ3MuYXV0b19zaHJpbmtfaW1hZ2VzOworfQorCitFaW5hX0Jvb2wgZXdrX3Zp
ZXdfc2V0dGluZ19hdXRvX3Nocmlua19pbWFnZXNfc2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jv
b2wgYXV0b21hdGljKQoreworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJ
TkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlO
QV9GQUxTRSk7CisgICAgYXV0b21hdGljID0gISFhdXRvbWF0aWM7CisgICAgaWYgKHByaXYtPnNl
dHRpbmdzLmF1dG9fc2hyaW5rX2ltYWdlcyAhPSBhdXRvbWF0aWMpIHsKKyAgICAgICAgcHJpdi0+
cGFnZV9zZXR0aW5ncy0+c2V0U2hyaW5rc1N0YW5kYWxvbmVJbWFnZXNUb0ZpdChhdXRvbWF0aWMp
OworICAgICAgICBwcml2LT5zZXR0aW5ncy5hdXRvX3Nocmlua19pbWFnZXMgPSBhdXRvbWF0aWM7
CisgICAgfQorICAgIHJldHVybiBFSU5BX1RSVUU7Cit9CisKK0VpbmFfQm9vbCBld2tfdmlld19z
ZXR0aW5nX2VuYWJsZV9zY3JpcHRzX2dldChjb25zdCBFdmFzX09iamVjdCogbykKK3sKKyAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklF
V19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIHJldHVybiBw
cml2LT5zZXR0aW5ncy5lbmFibGVfc2NyaXB0czsKK30KKworRWluYV9Cb29sIGV3a192aWV3X3Nl
dHRpbmdfZW5hYmxlX3NjcmlwdHNfc2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wgZW5hYmxl
KQoreworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOwor
ICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7Cisg
ICAgZW5hYmxlID0gISFlbmFibGU7CisgICAgaWYgKHByaXYtPnNldHRpbmdzLmVuYWJsZV9zY3Jp
cHRzICE9IGVuYWJsZSkgeworICAgICAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXRKYXZhU2Ny
aXB0RW5hYmxlZChlbmFibGUpOworICAgICAgICBwcml2LT5zZXR0aW5ncy5lbmFibGVfc2NyaXB0
cyA9IGVuYWJsZTsKKyAgICB9CisgICAgcmV0dXJuIEVJTkFfVFJVRTsKK30KKworRWluYV9Cb29s
IGV3a192aWV3X3NldHRpbmdfZW5hYmxlX3BsdWdpbnNfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBv
KQoreworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOwor
ICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7Cisg
ICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmVuYWJsZV9wbHVnaW5zOworfQorCitFaW5hX0Jvb2wg
ZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVfcGx1Z2luc19zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFf
Qm9vbCBlbmFibGUpCit7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlO
QV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5B
X0ZBTFNFKTsKKyAgICBlbmFibGUgPSAhIWVuYWJsZTsKKyAgICBpZiAocHJpdi0+c2V0dGluZ3Mu
ZW5hYmxlX3BsdWdpbnMgIT0gZW5hYmxlKSB7CisgICAgICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3Mt
PnNldFBsdWdpbnNFbmFibGVkKGVuYWJsZSk7CisgICAgICAgIHByaXYtPnNldHRpbmdzLmVuYWJs
ZV9wbHVnaW5zID0gZW5hYmxlOworICAgIH0KKyAgICByZXR1cm4gRUlOQV9UUlVFOworfQorCitF
aW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19zY3JpcHRzX3dpbmRvd19vcGVuX2dldChjb25zdCBF
dmFzX09iamVjdCogbykKK3sKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBF
SU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJ
TkFfRkFMU0UpOworICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5zY3JpcHRzX3dpbmRvd19vcGVu
OworfQorCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19zY3JpcHRzX3dpbmRvd19vcGVuX3Nl
dChFdmFzX09iamVjdCogbywgRWluYV9Cb29sIGFsbG93KQoreworICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09S
X1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgYWxsb3cgPSAhIWFsbG93OworICAg
IGlmIChwcml2LT5zZXR0aW5ncy5zY3JpcHRzX3dpbmRvd19vcGVuICE9IGFsbG93KSB7CisgICAg
ICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldEphdmFTY3JpcHRDYW5PcGVuV2luZG93c0F1dG9t
YXRpY2FsbHkoYWxsb3cpOworICAgICAgICBwcml2LT5zZXR0aW5ncy5zY3JpcHRzX3dpbmRvd19v
cGVuID0gYWxsb3c7CisgICAgfQorICAgIHJldHVybiBFSU5BX1RSVUU7Cit9CisKK0VpbmFfQm9v
bCBld2tfdmlld19zZXR0aW5nX3Jlc2l6YWJsZV90ZXh0YXJlYXNfZ2V0KGNvbnN0IEV2YXNfT2Jq
ZWN0KiBvKQoreworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFM
U0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxT
RSk7CisgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLnJlc2l6YWJsZV90ZXh0YXJlYXM7Cit9CisK
K0VpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX3Jlc2l6YWJsZV90ZXh0YXJlYXNfc2V0KEV2YXNf
T2JqZWN0KiBvLCBFaW5hX0Jvb2wgZW5hYmxlKQoreworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVS
TihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgZW5hYmxlID0gISFlbmFibGU7CisgICAgaWYg
KHByaXYtPnNldHRpbmdzLnJlc2l6YWJsZV90ZXh0YXJlYXMgIT0gZW5hYmxlKSB7CisgICAgICAg
IHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldFRleHRBcmVhc0FyZVJlc2l6YWJsZShlbmFibGUpOwor
ICAgICAgICBwcml2LT5zZXR0aW5ncy5yZXNpemFibGVfdGV4dGFyZWFzID0gZW5hYmxlOworICAg
IH0KKyAgICByZXR1cm4gRUlOQV9UUlVFOworfQorCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGlu
Z19wcml2YXRlX2Jyb3dzaW5nX2dldChjb25zdCBFdmFzX09iamVjdCogbykKK3sKKyAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19Q
UklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIHJldHVybiBwcml2
LT5zZXR0aW5ncy5wcml2YXRlX2Jyb3dzaW5nOworfQorCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0
dGluZ19wcml2YXRlX2Jyb3dzaW5nX3NldChFdmFzX09iamVjdCogbywgRWluYV9Cb29sIGVuYWJs
ZSkKK3sKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsK
KyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwor
ICAgIGVuYWJsZSA9ICEhZW5hYmxlOworICAgIGlmIChwcml2LT5zZXR0aW5ncy5wcml2YXRlX2Jy
b3dzaW5nICE9IGVuYWJsZSkgeworICAgICAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXRQcml2
YXRlQnJvd3NpbmdFbmFibGVkKGVuYWJsZSk7CisgICAgICAgIHByaXYtPnNldHRpbmdzLnByaXZh
dGVfYnJvd3NpbmcgPSBlbmFibGU7CisgICAgfQorICAgIHJldHVybiBFSU5BX1RSVUU7Cit9CisK
K0VpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2NhcmV0X2Jyb3dzaW5nX2dldChjb25zdCBFdmFz
X09iamVjdCogbykKK3sKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5B
X0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFf
RkFMU0UpOworICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5jYXJldF9icm93c2luZzsKK30KKwor
RWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfY2FyZXRfYnJvd3Npbmdfc2V0KEV2YXNfT2JqZWN0
KiBvLCBFaW5hX0Jvb2wgZW5hYmxlKQoreworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
bywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwg
cHJpdiwgRUlOQV9GQUxTRSk7CisgICAgZW5hYmxlID0gISFlbmFibGU7CisgICAgaWYgKHByaXYt
PnNldHRpbmdzLmNhcmV0X2Jyb3dzaW5nICE9IGVuYWJsZSkgeworICAgICAgICBwcml2LT5wYWdl
X3NldHRpbmdzLT5zZXRDYXJldEJyb3dzaW5nRW5hYmxlZChlbmFibGUpOworICAgICAgICBwcml2
LT5zZXR0aW5ncy5jYXJldF9icm93c2luZyA9IGVuYWJsZTsKKyAgICB9CisgICAgcmV0dXJuIEVJ
TkFfVFJVRTsKK30KKworLyoqCisgKiBHZXQgY3VycmVudCBlbmNvZGluZyBvZiB0aGlzIFZpZXcu
CisgKgorICogQHBhcmFtIG8gVmlldy4KKyAqCisgKiBAcmV0dXJuIEEgcG9pbnRlciB0byBhbiBl
aW5hX3N0cmluc2hhcmUgY29udGFpbmluZyB0aGUgY3VycmVudCBjdXN0b20KKyAqIGVuY29kaW5n
IGZvciBWaWV3IG9iamVjdCBAcGFyYW0gbywgb3IgQGMgMCBpZiBpdCdzIG5vdCBzZXQuCisgKi8K
K2NvbnN0IGNoYXIqIGV3a192aWV3X3NldHRpbmdfZW5jb2RpbmdfY3VzdG9tX2dldChjb25zdCBF
dmFzX09iamVjdCogbykKK3sKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAw
KTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIDApOworICAgIEV2
YXNfT2JqZWN0KiBtYWluX2ZyYW1lID0gZXdrX3ZpZXdfZnJhbWVfbWFpbl9nZXQobyk7CisgICAg
V2ViQ29yZTo6RnJhbWUqIGNvcmVfZnJhbWUgPSBld2tfZnJhbWVfY29yZV9nZXQobWFpbl9mcmFt
ZSk7CisKKyAgICBXZWJDb3JlOjpTdHJpbmcgb3ZlcnJpZGVFbmNvZGluZyA9IGNvcmVfZnJhbWUt
PmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5vdmVycmlkZUVuY29kaW5nKCk7CisKKyAgICBp
ZiAob3ZlcnJpZGVFbmNvZGluZy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAg
ZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZwcml2LT5zZXR0aW5ncy5lbmNvZGluZ19jdXN0b20s
IG92ZXJyaWRlRW5jb2RpbmcudXRmOCgpLmRhdGEoKSk7CisgICAgcmV0dXJuIHByaXYtPnNldHRp
bmdzLmVuY29kaW5nX2N1c3RvbTsKK30KKworLyoqCisgKiBTZXQgZW5jb2Rpbmcgb2YgdGhpcyBW
aWV3IGFuZCByZWxvYWQgcGFnZS4KKyAqCisgKiBAcGFyYW0gbyBWaWV3LgorICogQHBhcmFtIGVu
Y29kaW5nIFRoZSBuZXcgZW5jb2Rpbmcgb3IgQGMgMCB0byByZXN0b3JlIHRoZSBkZWZhdWx0IGVu
Y29kaW5nLgorICoKKyAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIG9uIHN1Y2Nlc3MsIEBjIEVJTkFf
RkFMU0Ugb3RoZXJ3aXNlLgorICovCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19lbmNvZGlu
Z19jdXN0b21fc2V0KEV2YXNfT2JqZWN0KiBvLCBjb25zdCBjaGFyICplbmNvZGluZykKK3sKKyAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tf
VklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIEV2YXNf
T2JqZWN0KiBtYWluX2ZyYW1lID0gZXdrX3ZpZXdfZnJhbWVfbWFpbl9nZXQobyk7CisgICAgV2Vi
Q29yZTo6RnJhbWUqIGNvcmVfZnJhbWUgPSBld2tfZnJhbWVfY29yZV9nZXQobWFpbl9mcmFtZSk7
CitEQkcoIiVzIiwgZW5jb2RpbmcpOworICAgIGVpbmFfc3RyaW5nc2hhcmVfcmVwbGFjZSgmcHJp
di0+c2V0dGluZ3MuZW5jb2RpbmdfY3VzdG9tLCBlbmNvZGluZyk7CisgICAgY29yZV9mcmFtZS0+
bG9hZGVyKCktPnJlbG9hZFdpdGhPdmVycmlkZUVuY29kaW5nKFdlYkNvcmU6OlN0cmluZzo6ZnJv
bVVURjgoZW5jb2RpbmcpKTsKKworICAgIHJldHVybiBFSU5BX1RSVUU7Cit9CisKK2NvbnN0IGNo
YXIqIGV3a192aWV3X3NldHRpbmdfZW5jb2RpbmdfZGVmYXVsdF9nZXQoY29uc3QgRXZhc19PYmpl
Y3QqIG8pCit7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgMCk7CisgICAg
RVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCAwKTsKKyAgICByZXR1cm4gcHJp
di0+c2V0dGluZ3MuZW5jb2RpbmdfZGVmYXVsdDsKK30KKworRWluYV9Cb29sIGV3a192aWV3X3Nl
dHRpbmdfZW5jb2RpbmdfZGVmYXVsdF9zZXQoRXZhc19PYmplY3QqIG8sIGNvbnN0IGNoYXIqIGVu
Y29kaW5nKQoreworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFM
U0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxT
RSk7CisgICAgaWYgKGVpbmFfc3RyaW5nc2hhcmVfcmVwbGFjZSgmcHJpdi0+c2V0dGluZ3MuZW5j
b2RpbmdfZGVmYXVsdCwgZW5jb2RpbmcpKQorICAgICAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5z
ZXREZWZhdWx0VGV4dEVuY29kaW5nTmFtZShXZWJDb3JlOjpTdHJpbmc6OmZyb21VVEY4KGVuY29k
aW5nKSk7CisgICAgcmV0dXJuIEVJTkFfVFJVRTsKK30KKworaW50IGV3a192aWV3X3NldHRpbmdf
Zm9udF9taW5pbXVtX3NpemVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQoreworICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIDApOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09S
X1JFVFVSTihzZCwgcHJpdiwgMCk7CisgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmZvbnRfbWlu
aW11bV9zaXplOworfQorCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19mb250X21pbmltdW1f
c2l6ZV9zZXQoRXZhc19PYmplY3QqIG8sIGludCBzaXplKQoreworICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09S
X1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgaWYgKHByaXYtPnNldHRpbmdzLmZv
bnRfbWluaW11bV9zaXplICE9IHNpemUpIHsKKyAgICAgICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+
c2V0TWluaW11bUZvbnRTaXplKHNpemUpOworICAgICAgICBwcml2LT5zZXR0aW5ncy5mb250X21p
bmltdW1fc2l6ZSA9IHNpemU7CisgICAgfQorICAgIHJldHVybiBFSU5BX1RSVUU7Cit9CisKK2lu
dCBld2tfdmlld19zZXR0aW5nX2ZvbnRfbWluaW11bV9sb2dpY2FsX3NpemVfZ2V0KGNvbnN0IEV2
YXNfT2JqZWN0KiBvKQoreworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIDAp
OworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgMCk7CisgICAgcmV0
dXJuIHByaXYtPnNldHRpbmdzLmZvbnRfbWluaW11bV9sb2dpY2FsX3NpemU7Cit9CisKK0VpbmFf
Qm9vbCBld2tfdmlld19zZXR0aW5nX2ZvbnRfbWluaW11bV9sb2dpY2FsX3NpemVfc2V0KEV2YXNf
T2JqZWN0KiBvLCBpbnQgc2l6ZSkKK3sKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8s
IHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHBy
aXYsIEVJTkFfRkFMU0UpOworICAgIGlmIChwcml2LT5zZXR0aW5ncy5mb250X21pbmltdW1fbG9n
aWNhbF9zaXplICE9IHNpemUpIHsKKyAgICAgICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0TWlu
aW11bUxvZ2ljYWxGb250U2l6ZShzaXplKTsKKyAgICAgICAgcHJpdi0+c2V0dGluZ3MuZm9udF9t
aW5pbXVtX2xvZ2ljYWxfc2l6ZSA9IHNpemU7CisgICAgfQorICAgIHJldHVybiBFSU5BX1RSVUU7
Cit9CisKK2ludCBld2tfdmlld19zZXR0aW5nX2ZvbnRfZGVmYXVsdF9zaXplX2dldChjb25zdCBF
dmFzX09iamVjdCogbykKK3sKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAw
KTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIDApOworICAgIHJl
dHVybiBwcml2LT5zZXR0aW5ncy5mb250X2RlZmF1bHRfc2l6ZTsKK30KKworRWluYV9Cb29sIGV3
a192aWV3X3NldHRpbmdfZm9udF9kZWZhdWx0X3NpemVfc2V0KEV2YXNfT2JqZWN0KiBvLCBpbnQg
c2l6ZSkKK3sKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNF
KTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0Up
OworICAgIGlmIChwcml2LT5zZXR0aW5ncy5mb250X2RlZmF1bHRfc2l6ZSAhPSBzaXplKSB7Cisg
ICAgICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldERlZmF1bHRGb250U2l6ZShzaXplKTsKKyAg
ICAgICAgcHJpdi0+c2V0dGluZ3MuZm9udF9kZWZhdWx0X3NpemUgPSBzaXplOworICAgIH0KKyAg
ICByZXR1cm4gRUlOQV9UUlVFOworfQorCitpbnQgZXdrX3ZpZXdfc2V0dGluZ19mb250X21vbm9z
cGFjZV9zaXplX2dldChjb25zdCBFdmFzX09iamVjdCogbykKK3sKKyAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4o
c2QsIHByaXYsIDApOworICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5mb250X21vbm9zcGFjZV9z
aXplOworfQorCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19mb250X21vbm9zcGFjZV9zaXpl
X3NldChFdmFzX09iamVjdCogbywgaW50IHNpemUpCit7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVU
VVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBpZiAocHJpdi0+c2V0dGluZ3MuZm9udF9t
b25vc3BhY2Vfc2l6ZSAhPSBzaXplKSB7CisgICAgICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNl
dERlZmF1bHRGaXhlZEZvbnRTaXplKHNpemUpOworICAgICAgICBwcml2LT5zZXR0aW5ncy5mb250
X21vbm9zcGFjZV9zaXplID0gc2l6ZTsKKyAgICB9CisgICAgcmV0dXJuIEVJTkFfVFJVRTsKK30K
KworY29uc3QgY2hhciogZXdrX3ZpZXdfc2V0dGluZ19mb250X3N0YW5kYXJkX2dldChjb25zdCBF
dmFzX09iamVjdCogbykKK3sKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAw
KTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIDApOworICAgIHJl
dHVybiBwcml2LT5zZXR0aW5ncy5mb250X3N0YW5kYXJkOworfQorCitFaW5hX0Jvb2wgZXdrX3Zp
ZXdfc2V0dGluZ19mb250X3N0YW5kYXJkX3NldChFdmFzX09iamVjdCogbywgY29uc3QgY2hhciog
ZmFtaWx5KQoreworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFM
U0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxT
RSk7CisgICAgaWYgKGVpbmFfc3RyaW5nc2hhcmVfcmVwbGFjZSgmcHJpdi0+c2V0dGluZ3MuZm9u
dF9zdGFuZGFyZCwgZmFtaWx5KSkgeworICAgICAgICBXZWJDb3JlOjpBdG9taWNTdHJpbmcgcyA9
IFdlYkNvcmU6OlN0cmluZzo6ZnJvbVVURjgoZmFtaWx5KTsKKyAgICAgICAgcHJpdi0+cGFnZV9z
ZXR0aW5ncy0+c2V0U3RhbmRhcmRGb250RmFtaWx5KHMpOworICAgIH0KKyAgICByZXR1cm4gRUlO
QV9UUlVFOworfQorCitjb25zdCBjaGFyKiBld2tfdmlld19zZXR0aW5nX2ZvbnRfY3Vyc2l2ZV9n
ZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCit7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
TihvLCBzZCwgMCk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCAw
KTsKKyAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZm9udF9jdXJzaXZlOworfQorCitFaW5hX0Jv
b2wgZXdrX3ZpZXdfc2V0dGluZ19mb250X2N1cnNpdmVfc2V0KEV2YXNfT2JqZWN0KiBvLCBjb25z
dCBjaGFyKiBmYW1pbHkpCit7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwg
RUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBF
SU5BX0ZBTFNFKTsKKyAgICBpZiAoZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZwcml2LT5zZXR0
aW5ncy5mb250X2N1cnNpdmUsIGZhbWlseSkpIHsKKyAgICAgICAgV2ViQ29yZTo6QXRvbWljU3Ry
aW5nIHMgPSBXZWJDb3JlOjpTdHJpbmc6OmZyb21VVEY4KGZhbWlseSk7CisgICAgICAgIHByaXYt
PnBhZ2Vfc2V0dGluZ3MtPnNldEN1cnNpdmVGb250RmFtaWx5KHMpOworICAgIH0KKyAgICByZXR1
cm4gRUlOQV9UUlVFOworfQorCitjb25zdCBjaGFyKiBld2tfdmlld19zZXR0aW5nX2ZvbnRfZmFu
dGFzeV9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCit7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihvLCBzZCwgMCk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBw
cml2LCAwKTsKKyAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZm9udF9mYW50YXN5OworfQorCitF
aW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19mb250X2ZhbnRhc3lfc2V0KEV2YXNfT2JqZWN0KiBv
LCBjb25zdCBjaGFyKiBmYW1pbHkpCit7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihv
LCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBw
cml2LCBFSU5BX0ZBTFNFKTsKKyAgICBpZiAoZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZwcml2
LT5zZXR0aW5ncy5mb250X2ZhbnRhc3ksIGZhbWlseSkpIHsKKyAgICAgICAgV2ViQ29yZTo6QXRv
bWljU3RyaW5nIHMgPSBXZWJDb3JlOjpTdHJpbmc6OmZyb21VVEY4KGZhbWlseSk7CisgICAgICAg
IHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldEZhbnRhc3lGb250RmFtaWx5KHMpOworICAgIH0KKyAg
ICByZXR1cm4gRUlOQV9UUlVFOworfQorCitjb25zdCBjaGFyKiBld2tfdmlld19zZXR0aW5nX2Zv
bnRfbW9ub3NwYWNlX2dldChjb25zdCBFdmFzX09iamVjdCogbykKK3sKKyAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRV
Uk4oc2QsIHByaXYsIDApOworICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5mb250X21vbm9zcGFj
ZTsKK30KKworRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZm9udF9tb25vc3BhY2Vfc2V0KEV2
YXNfT2JqZWN0KiBvLCBjb25zdCBjaGFyKiBmYW1pbHkpCit7CisgICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1Jf
UkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBpZiAoZWluYV9zdHJpbmdzaGFyZV9y
ZXBsYWNlKCZwcml2LT5zZXR0aW5ncy5mb250X21vbm9zcGFjZSwgZmFtaWx5KSkgeworICAgICAg
ICBXZWJDb3JlOjpBdG9taWNTdHJpbmcgcyA9IFdlYkNvcmU6OlN0cmluZzo6ZnJvbVVURjgoZmFt
aWx5KTsKKyAgICAgICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0Rml4ZWRGb250RmFtaWx5KHMp
OworICAgIH0KKyAgICByZXR1cm4gRUlOQV9UUlVFOworfQorCitjb25zdCBjaGFyKiBld2tfdmll
d19zZXR0aW5nX2ZvbnRfc2VyaWZfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQoreworICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIDApOworICAgIEVXS19WSUVXX1BSSVZfR0VU
X09SX1JFVFVSTihzZCwgcHJpdiwgMCk7CisgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmZvbnRf
c2VyaWY7Cit9CisKK0VpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2ZvbnRfc2VyaWZfc2V0KEV2
YXNfT2JqZWN0KiBvLCBjb25zdCBjaGFyKiBmYW1pbHkpCit7CisgICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1Jf
UkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBpZiAoZWluYV9zdHJpbmdzaGFyZV9y
ZXBsYWNlKCZwcml2LT5zZXR0aW5ncy5mb250X3NlcmlmLCBmYW1pbHkpKSB7CisgICAgICAgIFdl
YkNvcmU6OkF0b21pY1N0cmluZyBzID0gV2ViQ29yZTo6U3RyaW5nOjpmcm9tVVRGOChmYW1pbHkp
OworICAgICAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXRTZXJpZkZvbnRGYW1pbHkocyk7Cisg
ICAgfQorICAgIHJldHVybiBFSU5BX1RSVUU7Cit9CisKK2NvbnN0IGNoYXIqIGV3a192aWV3X3Nl
dHRpbmdfZm9udF9zYW5zX3NlcmlmX2dldChjb25zdCBFdmFzX09iamVjdCogbykKK3sKKyAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsKKyAgICBFV0tfVklFV19QUklWX0dF
VF9PUl9SRVRVUk4oc2QsIHByaXYsIDApOworICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5mb250
X3NhbnNfc2VyaWY7Cit9CisgIAorRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZm9udF9zYW5z
X3NlcmlmX3NldChFdmFzX09iamVjdCogbywgY29uc3QgY2hhciogZmFtaWx5KQoreworICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVX
X1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgaWYgKGVpbmFf
c3RyaW5nc2hhcmVfcmVwbGFjZSgmcHJpdi0+c2V0dGluZ3MuZm9udF9zYW5zX3NlcmlmLCBmYW1p
bHkpKSB7CisgICAgICAgIFdlYkNvcmU6OkF0b21pY1N0cmluZyBzID0gV2ViQ29yZTo6U3RyaW5n
Ojpmcm9tVVRGOChmYW1pbHkpOworICAgICAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXRTYW5z
U2VyaWZGb250RmFtaWx5KHMpOworICAgIH0KKyAgICByZXR1cm4gRUlOQV9UUlVFOworfQorCisv
KioKKyAqIFNpbWlsYXIgdG8gZXZhc19vYmplY3Rfc21hcnRfZGF0YV9nZXQoKSwgYnV0IGRvZXMg
dHlwZSBjaGVja2luZy4KKyAqCisgKiBAcGFyYW0gbyB2aWV3IG9iamVjdCB0byBxdWVyeSBpbnRl
cm5hbCBkYXRhLgorICogQHJldHVybiBpbnRlcm5hbCBkYXRhIG9yIEBjIDAgb24gZXJyb3JzIChp
ZTogaW5jb3JyZWN0IHR5cGUgb2YgQGEgbykuCisgKi8KK0V3a19WaWV3X1NtYXJ0X0RhdGEqIGV3
a192aWV3X3NtYXJ0X2RhdGFfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQoreworICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIDApOworICAgIHJldHVybiBzZDsKK30KKworLyoq
CisgKiBHZXRzIHRoZSBpbnRlcm5hbCBhcnJheSBvZiByZXBhaW50IHJlcXVlc3RzLgorICoKKyAq
IFRoaXMgYXJyYXkgc2hvdWxkIG5vdCBiZSBtb2RpZmllZCBhbnlob3cuIEl0IHNob3VsZCBiZSBw
cm9jZXNzZWQKKyAqIGltbWVkaWF0ZWx5IGFzIGFueSBmdXJ0aGVyIGV3a192aWV3IGNhbGwgbWln
aHQgY2hhbmdlIGl0LCBsaWtlCisgKiB0aG9zZSB0aGF0IGFkZCByZXBhaW50cyBvciBmbHVzaCB0
aGVtLCBzbyBiZSBzdXJlIHRoYXQgeW91ciBjb2RlCisgKiBkb2VzIG5vdCBjYWxsIGFueSBvZiB0
aG9zZSB3aGlsZSB5b3UgcHJvY2VzcyB0aGUgcmVwYWludHMsCisgKiBvdGhlcndpc2UgY29weSB0
aGUgYXJyYXkuCisgKgorICogQHBhcmFtIHByaXYgcHJpdmF0ZSBoYW5kbGUgcG9pbnRlciBvZiB0
aGUgdmlldyB0byBnZXQgcmVwYWludHMuCisgKiBAcGFyYW0gY291bnQgd2hlcmUgdG8gcmV0dXJu
IHRoZSBudW1iZXIgb2YgZWxlbWVudHMgb2YgcmV0dXJuZWQgYXJyYXkuCisgKgorICogQHJldHVy
biByZWZlcmVuY2UgdG8gYXJyYXkgb2YgcmVxdWVzdGVkIHJlcGFpbnRzLgorICoKKyAqIEBub3Rl
IHRoaXMgaXMgbm90IGZvciBnZW5lcmFsIHVzZSBidXQganVzdCBmb3Igc3ViY2xhc3NlcyB0aGF0
IHdhbnQKKyAqICAgICAgIHRvIGRlZmluZSB0aGVpciBvd24gYmFja2luZyBzdG9yZS4KKyAqLwor
Y29uc3QgRWluYV9SZWN0YW5nbGUqIGV3a192aWV3X3JlcGFpbnRzX2dldChjb25zdCBFd2tfVmll
d19Qcml2YXRlX0RhdGEqIHByaXYsIHNpemVfdCogY291bnQpCit7CisgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk5fVkFMKGNvdW50LCAwKTsKKyAgICBpZiAoY291bnQpCisgICAgICAgICpj
b3VudCA9IDA7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHByaXYsIDApOwor
ICAgIGlmIChjb3VudCkKKyAgICAgICAgKmNvdW50ID0gcHJpdi0+cmVwYWludHMuY291bnQ7Cisg
ICAgcmV0dXJuIHByaXYtPnJlcGFpbnRzLmFycmF5OworfQorCisvKioKKyAqIEdldHMgdGhlIGlu
dGVybmFsIGFycmF5IG9mIHNjcm9sbCByZXF1ZXN0cy4KKyAqCisgKiBUaGlzIGFycmF5IHNob3Vs
ZCBub3QgYmUgbW9kaWZpZWQgYW55aG93LiBJdCBzaG91bGQgYmUgcHJvY2Vzc2VkCisgKiBpbW1l
ZGlhdGVseSBhcyBhbnkgZnVydGhlciBld2tfdmlldyBjYWxsIG1pZ2h0IGNoYW5nZSBpdCwgbGlr
ZQorICogdGhvc2UgdGhhdCBhZGQgc2Nyb2xscyBvciBmbHVzaCB0aGVtLCBzbyBiZSBzdXJlIHRo
YXQgeW91ciBjb2RlCisgKiBkb2VzIG5vdCBjYWxsIGFueSBvZiB0aG9zZSB3aGlsZSB5b3UgcHJv
Y2VzcyB0aGUgc2Nyb2xscywKKyAqIG90aGVyd2lzZSBjb3B5IHRoZSBhcnJheS4KKyAqCisgKiBA
cGFyYW0gcHJpdiBwcml2YXRlIGhhbmRsZSBwb2ludGVyIG9mIHRoZSB2aWV3IHRvIGdldCBzY3Jv
bGxzLgorICogQHBhcmFtIGNvdW50IHdoZXJlIHRvIHJldHVybiB0aGUgbnVtYmVyIG9mIGVsZW1l
bnRzIG9mIHJldHVybmVkIGFycmF5LgorICoKKyAqIEByZXR1cm4gcmVmZXJlbmNlIHRvIGFycmF5
IG9mIHJlcXVlc3RlZCBzY3JvbGxzLgorICoKKyAqIEBub3RlIHRoaXMgaXMgbm90IGZvciBnZW5l
cmFsIHVzZSBidXQganVzdCBmb3Igc3ViY2xhc3NlcyB0aGF0IHdhbnQKKyAqICAgICAgIHRvIGRl
ZmluZSB0aGVpciBvd24gYmFja2luZyBzdG9yZS4KKyAqLworY29uc3QgRXdrX1Njcm9sbF9SZXF1
ZXN0KiBld2tfdmlld19zY3JvbGxfcmVxdWVzdHNfZ2V0KGNvbnN0IEV3a19WaWV3X1ByaXZhdGVf
RGF0YSogcHJpdiwgc2l6ZV90KiBjb3VudCkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwoY291bnQsIDApOworICAgIGlmIChjb3VudCkKKyAgICAgICAgKmNvdW50ID0gMDsK
KyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwocHJpdiwgMCk7CisgICAgaWYgKGNv
dW50KQorICAgICAgICAqY291bnQgPSBwcml2LT5zY3JvbGxzLmNvdW50OworICAgIHJldHVybiBw
cml2LT5zY3JvbGxzLmFycmF5OworfQorCisvKioKKyAqIEFkZCBhIG5ldyByZXBhaW50IHJlcXVl
c3QgdG8gcXVldWUuCisgKgorICogVGhlIHJlcGFpbnRzIGFyZSBhc3N1bWVkIHRvIGJlIHJlbGF0
aXZlIHRvIGN1cnJlbnQgdmlld3BvcnQuCisgKgorICogQHBhcmFtIHByaXYgcHJpdmF0ZSBoYW5k
bGUgcG9pbnRlciBvZiB0aGUgdmlldyB0byBhZGQgcmVwYWludCByZXF1ZXN0LgorICogQHBhcmFt
IHggaG9yaXpvbnRhbCBwb3NpdGlvbiByZWxhdGl2ZSB0byBjdXJyZW50IHZpZXcgcG9ydCAoc2Ny
b2xsZWQpLgorICogQHBhcmFtIHkgdmVydGljYWwgcG9zaXRpb24gcmVsYXRpdmUgdG8gY3VycmVu
dCB2aWV3IHBvcnQgKHNjcm9sbGVkKS4KKyAqIEBwYXJhbSB3IHdpZHRoIG9mIGFyZWEgdG8gYmUg
cmVwYWludGVkCisgKiBAcGFyYW0gaCBoZWlnaHQgb2YgYXJlYSB0byBiZSByZXBhaW50ZWQKKyAq
CisgKiBAbm90ZSB0aGlzIGlzIG5vdCBmb3IgZ2VuZXJhbCB1c2UgYnV0IGp1c3QgZm9yIHN1YmNs
YXNzZXMgdGhhdCB3YW50CisgKiAgICAgICB0byBkZWZpbmUgdGhlaXIgb3duIGJhY2tpbmcgc3Rv
cmUuCisgKi8KK3ZvaWQgZXdrX3ZpZXdfcmVwYWludF9hZGQoRXdrX1ZpZXdfUHJpdmF0ZV9EYXRh
KiBwcml2LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgRXZhc19Db29yZCB3LCBFdmFzX0Nv
b3JkIGgpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4ocHJpdik7CisgICAgX2V3
a192aWV3X3JlcGFpbnRfYWRkKHByaXYsIHgsIHksIHcsIGgpOworfQorCisvKioKKyAqIERvIGxh
eW91dCBpZiByZXF1aXJlZCwgYXBwbGllZCByZWN1cnNpdmVseS4KKyAqCisgKiBAcGFyYW0gcHJp
diBwcml2YXRlIGhhbmRsZSBwb2ludGVyIG9mIHRoZSB2aWV3IHRvIGxheW91dC4KKyAqCisgKiBA
bm90ZSB0aGlzIGlzIG5vdCBmb3IgZ2VuZXJhbCB1c2UgYnV0IGp1c3QgZm9yIHN1YmNsYXNzZXMg
dGhhdCB3YW50CisgKiAgICAgICB0byBkZWZpbmUgdGhlaXIgb3duIGJhY2tpbmcgc3RvcmUuCisg
Ki8KK3ZvaWQgZXdrX3ZpZXdfbGF5b3V0X2lmX25lZWRlZF9yZWN1cnNpdmUoRXdrX1ZpZXdfUHJp
dmF0ZV9EYXRhKiBwcml2KQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHByaXYp
OworCisgICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2ID0gcHJpdi0+bWFpbl9mcmFtZS0+dmlldygp
OworICAgIGlmICghdikgeworICAgICAgICBFUlIoIm5vIG1haW4gZnJhbWUgdmlldyIpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIHYtPmxheW91dElmTmVlZGVkUmVjdXJzaXZlKCk7Cit9
CisKK3ZvaWQgZXdrX3ZpZXdfc2Nyb2xsc19wcm9jZXNzKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNk
KQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkKTsKKyAgICBFV0tfVklFV19Q
UklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYpOworICAgIGlmICghc2QtPmFwaS0+c2Nyb2xsc19w
cm9jZXNzKHNkKSkKKyAgICAgICAgRVJSKCJmYWlsZWQgdG8gcHJvY2VzcyBzY3JvbGxzLiIpOwor
ICAgIF9ld2tfdmlld19zY3JvbGxzX2ZsdXNoKHByaXYpOworfQorCitzdHJ1Y3QgX0V3a19WaWV3
X1BhaW50X0NvbnRleHQgeworICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCogZ2M7CisgICAg
V2ViQ29yZTo6RnJhbWVWaWV3KiB2aWV3OworICAgIGNhaXJvX3QqIGNyOworfTsKKworLyoqCisg
KiBDcmVhdGUgYSBuZXcgcGFpbnQgY29udGV4dCB1c2luZyB0aGUgdmlldyBhcyBzb3VyY2UgYW5k
IGNhaXJvIGFzIG91dHB1dC4KKyAqCisgKiBAcGFyYW0gcHJpdiBwcml2YXRlIGhhbmRsZSBwb2lu
dGVyIG9mIHRoZSB2aWV3IHRvIHVzZSBhcyBwYWludCBzb3VyY2UuCisgKiBAcGFyYW0gY3IgY2Fp
cm8gY29udGV4dCB0byB1c2UgYXMgcGFpbnQgZGVzdGluYXRpb24uIEEgbmV3CisgKiAgICAgICAg
cmVmZXJlbmNlIGlzIHRha2VuLCBzbyBpdCdzIHNhZmUgdG8gY2FsbCBjYWlyb19kZXN0cm95KCkK
KyAqICAgICAgICBhZnRlciB0aGlzIGZ1bmN0aW9uIHJldHVybnMuCisgKgorICogQHJldHVybiBu
ZXdseSBhbGxvY2F0ZWQgaW5zdGFuY2Ugb3IgQGMgMCBvbiBlcnJvcnMuCisgKgorICogQG5vdGUg
dGhpcyBpcyBub3QgZm9yIGdlbmVyYWwgdXNlIGJ1dCBqdXN0IGZvciBzdWJjbGFzc2VzIHRoYXQg
d2FudAorICogICAgICAgdG8gZGVmaW5lIHRoZWlyIG93biBiYWNraW5nIHN0b3JlLgorICovCitF
d2tfVmlld19QYWludF9Db250ZXh0KiBld2tfdmlld19wYWludF9jb250ZXh0X25ldyhFd2tfVmll
d19Qcml2YXRlX0RhdGEqIHByaXYsIGNhaXJvX3QqIGNyKQoreworICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOX1ZBTChwcml2LCAwKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tl9WQUwoY3IsIDApOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChwcml2LT5t
YWluX2ZyYW1lLCAwKTsKKyAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBwcml2LT5tYWlu
X2ZyYW1lLT52aWV3KCk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHZpZXcs
IDApOworICAgIEV3a19WaWV3X1BhaW50X0NvbnRleHQqIGN0eHQgPSAoRXdrX1ZpZXdfUGFpbnRf
Q29udGV4dCopbWFsbG9jKHNpemVvZigqY3R4dCkpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTChjdHh0LCAwKTsKKworICAgIGN0eHQtPmdjID0gbmV3IFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dChjcik7CisgICAgaWYgKCFjdHh0LT5nYykgeworICAgICAgICBmcmVlKGN0eHQp
OworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgY3R4dC0+dmlldyA9IHZpZXc7CisgICAg
Y3R4dC0+Y3IgPSBjYWlyb19yZWZlcmVuY2UoY3IpOworICAgIHJldHVybiBjdHh0OworfQorCisv
KioKKyAqIERlc3Ryb3kgcHJldmlvdXNseSBjcmVhdGVkIHBhaW50IGNvbnRleHQuCisgKgorICog
QHBhcmFtIGN0eHQgcGFpbnQgY29udGV4dCB0byBkZXN0cm95LiBNdXN0IEBiIG5vdCBiZSBAYyAw
LgorICoKKyAqIEBub3RlIHRoaXMgaXMgbm90IGZvciBnZW5lcmFsIHVzZSBidXQganVzdCBmb3Ig
c3ViY2xhc3NlcyB0aGF0IHdhbnQKKyAqICAgICAgIHRvIGRlZmluZSB0aGVpciBvd24gYmFja2lu
ZyBzdG9yZS4KKyAqLwordm9pZCBld2tfdmlld19wYWludF9jb250ZXh0X2ZyZWUoRXdrX1ZpZXdf
UGFpbnRfQ29udGV4dCogY3R4dCkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihj
dHh0KTsKKyAgICBkZWxldGUgY3R4dC0+Z2M7CisgICAgY2Fpcm9fZGVzdHJveShjdHh0LT5jcik7
CisgICAgZnJlZShjdHh0KTsKK30KKworLyoqCisgKiBTYXZlIChwdXNoIHRvIHN0YWNrKSBwYWlu
dCBjb250ZXh0IHN0YXR1cy4KKyAqCisgKiBAcGFyYW0gY3R4dCBwYWludCBjb250ZXh0IHRvIHNh
dmUuIE11c3QgQGIgbm90IGJlIEBjIDAuCisgKgorICogQHNlZSBld2tfdmlld19wYWludF9jb250
ZXh0X3Jlc3RvcmUoKQorICoKKyAqIEBub3RlIHRoaXMgaXMgbm90IGZvciBnZW5lcmFsIHVzZSBi
dXQganVzdCBmb3Igc3ViY2xhc3NlcyB0aGF0IHdhbnQKKyAqICAgICAgIHRvIGRlZmluZSB0aGVp
ciBvd24gYmFja2luZyBzdG9yZS4KKyAqLwordm9pZCBld2tfdmlld19wYWludF9jb250ZXh0X3Nh
dmUoRXdrX1ZpZXdfUGFpbnRfQ29udGV4dCogY3R4dCkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTihjdHh0KTsKKyAgICBjYWlyb19zYXZlKGN0eHQtPmNyKTsKKyAgICBjdHh0LT5n
Yy0+c2F2ZSgpOworfQorCisvKioKKyAqIFJlc3RvcmUgKHBvcCBmcm9tIHN0YWNrKSBwYWludCBj
b250ZXh0IHN0YXR1cy4KKyAqCisgKiBAcGFyYW0gY3R4dCBwYWludCBjb250ZXh0IHRvIHJlc3Rv
cmUuIE11c3QgQGIgbm90IGJlIEBjIDAuCisgKgorICogQHNlZSBld2tfdmlld19wYWludF9jb250
ZXh0X3NhdmUoKQorICoKKyAqIEBub3RlIHRoaXMgaXMgbm90IGZvciBnZW5lcmFsIHVzZSBidXQg
anVzdCBmb3Igc3ViY2xhc3NlcyB0aGF0IHdhbnQKKyAqICAgICAgIHRvIGRlZmluZSB0aGVpciBv
d24gYmFja2luZyBzdG9yZS4KKyAqLwordm9pZCBld2tfdmlld19wYWludF9jb250ZXh0X3Jlc3Rv
cmUoRXdrX1ZpZXdfUGFpbnRfQ29udGV4dCogY3R4dCkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTihjdHh0KTsKKyAgICBjdHh0LT5nYy0+cmVzdG9yZSgpOworICAgIGNhaXJvX3Jl
c3RvcmUoY3R4dC0+Y3IpOworfQorCisvKioKKyAqIENsaXAgcGFpbnQgY29udGV4dCBkcmF3aW5n
cyB0byBnaXZlbiBhcmVhLgorICoKKyAqIEBwYXJhbSBjdHh0IHBhaW50IGNvbnRleHQgdG8gY2xp
cC4gTXVzdCBAYiBub3QgYmUgQGMgMC4KKyAqIEBwYXJhbSBhcmVhIGNsaXAgYXJlYSB0byB1c2Uu
CisgKgorICogQHNlZSBld2tfdmlld19wYWludF9jb250ZXh0X3NhdmUoKQorICogQHNlZSBld2tf
dmlld19wYWludF9jb250ZXh0X3Jlc3RvcmUoKQorICoKKyAqIEBub3RlIHRoaXMgaXMgbm90IGZv
ciBnZW5lcmFsIHVzZSBidXQganVzdCBmb3Igc3ViY2xhc3NlcyB0aGF0IHdhbnQKKyAqICAgICAg
IHRvIGRlZmluZSB0aGVpciBvd24gYmFja2luZyBzdG9yZS4KKyAqLwordm9pZCBld2tfdmlld19w
YWludF9jb250ZXh0X2NsaXAoRXdrX1ZpZXdfUGFpbnRfQ29udGV4dCogY3R4dCwgY29uc3QgRWlu
YV9SZWN0YW5nbGUqIGFyZWEpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oY3R4
dCk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oYXJlYSk7CisgICAgY3R4dC0+Z2Mt
PmNsaXAoV2ViQ29yZTo6SW50UmVjdChhcmVhLT54LCBhcmVhLT55LCBhcmVhLT53LCBhcmVhLT5o
KSk7Cit9CisKKy8qKgorICogUGFpbnQgdXNpbmcgY29udGV4dCB1c2luZyBnaXZlbiBhcmVhLgor
ICoKKyAqIEBwYXJhbSBjdHh0IHBhaW50IGNvbnRleHQgdG8gcGFpbnQuIE11c3QgQGIgbm90IGJl
IEBjIDAuCisgKiBAcGFyYW0gYXJlYSBwYWludCBhcmVhIHRvIHVzZS4gQ29vcmRpbmF0ZXMgYXJl
IHJlbGF0aXZlIHRvIGN1cnJlbnQgdmlld3BvcnQsCisgKiAgICAgICAgdGh1cyAic2Nyb2xsZWQi
LgorICoKKyAqIEBub3RlIG9uZSBtYXkgdXNlIGNhaXJvIGZ1bmN0aW9ucyBvbiB0aGUgY2Fpcm8g
Y29udGV4dCB0bworICogICAgICAgdHJhbnNsYXRlLCBzY2FsZSBvciBhbnkgbW9kaWZpY2F0aW9u
IHRoYXQgbWF5IGZpdCBoaXMgZGVzaXJlcy4KKyAqCisgKiBAc2VlIGV3a192aWV3X3BhaW50X2Nv
bnRleHRfY2xpcCgpCisgKiBAc2VlIGV3a192aWV3X3BhaW50X2NvbnRleHRfcGFpbnRfY29udGVu
dHMoKQorICoKKyAqIEBub3RlIHRoaXMgaXMgbm90IGZvciBnZW5lcmFsIHVzZSBidXQganVzdCBm
b3Igc3ViY2xhc3NlcyB0aGF0IHdhbnQKKyAqICAgICAgIHRvIGRlZmluZSB0aGVpciBvd24gYmFj
a2luZyBzdG9yZS4KKyAqLwordm9pZCBld2tfdmlld19wYWludF9jb250ZXh0X3BhaW50KEV3a19W
aWV3X1BhaW50X0NvbnRleHQqIGN0eHQsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlKiBhcmVhKQorewor
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGN0eHQpOworICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOKGFyZWEpOworCisgICAgV2ViQ29yZTo6SW50UmVjdCByZWN0KGFyZWEtPngs
IGFyZWEtPnksIGFyZWEtPncsIGFyZWEtPmgpOworCisgICAgaWYgKGN0eHQtPnZpZXctPmlzVHJh
bnNwYXJlbnQoKSkKKyAgICAgICAgY3R4dC0+Z2MtPmNsZWFyUmVjdChyZWN0KTsKKyAgICBjdHh0
LT52aWV3LT5wYWludChjdHh0LT5nYywgcmVjdCk7Cit9CisKKy8qKgorICogUGFpbnQganVzdCBj
b250ZW50cyB1c2luZyBjb250ZXh0IHVzaW5nIGdpdmVuIGFyZWEuCisgKgorICogVW5saWtlIGV3
a192aWV3X3BhaW50X2NvbnRleHRfcGFpbnQoKSwgdGhpcyBmdW5jdGlvbiBwYWludCBqdXN0Cisg
KiBiYXJlIGNvbnRlbnRzIGFuZCBpZ25vcmVzIGFueSBzY3JvbGxpbmcsIHNjcm9sbGJhcnMgYW5k
IGV4dHJhcy4gSXQKKyAqIHdpbGwgd2FsayB0aGUgcmVuZGVyaW5nIHRyZWUgYW5kIHBhaW50IGNv
bnRlbnRzIGluc2lkZSB0aGUgZ2l2ZW4KKyAqIGFyZWEgdG8gdGhlIGNhaXJvIGNvbnRleHQgc3Bl
Y2lmaWVkIGluIEBhIGN0eHQuCisgKgorICogQHBhcmFtIGN0eHQgcGFpbnQgY29udGV4dCB0byBw
YWludC4gTXVzdCBAYiBub3QgYmUgQGMgMC4KKyAqIEBwYXJhbSBhcmVhIHBhaW50IGFyZWEgdG8g
dXNlLiBDb29yZGluYXRlcyBhcmUgYWJzb2x1dGUgdG8gcGFnZS4KKyAqCisgKiBAbm90ZSBvbmUg
bWF5IHVzZSBjYWlybyBmdW5jdGlvbnMgb24gdGhlIGNhaXJvIGNvbnRleHQgdG8KKyAqICAgICAg
IHRyYW5zbGF0ZSwgc2NhbGUgb3IgYW55IG1vZGlmaWNhdGlvbiB0aGF0IG1heSBmaXQgaGlzIGRl
c2lyZXMuCisgKgorICogQHNlZSBld2tfdmlld19wYWludF9jb250ZXh0X2NsaXAoKQorICogQHNl
ZSBld2tfdmlld19wYWludF9jb250ZXh0X3BhaW50KCkKKyAqCisgKiBAbm90ZSB0aGlzIGlzIG5v
dCBmb3IgZ2VuZXJhbCB1c2UgYnV0IGp1c3QgZm9yIHN1YmNsYXNzZXMgdGhhdCB3YW50CisgKiAg
ICAgICB0byBkZWZpbmUgdGhlaXIgb3duIGJhY2tpbmcgc3RvcmUuCisgKi8KK3ZvaWQgZXdrX3Zp
ZXdfcGFpbnRfY29udGV4dF9wYWludF9jb250ZW50cyhFd2tfVmlld19QYWludF9Db250ZXh0KiBj
dHh0LCBjb25zdCBFaW5hX1JlY3RhbmdsZSogYXJlYSkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTihjdHh0KTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihhcmVhKTsK
KworICAgIFdlYkNvcmU6OkludFJlY3QgcmVjdChhcmVhLT54LCBhcmVhLT55LCBhcmVhLT53LCBh
cmVhLT5oKTsKKworICAgIGlmIChjdHh0LT52aWV3LT5pc1RyYW5zcGFyZW50KCkpCisgICAgICAg
IGN0eHQtPmdjLT5jbGVhclJlY3QocmVjdCk7CisKKyAgICBjdHh0LT52aWV3LT5wYWludENvbnRl
bnRzKGN0eHQtPmdjLCByZWN0KTsKK30KKworLyoqCisgKiBTY2FsZSB0aGUgY29udGVudHMgYnkg
dGhlIGdpdmVuIGZhY3RvcnMuCisgKgorICogVGhpcyBmdW5jdGlvbiBhcHBsaWVzIGEgc2NhbGlu
ZyB0cmFuc2Zvcm1hdGlvbiB1c2luZyBDYWlyby4KKyAqCisgKiBAcGFyYW0gY3R4dCAgICBwYWlu
dCBjb250ZXh0IHRvIHBhaW50LiBNdXN0IEBiIG5vdCBiZSBAYyAwLgorICogQHBhcmFtIHNjYWxl
X3ggc2NhbGUgZmFjdG9yIGZvciB0aGUgWCBkaW1lbnNpb24uCisgKiBAcGFyYW0gc2NhbGVfeSBz
Y2FsZSBmYWN0b3IgZm9yIHRoZSBZIGRpbWVuc2lvbi4KKyAqLwordm9pZCBld2tfdmlld19wYWlu
dF9jb250ZXh0X3NjYWxlKEV3a19WaWV3X1BhaW50X0NvbnRleHQqIGN0eHQsIGZsb2F0IHNjYWxl
X3gsIGZsb2F0IHNjYWxlX3kpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oY3R4
dCk7CisKKyAgICBjdHh0LT5nYy0+c2NhbGUoV2ViQ29yZTo6RmxvYXRTaXplKHNjYWxlX3gsIHNj
YWxlX3kpKTsKK30KKworLyoqCisgKiBQZXJmb3JtcyBhIHRyYW5zbGF0aW9uIG9mIHRoZSBvcmln
aW4gY29vcmRpbmF0ZXMuCisgKgorICogVGhpcyBmdW5jdGlvbiBtb3ZlcyB0aGUgb3JpZ2luIGNv
b3JkaW5hdGVzIGJ5IEBwIHggYW5kIEBwIHkgcGl4ZWxzLgorICoKKyAqIEBwYXJhbSBjdHh0IHBh
aW50IGNvbnRleHQgdG8gcGFpbnQuIE11c3QgQGIgbm90IGJlIEBjIDAuCisgKiBAcGFyYW0geCAg
ICBhbW91bnQgb2YgcGl4ZWxzIHRvIHRyYW5zbGF0ZSBpbiB0aGUgWCBkaW1lbnNpb24uCisgKiBA
cGFyYW0geSAgICBhbW91bnQgb2YgcGl4ZWxzIHRvIHRyYW5zbGF0ZSBpbiB0aGUgWSBkaW1lbnNp
b24uCisgKi8KK3ZvaWQgZXdrX3ZpZXdfcGFpbnRfY29udGV4dF90cmFuc2xhdGUoRXdrX1ZpZXdf
UGFpbnRfQ29udGV4dCogY3R4dCwgZmxvYXQgeCwgZmxvYXQgeSkKK3sKKyAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTihjdHh0KTsKKworICAgIGN0eHQtPmdjLT50cmFuc2xhdGUoeCwgeSk7
Cit9CisKKy8qKgorICogUGFpbnQgdXNpbmcgZ2l2ZW4gZ3JhcGhpY3MgY29udGV4dCB0aGUgZ2l2
ZW4gYXJlYS4KKyAqCisgKiBUaGlzIHVzZXMgdmlld3BvcnQgcmVsYXRpdmUgYXJlYSBhbmQgd2ls
bCBhbHNvIGhhbmRsZSBzY3JvbGxiYXJzCisgKiBhbmQgb3RoZXIgZXh0cmEgZWxlbWVudHMuIFNl
ZSBld2tfdmlld19wYWludF9jb250ZW50cygpIGZvciB0aGUKKyAqIGFsdGVybmF0aXZlIGZ1bmN0
aW9uLgorICoKKyAqIEBwYXJhbSBwcml2IHByaXZhdGUgaGFuZGxlIHBvaW50ZXIgb2YgdmlldyB0
byB1c2UgYXMgcGFpbnQgc291cmNlLgorICogQHBhcmFtIGNyIGNhaXJvIGNvbnRleHQgdG8gdXNl
IGFzIHBhaW50IGRlc3RpbmF0aW9uLiBJdHMgc3RhdGUgd2lsbAorICogICAgICAgIGJlIHNhdmVk
IGJlZm9yZSBvcGVyYXRpb24gYW5kIHJlc3RvcmVkIGFmdGVyd2FyZHMuCisgKiBAcGFyYW0gYXJl
YSB2aWV3cG9ydCByZWxhdGl2ZSBnZW9tZXRyeSB0byBwYWludC4KKyAqCisgKiBAcmV0dXJuIEBj
IEVJTkFfVFJVRSBvbiBzdWNjZXNzIGFuZCBAYyBFSU5BX0ZBTFNFIG9uIGZhaWx1cmUsIGxpa2UK
KyAqICAgICAgICAgaW5jb3JyZWN0IHBhcmFtZXRlcnMuCisgKgorICogQG5vdGUgdGhpcyBpcyBh
biBlYXN5IHRvIHVzZSB2ZXJzaW9uLCBidXQgaW50ZXJuYWwgc3RydWN0dXJlcyBhcmUKKyAqICAg
ICAgIGFsd2F5cyBjcmVhdGVkLCB0aGVuIGdyYXBoaWNzIGNvbnRleHQgaXMgY2xpcHBlZCwgdGhl
bgorICogICAgICAgcGFpbnRlZCwgcmVzdG9yZWQgYW5kIGRlc3Ryb3llZC4gVGhpcyBtaWdodCBu
b3QgYmUgb3B0aW11bSwKKyAqICAgICAgIHNvIHVzaW5nICNFd2tfVmlld19QYWludF9Db250ZXh0
IG1heSBiZSBhIGJldHRlciBzb2x1dGlvbnMKKyAqICAgICAgIGZvciBsYXJnZSBudW1iZXIgb2Yg
b3BlcmF0aW9ucy4KKyAqCisgKiBAc2VlIGV3a192aWV3X3BhaW50X2NvbnRlbnRzKCkKKyAqIEBz
ZWUgZXdrX3ZpZXdfcGFpbnRfY29udGV4dF9wYWludCgpCisgKgorICogQG5vdGUgdGhpcyBpcyBu
b3QgZm9yIGdlbmVyYWwgdXNlIGJ1dCBqdXN0IGZvciBzdWJjbGFzc2VzIHRoYXQgd2FudAorICog
ICAgICAgdG8gZGVmaW5lIHRoZWlyIG93biBiYWNraW5nIHN0b3JlLgorICovCitFaW5hX0Jvb2wg
ZXdrX3ZpZXdfcGFpbnQoRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBwcml2LCBjYWlyb190KiBjciwg
Y29uc3QgRWluYV9SZWN0YW5nbGUqIGFyZWEpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk5fVkFMKHByaXYsIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOX1ZBTChjciwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5f
VkFMKGFyZWEsIEVJTkFfRkFMU0UpOworICAgIFdlYkNvcmU6OkZyYW1lVmlldyogdmlldyA9IHBy
aXYtPm1haW5fZnJhbWUtPnZpZXcoKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9W
QUwodmlldywgRUlOQV9GQUxTRSk7CisKKyAgICBpZiAodmlldy0+bmVlZHNMYXlvdXQoKSkKKyAg
ICAgICAgdmlldy0+Zm9yY2VMYXlvdXQoKTsKKyAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQg
Z2MoY3IpOworICAgIFdlYkNvcmU6OkludFJlY3QgcmVjdChhcmVhLT54LCBhcmVhLT55LCBhcmVh
LT53LCBhcmVhLT5oKTsKKworICAgIGNhaXJvX3NhdmUoY3IpOworICAgIGdjLnNhdmUoKTsKKyAg
ICBnYy5jbGlwKHJlY3QpOworICAgIGlmICh2aWV3LT5pc1RyYW5zcGFyZW50KCkpCisgICAgICAg
IGdjLmNsZWFyUmVjdChyZWN0KTsKKyAgICB2aWV3LT5wYWludCgmZ2MsICByZWN0KTsKKyAgICBn
Yy5yZXN0b3JlKCk7CisgICAgY2Fpcm9fcmVzdG9yZShjcik7CisKKyAgICByZXR1cm4gRUlOQV9U
UlVFOworfQorCisvKioKKyAqIFBhaW50IGp1c3QgY29udGVudHMgdXNpbmcgZ2l2ZW4gZ3JhcGhp
Y3MgY29udGV4dCB0aGUgZ2l2ZW4gYXJlYS4KKyAqCisgKiBUaGlzIHVzZXMgYWJzb2x1dGUgY29v
cmRpbmF0ZXMgZm9yIGFyZWEgYW5kIHdpbGwganVzdCBoYW5kbGUKKyAqIGNvbnRlbnRzLCBubyBz
Y3JvbGxiYXJzIG9yIGV4dHJhcy4gU2VlIGV3a192aWV3X3BhaW50KCkgZm9yIHRoZQorICogYWx0
ZXJuYXRpdmUgc29sdXRpb24uCisgKgorICogQHBhcmFtIHByaXYgcHJpdmF0ZSBoYW5kbGUgcG9p
bnRlciBvZiB2aWV3IHRvIHVzZSBhcyBwYWludCBzb3VyY2UuCisgKiBAcGFyYW0gY3IgY2Fpcm8g
Y29udGV4dCB0byB1c2UgYXMgcGFpbnQgZGVzdGluYXRpb24uIEl0cyBzdGF0ZSB3aWxsCisgKiAg
ICAgICAgYmUgc2F2ZWQgYmVmb3JlIG9wZXJhdGlvbiBhbmQgcmVzdG9yZWQgYWZ0ZXJ3YXJkcy4K
KyAqIEBwYXJhbSBhcmVhIGFic29sdXRlIGdlb21ldHJ5IHRvIHBhaW50LgorICoKKyAqIEByZXR1
cm4gQGMgRUlOQV9UUlVFIG9uIHN1Y2Nlc3MgYW5kIEBjIEVJTkFfRkFMU0Ugb24gZmFpbHVyZSwg
bGlrZQorICogICAgICAgICBpbmNvcnJlY3QgcGFyYW1ldGVycy4KKyAqCisgKiBAbm90ZSB0aGlz
IGlzIGFuIGVhc3kgdG8gdXNlIHZlcnNpb24sIGJ1dCBpbnRlcm5hbCBzdHJ1Y3R1cmVzIGFyZQor
ICogICAgICAgYWx3YXlzIGNyZWF0ZWQsIHRoZW4gZ3JhcGhpY3MgY29udGV4dCBpcyBjbGlwcGVk
LCB0aGVuCisgKiAgICAgICBwYWludGVkLCByZXN0b3JlZCBhbmQgZGVzdHJveWVkLiBUaGlzIG1p
Z2h0IG5vdCBiZSBvcHRpbXVtLAorICogICAgICAgc28gdXNpbmcgI0V3a19WaWV3X1BhaW50X0Nv
bnRleHQgbWF5IGJlIGEgYmV0dGVyIHNvbHV0aW9ucworICogICAgICAgZm9yIGxhcmdlIG51bWJl
ciBvZiBvcGVyYXRpb25zLgorICoKKyAqIEBzZWUgZXdrX3ZpZXdfcGFpbnQoKQorICogQHNlZSBl
d2tfdmlld19wYWludF9jb250ZXh0X3BhaW50X2NvbnRlbnRzKCkKKyAqCisgKiBAbm90ZSB0aGlz
IGlzIG5vdCBmb3IgZ2VuZXJhbCB1c2UgYnV0IGp1c3QgZm9yIHN1YmNsYXNzZXMgdGhhdCB3YW50
CisgKiAgICAgICB0byBkZWZpbmUgdGhlaXIgb3duIGJhY2tpbmcgc3RvcmUuCisgKi8KK0VpbmFf
Qm9vbCBld2tfdmlld19wYWludF9jb250ZW50cyhFd2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYs
IGNhaXJvX3QqIGNyLCBjb25zdCBFaW5hX1JlY3RhbmdsZSogYXJlYSkKK3sKKyAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwocHJpdiwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk5fVkFMKGNyLCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTl9WQUwoYXJlYSwgRUlOQV9GQUxTRSk7CisgICAgV2ViQ29yZTo6RnJhbWVW
aWV3KiB2aWV3ID0gcHJpdi0+bWFpbl9mcmFtZS0+dmlldygpOworICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOX1ZBTCh2aWV3LCBFSU5BX0ZBTFNFKTsKKworICAgIFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dCBnYyhjcik7CisgICAgV2ViQ29yZTo6SW50UmVjdCByZWN0KGFyZWEtPngsIGFy
ZWEtPnksIGFyZWEtPncsIGFyZWEtPmgpOworCisgICAgY2Fpcm9fc2F2ZShjcik7CisgICAgZ2Mu
c2F2ZSgpOworICAgIGdjLmNsaXAocmVjdCk7CisgICAgaWYgKHZpZXctPmlzVHJhbnNwYXJlbnQo
KSkKKyAgICAgICAgZ2MuY2xlYXJSZWN0KHJlY3QpOworICAgIHZpZXctPnBhaW50Q29udGVudHMo
JmdjLCAgcmVjdCk7CisgICAgZ2MucmVzdG9yZSgpOworICAgIGNhaXJvX3Jlc3RvcmUoY3IpOwor
CisgICAgcmV0dXJuIEVJTkFfVFJVRTsKK30KKworCisvKiBpbnRlcm5hbCBtZXRob2RzICoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyAq
IEBpbnRlcm5hbAorICogUmVwb3J0cyB0aGUgdmlldyBpcyByZWFkeSB0byBiZSBkaXNwbGF5ZWQg
YXMgYWxsIGVsZW1lbnRzIGFyZSBhcmVhZHkuCisgKgorICogRW1pdHMgc2lnbmFsOiAicmVhZHki
IHdpdGggbm8gcGFyYW1ldGVycy4KKyAqLwordm9pZCBld2tfdmlld19yZWFkeShFdmFzX09iamVj
dCogbykKK3sKKyAgICBEQkcoIm89JXAiLCBvKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxs
YmFja19jYWxsKG8sICJyZWFkeSIsIDApOworfQorCisvKioKKyAqIEBpbnRlcm5hbAorICogVGhl
IHZpZXcgdGl0bGUgd2FzIGNoYW5nZWQgYnkgdGhlIGZyYW1lIGxvYWRlci4KKyAqCisgKiBFbWl0
cyBzaWduYWw6ICJ0aXRsZSxjaGFuZ2VkIiB3aXRoIHBvaW50ZXIgdG8gbmV3IHRpdGxlIHN0cmlu
Zy4KKyAqLwordm9pZCBld2tfdmlld190aXRsZV9zZXQoRXZhc19PYmplY3QqIG8sIGNvbnN0IGNo
YXIqIHRpdGxlKQoreworICAgIERCRygibz0lcCwgdGl0bGU9JXMiLCBvLCB0aXRsZSA/IHRpdGxl
IDogIihudWxsKSIpOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwobywgInRp
dGxlLGNoYW5nZWQiLCAodm9pZCopdGl0bGUpOworfQorCisvKioKKyAqIEBpbnRlcm5hbAorICog
UmVwb3J0cyB0aGF0IG1haW4gZnJhbWUncyB1cmkgY2hhbmdlZC4KKyAqCisgKiBFbWl0cyBzaWdu
YWw6ICJ1cmksY2hhbmdlZCIgd2l0aCBwb2ludGVyIHRvIHRoZSBuZXcgdXJpIHN0cmluZy4KKyAq
Lwordm9pZCBld2tfdmlld191cmlfY2hhbmdlZChFdmFzX09iamVjdCogbykKK3sKKyAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkKTsKKyAgICBjb25zdCBjaGFyKiB1cmkgPSBld2tf
ZnJhbWVfdXJpX2dldChzZC0+bWFpbl9mcmFtZSk7CisgICAgREJHKCJvPSVwLCB1cmk9JXMiLCBv
LCB1cmkgPyB1cmkgOiAiKG51bGwpIik7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tf
Y2FsbChvLCAidXJpLGNoYW5nZWQiLCAodm9pZCopdXJpKTsKK30KKworLyoqCisgKiBAaW50ZXJu
YWwKKyAqIFJlcG9ydHMgdGhlIHZpZXcgc3RhcnRlZCBsb2FkaW5nIHNvbWV0aGluZy4KKyAqCisg
KiBAcGFyYW0gbyBWaWV3LgorICoKKyAqIEVtaXRzIHNpZ25hbDogImxvYWQsc3RhcnRlZCIgd2l0
aCBubyBwYXJhbWV0ZXJzLgorICovCit2b2lkIGV3a192aWV3X2xvYWRfc3RhcnRlZChFdmFzX09i
amVjdCogbykKK3sKKyAgICBEQkcoIm89JXAiLCBvKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9j
YWxsYmFja19jYWxsKG8sICJsb2FkLHN0YXJ0ZWQiLCAwKTsKK30KKworLyoqCisgKiBSZXBvcnRz
IHRoZSBmcmFtZSBzdGFydGVkIGxvYWRpbmcgc29tZXRoaW5nLgorICoKKyAqIEBwYXJhbSBvIFZp
ZXcuCisgKgorICogRW1pdHMgc2lnbmFsOiAibG9hZCxzdGFydGVkIiBvbiBtYWluIGZyYW1lIHdp
dGggbm8gcGFyYW1ldGVycy4KKyAqLwordm9pZCBld2tfdmlld19mcmFtZV9tYWluX2xvYWRfc3Rh
cnRlZChFdmFzX09iamVjdCogbykKK3sKKyAgICBEQkcoIm89JXAiLCBvKTsKKyAgICBFdmFzX09i
amVjdCogZnJhbWUgPSBld2tfdmlld19mcmFtZV9tYWluX2dldChvKTsKKyAgICBldmFzX29iamVj
dF9zbWFydF9jYWxsYmFja19jYWxsKGZyYW1lLCAibG9hZCxzdGFydGVkIiwgMCk7Cit9CisKKy8q
KgorICogQGludGVybmFsCisgKiBSZXBvcnRzIHRoZSBtYWluIGZyYW1lIHN0YXJ0ZWQgcHJvdmlz
aW9uYWwgbG9hZC4KKyAqCisgKiBAcGFyYW0gbyBWaWV3LgorICoKKyAqIEVtaXRzIHNpZ25hbDog
ImxvYWQscHJvdmlzaW9uYWwiIG9uIFZpZXcgd2l0aCBubyBwYXJhbWV0ZXJzLgorICovCit2b2lk
IGV3a192aWV3X2xvYWRfcHJvdmlzaW9uYWwoRXZhc19PYmplY3QqIG8pCit7CisgICAgREJHKCJv
PSVwIiwgbyk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChvLCAibG9hZCxw
cm92aXNpb25hbCIsIDApOworfQorCisvKioKKyAqIEBpbnRlcm5hbAorICogUmVwb3J0cyB2aWV3
IGNhbiBiZSBzaG93biBhZnRlciBhIG5ldyB3aW5kb3cgaXMgY3JlYXRlZC4KKyAqCisgKiBAcGFy
YW0gbyBGcmFtZS4KKyAqCisgKiBFbWl0cyBzaWduYWw6ICJsb2FkLG5ld3dpbmRvdyxzaG93IiBv
biB2aWV3IHdpdGggbm8gcGFyYW1ldGVycy4KKyAqLwordm9pZCBld2tfdmlld19sb2FkX3Nob3co
RXZhc19PYmplY3QqIG8pCit7CisgICAgREJHKCJvPSVwIiwgbyk7CisgICAgZXZhc19vYmplY3Rf
c21hcnRfY2FsbGJhY2tfY2FsbChvLCAibG9hZCxuZXd3aW5kb3csc2hvdyIsIDApOworfQorCisK
Ky8qKgorICogQGludGVybmFsCisgKiBSZXBvcnRzIHRoZSBtYWluIGZyYW1lIHdhcyBjbGVhcmVk
LgorICoKKyAqIEBwYXJhbSBvIFZpZXcuCisgKi8KK3ZvaWQgZXdrX3ZpZXdfZnJhbWVfbWFpbl9j
bGVhcmVkKEV2YXNfT2JqZWN0KiBvKQoreworICAgIERCRygibz0lcCIsIG8pOworICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOKHNkLT5hcGktPmZsdXNoKTsKKyAgICBzZC0+YXBpLT5mbHVzaChzZCk7Cit9CisKKy8qKgor
ICogQGludGVybmFsCisgKiBSZXBvcnRzIHRoZSBtYWluIGZyYW1lIHJlY2VpdmVkIGFuIGljb24u
CisgKgorICogQHBhcmFtIG8gVmlldy4KKyAqCisgKiBFbWl0cyBzaWduYWw6ICJpY29uLHJlY2Vp
dmVkIiB3aXRoIG5vIHBhcmFtZXRlcnMuCisgKi8KK3ZvaWQgZXdrX3ZpZXdfZnJhbWVfbWFpbl9p
Y29uX3JlY2VpdmVkKEV2YXNfT2JqZWN0KiBvKQoreworICAgIERCRygibz0lcCIsIG8pOworICAg
IEV2YXNfT2JqZWN0KiBmcmFtZSA9IGV3a192aWV3X2ZyYW1lX21haW5fZ2V0KG8pOworICAgIGV2
YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZnJhbWUsICJpY29uLHJlY2VpdmVkIiwgMCk7
Cit9CisKKy8qKgorICogQGludGVybmFsCisgKiBSZXBvcnRzIGxvYWQgZmluaXNoZWQsIG9wdGlv
bmFsbHkgd2l0aCBlcnJvciBpbmZvcm1hdGlvbi4KKyAqCisgKiBFbWl0cyBzaWduYWw6ICJsb2Fk
LGZpbmlzaGVkIiB3aXRoIHBvaW50ZXIgdG8gI0V3a19GcmFtZV9Mb2FkX0Vycm9yCisgKiBpZiBh
bnkgZXJyb3IsIG9yIEBjIDAgaWYgc3VjY2Vzc2Z1bCBsb2FkLgorICoKKyAqIEBub3RlIHRoZXJl
IHNob3VsZCBub3QgYmUgYW55IGVycm9yIHN0dWZmIGhlcmUsIGJ1dCB0cnlpbmcgdG8gYmUKKyAq
ICAgICAgIGNvbXBhdGlibGUgd2l0aCBwcmV2aW91cyBXZWJLaXQuCisgKi8KK3ZvaWQgZXdrX3Zp
ZXdfbG9hZF9maW5pc2hlZChFdmFzX09iamVjdCogbywgY29uc3QgRXdrX0ZyYW1lX0xvYWRfRXJy
b3IqIGVycm9yKQoreworICAgIERCRygibz0lcCwgZXJyb3I9JXAiLCBvLCBlcnJvcik7CisgICAg
ZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChvLCAibG9hZCxmaW5pc2hlZCIsICh2b2lk
KillcnJvcik7Cit9CisKKy8qKgorICogQGludGVybmFsCisgKiBSZXBvcnRzIGxvYWQgZmFpbGVk
IHdpdGggZXJyb3IgaW5mb3JtYXRpb24uCisgKgorICogRW1pdHMgc2lnbmFsOiAibG9hZCxlcnJv
ciIgd2l0aCBwb2ludGVyIHRvIEV3a19GcmFtZV9Mb2FkX0Vycm9yLgorICovCit2b2lkIGV3a192
aWV3X2xvYWRfZXJyb3IoRXZhc19PYmplY3QqIG8sIGNvbnN0IEV3a19GcmFtZV9Mb2FkX0Vycm9y
KiBlcnJvcikKK3sKKyAgICBEQkcoIm89JXAsIGVycm9yPSVwIiwgbywgZXJyb3IpOworICAgIGV2
YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwobywgImxvYWQsZXJyb3IiLCAodm9pZCopZXJy
b3IpOworfQorCisvKioKKyAqIEBpbnRlcm5hbAorICogUmVwb3J0cyBsb2FkIHByb2dyZXNzIGNo
YW5nZWQuCisgKgorICogRW1pdHMgc2lnbmFsOiAibG9hZCxwcm9ncmVzcyIgd2l0aCBwb2ludGVy
IHRvIGEgZG91YmxlIGZyb20gMC4wIHRvIDEuMC4KKyAqLwordm9pZCBld2tfdmlld19sb2FkX3By
b2dyZXNzX2NoYW5nZWQoRXZhc19PYmplY3QqIG8pCit7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihvLCBzZCk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2
KTsKKworICAgIC8vIEV2YXNfQ29vcmQgdywgaDsKKyAgICBkb3VibGUgcHJvZ3Jlc3MgPSBwcml2
LT5wYWdlLT5wcm9ncmVzcygpLT5lc3RpbWF0ZWRQcm9ncmVzcygpOworCisgICAgREJHKCJvPSVw
IChwPSUwLjNmKSIsIG8sIHByb2dyZXNzKTsKKworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxi
YWNrX2NhbGwobywgImxvYWQscHJvZ3Jlc3MiLCAmcHJvZ3Jlc3MpOworfQorCisvKioKKyAqIEBp
bnRlcm5hbAorICogUmVwb3J0cyB2aWV3IEBwYXJhbSBvIHNob3VsZCBiZSByZXN0b3JlZCB0byBk
ZWZhdWx0IGNvbmRpdGlvbnMKKyAqCisgKiBAcGFyYW0gbyBWaWV3LgorICogQHBhcmFtIGZyYW1l
IEZyYW1lIHRoYXQgb3JpZ2luYXRlZCByZXN0b3JlLgorICoKKyAqIEVtaXRzIHNpZ25hbDogInJl
c3RvcmUiIHdpdGggZnJhbWUuCisgKi8KK3ZvaWQgZXdrX3ZpZXdfcmVzdG9yZV9zdGF0ZShFdmFz
X09iamVjdCogbywgRXZhc19PYmplY3QqIGZyYW1lKQoreworICAgIGV2YXNfb2JqZWN0X3NtYXJ0
X2NhbGxiYWNrX2NhbGwobywgInJlc3RvcmUiLCBmcmFtZSk7Cit9CisKKy8qKgorICogQGludGVy
bmFsCisgKiBEZWxlZ2F0ZXMgdG8gYnJvd3NlciB0aGUgY3JlYXRpb24gb2YgYSBuZXcgd2luZG93
LiBJZiBpdCBpcyBub3QgaW1wbGVtZW50ZWQsCisgKiBjdXJyZW50IHZpZXcgaXMgcmV0dXJuZWQs
IHNvIG5hdmlnYXRpb24gbWlnaHQgY29udGludWUgaW4gc2FtZSB3aW5kb3cuCisgKgorICogQHBh
cmFtIG8gQ3VycmVudCB2aWV3LgorICoKKyAqIEByZXR1cm4gTmV3IHZpZXcsIGluIGNhc2Ugc21h
cnQgY2xhc3MgaW1wbGVtZW50cyB0aGUgY3JlYXRpb24gb2YgbmV3IHdpbmRvd3M7CisgKiBlbHNl
LCBjdXJyZW50IHZpZXcgQHBhcmFtIG8uCisgKi8KK0V2YXNfT2JqZWN0KiBld2tfdmlld193aW5k
b3dfY3JlYXRlKEV2YXNfT2JqZWN0KiBvKQoreworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRV
Uk4obywgc2QsIDApOworCisgICAgaWYgKCFzZC0+YXBpLT53aW5kb3dfY3JlYXRlKQorICAgICAg
ICByZXR1cm4gbzsKKworICAgIHJldHVybiBzZC0+YXBpLT53aW5kb3dfY3JlYXRlKHNkKTsKK30K
KworLyoqCisgKiBAaW50ZXJuYWwKKyAqIFJlcG9ydHMgbW91c2UgaGFzIG1vdmVkIG92ZXIgYSBs
aW5rLgorICoKKyAqIEVtaXRzIHNpZ25hbDogImxpbmssaG92ZXIsaW4iCisgKi8KK3ZvaWQgZXdr
X3ZpZXdfbW91c2VfbGlua19ob3Zlcl9pbihFdmFzX09iamVjdCogbywgdm9pZCogZGF0YSkKK3sK
KyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8sICJsaW5rLGhvdmVyLGluIiwg
ZGF0YSk7Cit9CisKKy8qKgorICogQGludGVybmFsCisgKiBSZXBvcnRzIG1vdXNlIGlzIG5vdCBv
dmVyIGEgbGluayBhbnltb3JlLgorICoKKyAqIEVtaXRzIHNpZ25hbDogImxpbmssaG92ZXIsb3V0
IgorICovCit2b2lkIGV3a192aWV3X21vdXNlX2xpbmtfaG92ZXJfb3V0KEV2YXNfT2JqZWN0KiBv
KQoreworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwobywgImxpbmssaG92ZXIs
b3V0IiwgMCk7Cit9CisKKy8qKgorICogQGludGVybmFsCisgKiBTZXQgdG9vbGJhciB2aXNpYmxl
LgorICoKKyAqIEVtaXRzIHNpZ25hbDogInRvb2xiYXJzLHZpc2libGUsc2V0IiB3aXRoIGEgcG9p
bnRlciB0byBhIGJvb2xlYW4uCisgKi8KK3ZvaWQgZXdrX3ZpZXdfdG9vbGJhcnNfdmlzaWJsZV9z
ZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCB2aXNpYmxlKQoreworICAgIERCRygibz0lcCAo
dmlzaWJsZT0lZCkiLCBvLCAhIXZpc2libGUpOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxi
YWNrX2NhbGwobywgInRvb2xiYXJzLHZpc2libGUsc2V0IiwgJnZpc2libGUpOworfQorCisvKioK
KyAqIEBpbnRlcm5hbAorICogR2V0IHRvb2xiYXIgdmlzaWJpbGl0eS4KKyAqCisgKiBAcGFyYW0g
byBWaWV3LgorICogQHBhcmFtIHZpc2libGUgYm9vbGVhbiBwb2ludGVyIGluIHdoaWNoIHRvIHNh
dmUgdGhlIHJlc3VsdC4gSXQgZGVmYXVsdHMKKyAqIHRvIEBjIEZBTFNFLCBpLmUuIGlmIGJyb3dz
ZXIgZG9lcyBubyBsaXN0ZW4gdG8gZW1pdHRlZCBzaWduYWwsIGl0IG1lYW5zCisgKiB0aGVyZSBh
cmUgbm8gdG9vbGJhcnMgYW5kIHRoZXJlZm9yZSB0aGV5IGFyZSBub3QgdmlzaWJsZS4KKyAqCisg
KiBFbWl0cyBzaWduYWw6ICJ0b29sYmFycyx2aXNpYmxlLGdldCIgd2l0aCBhIHBvaW50ZXIgdG8g
YSBib29sZWFuLgorICovCit2b2lkIGV3a192aWV3X3Rvb2xiYXJzX3Zpc2libGVfZ2V0KEV2YXNf
T2JqZWN0KiBvLCBFaW5hX0Jvb2wqIHZpc2libGUpCit7CisgICAgREJHKCIlcywgbz0lcCIsIF9f
ZnVuY19fLCBvKTsKKyAgICAqdmlzaWJsZSA9IEVJTkFfRkFMU0U7CisgICAgZXZhc19vYmplY3Rf
c21hcnRfY2FsbGJhY2tfY2FsbChvLCAidG9vbGJhcnMsdmlzaWJsZSxnZXQiLCB2aXNpYmxlKTsK
K30KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqIFNldCBzdGF0dXNiYXIgdmlzaWJsZS4KKyAqCisg
KiBAcGFyYW0gbyBWaWV3LgorICogQHBhcmFtIHZpc2libGUgQGMgVFJVRSBpZiBzdGF0dXNiYXIg
YXJlIHZpc2libGUsIEBjIEZBTFNFIG90aGVyd2lzZS4KKyAqCisgKiBFbWl0cyBzaWduYWw6ICJz
dGF0dXNiYXIsdmlzaWJsZSxzZXQiIHdpdGggYSBwb2ludGVyIHRvIGEgYm9vbGVhbi4KKyAqLwor
dm9pZCBld2tfdmlld19zdGF0dXNiYXJfdmlzaWJsZV9zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFf
Qm9vbCB2aXNpYmxlKQoreworICAgIERCRygibz0lcCAodmlzaWJsZT0lZCkiLCBvLCAhIXZpc2li
bGUpOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwobywgInN0YXR1c2Jhcix2
aXNpYmxlLHNldCIsICZ2aXNpYmxlKTsKK30KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqIEdldCBz
dGF0dXNiYXIgdmlzaWJpbGl0eS4KKyAqCisgKiBAcGFyYW0gbyBWaWV3LgorICogQHBhcmFtIHZp
c2libGUgYm9vbGVhbiBwb2ludGVyIGluIHdoaWNoIHRvIHNhdmUgdGhlIHJlc3VsdC4gSXQgZGVm
YXVsdHMKKyAqIHRvIEBjIEZBTFNFLCBpLmUuIGlmIGJyb3dzZXIgZG9lcyBubyBsaXN0ZW4gdG8g
ZW1pdHRlZCBzaWduYWwsIGl0IG1lYW5zCisgKiB0aGVyZSBpcyBubyBzdGF0dXNiYXIgYW5kIHRo
ZXJlZm9yZSBpdCBpcyBub3QgdmlzaWJsZS4KKyAqCisgKiBFbWl0cyBzaWduYWw6ICJzdGF0dXNi
YXIsdmlzaWJsZSxnZXQiIHdpdGggYSBwb2ludGVyIHRvIGEgYm9vbGVhbi4KKyAqLwordm9pZCBl
d2tfdmlld19zdGF0dXNiYXJfdmlzaWJsZV9nZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCog
dmlzaWJsZSkKK3sKKyAgICBEQkcoIiVzLCBvPSVwIiwgX19mdW5jX18sIG8pOworICAgICp2aXNp
YmxlID0gRUlOQV9GQUxTRTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8s
ICJzdGF0dXNiYXIsdmlzaWJsZSxnZXQiLCB2aXNpYmxlKTsKK30KKworLyoqCisgKiBAaW50ZXJu
YWwKKyAqIFNldCB0ZXh0IG9mIHN0YXR1c2JhcgorICoKKyAqIEBwYXJhbSBvIFZpZXcuCisgKiBA
cGFyYW0gdGV4dCBOZXcgdGV4dCB0byBwdXQgb24gc3RhdHVzYmFyLgorICoKKyAqIEVtaXRzIHNp
Z25hbDogInN0YXR1c2Jhcix0ZXh0LHNldCIgd2l0aCBhIHN0cmluZy4KKyAqLwordm9pZCBld2tf
dmlld19zdGF0dXNiYXJfdGV4dF9zZXQoRXZhc19PYmplY3QqIG8sIGNvbnN0IGNoYXIqIHRleHQp
Cit7CisgICAgREJHKCJvPSVwICh0ZXh0PSVzKSIsIG8sIHRleHQpOworICAgIElORigic3RhdHVz
IGJhciB0ZXh0IHNldDogJXMiLCB0ZXh0KTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFj
a19jYWxsKG8sICJzdGF0dXNiYXIsdGV4dCxzZXQiLCAodm9pZCAqKXRleHQpOworfQorCisvKioK
KyAqIEBpbnRlcm5hbAorICogU2V0IHNjcm9sbGJhcnMgdmlzaWJsZS4KKyAqCisgKiBAcGFyYW0g
byBWaWV3LgorICogQHBhcmFtIHZpc2libGUgQGMgVFJVRSBpZiBzY3JvbGxiYXJzIGFyZSB2aXNp
YmxlLCBAYyBGQUxTRSBvdGhlcndpc2UuCisgKgorICogRW1pdHMgc2lnbmFsOiAic2Nyb2xsYmFy
cyx2aXNpYmxlLHNldCIgd2l0aCBhIHBvaW50ZXIgdG8gYSBib29sZWFuLgorICovCit2b2lkIGV3
a192aWV3X3Njcm9sbGJhcnNfdmlzaWJsZV9zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCB2
aXNpYmxlKQoreworICAgIERCRygibz0lcCAodmlzaWJsZT0lZCkiLCBvLCAhIXZpc2libGUpOwor
ICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwobywgInNjcm9sbGJhcnMsdmlzaWJs
ZSxzZXQiLCAmdmlzaWJsZSk7Cit9CisKKy8qKgorICogQGludGVybmFsCisgKiBHZXQgc2Nyb2xs
YmFycyB2aXNpYmlsaXR5LgorICoKKyAqIEBwYXJhbSBvIFZpZXcuCisgKiBAcGFyYW0gdmlzaWJs
ZSBib29sZWFuIHBvaW50ZXIgaW4gd2hpY2ggdG8gc2F2ZSB0aGUgcmVzdWx0LiBJdCBkZWZhdWx0
cworICogdG8gQGMgRkFMU0UsIGkuZS4gaWYgYnJvd3NlciBkb2VzIG5vIGxpc3RlbiB0byBlbWl0
dGVkIHNpZ25hbCwgaXQgbWVhbnMKKyAqIHRoZXJlIGFyZSBubyBzY3JvbGxiYXJzIGFuZCB0aGVy
ZWZvcmUgdGhleSBhcmUgbm90IHZpc2libGUuCisgKgorICogRW1pdHMgc2lnbmFsOiAic2Nyb2xs
YmFycyx2aXNpYmxlLGdldCIgd2l0aCBhIHBvaW50ZXIgdG8gYSBib29sZWFuLgorICovCit2b2lk
IGV3a192aWV3X3Njcm9sbGJhcnNfdmlzaWJsZV9nZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9v
bCogdmlzaWJsZSkKK3sKKyAgICBEQkcoIiVzLCBvPSVwIiwgX19mdW5jX18sIG8pOworICAgICp2
aXNpYmxlID0gRUlOQV9GQUxTRTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxs
KG8sICJzY3JvbGxiYXJzLHZpc2libGUsZ2V0IiwgdmlzaWJsZSk7Cit9CisKKy8qKgorICogQGlu
dGVybmFsCisgKiBTZXQgbWVudWJhciB2aXNpYmxlLgorICoKKyAqIEBwYXJhbSBvIFZpZXcuCisg
KiBAcGFyYW0gdmlzaWJsZSBAYyBUUlVFIGlmIG1lbnViYXIgaXMgdmlzaWJsZSwgQGMgRkFMU0Ug
b3RoZXJ3aXNlLgorICoKKyAqIEVtaXRzIHNpZ25hbDogIm1lbnViYXIsdmlzaWJsZSxzZXQiIHdp
dGggYSBwb2ludGVyIHRvIGEgYm9vbGVhbi4KKyAqLwordm9pZCBld2tfdmlld19tZW51YmFyX3Zp
c2libGVfc2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wgdmlzaWJsZSkKK3sKKyAgICBEQkco
Im89JXAgKHZpc2libGU9JWQpIiwgbywgISF2aXNpYmxlKTsKKyAgICBldmFzX29iamVjdF9zbWFy
dF9jYWxsYmFja19jYWxsKG8sICJtZW51YmFyLHZpc2libGUsc2V0IiwgJnZpc2libGUpOworfQor
CisvKioKKyAqIEBpbnRlcm5hbAorICogR2V0IG1lbnViYXIgdmlzaWJpbGl0eS4KKyAqCisgKiBA
cGFyYW0gbyBWaWV3LgorICogQHBhcmFtIHZpc2libGUgYm9vbGVhbiBwb2ludGVyIGluIHdoaWNo
IHRvIHNhdmUgdGhlIHJlc3VsdC4gSXQgZGVmYXVsdHMKKyAqIHRvIEBjIEZBTFNFLCBpLmUuIGlm
IGJyb3dzZXIgZG9lcyBubyBsaXN0ZW4gdG8gZW1pdHRlZCBzaWduYWwsIGl0IG1lYW5zCisgKiB0
aGVyZSBpcyBubyBtZW51YmFyIGFuZCB0aGVyZWZvcmUgaXQgaXMgbm90IHZpc2libGUuCisgKgor
ICogRW1pdHMgc2lnbmFsOiAibWVudWJhcix2aXNpYmxlLGdldCIgd2l0aCBhIHBvaW50ZXIgdG8g
YSBib29sZWFuLgorICovCit2b2lkIGV3a192aWV3X21lbnViYXJfdmlzaWJsZV9nZXQoRXZhc19P
YmplY3QqIG8sIEVpbmFfQm9vbCogdmlzaWJsZSkKK3sKKyAgICBEQkcoIiVzLCBvPSVwIiwgX19m
dW5jX18sIG8pOworICAgICp2aXNpYmxlID0gRUlOQV9GQUxTRTsKKyAgICBldmFzX29iamVjdF9z
bWFydF9jYWxsYmFja19jYWxsKG8sICJtZW51YmFyLHZpc2libGUsZ2V0IiwgdmlzaWJsZSk7Cit9
CisKKy8qKgorICogQGludGVybmFsCisgKiBTZXQgdG9vbHRpcCB0ZXh0IGFuZCBkaXNwbGF5IGlm
IGl0IGlzIGN1cnJlbnRseSBoaWRkZW4uCisgKgorICogQHBhcmFtIG8gVmlldy4KKyAqIEBwYXJh
bSB0ZXh0IFRleHQgdG8gc2V0IHRvb2x0aXAgdG8uCisgKgorICogRW1pdHMgc2lnbmFsOiAidG9v
bHRpcCx0ZXh0LHNldCIgd2l0aCBhIHN0cmluZy4gSWYgdG9vbHRpcCBtdXN0IGJlIGFjdHVhbGx5
CisgKiByZW1vdmVkLCB0ZXh0IHdpbGwgYmUgMCBvciAnXDAnCisgKi8KK3ZvaWQgZXdrX3ZpZXdf
dG9vbHRpcF90ZXh0X3NldChFdmFzX09iamVjdCogbywgY29uc3QgY2hhciogdGV4dCkKK3sKKyAg
ICBEQkcoIm89JXAgdGV4dD0lcyIsIG8sIHRleHQpOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2Nh
bGxiYWNrX2NhbGwobywgInRvb2x0aXAsdGV4dCxzZXQiLCAodm9pZCAqKXRleHQpOworfQorCisv
KioKKyAqIEBpbnRlcm5hbAorICoKKyAqIEBwYXJhbSBvIFZpZXcuCisgKiBAcGFyYW0gbWVzc2Fn
ZSBTdHJpbmcgdG8gc2hvdyBvbiBjb25zb2xlLgorICogQHBhcmFtIGxpbmVOdW1iZXIgTGluZSBu
dW1iZXIuCisgKiBAc291cmNlSUQgU291cmNlIGlkLgorICoKKyAqLwordm9pZCBld2tfdmlld19h
ZGRfY29uc29sZV9tZXNzYWdlKEV2YXNfT2JqZWN0KiBvLCBjb25zdCBjaGFyKiBtZXNzYWdlLCB1
bnNpZ25lZCBpbnQgbGluZU51bWJlciwgY29uc3QgY2hhciogc291cmNlSUQpCit7CisgICAgREJH
KCJvPSVwIG1lc3NhZ2U9JXMgbGluZU51bWJlcj0ldSBzb3VyY2VJRD0lcyIsIG8sIG1lc3NhZ2Us
IGxpbmVOdW1iZXIsIHNvdXJjZUlEKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8s
IHNkKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpKTsKKyAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpLT5hZGRfY29uc29sZV9tZXNzYWdlKTsKKyAg
ICBzZC0+YXBpLT5hZGRfY29uc29sZV9tZXNzYWdlKHNkLCBtZXNzYWdlLCBsaW5lTnVtYmVyLCBz
b3VyY2VJRCk7Cit9CisKK3ZvaWQgZXdrX3ZpZXdfcnVuX2phdmFzY3JpcHRfYWxlcnQoRXZhc19P
YmplY3QqIG8sIEV2YXNfT2JqZWN0KiBmcmFtZSwgY29uc3QgY2hhciogbWVzc2FnZSkKK3sKKyAg
ICBEQkcoIm89JXAgZnJhbWU9JXAgbWVzc2FnZT0lcyIsIG8sIGZyYW1lLCBtZXNzYWdlKTsKKyAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTihzZC0+YXBpKTsKKworICAgIGlmICghc2QtPmFwaS0+cnVuX2phdmFzY3JpcHRf
YWxlcnQpCisgICAgICAgIHJldHVybjsKKworICAgIHNkLT5hcGktPnJ1bl9qYXZhc2NyaXB0X2Fs
ZXJ0KHNkLCBmcmFtZSwgbWVzc2FnZSk7Cit9CisKK0VpbmFfQm9vbCBld2tfdmlld19ydW5famF2
YXNjcmlwdF9jb25maXJtKEV2YXNfT2JqZWN0KiBvLCBFdmFzX09iamVjdCogZnJhbWUsIGNvbnN0
IGNoYXIqIG1lc3NhZ2UpCit7CisgICAgREJHKCJvPSVwIGZyYW1lPSVwIG1lc3NhZ2U9JXMiLCBv
LCBmcmFtZSwgbWVzc2FnZSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwg
RUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5hcGks
IEVJTkFfRkFMU0UpOworCisgICAgaWYgKCFzZC0+YXBpLT5ydW5famF2YXNjcmlwdF9jb25maXJt
KQorICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKKworICAgIHJldHVybiBzZC0+YXBpLT5ydW5f
amF2YXNjcmlwdF9jb25maXJtKHNkLCBmcmFtZSwgbWVzc2FnZSk7Cit9CisKK0VpbmFfQm9vbCBl
d2tfdmlld19ydW5famF2YXNjcmlwdF9wcm9tcHQoRXZhc19PYmplY3QqIG8sIEV2YXNfT2JqZWN0
KiBmcmFtZSwgY29uc3QgY2hhciogbWVzc2FnZSwgY29uc3QgY2hhciogZGVmYXVsdFZhbHVlLCBj
aGFyKiogdmFsdWUpCit7CisgICAgREJHKCJvPSVwIGZyYW1lPSVwIG1lc3NhZ2U9JXMiLCBvLCBm
cmFtZSwgbWVzc2FnZSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlO
QV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5hcGksIEVJ
TkFfRkFMU0UpOworCisgICAgaWYgKCFzZC0+YXBpLT5ydW5famF2YXNjcmlwdF9wcm9tcHQpCisg
ICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOworCisgICAgcmV0dXJuIHNkLT5hcGktPnJ1bl9qYXZh
c2NyaXB0X3Byb21wdChzZCwgZnJhbWUsIG1lc3NhZ2UsIGRlZmF1bHRWYWx1ZSwgdmFsdWUpOwor
fQorCisvKioKKyAqIEBpbnRlcm5hbAorICogRGVsZWdhdGVzIHRvIGNsaWVudCB0byBkZWNpZGUg
d2hldGhlciBhIHNjcmlwdCBtdXN0IGJlIHN0b3BwZWQgYmVjYXVzZSBpdCdzCisgKiBydW5uaW5n
IGZvciB0b28gbG9uZy4gSWYgY2xpZW50IGRvZXMgbm90IGltcGxlbWVudCBpdCwgaXQgZ29lcyB0
byBkZWZhdWx0CisgKiBpbXBsZW1lbnRhdGlvbiwgd2hpY2ggbG9ncyBhbmQgcmV0dXJucyBFSU5B
X0ZBTFNFLiBDbGllbnQgbWF5IHJlbW92ZSBsb2cgYnkKKyAqIHNldHRpbmcgdGhpcyBmdW5jdGlv
biAwLCB3aGljaCB3aWxsIGp1c3QgcmV0dXJuIEVJTkFfRkFMU0UuCisgKgorICogQHBhcmFtIG8g
Vmlldy4KKyAqCisgKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBpZiBzY3JpcHQgc2hvdWxkIGJlIHN0
b3BwZWQ7IEBjIEVJTkFfRkFMU0Ugb3RoZXJ3aXNlCisgKi8KK0VpbmFfQm9vbCBld2tfdmlld19z
aG91bGRfaW50ZXJydXB0X2phdmFzY3JpcHQoRXZhc19PYmplY3QqIG8pCit7CisgICAgREJHKCJv
PSVwIiwgbyk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxT
RSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5hcGksIEVJTkFfRkFM
U0UpOworCisgICAgaWYgKCFzZC0+YXBpLT5zaG91bGRfaW50ZXJydXB0X2phdmFzY3JpcHQpCisg
ICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOworCisgICAgcmV0dXJuIHNkLT5hcGktPnNob3VsZF9p
bnRlcnJ1cHRfamF2YXNjcmlwdChzZCk7Cit9CisKKy8qKgorICogQGludGVybmFsCisgKiBUaGlz
IGlzIGNhbGxlZCB3aGVuZXZlciB0aGUgd2ViIHNpdGUgc2hvd24gaW4gQHBhcmFtIGZyYW1lIGlz
IGFza2luZyB0byBzdG9yZSBkYXRhCisgKiB0byB0aGUgZGF0YWJhc2UgQHBhcmFtIGRhdGFiYXNl
TmFtZSBhbmQgdGhlIHF1b3RhIGFsbG9jYXRlZCB0byB0aGF0IHdlYiBzaXRlCisgKiBpcyBleGNl
ZWRlZC4gQnJvd3NlciBtYXkgdXNlIHRoaXMgdG8gaW5jcmVhc2UgdGhlIHNpemUgb2YgcXVvdGEg
YmVmb3JlIHRoZQorICogb3JpZ2luYXRpbmcgb3BlcmF0aW9uYSBmYWlscy4KKyAqCisgKiBAcGFy
YW0gbyBWaWV3LgorICogQHBhcmFtIGZyYW1lIFRoZSBmcmFtZSB3aG9zZSB3ZWIgcGFnZSBleGNl
ZWRlZCBpdHMgZGF0YWJhc2UgcXVvdGEuCisgKiBAcGFyYW0gZGF0YWJhc2VOYW1lIERhdGFiYXNl
IG5hbWUuCisgKi8KK3ZvaWQgZXdrX3ZpZXdfZXhjZWVkZWRfZGF0YWJhc2VfcXVvdGEoRXZhc19P
YmplY3QqIG8sIEV2YXNfT2JqZWN0KiBmcmFtZSwgY29uc3QgY2hhciogZGF0YWJhc2VOYW1lKQor
eworICAgIERCRygibz0lcCIsIG8pOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywg
c2QpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGkpOworICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGktPmV4Y2VlZGVkX2RhdGFiYXNlX3F1b3RhKTsK
KyAgICBzZC0+YXBpLT5leGNlZWRlZF9kYXRhYmFzZV9xdW90YShzZCwgZnJhbWUsIGRhdGFiYXNl
TmFtZSk7Cit9CisKKy8qKgorICogQGludGVybmFsCisgKiBPcGVuIHBhbmVsIHRvIGNob29zZSBh
IGZpbGUuCisgKgorICogQHBhcmFtIG8gVmlldy4KKyAqIEBwYXJhbSBmcmFtZSBGcmFtZSBpbiB3
aGljaCBvcGVyYXRpb24gaXMgcmVxdWlyZWQuCisgKiBAcGFyYW0gYWxsb3dzX211bHRpcGxlX2Zp
bGVzIEBjIEVJTkFfVFJVRSB3aGVuIG1vcmUgdGhhbiBvbmUgZmlsZSBtYXkgYmUKKyAqIHNlbGVj
dGVkLCBAYyBFSU5BX0ZBTFNFIG90aGVyd2lzZQorICogQHN1Z2dlc3RlZF9maWxlbmFtZXMgTGlz
dCBvZiBzdWdnZXN0ZWQgZmlsZXMgdG8gc2VsZWN0LiBJdCdzIGFkdmlzYWJsZSB0bworICoganVz
dCBpZ25vcmUgdGhpcyB2YWx1ZSwgc2luY2UgaXQncyBhIHNvdXJjZSBvZiBzZWN1cml0eSBmbGF3
LgorICogQHNlbGVjdGVkX2ZpbGVuYW1lcyBMaXN0IG9mIGZpbGVzIHNlbGVjdGVkLgorICoKKyAq
IEByZXR1cm4gQEVJTkFfRkFMU0UgaWYgdXNlciBjYW5jZWxlZCBmaWxlIHNlbGVjdGlvbjsgQEVJ
TkFfVFJVRSBpZiBjb25maXJtZWQuCisgKi8KK0VpbmFfQm9vbCBld2tfdmlld19ydW5fb3Blbl9w
YW5lbChFdmFzX09iamVjdCogbywgRXZhc19PYmplY3QqIGZyYW1lLCBFaW5hX0Jvb2wgYWxsb3dz
X211bHRpcGxlX2ZpbGVzLCBjb25zdCBFaW5hX0xpc3QqIHN1Z2dlc3RlZF9maWxlbmFtZXMsIEVp
bmFfTGlzdCoqIHNlbGVjdGVkX2ZpbGVuYW1lcykKK3sKKyAgICBEQkcoIm89JXAgZnJhbWU9JXAg
YWxsb3dzX211bHRpcGxlX2ZpbGVzPSVkIiwgbywgZnJhbWUsIGFsbG93c19tdWx0aXBsZV9maWxl
cyk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7Cisg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5hcGksIEVJTkFfRkFMU0UpOwor
ICAgIEVpbmFfQm9vbCBjb25maXJtOworCisgICAgaWYgKCFzZC0+YXBpLT5ydW5fb3Blbl9wYW5l
bCkKKyAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CisKKyAgICAqc2VsZWN0ZWRfZmlsZW5hbWVz
ID0gMDsKKworICAgIGNvbmZpcm0gPSBzZC0+YXBpLT5ydW5fb3Blbl9wYW5lbChzZCwgZnJhbWUs
IGFsbG93c19tdWx0aXBsZV9maWxlcywgc3VnZ2VzdGVkX2ZpbGVuYW1lcywgc2VsZWN0ZWRfZmls
ZW5hbWVzKTsKKyAgICBpZiAoIWNvbmZpcm0gJiYgKnNlbGVjdGVkX2ZpbGVuYW1lcykKKyAgICAg
ICAgRVJSKCJDYW5jZWxlZCBmaWxlIHNlbGVjdGlvbiwgYnV0IHNlbGVjdGVkIGZpbGVuYW1lcyAh
PSAwLiBGcmVlIG5hbWVzIGJlZm9yZSByZXR1cm4uIik7CisgICAgcmV0dXJuIGNvbmZpcm07Cit9
CisKK3ZvaWQgZXdrX3ZpZXdfcmVwYWludChFdmFzX09iamVjdCogbywgRXZhc19Db29yZCB4LCBF
dmFzX0Nvb3JkIHksIEV2YXNfQ29vcmQgdywgRXZhc19Db29yZCBoKQoreworICAgIERCRygibz0l
cCwgcmVnaW9uPSVkLCVkICsgJWR4JWQiLCBvLCB4LCB5LCB3LCBoKTsKKyAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKG8sIHNkKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4o
c2QsIHByaXYpOworCisgICAgaWYgKCFwcml2LT5tYWluX2ZyYW1lLT5jb250ZW50UmVuZGVyZXIo
KSkgeworICAgICAgICBFUlIoIm5vIG1haW4gZnJhbWUgY29udGVudCByZW5kZXJlci4iKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIF9ld2tfdmlld19yZXBhaW50X2FkZChwcml2LCB4
LCB5LCB3LCBoKTsKKyAgICBfZXdrX3ZpZXdfc21hcnRfY2hhbmdlZChzZCk7Cit9CisKK3ZvaWQg
ZXdrX3ZpZXdfc2Nyb2xsKEV2YXNfT2JqZWN0KiBvLCBFdmFzX0Nvb3JkIGR4LCBFdmFzX0Nvb3Jk
IGR5LCBFdmFzX0Nvb3JkIHN4LCBFdmFzX0Nvb3JkIHN5LCBFdmFzX0Nvb3JkIHN3LCBFdmFzX0Nv
b3JkIHNoLCBFdmFzX0Nvb3JkIGN4LCBFdmFzX0Nvb3JkIGN5LCBFdmFzX0Nvb3JkIGN3LCBFdmFz
X0Nvb3JkIGNoLCBFaW5hX0Jvb2wgbWFpbl9mcmFtZSkKK3sKKyAgICBEQkcoIm89JXAsIGRlbHRh
OiAlZCwlZCwgc2Nyb2xsOiAlZCwlZCslZHglZCwgY2xpcDogJWQsJWQrJWR4JWQiLAorICAgICAg
ICBvLCBkeCwgZHksIHN4LCBzeSwgc3csIHNoLCBjeCwgY3ksIGN3LCBjaCk7CisKKyAgICBpZiAo
KHN4ICE9IGN4KSB8fCAoc3kgIT0gY3kpIHx8IChzdyAhPSBjdykgfHwgKHNoICE9IGNoKSkKKyAg
ICAgICAgV1JOKCJzY3JvbGwgcmVnaW9uIGFuZCBjbGlwIGFyZSBkaWZmZXJlbnQhICVkLCVkKyVk
eCVkIGFuZCAlZCwlZCslZHglZCIsCisgICAgICAgICAgICBzeCwgc3ksIHN3LCBzaCwgY3gsIGN5
LCBjdywgY2gpOworCisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCk7CisgICAg
RVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2KTsKKyAgICBFSU5BX1NBRkVUWV9P
Tl9UUlVFX1JFVFVSTighZHggJiYgIWR5KTsKKworICAgIF9ld2tfdmlld19zY3JvbGxfYWRkKHBy
aXYsIGR4LCBkeSwgc3gsIHN5LCBzdywgc2gsIG1haW5fZnJhbWUpOworICAgIF9ld2tfdmlld19z
bWFydF9jaGFuZ2VkKHNkKTsKK30KKworV2ViQ29yZTo6UGFnZSogZXdrX3ZpZXdfY29yZV9wYWdl
X2dldChjb25zdCBFdmFzX09iamVjdCogbykKK3sKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVU
VVJOKG8sIHNkLCAwKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYs
IDApOworICAgIHJldHVybiBwcml2LT5wYWdlOworfQorCisvKioKKyAqIENyZWF0ZXMgYSBuZXcg
ZnJhbWUgZm9yIGdpdmVuIHVybCBhbmQgb3duZXIgZWxlbWVudC4KKyAqCisgKiBFbWl0cyAiZnJh
bWUsY3JlYXRlZCIgd2l0aCB0aGUgbmV3IGZyYW1lIG9iamVjdCBvbiBzdWNjZXNzLgorICovCitX
VEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6RnJhbWU+IGV3a192aWV3X2ZyYW1lX2NyZWF0ZShFdmFz
X09iamVjdCogbywgRXZhc19PYmplY3QqIGZyYW1lLCBjb25zdCBXZWJDb3JlOjpTdHJpbmcmIG5h
bWUsIFdlYkNvcmU6OkhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXJFbGVtZW50LCBjb25zdCBX
ZWJDb3JlOjpLVVJMJiB1cmwsIGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgcmVmZXJyZXIpCit7Cisg
ICAgREJHKCJvPSVwLCBmcmFtZT0lcCwgbmFtZT0lcywgb3duZXJFbGVtZW50PSVwLCB1cmw9JXMs
IHJlZmVycmVyPSVzIiwKKyAgICAgICAgbywgZnJhbWUsIG5hbWUudXRmOCgpLmRhdGEoKSwgb3du
ZXJFbGVtZW50LAorICAgICAgICB1cmwucHJldHR5VVJMKCkudXRmOCgpLmRhdGEoKSwgcmVmZXJy
ZXIudXRmOCgpLmRhdGEoKSk7CisKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNk
LCAwKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIDApOworCisg
ICAgV1RGOjpSZWZQdHI8V2ViQ29yZTo6RnJhbWU+IGNmID0gX2V3a192aWV3X2NvcmVfZnJhbWVf
bmV3CisgICAgICAgIChzZCwgcHJpdiwgb3duZXJFbGVtZW50KTsKKyAgICBpZiAoIWNmKSB7Cisg
ICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBjaGlsZCBjb3JlIGZyYW1lICclcyciLCBuYW1l
LnV0ZjgoKS5kYXRhKCkpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAoIWV3
a19mcmFtZV9jaGlsZF9hZGQoZnJhbWUsIGNmLCBuYW1lLCB1cmwsIHJlZmVycmVyKSkgeworICAg
ICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgY2hpbGQgZnJhbWUgb2JqZWN0ICclcyciLCBuYW1l
LnV0ZjgoKS5kYXRhKCkpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvLyBUaGUg
Y3JlYXRpb24gb2YgdGhlIGZyYW1lIG1heSBoYXZlIHJlbW92ZWQgaXRzZWxmIGFscmVhZHkuCisg
ICAgaWYgKCFjZi0+cGFnZSgpIHx8ICFjZi0+dHJlZSgpIHx8ICFjZi0+dHJlZSgpLT5wYXJlbnQo
KSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBzZC0+Y2hhbmdlZC5mcmFtZV9yZWN0ID0gRUlO
QV9UUlVFOworICAgIF9ld2tfdmlld19zbWFydF9jaGFuZ2VkKHNkKTsKKworICAgIGV2YXNfb2Jq
ZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwobywgImZyYW1lLGNyZWF0ZWQiLCBmcmFtZSk7CisgICAg
cmV0dXJuIGNmLnJlbGVhc2UoKTsKK30KKworV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OldpZGdl
dD4gZXdrX3ZpZXdfcGx1Z2luX2NyZWF0ZShFdmFzX09iamVjdCogbywgRXZhc19PYmplY3QqIGZy
YW1lLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBwbHVnaW5TaXplLCBXZWJDb3JlOjpIVE1MUGx1
Z0luRWxlbWVudCogZWxlbWVudCwgY29uc3QgV2ViQ29yZTo6S1VSTCYgdXJsLCBjb25zdCBXVEY6
OlZlY3RvcjxXZWJDb3JlOjpTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBXVEY6OlZlY3RvcjxX
ZWJDb3JlOjpTdHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBtaW1l
VHlwZSwgYm9vbCBsb2FkTWFudWFsbHkpCit7CisgICAgREJHKCJvPSVwLCBmcmFtZT0lcCwgc2l6
ZT0lZHglZCwgZWxlbWVudD0lcCwgdXJsPSVzLCBtaW1lVHlwZT0lcyIsCisgICAgICAgIG8sIGZy
YW1lLCBwbHVnaW5TaXplLndpZHRoKCksIHBsdWdpblNpemUuaGVpZ2h0KCksIGVsZW1lbnQsCisg
ICAgICAgIHVybC5wcmV0dHlVUkwoKS51dGY4KCkuZGF0YSgpLCBtaW1lVHlwZS51dGY4KCkuZGF0
YSgpKTsKKworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIDApOworICAgIHNk
LT5jaGFuZ2VkLmZyYW1lX3JlY3QgPSBFSU5BX1RSVUU7CisgICAgX2V3a192aWV3X3NtYXJ0X2No
YW5nZWQoc2QpOworCisgICAgcmV0dXJuIGV3a19mcmFtZV9wbHVnaW5fY3JlYXRlCisgICAgICAg
IChmcmFtZSwgcGx1Z2luU2l6ZSwgZWxlbWVudCwgdXJsLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVl
cywKKyAgICAgICAgIG1pbWVUeXBlLCBsb2FkTWFudWFsbHkpOworfQorCisKKy8qKgorICogQGlu
dGVybmFsCisgKgorICogQ3JlYXRlcyBhIG5ldyBwb3B1cCB3aXRoIG9wdGlvbnMgd2hlbiBhIHNl
bGVjdCB3aWRnZXQgd2FzIGNsaWNrZWQuCisgKgorICogQHBhcmFtIGNsaWVudCBQb3B1cE1lbnVD
bGllbnQgaW5zdGFuY2UgdGhhdCBhbGxvd3MgY29tbXVuaWNhdGlvbiB3aXRoIHdlYmtpdC4KKyAq
IEBwYXJhbSBzZWxlY3RlZCBTZWxlY3RlZCBpdGVtLgorICogQHBhcmFtIHJlY3QgTWVudSdzIHBv
c2l0aW9uLgorICoKKyAqIEVtaXRzOiAicG9wdXAsY3JlYXRlIiB3aXRoIGEgbGlzdCBvZiBFd2tf
TWVudSBjb250YWluaW5nIGVhY2ggaXRlbSdzIGRhdGEKKyAqLwordm9pZCBld2tfdmlld19wb3B1
cF9uZXcoRXZhc19PYmplY3QqIG8sIFdlYkNvcmU6OlBvcHVwTWVudUNsaWVudCogY2xpZW50LCBp
bnQgc2VsZWN0ZWQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3QpCit7CisgICAgSU5GKCJv
PSVwIiwgbyk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCk7CisgICAgRVdL
X1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2KTsKKworICAgIGlmIChwcml2LT5wb3B1
cC5tZW51X2NsaWVudCkKKyAgICAgICAgZXdrX3ZpZXdfcG9wdXBfZGVzdHJveShvKTsKKworICAg
IHByaXYtPnBvcHVwLm1lbnVfY2xpZW50ID0gY2xpZW50OworCisgICAgLy8gcG9wdWxhdGUgaXRl
bXMKKyAgICBjb25zdCBpbnQgc2l6ZSA9IGNsaWVudC0+bGlzdFNpemUoKTsKKyAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICBFd2tfTWVudV9JdGVtKiBpdGVtID0g
KEV3a19NZW51X0l0ZW0qKSBtYWxsb2Moc2l6ZW9mKCppdGVtKSk7CisgICAgICAgIGlmIChjbGll
bnQtPml0ZW1Jc1NlcGFyYXRvcihpKSkKKyAgICAgICAgICAgIGl0ZW0tPnR5cGUgPSBFV0tfTUVO
VV9TRVBBUkFUT1I7CisgICAgICAgIGVsc2UgaWYgKGNsaWVudC0+aXRlbUlzTGFiZWwoaSkpCisg
ICAgICAgICAgICBpdGVtLT50eXBlID0gRVdLX01FTlVfR1JPVVA7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIGl0ZW0tPnR5cGUgPSBFV0tfTUVOVV9PUFRJT047CisgICAgICAgIGl0ZW0tPnRl
eHQgPSBlaW5hX3N0cmluZ3NoYXJlX2FkZChjbGllbnQtPml0ZW1UZXh0KGkpLnV0ZjgoKS5kYXRh
KCkpOworCisgICAgICAgIHByaXYtPnBvcHVwLm1lbnUuaXRlbXMgPSBlaW5hX2xpc3RfYXBwZW5k
KHByaXYtPnBvcHVwLm1lbnUuaXRlbXMsIGl0ZW0pOworICAgIH0KKworICAgIHByaXYtPnBvcHVw
Lm1lbnUueCA9IHJlY3QueCgpOworICAgIHByaXYtPnBvcHVwLm1lbnUueSA9IHJlY3QueSgpOwor
ICAgIHByaXYtPnBvcHVwLm1lbnUud2lkdGggPSByZWN0LndpZHRoKCk7CisgICAgcHJpdi0+cG9w
dXAubWVudS5oZWlnaHQgPSByZWN0LmhlaWdodCgpOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2Nh
bGxiYWNrX2NhbGwobywgInBvcHVwLGNyZWF0ZSIsICZwcml2LT5wb3B1cC5tZW51KTsKK30KKwor
LyoqCisgKiBEZXN0cm95IGEgcHJldmlvdXNseSBjcmVhdGVkIG1lbnUuCisgKgorICogQmVmb3Jl
IGRlc3Ryb3lpbmcsIGl0IGluZm9ybXMgY2xpZW50IHRoYXQgbWVudSdzIGRhdGEgaXMgcmVhZHkg
dG8gYmUKKyAqIGRlc3Ryb3llZCBieSBzZW5kaW5nIGEgInBvcHVwLHdpbGxkZWxldGUiIHdpdGgg
YSBsaXN0IG9mIG1lbnUgaXRlbXMuIFRoZW4gaXQKKyAqIHJlbW92ZXMgYW55IHJlZmVyZW5jZSB0
byBtZW51IGluc2lkZSB3ZWJraXQuIEl0J3Mgc2FmZSB0byBjYWxsIHRoaXMKKyAqIGZ1bmN0aW9u
IGVpdGhlciBmcm9tIGluc2lkZSB3ZWJraXQgb3IgZnJvbSBicm93c2VyLgorICoKKyAqIEBwYXJh
bSBvIFZpZXcuCisgKgorICogQHJldHVybnMgRUlOQV9UUlVFIGluIGNhc2UgbWVudSB3YXMgc3Vj
Y2Vzc2Z1bGx5IGRlc3Ryb3llZCBvciBFSU5BX1RSVUUgaW4KKyAqIGNhc2UgdGhlcmUgd2Fzbid0
IGFueSBtZW51IHRvIGJlIGRlc3Ryb3llZC4KKyAqLworRWluYV9Cb29sIGV3a192aWV3X3BvcHVw
X2Rlc3Ryb3koRXZhc19PYmplY3QqIG8pCit7CisgICAgSU5GKCJvPSVwIiwgbyk7CisgICAgRVdL
X1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdf
UFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKKworICAgIGlmICghcHJp
di0+cG9wdXAubWVudV9jbGllbnQpCisgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOworCisgICAg
ZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChvLCAicG9wdXAsd2lsbGRlbGV0ZSIsICZw
cml2LT5wb3B1cC5tZW51KTsKKworICAgIHZvaWQqIGl0ZW12OworICAgIEVJTkFfTElTVF9GUkVF
KHByaXYtPnBvcHVwLm1lbnUuaXRlbXMsIGl0ZW12KSB7CisgICAgICAgIEV3a19NZW51X0l0ZW0q
IGl0ZW0gPSAoRXdrX01lbnVfSXRlbSopaXRlbXY7CisgICAgICAgIGVpbmFfc3RyaW5nc2hhcmVf
ZGVsKGl0ZW0tPnRleHQpOworICAgICAgICBmcmVlKGl0ZW0pOworICAgIH0KKyAgICBwcml2LT5w
b3B1cC5tZW51X2NsaWVudC0+cG9wdXBEaWRIaWRlKCk7CisgICAgcHJpdi0+cG9wdXAubWVudV9j
bGllbnQgPSAwOworCisgICAgcmV0dXJuIEVJTkFfVFJVRTsKK30KKworLyoqCisgKiBDaGFuZ2Vz
IGN1cnJlbnRseSBzZWxlY3RlZCBpdGVtLgorICoKKyAqIENoYW5nZXMgdGhlIG9wdGlvbiBzZWxl
Y3RlZCBpbiBzZWxlY3Qgd2lkZ2V0LiBUaGlzIGlzIGNhbGxlZCBieSBicm93c2VyCisgKiB3aGVu
ZXZlciB1c2VyIGhhcyBjaG9zZW4gYSBkaWZmZXJlbnQgaXRlbS4gTW9zdCBsaWtlbHkgYWZ0ZXIg
Y2FsbGluZyB0aGlzLCBhCisgKiBjYWxsIHRvIGV3a192aWV3X3BvcHVwX2Rlc3Ryb3kgbWlnaHQg
YmUgbWFkZSBpbiBvcmRlciB0byBjbG9zZSB0aGUgcG9wdXAuCisgKgorICogQHBhcmFtIG8gVmll
dy4KKyAqIEBpbmRleCBJbmRleCBvZiBzZWxlY3RlZCBpdGVtLgorICoKKyAqLwordm9pZCBld2tf
dmlld19wb3B1cF9zZWxlY3RlZF9zZXQoRXZhc19PYmplY3QqIG8sIGludCBpbmRleCkKK3sKKyAg
ICBJTkYoIm89JXAiLCBvKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkKTsK
KyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYpOworCisgICAgcHJpdi0+
cG9wdXAubWVudV9jbGllbnQtPnZhbHVlQ2hhbmdlZChpbmRleCk7Cit9CisKKy8qKgorICogQGlu
dGVybmFsCisgKiBSZXF1ZXN0IGEgZG93bmxvYWQgdG8gdXNlci4KKyAqCisgKiBAcGFyYW0gbyBW
aWV3LgorICogQG9hcmFtIGRvd25sb2FkIEV3a19Eb3dubG9hZCBzdHJ1Y3QgdG8gYmUgc2VudC4K
KyAqCisgKiBFbWl0czogImRvd25sb2FkLHJlcXVlc3QiIHdpdGggYW4gRXdrX0Rvd25sb2FkIGNv
bnRhaW5pbmcgdGhlIGRldGFpbHMgb2YgdGhlCisgKiByZXF1ZXN0ZWQgZG93bmxvYWQuIFRoZSBk
b3dubG9hZCBwZXIgc2UgbXVzdCBiZSBoYW5kbGVkIG91dHNpZGUgb2Ygd2Via2l0LgorICovCit2
b2lkIGV3a192aWV3X2Rvd25sb2FkX3JlcXVlc3QoRXZhc19PYmplY3QqIG8sIEV3a19Eb3dubG9h
ZCogZG93bmxvYWQpCit7CisgICAgREJHKCJ2aWV3PSVwIiwgbyk7CisgICAgZXZhc19vYmplY3Rf
c21hcnRfY2FsbGJhY2tfY2FsbChvLCAiZG93bmxvYWQscmVxdWVzdCIsIGRvd25sb2FkKTsKK30K
ZGlmZiAtLWdpdCBhL1dlYktpdC9lZmwvZXdrL2V3a192aWV3LmggYi9XZWJLaXQvZWZsL2V3ay9l
d2tfdmlldy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwZGY2MDEKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5oCkBAIC0wLDAgKzEsNDU1
IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBz
eXN0ZW1zCisgICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcwor
CisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
ICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyov
CisKKyNpZm5kZWYgZXdrX3ZpZXdfaAorI2RlZmluZSBld2tfdmlld19oCisKKyNpbmNsdWRlIDxF
dmFzLmg+CisjaW5jbHVkZSA8Y2Fpcm8uaD4KKyNpbmNsdWRlIDxld2tfaGlzdG9yeS5oPgorCisj
aWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICogQGJyaWVm
IFdlYktpdCBtYWluIHNtYXJ0IG9iamVjdC4KKyAqCisgKiBUaGlzIG9iamVjdCBpcyB0aGUgaGln
aCBsZXZlbCBhY2Nlc3MgdG8gV2ViS2l0LUVGTCBicm93c2VyCisgKiBjb21wb25lbnQuIEl0IGlz
IHJlc3BvbnNpYmxlIGZvciBtYW5hZ2luZyB0aGUgbWFpbiBmcmFtZSBhbmQgb3RoZXIKKyAqIGNy
aXRpY2FsIHJlc291cmNlcy4KKyAqCisgKiBFdmVyeSBld2tfdmlldyBoYXMgYXQgbGVhc3Qgb25l
IGZyYW1lLCBjYWxsZWQgIm1haW4gZnJhbWUiIGFuZAorICogcmV0cmlldmVkIHdpdGggZXdrX3Zp
ZXdfZnJhbWVfbWFpbl9nZXQoKS4gRGlyZWN0IGZyYW1lIGFjY2VzcyBpcworICogb2Z0ZW4gZGlz
Y291cmFnZWQsIGl0IGlzIHJlY29tbWVuZGVkIHRvIHVzZSBld2tfdmlldyBmdW5jdGlvbnMKKyAq
IGluc3RlYWQuCisgKgorICogVGhlIGZvbGxvd2luZyBzaWduYWxzIChzZWUgZXZhc19vYmplY3Rf
c21hcnRfY2FsbGJhY2tfYWRkKCkpIGFyZSBlbWl0dGVkOgorICoKKyAqICAtICJyZWFkeSIsIHZv
aWQ6IHBhZ2UgaXMgZnVsbHkgbG9hZGVkLgorICogIC0gInRpdGxlLGNoYW5nZWQiLCBjb25zdCBj
aGFyKjogdGl0bGUgb2YgdGhlIG1haW4gZnJhbWUgY2hhbmdlZC4KKyAqICAtICJ1cmksY2hhbmdl
ZCIsIGNvbnN0IGNoYXIqOiB1cmkgb2YgdGhlIG1haW4gZnJhbWUgY2hhbmdlZC4KKyAqICAtICJs
b2FkLHN0YXJ0ZWQiLCB2b2lkOiBmcmFtZSBzdGFydGVkIGxvYWRpbmcuCisgKiAgLSAibG9hZCxw
cm9ncmVzcyIsIGRvdWJsZSo6IGxvYWQgcHJvZ3Jlc3MgY2hhbmdlZCAob3ZlcmFsbCB2YWx1ZQor
ICogICAgZnJvbSAwLjAgdG8gMS4wLCBjb25uZWN0IHRvIGluZGl2aWR1YWwgZnJhbWVzIGZvciBm
aW5lIGdyYWluZWQpLgorICogIC0gImxvYWQsZmluaXNoZWQiLCBjb25zdCBFd2tfRnJhbWVfTG9h
ZF9FcnJvcio6IHJlcG9ydHMgbG9hZAorICogICAgZmluaXNoZWQgYW5kIGFzIGFyZ3VtZW50IEBj
IE5VTEwgaWYgc3VjY2Vzc2Z1bGx5IG9yIHBvaW50ZXIgdG8KKyAqICAgIHN0cnVjdHVyZSBkZWZp
bmluZyB0aGUgZXJyb3IuCisgKiAgLSAibG9hZCxwcm92aXNpb25hbCIsIHZvaWQ6IHZpZXcgc3Rh
cnRlZCBwcm92aXNpb25hbCBsb2FkLgorICogIC0gImxvYWQsZXJyb3IiLCBjb25zdCBFd2tfRnJh
bWVfTG9hZF9FcnJvcio6IHJlcG9ydHMgbG9hZCBmYWlsZWQKKyAqICAgIGFuZCBhcyBhcmd1bWVu
dCBhIHBvaW50ZXIgdG8gc3RydWN0dXJlIGRlZmluaW5nIHRoZSBlcnJvci4KKyAqICAtICJmcmFt
ZSxjcmVhdGVkIiwgRXZhc19PYmplY3QqOiB3aGVuIGZyYW1lcyBhcmUgY3JlYXRlZCwgdGhleSBh
cmUKKyAqICAgIGVtaXR0ZWQgaW4gdGhpcyBzaWduYWwuCisgKiAgLSAiem9vbSxhbmltYXRlZCxl
bmQiLCB2b2lkOiByZXF1ZXN0ZWQgYW5pbWF0ZWQgem9vbSBpcyBmaW5pc2hlZC4KKyAqICAtICJt
ZW51YmFyLHZpc2libGUsc2V0IiwgRWluYV9Cb29sOiBzZXQgbWVudWJhciB2aXNpYmlsaXR5Lgor
ICogIC0gIm1lbnViYXIsdmlzaWJsZSxnZXQiLCBFaW5hX0Jvb2wgKjogZXhwZWN0cyBhIEBjIEVJ
TkFfVFJVRSBpZiBtZW51YmFyIGlzCisgKiAgICB2aXNpYmxlOyBvdGhlcndpc2UsIEBjIEVJTkFf
RkFMU0UuCisgKiAgLSAibWVudWJhcix2aXNpYmxlLHNldCIsIEVpbmFfQm9vbDogc2V0IG1lbnVi
YXIgdmlzaWJpbGl0eS4KKyAqICAtICJtZW51YmFyLHZpc2libGUsZ2V0IiwgRWluYV9Cb29sICo6
IGV4cGVjdHMgYSBAYyBFSU5BX1RSVUUgaWYgbWVudWJhciBpcworICogICAgdmlzaWJsZTsgQGMg
RUlOQV9GQUxTRSwgb3RoZXJ3aXNlLgorICogIC0gInNjcm9sbGJhcnMsdmlzaWJsZSxzZXQiLCBF
aW5hX0Jvb2w6IHNldCBzY3JvbGxiYXJzIHZpc2liaWxpdHkuCisgKiAgLSAic2Nyb2xsYmFycyx2
aXNpYmxlLGdldCIsIEVpbmFfQm9vbCAqOiBleHBlY3RzIGEgQGMgRUlOQV9UUlVFIGlmIHNjcm9s
bGJhcnMKKyAqICAgIGFyZSB2aXNpYmxlOyBAYyBFSU5BX0ZBTFNFLCBvdGhlcndpc2UuCisgKiAg
LSAic3RhdHVzYmFyLHZpc2libGUsc2V0IiwgRWluYV9Cb29sOiBzZXQgc3RhdHVzYmFyIHZpc2li
aWxpdHkuCisgKiAgLSAic3RhdHVzYmFyLHZpc2libGUsZ2V0IiwgRWluYV9Cb29sICo6IGV4cGVj
dHMgYSBAYyBFSU5BX1RSVUUgaWYgc3RhdHVzYmFyIGlzCisgKiAgICB2aXNpYmxlOyBAYyBFSU5B
X0ZBTFNFLCBvdGhlcndpc2UuCisgKiAgLSAidG9vbGJhcix2aXNpYmxlLHNldCIsIEVpbmFfQm9v
bDogc2V0IHRvb2xiYXIgdmlzaWJpbGl0eS4KKyAqICAtICJ0b29sYmFyLHZpc2libGUsZ2V0Iiwg
RWluYV9Cb29sICo6IGV4cGVjdHMgYSBAYyBFSU5BX1RSVUUgaWYgdG9vbGJhcgorICogICAgaXMg
dmlzaWJsZTsgQGMgRUlOQV9GQUxTRSwgb3RoZXJ3aXNlLgorICogIC0gImxpbmssaG92ZXIsaW4i
LCBjb25zdCBjaGFyICpsaW5rWzJdOiByZXBvcnRzIG1vdXNlIGlzIG92ZXIgYSBsaW5rIGFuZCBh
cworICogICAgYXJndW1lbnQgZ2l2ZXMgdGhlIHVybCBpbiBsaW5rWzBdIGFuZCBsaW5rJ3MgdGl0
bGUgaW4gbGlua1sxXS4KKyAqICAtICJsaW5rLGhvdmVyLG91dCIsIGNvbnN0IGNoYXIgKmxpbmtb
Ml06IHJlcG9ydHMgbW91c2UgbW92ZWQgb3V0IGZyb20gYSBsaW5rCisgKiAgICBhbmQgYXMgYXJn
dW1lbnQgZ2l2ZXMgdGhlIHVybCBpbiBsaW5rWzBdIGFuZCBsaW5rJ3MgdGl0bGUgaW4gbGlua1sx
XS4KKyAqICAtICJwb3B1cCxjcmVhdGUiLCBFd2tfTWVudTogcmVwb3J0cyB0aGF0IGEgbmV3IG1l
bnUgd2FzIGNyZWF0ZWQuCisgKiAgLSAicG9wdXAsd2lsbGRlbGV0ZWQiLCBFd2tfTWVudTogcmVw
b3J0cyB0aGF0IGEgcHJldmlvdXNseSBjcmVhdGVkIG1lbnUgaXMKKyAqICAgIGFib3V0IHRvIGJl
IGRlbGV0ZWQuCisgKiAgLSAiZG93bmxvYWQscmVxdWVzdCIsIEV3a19Eb3dubG9hZDogcmVwb3J0
cyBhIGRvd25sb2FkIGlzIGJlaW5nIHJlcXVlc3RlZAorICogICAgYW5kIGFzIGFyZ3VtZW50cyBn
aXZlcyBpdHMgZGV0YWlscy4KKyAqICAtICJpY29uLHJlY2VpdmVkIiwgdm9pZDogbWFpbiBmcmFt
ZSByZWNlaXZlZCBhbiBpY29uLgorICovCisKK3R5cGVkZWYgc3RydWN0IF9Fd2tfVmlld19TbWFy
dF9EYXRhIEV3a19WaWV3X1NtYXJ0X0RhdGE7CisKKy8qKgorICogRXdrIHZpZXcncyBjbGFzcywg
dG8gYmUgb3ZlcnJpZGRlbiBieSBzdWItY2xhc3Nlcy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgX0V3
a19WaWV3X1NtYXJ0X0NsYXNzIEV3a19WaWV3X1NtYXJ0X0NsYXNzOworc3RydWN0IF9Fd2tfVmll
d19TbWFydF9DbGFzcyB7CisgICAgRXZhc19TbWFydF9DbGFzcyBzYzsgLyoqPCBhbGwgYnV0ICdk
YXRhJyBpcyBmcmVlIHRvIGJlIGNoYW5nZWQuICovCisgICAgdW5zaWduZWQgbG9uZyB2ZXJzaW9u
OworCisgICAgRXZhc19PYmplY3QgKigqd2luZG93X2NyZWF0ZSkoRXdrX1ZpZXdfU21hcnRfRGF0
YSAqc2QpOyAvKio8IGNyZWF0ZXMgYSBuZXcgd2luZG93LCByZXF1ZXN0ZWQgYnkgd2Via2l0ICov
CisgICAgLy8gaG9va3MgdG8gYWxsb3cgZGlmZmVyZW50IGJhY2tpbmcgc3RvcmVzCisgICAgRXZh
c19PYmplY3QgKigqYmFja2luZ19zdG9yZV9hZGQpKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkKTsg
LyoqPCBtdXN0IGJlIGRlZmluZWQgKi8KKyAgICBFaW5hX0Jvb2wgKCpzY3JvbGxzX3Byb2Nlc3Mp
KEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkKTsgLyoqPCBtdXN0IGJlIGRlZmluZWQgKi8KKyAgICBF
aW5hX0Jvb2wgKCpyZXBhaW50c19wcm9jZXNzKShFd2tfVmlld19TbWFydF9EYXRhICpzZCk7IC8q
KjwgbXVzdCBiZSBkZWZpbmVkICovCisgICAgRWluYV9Cb29sICgqY29udGVudHNfcmVzaXplKShF
d2tfVmlld19TbWFydF9EYXRhICpzZCwgaW50IHcsIGludCBoKTsKKyAgICBFaW5hX0Jvb2wgKCp6
b29tX3NldCkoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QsIGZsb2F0IHpvb20sIEV2YXNfQ29vcmQg
Y3gsIEV2YXNfQ29vcmQgY3kpOworICAgIEVpbmFfQm9vbCAoKnpvb21fd2Vha19zZXQpKEV3a19W
aWV3X1NtYXJ0X0RhdGEgKnNkLCBmbG9hdCB6b29tLCBFdmFzX0Nvb3JkIGN4LCBFdmFzX0Nvb3Jk
IGN5KTsKKyAgICB2b2lkICgqem9vbV93ZWFrX3Ntb290aF9zY2FsZV9zZXQpKEV3a19WaWV3X1Nt
YXJ0X0RhdGEgKnNkLCBFaW5hX0Jvb2wgc21vb3RoX3NjYWxlKTsKKyAgICB2b2lkICgqYmdfY29s
b3Jfc2V0KShFd2tfVmlld19TbWFydF9EYXRhICpzZCwgdW5zaWduZWQgY2hhciByLCB1bnNpZ25l
ZCBjaGFyIGcsIHVuc2lnbmVkIGNoYXIgYiwgdW5zaWduZWQgY2hhciBhKTsKKyAgICB2b2lkICgq
Zmx1c2gpKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkKTsKKyAgICBFaW5hX0Jvb2wgKCpwcmVfcmVu
ZGVyX3JlZ2lvbikoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QsIEV2YXNfQ29vcmQgeCwgRXZhc19D
b29yZCB5LCBFdmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCwgZmxvYXQgem9vbSk7CisgICAgdm9p
ZCAoKnByZV9yZW5kZXJfY2FuY2VsKShFd2tfVmlld19TbWFydF9EYXRhICpzZCk7CisgICAgLy8g
ZXZlbnQgaGFuZGxpbmc6CisgICAgLy8gIC0gcmV0dXJucyB0cnVlIGlmIGhhbmRsZWQKKyAgICAv
LyAgLSBpZiBvdmVycmlkZGVuLCBoYXZlIHRvIGNhbGwgcGFyZW50IG1ldGhvZCBpZiBkZXNpcmVk
CisgICAgRWluYV9Cb29sICgqZm9jdXNfaW4pKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkKTsKKyAg
ICBFaW5hX0Jvb2wgKCpmb2N1c19vdXQpKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkKTsKKyAgICBF
aW5hX0Jvb2wgKCptb3VzZV93aGVlbCkoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QsIGNvbnN0IEV2
YXNfRXZlbnRfTW91c2VfV2hlZWwgKmV2KTsKKyAgICBFaW5hX0Jvb2wgKCptb3VzZV9kb3duKShF
d2tfVmlld19TbWFydF9EYXRhICpzZCwgY29uc3QgRXZhc19FdmVudF9Nb3VzZV9Eb3duICpldik7
CisgICAgRWluYV9Cb29sICgqbW91c2VfdXApKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkLCBjb25z
dCBFdmFzX0V2ZW50X01vdXNlX1VwICpldik7CisgICAgRWluYV9Cb29sICgqbW91c2VfbW92ZSko
RXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QsIGNvbnN0IEV2YXNfRXZlbnRfTW91c2VfTW92ZSAqZXYp
OworICAgIEVpbmFfQm9vbCAoKmtleV9kb3duKShFd2tfVmlld19TbWFydF9EYXRhICpzZCwgY29u
c3QgRXZhc19FdmVudF9LZXlfRG93biAqZXYpOworICAgIEVpbmFfQm9vbCAoKmtleV91cCkoRXdr
X1ZpZXdfU21hcnRfRGF0YSAqc2QsIGNvbnN0IEV2YXNfRXZlbnRfS2V5X1VwICpldik7CisKKyAg
ICB2b2lkICgqYWRkX2NvbnNvbGVfbWVzc2FnZSkoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QsIGNv
bnN0IGNoYXIgKm1lc3NhZ2UsIHVuc2lnbmVkIGludCBsaW5lTnVtYmVyLCBjb25zdCBjaGFyICpz
b3VyY2VJRCk7CisgICAgdm9pZCAoKnJ1bl9qYXZhc2NyaXB0X2FsZXJ0KShFd2tfVmlld19TbWFy
dF9EYXRhICpzZCwgRXZhc19PYmplY3QgKmZyYW1lLCBjb25zdCBjaGFyICptZXNzYWdlKTsKKyAg
ICBFaW5hX0Jvb2wgKCpydW5famF2YXNjcmlwdF9jb25maXJtKShFd2tfVmlld19TbWFydF9EYXRh
ICpzZCwgRXZhc19PYmplY3QgKmZyYW1lLCBjb25zdCBjaGFyICptZXNzYWdlKTsKKyAgICBFaW5h
X0Jvb2wgKCpydW5famF2YXNjcmlwdF9wcm9tcHQpKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkLCBF
dmFzX09iamVjdCAqZnJhbWUsIGNvbnN0IGNoYXIgKm1lc3NhZ2UsIGNvbnN0IGNoYXIgKmRlZmF1
bHRWYWx1ZSwgY2hhciAqKnZhbHVlKTsKKyAgICBFaW5hX0Jvb2wgKCpzaG91bGRfaW50ZXJydXB0
X2phdmFzY3JpcHQpKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkKTsKKyAgICB2b2lkICgqZXhjZWVk
ZWRfZGF0YWJhc2VfcXVvdGEpKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkLCBFdmFzX09iamVjdCAq
ZnJhbWUsIGNvbnN0IGNoYXIgKmRhdGFiYXNlTmFtZSk7CisKKyAgICBFaW5hX0Jvb2wgKCpydW5f
b3Blbl9wYW5lbCkoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QsIEV2YXNfT2JqZWN0ICpmcmFtZSwg
RWluYV9Cb29sIGFsbG93c19tdWx0aXBsZV9maWxlcywgY29uc3QgRWluYV9MaXN0ICpzdWdnZXN0
ZWRfZmlsZW5hbWVzLCBFaW5hX0xpc3QgKipzZWxlY3RlZF9maWxlbmFtZXMpOworfTsKKworI2Rl
ZmluZSBFV0tfVklFV19TTUFSVF9DTEFTU19WRVJTSU9OIDFVTCAvKiogdGhlIHZlcnNpb24geW91
IGhhdmUgdG8gcHV0IGludG8gdGhlIHZlcnNpb24gZmllbGQgaW4gdGhlIEV3a19WaWV3X1NtYXJ0
X0NsYXNzIHN0cnVjdHVyZSAqLworCisvKioKKyAqIEluaXRpYWxpemVyIGZvciB3aG9sZSBFd2tf
Vmlld19TbWFydF9DbGFzcyBzdHJ1Y3R1cmUuCisgKgorICogQHBhcmFtIHNtYXJ0X2NsYXNzX2lu
aXQgaW5pdGlhbGl6ZXIgdG8gdXNlIGZvciB0aGUgImJhc2UiIGZpZWxkCisgKiAoRXZhc19TbWFy
dF9DbGFzcykuCisgKgorICogQHNlZSBFV0tfVklFV19TTUFSVF9DTEFTU19JTklUX05VTEwKKyAq
IEBzZWUgRVdLX1ZJRVdfU01BUlRfQ0xBU1NfSU5JVF9WRVJTSU9OCisgKiBAc2VlIEVXS19WSUVX
X1NNQVJUX0NMQVNTX0lOSVRfTkFNRV9WRVJTSU9OCisgKi8KKyNkZWZpbmUgRVdLX1ZJRVdfU01B
UlRfQ0xBU1NfSU5JVChzbWFydF9jbGFzc19pbml0KSB7c21hcnRfY2xhc3NfaW5pdCwgRVdLX1ZJ
RVdfU01BUlRfQ0xBU1NfVkVSU0lPTiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMH0KKworLyoqCisg
KiBJbml0aWFsaXplciB0byB6ZXJvIGEgd2hvbGUgRXdrX1ZpZXdfU21hcnRfQ2xhc3Mgc3RydWN0
dXJlLgorICoKKyAqIEBzZWUgRVdLX1ZJRVdfU01BUlRfQ0xBU1NfSU5JVF9WRVJTSU9OCisgKiBA
c2VlIEVXS19WSUVXX1NNQVJUX0NMQVNTX0lOSVRfTkFNRV9WRVJTSU9OCisgKiBAc2VlIEVXS19W
SUVXX1NNQVJUX0NMQVNTX0lOSVQKKyAqLworI2RlZmluZSBFV0tfVklFV19TTUFSVF9DTEFTU19J
TklUX05VTEwgRVdLX1ZJRVdfU01BUlRfQ0xBU1NfSU5JVChFVkFTX1NNQVJUX0NMQVNTX0lOSVRf
TlVMTCkKKworLyoqCisgKiBJbml0aWFsaXplciB0byB6ZXJvIGEgd2hvbGUgRXdrX1ZpZXdfU21h
cnRfQ2xhc3Mgc3RydWN0dXJlIGFuZCBzZXQgdmVyc2lvbi4KKyAqCisgKiBTaW1pbGFyIHRvIEVX
S19WSUVXX1NNQVJUX0NMQVNTX0lOSVRfTlVMTCwgYnV0IHdpbGwgc2V0IHZlcnNpb24gZmllbGQg
b2YKKyAqIEV2YXNfU21hcnRfQ2xhc3MgKGJhc2UgZmllbGQpIHRvIGxhdGVzdCBFVkFTX1NNQVJU
X0NMQVNTX1ZFUlNJT04KKyAqCisgKiBAc2VlIEVXS19WSUVXX1NNQVJUX0NMQVNTX0lOSVRfTlVM
TAorICogQHNlZSBFV0tfVklFV19TTUFSVF9DTEFTU19JTklUX05BTUVfVkVSU0lPTgorICogQHNl
ZSBFV0tfVklFV19TTUFSVF9DTEFTU19JTklUCisgKi8KKyNkZWZpbmUgRVdLX1ZJRVdfU01BUlRf
Q0xBU1NfSU5JVF9WRVJTSU9OIEVXS19WSUVXX1NNQVJUX0NMQVNTX0lOSVQoRVZBU19TTUFSVF9D
TEFTU19JTklUX1ZFUlNJT04pCisKKy8qKgorICogSW5pdGlhbGl6ZXIgdG8gemVybyBhIHdob2xl
IEV3a19WaWV3X1NtYXJ0X0NsYXNzIHN0cnVjdHVyZSBhbmQgc2V0CisgKiBuYW1lIGFuZCB2ZXJz
aW9uLgorICoKKyAqIFNpbWlsYXIgdG8gRVdLX1ZJRVdfU01BUlRfQ0xBU1NfSU5JVF9OVUxMLCBi
dXQgd2lsbCBzZXQgdmVyc2lvbiBmaWVsZCBvZgorICogRXZhc19TbWFydF9DbGFzcyAoYmFzZSBm
aWVsZCkgdG8gbGF0ZXN0IEVWQVNfU01BUlRfQ0xBU1NfVkVSU0lPTiBhbmQgbmFtZQorICogdG8g
dGhlIHNwZWNpZmljIHZhbHVlLgorICoKKyAqIEl0IHdpbGwga2VlcCBhIHJlZmVyZW5jZSB0byBu
YW1lIGZpZWxkIGFzIGEgImNvbnN0IGNoYXIgKiIsIHRoYXQgaXMsCisgKiBuYW1lIG11c3QgYmUg
YXZhaWxhYmxlIHdoaWxlIHRoZSBzdHJ1Y3R1cmUgaXMgdXNlZCAoaGludDogc3RhdGljIG9yIGds
b2JhbCEpCisgKiBhbmQgd2lsbCBub3QgYmUgbW9kaWZpZWQuCisgKgorICogQHNlZSBFV0tfVklF
V19TTUFSVF9DTEFTU19JTklUX05VTEwKKyAqIEBzZWUgRVdLX1ZJRVdfU01BUlRfQ0xBU1NfSU5J
VF9WRVJTSU9OCisgKiBAc2VlIEVXS19WSUVXX1NNQVJUX0NMQVNTX0lOSVQKKyAqLworI2RlZmlu
ZSBFV0tfVklFV19TTUFSVF9DTEFTU19JTklUX05BTUVfVkVSU0lPTihuYW1lKSBFV0tfVklFV19T
TUFSVF9DTEFTU19JTklUKEVWQVNfU01BUlRfQ0xBU1NfSU5JVF9OQU1FX1ZFUlNJT04obmFtZSkp
CisKKy8qKgorICogQGludGVybmFsCisgKgorICogcHJpdmF0ZSBkYXRhIHRoYXQgaXMgdXNlZCBp
bnRlcm5hbGx5IGJ5IEVGTCBXZWJLaXQgYW5kIHNob3VsZCBuZXZlcgorICogYmUgbW9kaWZpZWQg
ZnJvbSBvdXRzaWRlLgorICovCit0eXBlZGVmIHN0cnVjdCBfRXdrX1ZpZXdfUHJpdmF0ZV9EYXRh
IEV3a19WaWV3X1ByaXZhdGVfRGF0YTsKKworZW51bSBfRXdrX01lbnVfSXRlbV9UeXBlIHsKKyAg
ICBFV0tfTUVOVV9TRVBBUkFUT1IsCisgICAgRVdLX01FTlVfR1JPVVAsCisgICAgRVdLX01FTlVf
T1BUSU9OCit9OwordHlwZWRlZiBlbnVtIF9Fd2tfTWVudV9JdGVtX1R5cGUgRXdrX01lbnVfSXRl
bV9UeXBlOworCisKKy8qKgorICogU3RydWN0dXJlIGRvIGNvbnRhaW4gZGF0YSBvZiBlYWNoIG1l
bnUgaXRlbQorICovCit0eXBlZGVmIHN0cnVjdCBfRXdrX01lbnVfSXRlbSBFd2tfTWVudV9JdGVt
Oworc3RydWN0IF9Fd2tfTWVudV9JdGVtIHsKKyAgICBjb25zdCBjaGFyICp0ZXh0OyAvKio8IEl0
ZW0ncyB0ZXh0ICovCisgICAgRXdrX01lbnVfSXRlbV9UeXBlIHR5cGU7IC8qKiBJdGVtJ3MgdHlw
ZSAqLworfTsKKworLyoqCisgKiBTdHJ1Y3R1cmUgdG8gY29udGFpbiBQb3B1cCBtZW51IGRhdGEu
CisgKi8KK3R5cGVkZWYgc3RydWN0IF9Fd2tfTWVudSBFd2tfTWVudTsKK3N0cnVjdCBfRXdrX01l
bnUgeworICAgICAgICBFaW5hX0xpc3QqIGl0ZW1zOworICAgICAgICBpbnQgeDsKKyAgICAgICAg
aW50IHk7CisgICAgICAgIGludCB3aWR0aDsKKyAgICAgICAgaW50IGhlaWdodDsKK307CisKKy8q
KgorICogU3RydWN0dXJlIHRvIGNvbnRhaW4gRG93bmxvYWQgZGF0YQorICovCit0eXBlZGVmIHN0
cnVjdCBfRXdrX0Rvd25sb2FkIEV3a19Eb3dubG9hZDsKK3N0cnVjdCBfRXdrX0Rvd25sb2FkIHsK
KyAgICBjb25zdCBjaGFyKiB1cmw7CisgICAgLyogdG8gYmUgZXh0ZW5kZWQgKi8KK307CisKKy8q
KgorICogU2Nyb2xsIHJlcXVlc3QgdGhhdCBzaG91bGQgYmUgcHJvY2Vzc2VkIGJ5IHN1YmNsYXNz
IGltcGxlbWVudGF0aW9ucy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgX0V3a19TY3JvbGxfUmVxdWVz
dCBFd2tfU2Nyb2xsX1JlcXVlc3Q7CitzdHJ1Y3QgX0V3a19TY3JvbGxfUmVxdWVzdCB7CisgICAg
RXZhc19Db29yZCBkeCwgZHk7CisgICAgRXZhc19Db29yZCB4LCB5LCB3LCBoLCB4MiwgeTI7Cisg
ICAgRWluYV9Cb29sIG1haW5fc2Nyb2xsOworfTsKKworLyoqCisgKiBTdHJ1Y3R1cmUgdG8gY29u
dGFpbiBpbnRlcm5hbCBWaWV3IGRhdGEsIGl0IGlzIHRvIGJlIGNvbnNpZGVyZWQKKyAqIHByaXZh
dGUgYnkgdXNlcnMsIGJ1dCBtYXkgYmUgZXh0ZW5kZWQgb3IgY2hhbmdlZCBieSBzdWItY2xhc3Nl
cworICogKHRoYXQncyB3aHkgaXQncyBpbiBwdWJsaWMgaGVhZGVyIGZpbGUpLgorICovCitzdHJ1
Y3QgX0V3a19WaWV3X1NtYXJ0X0RhdGEgeworICAgIEV2YXNfT2JqZWN0X1NtYXJ0X0NsaXBwZWRf
RGF0YSBiYXNlOworICAgIGNvbnN0IEV3a19WaWV3X1NtYXJ0X0NsYXNzICphcGk7IC8qKjwgcmVm
ZXJlbmNlIHRvIGNhc3RlZCBjbGFzcyBpbnN0YW5jZSAqLworICAgIEV2YXNfT2JqZWN0ICpzZWxm
OyAvKio8IHJlZmVyZW5jZSB0byBvd25lciBvYmplY3QgKi8KKyAgICBFdmFzX09iamVjdCAqbWFp
bl9mcmFtZTsgLyoqPCByZWZlcmVuY2UgdG8gbWFpbiBmcmFtZSBvYmplY3QgKi8KKyAgICBFdmFz
X09iamVjdCAqYmFja2luZ19zdG9yZTsgLyoqPCByZWZlcmVuY2UgdG8gYmFja2luZyBzdG9yZSAq
LworICAgIEV3a19WaWV3X1ByaXZhdGVfRGF0YSAqX3ByaXY7IC8qKjwgc2hvdWxkIG5ldmVyIGJl
IGFjY2Vzc2VkLCBjKysgc3R1ZmYgKi8KKyAgICBzdHJ1Y3QgeworICAgICAgICBFdmFzX0Nvb3Jk
IHgsIHksIHcsIGg7IC8qKjwgbGFzdCB1c2VkIHZpZXdwb3J0ICovCisgICAgfSB2aWV3OworICAg
IHN0cnVjdCB7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICBmbG9hdCBzdGFydDsKKyAg
ICAgICAgICAgIGZsb2F0IGVuZDsKKyAgICAgICAgICAgIGZsb2F0IGN1cnJlbnQ7IC8qKjwgaWYg
PiAwLjAsIHRoZW4gZG9pbmcgYW5pbWF0ZWQgem9vbS4gKi8KKyAgICAgICAgfSB6b29tOworICAg
IH0gYW5pbWF0ZWRfem9vbTsKKyAgICBzdHJ1Y3QgeworICAgICAgICB1bnNpZ25lZCBjaGFyIHIs
IGcsIGIsIGE7CisgICAgfSBiZ19jb2xvcjsKKyAgICBFaW5hX0Jvb2wgem9vbV93ZWFrX3Ntb290
aF9zY2FsZToxOworICAgIHN0cnVjdCB7IC8qKjwgd2hhdCBjaGFuZ2VkIHNpbmNlIGxhc3Qgc21h
cnRfY2FsY3VsYXRlICovCisgICAgICAgIEVpbmFfQm9vbCBhbnk6MTsKKyAgICAgICAgRWluYV9C
b29sIHNpemU6MTsKKyAgICAgICAgRWluYV9Cb29sIHBvc2l0aW9uOjE7CisgICAgICAgIEVpbmFf
Qm9vbCBmcmFtZV9yZWN0OjE7CisgICAgfSBjaGFuZ2VkOworfTsKKworRUFQSSBFaW5hX0Jvb2wg
ICAgZXdrX3ZpZXdfYmFzZV9zbWFydF9zZXQoRXdrX1ZpZXdfU21hcnRfQ2xhc3MgKmFwaSk7CitF
QVBJIEVpbmFfQm9vbCAgICBld2tfdmlld19zaW5nbGVfc21hcnRfc2V0KEV3a19WaWV3X1NtYXJ0
X0NsYXNzICphcGkpOworCitFQVBJIEV2YXNfT2JqZWN0ICpld2tfdmlld19zaW5nbGVfYWRkKEV2
YXMgKmUpOworCitFQVBJIHZvaWQgICAgICAgICBld2tfdmlld19maXhlZF9sYXlvdXRfc2l6ZV9z
ZXQoRXZhc19PYmplY3QgKm8sIEV2YXNfQ29vcmQgdywgRXZhc19Db29yZCBoKTsKK0VBUEkgdm9p
ZCAgICAgICAgIGV3a192aWV3X2ZpeGVkX2xheW91dF9zaXplX2dldChFdmFzX09iamVjdCAqbywg
RXZhc19Db29yZCAqdywgRXZhc19Db29yZCAqaCk7CisKK0VBUEkgdm9pZCAgICAgICAgIGV3a192
aWV3X3RoZW1lX3NldChFdmFzX09iamVjdCAqbywgY29uc3QgY2hhciAqcGF0aCk7CitFQVBJIGNv
bnN0IGNoYXIgICpld2tfdmlld190aGVtZV9nZXQoRXZhc19PYmplY3QgKm8pOworCitFQVBJIEV2
YXNfT2JqZWN0ICpld2tfdmlld19mcmFtZV9tYWluX2dldChjb25zdCBFdmFzX09iamVjdCAqbyk7
CitFQVBJIEV2YXNfT2JqZWN0ICpld2tfdmlld19mcmFtZV9mb2N1c2VkX2dldChjb25zdCBFdmFz
X09iamVjdCAqbyk7CisKK0VBUEkgRWluYV9Cb29sICAgIGV3a192aWV3X3VyaV9zZXQoRXZhc19P
YmplY3QgKm8sIGNvbnN0IGNoYXIgKnVyaSk7CitFQVBJIGNvbnN0IGNoYXIgICpld2tfdmlld191
cmlfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpvKTsKK0VBUEkgY29uc3QgY2hhciAgKmV3a192aWV3
X3RpdGxlX2dldChjb25zdCBFdmFzX09iamVjdCAqbyk7CisKK0VBUEkgRWluYV9Cb29sICAgIGV3
a192aWV3X2VkaXRhYmxlX2dldChjb25zdCBFdmFzX09iamVjdCAqbyk7CitFQVBJIEVpbmFfQm9v
bCAgICBld2tfdmlld19lZGl0YWJsZV9zZXQoRXZhc19PYmplY3QgKm8sIEVpbmFfQm9vbCBlZGl0
YWJsZSk7CisKK0VBUEkgdm9pZCAgICAgICAgIGV3a192aWV3X2JnX2NvbG9yX3NldChFdmFzX09i
amVjdCAqbywgaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEpOworRUFQSSB2b2lkICAgICAgICAg
ZXdrX3ZpZXdfYmdfY29sb3JfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpvLCBpbnQgKnIsIGludCAq
ZywgaW50ICpiLCBpbnQgKmEpOworCitFQVBJIGNoYXIgICAgICAgICpld2tfdmlld19zZWxlY3Rp
b25fZ2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpvKTsKK0VBUEkgRWluYV9Cb29sICAgIGV3a192aWV3
X3NlbGVjdF9ub25lKEV2YXNfT2JqZWN0ICpvKTsKK0VBUEkgRWluYV9Cb29sICAgIGV3a192aWV3
X3NlbGVjdF9hbGwoRXZhc19PYmplY3QgKm8pOworRUFQSSBFaW5hX0Jvb2wgICAgZXdrX3ZpZXdf
c2VsZWN0X3BhcmFncmFwaChFdmFzX09iamVjdCAqbyk7CitFQVBJIEVpbmFfQm9vbCAgICBld2tf
dmlld19zZWxlY3Rfc2VudGVuY2UoRXZhc19PYmplY3QgKm8pOworRUFQSSBFaW5hX0Jvb2wgICAg
ZXdrX3ZpZXdfc2VsZWN0X2xpbmUoRXZhc19PYmplY3QgKm8pOworRUFQSSBFaW5hX0Jvb2wgICAg
ZXdrX3ZpZXdfc2VsZWN0X3dvcmQoRXZhc19PYmplY3QgKm8pOworCitFQVBJIHZvaWQgICAgICAg
ICBld2tfdmlld19wb3B1cF9zZWxlY3RlZF9zZXQoRXZhc19PYmplY3QgKm8sIGludCBpbmRleCk7
CitFQVBJIEVpbmFfQm9vbCAgICBld2tfdmlld19wb3B1cF9kZXN0cm95KEV2YXNfT2JqZWN0ICpv
KTsKKworRUFQSSBFaW5hX0Jvb2wgICAgZXdrX3ZpZXdfdGV4dF9zZWFyY2goY29uc3QgRXZhc19P
YmplY3QgKm8sIGNvbnN0IGNoYXIgKnN0cmluZywgRWluYV9Cb29sIGNhc2Vfc2Vuc2l0aXZlLCBF
aW5hX0Jvb2wgZm9yd2FyZCwgRWluYV9Cb29sIHdyYXApOworCitFQVBJIHVuc2lnbmVkIGludCBl
d2tfdmlld190ZXh0X21hdGNoZXNfbWFyayhFdmFzX09iamVjdCAqbywgY29uc3QgY2hhciAqc3Ry
aW5nLCBFaW5hX0Jvb2wgY2FzZV9zZW5zaXRpdmUsIEVpbmFfQm9vbCBoaWdobGlnaHQsIHVuc2ln
bmVkIGludCBsaW1pdCk7CitFQVBJIEVpbmFfQm9vbCAgICBld2tfdmlld190ZXh0X21hdGNoZXNf
dW5tYXJrX2FsbChFdmFzX09iamVjdCAqbyk7CitFQVBJIEVpbmFfQm9vbCAgICBld2tfdmlld190
ZXh0X21hdGNoZXNfaGlnaGxpZ2h0X3NldChFdmFzX09iamVjdCAqbywgRWluYV9Cb29sIGhpZ2hs
aWdodCk7CitFQVBJIEVpbmFfQm9vbCAgICBld2tfdmlld190ZXh0X21hdGNoZXNfaGlnaGxpZ2h0
X2dldChjb25zdCBFdmFzX09iamVjdCAqbyk7CisKK0VBUEkgZG91YmxlICAgICAgIGV3a192aWV3
X2xvYWRfcHJvZ3Jlc3NfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpvKTsKKworRUFQSSBFaW5hX0Jv
b2wgICAgZXdrX3ZpZXdfc3RvcChFdmFzX09iamVjdCAqbyk7CitFQVBJIEVpbmFfQm9vbCAgICBl
d2tfdmlld19yZWxvYWQoRXZhc19PYmplY3QgKm8pOworRUFQSSBFaW5hX0Jvb2wgICAgZXdrX3Zp
ZXdfcmVsb2FkX2Z1bGwoRXZhc19PYmplY3QgKm8pOworCitFQVBJIEVpbmFfQm9vbCAgICBld2tf
dmlld19iYWNrKEV2YXNfT2JqZWN0ICpvKTsKK0VBUEkgRWluYV9Cb29sICAgIGV3a192aWV3X2Zv
cndhcmQoRXZhc19PYmplY3QgKm8pOworRUFQSSBFaW5hX0Jvb2wgICAgZXdrX3ZpZXdfbmF2aWdh
dGUoRXZhc19PYmplY3QgKm8sIGludCBzdGVwcyk7CisKK0VBUEkgRWluYV9Cb29sICAgIGV3a192
aWV3X2JhY2tfcG9zc2libGUoRXZhc19PYmplY3QgKm8pOworRUFQSSBFaW5hX0Jvb2wgICAgZXdr
X3ZpZXdfZm9yd2FyZF9wb3NzaWJsZShFdmFzX09iamVjdCAqbyk7CitFQVBJIEVpbmFfQm9vbCAg
ICBld2tfdmlld19uYXZpZ2F0ZV9wb3NzaWJsZShFdmFzX09iamVjdCAqbywgaW50IHN0ZXBzKTsK
KworRUFQSSBFaW5hX0Jvb2wgICAgZXdrX3ZpZXdfaGlzdG9yeV9lbmFibGVfZ2V0KGNvbnN0IEV2
YXNfT2JqZWN0ICpvKTsKK0VBUEkgRWluYV9Cb29sICAgIGV3a192aWV3X2hpc3RvcnlfZW5hYmxl
X3NldChFdmFzX09iamVjdCAqbywgRWluYV9Cb29sIGVuYWJsZSk7CitFQVBJIEV3a19IaXN0b3J5
ICpld2tfdmlld19oaXN0b3J5X2dldChjb25zdCBFdmFzX09iamVjdCAqbyk7CisKK0VBUEkgZmxv
YXQgICAgICAgIGV3a192aWV3X3pvb21fZ2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpvKTsKK0VBUEkg
RWluYV9Cb29sICAgIGV3a192aWV3X3pvb21fc2V0KEV2YXNfT2JqZWN0ICpvLCBmbG9hdCB6b29t
LCBFdmFzX0Nvb3JkIGN4LCBFdmFzX0Nvb3JkIGN5KTsKKworRUFQSSBFaW5hX0Jvb2wgICAgZXdr
X3ZpZXdfem9vbV93ZWFrX3Ntb290aF9zY2FsZV9nZXQoY29uc3QgRXZhc19PYmplY3QgKm8pOwor
RUFQSSB2b2lkICAgICAgICAgZXdrX3ZpZXdfem9vbV93ZWFrX3Ntb290aF9zY2FsZV9zZXQoRXZh
c19PYmplY3QgKm8sIEVpbmFfQm9vbCBzbW9vdGhfc2NhbGUpOworCitFQVBJIEVpbmFfQm9vbCAg
ICBld2tfdmlld196b29tX3dlYWtfc2V0KEV2YXNfT2JqZWN0ICpvLCBmbG9hdCB6b29tLCBFdmFz
X0Nvb3JkIGN4LCBFdmFzX0Nvb3JkIGN5KTsKK0VBUEkgRWluYV9Cb29sICAgIGV3a192aWV3X3pv
b21fYW5pbWF0ZWRfbWFya19zdGFydChFdmFzX09iamVjdCAqbywgZmxvYXQgem9vbSk7CitFQVBJ
IEVpbmFfQm9vbCAgICBld2tfdmlld196b29tX2FuaW1hdGVkX21hcmtfZW5kKEV2YXNfT2JqZWN0
ICpvLCBmbG9hdCB6b29tKTsKK0VBUEkgRWluYV9Cb29sICAgIGV3a192aWV3X3pvb21fYW5pbWF0
ZWRfbWFya19jdXJyZW50KEV2YXNfT2JqZWN0ICpvLCBmbG9hdCB6b29tKTsKK0VBUEkgRWluYV9C
b29sICAgIGV3a192aWV3X3pvb21fYW5pbWF0ZWRfbWFya19zdG9wKEV2YXNfT2JqZWN0ICpvKTsK
KworRUFQSSBFaW5hX0Jvb2wgICAgZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9zZXQoRXZhc19PYmpl
Y3QgKm8sIGZsb2F0IHpvb20sIGZsb2F0IGR1cmF0aW9uLCBFdmFzX0Nvb3JkIGN4LCBFdmFzX0Nv
b3JkIGN5KTsKK0VBUEkgRWluYV9Cb29sICAgIGV3a192aWV3X3pvb21fdGV4dF9vbmx5X2dldChj
b25zdCBFdmFzX09iamVjdCAqbyk7CitFQVBJIEVpbmFfQm9vbCAgICBld2tfdmlld196b29tX3Rl
eHRfb25seV9zZXQoRXZhc19PYmplY3QgKm8sIEVpbmFfQm9vbCBzZXR0aW5nKTsKKworRUFQSSBF
aW5hX0Jvb2wgICAgZXdrX3ZpZXdfcHJlX3JlbmRlcl9yZWdpb24oRXZhc19PYmplY3QgKm8sIEV2
YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCBFdmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCwgZmxv
YXQgem9vbSk7CitFQVBJIHZvaWQgICAgICAgICBld2tfdmlld19wcmVfcmVuZGVyX2NhbmNlbChF
dmFzX09iamVjdCAqbyk7CisKKy8qIHNldHRpbmdzICovCitFQVBJIGNvbnN0IGNoYXIgICpld2tf
dmlld19zZXR0aW5nX3VzZXJfYWdlbnRfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpvKTsKK0VBUEkg
RWluYV9Cb29sICAgIGV3a192aWV3X3NldHRpbmdfdXNlcl9hZ2VudF9zZXQoRXZhc19PYmplY3Qg
Km8sIGNvbnN0IGNoYXIgKnVzZXJfYWdlbnQpOworCitFQVBJIEVpbmFfQm9vbCAgICBld2tfdmll
d19zZXR0aW5nX2F1dG9fbG9hZF9pbWFnZXNfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpvKTsKK0VB
UEkgRWluYV9Cb29sICAgIGV3a192aWV3X3NldHRpbmdfYXV0b19sb2FkX2ltYWdlc19zZXQoRXZh
c19PYmplY3QgKm8sIEVpbmFfQm9vbCBhdXRvbWF0aWMpOworCitFQVBJIEVpbmFfQm9vbCAgICBl
d2tfdmlld19zZXR0aW5nX2F1dG9fc2hyaW5rX2ltYWdlc19nZXQoY29uc3QgRXZhc19PYmplY3Qg
Km8pOworRUFQSSBFaW5hX0Jvb2wgICAgZXdrX3ZpZXdfc2V0dGluZ19hdXRvX3Nocmlua19pbWFn
ZXNfc2V0KEV2YXNfT2JqZWN0ICpvLCBFaW5hX0Jvb2wgYXV0b21hdGljKTsKKworRUFQSSBFaW5h
X0Jvb2wgICAgZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVfc2NyaXB0c19nZXQoY29uc3QgRXZhc19P
YmplY3QgKm8pOworRUFQSSBFaW5hX0Jvb2wgICAgZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVfc2Ny
aXB0c19zZXQoRXZhc19PYmplY3QgKm8sIEVpbmFfQm9vbCBlbmFibGUpOworCitFQVBJIEVpbmFf
Qm9vbCAgICBld2tfdmlld19zZXR0aW5nX2VuYWJsZV9wbHVnaW5zX2dldChjb25zdCBFdmFzX09i
amVjdCAqbyk7CitFQVBJIEVpbmFfQm9vbCAgICBld2tfdmlld19zZXR0aW5nX2VuYWJsZV9wbHVn
aW5zX3NldChFdmFzX09iamVjdCAqbywgRWluYV9Cb29sIGVuYWJsZSk7CisKK0VBUEkgRWluYV9C
b29sICAgIGV3a192aWV3X3NldHRpbmdfc2NyaXB0c193aW5kb3dfb3Blbl9nZXQoY29uc3QgRXZh
c19PYmplY3QgKm8pOworRUFQSSBFaW5hX0Jvb2wgICAgZXdrX3ZpZXdfc2V0dGluZ19zY3JpcHRz
X3dpbmRvd19vcGVuX3NldChFdmFzX09iamVjdCAqbywgRWluYV9Cb29sIGFsbG93KTsKKworRUFQ
SSBFaW5hX0Jvb2wgICAgZXdrX3ZpZXdfc2V0dGluZ19yZXNpemFibGVfdGV4dGFyZWFzX2dldChj
b25zdCBFdmFzX09iamVjdCAqbyk7CitFQVBJIEVpbmFfQm9vbCAgICBld2tfdmlld19zZXR0aW5n
X3Jlc2l6YWJsZV90ZXh0YXJlYXNfc2V0KEV2YXNfT2JqZWN0ICpvLCBFaW5hX0Jvb2wgZW5hYmxl
KTsKKworRUFQSSBjb25zdCBjaGFyICAqZXdrX3ZpZXdfc2V0dGluZ191c2VyX3N0eWxlc2hlZXRf
Z2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpvKTsKK0VBUEkgRWluYV9Cb29sICAgIGV3a192aWV3X3Nl
dHRpbmdfdXNlcl9zdHlsZXNoZWV0X3NldChFdmFzX09iamVjdCAqbywgY29uc3QgY2hhciAqdXJp
KTsKKworRUFQSSBFaW5hX0Jvb2wgICAgZXdrX3ZpZXdfc2V0dGluZ19wcml2YXRlX2Jyb3dzaW5n
X2dldChjb25zdCBFdmFzX09iamVjdCAqbyk7CitFQVBJIEVpbmFfQm9vbCAgICBld2tfdmlld19z
ZXR0aW5nX3ByaXZhdGVfYnJvd3Npbmdfc2V0KEV2YXNfT2JqZWN0ICpvLCBFaW5hX0Jvb2wgZW5h
YmxlKTsKKworRUFQSSBFaW5hX0Jvb2wgICAgZXdrX3ZpZXdfc2V0dGluZ19jYXJldF9icm93c2lu
Z19nZXQoY29uc3QgRXZhc19PYmplY3QgKm8pOworRUFQSSBFaW5hX0Jvb2wgICAgZXdrX3ZpZXdf
c2V0dGluZ19jYXJldF9icm93c2luZ19zZXQoRXZhc19PYmplY3QgKm8sIEVpbmFfQm9vbCBlbmFi
bGUpOworCitFQVBJIGNvbnN0IGNoYXIgICpld2tfdmlld19zZXR0aW5nX2VuY29kaW5nX2N1c3Rv
bV9nZXQoY29uc3QgRXZhc19PYmplY3QgKm8pOworRUFQSSBFaW5hX0Jvb2wgICAgZXdrX3ZpZXdf
c2V0dGluZ19lbmNvZGluZ19jdXN0b21fc2V0KEV2YXNfT2JqZWN0ICpvLCBjb25zdCBjaGFyICpl
bmNvZGluZyk7CitFQVBJIGNvbnN0IGNoYXIgICpld2tfdmlld19zZXR0aW5nX2VuY29kaW5nX2Rl
ZmF1bHRfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpvKTsKK0VBUEkgRWluYV9Cb29sICAgIGV3a192
aWV3X3NldHRpbmdfZW5jb2RpbmdfZGVmYXVsdF9zZXQoRXZhc19PYmplY3QgKm8sIGNvbnN0IGNo
YXIgKmVuY29kaW5nKTsKKworRUFQSSBpbnQgICAgICAgICAgZXdrX3ZpZXdfc2V0dGluZ19mb250
X21pbmltdW1fc2l6ZV9nZXQoY29uc3QgRXZhc19PYmplY3QgKm8pOworRUFQSSBFaW5hX0Jvb2wg
ICAgZXdrX3ZpZXdfc2V0dGluZ19mb250X21pbmltdW1fc2l6ZV9zZXQoRXZhc19PYmplY3QgKm8s
IGludCBzaXplKTsKK0VBUEkgaW50ICAgICAgICAgIGV3a192aWV3X3NldHRpbmdfZm9udF9taW5p
bXVtX2xvZ2ljYWxfc2l6ZV9nZXQoY29uc3QgRXZhc19PYmplY3QgKm8pOworRUFQSSBFaW5hX0Jv
b2wgICAgZXdrX3ZpZXdfc2V0dGluZ19mb250X21pbmltdW1fbG9naWNhbF9zaXplX3NldChFdmFz
X09iamVjdCAqbywgaW50IHNpemUpOworRUFQSSBpbnQgICAgICAgICAgZXdrX3ZpZXdfc2V0dGlu
Z19mb250X2RlZmF1bHRfc2l6ZV9nZXQoY29uc3QgRXZhc19PYmplY3QgKm8pOworRUFQSSBFaW5h
X0Jvb2wgICAgZXdrX3ZpZXdfc2V0dGluZ19mb250X2RlZmF1bHRfc2l6ZV9zZXQoRXZhc19PYmpl
Y3QgKm8sIGludCBzaXplKTsKK0VBUEkgaW50ICAgICAgICAgIGV3a192aWV3X3NldHRpbmdfZm9u
dF9tb25vc3BhY2Vfc2l6ZV9nZXQoY29uc3QgRXZhc19PYmplY3QgKm8pOworRUFQSSBFaW5hX0Jv
b2wgICAgZXdrX3ZpZXdfc2V0dGluZ19mb250X21vbm9zcGFjZV9zaXplX3NldChFdmFzX09iamVj
dCAqbywgaW50IHNpemUpOworCitFQVBJIGNvbnN0IGNoYXIgICpld2tfdmlld19zZXR0aW5nX2Zv
bnRfc3RhbmRhcmRfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpvKTsKK0VBUEkgRWluYV9Cb29sICAg
IGV3a192aWV3X3NldHRpbmdfZm9udF9zdGFuZGFyZF9zZXQoRXZhc19PYmplY3QgKm8sIGNvbnN0
IGNoYXIgKmZhbWlseSk7CisKK0VBUEkgY29uc3QgY2hhciAgKmV3a192aWV3X3NldHRpbmdfZm9u
dF9jdXJzaXZlX2dldChjb25zdCBFdmFzX09iamVjdCAqbyk7CitFQVBJIEVpbmFfQm9vbCAgICBl
d2tfdmlld19zZXR0aW5nX2ZvbnRfY3Vyc2l2ZV9zZXQoRXZhc19PYmplY3QgKm8sIGNvbnN0IGNo
YXIgKmZhbWlseSk7CisKK0VBUEkgY29uc3QgY2hhciAgKmV3a192aWV3X3NldHRpbmdfZm9udF9t
b25vc3BhY2VfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpvKTsKK0VBUEkgRWluYV9Cb29sICAgIGV3
a192aWV3X3NldHRpbmdfZm9udF9tb25vc3BhY2Vfc2V0KEV2YXNfT2JqZWN0ICpvLCBjb25zdCBj
aGFyICpmYW1pbHkpOworCitFQVBJIGNvbnN0IGNoYXIgICpld2tfdmlld19zZXR0aW5nX2ZvbnRf
ZmFudGFzeV9nZXQoY29uc3QgRXZhc19PYmplY3QgKm8pOworRUFQSSBFaW5hX0Jvb2wgICAgZXdr
X3ZpZXdfc2V0dGluZ19mb250X2ZhbnRhc3lfc2V0KEV2YXNfT2JqZWN0ICpvLCBjb25zdCBjaGFy
ICpmYW1pbHkpOworCitFQVBJIGNvbnN0IGNoYXIgICpld2tfdmlld19zZXR0aW5nX2ZvbnRfc2Vy
aWZfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpvKTsKK0VBUEkgRWluYV9Cb29sICAgIGV3a192aWV3
X3NldHRpbmdfZm9udF9zZXJpZl9zZXQoRXZhc19PYmplY3QgKm8sIGNvbnN0IGNoYXIgKmZhbWls
eSk7CisKK0VBUEkgY29uc3QgY2hhciAgKmV3a192aWV3X3NldHRpbmdfZm9udF9zYW5zX3Nlcmlm
X2dldChjb25zdCBFdmFzX09iamVjdCAqbyk7CitFQVBJIEVpbmFfQm9vbCAgICBld2tfdmlld19z
ZXR0aW5nX2ZvbnRfc2Fuc19zZXJpZl9zZXQoRXZhc19PYmplY3QgKm8sIGNvbnN0IGNoYXIgKmZh
bWlseSk7CisKKy8qIHRvIGJlIHVzZWQgYnkgc3ViY2xhc3MgaW1wbGVtZW50YXRpb25zICovCitF
QVBJIEV3a19WaWV3X1NtYXJ0X0RhdGEgKmV3a192aWV3X3NtYXJ0X2RhdGFfZ2V0KGNvbnN0IEV2
YXNfT2JqZWN0ICpvKTsKKworRUFQSSBjb25zdCBFaW5hX1JlY3RhbmdsZSAqZXdrX3ZpZXdfcmVw
YWludHNfZ2V0KGNvbnN0IEV3a19WaWV3X1ByaXZhdGVfRGF0YSAqcHJpdiwgc2l6ZV90ICpjb3Vu
dCk7CitFQVBJIGNvbnN0IEV3a19TY3JvbGxfUmVxdWVzdCAqZXdrX3ZpZXdfc2Nyb2xsX3JlcXVl
c3RzX2dldChjb25zdCBFd2tfVmlld19Qcml2YXRlX0RhdGEgKnByaXYsIHNpemVfdCAqY291bnQp
OworCitFQVBJIHZvaWQgZXdrX3ZpZXdfcmVwYWludF9hZGQoRXdrX1ZpZXdfUHJpdmF0ZV9EYXRh
ICpwcml2LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgRXZhc19Db29yZCB3LCBFdmFzX0Nv
b3JkIGgpOworCitFQVBJIHZvaWQgZXdrX3ZpZXdfbGF5b3V0X2lmX25lZWRlZF9yZWN1cnNpdmUo
RXdrX1ZpZXdfUHJpdmF0ZV9EYXRhICpwcml2KTsKKworRUFQSSB2b2lkIGV3a192aWV3X3Njcm9s
bHNfcHJvY2VzcyhFd2tfVmlld19TbWFydF9EYXRhICpzZCk7CisKKy8qKgorICogU3RydWN0dXJl
IHRoYXQga2VlcHMgcGFpbnQgY29udGV4dC4KKyAqCisgKiBAbm90ZSB0aGlzIGlzIG5vdCBmb3Ig
Z2VuZXJhbCB1c2UgYnV0IGp1c3QgZm9yIHN1YmNsYXNzZXMgdGhhdCB3YW50CisgKiAgICAgICB0
byBkZWZpbmUgdGhlaXIgb3duIGJhY2tpbmcgc3RvcmUuCisgKi8KK3R5cGVkZWYgc3RydWN0IF9F
d2tfVmlld19QYWludF9Db250ZXh0IEV3a19WaWV3X1BhaW50X0NvbnRleHQ7CisKK0VBUEkgRXdr
X1ZpZXdfUGFpbnRfQ29udGV4dCAqZXdrX3ZpZXdfcGFpbnRfY29udGV4dF9uZXcoRXdrX1ZpZXdf
UHJpdmF0ZV9EYXRhICpwcml2LCBjYWlyb190ICpjcik7CitFQVBJIHZvaWQgZXdrX3ZpZXdfcGFp
bnRfY29udGV4dF9mcmVlKEV3a19WaWV3X1BhaW50X0NvbnRleHQgKmN0eHQpOworCitFQVBJIHZv
aWQgZXdrX3ZpZXdfcGFpbnRfY29udGV4dF9zYXZlKEV3a19WaWV3X1BhaW50X0NvbnRleHQgKmN0
eHQpOworRUFQSSB2b2lkIGV3a192aWV3X3BhaW50X2NvbnRleHRfcmVzdG9yZShFd2tfVmlld19Q
YWludF9Db250ZXh0ICpjdHh0KTsKK0VBUEkgdm9pZCBld2tfdmlld19wYWludF9jb250ZXh0X2Ns
aXAoRXdrX1ZpZXdfUGFpbnRfQ29udGV4dCAqY3R4dCwgY29uc3QgRWluYV9SZWN0YW5nbGUgKmFy
ZWEpOworRUFQSSB2b2lkIGV3a192aWV3X3BhaW50X2NvbnRleHRfcGFpbnQoRXdrX1ZpZXdfUGFp
bnRfQ29udGV4dCAqY3R4dCwgY29uc3QgRWluYV9SZWN0YW5nbGUgKmFyZWEpOworRUFQSSB2b2lk
IGV3a192aWV3X3BhaW50X2NvbnRleHRfcGFpbnRfY29udGVudHMoRXdrX1ZpZXdfUGFpbnRfQ29u
dGV4dCAqY3R4dCwgY29uc3QgRWluYV9SZWN0YW5nbGUgKmFyZWEpOworRUFQSSB2b2lkIGV3a192
aWV3X3BhaW50X2NvbnRleHRfc2NhbGUoRXdrX1ZpZXdfUGFpbnRfQ29udGV4dCAqY3R4dCwgZmxv
YXQgc2NhbGVfeCwgZmxvYXQgc2NhbGVfeSk7CitFQVBJIHZvaWQgZXdrX3ZpZXdfcGFpbnRfY29u
dGV4dF90cmFuc2xhdGUoRXdrX1ZpZXdfUGFpbnRfQ29udGV4dCAqY3R4dCwgZmxvYXQgeCwgZmxv
YXQgeSk7CisKK0VBUEkgRWluYV9Cb29sIGV3a192aWV3X3BhaW50KEV3a19WaWV3X1ByaXZhdGVf
RGF0YSAqcHJpdiwgY2Fpcm9fdCAqY3IsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlICphcmVhKTsKK0VB
UEkgRWluYV9Cb29sIGV3a192aWV3X3BhaW50X2NvbnRlbnRzKEV3a19WaWV3X1ByaXZhdGVfRGF0
YSAqcHJpdiwgY2Fpcm9fdCAqY3IsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlICphcmVhKTsKKworI2lm
ZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZiAvLyBld2tfdmlld19oCmRpZmYgLS1n
aXQgYS9XZWJLaXQvZ3RrL0NoYW5nZUxvZyBiL1dlYktpdC9ndGsvQ2hhbmdlTG9nCmluZGV4IDE1
ZWZmN2MuLjMzYWU1ZmEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvQ2hhbmdlTG9nCisrKyBiL1dl
YktpdC9ndGsvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTAtMDQtMDcgIEFuZHJleSBL
b3N5YWtvdiAgPGNhc2VxQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBZdXJ5
IFNlbWlraGF0c2t5LgorCisgICAgICAgIFJlbW92ZWQgcmVkdW5kYW50IEZyYW1lTG9hZGVyQ2xp
ZW50OjpkaXNwYXRjaERpZExvYWRSZXNvdXJjZUJ5WE1MSHR0cFJlcXVlc3QoKQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzY5NDkKKworICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcDoKKyAgICAgICAgKiBXZWJD
b3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5oOgorCiAyMDEwLTA0LTAxICBHdXN0YXZv
IE5vcm9uaGEgU2lsdmEgIDxndXN0YXZvLm5vcm9uaGFAY29sbGFib3JhLmNvLnVrPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IEhvbGdlciBGcmV5dGhlci4KZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsv
V2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwIGIvV2ViS2l0L2d0ay9XZWJD
b3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAKaW5kZXggOWNiMjFmNy4uODRjNDMy
MyAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVu
dEd0ay5jcHAKKysrIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVu
dEd0ay5jcHAKQEAgLTk0NSwxMSArOTQ1LDYgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlz
cGF0Y2hEaWRGYWlsTG9hZGluZyhXZWJDb3JlOjpEb2N1bWVudExvYWRlciogbG9hZGVyLAogICAg
IG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNo
RGlkTG9hZFJlc291cmNlQnlYTUxIdHRwUmVxdWVzdCh1bnNpZ25lZCBsb25nLCBjb25zdCBTY3Jp
cHRTdHJpbmcmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KIGJvb2wgRnJhbWVMb2Fk
ZXJDbGllbnQ6OmRpc3BhdGNoRGlkTG9hZFJlc291cmNlRnJvbU1lbW9yeUNhY2hlKFdlYkNvcmU6
OkRvY3VtZW50TG9hZGVyKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYsIGludCBsZW5ndGgpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKZGlmZiAtLWdp
dCBhL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuaCBiL1dl
YktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuaAppbmRleCBkNWRi
NmQwLi4zODE5YjlmIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1l
TG9hZGVyQ2xpZW50R3RrLmgKKysrIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxv
YWRlckNsaWVudEd0ay5oCkBAIC02OSw3ICs2OSw2IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogICAg
ICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRGaW5pc2hMb2FkaW5nKFdlYkNvcmU6OkRvY3Vt
ZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyAgaWRlbnRpZmllcik7CiAgICAgICAgIHZpcnR1YWwg
dm9pZCBkaXNwYXRjaERpZEZhaWxMb2FkaW5nKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKiwgdW5z
aWduZWQgbG9uZyAgaWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYpOwog
ICAgICAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hEaWRMb2FkUmVzb3VyY2VGcm9tTWVtb3J5Q2Fj
aGUoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgaW50IGxlbmd0aCk7Ci0gICAg
ICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZExvYWRSZXNvdXJjZUJ5WE1MSHR0cFJlcXVlc3Qo
dW5zaWduZWQgbG9uZywgY29uc3QgV2ViQ29yZTo6U2NyaXB0U3RyaW5nJik7CiAKICAgICAgICAg
dmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkSGFuZGxlT25sb2FkRXZlbnRzKCk7CiAgICAgICAgIHZp
cnR1YWwgdm9pZCBkaXNwYXRjaERpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFs
TG9hZCgpOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2hhaWt1L0NoYW5nZUxvZyBiL1dlYktpdC9oYWlr
dS9DaGFuZ2VMb2cKaW5kZXggYTNlZmFlOC4uNjA1YmMwZCAxMDA2NDQKLS0tIGEvV2ViS2l0L2hh
aWt1L0NoYW5nZUxvZworKysgYi9XZWJLaXQvaGFpa3UvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMg
QEAKKzIwMTAtMDQtMDcgIEFuZHJleSBLb3N5YWtvdiAgPGNhc2VxQGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBZdXJ5IFNlbWlraGF0c2t5LgorCisgICAgICAgIFJlbW92ZWQg
cmVkdW5kYW50IEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZExvYWRSZXNvdXJjZUJ5WE1M
SHR0cFJlcXVlc3QoKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MzY5NDkKKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50
SGFpa3UuY3BwOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50SGFp
a3UuaDoKKwogMjAxMC0wMy0zMSAgTWFyY3VzIEJ1bGFjaCAgPGJ1bGFjaEBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSmVyZW15IE9ybG93LgpkaWZmIC0tZ2l0IGEvV2ViS2l0
L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50SGFpa3UuY3BwIGIvV2ViS2l0
L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50SGFpa3UuY3BwCmluZGV4IDc3
YzdjZmMuLjE5NDk0MjEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9oYWlrdS9XZWJDb3JlU3VwcG9ydC9G
cmFtZUxvYWRlckNsaWVudEhhaWt1LmNwcAorKysgYi9XZWJLaXQvaGFpa3UvV2ViQ29yZVN1cHBv
cnQvRnJhbWVMb2FkZXJDbGllbnRIYWlrdS5jcHAKQEAgLTYzNCwxMSArNjM0LDYgQEAgYm9vbCBG
cmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaXNwYXRjaERpZExvYWRSZXNvdXJjZUZyb21NZW1vcnlD
YWNoZShEb2N1bWVudExvYWQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgRnJhbWVMb2Fk
ZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hEaWRMb2FkUmVzb3VyY2VCeVhNTEh0dHBSZXF1ZXN0KHVu
c2lnbmVkIGxvbmcsIGNvbnN0IFNjcmlwdFN0cmluZyYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KLQogdm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaXNwYXRjaERpZEZhaWxQcm92
aXNpb25hbExvYWQoY29uc3QgUmVzb3VyY2VFcnJvciYpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQo
KTsKZGlmZiAtLWdpdCBhL1dlYktpdC9oYWlrdS9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNs
aWVudEhhaWt1LmggYi9XZWJLaXQvaGFpa3UvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGll
bnRIYWlrdS5oCmluZGV4IGRhZGRhMTkuLmNmMmZiMDYgMTAwNjQ0Ci0tLSBhL1dlYktpdC9oYWlr
dS9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEhhaWt1LmgKKysrIGIvV2ViS2l0L2hh
aWt1L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50SGFpa3UuaApAQCAtMTk0LDcgKzE5
NCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBib29sIGRpc3BhdGNo
RGlkTG9hZFJlc291cmNlRnJvbU1lbW9yeUNhY2hlKERvY3VtZW50TG9hZGVyKiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFJlc291cmNlUmVxdWVzdCYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiwgaW50KTsKLSAg
ICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkTG9hZFJlc291cmNlQnlYTUxIdHRwUmVxdWVz
dCh1bnNpZ25lZCBsb25nLCBjb25zdCBTY3JpcHRTdHJpbmcmKTsKIAogICAgICAgICB2aXJ0dWFs
IHZvaWQgZGlzcGF0Y2hEaWRGYWlsUHJvdmlzaW9uYWxMb2FkKGNvbnN0IFJlc291cmNlRXJyb3Im
KTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkRmFpbExvYWQoY29uc3QgUmVzb3Vy
Y2VFcnJvciYpOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L21hYy9DaGFuZ2VMb2cgYi9XZWJLaXQvbWFj
L0NoYW5nZUxvZwppbmRleCBkMGRjMTgwLi4zYzRhNmU3IDEwMDY0NAotLS0gYS9XZWJLaXQvbWFj
L0NoYW5nZUxvZworKysgYi9XZWJLaXQvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU4IEBACisy
MDEwLTA0LTA3ICBBbmRyZXkgS29zeWFrb3YgIDxjYXNlcUBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgWXVyeSBTZW1pa2hhdHNreS4KKworICAgICAgICBSZW1vdmVkIHJlZHVu
ZGFudCBGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRMb2FkUmVzb3VyY2VCeVhNTEh0dHBS
ZXF1ZXN0KCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTM2OTQ5CisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5o
OgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tOgorCisy
MDEwLTA0LTA2ICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CisKKyAgICAgICAgVGln
ZXIgYnVpbGQgZml4IGFmdGVyIHI1NzE4NC4KKworICAgICAgICAqIFdlYlZpZXcvV2ViSFRNTFZp
ZXdQcml2YXRlLmg6CisKKzIwMTAtMDQtMDYgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNv
bT4KKworICAgICAgICBUaWdlciBidWlsZCBmaXggYWZ0ZXIgcjU3MTg0LgorCisgICAgICAgICog
V2ViVmlldy9XZWJIVE1MVmlld1ByaXZhdGUuaDoKKworMjAxMC0wNC0wNiAgQWRhbSBCYXJ0aCAg
PGFiYXJ0aEB3ZWJraXQub3JnPgorCisgICAgICAgIFVucmV2aWV3ZWQuCisKKyAgICAgICAgU3Bl
Y3VsYXRpdmUgYnVpbGQgZml4IGZvciBUaWdlci4KKworICAgICAgICAqIFdlYlZpZXcvV2ViSFRN
TFZpZXdQcml2YXRlLmg6CisKKzIwMTAtMDQtMDYgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBTYW0gV2VpbmlnIGFuZCBBbmRlcnMgQ2FybHNz
b24uCisKKyAgICAgICAgRXhwb3NlIFdlYkhUTUxWaWV34oCZcyBwYWdlIGJyZWFraW5nIGxvZ2lj
IGFzIFNQSS4KKworICAgICAgICAqIFdlYlZpZXcvV2ViSFRNTFZpZXcubW06CisgICAgICAgICgt
W1dlYkhUTUxWaWV3IF9hZGp1c3RlZEJvdHRvbU9mUGFnZVdpdGhUb3A6Ym90dG9tOmxpbWl0Ol0p
OiBGYWN0b3JlZCBvdXQgb2YgLWFkanVzdFBhZ2VIZWlnaHROZXc6dG9wOmJvdHRvbTpsaW1pdDoK
KyAgICAgICAgKC1bV2ViSFRNTFZpZXcgYWRqdXN0UGFnZUhlaWdodE5ldzp0b3A6Ym90dG9tOmxp
bWl0Ol0pOiBDYWxsIC1fYWRqdXN0ZWRCb3R0b21PZlBhZ2VXaXRoVG9wOmJvdHRvbTpsaW1pdDoK
KyAgICAgICAgKiBXZWJWaWV3L1dlYkhUTUxWaWV3UHJpdmF0ZS5oOiBEZWNsYXJlZCAtX2FkanVz
dGVkQm90dG9tT2ZQYWdlV2l0aFRvcDpib3R0b206bGltaXQ6CisKKzIwMTAtMDQtMDYgIE1hcmsg
Um93ZSAgPG1yb3dlQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgYW4gI2lmIGluIG9yZGVyIHRv
IG1ha2UgVGlnZXIgaGFwcHkuCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXdEYXRhLm1tOgor
ICAgICAgICAoLVtXZWJWaWV3UHJpdmF0ZSBpbml0XSk6CisKKzIwMTAtMDQtMDYgIE1hcmsgUm93
ZSAgPG1yb3dlQGFwcGxlLmNvbT4KKworICAgICAgICBCdWlsZCBmaXguCisKKyAgICAgICAgKiBX
ZWJWaWV3L1dlYlZpZXdEYXRhLm1tOgorICAgICAgICAoLVtXZWJWaWV3UHJpdmF0ZSBpbml0XSk6
IFVzZSBvYmpjX2NvbGxlY3RpbmdFbmFibGVkIGxpa2Ugd2UgZG8gZWxzZXdoZXJlIGluIFdlYktp
dC4KKwogMjAxMC0wNC0wNSAgTWFyayBSb3dlICA8bXJvd2VAYXBwbGUuY29tPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IEFkZWxlIFBldGVyc29uLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L21hYy9XZWJD
b3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5oIGIvV2ViS2l0L21hYy9XZWJDb3JlU3Vw
cG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5oCmluZGV4IDk4OGI4YTYuLmQ0OTc1MTMgMTAwNjQ0
Ci0tLSBhL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuaAor
KysgYi9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmgKQEAg
LTEyNiw3ICsxMjYsNiBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCByZXZlcnRUb1Byb3Zp
c2lvbmFsU3RhdGUoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqKTsKICAgICB2aXJ0dWFsIHZvaWQg
c2V0TWFpbkRvY3VtZW50RXJyb3IoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqLCBjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZUVycm9yJik7CiAgICAgdmlydHVhbCBib29sIGRpc3BhdGNoRGlkTG9hZFJl
c291cmNlRnJvbU1lbW9yeUNhY2hlKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKiwgY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYs
IGludCBsZW5ndGgpOwotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZExvYWRSZXNvdXJjZUJ5
WE1MSHR0cFJlcXVlc3QodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpT
Y3JpcHRTdHJpbmcmKTsKIAogICAgIHZpcnR1YWwgdm9pZCB3aWxsQ2hhbmdlRXN0aW1hdGVkUHJv
Z3Jlc3MoKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlRXN0aW1hdGVkUHJvZ3Jlc3MoKTsK
ZGlmZiAtLWdpdCBhL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGll
bnQubW0gYi9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1t
CmluZGV4IDQ2ZTJjNGIuLjAwODhlYWUgMTAwNjQ0Ci0tLSBhL1dlYktpdC9tYWMvV2ViQ29yZVN1
cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW0KKysrIGIvV2ViS2l0L21hYy9XZWJDb3JlU3Vw
cG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5tbQpAQCAtMzQ4LDEwICszNDgsNiBAQCBib29sIFdl
YkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZExvYWRSZXNvdXJjZUZyb21NZW1vcnlDYWNo
ZShEb2N1bWVudExvYWRlcgogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFdlYkZyYW1lTG9h
ZGVyQ2xpZW50OjpkaXNwYXRjaERpZExvYWRSZXNvdXJjZUJ5WE1MSHR0cFJlcXVlc3QodW5zaWdu
ZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBTY3JpcHRTdHJpbmcmIHNvdXJjZVN0cmluZykKLXsK
LX0KLQogdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6YXNzaWduSWRlbnRpZmllclRvSW5pdGlh
bFJlcXVlc3QodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBEb2N1bWVudExvYWRlciogbG9hZGVy
LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7CiAgICAgV2ViVmlldyAqd2ViVmll
dyA9IGdldFdlYlZpZXcobV93ZWJGcmFtZS5nZXQoKSk7CmRpZmYgLS1naXQgYS9XZWJLaXQvbWFj
L1dlYlZpZXcvV2ViSFRNTFZpZXcubW0gYi9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcu
bW0KaW5kZXggNGMwNmViZi4uMWUxYjlmMyAxMDA2NDQKLS0tIGEvV2ViS2l0L21hYy9XZWJWaWV3
L1dlYkhUTUxWaWV3Lm1tCisrKyBiL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQpA
QCAtMjIwMiw2ICsyMjAyLDI5IEBAIHN0YXRpYyB2b2lkIF91cGRhdGVNb3VzZW92ZXJUaW1lckNh
bGxiYWNrKENGUnVuTG9vcFRpbWVyUmVmIHRpbWVyLCB2b2lkICppbmZvKQogI2VuZGlmCiB9CiAK
Ky0gKENHRmxvYXQpX2FkanVzdGVkQm90dG9tT2ZQYWdlV2l0aFRvcDooQ0dGbG9hdCl0b3AgYm90
dG9tOihDR0Zsb2F0KWJvdHRvbSBsaW1pdDooQ0dGbG9hdClib3R0b21MaW1pdAoreworICAgIEZy
YW1lKiBmcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAg
ICAgcmV0dXJuIGJvdHRvbTsKKworICAgIEZyYW1lVmlldyogdmlldyA9IGZyYW1lLT52aWV3KCk7
CisgICAgaWYgKCF2aWV3KQorICAgICAgICByZXR1cm4gYm90dG9tOworCisgICAgZmxvYXQgbmV3
Qm90dG9tOworICAgIHZpZXctPmFkanVzdFBhZ2VIZWlnaHQoJm5ld0JvdHRvbSwgdG9wLCBib3R0
b20sIGJvdHRvbUxpbWl0KTsKKworI2lmZGVmIF9fTFA2NF9fCisgICAgLy8gSWYgdGhlIG5ldyBi
b3R0b20gaXMgZXF1YWwgdG8gdGhlIG9sZCBib3R0b20gKHdoZW4gYm90aCBhcmUgdHJlYXRlZCBh
cyBmbG9hdHMpLCB3ZSBqdXN0IHJldHVybiB0aGUgb3JpZ2luYWwKKyAgICAvLyBib3R0b20uIFRo
aXMgcHJldmVudHMgcm91bmRpbmcgZXJyb3JzIHRoYXQgY2FuIG9jY3VyIHdoZW4gY29udmVydGlu
ZyBuZXdCb3R0b20gdG8gYSBkb3VibGUuCisgICAgaWYgKGZhYnMoc3RhdGljX2Nhc3Q8ZmxvYXQ+
KGJvdHRvbSkgLSBuZXdCb3R0b20pIDw9IG51bWVyaWNfbGltaXRzPGZsb2F0Pjo6ZXBzaWxvbigp
KSAKKyAgICAgICAgcmV0dXJuIGJvdHRvbTsKKyAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgcmV0
dXJuIG5ld0JvdHRvbTsKK30KKwogQGVuZAogCiBAaW1wbGVtZW50YXRpb24gTlNWaWV3IChXZWJI
VE1MVmlld0ZpbGVJbnRlcm5hbCkKQEAgLTM3OTIsMjEgKzM4MTUsOCBAQCBzdGF0aWMgQk9PTCBp
c0luUGFzc3dvcmRGaWVsZChGcmFtZSogY29yZUZyYW1lKQogICAgIGlmICghd2FzSW5QcmludGlu
Z01vZGUpCiAgICAgICAgIFtzZWxmIF9zZXRQcmludGluZzpZRVMgbWluaW11bVBhZ2VXaWR0aDow
LjBmIG1heGltdW1QYWdlV2lkdGg6MC4wZiBhZGp1c3RWaWV3U2l6ZTpOT107CiAKLSAgICBmbG9h
dCBuZXdCb3R0b21GbG9hdCA9ICpuZXdCb3R0b207Ci0gICAgaWYgKEZyYW1lKiBmcmFtZSA9IGNv
cmUoW3NlbGYgX2ZyYW1lXSkpIHsKLSAgICAgICAgaWYgKEZyYW1lVmlldyogdmlldyA9IGZyYW1l
LT52aWV3KCkpCi0gICAgICAgICAgICB2aWV3LT5hZGp1c3RQYWdlSGVpZ2h0KCZuZXdCb3R0b21G
bG9hdCwgb2xkVG9wLCBvbGRCb3R0b20sIGJvdHRvbUxpbWl0KTsKLSAgICB9CisgICAgKm5ld0Jv
dHRvbSA9IFtzZWxmIF9hZGp1c3RlZEJvdHRvbU9mUGFnZVdpdGhUb3A6b2xkVG9wIGJvdHRvbTpv
bGRCb3R0b20gbGltaXQ6Ym90dG9tTGltaXRdOwogCi0jaWZkZWYgX19MUDY0X18KLSAgICAvLyBJ
ZiB0aGUgbmV3IGJvdHRvbSBpcyBlcXVhbCB0byB0aGUgb2xkIGJvdHRvbSAod2hlbiBib3RoIGFy
ZSB0cmVhdGVkIGFzIGZsb2F0cyksIHdlIGp1c3QgY29weQotICAgIC8vIG9sZEJvdHRvbSBvdmVy
IHRvIG5ld0JvdHRvbS4gVGhpcyBwcmV2ZW50cyByb3VuZGluZyBlcnJvcnMgdGhhdCBjYW4gb2Nj
dXIgd2hlbiBjb252ZXJ0aW5nIG5ld0JvdHRvbUZsb2F0IHRvIGEgZG91YmxlLgotICAgIGlmIChm
YWJzKChmbG9hdClvbGRCb3R0b20gLSBuZXdCb3R0b21GbG9hdCkgPD0gbnVtZXJpY19saW1pdHM8
ZmxvYXQ+OjplcHNpbG9uKCkpIAotICAgICAgICAqbmV3Qm90dG9tID0gb2xkQm90dG9tOwotICAg
IGVsc2UKLSNlbmRpZgotICAgICAgICAqbmV3Qm90dG9tID0gbmV3Qm90dG9tRmxvYXQ7Ci0gICAg
CiAgICAgaWYgKCF3YXNJblByaW50aW5nTW9kZSkgewogICAgICAgICBOU1ByaW50T3BlcmF0aW9u
ICpjdXJyZW5QcmludE9wZXJhdGlvbiA9IFtOU1ByaW50T3BlcmF0aW9uIGN1cnJlbnRPcGVyYXRp
b25dOwogICAgICAgICBpZiAoY3VycmVuUHJpbnRPcGVyYXRpb24pCmRpZmYgLS1naXQgYS9XZWJL
aXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXdQcml2YXRlLmggYi9XZWJLaXQvbWFjL1dlYlZpZXcv
V2ViSFRNTFZpZXdQcml2YXRlLmgKaW5kZXggY2IxMjFkOC4uYWYyZTVmZCAxMDA2NDQKLS0tIGEv
V2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3UHJpdmF0ZS5oCisrKyBiL1dlYktpdC9tYWMv
V2ViVmlldy9XZWJIVE1MVmlld1ByaXZhdGUuaApAQCAtMzIsNiArMzIsMTIgQEAKICNkZWZpbmUg
RU5BQkxFX05FVFNDQVBFX1BMVUdJTl9BUEkgMQogI2VuZGlmCiAKKyNpZiBNQUNfT1NfWF9WRVJT
SU9OX01BWF9BTExPV0VEIDw9IE1BQ19PU19YX1ZFUlNJT05fMTBfNAorI2RlZmluZSBXZWJDR0Zs
b2F0IGZsb2F0CisjZWxzZQorI2RlZmluZSBXZWJDR0Zsb2F0IENHRmxvYXQKKyNlbmRpZgorCiBA
Y2xhc3MgRE9NRG9jdW1lbnRGcmFnbWVudDsKIEBjbGFzcyBET01Ob2RlOwogQGNsYXNzIERPTVJh
bmdlOwpAQCAtMTI0LDcgKzEzMCwxMCBAQAogLy8gZGlyZWN0bHksIHRoaXMgbWV0aG9kIG11c3Qg
YmUgY2FsbGVkIGJlZm9yZSBwYWdpbmF0aW5nLCBvciB0aGUgY29tcHV0ZWQgaGVpZ2h0IG1pZ2h0
IGJlIGluY29ycmVjdC4KIC8vIFR5cGljYWxseSB0aGlzIHdvdWxkIGJlIGNhbGxlZCBmcm9tIGlu
c2lkZSBhbiBvdmVycmlkZSBvZiAtW05TVmlldyBrbm93c1BhZ2VSYW5nZTpdLgogLSAodm9pZClf
bGF5b3V0Rm9yUHJpbnRpbmc7CistIChXZWJDR0Zsb2F0KV9hZGp1c3RlZEJvdHRvbU9mUGFnZVdp
dGhUb3A6KFdlYkNHRmxvYXQpdG9wIGJvdHRvbTooV2ViQ0dGbG9hdClib3R0b20gbGltaXQ6KFdl
YkNHRmxvYXQpYm90dG9tTGltaXQ7CiAKIC0gKEJPT0wpX2NhblNtYXJ0UmVwbGFjZVdpdGhQYXN0
ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkOwogCiBAZW5kCisKKyN1bmRlZiBXZWJD
R0Zsb2F0CmRpZmYgLS1naXQgYS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0RhdGEubW0gYi9X
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0RhdGEubW0KaW5kZXggMjFiYTRjOC4uYmY4MWRhZCAx
MDA2NDQKLS0tIGEvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdEYXRhLm1tCisrKyBiL1dlYktp
dC9tYWMvV2ViVmlldy9XZWJWaWV3RGF0YS5tbQpAQCAtNjUsNyArNjUsMTEgQEAgaW50IHBsdWdp
bkRhdGFiYXNlQ2xpZW50Q291bnQgPSAwOwogICAgIGRhc2hib2FyZEJlaGF2aW9yQWxsb3dXaGVl
bFNjcm9sbGluZyA9IFlFUzsKICNlbmRpZgogCi0gICAgc2hvdWxkQ2xvc2VXaXRoV2luZG93ID0g
b2JqY19jb2xsZWN0aW5nX2VuYWJsZWQoKTsKKyNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdF
UikKKyAgICBzaG91bGRDbG9zZVdpdGhXaW5kb3cgPSBvYmpjX2NvbGxlY3RpbmdFbmFibGVkKCk7
CisjZWxzZQorICAgIHNob3VsZENsb3NlV2l0aFdpbmRvdyA9IE5POworI2VuZGlmCiAKICAgICBz
bWFydEluc2VydERlbGV0ZUVuYWJsZWQgPSAhW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJE
ZWZhdWx0c10gb2JqZWN0Rm9yS2V5OldlYlNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZF0KICAgICAg
ICAgfHwgW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gYm9vbEZvcktleTpX
ZWJTbWFydEluc2VydERlbGV0ZUVuYWJsZWRdOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L0NoYW5n
ZUxvZyBiL1dlYktpdC9xdC9DaGFuZ2VMb2cKaW5kZXggNWQwMTRkMi4uNGI0YjZlYiAxMDA2NDQK
LS0tIGEvV2ViS2l0L3F0L0NoYW5nZUxvZworKysgYi9XZWJLaXQvcXQvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNDMgQEAKKzIwMTAtMDQtMDcgIEFuZHJleSBLb3N5YWtvdiAgPGNhc2VxQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBZdXJ5IFNlbWlraGF0c2t5LgorCisgICAgICAg
IFJlbW92ZWQgcmVkdW5kYW50IEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZExvYWRSZXNv
dXJjZUJ5WE1MSHR0cFJlcXVlc3QoKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MzY5NDkKKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9h
ZGVyQ2xpZW50UXQuY3BwOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xp
ZW50UXQuaDoKKworMjAxMC0wNC0wNyAgRGF3aXQgQWxlbWF5ZWh1ICA8YWRhd2l0QGtkZS5vcmc+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gSGF1c21hbm4uCisKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM2ODI3CisKKyAgICAgICAgVXBkYXRl
ZCB0aGUgV2ViQ29yZTo6c2hvdWxkVHJlYXRBc0F0dGFjaGVtZW50IGZ1bmN0aW9uIGNhbGwgd2l0
aCB0aGUKKyAgICAgICAgbmV3IG1vcmUgZ2VuZXJpYyByZXBsYWNlbWVudCBXZWJDb3JlOjpjb250
ZW50RGlzcG9zaXRpb25UeXBlLgorCisgICAgICAgIFNlZSBjb21tZW50cyAzOS00MiBpbiBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzYzOTUKKworICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVMb2FkZXJDbGllbnRRdDo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JNSU1FVHlwZSk6CisK
KzIwMTAtMDQtMDcgIEFuZHJlYXMgS2xpbmcgIDxhbmRyZWFzLmtsaW5nQG5va2lhLmNvbT4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBTaW1vbiBIYXVzbWFubi4KKworICAgICAgICBbUXRdIFdoZW4g
cHJvdmlkaW5nIGEgd2lkZ2V0IGZvciB0aGUgUERGIG1pbWUgdHlwZSBpdCB3aWxsIGNhdXNlIGEg
Y3Jhc2gKKworICAgICAgICBtX3BsdWdpblZpZXcgbWF5IGFjdHVhbGx5IGJlIGEgV2lkZ2V0IChm
b3IgZW1iZWRkZWQgUXQgd2lkZ2V0cyksCisgICAgICAgIHNvIGFsd2F5cyBjaGVjayBpc1BsdWdp
blZpZXcoKSBiZWZvcmUgY2FsbGluZyBQbHVnaW5WaWV3IHNwZWNpZmljIG1ldGhvZHMuCisKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI5NDUwCisKKyAg
ICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50UXQ6OmZpbmlzaGVkTG9hZGluZyk6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudFF0OjpzZXRNYWluRG9jdW1lbnRFcnJvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudFF0Ojpjb21taXR0ZWRMb2FkKToKKwog
MjAxMC0wNC0wNiAgRGllZ28gR29uemFsZXogIDxkaWVnby5nb256YWxlekBvcGVuYm9zc2Eub3Jn
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEhhdXNtYW5uLgpkaWZmIC0tZ2l0IGEvV2Vi
S2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwIGIvV2ViS2l0L3F0
L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwCmluZGV4IGM1YzU3MzkuLmY0
NGZhNjggMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNs
aWVudFF0LmNwcAorKysgYi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGll
bnRRdC5jcHAKQEAgLTUxNyw3ICs1MTcsOCBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmZp
bmlzaGVkTG9hZGluZyhEb2N1bWVudExvYWRlciogbG9hZGVyKQogICAgICAgICB9CiAgICAgfQog
ICAgIGVsc2UgewotICAgICAgICBtX3BsdWdpblZpZXctPmRpZEZpbmlzaExvYWRpbmcoKTsKKyAg
ICAgICAgaWYgKG1fcGx1Z2luVmlldy0+aXNQbHVnaW5WaWV3KCkpCisgICAgICAgICAgICBtX3Bs
dWdpblZpZXctPmRpZEZpbmlzaExvYWRpbmcoKTsKICAgICAgICAgbV9wbHVnaW5WaWV3ID0gMDsK
ICAgICAgICAgbV9oYXNTZW50UmVzcG9uc2VUb1BsdWdpbiA9IGZhbHNlOwogICAgIH0KQEAgLTcw
Niw3ICs3MDcsOCBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OnNldE1haW5Eb2N1bWVudEVy
cm9yKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKiBsb2FkZXIsCiAgICAgICAgICAgICBtX2ZpcnN0
RGF0YSA9IGZhbHNlOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgbV9wbHVnaW5W
aWV3LT5kaWRGYWlsKGVycm9yKTsKKyAgICAgICAgaWYgKG1fcGx1Z2luVmlldy0+aXNQbHVnaW5W
aWV3KCkpCisgICAgICAgICAgICBtX3BsdWdpblZpZXctPmRpZEZhaWwoZXJyb3IpOwogICAgICAg
ICBtX3BsdWdpblZpZXcgPSAwOwogICAgICAgICBtX2hhc1NlbnRSZXNwb25zZVRvUGx1Z2luID0g
ZmFsc2U7CiAgICAgfQpAQCAtNzI2LDcgKzcyOCw3IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRR
dDo6Y29tbWl0dGVkTG9hZChXZWJDb3JlOjpEb2N1bWVudExvYWRlciogbG9hZGVyLCBjb25zdCBj
CiAgICAgfQogICAgIAogICAgIC8vIFdlIHJlLWNoZWNrIGhlcmUgYXMgdGhlIHBsdWdpbiBjYW4g
aGF2ZSBiZWVuIGNyZWF0ZWQKLSAgICBpZiAobV9wbHVnaW5WaWV3KSB7CisgICAgaWYgKG1fcGx1
Z2luVmlldyAmJiBtX3BsdWdpblZpZXctPmlzUGx1Z2luVmlldygpKSB7CiAgICAgICAgIGlmICgh
bV9oYXNTZW50UmVzcG9uc2VUb1BsdWdpbikgewogICAgICAgICAgICAgbV9wbHVnaW5WaWV3LT5k
aWRSZWNlaXZlUmVzcG9uc2UobG9hZGVyLT5yZXNwb25zZSgpKTsKICAgICAgICAgICAgIC8vIGRp
ZFJlY2VpdmVSZXNwb25zZSBzZXRzIHVwIGEgbmV3IHN0cmVhbSB0byB0aGUgcGx1Zy1pbi4gb24g
YSBmdWxsLXBhZ2UgcGx1Zy1pbiwgYSBmYWlsdXJlIGluCkBAIC04OTUsMTEgKzg5Nyw2IEBAIGJv
b2wgRnJhbWVMb2FkZXJDbGllbnRRdDo6ZGlzcGF0Y2hEaWRMb2FkUmVzb3VyY2VGcm9tTWVtb3J5
Q2FjaGUoV2ViQ29yZTo6RG9jdW1lCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEZyYW1l
TG9hZGVyQ2xpZW50UXQ6OmRpc3BhdGNoRGlkTG9hZFJlc291cmNlQnlYTUxIdHRwUmVxdWVzdCh1
bnNpZ25lZCBsb25nLCBjb25zdCBXZWJDb3JlOjpTY3JpcHRTdHJpbmcmKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRRdDo6Y2FsbEVycm9yUGFn
ZUV4dGVuc2lvbihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJiBlcnJvcikKIHsKICAgICBR
V2ViUGFnZSogcGFnZSA9IG1fd2ViRnJhbWUtPnBhZ2UoKTsKQEAgLTk2Nyw4ICs5NjQsOSBAQCBX
ZWJDb3JlOjpGcmFtZSogRnJhbWVMb2FkZXJDbGllbnRRdDo6ZGlzcGF0Y2hDcmVhdGVQYWdlKCkK
IHZvaWQgRnJhbWVMb2FkZXJDbGllbnRRdDo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JNSU1FVHlw
ZShGcmFtZVBvbGljeUZ1bmN0aW9uIGZ1bmN0aW9uLCBjb25zdCBXZWJDb3JlOjpTdHJpbmcmIE1J
TUVUeXBlLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKQogewogICAgIC8vIHdlIG5l
ZWQgdG8gY2FsbCBkaXJlY3RseSBoZXJlCi0gICAgaWYgKFdlYkNvcmU6OnNob3VsZFRyZWF0QXNB
dHRhY2htZW50KG1fZnJhbWUtPmxvYWRlcigpLT5hY3RpdmVEb2N1bWVudExvYWRlcigpLT5yZXNw
b25zZSgpKSkKLSAgICAgICAgY2FsbFBvbGljeUZ1bmN0aW9uKGZ1bmN0aW9uLCBQb2xpY3lEb3du
bG9hZCk7ICAgIAorICAgIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlID0gbV9mcmFt
ZS0+bG9hZGVyKCktPmFjdGl2ZURvY3VtZW50TG9hZGVyKCktPnJlc3BvbnNlKCk7CisgICAgaWYg
KFdlYkNvcmU6OmNvbnRlbnREaXNwb3NpdGlvblR5cGUocmVzcG9uc2UuaHR0cEhlYWRlckZpZWxk
KCJDb250ZW50LURpc3Bvc2l0aW9uIikpID09IFdlYkNvcmU6OkNvbnRlbnREaXNwb3NpdGlvbkF0
dGFjaG1lbnQpCisgICAgICAgIGNhbGxQb2xpY3lGdW5jdGlvbihmdW5jdGlvbiwgUG9saWN5RG93
bmxvYWQpOwogICAgIGVsc2UgaWYgKGNhblNob3dNSU1FVHlwZShNSU1FVHlwZSkpCiAgICAgICAg
IGNhbGxQb2xpY3lGdW5jdGlvbihmdW5jdGlvbiwgUG9saWN5VXNlKTsKICAgICBlbHNlCmRpZmYg
LS1naXQgYS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5oIGIv
V2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuaAppbmRleCBhZGVi
MzFjLi4yNzU2ODcxIDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVM
b2FkZXJDbGllbnRRdC5oCisrKyBiL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRl
ckNsaWVudFF0LmgKQEAgLTk2LDcgKzk2LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRGaW5pc2hMb2FkaW5nKFdlYkNvcmU6OkRvY3VtZW50
TG9hZGVyKiwgdW5zaWduZWQgbG9uZyk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERp
ZEZhaWxMb2FkaW5nKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZywgY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0
Y2hEaWRMb2FkUmVzb3VyY2VGcm9tTWVtb3J5Q2FjaGUoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIq
LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZVJlc3BvbnNlJiwgaW50KTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkTG9hZFJl
c291cmNlQnlYTUxIdHRwUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFdl
YkNvcmU6OlNjcmlwdFN0cmluZyYgc291cmNlU3RyaW5nKTsKIAogICAgICAgICB2aXJ0dWFsIHZv
aWQgZGlzcGF0Y2hEaWRIYW5kbGVPbmxvYWRFdmVudHMoKTsKICAgICAgICAgdmlydHVhbCB2b2lk
IGRpc3BhdGNoRGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxMb2FkKCk7CmRp
ZmYgLS1naXQgYS9XZWJLaXQvd2luL0NoYW5nZUxvZyBiL1dlYktpdC93aW4vQ2hhbmdlTG9nCmlu
ZGV4IGE0ODY1NWIuLjNjZGE1NWUgMTAwNjQ0Ci0tLSBhL1dlYktpdC93aW4vQ2hhbmdlTG9nCisr
KyBiL1dlYktpdC93aW4vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTAtMDQtMDcgIEFu
ZHJleSBLb3N5YWtvdiAgPGNhc2VxQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBZdXJ5IFNlbWlraGF0c2t5LgorCisgICAgICAgIFJlbW92ZWQgcmVkdW5kYW50IEZyYW1lTG9h
ZGVyQ2xpZW50OjpkaXNwYXRjaERpZExvYWRSZXNvdXJjZUJ5WE1MSHR0cFJlcXVlc3QoKQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzY5NDkKKworICAg
ICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcDoKKyAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5oOgorCiAyMDEwLTA0LTA1ICBQ
ZXRlciBOZWxzb24gIDxjaGFybi5vcGNvZGVAZ21haWwuY29tPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IEVyaWMgU2VpZGVsLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9X
ZWJGcmFtZUxvYWRlckNsaWVudC5jcHAgYi9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkZy
YW1lTG9hZGVyQ2xpZW50LmNwcAppbmRleCBlMTAyMzkwLi40NzUyMDQwIDEwMDY0NAotLS0gYS9X
ZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcAorKysgYi9X
ZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcApAQCAtMjQz
LDEwICsyNDMsNiBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZEZhaWxM
b2FkaW5nKERvY3VtZW50TG9hZGVyKiBsb2FkZXIsIHVuc2lnbgogICAgIHJlc291cmNlTG9hZERl
bGVnYXRlLT5kaWRGYWlsTG9hZGluZ1dpdGhFcnJvcih3ZWJWaWV3LCBpZGVudGlmaWVyLCB3ZWJF
cnJvci5nZXQoKSwgZ2V0V2ViRGF0YVNvdXJjZShsb2FkZXIpKTsKIH0KIAotdm9pZCBXZWJGcmFt
ZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRMb2FkUmVzb3VyY2VCeVhNTEh0dHBSZXF1ZXN0KHVu
c2lnbmVkIGxvbmcsIGNvbnN0IFNjcmlwdFN0cmluZyYpCi17Ci19Ci0KIGJvb2wgV2ViRnJhbWVM
b2FkZXJDbGllbnQ6OnNob3VsZENhY2hlUmVzcG9uc2UoRG9jdW1lbnRMb2FkZXIqIGxvYWRlciwg
dW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25z
ZSwgY29uc3QgdW5zaWduZWQgY2hhciogZGF0YSwgY29uc3QgdW5zaWduZWQgbG9uZyBsb25nIGxl
bmd0aCkKIHsKICAgICBXZWJWaWV3KiB3ZWJWaWV3ID0gbV93ZWJGcmFtZS0+d2ViVmlldygpOwpk
aWZmIC0tZ2l0IGEvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVu
dC5oIGIvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5oCmlu
ZGV4IGE1ZjJiMWIuLjBkODliMmEgMTAwNjQ0Ci0tLSBhL1dlYktpdC93aW4vV2ViQ29yZVN1cHBv
cnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuaAorKysgYi9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0
L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmgKQEAgLTU3LDcgKzU3LDYgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgdm9pZCBkaXNwYXRjaERpZFJlY2VpdmVDb250ZW50TGVuZ3RoKFdlYkNvcmU6OkRvY3Vt
ZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBpbnQgbGVuZ3RoUmVjZWl2ZWQp
OwogICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZEZpbmlzaExvYWRpbmcoV2ViQ29yZTo6RG9j
dW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpOwogICAgIHZpcnR1YWwgdm9p
ZCBkaXNwYXRjaERpZEZhaWxMb2FkaW5nKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKiwgdW5zaWdu
ZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJik7Ci0gICAg
dmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkTG9hZFJlc291cmNlQnlYTUxIdHRwUmVxdWVzdCh1bnNp
Z25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OlNjcmlwdFN0cmluZyYpOwogICAg
IHZpcnR1YWwgYm9vbCBzaG91bGRDYWNoZVJlc3BvbnNlKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVy
KiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3Bv
bnNlJiwgY29uc3QgdW5zaWduZWQgY2hhciogZGF0YSwgdW5zaWduZWQgbG9uZyBsb25nIGxlbmd0
aCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRIYW5kbGVPbmxvYWRFdmVudHMoKTsK
ZGlmZiAtLWdpdCBhL1dlYktpdC93eC9DaGFuZ2VMb2cgYi9XZWJLaXQvd3gvQ2hhbmdlTG9nCmlu
ZGV4IDI3NzdkNDIuLjYxZjVkNDggMTAwNjQ0Ci0tLSBhL1dlYktpdC93eC9DaGFuZ2VMb2cKKysr
IGIvV2ViS2l0L3d4L0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDEwLTA0LTA3ICBBbmRy
ZXkgS29zeWFrb3YgIDxjYXNlcUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
WXVyeSBTZW1pa2hhdHNreS4KKworICAgICAgICBSZW1vdmVkIHJlZHVuZGFudCBGcmFtZUxvYWRl
ckNsaWVudDo6ZGlzcGF0Y2hEaWRMb2FkUmVzb3VyY2VCeVhNTEh0dHBSZXF1ZXN0KCkKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM2OTQ5CisKKyAgICAg
ICAgKiBXZWJLaXRTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V3guY3BwOgorICAgICAgICAqIFdl
YktpdFN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXeC5oOgorCiAyMDEwLTAzLTMxICBNYXJjdXMg
QnVsYWNoICA8YnVsYWNoQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBKZXJl
bXkgT3Jsb3cuCmRpZmYgLS1naXQgYS9XZWJLaXQvd3gvV2ViS2l0U3VwcG9ydC9GcmFtZUxvYWRl
ckNsaWVudFd4LmNwcCBiL1dlYktpdC93eC9XZWJLaXRTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50
V3guY3BwCmluZGV4IDZhZmRkODguLjNkMmQwNjcgMTAwNjQ0Ci0tLSBhL1dlYktpdC93eC9XZWJL
aXRTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V3guY3BwCisrKyBiL1dlYktpdC93eC9XZWJLaXRT
dXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V3guY3BwCkBAIC03MzMsMTEgKzczMyw2IEBAIGJvb2wg
RnJhbWVMb2FkZXJDbGllbnRXeDo6ZGlzcGF0Y2hEaWRMb2FkUmVzb3VyY2VGcm9tTWVtb3J5Q2Fj
aGUoRG9jdW1lbnRMb2FkZXIqCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEZyYW1lTG9h
ZGVyQ2xpZW50V3g6OmRpc3BhdGNoRGlkTG9hZFJlc291cmNlQnlYTUxIdHRwUmVxdWVzdCh1bnNp
Z25lZCBsb25nLCBjb25zdCBTY3JpcHRTdHJpbmcmKQotewotICBub3RJbXBsZW1lbnRlZCgpOwot
fQotCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50V3g6OmRpc3BhdGNoRGlkRmFpbFByb3Zpc2lvbmFs
TG9hZChjb25zdCBSZXNvdXJjZUVycm9yJikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwpkaWZm
IC0tZ2l0IGEvV2ViS2l0L3d4L1dlYktpdFN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXeC5oIGIv
V2ViS2l0L3d4L1dlYktpdFN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXeC5oCmluZGV4IDYyMjE4
ZmYuLjQ5ZDhjNWMgMTAwNjQ0Ci0tLSBhL1dlYktpdC93eC9XZWJLaXRTdXBwb3J0L0ZyYW1lTG9h
ZGVyQ2xpZW50V3guaAorKysgYi9XZWJLaXQvd3gvV2ViS2l0U3VwcG9ydC9GcmFtZUxvYWRlckNs
aWVudFd4LmgKQEAgLTE4NCw3ICsxODQsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZEZpbmlzaExvYWRpbmcoRG9jdW1lbnRMb2FkZXIqLCB1
bnNpZ25lZCBsb25nKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkRmFpbExvYWRp
bmcoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nLCBjb25zdCBSZXNvdXJjZUVycm9yJik7
CiAgICAgICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaERpZExvYWRSZXNvdXJjZUZyb21NZW1vcnlD
YWNoZShEb2N1bWVudExvYWRlciosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291
cmNlUmVzcG9uc2UmLCBpbnQpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRMb2Fk
UmVzb3VyY2VCeVhNTEh0dHBSZXF1ZXN0KHVuc2lnbmVkIGxvbmcsIGNvbnN0IFNjcmlwdFN0cmlu
ZyYpOwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZEZhaWxQcm92aXNpb25hbExv
YWQoY29uc3QgUmVzb3VyY2VFcnJvciYpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hE
aWRGYWlsTG9hZChjb25zdCBSZXNvdXJjZUVycm9yJik7CmRpZmYgLS1naXQgYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cgYi9XZWJLaXRUb29scy9DaGFuZ2VMb2cKaW5kZXggNjY3NDFiOS4uNTE3Yjli
ZCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCisrKyBiL1dlYktpdFRvb2xzL0No
YW5nZUxvZwpAQCAtMSwzICsxLDEwOSBAQAorMjAxMC0wMy0zMSAgRXJpYyBTZWlkZWwgIDxlcmlj
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KKworICAgICAg
ICBBZGQgd2Via2l0LXBhdGNoIGNvbW1hbmQgdG8gY3Jhd2wgYnVpbGRib3QgaGlzdG9yeSBhbmQg
ZmluZCB3aGVuIHRlc3RzCisgICAgICAgIHN0YXJ0ZWQgdG8gZmFpbC4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM2OTExCisKKyAgICAgICAgVGhpcyBp
cyBhIHZlcnkgYmFyZS1ib25lcyBpbXBsZW1lbnRhdGlvbiwgd2hpY2ggd29ya3MsIGJ1dCBpc24n
dCBwcmV0dHkuCisgICAgICAgIFdlIHdpbGwgbmVlZCBmdXJ0aGVyIHJlLWZhY3RvcmluZyBhbmQg
aW1wcm92ZW1lbnQgdG8gdGhpcyBjb2RlLCBidXQKKyAgICAgICAgYWZ0ZXIgbG9uZyBkaXNjdXNz
aW9ucyB3aXRoIEFkYW0sIEkgdGhpbmsgaXQncyBiZXN0IHRoYXQgd2UgbGFuZCB0aGlzCisgICAg
ICAgIGFuZCBpdGVyYXRlIGZyb20gdGhlcmUuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L2NvbW1vbi9uZXQvYnVpbGRib3QucHk6CisgICAgICAgICAtIEFkZCByZXZpc2lvbl9idWlsZF9w
YWlyc193aXRoX3Jlc3VsdHMgZm9yIGNsZWFuZXIgY29kZSBhbmQgcG9zc2libGUKKyAgICAgICAg
ICAgb3B0aW1pemF0aW9uIG9mIHRoaXMgY29tbWFuZC4KKyAgICAgICAgIC0gUmV0dXJuIE5vbmUg
aWYgYSBidWlsZCBudW1iZXIgY2FuJ3QgYmUgZm91bmQgZm9yIGEgcmV2aXNpb24gaW4KKyAgICAg
ICAgICAgYnVpbGRfZm9yX3JldmlzaW9uCisgICAgICAgICAtIFNlcGFyYXRlIG91dCBzdXNwZWN0
X3JldmlzaW9uc19mb3JfdHJhbnNpdGlvbiBmb3IgcmUtdXNlIGJ5CisgICAgICAgICAgIEZhaWx1
cmVSZWFzb24KKyAgICAgICAgIC0gQWRkIExheW91dFRlc3RSZXN1bHRzLmZhaWxpbmdfdGVzdHMo
KSBhbmQgbWFrZSBvdXIgcGFyc2luZyBjb2RlCisgICAgICAgICAgIGV4cGxpY3QgYWJvdXQgd2hh
dCB0YWJsZXMgaXQgYWNjZXB0cy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29t
bWFuZHMvcXVlcmllcy5weToKKyAgICAgICAgIC0gTW92ZSBfcHJpbnRfYmxhbWVfaW5mb3JtYXRp
b25fZm9yX2NvbW1pdCBvdXQgb2YgV2hhdEJyb2tlIGZvciByZS11c2UKKyAgICAgICAgICAgYnkg
RmFpbHVyZVJlYXNvbi4KKyAgICAgICAgIC0gQWRkIEZhaWx1cmVSZWFzb24gY29tbWFuZCB3aGlj
aCBjYW4gY3Jhd2wgYSBnaXZlbiBidWlsZGVyIGFuZCBleHBsYWluCisgICAgICAgICAgIHdoeSBp
dCBpcyBjdXJyZW50bHkgcmVkIG9uIGEgcGVyLXRlc3QgYmFzaXMuCisKKzIwMTAtMDQtMDYgIEtl
bnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IERp
bWl0cmkgR2xhemtvdi4KKworICAgICAgICBbRFJUL0Nocm9taXVtXSBBZGQgRHVtcFJlbmRlclRy
ZWUuZ3lwLCBhbmQgc29tZSBzbWFsbCBmaXhlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzcxMzcKKworICAgICAgICAtIEFkZCBEdW1wUmVuZGVyVHJl
ZS5neXAKKyAgICAgICAgLSBSZW1vdmUgc29tZSBkZXBlbmRlbmNpZXMgdG8gYmFzZS9zdHJpbmdf
dXRpbC5oLAorICAgICAgICAgIGJhc2UvY29tcGlsZXJfc3BlY2lmaWMuaCwgYmFzZS9maWxlX3Bh
dGguaCwgYmFzZS9maWxlX3V0aWwuaCwKKyAgICAgICAgICBiYXNlL21lc3NhZ2VfbG9vcC5oLCBi
YXNlL3N5c19zdHJpbmdfY29udmVyc2lvbnMuaCwKKworICAgICAgICAqIER1bXBSZW5kZXJUcmVl
L0R1bXBSZW5kZXJUcmVlLmd5cC9EdW1wUmVuZGVyVHJlZS5neXA6IEFkZGVkLgorICAgICAgICAq
IER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0NwcFZhcmlhbnQuY3BwOgorICAgICAgICAoQ3BwVmFy
aWFudDo6dG9TdHJpbmdWZWN0b3IpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L0V2ZW50U2VuZGVyLmNwcDoKKyAgICAgICAgKEV2ZW50U2VuZGVyOjpFdmVudFNlbmRlcik6Cisg
ICAgICAgIChFdmVudFNlbmRlcjo6a2V5RG93bik6CisgICAgICAgIChFdmVudFNlbmRlcjo6c2No
ZWR1bGVBc3luY2hyb25vdXNDbGljayk6CisgICAgICAgIChFdmVudFNlbmRlcjo6YmVnaW5EcmFn
V2l0aEZpbGVzKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0
Q29udHJvbGxlci5jcHA6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VXNlclN0
eWxlU2hlZXRMb2NhdGlvbik6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGF0aFRv
TG9jYWxSZXNvdXJjZSk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGV4dElu
cHV0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChUZXh0SW5wdXRDb250cm9sbGVyOjptYXJrZWRS
YW5nZSk6CisgICAgICAgIChUZXh0SW5wdXRDb250cm9sbGVyOjpzZWxlY3RlZFJhbmdlKToKKwor
MjAxMC0wNC0wNiAgRGlyayBQcmFua2UgIDxkcHJhbmtlQGNocm9taXVtLm9yZz4KKworICAgICAg
ICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KKworICAgICAgICBXcml0ZSBzdGFjayB0cmFjZXMg
aW50byB0aGUgcmVzdWx0cyBkaXJlY3RvcnkgZm9yIG5ldy1ydW4td2Via2l0LXRlc3RzLAorICAg
ICAgICBpbnN0ZWFkIG9mIHdyaXRpbmcgdGhlbSBhbG9uZ3NpZGUgdGhlIHRlc3QgZmlsZS4KKwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzY1MDQKKwor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rl
c3Rfc2hlbGxfdGhyZWFkLnB5OgorCisyMDEwLTA0LTA2ICBEaXJrIFByYW5rZSAgPGRwcmFua2VA
Y2hyb21pdW0ub3JnPgorCisgICAgICAgIFVucmV2aWV3ZWQgYnVpbGQgZml4LgorCisgICAgICAg
IEVuYWJsZSBwaXhlbCB0ZXN0cyBieSBkZWZhdWx0IGluIG5ldy1ydW4td2Via2l0LXRlc3RzIHVu
bGVzcworICAgICAgICBleHBsaWNpdGx5IHNldCBieSB0aGUgcG9ydCBvciBieSB0aGUgY29tbWFu
ZCBsaW5lLiBUaGlzIHdhcyBicm9rZW4gaW4KKyAgICAgICAgdGhlIGZpeCBmb3IgYnVnIDM2ODAx
IChyZXYuIDU3MTczKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MzcxODQKKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3J1bl93ZWJraXRfdGVzdHMucHk6CisKKzIwMTAtMDQtMDYgIERpcmsgUHJhbmtlICA8ZHByYW5r
ZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCisKKyAg
ICAgICAgRGlzYWJsZSBwaXhlbCB0ZXN0cyBvbiB0aGUgbWFjIHBvcnQgYnkgZGVmYXVsdC4KKwor
ICAgICAgICBBbHNvLCByZXZhbXAgdGhlIHdheSB3ZSBjaGVjayBmb3IgcGl4ZWwgdGVzdHMgYmVp
bmcgZW5hYmxlZCBvcgorICAgICAgICBkaXNhYmxlZC4gV2Ugbm93IGxvb2sgZm9yIG9wdGlvbnMu
cGl4ZWxfdGVzdHMgaW5zdGVhZCBvZgorICAgICAgICBvcHRpb25zLm5vX3BpeGVsX3Rlc3RzLCBh
bmQgd2UgaGF2ZSB0aGUgIi0tcGl4ZWwtdGVzdHMiIChmb3JjZSBlbmFibGUpCisgICAgICAgIGFu
ZCAiLS1uby1waXhlbC10ZXN0cyIgKGZvcmNlIGRpc2FibGUpIGZsYWdzLgorCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNjgwMQorCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9leHBlY3Rh
dGlvbnMucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0
X3BhY2thZ2UvdGVzdF9leHBlY3RhdGlvbnNfdGVzdC5weToKKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtLnB5OgorICAgICAgICAqIFNjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvbWFjLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHk6CisKKzIwMTAtMDQtMDYgIERp
ZWdvIEdvbnphbGV6ICA8ZGllZ28uZ29uemFsZXpAb3BlbmJvc3NhLm9yZz4KKworICAgICAgICBS
ZXZpZXdlZCBieSBMYXN6bG8gR29tYm9zLgorCisgICAgICAgIFtRdF0gQWRkZWQgdGhlIGlQaG9u
ZSBhbmQgaVBhZCBsYXRlc3QgdXNlciBhZ2VudCBpbiBRdExhdW5jaGVyIFVBIHN3aXRjaGVyCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNzE1OQorCisg
ICAgICAgICogUXRMYXVuY2hlci91c2VyYWdlbnRsaXN0LnR4dDoKKwogMjAxMC0wNC0wNiAgTGFz
emxvIEdvbWJvcyAgPGxhc3psby4xLmdvbWJvc0Bub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4uCmRpZmYgLS1naXQgYS9XZWJLaXRUb29s
cy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5neXAvRHVtcFJlbmRlclRyZWUuZ3lwIGIv
V2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUuZ3lwL0R1bXBSZW5kZXJU
cmVlLmd5cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmU5NWMwCi0tLSAv
ZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUu
Z3lwL0R1bXBSZW5kZXJUcmVlLmd5cApAQCAtMCwwICsxLDEyMCBAQAorIworIyBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
IyAgICAgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAg
ICAgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisjCisKK3sKKyAgICAnaW5jbHVkZXMnOiBbCisgICAgICAgICcuLi8u
Li8uLi9XZWJLaXQvY2hyb21pdW0vZmVhdHVyZXMuZ3lwaScsCisgICAgXSwKKyAgICAndmFyaWFi
bGVzJzogeworICAgICAgICAnd2Via2l0X3RvcCc6ICcuLi8uLi8uLicsCisgICAgICAgICd3ZWJr
aXRfYXBpX2Rpcic6ICc8KHdlYmtpdF90b3ApL1dlYktpdC9jaHJvbWl1bScsCisgICAgICAgICdj
b25kaXRpb25zJzogWworICAgICAgICAgICAgIyBMb2NhdGlvbiBvZiB0aGUgY2hyb21pdW0gc3Jj
IGRpcmVjdG9yeSBhbmQgdGFyZ2V0IHR5cGUgaXMgZGlmZmVyZW50CisgICAgICAgICAgICAjIGlm
IHdlYmtpdCBpcyBidWlsdCBpbnNpZGUgY2hyb21pdW0gb3IgYXMgc3RhbmRhbG9uZSBwcm9qZWN0
LgorICAgICAgICAgICAgWydpbnNpZGVfY2hyb21pdW1fYnVpbGQ9PTAnLCB7CisgICAgICAgICAg
ICAgICAgIyBEdW1wUmVuZGVyVHJlZSBpcyBiZWluZyBidWlsdCBvdXRzaWRlIG9mIHRoZSBmdWxs
IGNocm9taXVtIHByb2plY3QuCisgICAgICAgICAgICAgICAgIyBlLmcuIHZpYSBidWlsZC1kdW1w
cmVuZGVydHJlZSAtLWNocm9taXVtCisgICAgICAgICAgICAgICAgJ2Nocm9taXVtX3NyY19kaXIn
OiAnPCh3ZWJraXRfYXBpX2RpciknLAorICAgICAgICAgICAgfSx7CisgICAgICAgICAgICAgICAg
IyBXZWJLaXQgaXMgY2hlY2tlZCBvdXQgaW4gc3JjL2Nocm9taXVtL3RoaXJkX3BhcnR5L1dlYktp
dAorICAgICAgICAgICAgICAgICdjaHJvbWl1bV9zcmNfZGlyJzogJzwod2Via2l0X3RvcCkvLi4v
Li4nLAorICAgICAgICAgICAgfV0sCisgICAgICAgIF0sCisgICAgfSwKKyAgICAndGFyZ2V0cyc6
IFsKKyAgICAgICAgeworICAgICAgICAgICAgJ3RhcmdldF9uYW1lJzogJ0R1bXBSZW5kZXJUcmVl
JywKKyAgICAgICAgICAgICd0eXBlJzogJ2V4ZWN1dGFibGUnLAorICAgICAgICAgICAgJ21hY19i
dW5kbGUnOiAxLAorICAgICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKKyAgICAgICAgICAgICAg
ICAnPCh3ZWJraXRfYXBpX2RpcikvV2ViS2l0Lmd5cDp3ZWJraXQnLAorICAgICAgICAgICAgICAg
ICc8KGNocm9taXVtX3NyY19kaXIpL3RoaXJkX3BhcnR5L25wYXBpL25wYXBpLmd5cDpucGFwaScs
CisgICAgICAgICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2Rpcikvc2tpYS9za2lhLmd5cDpza2lh
JywKKyAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS93ZWJraXQvd2Via2l0Lmd5
cDp3ZWJraXRfc3VwcG9ydCcsCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgJ2luY2x1ZGVf
ZGlycyc6IFsKKyAgICAgICAgICAgICAgICAnLicsCisgICAgICAgICAgICAgICAgJzwod2Via2l0
X2FwaV9kaXIpJywKKyAgICAgICAgICAgICAgICAnPCh3ZWJraXRfdG9wKS9KYXZhU2NyaXB0Q29y
ZScsCisgICAgICAgICAgICAgICAgJzwod2Via2l0X3RvcCkvV2ViS2l0L21hYy9XZWJDb3JlU3Vw
cG9ydCcsICMgRm9yIFdlYlN5c3RlbUludGVyZmFjZS5oCisgICAgICAgICAgICAgICAgJzwoY2hy
b21pdW1fc3JjX2RpciknLAorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICdkZWZpbmVzJzog
WworICAgICAgICAgICAgICAgICMgVGVjaG5pY2FsbHkgbm90IGEgdW5pdCB0ZXN0IGJ1dCByZXF1
aXJlIGZ1bmN0aW9ucyBhdmFpbGFibGUgb25seSB0bworICAgICAgICAgICAgICAgICMgdW5pdCB0
ZXN0cy4KKyAgICAgICAgICAgICAgICAnVU5JVF9URVNUJywKKyAgICAgICAgICAgIF0sCisgICAg
ICAgICAgICAnc291cmNlcyc6IFsKKyAgICAgICAgICAgICAgICAnLi4vY2hyb21pdW0vQWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXIuY3BwJywKKyAgICAgICAgICAgICAgICAnLi4vY2hyb21pdW0vQWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXIuaCcsCisgICAgICAgICAgICAgICAgJy4uL2Nocm9taXVtL0Fj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQuY3BwJywKKyAgICAgICAgICAgICAgICAnLi4vY2hyb21pdW0v
QWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oJywKKyAgICAgICAgICAgICAgICAnLi4vY2hyb21pdW0v
Q3BwQm91bmRDbGFzcy5jcHAnLAorICAgICAgICAgICAgICAgICcuLi9jaHJvbWl1bS9DcHBCb3Vu
ZENsYXNzLmgnLAorICAgICAgICAgICAgICAgICcuLi9jaHJvbWl1bS9DcHBWYXJpYW50LmNwcCcs
CisgICAgICAgICAgICAgICAgJy4uL2Nocm9taXVtL0NwcFZhcmlhbnQuaCcsCisgICAgICAgICAg
ICAgICAgJy4uL2Nocm9taXVtL0R1bXBSZW5kZXJUcmVlLmNwcCcsCisgICAgICAgICAgICAgICAg
Jy4uL2Nocm9taXVtL0V2ZW50U2VuZGVyLmNwcCcsCisgICAgICAgICAgICAgICAgJy4uL2Nocm9t
aXVtL0V2ZW50U2VuZGVyLmgnLAorICAgICAgICAgICAgICAgICcuLi9jaHJvbWl1bS9MYXlvdXRU
ZXN0Q29udHJvbGxlci5jcHAnLAorICAgICAgICAgICAgICAgICcuLi9jaHJvbWl1bS9MYXlvdXRU
ZXN0Q29udHJvbGxlci5oJywKKyAgICAgICAgICAgICAgICAnLi4vY2hyb21pdW0vUGxhaW5UZXh0
Q29udHJvbGxlci5jcHAnLAorICAgICAgICAgICAgICAgICcuLi9jaHJvbWl1bS9QbGFpblRleHRD
b250cm9sbGVyLmgnLAorICAgICAgICAgICAgICAgICcuLi9jaHJvbWl1bS9UZXN0TmF2aWdhdGlv
bkNvbnRyb2xsZXIuY3BwJywKKyAgICAgICAgICAgICAgICAnLi4vY2hyb21pdW0vVGVzdE5hdmln
YXRpb25Db250cm9sbGVyLmgnLAorICAgICAgICAgICAgICAgICcuLi9jaHJvbWl1bS9UZXN0U2hl
bGwuY3BwJywKKyAgICAgICAgICAgICAgICAnLi4vY2hyb21pdW0vVGVzdFNoZWxsLmgnLAorICAg
ICAgICAgICAgICAgICcuLi9jaHJvbWl1bS9UZXN0U2hlbGxNYWMubW0nLAorICAgICAgICAgICAg
ICAgICcuLi9jaHJvbWl1bS9UZXh0SW5wdXRDb250cm9sbGVyLmNwcCcsCisgICAgICAgICAgICAg
ICAgJy4uL2Nocm9taXVtL1RleHRJbnB1dENvbnRyb2xsZXIuaCcsCisgICAgICAgICAgICAgICAg
Jy4uL2Nocm9taXVtL1dlYlZpZXdIb3N0LmNwcCcsCisgICAgICAgICAgICAgICAgJy4uL2Nocm9t
aXVtL1dlYlZpZXdIb3N0LmgnLAorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICdtYWNfYnVu
ZGxlX3Jlc291cmNlcyc6IFsKKyAgICAgICAgICAgICAgICAnLi4vcXQvZm9udHMvQUhFTV9fX18u
VFRGJywKKyAgICAgICAgICAgICAgICAnLi4vZm9udHMvV2ViS2l0V2VpZ2h0V2F0Y2hlcjEwMC50
dGYnLAorICAgICAgICAgICAgICAgICcuLi9mb250cy9XZWJLaXRXZWlnaHRXYXRjaGVyMjAwLnR0
ZicsCisgICAgICAgICAgICAgICAgJy4uL2ZvbnRzL1dlYktpdFdlaWdodFdhdGNoZXIzMDAudHRm
JywKKyAgICAgICAgICAgICAgICAnLi4vZm9udHMvV2ViS2l0V2VpZ2h0V2F0Y2hlcjQwMC50dGYn
LAorICAgICAgICAgICAgICAgICcuLi9mb250cy9XZWJLaXRXZWlnaHRXYXRjaGVyNTAwLnR0Zics
CisgICAgICAgICAgICAgICAgJy4uL2ZvbnRzL1dlYktpdFdlaWdodFdhdGNoZXI2MDAudHRmJywK
KyAgICAgICAgICAgICAgICAnLi4vZm9udHMvV2ViS2l0V2VpZ2h0V2F0Y2hlcjcwMC50dGYnLAor
ICAgICAgICAgICAgICAgICcuLi9mb250cy9XZWJLaXRXZWlnaHRXYXRjaGVyODAwLnR0ZicsCisg
ICAgICAgICAgICAgICAgJy4uL2ZvbnRzL1dlYktpdFdlaWdodFdhdGNoZXI5MDAudHRmJywKKyAg
ICAgICAgICAgIF0sCisgICAgICAgIH0sCisgICAgXSwgIyB0YXJnZXRzCit9CisKKyMgTG9jYWwg
VmFyaWFibGVzOgorIyB0YWItd2lkdGg6MgorIyBpbmRlbnQtdGFicy1tb2RlOm5pbAorIyBFbmQ6
CisjIHZpbTogc2V0IGV4cGFuZHRhYiB0YWJzdG9wPTIgc2hpZnR3aWR0aD0yOgpkaWZmIC0tZ2l0
IGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vQ3BwVmFyaWFudC5jcHAgYi9X
ZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9DcHBWYXJpYW50LmNwcAppbmRleCBl
ZjA0YmYzLi45NTM5OTA3IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9DcHBWYXJpYW50LmNwcAorKysgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9DcHBWYXJpYW50LmNwcApAQCAtMzEsMTAgKzMxLDEwIEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiQ3BwVmFyaWFudC5oIgogCi0jaW5jbHVkZSAiYmFzZS9zdHJpbmdf
dXRpbC5oIgogI2luY2x1ZGUgInB1YmxpYy9XZWJCaW5kaW5ncy5oIgogI2luY2x1ZGUgPGxpbWl0
cz4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRy
YXMuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CkBA
IC0yNzYsNyArMjc2LDkgQEAgVmVjdG9yPHN0cmluZz4gQ3BwVmFyaWFudDo6dG9TdHJpbmdWZWN0
b3IoKSBjb25zdAogICAgIGxlbmd0aCA9IG1pbigxMDAsIGxlbmd0aCk7CiAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICAvLyBHZXQgZWFjaCBvZiB0aGUgaXRl
bXMuCi0gICAgICAgIHN0cmluZyBpbmRleCA9IFN0cmluZ1ByaW50ZigiJWQiLCBpKTsKKyAgICAg
ICAgY2hhciBpbmRleEluQ2hhclsyMF07IC8vIEVub3VnaCBzaXplIHRvIHN0b3JlIDMyLWJpdCBp
bnRlZ2VyCisgICAgICAgIHNucHJpbnRmKGluZGV4SW5DaGFyLCAyMCwgIiVkIiwgaSk7CisgICAg
ICAgIHN0cmluZyBpbmRleChpbmRleEluQ2hhcik7CiAgICAgICAgIE5QSWRlbnRpZmllciBpbmRl
eElkID0gV2ViQmluZGluZ3M6OmdldFN0cmluZ0lkZW50aWZpZXIoaW5kZXguY19zdHIoKSk7CiAg
ICAgICAgIGlmICghV2ViQmluZGluZ3M6Omhhc1Byb3BlcnR5KDAsIG5wVmFsdWUsIGluZGV4SWQp
KQogICAgICAgICAgICAgY29udGludWU7CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9EdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9FdmVudFNlbmRlci5jcHAgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9FdmVudFNlbmRlci5jcHAKaW5kZXggNjRkMGQzZS4uY2Q3ZjNkMiAxMDA2
NDQKLS0tIGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRXZlbnRTZW5kZXIu
Y3BwCisrKyBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0V2ZW50U2VuZGVy
LmNwcApAQCAtNDQsMjAgKzQ0LDE2IEBACiAjaW5jbHVkZSAiRXZlbnRTZW5kZXIuaCIKIAogI2lu
Y2x1ZGUgIlRlc3RTaGVsbC5oIgotI2luY2x1ZGUgImJhc2UvY29tcGlsZXJfc3BlY2lmaWMuaCIK
LSNpbmNsdWRlICJiYXNlL2ZpbGVfcGF0aC5oIgotI2luY2x1ZGUgImJhc2UvZmlsZV91dGlsLmgi
CiAjaW5jbHVkZSAiYmFzZS9rZXlib2FyZF9jb2Rlcy5oIgotI2luY2x1ZGUgImJhc2UvbWVzc2Fn
ZV9sb29wLmgiCi0jaW5jbHVkZSAiYmFzZS9zdHJpbmdfdXRpbC5oIgotI2luY2x1ZGUgImJhc2Uv
c3lzX3N0cmluZ19jb252ZXJzaW9ucy5oIgogI2luY2x1ZGUgImJhc2UvdGltZS5oIgogI2luY2x1
ZGUgInB1YmxpYy9XZWJEcmFnRGF0YS5oIgogI2luY2x1ZGUgInB1YmxpYy9XZWJEcmFnT3BlcmF0
aW9uLmgiCiAjaW5jbHVkZSAicHVibGljL1dlYlBvaW50LmgiCiAjaW5jbHVkZSAicHVibGljL1dl
YlN0cmluZy5oIgogI2luY2x1ZGUgInB1YmxpYy9XZWJWaWV3LmgiCisjaW5jbHVkZSAid2Via2l0
L3N1cHBvcnQvd2Via2l0X3N1cHBvcnQuaCIKICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKyNpbmNs
dWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAKICNpZiBPUyhXSU5ET1dTKQogI2luY2x1ZGUgInB1
YmxpYy93aW4vV2ViSW5wdXRFdmVudEZhY3RvcnkuaCIKQEAgLTI0OSw3ICsyNDUsNyBAQCBlbnVt
IEtleUxvY2F0aW9uQ29kZSB7CiB9OwogCiBFdmVudFNlbmRlcjo6RXZlbnRTZW5kZXIoVGVzdFNo
ZWxsKiBzaGVsbCkKLSAgICA6IEFMTE9XX1RISVNfSU5fSU5JVElBTElaRVJfTElTVChtX21ldGhv
ZEZhY3RvcnkodGhpcykpCisgICAgOiBtX21ldGhvZEZhY3RvcnkodGhpcykKIHsKICAgICAvLyBT
ZXQgc3RhdGljIHRlc3RTaGVsbCB2YXJpYWJsZSBzaW5jZSB3ZSBjYW4ndCBkbyBpdCBpbiBhbiBp
bml0aWFsaXplciBsaXN0LgogICAgIC8vIFdlIGFsc28gbmVlZCB0byBiZSBjYXJlZnVsIG5vdCB0
byBhc3NpZ24gdGVzdFNoZWxsIHRvIG5ldyB3aW5kb3dzIHdoaWNoIGFyZQpAQCAtNTIwLDUwICs1
MTYsNTEgQEAgdm9pZCBFdmVudFNlbmRlcjo6a2V5RG93bihjb25zdCBDcHBBcmd1bWVudExpc3Qm
IGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQogICAgIC8vIEZJWE1FOiBJJ20gbm90IGV4
YWN0bHkgc3VyZSBob3cgd2Ugc2hvdWxkIGNvbnZlcnQgdGhlIHN0cmluZyB0byBhIGtleQogICAg
IC8vIGV2ZW50LiBUaGlzIHNlZW1zIHRvIHdvcmsgaW4gdGhlIGNhc2VzIEkgdGVzdGVkLgogICAg
IC8vIEZJWE1FOiBTaG91bGQgd2UgYWxzbyBnZW5lcmF0ZSBhIEtFWV9VUD8KLSAgICB3c3RyaW5n
IGNvZGVTdHIgPSBVVEY4VG9XaWRlKGFyZ3VtZW50c1swXS50b1N0cmluZygpKTsKKyAgICBzdHJp
bmcgY29kZVN0ciA9IGFyZ3VtZW50c1swXS50b1N0cmluZygpOwogCiAgICAgLy8gQ29udmVydCBc
biAtPiBWS19SRVRVUk4uICBTb21lIGxheW91dCB0ZXN0cyB1c2UgXG4gdG8gbWVhbiAiRW50ZXIi
LCB3aGVuCiAgICAgLy8gV2luZG93cyB1c2VzIFxyIGZvciAiRW50ZXIiLgogICAgIGludCBjb2Rl
ID0gMDsKICAgICBpbnQgdGV4dCA9IDA7CiAgICAgYm9vbCBuZWVkc1NoaWZ0S2V5TW9kaWZpZXIg
PSBmYWxzZTsKLSAgICBpZiAoTCJcbiIgPT0gY29kZVN0cikgeworICAgIGlmICgiXG4iID09IGNv
ZGVTdHIpIHsKICAgICAgICAgZ2VuZXJhdGVDaGFyID0gdHJ1ZTsKICAgICAgICAgdGV4dCA9IGNv
ZGUgPSBiYXNlOjpWS0VZX1JFVFVSTjsKLSAgICB9IGVsc2UgaWYgKEwicmlnaHRBcnJvdyIgPT0g
Y29kZVN0cikKKyAgICB9IGVsc2UgaWYgKCJyaWdodEFycm93IiA9PSBjb2RlU3RyKQogICAgICAg
ICBjb2RlID0gYmFzZTo6VktFWV9SSUdIVDsKLSAgICBlbHNlIGlmIChMImRvd25BcnJvdyIgPT0g
Y29kZVN0cikKKyAgICBlbHNlIGlmICgiZG93bkFycm93IiA9PSBjb2RlU3RyKQogICAgICAgICBj
b2RlID0gYmFzZTo6VktFWV9ET1dOOwotICAgIGVsc2UgaWYgKEwibGVmdEFycm93IiA9PSBjb2Rl
U3RyKQorICAgIGVsc2UgaWYgKCJsZWZ0QXJyb3ciID09IGNvZGVTdHIpCiAgICAgICAgIGNvZGUg
PSBiYXNlOjpWS0VZX0xFRlQ7Ci0gICAgZWxzZSBpZiAoTCJ1cEFycm93IiA9PSBjb2RlU3RyKQor
ICAgIGVsc2UgaWYgKCJ1cEFycm93IiA9PSBjb2RlU3RyKQogICAgICAgICBjb2RlID0gYmFzZTo6
VktFWV9VUDsKLSAgICBlbHNlIGlmIChMImRlbGV0ZSIgPT0gY29kZVN0cikKKyAgICBlbHNlIGlm
ICgiZGVsZXRlIiA9PSBjb2RlU3RyKQogICAgICAgICBjb2RlID0gYmFzZTo6VktFWV9CQUNLOwot
ICAgIGVsc2UgaWYgKEwicGFnZVVwIiA9PSBjb2RlU3RyKQorICAgIGVsc2UgaWYgKCJwYWdlVXAi
ID09IGNvZGVTdHIpCiAgICAgICAgIGNvZGUgPSBiYXNlOjpWS0VZX1BSSU9SOwotICAgIGVsc2Ug
aWYgKEwicGFnZURvd24iID09IGNvZGVTdHIpCisgICAgZWxzZSBpZiAoInBhZ2VEb3duIiA9PSBj
b2RlU3RyKQogICAgICAgICBjb2RlID0gYmFzZTo6VktFWV9ORVhUOwotICAgIGVsc2UgaWYgKEwi
aG9tZSIgPT0gY29kZVN0cikKKyAgICBlbHNlIGlmICgiaG9tZSIgPT0gY29kZVN0cikKICAgICAg
ICAgY29kZSA9IGJhc2U6OlZLRVlfSE9NRTsKLSAgICBlbHNlIGlmIChMImVuZCIgPT0gY29kZVN0
cikKKyAgICBlbHNlIGlmICgiZW5kIiA9PSBjb2RlU3RyKQogICAgICAgICBjb2RlID0gYmFzZTo6
VktFWV9FTkQ7CiAgICAgZWxzZSB7CiAgICAgICAgIC8vIENvbXBhcmUgdGhlIGlucHV0IHN0cmlu
ZyB3aXRoIHRoZSBmdW5jdGlvbi1rZXkgbmFtZXMgZGVmaW5lZCBieSB0aGUKICAgICAgICAgLy8g
RE9NIHNwZWMgKGkuZS4gIkYxIiwuLi4sIkYyNCIpLiBJZiB0aGUgaW5wdXQgc3RyaW5nIGlzIGEg
ZnVuY3Rpb24ta2V5CiAgICAgICAgIC8vIG5hbWUsIHNldCBpdHMga2V5IGNvZGUuCiAgICAgICAg
IGZvciAoaW50IGkgPSAxOyBpIDw9IDI0OyArK2kpIHsKLSAgICAgICAgICAgIHdzdHJpbmcgZnVu
Y3Rpb25LZXlOYW1lOwotICAgICAgICAgICAgZnVuY3Rpb25LZXlOYW1lICs9IEwiRiI7Ci0gICAg
ICAgICAgICBmdW5jdGlvbktleU5hbWUgKz0gSW50VG9XU3RyaW5nKGkpOworICAgICAgICAgICAg
Y2hhciBmdW5jdGlvbkNoYXJzWzEwXTsKKyAgICAgICAgICAgIHNucHJpbnRmKGZ1bmN0aW9uQ2hh
cnMsIDEwLCAiRiVkIiwgaSk7CisgICAgICAgICAgICBzdHJpbmcgZnVuY3Rpb25LZXlOYW1lKGZ1
bmN0aW9uQ2hhcnMpOwogICAgICAgICAgICAgaWYgKGZ1bmN0aW9uS2V5TmFtZSA9PSBjb2RlU3Ry
KSB7CiAgICAgICAgICAgICAgICAgY29kZSA9IGJhc2U6OlZLRVlfRjEgKyAoaSAtIDEpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGlm
ICghY29kZSkgewotICAgICAgICAgICAgQVNTRVJUKGNvZGVTdHIubGVuZ3RoKCkgPT0gMSk7Ci0g
ICAgICAgICAgICB0ZXh0ID0gY29kZSA9IGNvZGVTdHJbMF07CisgICAgICAgICAgICBXZWJTdHJp
bmcgd2ViQ29kZVN0ciA9IFdlYlN0cmluZzo6ZnJvbVVURjgoY29kZVN0ci5kYXRhKCksIGNvZGVT
dHIuc2l6ZSgpKTsKKyAgICAgICAgICAgIEFTU0VSVCh3ZWJDb2RlU3RyLmxlbmd0aCgpID09IDEp
OworICAgICAgICAgICAgdGV4dCA9IGNvZGUgPSB3ZWJDb2RlU3RyLmRhdGEoKVswXTsKICAgICAg
ICAgICAgIG5lZWRzU2hpZnRLZXlNb2RpZmllciA9IG5lZWRzU2hpZnRNb2RpZmllcihjb2RlKTsK
ICAgICAgICAgICAgIGlmICgoY29kZSAmIDB4RkYpID49ICdhJyAmJiAoY29kZSAmIDB4RkYpIDw9
ICd6JykKICAgICAgICAgICAgICAgICBjb2RlIC09ICdhJyAtICdBJzsKQEAgLTYxMywxMSArNjEw
LDExIEBAIHZvaWQgRXZlbnRTZW5kZXI6OmtleURvd24oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBh
cmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKICAgICAvLyBXZSBqdXN0IHNpbXVsYXRlIHRo
ZSBzYW1lIGJlaGF2aW9yIGhlcmUuCiAgICAgc3RyaW5nIGVkaXRDb21tYW5kOwogICAgIGlmIChn
ZXRFZGl0Q29tbWFuZChldmVudERvd24sICZlZGl0Q29tbWFuZCkpCi0gICAgICAgIHRlc3RTaGVs
bC0+ZGVsZWdhdGUoKS0+c2V0RWRpdENvbW1hbmQoZWRpdENvbW1hbmQsICIiKTsKKyAgICAgICAg
dGVzdFNoZWxsLT53ZWJWaWV3SG9zdCgpLT5zZXRFZGl0Q29tbWFuZChlZGl0Q29tbWFuZCwgIiIp
OwogCiAgICAgd2VidmlldygpLT5oYW5kbGVJbnB1dEV2ZW50KGV2ZW50RG93bik7CiAKLSAgICB0
ZXN0U2hlbGwtPmRlbGVnYXRlKCktPmNsZWFyRWRpdENvbW1hbmQoKTsKKyAgICB0ZXN0U2hlbGwt
PndlYlZpZXdIb3N0KCktPmNsZWFyRWRpdENvbW1hbmQoKTsKIAogICAgIGlmIChnZW5lcmF0ZUNo
YXIpIHsKICAgICAgICAgZXZlbnRDaGFyLnR5cGUgPSBXZWJJbnB1dEV2ZW50OjpDaGFyOwpAQCAt
NzY0LDMyICs3NjEsMTggQEAgdm9pZCBFdmVudFNlbmRlcjo6c2NoZWR1bGVBc3luY2hyb25vdXND
bGljayhjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3AKIHsKICAgICByZXN1bHQt
PnNldE51bGwoKTsKIAotICAgIE1lc3NhZ2VMb29wOjpjdXJyZW50KCktPlBvc3RUYXNrKAotICAg
ICAgICBGUk9NX0hFUkUsIG1fbWV0aG9kRmFjdG9yeS5OZXdSdW5uYWJsZU1ldGhvZCgKKyAgICB3
ZWJraXRfc3VwcG9ydDo6UG9zdFRhc2tGcm9tSGVyZShtX21ldGhvZEZhY3RvcnkuTmV3UnVubmFi
bGVNZXRob2QoCiAgICAgICAgICAgICAmRXZlbnRTZW5kZXI6Om1vdXNlRG93biwgYXJndW1lbnRz
LCBzdGF0aWNfY2FzdDxDcHBWYXJpYW50Kj4oMCkpKTsKLSAgICBNZXNzYWdlTG9vcDo6Y3VycmVu
dCgpLT5Qb3N0VGFzaygKLSAgICAgICAgRlJPTV9IRVJFLCBtX21ldGhvZEZhY3RvcnkuTmV3UnVu
bmFibGVNZXRob2QoCisgICAgd2Via2l0X3N1cHBvcnQ6OlBvc3RUYXNrRnJvbUhlcmUobV9tZXRo
b2RGYWN0b3J5Lk5ld1J1bm5hYmxlTWV0aG9kKAogICAgICAgICAgICAgJkV2ZW50U2VuZGVyOjpt
b3VzZVVwLCBhcmd1bWVudHMsIHN0YXRpY19jYXN0PENwcFZhcmlhbnQqPigwKSkpOwogfQogCi1z
dGF0aWMgV2ViU3RyaW5nIGZpbGVQYXRoU3RyaW5nVG9XZWJTdHJpbmcoY29uc3QgRmlsZVBhdGg6
OlN0cmluZ1R5cGUmIHBhdGhTdHJpbmcpCi17Ci0jaWYgT1MoVU5JWCkKLSAgICByZXR1cm4gV2lk
ZVRvVVRGMTZIYWNrKFN5c05hdGl2ZU1CVG9XaWRlKHBhdGhTdHJpbmcpKTsKLSNlbGlmIE9TKFdJ
TkRPV1MpCi0gICAgcmV0dXJuIFdlYlN0cmluZyhwYXRoU3RyaW5nKTsKLSNlbmRpZgotfQotCiB2
b2lkIEV2ZW50U2VuZGVyOjpiZWdpbkRyYWdXaXRoRmlsZXMoY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICBjdXJyZW50RHJhZ0RhdGEu
aW5pdGlhbGl6ZSgpOwogICAgIFZlY3RvcjxzdHJpbmc+IGZpbGVzID0gYXJndW1lbnRzWzBdLnRv
U3RyaW5nVmVjdG9yKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWxlcy5zaXplKCk7
ICsraSkgewotICAgICAgICBGaWxlUGF0aCBwYXRoKGZpbGVzW2ldKTsKLSAgICAgICAgZmlsZV91
dGlsOjpBYnNvbHV0ZVBhdGgoJnBhdGgpOwotICAgICAgICBjdXJyZW50RHJhZ0RhdGEuYXBwZW5k
VG9GaWxlTmFtZXMoZmlsZVBhdGhTdHJpbmdUb1dlYlN0cmluZyhwYXRoLnZhbHVlKCkpKTsKLSAg
ICB9CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWxlcy5zaXplKCk7ICsraSkKKyAgICAg
ICAgY3VycmVudERyYWdEYXRhLmFwcGVuZFRvRmlsZU5hbWVzKHdlYmtpdF9zdXBwb3J0OjpHZXRB
YnNvbHV0ZVdlYlN0cmluZ0Zyb21VVEY4UGF0aChmaWxlc1tpXSkpOwogICAgIGN1cnJlbnREcmFn
RWZmZWN0c0FsbG93ZWQgPSBXZWJLaXQ6OldlYkRyYWdPcGVyYXRpb25Db3B5OwogCiAgICAgLy8g
UHJvdmlkZSBhIGRyYWcgc291cmNlLgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwIGIvV2ViS2l0VG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCmluZGV4IDQ1ODAw
MTQuLjZmNGQ4YmEgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL0xheW91dFRlc3RDb250cm9sbGVyLmNwcAorKysgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAKQEAgLTU0NCw3ICs1NDQsNyBA
QCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRVc2VyU3R5bGVTaGVldEVuYWJsZWQoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bQogdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
VXNlclN0eWxlU2hlZXRMb2NhdGlvbihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywg
Q3BwVmFyaWFudCogcmVzdWx0KQogewogICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMCAmJiBh
cmd1bWVudHNbMF0uaXNTdHJpbmcoKSkgewotICAgICAgICBtX3VzZXJTdHlsZVNoZWV0TG9jYXRp
b24gPSBXZWJVUkwoR1VSTChUZXN0U2hlbGw6OnJld3JpdGVMb2NhbFVybChhcmd1bWVudHNbMF0u
dG9TdHJpbmcoKSkpKTsKKyAgICAgICAgbV91c2VyU3R5bGVTaGVldExvY2F0aW9uID0gd2Via2l0
X3N1cHBvcnQ6OlJld3JpdGVMYXlvdXRUZXN0c1VSTChhcmd1bWVudHNbMF0udG9TdHJpbmcoKSk7
CiAgICAgICAgIG1fc2hlbGwtPndlYlZpZXcoKS0+c2V0dGluZ3MoKS0+c2V0VXNlclN0eWxlU2hl
ZXRMb2NhdGlvbihtX3VzZXJTdHlsZVNoZWV0TG9jYXRpb24pOwogICAgIH0KICAgICByZXN1bHQt
PnNldE51bGwoKTsKQEAgLTY1Niw4ICs2NTYsNyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpwYXRoVG9Mb2NhbFJlc291cmNlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLAog
ICAgIC8vIHRoZW0gdG8ganVzdCBmaWxlOi8vLy4KICAgICB3aGlsZSAoU3RhcnRzV2l0aEFTQ0lJ
KHVybCwgImZpbGU6Ly8vLyIsIGZhbHNlKSkKICAgICAgICAgdXJsID0gdXJsLnN1YnN0cigwLCA4
KSArIHVybC5zdWJzdHIoOSk7Ci0gICAgR1VSTCBsb2NhdGlvbihUZXN0U2hlbGw6OnJld3JpdGVM
b2NhbFVybCh1cmwpKTsKLSAgICByZXN1bHQtPnNldChsb2NhdGlvbi5zcGVjKCkpOworICAgIHJl
c3VsdC0+c2V0KHdlYmtpdF9zdXBwb3J0OjpSZXdyaXRlTGF5b3V0VGVzdHNVUkwodXJsKS5zcGVj
KCkpOwogfQogCiB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGRGaWxlVG9QYXN0ZWJvYXJk
T25EcmFnKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKZGlmZiAt
LWdpdCBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1RleHRJbnB1dENvbnRy
b2xsZXIuY3BwIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGV4dElucHV0
Q29udHJvbGxlci5jcHAKaW5kZXggZjIxODZjYS4uNGIyN2M3NCAxMDA2NDQKLS0tIGEvV2ViS2l0
VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGV4dElucHV0Q29udHJvbGxlci5jcHAKKysr
IGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGV4dElucHV0Q29udHJvbGxl
ci5jcHAKQEAgLTMyLDEzICszMiwxNCBAQAogI2luY2x1ZGUgIlRleHRJbnB1dENvbnRyb2xsZXIu
aCIKIAogI2luY2x1ZGUgIlRlc3RTaGVsbC5oIgotI2luY2x1ZGUgImJhc2Uvc3RyaW5nX3V0aWwu
aCIKICNpbmNsdWRlICJwdWJsaWMvV2ViRnJhbWUuaCIKICNpbmNsdWRlICJwdWJsaWMvV2ViUmFu
Z2UuaCIKICNpbmNsdWRlICJwdWJsaWMvV2ViU3RyaW5nLmgiCiAjaW5jbHVkZSAicHVibGljL1dl
YlZpZXcuaCIKKyNpbmNsdWRlIDxzdHJpbmc+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Cit1
c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBUZXN0U2hlbGwqIFRleHRJbnB1dENvbnRyb2xsZXI6OnRl
c3RTaGVsbCA9IDA7CiAKQEAgLTE2NCw3ICsxNjUsOSBAQCB2b2lkIFRleHRJbnB1dENvbnRyb2xs
ZXI6Om1hcmtlZFJhbmdlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3Vs
dAogICAgICAgICByZXR1cm47CiAKICAgICBXZWJSYW5nZSByYW5nZSA9IG1haW5GcmFtZS0+bWFy
a2VkUmFuZ2UoKTsKLSAgICByZXN1bHQtPnNldChTdHJpbmdQcmludGYoIiVkLCVkIiwgcmFuZ2Uu
c3RhcnRPZmZzZXQoKSwgcmFuZ2UuZW5kT2Zmc2V0KCkpKTsKKyAgICBjaGFyIGJ1ZmZlclszMF07
CisgICAgc25wcmludGYoYnVmZmVyLCAzMCwgIiVkLCVkIiwgcmFuZ2Uuc3RhcnRPZmZzZXQoKSwg
cmFuZ2UuZW5kT2Zmc2V0KCkpOworICAgIHJlc3VsdC0+c2V0KHN0cmluZyhidWZmZXIpKTsKIH0K
IAogdm9pZCBUZXh0SW5wdXRDb250cm9sbGVyOjpzZWxlY3RlZFJhbmdlKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKQEAgLTE3Niw3ICsxNzksOSBAQCB2b2lkIFRl
eHRJbnB1dENvbnRyb2xsZXI6OnNlbGVjdGVkUmFuZ2UoY29uc3QgQ3BwQXJndW1lbnRMaXN0Jiwg
Q3BwVmFyaWFudCogcmVzdQogICAgICAgICByZXR1cm47CiAKICAgICBXZWJSYW5nZSByYW5nZSA9
IG1haW5GcmFtZS0+c2VsZWN0aW9uUmFuZ2UoKTsKLSAgICByZXN1bHQtPnNldChTdHJpbmdQcmlu
dGYoIiVkLCVkIiwgcmFuZ2Uuc3RhcnRPZmZzZXQoKSwgcmFuZ2UuZW5kT2Zmc2V0KCkpKTsKKyAg
ICBjaGFyIGJ1ZmZlclszMF07CisgICAgc25wcmludGYoYnVmZmVyLCAzMCwgIiVkLCVkIiwgcmFu
Z2Uuc3RhcnRPZmZzZXQoKSwgcmFuZ2UuZW5kT2Zmc2V0KCkpOworICAgIHJlc3VsdC0+c2V0KHN0
cmluZyhidWZmZXIpKTsKIH0KIAogdm9pZCBUZXh0SW5wdXRDb250cm9sbGVyOjpmaXJzdFJlY3RG
b3JDaGFyYWN0ZXJSYW5nZShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1
bHQpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9RdExhdW5jaGVyL3VzZXJhZ2VudGxpc3QudHh0
IGIvV2ViS2l0VG9vbHMvUXRMYXVuY2hlci91c2VyYWdlbnRsaXN0LnR4dAppbmRleCAwMjRhOWM5
Li5jYTUzNjkzIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9RdExhdW5jaGVyL3VzZXJhZ2VudGxp
c3QudHh0CisrKyBiL1dlYktpdFRvb2xzL1F0TGF1bmNoZXIvdXNlcmFnZW50bGlzdC50eHQKQEAg
LTIsNyArMiw4IEBAIE1vemlsbGEvNS4wIChYMTE7IFU7IExpbnV4OyBlbi1VUykgQXBwbGVXZWJL
aXQvNTMzLjMgKEtIVE1MLCBsaWtlIEdlY2tvKSBRdExhdW5jCiBNb3ppbGxhLzUuMCAoU3ltYmlh
bk9TLzkuNDsgVTsgU2VyaWVzNjAvNS4wOyBlbi1HQikgQXBwbGVXZWJLaXQvNTMzLjMgKEtIVE1M
LCBsaWtlIEdlY2tvKSBRdExhdW5jaGVyLzAuMSBNb2JpbGUgU2FmYXJpLzUzMy4zCiBNb3ppbGxh
LzUuMCAoTWFjaW50b3NoOyBVOyBQUEMgTWFjIE9TIFg7IGVuKSBBcHBsZVdlYktpdC8xMjUuMiAo
S0hUTUwsIGxpa2UgR2Vja28pIFNhZmFyaS8xMjUuOAogTW96aWxsYS81LjAgKExpbnV4OyBVOyBB
bmRyb2lkIDEuMTsgZW4tZ2I7IGRyZWFtKSBBcHBsZVdlYktpdC81MjUuMTArIChLSFRNTCwgbGlr
ZSBHZWNrbykgVmVyc2lvbi8zLjAuNCBNb2JpbGUgU2FmYXJpLzUyMy4xMi4yCi1Nb3ppbGxhLzUu
MCAoaVBob25lOyBVOyBDUFUgbGlrZSBNYWMgT1MgWDsgZW4pCitNb3ppbGxhLzUuMCAoaVBob25l
OyBVOyBDUFUgT1MgM18yIGxpa2UgTWFjIE9TIFg7IGVuLXVzKSBBcHBsZVdlYktpdC81MzEuMjEu
MTAgKEtIVE1MLCBsaWtlIEdlY2tvKSBWZXJzaW9uLzQuMC40IE1vYmlsZS83QjMzNGIgU2FmYXJp
LzUzMS4yMS4xMAorTW96aWxsYS81LjAoaVBhZDsgVTsgQ1BVIGlQaG9uZSBPUyAzXzIgbGlrZSBN
YWMgT1MgWDsgZW4tdXMpIEFwcGxlV2ViS2l0LzUzMS4yMS4xMCAoS0hUTUwsIGxpa2UgR2Vja28p
IFZlcnNpb24vNC4wLjQgTW9iaWxlLzdCMzE0IFNhZmFyaS81MzEuMjEuMTAKIE9wZXJhLzkuMjUg
KFdpbmRvd3MgTlQgNi4wOyBVOyBlbikKIE1vemlsbGEvNS4wIChTeW1iaWFuT1MvOS40OyBVOyBT
ZXJpZXM2MC81LjAgTm9raWE1ODAwZC0xYi8yMC4yLjAxNDsgUHJvZmlsZS9NSURQLTIuMSBDb25m
aWd1cmF0aW9uL0NMREMtMS4xICkgQXBwbGVXZWJLaXQvNDEzIChLSFRNTCwgbGlrZSBHZWNrbykg
U2FmYXJpLzQxMwogTW96aWxsYS80LjAgKGNvbXBhdGlibGU7IE1TSUUgOC4wOyBXaW5kb3dzIE5U
IDYuMjsgVHJpZGVudC80LjA7IFNMQ0MyOyAuTkVUIENMUiAyLjAuNTA3Mjc7IC5ORVQgQ0xSIDMu
NS4zMDcyOTsgLk5FVCBDTFIgMy4wLjMwNzI5OyBNZWRpYSBDZW50ZXIgUEMgNi4wKQpkaWZmIC0t
Z2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvY29tbWl0
aW5mby5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L2Nv
bW1pdGluZm8ucHkKaW5kZXggYzY4MjIyMS4uN2MzMzE1ZiAxMDA2NDQKLS0tIGEvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvY29tbWl0aW5mby5weQorKysgYi9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9jb21taXRpbmZvLnB5
CkBAIC0zMCw2ICszMCw3IEBACiAKIGltcG9ydCBTdHJpbmdJTwogCitmcm9tIHdlYmtpdHB5LmNv
bW1vbi5jaGVja291dC5jaGFuZ2Vsb2cgaW1wb3J0IHZpZXdfc291cmNlX3VybAogZnJvbSB3ZWJr
aXRweS5jb21tb24uY29uZmlnLmNvbW1pdHRlcnMgaW1wb3J0IENvbW1pdHRlckxpc3QKIAogCkBA
IC04MSwzICs4MiwxNCBAQCBjbGFzcyBDb21taXRJbmZvKG9iamVjdCk6CiAgICAgICAgICAgICBz
ZWxmLnJldmlld2VyKCksCiAgICAgICAgIF0KICAgICAgICAgcmV0dXJuIHNldChbcGFydHkgZm9y
IHBhcnR5IGluIHJlc3BvbnNpYmxlX3BhcnRpZXMgaWYgcGFydHldKSAjIEZpbHRlciBvdXQgTm9u
ZQorCisgICAgIyBGSVhNRTogSXQgaXMgc2xpZ2h0bHkgbGFtZSB0aGF0IHRoaXMgInZpZXciIG1l
dGhvZCBpcyBvbiB0aGlzICJtb2RlbCIgY2xhc3MgKGluIE1WQyB0ZXJtcykKKyAgICBkZWYgYmxh
bWVfc3RyaW5nKHNlbGYsIGJ1Z3MpOgorICAgICAgICBzdHJpbmcgPSAiciVzOlxuIiAlIHNlbGYu
cmV2aXNpb24oKQorICAgICAgICBzdHJpbmcgKz0gIiAgJXNcbiIgJSB2aWV3X3NvdXJjZV91cmwo
c2VsZi5yZXZpc2lvbigpKQorICAgICAgICBzdHJpbmcgKz0gIiAgQnVnOiAlcyAoJXMpXG4iICUg
KHNlbGYuYnVnX2lkKCksIGJ1Z3MuYnVnX3VybF9mb3JfYnVnX2lkKHNlbGYuYnVnX2lkKCkpKQor
ICAgICAgICBhdXRob3JfbGluZSA9ICJcIiVzXCIgPCVzPiIgJSAoc2VsZi5hdXRob3JfbmFtZSgp
LCBzZWxmLmF1dGhvcl9lbWFpbCgpKQorICAgICAgICBzdHJpbmcgKz0gIiAgQXV0aG9yOiAlc1xu
IiAlIChzZWxmLmF1dGhvcigpIG9yIGF1dGhvcl9saW5lKQorICAgICAgICBzdHJpbmcgKz0gIiAg
UmV2aWV3ZXI6ICVzXG4iICUgKHNlbGYucmV2aWV3ZXIoKSBvciBzZWxmLnJldmlld2VyX3RleHQo
KSkKKyAgICAgICAgc3RyaW5nICs9ICIgIENvbW1pdHRlcjogJXMiICUgc2VsZi5jb21taXR0ZXIo
KQorICAgICAgICByZXR1cm4gc3RyaW5nCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2NvbW1vbi9jb25maWcvY29tbWl0dGVycy5weSBiL1dlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvY29tbW9uL2NvbmZpZy9jb21taXR0ZXJzLnB5CmluZGV4IGI3YjUxYmUuLjhm
MjY4NDggMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2Nv
bmZpZy9jb21taXR0ZXJzLnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29t
bW9uL2NvbmZpZy9jb21taXR0ZXJzLnB5CkBAIC0xNjQsNiArMTY0LDcgQEAgY29tbWl0dGVyc191
bmFibGVfdG9fcmV2aWV3ID0gWwogICAgIENvbW1pdHRlcigiWXV6byBGdWppc2hpbWEiLCAieXV6
b0Bnb29nbGUuY29tIiwgInl1em8iKSwKICAgICBDb21taXR0ZXIoIlpvbHRhbiBIZXJjemVnIiwg
InpoZXJjemVnQHdlYmtpdC5vcmciLCAiemhlcmN6ZWciKSwKICAgICBDb21taXR0ZXIoIlpvbHRh
biBIb3J2YXRoIiwgInpvbHRhbkB3ZWJraXQub3JnIiwgInpvbHRhbiIpLAorICAgIENvbW1pdHRl
cigiQW5keSBFc3RlcyIsICJhZXN0ZXNAYXBwbGUuY29tIiwgImVzdGVzIiksCiBdCiAKIApkaWZm
IC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0L2J1Z3ppbGxh
LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0L2J1Z3ppbGxhLnB5
CmluZGV4IDE5NTFjNjguLmJiMjJkMTQgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvY29tbW9uL25ldC9idWd6aWxsYS5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2NvbW1vbi9uZXQvYnVnemlsbGEucHkKQEAgLTM2LDIwICszNiwxNSBAQCBpbXBv
cnQgc3VicHJvY2VzcwogCiBmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZSAjIHVzZWQgaW4g
dGltZXN0YW1wKCkKIAotIyBJbXBvcnQgV2ViS2l0LXNwZWNpZmljIG1vZHVsZXMuCiBmcm9tIHdl
YmtpdHB5LmNvbW1vbi5zeXN0ZW0uZGVwcmVjYXRlZF9sb2dnaW5nIGltcG9ydCBlcnJvciwgbG9n
CiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5jb25maWcgaW1wb3J0IGNvbW1pdHRlcnMKIGZyb20gd2Vi
a2l0cHkuY29tbW9uLm5ldC5jcmVkZW50aWFscyBpbXBvcnQgQ3JlZGVudGlhbHMKIGZyb20gd2Vi
a2l0cHkuY29tbW9uLnN5c3RlbS5vc3BhdGggaW1wb3J0IHJlbHBhdGgKIGZyb20gd2Via2l0cHku
Y29tbW9uLnN5c3RlbS51c2VyIGltcG9ydCBVc2VyCiBmcm9tIHdlYmtpdHB5LnRoaXJkcGFydHku
YXV0b2luc3RhbGxlZC5tZWNoYW5pemUgaW1wb3J0IEJyb3dzZXIKLQotIyBXZWJLaXQgaW5jbHVk
ZXMgYSBidWlsdCBjb3B5IG9mIEJlYXV0aWZ1bFNvdXAgaW4gU2NyaXB0cy93ZWJraXRweS90aGly
ZHBhcnR5Ci0jIHNvIHRoaXMgaW1wb3J0IHNob3VsZCBhbHdheXMgc3VjY2VlZC4KIGZyb20gd2Vi
a2l0cHkudGhpcmRwYXJ0eS5CZWF1dGlmdWxTb3VwIGltcG9ydCBCZWF1dGlmdWxTb3VwLCBTb3Vw
U3RyYWluZXIKIAogCi0KIGRlZiBwYXJzZV9idWdfaWQobWVzc2FnZSk6CiAgICAgaWYgbm90IG1l
c3NhZ2U6CiAgICAgICAgIHJldHVybiBOb25lCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9uZXQvYnVpbGRib3QucHkgYi9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2NvbW1vbi9uZXQvYnVpbGRib3QucHkKaW5kZXggNTBlOTZhNC4uMjkyNGIxNCAx
MDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0L2J1aWxk
Ym90LnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL25ldC9idWls
ZGJvdC5weQpAQCAtMzQsMTUgKzM0LDE0IEBAIGltcG9ydCB1cmxsaWIKIGltcG9ydCB1cmxsaWIy
CiBpbXBvcnQgeG1scnBjbGliCiAKLSMgSW1wb3J0IFdlYktpdC1zcGVjaWZpYyBtb2R1bGVzLgot
ZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmRlcHJlY2F0ZWRfbG9nZ2luZyBpbXBvcnQgbG9n
Ci0KK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5sb2d1dGlscyBpbXBvcnQgZ2V0X2xvZ2dl
cgogZnJvbSB3ZWJraXRweS50aGlyZHBhcnR5LmF1dG9pbnN0YWxsZWQubWVjaGFuaXplIGltcG9y
dCBCcm93c2VyCi0jIFdlYktpdCBpbmNsdWRlcyBhIGJ1aWx0IGNvcHkgb2YgQmVhdXRpZnVsU291
cCBpbiBTY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkKLSMgc28gdGhpcyBpbXBvcnQgc2hvdWxk
IGFsd2F5cyBzdWNjZWVkLgogZnJvbSB3ZWJraXRweS50aGlyZHBhcnR5LkJlYXV0aWZ1bFNvdXAg
aW1wb3J0IEJlYXV0aWZ1bFNvdXAKIAogCitfbG9nID0gZ2V0X2xvZ2dlcihfX2ZpbGVfXykKKwor
CiBjbGFzcyBCdWlsZGVyKG9iamVjdCk6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIGJ1
aWxkYm90KToKICAgICAgICAgc2VsZi5fbmFtZSA9IHVuaWNvZGUobmFtZSkKQEAgLTEyMCwxMiAr
MTE5LDIwIEBAIGNsYXNzIEJ1aWxkZXIob2JqZWN0KToKICAgICAgICAgIyBUaGlzIGFzc3VtZXMg
dGhlcmUgd2FzIG9ubHkgb25lIGJ1aWxkIHBlciByZXZpc2lvbiwgd2hpY2ggaXMgZmFsc2UgYnV0
IHdlIGRvbid0IGNhcmUgZm9yIG5vdy4KICAgICAgICAgcmV0dXJuIGRpY3QoW3NlbGYuX3Jldmlz
aW9uX2FuZF9idWlsZF9mb3JfZmlsZW5hbWUoZmlsZV9pbmZvWyJmaWxlbmFtZSJdKSBmb3IgZmls
ZV9pbmZvIGluIHJlc3VsdF9maWxlc10pCiAKLSAgICAjIFRoaXMgYXNzdW1lcyB0aGVyZSBjYW4g
YmUgb25seSBvbmUgYnVpbGQgcGVyIHJldmlzaW9uLCB3aGljaCBpcyBmYWxzZSwgYnV0IHdlIGRv
bid0IGNhcmUgZm9yIG5vdy4KLSAgICBkZWYgYnVpbGRfZm9yX3JldmlzaW9uKHNlbGYsIHJldmlz
aW9uLCBhbGxvd19mYWlsZWRfbG9va3Vwcz1GYWxzZSk6CisgICAgZGVmIF9yZXZpc2lvbl90b19i
dWlsZF9tYXAoc2VsZik6CiAgICAgICAgIGlmIG5vdCBzZWxmLl9yZXZpc2lvbl90b19idWlsZF9u
dW1iZXI6CiAgICAgICAgICAgICBzZWxmLl9yZXZpc2lvbl90b19idWlsZF9udW1iZXIgPSBzZWxm
Ll9mZXRjaF9yZXZpc2lvbl90b19idWlsZF9tYXAoKQorICAgICAgICByZXR1cm4gc2VsZi5fcmV2
aXNpb25fdG9fYnVpbGRfbnVtYmVyCisKKyAgICBkZWYgcmV2aXNpb25fYnVpbGRfcGFpcnNfd2l0
aF9yZXN1bHRzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fcmV2aXNpb25fdG9fYnVpbGRf
bWFwKCkuaXRlbXMoKQorCisgICAgIyBUaGlzIGFzc3VtZXMgdGhlcmUgY2FuIGJlIG9ubHkgb25l
IGJ1aWxkIHBlciByZXZpc2lvbiwgd2hpY2ggaXMgZmFsc2UsIGJ1dCB3ZSBkb24ndCBjYXJlIGZv
ciBub3cuCisgICAgZGVmIGJ1aWxkX2Zvcl9yZXZpc2lvbihzZWxmLCByZXZpc2lvbiwgYWxsb3df
ZmFpbGVkX2xvb2t1cHM9RmFsc2UpOgogICAgICAgICAjIE5PVEU6IFRoaXMgbG9va3VwIHdpbGwg
ZmFpbCBpZiB0aGF0IGV4YWN0IHJldmlzaW9uIHdhcyBuZXZlciBidWlsdC4KLSAgICAgICAgYnVp
bGRfbnVtYmVyID0gc2VsZi5fcmV2aXNpb25fdG9fYnVpbGRfbnVtYmVyLmdldChpbnQocmV2aXNp
b24pKQorICAgICAgICBidWlsZF9udW1iZXIgPSBzZWxmLl9yZXZpc2lvbl90b19idWlsZF9tYXAo
KS5nZXQoaW50KHJldmlzaW9uKSkKKyAgICAgICAgaWYgbm90IGJ1aWxkX251bWJlcjoKKyAgICAg
ICAgICAgIHJldHVybiBOb25lCiAgICAgICAgIGJ1aWxkID0gc2VsZi5idWlsZChidWlsZF9udW1i
ZXIpCiAgICAgICAgIGlmIG5vdCBidWlsZCBhbmQgYWxsb3dfZmFpbGVkX2xvb2t1cHM6CiAgICAg
ICAgICAgICAjIEJ1aWxkcyBmb3Igb2xkIHJldmlzaW9ucyB3aXRoIGZhaWwgdG8gbG9va3VwIHZp
YSBidWlsZGJvdCdzIHhtbHJwYyBhcGkuCkBAIC0xNzIsNiArMTc5LDE0IEBAIGNsYXNzIEJ1aWxk
ZXIob2JqZWN0KToKICAgICAgICAgIyB3aXRoIHJlZCBidWlsZCwgc28gd2UndmUgZm91bmQgb3Vy
IGZhaWx1cmUgdHJhbnNpdGlvbi4KICAgICAgICAgcmV0dXJuIChjdXJyZW50X2J1aWxkLCBidWls
ZF9hZnRlcl9jdXJyZW50X2J1aWxkKQogCisgICAgIyBGSVhNRTogVGhpcyBsaWtlbHkgZG9lcyBu
b3QgYmVsb25nIG9uIEJ1aWxkZXIKKyAgICBkZWYgc3VzcGVjdF9yZXZpc2lvbnNfZm9yX3RyYW5z
aXRpb24oc2VsZiwgbGFzdF9nb29kX2J1aWxkLCBmaXJzdF9iYWRfYnVpbGQpOgorICAgICAgICBz
dXNwZWN0X3JldmlzaW9ucyA9IHJhbmdlKGZpcnN0X2JhZF9idWlsZC5yZXZpc2lvbigpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RfZ29vZF9idWlsZC5yZXZpc2lvbigp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xKQorICAgICAgICBzdXNwZWN0
X3JldmlzaW9ucy5yZXZlcnNlKCkKKyAgICAgICAgcmV0dXJuIHN1c3BlY3RfcmV2aXNpb25zCisK
ICAgICBkZWYgYmxhbWV3b3J0aHlfcmV2aXNpb25zKHNlbGYsIHJlZF9idWlsZF9udW1iZXIsIGxv
b2tfYmFja19saW1pdD0zMCwgYXZvaWRfZmxha2V5X3Rlc3RzPVRydWUpOgogICAgICAgICByZWRf
YnVpbGQgPSBzZWxmLmJ1aWxkKHJlZF9idWlsZF9udW1iZXIpCiAgICAgICAgIChsYXN0X2dvb2Rf
YnVpbGQsIGZpcnN0X2JhZF9idWlsZCkgPSBcCkBAIC0xODIsMTMgKzE5NywxMCBAQCBjbGFzcyBC
dWlsZGVyKG9iamVjdCk6CiAgICAgICAgICMgc3VzcGVjdCBhIHJlYWwgZmFpbHVyZSB0cmFuc2l0
aW9uLgogICAgICAgICBpZiBhdm9pZF9mbGFrZXlfdGVzdHMgYW5kIGZpcnN0X2JhZF9idWlsZCA9
PSByZWRfYnVpbGQ6CiAgICAgICAgICAgICByZXR1cm4gW10KLSAgICAgICAgc3VzcGVjdF9yZXZp
c2lvbnMgPSByYW5nZShmaXJzdF9iYWRfYnVpbGQucmV2aXNpb24oKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsYXN0X2dvb2RfYnVpbGQucmV2aXNpb24oKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAtMSkKLSAgICAgICAgc3VzcGVjdF9yZXZpc2lvbnMu
cmV2ZXJzZSgpCi0gICAgICAgIHJldHVybiBzdXNwZWN0X3JldmlzaW9ucworICAgICAgICByZXR1
cm4gc2VsZi5zdXNwZWN0X3JldmlzaW9uc19mb3JfdHJhbnNpdGlvbihsYXN0X2dvb2RfYnVpbGQs
IGZpcnN0X2JhZF9idWlsZCkKIAogCisjIEZJWE1FOiBUaGlzIHNob3VsZCBiZSB1bmlmaWVkIHdp
dGggYWxsIHRoZSBsYXlvdXQgdGVzdCByZXN1bHRzIGNvZGUgaW4gdGhlIGxheW91dF90ZXN0cyBw
YWNrYWdlCiBjbGFzcyBMYXlvdXRUZXN0UmVzdWx0cyhvYmplY3QpOgogICAgIHN0ZGVycl9rZXkg
PSB1J1Rlc3RzIHRoYXQgaGFkIHN0ZGVyciBvdXRwdXQ6JwogICAgIGZhaWxfa2V5ID0gdSdUZXN0
cyB3aGVyZSByZXN1bHRzIGRpZCBub3QgbWF0Y2ggZXhwZWN0ZWQgcmVzdWx0czonCkBAIC0yMTEs
OCArMjIzLDkgQEAgY2xhc3MgTGF5b3V0VGVzdFJlc3VsdHMob2JqZWN0KToKICAgICAgICAgZm9y
IHRhYmxlIGluIHRhYmxlczoKICAgICAgICAgICAgIHRhYmxlX3RpdGxlID0gdGFibGUuZmluZFBy
ZXZpb3VzU2libGluZygicCIpLnN0cmluZwogICAgICAgICAgICAgaWYgdGFibGVfdGl0bGUgbm90
IGluIGNscy5leHBlY3RlZF9rZXlzOgotICAgICAgICAgICAgICAgIHJhaXNlICJVbmhhbmRsZWQg
dGl0bGU6ICVzIiAlIHN0cih0YWJsZV90aXRsZSkKLSAgICAgICAgICAgICMgV2UgbWlnaHQgd2Fu
dCB0byB0cmFuc2xhdGUgdGFibGUgdGl0bGVzIGludG8gaWRlbnRpZmllcnMgYXQgc29tZSBwb2lu
dC4KKyAgICAgICAgICAgICAgICAjIFRoaXMgRXhjZXB0aW9uIHNob3VsZCBvbmx5IGV2ZXIgYmUg
aGl0IGlmIHJ1bi13ZWJraXQtdGVzdHMgY2hhbmdlcyBpdHMgcmVzdWx0cy5odG1sIGZvcm1hdC4K
KyAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlVuaGFuZGxlZCB0aXRsZTogJXMiICUg
c3RyKHRhYmxlX3RpdGxlKSkKKyAgICAgICAgICAgICMgV2UgbWlnaHQgd2FudCB0byB0cmFuc2xh
dGUgdGFibGUgdGl0bGVzIGludG8gaWRlbnRpZmllcnMgYmVmb3JlIHN0b3JpbmcuCiAgICAgICAg
ICAgICBwYXJzZWRfcmVzdWx0c1t0YWJsZV90aXRsZV0gPSBbcm93LmZpbmQoImEiKS5zdHJpbmcg
Zm9yIHJvdyBpbiB0YWJsZS5maW5kQWxsKCJ0ciIpXQogCiAgICAgICAgIHJldHVybiBwYXJzZWRf
cmVzdWx0cwpAQCAtMzg0LDcgKzM5Nyw3IEBAIGNsYXNzIEJ1aWxkQm90KG9iamVjdCk6CiAgICAg
ICAgICAgICByZXR1cm4gcHJveHkuZ2V0QnVpbGQoYnVpbGRlci5uYW1lKCksIGludChidWlsZF9u
dW1iZXIpKQogICAgICAgICBleGNlcHQgeG1scnBjbGliLkZhdWx0LCBlcnI6CiAgICAgICAgICAg
ICBidWlsZF91cmwgPSBCdWlsZC5idWlsZF91cmwoYnVpbGRlciwgYnVpbGRfbnVtYmVyKQotICAg
ICAgICAgICAgbG9nKCJFcnJvciBmZXRjaGluZyBkYXRhIGZvciAlcyBidWlsZCAlcyAoJXMpOiAl
cyIgJSAoYnVpbGRlci5uYW1lKCksIGJ1aWxkX251bWJlciwgYnVpbGRfdXJsLCBlcnIpKQorICAg
ICAgICAgICAgX2xvZy5lcnJvcigiRXJyb3IgZmV0Y2hpbmcgZGF0YSBmb3IgJXMgYnVpbGQgJXMg
KCVzKTogJXMiICUgKGJ1aWxkZXIubmFtZSgpLCBidWlsZF9udW1iZXIsIGJ1aWxkX3VybCwgZXJy
KSkKICAgICAgICAgICAgIHJldHVybiBOb25lCiAKICAgICBkZWYgX2ZldGNoX29uZV9ib3hfcGVy
X2J1aWxkZXIoc2VsZik6CkBAIC00NDMsNyArNDU2LDggQEAgY2xhc3MgQnVpbGRCb3Qob2JqZWN0
KToKICAgICAgICAgICAgICAgICByZXZpc2lvbl90b19mYWlsaW5nX2JvdHNbcmV2aXNpb25dID0g
ZmFpbGluZ19ib3RzCiAgICAgICAgIHJldHVybiByZXZpc2lvbl90b19mYWlsaW5nX2JvdHMKIAot
ICAgICMgRklYTUU6IFRoaXMgaXMgYSBoYWNrIGFyb3VuZCBsYWNrIG9mIEJ1aWxkZXIubGF0ZXN0
X2J1aWxkKCkgc3VwcG9ydAorICAgICMgVGhpcyBtYWtlcyBmZXdlciByZXF1ZXN0cyB0aGFuIGNh
bGxpbmcgQnVpbGRlci5sYXRlc3RfYnVpbGQgd291bGQuICBJdCBncmFicyBhbGwgYnVpbGRlcgor
ICAgICMgc3RhdHVzZXMgaW4gb25lIHJlcXVlc3QgdXNpbmcgc2VsZi5idWlsZGVyX3N0YXR1c2Vz
IChmZXRjaGluZyAvb25lX2JveF9wZXJfYnVpbGRlciBpbnN0ZWFkIG9mIGJ1aWxkZXIgcGFnZXMp
LgogICAgIGRlZiBfbGF0ZXN0X2J1aWxkc19mcm9tX2J1aWxkZXJzKHNlbGYsIG9ubHlfY29yZV9i
dWlsZGVycz1UcnVlKToKICAgICAgICAgYnVpbGRlcl9zdGF0dXNlcyA9IHNlbGYuY29yZV9idWls
ZGVyX3N0YXR1c2VzKCkgaWYgb25seV9jb3JlX2J1aWxkZXJzIGVsc2Ugc2VsZi5idWlsZGVyX3N0
YXR1c2VzKCkKICAgICAgICAgcmV0dXJuIFtzZWxmLmJ1aWxkZXJfd2l0aF9uYW1lKHN0YXR1c1si
bmFtZSJdKS5idWlsZChzdGF0dXNbImJ1aWxkX251bWJlciJdKSBmb3Igc3RhdHVzIGluIGJ1aWxk
ZXJfc3RhdHVzZXNdCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi9uZXQvc3RhdHVzc2VydmVyLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9j
b21tb24vbmV0L3N0YXR1c3NlcnZlci5weQppbmRleCBjMGMwNzViLi5lODk4N2E5IDEwMDY0NAot
LS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9uZXQvc3RhdHVzc2VydmVy
LnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL25ldC9zdGF0dXNz
ZXJ2ZXIucHkKQEAgLTI5LDkgKzI5LDYgQEAKIGZyb20gd2Via2l0cHkuY29tbW9uLm5ldC5uZXR3
b3JrdHJhbnNhY3Rpb24gaW1wb3J0IE5ldHdvcmtUcmFuc2FjdGlvbgogZnJvbSB3ZWJraXRweS5j
b21tb24uc3lzdGVtLmRlcHJlY2F0ZWRfbG9nZ2luZyBpbXBvcnQgbG9nCiBmcm9tIHdlYmtpdHB5
LnRoaXJkcGFydHkuYXV0b2luc3RhbGxlZC5tZWNoYW5pemUgaW1wb3J0IEJyb3dzZXIKLQotIyBX
ZWJLaXQgaW5jbHVkZXMgYSBidWlsdCBjb3B5IG9mIEJlYXV0aWZ1bFNvdXAgaW4gU2NyaXB0cy93
ZWJraXRweS90aGlyZHBhcnR5Ci0jIHNvIHRoaXMgaW1wb3J0IHNob3VsZCBhbHdheXMgc3VjY2Vl
ZC4KIGZyb20gd2Via2l0cHkudGhpcmRwYXJ0eS5CZWF1dGlmdWxTb3VwIGltcG9ydCBCZWF1dGlm
dWxTb3VwCiAKIGltcG9ydCB1cmxsaWIyCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X2V4cGVjdGF0aW9ucy5w
eSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNr
YWdlL3Rlc3RfZXhwZWN0YXRpb25zLnB5CmluZGV4IDgzZDRlZTMuLjE3MjY4YWIgMTAwNjQ0Ci0t
LSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNr
YWdlL3Rlc3RfZXhwZWN0YXRpb25zLnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfZXhwZWN0YXRpb25zLnB5CkBAIC0x
NTgsOSArMTU4LDkgQEAgY2xhc3MgVGVzdEV4cGVjdGF0aW9uczoKICAgICAgICAgcmV0dXJuIHNl
bGYuX2V4cGVjdGVkX2ZhaWx1cmVzLmdldF90ZXN0c193aXRoX3RpbWVsaW5lKHRpbWVsaW5lKQog
CiAgICAgZGVmIG1hdGNoZXNfYW5fZXhwZWN0ZWRfcmVzdWx0KHNlbGYsIHRlc3QsIHJlc3VsdCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxfdGVzdHNfYXJlX2Rpc2Fi
bGVkKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxfdGVzdHNfYXJl
X2VuYWJsZWQpOgogICAgICAgICBleHBlY3RlZF9yZXN1bHRzID0gc2VsZi5fZXhwZWN0ZWRfZmFp
bHVyZXMuZ2V0X2V4cGVjdGF0aW9ucyh0ZXN0KQotICAgICAgICBpZiBwaXhlbF90ZXN0c19hcmVf
ZGlzYWJsZWQ6CisgICAgICAgIGlmIG5vdCBwaXhlbF90ZXN0c19hcmVfZW5hYmxlZDoKICAgICAg
ICAgICAgIGV4cGVjdGVkX3Jlc3VsdHMgPSByZW1vdmVfcGl4ZWxfZmFpbHVyZXMoZXhwZWN0ZWRf
cmVzdWx0cykKICAgICAgICAgcmV0dXJuIHJlc3VsdF93YXNfZXhwZWN0ZWQocmVzdWx0LCBleHBl
Y3RlZF9yZXN1bHRzLAogICAgICAgICAgICAgc2VsZi5pc19yZWJhc2VsaW5pbmcodGVzdCksIHNl
bGYuaGFzX21vZGlmaWVyKHRlc3QsIFNLSVApKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9leHBlY3RhdGlv
bnNfdGVzdC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xh
eW91dF9wYWNrYWdlL3Rlc3RfZXhwZWN0YXRpb25zX3Rlc3QucHkKaW5kZXggMTc1OTNmMS4uZDEx
ZjNlMiAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9leHBlY3RhdGlvbnNfdGVzdC5weQorKysgYi9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X2V4
cGVjdGF0aW9uc190ZXN0LnB5CkBAIC0xNDksMjEgKzE0OSwyMSBAQCBCVUdfT1ZFUlJJREUgOiBm
YXN0L2h0bWwvYXJ0aWNsZS1lbGVtZW50Lmh0bWwgPSBJTUFHRSIiIikKIAogICAgIGRlZiB0ZXN0
X21hdGNoZXNfYW5fZXhwZWN0ZWRfcmVzdWx0KHNlbGYpOgogCi0gICAgICAgZGVmIG1hdGNoKHRl
c3QsIHJlc3VsdCwgcGl4ZWxfdGVzdHNfZGlzYWJsZWQpOgorICAgICAgIGRlZiBtYXRjaCh0ZXN0
LCByZXN1bHQsIHBpeGVsX3Rlc3RzX2VuYWJsZWQpOgogICAgICAgICAgICByZXR1cm4gc2VsZi5f
ZXhwLm1hdGNoZXNfYW5fZXhwZWN0ZWRfcmVzdWx0KAotICAgICAgICAgICAgICAgc2VsZi5nZXRf
dGVzdCh0ZXN0KSwgcmVzdWx0LCBwaXhlbF90ZXN0c19kaXNhYmxlZCkKKyAgICAgICAgICAgICAg
IHNlbGYuZ2V0X3Rlc3QodGVzdCksIHJlc3VsdCwgcGl4ZWxfdGVzdHNfZW5hYmxlZCkKIAogICAg
ICAgIHNlbGYucGFyc2VfZXhwKHNlbGYuZ2V0X2Jhc2ljX2V4cGVjdGF0aW9ucygpKQotICAgICAg
IHNlbGYuYXNzZXJ0VHJ1ZShtYXRjaCgnZmFzdC9odG1sL2FydGljbGUtZWxlbWVudC5odG1sJywg
VEVYVCwgRmFsc2UpKQogICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRjaCgnZmFzdC9odG1sL2Fy
dGljbGUtZWxlbWVudC5odG1sJywgVEVYVCwgVHJ1ZSkpCi0gICAgICAgc2VsZi5hc3NlcnRGYWxz
ZShtYXRjaCgnZmFzdC9odG1sL2FydGljbGUtZWxlbWVudC5odG1sJywgQ1JBU0gsIEZhbHNlKSkK
KyAgICAgICBzZWxmLmFzc2VydFRydWUobWF0Y2goJ2Zhc3QvaHRtbC9hcnRpY2xlLWVsZW1lbnQu
aHRtbCcsIFRFWFQsIEZhbHNlKSkKICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1hdGNoKCdmYXN0
L2h0bWwvYXJ0aWNsZS1lbGVtZW50Lmh0bWwnLCBDUkFTSCwgVHJ1ZSkpCisgICAgICAgc2VsZi5h
c3NlcnRGYWxzZShtYXRjaCgnZmFzdC9odG1sL2FydGljbGUtZWxlbWVudC5odG1sJywgQ1JBU0gs
IEZhbHNlKSkKIAotICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRjaCgnZmFzdC9ldmVudHMvdGFi
LWltYWdlbWFwLmh0bWwnLCBJTUFHRSwgRmFsc2UpKQotICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSht
YXRjaCgnZmFzdC9ldmVudHMvdGFiLWltYWdlbWFwLmh0bWwnLCBQQVNTLCBUcnVlKSkKKyAgICAg
ICBzZWxmLmFzc2VydFRydWUobWF0Y2goJ2Zhc3QvZXZlbnRzL3RhYi1pbWFnZW1hcC5odG1sJywg
SU1BR0UsIFRydWUpKQorICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRjaCgnZmFzdC9ldmVudHMv
dGFiLWltYWdlbWFwLmh0bWwnLCBQQVNTLCBGYWxzZSkpCiAKLSAgICAgICBzZWxmLmFzc2VydFRy
dWUobWF0Y2goJ2Zhc3QvaHRtbC9rZXlnZW4uaHRtbCcsIFNLSVAsIFRydWUpKQotICAgICAgIHNl
bGYuYXNzZXJ0VHJ1ZShtYXRjaCgnZmFzdC9odG1sL3RhYi1vcmRlci5odG1sJywgUEFTUywgVHJ1
ZSkpCisgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGNoKCdmYXN0L2h0bWwva2V5Z2VuLmh0bWwn
LCBTS0lQLCBGYWxzZSkpCisgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGNoKCdmYXN0L2h0bWwv
dGFiLW9yZGVyLmh0bWwnLCBQQVNTLCBGYWxzZSkpCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5f
Xyc6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X3NoZWxsX3RocmVhZC5w
eSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNr
YWdlL3Rlc3Rfc2hlbGxfdGhyZWFkLnB5CmluZGV4IGRlMzhkZmYuLmIzZWRiODMgMTAwNjQ0Ci0t
LSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNr
YWdlL3Rlc3Rfc2hlbGxfdGhyZWFkLnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3Rfc2hlbGxfdGhyZWFkLnB5CkBAIC04
NSw3ICs4NSw4IEBAIGRlZiBwcm9jZXNzX291dHB1dChwb3J0LCB0ZXN0X2luZm8sIHRlc3RfdHlw
ZXMsIHRlc3RfYXJncywgdGFyZ2V0LCBvdXRwdXRfZGlyLAogICAgICAgICBfbG9nLmRlYnVnKCJT
dGFja3RyYWNlIGZvciAlczpcbiVzIiAlICh0ZXN0X2luZm8uZmlsZW5hbWUsIGVycm9yKSkKICAg
ICAgICAgIyBTdHJpcCBvZmYgImZpbGU6Ly8iIHNpbmNlIFJlbGF0aXZlVGVzdEZpbGVuYW1lIGV4
cGVjdHMKICAgICAgICAgIyBmaWxlc3lzdGVtIHBhdGhzLgotICAgICAgICBmaWxlbmFtZSA9IG9z
LnBhdGguam9pbihvdXRwdXRfZGlyLCB0ZXN0X2luZm8uZmlsZW5hbWUpCisgICAgICAgIGZpbGVu
YW1lID0gb3MucGF0aC5qb2luKG91dHB1dF9kaXIsIHBvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFt
ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9pbmZvLmZpbGVuYW1lKSkK
ICAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLnNwbGl0ZXh0KGZpbGVuYW1lKVswXSArICItc3Rh
Y2sudHh0IgogICAgICAgICBwb3J0Lm1heWJlX21ha2VfZGlyZWN0b3J5KG9zLnBhdGguc3BsaXQo
ZmlsZW5hbWUpWzBdKQogICAgICAgICBvcGVuKGZpbGVuYW1lLCAid2IiKS53cml0ZShlcnJvcikK
ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Bv
cnQvY2hyb21pdW0ucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9wb3J0L2Nocm9taXVtLnB5CmluZGV4IGJmN2U5YWYuLjkwMjU1MzMgMTAwNjQ0Ci0tLSBhL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW0ucHkK
KysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJv
bWl1bS5weQpAQCAtOTAsNyArOTAsNyBAQCBjbGFzcyBDaHJvbWl1bVBvcnQoYmFzZS5Qb3J0KToK
ICAgICAgICAgICAgIHJlc3VsdCA9IGNoZWNrX2ZpbGVfZXhpc3RzKGhlbHBlcl9wYXRoLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xheW91dCB0ZXN0IGhlbHBlcicp
IGFuZCByZXN1bHQKIAotICAgICAgICBpZiBub3Qgc2VsZi5fb3B0aW9ucy5ub19waXhlbF90ZXN0
czoKKyAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5waXhlbF90ZXN0czoKICAgICAgICAgICAgIHJl
c3VsdCA9IHNlbGYuY2hlY2tfaW1hZ2VfZGlmZigKICAgICAgICAgICAgICAgICAnVG8gb3ZlcnJp
ZGUsIGludm9rZSB3aXRoIC0tbm8tcGl4ZWwtdGVzdHMnKSBhbmQgcmVzdWx0CiAKZGlmZiAtLWdp
dCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvbWFjLnB5
IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9tYWMucHkK
aW5kZXggYzczZTQ3OS4uOGRhOTc5OSAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9tYWMucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9tYWMucHkKQEAgLTU5LDYgKzU5LDExIEBAIGNs
YXNzIE1hY1BvcnQoYmFzZS5Qb3J0KToKICAgICAgICAgYmFzZS5Qb3J0Ll9faW5pdF9fKHNlbGYs
IHBvcnRfbmFtZSwgb3B0aW9ucykKICAgICAgICAgc2VsZi5fY2FjaGVkX2J1aWxkX3Jvb3QgPSBO
b25lCiAKKyAgICAgICAgIyBGSVhNRTogZGlzYWJsZSBwaXhlbCB0ZXN0cyB1bnRpbCB0aGV5IGFy
ZSBydW4gYnkgZGVmYXVsdCBvbiB0aGUKKyAgICAgICAgIyBidWlsZCBtYWNoaW5lcy4KKyAgICAg
ICAgaWYgb3B0aW9ucyBhbmQgb3B0aW9ucy5waXhlbF90ZXN0cyBpcyBOb25lOgorICAgICAgICAg
ICAgb3B0aW9ucy5waXhlbF90ZXN0cyA9IEZhbHNlCisKICAgICBkZWYgYmFzZWxpbmVfcGF0aChz
ZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuX3dlYmtpdF9iYXNlbGluZV9wYXRoKHNlbGYuX25h
bWUpCiAKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3J1bl93ZWJraXRfdGVzdHMucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5CmluZGV4IDI2ODBhNmQuLjg0MGQ0YzIgMTAw
NzU1Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93
ZWJraXRfdGVzdHMucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weQpAQCAtNDgwLDcgKzQ4MCw3IEBAIGNsYXNzIFRlc3RS
dW5uZXI6CiAgICAgICAgIHNoZWxsX2FyZ3MgPSBbXQogICAgICAgICB0ZXN0X2FyZ3MgPSB0ZXN0
X3R5cGVfYmFzZS5UZXN0QXJndW1lbnRzKCkKICAgICAgICAgcG5nX3BhdGggPSBOb25lCi0gICAg
ICAgIGlmIG5vdCBzZWxmLl9vcHRpb25zLm5vX3BpeGVsX3Rlc3RzOgorICAgICAgICBpZiBzZWxm
Ll9vcHRpb25zLnBpeGVsX3Rlc3RzOgogICAgICAgICAgICAgcG5nX3BhdGggPSBvcy5wYXRoLmpv
aW4oc2VsZi5fb3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJwbmdfcmVzdWx0JXMucG5nIiAlIGluZGV4KQogICAgICAgICAgICAg
c2hlbGxfYXJncy5hcHBlbmQoIi0tcGl4ZWwtdGVzdHM9IiArIHBuZ19wYXRoKQpAQCAtNjk4LDgg
KzY5OCw4IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAg
ICAgICAgKHRlc3QsIGZhaWxfbGlzdCkgPSBzZWxmLl9yZXN1bHRfcXVldWUuZ2V0X25vd2FpdCgp
CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdGVzdF9mYWlsdXJlcy5kZXRlcm1pbmVfcmVzdWx0
X3R5cGUoZmFpbF9saXN0KQotICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gc2VsZi5fZXhwZWN0
YXRpb25zLm1hdGNoZXNfYW5fZXhwZWN0ZWRfcmVzdWx0KHRlc3QsIAotICAgICAgICAgICAgICAg
ICAgICByZXN1bHQsIHNlbGYuX29wdGlvbnMubm9fcGl4ZWxfdGVzdHMpCisgICAgICAgICAgICAg
ICAgZXhwZWN0ZWQgPSBzZWxmLl9leHBlY3RhdGlvbnMubWF0Y2hlc19hbl9leHBlY3RlZF9yZXN1
bHQodGVzdCwKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LCBzZWxmLl9vcHRpb25zLnBpeGVs
X3Rlc3RzKQogICAgICAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5LmFkZCh0ZXN0LCBmYWlsX2xp
c3QsIHJlc3VsdCwgZXhwZWN0ZWQpCiAgICAgICAgICAgICAgICAgaWYgKExPR19ERVRBSUxFRF9Q
Uk9HUkVTUyBpbiBzZWxmLl9vcHRpb25zLmxvZyBhbmQKICAgICAgICAgICAgICAgICAgICAgKHNl
bGYuX29wdGlvbnMuZXhwZXJpbWVudGFsX2Z1bGx5X3BhcmFsbGVsIG9yCkBAIC0xMzk1LDYgKzEz
OTUsOSBAQCBkZWYgbWFpbihvcHRpb25zLCBhcmdzKToKIAogICAgIHBvcnRfb2JqID0gcG9ydC5n
ZXQob3B0aW9ucy5wbGF0Zm9ybSwgb3B0aW9ucykKIAorICAgIGlmIG9wdGlvbnMucGl4ZWxfdGVz
dHMgaXMgTm9uZToKKyAgICAgICAgb3B0aW9ucy5waXhlbF90ZXN0cyA9IFRydWUKKwogICAgIGlm
IG5vdCBvcHRpb25zLnVzZV9hcGFjaGU6CiAgICAgICAgIG9wdGlvbnMudXNlX2FwYWNoZSA9IHN5
cy5wbGF0Zm9ybSBpbiAoJ2RhcndpbicsICdsaW51eDInKQogCkBAIC0xNDczLDggKzE0NzYsMTAg
QEAgZGVmIG1haW4ob3B0aW9ucywgYXJncyk6CiAgICAgaWYgb3B0aW9ucy5uZXdfYmFzZWxpbmU6
CiAgICAgICAgIHdyaXRlKCJQbGFjaW5nIG5ldyBiYXNlbGluZXMgaW4gJXMiICUgcG9ydF9vYmou
YmFzZWxpbmVfcGF0aCgpKQogICAgIHdyaXRlKCJVc2luZyAlcyBidWlsZCIgJSBvcHRpb25zLnRh
cmdldCkKLSAgICBpZiBvcHRpb25zLm5vX3BpeGVsX3Rlc3RzOgotICAgICAgICB3cml0ZSgiTm90
IHJ1bm5pbmcgcGl4ZWwgdGVzdHMiKQorICAgIGlmIG9wdGlvbnMucGl4ZWxfdGVzdHM6CisgICAg
ICAgIHdyaXRlKCJQaXhlbCB0ZXN0cyBlbmFibGVkIikKKyAgICBlbHNlOgorICAgICAgICB3cml0
ZSgiUGl4ZWwgdGVzdHMgZGlzYWJsZWQiKQogICAgIHdyaXRlKCIiKQogCiAgICAgbWV0ZXIudXBk
YXRlKCJQYXJzaW5nIGV4cGVjdGF0aW9ucyAuLi4iKQpAQCAtMTUwMSw3ICsxNTA2LDcgQEAgZGVm
IG1haW4ob3B0aW9ucywgYXJncyk6CiAgICAgcG9ydF9vYmouc2V0dXBfdGVzdF9ydW4oKQogCiAg
ICAgdGVzdF9ydW5uZXIuYWRkX3Rlc3RfdHlwZSh0ZXh0X2RpZmYuVGVzdFRleHREaWZmKQotICAg
IGlmIG5vdCBvcHRpb25zLm5vX3BpeGVsX3Rlc3RzOgorICAgIGlmIG9wdGlvbnMucGl4ZWxfdGVz
dHM6CiAgICAgICAgIHRlc3RfcnVubmVyLmFkZF90ZXN0X3R5cGUoaW1hZ2VfZGlmZi5JbWFnZURp
ZmYpCiAgICAgICAgIGlmIG9wdGlvbnMuZnV6enlfcGl4ZWxfdGVzdHM6CiAgICAgICAgICAgICB0
ZXN0X3J1bm5lci5hZGRfdGVzdF90eXBlKGZ1enp5X2ltYWdlX2RpZmYuRnV6enlJbWFnZURpZmYp
CkBAIC0xNTE5LDggKzE1MjQsMTEgQEAgZGVmIHBhcnNlX2FyZ3MoYXJncz1Ob25lKToKIAogICAg
IFJldHVybnMgYSB0dXBsZSBvZiBvcHRpb25zLCBhcmdzIGZyb20gb3B0cGFyc2UiIiIKICAgICBv
cHRpb25fcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKCkKLSAgICBvcHRpb25fcGFyc2Vy
LmFkZF9vcHRpb24oIiIsICItLW5vLXBpeGVsLXRlc3RzIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSwKKyAgICBvcHRpb25f
cGFyc2VyLmFkZF9vcHRpb24oIiIsICItLXBpeGVsLXRlc3RzJyIsIGFjdGlvbj0ic3RvcmVfdHJ1
ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9InBpeGVsX3Rlc3RzIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iZW5hYmxlIHBpeGVsLXRvLXBpeGVsIFBO
RyBjb21wYXJpc29ucyIpCisgICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCIiLCAiLS1uby1w
aXhlbC10ZXN0cyIsIGFjdGlvbj0ic3RvcmVfZmFsc2UiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkZXN0PSJwaXhlbF90ZXN0cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGhlbHA9ImRpc2FibGUgcGl4ZWwtdG8tcGl4ZWwgUE5HIGNvbXBhcmlzb25zIikKICAgICBvcHRp
b25fcGFyc2VyLmFkZF9vcHRpb24oIiIsICItLWZ1enp5LXBpeGVsLXRlc3RzIiwgYWN0aW9uPSJz
dG9yZV90cnVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSwK
ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9x
dWVyaWVzLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3F1
ZXJpZXMucHkKaW5kZXggNzE5MDI4ZC4uYWJlZjQ2ZCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3F1ZXJpZXMucHkKKysrIGIvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3F1ZXJpZXMucHkKQEAgLTMwLDEwICsz
MCwxMCBAQAogCiBmcm9tIG9wdHBhcnNlIGltcG9ydCBtYWtlX29wdGlvbgogCi1mcm9tIHdlYmtp
dHB5LmNvbW1vbi5jaGVja291dC5jaGFuZ2Vsb2cgaW1wb3J0IHZpZXdfc291cmNlX3VybAogZnJv
bSB3ZWJraXRweS5jb21tb24uY2hlY2tvdXQuY29tbWl0aW5mbyBpbXBvcnQgQ29tbWl0SW5mbwog
ZnJvbSB3ZWJraXRweS5jb21tb24uY29uZmlnLmNvbW1pdHRlcnMgaW1wb3J0IENvbW1pdHRlckxp
c3QKIGZyb20gd2Via2l0cHkuY29tbW9uLm5ldC5idWlsZGJvdCBpbXBvcnQgQnVpbGRCb3QKK2Zy
b20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS51c2VyIGltcG9ydCBVc2VyCiBmcm9tIHdlYmtpdHB5
LnRvb2wuZ3JhbW1hciBpbXBvcnQgcGx1cmFsaXplCiBmcm9tIHdlYmtpdHB5LnRvb2wubXVsdGlj
b21tYW5kdG9vbCBpbXBvcnQgQWJzdHJhY3REZWNsYXJhdGl2ZUNvbW1hbmQKIGZyb20gd2Via2l0
cHkuY29tbW9uLnN5c3RlbS5kZXByZWNhdGVkX2xvZ2dpbmcgaW1wb3J0IGxvZwpAQCAtMTIxLDE2
ICsxMjEsNyBAQCBjbGFzcyBXaGF0QnJva2UoQWJzdHJhY3REZWNsYXJhdGl2ZUNvbW1hbmQpOgog
ICAgIGRlZiBfcHJpbnRfYnVpbGRlcl9saW5lKHNlbGYsIGJ1aWxkZXJfbmFtZSwgbWF4X25hbWVf
d2lkdGgsIHN0YXR1c19tZXNzYWdlKToKICAgICAgICAgcHJpbnQgIiVzIDogJXMiICUgKGJ1aWxk
ZXJfbmFtZS5sanVzdChtYXhfbmFtZV93aWR0aCksIHN0YXR1c19tZXNzYWdlKQogCi0gICAgZGVm
IF9wcmludF9ibGFtZV9pbmZvcm1hdGlvbl9mb3JfY29tbWl0KHNlbGYsIGNvbW1pdF9pbmZvKToK
LSAgICAgICAgcHJpbnQgInIlczoiICUgY29tbWl0X2luZm8ucmV2aXNpb24oKQotICAgICAgICBw
cmludCAiICAlcyIgJSB2aWV3X3NvdXJjZV91cmwoY29tbWl0X2luZm8ucmV2aXNpb24oKSkKLSAg
ICAgICAgcHJpbnQgIiAgQnVnOiAlcyAoJXMpIiAlIChjb21taXRfaW5mby5idWdfaWQoKSwgc2Vs
Zi50b29sLmJ1Z3MuYnVnX3VybF9mb3JfYnVnX2lkKGNvbW1pdF9pbmZvLmJ1Z19pZCgpKSkKLSAg
ICAgICAgYXV0aG9yX2xpbmUgPSAiXCIlc1wiIDwlcz4iICUgKGNvbW1pdF9pbmZvLmF1dGhvcl9u
YW1lKCksIGNvbW1pdF9pbmZvLmF1dGhvcl9lbWFpbCgpKQotICAgICAgICBwcmludCAiICBBdXRo
b3I6ICVzIiAlIChjb21taXRfaW5mby5hdXRob3IoKSBvciBhdXRob3JfbGluZSkKLSAgICAgICAg
cHJpbnQgIiAgUmV2aWV3ZXI6ICVzIiAlIChjb21taXRfaW5mby5yZXZpZXdlcigpIG9yIGNvbW1p
dF9pbmZvLnJldmlld2VyX3RleHQoKSkKLSAgICAgICAgcHJpbnQgIiAgQ29tbWl0dGVyOiAlcyIg
JSAoY29tbWl0X2luZm8uY29tbWl0dGVyKCkgb3IgY29tbWl0X2luZm8uY29tbWl0dGVyX2VtYWls
KCkpCi0KLSAgICAjIEZJWE1FOiBUaGlzIGlzIHNsaWdodGx5IGRpZmZlcmVudCBmcm9tIEJ1aWxk
ZXIuYmxhbWV3b3J0aHlfcmV2aXNpb25zCisgICAgIyBGSVhNRTogVGhpcyBpcyBzbGlnaHRseSBk
aWZmZXJlbnQgZnJvbSBCdWlsZGVyLnN1c3BlY3RfcmV2aXNpb25zX2Zvcl9ncmVlbl90b19yZWRf
dHJhbnNpdGlvbgogICAgICMgZHVlIHRvIG5lZWRpbmcgdG8gZGV0ZWN0IHRoZSAiaGl0IHRoZSBs
aW1pdCIgY2FzZSBhbiBwcmludCBhIHNwZWNpYWwgbWVzc2FnZS4KICAgICBkZWYgX3ByaW50X2Js
YW1lX2luZm9ybWF0aW9uX2Zvcl9idWlsZGVyKHNlbGYsIGJ1aWxkZXJfc3RhdHVzLCBuYW1lX3dp
ZHRoLCBhdm9pZF9mbGFrZXlfdGVzdHM9VHJ1ZSk6CiAgICAgICAgIGJ1aWxkZXIgPSBzZWxmLnRv
b2wuYnVpbGRib3QuYnVpbGRlcl93aXRoX25hbWUoYnVpbGRlcl9zdGF0dXNbIm5hbWUiXSkKQEAg
LTE1MSw3ICsxNDIsNyBAQCBjbGFzcyBXaGF0QnJva2UoQWJzdHJhY3REZWNsYXJhdGl2ZUNvbW1h
bmQpOgogICAgICAgICBzZWxmLl9wcmludF9idWlsZGVyX2xpbmUoYnVpbGRlci5uYW1lKCksIG5h
bWVfd2lkdGgsICJGQUlMIChibGFtZS1saXN0OiAlcyVzKSIgJSAoc3VzcGVjdF9yZXZpc2lvbnMs
IGZpcnN0X2ZhaWx1cmVfbWVzc2FnZSkpCiAgICAgICAgIGZvciByZXZpc2lvbiBpbiBzdXNwZWN0
X3JldmlzaW9uczoKICAgICAgICAgICAgIGNvbW1pdF9pbmZvID0gc2VsZi50b29sLmNoZWNrb3V0
KCkuY29tbWl0X2luZm9fZm9yX3JldmlzaW9uKHJldmlzaW9uKQotICAgICAgICAgICAgc2VsZi5f
cHJpbnRfYmxhbWVfaW5mb3JtYXRpb25fZm9yX2NvbW1pdChjb21taXRfaW5mbykKKyAgICAgICAg
ICAgIHByaW50IGNvbW1pdF9pbmZvLmJsYW1lX3N0cmluZyhzZWxmLnRvb2wuYnVncykKIAogICAg
IGRlZiBleGVjdXRlKHNlbGYsIG9wdGlvbnMsIGFyZ3MsIHRvb2wpOgogICAgICAgICBidWlsZGVy
X3N0YXR1c2VzID0gdG9vbC5idWlsZGJvdC5idWlsZGVyX3N0YXR1c2VzKCkKQEAgLTIwMCw2ICsx
OTEsNzEgQEAgY2xhc3MgUmVzdWx0c0ZvcihBYnN0cmFjdERlY2xhcmF0aXZlQ29tbWFuZCk6CiAg
ICAgICAgICAgICBzZWxmLl9wcmludF9sYXlvdXRfdGVzdF9yZXN1bHRzKGJ1aWxkLmxheW91dF90
ZXN0X3Jlc3VsdHMoKSkKIAogCitjbGFzcyBGYWlsdXJlUmVhc29uKEFic3RyYWN0RGVjbGFyYXRp
dmVDb21tYW5kKToKKyAgICBuYW1lID0gImZhaWx1cmUtcmVhc29uIgorICAgIGhlbHBfdGV4dCA9
ICJMaXN0cyByZXZpc2lvbnMgd2hlcmUgaW5kaXZpZHVhbCB0ZXN0IGZhaWx1cmVzIHN0YXJ0ZWQg
YXQgJXMiICUgQnVpbGRCb3QuZGVmYXVsdF9ob3N0CisKKyAgICBkZWYgX3ByaW50X2JsYW1lX2lu
Zm9ybWF0aW9uX2Zvcl90cmFuc2l0aW9uKHNlbGYsIGdyZWVuX2J1aWxkLCByZWRfYnVpbGQsIGZh
aWxpbmdfdGVzdHMpOgorICAgICAgICBzdXNwZWN0X3JldmlzaW9ucyA9IGdyZWVuX2J1aWxkLmJ1
aWxkZXIoKS5zdXNwZWN0X3JldmlzaW9uc19mb3JfdHJhbnNpdGlvbihncmVlbl9idWlsZCwgcmVk
X2J1aWxkKQorICAgICAgICBwcmludCAiU1VDQ0VTUzogQnVpbGQgJXMgKHIlcykgd2FzIHRoZSBm
aXJzdCB0byBzaG93IGZhaWx1cmVzOiAlcyIgJSAocmVkX2J1aWxkLl9udW1iZXIsIHJlZF9idWls
ZC5yZXZpc2lvbigpLCBmYWlsaW5nX3Rlc3RzKQorICAgICAgICBwcmludCAiU3VzcGVjdCByZXZp
c2lvbnM6IgorICAgICAgICBmb3IgcmV2aXNpb24gaW4gc3VzcGVjdF9yZXZpc2lvbnM6CisgICAg
ICAgICAgICBjb21taXRfaW5mbyA9IHNlbGYudG9vbC5jaGVja291dCgpLmNvbW1pdF9pbmZvX2Zv
cl9yZXZpc2lvbihyZXZpc2lvbikKKyAgICAgICAgICAgIHByaW50IGNvbW1pdF9pbmZvLmJsYW1l
X3N0cmluZyhzZWxmLnRvb2wuYnVncykKKworICAgIGRlZiBfZXhwbGFpbl9mYWlsdXJlc19mb3Jf
YnVpbGRlcihzZWxmLCBidWlsZGVyLCBzdGFydF9yZXZpc2lvbiwgc2VhcmNoX2xpbWl0PTEwMDAp
OgorICAgICAgICBwcmludCAiRXhhbWluaW5nIGZhaWx1cmVzIGZvciBcIiVzXCIsIHN0YXJ0aW5n
IGF0IHIlcyIgJSAoYnVpbGRlci5uYW1lKCksIHN0YXJ0X3JldmlzaW9uKQorICAgICAgICByZXZp
c2lvbl90b190ZXN0ID0gc3RhcnRfcmV2aXNpb24KKyAgICAgICAgYnVpbGQgPSBidWlsZGVyLmJ1
aWxkX2Zvcl9yZXZpc2lvbihyZXZpc2lvbl90b190ZXN0LCBhbGxvd19mYWlsZWRfbG9va3Vwcz1U
cnVlKQorICAgICAgICByZXN1bHRzX3RvX2V4cGxhaW4gPSBzZXQoYnVpbGQubGF5b3V0X3Rlc3Rf
cmVzdWx0cygpLmZhaWxpbmdfdGVzdHMoKSkKKyAgICAgICAgbGFzdF9idWlsZF93aXRoX3Jlc3Vs
dHMgPSBidWlsZAorICAgICAgICBwcmludCAiU3RhcnRpbmcgYXQgJXMiICUgcmV2aXNpb25fdG9f
dGVzdAorICAgICAgICB3aGlsZSByZXN1bHRzX3RvX2V4cGxhaW4gYW5kIHJldmlzaW9uX3RvX3Rl
c3QgPiBzdGFydF9yZXZpc2lvbiAtIHNlYXJjaF9saW1pdDoKKyAgICAgICAgICAgIHJldmlzaW9u
X3RvX3Rlc3QgLT0gMQorICAgICAgICAgICAgbmV3X2J1aWxkID0gYnVpbGRlci5idWlsZF9mb3Jf
cmV2aXNpb24ocmV2aXNpb25fdG9fdGVzdCwgYWxsb3dfZmFpbGVkX2xvb2t1cHM9VHJ1ZSkKKyAg
ICAgICAgICAgIGlmIG5vdCBuZXdfYnVpbGQ6CisgICAgICAgICAgICAgICAgcHJpbnQgIk5vIGJ1
aWxkIGZvciAlcyIgJSByZXZpc2lvbl90b190ZXN0CisgICAgICAgICAgICAgICAgY29udGludWUK
KyAgICAgICAgICAgIGJ1aWxkID0gbmV3X2J1aWxkCisgICAgICAgICAgICBsYXRlc3RfcmVzdWx0
cyA9IGJ1aWxkLmxheW91dF90ZXN0X3Jlc3VsdHMoKQorICAgICAgICAgICAgaWYgbm90IGxhdGVz
dF9yZXN1bHRzOgorICAgICAgICAgICAgICAgIHByaW50ICJObyByZXN1bHRzIGJ1aWxkICVzIChy
JXMpIiAlIChidWlsZC5fbnVtYmVyLCBidWlsZC5yZXZpc2lvbigpKQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlCisgICAgICAgICAgICBmYWlsdXJlcyA9IHNldChsYXRlc3RfcmVzdWx0cy5mYWls
aW5nX3Rlc3RzKCkpCisgICAgICAgICAgICBpZiBsZW4oZmFpbHVyZXMpID49IDIwOgorICAgICAg
ICAgICAgICAgICMgRklYTUU6IFdlIG1heSBuZWVkIHRvIG1vdmUgdGhpcyBsb2dpYyBpbnRvIHRo
ZSBMYXlvdXRUZXN0UmVzdWx0cyBjbGFzcy4KKyAgICAgICAgICAgICAgICAjIFRoZSBidWlsZGJv
dCBzdG9wcyBydW5zIGFmdGVyIDIwIGZhaWx1cmVzIHNvIHdlIGRvbid0IGhhdmUgZnVsbCByZXN1
bHRzIHRvIHdvcmsgd2l0aCBoZXJlLgorICAgICAgICAgICAgICAgIHByaW50ICJUb28gbWFueSBm
YWlsdXJlcyBpbiBidWlsZCAlcyAociVzKSwgaWdub3JpbmcuIiAlIChidWlsZC5fbnVtYmVyLCBi
dWlsZC5yZXZpc2lvbigpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBm
aXhlZF9yZXN1bHRzID0gcmVzdWx0c190b19leHBsYWluIC0gZmFpbHVyZXMKKyAgICAgICAgICAg
IGlmIG5vdCBmaXhlZF9yZXN1bHRzOgorICAgICAgICAgICAgICAgIHByaW50ICJObyBjaGFuZ2Ug
aW4gYnVpbGQgJXMgKHIlcyksICVzIHVuZXhwbGFpbmVkIGZhaWx1cmVzICglcyBpbiB0aGlzIGJ1
aWxkKSIgJSAoYnVpbGQuX251bWJlciwgYnVpbGQucmV2aXNpb24oKSwgbGVuKHJlc3VsdHNfdG9f
ZXhwbGFpbiksIGxlbihmYWlsdXJlcykpCisgICAgICAgICAgICAgICAgbGFzdF9idWlsZF93aXRo
X3Jlc3VsdHMgPSBidWlsZAorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBz
ZWxmLl9wcmludF9ibGFtZV9pbmZvcm1hdGlvbl9mb3JfdHJhbnNpdGlvbihidWlsZCwgbGFzdF9i
dWlsZF93aXRoX3Jlc3VsdHMsIGZpeGVkX3Jlc3VsdHMpCisgICAgICAgICAgICBsYXN0X2J1aWxk
X3dpdGhfcmVzdWx0cyA9IGJ1aWxkCisgICAgICAgICAgICByZXN1bHRzX3RvX2V4cGxhaW4gLT0g
Zml4ZWRfcmVzdWx0cworICAgICAgICBpZiByZXN1bHRzX3RvX2V4cGxhaW46CisgICAgICAgICAg
ICBwcmludCAiRmFpbGVkIHRvIGV4cGxhaW4gZmFpbHVyZXM6ICVzIiAlIHJlc3VsdHNfdG9fZXhw
bGFpbgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQgIkV4cGxhaW5lZCBhbGwgcmVz
dWx0cyBmb3IgJXMiICUgYnVpbGRlci5uYW1lKCkKKworICAgIGRlZiBfYnVpbGRlcl90b19leHBs
YWluKHNlbGYpOgorICAgICAgICBidWlsZGVyX3N0YXR1c2VzID0gc2VsZi50b29sLmJ1aWxkYm90
LmJ1aWxkZXJfc3RhdHVzZXMoKQorICAgICAgICByZWRfc3RhdHVzZXMgPSBbc3RhdHVzIGZvciBz
dGF0dXMgaW4gYnVpbGRlcl9zdGF0dXNlcyBpZiBub3Qgc3RhdHVzWyJpc19ncmVlbiJdXQorICAg
ICAgICBwcmludCAiJXMgZmFpbGluZyIgJSAocGx1cmFsaXplKCJidWlsZGVyIiwgbGVuKHJlZF9z
dGF0dXNlcykpKQorICAgICAgICBidWlsZGVyX2Nob2ljZXMgPSBbc3RhdHVzWyJuYW1lIl0gZm9y
IHN0YXR1cyBpbiByZWRfc3RhdHVzZXNdCisgICAgICAgICMgV2UgY291bGQgb2ZmZXIgYW4gIkFs
bCIgY2hvaWNlIGhlcmUuCisgICAgICAgIGNob3Nlbl9uYW1lID0gVXNlci5wcm9tcHRfd2l0aF9s
aXN0KCJXaGljaCBidWlsZGVyIHRvIGRpYWdub3NlOiIsIGJ1aWxkZXJfY2hvaWNlcykKKyAgICAg
ICAgIyBGSVhNRTogcHJvbXB0X3dpdGhfbGlzdCBzaG91bGQgcmVhbGx5IHRha2UgYSBzZXQgb2Yg
b2JqZWN0cyBhbmQgYSBzZXQgb2YgbmFtZXMgYW5kIHRoZW4gcmV0dXJuIHRoZSBvYmplY3QuCisg
ICAgICAgIGZvciBzdGF0dXMgaW4gcmVkX3N0YXR1c2VzOgorICAgICAgICAgICAgaWYgc3RhdHVz
WyJuYW1lIl0gPT0gY2hvc2VuX25hbWU6CisgICAgICAgICAgICAgICAgcmV0dXJuIChzZWxmLnRv
b2wuYnVpbGRib3QuYnVpbGRlcl93aXRoX25hbWUoY2hvc2VuX25hbWUpLCBzdGF0dXNbImJ1aWx0
X3JldmlzaW9uIl0pCisKKyAgICBkZWYgZXhlY3V0ZShzZWxmLCBvcHRpb25zLCBhcmdzLCB0b29s
KToKKyAgICAgICAgKGJ1aWxkZXIsIHN0YXJ0X3JldmlzaW9uKSA9IHNlbGYuX2J1aWxkZXJfdG9f
ZXhwbGFpbigpCisgICAgICAgIHNlbGYuX2V4cGxhaW5fZmFpbHVyZXNfZm9yX2J1aWxkZXIoYnVp
bGRlciwgc3RhcnRfcmV2aXNpb249c3RhcnRfcmV2aXNpb24pCisKIGNsYXNzIFRyZWVTdGF0dXMo
QWJzdHJhY3REZWNsYXJhdGl2ZUNvbW1hbmQpOgogICAgIG5hbWUgPSAidHJlZS1zdGF0dXMiCiAg
ICAgaGVscF90ZXh0ID0gIlByaW50IHRoZSBzdGF0dXMgb2YgdGhlICVzIGJ1aWxkYm90cyIgJSBC
dWlsZEJvdC5kZWZhdWx0X2hvc3QK
</data>
<flag name="review"
          id="36377"
          type_id="1"
          status="-"
          setter="vitalyr"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>52792</attachid>
            <date>2010-04-07 15:39:41 -0700</date>
            <delta_ts>2010-04-07 21:04:23 -0700</delta_ts>
            <desc>patch v2</desc>
            <filename>node_filter_fix.patch</filename>
            <type>text/plain</type>
            <size>6055</size>
            <attacher name="Vitaly Repeshko">vitalyr</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBjOTA0ZGNlLi5kMzkxYWZiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTAtMDQt
MDcgIFZpdGFseSBSZXBlc2hrbyAgPHZpdGFseXJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtWOF0gRml4IGNyYXNoIGluIE5v
ZGVGaWx0ZXJDb25kaXRpb24gaW4gZGV0YWNoZWQgaWZyYW1lCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNzIzNAorCisgICAgICAgICogZmFzdC9kb20v
bm9kZS1maWx0ZXItZGV0YWNoZWQtaWZyYW1lLWNyYXNoLWV4cGVjdGVkLnR4dDogQWRkZWQuCisg
ICAgICAgICogZmFzdC9kb20vbm9kZS1maWx0ZXItZGV0YWNoZWQtaWZyYW1lLWNyYXNoLmh0bWw6
IEFkZGVkLgorCiAyMDEwLTA0LTA2ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAog
ICAgICAgICBSRUdSRVNTSU9OIChyNTcxMDkpOiBlZGl0aW5nL3Bhc3RlYm9hcmQvZHJhZy1pbWFn
ZS10by1jb250ZW50ZWRpdGFibGUtaW4taWZyYW1lLmh0bWwgZmFpbHMgb24gV2luZG93cwpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vbm9kZS1maWx0ZXItZGV0YWNoZWQtaWZyYW1l
LWNyYXNoLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL25vZGUtZmlsdGVyLWRl
dGFjaGVkLWlmcmFtZS1jcmFzaC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uYWQwMmI0MQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qv
ZG9tL25vZGUtZmlsdGVyLWRldGFjaGVkLWlmcmFtZS1jcmFzaC1leHBlY3RlZC50eHQKQEAgLTAs
MCArMSw2IEBACitFbnN1cmUgdGhhdCB1c2luZyBub2RlIGZpbHRlciB3aXRoIGEgZGV0YWNoZWQg
aWZyYW1lIGRvZXNuJ3QgY3Jhc2guCisKK1BBU1MgRGlkIG5vdCBjcmFzaC4KK1BBU1MgZHVtbXlG
aWx0ZXJDYWxsZWQgaXMgdHJ1ZQorUEFTUyBmb3VuZE5vZGUudG9TdHJpbmcoKSBpcyAiW29iamVj
dCBIVE1MSHRtbEVsZW1lbnRdIgorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9u
b2RlLWZpbHRlci1kZXRhY2hlZC1pZnJhbWUtY3Jhc2guaHRtbCBiL0xheW91dFRlc3RzL2Zhc3Qv
ZG9tL25vZGUtZmlsdGVyLWRldGFjaGVkLWlmcmFtZS1jcmFzaC5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1NzNlNWUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9mYXN0L2RvbS9ub2RlLWZpbHRlci1kZXRhY2hlZC1pZnJhbWUtY3Jhc2guaHRtbApAQCAt
MCwwICsxLDM5IEBACis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVm
PSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uL2pz
L3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorICAgIGlmICh3
aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNU
ZXh0KCk7CisgICAgfQorCisgICAgdmFyIGR1bW15RmlsdGVyQ2FsbGVkID0gZmFsc2U7CisgICAg
dmFyIGZvdW5kTm9kZTsKKworICAgIGZ1bmN0aW9uIGR1bW15RmlsdGVyKCkgeworICAgICAgICBk
dW1teUZpbHRlckNhbGxlZCA9IHRydWU7CisgICAgICAgIHJldHVybiBOb2RlRmlsdGVyLkZJTFRF
Ul9BQ0NFUFQ7CisgICAgfQorCisgICAgZnVuY3Rpb24gdGVzdCgpIHsKKyAgICAgICAgdmFyIGlm
cmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpOworICAgICAgICBkb2N1bWVu
dC5ib2R5LmFwcGVuZENoaWxkKGlmcmFtZSk7CisgICAgICAgIHZhciBkb2MgPSBpZnJhbWUuY29u
dGVudFdpbmRvdy5kb2N1bWVudDsKKyAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChp
ZnJhbWUpOworICAgICAgICB2YXIgaXRlcmF0b3IgPSBkb2MuY3JlYXRlTm9kZUl0ZXJhdG9yKGRv
YywgTm9kZUZpbHRlci5TSE9XX0VMRU1FTlQsIGR1bW15RmlsdGVyLCBmYWxzZSk7CisgICAgICAg
IGZvdW5kTm9kZSA9IGl0ZXJhdG9yLm5leHROb2RlKCk7CisgICAgICAgIHRlc3RQYXNzZWQoIkRp
ZCBub3QgY3Jhc2guIik7CisgICAgICAgIHNob3VsZEJlVHJ1ZSgiZHVtbXlGaWx0ZXJDYWxsZWQi
KTsKKyAgICAgICAgc2hvdWxkQmUoImZvdW5kTm9kZS50b1N0cmluZygpIiwgIlwiW29iamVjdCBI
VE1MSHRtbEVsZW1lbnRdXCIiKTsKKworICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250
cm9sbGVyKQorICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOwor
ICAgIH0KKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJ0ZXN0KCkiPgorPHA+RW5z
dXJlIHRoYXQgdXNpbmcgbm9kZSBmaWx0ZXIgd2l0aCBhIGRldGFjaGVkIGlmcmFtZSBkb2Vzbid0
IGNyYXNoLjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBh
YjAzNGQwLi5iOGNiZjJiIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDEwLTA0LTA3ICBWaXRhbHkgUmVwZXNo
a28gIDx2aXRhbHlyQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBbVjhdIEZpeCBjcmFzaCBpbiBOb2RlRmlsdGVyQ29uZGl0aW9u
IGluIGRldGFjaGVkIGlmcmFtZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MzcyMzQKKworICAgICAgICBUZXN0OiBmYXN0L2RvbS9ub2RlLWZpbHRlci1k
ZXRhY2hlZC1pZnJhbWUtY3Jhc2guaHRtbAorCisgICAgICAgICogYmluZGluZ3MvdjgvVjhOb2Rl
RmlsdGVyQ29uZGl0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4Tm9kZUZpbHRlckNvbmRp
dGlvbjo6YWNjZXB0Tm9kZSk6IFN3aXRjaGVkIHRvIHVzaW5nCisgICAgICAgIGNhbGxGdW5jdGlv
bldpdGhvdXRGcmFtZS4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOFByb3h5LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlY4UHJveHk6OmNhbGxGdW5jdGlvbldpdGhvdXRGcmFtZSk6IEFkZGVkIGEg
ZnVuY3Rpb24gdG8KKyAgICAgICAgY2FsbCBWOCB3aXRoIG5vIGN1cnJlbnQgZnJhbWUuCisgICAg
ICAgICogYmluZGluZ3MvdjgvVjhQcm94eS5oOgorCiAyMDEwLTA0LTA2ICBBbmR5IEVzdGVzICA8
YWVzdGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBSdWJiZXItc3RhbXBlZCBieSBEYW4gQmVybnN0
ZWluLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOE5vZGVGaWx0ZXJDb25kaXRp
b24uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOE5vZGVGaWx0ZXJDb25kaXRpb24uY3BwCmlu
ZGV4IGE4ODY4YjUuLjIxNzA2OTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhO
b2RlRmlsdGVyQ29uZGl0aW9uLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4Tm9kZUZp
bHRlckNvbmRpdGlvbi5jcHAKQEAgLTcyLDEwICs3Miw3IEBAIHNob3J0IFY4Tm9kZUZpbHRlckNv
bmRpdGlvbjo6YWNjZXB0Tm9kZShTY3JpcHRTdGF0ZSogc3RhdGUsIE5vZGUqIG5vZGUpIGNvbnN0
CiAgICAgT3duQXJyYXlQdHI8djg6OkhhbmRsZTx2ODo6VmFsdWU+ID4gYXJncyhuZXcgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+WzFdKTsKICAgICBhcmdzWzBdID0gdG9WOChub2RlKTsKIAotICAgIFY4
UHJveHkqIHByb3h5ID0gVjhQcm94eTo6cmV0cmlldmUoKTsKLSAgICBBU1NFUlQocHJveHkpOwot
Ci0gICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHJlc3VsdCA9IHByb3h5LT5jYWxsRnVuY3Rpb24o
Y2FsbGJhY2ssIG9iamVjdCwgMSwgYXJncy5nZXQoKSk7CisgICAgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IHJlc3VsdCA9IFY4UHJveHk6OmNhbGxGdW5jdGlvbldpdGhvdXRGcmFtZShjYWxsYmFjaywg
b2JqZWN0LCAxLCBhcmdzLmdldCgpKTsKIAogICAgIGlmIChleGNlcHRpb25DYXRjaGVyLkhhc0Nh
dWdodCgpKSB7CiAgICAgICAgIHN0YXRlLT5zZXRFeGNlcHRpb24oZXhjZXB0aW9uQ2F0Y2hlci5F
eGNlcHRpb24oKSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuY3Bw
IGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmNwcAppbmRleCA0MTY5ZjEyLi4xMGJjZmJj
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwCisrKyBiL1dlYkNv
cmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAKQEAgLTUxMiw2ICs1MTIsMTcgQEAgdjg6OkxvY2Fs
PHY4OjpWYWx1ZT4gVjhQcm94eTo6Y2FsbEZ1bmN0aW9uKHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9u
PiBmdW5jdGlvbiwgdjgKICAgICByZXR1cm4gcmVzdWx0OwogfQogCit2ODo6TG9jYWw8djg6OlZh
bHVlPiBWOFByb3h5OjpjYWxsRnVuY3Rpb25XaXRob3V0RnJhbWUodjg6OkhhbmRsZTx2ODo6RnVu
Y3Rpb24+IGZ1bmN0aW9uLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHJlY2VpdmVyLCBpbnQgYXJn
Yywgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGFyZ3NbXSkKK3sKKyAgICBWOEdDQ29udHJvbGxlcjo6
Y2hlY2tNZW1vcnlVc2FnZSgpOworICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHJlc3VsdCA9IGZ1
bmN0aW9uLT5DYWxsKHJlY2VpdmVyLCBhcmdjLCBhcmdzKTsKKworICAgIGlmICh2ODo6Vjg6Oklz
RGVhZCgpKQorICAgICAgICBoYW5kbGVGYXRhbEVycm9ySW5WOCgpOworCisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKwogdjg6OkxvY2FsPHY4OjpWYWx1ZT4gVjhQcm94eTo6bmV3SW5zdGFuY2Uodjg6
OkhhbmRsZTx2ODo6RnVuY3Rpb24+IGNvbnN0cnVjdG9yLCBpbnQgYXJnYywgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IGFyZ3NbXSkKIHsKICAgICAvLyBObyBhcnRpZmljaWFsIGxpbWl0YXRpb25zIG9u
IHRoZSBkZXB0aCBvZiByZWN1cnNpb24sIHNlZSBjb21tZW50IGluCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5o
CmluZGV4IGYyNDgzNWYuLjEzNDJiNmYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvdjgv
VjhQcm94eS5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5oCkBAIC0yMjAsNiAr
MjIwLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBDYWxsIHRoZSBmdW5jdGlv
biB3aXRoIHRoZSBnaXZlbiByZWNlaXZlciBhbmQgYXJndW1lbnRzLgogICAgICAgICB2ODo6TG9j
YWw8djg6OlZhbHVlPiBjYWxsRnVuY3Rpb24odjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+LCB2ODo6
SGFuZGxlPHY4OjpPYmplY3Q+LCBpbnQgYXJnYywgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGFyZ3Zb
XSk7CiAKKyAgICAgICAgLy8gQ2FsbCB0aGUgZnVuY3Rpb24gd2l0aCB0aGUgZ2l2ZW4gcmVjZWl2
ZXIgYW5kIGFyZ3VtZW50cy4KKyAgICAgICAgc3RhdGljIHY4OjpMb2NhbDx2ODo6VmFsdWU+IGNh
bGxGdW5jdGlvbldpdGhvdXRGcmFtZSh2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4sIHY4OjpIYW5k
bGU8djg6Ok9iamVjdD4sIGludCBhcmdjLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYXJndltdKTsK
KwogICAgICAgICAvLyBDYWxsIHRoZSBmdW5jdGlvbiBhcyBjb25zdHJ1Y3RvciB3aXRoIHRoZSBn
aXZlbiBhcmd1bWVudHMuCiAgICAgICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IG5ld0luc3RhbmNl
KHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiwgaW50IGFyZ2MsIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBhcmd2W10pOwogCg==
</data>
<flag name="review"
          id="36379"
          type_id="1"
          status="+"
          setter="dglazkov"
    />
          </attachment>
      

    </bug>

</bugzilla>