<?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>81117</bug_id>
          
          <creation_ts>2012-03-14 08:50:32 -0700</creation_ts>
          <short_desc>[GTK] Implement unicode submenu items</short_desc>
          <delta_ts>2012-03-15 11:29:13 -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>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>gustavo</cc>
    
    <cc>japhet</cc>
    
    <cc>pnormand</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>578443</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-03-14 08:50:32 -0700</bug_when>
    <thetext>The Unicode submenu has never worked, it&apos;s shown with all of its items disabled because the context menu action is not implemented.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578458</commentid>
    <comment_count>1</comment_count>
      <attachid>131867</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-03-14 09:04:08 -0700</bug_when>
    <thetext>Created attachment 131867
Patch

Moved the implementation back to WebCore (but without using the WebKit layer) so that the menu works also in WebKit2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578563</commentid>
    <comment_count>2</comment_count>
      <attachid>131867</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-03-14 11:04:45 -0700</bug_when>
    <thetext>Comment on attachment 131867
Patch

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

Great patch! I have a few comments, but very nice.

&gt; Source/WebCore/page/ContextMenuController.cpp:190
&gt; +static void insertUnicodeCharacter(gunichar uchar, Frame* frame)

It&apos;s better to use UChar here since that&apos;s what leftToRightMark and the like are defined as.

&gt; Source/WebCore/page/ContextMenuController.cpp:200
&gt; +    long int uchar16Length;
&gt; +    GOwnPtr&lt;gunichar2&gt; uchar16(g_ucs4_to_utf16(&amp;uchar, 1, 0, &amp;uchar16Length, 0));
&gt; +    if (!uchar16)
&gt; +        return;
&gt; +
&gt; +    String text = String(static_cast&lt;UChar*&gt;(uchar16.get()), uchar16Length);
&gt; +    if (text.isEmpty())
&gt; +        return;
&gt; +

Can&apos;t you just do the following?

String text;
text.append(character);

&gt; Source/WebCore/page/ContextMenuController.cpp:602
&gt; +    ContextMenuItem lrm(ActionType, ContextMenuItemTagUnicodeInsertLRMMark, contextMenuItemTagUnicodeInsertLRMMark());
&gt; +    ContextMenuItem rlm(ActionType, ContextMenuItemTagUnicodeInsertRLMMark, contextMenuItemTagUnicodeInsertRLMMark());
&gt; +    ContextMenuItem lre(ActionType, ContextMenuItemTagUnicodeInsertLREMark, contextMenuItemTagUnicodeInsertLREMark());
&gt; +    ContextMenuItem rle(ActionType, ContextMenuItemTagUnicodeInsertRLEMark, contextMenuItemTagUnicodeInsertRLEMark());
&gt; +    ContextMenuItem lro(ActionType, ContextMenuItemTagUnicodeInsertLROMark, contextMenuItemTagUnicodeInsertLROMark());
&gt; +    ContextMenuItem rlo(ActionType, ContextMenuItemTagUnicodeInsertRLOMark, contextMenuItemTagUnicodeInsertRLOMark());
&gt; +    ContextMenuItem pdf(ActionType, ContextMenuItemTagUnicodeInsertPDFMark, contextMenuItemTagUnicodeInsertPDFMark());
&gt; +    ContextMenuItem zws(ActionType, ContextMenuItemTagUnicodeInsertZWSMark, contextMenuItemTagUnicodeInsertZWSMark());
&gt; +    ContextMenuItem zwj(ActionType, ContextMenuItemTagUnicodeInsertZWJMark, contextMenuItemTagUnicodeInsertZWJMark());
&gt; +    ContextMenuItem zwnj(ActionType, ContextMenuItemTagUnicodeInsertZWNJMark, contextMenuItemTagUnicodeInsertZWNJMark());

These names don&apos;t really follow WebKit coding conventions because they are abbreviations, but you could avoid them altogether if you do:

appendItem(ContextMenuItem(ActionType, ContextMenuItemTagUnicodeInsertLRMMark, contextMenuItemTagUnicodeInsertLRMMark()), &amp;unicodeMenu);

etc.

&gt; Source/WebCore/page/ContextMenuController.cpp:1035
&gt; +            bool shouldShowUnicodeMenu = true;
&gt; +            if (EditorClient* client = frame-&gt;editor()-&gt;client())
&gt; +                shouldShowUnicodeMenu = client-&gt;shouldShowUnicodeMenu();
&gt; +            if (shouldShowUnicodeMenu) {

EditorClient* client = frame-&gt;editor()-&gt;client();
if (client &amp;&amp; client-&gt;shouldshowUnicodeMenu())

seems a little cleaner.

&gt; Source/WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:87
&gt; +        // Place the im context menu item right before the unicode menut item
&gt; +        // if it&apos;s present.

s/menut/menu :)

