<?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>129030</bug_id>
          
          <creation_ts>2014-02-18 23:10:34 -0800</creation_ts>
          <short_desc>[WK2] IPC callback classes should not be tightly coupled to C API</short_desc>
          <delta_ts>2014-02-19 19:16:31 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          <cc>andersca</cc>
    
    <cc>berto</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>glenn</cc>
    
    <cc>gustavo</cc>
    
    <cc>jer.noble</cc>
    
    <cc>mrobinson</cc>
    
    <cc>philipj</cc>
    
    <cc>sergio</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>982257</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-02-18 23:10:34 -0800</bug_when>
    <thetext>Currently, CallbackBase subclasses call result functions with C API objects as arguments.

This causes very roundabout code in cases where we provide the results to Objective C or Gtk APIs - we first create C API objects, and then unwrap them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>982260</commentid>
    <comment_count>1</comment_count>
      <attachid>224598</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-02-18 23:18:28 -0800</bug_when>
    <thetext>Created attachment 224598
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>982261</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-02-18 23:20:34 -0800</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>982263</commentid>
    <comment_count>3</comment_count>
      <attachid>224599</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-02-18 23:38:34 -0800</bug_when>
    <thetext>Created attachment 224599
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>982605</commentid>
    <comment_count>4</comment_count>
      <attachid>224599</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2014-02-19 16:42:10 -0800</bug_when>
    <thetext>Comment on attachment 224599
proposed patch

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

&gt; Source/WebKit2/UIProcess/WebPageProxy.h:233
&gt; +    typedef std::function&lt;void(bool, const WebCore::IntPoint&amp;, uint32_t, uint32_t, uint32_t)&gt; CallbackFunction;

Missing space between void and (</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>982644</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-02-19 19:16:31 -0800</bug_when>
    <thetext>Committed &lt;http://trac.webkit.org/r164409&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>224598</attachid>
            <date>2014-02-18 23:18:28 -0800</date>
            <delta_ts>2014-02-18 23:38:34 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>Callback.txt</filename>
            <type>text/plain</type>
            <size>86676</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2NDM1NykKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0NyBAQAorMjAxNC0wMi0xOCAgQWxleGV5
IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KKworICAgICAgICBbV0syXSBJUEMgY2FsbGJh
Y2sgY2xhc3NlcyBzaG91bGQgbm90IGJlIHRpZ2h0bHkgY291cGxlZCB0byBDIEFQSQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI5MDMwCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2hhbmdlZCBDYWxsYmFj
a0Jhc2Ugc3ViY2xhc3NlcyB0byB0YWtlIGFuIHN0ZDo6ZnVuY3Rpb24gKHdpdGggY29udGV4dCBj
YXB0dXJlZCBpbnNpZGUpLgorICAgICAgICBJbnN0ZWFkIG9mIEMgQVBJIG9iamVjdHMsIHRoZXNl
IGNhbGxiYWNrIGZ1bmN0aW9ucyB0YWtlIGltcGxlbWVudGF0aW9uIG9uZXMuCisgICAgICAgIFRo
ZXJlIGFyZSBWb2lkQVBJQ2FsbGJhY2sgYW5kIEdlbmVyaWNBUElDYWxsYmFjayBoZWxwZXJzIGZv
ciB0aGUgY29tbW9uIGNhc2Ugb2YgQyBBUEkuCisKKyAgICAgICAgKiBTaGFyZWQvU2VjdXJpdHlP
cmlnaW5EYXRhLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLQXBwbGljYXRpb25DYWNo
ZU1hbmFnZXIuY3BwOgorICAgICAgICAoV0tBcHBsaWNhdGlvbkNhY2hlTWFuYWdlckdldEFwcGxp
Y2F0aW9uQ2FjaGVPcmlnaW5zKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0
LmNwcDoKKyAgICAgICAgKFdLQ29udGV4dEdldFN0YXRpc3RpY3MpOgorICAgICAgICAoV0tDb250
ZXh0R2V0U3RhdGlzdGljc1dpdGhPcHRpb25zKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0Mv
V0tDb29raWVNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdLQ29va2llTWFuYWdlckdldEhvc3RuYW1l
c1dpdGhDb29raWVzKToKKyAgICAgICAgKFdLQ29va2llTWFuYWdlckdldEhUVFBDb29raWVBY2Nl
cHRQb2xpY3kpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0RhdGFiYXNlTWFuYWdlci5j
cHA6CisgICAgICAgIChXS0RhdGFiYXNlTWFuYWdlckdldERhdGFiYXNlc0J5T3JpZ2luKToKKyAg
ICAgICAgKFdLRGF0YWJhc2VNYW5hZ2VyR2V0RGF0YWJhc2VPcmlnaW5zKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL0MvV0tGcmFtZS5jcHA6CisgICAgICAgIChXS0ZyYW1lR2V0TWFpblJlc291
cmNlRGF0YSk6CisgICAgICAgIChXS0ZyYW1lR2V0UmVzb3VyY2VEYXRhKToKKyAgICAgICAgKFdL
RnJhbWVHZXRXZWJBcmNoaXZlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tLZXlWYWx1
ZVN0b3JhZ2VNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdLS2V5VmFsdWVTdG9yYWdlTWFuYWdlckdl
dEtleVZhbHVlU3RvcmFnZU9yaWdpbnMpOgorICAgICAgICAoV0tLZXlWYWx1ZVN0b3JhZ2VNYW5h
Z2VyR2V0U3RvcmFnZURldGFpbHNCeU9yaWdpbik6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9D
L1dLTWVkaWFDYWNoZU1hbmFnZXIuY3BwOgorICAgICAgICAoV0tNZWRpYUNhY2hlTWFuYWdlckdl
dEhvc3RuYW1lc1dpdGhNZWRpYUNhY2hlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tP
cmlnaW5EYXRhTWFuYWdlci5jcHA6CisgICAgICAgIChXS09yaWdpbkRhdGFNYW5hZ2VyR2V0T3Jp
Z2lucyk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHA6CisgICAgICAgIChX
S1BhZ2VSdW5KYXZhU2NyaXB0SW5NYWluRnJhbWUpOgorICAgICAgICAoV0tQYWdlUmVuZGVyVHJl
ZUV4dGVybmFsUmVwcmVzZW50YXRpb24pOgorICAgICAgICAoV0tQYWdlR2V0U291cmNlRm9yRnJh
bWUpOgorICAgICAgICAoV0tQYWdlR2V0Q29udGVudHNBc1N0cmluZyk6CisgICAgICAgIChXS1Bh
Z2VHZXRTZWxlY3Rpb25Bc1dlYkFyY2hpdmVEYXRhKToKKyAgICAgICAgKFdLUGFnZUdldENvbnRl
bnRzQXNNSFRNTERhdGEpOgorICAgICAgICAoV0tQYWdlRm9yY2VSZXBhaW50KToKKyAgICAgICAg
KFdLUGFnZVZhbGlkYXRlQ29tbWFuZCk6CisgICAgICAgIChXS1BhZ2VDb21wdXRlUGFnZXNGb3JQ
cmludGluZyk6CisgICAgICAgIChXS1BhZ2VEcmF3UGFnZXNUb1BERik6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9DL1dLUGx1Z2luU2l0ZURhdGFNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdLUGx1
Z2luU2l0ZURhdGFNYW5hZ2VyR2V0U2l0ZXNXaXRoRGF0YSk6CisgICAgICAgIChXS1BsdWdpblNp
dGVEYXRhTWFuYWdlckNsZWFyU2l0ZURhdGEpOgorICAgICAgICAoV0tQbHVnaW5TaXRlRGF0YU1h
bmFnZXJDbGVhckFsbFNpdGVEYXRhKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tSZXNv
dXJjZUNhY2hlTWFuYWdlci5jcHA6CisgICAgICAgIChXS1Jlc291cmNlQ2FjaGVNYW5hZ2VyR2V0
Q2FjaGVPcmlnaW5zKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb29raWVN
YW5hZ2VyLmNwcDoKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfYWNjZXB0X3Bv
bGljeSk6CisgICAgICAgICh3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2RvbWFpbnNfd2l0aF9j
b29raWVzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQcmludE9wZXJhdGlv
bi5jcHA6CisgICAgICAgIChkcmF3UGFnZXNGb3JQcmludGluZ0NvbXBsZXRlZCk6CisgICAgICAg
ICh3ZWJraXRQcmludE9wZXJhdGlvblByaW50UGFnZXNGb3JGcmFtZSk6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViUmVzb3VyY2UuY3BwOgorICAgICAgICAocmVzb3VyY2VE
YXRhQ2FsbGJhY2spOgorICAgICAgICAod2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfZGF0YSk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHA6CisgICAgICAgICh3
ZWJraXRfd2ViX3ZpZXdfY2FuX2V4ZWN1dGVfZWRpdGluZ19jb21tYW5kKToKKyAgICAgICAgKHdl
YmtpdFdlYlZpZXdSdW5KYXZhU2NyaXB0Q2FsbGJhY2spOgorICAgICAgICAod2Via2l0X3dlYl92
aWV3X3J1bl9qYXZhc2NyaXB0KToKKyAgICAgICAgKHJlc291cmNlc1N0cmVhbVJlYWRDYWxsYmFj
ayk6CisgICAgICAgIChnZXRDb250ZW50c0FzTUhUTUxEYXRhQ2FsbGJhY2spOgorICAgICAgICAo
d2Via2l0X3dlYl92aWV3X3NhdmUpOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X3NhdmVfdG9f
ZmlsZSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9pb3MvV0tJbnRlcmFjdGlvblZpZXcubW06
CisgICAgICAgICgtW1dLSW50ZXJhY3Rpb25WaWV3IF9kZWZpbmU6XSk6CisgICAgICAgIChzZWxl
Y3Rpb25DaGFuZ2VkV2l0aEdlc3R1cmUpOgorICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlZFdpdGhU
b3VjaCk6CisgICAgICAgICgtW1dLSW50ZXJhY3Rpb25WaWV3IGNoYW5nZVNlbGVjdGlvbldpdGhH
ZXN0dXJlQXQ6d2l0aEdlc3R1cmU6d2l0aFN0YXRlOl0pOgorICAgICAgICAoLVtXS0ludGVyYWN0
aW9uVmlldyBjaGFuZ2VTZWxlY3Rpb25XaXRoVG91Y2hBdDp3aXRoU2VsZWN0aW9uVG91Y2g6YmFz
ZUlzU3RhcnQ6XSk6CisgICAgICAgICgtW1dLSW50ZXJhY3Rpb25WaWV3IGNoYW5nZVNlbGVjdGlv
bldpdGhUb3VjaGVzRnJvbTp0bzp3aXRoR2VzdHVyZTp3aXRoU3RhdGU6XSk6CisgICAgICAgICgt
W1dLSW50ZXJhY3Rpb25WaWV3IHJlcXVlc3RBdXRvY29ycmVjdGlvblJlY3RzRm9yU3RyaW5nOndp
dGhDb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKC1bV0tJbnRlcmFjdGlvblZpZXcgYXBw
bHlBdXRvY29ycmVjdGlvbjp0b1N0cmluZzp3aXRoQ29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAg
ICAgICgtW1dLSW50ZXJhY3Rpb25WaWV3IHJlcXVlc3RBdXRvY29ycmVjdGlvbkNvbnRleHRXaXRo
Q29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMvV0tQcmlu
dGluZ1ZpZXcubW06CisgICAgICAgIChwYWdlRGlkRHJhd1RvSW1hZ2UpOgorICAgICAgICAoLVtX
S1ByaW50aW5nVmlldyBfcHJlcGFyZVBERkRhdGFGb3JQcmludGluZ09uU2Vjb25kYXJ5VGhyZWFk
XSk6CisgICAgICAgIChwYWdlRGlkQ29tcHV0ZVBhZ2VSZWN0cyk6CisgICAgICAgICgtW1dLUHJp
bnRpbmdWaWV3IF9hc2tQYWdlVG9Db21wdXRlUGFnZVJlY3RzXSk6CisgICAgICAgICgtW1dLUHJp
bnRpbmdWaWV3IF9kcmF3UHJldmlldzpdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9X
S1ZpZXcubW06CisgICAgICAgICgtW1dLVmlldyB2YWxpZGF0ZVVzZXJJbnRlcmZhY2VJdGVtOl0p
OgorICAgICAgICAoLVtXS1ZpZXcgc3RhcnRTcGVha2luZzpdKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvQXV0b0NvcnJlY3Rpb25DYWxsYmFjay5oOgorICAgICAgICAoV2ViS2l0OjpBdXRvY29ycmVj
dGlvbkRhdGFDYWxsYmFjazo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6QXV0b2NvcnJlY3Rp
b25EYXRhQ2FsbGJhY2s6OnBlcmZvcm1DYWxsYmFja1dpdGhSZXR1cm5WYWx1ZSk6CisgICAgICAg
IChXZWJLaXQ6OkF1dG9jb3JyZWN0aW9uRGF0YUNhbGxiYWNrOjppbnZhbGlkYXRlKToKKyAgICAg
ICAgKFdlYktpdDo6QXV0b2NvcnJlY3Rpb25EYXRhQ2FsbGJhY2s6OkF1dG9jb3JyZWN0aW9uRGF0
YUNhbGxiYWNrKToKKyAgICAgICAgKFdlYktpdDo6QXV0b2NvcnJlY3Rpb25Db250ZXh0Q2FsbGJh
Y2s6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkF1dG9jb3JyZWN0aW9uQ29udGV4dENhbGxi
YWNrOjpwZXJmb3JtQ2FsbGJhY2tXaXRoUmV0dXJuVmFsdWUpOgorICAgICAgICAoV2ViS2l0OjpB
dXRvY29ycmVjdGlvbkNvbnRleHRDYWxsYmFjazo6aW52YWxpZGF0ZSk6CisgICAgICAgIChXZWJL
aXQ6OkF1dG9jb3JyZWN0aW9uQ29udGV4dENhbGxiYWNrOjpBdXRvY29ycmVjdGlvbkNvbnRleHRD
YWxsYmFjayk6CisgICAgICAgICogVUlQcm9jZXNzL0dlbmVyaWNDYWxsYmFjay5oOgorICAgICAg
ICAoV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkNhbGxiYWNrQmFzZSk6CisgICAgICAgIChXZWJLaXQ6
OkNhbGxiYWNrQmFzZTo6Z2VuZXJhdGVDYWxsYmFja0lEKToKKyAgICAgICAgKFdlYktpdDo6Vm9p
ZENhbGxiYWNrOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpWb2lkQ2FsbGJhY2s6OnBlcmZv
cm1DYWxsYmFjayk6CisgICAgICAgIChXZWJLaXQ6OlZvaWRDYWxsYmFjazo6aW52YWxpZGF0ZSk6
CisgICAgICAgIChXZWJLaXQ6OlZvaWRDYWxsYmFjazo6Vm9pZENhbGxiYWNrKToKKyAgICAgICAg
KFdlYktpdDo6Vm9pZEFQSUNhbGxiYWNrOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpHZW5l
cmljQ2FsbGJhY2s6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkdlbmVyaWNDYWxsYmFjazo6
cGVyZm9ybUNhbGxiYWNrV2l0aFJldHVyblZhbHVlKToKKyAgICAgICAgKFdlYktpdDo6R2VuZXJp
Y0NhbGxiYWNrOjppbnZhbGlkYXRlKToKKyAgICAgICAgKFdlYktpdDo6R2VuZXJpY0NhbGxiYWNr
OjpHZW5lcmljQ2FsbGJhY2spOgorICAgICAgICAoV2ViS2l0OjpHZW5lcmljQVBJQ2FsbGJhY2s6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkNvbXB1dGVkUGFnZXNDYWxsYmFjazo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYktpdDo6Q29tcHV0ZWRQYWdlc0NhbGxiYWNrOjpwZXJmb3JtQ2FsbGJh
Y2tXaXRoUmV0dXJuVmFsdWUpOgorICAgICAgICAoV2ViS2l0OjpDb21wdXRlZFBhZ2VzQ2FsbGJh
Y2s6OmludmFsaWRhdGUpOgorICAgICAgICAoV2ViS2l0OjpDb21wdXRlZFBhZ2VzQ2FsbGJhY2s6
OkNvbXB1dGVkUGFnZXNDYWxsYmFjayk6CisgICAgICAgIChXZWJLaXQ6OkltYWdlQ2FsbGJhY2s6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkltYWdlQ2FsbGJhY2s6OnBlcmZvcm1DYWxsYmFj
a1dpdGhSZXR1cm5WYWx1ZSk6CisgICAgICAgIChXZWJLaXQ6OkltYWdlQ2FsbGJhY2s6OmludmFs
aWRhdGUpOgorICAgICAgICAoV2ViS2l0OjpJbWFnZUNhbGxiYWNrOjpJbWFnZUNhbGxiYWNrKToK
KyAgICAgICAgKiBVSVByb2Nlc3MvUGx1Z2lucy9XZWJQbHVnaW5TaXRlRGF0YU1hbmFnZXIuaDoK
KyAgICAgICAgKiBVSVByb2Nlc3MvU3RhdGlzdGljc1JlcXVlc3QuaDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvV2ViQXBwbGljYXRpb25DYWNoZU1hbmFnZXJQcm94eS5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9XZWJDb250ZXh0Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQ
cm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJEYXRhYmFzZU1hbmFnZXJQcm94eS5oOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9XZWJGcmFtZVByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNz
L1dlYktleVZhbHVlU3RvcmFnZU1hbmFnZXIuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViTWVk
aWFDYWNoZU1hbmFnZXJQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJPcmlnaW5EYXRh
TWFuYWdlclByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAg
ICAgICAoV2ViS2l0OjpWYWxpZGF0ZUNvbW1hbmRDYWxsYmFjazo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYktpdDo6VmFsaWRhdGVDb21tYW5kQ2FsbGJhY2s6OnBlcmZvcm1DYWxsYmFja1dpdGhSZXR1
cm5WYWx1ZSk6CisgICAgICAgIChXZWJLaXQ6OlZhbGlkYXRlQ29tbWFuZENhbGxiYWNrOjppbnZh
bGlkYXRlKToKKyAgICAgICAgKFdlYktpdDo6VmFsaWRhdGVDb21tYW5kQ2FsbGJhY2s6OlZhbGlk
YXRlQ29tbWFuZENhbGxiYWNrKToKKyAgICAgICAgKFdlYktpdDo6R2VzdHVyZUNhbGxiYWNrOjpj
cmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpHZXN0dXJlQ2FsbGJhY2s6OnBlcmZvcm1DYWxsYmFj
a1dpdGhSZXR1cm5WYWx1ZSk6CisgICAgICAgIChXZWJLaXQ6Okdlc3R1cmVDYWxsYmFjazo6aW52
YWxpZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6Okdlc3R1cmVDYWxsYmFjazo6R2VzdHVyZUNhbGxi
YWNrKToKKyAgICAgICAgKFdlYktpdDo6VG91Y2hlc0NhbGxiYWNrOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViS2l0OjpUb3VjaGVzQ2FsbGJhY2s6OnBlcmZvcm1DYWxsYmFja1dpdGhSZXR1cm5WYWx1
ZSk6CisgICAgICAgIChXZWJLaXQ6OlRvdWNoZXNDYWxsYmFjazo6aW52YWxpZGF0ZSk6CisgICAg
ICAgIChXZWJLaXQ6OlRvdWNoZXNDYWxsYmFjazo6VG91Y2hlc0NhbGxiYWNrKToKKyAgICAgICAg
KiBVSVByb2Nlc3MvV2ViUmVzb3VyY2VDYWNoZU1hbmFnZXJQcm94eS5oOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9tYWMvV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlci5tbToKKyAgICAgICAgKC1b
V0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBmaW5pc2hlZEV4aXRGdWxsU2NyZWVuQW5pbWF0
aW9uOl0pOgorCiAyMDE0LTAyLTE4ICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAK
ICAgICAgICAgUExBVEZPUk0oTUFDKSBpcyB0cnVlIHdoZW4gYnVpbGRpbmcgZm9yIGlPUwpJbmRl
eDogU291cmNlL1dlYktpdDIvU2hhcmVkL1NlY3VyaXR5T3JpZ2luRGF0YS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9TZWN1cml0eU9yaWdpbkRhdGEuaAkocmV2aXNpb24g
MTY0MzU1KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL1NlY3VyaXR5T3JpZ2luRGF0YS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIG5hbWVzcGFjZSBJUEMgewogCiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIAotdHlwZWRlZiBHZW5lcmljQ2FsbGJhY2s8V0tBcnJheVJlZj4gQXJyYXlD
YWxsYmFjazsKK3R5cGVkZWYgR2VuZXJpY0NhbGxiYWNrPEFQSTo6QXJyYXkqPiBBcnJheUNhbGxi
YWNrOwogCiBzdHJ1Y3QgU2VjdXJpdHlPcmlnaW5EYXRhIHsKICAgICBzdGF0aWMgU2VjdXJpdHlP
cmlnaW5EYXRhIGZyb21TZWN1cml0eU9yaWdpbihjb25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdp
biopOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0F1dG9Db3JyZWN0aW9uQ2FsbGJh
Y2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQXV0b0NvcnJlY3Rp
b25DYWxsYmFjay5oCShyZXZpc2lvbiAxNjQzNTUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQXV0b0NvcnJlY3Rpb25DYWxsYmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMSArMzcs
MTEgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIEF1dG9jb3JyZWN0aW9uRGF0YUNhbGxi
YWNrIDogcHVibGljIENhbGxiYWNrQmFzZSB7CiBwdWJsaWM6Ci0gICAgdHlwZWRlZiB2b2lkICgq
Q2FsbGJhY2tGdW5jdGlvbikoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkZsb2F0UmVjdD4mLCBjb25z
dCBTdHJpbmcmLCBkb3VibGUsIHVpbnQ2NF90LCBXS0Vycm9yUmVmLCB2b2lkKik7CisgICAgdHlw
ZWRlZiBzdGQ6OmZ1bmN0aW9uPHZvaWQoYm9vbCwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OkZsb2F0
UmVjdD4mLCBjb25zdCBTdHJpbmcmLCBkb3VibGUsIHVpbnQ2NF90KT4gQ2FsbGJhY2tGdW5jdGlv
bjsKIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEF1dG9jb3JyZWN0aW9uRGF0YUNhbGxiYWNrPiBj
cmVhdGUodm9pZCogY29udGV4dCwgQ2FsbGJhY2tGdW5jdGlvbiBjYWxsYmFjaykKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxBdXRvY29ycmVjdGlvbkRhdGFDYWxsYmFjaz4gY3JlYXRlKENhbGxiYWNr
RnVuY3Rpb24gY2FsbGJhY2spCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEF1
dG9jb3JyZWN0aW9uRGF0YUNhbGxiYWNrKGNvbnRleHQsIGNhbGxiYWNrKSk7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgQXV0b2NvcnJlY3Rpb25EYXRhQ2FsbGJhY2soY2FsbGJhY2spKTsK
ICAgICB9CiAKICAgICB2aXJ0dWFsIH5BdXRvY29ycmVjdGlvbkRhdGFDYWxsYmFjaygpCkBAIC01
Myw3ICs1Myw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2NhbGxiYWNrKTsK
IAotICAgICAgICBtX2NhbGxiYWNrKHJldHVyblZhbHVlMSwgcmV0dXJuVmFsdWUyLCByZXR1cm5W
YWx1ZTMsIHJldHVyblZhbHVlNCwgMCwgY29udGV4dCgpKTsKKyAgICAgICAgbV9jYWxsYmFjayhm
YWxzZSwgcmV0dXJuVmFsdWUxLCByZXR1cm5WYWx1ZTIsIHJldHVyblZhbHVlMywgcmV0dXJuVmFs
dWU0KTsKIAogICAgICAgICBtX2NhbGxiYWNrID0gMDsKICAgICB9CkBAIC02MiwxNiArNjIsMTQg
QEAgcHVibGljOgogICAgIHsKICAgICAgICAgQVNTRVJUKG1fY2FsbGJhY2spOwogCi0gICAgICAg
IFJlZlB0cjxBUEk6OkVycm9yPiBlcnJvciA9IEFQSTo6RXJyb3I6OmNyZWF0ZSgpOwotICAgICAg
ICBtX2NhbGxiYWNrKFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+KCksIFN0cmluZygpLCAwLCAw
LCB0b0FQSShlcnJvci5nZXQoKSksIGNvbnRleHQoKSk7CisgICAgICAgIG1fY2FsbGJhY2sodHJ1
ZSwgVmVjdG9yPFdlYkNvcmU6OkZsb2F0UmVjdD4oKSwgU3RyaW5nKCksIDAsIDApOwogCiAgICAg
ICAgIG1fY2FsbGJhY2sgPSAwOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBBdXRvY29ycmVjdGlv
bkRhdGFDYWxsYmFjayh2b2lkKiBjb250ZXh0LCBDYWxsYmFja0Z1bmN0aW9uIGNhbGxiYWNrKQot
ICAgICAgICA6IENhbGxiYWNrQmFzZShjb250ZXh0KQotICAgICAgICAsIG1fY2FsbGJhY2soY2Fs
bGJhY2spCisgICAgQXV0b2NvcnJlY3Rpb25EYXRhQ2FsbGJhY2soQ2FsbGJhY2tGdW5jdGlvbiBj
YWxsYmFjaykKKyAgICAgICAgOiBtX2NhbGxiYWNrKGNhbGxiYWNrKQogICAgIHsKICAgICAgICAg
QVNTRVJUKG1fY2FsbGJhY2spOwogICAgIH0KQEAgLTgxLDExICs3OSwxMSBAQCBwcml2YXRlOgog
CiBjbGFzcyBBdXRvY29ycmVjdGlvbkNvbnRleHRDYWxsYmFjayA6IHB1YmxpYyBDYWxsYmFja0Jh
c2UgewogcHVibGljOgotICAgIHR5cGVkZWYgdm9pZCAoKkNhbGxiYWNrRnVuY3Rpb24pKGNvbnN0
IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIHVp
bnQ2NF90LCB1aW50NjRfdCwgV0tFcnJvclJlZiwgdm9pZCopOworICAgIHR5cGVkZWYgc3RkOjpm
dW5jdGlvbjx2b2lkKGJvb2wsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0
cmluZyYsIGNvbnN0IFN0cmluZyYsIHVpbnQ2NF90LCB1aW50NjRfdCk+IENhbGxiYWNrRnVuY3Rp
b247CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxBdXRvY29ycmVjdGlvbkNvbnRleHRDYWxsYmFj
az4gY3JlYXRlKHZvaWQqIGNvbnRleHQsIENhbGxiYWNrRnVuY3Rpb24gY2FsbGJhY2spCisgICAg
c3RhdGljIFBhc3NSZWZQdHI8QXV0b2NvcnJlY3Rpb25Db250ZXh0Q2FsbGJhY2s+IGNyZWF0ZShD
YWxsYmFja0Z1bmN0aW9uIGNhbGxiYWNrKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBBdXRvY29ycmVjdGlvbkNvbnRleHRDYWxsYmFjayhjb250ZXh0LCBjYWxsYmFjaykpOwor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEF1dG9jb3JyZWN0aW9uQ29udGV4dENhbGxiYWNr
KGNhbGxiYWNrKSk7CiAgICAgfQogCiAgICAgdmlydHVhbCB+QXV0b2NvcnJlY3Rpb25Db250ZXh0
Q2FsbGJhY2soKQpAQCAtOTcsNyArOTUsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBBU1NF
UlQobV9jYWxsYmFjayk7CiAKLSAgICAgICAgbV9jYWxsYmFjayhyZXR1cm5WYWx1ZTEsIHJldHVy
blZhbHVlMiwgcmV0dXJuVmFsdWUzLCByZXR1cm5WYWx1ZTQsIHJldHVyblZhbHVlNSwgcmV0dXJu
VmFsdWU2LCAwLCBjb250ZXh0KCkpOworICAgICAgICBtX2NhbGxiYWNrKGZhbHNlLCByZXR1cm5W
YWx1ZTEsIHJldHVyblZhbHVlMiwgcmV0dXJuVmFsdWUzLCByZXR1cm5WYWx1ZTQsIHJldHVyblZh
bHVlNSwgcmV0dXJuVmFsdWU2KTsKIAogICAgICAgICBtX2NhbGxiYWNrID0gMDsKICAgICB9CkBA
IC0xMDYsMTYgKzEwNCwxNCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBBU1NFUlQobV9jYWxs
YmFjayk7CiAKLSAgICAgICAgUmVmUHRyPEFQSTo6RXJyb3I+IGVycm9yID0gQVBJOjpFcnJvcjo6
Y3JlYXRlKCk7Ci0gICAgICAgIG1fY2FsbGJhY2soU3RyaW5nKCksIFN0cmluZygpLCBTdHJpbmco
KSwgU3RyaW5nKCksIDAsIDAsIHRvQVBJKGVycm9yLmdldCgpKSwgY29udGV4dCgpKTsKKyAgICAg
ICAgbV9jYWxsYmFjayh0cnVlLCBTdHJpbmcoKSwgU3RyaW5nKCksIFN0cmluZygpLCBTdHJpbmco
KSwgMCwgMCk7CiAKICAgICAgICAgbV9jYWxsYmFjayA9IDA7CiAgICAgfQogCiBwcml2YXRlOgot
ICAgIEF1dG9jb3JyZWN0aW9uQ29udGV4dENhbGxiYWNrKHZvaWQqIGNvbnRleHQsIENhbGxiYWNr
RnVuY3Rpb24gY2FsbGJhY2spCi0gICAgICAgIDogQ2FsbGJhY2tCYXNlKGNvbnRleHQpCi0gICAg
ICAgICwgbV9jYWxsYmFjayhjYWxsYmFjaykKKyAgICBBdXRvY29ycmVjdGlvbkNvbnRleHRDYWxs
YmFjayhDYWxsYmFja0Z1bmN0aW9uIGNhbGxiYWNrKQorICAgICAgICA6IG1fY2FsbGJhY2soY2Fs
bGJhY2spCiAgICAgewogICAgICAgICBBU1NFUlQobV9jYWxsYmFjayk7CiAgICAgfQpJbmRleDog
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0dlbmVyaWNDYWxsYmFjay5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9HZW5lcmljQ2FsbGJhY2suaAkocmV2aXNpb24gMTY0
MzU1KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0dlbmVyaWNDYWxsYmFjay5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw5IEBACiAjaW5jbHVkZSAiQVBJRXJyb3IuaCIKICNpbmNs
dWRlICJTaGFyZWFibGVCaXRtYXAuaCIKICNpbmNsdWRlICJXS0FQSUNhc3QuaCIKKyNpbmNsdWRl
IDxmdW5jdGlvbmFsPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL01h
aW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+CiAKQEAgLTQ0LDMyICs0NiwyOSBAQCBwdWJsaWM6CiAgICAgdWludDY0X3Qg
Y2FsbGJhY2tJRCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGJhY2tJRDsgfQogCiBwcm90ZWN0ZWQ6
Ci0gICAgZXhwbGljaXQgQ2FsbGJhY2tCYXNlKHZvaWQqIGNvbnRleHQpCi0gICAgICAgIDogbV9j
b250ZXh0KGNvbnRleHQpCi0gICAgICAgICwgbV9jYWxsYmFja0lEKGdlbmVyYXRlQ2FsbGJhY2tJ
RCgpKQorICAgIGV4cGxpY2l0IENhbGxiYWNrQmFzZSgpCisgICAgICAgIDogbV9jYWxsYmFja0lE
KGdlbmVyYXRlQ2FsbGJhY2tJRCgpKQogICAgIHsKICAgICB9CiAKLSAgICB2b2lkKiBjb250ZXh0
KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0OyB9Ci0KIHByaXZhdGU6CiAgICAgc3RhdGljIHVp
bnQ2NF90IGdlbmVyYXRlQ2FsbGJhY2tJRCgpCiAgICAgeworICAgICAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOwogICAgICAgICBzdGF0aWMgdWludDY0X3QgdW5pcXVlQ2FsbGJhY2tJRCA9IDE7
CiAgICAgICAgIHJldHVybiB1bmlxdWVDYWxsYmFja0lEKys7CiAgICAgfQogCi0gICAgdm9pZCog
bV9jb250ZXh0OwogICAgIHVpbnQ2NF90IG1fY2FsbGJhY2tJRDsKIH07CiAKIGNsYXNzIFZvaWRD
YWxsYmFjayA6IHB1YmxpYyBDYWxsYmFja0Jhc2UgewogcHVibGljOgotICAgIHR5cGVkZWYgdm9p
ZCAoKkNhbGxiYWNrRnVuY3Rpb24pKFdLRXJyb3JSZWYsIHZvaWQqKTsKKyAgICB0eXBlZGVmIHN0
ZDo6ZnVuY3Rpb248dm9pZChib29sKT4gQ2FsbGJhY2tGdW5jdGlvbjsKIAotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4gY3JlYXRlKHZvaWQqIGNvbnRleHQsIENhbGxiYWNrRnVu
Y3Rpb24gY2FsbGJhY2spCisgICAgc3RhdGljIFBhc3NSZWZQdHI8Vm9pZENhbGxiYWNrPiBjcmVh
dGUoQ2FsbGJhY2tGdW5jdGlvbiBjYWxsYmFjaykKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgVm9pZENhbGxiYWNrKGNvbnRleHQsIGNhbGxiYWNrKSk7CisgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgVm9pZENhbGxiYWNrKGNhbGxiYWNrKSk7CiAgICAgfQogCiAgICAgdmly
dHVhbCB+Vm9pZENhbGxiYWNrKCkKQEAgLTgyLDkgKzgxLDkgQEAgcHVibGljOgogICAgICAgICBp
ZiAoIW1fY2FsbGJhY2spCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgbV9jYWxsYmFj
aygwLCBjb250ZXh0KCkpOworICAgICAgICBtX2NhbGxiYWNrKGZhbHNlKTsKIAotICAgICAgICBt
X2NhbGxiYWNrID0gMDsKKyAgICAgICAgbV9jYWxsYmFjayA9IG51bGxwdHI7CiAgICAgfQogICAg
IAogICAgIHZvaWQgaW52YWxpZGF0ZSgpCkBAIC05MiwzMCArOTEsNDAgQEAgcHVibGljOgogICAg
ICAgICBpZiAoIW1fY2FsbGJhY2spCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgUmVm
UHRyPEFQSTo6RXJyb3I+IGVycm9yID0gQVBJOjpFcnJvcjo6Y3JlYXRlKCk7Ci0gICAgICAgIG1f
Y2FsbGJhY2sodG9BUEkoZXJyb3IuZ2V0KCkpLCBjb250ZXh0KCkpOwotICAgICAgICAKLSAgICAg
ICAgbV9jYWxsYmFjayA9IDA7CisgICAgICAgIG1fY2FsbGJhY2sodHJ1ZSk7CisKKyAgICAgICAg
bV9jYWxsYmFjayA9IG51bGxwdHI7CiAgICAgfQogCiBwcml2YXRlOgotICAgIFZvaWRDYWxsYmFj
ayh2b2lkKiBjb250ZXh0LCBDYWxsYmFja0Z1bmN0aW9uIGNhbGxiYWNrKQotICAgICAgICA6IENh
bGxiYWNrQmFzZShjb250ZXh0KQotICAgICAgICAsIG1fY2FsbGJhY2soY2FsbGJhY2spCisgICAg
Vm9pZENhbGxiYWNrKENhbGxiYWNrRnVuY3Rpb24gY2FsbGJhY2spCisgICAgICAgIDogbV9jYWxs
YmFjayhjYWxsYmFjaykKICAgICB7CiAgICAgfQogCiAgICAgQ2FsbGJhY2tGdW5jdGlvbiBtX2Nh
bGxiYWNrOwogfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgQVBJUmV0dXJuVmFsdWVUeXBlLCB0eXBl
bmFtZSBJbnRlcm5hbFJldHVyblZhbHVlVHlwZSA9IHR5cGVuYW1lIEFQSVR5cGVJbmZvPEFQSVJl
dHVyblZhbHVlVHlwZT46OkltcGxUeXBlPgorY2xhc3MgVm9pZEFQSUNhbGxiYWNrIDogcHVibGlj
IENhbGxiYWNrQmFzZSB7CitwdWJsaWM6CisgICAgdHlwZWRlZiB2b2lkICgqQ2FsbGJhY2tGdW5j
dGlvbikoV0tFcnJvclJlZiwgdm9pZCopOworCisgICAgc3RhdGljIFBhc3NSZWZQdHI8Vm9pZENh
bGxiYWNrPiBjcmVhdGUodm9pZCogY29udGV4dCwgQ2FsbGJhY2tGdW5jdGlvbiBjYWxsYmFjaykK
KyAgICB7CisgICAgICAgIHJldHVybiBWb2lkQ2FsbGJhY2s6OmNyZWF0ZShbY29udGV4dCwgY2Fs
bGJhY2tdKGJvb2wgZXJyb3IpIHsKKyAgICAgICAgICAgIGNhbGxiYWNrKGVycm9yID8gdG9BUEko
QVBJOjpFcnJvcjo6Y3JlYXRlKCkuZ2V0KCkpIDogMCwgY29udGV4dCk7CisgICAgICAgIH0pOwor
ICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CiBjbGFzcyBHZW5lcmljQ2FsbGJhY2sg
OiBwdWJsaWMgQ2FsbGJhY2tCYXNlIHsKIHB1YmxpYzoKLSAgICB0eXBlZGVmIHZvaWQgKCpDYWxs
YmFja0Z1bmN0aW9uKShBUElSZXR1cm5WYWx1ZVR5cGUsIFdLRXJyb3JSZWYsIHZvaWQqKTsKKyAg
ICB0eXBlZGVmIHN0ZDo6ZnVuY3Rpb248dm9pZChib29sLCBUKT4gQ2FsbGJhY2tGdW5jdGlvbjsK
IAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdlbmVyaWNDYWxsYmFjaz4gY3JlYXRlKHZvaWQqIGNv
bnRleHQsIENhbGxiYWNrRnVuY3Rpb24gY2FsbGJhY2spCisgICAgc3RhdGljIFBhc3NSZWZQdHI8
R2VuZXJpY0NhbGxiYWNrPiBjcmVhdGUoQ2FsbGJhY2tGdW5jdGlvbiBjYWxsYmFjaykKICAgICB7
Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgR2VuZXJpY0NhbGxiYWNrKGNvbnRleHQsIGNh
bGxiYWNrKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgR2VuZXJpY0NhbGxiYWNrKGNh
bGxiYWNrKSk7CiAgICAgfQogCiAgICAgdmlydHVhbCB+R2VuZXJpY0NhbGxiYWNrKCkKQEAgLTEy
Myw0MyArMTMyLDU2IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKCFtX2NhbGxiYWNrKTsKICAg
ICB9CiAKLSAgICB2b2lkIHBlcmZvcm1DYWxsYmFja1dpdGhSZXR1cm5WYWx1ZShJbnRlcm5hbFJl
dHVyblZhbHVlVHlwZSByZXR1cm5WYWx1ZSkKKyAgICB2b2lkIHBlcmZvcm1DYWxsYmFja1dpdGhS
ZXR1cm5WYWx1ZShUIHJldHVyblZhbHVlKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fY2FsbGJh
Y2spOworICAgICAgICBpZiAoIW1fY2FsbGJhY2spCisgICAgICAgICAgICByZXR1cm47CiAKLSAg
ICAgICAgbV9jYWxsYmFjayh0b0FQSShyZXR1cm5WYWx1ZSksIDAsIGNvbnRleHQoKSk7CisgICAg
ICAgIG1fY2FsbGJhY2soZmFsc2UsIHJldHVyblZhbHVlKTsKIAotICAgICAgICBtX2NhbGxiYWNr
ID0gMDsKKyAgICAgICAgbV9jYWxsYmFjayA9IG51bGxwdHI7CiAgICAgfQogICAgIAogICAgIHZv
aWQgaW52YWxpZGF0ZSgpCiAgICAgewotICAgICAgICBBU1NFUlQobV9jYWxsYmFjayk7CisgICAg
ICAgIGlmICghbV9jYWxsYmFjaykKKyAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBSZWZQ
dHI8QVBJOjpFcnJvcj4gZXJyb3IgPSBBUEk6OkVycm9yOjpjcmVhdGUoKTsKLSAgICAgICAgbV9j
YWxsYmFjaygwLCB0b0FQSShlcnJvci5nZXQoKSksIGNvbnRleHQoKSk7Ci0gICAgICAgIAotICAg
ICAgICBtX2NhbGxiYWNrID0gMDsKKyAgICAgICAgbV9jYWxsYmFjayh0cnVlLCBUKCkpOworCisg
ICAgICAgIG1fY2FsbGJhY2sgPSBudWxscHRyOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBHZW5l
cmljQ2FsbGJhY2sodm9pZCogY29udGV4dCwgQ2FsbGJhY2tGdW5jdGlvbiBjYWxsYmFjaykKLSAg
ICAgICAgOiBDYWxsYmFja0Jhc2UoY29udGV4dCkKLSAgICAgICAgLCBtX2NhbGxiYWNrKGNhbGxi
YWNrKQorICAgIEdlbmVyaWNDYWxsYmFjayhDYWxsYmFja0Z1bmN0aW9uIGNhbGxiYWNrKQorICAg
ICAgICA6IG1fY2FsbGJhY2soY2FsbGJhY2spCiAgICAgewogICAgIH0KIAogICAgIENhbGxiYWNr
RnVuY3Rpb24gbV9jYWxsYmFjazsKIH07CiAKLS8vIEZJWE1FOiBNYWtlIGEgdmVyc2lvbiBvZiBD
YWxsYmFja0Jhc2Ugd2l0aCB0d28gYXJndW1lbnRzLCBhbmQgZGVmaW5lIENvbXB1dGVkUGFnZXND
YWxsYmFjayBhcyBhIHNwZWNpYWxpemF0aW9uLgordGVtcGxhdGU8dHlwZW5hbWUgQVBJUmV0dXJu
VmFsdWVUeXBlLCB0eXBlbmFtZSBJbnRlcm5hbFJldHVyblZhbHVlVHlwZSA9IHR5cGVuYW1lIEFQ
SVR5cGVJbmZvPEFQSVJldHVyblZhbHVlVHlwZT46OkltcGxUeXBlPgorY2xhc3MgR2VuZXJpY0FQ
SUNhbGxiYWNrIDogcHVibGljIENhbGxiYWNrQmFzZSB7CitwdWJsaWM6CisgICAgdHlwZWRlZiB2
b2lkICgqQ2FsbGJhY2tGdW5jdGlvbikoQVBJUmV0dXJuVmFsdWVUeXBlLCBXS0Vycm9yUmVmLCB2
b2lkKik7CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxHZW5lcmljQ2FsbGJhY2s8SW50ZXJuYWxS
ZXR1cm5WYWx1ZVR5cGU+PiBjcmVhdGUodm9pZCogY29udGV4dCwgQ2FsbGJhY2tGdW5jdGlvbiBj
YWxsYmFjaykKKyAgICB7CisgICAgICAgIHJldHVybiBHZW5lcmljQ2FsbGJhY2s8SW50ZXJuYWxS
ZXR1cm5WYWx1ZVR5cGU+OjpjcmVhdGUoW2NvbnRleHQsIGNhbGxiYWNrXShib29sIGVycm9yLCBJ
bnRlcm5hbFJldHVyblZhbHVlVHlwZSByZXR1cm5WYWx1ZSkgeworICAgICAgICAgICAgY2FsbGJh
Y2sodG9BUEkocmV0dXJuVmFsdWUpLCBlcnJvciA/IHRvQVBJKEFQSTo6RXJyb3I6OmNyZWF0ZSgp
LmdldCgpKSA6IDAsIGNvbnRleHQpOworICAgICAgICB9KTsKKyAgICB9Cit9OworCisvLyBGSVhN
RTogTWFrZSBhIHZlcnNpb24gb2YgR2VuZXJpY0NhbGxiYWNrIHdpdGggdHdvIGFyZ3VtZW50cywg
YW5kIGRlZmluZSBDb21wdXRlZFBhZ2VzQ2FsbGJhY2sgYXMgYSBzcGVjaWFsaXphdGlvbi4KIGNs
YXNzIENvbXB1dGVkUGFnZXNDYWxsYmFjayA6IHB1YmxpYyBDYWxsYmFja0Jhc2UgewogcHVibGlj
OgotICAgIHR5cGVkZWYgdm9pZCAoKkNhbGxiYWNrRnVuY3Rpb24pKGNvbnN0IFZlY3RvcjxXZWJD
b3JlOjpJbnRSZWN0PiYsIGRvdWJsZSwgV0tFcnJvclJlZiwgdm9pZCopOworICAgIHR5cGVkZWYg
c3RkOjpmdW5jdGlvbjx2b2lkKGJvb2wsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpJbnRSZWN0PiYs
IGRvdWJsZSk+IENhbGxiYWNrRnVuY3Rpb247CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb21w
dXRlZFBhZ2VzQ2FsbGJhY2s+IGNyZWF0ZSh2b2lkKiBjb250ZXh0LCBDYWxsYmFja0Z1bmN0aW9u
IGNhbGxiYWNrKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENvbXB1dGVkUGFnZXNDYWxsYmFjaz4g
Y3JlYXRlKENhbGxiYWNrRnVuY3Rpb24gY2FsbGJhY2spCiAgICAgewotICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IENvbXB1dGVkUGFnZXNDYWxsYmFjayhjb250ZXh0LCBjYWxsYmFjaykpOwor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENvbXB1dGVkUGFnZXNDYWxsYmFjayhjYWxsYmFj
aykpOwogICAgIH0KIAogICAgIHZpcnR1YWwgfkNvbXB1dGVkUGFnZXNDYWxsYmFjaygpCkBAIC0x
NzEsNyArMTkzLDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgQVNTRVJUKG1fY2FsbGJhY2sp
OwogCi0gICAgICAgIG1fY2FsbGJhY2socmV0dXJuVmFsdWUxLCByZXR1cm5WYWx1ZTIsIDAsIGNv
bnRleHQoKSk7CisgICAgICAgIG1fY2FsbGJhY2soZmFsc2UsIHJldHVyblZhbHVlMSwgcmV0dXJu
VmFsdWUyKTsKIAogICAgICAgICBtX2NhbGxiYWNrID0gMDsKICAgICB9CkBAIC0xODAsMTcgKzIw
MiwxNSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBBU1NFUlQobV9jYWxsYmFjayk7CiAKLSAg
ICAgICAgUmVmUHRyPEFQSTo6RXJyb3I+IGVycm9yID0gQVBJOjpFcnJvcjo6Y3JlYXRlKCk7Ci0g
ICAgICAgIG1fY2FsbGJhY2soVmVjdG9yPFdlYkNvcmU6OkludFJlY3Q+KCksIDAsIHRvQVBJKGVy
cm9yLmdldCgpKSwgY29udGV4dCgpKTsKKyAgICAgICAgbV9jYWxsYmFjayh0cnVlLCBWZWN0b3I8
V2ViQ29yZTo6SW50UmVjdD4oKSwgMCk7CiAgICAgICAgIAogICAgICAgICBtX2NhbGxiYWNrID0g
MDsKICAgICB9CiAKIHByaXZhdGU6CiAKLSAgICBDb21wdXRlZFBhZ2VzQ2FsbGJhY2sodm9pZCog
Y29udGV4dCwgQ2FsbGJhY2tGdW5jdGlvbiBjYWxsYmFjaykKLSAgICAgICAgOiBDYWxsYmFja0Jh
c2UoY29udGV4dCkKLSAgICAgICAgLCBtX2NhbGxiYWNrKGNhbGxiYWNrKQorICAgIENvbXB1dGVk
UGFnZXNDYWxsYmFjayhDYWxsYmFja0Z1bmN0aW9uIGNhbGxiYWNrKQorICAgICAgICA6IG1fY2Fs
bGJhY2soY2FsbGJhY2spCiAgICAgewogICAgIH0KIApAQCAtMTk5LDExICsyMTksMTEgQEAgcHJp
dmF0ZToKIAogY2xhc3MgSW1hZ2VDYWxsYmFjayA6IHB1YmxpYyBDYWxsYmFja0Jhc2UgewogcHVi
bGljOgotICAgIHR5cGVkZWYgdm9pZCAoKkNhbGxiYWNrRnVuY3Rpb24pKGNvbnN0IFNoYXJlYWJs
ZUJpdG1hcDo6SGFuZGxlJiwgV0tFcnJvclJlZiwgdm9pZCopOworICAgIHR5cGVkZWYgc3RkOjpm
dW5jdGlvbjx2b2lkKGJvb2wsIGNvbnN0IFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJik+IENhbGxi
YWNrRnVuY3Rpb247CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbWFnZUNhbGxiYWNrPiBjcmVh
dGUodm9pZCogY29udGV4dCwgQ2FsbGJhY2tGdW5jdGlvbiBjYWxsYmFjaykKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxJbWFnZUNhbGxiYWNrPiBjcmVhdGUoQ2FsbGJhY2tGdW5jdGlvbiBjYWxsYmFj
aykKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW1hZ2VDYWxsYmFjayhjb250
ZXh0LCBjYWxsYmFjaykpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEltYWdlQ2FsbGJh
Y2soY2FsbGJhY2spKTsKICAgICB9CiAKICAgICB2aXJ0dWFsIH5JbWFnZUNhbGxiYWNrKCkKQEAg
LTIxNSw3ICsyMzUsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBBU1NFUlQobV9jYWxsYmFj
ayk7CiAKLSAgICAgICAgbV9jYWxsYmFjayhyZXR1cm5WYWx1ZTEsIDAsIGNvbnRleHQoKSk7Cisg
ICAgICAgIG1fY2FsbGJhY2sodHJ1ZSwgcmV0dXJuVmFsdWUxKTsKIAogICAgICAgICBtX2NhbGxi
YWNrID0gMDsKICAgICB9CkBAIC0yMjYsMTYgKzI0NiwxNSBAQCBwdWJsaWM6CiAKICAgICAgICAg
UmVmUHRyPEFQSTo6RXJyb3I+IGVycm9yID0gQVBJOjpFcnJvcjo6Y3JlYXRlKCk7CiAgICAgICAg
IFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZTsKLSAgICAgICAgbV9jYWxsYmFjayhoYW5k
bGUsIHRvQVBJKGVycm9yLmdldCgpKSwgY29udGV4dCgpKTsKKyAgICAgICAgbV9jYWxsYmFjayhm
YWxzZSwgaGFuZGxlKTsKIAogICAgICAgICBtX2NhbGxiYWNrID0gMDsKICAgICB9CiAKIHByaXZh
dGU6CiAKLSAgICBJbWFnZUNhbGxiYWNrKHZvaWQqIGNvbnRleHQsIENhbGxiYWNrRnVuY3Rpb24g
Y2FsbGJhY2spCi0gICAgICAgIDogQ2FsbGJhY2tCYXNlKGNvbnRleHQpCi0gICAgICAgICwgbV9j
YWxsYmFjayhjYWxsYmFjaykKKyAgICBJbWFnZUNhbGxiYWNrKENhbGxiYWNrRnVuY3Rpb24gY2Fs
bGJhY2spCisgICAgICAgIDogbV9jYWxsYmFjayhjYWxsYmFjaykKICAgICB7CiAgICAgfQogICAg
IApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1N0YXRpc3RpY3NSZXF1ZXN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1N0YXRpc3RpY3NSZXF1ZXN0LmgJ
KHJldmlzaW9uIDE2NDM1NSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9TdGF0aXN0aWNz
UmVxdWVzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBAIG5hbWVzcGFjZSBXZWJL
aXQgewogCiBzdHJ1Y3QgU3RhdGlzdGljc0RhdGE7CiAKLXR5cGVkZWYgR2VuZXJpY0NhbGxiYWNr
PFdLRGljdGlvbmFyeVJlZj4gRGljdGlvbmFyeUNhbGxiYWNrOwordHlwZWRlZiBHZW5lcmljQ2Fs
bGJhY2s8SW1tdXRhYmxlRGljdGlvbmFyeSo+IERpY3Rpb25hcnlDYWxsYmFjazsKIAogZW51bSBT
dGF0aXN0aWNzUmVxdWVzdFR5cGUgewogICAgIFN0YXRpc3RpY3NSZXF1ZXN0VHlwZVdlYkNvbnRl
bnQgPSAweDAwMDAwMDAxLApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkFwcGxp
Y2F0aW9uQ2FjaGVNYW5hZ2VyUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViQXBwbGljYXRpb25DYWNoZU1hbmFnZXJQcm94eS5oCShyZXZpc2lvbiAxNjQz
NTUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQXBwbGljYXRpb25DYWNoZU1hbmFn
ZXJQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIG5hbWVzcGFjZSBXZWJL
aXQgewogY2xhc3MgV2ViU2VjdXJpdHlPcmlnaW47CiBzdHJ1Y3QgU2VjdXJpdHlPcmlnaW5EYXRh
OwogCi10eXBlZGVmIEdlbmVyaWNDYWxsYmFjazxXS0FycmF5UmVmPiBBcnJheUNhbGxiYWNrOwor
dHlwZWRlZiBHZW5lcmljQ2FsbGJhY2s8QVBJOjpBcnJheSo+IEFycmF5Q2FsbGJhY2s7CiAKIGNs
YXNzIFdlYkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyUHJveHkgOiBwdWJsaWMgQVBJOjpPYmplY3RJ
bXBsPEFQSTo6T2JqZWN0OjpUeXBlOjpBcHBsaWNhdGlvbkNhY2hlTWFuYWdlcj4sIHB1YmxpYyBX
ZWJDb250ZXh0U3VwcGxlbWVudCwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CiBwdWJs
aWM6CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0LmgJKHJldmlzaW9uIDE2
NDM1NSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTgwLDcgKzgwLDcgQEAgc3RydWN0IFN0YXRpc3RpY3NEYXRhOwogc3RydWN0IFdl
YlBhZ2VDb25maWd1cmF0aW9uOwogc3RydWN0IFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM7
CiAgICAgCi10eXBlZGVmIEdlbmVyaWNDYWxsYmFjazxXS0RpY3Rpb25hcnlSZWY+IERpY3Rpb25h
cnlDYWxsYmFjazsKK3R5cGVkZWYgR2VuZXJpY0NhbGxiYWNrPEltbXV0YWJsZURpY3Rpb25hcnkq
PiBEaWN0aW9uYXJ5Q2FsbGJhY2s7CiAKICNpZiBFTkFCTEUoTkVUV09SS19JTkZPKQogY2xhc3Mg
V2ViTmV0d29ya0luZm9NYW5hZ2VyUHJveHk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViQ29va2llTWFuYWdlclByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5oCShyZXZpc2lvbiAxNjQzNTUpCisrKyBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ4LDggKzQ4LDggQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBXZWJDb250
ZXh0OwogY2xhc3MgV2ViUHJvY2Vzc1Byb3h5OwogCi10eXBlZGVmIEdlbmVyaWNDYWxsYmFjazxX
S0FycmF5UmVmPiBBcnJheUNhbGxiYWNrOwotdHlwZWRlZiBHZW5lcmljQ2FsbGJhY2s8V0tIVFRQ
Q29va2llQWNjZXB0UG9saWN5LCBIVFRQQ29va2llQWNjZXB0UG9saWN5PiBIVFRQQ29va2llQWNj
ZXB0UG9saWN5Q2FsbGJhY2s7Cit0eXBlZGVmIEdlbmVyaWNDYWxsYmFjazxBUEk6OkFycmF5Kj4g
QXJyYXlDYWxsYmFjazsKK3R5cGVkZWYgR2VuZXJpY0NhbGxiYWNrPEhUVFBDb29raWVBY2NlcHRQ
b2xpY3k+IEhUVFBDb29raWVBY2NlcHRQb2xpY3lDYWxsYmFjazsKIAogY2xhc3MgV2ViQ29va2ll
TWFuYWdlclByb3h5IDogcHVibGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6
Q29va2llTWFuYWdlcj4sIHB1YmxpYyBXZWJDb250ZXh0U3VwcGxlbWVudCwgcHJpdmF0ZSBJUEM6
Ok1lc3NhZ2VSZWNlaXZlciB7CiBwdWJsaWM6CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViRGF0YWJhc2VNYW5hZ2VyUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViRGF0YWJhc2VNYW5hZ2VyUHJveHkuaAkocmV2aXNpb24gMTY0MzU1KQor
KysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkRhdGFiYXNlTWFuYWdlclByb3h5LmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgY2xhc3MgV2ViQ29udGV4dDsKIGNsYXNzIFdl
YlByb2Nlc3NQcm94eTsKIGNsYXNzIFdlYlNlY3VyaXR5T3JpZ2luOwogCi10eXBlZGVmIEdlbmVy
aWNDYWxsYmFjazxXS0FycmF5UmVmPiBBcnJheUNhbGxiYWNrOwordHlwZWRlZiBHZW5lcmljQ2Fs
bGJhY2s8QVBJOjpBcnJheSo+IEFycmF5Q2FsbGJhY2s7CiAKIGNsYXNzIFdlYkRhdGFiYXNlTWFu
YWdlclByb3h5IDogcHVibGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6RGF0
YWJhc2VNYW5hZ2VyPiwgcHVibGljIFdlYkNvbnRleHRTdXBwbGVtZW50LCBwcml2YXRlIElQQzo6
TWVzc2FnZVJlY2VpdmVyIHsKIHB1YmxpYzoKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJGcmFtZVByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYkZyYW1lUHJveHkuaAkocmV2aXNpb24gMTY0MzU1KQorKysgU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYkZyYW1lUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBj
bGFzcyBXZWJGb3JtU3VibWlzc2lvbkxpc3RlbmVyUHJveHk7CiBjbGFzcyBXZWJGcmFtZVBvbGlj
eUxpc3RlbmVyUHJveHk7CiBjbGFzcyBXZWJQYWdlUHJveHk7CiAKLXR5cGVkZWYgR2VuZXJpY0Nh
bGxiYWNrPFdLRGF0YVJlZj4gRGF0YUNhbGxiYWNrOwordHlwZWRlZiBHZW5lcmljQ2FsbGJhY2s8
QVBJOjpEYXRhKj4gRGF0YUNhbGxiYWNrOwogCiBjbGFzcyBXZWJGcmFtZVByb3h5IDogcHVibGlj
IEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6RnJhbWU+IHsKIHB1YmxpYzoKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYktleVZhbHVlU3RvcmFn
ZU1hbmFnZXIuaAkocmV2aXNpb24gMTY0MzU1KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYktleVZhbHVlU3RvcmFnZU1hbmFnZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYs
NyBAQAogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotdHlwZWRlZiBHZW5lcmljQ2FsbGJhY2s8V0tB
cnJheVJlZj4gQXJyYXlDYWxsYmFjazsKK3R5cGVkZWYgR2VuZXJpY0NhbGxiYWNrPEFQSTo6QXJy
YXkqPiBBcnJheUNhbGxiYWNrOwogCiBjbGFzcyBXZWJLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyIDog
cHVibGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6S2V5VmFsdWVTdG9yYWdl
TWFuYWdlcj4sIHB1YmxpYyBXZWJDb250ZXh0U3VwcGxlbWVudCB7CiBwdWJsaWM6CkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViTWVkaWFDYWNoZU1hbmFnZXJQcm94eS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJNZWRpYUNhY2hlTWFuYWdlclBy
b3h5LmgJKHJldmlzaW9uIDE2NDM1NSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJN
ZWRpYUNhY2hlTWFuYWdlclByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAg
bmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBXZWJDb250ZXh0OwogY2xhc3MgV2ViUHJvY2Vzc1By
b3h5OwogCi10eXBlZGVmIEdlbmVyaWNDYWxsYmFjazxXS0FycmF5UmVmPiBBcnJheUNhbGxiYWNr
OwordHlwZWRlZiBHZW5lcmljQ2FsbGJhY2s8QVBJOjpBcnJheSo+IEFycmF5Q2FsbGJhY2s7CiAK
IGNsYXNzIFdlYk1lZGlhQ2FjaGVNYW5hZ2VyUHJveHkgOiBwdWJsaWMgQVBJOjpPYmplY3RJbXBs
PEFQSTo6T2JqZWN0OjpUeXBlOjpNZWRpYUNhY2hlTWFuYWdlcj4sIHB1YmxpYyBXZWJDb250ZXh0
U3VwcGxlbWVudCwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CiBwdWJsaWM6CkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViT3JpZ2luRGF0YU1hbmFnZXJQcm94eS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJPcmlnaW5EYXRhTWFuYWdl
clByb3h5LmgJKHJldmlzaW9uIDE2NDM1NSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJPcmlnaW5EYXRhTWFuYWdlclByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcg
QEAgbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBXZWJTZWN1cml0eU9yaWdpbjsKIHN0cnVjdCBT
ZWN1cml0eU9yaWdpbkRhdGE7CiAKLXR5cGVkZWYgR2VuZXJpY0NhbGxiYWNrPFdLQXJyYXlSZWY+
IEFycmF5Q2FsbGJhY2s7Cit0eXBlZGVmIEdlbmVyaWNDYWxsYmFjazxBUEk6OkFycmF5Kj4gQXJy
YXlDYWxsYmFjazsKIAogY2xhc3MgV2ViT3JpZ2luRGF0YU1hbmFnZXJQcm94eSA6IHB1YmxpYyBB
UEk6Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6OlR5cGU6Ok9yaWdpbkRhdGFNYW5hZ2VyPiwgcHVi
bGljIFdlYkNvbnRleHRTdXBwbGVtZW50LCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsK
IHB1YmxpYzoKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHJl
dmlzaW9uIDE2NDM1NSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
aAkod29ya2luZyBjb3B5KQpAQCAtMTY2LDExICsxNjYsMTEgQEAgc3RydWN0IFdlYlBvcHVwSXRl
bTsKIGNsYXNzIFdlYlZpYnJhdGlvblByb3h5OwogI2VuZGlmCiAKLXR5cGVkZWYgR2VuZXJpY0Nh
bGxiYWNrPFdLU3RyaW5nUmVmLCBTdHJpbmdJbXBsKj4gU3RyaW5nQ2FsbGJhY2s7Ci10eXBlZGVm
IEdlbmVyaWNDYWxsYmFjazxXS1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZVJlZiwgV2ViU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlKj4gU2NyaXB0VmFsdWVDYWxsYmFjazsKK3R5cGVkZWYgR2VuZXJpY0NhbGxi
YWNrPFN0cmluZ0ltcGwqPiBTdHJpbmdDYWxsYmFjazsKK3R5cGVkZWYgR2VuZXJpY0NhbGxiYWNr
PFdlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSo+IFNjcmlwdFZhbHVlQ2FsbGJhY2s7CiAKICNpZiBQ
TEFURk9STShHVEspCi10eXBlZGVmIEdlbmVyaWNDYWxsYmFjazxXS0Vycm9yUmVmPiBQcmludEZp
bmlzaGVkQ2FsbGJhY2s7Cit0eXBlZGVmIEdlbmVyaWNDYWxsYmFjazxBUEk6OkVycm9yKj4gUHJp
bnRGaW5pc2hlZENhbGxiYWNrOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQpA
QCAtMTg3LDExICsxODcsMTEgQEAgc3RydWN0IFF1ZXVlZFRvdWNoRXZlbnRzIHsKIC8vIEZJWE1F
OiBNYWtlIGEgdmVyc2lvbiBvZiBDYWxsYmFja0Jhc2Ugd2l0aCB0aHJlZSBhcmd1bWVudHMsIGFu
ZCBkZWZpbmUgVmFsaWRhdGVDb21tYW5kQ2FsbGJhY2sgYXMgYSBzcGVjaWFsaXphdGlvbi4KIGNs
YXNzIFZhbGlkYXRlQ29tbWFuZENhbGxiYWNrIDogcHVibGljIENhbGxiYWNrQmFzZSB7CiBwdWJs
aWM6Ci0gICAgdHlwZWRlZiB2b2lkICgqQ2FsbGJhY2tGdW5jdGlvbikoV0tTdHJpbmdSZWYsIGJv
b2wsIGludDMyX3QsIFdLRXJyb3JSZWYsIHZvaWQqKTsKKyAgICB0eXBlZGVmIHN0ZDo6ZnVuY3Rp
b248dm9pZChib29sLCBTdHJpbmdJbXBsKiwgYm9vbCwgaW50MzJfdCk+IENhbGxiYWNrRnVuY3Rp
b247CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxWYWxpZGF0ZUNvbW1hbmRDYWxsYmFjaz4gY3Jl
YXRlKHZvaWQqIGNvbnRleHQsIENhbGxiYWNrRnVuY3Rpb24gY2FsbGJhY2spCisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8VmFsaWRhdGVDb21tYW5kQ2FsbGJhY2s+IGNyZWF0ZShDYWxsYmFja0Z1bmN0
aW9uIGNhbGxiYWNrKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBWYWxpZGF0
ZUNvbW1hbmRDYWxsYmFjayhjb250ZXh0LCBjYWxsYmFjaykpOworICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFZhbGlkYXRlQ29tbWFuZENhbGxiYWNrKGNhbGxiYWNrKSk7CiAgICAgfQogCiAg
ICAgdmlydHVhbCB+VmFsaWRhdGVDb21tYW5kQ2FsbGJhY2soKQpAQCAtMjAzLDcgKzIwMyw3IEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2NhbGxiYWNrKTsKIAotICAgICAgICBt
X2NhbGxiYWNrKHRvQVBJKHJldHVyblZhbHVlMSksIHJldHVyblZhbHVlMiwgcmV0dXJuVmFsdWUz
LCAwLCBjb250ZXh0KCkpOworICAgICAgICBtX2NhbGxiYWNrKGZhbHNlLCByZXR1cm5WYWx1ZTEs
IHJldHVyblZhbHVlMiwgcmV0dXJuVmFsdWUzKTsKIAogICAgICAgICBtX2NhbGxiYWNrID0gMDsK
ICAgICB9CkBAIC0yMTIsMTcgKzIxMiwxNSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBBU1NF
UlQobV9jYWxsYmFjayk7CiAKLSAgICAgICAgUmVmUHRyPEFQSTo6RXJyb3I+IGVycm9yID0gQVBJ
OjpFcnJvcjo6Y3JlYXRlKCk7Ci0gICAgICAgIG1fY2FsbGJhY2soMCwgMCwgMCwgdG9BUEkoZXJy
b3IuZ2V0KCkpLCBjb250ZXh0KCkpOworICAgICAgICBtX2NhbGxiYWNrKHRydWUsIDAsIDAsIDAp
OwogICAgICAgICAKICAgICAgICAgbV9jYWxsYmFjayA9IDA7CiAgICAgfQogCiBwcml2YXRlOgog
Ci0gICAgVmFsaWRhdGVDb21tYW5kQ2FsbGJhY2sodm9pZCogY29udGV4dCwgQ2FsbGJhY2tGdW5j
dGlvbiBjYWxsYmFjaykKLSAgICAgICAgOiBDYWxsYmFja0Jhc2UoY29udGV4dCkKLSAgICAgICAg
LCBtX2NhbGxiYWNrKGNhbGxiYWNrKQorICAgIFZhbGlkYXRlQ29tbWFuZENhbGxiYWNrKENhbGxi
YWNrRnVuY3Rpb24gY2FsbGJhY2spCisgICAgICAgIDogbV9jYWxsYmFjayhjYWxsYmFjaykKICAg
ICB7CiAgICAgfQogCkBAIC0yMzIsMTEgKzIzMCwxMSBAQCBwcml2YXRlOgogI2lmIFBMQVRGT1JN
KElPUykKIGNsYXNzIEdlc3R1cmVDYWxsYmFjayA6IHB1YmxpYyBDYWxsYmFja0Jhc2UgewogcHVi
bGljOgotICAgIHR5cGVkZWYgdm9pZCAoKkNhbGxiYWNrRnVuY3Rpb24pKGNvbnN0IFdlYkNvcmU6
OkludFBvaW50JiwgdWludDMyX3QsIHVpbnQzMl90LCB1aW50MzJfdCwgV0tFcnJvclJlZiwgdm9p
ZCopOworICAgIHR5cGVkZWYgc3RkOjpmdW5jdGlvbjx2b2lkKGJvb2wsIGNvbnN0IFdlYkNvcmU6
OkludFBvaW50JiwgdWludDMyX3QsIHVpbnQzMl90LCB1aW50MzJfdCk+IENhbGxiYWNrRnVuY3Rp
b247CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxHZXN0dXJlQ2FsbGJhY2s+IGNyZWF0ZSh2b2lk
KiBjb250ZXh0LCBDYWxsYmFja0Z1bmN0aW9uIGNhbGxiYWNrKQorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEdlc3R1cmVDYWxsYmFjaz4gY3JlYXRlKENhbGxiYWNrRnVuY3Rpb24gY2FsbGJhY2spCiAg
ICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEdlc3R1cmVDYWxsYmFjayhjb250ZXh0
LCBjYWxsYmFjaykpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEdlc3R1cmVDYWxsYmFj
ayhjYWxsYmFjaykpOwogICAgIH0KIAogICAgIHZpcnR1YWwgfkdlc3R1cmVDYWxsYmFjaygpCkBA
IC0yNDgsNyArMjQ2LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgQVNTRVJUKG1fY2FsbGJh
Y2spOwogCi0gICAgICAgIG1fY2FsbGJhY2socmV0dXJuVmFsdWUxLCByZXR1cm5WYWx1ZTIsIHJl
dHVyblZhbHVlMywgcmV0dXJuVmFsdWU0LCAwLCBjb250ZXh0KCkpOworICAgICAgICBtX2NhbGxi
YWNrKGZhbHNlLCByZXR1cm5WYWx1ZTEsIHJldHVyblZhbHVlMiwgcmV0dXJuVmFsdWUzLCByZXR1
cm5WYWx1ZTQpOwogCiAgICAgICAgIG1fY2FsbGJhY2sgPSAwOwogICAgIH0KQEAgLTI1NywxNyAr
MjU1LDE1IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2NhbGxiYWNrKTsKIAot
ICAgICAgICBSZWZQdHI8QVBJOjpFcnJvcj4gZXJyb3IgPSBBUEk6OkVycm9yOjpjcmVhdGUoKTsK
LSAgICAgICAgbV9jYWxsYmFjayhXZWJDb3JlOjpJbnRQb2ludCgpLCAwLCAwLCAwLCB0b0FQSShl
cnJvci5nZXQoKSksIGNvbnRleHQoKSk7CisgICAgICAgIG1fY2FsbGJhY2sodHJ1ZSwgV2ViQ29y
ZTo6SW50UG9pbnQoKSwgMCwgMCwgMCk7CiAKICAgICAgICAgbV9jYWxsYmFjayA9IDA7CiAgICAg
fQogCiBwcml2YXRlOgogCi0gICAgR2VzdHVyZUNhbGxiYWNrKHZvaWQqIGNvbnRleHQsIENhbGxi
YWNrRnVuY3Rpb24gY2FsbGJhY2spCi0gICAgICAgIDogQ2FsbGJhY2tCYXNlKGNvbnRleHQpCi0g
ICAgICAgICwgbV9jYWxsYmFjayhjYWxsYmFjaykKKyAgICBHZXN0dXJlQ2FsbGJhY2soQ2FsbGJh
Y2tGdW5jdGlvbiBjYWxsYmFjaykKKyAgICAgICAgOiBtX2NhbGxiYWNrKGNhbGxiYWNrKQogICAg
IHsKICAgICAgICAgQVNTRVJUKG1fY2FsbGJhY2spOwogICAgIH0KQEAgLTI3NywxMSArMjczLDEx
IEBAIHByaXZhdGU6CiAKIGNsYXNzIFRvdWNoZXNDYWxsYmFjayA6IHB1YmxpYyBDYWxsYmFja0Jh
c2UgewogcHVibGljOgotICAgIHR5cGVkZWYgdm9pZCAoKkNhbGxiYWNrRnVuY3Rpb24pKGNvbnN0
IFdlYkNvcmU6OkludFBvaW50JiwgdWludDMyX3QsIFdLRXJyb3JSZWYsIHZvaWQqKTsKKyAgICB0
eXBlZGVmIHN0ZDo6ZnVuY3Rpb248dm9pZChib29sLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYs
IHVpbnQzMl90KT4gQ2FsbGJhY2tGdW5jdGlvbjsKIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRv
dWNoZXNDYWxsYmFjaz4gY3JlYXRlKHZvaWQqIGNvbnRleHQsIENhbGxiYWNrRnVuY3Rpb24gY2Fs
bGJhY2spCisgICAgc3RhdGljIFBhc3NSZWZQdHI8VG91Y2hlc0NhbGxiYWNrPiBjcmVhdGUoQ2Fs
bGJhY2tGdW5jdGlvbiBjYWxsYmFjaykKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgVG91Y2hlc0NhbGxiYWNrKGNvbnRleHQsIGNhbGxiYWNrKSk7CisgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgVG91Y2hlc0NhbGxiYWNrKGNhbGxiYWNrKSk7CiAgICAgfQogCiAgICAgdmly
dHVhbCB+VG91Y2hlc0NhbGxiYWNrKCkKQEAgLTI5Myw3ICsyODksNyBAQCBwdWJsaWM6CiAgICAg
ewogICAgICAgICBBU1NFUlQobV9jYWxsYmFjayk7CiAKLSAgICAgICAgbV9jYWxsYmFjayhyZXR1
cm5WYWx1ZTEsIHJldHVyblZhbHVlMiwgMCwgY29udGV4dCgpKTsKKyAgICAgICAgbV9jYWxsYmFj
ayh0cnVlLCByZXR1cm5WYWx1ZTEsIHJldHVyblZhbHVlMik7CiAKICAgICAgICAgbV9jYWxsYmFj
ayA9IDA7CiAgICAgfQpAQCAtMzAzLDE2ICsyOTksMTUgQEAgcHVibGljOgogICAgICAgICBBU1NF
UlQobV9jYWxsYmFjayk7CiAKICAgICAgICAgUmVmUHRyPEFQSTo6RXJyb3I+IGVycm9yID0gQVBJ
OjpFcnJvcjo6Y3JlYXRlKCk7Ci0gICAgICAgIG1fY2FsbGJhY2soV2ViQ29yZTo6SW50UG9pbnQo
KSwgMCwgdG9BUEkoZXJyb3IuZ2V0KCkpLCBjb250ZXh0KCkpOworICAgICAgICBtX2NhbGxiYWNr
KGZhbHNlLCBXZWJDb3JlOjpJbnRQb2ludCgpLCAwKTsKICAgICAgICAgCiAgICAgICAgIG1fY2Fs
bGJhY2sgPSAwOwogICAgIH0KICAgICAKIHByaXZhdGU6CiAgICAgCi0gICAgVG91Y2hlc0NhbGxi
YWNrKHZvaWQqIGNvbnRleHQsIENhbGxiYWNrRnVuY3Rpb24gY2FsbGJhY2spCi0gICAgICAgIDog
Q2FsbGJhY2tCYXNlKGNvbnRleHQpCi0gICAgICAgICwgbV9jYWxsYmFjayhjYWxsYmFjaykKKyAg
ICBUb3VjaGVzQ2FsbGJhY2soQ2FsbGJhY2tGdW5jdGlvbiBjYWxsYmFjaykKKyAgICAgICAgOiBt
X2NhbGxiYWNrKGNhbGxiYWNrKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fY2FsbGJhY2spOwog
ICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUNhY2hlTWFu
YWdlclByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJl
c291cmNlQ2FjaGVNYW5hZ2VyUHJveHkuaAkocmV2aXNpb24gMTY0MzU1KQorKysgU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlQ2FjaGVNYW5hZ2VyUHJveHkuaAkod29ya2luZyBj
b3B5KQpAQCAtNDIsNyArNDIsNyBAQCBjbGFzcyBXZWJDb250ZXh0OwogY2xhc3MgV2ViUHJvY2Vz
c1Byb3h5OwogY2xhc3MgV2ViU2VjdXJpdHlPcmlnaW47CiAKLXR5cGVkZWYgR2VuZXJpY0NhbGxi
YWNrPFdLQXJyYXlSZWY+IEFycmF5Q2FsbGJhY2s7Cit0eXBlZGVmIEdlbmVyaWNDYWxsYmFjazxB
UEk6OkFycmF5Kj4gQXJyYXlDYWxsYmFjazsKIAogY2xhc3MgV2ViUmVzb3VyY2VDYWNoZU1hbmFn
ZXJQcm94eSA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6OlR5cGU6OkNhY2hl
TWFuYWdlcj4sIHB1YmxpYyBXZWJDb250ZXh0U3VwcGxlbWVudCwgcHJpdmF0ZSBJUEM6Ok1lc3Nh
Z2VSZWNlaXZlciB7CiBwdWJsaWM6CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0MvV0tBcHBsaWNhdGlvbkNhY2hlTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQXBwbGljYXRpb25DYWNoZU1hbmFnZXIuY3BwCShyZXZp
c2lvbiAxNjQzNTUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tBcHBsaWNh
dGlvbkNhY2hlTWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDggQEAKIAog
dXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAordHlwZWRlZiBHZW5lcmljQVBJQ2FsbGJhY2s8V0tB
cnJheVJlZj4gQXJyYXlBUElDYWxsYmFjazsKKwogV0tUeXBlSUQgV0tBcHBsaWNhdGlvbkNhY2hl
TWFuYWdlckdldFR5cGVJRCgpCiB7CiAgICAgcmV0dXJuIHRvQVBJKFdlYkFwcGxpY2F0aW9uQ2Fj
aGVNYW5hZ2VyUHJveHk6OkFQSVR5cGUpOwpAQCAtMzgsNyArNDAsNyBAQCBXS1R5cGVJRCBXS0Fw
cGxpY2F0aW9uQ2FjaGVNYW5hZ2VyR2V0VHlwCiAKIHZvaWQgV0tBcHBsaWNhdGlvbkNhY2hlTWFu
YWdlckdldEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5zKFdLQXBwbGljYXRpb25DYWNoZU1hbmFnZXJS
ZWYgYXBwbGljYXRpb25DYWNoZU1hbmFnZXJSZWYsIHZvaWQqIGNvbnRleHQsIFdLQXBwbGljYXRp
b25DYWNoZU1hbmFnZXJHZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luc0Z1bmN0aW9uIGNhbGxiYWNr
KQogewotICAgIHRvSW1wbChhcHBsaWNhdGlvbkNhY2hlTWFuYWdlclJlZiktPmdldEFwcGxpY2F0
aW9uQ2FjaGVPcmlnaW5zKEFycmF5Q2FsbGJhY2s6OmNyZWF0ZShjb250ZXh0LCBjYWxsYmFjaykp
OworICAgIHRvSW1wbChhcHBsaWNhdGlvbkNhY2hlTWFuYWdlclJlZiktPmdldEFwcGxpY2F0aW9u
Q2FjaGVPcmlnaW5zKEFycmF5QVBJQ2FsbGJhY2s6OmNyZWF0ZShjb250ZXh0LCBjYWxsYmFjaykp
OwogfQogCiB2b2lkIFdLQXBwbGljYXRpb25DYWNoZU1hbmFnZXJEZWxldGVFbnRyaWVzRm9yT3Jp
Z2luKFdLQXBwbGljYXRpb25DYWNoZU1hbmFnZXJSZWYgYXBwbGljYXRpb25DYWNoZU1hbmFnZXJS
ZWYsIFdLU2VjdXJpdHlPcmlnaW5SZWYgb3JpZ2luUmVmKQpJbmRleDogU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAJKHJldmlzaW9uIDE2NDM1NSkKKysrIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02Myw2ICs2Myw4IEBAIHRlbXBsYXRlPD4gc3RydWN0IENsaWVudFRyYWl0czxXS0NvbnRl
eHQKIAogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAordHlwZWRlZiBHZW5lcmljQVBJQ2FsbGJh
Y2s8V0tEaWN0aW9uYXJ5UmVmPiBEaWN0aW9uYXJ5QVBJQ2FsbGJhY2s7CisKIFdLVHlwZUlEIFdL
Q29udGV4dEdldFR5cGVJRCgpCiB7CiAgICAgcmV0dXJuIHRvQVBJKFdlYkNvbnRleHQ6OkFQSVR5
cGUpOwpAQCAtNDE2LDEyICs0MTgsMTIgQEAgdm9pZCBXS0NvbnRleHRXYXJtSW5pdGlhbFByb2Nl
c3MoV0tDb250ZQogCiB2b2lkIFdLQ29udGV4dEdldFN0YXRpc3RpY3MoV0tDb250ZXh0UmVmIGNv
bnRleHRSZWYsIHZvaWQqIGNvbnRleHQsIFdLQ29udGV4dEdldFN0YXRpc3RpY3NGdW5jdGlvbiBj
YWxsYmFjaykKIHsKLSAgICB0b0ltcGwoY29udGV4dFJlZiktPmdldFN0YXRpc3RpY3MoMHhGRkZG
RkZGRiwgRGljdGlvbmFyeUNhbGxiYWNrOjpjcmVhdGUoY29udGV4dCwgY2FsbGJhY2spKTsKKyAg
ICB0b0ltcGwoY29udGV4dFJlZiktPmdldFN0YXRpc3RpY3MoMHhGRkZGRkZGRiwgRGljdGlvbmFy
eUFQSUNhbGxiYWNrOjpjcmVhdGUoY29udGV4dCwgY2FsbGJhY2spKTsKIH0KIAogdm9pZCBXS0Nv
bnRleHRHZXRTdGF0aXN0aWNzV2l0aE9wdGlvbnMoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdL
U3RhdGlzdGljc09wdGlvbnMgb3B0aW9uc01hc2ssIHZvaWQqIGNvbnRleHQsIFdLQ29udGV4dEdl
dFN0YXRpc3RpY3NGdW5jdGlvbiBjYWxsYmFjaykKIHsKLSAgICB0b0ltcGwoY29udGV4dFJlZikt
PmdldFN0YXRpc3RpY3Mob3B0aW9uc01hc2ssIERpY3Rpb25hcnlDYWxsYmFjazo6Y3JlYXRlKGNv
bnRleHQsIGNhbGxiYWNrKSk7CisgICAgdG9JbXBsKGNvbnRleHRSZWYpLT5nZXRTdGF0aXN0aWNz
KG9wdGlvbnNNYXNrLCBEaWN0aW9uYXJ5QVBJQ2FsbGJhY2s6OmNyZWF0ZShjb250ZXh0LCBjYWxs
YmFjaykpOwogfQogCiB2b2lkIFdLQ29udGV4dEdhcmJhZ2VDb2xsZWN0SmF2YVNjcmlwdE9iamVj
dHMoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0MvV0tDb29raWVNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0MvV0tDb29raWVNYW5hZ2VyLmNwcAkocmV2aXNpb24gMTY0MzU1KQor
KysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQ29va2llTWFuYWdlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDkgQEAKIAogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsK
IAordHlwZWRlZiBHZW5lcmljQVBJQ2FsbGJhY2s8V0tBcnJheVJlZj4gQXJyYXlBUElDYWxsYmFj
azsKK3R5cGVkZWYgR2VuZXJpY0FQSUNhbGxiYWNrPFdLSFRUUENvb2tpZUFjY2VwdFBvbGljeSwg
SFRUUENvb2tpZUFjY2VwdFBvbGljeT4gSFRUUENvb2tpZUFjY2VwdFBvbGljeUFQSUNhbGxiYWNr
OworCiBXS1R5cGVJRCBXS0Nvb2tpZU1hbmFnZXJHZXRUeXBlSUQoKQogewogICAgIHJldHVybiB0
b0FQSShXZWJDb29raWVNYW5hZ2VyUHJveHk6OkFQSVR5cGUpOwpAQCAtNDMsNyArNDYsNyBAQCB2
b2lkIFdLQ29va2llTWFuYWdlclNldENsaWVudChXS0Nvb2tpZU1hCiAKIHZvaWQgV0tDb29raWVN
YW5hZ2VyR2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoV0tDb29raWVNYW5hZ2VyUmVmIGNvb2tpZU1h
bmFnZXJSZWYsIHZvaWQqIGNvbnRleHQsIFdLQ29va2llTWFuYWdlckdldENvb2tpZUhvc3RuYW1l
c0Z1bmN0aW9uIGNhbGxiYWNrKQogewotICAgIHRvSW1wbChjb29raWVNYW5hZ2VyUmVmKS0+Z2V0
SG9zdG5hbWVzV2l0aENvb2tpZXMoQXJyYXlDYWxsYmFjazo6Y3JlYXRlKGNvbnRleHQsIGNhbGxi
YWNrKSk7CisgICAgdG9JbXBsKGNvb2tpZU1hbmFnZXJSZWYpLT5nZXRIb3N0bmFtZXNXaXRoQ29v
a2llcyhBcnJheUFQSUNhbGxiYWNrOjpjcmVhdGUoY29udGV4dCwgY2FsbGJhY2spKTsKIH0KIAog
dm9pZCBXS0Nvb2tpZU1hbmFnZXJEZWxldGVDb29raWVzRm9ySG9zdG5hbWUoV0tDb29raWVNYW5h
Z2VyUmVmIGNvb2tpZU1hbmFnZXJSZWYsIFdLU3RyaW5nUmVmIGhvc3RuYW1lKQpAQCAtNjgsNyAr
NzEsNyBAQCB2b2lkIFdLQ29va2llTWFuYWdlclNldEhUVFBDb29raWVBY2NlcHRQCiAKIHZvaWQg
V0tDb29raWVNYW5hZ2VyR2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShXS0Nvb2tpZU1hbmFnZXJS
ZWYgY29va2llTWFuYWdlciwgdm9pZCogY29udGV4dCwgV0tDb29raWVNYW5hZ2VyR2V0SFRUUENv
b2tpZUFjY2VwdFBvbGljeUZ1bmN0aW9uIGNhbGxiYWNrKQogewotICAgIHRvSW1wbChjb29raWVN
YW5hZ2VyKS0+Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShIVFRQQ29va2llQWNjZXB0UG9saWN5
Q2FsbGJhY2s6OmNyZWF0ZShjb250ZXh0LCBjYWxsYmFjaykpOworICAgIHRvSW1wbChjb29raWVN
YW5hZ2VyKS0+Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShIVFRQQ29va2llQWNjZXB0UG9saWN5
QVBJQ2FsbGJhY2s6OmNyZWF0ZShjb250ZXh0LCBjYWxsYmFjaykpOwogfQogCiB2b2lkIFdLQ29v
a2llTWFuYWdlclN0YXJ0T2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhXS0Nvb2tpZU1hbmFnZXJSZWYg
Y29va2llTWFuYWdlcikKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0Rh
dGFiYXNlTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9DL1dLRGF0YWJhc2VNYW5hZ2VyLmNwcAkocmV2aXNpb24gMTY0MzU1KQorKysgU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLRGF0YWJhc2VNYW5hZ2VyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzEsNiArMzEsOCBAQAogCiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogCit0eXBl
ZGVmIEdlbmVyaWNBUElDYWxsYmFjazxXS0FycmF5UmVmPiBBcnJheUFQSUNhbGxiYWNrOworCiBX
S1R5cGVJRCBXS0RhdGFiYXNlTWFuYWdlckdldFR5cGVJRCgpCiB7CiAjaWYgRU5BQkxFKFNRTF9E
QVRBQkFTRSkKQEAgLTE1NSw3ICsxNTcsNyBAQCB2b2lkIFdLRGF0YWJhc2VNYW5hZ2VyU2V0Q2xp
ZW50KFdLRGF0YWJhCiB2b2lkIFdLRGF0YWJhc2VNYW5hZ2VyR2V0RGF0YWJhc2VzQnlPcmlnaW4o
V0tEYXRhYmFzZU1hbmFnZXJSZWYgZGF0YWJhc2VNYW5hZ2VyUmVmLCB2b2lkKiBjb250ZXh0LCBX
S0RhdGFiYXNlTWFuYWdlckdldERhdGFiYXNlc0J5T3JpZ2luRnVuY3Rpb24gY2FsbGJhY2spCiB7
CiAjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKLSAgICB0b0ltcGwoZGF0YWJhc2VNYW5hZ2VyUmVm
KS0+Z2V0RGF0YWJhc2VzQnlPcmlnaW4oQXJyYXlDYWxsYmFjazo6Y3JlYXRlKGNvbnRleHQsIGNh
bGxiYWNrKSk7CisgICAgdG9JbXBsKGRhdGFiYXNlTWFuYWdlclJlZiktPmdldERhdGFiYXNlc0J5
T3JpZ2luKEFycmF5QVBJQ2FsbGJhY2s6OmNyZWF0ZShjb250ZXh0LCBjYWxsYmFjaykpOwogI2Vs
c2UKICAgICBVTlVTRURfUEFSQU0oZGF0YWJhc2VNYW5hZ2VyUmVmKTsKICAgICBVTlVTRURfUEFS
QU0oY29udGV4dCk7CkBAIC0xNjYsNyArMTY4LDcgQEAgdm9pZCBXS0RhdGFiYXNlTWFuYWdlckdl
dERhdGFiYXNlc0J5T3JpZwogdm9pZCBXS0RhdGFiYXNlTWFuYWdlckdldERhdGFiYXNlT3JpZ2lu
cyhXS0RhdGFiYXNlTWFuYWdlclJlZiBkYXRhYmFzZU1hbmFnZXJSZWYsIHZvaWQqIGNvbnRleHQs
IFdLRGF0YWJhc2VNYW5hZ2VyR2V0RGF0YWJhc2VPcmlnaW5zRnVuY3Rpb24gY2FsbGJhY2spCiB7
CiAjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKLSAgICB0b0ltcGwoZGF0YWJhc2VNYW5hZ2VyUmVm
KS0+Z2V0RGF0YWJhc2VPcmlnaW5zKEFycmF5Q2FsbGJhY2s6OmNyZWF0ZShjb250ZXh0LCBjYWxs
YmFjaykpOworICAgIHRvSW1wbChkYXRhYmFzZU1hbmFnZXJSZWYpLT5nZXREYXRhYmFzZU9yaWdp
bnMoQXJyYXlBUElDYWxsYmFjazo6Y3JlYXRlKGNvbnRleHQsIGNhbGxiYWNrKSk7CiAjZWxzZQog
ICAgIFVOVVNFRF9QQVJBTShkYXRhYmFzZU1hbmFnZXJSZWYpOwogICAgIFVOVVNFRF9QQVJBTShj
b250ZXh0KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0ZyYW1lLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tGcmFtZS5j
cHAJKHJldmlzaW9uIDE2NDM1NSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9X
S0ZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsOCBAQAogCiB1c2luZyBuYW1l
c3BhY2UgV2ViS2l0OwogCit0eXBlZGVmIEdlbmVyaWNBUElDYWxsYmFjazxXS0RhdGFSZWY+IERh
dGFBUElDYWxsYmFjazsKKwogV0tUeXBlSUQgV0tGcmFtZUdldFR5cGVJRCgpCiB7CiAgICAgcmV0
dXJuIHRvQVBJKFdlYkZyYW1lUHJveHk6OkFQSVR5cGUpOwpAQCAtMTI0LDE3ICsxMjYsMTcgQEAg
Ym9vbCBXS0ZyYW1lSXNGcmFtZVNldChXS0ZyYW1lUmVmIGZyYW1lUgogCiB2b2lkIFdLRnJhbWVH
ZXRNYWluUmVzb3VyY2VEYXRhKFdLRnJhbWVSZWYgZnJhbWVSZWYsIFdLRnJhbWVHZXRSZXNvdXJj
ZURhdGFGdW5jdGlvbiBjYWxsYmFjaywgdm9pZCogY29udGV4dCkKIHsKLSAgICB0b0ltcGwoZnJh
bWVSZWYpLT5nZXRNYWluUmVzb3VyY2VEYXRhKERhdGFDYWxsYmFjazo6Y3JlYXRlKGNvbnRleHQs
IGNhbGxiYWNrKSk7CisgICAgdG9JbXBsKGZyYW1lUmVmKS0+Z2V0TWFpblJlc291cmNlRGF0YShE
YXRhQVBJQ2FsbGJhY2s6OmNyZWF0ZShjb250ZXh0LCBjYWxsYmFjaykpOwogfQogCiB2b2lkIFdL
RnJhbWVHZXRSZXNvdXJjZURhdGEoV0tGcmFtZVJlZiBmcmFtZVJlZiwgV0tVUkxSZWYgcmVzb3Vy
Y2VVUkwsIFdLRnJhbWVHZXRSZXNvdXJjZURhdGFGdW5jdGlvbiBjYWxsYmFjaywgdm9pZCogY29u
dGV4dCkKIHsKLSAgICB0b0ltcGwoZnJhbWVSZWYpLT5nZXRSZXNvdXJjZURhdGEodG9JbXBsKHJl
c291cmNlVVJMKSwgRGF0YUNhbGxiYWNrOjpjcmVhdGUoY29udGV4dCwgY2FsbGJhY2spKTsKKyAg
ICB0b0ltcGwoZnJhbWVSZWYpLT5nZXRSZXNvdXJjZURhdGEodG9JbXBsKHJlc291cmNlVVJMKSwg
RGF0YUFQSUNhbGxiYWNrOjpjcmVhdGUoY29udGV4dCwgY2FsbGJhY2spKTsKIH0KIAogdm9pZCBX
S0ZyYW1lR2V0V2ViQXJjaGl2ZShXS0ZyYW1lUmVmIGZyYW1lUmVmLCBXS0ZyYW1lR2V0V2ViQXJj
aGl2ZUZ1bmN0aW9uIGNhbGxiYWNrLCB2b2lkKiBjb250ZXh0KQogewotICAgIHRvSW1wbChmcmFt
ZVJlZiktPmdldFdlYkFyY2hpdmUoRGF0YUNhbGxiYWNrOjpjcmVhdGUoY29udGV4dCwgY2FsbGJh
Y2spKTsKKyAgICB0b0ltcGwoZnJhbWVSZWYpLT5nZXRXZWJBcmNoaXZlKERhdGFBUElDYWxsYmFj
azo6Y3JlYXRlKGNvbnRleHQsIGNhbGxiYWNrKSk7CiB9CiAKIC8vIE5PVEU6IFRoZXNlIGFyZSBk
ZXByZWNhdGVkIGFuZCBzaG91bGQgYmUgcmVtb3ZlZC4gVGhleSBjdXJyZW50bHkgZG8gbm90aGlu
Zy4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0tleVZhbHVlU3RvcmFn
ZU1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Qy9XS0tleVZhbHVlU3RvcmFnZU1hbmFnZXIuY3BwCShyZXZpc2lvbiAxNjQzNTUpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsOCBAQAogCiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0
OwogCit0eXBlZGVmIEdlbmVyaWNBUElDYWxsYmFjazxXS0FycmF5UmVmPiBBcnJheUFQSUNhbGxi
YWNrOworCiBXS1R5cGVJRCBXS0tleVZhbHVlU3RvcmFnZU1hbmFnZXJHZXRUeXBlSUQoKQogewog
ICAgIHJldHVybiB0b0FQSShXZWJLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyOjpBUElUeXBlKTsKQEAg
LTU2LDEyICs1OCwxMiBAQCBXS1N0cmluZ1JlZiBXS0tleVZhbHVlU3RvcmFnZU1hbmFnZXJHZXRN
CiAKIHZvaWQgV0tLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyR2V0S2V5VmFsdWVTdG9yYWdlT3JpZ2lu
cyhXS0tleVZhbHVlU3RvcmFnZU1hbmFnZXJSZWYga2V5VmFsdWVTdG9yYWdlTWFuYWdlclJlZiwg
dm9pZCogY29udGV4dCwgV0tLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyR2V0S2V5VmFsdWVTdG9yYWdl
T3JpZ2luc0Z1bmN0aW9uIGNhbGxiYWNrKQogewotICAgIHRvSW1wbChrZXlWYWx1ZVN0b3JhZ2VN
YW5hZ2VyUmVmKS0+Z2V0S2V5VmFsdWVTdG9yYWdlT3JpZ2lucyhBcnJheUNhbGxiYWNrOjpjcmVh
dGUoY29udGV4dCwgY2FsbGJhY2spKTsKKyAgICB0b0ltcGwoa2V5VmFsdWVTdG9yYWdlTWFuYWdl
clJlZiktPmdldEtleVZhbHVlU3RvcmFnZU9yaWdpbnMoQXJyYXlBUElDYWxsYmFjazo6Y3JlYXRl
KGNvbnRleHQsIGNhbGxiYWNrKSk7CiB9CiAKIHZvaWQgV0tLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2Vy
R2V0U3RvcmFnZURldGFpbHNCeU9yaWdpbihXS0tleVZhbHVlU3RvcmFnZU1hbmFnZXJSZWYga2V5
VmFsdWVTdG9yYWdlTWFuYWdlclJlZiwgdm9pZCogY29udGV4dCwgV0tLZXlWYWx1ZVN0b3JhZ2VN
YW5hZ2VyR2V0U3RvcmFnZURldGFpbHNCeU9yaWdpbkZ1bmN0aW9uIGNhbGxiYWNrKQogewotICAg
IHRvSW1wbChrZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyUmVmKS0+Z2V0U3RvcmFnZURldGFpbHNCeU9y
aWdpbihBcnJheUNhbGxiYWNrOjpjcmVhdGUoY29udGV4dCwgY2FsbGJhY2spKTsKKyAgICB0b0lt
cGwoa2V5VmFsdWVTdG9yYWdlTWFuYWdlclJlZiktPmdldFN0b3JhZ2VEZXRhaWxzQnlPcmlnaW4o
QXJyYXlBUElDYWxsYmFjazo6Y3JlYXRlKGNvbnRleHQsIGNhbGxiYWNrKSk7CiB9CiAKIHZvaWQg
V0tLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyRGVsZXRlRW50cmllc0Zvck9yaWdpbihXS0tleVZhbHVl
U3RvcmFnZU1hbmFnZXJSZWYga2V5VmFsdWVTdG9yYWdlTWFuYWdlclJlZiwgV0tTZWN1cml0eU9y
aWdpblJlZiBvcmlnaW5SZWYpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mv
V0tNZWRpYUNhY2hlTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9DL1dLTWVkaWFDYWNoZU1hbmFnZXIuY3BwCShyZXZpc2lvbiAxNjQzNTUpCisr
KyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tNZWRpYUNhY2hlTWFuYWdlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDggQEAKIAogdXNpbmcgbmFtZXNwYWNlIFdlYktp
dDsKIAordHlwZWRlZiBHZW5lcmljQVBJQ2FsbGJhY2s8V0tBcnJheVJlZj4gQXJyYXlBUElDYWxs
YmFjazsKKwogV0tUeXBlSUQgV0tNZWRpYUNhY2hlTWFuYWdlckdldFR5cGVJRCgpCiB7CiAgICAg
cmV0dXJuIHRvQVBJKFdlYk1lZGlhQ2FjaGVNYW5hZ2VyUHJveHk6OkFQSVR5cGUpOwpAQCAtMzgs
NyArNDAsNyBAQCBXS1R5cGVJRCBXS01lZGlhQ2FjaGVNYW5hZ2VyR2V0VHlwZUlEKCkKIAogdm9p
ZCBXS01lZGlhQ2FjaGVNYW5hZ2VyR2V0SG9zdG5hbWVzV2l0aE1lZGlhQ2FjaGUoV0tNZWRpYUNh
Y2hlTWFuYWdlclJlZiBtZWRpYUNhY2hlTWFuYWdlclJlZiwgdm9pZCogY29udGV4dCwgV0tNZWRp
YUNhY2hlTWFuYWdlckdldEhvc3RuYW1lc1dpdGhNZWRpYUNhY2hlRnVuY3Rpb24gY2FsbGJhY2sp
CiB7Ci0gICAgdG9JbXBsKG1lZGlhQ2FjaGVNYW5hZ2VyUmVmKS0+Z2V0SG9zdG5hbWVzV2l0aE1l
ZGlhQ2FjaGUoQXJyYXlDYWxsYmFjazo6Y3JlYXRlKGNvbnRleHQsIGNhbGxiYWNrKSk7CisgICAg
dG9JbXBsKG1lZGlhQ2FjaGVNYW5hZ2VyUmVmKS0+Z2V0SG9zdG5hbWVzV2l0aE1lZGlhQ2FjaGUo
QXJyYXlBUElDYWxsYmFjazo6Y3JlYXRlKGNvbnRleHQsIGNhbGxiYWNrKSk7CiB9CiAKIHZvaWQg
V0tNZWRpYUNhY2hlTWFuYWdlckNsZWFyQ2FjaGVGb3JIb3N0bmFtZShXS01lZGlhQ2FjaGVNYW5h
Z2VyUmVmIG1lZGlhQ2FjaGVNYW5hZ2VyUmVmLCBXS1N0cmluZ1JlZiBob3N0bmFtZSkKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS09yaWdpbkRhdGFNYW5hZ2VyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tPcmlnaW5EYXRh
TWFuYWdlci5jcHAJKHJldmlzaW9uIDE2NDM1NSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQy9XS09yaWdpbkRhdGFNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiAr
MzEsOCBAQAogCiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogCit0eXBlZGVmIEdlbmVyaWNBUElD
YWxsYmFjazxXS0FycmF5UmVmPiBBcnJheUFQSUNhbGxiYWNrOworCiBXS1R5cGVJRCBXS09yaWdp
bkRhdGFNYW5hZ2VyR2V0VHlwZUlEKCkKIHsKICAgICByZXR1cm4gdG9BUEkoV2ViT3JpZ2luRGF0
YU1hbmFnZXJQcm94eTo6QVBJVHlwZSk7CkBAIC0zOCw3ICs0MCw3IEBAIFdLVHlwZUlEIFdLT3Jp
Z2luRGF0YU1hbmFnZXJHZXRUeXBlSUQoKQogCiB2b2lkIFdLT3JpZ2luRGF0YU1hbmFnZXJHZXRP
cmlnaW5zKFdLT3JpZ2luRGF0YU1hbmFnZXJSZWYgb3JpZ2luRGF0YU1hbmFnZXJSZWYsIFdLT3Jp
Z2luRGF0YVR5cGVzIHR5cGVzLCB2b2lkKiBjb250ZXh0LCBXS09yaWdpbkRhdGFNYW5hZ2VyR2V0
T3JpZ2luc0Z1bmN0aW9uIGNhbGxiYWNrKQogewotICAgIHRvSW1wbChvcmlnaW5EYXRhTWFuYWdl
clJlZiktPmdldE9yaWdpbnModHlwZXMsIEFycmF5Q2FsbGJhY2s6OmNyZWF0ZShjb250ZXh0LCBj
YWxsYmFjaykpOworICAgIHRvSW1wbChvcmlnaW5EYXRhTWFuYWdlclJlZiktPmdldE9yaWdpbnMo
dHlwZXMsIEFycmF5QVBJQ2FsbGJhY2s6OmNyZWF0ZShjb250ZXh0LCBjYWxsYmFjaykpOwogfQog
CiB2b2lkIFdLT3JpZ2luRGF0YU1hbmFnZXJEZWxldGVFbnRyaWVzRm9yT3JpZ2luKFdLT3JpZ2lu
RGF0YU1hbmFnZXJSZWYgb3JpZ2luRGF0YU1hbmFnZXJSZWYsIFdLT3JpZ2luRGF0YVR5cGVzIHR5
cGVzLCBXS1NlY3VyaXR5T3JpZ2luUmVmIG9yaWdpblJlZikKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwCShyZXZpc2lvbiAxNjQzNTUpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQs
NiArNzQsMTAgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgQ2xpZW50VHJhaXRzPFdLUGFnZVVJQwogCiB9
CiAKK3R5cGVkZWYgR2VuZXJpY0FQSUNhbGxiYWNrPFdLRGF0YVJlZj4gRGF0YUFQSUNhbGxiYWNr
OwordHlwZWRlZiBHZW5lcmljQVBJQ2FsbGJhY2s8V0tTdHJpbmdSZWYsIFN0cmluZ0ltcGwqPiBT
dHJpbmdBUElDYWxsYmFjazsKK3R5cGVkZWYgR2VuZXJpY0FQSUNhbGxiYWNrPFdLU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlUmVmPiBTY3JpcHRWYWx1ZUFQSUNhbGxiYWNrOworCiBXS1R5cGVJRCBXS1Bh
Z2VHZXRUeXBlSUQoKQogewogICAgIHJldHVybiB0b0FQSShXZWJQYWdlUHJveHk6OkFQSVR5cGUp
OwpAQCAtMTQ3Miw3ICsxNDc2LDcgQEAgdm9pZCBXS1BhZ2VTZXRTZXNzaW9uKFdLUGFnZVJlZiBw
YWdlUmVmLAogCiB2b2lkIFdLUGFnZVJ1bkphdmFTY3JpcHRJbk1haW5GcmFtZShXS1BhZ2VSZWYg
cGFnZVJlZiwgV0tTdHJpbmdSZWYgc2NyaXB0UmVmLCB2b2lkKiBjb250ZXh0LCBXS1BhZ2VSdW5K
YXZhU2NyaXB0RnVuY3Rpb24gY2FsbGJhY2spCiB7Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT5ydW5K
YXZhU2NyaXB0SW5NYWluRnJhbWUodG9JbXBsKHNjcmlwdFJlZiktPnN0cmluZygpLCBTY3JpcHRW
YWx1ZUNhbGxiYWNrOjpjcmVhdGUoY29udGV4dCwgY2FsbGJhY2spKTsKKyAgICB0b0ltcGwocGFn
ZVJlZiktPnJ1bkphdmFTY3JpcHRJbk1haW5GcmFtZSh0b0ltcGwoc2NyaXB0UmVmKS0+c3RyaW5n
KCksIFNjcmlwdFZhbHVlQVBJQ2FsbGJhY2s6OmNyZWF0ZShjb250ZXh0LCBjYWxsYmFjaykpOwog
fQogCiAjaWZkZWYgX19CTE9DS1NfXwpAQCAtMTQ5MSwyOCArMTQ5NSwyOCBAQCB2b2lkIFdLUGFn
ZVJ1bkphdmFTY3JpcHRJbk1haW5GcmFtZV9iKFdLCiAKIHZvaWQgV0tQYWdlUmVuZGVyVHJlZUV4
dGVybmFsUmVwcmVzZW50YXRpb24oV0tQYWdlUmVmIHBhZ2VSZWYsIHZvaWQqIGNvbnRleHQsIFdL
UGFnZVJlbmRlclRyZWVFeHRlcm5hbFJlcHJlc2VudGF0aW9uRnVuY3Rpb24gY2FsbGJhY2spCiB7
Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT5nZXRSZW5kZXJUcmVlRXh0ZXJuYWxSZXByZXNlbnRhdGlv
bihTdHJpbmdDYWxsYmFjazo6Y3JlYXRlKGNvbnRleHQsIGNhbGxiYWNrKSk7CisgICAgdG9JbXBs
KHBhZ2VSZWYpLT5nZXRSZW5kZXJUcmVlRXh0ZXJuYWxSZXByZXNlbnRhdGlvbihTdHJpbmdBUElD
YWxsYmFjazo6Y3JlYXRlKGNvbnRleHQsIGNhbGxiYWNrKSk7CiB9CiAKIHZvaWQgV0tQYWdlR2V0
U291cmNlRm9yRnJhbWUoV0tQYWdlUmVmIHBhZ2VSZWYsIFdLRnJhbWVSZWYgZnJhbWVSZWYsIHZv
aWQqIGNvbnRleHQsIFdLUGFnZUdldFNvdXJjZUZvckZyYW1lRnVuY3Rpb24gY2FsbGJhY2spCiB7
Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT5nZXRTb3VyY2VGb3JGcmFtZSh0b0ltcGwoZnJhbWVSZWYp
LCBTdHJpbmdDYWxsYmFjazo6Y3JlYXRlKGNvbnRleHQsIGNhbGxiYWNrKSk7CisgICAgdG9JbXBs
KHBhZ2VSZWYpLT5nZXRTb3VyY2VGb3JGcmFtZSh0b0ltcGwoZnJhbWVSZWYpLCBTdHJpbmdBUElD
YWxsYmFjazo6Y3JlYXRlKGNvbnRleHQsIGNhbGxiYWNrKSk7CiB9CiAKIHZvaWQgV0tQYWdlR2V0
Q29udGVudHNBc1N0cmluZyhXS1BhZ2VSZWYgcGFnZVJlZiwgdm9pZCogY29udGV4dCwgV0tQYWdl
R2V0Q29udGVudHNBc1N0cmluZ0Z1bmN0aW9uIGNhbGxiYWNrKQogewotICAgIHRvSW1wbChwYWdl
UmVmKS0+Z2V0Q29udGVudHNBc1N0cmluZyhTdHJpbmdDYWxsYmFjazo6Y3JlYXRlKGNvbnRleHQs
IGNhbGxiYWNrKSk7CisgICAgdG9JbXBsKHBhZ2VSZWYpLT5nZXRDb250ZW50c0FzU3RyaW5nKFN0
cmluZ0FQSUNhbGxiYWNrOjpjcmVhdGUoY29udGV4dCwgY2FsbGJhY2spKTsKIH0KIAogdm9pZCBX
S1BhZ2VHZXRTZWxlY3Rpb25Bc1dlYkFyY2hpdmVEYXRhKFdLUGFnZVJlZiBwYWdlUmVmLCB2b2lk
KiBjb250ZXh0LCBXS1BhZ2VHZXRTZWxlY3Rpb25Bc1dlYkFyY2hpdmVEYXRhRnVuY3Rpb24gY2Fs
bGJhY2spCiB7Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT5nZXRTZWxlY3Rpb25Bc1dlYkFyY2hpdmVE
YXRhKERhdGFDYWxsYmFjazo6Y3JlYXRlKGNvbnRleHQsIGNhbGxiYWNrKSk7CisgICAgdG9JbXBs
KHBhZ2VSZWYpLT5nZXRTZWxlY3Rpb25Bc1dlYkFyY2hpdmVEYXRhKERhdGFBUElDYWxsYmFjazo6
Y3JlYXRlKGNvbnRleHQsIGNhbGxiYWNrKSk7CiB9CiAKIHZvaWQgV0tQYWdlR2V0Q29udGVudHNB
c01IVE1MRGF0YShXS1BhZ2VSZWYgcGFnZVJlZiwgYm9vbCB1c2VCaW5hcnlFbmNvZGluZywgdm9p
ZCogY29udGV4dCwgV0tQYWdlR2V0Q29udGVudHNBc01IVE1MRGF0YUZ1bmN0aW9uIGNhbGxiYWNr
KQogewogI2lmIEVOQUJMRShNSFRNTCkKLSAgICB0b0ltcGwocGFnZVJlZiktPmdldENvbnRlbnRz
QXNNSFRNTERhdGEoRGF0YUNhbGxiYWNrOjpjcmVhdGUoY29udGV4dCwgY2FsbGJhY2spLCB1c2VC
aW5hcnlFbmNvZGluZyk7CisgICAgdG9JbXBsKHBhZ2VSZWYpLT5nZXRDb250ZW50c0FzTUhUTUxE
YXRhKERhdGFBUElDYWxsYmFjazo6Y3JlYXRlKGNvbnRleHQsIGNhbGxiYWNrKSwgdXNlQmluYXJ5
RW5jb2RpbmcpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0ocGFnZVJlZik7CiAgICAgVU5VU0VE
X1BBUkFNKHVzZUJpbmFyeUVuY29kaW5nKTsKQEAgLTE1MjMsNyArMTUyNyw3IEBAIHZvaWQgV0tQ
YWdlR2V0Q29udGVudHNBc01IVE1MRGF0YShXS1BhZ2UKIAogdm9pZCBXS1BhZ2VGb3JjZVJlcGFp
bnQoV0tQYWdlUmVmIHBhZ2VSZWYsIHZvaWQqIGNvbnRleHQsIFdLUGFnZUZvcmNlUmVwYWludEZ1
bmN0aW9uIGNhbGxiYWNrKQogewotICAgIHRvSW1wbChwYWdlUmVmKS0+Zm9yY2VSZXBhaW50KFZv
aWRDYWxsYmFjazo6Y3JlYXRlKGNvbnRleHQsIGNhbGxiYWNrKSk7CisgICAgdG9JbXBsKHBhZ2VS
ZWYpLT5mb3JjZVJlcGFpbnQoVm9pZEFQSUNhbGxiYWNrOjpjcmVhdGUoY29udGV4dCwgY2FsbGJh
Y2spKTsKIH0KIAogV0tfRVhQT1JUIFdLVVJMUmVmIFdLUGFnZUNvcHlQZW5kaW5nQVBJUmVxdWVz
dFVSTChXS1BhZ2VSZWYgcGFnZVJlZikKQEAgLTE1NTgsNyArMTU2Miw5IEBAIFdLU3RyaW5nUmVm
IFdLUGFnZUNvcHlTdGFuZGFyZFVzZXJBZ2VudFcKIAogdm9pZCBXS1BhZ2VWYWxpZGF0ZUNvbW1h
bmQoV0tQYWdlUmVmIHBhZ2VSZWYsIFdLU3RyaW5nUmVmIGNvbW1hbmQsIHZvaWQqIGNvbnRleHQs
IFdLUGFnZVZhbGlkYXRlQ29tbWFuZENhbGxiYWNrIGNhbGxiYWNrKQogewotICAgIHRvSW1wbChw
YWdlUmVmKS0+dmFsaWRhdGVDb21tYW5kKHRvSW1wbChjb21tYW5kKS0+c3RyaW5nKCksIFZhbGlk
YXRlQ29tbWFuZENhbGxiYWNrOjpjcmVhdGUoY29udGV4dCwgY2FsbGJhY2spKTsgCisgICAgdG9J
bXBsKHBhZ2VSZWYpLT52YWxpZGF0ZUNvbW1hbmQodG9JbXBsKGNvbW1hbmQpLT5zdHJpbmcoKSwg
VmFsaWRhdGVDb21tYW5kQ2FsbGJhY2s6OmNyZWF0ZShbY29udGV4dCwgY2FsbGJhY2tdKGJvb2wg
ZXJyb3IsIFN0cmluZ0ltcGwqIGNvbW1hbmROYW1lLCBib29sIGlzRW5hYmxlZCwgaW50MzJfdCBz
dGF0ZSkgeworICAgICAgICBjYWxsYmFjayh0b0FQSShjb21tYW5kTmFtZSksIGlzRW5hYmxlZCwg
c3RhdGUsIGVycm9yID8gdG9BUEkoQVBJOjpFcnJvcjo6Y3JlYXRlKCkuZ2V0KCkpIDogMCwgY29u
dGV4dCk7CisgICAgfSkpOwogfQogCiB2b2lkIFdLUGFnZUV4ZWN1dGVDb21tYW5kKFdLUGFnZVJl
ZiBwYWdlUmVmLCBXS1N0cmluZ1JlZiBjb21tYW5kKQpAQCAtMTU2NywyNSArMTU3Myw2IEBAIHZv
aWQgV0tQYWdlRXhlY3V0ZUNvbW1hbmQoV0tQYWdlUmVmIHBhZ2UKIH0KIAogI2lmIFBMQVRGT1JN
KENPQ09BKQotc3RydWN0IENvbXB1dGVkUGFnZXNDb250ZXh0IHsKLSAgICBDb21wdXRlZFBhZ2Vz
Q29udGV4dChXS1BhZ2VDb21wdXRlUGFnZXNGb3JQcmludGluZ0Z1bmN0aW9uIGNhbGxiYWNrLCB2
b2lkKiBjb250ZXh0KQotICAgICAgICA6IGNhbGxiYWNrKGNhbGxiYWNrKQotICAgICAgICAsIGNv
bnRleHQoY29udGV4dCkKLSAgICB7Ci0gICAgfQotICAgIFdLUGFnZUNvbXB1dGVQYWdlc0ZvclBy
aW50aW5nRnVuY3Rpb24gY2FsbGJhY2s7Ci0gICAgdm9pZCogY29udGV4dDsKLX07Ci0KLXN0YXRp
YyB2b2lkIGNvbXB1dGVkUGFnZXNDYWxsYmFjayhjb25zdCBWZWN0b3I8V2ViQ29yZTo6SW50UmVj
dD4mIHJlY3RzLCBkb3VibGUgc2NhbGVGYWN0b3IsIFdLRXJyb3JSZWYgZXJyb3IsIHZvaWQqIHVu
dHlwZWRDb250ZXh0KQotewotICAgIE93blB0cjxDb21wdXRlZFBhZ2VzQ29udGV4dD4gY29udGV4
dCA9IGFkb3B0UHRyKHN0YXRpY19jYXN0PENvbXB1dGVkUGFnZXNDb250ZXh0Kj4odW50eXBlZENv
bnRleHQpKTsKLSAgICBWZWN0b3I8V0tSZWN0PiB3a1JlY3RzKHJlY3RzLnNpemUoKSk7Ci0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCByZWN0cy5zaXplKCk7ICsraSkKLSAgICAgICAgd2tSZWN0
c1tpXSA9IHRvQVBJKHJlY3RzW2ldKTsKLSAgICBjb250ZXh0LT5jYWxsYmFjayh3a1JlY3RzLmRh
dGEoKSwgd2tSZWN0cy5zaXplKCksIHNjYWxlRmFjdG9yLCBlcnJvciwgY29udGV4dC0+Y29udGV4
dCk7Ci19Ci0KIHN0YXRpYyBQcmludEluZm8gcHJpbnRJbmZvRnJvbVdLUHJpbnRJbmZvKGNvbnN0
IFdLUHJpbnRJbmZvJiBwcmludEluZm8pCiB7CiAgICAgUHJpbnRJbmZvIHJlc3VsdDsKQEAgLTE1
OTcsNyArMTU4NCwxMiBAQCBzdGF0aWMgUHJpbnRJbmZvIHByaW50SW5mb0Zyb21XS1ByaW50SW5m
CiAKIHZvaWQgV0tQYWdlQ29tcHV0ZVBhZ2VzRm9yUHJpbnRpbmcoV0tQYWdlUmVmIHBhZ2UsIFdL
RnJhbWVSZWYgZnJhbWUsIFdLUHJpbnRJbmZvIHByaW50SW5mbywgV0tQYWdlQ29tcHV0ZVBhZ2Vz
Rm9yUHJpbnRpbmdGdW5jdGlvbiBjYWxsYmFjaywgdm9pZCogY29udGV4dCkKIHsKLSAgICB0b0lt
cGwocGFnZSktPmNvbXB1dGVQYWdlc0ZvclByaW50aW5nKHRvSW1wbChmcmFtZSksIHByaW50SW5m
b0Zyb21XS1ByaW50SW5mbyhwcmludEluZm8pLCBDb21wdXRlZFBhZ2VzQ2FsbGJhY2s6OmNyZWF0
ZShuZXcgQ29tcHV0ZWRQYWdlc0NvbnRleHQoY2FsbGJhY2ssIGNvbnRleHQpLCBjb21wdXRlZFBh
Z2VzQ2FsbGJhY2spKTsKKyAgICB0b0ltcGwocGFnZSktPmNvbXB1dGVQYWdlc0ZvclByaW50aW5n
KHRvSW1wbChmcmFtZSksIHByaW50SW5mb0Zyb21XS1ByaW50SW5mbyhwcmludEluZm8pLCBDb21w
dXRlZFBhZ2VzQ2FsbGJhY2s6OmNyZWF0ZShbY29udGV4dCwgY2FsbGJhY2tdKGJvb2wgZXJyb3Is
IGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpJbnRSZWN0PiYgcmVjdHMsIGRvdWJsZSBzY2FsZUZhY3Rv
cikgeworICAgICAgICBWZWN0b3I8V0tSZWN0PiB3a1JlY3RzKHJlY3RzLnNpemUoKSk7CisgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVjdHMuc2l6ZSgpOyArK2kpCisgICAgICAgICAg
ICB3a1JlY3RzW2ldID0gdG9BUEkocmVjdHNbaV0pOworICAgICAgICBjYWxsYmFjayh3a1JlY3Rz
LmRhdGEoKSwgd2tSZWN0cy5zaXplKCksIHNjYWxlRmFjdG9yLCBlcnJvciA/IHRvQVBJKEFQSTo6
RXJyb3I6OmNyZWF0ZSgpLmdldCgpKSA6IDAsIGNvbnRleHQpOworICAgIH0pKTsKIH0KIAogdm9p
ZCBXS1BhZ2VCZWdpblByaW50aW5nKFdLUGFnZVJlZiBwYWdlLCBXS0ZyYW1lUmVmIGZyYW1lLCBX
S1ByaW50SW5mbyBwcmludEluZm8pCkBAIC0xNjA3LDcgKzE1OTksNyBAQCB2b2lkIFdLUGFnZUJl
Z2luUHJpbnRpbmcoV0tQYWdlUmVmIHBhZ2UsCiAKIHZvaWQgV0tQYWdlRHJhd1BhZ2VzVG9QREYo
V0tQYWdlUmVmIHBhZ2UsIFdLRnJhbWVSZWYgZnJhbWUsIFdLUHJpbnRJbmZvIHByaW50SW5mbywg
dWludDMyX3QgZmlyc3QsIHVpbnQzMl90IGNvdW50LCBXS1BhZ2VEcmF3VG9QREZGdW5jdGlvbiBj
YWxsYmFjaywgdm9pZCogY29udGV4dCkKIHsKLSAgICB0b0ltcGwocGFnZSktPmRyYXdQYWdlc1Rv
UERGKHRvSW1wbChmcmFtZSksIHByaW50SW5mb0Zyb21XS1ByaW50SW5mbyhwcmludEluZm8pLCBm
aXJzdCwgY291bnQsIERhdGFDYWxsYmFjazo6Y3JlYXRlKGNvbnRleHQsIGNhbGxiYWNrKSk7Cisg
ICAgdG9JbXBsKHBhZ2UpLT5kcmF3UGFnZXNUb1BERih0b0ltcGwoZnJhbWUpLCBwcmludEluZm9G
cm9tV0tQcmludEluZm8ocHJpbnRJbmZvKSwgZmlyc3QsIGNvdW50LCBEYXRhQVBJQ2FsbGJhY2s6
OmNyZWF0ZShjb250ZXh0LCBjYWxsYmFjaykpOwogfQogCiB2b2lkIFdLUGFnZUVuZFByaW50aW5n
KFdLUGFnZVJlZiBwYWdlKQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dL
UGx1Z2luU2l0ZURhdGFNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0MvV0tQbHVnaW5TaXRlRGF0YU1hbmFnZXIuY3BwCShyZXZpc2lvbiAxNjQz
NTUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQbHVnaW5TaXRlRGF0YU1h
bmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiwxMCBAQAogCiB1c2luZyBuYW1l
c3BhY2UgV2ViS2l0OwogCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCit0eXBlZGVm
IEdlbmVyaWNBUElDYWxsYmFjazxXS0FycmF5UmVmPiBBcnJheUFQSUNhbGxiYWNrOworI2VuZGlm
CisKIFdLVHlwZUlEIFdLUGx1Z2luU2l0ZURhdGFNYW5hZ2VyR2V0VHlwZUlEKCkKIHsKICNpZiBF
TkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKQEAgLTQ4LDcgKzUyLDcgQEAgV0tUeXBlSUQgV0tQ
bHVnaW5TaXRlRGF0YU1hbmFnZXJHZXRUeXBlSQogdm9pZCBXS1BsdWdpblNpdGVEYXRhTWFuYWdl
ckdldFNpdGVzV2l0aERhdGEoV0tQbHVnaW5TaXRlRGF0YU1hbmFnZXJSZWYgbWFuYWdlclJlZiwg
dm9pZCogY29udGV4dCwgV0tQbHVnaW5TaXRlRGF0YU1hbmFnZXJHZXRTaXRlc1dpdGhEYXRhRnVu
Y3Rpb24gY2FsbGJhY2spCiB7CiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAg
dG9JbXBsKG1hbmFnZXJSZWYpLT5nZXRTaXRlc1dpdGhEYXRhKEFycmF5Q2FsbGJhY2s6OmNyZWF0
ZShjb250ZXh0LCBjYWxsYmFjaykpOworICAgIHRvSW1wbChtYW5hZ2VyUmVmKS0+Z2V0U2l0ZXNX
aXRoRGF0YShBcnJheUFQSUNhbGxiYWNrOjpjcmVhdGUoY29udGV4dCwgY2FsbGJhY2spKTsKICNl
bHNlCiAgICAgVU5VU0VEX1BBUkFNKG1hbmFnZXJSZWYpOwogICAgIFVOVVNFRF9QQVJBTShjb250
ZXh0KTsKQEAgLTcyLDcgKzc2LDcgQEAgc3RhdGljIHVpbnQ2NF90IHRvTlBDbGVhclNpdGVEYXRh
RmxhZ3MoVwogdm9pZCBXS1BsdWdpblNpdGVEYXRhTWFuYWdlckNsZWFyU2l0ZURhdGEoV0tQbHVn
aW5TaXRlRGF0YU1hbmFnZXJSZWYgbWFuYWdlclJlZiwgV0tBcnJheVJlZiBzaXRlc1JlZiwgV0tD
bGVhclNpdGVEYXRhRmxhZ3MgZmxhZ3MsIHVpbnQ2NF90IG1heEFnZUluU2Vjb25kcywgdm9pZCog
Y29udGV4dCwgV0tQbHVnaW5TaXRlRGF0YU1hbmFnZXJDbGVhclNpdGVEYXRhRnVuY3Rpb24gZnVu
Y3Rpb24pCiB7CiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgdG9JbXBsKG1h
bmFnZXJSZWYpLT5jbGVhclNpdGVEYXRhKHRvSW1wbChzaXRlc1JlZiksIHRvTlBDbGVhclNpdGVE
YXRhRmxhZ3MoZmxhZ3MpLCBtYXhBZ2VJblNlY29uZHMsIFZvaWRDYWxsYmFjazo6Y3JlYXRlKGNv
bnRleHQsIGZ1bmN0aW9uKSk7CisgICAgdG9JbXBsKG1hbmFnZXJSZWYpLT5jbGVhclNpdGVEYXRh
KHRvSW1wbChzaXRlc1JlZiksIHRvTlBDbGVhclNpdGVEYXRhRmxhZ3MoZmxhZ3MpLCBtYXhBZ2VJ
blNlY29uZHMsIFZvaWRBUElDYWxsYmFjazo6Y3JlYXRlKGNvbnRleHQsIGZ1bmN0aW9uKSk7CiAj
ZWxzZQogICAgIFVOVVNFRF9QQVJBTShtYW5hZ2VyUmVmKTsKICAgICBVTlVTRURfUEFSQU0oc2l0
ZXNSZWYpOwpAQCAtODYsNyArOTAsNyBAQCB2b2lkIFdLUGx1Z2luU2l0ZURhdGFNYW5hZ2VyQ2xl
YXJTaXRlRGF0CiB2b2lkIFdLUGx1Z2luU2l0ZURhdGFNYW5hZ2VyQ2xlYXJBbGxTaXRlRGF0YShX
S1BsdWdpblNpdGVEYXRhTWFuYWdlclJlZiBtYW5hZ2VyUmVmLCB2b2lkKiBjb250ZXh0LCBXS1Bs
dWdpblNpdGVEYXRhTWFuYWdlckNsZWFyU2l0ZURhdGFGdW5jdGlvbiBmdW5jdGlvbikKIHsKICNp
ZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICB0b0ltcGwobWFuYWdlclJlZiktPmNs
ZWFyU2l0ZURhdGEoMCwgTlBfQ0xFQVJfQUxMLCBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90
Pjo6bWF4KCksIFZvaWRDYWxsYmFjazo6Y3JlYXRlKGNvbnRleHQsIGZ1bmN0aW9uKSk7CisgICAg
dG9JbXBsKG1hbmFnZXJSZWYpLT5jbGVhclNpdGVEYXRhKDAsIE5QX0NMRUFSX0FMTCwgc3RkOjpu
dW1lcmljX2xpbWl0czx1aW50NjRfdD46Om1heCgpLCBWb2lkQVBJQ2FsbGJhY2s6OmNyZWF0ZShj
b250ZXh0LCBmdW5jdGlvbikpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0obWFuYWdlclJlZik7
CiAgICAgVU5VU0VEX1BBUkFNKGNvbnRleHQpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9DL1dLUmVzb3VyY2VDYWNoZU1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1Jlc291cmNlQ2FjaGVNYW5hZ2VyLmNwcAkocmV2
aXNpb24gMTY0MzU1KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUmVzb3Vy
Y2VDYWNoZU1hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw4IEBACiAKIHVz
aW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKK3R5cGVkZWYgR2VuZXJpY0FQSUNhbGxiYWNrPFdLQXJy
YXlSZWY+IEFycmF5QVBJQ2FsbGJhY2s7CisKIFdLVHlwZUlEIFdLUmVzb3VyY2VDYWNoZU1hbmFn
ZXJHZXRUeXBlSUQoKQogewogICAgIHJldHVybiB0b0FQSShXZWJSZXNvdXJjZUNhY2hlTWFuYWdl
clByb3h5OjpBUElUeXBlKTsKQEAgLTM4LDcgKzQwLDcgQEAgV0tUeXBlSUQgV0tSZXNvdXJjZUNh
Y2hlTWFuYWdlckdldFR5cGVJRAogCiB2b2lkIFdLUmVzb3VyY2VDYWNoZU1hbmFnZXJHZXRDYWNo
ZU9yaWdpbnMoV0tSZXNvdXJjZUNhY2hlTWFuYWdlclJlZiBjYWNoZU1hbmFnZXJSZWYsIHZvaWQq
IGNvbnRleHQsIFdLUmVzb3VyY2VDYWNoZU1hbmFnZXJHZXRDYWNoZU9yaWdpbnNGdW5jdGlvbiBj
YWxsYmFjaykKIHsKLSAgICB0b0ltcGwoY2FjaGVNYW5hZ2VyUmVmKS0+Z2V0Q2FjaGVPcmlnaW5z
KEFycmF5Q2FsbGJhY2s6OmNyZWF0ZShjb250ZXh0LCBjYWxsYmFjaykpOworICAgIHRvSW1wbChj
YWNoZU1hbmFnZXJSZWYpLT5nZXRDYWNoZU9yaWdpbnMoQXJyYXlBUElDYWxsYmFjazo6Y3JlYXRl
KGNvbnRleHQsIGNhbGxiYWNrKSk7CiB9CiAKIHZvaWQgV0tSZXNvdXJjZUNhY2hlTWFuYWdlckNs
ZWFyQ2FjaGVGb3JPcmlnaW4oV0tSZXNvdXJjZUNhY2hlTWFuYWdlclJlZiBjYWNoZU1hbmFnZXJS
ZWYsIFdLU2VjdXJpdHlPcmlnaW5SZWYgb3JpZ2luUmVmLCBXS1Jlc291cmNlQ2FjaGVzVG9DbGVh
ciBjYWNoZXNUb0NsZWFyKQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0Q29va2llTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29va2llTWFuYWdlci5jcHAJKHJldmlzaW9uIDE2NDM1NSkK
KysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENvb2tpZU1hbmFnZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw5IEBACiAKIHVzaW5nIG5hbWVzcGFjZSBX
ZWJLaXQ7CiAKK3R5cGVkZWYgR2VuZXJpY0FQSUNhbGxiYWNrPFdLQXJyYXlSZWY+IEFycmF5QVBJ
Q2FsbGJhY2s7Cit0eXBlZGVmIEdlbmVyaWNBUElDYWxsYmFjazxXS0hUVFBDb29raWVBY2NlcHRQ
b2xpY3ksIEhUVFBDb29raWVBY2NlcHRQb2xpY3k+IEhUVFBDb29raWVBY2NlcHRQb2xpY3lBUElD
YWxsYmFjazsKKwogLyoqCiAgKiBTRUNUSU9OOiBXZWJLaXRDb29raWVNYW5hZ2VyCiAgKiBAU2hv
cnRfZGVzY3JpcHRpb246IERlZmluZXMgaG93IHRvIGhhbmRsZSBjb29raWVzIGluIGEgI1dlYktp
dFdlYkNvbnRleHQKQEAgLTE3NSw3ICsxNzgsNyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdl
cl9nZXRfYWNjZXB0X3BvCiAgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfQ09PS0lFX01B
TkFHRVIobWFuYWdlcikpOwogCiAgICAgR1Rhc2sqIHRhc2sgPSBnX3Rhc2tfbmV3KG1hbmFnZXIs
IGNhbmNlbGxhYmxlLCBjYWxsYmFjaywgdXNlckRhdGEpOwotICAgIG1hbmFnZXItPnByaXYtPndl
YkNvb2tpZU1hbmFnZXItPmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koSFRUUENvb2tpZUFjY2Vw
dFBvbGljeUNhbGxiYWNrOjpjcmVhdGUodGFzaywgd2Via2l0Q29va2llTWFuYWdlckdldEFjY2Vw
dFBvbGljeUNhbGxiYWNrKSk7CisgICAgbWFuYWdlci0+cHJpdi0+d2ViQ29va2llTWFuYWdlci0+
Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShIVFRQQ29va2llQWNjZXB0UG9saWN5QVBJQ2FsbGJh
Y2s6OmNyZWF0ZSh0YXNrLCB3ZWJraXRDb29raWVNYW5hZ2VyR2V0QWNjZXB0UG9saWN5Q2FsbGJh
Y2spKTsKIH0KIAogLyoqCkBAIC0yMzMsNyArMjM2LDcgQEAgdm9pZCB3ZWJraXRfY29va2llX21h
bmFnZXJfZ2V0X2RvbWFpbnNfdwogICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0NPT0tJ
RV9NQU5BR0VSKG1hbmFnZXIpKTsKIAogICAgIEdUYXNrKiB0YXNrID0gZ190YXNrX25ldyhtYW5h
Z2VyLCBjYW5jZWxsYWJsZSwgY2FsbGJhY2ssIHVzZXJEYXRhKTsKLSAgICBtYW5hZ2VyLT5wcml2
LT53ZWJDb29raWVNYW5hZ2VyLT5nZXRIb3N0bmFtZXNXaXRoQ29va2llcyhBcnJheUNhbGxiYWNr
OjpjcmVhdGUodGFzaywgd2Via2l0Q29va2llTWFuYWdlckdldERvbWFpbnNXaXRoQ29va2llc0Nh
bGxiYWNrKSk7CisgICAgbWFuYWdlci0+cHJpdi0+d2ViQ29va2llTWFuYWdlci0+Z2V0SG9zdG5h
bWVzV2l0aENvb2tpZXMoQXJyYXlBUElDYWxsYmFjazo6Y3JlYXRlKHRhc2ssIHdlYmtpdENvb2tp
ZU1hbmFnZXJHZXREb21haW5zV2l0aENvb2tpZXNDYWxsYmFjaykpOwogfQogCiAvKioKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaW50T3BlcmF0aW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQ
cmludE9wZXJhdGlvbi5jcHAJKHJldmlzaW9uIDE2NDM1NSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaW50T3BlcmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjUyLDMwICsyNTIsMzEgQEAgc3RhdGljIFdlYktpdFByaW50T3BlcmF0aW9uUmVzcG9uc2Ug
d2ViawogfQogI2VuZGlmCiAKLXN0YXRpYyB2b2lkIGRyYXdQYWdlc0ZvclByaW50aW5nQ29tcGxl
dGVkKFdLRXJyb3JSZWYgd2tQcmludEVycm9yLCBXS0Vycm9yUmVmLCB2b2lkKiBjb250ZXh0KQor
c3RhdGljIHZvaWQgZHJhd1BhZ2VzRm9yUHJpbnRpbmdDb21wbGV0ZWQoQVBJOjpFcnJvciogd2tQ
cmludEVycm9yLCBXZWJLaXRQcmludE9wZXJhdGlvbiogcHJpbnRPcGVyYXRpb24pCiB7Ci0gICAg
R1JlZlB0cjxXZWJLaXRQcmludE9wZXJhdGlvbj4gcHJpbnRPcGVyYXRpb24gPSBhZG9wdEdSZWYo
V0VCS0lUX1BSSU5UX09QRVJBVElPTihjb250ZXh0KSk7Ci0KICAgICAvLyBXaGVuIHJ1bm5pbmcg
c3luY2hyb25vdXNseSBXZWJQYWdlUHJveHk6OnByaW50RnJhbWUoKSBjYWxscyBlbmRQcmludGlu
ZygpLgogICAgIGlmIChwcmludE9wZXJhdGlvbi0+cHJpdi0+cHJpbnRNb2RlID09IFByaW50SW5m
bzo6UHJpbnRNb2RlQXN5bmMgJiYgcHJpbnRPcGVyYXRpb24tPnByaXYtPndlYlZpZXcpIHsKICAg
ICAgICAgV2ViUGFnZVByb3h5KiBwYWdlID0gd2Via2l0V2ViVmlld0Jhc2VHZXRQYWdlKFdFQktJ
VF9XRUJfVklFV19CQVNFKHByaW50T3BlcmF0aW9uLT5wcml2LT53ZWJWaWV3KSk7CiAgICAgICAg
IHBhZ2UtPmVuZFByaW50aW5nKCk7CiAgICAgfQogCi0gICAgY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VFcnJvciYgcmVzb3VyY2VFcnJvciA9IHdrUHJpbnRFcnJvciA/IHRvSW1wbCh3a1ByaW50RXJy
b3IpLT5wbGF0Zm9ybUVycm9yKCkgOiBXZWJDb3JlOjpSZXNvdXJjZUVycm9yKCk7CisgICAgY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYgcmVzb3VyY2VFcnJvciA9IHdrUHJpbnRFcnJvciA/
IHdrUHJpbnRFcnJvci0+cGxhdGZvcm1FcnJvcigpIDogV2ViQ29yZTo6UmVzb3VyY2VFcnJvcigp
OwogICAgIGlmICghcmVzb3VyY2VFcnJvci5pc051bGwoKSkgewogICAgICAgICBHVW5pcXVlUHRy
PEdFcnJvcj4gcHJpbnRFcnJvcihnX2Vycm9yX25ld19saXRlcmFsKGdfcXVhcmtfZnJvbV9zdHJp
bmcocmVzb3VyY2VFcnJvci5kb21haW4oKS51dGY4KCkuZGF0YSgpKSwKICAgICAgICAgICAgIHJl
c291cmNlRXJyb3IuZXJyb3JDb2RlKCksIHJlc291cmNlRXJyb3IubG9jYWxpemVkRGVzY3JpcHRp
b24oKS51dGY4KCkuZGF0YSgpKSk7Ci0gICAgICAgIGdfc2lnbmFsX2VtaXQocHJpbnRPcGVyYXRp
b24uZ2V0KCksIHNpZ25hbHNbRkFJTEVEXSwgMCwgcHJpbnRFcnJvci5nZXQoKSk7CisgICAgICAg
IGdfc2lnbmFsX2VtaXQocHJpbnRPcGVyYXRpb24sIHNpZ25hbHNbRkFJTEVEXSwgMCwgcHJpbnRF
cnJvci5nZXQoKSk7CiAgICAgfQotICAgIGdfc2lnbmFsX2VtaXQocHJpbnRPcGVyYXRpb24uZ2V0
KCksIHNpZ25hbHNbRklOSVNIRURdLCAwLCBOVUxMKTsKKyAgICBnX3NpZ25hbF9lbWl0KHByaW50
T3BlcmF0aW9uLCBzaWduYWxzW0ZJTklTSEVEXSwgMCwgTlVMTCk7CiB9CiAKIHN0YXRpYyB2b2lk
IHdlYmtpdFByaW50T3BlcmF0aW9uUHJpbnRQYWdlc0ZvckZyYW1lKFdlYktpdFByaW50T3BlcmF0
aW9uKiBwcmludE9wZXJhdGlvbiwgV2ViRnJhbWVQcm94eSogd2ViRnJhbWUsIEd0a1ByaW50U2V0
dGluZ3MqIHByaW50U2V0dGluZ3MsIEd0a1BhZ2VTZXR1cCogcGFnZVNldHVwKQogewogICAgIFBy
aW50SW5mbyBwcmludEluZm8ocHJpbnRTZXR0aW5ncywgcGFnZVNldHVwLCBwcmludE9wZXJhdGlv
bi0+cHJpdi0+cHJpbnRNb2RlKTsKICAgICBXZWJQYWdlUHJveHkqIHBhZ2UgPSB3ZWJraXRXZWJW
aWV3QmFzZUdldFBhZ2UoV0VCS0lUX1dFQl9WSUVXX0JBU0UocHJpbnRPcGVyYXRpb24tPnByaXYt
PndlYlZpZXcpKTsKLSAgICBwYWdlLT5kcmF3UGFnZXNGb3JQcmludGluZyh3ZWJGcmFtZSwgcHJp
bnRJbmZvLCBQcmludEZpbmlzaGVkQ2FsbGJhY2s6OmNyZWF0ZShnX29iamVjdF9yZWYocHJpbnRP
cGVyYXRpb24pLCAmZHJhd1BhZ2VzRm9yUHJpbnRpbmdDb21wbGV0ZWQpKTsKKyAgICBnX29iamVj
dF9yZWYocHJpbnRPcGVyYXRpb24pOworICAgIHBhZ2UtPmRyYXdQYWdlc0ZvclByaW50aW5nKHdl
YkZyYW1lLCBwcmludEluZm8sIFByaW50RmluaXNoZWRDYWxsYmFjazo6Y3JlYXRlKFtwcmludE9w
ZXJhdGlvbl0oYm9vbCAvKmVycm9yKi8sIEFQSTo6RXJyb3IqIHByaW50RXJyb3IpIHsKKyAgICAg
ICAgZHJhd1BhZ2VzRm9yUHJpbnRpbmdDb21wbGV0ZWQocHJpbnRFcnJvciwgYWRvcHRHUmVmKHBy
aW50T3BlcmF0aW9uKS5nZXQoKSk7CisgICAgfSkpOwogfQogCiBXZWJLaXRQcmludE9wZXJhdGlv
blJlc3BvbnNlIHdlYmtpdFByaW50T3BlcmF0aW9uUnVuRGlhbG9nRm9yRnJhbWUoV2ViS2l0UHJp
bnRPcGVyYXRpb24qIHByaW50T3BlcmF0aW9uLCBHdGtXaW5kb3cqIHBhcmVudCwgV2ViRnJhbWVQ
cm94eSogd2ViRnJhbWUpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRXZWJSZXNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0V2ViUmVzb3VyY2UuY3BwCShyZXZpc2lvbiAxNjQzNTUpCisrKyBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJSZXNvdXJjZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMxNCwxMiArMzE0LDExIEBAIHN0cnVjdCBSZXNvdXJjZUdldERhdGFB
c3luY0RhdGEgewogfTsKIFdFQktJVF9ERUZJTkVfQVNZTkNfREFUQV9TVFJVQ1QoUmVzb3VyY2VH
ZXREYXRhQXN5bmNEYXRhKQogCi1zdGF0aWMgdm9pZCByZXNvdXJjZURhdGFDYWxsYmFjayhXS0Rh
dGFSZWYgd2tEYXRhLCBXS0Vycm9yUmVmLCB2b2lkKiBjb250ZXh0KQorc3RhdGljIHZvaWQgcmVz
b3VyY2VEYXRhQ2FsbGJhY2soQVBJOjpEYXRhKiB3a0RhdGEsIEdUYXNrKiB0YXNrKQogewotICAg
IEdSZWZQdHI8R1Rhc2s+IHRhc2sgPSBhZG9wdEdSZWYoR19UQVNLKGNvbnRleHQpKTsKLSAgICBS
ZXNvdXJjZUdldERhdGFBc3luY0RhdGEqIGRhdGEgPSBzdGF0aWNfY2FzdDxSZXNvdXJjZUdldERh
dGFBc3luY0RhdGEqPihnX3Rhc2tfZ2V0X3Rhc2tfZGF0YSh0YXNrLmdldCgpKSk7Ci0gICAgZGF0
YS0+d2ViRGF0YSA9IHRvSW1wbCh3a0RhdGEpOwotICAgIGdfdGFza19yZXR1cm5fYm9vbGVhbih0
YXNrLmdldCgpLCBUUlVFKTsKKyAgICBSZXNvdXJjZUdldERhdGFBc3luY0RhdGEqIGRhdGEgPSBz
dGF0aWNfY2FzdDxSZXNvdXJjZUdldERhdGFBc3luY0RhdGEqPihnX3Rhc2tfZ2V0X3Rhc2tfZGF0
YSh0YXNrKSk7CisgICAgZGF0YS0+d2ViRGF0YSA9IHdrRGF0YTsKKyAgICBnX3Rhc2tfcmV0dXJu
X2Jvb2xlYW4odGFzaywgVFJVRSk7CiB9CiAKIC8qKgpAQCAtMzQxLDEwICszNDAsMTQgQEAgdm9p
ZCB3ZWJraXRfd2ViX3Jlc291cmNlX2dldF9kYXRhKFdlYktpdAogICAgIEdUYXNrKiB0YXNrID0g
Z190YXNrX25ldyhyZXNvdXJjZSwgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSk7CiAg
ICAgZ190YXNrX3NldF90YXNrX2RhdGEodGFzaywgY3JlYXRlUmVzb3VyY2VHZXREYXRhQXN5bmNE
YXRhKCksIHJlaW50ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGRlc3Ryb3lSZXNvdXJjZUdl
dERhdGFBc3luY0RhdGEpKTsKICAgICBpZiAocmVzb3VyY2UtPnByaXYtPmlzTWFpblJlc291cmNl
KQotICAgICAgICByZXNvdXJjZS0+cHJpdi0+ZnJhbWUtPmdldE1haW5SZXNvdXJjZURhdGEoRGF0
YUNhbGxiYWNrOjpjcmVhdGUodGFzaywgcmVzb3VyY2VEYXRhQ2FsbGJhY2spKTsKKyAgICAgICAg
cmVzb3VyY2UtPnByaXYtPmZyYW1lLT5nZXRNYWluUmVzb3VyY2VEYXRhKERhdGFDYWxsYmFjazo6
Y3JlYXRlKFt0YXNrXShib29sIC8qZXJyb3IqLywgQVBJOjpEYXRhKiBkYXRhKSB7CisgICAgICAg
ICAgICByZXNvdXJjZURhdGFDYWxsYmFjayhkYXRhLCBhZG9wdEdSZWYodGFzaykuZ2V0KCkpOwor
ICAgICAgICB9KSk7CiAgICAgZWxzZSB7CiAgICAgICAgIFN0cmluZyB1cmwgPSBTdHJpbmc6OmZy
b21VVEY4KHJlc291cmNlLT5wcml2LT51cmkuZGF0YSgpKTsKLSAgICAgICAgcmVzb3VyY2UtPnBy
aXYtPmZyYW1lLT5nZXRSZXNvdXJjZURhdGEoQVBJOjpVUkw6OmNyZWF0ZSh1cmwpLmdldCgpLCBE
YXRhQ2FsbGJhY2s6OmNyZWF0ZSh0YXNrLCByZXNvdXJjZURhdGFDYWxsYmFjaykpOworICAgICAg
ICByZXNvdXJjZS0+cHJpdi0+ZnJhbWUtPmdldFJlc291cmNlRGF0YShBUEk6OlVSTDo6Y3JlYXRl
KHVybCkuZ2V0KCksIERhdGFDYWxsYmFjazo6Y3JlYXRlKFt0YXNrXShib29sIC8qZXJyb3IqLywg
QVBJOjpEYXRhKiBkYXRhKSB7CisgICAgICAgICAgICByZXNvdXJjZURhdGFDYWxsYmFjayhkYXRh
LCBhZG9wdEdSZWYodGFzaykuZ2V0KCkpOworICAgICAgICB9KSk7CiAgICAgfQogfQogCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3
LmNwcAkocmV2aXNpb24gMTY0MzU1KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0V2ViVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1MTAsMTIgKzI1MTAsNiBA
QCBnZG91YmxlIHdlYmtpdF93ZWJfdmlld19nZXRfem9vbV9sZXZlbChXCiAgICAgcmV0dXJuIHpv
b21UZXh0T25seSA/IHBhZ2UtPnRleHRab29tRmFjdG9yKCkgOiBwYWdlLT5wYWdlWm9vbUZhY3Rv
cigpOwogfQogCi1zdGF0aWMgdm9pZCBkaWRWYWxpZGF0ZUNvbW1hbmQoV0tTdHJpbmdSZWYgY29t
bWFuZCwgYm9vbCBpc0VuYWJsZWQsIGludDMyX3Qgc3RhdGUsIFdLRXJyb3JSZWYsIHZvaWQqIGNv
bnRleHQpCi17Ci0gICAgR1JlZlB0cjxHVGFzaz4gdGFzayA9IGFkb3B0R1JlZihHX1RBU0soY29u
dGV4dCkpOwotICAgIGdfdGFza19yZXR1cm5fYm9vbGVhbih0YXNrLmdldCgpLCBpc0VuYWJsZWQp
OwotfQotCiAvKioKICAqIHdlYmtpdF93ZWJfdmlld19jYW5fZXhlY3V0ZV9lZGl0aW5nX2NvbW1h
bmQ6CiAgKiBAd2ViX3ZpZXc6IGEgI1dlYktpdFdlYlZpZXcKQEAgLTI1MzUsNyArMjUyOSw5IEBA
IHZvaWQgd2Via2l0X3dlYl92aWV3X2Nhbl9leGVjdXRlX2VkaXRpbmcKICAgICBnX3JldHVybl9p
Zl9mYWlsKGNvbW1hbmQpOwogCiAgICAgR1Rhc2sqIHRhc2sgPSBnX3Rhc2tfbmV3KHdlYlZpZXcs
IGNhbmNlbGxhYmxlLCBjYWxsYmFjaywgdXNlckRhdGEpOwotICAgIGdldFBhZ2Uod2ViVmlldykt
PnZhbGlkYXRlQ29tbWFuZChTdHJpbmc6OmZyb21VVEY4KGNvbW1hbmQpLCBWYWxpZGF0ZUNvbW1h
bmRDYWxsYmFjazo6Y3JlYXRlKHRhc2ssIGRpZFZhbGlkYXRlQ29tbWFuZCkpOworICAgIGdldFBh
Z2Uod2ViVmlldyktPnZhbGlkYXRlQ29tbWFuZChTdHJpbmc6OmZyb21VVEY4KGNvbW1hbmQpLCBW
YWxpZGF0ZUNvbW1hbmRDYWxsYmFjazo6Y3JlYXRlKFt0YXNrXShib29sIC8qZXJyb3IqLywgU3Ry
aW5nSW1wbCogLypjb21tYW5kKi8sIGJvb2wgaXNFbmFibGVkLCBpbnQzMl90IC8qc3RhdGUqLykg
eworICAgICAgICBnX3Rhc2tfcmV0dXJuX2Jvb2xlYW4oYWRvcHRHUmVmKHRhc2spLmdldCgpLCBp
c0VuYWJsZWQpOyAgICAgICAgCisgICAgfSkpOwogfQogCiAvKioKQEAgLTI2MTIsMjAgKzI2MDgs
MTkgQEAgSlNHbG9iYWxDb250ZXh0UmVmIHdlYmtpdF93ZWJfdmlld19nZXRfagogICAgIHJldHVy
biB3ZWJWaWV3LT5wcml2LT5qYXZhc2NyaXB0R2xvYmFsQ29udGV4dDsKIH0KIAotc3RhdGljIHZv
aWQgd2Via2l0V2ViVmlld1J1bkphdmFTY3JpcHRDYWxsYmFjayhXS1NlcmlhbGl6ZWRTY3JpcHRW
YWx1ZVJlZiB3a1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZSwgV0tFcnJvclJlZiwgdm9pZCogY29udGV4
dCkKK3N0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdSdW5KYXZhU2NyaXB0Q2FsbGJhY2soV2ViU2Vy
aWFsaXplZFNjcmlwdFZhbHVlKiB3a1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZSwgR1Rhc2sqIHRhc2sp
CiB7Ci0gICAgR1JlZlB0cjxHVGFzaz4gdGFzayA9IGFkb3B0R1JlZihHX1RBU0soY29udGV4dCkp
OwotICAgIGlmIChnX3Rhc2tfcmV0dXJuX2Vycm9yX2lmX2NhbmNlbGxlZCh0YXNrLmdldCgpKSkK
KyAgICBpZiAoZ190YXNrX3JldHVybl9lcnJvcl9pZl9jYW5jZWxsZWQodGFzaykpCiAgICAgICAg
IHJldHVybjsKIAogICAgIGlmICghd2tTZXJpYWxpemVkU2NyaXB0VmFsdWUpIHsKLSAgICAgICAg
Z190YXNrX3JldHVybl9uZXdfZXJyb3IodGFzay5nZXQoKSwgV0VCS0lUX0pBVkFTQ1JJUFRfRVJS
T1IsIFdFQktJVF9KQVZBU0NSSVBUX0VSUk9SX1NDUklQVF9GQUlMRUQsCisgICAgICAgIGdfdGFz
a19yZXR1cm5fbmV3X2Vycm9yKHRhc2ssIFdFQktJVF9KQVZBU0NSSVBUX0VSUk9SLCBXRUJLSVRf
SkFWQVNDUklQVF9FUlJPUl9TQ1JJUFRfRkFJTEVELAogICAgICAgICAgICAgXygiQW4gZXhjZXB0
aW9uIHdhcyByYWlzZWQgaW4gSmF2YVNjcmlwdCIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcoZ190YXNrX2dl
dF9zb3VyY2Vfb2JqZWN0KHRhc2suZ2V0KCkpKTsKLSAgICBnX3Rhc2tfcmV0dXJuX3BvaW50ZXIo
dGFzay5nZXQoKSwgd2Via2l0SmF2YXNjcmlwdFJlc3VsdENyZWF0ZSh3ZWJWaWV3LCB0b0ltcGwo
d2tTZXJpYWxpemVkU2NyaXB0VmFsdWUpKSwKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0g
V0VCS0lUX1dFQl9WSUVXKGdfdGFza19nZXRfc291cmNlX29iamVjdCh0YXNrKSk7CisgICAgZ190
YXNrX3JldHVybl9wb2ludGVyKHRhc2ssIHdlYmtpdEphdmFzY3JpcHRSZXN1bHRDcmVhdGUod2Vi
Vmlldywgd2tTZXJpYWxpemVkU2NyaXB0VmFsdWUpLAogICAgICAgICByZWludGVycHJldF9jYXN0
PEdEZXN0cm95Tm90aWZ5Pih3ZWJraXRfamF2YXNjcmlwdF9yZXN1bHRfdW5yZWYpKTsKIH0KIApA
QCAtMjY0OSw3ICsyNjQ0LDkgQEAgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfcnVuX2phdmFzY3JpcHQo
V2ViSwogICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2NyaXB0KTsKIAogICAgIEdUYXNrKiB0YXNrID0g
Z190YXNrX25ldyh3ZWJWaWV3LCBjYW5jZWxsYWJsZSwgY2FsbGJhY2ssIHVzZXJEYXRhKTsKLSAg
ICBnZXRQYWdlKHdlYlZpZXcpLT5ydW5KYXZhU2NyaXB0SW5NYWluRnJhbWUoU3RyaW5nOjpmcm9t
VVRGOChzY3JpcHQpLCBTY3JpcHRWYWx1ZUNhbGxiYWNrOjpjcmVhdGUodGFzaywgd2Via2l0V2Vi
Vmlld1J1bkphdmFTY3JpcHRDYWxsYmFjaykpOworICAgIGdldFBhZ2Uod2ViVmlldyktPnJ1bkph
dmFTY3JpcHRJbk1haW5GcmFtZShTdHJpbmc6OmZyb21VVEY4KHNjcmlwdCksIFNjcmlwdFZhbHVl
Q2FsbGJhY2s6OmNyZWF0ZShbdGFza10oYm9vbCAvKmVycm9yKi8sIFdlYlNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZSogc2VyaWFsaXplZFNjcmlwdFZhbHVlKSB7CisgICAgICAgIHdlYmtpdFdlYlZpZXdS
dW5KYXZhU2NyaXB0Q2FsbGJhY2soc2VyaWFsaXplZFNjcmlwdFZhbHVlLCBhZG9wdEdSZWYodGFz
aykuZ2V0KCkpOworICAgIH0pKTsKIH0KIAogLyoqCkBAIC0yNzM4LDcgKzI3MzUsOSBAQCBzdGF0
aWMgdm9pZCByZXNvdXJjZXNTdHJlYW1SZWFkQ2FsbGJhY2soCiAgICAgV2ViS2l0V2ViVmlldyog
d2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyhnX3Rhc2tfZ2V0X3NvdXJjZV9vYmplY3QodGFzay5n
ZXQoKSkpOwogICAgIGdwb2ludGVyIG91dHB1dFN0cmVhbURhdGEgPSBnX21lbW9yeV9vdXRwdXRf
c3RyZWFtX2dldF9kYXRhKEdfTUVNT1JZX09VVFBVVF9TVFJFQU0ob2JqZWN0KSk7CiAgICAgZ2V0
UGFnZSh3ZWJWaWV3KS0+cnVuSmF2YVNjcmlwdEluTWFpbkZyYW1lKFN0cmluZzo6ZnJvbVVURjgo
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBnY2hhcio+KG91dHB1dFN0cmVhbURhdGEpKSwKLSAgICAg
ICAgU2NyaXB0VmFsdWVDYWxsYmFjazo6Y3JlYXRlKHRhc2subGVha1JlZigpLCB3ZWJraXRXZWJW
aWV3UnVuSmF2YVNjcmlwdENhbGxiYWNrKSk7CisgICAgICAgIFNjcmlwdFZhbHVlQ2FsbGJhY2s6
OmNyZWF0ZShbdGFza10oYm9vbCAvKmVycm9yKi8sIFdlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSog
c2VyaWFsaXplZFNjcmlwdFZhbHVlKSB7CisgICAgICAgIHdlYmtpdFdlYlZpZXdSdW5KYXZhU2Ny
aXB0Q2FsbGJhY2soc2VyaWFsaXplZFNjcmlwdFZhbHVlLCB0YXNrLmdldCgpKTsKKyAgICB9KSk7
CiB9CiAKIC8qKgpAQCAtMjg2NSwyNyArMjg2NCwyNiBAQCBzdGF0aWMgdm9pZCBmaWxlUmVwbGFj
ZUNvbnRlbnRzQ2FsbGJhY2soCiAgICAgZ190YXNrX3JldHVybl9ib29sZWFuKHRhc2suZ2V0KCks
IFRSVUUpOwogfQogCi1zdGF0aWMgdm9pZCBnZXRDb250ZW50c0FzTUhUTUxEYXRhQ2FsbGJhY2so
V0tEYXRhUmVmIHdrRGF0YSwgV0tFcnJvclJlZiwgdm9pZCogY29udGV4dCkKK3N0YXRpYyB2b2lk
IGdldENvbnRlbnRzQXNNSFRNTERhdGFDYWxsYmFjayhBUEk6OkRhdGEqIHdrRGF0YSwgR1Rhc2sq
IHRhc2spCiB7Ci0gICAgR1JlZlB0cjxHVGFzaz4gdGFzayA9IGFkb3B0R1JlZihHX1RBU0soY29u
dGV4dCkpOwotICAgIGlmIChnX3Rhc2tfcmV0dXJuX2Vycm9yX2lmX2NhbmNlbGxlZCh0YXNrLmdl
dCgpKSkKKyAgICBpZiAoZ190YXNrX3JldHVybl9lcnJvcl9pZl9jYW5jZWxsZWQodGFzaykpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIFZpZXdTYXZlQXN5bmNEYXRhKiBkYXRhID0gc3RhdGljX2Nh
c3Q8Vmlld1NhdmVBc3luY0RhdGEqPihnX3Rhc2tfZ2V0X3Rhc2tfZGF0YSh0YXNrLmdldCgpKSk7
CisgICAgVmlld1NhdmVBc3luY0RhdGEqIGRhdGEgPSBzdGF0aWNfY2FzdDxWaWV3U2F2ZUFzeW5j
RGF0YSo+KGdfdGFza19nZXRfdGFza19kYXRhKHRhc2spKTsKICAgICAvLyBXZSBuZWVkIHRvIHJl
dGFpbiB0aGUgZGF0YSB1bnRpbCB0aGUgYXN5bmNyb25vdXMgcHJvY2VzcwogICAgIC8vIGluaXRp
YXRlZCBieSB0aGUgdXNlciBoYXMgZmluaXNoZWQgY29tcGxldGVseS4KLSAgICBkYXRhLT53ZWJE
YXRhID0gdG9JbXBsKHdrRGF0YSk7CisgICAgZGF0YS0+d2ViRGF0YSA9IHdrRGF0YTsKIAogICAg
IC8vIElmIHdlIGFyZSBzYXZpbmcgdG8gYSBmaWxlIHdlIG5lZWQgdG8gd3JpdGUgdGhlIGRhdGEg
b24gZGlzayBiZWZvcmUgZmluaXNoaW5nLgotICAgIGlmIChnX3Rhc2tfZ2V0X3NvdXJjZV90YWco
dGFzay5nZXQoKSkgPT0gd2Via2l0X3dlYl92aWV3X3NhdmVfdG9fZmlsZSkgeworICAgIGlmIChn
X3Rhc2tfZ2V0X3NvdXJjZV90YWcodGFzaykgPT0gd2Via2l0X3dlYl92aWV3X3NhdmVfdG9fZmls
ZSkgewogICAgICAgICBBU1NFUlQoR19JU19GSUxFKGRhdGEtPmZpbGUuZ2V0KCkpKTsKLSAgICAg
ICAgR0NhbmNlbGxhYmxlKiBjYW5jZWxsYWJsZSA9IGdfdGFza19nZXRfY2FuY2VsbGFibGUodGFz
ay5nZXQoKSk7CisgICAgICAgIEdDYW5jZWxsYWJsZSogY2FuY2VsbGFibGUgPSBnX3Rhc2tfZ2V0
X2NhbmNlbGxhYmxlKHRhc2spOwogICAgICAgICBnX2ZpbGVfcmVwbGFjZV9jb250ZW50c19hc3lu
YyhkYXRhLT5maWxlLmdldCgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IGdjaGFyKj4oZGF0YS0+
d2ViRGF0YS0+Ynl0ZXMoKSksIGRhdGEtPndlYkRhdGEtPnNpemUoKSwKICAgICAgICAgICAgIDAs
IEZBTFNFLCBHX0ZJTEVfQ1JFQVRFX1JFUExBQ0VfREVTVElOQVRJT04sIGNhbmNlbGxhYmxlLCBm
aWxlUmVwbGFjZUNvbnRlbnRzQ2FsbGJhY2ssIHRhc2subGVha1JlZigpKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIGdfdGFza19yZXR1cm5fYm9vbGVhbih0YXNrLmdldCgpLCBUUlVF
KTsKKyAgICBnX3Rhc2tfcmV0dXJuX2Jvb2xlYW4odGFzaywgVFJVRSk7CiB9CiAKIC8qKgpAQCAt
MjkxNCw3ICsyOTEyLDkgQEAgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfc2F2ZShXZWJLaXRXZWJWaWV3
KgogICAgIEdUYXNrKiB0YXNrID0gZ190YXNrX25ldyh3ZWJWaWV3LCBjYW5jZWxsYWJsZSwgY2Fs
bGJhY2ssIHVzZXJEYXRhKTsKICAgICBnX3Rhc2tfc2V0X3NvdXJjZV90YWcodGFzaywgcmVpbnRl
cnByZXRfY2FzdDxncG9pbnRlcj4od2Via2l0X3dlYl92aWV3X3NhdmUpKTsKICAgICBnX3Rhc2tf
c2V0X3Rhc2tfZGF0YSh0YXNrLCBjcmVhdGVWaWV3U2F2ZUFzeW5jRGF0YSgpLCByZWludGVycHJl
dF9jYXN0PEdEZXN0cm95Tm90aWZ5PihkZXN0cm95Vmlld1NhdmVBc3luY0RhdGEpKTsKLSAgICBn
ZXRQYWdlKHdlYlZpZXcpLT5nZXRDb250ZW50c0FzTUhUTUxEYXRhKERhdGFDYWxsYmFjazo6Y3Jl
YXRlKHRhc2ssIGdldENvbnRlbnRzQXNNSFRNTERhdGFDYWxsYmFjayksIGZhbHNlKTsKKyAgICBn
ZXRQYWdlKHdlYlZpZXcpLT5nZXRDb250ZW50c0FzTUhUTUxEYXRhKERhdGFDYWxsYmFjazo6Y3Jl
YXRlKFt0YXNrXShib29sIC8qZXJyb3IqLywgQVBJOjpEYXRhKiBkYXRhKSB7CisgICAgICAgIGdl
dENvbnRlbnRzQXNNSFRNTERhdGFDYWxsYmFjayhkYXRhLCBhZG9wdEdSZWYodGFzaykuZ2V0KCkp
OworICAgIH0pLCBmYWxzZSk7CiB9CiAKIC8qKgpAQCAtMjk3Nyw3ICsyOTc3LDkgQEAgdm9pZCB3
ZWJraXRfd2ViX3ZpZXdfc2F2ZV90b19maWxlKFdlYktpdAogICAgIGRhdGEtPmZpbGUgPSBmaWxl
OwogICAgIGdfdGFza19zZXRfdGFza19kYXRhKHRhc2ssIGRhdGEsIHJlaW50ZXJwcmV0X2Nhc3Q8
R0Rlc3Ryb3lOb3RpZnk+KGRlc3Ryb3lWaWV3U2F2ZUFzeW5jRGF0YSkpOwogCi0gICAgZ2V0UGFn
ZSh3ZWJWaWV3KS0+Z2V0Q29udGVudHNBc01IVE1MRGF0YShEYXRhQ2FsbGJhY2s6OmNyZWF0ZSh0
YXNrLCBnZXRDb250ZW50c0FzTUhUTUxEYXRhQ2FsbGJhY2spLCBmYWxzZSk7CisgICAgZ2V0UGFn
ZSh3ZWJWaWV3KS0+Z2V0Q29udGVudHNBc01IVE1MRGF0YShEYXRhQ2FsbGJhY2s6OmNyZWF0ZShb
dGFza10oYm9vbCAvKmVycm9yKi8sIEFQSTo6RGF0YSogZGF0YSkgeworICAgICAgICBnZXRDb250
ZW50c0FzTUhUTUxEYXRhQ2FsbGJhY2soZGF0YSwgYWRvcHRHUmVmKHRhc2spLmdldCgpKTsKKyAg
ICB9KSwgZmFsc2UpOwogfQogCiAvKioKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvaW9zL1dLSW50ZXJhY3Rpb25WaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvaW9zL1dLSW50ZXJhY3Rpb25WaWV3Lm1tCShyZXZpc2lvbiAxNjQzNTUp
CisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2lvcy9XS0ludGVyYWN0aW9uVmlldy5t
bQkod29ya2luZyBjb3B5KQpAQCAtOTA3LDIyICs5MDcsMTcgQEAgLSAodm9pZClfc2hvd0RpY3Rp
b25hcnk6KE5TU3RyaW5nICopdGV4dAogICAgICAgICBbX3dlYlNlbGVjdGlvbkFzc2lzdGFudCBz
aG93RGljdGlvbmFyeUZvcjp0ZXh0IGZyb21SZWN0OnByZXNlbnRhdGlvblJlY3RdOwogfQogCi1z
dGF0aWMgdm9pZCBzZWxlY3RlZFN0cmluZyhXS1N0cmluZ1JlZiBzdHJpbmcsIFdLRXJyb3JSZWYg
ZXJyb3IsIHZvaWQqIGNvbnRleHQpCi17Ci0gICAgaWYgKGVycm9yKQotICAgICAgICByZXR1cm47
Ci0gICAgaWYgKCFzdHJpbmcpCi0gICAgICAgIHJldHVybjsKLQotICAgIE5TU3RyaW5nICpjb252
ZXJ0ZWRTdHJpbmcgPSB0b0ltcGwoc3RyaW5nKS0+c3RyaW5nKCk7Ci0gICAgV0tJbnRlcmFjdGlv
blZpZXcqIHZpZXcgPSBzdGF0aWNfY2FzdDxXS0ludGVyYWN0aW9uVmlldyo+KGNvbnRleHQpOwot
ICAgIEFTU0VSVCh2aWV3KTsKLSAgICBbdmlldyBfc2hvd0RpY3Rpb25hcnk6Y29udmVydGVkU3Ry
aW5nXTsKLX0KLQogLSAodm9pZClfZGVmaW5lOihpZClzZW5kZXIKIHsKLSAgICBfcGFnZS0+Z2V0
U2VsZWN0aW9uT3JDb250ZW50c0FzU3RyaW5nKFN0cmluZ0NhbGxiYWNrOjpjcmVhdGUoc2VsZiwg
c2VsZWN0ZWRTdHJpbmcpKTsKKyAgICBfcGFnZS0+Z2V0U2VsZWN0aW9uT3JDb250ZW50c0FzU3Ry
aW5nKFN0cmluZ0NhbGxiYWNrOjpjcmVhdGUoW3NlbGZdKGJvb2wgZXJyb3IsIFN0cmluZ0ltcGwq
IHN0cmluZykgeworICAgICAgICBpZiAoZXJyb3IpCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIGlmICghc3RyaW5nKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIE5TU3RyaW5n
ICpjb252ZXJ0ZWRTdHJpbmcgPSAqc3RyaW5nOworICAgICAgICBbc2VsZiBfc2hvd0RpY3Rpb25h
cnk6Y29udmVydGVkU3RyaW5nXTsKKyAgICB9KSk7CiB9CiAKIC8vIFVJV0tJbnRlcmFjdGlvblZp
ZXdQcm90b2NvbApAQCAtMTA4MywyOCArMTA3OCwyNCBAQCBzdGF0aWMgaW5saW5lIFVJV0tTZWxl
Y3Rpb25GbGFncyB0b1VJV0tTCiAgICAgfQogfQogCi1zdGF0aWMgdm9pZCBzZWxlY3Rpb25DaGFu
Z2VkV2l0aEdlc3R1cmUoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvaW50LCB1aW50MzJfdCBn
ZXN0dXJlVHlwZSwgdWludDMyX3QgZ2VzdHVyZVN0YXRlLCB1aW50MzJfdCBmbGFncywgV0tFcnJv
clJlZiBlcnJvciwgdm9pZCogY29udGV4dCkKK3N0YXRpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWRX
aXRoR2VzdHVyZShib29sIGVycm9yLCBXS0ludGVyYWN0aW9uVmlldyAqdmlldywgY29uc3QgV2Vi
Q29yZTo6SW50UG9pbnQmIHBvaW50LCB1aW50MzJfdCBnZXN0dXJlVHlwZSwgdWludDMyX3QgZ2Vz
dHVyZVN0YXRlLCB1aW50MzJfdCBmbGFncykKIHsKICAgICBpZiAoZXJyb3IpIHsKICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgV0tJbnRl
cmFjdGlvblZpZXcgKnZpZXcgPSBzdGF0aWNfY2FzdDxXS0ludGVyYWN0aW9uVmlldyo+KGNvbnRl
eHQpOwotICAgIEFTU0VSVCh2aWV3KTsKICAgICBpZiAoW3ZpZXcgd2ViU2VsZWN0aW9uQXNzaXN0
YW50XSkKICAgICAgICAgWyhVSVdLU2VsZWN0aW9uQXNzaXN0YW50ICopW3ZpZXcgd2ViU2VsZWN0
aW9uQXNzaXN0YW50XSBzZWxlY3Rpb25DaGFuZ2VkV2l0aEdlc3R1cmVBdDooQ0dQb2ludClwb2lu
dCB3aXRoR2VzdHVyZTp0b1VJV0tHZXN0dXJlVHlwZSgoV0tHZXN0dXJlVHlwZSlnZXN0dXJlVHlw
ZSkgd2l0aFN0YXRlOnRvVUlHZXN0dXJlUmVjb2duaXplclN0YXRlKHN0YXRpY19jYXN0PFdLR2Vz
dHVyZVJlY29nbml6ZXJTdGF0ZT4oZ2VzdHVyZVN0YXRlKSkgd2l0aEZsYWdzOih0b1VJV0tTZWxl
Y3Rpb25GbGFncygoV0tTZWxlY3Rpb25GbGFncylmbGFncykpXTsKICAgICBlbHNlCiAgICAgICAg
IFsoVUlXS1RleHRJbnRlcmFjdGlvbkFzc2lzdGFudCAqKVt2aWV3IGludGVyYWN0aW9uQXNzaXN0
YW50XSBzZWxlY3Rpb25DaGFuZ2VkV2l0aEdlc3R1cmVBdDooQ0dQb2ludClwb2ludCB3aXRoR2Vz
dHVyZTp0b1VJV0tHZXN0dXJlVHlwZSgoV0tHZXN0dXJlVHlwZSlnZXN0dXJlVHlwZSkgd2l0aFN0
YXRlOnRvVUlHZXN0dXJlUmVjb2duaXplclN0YXRlKHN0YXRpY19jYXN0PFdLR2VzdHVyZVJlY29n
bml6ZXJTdGF0ZT4oZ2VzdHVyZVN0YXRlKSkgd2l0aEZsYWdzOih0b1VJV0tTZWxlY3Rpb25GbGFn
cygoV0tTZWxlY3Rpb25GbGFncylmbGFncykpXTsKIH0KIAotc3RhdGljIHZvaWQgc2VsZWN0aW9u
Q2hhbmdlZFdpdGhUb3VjaChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQsIHVpbnQzMl90
IHRvdWNoLCBXS0Vycm9yUmVmIGVycm9yLCB2b2lkKiBjb250ZXh0KQorc3RhdGljIHZvaWQgc2Vs
ZWN0aW9uQ2hhbmdlZFdpdGhUb3VjaChib29sIGVycm9yLCBXS0ludGVyYWN0aW9uVmlldyAqdmll
dywgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvaW50LCB1aW50MzJfdCB0b3VjaCkKIHsKICAg
ICBpZiAoZXJyb3IpIHsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9Ci0gICAgV0tJbnRlcmFjdGlvblZpZXcgKnZpZXcgPSBzdGF0aWNfY2FzdDxX
S0ludGVyYWN0aW9uVmlldyo+KGNvbnRleHQpOwotICAgIEFTU0VSVCh2aWV3KTsKICAgICBpZiAo
W3ZpZXcgd2ViU2VsZWN0aW9uQXNzaXN0YW50XSkKICAgICAgICAgWyhVSVdLU2VsZWN0aW9uQXNz
aXN0YW50ICopW3ZpZXcgd2ViU2VsZWN0aW9uQXNzaXN0YW50XSBzZWxlY3Rpb25DaGFuZ2VkV2l0
aFRvdWNoQXQ6KENHUG9pbnQpcG9pbnQgd2l0aFNlbGVjdGlvblRvdWNoOnRvVUlXS1NlbGVjdGlv
blRvdWNoKChXS1NlbGVjdGlvblRvdWNoKXRvdWNoKV07CiAgICAgZWxzZQpAQCAtMTExMywxNyAr
MTEwNCwyMyBAQCBzdGF0aWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkV2l0aFRvdWNoKGNvCiAKIC0g
KHZvaWQpY2hhbmdlU2VsZWN0aW9uV2l0aEdlc3R1cmVBdDooQ0dQb2ludClwb2ludCB3aXRoR2Vz
dHVyZTooVUlXS0dlc3R1cmVUeXBlKWdlc3R1cmVUeXBlIHdpdGhTdGF0ZTooVUlHZXN0dXJlUmVj
b2duaXplclN0YXRlKXN0YXRlCiB7Ci0gICAgX3BhZ2UtPnNlbGVjdFdpdGhHZXN0dXJlKFdlYkNv
cmU6OkludFBvaW50KHBvaW50KSwgQ2hhcmFjdGVyR3JhbnVsYXJpdHksIHRvV0tHZXN0dXJlVHlw
ZShnZXN0dXJlVHlwZSksIHRvV0tHZXN0dXJlUmVjb2duaXplclN0YXRlKHN0YXRlKSwgR2VzdHVy
ZUNhbGxiYWNrOjpjcmVhdGUoc2VsZiwgc2VsZWN0aW9uQ2hhbmdlZFdpdGhHZXN0dXJlKSk7Cisg
ICAgX3BhZ2UtPnNlbGVjdFdpdGhHZXN0dXJlKFdlYkNvcmU6OkludFBvaW50KHBvaW50KSwgQ2hh
cmFjdGVyR3JhbnVsYXJpdHksIHRvV0tHZXN0dXJlVHlwZShnZXN0dXJlVHlwZSksIHRvV0tHZXN0
dXJlUmVjb2duaXplclN0YXRlKHN0YXRlKSwgR2VzdHVyZUNhbGxiYWNrOjpjcmVhdGUoW3NlbGZd
KGJvb2wgZXJyb3IsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb2ludCwgdWludDMyX3QgZ2Vz
dHVyZVR5cGUsIHVpbnQzMl90IGdlc3R1cmVTdGF0ZSwgdWludDMyX3QgZmxhZ3MpIHsKKyAgICAg
ICAgc2VsZWN0aW9uQ2hhbmdlZFdpdGhHZXN0dXJlKGVycm9yLCBzZWxmLCBwb2ludCwgZ2VzdHVy
ZVR5cGUsIGdlc3R1cmVTdGF0ZSwgZmxhZ3MpOworICAgIH0pKTsKIH0KIAogLSAodm9pZCljaGFu
Z2VTZWxlY3Rpb25XaXRoVG91Y2hBdDooQ0dQb2ludClwb2ludCB3aXRoU2VsZWN0aW9uVG91Y2g6
KFVJV0tTZWxlY3Rpb25Ub3VjaCl0b3VjaCBiYXNlSXNTdGFydDooQk9PTCliYXNlSXNTdGFydAog
ewotICAgIF9wYWdlLT51cGRhdGVTZWxlY3Rpb25XaXRoVG91Y2hlcyhXZWJDb3JlOjpJbnRQb2lu
dChwb2ludCksIHRvV0tTZWxlY3Rpb25Ub3VjaCh0b3VjaCksIGJhc2VJc1N0YXJ0LCBUb3VjaGVz
Q2FsbGJhY2s6OmNyZWF0ZShzZWxmLCBzZWxlY3Rpb25DaGFuZ2VkV2l0aFRvdWNoKSk7CisgICAg
X3BhZ2UtPnVwZGF0ZVNlbGVjdGlvbldpdGhUb3VjaGVzKFdlYkNvcmU6OkludFBvaW50KHBvaW50
KSwgdG9XS1NlbGVjdGlvblRvdWNoKHRvdWNoKSwgYmFzZUlzU3RhcnQsIFRvdWNoZXNDYWxsYmFj
azo6Y3JlYXRlKFtzZWxmXShib29sIGVycm9yLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9p
bnQsIHVpbnQzMl90IHRvdWNoKSB7CisgICAgICAgIHNlbGVjdGlvbkNoYW5nZWRXaXRoVG91Y2go
ZXJyb3IsIHNlbGYsIHBvaW50LCB0b3VjaCk7CisgICAgfSkpOwogfQogCiAtICh2b2lkKWNoYW5n
ZVNlbGVjdGlvbldpdGhUb3VjaGVzRnJvbTooQ0dQb2ludClmcm9tIHRvOihDR1BvaW50KXRvIHdp
dGhHZXN0dXJlOihVSVdLR2VzdHVyZVR5cGUpZ2VzdHVyZVR5cGUgd2l0aFN0YXRlOihVSUdlc3R1
cmVSZWNvZ25pemVyU3RhdGUpZ2VzdHVyZVN0YXRlCiB7Ci0gICAgX3BhZ2UtPnNlbGVjdFdpdGhU
d29Ub3VjaGVzKFdlYkNvcmU6OkludFBvaW50KGZyb20pLCBXZWJDb3JlOjpJbnRQb2ludCh0byks
IHRvV0tHZXN0dXJlVHlwZShnZXN0dXJlVHlwZSksIHRvV0tHZXN0dXJlUmVjb2duaXplclN0YXRl
KGdlc3R1cmVTdGF0ZSksIEdlc3R1cmVDYWxsYmFjazo6Y3JlYXRlKHNlbGYsIHNlbGVjdGlvbkNo
YW5nZWRXaXRoR2VzdHVyZSkpOworICAgIF9wYWdlLT5zZWxlY3RXaXRoVHdvVG91Y2hlcyhXZWJD
b3JlOjpJbnRQb2ludChmcm9tKSwgV2ViQ29yZTo6SW50UG9pbnQodG8pLCB0b1dLR2VzdHVyZVR5
cGUoZ2VzdHVyZVR5cGUpLCB0b1dLR2VzdHVyZVJlY29nbml6ZXJTdGF0ZShnZXN0dXJlU3RhdGUp
LCBHZXN0dXJlQ2FsbGJhY2s6OmNyZWF0ZShbc2VsZl0oYm9vbCBlcnJvciwgY29uc3QgV2ViQ29y
ZTo6SW50UG9pbnQmIHBvaW50LCB1aW50MzJfdCBnZXN0dXJlVHlwZSwgdWludDMyX3QgZ2VzdHVy
ZVN0YXRlLCB1aW50MzJfdCBmbGFncykgeworICAgICAgICBzZWxlY3Rpb25DaGFuZ2VkV2l0aEdl
c3R1cmUoZXJyb3IsIHNlbGYsIHBvaW50LCBnZXN0dXJlVHlwZSwgZ2VzdHVyZVN0YXRlLCBmbGFn
cyk7CisgICAgfSkpOwogfQogCiAtIChXS0F1dG9Db3JyZWN0aW9uRGF0YSAqKWF1dG9jb3JyZWN0
aW9uRGF0YQpAQCAtMTEzMSwyOSArMTEyOCw2IEBAIC0gKFdLQXV0b0NvcnJlY3Rpb25EYXRhICop
YXV0b2NvcnJlY3Rpb24KICAgICByZXR1cm4gJl9hdXRvY29ycmVjdGlvbkRhdGE7CiB9CiAKLXN0
YXRpYyB2b2lkIGF1dG9jb3JyZWN0aW9uRGF0YShjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVj
dHMsIGNvbnN0IFN0cmluZyYgZm9udE5hbWUsIGRvdWJsZSBmb250U2l6ZSwgdWludDY0X3QgdHJh
aXRzLCBXS0Vycm9yUmVmIGVycm9yLCB2b2lkKiBjb250ZXh0KQotewotICAgIFdLSW50ZXJhY3Rp
b25WaWV3KiB2aWV3ID0gc3RhdGljX2Nhc3Q8V0tJbnRlcmFjdGlvblZpZXcqPihjb250ZXh0KTsK
LSAgICBBU1NFUlQodmlldyk7Ci0gICAgQ0dSZWN0IGZpcnN0UmVjdCA9IENHUmVjdFplcm87Ci0g
ICAgQ0dSZWN0IGxhc3RSZWN0ID0gQ0dSZWN0WmVybzsKLSAgICBpZiAocmVjdHMuc2l6ZSgpKSB7
Ci0gICAgICAgIGZpcnN0UmVjdCA9IHJlY3RzWzBdOwotICAgICAgICBsYXN0UmVjdCA9IHJlY3Rz
W3JlY3RzLnNpemUoKSAtIDFdOwotICAgIH0KLQotICAgIFdLQXV0b0NvcnJlY3Rpb25EYXRhICph
dXRvY29ycmVjdGlvbkRhdGEgPSB2aWV3LmF1dG9jb3JyZWN0aW9uRGF0YTsKLSAgICBhdXRvY29y
cmVjdGlvbkRhdGEtPmZvbnROYW1lID0gZm9udE5hbWU7Ci0gICAgYXV0b2NvcnJlY3Rpb25EYXRh
LT5mb250U2l6ZSA9IGZvbnRTaXplOwotICAgIGF1dG9jb3JyZWN0aW9uRGF0YS0+Zm9udFRyYWl0
cyA9IHRyYWl0czsKLSAgICBhdXRvY29ycmVjdGlvbkRhdGEtPnRleHRGaXJzdFJlY3QgPSBmaXJz
dFJlY3Q7Ci0gICAgYXV0b2NvcnJlY3Rpb25EYXRhLT50ZXh0TGFzdFJlY3QgPSBsYXN0UmVjdDsK
LQotICAgIGF1dG9jb3JyZWN0aW9uRGF0YS0+YXV0b2NvcnJlY3Rpb25IYW5kbGVyKHJlY3RzLnNp
emUoKSA/IFtXS0F1dG9jb3JyZWN0aW9uUmVjdHMgYXV0b2NvcnJlY3Rpb25SZWN0c1dpdGhSZWN0
czpmaXJzdFJlY3QgbGFzdFJlY3Q6bGFzdFJlY3RdIDogbmlsKTsKLSAgICBbYXV0b2NvcnJlY3Rp
b25EYXRhLT5hdXRvY29ycmVjdGlvbkhhbmRsZXIgcmVsZWFzZV07Ci0gICAgYXV0b2NvcnJlY3Rp
b25EYXRhLT5hdXRvY29ycmVjdGlvbkhhbmRsZXIgPSBuaWw7Ci19Ci0KIC8vIFRoZSBjb21wbGV0
aW9uIGhhbmRsZXIgY2FuIHBhc3MgbmlsIGlmIGlucHV0IGRvZXMgbm90IG1hdGNoIHRoZSBhY3R1
YWwgdGV4dCBwcmVjZWRpbmcgdGhlIGluc2VydGlvbiBwb2ludC4KIC0gKHZvaWQpcmVxdWVzdEF1
dG9jb3JyZWN0aW9uUmVjdHNGb3JTdHJpbmc6KE5TU3RyaW5nICopaW5wdXQgd2l0aENvbXBsZXRp
b25IYW5kbGVyOih2b2lkICheKShVSVdLQXV0b2NvcnJlY3Rpb25SZWN0cyAqcmVjdHNGb3JJbnB1
dCkpY29tcGxldGlvbkhhbmRsZXIKIHsKQEAgLTExNjIsNyArMTEzNiwyNSBAQCAtICh2b2lkKXJl
cXVlc3RBdXRvY29ycmVjdGlvblJlY3RzRm9yU3RyCiAgICAgICAgIHJldHVybjsKICAgICB9CiAg
ICAgX2F1dG9jb3JyZWN0aW9uRGF0YS5hdXRvY29ycmVjdGlvbkhhbmRsZXIgPSBbY29tcGxldGlv
bkhhbmRsZXIgY29weV07Ci0gICAgX3BhZ2UtPnJlcXVlc3RBdXRvY29ycmVjdGlvbkRhdGEoaW5w
dXQsIEF1dG9jb3JyZWN0aW9uRGF0YUNhbGxiYWNrOjpjcmVhdGUoc2VsZiwgYXV0b2NvcnJlY3Rp
b25EYXRhKSk7CisgICAgX3BhZ2UtPnJlcXVlc3RBdXRvY29ycmVjdGlvbkRhdGEoaW5wdXQsIEF1
dG9jb3JyZWN0aW9uRGF0YUNhbGxiYWNrOjpjcmVhdGUoW3NlbGYsIGNvbXBsZXRpb25IYW5kbGVy
XShib29sLCBjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGNvbnN0IFN0cmluZyYgZm9u
dE5hbWUsIGRvdWJsZSBmb250U2l6ZSwgdWludDY0X3QgdHJhaXRzKSB7CisgICAgICAgIENHUmVj
dCBmaXJzdFJlY3QgPSBDR1JlY3RaZXJvOworICAgICAgICBDR1JlY3QgbGFzdFJlY3QgPSBDR1Jl
Y3RaZXJvOworICAgICAgICBpZiAocmVjdHMuc2l6ZSgpKSB7CisgICAgICAgICAgICBmaXJzdFJl
Y3QgPSByZWN0c1swXTsKKyAgICAgICAgICAgIGxhc3RSZWN0ID0gcmVjdHNbcmVjdHMuc2l6ZSgp
IC0gMV07CisgICAgICAgIH0KKworICAgICAgICBXS0F1dG9Db3JyZWN0aW9uRGF0YSAqYXV0b2Nv
cnJlY3Rpb25EYXRhID0gc2VsZi5hdXRvY29ycmVjdGlvbkRhdGE7CisgICAgICAgIGF1dG9jb3Jy
ZWN0aW9uRGF0YS0+Zm9udE5hbWUgPSBmb250TmFtZTsKKyAgICAgICAgYXV0b2NvcnJlY3Rpb25E
YXRhLT5mb250U2l6ZSA9IGZvbnRTaXplOworICAgICAgICBhdXRvY29ycmVjdGlvbkRhdGEtPmZv
bnRUcmFpdHMgPSB0cmFpdHM7CisgICAgICAgIGF1dG9jb3JyZWN0aW9uRGF0YS0+dGV4dEZpcnN0
UmVjdCA9IGZpcnN0UmVjdDsKKyAgICAgICAgYXV0b2NvcnJlY3Rpb25EYXRhLT50ZXh0TGFzdFJl
Y3QgPSBsYXN0UmVjdDsKKworICAgICAgICBhdXRvY29ycmVjdGlvbkRhdGEtPmF1dG9jb3JyZWN0
aW9uSGFuZGxlcihyZWN0cy5zaXplKCkgPyBbV0tBdXRvY29ycmVjdGlvblJlY3RzIGF1dG9jb3Jy
ZWN0aW9uUmVjdHNXaXRoUmVjdHM6Zmlyc3RSZWN0IGxhc3RSZWN0Omxhc3RSZWN0XSA6IG5pbCk7
CisgICAgICAgIFthdXRvY29ycmVjdGlvbkRhdGEtPmF1dG9jb3JyZWN0aW9uSGFuZGxlciByZWxl
YXNlXTsKKyAgICAgICAgYXV0b2NvcnJlY3Rpb25EYXRhLT5hdXRvY29ycmVjdGlvbkhhbmRsZXIg
PSBuaWw7CisgICAgfSkpOwogfQogCiAtIChDR1JlY3QpdGV4dEZpcnN0UmVjdApAQCAtMTE3NSwz
MCArMTE2NywxNyBAQCAtIChDR1JlY3QpdGV4dExhc3RSZWN0CiAgICAgcmV0dXJuIChfcGFnZS0+
ZWRpdG9yU3RhdGUoKS5oYXNDb21wb3NpdGlvbikgPyBfcGFnZS0+ZWRpdG9yU3RhdGUoKS5sYXN0
TWFya2VkUmVjdCA6IF9hdXRvY29ycmVjdGlvbkRhdGEudGV4dExhc3RSZWN0OwogfQogCi1zdGF0
aWMgdm9pZCBhdXRvY29ycmVjdGlvblJlc3VsdChXS1N0cmluZ1JlZiBjb3JyZWN0aW9uLCBXS0Vy
cm9yUmVmIGVycm9yLCB2b2lkKiBjb250ZXh0KQotewotICAgIFdLSW50ZXJhY3Rpb25WaWV3KiB2
aWV3ID0gc3RhdGljX2Nhc3Q8V0tJbnRlcmFjdGlvblZpZXcqPihjb250ZXh0KTsKLSAgICBBU1NF
UlQodmlldyk7Ci0gICAgV0tBdXRvQ29ycmVjdGlvbkRhdGEgKmF1dG9jb3JyZWN0aW9uRGF0YSA9
IHZpZXcuYXV0b2NvcnJlY3Rpb25EYXRhOwotCi0gICAgYXV0b2NvcnJlY3Rpb25EYXRhLT5hdXRv
Y29ycmVjdGlvbkhhbmRsZXIoY29ycmVjdGlvbiA/IFtXS0F1dG9jb3JyZWN0aW9uUmVjdHMgYXV0
b2NvcnJlY3Rpb25SZWN0c1dpdGhSZWN0czphdXRvY29ycmVjdGlvbkRhdGEtPnRleHRGaXJzdFJl
Y3QgbGFzdFJlY3Q6YXV0b2NvcnJlY3Rpb25EYXRhLT50ZXh0TGFzdFJlY3RdIDogbmlsKTsKLSAg
ICBbYXV0b2NvcnJlY3Rpb25EYXRhLT5hdXRvY29ycmVjdGlvbkhhbmRsZXIgcmVsZWFzZV07Ci0g
ICAgYXV0b2NvcnJlY3Rpb25EYXRhLT5hdXRvY29ycmVjdGlvbkhhbmRsZXIgPSBuaWw7Ci19Ci0K
IC8vIFRoZSBjb21wbGV0aW9uIGhhbmRsZXIgc2hvdWxkIHBhc3MgdGhlIHJlY3Qgb2YgdGhlIGNv
cnJlY3Rpb24gdGV4dCBhZnRlciByZXBsYWNpbmcgdGhlIGlucHV0IHRleHQsIG9yIG5pbCBpZiB0
aGUgcmVwbGFjZW1lbnQgY291bGQgbm90IGJlIHBlcmZvcm1lZC4KIC0gKHZvaWQpYXBwbHlBdXRv
Y29ycmVjdGlvbjooTlNTdHJpbmcgKiljb3JyZWN0aW9uIHRvU3RyaW5nOihOU1N0cmluZyAqKWlu
cHV0IHdpdGhDb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoVUlXS0F1dG9jb3JyZWN0aW9uUmVj
dHMgKnJlY3RzRm9yQ29ycmVjdGlvbikpY29tcGxldGlvbkhhbmRsZXIKIHsKICAgICBfYXV0b2Nv
cnJlY3Rpb25EYXRhLmF1dG9jb3JyZWN0aW9uSGFuZGxlciA9IFtjb21wbGV0aW9uSGFuZGxlciBj
b3B5XTsKLSAgICBfcGFnZS0+YXBwbHlBdXRvY29ycmVjdGlvbihjb3JyZWN0aW9uLCBpbnB1dCwg
U3RyaW5nQ2FsbGJhY2s6OmNyZWF0ZShzZWxmLCBhdXRvY29ycmVjdGlvblJlc3VsdCkpOwotfQor
ICAgIF9wYWdlLT5hcHBseUF1dG9jb3JyZWN0aW9uKGNvcnJlY3Rpb24sIGlucHV0LCBTdHJpbmdD
YWxsYmFjazo6Y3JlYXRlKFtzZWxmXShib29sIC8qZXJyb3IqLywgU3RyaW5nSW1wbCogc3RyaW5n
KSB7CisgICAgICAgIFdLQXV0b0NvcnJlY3Rpb25EYXRhICphdXRvY29ycmVjdGlvbkRhdGEgPSBz
ZWxmLmF1dG9jb3JyZWN0aW9uRGF0YTsKIAotc3RhdGljIHZvaWQgYXV0b2NvcnJlY3Rpb25Db250
ZXh0KGNvbnN0IFN0cmluZyYgYmVmb3JlVGV4dCwgY29uc3QgU3RyaW5nJiBtYXJrZWRUZXh0LCBj
b25zdCBTdHJpbmcmIHNlbGVjdGVkVGV4dCwgY29uc3QgU3RyaW5nJiBhZnRlclRleHQsIHVpbnQ2
NF90IGxvY2F0aW9uLCB1aW50NjRfdCBsZW5ndGgsIFdLRXJyb3JSZWYgZXJyb3IsIHZvaWQqIGNv
bnRleHQpCi17Ci0gICAgV0tJbnRlcmFjdGlvblZpZXcqIHZpZXcgPSBzdGF0aWNfY2FzdDxXS0lu
dGVyYWN0aW9uVmlldyo+KGNvbnRleHQpOwotICAgIEFTU0VSVCh2aWV3KTsKLSAgICBXS0F1dG9D
b3JyZWN0aW9uRGF0YSAqYXV0b2NvcnJlY3Rpb25EYXRhID0gdmlldy5hdXRvY29ycmVjdGlvbkRh
dGE7Ci0gICAgYXV0b2NvcnJlY3Rpb25EYXRhLT5hdXRvY29ycmVjdGlvbkNvbnRleHRIYW5kbGVy
KFtXS0F1dG9jb3JyZWN0aW9uQ29udGV4dCBhdXRvY29ycmVjdGlvbkNvbnRleHRXaXRoRGF0YTpi
ZWZvcmVUZXh0IG1hcmtlZFRleHQ6bWFya2VkVGV4dCBzZWxlY3RlZFRleHQ6c2VsZWN0ZWRUZXh0
IGFmdGVyVGV4dDphZnRlclRleHQgc2VsZWN0ZWRSYW5nZUluTWFya2VkVGV4dDpOU01ha2VSYW5n
ZShsb2NhdGlvbiwgbGVuZ3RoKV0pOworICAgICAgICBhdXRvY29ycmVjdGlvbkRhdGEtPmF1dG9j
b3JyZWN0aW9uSGFuZGxlcihzdHJpbmcgPyBbV0tBdXRvY29ycmVjdGlvblJlY3RzIGF1dG9jb3Jy
ZWN0aW9uUmVjdHNXaXRoUmVjdHM6YXV0b2NvcnJlY3Rpb25EYXRhLT50ZXh0Rmlyc3RSZWN0IGxh
c3RSZWN0OmF1dG9jb3JyZWN0aW9uRGF0YS0+dGV4dExhc3RSZWN0XSA6IG5pbCk7CisgICAgICAg
IFthdXRvY29ycmVjdGlvbkRhdGEtPmF1dG9jb3JyZWN0aW9uSGFuZGxlciByZWxlYXNlXTsKKyAg
ICAgICAgYXV0b2NvcnJlY3Rpb25EYXRhLT5hdXRvY29ycmVjdGlvbkhhbmRsZXIgPSBuaWw7Cisg
ICAgfSkpOwogfQogCiAtICh2b2lkKXJlcXVlc3RBdXRvY29ycmVjdGlvbkNvbnRleHRXaXRoQ29t
cGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKFVJV0tBdXRvY29ycmVjdGlvbkNvbnRleHQgKmF1dG9j
b3JyZWN0aW9uQ29udGV4dCkpY29tcGxldGlvbkhhbmRsZXIKQEAgLTEyMTcsNyArMTE5NiwxMCBA
QCAtICh2b2lkKXJlcXVlc3RBdXRvY29ycmVjdGlvbkNvbnRleHRXaXRoCiAgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKFtXS0F1dG9jb3JyZWN0aW9uQ29udGV4dCBhdXRvY29ycmVjdGlvbkNvbnRl
eHRXaXRoRGF0YTpiZWZvcmVUZXh0IG1hcmtlZFRleHQ6bWFya2VkVGV4dCBzZWxlY3RlZFRleHQ6
c2VsZWN0ZWRUZXh0IGFmdGVyVGV4dDphZnRlclRleHQgc2VsZWN0ZWRSYW5nZUluTWFya2VkVGV4
dDpOU01ha2VSYW5nZShsb2NhdGlvbiwgbGVuZ3RoKV0pOwogICAgIH0gZWxzZSB7CiAgICAgICAg
IF9hdXRvY29ycmVjdGlvbkRhdGEuYXV0b2NvcnJlY3Rpb25Db250ZXh0SGFuZGxlciA9IFtjb21w
bGV0aW9uSGFuZGxlciBjb3B5XTsKLSAgICAgICAgX3BhZ2UtPnJlcXVlc3RBdXRvY29ycmVjdGlv
bkNvbnRleHQoQXV0b2NvcnJlY3Rpb25Db250ZXh0Q2FsbGJhY2s6OmNyZWF0ZShzZWxmLCBhdXRv
Y29ycmVjdGlvbkNvbnRleHQpKTsKKyAgICAgICAgX3BhZ2UtPnJlcXVlc3RBdXRvY29ycmVjdGlv
bkNvbnRleHQoQXV0b2NvcnJlY3Rpb25Db250ZXh0Q2FsbGJhY2s6OmNyZWF0ZShbc2VsZiwgY29t
cGxldGlvbkhhbmRsZXJdKGJvb2wgLyplcnJvciovLCBjb25zdCBTdHJpbmcmIGJlZm9yZVRleHQs
IGNvbnN0IFN0cmluZyYgbWFya2VkVGV4dCwgY29uc3QgU3RyaW5nJiBzZWxlY3RlZFRleHQsIGNv
bnN0IFN0cmluZyYgYWZ0ZXJUZXh0LCB1aW50NjRfdCBsb2NhdGlvbiwgdWludDY0X3QgbGVuZ3Ro
KSB7CisgICAgICAgICAgICBXS0F1dG9Db3JyZWN0aW9uRGF0YSAqYXV0b2NvcnJlY3Rpb25EYXRh
ID0gc2VsZi5hdXRvY29ycmVjdGlvbkRhdGE7CisgICAgICAgICAgICBhdXRvY29ycmVjdGlvbkRh
dGEtPmF1dG9jb3JyZWN0aW9uQ29udGV4dEhhbmRsZXIoW1dLQXV0b2NvcnJlY3Rpb25Db250ZXh0
IGF1dG9jb3JyZWN0aW9uQ29udGV4dFdpdGhEYXRhOmJlZm9yZVRleHQgbWFya2VkVGV4dDptYXJr
ZWRUZXh0IHNlbGVjdGVkVGV4dDpzZWxlY3RlZFRleHQgYWZ0ZXJUZXh0OmFmdGVyVGV4dCBzZWxl
Y3RlZFJhbmdlSW5NYXJrZWRUZXh0Ok5TTWFrZVJhbmdlKGxvY2F0aW9uLCBsZW5ndGgpXSk7Cisg
ICAgICAgIH0pKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvbWFjL1dLUHJpbnRpbmdWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvbWFjL1dLUHJpbnRpbmdWaWV3Lm1tCShyZXZpc2lvbiAxNjQzNTUpCisrKyBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ByaW50aW5nVmlldy5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMjA3LDExICsyMDcsMTAgQEAgc3RydWN0IElQQ0NhbGxiYWNrQ29udGV4dCB7
CiAgICAgdWludDY0X3QgY2FsbGJhY2tJRDsKIH07CiAKLXN0YXRpYyB2b2lkIHBhZ2VEaWREcmF3
VG9JbWFnZShjb25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYgaW1hZ2VIYW5kbGUsIFdLRXJy
b3JSZWYsIHZvaWQqIHVudHlwZWRDb250ZXh0KQorc3RhdGljIHZvaWQgcGFnZURpZERyYXdUb0lt
YWdlKGNvbnN0IFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiBpbWFnZUhhbmRsZSwgSVBDQ2FsbGJh
Y2tDb250ZXh0KiBjb250ZXh0KQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAK
LSAgICBPd25QdHI8SVBDQ2FsbGJhY2tDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRQdHIoc3RhdGlj
X2Nhc3Q8SVBDQ2FsbGJhY2tDb250ZXh0Kj4odW50eXBlZENvbnRleHQpKTsKICAgICBXS1ByaW50
aW5nVmlldyAqdmlldyA9IGNvbnRleHQtPnZpZXcuZ2V0KCk7CiAKICAgICAvLyBJZiB0aGUgdXNl
ciBoYXMgYWxyZWFkeSBjaGFuZ2VkIHByaW50IHNldHVwLCB0aGVuIHRoaXMgcmVzcG9uc2UgaXMg
b2Jzb2xldGUuIEFuZCBpZiB0aGlzIGNhbGxiYWNrIGlzIG5vdCBpbiByZXNwb25zZSB0byB0aGUg
bGF0ZXN0IHJlcXVlc3QsCkBAIC0yMzYsMjUgKzIzNSw2IEBAIHN0YXRpYyB2b2lkIHBhZ2VEaWRE
cmF3VG9JbWFnZShjb25zdCBTaGEKICAgICB9CiB9CiAKLXN0YXRpYyB2b2lkIHBhZ2VEaWREcmF3
VG9QREYoV0tEYXRhUmVmIGRhdGFSZWYsIFdLRXJyb3JSZWYsIHZvaWQqIHVudHlwZWRDb250ZXh0
KQotewotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBPd25QdHI8SVBDQ2Fs
bGJhY2tDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRQdHIoc3RhdGljX2Nhc3Q8SVBDQ2FsbGJhY2tD
b250ZXh0Kj4odW50eXBlZENvbnRleHQpKTsKLSAgICBXS1ByaW50aW5nVmlldyAqdmlldyA9IGNv
bnRleHQtPnZpZXcuZ2V0KCk7Ci0gICAgQVBJOjpEYXRhKiBkYXRhID0gdG9JbXBsKGRhdGFSZWYp
OwotCi0gICAgaWYgKGNvbnRleHQtPmNhbGxiYWNrSUQgPT0gdmlldy0+X2V4cGVjdGVkUHJpbnRD
YWxsYmFjaykgewotICAgICAgICBBU1NFUlQoIVt2aWV3IF9pc1ByaW50aW5nUHJldmlld10pOwot
ICAgICAgICBBU1NFUlQodmlldy0+X3ByaW50ZWRQYWdlc0RhdGEuaXNFbXB0eSgpKTsKLSAgICAg
ICAgQVNTRVJUKCF2aWV3LT5fcHJpbnRlZFBhZ2VzUERGRG9jdW1lbnQpOwotICAgICAgICBpZiAo
ZGF0YSkKLSAgICAgICAgICAgIHZpZXctPl9wcmludGVkUGFnZXNEYXRhLmFwcGVuZChkYXRhLT5i
eXRlcygpLCBkYXRhLT5zaXplKCkpOwotICAgICAgICB2aWV3LT5fZXhwZWN0ZWRQcmludENhbGxi
YWNrID0gMDsKLSAgICAgICAgdmlldy0+X3ByaW50aW5nQ2FsbGJhY2tDb25kaXRpb24ubm90aWZ5
X29uZSgpOwotICAgIH0KLX0KLQogLSAodm9pZClfcHJlcGFyZVBERkRhdGFGb3JQcmludGluZ09u
U2Vjb25kYXJ5VGhyZWFkCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKQEAgLTI4
Myw3ICsyNjMsMjIgQEAgLSAodm9pZClfcHJlcGFyZVBERkRhdGFGb3JQcmludGluZ09uU2Vjbwog
ICAgIF93ZWJGcmFtZS0+cGFnZSgpLT5iZWdpblByaW50aW5nKF93ZWJGcmFtZS5nZXQoKSwgcHJp
bnRJbmZvKTsKIAogICAgIElQQ0NhbGxiYWNrQ29udGV4dCogY29udGV4dCA9IG5ldyBJUENDYWxs
YmFja0NvbnRleHQ7Ci0gICAgUmVmUHRyPERhdGFDYWxsYmFjaz4gY2FsbGJhY2sgPSBEYXRhQ2Fs
bGJhY2s6OmNyZWF0ZShjb250ZXh0LCBwYWdlRGlkRHJhd1RvUERGKTsKKyAgICBSZWZQdHI8RGF0
YUNhbGxiYWNrPiBjYWxsYmFjayA9IERhdGFDYWxsYmFjazo6Y3JlYXRlKFtjb250ZXh0XShib29s
LCBBUEk6OkRhdGEqIGRhdGEpIHsKKyAgICAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsK
KworICAgICAgICBPd25QdHI8SVBDQ2FsbGJhY2tDb250ZXh0PiBjb250ZXh0RGVsZXRlciA9IGFk
b3B0UHRyKGNvbnRleHQpOworICAgICAgICBXS1ByaW50aW5nVmlldyAqdmlldyA9IGNvbnRleHQt
PnZpZXcuZ2V0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQtPmNhbGxiYWNrSUQgPT0gdmlldy0+
X2V4cGVjdGVkUHJpbnRDYWxsYmFjaykgeworICAgICAgICAgICAgQVNTRVJUKCFbdmlldyBfaXNQ
cmludGluZ1ByZXZpZXddKTsKKyAgICAgICAgICAgIEFTU0VSVCh2aWV3LT5fcHJpbnRlZFBhZ2Vz
RGF0YS5pc0VtcHR5KCkpOworICAgICAgICAgICAgQVNTRVJUKCF2aWV3LT5fcHJpbnRlZFBhZ2Vz
UERGRG9jdW1lbnQpOworICAgICAgICAgICAgaWYgKGRhdGEpCisgICAgICAgICAgICAgICAgdmll
dy0+X3ByaW50ZWRQYWdlc0RhdGEuYXBwZW5kKGRhdGEtPmJ5dGVzKCksIGRhdGEtPnNpemUoKSk7
CisgICAgICAgICAgICB2aWV3LT5fZXhwZWN0ZWRQcmludENhbGxiYWNrID0gMDsKKyAgICAgICAg
ICAgIHZpZXctPl9wcmludGluZ0NhbGxiYWNrQ29uZGl0aW9uLm5vdGlmeV9vbmUoKTsKKyAgICAg
ICAgfQorICAgIH0pOwogICAgIF9leHBlY3RlZFByaW50Q2FsbGJhY2sgPSBjYWxsYmFjay0+Y2Fs
bGJhY2tJRCgpOwogCiAgICAgY29udGV4dC0+dmlldyA9IHNlbGY7CkBAIC0yOTIsMTEgKzI4Nywx
MCBAQCAtICh2b2lkKV9wcmVwYXJlUERGRGF0YUZvclByaW50aW5nT25TZWNvCiAgICAgX3dlYkZy
YW1lLT5wYWdlKCktPmRyYXdQYWdlc1RvUERGKF93ZWJGcmFtZS5nZXQoKSwgcHJpbnRJbmZvLCBm
aXJzdFBhZ2UgLSAxLCBsYXN0UGFnZSAtIGZpcnN0UGFnZSArIDEsIGNhbGxiYWNrLmdldCgpKTsK
IH0KIAotc3RhdGljIHZvaWQgcGFnZURpZENvbXB1dGVQYWdlUmVjdHMoY29uc3QgVmVjdG9yPFdl
YkNvcmU6OkludFJlY3Q+JiBwYWdlUmVjdHMsIGRvdWJsZSB0b3RhbFNjYWxlRmFjdG9yRm9yUHJp
bnRpbmcsIFdLRXJyb3JSZWYsIHZvaWQqIHVudHlwZWRDb250ZXh0KQorc3RhdGljIHZvaWQgcGFn
ZURpZENvbXB1dGVQYWdlUmVjdHMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkludFJlY3Q+JiBwYWdl
UmVjdHMsIGRvdWJsZSB0b3RhbFNjYWxlRmFjdG9yRm9yUHJpbnRpbmcsIElQQ0NhbGxiYWNrQ29u
dGV4dCogY29udGV4dCkKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAg
T3duUHRyPElQQ0NhbGxiYWNrQ29udGV4dD4gY29udGV4dCA9IGFkb3B0UHRyKHN0YXRpY19jYXN0
PElQQ0NhbGxiYWNrQ29udGV4dCo+KHVudHlwZWRDb250ZXh0KSk7CiAgICAgV0tQcmludGluZ1Zp
ZXcgKnZpZXcgPSBjb250ZXh0LT52aWV3LmdldCgpOwogCiAgICAgLy8gSWYgdGhlIHVzZXIgaGFz
IGFscmVhZHkgY2hhbmdlZCBwcmludCBzZXR1cCwgdGhlbiB0aGlzIHJlc3BvbnNlIGlzIG9ic29s
ZXRlLgpAQCAtMzQ0LDcgKzMzOCwxMCBAQCAtIChCT09MKV9hc2tQYWdlVG9Db21wdXRlUGFnZVJl
Y3RzCiAgICAgQVNTRVJUKCFfZXhwZWN0ZWRDb21wdXRlZFBhZ2VzQ2FsbGJhY2spOwogCiAgICAg
SVBDQ2FsbGJhY2tDb250ZXh0KiBjb250ZXh0ID0gbmV3IElQQ0NhbGxiYWNrQ29udGV4dDsKLSAg
ICBSZWZQdHI8Q29tcHV0ZWRQYWdlc0NhbGxiYWNrPiBjYWxsYmFjayA9IENvbXB1dGVkUGFnZXND
YWxsYmFjazo6Y3JlYXRlKGNvbnRleHQsIHBhZ2VEaWRDb21wdXRlUGFnZVJlY3RzKTsKKyAgICBS
ZWZQdHI8Q29tcHV0ZWRQYWdlc0NhbGxiYWNrPiBjYWxsYmFjayA9IENvbXB1dGVkUGFnZXNDYWxs
YmFjazo6Y3JlYXRlKFtjb250ZXh0XShib29sLCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6SW50UmVj
dD4mIHBhZ2VSZWN0cywgZG91YmxlIHRvdGFsU2NhbGVGYWN0b3JGb3JQcmludGluZykgeworICAg
ICAgICBPd25QdHI8SVBDQ2FsbGJhY2tDb250ZXh0PiBjb250ZXh0RGVsZXRlciA9IGFkb3B0UHRy
KGNvbnRleHQpOworICAgICAgICBwYWdlRGlkQ29tcHV0ZVBhZ2VSZWN0cyhwYWdlUmVjdHMsIHRv
dGFsU2NhbGVGYWN0b3JGb3JQcmludGluZywgY29udGV4dCk7CisgICAgfSk7CiAgICAgX2V4cGVj
dGVkQ29tcHV0ZWRQYWdlc0NhbGxiYWNrID0gY2FsbGJhY2stPmNhbGxiYWNrSUQoKTsKICAgICBj
b250ZXh0LT52aWV3ID0gc2VsZjsKICAgICBjb250ZXh0LT5jYWxsYmFja0lEID0gX2V4cGVjdGVk
Q29tcHV0ZWRQYWdlc0NhbGxiYWNrOwpAQCAtNDkzLDcgKzQ5MCwxMCBAQCAtICh2b2lkKV9kcmF3
UHJldmlldzooTlNSZWN0KW5zUmVjdAogICAgICAgICAgICAgICAgIF93ZWJGcmFtZS0+cGFnZSgp
LT5iZWdpblByaW50aW5nKF93ZWJGcmFtZS5nZXQoKSwgUHJpbnRJbmZvKFtfcHJpbnRPcGVyYXRp
b24gcHJpbnRJbmZvXSkpOwogCiAgICAgICAgICAgICAgICAgSVBDQ2FsbGJhY2tDb250ZXh0KiBj
b250ZXh0ID0gbmV3IElQQ0NhbGxiYWNrQ29udGV4dDsKLSAgICAgICAgICAgICAgICBSZWZQdHI8
SW1hZ2VDYWxsYmFjaz4gY2FsbGJhY2sgPSBJbWFnZUNhbGxiYWNrOjpjcmVhdGUoY29udGV4dCwg
cGFnZURpZERyYXdUb0ltYWdlKTsKKyAgICAgICAgICAgICAgICBSZWZQdHI8SW1hZ2VDYWxsYmFj
az4gY2FsbGJhY2sgPSBJbWFnZUNhbGxiYWNrOjpjcmVhdGUoW2NvbnRleHRdKGJvb2wsIGNvbnN0
IFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiBpbWFnZUhhbmRsZSkgeworICAgICAgICAgICAgICAg
ICAgICBPd25QdHI8SVBDQ2FsbGJhY2tDb250ZXh0PiBjb250ZXh0RGVsZXRlciA9IGFkb3B0UHRy
KGNvbnRleHQpOworICAgICAgICAgICAgICAgICAgICBwYWdlRGlkRHJhd1RvSW1hZ2UoaW1hZ2VI
YW5kbGUsIGNvbnRleHQpOworICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgIF9s
YXRlc3RFeHBlY3RlZFByZXZpZXdDYWxsYmFjayA9IGNhbGxiYWNrLT5jYWxsYmFja0lEKCk7CiAg
ICAgICAgICAgICAgICAgX2V4cGVjdGVkUHJldmlld0NhbGxiYWNrcy5hZGQoX2xhdGVzdEV4cGVj
dGVkUHJldmlld0NhbGxiYWNrLCBzY2FsZWRQcmludGluZ1JlY3QpOwogCkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCShyZXZpc2lvbiAxNjQzNTUpCisr
KyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTcyOCwxOCArNzI4LDYgQEAgc3RhdGljIE5TVG9vbGJhckl0ZW0gKnRvb2xiYXJJdGVt
KGlkIDxOUwogICAgIHJldHVybiAoTlNUb29sYmFySXRlbSAqKWl0ZW07CiB9CiAKLXN0YXRpYyB2
b2lkIHZhbGlkYXRlQ29tbWFuZENhbGxiYWNrKFdLU3RyaW5nUmVmIGNvbW1hbmROYW1lLCBib29s
IGlzRW5hYmxlZCwgaW50MzJfdCBzdGF0ZSwgV0tFcnJvclJlZiBlcnJvciwgdm9pZCogY29udGV4
dCkKLXsKLSAgICAvLyBJZiB0aGUgcHJvY2VzcyBleGl0cyBiZWZvcmUgdGhlIGNvbW1hbmQgY2Fu
IGJlIHZhbGlkYXRlZCwgd2UnbGwgYmUgY2FsbGVkIGJhY2sgd2l0aCBhbiBlcnJvci4KLSAgICBp
ZiAoZXJyb3IpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBXS1ZpZXcqIHdrVmlldyA9IHN0
YXRpY19jYXN0PFdLVmlldyo+KGNvbnRleHQpOwotICAgIEFTU0VSVCh3a1ZpZXcpOwotICAgIAot
ICAgIFt3a1ZpZXcgX3NldFVzZXJJbnRlcmZhY2VJdGVtU3RhdGU6bnNTdHJpbmdGcm9tV2ViQ29y
ZVN0cmluZyh0b0ltcGwoY29tbWFuZE5hbWUpLT5zdHJpbmcoKSkgZW5hYmxlZDppc0VuYWJsZWQg
c3RhdGU6c3RhdGVdOwotfQotCiAtIChCT09MKXZhbGlkYXRlVXNlckludGVyZmFjZUl0ZW06KGlk
IDxOU1ZhbGlkYXRlZFVzZXJJbnRlcmZhY2VJdGVtPilpdGVtCiB7CiAgICAgU0VMIGFjdGlvbiA9
IFtpdGVtIGFjdGlvbl07CkBAIC04MzEsNyArODE5LDEzIEBAIC0gKEJPT0wpdmFsaWRhdGVVc2Vy
SW50ZXJmYWNlSXRlbTooaWQgPE4KICAgICAgICAgLy8gSWYgd2UgYXJlIG5vdCBhbHJlYWR5IGF3
YWl0aW5nIHZhbGlkYXRpb24gZm9yIHRoaXMgY29tbWFuZCwgc3RhcnQgdGhlIGFzeW5jaHJvbm91
cyB2YWxpZGF0aW9uIHByb2Nlc3MuCiAgICAgICAgIC8vIEZJWE1FOiBUaGVvcmV0aWNhbGx5LCB0
aGVyZSBpcyBhIHJhY2UgaGVyZTsgd2hlbiB3ZSBnZXQgdGhlIGFuc3dlciBpdCBtaWdodCBiZSBv
bGQsIGZyb20gYSBwcmV2aW91cyB0aW1lCiAgICAgICAgIC8vIHdlIGFza2VkIGZvciB0aGUgc2Ft
ZSBjb21tYW5kOyB0aGVyZSBpcyBubyBndWFyYW50ZWUgdGhlIGFuc3dlciBpcyBzdGlsbCB2YWxp
ZC4KLSAgICAgICAgX2RhdGEtPl9wYWdlLT52YWxpZGF0ZUNvbW1hbmQoY29tbWFuZE5hbWUsIFZh
bGlkYXRlQ29tbWFuZENhbGxiYWNrOjpjcmVhdGUoc2VsZiwgdmFsaWRhdGVDb21tYW5kQ2FsbGJh
Y2spKTsKKyAgICAgICAgX2RhdGEtPl9wYWdlLT52YWxpZGF0ZUNvbW1hbmQoY29tbWFuZE5hbWUs
IFZhbGlkYXRlQ29tbWFuZENhbGxiYWNrOjpjcmVhdGUoW3NlbGZdKGJvb2wgZXJyb3IsIFN0cmlu
Z0ltcGwqIGNvbW1hbmROYW1lLCBib29sIGlzRW5hYmxlZCwgaW50MzJfdCBzdGF0ZSkgeworICAg
ICAgICAgICAgLy8gSWYgdGhlIHByb2Nlc3MgZXhpdHMgYmVmb3JlIHRoZSBjb21tYW5kIGNhbiBi
ZSB2YWxpZGF0ZWQsIHdlJ2xsIGJlIGNhbGxlZCBiYWNrIHdpdGggYW4gZXJyb3IuCisgICAgICAg
ICAgICBpZiAoZXJyb3IpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBbc2VsZiBfc2V0VXNlckludGVyZmFjZUl0ZW1TdGF0ZTpuc1N0cmluZ0Zyb21X
ZWJDb3JlU3RyaW5nKGNvbW1hbmROYW1lKSBlbmFibGVkOmlzRW5hYmxlZCBzdGF0ZTpzdGF0ZV07
CisgICAgICAgIH0pKTsKICAgICB9CiAKICAgICAvLyBUcmVhdCBhcyBlbmFibGVkIHVudGlsIHdl
IGdldCB0aGUgcmVzdWx0IGJhY2sgZnJvbSB0aGUgd2ViIHByb2Nlc3MgYW5kIF9zZXRVc2VySW50
ZXJmYWNlSXRlbVN0YXRlIGlzIGNhbGxlZC4KQEAgLTg0MCwyMCArODM0LDE2IEBAIC0gKEJPT0wp
dmFsaWRhdGVVc2VySW50ZXJmYWNlSXRlbTooaWQgPE4KICAgICByZXR1cm4gWUVTOwogfQogCi1z
dGF0aWMgdm9pZCBzcGVha1N0cmluZyhXS1N0cmluZ1JlZiBzdHJpbmcsIFdLRXJyb3JSZWYgZXJy
b3IsIHZvaWQqKQotewotICAgIGlmIChlcnJvcikKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICgh
c3RyaW5nKQotICAgICAgICByZXR1cm47Ci0KLSAgICBOU1N0cmluZyAqY29udmVydGVkU3RyaW5n
ID0gdG9JbXBsKHN0cmluZyktPnN0cmluZygpOwotICAgIFtOU0FwcCBzcGVha1N0cmluZzpjb252
ZXJ0ZWRTdHJpbmddOwotfQotCiAtIChJQkFjdGlvbilzdGFydFNwZWFraW5nOihpZClzZW5kZXIK
IHsKLSAgICBfZGF0YS0+X3BhZ2UtPmdldFNlbGVjdGlvbk9yQ29udGVudHNBc1N0cmluZyhTdHJp
bmdDYWxsYmFjazo6Y3JlYXRlKDAsIHNwZWFrU3RyaW5nKSk7CisgICAgX2RhdGEtPl9wYWdlLT5n
ZXRTZWxlY3Rpb25PckNvbnRlbnRzQXNTdHJpbmcoU3RyaW5nQ2FsbGJhY2s6OmNyZWF0ZShbc2Vs
Zl0oYm9vbCBlcnJvciwgU3RyaW5nSW1wbCogc3RyaW5nKSB7CisgICAgICAgIGlmIChlcnJvcikK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKCFzdHJpbmcpCisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgW05TQXBwIHNwZWFrU3RyaW5nOipzdHJpbmddOworICAgIH0pKTsK
IH0KIAogLSAoSUJBY3Rpb24pc3RvcFNwZWFraW5nOihpZClzZW5kZXIKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL1dlYlBsdWdpblNpdGVEYXRhTWFuYWdlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL1dlYlBsdWdpblNpdGVE
YXRhTWFuYWdlci5oCShyZXZpc2lvbiAxNjQzNTUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvUGx1Z2lucy9XZWJQbHVnaW5TaXRlRGF0YU1hbmFnZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MzksNyArMzksNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNzIFdlYkNvbnRleHQ7CiBjbGFz
cyBXZWJQcm9jZXNzUHJveHk7CiAKLXR5cGVkZWYgR2VuZXJpY0NhbGxiYWNrPFdLQXJyYXlSZWY+
IEFycmF5Q2FsbGJhY2s7Cit0eXBlZGVmIEdlbmVyaWNDYWxsYmFjazxBUEk6OkFycmF5Kj4gQXJy
YXlDYWxsYmFjazsKIAogY2xhc3MgV2ViUGx1Z2luU2l0ZURhdGFNYW5hZ2VyIDogcHVibGljIEFQ
STo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6UGx1Z2luU2l0ZURhdGFNYW5hZ2VyPiB7
CiBwdWJsaWM6CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dLRnVsbFNjcmVl
bldpbmRvd0NvbnRyb2xsZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL21hYy9XS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLm1tCShyZXZpc2lvbiAxNjQzNTUp
CisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dLRnVsbFNjcmVlbldpbmRvd0NvbnRy
b2xsZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTM2Nyw4ICszNjcsNiBAQCAtICh2b2lkKWJlZ2Fu
RXhpdEZ1bGxTY3JlZW5XaXRoSW5pdGlhbEZyCiAgICAgW1tzZWxmIHdpbmRvd10gZXhpdEZ1bGxT
Y3JlZW5Nb2RlOnNlbGZdOwogfQogCi1zdGF0aWMgdm9pZCBjb21wbGV0ZUZpbmlzaEV4aXRGdWxs
U2NyZWVuQW5pbWF0aW9uQWZ0ZXJSZXBhaW50KFdLRXJyb3JSZWYsIHZvaWQqKTsKLQogLSAodm9p
ZClmaW5pc2hlZEV4aXRGdWxsU2NyZWVuQW5pbWF0aW9uOihib29sKWNvbXBsZXRlZAogewogICAg
IGlmIChfZnVsbFNjcmVlblN0YXRlICE9IEV4aXRpbmdGdWxsU2NyZWVuKQpAQCAtNDExLDcgKzQw
OSw5IEBAIC0gKHZvaWQpZmluaXNoZWRFeGl0RnVsbFNjcmVlbkFuaW1hdGlvbjoKICAgICAgICAg
Ly8gY2xlYXJzIF9yZXBhaW50Q2FsbGJhY2suCiAgICAgICAgIEFTU0VSVCghX3JlcGFpbnRDYWxs
YmFjayk7CiAgICAgfQotICAgIF9yZXBhaW50Q2FsbGJhY2sgPSBWb2lkQ2FsbGJhY2s6OmNyZWF0
ZShzZWxmLCBjb21wbGV0ZUZpbmlzaEV4aXRGdWxsU2NyZWVuQW5pbWF0aW9uQWZ0ZXJSZXBhaW50
KTsKKyAgICBfcmVwYWludENhbGxiYWNrID0gVm9pZENhbGxiYWNrOjpjcmVhdGUoW3NlbGZdKGJv
b2wpIHsKKyAgICAgICAgW3NlbGYgY29tcGxldGVGaW5pc2hFeGl0RnVsbFNjcmVlbkFuaW1hdGlv
bkFmdGVyUmVwYWludF07CisgICAgfSk7CiAgICAgW3NlbGYgX3BhZ2VdLT5mb3JjZVJlcGFpbnQo
X3JlcGFpbnRDYWxsYmFjayk7CiB9CiAKQEAgLTQyMywxMSArNDIzLDYgQEAgLSAodm9pZCljb21w
bGV0ZUZpbmlzaEV4aXRGdWxsU2NyZWVuQW5pbQogICAgIE5TRW5hYmxlU2NyZWVuVXBkYXRlcygp
OwogfQogCi1zdGF0aWMgdm9pZCBjb21wbGV0ZUZpbmlzaEV4aXRGdWxsU2NyZWVuQW5pbWF0aW9u
QWZ0ZXJSZXBhaW50KFdLRXJyb3JSZWYsIHZvaWQqIF9zZWxmKQotewotICAgIFsoV0tGdWxsU2Ny
ZWVuV2luZG93Q29udHJvbGxlciopX3NlbGYgY29tcGxldGVGaW5pc2hFeGl0RnVsbFNjcmVlbkFu
aW1hdGlvbkFmdGVyUmVwYWludF07Ci19Ci0KIC0gKHZvaWQpcGVyZm9ybUNsb3NlOihpZClzZW5k
ZXIKIHsKICAgICBpZiAoW3NlbGYgaXNGdWxsU2NyZWVuXSkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>224599</attachid>
            <date>2014-02-18 23:38:34 -0800</date>
            <delta_ts>2014-02-19 16:42:10 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>Callback.txt</filename>
            <type>text/plain</type>
            <size>85918</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2NDM1NykKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0NyBAQAorMjAxNC0wMi0xOCAgQWxleGV5
IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KKworICAgICAgICBbV0syXSBJUEMgY2FsbGJh
Y2sgY2xhc3NlcyBzaG91bGQgbm90IGJlIHRpZ2h0bHkgY291cGxlZCB0byBDIEFQSQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI5MDMwCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2hhbmdlZCBDYWxsYmFj
a0Jhc2Ugc3ViY2xhc3NlcyB0byB0YWtlIGFuIHN0ZDo6ZnVuY3Rpb24gKHdpdGggY29udGV4dCBj
YXB0dXJlZCBpbnNpZGUpLgorICAgICAgICBJbnN0ZWFkIG9mIEMgQVBJIG9iamVjdHMsIHRoZXNl
IGNhbGxiYWNrIGZ1bmN0aW9ucyB0YWtlIGltcGxlbWVudGF0aW9uIG9uZXMuCisgICAgICAgIFRo
ZXJlIGFyZSBWb2lkQVBJQ2FsbGJhY2sgYW5kIEdlbmVyaWNBUElDYWxsYmFjayBoZWxwZXJzIGZv
ciB0aGUgY29tbW9uIGNhc2Ugb2YgQyBBUEkuCisKKyAgICAgICAgKiBTaGFyZWQvU2VjdXJpdHlP
cmlnaW5EYXRhLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLQXBwbGljYXRpb25DYWNo
ZU1hbmFnZXIuY3BwOgorICAgICAgICAoV0tBcHBsaWNhdGlvbkNhY2hlTWFuYWdlckdldEFwcGxp
Y2F0aW9uQ2FjaGVPcmlnaW5zKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0
LmNwcDoKKyAgICAgICAgKFdLQ29udGV4dEdldFN0YXRpc3RpY3MpOgorICAgICAgICAoV0tDb250
ZXh0R2V0U3RhdGlzdGljc1dpdGhPcHRpb25zKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0Mv
V0tDb29raWVNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdLQ29va2llTWFuYWdlckdldEhvc3RuYW1l
c1dpdGhDb29raWVzKToKKyAgICAgICAgKFdLQ29va2llTWFuYWdlckdldEhUVFBDb29raWVBY2Nl
cHRQb2xpY3kpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0RhdGFiYXNlTWFuYWdlci5j
cHA6CisgICAgICAgIChXS0RhdGFiYXNlTWFuYWdlckdldERhdGFiYXNlc0J5T3JpZ2luKToKKyAg
ICAgICAgKFdLRGF0YWJhc2VNYW5hZ2VyR2V0RGF0YWJhc2VPcmlnaW5zKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL0MvV0tGcmFtZS5jcHA6CisgICAgICAgIChXS0ZyYW1lR2V0TWFpblJlc291
cmNlRGF0YSk6CisgICAgICAgIChXS0ZyYW1lR2V0UmVzb3VyY2VEYXRhKToKKyAgICAgICAgKFdL
RnJhbWVHZXRXZWJBcmNoaXZlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tLZXlWYWx1
ZVN0b3JhZ2VNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdLS2V5VmFsdWVTdG9yYWdlTWFuYWdlckdl
dEtleVZhbHVlU3RvcmFnZU9yaWdpbnMpOgorICAgICAgICAoV0tLZXlWYWx1ZVN0b3JhZ2VNYW5h
Z2VyR2V0U3RvcmFnZURldGFpbHNCeU9yaWdpbik6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9D
L1dLTWVkaWFDYWNoZU1hbmFnZXIuY3BwOgorICAgICAgICAoV0tNZWRpYUNhY2hlTWFuYWdlckdl
dEhvc3RuYW1lc1dpdGhNZWRpYUNhY2hlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tP
cmlnaW5EYXRhTWFuYWdlci5jcHA6CisgICAgICAgIChXS09yaWdpbkRhdGFNYW5hZ2VyR2V0T3Jp
Z2lucyk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHA6CisgICAgICAgIChX
S1BhZ2VSdW5KYXZhU2NyaXB0SW5NYWluRnJhbWUpOgorICAgICAgICAoV0tQYWdlUmVuZGVyVHJl
ZUV4dGVybmFsUmVwcmVzZW50YXRpb24pOgorICAgICAgICAoV0tQYWdlR2V0U291cmNlRm9yRnJh
bWUpOgorICAgICAgICAoV0tQYWdlR2V0Q29udGVudHNBc1N0cmluZyk6CisgICAgICAgIChXS1Bh
Z2VHZXRTZWxlY3Rpb25Bc1dlYkFyY2hpdmVEYXRhKToKKyAgICAgICAgKFdLUGFnZUdldENvbnRl
bnRzQXNNSFRNTERhdGEpOgorICAgICAgICAoV0tQYWdlRm9yY2VSZXBhaW50KToKKyAgICAgICAg
KFdLUGFnZVZhbGlkYXRlQ29tbWFuZCk6CisgICAgICAgIChXS1BhZ2VDb21wdXRlUGFnZXNGb3JQ
cmludGluZyk6CisgICAgICAgIChXS1BhZ2VEcmF3UGFnZXNUb1BERik6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9DL1dLUGx1Z2luU2l0ZURhdGFNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdLUGx1
Z2luU2l0ZURhdGFNYW5hZ2VyR2V0U2l0ZXNXaXRoRGF0YSk6CisgICAgICAgIChXS1BsdWdpblNp
dGVEYXRhTWFuYWdlckNsZWFyU2l0ZURhdGEpOgorICAgICAgICAoV0tQbHVnaW5TaXRlRGF0YU1h
bmFnZXJDbGVhckFsbFNpdGVEYXRhKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tSZXNv
dXJjZUNhY2hlTWFuYWdlci5jcHA6CisgICAgICAgIChXS1Jlc291cmNlQ2FjaGVNYW5hZ2VyR2V0
Q2FjaGVPcmlnaW5zKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb29raWVN
YW5hZ2VyLmNwcDoKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfYWNjZXB0X3Bv
bGljeSk6CisgICAgICAgICh3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2RvbWFpbnNfd2l0aF9j
b29raWVzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQcmludE9wZXJhdGlv
bi5jcHA6CisgICAgICAgIChkcmF3UGFnZXNGb3JQcmludGluZ0NvbXBsZXRlZCk6CisgICAgICAg
ICh3ZWJraXRQcmludE9wZXJhdGlvblByaW50UGFnZXNGb3JGcmFtZSk6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViUmVzb3VyY2UuY3BwOgorICAgICAgICAocmVzb3VyY2VE
YXRhQ2FsbGJhY2spOgorICAgICAgICAod2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfZGF0YSk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHA6CisgICAgICAgICh3
ZWJraXRfd2ViX3ZpZXdfY2FuX2V4ZWN1dGVfZWRpdGluZ19jb21tYW5kKToKKyAgICAgICAgKHdl
YmtpdFdlYlZpZXdSdW5KYXZhU2NyaXB0Q2FsbGJhY2spOgorICAgICAgICAod2Via2l0X3dlYl92
aWV3X3J1bl9qYXZhc2NyaXB0KToKKyAgICAgICAgKHJlc291cmNlc1N0cmVhbVJlYWRDYWxsYmFj
ayk6CisgICAgICAgIChnZXRDb250ZW50c0FzTUhUTUxEYXRhQ2FsbGJhY2spOgorICAgICAgICAo
d2Via2l0X3dlYl92aWV3X3NhdmUpOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X3NhdmVfdG9f
ZmlsZSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9pb3MvV0tJbnRlcmFjdGlvblZpZXcubW06
CisgICAgICAgICgtW1dLSW50ZXJhY3Rpb25WaWV3IF9kZWZpbmU6XSk6CisgICAgICAgIChzZWxl
Y3Rpb25DaGFuZ2VkV2l0aEdlc3R1cmUpOgorICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlZFdpdGhU
b3VjaCk6CisgICAgICAgICgtW1dLSW50ZXJhY3Rpb25WaWV3IGNoYW5nZVNlbGVjdGlvbldpdGhH
ZXN0dXJlQXQ6d2l0aEdlc3R1cmU6d2l0aFN0YXRlOl0pOgorICAgICAgICAoLVtXS0ludGVyYWN0
aW9uVmlldyBjaGFuZ2VTZWxlY3Rpb25XaXRoVG91Y2hBdDp3aXRoU2VsZWN0aW9uVG91Y2g6YmFz
ZUlzU3RhcnQ6XSk6CisgICAgICAgICgtW1dLSW50ZXJhY3Rpb25WaWV3IGNoYW5nZVNlbGVjdGlv
bldpdGhUb3VjaGVzRnJvbTp0bzp3aXRoR2VzdHVyZTp3aXRoU3RhdGU6XSk6CisgICAgICAgICgt
W1dLSW50ZXJhY3Rpb25WaWV3IHJlcXVlc3RBdXRvY29ycmVjdGlvblJlY3RzRm9yU3RyaW5nOndp
dGhDb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKC1bV0tJbnRlcmFjdGlvblZpZXcgYXBw
bHlBdXRvY29ycmVjdGlvbjp0b1N0cmluZzp3aXRoQ29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAg
ICAgICgtW1dLSW50ZXJhY3Rpb25WaWV3IHJlcXVlc3RBdXRvY29ycmVjdGlvbkNvbnRleHRXaXRo
Q29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMvV0tQcmlu
dGluZ1ZpZXcubW06CisgICAgICAgIChwYWdlRGlkRHJhd1RvSW1hZ2UpOgorICAgICAgICAoLVtX
S1ByaW50aW5nVmlldyBfcHJlcGFyZVBERkRhdGFGb3JQcmludGluZ09uU2Vjb25kYXJ5VGhyZWFk
XSk6CisgICAgICAgIChwYWdlRGlkQ29tcHV0ZVBhZ2VSZWN0cyk6CisgICAgICAgICgtW1dLUHJp
bnRpbmdWaWV3IF9hc2tQYWdlVG9Db21wdXRlUGFnZVJlY3RzXSk6CisgICAgICAgICgtW1dLUHJp
bnRpbmdWaWV3IF9kcmF3UHJldmlldzpdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9X
S1ZpZXcubW06CisgICAgICAgICgtW1dLVmlldyB2YWxpZGF0ZVVzZXJJbnRlcmZhY2VJdGVtOl0p
OgorICAgICAgICAoLVtXS1ZpZXcgc3RhcnRTcGVha2luZzpdKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvQXV0b0NvcnJlY3Rpb25DYWxsYmFjay5oOgorICAgICAgICAoV2ViS2l0OjpBdXRvY29ycmVj
dGlvbkRhdGFDYWxsYmFjazo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6QXV0b2NvcnJlY3Rp
b25EYXRhQ2FsbGJhY2s6OnBlcmZvcm1DYWxsYmFja1dpdGhSZXR1cm5WYWx1ZSk6CisgICAgICAg
IChXZWJLaXQ6OkF1dG9jb3JyZWN0aW9uRGF0YUNhbGxiYWNrOjppbnZhbGlkYXRlKToKKyAgICAg
ICAgKFdlYktpdDo6QXV0b2NvcnJlY3Rpb25EYXRhQ2FsbGJhY2s6OkF1dG9jb3JyZWN0aW9uRGF0
YUNhbGxiYWNrKToKKyAgICAgICAgKFdlYktpdDo6QXV0b2NvcnJlY3Rpb25Db250ZXh0Q2FsbGJh
Y2s6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkF1dG9jb3JyZWN0aW9uQ29udGV4dENhbGxi
YWNrOjpwZXJmb3JtQ2FsbGJhY2tXaXRoUmV0dXJuVmFsdWUpOgorICAgICAgICAoV2ViS2l0OjpB
dXRvY29ycmVjdGlvbkNvbnRleHRDYWxsYmFjazo6aW52YWxpZGF0ZSk6CisgICAgICAgIChXZWJL
aXQ6OkF1dG9jb3JyZWN0aW9uQ29udGV4dENhbGxiYWNrOjpBdXRvY29ycmVjdGlvbkNvbnRleHRD
YWxsYmFjayk6CisgICAgICAgICogVUlQcm9jZXNzL0dlbmVyaWNDYWxsYmFjay5oOgorICAgICAg
ICAoV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkNhbGxiYWNrQmFzZSk6CisgICAgICAgIChXZWJLaXQ6
OkNhbGxiYWNrQmFzZTo6Z2VuZXJhdGVDYWxsYmFja0lEKToKKyAgICAgICAgKFdlYktpdDo6Vm9p
ZENhbGxiYWNrOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpWb2lkQ2FsbGJhY2s6OnBlcmZv
cm1DYWxsYmFjayk6CisgICAgICAgIChXZWJLaXQ6OlZvaWRDYWxsYmFjazo6aW52YWxpZGF0ZSk6
CisgICAgICAgIChXZWJLaXQ6OlZvaWRDYWxsYmFjazo6Vm9pZENhbGxiYWNrKToKKyAgICAgICAg
KFdlYktpdDo6Vm9pZEFQSUNhbGxiYWNrOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpHZW5l
cmljQ2FsbGJhY2s6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkdlbmVyaWNDYWxsYmFjazo6
cGVyZm9ybUNhbGxiYWNrV2l0aFJldHVyblZhbHVlKToKKyAgICAgICAgKFdlYktpdDo6R2VuZXJp
Y0NhbGxiYWNrOjppbnZhbGlkYXRlKToKKyAgICAgICAgKFdlYktpdDo6R2VuZXJpY0NhbGxiYWNr
OjpHZW5lcmljQ2FsbGJhY2spOgorICAgICAgICAoV2ViS2l0OjpHZW5lcmljQVBJQ2FsbGJhY2s6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkNvbXB1dGVkUGFnZXNDYWxsYmFjazo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYktpdDo6Q29tcHV0ZWRQYWdlc0NhbGxiYWNrOjpwZXJmb3JtQ2FsbGJh
Y2tXaXRoUmV0dXJuVmFsdWUpOgorICAgICAgICAoV2ViS2l0OjpDb21wdXRlZFBhZ2VzQ2FsbGJh
Y2s6OmludmFsaWRhdGUpOgorICAgICAgICAoV2ViS2l0OjpDb21wdXRlZFBhZ2VzQ2FsbGJhY2s6
OkNvbXB1dGVkUGFnZXNDYWxsYmFjayk6CisgICAgICAgIChXZWJLaXQ6OkltYWdlQ2FsbGJhY2s6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkltYWdlQ2FsbGJhY2s6OnBlcmZvcm1DYWxsYmFj
a1dpdGhSZXR1cm5WYWx1ZSk6CisgICAgICAgIChXZWJLaXQ6OkltYWdlQ2FsbGJhY2s6OmludmFs
aWRhdGUpOgorICAgICAgICAoV2ViS2l0OjpJbWFnZUNhbGxiYWNrOjpJbWFnZUNhbGxiYWNrKToK
KyAgICAgICAgKiBVSVByb2Nlc3MvUGx1Z2lucy9XZWJQbHVnaW5TaXRlRGF0YU1hbmFnZXIuaDoK
KyAgICAgICAgKiBVSVByb2Nlc3MvU3RhdGlzdGljc1JlcXVlc3QuaDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvV2ViQXBwbGljYXRpb25DYWNoZU1hbmFnZXJQcm94eS5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9XZWJDb250ZXh0Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQ
cm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJEYXRhYmFzZU1hbmFnZXJQcm94eS5oOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9XZWJGcmFtZVByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNz
L1dlYktleVZhbHVlU3RvcmFnZU1hbmFnZXIuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViTWVk
aWFDYWNoZU1hbmFnZXJQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJPcmlnaW5EYXRh
TWFuYWdlclByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAg
ICAgICAoV2ViS2l0OjpWYWxpZGF0ZUNvbW1hbmRDYWxsYmFjazo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYktpdDo6VmFsaWRhdGVDb21tYW5kQ2FsbGJhY2s6OnBlcmZvcm1DYWxsYmFja1dpdGhSZXR1
cm5WYWx1ZSk6CisgICAgICAgIChXZWJLaXQ6OlZhbGlkYXRlQ29tbWFuZENhbGxiYWNrOjppbnZh
bGlkYXRlKToKKyAgICAgICAgKFdlYktpdDo6VmFsaWRhdGVDb21tYW5kQ2FsbGJhY2s6OlZhbGlk
YXRlQ29tbWFuZENhbGxiYWNrKToKKyAgICAgICAgKFdlYktpdDo6R2VzdHVyZUNhbGxiYWNrOjpj
cmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpHZXN0dXJlQ2FsbGJhY2s6OnBlcmZvcm1DYWxsYmFj
a1dpdGhSZXR1cm5WYWx1ZSk6CisgICAgICAgIChXZWJLaXQ6Okdlc3R1cmVDYWxsYmFjazo6aW52
YWxpZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6Okdlc3R1cmVDYWxsYmFjazo6R2VzdHVyZUNhbGxi
YWNrKToKKyAgICAgICAgKFdlYktpdDo6VG91Y2hlc0NhbGxiYWNrOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViS2l0OjpUb3VjaGVzQ2FsbGJhY2s6OnBlcmZvcm1DYWxsYmFja1dpdGhSZXR1cm5WYWx1
ZSk6CisgICAgICAgIChXZWJLaXQ6OlRvdWNoZXNDYWxsYmFjazo6aW52YWxpZGF0ZSk6CisgICAg
ICAgIChXZWJLaXQ6OlRvdWNoZXNDYWxsYmFjazo6VG91Y2hlc0NhbGxiYWNrKToKKyAgICAgICAg
KiBVSVByb2Nlc3MvV2ViUmVzb3VyY2VDYWNoZU1hbmFnZXJQcm94eS5oOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9tYWMvV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlci5tbToKKyAgICAgICAgKC1b
V0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBmaW5pc2hlZEV4aXRGdWxsU2NyZWVuQW5pbWF0
aW9uOl0pOgorCiAyMDE0LTAyLTE4ICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAK
ICAgICAgICAgUExBVEZPUk0oTUFDKSBpcyB0cnVlIHdoZW4gYnVpbGRpbmcgZm9yIGlPUwpJbmRl
eDogU291cmNlL1dlYktpdDIvU2hhcmVkL1NlY3VyaXR5T3JpZ2luRGF0YS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9TZWN1cml0eU9yaWdpbkRhdGEuaAkocmV2aXNpb24g
MTY0MzU1KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL1NlY3VyaXR5T3JpZ2luRGF0YS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIG5hbWVzcGFjZSBJUEMgewogCiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIAotdHlwZWRlZiBHZW5lcmljQ2FsbGJhY2s8V0tBcnJheVJlZj4gQXJyYXlD
YWxsYmFjazsKK3R5cGVkZWYgR2VuZXJpY0NhbGxiYWNrPEFQSTo6QXJyYXkqPiBBcnJheUNhbGxi
YWNrOwogCiBzdHJ1Y3QgU2VjdXJpdHlPcmlnaW5EYXRhIHsKICAgICBzdGF0aWMgU2VjdXJpdHlP
cmlnaW5EYXRhIGZyb21TZWN1cml0eU9yaWdpbihjb25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdp
biopOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0F1dG9Db3JyZWN0aW9uQ2FsbGJh
Y2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQXV0b0NvcnJlY3Rp
b25DYWxsYmFjay5oCShyZXZpc2lvbiAxNjQzNTUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQXV0b0NvcnJlY3Rpb25DYWxsYmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMSArMzcs
MTEgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIEF1dG9jb3JyZWN0aW9uRGF0YUNhbGxi
YWNrIDogcHVibGljIENhbGxiYWNrQmFzZSB7CiBwdWJsaWM6Ci0gICAgdHlwZWRlZiB2b2lkICgq
Q2FsbGJhY2tGdW5jdGlvbikoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkZsb2F0UmVjdD4mLCBjb25z
dCBTdHJpbmcmLCBkb3VibGUsIHVpbnQ2NF90LCBXS0Vycm9yUmVmLCB2b2lkKik7CisgICAgdHlw
ZWRlZiBzdGQ6OmZ1bmN0aW9uPHZvaWQoYm9vbCwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OkZsb2F0
UmVjdD4mLCBjb25zdCBTdHJpbmcmLCBkb3VibGUsIHVpbnQ2NF90KT4gQ2FsbGJhY2tGdW5jdGlv
bjsKIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEF1dG9jb3JyZWN0aW9uRGF0YUNhbGxiYWNrPiBj
cmVhdGUodm9pZCogY29udGV4dCwgQ2FsbGJhY2tGdW5jdGlvbiBjYWxsYmFjaykKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxBdXRvY29ycmVjdGlvbkRhdGFDYWxsYmFjaz4gY3JlYXRlKENhbGxiYWNr
RnVuY3Rpb24gY2FsbGJhY2spCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEF1
dG9jb3JyZWN0aW9uRGF0YUNhbGxiYWNrKGNvbnRleHQsIGNhbGxiYWNrKSk7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgQXV0b2NvcnJlY3Rpb25EYXRhQ2FsbGJhY2soY2FsbGJhY2spKTsK
ICAgICB9CiAKICAgICB2aXJ0dWFsIH5BdXRvY29ycmVjdGlvbkRhdGFDYWxsYmFjaygpCkBAIC01
Myw3ICs1Myw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2NhbGxiYWNrKTsK
IAotICAgICAgICBtX2NhbGxiYWNrKHJldHVyblZhbHVlMSwgcmV0dXJuVmFsdWUyLCByZXR1cm5W
YWx1ZTMsIHJldHVyblZhbHVlNCwgMCwgY29udGV4dCgpKTsKKyAgICAgICAgbV9jYWxsYmFjayhm
YWxzZSwgcmV0dXJuVmFsdWUxLCByZXR1cm5WYWx1ZTIsIHJldHVyblZhbHVlMywgcmV0dXJuVmFs
dWU0KTsKIAogICAgICAgICBtX2NhbGxiYWNrID0gMDsKICAgICB9CkBAIC02MiwxNiArNjIsMTQg
QEAgcHVibGljOgogICAgIHsKICAgICAgICAgQVNTRVJUKG1fY2FsbGJhY2spOwogCi0gICAgICAg
IFJlZlB0cjxBUEk6OkVycm9yPiBlcnJvciA9IEFQSTo6RXJyb3I6OmNyZWF0ZSgpOwotICAgICAg
ICBtX2NhbGxiYWNrKFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+KCksIFN0cmluZygpLCAwLCAw
LCB0b0FQSShlcnJvci5nZXQoKSksIGNvbnRleHQoKSk7CisgICAgICAgIG1fY2FsbGJhY2sodHJ1
ZSwgVmVjdG9yPFdlYkNvcmU6OkZsb2F0UmVjdD4oKSwgU3RyaW5nKCksIDAsIDApOwogCiAgICAg
ICAgIG1fY2FsbGJhY2sgPSAwOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBBdXRvY29ycmVjdGlv
bkRhdGFDYWxsYmFjayh2b2lkKiBjb250ZXh0LCBDYWxsYmFja0Z1bmN0aW9uIGNhbGxiYWNrKQot
ICAgICAgICA6IENhbGxiYWNrQmFzZShjb250ZXh0KQotICAgICAgICAsIG1fY2FsbGJhY2soY2Fs
bGJhY2spCisgICAgQXV0b2NvcnJlY3Rpb25EYXRhQ2FsbGJhY2soQ2FsbGJhY2tGdW5jdGlvbiBj
YWxsYmFjaykKKyAgICAgICAgOiBtX2NhbGxiYWNrKGNhbGxiYWNrKQogICAgIHsKICAgICAgICAg
QVNTRVJUKG1fY2FsbGJhY2spOwogICAgIH0KQEAgLTgxLDExICs3OSwxMSBAQCBwcml2YXRlOgog
CiBjbGFzcyBBdXRvY29ycmVjdGlvbkNvbnRleHRDYWxsYmFjayA6IHB1YmxpYyBDYWxsYmFja0Jh
c2UgewogcHVibGljOgotICAgIHR5cGVkZWYgdm9pZCAoKkNhbGxiYWNrRnVuY3Rpb24pKGNvbnN0
IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIHVp
bnQ2NF90LCB1aW50NjRfdCwgV0tFcnJvclJlZiwgdm9pZCopOworICAgIHR5cGVkZWYgc3RkOjpm
dW5jdGlvbjx2b2lkKGJvb2wsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0
cmluZyYsIGNvbnN0IFN0cmluZyYsIHVpbnQ2NF90LCB1aW50NjRfdCk+IENhbGxiYWNrRnVuY3Rp
b247CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxBdXRvY29ycmVjdGlvbkNvbnRleHRDYWxsYmFj
az4gY3JlYXRlKHZvaWQqIGNvbnRleHQsIENhbGxiYWNrRnVuY3Rpb24gY2FsbGJhY2spCisgICAg
c3RhdGljIFBhc3NSZWZQdHI8QXV0b2NvcnJlY3Rpb25Db250ZXh0Q2FsbGJhY2s+IGNyZWF0ZShD
YWxsYmFja0Z1bmN0aW9uIGNhbGxiYWNrKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBBdXRvY29ycmVjdGlvbkNvbnRleHRDYWxsYmFjayhjb250ZXh0LCBjYWxsYmFjaykpOwor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEF1dG9jb3JyZWN0aW9uQ29udGV4dENhbGxiYWNr
KGNhbGxiYWNrKSk7CiAgICAgfQogCiAgICAgdmlydHVhbCB+QXV0b2NvcnJlY3Rpb25Db250ZXh0
Q2FsbGJhY2soKQpAQCAtOTcsNyArOTUsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBBU1NF
UlQobV9jYWxsYmFjayk7CiAKLSAgICAgICAgbV9jYWxsYmFjayhyZXR1cm5WYWx1ZTEsIHJldHVy
blZhbHVlMiwgcmV0dXJuVmFsdWUzLCByZXR1cm5WYWx1ZTQsIHJldHVyblZhbHVlNSwgcmV0dXJu
VmFsdWU2LCAwLCBjb250ZXh0KCkpOworICAgICAgICBtX2NhbGxiYWNrKGZhbHNlLCByZXR1cm5W
YWx1ZTEsIHJldHVyblZhbHVlMiwgcmV0dXJuVmFsdWUzLCByZXR1cm5WYWx1ZTQsIHJldHVyblZh
bHVlNSwgcmV0dXJuVmFsdWU2KTsKIAogICAgICAgICBtX2NhbGxiYWNrID0gMDsKICAgICB9CkBA
IC0xMDYsMTYgKzEwNCwxNCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBBU1NFUlQobV9jYWxs
YmFjayk7CiAKLSAgICAgICAgUmVmUHRyPEFQSTo6RXJyb3I+IGVycm9yID0gQVBJOjpFcnJvcjo6
Y3JlYXRlKCk7Ci0gICAgICAgIG1fY2FsbGJhY2soU3RyaW5nKCksIFN0cmluZygpLCBTdHJpbmco
KSwgU3RyaW5nKCksIDAsIDAsIHRvQVBJKGVycm9yLmdldCgpKSwgY29udGV4dCgpKTsKKyAgICAg
ICAgbV9jYWxsYmFjayh0cnVlLCBTdHJpbmcoKSwgU3RyaW5nKCksIFN0cmluZygpLCBTdHJpbmco
KSwgMCwgMCk7CiAKICAgICAgICAgbV9jYWxsYmFjayA9IDA7CiAgICAgfQogCiBwcml2YXRlOgot
ICAgIEF1dG9jb3JyZWN0aW9uQ29udGV4dENhbGxiYWNrKHZvaWQqIGNvbnRleHQsIENhbGxiYWNr
RnVuY3Rpb24gY2FsbGJhY2spCi0gICAgICAgIDogQ2FsbGJhY2tCYXNlKGNvbnRleHQpCi0gICAg
ICAgICwgbV9jYWxsYmFjayhjYWxsYmFjaykKKyAgICBBdXRvY29ycmVjdGlvbkNvbnRleHRDYWxs
YmFjayhDYWxsYmFja0Z1bmN0aW9uIGNhbGxiYWNrKQorICAgICAgICA6IG1fY2FsbGJhY2soY2Fs
bGJhY2spCiAgICAgewogICAgICAgICBBU1NFUlQobV9jYWxsYmFjayk7CiAgICAgfQpJbmRleDog
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0dlbmVyaWNDYWxsYmFjay5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9HZW5lcmljQ2FsbGJhY2suaAkocmV2aXNpb24gMTY0
MzU1KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0dlbmVyaWNDYWxsYmFjay5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw5IEBACiAjaW5jbHVkZSAiQVBJRXJyb3IuaCIKICNpbmNs
dWRlICJTaGFyZWFibGVCaXRtYXAuaCIKICNpbmNsdWRlICJXS0FQSUNhc3QuaCIKKyNpbmNsdWRl
IDxmdW5jdGlvbmFsPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL01h
aW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+CiAKQEAgLTQ0LDMyICs0NiwyOSBAQCBwdWJsaWM6CiAgICAgdWludDY0X3Qg
Y2FsbGJhY2tJRCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGJhY2tJRDsgfQogCiBwcm90ZWN0ZWQ6
Ci0gICAgZXhwbGljaXQgQ2FsbGJhY2tCYXNlKHZvaWQqIGNvbnRleHQpCi0gICAgICAgIDogbV9j
b250ZXh0KGNvbnRleHQpCi0gICAgICAgICwgbV9jYWxsYmFja0lEKGdlbmVyYXRlQ2FsbGJhY2tJ
RCgpKQorICAgIGV4cGxpY2l0IENhbGxiYWNrQmFzZSgpCisgICAgICAgIDogbV9jYWxsYmFja0lE
KGdlbmVyYXRlQ2FsbGJhY2tJRCgpKQogICAgIHsKICAgICB9CiAKLSAgICB2b2lkKiBjb250ZXh0
KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0OyB9Ci0KIHByaXZhdGU6CiAgICAgc3RhdGljIHVp
bnQ2NF90IGdlbmVyYXRlQ2FsbGJhY2tJRCgpCiAgICAgeworICAgICAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOwogICAgICAgICBzdGF0aWMgdWludDY0X3QgdW5pcXVlQ2FsbGJhY2tJRCA9IDE7
CiAgICAgICAgIHJldHVybiB1bmlxdWVDYWxsYmFja0lEKys7CiAgICAgfQogCi0gICAgdm9pZCog
bV9jb250ZXh0OwogICAgIHVpbnQ2NF90IG1fY2FsbGJhY2tJRDsKIH07CiAKIGNsYXNzIFZvaWRD
YWxsYmFjayA6IHB1YmxpYyBDYWxsYmFja0Jhc2UgewogcHVibGljOgotICAgIHR5cGVkZWYgdm9p
ZCAoKkNhbGxiYWNrRnVuY3Rpb24pKFdLRXJyb3JSZWYsIHZvaWQqKTsKKyAgICB0eXBlZGVmIHN0
ZDo6ZnVuY3Rpb248dm9pZChib29sKT4gQ2FsbGJhY2tGdW5jdGlvbjsKIAotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4gY3JlYXRlKHZvaWQqIGNvbnRleHQsIENhbGxiYWNrRnVu
Y3Rpb24gY2FsbGJhY2spCisgICAgc3RhdGljIFBhc3NSZWZQdHI8Vm9pZENhbGxiYWNrPiBjcmVh
dGUoQ2FsbGJhY2tGdW5jdGlvbiBjYWxsYmFjaykKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgVm9pZENhbGxiYWNrKGNvbnRleHQsIGNhbGxiYWNrKSk7CisgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgVm9pZENhbGxiYWNrKGNhbGxiYWNrKSk7CiAgICAgfQogCiAgICAgdmly
dHVhbCB+Vm9pZENhbGxiYWNrKCkKQEAgLTgyLDkgKzgxLDkgQEAgcHVibGljOgogICAgICAgICBp
ZiAoIW1fY2FsbGJhY2spCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgbV9jYWxsYmFj
aygwLCBjb250ZXh0KCkpOworICAgICAgICBtX2NhbGxiYWNrKGZhbHNlKTsKIAotICAgICAgICBt
X2NhbGxiYWNrID0gMDsKKyAgICAgICAgbV9jYWxsYmFjayA9IG51bGxwdHI7CiAgICAgfQogICAg
IAogICAgIHZvaWQgaW52YWxpZGF0ZSgpCkBAIC05MiwzMCArOTEsNDAgQEAgcHVibGljOgogICAg
ICAgICBpZiAoIW1fY2FsbGJhY2spCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgUmVm
UHRyPEFQSTo6RXJyb3I+IGVycm9yID0gQVBJOjpFcnJvcjo6Y3JlYXRlKCk7Ci0gICAgICAgIG1f
Y2FsbGJhY2sodG9BUEkoZXJyb3IuZ2V0KCkpLCBjb250ZXh0KCkpOwotICAgICAgICAKLSAgICAg
ICAgbV9jYWxsYmFjayA9IDA7CisgICAgICAgIG1fY2FsbGJhY2sodHJ1ZSk7CisKKyAgICAgICAg
bV9jYWxsYmFjayA9IG51bGxwdHI7CiAgICAgfQogCiBwcml2YXRlOgotICAgIFZvaWRDYWxsYmFj
ayh2b2lkKiBjb250ZXh0LCBDYWxsYmFja0Z1bmN0aW9uIGNhbGxiYWNrKQotICAgICAgICA6IENh
bGxiYWNrQmFzZShjb250ZXh0KQotICAgICAgICAsIG1fY2FsbGJhY2soY2FsbGJhY2spCisgICAg
Vm9pZENhbGxiYWNrKENhbGxiYWNrRnVuY3Rpb24gY2FsbGJhY2spCisgICAgICAgIDogbV9jYWxs
YmFjayhjYWxsYmFjaykKICAgICB7CiAgICAgfQogCiAgICAgQ2FsbGJhY2tGdW5jdGlvbiBtX2Nh
bGxiYWNrOwogfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgQVBJUmV0dXJuVmFsdWVUeXBlLCB0eXBl
bmFtZSBJbnRlcm5hbFJldHVyblZhbHVlVHlwZSA9IHR5cGVuYW1lIEFQSVR5cGVJbmZvPEFQSVJl
dHVyblZhbHVlVHlwZT46OkltcGxUeXBlPgorY2xhc3MgVm9pZEFQSUNhbGxiYWNrIDogcHVibGlj
IENhbGxiYWNrQmFzZSB7CitwdWJsaWM6CisgICAgdHlwZWRlZiB2b2lkICgqQ2FsbGJhY2tGdW5j
dGlvbikoV0tFcnJvclJlZiwgdm9pZCopOworCisgICAgc3RhdGljIFBhc3NSZWZQdHI8Vm9pZENh
bGxiYWNrPiBjcmVhdGUodm9pZCogY29udGV4dCwgQ2FsbGJhY2tGdW5jdGlvbiBjYWxsYmFjaykK
KyAgICB7CisgICAgICAgIHJldHVybiBWb2lkQ2FsbGJhY2s6OmNyZWF0ZShbY29udGV4dCwgY2Fs
bGJhY2tdKGJvb2wgZXJyb3IpIHsKKyAgICAgICAgICAgIGNhbGxiYWNrKGVycm9yID8gdG9BUEko
QVBJOjpFcnJvcjo6Y3JlYXRlKCkuZ2V0KCkpIDogMCwgY29udGV4dCk7CisgICAgICAgIH0pOwor
ICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CiBjbGFzcyBHZW5lcmljQ2FsbGJhY2sg
OiBwdWJsaWMgQ2FsbGJhY2tCYXNlIHsKIHB1YmxpYzoKLSAgICB0eXBlZGVmIHZvaWQgKCpDYWxs
YmFja0Z1bmN0aW9uKShBUElSZXR1cm5WYWx1ZVR5cGUsIFdLRXJyb3JSZWYsIHZvaWQqKTsKKyAg
ICB0eXBlZGVmIHN0ZDo6ZnVuY3Rpb248dm9pZChib29sLCBUKT4gQ2FsbGJhY2tGdW5jdGlvbjsK
IAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdlbmVyaWNDYWxsYmFjaz4gY3JlYXRlKHZvaWQqIGNv
bnRleHQsIENhbGxiYWNrRnVuY3Rpb24gY2FsbGJhY2spCisgICAgc3RhdGljIFBhc3NSZWZQdHI8
R2VuZXJpY0NhbGxiYWNrPiBjcmVhdGUoQ2FsbGJhY2tGdW5jdGlvbiBjYWxsYmFjaykKICAgICB7
Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgR2VuZXJpY0NhbGxiYWNrKGNvbnRleHQsIGNh
bGxiYWNrKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgR2VuZXJpY0NhbGxiYWNrKGNh
bGxiYWNrKSk7CiAgICAgfQogCiAgICAgdmlydHVhbCB+R2VuZXJpY0NhbGxiYWNrKCkKQEAgLTEy
Myw0MyArMTMyLDU2IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKCFtX2NhbGxiYWNrKTsKICAg
ICB9CiAKLSAgICB2b2lkIHBlcmZvcm1DYWxsYmFja1dpdGhSZXR1cm5WYWx1ZShJbnRlcm5hbFJl
dHVyblZhbHVlVHlwZSByZXR1cm5WYWx1ZSkKKyAgICB2b2lkIHBlcmZvcm1DYWxsYmFja1dpdGhS
ZXR1cm5WYWx1ZShUIHJldHVyblZhbHVlKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fY2FsbGJh
Y2spOworICAgICAgICBpZiAoIW1fY2FsbGJhY2spCisgICAgICAgICAgICByZXR1cm47CiAKLSAg
ICAgICAgbV9jYWxsYmFjayh0b0FQSShyZXR1cm5WYWx1ZSksIDAsIGNvbnRleHQoKSk7CisgICAg
ICAgIG1fY2FsbGJhY2soZmFsc2UsIHJldHVyblZhbHVlKTsKIAotICAgICAgICBtX2NhbGxiYWNr
ID0gMDsKKyAgICAgICAgbV9jYWxsYmFjayA9IG51bGxwdHI7CiAgICAgfQogICAgIAogICAgIHZv
aWQgaW52YWxpZGF0ZSgpCiAgICAgewotICAgICAgICBBU1NFUlQobV9jYWxsYmFjayk7CisgICAg
ICAgIGlmICghbV9jYWxsYmFjaykKKyAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBSZWZQ
dHI8QVBJOjpFcnJvcj4gZXJyb3IgPSBBUEk6OkVycm9yOjpjcmVhdGUoKTsKLSAgICAgICAgbV9j
YWxsYmFjaygwLCB0b0FQSShlcnJvci5nZXQoKSksIGNvbnRleHQoKSk7Ci0gICAgICAgIAotICAg
ICAgICBtX2NhbGxiYWNrID0gMDsKKyAgICAgICAgbV9jYWxsYmFjayh0cnVlLCBUKCkpOworCisg
ICAgICAgIG1fY2FsbGJhY2sgPSBudWxscHRyOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBHZW5l
cmljQ2FsbGJhY2sodm9pZCogY29udGV4dCwgQ2FsbGJhY2tGdW5jdGlvbiBjYWxsYmFjaykKLSAg
ICAgICAgOiBDYWxsYmFja0Jhc2UoY29udGV4dCkKLSAgICAgICAgLCBtX2NhbGxiYWNrKGNhbGxi
YWNrKQorICAgIEdlbmVyaWNDYWxsYmFjayhDYWxsYmFja0Z1bmN0aW9uIGNhbGxiYWNrKQorICAg
ICAgICA6IG1fY2FsbGJhY2soY2FsbGJhY2spCiAgICAgewogICAgIH0KIAogICAgIENhbGxiYWNr
RnVuY3Rpb24gbV9jYWxsYmFjazsKIH07CiAKLS8vIEZJWE1FOiBNYWtlIGEgdmVyc2lvbiBvZiBD
YWxsYmFja0Jhc2Ugd2l0aCB0d28gYXJndW1lbnRzLCBhbmQgZGVmaW5lIENvbXB1dGVkUGFnZXND
YWxsYmFjayBhcyBhIHNwZWNpYWxpemF0aW9uLgordGVtcGxhdGU8dHlwZW5hbWUgQVBJUmV0dXJu
VmFsdWVUeXBlLCB0eXBlbmFtZSBJbnRlcm5hbFJldHVyblZhbHVlVHlwZSA9IHR5cGVuYW1lIEFQ
SVR5cGVJbmZvPEFQSVJldHVyblZhbHVlVHlwZT46OkltcGxUeXBlPgorY2xhc3MgR2VuZXJpY0FQ
SUNhbGxiYWNrIDogcHVibGljIENhbGxiYWNrQmFzZSB7CitwdWJsaWM6CisgICAgdHlwZWRlZiB2
b2lkICgqQ2FsbGJhY2tGdW5jdGlvbikoQVBJUmV0dXJuVmFsdWVUeXBlLCBXS0Vycm9yUmVmLCB2
b2lkKik7CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxHZW5lcmljQ2FsbGJhY2s8SW50ZXJuYWxS
ZXR1cm5WYWx1ZVR5cGU+PiBjcmVhdGUodm9pZCogY29udGV4dCwgQ2FsbGJhY2tGdW5jdGlvbiBj
YWxsYmFjaykKKyAgICB7CisgICAgICAgIHJldHVybiBHZW5lcmljQ2FsbGJhY2s8SW50ZXJuYWxS
ZXR1cm5WYWx1ZVR5cGU+OjpjcmVhdGUoW2NvbnRleHQsIGNhbGxiYWNrXShib29sIGVycm9yLCBJ
bnRlcm5hbFJldHVyblZhbHVlVHlwZSByZXR1cm5WYWx1ZSkgeworICAgICAgICAgICAgY2FsbGJh
Y2sodG9BUEkocmV0dXJuVmFsdWUpLCBlcnJvciA/IHRvQVBJKEFQSTo6RXJyb3I6OmNyZWF0ZSgp
LmdldCgpKSA6IDAsIGNvbnRleHQpOworICAgICAgICB9KTsKKyAgICB9Cit9OworCisvLyBGSVhN
RTogTWFrZSBhIHZlcnNpb24gb2YgR2VuZXJpY0NhbGxiYWNrIHdpdGggdHdvIGFyZ3VtZW50cywg
YW5kIGRlZmluZSBDb21wdXRlZFBhZ2VzQ2FsbGJhY2sgYXMgYSBzcGVjaWFsaXphdGlvbi4KIGNs
YXNzIENvbXB1dGVkUGFnZXNDYWxsYmFjayA6IHB1YmxpYyBDYWxsYmFja0Jhc2UgewogcHVibGlj
OgotICAgIHR5cGVkZWYgdm9pZCAoKkNhbGxiYWNrRnVuY3Rpb24pKGNvbnN0IFZlY3RvcjxXZWJD
b3JlOjpJbnRSZWN0PiYsIGRvdWJsZSwgV0tFcnJvclJlZiwgdm9pZCopOworICAgIHR5cGVkZWYg
c3RkOjpmdW5jdGlvbjx2b2lkKGJvb2wsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpJbnRSZWN0PiYs
IGRvdWJsZSk+IENhbGxiYWNrRnVuY3Rpb247CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb21w
dXRlZFBhZ2VzQ2FsbGJhY2s+IGNyZWF0ZSh2b2lkKiBjb250ZXh0LCBDYWxsYmFja0Z1bmN0aW9u
IGNhbGxiYWNrKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENvbXB1dGVkUGFnZXNDYWxsYmFjaz4g
Y3JlYXRlKENhbGxiYWNrRnVuY3Rpb24gY2FsbGJhY2spCiAgICAgewotICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IENvbXB1dGVkUGFnZXNDYWxsYmFjayhjb250ZXh0LCBjYWxsYmFjaykpOwor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENvbXB1dGVkUGFnZXNDYWxsYmFjayhjYWxsYmFj
aykpOwogICAgIH0KIAogICAgIHZpcnR1YWwgfkNvbXB1dGVkUGFnZXNDYWxsYmFjaygpCkBAIC0x
NzEsNyArMTkzLDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgQVNTRVJUKG1fY2FsbGJhY2sp
OwogCi0gICAgICAgIG1fY2FsbGJhY2socmV0dXJuVmFsdWUxLCByZXR1cm5WYWx1ZTIsIDAsIGNv
bnRleHQoKSk7CisgICAgICAgIG1fY2FsbGJhY2soZmFsc2UsIHJldHVyblZhbHVlMSwgcmV0dXJu
VmFsdWUyKTsKIAogICAgICAgICBtX2NhbGxiYWNrID0gMDsKICAgICB9CkBAIC0xODAsMTcgKzIw
MiwxNSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBBU1NFUlQobV9jYWxsYmFjayk7CiAKLSAg
ICAgICAgUmVmUHRyPEFQSTo6RXJyb3I+IGVycm9yID0gQVBJOjpFcnJvcjo6Y3JlYXRlKCk7Ci0g
ICAgICAgIG1fY2FsbGJhY2soVmVjdG9yPFdlYkNvcmU6OkludFJlY3Q+KCksIDAsIHRvQVBJKGVy
cm9yLmdldCgpKSwgY29udGV4dCgpKTsKKyAgICAgICAgbV9jYWxsYmFjayh0cnVlLCBWZWN0b3I8
V2ViQ29yZTo6SW50UmVjdD4oKSwgMCk7CiAgICAgICAgIAogICAgICAgICBtX2NhbGxiYWNrID0g
MDsKICAgICB9CiAKIHByaXZhdGU6CiAKLSAgICBDb21wdXRlZFBhZ2VzQ2FsbGJhY2sodm9pZCog
Y29udGV4dCwgQ2FsbGJhY2tGdW5jdGlvbiBjYWxsYmFjaykKLSAgICAgICAgOiBDYWxsYmFja0Jh
c2UoY29udGV4dCkKLSAgICAgICAgLCBtX2NhbGxiYWNrKGNhbGxiYWNrKQorICAgIENvbXB1dGVk
UGFnZXNDYWxsYmFjayhDYWxsYmFja0Z1bmN0aW9uIGNhbGxiYWNrKQorICAgICAgICA6IG1fY2Fs
bGJhY2soY2FsbGJhY2spCiAgICAgewogICAgIH0KIApAQCAtMTk5LDExICsyMTksMTEgQEAgcHJp
dmF0ZToKIAogY2xhc3MgSW1hZ2VDYWxsYmFjayA6IHB1YmxpYyBDYWxsYmFja0Jhc2UgewogcHVi
bGljOgotICAgIHR5cGVkZWYgdm9pZCAoKkNhbGxiYWNrRnVuY3Rpb24pKGNvbnN0IFNoYXJlYWJs
ZUJpdG1hcDo6SGFuZGxlJiwgV0tFcnJvclJlZiwgdm9pZCopOworICAgIHR5cGVkZWYgc3RkOjpm
dW5jdGlvbjx2b2lkKGJvb2wsIGNvbnN0IFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJik+IENhbGxi
YWNrRnVuY3Rpb247CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbWFnZUNhbGxiYWNrPiBjcmVh
dGUodm9pZCogY29udGV4dCwgQ2FsbGJhY2tGdW5jdGlvbiBjYWxsYmFjaykKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxJbWFnZUNhbGxiYWNrPiBjcmVhdGUoQ2FsbGJhY2tGdW5jdGlvbiBjYWxsYmFj
aykKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW1hZ2VDYWxsYmFjayhjb250
ZXh0LCBjYWxsYmFjaykpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEltYWdlQ2FsbGJh
Y2soY2FsbGJhY2spKTsKICAgICB9CiAKICAgICB2aXJ0dWFsIH5JbWFnZUNhbGxiYWNrKCkKQEAg
LTIxNSw3ICsyMzUsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBBU1NFUlQobV9jYWxsYmFj
ayk7CiAKLSAgICAgICAgbV9jYWxsYmFjayhyZXR1cm5WYWx1ZTEsIDAsIGNvbnRleHQoKSk7Cisg
ICAgICAgIG1fY2FsbGJhY2sodHJ1ZSwgcmV0dXJuVmFsdWUxKTsKIAogICAgICAgICBtX2NhbGxi
YWNrID0gMDsKICAgICB9CkBAIC0yMjYsMTYgKzI0NiwxNSBAQCBwdWJsaWM6CiAKICAgICAgICAg
UmVmUHRyPEFQSTo6RXJyb3I+IGVycm9yID0gQVBJOjpFcnJvcjo6Y3JlYXRlKCk7CiAgICAgICAg
IFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZTsKLSAgICAgICAgbV9jYWxsYmFjayhoYW5k
bGUsIHRvQVBJKGVycm9yLmdldCgpKSwgY29udGV4dCgpKTsKKyAgICAgICAgbV9jYWxsYmFjayhm
YWxzZSwgaGFuZGxlKTsKIAogICAgICAgICBtX2NhbGxiYWNrID0gMDsKICAgICB9CiAKIHByaXZh
dGU6CiAKLSAgICBJbWFnZUNhbGxiYWNrKHZvaWQqIGNvbnRleHQsIENhbGxiYWNrRnVuY3Rpb24g
Y2FsbGJhY2spCi0gICAgICAgIDogQ2FsbGJhY2tCYXNlKGNvbnRleHQpCi0gICAgICAgICwgbV9j
YWxsYmFjayhjYWxsYmFjaykKKyAgICBJbWFnZUNhbGxiYWNrKENhbGxiYWNrRnVuY3Rpb24gY2Fs
bGJhY2spCisgICAgICAgIDogbV9jYWxsYmFjayhjYWxsYmFjaykKICAgICB7CiAgICAgfQogICAg
IApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1N0YXRpc3RpY3NSZXF1ZXN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1N0YXRpc3RpY3NSZXF1ZXN0LmgJ
KHJldmlzaW9uIDE2NDM1NSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9TdGF0aXN0aWNz
UmVxdWVzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBAIG5hbWVzcGFjZSBXZWJL
aXQgewogCiBzdHJ1Y3QgU3RhdGlzdGljc0RhdGE7CiAKLXR5cGVkZWYgR2VuZXJpY0NhbGxiYWNr
PFdLRGljdGlvbmFyeVJlZj4gRGljdGlvbmFyeUNhbGxiYWNrOwordHlwZWRlZiBHZW5lcmljQ2Fs
bGJhY2s8SW1tdXRhYmxlRGljdGlvbmFyeSo+IERpY3Rpb25hcnlDYWxsYmFjazsKIAogZW51bSBT
dGF0aXN0aWNzUmVxdWVzdFR5cGUgewogICAgIFN0YXRpc3RpY3NSZXF1ZXN0VHlwZVdlYkNvbnRl
bnQgPSAweDAwMDAwMDAxLApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkFwcGxp
Y2F0aW9uQ2FjaGVNYW5hZ2VyUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViQXBwbGljYXRpb25DYWNoZU1hbmFnZXJQcm94eS5oCShyZXZpc2lvbiAxNjQz
NTUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQXBwbGljYXRpb25DYWNoZU1hbmFn
ZXJQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIG5hbWVzcGFjZSBXZWJL
aXQgewogY2xhc3MgV2ViU2VjdXJpdHlPcmlnaW47CiBzdHJ1Y3QgU2VjdXJpdHlPcmlnaW5EYXRh
OwogCi10eXBlZGVmIEdlbmVyaWNDYWxsYmFjazxXS0FycmF5UmVmPiBBcnJheUNhbGxiYWNrOwor
dHlwZWRlZiBHZW5lcmljQ2FsbGJhY2s8QVBJOjpBcnJheSo+IEFycmF5Q2FsbGJhY2s7CiAKIGNs
YXNzIFdlYkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyUHJveHkgOiBwdWJsaWMgQVBJOjpPYmplY3RJ
bXBsPEFQSTo6T2JqZWN0OjpUeXBlOjpBcHBsaWNhdGlvbkNhY2hlTWFuYWdlcj4sIHB1YmxpYyBX
ZWJDb250ZXh0U3VwcGxlbWVudCwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CiBwdWJs
aWM6CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0LmgJKHJldmlzaW9uIDE2
NDM1NSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTgwLDcgKzgwLDcgQEAgc3RydWN0IFN0YXRpc3RpY3NEYXRhOwogc3RydWN0IFdl
YlBhZ2VDb25maWd1cmF0aW9uOwogc3RydWN0IFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM7
CiAgICAgCi10eXBlZGVmIEdlbmVyaWNDYWxsYmFjazxXS0RpY3Rpb25hcnlSZWY+IERpY3Rpb25h
cnlDYWxsYmFjazsKK3R5cGVkZWYgR2VuZXJpY0NhbGxiYWNrPEltbXV0YWJsZURpY3Rpb25hcnkq
PiBEaWN0aW9uYXJ5Q2FsbGJhY2s7CiAKICNpZiBFTkFCTEUoTkVUV09SS19JTkZPKQogY2xhc3Mg
V2ViTmV0d29ya0luZm9NYW5hZ2VyUHJveHk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViQ29va2llTWFuYWdlclByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5oCShyZXZpc2lvbiAxNjQzNTUpCisrKyBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ4LDggKzQ4LDggQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBXZWJDb250
ZXh0OwogY2xhc3MgV2ViUHJvY2Vzc1Byb3h5OwogCi10eXBlZGVmIEdlbmVyaWNDYWxsYmFjazxX
S0FycmF5UmVmPiBBcnJheUNhbGxiYWNrOwotdHlwZWRlZiBHZW5lcmljQ2FsbGJhY2s8V0tIVFRQ
Q29va2llQWNjZXB0UG9saWN5LCBIVFRQQ29va2llQWNjZXB0UG9saWN5PiBIVFRQQ29va2llQWNj
ZXB0UG9saWN5Q2FsbGJhY2s7Cit0eXBlZGVmIEdlbmVyaWNDYWxsYmFjazxBUEk6OkFycmF5Kj4g
QXJyYXlDYWxsYmFjazsKK3R5cGVkZWYgR2VuZXJpY0NhbGxiYWNrPEhUVFBDb29raWVBY2NlcHRQ
b2xpY3k+IEhUVFBDb29raWVBY2NlcHRQb2xpY3lDYWxsYmFjazsKIAogY2xhc3MgV2ViQ29va2ll
TWFuYWdlclByb3h5IDogcHVibGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6
Q29va2llTWFuYWdlcj4sIHB1YmxpYyBXZWJDb250ZXh0U3VwcGxlbWVudCwgcHJpdmF0ZSBJUEM6
Ok1lc3NhZ2VSZWNlaXZlciB7CiBwdWJsaWM6CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViRGF0YWJhc2VNYW5hZ2VyUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViRGF0YWJhc2VNYW5hZ2VyUHJveHkuaAkocmV2aXNpb24gMTY0MzU1KQor
KysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkRhdGFiYXNlTWFuYWdlclByb3h5LmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgY2xhc3MgV2ViQ29udGV4dDsKIGNsYXNzIFdl
YlByb2Nlc3NQcm94eTsKIGNsYXNzIFdlYlNlY3VyaXR5T3JpZ2luOwogCi10eXBlZGVmIEdlbmVy
aWNDYWxsYmFjazxXS0FycmF5UmVmPiBBcnJheUNhbGxiYWNrOwordHlwZWRlZiBHZW5lcmljQ2Fs
bGJhY2s8QVBJOjpBcnJheSo+IEFycmF5Q2FsbGJhY2s7CiAKIGNsYXNzIFdlYkRhdGFiYXNlTWFu
YWdlclByb3h5IDogcHVibGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6RGF0
YWJhc2VNYW5hZ2VyPiwgcHVibGljIFdlYkNvbnRleHRTdXBwbGVtZW50LCBwcml2YXRlIElQQzo6
TWVzc2FnZVJlY2VpdmVyIHsKIHB1YmxpYzoKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJGcmFtZVByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYkZyYW1lUHJveHkuaAkocmV2aXNpb24gMTY0MzU1KQorKysgU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYkZyYW1lUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBj
bGFzcyBXZWJGb3JtU3VibWlzc2lvbkxpc3RlbmVyUHJveHk7CiBjbGFzcyBXZWJGcmFtZVBvbGlj
eUxpc3RlbmVyUHJveHk7CiBjbGFzcyBXZWJQYWdlUHJveHk7CiAKLXR5cGVkZWYgR2VuZXJpY0Nh
bGxiYWNrPFdLRGF0YVJlZj4gRGF0YUNhbGxiYWNrOwordHlwZWRlZiBHZW5lcmljQ2FsbGJhY2s8
QVBJOjpEYXRhKj4gRGF0YUNhbGxiYWNrOwogCiBjbGFzcyBXZWJGcmFtZVByb3h5IDogcHVibGlj
IEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6RnJhbWU+IHsKIHB1YmxpYzoKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYktleVZhbHVlU3RvcmFn
ZU1hbmFnZXIuaAkocmV2aXNpb24gMTY0MzU1KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYktleVZhbHVlU3RvcmFnZU1hbmFnZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYs
NyBAQAogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotdHlwZWRlZiBHZW5lcmljQ2FsbGJhY2s8V0tB
cnJheVJlZj4gQXJyYXlDYWxsYmFjazsKK3R5cGVkZWYgR2VuZXJpY0NhbGxiYWNrPEFQSTo6QXJy
YXkqPiBBcnJheUNhbGxiYWNrOwogCiBjbGFzcyBXZWJLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyIDog
cHVibGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6S2V5VmFsdWVTdG9yYWdl
TWFuYWdlcj4sIHB1YmxpYyBXZWJDb250ZXh0U3VwcGxlbWVudCB7CiBwdWJsaWM6CkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViTWVkaWFDYWNoZU1hbmFnZXJQcm94eS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJNZWRpYUNhY2hlTWFuYWdlclBy
b3h5LmgJKHJldmlzaW9uIDE2NDM1NSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJN
ZWRpYUNhY2hlTWFuYWdlclByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAg
bmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBXZWJDb250ZXh0OwogY2xhc3MgV2ViUHJvY2Vzc1By
b3h5OwogCi10eXBlZGVmIEdlbmVyaWNDYWxsYmFjazxXS0FycmF5UmVmPiBBcnJheUNhbGxiYWNr
OwordHlwZWRlZiBHZW5lcmljQ2FsbGJhY2s8QVBJOjpBcnJheSo+IEFycmF5Q2FsbGJhY2s7CiAK
IGNsYXNzIFdlYk1lZGlhQ2FjaGVNYW5hZ2VyUHJveHkgOiBwdWJsaWMgQVBJOjpPYmplY3RJbXBs
PEFQSTo6T2JqZWN0OjpUeXBlOjpNZWRpYUNhY2hlTWFuYWdlcj4sIHB1YmxpYyBXZWJDb250ZXh0
U3VwcGxlbWVudCwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CiBwdWJsaWM6CkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViT3JpZ2luRGF0YU1hbmFnZXJQcm94eS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJPcmlnaW5EYXRhTWFuYWdl
clByb3h5LmgJKHJldmlzaW9uIDE2NDM1NSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJPcmlnaW5EYXRhTWFuYWdlclByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcg
QEAgbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBXZWJTZWN1cml0eU9yaWdpbjsKIHN0cnVjdCBT
ZWN1cml0eU9yaWdpbkRhdGE7CiAKLXR5cGVkZWYgR2VuZXJpY0NhbGxiYWNrPFdLQXJyYXlSZWY+
IEFycmF5Q2FsbGJhY2s7Cit0eXBlZGVmIEdlbmVyaWNDYWxsYmFjazxBUEk6OkFycmF5Kj4gQXJy
YXlDYWxsYmFjazsKIAogY2xhc3MgV2ViT3JpZ2luRGF0YU1hbmFnZXJQcm94eSA6IHB1YmxpYyBB
UEk6Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6OlR5cGU6Ok9yaWdpbkRhdGFNYW5hZ2VyPiwgcHVi
bGljIFdlYkNvbnRleHRTdXBwbGVtZW50LCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsK
IHB1YmxpYzoKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHJl
dmlzaW9uIDE2NDM1NSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
aAkod29ya2luZyBjb3B5KQpAQCAtMTY2LDExICsxNjYsMTEgQEAgc3RydWN0IFdlYlBvcHVwSXRl
bTsKIGNsYXNzIFdlYlZpYnJhdGlvblByb3h5OwogI2VuZGlmCiAKLXR5cGVkZWYgR2VuZXJpY0Nh
bGxiYWNrPFdLU3RyaW5nUmVmLCBTdHJpbmdJbXBsKj4gU3RyaW5nQ2FsbGJhY2s7Ci10eXBlZGVm
IEdlbmVyaWNDYWxsYmFjazxXS1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZVJlZiwgV2ViU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlKj4gU2NyaXB0VmFsdWVDYWxsYmFjazsKK3R5cGVkZWYgR2VuZXJpY0NhbGxi
YWNrPFN0cmluZ0ltcGwqPiBTdHJpbmdDYWxsYmFjazsKK3R5cGVkZWYgR2VuZXJpY0NhbGxiYWNr
PFdlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSo+IFNjcmlwdFZhbHVlQ2FsbGJhY2s7CiAKICNpZiBQ
TEFURk9STShHVEspCi10eXBlZGVmIEdlbmVyaWNDYWxsYmFjazxXS0Vycm9yUmVmPiBQcmludEZp
bmlzaGVkQ2FsbGJhY2s7Cit0eXBlZGVmIEdlbmVyaWNDYWxsYmFjazxBUEk6OkVycm9yKj4gUHJp
bnRGaW5pc2hlZENhbGxiYWNrOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQpA
QCAtMTg3LDExICsxODcsMTEgQEAgc3RydWN0IFF1ZXVlZFRvdWNoRXZlbnRzIHsKIC8vIEZJWE1F
OiBNYWtlIGEgdmVyc2lvbiBvZiBDYWxsYmFja0Jhc2Ugd2l0aCB0aHJlZSBhcmd1bWVudHMsIGFu
ZCBkZWZpbmUgVmFsaWRhdGVDb21tYW5kQ2FsbGJhY2sgYXMgYSBzcGVjaWFsaXphdGlvbi4KIGNs
YXNzIFZhbGlkYXRlQ29tbWFuZENhbGxiYWNrIDogcHVibGljIENhbGxiYWNrQmFzZSB7CiBwdWJs
aWM6Ci0gICAgdHlwZWRlZiB2b2lkICgqQ2FsbGJhY2tGdW5jdGlvbikoV0tTdHJpbmdSZWYsIGJv
b2wsIGludDMyX3QsIFdLRXJyb3JSZWYsIHZvaWQqKTsKKyAgICB0eXBlZGVmIHN0ZDo6ZnVuY3Rp
b248dm9pZChib29sLCBTdHJpbmdJbXBsKiwgYm9vbCwgaW50MzJfdCk+IENhbGxiYWNrRnVuY3Rp
b247CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxWYWxpZGF0ZUNvbW1hbmRDYWxsYmFjaz4gY3Jl
YXRlKHZvaWQqIGNvbnRleHQsIENhbGxiYWNrRnVuY3Rpb24gY2FsbGJhY2spCisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8VmFsaWRhdGVDb21tYW5kQ2FsbGJhY2s+IGNyZWF0ZShDYWxsYmFja0Z1bmN0
aW9uIGNhbGxiYWNrKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBWYWxpZGF0
ZUNvbW1hbmRDYWxsYmFjayhjb250ZXh0LCBjYWxsYmFjaykpOworICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFZhbGlkYXRlQ29tbWFuZENhbGxiYWNrKGNhbGxiYWNrKSk7CiAgICAgfQogCiAg
ICAgdmlydHVhbCB+VmFsaWRhdGVDb21tYW5kQ2FsbGJhY2soKQpAQCAtMjAzLDcgKzIwMyw3IEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2NhbGxiYWNrKTsKIAotICAgICAgICBt
X2NhbGxiYWNrKHRvQVBJKHJldHVyblZhbHVlMSksIHJldHVyblZhbHVlMiwgcmV0dXJuVmFsdWUz
LCAwLCBjb250ZXh0KCkpOworICAgICAgICBtX2NhbGxiYWNrKGZhbHNlLCByZXR1cm5WYWx1ZTEs
IHJldHVyblZhbHVlMiwgcmV0dXJuVmFsdWUzKTsKIAogICAgICAgICBtX2NhbGxiYWNrID0gMDsK
ICAgICB9CkBAIC0yMTIsMTcgKzIxMiwxNSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBBU1NF
UlQobV9jYWxsYmFjayk7CiAKLSAgICAgICAgUmVmUHRyPEFQSTo6RXJyb3I+IGVycm9yID0gQVBJ
OjpFcnJvcjo6Y3JlYXRlKCk7Ci0gICAgICAgIG1fY2FsbGJhY2soMCwgMCwgMCwgdG9BUEkoZXJy
b3IuZ2V0KCkpLCBjb250ZXh0KCkpOworICAgICAgICBtX2NhbGxiYWNrKHRydWUsIDAsIDAsIDAp
OwogICAgICAgICAKICAgICAgICAgbV9jYWxsYmFjayA9IDA7CiAgICAgfQogCiBwcml2YXRlOgog
Ci0gICAgVmFsaWRhdGVDb21tYW5kQ2FsbGJhY2sodm9pZCogY29udGV4dCwgQ2FsbGJhY2tGdW5j
dGlvbiBjYWxsYmFjaykKLSAgICAgICAgOiBDYWxsYmFja0Jhc2UoY29udGV4dCkKLSAgICAgICAg
LCBtX2NhbGxiYWNrKGNhbGxiYWNrKQorICAgIFZhbGlkYXRlQ29tbWFuZENhbGxiYWNrKENhbGxi
YWNrRnVuY3Rpb24gY2FsbGJhY2spCisgICAgICAgIDogbV9jYWxsYmFjayhjYWxsYmFjaykKICAg
ICB7CiAgICAgfQogCkBAIC0yMzIsMTEgKzIzMCwxMSBAQCBwcml2YXRlOgogI2lmIFBMQVRGT1JN
KElPUykKIGNsYXNzIEdlc3R1cmVDYWxsYmFjayA6IHB1YmxpYyBDYWxsYmFja0Jhc2UgewogcHVi
bGljOgotICAgIHR5cGVkZWYgdm9pZCAoKkNhbGxiYWNrRnVuY3Rpb24pKGNvbnN0IFdlYkNvcmU6
OkludFBvaW50JiwgdWludDMyX3QsIHVpbnQzMl90LCB1aW50MzJfdCwgV0tFcnJvclJlZiwgdm9p
ZCopOworICAgIHR5cGVkZWYgc3RkOjpmdW5jdGlvbjx2b2lkKGJvb2wsIGNvbnN0IFdlYkNvcmU6
OkludFBvaW50JiwgdWludDMyX3QsIHVpbnQzMl90LCB1aW50MzJfdCk+IENhbGxiYWNrRnVuY3Rp
b247CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxHZXN0dXJlQ2FsbGJhY2s+IGNyZWF0ZSh2b2lk
KiBjb250ZXh0LCBDYWxsYmFja0Z1bmN0aW9uIGNhbGxiYWNrKQorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEdlc3R1cmVDYWxsYmFjaz4gY3JlYXRlKENhbGxiYWNrRnVuY3Rpb24gY2FsbGJhY2spCiAg
ICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEdlc3R1cmVDYWxsYmFjayhjb250ZXh0
LCBjYWxsYmFjaykpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEdlc3R1cmVDYWxsYmFj
ayhjYWxsYmFjaykpOwogICAgIH0KIAogICAgIHZpcnR1YWwgfkdlc3R1cmVDYWxsYmFjaygpCkBA
IC0yNDgsNyArMjQ2LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgQVNTRVJUKG1fY2FsbGJh
Y2spOwogCi0gICAgICAgIG1fY2FsbGJhY2socmV0dXJuVmFsdWUxLCByZXR1cm5WYWx1ZTIsIHJl
dHVyblZhbHVlMywgcmV0dXJuVmFsdWU0LCAwLCBjb250ZXh0KCkpOworICAgICAgICBtX2NhbGxi
YWNrKGZhbHNlLCByZXR1cm5WYWx1ZTEsIHJldHVyblZhbHVlMiwgcmV0dXJuVmFsdWUzLCByZXR1
cm5WYWx1ZTQpOwogCiAgICAgICAgIG1fY2FsbGJhY2sgPSAwOwogICAgIH0KQEAgLTI1NywxNyAr
MjU1LDE1IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2NhbGxiYWNrKTsKIAot
ICAgICAgICBSZWZQdHI8QVBJOjpFcnJvcj4gZXJyb3IgPSBBUEk6OkVycm9yOjpjcmVhdGUoKTsK
LSAgICAgICAgbV9jYWxsYmFjayhXZWJDb3JlOjpJbnRQb2ludCgpLCAwLCAwLCAwLCB0b0FQSShl
cnJvci5nZXQoKSksIGNvbnRleHQoKSk7CisgICAgICAgIG1fY2FsbGJhY2sodHJ1ZSwgV2ViQ29y
ZTo6SW50UG9pbnQoKSwgMCwgMCwgMCk7CiAKICAgICAgICAgbV9jYWxsYmFjayA9IDA7CiAgICAg
fQogCiBwcml2YXRlOgogCi0gICAgR2VzdHVyZUNhbGxiYWNrKHZvaWQqIGNvbnRleHQsIENhbGxi
YWNrRnVuY3Rpb24gY2FsbGJhY2spCi0gICAgICAgIDogQ2FsbGJhY2tCYXNlKGNvbnRleHQpCi0g
ICAgICAgICwgbV9jYWxsYmFjayhjYWxsYmFjaykKKyAgICBHZXN0dXJlQ2FsbGJhY2soQ2FsbGJh
Y2tGdW5jdGlvbiBjYWxsYmFjaykKKyAgICAgICAgOiBtX2NhbGxiYWNrKGNhbGxiYWNrKQogICAg
IHsKICAgICAgICAgQVNTRVJUKG1fY2FsbGJhY2spOwogICAgIH0KQEAgLTI3NywxMSArMjczLDEx
IEBAIHByaXZhdGU6CiAKIGNsYXNzIFRvdWNoZXNDYWxsYmFjayA6IHB1YmxpYyBDYWxsYmFja0Jh
c2UgewogcHVibGljOgotICAgIHR5cGVkZWYgdm9pZCAoKkNhbGxiYWNrRnVuY3Rpb24pKGNvbnN0
IFdlYkNvcmU6OkludFBvaW50JiwgdWludDMyX3QsIFdLRXJyb3JSZWYsIHZvaWQqKTsKKyAgICB0
eXBlZGVmIHN0ZDo6ZnVuY3Rpb248dm9pZChib29sLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYs
IHVpbnQzMl90KT4gQ2FsbGJhY2tGdW5jdGlvbjsKIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRv
dWNoZXNDYWxsYmFjaz4gY3JlYXRlKHZvaWQqIGNvbnRleHQsIENhbGxiYWNrRnVuY3Rpb24gY2Fs
bGJhY2spCisgICAgc3RhdGljIFBhc3NSZWZQdHI8VG91Y2hlc0NhbGxiYWNrPiBjcmVhdGUoQ2Fs
bGJhY2tGdW5jdGlvbiBjYWxsYmFjaykKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgVG91Y2hlc0NhbGxiYWNrKGNvbnRleHQsIGNhbGxiYWNrKSk7CisgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgVG91Y2hlc0NhbGxiYWNrKGNhbGxiYWNrKSk7CiAgICAgfQogCiAgICAgdmly
dHVhbCB+VG91Y2hlc0NhbGxiYWNrKCkKQEAgLTI5Myw3ICsyODksNyBAQCBwdWJsaWM6CiAgICAg
ewogICAgICAgICBBU1NFUlQobV9jYWxsYmFjayk7CiAKLSAgICAgICAgbV9jYWxsYmFjayhyZXR1
cm5WYWx1ZTEsIHJldHVyblZhbHVlMiwgMCwgY29udGV4dCgpKTsKKyAgICAgICAgbV9jYWxsYmFj
ayh0cnVlLCByZXR1cm5WYWx1ZTEsIHJldHVyblZhbHVlMik7CiAKICAgICAgICAgbV9jYWxsYmFj
ayA9IDA7CiAgICAgfQpAQCAtMzAzLDE2ICsyOTksMTUgQEAgcHVibGljOgogICAgICAgICBBU1NF
UlQobV9jYWxsYmFjayk7CiAKICAgICAgICAgUmVmUHRyPEFQSTo6RXJyb3I+IGVycm9yID0gQVBJ
OjpFcnJvcjo6Y3JlYXRlKCk7Ci0gICAgICAgIG1fY2FsbGJhY2soV2ViQ29yZTo6SW50UG9pbnQo
KSwgMCwgdG9BUEkoZXJyb3IuZ2V0KCkpLCBjb250ZXh0KCkpOworICAgICAgICBtX2NhbGxiYWNr
KGZhbHNlLCBXZWJDb3JlOjpJbnRQb2ludCgpLCAwKTsKICAgICAgICAgCiAgICAgICAgIG1fY2Fs
bGJhY2sgPSAwOwogICAgIH0KICAgICAKIHByaXZhdGU6CiAgICAgCi0gICAgVG91Y2hlc0NhbGxi
YWNrKHZvaWQqIGNvbnRleHQsIENhbGxiYWNrRnVuY3Rpb24gY2FsbGJhY2spCi0gICAgICAgIDog
Q2FsbGJhY2tCYXNlKGNvbnRleHQpCi0gICAgICAgICwgbV9jYWxsYmFjayhjYWxsYmFjaykKKyAg
ICBUb3VjaGVzQ2FsbGJhY2soQ2FsbGJhY2tGdW5jdGlvbiBjYWxsYmFjaykKKyAgICAgICAgOiBt
X2NhbGxiYWNrKGNhbGxiYWNrKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fY2FsbGJhY2spOwog
ICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUNhY2hlTWFu
YWdlclByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJl
c291cmNlQ2FjaGVNYW5hZ2VyUHJveHkuaAkocmV2aXNpb24gMTY0MzU1KQorKysgU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlQ2FjaGVNYW5hZ2VyUHJveHkuaAkod29ya2luZyBj
b3B5KQpAQCAtNDIsNyArNDIsNyBAQCBjbGFzcyBXZWJDb250ZXh0OwogY2xhc3MgV2ViUHJvY2Vz
c1Byb3h5OwogY2xhc3MgV2ViU2VjdXJpdHlPcmlnaW47CiAKLXR5cGVkZWYgR2VuZXJpY0NhbGxi
YWNrPFdLQXJyYXlSZWY+IEFycmF5Q2FsbGJhY2s7Cit0eXBlZGVmIEdlbmVyaWNDYWxsYmFjazxB
UEk6OkFycmF5Kj4gQXJyYXlDYWxsYmFjazsKIAogY2xhc3MgV2ViUmVzb3VyY2VDYWNoZU1hbmFn
ZXJQcm94eSA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6OlR5cGU6OkNhY2hl
TWFuYWdlcj4sIHB1YmxpYyBXZWJDb250ZXh0U3VwcGxlbWVudCwgcHJpdmF0ZSBJUEM6Ok1lc3Nh
Z2VSZWNlaXZlciB7CiBwdWJsaWM6CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0MvV0tBcHBsaWNhdGlvbkNhY2hlTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQXBwbGljYXRpb25DYWNoZU1hbmFnZXIuY3BwCShyZXZp
c2lvbiAxNjQzNTUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tBcHBsaWNh
dGlvbkNhY2hlTWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDggQEAKIAog
dXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAordHlwZWRlZiBHZW5lcmljQVBJQ2FsbGJhY2s8V0tB
cnJheVJlZj4gQXJyYXlBUElDYWxsYmFjazsKKwogV0tUeXBlSUQgV0tBcHBsaWNhdGlvbkNhY2hl
TWFuYWdlckdldFR5cGVJRCgpCiB7CiAgICAgcmV0dXJuIHRvQVBJKFdlYkFwcGxpY2F0aW9uQ2Fj
aGVNYW5hZ2VyUHJveHk6OkFQSVR5cGUpOwpAQCAtMzgsNyArNDAsNyBAQCBXS1R5cGVJRCBXS0Fw
cGxpY2F0aW9uQ2FjaGVNYW5hZ2VyR2V0VHlwCiAKIHZvaWQgV0tBcHBsaWNhdGlvbkNhY2hlTWFu
YWdlckdldEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5zKFdLQXBwbGljYXRpb25DYWNoZU1hbmFnZXJS
ZWYgYXBwbGljYXRpb25DYWNoZU1hbmFnZXJSZWYsIHZvaWQqIGNvbnRleHQsIFdLQXBwbGljYXRp
b25DYWNoZU1hbmFnZXJHZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luc0Z1bmN0aW9uIGNhbGxiYWNr
KQogewotICAgIHRvSW1wbChhcHBsaWNhdGlvbkNhY2hlTWFuYWdlclJlZiktPmdldEFwcGxpY2F0
aW9uQ2FjaGVPcmlnaW5zKEFycmF5Q2FsbGJhY2s6OmNyZWF0ZShjb250ZXh0LCBjYWxsYmFjaykp
OworICAgIHRvSW1wbChhcHBsaWNhdGlvbkNhY2hlTWFuYWdlclJlZiktPmdldEFwcGxpY2F0aW9u
Q2FjaGVPcmlnaW5zKEFycmF5QVBJQ2FsbGJhY2s6OmNyZWF0ZShjb250ZXh0LCBjYWxsYmFjaykp
OwogfQogCiB2b2lkIFdLQXBwbGljYXRpb25DYWNoZU1hbmFnZXJEZWxldGVFbnRyaWVzRm9yT3Jp
Z2luKFdLQXBwbGljYXRpb25DYWNoZU1hbmFnZXJSZWYgYXBwbGljYXRpb25DYWNoZU1hbmFnZXJS
ZWYsIFdLU2VjdXJpdHlPcmlnaW5SZWYgb3JpZ2luUmVmKQpJbmRleDogU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAJKHJldmlzaW9uIDE2NDM1NSkKKysrIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02Myw2ICs2Myw4IEBAIHRlbXBsYXRlPD4gc3RydWN0IENsaWVudFRyYWl0czxXS0NvbnRl
eHQKIAogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAordHlwZWRlZiBHZW5lcmljQVBJQ2FsbGJh
Y2s8V0tEaWN0aW9uYXJ5UmVmPiBEaWN0aW9uYXJ5QVBJQ2FsbGJhY2s7CisKIFdLVHlwZUlEIFdL
Q29udGV4dEdldFR5cGVJRCgpCiB7CiAgICAgcmV0dXJuIHRvQVBJKFdlYkNvbnRleHQ6OkFQSVR5
cGUpOwpAQCAtNDE2LDEyICs0MTgsMTIgQEAgdm9pZCBXS0NvbnRleHRXYXJtSW5pdGlhbFByb2Nl
c3MoV0tDb250ZQogCiB2b2lkIFdLQ29udGV4dEdldFN0YXRpc3RpY3MoV0tDb250ZXh0UmVmIGNv
bnRleHRSZWYsIHZvaWQqIGNvbnRleHQsIFdLQ29udGV4dEdldFN0YXRpc3RpY3NGdW5jdGlvbiBj
YWxsYmFjaykKIHsKLSAgICB0b0ltcGwoY29udGV4dFJlZiktPmdldFN0YXRpc3RpY3MoMHhGRkZG
RkZGRiwgRGljdGlvbmFyeUNhbGxiYWNrOjpjcmVhdGUoY29udGV4dCwgY2FsbGJhY2spKTsKKyAg
ICB0b0ltcGwoY29udGV4dFJlZiktPmdldFN0YXRpc3RpY3MoMHhGRkZGRkZGRiwgRGljdGlvbmFy
eUFQSUNhbGxiYWNrOjpjcmVhdGUoY29udGV4dCwgY2FsbGJhY2spKTsKIH0KIAogdm9pZCBXS0Nv
bnRleHRHZXRTdGF0aXN0aWNzV2l0aE9wdGlvbnMoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdL
U3RhdGlzdGljc09wdGlvbnMgb3B0aW9uc01hc2ssIHZvaWQqIGNvbnRleHQsIFdLQ29udGV4dEdl
dFN0YXRpc3RpY3NGdW5jdGlvbiBjYWxsYmFjaykKIHsKLSAgICB0b0ltcGwoY29udGV4dFJlZikt
PmdldFN0YXRpc3RpY3Mob3B0aW9uc01hc2ssIERpY3Rpb25hcnlDYWxsYmFjazo6Y3JlYXRlKGNv
bnRleHQsIGNhbGxiYWNrKSk7CisgICAgdG9JbXBsKGNvbnRleHRSZWYpLT5nZXRTdGF0aXN0aWNz
KG9wdGlvbnNNYXNrLCBEaWN0aW9uYXJ5QVBJQ2FsbGJhY2s6OmNyZWF0ZShjb250ZXh0LCBjYWxs
YmFjaykpOwogfQogCiB2b2lkIFdLQ29udGV4dEdhcmJhZ2VDb2xsZWN0SmF2YVNjcmlwdE9iamVj
dHMoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0MvV0tDb29raWVNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0MvV0tDb29raWVNYW5hZ2VyLmNwcAkocmV2aXNpb24gMTY0MzU1KQor
KysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQ29va2llTWFuYWdlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDkgQEAKIAogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsK
IAordHlwZWRlZiBHZW5lcmljQVBJQ2FsbGJhY2s8V0tBcnJheVJlZj4gQXJyYXlBUElDYWxsYmFj
azsKK3R5cGVkZWYgR2VuZXJpY0FQSUNhbGxiYWNrPFdLSFRUUENvb2tpZUFjY2VwdFBvbGljeSwg
SFRUUENvb2tpZUFjY2VwdFBvbGljeT4gSFRUUENvb2tpZUFjY2VwdFBvbGljeUFQSUNhbGxiYWNr
OworCiBXS1R5cGVJRCBXS0Nvb2tpZU1hbmFnZXJHZXRUeXBlSUQoKQogewogICAgIHJldHVybiB0
b0FQSShXZWJDb29raWVNYW5hZ2VyUHJveHk6OkFQSVR5cGUpOwpAQCAtNDMsNyArNDYsNyBAQCB2
b2lkIFdLQ29va2llTWFuYWdlclNldENsaWVudChXS0Nvb2tpZU1hCiAKIHZvaWQgV0tDb29raWVN
YW5hZ2VyR2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoV0tDb29raWVNYW5hZ2VyUmVmIGNvb2tpZU1h
bmFnZXJSZWYsIHZvaWQqIGNvbnRleHQsIFdLQ29va2llTWFuYWdlckdldENvb2tpZUhvc3RuYW1l
c0Z1bmN0aW9uIGNhbGxiYWNrKQogewotICAgIHRvSW1wbChjb29raWVNYW5hZ2VyUmVmKS0+Z2V0
SG9zdG5hbWVzV2l0aENvb2tpZXMoQXJyYXlDYWxsYmFjazo6Y3JlYXRlKGNvbnRleHQsIGNhbGxi
YWNrKSk7CisgICAgdG9JbXBsKGNvb2tpZU1hbmFnZXJSZWYpLT5nZXRIb3N0bmFtZXNXaXRoQ29v
a2llcyhBcnJheUFQSUNhbGxiYWNrOjpjcmVhdGUoY29udGV4dCwgY2FsbGJhY2spKTsKIH0KIAog
dm9pZCBXS0Nvb2tpZU1hbmFnZXJEZWxldGVDb29raWVzRm9ySG9zdG5hbWUoV0tDb29raWVNYW5h
Z2VyUmVmIGNvb2tpZU1hbmFnZXJSZWYsIFdLU3RyaW5nUmVmIGhvc3RuYW1lKQpAQCAtNjgsNyAr
NzEsNyBAQCB2b2lkIFdLQ29va2llTWFuYWdlclNldEhUVFBDb29raWVBY2NlcHRQCiAKIHZvaWQg
V0tDb29raWVNYW5hZ2VyR2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShXS0Nvb2tpZU1hbmFnZXJS
ZWYgY29va2llTWFuYWdlciwgdm9pZCogY29udGV4dCwgV0tDb29raWVNYW5hZ2VyR2V0SFRUUENv
b2tpZUFjY2VwdFBvbGljeUZ1bmN0aW9uIGNhbGxiYWNrKQogewotICAgIHRvSW1wbChjb29raWVN
YW5hZ2VyKS0+Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShIVFRQQ29va2llQWNjZXB0UG9saWN5
Q2FsbGJhY2s6OmNyZWF0ZShjb250ZXh0LCBjYWxsYmFjaykpOworICAgIHRvSW1wbChjb29raWVN
YW5hZ2VyKS0+Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShIVFRQQ29va2llQWNjZXB0UG9saWN5
QVBJQ2FsbGJhY2s6OmNyZWF0ZShjb250ZXh0LCBjYWxsYmFjaykpOwogfQogCiB2b2lkIFdLQ29v
a2llTWFuYWdlclN0YXJ0T2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhXS0Nvb2tpZU1hbmFnZXJSZWYg
Y29va2llTWFuYWdlcikKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0Rh
dGFiYXNlTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9DL1dLRGF0YWJhc2VNYW5hZ2VyLmNwcAkocmV2aXNpb24gMTY0MzU1KQorKysgU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLRGF0YWJhc2VNYW5hZ2VyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzEsNiArMzEsOCBAQAogCiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogCit0eXBl
ZGVmIEdlbmVyaWNBUElDYWxsYmFjazxXS0FycmF5UmVmPiBBcnJheUFQSUNhbGxiYWNrOworCiBX
S1R5cGVJRCBXS0RhdGFiYXNlTWFuYWdlckdldFR5cGVJRCgpCiB7CiAjaWYgRU5BQkxFKFNRTF9E
QVRBQkFTRSkKQEAgLTE1NSw3ICsxNTcsNyBAQCB2b2lkIFdLRGF0YWJhc2VNYW5hZ2VyU2V0Q2xp
ZW50KFdLRGF0YWJhCiB2b2lkIFdLRGF0YWJhc2VNYW5hZ2VyR2V0RGF0YWJhc2VzQnlPcmlnaW4o
V0tEYXRhYmFzZU1hbmFnZXJSZWYgZGF0YWJhc2VNYW5hZ2VyUmVmLCB2b2lkKiBjb250ZXh0LCBX
S0RhdGFiYXNlTWFuYWdlckdldERhdGFiYXNlc0J5T3JpZ2luRnVuY3Rpb24gY2FsbGJhY2spCiB7
CiAjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKLSAgICB0b0ltcGwoZGF0YWJhc2VNYW5hZ2VyUmVm
KS0+Z2V0RGF0YWJhc2VzQnlPcmlnaW4oQXJyYXlDYWxsYmFjazo6Y3JlYXRlKGNvbnRleHQsIGNh
bGxiYWNrKSk7CisgICAgdG9JbXBsKGRhdGFiYXNlTWFuYWdlclJlZiktPmdldERhdGFiYXNlc0J5
T3JpZ2luKEFycmF5QVBJQ2FsbGJhY2s6OmNyZWF0ZShjb250ZXh0LCBjYWxsYmFjaykpOwogI2Vs
c2UKICAgICBVTlVTRURfUEFSQU0oZGF0YWJhc2VNYW5hZ2VyUmVmKTsKICAgICBVTlVTRURfUEFS
QU0oY29udGV4dCk7CkBAIC0xNjYsNyArMTY4LDcgQEAgdm9pZCBXS0RhdGFiYXNlTWFuYWdlckdl
dERhdGFiYXNlc0J5T3JpZwogdm9pZCBXS0RhdGFiYXNlTWFuYWdlckdldERhdGFiYXNlT3JpZ2lu
cyhXS0RhdGFiYXNlTWFuYWdlclJlZiBkYXRhYmFzZU1hbmFnZXJSZWYsIHZvaWQqIGNvbnRleHQs
IFdLRGF0YWJhc2VNYW5hZ2VyR2V0RGF0YWJhc2VPcmlnaW5zRnVuY3Rpb24gY2FsbGJhY2spCiB7
CiAjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKLSAgICB0b0ltcGwoZGF0YWJhc2VNYW5hZ2VyUmVm
KS0+Z2V0RGF0YWJhc2VPcmlnaW5zKEFycmF5Q2FsbGJhY2s6OmNyZWF0ZShjb250ZXh0LCBjYWxs
YmFjaykpOworICAgIHRvSW1wbChkYXRhYmFzZU1hbmFnZXJSZWYpLT5nZXREYXRhYmFzZU9yaWdp
bnMoQXJyYXlBUElDYWxsYmFjazo6Y3JlYXRlKGNvbnRleHQsIGNhbGxiYWNrKSk7CiAjZWxzZQog
ICAgIFVOVVNFRF9QQVJBTShkYXRhYmFzZU1hbmFnZXJSZWYpOwogICAgIFVOVVNFRF9QQVJBTShj
b250ZXh0KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0ZyYW1lLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tGcmFtZS5j
cHAJKHJldmlzaW9uIDE2NDM1NSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9X
S0ZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsOCBAQAogCiB1c2luZyBuYW1l
c3BhY2UgV2ViS2l0OwogCit0eXBlZGVmIEdlbmVyaWNBUElDYWxsYmFjazxXS0RhdGFSZWY+IERh
dGFBUElDYWxsYmFjazsKKwogV0tUeXBlSUQgV0tGcmFtZUdldFR5cGVJRCgpCiB7CiAgICAgcmV0
dXJuIHRvQVBJKFdlYkZyYW1lUHJveHk6OkFQSVR5cGUpOwpAQCAtMTI0LDE3ICsxMjYsMTcgQEAg
Ym9vbCBXS0ZyYW1lSXNGcmFtZVNldChXS0ZyYW1lUmVmIGZyYW1lUgogCiB2b2lkIFdLRnJhbWVH
ZXRNYWluUmVzb3VyY2VEYXRhKFdLRnJhbWVSZWYgZnJhbWVSZWYsIFdLRnJhbWVHZXRSZXNvdXJj
ZURhdGFGdW5jdGlvbiBjYWxsYmFjaywgdm9pZCogY29udGV4dCkKIHsKLSAgICB0b0ltcGwoZnJh
bWVSZWYpLT5nZXRNYWluUmVzb3VyY2VEYXRhKERhdGFDYWxsYmFjazo6Y3JlYXRlKGNvbnRleHQs
IGNhbGxiYWNrKSk7CisgICAgdG9JbXBsKGZyYW1lUmVmKS0+Z2V0TWFpblJlc291cmNlRGF0YShE
YXRhQVBJQ2FsbGJhY2s6OmNyZWF0ZShjb250ZXh0LCBjYWxsYmFjaykpOwogfQogCiB2b2lkIFdL
RnJhbWVHZXRSZXNvdXJjZURhdGEoV0tGcmFtZVJlZiBmcmFtZVJlZiwgV0tVUkxSZWYgcmVzb3Vy
Y2VVUkwsIFdLRnJhbWVHZXRSZXNvdXJjZURhdGFGdW5jdGlvbiBjYWxsYmFjaywgdm9pZCogY29u
dGV4dCkKIHsKLSAgICB0b0ltcGwoZnJhbWVSZWYpLT5nZXRSZXNvdXJjZURhdGEodG9JbXBsKHJl
c291cmNlVVJMKSwgRGF0YUNhbGxiYWNrOjpjcmVhdGUoY29udGV4dCwgY2FsbGJhY2spKTsKKyAg
ICB0b0ltcGwoZnJhbWVSZWYpLT5nZXRSZXNvdXJjZURhdGEodG9JbXBsKHJlc291cmNlVVJMKSwg
RGF0YUFQSUNhbGxiYWNrOjpjcmVhdGUoY29udGV4dCwgY2FsbGJhY2spKTsKIH0KIAogdm9pZCBX
S0ZyYW1lR2V0V2ViQXJjaGl2ZShXS0ZyYW1lUmVmIGZyYW1lUmVmLCBXS0ZyYW1lR2V0V2ViQXJj
aGl2ZUZ1bmN0aW9uIGNhbGxiYWNrLCB2b2lkKiBjb250ZXh0KQogewotICAgIHRvSW1wbChmcmFt
ZVJlZiktPmdldFdlYkFyY2hpdmUoRGF0YUNhbGxiYWNrOjpjcmVhdGUoY29udGV4dCwgY2FsbGJh
Y2spKTsKKyAgICB0b0ltcGwoZnJhbWVSZWYpLT5nZXRXZWJBcmNoaXZlKERhdGFBUElDYWxsYmFj
azo6Y3JlYXRlKGNvbnRleHQsIGNhbGxiYWNrKSk7CiB9CiAKIC8vIE5PVEU6IFRoZXNlIGFyZSBk
ZXByZWNhdGVkIGFuZCBzaG91bGQgYmUgcmVtb3ZlZC4gVGhleSBjdXJyZW50bHkgZG8gbm90aGlu
Zy4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0tleVZhbHVlU3RvcmFn
ZU1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Qy9XS0tleVZhbHVlU3RvcmFnZU1hbmFnZXIuY3BwCShyZXZpc2lvbiAxNjQzNTUpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsOCBAQAogCiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0
OwogCit0eXBlZGVmIEdlbmVyaWNBUElDYWxsYmFjazxXS0FycmF5UmVmPiBBcnJheUFQSUNhbGxi
YWNrOworCiBXS1R5cGVJRCBXS0tleVZhbHVlU3RvcmFnZU1hbmFnZXJHZXRUeXBlSUQoKQogewog
ICAgIHJldHVybiB0b0FQSShXZWJLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyOjpBUElUeXBlKTsKQEAg
LTU2LDEyICs1OCwxMiBAQCBXS1N0cmluZ1JlZiBXS0tleVZhbHVlU3RvcmFnZU1hbmFnZXJHZXRN
CiAKIHZvaWQgV0tLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyR2V0S2V5VmFsdWVTdG9yYWdlT3JpZ2lu
cyhXS0tleVZhbHVlU3RvcmFnZU1hbmFnZXJSZWYga2V5VmFsdWVTdG9yYWdlTWFuYWdlclJlZiwg
dm9pZCogY29udGV4dCwgV0tLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyR2V0S2V5VmFsdWVTdG9yYWdl
T3JpZ2luc0Z1bmN0aW9uIGNhbGxiYWNrKQogewotICAgIHRvSW1wbChrZXlWYWx1ZVN0b3JhZ2VN
YW5hZ2VyUmVmKS0+Z2V0S2V5VmFsdWVTdG9yYWdlT3JpZ2lucyhBcnJheUNhbGxiYWNrOjpjcmVh
dGUoY29udGV4dCwgY2FsbGJhY2spKTsKKyAgICB0b0ltcGwoa2V5VmFsdWVTdG9yYWdlTWFuYWdl
clJlZiktPmdldEtleVZhbHVlU3RvcmFnZU9yaWdpbnMoQXJyYXlBUElDYWxsYmFjazo6Y3JlYXRl
KGNvbnRleHQsIGNhbGxiYWNrKSk7CiB9CiAKIHZvaWQgV0tLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2Vy
R2V0U3RvcmFnZURldGFpbHNCeU9yaWdpbihXS0tleVZhbHVlU3RvcmFnZU1hbmFnZXJSZWYga2V5
VmFsdWVTdG9yYWdlTWFuYWdlclJlZiwgdm9pZCogY29udGV4dCwgV0tLZXlWYWx1ZVN0b3JhZ2VN
YW5hZ2VyR2V0U3RvcmFnZURldGFpbHNCeU9yaWdpbkZ1bmN0aW9uIGNhbGxiYWNrKQogewotICAg
IHRvSW1wbChrZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyUmVmKS0+Z2V0U3RvcmFnZURldGFpbHNCeU9y
aWdpbihBcnJheUNhbGxiYWNrOjpjcmVhdGUoY29udGV4dCwgY2FsbGJhY2spKTsKKyAgICB0b0lt
cGwoa2V5VmFsdWVTdG9yYWdlTWFuYWdlclJlZiktPmdldFN0b3JhZ2VEZXRhaWxzQnlPcmlnaW4o
QXJyYXlBUElDYWxsYmFjazo6Y3JlYXRlKGNvbnRleHQsIGNhbGxiYWNrKSk7CiB9CiAKIHZvaWQg
V0tLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyRGVsZXRlRW50cmllc0Zvck9yaWdpbihXS0tleVZhbHVl
U3RvcmFnZU1hbmFnZXJSZWYga2V5VmFsdWVTdG9yYWdlTWFuYWdlclJlZiwgV0tTZWN1cml0eU9y
aWdpblJlZiBvcmlnaW5SZWYpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mv
V0tNZWRpYUNhY2hlTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9DL1dLTWVkaWFDYWNoZU1hbmFnZXIuY3BwCShyZXZpc2lvbiAxNjQzNTUpCisr
KyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tNZWRpYUNhY2hlTWFuYWdlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDggQEAKIAogdXNpbmcgbmFtZXNwYWNlIFdlYktp
dDsKIAordHlwZWRlZiBHZW5lcmljQVBJQ2FsbGJhY2s8V0tBcnJheVJlZj4gQXJyYXlBUElDYWxs
YmFjazsKKwogV0tUeXBlSUQgV0tNZWRpYUNhY2hlTWFuYWdlckdldFR5cGVJRCgpCiB7CiAgICAg
cmV0dXJuIHRvQVBJKFdlYk1lZGlhQ2FjaGVNYW5hZ2VyUHJveHk6OkFQSVR5cGUpOwpAQCAtMzgs
NyArNDAsNyBAQCBXS1R5cGVJRCBXS01lZGlhQ2FjaGVNYW5hZ2VyR2V0VHlwZUlEKCkKIAogdm9p
ZCBXS01lZGlhQ2FjaGVNYW5hZ2VyR2V0SG9zdG5hbWVzV2l0aE1lZGlhQ2FjaGUoV0tNZWRpYUNh
Y2hlTWFuYWdlclJlZiBtZWRpYUNhY2hlTWFuYWdlclJlZiwgdm9pZCogY29udGV4dCwgV0tNZWRp
YUNhY2hlTWFuYWdlckdldEhvc3RuYW1lc1dpdGhNZWRpYUNhY2hlRnVuY3Rpb24gY2FsbGJhY2sp
CiB7Ci0gICAgdG9JbXBsKG1lZGlhQ2FjaGVNYW5hZ2VyUmVmKS0+Z2V0SG9zdG5hbWVzV2l0aE1l
ZGlhQ2FjaGUoQXJyYXlDYWxsYmFjazo6Y3JlYXRlKGNvbnRleHQsIGNhbGxiYWNrKSk7CisgICAg
dG9JbXBsKG1lZGlhQ2FjaGVNYW5hZ2VyUmVmKS0+Z2V0SG9zdG5hbWVzV2l0aE1lZGlhQ2FjaGUo
QXJyYXlBUElDYWxsYmFjazo6Y3JlYXRlKGNvbnRleHQsIGNhbGxiYWNrKSk7CiB9CiAKIHZvaWQg
V0tNZWRpYUNhY2hlTWFuYWdlckNsZWFyQ2FjaGVGb3JIb3N0bmFtZShXS01lZGlhQ2FjaGVNYW5h
Z2VyUmVmIG1lZGlhQ2FjaGVNYW5hZ2VyUmVmLCBXS1N0cmluZ1JlZiBob3N0bmFtZSkKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS09yaWdpbkRhdGFNYW5hZ2VyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tPcmlnaW5EYXRh
TWFuYWdlci5jcHAJKHJldmlzaW9uIDE2NDM1NSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQy9XS09yaWdpbkRhdGFNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiAr
MzEsOCBAQAogCiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogCit0eXBlZGVmIEdlbmVyaWNBUElD
YWxsYmFjazxXS0FycmF5UmVmPiBBcnJheUFQSUNhbGxiYWNrOworCiBXS1R5cGVJRCBXS09yaWdp
bkRhdGFNYW5hZ2VyR2V0VHlwZUlEKCkKIHsKICAgICByZXR1cm4gdG9BUEkoV2ViT3JpZ2luRGF0
YU1hbmFnZXJQcm94eTo6QVBJVHlwZSk7CkBAIC0zOCw3ICs0MCw3IEBAIFdLVHlwZUlEIFdLT3Jp
Z2luRGF0YU1hbmFnZXJHZXRUeXBlSUQoKQogCiB2b2lkIFdLT3JpZ2luRGF0YU1hbmFnZXJHZXRP
cmlnaW5zKFdLT3JpZ2luRGF0YU1hbmFnZXJSZWYgb3JpZ2luRGF0YU1hbmFnZXJSZWYsIFdLT3Jp
Z2luRGF0YVR5cGVzIHR5cGVzLCB2b2lkKiBjb250ZXh0LCBXS09yaWdpbkRhdGFNYW5hZ2VyR2V0
T3JpZ2luc0Z1bmN0aW9uIGNhbGxiYWNrKQogewotICAgIHRvSW1wbChvcmlnaW5EYXRhTWFuYWdl
clJlZiktPmdldE9yaWdpbnModHlwZXMsIEFycmF5Q2FsbGJhY2s6OmNyZWF0ZShjb250ZXh0LCBj
YWxsYmFjaykpOworICAgIHRvSW1wbChvcmlnaW5EYXRhTWFuYWdlclJlZiktPmdldE9yaWdpbnMo
dHlwZXMsIEFycmF5QVBJQ2FsbGJhY2s6OmNyZWF0ZShjb250ZXh0LCBjYWxsYmFjaykpOwogfQog
CiB2b2lkIFdLT3JpZ2luRGF0YU1hbmFnZXJEZWxldGVFbnRyaWVzRm9yT3JpZ2luKFdLT3JpZ2lu
RGF0YU1hbmFnZXJSZWYgb3JpZ2luRGF0YU1hbmFnZXJSZWYsIFdLT3JpZ2luRGF0YVR5cGVzIHR5
cGVzLCBXS1NlY3VyaXR5T3JpZ2luUmVmIG9yaWdpblJlZikKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwCShyZXZpc2lvbiAxNjQzNTUpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQs
NiArNzQsMTAgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgQ2xpZW50VHJhaXRzPFdLUGFnZVVJQwogCiB9
CiAKK3R5cGVkZWYgR2VuZXJpY0FQSUNhbGxiYWNrPFdLRGF0YVJlZj4gRGF0YUFQSUNhbGxiYWNr
OwordHlwZWRlZiBHZW5lcmljQVBJQ2FsbGJhY2s8V0tTdHJpbmdSZWYsIFN0cmluZ0ltcGwqPiBT
dHJpbmdBUElDYWxsYmFjazsKK3R5cGVkZWYgR2VuZXJpY0FQSUNhbGxiYWNrPFdLU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlUmVmPiBTY3JpcHRWYWx1ZUFQSUNhbGxiYWNrOworCiBXS1R5cGVJRCBXS1Bh
Z2VHZXRUeXBlSUQoKQogewogICAgIHJldHVybiB0b0FQSShXZWJQYWdlUHJveHk6OkFQSVR5cGUp
OwpAQCAtMTQ3Miw3ICsxNDc2LDcgQEAgdm9pZCBXS1BhZ2VTZXRTZXNzaW9uKFdLUGFnZVJlZiBw
YWdlUmVmLAogCiB2b2lkIFdLUGFnZVJ1bkphdmFTY3JpcHRJbk1haW5GcmFtZShXS1BhZ2VSZWYg
cGFnZVJlZiwgV0tTdHJpbmdSZWYgc2NyaXB0UmVmLCB2b2lkKiBjb250ZXh0LCBXS1BhZ2VSdW5K
YXZhU2NyaXB0RnVuY3Rpb24gY2FsbGJhY2spCiB7Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT5ydW5K
YXZhU2NyaXB0SW5NYWluRnJhbWUodG9JbXBsKHNjcmlwdFJlZiktPnN0cmluZygpLCBTY3JpcHRW
YWx1ZUNhbGxiYWNrOjpjcmVhdGUoY29udGV4dCwgY2FsbGJhY2spKTsKKyAgICB0b0ltcGwocGFn
ZVJlZiktPnJ1bkphdmFTY3JpcHRJbk1haW5GcmFtZSh0b0ltcGwoc2NyaXB0UmVmKS0+c3RyaW5n
KCksIFNjcmlwdFZhbHVlQVBJQ2FsbGJhY2s6OmNyZWF0ZShjb250ZXh0LCBjYWxsYmFjaykpOwog
fQogCiAjaWZkZWYgX19CTE9DS1NfXwpAQCAtMTQ5MSwyOCArMTQ5NSwyOCBAQCB2b2lkIFdLUGFn
ZVJ1bkphdmFTY3JpcHRJbk1haW5GcmFtZV9iKFdLCiAKIHZvaWQgV0tQYWdlUmVuZGVyVHJlZUV4
dGVybmFsUmVwcmVzZW50YXRpb24oV0tQYWdlUmVmIHBhZ2VSZWYsIHZvaWQqIGNvbnRleHQsIFdL
UGFnZVJlbmRlclRyZWVFeHRlcm5hbFJlcHJlc2VudGF0aW9uRnVuY3Rpb24gY2FsbGJhY2spCiB7
Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT5nZXRSZW5kZXJUcmVlRXh0ZXJuYWxSZXByZXNlbnRhdGlv
bihTdHJpbmdDYWxsYmFjazo6Y3JlYXRlKGNvbnRleHQsIGNhbGxiYWNrKSk7CisgICAgdG9JbXBs
KHBhZ2VSZWYpLT5nZXRSZW5kZXJUcmVlRXh0ZXJuYWxSZXByZXNlbnRhdGlvbihTdHJpbmdBUElD
YWxsYmFjazo6Y3JlYXRlKGNvbnRleHQsIGNhbGxiYWNrKSk7CiB9CiAKIHZvaWQgV0tQYWdlR2V0
U291cmNlRm9yRnJhbWUoV0tQYWdlUmVmIHBhZ2VSZWYsIFdLRnJhbWVSZWYgZnJhbWVSZWYsIHZv
aWQqIGNvbnRleHQsIFdLUGFnZUdldFNvdXJjZUZvckZyYW1lRnVuY3Rpb24gY2FsbGJhY2spCiB7
Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT5nZXRTb3VyY2VGb3JGcmFtZSh0b0ltcGwoZnJhbWVSZWYp
LCBTdHJpbmdDYWxsYmFjazo6Y3JlYXRlKGNvbnRleHQsIGNhbGxiYWNrKSk7CisgICAgdG9JbXBs
KHBhZ2VSZWYpLT5nZXRTb3VyY2VGb3JGcmFtZSh0b0ltcGwoZnJhbWVSZWYpLCBTdHJpbmdBUElD
YWxsYmFjazo6Y3JlYXRlKGNvbnRleHQsIGNhbGxiYWNrKSk7CiB9CiAKIHZvaWQgV0tQYWdlR2V0
Q29udGVudHNBc1N0cmluZyhXS1BhZ2VSZWYgcGFnZVJlZiwgdm9pZCogY29udGV4dCwgV0tQYWdl
R2V0Q29udGVudHNBc1N0cmluZ0Z1bmN0aW9uIGNhbGxiYWNrKQogewotICAgIHRvSW1wbChwYWdl
UmVmKS0+Z2V0Q29udGVudHNBc1N0cmluZyhTdHJpbmdDYWxsYmFjazo6Y3JlYXRlKGNvbnRleHQs
IGNhbGxiYWNrKSk7CisgICAgdG9JbXBsKHBhZ2VSZWYpLT5nZXRDb250ZW50c0FzU3RyaW5nKFN0
cmluZ0FQSUNhbGxiYWNrOjpjcmVhdGUoY29udGV4dCwgY2FsbGJhY2spKTsKIH0KIAogdm9pZCBX
S1BhZ2VHZXRTZWxlY3Rpb25Bc1dlYkFyY2hpdmVEYXRhKFdLUGFnZVJlZiBwYWdlUmVmLCB2b2lk
KiBjb250ZXh0LCBXS1BhZ2VHZXRTZWxlY3Rpb25Bc1dlYkFyY2hpdmVEYXRhRnVuY3Rpb24gY2Fs
bGJhY2spCiB7Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT5nZXRTZWxlY3Rpb25Bc1dlYkFyY2hpdmVE
YXRhKERhdGFDYWxsYmFjazo6Y3JlYXRlKGNvbnRleHQsIGNhbGxiYWNrKSk7CisgICAgdG9JbXBs
KHBhZ2VSZWYpLT5nZXRTZWxlY3Rpb25Bc1dlYkFyY2hpdmVEYXRhKERhdGFBUElDYWxsYmFjazo6
Y3JlYXRlKGNvbnRleHQsIGNhbGxiYWNrKSk7CiB9CiAKIHZvaWQgV0tQYWdlR2V0Q29udGVudHNB
c01IVE1MRGF0YShXS1BhZ2VSZWYgcGFnZVJlZiwgYm9vbCB1c2VCaW5hcnlFbmNvZGluZywgdm9p
ZCogY29udGV4dCwgV0tQYWdlR2V0Q29udGVudHNBc01IVE1MRGF0YUZ1bmN0aW9uIGNhbGxiYWNr
KQogewogI2lmIEVOQUJMRShNSFRNTCkKLSAgICB0b0ltcGwocGFnZVJlZiktPmdldENvbnRlbnRz
QXNNSFRNTERhdGEoRGF0YUNhbGxiYWNrOjpjcmVhdGUoY29udGV4dCwgY2FsbGJhY2spLCB1c2VC
aW5hcnlFbmNvZGluZyk7CisgICAgdG9JbXBsKHBhZ2VSZWYpLT5nZXRDb250ZW50c0FzTUhUTUxE
YXRhKERhdGFBUElDYWxsYmFjazo6Y3JlYXRlKGNvbnRleHQsIGNhbGxiYWNrKSwgdXNlQmluYXJ5
RW5jb2RpbmcpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0ocGFnZVJlZik7CiAgICAgVU5VU0VE
X1BBUkFNKHVzZUJpbmFyeUVuY29kaW5nKTsKQEAgLTE1MjMsNyArMTUyNyw3IEBAIHZvaWQgV0tQ
YWdlR2V0Q29udGVudHNBc01IVE1MRGF0YShXS1BhZ2UKIAogdm9pZCBXS1BhZ2VGb3JjZVJlcGFp
bnQoV0tQYWdlUmVmIHBhZ2VSZWYsIHZvaWQqIGNvbnRleHQsIFdLUGFnZUZvcmNlUmVwYWludEZ1
bmN0aW9uIGNhbGxiYWNrKQogewotICAgIHRvSW1wbChwYWdlUmVmKS0+Zm9yY2VSZXBhaW50KFZv
aWRDYWxsYmFjazo6Y3JlYXRlKGNvbnRleHQsIGNhbGxiYWNrKSk7CisgICAgdG9JbXBsKHBhZ2VS
ZWYpLT5mb3JjZVJlcGFpbnQoVm9pZEFQSUNhbGxiYWNrOjpjcmVhdGUoY29udGV4dCwgY2FsbGJh
Y2spKTsKIH0KIAogV0tfRVhQT1JUIFdLVVJMUmVmIFdLUGFnZUNvcHlQZW5kaW5nQVBJUmVxdWVz
dFVSTChXS1BhZ2VSZWYgcGFnZVJlZikKQEAgLTE1NTgsNyArMTU2Miw5IEBAIFdLU3RyaW5nUmVm
IFdLUGFnZUNvcHlTdGFuZGFyZFVzZXJBZ2VudFcKIAogdm9pZCBXS1BhZ2VWYWxpZGF0ZUNvbW1h
bmQoV0tQYWdlUmVmIHBhZ2VSZWYsIFdLU3RyaW5nUmVmIGNvbW1hbmQsIHZvaWQqIGNvbnRleHQs
IFdLUGFnZVZhbGlkYXRlQ29tbWFuZENhbGxiYWNrIGNhbGxiYWNrKQogewotICAgIHRvSW1wbChw
YWdlUmVmKS0+dmFsaWRhdGVDb21tYW5kKHRvSW1wbChjb21tYW5kKS0+c3RyaW5nKCksIFZhbGlk
YXRlQ29tbWFuZENhbGxiYWNrOjpjcmVhdGUoY29udGV4dCwgY2FsbGJhY2spKTsgCisgICAgdG9J
bXBsKHBhZ2VSZWYpLT52YWxpZGF0ZUNvbW1hbmQodG9JbXBsKGNvbW1hbmQpLT5zdHJpbmcoKSwg
VmFsaWRhdGVDb21tYW5kQ2FsbGJhY2s6OmNyZWF0ZShbY29udGV4dCwgY2FsbGJhY2tdKGJvb2wg
ZXJyb3IsIFN0cmluZ0ltcGwqIGNvbW1hbmROYW1lLCBib29sIGlzRW5hYmxlZCwgaW50MzJfdCBz
dGF0ZSkgeworICAgICAgICBjYWxsYmFjayh0b0FQSShjb21tYW5kTmFtZSksIGlzRW5hYmxlZCwg
c3RhdGUsIGVycm9yID8gdG9BUEkoQVBJOjpFcnJvcjo6Y3JlYXRlKCkuZ2V0KCkpIDogMCwgY29u
dGV4dCk7CisgICAgfSkpOwogfQogCiB2b2lkIFdLUGFnZUV4ZWN1dGVDb21tYW5kKFdLUGFnZVJl
ZiBwYWdlUmVmLCBXS1N0cmluZ1JlZiBjb21tYW5kKQpAQCAtMTU2NywyNSArMTU3Myw2IEBAIHZv
aWQgV0tQYWdlRXhlY3V0ZUNvbW1hbmQoV0tQYWdlUmVmIHBhZ2UKIH0KIAogI2lmIFBMQVRGT1JN
KENPQ09BKQotc3RydWN0IENvbXB1dGVkUGFnZXNDb250ZXh0IHsKLSAgICBDb21wdXRlZFBhZ2Vz
Q29udGV4dChXS1BhZ2VDb21wdXRlUGFnZXNGb3JQcmludGluZ0Z1bmN0aW9uIGNhbGxiYWNrLCB2
b2lkKiBjb250ZXh0KQotICAgICAgICA6IGNhbGxiYWNrKGNhbGxiYWNrKQotICAgICAgICAsIGNv
bnRleHQoY29udGV4dCkKLSAgICB7Ci0gICAgfQotICAgIFdLUGFnZUNvbXB1dGVQYWdlc0ZvclBy
aW50aW5nRnVuY3Rpb24gY2FsbGJhY2s7Ci0gICAgdm9pZCogY29udGV4dDsKLX07Ci0KLXN0YXRp
YyB2b2lkIGNvbXB1dGVkUGFnZXNDYWxsYmFjayhjb25zdCBWZWN0b3I8V2ViQ29yZTo6SW50UmVj
dD4mIHJlY3RzLCBkb3VibGUgc2NhbGVGYWN0b3IsIFdLRXJyb3JSZWYgZXJyb3IsIHZvaWQqIHVu
dHlwZWRDb250ZXh0KQotewotICAgIE93blB0cjxDb21wdXRlZFBhZ2VzQ29udGV4dD4gY29udGV4
dCA9IGFkb3B0UHRyKHN0YXRpY19jYXN0PENvbXB1dGVkUGFnZXNDb250ZXh0Kj4odW50eXBlZENv
bnRleHQpKTsKLSAgICBWZWN0b3I8V0tSZWN0PiB3a1JlY3RzKHJlY3RzLnNpemUoKSk7Ci0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCByZWN0cy5zaXplKCk7ICsraSkKLSAgICAgICAgd2tSZWN0
c1tpXSA9IHRvQVBJKHJlY3RzW2ldKTsKLSAgICBjb250ZXh0LT5jYWxsYmFjayh3a1JlY3RzLmRh
dGEoKSwgd2tSZWN0cy5zaXplKCksIHNjYWxlRmFjdG9yLCBlcnJvciwgY29udGV4dC0+Y29udGV4
dCk7Ci19Ci0KIHN0YXRpYyBQcmludEluZm8gcHJpbnRJbmZvRnJvbVdLUHJpbnRJbmZvKGNvbnN0
IFdLUHJpbnRJbmZvJiBwcmludEluZm8pCiB7CiAgICAgUHJpbnRJbmZvIHJlc3VsdDsKQEAgLTE1
OTcsNyArMTU4NCwxMiBAQCBzdGF0aWMgUHJpbnRJbmZvIHByaW50SW5mb0Zyb21XS1ByaW50SW5m
CiAKIHZvaWQgV0tQYWdlQ29tcHV0ZVBhZ2VzRm9yUHJpbnRpbmcoV0tQYWdlUmVmIHBhZ2UsIFdL
RnJhbWVSZWYgZnJhbWUsIFdLUHJpbnRJbmZvIHByaW50SW5mbywgV0tQYWdlQ29tcHV0ZVBhZ2Vz
Rm9yUHJpbnRpbmdGdW5jdGlvbiBjYWxsYmFjaywgdm9pZCogY29udGV4dCkKIHsKLSAgICB0b0lt
cGwocGFnZSktPmNvbXB1dGVQYWdlc0ZvclByaW50aW5nKHRvSW1wbChmcmFtZSksIHByaW50SW5m
b0Zyb21XS1ByaW50SW5mbyhwcmludEluZm8pLCBDb21wdXRlZFBhZ2VzQ2FsbGJhY2s6OmNyZWF0
ZShuZXcgQ29tcHV0ZWRQYWdlc0NvbnRleHQoY2FsbGJhY2ssIGNvbnRleHQpLCBjb21wdXRlZFBh
Z2VzQ2FsbGJhY2spKTsKKyAgICB0b0ltcGwocGFnZSktPmNvbXB1dGVQYWdlc0ZvclByaW50aW5n
KHRvSW1wbChmcmFtZSksIHByaW50SW5mb0Zyb21XS1ByaW50SW5mbyhwcmludEluZm8pLCBDb21w
dXRlZFBhZ2VzQ2FsbGJhY2s6OmNyZWF0ZShbY29udGV4dCwgY2FsbGJhY2tdKGJvb2wgZXJyb3Is
IGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpJbnRSZWN0PiYgcmVjdHMsIGRvdWJsZSBzY2FsZUZhY3Rv
cikgeworICAgICAgICBWZWN0b3I8V0tSZWN0PiB3a1JlY3RzKHJlY3RzLnNpemUoKSk7CisgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVjdHMuc2l6ZSgpOyArK2kpCisgICAgICAgICAg
ICB3a1JlY3RzW2ldID0gdG9BUEkocmVjdHNbaV0pOworICAgICAgICBjYWxsYmFjayh3a1JlY3Rz
LmRhdGEoKSwgd2tSZWN0cy5zaXplKCksIHNjYWxlRmFjdG9yLCBlcnJvciA/IHRvQVBJKEFQSTo6
RXJyb3I6OmNyZWF0ZSgpLmdldCgpKSA6IDAsIGNvbnRleHQpOworICAgIH0pKTsKIH0KIAogdm9p
ZCBXS1BhZ2VCZWdpblByaW50aW5nKFdLUGFnZVJlZiBwYWdlLCBXS0ZyYW1lUmVmIGZyYW1lLCBX
S1ByaW50SW5mbyBwcmludEluZm8pCkBAIC0xNjA3LDcgKzE1OTksNyBAQCB2b2lkIFdLUGFnZUJl
Z2luUHJpbnRpbmcoV0tQYWdlUmVmIHBhZ2UsCiAKIHZvaWQgV0tQYWdlRHJhd1BhZ2VzVG9QREYo
V0tQYWdlUmVmIHBhZ2UsIFdLRnJhbWVSZWYgZnJhbWUsIFdLUHJpbnRJbmZvIHByaW50SW5mbywg
dWludDMyX3QgZmlyc3QsIHVpbnQzMl90IGNvdW50LCBXS1BhZ2VEcmF3VG9QREZGdW5jdGlvbiBj
YWxsYmFjaywgdm9pZCogY29udGV4dCkKIHsKLSAgICB0b0ltcGwocGFnZSktPmRyYXdQYWdlc1Rv
UERGKHRvSW1wbChmcmFtZSksIHByaW50SW5mb0Zyb21XS1ByaW50SW5mbyhwcmludEluZm8pLCBm
aXJzdCwgY291bnQsIERhdGFDYWxsYmFjazo6Y3JlYXRlKGNvbnRleHQsIGNhbGxiYWNrKSk7Cisg
ICAgdG9JbXBsKHBhZ2UpLT5kcmF3UGFnZXNUb1BERih0b0ltcGwoZnJhbWUpLCBwcmludEluZm9G
cm9tV0tQcmludEluZm8ocHJpbnRJbmZvKSwgZmlyc3QsIGNvdW50LCBEYXRhQVBJQ2FsbGJhY2s6
OmNyZWF0ZShjb250ZXh0LCBjYWxsYmFjaykpOwogfQogCiB2b2lkIFdLUGFnZUVuZFByaW50aW5n
KFdLUGFnZVJlZiBwYWdlKQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dL
UGx1Z2luU2l0ZURhdGFNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0MvV0tQbHVnaW5TaXRlRGF0YU1hbmFnZXIuY3BwCShyZXZpc2lvbiAxNjQz
NTUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQbHVnaW5TaXRlRGF0YU1h
bmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiwxMCBAQAogCiB1c2luZyBuYW1l
c3BhY2UgV2ViS2l0OwogCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCit0eXBlZGVm
IEdlbmVyaWNBUElDYWxsYmFjazxXS0FycmF5UmVmPiBBcnJheUFQSUNhbGxiYWNrOworI2VuZGlm
CisKIFdLVHlwZUlEIFdLUGx1Z2luU2l0ZURhdGFNYW5hZ2VyR2V0VHlwZUlEKCkKIHsKICNpZiBF
TkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKQEAgLTQ4LDcgKzUyLDcgQEAgV0tUeXBlSUQgV0tQ
bHVnaW5TaXRlRGF0YU1hbmFnZXJHZXRUeXBlSQogdm9pZCBXS1BsdWdpblNpdGVEYXRhTWFuYWdl
ckdldFNpdGVzV2l0aERhdGEoV0tQbHVnaW5TaXRlRGF0YU1hbmFnZXJSZWYgbWFuYWdlclJlZiwg
dm9pZCogY29udGV4dCwgV0tQbHVnaW5TaXRlRGF0YU1hbmFnZXJHZXRTaXRlc1dpdGhEYXRhRnVu
Y3Rpb24gY2FsbGJhY2spCiB7CiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAg
dG9JbXBsKG1hbmFnZXJSZWYpLT5nZXRTaXRlc1dpdGhEYXRhKEFycmF5Q2FsbGJhY2s6OmNyZWF0
ZShjb250ZXh0LCBjYWxsYmFjaykpOworICAgIHRvSW1wbChtYW5hZ2VyUmVmKS0+Z2V0U2l0ZXNX
aXRoRGF0YShBcnJheUFQSUNhbGxiYWNrOjpjcmVhdGUoY29udGV4dCwgY2FsbGJhY2spKTsKICNl
bHNlCiAgICAgVU5VU0VEX1BBUkFNKG1hbmFnZXJSZWYpOwogICAgIFVOVVNFRF9QQVJBTShjb250
ZXh0KTsKQEAgLTcyLDcgKzc2LDcgQEAgc3RhdGljIHVpbnQ2NF90IHRvTlBDbGVhclNpdGVEYXRh
RmxhZ3MoVwogdm9pZCBXS1BsdWdpblNpdGVEYXRhTWFuYWdlckNsZWFyU2l0ZURhdGEoV0tQbHVn
aW5TaXRlRGF0YU1hbmFnZXJSZWYgbWFuYWdlclJlZiwgV0tBcnJheVJlZiBzaXRlc1JlZiwgV0tD
bGVhclNpdGVEYXRhRmxhZ3MgZmxhZ3MsIHVpbnQ2NF90IG1heEFnZUluU2Vjb25kcywgdm9pZCog
Y29udGV4dCwgV0tQbHVnaW5TaXRlRGF0YU1hbmFnZXJDbGVhclNpdGVEYXRhRnVuY3Rpb24gZnVu
Y3Rpb24pCiB7CiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgdG9JbXBsKG1h
bmFnZXJSZWYpLT5jbGVhclNpdGVEYXRhKHRvSW1wbChzaXRlc1JlZiksIHRvTlBDbGVhclNpdGVE
YXRhRmxhZ3MoZmxhZ3MpLCBtYXhBZ2VJblNlY29uZHMsIFZvaWRDYWxsYmFjazo6Y3JlYXRlKGNv
bnRleHQsIGZ1bmN0aW9uKSk7CisgICAgdG9JbXBsKG1hbmFnZXJSZWYpLT5jbGVhclNpdGVEYXRh
KHRvSW1wbChzaXRlc1JlZiksIHRvTlBDbGVhclNpdGVEYXRhRmxhZ3MoZmxhZ3MpLCBtYXhBZ2VJ
blNlY29uZHMsIFZvaWRBUElDYWxsYmFjazo6Y3JlYXRlKGNvbnRleHQsIGZ1bmN0aW9uKSk7CiAj
ZWxzZQogICAgIFVOVVNFRF9QQVJBTShtYW5hZ2VyUmVmKTsKICAgICBVTlVTRURfUEFSQU0oc2l0
ZXNSZWYpOwpAQCAtODYsNyArOTAsNyBAQCB2b2lkIFdLUGx1Z2luU2l0ZURhdGFNYW5hZ2VyQ2xl
YXJTaXRlRGF0CiB2b2lkIFdLUGx1Z2luU2l0ZURhdGFNYW5hZ2VyQ2xlYXJBbGxTaXRlRGF0YShX
S1BsdWdpblNpdGVEYXRhTWFuYWdlclJlZiBtYW5hZ2VyUmVmLCB2b2lkKiBjb250ZXh0LCBXS1Bs
dWdpblNpdGVEYXRhTWFuYWdlckNsZWFyU2l0ZURhdGFGdW5jdGlvbiBmdW5jdGlvbikKIHsKICNp
ZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICB0b0ltcGwobWFuYWdlclJlZiktPmNs
ZWFyU2l0ZURhdGEoMCwgTlBfQ0xFQVJfQUxMLCBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90
Pjo6bWF4KCksIFZvaWRDYWxsYmFjazo6Y3JlYXRlKGNvbnRleHQsIGZ1bmN0aW9uKSk7CisgICAg
dG9JbXBsKG1hbmFnZXJSZWYpLT5jbGVhclNpdGVEYXRhKDAsIE5QX0NMRUFSX0FMTCwgc3RkOjpu
dW1lcmljX2xpbWl0czx1aW50NjRfdD46Om1heCgpLCBWb2lkQVBJQ2FsbGJhY2s6OmNyZWF0ZShj
b250ZXh0LCBmdW5jdGlvbikpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0obWFuYWdlclJlZik7
CiAgICAgVU5VU0VEX1BBUkFNKGNvbnRleHQpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9DL1dLUmVzb3VyY2VDYWNoZU1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1Jlc291cmNlQ2FjaGVNYW5hZ2VyLmNwcAkocmV2
aXNpb24gMTY0MzU1KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUmVzb3Vy
Y2VDYWNoZU1hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw4IEBACiAKIHVz
aW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKK3R5cGVkZWYgR2VuZXJpY0FQSUNhbGxiYWNrPFdLQXJy
YXlSZWY+IEFycmF5QVBJQ2FsbGJhY2s7CisKIFdLVHlwZUlEIFdLUmVzb3VyY2VDYWNoZU1hbmFn
ZXJHZXRUeXBlSUQoKQogewogICAgIHJldHVybiB0b0FQSShXZWJSZXNvdXJjZUNhY2hlTWFuYWdl
clByb3h5OjpBUElUeXBlKTsKQEAgLTM4LDcgKzQwLDcgQEAgV0tUeXBlSUQgV0tSZXNvdXJjZUNh
Y2hlTWFuYWdlckdldFR5cGVJRAogCiB2b2lkIFdLUmVzb3VyY2VDYWNoZU1hbmFnZXJHZXRDYWNo
ZU9yaWdpbnMoV0tSZXNvdXJjZUNhY2hlTWFuYWdlclJlZiBjYWNoZU1hbmFnZXJSZWYsIHZvaWQq
IGNvbnRleHQsIFdLUmVzb3VyY2VDYWNoZU1hbmFnZXJHZXRDYWNoZU9yaWdpbnNGdW5jdGlvbiBj
YWxsYmFjaykKIHsKLSAgICB0b0ltcGwoY2FjaGVNYW5hZ2VyUmVmKS0+Z2V0Q2FjaGVPcmlnaW5z
KEFycmF5Q2FsbGJhY2s6OmNyZWF0ZShjb250ZXh0LCBjYWxsYmFjaykpOworICAgIHRvSW1wbChj
YWNoZU1hbmFnZXJSZWYpLT5nZXRDYWNoZU9yaWdpbnMoQXJyYXlBUElDYWxsYmFjazo6Y3JlYXRl
KGNvbnRleHQsIGNhbGxiYWNrKSk7CiB9CiAKIHZvaWQgV0tSZXNvdXJjZUNhY2hlTWFuYWdlckNs
ZWFyQ2FjaGVGb3JPcmlnaW4oV0tSZXNvdXJjZUNhY2hlTWFuYWdlclJlZiBjYWNoZU1hbmFnZXJS
ZWYsIFdLU2VjdXJpdHlPcmlnaW5SZWYgb3JpZ2luUmVmLCBXS1Jlc291cmNlQ2FjaGVzVG9DbGVh
ciBjYWNoZXNUb0NsZWFyKQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0Q29va2llTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29va2llTWFuYWdlci5jcHAJKHJldmlzaW9uIDE2NDM1NSkK
KysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENvb2tpZU1hbmFnZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw5IEBACiAKIHVzaW5nIG5hbWVzcGFjZSBX
ZWJLaXQ7CiAKK3R5cGVkZWYgR2VuZXJpY0FQSUNhbGxiYWNrPFdLQXJyYXlSZWY+IEFycmF5QVBJ
Q2FsbGJhY2s7Cit0eXBlZGVmIEdlbmVyaWNBUElDYWxsYmFjazxXS0hUVFBDb29raWVBY2NlcHRQ
b2xpY3ksIEhUVFBDb29raWVBY2NlcHRQb2xpY3k+IEhUVFBDb29raWVBY2NlcHRQb2xpY3lBUElD
YWxsYmFjazsKKwogLyoqCiAgKiBTRUNUSU9OOiBXZWJLaXRDb29raWVNYW5hZ2VyCiAgKiBAU2hv
cnRfZGVzY3JpcHRpb246IERlZmluZXMgaG93IHRvIGhhbmRsZSBjb29raWVzIGluIGEgI1dlYktp
dFdlYkNvbnRleHQKQEAgLTE3NSw3ICsxNzgsNyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdl
cl9nZXRfYWNjZXB0X3BvCiAgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfQ09PS0lFX01B
TkFHRVIobWFuYWdlcikpOwogCiAgICAgR1Rhc2sqIHRhc2sgPSBnX3Rhc2tfbmV3KG1hbmFnZXIs
IGNhbmNlbGxhYmxlLCBjYWxsYmFjaywgdXNlckRhdGEpOwotICAgIG1hbmFnZXItPnByaXYtPndl
YkNvb2tpZU1hbmFnZXItPmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koSFRUUENvb2tpZUFjY2Vw
dFBvbGljeUNhbGxiYWNrOjpjcmVhdGUodGFzaywgd2Via2l0Q29va2llTWFuYWdlckdldEFjY2Vw
dFBvbGljeUNhbGxiYWNrKSk7CisgICAgbWFuYWdlci0+cHJpdi0+d2ViQ29va2llTWFuYWdlci0+
Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShIVFRQQ29va2llQWNjZXB0UG9saWN5QVBJQ2FsbGJh
Y2s6OmNyZWF0ZSh0YXNrLCB3ZWJraXRDb29raWVNYW5hZ2VyR2V0QWNjZXB0UG9saWN5Q2FsbGJh
Y2spKTsKIH0KIAogLyoqCkBAIC0yMzMsNyArMjM2LDcgQEAgdm9pZCB3ZWJraXRfY29va2llX21h
bmFnZXJfZ2V0X2RvbWFpbnNfdwogICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0NPT0tJ
RV9NQU5BR0VSKG1hbmFnZXIpKTsKIAogICAgIEdUYXNrKiB0YXNrID0gZ190YXNrX25ldyhtYW5h
Z2VyLCBjYW5jZWxsYWJsZSwgY2FsbGJhY2ssIHVzZXJEYXRhKTsKLSAgICBtYW5hZ2VyLT5wcml2
LT53ZWJDb29raWVNYW5hZ2VyLT5nZXRIb3N0bmFtZXNXaXRoQ29va2llcyhBcnJheUNhbGxiYWNr
OjpjcmVhdGUodGFzaywgd2Via2l0Q29va2llTWFuYWdlckdldERvbWFpbnNXaXRoQ29va2llc0Nh
bGxiYWNrKSk7CisgICAgbWFuYWdlci0+cHJpdi0+d2ViQ29va2llTWFuYWdlci0+Z2V0SG9zdG5h
bWVzV2l0aENvb2tpZXMoQXJyYXlBUElDYWxsYmFjazo6Y3JlYXRlKHRhc2ssIHdlYmtpdENvb2tp
ZU1hbmFnZXJHZXREb21haW5zV2l0aENvb2tpZXNDYWxsYmFjaykpOwogfQogCiAvKioKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaW50T3BlcmF0aW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQ
cmludE9wZXJhdGlvbi5jcHAJKHJldmlzaW9uIDE2NDM1NSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaW50T3BlcmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjUyLDMwICsyNTIsMzEgQEAgc3RhdGljIFdlYktpdFByaW50T3BlcmF0aW9uUmVzcG9uc2Ug
d2ViawogfQogI2VuZGlmCiAKLXN0YXRpYyB2b2lkIGRyYXdQYWdlc0ZvclByaW50aW5nQ29tcGxl
dGVkKFdLRXJyb3JSZWYgd2tQcmludEVycm9yLCBXS0Vycm9yUmVmLCB2b2lkKiBjb250ZXh0KQor
c3RhdGljIHZvaWQgZHJhd1BhZ2VzRm9yUHJpbnRpbmdDb21wbGV0ZWQoQVBJOjpFcnJvciogd2tQ
cmludEVycm9yLCBXZWJLaXRQcmludE9wZXJhdGlvbiogcHJpbnRPcGVyYXRpb24pCiB7Ci0gICAg
R1JlZlB0cjxXZWJLaXRQcmludE9wZXJhdGlvbj4gcHJpbnRPcGVyYXRpb24gPSBhZG9wdEdSZWYo
V0VCS0lUX1BSSU5UX09QRVJBVElPTihjb250ZXh0KSk7Ci0KICAgICAvLyBXaGVuIHJ1bm5pbmcg
c3luY2hyb25vdXNseSBXZWJQYWdlUHJveHk6OnByaW50RnJhbWUoKSBjYWxscyBlbmRQcmludGlu
ZygpLgogICAgIGlmIChwcmludE9wZXJhdGlvbi0+cHJpdi0+cHJpbnRNb2RlID09IFByaW50SW5m
bzo6UHJpbnRNb2RlQXN5bmMgJiYgcHJpbnRPcGVyYXRpb24tPnByaXYtPndlYlZpZXcpIHsKICAg
ICAgICAgV2ViUGFnZVByb3h5KiBwYWdlID0gd2Via2l0V2ViVmlld0Jhc2VHZXRQYWdlKFdFQktJ
VF9XRUJfVklFV19CQVNFKHByaW50T3BlcmF0aW9uLT5wcml2LT53ZWJWaWV3KSk7CiAgICAgICAg
IHBhZ2UtPmVuZFByaW50aW5nKCk7CiAgICAgfQogCi0gICAgY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VFcnJvciYgcmVzb3VyY2VFcnJvciA9IHdrUHJpbnRFcnJvciA/IHRvSW1wbCh3a1ByaW50RXJy
b3IpLT5wbGF0Zm9ybUVycm9yKCkgOiBXZWJDb3JlOjpSZXNvdXJjZUVycm9yKCk7CisgICAgY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYgcmVzb3VyY2VFcnJvciA9IHdrUHJpbnRFcnJvciA/
IHdrUHJpbnRFcnJvci0+cGxhdGZvcm1FcnJvcigpIDogV2ViQ29yZTo6UmVzb3VyY2VFcnJvcigp
OwogICAgIGlmICghcmVzb3VyY2VFcnJvci5pc051bGwoKSkgewogICAgICAgICBHVW5pcXVlUHRy
PEdFcnJvcj4gcHJpbnRFcnJvcihnX2Vycm9yX25ld19saXRlcmFsKGdfcXVhcmtfZnJvbV9zdHJp
bmcocmVzb3VyY2VFcnJvci5kb21haW4oKS51dGY4KCkuZGF0YSgpKSwKICAgICAgICAgICAgIHJl
c291cmNlRXJyb3IuZXJyb3JDb2RlKCksIHJlc291cmNlRXJyb3IubG9jYWxpemVkRGVzY3JpcHRp
b24oKS51dGY4KCkuZGF0YSgpKSk7Ci0gICAgICAgIGdfc2lnbmFsX2VtaXQocHJpbnRPcGVyYXRp
b24uZ2V0KCksIHNpZ25hbHNbRkFJTEVEXSwgMCwgcHJpbnRFcnJvci5nZXQoKSk7CisgICAgICAg
IGdfc2lnbmFsX2VtaXQocHJpbnRPcGVyYXRpb24sIHNpZ25hbHNbRkFJTEVEXSwgMCwgcHJpbnRF
cnJvci5nZXQoKSk7CiAgICAgfQotICAgIGdfc2lnbmFsX2VtaXQocHJpbnRPcGVyYXRpb24uZ2V0
KCksIHNpZ25hbHNbRklOSVNIRURdLCAwLCBOVUxMKTsKKyAgICBnX3NpZ25hbF9lbWl0KHByaW50
T3BlcmF0aW9uLCBzaWduYWxzW0ZJTklTSEVEXSwgMCwgTlVMTCk7CiB9CiAKIHN0YXRpYyB2b2lk
IHdlYmtpdFByaW50T3BlcmF0aW9uUHJpbnRQYWdlc0ZvckZyYW1lKFdlYktpdFByaW50T3BlcmF0
aW9uKiBwcmludE9wZXJhdGlvbiwgV2ViRnJhbWVQcm94eSogd2ViRnJhbWUsIEd0a1ByaW50U2V0
dGluZ3MqIHByaW50U2V0dGluZ3MsIEd0a1BhZ2VTZXR1cCogcGFnZVNldHVwKQogewogICAgIFBy
aW50SW5mbyBwcmludEluZm8ocHJpbnRTZXR0aW5ncywgcGFnZVNldHVwLCBwcmludE9wZXJhdGlv
bi0+cHJpdi0+cHJpbnRNb2RlKTsKICAgICBXZWJQYWdlUHJveHkqIHBhZ2UgPSB3ZWJraXRXZWJW
aWV3QmFzZUdldFBhZ2UoV0VCS0lUX1dFQl9WSUVXX0JBU0UocHJpbnRPcGVyYXRpb24tPnByaXYt
PndlYlZpZXcpKTsKLSAgICBwYWdlLT5kcmF3UGFnZXNGb3JQcmludGluZyh3ZWJGcmFtZSwgcHJp
bnRJbmZvLCBQcmludEZpbmlzaGVkQ2FsbGJhY2s6OmNyZWF0ZShnX29iamVjdF9yZWYocHJpbnRP
cGVyYXRpb24pLCAmZHJhd1BhZ2VzRm9yUHJpbnRpbmdDb21wbGV0ZWQpKTsKKyAgICBnX29iamVj
dF9yZWYocHJpbnRPcGVyYXRpb24pOworICAgIHBhZ2UtPmRyYXdQYWdlc0ZvclByaW50aW5nKHdl
YkZyYW1lLCBwcmludEluZm8sIFByaW50RmluaXNoZWRDYWxsYmFjazo6Y3JlYXRlKFtwcmludE9w
ZXJhdGlvbl0oYm9vbCAvKmVycm9yKi8sIEFQSTo6RXJyb3IqIHByaW50RXJyb3IpIHsKKyAgICAg
ICAgZHJhd1BhZ2VzRm9yUHJpbnRpbmdDb21wbGV0ZWQocHJpbnRFcnJvciwgYWRvcHRHUmVmKHBy
aW50T3BlcmF0aW9uKS5nZXQoKSk7CisgICAgfSkpOwogfQogCiBXZWJLaXRQcmludE9wZXJhdGlv
blJlc3BvbnNlIHdlYmtpdFByaW50T3BlcmF0aW9uUnVuRGlhbG9nRm9yRnJhbWUoV2ViS2l0UHJp
bnRPcGVyYXRpb24qIHByaW50T3BlcmF0aW9uLCBHdGtXaW5kb3cqIHBhcmVudCwgV2ViRnJhbWVQ
cm94eSogd2ViRnJhbWUpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRXZWJSZXNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0V2ViUmVzb3VyY2UuY3BwCShyZXZpc2lvbiAxNjQzNTUpCisrKyBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJSZXNvdXJjZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMxNCwxMiArMzE0LDExIEBAIHN0cnVjdCBSZXNvdXJjZUdldERhdGFB
c3luY0RhdGEgewogfTsKIFdFQktJVF9ERUZJTkVfQVNZTkNfREFUQV9TVFJVQ1QoUmVzb3VyY2VH
ZXREYXRhQXN5bmNEYXRhKQogCi1zdGF0aWMgdm9pZCByZXNvdXJjZURhdGFDYWxsYmFjayhXS0Rh
dGFSZWYgd2tEYXRhLCBXS0Vycm9yUmVmLCB2b2lkKiBjb250ZXh0KQorc3RhdGljIHZvaWQgcmVz
b3VyY2VEYXRhQ2FsbGJhY2soQVBJOjpEYXRhKiB3a0RhdGEsIEdUYXNrKiB0YXNrKQogewotICAg
IEdSZWZQdHI8R1Rhc2s+IHRhc2sgPSBhZG9wdEdSZWYoR19UQVNLKGNvbnRleHQpKTsKLSAgICBS
ZXNvdXJjZUdldERhdGFBc3luY0RhdGEqIGRhdGEgPSBzdGF0aWNfY2FzdDxSZXNvdXJjZUdldERh
dGFBc3luY0RhdGEqPihnX3Rhc2tfZ2V0X3Rhc2tfZGF0YSh0YXNrLmdldCgpKSk7Ci0gICAgZGF0
YS0+d2ViRGF0YSA9IHRvSW1wbCh3a0RhdGEpOwotICAgIGdfdGFza19yZXR1cm5fYm9vbGVhbih0
YXNrLmdldCgpLCBUUlVFKTsKKyAgICBSZXNvdXJjZUdldERhdGFBc3luY0RhdGEqIGRhdGEgPSBz
dGF0aWNfY2FzdDxSZXNvdXJjZUdldERhdGFBc3luY0RhdGEqPihnX3Rhc2tfZ2V0X3Rhc2tfZGF0
YSh0YXNrKSk7CisgICAgZGF0YS0+d2ViRGF0YSA9IHdrRGF0YTsKKyAgICBnX3Rhc2tfcmV0dXJu
X2Jvb2xlYW4odGFzaywgVFJVRSk7CiB9CiAKIC8qKgpAQCAtMzQxLDEwICszNDAsMTQgQEAgdm9p
ZCB3ZWJraXRfd2ViX3Jlc291cmNlX2dldF9kYXRhKFdlYktpdAogICAgIEdUYXNrKiB0YXNrID0g
Z190YXNrX25ldyhyZXNvdXJjZSwgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSk7CiAg
ICAgZ190YXNrX3NldF90YXNrX2RhdGEodGFzaywgY3JlYXRlUmVzb3VyY2VHZXREYXRhQXN5bmNE
YXRhKCksIHJlaW50ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGRlc3Ryb3lSZXNvdXJjZUdl
dERhdGFBc3luY0RhdGEpKTsKICAgICBpZiAocmVzb3VyY2UtPnByaXYtPmlzTWFpblJlc291cmNl
KQotICAgICAgICByZXNvdXJjZS0+cHJpdi0+ZnJhbWUtPmdldE1haW5SZXNvdXJjZURhdGEoRGF0
YUNhbGxiYWNrOjpjcmVhdGUodGFzaywgcmVzb3VyY2VEYXRhQ2FsbGJhY2spKTsKKyAgICAgICAg
cmVzb3VyY2UtPnByaXYtPmZyYW1lLT5nZXRNYWluUmVzb3VyY2VEYXRhKERhdGFDYWxsYmFjazo6
Y3JlYXRlKFt0YXNrXShib29sIC8qZXJyb3IqLywgQVBJOjpEYXRhKiBkYXRhKSB7CisgICAgICAg
ICAgICByZXNvdXJjZURhdGFDYWxsYmFjayhkYXRhLCBhZG9wdEdSZWYodGFzaykuZ2V0KCkpOwor
ICAgICAgICB9KSk7CiAgICAgZWxzZSB7CiAgICAgICAgIFN0cmluZyB1cmwgPSBTdHJpbmc6OmZy
b21VVEY4KHJlc291cmNlLT5wcml2LT51cmkuZGF0YSgpKTsKLSAgICAgICAgcmVzb3VyY2UtPnBy
aXYtPmZyYW1lLT5nZXRSZXNvdXJjZURhdGEoQVBJOjpVUkw6OmNyZWF0ZSh1cmwpLmdldCgpLCBE
YXRhQ2FsbGJhY2s6OmNyZWF0ZSh0YXNrLCByZXNvdXJjZURhdGFDYWxsYmFjaykpOworICAgICAg
ICByZXNvdXJjZS0+cHJpdi0+ZnJhbWUtPmdldFJlc291cmNlRGF0YShBUEk6OlVSTDo6Y3JlYXRl
KHVybCkuZ2V0KCksIERhdGFDYWxsYmFjazo6Y3JlYXRlKFt0YXNrXShib29sIC8qZXJyb3IqLywg
QVBJOjpEYXRhKiBkYXRhKSB7CisgICAgICAgICAgICByZXNvdXJjZURhdGFDYWxsYmFjayhkYXRh
LCBhZG9wdEdSZWYodGFzaykuZ2V0KCkpOworICAgICAgICB9KSk7CiAgICAgfQogfQogCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3
LmNwcAkocmV2aXNpb24gMTY0MzU1KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0V2ViVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1MTAsMTIgKzI1MTAsNiBA
QCBnZG91YmxlIHdlYmtpdF93ZWJfdmlld19nZXRfem9vbV9sZXZlbChXCiAgICAgcmV0dXJuIHpv
b21UZXh0T25seSA/IHBhZ2UtPnRleHRab29tRmFjdG9yKCkgOiBwYWdlLT5wYWdlWm9vbUZhY3Rv
cigpOwogfQogCi1zdGF0aWMgdm9pZCBkaWRWYWxpZGF0ZUNvbW1hbmQoV0tTdHJpbmdSZWYgY29t
bWFuZCwgYm9vbCBpc0VuYWJsZWQsIGludDMyX3Qgc3RhdGUsIFdLRXJyb3JSZWYsIHZvaWQqIGNv
bnRleHQpCi17Ci0gICAgR1JlZlB0cjxHVGFzaz4gdGFzayA9IGFkb3B0R1JlZihHX1RBU0soY29u
dGV4dCkpOwotICAgIGdfdGFza19yZXR1cm5fYm9vbGVhbih0YXNrLmdldCgpLCBpc0VuYWJsZWQp
OwotfQotCiAvKioKICAqIHdlYmtpdF93ZWJfdmlld19jYW5fZXhlY3V0ZV9lZGl0aW5nX2NvbW1h
bmQ6CiAgKiBAd2ViX3ZpZXc6IGEgI1dlYktpdFdlYlZpZXcKQEAgLTI1MzUsNyArMjUyOSw5IEBA
IHZvaWQgd2Via2l0X3dlYl92aWV3X2Nhbl9leGVjdXRlX2VkaXRpbmcKICAgICBnX3JldHVybl9p
Zl9mYWlsKGNvbW1hbmQpOwogCiAgICAgR1Rhc2sqIHRhc2sgPSBnX3Rhc2tfbmV3KHdlYlZpZXcs
IGNhbmNlbGxhYmxlLCBjYWxsYmFjaywgdXNlckRhdGEpOwotICAgIGdldFBhZ2Uod2ViVmlldykt
PnZhbGlkYXRlQ29tbWFuZChTdHJpbmc6OmZyb21VVEY4KGNvbW1hbmQpLCBWYWxpZGF0ZUNvbW1h
bmRDYWxsYmFjazo6Y3JlYXRlKHRhc2ssIGRpZFZhbGlkYXRlQ29tbWFuZCkpOworICAgIGdldFBh
Z2Uod2ViVmlldyktPnZhbGlkYXRlQ29tbWFuZChTdHJpbmc6OmZyb21VVEY4KGNvbW1hbmQpLCBW
YWxpZGF0ZUNvbW1hbmRDYWxsYmFjazo6Y3JlYXRlKFt0YXNrXShib29sIC8qZXJyb3IqLywgU3Ry
aW5nSW1wbCogLypjb21tYW5kKi8sIGJvb2wgaXNFbmFibGVkLCBpbnQzMl90IC8qc3RhdGUqLykg
eworICAgICAgICBnX3Rhc2tfcmV0dXJuX2Jvb2xlYW4oYWRvcHRHUmVmKHRhc2spLmdldCgpLCBp
c0VuYWJsZWQpOyAgICAgICAgCisgICAgfSkpOwogfQogCiAvKioKQEAgLTI2MTIsMjAgKzI2MDgs
MTkgQEAgSlNHbG9iYWxDb250ZXh0UmVmIHdlYmtpdF93ZWJfdmlld19nZXRfagogICAgIHJldHVy
biB3ZWJWaWV3LT5wcml2LT5qYXZhc2NyaXB0R2xvYmFsQ29udGV4dDsKIH0KIAotc3RhdGljIHZv
aWQgd2Via2l0V2ViVmlld1J1bkphdmFTY3JpcHRDYWxsYmFjayhXS1NlcmlhbGl6ZWRTY3JpcHRW
YWx1ZVJlZiB3a1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZSwgV0tFcnJvclJlZiwgdm9pZCogY29udGV4
dCkKK3N0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdSdW5KYXZhU2NyaXB0Q2FsbGJhY2soV2ViU2Vy
aWFsaXplZFNjcmlwdFZhbHVlKiB3a1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZSwgR1Rhc2sqIHRhc2sp
CiB7Ci0gICAgR1JlZlB0cjxHVGFzaz4gdGFzayA9IGFkb3B0R1JlZihHX1RBU0soY29udGV4dCkp
OwotICAgIGlmIChnX3Rhc2tfcmV0dXJuX2Vycm9yX2lmX2NhbmNlbGxlZCh0YXNrLmdldCgpKSkK
KyAgICBpZiAoZ190YXNrX3JldHVybl9lcnJvcl9pZl9jYW5jZWxsZWQodGFzaykpCiAgICAgICAg
IHJldHVybjsKIAogICAgIGlmICghd2tTZXJpYWxpemVkU2NyaXB0VmFsdWUpIHsKLSAgICAgICAg
Z190YXNrX3JldHVybl9uZXdfZXJyb3IodGFzay5nZXQoKSwgV0VCS0lUX0pBVkFTQ1JJUFRfRVJS
T1IsIFdFQktJVF9KQVZBU0NSSVBUX0VSUk9SX1NDUklQVF9GQUlMRUQsCisgICAgICAgIGdfdGFz
a19yZXR1cm5fbmV3X2Vycm9yKHRhc2ssIFdFQktJVF9KQVZBU0NSSVBUX0VSUk9SLCBXRUJLSVRf
SkFWQVNDUklQVF9FUlJPUl9TQ1JJUFRfRkFJTEVELAogICAgICAgICAgICAgXygiQW4gZXhjZXB0
aW9uIHdhcyByYWlzZWQgaW4gSmF2YVNjcmlwdCIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcoZ190YXNrX2dl
dF9zb3VyY2Vfb2JqZWN0KHRhc2suZ2V0KCkpKTsKLSAgICBnX3Rhc2tfcmV0dXJuX3BvaW50ZXIo
dGFzay5nZXQoKSwgd2Via2l0SmF2YXNjcmlwdFJlc3VsdENyZWF0ZSh3ZWJWaWV3LCB0b0ltcGwo
d2tTZXJpYWxpemVkU2NyaXB0VmFsdWUpKSwKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0g
V0VCS0lUX1dFQl9WSUVXKGdfdGFza19nZXRfc291cmNlX29iamVjdCh0YXNrKSk7CisgICAgZ190
YXNrX3JldHVybl9wb2ludGVyKHRhc2ssIHdlYmtpdEphdmFzY3JpcHRSZXN1bHRDcmVhdGUod2Vi
Vmlldywgd2tTZXJpYWxpemVkU2NyaXB0VmFsdWUpLAogICAgICAgICByZWludGVycHJldF9jYXN0
PEdEZXN0cm95Tm90aWZ5Pih3ZWJraXRfamF2YXNjcmlwdF9yZXN1bHRfdW5yZWYpKTsKIH0KIApA
QCAtMjY0OSw3ICsyNjQ0LDkgQEAgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfcnVuX2phdmFzY3JpcHQo
V2ViSwogICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2NyaXB0KTsKIAogICAgIEdUYXNrKiB0YXNrID0g
Z190YXNrX25ldyh3ZWJWaWV3LCBjYW5jZWxsYWJsZSwgY2FsbGJhY2ssIHVzZXJEYXRhKTsKLSAg
ICBnZXRQYWdlKHdlYlZpZXcpLT5ydW5KYXZhU2NyaXB0SW5NYWluRnJhbWUoU3RyaW5nOjpmcm9t
VVRGOChzY3JpcHQpLCBTY3JpcHRWYWx1ZUNhbGxiYWNrOjpjcmVhdGUodGFzaywgd2Via2l0V2Vi
Vmlld1J1bkphdmFTY3JpcHRDYWxsYmFjaykpOworICAgIGdldFBhZ2Uod2ViVmlldyktPnJ1bkph
dmFTY3JpcHRJbk1haW5GcmFtZShTdHJpbmc6OmZyb21VVEY4KHNjcmlwdCksIFNjcmlwdFZhbHVl
Q2FsbGJhY2s6OmNyZWF0ZShbdGFza10oYm9vbCAvKmVycm9yKi8sIFdlYlNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZSogc2VyaWFsaXplZFNjcmlwdFZhbHVlKSB7CisgICAgICAgIHdlYmtpdFdlYlZpZXdS
dW5KYXZhU2NyaXB0Q2FsbGJhY2soc2VyaWFsaXplZFNjcmlwdFZhbHVlLCBhZG9wdEdSZWYodGFz
aykuZ2V0KCkpOworICAgIH0pKTsKIH0KIAogLyoqCkBAIC0yNzM4LDcgKzI3MzUsOSBAQCBzdGF0
aWMgdm9pZCByZXNvdXJjZXNTdHJlYW1SZWFkQ2FsbGJhY2soCiAgICAgV2ViS2l0V2ViVmlldyog
d2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyhnX3Rhc2tfZ2V0X3NvdXJjZV9vYmplY3QodGFzay5n
ZXQoKSkpOwogICAgIGdwb2ludGVyIG91dHB1dFN0cmVhbURhdGEgPSBnX21lbW9yeV9vdXRwdXRf
c3RyZWFtX2dldF9kYXRhKEdfTUVNT1JZX09VVFBVVF9TVFJFQU0ob2JqZWN0KSk7CiAgICAgZ2V0
UGFnZSh3ZWJWaWV3KS0+cnVuSmF2YVNjcmlwdEluTWFpbkZyYW1lKFN0cmluZzo6ZnJvbVVURjgo
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBnY2hhcio+KG91dHB1dFN0cmVhbURhdGEpKSwKLSAgICAg
ICAgU2NyaXB0VmFsdWVDYWxsYmFjazo6Y3JlYXRlKHRhc2subGVha1JlZigpLCB3ZWJraXRXZWJW
aWV3UnVuSmF2YVNjcmlwdENhbGxiYWNrKSk7CisgICAgICAgIFNjcmlwdFZhbHVlQ2FsbGJhY2s6
OmNyZWF0ZShbdGFza10oYm9vbCAvKmVycm9yKi8sIFdlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSog
c2VyaWFsaXplZFNjcmlwdFZhbHVlKSB7CisgICAgICAgIHdlYmtpdFdlYlZpZXdSdW5KYXZhU2Ny
aXB0Q2FsbGJhY2soc2VyaWFsaXplZFNjcmlwdFZhbHVlLCB0YXNrLmdldCgpKTsKKyAgICB9KSk7
CiB9CiAKIC8qKgpAQCAtMjg2NSwxNiArMjg2NCwxNiBAQCBzdGF0aWMgdm9pZCBmaWxlUmVwbGFj
ZUNvbnRlbnRzQ2FsbGJhY2soCiAgICAgZ190YXNrX3JldHVybl9ib29sZWFuKHRhc2suZ2V0KCks
IFRSVUUpOwogfQogCi1zdGF0aWMgdm9pZCBnZXRDb250ZW50c0FzTUhUTUxEYXRhQ2FsbGJhY2so
V0tEYXRhUmVmIHdrRGF0YSwgV0tFcnJvclJlZiwgdm9pZCogY29udGV4dCkKK3N0YXRpYyB2b2lk
IGdldENvbnRlbnRzQXNNSFRNTERhdGFDYWxsYmFjayhBUEk6OkRhdGEqIHdrRGF0YSwgR1Rhc2sq
IHRhc2tQdHIpCiB7Ci0gICAgR1JlZlB0cjxHVGFzaz4gdGFzayA9IGFkb3B0R1JlZihHX1RBU0so
Y29udGV4dCkpOworICAgIEdSZWZQdHI8R1Rhc2s+IHRhc2sgPSBhZG9wdEdSZWYodGFza1B0cik7
CiAgICAgaWYgKGdfdGFza19yZXR1cm5fZXJyb3JfaWZfY2FuY2VsbGVkKHRhc2suZ2V0KCkpKQog
ICAgICAgICByZXR1cm47CiAKICAgICBWaWV3U2F2ZUFzeW5jRGF0YSogZGF0YSA9IHN0YXRpY19j
YXN0PFZpZXdTYXZlQXN5bmNEYXRhKj4oZ190YXNrX2dldF90YXNrX2RhdGEodGFzay5nZXQoKSkp
OwogICAgIC8vIFdlIG5lZWQgdG8gcmV0YWluIHRoZSBkYXRhIHVudGlsIHRoZSBhc3luY3Jvbm91
cyBwcm9jZXNzCiAgICAgLy8gaW5pdGlhdGVkIGJ5IHRoZSB1c2VyIGhhcyBmaW5pc2hlZCBjb21w
bGV0ZWx5LgotICAgIGRhdGEtPndlYkRhdGEgPSB0b0ltcGwod2tEYXRhKTsKKyAgICBkYXRhLT53
ZWJEYXRhID0gd2tEYXRhOwogCiAgICAgLy8gSWYgd2UgYXJlIHNhdmluZyB0byBhIGZpbGUgd2Ug
bmVlZCB0byB3cml0ZSB0aGUgZGF0YSBvbiBkaXNrIGJlZm9yZSBmaW5pc2hpbmcuCiAgICAgaWYg
KGdfdGFza19nZXRfc291cmNlX3RhZyh0YXNrLmdldCgpKSA9PSB3ZWJraXRfd2ViX3ZpZXdfc2F2
ZV90b19maWxlKSB7CkBAIC0yOTE0LDcgKzI5MTMsOSBAQCB2b2lkIHdlYmtpdF93ZWJfdmlld19z
YXZlKFdlYktpdFdlYlZpZXcqCiAgICAgR1Rhc2sqIHRhc2sgPSBnX3Rhc2tfbmV3KHdlYlZpZXcs
IGNhbmNlbGxhYmxlLCBjYWxsYmFjaywgdXNlckRhdGEpOwogICAgIGdfdGFza19zZXRfc291cmNl
X3RhZyh0YXNrLCByZWludGVycHJldF9jYXN0PGdwb2ludGVyPih3ZWJraXRfd2ViX3ZpZXdfc2F2
ZSkpOwogICAgIGdfdGFza19zZXRfdGFza19kYXRhKHRhc2ssIGNyZWF0ZVZpZXdTYXZlQXN5bmNE
YXRhKCksIHJlaW50ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGRlc3Ryb3lWaWV3U2F2ZUFz
eW5jRGF0YSkpOwotICAgIGdldFBhZ2Uod2ViVmlldyktPmdldENvbnRlbnRzQXNNSFRNTERhdGEo
RGF0YUNhbGxiYWNrOjpjcmVhdGUodGFzaywgZ2V0Q29udGVudHNBc01IVE1MRGF0YUNhbGxiYWNr
KSwgZmFsc2UpOworICAgIGdldFBhZ2Uod2ViVmlldyktPmdldENvbnRlbnRzQXNNSFRNTERhdGEo
RGF0YUNhbGxiYWNrOjpjcmVhdGUoW3Rhc2tdKGJvb2wgLyplcnJvciovLCBBUEk6OkRhdGEqIGRh
dGEpIHsKKyAgICAgICAgZ2V0Q29udGVudHNBc01IVE1MRGF0YUNhbGxiYWNrKGRhdGEsIHRhc2sp
OworICAgIH0pLCBmYWxzZSk7CiB9CiAKIC8qKgpAQCAtMjk3Nyw3ICsyOTc4LDkgQEAgdm9pZCB3
ZWJraXRfd2ViX3ZpZXdfc2F2ZV90b19maWxlKFdlYktpdAogICAgIGRhdGEtPmZpbGUgPSBmaWxl
OwogICAgIGdfdGFza19zZXRfdGFza19kYXRhKHRhc2ssIGRhdGEsIHJlaW50ZXJwcmV0X2Nhc3Q8
R0Rlc3Ryb3lOb3RpZnk+KGRlc3Ryb3lWaWV3U2F2ZUFzeW5jRGF0YSkpOwogCi0gICAgZ2V0UGFn
ZSh3ZWJWaWV3KS0+Z2V0Q29udGVudHNBc01IVE1MRGF0YShEYXRhQ2FsbGJhY2s6OmNyZWF0ZSh0
YXNrLCBnZXRDb250ZW50c0FzTUhUTUxEYXRhQ2FsbGJhY2spLCBmYWxzZSk7CisgICAgZ2V0UGFn
ZSh3ZWJWaWV3KS0+Z2V0Q29udGVudHNBc01IVE1MRGF0YShEYXRhQ2FsbGJhY2s6OmNyZWF0ZShb
dGFza10oYm9vbCAvKmVycm9yKi8sIEFQSTo6RGF0YSogZGF0YSkgeworICAgICAgICBnZXRDb250
ZW50c0FzTUhUTUxEYXRhQ2FsbGJhY2soZGF0YSwgdGFzayk7CisgICAgfSksIGZhbHNlKTsKIH0K
IAogLyoqCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2lvcy9XS0ludGVyYWN0
aW9uVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2lv
cy9XS0ludGVyYWN0aW9uVmlldy5tbQkocmV2aXNpb24gMTY0MzU1KQorKysgU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9pb3MvV0tJbnRlcmFjdGlvblZpZXcubW0JKHdvcmtpbmcgY29weSkK
QEAgLTkwNywyMiArOTA3LDE3IEBAIC0gKHZvaWQpX3Nob3dEaWN0aW9uYXJ5OihOU1N0cmluZyAq
KXRleHQKICAgICAgICAgW193ZWJTZWxlY3Rpb25Bc3Npc3RhbnQgc2hvd0RpY3Rpb25hcnlGb3I6
dGV4dCBmcm9tUmVjdDpwcmVzZW50YXRpb25SZWN0XTsKIH0KIAotc3RhdGljIHZvaWQgc2VsZWN0
ZWRTdHJpbmcoV0tTdHJpbmdSZWYgc3RyaW5nLCBXS0Vycm9yUmVmIGVycm9yLCB2b2lkKiBjb250
ZXh0KQotewotICAgIGlmIChlcnJvcikKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghc3RyaW5n
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBOU1N0cmluZyAqY29udmVydGVkU3RyaW5nID0gdG9J
bXBsKHN0cmluZyktPnN0cmluZygpOwotICAgIFdLSW50ZXJhY3Rpb25WaWV3KiB2aWV3ID0gc3Rh
dGljX2Nhc3Q8V0tJbnRlcmFjdGlvblZpZXcqPihjb250ZXh0KTsKLSAgICBBU1NFUlQodmlldyk7
Ci0gICAgW3ZpZXcgX3Nob3dEaWN0aW9uYXJ5OmNvbnZlcnRlZFN0cmluZ107Ci19Ci0KIC0gKHZv
aWQpX2RlZmluZTooaWQpc2VuZGVyCiB7Ci0gICAgX3BhZ2UtPmdldFNlbGVjdGlvbk9yQ29udGVu
dHNBc1N0cmluZyhTdHJpbmdDYWxsYmFjazo6Y3JlYXRlKHNlbGYsIHNlbGVjdGVkU3RyaW5nKSk7
CisgICAgX3BhZ2UtPmdldFNlbGVjdGlvbk9yQ29udGVudHNBc1N0cmluZyhTdHJpbmdDYWxsYmFj
azo6Y3JlYXRlKFtzZWxmXShib29sIGVycm9yLCBTdHJpbmdJbXBsKiBzdHJpbmcpIHsKKyAgICAg
ICAgaWYgKGVycm9yKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoIXN0cmluZykK
KyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBOU1N0cmluZyAqY29udmVydGVkU3RyaW5n
ID0gKnN0cmluZzsKKyAgICAgICAgW3NlbGYgX3Nob3dEaWN0aW9uYXJ5OmNvbnZlcnRlZFN0cmlu
Z107CisgICAgfSkpOwogfQogCiAvLyBVSVdLSW50ZXJhY3Rpb25WaWV3UHJvdG9jb2wKQEAgLTEw
ODMsMjggKzEwNzgsMjQgQEAgc3RhdGljIGlubGluZSBVSVdLU2VsZWN0aW9uRmxhZ3MgdG9VSVdL
UwogICAgIH0KIH0KIAotc3RhdGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZFdpdGhHZXN0dXJlKGNv
bnN0IFdlYkNvcmU6OkludFBvaW50JiBwb2ludCwgdWludDMyX3QgZ2VzdHVyZVR5cGUsIHVpbnQz
Ml90IGdlc3R1cmVTdGF0ZSwgdWludDMyX3QgZmxhZ3MsIFdLRXJyb3JSZWYgZXJyb3IsIHZvaWQq
IGNvbnRleHQpCitzdGF0aWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkV2l0aEdlc3R1cmUoYm9vbCBl
cnJvciwgV0tJbnRlcmFjdGlvblZpZXcgKnZpZXcsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBw
b2ludCwgdWludDMyX3QgZ2VzdHVyZVR5cGUsIHVpbnQzMl90IGdlc3R1cmVTdGF0ZSwgdWludDMy
X3QgZmxhZ3MpCiB7CiAgICAgaWYgKGVycm9yKSB7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIFdLSW50ZXJhY3Rpb25WaWV3ICp2aWV3
ID0gc3RhdGljX2Nhc3Q8V0tJbnRlcmFjdGlvblZpZXcqPihjb250ZXh0KTsKLSAgICBBU1NFUlQo
dmlldyk7CiAgICAgaWYgKFt2aWV3IHdlYlNlbGVjdGlvbkFzc2lzdGFudF0pCiAgICAgICAgIFso
VUlXS1NlbGVjdGlvbkFzc2lzdGFudCAqKVt2aWV3IHdlYlNlbGVjdGlvbkFzc2lzdGFudF0gc2Vs
ZWN0aW9uQ2hhbmdlZFdpdGhHZXN0dXJlQXQ6KENHUG9pbnQpcG9pbnQgd2l0aEdlc3R1cmU6dG9V
SVdLR2VzdHVyZVR5cGUoKFdLR2VzdHVyZVR5cGUpZ2VzdHVyZVR5cGUpIHdpdGhTdGF0ZTp0b1VJ
R2VzdHVyZVJlY29nbml6ZXJTdGF0ZShzdGF0aWNfY2FzdDxXS0dlc3R1cmVSZWNvZ25pemVyU3Rh
dGU+KGdlc3R1cmVTdGF0ZSkpIHdpdGhGbGFnczoodG9VSVdLU2VsZWN0aW9uRmxhZ3MoKFdLU2Vs
ZWN0aW9uRmxhZ3MpZmxhZ3MpKV07CiAgICAgZWxzZQogICAgICAgICBbKFVJV0tUZXh0SW50ZXJh
Y3Rpb25Bc3Npc3RhbnQgKilbdmlldyBpbnRlcmFjdGlvbkFzc2lzdGFudF0gc2VsZWN0aW9uQ2hh
bmdlZFdpdGhHZXN0dXJlQXQ6KENHUG9pbnQpcG9pbnQgd2l0aEdlc3R1cmU6dG9VSVdLR2VzdHVy
ZVR5cGUoKFdLR2VzdHVyZVR5cGUpZ2VzdHVyZVR5cGUpIHdpdGhTdGF0ZTp0b1VJR2VzdHVyZVJl
Y29nbml6ZXJTdGF0ZShzdGF0aWNfY2FzdDxXS0dlc3R1cmVSZWNvZ25pemVyU3RhdGU+KGdlc3R1
cmVTdGF0ZSkpIHdpdGhGbGFnczoodG9VSVdLU2VsZWN0aW9uRmxhZ3MoKFdLU2VsZWN0aW9uRmxh
Z3MpZmxhZ3MpKV07CiB9CiAKLXN0YXRpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWRXaXRoVG91Y2go
Y29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvaW50LCB1aW50MzJfdCB0b3VjaCwgV0tFcnJvclJl
ZiBlcnJvciwgdm9pZCogY29udGV4dCkKK3N0YXRpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWRXaXRo
VG91Y2goYm9vbCBlcnJvciwgV0tJbnRlcmFjdGlvblZpZXcgKnZpZXcsIGNvbnN0IFdlYkNvcmU6
OkludFBvaW50JiBwb2ludCwgdWludDMyX3QgdG91Y2gpCiB7CiAgICAgaWYgKGVycm9yKSB7CiAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAg
IFdLSW50ZXJhY3Rpb25WaWV3ICp2aWV3ID0gc3RhdGljX2Nhc3Q8V0tJbnRlcmFjdGlvblZpZXcq
Pihjb250ZXh0KTsKLSAgICBBU1NFUlQodmlldyk7CiAgICAgaWYgKFt2aWV3IHdlYlNlbGVjdGlv
bkFzc2lzdGFudF0pCiAgICAgICAgIFsoVUlXS1NlbGVjdGlvbkFzc2lzdGFudCAqKVt2aWV3IHdl
YlNlbGVjdGlvbkFzc2lzdGFudF0gc2VsZWN0aW9uQ2hhbmdlZFdpdGhUb3VjaEF0OihDR1BvaW50
KXBvaW50IHdpdGhTZWxlY3Rpb25Ub3VjaDp0b1VJV0tTZWxlY3Rpb25Ub3VjaCgoV0tTZWxlY3Rp
b25Ub3VjaCl0b3VjaCldOwogICAgIGVsc2UKQEAgLTExMTMsMTcgKzExMDQsMjMgQEAgc3RhdGlj
IHZvaWQgc2VsZWN0aW9uQ2hhbmdlZFdpdGhUb3VjaChjbwogCiAtICh2b2lkKWNoYW5nZVNlbGVj
dGlvbldpdGhHZXN0dXJlQXQ6KENHUG9pbnQpcG9pbnQgd2l0aEdlc3R1cmU6KFVJV0tHZXN0dXJl
VHlwZSlnZXN0dXJlVHlwZSB3aXRoU3RhdGU6KFVJR2VzdHVyZVJlY29nbml6ZXJTdGF0ZSlzdGF0
ZQogewotICAgIF9wYWdlLT5zZWxlY3RXaXRoR2VzdHVyZShXZWJDb3JlOjpJbnRQb2ludChwb2lu
dCksIENoYXJhY3RlckdyYW51bGFyaXR5LCB0b1dLR2VzdHVyZVR5cGUoZ2VzdHVyZVR5cGUpLCB0
b1dLR2VzdHVyZVJlY29nbml6ZXJTdGF0ZShzdGF0ZSksIEdlc3R1cmVDYWxsYmFjazo6Y3JlYXRl
KHNlbGYsIHNlbGVjdGlvbkNoYW5nZWRXaXRoR2VzdHVyZSkpOworICAgIF9wYWdlLT5zZWxlY3RX
aXRoR2VzdHVyZShXZWJDb3JlOjpJbnRQb2ludChwb2ludCksIENoYXJhY3RlckdyYW51bGFyaXR5
LCB0b1dLR2VzdHVyZVR5cGUoZ2VzdHVyZVR5cGUpLCB0b1dLR2VzdHVyZVJlY29nbml6ZXJTdGF0
ZShzdGF0ZSksIEdlc3R1cmVDYWxsYmFjazo6Y3JlYXRlKFtzZWxmXShib29sIGVycm9yLCBjb25z
dCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQsIHVpbnQzMl90IGdlc3R1cmVUeXBlLCB1aW50MzJf
dCBnZXN0dXJlU3RhdGUsIHVpbnQzMl90IGZsYWdzKSB7CisgICAgICAgIHNlbGVjdGlvbkNoYW5n
ZWRXaXRoR2VzdHVyZShlcnJvciwgc2VsZiwgcG9pbnQsIGdlc3R1cmVUeXBlLCBnZXN0dXJlU3Rh
dGUsIGZsYWdzKTsKKyAgICB9KSk7CiB9CiAKIC0gKHZvaWQpY2hhbmdlU2VsZWN0aW9uV2l0aFRv
dWNoQXQ6KENHUG9pbnQpcG9pbnQgd2l0aFNlbGVjdGlvblRvdWNoOihVSVdLU2VsZWN0aW9uVG91
Y2gpdG91Y2ggYmFzZUlzU3RhcnQ6KEJPT0wpYmFzZUlzU3RhcnQKIHsKLSAgICBfcGFnZS0+dXBk
YXRlU2VsZWN0aW9uV2l0aFRvdWNoZXMoV2ViQ29yZTo6SW50UG9pbnQocG9pbnQpLCB0b1dLU2Vs
ZWN0aW9uVG91Y2godG91Y2gpLCBiYXNlSXNTdGFydCwgVG91Y2hlc0NhbGxiYWNrOjpjcmVhdGUo
c2VsZiwgc2VsZWN0aW9uQ2hhbmdlZFdpdGhUb3VjaCkpOworICAgIF9wYWdlLT51cGRhdGVTZWxl
Y3Rpb25XaXRoVG91Y2hlcyhXZWJDb3JlOjpJbnRQb2ludChwb2ludCksIHRvV0tTZWxlY3Rpb25U
b3VjaCh0b3VjaCksIGJhc2VJc1N0YXJ0LCBUb3VjaGVzQ2FsbGJhY2s6OmNyZWF0ZShbc2VsZl0o
Ym9vbCBlcnJvciwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvaW50LCB1aW50MzJfdCB0b3Vj
aCkgeworICAgICAgICBzZWxlY3Rpb25DaGFuZ2VkV2l0aFRvdWNoKGVycm9yLCBzZWxmLCBwb2lu
dCwgdG91Y2gpOworICAgIH0pKTsKIH0KIAogLSAodm9pZCljaGFuZ2VTZWxlY3Rpb25XaXRoVG91
Y2hlc0Zyb206KENHUG9pbnQpZnJvbSB0bzooQ0dQb2ludCl0byB3aXRoR2VzdHVyZTooVUlXS0dl
c3R1cmVUeXBlKWdlc3R1cmVUeXBlIHdpdGhTdGF0ZTooVUlHZXN0dXJlUmVjb2duaXplclN0YXRl
KWdlc3R1cmVTdGF0ZQogewotICAgIF9wYWdlLT5zZWxlY3RXaXRoVHdvVG91Y2hlcyhXZWJDb3Jl
OjpJbnRQb2ludChmcm9tKSwgV2ViQ29yZTo6SW50UG9pbnQodG8pLCB0b1dLR2VzdHVyZVR5cGUo
Z2VzdHVyZVR5cGUpLCB0b1dLR2VzdHVyZVJlY29nbml6ZXJTdGF0ZShnZXN0dXJlU3RhdGUpLCBH
ZXN0dXJlQ2FsbGJhY2s6OmNyZWF0ZShzZWxmLCBzZWxlY3Rpb25DaGFuZ2VkV2l0aEdlc3R1cmUp
KTsKKyAgICBfcGFnZS0+c2VsZWN0V2l0aFR3b1RvdWNoZXMoV2ViQ29yZTo6SW50UG9pbnQoZnJv
bSksIFdlYkNvcmU6OkludFBvaW50KHRvKSwgdG9XS0dlc3R1cmVUeXBlKGdlc3R1cmVUeXBlKSwg
dG9XS0dlc3R1cmVSZWNvZ25pemVyU3RhdGUoZ2VzdHVyZVN0YXRlKSwgR2VzdHVyZUNhbGxiYWNr
OjpjcmVhdGUoW3NlbGZdKGJvb2wgZXJyb3IsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb2lu
dCwgdWludDMyX3QgZ2VzdHVyZVR5cGUsIHVpbnQzMl90IGdlc3R1cmVTdGF0ZSwgdWludDMyX3Qg
ZmxhZ3MpIHsKKyAgICAgICAgc2VsZWN0aW9uQ2hhbmdlZFdpdGhHZXN0dXJlKGVycm9yLCBzZWxm
LCBwb2ludCwgZ2VzdHVyZVR5cGUsIGdlc3R1cmVTdGF0ZSwgZmxhZ3MpOworICAgIH0pKTsKIH0K
IAogLSAoV0tBdXRvQ29ycmVjdGlvbkRhdGEgKilhdXRvY29ycmVjdGlvbkRhdGEKQEAgLTExMzEs
MjkgKzExMjgsNiBAQCAtIChXS0F1dG9Db3JyZWN0aW9uRGF0YSAqKWF1dG9jb3JyZWN0aW9uCiAg
ICAgcmV0dXJuICZfYXV0b2NvcnJlY3Rpb25EYXRhOwogfQogCi1zdGF0aWMgdm9pZCBhdXRvY29y
cmVjdGlvbkRhdGEoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBjb25zdCBTdHJpbmcm
IGZvbnROYW1lLCBkb3VibGUgZm9udFNpemUsIHVpbnQ2NF90IHRyYWl0cywgV0tFcnJvclJlZiBl
cnJvciwgdm9pZCogY29udGV4dCkKLXsKLSAgICBXS0ludGVyYWN0aW9uVmlldyogdmlldyA9IHN0
YXRpY19jYXN0PFdLSW50ZXJhY3Rpb25WaWV3Kj4oY29udGV4dCk7Ci0gICAgQVNTRVJUKHZpZXcp
OwotICAgIENHUmVjdCBmaXJzdFJlY3QgPSBDR1JlY3RaZXJvOwotICAgIENHUmVjdCBsYXN0UmVj
dCA9IENHUmVjdFplcm87Ci0gICAgaWYgKHJlY3RzLnNpemUoKSkgewotICAgICAgICBmaXJzdFJl
Y3QgPSByZWN0c1swXTsKLSAgICAgICAgbGFzdFJlY3QgPSByZWN0c1tyZWN0cy5zaXplKCkgLSAx
XTsKLSAgICB9Ci0KLSAgICBXS0F1dG9Db3JyZWN0aW9uRGF0YSAqYXV0b2NvcnJlY3Rpb25EYXRh
ID0gdmlldy5hdXRvY29ycmVjdGlvbkRhdGE7Ci0gICAgYXV0b2NvcnJlY3Rpb25EYXRhLT5mb250
TmFtZSA9IGZvbnROYW1lOwotICAgIGF1dG9jb3JyZWN0aW9uRGF0YS0+Zm9udFNpemUgPSBmb250
U2l6ZTsKLSAgICBhdXRvY29ycmVjdGlvbkRhdGEtPmZvbnRUcmFpdHMgPSB0cmFpdHM7Ci0gICAg
YXV0b2NvcnJlY3Rpb25EYXRhLT50ZXh0Rmlyc3RSZWN0ID0gZmlyc3RSZWN0OwotICAgIGF1dG9j
b3JyZWN0aW9uRGF0YS0+dGV4dExhc3RSZWN0ID0gbGFzdFJlY3Q7Ci0KLSAgICBhdXRvY29ycmVj
dGlvbkRhdGEtPmF1dG9jb3JyZWN0aW9uSGFuZGxlcihyZWN0cy5zaXplKCkgPyBbV0tBdXRvY29y
cmVjdGlvblJlY3RzIGF1dG9jb3JyZWN0aW9uUmVjdHNXaXRoUmVjdHM6Zmlyc3RSZWN0IGxhc3RS
ZWN0Omxhc3RSZWN0XSA6IG5pbCk7Ci0gICAgW2F1dG9jb3JyZWN0aW9uRGF0YS0+YXV0b2NvcnJl
Y3Rpb25IYW5kbGVyIHJlbGVhc2VdOwotICAgIGF1dG9jb3JyZWN0aW9uRGF0YS0+YXV0b2NvcnJl
Y3Rpb25IYW5kbGVyID0gbmlsOwotfQotCiAvLyBUaGUgY29tcGxldGlvbiBoYW5kbGVyIGNhbiBw
YXNzIG5pbCBpZiBpbnB1dCBkb2VzIG5vdCBtYXRjaCB0aGUgYWN0dWFsIHRleHQgcHJlY2VkaW5n
IHRoZSBpbnNlcnRpb24gcG9pbnQuCiAtICh2b2lkKXJlcXVlc3RBdXRvY29ycmVjdGlvblJlY3Rz
Rm9yU3RyaW5nOihOU1N0cmluZyAqKWlucHV0IHdpdGhDb21wbGV0aW9uSGFuZGxlcjoodm9pZCAo
XikoVUlXS0F1dG9jb3JyZWN0aW9uUmVjdHMgKnJlY3RzRm9ySW5wdXQpKWNvbXBsZXRpb25IYW5k
bGVyCiB7CkBAIC0xMTYyLDcgKzExMzYsMjUgQEAgLSAodm9pZClyZXF1ZXN0QXV0b2NvcnJlY3Rp
b25SZWN0c0ZvclN0cgogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIF9hdXRvY29ycmVjdGlv
bkRhdGEuYXV0b2NvcnJlY3Rpb25IYW5kbGVyID0gW2NvbXBsZXRpb25IYW5kbGVyIGNvcHldOwot
ICAgIF9wYWdlLT5yZXF1ZXN0QXV0b2NvcnJlY3Rpb25EYXRhKGlucHV0LCBBdXRvY29ycmVjdGlv
bkRhdGFDYWxsYmFjazo6Y3JlYXRlKHNlbGYsIGF1dG9jb3JyZWN0aW9uRGF0YSkpOworICAgIF9w
YWdlLT5yZXF1ZXN0QXV0b2NvcnJlY3Rpb25EYXRhKGlucHV0LCBBdXRvY29ycmVjdGlvbkRhdGFD
YWxsYmFjazo6Y3JlYXRlKFtzZWxmLCBjb21wbGV0aW9uSGFuZGxlcl0oYm9vbCwgY29uc3QgVmVj
dG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBjb25zdCBTdHJpbmcmIGZvbnROYW1lLCBkb3VibGUgZm9u
dFNpemUsIHVpbnQ2NF90IHRyYWl0cykgeworICAgICAgICBDR1JlY3QgZmlyc3RSZWN0ID0gQ0dS
ZWN0WmVybzsKKyAgICAgICAgQ0dSZWN0IGxhc3RSZWN0ID0gQ0dSZWN0WmVybzsKKyAgICAgICAg
aWYgKHJlY3RzLnNpemUoKSkgeworICAgICAgICAgICAgZmlyc3RSZWN0ID0gcmVjdHNbMF07Cisg
ICAgICAgICAgICBsYXN0UmVjdCA9IHJlY3RzW3JlY3RzLnNpemUoKSAtIDFdOworICAgICAgICB9
CisKKyAgICAgICAgV0tBdXRvQ29ycmVjdGlvbkRhdGEgKmF1dG9jb3JyZWN0aW9uRGF0YSA9IHNl
bGYuYXV0b2NvcnJlY3Rpb25EYXRhOworICAgICAgICBhdXRvY29ycmVjdGlvbkRhdGEtPmZvbnRO
YW1lID0gZm9udE5hbWU7CisgICAgICAgIGF1dG9jb3JyZWN0aW9uRGF0YS0+Zm9udFNpemUgPSBm
b250U2l6ZTsKKyAgICAgICAgYXV0b2NvcnJlY3Rpb25EYXRhLT5mb250VHJhaXRzID0gdHJhaXRz
OworICAgICAgICBhdXRvY29ycmVjdGlvbkRhdGEtPnRleHRGaXJzdFJlY3QgPSBmaXJzdFJlY3Q7
CisgICAgICAgIGF1dG9jb3JyZWN0aW9uRGF0YS0+dGV4dExhc3RSZWN0ID0gbGFzdFJlY3Q7CisK
KyAgICAgICAgYXV0b2NvcnJlY3Rpb25EYXRhLT5hdXRvY29ycmVjdGlvbkhhbmRsZXIocmVjdHMu
c2l6ZSgpID8gW1dLQXV0b2NvcnJlY3Rpb25SZWN0cyBhdXRvY29ycmVjdGlvblJlY3RzV2l0aFJl
Y3RzOmZpcnN0UmVjdCBsYXN0UmVjdDpsYXN0UmVjdF0gOiBuaWwpOworICAgICAgICBbYXV0b2Nv
cnJlY3Rpb25EYXRhLT5hdXRvY29ycmVjdGlvbkhhbmRsZXIgcmVsZWFzZV07CisgICAgICAgIGF1
dG9jb3JyZWN0aW9uRGF0YS0+YXV0b2NvcnJlY3Rpb25IYW5kbGVyID0gbmlsOworICAgIH0pKTsK
IH0KIAogLSAoQ0dSZWN0KXRleHRGaXJzdFJlY3QKQEAgLTExNzUsMzAgKzExNjcsMTcgQEAgLSAo
Q0dSZWN0KXRleHRMYXN0UmVjdAogICAgIHJldHVybiAoX3BhZ2UtPmVkaXRvclN0YXRlKCkuaGFz
Q29tcG9zaXRpb24pID8gX3BhZ2UtPmVkaXRvclN0YXRlKCkubGFzdE1hcmtlZFJlY3QgOiBfYXV0
b2NvcnJlY3Rpb25EYXRhLnRleHRMYXN0UmVjdDsKIH0KIAotc3RhdGljIHZvaWQgYXV0b2NvcnJl
Y3Rpb25SZXN1bHQoV0tTdHJpbmdSZWYgY29ycmVjdGlvbiwgV0tFcnJvclJlZiBlcnJvciwgdm9p
ZCogY29udGV4dCkKLXsKLSAgICBXS0ludGVyYWN0aW9uVmlldyogdmlldyA9IHN0YXRpY19jYXN0
PFdLSW50ZXJhY3Rpb25WaWV3Kj4oY29udGV4dCk7Ci0gICAgQVNTRVJUKHZpZXcpOwotICAgIFdL
QXV0b0NvcnJlY3Rpb25EYXRhICphdXRvY29ycmVjdGlvbkRhdGEgPSB2aWV3LmF1dG9jb3JyZWN0
aW9uRGF0YTsKLQotICAgIGF1dG9jb3JyZWN0aW9uRGF0YS0+YXV0b2NvcnJlY3Rpb25IYW5kbGVy
KGNvcnJlY3Rpb24gPyBbV0tBdXRvY29ycmVjdGlvblJlY3RzIGF1dG9jb3JyZWN0aW9uUmVjdHNX
aXRoUmVjdHM6YXV0b2NvcnJlY3Rpb25EYXRhLT50ZXh0Rmlyc3RSZWN0IGxhc3RSZWN0OmF1dG9j
b3JyZWN0aW9uRGF0YS0+dGV4dExhc3RSZWN0XSA6IG5pbCk7Ci0gICAgW2F1dG9jb3JyZWN0aW9u
RGF0YS0+YXV0b2NvcnJlY3Rpb25IYW5kbGVyIHJlbGVhc2VdOwotICAgIGF1dG9jb3JyZWN0aW9u
RGF0YS0+YXV0b2NvcnJlY3Rpb25IYW5kbGVyID0gbmlsOwotfQotCiAvLyBUaGUgY29tcGxldGlv
biBoYW5kbGVyIHNob3VsZCBwYXNzIHRoZSByZWN0IG9mIHRoZSBjb3JyZWN0aW9uIHRleHQgYWZ0
ZXIgcmVwbGFjaW5nIHRoZSBpbnB1dCB0ZXh0LCBvciBuaWwgaWYgdGhlIHJlcGxhY2VtZW50IGNv
dWxkIG5vdCBiZSBwZXJmb3JtZWQuCiAtICh2b2lkKWFwcGx5QXV0b2NvcnJlY3Rpb246KE5TU3Ry
aW5nICopY29ycmVjdGlvbiB0b1N0cmluZzooTlNTdHJpbmcgKilpbnB1dCB3aXRoQ29tcGxldGlv
bkhhbmRsZXI6KHZvaWQgKF4pKFVJV0tBdXRvY29ycmVjdGlvblJlY3RzICpyZWN0c0ZvckNvcnJl
Y3Rpb24pKWNvbXBsZXRpb25IYW5kbGVyCiB7CiAgICAgX2F1dG9jb3JyZWN0aW9uRGF0YS5hdXRv
Y29ycmVjdGlvbkhhbmRsZXIgPSBbY29tcGxldGlvbkhhbmRsZXIgY29weV07Ci0gICAgX3BhZ2Ut
PmFwcGx5QXV0b2NvcnJlY3Rpb24oY29ycmVjdGlvbiwgaW5wdXQsIFN0cmluZ0NhbGxiYWNrOjpj
cmVhdGUoc2VsZiwgYXV0b2NvcnJlY3Rpb25SZXN1bHQpKTsKLX0KKyAgICBfcGFnZS0+YXBwbHlB
dXRvY29ycmVjdGlvbihjb3JyZWN0aW9uLCBpbnB1dCwgU3RyaW5nQ2FsbGJhY2s6OmNyZWF0ZShb
c2VsZl0oYm9vbCAvKmVycm9yKi8sIFN0cmluZ0ltcGwqIHN0cmluZykgeworICAgICAgICBXS0F1
dG9Db3JyZWN0aW9uRGF0YSAqYXV0b2NvcnJlY3Rpb25EYXRhID0gc2VsZi5hdXRvY29ycmVjdGlv
bkRhdGE7CiAKLXN0YXRpYyB2b2lkIGF1dG9jb3JyZWN0aW9uQ29udGV4dChjb25zdCBTdHJpbmcm
IGJlZm9yZVRleHQsIGNvbnN0IFN0cmluZyYgbWFya2VkVGV4dCwgY29uc3QgU3RyaW5nJiBzZWxl
Y3RlZFRleHQsIGNvbnN0IFN0cmluZyYgYWZ0ZXJUZXh0LCB1aW50NjRfdCBsb2NhdGlvbiwgdWlu
dDY0X3QgbGVuZ3RoLCBXS0Vycm9yUmVmIGVycm9yLCB2b2lkKiBjb250ZXh0KQotewotICAgIFdL
SW50ZXJhY3Rpb25WaWV3KiB2aWV3ID0gc3RhdGljX2Nhc3Q8V0tJbnRlcmFjdGlvblZpZXcqPihj
b250ZXh0KTsKLSAgICBBU1NFUlQodmlldyk7Ci0gICAgV0tBdXRvQ29ycmVjdGlvbkRhdGEgKmF1
dG9jb3JyZWN0aW9uRGF0YSA9IHZpZXcuYXV0b2NvcnJlY3Rpb25EYXRhOwotICAgIGF1dG9jb3Jy
ZWN0aW9uRGF0YS0+YXV0b2NvcnJlY3Rpb25Db250ZXh0SGFuZGxlcihbV0tBdXRvY29ycmVjdGlv
bkNvbnRleHQgYXV0b2NvcnJlY3Rpb25Db250ZXh0V2l0aERhdGE6YmVmb3JlVGV4dCBtYXJrZWRU
ZXh0Om1hcmtlZFRleHQgc2VsZWN0ZWRUZXh0OnNlbGVjdGVkVGV4dCBhZnRlclRleHQ6YWZ0ZXJU
ZXh0IHNlbGVjdGVkUmFuZ2VJbk1hcmtlZFRleHQ6TlNNYWtlUmFuZ2UobG9jYXRpb24sIGxlbmd0
aCldKTsKKyAgICAgICAgYXV0b2NvcnJlY3Rpb25EYXRhLT5hdXRvY29ycmVjdGlvbkhhbmRsZXIo
c3RyaW5nID8gW1dLQXV0b2NvcnJlY3Rpb25SZWN0cyBhdXRvY29ycmVjdGlvblJlY3RzV2l0aFJl
Y3RzOmF1dG9jb3JyZWN0aW9uRGF0YS0+dGV4dEZpcnN0UmVjdCBsYXN0UmVjdDphdXRvY29ycmVj
dGlvbkRhdGEtPnRleHRMYXN0UmVjdF0gOiBuaWwpOworICAgICAgICBbYXV0b2NvcnJlY3Rpb25E
YXRhLT5hdXRvY29ycmVjdGlvbkhhbmRsZXIgcmVsZWFzZV07CisgICAgICAgIGF1dG9jb3JyZWN0
aW9uRGF0YS0+YXV0b2NvcnJlY3Rpb25IYW5kbGVyID0gbmlsOworICAgIH0pKTsKIH0KIAogLSAo
dm9pZClyZXF1ZXN0QXV0b2NvcnJlY3Rpb25Db250ZXh0V2l0aENvbXBsZXRpb25IYW5kbGVyOih2
b2lkICheKShVSVdLQXV0b2NvcnJlY3Rpb25Db250ZXh0ICphdXRvY29ycmVjdGlvbkNvbnRleHQp
KWNvbXBsZXRpb25IYW5kbGVyCkBAIC0xMjE3LDcgKzExOTYsMTAgQEAgLSAodm9pZClyZXF1ZXN0
QXV0b2NvcnJlY3Rpb25Db250ZXh0V2l0aAogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihbV0tB
dXRvY29ycmVjdGlvbkNvbnRleHQgYXV0b2NvcnJlY3Rpb25Db250ZXh0V2l0aERhdGE6YmVmb3Jl
VGV4dCBtYXJrZWRUZXh0Om1hcmtlZFRleHQgc2VsZWN0ZWRUZXh0OnNlbGVjdGVkVGV4dCBhZnRl
clRleHQ6YWZ0ZXJUZXh0IHNlbGVjdGVkUmFuZ2VJbk1hcmtlZFRleHQ6TlNNYWtlUmFuZ2UobG9j
YXRpb24sIGxlbmd0aCldKTsKICAgICB9IGVsc2UgewogICAgICAgICBfYXV0b2NvcnJlY3Rpb25E
YXRhLmF1dG9jb3JyZWN0aW9uQ29udGV4dEhhbmRsZXIgPSBbY29tcGxldGlvbkhhbmRsZXIgY29w
eV07Ci0gICAgICAgIF9wYWdlLT5yZXF1ZXN0QXV0b2NvcnJlY3Rpb25Db250ZXh0KEF1dG9jb3Jy
ZWN0aW9uQ29udGV4dENhbGxiYWNrOjpjcmVhdGUoc2VsZiwgYXV0b2NvcnJlY3Rpb25Db250ZXh0
KSk7CisgICAgICAgIF9wYWdlLT5yZXF1ZXN0QXV0b2NvcnJlY3Rpb25Db250ZXh0KEF1dG9jb3Jy
ZWN0aW9uQ29udGV4dENhbGxiYWNrOjpjcmVhdGUoW3NlbGYsIGNvbXBsZXRpb25IYW5kbGVyXShi
b29sIC8qZXJyb3IqLywgY29uc3QgU3RyaW5nJiBiZWZvcmVUZXh0LCBjb25zdCBTdHJpbmcmIG1h
cmtlZFRleHQsIGNvbnN0IFN0cmluZyYgc2VsZWN0ZWRUZXh0LCBjb25zdCBTdHJpbmcmIGFmdGVy
VGV4dCwgdWludDY0X3QgbG9jYXRpb24sIHVpbnQ2NF90IGxlbmd0aCkgeworICAgICAgICAgICAg
V0tBdXRvQ29ycmVjdGlvbkRhdGEgKmF1dG9jb3JyZWN0aW9uRGF0YSA9IHNlbGYuYXV0b2NvcnJl
Y3Rpb25EYXRhOworICAgICAgICAgICAgYXV0b2NvcnJlY3Rpb25EYXRhLT5hdXRvY29ycmVjdGlv
bkNvbnRleHRIYW5kbGVyKFtXS0F1dG9jb3JyZWN0aW9uQ29udGV4dCBhdXRvY29ycmVjdGlvbkNv
bnRleHRXaXRoRGF0YTpiZWZvcmVUZXh0IG1hcmtlZFRleHQ6bWFya2VkVGV4dCBzZWxlY3RlZFRl
eHQ6c2VsZWN0ZWRUZXh0IGFmdGVyVGV4dDphZnRlclRleHQgc2VsZWN0ZWRSYW5nZUluTWFya2Vk
VGV4dDpOU01ha2VSYW5nZShsb2NhdGlvbiwgbGVuZ3RoKV0pOworICAgICAgICB9KSk7CiAgICAg
fQogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ByaW50aW5n
Vmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9X
S1ByaW50aW5nVmlldy5tbQkocmV2aXNpb24gMTY0MzU1KQorKysgU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9tYWMvV0tQcmludGluZ1ZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTIwNywx
MSArMjA3LDEwIEBAIHN0cnVjdCBJUENDYWxsYmFja0NvbnRleHQgewogICAgIHVpbnQ2NF90IGNh
bGxiYWNrSUQ7CiB9OwogCi1zdGF0aWMgdm9pZCBwYWdlRGlkRHJhd1RvSW1hZ2UoY29uc3QgU2hh
cmVhYmxlQml0bWFwOjpIYW5kbGUmIGltYWdlSGFuZGxlLCBXS0Vycm9yUmVmLCB2b2lkKiB1bnR5
cGVkQ29udGV4dCkKK3N0YXRpYyB2b2lkIHBhZ2VEaWREcmF3VG9JbWFnZShjb25zdCBTaGFyZWFi
bGVCaXRtYXA6OkhhbmRsZSYgaW1hZ2VIYW5kbGUsIElQQ0NhbGxiYWNrQ29udGV4dCogY29udGV4
dCkKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgT3duUHRyPElQQ0Nh
bGxiYWNrQ29udGV4dD4gY29udGV4dCA9IGFkb3B0UHRyKHN0YXRpY19jYXN0PElQQ0NhbGxiYWNr
Q29udGV4dCo+KHVudHlwZWRDb250ZXh0KSk7CiAgICAgV0tQcmludGluZ1ZpZXcgKnZpZXcgPSBj
b250ZXh0LT52aWV3LmdldCgpOwogCiAgICAgLy8gSWYgdGhlIHVzZXIgaGFzIGFscmVhZHkgY2hh
bmdlZCBwcmludCBzZXR1cCwgdGhlbiB0aGlzIHJlc3BvbnNlIGlzIG9ic29sZXRlLiBBbmQgaWYg
dGhpcyBjYWxsYmFjayBpcyBub3QgaW4gcmVzcG9uc2UgdG8gdGhlIGxhdGVzdCByZXF1ZXN0LApA
QCAtMjM2LDI1ICsyMzUsNiBAQCBzdGF0aWMgdm9pZCBwYWdlRGlkRHJhd1RvSW1hZ2UoY29uc3Qg
U2hhCiAgICAgfQogfQogCi1zdGF0aWMgdm9pZCBwYWdlRGlkRHJhd1RvUERGKFdLRGF0YVJlZiBk
YXRhUmVmLCBXS0Vycm9yUmVmLCB2b2lkKiB1bnR5cGVkQ29udGV4dCkKLXsKLSAgICBBU1NFUlQo
UnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgT3duUHRyPElQQ0NhbGxiYWNrQ29udGV4dD4gY29u
dGV4dCA9IGFkb3B0UHRyKHN0YXRpY19jYXN0PElQQ0NhbGxiYWNrQ29udGV4dCo+KHVudHlwZWRD
b250ZXh0KSk7Ci0gICAgV0tQcmludGluZ1ZpZXcgKnZpZXcgPSBjb250ZXh0LT52aWV3LmdldCgp
OwotICAgIEFQSTo6RGF0YSogZGF0YSA9IHRvSW1wbChkYXRhUmVmKTsKLQotICAgIGlmIChjb250
ZXh0LT5jYWxsYmFja0lEID09IHZpZXctPl9leHBlY3RlZFByaW50Q2FsbGJhY2spIHsKLSAgICAg
ICAgQVNTRVJUKCFbdmlldyBfaXNQcmludGluZ1ByZXZpZXddKTsKLSAgICAgICAgQVNTRVJUKHZp
ZXctPl9wcmludGVkUGFnZXNEYXRhLmlzRW1wdHkoKSk7Ci0gICAgICAgIEFTU0VSVCghdmlldy0+
X3ByaW50ZWRQYWdlc1BERkRvY3VtZW50KTsKLSAgICAgICAgaWYgKGRhdGEpCi0gICAgICAgICAg
ICB2aWV3LT5fcHJpbnRlZFBhZ2VzRGF0YS5hcHBlbmQoZGF0YS0+Ynl0ZXMoKSwgZGF0YS0+c2l6
ZSgpKTsKLSAgICAgICAgdmlldy0+X2V4cGVjdGVkUHJpbnRDYWxsYmFjayA9IDA7Ci0gICAgICAg
IHZpZXctPl9wcmludGluZ0NhbGxiYWNrQ29uZGl0aW9uLm5vdGlmeV9vbmUoKTsKLSAgICB9Ci19
Ci0KIC0gKHZvaWQpX3ByZXBhcmVQREZEYXRhRm9yUHJpbnRpbmdPblNlY29uZGFyeVRocmVhZAog
ewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CkBAIC0yODMsNyArMjYzLDIyIEBAIC0g
KHZvaWQpX3ByZXBhcmVQREZEYXRhRm9yUHJpbnRpbmdPblNlY28KICAgICBfd2ViRnJhbWUtPnBh
Z2UoKS0+YmVnaW5QcmludGluZyhfd2ViRnJhbWUuZ2V0KCksIHByaW50SW5mbyk7CiAKICAgICBJ
UENDYWxsYmFja0NvbnRleHQqIGNvbnRleHQgPSBuZXcgSVBDQ2FsbGJhY2tDb250ZXh0OwotICAg
IFJlZlB0cjxEYXRhQ2FsbGJhY2s+IGNhbGxiYWNrID0gRGF0YUNhbGxiYWNrOjpjcmVhdGUoY29u
dGV4dCwgcGFnZURpZERyYXdUb1BERik7CisgICAgUmVmUHRyPERhdGFDYWxsYmFjaz4gY2FsbGJh
Y2sgPSBEYXRhQ2FsbGJhY2s6OmNyZWF0ZShbY29udGV4dF0oYm9vbCwgQVBJOjpEYXRhKiBkYXRh
KSB7CisgICAgICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICAgICAgT3duUHRy
PElQQ0NhbGxiYWNrQ29udGV4dD4gY29udGV4dERlbGV0ZXIgPSBhZG9wdFB0cihjb250ZXh0KTsK
KyAgICAgICAgV0tQcmludGluZ1ZpZXcgKnZpZXcgPSBjb250ZXh0LT52aWV3LmdldCgpOworCisg
ICAgICAgIGlmIChjb250ZXh0LT5jYWxsYmFja0lEID09IHZpZXctPl9leHBlY3RlZFByaW50Q2Fs
bGJhY2spIHsKKyAgICAgICAgICAgIEFTU0VSVCghW3ZpZXcgX2lzUHJpbnRpbmdQcmV2aWV3XSk7
CisgICAgICAgICAgICBBU1NFUlQodmlldy0+X3ByaW50ZWRQYWdlc0RhdGEuaXNFbXB0eSgpKTsK
KyAgICAgICAgICAgIEFTU0VSVCghdmlldy0+X3ByaW50ZWRQYWdlc1BERkRvY3VtZW50KTsKKyAg
ICAgICAgICAgIGlmIChkYXRhKQorICAgICAgICAgICAgICAgIHZpZXctPl9wcmludGVkUGFnZXNE
YXRhLmFwcGVuZChkYXRhLT5ieXRlcygpLCBkYXRhLT5zaXplKCkpOworICAgICAgICAgICAgdmll
dy0+X2V4cGVjdGVkUHJpbnRDYWxsYmFjayA9IDA7CisgICAgICAgICAgICB2aWV3LT5fcHJpbnRp
bmdDYWxsYmFja0NvbmRpdGlvbi5ub3RpZnlfb25lKCk7CisgICAgICAgIH0KKyAgICB9KTsKICAg
ICBfZXhwZWN0ZWRQcmludENhbGxiYWNrID0gY2FsbGJhY2stPmNhbGxiYWNrSUQoKTsKIAogICAg
IGNvbnRleHQtPnZpZXcgPSBzZWxmOwpAQCAtMjkyLDExICsyODcsMTAgQEAgLSAodm9pZClfcHJl
cGFyZVBERkRhdGFGb3JQcmludGluZ09uU2VjbwogICAgIF93ZWJGcmFtZS0+cGFnZSgpLT5kcmF3
UGFnZXNUb1BERihfd2ViRnJhbWUuZ2V0KCksIHByaW50SW5mbywgZmlyc3RQYWdlIC0gMSwgbGFz
dFBhZ2UgLSBmaXJzdFBhZ2UgKyAxLCBjYWxsYmFjay5nZXQoKSk7CiB9CiAKLXN0YXRpYyB2b2lk
IHBhZ2VEaWRDb21wdXRlUGFnZVJlY3RzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpJbnRSZWN0PiYg
cGFnZVJlY3RzLCBkb3VibGUgdG90YWxTY2FsZUZhY3RvckZvclByaW50aW5nLCBXS0Vycm9yUmVm
LCB2b2lkKiB1bnR5cGVkQ29udGV4dCkKK3N0YXRpYyB2b2lkIHBhZ2VEaWRDb21wdXRlUGFnZVJl
Y3RzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpJbnRSZWN0PiYgcGFnZVJlY3RzLCBkb3VibGUgdG90
YWxTY2FsZUZhY3RvckZvclByaW50aW5nLCBJUENDYWxsYmFja0NvbnRleHQqIGNvbnRleHQpCiB7
CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAotICAgIE93blB0cjxJUENDYWxsYmFj
a0NvbnRleHQ+IGNvbnRleHQgPSBhZG9wdFB0cihzdGF0aWNfY2FzdDxJUENDYWxsYmFja0NvbnRl
eHQqPih1bnR5cGVkQ29udGV4dCkpOwogICAgIFdLUHJpbnRpbmdWaWV3ICp2aWV3ID0gY29udGV4
dC0+dmlldy5nZXQoKTsKIAogICAgIC8vIElmIHRoZSB1c2VyIGhhcyBhbHJlYWR5IGNoYW5nZWQg
cHJpbnQgc2V0dXAsIHRoZW4gdGhpcyByZXNwb25zZSBpcyBvYnNvbGV0ZS4KQEAgLTM0NCw3ICsz
MzgsMTAgQEAgLSAoQk9PTClfYXNrUGFnZVRvQ29tcHV0ZVBhZ2VSZWN0cwogICAgIEFTU0VSVCgh
X2V4cGVjdGVkQ29tcHV0ZWRQYWdlc0NhbGxiYWNrKTsKIAogICAgIElQQ0NhbGxiYWNrQ29udGV4
dCogY29udGV4dCA9IG5ldyBJUENDYWxsYmFja0NvbnRleHQ7Ci0gICAgUmVmUHRyPENvbXB1dGVk
UGFnZXNDYWxsYmFjaz4gY2FsbGJhY2sgPSBDb21wdXRlZFBhZ2VzQ2FsbGJhY2s6OmNyZWF0ZShj
b250ZXh0LCBwYWdlRGlkQ29tcHV0ZVBhZ2VSZWN0cyk7CisgICAgUmVmUHRyPENvbXB1dGVkUGFn
ZXNDYWxsYmFjaz4gY2FsbGJhY2sgPSBDb21wdXRlZFBhZ2VzQ2FsbGJhY2s6OmNyZWF0ZShbY29u
dGV4dF0oYm9vbCwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OkludFJlY3Q+JiBwYWdlUmVjdHMsIGRv
dWJsZSB0b3RhbFNjYWxlRmFjdG9yRm9yUHJpbnRpbmcpIHsKKyAgICAgICAgT3duUHRyPElQQ0Nh
bGxiYWNrQ29udGV4dD4gY29udGV4dERlbGV0ZXIgPSBhZG9wdFB0cihjb250ZXh0KTsKKyAgICAg
ICAgcGFnZURpZENvbXB1dGVQYWdlUmVjdHMocGFnZVJlY3RzLCB0b3RhbFNjYWxlRmFjdG9yRm9y
UHJpbnRpbmcsIGNvbnRleHQpOworICAgIH0pOwogICAgIF9leHBlY3RlZENvbXB1dGVkUGFnZXND
YWxsYmFjayA9IGNhbGxiYWNrLT5jYWxsYmFja0lEKCk7CiAgICAgY29udGV4dC0+dmlldyA9IHNl
bGY7CiAgICAgY29udGV4dC0+Y2FsbGJhY2tJRCA9IF9leHBlY3RlZENvbXB1dGVkUGFnZXNDYWxs
YmFjazsKQEAgLTQ5Myw3ICs0OTAsMTAgQEAgLSAodm9pZClfZHJhd1ByZXZpZXc6KE5TUmVjdClu
c1JlY3QKICAgICAgICAgICAgICAgICBfd2ViRnJhbWUtPnBhZ2UoKS0+YmVnaW5QcmludGluZyhf
d2ViRnJhbWUuZ2V0KCksIFByaW50SW5mbyhbX3ByaW50T3BlcmF0aW9uIHByaW50SW5mb10pKTsK
IAogICAgICAgICAgICAgICAgIElQQ0NhbGxiYWNrQ29udGV4dCogY29udGV4dCA9IG5ldyBJUEND
YWxsYmFja0NvbnRleHQ7Ci0gICAgICAgICAgICAgICAgUmVmUHRyPEltYWdlQ2FsbGJhY2s+IGNh
bGxiYWNrID0gSW1hZ2VDYWxsYmFjazo6Y3JlYXRlKGNvbnRleHQsIHBhZ2VEaWREcmF3VG9JbWFn
ZSk7CisgICAgICAgICAgICAgICAgUmVmUHRyPEltYWdlQ2FsbGJhY2s+IGNhbGxiYWNrID0gSW1h
Z2VDYWxsYmFjazo6Y3JlYXRlKFtjb250ZXh0XShib29sLCBjb25zdCBTaGFyZWFibGVCaXRtYXA6
OkhhbmRsZSYgaW1hZ2VIYW5kbGUpIHsKKyAgICAgICAgICAgICAgICAgICAgT3duUHRyPElQQ0Nh
bGxiYWNrQ29udGV4dD4gY29udGV4dERlbGV0ZXIgPSBhZG9wdFB0cihjb250ZXh0KTsKKyAgICAg
ICAgICAgICAgICAgICAgcGFnZURpZERyYXdUb0ltYWdlKGltYWdlSGFuZGxlLCBjb250ZXh0KTsK
KyAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICBfbGF0ZXN0RXhwZWN0ZWRQcmV2
aWV3Q2FsbGJhY2sgPSBjYWxsYmFjay0+Y2FsbGJhY2tJRCgpOwogICAgICAgICAgICAgICAgIF9l
eHBlY3RlZFByZXZpZXdDYWxsYmFja3MuYWRkKF9sYXRlc3RFeHBlY3RlZFByZXZpZXdDYWxsYmFj
aywgc2NhbGVkUHJpbnRpbmdSZWN0KTsKIApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9tYWMvV0tWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvbWFjL1dLVmlldy5tbQkocmV2aXNpb24gMTY0MzU1KQorKysgU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC03MjgsMTggKzcy
OCw2IEBAIHN0YXRpYyBOU1Rvb2xiYXJJdGVtICp0b29sYmFySXRlbShpZCA8TlMKICAgICByZXR1
cm4gKE5TVG9vbGJhckl0ZW0gKilpdGVtOwogfQogCi1zdGF0aWMgdm9pZCB2YWxpZGF0ZUNvbW1h
bmRDYWxsYmFjayhXS1N0cmluZ1JlZiBjb21tYW5kTmFtZSwgYm9vbCBpc0VuYWJsZWQsIGludDMy
X3Qgc3RhdGUsIFdLRXJyb3JSZWYgZXJyb3IsIHZvaWQqIGNvbnRleHQpCi17Ci0gICAgLy8gSWYg
dGhlIHByb2Nlc3MgZXhpdHMgYmVmb3JlIHRoZSBjb21tYW5kIGNhbiBiZSB2YWxpZGF0ZWQsIHdl
J2xsIGJlIGNhbGxlZCBiYWNrIHdpdGggYW4gZXJyb3IuCi0gICAgaWYgKGVycm9yKQotICAgICAg
ICByZXR1cm47Ci0gICAgCi0gICAgV0tWaWV3KiB3a1ZpZXcgPSBzdGF0aWNfY2FzdDxXS1ZpZXcq
Pihjb250ZXh0KTsKLSAgICBBU1NFUlQod2tWaWV3KTsKLSAgICAKLSAgICBbd2tWaWV3IF9zZXRV
c2VySW50ZXJmYWNlSXRlbVN0YXRlOm5zU3RyaW5nRnJvbVdlYkNvcmVTdHJpbmcodG9JbXBsKGNv
bW1hbmROYW1lKS0+c3RyaW5nKCkpIGVuYWJsZWQ6aXNFbmFibGVkIHN0YXRlOnN0YXRlXTsKLX0K
LQogLSAoQk9PTCl2YWxpZGF0ZVVzZXJJbnRlcmZhY2VJdGVtOihpZCA8TlNWYWxpZGF0ZWRVc2Vy
SW50ZXJmYWNlSXRlbT4paXRlbQogewogICAgIFNFTCBhY3Rpb24gPSBbaXRlbSBhY3Rpb25dOwpA
QCAtODMxLDcgKzgxOSwxMyBAQCAtIChCT09MKXZhbGlkYXRlVXNlckludGVyZmFjZUl0ZW06KGlk
IDxOCiAgICAgICAgIC8vIElmIHdlIGFyZSBub3QgYWxyZWFkeSBhd2FpdGluZyB2YWxpZGF0aW9u
IGZvciB0aGlzIGNvbW1hbmQsIHN0YXJ0IHRoZSBhc3luY2hyb25vdXMgdmFsaWRhdGlvbiBwcm9j
ZXNzLgogICAgICAgICAvLyBGSVhNRTogVGhlb3JldGljYWxseSwgdGhlcmUgaXMgYSByYWNlIGhl
cmU7IHdoZW4gd2UgZ2V0IHRoZSBhbnN3ZXIgaXQgbWlnaHQgYmUgb2xkLCBmcm9tIGEgcHJldmlv
dXMgdGltZQogICAgICAgICAvLyB3ZSBhc2tlZCBmb3IgdGhlIHNhbWUgY29tbWFuZDsgdGhlcmUg
aXMgbm8gZ3VhcmFudGVlIHRoZSBhbnN3ZXIgaXMgc3RpbGwgdmFsaWQuCi0gICAgICAgIF9kYXRh
LT5fcGFnZS0+dmFsaWRhdGVDb21tYW5kKGNvbW1hbmROYW1lLCBWYWxpZGF0ZUNvbW1hbmRDYWxs
YmFjazo6Y3JlYXRlKHNlbGYsIHZhbGlkYXRlQ29tbWFuZENhbGxiYWNrKSk7CisgICAgICAgIF9k
YXRhLT5fcGFnZS0+dmFsaWRhdGVDb21tYW5kKGNvbW1hbmROYW1lLCBWYWxpZGF0ZUNvbW1hbmRD
YWxsYmFjazo6Y3JlYXRlKFtzZWxmXShib29sIGVycm9yLCBTdHJpbmdJbXBsKiBjb21tYW5kTmFt
ZSwgYm9vbCBpc0VuYWJsZWQsIGludDMyX3Qgc3RhdGUpIHsKKyAgICAgICAgICAgIC8vIElmIHRo
ZSBwcm9jZXNzIGV4aXRzIGJlZm9yZSB0aGUgY29tbWFuZCBjYW4gYmUgdmFsaWRhdGVkLCB3ZSds
bCBiZSBjYWxsZWQgYmFjayB3aXRoIGFuIGVycm9yLgorICAgICAgICAgICAgaWYgKGVycm9yKQor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgW3NlbGYg
X3NldFVzZXJJbnRlcmZhY2VJdGVtU3RhdGU6bnNTdHJpbmdGcm9tV2ViQ29yZVN0cmluZyhjb21t
YW5kTmFtZSkgZW5hYmxlZDppc0VuYWJsZWQgc3RhdGU6c3RhdGVdOworICAgICAgICB9KSk7CiAg
ICAgfQogCiAgICAgLy8gVHJlYXQgYXMgZW5hYmxlZCB1bnRpbCB3ZSBnZXQgdGhlIHJlc3VsdCBi
YWNrIGZyb20gdGhlIHdlYiBwcm9jZXNzIGFuZCBfc2V0VXNlckludGVyZmFjZUl0ZW1TdGF0ZSBp
cyBjYWxsZWQuCkBAIC04NDAsMjAgKzgzNCwxNiBAQCAtIChCT09MKXZhbGlkYXRlVXNlckludGVy
ZmFjZUl0ZW06KGlkIDxOCiAgICAgcmV0dXJuIFlFUzsKIH0KIAotc3RhdGljIHZvaWQgc3BlYWtT
dHJpbmcoV0tTdHJpbmdSZWYgc3RyaW5nLCBXS0Vycm9yUmVmIGVycm9yLCB2b2lkKikKLXsKLSAg
ICBpZiAoZXJyb3IpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIXN0cmluZykKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgTlNTdHJpbmcgKmNvbnZlcnRlZFN0cmluZyA9IHRvSW1wbChzdHJpbmcp
LT5zdHJpbmcoKTsKLSAgICBbTlNBcHAgc3BlYWtTdHJpbmc6Y29udmVydGVkU3RyaW5nXTsKLX0K
LQogLSAoSUJBY3Rpb24pc3RhcnRTcGVha2luZzooaWQpc2VuZGVyCiB7Ci0gICAgX2RhdGEtPl9w
YWdlLT5nZXRTZWxlY3Rpb25PckNvbnRlbnRzQXNTdHJpbmcoU3RyaW5nQ2FsbGJhY2s6OmNyZWF0
ZSgwLCBzcGVha1N0cmluZykpOworICAgIF9kYXRhLT5fcGFnZS0+Z2V0U2VsZWN0aW9uT3JDb250
ZW50c0FzU3RyaW5nKFN0cmluZ0NhbGxiYWNrOjpjcmVhdGUoW3NlbGZdKGJvb2wgZXJyb3IsIFN0
cmluZ0ltcGwqIHN0cmluZykgeworICAgICAgICBpZiAoZXJyb3IpCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIGlmICghc3RyaW5nKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IFtOU0FwcCBzcGVha1N0cmluZzoqc3RyaW5nXTsKKyAgICB9KSk7CiB9CiAKIC0gKElCQWN0aW9u
KXN0b3BTcGVha2luZzooaWQpc2VuZGVyCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
UGx1Z2lucy9XZWJQbHVnaW5TaXRlRGF0YU1hbmFnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9XZWJQbHVnaW5TaXRlRGF0YU1hbmFnZXIuaAkocmV2
aXNpb24gMTY0MzU1KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvV2ViUGx1
Z2luU2l0ZURhdGFNYW5hZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgbmFt
ZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBXZWJDb250ZXh0OwogY2xhc3MgV2ViUHJvY2Vzc1Byb3h5
OwogCi10eXBlZGVmIEdlbmVyaWNDYWxsYmFjazxXS0FycmF5UmVmPiBBcnJheUNhbGxiYWNrOwor
dHlwZWRlZiBHZW5lcmljQ2FsbGJhY2s8QVBJOjpBcnJheSo+IEFycmF5Q2FsbGJhY2s7CiAKIGNs
YXNzIFdlYlBsdWdpblNpdGVEYXRhTWFuYWdlciA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJ
OjpPYmplY3Q6OlR5cGU6OlBsdWdpblNpdGVEYXRhTWFuYWdlcj4gewogcHVibGljOgpJbmRleDog
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVy
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV0tGdWxsU2Ny
ZWVuV2luZG93Q29udHJvbGxlci5tbQkocmV2aXNpb24gMTY0MzU1KQorKysgU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL21hYy9XS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0zNjcsOCArMzY3LDYgQEAgLSAodm9pZCliZWdhbkV4aXRGdWxsU2NyZWVuV2l0
aEluaXRpYWxGcgogICAgIFtbc2VsZiB3aW5kb3ddIGV4aXRGdWxsU2NyZWVuTW9kZTpzZWxmXTsK
IH0KIAotc3RhdGljIHZvaWQgY29tcGxldGVGaW5pc2hFeGl0RnVsbFNjcmVlbkFuaW1hdGlvbkFm
dGVyUmVwYWludChXS0Vycm9yUmVmLCB2b2lkKik7Ci0KIC0gKHZvaWQpZmluaXNoZWRFeGl0RnVs
bFNjcmVlbkFuaW1hdGlvbjooYm9vbCljb21wbGV0ZWQKIHsKICAgICBpZiAoX2Z1bGxTY3JlZW5T
dGF0ZSAhPSBFeGl0aW5nRnVsbFNjcmVlbikKQEAgLTQxMSw3ICs0MDksOSBAQCAtICh2b2lkKWZp
bmlzaGVkRXhpdEZ1bGxTY3JlZW5BbmltYXRpb246CiAgICAgICAgIC8vIGNsZWFycyBfcmVwYWlu
dENhbGxiYWNrLgogICAgICAgICBBU1NFUlQoIV9yZXBhaW50Q2FsbGJhY2spOwogICAgIH0KLSAg
ICBfcmVwYWludENhbGxiYWNrID0gVm9pZENhbGxiYWNrOjpjcmVhdGUoc2VsZiwgY29tcGxldGVG
aW5pc2hFeGl0RnVsbFNjcmVlbkFuaW1hdGlvbkFmdGVyUmVwYWludCk7CisgICAgX3JlcGFpbnRD
YWxsYmFjayA9IFZvaWRDYWxsYmFjazo6Y3JlYXRlKFtzZWxmXShib29sKSB7CisgICAgICAgIFtz
ZWxmIGNvbXBsZXRlRmluaXNoRXhpdEZ1bGxTY3JlZW5BbmltYXRpb25BZnRlclJlcGFpbnRdOwor
ICAgIH0pOwogICAgIFtzZWxmIF9wYWdlXS0+Zm9yY2VSZXBhaW50KF9yZXBhaW50Q2FsbGJhY2sp
OwogfQogCkBAIC00MjMsMTEgKzQyMyw2IEBAIC0gKHZvaWQpY29tcGxldGVGaW5pc2hFeGl0RnVs
bFNjcmVlbkFuaW0KICAgICBOU0VuYWJsZVNjcmVlblVwZGF0ZXMoKTsKIH0KIAotc3RhdGljIHZv
aWQgY29tcGxldGVGaW5pc2hFeGl0RnVsbFNjcmVlbkFuaW1hdGlvbkFmdGVyUmVwYWludChXS0Vy
cm9yUmVmLCB2b2lkKiBfc2VsZikKLXsKLSAgICBbKFdLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xs
ZXIqKV9zZWxmIGNvbXBsZXRlRmluaXNoRXhpdEZ1bGxTY3JlZW5BbmltYXRpb25BZnRlclJlcGFp
bnRdOwotfQotCiAtICh2b2lkKXBlcmZvcm1DbG9zZTooaWQpc2VuZGVyCiB7CiAgICAgaWYgKFtz
ZWxmIGlzRnVsbFNjcmVlbl0pCg==
</data>
<flag name="review"
          id="248697"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>