<?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>137422</bug_id>
          
          <creation_ts>2014-10-04 04:40:38 -0700</creation_ts>
          <short_desc>[GTK] Move GtkDragAndDropHelper from Platform to WebKit2</short_desc>
          <delta_ts>2014-10-19 00:33:24 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</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>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>berto</cc>
    
    <cc>commit-queue</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mrobinson</cc>
    
    <cc>rakuco</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1039495</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-10-04 04:40:38 -0700</bug_when>
    <thetext>WebKitWebViewBase is currently the only user of GtkDragAndDropHelper, that was added to share the code with WebKit1. This removes another file in platform that is built twice for the plugin process.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1039496</commentid>
    <comment_count>1</comment_count>
      <attachid>239278</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-10-04 04:42:30 -0700</bug_when>
    <thetext>Created attachment 239278
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1039497</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-10-04 04:44:19 -0700</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>1039537</commentid>
    <comment_count>3</comment_count>
      <attachid>239278</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2014-10-04 13:53:40 -0700</bug_when>
    <thetext>Comment on attachment 239278
Patch

I think it&apos;s cleaner to keep the drag and drop support separate from the rest of the widget. What if we just move this file to the WebKit2 directory?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1039582</commentid>
    <comment_count>4</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-10-05 00:34:42 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 239278 [details])
&gt; I think it&apos;s cleaner to keep the drag and drop support separate from the rest of the widget. What if we just move this file to the WebKit2 directory?

Well, I don&apos;t think the current class is cleaner, it was only needed to share the code with WebKit1, but I never liked some things like setWidget() or the DragExited callback. In some cases the handleFoo methods are just one line of code, so I don&apos;t think another unneeded layer makes things cleaner.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042387</commentid>
    <comment_count>5</comment_count>
      <attachid>240018</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-10-17 10:07:01 -0700</bug_when>
    <thetext>Created attachment 240018
Updated patch to move all the dnd logic to a class</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042675</commentid>
    <comment_count>6</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-10-19 00:33:24 -0700</bug_when>
    <thetext>Committed r174868: &lt;http://trac.webkit.org/changeset/174868&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>239278</attachid>
            <date>2014-10-04 04:42:30 -0700</date>
            <delta_ts>2014-10-17 10:07:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-dnd.diff</filename>
            <type>text/plain</type>
            <size>24719</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAyOGFmZTFhLi5lOGM5NzdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQg
QEAKKzIwMTQtMTAtMDQgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdIE1lcmdlIEd0a0RyYWdBbmREcm9wSGVscGVyIGludG8gV2ViS2l0
V2ViVmlld0Jhc2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEzNzQyMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogUGxhdGZvcm1HVEsuY21ha2U6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL0d0a0RyYWdB
bmREcm9wSGVscGVyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvR3RrRHJh
Z0FuZERyb3BIZWxwZXIuaDogUmVtb3ZlZC4KKwogMjAxNC0xMC0wNCAgVGltIEhvcnRvbiAgPHRp
bW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtlIGl0IHBvc3NpYmxlIHRvIHRl
c3QgcGFnZSBvdmVybGF5cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsu
Y21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQppbmRleCAzNDljNjFlLi4z
ZTM3N2RlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQpAQCAtMjIzLDcgKzIyMyw2IEBAIGxp
c3QoQVBQRU5EIFdlYkNvcmVQbGF0Zm9ybUdUS19TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3RrL0Ry
YWdJbWFnZUd0ay5jcHAKICAgICBwbGF0Zm9ybS9ndGsvR1JlZlB0ckd0ay5jcHAKICAgICBwbGF0
Zm9ybS9ndGsvR3RrQ2xpY2tDb3VudGVyLmNwcAotICAgIHBsYXRmb3JtL2d0ay9HdGtEcmFnQW5k
RHJvcEhlbHBlci5jcHAKICAgICBwbGF0Zm9ybS9ndGsvR3RrSW5wdXRNZXRob2RGaWx0ZXIuY3Bw
CiAgICAgcGxhdGZvcm0vZ3RrL0d0a1RvdWNoQ29udGV4dEhlbHBlci5jcHAKICAgICBwbGF0Zm9y
bS9ndGsvR3RrVXRpbGl0aWVzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL0d0a0RyYWdBbmREcm9wSGVscGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9HdGtEcmFnQW5kRHJvcEhlbHBlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGM4ZWI4ZDEuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0
a0RyYWdBbmREcm9wSGVscGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE2OCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDExLCBJZ2FsaWEgUy5MLgotICoKLSAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQotICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMw
MSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkd0a0RyYWdBbmRE
cm9wSGVscGVyLmgiCi0KLSNpbmNsdWRlICJDbGlwYm9hcmRVdGlsaXRpZXNHdGsuaCIKLSNpbmNs
dWRlICJEcmFnRGF0YS5oIgotI2luY2x1ZGUgIkd0a1V0aWxpdGllcy5oIgotI2luY2x1ZGUgIkd0
a1ZlcnNpb25pbmcuaCIKLSNpbmNsdWRlICJQYXN0ZWJvYXJkSGVscGVyLmgiCi0jaW5jbHVkZSA8
Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dNYWluTG9vcFNvdXJjZS5oPgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0cnVjdCBEcm9wcGluZ0NvbnRleHQgewotICAgIERyb3Bw
aW5nQ29udGV4dChHZGtEcmFnQ29udGV4dCogZ2RrQ29udGV4dCwgY29uc3QgSW50UG9pbnQmIHBv
c2l0aW9uKQotICAgICAgICA6IGdka0NvbnRleHQoZ2RrQ29udGV4dCkKLSAgICAgICAgLCBkYXRh
T2JqZWN0KERhdGFPYmplY3RHdGs6OmNyZWF0ZSgpKQotICAgICAgICAsIGxhc3RNb3Rpb25Qb3Np
dGlvbihwb3NpdGlvbikKLSAgICAgICAgLCBkcm9wSGFwcGVuZWQoZmFsc2UpCi0gICAgICAgICwg
ZXhpdGVkQ2FsbGJhY2soMCkKLSAgICB7Ci0gICAgfQotCi0gICAgR2RrRHJhZ0NvbnRleHQqIGdk
a0NvbnRleHQ7Ci0gICAgUmVmUHRyPERhdGFPYmplY3RHdGs+IGRhdGFPYmplY3Q7Ci0gICAgV2Vi
Q29yZTo6SW50UG9pbnQgbGFzdE1vdGlvblBvc2l0aW9uOwotICAgIGludCBwZW5kaW5nRGF0YVJl
cXVlc3RzOwotICAgIGJvb2wgZHJvcEhhcHBlbmVkOwotICAgIERyYWdFeGl0ZWRDYWxsYmFjayBl
eGl0ZWRDYWxsYmFjazsKLX07Ci0KLUd0a0RyYWdBbmREcm9wSGVscGVyOjpHdGtEcmFnQW5kRHJv
cEhlbHBlcigpCi0gICAgOiBtX3dpZGdldChudWxscHRyKQotewotfQotCi1HdGtEcmFnQW5kRHJv
cEhlbHBlcjo6fkd0a0RyYWdBbmREcm9wSGVscGVyKCkKLXsKLX0KLQotYm9vbCBHdGtEcmFnQW5k
RHJvcEhlbHBlcjo6aGFuZGxlRHJhZ0VuZChHZGtEcmFnQ29udGV4dCogZHJhZ0NvbnRleHQpCi17
Ci0gICAgcmV0dXJuIG1fZHJhZ2dpbmdEYXRhT2JqZWN0cy5yZW1vdmUoZHJhZ0NvbnRleHQpOwot
fQotCi12b2lkIEd0a0RyYWdBbmREcm9wSGVscGVyOjpoYW5kbGVHZXREcmFnRGF0YShHZGtEcmFn
Q29udGV4dCogY29udGV4dCwgR3RrU2VsZWN0aW9uRGF0YSogc2VsZWN0aW9uRGF0YSwgZ3VpbnQg
aW5mbykKLXsKLSAgICBEYXRhT2JqZWN0R3RrKiBkYXRhT2JqZWN0ID0gbV9kcmFnZ2luZ0RhdGFP
YmplY3RzLmdldChjb250ZXh0KTsKLSAgICBpZiAoIWRhdGFPYmplY3QpCi0gICAgICAgIHJldHVy
bjsKLSAgICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT5maWxs
U2VsZWN0aW9uRGF0YShzZWxlY3Rpb25EYXRhLCBpbmZvLCBkYXRhT2JqZWN0KTsKLX0KLQotdm9p
ZCBHdGtEcmFnQW5kRHJvcEhlbHBlcjo6aGFuZGxlRHJhZ0xlYXZlTGF0ZXIoRHJvcHBpbmdDb250
ZXh0KiBjb250ZXh0KQotewotICAgIGF1dG8gaXRlcmF0b3IgPSBtX2Ryb3BwaW5nQ29udGV4dHMu
ZmluZChjb250ZXh0LT5nZGtDb250ZXh0KTsKLSAgICBpZiAoaXRlcmF0b3IgPT0gbV9kcm9wcGlu
Z0NvbnRleHRzLmVuZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBJZiB0aGUgdmlldyBk
b2Vzbid0IGtub3cgYWJvdXQgdGhlIGRyYWcgeWV0ICh0aGVyZSBhcmUgc3RpbGwgcGVuZGluZyBk
YXRhKQotICAgIC8vIHJlcXVlc3RzLCBkb24ndCB1cGRhdGUgaXQgd2l0aCBpbmZvcm1hdGlvbiBh
Ym91dCB0aGUgZHJhZy4KLSAgICBpZiAoY29udGV4dC0+cGVuZGluZ0RhdGFSZXF1ZXN0cykKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uID0gY29udGV4dC0+
bGFzdE1vdGlvblBvc2l0aW9uOwotICAgIERyYWdEYXRhIGRyYWdEYXRhKGNvbnRleHQtPmRhdGFP
YmplY3QuZ2V0KCksIHBvc2l0aW9uLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRXaWRn
ZXRQb2ludFRvU2NyZWVuUG9pbnQobV93aWRnZXQsIHBvc2l0aW9uKSwKLSAgICAgICAgICAgICAg
ICAgICAgICBEcmFnT3BlcmF0aW9uTm9uZSk7Ci0gICAgY29udGV4dC0+ZXhpdGVkQ2FsbGJhY2so
bV93aWRnZXQsIGRyYWdEYXRhLCBjb250ZXh0LT5kcm9wSGFwcGVuZWQpOwotCi0gICAgbV9kcm9w
cGluZ0NvbnRleHRzLnJlbW92ZShpdGVyYXRvcik7Ci19Ci0KLXZvaWQgR3RrRHJhZ0FuZERyb3BI
ZWxwZXI6OmhhbmRsZURyYWdMZWF2ZShHZGtEcmFnQ29udGV4dCogZ2RrQ29udGV4dCwgRHJhZ0V4
aXRlZENhbGxiYWNrIGV4aXRlZENhbGxiYWNrKQotewotICAgIERyb3BwaW5nQ29udGV4dCogY29u
dGV4dCA9IG1fZHJvcHBpbmdDb250ZXh0cy5nZXQoZ2RrQ29udGV4dCk7Ci0gICAgaWYgKCFjb250
ZXh0KQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBEdXJpbmcgYSBkcm9wIEdUSysgd2lsbCBm
aXJlIGEgZHJhZy1sZWF2ZSBzaWduYWwgcmlnaHQgYmVmb3JlIGZpcmluZwotICAgIC8vIHRoZSBk
cmFnLWRyb3Agc2lnbmFsLiBXZSB3YW50IHRoZSBhY3Rpb25zIGZvciBkcmFnLWxlYXZlIHRvIGhh
cHBlbiBhZnRlcgotICAgIC8vIHRob3NlIGZvciBkcmFnLWRyb3AsIHNvIHNjaGVkdWxlIHRoZW0g
dG8gaGFwcGVuIGFzeW5jaHJvbm91c2x5IGhlcmUuCi0gICAgY29udGV4dC0+ZXhpdGVkQ2FsbGJh
Y2sgPSBleGl0ZWRDYWxsYmFjazsKLSAgICBHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlQW5kRGVs
ZXRlT25EZXN0cm95KCJbV2ViS2l0XSBoYW5kbGVEcmFnTGVhdmVMYXRlciIsIHN0ZDo6ZnVuY3Rp
b248dm9pZCgpPihzdGQ6OmJpbmQoJkd0a0RyYWdBbmREcm9wSGVscGVyOjpoYW5kbGVEcmFnTGVh
dmVMYXRlciwgdGhpcywgY29udGV4dCkpKTsKLX0KLQotc3RhdGljIHZvaWQgcXVlcnlOZXdEcm9w
Q29udGV4dERhdGEoRHJvcHBpbmdDb250ZXh0KiBkcm9wQ29udGV4dCwgR3RrV2lkZ2V0KiB3aWRn
ZXQsIGd1aW50IHRpbWUpCi17Ci0gICAgR2RrRHJhZ0NvbnRleHQqIGdka0NvbnRleHQgPSBkcm9w
Q29udGV4dC0+Z2RrQ29udGV4dDsKLSAgICBWZWN0b3I8R2RrQXRvbT4gYWNjZXB0YWJsZVRhcmdl
dHMoUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+ZHJvcEF0b21z
Rm9yQ29udGV4dCh3aWRnZXQsIGdka0NvbnRleHQpKTsKLSAgICBkcm9wQ29udGV4dC0+cGVuZGlu
Z0RhdGFSZXF1ZXN0cyA9IGFjY2VwdGFibGVUYXJnZXRzLnNpemUoKTsKLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGFjY2VwdGFibGVUYXJnZXRzLnNpemUoKTsgaSsrKQotICAgICAgICBndGtf
ZHJhZ19nZXRfZGF0YSh3aWRnZXQsIGdka0NvbnRleHQsIGFjY2VwdGFibGVUYXJnZXRzLmF0KGkp
LCB0aW1lKTsKLX0KLQotRGF0YU9iamVjdEd0ayogR3RrRHJhZ0FuZERyb3BIZWxwZXI6OmhhbmRs
ZURyYWdNb3Rpb24oR2RrRHJhZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFBvaW50JiBwb3Np
dGlvbiwgdW5zaWduZWQgdGltZSkKLXsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8RHJvcHBpbmdDb250
ZXh0PiYgZHJvcHBpbmdDb250ZXh0ID0gbV9kcm9wcGluZ0NvbnRleHRzLmFkZChjb250ZXh0LCBu
dWxscHRyKS5pdGVyYXRvci0+dmFsdWU7Ci0gICAgaWYgKCFkcm9wcGluZ0NvbnRleHQpIHsKLSAg
ICAgICAgZHJvcHBpbmdDb250ZXh0ID0gc3RkOjptYWtlX3VuaXF1ZTxEcm9wcGluZ0NvbnRleHQ+
KGNvbnRleHQsIHBvc2l0aW9uKTsKLSAgICAgICAgcXVlcnlOZXdEcm9wQ29udGV4dERhdGEoZHJv
cHBpbmdDb250ZXh0LmdldCgpLCBtX3dpZGdldCwgdGltZSk7Ci0gICAgfSBlbHNlCi0gICAgICAg
IGRyb3BwaW5nQ29udGV4dC0+bGFzdE1vdGlvblBvc2l0aW9uID0gcG9zaXRpb247Ci0KLSAgICAv
LyBEb24ndCBzZW5kIGFueSBkcmFnIGluZm9ybWF0aW9uIHRvIFdlYkNvcmUgdW50aWwgd2UndmUg
cmV0cmlldmVkIGFsbAotICAgIC8vIHRoZSBkYXRhIGZvciB0aGlzIGRyYWcgb3BlcmF0aW9uLiBP
dGhlcndpc2Ugd2UnZCBoYXZlIHRvIGJsb2NrIHRvIHdhaXQKLSAgICAvLyBmb3IgdGhlIGRyYWcn
cyBkYXRhLgotICAgIGlmIChkcm9wcGluZ0NvbnRleHQtPnBlbmRpbmdEYXRhUmVxdWVzdHMgPiAw
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBkcm9wcGluZ0NvbnRleHQt
PmRhdGFPYmplY3QuZ2V0KCk7Ci19Ci0KLURhdGFPYmplY3RHdGsqIEd0a0RyYWdBbmREcm9wSGVs
cGVyOjpoYW5kbGVEcmFnRGF0YVJlY2VpdmVkKEdka0RyYWdDb250ZXh0KiBjb250ZXh0LCBHdGtT
ZWxlY3Rpb25EYXRhKiBzZWxlY3Rpb25EYXRhLCB1bnNpZ25lZCBpbmZvLCBJbnRQb2ludCYgcG9z
aXRpb24pCi17Ci0gICAgRHJvcHBpbmdDb250ZXh0KiBkcm9wcGluZ0NvbnRleHQgPSBtX2Ryb3Bw
aW5nQ29udGV4dHMuZ2V0KGNvbnRleHQpOwotICAgIGlmICghZHJvcHBpbmdDb250ZXh0KQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGRyb3BwaW5nQ29udGV4dC0+cGVuZGluZ0RhdGFS
ZXF1ZXN0cy0tOwotICAgIFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVy
KCktPmZpbGxEYXRhT2JqZWN0RnJvbURyb3BEYXRhKHNlbGVjdGlvbkRhdGEsIGluZm8sIGRyb3Bw
aW5nQ29udGV4dC0+ZGF0YU9iamVjdC5nZXQoKSk7Ci0KLSAgICBpZiAoZHJvcHBpbmdDb250ZXh0
LT5wZW5kaW5nRGF0YVJlcXVlc3RzKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIC8v
IFRoZSBjb29yZGluYXRlcyBwYXNzZWQgdG8gZHJhZy1kYXRhLXJlY2VpdmVkIHNpZ25hbCBhcmUg
c29tZXRpbWVzCi0gICAgLy8gaW5hY2N1cmF0ZSBpbiBEUlQsIHNvIHVzZSB0aGUgY29vcmRpbmF0
ZXMgb2YgdGhlIGxhc3QgbW90aW9uIGV2ZW50LgotICAgIHBvc2l0aW9uID0gZHJvcHBpbmdDb250
ZXh0LT5sYXN0TW90aW9uUG9zaXRpb247Ci0KLSAgICAvLyBJZiB0aGVyZSBhcmUgbm8gbW9yZSBw
ZW5kaW5nIHJlcXVlc3RzLCBzdGFydCBzZW5kaW5nIGRyYWdnaW5nIGRhdGEgdG8gV2ViQ29yZS4K
LSAgICByZXR1cm4gZHJvcHBpbmdDb250ZXh0LT5kYXRhT2JqZWN0LmdldCgpOwotfQotCi1EYXRh
T2JqZWN0R3RrKiBHdGtEcmFnQW5kRHJvcEhlbHBlcjo6aGFuZGxlRHJhZ0Ryb3AoR2RrRHJhZ0Nv
bnRleHQqIGNvbnRleHQpCi17Ci0gICAgRHJvcHBpbmdDb250ZXh0KiBkcm9wcGluZ0NvbnRleHQg
PSBtX2Ryb3BwaW5nQ29udGV4dHMuZ2V0KGNvbnRleHQpOwotICAgIGlmICghZHJvcHBpbmdDb250
ZXh0KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGRyb3BwaW5nQ29udGV4dC0+ZHJv
cEhhcHBlbmVkID0gdHJ1ZTsKLQotICAgIHJldHVybiBkcm9wcGluZ0NvbnRleHQtPmRhdGFPYmpl
Y3QuZ2V0KCk7Ci19Ci0KLXZvaWQgR3RrRHJhZ0FuZERyb3BIZWxwZXI6OnN0YXJ0ZWREcmFnKEdk
a0RyYWdDb250ZXh0KiBjb250ZXh0LCBEYXRhT2JqZWN0R3RrKiBkYXRhT2JqZWN0KQotewotICAg
IG1fZHJhZ2dpbmdEYXRhT2JqZWN0cy5zZXQoY29udGV4dCwgZGF0YU9iamVjdCk7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9HdGtEcmFnQW5kRHJvcEhlbHBlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L0d0a0RyYWdBbmREcm9wSGVscGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4
YzZmMjcuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0RyYWdB
bmREcm9wSGVscGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDExLCBJZ2FsaWEgUy5MLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQot
ICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgot
ICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3Qs
IHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0g
Ki8KLQotI2lmbmRlZiBHdGtEcmFnQW5kRHJvcEhlbHBlcl9oCi0jZGVmaW5lIEd0a0RyYWdBbmRE
cm9wSGVscGVyX2gKLQotI2luY2x1ZGUgIkRhdGFPYmplY3RHdGsuaCIKLSNpbmNsdWRlIDx3dGYv
RmFzdE1hbGxvYy5oPgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLXN0cnVjdCBEcm9wcGluZ0NvbnRleHQ7Ci1jbGFzcyBEcmFnRGF0YTsKLWNs
YXNzIEludFBvaW50OwotCi10eXBlZGVmIHZvaWQgKCpEcmFnRXhpdGVkQ2FsbGJhY2spKEd0a1dp
ZGdldCosIERyYWdEYXRhJiwgYm9vbCBkcm9wSGFwcGVuZWQpOwotCi1jbGFzcyBHdGtEcmFnQW5k
RHJvcEhlbHBlciB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoR3RrRHJhZ0FuZERyb3BIZWxw
ZXIpOwotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotCi1wdWJsaWM6Ci0gICAgR3RrRHJh
Z0FuZERyb3BIZWxwZXIoKTsKLSAgICB+R3RrRHJhZ0FuZERyb3BIZWxwZXIoKTsKLQotICAgIHZv
aWQgc2V0V2lkZ2V0KEd0a1dpZGdldCogd2lkZ2V0KSB7IG1fd2lkZ2V0ID0gd2lkZ2V0OyB9Ci0g
ICAgYm9vbCBoYW5kbGVEcmFnRW5kKEdka0RyYWdDb250ZXh0Kik7Ci0gICAgdm9pZCBoYW5kbGVH
ZXREcmFnRGF0YShHZGtEcmFnQ29udGV4dCosIEd0a1NlbGVjdGlvbkRhdGEqLCBndWludCBpbmZv
KTsKLSAgICB2b2lkIGhhbmRsZURyYWdMZWF2ZShHZGtEcmFnQ29udGV4dCosIERyYWdFeGl0ZWRD
YWxsYmFjayk7Ci0gICAgdm9pZCBoYW5kbGVEcmFnTGVhdmVMYXRlcihEcm9wcGluZ0NvbnRleHQq
KTsKLSAgICBEYXRhT2JqZWN0R3RrKiBoYW5kbGVEcmFnTW90aW9uKEdka0RyYWdDb250ZXh0Kiwg
Y29uc3QgSW50UG9pbnQmLCB1bnNpZ25lZCB0aW1lKTsKLSAgICBEYXRhT2JqZWN0R3RrKiBoYW5k
bGVEcmFnRGF0YVJlY2VpdmVkKEdka0RyYWdDb250ZXh0KiwgR3RrU2VsZWN0aW9uRGF0YSosIHVu
c2lnbmVkIGluZm8sIEludFBvaW50Jik7Ci0gICAgRGF0YU9iamVjdEd0ayogaGFuZGxlRHJhZ0Ry
b3AoR2RrRHJhZ0NvbnRleHQqKTsKLSAgICB2b2lkIHN0YXJ0ZWREcmFnKEdka0RyYWdDb250ZXh0
KiwgRGF0YU9iamVjdEd0ayopOwotCi1wcml2YXRlOgotICAgIEd0a1dpZGdldCogbV93aWRnZXQ7
Ci0gICAgSGFzaE1hcDxHZGtEcmFnQ29udGV4dCosIHN0ZDo6dW5pcXVlX3B0cjxEcm9wcGluZ0Nv
bnRleHQ+PiBtX2Ryb3BwaW5nQ29udGV4dHM7Ci0gICAgSGFzaE1hcDxHZGtEcmFnQ29udGV4dCos
IFJlZlB0cjxEYXRhT2JqZWN0R3RrPj4gbV9kcmFnZ2luZ0RhdGFPYmplY3RzOwotfTsKLQotfQot
Ci0jZW5kaWYgLy8gRGF0YU9iamVjdEd0a19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggN2YwZTRhOS4uOWZiNDI4
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDMxIEBACiAyMDE0LTEwLTA0ICBDYXJsb3MgR2FyY2lh
IENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAorICAgICAgICBbR1RLXSBNZXJnZSBHdGtE
cmFnQW5kRHJvcEhlbHBlciBpbnRvIFdlYktpdFdlYlZpZXdCYXNlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzc0MjIKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWJLaXRXZWJWaWV3QmFzZSBpcyBjdXJy
ZW50bHkgdGhlIG9ubHkgdXNlciBvZgorICAgICAgICBHdGtEcmFnQW5kRHJvcEhlbHBlciwgdGhh
dCB3YXMgYWRkZWQgdG8gc2hhcmUgdGhlIGNvZGUgd2l0aAorICAgICAgICBXZWJLaXQxLiBUaGlz
IHJlbW92ZXMgYW5vdGhlciBmaWxlIGluIHBsYXRmb3JtIHRoYXQgaXMgYnVpbHQgdHdpY2UKKyAg
ICAgICAgZm9yIHRoZSBwbHVnaW4gcHJvY2Vzcy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcDoKKyAgICAgICAgKERyb3BwaW5nQ29udGV4dDo6RHJv
cHBpbmdDb250ZXh0KToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlQ29uc3RydWN0ZWQpOgor
ICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VEcmFnRGF0YUdldCk6CisgICAgICAgICh3ZWJraXRX
ZWJWaWV3QmFzZURyYWdFbmQpOgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VIYW5kbGVEcmFn
RGF0YVJlY2VpdmVkKToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlRHJhZ0RhdGFSZWNlaXZl
ZCk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZUhhbmRsZURyYWdNb3Rpb24pOgorICAgICAg
ICAod2Via2l0V2ViVmlld0Jhc2VEcmFnTW90aW9uKToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdC
YXNlRHJhZ0xlYXZlKToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlRHJhZ0Ryb3ApOgorICAg
ICAgICAod2Via2l0V2ViVmlld0Jhc2VTdGFydERyYWcpOgorICAgICAgICAoZHJhZ0V4aXRlZENh
bGxiYWNrKTogRGVsZXRlZC4KKworMjAxNC0xMC0wNCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxj
Z2FyY2lhQGlnYWxpYS5jb20+CisKICAgICAgICAgW0dUS10gVGhlIG5ldyB3ZWIgaW5zcGVjdG9y
IGNhbid0IGJlIGRvY2tlZCBhZ2FpbiBvbmNlIHVuZG9ja2VkCiAgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjE1NDQKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwCmluZGV4IGM5
MjhhOGMuLmRhNGJjMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAKQEAgLTU0LDcgKzU0LDYgQEAKICNpbmNsdWRl
IDxXZWJDb3JlL0RyYWdJY29uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9HVW5pcXVlUHRyR3RrLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9HdGtDbGlja0NvdW50ZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3Jl
L0d0a0RyYWdBbmREcm9wSGVscGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9HdGtUb3VjaENvbnRl
eHRIZWxwZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0d0a1V0aWxpdGllcy5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvR3RrVmVyc2lvbmluZy5oPgpAQCAtOTMsNiArOTIsMjQgQEAgdHlwZWRlZiBIYXNo
TWFwPEd0a1dpZGdldCosIEludFJlY3Q+IFdlYktpdFdlYlZpZXdDaGlsZHJlbk1hcDsKIHZvaWQg
cmVkaXJlY3RlZFdpbmRvd0RhbWFnZWRDYWxsYmFjayh2b2lkKiBkYXRhKTsKICNlbmRpZgogCisj
aWYgRU5BQkxFKERSQUdfU1VQUE9SVCkKK3N0cnVjdCBEcm9wcGluZ0NvbnRleHQgeworICAgIERy
b3BwaW5nQ29udGV4dChHZGtEcmFnQ29udGV4dCogZ2RrQ29udGV4dCwgY29uc3QgSW50UG9pbnQm
IHBvc2l0aW9uKQorICAgICAgICA6IGdka0NvbnRleHQoZ2RrQ29udGV4dCkKKyAgICAgICAgLCBk
YXRhT2JqZWN0KERhdGFPYmplY3RHdGs6OmNyZWF0ZSgpKQorICAgICAgICAsIGxhc3RNb3Rpb25Q
b3NpdGlvbihwb3NpdGlvbikKKyAgICAgICAgLCBkcm9wSGFwcGVuZWQoZmFsc2UpCisgICAgewor
ICAgIH0KKworICAgIEdka0RyYWdDb250ZXh0KiBnZGtDb250ZXh0OworICAgIFJlZlB0cjxEYXRh
T2JqZWN0R3RrPiBkYXRhT2JqZWN0OworICAgIEludFBvaW50IGxhc3RNb3Rpb25Qb3NpdGlvbjsK
KyAgICB1bnNpZ25lZCBwZW5kaW5nRGF0YVJlcXVlc3RzOworICAgIGJvb2wgZHJvcEhhcHBlbmVk
OworfTsKKyNlbmRpZgorCiBzdHJ1Y3QgX1dlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZSB7CiAgICAg
V2ViS2l0V2ViVmlld0NoaWxkcmVuTWFwIGNoaWxkcmVuOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxQ
YWdlQ2xpZW50SW1wbD4gcGFnZUNsaWVudDsKQEAgLTEwMSw4ICsxMTgsNiBAQCBzdHJ1Y3QgX1dl
YktpdFdlYlZpZXdCYXNlUHJpdmF0ZSB7CiAgICAgR3RrQ2xpY2tDb3VudGVyIGNsaWNrQ291bnRl
cjsKICAgICBDU3RyaW5nIHRvb2x0aXBUZXh0OwogICAgIEludFJlY3QgdG9vbHRpcEFyZWE7Ci0g
ICAgR3RrRHJhZ0FuZERyb3BIZWxwZXIgZHJhZ0FuZERyb3BIZWxwZXI7Ci0gICAgRHJhZ0ljb24g
ZHJhZ0ljb247CiAjaWYgIUdUS19DSEVDS19WRVJTSU9OKDMsIDEzLCA0KQogICAgIEludFNpemUg
cmVzaXplclNpemU7CiAjZW5kaWYKQEAgLTE0MSw2ICsxNTYsMTIgQEAgc3RydWN0IF9XZWJLaXRX
ZWJWaWV3QmFzZVByaXZhdGUgewogI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkgJiYgUExBVEZP
Uk0oWDExKQogICAgIE93blB0cjxSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdz4gcmVkaXJlY3Rl
ZFdpbmRvdzsKICNlbmRpZgorCisjaWYgRU5BQkxFKERSQUdfU1VQUE9SVCkKKyAgICBEcmFnSWNv
biBkcmFnSWNvbjsKKyAgICBIYXNoTWFwPEdka0RyYWdDb250ZXh0Kiwgc3RkOjp1bmlxdWVfcHRy
PERyb3BwaW5nQ29udGV4dD4+IGRyb3BwaW5nQ29udGV4dHM7CisgICAgSGFzaE1hcDxHZGtEcmFn
Q29udGV4dCosIFJlZlB0cjxEYXRhT2JqZWN0R3RrPj4gZHJhZ2dpbmdEYXRhT2JqZWN0czsKKyNl
bmRpZgogfTsKIAogV0VCS0lUX0RFRklORV9UWVBFKFdlYktpdFdlYlZpZXdCYXNlLCB3ZWJraXRf
d2ViX3ZpZXdfYmFzZSwgR1RLX1RZUEVfQ09OVEFJTkVSKQpAQCAtNDE3LDEzICs0MzgsMTIgQEAg
c3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VDb25zdHJ1Y3RlZChHT2JqZWN0KiBvYmplY3Qp
CiAKICAgICBHdGtXaWRnZXQqIHZpZXdXaWRnZXQgPSBHVEtfV0lER0VUKG9iamVjdCk7CiAgICAg
Z3RrX3dpZGdldF9zZXRfY2FuX2ZvY3VzKHZpZXdXaWRnZXQsIFRSVUUpOwotICAgIGd0a19kcmFn
X2Rlc3Rfc2V0KHZpZXdXaWRnZXQsIHN0YXRpY19jYXN0PEd0a0Rlc3REZWZhdWx0cz4oMCksIDAs
IDAsCi0gICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8R2RrRHJhZ0FjdGlvbj4oR0RL
X0FDVElPTl9DT1BZIHwgR0RLX0FDVElPTl9NT1ZFIHwgR0RLX0FDVElPTl9MSU5LIHwgR0RLX0FD
VElPTl9QUklWQVRFKSk7CisgICAgZ3RrX2RyYWdfZGVzdF9zZXQodmlld1dpZGdldCwgc3RhdGlj
X2Nhc3Q8R3RrRGVzdERlZmF1bHRzPigwKSwgbnVsbHB0ciwgMCwKKyAgICAgICAgc3RhdGljX2Nh
c3Q8R2RrRHJhZ0FjdGlvbj4oR0RLX0FDVElPTl9DT1BZIHwgR0RLX0FDVElPTl9NT1ZFIHwgR0RL
X0FDVElPTl9MSU5LIHwgR0RLX0FDVElPTl9QUklWQVRFKSk7CiAgICAgZ3RrX2RyYWdfZGVzdF9z
ZXRfdGFyZ2V0X2xpc3Qodmlld1dpZGdldCwgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3Rl
Ym9hcmRIZWxwZXIoKS0+dGFyZ2V0TGlzdCgpKTsKIAogICAgIFdlYktpdFdlYlZpZXdCYXNlUHJp
dmF0ZSogcHJpdiA9IFdFQktJVF9XRUJfVklFV19CQVNFKG9iamVjdCktPnByaXY7CiAgICAgcHJp
di0+cGFnZUNsaWVudCA9IFBhZ2VDbGllbnRJbXBsOjpjcmVhdGUodmlld1dpZGdldCk7Ci0gICAg
cHJpdi0+ZHJhZ0FuZERyb3BIZWxwZXIuc2V0V2lkZ2V0KHZpZXdXaWRnZXQpOwogCiAjaWYgVVNF
KFRFWFRVUkVfTUFQUEVSX0dMKSAmJiBQTEFURk9STShYMTEpCiAgICAgR2RrRGlzcGxheSogZGlz
cGxheSA9IGdka19kaXNwbGF5X21hbmFnZXJfZ2V0X2RlZmF1bHRfZGlzcGxheShnZGtfZGlzcGxh
eV9tYW5hZ2VyX2dldCgpKTsKQEAgLTc3NiwyOSArNzk2LDUwIEBAIHN0YXRpYyBnYm9vbGVhbiB3
ZWJraXRXZWJWaWV3QmFzZVF1ZXJ5VG9vbHRpcChHdGtXaWRnZXQqIHdpZGdldCwgZ2ludCAvKiB4
ICovLCBnCiAjaWYgRU5BQkxFKERSQUdfU1VQUE9SVCkKIHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZp
ZXdCYXNlRHJhZ0RhdGFHZXQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0RyYWdDb250ZXh0KiBjb250
ZXh0LCBHdGtTZWxlY3Rpb25EYXRhKiBzZWxlY3Rpb25EYXRhLCBndWludCBpbmZvLCBndWludCAv
KiB0aW1lICovKQogewotICAgIFdFQktJVF9XRUJfVklFV19CQVNFKHdpZGdldCktPnByaXYtPmRy
YWdBbmREcm9wSGVscGVyLmhhbmRsZUdldERyYWdEYXRhKGNvbnRleHQsIHNlbGVjdGlvbkRhdGEs
IGluZm8pOworICAgIFdlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9XRUJf
VklFV19CQVNFKHdpZGdldCktPnByaXY7CisgICAgaWYgKERhdGFPYmplY3RHdGsqIGRhdGFPYmpl
Y3QgPSBwcml2LT5kcmFnZ2luZ0RhdGFPYmplY3RzLmdldChjb250ZXh0KSkKKyAgICAgICAgUGFz
dGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+ZmlsbFNlbGVjdGlvbkRh
dGEoc2VsZWN0aW9uRGF0YSwgaW5mbywgZGF0YU9iamVjdCk7CiB9CiAKIHN0YXRpYyB2b2lkIHdl
YmtpdFdlYlZpZXdCYXNlRHJhZ0VuZChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRHJhZ0NvbnRleHQq
IGNvbnRleHQpCiB7Ci0gICAgV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNlID0gV0VCS0lU
X1dFQl9WSUVXX0JBU0Uod2lkZ2V0KTsKLSAgICBpZiAoIXdlYlZpZXdCYXNlLT5wcml2LT5kcmFn
QW5kRHJvcEhlbHBlci5oYW5kbGVEcmFnRW5kKGNvbnRleHQpKQorICAgIFdlYktpdFdlYlZpZXdC
YXNlUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9XRUJfVklFV19CQVNFKHdpZGdldCktPnByaXY7Cisg
ICAgaWYgKCFwcml2LT5kcmFnZ2luZ0RhdGFPYmplY3RzLnJlbW92ZShjb250ZXh0KSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgR2RrRGV2aWNlKiBkZXZpY2UgPSBnZGtfZHJhZ19jb250ZXh0X2dl
dF9kZXZpY2UoY29udGV4dCk7CiAgICAgaW50IHggPSAwLCB5ID0gMDsKICAgICBnZGtfZGV2aWNl
X2dldF93aW5kb3dfYXRfcG9zaXRpb24oZGV2aWNlLCAmeCwgJnkpOwogICAgIGludCB4Um9vdCA9
IDAsIHlSb290ID0gMDsKLSAgICBnZGtfZGV2aWNlX2dldF9wb3NpdGlvbihkZXZpY2UsIDAsICZ4
Um9vdCwgJnlSb290KTsKLSAgICB3ZWJWaWV3QmFzZS0+cHJpdi0+cGFnZVByb3h5LT5kcmFnRW5k
ZWQoSW50UG9pbnQoeCwgeSksIEludFBvaW50KHhSb290LCB5Um9vdCksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdka0RyYWdBY3Rpb25Ub0RyYWdPcGVyYXRp
b24oZ2RrX2RyYWdfY29udGV4dF9nZXRfc2VsZWN0ZWRfYWN0aW9uKGNvbnRleHQpKSk7CisgICAg
Z2RrX2RldmljZV9nZXRfcG9zaXRpb24oZGV2aWNlLCBudWxscHRyLCAmeFJvb3QsICZ5Um9vdCk7
CisgICAgcHJpdi0+cGFnZVByb3h5LT5kcmFnRW5kZWQoSW50UG9pbnQoeCwgeSksIEludFBvaW50
KHhSb290LCB5Um9vdCksIGdka0RyYWdBY3Rpb25Ub0RyYWdPcGVyYXRpb24oZ2RrX2RyYWdfY29u
dGV4dF9nZXRfc2VsZWN0ZWRfYWN0aW9uKGNvbnRleHQpKSk7Cit9CisKK3N0YXRpYyBEYXRhT2Jq
ZWN0R3RrKiB3ZWJraXRXZWJWaWV3QmFzZUhhbmRsZURyYWdEYXRhUmVjZWl2ZWQoV2ViS2l0V2Vi
Vmlld0Jhc2UqIHdlYlZpZXdCYXNlLCBHZGtEcmFnQ29udGV4dCogY29udGV4dCwgR3RrU2VsZWN0
aW9uRGF0YSogc2VsZWN0aW9uRGF0YSwgZ3VpbnQgaW5mbywgSW50UG9pbnQmIHBvc2l0aW9uKQor
eworICAgIFdlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZSogcHJpdiA9IHdlYlZpZXdCYXNlLT5wcml2
OworICAgIERyb3BwaW5nQ29udGV4dCogZHJvcHBpbmdDb250ZXh0ID0gcHJpdi0+ZHJvcHBpbmdD
b250ZXh0cy5nZXQoY29udGV4dCk7CisgICAgaWYgKCFkcm9wcGluZ0NvbnRleHQpCisgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgZHJvcHBpbmdDb250ZXh0LT5wZW5kaW5nRGF0YVJlcXVl
c3RzLS07CisgICAgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+
ZmlsbERhdGFPYmplY3RGcm9tRHJvcERhdGEoc2VsZWN0aW9uRGF0YSwgaW5mbywgZHJvcHBpbmdD
b250ZXh0LT5kYXRhT2JqZWN0LmdldCgpKTsKKyAgICBpZiAoZHJvcHBpbmdDb250ZXh0LT5wZW5k
aW5nRGF0YVJlcXVlc3RzKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIC8vIFRoZSBj
b29yZGluYXRlcyBwYXNzZWQgdG8gZHJhZy1kYXRhLXJlY2VpdmVkIHNpZ25hbCBhcmUgc29tZXRp
bWVzCisgICAgLy8gaW5hY2N1cmF0ZSBpbiBXVFIsIHNvIHVzZSB0aGUgY29vcmRpbmF0ZXMgb2Yg
dGhlIGxhc3QgbW90aW9uIGV2ZW50LgorICAgIHBvc2l0aW9uID0gZHJvcHBpbmdDb250ZXh0LT5s
YXN0TW90aW9uUG9zaXRpb247CisKKyAgICAvLyBJZiB0aGVyZSBhcmUgbm8gbW9yZSBwZW5kaW5n
IHJlcXVlc3RzLCBzdGFydCBzZW5kaW5nIGRyYWdnaW5nIGRhdGEgdG8gV2ViQ29yZS4KKyAgICBy
ZXR1cm4gZHJvcHBpbmdDb250ZXh0LT5kYXRhT2JqZWN0LmdldCgpOwogfQogCiBzdGF0aWMgdm9p
ZCB3ZWJraXRXZWJWaWV3QmFzZURyYWdEYXRhUmVjZWl2ZWQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdk
a0RyYWdDb250ZXh0KiBjb250ZXh0LCBnaW50IC8qIHggKi8sIGdpbnQgLyogeSAqLywgR3RrU2Vs
ZWN0aW9uRGF0YSogc2VsZWN0aW9uRGF0YSwgZ3VpbnQgaW5mbywgZ3VpbnQgdGltZSkKIHsKICAg
ICBXZWJLaXRXZWJWaWV3QmFzZSogd2ViVmlld0Jhc2UgPSBXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3
aWRnZXQpOwogICAgIEludFBvaW50IHBvc2l0aW9uOwotICAgIERhdGFPYmplY3RHdGsqIGRhdGFP
YmplY3QgPSB3ZWJWaWV3QmFzZS0+cHJpdi0+ZHJhZ0FuZERyb3BIZWxwZXIuaGFuZGxlRHJhZ0Rh
dGFSZWNlaXZlZChjb250ZXh0LCBzZWxlY3Rpb25EYXRhLCBpbmZvLCBwb3NpdGlvbik7CisgICAg
RGF0YU9iamVjdEd0ayogZGF0YU9iamVjdCA9IHdlYmtpdFdlYlZpZXdCYXNlSGFuZGxlRHJhZ0Rh
dGFSZWNlaXZlZCh3ZWJWaWV3QmFzZSwgY29udGV4dCwgc2VsZWN0aW9uRGF0YSwgaW5mbywgcG9z
aXRpb24pOwogICAgIGlmICghZGF0YU9iamVjdCkKICAgICAgICAgcmV0dXJuOwogCkBAIC04Mzks
MTEgKzg4MCwzMiBAQCBzdGF0aWMgQXRrT2JqZWN0KiB3ZWJraXRXZWJWaWV3QmFzZUdldEFjY2Vz
c2libGUoR3RrV2lkZ2V0KiB3aWRnZXQpCiB9CiAKICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQor
c3RhdGljIERhdGFPYmplY3RHdGsqIHdlYmtpdFdlYlZpZXdCYXNlSGFuZGxlRHJhZ01vdGlvbihX
ZWJLaXRXZWJWaWV3QmFzZSogd2ViVmlld0Jhc2UsIEdka0RyYWdDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBJbnRQb2ludCYgcG9zaXRpb24sIHVuc2lnbmVkIHRpbWUpCit7CisgICAgV2ViS2l0V2Vi
Vmlld0Jhc2VQcml2YXRlKiBwcml2ID0gd2ViVmlld0Jhc2UtPnByaXY7CisgICAgc3RkOjp1bmlx
dWVfcHRyPERyb3BwaW5nQ29udGV4dD4mIGRyb3BwaW5nQ29udGV4dCA9IHByaXYtPmRyb3BwaW5n
Q29udGV4dHMuYWRkKGNvbnRleHQsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKKyAgICBpZiAo
IWRyb3BwaW5nQ29udGV4dCkgeworICAgICAgICBkcm9wcGluZ0NvbnRleHQgPSBzdGQ6Om1ha2Vf
dW5pcXVlPERyb3BwaW5nQ29udGV4dD4oY29udGV4dCwgcG9zaXRpb24pOworICAgICAgICBWZWN0
b3I8R2RrQXRvbT4gYWNjZXB0YWJsZVRhcmdldHMoUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBh
c3RlYm9hcmRIZWxwZXIoKS0+ZHJvcEF0b21zRm9yQ29udGV4dChHVEtfV0lER0VUKHdlYlZpZXdC
YXNlKSwgZHJvcHBpbmdDb250ZXh0LT5nZGtDb250ZXh0KSk7CisgICAgICAgIGRyb3BwaW5nQ29u
dGV4dC0+cGVuZGluZ0RhdGFSZXF1ZXN0cyA9IGFjY2VwdGFibGVUYXJnZXRzLnNpemUoKTsKKyAg
ICAgICAgZm9yIChhdXRvJiB0YXJnZXQgOiBhY2NlcHRhYmxlVGFyZ2V0cykKKyAgICAgICAgICAg
IGd0a19kcmFnX2dldF9kYXRhKEdUS19XSURHRVQod2ViVmlld0Jhc2UpLCBkcm9wcGluZ0NvbnRl
eHQtPmdka0NvbnRleHQsIHRhcmdldCwgdGltZSk7CisgICAgfSBlbHNlCisgICAgICAgIGRyb3Bw
aW5nQ29udGV4dC0+bGFzdE1vdGlvblBvc2l0aW9uID0gcG9zaXRpb247CisKKyAgICAvLyBEb24n
dCBzZW5kIGFueSBkcmFnIGluZm9ybWF0aW9uIHRvIFdlYkNvcmUgdW50aWwgd2UndmUgcmV0cmll
dmVkIGFsbCB0aGUgZGF0YSBmb3IgdGhpcyBkcmFnIG9wZXJhdGlvbi4KKyAgICAvLyBPdGhlcndp
c2Ugd2UnZCBoYXZlIHRvIGJsb2NrIHRvIHdhaXQgZm9yIHRoZSBkcmFnJ3MgZGF0YS4KKyAgICBp
ZiAoZHJvcHBpbmdDb250ZXh0LT5wZW5kaW5nRGF0YVJlcXVlc3RzID4gMCkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gZHJvcHBpbmdDb250ZXh0LT5kYXRhT2JqZWN0Lmdl
dCgpOworfQorCiBzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0V2ViVmlld0Jhc2VEcmFnTW90aW9uKEd0
a1dpZGdldCogd2lkZ2V0LCBHZGtEcmFnQ29udGV4dCogY29udGV4dCwgZ2ludCB4LCBnaW50IHks
IGd1aW50IHRpbWUpCiB7CiAgICAgV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNlID0gV0VC
S0lUX1dFQl9WSUVXX0JBU0Uod2lkZ2V0KTsKICAgICBJbnRQb2ludCBwb3NpdGlvbih4LCB5KTsK
LSAgICBEYXRhT2JqZWN0R3RrKiBkYXRhT2JqZWN0ID0gd2ViVmlld0Jhc2UtPnByaXYtPmRyYWdB
bmREcm9wSGVscGVyLmhhbmRsZURyYWdNb3Rpb24oY29udGV4dCwgcG9zaXRpb24sIHRpbWUpOwor
ICAgIERhdGFPYmplY3RHdGsqIGRhdGFPYmplY3QgPSB3ZWJraXRXZWJWaWV3QmFzZUhhbmRsZURy
YWdNb3Rpb24od2ViVmlld0Jhc2UsIGNvbnRleHQsIHBvc2l0aW9uLCB0aW1lKTsKICAgICBpZiAo
IWRhdGFPYmplY3QpCiAgICAgICAgIHJldHVybiBUUlVFOwogCkBAIC04NTQsMjcgKzkxNiw0OSBA
QCBzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0V2ViVmlld0Jhc2VEcmFnTW90aW9uKEd0a1dpZGdldCog
d2lkZ2V0LCBHZGtEcmFnQ29udGV4dCogYwogICAgIHJldHVybiBUUlVFOwogfQogCi1zdGF0aWMg
dm9pZCBkcmFnRXhpdGVkQ2FsbGJhY2soR3RrV2lkZ2V0KiB3aWRnZXQsIERyYWdEYXRhJiBkcmFn
RGF0YSwgYm9vbCBkcm9wSGFwcGVuZWQpCitzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZURy
YWdMZWF2ZShHdGtXaWRnZXQqIHdpZGdldCwgR2RrRHJhZ0NvbnRleHQqIGdka0NvbnRleHQsIGd1
aW50IC8qIHRpbWUgKi8pCiB7Ci0gICAgLy8gRG9uJ3QgY2FsbCBkcmFnRXhpdGVkIGlmIHdlIGhh
dmUganVzdCByZWNlaXZlZCBhIGRyYWctZHJvcCBzaWduYWwuIFRoaXMKLSAgICAvLyBoYXBwZW5z
IGluIHRoZSBjYXNlIG9mIGEgc3VjY2Vzc2Z1bCBkcm9wIG9udG8gdGhlIHZpZXcuCi0gICAgaWYg
KGRyb3BIYXBwZW5lZCkKKyAgICBXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUqIHByaXYgPSBXRUJL
SVRfV0VCX1ZJRVdfQkFTRSh3aWRnZXQpLT5wcml2OworICAgIERyb3BwaW5nQ29udGV4dCogY29u
dGV4dCA9IHByaXYtPmRyb3BwaW5nQ29udGV4dHMuZ2V0KGdka0NvbnRleHQpOworICAgIGlmICgh
Y29udGV4dCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZp
ZXdCYXNlID0gV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2lkZ2V0KTsKLSAgICB3ZWJWaWV3QmFzZS0+
cHJpdi0+cGFnZVByb3h5LT5kcmFnRXhpdGVkKGRyYWdEYXRhKTsKLSAgICB3ZWJWaWV3QmFzZS0+
cHJpdi0+cGFnZVByb3h5LT5yZXNldEN1cnJlbnREcmFnSW5mb3JtYXRpb24oKTsKLX0KKyAgICAv
LyBEdXJpbmcgYSBkcm9wIEdUSysgd2lsbCBmaXJlIGEgZHJhZy1sZWF2ZSBzaWduYWwgcmlnaHQg
YmVmb3JlIGZpcmluZworICAgIC8vIHRoZSBkcmFnLWRyb3Agc2lnbmFsLiBXZSB3YW50IHRoZSBh
Y3Rpb25zIGZvciBkcmFnLWxlYXZlIHRvIGhhcHBlbiBhZnRlcgorICAgIC8vIHRob3NlIGZvciBk
cmFnLWRyb3AsIHNvIHNjaGVkdWxlIHRoZW0gdG8gaGFwcGVuIGFzeW5jaHJvbm91c2x5IGhlcmUu
CisgICAgR01haW5Mb29wU291cmNlOjpzY2hlZHVsZUFuZERlbGV0ZU9uRGVzdHJveSgiW1dlYktp
dF0gaGFuZGxlRHJhZ0xlYXZlTGF0ZXIiLCBbPV0oKSB7CisgICAgICAgIGF1dG8gaXQgPSBwcml2
LT5kcm9wcGluZ0NvbnRleHRzLmZpbmQoY29udGV4dC0+Z2RrQ29udGV4dCk7CisgICAgICAgIGlm
IChpdCA9PSBwcml2LT5kcm9wcGluZ0NvbnRleHRzLmVuZCgpKQorICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIC8vIElmIHRoZSB2aWV3IGRvZXNuJ3Qga25vdyBhYm91dCB0aGUgZHJhZyB5
ZXQgKHRoZXJlIGFyZSBzdGlsbCBwZW5kaW5nIGRhdGEgcmVxdWVzdHMpLAorICAgICAgICAvLyBk
b24ndCB1cGRhdGUgaXQgd2l0aCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZHJhZy4KKyAgICAgICAg
aWYgKGNvbnRleHQtPnBlbmRpbmdEYXRhUmVxdWVzdHMpCisgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgaWYgKCFjb250ZXh0LT5kcm9wSGFwcGVuZWQpIHsKKyAgICAgICAgICAgIC8vIERv
bid0IGNhbGwgZHJhZ0V4aXRlZCBpZiB3ZSBoYXZlIGp1c3QgcmVjZWl2ZWQgYSBkcmFnLWRyb3Ag
c2lnbmFsLiBUaGlzCisgICAgICAgICAgICAvLyBoYXBwZW5zIGluIHRoZSBjYXNlIG9mIGEgc3Vj
Y2Vzc2Z1bCBkcm9wIG9udG8gdGhlIHZpZXcuCisgICAgICAgICAgICBjb25zdCBJbnRQb2ludCYg
cG9zaXRpb24gPSBjb250ZXh0LT5sYXN0TW90aW9uUG9zaXRpb247CisgICAgICAgICAgICBEcmFn
RGF0YSBkcmFnRGF0YShjb250ZXh0LT5kYXRhT2JqZWN0LmdldCgpLCBwb3NpdGlvbiwgY29udmVy
dFdpZGdldFBvaW50VG9TY3JlZW5Qb2ludCh3aWRnZXQsIHBvc2l0aW9uKSwgRHJhZ09wZXJhdGlv
bk5vbmUpOworICAgICAgICAgICAgcHJpdi0+cGFnZVByb3h5LT5kcmFnRXhpdGVkKGRyYWdEYXRh
KTsKKyAgICAgICAgICAgIHByaXYtPnBhZ2VQcm94eS0+cmVzZXRDdXJyZW50RHJhZ0luZm9ybWF0
aW9uKCk7CisgICAgICAgIH0KIAotc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VEcmFnTGVh
dmUoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0RyYWdDb250ZXh0KiBjb250ZXh0LCBndWludCAvKiB0
aW1lICovKQotewotICAgIFdFQktJVF9XRUJfVklFV19CQVNFKHdpZGdldCktPnByaXYtPmRyYWdB
bmREcm9wSGVscGVyLmhhbmRsZURyYWdMZWF2ZShjb250ZXh0LCBkcmFnRXhpdGVkQ2FsbGJhY2sp
OworICAgICAgICBwcml2LT5kcm9wcGluZ0NvbnRleHRzLnJlbW92ZShpdCk7CisgICAgfSk7CiB9
CiAKIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRXZWJWaWV3QmFzZURyYWdEcm9wKEd0a1dpZGdldCog
d2lkZ2V0LCBHZGtEcmFnQ29udGV4dCogY29udGV4dCwgZ2ludCB4LCBnaW50IHksIGd1aW50IHRp
bWUpCiB7Ci0gICAgV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNlID0gV0VCS0lUX1dFQl9W
SUVXX0JBU0Uod2lkZ2V0KTsKLSAgICBEYXRhT2JqZWN0R3RrKiBkYXRhT2JqZWN0ID0gd2ViVmll
d0Jhc2UtPnByaXYtPmRyYWdBbmREcm9wSGVscGVyLmhhbmRsZURyYWdEcm9wKGNvbnRleHQpOwor
ICAgIFdlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9XRUJfVklFV19CQVNF
KHdpZGdldCktPnByaXY7CisgICAgRHJvcHBpbmdDb250ZXh0KiBkcm9wcGluZ0NvbnRleHQgPSBw
cml2LT5kcm9wcGluZ0NvbnRleHRzLmdldChjb250ZXh0KTsKKyAgICBpZiAoIWRyb3BwaW5nQ29u
dGV4dCkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgZHJvcHBpbmdDb250ZXh0LT5kcm9w
SGFwcGVuZWQgPSB0cnVlOworCisgICAgRGF0YU9iamVjdEd0ayogZGF0YU9iamVjdCA9IGRyb3Bw
aW5nQ29udGV4dC0+ZGF0YU9iamVjdC5nZXQoKTsKICAgICBpZiAoIWRhdGFPYmplY3QpCiAgICAg
ICAgIHJldHVybiBGQUxTRTsKIApAQCAtODgyLDcgKzk2Niw3IEBAIHN0YXRpYyBnYm9vbGVhbiB3
ZWJraXRXZWJWaWV3QmFzZURyYWdEcm9wKEd0a1dpZGdldCogd2lkZ2V0LCBHZGtEcmFnQ29udGV4
dCogY29uCiAgICAgRHJhZ0RhdGEgZHJhZ0RhdGEoZGF0YU9iamVjdCwgcG9zaXRpb24sIGNvbnZl
cnRXaWRnZXRQb2ludFRvU2NyZWVuUG9pbnQod2lkZ2V0LCBwb3NpdGlvbiksIGdka0RyYWdBY3Rp
b25Ub0RyYWdPcGVyYXRpb24oZ2RrX2RyYWdfY29udGV4dF9nZXRfYWN0aW9ucyhjb250ZXh0KSkp
OwogICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBoYW5kbGU7CiAgICAgU2FuZGJveEV4dGVu
c2lvbjo6SGFuZGxlQXJyYXkgc2FuZGJveEV4dGVuc2lvbkZvclVwbG9hZDsKLSAgICB3ZWJWaWV3
QmFzZS0+cHJpdi0+cGFnZVByb3h5LT5wZXJmb3JtRHJhZ09wZXJhdGlvbihkcmFnRGF0YSwgU3Ry
aW5nKCksIGhhbmRsZSwgc2FuZGJveEV4dGVuc2lvbkZvclVwbG9hZCk7CisgICAgcHJpdi0+cGFn
ZVByb3h5LT5wZXJmb3JtRHJhZ09wZXJhdGlvbihkcmFnRGF0YSwgU3RyaW5nKCksIGhhbmRsZSwg
c2FuZGJveEV4dGVuc2lvbkZvclVwbG9hZCk7CiAgICAgZ3RrX2RyYWdfZmluaXNoKGNvbnRleHQs
IFRSVUUsIEZBTFNFLCB0aW1lKTsKICAgICByZXR1cm4gVFJVRTsKIH0KQEAgLTEwNTEsMTYgKzEx
MzUsMTMgQEAgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZVN0YXJ0RHJhZyhXZWJLaXRXZWJWaWV3QmFz
ZSogd2ViVmlld0Jhc2UsIGNvbnN0IERyYWdEYXRhJgogICAgIFJlZlB0cjxEYXRhT2JqZWN0R3Rr
PiBkYXRhT2JqZWN0ID0gYWRvcHRSZWYoZHJhZ0RhdGEucGxhdGZvcm1EYXRhKCkpOwogICAgIEdS
ZWZQdHI8R3RrVGFyZ2V0TGlzdD4gdGFyZ2V0TGlzdCA9IGFkb3B0R1JlZihQYXN0ZWJvYXJkSGVs
cGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT50YXJnZXRMaXN0Rm9yRGF0YU9iamVjdChk
YXRhT2JqZWN0LmdldCgpKSk7CiAgICAgR1VuaXF1ZVB0cjxHZGtFdmVudD4gY3VycmVudEV2ZW50
KGd0a19nZXRfY3VycmVudF9ldmVudCgpKTsKLSAgICBHZGtEcmFnQ29udGV4dCogY29udGV4dCA9
IGd0a19kcmFnX2JlZ2luKEdUS19XSURHRVQod2ViVmlld0Jhc2UpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0TGlzdC5nZXQoKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyYWdPcGVyYXRpb25Ub0dka0Ry
YWdBY3Rpb25zKGRyYWdEYXRhLmRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFzaygpKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIC8qIGJ1dHRvbiAqLwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEV2ZW50
LmdldCgpKTsKLSAgICBwcml2LT5kcmFnQW5kRHJvcEhlbHBlci5zdGFydGVkRHJhZyhjb250ZXh0
LCBkYXRhT2JqZWN0LmdldCgpKTsKKyAgICBHZGtEcmFnQ29udGV4dCogY29udGV4dCA9IGd0a19k
cmFnX2JlZ2luKEdUS19XSURHRVQod2ViVmlld0Jhc2UpLCB0YXJnZXRMaXN0LmdldCgpLCBkcmFn
T3BlcmF0aW9uVG9HZGtEcmFnQWN0aW9ucyhkcmFnRGF0YS5kcmFnZ2luZ1NvdXJjZU9wZXJhdGlv
bk1hc2soKSksCisgICAgICAgIEdES19CVVRUT05fUFJJTUFSWSwgY3VycmVudEV2ZW50LmdldCgp
KTsKKyAgICBwcml2LT5kcmFnZ2luZ0RhdGFPYmplY3RzLnNldChjb250ZXh0LCBkYXRhT2JqZWN0
LmdldCgpKTsKIAogCiAgICAgLy8gQSBkcmFnIHN0YXJ0aW5nIHNob3VsZCBwcmV2ZW50IGEgZG91
YmxlLWNsaWNrIGZyb20gaGFwcGVuaW5nLiBUaGlzIG1pZ2h0Ci0gICAgLy8gaGFwcGVuIGlmIGEg
ZHJhZyBpcyBmb2xsb3dlZCB2ZXJ5IHF1aWNrbHkgYnkgYW5vdGhlciBjbGljayAobGlrZSBpbiB0
aGUgRFJUKS4KKyAgICAvLyBoYXBwZW4gaWYgYSBkcmFnIGlzIGZvbGxvd2VkIHZlcnkgcXVpY2ts
eSBieSBhbm90aGVyIGNsaWNrIChsaWtlIGluIHRoZSBXVFIpLgogICAgIHByaXYtPmNsaWNrQ291
bnRlci5yZXNldCgpOwogCiAgICAgaWYgKGRyYWdJbWFnZSkgewo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>240018</attachid>
            <date>2014-10-17 10:07:01 -0700</date>
            <delta_ts>2014-10-17 10:31:20 -0700</delta_ts>
            <desc>Updated patch to move all the dnd logic to a class</desc>
            <filename>wk2-dnd-handler.diff</filename>
            <type>text/plain</type>
            <size>46126</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAyN2NiYTllLi5lMjM3YjY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMjAg
QEAKIDIwMTQtMTAtMTcgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgogCisgICAgICAgIFtHVEtdIE1vdmUgR3RrRHJhZ0FuZERyb3BIZWxwZXIgZnJvbSBQbGF0Zm9y
bSB0byBXZWJLaXQyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMzc0MjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBSZW1vdmUgQ2xpcGJvYXJkVXRpbGl0aWVzR3RrIGFuZCBHdGtEcmFnQW5kRHJvcEhlbHBl
ci4KKworICAgICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIHBsYXRmb3JtL2d0
ay9DbGlwYm9hcmRVdGlsaXRpZXNHdGsuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2d0ay9DbGlwYm9hcmRVdGlsaXRpZXNHdGsuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ndGsvR3RrRHJhZ0FuZERyb3BIZWxwZXIuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRm
b3JtL2d0ay9HdGtEcmFnQW5kRHJvcEhlbHBlci5oOiBSZW1vdmVkLgorCisyMDE0LTEwLTE3ICBD
YXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKwogICAgICAgICBbR0xJ
Ql0gQWRkIEFQSSB0byBHTWFpbkxvb3BTb3VyY2UgdG8gc2NoZWR1bGUgc291cmNlcyBhZnRlciBh
IGRlbGF5IGluIG1pY3Jvc2Vjb25kcwogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTM3NzgyCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtR1RLLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXggZjg1
NGY2Yy4uZDYzM2E0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21h
a2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKQEAgLTIxMyw3ICsyMTMs
NiBAQCBsaXN0KEFQUEVORCBXZWJDb3JlUGxhdGZvcm1HVEtfU09VUkNFUwogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2d0ay9JbWFnZUJ1ZmZlckd0ay5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9n
dGsvSW1hZ2VHdGsuY3BwCiAKLSAgICBwbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkVXRpbGl0aWVzR3Rr
LmNwcAogICAgIHBsYXRmb3JtL2d0ay9Db250ZXh0TWVudUd0ay5jcHAKICAgICBwbGF0Zm9ybS9n
dGsvQ29udGV4dE1lbnVJdGVtR3RrLmNwcAogICAgIHBsYXRmb3JtL2d0ay9DdXJzb3JHdGsuY3Bw
CkBAIC0yMjMsNyArMjIyLDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZVBsYXRmb3JtR1RLX1NPVVJD
RVMKICAgICBwbGF0Zm9ybS9ndGsvRHJhZ0ltYWdlR3RrLmNwcAogICAgIHBsYXRmb3JtL2d0ay9H
UmVmUHRyR3RrLmNwcAogICAgIHBsYXRmb3JtL2d0ay9HdGtDbGlja0NvdW50ZXIuY3BwCi0gICAg
cGxhdGZvcm0vZ3RrL0d0a0RyYWdBbmREcm9wSGVscGVyLmNwcAogICAgIHBsYXRmb3JtL2d0ay9H
dGtJbnB1dE1ldGhvZEZpbHRlci5jcHAKICAgICBwbGF0Zm9ybS9ndGsvR3RrVXRpbGl0aWVzLmNw
cAogICAgIHBsYXRmb3JtL2d0ay9HdGtWZXJzaW9uaW5nLmMKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9DbGlwYm9hcmRVdGlsaXRpZXNHdGsuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL0NsaXBib2FyZFV0aWxpdGllc0d0ay5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDlmYzBlNzQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL0NsaXBib2FyZFV0aWxpdGllc0d0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSw3NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCBJZ2FsaWEgUy5MLgotICoK
LSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9u
LCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIkNsaXBib2FyZFV0aWxpdGllc0d0ay5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUdk
a0RyYWdBY3Rpb24gZHJhZ09wZXJhdGlvblRvR2RrRHJhZ0FjdGlvbnMoRHJhZ09wZXJhdGlvbiBj
b3JlQWN0aW9uKQotewotICAgIEdka0RyYWdBY3Rpb24gZ2RrQWN0aW9uID0gc3RhdGljX2Nhc3Q8
R2RrRHJhZ0FjdGlvbj4oMCk7Ci0gICAgaWYgKGNvcmVBY3Rpb24gPT0gRHJhZ09wZXJhdGlvbk5v
bmUpCi0gICAgICAgIHJldHVybiBnZGtBY3Rpb247Ci0KLSAgICBpZiAoY29yZUFjdGlvbiAmIERy
YWdPcGVyYXRpb25Db3B5KQotICAgICAgICBnZGtBY3Rpb24gPSBzdGF0aWNfY2FzdDxHZGtEcmFn
QWN0aW9uPihHREtfQUNUSU9OX0NPUFkgfCBnZGtBY3Rpb24pOwotICAgIGlmIChjb3JlQWN0aW9u
ICYgRHJhZ09wZXJhdGlvbk1vdmUpCi0gICAgICAgIGdka0FjdGlvbiA9IHN0YXRpY19jYXN0PEdk
a0RyYWdBY3Rpb24+KEdES19BQ1RJT05fTU9WRSB8IGdka0FjdGlvbik7Ci0gICAgaWYgKGNvcmVB
Y3Rpb24gJiBEcmFnT3BlcmF0aW9uTGluaykKLSAgICAgICAgZ2RrQWN0aW9uID0gc3RhdGljX2Nh
c3Q8R2RrRHJhZ0FjdGlvbj4oR0RLX0FDVElPTl9MSU5LIHwgZ2RrQWN0aW9uKTsKLSAgICBpZiAo
Y29yZUFjdGlvbiAmIERyYWdPcGVyYXRpb25Qcml2YXRlKQotICAgICAgICBnZGtBY3Rpb24gPSBz
dGF0aWNfY2FzdDxHZGtEcmFnQWN0aW9uPihHREtfQUNUSU9OX1BSSVZBVEUgfCBnZGtBY3Rpb24p
OwotCi0gICAgcmV0dXJuIGdka0FjdGlvbjsKLX0KLQotR2RrRHJhZ0FjdGlvbiBkcmFnT3BlcmF0
aW9uVG9TaW5nbGVHZGtEcmFnQWN0aW9uKERyYWdPcGVyYXRpb24gY29yZUFjdGlvbikKLXsKLSAg
ICBpZiAoY29yZUFjdGlvbiA9PSBEcmFnT3BlcmF0aW9uRXZlcnkgfHwgY29yZUFjdGlvbiAmIERy
YWdPcGVyYXRpb25Db3B5KQotICAgICAgICByZXR1cm4gR0RLX0FDVElPTl9DT1BZOwotICAgIGlm
IChjb3JlQWN0aW9uICYgRHJhZ09wZXJhdGlvbk1vdmUpCi0gICAgICAgIHJldHVybiBHREtfQUNU
SU9OX01PVkU7Ci0gICAgaWYgKGNvcmVBY3Rpb24gJiBEcmFnT3BlcmF0aW9uTGluaykKLSAgICAg
ICAgcmV0dXJuIEdES19BQ1RJT05fTElOSzsKLSAgICBpZiAoY29yZUFjdGlvbiAmIERyYWdPcGVy
YXRpb25Qcml2YXRlKQotICAgICAgICByZXR1cm4gR0RLX0FDVElPTl9QUklWQVRFOwotICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxHZGtEcmFnQWN0aW9uPigwKTsKLX0KLQotRHJhZ09wZXJhdGlvbiBn
ZGtEcmFnQWN0aW9uVG9EcmFnT3BlcmF0aW9uKEdka0RyYWdBY3Rpb24gZ2RrQWN0aW9uKQotewot
ICAgIC8vIFdlIGhhdmUgbm8gZ29vZCB3YXkgdG8gZGV0ZWN0IERyYWdPcGVyYXRpb25FdmVyeSBv
dGhlciB0aGFuCi0gICAgLy8gdG8gdXNlIGl0IHdoZW4gYWxsIGFwcGxpY2FibGUgZmxhZ3MgYXJl
IG9uLgotICAgIGlmIChnZGtBY3Rpb24gJiBHREtfQUNUSU9OX0NPUFkgJiYgZ2RrQWN0aW9uICYg
R0RLX0FDVElPTl9NT1ZFCi0gICAgICAgICYmIGdka0FjdGlvbiAmIEdES19BQ1RJT05fTElOSyAm
JiBnZGtBY3Rpb24gJiBHREtfQUNUSU9OX1BSSVZBVEUpCi0gICAgICAgIHJldHVybiBEcmFnT3Bl
cmF0aW9uRXZlcnk7Ci0KLSAgICB1bnNpZ25lZCBpbnQgYWN0aW9uID0gRHJhZ09wZXJhdGlvbk5v
bmU7Ci0gICAgaWYgKGdka0FjdGlvbiAmIEdES19BQ1RJT05fQ09QWSkKLSAgICAgICAgYWN0aW9u
IHw9IERyYWdPcGVyYXRpb25Db3B5OwotICAgIGlmIChnZGtBY3Rpb24gJiBHREtfQUNUSU9OX01P
VkUpCi0gICAgICAgIGFjdGlvbiB8PSBEcmFnT3BlcmF0aW9uTW92ZTsKLSAgICBpZiAoZ2RrQWN0
aW9uICYgR0RLX0FDVElPTl9MSU5LKQotICAgICAgICBhY3Rpb24gfD0gRHJhZ09wZXJhdGlvbkxp
bms7Ci0gICAgaWYgKGdka0FjdGlvbiAmIEdES19BQ1RJT05fUFJJVkFURSkKLSAgICAgICAgYWN0
aW9uIHw9IERyYWdPcGVyYXRpb25Qcml2YXRlOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxEcmFn
T3BlcmF0aW9uPihhY3Rpb24pOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvQ2xpcGJvYXJkVXRpbGl0aWVzR3RrLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvQ2xpcGJvYXJkVXRpbGl0aWVzR3RrLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDI2ZjYzNDYuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L0NsaXBib2FyZFV0aWxpdGllc0d0ay5oCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgSWdhbGlhIFMuTC4KLSAqCi0gKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKLSAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEz
MDEgIFVTQQotICovCi0KLSNpZm5kZWYgQ2xpcGJvYXJkVXRpbGl0aWVzR3RrX2gKLSNkZWZpbmUg
Q2xpcGJvYXJkVXRpbGl0aWVzR3RrX2gKLQotI2luY2x1ZGUgIkRyYWdBY3Rpb25zLmgiCi0jaW5j
bHVkZSA8Z2RrL2dkay5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUdka0RyYWdBY3Rpb24g
ZHJhZ09wZXJhdGlvblRvR2RrRHJhZ0FjdGlvbnMoRHJhZ09wZXJhdGlvbik7Ci1HZGtEcmFnQWN0
aW9uIGRyYWdPcGVyYXRpb25Ub1NpbmdsZUdka0RyYWdBY3Rpb24oRHJhZ09wZXJhdGlvbik7Ci1E
cmFnT3BlcmF0aW9uIGdka0RyYWdBY3Rpb25Ub0RyYWdPcGVyYXRpb24oR2RrRHJhZ0FjdGlvbik7
Ci0KLX0KLQotI2VuZGlmIC8vIENsaXBib2FyZFV0aWxpdGllc0d0a19oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrRHJhZ0FuZERyb3BIZWxwZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0RyYWdBbmREcm9wSGVscGVyLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQzNTY5YS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvR3RrRHJhZ0FuZERyb3BIZWxwZXIuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsMTcyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIElnYWxpYSBTLkwu
Ci0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK
LSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBC
b3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiR3RrRHJhZ0FuZERyb3BIZWxwZXIuaCIKLQotI2lmIEVOQUJMRShEUkFHX1NVUFBP
UlQpCi0KLSNpbmNsdWRlICJDbGlwYm9hcmRVdGlsaXRpZXNHdGsuaCIKLSNpbmNsdWRlICJEcmFn
RGF0YS5oIgotI2luY2x1ZGUgIkd0a1V0aWxpdGllcy5oIgotI2luY2x1ZGUgIkd0a1ZlcnNpb25p
bmcuaCIKLSNpbmNsdWRlICJQYXN0ZWJvYXJkSGVscGVyLmgiCi0jaW5jbHVkZSA8Z3RrL2d0ay5o
PgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dNYWluTG9vcFNvdXJjZS5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLXN0cnVjdCBEcm9wcGluZ0NvbnRleHQgewotICAgIERyb3BwaW5nQ29udGV4
dChHZGtEcmFnQ29udGV4dCogZ2RrQ29udGV4dCwgY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uKQot
ICAgICAgICA6IGdka0NvbnRleHQoZ2RrQ29udGV4dCkKLSAgICAgICAgLCBkYXRhT2JqZWN0KERh
dGFPYmplY3RHdGs6OmNyZWF0ZSgpKQotICAgICAgICAsIGxhc3RNb3Rpb25Qb3NpdGlvbihwb3Np
dGlvbikKLSAgICAgICAgLCBkcm9wSGFwcGVuZWQoZmFsc2UpCi0gICAgICAgICwgZXhpdGVkQ2Fs
bGJhY2soMCkKLSAgICB7Ci0gICAgfQotCi0gICAgR2RrRHJhZ0NvbnRleHQqIGdka0NvbnRleHQ7
Ci0gICAgUmVmUHRyPERhdGFPYmplY3RHdGs+IGRhdGFPYmplY3Q7Ci0gICAgV2ViQ29yZTo6SW50
UG9pbnQgbGFzdE1vdGlvblBvc2l0aW9uOwotICAgIGludCBwZW5kaW5nRGF0YVJlcXVlc3RzOwot
ICAgIGJvb2wgZHJvcEhhcHBlbmVkOwotICAgIERyYWdFeGl0ZWRDYWxsYmFjayBleGl0ZWRDYWxs
YmFjazsKLX07Ci0KLUd0a0RyYWdBbmREcm9wSGVscGVyOjpHdGtEcmFnQW5kRHJvcEhlbHBlcigp
Ci0gICAgOiBtX3dpZGdldChudWxscHRyKQotewotfQotCi1HdGtEcmFnQW5kRHJvcEhlbHBlcjo6
fkd0a0RyYWdBbmREcm9wSGVscGVyKCkKLXsKLX0KLQotYm9vbCBHdGtEcmFnQW5kRHJvcEhlbHBl
cjo6aGFuZGxlRHJhZ0VuZChHZGtEcmFnQ29udGV4dCogZHJhZ0NvbnRleHQpCi17Ci0gICAgcmV0
dXJuIG1fZHJhZ2dpbmdEYXRhT2JqZWN0cy5yZW1vdmUoZHJhZ0NvbnRleHQpOwotfQotCi12b2lk
IEd0a0RyYWdBbmREcm9wSGVscGVyOjpoYW5kbGVHZXREcmFnRGF0YShHZGtEcmFnQ29udGV4dCog
Y29udGV4dCwgR3RrU2VsZWN0aW9uRGF0YSogc2VsZWN0aW9uRGF0YSwgZ3VpbnQgaW5mbykKLXsK
LSAgICBEYXRhT2JqZWN0R3RrKiBkYXRhT2JqZWN0ID0gbV9kcmFnZ2luZ0RhdGFPYmplY3RzLmdl
dChjb250ZXh0KTsKLSAgICBpZiAoIWRhdGFPYmplY3QpCi0gICAgICAgIHJldHVybjsKLSAgICBQ
YXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT5maWxsU2VsZWN0aW9u
RGF0YShzZWxlY3Rpb25EYXRhLCBpbmZvLCBkYXRhT2JqZWN0KTsKLX0KLQotdm9pZCBHdGtEcmFn
QW5kRHJvcEhlbHBlcjo6aGFuZGxlRHJhZ0xlYXZlTGF0ZXIoRHJvcHBpbmdDb250ZXh0KiBjb250
ZXh0KQotewotICAgIGF1dG8gaXRlcmF0b3IgPSBtX2Ryb3BwaW5nQ29udGV4dHMuZmluZChjb250
ZXh0LT5nZGtDb250ZXh0KTsKLSAgICBpZiAoaXRlcmF0b3IgPT0gbV9kcm9wcGluZ0NvbnRleHRz
LmVuZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBJZiB0aGUgdmlldyBkb2Vzbid0IGtu
b3cgYWJvdXQgdGhlIGRyYWcgeWV0ICh0aGVyZSBhcmUgc3RpbGwgcGVuZGluZyBkYXRhKQotICAg
IC8vIHJlcXVlc3RzLCBkb24ndCB1cGRhdGUgaXQgd2l0aCBpbmZvcm1hdGlvbiBhYm91dCB0aGUg
ZHJhZy4KLSAgICBpZiAoY29udGV4dC0+cGVuZGluZ0RhdGFSZXF1ZXN0cykKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uID0gY29udGV4dC0+bGFzdE1vdGlv
blBvc2l0aW9uOwotICAgIERyYWdEYXRhIGRyYWdEYXRhKGNvbnRleHQtPmRhdGFPYmplY3QuZ2V0
KCksIHBvc2l0aW9uLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRXaWRnZXRQb2ludFRv
U2NyZWVuUG9pbnQobV93aWRnZXQsIHBvc2l0aW9uKSwKLSAgICAgICAgICAgICAgICAgICAgICBE
cmFnT3BlcmF0aW9uTm9uZSk7Ci0gICAgY29udGV4dC0+ZXhpdGVkQ2FsbGJhY2sobV93aWRnZXQs
IGRyYWdEYXRhLCBjb250ZXh0LT5kcm9wSGFwcGVuZWQpOwotCi0gICAgbV9kcm9wcGluZ0NvbnRl
eHRzLnJlbW92ZShpdGVyYXRvcik7Ci19Ci0KLXZvaWQgR3RrRHJhZ0FuZERyb3BIZWxwZXI6Omhh
bmRsZURyYWdMZWF2ZShHZGtEcmFnQ29udGV4dCogZ2RrQ29udGV4dCwgRHJhZ0V4aXRlZENhbGxi
YWNrIGV4aXRlZENhbGxiYWNrKQotewotICAgIERyb3BwaW5nQ29udGV4dCogY29udGV4dCA9IG1f
ZHJvcHBpbmdDb250ZXh0cy5nZXQoZ2RrQ29udGV4dCk7Ci0gICAgaWYgKCFjb250ZXh0KQotICAg
ICAgICByZXR1cm47Ci0KLSAgICAvLyBEdXJpbmcgYSBkcm9wIEdUSysgd2lsbCBmaXJlIGEgZHJh
Zy1sZWF2ZSBzaWduYWwgcmlnaHQgYmVmb3JlIGZpcmluZwotICAgIC8vIHRoZSBkcmFnLWRyb3Ag
c2lnbmFsLiBXZSB3YW50IHRoZSBhY3Rpb25zIGZvciBkcmFnLWxlYXZlIHRvIGhhcHBlbiBhZnRl
cgotICAgIC8vIHRob3NlIGZvciBkcmFnLWRyb3AsIHNvIHNjaGVkdWxlIHRoZW0gdG8gaGFwcGVu
IGFzeW5jaHJvbm91c2x5IGhlcmUuCi0gICAgY29udGV4dC0+ZXhpdGVkQ2FsbGJhY2sgPSBleGl0
ZWRDYWxsYmFjazsKLSAgICBHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlQW5kRGVsZXRlT25EZXN0
cm95KCJbV2ViS2l0XSBoYW5kbGVEcmFnTGVhdmVMYXRlciIsIHN0ZDo6ZnVuY3Rpb248dm9pZCgp
PihzdGQ6OmJpbmQoJkd0a0RyYWdBbmREcm9wSGVscGVyOjpoYW5kbGVEcmFnTGVhdmVMYXRlciwg
dGhpcywgY29udGV4dCkpKTsKLX0KLQotc3RhdGljIHZvaWQgcXVlcnlOZXdEcm9wQ29udGV4dERh
dGEoRHJvcHBpbmdDb250ZXh0KiBkcm9wQ29udGV4dCwgR3RrV2lkZ2V0KiB3aWRnZXQsIGd1aW50
IHRpbWUpCi17Ci0gICAgR2RrRHJhZ0NvbnRleHQqIGdka0NvbnRleHQgPSBkcm9wQ29udGV4dC0+
Z2RrQ29udGV4dDsKLSAgICBWZWN0b3I8R2RrQXRvbT4gYWNjZXB0YWJsZVRhcmdldHMoUGFzdGVi
b2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+ZHJvcEF0b21zRm9yQ29udGV4
dCh3aWRnZXQsIGdka0NvbnRleHQpKTsKLSAgICBkcm9wQ29udGV4dC0+cGVuZGluZ0RhdGFSZXF1
ZXN0cyA9IGFjY2VwdGFibGVUYXJnZXRzLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGFjY2VwdGFibGVUYXJnZXRzLnNpemUoKTsgaSsrKQotICAgICAgICBndGtfZHJhZ19nZXRf
ZGF0YSh3aWRnZXQsIGdka0NvbnRleHQsIGFjY2VwdGFibGVUYXJnZXRzLmF0KGkpLCB0aW1lKTsK
LX0KLQotRGF0YU9iamVjdEd0ayogR3RrRHJhZ0FuZERyb3BIZWxwZXI6OmhhbmRsZURyYWdNb3Rp
b24oR2RrRHJhZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFBvaW50JiBwb3NpdGlvbiwgdW5z
aWduZWQgdGltZSkKLXsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8RHJvcHBpbmdDb250ZXh0PiYgZHJv
cHBpbmdDb250ZXh0ID0gbV9kcm9wcGluZ0NvbnRleHRzLmFkZChjb250ZXh0LCBudWxscHRyKS5p
dGVyYXRvci0+dmFsdWU7Ci0gICAgaWYgKCFkcm9wcGluZ0NvbnRleHQpIHsKLSAgICAgICAgZHJv
cHBpbmdDb250ZXh0ID0gc3RkOjptYWtlX3VuaXF1ZTxEcm9wcGluZ0NvbnRleHQ+KGNvbnRleHQs
IHBvc2l0aW9uKTsKLSAgICAgICAgcXVlcnlOZXdEcm9wQ29udGV4dERhdGEoZHJvcHBpbmdDb250
ZXh0LmdldCgpLCBtX3dpZGdldCwgdGltZSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGRyb3BwaW5n
Q29udGV4dC0+bGFzdE1vdGlvblBvc2l0aW9uID0gcG9zaXRpb247Ci0KLSAgICAvLyBEb24ndCBz
ZW5kIGFueSBkcmFnIGluZm9ybWF0aW9uIHRvIFdlYkNvcmUgdW50aWwgd2UndmUgcmV0cmlldmVk
IGFsbAotICAgIC8vIHRoZSBkYXRhIGZvciB0aGlzIGRyYWcgb3BlcmF0aW9uLiBPdGhlcndpc2Ug
d2UnZCBoYXZlIHRvIGJsb2NrIHRvIHdhaXQKLSAgICAvLyBmb3IgdGhlIGRyYWcncyBkYXRhLgot
ICAgIGlmIChkcm9wcGluZ0NvbnRleHQtPnBlbmRpbmdEYXRhUmVxdWVzdHMgPiAwKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBkcm9wcGluZ0NvbnRleHQtPmRhdGFPYmpl
Y3QuZ2V0KCk7Ci19Ci0KLURhdGFPYmplY3RHdGsqIEd0a0RyYWdBbmREcm9wSGVscGVyOjpoYW5k
bGVEcmFnRGF0YVJlY2VpdmVkKEdka0RyYWdDb250ZXh0KiBjb250ZXh0LCBHdGtTZWxlY3Rpb25E
YXRhKiBzZWxlY3Rpb25EYXRhLCB1bnNpZ25lZCBpbmZvLCBJbnRQb2ludCYgcG9zaXRpb24pCi17
Ci0gICAgRHJvcHBpbmdDb250ZXh0KiBkcm9wcGluZ0NvbnRleHQgPSBtX2Ryb3BwaW5nQ29udGV4
dHMuZ2V0KGNvbnRleHQpOwotICAgIGlmICghZHJvcHBpbmdDb250ZXh0KQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLQotICAgIGRyb3BwaW5nQ29udGV4dC0+cGVuZGluZ0RhdGFSZXF1ZXN0cy0t
OwotICAgIFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPmZpbGxE
YXRhT2JqZWN0RnJvbURyb3BEYXRhKHNlbGVjdGlvbkRhdGEsIGluZm8sIGRyb3BwaW5nQ29udGV4
dC0+ZGF0YU9iamVjdC5nZXQoKSk7Ci0KLSAgICBpZiAoZHJvcHBpbmdDb250ZXh0LT5wZW5kaW5n
RGF0YVJlcXVlc3RzKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIC8vIFRoZSBjb29y
ZGluYXRlcyBwYXNzZWQgdG8gZHJhZy1kYXRhLXJlY2VpdmVkIHNpZ25hbCBhcmUgc29tZXRpbWVz
Ci0gICAgLy8gaW5hY2N1cmF0ZSBpbiBEUlQsIHNvIHVzZSB0aGUgY29vcmRpbmF0ZXMgb2YgdGhl
IGxhc3QgbW90aW9uIGV2ZW50LgotICAgIHBvc2l0aW9uID0gZHJvcHBpbmdDb250ZXh0LT5sYXN0
TW90aW9uUG9zaXRpb247Ci0KLSAgICAvLyBJZiB0aGVyZSBhcmUgbm8gbW9yZSBwZW5kaW5nIHJl
cXVlc3RzLCBzdGFydCBzZW5kaW5nIGRyYWdnaW5nIGRhdGEgdG8gV2ViQ29yZS4KLSAgICByZXR1
cm4gZHJvcHBpbmdDb250ZXh0LT5kYXRhT2JqZWN0LmdldCgpOwotfQotCi1EYXRhT2JqZWN0R3Rr
KiBHdGtEcmFnQW5kRHJvcEhlbHBlcjo6aGFuZGxlRHJhZ0Ryb3AoR2RrRHJhZ0NvbnRleHQqIGNv
bnRleHQpCi17Ci0gICAgRHJvcHBpbmdDb250ZXh0KiBkcm9wcGluZ0NvbnRleHQgPSBtX2Ryb3Bw
aW5nQ29udGV4dHMuZ2V0KGNvbnRleHQpOwotICAgIGlmICghZHJvcHBpbmdDb250ZXh0KQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGRyb3BwaW5nQ29udGV4dC0+ZHJvcEhhcHBlbmVk
ID0gdHJ1ZTsKLQotICAgIHJldHVybiBkcm9wcGluZ0NvbnRleHQtPmRhdGFPYmplY3QuZ2V0KCk7
Ci19Ci0KLXZvaWQgR3RrRHJhZ0FuZERyb3BIZWxwZXI6OnN0YXJ0ZWREcmFnKEdka0RyYWdDb250
ZXh0KiBjb250ZXh0LCBEYXRhT2JqZWN0R3RrKiBkYXRhT2JqZWN0KQotewotICAgIG1fZHJhZ2dp
bmdEYXRhT2JqZWN0cy5zZXQoY29udGV4dCwgZGF0YU9iamVjdCk7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShEUkFHX1NVUFBPUlQpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrRHJhZ0FuZERyb3BIZWxwZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtEcmFnQW5kRHJvcEhlbHBlci5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ODM5ZGQzLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9HdGtEcmFnQW5kRHJvcEhlbHBlci5oCisrKyAvZGV2L251bGwKQEAg
LTEsNjQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgSWdhbGlhIFMuTC4KLSAq
Ci0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICog
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rv
biwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpZm5kZWYgR3RrRHJhZ0FuZERyb3BIZWxw
ZXJfaAotI2RlZmluZSBHdGtEcmFnQW5kRHJvcEhlbHBlcl9oCi0KLSNpZiBFTkFCTEUoRFJBR19T
VVBQT1JUKQotCi0jaW5jbHVkZSAiRGF0YU9iamVjdEd0ay5oIgotI2luY2x1ZGUgPHd0Zi9GYXN0
TWFsbG9jLmg+Ci0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotc3RydWN0IERyb3BwaW5nQ29udGV4dDsKLWNsYXNzIERyYWdEYXRhOwotY2xhc3Mg
SW50UG9pbnQ7Ci0KLXR5cGVkZWYgdm9pZCAoKkRyYWdFeGl0ZWRDYWxsYmFjaykoR3RrV2lkZ2V0
KiwgRHJhZ0RhdGEmLCBib29sIGRyb3BIYXBwZW5lZCk7Ci0KLWNsYXNzIEd0a0RyYWdBbmREcm9w
SGVscGVyIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShHdGtEcmFnQW5kRHJvcEhlbHBlcik7
Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0KLXB1YmxpYzoKLSAgICBHdGtEcmFnQW5k
RHJvcEhlbHBlcigpOwotICAgIH5HdGtEcmFnQW5kRHJvcEhlbHBlcigpOwotCi0gICAgdm9pZCBz
ZXRXaWRnZXQoR3RrV2lkZ2V0KiB3aWRnZXQpIHsgbV93aWRnZXQgPSB3aWRnZXQ7IH0KLSAgICBi
b29sIGhhbmRsZURyYWdFbmQoR2RrRHJhZ0NvbnRleHQqKTsKLSAgICB2b2lkIGhhbmRsZUdldERy
YWdEYXRhKEdka0RyYWdDb250ZXh0KiwgR3RrU2VsZWN0aW9uRGF0YSosIGd1aW50IGluZm8pOwot
ICAgIHZvaWQgaGFuZGxlRHJhZ0xlYXZlKEdka0RyYWdDb250ZXh0KiwgRHJhZ0V4aXRlZENhbGxi
YWNrKTsKLSAgICB2b2lkIGhhbmRsZURyYWdMZWF2ZUxhdGVyKERyb3BwaW5nQ29udGV4dCopOwot
ICAgIERhdGFPYmplY3RHdGsqIGhhbmRsZURyYWdNb3Rpb24oR2RrRHJhZ0NvbnRleHQqLCBjb25z
dCBJbnRQb2ludCYsIHVuc2lnbmVkIHRpbWUpOwotICAgIERhdGFPYmplY3RHdGsqIGhhbmRsZURy
YWdEYXRhUmVjZWl2ZWQoR2RrRHJhZ0NvbnRleHQqLCBHdGtTZWxlY3Rpb25EYXRhKiwgdW5zaWdu
ZWQgaW5mbywgSW50UG9pbnQmKTsKLSAgICBEYXRhT2JqZWN0R3RrKiBoYW5kbGVEcmFnRHJvcChH
ZGtEcmFnQ29udGV4dCopOwotICAgIHZvaWQgc3RhcnRlZERyYWcoR2RrRHJhZ0NvbnRleHQqLCBE
YXRhT2JqZWN0R3RrKik7Ci0KLXByaXZhdGU6Ci0gICAgR3RrV2lkZ2V0KiBtX3dpZGdldDsKLSAg
ICBIYXNoTWFwPEdka0RyYWdDb250ZXh0Kiwgc3RkOjp1bmlxdWVfcHRyPERyb3BwaW5nQ29udGV4
dD4+IG1fZHJvcHBpbmdDb250ZXh0czsKLSAgICBIYXNoTWFwPEdka0RyYWdDb250ZXh0KiwgUmVm
UHRyPERhdGFPYmplY3RHdGs+PiBtX2RyYWdnaW5nRGF0YU9iamVjdHM7Ci19OwotCi19Ci0KLSNl
bmRpZiAvLyBFTkFCTEUoRFJBR19TVVBQT1JUKQotCi0jZW5kaWYgLy8gRGF0YU9iamVjdEd0a19o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cKaW5kZXggMThjZmEwNi4uZTg1NWE0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4
IEBACisyMDE0LTEwLTE3ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNv
bT4KKworICAgICAgICBbR1RLXSBNb3ZlIEd0a0RyYWdBbmREcm9wSGVscGVyIGZyb20gUGxhdGZv
cm0gdG8gV2ViS2l0MgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTM3NDIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgV2ViS2l0V2ViVmlld0Jhc2UgaXMgY3VycmVudGx5IHRoZSBvbmx5IHVzZXIgb2YKKyAg
ICAgICAgR3RrRHJhZ0FuZERyb3BIZWxwZXIsIHRoYXQgd2FzIGFkZGVkIHRvIHNoYXJlIHRoZSBj
b2RlIHdpdGgKKyAgICAgICAgV2ViS2l0MS4gTW92ZSBhbGwgdGhlIGRyYWcgYW5kIGRyb3AgbG9n
aWMgdG8gYSBuZXcgY2xhc3MKKyAgICAgICAgRHJhZ0FuZERyb3BIYW5kbGVyLgorCisgICAgICAg
ICogUGxhdGZvcm1HVEsuY21ha2U6IEFkZCBuZXcgZmlsZXMgdG8gY29tcGlsYXRpb24uCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpQYWdlQ2xpZW50SW1wbDo6c3RhcnREcmFnKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHA6CisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZUNv
bnN0cnVjdGVkKToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlRHJhZ0RhdGFHZXQpOgorICAg
ICAgICAod2Via2l0V2ViVmlld0Jhc2VEcmFnRW5kKToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdC
YXNlRHJhZ0RhdGFSZWNlaXZlZCk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZURyYWdNb3Rp
b24pOgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VEcmFnTGVhdmUpOgorICAgICAgICAod2Vi
a2l0V2ViVmlld0Jhc2VEcmFnRHJvcCk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZURyYWdB
bmREcm9wSGFuZGxlcik6CisgICAgICAgIChkcmFnRXhpdGVkQ2FsbGJhY2spOiBEZWxldGVkLgor
ICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VTdGFydERyYWcpOiBEZWxldGVkLgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oOgorICAgICAgICAq
IFVJUHJvY2Vzcy9ndGsvRHJhZ0FuZERyb3BIYW5kbGVyLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJLaXQ6OkRyYWdBbmREcm9wSGFuZGxlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6RHJh
Z0FuZERyb3BIYW5kbGVyOjpEcmFnQW5kRHJvcEhhbmRsZXIpOgorICAgICAgICAoV2ViS2l0OjpE
cmFnQW5kRHJvcEhhbmRsZXI6OkRyb3BwaW5nQ29udGV4dDo6RHJvcHBpbmdDb250ZXh0KToKKyAg
ICAgICAgKFdlYktpdDo6ZHJhZ09wZXJhdGlvblRvR2RrRHJhZ0FjdGlvbnMpOgorICAgICAgICAo
V2ViS2l0OjpkcmFnT3BlcmF0aW9uVG9TaW5nbGVHZGtEcmFnQWN0aW9uKToKKyAgICAgICAgKFdl
YktpdDo6Z2RrRHJhZ0FjdGlvblRvRHJhZ09wZXJhdGlvbik6CisgICAgICAgIChXZWJLaXQ6OkRy
YWdBbmREcm9wSGFuZGxlcjo6c3RhcnREcmFnKToKKyAgICAgICAgKFdlYktpdDo6RHJhZ0FuZERy
b3BIYW5kbGVyOjpmaWxsRHJhZ0RhdGEpOgorICAgICAgICAoV2ViS2l0OjpEcmFnQW5kRHJvcEhh
bmRsZXI6OmZpbmlzaERyYWcpOgorICAgICAgICAoV2ViS2l0OjpEcmFnQW5kRHJvcEhhbmRsZXI6
OmRhdGFPYmplY3RGb3JEcm9wRGF0YSk6CisgICAgICAgIChXZWJLaXQ6OkRyYWdBbmREcm9wSGFu
ZGxlcjo6ZHJhZ0VudGVyZWQpOgorICAgICAgICAoV2ViS2l0OjpEcmFnQW5kRHJvcEhhbmRsZXI6
OnJlcXVlc3REcmFnRGF0YSk6CisgICAgICAgIChXZWJLaXQ6OkRyYWdBbmREcm9wSGFuZGxlcjo6
ZHJhZ01vdGlvbik6CisgICAgICAgIChXZWJLaXQ6OkRyYWdBbmREcm9wSGFuZGxlcjo6ZHJhZ0xl
YXZlKToKKyAgICAgICAgKFdlYktpdDo6RHJhZ0FuZERyb3BIYW5kbGVyOjpkcm9wKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvZ3RrL0RyYWdBbmREcm9wSGFuZGxlci5oOiBBZGRlZC4KKwogMjAxNC0x
MC0wNCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAg
ICAgW0dUS10gVGhlIG5ldyB3ZWIgaW5zcGVjdG9yIGNhbid0IGJlIGRvY2tlZCBhZ2FpbiBvbmNl
IHVuZG9ja2VkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZSBi
L1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCmluZGV4IDM5YWZjN2MuLmNlMzBkZTkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCkBAIC0yNTEsNiArMjUxLDcgQEAgbGlzdChBUFBF
TkQgV2ViS2l0Ml9TT1VSQ0VTCiAKICAgICBVSVByb2Nlc3MvY2Fpcm8vQmFja2luZ1N0b3JlQ2Fp
cm8uY3BwCiAKKyAgICBVSVByb2Nlc3MvZ3RrL0RyYWdBbmREcm9wSGFuZGxlci5jcHAKICAgICBV
SVByb2Nlc3MvZ3RrL0V4cGVyaW1lbnRhbEZlYXR1cmVzLmNwcAogICAgIFVJUHJvY2Vzcy9ndGsv
VGV4dENoZWNrZXJHdGsuY3BwCiAgICAgVUlQcm9jZXNzL2d0ay9XZWJDb250ZXh0R3RrLmNwcApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudElt
cGwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwu
Y3BwCmluZGV4IDM2ZmZkZGQuLjliZDQxMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5jcHAKQEAgLTI3MSw3ICsyNzEsMTIgQEAg
dm9pZCBQYWdlQ2xpZW50SW1wbDo6dXBkYXRlVGV4dElucHV0U3RhdGUoKQogI2lmIEVOQUJMRShE
UkFHX1NVUFBPUlQpCiB2b2lkIFBhZ2VDbGllbnRJbXBsOjpzdGFydERyYWcoY29uc3QgV2ViQ29y
ZTo6RHJhZ0RhdGEmIGRyYWdEYXRhLCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gZHJhZ0lt
YWdlKQogewotICAgIHdlYmtpdFdlYlZpZXdCYXNlU3RhcnREcmFnKFdFQktJVF9XRUJfVklFV19C
QVNFKG1fdmlld1dpZGdldCksIGRyYWdEYXRhLCBkcmFnSW1hZ2UpOworICAgIFdlYktpdFdlYlZp
ZXdCYXNlKiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXX0JBU0UobV92aWV3V2lkZ2V0KTsKKyAg
ICB3ZWJraXRXZWJWaWV3QmFzZURyYWdBbmREcm9wSGFuZGxlcih3ZWJWaWV3KS5zdGFydERyYWco
ZHJhZ0RhdGEsIGRyYWdJbWFnZSk7CisKKyAgICAvLyBBIGRyYWcgc3RhcnRpbmcgc2hvdWxkIHBy
ZXZlbnQgYSBkb3VibGUtY2xpY2sgZnJvbSBoYXBwZW5pbmcuIFRoaXMgbWlnaHQKKyAgICAvLyBo
YXBwZW4gaWYgYSBkcmFnIGlzIGZvbGxvd2VkIHZlcnkgcXVpY2tseSBieSBhbm90aGVyIGNsaWNr
IChsaWtlIGluIHRoZSBXVFIpLgorICAgIHdlYmtpdFdlYlZpZXdCYXNlUmVzZXRDbGlja0NvdW50
ZXIod2ViVmlldyk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwCmluZGV4IDA0MWZjYmMuLmY3YWFl
NWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdl
YlZpZXdCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRXZWJWaWV3QmFzZS5jcHAKQEAgLTQ4LDEzICs0OCw4IEBACiAjaW5jbHVkZSAiV2ViVXNlckNv
bnRlbnRDb250cm9sbGVyUHJveHkuaCIKICNpbmNsdWRlICJXZWJWaWV3QmFzZUlucHV0TWV0aG9k
RmlsdGVyLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9DYWlyb1V0aWxpdGllcy5oPgotI2luY2x1ZGUg
PFdlYkNvcmUvQ2xpcGJvYXJkVXRpbGl0aWVzR3RrLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9EYXRh
T2JqZWN0R3RrLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9EcmFnRGF0YS5oPgotI2luY2x1ZGUgPFdl
YkNvcmUvRHJhZ0ljb24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0dVbmlxdWVQdHJHdGsuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL0d0a0NsaWNrQ291bnRlci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3Rr
RHJhZ0FuZERyb3BIZWxwZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0d0a1V0aWxpdGllcy5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvR3RrVmVyc2lvbmluZy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTm90
SW1wbGVtZW50ZWQuaD4KQEAgLTEwMSwxMCArOTYsNiBAQCBzdHJ1Y3QgX1dlYktpdFdlYlZpZXdC
YXNlUHJpdmF0ZSB7CiAgICAgR3RrQ2xpY2tDb3VudGVyIGNsaWNrQ291bnRlcjsKICAgICBDU3Ry
aW5nIHRvb2x0aXBUZXh0OwogICAgIEludFJlY3QgdG9vbHRpcEFyZWE7Ci0jaWYgRU5BQkxFKERS
QUdfU1VQUE9SVCkKLSAgICBHdGtEcmFnQW5kRHJvcEhlbHBlciBkcmFnQW5kRHJvcEhlbHBlcjsK
LSNlbmRpZgotICAgIERyYWdJY29uIGRyYWdJY29uOwogI2lmICFHVEtfQ0hFQ0tfVkVSU0lPTigz
LCAxMywgNCkKICAgICBJbnRTaXplIHJlc2l6ZXJTaXplOwogI2VuZGlmCkBAIC0xNDMsNiArMTM0
LDEwIEBAIHN0cnVjdCBfV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlIHsKICNpZiBVU0UoVEVYVFVS
RV9NQVBQRVJfR0wpICYmIFBMQVRGT1JNKFgxMSkKICAgICBPd25QdHI8UmVkaXJlY3RlZFhDb21w
b3NpdGVXaW5kb3c+IHJlZGlyZWN0ZWRXaW5kb3c7CiAjZW5kaWYKKworI2lmIEVOQUJMRShEUkFH
X1NVUFBPUlQpCisgICAgc3RkOjp1bmlxdWVfcHRyPERyYWdBbmREcm9wSGFuZGxlcj4gZHJhZ0Fu
ZERyb3BIYW5kbGVyOworI2VuZGlmCiB9OwogCiBXRUJLSVRfREVGSU5FX1RZUEUoV2ViS2l0V2Vi
Vmlld0Jhc2UsIHdlYmtpdF93ZWJfdmlld19iYXNlLCBHVEtfVFlQRV9DT05UQUlORVIpCkBAIC00
MTksMTUgKzQxNCwxMiBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZUNvbnN0cnVjdGVk
KEdPYmplY3QqIG9iamVjdCkKIAogICAgIEd0a1dpZGdldCogdmlld1dpZGdldCA9IEdUS19XSURH
RVQob2JqZWN0KTsKICAgICBndGtfd2lkZ2V0X3NldF9jYW5fZm9jdXModmlld1dpZGdldCwgVFJV
RSk7Ci0gICAgZ3RrX2RyYWdfZGVzdF9zZXQodmlld1dpZGdldCwgc3RhdGljX2Nhc3Q8R3RrRGVz
dERlZmF1bHRzPigwKSwgMCwgMCwKLSAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxH
ZGtEcmFnQWN0aW9uPihHREtfQUNUSU9OX0NPUFkgfCBHREtfQUNUSU9OX01PVkUgfCBHREtfQUNU
SU9OX0xJTksgfCBHREtfQUNUSU9OX1BSSVZBVEUpKTsKKyAgICBndGtfZHJhZ19kZXN0X3NldCh2
aWV3V2lkZ2V0LCBzdGF0aWNfY2FzdDxHdGtEZXN0RGVmYXVsdHM+KDApLCBudWxscHRyLCAwLAor
ICAgICAgICBzdGF0aWNfY2FzdDxHZGtEcmFnQWN0aW9uPihHREtfQUNUSU9OX0NPUFkgfCBHREtf
QUNUSU9OX01PVkUgfCBHREtfQUNUSU9OX0xJTksgfCBHREtfQUNUSU9OX1BSSVZBVEUpKTsKICAg
ICBndGtfZHJhZ19kZXN0X3NldF90YXJnZXRfbGlzdCh2aWV3V2lkZ2V0LCBQYXN0ZWJvYXJkSGVs
cGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT50YXJnZXRMaXN0KCkpOwogCiAgICAgV2Vi
S2l0V2ViVmlld0Jhc2VQcml2YXRlKiBwcml2ID0gV0VCS0lUX1dFQl9WSUVXX0JBU0Uob2JqZWN0
KS0+cHJpdjsKICAgICBwcml2LT5wYWdlQ2xpZW50ID0gUGFnZUNsaWVudEltcGw6OmNyZWF0ZSh2
aWV3V2lkZ2V0KTsKLSNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQotICAgIHByaXYtPmRyYWdBbmRE
cm9wSGVscGVyLnNldFdpZGdldCh2aWV3V2lkZ2V0KTsKLSNlbmRpZgogCiAjaWYgVVNFKFRFWFRV
UkVfTUFQUEVSX0dMKSAmJiBQTEFURk9STShYMTEpCiAgICAgR2RrRGlzcGxheSogZGlzcGxheSA9
IGdka19kaXNwbGF5X21hbmFnZXJfZ2V0X2RlZmF1bHRfZGlzcGxheShnZGtfZGlzcGxheV9tYW5h
Z2VyX2dldCgpKTsKQEAgLTg0NywzNyArODM5LDIxIEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRX
ZWJWaWV3QmFzZVF1ZXJ5VG9vbHRpcChHdGtXaWRnZXQqIHdpZGdldCwgZ2ludCAvKiB4ICovLCBn
CiAjaWYgRU5BQkxFKERSQUdfU1VQUE9SVCkKIHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdCYXNl
RHJhZ0RhdGFHZXQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0RyYWdDb250ZXh0KiBjb250ZXh0LCBH
dGtTZWxlY3Rpb25EYXRhKiBzZWxlY3Rpb25EYXRhLCBndWludCBpbmZvLCBndWludCAvKiB0aW1l
ICovKQogewotICAgIFdFQktJVF9XRUJfVklFV19CQVNFKHdpZGdldCktPnByaXYtPmRyYWdBbmRE
cm9wSGVscGVyLmhhbmRsZUdldERyYWdEYXRhKGNvbnRleHQsIHNlbGVjdGlvbkRhdGEsIGluZm8p
OworICAgIFdlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9XRUJfVklFV19C
QVNFKHdpZGdldCktPnByaXY7CisgICAgQVNTRVJUKHByaXYtPmRyYWdBbmREcm9wSGFuZGxlcik7
CisgICAgcHJpdi0+ZHJhZ0FuZERyb3BIYW5kbGVyLT5maWxsRHJhZ0RhdGEoY29udGV4dCwgc2Vs
ZWN0aW9uRGF0YSwgaW5mbyk7CiB9CiAKIHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlRHJh
Z0VuZChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRHJhZ0NvbnRleHQqIGNvbnRleHQpCiB7Ci0gICAg
V2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNlID0gV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2lk
Z2V0KTsKLSAgICBpZiAoIXdlYlZpZXdCYXNlLT5wcml2LT5kcmFnQW5kRHJvcEhlbHBlci5oYW5k
bGVEcmFnRW5kKGNvbnRleHQpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHZGtEZXZpY2UqIGRl
dmljZSA9IGdka19kcmFnX2NvbnRleHRfZ2V0X2RldmljZShjb250ZXh0KTsKLSAgICBpbnQgeCA9
IDAsIHkgPSAwOwotICAgIGdka19kZXZpY2VfZ2V0X3dpbmRvd19hdF9wb3NpdGlvbihkZXZpY2Us
ICZ4LCAmeSk7Ci0gICAgaW50IHhSb290ID0gMCwgeVJvb3QgPSAwOwotICAgIGdka19kZXZpY2Vf
Z2V0X3Bvc2l0aW9uKGRldmljZSwgMCwgJnhSb290LCAmeVJvb3QpOwotICAgIHdlYlZpZXdCYXNl
LT5wcml2LT5wYWdlUHJveHktPmRyYWdFbmRlZChJbnRQb2ludCh4LCB5KSwgSW50UG9pbnQoeFJv
b3QsIHlSb290KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z2RrRHJhZ0FjdGlvblRvRHJhZ09wZXJhdGlvbihnZGtfZHJhZ19jb250ZXh0X2dldF9zZWxlY3Rl
ZF9hY3Rpb24oY29udGV4dCkpKTsKKyAgICBXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUqIHByaXYg
PSBXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3aWRnZXQpLT5wcml2OworICAgIEFTU0VSVChwcml2LT5k
cmFnQW5kRHJvcEhhbmRsZXIpOworICAgIHByaXYtPmRyYWdBbmREcm9wSGFuZGxlci0+ZmluaXNo
RHJhZyhjb250ZXh0KTsKIH0KIAogc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VEcmFnRGF0
YVJlY2VpdmVkKEd0a1dpZGdldCogd2lkZ2V0LCBHZGtEcmFnQ29udGV4dCogY29udGV4dCwgZ2lu
dCAvKiB4ICovLCBnaW50IC8qIHkgKi8sIEd0a1NlbGVjdGlvbkRhdGEqIHNlbGVjdGlvbkRhdGEs
IGd1aW50IGluZm8sIGd1aW50IHRpbWUpCiB7Ci0gICAgV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZp
ZXdCYXNlID0gV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2lkZ2V0KTsKLSAgICBJbnRQb2ludCBwb3Np
dGlvbjsKLSAgICBEYXRhT2JqZWN0R3RrKiBkYXRhT2JqZWN0ID0gd2ViVmlld0Jhc2UtPnByaXYt
PmRyYWdBbmREcm9wSGVscGVyLmhhbmRsZURyYWdEYXRhUmVjZWl2ZWQoY29udGV4dCwgc2VsZWN0
aW9uRGF0YSwgaW5mbywgcG9zaXRpb24pOwotICAgIGlmICghZGF0YU9iamVjdCkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgRHJhZ0RhdGEgZHJhZ0RhdGEoZGF0YU9iamVjdCwgcG9zaXRpb24sIGNv
bnZlcnRXaWRnZXRQb2ludFRvU2NyZWVuUG9pbnQod2lkZ2V0LCBwb3NpdGlvbiksIGdka0RyYWdB
Y3Rpb25Ub0RyYWdPcGVyYXRpb24oZ2RrX2RyYWdfY29udGV4dF9nZXRfYWN0aW9ucyhjb250ZXh0
KSkpOwotICAgIHdlYlZpZXdCYXNlLT5wcml2LT5wYWdlUHJveHktPnJlc2V0Q3VycmVudERyYWdJ
bmZvcm1hdGlvbigpOwotICAgIHdlYlZpZXdCYXNlLT5wcml2LT5wYWdlUHJveHktPmRyYWdFbnRl
cmVkKGRyYWdEYXRhKTsKLSAgICBEcmFnT3BlcmF0aW9uIG9wZXJhdGlvbiA9IHdlYlZpZXdCYXNl
LT5wcml2LT5wYWdlUHJveHktPmN1cnJlbnREcmFnT3BlcmF0aW9uKCk7Ci0gICAgZ2RrX2RyYWdf
c3RhdHVzKGNvbnRleHQsIGRyYWdPcGVyYXRpb25Ub1NpbmdsZUdka0RyYWdBY3Rpb24ob3BlcmF0
aW9uKSwgdGltZSk7CisgICAgd2Via2l0V2ViVmlld0Jhc2VEcmFnQW5kRHJvcEhhbmRsZXIoV0VC
S0lUX1dFQl9WSUVXX0JBU0Uod2lkZ2V0KSkuZHJhZ0VudGVyZWQoY29udGV4dCwgc2VsZWN0aW9u
RGF0YSwgaW5mbywgdGltZSk7CiB9CiAjZW5kaWYgLy8gRU5BQkxFKERSQUdfU1VQUE9SVCkKIApA
QCAtOTEyLDUwICs4ODgsMjIgQEAgc3RhdGljIEF0a09iamVjdCogd2Via2l0V2ViVmlld0Jhc2VH
ZXRBY2Nlc3NpYmxlKEd0a1dpZGdldCogd2lkZ2V0KQogI2lmIEVOQUJMRShEUkFHX1NVUFBPUlQp
CiBzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0V2ViVmlld0Jhc2VEcmFnTW90aW9uKEd0a1dpZGdldCog
d2lkZ2V0LCBHZGtEcmFnQ29udGV4dCogY29udGV4dCwgZ2ludCB4LCBnaW50IHksIGd1aW50IHRp
bWUpCiB7Ci0gICAgV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNlID0gV0VCS0lUX1dFQl9W
SUVXX0JBU0Uod2lkZ2V0KTsKLSAgICBJbnRQb2ludCBwb3NpdGlvbih4LCB5KTsKLSAgICBEYXRh
T2JqZWN0R3RrKiBkYXRhT2JqZWN0ID0gd2ViVmlld0Jhc2UtPnByaXYtPmRyYWdBbmREcm9wSGVs
cGVyLmhhbmRsZURyYWdNb3Rpb24oY29udGV4dCwgcG9zaXRpb24sIHRpbWUpOwotICAgIGlmICgh
ZGF0YU9iamVjdCkKLSAgICAgICAgcmV0dXJuIFRSVUU7Ci0KLSAgICBEcmFnRGF0YSBkcmFnRGF0
YShkYXRhT2JqZWN0LCBwb3NpdGlvbiwgY29udmVydFdpZGdldFBvaW50VG9TY3JlZW5Qb2ludCh3
aWRnZXQsIHBvc2l0aW9uKSwgZ2RrRHJhZ0FjdGlvblRvRHJhZ09wZXJhdGlvbihnZGtfZHJhZ19j
b250ZXh0X2dldF9hY3Rpb25zKGNvbnRleHQpKSk7Ci0gICAgd2ViVmlld0Jhc2UtPnByaXYtPnBh
Z2VQcm94eS0+ZHJhZ1VwZGF0ZWQoZHJhZ0RhdGEpOwotICAgIERyYWdPcGVyYXRpb24gb3BlcmF0
aW9uID0gd2ViVmlld0Jhc2UtPnByaXYtPnBhZ2VQcm94eS0+Y3VycmVudERyYWdPcGVyYXRpb24o
KTsKLSAgICBnZGtfZHJhZ19zdGF0dXMoY29udGV4dCwgZHJhZ09wZXJhdGlvblRvU2luZ2xlR2Rr
RHJhZ0FjdGlvbihvcGVyYXRpb24pLCB0aW1lKTsKKyAgICB3ZWJraXRXZWJWaWV3QmFzZURyYWdB
bmREcm9wSGFuZGxlcihXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3aWRnZXQpKS5kcmFnTW90aW9uKGNv
bnRleHQsIEludFBvaW50KHgsIHkpLCB0aW1lKTsKICAgICByZXR1cm4gVFJVRTsKIH0KIAotc3Rh
dGljIHZvaWQgZHJhZ0V4aXRlZENhbGxiYWNrKEd0a1dpZGdldCogd2lkZ2V0LCBEcmFnRGF0YSYg
ZHJhZ0RhdGEsIGJvb2wgZHJvcEhhcHBlbmVkKQotewotICAgIC8vIERvbid0IGNhbGwgZHJhZ0V4
aXRlZCBpZiB3ZSBoYXZlIGp1c3QgcmVjZWl2ZWQgYSBkcmFnLWRyb3Agc2lnbmFsLiBUaGlzCi0g
ICAgLy8gaGFwcGVucyBpbiB0aGUgY2FzZSBvZiBhIHN1Y2Nlc3NmdWwgZHJvcCBvbnRvIHRoZSB2
aWV3LgotICAgIGlmIChkcm9wSGFwcGVuZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdlYktp
dFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmFzZSA9IFdFQktJVF9XRUJfVklFV19CQVNFKHdpZGdldCk7
Ci0gICAgd2ViVmlld0Jhc2UtPnByaXYtPnBhZ2VQcm94eS0+ZHJhZ0V4aXRlZChkcmFnRGF0YSk7
Ci0gICAgd2ViVmlld0Jhc2UtPnByaXYtPnBhZ2VQcm94eS0+cmVzZXRDdXJyZW50RHJhZ0luZm9y
bWF0aW9uKCk7Ci19Ci0KIHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlRHJhZ0xlYXZlKEd0
a1dpZGdldCogd2lkZ2V0LCBHZGtEcmFnQ29udGV4dCogY29udGV4dCwgZ3VpbnQgLyogdGltZSAq
LykKIHsKLSAgICBXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3aWRnZXQpLT5wcml2LT5kcmFnQW5kRHJv
cEhlbHBlci5oYW5kbGVEcmFnTGVhdmUoY29udGV4dCwgZHJhZ0V4aXRlZENhbGxiYWNrKTsKKyAg
ICBXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUqIHByaXYgPSBXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3
aWRnZXQpLT5wcml2OworICAgIEFTU0VSVChwcml2LT5kcmFnQW5kRHJvcEhhbmRsZXIpOworICAg
IHByaXYtPmRyYWdBbmREcm9wSGFuZGxlci0+ZHJhZ0xlYXZlKGNvbnRleHQpOwogfQogCiBzdGF0
aWMgZ2Jvb2xlYW4gd2Via2l0V2ViVmlld0Jhc2VEcmFnRHJvcChHdGtXaWRnZXQqIHdpZGdldCwg
R2RrRHJhZ0NvbnRleHQqIGNvbnRleHQsIGdpbnQgeCwgZ2ludCB5LCBndWludCB0aW1lKQogewot
ICAgIFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmFzZSA9IFdFQktJVF9XRUJfVklFV19CQVNF
KHdpZGdldCk7Ci0gICAgRGF0YU9iamVjdEd0ayogZGF0YU9iamVjdCA9IHdlYlZpZXdCYXNlLT5w
cml2LT5kcmFnQW5kRHJvcEhlbHBlci5oYW5kbGVEcmFnRHJvcChjb250ZXh0KTsKLSAgICBpZiAo
IWRhdGFPYmplY3QpCi0gICAgICAgIHJldHVybiBGQUxTRTsKLQotICAgIEludFBvaW50IHBvc2l0
aW9uKHgsIHkpOwotICAgIERyYWdEYXRhIGRyYWdEYXRhKGRhdGFPYmplY3QsIHBvc2l0aW9uLCBj
b252ZXJ0V2lkZ2V0UG9pbnRUb1NjcmVlblBvaW50KHdpZGdldCwgcG9zaXRpb24pLCBnZGtEcmFn
QWN0aW9uVG9EcmFnT3BlcmF0aW9uKGdka19kcmFnX2NvbnRleHRfZ2V0X2FjdGlvbnMoY29udGV4
dCkpKTsKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgaGFuZGxlOwotICAgIFNhbmRib3hF
eHRlbnNpb246OkhhbmRsZUFycmF5IHNhbmRib3hFeHRlbnNpb25Gb3JVcGxvYWQ7Ci0gICAgd2Vi
Vmlld0Jhc2UtPnByaXYtPnBhZ2VQcm94eS0+cGVyZm9ybURyYWdPcGVyYXRpb24oZHJhZ0RhdGEs
IFN0cmluZygpLCBoYW5kbGUsIHNhbmRib3hFeHRlbnNpb25Gb3JVcGxvYWQpOwotICAgIGd0a19k
cmFnX2ZpbmlzaChjb250ZXh0LCBUUlVFLCBGQUxTRSwgdGltZSk7Ci0gICAgcmV0dXJuIFRSVUU7
CisgICAgV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlKiBwcml2ID0gV0VCS0lUX1dFQl9WSUVXX0JB
U0Uod2lkZ2V0KS0+cHJpdjsKKyAgICBBU1NFUlQocHJpdi0+ZHJhZ0FuZERyb3BIYW5kbGVyKTsK
KyAgICByZXR1cm4gcHJpdi0+ZHJhZ0FuZERyb3BIYW5kbGVyLT5kcm9wKGNvbnRleHQsIEludFBv
aW50KHgsIHkpLCB0aW1lKTsKIH0KICNlbmRpZiAvLyBFTkFCTEUoRFJBR19TVVBQT1JUKQogCkBA
IC0xMTE1LDMxICsxMDYzLDEyIEBAIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VTZXRUb29sdGlwQXJl
YShXZWJLaXRXZWJWaWV3QmFzZSogd2ViVmlld0Jhc2UsIGNvbnN0IEludFJlCiB9CiAKICNpZiBF
TkFCTEUoRFJBR19TVVBQT1JUKQotdm9pZCB3ZWJraXRXZWJWaWV3QmFzZVN0YXJ0RHJhZyhXZWJL
aXRXZWJWaWV3QmFzZSogd2ViVmlld0Jhc2UsIGNvbnN0IERyYWdEYXRhJiBkcmFnRGF0YSwgUGFz
c1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGRyYWdJbWFnZSkKK0RyYWdBbmREcm9wSGFuZGxlciYg
d2Via2l0V2ViVmlld0Jhc2VEcmFnQW5kRHJvcEhhbmRsZXIoV2ViS2l0V2ViVmlld0Jhc2UqIHdl
YlZpZXdCYXNlKQogewogICAgIFdlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZSogcHJpdiA9IHdlYlZp
ZXdCYXNlLT5wcml2OwotCi0gICAgUmVmUHRyPERhdGFPYmplY3RHdGs+IGRhdGFPYmplY3QgPSBh
ZG9wdFJlZihkcmFnRGF0YS5wbGF0Zm9ybURhdGEoKSk7Ci0gICAgR1JlZlB0cjxHdGtUYXJnZXRM
aXN0PiB0YXJnZXRMaXN0ID0gYWRvcHRHUmVmKFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0
ZWJvYXJkSGVscGVyKCktPnRhcmdldExpc3RGb3JEYXRhT2JqZWN0KGRhdGFPYmplY3QuZ2V0KCkp
KTsKLSAgICBHVW5pcXVlUHRyPEdka0V2ZW50PiBjdXJyZW50RXZlbnQoZ3RrX2dldF9jdXJyZW50
X2V2ZW50KCkpOwotICAgIEdka0RyYWdDb250ZXh0KiBjb250ZXh0ID0gZ3RrX2RyYWdfYmVnaW4o
R1RLX1dJREdFVCh3ZWJWaWV3QmFzZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0YXJnZXRMaXN0LmdldCgpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZHJhZ09wZXJhdGlvblRvR2RrRHJhZ0FjdGlvbnMoZHJhZ0Rh
dGEuZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrKCkpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMSwgLyogYnV0dG9uICovCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50RXZlbnQuZ2V0KCkpOwotICAgIHBy
aXYtPmRyYWdBbmREcm9wSGVscGVyLnN0YXJ0ZWREcmFnKGNvbnRleHQsIGRhdGFPYmplY3QuZ2V0
KCkpOwotCi0KLSAgICAvLyBBIGRyYWcgc3RhcnRpbmcgc2hvdWxkIHByZXZlbnQgYSBkb3VibGUt
Y2xpY2sgZnJvbSBoYXBwZW5pbmcuIFRoaXMgbWlnaHQKLSAgICAvLyBoYXBwZW4gaWYgYSBkcmFn
IGlzIGZvbGxvd2VkIHZlcnkgcXVpY2tseSBieSBhbm90aGVyIGNsaWNrIChsaWtlIGluIHRoZSBE
UlQpLgotICAgIHByaXYtPmNsaWNrQ291bnRlci5yZXNldCgpOwotCi0gICAgaWYgKGRyYWdJbWFn
ZSkgewotICAgICAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBpbWFnZShkcmFnSW1hZ2UtPmNy
ZWF0ZUNhaXJvU3VyZmFjZSgpKTsKLSAgICAgICAgcHJpdi0+ZHJhZ0ljb24uc2V0SW1hZ2UoaW1h
Z2UuZ2V0KCkpOwotICAgICAgICBwcml2LT5kcmFnSWNvbi51c2VGb3JEcmFnKGNvbnRleHQpOwot
ICAgIH0gZWxzZQotICAgICAgICBndGtfZHJhZ19zZXRfaWNvbl9kZWZhdWx0KGNvbnRleHQpOwor
ICAgIGlmICghcHJpdi0+ZHJhZ0FuZERyb3BIYW5kbGVyKQorICAgICAgICBwcml2LT5kcmFnQW5k
RHJvcEhhbmRsZXIgPSBEcmFnQW5kRHJvcEhhbmRsZXI6OmNyZWF0ZSgqcHJpdi0+cGFnZVByb3h5
KTsKKyAgICByZXR1cm4gKnByaXYtPmRyYWdBbmREcm9wSGFuZGxlcjsKIH0KICNlbmRpZiAvLyBF
TkFCTEUoRFJBR19TVVBQT1JUKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oCmluZGV4IGI5ODdkZDYu
LmU0OTlkZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oCkBAIC0yOCw2ICsyOCw3IEBACiAjaWZu
ZGVmIFdlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZV9oCiAjZGVmaW5lIFdlYktpdFdlYlZpZXdCYXNl
UHJpdmF0ZV9oCiAKKyNpbmNsdWRlICJEcmFnQW5kRHJvcEhhbmRsZXIuaCIKICNpbmNsdWRlICJX
ZWJDb250ZXh0TWVudVByb3h5R3RrLmgiCiAjaW5jbHVkZSAiV2ViSW5zcGVjdG9yUHJveHkuaCIK
ICNpbmNsdWRlICJXZWJLaXRQcml2YXRlLmgiCkBAIC00MSw3ICs0Miw2IEBAIHZvaWQgd2Via2l0
V2ViVmlld0Jhc2VDcmVhdGVXZWJQYWdlKFdlYktpdFdlYlZpZXdCYXNlKiwgV2ViS2l0OjpXZWJD
b250ZXh0KiwgV2ViCiB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlU2V0VG9vbHRpcFRleHQoV2ViS2l0
V2ViVmlld0Jhc2UqLCBjb25zdCBjaGFyKik7CiB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlU2V0VG9v
bHRpcEFyZWEoV2ViS2l0V2ViVmlld0Jhc2UqLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CiB2
b2lkIHdlYmtpdFdlYlZpZXdCYXNlRm9yd2FyZE5leHRLZXlFdmVudChXZWJLaXRXZWJWaWV3QmFz
ZSopOwotdm9pZCB3ZWJraXRXZWJWaWV3QmFzZVN0YXJ0RHJhZyhXZWJLaXRXZWJWaWV3QmFzZSos
IGNvbnN0IFdlYkNvcmU6OkRyYWdEYXRhJiwgUGFzc1JlZlB0cjxXZWJLaXQ6OlNoYXJlYWJsZUJp
dG1hcD4gZHJhZ0ltYWdlKTsKIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VDaGlsZE1vdmVSZXNpemUo
V2ViS2l0V2ViVmlld0Jhc2UqLCBHdGtXaWRnZXQqLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7
CiB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlRW50ZXJGdWxsU2NyZWVuKFdlYktpdFdlYlZpZXdCYXNl
Kik7CiB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlRXhpdEZ1bGxTY3JlZW4oV2ViS2l0V2ViVmlld0Jh
c2UqKTsKQEAgLTc0LDQgKzc0LDggQEAgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZUNhbmNlbEF1dGhl
bnRpY2F0aW9uRGlhbG9nKFdlYktpdFdlYlZpZXdCYXNlKik7CiB2b2lkIHdlYmtpdFdlYlZpZXdC
YXNlQWRkV2ViSW5zcGVjdG9yKFdlYktpdFdlYlZpZXdCYXNlKiwgR3RrV2lkZ2V0KiBpbnNwZWN0
b3IsIFdlYktpdDo6QXR0YWNobWVudFNpZGUpOwogdm9pZCB3ZWJraXRXZWJWaWV3QmFzZVJlc2V0
Q2xpY2tDb3VudGVyKFdlYktpdFdlYlZpZXdCYXNlKik7CiAKKyNpZiBFTkFCTEUoRFJBR19TVVBQ
T1JUKQorV2ViS2l0OjpEcmFnQW5kRHJvcEhhbmRsZXImIHdlYmtpdFdlYlZpZXdCYXNlRHJhZ0Fu
ZERyb3BIYW5kbGVyKFdlYktpdFdlYlZpZXdCYXNlKik7CisjZW5kaWYKKwogI2VuZGlmIC8vIFdl
YktpdFdlYlZpZXdCYXNlUHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvZ3RrL0RyYWdBbmREcm9wSGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvZ3RrL0RyYWdBbmREcm9wSGFuZGxlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uNWFhNDhiYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9ndGsvRHJhZ0FuZERyb3BIYW5kbGVyLmNwcApAQCAtMCwwICsxLDI3NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNCBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiRHJhZ0FuZERyb3BIYW5kbGVyLmgiCisKKyNpZiBFTkFCTEUoRFJB
R19TVVBQT1JUKQorCisjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCisjaW5jbHVkZSA8V2ViQ29y
ZS9EYXRhT2JqZWN0R3RrLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9EcmFnRGF0YS5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvRHJhZ0ljb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dSZWZQdHJHdGsuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL0d0a1V0aWxpdGllcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGFz
dGVib2FyZEhlbHBlci5oPgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3dGYvZ29i
amVjdC9HTWFpbkxvb3BTb3VyY2UuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HVW5pcXVlUHRy
Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
c3RkOjp1bmlxdWVfcHRyPERyYWdBbmREcm9wSGFuZGxlcj4gRHJhZ0FuZERyb3BIYW5kbGVyOjpj
cmVhdGUoV2ViUGFnZVByb3h5JiBwYWdlKQoreworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8
RHJhZ0FuZERyb3BIYW5kbGVyPihuZXcgRHJhZ0FuZERyb3BIYW5kbGVyKHBhZ2UpKTsKK30KKwor
RHJhZ0FuZERyb3BIYW5kbGVyOjpEcmFnQW5kRHJvcEhhbmRsZXIoV2ViUGFnZVByb3h5JiBwYWdl
KQorICAgIDogbV9wYWdlKHBhZ2UpCit7Cit9CisKK0RyYWdBbmREcm9wSGFuZGxlcjo6RHJvcHBp
bmdDb250ZXh0OjpEcm9wcGluZ0NvbnRleHQoR2RrRHJhZ0NvbnRleHQqIGdka0NvbnRleHQsIGNv
bnN0IEludFBvaW50JiBwb3NpdGlvbikKKyAgICA6IGdka0NvbnRleHQoZ2RrQ29udGV4dCkKKyAg
ICAsIGRhdGFPYmplY3QoRGF0YU9iamVjdEd0azo6Y3JlYXRlKCkpCisgICAgLCBsYXN0TW90aW9u
UG9zaXRpb24ocG9zaXRpb24pCisgICAgLCBkcm9wSGFwcGVuZWQoZmFsc2UpCit7Cit9CisKK3N0
YXRpYyBpbmxpbmUgR2RrRHJhZ0FjdGlvbiBkcmFnT3BlcmF0aW9uVG9HZGtEcmFnQWN0aW9ucyhE
cmFnT3BlcmF0aW9uIGNvcmVBY3Rpb24pCit7CisgICAgR2RrRHJhZ0FjdGlvbiBnZGtBY3Rpb24g
PSBzdGF0aWNfY2FzdDxHZGtEcmFnQWN0aW9uPigwKTsKKyAgICBpZiAoY29yZUFjdGlvbiA9PSBE
cmFnT3BlcmF0aW9uTm9uZSkKKyAgICAgICAgcmV0dXJuIGdka0FjdGlvbjsKKworICAgIGlmIChj
b3JlQWN0aW9uICYgRHJhZ09wZXJhdGlvbkNvcHkpCisgICAgICAgIGdka0FjdGlvbiA9IHN0YXRp
Y19jYXN0PEdka0RyYWdBY3Rpb24+KEdES19BQ1RJT05fQ09QWSB8IGdka0FjdGlvbik7CisgICAg
aWYgKGNvcmVBY3Rpb24gJiBEcmFnT3BlcmF0aW9uTW92ZSkKKyAgICAgICAgZ2RrQWN0aW9uID0g
c3RhdGljX2Nhc3Q8R2RrRHJhZ0FjdGlvbj4oR0RLX0FDVElPTl9NT1ZFIHwgZ2RrQWN0aW9uKTsK
KyAgICBpZiAoY29yZUFjdGlvbiAmIERyYWdPcGVyYXRpb25MaW5rKQorICAgICAgICBnZGtBY3Rp
b24gPSBzdGF0aWNfY2FzdDxHZGtEcmFnQWN0aW9uPihHREtfQUNUSU9OX0xJTksgfCBnZGtBY3Rp
b24pOworICAgIGlmIChjb3JlQWN0aW9uICYgRHJhZ09wZXJhdGlvblByaXZhdGUpCisgICAgICAg
IGdka0FjdGlvbiA9IHN0YXRpY19jYXN0PEdka0RyYWdBY3Rpb24+KEdES19BQ1RJT05fUFJJVkFU
RSB8IGdka0FjdGlvbik7CisKKyAgICByZXR1cm4gZ2RrQWN0aW9uOworfQorCitzdGF0aWMgaW5s
aW5lIEdka0RyYWdBY3Rpb24gZHJhZ09wZXJhdGlvblRvU2luZ2xlR2RrRHJhZ0FjdGlvbihEcmFn
T3BlcmF0aW9uIGNvcmVBY3Rpb24pCit7CisgICAgaWYgKGNvcmVBY3Rpb24gPT0gRHJhZ09wZXJh
dGlvbkV2ZXJ5IHx8IGNvcmVBY3Rpb24gJiBEcmFnT3BlcmF0aW9uQ29weSkKKyAgICAgICAgcmV0
dXJuIEdES19BQ1RJT05fQ09QWTsKKyAgICBpZiAoY29yZUFjdGlvbiAmIERyYWdPcGVyYXRpb25N
b3ZlKQorICAgICAgICByZXR1cm4gR0RLX0FDVElPTl9NT1ZFOworICAgIGlmIChjb3JlQWN0aW9u
ICYgRHJhZ09wZXJhdGlvbkxpbmspCisgICAgICAgIHJldHVybiBHREtfQUNUSU9OX0xJTks7Cisg
ICAgaWYgKGNvcmVBY3Rpb24gJiBEcmFnT3BlcmF0aW9uUHJpdmF0ZSkKKyAgICAgICAgcmV0dXJu
IEdES19BQ1RJT05fUFJJVkFURTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R2RrRHJhZ0FjdGlv
bj4oMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgRHJhZ09wZXJhdGlvbiBnZGtEcmFnQWN0aW9uVG9E
cmFnT3BlcmF0aW9uKEdka0RyYWdBY3Rpb24gZ2RrQWN0aW9uKQoreworICAgIC8vIFdlIGhhdmUg
bm8gZ29vZCB3YXkgdG8gZGV0ZWN0IERyYWdPcGVyYXRpb25FdmVyeSBvdGhlciB0aGFuCisgICAg
Ly8gdG8gdXNlIGl0IHdoZW4gYWxsIGFwcGxpY2FibGUgZmxhZ3MgYXJlIG9uLgorICAgIGlmIChn
ZGtBY3Rpb24gJiBHREtfQUNUSU9OX0NPUFkKKyAgICAgICAgJiYgZ2RrQWN0aW9uICYgR0RLX0FD
VElPTl9NT1ZFCisgICAgICAgICYmIGdka0FjdGlvbiAmIEdES19BQ1RJT05fTElOSworICAgICAg
ICAmJiBnZGtBY3Rpb24gJiBHREtfQUNUSU9OX1BSSVZBVEUpCisgICAgICAgIHJldHVybiBEcmFn
T3BlcmF0aW9uRXZlcnk7CisKKyAgICB1bnNpZ25lZCBhY3Rpb24gPSBEcmFnT3BlcmF0aW9uTm9u
ZTsKKyAgICBpZiAoZ2RrQWN0aW9uICYgR0RLX0FDVElPTl9DT1BZKQorICAgICAgICBhY3Rpb24g
fD0gRHJhZ09wZXJhdGlvbkNvcHk7CisgICAgaWYgKGdka0FjdGlvbiAmIEdES19BQ1RJT05fTU9W
RSkKKyAgICAgICAgYWN0aW9uIHw9IERyYWdPcGVyYXRpb25Nb3ZlOworICAgIGlmIChnZGtBY3Rp
b24gJiBHREtfQUNUSU9OX0xJTkspCisgICAgICAgIGFjdGlvbiB8PSBEcmFnT3BlcmF0aW9uTGlu
azsKKyAgICBpZiAoZ2RrQWN0aW9uICYgR0RLX0FDVElPTl9QUklWQVRFKQorICAgICAgICBhY3Rp
b24gfD0gRHJhZ09wZXJhdGlvblByaXZhdGU7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PERyYWdP
cGVyYXRpb24+KGFjdGlvbik7Cit9CisKK3ZvaWQgRHJhZ0FuZERyb3BIYW5kbGVyOjpzdGFydERy
YWcoY29uc3QgRHJhZ0RhdGEmIGRyYWdEYXRhLCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4g
ZHJhZ0ltYWdlKQoreworICAgIFJlZlB0cjxEYXRhT2JqZWN0R3RrPiBkYXRhT2JqZWN0ID0gYWRv
cHRSZWYoZHJhZ0RhdGEucGxhdGZvcm1EYXRhKCkpOworICAgIEdSZWZQdHI8R3RrVGFyZ2V0TGlz
dD4gdGFyZ2V0TGlzdCA9IGFkb3B0R1JlZihQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVi
b2FyZEhlbHBlcigpLT50YXJnZXRMaXN0Rm9yRGF0YU9iamVjdChkYXRhT2JqZWN0LmdldCgpKSk7
CisgICAgR1VuaXF1ZVB0cjxHZGtFdmVudD4gY3VycmVudEV2ZW50KGd0a19nZXRfY3VycmVudF9l
dmVudCgpKTsKKworICAgIEdka0RyYWdDb250ZXh0KiBjb250ZXh0ID0gZ3RrX2RyYWdfYmVnaW4o
bV9wYWdlLnZpZXdXaWRnZXQoKSwgdGFyZ2V0TGlzdC5nZXQoKSwgZHJhZ09wZXJhdGlvblRvR2Rr
RHJhZ0FjdGlvbnMoZHJhZ0RhdGEuZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrKCkpLAorICAg
ICAgICBHREtfQlVUVE9OX1BSSU1BUlksIGN1cnJlbnRFdmVudC5nZXQoKSk7CisgICAgbV9kcmFn
Z2luZ0RhdGFPYmplY3RzLnNldChjb250ZXh0LCBkYXRhT2JqZWN0LmdldCgpKTsKKworICAgIGlm
IChkcmFnSW1hZ2UpIHsKKyAgICAgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gaW1hZ2UoZHJh
Z0ltYWdlLT5jcmVhdGVDYWlyb1N1cmZhY2UoKSk7CisgICAgICAgIG1fZHJhZ0ljb24uc2V0SW1h
Z2UoaW1hZ2UuZ2V0KCkpOworICAgICAgICBtX2RyYWdJY29uLnVzZUZvckRyYWcoY29udGV4dCk7
CisgICAgfSBlbHNlCisgICAgICAgIGd0a19kcmFnX3NldF9pY29uX2RlZmF1bHQoY29udGV4dCk7
Cit9CisKK3ZvaWQgRHJhZ0FuZERyb3BIYW5kbGVyOjpmaWxsRHJhZ0RhdGEoR2RrRHJhZ0NvbnRl
eHQqIGNvbnRleHQsIEd0a1NlbGVjdGlvbkRhdGEqIHNlbGVjdGlvbkRhdGEsIHVuc2lnbmVkIGlu
Zm8pCit7CisgICAgaWYgKERhdGFPYmplY3RHdGsqIGRhdGFPYmplY3QgPSBtX2RyYWdnaW5nRGF0
YU9iamVjdHMuZ2V0KGNvbnRleHQpKQorICAgICAgICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0
UGFzdGVib2FyZEhlbHBlcigpLT5maWxsU2VsZWN0aW9uRGF0YShzZWxlY3Rpb25EYXRhLCBpbmZv
LCBkYXRhT2JqZWN0KTsKK30KKwordm9pZCBEcmFnQW5kRHJvcEhhbmRsZXI6OmZpbmlzaERyYWco
R2RrRHJhZ0NvbnRleHQqIGNvbnRleHQpCit7CisgICAgaWYgKCFtX2RyYWdnaW5nRGF0YU9iamVj
dHMucmVtb3ZlKGNvbnRleHQpKQorICAgICAgICByZXR1cm47CisKKyAgICBHZGtEZXZpY2UqIGRl
dmljZSA9IGdka19kcmFnX2NvbnRleHRfZ2V0X2RldmljZShjb250ZXh0KTsKKyAgICBpbnQgeCA9
IDAsIHkgPSAwOworICAgIGdka19kZXZpY2VfZ2V0X3dpbmRvd19hdF9wb3NpdGlvbihkZXZpY2Us
ICZ4LCAmeSk7CisgICAgaW50IHhSb290ID0gMCwgeVJvb3QgPSAwOworICAgIGdka19kZXZpY2Vf
Z2V0X3Bvc2l0aW9uKGRldmljZSwgbnVsbHB0ciwgJnhSb290LCAmeVJvb3QpOworICAgIG1fcGFn
ZS5kcmFnRW5kZWQoSW50UG9pbnQoeCwgeSksIEludFBvaW50KHhSb290LCB5Um9vdCksIGdka0Ry
YWdBY3Rpb25Ub0RyYWdPcGVyYXRpb24oZ2RrX2RyYWdfY29udGV4dF9nZXRfc2VsZWN0ZWRfYWN0
aW9uKGNvbnRleHQpKSk7Cit9CisKK0RhdGFPYmplY3RHdGsqIERyYWdBbmREcm9wSGFuZGxlcjo6
ZGF0YU9iamVjdEZvckRyb3BEYXRhKEdka0RyYWdDb250ZXh0KiBjb250ZXh0LCBHdGtTZWxlY3Rp
b25EYXRhKiBzZWxlY3Rpb25EYXRhLCB1bnNpZ25lZCBpbmZvLCBJbnRQb2ludCYgcG9zaXRpb24p
Cit7CisgICAgRHJvcHBpbmdDb250ZXh0KiBkcm9wcGluZ0NvbnRleHQgPSBtX2Ryb3BwaW5nQ29u
dGV4dHMuZ2V0KGNvbnRleHQpOworICAgIGlmICghZHJvcHBpbmdDb250ZXh0KQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIGRyb3BwaW5nQ29udGV4dC0+cGVuZGluZ0RhdGFSZXF1ZXN0
cy0tOworICAgIFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPmZp
bGxEYXRhT2JqZWN0RnJvbURyb3BEYXRhKHNlbGVjdGlvbkRhdGEsIGluZm8sIGRyb3BwaW5nQ29u
dGV4dC0+ZGF0YU9iamVjdC5nZXQoKSk7CisgICAgaWYgKGRyb3BwaW5nQ29udGV4dC0+cGVuZGlu
Z0RhdGFSZXF1ZXN0cykKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAvLyBUaGUgY29v
cmRpbmF0ZXMgcGFzc2VkIHRvIGRyYWctZGF0YS1yZWNlaXZlZCBzaWduYWwgYXJlIHNvbWV0aW1l
cworICAgIC8vIGluYWNjdXJhdGUgaW4gV1RSLCBzbyB1c2UgdGhlIGNvb3JkaW5hdGVzIG9mIHRo
ZSBsYXN0IG1vdGlvbiBldmVudC4KKyAgICBwb3NpdGlvbiA9IGRyb3BwaW5nQ29udGV4dC0+bGFz
dE1vdGlvblBvc2l0aW9uOworCisgICAgLy8gSWYgdGhlcmUgYXJlIG5vIG1vcmUgcGVuZGluZyBy
ZXF1ZXN0cywgc3RhcnQgc2VuZGluZyBkcmFnZ2luZyBkYXRhIHRvIFdlYkNvcmUuCisgICAgcmV0
dXJuIGRyb3BwaW5nQ29udGV4dC0+ZGF0YU9iamVjdC5nZXQoKTsKK30KKwordm9pZCBEcmFnQW5k
RHJvcEhhbmRsZXI6OmRyYWdFbnRlcmVkKEdka0RyYWdDb250ZXh0KiBjb250ZXh0LCBHdGtTZWxl
Y3Rpb25EYXRhKiBzZWxlY3Rpb25EYXRhLCB1bnNpZ25lZCBpbmZvLCB1bnNpZ25lZCB0aW1lKQor
eworICAgIEludFBvaW50IHBvc2l0aW9uOworICAgIERhdGFPYmplY3RHdGsqIGRhdGFPYmplY3Qg
PSBkYXRhT2JqZWN0Rm9yRHJvcERhdGEoY29udGV4dCwgc2VsZWN0aW9uRGF0YSwgaW5mbywgcG9z
aXRpb24pOworICAgIGlmICghZGF0YU9iamVjdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgRHJh
Z0RhdGEgZHJhZ0RhdGEoZGF0YU9iamVjdCwgcG9zaXRpb24sIGNvbnZlcnRXaWRnZXRQb2ludFRv
U2NyZWVuUG9pbnQobV9wYWdlLnZpZXdXaWRnZXQoKSwgcG9zaXRpb24pLCBnZGtEcmFnQWN0aW9u
VG9EcmFnT3BlcmF0aW9uKGdka19kcmFnX2NvbnRleHRfZ2V0X2FjdGlvbnMoY29udGV4dCkpKTsK
KyAgICBtX3BhZ2UucmVzZXRDdXJyZW50RHJhZ0luZm9ybWF0aW9uKCk7CisgICAgbV9wYWdlLmRy
YWdFbnRlcmVkKGRyYWdEYXRhKTsKKyAgICBEcmFnT3BlcmF0aW9uIG9wZXJhdGlvbiA9IG1fcGFn
ZS5jdXJyZW50RHJhZ09wZXJhdGlvbigpOworICAgIGdka19kcmFnX3N0YXR1cyhjb250ZXh0LCBk
cmFnT3BlcmF0aW9uVG9TaW5nbGVHZGtEcmFnQWN0aW9uKG9wZXJhdGlvbiksIHRpbWUpOworfQor
CitEYXRhT2JqZWN0R3RrKiBEcmFnQW5kRHJvcEhhbmRsZXI6OnJlcXVlc3REcmFnRGF0YShHZGtE
cmFnQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uLCB1bnNpZ25lZCB0
aW1lKQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxEcm9wcGluZ0NvbnRleHQ+JiBkcm9wcGluZ0Nv
bnRleHQgPSBtX2Ryb3BwaW5nQ29udGV4dHMuYWRkKGNvbnRleHQsIG51bGxwdHIpLml0ZXJhdG9y
LT52YWx1ZTsKKyAgICBpZiAoIWRyb3BwaW5nQ29udGV4dCkgeworICAgICAgICBHdGtXaWRnZXQq
IHdpZGdldCA9IG1fcGFnZS52aWV3V2lkZ2V0KCk7CisgICAgICAgIGRyb3BwaW5nQ29udGV4dCA9
IHN0ZDo6bWFrZV91bmlxdWU8RHJvcHBpbmdDb250ZXh0Pihjb250ZXh0LCBwb3NpdGlvbik7Cisg
ICAgICAgIFZlY3RvcjxHZGtBdG9tPiBhY2NlcHRhYmxlVGFyZ2V0cyhQYXN0ZWJvYXJkSGVscGVy
OjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT5kcm9wQXRvbXNGb3JDb250ZXh0KHdpZGdldCwg
ZHJvcHBpbmdDb250ZXh0LT5nZGtDb250ZXh0KSk7CisgICAgICAgIGRyb3BwaW5nQ29udGV4dC0+
cGVuZGluZ0RhdGFSZXF1ZXN0cyA9IGFjY2VwdGFibGVUYXJnZXRzLnNpemUoKTsKKyAgICAgICAg
Zm9yIChhdXRvJiB0YXJnZXQgOiBhY2NlcHRhYmxlVGFyZ2V0cykKKyAgICAgICAgICAgIGd0a19k
cmFnX2dldF9kYXRhKHdpZGdldCwgZHJvcHBpbmdDb250ZXh0LT5nZGtDb250ZXh0LCB0YXJnZXQs
IHRpbWUpOworICAgIH0gZWxzZQorICAgICAgICBkcm9wcGluZ0NvbnRleHQtPmxhc3RNb3Rpb25Q
b3NpdGlvbiA9IHBvc2l0aW9uOworCisgICAgLy8gRG9uJ3Qgc2VuZCBhbnkgZHJhZyBpbmZvcm1h
dGlvbiB0byBXZWJDb3JlIHVudGlsIHdlJ3ZlIHJldHJpZXZlZCBhbGwgdGhlIGRhdGEgZm9yIHRo
aXMgZHJhZyBvcGVyYXRpb24uCisgICAgLy8gT3RoZXJ3aXNlIHdlJ2QgaGF2ZSB0byBibG9jayB0
byB3YWl0IGZvciB0aGUgZHJhZydzIGRhdGEuCisgICAgaWYgKGRyb3BwaW5nQ29udGV4dC0+cGVu
ZGluZ0RhdGFSZXF1ZXN0cyA+IDApCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0
dXJuIGRyb3BwaW5nQ29udGV4dC0+ZGF0YU9iamVjdC5nZXQoKTsKK30KKwordm9pZCBEcmFnQW5k
RHJvcEhhbmRsZXI6OmRyYWdNb3Rpb24oR2RrRHJhZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IElu
dFBvaW50JiBwb3NpdGlvbiwgdW5zaWduZWQgdGltZSkKK3sKKyAgICBEYXRhT2JqZWN0R3RrKiBk
YXRhT2JqZWN0ID0gcmVxdWVzdERyYWdEYXRhKGNvbnRleHQsIHBvc2l0aW9uLCB0aW1lKTsKKyAg
ICBpZiAoIWRhdGFPYmplY3QpCisgICAgICAgIHJldHVybjsKKworICAgIERyYWdEYXRhIGRyYWdE
YXRhKGRhdGFPYmplY3QsIHBvc2l0aW9uLCBjb252ZXJ0V2lkZ2V0UG9pbnRUb1NjcmVlblBvaW50
KG1fcGFnZS52aWV3V2lkZ2V0KCksIHBvc2l0aW9uKSwgZ2RrRHJhZ0FjdGlvblRvRHJhZ09wZXJh
dGlvbihnZGtfZHJhZ19jb250ZXh0X2dldF9hY3Rpb25zKGNvbnRleHQpKSk7CisgICAgbV9wYWdl
LmRyYWdVcGRhdGVkKGRyYWdEYXRhKTsKKyAgICBEcmFnT3BlcmF0aW9uIG9wZXJhdGlvbiA9IG1f
cGFnZS5jdXJyZW50RHJhZ09wZXJhdGlvbigpOworICAgIGdka19kcmFnX3N0YXR1cyhjb250ZXh0
LCBkcmFnT3BlcmF0aW9uVG9TaW5nbGVHZGtEcmFnQWN0aW9uKG9wZXJhdGlvbiksIHRpbWUpOwor
fQorCit2b2lkIERyYWdBbmREcm9wSGFuZGxlcjo6ZHJhZ0xlYXZlKEdka0RyYWdDb250ZXh0KiBj
b250ZXh0KQoreworICAgIERyb3BwaW5nQ29udGV4dCogZHJvcHBpbmdDb250ZXh0ID0gbV9kcm9w
cGluZ0NvbnRleHRzLmdldChjb250ZXh0KTsKKyAgICBpZiAoIWRyb3BwaW5nQ29udGV4dCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgLy8gRHVyaW5nIGEgZHJvcCBHVEsrIHdpbGwgZmlyZSBhIGRy
YWctbGVhdmUgc2lnbmFsIHJpZ2h0IGJlZm9yZSBmaXJpbmcKKyAgICAvLyB0aGUgZHJhZy1kcm9w
IHNpZ25hbC4gV2Ugd2FudCB0aGUgYWN0aW9ucyBmb3IgZHJhZy1sZWF2ZSB0byBoYXBwZW4gYWZ0
ZXIKKyAgICAvLyB0aG9zZSBmb3IgZHJhZy1kcm9wLCBzbyBzY2hlZHVsZSB0aGVtIHRvIGhhcHBl
biBhc3luY2hyb25vdXNseSBoZXJlLgorICAgIEdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGVBbmRE
ZWxldGVPbkRlc3Ryb3koIltXZWJLaXRdIGhhbmRsZURyYWdMZWF2ZUxhdGVyIiwgW3RoaXMsIGRy
b3BwaW5nQ29udGV4dF0oKSB7CisgICAgICAgIGF1dG8gaXQgPSBtX2Ryb3BwaW5nQ29udGV4dHMu
ZmluZChkcm9wcGluZ0NvbnRleHQtPmdka0NvbnRleHQpOworICAgICAgICBpZiAoaXQgPT0gbV9k
cm9wcGluZ0NvbnRleHRzLmVuZCgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIC8v
IElmIHRoZSB2aWV3IGRvZXNuJ3Qga25vdyBhYm91dCB0aGUgZHJhZyB5ZXQgKHRoZXJlIGFyZSBz
dGlsbCBwZW5kaW5nIGRhdGEgcmVxdWVzdHMpLAorICAgICAgICAvLyBkb24ndCB1cGRhdGUgaXQg
d2l0aCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZHJhZy4KKyAgICAgICAgaWYgKGRyb3BwaW5nQ29u
dGV4dC0+cGVuZGluZ0RhdGFSZXF1ZXN0cykKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICBpZiAoIWRyb3BwaW5nQ29udGV4dC0+ZHJvcEhhcHBlbmVkKSB7CisgICAgICAgICAgICAvLyBE
b24ndCBjYWxsIGRyYWdFeGl0ZWQgaWYgd2UgaGF2ZSBqdXN0IHJlY2VpdmVkIGEgZHJhZy1kcm9w
IHNpZ25hbC4gVGhpcworICAgICAgICAgICAgLy8gaGFwcGVucyBpbiB0aGUgY2FzZSBvZiBhIHN1
Y2Nlc3NmdWwgZHJvcCBvbnRvIHRoZSB2aWV3LgorICAgICAgICAgICAgY29uc3QgSW50UG9pbnQm
IHBvc2l0aW9uID0gZHJvcHBpbmdDb250ZXh0LT5sYXN0TW90aW9uUG9zaXRpb247CisgICAgICAg
ICAgICBEcmFnRGF0YSBkcmFnRGF0YShkcm9wcGluZ0NvbnRleHQtPmRhdGFPYmplY3QuZ2V0KCks
IHBvc2l0aW9uLCBjb252ZXJ0V2lkZ2V0UG9pbnRUb1NjcmVlblBvaW50KG1fcGFnZS52aWV3V2lk
Z2V0KCksIHBvc2l0aW9uKSwgRHJhZ09wZXJhdGlvbk5vbmUpOworICAgICAgICAgICAgbV9wYWdl
LmRyYWdFeGl0ZWQoZHJhZ0RhdGEpOworICAgICAgICAgICAgbV9wYWdlLnJlc2V0Q3VycmVudERy
YWdJbmZvcm1hdGlvbigpOworICAgICAgICB9CisKKyAgICAgICAgbV9kcm9wcGluZ0NvbnRleHRz
LnJlbW92ZShpdCk7CisgICAgfSk7Cit9CisKK2Jvb2wgRHJhZ0FuZERyb3BIYW5kbGVyOjpkcm9w
KEdka0RyYWdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRQb2ludCYgcG9zaXRpb24sIHVuc2ln
bmVkIHRpbWUpCit7CisgICAgRHJvcHBpbmdDb250ZXh0KiBkcm9wcGluZ0NvbnRleHQgPSBtX2Ry
b3BwaW5nQ29udGV4dHMuZ2V0KGNvbnRleHQpOworICAgIGlmICghZHJvcHBpbmdDb250ZXh0KQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBkcm9wcGluZ0NvbnRleHQtPmRyb3BIYXBwZW5l
ZCA9IHRydWU7CisKKyAgICBEYXRhT2JqZWN0R3RrKiBkYXRhT2JqZWN0ID0gZHJvcHBpbmdDb250
ZXh0LT5kYXRhT2JqZWN0LmdldCgpOworICAgIGlmICghZGF0YU9iamVjdCkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgRHJhZ0RhdGEgZHJhZ0RhdGEoZGF0YU9iamVjdCwgcG9zaXRpb24s
IGNvbnZlcnRXaWRnZXRQb2ludFRvU2NyZWVuUG9pbnQobV9wYWdlLnZpZXdXaWRnZXQoKSwgcG9z
aXRpb24pLCBnZGtEcmFnQWN0aW9uVG9EcmFnT3BlcmF0aW9uKGdka19kcmFnX2NvbnRleHRfZ2V0
X2FjdGlvbnMoY29udGV4dCkpKTsKKyAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgaGFuZGxl
OworICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5IHNhbmRib3hFeHRlbnNpb25Gb3JV
cGxvYWQ7CisgICAgbV9wYWdlLnBlcmZvcm1EcmFnT3BlcmF0aW9uKGRyYWdEYXRhLCBTdHJpbmco
KSwgaGFuZGxlLCBzYW5kYm94RXh0ZW5zaW9uRm9yVXBsb2FkKTsKKyAgICBndGtfZHJhZ19maW5p
c2goY29udGV4dCwgVFJVRSwgRkFMU0UsIHRpbWUpOworICAgIHJldHVybiB0cnVlOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShEUkFHX1NVUFBPUlQpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL0RyYWdBbmREcm9wSGFuZGxl
ci5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9EcmFnQW5kRHJvcEhhbmRsZXIuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTllNjI2Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9EcmFnQW5kRHJvcEhhbmRsZXIuaApA
QCAtMCwwICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IElnYWxpYSBTLkwuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgRHJhZ0FuZERyb3BIYW5kbGVyX2gKKyNkZWZpbmUgRHJhZ0FuZERy
b3BIYW5kbGVyX2gKKworI2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpCisKKyNpbmNsdWRlIDxXZWJD
b3JlL0RhdGFPYmplY3RHdGsuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0RyYWdJY29uLmg+CisjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKwordHlw
ZWRlZiBzdHJ1Y3QgX0dka0RyYWdDb250ZXh0IEdka0RyYWdDb250ZXh0OwordHlwZWRlZiBzdHJ1
Y3QgX0d0a1NlbGVjdGlvbkRhdGEgR3RrU2VsZWN0aW9uRGF0YTsKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworY2xhc3MgRHJhZ0RhdGE7CitjbGFzcyBJbnRQb2ludDsKK30KKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK2NsYXNzIFNoYXJlYWJsZUJpdG1hcDsKK2NsYXNzIFdlYlBhZ2VQcm94eTsKKwor
Y2xhc3MgRHJhZ0FuZERyb3BIYW5kbGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEcmFn
QW5kRHJvcEhhbmRsZXIpOworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8RHJh
Z0FuZERyb3BIYW5kbGVyPiBjcmVhdGUoV2ViUGFnZVByb3h5Jik7CisKKyAgICB2b2lkIHN0YXJ0
RHJhZyhjb25zdCBXZWJDb3JlOjpEcmFnRGF0YSYsIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFw
PiBkcmFnSW1hZ2UpOworICAgIHZvaWQgZmlsbERyYWdEYXRhKEdka0RyYWdDb250ZXh0KiwgR3Rr
U2VsZWN0aW9uRGF0YSosIHVuc2lnbmVkIGluZm8pOworICAgIHZvaWQgZmluaXNoRHJhZyhHZGtE
cmFnQ29udGV4dCopOworCisgICAgdm9pZCBkcmFnRW50ZXJlZChHZGtEcmFnQ29udGV4dCosIEd0
a1NlbGVjdGlvbkRhdGEqLCB1bnNpZ25lZCBpbmZvLCB1bnNpZ25lZCB0aW1lKTsKKyAgICB2b2lk
IGRyYWdNb3Rpb24oR2RrRHJhZ0NvbnRleHQqLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9z
aXRpb24sIHVuc2lnbmVkIHRpbWUpOworICAgIHZvaWQgZHJhZ0xlYXZlKEdka0RyYWdDb250ZXh0
Kik7CisgICAgYm9vbCBkcm9wKEdka0RyYWdDb250ZXh0KiwgY29uc3QgV2ViQ29yZTo6SW50UG9p
bnQmIHBvc2l0aW9uLCB1bnNpZ25lZCB0aW1lKTsKKworcHJpdmF0ZToKKyAgICBzdHJ1Y3QgRHJv
cHBpbmdDb250ZXh0IHsKKyAgICAgICAgRHJvcHBpbmdDb250ZXh0KEdka0RyYWdDb250ZXh0Kiwg
Y29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvc2l0aW9uKTsKKworICAgICAgICBHZGtEcmFnQ29u
dGV4dCogZ2RrQ29udGV4dDsKKyAgICAgICAgUmVmUHRyPFdlYkNvcmU6OkRhdGFPYmplY3RHdGs+
IGRhdGFPYmplY3Q7CisgICAgICAgIFdlYkNvcmU6OkludFBvaW50IGxhc3RNb3Rpb25Qb3NpdGlv
bjsKKyAgICAgICAgdW5zaWduZWQgcGVuZGluZ0RhdGFSZXF1ZXN0czsKKyAgICAgICAgYm9vbCBk
cm9wSGFwcGVuZWQ7CisgICAgfTsKKworICAgIERyYWdBbmREcm9wSGFuZGxlcihXZWJQYWdlUHJv
eHkmKTsKKworICAgIFdlYkNvcmU6OkRhdGFPYmplY3RHdGsqIGRhdGFPYmplY3RGb3JEcm9wRGF0
YShHZGtEcmFnQ29udGV4dCosIEd0a1NlbGVjdGlvbkRhdGEqLCB1bnNpZ25lZCBpbmZvLCBXZWJD
b3JlOjpJbnRQb2ludCYgcG9zaXRpb24pOworICAgIFdlYkNvcmU6OkRhdGFPYmplY3RHdGsqIHJl
cXVlc3REcmFnRGF0YShHZGtEcmFnQ29udGV4dCosIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBw
b3NpdGlvbiwgdW5zaWduZWQgdGltZSk7CisKKyAgICBXZWJQYWdlUHJveHkmIG1fcGFnZTsKKyAg
ICBXZWJDb3JlOjpEcmFnSWNvbiBtX2RyYWdJY29uOworICAgIEhhc2hNYXA8R2RrRHJhZ0NvbnRl
eHQqLCBzdGQ6OnVuaXF1ZV9wdHI8RHJvcHBpbmdDb250ZXh0Pj4gbV9kcm9wcGluZ0NvbnRleHRz
OworICAgIEhhc2hNYXA8R2RrRHJhZ0NvbnRleHQqLCBSZWZQdHI8V2ViQ29yZTo6RGF0YU9iamVj
dEd0az4+IG1fZHJhZ2dpbmdEYXRhT2JqZWN0czsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorCisjZW5kaWYgLy8gRU5BQkxFKERSQUdfU1VQUE9SVCkKKworI2VuZGlmIC8vIERyYWdBbmRE
cm9wSGFuZGxlcl9oCg==
</data>
<flag name="review"
          id="264772"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
      

    </bug>

</bugzilla>