&gt; Source/WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:92
&gt; +        for (iter = items.get(), i = 0; iter; iter = g_list_next(iter), ++i) {

You should define iter inline here:
for (GList* iter = items.get(), i = 0; iter; iter = g_list_next(iter), ++i) {

&gt; Source/WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:99
&gt; +            if (GTK_IS_SEPARATOR_MENU_ITEM(item))
&gt; +                continue;
&gt; +            if (String::fromUTF8(gtk_menu_item_get_label(item)) == contextMenuItemTagUnicode()) {
&gt; +                unicodeMenuItemPosition = i;
&gt; +                break;
&gt; +            }

I think you could split out this code into a helper like bool unicodeMenuPresent() and it&apos;d be clearer what&apos;s going on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578572</commentid>
    <comment_count>3</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-03-14 11:12:42 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 131867 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=131867&amp;action=review
&gt; 
&gt; Great patch! I have a few comments, but very nice.

Thanks for reviewing it.

&gt; &gt; Source/WebCore/page/ContextMenuController.cpp:190
&gt; &gt; +static void insertUnicodeCharacter(gunichar uchar, Frame* frame)
&gt; 
&gt; It&apos;s better to use UChar here since that&apos;s what leftToRightMark and the like are defined as.

Ok.

&gt; &gt; Source/WebCore/page/ContextMenuController.cpp:200
&gt; &gt; +    long int uchar16Length;
&gt; &gt; +    GOwnPtr&lt;gunichar2&gt; uchar16(g_ucs4_to_utf16(&amp;uchar, 1, 0, &amp;uchar16Length, 0));
&gt; &gt; +    if (!uchar16)
&gt; &gt; +        return;
&gt; &gt; +
&gt; &gt; +    String text = String(static_cast&lt;UChar*&gt;(uchar16.get()), uchar16Length);
&gt; &gt; +    if (text.isEmpty())
&gt; &gt; +        return;
&gt; &gt; +
&gt; 
&gt; Can&apos;t you just do the following?
&gt; 
&gt; String text;
&gt; text.append(character);

I&apos;ll try.

&gt; &gt; Source/WebCore/page/ContextMenuController.cpp:602
&gt; &gt; +    ContextMenuItem lrm(ActionType, ContextMenuItemTagUnicodeInsertLRMMark, contextMenuItemTagUnicodeInsertLRMMark());
&gt; &gt; +    ContextMenuItem rlm(ActionType, ContextMenuItemTagUnicodeInsertRLMMark, contextMenuItemTagUnicodeInsertRLMMark());
&gt; &gt; +    ContextMenuItem lre(ActionType, ContextMenuItemTagUnicodeInsertLREMark, contextMenuItemTagUnicodeInsertLREMark());
&gt; &gt; +    ContextMenuItem rle(ActionType, ContextMenuItemTagUnicodeInsertRLEMark, contextMenuItemTagUnicodeInsertRLEMark());
&gt; &gt; +    ContextMenuItem lro(ActionType, ContextMenuItemTagUnicodeInsertLROMark, contextMenuItemTagUnicodeInsertLROMark());
&gt; &gt; +    ContextMenuItem rlo(ActionType, ContextMenuItemTagUnicodeInsertRLOMark, contextMenuItemTagUnicodeInsertRLOMark());
&gt; &gt; +    ContextMenuItem pdf(ActionType, ContextMenuItemTagUnicodeInsertPDFMark, contextMenuItemTagUnicodeInsertPDFMark());
&gt; &gt; +    ContextMenuItem zws(ActionType, ContextMenuItemTagUnicodeInsertZWSMark, contextMenuItemTagUnicodeInsertZWSMark());
&gt; &gt; +    ContextMenuItem zwj(ActionType, ContextMenuItemTagUnicodeInsertZWJMark, contextMenuItemTagUnicodeInsertZWJMark());
&gt; &gt; +    ContextMenuItem zwnj(ActionType, ContextMenuItemTagUnicodeInsertZWNJMark, contextMenuItemTagUnicodeInsertZWNJMark());
&gt; 
&gt; These names don&apos;t really follow WebKit coding conventions because they are abbreviations, but you could avoid them altogether if you do:
&gt; 
&gt; appendItem(ContextMenuItem(ActionType, ContextMenuItemTagUnicodeInsertLRMMark, contextMenuItemTagUnicodeInsertLRMMark()), &amp;unicodeMenu);
&gt; 
&gt; etc.

That&apos;s not what all other methods of ContextMenuController file do, I prefer to keep consistency with the other method of the same file.

&gt; &gt; Source/WebCore/page/ContextMenuController.cpp:1035
&gt; &gt; +            bool shouldShowUnicodeMenu = true;
&gt; &gt; +            if (EditorClient* client = frame-&gt;editor()-&gt;client())
&gt; &gt; +                shouldShowUnicodeMenu = client-&gt;shouldShowUnicodeMenu();
&gt; &gt; +            if (shouldShowUnicodeMenu) {
&gt; 
&gt; EditorClient* client = frame-&gt;editor()-&gt;client();
&gt; if (client &amp;&amp; client-&gt;shouldshowUnicodeMenu())
&gt; 
&gt; seems a little cleaner.

Ok.

&gt; &gt; Source/WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:87
&gt; &gt; +        // Place the im context menu item right before the unicode menut item
&gt; &gt; +        // if it&apos;s present.
&gt; 
&gt; s/menut/menu :)

Oops

&gt; &gt; Source/WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:92
&gt; &gt; +        for (iter = items.get(), i = 0; iter; iter = g_list_next(iter), ++i) {
&gt; 
&gt; You should define iter inline here:
&gt; for (GList* iter = items.get(), i = 0; iter; iter = g_list_next(iter), ++i) {

That doesn&apos;t work, it means i is a GList*.

&gt; &gt; Source/WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:99
&gt; &gt; +            if (GTK_IS_SEPARATOR_MENU_ITEM(item))
&gt; &gt; +                continue;
&gt; &gt; +            if (String::fromUTF8(gtk_menu_item_get_label(item)) == contextMenuItemTagUnicode()) {
&gt; &gt; +                unicodeMenuItemPosition = i;
&gt; &gt; +                break;
&gt; &gt; +            }
&gt; 
&gt; I think you could split out this code into a helper like bool unicodeMenuPresent() and it&apos;d be clearer what&apos;s going on.

Ok.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578586</commentid>
    <comment_count>4</comment_count>
      <attachid>131867</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-03-14 11:24:48 -0700</bug_when>
    <thetext>Comment on attachment 131867
Patch

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

&gt;&gt;&gt; Source/WebCore/page/ContextMenuController.cpp:602
&gt;&gt;&gt; +    ContextMenuItem zwnj(ActionType, ContextMenuItemTagUnicodeInsertZWNJMark, contextMenuItemTagUnicodeInsertZWNJMark());
&gt;&gt; 
&gt;&gt; These names don&apos;t really follow WebKit coding conventions because they are abbreviations, but you could avoid them altogether if you do:
&gt;&gt; 
&gt;&gt; appendItem(ContextMenuItem(ActionType, ContextMenuItemTagUnicodeInsertLRMMark, contextMenuItemTagUnicodeInsertLRMMark()), &amp;unicodeMenu);
&gt;&gt; 
&gt;&gt; etc.
&gt; 
&gt; That&apos;s not what all other methods of ContextMenuController file do, I prefer to keep consistency with the other method of the same file.

The older code may have been written before that part of the style guide, so you should either do: 

appendItem(ContextMenuItem(ActionType, ContextMenuItemTagUnicodeInsertLRMMark, contextMenuItemTagUnicodeInsertLRMMark()), &amp;unicodeMenu);

or

ContextMenuItem leftToRightMarkItem(ActionType, ContextMenuItemTagUnicodeInsertLRMMark, contextMenuItemTagUnicodeInsertLRMMark());
appendItem(leftToRightMarkItem &amp;unicodeMenu);

New code should follow the style guide.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578613</commentid>
    <comment_count>5</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-03-14 11:56:17 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 131867 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=131867&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/page/ContextMenuController.cpp:602
&gt; &gt;&gt;&gt; +    ContextMenuItem zwnj(ActionType, ContextMenuItemTagUnicodeInsertZWNJMark, contextMenuItemTagUnicodeInsertZWNJMark());
&gt; &gt;&gt; 
&gt; &gt;&gt; These names don&apos;t really follow WebKit coding conventions because they are abbreviations, but you could avoid them altogether if you do:
&gt; &gt;&gt; 
&gt; &gt;&gt; appendItem(ContextMenuItem(ActionType, ContextMenuItemTagUnicodeInsertLRMMark, contextMenuItemTagUnicodeInsertLRMMark()), &amp;unicodeMenu);
&gt; &gt;&gt; 
&gt; &gt;&gt; etc.
&gt; &gt; 
&gt; &gt; That&apos;s not what all other methods of ContextMenuController file do, I prefer to keep consistency with the other method of the same file.
&gt; 
&gt; The older code may have been written before that part of the style guide,

really?

&gt; so you should either do: 
&gt; 
&gt; appendItem(ContextMenuItem(ActionType, ContextMenuItemTagUnicodeInsertLRMMark, contextMenuItemTagUnicodeInsertLRMMark()), &amp;unicodeMenu);

I would have to try, but I think that won&apos;t work, appendItem expects a ContextMenuItem&amp;, and I guess that&apos;s the reason while all other methods use a variable to create context menu items.

&gt; or
&gt; 
&gt; ContextMenuItem leftToRightMarkItem(ActionType, ContextMenuItemTagUnicodeInsertLRMMark, contextMenuItemTagUnicodeInsertLRMMark());
&gt; appendItem(leftToRightMarkItem &amp;unicodeMenu);

Ok, I&apos;ll rename the variables.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579207</commentid>
    <comment_count>6</comment_count>
      <attachid>132003</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-03-15 01:54:14 -0700</bug_when>
    <thetext>Created attachment 132003
Updated patch

Addressed all review comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579469</commentid>
    <comment_count>7</comment_count>
      <attachid>132003</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-03-15 10:15:10 -0700</bug_when>
    <thetext>Comment on attachment 132003
Updated patch

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

&gt; Source/WebCore/page/ContextMenuController.cpp:192
&gt; +static void insertUnicodeCharacter(UChar uchar, Frame* frame)
&gt; +{
&gt; +    String text(&amp;uchar, 1);

You should probably just call this UChar char or UChar character. Converting UChar to camel-case leaves uChar.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579496</commentid>
    <comment_count>8</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-03-15 10:35:22 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 132003 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=132003&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/page/ContextMenuController.cpp:192
&gt; &gt; +static void insertUnicodeCharacter(UChar uchar, Frame* frame)
&gt; &gt; +{
&gt; &gt; +    String text(&amp;uchar, 1);
&gt; 
&gt; You should probably just call this UChar char or UChar character. Converting UChar to camel-case leaves uChar.

char is a reserved word, I&apos;ll use character</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579567</commentid>
    <comment_count>9</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-03-15 11:29:13 -0700</bug_when>
    <thetext>Committed r110865: &lt;http://trac.webkit.org/changeset/110865&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>131867</attachid>
            <date>2012-03-14 09:04:08 -0700</date>
            <delta_ts>2012-03-15 01:54:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>gtk-unicode-menu.diff</filename>
            <type>text/plain</type>
            <size>23929</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBjMzZiYmJhLi4xZTZiYmQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDMg
QEAKKzIwMTItMDMtMTQgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdIEltcGxlbWVudCB1bmljb2RlIHN1Ym1lbnUgaXRlbXMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxMTE3CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBsb2FkZXIvRW1wdHlD
bGllbnRzLmg6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUVkaXRvckNsaWVudDo6c2hvdWxkU2hv
d1VuaWNvZGVNZW51KTogSnVzdCByZXR1cm4KKyAgICAgICAgZmFsc2UuCisgICAgICAgICogcGFn
ZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aW5zZXJ0VW5p
Y29kZUNoYXJhY3Rlcik6IEhlbHBlciBmdW5jdGlvbiB0byBpbnNlcnQgYQorICAgICAgICB1bmlj
b2RlIGNoYXJhY3Rlci4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51Q29udHJvbGxlcjo6
Y29udGV4dE1lbnVJdGVtU2VsZWN0ZWQpOgorICAgICAgICBJbXBsZW1lbnQgdW5pY29kZSBtZW51
IGl0ZW1zIHVzaW5nIGluc2VydFVuaWNvZGVDaGFyYWN0ZXIoKSB0bworICAgICAgICBpbnNlcnQg
dGhlIGFwcm9wcmlhdGUgdW5pY29kZSBjaGFyYWN0ZXIuCisgICAgICAgIChXZWJDb3JlOjpDb250
ZXh0TWVudUNvbnRyb2xsZXI6OmNyZWF0ZUFuZEFwcGVuZFVuaWNvZGVTdWJNZW51KToKKyAgICAg
ICAgQ3JlYXRlIHRoZSB1bmljb2RlIHN1Ym1lbnUuCisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0
TWVudUNvbnRyb2xsZXI6OnBvcHVsYXRlKTogQWRkIHVuaWNvZGUgc3VibWVudQorICAgICAgICBp
dGVtIGZvciBlZGl0YWJsZSBjb250ZW50LgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVD
b250cm9sbGVyOjpjaGVja09yRW5hYmxlSWZOZWVkZWQpOiBBZGQKKyAgICAgICAgdW5pY29kZSBz
dWJtZW51IGl0ZW1zIHRvIHRoZSBzd2l0Y2guCisgICAgICAgICogcGFnZS9Db250ZXh0TWVudUNv
bnRyb2xsZXIuaDoKKyAgICAgICAgKiBwYWdlL0VkaXRvckNsaWVudC5oOgorICAgICAgICAoRWRp
dG9yQ2xpZW50KTogQWRkIHNob3VsZFNob3dVbmljb2RlTWVudSgpIGZvciBHVEsgcGxhdGZvcm0u
CisgICAgICAgICogcGxhdGZvcm0vQ29udGV4dE1lbnVJdGVtLmg6CisgICAgICAgICogcGxhdGZv
cm0vTG9jYWxpemVkU3RyaW5ncy5oOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9Mb2NhbGl6ZWRT
dHJpbmdzR3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ1VuaWNv
ZGVJbnNlcnRMUk1NYXJrKTogQWRkIGxvY2FsaXplZAorICAgICAgICBzdHJpbmcgZm9yIHRoZSB1
bmljb2RlIG1lbnUgaXRlbS4KKyAgICAgICAgKFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ1Vu
aWNvZGVJbnNlcnRSTE1NYXJrKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpjb250ZXh0TWVu
dUl0ZW1UYWdVbmljb2RlSW5zZXJ0TFJFTWFyayk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
Y29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydFJMRU1hcmspOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ1VuaWNvZGVJbnNlcnRMUk9NYXJrKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdVbmljb2RlSW5zZXJ0UkxPTWFy
ayk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUlu
c2VydFBERk1hcmspOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRh
Z1VuaWNvZGVJbnNlcnRaV1NNYXJrKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpjb250ZXh0
TWVudUl0ZW1UYWdVbmljb2RlSW5zZXJ0WldKTWFyayk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6Y29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydFpXTkpNYXJrKTogRGl0dG8uCisKIDIw
MTItMDMtMTQgIFNlcmdpbyBWaWxsYXIgU2VuaW4gIDxzdmlsbGFyQGlnYWxpYS5jb20+CiAKICAg
ICAgICAgVW5yZXZpZXdlZC4gQnVpbGQgZml4IGZvciBFRkwgYWZ0ZXIgcjExMDY2OS4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0No
YW5nZUxvZwppbmRleCBiOTExODM3Li44ZjJiMTFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2d0ay9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTggQEAKKzIwMTItMDMtMTQgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2Fs
aWEuY29tPgorCisgICAgICAgIFtHVEtdIEltcGxlbWVudCB1bmljb2RlIHN1Ym1lbnUgaXRlbXMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxMTE3CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9Db250ZXh0TWVudUNsaWVudEd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNvbnRl
eHRNZW51Q2xpZW50OjpnZXRDdXN0b21NZW51RnJvbURlZmF1bHRJdGVtcyk6IFJlbW92ZQorICAg
ICAgICBjb2RlIHRvIGJ1aWxkIHRoZSB1bmljb2RlIG1lbnUsIHNpbmNlIGl0J3Mgbm93IGJ1aWx0
IGJ5IFdlYkNvcmUuCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50R3RrLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50OjpzaG91bGRTaG93VW5pY29kZU1lbnUp
OiBDaGVjayB3aGV0aGVyCisgICAgICAgIHVuaWNvZGUgbWVudSBzaG91bGQgYmUgc2hvd24gYmFz
ZWQgb24gZ3RrLXNob3ctdW5pY29kZS1tZW51IEd0a1NldHRpbmcuCisgICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvRWRpdG9yQ2xpZW50R3RrLmg6CisKIDIwMTItMDMtMTMgIEFkYW0gQmFydGggIDxh
YmFydGhAd2Via2l0Lm9yZz4gJiYgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxlLmNv
bT4KIAogICAgICAgICBBbHdheXMgZW5hYmxlIEVOQUJMRShDTElFTlRfQkFTRURfR0VPTE9DQVRJ
T04pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKaW5kZXggMWY0YjNiMC4uOWRlMmY1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE3IEBACisyMDEyLTAzLTE0ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlh
LmNvbT4KKworICAgICAgICBbR1RLXSBJbXBsZW1lbnQgdW5pY29kZSBzdWJtZW51IGl0ZW1zCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MTExNworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJFZGl0b3JDbGllbnRHdGsuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJFZGl0b3JDbGllbnQ6OnNob3VsZFNob3dVbmljb2RlTWVudSk6IEltcGxlbWVudAor
ICAgICAgICBzaG91bGRTaG93VW5pY29kZU1lbnUoKSByZXR1cm5pbmcgYWx3YXlzIHRydWUuIFdo
ZW4gQ29udGV4dE1lbnUKKyAgICAgICAgQVBJIGlzIGltcGxlbWVudGVkIGZvciBHVEsrIHRoZSBV
SSBwcm9jZXNzIHdpbGwgZGVjaWRlIHdoZXRoZXIgdG8KKyAgICAgICAgc2hvdyB0aGUgdW5pY29k
ZSBtZW51IG9yIG5vdC4KKwogMjAxMi0wMy0xMyAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FA
YXBwbGUuY29tPgogCiAgICAgICAgIEZpbmQgYm91bmN5IGRvZXNu4oCZdCBoaWRlIHdoZW4gYSBz
dWJmcmFtZSBpcyBzY3JvbGxlZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Vt
cHR5Q2xpZW50cy5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCmluZGV4
IGE2NWY0ZjYuLjMzYzI1ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0
eUNsaWVudHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgKQEAg
LTUxNyw2ICs1MTcsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzQXV0b21hdGljU3Bl
bGxpbmdDb3JyZWN0aW9uRW5hYmxlZCgpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCB2
b2lkIHRvZ2dsZUF1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbigpIHsgfQogI2VuZGlmCisjaWYg
UExBVEZPUk0oR1RLKQorICAgIHZpcnR1YWwgYm9vbCBzaG91bGRTaG93VW5pY29kZU1lbnUoKSB7
IHJldHVybiBmYWxzZTsgfQorI2VuZGlmCiAgICAgVGV4dENoZWNrZXJDbGllbnQqIHRleHRDaGVj
a2VyKCkgeyByZXR1cm4gJm1fdGV4dENoZWNrZXJDbGllbnQ7IH0KIAogI2lmIFVTRShBVVRPQ09S
UkVDVElPTl9QQU5FTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGV4dE1l
bnVDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9s
bGVyLmNwcAppbmRleCBjNTE1Njc1Li5iZmZmY2E2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwCkBAIC02NSwxMSArNjUsMTYgQEAKICNpbmNsdWRl
ICJSZXNvdXJjZVJlcXVlc3QuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlRl
eHRJdGVyYXRvci5oIgorI2luY2x1ZGUgIlR5cGluZ0NvbW1hbmQuaCIKICNpbmNsdWRlICJVc2Vy
VHlwaW5nR2VzdHVyZUluZGljYXRvci5oIgogI2luY2x1ZGUgIldpbmRvd0ZlYXR1cmVzLmgiCiAj
aW5jbHVkZSAibWFya3VwLmgiCiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVW5pY29kZS5oPgogCisj
aWYgUExBVEZPUk0oR1RLKQorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKyNlbmRp
ZgorCiB1c2luZyBuYW1lc3BhY2UgV1RGOwogdXNpbmcgbmFtZXNwYWNlIFVuaWNvZGU7CiAKQEAg
LTE4MSw2ICsxODYsMjUgQEAgc3RhdGljIHZvaWQgb3Blbk5ld1dpbmRvdyhjb25zdCBLVVJMJiB1
cmxUb0xvYWQsIEZyYW1lKiBmcmFtZSkKICAgICB9CiB9CiAKKyNpZiBQTEFURk9STShHVEspCitz
dGF0aWMgdm9pZCBpbnNlcnRVbmljb2RlQ2hhcmFjdGVyKGd1bmljaGFyIHVjaGFyLCBGcmFtZSog
ZnJhbWUpCit7CisgICAgbG9uZyBpbnQgdWNoYXIxNkxlbmd0aDsKKyAgICBHT3duUHRyPGd1bmlj
aGFyMj4gdWNoYXIxNihnX3VjczRfdG9fdXRmMTYoJnVjaGFyLCAxLCAwLCAmdWNoYXIxNkxlbmd0
aCwgMCkpOworICAgIGlmICghdWNoYXIxNikKKyAgICAgICAgcmV0dXJuOworCisgICAgU3RyaW5n
IHRleHQgPSBTdHJpbmcoc3RhdGljX2Nhc3Q8VUNoYXIqPih1Y2hhcjE2LmdldCgpKSwgdWNoYXIx
Nkxlbmd0aCk7CisgICAgaWYgKHRleHQuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBpZiAoIWZyYW1lLT5lZGl0b3IoKS0+c2hvdWxkSW5zZXJ0VGV4dCh0ZXh0LCBmcmFtZS0+c2Vs
ZWN0aW9uKCktPnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvblR5
cGVkKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0VGV4dChm
cmFtZS0+ZG9jdW1lbnQoKSwgdGV4dCwgMCwgVHlwaW5nQ29tbWFuZDo6VGV4dENvbXBvc2l0aW9u
Tm9uZSk7Cit9CisjZW5kaWYKKwogdm9pZCBDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNvbnRleHRN
ZW51SXRlbVNlbGVjdGVkKENvbnRleHRNZW51SXRlbSogaXRlbSkKIHsKICAgICBBU1NFUlQoaXRl
bS0+dHlwZSgpID09IEFjdGlvblR5cGUgfHwgaXRlbS0+dHlwZSgpID09IENoZWNrYWJsZUFjdGlv
blR5cGUpOwpAQCAtMjg0LDYgKzMwOCwzNiBAQCB2b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6
Y29udGV4dE1lbnVJdGVtU2VsZWN0ZWQoQ29udGV4dE1lbnVJdGVtKiBpdGVtKQogICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtVGFnRGVsZXRlOgogICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPnBlcmZv
cm1EZWxldGUoKTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdV
bmljb2RlSW5zZXJ0TFJNTWFyazoKKyAgICAgICAgaW5zZXJ0VW5pY29kZUNoYXJhY3RlcihsZWZ0
VG9SaWdodE1hcmssIGZyYW1lKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb250ZXh0TWVu
dUl0ZW1UYWdVbmljb2RlSW5zZXJ0UkxNTWFyazoKKyAgICAgICAgaW5zZXJ0VW5pY29kZUNoYXJh
Y3RlcihyaWdodFRvTGVmdE1hcmssIGZyYW1lKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBD
b250ZXh0TWVudUl0ZW1UYWdVbmljb2RlSW5zZXJ0TFJFTWFyazoKKyAgICAgICAgaW5zZXJ0VW5p
Y29kZUNoYXJhY3RlcihsZWZ0VG9SaWdodEVtYmVkLCBmcmFtZSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydFJMRU1hcms6CisgICAgICAg
IGluc2VydFVuaWNvZGVDaGFyYWN0ZXIocmlnaHRUb0xlZnRFbWJlZCwgZnJhbWUpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1VuaWNvZGVJbnNlcnRMUk9NYXJr
OgorICAgICAgICBpbnNlcnRVbmljb2RlQ2hhcmFjdGVyKGxlZnRUb1JpZ2h0T3ZlcnJpZGUsIGZy
YW1lKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdVbmljb2Rl
SW5zZXJ0UkxPTWFyazoKKyAgICAgICAgaW5zZXJ0VW5pY29kZUNoYXJhY3RlcihyaWdodFRvTGVm
dE92ZXJyaWRlLCBmcmFtZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29udGV4dE1lbnVJ
dGVtVGFnVW5pY29kZUluc2VydFBERk1hcms6CisgICAgICAgIGluc2VydFVuaWNvZGVDaGFyYWN0
ZXIocG9wRGlyZWN0aW9uYWxGb3JtYXR0aW5nLCBmcmFtZSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydFpXU01hcms6CisgICAgICAgIGlu
c2VydFVuaWNvZGVDaGFyYWN0ZXIoemVyb1dpZHRoU3BhY2UsIGZyYW1lKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdVbmljb2RlSW5zZXJ0WldKTWFyazoKKyAg
ICAgICAgaW5zZXJ0VW5pY29kZUNoYXJhY3Rlcih6ZXJvV2lkdGhKb2luZXIsIGZyYW1lKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdVbmljb2RlSW5zZXJ0WldO
Sk1hcms6CisgICAgICAgIGluc2VydFVuaWNvZGVDaGFyYWN0ZXIoemVyb1dpZHRoTm9uSm9pbmVy
LCBmcmFtZSk7CisgICAgICAgIGJyZWFrOwogI2VuZGlmCiAjaWYgUExBVEZPUk0oR1RLKSB8fCBQ
TEFURk9STShRVCkgfHwgUExBVEZPUk0oRUZMKQogICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFn
U2VsZWN0QWxsOgpAQCAtNTMwLDcgKzU4NCwzOCBAQCB2b2lkIENvbnRleHRNZW51Q29udHJvbGxl
cjo6Y3JlYXRlQW5kQXBwZW5kU3BlZWNoU3ViTWVudShDb250ZXh0TWVudUl0ZW0mIHNwZWVjaAog
CiAjZW5kaWYKICAKLSNpZiAhUExBVEZPUk0oR1RLKQorI2lmIFBMQVRGT1JNKEdUSykKKwordm9p
ZCBDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNyZWF0ZUFuZEFwcGVuZFVuaWNvZGVTdWJNZW51KENv
bnRleHRNZW51SXRlbSYgdW5pY29kZU1lbnVJdGVtKQoreworICAgIENvbnRleHRNZW51IHVuaWNv
ZGVNZW51OworCisgICAgQ29udGV4dE1lbnVJdGVtIGxybShBY3Rpb25UeXBlLCBDb250ZXh0TWVu
dUl0ZW1UYWdVbmljb2RlSW5zZXJ0TFJNTWFyaywgY29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUlu
c2VydExSTU1hcmsoKSk7CisgICAgQ29udGV4dE1lbnVJdGVtIHJsbShBY3Rpb25UeXBlLCBDb250
ZXh0TWVudUl0ZW1UYWdVbmljb2RlSW5zZXJ0UkxNTWFyaywgY29udGV4dE1lbnVJdGVtVGFnVW5p
Y29kZUluc2VydFJMTU1hcmsoKSk7CisgICAgQ29udGV4dE1lbnVJdGVtIGxyZShBY3Rpb25UeXBl
LCBDb250ZXh0TWVudUl0ZW1UYWdVbmljb2RlSW5zZXJ0TFJFTWFyaywgY29udGV4dE1lbnVJdGVt
VGFnVW5pY29kZUluc2VydExSRU1hcmsoKSk7CisgICAgQ29udGV4dE1lbnVJdGVtIHJsZShBY3Rp
b25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdVbmljb2RlSW5zZXJ0UkxFTWFyaywgY29udGV4dE1l
bnVJdGVtVGFnVW5pY29kZUluc2VydFJMRU1hcmsoKSk7CisgICAgQ29udGV4dE1lbnVJdGVtIGxy
byhBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdVbmljb2RlSW5zZXJ0TFJPTWFyaywgY29u
dGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydExST01hcmsoKSk7CisgICAgQ29udGV4dE1lbnVJ
dGVtIHJsbyhBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdVbmljb2RlSW5zZXJ0UkxPTWFy
aywgY29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydFJMT01hcmsoKSk7CisgICAgQ29udGV4
dE1lbnVJdGVtIHBkZihBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdVbmljb2RlSW5zZXJ0
UERGTWFyaywgY29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydFBERk1hcmsoKSk7CisgICAg
Q29udGV4dE1lbnVJdGVtIHp3cyhBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdVbmljb2Rl
SW5zZXJ0WldTTWFyaywgY29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydFpXU01hcmsoKSk7
CisgICAgQ29udGV4dE1lbnVJdGVtIHp3aihBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdV
bmljb2RlSW5zZXJ0WldKTWFyaywgY29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydFpXSk1h
cmsoKSk7CisgICAgQ29udGV4dE1lbnVJdGVtIHp3bmooQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJ
dGVtVGFnVW5pY29kZUluc2VydFpXTkpNYXJrLCBjb250ZXh0TWVudUl0ZW1UYWdVbmljb2RlSW5z
ZXJ0WldOSk1hcmsoKSk7CisKKyAgICBhcHBlbmRJdGVtKGxybSwgJnVuaWNvZGVNZW51KTsKKyAg
ICBhcHBlbmRJdGVtKHJsbSwgJnVuaWNvZGVNZW51KTsKKyAgICBhcHBlbmRJdGVtKGxyZSwgJnVu
aWNvZGVNZW51KTsKKyAgICBhcHBlbmRJdGVtKHJsZSwgJnVuaWNvZGVNZW51KTsKKyAgICBhcHBl
bmRJdGVtKGxybywgJnVuaWNvZGVNZW51KTsKKyAgICBhcHBlbmRJdGVtKHJsbywgJnVuaWNvZGVN
ZW51KTsKKyAgICBhcHBlbmRJdGVtKHBkZiwgJnVuaWNvZGVNZW51KTsKKyAgICBhcHBlbmRJdGVt
KHp3cywgJnVuaWNvZGVNZW51KTsKKyAgICBhcHBlbmRJdGVtKHp3aiwgJnVuaWNvZGVNZW51KTsK
KyAgICBhcHBlbmRJdGVtKHp3bmosICZ1bmljb2RlTWVudSk7CisKKyAgICB1bmljb2RlTWVudUl0
ZW0uc2V0U3ViTWVudSgmdW5pY29kZU1lbnUpOworfQorCisjZWxzZQogCiB2b2lkIENvbnRleHRN
ZW51Q29udHJvbGxlcjo6Y3JlYXRlQW5kQXBwZW5kV3JpdGluZ0RpcmVjdGlvblN1Yk1lbnUoQ29u
dGV4dE1lbnVJdGVtJiB3cml0aW5nRGlyZWN0aW9uTWVudUl0ZW0pCiB7CkBAIC05NDMsNyArMTAy
OCwxNyBAQCB2b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6cG9wdWxhdGUoKQogICAgICAgICAg
ICAgY3JlYXRlQW5kQXBwZW5kU3BlZWNoU3ViTWVudShTcGVlY2hNZW51SXRlbSk7CiAgICAgICAg
ICAgICBhcHBlbmRJdGVtKFNwZWVjaE1lbnVJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKICNl
bmRpZgotI2lmICFQTEFURk9STShHVEspCisjaWYgUExBVEZPUk0oR1RLKQorICAgICAgICAgICAg
Ym9vbCBzaG91bGRTaG93VW5pY29kZU1lbnUgPSB0cnVlOworICAgICAgICAgICAgaWYgKEVkaXRv
ckNsaWVudCogY2xpZW50ID0gZnJhbWUtPmVkaXRvcigpLT5jbGllbnQoKSkKKyAgICAgICAgICAg
ICAgICBzaG91bGRTaG93VW5pY29kZU1lbnUgPSBjbGllbnQtPnNob3VsZFNob3dVbmljb2RlTWVu
dSgpOworICAgICAgICAgICAgaWYgKHNob3VsZFNob3dVbmljb2RlTWVudSkgeworICAgICAgICAg
ICAgICAgIENvbnRleHRNZW51SXRlbSBVbmljb2RlTWVudUl0ZW0oU3VibWVudVR5cGUsIENvbnRl
eHRNZW51SXRlbVRhZ1VuaWNvZGUsIGNvbnRleHRNZW51SXRlbVRhZ1VuaWNvZGUoKSk7CisgICAg
ICAgICAgICAgICAgY3JlYXRlQW5kQXBwZW5kVW5pY29kZVN1Yk1lbnUoVW5pY29kZU1lbnVJdGVt
KTsKKyAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCksIG1fY29udGV4
dE1lbnUuZ2V0KCkpOworICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oVW5pY29kZU1lbnVJdGVt
LCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgICAgIH0KKyNlbHNlCiAgICAgICAgICAg
ICBDb250ZXh0TWVudUl0ZW0gV3JpdGluZ0RpcmVjdGlvbk1lbnVJdGVtKFN1Ym1lbnVUeXBlLCBD
b250ZXh0TWVudUl0ZW1UYWdXcml0aW5nRGlyZWN0aW9uTWVudSwgCiAgICAgICAgICAgICAgICAg
Y29udGV4dE1lbnVJdGVtVGFnV3JpdGluZ0RpcmVjdGlvbk1lbnUoKSk7CiAgICAgICAgICAgICBj
cmVhdGVBbmRBcHBlbmRXcml0aW5nRGlyZWN0aW9uU3ViTWVudShXcml0aW5nRGlyZWN0aW9uTWVu
dUl0ZW0pOwpAQCAtMTA2Miw2ICsxMTU3LDE2IEBAIHZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVy
OjpjaGVja09yRW5hYmxlSWZOZWVkZWQoQ29udGV4dE1lbnVJdGVtJiBpdGVtKSBjb25zdAogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnSW5wdXRNZXRo
b2RzOgogICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1VuaWNvZGU6CisgICAgICAgIGNh
c2UgQ29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydExSTU1hcms6CisgICAgICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydFJMTU1hcms6CisgICAgICAgIGNhc2UgQ29u
dGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydExSRU1hcms6CisgICAgICAgIGNhc2UgQ29udGV4
dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydFJMRU1hcms6CisgICAgICAgIGNhc2UgQ29udGV4dE1l
bnVJdGVtVGFnVW5pY29kZUluc2VydExST01hcms6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJ
dGVtVGFnVW5pY29kZUluc2VydFJMT01hcms6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVt
VGFnVW5pY29kZUluc2VydFBERk1hcms6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFn
VW5pY29kZUluc2VydFpXU01hcms6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnVW5p
Y29kZUluc2VydFpXSk1hcms6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnVW5pY29k
ZUluc2VydFpXTkpNYXJrOgogICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gdHJ1ZTsKICAgICAg
ICAgICAgIGJyZWFrOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nv
bnRleHRNZW51Q29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNv
bnRyb2xsZXIuaAppbmRleCBmZGFlOTQ2Li5kM2M1NmEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmgKQEAgLTg1LDYgKzg1LDkgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICB2b2lkIGNyZWF0ZUFuZEFwcGVuZFRleHREaXJlY3Rpb25TdWJNZW51
KENvbnRleHRNZW51SXRlbSYpOwogICAgICAgICB2b2lkIGNyZWF0ZUFuZEFwcGVuZFN1YnN0aXR1
dGlvbnNTdWJNZW51KENvbnRleHRNZW51SXRlbSYpOwogICAgICAgICB2b2lkIGNyZWF0ZUFuZEFw
cGVuZFRyYW5zZm9ybWF0aW9uc1N1Yk1lbnUoQ29udGV4dE1lbnVJdGVtJik7CisjaWYgUExBVEZP
Uk0oR1RLKQorICAgICAgICB2b2lkIGNyZWF0ZUFuZEFwcGVuZFVuaWNvZGVTdWJNZW51KENvbnRl
eHRNZW51SXRlbSYpOworI2VuZGlmCiAKICAgICAgICAgUGFnZSogbV9wYWdlOwogICAgICAgICBD
b250ZXh0TWVudUNsaWVudCogbV9jbGllbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0VkaXRvckNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FZGl0b3JDbGllbnQuaApp
bmRleCAxZjA5NTRmLi40ZWNkNTY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Vk
aXRvckNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRWRpdG9yQ2xpZW50LmgKQEAg
LTE0MCw2ICsxNDAsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCB0b2dnbGVBdXRvbWF0
aWNTcGVsbGluZ0NvcnJlY3Rpb24oKSA9IDA7CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKEdUSykK
KyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkU2hvd1VuaWNvZGVNZW51KCkgPSAwOworI2VuZGlmCisK
ICAgICB2aXJ0dWFsIFRleHRDaGVja2VyQ2xpZW50KiB0ZXh0Q2hlY2tlcigpID0gMDsKIAogICAg
IGVudW0gQXV0b2NvcnJlY3Rpb25SZXNwb25zZVR5cGUgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vQ29udGV4dE1lbnVJdGVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9Db250ZXh0TWVudUl0ZW0uaAppbmRleCAxNWJmZjQ4Li4wMzU3ODE0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Db250ZXh0TWVudUl0ZW0uaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9Db250ZXh0TWVudUl0ZW0uaApAQCAtNzcsNiArNzcsMTYgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogI2lmIFBMQVRGT1JNKEdUSykKICAgICAgICAgQ29udGV4dE1lbnVJdGVt
VGFnSW5wdXRNZXRob2RzLAogICAgICAgICBDb250ZXh0TWVudUl0ZW1UYWdVbmljb2RlLAorICAg
ICAgICBDb250ZXh0TWVudUl0ZW1UYWdVbmljb2RlSW5zZXJ0TFJNTWFyaywKKyAgICAgICAgQ29u
dGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydFJMTU1hcmssCisgICAgICAgIENvbnRleHRNZW51
SXRlbVRhZ1VuaWNvZGVJbnNlcnRMUkVNYXJrLAorICAgICAgICBDb250ZXh0TWVudUl0ZW1UYWdV
bmljb2RlSW5zZXJ0UkxFTWFyaywKKyAgICAgICAgQ29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUlu
c2VydExST01hcmssCisgICAgICAgIENvbnRleHRNZW51SXRlbVRhZ1VuaWNvZGVJbnNlcnRSTE9N
YXJrLAorICAgICAgICBDb250ZXh0TWVudUl0ZW1UYWdVbmljb2RlSW5zZXJ0UERGTWFyaywKKyAg
ICAgICAgQ29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydFpXU01hcmssCisgICAgICAgIENv
bnRleHRNZW51SXRlbVRhZ1VuaWNvZGVJbnNlcnRaV0pNYXJrLAorICAgICAgICBDb250ZXh0TWVu
dUl0ZW1UYWdVbmljb2RlSW5zZXJ0WldOSk1hcmssCiAjZW5kaWYKICAgICAgICAgQ29udGV4dE1l
bnVJdGVtVGFnU3BlbGxpbmdHdWVzcywKICAgICAgICAgQ29udGV4dE1lbnVJdGVtVGFnTm9HdWVz
c2VzRm91bmQsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Mb2NhbGl6ZWRT
dHJpbmdzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Mb2NhbGl6ZWRTdHJpbmdzLmgKaW5k
ZXggM2ViYmVmNy4uYmE2YTc2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
TG9jYWxpemVkU3RyaW5ncy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xvY2FsaXpl
ZFN0cmluZ3MuaApAQCAtNjksNiArNjksMTYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIFN0
cmluZyBjb250ZXh0TWVudUl0ZW1UYWdEZWxldGUoKTsKICAgICBTdHJpbmcgY29udGV4dE1lbnVJ
dGVtVGFnSW5wdXRNZXRob2RzKCk7CiAgICAgU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1VuaWNv
ZGUoKTsKKyAgICBTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydExSTU1hcmso
KTsKKyAgICBTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydFJMTU1hcmsoKTsK
KyAgICBTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydExSRU1hcmsoKTsKKyAg
ICBTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydFJMRU1hcmsoKTsKKyAgICBT
dHJpbmcgY29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydExST01hcmsoKTsKKyAgICBTdHJp
bmcgY29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydFJMT01hcmsoKTsKKyAgICBTdHJpbmcg
Y29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydFBERk1hcmsoKTsKKyAgICBTdHJpbmcgY29u
dGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydFpXU01hcmsoKTsKKyAgICBTdHJpbmcgY29udGV4
dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydFpXSk1hcmsoKTsKKyAgICBTdHJpbmcgY29udGV4dE1l
bnVJdGVtVGFnVW5pY29kZUluc2VydFpXTkpNYXJrKCk7CiAjZW5kaWYKICNpZiBQTEFURk9STShH
VEspIHx8IFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShFRkwpCiAgICAgU3RyaW5nIGNvbnRleHRN
ZW51SXRlbVRhZ1NlbGVjdEFsbCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL0xvY2FsaXplZFN0cmluZ3NHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL0xvY2FsaXplZFN0cmluZ3NHdGsuY3BwCmluZGV4IDA3YmVkOGQuLjFlZTAwMzQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Mb2NhbGl6ZWRTdHJpbmdzR3RrLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvTG9jYWxpemVkU3RyaW5nc0d0ay5j
cHAKQEAgLTM0Miw2ICszNDIsNTYgQEAgU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0luc3BlY3RF
bGVtZW50KCkKICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJJbnNwZWN0IF9FbGVtZW50
IikpOwogfQogCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydExSTU1hcmso
KQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIkxSTSBfTGVmdC10by1yaWdodCBt
YXJrIikpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydFJMTU1h
cmsoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIlJMTSBfUmlnaHQtdG8tbGVm
dCBtYXJrIikpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydExS
RU1hcmsoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIkxSRSBMZWZ0LXRvLXJp
Z2h0IF9lbWJlZGRpbmciKSk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdVbmljb2Rl
SW5zZXJ0UkxFTWFyaygpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiUkxFIFJp
Z2h0LXRvLWxlZnQgZV9tYmVkZGluZyIpKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRh
Z1VuaWNvZGVJbnNlcnRMUk9NYXJrKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChf
KCJMUk8gTGVmdC10by1yaWdodCBfb3ZlcnJpZGUiKSk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVu
dUl0ZW1UYWdVbmljb2RlSW5zZXJ0UkxPTWFyaygpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJv
bVVURjgoXygiUkxPIFJpZ2h0LXRvLWxlZnQgb192ZXJyaWRlIikpOworfQorCitTdHJpbmcgY29u
dGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydFBERk1hcmsoKQoreworICAgIHJldHVybiBTdHJp
bmc6OmZyb21VVEY4KF8oIlBERiBfUG9wIGRpcmVjdGlvbmFsIGZvcm1hdHRpbmciKSk7Cit9CisK
K1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdVbmljb2RlSW5zZXJ0WldTTWFyaygpCit7CisgICAg
cmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiWldTIF9aZXJvIHdpZHRoIHNwYWNlIikpOworfQor
CitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydFpXSk1hcmsoKQoreworICAg
IHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIlpXSiBaZXJvIHdpZHRoIF9qb2luZXIiKSk7Cit9
CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdVbmljb2RlSW5zZXJ0WldOSk1hcmsoKQorewor
ICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIlpXTkogWmVybyB3aWR0aCBfbm9uLWpvaW5l
ciIpKTsKK30KKwogU3RyaW5nIHNlYXJjaE1lbnVOb1JlY2VudFNlYXJjaGVzVGV4dCgpCiB7CiAg
ICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiTm8gcmVjZW50IHNlYXJjaGVzIikpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ29udGV4dE1lbnVDbGll
bnRHdGsuY3BwIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ29udGV4dE1lbnVD
bGllbnRHdGsuY3BwCmluZGV4IGQ5YzU5ZDAuLjI5YjIyMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0NvbnRleHRNZW51Q2xpZW50R3RrLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9Db250ZXh0TWVudUNsaWVudEd0ay5jcHAK
QEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlICJDb250ZXh0TWVudUNvbnRyb2xsZXIuaCIKICNp
bmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIkxv
Y2FsaXplZFN0cmluZ3MuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUg
IlBhZ2UuaCIKICNpbmNsdWRlICJ3ZWJraXR3ZWJ2aWV3cHJpdmF0ZS5oIgpAQCAtNzAsNjIgKzcx
LDYgQEAgc3RhdGljIEd0a1dpZGdldCogaW5wdXRNZXRob2RzTWVudUl0ZW0gKFdlYktpdFdlYlZp
ZXcqIHdlYlZpZXcpCiAgICAgcmV0dXJuIG1lbnVpdGVtOwogfQogCi0vLyBWYWx1ZXMgdGFrZW4g
ZnJvbSBndGt0ZXh0dXRpbC5jCi10eXBlZGVmIHN0cnVjdCB7Ci0gIGNvbnN0IGNoYXIgKmxhYmVs
OwotICBndW5pY2hhciBjaDsKLX0gR3RrVW5pY29kZU1lbnVFbnRyeTsKLXN0YXRpYyBjb25zdCBH
dGtVbmljb2RlTWVudUVudHJ5IGJpZGlfbWVudV9lbnRyaWVzW10gPSB7Ci0gIHsgTl8oIkxSTSBf
TGVmdC10by1yaWdodCBtYXJrIiksIDB4MjAwRSB9LAotICB7IE5fKCJSTE0gX1JpZ2h0LXRvLWxl
ZnQgbWFyayIpLCAweDIwMEYgfSwKLSAgeyBOXygiTFJFIExlZnQtdG8tcmlnaHQgX2VtYmVkZGlu
ZyIpLCAweDIwMkEgfSwKLSAgeyBOXygiUkxFIFJpZ2h0LXRvLWxlZnQgZV9tYmVkZGluZyIpLCAw
eDIwMkIgfSwKLSAgeyBOXygiTFJPIExlZnQtdG8tcmlnaHQgX292ZXJyaWRlIiksIDB4MjAyRCB9
LAotICB7IE5fKCJSTE8gUmlnaHQtdG8tbGVmdCBvX3ZlcnJpZGUiKSwgMHgyMDJFIH0sCi0gIHsg
Tl8oIlBERiBfUG9wIGRpcmVjdGlvbmFsIGZvcm1hdHRpbmciKSwgMHgyMDJDIH0sCi0gIHsgTl8o
IlpXUyBfWmVybyB3aWR0aCBzcGFjZSIpLCAweDIwMEIgfSwKLSAgeyBOXygiWldKIFplcm8gd2lk
dGggX2pvaW5lciIpLCAweDIwMEQgfSwKLSAgeyBOXygiWldOSiBaZXJvIHdpZHRoIF9ub24tam9p
bmVyIiksIDB4MjAwQyB9Ci19OwotCi1zdGF0aWMgdm9pZCBpbnNlcnRDb250cm9sQ2hhcmFjdGVy
KEd0a1dpZGdldCogd2lkZ2V0KQotewotICAgIC8vIEd0a1VuaWNvZGVNZW51RW50cnkqIGVudHJ5
ID0gKEd0a1VuaWNvZGVNZW51RW50cnkqKWdfb2JqZWN0X2dldF9kYXRhKEdfT0JKRUNUKHdpZGdl
dCksICJndGstdW5pY29kZS1tZW51LWVudHJ5Iik7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0K
LQotc3RhdGljIEd0a1dpZGdldCogdW5pY29kZU1lbnVJdGVtKFdlYktpdFdlYlZpZXcqIHdlYlZp
ZXcpCi17Ci0gICAgaWYgKGd0a19tYWpvcl92ZXJzaW9uID4gMiB8fCAoZ3RrX21ham9yX3ZlcnNp
b24gPT0gMiAmJiBndGtfbWlub3JfdmVyc2lvbiA+PSAxMCkpIHsKLSAgICAgICAgR3RrU2V0dGlu
Z3MqIHNldHRpbmdzID0gd2ViVmlldyA/IGd0a193aWRnZXRfZ2V0X3NldHRpbmdzKEdUS19XSURH
RVQod2ViVmlldykpIDogZ3RrX3NldHRpbmdzX2dldF9kZWZhdWx0KCk7Ci0KLSAgICAgICAgZ2Jv
b2xlYW4gc2hvd01lbnUgPSBUUlVFOwotICAgICAgICBpZiAoc2V0dGluZ3MpCi0gICAgICAgICAg
ICBnX29iamVjdF9nZXQoc2V0dGluZ3MsICJndGstc2hvdy11bmljb2RlLW1lbnUiLCAmc2hvd01l
bnUsIE5VTEwpOwotICAgICAgICBpZiAoIXNob3dNZW51KQotICAgICAgICAgICAgcmV0dXJuIDA7
Ci0gICAgfQotCi0gICAgR3RrV2lkZ2V0KiBtZW51aXRlbSA9IGd0a19pbWFnZV9tZW51X2l0ZW1f
bmV3X3dpdGhfbW5lbW9uaWMoCi0gICAgICAgIF8oIl9JbnNlcnQgVW5pY29kZSBDb250cm9sIENo
YXJhY3RlciIpKTsKLQotICAgIEd0a1dpZGdldCogdW5pY29kZUNvbnRleHRNZW51ID0gZ3RrX21l
bnVfbmV3KCk7Ci0gICAgdW5zaWduZWQgaTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgR19OX0VMRU1F
TlRTKGJpZGlfbWVudV9lbnRyaWVzKTsgaSsrKSB7Ci0gICAgICAgIEd0a1dpZGdldCogbWVudWl0
ZW0gPSBndGtfbWVudV9pdGVtX25ld193aXRoX21uZW1vbmljKF8oYmlkaV9tZW51X2VudHJpZXNb
aV0ubGFiZWwpKTsKLSAgICAgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QobWVudWl0ZW0p
LCAiZ3RrLXVuaWNvZGUtbWVudS1lbnRyeSIsIChncG9pbnRlcikmYmlkaV9tZW51X2VudHJpZXNb
aV0pOwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1lbnVpdGVtLCAiYWN0aXZhdGUiLCBHX0NB
TExCQUNLKGluc2VydENvbnRyb2xDaGFyYWN0ZXIpLCAwKTsKLSAgICAgICAgZ3RrX3dpZGdldF9z
aG93KG1lbnVpdGVtKTsKLSAgICAgICAgZ3RrX21lbnVfc2hlbGxfYXBwZW5kKEdUS19NRU5VX1NI
RUxMKHVuaWNvZGVDb250ZXh0TWVudSksIG1lbnVpdGVtKTsKLSAgICAgICAgLy8gRklYTUU6IE1h
a2UgdGhlIGl0ZW0gc2Vuc2l0aXZlIGFzIGluc2VydENvbnRyb2xDaGFyYWN0ZXIoKSBpcyBpbXBs
ZW1lbnRlZAotICAgICAgICBndGtfd2lkZ2V0X3NldF9zZW5zaXRpdmUobWVudWl0ZW0sIEZBTFNF
KTsKLSAgICB9Ci0KLSAgICBndGtfbWVudV9pdGVtX3NldF9zdWJtZW51KEdUS19NRU5VX0lURU0o
bWVudWl0ZW0pLCB1bmljb2RlQ29udGV4dE1lbnUpOwotCi0gICAgcmV0dXJuIG1lbnVpdGVtOwot
fQotCiBQbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbiBDb250ZXh0TWVudUNsaWVudDo6Z2V0Q3VzdG9t
TWVudUZyb21EZWZhdWx0SXRlbXMoQ29udGV4dE1lbnUqIG1lbnUpCiB7CiAgICAgR3RrTWVudSog
Z3RrbWVudSA9IG1lbnUtPnJlbGVhc2VQbGF0Zm9ybURlc2NyaXB0aW9uKCk7CkBAIC0xMzQsMjYg
Kzc5LDM0IEBAIFBsYXRmb3JtTWVudURlc2NyaXB0aW9uIENvbnRleHRNZW51Q2xpZW50OjpnZXRD
dXN0b21NZW51RnJvbURlZmF1bHRJdGVtcyhDb250ZXh0CiAgICAgSGl0VGVzdFJlc3VsdCByZXN1
bHQgPSBjb3JlKHdlYlZpZXcpLT5jb250ZXh0TWVudUNvbnRyb2xsZXIoKS0+aGl0VGVzdFJlc3Vs
dCgpOwogCiAgICAgaWYgKHJlc3VsdC5pc0NvbnRlbnRFZGl0YWJsZSgpKSB7Ci0KICAgICAgICAg
R3RrV2lkZ2V0KiBpbUNvbnRleHRNZW51ID0gaW5wdXRNZXRob2RzTWVudUl0ZW0od2ViVmlldyk7
Ci0gICAgICAgIEd0a1dpZGdldCogdW5pY29kZUNvbnRleHRNZW51ID0gdW5pY29kZU1lbnVJdGVt
KHdlYlZpZXcpOworICAgICAgICBpZiAoIWltQ29udGV4dE1lbnUpCisgICAgICAgICAgICByZXR1
cm4gZ3RrbWVudTsKKworICAgICAgICAvLyBQbGFjZSB0aGUgaW0gY29udGV4dCBtZW51IGl0ZW0g
cmlnaHQgYmVmb3JlIHRoZSB1bmljb2RlIG1lbnV0IGl0ZW0KKyAgICAgICAgLy8gaWYgaXQncyBw
cmVzZW50LgorICAgICAgICBHT3duUHRyPEdMaXN0PiBpdGVtcyhndGtfY29udGFpbmVyX2dldF9j
aGlsZHJlbihHVEtfQ09OVEFJTkVSKGd0a21lbnUpKSk7CisgICAgICAgIGludCB1bmljb2RlTWVu
dUl0ZW1Qb3NpdGlvbiA9IC0xOworICAgICAgICBHTGlzdCogaXRlcjsKKyAgICAgICAgaW50IGkg
PSAwOworICAgICAgICBmb3IgKGl0ZXIgPSBpdGVtcy5nZXQoKSwgaSA9IDA7IGl0ZXI7IGl0ZXIg
PSBnX2xpc3RfbmV4dChpdGVyKSwgKytpKSB7CisgICAgICAgICAgICBHdGtNZW51SXRlbSogaXRl
bSA9IEdUS19NRU5VX0lURU0oaXRlci0+ZGF0YSk7CisgICAgICAgICAgICBpZiAoR1RLX0lTX1NF
UEFSQVRPUl9NRU5VX0lURU0oaXRlbSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICBpZiAoU3RyaW5nOjpmcm9tVVRGOChndGtfbWVudV9pdGVtX2dldF9sYWJlbChpdGVt
KSkgPT0gY29udGV4dE1lbnVJdGVtVGFnVW5pY29kZSgpKSB7CisgICAgICAgICAgICAgICAgdW5p
Y29kZU1lbnVJdGVtUG9zaXRpb24gPSBpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICB9CiAKLSAgICAgICAgaWYgKGltQ29udGV4dE1lbnUgfHwgdW5pY29k
ZUNvbnRleHRNZW51KSB7CisgICAgICAgIGlmICh1bmljb2RlTWVudUl0ZW1Qb3NpdGlvbiA9PSAt
MSkgewogICAgICAgICAgICAgR3RrV2lkZ2V0KiBzZXBhcmF0b3IgPSBndGtfc2VwYXJhdG9yX21l
bnVfaXRlbV9uZXcoKTsKICAgICAgICAgICAgIGd0a19tZW51X3NoZWxsX2FwcGVuZChHVEtfTUVO
VV9TSEVMTChndGttZW51KSwgc2VwYXJhdG9yKTsKICAgICAgICAgICAgIGd0a193aWRnZXRfc2hv
dyhzZXBhcmF0b3IpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGltQ29udGV4dE1lbnUpIHsK
LSAgICAgICAgICAgIGd0a19tZW51X3NoZWxsX2FwcGVuZChHVEtfTUVOVV9TSEVMTChndGttZW51
KSwgaW1Db250ZXh0TWVudSk7Ci0gICAgICAgICAgICBndGtfd2lkZ2V0X3Nob3coaW1Db250ZXh0
TWVudSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodW5pY29kZUNvbnRleHRNZW51KSB7Ci0g
ICAgICAgICAgICBndGtfbWVudV9zaGVsbF9hcHBlbmQoR1RLX01FTlVfU0hFTEwoZ3RrbWVudSks
IHVuaWNvZGVDb250ZXh0TWVudSk7Ci0gICAgICAgICAgICBndGtfd2lkZ2V0X3Nob3codW5pY29k
ZUNvbnRleHRNZW51KTsKLSAgICAgICAgfQotCisgICAgICAgIGd0a19tZW51X3NoZWxsX2luc2Vy
dChHVEtfTUVOVV9TSEVMTChndGttZW51KSwgaW1Db250ZXh0TWVudSwgdW5pY29kZU1lbnVJdGVt
UG9zaXRpb24pOworICAgICAgICBndGtfd2lkZ2V0X3Nob3coaW1Db250ZXh0TWVudSk7CiAgICAg
fQogCiAgICAgcmV0dXJuIGd0a21lbnU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9X
ZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRHdGsuY3BwIGIvU291cmNlL1dlYktpdC9ndGsvV2Vi
Q29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50R3RrLmNwcAppbmRleCBiOGUxNjBlLi4xMjBiMDNiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRH
dGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVu
dEd0ay5jcHAKQEAgLTEzMyw2ICsxMzMsMjEgQEAgdm9pZCBFZGl0b3JDbGllbnQ6OnNldElucHV0
TWV0aG9kU3RhdGUoYm9vbCBhY3RpdmUpCiAjZW5kaWYKIH0KIAorYm9vbCBFZGl0b3JDbGllbnQ6
OnNob3VsZFNob3dVbmljb2RlTWVudSgpCit7CisgICAgaWYgKGd0a19tYWpvcl92ZXJzaW9uID4g
MiB8fCAoZ3RrX21ham9yX3ZlcnNpb24gPT0gMiAmJiBndGtfbWlub3JfdmVyc2lvbiA+PSAxMCkp
IHsKKyAgICAgICAgR3RrU2V0dGluZ3MqIHNldHRpbmdzID0gZ3RrX3dpZGdldF9nZXRfc2V0dGlu
Z3MoR1RLX1dJREdFVChtX3dlYlZpZXcpKTsKKyAgICAgICAgaWYgKCFzZXR0aW5ncykKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIGdib29sZWFuIGVuYWJsZWQ7CisgICAgICAg
IGdfb2JqZWN0X2dldChzZXR0aW5ncywgImd0ay1zaG93LXVuaWNvZGUtbWVudSIsICZlbmFibGVk
LCBOVUxMKTsKKyAgICAgICAgcmV0dXJuIGVuYWJsZWQ7CisgICAgfQorCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKIGJvb2wgRWRpdG9yQ2xpZW50OjpzaG91bGREZWxldGVSYW5nZShSYW5nZSogcmFu
Z2UpCiB7CiAgICAgZ2Jvb2xlYW4gYWNjZXB0ID0gVFJVRTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudEd0ay5oIGIvU291cmNlL1dlYktp
dC9ndGsvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50R3RrLmgKaW5kZXggZWYxNTljNi4uMmYw
OGQ4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRWRpdG9y
Q2xpZW50R3RrLmgKKysrIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRWRpdG9y
Q2xpZW50R3RrLmgKQEAgLTEzNyw2ICsxMzcsOCBAQCBjbGFzcyBFZGl0b3JDbGllbnQgOiBwdWJs
aWMgV2ViQ29yZTo6RWRpdG9yQ2xpZW50IHsKICAgICAgICAgdmlydHVhbCB2b2lkIHdpbGxTZXRJ
bnB1dE1ldGhvZFN0YXRlKCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRJbnB1dE1ldGhvZFN0
YXRlKGJvb2wgZW5hYmxlZCk7CiAKKyAgICAgICAgdmlydHVhbCBib29sIHNob3VsZFNob3dVbmlj
b2RlTWVudSgpOworCiAgICAgcHJpdmF0ZToKICNpZiBFTkFCTEUoU1BFTExDSEVDSykKICAgICAg
ICAgVGV4dENoZWNrZXJDbGllbnRHdGsgbV90ZXh0Q2hlY2tlckNsaWVudDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50
LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNs
aWVudC5oCmluZGV4IDAxMGNkNGIuLjc4ZWE4ZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgKKysrIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaApAQCAt
MTQ4LDYgKzE0OCw5IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBTdHJpbmcgZGlzbWlzc0NvcnJl
Y3Rpb25QYW5lbFNvb24oV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5l
bCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9u
c2UoQXV0b2NvcnJlY3Rpb25SZXNwb25zZVR5cGUsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJp
bmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcpIE9WRVJSSURFOwogI2VuZGlmCisj
aWYgUExBVEZPUk0oR1RLKQorICAgIHZpcnR1YWwgYm9vbCBzaG91bGRTaG93VW5pY29kZU1lbnUo
KSBPVkVSUklERTsKKyNlbmRpZgogICAgIFdlYlBhZ2UqIG1fcGFnZTsKIH07CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkVkaXRv
ckNsaWVudEd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L2d0ay9XZWJFZGl0b3JDbGllbnRHdGsuY3BwCmluZGV4IDlmMzQ1MzAuLmUzM2Q3MjMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkVk
aXRvckNsaWVudEd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9ndGsvV2ViRWRpdG9yQ2xpZW50R3RrLmNwcApAQCAtMTk0LDUgKzE5NCw5IEBAIHZv
aWQgV2ViRWRpdG9yQ2xpZW50OjpzZXRTZWxlY3Rpb25QcmltYXJ5Q2xpcGJvYXJkSWZOZWVkZWQo
RnJhbWUqIGZyYW1lKQogI2VuZGlmCiB9CiAKK2Jvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRT
aG93VW5pY29kZU1lbnUoKQoreworICAgIHJldHVybiB0cnVlOworfQogCiB9Cg==
</data>
<flag name="review"
          id="135314"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132003</attachid>
            <date>2012-03-15 01:54:14 -0700</date>
            <delta_ts>2012-03-15 10:15:10 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>unicode-menu2.diff</filename>
            <type>text/plain</type>
            <size>24170</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBhOTY2NmZlLi41ZjI1YjFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDMg
QEAKKzIwMTItMDMtMTUgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdIEltcGxlbWVudCB1bmljb2RlIHN1Ym1lbnUgaXRlbXMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxMTE3CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBsb2FkZXIvRW1wdHlD
bGllbnRzLmg6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUVkaXRvckNsaWVudDo6c2hvdWxkU2hv
d1VuaWNvZGVNZW51KTogSnVzdCByZXR1cm4KKyAgICAgICAgZmFsc2UuCisgICAgICAgICogcGFn
ZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aW5zZXJ0VW5p
Y29kZUNoYXJhY3Rlcik6IEhlbHBlciBmdW5jdGlvbiB0byBpbnNlcnQgYQorICAgICAgICB1bmlj
b2RlIGNoYXJhY3Rlci4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51Q29udHJvbGxlcjo6
Y29udGV4dE1lbnVJdGVtU2VsZWN0ZWQpOgorICAgICAgICBJbXBsZW1lbnQgdW5pY29kZSBtZW51
IGl0ZW1zIHVzaW5nIGluc2VydFVuaWNvZGVDaGFyYWN0ZXIoKSB0bworICAgICAgICBpbnNlcnQg
dGhlIGFwcm9wcmlhdGUgdW5pY29kZSBjaGFyYWN0ZXIuCisgICAgICAgIChXZWJDb3JlOjpDb250
ZXh0TWVudUNvbnRyb2xsZXI6OmNyZWF0ZUFuZEFwcGVuZFVuaWNvZGVTdWJNZW51KToKKyAgICAg
ICAgQ3JlYXRlIHRoZSB1bmljb2RlIHN1Ym1lbnUuCisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0
TWVudUNvbnRyb2xsZXI6OnBvcHVsYXRlKTogQWRkIHVuaWNvZGUgc3VibWVudQorICAgICAgICBp
dGVtIGZvciBlZGl0YWJsZSBjb250ZW50LgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVD
b250cm9sbGVyOjpjaGVja09yRW5hYmxlSWZOZWVkZWQpOiBBZGQKKyAgICAgICAgdW5pY29kZSBz
dWJtZW51IGl0ZW1zIHRvIHRoZSBzd2l0Y2guCisgICAgICAgICogcGFnZS9Db250ZXh0TWVudUNv
bnRyb2xsZXIuaDoKKyAgICAgICAgKiBwYWdlL0VkaXRvckNsaWVudC5oOgorICAgICAgICAoRWRp
dG9yQ2xpZW50KTogQWRkIHNob3VsZFNob3dVbmljb2RlTWVudSgpIGZvciBHVEsgcGxhdGZvcm0u
CisgICAgICAgICogcGxhdGZvcm0vQ29udGV4dE1lbnVJdGVtLmg6CisgICAgICAgICogcGxhdGZv
cm0vTG9jYWxpemVkU3RyaW5ncy5oOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9Mb2NhbGl6ZWRT
dHJpbmdzR3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ1VuaWNv
ZGVJbnNlcnRMUk1NYXJrKTogQWRkIGxvY2FsaXplZAorICAgICAgICBzdHJpbmcgZm9yIHRoZSB1
bmljb2RlIG1lbnUgaXRlbS4KKyAgICAgICAgKFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ1Vu
aWNvZGVJbnNlcnRSTE1NYXJrKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpjb250ZXh0TWVu
dUl0ZW1UYWdVbmljb2RlSW5zZXJ0TFJFTWFyayk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
Y29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydFJMRU1hcmspOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ1VuaWNvZGVJbnNlcnRMUk9NYXJrKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdVbmljb2RlSW5zZXJ0UkxPTWFy
ayk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUlu
c2VydFBERk1hcmspOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRh
Z1VuaWNvZGVJbnNlcnRaV1NNYXJrKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpjb250ZXh0
TWVudUl0ZW1UYWdVbmljb2RlSW5zZXJ0WldKTWFyayk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6Y29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydFpXTkpNYXJrKTogRGl0dG8uCisKIDIw
MTItMDMtMTQgIENocmlzIEZsZWl6YWNoICA8Y2ZsZWl6YWNoQGFwcGxlLmNvbT4KIAogICAgICAg
ICBBWERlc2NyaXB0aW9uIGZvciBIVE1MNSBmb290ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvZ3RrL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwppbmRleCBiOTEx
ODM3Li4wNGZjYzY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTItMDMt
MTUgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCisgICAgICAg
IFtHVEtdIEltcGxlbWVudCB1bmljb2RlIHN1Ym1lbnUgaXRlbXMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxMTE3CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9Db250ZXh0TWVu
dUNsaWVudEd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OmdldFVuaWNvZGVNZW51SXRlbVBvc2l0
aW9uKTogSGVscGVyIGZ1bmN0aW9uIHRvIGdldCB0aGUKKyAgICAgICAgcG9zaXRpb24gb2YgdGhl
IHVuaWNvZGUgbWVudSBpdGVtIGluIHRoZSBkZWZhdWx0IGNvbnRleHQgbWVudS4KKyAgICAgICAg
KFdlYktpdDo6Q29udGV4dE1lbnVDbGllbnQ6OmdldEN1c3RvbU1lbnVGcm9tRGVmYXVsdEl0ZW1z
KTogUmVtb3ZlCisgICAgICAgIGNvZGUgdG8gYnVpbGQgdGhlIHVuaWNvZGUgbWVudSwgc2luY2Ug
aXQncyBub3cgYnVpbHQgYnkgV2ViQ29yZS4KKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0
b3JDbGllbnRHdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnQ6OnNob3VsZFNo
b3dVbmljb2RlTWVudSk6IENoZWNrIHdoZXRoZXIKKyAgICAgICAgdW5pY29kZSBtZW51IHNob3Vs
ZCBiZSBzaG93biBiYXNlZCBvbiBndGstc2hvdy11bmljb2RlLW1lbnUgR3RrU2V0dGluZy4KKyAg
ICAgICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRHdGsuaDoKKwogMjAxMi0wMy0xMyAg
QWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPiAmJiBCZW5qYW1pbiBQb3VsYWluICA8YnBv
dWxhaW5AYXBwbGUuY29tPgogCiAgICAgICAgIEFsd2F5cyBlbmFibGUgRU5BQkxFKENMSUVOVF9C
QVNFRF9HRU9MT0NBVElPTikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCAwZjM2ODg5Li44NzliOTJmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTItMDMtMTUgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8
Y2dhcmNpYUBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIEltcGxlbWVudCB1bmljb2RlIHN1
Ym1lbnUgaXRlbXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTgxMTE3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkVkaXRvckNsaWVudEd0ay5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6c2hvdWxkU2hvd1VuaWNvZGVNZW51
KTogSW1wbGVtZW50CisgICAgICAgIHNob3VsZFNob3dVbmljb2RlTWVudSgpIHJldHVybmluZyBh
bHdheXMgdHJ1ZS4gV2hlbiBDb250ZXh0TWVudQorICAgICAgICBBUEkgaXMgaW1wbGVtZW50ZWQg
Zm9yIEdUSysgdGhlIFVJIHByb2Nlc3Mgd2lsbCBkZWNpZGUgd2hldGhlciB0bworICAgICAgICBz
aG93IHRoZSB1bmljb2RlIG1lbnUgb3Igbm90LgorCiAyMDEyLTAzLTE0ICBBbmRlcnMgQ2FybHNz
b24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgamF2YS9qYXZhLWFuZC1wbHVnaW5z
Lmh0bWwgdGVzdCBmYWlsaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1w
dHlDbGllbnRzLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgKaW5kZXgg
YTY1ZjRmNi4uMzNjMjVkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5
Q2xpZW50cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaApAQCAt
NTE3LDYgKzUxNyw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNBdXRvbWF0aWNTcGVs
bGluZ0NvcnJlY3Rpb25FbmFibGVkKCkgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIHZv
aWQgdG9nZ2xlQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uKCkgeyB9CiAjZW5kaWYKKyNpZiBQ
TEFURk9STShHVEspCisgICAgdmlydHVhbCBib29sIHNob3VsZFNob3dVbmljb2RlTWVudSgpIHsg
cmV0dXJuIGZhbHNlOyB9CisjZW5kaWYKICAgICBUZXh0Q2hlY2tlckNsaWVudCogdGV4dENoZWNr
ZXIoKSB7IHJldHVybiAmbV90ZXh0Q2hlY2tlckNsaWVudDsgfQogCiAjaWYgVVNFKEFVVE9DT1JS
RUNUSU9OX1BBTkVMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9Db250ZXh0TWVu
dUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xs
ZXIuY3BwCmluZGV4IGM1MTU2NzUuLmE5OTkwMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAKQEAgLTY1LDExICs2NSwxNiBAQAogI2luY2x1ZGUg
IlJlc291cmNlUmVxdWVzdC5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiVGV4
dEl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiVHlwaW5nQ29tbWFuZC5oIgogI2luY2x1ZGUgIlVzZXJU
eXBpbmdHZXN0dXJlSW5kaWNhdG9yLmgiCiAjaW5jbHVkZSAiV2luZG93RmVhdHVyZXMuaCIKICNp
bmNsdWRlICJtYXJrdXAuaCIKICNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+CiAKKyNp
ZiBQTEFURk9STShHVEspCisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgorI2VuZGlm
CisKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiB1c2luZyBuYW1lc3BhY2UgVW5pY29kZTsKIApAQCAt
MTgxLDYgKzE4NiwxNyBAQCBzdGF0aWMgdm9pZCBvcGVuTmV3V2luZG93KGNvbnN0IEtVUkwmIHVy
bFRvTG9hZCwgRnJhbWUqIGZyYW1lKQogICAgIH0KIH0KIAorI2lmIFBMQVRGT1JNKEdUSykKK3N0
YXRpYyB2b2lkIGluc2VydFVuaWNvZGVDaGFyYWN0ZXIoVUNoYXIgdWNoYXIsIEZyYW1lKiBmcmFt
ZSkKK3sKKyAgICBTdHJpbmcgdGV4dCgmdWNoYXIsIDEpOworICAgIGlmICghZnJhbWUtPmVkaXRv
cigpLT5zaG91bGRJbnNlcnRUZXh0KHRleHQsIGZyYW1lLT5zZWxlY3Rpb24oKS0+dG9Ob3JtYWxp
emVkUmFuZ2UoKS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uVHlwZWQpKQorICAgICAgICByZXR1
cm47CisKKyAgICBUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0KGZyYW1lLT5kb2N1bWVudCgpLCB0
ZXh0LCAwLCBUeXBpbmdDb21tYW5kOjpUZXh0Q29tcG9zaXRpb25Ob25lKTsKK30KKyNlbmRpZgor
CiB2b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6Y29udGV4dE1lbnVJdGVtU2VsZWN0ZWQoQ29u
dGV4dE1lbnVJdGVtKiBpdGVtKQogewogICAgIEFTU0VSVChpdGVtLT50eXBlKCkgPT0gQWN0aW9u
VHlwZSB8fCBpdGVtLT50eXBlKCkgPT0gQ2hlY2thYmxlQWN0aW9uVHlwZSk7CkBAIC0yODQsNiAr
MzAwLDM2IEBAIHZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVyOjpjb250ZXh0TWVudUl0ZW1TZWxl
Y3RlZChDb250ZXh0TWVudUl0ZW0qIGl0ZW0pCiAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdE
ZWxldGU6CiAgICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+cGVyZm9ybURlbGV0ZSgpOwogICAgICAg
ICBicmVhazsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1VuaWNvZGVJbnNlcnRMUk1NYXJr
OgorICAgICAgICBpbnNlcnRVbmljb2RlQ2hhcmFjdGVyKGxlZnRUb1JpZ2h0TWFyaywgZnJhbWUp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1VuaWNvZGVJbnNl
cnRSTE1NYXJrOgorICAgICAgICBpbnNlcnRVbmljb2RlQ2hhcmFjdGVyKHJpZ2h0VG9MZWZ0TWFy
aywgZnJhbWUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1Vu
aWNvZGVJbnNlcnRMUkVNYXJrOgorICAgICAgICBpbnNlcnRVbmljb2RlQ2hhcmFjdGVyKGxlZnRU
b1JpZ2h0RW1iZWQsIGZyYW1lKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb250ZXh0TWVu
dUl0ZW1UYWdVbmljb2RlSW5zZXJ0UkxFTWFyazoKKyAgICAgICAgaW5zZXJ0VW5pY29kZUNoYXJh
Y3RlcihyaWdodFRvTGVmdEVtYmVkLCBmcmFtZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydExST01hcms6CisgICAgICAgIGluc2VydFVu
aWNvZGVDaGFyYWN0ZXIobGVmdFRvUmlnaHRPdmVycmlkZSwgZnJhbWUpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1VuaWNvZGVJbnNlcnRSTE9NYXJrOgorICAg
ICAgICBpbnNlcnRVbmljb2RlQ2hhcmFjdGVyKHJpZ2h0VG9MZWZ0T3ZlcnJpZGUsIGZyYW1lKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdVbmljb2RlSW5zZXJ0
UERGTWFyazoKKyAgICAgICAgaW5zZXJ0VW5pY29kZUNoYXJhY3Rlcihwb3BEaXJlY3Rpb25hbEZv
cm1hdHRpbmcsIGZyYW1lKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb250ZXh0TWVudUl0
ZW1UYWdVbmljb2RlSW5zZXJ0WldTTWFyazoKKyAgICAgICAgaW5zZXJ0VW5pY29kZUNoYXJhY3Rl
cih6ZXJvV2lkdGhTcGFjZSwgZnJhbWUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvbnRl
eHRNZW51SXRlbVRhZ1VuaWNvZGVJbnNlcnRaV0pNYXJrOgorICAgICAgICBpbnNlcnRVbmljb2Rl
Q2hhcmFjdGVyKHplcm9XaWR0aEpvaW5lciwgZnJhbWUpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIENvbnRleHRNZW51SXRlbVRhZ1VuaWNvZGVJbnNlcnRaV05KTWFyazoKKyAgICAgICAgaW5z
ZXJ0VW5pY29kZUNoYXJhY3Rlcih6ZXJvV2lkdGhOb25Kb2luZXIsIGZyYW1lKTsKKyAgICAgICAg
YnJlYWs7CiAjZW5kaWYKICNpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFFUKSB8fCBQTEFU
Rk9STShFRkwpCiAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTZWxlY3RBbGw6CkBAIC01MzAs
NyArNTc2LDM4IEBAIHZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVyOjpjcmVhdGVBbmRBcHBlbmRT
cGVlY2hTdWJNZW51KENvbnRleHRNZW51SXRlbSYgc3BlZWNoCiAKICNlbmRpZgogIAotI2lmICFQ
TEFURk9STShHVEspCisjaWYgUExBVEZPUk0oR1RLKQorCit2b2lkIENvbnRleHRNZW51Q29udHJv
bGxlcjo6Y3JlYXRlQW5kQXBwZW5kVW5pY29kZVN1Yk1lbnUoQ29udGV4dE1lbnVJdGVtJiB1bmlj
b2RlTWVudUl0ZW0pCit7CisgICAgQ29udGV4dE1lbnUgdW5pY29kZU1lbnU7CisKKyAgICBDb250
ZXh0TWVudUl0ZW0gbGVmdFRvUmlnaHRNYXJrTWVudUl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1l
bnVJdGVtVGFnVW5pY29kZUluc2VydExSTU1hcmssIGNvbnRleHRNZW51SXRlbVRhZ1VuaWNvZGVJ
bnNlcnRMUk1NYXJrKCkpOworICAgIENvbnRleHRNZW51SXRlbSByaWdodFRvTGVmdE1hcmtNZW51
SXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdVbmljb2RlSW5zZXJ0UkxNTWFyaywg
Y29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydFJMTU1hcmsoKSk7CisgICAgQ29udGV4dE1l
bnVJdGVtIGxlZnRUb1JpZ2h0RW1iZWRNZW51SXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0
ZW1UYWdVbmljb2RlSW5zZXJ0TFJFTWFyaywgY29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2Vy
dExSRU1hcmsoKSk7CisgICAgQ29udGV4dE1lbnVJdGVtIHJpZ2h0VG9MZWZ0RW1iZWRNZW51SXRl
bShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdVbmljb2RlSW5zZXJ0UkxFTWFyaywgY29u
dGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydFJMRU1hcmsoKSk7CisgICAgQ29udGV4dE1lbnVJ
dGVtIGxlZnRUb1JpZ2h0T3ZlcnJpZGVNZW51SXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0
ZW1UYWdVbmljb2RlSW5zZXJ0TFJPTWFyaywgY29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2Vy
dExST01hcmsoKSk7CisgICAgQ29udGV4dE1lbnVJdGVtIHJpZ2h0VG9MZWZ0T3ZlcnJpZGVNZW51
SXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdVbmljb2RlSW5zZXJ0UkxPTWFyaywg
Y29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydFJMT01hcmsoKSk7CisgICAgQ29udGV4dE1l
bnVJdGVtIHBvcERpcmVjdGlvbmFsRm9ybWF0dGluZ01lbnVJdGVtKEFjdGlvblR5cGUsIENvbnRl
eHRNZW51SXRlbVRhZ1VuaWNvZGVJbnNlcnRQREZNYXJrLCBjb250ZXh0TWVudUl0ZW1UYWdVbmlj
b2RlSW5zZXJ0UERGTWFyaygpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gemVyb1dpZHRoU3BhY2VN
ZW51SXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdVbmljb2RlSW5zZXJ0WldTTWFy
aywgY29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydFpXU01hcmsoKSk7CisgICAgQ29udGV4
dE1lbnVJdGVtIHplcm9XaWR0aEpvaW5lck1lbnVJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51
SXRlbVRhZ1VuaWNvZGVJbnNlcnRaV0pNYXJrLCBjb250ZXh0TWVudUl0ZW1UYWdVbmljb2RlSW5z
ZXJ0WldKTWFyaygpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gemVyb1dpZHRoTm9uSm9pbmVyTWVu
dUl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydFpXTkpNYXJr
LCBjb250ZXh0TWVudUl0ZW1UYWdVbmljb2RlSW5zZXJ0WldOSk1hcmsoKSk7CisKKyAgICBhcHBl
bmRJdGVtKGxlZnRUb1JpZ2h0TWFya01lbnVJdGVtLCAmdW5pY29kZU1lbnUpOworICAgIGFwcGVu
ZEl0ZW0ocmlnaHRUb0xlZnRNYXJrTWVudUl0ZW0sICZ1bmljb2RlTWVudSk7CisgICAgYXBwZW5k
SXRlbShsZWZ0VG9SaWdodEVtYmVkTWVudUl0ZW0sICZ1bmljb2RlTWVudSk7CisgICAgYXBwZW5k
SXRlbShyaWdodFRvTGVmdEVtYmVkTWVudUl0ZW0sICZ1bmljb2RlTWVudSk7CisgICAgYXBwZW5k
SXRlbShsZWZ0VG9SaWdodE92ZXJyaWRlTWVudUl0ZW0sICZ1bmljb2RlTWVudSk7CisgICAgYXBw
ZW5kSXRlbShyaWdodFRvTGVmdE92ZXJyaWRlTWVudUl0ZW0sICZ1bmljb2RlTWVudSk7CisgICAg
YXBwZW5kSXRlbShwb3BEaXJlY3Rpb25hbEZvcm1hdHRpbmdNZW51SXRlbSwgJnVuaWNvZGVNZW51
KTsKKyAgICBhcHBlbmRJdGVtKHplcm9XaWR0aFNwYWNlTWVudUl0ZW0sICZ1bmljb2RlTWVudSk7
CisgICAgYXBwZW5kSXRlbSh6ZXJvV2lkdGhKb2luZXJNZW51SXRlbSwgJnVuaWNvZGVNZW51KTsK
KyAgICBhcHBlbmRJdGVtKHplcm9XaWR0aE5vbkpvaW5lck1lbnVJdGVtLCAmdW5pY29kZU1lbnUp
OworCisgICAgdW5pY29kZU1lbnVJdGVtLnNldFN1Yk1lbnUoJnVuaWNvZGVNZW51KTsKK30KKwor
I2Vsc2UKIAogdm9pZCBDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNyZWF0ZUFuZEFwcGVuZFdyaXRp
bmdEaXJlY3Rpb25TdWJNZW51KENvbnRleHRNZW51SXRlbSYgd3JpdGluZ0RpcmVjdGlvbk1lbnVJ
dGVtKQogewpAQCAtOTQzLDcgKzEwMjAsMTUgQEAgdm9pZCBDb250ZXh0TWVudUNvbnRyb2xsZXI6
OnBvcHVsYXRlKCkKICAgICAgICAgICAgIGNyZWF0ZUFuZEFwcGVuZFNwZWVjaFN1Yk1lbnUoU3Bl
ZWNoTWVudUl0ZW0pOwogICAgICAgICAgICAgYXBwZW5kSXRlbShTcGVlY2hNZW51SXRlbSwgbV9j
b250ZXh0TWVudS5nZXQoKSk7CiAjZW5kaWYKLSNpZiAhUExBVEZPUk0oR1RLKQorI2lmIFBMQVRG
T1JNKEdUSykKKyAgICAgICAgICAgIEVkaXRvckNsaWVudCogY2xpZW50ID0gZnJhbWUtPmVkaXRv
cigpLT5jbGllbnQoKTsKKyAgICAgICAgICAgIGlmIChjbGllbnQgJiYgY2xpZW50LT5zaG91bGRT
aG93VW5pY29kZU1lbnUoKSkgeworICAgICAgICAgICAgICAgIENvbnRleHRNZW51SXRlbSBVbmlj
b2RlTWVudUl0ZW0oU3VibWVudVR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1VuaWNvZGUsIGNvbnRl
eHRNZW51SXRlbVRhZ1VuaWNvZGUoKSk7CisgICAgICAgICAgICAgICAgY3JlYXRlQW5kQXBwZW5k
VW5pY29kZVN1Yk1lbnUoVW5pY29kZU1lbnVJdGVtKTsKKyAgICAgICAgICAgICAgICBhcHBlbmRJ
dGVtKCpzZXBhcmF0b3JJdGVtKCksIG1fY29udGV4dE1lbnUuZ2V0KCkpOworICAgICAgICAgICAg
ICAgIGFwcGVuZEl0ZW0oVW5pY29kZU1lbnVJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAg
ICAgICAgICAgIH0KKyNlbHNlCiAgICAgICAgICAgICBDb250ZXh0TWVudUl0ZW0gV3JpdGluZ0Rp
cmVjdGlvbk1lbnVJdGVtKFN1Ym1lbnVUeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdXcml0aW5nRGly
ZWN0aW9uTWVudSwgCiAgICAgICAgICAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnV3JpdGluZ0Rp
cmVjdGlvbk1lbnUoKSk7CiAgICAgICAgICAgICBjcmVhdGVBbmRBcHBlbmRXcml0aW5nRGlyZWN0
aW9uU3ViTWVudShXcml0aW5nRGlyZWN0aW9uTWVudUl0ZW0pOwpAQCAtMTA2Miw2ICsxMTQ3LDE2
IEBAIHZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVyOjpjaGVja09yRW5hYmxlSWZOZWVkZWQoQ29u
dGV4dE1lbnVJdGVtJiBpdGVtKSBjb25zdAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgQ29udGV4dE1lbnVJdGVtVGFnSW5wdXRNZXRob2RzOgogICAgICAgICBjYXNlIENvbnRleHRN
ZW51SXRlbVRhZ1VuaWNvZGU6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnVW5pY29k
ZUluc2VydExSTU1hcms6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUlu
c2VydFJMTU1hcms6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2Vy
dExSRU1hcms6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydFJM
RU1hcms6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydExST01h
cms6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydFJMT01hcms6
CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydFBERk1hcms6Cisg
ICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydFpXU01hcms6CisgICAg
ICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydFpXSk1hcms6CisgICAgICAg
IGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydFpXTkpNYXJrOgogICAgICAgICAg
ICAgc2hvdWxkRW5hYmxlID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwogI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5oIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuaAppbmRleCBmZGFlOTQ2Li5k
M2M1NmEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJv
bGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmgK
QEAgLTg1LDYgKzg1LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIGNyZWF0
ZUFuZEFwcGVuZFRleHREaXJlY3Rpb25TdWJNZW51KENvbnRleHRNZW51SXRlbSYpOwogICAgICAg
ICB2b2lkIGNyZWF0ZUFuZEFwcGVuZFN1YnN0aXR1dGlvbnNTdWJNZW51KENvbnRleHRNZW51SXRl
bSYpOwogICAgICAgICB2b2lkIGNyZWF0ZUFuZEFwcGVuZFRyYW5zZm9ybWF0aW9uc1N1Yk1lbnUo
Q29udGV4dE1lbnVJdGVtJik7CisjaWYgUExBVEZPUk0oR1RLKQorICAgICAgICB2b2lkIGNyZWF0
ZUFuZEFwcGVuZFVuaWNvZGVTdWJNZW51KENvbnRleHRNZW51SXRlbSYpOworI2VuZGlmCiAKICAg
ICAgICAgUGFnZSogbV9wYWdlOwogICAgICAgICBDb250ZXh0TWVudUNsaWVudCogbV9jbGllbnQ7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0VkaXRvckNsaWVudC5oIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9FZGl0b3JDbGllbnQuaAppbmRleCAxZjA5NTRmLi40ZWNkNTY1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0VkaXRvckNsaWVudC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRWRpdG9yQ2xpZW50LmgKQEAgLTE0MCw2ICsxNDAsMTAgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgdm9pZCB0b2dnbGVBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb24oKSA9IDA7
CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKEdUSykKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkU2hv
d1VuaWNvZGVNZW51KCkgPSAwOworI2VuZGlmCisKICAgICB2aXJ0dWFsIFRleHRDaGVja2VyQ2xp
ZW50KiB0ZXh0Q2hlY2tlcigpID0gMDsKIAogICAgIGVudW0gQXV0b2NvcnJlY3Rpb25SZXNwb25z
ZVR5cGUgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29udGV4dE1lbnVJ
dGVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Db250ZXh0TWVudUl0ZW0uaAppbmRleCAx
NWJmZjQ4Li4wMzU3ODE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Db250
ZXh0TWVudUl0ZW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Db250ZXh0TWVudUl0
ZW0uaApAQCAtNzcsNiArNzcsMTYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2lmIFBMQVRGT1JN
KEdUSykKICAgICAgICAgQ29udGV4dE1lbnVJdGVtVGFnSW5wdXRNZXRob2RzLAogICAgICAgICBD
b250ZXh0TWVudUl0ZW1UYWdVbmljb2RlLAorICAgICAgICBDb250ZXh0TWVudUl0ZW1UYWdVbmlj
b2RlSW5zZXJ0TFJNTWFyaywKKyAgICAgICAgQ29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2Vy
dFJMTU1hcmssCisgICAgICAgIENvbnRleHRNZW51SXRlbVRhZ1VuaWNvZGVJbnNlcnRMUkVNYXJr
LAorICAgICAgICBDb250ZXh0TWVudUl0ZW1UYWdVbmljb2RlSW5zZXJ0UkxFTWFyaywKKyAgICAg
ICAgQ29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydExST01hcmssCisgICAgICAgIENvbnRl
eHRNZW51SXRlbVRhZ1VuaWNvZGVJbnNlcnRSTE9NYXJrLAorICAgICAgICBDb250ZXh0TWVudUl0
ZW1UYWdVbmljb2RlSW5zZXJ0UERGTWFyaywKKyAgICAgICAgQ29udGV4dE1lbnVJdGVtVGFnVW5p
Y29kZUluc2VydFpXU01hcmssCisgICAgICAgIENvbnRleHRNZW51SXRlbVRhZ1VuaWNvZGVJbnNl
cnRaV0pNYXJrLAorICAgICAgICBDb250ZXh0TWVudUl0ZW1UYWdVbmljb2RlSW5zZXJ0WldOSk1h
cmssCiAjZW5kaWYKICAgICAgICAgQ29udGV4dE1lbnVJdGVtVGFnU3BlbGxpbmdHdWVzcywKICAg
ICAgICAgQ29udGV4dE1lbnVJdGVtVGFnTm9HdWVzc2VzRm91bmQsCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9Mb2NhbGl6ZWRTdHJpbmdzLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9Mb2NhbGl6ZWRTdHJpbmdzLmgKaW5kZXggZmY4ZmJiZi4uNjBiZTlmNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTG9jYWxpemVkU3RyaW5ncy5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xvY2FsaXplZFN0cmluZ3MuaApAQCAtNjksNiArNjksMTYg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIFN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdEZWxl
dGUoKTsKICAgICBTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnSW5wdXRNZXRob2RzKCk7CiAgICAg
U3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1VuaWNvZGUoKTsKKyAgICBTdHJpbmcgY29udGV4dE1l
bnVJdGVtVGFnVW5pY29kZUluc2VydExSTU1hcmsoKTsKKyAgICBTdHJpbmcgY29udGV4dE1lbnVJ
dGVtVGFnVW5pY29kZUluc2VydFJMTU1hcmsoKTsKKyAgICBTdHJpbmcgY29udGV4dE1lbnVJdGVt
VGFnVW5pY29kZUluc2VydExSRU1hcmsoKTsKKyAgICBTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFn
VW5pY29kZUluc2VydFJMRU1hcmsoKTsKKyAgICBTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnVW5p
Y29kZUluc2VydExST01hcmsoKTsKKyAgICBTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnVW5pY29k
ZUluc2VydFJMT01hcmsoKTsKKyAgICBTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUlu
c2VydFBERk1hcmsoKTsKKyAgICBTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2Vy
dFpXU01hcmsoKTsKKyAgICBTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydFpX
Sk1hcmsoKTsKKyAgICBTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydFpXTkpN
YXJrKCk7CiAjZW5kaWYKICNpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFFUKSB8fCBQTEFU
Rk9STShFRkwpCiAgICAgU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1NlbGVjdEFsbCgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0xvY2FsaXplZFN0cmluZ3NHdGsu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0xvY2FsaXplZFN0cmluZ3NHdGsuY3Bw
CmluZGV4IDIyMzBkYTMuLjQ5NWQ5ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9Mb2NhbGl6ZWRTdHJpbmdzR3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvTG9jYWxpemVkU3RyaW5nc0d0ay5jcHAKQEAgLTM0Miw2ICszNDIsNTYgQEAgU3Ry
aW5nIGNvbnRleHRNZW51SXRlbVRhZ0luc3BlY3RFbGVtZW50KCkKICAgICByZXR1cm4gU3RyaW5n
Ojpmcm9tVVRGOChfKCJJbnNwZWN0IF9FbGVtZW50IikpOwogfQogCitTdHJpbmcgY29udGV4dE1l
bnVJdGVtVGFnVW5pY29kZUluc2VydExSTU1hcmsoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZy
b21VVEY4KF8oIkxSTSBfTGVmdC10by1yaWdodCBtYXJrIikpOworfQorCitTdHJpbmcgY29udGV4
dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydFJMTU1hcmsoKQoreworICAgIHJldHVybiBTdHJpbmc6
OmZyb21VVEY4KF8oIlJMTSBfUmlnaHQtdG8tbGVmdCBtYXJrIikpOworfQorCitTdHJpbmcgY29u
dGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydExSRU1hcmsoKQoreworICAgIHJldHVybiBTdHJp
bmc6OmZyb21VVEY4KF8oIkxSRSBMZWZ0LXRvLXJpZ2h0IF9lbWJlZGRpbmciKSk7Cit9CisKK1N0
cmluZyBjb250ZXh0TWVudUl0ZW1UYWdVbmljb2RlSW5zZXJ0UkxFTWFyaygpCit7CisgICAgcmV0
dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiUkxFIFJpZ2h0LXRvLWxlZnQgZV9tYmVkZGluZyIpKTsK
K30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1VuaWNvZGVJbnNlcnRMUk9NYXJrKCkKK3sK
KyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJMUk8gTGVmdC10by1yaWdodCBfb3ZlcnJp
ZGUiKSk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdVbmljb2RlSW5zZXJ0UkxPTWFy
aygpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiUkxPIFJpZ2h0LXRvLWxlZnQg
b192ZXJyaWRlIikpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2Vy
dFBERk1hcmsoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIlBERiBfUG9wIGRp
cmVjdGlvbmFsIGZvcm1hdHRpbmciKSk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdV
bmljb2RlSW5zZXJ0WldTTWFyaygpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygi
WldTIF9aZXJvIHdpZHRoIHNwYWNlIikpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFn
VW5pY29kZUluc2VydFpXSk1hcmsoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8o
IlpXSiBaZXJvIHdpZHRoIF9qb2luZXIiKSk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1U
YWdVbmljb2RlSW5zZXJ0WldOSk1hcmsoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4
KF8oIlpXTkogWmVybyB3aWR0aCBfbm9uLWpvaW5lciIpKTsKK30KKwogU3RyaW5nIHNlYXJjaE1l
bnVOb1JlY2VudFNlYXJjaGVzVGV4dCgpCiB7CiAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgo
XygiTm8gcmVjZW50IHNlYXJjaGVzIikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsv
V2ViQ29yZVN1cHBvcnQvQ29udGV4dE1lbnVDbGllbnRHdGsuY3BwIGIvU291cmNlL1dlYktpdC9n
dGsvV2ViQ29yZVN1cHBvcnQvQ29udGV4dE1lbnVDbGllbnRHdGsuY3BwCmluZGV4IGQ5YzU5ZDAu
LjgwMWUyZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nv
bnRleHRNZW51Q2xpZW50R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3Vw
cG9ydC9Db250ZXh0TWVudUNsaWVudEd0ay5jcHAKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRl
ICJDb250ZXh0TWVudUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAj
aW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKICNpbmNsdWRl
ICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJ3ZWJraXR3
ZWJ2aWV3cHJpdmF0ZS5oIgpAQCAtNzAsNjAgKzcxLDIyIEBAIHN0YXRpYyBHdGtXaWRnZXQqIGlu
cHV0TWV0aG9kc01lbnVJdGVtIChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogICAgIHJldHVybiBt
ZW51aXRlbTsKIH0KIAotLy8gVmFsdWVzIHRha2VuIGZyb20gZ3RrdGV4dHV0aWwuYwotdHlwZWRl
ZiBzdHJ1Y3QgewotICBjb25zdCBjaGFyICpsYWJlbDsKLSAgZ3VuaWNoYXIgY2g7Ci19IEd0a1Vu
aWNvZGVNZW51RW50cnk7Ci1zdGF0aWMgY29uc3QgR3RrVW5pY29kZU1lbnVFbnRyeSBiaWRpX21l
bnVfZW50cmllc1tdID0gewotICB7IE5fKCJMUk0gX0xlZnQtdG8tcmlnaHQgbWFyayIpLCAweDIw
MEUgfSwKLSAgeyBOXygiUkxNIF9SaWdodC10by1sZWZ0IG1hcmsiKSwgMHgyMDBGIH0sCi0gIHsg
Tl8oIkxSRSBMZWZ0LXRvLXJpZ2h0IF9lbWJlZGRpbmciKSwgMHgyMDJBIH0sCi0gIHsgTl8oIlJM
RSBSaWdodC10by1sZWZ0IGVfbWJlZGRpbmciKSwgMHgyMDJCIH0sCi0gIHsgTl8oIkxSTyBMZWZ0
LXRvLXJpZ2h0IF9vdmVycmlkZSIpLCAweDIwMkQgfSwKLSAgeyBOXygiUkxPIFJpZ2h0LXRvLWxl
ZnQgb192ZXJyaWRlIiksIDB4MjAyRSB9LAotICB7IE5fKCJQREYgX1BvcCBkaXJlY3Rpb25hbCBm
b3JtYXR0aW5nIiksIDB4MjAyQyB9LAotICB7IE5fKCJaV1MgX1plcm8gd2lkdGggc3BhY2UiKSwg
MHgyMDBCIH0sCi0gIHsgTl8oIlpXSiBaZXJvIHdpZHRoIF9qb2luZXIiKSwgMHgyMDBEIH0sCi0g
IHsgTl8oIlpXTkogWmVybyB3aWR0aCBfbm9uLWpvaW5lciIpLCAweDIwMEMgfQotfTsKLQotc3Rh
dGljIHZvaWQgaW5zZXJ0Q29udHJvbENoYXJhY3RlcihHdGtXaWRnZXQqIHdpZGdldCkKK3N0YXRp
YyBpbnQgZ2V0VW5pY29kZU1lbnVJdGVtUG9zaXRpb24oR3RrTWVudSogbWVudSkKIHsKLSAgICAv
LyBHdGtVbmljb2RlTWVudUVudHJ5KiBlbnRyeSA9IChHdGtVbmljb2RlTWVudUVudHJ5KilnX29i
amVjdF9nZXRfZGF0YShHX09CSkVDVCh3aWRnZXQpLCAiZ3RrLXVuaWNvZGUtbWVudS1lbnRyeSIp
OwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXN0YXRpYyBHdGtXaWRnZXQqIHVuaWNvZGVN
ZW51SXRlbShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQotewotICAgIGlmIChndGtfbWFqb3JfdmVy
c2lvbiA+IDIgfHwgKGd0a19tYWpvcl92ZXJzaW9uID09IDIgJiYgZ3RrX21pbm9yX3ZlcnNpb24g
Pj0gMTApKSB7Ci0gICAgICAgIEd0a1NldHRpbmdzKiBzZXR0aW5ncyA9IHdlYlZpZXcgPyBndGtf
d2lkZ2V0X2dldF9zZXR0aW5ncyhHVEtfV0lER0VUKHdlYlZpZXcpKSA6IGd0a19zZXR0aW5nc19n
ZXRfZGVmYXVsdCgpOwotCi0gICAgICAgIGdib29sZWFuIHNob3dNZW51ID0gVFJVRTsKLSAgICAg
ICAgaWYgKHNldHRpbmdzKQotICAgICAgICAgICAgZ19vYmplY3RfZ2V0KHNldHRpbmdzLCAiZ3Rr
LXNob3ctdW5pY29kZS1tZW51IiwgJnNob3dNZW51LCBOVUxMKTsKLSAgICAgICAgaWYgKCFzaG93
TWVudSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIEd0a1dpZGdldCogbWVu
dWl0ZW0gPSBndGtfaW1hZ2VfbWVudV9pdGVtX25ld193aXRoX21uZW1vbmljKAotICAgICAgICBf
KCJfSW5zZXJ0IFVuaWNvZGUgQ29udHJvbCBDaGFyYWN0ZXIiKSk7Ci0KLSAgICBHdGtXaWRnZXQq
IHVuaWNvZGVDb250ZXh0TWVudSA9IGd0a19tZW51X25ldygpOwotICAgIHVuc2lnbmVkIGk7Ci0g
ICAgZm9yIChpID0gMDsgaSA8IEdfTl9FTEVNRU5UUyhiaWRpX21lbnVfZW50cmllcyk7IGkrKykg
ewotICAgICAgICBHdGtXaWRnZXQqIG1lbnVpdGVtID0gZ3RrX21lbnVfaXRlbV9uZXdfd2l0aF9t
bmVtb25pYyhfKGJpZGlfbWVudV9lbnRyaWVzW2ldLmxhYmVsKSk7Ci0gICAgICAgIGdfb2JqZWN0
X3NldF9kYXRhKEdfT0JKRUNUKG1lbnVpdGVtKSwgImd0ay11bmljb2RlLW1lbnUtZW50cnkiLCAo
Z3BvaW50ZXIpJmJpZGlfbWVudV9lbnRyaWVzW2ldKTsKLSAgICAgICAgZ19zaWduYWxfY29ubmVj
dChtZW51aXRlbSwgImFjdGl2YXRlIiwgR19DQUxMQkFDSyhpbnNlcnRDb250cm9sQ2hhcmFjdGVy
KSwgMCk7Ci0gICAgICAgIGd0a193aWRnZXRfc2hvdyhtZW51aXRlbSk7Ci0gICAgICAgIGd0a19t
ZW51X3NoZWxsX2FwcGVuZChHVEtfTUVOVV9TSEVMTCh1bmljb2RlQ29udGV4dE1lbnUpLCBtZW51
aXRlbSk7Ci0gICAgICAgIC8vIEZJWE1FOiBNYWtlIHRoZSBpdGVtIHNlbnNpdGl2ZSBhcyBpbnNl
cnRDb250cm9sQ2hhcmFjdGVyKCkgaXMgaW1wbGVtZW50ZWQKLSAgICAgICAgZ3RrX3dpZGdldF9z
ZXRfc2Vuc2l0aXZlKG1lbnVpdGVtLCBGQUxTRSk7CisgICAgR093blB0cjxHTGlzdD4gaXRlbXMo
Z3RrX2NvbnRhaW5lcl9nZXRfY2hpbGRyZW4oR1RLX0NPTlRBSU5FUihtZW51KSkpOworICAgIGlu
dCB1bmljb2RlTWVudUl0ZW1Qb3NpdGlvbiA9IC0xOworICAgIEdMaXN0KiBpdGVyOworICAgIGlu
dCBpID0gMDsKKyAgICBmb3IgKGl0ZXIgPSBpdGVtcy5nZXQoKSwgaSA9IDA7IGl0ZXI7IGl0ZXIg
PSBnX2xpc3RfbmV4dChpdGVyKSwgKytpKSB7CisgICAgICAgIEd0a01lbnVJdGVtKiBpdGVtID0g
R1RLX01FTlVfSVRFTShpdGVyLT5kYXRhKTsKKyAgICAgICAgaWYgKEdUS19JU19TRVBBUkFUT1Jf
TUVOVV9JVEVNKGl0ZW0pKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChTdHJp
bmc6OmZyb21VVEY4KGd0a19tZW51X2l0ZW1fZ2V0X2xhYmVsKGl0ZW0pKSA9PSBjb250ZXh0TWVu
dUl0ZW1UYWdVbmljb2RlKCkpIHsKKyAgICAgICAgICAgIHVuaWNvZGVNZW51SXRlbVBvc2l0aW9u
ID0gaTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgfQotCi0gICAgZ3RrX21l
bnVfaXRlbV9zZXRfc3VibWVudShHVEtfTUVOVV9JVEVNKG1lbnVpdGVtKSwgdW5pY29kZUNvbnRl
eHRNZW51KTsKLQotICAgIHJldHVybiBtZW51aXRlbTsKKyAgICByZXR1cm4gdW5pY29kZU1lbnVJ
dGVtUG9zaXRpb247CiB9CiAKIFBsYXRmb3JtTWVudURlc2NyaXB0aW9uIENvbnRleHRNZW51Q2xp
ZW50OjpnZXRDdXN0b21NZW51RnJvbURlZmF1bHRJdGVtcyhDb250ZXh0TWVudSogbWVudSkKQEAg
LTEzNCwyNiArOTcsMjEgQEAgUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gQ29udGV4dE1lbnVDbGll
bnQ6OmdldEN1c3RvbU1lbnVGcm9tRGVmYXVsdEl0ZW1zKENvbnRleHQKICAgICBIaXRUZXN0UmVz
dWx0IHJlc3VsdCA9IGNvcmUod2ViVmlldyktPmNvbnRleHRNZW51Q29udHJvbGxlcigpLT5oaXRU
ZXN0UmVzdWx0KCk7CiAKICAgICBpZiAocmVzdWx0LmlzQ29udGVudEVkaXRhYmxlKCkpIHsKLQog
ICAgICAgICBHdGtXaWRnZXQqIGltQ29udGV4dE1lbnUgPSBpbnB1dE1ldGhvZHNNZW51SXRlbSh3
ZWJWaWV3KTsKLSAgICAgICAgR3RrV2lkZ2V0KiB1bmljb2RlQ29udGV4dE1lbnUgPSB1bmljb2Rl
TWVudUl0ZW0od2ViVmlldyk7CisgICAgICAgIGlmICghaW1Db250ZXh0TWVudSkKKyAgICAgICAg
ICAgIHJldHVybiBndGttZW51OwogCi0gICAgICAgIGlmIChpbUNvbnRleHRNZW51IHx8IHVuaWNv
ZGVDb250ZXh0TWVudSkgeworICAgICAgICAvLyBQbGFjZSB0aGUgaW0gY29udGV4dCBtZW51IGl0
ZW0gcmlnaHQgYmVmb3JlIHRoZSB1bmljb2RlIG1lbnUgaXRlbQorICAgICAgICAvLyBpZiBpdCdz
IHByZXNlbnQuCisgICAgICAgIGludCB1bmljb2RlTWVudUl0ZW1Qb3NpdGlvbiA9IGdldFVuaWNv
ZGVNZW51SXRlbVBvc2l0aW9uKGd0a21lbnUpOworICAgICAgICBpZiAodW5pY29kZU1lbnVJdGVt
UG9zaXRpb24gPT0gLTEpIHsKICAgICAgICAgICAgIEd0a1dpZGdldCogc2VwYXJhdG9yID0gZ3Rr
X3NlcGFyYXRvcl9tZW51X2l0ZW1fbmV3KCk7CiAgICAgICAgICAgICBndGtfbWVudV9zaGVsbF9h
cHBlbmQoR1RLX01FTlVfU0hFTEwoZ3RrbWVudSksIHNlcGFyYXRvcik7CiAgICAgICAgICAgICBn
dGtfd2lkZ2V0X3Nob3coc2VwYXJhdG9yKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChpbUNv
bnRleHRNZW51KSB7Ci0gICAgICAgICAgICBndGtfbWVudV9zaGVsbF9hcHBlbmQoR1RLX01FTlVf
U0hFTEwoZ3RrbWVudSksIGltQ29udGV4dE1lbnUpOwotICAgICAgICAgICAgZ3RrX3dpZGdldF9z
aG93KGltQ29udGV4dE1lbnUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHVuaWNvZGVDb250
ZXh0TWVudSkgewotICAgICAgICAgICAgZ3RrX21lbnVfc2hlbGxfYXBwZW5kKEdUS19NRU5VX1NI
RUxMKGd0a21lbnUpLCB1bmljb2RlQ29udGV4dE1lbnUpOwotICAgICAgICAgICAgZ3RrX3dpZGdl
dF9zaG93KHVuaWNvZGVDb250ZXh0TWVudSk7Ci0gICAgICAgIH0KLQorICAgICAgICBndGtfbWVu
dV9zaGVsbF9pbnNlcnQoR1RLX01FTlVfU0hFTEwoZ3RrbWVudSksIGltQ29udGV4dE1lbnUsIHVu
aWNvZGVNZW51SXRlbVBvc2l0aW9uKTsKKyAgICAgICAgZ3RrX3dpZGdldF9zaG93KGltQ29udGV4
dE1lbnUpOwogICAgIH0KIAogICAgIHJldHVybiBndGttZW51OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50R3RrLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudEd0ay5jcHAKaW5kZXggYjhlMTYw
ZS4uMTIwYjAzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQv
RWRpdG9yQ2xpZW50R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9y
dC9FZGl0b3JDbGllbnRHdGsuY3BwCkBAIC0xMzMsNiArMTMzLDIxIEBAIHZvaWQgRWRpdG9yQ2xp
ZW50OjpzZXRJbnB1dE1ldGhvZFN0YXRlKGJvb2wgYWN0aXZlKQogI2VuZGlmCiB9CiAKK2Jvb2wg
RWRpdG9yQ2xpZW50OjpzaG91bGRTaG93VW5pY29kZU1lbnUoKQoreworICAgIGlmIChndGtfbWFq
b3JfdmVyc2lvbiA+IDIgfHwgKGd0a19tYWpvcl92ZXJzaW9uID09IDIgJiYgZ3RrX21pbm9yX3Zl
cnNpb24gPj0gMTApKSB7CisgICAgICAgIEd0a1NldHRpbmdzKiBzZXR0aW5ncyA9IGd0a193aWRn
ZXRfZ2V0X3NldHRpbmdzKEdUS19XSURHRVQobV93ZWJWaWV3KSk7CisgICAgICAgIGlmICghc2V0
dGluZ3MpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICBnYm9vbGVhbiBlbmFi
bGVkOworICAgICAgICBnX29iamVjdF9nZXQoc2V0dGluZ3MsICJndGstc2hvdy11bmljb2RlLW1l
bnUiLCAmZW5hYmxlZCwgTlVMTCk7CisgICAgICAgIHJldHVybiBlbmFibGVkOworICAgIH0KKwor
ICAgIHJldHVybiB0cnVlOworfQorCiBib29sIEVkaXRvckNsaWVudDo6c2hvdWxkRGVsZXRlUmFu
Z2UoUmFuZ2UqIHJhbmdlKQogewogICAgIGdib29sZWFuIGFjY2VwdCA9IFRSVUU7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRHdGsuaCBi
L1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudEd0ay5oCmluZGV4
IGVmMTU5YzYuLjJmMDhkOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVT
dXBwb3J0L0VkaXRvckNsaWVudEd0ay5oCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVT
dXBwb3J0L0VkaXRvckNsaWVudEd0ay5oCkBAIC0xMzcsNiArMTM3LDggQEAgY2xhc3MgRWRpdG9y
Q2xpZW50IDogcHVibGljIFdlYkNvcmU6OkVkaXRvckNsaWVudCB7CiAgICAgICAgIHZpcnR1YWwg
dm9pZCB3aWxsU2V0SW5wdXRNZXRob2RTdGF0ZSgpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0
SW5wdXRNZXRob2RTdGF0ZShib29sIGVuYWJsZWQpOwogCisgICAgICAgIHZpcnR1YWwgYm9vbCBz
aG91bGRTaG93VW5pY29kZU1lbnUoKTsKKwogICAgIHByaXZhdGU6CiAjaWYgRU5BQkxFKFNQRUxM
Q0hFQ0spCiAgICAgICAgIFRleHRDaGVja2VyQ2xpZW50R3RrIG1fdGV4dENoZWNrZXJDbGllbnQ7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkVkaXRvckNsaWVudC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJFZGl0b3JDbGllbnQuaAppbmRleCAwMTBjZDRiLi43OGVhOGRiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9y
Q2xpZW50LmgKQEAgLTE0OCw2ICsxNDgsOSBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgU3RyaW5n
IGRpc21pc3NDb3JyZWN0aW9uUGFuZWxTb29uKFdlYkNvcmU6OlJlYXNvbkZvckRpc21pc3NpbmdD
b3JyZWN0aW9uUGFuZWwpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRBdXRvY29y
cmVjdGlvblJlc3BvbnNlKEF1dG9jb3JyZWN0aW9uUmVzcG9uc2VUeXBlLCBjb25zdCBTdHJpbmcm
IHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nKSBPVkVSUklE
RTsKICNlbmRpZgorI2lmIFBMQVRGT1JNKEdUSykKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkU2hv
d1VuaWNvZGVNZW51KCkgT1ZFUlJJREU7CisjZW5kaWYKICAgICBXZWJQYWdlKiBtX3BhZ2U7CiB9
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L2d0ay9XZWJFZGl0b3JDbGllbnRHdGsuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9ndGsvV2ViRWRpdG9yQ2xpZW50R3RrLmNwcAppbmRleCA5ZjM0NTMwLi5l
MzNkNzIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L2d0ay9XZWJFZGl0b3JDbGllbnRHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkVkaXRvckNsaWVudEd0ay5jcHAKQEAgLTE5NCw1
ICsxOTQsOSBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6c2V0U2VsZWN0aW9uUHJpbWFyeUNsaXBi
b2FyZElmTmVlZGVkKEZyYW1lKiBmcmFtZSkKICNlbmRpZgogfQogCitib29sIFdlYkVkaXRvckNs
aWVudDo6c2hvdWxkU2hvd1VuaWNvZGVNZW51KCkKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KIAog
fQo=
</data>
<flag name="review"
          id="135509"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
      

    </bug>

</bugzilla>