<?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>14781</bug_id>
          
          <creation_ts>2007-07-27 04:47:15 -0700</creation_ts>
          <short_desc>[gtk] Make WebKitGtkPage not connect to its own signals but set/override the default handlers of GtkWidgetClass</short_desc>
          <delta_ts>2007-08-08 07:53:02 -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>New Bugs</component>
          <version>523.x (Safari 3)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</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>
          
          <blocked>14797</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Holger Freyther">zecke</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>3622</commentid>
    <comment_count>0</comment_count>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2007-07-27 04:47:15 -0700</bug_when>
    <thetext>As pointed out by xan now that WebKitGtkPage is a GtkLayout itself we should not connect the signals but properly set/override the default handlers.

The signatures of the signals we are interested in use the specific GdkEvent* structure instead of the GdkEvent union requiring adjustments to Platform*Event in WebCore.

The event handling code was moved from FrameGdk to WebKitGtkPage and at that time WebCore/platform/gdk/FrameGdk.{cpp,h} got killed and the needed stubs got moved to WebCore/page/gdk/FrameGdk.cpp. Some more code was moved to WebKitGtkPage (settings) and a semi internal method was moved to ImageGdk.cpp as it is the only place using this stub ATM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>3621</commentid>
    <comment_count>1</comment_count>
      <attachid>15703</attachid>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2007-07-27 04:51:13 -0700</bug_when>
    <thetext>Created attachment 15703
Use default handlers and adjust WebCore to make that happen

Primary Goal: Use GtkWidgetClass default handlers instead of connecting to our own signals

Kill FrameGdk, reintroduce it as stubs. Move FrameGdk methods to WebKitGtkPage, ImageGdk. Adjust Platform*Event to use GdkEvent* structure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>3507</commentid>
    <comment_count>2</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2007-07-29 10:36:35 -0700</bug_when>
    <thetext>Looks very good!
+static gboolean webkit_gtk_page_expose_event(GtkWidget* widget, GdkEventExpose* event)
+{
+    WebCore::Frame* frame = core(getFrameFromPage(WEBKIT_GTK_PAGE(widget)));
+    GdkRectangle clip;
+    gdk_region_get_clipbox(event-&gt;region, &amp;clip);
+    gdk_window_begin_paint_region(event-&gt;window, event-&gt;region);

Why calling gdk_window_begin_paint_region? All drawing in GTK is double buffered by default, and I don&apos;t see you disabling it.

+    gtk_container_forall(GTK_CONTAINER(widget), frame_gdk_expose_child, &amp;data);

GtkLayout should be doing this for you already, it isn&apos;t? Although I have to admit I don&apos;t get what you do in the handler, so...

+    gdk_window_end_paint(event-&gt;window);
+
+    return TRUE;

Maybe you want to return FALSE in the expose handler? It&apos;s not uncommon to connect to expose-event with g_signal_connect_after to do anything on the already drawn surface, returning TRUE it the default handler you are won&apos;t allow it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>3503</commentid>
    <comment_count>3</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2007-07-29 10:43:50 -0700</bug_when>
    <thetext>&gt; +    gtk_container_forall(GTK_CONTAINER(widget), frame_gdk_expose_child,
&gt; &amp;data);
&gt; 
&gt; GtkLayout should be doing this for you already, it isn&apos;t? Although I have to
&gt; admit I don&apos;t get what you do in the handler, so...

Actually, you need to chain with your parent&apos;s implementation of course :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>3427</commentid>
    <comment_count>4</comment_count>
      <attachid>15703</attachid>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2007-07-30 12:46:28 -0700</bug_when>
    <thetext>Comment on attachment 15703
Use default handlers and adjust WebCore to make that happen

Included in #14729</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>3428</commentid>
    <comment_count>5</comment_count>
      <attachid>15703</attachid>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2007-07-30 12:47:30 -0700</bug_when>
    <thetext>Comment on attachment 15703
Use default handlers and adjust WebCore to make that happen

Obsoleting it as well</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2840</commentid>
    <comment_count>6</comment_count>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2007-08-08 07:53:02 -0700</bug_when>
    <thetext>Mostly applied with patches on the 8th of August 2007.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>15703</attachid>
            <date>2007-07-27 04:51:13 -0700</date>
            <delta_ts>2007-07-30 12:47:30 -0700</delta_ts>
            <desc>Use default handlers and adjust WebCore to make that happen</desc>
            <filename>gtk-use-default-handlers-r0.patch</filename>
            <type>text/plain</type>
            <size>56488</size>
            <attacher name="Holger Freyther">zecke</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNDcxOCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDAgQEAKKzIwMDctMDctMjcgIEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyICA8
emVja2VAc2VsZmlzaC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgUmVtb3ZlIEZyYW1lR2RrLmggYW5kIEZyYW1lR2RrLmNwcCBmcm9tIFdlYkNv
cmUvcGxhdGZvcm0vZ2RrLCByZW1vdmUKKyAgICAgICAgRnJhbWVHZGsuaCBpbmNsdWRlcyBhbmQg
YWRkIHN0dWJzIHRvIFdlYkNvcmUvcGFnZS9nZGsvRnJhbWVHZGsuIFRoZQorICAgICAgICBldmVu
dCBoYW5kbGluZyBhbmQgc2V0dGluZyBjb2RlIHdhcyBtb3ZlZCB0byBXZWJLaXQvZ3RrL0FwaS93
ZWJraXRndGtwYWdlLmNwcC4KKworICAgICAgICBDaGFuZ2UgdGhlIFBsYXRmb3JtS2V5Ym9hcmRF
dmVudCwgUGxhdGZvcm1Nb3VzZUV2ZW50IGFuZCBQbGF0Zm9ybVdoZWVsRXZlbnQgdG8KKyAgICAg
ICAgbm90IHVzZSB0aGUgZ2VuZXJpYyBHZGtFdmVudCB1bmlvbiBidXQgdGhlIHNwZWNpZmljIEdk
a0V2ZW50QnV0dG9uLCBHZGtFdmVudE1vdGlvbiwKKyAgICAgICAgR2RrRXZlbnRTY3JvbGwgc3Ry
dWN0cy4gVGhpcyBpcyBuZWVkZWQgZm9yIFdlYktpdEd0a1BhZ2UgYmVjYXVzZSB3ZSBvdmVycmlk
ZSB0aGUgc3BlY2lmaWMKKyAgICAgICAgZGVmYXVsdCBoYW5kbGVycyBpbnN0ZWFkIG9mIEd0a1dp
ZGdldDo6ZXZlbnQgYW5kIGdldCBzcGVjaWZpYyBldmVudHMuCisKKyAgICAgICAgKiBXZWJDb3Jl
LnBybzoKKyAgICAgICAgKiBsb2FkZXIvZ2RrL0ZyYW1lTG9hZGVyQ2xpZW50R2RrLmNwcDoKKyAg
ICAgICAgKiBsb2FkZXIvZ2RrL0ZyYW1lTG9hZGVyQ2xpZW50R2RrLmg6CisgICAgICAgICogcGFn
ZS9nZGsvRnJhbWVHZGsuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpjbGVh
bnVwUGxhdGZvcm1TY3JpcHRPYmplY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpkcmFn
SW1hZ2VGb3JTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OmRhc2hib2FyZFJl
Z2lvbnNDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpzZXROZWVkc1JlYXBwbHlT
dHlsZXMpOgorICAgICAgICAqIHBsYXRmb3JtL1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oOgorICAg
ICAgICAqIHBsYXRmb3JtL1BsYXRmb3JtTW91c2VFdmVudC5oOgorICAgICAgICAqIHBsYXRmb3Jt
L1BsYXRmb3JtV2hlZWxFdmVudC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dkay9GcmFtZUdkay5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ2RrL0ZyYW1lR2RrLmg6IFJlbW92ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ2RrL0tleUV2ZW50R2RrLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6UGxhdGZvcm1LZXlib2FyZEV2ZW50KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9nZGsvTW91c2VFdmVudEdkay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQ
bGF0Zm9ybU1vdXNlRXZlbnQ6OlBsYXRmb3JtTW91c2VFdmVudCk6CisgICAgICAgICogcGxhdGZv
cm0vZ2RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ2RrL1do
ZWVsRXZlbnRHZGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1XaGVlbEV2ZW50OjpQ
bGF0Zm9ybVdoZWVsRXZlbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dkay9XaWRnZXRHZGsuY3Bw
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dkay9JbWFnZUdkay5jcHA6CisgICAgICAg
IChsb2FkUmVzb3VyY2VJbnRvQXJyYXkpOiBNb3ZlZCBmcm9tIHRoZSBvbGQgRnJhbWVHZGsuY3Bw
IGhlcmUgdW50aWwgd2UgaW1wbGVtZW50IGl0IGFuZCBtaWdodCBtb3ZlIGl0IHRvIFdlYktpdEd0
a1NldHRpbmdzCisKIDIwMDctMDctMjcgIFNpbW9uIEhhdXNtYW5uICA8aGF1c21hbm5Aa2RlLm9y
Zz4KIAogICAgICAgICBEb25lIHdpdGggYW5kIHJldmlld2VkIGJ5IExhcnMgYW5kIFphY2suCklu
ZGV4OiBXZWJDb3JlL1dlYkNvcmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5w
cm8JKHJldmlzaW9uIDI0NzE4KQorKysgV2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5
KQpAQCAtODU1LDYgKzg1NSw3IEBAIGdkay1wb3J0IHsKICAgICAgICAgcGxhdGZvcm0vVGV4dENv
ZGVjSUNVLmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL1RleHRCcmVha0l0ZXJhdG9ySUNVLmNwcCBc
CiAgICAgICAgIHBhZ2UvZ2RrL0V2ZW50SGFuZGxlckdkay5jcHAgXAorICAgICAgICBwYWdlL2dk
ay9GcmFtZUdkay5jcHAgXAogICAgICAgICBwYWdlL2dkay9Db250ZXh0TWVudUNsaWVudEdkay5j
cHAgXAogICAgICAgICBwYWdlL2dkay9EcmFnQ29udHJvbGxlckdkay5jcHAgXAogICAgICAgICBw
YWdlL2dkay9JbnNwZWN0b3JDbGllbnRHZGsuY3BwIFwKQEAgLTg2OSw3ICs4NzAsNiBAQCBnZGst
cG9ydCB7CiAgICAgICAgIHBsYXRmb3JtL2dkay9Gb250RGF0YUdkay5jcHAgXAogICAgICAgICBw
bGF0Zm9ybS9nZGsvRm9udEdkay5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9nZGsvRm9udFBsYXRm
b3JtRGF0YUdkay5jcHAgXAotICAgICAgICBwbGF0Zm9ybS9nZGsvRnJhbWVHZGsuY3BwIFwKICAg
ICAgICAgcGxhdGZvcm0vZ2RrL0dseXBoUGFnZVRyZWVOb2RlR2RrLmNwcCBcCiAgICAgICAgIHBs
YXRmb3JtL2dkay9LZXlFdmVudEdkay5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9nZGsvTG9nZ2lu
Z0dkay5jcHAgXApJbmRleDogV2ViQ29yZS9sb2FkZXIvZ2RrL0ZyYW1lTG9hZGVyQ2xpZW50R2Rr
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9nZGsvRnJhbWVMb2FkZXJDbGllbnRH
ZGsuY3BwCShyZXZpc2lvbiAyNDcxOCkKKysrIFdlYkNvcmUvbG9hZGVyL2dkay9GcmFtZUxvYWRl
ckNsaWVudEdkay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudEdkay5oIgogI2luY2x1ZGUg
IkRvY3VtZW50TG9hZGVyLmgiCi0jaW5jbHVkZSAiRnJhbWVHZGsuaCIKICNpbmNsdWRlICJGcmFt
ZUxvYWRlci5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKICNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgpJbmRleDogV2ViQ29yZS9sb2FkZXIvZ2RrL0ZyYW1lTG9hZGVyQ2xpZW50
R2RrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvZ2RrL0ZyYW1lTG9hZGVyQ2xpZW50
R2RrLmgJKHJldmlzaW9uIDI0NzE4KQorKysgV2ViQ29yZS9sb2FkZXIvZ2RrL0ZyYW1lTG9hZGVy
Q2xpZW50R2RrLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDkgKzM2LDYgQEAKIHR5cGVkZWYgc3Ry
dWN0IF9XZWJLaXRHdGtGcmFtZSBXZWJLaXRHdGtGcmFtZTsKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi0gICAgY2xhc3MgRnJhbWVHZGs7Ci0KICAgICBjbGFzcyBGcmFtZUxvYWRlckNsaWVudEdk
ayA6IHB1YmxpYyBGcmFtZUxvYWRlckNsaWVudCB7CiAgICAgcHVibGljOgogICAgICAgICBGcmFt
ZUxvYWRlckNsaWVudEdkayhXZWJLaXRHdGtGcmFtZSopOwpJbmRleDogV2ViQ29yZS9wYWdlL2dk
ay9GcmFtZUdkay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL2dkay9GcmFtZUdkay5j
cHAJKHJldmlzaW9uIDI0NzE4KQkoZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dkay9GcmFtZUdkay5j
cHA6MjQ3MTgpCisrKyBXZWJDb3JlL3BhZ2UvZ2RrL0ZyYW1lR2RrLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDI0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21w
dXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBN
aWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tIAorICogQ29weXJpZ2h0IChDKSAyMDA3
IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRnJhbWVHZGsuaCIKKworI2luY2x1
ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkRvY3VtZW50
TG9hZGVyLmgiCisjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCisjaW5jbHVkZSAiRnJhbWVMb2Fk
ZXIuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudEdkay5oIgorI2luY2x1ZGUgIkZyYW1l
UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgorI2luY2x1ZGUgIkhpdFRlc3RSZXF1ZXN0LmgiCisjaW5jbHVkZSAiSGl0VGVzdFJl
c3VsdC5oIgorI2luY2x1ZGUgIktleWJvYXJkQ29kZXMuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZl
bnQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJQbGF0Zm9y
bVN0cmluZy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgorI2luY2x1ZGUgIlJl
bmRlck9iamVjdC5oIgorI2luY2x1ZGUgIlJlbmRlclRyZWVBc1RleHQuaCIKKyNpbmNsdWRlICJS
ZXNvdXJjZUhhbmRsZS5oIgorI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKKyNpbmNsdWRl
ICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRl
ICJUeXBpbmdDb21tYW5kLmgiCisjaW5jbHVkZSAid2Via2l0Z3RrZnJhbWUuaCIKKworI2luY2x1
ZGUgPGdkay9nZGsuaD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisKKy8vIFRoaXMgZnVuY3Rpb24g
bG9hZHMgcmVzb3VyY2VzIGZyb20gV2ViS2l0CisvLyBUaGlzIGRvZXMgbm90IGJlbG9uZyBoZXJl
IGFuZCBJJ20gbm90IHN1cmUgd2hlcmUKKy8vIGl0IHNob3VsZCBnbworLy8gSSBkb24ndCBrbm93
IHdoYXQgdGhlIHBsYW5zIG9yIGRlc2lnbiBpcworLy8gZm9yIG5vbmUgY29kZSByZXNvdXJjZXMK
K1ZlY3RvcjxjaGFyPiBsb2FkUmVzb3VyY2VJbnRvQXJyYXkoY29uc3QgY2hhciogcmVzb3VyY2VO
YW1lKQoreworICAgIFZlY3RvcjxjaGFyPiByZXNvdXJjZTsKKyAgICAvL2lmIChzdHJjbXAocmVz
b3VyY2VOYW1lLCJtaXNzaW5nSW1hZ2UiKSA9PSAwKSB7CisgICAgLy99CisgICAgcmV0dXJuIHJl
c291cmNlOworfQorCitzdHJ1Y3QgRnJhbWVHZGtFeHBvc2VEYXRhIHsKKyAgICBHdGtDb250YWlu
ZXIgKmNvbnRhaW5lcjsKKyAgICBHZGtFdmVudEV4cG9zZSAqZXhwb3NlOworfTsKKworc3RhdGlj
IHZvaWQgZnJhbWVfZ2RrX2V4cG9zZV9jaGlsZChHdGtXaWRnZXQgKndpZGdldCwgZ3BvaW50ZXIg
X2RhdGEpCit7CisgICAgRnJhbWVHZGtFeHBvc2VEYXRhKiBkYXRhID0gKEZyYW1lR2RrRXhwb3Nl
RGF0YSopX2RhdGE7CisgICAgaW50IHdpZHRoLCBoZWlnaHQ7CisgICAgZ3RrX2NvbnRhaW5lcl9w
cm9wYWdhdGVfZXhwb3NlKGRhdGEtPmNvbnRhaW5lciwgd2lkZ2V0LCBkYXRhLT5leHBvc2UpOwor
fSAKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitGcmFtZUdkazo6RnJhbWVHZGsoUGFnZSogcGFn
ZSwgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lckVsZW1lbnQsIEZyYW1lTG9hZGVyQ2xpZW50
R2RrKiBmcmFtZUxvYWRlcikKKyAgICA6IEZyYW1lKHBhZ2UsIG93bmVyRWxlbWVudCwgZnJhbWVM
b2FkZXIpCit7CisgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gcGFnZS0+c2V0dGluZ3MoKTsKKyAg
ICBzZXR0aW5ncy0+c2V0TG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5KHRydWUpOworICAgIHNldHRp
bmdzLT5zZXRNaW5pbXVtRm9udFNpemUoNSk7CisgICAgc2V0dGluZ3MtPnNldE1pbmltdW1Mb2dp
Y2FsRm9udFNpemUoNSk7CisgICAgc2V0dGluZ3MtPnNldFNob3VsZFByaW50QmFja2dyb3VuZHMo
dHJ1ZSk7CisgICAgc2V0dGluZ3MtPnNldEphdmFTY3JpcHRFbmFibGVkKHRydWUpOworCisgICAg
c2V0dGluZ3MtPnNldERlZmF1bHRGaXhlZEZvbnRTaXplKDE0KTsKKyAgICBzZXR0aW5ncy0+c2V0
RGVmYXVsdEZvbnRTaXplKDE0KTsKKyAgICBzZXR0aW5ncy0+c2V0U2VyaWZGb250RmFtaWx5KCJU
aW1lcyBOZXcgUm9tYW4iKTsKKyAgICBzZXR0aW5ncy0+c2V0U2Fuc1NlcmlmRm9udEZhbWlseSgi
QXJpYWwiKTsKKyAgICBzZXR0aW5ncy0+c2V0Rml4ZWRGb250RmFtaWx5KCJDb3VyaWVyIik7Cisg
ICAgc2V0dGluZ3MtPnNldFN0YW5kYXJkRm9udEZhbWlseSgiQXJpYWwiKTsKK30KKworRnJhbWVH
ZGs6On5GcmFtZUdkaygpCit7CisgICAgbG9hZGVyKCktPmNhbmNlbEFuZENsZWFyKCk7Cit9CisK
K3ZvaWQgRnJhbWVHZGs6OmR1bXBSZW5kZXJUcmVlKCkgY29uc3QKK3sKKyAgICBpZiAodmlldygp
LT5uZWVkc0xheW91dCgpKQorICAgICAgICB2aWV3KCktPmxheW91dCgpOworICAgIAorICAgIFN0
cmluZyB0eHQgPSBleHRlcm5hbFJlcHJlc2VudGF0aW9uKHJlbmRlcmVyKCkpOworICAgIENTdHJp
bmcgdXRmOFN0ciA9IHR4dC51dGY4KCk7CisgICAgY29uc3QgY2hhciAqdXRmOCA9IHV0ZjhTdHIu
ZGF0YSgpOworICAgIGlmICh1dGY4KQorICAgICAgICBwcmludGYoIiVzXG4iLCB1dGY4KTsKKyAg
ICBlbHNlCisgICAgICAgIHByaW50ZigiRnJhbWVHZGs6OmR1bXBSZW5kZXJUcmVlKCkgbm8gZGF0
YVxuIik7Cit9CisKK2Jvb2wgRnJhbWVHZGs6OmtleVByZXNzKGNvbnN0IFBsYXRmb3JtS2V5Ym9h
cmRFdmVudCYga2V5RXZlbnQpCit7CisgICAgaWYgKCFldmVudEhhbmRsZXIoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIGV2ZW50SGFuZGxlcigpLT5rZXlFdmVudChrZXlF
dmVudCk7Cit9CisKK3ZvaWQgRnJhbWVHZGs6OmhhbmRsZUdka0V2ZW50KEdka0V2ZW50KiBldmVu
dCkKK3sKKyAgICBzd2l0Y2ggKGV2ZW50LT50eXBlKSB7CisKKyAgICAgICAgY2FzZSBHREtfRVhQ
T1NFOiB7CisgICAgICAgICAgICBHZGtSZWN0YW5nbGUgY2xpcDsKKyAgICAgICAgICAgIGdka19y
ZWdpb25fZ2V0X2NsaXBib3goZXZlbnQtPmV4cG9zZS5yZWdpb24sICZjbGlwKTsKKyAgICAgICAg
ICAgIGdka193aW5kb3dfYmVnaW5fcGFpbnRfcmVnaW9uKGV2ZW50LT5hbnkud2luZG93LCBldmVu
dC0+ZXhwb3NlLnJlZ2lvbik7CisgICAgICAgICAgICBjYWlyb190KiBjciA9IGdka19jYWlyb19j
cmVhdGUoZXZlbnQtPmFueS53aW5kb3cpOworICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0IGN0
eChjcik7CisgICAgICAgICAgICBjdHguc2V0R2RrRHJhd2FibGUoZXZlbnQtPmFueS53aW5kb3cp
OworICAgICAgICAgICAgaWYgKHJlbmRlcmVyKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAodmll
dygpLT5uZWVkc0xheW91dCgpKQorICAgICAgICAgICAgICAgICAgICB2aWV3KCktPmxheW91dCgp
OworICAgICAgICAgICAgICAgIEludFJlY3QgcmVjdChjbGlwLngsIGNsaXAueSwgY2xpcC53aWR0
aCwgY2xpcC5oZWlnaHQpOworICAgICAgICAgICAgICAgIHBhaW50KCZjdHgsIHJlY3QpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgY2Fpcm9fZGVzdHJveShjcik7CisKKyAgICAgICAgICAg
IC8qCisgICAgICAgICAgICAgKiBNYWtlIHN1cmUgY2hpbGRyZW4gb2YgdGhlIHZpZXcgZ2V0IHJl
ZHJhd24KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgRnJhbWVHZGtFeHBvc2VEYXRhIGRh
dGEgPSB7IEdUS19DT05UQUlORVIodmlldygpLT5ndGtXaWRnZXQoKSksICZldmVudC0+ZXhwb3Nl
IH07CisgICAgICAgICAgICBndGtfY29udGFpbmVyX2ZvcmFsbChHVEtfQ09OVEFJTkVSKHZpZXco
KS0+Z3RrV2lkZ2V0KCkpLCBmcmFtZV9nZGtfZXhwb3NlX2NoaWxkLCAmZGF0YSk7CisgICAgICAg
ICAgICBnZGtfd2luZG93X2VuZF9wYWludChldmVudC0+YW55LndpbmRvdyk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBHREtfQ09O
RklHVVJFOiB7CisgICAgICAgICAgICB2aWV3KCktPnVwZGF0ZUdlb21ldHJ5KGV2ZW50LT5jb25m
aWd1cmUud2lkdGgsIGV2ZW50LT5jb25maWd1cmUuaGVpZ2h0KTsKKyAgICAgICAgICAgIGZvcmNl
TGF5b3V0KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2Ug
R0RLX1NDUk9MTDogeworICAgICAgICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50IHdoZWVsRXZlbnQo
ZXZlbnQpOworICAgICAgICAgICAgdmlldygpLT53aGVlbEV2ZW50KHdoZWVsRXZlbnQpOworICAg
ICAgICAgICAgaWYgKHdoZWVsRXZlbnQuaXNBY2NlcHRlZCgpKQorICAgICAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICAgICAgSGl0VGVzdFJlcXVlc3QgaGl0VGVzdFJlcXVlc3QodHJ1ZSwg
dHJ1ZSk7CisgICAgICAgICAgICBIaXRUZXN0UmVzdWx0IGhpdFRlc3RSZXN1bHQod2hlZWxFdmVu
dC5wb3MoKSk7CisgICAgICAgICAgICByZW5kZXJlcigpLT5sYXllcigpLT5oaXRUZXN0KGhpdFRl
c3RSZXF1ZXN0LCBoaXRUZXN0UmVzdWx0KTsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBoaXRU
ZXN0UmVzdWx0LmlubmVyTm9kZSgpOworICAgICAgICAgICAgaWYgKCFub2RlKQorICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBGSVhNRTogRG9l
cyB0aGlzIGJlbG9uZyBoZXJlPworICAgICAgICAgICAgICogRGVmYXVsdCB0byBzY3JvbGxpbmcg
dGhlIHBhZ2UKKyAgICAgICAgICAgICAqIG5vdCBzdXJlIHdoeSBpdHMgbnVsbAorICAgICAgICAg
ICAgICogYnJva2UgYW55d2F5IHdoZW4gaXRzIG5vdCBudWxsCisgICAgICAgICAgICAgKiBkb1Nj
cm9sbChyZW5kZXJlcigpLCB3aGVlbEV2ZW50LmRlbHRhWCgpLCB3aGVlbEV2ZW50LmRlbHRhWSgp
KTsKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgY2FzZSBHREtfRFJBR19FTlRFUjoKKyAgICAgICAgY2FzZSBHREtfRFJBR19MRUFWRToKKyAg
ICAgICAgY2FzZSBHREtfRFJBR19NT1RJT046CisgICAgICAgIGNhc2UgR0RLX0RSQUdfU1RBVFVT
OgorICAgICAgICBjYXNlIEdES19EUk9QX1NUQVJUOgorICAgICAgICBjYXNlIEdES19EUk9QX0ZJ
TklTSEVEOiB7CisgICAgICAgICAgICAvL2Jvb2wgdXBkYXRlRHJhZ0FuZERyb3AoY29uc3QgUGxh
dGZvcm1Nb3VzZUV2ZW50JiwgQ2xpcGJvYXJkKik7CisgICAgICAgICAgICAvL3ZvaWQgY2FuY2Vs
RHJhZ0FuZERyb3AoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiwgQ2xpcGJvYXJkKik7CisgICAg
ICAgICAgICAvL2Jvb2wgcGVyZm9ybURyYWdBbmREcm9wKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVu
dCYsIENsaXBib2FyZCopOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBHREtfTU9USU9OX05PVElGWToKKyAgICAgICAgICAgIGV2ZW50SGFuZGxlcigpLT5tb3Vz
ZU1vdmVkKFBsYXRmb3JtTW91c2VFdmVudChldmVudCkpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgR0RLX0JVVFRPTl9QUkVTUzoKKyAgICAgICAgY2FzZSBHREtfMkJVVFRPTl9Q
UkVTUzoKKyAgICAgICAgY2FzZSBHREtfM0JVVFRPTl9QUkVTUzoKKyAgICAgICAgICAgIGV2ZW50
SGFuZGxlcigpLT5oYW5kbGVNb3VzZVByZXNzRXZlbnQoUGxhdGZvcm1Nb3VzZUV2ZW50KGV2ZW50
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHREtfQlVUVE9OX1JFTEVBU0U6
CisgICAgICAgICAgICBldmVudEhhbmRsZXIoKS0+aGFuZGxlTW91c2VSZWxlYXNlRXZlbnQoUGxh
dGZvcm1Nb3VzZUV2ZW50KGV2ZW50KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBHREtfS0VZX1BSRVNTOgorICAgICAgICBjYXNlIEdES19LRVlfUkVMRUFTRTogeworICAgICAg
ICAgICAgUGxhdGZvcm1LZXlib2FyZEV2ZW50IGtleUV2ZW50KGV2ZW50KTsKKyAgICAgICAgICAg
IGtleVByZXNzKGtleUV2ZW50KTsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIEZyYW1lOjppc3N1ZVRyYW5zcG9zZUNvbW1h
bmQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRnJhbWU6OmNsZWFudXBQ
bGF0Zm9ybVNjcmlwdE9iamVjdHMoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK0Ry
YWdJbWFnZVJlZiBGcmFtZTo6ZHJhZ0ltYWdlRm9yU2VsZWN0aW9uKCkgCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBGcmFtZTo6ZGFzaGJvYXJkUmVn
aW9uc0NoYW5nZWQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK30KSW5kZXg6IFdl
YkNvcmUvcGFnZS9nZGsvRnJhbWVHZGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9n
ZGsvRnJhbWVHZGsuY3BwCShyZXZpc2lvbiAyNDcxOCkKKysrIFdlYkNvcmUvcGFnZS9nZGsvRnJh
bWVHZGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDI0MSArMSw2MiBAQAogLyoKICAqIENvcHly
aWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29t
IAorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5j
b20KICAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgotICog
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4g
IE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMg
b2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRnJh
bWVHZGsuaCIKLQotI2luY2x1ZGUgIkNTdHJpbmcuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgot
I2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCi0jaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCi0j
aW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudEdkay5o
IgotI2luY2x1ZGUgIkZyYW1lUHJpdmF0ZS5oIgotI2luY2x1ZGUgIkZyYW1lVmlldy5oIgotI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkhpdFRlc3RSZXF1ZXN0LmgiCi0j
aW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgotI2luY2x1ZGUgIktleWJvYXJkQ29kZXMuaCIKKyNp
bmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAi
UGFnZS5oIgotI2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgotI2luY2x1ZGUgIlBs
YXRmb3JtTW91c2VFdmVudC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVk
ZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCi0jaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCi0jaW5j
bHVkZSAiUmVuZGVyVHJlZUFzVGV4dC5oIgotI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCi0j
aW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgotI2luY2x1ZGUgIlNlbGVjdGlvbkNvbnRyb2xs
ZXIuaCIKLSNpbmNsdWRlICJTZXR0aW5ncy5oIgotI2luY2x1ZGUgIlR5cGluZ0NvbW1hbmQuaCIK
LSNpbmNsdWRlICJ3ZWJraXRndGtmcmFtZS5oIgotCi0jaW5jbHVkZSA8Z2RrL2dkay5oPgotI2lu
Y2x1ZGUgPGd0ay9ndGsuaD4KLQotLy8gVGhpcyBmdW5jdGlvbiBsb2FkcyByZXNvdXJjZXMgZnJv
bSBXZWJLaXQKLS8vIFRoaXMgZG9lcyBub3QgYmVsb25nIGhlcmUgYW5kIEknbSBub3Qgc3VyZSB3
aGVyZQotLy8gaXQgc2hvdWxkIGdvCi0vLyBJIGRvbid0IGtub3cgd2hhdCB0aGUgcGxhbnMgb3Ig
ZGVzaWduIGlzCi0vLyBmb3Igbm9uZSBjb2RlIHJlc291cmNlcwotVmVjdG9yPGNoYXI+IGxvYWRS
ZXNvdXJjZUludG9BcnJheShjb25zdCBjaGFyKiByZXNvdXJjZU5hbWUpCi17Ci0gICAgVmVjdG9y
PGNoYXI+IHJlc291cmNlOwotICAgIC8vaWYgKHN0cmNtcChyZXNvdXJjZU5hbWUsIm1pc3NpbmdJ
bWFnZSIpID09IDApIHsKLSAgICAvL30KLSAgICByZXR1cm4gcmVzb3VyY2U7Ci19CiAKLXN0cnVj
dCBGcmFtZUdka0V4cG9zZURhdGEgewotICAgIEd0a0NvbnRhaW5lciAqY29udGFpbmVyOwotICAg
IEdka0V2ZW50RXhwb3NlICpleHBvc2U7Ci19OwotCi1zdGF0aWMgdm9pZCBmcmFtZV9nZGtfZXhw
b3NlX2NoaWxkKEd0a1dpZGdldCAqd2lkZ2V0LCBncG9pbnRlciBfZGF0YSkKLXsKLSAgICBGcmFt
ZUdka0V4cG9zZURhdGEqIGRhdGEgPSAoRnJhbWVHZGtFeHBvc2VEYXRhKilfZGF0YTsKLSAgICBp
bnQgd2lkdGgsIGhlaWdodDsKLSAgICBndGtfY29udGFpbmVyX3Byb3BhZ2F0ZV9leHBvc2UoZGF0
YS0+Y29udGFpbmVyLCB3aWRnZXQsIGRhdGEtPmV4cG9zZSk7Ci19IAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLUZyYW1lR2RrOjpGcmFtZUdkayhQYWdlKiBwYWdlLCBIVE1MRnJhbWVPd25lckVs
ZW1lbnQqIG93bmVyRWxlbWVudCwgRnJhbWVMb2FkZXJDbGllbnRHZGsqIGZyYW1lTG9hZGVyKQot
ICAgIDogRnJhbWUocGFnZSwgb3duZXJFbGVtZW50LCBmcmFtZUxvYWRlcikKLXsKLSAgICBTZXR0
aW5ncyogc2V0dGluZ3MgPSBwYWdlLT5zZXR0aW5ncygpOwotICAgIHNldHRpbmdzLT5zZXRMb2Fk
c0ltYWdlc0F1dG9tYXRpY2FsbHkodHJ1ZSk7Ci0gICAgc2V0dGluZ3MtPnNldE1pbmltdW1Gb250
U2l6ZSg1KTsKLSAgICBzZXR0aW5ncy0+c2V0TWluaW11bUxvZ2ljYWxGb250U2l6ZSg1KTsKLSAg
ICBzZXR0aW5ncy0+c2V0U2hvdWxkUHJpbnRCYWNrZ3JvdW5kcyh0cnVlKTsKLSAgICBzZXR0aW5n
cy0+c2V0SmF2YVNjcmlwdEVuYWJsZWQodHJ1ZSk7Ci0KLSAgICBzZXR0aW5ncy0+c2V0RGVmYXVs
dEZpeGVkRm9udFNpemUoMTQpOwotICAgIHNldHRpbmdzLT5zZXREZWZhdWx0Rm9udFNpemUoMTQp
OwotICAgIHNldHRpbmdzLT5zZXRTZXJpZkZvbnRGYW1pbHkoIlRpbWVzIE5ldyBSb21hbiIpOwot
ICAgIHNldHRpbmdzLT5zZXRTYW5zU2VyaWZGb250RmFtaWx5KCJBcmlhbCIpOwotICAgIHNldHRp
bmdzLT5zZXRGaXhlZEZvbnRGYW1pbHkoIkNvdXJpZXIiKTsKLSAgICBzZXR0aW5ncy0+c2V0U3Rh
bmRhcmRGb250RmFtaWx5KCJBcmlhbCIpOwotfQotCi1GcmFtZUdkazo6fkZyYW1lR2RrKCkKLXsK
LSAgICBsb2FkZXIoKS0+Y2FuY2VsQW5kQ2xlYXIoKTsKLX0KLQotdm9pZCBGcmFtZUdkazo6ZHVt
cFJlbmRlclRyZWUoKSBjb25zdAotewotICAgIGlmICh2aWV3KCktPm5lZWRzTGF5b3V0KCkpCi0g
ICAgICAgIHZpZXcoKS0+bGF5b3V0KCk7Ci0gICAgCi0gICAgU3RyaW5nIHR4dCA9IGV4dGVybmFs
UmVwcmVzZW50YXRpb24ocmVuZGVyZXIoKSk7Ci0gICAgQ1N0cmluZyB1dGY4U3RyID0gdHh0LnV0
ZjgoKTsKLSAgICBjb25zdCBjaGFyICp1dGY4ID0gdXRmOFN0ci5kYXRhKCk7Ci0gICAgaWYgKHV0
ZjgpCi0gICAgICAgIHByaW50ZigiJXNcbiIsIHV0ZjgpOwotICAgIGVsc2UKLSAgICAgICAgcHJp
bnRmKCJGcmFtZUdkazo6ZHVtcFJlbmRlclRyZWUoKSBubyBkYXRhXG4iKTsKLX0KLQotYm9vbCBG
cmFtZUdkazo6a2V5UHJlc3MoY29uc3QgUGxhdGZvcm1LZXlib2FyZEV2ZW50JiBrZXlFdmVudCkK
LXsKLSAgICBpZiAoIWV2ZW50SGFuZGxlcigpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICByZXR1cm4gZXZlbnRIYW5kbGVyKCktPmtleUV2ZW50KGtleUV2ZW50KTsKLX0KLQotdm9pZCBG
cmFtZUdkazo6aGFuZGxlR2RrRXZlbnQoR2RrRXZlbnQqIGV2ZW50KQotewotICAgIHN3aXRjaCAo
ZXZlbnQtPnR5cGUpIHsKLQotICAgICAgICBjYXNlIEdES19FWFBPU0U6IHsKLSAgICAgICAgICAg
IEdka1JlY3RhbmdsZSBjbGlwOwotICAgICAgICAgICAgZ2RrX3JlZ2lvbl9nZXRfY2xpcGJveChl
dmVudC0+ZXhwb3NlLnJlZ2lvbiwgJmNsaXApOwotICAgICAgICAgICAgZ2RrX3dpbmRvd19iZWdp
bl9wYWludF9yZWdpb24oZXZlbnQtPmFueS53aW5kb3csIGV2ZW50LT5leHBvc2UucmVnaW9uKTsK
LSAgICAgICAgICAgIGNhaXJvX3QqIGNyID0gZ2RrX2NhaXJvX2NyZWF0ZShldmVudC0+YW55Lndp
bmRvdyk7Ci0gICAgICAgICAgICBHcmFwaGljc0NvbnRleHQgY3R4KGNyKTsKLSAgICAgICAgICAg
IGN0eC5zZXRHZGtEcmF3YWJsZShldmVudC0+YW55LndpbmRvdyk7Ci0gICAgICAgICAgICBpZiAo
cmVuZGVyZXIoKSkgewotICAgICAgICAgICAgICAgIGlmICh2aWV3KCktPm5lZWRzTGF5b3V0KCkp
Ci0gICAgICAgICAgICAgICAgICAgIHZpZXcoKS0+bGF5b3V0KCk7Ci0gICAgICAgICAgICAgICAg
SW50UmVjdCByZWN0KGNsaXAueCwgY2xpcC55LCBjbGlwLndpZHRoLCBjbGlwLmhlaWdodCk7Ci0g
ICAgICAgICAgICAgICAgcGFpbnQoJmN0eCwgcmVjdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBjYWlyb19kZXN0cm95KGNyKTsKLQotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAq
IE1ha2Ugc3VyZSBjaGlsZHJlbiBvZiB0aGUgdmlldyBnZXQgcmVkcmF3bgotICAgICAgICAgICAg
ICovCi0gICAgICAgICAgICBGcmFtZUdka0V4cG9zZURhdGEgZGF0YSA9IHsgR1RLX0NPTlRBSU5F
Uih2aWV3KCktPmd0a1dpZGdldCgpKSwgJmV2ZW50LT5leHBvc2UgfTsKLSAgICAgICAgICAgIGd0
a19jb250YWluZXJfZm9yYWxsKEdUS19DT05UQUlORVIodmlldygpLT5ndGtXaWRnZXQoKSksIGZy
YW1lX2dka19leHBvc2VfY2hpbGQsICZkYXRhKTsKLSAgICAgICAgICAgIGdka193aW5kb3dfZW5k
X3BhaW50KGV2ZW50LT5hbnkud2luZG93KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIEdES19DT05GSUdVUkU6IHsKLSAgICAgICAg
ICAgIHZpZXcoKS0+dXBkYXRlR2VvbWV0cnkoZXZlbnQtPmNvbmZpZ3VyZS53aWR0aCwgZXZlbnQt
PmNvbmZpZ3VyZS5oZWlnaHQpOwotICAgICAgICAgICAgZm9yY2VMYXlvdXQoKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBHREtfU0NST0xMOiB7Ci0gICAg
ICAgICAgICBQbGF0Zm9ybVdoZWVsRXZlbnQgd2hlZWxFdmVudChldmVudCk7Ci0gICAgICAgICAg
ICB2aWV3KCktPndoZWVsRXZlbnQod2hlZWxFdmVudCk7Ci0gICAgICAgICAgICBpZiAod2hlZWxF
dmVudC5pc0FjY2VwdGVkKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAg
ICBIaXRUZXN0UmVxdWVzdCBoaXRUZXN0UmVxdWVzdCh0cnVlLCB0cnVlKTsKLSAgICAgICAgICAg
IEhpdFRlc3RSZXN1bHQgaGl0VGVzdFJlc3VsdCh3aGVlbEV2ZW50LnBvcygpKTsKLSAgICAgICAg
ICAgIHJlbmRlcmVyKCktPmxheWVyKCktPmhpdFRlc3QoaGl0VGVzdFJlcXVlc3QsIGhpdFRlc3RS
ZXN1bHQpOwotICAgICAgICAgICAgTm9kZSogbm9kZSA9IGhpdFRlc3RSZXN1bHQuaW5uZXJOb2Rl
KCk7Ci0gICAgICAgICAgICBpZiAoIW5vZGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIEZJWE1FOiBEb2VzIHRoaXMgYmVsb25nIGhlcmU/
Ci0gICAgICAgICAgICAgKiBEZWZhdWx0IHRvIHNjcm9sbGluZyB0aGUgcGFnZQotICAgICAgICAg
ICAgICogbm90IHN1cmUgd2h5IGl0cyBudWxsCi0gICAgICAgICAgICAgKiBicm9rZSBhbnl3YXkg
d2hlbiBpdHMgbm90IG51bGwKLSAgICAgICAgICAgICAqIGRvU2Nyb2xsKHJlbmRlcmVyKCksIHdo
ZWVsRXZlbnQuZGVsdGFYKCksIHdoZWVsRXZlbnQuZGVsdGFZKCkpOwotICAgICAgICAgICAgICov
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEdES19EUkFHX0VO
VEVSOgotICAgICAgICBjYXNlIEdES19EUkFHX0xFQVZFOgotICAgICAgICBjYXNlIEdES19EUkFH
X01PVElPTjoKLSAgICAgICAgY2FzZSBHREtfRFJBR19TVEFUVVM6Ci0gICAgICAgIGNhc2UgR0RL
X0RST1BfU1RBUlQ6Ci0gICAgICAgIGNhc2UgR0RLX0RST1BfRklOSVNIRUQ6IHsKLSAgICAgICAg
ICAgIC8vYm9vbCB1cGRhdGVEcmFnQW5kRHJvcChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmLCBD
bGlwYm9hcmQqKTsKLSAgICAgICAgICAgIC8vdm9pZCBjYW5jZWxEcmFnQW5kRHJvcChjb25zdCBQ
bGF0Zm9ybU1vdXNlRXZlbnQmLCBDbGlwYm9hcmQqKTsKLSAgICAgICAgICAgIC8vYm9vbCBwZXJm
b3JtRHJhZ0FuZERyb3AoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiwgQ2xpcGJvYXJkKik7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEdES19NT1RJT05fTk9U
SUZZOgotICAgICAgICAgICAgZXZlbnRIYW5kbGVyKCktPm1vdXNlTW92ZWQoUGxhdGZvcm1Nb3Vz
ZUV2ZW50KGV2ZW50KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHREtfQlVU
VE9OX1BSRVNTOgotICAgICAgICBjYXNlIEdES18yQlVUVE9OX1BSRVNTOgotICAgICAgICBjYXNl
IEdES18zQlVUVE9OX1BSRVNTOgotICAgICAgICAgICAgZXZlbnRIYW5kbGVyKCktPmhhbmRsZU1v
dXNlUHJlc3NFdmVudChQbGF0Zm9ybU1vdXNlRXZlbnQoZXZlbnQpKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEdES19CVVRUT05fUkVMRUFTRToKLSAgICAgICAgICAgIGV2ZW50
SGFuZGxlcigpLT5oYW5kbGVNb3VzZVJlbGVhc2VFdmVudChQbGF0Zm9ybU1vdXNlRXZlbnQoZXZl
bnQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdES19LRVlfUFJFU1M6Ci0g
ICAgICAgIGNhc2UgR0RLX0tFWV9SRUxFQVNFOiB7Ci0gICAgICAgICAgICBQbGF0Zm9ybUtleWJv
YXJkRXZlbnQga2V5RXZlbnQoZXZlbnQpOwotICAgICAgICAgICAga2V5UHJlc3Moa2V5RXZlbnQp
OwotICAgICAgICB9Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9
Ci19Ci0KIHZvaWQgRnJhbWU6Omlzc3VlVHJhbnNwb3NlQ29tbWFuZCgpCiB7CiAgICAgbm90SW1w
bGVtZW50ZWQoKTsKIH0KLQorICAgIAogdm9pZCBGcmFtZTo6Y2xlYW51cFBsYXRmb3JtU2NyaXB0
T2JqZWN0cygpCi17Cit7ICAgCisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30gICAKKyAgICAKK0Ry
YWdJbWFnZVJlZiBGcmFtZTo6ZHJhZ0ltYWdlRm9yU2VsZWN0aW9uKCkKK3sgICAgICAgCiAgICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKIH0KIAotRHJhZ0ltYWdlUmVmIEZyYW1l
OjpkcmFnSW1hZ2VGb3JTZWxlY3Rpb24oKSAKK3ZvaWQgRnJhbWU6OmRhc2hib2FyZFJlZ2lvbnND
aGFuZ2VkKCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwogfQogCi12
b2lkIEZyYW1lOjpkYXNoYm9hcmRSZWdpb25zQ2hhbmdlZCgpCit2b2lkIEZyYW1lOjpzZXROZWVk
c1JlYXBwbHlTdHlsZXMoKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgJKHJldmlzaW9uIDI0NzE4KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybUtleWJvYXJkRXZlbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtNDUsNyArNDUsNyBAQCB0eXBlZGVmIGxvbmcgTFBBUkFNOwogI2VuZGlmCiAKICNpZiBQTEFU
Rk9STShHREspCi10eXBlZGVmIHVuaW9uIF9HZGtFdmVudCBHZGtFdmVudDsKK3R5cGVkZWYgc3Ry
dWN0IF9HZGtFdmVudEtleSBHZGtFdmVudEtleTsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oUVQp
CkBAIC04MCw3ICs4MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNlbmRpZgogCiAjaWYgUExB
VEZPUk0oR0RLKQotICAgICAgICBQbGF0Zm9ybUtleWJvYXJkRXZlbnQoR2RrRXZlbnQqKTsKKyAg
ICAgICAgUGxhdGZvcm1LZXlib2FyZEV2ZW50KEdka0V2ZW50S2V5Kik7CiAjZW5kaWYKIAogI2lm
IFBMQVRGT1JNKFFUKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybU1vdXNlRXZlbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtTW91c2VFdmVudC5oCShy
ZXZpc2lvbiAyNDcxOCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1Nb3VzZUV2ZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDggQEAgdHlwZWRlZiBsb25nIExQQVJBTTsKICNl
bmRpZgogCiAjaWYgUExBVEZPUk0oR0RLKQotdHlwZWRlZiB1bmlvbiBfR2RrRXZlbnQgR2RrRXZl
bnQ7Cit0eXBlZGVmIHN0cnVjdCBfR2RrRXZlbnRCdXR0b24gR2RrRXZlbnRCdXR0b247Cit0eXBl
ZGVmIHN0cnVjdCBfR2RrRXZlbnRNb3Rpb24gR2RrRXZlbnRNb3Rpb247CiAjZW5kaWYKIAogI2lm
IFBMQVRGT1JNKFFUKQpAQCAtMTE4LDcgKzExOSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgYm9vbCBhY3RpdmF0ZWRXZWJWaWV3KCkgY29uc3QgeyByZXR1cm4gbV9hY3RpdmF0ZWRX
ZWJWaWV3OyB9CiAjZW5kaWYKICNpZiBQTEFURk9STShHREspIAotICAgICAgICBQbGF0Zm9ybU1v
dXNlRXZlbnQoR2RrRXZlbnQqKTsKKyAgICAgICAgUGxhdGZvcm1Nb3VzZUV2ZW50KEdka0V2ZW50
QnV0dG9uKik7CisgICAgICAgIFBsYXRmb3JtTW91c2VFdmVudChHZGtFdmVudE1vdGlvbiopOwog
I2VuZGlmCiAjaWYgUExBVEZPUk0oUVQpCiAgICAgICAgIFBsYXRmb3JtTW91c2VFdmVudChRTW91
c2VFdmVudCosIGludCBjbGlja0NvdW50KTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vUGxhdGZv
cm1XaGVlbEV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVdo
ZWVsRXZlbnQuaAkocmV2aXNpb24gMjQ3MTgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3Jt
V2hlZWxFdmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIHR5cGVkZWYgbG9u
ZyBMUEFSQU07CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKEdESykKLXR5cGVkZWYgdW5pb24gX0dk
a0V2ZW50IEdka0V2ZW50OwordHlwZWRlZiBzdHJ1Y3QgX0dka0V2ZW50U2Nyb2xsIEdka0V2ZW50
U2Nyb2xsOwogI2VuZGlmCiAKICNpZiBQTEFURk9STShRVCkKQEAgLTg1LDcgKzg1LDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBQbGF0Zm9ybVdoZWVsRXZlbnQoSFdORCwgV1BBUkFN
LCBMUEFSQU0sIGJvb2wgaXNIb3Jpem9udGFsKTsKICNlbmRpZgogI2lmIFBMQVRGT1JNKEdESykK
LSAgICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50KEdka0V2ZW50Kik7CisgICAgICAgIFBsYXRmb3Jt
V2hlZWxFdmVudChHZGtFdmVudFNjcm9sbCopOwogI2VuZGlmCiAjaWYgUExBVEZPUk0oUVQpCiAg
ICAgICAgIFBsYXRmb3JtV2hlZWxFdmVudChRV2hlZWxFdmVudCopOwpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9nZGsvRnJhbWVHZGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z2RrL0ZyYW1lR2RrLmNwcAkocmV2aXNpb24gMjQ3MTgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dk
ay9GcmFtZUdkay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMjQzICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWls
LmNvbSAKLSAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgot
ICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkZyYW1lR2RrLmgiCi0KLSNpbmNsdWRlICJDU3RyaW5nLmgiCi0jaW5jbHVkZSAiRG9j
dW1lbnQuaCIKLSNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgotI2luY2x1ZGUgIkV2ZW50SGFu
ZGxlci5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXJD
bGllbnRHZGsuaCIKLSNpbmNsdWRlICJGcmFtZVByaXZhdGUuaCIKLSNpbmNsdWRlICJGcmFtZVZp
ZXcuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJIaXRUZXN0UmVx
dWVzdC5oIgotI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKLSNpbmNsdWRlICJLZXlib2FyZENv
ZGVzLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0j
aW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Nb3Vz
ZUV2ZW50LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlICJQbGF0Zm9y
bVdoZWVsRXZlbnQuaCIKLSNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKLSNpbmNsdWRlICJSZW5k
ZXJUcmVlQXNUZXh0LmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKLSNpbmNsdWRlICJS
ZXNvdXJjZVJlc3BvbnNlLmgiCi0jaW5jbHVkZSAiU2VsZWN0aW9uQ29udHJvbGxlci5oIgotI2lu
Y2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSAiVHlwaW5nQ29tbWFuZC5oIgotI2luY2x1ZGUg
IndlYmtpdGd0a2ZyYW1lLmgiCi0KLSNpbmNsdWRlIDxnZGsvZ2RrLmg+Ci0jaW5jbHVkZSA8Z3Rr
L2d0ay5oPgotCi0vLyBUaGlzIGZ1bmN0aW9uIGxvYWRzIHJlc291cmNlcyBmcm9tIFdlYktpdAot
Ly8gVGhpcyBkb2VzIG5vdCBiZWxvbmcgaGVyZSBhbmQgSSdtIG5vdCBzdXJlIHdoZXJlCi0vLyBp
dCBzaG91bGQgZ28KLS8vIEkgZG9uJ3Qga25vdyB3aGF0IHRoZSBwbGFucyBvciBkZXNpZ24gaXMK
LS8vIGZvciBub25lIGNvZGUgcmVzb3VyY2VzCi1WZWN0b3I8Y2hhcj4gbG9hZFJlc291cmNlSW50
b0FycmF5KGNvbnN0IGNoYXIqIHJlc291cmNlTmFtZSkKLXsKLSAgICBWZWN0b3I8Y2hhcj4gcmVz
b3VyY2U7Ci0gICAgLy9pZiAoc3RyY21wKHJlc291cmNlTmFtZSwibWlzc2luZ0ltYWdlIikgPT0g
MCkgewotICAgIC8vfQotICAgIHJldHVybiByZXNvdXJjZTsKLX0KLQotc3RydWN0IEZyYW1lR2Rr
RXhwb3NlRGF0YSB7Ci0gICAgR3RrQ29udGFpbmVyICpjb250YWluZXI7Ci0gICAgR2RrRXZlbnRF
eHBvc2UgKmV4cG9zZTsKLX07Ci0KLXN0YXRpYyB2b2lkIGZyYW1lX2dka19leHBvc2VfY2hpbGQo
R3RrV2lkZ2V0ICp3aWRnZXQsIGdwb2ludGVyIF9kYXRhKQotewotICAgIEZyYW1lR2RrRXhwb3Nl
RGF0YSogZGF0YSA9IChGcmFtZUdka0V4cG9zZURhdGEqKV9kYXRhOwotICAgIGludCB3aWR0aCwg
aGVpZ2h0OwotICAgIGd0a19jb250YWluZXJfcHJvcGFnYXRlX2V4cG9zZShkYXRhLT5jb250YWlu
ZXIsIHdpZGdldCwgZGF0YS0+ZXhwb3NlKTsKLX0gCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
RnJhbWVHZGs6OkZyYW1lR2RrKFBhZ2UqIHBhZ2UsIEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3du
ZXJFbGVtZW50LCBGcmFtZUxvYWRlckNsaWVudEdkayogZnJhbWVMb2FkZXIpCi0gICAgOiBGcmFt
ZShwYWdlLCBvd25lckVsZW1lbnQsIGZyYW1lTG9hZGVyKQotewotICAgIFNldHRpbmdzKiBzZXR0
aW5ncyA9IHBhZ2UtPnNldHRpbmdzKCk7Ci0gICAgc2V0dGluZ3MtPnNldExvYWRzSW1hZ2VzQXV0
b21hdGljYWxseSh0cnVlKTsKLSAgICBzZXR0aW5ncy0+c2V0TWluaW11bUZvbnRTaXplKDUpOwot
ICAgIHNldHRpbmdzLT5zZXRNaW5pbXVtTG9naWNhbEZvbnRTaXplKDUpOwotICAgIHNldHRpbmdz
LT5zZXRTaG91bGRQcmludEJhY2tncm91bmRzKHRydWUpOwotICAgIHNldHRpbmdzLT5zZXRKYXZh
U2NyaXB0RW5hYmxlZCh0cnVlKTsKLQotICAgIHNldHRpbmdzLT5zZXREZWZhdWx0Rml4ZWRGb250
U2l6ZSgxNCk7Ci0gICAgc2V0dGluZ3MtPnNldERlZmF1bHRGb250U2l6ZSgxNCk7Ci0gICAgc2V0
dGluZ3MtPnNldFNlcmlmRm9udEZhbWlseSgiVGltZXMgTmV3IFJvbWFuIik7Ci0gICAgc2V0dGlu
Z3MtPnNldFNhbnNTZXJpZkZvbnRGYW1pbHkoIkFyaWFsIik7Ci0gICAgc2V0dGluZ3MtPnNldEZp
eGVkRm9udEZhbWlseSgiQ291cmllciIpOwotICAgIHNldHRpbmdzLT5zZXRTdGFuZGFyZEZvbnRG
YW1pbHkoIkFyaWFsIik7Ci19Ci0KLUZyYW1lR2RrOjp+RnJhbWVHZGsoKQotewotICAgIGxvYWRl
cigpLT5jYW5jZWxBbmRDbGVhcigpOwotfQotCi12b2lkIEZyYW1lR2RrOjpkdW1wUmVuZGVyVHJl
ZSgpIGNvbnN0Ci17Ci0gICAgaWYgKHZpZXcoKS0+bmVlZHNMYXlvdXQoKSkKLSAgICAgICAgdmll
dygpLT5sYXlvdXQoKTsKLSAgICAKLSAgICBTdHJpbmcgdHh0ID0gZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbihyZW5kZXJlcigpKTsKLSAgICBDU3RyaW5nIHV0ZjhTdHIgPSB0eHQudXRmOCgpOwotICAg
IGNvbnN0IGNoYXIgKnV0ZjggPSB1dGY4U3RyLmRhdGEoKTsKLSAgICBpZiAodXRmOCkKLSAgICAg
ICAgcHJpbnRmKCIlc1xuIiwgdXRmOCk7Ci0gICAgZWxzZQotICAgICAgICBwcmludGYoIkZyYW1l
R2RrOjpkdW1wUmVuZGVyVHJlZSgpIG5vIGRhdGFcbiIpOwotfQotCi1ib29sIEZyYW1lR2RrOjpr
ZXlQcmVzcyhjb25zdCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQmIGtleUV2ZW50KQotewotICAgIGlm
ICghZXZlbnRIYW5kbGVyKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBl
dmVudEhhbmRsZXIoKS0+a2V5RXZlbnQoa2V5RXZlbnQpOwotfQotCi12b2lkIEZyYW1lR2RrOjpo
YW5kbGVHZGtFdmVudChHZGtFdmVudCogZXZlbnQpCi17Ci0gICAgc3dpdGNoIChldmVudC0+dHlw
ZSkgewotCi0gICAgICAgIGNhc2UgR0RLX0VYUE9TRTogewotICAgICAgICAgICAgR2RrUmVjdGFu
Z2xlIGNsaXA7Ci0gICAgICAgICAgICBnZGtfcmVnaW9uX2dldF9jbGlwYm94KGV2ZW50LT5leHBv
c2UucmVnaW9uLCAmY2xpcCk7Ci0gICAgICAgICAgICBnZGtfd2luZG93X2JlZ2luX3BhaW50X3Jl
Z2lvbihldmVudC0+YW55LndpbmRvdywgZXZlbnQtPmV4cG9zZS5yZWdpb24pOwotICAgICAgICAg
ICAgY2Fpcm9fdCogY3IgPSBnZGtfY2Fpcm9fY3JlYXRlKGV2ZW50LT5hbnkud2luZG93KTsKLSAg
ICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCBjdHgoY3IpOwotICAgICAgICAgICAgY3R4LnNldEdk
a0RyYXdhYmxlKGV2ZW50LT5hbnkud2luZG93KTsKLSAgICAgICAgICAgIGlmIChyZW5kZXJlcigp
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKHZpZXcoKS0+bmVlZHNMYXlvdXQoKSkKLSAgICAgICAg
ICAgICAgICAgICAgdmlldygpLT5sYXlvdXQoKTsKLSAgICAgICAgICAgICAgICBJbnRSZWN0IHJl
Y3QoY2xpcC54LCBjbGlwLnksIGNsaXAud2lkdGgsIGNsaXAuaGVpZ2h0KTsKLSAgICAgICAgICAg
ICAgICBwYWludCgmY3R4LCByZWN0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhaXJv
X2Rlc3Ryb3koY3IpOwotCi0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICogTWFrZSBzdXJl
IGNoaWxkcmVuIG9mIHRoZSB2aWV3IGdldCByZWRyYXduCi0gICAgICAgICAgICAgKi8KLSAgICAg
ICAgICAgIEZyYW1lR2RrRXhwb3NlRGF0YSBkYXRhID0geyBHVEtfQ09OVEFJTkVSKHZpZXcoKS0+
Z3RrV2lkZ2V0KCkpLCAmZXZlbnQtPmV4cG9zZSB9OwotICAgICAgICAgICAgZ3RrX2NvbnRhaW5l
cl9mb3JhbGwoR1RLX0NPTlRBSU5FUih2aWV3KCktPmd0a1dpZGdldCgpKSwgZnJhbWVfZ2RrX2V4
cG9zZV9jaGlsZCwgJmRhdGEpOwotICAgICAgICAgICAgZ2RrX3dpbmRvd19lbmRfcGFpbnQoZXZl
bnQtPmFueS53aW5kb3cpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotCi0gICAgICAgIGNhc2UgR0RLX0NPTkZJR1VSRTogewotICAgICAgICAgICAgdmlldygp
LT51cGRhdGVHZW9tZXRyeShldmVudC0+Y29uZmlndXJlLndpZHRoLCBldmVudC0+Y29uZmlndXJl
LmhlaWdodCk7Ci0gICAgICAgICAgICBmb3JjZUxheW91dCgpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIEdES19TQ1JPTEw6IHsKLSAgICAgICAgICAgIFBs
YXRmb3JtV2hlZWxFdmVudCB3aGVlbEV2ZW50KGV2ZW50KTsKLSAgICAgICAgICAgIHZpZXcoKS0+
d2hlZWxFdmVudCh3aGVlbEV2ZW50KTsKLSAgICAgICAgICAgIGlmICh3aGVlbEV2ZW50LmlzQWNj
ZXB0ZWQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIEhpdFRlc3RS
ZXF1ZXN0IGhpdFRlc3RSZXF1ZXN0KHRydWUsIHRydWUpOwotICAgICAgICAgICAgSGl0VGVzdFJl
c3VsdCBoaXRUZXN0UmVzdWx0KHdoZWVsRXZlbnQucG9zKCkpOwotICAgICAgICAgICAgcmVuZGVy
ZXIoKS0+bGF5ZXIoKS0+aGl0VGVzdChoaXRUZXN0UmVxdWVzdCwgaGl0VGVzdFJlc3VsdCk7Ci0g
ICAgICAgICAgICBOb2RlKiBub2RlID0gaGl0VGVzdFJlc3VsdC5pbm5lck5vZGUoKTsKLSAgICAg
ICAgICAgIGlmICghbm9kZSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAv
KgotICAgICAgICAgICAgICogRklYTUU6IERvZXMgdGhpcyBiZWxvbmcgaGVyZT8KLSAgICAgICAg
ICAgICAqIERlZmF1bHQgdG8gc2Nyb2xsaW5nIHRoZSBwYWdlCi0gICAgICAgICAgICAgKiBub3Qg
c3VyZSB3aHkgaXRzIG51bGwKLSAgICAgICAgICAgICAqIGJyb2tlIGFueXdheSB3aGVuIGl0cyBu
b3QgbnVsbAotICAgICAgICAgICAgICogZG9TY3JvbGwocmVuZGVyZXIoKSwgd2hlZWxFdmVudC5k
ZWx0YVgoKSwgd2hlZWxFdmVudC5kZWx0YVkoKSk7Ci0gICAgICAgICAgICAgKi8KLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgR0RLX0RSQUdfRU5URVI6Ci0gICAg
ICAgIGNhc2UgR0RLX0RSQUdfTEVBVkU6Ci0gICAgICAgIGNhc2UgR0RLX0RSQUdfTU9USU9OOgot
ICAgICAgICBjYXNlIEdES19EUkFHX1NUQVRVUzoKLSAgICAgICAgY2FzZSBHREtfRFJPUF9TVEFS
VDoKLSAgICAgICAgY2FzZSBHREtfRFJPUF9GSU5JU0hFRDogewotICAgICAgICAgICAgLy9ib29s
IHVwZGF0ZURyYWdBbmREcm9wKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYsIENsaXBib2FyZCop
OwotICAgICAgICAgICAgLy92b2lkIGNhbmNlbERyYWdBbmREcm9wKGNvbnN0IFBsYXRmb3JtTW91
c2VFdmVudCYsIENsaXBib2FyZCopOwotICAgICAgICAgICAgLy9ib29sIHBlcmZvcm1EcmFnQW5k
RHJvcChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmLCBDbGlwYm9hcmQqKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgR0RLX01PVElPTl9OT1RJRlk6Ci0gICAg
ICAgICAgICBldmVudEhhbmRsZXIoKS0+bW91c2VNb3ZlZChQbGF0Zm9ybU1vdXNlRXZlbnQoZXZl
bnQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdES19CVVRUT05fUFJFU1M6
Ci0gICAgICAgIGNhc2UgR0RLXzJCVVRUT05fUFJFU1M6Ci0gICAgICAgIGNhc2UgR0RLXzNCVVRU
T05fUFJFU1M6Ci0gICAgICAgICAgICBldmVudEhhbmRsZXIoKS0+aGFuZGxlTW91c2VQcmVzc0V2
ZW50KFBsYXRmb3JtTW91c2VFdmVudChldmVudCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgR0RLX0JVVFRPTl9SRUxFQVNFOgotICAgICAgICAgICAgZXZlbnRIYW5kbGVyKCkt
PmhhbmRsZU1vdXNlUmVsZWFzZUV2ZW50KFBsYXRmb3JtTW91c2VFdmVudChldmVudCkpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR0RLX0tFWV9QUkVTUzoKLSAgICAgICAgY2Fz
ZSBHREtfS0VZX1JFTEVBU0U6IHsKLSAgICAgICAgICAgIFBsYXRmb3JtS2V5Ym9hcmRFdmVudCBr
ZXlFdmVudChldmVudCk7Ci0gICAgICAgICAgICBrZXlQcmVzcyhrZXlFdmVudCk7Ci0gICAgICAg
IH0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotdm9p
ZCBGcmFtZTo6aXNzdWVUcmFuc3Bvc2VDb21tYW5kKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCi12b2lkIEZyYW1lOjpjbGVhbnVwUGxhdGZvcm1TY3JpcHRPYmplY3RzKCkKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1EcmFnSW1hZ2VSZWYgRnJhbWU6OmRyYWdJbWFnZUZv
clNlbGVjdGlvbigpIAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19
Ci0KLXZvaWQgRnJhbWU6OmRhc2hib2FyZFJlZ2lvbnNDaGFuZ2VkKCkKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotfQotCi19CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9GcmFtZUdkay5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0ZyYW1lR2RrLmgJKHJldmlzaW9u
IDI0NzE4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsvRnJhbWVHZGsuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1
dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA2IE1p
Y2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20gCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKLSAqLwotCi0jaWZuZGVmIEZyYW1lR2RrX2gKLSNkZWZpbmUgRnJhbWVHZGtfaAotCi0jaW5j
bHVkZSAiRWRpdG9yQ2xpZW50LmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlIDxnZGsv
Z2RrLmg+Ci0jaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVDbGllbnQuaCIKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1jbGFzcyBFbGVtZW50OwotY2xhc3MgRnJhbWVHZGs7Ci1jbGFzcyBGcmFtZUxv
YWRlckNsaWVudEdkazsKLWNsYXNzIEZvcm1EYXRhOwotCi0KLWNsYXNzIEZyYW1lR2RrIDogcHVi
bGljIEZyYW1lIHsKLXB1YmxpYzoKLSAgICBGcmFtZUdkayhQYWdlKiwgSFRNTEZyYW1lT3duZXJF
bGVtZW50KiwgRnJhbWVMb2FkZXJDbGllbnRHZGsqKTsKLSAgICB2aXJ0dWFsIH5GcmFtZUdkaygp
OwotCi0gICAgdm9pZCBoYW5kbGVHZGtFdmVudChHZGtFdmVudCopOwotICAgIGJvb2wga2V5UHJl
c3MoY29uc3QgUGxhdGZvcm1LZXlib2FyZEV2ZW50JiBrZXlFdmVudCk7Ci0KLSAgICB2b2lkIGR1
bXBSZW5kZXJUcmVlKCkgY29uc3Q7Ci19OwotCi19Ci0KLSNlbmRpZgpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9nZGsvS2V5RXZlbnRHZGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ2RrL0tleUV2ZW50R2RrLmNwcAkocmV2aXNpb24gMjQ3MTgpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dkay9LZXlFdmVudEdkay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1OCwxNyArNDU4LDE3
IEBAIHN0YXRpYyBpbnQgd2luZG93c0tleUNvZGVGb3JLZXlFdmVudCh1bnMKIAogfQogCi1QbGF0
Zm9ybUtleWJvYXJkRXZlbnQ6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudChHZGtFdmVudCogZXZlbnQp
CitQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudChHZGtFdmVudEtl
eSogZXZlbnQpCiB7CiAgICAgbV9pc0tleVVwID0gZXZlbnQtPnR5cGUgPT0gR0RLX0tFWV9SRUxF
QVNFOwotICAgIG1fc2hpZnRLZXkgPSBldmVudC0+a2V5LnN0YXRlICYgR0RLX1NISUZUX01BU0sg
IT0gMDsKLSAgICBtX2N0cmxLZXkgPSBldmVudC0+a2V5LnN0YXRlICYgR0RLX0NPTlRST0xfTUFT
SyAhPSAwOwotICAgIG1fYWx0S2V5ID0gZXZlbnQtPmtleS5zdGF0ZSAmIEdES19NT0QxX01BU0sg
IT0gMDsKLSAgICBtX21ldGFLZXkgPSBldmVudC0+a2V5LnN0YXRlICYgR0RLX01PRDJfTUFTSyAh
PSAwOwotICAgIG1fdGV4dCA9IGV2ZW50LT5rZXkuc3RyaW5nOwotICAgIG1fdW5tb2RpZmllZFRl
eHQgPSBldmVudC0+a2V5LnN0cmluZzsKLSAgICBtX2tleUlkZW50aWZpZXIgPSBrZXlJZGVudGlm
aWVyRm9yR2RrS2V5Q29kZShldmVudC0+a2V5LmtleXZhbCk7Ci0gICAgbV9XaW5kb3dzS2V5Q29k
ZSA9IHdpbmRvd3NLZXlDb2RlRm9yS2V5RXZlbnQoZXZlbnQtPmtleS5rZXl2YWwpOworICAgIG1f
c2hpZnRLZXkgPSBldmVudC0+c3RhdGUgJiBHREtfU0hJRlRfTUFTSyAhPSAwOworICAgIG1fY3Ry
bEtleSA9IGV2ZW50LT5zdGF0ZSAmIEdES19DT05UUk9MX01BU0sgIT0gMDsKKyAgICBtX2FsdEtl
eSA9IGV2ZW50LT5zdGF0ZSAmIEdES19NT0QxX01BU0sgIT0gMDsKKyAgICBtX21ldGFLZXkgPSBl
dmVudC0+c3RhdGUgJiBHREtfTU9EMl9NQVNLICE9IDA7CisgICAgbV90ZXh0ID0gZXZlbnQtPnN0
cmluZzsKKyAgICBtX3VubW9kaWZpZWRUZXh0ID0gZXZlbnQtPnN0cmluZzsKKyAgICBtX2tleUlk
ZW50aWZpZXIgPSBrZXlJZGVudGlmaWVyRm9yR2RrS2V5Q29kZShldmVudC0+a2V5dmFsKTsKKyAg
ICBtX1dpbmRvd3NLZXlDb2RlID0gd2luZG93c0tleUNvZGVGb3JLZXlFdmVudChldmVudC0+a2V5
dmFsKTsKICAgICBtX2F1dG9SZXBlYXQgPSBmYWxzZTsKICAgICBtX2lzS2V5cGFkID0gZmFsc2U7
CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL01vdXNlRXZlbnRHZGsuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL01vdXNlRXZlbnRHZGsuY3BwCShyZXZpc2lvbiAy
NDcxOCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL01vdXNlRXZlbnRHZGsuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yOCw1NyArMjgsNzEgQEAKICNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQu
aCIKIAogI2luY2x1ZGUgIlN5c3RlbVRpbWUuaCIKLSNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNs
dWRlICJBc3NlcnRpb25zLmgiCisKICNpbmNsdWRlIDxnZGsvZ2RrLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogLy8gRklYTUU6IFdvdWxkIGJlIGV2ZW4gYmV0dGVyIHRvIGZpZ3VyZSBvdXQg
d2hpY2ggbW9kaWZpZXIgaXMgQWx0IGluc3RlYWQgb2YgYWx3YXlzIHVzaW5nIEdES19NT0QxX01B
U0suCiAKLVBsYXRmb3JtTW91c2VFdmVudDo6UGxhdGZvcm1Nb3VzZUV2ZW50KEdka0V2ZW50KiBl
dmVudCkKK1BsYXRmb3JtTW91c2VFdmVudDo6UGxhdGZvcm1Nb3VzZUV2ZW50KEdka0V2ZW50QnV0
dG9uKiBldmVudCkKIHsKICAgICBtX3RpbWVzdGFtcCA9IGN1cnJlbnRUaW1lKCk7Ci0gICAgbV9w
b3NpdGlvbiA9IEludFBvaW50KChpbnQpZXZlbnQtPm1vdGlvbi54LCAoaW50KWV2ZW50LT5tb3Rp
b24ueSk7Ci0gICAgbV9nbG9iYWxQb3NpdGlvbiA9IEludFBvaW50KChpbnQpZXZlbnQtPm1vdGlv
bi54X3Jvb3QsIChpbnQpZXZlbnQtPm1vdGlvbi55X3Jvb3QpOwotICAgIG1fc2hpZnRLZXkgPSBl
dmVudC0+YnV0dG9uLnN0YXRlICYgR0RLX1NISUZUX01BU0s7Ci0gICAgbV9jdHJsS2V5ID0gZXZl
bnQtPmJ1dHRvbi5zdGF0ZSAmIEdES19DT05UUk9MX01BU0s7Ci0gICAgbV9hbHRLZXkgPSBldmVu
dC0+YnV0dG9uLnN0YXRlICYgR0RLX01PRDFfTUFTSzsKLSAgICBtX21ldGFLZXkgPSBldmVudC0+
YnV0dG9uLnN0YXRlICYgR0RLX01PRDJfTUFTSzsKKyAgICBtX3Bvc2l0aW9uID0gSW50UG9pbnQo
KGludClldmVudC0+eCwgKGludClldmVudC0+eSk7CisgICAgbV9nbG9iYWxQb3NpdGlvbiA9IElu
dFBvaW50KChpbnQpZXZlbnQtPnhfcm9vdCwgKGludClldmVudC0+eV9yb290KTsKKyAgICBtX3No
aWZ0S2V5ID0gZXZlbnQtPnN0YXRlICYgR0RLX1NISUZUX01BU0s7CisgICAgbV9jdHJsS2V5ID0g
ZXZlbnQtPnN0YXRlICYgR0RLX0NPTlRST0xfTUFTSzsKKyAgICBtX2FsdEtleSA9IGV2ZW50LT5z
dGF0ZSAmIEdES19NT0QxX01BU0s7CisgICAgbV9tZXRhS2V5ID0gZXZlbnQtPnN0YXRlICYgR0RL
X01PRDJfTUFTSzsKIAogICAgIHN3aXRjaCAoZXZlbnQtPnR5cGUpIHsKLSAgICAgICAgY2FzZSBH
REtfTU9USU9OX05PVElGWToKLSAgICAgICAgICAgIG1fZXZlbnRUeXBlID0gTW91c2VFdmVudE1v
dmVkOwotICAgICAgICAgICAgbV9idXR0b24gPSBOb0J1dHRvbjsKKyAgICBjYXNlIEdES19CVVRU
T05fUFJFU1M6CisgICAgY2FzZSBHREtfMkJVVFRPTl9QUkVTUzoKKyAgICBjYXNlIEdES18zQlVU
VE9OX1BSRVNTOgorICAgIGNhc2UgR0RLX0JVVFRPTl9SRUxFQVNFOgorICAgICAgICBtX2V2ZW50
VHlwZSA9IE1vdXNlRXZlbnRQcmVzc2VkOworICAgICAgICBpZiAoZXZlbnQtPnR5cGUgPT0gR0RL
X0JVVFRPTl9SRUxFQVNFKSB7CisgICAgICAgICAgICBtX2V2ZW50VHlwZSA9IE1vdXNlRXZlbnRS
ZWxlYXNlZDsKICAgICAgICAgICAgIG1fY2xpY2tDb3VudCA9IDA7Ci0gICAgICAgICAgICBicmVh
azsKLQotICAgICAgICBjYXNlIEdES19CVVRUT05fUFJFU1M6Ci0gICAgICAgIGNhc2UgR0RLXzJC
VVRUT05fUFJFU1M6Ci0gICAgICAgIGNhc2UgR0RLXzNCVVRUT05fUFJFU1M6Ci0gICAgICAgIGNh
c2UgR0RLX0JVVFRPTl9SRUxFQVNFOgotICAgICAgICAgICAgbV9ldmVudFR5cGUgPSBNb3VzZUV2
ZW50UHJlc3NlZDsKLSAgICAgICAgICAgIGlmIChldmVudC0+dHlwZSA9PSBHREtfQlVUVE9OX1JF
TEVBU0UpIHsKLSAgICAgICAgICAgICAgICBtX2V2ZW50VHlwZSA9IE1vdXNlRXZlbnRSZWxlYXNl
ZDsKLSAgICAgICAgICAgICAgICBtX2NsaWNrQ291bnQgPSAwOwotICAgICAgICAgICAgfSBlbHNl
IGlmIChldmVudC0+dHlwZSA9PSBHREtfQlVUVE9OX1BSRVNTKQotICAgICAgICAgICAgICAgIG1f
Y2xpY2tDb3VudCA9IDE7Ci0gICAgICAgICAgICBlbHNlIGlmIChldmVudC0+dHlwZSA9PSBHREtf
MkJVVFRPTl9QUkVTUykKLSAgICAgICAgICAgICAgICBtX2NsaWNrQ291bnQgPSAyOwotICAgICAg
ICAgICAgZWxzZSBpZiAoZXZlbnQtPnR5cGUgPT0gR0RLXzNCVVRUT05fUFJFU1MpCi0gICAgICAg
ICAgICAgICAgbV9jbGlja0NvdW50ID0gMzsKLQotICAgICAgICAgICAgaWYgKGV2ZW50LT5idXR0
b24uYnV0dG9uID09IDEpCi0gICAgICAgICAgICAgICAgbV9idXR0b24gPSBMZWZ0QnV0dG9uOwot
ICAgICAgICAgICAgZWxzZSBpZiAoZXZlbnQtPmJ1dHRvbi5idXR0b24gPT0gMikKLSAgICAgICAg
ICAgICAgICBtX2J1dHRvbiA9IE1pZGRsZUJ1dHRvbjsKLSAgICAgICAgICAgIGVsc2UgaWYgKGV2
ZW50LT5idXR0b24uYnV0dG9uID09IDMpCi0gICAgICAgICAgICAgICAgbV9idXR0b24gPSBSaWdo
dEJ1dHRvbjsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICBmcHJpbnRmKHN0ZGVyciwgIlVua25vd24gbW91c2UgZXZlbnRcbiIpOwotICAgICAgICAg
ICAgYXNzZXJ0KDApOwotICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSA9PSBH
REtfQlVUVE9OX1BSRVNTKQorICAgICAgICAgICAgbV9jbGlja0NvdW50ID0gMTsKKyAgICAgICAg
ZWxzZSBpZiAoZXZlbnQtPnR5cGUgPT0gR0RLXzJCVVRUT05fUFJFU1MpCisgICAgICAgICAgICBt
X2NsaWNrQ291bnQgPSAyOworICAgICAgICBlbHNlIGlmIChldmVudC0+dHlwZSA9PSBHREtfM0JV
VFRPTl9QUkVTUykKKyAgICAgICAgICAgIG1fY2xpY2tDb3VudCA9IDM7CisKKyAgICAgICAgaWYg
KGV2ZW50LT5idXR0b24gPT0gMSkKKyAgICAgICAgICAgIG1fYnV0dG9uID0gTGVmdEJ1dHRvbjsK
KyAgICAgICAgZWxzZSBpZiAoZXZlbnQtPmJ1dHRvbiA9PSAyKQorICAgICAgICAgICAgbV9idXR0
b24gPSBNaWRkbGVCdXR0b247CisgICAgICAgIGVsc2UgaWYgKGV2ZW50LT5idXR0b24gPT0gMykK
KyAgICAgICAgICAgIG1fYnV0dG9uID0gUmlnaHRCdXR0b247CisgICAgICAgIGJyZWFrOworCisg
ICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfTsKIH0KIAor
UGxhdGZvcm1Nb3VzZUV2ZW50OjpQbGF0Zm9ybU1vdXNlRXZlbnQoR2RrRXZlbnRNb3Rpb24qIG1v
dGlvbikKK3sKKyAgICBtX3RpbWVzdGFtcCA9IGN1cnJlbnRUaW1lKCk7CisgICAgbV9wb3NpdGlv
biA9IEludFBvaW50KChpbnQpbW90aW9uLT54LCAoaW50KW1vdGlvbi0+eSk7CisgICAgbV9nbG9i
YWxQb3NpdGlvbiA9IEludFBvaW50KChpbnQpbW90aW9uLT54X3Jvb3QsIChpbnQpbW90aW9uLT55
X3Jvb3QpOworICAgIG1fc2hpZnRLZXkgPSBtb3Rpb24tPnN0YXRlICYgR0RLX1NISUZUX01BU0s7
CisgICAgbV9jdHJsS2V5ID0gbW90aW9uLT5zdGF0ZSAmIEdES19DT05UUk9MX01BU0s7CisgICAg
bV9hbHRLZXkgPSBtb3Rpb24tPnN0YXRlICYgR0RLX01PRDFfTUFTSzsKKyAgICBtX21ldGFLZXkg
PSBtb3Rpb24tPnN0YXRlICYgR0RLX01PRDJfTUFTSzsKKworICAgIHN3aXRjaCAobW90aW9uLT50
eXBlKSB7CisgICAgY2FzZSBHREtfTU9USU9OX05PVElGWToKKyAgICAgICAgbV9ldmVudFR5cGUg
PSBNb3VzZUV2ZW50TW92ZWQ7CisgICAgICAgIG1fYnV0dG9uID0gTm9CdXR0b247CisgICAgICAg
IG1fY2xpY2tDb3VudCA9IDA7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH07Cit9CiB9CkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dkay9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vZ2RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAJKHJldmlzaW9uIDI0NzE4KQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9nZGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDIsNyArNDIsNiBAQAogI2luY2x1ZGUgIkVkaXRvci5oIgogI2luY2x1ZGUgIkZpbGVDaG9v
c2VyLmgiCiAjaW5jbHVkZSAiRm9udC5oIgotI2luY2x1ZGUgIkZyYW1lR2RrLmgiCiAjaW5jbHVk
ZSAiRnJhbWVMb2FkUmVxdWVzdC5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVk
ZSAiRnJhbWVMb2FkZXJDbGllbnRHZGsuaCIKQEAgLTE2Myw3ICsxNjIsNiBAQCBTdHJpbmcgRmls
ZUNob29zZXI6OmJhc2VuYW1lRm9yV2lkdGgoY29uCiBDb2xvciBXZWJDb3JlOjpmb2N1c1JpbmdD
b2xvcigpIHsgcmV0dXJuIDB4RkYwMDAwRkY7IH0KIHZvaWQgV2ViQ29yZTo6c2V0Rm9jdXNSaW5n
Q29sb3JDaGFuZ2VGdW5jdGlvbih2b2lkICgqKSgpKSB7IH0KIAotdm9pZCBGcmFtZTo6c2V0TmVl
ZHNSZWFwcGx5U3R5bGVzKCkgeyB9CiAKIGJvb2wgUmVzb3VyY2VIYW5kbGU6OndpbGxMb2FkRnJv
bUNhY2hlKFJlc291cmNlUmVxdWVzdCYpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNl
OyB9CiBib29sIFJlc291cmNlSGFuZGxlOjpsb2Fkc0Jsb2NrZWQoKSB7IG5vdEltcGxlbWVudGVk
KCk7IHJldHVybiBmYWxzZTsgfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvV2hlZWxFdmVu
dEdkay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvV2hlZWxFdmVudEdk
ay5jcHAJKHJldmlzaW9uIDI0NzE4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsvV2hlZWxFdmVu
dEdkay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDI3ICszMiwyNyBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLVBsYXRmb3JtV2hlZWxFdmVudDo6UGxhdGZvcm1XaGVlbEV2ZW50KEdka0V2
ZW50KiBldmVudCkKK1BsYXRmb3JtV2hlZWxFdmVudDo6UGxhdGZvcm1XaGVlbEV2ZW50KEdka0V2
ZW50U2Nyb2xsKiBldmVudCkKIHsKICAgICBtX2RlbHRhWCA9IDA7CiAgICAgbV9kZWx0YVkgPSAw
OwogCi0gICAgaWYgKGV2ZW50LT5zY3JvbGwuZGlyZWN0aW9uID09IEdES19TQ1JPTExfVVApCisg
ICAgaWYgKGV2ZW50LT5kaXJlY3Rpb24gPT0gR0RLX1NDUk9MTF9VUCkKICAgICAgICAgbV9kZWx0
YVkgPSAtMTIwOwotICAgIGVsc2UgaWYgKGV2ZW50LT5zY3JvbGwuZGlyZWN0aW9uID09IEdES19T
Q1JPTExfTEVGVCkKKyAgICBlbHNlIGlmIChldmVudC0+ZGlyZWN0aW9uID09IEdES19TQ1JPTExf
TEVGVCkKICAgICAgICAgbV9kZWx0YVggPSAtMTIwOwotICAgIGVsc2UgaWYgKGV2ZW50LT5zY3Jv
bGwuZGlyZWN0aW9uID09IEdES19TQ1JPTExfUklHSFQpCisgICAgZWxzZSBpZiAoZXZlbnQtPmRp
cmVjdGlvbiA9PSBHREtfU0NST0xMX1JJR0hUKQogICAgICAgICBtX2RlbHRhWCA9IDEyMDsKICAg
ICBlbHNlCiAgICAgICAgIG1fZGVsdGFZID0gMTIwOwogCi0gICAgbV9wb3NpdGlvbiA9IEludFBv
aW50KChpbnQpZXZlbnQtPnNjcm9sbC54LCAoaW50KWV2ZW50LT5zY3JvbGwueSk7Ci0gICAgbV9n
bG9iYWxQb3NpdGlvbiA9IEludFBvaW50KChpbnQpZXZlbnQtPnNjcm9sbC54X3Jvb3QsIChpbnQp
ZXZlbnQtPnNjcm9sbC55X3Jvb3QpOworICAgIG1fcG9zaXRpb24gPSBJbnRQb2ludCgoaW50KWV2
ZW50LT54LCAoaW50KWV2ZW50LT55KTsKKyAgICBtX2dsb2JhbFBvc2l0aW9uID0gSW50UG9pbnQo
KGludClldmVudC0+eF9yb290LCAoaW50KWV2ZW50LT55X3Jvb3QpOwogICAgIG1faXNBY2NlcHRl
ZCA9IGZhbHNlOwotICAgIG1fc2hpZnRLZXkgPSBldmVudC0+YnV0dG9uLnN0YXRlICYgR0RLX1NI
SUZUX01BU0s7Ci0gICAgbV9jdHJsS2V5ID0gZXZlbnQtPmJ1dHRvbi5zdGF0ZSAmIEdES19DT05U
Uk9MX01BU0s7Ci0gICAgbV9hbHRLZXkgPSBldmVudC0+YnV0dG9uLnN0YXRlICYgR0RLX01PRDFf
TUFTSzsKLSAgICBtX21ldGFLZXkgPSBldmVudC0+YnV0dG9uLnN0YXRlICYgR0RLX01PRDJfTUFT
SzsKKyAgICBtX3NoaWZ0S2V5ID0gZXZlbnQtPnN0YXRlICYgR0RLX1NISUZUX01BU0s7CisgICAg
bV9jdHJsS2V5ID0gZXZlbnQtPnN0YXRlICYgR0RLX0NPTlRST0xfTUFTSzsKKyAgICBtX2FsdEtl
eSA9IGV2ZW50LT5zdGF0ZSAmIEdES19NT0QxX01BU0s7CisgICAgbV9tZXRhS2V5ID0gZXZlbnQt
PnN0YXRlICYgR0RLX01PRDJfTUFTSzsKICAgICBtX2lzQ29udGludW91cyA9IGZhbHNlOwogfQog
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9XaWRnZXRHZGsuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1dpZGdldEdkay5jcHAJKHJldmlzaW9uIDI0NzE4KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9nZGsvV2lkZ2V0R2RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEs
NyArMzEsNiBAQAogCiAjaW5jbHVkZSAiQ3Vyc29yLmgiCiAjaW5jbHVkZSAiRm9udC5oIgotI2lu
Y2x1ZGUgIkZyYW1lR2RrLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVk
ZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nZGsvSW1hZ2VHZGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ2RrL0ltYWdlR2RrLmNwcAkocmV2aXNpb24gMjQ3MTgpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dkay9JbWFnZUdkay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMwLDggKzMwLDE3IEBACiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRl
IDxjYWlyby5oPgogIAotLy8gVGhpcyBmdW5jdGlvbiBsb2FkcyByZXNvdXJjZXMgZnJvbSBXZWJL
aXQKLVZlY3RvcjxjaGFyPiBsb2FkUmVzb3VyY2VJbnRvQXJyYXkoY29uc3QgY2hhciopOworLyoK
KyAqIFRPRE86IFdlIHNob3VsZCBmb2xsb3cgUXQgYW5kIG1vdmUgdGhhdCB0byB3ZWJraXRndGtz
ZXR0aW5ncy4KKyAqIEZvciBub3cgaXQgaXMgY29waWVkIHRvIHRoZSBmaWxlIGFjdHVhbGx5IHVz
aW5nIHRoaXMgbWV0aG9kLgorICovCitzdGF0aWMgVmVjdG9yPGNoYXI+IGxvYWRSZXNvdXJjZUlu
dG9BcnJheShjb25zdCBjaGFyKiByZXNvdXJjZU5hbWUpCit7ICAgCisgICAgVmVjdG9yPGNoYXI+
IHJlc291cmNlOworICAgIC8vaWYgKHN0cmNtcChyZXNvdXJjZU5hbWUsIm1pc3NpbmdJbWFnZSIp
ID09IDApIHsKKyAgICAvL30KKyAgICByZXR1cm4gcmVzb3VyY2U7Cit9CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApJbmRleDogV2ViS2l0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
Q2hhbmdlTG9nCShyZXZpc2lvbiAyNDcxOCkKKysrIFdlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwyOSBAQAorMjAwNy0wNy0yNyAgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJl
eXRoZXIgIDx6ZWNrZUBzZWxmaXNoLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBVc2UgV2ViQ29yZTo6RnJhbWUgZGlyZWN0bHkgYW5kIHVwZGF0
ZSB3ZWJraXRndGtmcmFtZS5jcHAgYW5kCisgICAgICAgIHdlYmtpdGd0a3ByaXZhdGUuaC4KKwor
ICAgICAgICBEbyBub3QgY29ubmVjdCB0byBvdXIgb3duIHNpZ25hbHMgYnV0IG92ZXJyaWRlIHRo
ZSBkZWZhdWx0IGhhbmRsZXJzCisgICAgICAgIGZvciB0aGVtLiBUaGlzIG1vdmVzIGhhbmRsaW5n
IGNvZGUgZnJvbSBXZWJDb3JlL3BsYXRmb3JtL0ZyYW1lR2RrLmNwcAorICAgICAgICB0byBXZWJL
aXRHdGtQYWdlLgorCisgICAgICAgICogZ3RrL0FwaS93ZWJraXRndGtmcmFtZS5jcHA6CisgICAg
ICAgICogZ3RrL0FwaS93ZWJraXRndGtmcmFtZS5oOgorICAgICAgICAqIGd0ay9BcGkvd2Via2l0
Z3RrcGFnZS5jcHA6CisgICAgICAgIChGcmFtZUV4cG9zZURhdGE6OmZyYW1lX2dka19leHBvc2Vf
Y2hpbGQpOgorICAgICAgICAoRnJhbWVFeHBvc2VEYXRhOjp3ZWJraXRfZ3RrX3BhZ2VfZXhwb3Nl
X2V2ZW50KToKKyAgICAgICAgKEZyYW1lRXhwb3NlRGF0YTo6d2Via2l0X2d0a19wYWdlX2tleV9l
dmVudCk6CisgICAgICAgIChGcmFtZUV4cG9zZURhdGE6OndlYmtpdF9ndGtfcGFnZV9idXR0b25f
ZXZlbnQpOgorICAgICAgICAoRnJhbWVFeHBvc2VEYXRhOjp3ZWJraXRfZ3RrX3BhZ2VfbW90aW9u
X2V2ZW50KToKKyAgICAgICAgKEZyYW1lRXhwb3NlRGF0YTo6d2Via2l0X2d0a19wYWdlX3Njcm9s
bF9ldmVudCk6CisgICAgICAgIChGcmFtZUV4cG9zZURhdGE6OndlYmtpdF9ndGtfcGFnZV9zaXpl
X2FsbG9jYXRlKToKKyAgICAgICAgKEZyYW1lRXhwb3NlRGF0YTo6d2Via2l0X2d0a19wYWdlX3Jl
YWxpemUpOgorICAgICAgICAoRnJhbWVFeHBvc2VEYXRhOjp3ZWJraXRfZ3RrX3BhZ2VfY2xhc3Nf
aW5pdCk6CisgICAgICAgIChGcmFtZUV4cG9zZURhdGE6OndlYmtpdF9ndGtfcGFnZV9pbml0KToK
KyAgICAgICAgKiBndGsvQXBpL3dlYmtpdGd0a3ByaXZhdGUuaDoKKwogMjAwNy0wNy0yNiAgQWxl
eGV5IFByb3NrdXJ5YWtvdiAgPGFwQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
T2xpdmVyLgpJbmRleDogV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrZnJhbWUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdC9ndGsvQXBpL3dlYmtpdGd0a2ZyYW1lLmNwcAkocmV2aXNpb24gMjQ3MTgp
CisrKyBXZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtmcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDExICszMSwxMCBAQAogI2luY2x1ZGUgIndlYmtpdGd0a3BhZ2UuaCIKICNpbmNsdWRlICJ3
ZWJraXRndGtwcml2YXRlLmgiCiAKLSNpbmNsdWRlICJGcmFtZUdkay5oIgotI2luY2x1ZGUgIkZy
YW1lTG9hZGVyQ2xpZW50R2RrLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAKIHVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIFdlYktpdEd0azsKIAogZXh0ZXJuICJD
IiB7CiAKQEAgLTEyMCwyMSArMTE5LDIyIEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9ndGtfZnJhbWVf
aW5pdChXZWJLaXQKIHsKIH0KIAotR09iamVjdCogd2Via2l0X2d0a19mcmFtZV9uZXcoV2ViS2l0
R3RrUGFnZSogcGFnZSkKK0dPYmplY3QqIHdlYmtpdF9ndGtfZnJhbWVfbmV3KFdlYktpdEd0a1Bh
Z2UqIHdlYl9wYWdlKQogewogICAgIFdlYktpdEd0a0ZyYW1lKiBmcmFtZSA9IFdFQktJVF9HVEtf
RlJBTUUoZ19vYmplY3RfbmV3KFdFQktJVF9HVEtfVFlQRV9GUkFNRSwgTlVMTCkpOwogICAgIFdl
YktpdEd0a0ZyYW1lUHJpdmF0ZSAqZnJhbWVfZGF0YSA9IFdFQktJVF9HVEtfRlJBTUVfR0VUX1BS
SVZBVEUoZnJhbWUpOwotICAgIFdlYktpdEd0a1BhZ2VQcml2YXRlICAqcGFnZV9kYXRhID0gV0VC
S0lUX0dUS19QQUdFX0dFVF9QUklWQVRFKHBhZ2UpOworICAgIFdlYkNvcmU6OlBhZ2UqIHBhZ2Ug
PSBjb3JlKHdlYl9wYWdlKTsKIAogICAgIGZyYW1lX2RhdGEtPmNsaWVudCA9IG5ldyBGcmFtZUxv
YWRlckNsaWVudEdkayhmcmFtZSk7Ci0gICAgZnJhbWVfZGF0YS0+ZnJhbWUgPSBuZXcgRnJhbWVH
ZGsocGFnZV9kYXRhLT5wYWdlLCAwLCBmcmFtZV9kYXRhLT5jbGllbnQpOworICAgIGZyYW1lX2Rh
dGEtPmZyYW1lID0gbmV3IEZyYW1lKHBhZ2UsIDAsIGZyYW1lX2RhdGEtPmNsaWVudCk7CisKIAog
ICAgIEZyYW1lVmlldyogZnJhbWVfdmlldyA9IG5ldyBGcmFtZVZpZXcoZnJhbWVfZGF0YS0+ZnJh
bWUpOwogICAgIGZyYW1lX2RhdGEtPmZyYW1lLT5zZXRWaWV3KGZyYW1lX3ZpZXcpOwogCi0gICAg
ZnJhbWVfdmlldy0+c2V0R3RrV2lkZ2V0KEdUS19MQVlPVVQocGFnZSkpOworICAgIGZyYW1lX3Zp
ZXctPnNldEd0a1dpZGdldChHVEtfTEFZT1VUKHdlYl9wYWdlKSk7CiAgICAgZnJhbWVfZGF0YS0+
ZnJhbWUtPmluaXQoKTsKLSAgICBmcmFtZV9kYXRhLT5wYWdlID0gcGFnZTsKKyAgICBmcmFtZV9k
YXRhLT5wYWdlID0gd2ViX3BhZ2U7CiAKICAgICByZXR1cm4gR19PQkpFQ1QoZnJhbWUpOwogfQpJ
bmRleDogV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrcGFnZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0L2d0ay9BcGkvd2Via2l0Z3RrcGFnZS5jcHAJKHJldmlzaW9uIDI0NzE4KQorKysgV2ViS2l0
L2d0ay9BcGkvd2Via2l0Z3RrcGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw1IEBA
CiAvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFp
bC5jb20KICAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dApAQCAtNDAsNiArNDEsMTMgQEAKICNpbmNsdWRlICJGcmFtZUxvYWRl
ci5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIlN1YnN0aXR1dGVEYXRhLmgi
CisjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1LZXli
b2FyZEV2ZW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCisjaW5jbHVkZSAi
SGl0VGVzdFJlcXVlc3QuaCIKKyNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAKIAogdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CkBAIC02NCwyOCArNzIsMTE1IEBAIHN0YXRpYyBndWludCB3ZWJr
aXRfZ3RrX3BhZ2Vfc2lnbmFsc1tMQVMKIAogR19ERUZJTkVfVFlQRShXZWJLaXRHdGtQYWdlLCB3
ZWJraXRfZ3RrX3BhZ2UsIEdUS19UWVBFX0xBWU9VVCkKIAotc3RhdGljIHZvaWQgd2Via2l0X2d0
a19wYWdlX3JlbmRlcmluZ19hcmVhX2hhbmRsZV9nZGtfZXZlbnQoR3RrV2lkZ2V0KiwgR2RrRXZl
bnQqIGV2ZW50LCBXZWJLaXRHdGtQYWdlKiBwYWdlKQorc3RydWN0IEZyYW1lRXhwb3NlRGF0YSB7
CisgICAgR3RrQ29udGFpbmVyICpjb250YWluZXI7CisgICAgR2RrRXZlbnRFeHBvc2UgKmV4cG9z
ZTsKK307CisKK3N0YXRpYyB2b2lkIGZyYW1lX2dka19leHBvc2VfY2hpbGQoR3RrV2lkZ2V0ICp3
aWRnZXQsIGdwb2ludGVyIF9kYXRhKQogewotICAgIFdlYktpdEd0a1BhZ2VQcml2YXRlKiBwYWdl
X2RhdGEgPSBXRUJLSVRfR1RLX1BBR0VfR0VUX1BSSVZBVEUocGFnZSk7Ci0gICAgV2ViS2l0R3Rr
RnJhbWVQcml2YXRlKiBmcmFtZV9kYXRhID0gV0VCS0lUX0dUS19GUkFNRV9HRVRfUFJJVkFURShw
YWdlX2RhdGEtPm1haW5fZnJhbWUpOworICAgIEZyYW1lRXhwb3NlRGF0YSogZGF0YSA9IChGcmFt
ZUV4cG9zZURhdGEqKV9kYXRhOworICAgIGludCB3aWR0aCwgaGVpZ2h0OworICAgIGd0a19jb250
YWluZXJfcHJvcGFnYXRlX2V4cG9zZShkYXRhLT5jb250YWluZXIsIHdpZGdldCwgZGF0YS0+ZXhw
b3NlKTsKK30gCisKKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9ndGtfcGFnZV9leHBvc2VfZXZl
bnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50RXhwb3NlKiBldmVudCkKK3sKKyAgICBXZWJD
b3JlOjpGcmFtZSogZnJhbWUgPSBjb3JlKGdldEZyYW1lRnJvbVBhZ2UoV0VCS0lUX0dUS19QQUdF
KHdpZGdldCkpKTsKKyAgICBHZGtSZWN0YW5nbGUgY2xpcDsKKyAgICBnZGtfcmVnaW9uX2dldF9j
bGlwYm94KGV2ZW50LT5yZWdpb24sICZjbGlwKTsKKyAgICBnZGtfd2luZG93X2JlZ2luX3BhaW50
X3JlZ2lvbihldmVudC0+d2luZG93LCBldmVudC0+cmVnaW9uKTsKKyAgICBjYWlyb190KiBjciA9
IGdka19jYWlyb19jcmVhdGUoZXZlbnQtPndpbmRvdyk7CisgICAgR3JhcGhpY3NDb250ZXh0IGN0
eChjcik7CisgICAgY3R4LnNldEdka0RyYXdhYmxlKGV2ZW50LT53aW5kb3cpOworICAgIGlmIChm
cmFtZS0+cmVuZGVyZXIoKSkgeworICAgICAgICBpZiAoZnJhbWUtPnZpZXcoKS0+bmVlZHNMYXlv
dXQoKSkKKyAgICAgICAgICAgIGZyYW1lLT52aWV3KCktPmxheW91dCgpOworICAgICAgICBJbnRS
ZWN0IHJlY3QoY2xpcC54LCBjbGlwLnksIGNsaXAud2lkdGgsIGNsaXAuaGVpZ2h0KTsKKyAgICAg
ICAgZnJhbWUtPnBhaW50KCZjdHgsIHJlY3QpOworICAgIH0KKyAgICBjYWlyb19kZXN0cm95KGNy
KTsKIAotICAgIGZyYW1lX2RhdGEtPmZyYW1lLT5oYW5kbGVHZGtFdmVudChldmVudCk7CisgICAg
LyoKKyAgICAgKiBNYWtlIHN1cmUgY2hpbGRyZW4gb2YgdGhlIHZpZXcgZ2V0IHJlZHJhd24KKyAg
ICAgKi8KKyAgICBGcmFtZUV4cG9zZURhdGEgZGF0YSA9IHsgR1RLX0NPTlRBSU5FUih3aWRnZXQp
LCBldmVudH07CisgICAgZ3RrX2NvbnRhaW5lcl9mb3JhbGwoR1RLX0NPTlRBSU5FUih3aWRnZXQp
LCBmcmFtZV9nZGtfZXhwb3NlX2NoaWxkLCAmZGF0YSk7CisgICAgZ2RrX3dpbmRvd19lbmRfcGFp
bnQoZXZlbnQtPndpbmRvdyk7CisKKyAgICByZXR1cm4gVFJVRTsKIH0KIAotc3RhdGljIHZvaWQg
d2Via2l0X2d0a19wYWdlX3JlbmRlcmluZ19hcmVhX3Jlc2l6ZV9jYWxsYmFjayhHdGtXaWRnZXQq
LCBHdGtBbGxvY2F0aW9uKiBhbGxvY2F0aW9uLCBXZWJLaXRHdGtQYWdlKiBwYWdlKQorc3RhdGlj
IGdib29sZWFuIHdlYmtpdF9ndGtfcGFnZV9rZXlfZXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdk
a0V2ZW50S2V5KiBldmVudCkKIHsKLSAgICBXZWJLaXRHdGtQYWdlUHJpdmF0ZSogcGFnZV9kYXRh
ID0gV0VCS0lUX0dUS19QQUdFX0dFVF9QUklWQVRFKHBhZ2UpOwotICAgIFdlYktpdEd0a0ZyYW1l
UHJpdmF0ZSogZnJhbWVfZGF0YSA9IFdFQktJVF9HVEtfRlJBTUVfR0VUX1BSSVZBVEUocGFnZV9k
YXRhLT5tYWluX2ZyYW1lKTsKKyAgICBXZWJDb3JlOjpGcmFtZSogZnJhbWUgPSBjb3JlKGdldEZy
YW1lRnJvbVBhZ2UoV0VCS0lUX0dUS19QQUdFKHdpZGdldCkpKTsKKworICAgIGZyYW1lLT5ldmVu
dEhhbmRsZXIoKS0+a2V5RXZlbnQoUGxhdGZvcm1LZXlib2FyZEV2ZW50KGV2ZW50KSk7CisgICAg
cmV0dXJuIFRSVUU7Cit9CiAKLSAgICBmcmFtZV9kYXRhLT5mcmFtZS0+dmlldygpLT51cGRhdGVH
ZW9tZXRyeShhbGxvY2F0aW9uLT53aWR0aCwgYWxsb2NhdGlvbi0+aGVpZ2h0KTsKLSAgICBmcmFt
ZV9kYXRhLT5mcmFtZS0+Zm9yY2VMYXlvdXQoKTsKLSAgICBmcmFtZV9kYXRhLT5mcmFtZS0+dmll
dygpLT5hZGp1c3RWaWV3U2l6ZSgpOwotICAgIGZyYW1lX2RhdGEtPmZyYW1lLT5zZW5kUmVzaXpl
RXZlbnQoKTsKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZ3RrX3BhZ2VfYnV0dG9uX2V2ZW50KEd0
a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudEJ1dHRvbiogZXZlbnQpCit7CisgICAgV2ViQ29yZTo6
RnJhbWUqIGZyYW1lID0gY29yZShnZXRGcmFtZUZyb21QYWdlKFdFQktJVF9HVEtfUEFHRSh3aWRn
ZXQpKSk7CisgICAgCisgICAgaWYgKGV2ZW50LT50eXBlID09IEdES19CVVRUT05fUkVMRUFTRSkK
KyAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVNb3VzZVJlbGVhc2VFdmVudChQ
bGF0Zm9ybU1vdXNlRXZlbnQoZXZlbnQpKTsKKyAgICBlbHNlCisgICAgICAgIGZyYW1lLT5ldmVu
dEhhbmRsZXIoKS0+aGFuZGxlTW91c2VQcmVzc0V2ZW50KFBsYXRmb3JtTW91c2VFdmVudChldmVu
dCkpOworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2d0a19w
YWdlX21vdGlvbl9ldmVudChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRXZlbnRNb3Rpb24qIGV2ZW50
KQoreworICAgIFdlYkNvcmU6OkZyYW1lKiBmcmFtZSA9IGNvcmUoZ2V0RnJhbWVGcm9tUGFnZShX
RUJLSVRfR1RLX1BBR0Uod2lkZ2V0KSkpOworCisgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5t
b3VzZU1vdmVkKFBsYXRmb3JtTW91c2VFdmVudChldmVudCkpOworICAgIHJldHVybiBUUlVFOwog
fQogCi1zdGF0aWMgdm9pZCB3ZWJraXRfZ3RrX3BhZ2VfcmVnaXN0ZXJfcmVuZGVyaW5nX2FyZWFf
ZXZlbnRzKEd0a1dpZGdldCogd2luLCBXZWJLaXRHdGtQYWdlKiBwYWdlKQorc3RhdGljIGdib29s
ZWFuIHdlYmtpdF9ndGtfcGFnZV9zY3JvbGxfZXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2
ZW50U2Nyb2xsKiBldmVudCkKIHsKLSAgICBnZGtfd2luZG93X3NldF9ldmVudHMoR1RLX0lTX0xB
WU9VVCh3aW4pID8gR1RLX0xBWU9VVCh3aW4pLT5iaW5fd2luZG93IDogd2luLT53aW5kb3csCisg
ICAgV2ViQ29yZTo6RnJhbWUqIGZyYW1lID0gY29yZShnZXRGcmFtZUZyb21QYWdlKFdFQktJVF9H
VEtfUEFHRSh3aWRnZXQpKSk7CisKKyAgICBQbGF0Zm9ybVdoZWVsRXZlbnQgd2hlZWxFdmVudChl
dmVudCk7CisgICAgZnJhbWUtPnZpZXcoKS0+d2hlZWxFdmVudCh3aGVlbEV2ZW50KTsKKyAgICBp
ZiAod2hlZWxFdmVudC5pc0FjY2VwdGVkKCkpCisgICAgICAgIHJldHVybiBUUlVFOworCisgICAg
SGl0VGVzdFJlcXVlc3QgaGl0VGVzdFJlcXVlc3QodHJ1ZSwgdHJ1ZSk7CisgICAgSGl0VGVzdFJl
c3VsdCBoaXRUZXN0UmVzdWx0KHdoZWVsRXZlbnQucG9zKCkpOworICAgIGZyYW1lLT5yZW5kZXJl
cigpLT5sYXllcigpLT5oaXRUZXN0KGhpdFRlc3RSZXF1ZXN0LCBoaXRUZXN0UmVzdWx0KTsKKyAg
ICBOb2RlKiBub2RlID0gaGl0VGVzdFJlc3VsdC5pbm5lck5vZGUoKTsKKyAgICBpZiAoIW5vZGUp
CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAvKgorICAgICAqIEZJWE1FOiBEb2VzIHRoaXMg
YmVsb25nIGhlcmU/CisgICAgICogRGVmYXVsdCB0byBzY3JvbGxpbmcgdGhlIHBhZ2UKKyAgICAg
KiBub3Qgc3VyZSB3aHkgaXRzIG51bGwKKyAgICAgKiBicm9rZSBhbnl3YXkgd2hlbiBpdHMgbm90
IG51bGwKKyAgICAgKiBkb1Njcm9sbChyZW5kZXJlcigpLCB3aGVlbEV2ZW50LmRlbHRhWCgpLCB3
aGVlbEV2ZW50LmRlbHRhWSgpKTsKKyAgICAgKi8KKworICAgIHJldHVybiBUUlVFOworfQorCitz
dGF0aWMgdm9pZCB3ZWJraXRfZ3RrX3BhZ2Vfc2l6ZV9hbGxvY2F0ZShHdGtXaWRnZXQqIHdpZGdl
dCwgR3RrQWxsb2NhdGlvbiogYWxsb2NhdGlvbikKK3sKKyAgICBHVEtfV0lER0VUX0NMQVNTKHdl
YmtpdF9ndGtfcGFnZV9wYXJlbnRfY2xhc3MpLT5zaXplX2FsbG9jYXRlKHdpZGdldCwgYWxsb2Nh
dGlvbik7CisKKyAgICBXZWJDb3JlOjpGcmFtZSogZnJhbWUgPSBjb3JlKGdldEZyYW1lRnJvbVBh
Z2UoV0VCS0lUX0dUS19QQUdFKHdpZGdldCkpKTsKKworICAgIGZyYW1lLT52aWV3KCktPnVwZGF0
ZUdlb21ldHJ5KGFsbG9jYXRpb24tPndpZHRoLCBhbGxvY2F0aW9uLT5oZWlnaHQpOworICAgIGZy
YW1lLT5mb3JjZUxheW91dCgpOworICAgIGZyYW1lLT52aWV3KCktPmFkanVzdFZpZXdTaXplKCk7
CisgICAgZnJhbWUtPnNlbmRSZXNpemVFdmVudCgpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRf
Z3RrX3BhZ2VfcmVhbGl6ZShHdGtXaWRnZXQqIHdpZGdldCkKK3sKKyAgICBHVEtfV0lER0VUX0NM
QVNTKHdlYmtpdF9ndGtfcGFnZV9wYXJlbnRfY2xhc3MpLT5yZWFsaXplKHdpZGdldCk7CisgICAg
Z2RrX3dpbmRvd19zZXRfZXZlbnRzKEdUS19MQVlPVVQod2lkZ2V0KS0+YmluX3dpbmRvdywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKEdka0V2ZW50TWFzaykoR0RLX0VYUE9TVVJFX01BU0sK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEdES19CVVRUT05fUFJFU1NfTUFTSwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgR0RLX0JVVFRPTl9SRUxFQVNFX01BU0sKQEAgLTk2
LDE0ICsxOTEsNiBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfZ3RrX3BhZ2VfcmVnaXN0ZXJfcmVuCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBHREtfQlVUVE9OMV9NT1RJT05fTUFTSwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgR0RLX0JVVFRPTjJfTU9USU9OX01BU0sKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8IEdES19CVVRUT04zX01PVElPTl9NQVNLKSk7Ci0KLSAg
ICBnX3NpZ25hbF9jb25uZWN0KEdUS19PQkpFQ1Qod2luKSwgImV4cG9zZS1ldmVudCIsIEdfQ0FM
TEJBQ0sod2Via2l0X2d0a19wYWdlX3JlbmRlcmluZ19hcmVhX2hhbmRsZV9nZGtfZXZlbnQpLCBw
YWdlKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KEdUS19PQkpFQ1Qod2luKSwgImtleS1wcmVzcy1l
dmVudCIsIEdfQ0FMTEJBQ0sod2Via2l0X2d0a19wYWdlX3JlbmRlcmluZ19hcmVhX2hhbmRsZV9n
ZGtfZXZlbnQpLCBwYWdlKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KEdUS19PQkpFQ1Qod2luKSwg
ImtleS1yZWxlYXNlLWV2ZW50IiwgR19DQUxMQkFDSyh3ZWJraXRfZ3RrX3BhZ2VfcmVuZGVyaW5n
X2FyZWFfaGFuZGxlX2dka19ldmVudCksIHBhZ2UpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QoR1RL
X09CSkVDVCh3aW4pLCAiYnV0dG9uLXByZXNzLWV2ZW50IiwgR19DQUxMQkFDSyh3ZWJraXRfZ3Rr
X3BhZ2VfcmVuZGVyaW5nX2FyZWFfaGFuZGxlX2dka19ldmVudCksIHBhZ2UpOwotICAgIGdfc2ln
bmFsX2Nvbm5lY3QoR1RLX09CSkVDVCh3aW4pLCAiYnV0dG9uLXJlbGVhc2UtZXZlbnQiLCBHX0NB
TExCQUNLKHdlYmtpdF9ndGtfcGFnZV9yZW5kZXJpbmdfYXJlYV9oYW5kbGVfZ2RrX2V2ZW50KSwg
cGFnZSk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChHVEtfT0JKRUNUKHdpbiksICJtb3Rpb24tbm90
aWZ5LWV2ZW50IiwgR19DQUxMQkFDSyh3ZWJraXRfZ3RrX3BhZ2VfcmVuZGVyaW5nX2FyZWFfaGFu
ZGxlX2dka19ldmVudCksIHBhZ2UpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QoR1RLX09CSkVDVCh3
aW4pLCAic2Nyb2xsLWV2ZW50IiwgR19DQUxMQkFDSyh3ZWJraXRfZ3RrX3BhZ2VfcmVuZGVyaW5n
X2FyZWFfaGFuZGxlX2dka19ldmVudCksIHBhZ2UpOwogfQogCiBzdGF0aWMgV2ViS2l0R3RrRnJh
bWUqIHdlYmtpdF9ndGtfcGFnZV9yZWFsX2NyZWF0ZV9mcmFtZShXZWJLaXRHdGtQYWdlKiwgV2Vi
S2l0R3RrRnJhbWUqIHBhcmVudCwgV2ViS2l0R3RrRnJhbWVEYXRhKikKQEAgLTE3Niw2ICsyNjMs
MTcgQEAgc3RhdGljIHZvaWQgd2Via2l0X2d0a19wYWdlX2NsYXNzX2luaXQoVwogICAgIC8qCiAg
ICAgICogc2lnbmFscwogICAgICAqLworICAgIEd0a1dpZGdldENsYXNzKiB3aWRnZXRfY2xhc3Mg
PSBHVEtfV0lER0VUX0NMQVNTKHBhZ2VfY2xhc3MpOworICAgIHdpZGdldF9jbGFzcy0+ZXhwb3Nl
X2V2ZW50ID0gd2Via2l0X2d0a19wYWdlX2V4cG9zZV9ldmVudDsKKyAgICB3aWRnZXRfY2xhc3Mt
PmtleV9wcmVzc19ldmVudCA9IHdlYmtpdF9ndGtfcGFnZV9rZXlfZXZlbnQ7CisgICAgd2lkZ2V0
X2NsYXNzLT5rZXlfcmVsZWFzZV9ldmVudCA9IHdlYmtpdF9ndGtfcGFnZV9rZXlfZXZlbnQ7Cisg
ICAgd2lkZ2V0X2NsYXNzLT5idXR0b25fcHJlc3NfZXZlbnQgPSB3ZWJraXRfZ3RrX3BhZ2VfYnV0
dG9uX2V2ZW50OworICAgIHdpZGdldF9jbGFzcy0+YnV0dG9uX3JlbGVhc2VfZXZlbnQgPSB3ZWJr
aXRfZ3RrX3BhZ2VfYnV0dG9uX2V2ZW50OworICAgIHdpZGdldF9jbGFzcy0+bW90aW9uX25vdGlm
eV9ldmVudCA9IHdlYmtpdF9ndGtfcGFnZV9tb3Rpb25fZXZlbnQ7CisgICAgd2lkZ2V0X2NsYXNz
LT5zY3JvbGxfZXZlbnQgPSB3ZWJraXRfZ3RrX3BhZ2Vfc2Nyb2xsX2V2ZW50OworICAgIHdpZGdl
dF9jbGFzcy0+cmVhbGl6ZSA9IHdlYmtpdF9ndGtfcGFnZV9yZWFsaXplOworICAgIHdpZGdldF9j
bGFzcy0+c2l6ZV9hbGxvY2F0ZSA9IHdlYmtpdF9ndGtfcGFnZV9zaXplX2FsbG9jYXRlOworCiAg
ICAgLyoqCiAgICAgICogV2ViS2l0R3RrUGFnZTo6bG9hZC1zdGFydGVkCiAgICAgICogQHBhZ2U6
IHRoZSBvYmplY3Qgb24gd2hpY2ggdGhlIHNpZ25hbCBpcyBlbWl0dGVkCkBAIC0yODQsMTYgKzM4
MiwyOCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfZ3RrX3BhZ2VfY2xhc3NfaW5pdChXCiAKIHN0YXRp
YyB2b2lkIHdlYmtpdF9ndGtfcGFnZV9pbml0KFdlYktpdEd0a1BhZ2UqIHBhZ2UpCiB7Ci0gICAg
V2ViS2l0R3RrUGFnZVByaXZhdGUgKnByaXZhdGVfZGF0YSA9IFdFQktJVF9HVEtfUEFHRV9HRVRf
UFJJVkFURShXRUJLSVRfR1RLX1BBR0UocGFnZSkpOwotICAgIHByaXZhdGVfZGF0YS0+cGFnZSA9
IG5ldyBQYWdlKG5ldyBDaHJvbWVDbGllbnRHZGsocGFnZSksIG5ldyBDb250ZXh0TWVudUNsaWVu
dEdkaywgbmV3IEVkaXRvckNsaWVudEdkayhwYWdlKSwgMCwgbmV3IEluc3BlY3RvckNsaWVudEdk
ayk7Ci0KLQogICAgIEdUS19XSURHRVRfU0VUX0ZMQUdTKHBhZ2UsIEdUS19DQU5fRk9DVVMpOwog
Ci0gICAgZ19zaWduYWxfY29ubmVjdF9hZnRlcihHX09CSkVDVChwYWdlKSwgInJlYWxpemUiLCBH
X0NBTExCQUNLKHdlYmtpdF9ndGtfcGFnZV9yZWdpc3Rlcl9yZW5kZXJpbmdfYXJlYV9ldmVudHMp
LCBwYWdlKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0X2FmdGVyKEdfT0JKRUNUKHBhZ2UpLCAic2l6
ZS1hbGxvY2F0ZSIsIEdfQ0FMTEJBQ0sod2Via2l0X2d0a19wYWdlX3JlbmRlcmluZ19hcmVhX3Jl
c2l6ZV9jYWxsYmFjayksIHBhZ2UpOwotCisgICAgV2ViS2l0R3RrUGFnZVByaXZhdGUgKnByaXZh
dGVfZGF0YSA9IFdFQktJVF9HVEtfUEFHRV9HRVRfUFJJVkFURShXRUJLSVRfR1RLX1BBR0UocGFn
ZSkpOworICAgIHByaXZhdGVfZGF0YS0+cGFnZSA9IG5ldyBQYWdlKG5ldyBDaHJvbWVDbGllbnRH
ZGsocGFnZSksIG5ldyBDb250ZXh0TWVudUNsaWVudEdkaywgbmV3IEVkaXRvckNsaWVudEdkayhw
YWdlKSwgMCwgbmV3IEluc3BlY3RvckNsaWVudEdkayk7CiAgICAgcHJpdmF0ZV9kYXRhLT5tYWlu
X2ZyYW1lID0gV0VCS0lUX0dUS19GUkFNRSh3ZWJraXRfZ3RrX2ZyYW1lX25ldyhwYWdlKSk7CisK
KyAgICAvKgorICAgICAqIFRPRE86IG1vdmUgdGhhdCBvdmVyIHRvIHVzZSB3ZWJraXRndGtzZXR0
aW5ncyAKKyAgICAgKi8KKyAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBwcml2YXRlX2RhdGEtPnBh
Z2UtPnNldHRpbmdzKCk7CisgICAgc2V0dGluZ3MtPnNldExvYWRzSW1hZ2VzQXV0b21hdGljYWxs
eSh0cnVlKTsKKyAgICBzZXR0aW5ncy0+c2V0TWluaW11bUZvbnRTaXplKDUpOworICAgIHNldHRp
bmdzLT5zZXRNaW5pbXVtTG9naWNhbEZvbnRTaXplKDUpOworICAgIHNldHRpbmdzLT5zZXRTaG91
bGRQcmludEJhY2tncm91bmRzKHRydWUpOworICAgIHNldHRpbmdzLT5zZXRKYXZhU2NyaXB0RW5h
YmxlZCh0cnVlKTsKKyAgICAKKyAgICBzZXR0aW5ncy0+c2V0RGVmYXVsdEZpeGVkRm9udFNpemUo
MTQpOworICAgIHNldHRpbmdzLT5zZXREZWZhdWx0Rm9udFNpemUoMTQpOworICAgIHNldHRpbmdz
LT5zZXRTZXJpZkZvbnRGYW1pbHkoIlRpbWVzIE5ldyBSb21hbiIpOworICAgIHNldHRpbmdzLT5z
ZXRTYW5zU2VyaWZGb250RmFtaWx5KCJBcmlhbCIpOworICAgIHNldHRpbmdzLT5zZXRGaXhlZEZv
bnRGYW1pbHkoIkNvdXJpZXIiKTsKKyAgICBzZXR0aW5ncy0+c2V0U3RhbmRhcmRGb250RmFtaWx5
KCJBcmlhbCIpOwogfQogCiBHdGtXaWRnZXQqIHdlYmtpdF9ndGtfcGFnZV9uZXcodm9pZCkKSW5k
ZXg6IFdlYktpdC9ndGsvQXBpL3dlYmtpdGd0a3ByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQvZ3RrL0FwaS93ZWJraXRndGtwcml2YXRlLmgJKHJldmlzaW9uIDI0NzE4KQorKysgV2ViS2l0
L2d0ay9BcGkvd2Via2l0Z3RrcHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3
IEBACiAKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRl
ICJGcmFtZUdkay5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJD
bGllbnRHZGsuaCIKIAogbmFtZXNwYWNlIFdlYktpdEd0ayB7CkBAIC03NCw3ICs3NCw3IEBAIGV4
dGVybiAiQyIgewogICAgICNkZWZpbmUgV0VCS0lUX0dUS19GUkFNRV9HRVRfUFJJVkFURShvYmop
ICAgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUoKG9iaiksIFdFQktJVF9HVEtfVFlQRV9G
UkFNRSwgV2ViS2l0R3RrRnJhbWVQcml2YXRlKSkKICAgICB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0
R3RrRnJhbWVQcml2YXRlIFdlYktpdEd0a0ZyYW1lUHJpdmF0ZTsKICAgICBzdHJ1Y3QgX1dlYktp
dEd0a0ZyYW1lUHJpdmF0ZSB7Ci0gICAgICAgIFdlYkNvcmU6OkZyYW1lR2RrKiBmcmFtZTsKKyAg
ICAgICAgV2ViQ29yZTo6RnJhbWUqIGZyYW1lOwogICAgICAgICBXZWJDb3JlOjpGcmFtZUxvYWRl
ckNsaWVudEdkayogY2xpZW50OwogICAgICAgICBXZWJLaXRHdGtQYWdlKiBwYWdlOwogICAgIH07
Cg==
</data>
<flag name="review"
          id="6547"
          type_id="1"
          status="-"
          setter="zecke"
    />
          </attachment>
      

    </bug>

</bugzilla>