<?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>82579</bug_id>
          
          <creation_ts>2012-03-29 00:53:17 -0700</creation_ts>
          <short_desc>[EFL][DRT] http/tests/globalhistory testcases do not pass</short_desc>
          <delta_ts>2012-06-06 07:58:07 -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>WebKit EFL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>86343</dependson>
    
    <dependson>86370</dependson>
          <blocked>82724</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Mikhail Pozdnyakov">mikhail.pozdnyakov</reporter>
          <assigned_to name="Mikhail Pozdnyakov">mikhail.pozdnyakov</assigned_to>
          <cc>gyuyoung.kim</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>lucas.de.marchi</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>590920</commentid>
    <comment_count>0</comment_count>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-03-29 00:53:17 -0700</bug_when>
    <thetext>EFL port needs history delegate support in order to unskip global history tests and provide better global history management for the clients.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591925</commentid>
    <comment_count>1</comment_count>
      <attachid>134737</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-03-30 00:24:58 -0700</bug_when>
    <thetext>Created attachment 134737
Global history delegate support for EFL port</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591942</commentid>
    <comment_count>2</comment_count>
      <attachid>134737</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-03-30 01:12:08 -0700</bug_when>
    <thetext>Comment on attachment 134737
Global history delegate support for EFL port

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

Informal r- on my side. And, it looks this patch is a little huge.

&gt; LayoutTests/ChangeLog:5
&gt; +

Missing description for this patch.

&gt; Source/WebKit/ChangeLog:5
&gt; +

ditto.

&gt; Source/WebKit/efl/ChangeLog:7
&gt; +

Though this patch is huge, you don&apos;t add any descriptions for this patch.

&gt; Source/WebKit/efl/ewk/ewk_history_delegate.cpp:37
&gt; +    Ewk_History_Delegate* res = new Ewk_History_Delegate;

Do not use abbreviation in local variable.

&gt; Source/WebKit/efl/ewk/ewk_history_delegate.cpp:48
&gt; +void ewk_history_delegate_free(Ewk_History_Delegate* hd)

We don&apos;t use abbreviation in function implementation. hd -&gt; historyDelegation ?

&gt; Source/WebKit/efl/ewk/ewk_history_delegate.cpp:59
&gt; +void ewk_history_delegate_did_navigate_with_navigation_data(Ewk_History_Delegate* hd, const Evas_Object* webView, Ewk_Navigation_Data* navigationData, const Evas_Object* webFrame)

ditto. hd -&gt; historyDelegation.

In addition, it looks webView means view and webFrame means ewkFrame. If so, it is better to use *ewkView* and *ewkFrame* to be consistent in existing name rule.

&gt; Source/WebKit/efl/ewk/ewk_history_delegate.h:65
&gt; +    void (*didNavigateWithNavigationData)(Ewk_History_Delegate* hd, const Evas_Object* webView, Ewk_Navigation_Data* navigationData, const Evas_Object* webFrame);

We have to adhere efl coding style for public header. So, you should use abbreviation variable name.

Please see below link,
http://trac.webkit.org/wiki/EFLWebKitCodingStyle

&gt; Source/WebKit/efl/ewk/ewk_history_delegate.h:81
&gt; +

If this functions is API, you miss API description.

&gt; Source/WebKit/efl/ewk/ewk_view.cpp:3919
&gt; +Ewk_History_Delegate* ewk_view_history_delegate_get(const Evas_Object *ewkView)

Move &apos;*&apos; to data type side.

&gt; Source/WebKit/efl/ewk/ewk_view.cpp:3926
&gt; +void ewk_view_history_delegate_set(const Evas_Object *ewkView, Ewk_History_Delegate *delegate)

ditto.

&gt; Tools/ChangeLog:7
&gt; +

Missing description.

&gt; Tools/DumpRenderTree/efl/HistoryDelegate.cpp:37
&gt; +static void didNavigateWithNavigationData(Ewk_History_Delegate* /*hd*/, const Evas_Object* /*webView*/, Ewk_Navigation_Data* navigationData, const Evas_Object* /*webFrame*/)

It seems that /*hd*/, /*webView*/ /*webFrame*/) is unneeded.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592057</commentid>
    <comment_count>3</comment_count>
      <attachid>134779</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-03-30 04:51:37 -0700</bug_when>
    <thetext>Created attachment 134779
global history delegate v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592072</commentid>
    <comment_count>4</comment_count>
      <attachid>134784</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-03-30 05:09:32 -0700</bug_when>
    <thetext>Created attachment 134784
global history delegate v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592108</commentid>
    <comment_count>5</comment_count>
      <attachid>134795</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-03-30 06:04:18 -0700</bug_when>
    <thetext>Created attachment 134795
global history delegate v2 rebased</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592130</commentid>
    <comment_count>6</comment_count>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-03-30 07:01:53 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 134737 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=134737&amp;action=review
&gt; 
&gt; Informal r- on my side. And, it looks this patch is a little huge.
&gt; 
&gt; &gt; LayoutTests/ChangeLog:5
&gt; &gt; +
&gt; 
&gt; Missing description for this patch.
&gt; 
&gt; &gt; Source/WebKit/ChangeLog:5
&gt; &gt; +
&gt; 
&gt; ditto.
&gt; 
&gt; &gt; Source/WebKit/efl/ChangeLog:7
&gt; &gt; +
&gt; 
&gt; Though this patch is huge, you don&apos;t add any descriptions for this patch.
&gt; 
&gt; &gt; Source/WebKit/efl/ewk/ewk_history_delegate.cpp:37
&gt; &gt; +    Ewk_History_Delegate* res = new Ewk_History_Delegate;
&gt; 
&gt; Do not use abbreviation in local variable.
&gt; 
&gt; &gt; Source/WebKit/efl/ewk/ewk_history_delegate.cpp:48
&gt; &gt; +void ewk_history_delegate_free(Ewk_History_Delegate* hd)
&gt; 
&gt; We don&apos;t use abbreviation in function implementation. hd -&gt; historyDelegation ?
&gt; 
&gt; &gt; Source/WebKit/efl/ewk/ewk_history_delegate.cpp:59
&gt; &gt; +void ewk_history_delegate_did_navigate_with_navigation_data(Ewk_History_Delegate* hd, const Evas_Object* webView, Ewk_Navigation_Data* navigationData, const Evas_Object* webFrame)
&gt; 
&gt; ditto. hd -&gt; historyDelegation.
&gt; 
&gt; In addition, it looks webView means view and webFrame means ewkFrame. If so, it is better to use *ewkView* and *ewkFrame* to be consistent in existing name rule.
&gt; 
&gt; &gt; Source/WebKit/efl/ewk/ewk_history_delegate.h:65
&gt; &gt; +    void (*didNavigateWithNavigationData)(Ewk_History_Delegate* hd, const Evas_Object* webView, Ewk_Navigation_Data* navigationData, const Evas_Object* webFrame);
&gt; 
&gt; We have to adhere efl coding style for public header. So, you should use abbreviation variable name.
&gt; 
&gt; Please see below link,
&gt; http://trac.webkit.org/wiki/EFLWebKitCodingStyle
&gt; 
&gt; &gt; Source/WebKit/efl/ewk/ewk_history_delegate.h:81
&gt; &gt; +
&gt; 
&gt; If this functions is API, you miss API description.
&gt; 
&gt; &gt; Source/WebKit/efl/ewk/ewk_view.cpp:3919
&gt; &gt; +Ewk_History_Delegate* ewk_view_history_delegate_get(const Evas_Object *ewkView)
&gt; 
&gt; Move &apos;*&apos; to data type side.
&gt; 
&gt; &gt; Source/WebKit/efl/ewk/ewk_view.cpp:3926
&gt; &gt; +void ewk_view_history_delegate_set(const Evas_Object *ewkView, Ewk_History_Delegate *delegate)
&gt; 
&gt; ditto.
&gt; 
&gt; &gt; Tools/ChangeLog:7
&gt; &gt; +
&gt; 
&gt; Missing description.
&gt; 
&gt; &gt; Tools/DumpRenderTree/efl/HistoryDelegate.cpp:37
&gt; &gt; +static void didNavigateWithNavigationData(Ewk_History_Delegate* /*hd*/, const Evas_Object* /*webView*/, Ewk_Navigation_Data* navigationData, const Evas_Object* /*webFrame*/)
&gt; 
&gt; It seems that /*hd*/, /*webView*/ /*webFrame*/) is unneeded.
Thank you for review.
Comments are met in &quot;global history delegate v2 rebased&quot; patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>594259</commentid>
    <comment_count>7</comment_count>
      <attachid>135285</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-04-03 00:43:22 -0700</bug_when>
    <thetext>Created attachment 135285
global history delegate v2 

fixed a mistake in FrameLoaderClientEfl::updateGlobalHistory function implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622789</commentid>
    <comment_count>8</comment_count>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-05-14 03:34:12 -0700</bug_when>
    <thetext>Splitted. Now this bug is responsible for DRT part only.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622808</commentid>
    <comment_count>9</comment_count>
      <attachid>141685</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-05-14 04:01:38 -0700</bug_when>
    <thetext>Created attachment 141685
DRT patch

Depends on patch from bug86343.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622816</commentid>
    <comment_count>10</comment_count>
      <attachid>141685</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-05-14 04:11:18 -0700</bug_when>
    <thetext>Comment on attachment 141685
DRT patch

Attachment 141685 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/12673999</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>631037</commentid>
    <comment_count>11</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-05-22 18:27:28 -0700</bug_when>
    <thetext>It looks this path can pass ews after landing depending bugs(Bug 86343, Bug 86370). I think it is good to request r? after landing them. Could you clear flag until then ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>631517</commentid>
    <comment_count>12</comment_count>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-05-23 04:59:11 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; It looks this path can pass ews after landing depending bugs(Bug 86343, Bug 86370). I think it is good to request r? after landing them. Could you clear flag until then ?

done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638345</commentid>
    <comment_count>13</comment_count>
      <attachid>141685</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-05-31 06:41:44 -0700</bug_when>
    <thetext>Comment on attachment 141685
DRT patch

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

&gt; Tools/DumpRenderTree/efl/DumpRenderTree.cpp:201
&gt; +    return cTestPathOrURL.contains(&quot;globalhistory/&quot;);

The Windows port checks for &quot;/globalhistory/&quot; instead of &quot;globalhistory/&quot;: I think it would be safer to do like them.

&gt; Tools/DumpRenderTree/efl/DumpRenderTreeChrome.cpp:544
&gt; +    Ewk_View_Navigation_Data* navigationData = static_cast&lt;Ewk_View_Navigation_Data*&gt;(eventInfo);

Should probably be const.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>640365</commentid>
    <comment_count>14</comment_count>
      <attachid>145524</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-06-04 00:10:36 -0700</bug_when>
    <thetext>Created attachment 145524
DRT patch v2 (rebased + review comments from Chris)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>640370</commentid>
    <comment_count>15</comment_count>
      <attachid>145524</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-06-04 00:19:53 -0700</bug_when>
    <thetext>Comment on attachment 145524
DRT patch v2 (rebased + review comments from Chris)

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

&gt; Tools/DumpRenderTree/efl/DumpRenderTreeChrome.cpp:572
&gt; +    const bool wasFailure = navigationData-&gt;has_substitute_data ||  navigationData-&gt;response-&gt;status_code &gt;= 400;

Extra space after &quot;||&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>640376</commentid>
    <comment_count>16</comment_count>
      <attachid>145527</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-06-04 00:37:41 -0700</bug_when>
    <thetext>Created attachment 145527
DRT patch v3 (more review comments from Chris)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>640377</commentid>
    <comment_count>17</comment_count>
      <attachid>145527</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-06-04 00:41:55 -0700</bug_when>
    <thetext>Comment on attachment 145527
DRT patch v3 (more review comments from Chris)

LGTM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642456</commentid>
    <comment_count>18</comment_count>
      <attachid>145527</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-06-06 07:43:55 -0700</bug_when>
    <thetext>Comment on attachment 145527
DRT patch v3 (more review comments from Chris)

rs=me based on informal reviews</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642475</commentid>
    <comment_count>19</comment_count>
      <attachid>145527</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-06 07:57:58 -0700</bug_when>
    <thetext>Comment on attachment 145527
DRT patch v3 (more review comments from Chris)

Clearing flags on attachment: 145527

Committed r119590: &lt;http://trac.webkit.org/changeset/119590&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642476</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-06 07:58:07 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134737</attachid>
            <date>2012-03-30 00:24:58 -0700</date>
            <delta_ts>2012-03-30 02:51:47 -0700</delta_ts>
            <desc>Global history delegate support for EFL port</desc>
            <filename>history_delegate_support.patch</filename>
            <type>text/plain</type>
            <size>38846</size>
            <attacher name="Mikhail Pozdnyakov">mikhail.pozdnyakov</attacher>
            
              <data encoding="base64">Y29tbWl0IDJlZjEwZGI2ZGVjMWIwYmRlZTI4NWZlNzk4NmJjNjk3MzhiNWI4YTYKQXV0aG9yOiBN
aWtoYWlsIFBvemRueWFrb3YgPHBvemRueWFrb3YubWlraGFpbEBnbWFpbC5jb20+CkRhdGU6ICAg
VGh1IE1hciAyOSAxNjoyNTo0MSAyMDEyICswMzAwCgogICAgSGlzdG9yeSBkZWxlZ2F0ZSBzdXBw
b3J0LgoKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0No
YW5nZUxvZwppbmRleCA4NTg4YjVjLi4yNGEzMmVhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIw
MTItMDMtMjkgIE1pa2hhaWwgUG96ZG55YWtvdiAgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5j
b20+CisKKyAgICAgICAgW0VGTF0gR2xvYmFsIGhpc3RvcnkgZGVsZWdhdGUgc3VwcG9ydCBmb3Ig
RUZMIHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTgyNTc5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9lZmwvU2tpcHBlZDoKKwogMjAxMi0wMy0yOSAgw4Fkw6FtIEthbGxhaSAgPGth
ZGFtQGluZi51LXN6ZWdlZC5odT4KIAogICAgICAgICBbUXRdIFVucmV2aWV3ZWQgZ2FyZGVuaW5n
LiBTa2lwIHNvbWUgZmFpbGluZyB0ZXN0cy4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRm
b3JtL2VmbC9Ta2lwcGVkIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZsL1NraXBwZWQKaW5kZXgg
YmFhOTZkMS4uZjExYmNmZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZsL1Nr
aXBwZWQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZsL1NraXBwZWQKQEAgLTY2OSw5ICs2
NjksNiBAQCBzdG9yYWdlL3RyYW5zYWN0aW9uLWNhbGxiYWNrLWlzb2xhdGVkLXdvcmxkLmh0bWwK
IHN0b3JhZ2UvdHJhbnNhY3Rpb24tZXJyb3ItY2FsbGJhY2staXNvbGF0ZWQtd29ybGQuaHRtbAog
c3RvcmFnZS90cmFuc2FjdGlvbi1zdWNjZXNzLWNhbGxiYWNrLWlzb2xhdGVkLXdvcmxkLmh0bWwK
IAotIyBFRkwncyBMYXlvdXRUZXN0Q29udHJvbGxlciBkb2VzIG5vdCBpbXBsZW1lbnQgcmVtb3Zl
QWxsVmlzaXRlZExpbmtzCi1odHRwL3Rlc3RzL2dsb2JhbGhpc3RvcnkvaGlzdG9yeS1kZWxlZ2F0
ZS1iYXNpYy12aXNpdGVkLWxpbmtzLmh0bWwKLQogIyBFRkwncyBMYXlvdXRUZXN0Q29udHJvbGxl
ciBkb2VzIG5vdCBpbXBsZW1lbnQgY2FsbFNob3VsZENsb3NlT25XZWJWaWV3CiBmYXN0L2V2ZW50
cy9vbmJlZm9yZXVubG9hZC1mb2N1c2VkLWlmcmFtZS5odG1sCiAKQEAgLTgyOCw2ICs4MjUsOCBA
QCBmYXN0L2Zvcm1zL3ZhbGlkYXRpb24tbWVzc2FnZS1vbi10ZXh0YXJlYS5odG1sCiAjIFRoZXNl
IHRlc3RzIG5lZWRzIGVuaGFuY2VkIGZyYW1lbG9hZGVyIGRlbGVnYXRlIGxvZ2dpbmcgaW4gRFJU
CiBmYXN0L2xvYWRlci9yZWN1cnNpdmUtYmVmb3JlLXVubG9hZC1jcmFzaC5odG1sCiBmYXN0L2xv
YWRlci9udWxsLXJlcXVlc3QtYWZ0ZXItd2lsbFNlbmRSZXF1ZXN0Lmh0bWwKK2h0dHAvdGVzdHMv
Z2xvYmFsaGlzdG9yeS9oaXN0b3J5LWRlbGVnYXRlLWJhc2ljLXJlZnJlc2gtcmVkaXJlY3QuaHRt
bAoraHR0cC90ZXN0cy9nbG9iYWxoaXN0b3J5L2hpc3RvcnktZGVsZWdhdGUtYmFzaWMtMzAyLXJl
ZGlyZWN0Lmh0bWwKIAogIyBOZWVkIHRvIGFkZCBmdW5jdGlvbmFsaXR5IHRvIER1bXBSZW5kZXJU
cmVlIHRvIGhhbmRsZSBlcnJvciBwYWdlcwogZmFzdC9oaXN0b3J5L2JhY2stZm9yd2FyZC1yZXNl
dC1hZnRlci1lcnJvci1oYW5kbGluZy5odG1sCkBAIC0xMDM3LDkgKzEwMzYsNiBAQCBmYXN0L2Rv
bS90aXRsZS1kaXJlY3Rpb25hbGl0eS5odG1sCiBmYXN0L2RvbS9XaW5kb3cvc2xvdy11bmxvYWQt
aGFuZGxlci5odG1sCiBmYXN0L2RvbS9XaW5kb3cvc2xvdy11bmxvYWQtaGFuZGxlci1vbmx5LWZy
YW1lLWlzLXN0b3BwZWQuaHRtbAogCi0jIFRoZSBFRkwgcG9ydCBoYXMgbm8gZ2xvYmFsIGhpc3Rv
cnkgZGVsZWdhdGUKLWh0dHAvdGVzdHMvZ2xvYmFsaGlzdG9yeQotCiAjIFBhc3RlQm9hcmQ6OnBs
YWluVGV4dCgpIGRvZXMgbm90IHN1cHBvcnQgZmlsZSBuYW1lcy4KIGVkaXRpbmcvcGFzdGVib2Fy
ZC9kcmFnLWZpbGVzLXRvLWVkaXRhYmxlLWVsZW1lbnQuaHRtbAogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGI3MzFi
ZDkuLjNkYzFlMDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTItMDMtMjkgIE1pa2hh
aWwgUG96ZG55YWtvdiAgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CisKKyAgICAgICAg
W0VGTF0gR2xvYmFsIGhpc3RvcnkgZGVsZWdhdGUgc3VwcG9ydCBmb3IgRUZMIHBvcnQKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyNTc5CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBQbGF0Zm9ybUVmbC5j
bWFrZToKKwogMjAxMi0wMy0yMiAgUmFwaGFlbCBLdWJvIGRhIENvc3RhICA8cmFrdWNvQEZyZWVC
U0Qub3JnPgogCiAgICAgICAgIFtDTWFrZV0gVW5yZXZpZXdlZCBidWlsZCBmaXggYWZ0ZXIgcjEx
MTc3OC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3Vy
Y2UvV2ViS2l0L1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IDEwMDEwYzkuLjE3N2ZiYWQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYktp
dC9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAtODksNiArODksNyBAQCBMSVNUKEFQUEVORCBXZWJLaXRf
U09VUkNFUwogICAgIGVmbC9ld2svZXdrX2Nvb2tpZXMuY3BwCiAgICAgZWZsL2V3ay9ld2tfZnJh
bWUuY3BwCiAgICAgZWZsL2V3ay9ld2tfaGlzdG9yeS5jcHAKKyAgICBlZmwvZXdrL2V3a19oaXN0
b3J5X2RlbGVnYXRlLmNwcAogICAgIGVmbC9ld2svZXdrX2pzLmNwcAogICAgIGVmbC9ld2svZXdr
X21haW4uY3BwCiAgICAgZWZsL2V3ay9ld2tfbmV0d29yay5jcHAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvZWZsL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZwppbmRl
eCBhMTUzM2JjLi4zNzk5ZGUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDAgQEAKKzIw
MTItMDMtMjkgIE1pa2hhaWwgUG96ZG55YWtvdiAgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5j
b20+CisKKyAgICAgICAgW0VGTF0gR2xvYmFsIGhpc3RvcnkgZGVsZWdhdGUgc3VwcG9ydCBmb3Ig
RUZMIHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTgyNTc5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRFZmwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q2hyb21lQ2xpZW50RWZsOjpwb3B1bGF0ZVZpc2l0ZWRMaW5rcyk6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRFZmwuaDoKKyAgICAgICAg
KENocm9tZUNsaWVudEVmbCk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJD
bGllbnRFZmwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRFZmw6OmRp
c3BhdGNoV2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xp
ZW50RWZsOjphc3NpZ25JZGVudGlmaWVyVG9Jbml0aWFsUmVxdWVzdCk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZUxvYWRlckNsaWVudEVmbDo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0
aW9uQWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50RWZsOjp1cGRh
dGVHbG9iYWxIaXN0b3J5UmVkaXJlY3RMaW5rcyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxv
YWRlckNsaWVudEVmbDo6c2V0VGl0bGUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJD
bGllbnRFZmw6OnVwZGF0ZUdsb2JhbEhpc3RvcnkpOgorICAgICAgICAqIGV3ay9FV2ViS2l0Lmg6
CisgICAgICAgICogZXdrL2V3a19mcmFtZS5oOgorICAgICAgICAqIGV3ay9ld2tfaGlzdG9yeV9k
ZWxlZ2F0ZS5jcHA6IEFkZGVkLgorICAgICAgICAoZXdrX2hpc3RvcnlfZGVsZWdhdGVfbmV3KToK
KyAgICAgICAgKGV3a19oaXN0b3J5X2RlbGVnYXRlX2ZyZWUpOgorICAgICAgICAoZXdrX2hpc3Rv
cnlfZGVsZWdhdGVfZGlkX25hdmlnYXRlX3dpdGhfbmF2aWdhdGlvbl9kYXRhKToKKyAgICAgICAg
KGV3a19oaXN0b3J5X2RlbGVnYXRlX2RpZF9wZXJmb3JtX2NsaWVudF9yZWRpcmVjdF9mcm9tX3Vy
bCk6CisgICAgICAgIChld2tfaGlzdG9yeV9kZWxlZ2F0ZV9kaWRfcGVyZm9ybV9zZXJ2ZXJfcmVk
aXJlY3RfZnJvbV91cmwpOgorICAgICAgICAoZXdrX2hpc3RvcnlfZGVsZWdhdGVfdXBkYXRlX2hp
c3RvcnlfdGl0bGUpOgorICAgICAgICAoZXdrX2hpc3RvcnlfZGVsZWdhdGVfcG9wdWxhdGVfdmlz
aXRlZF9saW5rcyk6CisgICAgICAgICogZXdrL2V3a19oaXN0b3J5X2RlbGVnYXRlLmg6IEFkZGVk
LgorICAgICAgICAqIGV3ay9ld2tfdmlldy5jcHA6CisgICAgICAgIChfRXdrX1ZpZXdfUHJpdmF0
ZV9EYXRhKToKKyAgICAgICAgKF9ld2tfdmlld19wcml2X2RlbCk6CisgICAgICAgIChld2tfdmll
d19oaXN0b3J5X2RlbGVnYXRlX2dldCk6CisgICAgICAgIChld2tfdmlld19oaXN0b3J5X2RlbGVn
YXRlX3NldCk6CisgICAgICAgICogZXdrL2V3a192aWV3Lmg6CisKIDIwMTItMDMtMjggIE5hdGUg
Q2hhcGluICA8amFwaGV0QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZW1vdmUgZGlzcGF0Y2hE
aWRMb2FkTWFpblJlc291cmNlIGNhbGxiYWNrLCBzaW5jZSBubwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50RWZsLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEVmbC5jcHAKaW5kZXggNjhhZGY1
Zi4uZjg4NDZiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQv
Q2hyb21lQ2xpZW50RWZsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9y
dC9DaHJvbWVDbGllbnRFZmwuY3BwCkBAIC01NDksNiArNTQ5LDEzIEBAIFBhc3NSZWZQdHI8U2Vh
cmNoUG9wdXBNZW51PiBDaHJvbWVDbGllbnRFZmw6OmNyZWF0ZVNlYXJjaFBvcHVwTWVudShQb3B1
cE1lbnVDbGllCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTZWFyY2hQb3B1cE1lbnVFZmwoY2xp
ZW50KSk7CiB9CiAKK3ZvaWQgQ2hyb21lQ2xpZW50RWZsOjpwb3B1bGF0ZVZpc2l0ZWRMaW5rcygp
Cit7CisgICAgRXdrX0hpc3RvcnlfRGVsZWdhdGUqIGhpc3RvcnlEZWxlZ2F0ZSA9IGV3a192aWV3
X2hpc3RvcnlfZGVsZWdhdGVfZ2V0KG1fdmlldyk7CisgICAgaWYgKGhpc3RvcnlEZWxlZ2F0ZSkK
KyAgICAgICAgZXdrX2hpc3RvcnlfZGVsZWdhdGVfcG9wdWxhdGVfdmlzaXRlZF9saW5rcyhoaXN0
b3J5RGVsZWdhdGUsIG1fdmlldyk7Cit9CisKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCiB2b2lkIENocm9tZUNsaWVudEVmbDo6YXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIoRnJhbWUq
IGZyYW1lLCBHcmFwaGljc0xheWVyKiByb290TGF5ZXIpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRFZmwuaCBiL1NvdXJjZS9XZWJL
aXQvZWZsL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEVmbC5oCmluZGV4IDljZTlkNjguLmIy
YmFkNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0Nocm9t
ZUNsaWVudEVmbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0Nocm9t
ZUNsaWVudEVmbC5oCkBAIC0xNjQsNiArMTY0LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9v
bCBoYXNPcGVuZWRQb3B1cCgpIGNvbnN0OwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxQb3B1cE1l
bnU+IGNyZWF0ZVBvcHVwTWVudShQb3B1cE1lbnVDbGllbnQqKSBjb25zdDsKICAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8U2VhcmNoUG9wdXBNZW51PiBjcmVhdGVTZWFyY2hQb3B1cE1lbnUoUG9wdXBN
ZW51Q2xpZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHBvcHVsYXRlVmlzaXRlZExpbmtz
KCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUnViYmVyQmFuZEluRGlyZWN0aW9uKFdlYkNv
cmU6OlNjcm9sbERpcmVjdGlvbikgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwg
dm9pZCBudW1XaGVlbEV2ZW50SGFuZGxlcnNDaGFuZ2VkKHVuc2lnbmVkKSB7IH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50RWZs
LmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50
RWZsLmNwcAppbmRleCA2ZmE1Y2MwLi5lZTdlZjUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2VmbC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEVmbC5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRFZmwuY3BwCkBAIC03
LDYgKzcsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA4IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFu
c2VuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVt
cwogICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcworICogQ29w
eXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uCiAgKgogICogQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCkBAIC0xNjIsMTMgKzE2MywxNSBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50RWZs
OjpkaXNwYXRjaERpZENhbmNlbEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKERvY3VtZW50TG9hZAog
CiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50RWZsOjpkaXNwYXRjaFdpbGxTZW5kUmVxdWVzdChEb2N1
bWVudExvYWRlciogbG9hZGVyLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIFJlc291cmNlUmVx
dWVzdCYgY29yZVJlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIGNvcmVSZXNwb25zZSkK
IHsKLSAgICBDU3RyaW5nIHVybCA9IGNvcmVSZXF1ZXN0LnVybCgpLnN0cmluZygpLnV0ZjgoKTsK
KyAgICBjb25zdCBDU3RyaW5nIHVybCA9IGNvcmVSZXF1ZXN0LnVybCgpLnN0cmluZygpLnV0Zjgo
KTsKICAgICBEQkcoIlJlc291cmNlIHVybD0lcyIsIHVybC5kYXRhKCkpOworICAgIGNvbnN0IENT
dHJpbmcgbWV0aG9kID0gY29yZVJlcXVlc3QuaHR0cE1ldGhvZCgpLnV0ZjgoKTsKIAotICAgIEV3
a19GcmFtZV9SZXNvdXJjZV9SZXF1ZXN0IHJlcXVlc3QgPSB7IDAsIGlkZW50aWZpZXIgfTsKKyAg
ICBFd2tfRnJhbWVfUmVzb3VyY2VfUmVxdWVzdCByZXF1ZXN0ID0geyAwLCAwLCBpZGVudGlmaWVy
IH07CiAgICAgRXdrX0ZyYW1lX1Jlc291cmNlX1JlcXVlc3Qgb3JpZyA9IHJlcXVlc3Q7IC8qIElu
aXRpYWxpemUgY29uc3QgZmllbGRzLiAqLwogCiAgICAgb3JpZy51cmwgPSByZXF1ZXN0LnVybCA9
IHVybC5kYXRhKCk7CisgICAgb3JpZy5odHRwX21ldGhvZCA9IHJlcXVlc3QuaHR0cF9tZXRob2Qg
PSBtZXRob2QuZGF0YSgpOwogCiAgICAgZXdrX2ZyYW1lX3JlcXVlc3Rfd2lsbF9zZW5kKG1fZnJh
bWUsICZyZXF1ZXN0KTsKIApAQCAtMjAxLDcgKzIwNCw3IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGll
bnRFZmw6OmFzc2lnbklkZW50aWZpZXJUb0luaXRpYWxSZXF1ZXN0KHVuc2lnbmVkIGxvbmcgaWRl
bnRpCiAgICAgQ1N0cmluZyB1cmwgPSBjb3JlUmVxdWVzdC51cmwoKS5zdHJpbmcoKS51dGY4KCk7
CiAgICAgREJHKCJSZXNvdXJjZSB1cmw9JXMiLCB1cmwuZGF0YSgpKTsKIAotICAgIEV3a19GcmFt
ZV9SZXNvdXJjZV9SZXF1ZXN0IHJlcXVlc3QgPSB7IDAsIGlkZW50aWZpZXIgfTsKKyAgICBFd2tf
RnJhbWVfUmVzb3VyY2VfUmVxdWVzdCByZXF1ZXN0ID0geyAwLCAwLCBpZGVudGlmaWVyIH07CiAg
ICAgZXdrX2ZyYW1lX3JlcXVlc3RfYXNzaWduX2lkZW50aWZpZXIobV9mcmFtZSwgJnJlcXVlc3Qp
OwogfQogCkBAIC0yOTMsMTAgKzI5NiwxMSBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50RWZsOjpk
aXNwYXRjaERlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24oRnJhbWVQb2xpY3lGdQogCiAg
ICAgLy8gaWYgbm90IGFjY2VwdE5hdmlnYXRpb25SZXF1ZXN0IC0gbG9vayBhdCBRdCAtPiBQb2xp
Y3lJZ25vcmU7CiAgICAgLy8gRklYTUU6IGRvIHByb3BlciBjaGVjayBhbmQgb25seSByZXNldCBm
b3JtcyB3aGVuIG9uIFBvbGljeUlnbm9yZQotICAgIGNoYXIqIHVybCA9IHN0cmR1cChyZXNvdXJj
ZVJlcXVlc3QudXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgRXdrX0ZyYW1lX1Jl
c291cmNlX1JlcXVlc3QgcmVxdWVzdCA9IHsgdXJsLCAwIH07CisgICAgY29uc3QgQ1N0cmluZyB1
cmwgPSByZXNvdXJjZVJlcXVlc3QudXJsKCkuc3RyaW5nKCkudXRmOCgpOworICAgIGNvbnN0IENT
dHJpbmcgbWV0aG9kID0gcmVzb3VyY2VSZXF1ZXN0Lmh0dHBNZXRob2QoKS51dGY4KCk7CisgICAg
RXdrX0ZyYW1lX1Jlc291cmNlX1JlcXVlc3QgcmVxdWVzdCA9IHsgdXJsLmRhdGEoKSwgbWV0aG9k
LmRhdGEoKSwgMCB9OwogICAgIGJvb2wgcmV0ID0gZXdrX3ZpZXdfbmF2aWdhdGlvbl9wb2xpY3lf
ZGVjaXNpb24obV92aWV3LCAmcmVxdWVzdCk7Ci0gICAgZnJlZSh1cmwpOworCiAKICAgICBQb2xp
Y3lBY3Rpb24gcG9saWN5OwogICAgIGlmICghcmV0KQpAQCAtNDY2LDYgKzQ3MCwyNSBAQCB2b2lk
IEZyYW1lTG9hZGVyQ2xpZW50RWZsOjpyZXN0b3JlVmlld1N0YXRlKCkKIAogdm9pZCBGcmFtZUxv
YWRlckNsaWVudEVmbDo6dXBkYXRlR2xvYmFsSGlzdG9yeVJlZGlyZWN0TGlua3MoKQogeworICAg
IFdlYkNvcmU6OkZyYW1lKiBmcmFtZSA9IEVXS1ByaXZhdGU6OmNvcmVGcmFtZShtX2ZyYW1lKTsK
KyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm47CisKKyAgICBXZWJDb3JlOjpEb2N1bWVu
dExvYWRlciogbG9hZGVyID0gZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpOworICAg
IGlmICghbG9hZGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBFd2tfSGlzdG9yeV9EZWxlZ2F0
ZSogaGlzdG9yeURlbGVnYXRlID0gZXdrX3ZpZXdfaGlzdG9yeV9kZWxlZ2F0ZV9nZXQobV92aWV3
KTsKKyAgICBpZiAoaGlzdG9yeURlbGVnYXRlKSB7CisgICAgICAgIENTdHJpbmcgc291cmNlVVJM
ID0gbG9hZGVyLT5jbGllbnRSZWRpcmVjdFNvdXJjZUZvckhpc3RvcnkoKS51dGY4KCk7CisgICAg
ICAgIENTdHJpbmcgZGVzdFVSTCA9IGxvYWRlci0+Y2xpZW50UmVkaXJlY3REZXN0aW5hdGlvbkZv
ckhpc3RvcnkoKS51dGY4KCk7CisKKyAgICAgICAgaWYgKCFsb2FkZXItPmNsaWVudFJlZGlyZWN0
U291cmNlRm9ySGlzdG9yeSgpLmlzTnVsbCgpKQorICAgICAgICAgICAgZXdrX2hpc3RvcnlfZGVs
ZWdhdGVfZGlkX3BlcmZvcm1fY2xpZW50X3JlZGlyZWN0X2Zyb21fdXJsKGhpc3RvcnlEZWxlZ2F0
ZSwgbV92aWV3LCBzb3VyY2VVUkwuZGF0YSgpLCBkZXN0VVJMLmRhdGEoKSwgbV9mcmFtZSk7CisK
KyAgICAgICAgaWYgKCFsb2FkZXItPnNlcnZlclJlZGlyZWN0U291cmNlRm9ySGlzdG9yeSgpLmlz
TnVsbCgpKQorICAgICAgICAgICAgZXdrX2hpc3RvcnlfZGVsZWdhdGVfZGlkX3BlcmZvcm1fc2Vy
dmVyX3JlZGlyZWN0X2Zyb21fdXJsKGhpc3RvcnlEZWxlZ2F0ZSwgbV92aWV3LCBzb3VyY2VVUkwu
ZGF0YSgpLCBkZXN0VVJMLmRhdGEoKSwgbV9mcmFtZSk7CisgICAgfQogfQogCiBib29sIEZyYW1l
TG9hZGVyQ2xpZW50RWZsOjpzaG91bGRHb1RvSGlzdG9yeUl0ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0p
IGNvbnN0CkBAIC03MTIsNyArNzM1LDkgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudEVmbDo6cHJl
cGFyZUZvckRhdGFTb3VyY2VSZXBsYWNlbWVudCgpCiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRF
Zmw6OnNldFRpdGxlKGNvbnN0IFN0cmluZ1dpdGhEaXJlY3Rpb24mIHRpdGxlLCBjb25zdCBLVVJM
JiB1cmwpCiB7Ci0gICAgLy8gbm8gbmVlZCBmb3IsIGRpc3BhdGNoRGlkUmVjZWl2ZVRpdGxlIGlz
IHRoZSByaWdodCBjYWxsYmFjaworICAgIEV3a19IaXN0b3J5X0RlbGVnYXRlKiBoaXN0b3J5RGVs
ZWdhdGUgPSBld2tfdmlld19oaXN0b3J5X2RlbGVnYXRlX2dldChtX3ZpZXcpOworICAgIGlmICho
aXN0b3J5RGVsZWdhdGUpCisgICAgICAgIGV3a19oaXN0b3J5X2RlbGVnYXRlX3VwZGF0ZV9oaXN0
b3J5X3RpdGxlKGhpc3RvcnlEZWxlZ2F0ZSwgbV92aWV3LCB0aXRsZS5zdHJpbmcoKS51dGY4KCku
ZGF0YSgpLCB1cmwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiB9CiAKIHZvaWQgRnJhbWVMb2Fk
ZXJDbGllbnRFZmw6OmRpc3BhdGNoRGlkUmVjZWl2ZUNvbnRlbnRMZW5ndGgoRG9jdW1lbnRMb2Fk
ZXIqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGludCBkYXRhTGVuZ3RoKQpAQCAtODc5LDcg
KzkwNCw0MSBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50RWZsOjpzdGFydERvd25sb2FkKGNvbnN0
IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUwogCiB2b2lkIEZyYW1lTG9hZGVyQ2xp
ZW50RWZsOjp1cGRhdGVHbG9iYWxIaXN0b3J5KCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIFdlYkNvcmU6OkZyYW1lKiBmcmFtZSA9IEVXS1ByaXZhdGU6OmNvcmVGcmFtZShtX2ZyYW1l
KTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm47CisKKyAgICBXZWJDb3JlOjpEb2N1
bWVudExvYWRlciogbG9hZGVyID0gZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpOwor
ICAgIGlmICghbG9hZGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBFd2tfSGlzdG9yeSogaGlz
dG9yeSA9IGV3a192aWV3X2hpc3RvcnlfZ2V0KG1fdmlldyk7CisgICAgaWYgKCFoaXN0b3J5KQor
ICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBDU3RyaW5nIHVybEZvckhpc3RvcnkgPSBsb2Fk
ZXItPnVybEZvckhpc3RvcnkoKS5zdHJpbmcoKS51dGY4KCk7CisgICAgY29uc3QgQ1N0cmluZyB0
aXRsZSA9IGxvYWRlci0+dGl0bGUoKS5zdHJpbmcoKS51dGY4KCk7CisKKyAgICBFd2tfSGlzdG9y
eV9JdGVtKiBpdGVtID0gZXdrX2hpc3RvcnlfaXRlbV9uZXcodXJsRm9ySGlzdG9yeS5kYXRhKCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxl
LmRhdGEoKSk7CisgICAgZXdrX2hpc3RvcnlfaGlzdG9yeV9pdGVtX2FkZChoaXN0b3J5LCBpdGVt
KTsKKyAgICBld2tfaGlzdG9yeV9pdGVtX2ZyZWUoaXRlbSk7CisKKyAgICBFd2tfSGlzdG9yeV9E
ZWxlZ2F0ZSogaGlzdG9yeURlbGVnYXRlID0gZXdrX3ZpZXdfaGlzdG9yeV9kZWxlZ2F0ZV9nZXQo
bV92aWV3KTsKKyAgICBpZiAoaGlzdG9yeURlbGVnYXRlKSB7CisgICAgICAgIGNvbnN0IENTdHJp
bmcgY2xpZW50UmVkaXJlY3RTb3VyY2UgPSBsb2FkZXItPmNsaWVudFJlZGlyZWN0U291cmNlRm9y
SGlzdG9yeSgpLnV0ZjgoKTsKKyAgICAgICAgY29uc3QgQ1N0cmluZyBvcmlnaW5hbFVSTCA9IGxv
YWRlci0+b3JpZ2luYWxVUkwoKS5zdHJpbmcoKS51dGY4KCk7CisgICAgICAgIGNvbnN0IENTdHJp
bmcgaHR0cE1ldGhvZCA9IGxvYWRlci0+cmVxdWVzdCgpLmh0dHBNZXRob2QoKS51dGY4KCk7Cisg
ICAgICAgIGNvbnN0IENTdHJpbmcgcmVzcG9uc2VVUkwgPSBsb2FkZXItPnJlc3BvbnNlVVJMKCku
c3RyaW5nKCkudXRmOCgpOworICAgICAgICAKKyAgICAgICAgRXdrX05hdmlnYXRpb25fRGF0YSBk
YXRhID0KKyAgICAgICAge3VybEZvckhpc3RvcnkuZGF0YSgpLCB0aXRsZS5kYXRhKCksCisgICAg
ICAgICB7b3JpZ2luYWxVUkwuZGF0YSgpLCBodHRwTWV0aG9kLmRhdGEoKSwgMH0sCisgICAgICAg
ICB7cmVzcG9uc2VVUkwuZGF0YSgpLCBsb2FkZXItPnJlc3BvbnNlKCkuaHR0cFN0YXR1c0NvZGUo
KX0sCisgICAgICAgICBsb2FkZXItPnN1YnN0aXR1dGVEYXRhKCkuaXNWYWxpZCgpLCBjbGllbnRS
ZWRpcmVjdFNvdXJjZS5kYXRhKCl9OworCisgICAgICAgIGV3a19oaXN0b3J5X2RlbGVnYXRlX2Rp
ZF9uYXZpZ2F0ZV93aXRoX25hdmlnYXRpb25fZGF0YShoaXN0b3J5RGVsZWdhdGUsIG1fdmlldywg
JmRhdGEsIG1fZnJhbWUpOworICAgIH0KIH0KIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudEVmbDo6
c2F2ZVBsYXRmb3JtRGF0YVRvQ2FjaGVkRnJhbWUoQ2FjaGVkRnJhbWUqKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9lZmwvZXdrL0VXZWJLaXQuaCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9F
V2ViS2l0LmgKaW5kZXggMGZmYjUxYy4uMzQyZDAzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9lZmwvZXdrL0VXZWJLaXQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svRVdlYktpdC5o
CkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiZXdrX2Nvb2tpZXMuaCIKICNpbmNsdWRlICJl
d2tfZnJhbWUuaCIKICNpbmNsdWRlICJld2tfaGlzdG9yeS5oIgorI2luY2x1ZGUgImV3a19oaXN0
b3J5X2RlbGVnYXRlLmgiCiAjaW5jbHVkZSAiZXdrX2pzLmgiCiAjaW5jbHVkZSAiZXdrX21haW4u
aCIKICNpbmNsdWRlICJld2tfbmV0d29yay5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9l
ZmwvZXdrL2V3a19mcmFtZS5oIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19mcmFtZS5oCmlu
ZGV4IGY3NDU1NWUuLjVhZDk2ODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9l
d2tfZnJhbWUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2ZyYW1lLmgKQEAgLTEs
NiArMSw3IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJl
ZGRlZCBzeXN0ZW1zCiAgICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJv
bmljcworICAgIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbgogCiAgICAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCkBAIC05NiwxOCArOTcsMzMgQEAgc3RydWN0IF9Fd2tfRnJhbWVfTG9hZF9FcnJv
ciB7CiAKIC8vLyBDcmVhdGVzIGEgdHlwZSBuYW1lIGZvciBfRXdrX0ZyYW1lX1Jlc291cmNlX1Jl
cXVlc3QuCiB0eXBlZGVmIHN0cnVjdCBfRXdrX0ZyYW1lX1Jlc291cmNlX1JlcXVlc3QgRXdrX0Zy
YW1lX1Jlc291cmNlX1JlcXVlc3Q7CisKIC8qKgotICogQGJyaWVmICAgU3RydWN0dXJlIHVzZWQg
dG8gcmVwb3J0IHJlc291cmNlIHJlcXVlc3QuCisgKiBAYnJpZWYgICBTdHJ1Y3R1cmUgY29udGFp
bmluZyBkZXRhaWxzIGFib3V0IGEgcmVzb3VyY2UgcmVxdWVzdC4KICAqCi0gKiBEZXRhaWxzIGdp
dmVuIGJlZm9yZSBhIHJlc291cmNlIGlzIGxvYWRlZCBvbiBhIGdpdmVuIGZyYW1lLiBJdCdzIHVz
ZWQgYnkKLSAqIGV3a19mcmFtZV9yZXF1ZXN0X3dpbGxfc2VuZCgpIHRvIGluZm9ybSB0aGUgZGV0
YWlscyBvZiBhIHRvLWJlLWxvYWRlZAotICogcmVzb3VyY2UsIGFsbG93aW5nIHRoZW0gdG8gYmUg
b3ZlcnJpZGRlbi4KKyAqIERldGFpbHMgZ2l2ZW4gYmVmb3JlIGEgcmVzb3VyY2UgaXMgbG9hZGVk
IG9uIGEgZ2l2ZW4gZnJhbWUuIEl0J3MgdXNlZCBpbgorICogRXdrX0ZyYW1lX1Jlc291cmNlX01l
c3NhZ2VzIHRvIGluZm9ybSBhYm91dCB0aGUgZGV0YWlscyBvZiBhIHJlc291cmNlIHJlcXVlc3Qu
CiAgKi8KIHN0cnVjdCBfRXdrX0ZyYW1lX1Jlc291cmNlX1JlcXVlc3QgewogICAgIGNvbnN0IGNo
YXIgKnVybDsgLyoqPCB1cmwgb2YgdGhlIHJlc291cmNlICovCisgICAgY29uc3QgY2hhciAqaHR0
cF9tZXRob2Q7IC8qKjwgaHR0cCBtZXRob2Qgb2YgdGhlIHJlc291cmNlICovCiAgICAgY29uc3Qg
dW5zaWduZWQgbG9uZyBpZGVudGlmaWVyOyAvKio8IGlkZW50aWZpZXIgb2YgcmVzb3VyY2UsIGNh
biBub3QgYmUgY2hhbmdlZCAqLwogfTsKIAorLy8vIENyZWF0ZXMgYSB0eXBlIG5hbWUgZm9yIF9F
d2tfRnJhbWVfUmVzb3VyY2VfUmVzcG9uc2UuCit0eXBlZGVmIHN0cnVjdCBfRXdrX0ZyYW1lX1Jl
c291cmNlX1Jlc3BvbnNlIEV3a19GcmFtZV9SZXNvdXJjZV9SZXNwb25zZTsKKworLyoqCisgKiBA
YnJpZWYgICBTdHJ1Y3R1cmUgY29udGFpbmluZyBkZXRhaWxzIGFib3V0IGEgcmVzcG9uc2UgdG8g
YSByZXNvdXJjZSByZXF1ZXN0LgorICoKKyAqIERldGFpbHMgZ2l2ZW4gaW4gdGhlIHJlc3BvbnNl
IHRvIGEgcmVzb3VyY2UgcmVxdWVzdC4gSXQncyB1c2VkIGJ5CisgKiBld2tfZnJhbWVfcmVzcG9u
c2VfcmVjZWl2ZWQoKSB0byBpbmZvcm0gYWJvdXQgdGhlIGRldGFpbHMgb2YgYSByZXNwb25zZS4K
KyAqLworc3RydWN0IF9Fd2tfRnJhbWVfUmVzb3VyY2VfUmVzcG9uc2UgeworICAgIGNvbnN0IGNo
YXIgKnVybDsgLyoqPCB1cmwgb2YgdGhlIHJlc291cmNlICovCisgICAgY29uc3QgaW50IHN0YXR1
c19jb2RlOyAvKio8IGh0dHAgc3RhdHVzIGNvZGUgKi8KK307CisKIC8vLyBFbnVtIGNvbnRhaW5p
bmcgaGl0IHRlc3QgZGF0YSB0eXBlcwogdHlwZWRlZiBlbnVtIHsKICAgICBFV0tfSElUX1RFU1Rf
UkVTVUxUX0NPTlRFWFRfRE9DVU1FTlQgPSAxIDw8IDEsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2VmbC9ld2svZXdrX2hpc3RvcnlfZGVsZWdhdGUuY3BwIGIvU291cmNlL1dlYktpdC9lZmwv
ZXdrL2V3a19oaXN0b3J5X2RlbGVnYXRlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi4zZDI0NGQwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdr
L2V3a19oaXN0b3J5X2RlbGVnYXRlLmNwcApAQCAtMCwwICsxLDEwMyBAQAorLyoKKyogQ29weXJp
Z2h0IChjKSAyMDEyLCBJbnRlbCBDb3Jwb3JhdGlvbgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZSBtZXQ6CisqCisqICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisqIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKiAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwK
KyogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUgZG9jdW1lbnRhdGlvbgorKiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyogKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEludGVsIENvcnBv
cmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dAorKiBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMgIkFTIElTIgorKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisq
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRQorKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRQorKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgImV3a19oaXN0b3J5X2RlbGVnYXRlLmgiCisKKyNpbmNsdWRl
IDxlaW5hX3NhZmV0eV9jaGVja3MuaD4KKworRXdrX0hpc3RvcnlfRGVsZWdhdGUqIGV3a19oaXN0
b3J5X2RlbGVnYXRlX25ldyhFaW5hX0ZyZWVfQ2IgZGF0YV9mcmVlX2NiKQoreworICAgIEV3a19I
aXN0b3J5X0RlbGVnYXRlKiByZXMgPSBuZXcgRXdrX0hpc3RvcnlfRGVsZWdhdGU7CisgICAgbWVt
c2V0KHJlcywgMCwgc2l6ZW9mKEV3a19IaXN0b3J5X0RlbGVnYXRlKSk7CisKKyAgICByZXMtPmFw
aSA9IG5ldyBFd2tfSGlzdG9yeV9EZWxlZ2F0ZV9DbGFzczsKKyAgICBtZW1zZXQocmVzLT5hcGks
IDAsIHNpemVvZihFd2tfSGlzdG9yeV9EZWxlZ2F0ZV9DbGFzcykpOworCisgICAgcmVzLT5kYXRh
X2ZyZWVfY2IgPSBkYXRhX2ZyZWVfY2I7CisKKyAgICByZXR1cm4gcmVzOworfQorCit2b2lkIGV3
a19oaXN0b3J5X2RlbGVnYXRlX2ZyZWUoRXdrX0hpc3RvcnlfRGVsZWdhdGUqIGhkKQoreworICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGhkKTsKKworICAgIGlmIChoZC0+ZGF0YV9mcmVl
X2NiKQorICAgICAgICAoKmhkLT5kYXRhX2ZyZWVfY2IpKGhkLT5kYXRhKTsKKworICAgIGRlbGV0
ZSBoZC0+YXBpOworICAgIGRlbGV0ZSBoZDsKK30KKwordm9pZCBld2tfaGlzdG9yeV9kZWxlZ2F0
ZV9kaWRfbmF2aWdhdGVfd2l0aF9uYXZpZ2F0aW9uX2RhdGEoRXdrX0hpc3RvcnlfRGVsZWdhdGUq
IGhkLCBjb25zdCBFdmFzX09iamVjdCogd2ViVmlldywgRXdrX05hdmlnYXRpb25fRGF0YSogbmF2
aWdhdGlvbkRhdGEsIGNvbnN0IEV2YXNfT2JqZWN0KiB3ZWJGcmFtZSkKK3sKKyAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTihoZCk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4o
aGQtPmFwaSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oaGQtPmFwaS0+ZGlkTmF2
aWdhdGVXaXRoTmF2aWdhdGlvbkRhdGEpOworCisgICAgKCpoZC0+YXBpLT5kaWROYXZpZ2F0ZVdp
dGhOYXZpZ2F0aW9uRGF0YSkoaGQsIHdlYlZpZXcsIG5hdmlnYXRpb25EYXRhLCB3ZWJGcmFtZSk7
Cit9CisKK3ZvaWQgZXdrX2hpc3RvcnlfZGVsZWdhdGVfZGlkX3BlcmZvcm1fY2xpZW50X3JlZGly
ZWN0X2Zyb21fdXJsKEV3a19IaXN0b3J5X0RlbGVnYXRlKiBoZCwgY29uc3QgRXZhc19PYmplY3Qq
IHdlYlZpZXcsIGNvbnN0IGNoYXIqIHNvdXJjZVVSTCwgY29uc3QgY2hhciogZGVzdGluYXRpb25V
UkwsIGNvbnN0IEV2YXNfT2JqZWN0KiB3ZWJGcmFtZSkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTihoZCk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oaGQtPmFwaSk7
CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oaGQtPmFwaS0+ZGlkUGVyZm9ybUNsaWVu
dFJlZGlyZWN0RnJvbVVSTCk7CisKKyAgICAoKmhkLT5hcGktPmRpZFBlcmZvcm1DbGllbnRSZWRp
cmVjdEZyb21VUkwpKGhkLCB3ZWJWaWV3LCBzb3VyY2VVUkwsIGRlc3RpbmF0aW9uVVJMLCB3ZWJG
cmFtZSk7Cit9CisKK3ZvaWQgZXdrX2hpc3RvcnlfZGVsZWdhdGVfZGlkX3BlcmZvcm1fc2VydmVy
X3JlZGlyZWN0X2Zyb21fdXJsKEV3a19IaXN0b3J5X0RlbGVnYXRlKiBoZCwgY29uc3QgRXZhc19P
YmplY3QqIHdlYlZpZXcsIGNvbnN0IGNoYXIqIHNvdXJjZVVSTCwgY29uc3QgY2hhciogZGVzdGlu
YXRpb25VUkwsIGNvbnN0IEV2YXNfT2JqZWN0KiB3ZWJGcmFtZSkKK3sKKyAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTihoZCk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oaGQt
PmFwaSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oaGQtPmFwaS0+ZGlkUGVyZm9y
bVNlcnZlclJlZGlyZWN0RnJvbVVSTCk7CisKKyAgICAoKmhkLT5hcGktPmRpZFBlcmZvcm1TZXJ2
ZXJSZWRpcmVjdEZyb21VUkwpKGhkLCB3ZWJWaWV3LCBzb3VyY2VVUkwsIGRlc3RpbmF0aW9uVVJM
LCB3ZWJGcmFtZSk7Cit9CisKKwordm9pZCBld2tfaGlzdG9yeV9kZWxlZ2F0ZV91cGRhdGVfaGlz
dG9yeV90aXRsZShFd2tfSGlzdG9yeV9EZWxlZ2F0ZSogaGQsIGNvbnN0IEV2YXNfT2JqZWN0KiB3
ZWJWaWV3LCBjb25zdCBjaGFyKiB0aXRsZSwgY29uc3QgY2hhciogdXJsKQoreworICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOKGhkKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
TihoZC0+YXBpKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihoZC0+YXBpLT51cGRh
dGVIaXN0b3J5VGl0bGUpOworICAgICgqaGQtPmFwaS0+dXBkYXRlSGlzdG9yeVRpdGxlKShoZCwg
d2ViVmlldywgdGl0bGUsIHVybCk7CisKK30KKwordm9pZCBld2tfaGlzdG9yeV9kZWxlZ2F0ZV9w
b3B1bGF0ZV92aXNpdGVkX2xpbmtzKEV3a19IaXN0b3J5X0RlbGVnYXRlKiBoZCwgY29uc3QgRXZh
c19PYmplY3QqIHdlYlZpZXcpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oaGQp
OworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGhkLT5hcGkpOworICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOKGhkLT5hcGktPnBvcHVsYXRlVmlzaXRlZExpbmtzRm9yV2ViVmll
dyk7CisKKyAgICAoKmhkLT5hcGktPnBvcHVsYXRlVmlzaXRlZExpbmtzRm9yV2ViVmlldykoaGQs
IHdlYlZpZXcpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19oaXN0
b3J5X2RlbGVnYXRlLmggYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2hpc3RvcnlfZGVsZWdh
dGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YmM1MjMxCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19oaXN0b3J5X2RlbGVnYXRlLmgK
QEAgLTAsMCArMSw5NSBAQAorLyoKKyogQ29weXJpZ2h0IChjKSAyMDEyLCBJbnRlbCBDb3Jwb3Jh
dGlvbgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzCisqIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorKiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyogKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRz
IGNvbnRyaWJ1dG9ycyBtYXkKKyogYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyovCisKKyNpZm5kZWYgZXdrX2hpc3RvcnlfZGVsZWdhdGVfaAorI2RlZmlu
ZSBld2tfaGlzdG9yeV9kZWxlZ2F0ZV9oCisKKyNpbmNsdWRlICJld2tfZnJhbWUuaCIKKworI2lu
Y2x1ZGUgPEVpbmEuaD4KKyNpbmNsdWRlIDxFdmFzLmg+CisjaW5jbHVkZSA8Y2Fpcm8uaD4KKwor
I2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorLy8gRklYTUU6IFNob3Vs
ZCBiZSByZS1mYWN0b3JlZCBpZiBFbmxpZ2h0ZW5tZW50IGdlbmVyaWMgb2JqZWN0IG1vZGVsIHR1
cm5zIHVwCisKKy8qKgorICogQGJyaWVmICAgU3RydWN0dXJlIGNvbnRhaW5pbmcgZGV0YWlscyBh
Ym91dCBhIFdlYiBWaWV3IG5hdmlnYXRpb24uCisgKgorICogRGV0YWlscyBvZiBhIFdlYiBWaWV3
IG5hdmlnYXRpb24uIEl0IGlzIHVzZWQgYnkgZXdrX2hpc3RvcnlfZGVsZWdhdGVfZGlkX25hdmln
YXRlX3dpdGhfbmF2aWdhdGlvbl9kYXRhKCkgdG8gaW5mb3JtIGFib3V0IHRoZSBkZWF0aWxzIG9m
IGEgbmF2aWdhdGlvbi4KKyAqLworc3RydWN0IF9Fd2tfTmF2aWdhdGlvbl9EYXRhIHsKKyAgICBj
b25zdCBjaGFyKiB1cmw7ICAvKio8IHVybCBvZiB0aGUgbmF2aWdhdGVkIHBhZ2UgKi8KKyAgICBj
b25zdCBjaGFyKiB0aXRsZTsgIC8qKjwgdGl0bGUgb2YgdGhlIG5hdmlnYXRlZCBwYWdlICovCisg
ICAgRXdrX0ZyYW1lX1Jlc291cmNlX1JlcXVlc3QgcmVxdWVzdDsgIC8qKjwgbmF2aWdhdGlvbiBy
ZXF1ZXN0ICovCisgICAgRXdrX0ZyYW1lX1Jlc291cmNlX1Jlc3BvbnNlIHJlc3BvbnNlOyAgLyoq
PCBuYXZpZ2F0aW9uIHJlc3BvbnNlICovCisgICAgRWluYV9Cb29sIGhhc1N1YnN0aXR1dGVEYXRh
OyAgLyoqPCBkYXRhIHN1YnN0aXR1dGlvbiBmbGFnICovCisgICAgY29uc3QgY2hhciogY2xpZW50
UmVkaXJlY3RTb3VyY2U7ICAvKio8IGNsaWVudCByZWRpcmVjdCBzb3VyY2UgdXJsKi8KK307CisK
Ky8vLyBDcmVhdGVzIGEgdHlwZSBuYW1lIGZvciBfX0V3a19OYXZpZ2F0aW9uX0RhdGEuCit0eXBl
ZGVmIHN0cnVjdCBfRXdrX05hdmlnYXRpb25fRGF0YSBFd2tfTmF2aWdhdGlvbl9EYXRhOworCit0
eXBlZGVmIHN0cnVjdCBfRXdrX0hpc3RvcnlfRGVsZWdhdGVfQ2xhc3MgRXdrX0hpc3RvcnlfRGVs
ZWdhdGVfQ2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9Fd2tfSGlzdG9yeV9EZWxlZ2F0ZSBFd2tf
SGlzdG9yeV9EZWxlZ2F0ZTsKKworc3RydWN0IF9Fd2tfSGlzdG9yeV9EZWxlZ2F0ZV9DbGFzcyB7
CisgICAgdm9pZCAoKmRpZE5hdmlnYXRlV2l0aE5hdmlnYXRpb25EYXRhKShFd2tfSGlzdG9yeV9E
ZWxlZ2F0ZSogaGQsIGNvbnN0IEV2YXNfT2JqZWN0KiB3ZWJWaWV3LCBFd2tfTmF2aWdhdGlvbl9E
YXRhKiBuYXZpZ2F0aW9uRGF0YSwgY29uc3QgRXZhc19PYmplY3QqIHdlYkZyYW1lKTsKKyAgICB2
b2lkICgqZGlkUGVyZm9ybUNsaWVudFJlZGlyZWN0RnJvbVVSTCkoRXdrX0hpc3RvcnlfRGVsZWdh
dGUqIGhkLCBjb25zdCBFdmFzX09iamVjdCogd2ViVmlldywgY29uc3QgY2hhciogc291cmNlVVJM
LCBjb25zdCBjaGFyKiBkZXN0aW5hdGlvblVSTCwgY29uc3QgRXZhc19PYmplY3QqIHdlYkZyYW1l
KTsKKyAgICB2b2lkICgqZGlkUGVyZm9ybVNlcnZlclJlZGlyZWN0RnJvbVVSTCkoRXdrX0hpc3Rv
cnlfRGVsZWdhdGUqIGhkLCBjb25zdCBFdmFzX09iamVjdCogd2ViVmlldywgY29uc3QgY2hhciog
c291cmNlVVJMLCBjb25zdCBjaGFyKiBkZXN0aW5hdGlvblVSTCwgY29uc3QgRXZhc19PYmplY3Qq
IHdlYkZyYW1lKTsKKyAgICB2b2lkICgqdXBkYXRlSGlzdG9yeVRpdGxlKShFd2tfSGlzdG9yeV9E
ZWxlZ2F0ZSogaGQsIGNvbnN0IEV2YXNfT2JqZWN0KiB3ZWJWaWV3LCBjb25zdCBjaGFyKiB0aXRs
ZSwgY29uc3QgY2hhciogdXJsKTsKKyAgICB2b2lkICgqcG9wdWxhdGVWaXNpdGVkTGlua3NGb3JX
ZWJWaWV3KShFd2tfSGlzdG9yeV9EZWxlZ2F0ZSogaGQsIGNvbnN0IEV2YXNfT2JqZWN0KiB3ZWJW
aWV3KTsKK307CisKK3N0cnVjdCBfRXdrX0hpc3RvcnlfRGVsZWdhdGUgeworICAgIEV3a19IaXN0
b3J5X0RlbGVnYXRlX0NsYXNzICphcGk7CisgICAgdm9pZCAqZGF0YTsKKyAgICBFaW5hX0ZyZWVf
Q2IgZGF0YV9mcmVlX2NiOworfTsKKworRUFQSSBFd2tfSGlzdG9yeV9EZWxlZ2F0ZSogZXdrX2hp
c3RvcnlfZGVsZWdhdGVfbmV3KEVpbmFfRnJlZV9DYiBkYXRhX2ZyZWVfY2IpOworCitFQVBJIHZv
aWQgZXdrX2hpc3RvcnlfZGVsZWdhdGVfZnJlZShFd2tfSGlzdG9yeV9EZWxlZ2F0ZSogaGQpOwor
CitFQVBJIHZvaWQgZXdrX2hpc3RvcnlfZGVsZWdhdGVfZGlkX25hdmlnYXRlX3dpdGhfbmF2aWdh
dGlvbl9kYXRhKEV3a19IaXN0b3J5X0RlbGVnYXRlKiBoZCwgY29uc3QgRXZhc19PYmplY3QqIHdl
YlZpZXcsIEV3a19OYXZpZ2F0aW9uX0RhdGEqIG5hdmlnYXRpb25EYXRhLCBjb25zdCBFdmFzX09i
amVjdCogd2ViRnJhbWUpOworCitFQVBJIHZvaWQgZXdrX2hpc3RvcnlfZGVsZWdhdGVfZGlkX3Bl
cmZvcm1fY2xpZW50X3JlZGlyZWN0X2Zyb21fdXJsKEV3a19IaXN0b3J5X0RlbGVnYXRlKiBoZCwg
Y29uc3QgRXZhc19PYmplY3QqIHdlYlZpZXcsIGNvbnN0IGNoYXIqIHNvdXJjZVVSTCwgY29uc3Qg
Y2hhciogZGVzdGluYXRpb25VUkwsIGNvbnN0IEV2YXNfT2JqZWN0KiB3ZWJGcmFtZSk7CisKK0VB
UEkgdm9pZCBld2tfaGlzdG9yeV9kZWxlZ2F0ZV9kaWRfcGVyZm9ybV9zZXJ2ZXJfcmVkaXJlY3Rf
ZnJvbV91cmwoRXdrX0hpc3RvcnlfRGVsZWdhdGUqIGhkLCBjb25zdCBFdmFzX09iamVjdCogd2Vi
VmlldywgY29uc3QgY2hhciogc291cmNlVVJMLCBjb25zdCBjaGFyKiBkZXN0aW5hdGlvblVSTCwg
Y29uc3QgRXZhc19PYmplY3QqIHdlYkZyYW1lKTsKKworRUFQSSB2b2lkIGV3a19oaXN0b3J5X2Rl
bGVnYXRlX3VwZGF0ZV9oaXN0b3J5X3RpdGxlKEV3a19IaXN0b3J5X0RlbGVnYXRlKiBoZCwgY29u
c3QgRXZhc19PYmplY3QqIHdlYlZpZXcsIGNvbnN0IGNoYXIqIHRpdGxlLCBjb25zdCBjaGFyKiB1
cmwpOworCitFQVBJIHZvaWQgZXdrX2hpc3RvcnlfZGVsZWdhdGVfcG9wdWxhdGVfdmlzaXRlZF9s
aW5rcyhFd2tfSGlzdG9yeV9EZWxlZ2F0ZSogaGQsIGNvbnN0IEV2YXNfT2JqZWN0KiB3ZWJWaWV3
KTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZiAvLyBld2tfaGlzdG9y
eV9kZWxlZ2F0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcu
Y3BwIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3LmNwcAppbmRleCAyNmI1NTVjLi4z
MWRhNGU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5jcHAKQEAgLTEsNiArMSw3IEBACiAv
KgogICAgIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1z
CiAgICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcworICAgIENv
cHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbgogCiAgICAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICAgIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBA
IC0xNDcsNiArMTQ4LDcgQEAgc3RydWN0IF9Fd2tfVmlld19Qcml2YXRlX0RhdGEgewogICAgIFdl
YkNvcmU6OkZyYW1lKiBtYWluRnJhbWU7CiAgICAgV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHMg
dmlld3BvcnRBcmd1bWVudHM7CiAgICAgRXdrX0hpc3RvcnkqIGhpc3Rvcnk7CisgICAgRXdrX0hp
c3RvcnlfRGVsZWdhdGUqIGhpc3RvcnlEZWxlZ2F0ZTsKICAgICBPd25QdHI8V2ViQ29yZTo6UGFn
ZUNsaWVudEVmbD4gcGFnZUNsaWVudDsKICAgICBzdHJ1Y3QgewogICAgICAgICBFd2tfTWVudSBt
ZW51OwpAQCAtNzUzLDYgKzc1NSw3IEBAIHN0YXRpYyB2b2lkIF9ld2tfdmlld19wcml2X2RlbChF
d2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYpCiAgICAgICAgIGVjb3JlX2FuaW1hdG9yX2RlbChw
cml2LT5hbmltYXRlZFpvb20uYW5pbWF0b3IpOwogCiAgICAgZXdrX2hpc3RvcnlfZnJlZShwcml2
LT5oaXN0b3J5KTsKKyAgICBld2tfaGlzdG9yeV9kZWxlZ2F0ZV9mcmVlKHByaXYtPmhpc3RvcnlE
ZWxlZ2F0ZSk7CiAKICAgICBkZWxldGUgcHJpdjsKIH0KQEAgLTM5MTMsNiArMzkxNiwyMSBAQCBF
d2tfUGFnZV9WaXNpYmlsaXR5X1N0YXRlIGV3a192aWV3X3Zpc2liaWxpdHlfc3RhdGVfZ2V0KGNv
bnN0IEV2YXNfT2JqZWN0KiBld2tWaQogI2VuZGlmCiB9CiAKK0V3a19IaXN0b3J5X0RlbGVnYXRl
KiBld2tfdmlld19oaXN0b3J5X2RlbGVnYXRlX2dldChjb25zdCBFdmFzX09iamVjdCAqZXdrVmll
dykKK3sKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwg
MCk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgMCk7
CisgICAgcmV0dXJuIHByaXYtPmhpc3RvcnlEZWxlZ2F0ZTsKK30KKwordm9pZCBld2tfdmlld19o
aXN0b3J5X2RlbGVnYXRlX3NldChjb25zdCBFdmFzX09iamVjdCAqZXdrVmlldywgRXdrX0hpc3Rv
cnlfRGVsZWdhdGUgKmRlbGVnYXRlKQoreworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrVmlldywgc21hcnREYXRhKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21h
cnREYXRhLCBwcml2KTsKKyAgICBld2tfaGlzdG9yeV9kZWxlZ2F0ZV9mcmVlKHByaXYtPmhpc3Rv
cnlEZWxlZ2F0ZSk7CisgICAgcHJpdi0+aGlzdG9yeURlbGVnYXRlID0gZGVsZWdhdGU7Cit9CisK
IFNvdXBTZXNzaW9uKiBld2tfdmlld19zb3VwX3Nlc3Npb25fZ2V0KGNvbnN0IEV2YXNfT2JqZWN0
KiBld2tWaWV3KQogewogICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21h
cnREYXRhLCAwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5o
IGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3LmgKaW5kZXggMWM1MzMzNS4uOGRlNzdj
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3LmgKKysrIGIvU291
cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3LmgKQEAgLTEsNiArMSw3IEBACiAvKgogICAgIENv
cHlyaWdodCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCiAgICAgQ29w
eXJpZ2h0IChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcworICAgIENvcHlyaWdodCAo
QykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbgogCiAgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICAgIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC05MCw2ICs5
MSw3IEBACiAKICNpbmNsdWRlICJld2tfZnJhbWUuaCIKICNpbmNsdWRlICJld2tfaGlzdG9yeS5o
IgorI2luY2x1ZGUgImV3a19oaXN0b3J5X2RlbGVnYXRlLmgiCiAjaW5jbHVkZSAiZXdrX2pzLmgi
CiAjaW5jbHVkZSAiZXdrX3dpbmRvd19mZWF0dXJlcy5oIgogCkBAIC0yMzM4LDYgKzIzNDAsMzAg
QEAgRUFQSSBFaW5hX0Jvb2wgZXdrX3ZpZXdfbWl4ZWRfY29udGVudF9kaXNwbGF5ZWRfZ2V0KGNv
bnN0IEV2YXNfT2JqZWN0ICpvKTsKIEVBUEkgRWluYV9Cb29sIGV3a192aWV3X21peGVkX2NvbnRl
bnRfcnVuX2dldChjb25zdCBFdmFzX09iamVjdCAqbyk7CiAKIC8qKgorICogUmV0dXJucyB0aGUg
RXdrX0hpc3RvcnlfRGVsZWdhdGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdmlldy4KKyAqCisgKiBA
cGFyYW0gbyBUaGUgdmlldyB0byBxdWVyeS4KKyAqCisgKiBAcmV0dXJuIEBjIEV3a19IaXN0b3J5
X0RlbGVnYXRlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHZpZXcgb3IgQGMgMCBpZiB0aGVyZSBpcyBu
byBhc3NvY2lhdGVkIEV3a19IaXN0b3J5X0RlbGVnYXRlCisgKgorICogQHNhIGV3a192aWV3X2hp
c3RvcnlfZGVsZWdhdGVfc2V0CisgKi8KK0VBUEkgRXdrX0hpc3RvcnlfRGVsZWdhdGUqIGV3a192
aWV3X2hpc3RvcnlfZGVsZWdhdGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpvKTsKKworLyoqCisg
KiBBc3NvY2lhdGVzIGEgbmV3IEV3a19IaXN0b3J5X0RlbGVnYXRlIHdpdGggdGhpcyB2aWV3Lgor
ICoKKyAqIEBub3RlIFRoZSB2aWV3IHRha2VzIG93bmVyc2hpcCBvdmVyIHRoZSBkZWxlZ2F0ZS4g
SWYgdGhlIGFzc29jaWF0ZWQgZGVsZWdhdGUgc2hvdWxkIGJlIGRlbGV0ZWQKKyAqICAgICAgIGlt
bWlkaWF0ZWx5IGV3a192aWV3X2hpc3RvcnlfZGVsZWdhdGVfc2V0KGNvbnN0IEV2YXNfT2JqZWN0
ICpvLCAwKSBzaGFsbCBiZSBpbnZva2VkCisgKgorICogQHBhcmFtIG8gVGhlIHZpZXcgdG8gY2hh
bmdlLgorICogQHBhcmFtIHNlc3Npb24gVGhlIG5ldyBFd2tfSGlzdG9yeV9EZWxlZ2F0ZS4KKyAq
CisgKiBAc2EgZXdrX3ZpZXdfaGlzdG9yeV9kZWxlZ2F0ZV9nZXQKKyAqLworRUFQSSB2b2lkIGV3
a192aWV3X2hpc3RvcnlfZGVsZWdhdGVfc2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpvLCBFd2tfSGlz
dG9yeV9EZWxlZ2F0ZSAqZGVsZWdhdGUpOworCisvKioKICAqIFJldHVybnMgdGhlIFNvdXBTZXNz
aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHZpZXcuCiAgKgogICogQnkgZGVmYXVsdCwgYWxsIHZp
ZXdzIHNoYXJlIHRoZSBzYW1lLCBkZWZhdWx0IHNvdXAgc2Vzc2lvbiBhbHNvIGF2YWlsYWJsZQpk
aWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDA1OWRl
Y2EuLjA1NzZjYWEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwyNSBAQAorMjAxMi0wMy0yOSAgTWlraGFpbCBQb3pkbnlha292ICA8
bWlraGFpbC5wb3pkbnlha292QGludGVsLmNvbT4KKworICAgICAgICBbRUZMXSBHbG9iYWwgaGlz
dG9yeSBkZWxlZ2F0ZSBzdXBwb3J0IGZvciBFRkwgcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI1NzkKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2VmbC9DTWFrZUxpc3Rz
LnR4dDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9lZmwvRHVtcFJlbmRlclRyZWUuY3BwOgor
ICAgICAgICAoaXNHbG9iYWxIaXN0b3J5VGVzdCk6CisgICAgICAgIChydW5UZXN0KToKKyAgICAg
ICAgKiBEdW1wUmVuZGVyVHJlZS9lZmwvSGlzdG9yeURlbGVnYXRlLmNwcDogQWRkZWQuCisgICAg
ICAgIChkaWROYXZpZ2F0ZVdpdGhOYXZpZ2F0aW9uRGF0YSk6CisgICAgICAgIChkaWRQZXJmb3Jt
Q2xpZW50UmVkaXJlY3RGcm9tVVJMKToKKyAgICAgICAgKGRpZFBlcmZvcm1TZXJ2ZXJSZWRpcmVj
dEZyb21VUkwpOgorICAgICAgICAodXBkYXRlSGlzdG9yeVRpdGxlKToKKyAgICAgICAgKHBvcHVs
YXRlVmlzaXRlZExpbmtzRm9yV2ViVmlldyk6CisgICAgICAgIChoaXN0b3J5X2RlbGVnYXRlX25l
dyk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvZWZsL0hpc3RvcnlEZWxlZ2F0ZS5oOiBBZGRl
ZC4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9lZmwvTGF5b3V0VGVzdENvbnRyb2xsZXJFZmwu
Y3BwOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJlbW92ZUFsbFZpc2l0ZWRMaW5r
cyk6CisKIDIwMTItMDMtMjkgIFZpbmVldCBDaGF1ZGhhcnkgIDxyZ2Y3NDhAbW90b3JvbGEuY29t
PgogCiAgICAgICAgIFJlbW92ZSBjdXN0b20gYmluZGluZ3MgZm9ybSBJbnRlcm5hbHMuaWRsIG9m
IGF0dHJpYnV0ZSB0eXBlIEFycmF5LgpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUv
ZWZsL0NNYWtlTGlzdHMudHh0IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0NNYWtlTGlzdHMu
dHh0CmluZGV4IGNjOGRmYWYuLjM5MjFhOGEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL2VmbC9DTWFrZUxpc3RzLnR4dAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvQ01h
a2VMaXN0cy50eHQKQEAgLTEyLDYgKzEyLDcgQEAgU0VUKER1bXBSZW5kZXJUcmVlX1NPVVJDRVMK
ICAgICAke1RPT0xTX0RJUn0vRHVtcFJlbmRlclRyZWUvZWZsL0V2ZW50U2VuZGVyLmNwcAogICAg
ICR7VE9PTFNfRElSfS9EdW1wUmVuZGVyVHJlZS9lZmwvRm9udE1hbmFnZW1lbnQuY3BwCiAgICAg
JHtUT09MU19ESVJ9L0R1bXBSZW5kZXJUcmVlL2VmbC9HQ0NvbnRyb2xsZXJFZmwuY3BwCisgICAg
JHtUT09MU19ESVJ9L0R1bXBSZW5kZXJUcmVlL2VmbC9IaXN0b3J5RGVsZWdhdGUuY3BwCiAgICAg
JHtUT09MU19ESVJ9L0R1bXBSZW5kZXJUcmVlL2VmbC9KU1N0cmluZ1V0aWxzLmNwcAogICAgICR7
VE9PTFNfRElSfS9EdW1wUmVuZGVyVHJlZS9lZmwvTGF5b3V0VGVzdENvbnRyb2xsZXJFZmwuY3Bw
CiAgICAgJHtUT09MU19ESVJ9L0R1bXBSZW5kZXJUcmVlL2VmbC9QaXhlbER1bXBTdXBwb3J0RWZs
LmNwcApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0R1bXBSZW5kZXJUcmVl
LmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9EdW1wUmVuZGVyVHJlZS5jcHAKaW5kZXgg
YmI4ZjdkMi4uOWU2NjdmNCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0R1
bXBSZW5kZXJUcmVlLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvRHVtcFJlbmRl
clRyZWUuY3BwCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiRHVtcFJlbmRlclRyZWVWaWV3
LmgiCiAjaW5jbHVkZSAiRXZlbnRTZW5kZXIuaCIKICNpbmNsdWRlICJGb250TWFuYWdlbWVudC5o
IgorI2luY2x1ZGUgIkhpc3RvcnlEZWxlZ2F0ZS5oIgogI2luY2x1ZGUgIkxheW91dFRlc3RDb250
cm9sbGVyLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJQaXhlbER1
bXBTdXBwb3J0LmgiCkBAIC0yMTgsNiArMjE5LDExIEBAIHN0YXRpYyB2b2lkIGNyZWF0ZUxheW91
dFRlc3RDb250cm9sbGVyKGNvbnN0IFN0cmluZyYgdGVzdFVSTCwgY29uc3QgU3RyaW5nJiBleHBl
CiAgICAgfQogfQogCitzdGF0aWMgYm9vbCBpc0dsb2JhbEhpc3RvcnlUZXN0KGNvbnN0IFN0cmlu
ZyYgY1Rlc3RQYXRoT3JVUkwpCit7CisgICAgcmV0dXJuIGNUZXN0UGF0aE9yVVJMLmNvbnRhaW5z
KCJnbG9iYWxoaXN0b3J5LyIpOworfQorCiBzdGF0aWMgdm9pZCBydW5UZXN0KGNvbnN0IGNoYXIq
IGNUZXN0UGF0aE9yVVJMKQogewogICAgIGNvbnN0IFN0cmluZyB0ZXN0UGF0aE9yVVJMID0gU3Ry
aW5nOjpmcm9tVVRGOChjVGVzdFBhdGhPclVSTCk7CkBAIC0yNDIsNiArMjQ4LDkgQEAgc3RhdGlj
IHZvaWQgcnVuVGVzdChjb25zdCBjaGFyKiBjVGVzdFBhdGhPclVSTCkKICAgICBjb25zdCBFd2tf
SGlzdG9yeSogaGlzdG9yeSA9IGV3a192aWV3X2hpc3RvcnlfZ2V0KGJyb3dzZXItPm1haW5WaWV3
KCkpOwogICAgIHByZXZUZXN0QkZJdGVtID0gZXdrX2hpc3RvcnlfaGlzdG9yeV9pdGVtX2N1cnJl
bnRfZ2V0KGhpc3RvcnkpOwogCisgICAgaWYgKGlzR2xvYmFsSGlzdG9yeVRlc3QodGVzdFVSTCkp
CisgICAgICAgIGV3a192aWV3X2hpc3RvcnlfZGVsZWdhdGVfc2V0KGJyb3dzZXItPm1haW5WaWV3
KCksIGhpc3RvcnlfZGVsZWdhdGVfbmV3KGdMYXlvdXRUZXN0Q29udHJvbGxlci5nZXQoKSkpOwor
CiAgICAgZXZhc19vYmplY3RfZm9jdXNfc2V0KGJyb3dzZXItPm1haW5WaWV3KCksIEVJTkFfVFJV
RSk7CiAgICAgZXdrX3ZpZXdfdXJpX3NldChicm93c2VyLT5tYWluVmlldygpLCB0ZXN0VVJMLnV0
ZjgoKS5kYXRhKCkpOwogCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvSGlz
dG9yeURlbGVnYXRlLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9IaXN0b3J5RGVsZWdh
dGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0ZWUxZDMKLS0tIC9k
ZXYvbnVsbAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvSGlzdG9yeURlbGVnYXRlLmNw
cApAQCAtMCwwICsxLDEwMSBAQAorLyoKKyogQ29weXJpZ2h0IChjKSAyMDEyLCBJbnRlbCBDb3Jw
b3JhdGlvbgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQgbm90aWNlLCB0aGlzCisqIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorKiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyog
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2Yg
aXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyovCisKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkhp
c3RvcnlEZWxlZ2F0ZS5oIgorCisjaW5jbHVkZSAiTGF5b3V0VGVzdENvbnRyb2xsZXIuaCIKKwor
I2luY2x1ZGUgPGVpbmFfc2FmZXR5X2NoZWNrcy5oPgorCitzdGF0aWMgdm9pZCBkaWROYXZpZ2F0
ZVdpdGhOYXZpZ2F0aW9uRGF0YShFd2tfSGlzdG9yeV9EZWxlZ2F0ZSogLypoZCovLCBjb25zdCBF
dmFzX09iamVjdCogLyp3ZWJWaWV3Ki8sIEV3a19OYXZpZ2F0aW9uX0RhdGEqIG5hdmlnYXRpb25E
YXRhLCBjb25zdCBFdmFzX09iamVjdCogLyp3ZWJGcmFtZSovKQoreworICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOKG5hdmlnYXRpb25EYXRhKTsKKyAgICBjb25zdCBib29sIHdhc0ZhaWx1
cmUgPSBuYXZpZ2F0aW9uRGF0YS0+aGFzU3Vic3RpdHV0ZURhdGEgfHwgIG5hdmlnYXRpb25EYXRh
LT5yZXNwb25zZS5zdGF0dXNfY29kZSA+PSA0MDA7CisgICAgY29uc3QgYm9vbCB3YXNSZWRpcmVj
dGVkID0gbmF2aWdhdGlvbkRhdGEtPmNsaWVudFJlZGlyZWN0U291cmNlICYmICoobmF2aWdhdGlv
bkRhdGEtPmNsaWVudFJlZGlyZWN0U291cmNlKTsKKworICAgIHByaW50ZigiV2ViVmlldyBuYXZp
Z2F0ZWQgdG8gdXJsIFwiJXNcIiB3aXRoIHRpdGxlIFwiJXNcIiB3aXRoIEhUVFAgZXF1aXZhbGVu
dCBtZXRob2QgXCIlc1wiLiAgVGhlIG5hdmlnYXRpb24gd2FzICVzIGFuZCB3YXMgJXMlcy5cbiIs
CisgICAgICAgIG5hdmlnYXRpb25EYXRhLT51cmwsIC8vIEZJWE1FOiBoYW5sZGxlIHVybCB0byBi
ZSBzdWl0YWJsZSBmb3IgdGVzdAorICAgICAgICBuYXZpZ2F0aW9uRGF0YS0+dGl0bGUsCisgICAg
ICAgIG5hdmlnYXRpb25EYXRhLT5yZXF1ZXN0Lmh0dHBfbWV0aG9kLAorICAgICAgICB3YXNGYWls
dXJlPyAiYSBmYWlsdXJlIiA6ICJzdWNjZXNzZnVsIiwKKyAgICAgICAgKHdhc1JlZGlyZWN0ZWQg
PyAiYSBjbGllbnQgcmVkaXJlY3QgZnJvbSAiIDogIm5vdCBhIGNsaWVudCByZWRpcmVjdCIpLAor
ICAgICAgICAod2FzUmVkaXJlY3RlZCA/IG5hdmlnYXRpb25EYXRhLT5jbGllbnRSZWRpcmVjdFNv
dXJjZSA6ICIiKSk7Cit9CisKK3N0YXRpYyB2b2lkIGRpZFBlcmZvcm1DbGllbnRSZWRpcmVjdEZy
b21VUkwoRXdrX0hpc3RvcnlfRGVsZWdhdGUqIGhkLCBjb25zdCBFdmFzX09iamVjdCogLyp3ZWJW
aWV3Ki8sIGNvbnN0IGNoYXIqIHNvdXJjZVVSTCwgY29uc3QgY2hhciogZGVzdGluYXRpb25VUkws
IGNvbnN0IEV2YXNfT2JqZWN0KiAvKndlYkZyYW1lKi8pCit7CisgICAgTGF5b3V0VGVzdENvbnRy
b2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KGhk
LT5kYXRhKTsKKworICAgIGlmICghY29udHJvbGxlci0+ZHVtcEhpc3RvcnlEZWxlZ2F0ZUNhbGxi
YWNrcygpKQorICAgICAgICByZXR1cm47CisKKyAgICBwcmludGYoIldlYlZpZXcgcGVyZm9ybWVk
IGEgY2xpZW50IHJlZGlyZWN0IGZyb20gXCIlU1wiIHRvIFwiJVNcIi5cbiIsIHNvdXJjZVVSTCwg
ZGVzdGluYXRpb25VUkwpOworfQorCitzdGF0aWMgdm9pZCBkaWRQZXJmb3JtU2VydmVyUmVkaXJl
Y3RGcm9tVVJMKEV3a19IaXN0b3J5X0RlbGVnYXRlKiBoZCwgY29uc3QgRXZhc19PYmplY3QqIC8q
d2ViVmlldyovLCBjb25zdCBjaGFyKiBzb3VyY2VVUkwsIGNvbnN0IGNoYXIqIGRlc3RpbmF0aW9u
VVJMLCBjb25zdCBFdmFzX09iamVjdCogLyp3ZWJGcmFtZSovKQoreworICAgIExheW91dFRlc3RD
b250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIq
PihoZC0+ZGF0YSk7CisKKyAgICBpZiAoIWNvbnRyb2xsZXItPmR1bXBIaXN0b3J5RGVsZWdhdGVD
YWxsYmFja3MoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcHJpbnRmKCJXZWJWaWV3IHBlcmZv
cm1lZCBhIHNlcnZlciByZWRpcmVjdCBmcm9tIFwiJVNcIiB0byBcIiVTXCIuXG4iLCBzb3VyY2VV
UkwsIGRlc3RpbmF0aW9uVVJMKTsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlSGlzdG9yeVRpdGxl
KEV3a19IaXN0b3J5X0RlbGVnYXRlKiAvKmhkKi8sIGNvbnN0IEV2YXNfT2JqZWN0KiAvKndlYlZp
ZXcqLywgY29uc3QgY2hhciogdGl0bGUsIGNvbnN0IGNoYXIqIHVybCkKK3sKKyAgICBwcmludGYo
IldlYlZpZXcgdXBkYXRlZCB0aGUgdGl0bGUgZm9yIGhpc3RvcnkgVVJMIFwiJXNcIiB0byBcIiVz
XCIuXG4iLCB1cmwsIHRpdGxlKTsKK30KKworc3RhdGljIHZvaWQgcG9wdWxhdGVWaXNpdGVkTGlu
a3NGb3JXZWJWaWV3KEV3a19IaXN0b3J5X0RlbGVnYXRlKiBoZCwgY29uc3QgRXZhc19PYmplY3Qq
IHdlYlZpZXcpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4od2ViVmlldyk7CisK
KyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91
dFRlc3RDb250cm9sbGVyKj4oaGQtPmRhdGEpOworCisgICAgaWYgKGNvbnRyb2xsZXItPmR1bXBW
aXNpdGVkTGlua3NDYWxsYmFjaygpKQorICAgICAgICBwcmludGYoIkFza2VkIHRvIHBvcHVsYXRl
IHZpc2l0ZWQgbGlua3MgZm9yIFdlYlZpZXcgXCIlc1wiXG4iLCBld2tfdmlld191cmlfZ2V0KHdl
YlZpZXcpKTsKK30KKworRXdrX0hpc3RvcnlfRGVsZWdhdGUqIGhpc3RvcnlfZGVsZWdhdGVfbmV3
KExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyKQoreworICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOX1ZBTChjb250cm9sbGVyLCAwKTsKKworICAgIEV3a19IaXN0b3J5X0RlbGVn
YXRlKiByZXMgPSBld2tfaGlzdG9yeV9kZWxlZ2F0ZV9uZXcoMCk7IC8vIGRvIG5vdCBuZWVkIGRh
dGEgZGVsZXRlcgorCisgICAgcmVzLT5hcGktPmRpZE5hdmlnYXRlV2l0aE5hdmlnYXRpb25EYXRh
ID0gZGlkTmF2aWdhdGVXaXRoTmF2aWdhdGlvbkRhdGE7CisgICAgcmVzLT5hcGktPmRpZFBlcmZv
cm1DbGllbnRSZWRpcmVjdEZyb21VUkwgPSBkaWRQZXJmb3JtQ2xpZW50UmVkaXJlY3RGcm9tVVJM
OworICAgIHJlcy0+YXBpLT5kaWRQZXJmb3JtU2VydmVyUmVkaXJlY3RGcm9tVVJMID0gZGlkUGVy
Zm9ybVNlcnZlclJlZGlyZWN0RnJvbVVSTDsKKyAgICByZXMtPmFwaS0+dXBkYXRlSGlzdG9yeVRp
dGxlID0gdXBkYXRlSGlzdG9yeVRpdGxlOworICAgIHJlcy0+YXBpLT5wb3B1bGF0ZVZpc2l0ZWRM
aW5rc0ZvcldlYlZpZXcgPSBwb3B1bGF0ZVZpc2l0ZWRMaW5rc0ZvcldlYlZpZXc7CisgICAgcmVz
LT5kYXRhID0gY29udHJvbGxlcjsKKworICAgIHJldHVybiByZXM7Cit9CmRpZmYgLS1naXQgYS9U
b29scy9EdW1wUmVuZGVyVHJlZS9lZmwvSGlzdG9yeURlbGVnYXRlLmggYi9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9lZmwvSGlzdG9yeURlbGVnYXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uYjFhOWQxYQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L2VmbC9IaXN0b3J5RGVsZWdhdGUuaApAQCAtMCwwICsxLDM5IEBACisvKgorKiBDb3B5cmlnaHQg
KGMpIDIwMTIsIEludGVsIENvcnBvcmF0aW9uCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlIG1ldDoKKyoKKyogKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyogbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZSBkb2N1bWVudGF0aW9uCisqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorKiAqIE5laXRoZXIgdGhlIG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRp
b24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0CisqIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UyAiQVMgSVMiCisqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFCisqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFCisqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworCisjaWZuZGVmIEhpc3Rv
cnlEZWxlZ2F0ZV9oCisjZGVmaW5lIEhpc3RvcnlEZWxlZ2F0ZV9oCisKKyNpbmNsdWRlIDxFV2Vi
S2l0Lmg+CisKK2NsYXNzIExheW91dFRlc3RDb250cm9sbGVyOworCitFd2tfSGlzdG9yeV9EZWxl
Z2F0ZSAqaGlzdG9yeV9kZWxlZ2F0ZV9uZXcoTGF5b3V0VGVzdENvbnRyb2xsZXIqKTsKKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvTGF5b3V0VGVzdENvbnRy
b2xsZXJFZmwuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0xheW91dFRlc3RDb250cm9s
bGVyRWZsLmNwcAppbmRleCBkOTIyY2NiLi4zY2YyZTliIDEwMDY0NAotLS0gYS9Ub29scy9EdW1w
UmVuZGVyVHJlZS9lZmwvTGF5b3V0VGVzdENvbnRyb2xsZXJFZmwuY3BwCisrKyBiL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL2VmbC9MYXlvdXRUZXN0Q29udHJvbGxlckVmbC5jcHAKQEAgLTY5NCw3ICs2
OTQsMTEgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xh
dGVkV29ybGQodW5zaWduZWQsIEpTT2JqZWN0UmVmLAogCiB2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpyZW1vdmVBbGxWaXNpdGVkTGlua3MoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Cisg
ICAgRXdrX0hpc3RvcnkqIGhpc3RvcnkgPSBld2tfdmlld19oaXN0b3J5X2dldChicm93c2VyLT5t
YWluVmlldygpKTsKKyAgICBpZiAoIWhpc3RvcnkpCisgICAgICAgIHJldHVybjsKKworICAgIGV3
a19oaXN0b3J5X2NsZWFyKGhpc3RvcnkpOwogfQogCiBib29sIExheW91dFRlc3RDb250cm9sbGVy
OjpjYWxsU2hvdWxkQ2xvc2VPbldlYlZpZXcoKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134779</attachid>
            <date>2012-03-30 04:51:37 -0700</date>
            <delta_ts>2012-03-30 04:55:27 -0700</delta_ts>
            <desc>global history delegate v2</desc>
            <filename>global_history_delegate.patch</filename>
            <type>text/plain</type>
            <size>21091</size>
            <attacher name="Mikhail Pozdnyakov">mikhail.pozdnyakov</attacher>
            
              <data encoding="base64">Y29tbWl0IDllYjVhZTMxYWJjYWQzNDMyM2M2OGY2MTk1MmIzZmY4YWM2YjI4ZmMKQXV0aG9yOiBN
aWtoYWlsIFBvemRueWFrb3YgPHBvemRueWFrb3YubWlraGFpbEBnbWFpbC5jb20+CkRhdGU6ICAg
RnJpIE1hciAzMCAxNDo0NzoxMSAyMDEyICswMzAwCgogICAgZ2xvYmFsIGhpc3RvcnkgZGVsZWdh
dGUuCgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCmluZGV4IDg1ODhiNWMuLjYzZTg3NmIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0No
YW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMSBAQAorMjAx
Mi0wMy0zMCAgTWlraGFpbCBQb3pkbnlha292ICA8bWlraGFpbC5wb3pkbnlha292QGludGVsLmNv
bT4KKworICAgICAgICBbRUZMXSBHbG9iYWwgaGlzdG9yeSBkZWxlZ2F0ZSBzdXBwb3J0IGZvciBF
RkwgcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
ODI1NzkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IHBsYXRmb3JtL2VmbC9Ta2lwcGVkOgorCiAyMDEyLTAzLTI5ICDDgWTDoW0gS2FsbGFpICA8a2Fk
YW1AaW5mLnUtc3plZ2VkLmh1PgogCiAgICAgICAgIFtRdF0gVW5yZXZpZXdlZCBnYXJkZW5pbmcu
IFNraXAgc29tZSBmYWlsaW5nIHRlc3RzLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vZWZsL1NraXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9lZmwvU2tpcHBlZAppbmRleCBi
YWE5NmQxLi4xYjQwYjk2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9lZmwvU2tp
cHBlZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9lZmwvU2tpcHBlZApAQCAtODI4LDYgKzgy
OCw4IEBAIGZhc3QvZm9ybXMvdmFsaWRhdGlvbi1tZXNzYWdlLW9uLXRleHRhcmVhLmh0bWwKICMg
VGhlc2UgdGVzdHMgbmVlZHMgZW5oYW5jZWQgZnJhbWVsb2FkZXIgZGVsZWdhdGUgbG9nZ2luZyBp
biBEUlQKIGZhc3QvbG9hZGVyL3JlY3Vyc2l2ZS1iZWZvcmUtdW5sb2FkLWNyYXNoLmh0bWwKIGZh
c3QvbG9hZGVyL251bGwtcmVxdWVzdC1hZnRlci13aWxsU2VuZFJlcXVlc3QuaHRtbAoraHR0cC90
ZXN0cy9nbG9iYWxoaXN0b3J5L2hpc3RvcnktZGVsZWdhdGUtYmFzaWMtcmVmcmVzaC1yZWRpcmVj
dC5odG1sCitodHRwL3Rlc3RzL2dsb2JhbGhpc3RvcnkvaGlzdG9yeS1kZWxlZ2F0ZS1iYXNpYy0z
MDItcmVkaXJlY3QuaHRtbAogCiAjIE5lZWQgdG8gYWRkIGZ1bmN0aW9uYWxpdHkgdG8gRHVtcFJl
bmRlclRyZWUgdG8gaGFuZGxlIGVycm9yIHBhZ2VzCiBmYXN0L2hpc3RvcnkvYmFjay1mb3J3YXJk
LXJlc2V0LWFmdGVyLWVycm9yLWhhbmRsaW5nLmh0bWwKQEAgLTEwMzcsOSArMTAzOSw2IEBAIGZh
c3QvZG9tL3RpdGxlLWRpcmVjdGlvbmFsaXR5Lmh0bWwKIGZhc3QvZG9tL1dpbmRvdy9zbG93LXVu
bG9hZC1oYW5kbGVyLmh0bWwKIGZhc3QvZG9tL1dpbmRvdy9zbG93LXVubG9hZC1oYW5kbGVyLW9u
bHktZnJhbWUtaXMtc3RvcHBlZC5odG1sCiAKLSMgVGhlIEVGTCBwb3J0IGhhcyBubyBnbG9iYWwg
aGlzdG9yeSBkZWxlZ2F0ZQotaHR0cC90ZXN0cy9nbG9iYWxoaXN0b3J5Ci0KICMgUGFzdGVCb2Fy
ZDo6cGxhaW5UZXh0KCkgZG9lcyBub3Qgc3VwcG9ydCBmaWxlIG5hbWVzLgogZWRpdGluZy9wYXN0
ZWJvYXJkL2RyYWctZmlsZXMtdG8tZWRpdGFibGUtZWxlbWVudC5odG1sCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXgg
YjczMWJkOS4uZDlmMjUyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAxMi0wMy0zMCAg
TWlraGFpbCBQb3pkbnlha292ICA8bWlraGFpbC5wb3pkbnlha292QGludGVsLmNvbT4KKworICAg
ICAgICBbRUZMXSBHbG9iYWwgaGlzdG9yeSBkZWxlZ2F0ZSBzdXBwb3J0IGZvciBFRkwgcG9ydAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI1NzkKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFBsYXRmb3Jt
RWZsLmNtYWtlOgorCiAyMDEyLTAzLTIyICBSYXBoYWVsIEt1Ym8gZGEgQ29zdGEgIDxyYWt1Y29A
RnJlZUJTRC5vcmc+CiAKICAgICAgICAgW0NNYWtlXSBVbnJldmlld2VkIGJ1aWxkIGZpeCBhZnRl
ciByMTExNzc4LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybUVmbC5jbWFrZSBi
L1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXggMTAwMTBjOS4uMTc3ZmJhZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtRWZsLmNtYWtlCkBAIC04OSw2ICs4OSw3IEBAIExJU1QoQVBQRU5EIFdl
YktpdF9TT1VSQ0VTCiAgICAgZWZsL2V3ay9ld2tfY29va2llcy5jcHAKICAgICBlZmwvZXdrL2V3
a19mcmFtZS5jcHAKICAgICBlZmwvZXdrL2V3a19oaXN0b3J5LmNwcAorICAgIGVmbC9ld2svZXdr
X2hpc3RvcnlfZGVsZWdhdGUuY3BwCiAgICAgZWZsL2V3ay9ld2tfanMuY3BwCiAgICAgZWZsL2V3
ay9ld2tfbWFpbi5jcHAKICAgICBlZmwvZXdrL2V3a19uZXR3b3JrLmNwcApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9n
CmluZGV4IGExNTMzYmMuLmQxMTM3OGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNCBA
QAorMjAxMi0wMy0zMCAgTWlraGFpbCBQb3pkbnlha292ICA8bWlraGFpbC5wb3pkbnlha292QGlu
dGVsLmNvbT4KKworICAgICAgICBbRUZMXSBHbG9iYWwgaGlzdG9yeSBkZWxlZ2F0ZSBzdXBwb3J0
IGZvciBFRkwgcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9ODI1NzkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBBZGRlZCBFd2tfSGlzdG9yeV9EZWxlZ2F0ZSBpbnRlcmZhY2UgYW5kIEV3a19OYXZpZ2F0
aW9uX0RhdGEgc3RydWN0dXJlLiAKKyAgICAgICAgUHV0IEV3a19IaXN0b3J5X0RlbGVnYXRlIHVz
YWdlIHRvIEZyYW1lTG9hZGVyQ2xpZW50RWZsIGFuZCBDaHJvbWVDbGllbnRFZmwgY2xhc3Nlcy4K
KworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEVmbC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDaHJvbWVDbGllbnRFZmw6OnBvcHVsYXRlVmlzaXRlZExpbmtzKToKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEVmbC5o
OgorICAgICAgICAoQ2hyb21lQ2xpZW50RWZsKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9G
cmFtZUxvYWRlckNsaWVudEVmbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNs
aWVudEVmbDo6ZGlzcGF0Y2hXaWxsU2VuZFJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVMb2FkZXJDbGllbnRFZmw6OmFzc2lnbklkZW50aWZpZXJUb0luaXRpYWxSZXF1ZXN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50RWZsOjpkaXNwYXRjaERlY2lkZVBvbGlj
eUZvck5hdmlnYXRpb25BY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGll
bnRFZmw6OnVwZGF0ZUdsb2JhbEhpc3RvcnlSZWRpcmVjdExpbmtzKToKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lTG9hZGVyQ2xpZW50RWZsOjpzZXRUaXRsZSk6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZUxvYWRlckNsaWVudEVmbDo6dXBkYXRlR2xvYmFsSGlzdG9yeSk6CisgICAgICAgICogZXdr
L0VXZWJLaXQuaDoKKyAgICAgICAgKiBld2svZXdrX2ZyYW1lLmg6CisgICAgICAgICogZXdrL2V3
a192aWV3LmNwcDoKKyAgICAgICAgKF9Fd2tfVmlld19Qcml2YXRlX0RhdGEpOgorICAgICAgICAo
X2V3a192aWV3X3ByaXZfZGVsKToKKyAgICAgICAgKGV3a192aWV3X2hpc3RvcnlfZGVsZWdhdGVf
Z2V0KToKKyAgICAgICAgKGV3a192aWV3X2hpc3RvcnlfZGVsZWdhdGVfc2V0KToKKyAgICAgICAg
KiBld2svZXdrX3ZpZXcuaDoKKwogMjAxMi0wMy0yOCAgTmF0ZSBDaGFwaW4gIDxqYXBoZXRAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFJlbW92ZSBkaXNwYXRjaERpZExvYWRNYWluUmVzb3VyY2Ug
Y2FsbGJhY2ssIHNpbmNlIG5vCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3Jl
U3VwcG9ydC9DaHJvbWVDbGllbnRFZmwuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1
cHBvcnQvQ2hyb21lQ2xpZW50RWZsLmNwcAppbmRleCA2OGFkZjVmLi40NWY0ZGFjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRFZmwuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEVmbC5j
cHAKQEAgLTU0OSw2ICs1NDksMTUgQEAgUGFzc1JlZlB0cjxTZWFyY2hQb3B1cE1lbnU+IENocm9t
ZUNsaWVudEVmbDo6Y3JlYXRlU2VhcmNoUG9wdXBNZW51KFBvcHVwTWVudUNsaWUKICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFNlYXJjaFBvcHVwTWVudUVmbChjbGllbnQpKTsKIH0KIAordm9pZCBD
aHJvbWVDbGllbnRFZmw6OnBvcHVsYXRlVmlzaXRlZExpbmtzKCkKK3sKKyAgICBFd2tfSGlzdG9y
eV9EZWxlZ2F0ZSogaGlzdG9yeURlbGVnYXRlID0gZXdrX3ZpZXdfaGlzdG9yeV9kZWxlZ2F0ZV9n
ZXQobV92aWV3KTsKKyAgICBpZiAoaGlzdG9yeURlbGVnYXRlCisgICAgICAgICYmIGhpc3RvcnlE
ZWxlZ2F0ZS0+YXBpCisgICAgICAgICYmIGhpc3RvcnlEZWxlZ2F0ZS0+YXBpLT5wb3B1bGF0ZV92
aXNpdGVkX2xpbmtzX2Zvcl92aWV3ICkKKyAgICAgICAgKCpoaXN0b3J5RGVsZWdhdGUtPmFwaS0+
cG9wdWxhdGVfdmlzaXRlZF9saW5rc19mb3JfdmlldykoaGlzdG9yeURlbGVnYXRlLCBtX3ZpZXcp
OworfQorCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogdm9pZCBDaHJvbWVDbGll
bnRFZmw6OmF0dGFjaFJvb3RHcmFwaGljc0xheWVyKEZyYW1lKiBmcmFtZSwgR3JhcGhpY3NMYXll
ciogcm9vdExheWVyKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1
cHBvcnQvQ2hyb21lQ2xpZW50RWZsLmggYi9Tb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9y
dC9DaHJvbWVDbGllbnRFZmwuaAppbmRleCA5Y2U5ZDY4Li5iMmJhZDZiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRFZmwuaAorKysgYi9T
b3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRFZmwuaApAQCAtMTY0
LDYgKzE2NCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaGFzT3BlbmVkUG9wdXAoKSBj
b25zdDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8UG9wdXBNZW51PiBjcmVhdGVQb3B1cE1lbnUo
UG9wdXBNZW51Q2xpZW50KikgY29uc3Q7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFNlYXJjaFBv
cHVwTWVudT4gY3JlYXRlU2VhcmNoUG9wdXBNZW51KFBvcHVwTWVudUNsaWVudCopIGNvbnN0Owor
ICAgIHZpcnR1YWwgdm9pZCBwb3B1bGF0ZVZpc2l0ZWRMaW5rcygpOwogCiAgICAgdmlydHVhbCBi
b29sIHNob3VsZFJ1YmJlckJhbmRJbkRpcmVjdGlvbihXZWJDb3JlOjpTY3JvbGxEaXJlY3Rpb24p
IGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIHZvaWQgbnVtV2hlZWxFdmVudEhh
bmRsZXJzQ2hhbmdlZCh1bnNpZ25lZCkgeyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Vm
bC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEVmbC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L2VmbC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEVmbC5jcHAKaW5kZXggNmZhNWNj
MC4uZTI2ZmFlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQv
RnJhbWVMb2FkZXJDbGllbnRFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVT
dXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50RWZsLmNwcApAQCAtNyw2ICs3LDcgQEAKICAqIENvcHly
aWdodCAoQykgMjAwOCBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbgogICogQ29weXJpZ2h0IChD
KSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKICAqIENvcHlyaWdodCAoQykg
MjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRl
bCBDb3Jwb3JhdGlvbgogICoKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgpAQCAtMTYyLDEz
ICsxNjMsMTUgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudEVmbDo6ZGlzcGF0Y2hEaWRDYW5jZWxB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZShEb2N1bWVudExvYWQKIAogdm9pZCBGcmFtZUxvYWRlckNs
aWVudEVmbDo6ZGlzcGF0Y2hXaWxsU2VuZFJlcXVlc3QoRG9jdW1lbnRMb2FkZXIqIGxvYWRlciwg
dW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBSZXNvdXJjZVJlcXVlc3QmIGNvcmVSZXF1ZXN0LCBj
b25zdCBSZXNvdXJjZVJlc3BvbnNlJiBjb3JlUmVzcG9uc2UpCiB7Ci0gICAgQ1N0cmluZyB1cmwg
PSBjb3JlUmVxdWVzdC51cmwoKS5zdHJpbmcoKS51dGY4KCk7CisgICAgY29uc3QgQ1N0cmluZyB1
cmwgPSBjb3JlUmVxdWVzdC51cmwoKS5zdHJpbmcoKS51dGY4KCk7CiAgICAgREJHKCJSZXNvdXJj
ZSB1cmw9JXMiLCB1cmwuZGF0YSgpKTsKKyAgICBjb25zdCBDU3RyaW5nIG1ldGhvZCA9IGNvcmVS
ZXF1ZXN0Lmh0dHBNZXRob2QoKS51dGY4KCk7CiAKLSAgICBFd2tfRnJhbWVfUmVzb3VyY2VfUmVx
dWVzdCByZXF1ZXN0ID0geyAwLCBpZGVudGlmaWVyIH07CisgICAgRXdrX0ZyYW1lX1Jlc291cmNl
X1JlcXVlc3QgcmVxdWVzdCA9IHsgMCwgMCwgaWRlbnRpZmllciB9OwogICAgIEV3a19GcmFtZV9S
ZXNvdXJjZV9SZXF1ZXN0IG9yaWcgPSByZXF1ZXN0OyAvKiBJbml0aWFsaXplIGNvbnN0IGZpZWxk
cy4gKi8KIAogICAgIG9yaWcudXJsID0gcmVxdWVzdC51cmwgPSB1cmwuZGF0YSgpOworICAgIG9y
aWcuaHR0cF9tZXRob2QgPSByZXF1ZXN0Lmh0dHBfbWV0aG9kID0gbWV0aG9kLmRhdGEoKTsKIAog
ICAgIGV3a19mcmFtZV9yZXF1ZXN0X3dpbGxfc2VuZChtX2ZyYW1lLCAmcmVxdWVzdCk7CiAKQEAg
LTIwMSw3ICsyMDQsNyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50RWZsOjphc3NpZ25JZGVudGlm
aWVyVG9Jbml0aWFsUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlkZW50aQogICAgIENTdHJpbmcgdXJs
ID0gY29yZVJlcXVlc3QudXJsKCkuc3RyaW5nKCkudXRmOCgpOwogICAgIERCRygiUmVzb3VyY2Ug
dXJsPSVzIiwgdXJsLmRhdGEoKSk7CiAKLSAgICBFd2tfRnJhbWVfUmVzb3VyY2VfUmVxdWVzdCBy
ZXF1ZXN0ID0geyAwLCBpZGVudGlmaWVyIH07CisgICAgRXdrX0ZyYW1lX1Jlc291cmNlX1JlcXVl
c3QgcmVxdWVzdCA9IHsgMCwgMCwgaWRlbnRpZmllciB9OwogICAgIGV3a19mcmFtZV9yZXF1ZXN0
X2Fzc2lnbl9pZGVudGlmaWVyKG1fZnJhbWUsICZyZXF1ZXN0KTsKIH0KIApAQCAtMjkzLDEwICsy
OTYsMTEgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudEVmbDo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lG
b3JOYXZpZ2F0aW9uQWN0aW9uKEZyYW1lUG9saWN5RnUKIAogICAgIC8vIGlmIG5vdCBhY2NlcHRO
YXZpZ2F0aW9uUmVxdWVzdCAtIGxvb2sgYXQgUXQgLT4gUG9saWN5SWdub3JlOwogICAgIC8vIEZJ
WE1FOiBkbyBwcm9wZXIgY2hlY2sgYW5kIG9ubHkgcmVzZXQgZm9ybXMgd2hlbiBvbiBQb2xpY3lJ
Z25vcmUKLSAgICBjaGFyKiB1cmwgPSBzdHJkdXAocmVzb3VyY2VSZXF1ZXN0LnVybCgpLnN0cmlu
ZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgIEV3a19GcmFtZV9SZXNvdXJjZV9SZXF1ZXN0IHJlcXVl
c3QgPSB7IHVybCwgMCB9OworICAgIGNvbnN0IENTdHJpbmcgdXJsID0gcmVzb3VyY2VSZXF1ZXN0
LnVybCgpLnN0cmluZygpLnV0ZjgoKTsKKyAgICBjb25zdCBDU3RyaW5nIG1ldGhvZCA9IHJlc291
cmNlUmVxdWVzdC5odHRwTWV0aG9kKCkudXRmOCgpOworICAgIEV3a19GcmFtZV9SZXNvdXJjZV9S
ZXF1ZXN0IHJlcXVlc3QgPSB7IHVybC5kYXRhKCksIG1ldGhvZC5kYXRhKCksIDAgfTsKICAgICBi
b29sIHJldCA9IGV3a192aWV3X25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uKG1fdmlldywgJnJl
cXVlc3QpOwotICAgIGZyZWUodXJsKTsKKwogCiAgICAgUG9saWN5QWN0aW9uIHBvbGljeTsKICAg
ICBpZiAoIXJldCkKQEAgLTQ2Niw2ICs0NzAsMjcgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudEVm
bDo6cmVzdG9yZVZpZXdTdGF0ZSgpCiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRFZmw6OnVwZGF0
ZUdsb2JhbEhpc3RvcnlSZWRpcmVjdExpbmtzKCkKIHsKKyAgICBXZWJDb3JlOjpGcmFtZSogZnJh
bWUgPSBFV0tQcml2YXRlOjpjb3JlRnJhbWUobV9mcmFtZSk7CisgICAgaWYgKCFmcmFtZSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqIGxvYWRlciA9IGZy
YW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKTsKKyAgICBpZiAoIWxvYWRlcikKKyAgICAg
ICAgcmV0dXJuOworCisgICAgRXdrX0hpc3RvcnlfRGVsZWdhdGUqIGhpc3RvcnlEZWxlZ2F0ZSA9
IGV3a192aWV3X2hpc3RvcnlfZGVsZWdhdGVfZ2V0KG1fdmlldyk7CisgICAgaWYgKGhpc3RvcnlE
ZWxlZ2F0ZSAmJiBoaXN0b3J5RGVsZWdhdGUtPmFwaSkgeworICAgICAgICBjb25zdCBDU3RyaW5n
IHNvdXJjZVVSTCA9IGxvYWRlci0+Y2xpZW50UmVkaXJlY3RTb3VyY2VGb3JIaXN0b3J5KCkudXRm
OCgpOworICAgICAgICBjb25zdCBDU3RyaW5nIGRlc3RVUkwgPSBsb2FkZXItPmNsaWVudFJlZGly
ZWN0RGVzdGluYXRpb25Gb3JIaXN0b3J5KCkudXRmOCgpOworCisgICAgICAgIGlmICghbG9hZGVy
LT5jbGllbnRSZWRpcmVjdFNvdXJjZUZvckhpc3RvcnkoKS5pc051bGwoKQorICAgICAgICAgICAg
JiYgaGlzdG9yeURlbGVnYXRlLT5hcGktPmRpZF9wZXJmb3JtX2NsaWVudF9yZWRpcmVjdF9mcm9t
X3VybCkKKyAgICAgICAgICAgICgqaGlzdG9yeURlbGVnYXRlLT5hcGktPmRpZF9wZXJmb3JtX2Ns
aWVudF9yZWRpcmVjdF9mcm9tX3VybCkoaGlzdG9yeURlbGVnYXRlLCBtX3ZpZXcsIHNvdXJjZVVS
TC5kYXRhKCksIGRlc3RVUkwuZGF0YSgpLCBtX2ZyYW1lKTsKKworICAgICAgICBpZiAoIWxvYWRl
ci0+c2VydmVyUmVkaXJlY3RTb3VyY2VGb3JIaXN0b3J5KCkuaXNOdWxsKCkKKyAgICAgICAgICAg
ICYmIGhpc3RvcnlEZWxlZ2F0ZS0+YXBpLT5kaWRfcGVyZm9ybV9zZXJ2ZXJfcmVkaXJlY3RfZnJv
bV91cmwpCisgICAgICAgICAgICAoKmhpc3RvcnlEZWxlZ2F0ZS0+YXBpLT5kaWRfcGVyZm9ybV9z
ZXJ2ZXJfcmVkaXJlY3RfZnJvbV91cmwpKGhpc3RvcnlEZWxlZ2F0ZSwgbV92aWV3LCBzb3VyY2VV
UkwuZGF0YSgpLCBkZXN0VVJMLmRhdGEoKSwgbV9mcmFtZSk7CisgICAgfQogfQogCiBib29sIEZy
YW1lTG9hZGVyQ2xpZW50RWZsOjpzaG91bGRHb1RvSGlzdG9yeUl0ZW0oSGlzdG9yeUl0ZW0qIGl0
ZW0pIGNvbnN0CkBAIC03MTIsNyArNzM3LDEyIEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRFZmw6
OnByZXBhcmVGb3JEYXRhU291cmNlUmVwbGFjZW1lbnQoKQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xp
ZW50RWZsOjpzZXRUaXRsZShjb25zdCBTdHJpbmdXaXRoRGlyZWN0aW9uJiB0aXRsZSwgY29uc3Qg
S1VSTCYgdXJsKQogewotICAgIC8vIG5vIG5lZWQgZm9yLCBkaXNwYXRjaERpZFJlY2VpdmVUaXRs
ZSBpcyB0aGUgcmlnaHQgY2FsbGJhY2sKKyAgICBFd2tfSGlzdG9yeV9EZWxlZ2F0ZSogaGlzdG9y
eURlbGVnYXRlID0gZXdrX3ZpZXdfaGlzdG9yeV9kZWxlZ2F0ZV9nZXQobV92aWV3KTsKKworICAg
IGlmIChoaXN0b3J5RGVsZWdhdGUKKyAgICAgICAgJiYgaGlzdG9yeURlbGVnYXRlLT5hcGkKKyAg
ICAgICAgJiYgaGlzdG9yeURlbGVnYXRlLT5hcGktPnVwZGF0ZV9oaXN0b3J5X3RpdGxlKQorICAg
ICAgICAoKmhpc3RvcnlEZWxlZ2F0ZS0+YXBpLT51cGRhdGVfaGlzdG9yeV90aXRsZSkoaGlzdG9y
eURlbGVnYXRlLCBtX3ZpZXcsIHRpdGxlLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHVybC5zdHJp
bmcoKS51dGY4KCkuZGF0YSgpKTsKIH0KIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudEVmbDo6ZGlz
cGF0Y2hEaWRSZWNlaXZlQ29udGVudExlbmd0aChEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxv
bmcgaWRlbnRpZmllciwgaW50IGRhdGFMZW5ndGgpCkBAIC04NzksNyArOTA5LDQzIEBAIHZvaWQg
RnJhbWVMb2FkZXJDbGllbnRFZmw6OnN0YXJ0RG93bmxvYWQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiByZXF1ZXN0LCBjb25zdCBTCiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRFZmw6OnVwZGF0ZUds
b2JhbEhpc3RvcnkoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgV2ViQ29yZTo6RnJh
bWUqIGZyYW1lID0gRVdLUHJpdmF0ZTo6Y29yZUZyYW1lKG1fZnJhbWUpOworICAgIGlmICghZnJh
bWUpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKiBsb2Fk
ZXIgPSBmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCk7CisgICAgaWYgKCFsb2FkZXIp
CisgICAgICAgIHJldHVybjsKKworICAgIEV3a19IaXN0b3J5KiBoaXN0b3J5ID0gZXdrX3ZpZXdf
aGlzdG9yeV9nZXQobV92aWV3KTsKKyAgICBpZiAoIWhpc3RvcnkpCisgICAgICAgIHJldHVybjsK
KworICAgIGNvbnN0IENTdHJpbmcgdXJsRm9ySGlzdG9yeSA9IGxvYWRlci0+dXJsRm9ySGlzdG9y
eSgpLnN0cmluZygpLnV0ZjgoKTsKKyAgICBjb25zdCBDU3RyaW5nIHRpdGxlID0gbG9hZGVyLT50
aXRsZSgpLnN0cmluZygpLnV0ZjgoKTsKKworICAgIEV3a19IaXN0b3J5X0l0ZW0qIGl0ZW0gPSBl
d2tfaGlzdG9yeV9pdGVtX25ldyh1cmxGb3JIaXN0b3J5LmRhdGEoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUuZGF0YSgpKTsKKyAgICBl
d2tfaGlzdG9yeV9oaXN0b3J5X2l0ZW1fYWRkKGhpc3RvcnksIGl0ZW0pOworICAgIGV3a19oaXN0
b3J5X2l0ZW1fZnJlZShpdGVtKTsKKworICAgIEV3a19IaXN0b3J5X0RlbGVnYXRlKiBoaXN0b3J5
RGVsZWdhdGUgPSBld2tfdmlld19oaXN0b3J5X2RlbGVnYXRlX2dldChtX3ZpZXcpOworICAgIGlm
IChoaXN0b3J5RGVsZWdhdGUKKyAgICAgICAgJiYgaGlzdG9yeURlbGVnYXRlLT5hcGkKKyAgICAg
ICAgJiYgaGlzdG9yeURlbGVnYXRlLT5hcGktPmRpZF9uYXZpZ2F0ZV93aXRoX25hdmlnYXRpb25f
ZGF0YSkgeworICAgICAgICBjb25zdCBDU3RyaW5nIGNsaWVudFJlZGlyZWN0U291cmNlID0gbG9h
ZGVyLT5jbGllbnRSZWRpcmVjdFNvdXJjZUZvckhpc3RvcnkoKS51dGY4KCk7CisgICAgICAgIGNv
bnN0IENTdHJpbmcgb3JpZ2luYWxVUkwgPSBsb2FkZXItPm9yaWdpbmFsVVJMKCkuc3RyaW5nKCku
dXRmOCgpOworICAgICAgICBjb25zdCBDU3RyaW5nIGh0dHBNZXRob2QgPSBsb2FkZXItPnJlcXVl
c3QoKS5odHRwTWV0aG9kKCkudXRmOCgpOworICAgICAgICBjb25zdCBDU3RyaW5nIHJlc3BvbnNl
VVJMID0gbG9hZGVyLT5yZXNwb25zZVVSTCgpLnN0cmluZygpLnV0ZjgoKTsKKyAgICAgICAgCisg
ICAgICAgIEV3a19OYXZpZ2F0aW9uX0RhdGEgZGF0YSA9CisgICAgICAgIHt1cmxGb3JIaXN0b3J5
LmRhdGEoKSwgdGl0bGUuZGF0YSgpLAorICAgICAgICAge29yaWdpbmFsVVJMLmRhdGEoKSwgaHR0
cE1ldGhvZC5kYXRhKCksIDB9LAorICAgICAgICAge3Jlc3BvbnNlVVJMLmRhdGEoKSwgbG9hZGVy
LT5yZXNwb25zZSgpLmh0dHBTdGF0dXNDb2RlKCl9LAorICAgICAgICAgbG9hZGVyLT5zdWJzdGl0
dXRlRGF0YSgpLmlzVmFsaWQoKSwgY2xpZW50UmVkaXJlY3RTb3VyY2UuZGF0YSgpfTsKKworICAg
ICAgICAgKCpoaXN0b3J5RGVsZWdhdGUtPmFwaS0+ZGlkX25hdmlnYXRlX3dpdGhfbmF2aWdhdGlv
bl9kYXRhKShoaXN0b3J5RGVsZWdhdGUsIG1fdmlldywgJmRhdGEsIG1fZnJhbWUpOworICAgIH0K
IH0KIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudEVmbDo6c2F2ZVBsYXRmb3JtRGF0YVRvQ2FjaGVk
RnJhbWUoQ2FjaGVkRnJhbWUqKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL0VX
ZWJLaXQuaCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9FV2ViS2l0LmgKaW5kZXggMGZmYjUxYy4u
MzQyZDAzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL0VXZWJLaXQuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svRVdlYktpdC5oCkBAIC0zNCw2ICszNCw3IEBACiAjaW5j
bHVkZSAiZXdrX2Nvb2tpZXMuaCIKICNpbmNsdWRlICJld2tfZnJhbWUuaCIKICNpbmNsdWRlICJl
d2tfaGlzdG9yeS5oIgorI2luY2x1ZGUgImV3a19oaXN0b3J5X2RlbGVnYXRlLmgiCiAjaW5jbHVk
ZSAiZXdrX2pzLmgiCiAjaW5jbHVkZSAiZXdrX21haW4uaCIKICNpbmNsdWRlICJld2tfbmV0d29y
ay5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19mcmFtZS5oIGIvU291
cmNlL1dlYktpdC9lZmwvZXdrL2V3a19mcmFtZS5oCmluZGV4IGY3NDU1NWUuLjVhZDk2ODMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfZnJhbWUuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2VmbC9ld2svZXdrX2ZyYW1lLmgKQEAgLTEsNiArMSw3IEBACiAvKgogICAgIENvcHly
aWdodCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCiAgICAgQ29weXJp
Z2h0IChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcworICAgIENvcHlyaWdodCAoQykg
MjAxMiBJbnRlbCBDb3Jwb3JhdGlvbgogCiAgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICAgIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC05NiwxOCArOTcs
MzMgQEAgc3RydWN0IF9Fd2tfRnJhbWVfTG9hZF9FcnJvciB7CiAKIC8vLyBDcmVhdGVzIGEgdHlw
ZSBuYW1lIGZvciBfRXdrX0ZyYW1lX1Jlc291cmNlX1JlcXVlc3QuCiB0eXBlZGVmIHN0cnVjdCBf
RXdrX0ZyYW1lX1Jlc291cmNlX1JlcXVlc3QgRXdrX0ZyYW1lX1Jlc291cmNlX1JlcXVlc3Q7CisK
IC8qKgotICogQGJyaWVmICAgU3RydWN0dXJlIHVzZWQgdG8gcmVwb3J0IHJlc291cmNlIHJlcXVl
c3QuCisgKiBAYnJpZWYgICBTdHJ1Y3R1cmUgY29udGFpbmluZyBkZXRhaWxzIGFib3V0IGEgcmVz
b3VyY2UgcmVxdWVzdC4KICAqCi0gKiBEZXRhaWxzIGdpdmVuIGJlZm9yZSBhIHJlc291cmNlIGlz
IGxvYWRlZCBvbiBhIGdpdmVuIGZyYW1lLiBJdCdzIHVzZWQgYnkKLSAqIGV3a19mcmFtZV9yZXF1
ZXN0X3dpbGxfc2VuZCgpIHRvIGluZm9ybSB0aGUgZGV0YWlscyBvZiBhIHRvLWJlLWxvYWRlZAot
ICogcmVzb3VyY2UsIGFsbG93aW5nIHRoZW0gdG8gYmUgb3ZlcnJpZGRlbi4KKyAqIERldGFpbHMg
Z2l2ZW4gYmVmb3JlIGEgcmVzb3VyY2UgaXMgbG9hZGVkIG9uIGEgZ2l2ZW4gZnJhbWUuIEl0J3Mg
dXNlZCBpbgorICogRXdrX0ZyYW1lX1Jlc291cmNlX01lc3NhZ2VzIHRvIGluZm9ybSBhYm91dCB0
aGUgZGV0YWlscyBvZiBhIHJlc291cmNlIHJlcXVlc3QuCiAgKi8KIHN0cnVjdCBfRXdrX0ZyYW1l
X1Jlc291cmNlX1JlcXVlc3QgewogICAgIGNvbnN0IGNoYXIgKnVybDsgLyoqPCB1cmwgb2YgdGhl
IHJlc291cmNlICovCisgICAgY29uc3QgY2hhciAqaHR0cF9tZXRob2Q7IC8qKjwgaHR0cCBtZXRo
b2Qgb2YgdGhlIHJlc291cmNlICovCiAgICAgY29uc3QgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVy
OyAvKio8IGlkZW50aWZpZXIgb2YgcmVzb3VyY2UsIGNhbiBub3QgYmUgY2hhbmdlZCAqLwogfTsK
IAorLy8vIENyZWF0ZXMgYSB0eXBlIG5hbWUgZm9yIF9Fd2tfRnJhbWVfUmVzb3VyY2VfUmVzcG9u
c2UuCit0eXBlZGVmIHN0cnVjdCBfRXdrX0ZyYW1lX1Jlc291cmNlX1Jlc3BvbnNlIEV3a19GcmFt
ZV9SZXNvdXJjZV9SZXNwb25zZTsKKworLyoqCisgKiBAYnJpZWYgICBTdHJ1Y3R1cmUgY29udGFp
bmluZyBkZXRhaWxzIGFib3V0IGEgcmVzcG9uc2UgdG8gYSByZXNvdXJjZSByZXF1ZXN0LgorICoK
KyAqIERldGFpbHMgZ2l2ZW4gaW4gdGhlIHJlc3BvbnNlIHRvIGEgcmVzb3VyY2UgcmVxdWVzdC4g
SXQncyB1c2VkIGJ5CisgKiBld2tfZnJhbWVfcmVzcG9uc2VfcmVjZWl2ZWQoKSB0byBpbmZvcm0g
YWJvdXQgdGhlIGRldGFpbHMgb2YgYSByZXNwb25zZS4KKyAqLworc3RydWN0IF9Fd2tfRnJhbWVf
UmVzb3VyY2VfUmVzcG9uc2UgeworICAgIGNvbnN0IGNoYXIgKnVybDsgLyoqPCB1cmwgb2YgdGhl
IHJlc291cmNlICovCisgICAgY29uc3QgaW50IHN0YXR1c19jb2RlOyAvKio8IGh0dHAgc3RhdHVz
IGNvZGUgKi8KK307CisKIC8vLyBFbnVtIGNvbnRhaW5pbmcgaGl0IHRlc3QgZGF0YSB0eXBlcwog
dHlwZWRlZiBlbnVtIHsKICAgICBFV0tfSElUX1RFU1RfUkVTVUxUX0NPTlRFWFRfRE9DVU1FTlQg
PSAxIDw8IDEsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcuY3Bw
IGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3LmNwcAppbmRleCAyNmI1NTVjLi4yM2Rj
ZWRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5jcHAKQEAgLTEsNiArMSw3IEBACiAvKgog
ICAgIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCiAg
ICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcworICAgIENvcHly
aWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbgogCiAgICAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICAgIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0x
NDcsNiArMTQ4LDcgQEAgc3RydWN0IF9Fd2tfVmlld19Qcml2YXRlX0RhdGEgewogICAgIFdlYkNv
cmU6OkZyYW1lKiBtYWluRnJhbWU7CiAgICAgV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHMgdmll
d3BvcnRBcmd1bWVudHM7CiAgICAgRXdrX0hpc3RvcnkqIGhpc3Rvcnk7CisgICAgRXdrX0hpc3Rv
cnlfRGVsZWdhdGUqIGhpc3RvcnlEZWxlZ2F0ZTsKICAgICBPd25QdHI8V2ViQ29yZTo6UGFnZUNs
aWVudEVmbD4gcGFnZUNsaWVudDsKICAgICBzdHJ1Y3QgewogICAgICAgICBFd2tfTWVudSBtZW51
OwpAQCAtNzUzLDYgKzc1NSw3IEBAIHN0YXRpYyB2b2lkIF9ld2tfdmlld19wcml2X2RlbChFd2tf
Vmlld19Qcml2YXRlX0RhdGEqIHByaXYpCiAgICAgICAgIGVjb3JlX2FuaW1hdG9yX2RlbChwcml2
LT5hbmltYXRlZFpvb20uYW5pbWF0b3IpOwogCiAgICAgZXdrX2hpc3RvcnlfZnJlZShwcml2LT5o
aXN0b3J5KTsKKyAgICBld2tfaGlzdG9yeV9kZWxlZ2F0ZV9mcmVlKHByaXYtPmhpc3RvcnlEZWxl
Z2F0ZSk7CiAKICAgICBkZWxldGUgcHJpdjsKIH0KQEAgLTM5MTMsNiArMzkxNiwyMSBAQCBFd2tf
UGFnZV9WaXNpYmlsaXR5X1N0YXRlIGV3a192aWV3X3Zpc2liaWxpdHlfc3RhdGVfZ2V0KGNvbnN0
IEV2YXNfT2JqZWN0KiBld2tWaQogI2VuZGlmCiB9CiAKK0V3a19IaXN0b3J5X0RlbGVnYXRlKiBl
d2tfdmlld19oaXN0b3J5X2RlbGVnYXRlX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykK
K3sKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgMCk7
CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgMCk7Cisg
ICAgcmV0dXJuIHByaXYtPmhpc3RvcnlEZWxlZ2F0ZTsKK30KKwordm9pZCBld2tfdmlld19oaXN0
b3J5X2RlbGVnYXRlX3NldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldywgRXdrX0hpc3Rvcnlf
RGVsZWdhdGUqIGRlbGVnYXRlKQoreworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdr
Vmlldywgc21hcnREYXRhKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnRE
YXRhLCBwcml2KTsKKyAgICBld2tfaGlzdG9yeV9kZWxlZ2F0ZV9mcmVlKHByaXYtPmhpc3RvcnlE
ZWxlZ2F0ZSk7CisgICAgcHJpdi0+aGlzdG9yeURlbGVnYXRlID0gZGVsZWdhdGU7Cit9CisKIFNv
dXBTZXNzaW9uKiBld2tfdmlld19zb3VwX3Nlc3Npb25fZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBl
d2tWaWV3KQogewogICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnRE
YXRhLCAwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5oIGIv
U291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3LmgKaW5kZXggMWM1MzMzNS4uOGRlNzdjMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3LmgKKysrIGIvU291cmNl
L1dlYktpdC9lZmwvZXdrL2V3a192aWV3LmgKQEAgLTEsNiArMSw3IEBACiAvKgogICAgIENvcHly
aWdodCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCiAgICAgQ29weXJp
Z2h0IChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcworICAgIENvcHlyaWdodCAoQykg
MjAxMiBJbnRlbCBDb3Jwb3JhdGlvbgogCiAgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICAgIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC05MCw2ICs5MSw3
IEBACiAKICNpbmNsdWRlICJld2tfZnJhbWUuaCIKICNpbmNsdWRlICJld2tfaGlzdG9yeS5oIgor
I2luY2x1ZGUgImV3a19oaXN0b3J5X2RlbGVnYXRlLmgiCiAjaW5jbHVkZSAiZXdrX2pzLmgiCiAj
aW5jbHVkZSAiZXdrX3dpbmRvd19mZWF0dXJlcy5oIgogCkBAIC0yMzM4LDYgKzIzNDAsMzAgQEAg
RUFQSSBFaW5hX0Jvb2wgZXdrX3ZpZXdfbWl4ZWRfY29udGVudF9kaXNwbGF5ZWRfZ2V0KGNvbnN0
IEV2YXNfT2JqZWN0ICpvKTsKIEVBUEkgRWluYV9Cb29sIGV3a192aWV3X21peGVkX2NvbnRlbnRf
cnVuX2dldChjb25zdCBFdmFzX09iamVjdCAqbyk7CiAKIC8qKgorICogUmV0dXJucyB0aGUgRXdr
X0hpc3RvcnlfRGVsZWdhdGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdmlldy4KKyAqCisgKiBAcGFy
YW0gbyBUaGUgdmlldyB0byBxdWVyeS4KKyAqCisgKiBAcmV0dXJuIEBjIEV3a19IaXN0b3J5X0Rl
bGVnYXRlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHZpZXcgb3IgQGMgMCBpZiB0aGVyZSBpcyBubyBh
c3NvY2lhdGVkIEV3a19IaXN0b3J5X0RlbGVnYXRlCisgKgorICogQHNhIGV3a192aWV3X2hpc3Rv
cnlfZGVsZWdhdGVfc2V0CisgKi8KK0VBUEkgRXdrX0hpc3RvcnlfRGVsZWdhdGUqIGV3a192aWV3
X2hpc3RvcnlfZGVsZWdhdGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpvKTsKKworLyoqCisgKiBB
c3NvY2lhdGVzIGEgbmV3IEV3a19IaXN0b3J5X0RlbGVnYXRlIHdpdGggdGhpcyB2aWV3LgorICoK
KyAqIEBub3RlIFRoZSB2aWV3IHRha2VzIG93bmVyc2hpcCBvdmVyIHRoZSBkZWxlZ2F0ZS4gSWYg
dGhlIGFzc29jaWF0ZWQgZGVsZWdhdGUgc2hvdWxkIGJlIGRlbGV0ZWQKKyAqICAgICAgIGltbWlk
aWF0ZWx5IGV3a192aWV3X2hpc3RvcnlfZGVsZWdhdGVfc2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpv
LCAwKSBzaGFsbCBiZSBpbnZva2VkCisgKgorICogQHBhcmFtIG8gVGhlIHZpZXcgdG8gY2hhbmdl
LgorICogQHBhcmFtIHNlc3Npb24gVGhlIG5ldyBFd2tfSGlzdG9yeV9EZWxlZ2F0ZS4KKyAqCisg
KiBAc2EgZXdrX3ZpZXdfaGlzdG9yeV9kZWxlZ2F0ZV9nZXQKKyAqLworRUFQSSB2b2lkIGV3a192
aWV3X2hpc3RvcnlfZGVsZWdhdGVfc2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpvLCBFd2tfSGlzdG9y
eV9EZWxlZ2F0ZSAqZGVsZWdhdGUpOworCisvKioKICAqIFJldHVybnMgdGhlIFNvdXBTZXNzaW9u
IGFzc29jaWF0ZWQgd2l0aCB0aGlzIHZpZXcuCiAgKgogICogQnkgZGVmYXVsdCwgYWxsIHZpZXdz
IHNoYXJlIHRoZSBzYW1lLCBkZWZhdWx0IHNvdXAgc2Vzc2lvbiBhbHNvIGF2YWlsYWJsZQpkaWZm
IC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDA1OWRlY2Eu
LjBlYjFkOWIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxNyBAQAorMjAxMi0wMy0zMCAgTWlraGFpbCBQb3pkbnlha292ICA8bWlr
aGFpbC5wb3pkbnlha292QGludGVsLmNvbT4KKworICAgICAgICBbRUZMXSBHbG9iYWwgaGlzdG9y
eSBkZWxlZ2F0ZSBzdXBwb3J0IGZvciBFRkwgcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI1NzkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBTZXQgaGlzdG9yeSBkZWxlZ2F0ZSBmb3IgYXBwcm9wcmlh
dGUgdGVzdHMuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9lZmwvQ01ha2VMaXN0cy50eHQ6
CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvZWZsL0R1bXBSZW5kZXJUcmVlLmNwcDoKKyAgICAg
ICAgKGlzR2xvYmFsSGlzdG9yeVRlc3QpOgorICAgICAgICAocnVuVGVzdCk6CisKIDIwMTItMDMt
MjkgIFZpbmVldCBDaGF1ZGhhcnkgIDxyZ2Y3NDhAbW90b3JvbGEuY29tPgogCiAgICAgICAgIFJl
bW92ZSBjdXN0b20gYmluZGluZ3MgZm9ybSBJbnRlcm5hbHMuaWRsIG9mIGF0dHJpYnV0ZSB0eXBl
IEFycmF5LgpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0NNYWtlTGlzdHMu
dHh0IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0NNYWtlTGlzdHMudHh0CmluZGV4IGNjOGRm
YWYuLjM5MjFhOGEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9DTWFrZUxp
c3RzLnR4dAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvQ01ha2VMaXN0cy50eHQKQEAg
LTEyLDYgKzEyLDcgQEAgU0VUKER1bXBSZW5kZXJUcmVlX1NPVVJDRVMKICAgICAke1RPT0xTX0RJ
Un0vRHVtcFJlbmRlclRyZWUvZWZsL0V2ZW50U2VuZGVyLmNwcAogICAgICR7VE9PTFNfRElSfS9E
dW1wUmVuZGVyVHJlZS9lZmwvRm9udE1hbmFnZW1lbnQuY3BwCiAgICAgJHtUT09MU19ESVJ9L0R1
bXBSZW5kZXJUcmVlL2VmbC9HQ0NvbnRyb2xsZXJFZmwuY3BwCisgICAgJHtUT09MU19ESVJ9L0R1
bXBSZW5kZXJUcmVlL2VmbC9IaXN0b3J5RGVsZWdhdGUuY3BwCiAgICAgJHtUT09MU19ESVJ9L0R1
bXBSZW5kZXJUcmVlL2VmbC9KU1N0cmluZ1V0aWxzLmNwcAogICAgICR7VE9PTFNfRElSfS9EdW1w
UmVuZGVyVHJlZS9lZmwvTGF5b3V0VGVzdENvbnRyb2xsZXJFZmwuY3BwCiAgICAgJHtUT09MU19E
SVJ9L0R1bXBSZW5kZXJUcmVlL2VmbC9QaXhlbER1bXBTdXBwb3J0RWZsLmNwcApkaWZmIC0tZ2l0
IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0R1bXBSZW5kZXJUcmVlLmNwcCBiL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL2VmbC9EdW1wUmVuZGVyVHJlZS5jcHAKaW5kZXggYmI4ZjdkMi4uOWU2Njdm
NCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0R1bXBSZW5kZXJUcmVlLmNw
cAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvRHVtcFJlbmRlclRyZWUuY3BwCkBAIC0z
MSw2ICszMSw3IEBACiAjaW5jbHVkZSAiRHVtcFJlbmRlclRyZWVWaWV3LmgiCiAjaW5jbHVkZSAi
RXZlbnRTZW5kZXIuaCIKICNpbmNsdWRlICJGb250TWFuYWdlbWVudC5oIgorI2luY2x1ZGUgIkhp
c3RvcnlEZWxlZ2F0ZS5oIgogI2luY2x1ZGUgIkxheW91dFRlc3RDb250cm9sbGVyLmgiCiAjaW5j
bHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJQaXhlbER1bXBTdXBwb3J0LmgiCkBA
IC0yMTgsNiArMjE5LDExIEBAIHN0YXRpYyB2b2lkIGNyZWF0ZUxheW91dFRlc3RDb250cm9sbGVy
KGNvbnN0IFN0cmluZyYgdGVzdFVSTCwgY29uc3QgU3RyaW5nJiBleHBlCiAgICAgfQogfQogCitz
dGF0aWMgYm9vbCBpc0dsb2JhbEhpc3RvcnlUZXN0KGNvbnN0IFN0cmluZyYgY1Rlc3RQYXRoT3JV
UkwpCit7CisgICAgcmV0dXJuIGNUZXN0UGF0aE9yVVJMLmNvbnRhaW5zKCJnbG9iYWxoaXN0b3J5
LyIpOworfQorCiBzdGF0aWMgdm9pZCBydW5UZXN0KGNvbnN0IGNoYXIqIGNUZXN0UGF0aE9yVVJM
KQogewogICAgIGNvbnN0IFN0cmluZyB0ZXN0UGF0aE9yVVJMID0gU3RyaW5nOjpmcm9tVVRGOChj
VGVzdFBhdGhPclVSTCk7CkBAIC0yNDIsNiArMjQ4LDkgQEAgc3RhdGljIHZvaWQgcnVuVGVzdChj
b25zdCBjaGFyKiBjVGVzdFBhdGhPclVSTCkKICAgICBjb25zdCBFd2tfSGlzdG9yeSogaGlzdG9y
eSA9IGV3a192aWV3X2hpc3RvcnlfZ2V0KGJyb3dzZXItPm1haW5WaWV3KCkpOwogICAgIHByZXZU
ZXN0QkZJdGVtID0gZXdrX2hpc3RvcnlfaGlzdG9yeV9pdGVtX2N1cnJlbnRfZ2V0KGhpc3Rvcnkp
OwogCisgICAgaWYgKGlzR2xvYmFsSGlzdG9yeVRlc3QodGVzdFVSTCkpCisgICAgICAgIGV3a192
aWV3X2hpc3RvcnlfZGVsZWdhdGVfc2V0KGJyb3dzZXItPm1haW5WaWV3KCksIGhpc3RvcnlfZGVs
ZWdhdGVfbmV3KGdMYXlvdXRUZXN0Q29udHJvbGxlci5nZXQoKSkpOworCiAgICAgZXZhc19vYmpl
Y3RfZm9jdXNfc2V0KGJyb3dzZXItPm1haW5WaWV3KCksIEVJTkFfVFJVRSk7CiAgICAgZXdrX3Zp
ZXdfdXJpX3NldChicm93c2VyLT5tYWluVmlldygpLCB0ZXN0VVJMLnV0ZjgoKS5kYXRhKCkpOwog
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134784</attachid>
            <date>2012-03-30 05:09:32 -0700</date>
            <delta_ts>2012-03-30 05:26:58 -0700</delta_ts>
            <desc>global history delegate v2</desc>
            <filename>global_history_delegate.patch</filename>
            <type>text/plain</type>
            <size>37277</size>
            <attacher name="Mikhail Pozdnyakov">mikhail.pozdnyakov</attacher>
            
              <data encoding="base64">Y29tbWl0IDJkOGQ5NTA1OTBiNTU3N2EyMTJiYWFmYmI4NTdmYjRkN2MyMGE3OGYKQXV0aG9yOiBr
a3Jpc3RvZkBpbmYudS1zemVnZWQuaHUgPGtrcmlzdG9mQGluZi51LXN6ZWdlZC5odUAyNjhmNDVj
Yy1jZDA5LTA0MTAtYWIzYy1kNTI2OTFiNGRiZmM+CkRhdGU6ICAgVGh1IE1hciAyOSAwOToxMToz
MSAyMDEyICswMDAwCgogICAgZ2xvYmFsIGhpc3RvcnkgZGVsZWdhdGUuCgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGFiMWM2
ZGUuLjc4YzczMGMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxMi0wMy0zMCAgTWlraGFpbCBQ
b3pkbnlha292ICA8bWlraGFpbC5wb3pkbnlha292QGludGVsLmNvbT4KKworICAgICAgICBbRUZM
XSBHbG9iYWwgaGlzdG9yeSBkZWxlZ2F0ZSBzdXBwb3J0IGZvciBFRkwgcG9ydAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI1NzkKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2VmbC9Ta2lw
cGVkOgorCiAyMDEyLTAzLTI5ICBLcmlzdMOzZiBLb3N6dHnDsyAgPGtrcmlzdG9mQGluZi51LXN6
ZWdlZC5odT4KIAogICAgICAgICBbUXRdIFVucmV2aWV3ZWQgcmViYXNlbGluZSBhZnRlciByMTEy
NDQ0CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9lZmwvU2tpcHBlZCBiL0xheW91
dFRlc3RzL3BsYXRmb3JtL2VmbC9Ta2lwcGVkCmluZGV4IGJhYTk2ZDEuLjFiNDBiOTYgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2VmbC9Ta2lwcGVkCisrKyBiL0xheW91dFRlc3Rz
L3BsYXRmb3JtL2VmbC9Ta2lwcGVkCkBAIC04MjgsNiArODI4LDggQEAgZmFzdC9mb3Jtcy92YWxp
ZGF0aW9uLW1lc3NhZ2Utb24tdGV4dGFyZWEuaHRtbAogIyBUaGVzZSB0ZXN0cyBuZWVkcyBlbmhh
bmNlZCBmcmFtZWxvYWRlciBkZWxlZ2F0ZSBsb2dnaW5nIGluIERSVAogZmFzdC9sb2FkZXIvcmVj
dXJzaXZlLWJlZm9yZS11bmxvYWQtY3Jhc2guaHRtbAogZmFzdC9sb2FkZXIvbnVsbC1yZXF1ZXN0
LWFmdGVyLXdpbGxTZW5kUmVxdWVzdC5odG1sCitodHRwL3Rlc3RzL2dsb2JhbGhpc3RvcnkvaGlz
dG9yeS1kZWxlZ2F0ZS1iYXNpYy1yZWZyZXNoLXJlZGlyZWN0Lmh0bWwKK2h0dHAvdGVzdHMvZ2xv
YmFsaGlzdG9yeS9oaXN0b3J5LWRlbGVnYXRlLWJhc2ljLTMwMi1yZWRpcmVjdC5odG1sCiAKICMg
TmVlZCB0byBhZGQgZnVuY3Rpb25hbGl0eSB0byBEdW1wUmVuZGVyVHJlZSB0byBoYW5kbGUgZXJy
b3IgcGFnZXMKIGZhc3QvaGlzdG9yeS9iYWNrLWZvcndhcmQtcmVzZXQtYWZ0ZXItZXJyb3ItaGFu
ZGxpbmcuaHRtbApAQCAtMTAzNyw5ICsxMDM5LDYgQEAgZmFzdC9kb20vdGl0bGUtZGlyZWN0aW9u
YWxpdHkuaHRtbAogZmFzdC9kb20vV2luZG93L3Nsb3ctdW5sb2FkLWhhbmRsZXIuaHRtbAogZmFz
dC9kb20vV2luZG93L3Nsb3ctdW5sb2FkLWhhbmRsZXItb25seS1mcmFtZS1pcy1zdG9wcGVkLmh0
bWwKIAotIyBUaGUgRUZMIHBvcnQgaGFzIG5vIGdsb2JhbCBoaXN0b3J5IGRlbGVnYXRlCi1odHRw
L3Rlc3RzL2dsb2JhbGhpc3RvcnkKLQogIyBQYXN0ZUJvYXJkOjpwbGFpblRleHQoKSBkb2VzIG5v
dCBzdXBwb3J0IGZpbGUgbmFtZXMuCiBlZGl0aW5nL3Bhc3RlYm9hcmQvZHJhZy1maWxlcy10by1l
ZGl0YWJsZS1lbGVtZW50Lmh0bWwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggYjczMWJkOS4uZDlmMjUyMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxMiBAQAorMjAxMi0wMy0zMCAgTWlraGFpbCBQb3pkbnlha292ICA8bWlr
aGFpbC5wb3pkbnlha292QGludGVsLmNvbT4KKworICAgICAgICBbRUZMXSBHbG9iYWwgaGlzdG9y
eSBkZWxlZ2F0ZSBzdXBwb3J0IGZvciBFRkwgcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI1NzkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorCiAyMDEyLTAzLTIy
ICBSYXBoYWVsIEt1Ym8gZGEgQ29zdGEgIDxyYWt1Y29ARnJlZUJTRC5vcmc+CiAKICAgICAgICAg
W0NNYWtlXSBVbnJldmlld2VkIGJ1aWxkIGZpeCBhZnRlciByMTExNzc4LgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9QbGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1F
ZmwuY21ha2UKaW5kZXggMTAwMTBjOS4uMTc3ZmJhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtRWZsLmNtYWtl
CkBAIC04OSw2ICs4OSw3IEBAIExJU1QoQVBQRU5EIFdlYktpdF9TT1VSQ0VTCiAgICAgZWZsL2V3
ay9ld2tfY29va2llcy5jcHAKICAgICBlZmwvZXdrL2V3a19mcmFtZS5jcHAKICAgICBlZmwvZXdr
L2V3a19oaXN0b3J5LmNwcAorICAgIGVmbC9ld2svZXdrX2hpc3RvcnlfZGVsZWdhdGUuY3BwCiAg
ICAgZWZsL2V3ay9ld2tfanMuY3BwCiAgICAgZWZsL2V3ay9ld2tfbWFpbi5jcHAKICAgICBlZmwv
ZXdrL2V3a19uZXR3b3JrLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdl
TG9nIGIvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCmluZGV4IGExNTMzYmMuLjllNDhjYWQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0L2VmbC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzOCBAQAorMjAxMi0wMy0zMCAgTWlraGFpbCBQ
b3pkbnlha292ICA8bWlraGFpbC5wb3pkbnlha292QGludGVsLmNvbT4KKworICAgICAgICBbRUZM
XSBHbG9iYWwgaGlzdG9yeSBkZWxlZ2F0ZSBzdXBwb3J0IGZvciBFRkwgcG9ydAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI1NzkKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBFd2tfSGlzdG9yeV9E
ZWxlZ2F0ZSBpbnRlcmZhY2UgYW5kIEV3a19OYXZpZ2F0aW9uX0RhdGEgc3RydWN0dXJlLiAKKyAg
ICAgICAgUHV0IEV3a19IaXN0b3J5X0RlbGVnYXRlIHVzYWdlIHRvIEZyYW1lTG9hZGVyQ2xpZW50
RWZsIGFuZCBDaHJvbWVDbGllbnRFZmwgY2xhc3Nlcy4KKworICAgICAgICAqIFdlYkNvcmVTdXBw
b3J0L0Nocm9tZUNsaWVudEVmbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRF
Zmw6OnBvcHVsYXRlVmlzaXRlZExpbmtzKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEVmbC5oOgorICAgICAgICAoQ2hyb21lQ2xpZW50
RWZsKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEVmbC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEVmbDo6ZGlzcGF0Y2hXaWxsU2Vu
ZFJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRFZmw6OmFzc2ln
bklkZW50aWZpZXJUb0luaXRpYWxSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9h
ZGVyQ2xpZW50RWZsOjpkaXNwYXRjaERlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRFZmw6OnVwZGF0ZUdsb2JhbEhpc3Rv
cnlSZWRpcmVjdExpbmtzKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50RWZs
OjpzZXRUaXRsZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEVmbDo6dXBk
YXRlR2xvYmFsSGlzdG9yeSk6CisgICAgICAgICogZXdrL0VXZWJLaXQuaDoKKyAgICAgICAgKiBl
d2svZXdrX2ZyYW1lLmg6CisgICAgICAgICogZXdrL2V3a19oaXN0b3J5X2RlbGVnYXRlLmNwcDog
QWRkZWQuCisgICAgICAgIChld2tfaGlzdG9yeV9kZWxlZ2F0ZV9uZXcpOgorICAgICAgICAoZXdr
X2hpc3RvcnlfZGVsZWdhdGVfZnJlZSk6CisgICAgICAgICogZXdrL2V3a19oaXN0b3J5X2RlbGVn
YXRlLmg6IEFkZGVkLgorICAgICAgICAqIGV3ay9ld2tfdmlldy5jcHA6CisgICAgICAgIChfRXdr
X1ZpZXdfUHJpdmF0ZV9EYXRhKToKKyAgICAgICAgKF9ld2tfdmlld19wcml2X2RlbCk6CisgICAg
ICAgIChld2tfdmlld19oaXN0b3J5X2RlbGVnYXRlX2dldCk6CisgICAgICAgIChld2tfdmlld19o
aXN0b3J5X2RlbGVnYXRlX3NldCk6CisgICAgICAgICogZXdrL2V3a192aWV3Lmg6CisKIDIwMTIt
MDMtMjggIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZW1v
dmUgZGlzcGF0Y2hEaWRMb2FkTWFpblJlc291cmNlIGNhbGxiYWNrLCBzaW5jZSBubwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50RWZsLmNw
cCBiL1NvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEVmbC5jcHAK
aW5kZXggNjhhZGY1Zi4uNDVmNGRhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvV2Vi
Q29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50RWZsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9X
ZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRFZmwuY3BwCkBAIC01NDksNiArNTQ5LDE1IEBAIFBh
c3NSZWZQdHI8U2VhcmNoUG9wdXBNZW51PiBDaHJvbWVDbGllbnRFZmw6OmNyZWF0ZVNlYXJjaFBv
cHVwTWVudShQb3B1cE1lbnVDbGllCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTZWFyY2hQb3B1
cE1lbnVFZmwoY2xpZW50KSk7CiB9CiAKK3ZvaWQgQ2hyb21lQ2xpZW50RWZsOjpwb3B1bGF0ZVZp
c2l0ZWRMaW5rcygpCit7CisgICAgRXdrX0hpc3RvcnlfRGVsZWdhdGUqIGhpc3RvcnlEZWxlZ2F0
ZSA9IGV3a192aWV3X2hpc3RvcnlfZGVsZWdhdGVfZ2V0KG1fdmlldyk7CisgICAgaWYgKGhpc3Rv
cnlEZWxlZ2F0ZQorICAgICAgICAmJiBoaXN0b3J5RGVsZWdhdGUtPmFwaQorICAgICAgICAmJiBo
aXN0b3J5RGVsZWdhdGUtPmFwaS0+cG9wdWxhdGVfdmlzaXRlZF9saW5rc19mb3JfdmlldyApCisg
ICAgICAgICgqaGlzdG9yeURlbGVnYXRlLT5hcGktPnBvcHVsYXRlX3Zpc2l0ZWRfbGlua3NfZm9y
X3ZpZXcpKGhpc3RvcnlEZWxlZ2F0ZSwgbV92aWV3KTsKK30KKwogI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKIHZvaWQgQ2hyb21lQ2xpZW50RWZsOjphdHRhY2hSb290R3JhcGhpY3NM
YXllcihGcmFtZSogZnJhbWUsIEdyYXBoaWNzTGF5ZXIqIHJvb3RMYXllcikKIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEVmbC5oIGIv
U291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50RWZsLmgKaW5kZXgg
OWNlOWQ2OC4uYjJiYWQ2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1
cHBvcnQvQ2hyb21lQ2xpZW50RWZsLmgKKysrIGIvU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1
cHBvcnQvQ2hyb21lQ2xpZW50RWZsLmgKQEAgLTE2NCw2ICsxNjQsNyBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCBib29sIGhhc09wZW5lZFBvcHVwKCkgY29uc3Q7CiAgICAgdmlydHVhbCBQYXNzUmVm
UHRyPFBvcHVwTWVudT4gY3JlYXRlUG9wdXBNZW51KFBvcHVwTWVudUNsaWVudCopIGNvbnN0Owog
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTZWFyY2hQb3B1cE1lbnU+IGNyZWF0ZVNlYXJjaFBvcHVw
TWVudShQb3B1cE1lbnVDbGllbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgcG9wdWxhdGVW
aXNpdGVkTGlua3MoKTsKIAogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRSdWJiZXJCYW5kSW5EaXJl
Y3Rpb24oV2ViQ29yZTo6U2Nyb2xsRGlyZWN0aW9uKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAg
ICAgdmlydHVhbCB2b2lkIG51bVdoZWVsRXZlbnRIYW5kbGVyc0NoYW5nZWQodW5zaWduZWQpIHsg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2Fk
ZXJDbGllbnRFZmwuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvRnJhbWVM
b2FkZXJDbGllbnRFZmwuY3BwCmluZGV4IDZmYTVjYzAuLmUyNmZhZTkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50RWZsLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEVm
bC5jcHAKQEAgLTcsNiArNyw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggS2VubmV0aCBSb2hk
ZSBDaHJpc3RpYW5zZW4KICAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJl
ZGRlZCBzeXN0ZW1zCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0cm9u
aWNzCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24KICAqCiAgKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKQEAgLTE2MiwxMyArMTYzLDE1IEBAIHZvaWQgRnJhbWVMb2Fk
ZXJDbGllbnRFZmw6OmRpc3BhdGNoRGlkQ2FuY2VsQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoRG9j
dW1lbnRMb2FkCiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRFZmw6OmRpc3BhdGNoV2lsbFNlbmRS
ZXF1ZXN0KERvY3VtZW50TG9hZGVyKiBsb2FkZXIsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwg
UmVzb3VyY2VSZXF1ZXN0JiBjb3JlUmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgY29y
ZVJlc3BvbnNlKQogewotICAgIENTdHJpbmcgdXJsID0gY29yZVJlcXVlc3QudXJsKCkuc3RyaW5n
KCkudXRmOCgpOworICAgIGNvbnN0IENTdHJpbmcgdXJsID0gY29yZVJlcXVlc3QudXJsKCkuc3Ry
aW5nKCkudXRmOCgpOwogICAgIERCRygiUmVzb3VyY2UgdXJsPSVzIiwgdXJsLmRhdGEoKSk7Cisg
ICAgY29uc3QgQ1N0cmluZyBtZXRob2QgPSBjb3JlUmVxdWVzdC5odHRwTWV0aG9kKCkudXRmOCgp
OwogCi0gICAgRXdrX0ZyYW1lX1Jlc291cmNlX1JlcXVlc3QgcmVxdWVzdCA9IHsgMCwgaWRlbnRp
ZmllciB9OworICAgIEV3a19GcmFtZV9SZXNvdXJjZV9SZXF1ZXN0IHJlcXVlc3QgPSB7IDAsIDAs
IGlkZW50aWZpZXIgfTsKICAgICBFd2tfRnJhbWVfUmVzb3VyY2VfUmVxdWVzdCBvcmlnID0gcmVx
dWVzdDsgLyogSW5pdGlhbGl6ZSBjb25zdCBmaWVsZHMuICovCiAKICAgICBvcmlnLnVybCA9IHJl
cXVlc3QudXJsID0gdXJsLmRhdGEoKTsKKyAgICBvcmlnLmh0dHBfbWV0aG9kID0gcmVxdWVzdC5o
dHRwX21ldGhvZCA9IG1ldGhvZC5kYXRhKCk7CiAKICAgICBld2tfZnJhbWVfcmVxdWVzdF93aWxs
X3NlbmQobV9mcmFtZSwgJnJlcXVlc3QpOwogCkBAIC0yMDEsNyArMjA0LDcgQEAgdm9pZCBGcmFt
ZUxvYWRlckNsaWVudEVmbDo6YXNzaWduSWRlbnRpZmllclRvSW5pdGlhbFJlcXVlc3QodW5zaWdu
ZWQgbG9uZyBpZGVudGkKICAgICBDU3RyaW5nIHVybCA9IGNvcmVSZXF1ZXN0LnVybCgpLnN0cmlu
ZygpLnV0ZjgoKTsKICAgICBEQkcoIlJlc291cmNlIHVybD0lcyIsIHVybC5kYXRhKCkpOwogCi0g
ICAgRXdrX0ZyYW1lX1Jlc291cmNlX1JlcXVlc3QgcmVxdWVzdCA9IHsgMCwgaWRlbnRpZmllciB9
OworICAgIEV3a19GcmFtZV9SZXNvdXJjZV9SZXF1ZXN0IHJlcXVlc3QgPSB7IDAsIDAsIGlkZW50
aWZpZXIgfTsKICAgICBld2tfZnJhbWVfcmVxdWVzdF9hc3NpZ25faWRlbnRpZmllcihtX2ZyYW1l
LCAmcmVxdWVzdCk7CiB9CiAKQEAgLTI5MywxMCArMjk2LDExIEBAIHZvaWQgRnJhbWVMb2FkZXJD
bGllbnRFZmw6OmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbihGcmFtZVBv
bGljeUZ1CiAKICAgICAvLyBpZiBub3QgYWNjZXB0TmF2aWdhdGlvblJlcXVlc3QgLSBsb29rIGF0
IFF0IC0+IFBvbGljeUlnbm9yZTsKICAgICAvLyBGSVhNRTogZG8gcHJvcGVyIGNoZWNrIGFuZCBv
bmx5IHJlc2V0IGZvcm1zIHdoZW4gb24gUG9saWN5SWdub3JlCi0gICAgY2hhciogdXJsID0gc3Ry
ZHVwKHJlc291cmNlUmVxdWVzdC51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICBF
d2tfRnJhbWVfUmVzb3VyY2VfUmVxdWVzdCByZXF1ZXN0ID0geyB1cmwsIDAgfTsKKyAgICBjb25z
dCBDU3RyaW5nIHVybCA9IHJlc291cmNlUmVxdWVzdC51cmwoKS5zdHJpbmcoKS51dGY4KCk7Cisg
ICAgY29uc3QgQ1N0cmluZyBtZXRob2QgPSByZXNvdXJjZVJlcXVlc3QuaHR0cE1ldGhvZCgpLnV0
ZjgoKTsKKyAgICBFd2tfRnJhbWVfUmVzb3VyY2VfUmVxdWVzdCByZXF1ZXN0ID0geyB1cmwuZGF0
YSgpLCBtZXRob2QuZGF0YSgpLCAwIH07CiAgICAgYm9vbCByZXQgPSBld2tfdmlld19uYXZpZ2F0
aW9uX3BvbGljeV9kZWNpc2lvbihtX3ZpZXcsICZyZXF1ZXN0KTsKLSAgICBmcmVlKHVybCk7CisK
IAogICAgIFBvbGljeUFjdGlvbiBwb2xpY3k7CiAgICAgaWYgKCFyZXQpCkBAIC00NjYsNiArNDcw
LDI3IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRFZmw6OnJlc3RvcmVWaWV3U3RhdGUoKQogCiB2
b2lkIEZyYW1lTG9hZGVyQ2xpZW50RWZsOjp1cGRhdGVHbG9iYWxIaXN0b3J5UmVkaXJlY3RMaW5r
cygpCiB7CisgICAgV2ViQ29yZTo6RnJhbWUqIGZyYW1lID0gRVdLUHJpdmF0ZTo6Y29yZUZyYW1l
KG1fZnJhbWUpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYkNv
cmU6OkRvY3VtZW50TG9hZGVyKiBsb2FkZXIgPSBmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9h
ZGVyKCk7CisgICAgaWYgKCFsb2FkZXIpCisgICAgICAgIHJldHVybjsKKworICAgIEV3a19IaXN0
b3J5X0RlbGVnYXRlKiBoaXN0b3J5RGVsZWdhdGUgPSBld2tfdmlld19oaXN0b3J5X2RlbGVnYXRl
X2dldChtX3ZpZXcpOworICAgIGlmIChoaXN0b3J5RGVsZWdhdGUgJiYgaGlzdG9yeURlbGVnYXRl
LT5hcGkpIHsKKyAgICAgICAgY29uc3QgQ1N0cmluZyBzb3VyY2VVUkwgPSBsb2FkZXItPmNsaWVu
dFJlZGlyZWN0U291cmNlRm9ySGlzdG9yeSgpLnV0ZjgoKTsKKyAgICAgICAgY29uc3QgQ1N0cmlu
ZyBkZXN0VVJMID0gbG9hZGVyLT5jbGllbnRSZWRpcmVjdERlc3RpbmF0aW9uRm9ySGlzdG9yeSgp
LnV0ZjgoKTsKKworICAgICAgICBpZiAoIWxvYWRlci0+Y2xpZW50UmVkaXJlY3RTb3VyY2VGb3JI
aXN0b3J5KCkuaXNOdWxsKCkKKyAgICAgICAgICAgICYmIGhpc3RvcnlEZWxlZ2F0ZS0+YXBpLT5k
aWRfcGVyZm9ybV9jbGllbnRfcmVkaXJlY3RfZnJvbV91cmwpCisgICAgICAgICAgICAoKmhpc3Rv
cnlEZWxlZ2F0ZS0+YXBpLT5kaWRfcGVyZm9ybV9jbGllbnRfcmVkaXJlY3RfZnJvbV91cmwpKGhp
c3RvcnlEZWxlZ2F0ZSwgbV92aWV3LCBzb3VyY2VVUkwuZGF0YSgpLCBkZXN0VVJMLmRhdGEoKSwg
bV9mcmFtZSk7CisKKyAgICAgICAgaWYgKCFsb2FkZXItPnNlcnZlclJlZGlyZWN0U291cmNlRm9y
SGlzdG9yeSgpLmlzTnVsbCgpCisgICAgICAgICAgICAmJiBoaXN0b3J5RGVsZWdhdGUtPmFwaS0+
ZGlkX3BlcmZvcm1fc2VydmVyX3JlZGlyZWN0X2Zyb21fdXJsKQorICAgICAgICAgICAgKCpoaXN0
b3J5RGVsZWdhdGUtPmFwaS0+ZGlkX3BlcmZvcm1fc2VydmVyX3JlZGlyZWN0X2Zyb21fdXJsKSho
aXN0b3J5RGVsZWdhdGUsIG1fdmlldywgc291cmNlVVJMLmRhdGEoKSwgZGVzdFVSTC5kYXRhKCks
IG1fZnJhbWUpOworICAgIH0KIH0KIAogYm9vbCBGcmFtZUxvYWRlckNsaWVudEVmbDo6c2hvdWxk
R29Ub0hpc3RvcnlJdGVtKEhpc3RvcnlJdGVtKiBpdGVtKSBjb25zdApAQCAtNzEyLDcgKzczNywx
MiBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50RWZsOjpwcmVwYXJlRm9yRGF0YVNvdXJjZVJlcGxh
Y2VtZW50KCkKIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudEVmbDo6c2V0VGl0bGUoY29uc3QgU3Ry
aW5nV2l0aERpcmVjdGlvbiYgdGl0bGUsIGNvbnN0IEtVUkwmIHVybCkKIHsKLSAgICAvLyBubyBu
ZWVkIGZvciwgZGlzcGF0Y2hEaWRSZWNlaXZlVGl0bGUgaXMgdGhlIHJpZ2h0IGNhbGxiYWNrCisg
ICAgRXdrX0hpc3RvcnlfRGVsZWdhdGUqIGhpc3RvcnlEZWxlZ2F0ZSA9IGV3a192aWV3X2hpc3Rv
cnlfZGVsZWdhdGVfZ2V0KG1fdmlldyk7CisKKyAgICBpZiAoaGlzdG9yeURlbGVnYXRlCisgICAg
ICAgICYmIGhpc3RvcnlEZWxlZ2F0ZS0+YXBpCisgICAgICAgICYmIGhpc3RvcnlEZWxlZ2F0ZS0+
YXBpLT51cGRhdGVfaGlzdG9yeV90aXRsZSkKKyAgICAgICAgKCpoaXN0b3J5RGVsZWdhdGUtPmFw
aS0+dXBkYXRlX2hpc3RvcnlfdGl0bGUpKGhpc3RvcnlEZWxlZ2F0ZSwgbV92aWV3LCB0aXRsZS5z
dHJpbmcoKS51dGY4KCkuZGF0YSgpLCB1cmwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiB9CiAK
IHZvaWQgRnJhbWVMb2FkZXJDbGllbnRFZmw6OmRpc3BhdGNoRGlkUmVjZWl2ZUNvbnRlbnRMZW5n
dGgoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGludCBkYXRhTGVu
Z3RoKQpAQCAtODc5LDcgKzkwOSw0MyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50RWZsOjpzdGFy
dERvd25sb2FkKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUwogCiB2b2lk
IEZyYW1lTG9hZGVyQ2xpZW50RWZsOjp1cGRhdGVHbG9iYWxIaXN0b3J5KCkKIHsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIFdlYkNvcmU6OkZyYW1lKiBmcmFtZSA9IEVXS1ByaXZhdGU6OmNv
cmVGcmFtZShtX2ZyYW1lKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm47CisKKyAg
ICBXZWJDb3JlOjpEb2N1bWVudExvYWRlciogbG9hZGVyID0gZnJhbWUtPmxvYWRlcigpLT5kb2N1
bWVudExvYWRlcigpOworICAgIGlmICghbG9hZGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBF
d2tfSGlzdG9yeSogaGlzdG9yeSA9IGV3a192aWV3X2hpc3RvcnlfZ2V0KG1fdmlldyk7CisgICAg
aWYgKCFoaXN0b3J5KQorICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBDU3RyaW5nIHVybEZv
ckhpc3RvcnkgPSBsb2FkZXItPnVybEZvckhpc3RvcnkoKS5zdHJpbmcoKS51dGY4KCk7CisgICAg
Y29uc3QgQ1N0cmluZyB0aXRsZSA9IGxvYWRlci0+dGl0bGUoKS5zdHJpbmcoKS51dGY4KCk7CisK
KyAgICBFd2tfSGlzdG9yeV9JdGVtKiBpdGVtID0gZXdrX2hpc3RvcnlfaXRlbV9uZXcodXJsRm9y
SGlzdG9yeS5kYXRhKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRpdGxlLmRhdGEoKSk7CisgICAgZXdrX2hpc3RvcnlfaGlzdG9yeV9pdGVtX2Fk
ZChoaXN0b3J5LCBpdGVtKTsKKyAgICBld2tfaGlzdG9yeV9pdGVtX2ZyZWUoaXRlbSk7CisKKyAg
ICBFd2tfSGlzdG9yeV9EZWxlZ2F0ZSogaGlzdG9yeURlbGVnYXRlID0gZXdrX3ZpZXdfaGlzdG9y
eV9kZWxlZ2F0ZV9nZXQobV92aWV3KTsKKyAgICBpZiAoaGlzdG9yeURlbGVnYXRlCisgICAgICAg
ICYmIGhpc3RvcnlEZWxlZ2F0ZS0+YXBpCisgICAgICAgICYmIGhpc3RvcnlEZWxlZ2F0ZS0+YXBp
LT5kaWRfbmF2aWdhdGVfd2l0aF9uYXZpZ2F0aW9uX2RhdGEpIHsKKyAgICAgICAgY29uc3QgQ1N0
cmluZyBjbGllbnRSZWRpcmVjdFNvdXJjZSA9IGxvYWRlci0+Y2xpZW50UmVkaXJlY3RTb3VyY2VG
b3JIaXN0b3J5KCkudXRmOCgpOworICAgICAgICBjb25zdCBDU3RyaW5nIG9yaWdpbmFsVVJMID0g
bG9hZGVyLT5vcmlnaW5hbFVSTCgpLnN0cmluZygpLnV0ZjgoKTsKKyAgICAgICAgY29uc3QgQ1N0
cmluZyBodHRwTWV0aG9kID0gbG9hZGVyLT5yZXF1ZXN0KCkuaHR0cE1ldGhvZCgpLnV0ZjgoKTsK
KyAgICAgICAgY29uc3QgQ1N0cmluZyByZXNwb25zZVVSTCA9IGxvYWRlci0+cmVzcG9uc2VVUkwo
KS5zdHJpbmcoKS51dGY4KCk7CisgICAgICAgIAorICAgICAgICBFd2tfTmF2aWdhdGlvbl9EYXRh
IGRhdGEgPQorICAgICAgICB7dXJsRm9ySGlzdG9yeS5kYXRhKCksIHRpdGxlLmRhdGEoKSwKKyAg
ICAgICAgIHtvcmlnaW5hbFVSTC5kYXRhKCksIGh0dHBNZXRob2QuZGF0YSgpLCAwfSwKKyAgICAg
ICAgIHtyZXNwb25zZVVSTC5kYXRhKCksIGxvYWRlci0+cmVzcG9uc2UoKS5odHRwU3RhdHVzQ29k
ZSgpfSwKKyAgICAgICAgIGxvYWRlci0+c3Vic3RpdHV0ZURhdGEoKS5pc1ZhbGlkKCksIGNsaWVu
dFJlZGlyZWN0U291cmNlLmRhdGEoKX07CisKKyAgICAgICAgICgqaGlzdG9yeURlbGVnYXRlLT5h
cGktPmRpZF9uYXZpZ2F0ZV93aXRoX25hdmlnYXRpb25fZGF0YSkoaGlzdG9yeURlbGVnYXRlLCBt
X3ZpZXcsICZkYXRhLCBtX2ZyYW1lKTsKKyAgICB9CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGll
bnRFZmw6OnNhdmVQbGF0Zm9ybURhdGFUb0NhY2hlZEZyYW1lKENhY2hlZEZyYW1lKikKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9FV2ViS2l0LmggYi9Tb3VyY2UvV2ViS2l0L2Vm
bC9ld2svRVdlYktpdC5oCmluZGV4IDBmZmI1MWMuLjM0MmQwMzggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvZWZsL2V3ay9FV2ViS2l0LmgKKysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL0VX
ZWJLaXQuaApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgImV3a19jb29raWVzLmgiCiAjaW5j
bHVkZSAiZXdrX2ZyYW1lLmgiCiAjaW5jbHVkZSAiZXdrX2hpc3RvcnkuaCIKKyNpbmNsdWRlICJl
d2tfaGlzdG9yeV9kZWxlZ2F0ZS5oIgogI2luY2x1ZGUgImV3a19qcy5oIgogI2luY2x1ZGUgImV3
a19tYWluLmgiCiAjaW5jbHVkZSAiZXdrX25ldHdvcmsuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvZWZsL2V3ay9ld2tfZnJhbWUuaCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfZnJh
bWUuaAppbmRleCBmNzQ1NTVlLi41YWQ5NjgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Vm
bC9ld2svZXdrX2ZyYW1lLmgKKysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19mcmFtZS5o
CkBAIC0xLDYgKzEsNyBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBQcm9GVVNJ
T04gZW1iZWRkZWQgc3lzdGVtcwogICAgIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFNhbXN1bmcg
RWxlY3Ryb25pY3MKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24KIAog
ICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwpAQCAtOTYsMTggKzk3LDMzIEBAIHN0cnVjdCBfRXdrX0ZyYW1lX0xv
YWRfRXJyb3IgewogCiAvLy8gQ3JlYXRlcyBhIHR5cGUgbmFtZSBmb3IgX0V3a19GcmFtZV9SZXNv
dXJjZV9SZXF1ZXN0LgogdHlwZWRlZiBzdHJ1Y3QgX0V3a19GcmFtZV9SZXNvdXJjZV9SZXF1ZXN0
IEV3a19GcmFtZV9SZXNvdXJjZV9SZXF1ZXN0OworCiAvKioKLSAqIEBicmllZiAgIFN0cnVjdHVy
ZSB1c2VkIHRvIHJlcG9ydCByZXNvdXJjZSByZXF1ZXN0LgorICogQGJyaWVmICAgU3RydWN0dXJl
IGNvbnRhaW5pbmcgZGV0YWlscyBhYm91dCBhIHJlc291cmNlIHJlcXVlc3QuCiAgKgotICogRGV0
YWlscyBnaXZlbiBiZWZvcmUgYSByZXNvdXJjZSBpcyBsb2FkZWQgb24gYSBnaXZlbiBmcmFtZS4g
SXQncyB1c2VkIGJ5Ci0gKiBld2tfZnJhbWVfcmVxdWVzdF93aWxsX3NlbmQoKSB0byBpbmZvcm0g
dGhlIGRldGFpbHMgb2YgYSB0by1iZS1sb2FkZWQKLSAqIHJlc291cmNlLCBhbGxvd2luZyB0aGVt
IHRvIGJlIG92ZXJyaWRkZW4uCisgKiBEZXRhaWxzIGdpdmVuIGJlZm9yZSBhIHJlc291cmNlIGlz
IGxvYWRlZCBvbiBhIGdpdmVuIGZyYW1lLiBJdCdzIHVzZWQgaW4KKyAqIEV3a19GcmFtZV9SZXNv
dXJjZV9NZXNzYWdlcyB0byBpbmZvcm0gYWJvdXQgdGhlIGRldGFpbHMgb2YgYSByZXNvdXJjZSBy
ZXF1ZXN0LgogICovCiBzdHJ1Y3QgX0V3a19GcmFtZV9SZXNvdXJjZV9SZXF1ZXN0IHsKICAgICBj
b25zdCBjaGFyICp1cmw7IC8qKjwgdXJsIG9mIHRoZSByZXNvdXJjZSAqLworICAgIGNvbnN0IGNo
YXIgKmh0dHBfbWV0aG9kOyAvKio8IGh0dHAgbWV0aG9kIG9mIHRoZSByZXNvdXJjZSAqLwogICAg
IGNvbnN0IHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcjsgLyoqPCBpZGVudGlmaWVyIG9mIHJlc291
cmNlLCBjYW4gbm90IGJlIGNoYW5nZWQgKi8KIH07CiAKKy8vLyBDcmVhdGVzIGEgdHlwZSBuYW1l
IGZvciBfRXdrX0ZyYW1lX1Jlc291cmNlX1Jlc3BvbnNlLgordHlwZWRlZiBzdHJ1Y3QgX0V3a19G
cmFtZV9SZXNvdXJjZV9SZXNwb25zZSBFd2tfRnJhbWVfUmVzb3VyY2VfUmVzcG9uc2U7CisKKy8q
KgorICogQGJyaWVmICAgU3RydWN0dXJlIGNvbnRhaW5pbmcgZGV0YWlscyBhYm91dCBhIHJlc3Bv
bnNlIHRvIGEgcmVzb3VyY2UgcmVxdWVzdC4KKyAqCisgKiBEZXRhaWxzIGdpdmVuIGluIHRoZSBy
ZXNwb25zZSB0byBhIHJlc291cmNlIHJlcXVlc3QuIEl0J3MgdXNlZCBieQorICogZXdrX2ZyYW1l
X3Jlc3BvbnNlX3JlY2VpdmVkKCkgdG8gaW5mb3JtIGFib3V0IHRoZSBkZXRhaWxzIG9mIGEgcmVz
cG9uc2UuCisgKi8KK3N0cnVjdCBfRXdrX0ZyYW1lX1Jlc291cmNlX1Jlc3BvbnNlIHsKKyAgICBj
b25zdCBjaGFyICp1cmw7IC8qKjwgdXJsIG9mIHRoZSByZXNvdXJjZSAqLworICAgIGNvbnN0IGlu
dCBzdGF0dXNfY29kZTsgLyoqPCBodHRwIHN0YXR1cyBjb2RlICovCit9OworCiAvLy8gRW51bSBj
b250YWluaW5nIGhpdCB0ZXN0IGRhdGEgdHlwZXMKIHR5cGVkZWYgZW51bSB7CiAgICAgRVdLX0hJ
VF9URVNUX1JFU1VMVF9DT05URVhUX0RPQ1VNRU5UID0gMSA8PCAxLApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9lZmwvZXdrL2V3a19oaXN0b3J5X2RlbGVnYXRlLmNwcCBiL1NvdXJjZS9XZWJL
aXQvZWZsL2V3ay9ld2tfaGlzdG9yeV9kZWxlZ2F0ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uYzdlNDYzOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
ZWZsL2V3ay9ld2tfaGlzdG9yeV9kZWxlZ2F0ZS5jcHAKQEAgLTAsMCArMSw1NyBAQAorLyoKKyog
Q29weXJpZ2h0IChjKSAyMDEyLCBJbnRlbCBDb3Jwb3JhdGlvbgorKgorKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZSBtZXQ6CisqCisqICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisqIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKiAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5v
dGljZSwKKyogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyogKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEludGVs
IENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29m
dHdhcmUgd2l0aG91dAorKiBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMgIkFTIElTIgorKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFCisqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRQorKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImV3a19oaXN0b3J5X2RlbGVnYXRlLmgiCisKKyNp
bmNsdWRlIDxlaW5hX3NhZmV0eV9jaGVja3MuaD4KKworRXdrX0hpc3RvcnlfRGVsZWdhdGUqIGV3
a19oaXN0b3J5X2RlbGVnYXRlX25ldyhFaW5hX0ZyZWVfQ2IgZGF0YV9mcmVlX2NiKQoreworICAg
IEV3a19IaXN0b3J5X0RlbGVnYXRlKiByZXMgPSBuZXcgRXdrX0hpc3RvcnlfRGVsZWdhdGU7Cisg
ICAgbWVtc2V0KHJlcywgMCwgc2l6ZW9mKEV3a19IaXN0b3J5X0RlbGVnYXRlKSk7CisKKyAgICBy
ZXMtPmFwaSA9IG5ldyBFd2tfSGlzdG9yeV9EZWxlZ2F0ZV9DbGFzczsKKyAgICBtZW1zZXQocmVz
LT5hcGksIDAsIHNpemVvZihFd2tfSGlzdG9yeV9EZWxlZ2F0ZV9DbGFzcykpOworCisgICAgcmVz
LT5kYXRhX2ZyZWVfY2IgPSBkYXRhX2ZyZWVfY2I7CisKKyAgICByZXR1cm4gcmVzOworfQorCit2
b2lkIGV3a19oaXN0b3J5X2RlbGVnYXRlX2ZyZWUoRXdrX0hpc3RvcnlfRGVsZWdhdGUqIGhkKQor
eworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGhkKTsKKworICAgIGlmIChoZC0+ZGF0
YV9mcmVlX2NiKQorICAgICAgICAoKmhkLT5kYXRhX2ZyZWVfY2IpKGhkLT5kYXRhKTsKKworICAg
IGRlbGV0ZSBoZC0+YXBpOworICAgIGRlbGV0ZSBoZDsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvZWZsL2V3ay9ld2tfaGlzdG9yeV9kZWxlZ2F0ZS5oIGIvU291cmNlL1dlYktpdC9lZmwv
ZXdrL2V3a19oaXN0b3J5X2RlbGVnYXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uY2FiZTNjMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9l
d2tfaGlzdG9yeV9kZWxlZ2F0ZS5oCkBAIC0wLDAgKzEsMTQ3IEBACisvKgorKiBDb3B5cmlnaHQg
KGMpIDIwMTIsIEludGVsIENvcnBvcmF0aW9uCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlIG1ldDoKKyoKKyogKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyogbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZSBkb2N1bWVudGF0aW9uCisqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorKiAqIE5laXRoZXIgdGhlIG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRp
b24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0CisqIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UyAiQVMgSVMiCisqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFCisqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFCisqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2lmbmRlZiBld2tfaGlz
dG9yeV9kZWxlZ2F0ZV9oCisjZGVmaW5lIGV3a19oaXN0b3J5X2RlbGVnYXRlX2gKKworI2luY2x1
ZGUgImV3a19mcmFtZS5oIgorCisjaW5jbHVkZSA8RWluYS5oPgorI2luY2x1ZGUgPEV2YXMuaD4K
KyNpbmNsdWRlIDxjYWlyby5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgewor
I2VuZGlmCisvLyBGSVhNRTogU2hvdWxkIGJlIHJlLWZhY3RvcmVkIGlmIEVubGlnaHRlbm1lbnQg
Z2VuZXJpYyBvYmplY3QgbW9kZWwgdHVybnMgdXAKKworLy8vIENyZWF0ZXMgYSB0eXBlIG5hbWUg
Zm9yIEBhIF9Fd2tfTmF2aWdhdGlvbl9EYXRhLgordHlwZWRlZiBzdHJ1Y3QgX0V3a19OYXZpZ2F0
aW9uX0RhdGEgRXdrX05hdmlnYXRpb25fRGF0YTsKKworLy8vIENyZWF0ZXMgYSB0eXBlIG5hbWUg
Zm9yIEBhIF9Fd2tfSGlzdG9yeV9EZWxlZ2F0ZV9DbGFzcy4KK3R5cGVkZWYgc3RydWN0IF9Fd2tf
SGlzdG9yeV9EZWxlZ2F0ZV9DbGFzcyBFd2tfSGlzdG9yeV9EZWxlZ2F0ZV9DbGFzczsKKworLy8v
IENyZWF0ZXMgYSB0eXBlIG5hbWUgZm9yIEBhIF9Fd2tfSGlzdG9yeV9EZWxlZ2F0ZS4KK3R5cGVk
ZWYgc3RydWN0IF9Fd2tfSGlzdG9yeV9EZWxlZ2F0ZSBFd2tfSGlzdG9yeV9EZWxlZ2F0ZTsKKwor
LyoqCisgKiBAYnJpZWYgICBTdHJ1Y3R1cmUgY29udGFpbmluZyBkZXRhaWxzIGFib3V0IGEgV2Vi
IFZpZXcgbmF2aWdhdGlvbi4KKyAqCisgKiBEZXRhaWxzIG9mIGEgV2ViIFZpZXcgbmF2aWdhdGlv
bi4gSXQgaXMgdXNlZCBieSBld2tfaGlzdG9yeV9kZWxlZ2F0ZV9kaWRfbmF2aWdhdGVfd2l0aF9u
YXZpZ2F0aW9uX2RhdGEoKSB0byBpbmZvcm0gYWJvdXQgdGhlIGRlYXRpbHMgb2YgYSBuYXZpZ2F0
aW9uLgorICovCitzdHJ1Y3QgX0V3a19OYXZpZ2F0aW9uX0RhdGEgeworICAgIGNvbnN0IGNoYXIq
IHVybDsgIC8qKjwgdXJsIG9mIHRoZSBuYXZpZ2F0ZWQgcGFnZSAqLworICAgIGNvbnN0IGNoYXIq
IHRpdGxlOyAgLyoqPCB0aXRsZSBvZiB0aGUgbmF2aWdhdGVkIHBhZ2UgKi8KKyAgICBFd2tfRnJh
bWVfUmVzb3VyY2VfUmVxdWVzdCByZXF1ZXN0OyAgLyoqPCBuYXZpZ2F0aW9uIHJlcXVlc3QgKi8K
KyAgICBFd2tfRnJhbWVfUmVzb3VyY2VfUmVzcG9uc2UgcmVzcG9uc2U7ICAvKio8IG5hdmlnYXRp
b24gcmVzcG9uc2UgKi8KKyAgICBFaW5hX0Jvb2wgaGFzU3Vic3RpdHV0ZURhdGE7ICAvKio8IGRh
dGEgc3Vic3RpdHV0aW9uIGZsYWcgKi8KKyAgICBjb25zdCBjaGFyKiBjbGllbnRSZWRpcmVjdFNv
dXJjZTsgIC8qKjwgY2xpZW50IHJlZGlyZWN0IHNvdXJjZSB1cmwqLworfTsKKworLy8vIEV3ayBI
aXN0b3J5IERlbGVnYXRlJ3MgY2xhc3MsIHRvIGJlIG92ZXJyaWRkZW4gYnkgc3ViLWNsYXNzZXMu
CitzdHJ1Y3QgX0V3a19IaXN0b3J5X0RlbGVnYXRlX0NsYXNzIHsKKyAgICAvKioKKyAgICAgKiBJ
bnZva2VkIGlmIHdlYiB2aWV3IG5hdmlnYXRlZCB0byBhIG5ldyB1cmwuCisgICAgICoKKyAgICAg
KiBAcGFyYW0gaGQgaGlzdG9yeSBkZWxlZ2F0ZSBvYmplY3QuCisgICAgICogQHBhcmFtIHZpZXcg
ZXdrX3ZpZXcgb2JqZWN0LgorICAgICAqIEBwYXJhbSBuZCBld2tfbmF2aWdhdGlvbl9kYXRhIG9i
amVjdCBjb250YWluaW5nIGRldGFpbHMgb2YgdGhlIG5hdmlnYXRpb24uCisgICAgICogQHBhcmFt
IGZyYW1lIGV3a19mcmFtZSBvYmplY3Qgb3duZWQgYnkgdGhlIEBhIHZpZXcuCisgICAgICovCisg
ICAgdm9pZCAoKmRpZF9uYXZpZ2F0ZV93aXRoX25hdmlnYXRpb25fZGF0YSkoRXdrX0hpc3Rvcnlf
RGVsZWdhdGUqIGhkLCBjb25zdCBFdmFzX09iamVjdCogdmlldywgRXdrX05hdmlnYXRpb25fRGF0
YSogbmQsIGNvbnN0IEV2YXNfT2JqZWN0KiBmcmFtZSk7CisgICAgLyoqCisgICAgICogSW52b2tl
ZCBpZiB3ZWIgdmlldyBwZXJmb3JtZWQgYSBjbGllbnQgcmVkaXJlY3QuCisgICAgICoKKyAgICAg
KiBAcGFyYW0gaGQgaGlzdG9yeSBkZWxlZ2F0ZSBvYmplY3QuCisgICAgICogQHBhcmFtIHZpZXcg
ZXdrX3ZpZXcgb2JqZWN0LgorICAgICAqIEBwYXJhbSBzdXJsIHNvdXJjZSB1cmwuCisgICAgICog
QHBhcmFtIGR1cmwgZGVzdGluYXRpb24gdXJsLgorICAgICAqIEBwYXJhbSBmcmFtZSBld2tfZnJh
bWUgb2JqZWN0IG93bmVkIGJ5IHRoZSBAYSB2aWV3LgorICAgICAqLworICAgIHZvaWQgKCpkaWRf
cGVyZm9ybV9jbGllbnRfcmVkaXJlY3RfZnJvbV91cmwpKEV3a19IaXN0b3J5X0RlbGVnYXRlKiBo
ZCwgY29uc3QgRXZhc19PYmplY3QqIHZpZXcsIGNvbnN0IGNoYXIqIHN1cmwsIGNvbnN0IGNoYXIq
IGR1cmwsIGNvbnN0IEV2YXNfT2JqZWN0KiBmcmFtZSk7CisgICAgLyoqCisgICAgICogSW52b2tl
ZCBpZiB3ZWIgdmlldyBwZXJmb3JtZWQgYSBzZXJ2ZXIgcmVkaXJlY3QuCisgICAgICoKKyAgICAg
KiBAcGFyYW0gaGQgaGlzdG9yeSBkZWxlZ2F0ZSBvYmplY3QuCisgICAgICogQHBhcmFtIHZpZXcg
ZXdrX3ZpZXcgb2JqZWN0LgorICAgICAqIEBwYXJhbSBzdXJsIHNvdXJjZSB1cmwuCisgICAgICog
QHBhcmFtIGR1cmwgZGVzdGluYXRpb24gdXJsLgorICAgICAqIEBwYXJhbSBmcmFtZSBld2tfZnJh
bWUgb2JqZWN0IG93bmVkIGJ5IHRoZSBAYSB2aWV3LgorICAgICAqLworICAgIHZvaWQgKCpkaWRf
cGVyZm9ybV9zZXJ2ZXJfcmVkaXJlY3RfZnJvbV91cmwpKEV3a19IaXN0b3J5X0RlbGVnYXRlKiBo
ZCwgY29uc3QgRXZhc19PYmplY3QqIHZpZXcsIGNvbnN0IGNoYXIqIHN1cmwsIGNvbnN0IGNoYXIq
IGR1cmwsIGNvbnN0IEV2YXNfT2JqZWN0KiBmcmFtZSk7CisgICAgLyoqCisgICAgICogSW52b2tl
ZCBpZiB3ZWIgdmlldyB0aXRsZSBoYXMgYmVlbiB1cGRhdGVkLgorICAgICAqCisgICAgICogQHBh
cmFtIGhkIGhpc3RvcnkgZGVsZWdhdGUgb2JqZWN0LgorICAgICAqIEBwYXJhbSB2aWV3IGV3a192
aWV3IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gdGl0bGUgd2ViIHZpZXcgdGl0bGUuCisgICAgICog
QHBhcmFtIHVybCB3ZWIgdmlldyB1cmwuCisgICAgICovCisgICAgdm9pZCAoKnVwZGF0ZV9oaXN0
b3J5X3RpdGxlKShFd2tfSGlzdG9yeV9EZWxlZ2F0ZSogaGQsIGNvbnN0IEV2YXNfT2JqZWN0KiB2
aWV3LCBjb25zdCBjaGFyKiB0aXRsZSwgY29uc3QgY2hhciogdXJsKTsKKyAgICAvKioKKyAgICAg
KiBJbnZva2VkIHRvIHBvcHVsYXRlIHZpc2l0ZWQgbGlua3MgZm9yIHdlYiB2aWV3LgorICAgICAq
CisgICAgICogQHBhcmFtIGhkIGhpc3RvcnkgZGVsZWdhdGUgb2JqZWN0LgorICAgICAqIEBwYXJh
bSB2aWV3IGV3a192aWV3IG9iamVjdC4KKyAgICAgKi8KKyAgICB2b2lkICgqcG9wdWxhdGVfdmlz
aXRlZF9saW5rc19mb3JfdmlldykoRXdrX0hpc3RvcnlfRGVsZWdhdGUqIGhkLCBjb25zdCBFdmFz
X09iamVjdCogdmlldyk7Cit9OworCisvKioKKyAqIEBicmllZiBDb250YWlucyBhbiBpbnRlcm5h
bCBIaXN0b3J5IERlbGVnYXRlIGRhdGEuCisgKgorICogSXQgaXMgdG8gYmUgY29uc2lkZXJlZCBw
cml2YXRlIGJ5IHVzZXJzLCBidXQgbWF5IGJlIGV4dGVuZGVkIG9yCisgKiBjaGFuZ2VkIGJ5IHN1
Yi1jbGFzc2VzICh0aGF0J3Mgd2h5IGl0J3MgaW4gdGhlIHB1YmxpYyBoZWFkZXIgZmlsZSkuCisg
Ki8KK3N0cnVjdCBfRXdrX0hpc3RvcnlfRGVsZWdhdGUgeworICAgIEV3a19IaXN0b3J5X0RlbGVn
YXRlX0NsYXNzICphcGk7IC8qKjwgUmVmZXJlbmNlIHRvIGNhc3RlZCBjbGFzcyBpbnN0YW5jZS4g
Ki8KKyAgICB2b2lkICpkYXRhOyAvKio8IHN1Yi1jbGFzc2VzIG93biBkYXRhLiovCisgICAgRWlu
YV9GcmVlX0NiIGRhdGFfZnJlZV9jYjsgLyoqPCBjYWxsYmFjayB0byBiZSBpbnZva2VkIHRvIGZy
ZWUgQGEgZGF0YSAqLworfTsKKworLyoqCisgKiBDcmVhdGUgYSBuZXcgaGlzdG9yeSBkZWxlZ2F0
ZSBvYmplY3QgaW5zdGFuY2UuCisgKgorICogQHBhcmFtIGRhdGFfZnJlZV9jYiBjYWxsYmFjayB0
byBiZSBpbnZva2VkIHRvIGZyZWUgaGlzdG9yeSBkZWxlZ2F0ZSdzIGRhdGEuCisgKgorICogQHJl
dHVybiBuZXdseSBhbGxvY2F0ZWQgaGlzdG9yeSBkZWxlZ2F0ZS4gWW91IG11c3QKKyAqICAgICAg
ICAgZnJlZSB0aGlzIGRlbGVnYXRlIHdpdGggZXdrX2hpc3RvcnlfZGVsZWdhdGVfZnJlZSgpLgor
ICovCitFQVBJIEV3a19IaXN0b3J5X0RlbGVnYXRlKiBld2tfaGlzdG9yeV9kZWxlZ2F0ZV9uZXco
RWluYV9GcmVlX0NiIGRhdGFfZnJlZV9jYik7CisKKy8qKgorICogRnJlZSBnaXZlbiBoaXN0b3J5
IGRlbGVnYXRlIGluc3RhbmNlLgorICoKKyAqIEBwYXJhbSBoZCB3aGF0IHRvIGZyZWUuCisgKi8K
K0VBUEkgdm9pZCBld2tfaGlzdG9yeV9kZWxlZ2F0ZV9mcmVlKEV3a19IaXN0b3J5X0RlbGVnYXRl
KiBoZCk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYgLy8gZXdrX2hp
c3RvcnlfZGVsZWdhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192
aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5jcHAKaW5kZXggMjZiNTU1
Yy4uMjNkY2VkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcuY3BwCkBAIC0xLDYgKzEsNyBA
QAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lz
dGVtcwogICAgIENvcHlyaWdodCAoQykgMjAwOS0yMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAg
ICBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24KIAogICAgIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAgICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpAQCAtMTQ3LDYgKzE0OCw3IEBAIHN0cnVjdCBfRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhIHsKICAg
ICBXZWJDb3JlOjpGcmFtZSogbWFpbkZyYW1lOwogICAgIFdlYkNvcmU6OlZpZXdwb3J0QXJndW1l
bnRzIHZpZXdwb3J0QXJndW1lbnRzOwogICAgIEV3a19IaXN0b3J5KiBoaXN0b3J5OworICAgIEV3
a19IaXN0b3J5X0RlbGVnYXRlKiBoaXN0b3J5RGVsZWdhdGU7CiAgICAgT3duUHRyPFdlYkNvcmU6
OlBhZ2VDbGllbnRFZmw+IHBhZ2VDbGllbnQ7CiAgICAgc3RydWN0IHsKICAgICAgICAgRXdrX01l
bnUgbWVudTsKQEAgLTc1Myw2ICs3NTUsNyBAQCBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfcHJpdl9k
ZWwoRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBwcml2KQogICAgICAgICBlY29yZV9hbmltYXRvcl9k
ZWwocHJpdi0+YW5pbWF0ZWRab29tLmFuaW1hdG9yKTsKIAogICAgIGV3a19oaXN0b3J5X2ZyZWUo
cHJpdi0+aGlzdG9yeSk7CisgICAgZXdrX2hpc3RvcnlfZGVsZWdhdGVfZnJlZShwcml2LT5oaXN0
b3J5RGVsZWdhdGUpOwogCiAgICAgZGVsZXRlIHByaXY7CiB9CkBAIC0zOTEzLDYgKzM5MTYsMjEg
QEAgRXdrX1BhZ2VfVmlzaWJpbGl0eV9TdGF0ZSBld2tfdmlld192aXNpYmlsaXR5X3N0YXRlX2dl
dChjb25zdCBFdmFzX09iamVjdCogZXdrVmkKICNlbmRpZgogfQogCitFd2tfSGlzdG9yeV9EZWxl
Z2F0ZSogZXdrX3ZpZXdfaGlzdG9yeV9kZWxlZ2F0ZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3
a1ZpZXcpCit7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERh
dGEsIDApOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYs
IDApOworICAgIHJldHVybiBwcml2LT5oaXN0b3J5RGVsZWdhdGU7Cit9CisKK3ZvaWQgZXdrX3Zp
ZXdfaGlzdG9yeV9kZWxlZ2F0ZV9zZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV3a19I
aXN0b3J5X0RlbGVnYXRlKiBkZWxlZ2F0ZSkKK3sKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVU
VVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJO
KHNtYXJ0RGF0YSwgcHJpdik7CisgICAgZXdrX2hpc3RvcnlfZGVsZWdhdGVfZnJlZShwcml2LT5o
aXN0b3J5RGVsZWdhdGUpOworICAgIHByaXYtPmhpc3RvcnlEZWxlZ2F0ZSA9IGRlbGVnYXRlOwor
fQorCiBTb3VwU2Vzc2lvbiogZXdrX3ZpZXdfc291cF9zZXNzaW9uX2dldChjb25zdCBFdmFzX09i
amVjdCogZXdrVmlldykKIHsKICAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcs
IHNtYXJ0RGF0YSwgMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3Zp
ZXcuaCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5oCmluZGV4IDFjNTMzMzUuLjhk
ZTc3YzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5oCkBAIC0xLDYgKzEsNyBAQAogLyoKICAg
ICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcwogICAg
IENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAgICBDb3B5cmln
aHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24KIAogICAgIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAgICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtOTAs
NiArOTEsNyBAQAogCiAjaW5jbHVkZSAiZXdrX2ZyYW1lLmgiCiAjaW5jbHVkZSAiZXdrX2hpc3Rv
cnkuaCIKKyNpbmNsdWRlICJld2tfaGlzdG9yeV9kZWxlZ2F0ZS5oIgogI2luY2x1ZGUgImV3a19q
cy5oIgogI2luY2x1ZGUgImV3a193aW5kb3dfZmVhdHVyZXMuaCIKIApAQCAtMjMzOCw2ICsyMzQw
LDMwIEBAIEVBUEkgRWluYV9Cb29sIGV3a192aWV3X21peGVkX2NvbnRlbnRfZGlzcGxheWVkX2dl
dChjb25zdCBFdmFzX09iamVjdCAqbyk7CiBFQVBJIEVpbmFfQm9vbCBld2tfdmlld19taXhlZF9j
b250ZW50X3J1bl9nZXQoY29uc3QgRXZhc19PYmplY3QgKm8pOwogCiAvKioKKyAqIFJldHVybnMg
dGhlIEV3a19IaXN0b3J5X0RlbGVnYXRlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHZpZXcuCisgKgor
ICogQHBhcmFtIG8gVGhlIHZpZXcgdG8gcXVlcnkuCisgKgorICogQHJldHVybiBAYyBFd2tfSGlz
dG9yeV9EZWxlZ2F0ZSBhc3NvY2lhdGVkIHdpdGggdGhpcyB2aWV3IG9yIEBjIDAgaWYgdGhlcmUg
aXMgbm8gYXNzb2NpYXRlZCBFd2tfSGlzdG9yeV9EZWxlZ2F0ZQorICoKKyAqIEBzYSBld2tfdmll
d19oaXN0b3J5X2RlbGVnYXRlX3NldAorICovCitFQVBJIEV3a19IaXN0b3J5X0RlbGVnYXRlKiBl
d2tfdmlld19oaXN0b3J5X2RlbGVnYXRlX2dldChjb25zdCBFdmFzX09iamVjdCAqbyk7CisKKy8q
KgorICogQXNzb2NpYXRlcyBhIG5ldyBFd2tfSGlzdG9yeV9EZWxlZ2F0ZSB3aXRoIHRoaXMgdmll
dy4KKyAqCisgKiBAbm90ZSBUaGUgdmlldyB0YWtlcyBvd25lcnNoaXAgb3ZlciB0aGUgZGVsZWdh
dGUuIElmIHRoZSBhc3NvY2lhdGVkIGRlbGVnYXRlIHNob3VsZCBiZSBkZWxldGVkCisgKiAgICAg
ICBpbW1pZGlhdGVseSBld2tfdmlld19oaXN0b3J5X2RlbGVnYXRlX3NldChjb25zdCBFdmFzX09i
amVjdCAqbywgMCkgc2hhbGwgYmUgaW52b2tlZAorICoKKyAqIEBwYXJhbSBvIFRoZSB2aWV3IHRv
IGNoYW5nZS4KKyAqIEBwYXJhbSBzZXNzaW9uIFRoZSBuZXcgRXdrX0hpc3RvcnlfRGVsZWdhdGUu
CisgKgorICogQHNhIGV3a192aWV3X2hpc3RvcnlfZGVsZWdhdGVfZ2V0CisgKi8KK0VBUEkgdm9p
ZCBld2tfdmlld19oaXN0b3J5X2RlbGVnYXRlX3NldChjb25zdCBFdmFzX09iamVjdCAqbywgRXdr
X0hpc3RvcnlfRGVsZWdhdGUgKmRlbGVnYXRlKTsKKworLyoqCiAgKiBSZXR1cm5zIHRoZSBTb3Vw
U2Vzc2lvbiBhc3NvY2lhdGVkIHdpdGggdGhpcyB2aWV3LgogICoKICAqIEJ5IGRlZmF1bHQsIGFs
bCB2aWV3cyBzaGFyZSB0aGUgc2FtZSwgZGVmYXVsdCBzb3VwIHNlc3Npb24gYWxzbyBhdmFpbGFi
bGUKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAw
NTlkZWNhLi5jZDJlYWI1IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTItMDMtMzAgIE1pa2hhaWwgUG96ZG55YWtv
diAgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CisKKyAgICAgICAgW0VGTF0gR2xvYmFs
IGhpc3RvcnkgZGVsZWdhdGUgc3VwcG9ydCBmb3IgRUZMIHBvcnQKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyNTc5CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ3JlYXRlIGhpc3RvcnkgZGVsZWdhdGUgYW5k
IHNldCBpdCBmb3IgYXBwcm9wcmlhdGUgdGVzdHMuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJl
ZS9lZmwvQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvZWZsL0R1bXBS
ZW5kZXJUcmVlLmNwcDoKKyAgICAgICAgKGlzR2xvYmFsSGlzdG9yeVRlc3QpOgorICAgICAgICAo
cnVuVGVzdCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvZWZsL0hpc3RvcnlEZWxlZ2F0ZS5j
cHA6IEFkZGVkLgorICAgICAgICAoZGlkTmF2aWdhdGVXaXRoTmF2aWdhdGlvbkRhdGEpOgorICAg
ICAgICAoZGlkUGVyZm9ybUNsaWVudFJlZGlyZWN0RnJvbVVSTCk6CisgICAgICAgIChkaWRQZXJm
b3JtU2VydmVyUmVkaXJlY3RGcm9tVVJMKToKKyAgICAgICAgKHVwZGF0ZUhpc3RvcnlUaXRsZSk6
CisgICAgICAgIChwb3B1bGF0ZVZpc2l0ZWRMaW5rc0ZvcldlYlZpZXcpOgorICAgICAgICAoaGlz
dG9yeV9kZWxlZ2F0ZV9uZXcpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2VmbC9IaXN0b3J5
RGVsZWdhdGUuaDogQWRkZWQuCisKIDIwMTItMDMtMjkgIFZpbmVldCBDaGF1ZGhhcnkgIDxyZ2Y3
NDhAbW90b3JvbGEuY29tPgogCiAgICAgICAgIFJlbW92ZSBjdXN0b20gYmluZGluZ3MgZm9ybSBJ
bnRlcm5hbHMuaWRsIG9mIGF0dHJpYnV0ZSB0eXBlIEFycmF5LgpkaWZmIC0tZ2l0IGEvVG9vbHMv
RHVtcFJlbmRlclRyZWUvZWZsL0NNYWtlTGlzdHMudHh0IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUv
ZWZsL0NNYWtlTGlzdHMudHh0CmluZGV4IGNjOGRmYWYuLjM5MjFhOGEgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9DTWFrZUxpc3RzLnR4dAorKysgYi9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9lZmwvQ01ha2VMaXN0cy50eHQKQEAgLTEyLDYgKzEyLDcgQEAgU0VUKER1bXBSZW5k
ZXJUcmVlX1NPVVJDRVMKICAgICAke1RPT0xTX0RJUn0vRHVtcFJlbmRlclRyZWUvZWZsL0V2ZW50
U2VuZGVyLmNwcAogICAgICR7VE9PTFNfRElSfS9EdW1wUmVuZGVyVHJlZS9lZmwvRm9udE1hbmFn
ZW1lbnQuY3BwCiAgICAgJHtUT09MU19ESVJ9L0R1bXBSZW5kZXJUcmVlL2VmbC9HQ0NvbnRyb2xs
ZXJFZmwuY3BwCisgICAgJHtUT09MU19ESVJ9L0R1bXBSZW5kZXJUcmVlL2VmbC9IaXN0b3J5RGVs
ZWdhdGUuY3BwCiAgICAgJHtUT09MU19ESVJ9L0R1bXBSZW5kZXJUcmVlL2VmbC9KU1N0cmluZ1V0
aWxzLmNwcAogICAgICR7VE9PTFNfRElSfS9EdW1wUmVuZGVyVHJlZS9lZmwvTGF5b3V0VGVzdENv
bnRyb2xsZXJFZmwuY3BwCiAgICAgJHtUT09MU19ESVJ9L0R1bXBSZW5kZXJUcmVlL2VmbC9QaXhl
bER1bXBTdXBwb3J0RWZsLmNwcApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZs
L0R1bXBSZW5kZXJUcmVlLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9EdW1wUmVuZGVy
VHJlZS5jcHAKaW5kZXggYmI4ZjdkMi4uOWU2NjdmNCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJl
bmRlclRyZWUvZWZsL0R1bXBSZW5kZXJUcmVlLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9lZmwvRHVtcFJlbmRlclRyZWUuY3BwCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiRHVt
cFJlbmRlclRyZWVWaWV3LmgiCiAjaW5jbHVkZSAiRXZlbnRTZW5kZXIuaCIKICNpbmNsdWRlICJG
b250TWFuYWdlbWVudC5oIgorI2luY2x1ZGUgIkhpc3RvcnlEZWxlZ2F0ZS5oIgogI2luY2x1ZGUg
IkxheW91dFRlc3RDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNp
bmNsdWRlICJQaXhlbER1bXBTdXBwb3J0LmgiCkBAIC0yMTgsNiArMjE5LDExIEBAIHN0YXRpYyB2
b2lkIGNyZWF0ZUxheW91dFRlc3RDb250cm9sbGVyKGNvbnN0IFN0cmluZyYgdGVzdFVSTCwgY29u
c3QgU3RyaW5nJiBleHBlCiAgICAgfQogfQogCitzdGF0aWMgYm9vbCBpc0dsb2JhbEhpc3RvcnlU
ZXN0KGNvbnN0IFN0cmluZyYgY1Rlc3RQYXRoT3JVUkwpCit7CisgICAgcmV0dXJuIGNUZXN0UGF0
aE9yVVJMLmNvbnRhaW5zKCJnbG9iYWxoaXN0b3J5LyIpOworfQorCiBzdGF0aWMgdm9pZCBydW5U
ZXN0KGNvbnN0IGNoYXIqIGNUZXN0UGF0aE9yVVJMKQogewogICAgIGNvbnN0IFN0cmluZyB0ZXN0
UGF0aE9yVVJMID0gU3RyaW5nOjpmcm9tVVRGOChjVGVzdFBhdGhPclVSTCk7CkBAIC0yNDIsNiAr
MjQ4LDkgQEAgc3RhdGljIHZvaWQgcnVuVGVzdChjb25zdCBjaGFyKiBjVGVzdFBhdGhPclVSTCkK
ICAgICBjb25zdCBFd2tfSGlzdG9yeSogaGlzdG9yeSA9IGV3a192aWV3X2hpc3RvcnlfZ2V0KGJy
b3dzZXItPm1haW5WaWV3KCkpOwogICAgIHByZXZUZXN0QkZJdGVtID0gZXdrX2hpc3RvcnlfaGlz
dG9yeV9pdGVtX2N1cnJlbnRfZ2V0KGhpc3RvcnkpOwogCisgICAgaWYgKGlzR2xvYmFsSGlzdG9y
eVRlc3QodGVzdFVSTCkpCisgICAgICAgIGV3a192aWV3X2hpc3RvcnlfZGVsZWdhdGVfc2V0KGJy
b3dzZXItPm1haW5WaWV3KCksIGhpc3RvcnlfZGVsZWdhdGVfbmV3KGdMYXlvdXRUZXN0Q29udHJv
bGxlci5nZXQoKSkpOworCiAgICAgZXZhc19vYmplY3RfZm9jdXNfc2V0KGJyb3dzZXItPm1haW5W
aWV3KCksIEVJTkFfVFJVRSk7CiAgICAgZXdrX3ZpZXdfdXJpX3NldChicm93c2VyLT5tYWluVmll
dygpLCB0ZXN0VVJMLnV0ZjgoKS5kYXRhKCkpOwogCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9lZmwvSGlzdG9yeURlbGVnYXRlLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Vm
bC9IaXN0b3J5RGVsZWdhdGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjZiZWI4MGYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvSGlz
dG9yeURlbGVnYXRlLmNwcApAQCAtMCwwICsxLDEwMSBAQAorLyoKKyogQ29weXJpZ2h0IChjKSAy
MDEyLCBJbnRlbCBDb3Jwb3JhdGlvbgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBt
ZXQ6CisqCisqICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisqIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9j
dW1lbnRhdGlvbgorKiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyogKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEludGVsIENvcnBvcmF0aW9uIG5v
ciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAor
KiBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFT
IElTIgorKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRQorKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQor
KiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkhpc3RvcnlEZWxlZ2F0ZS5oIgorCisjaW5jbHVkZSAiTGF5b3V0VGVzdENv
bnRyb2xsZXIuaCIKKworI2luY2x1ZGUgPGVpbmFfc2FmZXR5X2NoZWNrcy5oPgorCitzdGF0aWMg
dm9pZCBkaWROYXZpZ2F0ZVdpdGhOYXZpZ2F0aW9uRGF0YShFd2tfSGlzdG9yeV9EZWxlZ2F0ZSos
IGNvbnN0IEV2YXNfT2JqZWN0KiwgRXdrX05hdmlnYXRpb25fRGF0YSogbmF2aWdhdGlvbkRhdGEs
IGNvbnN0IEV2YXNfT2JqZWN0KikKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihu
YXZpZ2F0aW9uRGF0YSk7CisgICAgY29uc3QgYm9vbCB3YXNGYWlsdXJlID0gbmF2aWdhdGlvbkRh
dGEtPmhhc1N1YnN0aXR1dGVEYXRhIHx8ICBuYXZpZ2F0aW9uRGF0YS0+cmVzcG9uc2Uuc3RhdHVz
X2NvZGUgPj0gNDAwOworICAgIGNvbnN0IGJvb2wgd2FzUmVkaXJlY3RlZCA9IG5hdmlnYXRpb25E
YXRhLT5jbGllbnRSZWRpcmVjdFNvdXJjZSAmJiAqKG5hdmlnYXRpb25EYXRhLT5jbGllbnRSZWRp
cmVjdFNvdXJjZSk7CisKKyAgICBwcmludGYoIldlYlZpZXcgbmF2aWdhdGVkIHRvIHVybCBcIiVz
XCIgd2l0aCB0aXRsZSBcIiVzXCIgd2l0aCBIVFRQIGVxdWl2YWxlbnQgbWV0aG9kIFwiJXNcIi4g
IFRoZSBuYXZpZ2F0aW9uIHdhcyAlcyBhbmQgd2FzICVzJXMuXG4iLAorICAgICAgICBuYXZpZ2F0
aW9uRGF0YS0+dXJsLCAvLyBGSVhNRTogaGFubGRsZSB1cmwgdG8gYmUgc3VpdGFibGUgZm9yIHRl
c3QKKyAgICAgICAgbmF2aWdhdGlvbkRhdGEtPnRpdGxlLAorICAgICAgICBuYXZpZ2F0aW9uRGF0
YS0+cmVxdWVzdC5odHRwX21ldGhvZCwKKyAgICAgICAgd2FzRmFpbHVyZT8gImEgZmFpbHVyZSIg
OiAic3VjY2Vzc2Z1bCIsCisgICAgICAgICh3YXNSZWRpcmVjdGVkID8gImEgY2xpZW50IHJlZGly
ZWN0IGZyb20gIiA6ICJub3QgYSBjbGllbnQgcmVkaXJlY3QiKSwKKyAgICAgICAgKHdhc1JlZGly
ZWN0ZWQgPyBuYXZpZ2F0aW9uRGF0YS0+Y2xpZW50UmVkaXJlY3RTb3VyY2UgOiAiIikpOworfQor
CitzdGF0aWMgdm9pZCBkaWRQZXJmb3JtQ2xpZW50UmVkaXJlY3RGcm9tVVJMKEV3a19IaXN0b3J5
X0RlbGVnYXRlKiBoaXN0b3J5RGVsZWdhdGUsIGNvbnN0IEV2YXNfT2JqZWN0KiAvKmV3a1ZpZXcq
LywgY29uc3QgY2hhciogc291cmNlVVJMLCBjb25zdCBjaGFyKiBkZXN0aW5hdGlvblVSTCwgY29u
c3QgRXZhc19PYmplY3QqKQoreworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVy
ID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihoaXN0b3J5RGVsZWdhdGUtPmRh
dGEpOworCisgICAgaWYgKCFjb250cm9sbGVyLT5kdW1wSGlzdG9yeURlbGVnYXRlQ2FsbGJhY2tz
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIHByaW50ZigiV2ViVmlldyBwZXJmb3JtZWQgYSBj
bGllbnQgcmVkaXJlY3QgZnJvbSBcIiVzXCIgdG8gXCIlc1wiLlxuIiwgc291cmNlVVJMLCBkZXN0
aW5hdGlvblVSTCk7Cit9CisKK3N0YXRpYyB2b2lkIGRpZFBlcmZvcm1TZXJ2ZXJSZWRpcmVjdEZy
b21VUkwoRXdrX0hpc3RvcnlfRGVsZWdhdGUqIGhkLCBjb25zdCBFdmFzX09iamVjdCosIGNvbnN0
IGNoYXIqIHNvdXJjZVVSTCwgY29uc3QgY2hhciogZGVzdGluYXRpb25VUkwsIGNvbnN0IEV2YXNf
T2JqZWN0KikKK3sKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRp
Y19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oaGQtPmRhdGEpOworCisgICAgaWYgKCFjb250
cm9sbGVyLT5kdW1wSGlzdG9yeURlbGVnYXRlQ2FsbGJhY2tzKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIHByaW50ZigiV2ViVmlldyBwZXJmb3JtZWQgYSBzZXJ2ZXIgcmVkaXJlY3QgZnJvbSBc
IiVzXCIgdG8gXCIlc1wiLlxuIiwgc291cmNlVVJMLCBkZXN0aW5hdGlvblVSTCk7Cit9CisKK3N0
YXRpYyB2b2lkIHVwZGF0ZUhpc3RvcnlUaXRsZShFd2tfSGlzdG9yeV9EZWxlZ2F0ZSosIGNvbnN0
IEV2YXNfT2JqZWN0KiwgY29uc3QgY2hhciogdGl0bGUsIGNvbnN0IGNoYXIqIHVybCkKK3sKKyAg
ICBwcmludGYoIldlYlZpZXcgdXBkYXRlZCB0aGUgdGl0bGUgZm9yIGhpc3RvcnkgVVJMIFwiJXNc
IiB0byBcIiVzXCIuXG4iLCB1cmwsIHRpdGxlKTsKK30KKworc3RhdGljIHZvaWQgcG9wdWxhdGVW
aXNpdGVkTGlua3NGb3JXZWJWaWV3KEV3a19IaXN0b3J5X0RlbGVnYXRlKiBoaXN0b3J5RGVsZWdh
dGUsIGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQoreworICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOKGV3a1ZpZXcpOworCisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xs
ZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KGhpc3RvcnlEZWxlZ2F0ZS0+
ZGF0YSk7CisKKyAgICBpZiAoY29udHJvbGxlci0+ZHVtcFZpc2l0ZWRMaW5rc0NhbGxiYWNrKCkp
CisgICAgICAgIHByaW50ZigiQXNrZWQgdG8gcG9wdWxhdGUgdmlzaXRlZCBsaW5rcyBmb3IgV2Vi
VmlldyBcIiVzXCJcbiIsIGV3a192aWV3X3VyaV9nZXQoZXdrVmlldykpOworfQorCitFd2tfSGlz
dG9yeV9EZWxlZ2F0ZSogaGlzdG9yeV9kZWxlZ2F0ZV9uZXcoTGF5b3V0VGVzdENvbnRyb2xsZXIq
IGNvbnRyb2xsZXIpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGNvbnRy
b2xsZXIsIDApOworCisgICAgRXdrX0hpc3RvcnlfRGVsZWdhdGUqIHJlcyA9IGV3a19oaXN0b3J5
X2RlbGVnYXRlX25ldygwKTsgLy8gZG8gbm90IG5lZWQgZGF0YSBkZWxldGVyCisKKyAgICByZXMt
PmFwaS0+ZGlkX25hdmlnYXRlX3dpdGhfbmF2aWdhdGlvbl9kYXRhID0gZGlkTmF2aWdhdGVXaXRo
TmF2aWdhdGlvbkRhdGE7CisgICAgcmVzLT5hcGktPmRpZF9wZXJmb3JtX2NsaWVudF9yZWRpcmVj
dF9mcm9tX3VybCA9IGRpZFBlcmZvcm1DbGllbnRSZWRpcmVjdEZyb21VUkw7CisgICAgcmVzLT5h
cGktPmRpZF9wZXJmb3JtX3NlcnZlcl9yZWRpcmVjdF9mcm9tX3VybCA9IGRpZFBlcmZvcm1TZXJ2
ZXJSZWRpcmVjdEZyb21VUkw7CisgICAgcmVzLT5hcGktPnVwZGF0ZV9oaXN0b3J5X3RpdGxlID0g
dXBkYXRlSGlzdG9yeVRpdGxlOworICAgIHJlcy0+YXBpLT5wb3B1bGF0ZV92aXNpdGVkX2xpbmtz
X2Zvcl92aWV3ID0gcG9wdWxhdGVWaXNpdGVkTGlua3NGb3JXZWJWaWV3OworICAgIHJlcy0+ZGF0
YSA9IGNvbnRyb2xsZXI7CisKKyAgICByZXR1cm4gcmVzOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMv
RHVtcFJlbmRlclRyZWUvZWZsL0hpc3RvcnlEZWxlZ2F0ZS5oIGIvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvZWZsL0hpc3RvcnlEZWxlZ2F0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmIxYTlkMWEKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwv
SGlzdG9yeURlbGVnYXRlLmgKQEAgLTAsMCArMSwzOSBAQAorLyoKKyogQ29weXJpZ2h0IChjKSAy
MDEyLCBJbnRlbCBDb3Jwb3JhdGlvbgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBt
ZXQ6CisqCisqICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisqIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9j
dW1lbnRhdGlvbgorKiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyogKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEludGVsIENvcnBvcmF0aW9uIG5v
ciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAor
KiBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFT
IElTIgorKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRQorKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQor
KiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKworI2lmbmRlZiBIaXN0b3J5RGVs
ZWdhdGVfaAorI2RlZmluZSBIaXN0b3J5RGVsZWdhdGVfaAorCisjaW5jbHVkZSA8RVdlYktpdC5o
PgorCitjbGFzcyBMYXlvdXRUZXN0Q29udHJvbGxlcjsKKworRXdrX0hpc3RvcnlfRGVsZWdhdGUg
Kmhpc3RvcnlfZGVsZWdhdGVfbmV3KExheW91dFRlc3RDb250cm9sbGVyKik7CisKKyNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134795</attachid>
            <date>2012-03-30 06:04:18 -0700</date>
            <delta_ts>2012-04-03 00:43:22 -0700</delta_ts>
            <desc>global history delegate v2 rebased</desc>
            <filename>global_history_delegate_updated.patch</filename>
            <type>text/plain</type>
            <size>37252</size>
            <attacher name="Mikhail Pozdnyakov">mikhail.pozdnyakov</attacher>
            
              <data encoding="base64">Y29tbWl0IGYyMDY5MjRjMzQ1YmJlZDMwZTg1NTAyZjQyMTE0Njc2MGI1NTZhYTEKQXV0aG9yOiBN
aWtoYWlsIFBvemRueWFrb3YgPHBvemRueWFrb3YubWlraGFpbEBnbWFpbC5jb20+CkRhdGU6ICAg
RnJpIE1hciAzMCAxNjowMTowNSAyMDEyICswMzAwCgogICAgZ2xvYmFsIGhpc3RvcnkgZGVsZWdh
dGUuCgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCmluZGV4IDE3NzFhZjkuLmVmOGIwMmYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0No
YW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAx
Mi0wMy0zMCAgTWlraGFpbCBQb3pkbnlha292ICA8bWlraGFpbC5wb3pkbnlha292QGludGVsLmNv
bT4KKworICAgICAgICBbRUZMXSBHbG9iYWwgaGlzdG9yeSBkZWxlZ2F0ZSBzdXBwb3J0IGZvciBF
RkwgcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
ODI1NzkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IHBsYXRmb3JtL2VmbC9Ta2lwcGVkOgorCiAyMDEyLTAzLTMwICBQYXZlbCBGZWxkbWFuICA8cGZl
bGRtYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IGVkaXRpbmcgcmVz
ZXRzIGxpbmUtZW5kaW5nIG9mIHRoZSB3aG9sZSBmaWxlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9lZmwvU2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2VmbC9Ta2lwcGVk
CmluZGV4IDJkMjliZmUuLmQ0NzA3ODggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3Jt
L2VmbC9Ta2lwcGVkCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2VmbC9Ta2lwcGVkCkBAIC04
MjEsNiArODIxLDggQEAgZmFzdC9mb3Jtcy92YWxpZGF0aW9uLW1lc3NhZ2Utb24tdGV4dGFyZWEu
aHRtbAogIyBUaGVzZSB0ZXN0cyBuZWVkcyBlbmhhbmNlZCBmcmFtZWxvYWRlciBkZWxlZ2F0ZSBs
b2dnaW5nIGluIERSVAogZmFzdC9sb2FkZXIvcmVjdXJzaXZlLWJlZm9yZS11bmxvYWQtY3Jhc2gu
aHRtbAogZmFzdC9sb2FkZXIvbnVsbC1yZXF1ZXN0LWFmdGVyLXdpbGxTZW5kUmVxdWVzdC5odG1s
CitodHRwL3Rlc3RzL2dsb2JhbGhpc3RvcnkvaGlzdG9yeS1kZWxlZ2F0ZS1iYXNpYy1yZWZyZXNo
LXJlZGlyZWN0Lmh0bWwKK2h0dHAvdGVzdHMvZ2xvYmFsaGlzdG9yeS9oaXN0b3J5LWRlbGVnYXRl
LWJhc2ljLTMwMi1yZWRpcmVjdC5odG1sCiAKICMgTmVlZCB0byBhZGQgZnVuY3Rpb25hbGl0eSB0
byBEdW1wUmVuZGVyVHJlZSB0byBoYW5kbGUgZXJyb3IgcGFnZXMKIGZhc3QvaGlzdG9yeS9iYWNr
LWZvcndhcmQtcmVzZXQtYWZ0ZXItZXJyb3ItaGFuZGxpbmcuaHRtbApAQCAtMTAzMCw5ICsxMDMy
LDYgQEAgZmFzdC9kb20vdGl0bGUtZGlyZWN0aW9uYWxpdHkuaHRtbAogZmFzdC9kb20vV2luZG93
L3Nsb3ctdW5sb2FkLWhhbmRsZXIuaHRtbAogZmFzdC9kb20vV2luZG93L3Nsb3ctdW5sb2FkLWhh
bmRsZXItb25seS1mcmFtZS1pcy1zdG9wcGVkLmh0bWwKIAotIyBUaGUgRUZMIHBvcnQgaGFzIG5v
IGdsb2JhbCBoaXN0b3J5IGRlbGVnYXRlCi1odHRwL3Rlc3RzL2dsb2JhbGhpc3RvcnkKLQogIyBQ
YXN0ZUJvYXJkOjpwbGFpblRleHQoKSBkb2VzIG5vdCBzdXBwb3J0IGZpbGUgbmFtZXMuCiBlZGl0
aW5nL3Bhc3RlYm9hcmQvZHJhZy1maWxlcy10by1lZGl0YWJsZS1lbGVtZW50Lmh0bWwKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxv
ZwppbmRleCBiNzMxYmQ5Li5kOWYyNTIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDEy
LTAzLTMwICBNaWtoYWlsIFBvemRueWFrb3YgIDxtaWtoYWlsLnBvemRueWFrb3ZAaW50ZWwuY29t
PgorCisgICAgICAgIFtFRkxdIEdsb2JhbCBoaXN0b3J5IGRlbGVnYXRlIHN1cHBvcnQgZm9yIEVG
TCBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04
MjU3OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
UGxhdGZvcm1FZmwuY21ha2U6CisKIDIwMTItMDMtMjIgIFJhcGhhZWwgS3VibyBkYSBDb3N0YSAg
PHJha3Vjb0BGcmVlQlNELm9yZz4KIAogICAgICAgICBbQ01ha2VdIFVucmV2aWV3ZWQgYnVpbGQg
Zml4IGFmdGVyIHIxMTE3NzguCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtRWZs
LmNtYWtlIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybUVmbC5jbWFrZQppbmRleCAxMDAxMGM5Li4x
NzdmYmFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtRWZsLmNtYWtlCisrKyBi
L1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1FZmwuY21ha2UKQEAgLTg5LDYgKzg5LDcgQEAgTElTVChB
UFBFTkQgV2ViS2l0X1NPVVJDRVMKICAgICBlZmwvZXdrL2V3a19jb29raWVzLmNwcAogICAgIGVm
bC9ld2svZXdrX2ZyYW1lLmNwcAogICAgIGVmbC9ld2svZXdrX2hpc3RvcnkuY3BwCisgICAgZWZs
L2V3ay9ld2tfaGlzdG9yeV9kZWxlZ2F0ZS5jcHAKICAgICBlZmwvZXdrL2V3a19qcy5jcHAKICAg
ICBlZmwvZXdrL2V3a19tYWluLmNwcAogICAgIGVmbC9ld2svZXdrX25ldHdvcmsuY3BwCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2VmbC9D
aGFuZ2VMb2cKaW5kZXggYTE1MzNiYy4uOWU0OGNhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9lZmwvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDM4IEBACisyMDEyLTAzLTMwICBNaWtoYWlsIFBvemRueWFrb3YgIDxtaWtoYWlsLnBvemRu
eWFrb3ZAaW50ZWwuY29tPgorCisgICAgICAgIFtFRkxdIEdsb2JhbCBoaXN0b3J5IGRlbGVnYXRl
IHN1cHBvcnQgZm9yIEVGTCBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD04MjU3OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEFkZGVkIEV3a19IaXN0b3J5X0RlbGVnYXRlIGludGVyZmFjZSBhbmQgRXdr
X05hdmlnYXRpb25fRGF0YSBzdHJ1Y3R1cmUuIAorICAgICAgICBQdXQgRXdrX0hpc3RvcnlfRGVs
ZWdhdGUgdXNhZ2UgdG8gRnJhbWVMb2FkZXJDbGllbnRFZmwgYW5kIENocm9tZUNsaWVudEVmbCBj
bGFzc2VzLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50RWZsLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudEVmbDo6cG9wdWxhdGVWaXNpdGVkTGlua3Mp
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xp
ZW50RWZsLmg6CisgICAgICAgIChDaHJvbWVDbGllbnRFZmwpOgorICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50RWZsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
TG9hZGVyQ2xpZW50RWZsOjpkaXNwYXRjaFdpbGxTZW5kUmVxdWVzdCk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZUxvYWRlckNsaWVudEVmbDo6YXNzaWduSWRlbnRpZmllclRvSW5pdGlhbFJlcXVl
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRFZmw6OmRpc3BhdGNoRGVj
aWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxv
YWRlckNsaWVudEVmbDo6dXBkYXRlR2xvYmFsSGlzdG9yeVJlZGlyZWN0TGlua3MpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRFZmw6OnNldFRpdGxlKToKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50RWZsOjp1cGRhdGVHbG9iYWxIaXN0b3J5KToKKyAgICAg
ICAgKiBld2svRVdlYktpdC5oOgorICAgICAgICAqIGV3ay9ld2tfZnJhbWUuaDoKKyAgICAgICAg
KiBld2svZXdrX2hpc3RvcnlfZGVsZWdhdGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKGV3a19oaXN0
b3J5X2RlbGVnYXRlX25ldyk6CisgICAgICAgIChld2tfaGlzdG9yeV9kZWxlZ2F0ZV9mcmVlKToK
KyAgICAgICAgKiBld2svZXdrX2hpc3RvcnlfZGVsZWdhdGUuaDogQWRkZWQuCisgICAgICAgICog
ZXdrL2V3a192aWV3LmNwcDoKKyAgICAgICAgKF9Fd2tfVmlld19Qcml2YXRlX0RhdGEpOgorICAg
ICAgICAoX2V3a192aWV3X3ByaXZfZGVsKToKKyAgICAgICAgKGV3a192aWV3X2hpc3RvcnlfZGVs
ZWdhdGVfZ2V0KToKKyAgICAgICAgKGV3a192aWV3X2hpc3RvcnlfZGVsZWdhdGVfc2V0KToKKyAg
ICAgICAgKiBld2svZXdrX3ZpZXcuaDoKKwogMjAxMi0wMy0yOCAgTmF0ZSBDaGFwaW4gIDxqYXBo
ZXRAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJlbW92ZSBkaXNwYXRjaERpZExvYWRNYWluUmVz
b3VyY2UgY2FsbGJhY2ssIHNpbmNlIG5vCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9X
ZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRFZmwuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvV2Vi
Q29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50RWZsLmNwcAppbmRleCA2OGFkZjVmLi40NWY0ZGFjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRF
ZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVu
dEVmbC5jcHAKQEAgLTU0OSw2ICs1NDksMTUgQEAgUGFzc1JlZlB0cjxTZWFyY2hQb3B1cE1lbnU+
IENocm9tZUNsaWVudEVmbDo6Y3JlYXRlU2VhcmNoUG9wdXBNZW51KFBvcHVwTWVudUNsaWUKICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFNlYXJjaFBvcHVwTWVudUVmbChjbGllbnQpKTsKIH0KIAor
dm9pZCBDaHJvbWVDbGllbnRFZmw6OnBvcHVsYXRlVmlzaXRlZExpbmtzKCkKK3sKKyAgICBFd2tf
SGlzdG9yeV9EZWxlZ2F0ZSogaGlzdG9yeURlbGVnYXRlID0gZXdrX3ZpZXdfaGlzdG9yeV9kZWxl
Z2F0ZV9nZXQobV92aWV3KTsKKyAgICBpZiAoaGlzdG9yeURlbGVnYXRlCisgICAgICAgICYmIGhp
c3RvcnlEZWxlZ2F0ZS0+YXBpCisgICAgICAgICYmIGhpc3RvcnlEZWxlZ2F0ZS0+YXBpLT5wb3B1
bGF0ZV92aXNpdGVkX2xpbmtzX2Zvcl92aWV3ICkKKyAgICAgICAgKCpoaXN0b3J5RGVsZWdhdGUt
PmFwaS0+cG9wdWxhdGVfdmlzaXRlZF9saW5rc19mb3JfdmlldykoaGlzdG9yeURlbGVnYXRlLCBt
X3ZpZXcpOworfQorCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogdm9pZCBDaHJv
bWVDbGllbnRFZmw6OmF0dGFjaFJvb3RHcmFwaGljc0xheWVyKEZyYW1lKiBmcmFtZSwgR3JhcGhp
Y3NMYXllciogcm9vdExheWVyKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvV2Vi
Q29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50RWZsLmggYi9Tb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3Jl
U3VwcG9ydC9DaHJvbWVDbGllbnRFZmwuaAppbmRleCA5Y2U5ZDY4Li5iMmJhZDZiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRFZmwuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRFZmwuaApA
QCAtMTY0LDYgKzE2NCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaGFzT3BlbmVkUG9w
dXAoKSBjb25zdDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8UG9wdXBNZW51PiBjcmVhdGVQb3B1
cE1lbnUoUG9wdXBNZW51Q2xpZW50KikgY29uc3Q7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFNl
YXJjaFBvcHVwTWVudT4gY3JlYXRlU2VhcmNoUG9wdXBNZW51KFBvcHVwTWVudUNsaWVudCopIGNv
bnN0OworICAgIHZpcnR1YWwgdm9pZCBwb3B1bGF0ZVZpc2l0ZWRMaW5rcygpOwogCiAgICAgdmly
dHVhbCBib29sIHNob3VsZFJ1YmJlckJhbmRJbkRpcmVjdGlvbihXZWJDb3JlOjpTY3JvbGxEaXJl
Y3Rpb24pIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIHZvaWQgbnVtV2hlZWxF
dmVudEhhbmRsZXJzQ2hhbmdlZCh1bnNpZ25lZCkgeyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEVmbC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEVmbC5jcHAKaW5kZXgg
NmZhNWNjMC4uZTI2ZmFlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1
cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL1dl
YkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50RWZsLmNwcApAQCAtNyw2ICs3LDcgQEAKICAq
IENvcHlyaWdodCAoQykgMjAwOCBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbgogICogQ29weXJp
Z2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKICAqIENvcHlyaWdo
dCAoQykgMjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBJbnRlbCBDb3Jwb3JhdGlvbgogICoKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgpAQCAt
MTYyLDEzICsxNjMsMTUgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudEVmbDo6ZGlzcGF0Y2hEaWRD
YW5jZWxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShEb2N1bWVudExvYWQKIAogdm9pZCBGcmFtZUxv
YWRlckNsaWVudEVmbDo6ZGlzcGF0Y2hXaWxsU2VuZFJlcXVlc3QoRG9jdW1lbnRMb2FkZXIqIGxv
YWRlciwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBSZXNvdXJjZVJlcXVlc3QmIGNvcmVSZXF1
ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiBjb3JlUmVzcG9uc2UpCiB7Ci0gICAgQ1N0cmlu
ZyB1cmwgPSBjb3JlUmVxdWVzdC51cmwoKS5zdHJpbmcoKS51dGY4KCk7CisgICAgY29uc3QgQ1N0
cmluZyB1cmwgPSBjb3JlUmVxdWVzdC51cmwoKS5zdHJpbmcoKS51dGY4KCk7CiAgICAgREJHKCJS
ZXNvdXJjZSB1cmw9JXMiLCB1cmwuZGF0YSgpKTsKKyAgICBjb25zdCBDU3RyaW5nIG1ldGhvZCA9
IGNvcmVSZXF1ZXN0Lmh0dHBNZXRob2QoKS51dGY4KCk7CiAKLSAgICBFd2tfRnJhbWVfUmVzb3Vy
Y2VfUmVxdWVzdCByZXF1ZXN0ID0geyAwLCBpZGVudGlmaWVyIH07CisgICAgRXdrX0ZyYW1lX1Jl
c291cmNlX1JlcXVlc3QgcmVxdWVzdCA9IHsgMCwgMCwgaWRlbnRpZmllciB9OwogICAgIEV3a19G
cmFtZV9SZXNvdXJjZV9SZXF1ZXN0IG9yaWcgPSByZXF1ZXN0OyAvKiBJbml0aWFsaXplIGNvbnN0
IGZpZWxkcy4gKi8KIAogICAgIG9yaWcudXJsID0gcmVxdWVzdC51cmwgPSB1cmwuZGF0YSgpOwor
ICAgIG9yaWcuaHR0cF9tZXRob2QgPSByZXF1ZXN0Lmh0dHBfbWV0aG9kID0gbWV0aG9kLmRhdGEo
KTsKIAogICAgIGV3a19mcmFtZV9yZXF1ZXN0X3dpbGxfc2VuZChtX2ZyYW1lLCAmcmVxdWVzdCk7
CiAKQEAgLTIwMSw3ICsyMDQsNyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50RWZsOjphc3NpZ25J
ZGVudGlmaWVyVG9Jbml0aWFsUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlkZW50aQogICAgIENTdHJp
bmcgdXJsID0gY29yZVJlcXVlc3QudXJsKCkuc3RyaW5nKCkudXRmOCgpOwogICAgIERCRygiUmVz
b3VyY2UgdXJsPSVzIiwgdXJsLmRhdGEoKSk7CiAKLSAgICBFd2tfRnJhbWVfUmVzb3VyY2VfUmVx
dWVzdCByZXF1ZXN0ID0geyAwLCBpZGVudGlmaWVyIH07CisgICAgRXdrX0ZyYW1lX1Jlc291cmNl
X1JlcXVlc3QgcmVxdWVzdCA9IHsgMCwgMCwgaWRlbnRpZmllciB9OwogICAgIGV3a19mcmFtZV9y
ZXF1ZXN0X2Fzc2lnbl9pZGVudGlmaWVyKG1fZnJhbWUsICZyZXF1ZXN0KTsKIH0KIApAQCAtMjkz
LDEwICsyOTYsMTEgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudEVmbDo6ZGlzcGF0Y2hEZWNpZGVQ
b2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKEZyYW1lUG9saWN5RnUKIAogICAgIC8vIGlmIG5vdCBh
Y2NlcHROYXZpZ2F0aW9uUmVxdWVzdCAtIGxvb2sgYXQgUXQgLT4gUG9saWN5SWdub3JlOwogICAg
IC8vIEZJWE1FOiBkbyBwcm9wZXIgY2hlY2sgYW5kIG9ubHkgcmVzZXQgZm9ybXMgd2hlbiBvbiBQ
b2xpY3lJZ25vcmUKLSAgICBjaGFyKiB1cmwgPSBzdHJkdXAocmVzb3VyY2VSZXF1ZXN0LnVybCgp
LnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgIEV3a19GcmFtZV9SZXNvdXJjZV9SZXF1ZXN0
IHJlcXVlc3QgPSB7IHVybCwgMCB9OworICAgIGNvbnN0IENTdHJpbmcgdXJsID0gcmVzb3VyY2VS
ZXF1ZXN0LnVybCgpLnN0cmluZygpLnV0ZjgoKTsKKyAgICBjb25zdCBDU3RyaW5nIG1ldGhvZCA9
IHJlc291cmNlUmVxdWVzdC5odHRwTWV0aG9kKCkudXRmOCgpOworICAgIEV3a19GcmFtZV9SZXNv
dXJjZV9SZXF1ZXN0IHJlcXVlc3QgPSB7IHVybC5kYXRhKCksIG1ldGhvZC5kYXRhKCksIDAgfTsK
ICAgICBib29sIHJldCA9IGV3a192aWV3X25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uKG1fdmll
dywgJnJlcXVlc3QpOwotICAgIGZyZWUodXJsKTsKKwogCiAgICAgUG9saWN5QWN0aW9uIHBvbGlj
eTsKICAgICBpZiAoIXJldCkKQEAgLTQ2Niw2ICs0NzAsMjcgQEAgdm9pZCBGcmFtZUxvYWRlckNs
aWVudEVmbDo6cmVzdG9yZVZpZXdTdGF0ZSgpCiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRFZmw6
OnVwZGF0ZUdsb2JhbEhpc3RvcnlSZWRpcmVjdExpbmtzKCkKIHsKKyAgICBXZWJDb3JlOjpGcmFt
ZSogZnJhbWUgPSBFV0tQcml2YXRlOjpjb3JlRnJhbWUobV9mcmFtZSk7CisgICAgaWYgKCFmcmFt
ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqIGxvYWRl
ciA9IGZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKTsKKyAgICBpZiAoIWxvYWRlcikK
KyAgICAgICAgcmV0dXJuOworCisgICAgRXdrX0hpc3RvcnlfRGVsZWdhdGUqIGhpc3RvcnlEZWxl
Z2F0ZSA9IGV3a192aWV3X2hpc3RvcnlfZGVsZWdhdGVfZ2V0KG1fdmlldyk7CisgICAgaWYgKGhp
c3RvcnlEZWxlZ2F0ZSAmJiBoaXN0b3J5RGVsZWdhdGUtPmFwaSkgeworICAgICAgICBjb25zdCBD
U3RyaW5nIHNvdXJjZVVSTCA9IGxvYWRlci0+Y2xpZW50UmVkaXJlY3RTb3VyY2VGb3JIaXN0b3J5
KCkudXRmOCgpOworICAgICAgICBjb25zdCBDU3RyaW5nIGRlc3RVUkwgPSBsb2FkZXItPmNsaWVu
dFJlZGlyZWN0RGVzdGluYXRpb25Gb3JIaXN0b3J5KCkudXRmOCgpOworCisgICAgICAgIGlmICgh
bG9hZGVyLT5jbGllbnRSZWRpcmVjdFNvdXJjZUZvckhpc3RvcnkoKS5pc051bGwoKQorICAgICAg
ICAgICAgJiYgaGlzdG9yeURlbGVnYXRlLT5hcGktPmRpZF9wZXJmb3JtX2NsaWVudF9yZWRpcmVj
dF9mcm9tX3VybCkKKyAgICAgICAgICAgICgqaGlzdG9yeURlbGVnYXRlLT5hcGktPmRpZF9wZXJm
b3JtX2NsaWVudF9yZWRpcmVjdF9mcm9tX3VybCkoaGlzdG9yeURlbGVnYXRlLCBtX3ZpZXcsIHNv
dXJjZVVSTC5kYXRhKCksIGRlc3RVUkwuZGF0YSgpLCBtX2ZyYW1lKTsKKworICAgICAgICBpZiAo
IWxvYWRlci0+c2VydmVyUmVkaXJlY3RTb3VyY2VGb3JIaXN0b3J5KCkuaXNOdWxsKCkKKyAgICAg
ICAgICAgICYmIGhpc3RvcnlEZWxlZ2F0ZS0+YXBpLT5kaWRfcGVyZm9ybV9zZXJ2ZXJfcmVkaXJl
Y3RfZnJvbV91cmwpCisgICAgICAgICAgICAoKmhpc3RvcnlEZWxlZ2F0ZS0+YXBpLT5kaWRfcGVy
Zm9ybV9zZXJ2ZXJfcmVkaXJlY3RfZnJvbV91cmwpKGhpc3RvcnlEZWxlZ2F0ZSwgbV92aWV3LCBz
b3VyY2VVUkwuZGF0YSgpLCBkZXN0VVJMLmRhdGEoKSwgbV9mcmFtZSk7CisgICAgfQogfQogCiBi
b29sIEZyYW1lTG9hZGVyQ2xpZW50RWZsOjpzaG91bGRHb1RvSGlzdG9yeUl0ZW0oSGlzdG9yeUl0
ZW0qIGl0ZW0pIGNvbnN0CkBAIC03MTIsNyArNzM3LDEyIEBAIHZvaWQgRnJhbWVMb2FkZXJDbGll
bnRFZmw6OnByZXBhcmVGb3JEYXRhU291cmNlUmVwbGFjZW1lbnQoKQogCiB2b2lkIEZyYW1lTG9h
ZGVyQ2xpZW50RWZsOjpzZXRUaXRsZShjb25zdCBTdHJpbmdXaXRoRGlyZWN0aW9uJiB0aXRsZSwg
Y29uc3QgS1VSTCYgdXJsKQogewotICAgIC8vIG5vIG5lZWQgZm9yLCBkaXNwYXRjaERpZFJlY2Vp
dmVUaXRsZSBpcyB0aGUgcmlnaHQgY2FsbGJhY2sKKyAgICBFd2tfSGlzdG9yeV9EZWxlZ2F0ZSog
aGlzdG9yeURlbGVnYXRlID0gZXdrX3ZpZXdfaGlzdG9yeV9kZWxlZ2F0ZV9nZXQobV92aWV3KTsK
KworICAgIGlmIChoaXN0b3J5RGVsZWdhdGUKKyAgICAgICAgJiYgaGlzdG9yeURlbGVnYXRlLT5h
cGkKKyAgICAgICAgJiYgaGlzdG9yeURlbGVnYXRlLT5hcGktPnVwZGF0ZV9oaXN0b3J5X3RpdGxl
KQorICAgICAgICAoKmhpc3RvcnlEZWxlZ2F0ZS0+YXBpLT51cGRhdGVfaGlzdG9yeV90aXRsZSko
aGlzdG9yeURlbGVnYXRlLCBtX3ZpZXcsIHRpdGxlLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHVy
bC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKIH0KIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudEVm
bDo6ZGlzcGF0Y2hEaWRSZWNlaXZlQ29udGVudExlbmd0aChEb2N1bWVudExvYWRlciosIHVuc2ln
bmVkIGxvbmcgaWRlbnRpZmllciwgaW50IGRhdGFMZW5ndGgpCkBAIC04NzksNyArOTA5LDQzIEBA
IHZvaWQgRnJhbWVMb2FkZXJDbGllbnRFZmw6OnN0YXJ0RG93bmxvYWQoY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBTCiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRFZmw6OnVw
ZGF0ZUdsb2JhbEhpc3RvcnkoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgV2ViQ29y
ZTo6RnJhbWUqIGZyYW1lID0gRVdLUHJpdmF0ZTo6Y29yZUZyYW1lKG1fZnJhbWUpOworICAgIGlm
ICghZnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYkNvcmU6OkRvY3VtZW50TG9hZGVy
KiBsb2FkZXIgPSBmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCk7CisgICAgaWYgKCFs
b2FkZXIpCisgICAgICAgIHJldHVybjsKKworICAgIEV3a19IaXN0b3J5KiBoaXN0b3J5ID0gZXdr
X3ZpZXdfaGlzdG9yeV9nZXQobV92aWV3KTsKKyAgICBpZiAoIWhpc3RvcnkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGNvbnN0IENTdHJpbmcgdXJsRm9ySGlzdG9yeSA9IGxvYWRlci0+dXJsRm9y
SGlzdG9yeSgpLnN0cmluZygpLnV0ZjgoKTsKKyAgICBjb25zdCBDU3RyaW5nIHRpdGxlID0gbG9h
ZGVyLT50aXRsZSgpLnN0cmluZygpLnV0ZjgoKTsKKworICAgIEV3a19IaXN0b3J5X0l0ZW0qIGl0
ZW0gPSBld2tfaGlzdG9yeV9pdGVtX25ldyh1cmxGb3JIaXN0b3J5LmRhdGEoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUuZGF0YSgpKTsK
KyAgICBld2tfaGlzdG9yeV9oaXN0b3J5X2l0ZW1fYWRkKGhpc3RvcnksIGl0ZW0pOworICAgIGV3
a19oaXN0b3J5X2l0ZW1fZnJlZShpdGVtKTsKKworICAgIEV3a19IaXN0b3J5X0RlbGVnYXRlKiBo
aXN0b3J5RGVsZWdhdGUgPSBld2tfdmlld19oaXN0b3J5X2RlbGVnYXRlX2dldChtX3ZpZXcpOwor
ICAgIGlmIChoaXN0b3J5RGVsZWdhdGUKKyAgICAgICAgJiYgaGlzdG9yeURlbGVnYXRlLT5hcGkK
KyAgICAgICAgJiYgaGlzdG9yeURlbGVnYXRlLT5hcGktPmRpZF9uYXZpZ2F0ZV93aXRoX25hdmln
YXRpb25fZGF0YSkgeworICAgICAgICBjb25zdCBDU3RyaW5nIGNsaWVudFJlZGlyZWN0U291cmNl
ID0gbG9hZGVyLT5jbGllbnRSZWRpcmVjdFNvdXJjZUZvckhpc3RvcnkoKS51dGY4KCk7CisgICAg
ICAgIGNvbnN0IENTdHJpbmcgb3JpZ2luYWxVUkwgPSBsb2FkZXItPm9yaWdpbmFsVVJMKCkuc3Ry
aW5nKCkudXRmOCgpOworICAgICAgICBjb25zdCBDU3RyaW5nIGh0dHBNZXRob2QgPSBsb2FkZXIt
PnJlcXVlc3QoKS5odHRwTWV0aG9kKCkudXRmOCgpOworICAgICAgICBjb25zdCBDU3RyaW5nIHJl
c3BvbnNlVVJMID0gbG9hZGVyLT5yZXNwb25zZVVSTCgpLnN0cmluZygpLnV0ZjgoKTsKKyAgICAg
ICAgCisgICAgICAgIEV3a19OYXZpZ2F0aW9uX0RhdGEgZGF0YSA9CisgICAgICAgIHt1cmxGb3JI
aXN0b3J5LmRhdGEoKSwgdGl0bGUuZGF0YSgpLAorICAgICAgICAge29yaWdpbmFsVVJMLmRhdGEo
KSwgaHR0cE1ldGhvZC5kYXRhKCksIDB9LAorICAgICAgICAge3Jlc3BvbnNlVVJMLmRhdGEoKSwg
bG9hZGVyLT5yZXNwb25zZSgpLmh0dHBTdGF0dXNDb2RlKCl9LAorICAgICAgICAgbG9hZGVyLT5z
dWJzdGl0dXRlRGF0YSgpLmlzVmFsaWQoKSwgY2xpZW50UmVkaXJlY3RTb3VyY2UuZGF0YSgpfTsK
KworICAgICAgICAgKCpoaXN0b3J5RGVsZWdhdGUtPmFwaS0+ZGlkX25hdmlnYXRlX3dpdGhfbmF2
aWdhdGlvbl9kYXRhKShoaXN0b3J5RGVsZWdhdGUsIG1fdmlldywgJmRhdGEsIG1fZnJhbWUpOwor
ICAgIH0KIH0KIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudEVmbDo6c2F2ZVBsYXRmb3JtRGF0YVRv
Q2FjaGVkRnJhbWUoQ2FjaGVkRnJhbWUqKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwv
ZXdrL0VXZWJLaXQuaCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9FV2ViS2l0LmgKaW5kZXggMGZm
YjUxYy4uMzQyZDAzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL0VXZWJLaXQu
aAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svRVdlYktpdC5oCkBAIC0zNCw2ICszNCw3IEBA
CiAjaW5jbHVkZSAiZXdrX2Nvb2tpZXMuaCIKICNpbmNsdWRlICJld2tfZnJhbWUuaCIKICNpbmNs
dWRlICJld2tfaGlzdG9yeS5oIgorI2luY2x1ZGUgImV3a19oaXN0b3J5X2RlbGVnYXRlLmgiCiAj
aW5jbHVkZSAiZXdrX2pzLmgiCiAjaW5jbHVkZSAiZXdrX21haW4uaCIKICNpbmNsdWRlICJld2tf
bmV0d29yay5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19mcmFtZS5o
IGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19mcmFtZS5oCmluZGV4IGY3NDU1NWUuLjVhZDk2
ODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfZnJhbWUuaAorKysgYi9T
b3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2ZyYW1lLmgKQEAgLTEsNiArMSw3IEBACiAvKgogICAg
IENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCiAgICAg
Q29weXJpZ2h0IChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcworICAgIENvcHlyaWdo
dCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbgogCiAgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICAgIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC05Niwx
OCArOTcsMzMgQEAgc3RydWN0IF9Fd2tfRnJhbWVfTG9hZF9FcnJvciB7CiAKIC8vLyBDcmVhdGVz
IGEgdHlwZSBuYW1lIGZvciBfRXdrX0ZyYW1lX1Jlc291cmNlX1JlcXVlc3QuCiB0eXBlZGVmIHN0
cnVjdCBfRXdrX0ZyYW1lX1Jlc291cmNlX1JlcXVlc3QgRXdrX0ZyYW1lX1Jlc291cmNlX1JlcXVl
c3Q7CisKIC8qKgotICogQGJyaWVmICAgU3RydWN0dXJlIHVzZWQgdG8gcmVwb3J0IHJlc291cmNl
IHJlcXVlc3QuCisgKiBAYnJpZWYgICBTdHJ1Y3R1cmUgY29udGFpbmluZyBkZXRhaWxzIGFib3V0
IGEgcmVzb3VyY2UgcmVxdWVzdC4KICAqCi0gKiBEZXRhaWxzIGdpdmVuIGJlZm9yZSBhIHJlc291
cmNlIGlzIGxvYWRlZCBvbiBhIGdpdmVuIGZyYW1lLiBJdCdzIHVzZWQgYnkKLSAqIGV3a19mcmFt
ZV9yZXF1ZXN0X3dpbGxfc2VuZCgpIHRvIGluZm9ybSB0aGUgZGV0YWlscyBvZiBhIHRvLWJlLWxv
YWRlZAotICogcmVzb3VyY2UsIGFsbG93aW5nIHRoZW0gdG8gYmUgb3ZlcnJpZGRlbi4KKyAqIERl
dGFpbHMgZ2l2ZW4gYmVmb3JlIGEgcmVzb3VyY2UgaXMgbG9hZGVkIG9uIGEgZ2l2ZW4gZnJhbWUu
IEl0J3MgdXNlZCBpbgorICogRXdrX0ZyYW1lX1Jlc291cmNlX01lc3NhZ2VzIHRvIGluZm9ybSBh
Ym91dCB0aGUgZGV0YWlscyBvZiBhIHJlc291cmNlIHJlcXVlc3QuCiAgKi8KIHN0cnVjdCBfRXdr
X0ZyYW1lX1Jlc291cmNlX1JlcXVlc3QgewogICAgIGNvbnN0IGNoYXIgKnVybDsgLyoqPCB1cmwg
b2YgdGhlIHJlc291cmNlICovCisgICAgY29uc3QgY2hhciAqaHR0cF9tZXRob2Q7IC8qKjwgaHR0
cCBtZXRob2Qgb2YgdGhlIHJlc291cmNlICovCiAgICAgY29uc3QgdW5zaWduZWQgbG9uZyBpZGVu
dGlmaWVyOyAvKio8IGlkZW50aWZpZXIgb2YgcmVzb3VyY2UsIGNhbiBub3QgYmUgY2hhbmdlZCAq
LwogfTsKIAorLy8vIENyZWF0ZXMgYSB0eXBlIG5hbWUgZm9yIF9Fd2tfRnJhbWVfUmVzb3VyY2Vf
UmVzcG9uc2UuCit0eXBlZGVmIHN0cnVjdCBfRXdrX0ZyYW1lX1Jlc291cmNlX1Jlc3BvbnNlIEV3
a19GcmFtZV9SZXNvdXJjZV9SZXNwb25zZTsKKworLyoqCisgKiBAYnJpZWYgICBTdHJ1Y3R1cmUg
Y29udGFpbmluZyBkZXRhaWxzIGFib3V0IGEgcmVzcG9uc2UgdG8gYSByZXNvdXJjZSByZXF1ZXN0
LgorICoKKyAqIERldGFpbHMgZ2l2ZW4gaW4gdGhlIHJlc3BvbnNlIHRvIGEgcmVzb3VyY2UgcmVx
dWVzdC4gSXQncyB1c2VkIGJ5CisgKiBld2tfZnJhbWVfcmVzcG9uc2VfcmVjZWl2ZWQoKSB0byBp
bmZvcm0gYWJvdXQgdGhlIGRldGFpbHMgb2YgYSByZXNwb25zZS4KKyAqLworc3RydWN0IF9Fd2tf
RnJhbWVfUmVzb3VyY2VfUmVzcG9uc2UgeworICAgIGNvbnN0IGNoYXIgKnVybDsgLyoqPCB1cmwg
b2YgdGhlIHJlc291cmNlICovCisgICAgY29uc3QgaW50IHN0YXR1c19jb2RlOyAvKio8IGh0dHAg
c3RhdHVzIGNvZGUgKi8KK307CisKIC8vLyBFbnVtIGNvbnRhaW5pbmcgaGl0IHRlc3QgZGF0YSB0
eXBlcwogdHlwZWRlZiBlbnVtIHsKICAgICBFV0tfSElUX1RFU1RfUkVTVUxUX0NPTlRFWFRfRE9D
VU1FTlQgPSAxIDw8IDEsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2hp
c3RvcnlfZGVsZWdhdGUuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19oaXN0b3J5X2Rl
bGVnYXRlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2U0NjM4Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19oaXN0b3J5X2RlbGVn
YXRlLmNwcApAQCAtMCwwICsxLDU3IEBACisvKgorKiBDb3B5cmlnaHQgKGMpIDIwMTIsIEludGVs
IENvcnBvcmF0aW9uCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyog
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMKKyogbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisqICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9u
CisqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorKiAqIE5laXRoZXIgdGhlIG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1l
cyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqIHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCisq
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiZXdrX2hpc3RvcnlfZGVsZWdhdGUuaCIKKworI2luY2x1ZGUgPGVpbmFfc2FmZXR5X2NoZWNr
cy5oPgorCitFd2tfSGlzdG9yeV9EZWxlZ2F0ZSogZXdrX2hpc3RvcnlfZGVsZWdhdGVfbmV3KEVp
bmFfRnJlZV9DYiBkYXRhX2ZyZWVfY2IpCit7CisgICAgRXdrX0hpc3RvcnlfRGVsZWdhdGUqIHJl
cyA9IG5ldyBFd2tfSGlzdG9yeV9EZWxlZ2F0ZTsKKyAgICBtZW1zZXQocmVzLCAwLCBzaXplb2Yo
RXdrX0hpc3RvcnlfRGVsZWdhdGUpKTsKKworICAgIHJlcy0+YXBpID0gbmV3IEV3a19IaXN0b3J5
X0RlbGVnYXRlX0NsYXNzOworICAgIG1lbXNldChyZXMtPmFwaSwgMCwgc2l6ZW9mKEV3a19IaXN0
b3J5X0RlbGVnYXRlX0NsYXNzKSk7CisKKyAgICByZXMtPmRhdGFfZnJlZV9jYiA9IGRhdGFfZnJl
ZV9jYjsKKworICAgIHJldHVybiByZXM7Cit9CisKK3ZvaWQgZXdrX2hpc3RvcnlfZGVsZWdhdGVf
ZnJlZShFd2tfSGlzdG9yeV9EZWxlZ2F0ZSogaGQpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk4oaGQpOworCisgICAgaWYgKGhkLT5kYXRhX2ZyZWVfY2IpCisgICAgICAgICgqaGQt
PmRhdGFfZnJlZV9jYikoaGQtPmRhdGEpOworCisgICAgZGVsZXRlIGhkLT5hcGk7CisgICAgZGVs
ZXRlIGhkOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19oaXN0b3J5
X2RlbGVnYXRlLmggYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2hpc3RvcnlfZGVsZWdhdGUu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWJlM2MyCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19oaXN0b3J5X2RlbGVnYXRlLmgKQEAg
LTAsMCArMSwxNDcgQEAKKy8qCisqIENvcHlyaWdodCAoYykgMjAxMiwgSW50ZWwgQ29ycG9yYXRp
b24KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5v
dGljZSwgdGhpcworKiBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyogKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqICogTmVp
dGhlciB0aGUgbmFtZSBvZiBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBj
b250cmlidXRvcnMgbWF5CisqIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKKyogTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisqLworCisjaWZuZGVmIGV3a19oaXN0b3J5X2RlbGVnYXRlX2gKKyNkZWZpbmUg
ZXdrX2hpc3RvcnlfZGVsZWdhdGVfaAorCisjaW5jbHVkZSAiZXdrX2ZyYW1lLmgiCisKKyNpbmNs
dWRlIDxFaW5hLmg+CisjaW5jbHVkZSA8RXZhcy5oPgorI2luY2x1ZGUgPGNhaXJvLmg+CisKKyNp
ZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKy8vIEZJWE1FOiBTaG91bGQg
YmUgcmUtZmFjdG9yZWQgaWYgRW5saWdodGVubWVudCBnZW5lcmljIG9iamVjdCBtb2RlbCB0dXJu
cyB1cAorCisvLy8gQ3JlYXRlcyBhIHR5cGUgbmFtZSBmb3IgQGEgX0V3a19OYXZpZ2F0aW9uX0Rh
dGEuCit0eXBlZGVmIHN0cnVjdCBfRXdrX05hdmlnYXRpb25fRGF0YSBFd2tfTmF2aWdhdGlvbl9E
YXRhOworCisvLy8gQ3JlYXRlcyBhIHR5cGUgbmFtZSBmb3IgQGEgX0V3a19IaXN0b3J5X0RlbGVn
YXRlX0NsYXNzLgordHlwZWRlZiBzdHJ1Y3QgX0V3a19IaXN0b3J5X0RlbGVnYXRlX0NsYXNzIEV3
a19IaXN0b3J5X0RlbGVnYXRlX0NsYXNzOworCisvLy8gQ3JlYXRlcyBhIHR5cGUgbmFtZSBmb3Ig
QGEgX0V3a19IaXN0b3J5X0RlbGVnYXRlLgordHlwZWRlZiBzdHJ1Y3QgX0V3a19IaXN0b3J5X0Rl
bGVnYXRlIEV3a19IaXN0b3J5X0RlbGVnYXRlOworCisvKioKKyAqIEBicmllZiAgIFN0cnVjdHVy
ZSBjb250YWluaW5nIGRldGFpbHMgYWJvdXQgYSBXZWIgVmlldyBuYXZpZ2F0aW9uLgorICoKKyAq
IERldGFpbHMgb2YgYSBXZWIgVmlldyBuYXZpZ2F0aW9uLiBJdCBpcyB1c2VkIGJ5IGV3a19oaXN0
b3J5X2RlbGVnYXRlX2RpZF9uYXZpZ2F0ZV93aXRoX25hdmlnYXRpb25fZGF0YSgpIHRvIGluZm9y
bSBhYm91dCB0aGUgZGVhdGlscyBvZiBhIG5hdmlnYXRpb24uCisgKi8KK3N0cnVjdCBfRXdrX05h
dmlnYXRpb25fRGF0YSB7CisgICAgY29uc3QgY2hhciogdXJsOyAgLyoqPCB1cmwgb2YgdGhlIG5h
dmlnYXRlZCBwYWdlICovCisgICAgY29uc3QgY2hhciogdGl0bGU7ICAvKio8IHRpdGxlIG9mIHRo
ZSBuYXZpZ2F0ZWQgcGFnZSAqLworICAgIEV3a19GcmFtZV9SZXNvdXJjZV9SZXF1ZXN0IHJlcXVl
c3Q7ICAvKio8IG5hdmlnYXRpb24gcmVxdWVzdCAqLworICAgIEV3a19GcmFtZV9SZXNvdXJjZV9S
ZXNwb25zZSByZXNwb25zZTsgIC8qKjwgbmF2aWdhdGlvbiByZXNwb25zZSAqLworICAgIEVpbmFf
Qm9vbCBoYXNTdWJzdGl0dXRlRGF0YTsgIC8qKjwgZGF0YSBzdWJzdGl0dXRpb24gZmxhZyAqLwor
ICAgIGNvbnN0IGNoYXIqIGNsaWVudFJlZGlyZWN0U291cmNlOyAgLyoqPCBjbGllbnQgcmVkaXJl
Y3Qgc291cmNlIHVybCovCit9OworCisvLy8gRXdrIEhpc3RvcnkgRGVsZWdhdGUncyBjbGFzcywg
dG8gYmUgb3ZlcnJpZGRlbiBieSBzdWItY2xhc3Nlcy4KK3N0cnVjdCBfRXdrX0hpc3RvcnlfRGVs
ZWdhdGVfQ2xhc3MgeworICAgIC8qKgorICAgICAqIEludm9rZWQgaWYgd2ViIHZpZXcgbmF2aWdh
dGVkIHRvIGEgbmV3IHVybC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBoZCBoaXN0b3J5IGRlbGVn
YXRlIG9iamVjdC4KKyAgICAgKiBAcGFyYW0gdmlldyBld2tfdmlldyBvYmplY3QuCisgICAgICog
QHBhcmFtIG5kIGV3a19uYXZpZ2F0aW9uX2RhdGEgb2JqZWN0IGNvbnRhaW5pbmcgZGV0YWlscyBv
ZiB0aGUgbmF2aWdhdGlvbi4KKyAgICAgKiBAcGFyYW0gZnJhbWUgZXdrX2ZyYW1lIG9iamVjdCBv
d25lZCBieSB0aGUgQGEgdmlldy4KKyAgICAgKi8KKyAgICB2b2lkICgqZGlkX25hdmlnYXRlX3dp
dGhfbmF2aWdhdGlvbl9kYXRhKShFd2tfSGlzdG9yeV9EZWxlZ2F0ZSogaGQsIGNvbnN0IEV2YXNf
T2JqZWN0KiB2aWV3LCBFd2tfTmF2aWdhdGlvbl9EYXRhKiBuZCwgY29uc3QgRXZhc19PYmplY3Qq
IGZyYW1lKTsKKyAgICAvKioKKyAgICAgKiBJbnZva2VkIGlmIHdlYiB2aWV3IHBlcmZvcm1lZCBh
IGNsaWVudCByZWRpcmVjdC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBoZCBoaXN0b3J5IGRlbGVn
YXRlIG9iamVjdC4KKyAgICAgKiBAcGFyYW0gdmlldyBld2tfdmlldyBvYmplY3QuCisgICAgICog
QHBhcmFtIHN1cmwgc291cmNlIHVybC4KKyAgICAgKiBAcGFyYW0gZHVybCBkZXN0aW5hdGlvbiB1
cmwuCisgICAgICogQHBhcmFtIGZyYW1lIGV3a19mcmFtZSBvYmplY3Qgb3duZWQgYnkgdGhlIEBh
IHZpZXcuCisgICAgICovCisgICAgdm9pZCAoKmRpZF9wZXJmb3JtX2NsaWVudF9yZWRpcmVjdF9m
cm9tX3VybCkoRXdrX0hpc3RvcnlfRGVsZWdhdGUqIGhkLCBjb25zdCBFdmFzX09iamVjdCogdmll
dywgY29uc3QgY2hhciogc3VybCwgY29uc3QgY2hhciogZHVybCwgY29uc3QgRXZhc19PYmplY3Qq
IGZyYW1lKTsKKyAgICAvKioKKyAgICAgKiBJbnZva2VkIGlmIHdlYiB2aWV3IHBlcmZvcm1lZCBh
IHNlcnZlciByZWRpcmVjdC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBoZCBoaXN0b3J5IGRlbGVn
YXRlIG9iamVjdC4KKyAgICAgKiBAcGFyYW0gdmlldyBld2tfdmlldyBvYmplY3QuCisgICAgICog
QHBhcmFtIHN1cmwgc291cmNlIHVybC4KKyAgICAgKiBAcGFyYW0gZHVybCBkZXN0aW5hdGlvbiB1
cmwuCisgICAgICogQHBhcmFtIGZyYW1lIGV3a19mcmFtZSBvYmplY3Qgb3duZWQgYnkgdGhlIEBh
IHZpZXcuCisgICAgICovCisgICAgdm9pZCAoKmRpZF9wZXJmb3JtX3NlcnZlcl9yZWRpcmVjdF9m
cm9tX3VybCkoRXdrX0hpc3RvcnlfRGVsZWdhdGUqIGhkLCBjb25zdCBFdmFzX09iamVjdCogdmll
dywgY29uc3QgY2hhciogc3VybCwgY29uc3QgY2hhciogZHVybCwgY29uc3QgRXZhc19PYmplY3Qq
IGZyYW1lKTsKKyAgICAvKioKKyAgICAgKiBJbnZva2VkIGlmIHdlYiB2aWV3IHRpdGxlIGhhcyBi
ZWVuIHVwZGF0ZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gaGQgaGlzdG9yeSBkZWxlZ2F0ZSBv
YmplY3QuCisgICAgICogQHBhcmFtIHZpZXcgZXdrX3ZpZXcgb2JqZWN0LgorICAgICAqIEBwYXJh
bSB0aXRsZSB3ZWIgdmlldyB0aXRsZS4KKyAgICAgKiBAcGFyYW0gdXJsIHdlYiB2aWV3IHVybC4K
KyAgICAgKi8KKyAgICB2b2lkICgqdXBkYXRlX2hpc3RvcnlfdGl0bGUpKEV3a19IaXN0b3J5X0Rl
bGVnYXRlKiBoZCwgY29uc3QgRXZhc19PYmplY3QqIHZpZXcsIGNvbnN0IGNoYXIqIHRpdGxlLCBj
b25zdCBjaGFyKiB1cmwpOworICAgIC8qKgorICAgICAqIEludm9rZWQgdG8gcG9wdWxhdGUgdmlz
aXRlZCBsaW5rcyBmb3Igd2ViIHZpZXcuCisgICAgICoKKyAgICAgKiBAcGFyYW0gaGQgaGlzdG9y
eSBkZWxlZ2F0ZSBvYmplY3QuCisgICAgICogQHBhcmFtIHZpZXcgZXdrX3ZpZXcgb2JqZWN0Lgor
ICAgICAqLworICAgIHZvaWQgKCpwb3B1bGF0ZV92aXNpdGVkX2xpbmtzX2Zvcl92aWV3KShFd2tf
SGlzdG9yeV9EZWxlZ2F0ZSogaGQsIGNvbnN0IEV2YXNfT2JqZWN0KiB2aWV3KTsKK307CisKKy8q
KgorICogQGJyaWVmIENvbnRhaW5zIGFuIGludGVybmFsIEhpc3RvcnkgRGVsZWdhdGUgZGF0YS4K
KyAqCisgKiBJdCBpcyB0byBiZSBjb25zaWRlcmVkIHByaXZhdGUgYnkgdXNlcnMsIGJ1dCBtYXkg
YmUgZXh0ZW5kZWQgb3IKKyAqIGNoYW5nZWQgYnkgc3ViLWNsYXNzZXMgKHRoYXQncyB3aHkgaXQn
cyBpbiB0aGUgcHVibGljIGhlYWRlciBmaWxlKS4KKyAqLworc3RydWN0IF9Fd2tfSGlzdG9yeV9E
ZWxlZ2F0ZSB7CisgICAgRXdrX0hpc3RvcnlfRGVsZWdhdGVfQ2xhc3MgKmFwaTsgLyoqPCBSZWZl
cmVuY2UgdG8gY2FzdGVkIGNsYXNzIGluc3RhbmNlLiAqLworICAgIHZvaWQgKmRhdGE7IC8qKjwg
c3ViLWNsYXNzZXMgb3duIGRhdGEuKi8KKyAgICBFaW5hX0ZyZWVfQ2IgZGF0YV9mcmVlX2NiOyAv
Kio8IGNhbGxiYWNrIHRvIGJlIGludm9rZWQgdG8gZnJlZSBAYSBkYXRhICovCit9OworCisvKioK
KyAqIENyZWF0ZSBhIG5ldyBoaXN0b3J5IGRlbGVnYXRlIG9iamVjdCBpbnN0YW5jZS4KKyAqCisg
KiBAcGFyYW0gZGF0YV9mcmVlX2NiIGNhbGxiYWNrIHRvIGJlIGludm9rZWQgdG8gZnJlZSBoaXN0
b3J5IGRlbGVnYXRlJ3MgZGF0YS4KKyAqCisgKiBAcmV0dXJuIG5ld2x5IGFsbG9jYXRlZCBoaXN0
b3J5IGRlbGVnYXRlLiBZb3UgbXVzdAorICogICAgICAgICBmcmVlIHRoaXMgZGVsZWdhdGUgd2l0
aCBld2tfaGlzdG9yeV9kZWxlZ2F0ZV9mcmVlKCkuCisgKi8KK0VBUEkgRXdrX0hpc3RvcnlfRGVs
ZWdhdGUqIGV3a19oaXN0b3J5X2RlbGVnYXRlX25ldyhFaW5hX0ZyZWVfQ2IgZGF0YV9mcmVlX2Ni
KTsKKworLyoqCisgKiBGcmVlIGdpdmVuIGhpc3RvcnkgZGVsZWdhdGUgaW5zdGFuY2UuCisgKgor
ICogQHBhcmFtIGhkIHdoYXQgdG8gZnJlZS4KKyAqLworRUFQSSB2b2lkIGV3a19oaXN0b3J5X2Rl
bGVnYXRlX2ZyZWUoRXdrX0hpc3RvcnlfRGVsZWdhdGUqIGhkKTsKKworI2lmZGVmIF9fY3BsdXNw
bHVzCit9CisjZW5kaWYKKyNlbmRpZiAvLyBld2tfaGlzdG9yeV9kZWxlZ2F0ZV9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcuY3BwIGIvU291cmNlL1dlYktpdC9l
ZmwvZXdrL2V3a192aWV3LmNwcAppbmRleCAyNmI1NTVjLi4yM2RjZWRjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZs
L2V3ay9ld2tfdmlldy5jcHAKQEAgLTEsNiArMSw3IEBACiAvKgogICAgIENvcHlyaWdodCAoQykg
MjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCiAgICAgQ29weXJpZ2h0IChDKSAy
MDA5LTIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcworICAgIENvcHlyaWdodCAoQykgMjAxMiBJbnRl
bCBDb3Jwb3JhdGlvbgogCiAgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0xNDcsNiArMTQ4LDcgQEAgc3Ry
dWN0IF9Fd2tfVmlld19Qcml2YXRlX0RhdGEgewogICAgIFdlYkNvcmU6OkZyYW1lKiBtYWluRnJh
bWU7CiAgICAgV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHMgdmlld3BvcnRBcmd1bWVudHM7CiAg
ICAgRXdrX0hpc3RvcnkqIGhpc3Rvcnk7CisgICAgRXdrX0hpc3RvcnlfRGVsZWdhdGUqIGhpc3Rv
cnlEZWxlZ2F0ZTsKICAgICBPd25QdHI8V2ViQ29yZTo6UGFnZUNsaWVudEVmbD4gcGFnZUNsaWVu
dDsKICAgICBzdHJ1Y3QgewogICAgICAgICBFd2tfTWVudSBtZW51OwpAQCAtNzUzLDYgKzc1NSw3
IEBAIHN0YXRpYyB2b2lkIF9ld2tfdmlld19wcml2X2RlbChFd2tfVmlld19Qcml2YXRlX0RhdGEq
IHByaXYpCiAgICAgICAgIGVjb3JlX2FuaW1hdG9yX2RlbChwcml2LT5hbmltYXRlZFpvb20uYW5p
bWF0b3IpOwogCiAgICAgZXdrX2hpc3RvcnlfZnJlZShwcml2LT5oaXN0b3J5KTsKKyAgICBld2tf
aGlzdG9yeV9kZWxlZ2F0ZV9mcmVlKHByaXYtPmhpc3RvcnlEZWxlZ2F0ZSk7CiAKICAgICBkZWxl
dGUgcHJpdjsKIH0KQEAgLTM5MTMsNiArMzkxNiwyMSBAQCBFd2tfUGFnZV9WaXNpYmlsaXR5X1N0
YXRlIGV3a192aWV3X3Zpc2liaWxpdHlfc3RhdGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tW
aQogI2VuZGlmCiB9CiAKK0V3a19IaXN0b3J5X0RlbGVnYXRlKiBld2tfdmlld19oaXN0b3J5X2Rl
bGVnYXRlX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKK3sKKyAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgMCk7CisgICAgRVdLX1ZJRVdfUFJJ
Vl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgMCk7CisgICAgcmV0dXJuIHByaXYtPmhp
c3RvcnlEZWxlZ2F0ZTsKK30KKwordm9pZCBld2tfdmlld19oaXN0b3J5X2RlbGVnYXRlX3NldChj
b25zdCBFdmFzX09iamVjdCogZXdrVmlldywgRXdrX0hpc3RvcnlfRGVsZWdhdGUqIGRlbGVnYXRl
KQoreworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhKTsK
KyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2KTsKKyAgICBl
d2tfaGlzdG9yeV9kZWxlZ2F0ZV9mcmVlKHByaXYtPmhpc3RvcnlEZWxlZ2F0ZSk7CisgICAgcHJp
di0+aGlzdG9yeURlbGVnYXRlID0gZGVsZWdhdGU7Cit9CisKIFNvdXBTZXNzaW9uKiBld2tfdmll
d19zb3VwX3Nlc3Npb25fZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewogICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCAwKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5oIGIvU291cmNlL1dlYktpdC9lZmwv
ZXdrL2V3a192aWV3LmgKaW5kZXggMWM1MzMzNS4uOGRlNzdjMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9lZmwvZXdrL2V3a192aWV3LmgKKysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3
a192aWV3LmgKQEAgLTEsNiArMSw3IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwOS0yMDEw
IFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCiAgICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAg
U2Ftc3VuZyBFbGVjdHJvbmljcworICAgIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3Jh
dGlvbgogCiAgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC05MCw2ICs5MSw3IEBACiAKICNpbmNsdWRlICJl
d2tfZnJhbWUuaCIKICNpbmNsdWRlICJld2tfaGlzdG9yeS5oIgorI2luY2x1ZGUgImV3a19oaXN0
b3J5X2RlbGVnYXRlLmgiCiAjaW5jbHVkZSAiZXdrX2pzLmgiCiAjaW5jbHVkZSAiZXdrX3dpbmRv
d19mZWF0dXJlcy5oIgogCkBAIC0yMzM4LDYgKzIzNDAsMzAgQEAgRUFQSSBFaW5hX0Jvb2wgZXdr
X3ZpZXdfbWl4ZWRfY29udGVudF9kaXNwbGF5ZWRfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpvKTsK
IEVBUEkgRWluYV9Cb29sIGV3a192aWV3X21peGVkX2NvbnRlbnRfcnVuX2dldChjb25zdCBFdmFz
X09iamVjdCAqbyk7CiAKIC8qKgorICogUmV0dXJucyB0aGUgRXdrX0hpc3RvcnlfRGVsZWdhdGUg
YXNzb2NpYXRlZCB3aXRoIHRoaXMgdmlldy4KKyAqCisgKiBAcGFyYW0gbyBUaGUgdmlldyB0byBx
dWVyeS4KKyAqCisgKiBAcmV0dXJuIEBjIEV3a19IaXN0b3J5X0RlbGVnYXRlIGFzc29jaWF0ZWQg
d2l0aCB0aGlzIHZpZXcgb3IgQGMgMCBpZiB0aGVyZSBpcyBubyBhc3NvY2lhdGVkIEV3a19IaXN0
b3J5X0RlbGVnYXRlCisgKgorICogQHNhIGV3a192aWV3X2hpc3RvcnlfZGVsZWdhdGVfc2V0Cisg
Ki8KK0VBUEkgRXdrX0hpc3RvcnlfRGVsZWdhdGUqIGV3a192aWV3X2hpc3RvcnlfZGVsZWdhdGVf
Z2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpvKTsKKworLyoqCisgKiBBc3NvY2lhdGVzIGEgbmV3IEV3
a19IaXN0b3J5X0RlbGVnYXRlIHdpdGggdGhpcyB2aWV3LgorICoKKyAqIEBub3RlIFRoZSB2aWV3
IHRha2VzIG93bmVyc2hpcCBvdmVyIHRoZSBkZWxlZ2F0ZS4gSWYgdGhlIGFzc29jaWF0ZWQgZGVs
ZWdhdGUgc2hvdWxkIGJlIGRlbGV0ZWQKKyAqICAgICAgIGltbWlkaWF0ZWx5IGV3a192aWV3X2hp
c3RvcnlfZGVsZWdhdGVfc2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpvLCAwKSBzaGFsbCBiZSBpbnZv
a2VkCisgKgorICogQHBhcmFtIG8gVGhlIHZpZXcgdG8gY2hhbmdlLgorICogQHBhcmFtIHNlc3Np
b24gVGhlIG5ldyBFd2tfSGlzdG9yeV9EZWxlZ2F0ZS4KKyAqCisgKiBAc2EgZXdrX3ZpZXdfaGlz
dG9yeV9kZWxlZ2F0ZV9nZXQKKyAqLworRUFQSSB2b2lkIGV3a192aWV3X2hpc3RvcnlfZGVsZWdh
dGVfc2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpvLCBFd2tfSGlzdG9yeV9EZWxlZ2F0ZSAqZGVsZWdh
dGUpOworCisvKioKICAqIFJldHVybnMgdGhlIFNvdXBTZXNzaW9uIGFzc29jaWF0ZWQgd2l0aCB0
aGlzIHZpZXcuCiAgKgogICogQnkgZGVmYXVsdCwgYWxsIHZpZXdzIHNoYXJlIHRoZSBzYW1lLCBk
ZWZhdWx0IHNvdXAgc2Vzc2lvbiBhbHNvIGF2YWlsYWJsZQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hh
bmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDljYjY1ODEuLmYxZGI1OWUgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBA
QAorMjAxMi0wMy0zMCAgTWlraGFpbCBQb3pkbnlha292ICA8bWlraGFpbC5wb3pkbnlha292QGlu
dGVsLmNvbT4KKworICAgICAgICBbRUZMXSBHbG9iYWwgaGlzdG9yeSBkZWxlZ2F0ZSBzdXBwb3J0
IGZvciBFRkwgcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9ODI1NzkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBDcmVhdGUgaGlzdG9yeSBkZWxlZ2F0ZSBhbmQgc2V0IGl0IGZvciBhcHByb3ByaWF0ZSB0
ZXN0cy4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2VmbC9DTWFrZUxpc3RzLnR4dDoKKyAg
ICAgICAgKiBEdW1wUmVuZGVyVHJlZS9lZmwvRHVtcFJlbmRlclRyZWUuY3BwOgorICAgICAgICAo
aXNHbG9iYWxIaXN0b3J5VGVzdCk6CisgICAgICAgIChydW5UZXN0KToKKyAgICAgICAgKiBEdW1w
UmVuZGVyVHJlZS9lZmwvSGlzdG9yeURlbGVnYXRlLmNwcDogQWRkZWQuCisgICAgICAgIChkaWRO
YXZpZ2F0ZVdpdGhOYXZpZ2F0aW9uRGF0YSk6CisgICAgICAgIChkaWRQZXJmb3JtQ2xpZW50UmVk
aXJlY3RGcm9tVVJMKToKKyAgICAgICAgKGRpZFBlcmZvcm1TZXJ2ZXJSZWRpcmVjdEZyb21VUkwp
OgorICAgICAgICAodXBkYXRlSGlzdG9yeVRpdGxlKToKKyAgICAgICAgKHBvcHVsYXRlVmlzaXRl
ZExpbmtzRm9yV2ViVmlldyk6CisgICAgICAgIChoaXN0b3J5X2RlbGVnYXRlX25ldyk6CisgICAg
ICAgICogRHVtcFJlbmRlclRyZWUvZWZsL0hpc3RvcnlEZWxlZ2F0ZS5oOiBBZGRlZC4KKwogMjAx
Mi0wMy0yOSAgw4Fkw6FtIEthbGxhaSAgPGthZGFtQGluZi51LXN6ZWdlZC5odT4KIAogICAgICAg
ICBbUXRdIEJ1aWxkIGZpeCBieSByZW5hbWVpbmcgUXREZWNsYXJhdGl2ZSB0byBRdFFtbCBpbiBo
ZWFkZXIgY2FsbHMuCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvQ01ha2VM
aXN0cy50eHQgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvQ01ha2VMaXN0cy50eHQKaW5kZXgg
Y2M4ZGZhZi4uMzkyMWE4YSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0NN
YWtlTGlzdHMudHh0CisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9DTWFrZUxpc3RzLnR4
dApAQCAtMTIsNiArMTIsNyBAQCBTRVQoRHVtcFJlbmRlclRyZWVfU09VUkNFUwogICAgICR7VE9P
TFNfRElSfS9EdW1wUmVuZGVyVHJlZS9lZmwvRXZlbnRTZW5kZXIuY3BwCiAgICAgJHtUT09MU19E
SVJ9L0R1bXBSZW5kZXJUcmVlL2VmbC9Gb250TWFuYWdlbWVudC5jcHAKICAgICAke1RPT0xTX0RJ
Un0vRHVtcFJlbmRlclRyZWUvZWZsL0dDQ29udHJvbGxlckVmbC5jcHAKKyAgICAke1RPT0xTX0RJ
Un0vRHVtcFJlbmRlclRyZWUvZWZsL0hpc3RvcnlEZWxlZ2F0ZS5jcHAKICAgICAke1RPT0xTX0RJ
Un0vRHVtcFJlbmRlclRyZWUvZWZsL0pTU3RyaW5nVXRpbHMuY3BwCiAgICAgJHtUT09MU19ESVJ9
L0R1bXBSZW5kZXJUcmVlL2VmbC9MYXlvdXRUZXN0Q29udHJvbGxlckVmbC5jcHAKICAgICAke1RP
T0xTX0RJUn0vRHVtcFJlbmRlclRyZWUvZWZsL1BpeGVsRHVtcFN1cHBvcnRFZmwuY3BwCmRpZmYg
LS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvRHVtcFJlbmRlclRyZWUuY3BwIGIvVG9v
bHMvRHVtcFJlbmRlclRyZWUvZWZsL0R1bXBSZW5kZXJUcmVlLmNwcAppbmRleCBiYjhmN2QyLi45
ZTY2N2Y0IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvRHVtcFJlbmRlclRy
ZWUuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9EdW1wUmVuZGVyVHJlZS5jcHAK
QEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZVZpZXcuaCIKICNpbmNs
dWRlICJFdmVudFNlbmRlci5oIgogI2luY2x1ZGUgIkZvbnRNYW5hZ2VtZW50LmgiCisjaW5jbHVk
ZSAiSGlzdG9yeURlbGVnYXRlLmgiCiAjaW5jbHVkZSAiTGF5b3V0VGVzdENvbnRyb2xsZXIuaCIK
ICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBpeGVsRHVtcFN1cHBvcnQu
aCIKQEAgLTIxOCw2ICsyMTksMTEgQEAgc3RhdGljIHZvaWQgY3JlYXRlTGF5b3V0VGVzdENvbnRy
b2xsZXIoY29uc3QgU3RyaW5nJiB0ZXN0VVJMLCBjb25zdCBTdHJpbmcmIGV4cGUKICAgICB9CiB9
CiAKK3N0YXRpYyBib29sIGlzR2xvYmFsSGlzdG9yeVRlc3QoY29uc3QgU3RyaW5nJiBjVGVzdFBh
dGhPclVSTCkKK3sKKyAgICByZXR1cm4gY1Rlc3RQYXRoT3JVUkwuY29udGFpbnMoImdsb2JhbGhp
c3RvcnkvIik7Cit9CisKIHN0YXRpYyB2b2lkIHJ1blRlc3QoY29uc3QgY2hhciogY1Rlc3RQYXRo
T3JVUkwpCiB7CiAgICAgY29uc3QgU3RyaW5nIHRlc3RQYXRoT3JVUkwgPSBTdHJpbmc6OmZyb21V
VEY4KGNUZXN0UGF0aE9yVVJMKTsKQEAgLTI0Miw2ICsyNDgsOSBAQCBzdGF0aWMgdm9pZCBydW5U
ZXN0KGNvbnN0IGNoYXIqIGNUZXN0UGF0aE9yVVJMKQogICAgIGNvbnN0IEV3a19IaXN0b3J5KiBo
aXN0b3J5ID0gZXdrX3ZpZXdfaGlzdG9yeV9nZXQoYnJvd3Nlci0+bWFpblZpZXcoKSk7CiAgICAg
cHJldlRlc3RCRkl0ZW0gPSBld2tfaGlzdG9yeV9oaXN0b3J5X2l0ZW1fY3VycmVudF9nZXQoaGlz
dG9yeSk7CiAKKyAgICBpZiAoaXNHbG9iYWxIaXN0b3J5VGVzdCh0ZXN0VVJMKSkKKyAgICAgICAg
ZXdrX3ZpZXdfaGlzdG9yeV9kZWxlZ2F0ZV9zZXQoYnJvd3Nlci0+bWFpblZpZXcoKSwgaGlzdG9y
eV9kZWxlZ2F0ZV9uZXcoZ0xheW91dFRlc3RDb250cm9sbGVyLmdldCgpKSk7CisKICAgICBldmFz
X29iamVjdF9mb2N1c19zZXQoYnJvd3Nlci0+bWFpblZpZXcoKSwgRUlOQV9UUlVFKTsKICAgICBl
d2tfdmlld191cmlfc2V0KGJyb3dzZXItPm1haW5WaWV3KCksIHRlc3RVUkwudXRmOCgpLmRhdGEo
KSk7CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9IaXN0b3J5RGVsZWdh
dGUuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0hpc3RvcnlEZWxlZ2F0ZS5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJlYjgwZgotLS0gL2Rldi9udWxsCisr
KyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9IaXN0b3J5RGVsZWdhdGUuY3BwCkBAIC0wLDAg
KzEsMTAxIEBACisvKgorKiBDb3B5cmlnaHQgKGMpIDIwMTIsIEludGVsIENvcnBvcmF0aW9uCisq
CisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMKKyogbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisqICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKiAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJp
YnV0b3JzIG1heQorKiBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorKi8KKworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSGlzdG9yeURlbGVn
YXRlLmgiCisKKyNpbmNsdWRlICJMYXlvdXRUZXN0Q29udHJvbGxlci5oIgorCisjaW5jbHVkZSA8
ZWluYV9zYWZldHlfY2hlY2tzLmg+CisKK3N0YXRpYyB2b2lkIGRpZE5hdmlnYXRlV2l0aE5hdmln
YXRpb25EYXRhKEV3a19IaXN0b3J5X0RlbGVnYXRlKiwgY29uc3QgRXZhc19PYmplY3QqLCBFd2tf
TmF2aWdhdGlvbl9EYXRhKiBuYXZpZ2F0aW9uRGF0YSwgY29uc3QgRXZhc19PYmplY3QqKQorewor
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKG5hdmlnYXRpb25EYXRhKTsKKyAgICBjb25z
dCBib29sIHdhc0ZhaWx1cmUgPSBuYXZpZ2F0aW9uRGF0YS0+aGFzU3Vic3RpdHV0ZURhdGEgfHwg
IG5hdmlnYXRpb25EYXRhLT5yZXNwb25zZS5zdGF0dXNfY29kZSA+PSA0MDA7CisgICAgY29uc3Qg
Ym9vbCB3YXNSZWRpcmVjdGVkID0gbmF2aWdhdGlvbkRhdGEtPmNsaWVudFJlZGlyZWN0U291cmNl
ICYmICoobmF2aWdhdGlvbkRhdGEtPmNsaWVudFJlZGlyZWN0U291cmNlKTsKKworICAgIHByaW50
ZigiV2ViVmlldyBuYXZpZ2F0ZWQgdG8gdXJsIFwiJXNcIiB3aXRoIHRpdGxlIFwiJXNcIiB3aXRo
IEhUVFAgZXF1aXZhbGVudCBtZXRob2QgXCIlc1wiLiAgVGhlIG5hdmlnYXRpb24gd2FzICVzIGFu
ZCB3YXMgJXMlcy5cbiIsCisgICAgICAgIG5hdmlnYXRpb25EYXRhLT51cmwsIC8vIEZJWE1FOiBo
YW5sZGxlIHVybCB0byBiZSBzdWl0YWJsZSBmb3IgdGVzdAorICAgICAgICBuYXZpZ2F0aW9uRGF0
YS0+dGl0bGUsCisgICAgICAgIG5hdmlnYXRpb25EYXRhLT5yZXF1ZXN0Lmh0dHBfbWV0aG9kLAor
ICAgICAgICB3YXNGYWlsdXJlPyAiYSBmYWlsdXJlIiA6ICJzdWNjZXNzZnVsIiwKKyAgICAgICAg
KHdhc1JlZGlyZWN0ZWQgPyAiYSBjbGllbnQgcmVkaXJlY3QgZnJvbSAiIDogIm5vdCBhIGNsaWVu
dCByZWRpcmVjdCIpLAorICAgICAgICAod2FzUmVkaXJlY3RlZCA/IG5hdmlnYXRpb25EYXRhLT5j
bGllbnRSZWRpcmVjdFNvdXJjZSA6ICIiKSk7Cit9CisKK3N0YXRpYyB2b2lkIGRpZFBlcmZvcm1D
bGllbnRSZWRpcmVjdEZyb21VUkwoRXdrX0hpc3RvcnlfRGVsZWdhdGUqIGhpc3RvcnlEZWxlZ2F0
ZSwgY29uc3QgRXZhc19PYmplY3QqIC8qZXdrVmlldyovLCBjb25zdCBjaGFyKiBzb3VyY2VVUkws
IGNvbnN0IGNoYXIqIGRlc3RpbmF0aW9uVVJMLCBjb25zdCBFdmFzX09iamVjdCopCit7CisgICAg
TGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0
Q29udHJvbGxlcio+KGhpc3RvcnlEZWxlZ2F0ZS0+ZGF0YSk7CisKKyAgICBpZiAoIWNvbnRyb2xs
ZXItPmR1bXBIaXN0b3J5RGVsZWdhdGVDYWxsYmFja3MoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgcHJpbnRmKCJXZWJWaWV3IHBlcmZvcm1lZCBhIGNsaWVudCByZWRpcmVjdCBmcm9tIFwiJXNc
IiB0byBcIiVzXCIuXG4iLCBzb3VyY2VVUkwsIGRlc3RpbmF0aW9uVVJMKTsKK30KKworc3RhdGlj
IHZvaWQgZGlkUGVyZm9ybVNlcnZlclJlZGlyZWN0RnJvbVVSTChFd2tfSGlzdG9yeV9EZWxlZ2F0
ZSogaGQsIGNvbnN0IEV2YXNfT2JqZWN0KiwgY29uc3QgY2hhciogc291cmNlVVJMLCBjb25zdCBj
aGFyKiBkZXN0aW5hdGlvblVSTCwgY29uc3QgRXZhc19PYmplY3QqKQoreworICAgIExheW91dFRl
c3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xs
ZXIqPihoZC0+ZGF0YSk7CisKKyAgICBpZiAoIWNvbnRyb2xsZXItPmR1bXBIaXN0b3J5RGVsZWdh
dGVDYWxsYmFja3MoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcHJpbnRmKCJXZWJWaWV3IHBl
cmZvcm1lZCBhIHNlcnZlciByZWRpcmVjdCBmcm9tIFwiJXNcIiB0byBcIiVzXCIuXG4iLCBzb3Vy
Y2VVUkwsIGRlc3RpbmF0aW9uVVJMKTsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlSGlzdG9yeVRp
dGxlKEV3a19IaXN0b3J5X0RlbGVnYXRlKiwgY29uc3QgRXZhc19PYmplY3QqLCBjb25zdCBjaGFy
KiB0aXRsZSwgY29uc3QgY2hhciogdXJsKQoreworICAgIHByaW50ZigiV2ViVmlldyB1cGRhdGVk
IHRoZSB0aXRsZSBmb3IgaGlzdG9yeSBVUkwgXCIlc1wiIHRvIFwiJXNcIi5cbiIsIHVybCwgdGl0
bGUpOworfQorCitzdGF0aWMgdm9pZCBwb3B1bGF0ZVZpc2l0ZWRMaW5rc0ZvcldlYlZpZXcoRXdr
X0hpc3RvcnlfRGVsZWdhdGUqIGhpc3RvcnlEZWxlZ2F0ZSwgY29uc3QgRXZhc19PYmplY3QqIGV3
a1ZpZXcpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oZXdrVmlldyk7CisKKyAg
ICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRl
c3RDb250cm9sbGVyKj4oaGlzdG9yeURlbGVnYXRlLT5kYXRhKTsKKworICAgIGlmIChjb250cm9s
bGVyLT5kdW1wVmlzaXRlZExpbmtzQ2FsbGJhY2soKSkKKyAgICAgICAgcHJpbnRmKCJBc2tlZCB0
byBwb3B1bGF0ZSB2aXNpdGVkIGxpbmtzIGZvciBXZWJWaWV3IFwiJXNcIlxuIiwgZXdrX3ZpZXdf
dXJpX2dldChld2tWaWV3KSk7Cit9CisKK0V3a19IaXN0b3J5X0RlbGVnYXRlKiBoaXN0b3J5X2Rl
bGVnYXRlX25ldyhMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlcikKK3sKKyAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoY29udHJvbGxlciwgMCk7CisKKyAgICBFd2tfSGlz
dG9yeV9EZWxlZ2F0ZSogcmVzID0gZXdrX2hpc3RvcnlfZGVsZWdhdGVfbmV3KDApOyAvLyBkbyBu
b3QgbmVlZCBkYXRhIGRlbGV0ZXIKKworICAgIHJlcy0+YXBpLT5kaWRfbmF2aWdhdGVfd2l0aF9u
YXZpZ2F0aW9uX2RhdGEgPSBkaWROYXZpZ2F0ZVdpdGhOYXZpZ2F0aW9uRGF0YTsKKyAgICByZXMt
PmFwaS0+ZGlkX3BlcmZvcm1fY2xpZW50X3JlZGlyZWN0X2Zyb21fdXJsID0gZGlkUGVyZm9ybUNs
aWVudFJlZGlyZWN0RnJvbVVSTDsKKyAgICByZXMtPmFwaS0+ZGlkX3BlcmZvcm1fc2VydmVyX3Jl
ZGlyZWN0X2Zyb21fdXJsID0gZGlkUGVyZm9ybVNlcnZlclJlZGlyZWN0RnJvbVVSTDsKKyAgICBy
ZXMtPmFwaS0+dXBkYXRlX2hpc3RvcnlfdGl0bGUgPSB1cGRhdGVIaXN0b3J5VGl0bGU7CisgICAg
cmVzLT5hcGktPnBvcHVsYXRlX3Zpc2l0ZWRfbGlua3NfZm9yX3ZpZXcgPSBwb3B1bGF0ZVZpc2l0
ZWRMaW5rc0ZvcldlYlZpZXc7CisgICAgcmVzLT5kYXRhID0gY29udHJvbGxlcjsKKworICAgIHJl
dHVybiByZXM7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvSGlzdG9y
eURlbGVnYXRlLmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvSGlzdG9yeURlbGVnYXRlLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFhOWQxYQotLS0gL2Rldi9udWxs
CisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9IaXN0b3J5RGVsZWdhdGUuaApAQCAtMCww
ICsxLDM5IEBACisvKgorKiBDb3B5cmlnaHQgKGMpIDIwMTIsIEludGVsIENvcnBvcmF0aW9uCisq
CisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMKKyogbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisqICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKiAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJp
YnV0b3JzIG1heQorKiBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorKi8KKworCisjaWZuZGVmIEhpc3RvcnlEZWxlZ2F0ZV9oCisjZGVmaW5lIEhpc3RvcnlE
ZWxlZ2F0ZV9oCisKKyNpbmNsdWRlIDxFV2ViS2l0Lmg+CisKK2NsYXNzIExheW91dFRlc3RDb250
cm9sbGVyOworCitFd2tfSGlzdG9yeV9EZWxlZ2F0ZSAqaGlzdG9yeV9kZWxlZ2F0ZV9uZXcoTGF5
b3V0VGVzdENvbnRyb2xsZXIqKTsKKworI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>135285</attachid>
            <date>2012-04-03 00:43:22 -0700</date>
            <delta_ts>2012-05-14 01:20:33 -0700</delta_ts>
            <desc>global history delegate v2 </desc>
            <filename>global_history_delegate.patch</filename>
            <type>text/plain</type>
            <size>36937</size>
            <attacher name="Mikhail Pozdnyakov">mikhail.pozdnyakov</attacher>
            
              <data encoding="base64">Y29tbWl0IGYwMGQ5YmNlNTg2YTkwY2EwM2U1MmUzYjllMjRjZTc5NTdhOThkNGMKQXV0aG9yOiBN
aWtoYWlsIFBvemRueWFrb3YgPHBvemRueWFrb3YubWlraGFpbEBnbWFpbC5jb20+CkRhdGU6ICAg
RnJpIE1hciAzMCAxNjowMTowNSAyMDEyICswMzAwCgogICAgZ2xvYmFsIGhpc3RvcnkgZGVsZWdh
dGUuCgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCmluZGV4IDE3NzFhZjkuLmVmOGIwMmYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0No
YW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAx
Mi0wMy0zMCAgTWlraGFpbCBQb3pkbnlha292ICA8bWlraGFpbC5wb3pkbnlha292QGludGVsLmNv
bT4KKworICAgICAgICBbRUZMXSBHbG9iYWwgaGlzdG9yeSBkZWxlZ2F0ZSBzdXBwb3J0IGZvciBF
RkwgcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
ODI1NzkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IHBsYXRmb3JtL2VmbC9Ta2lwcGVkOgorCiAyMDEyLTAzLTMwICBQYXZlbCBGZWxkbWFuICA8cGZl
bGRtYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IGVkaXRpbmcgcmVz
ZXRzIGxpbmUtZW5kaW5nIG9mIHRoZSB3aG9sZSBmaWxlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9lZmwvU2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2VmbC9Ta2lwcGVk
CmluZGV4IDJkMjliZmUuLmQ0NzA3ODggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3Jt
L2VmbC9Ta2lwcGVkCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2VmbC9Ta2lwcGVkCkBAIC04
MjEsNiArODIxLDggQEAgZmFzdC9mb3Jtcy92YWxpZGF0aW9uLW1lc3NhZ2Utb24tdGV4dGFyZWEu
aHRtbAogIyBUaGVzZSB0ZXN0cyBuZWVkcyBlbmhhbmNlZCBmcmFtZWxvYWRlciBkZWxlZ2F0ZSBs
b2dnaW5nIGluIERSVAogZmFzdC9sb2FkZXIvcmVjdXJzaXZlLWJlZm9yZS11bmxvYWQtY3Jhc2gu
aHRtbAogZmFzdC9sb2FkZXIvbnVsbC1yZXF1ZXN0LWFmdGVyLXdpbGxTZW5kUmVxdWVzdC5odG1s
CitodHRwL3Rlc3RzL2dsb2JhbGhpc3RvcnkvaGlzdG9yeS1kZWxlZ2F0ZS1iYXNpYy1yZWZyZXNo
LXJlZGlyZWN0Lmh0bWwKK2h0dHAvdGVzdHMvZ2xvYmFsaGlzdG9yeS9oaXN0b3J5LWRlbGVnYXRl
LWJhc2ljLTMwMi1yZWRpcmVjdC5odG1sCiAKICMgTmVlZCB0byBhZGQgZnVuY3Rpb25hbGl0eSB0
byBEdW1wUmVuZGVyVHJlZSB0byBoYW5kbGUgZXJyb3IgcGFnZXMKIGZhc3QvaGlzdG9yeS9iYWNr
LWZvcndhcmQtcmVzZXQtYWZ0ZXItZXJyb3ItaGFuZGxpbmcuaHRtbApAQCAtMTAzMCw5ICsxMDMy
LDYgQEAgZmFzdC9kb20vdGl0bGUtZGlyZWN0aW9uYWxpdHkuaHRtbAogZmFzdC9kb20vV2luZG93
L3Nsb3ctdW5sb2FkLWhhbmRsZXIuaHRtbAogZmFzdC9kb20vV2luZG93L3Nsb3ctdW5sb2FkLWhh
bmRsZXItb25seS1mcmFtZS1pcy1zdG9wcGVkLmh0bWwKIAotIyBUaGUgRUZMIHBvcnQgaGFzIG5v
IGdsb2JhbCBoaXN0b3J5IGRlbGVnYXRlCi1odHRwL3Rlc3RzL2dsb2JhbGhpc3RvcnkKLQogIyBQ
YXN0ZUJvYXJkOjpwbGFpblRleHQoKSBkb2VzIG5vdCBzdXBwb3J0IGZpbGUgbmFtZXMuCiBlZGl0
aW5nL3Bhc3RlYm9hcmQvZHJhZy1maWxlcy10by1lZGl0YWJsZS1lbGVtZW50Lmh0bWwKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxv
ZwppbmRleCBiNzMxYmQ5Li5kOWYyNTIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDEy
LTAzLTMwICBNaWtoYWlsIFBvemRueWFrb3YgIDxtaWtoYWlsLnBvemRueWFrb3ZAaW50ZWwuY29t
PgorCisgICAgICAgIFtFRkxdIEdsb2JhbCBoaXN0b3J5IGRlbGVnYXRlIHN1cHBvcnQgZm9yIEVG
TCBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04
MjU3OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
UGxhdGZvcm1FZmwuY21ha2U6CisKIDIwMTItMDMtMjIgIFJhcGhhZWwgS3VibyBkYSBDb3N0YSAg
PHJha3Vjb0BGcmVlQlNELm9yZz4KIAogICAgICAgICBbQ01ha2VdIFVucmV2aWV3ZWQgYnVpbGQg
Zml4IGFmdGVyIHIxMTE3NzguCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtRWZs
LmNtYWtlIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybUVmbC5jbWFrZQppbmRleCAxMDAxMGM5Li4x
NzdmYmFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtRWZsLmNtYWtlCisrKyBi
L1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1FZmwuY21ha2UKQEAgLTg5LDYgKzg5LDcgQEAgTElTVChB
UFBFTkQgV2ViS2l0X1NPVVJDRVMKICAgICBlZmwvZXdrL2V3a19jb29raWVzLmNwcAogICAgIGVm
bC9ld2svZXdrX2ZyYW1lLmNwcAogICAgIGVmbC9ld2svZXdrX2hpc3RvcnkuY3BwCisgICAgZWZs
L2V3ay9ld2tfaGlzdG9yeV9kZWxlZ2F0ZS5jcHAKICAgICBlZmwvZXdrL2V3a19qcy5jcHAKICAg
ICBlZmwvZXdrL2V3a19tYWluLmNwcAogICAgIGVmbC9ld2svZXdrX25ldHdvcmsuY3BwCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2VmbC9D
aGFuZ2VMb2cKaW5kZXggYTE1MzNiYy4uOWU0OGNhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9lZmwvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDM4IEBACisyMDEyLTAzLTMwICBNaWtoYWlsIFBvemRueWFrb3YgIDxtaWtoYWlsLnBvemRu
eWFrb3ZAaW50ZWwuY29tPgorCisgICAgICAgIFtFRkxdIEdsb2JhbCBoaXN0b3J5IGRlbGVnYXRl
IHN1cHBvcnQgZm9yIEVGTCBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD04MjU3OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEFkZGVkIEV3a19IaXN0b3J5X0RlbGVnYXRlIGludGVyZmFjZSBhbmQgRXdr
X05hdmlnYXRpb25fRGF0YSBzdHJ1Y3R1cmUuIAorICAgICAgICBQdXQgRXdrX0hpc3RvcnlfRGVs
ZWdhdGUgdXNhZ2UgdG8gRnJhbWVMb2FkZXJDbGllbnRFZmwgYW5kIENocm9tZUNsaWVudEVmbCBj
bGFzc2VzLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50RWZsLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudEVmbDo6cG9wdWxhdGVWaXNpdGVkTGlua3Mp
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xp
ZW50RWZsLmg6CisgICAgICAgIChDaHJvbWVDbGllbnRFZmwpOgorICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50RWZsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
TG9hZGVyQ2xpZW50RWZsOjpkaXNwYXRjaFdpbGxTZW5kUmVxdWVzdCk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZUxvYWRlckNsaWVudEVmbDo6YXNzaWduSWRlbnRpZmllclRvSW5pdGlhbFJlcXVl
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRFZmw6OmRpc3BhdGNoRGVj
aWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxv
YWRlckNsaWVudEVmbDo6dXBkYXRlR2xvYmFsSGlzdG9yeVJlZGlyZWN0TGlua3MpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRFZmw6OnNldFRpdGxlKToKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50RWZsOjp1cGRhdGVHbG9iYWxIaXN0b3J5KToKKyAgICAg
ICAgKiBld2svRVdlYktpdC5oOgorICAgICAgICAqIGV3ay9ld2tfZnJhbWUuaDoKKyAgICAgICAg
KiBld2svZXdrX2hpc3RvcnlfZGVsZWdhdGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKGV3a19oaXN0
b3J5X2RlbGVnYXRlX25ldyk6CisgICAgICAgIChld2tfaGlzdG9yeV9kZWxlZ2F0ZV9mcmVlKToK
KyAgICAgICAgKiBld2svZXdrX2hpc3RvcnlfZGVsZWdhdGUuaDogQWRkZWQuCisgICAgICAgICog
ZXdrL2V3a192aWV3LmNwcDoKKyAgICAgICAgKF9Fd2tfVmlld19Qcml2YXRlX0RhdGEpOgorICAg
ICAgICAoX2V3a192aWV3X3ByaXZfZGVsKToKKyAgICAgICAgKGV3a192aWV3X2hpc3RvcnlfZGVs
ZWdhdGVfZ2V0KToKKyAgICAgICAgKGV3a192aWV3X2hpc3RvcnlfZGVsZWdhdGVfc2V0KToKKyAg
ICAgICAgKiBld2svZXdrX3ZpZXcuaDoKKwogMjAxMi0wMy0yOCAgTmF0ZSBDaGFwaW4gIDxqYXBo
ZXRAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJlbW92ZSBkaXNwYXRjaERpZExvYWRNYWluUmVz
b3VyY2UgY2FsbGJhY2ssIHNpbmNlIG5vCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9X
ZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRFZmwuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvV2Vi
Q29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50RWZsLmNwcAppbmRleCA2OGFkZjVmLi40NWY0ZGFjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRF
ZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVu
dEVmbC5jcHAKQEAgLTU0OSw2ICs1NDksMTUgQEAgUGFzc1JlZlB0cjxTZWFyY2hQb3B1cE1lbnU+
IENocm9tZUNsaWVudEVmbDo6Y3JlYXRlU2VhcmNoUG9wdXBNZW51KFBvcHVwTWVudUNsaWUKICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFNlYXJjaFBvcHVwTWVudUVmbChjbGllbnQpKTsKIH0KIAor
dm9pZCBDaHJvbWVDbGllbnRFZmw6OnBvcHVsYXRlVmlzaXRlZExpbmtzKCkKK3sKKyAgICBFd2tf
SGlzdG9yeV9EZWxlZ2F0ZSogaGlzdG9yeURlbGVnYXRlID0gZXdrX3ZpZXdfaGlzdG9yeV9kZWxl
Z2F0ZV9nZXQobV92aWV3KTsKKyAgICBpZiAoaGlzdG9yeURlbGVnYXRlCisgICAgICAgICYmIGhp
c3RvcnlEZWxlZ2F0ZS0+YXBpCisgICAgICAgICYmIGhpc3RvcnlEZWxlZ2F0ZS0+YXBpLT5wb3B1
bGF0ZV92aXNpdGVkX2xpbmtzX2Zvcl92aWV3ICkKKyAgICAgICAgKCpoaXN0b3J5RGVsZWdhdGUt
PmFwaS0+cG9wdWxhdGVfdmlzaXRlZF9saW5rc19mb3JfdmlldykoaGlzdG9yeURlbGVnYXRlLCBt
X3ZpZXcpOworfQorCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogdm9pZCBDaHJv
bWVDbGllbnRFZmw6OmF0dGFjaFJvb3RHcmFwaGljc0xheWVyKEZyYW1lKiBmcmFtZSwgR3JhcGhp
Y3NMYXllciogcm9vdExheWVyKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvV2Vi
Q29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50RWZsLmggYi9Tb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3Jl
U3VwcG9ydC9DaHJvbWVDbGllbnRFZmwuaAppbmRleCA5Y2U5ZDY4Li5iMmJhZDZiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRFZmwuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRFZmwuaApA
QCAtMTY0LDYgKzE2NCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaGFzT3BlbmVkUG9w
dXAoKSBjb25zdDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8UG9wdXBNZW51PiBjcmVhdGVQb3B1
cE1lbnUoUG9wdXBNZW51Q2xpZW50KikgY29uc3Q7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFNl
YXJjaFBvcHVwTWVudT4gY3JlYXRlU2VhcmNoUG9wdXBNZW51KFBvcHVwTWVudUNsaWVudCopIGNv
bnN0OworICAgIHZpcnR1YWwgdm9pZCBwb3B1bGF0ZVZpc2l0ZWRMaW5rcygpOwogCiAgICAgdmly
dHVhbCBib29sIHNob3VsZFJ1YmJlckJhbmRJbkRpcmVjdGlvbihXZWJDb3JlOjpTY3JvbGxEaXJl
Y3Rpb24pIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIHZvaWQgbnVtV2hlZWxF
dmVudEhhbmRsZXJzQ2hhbmdlZCh1bnNpZ25lZCkgeyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEVmbC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEVmbC5jcHAKaW5kZXgg
NmZhNWNjMC4uODM0MjZlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1
cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL1dl
YkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50RWZsLmNwcApAQCAtNyw2ICs3LDcgQEAKICAq
IENvcHlyaWdodCAoQykgMjAwOCBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbgogICogQ29weXJp
Z2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKICAqIENvcHlyaWdo
dCAoQykgMjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBJbnRlbCBDb3Jwb3JhdGlvbgogICoKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgpAQCAt
MTYyLDEzICsxNjMsMTUgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudEVmbDo6ZGlzcGF0Y2hEaWRD
YW5jZWxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShEb2N1bWVudExvYWQKIAogdm9pZCBGcmFtZUxv
YWRlckNsaWVudEVmbDo6ZGlzcGF0Y2hXaWxsU2VuZFJlcXVlc3QoRG9jdW1lbnRMb2FkZXIqIGxv
YWRlciwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBSZXNvdXJjZVJlcXVlc3QmIGNvcmVSZXF1
ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiBjb3JlUmVzcG9uc2UpCiB7Ci0gICAgQ1N0cmlu
ZyB1cmwgPSBjb3JlUmVxdWVzdC51cmwoKS5zdHJpbmcoKS51dGY4KCk7CisgICAgY29uc3QgQ1N0
cmluZyB1cmwgPSBjb3JlUmVxdWVzdC51cmwoKS5zdHJpbmcoKS51dGY4KCk7CiAgICAgREJHKCJS
ZXNvdXJjZSB1cmw9JXMiLCB1cmwuZGF0YSgpKTsKKyAgICBjb25zdCBDU3RyaW5nIG1ldGhvZCA9
IGNvcmVSZXF1ZXN0Lmh0dHBNZXRob2QoKS51dGY4KCk7CiAKLSAgICBFd2tfRnJhbWVfUmVzb3Vy
Y2VfUmVxdWVzdCByZXF1ZXN0ID0geyAwLCBpZGVudGlmaWVyIH07CisgICAgRXdrX0ZyYW1lX1Jl
c291cmNlX1JlcXVlc3QgcmVxdWVzdCA9IHsgMCwgMCwgaWRlbnRpZmllciB9OwogICAgIEV3a19G
cmFtZV9SZXNvdXJjZV9SZXF1ZXN0IG9yaWcgPSByZXF1ZXN0OyAvKiBJbml0aWFsaXplIGNvbnN0
IGZpZWxkcy4gKi8KIAogICAgIG9yaWcudXJsID0gcmVxdWVzdC51cmwgPSB1cmwuZGF0YSgpOwor
ICAgIG9yaWcuaHR0cF9tZXRob2QgPSByZXF1ZXN0Lmh0dHBfbWV0aG9kID0gbWV0aG9kLmRhdGEo
KTsKIAogICAgIGV3a19mcmFtZV9yZXF1ZXN0X3dpbGxfc2VuZChtX2ZyYW1lLCAmcmVxdWVzdCk7
CiAKQEAgLTIwMSw3ICsyMDQsNyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50RWZsOjphc3NpZ25J
ZGVudGlmaWVyVG9Jbml0aWFsUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlkZW50aQogICAgIENTdHJp
bmcgdXJsID0gY29yZVJlcXVlc3QudXJsKCkuc3RyaW5nKCkudXRmOCgpOwogICAgIERCRygiUmVz
b3VyY2UgdXJsPSVzIiwgdXJsLmRhdGEoKSk7CiAKLSAgICBFd2tfRnJhbWVfUmVzb3VyY2VfUmVx
dWVzdCByZXF1ZXN0ID0geyAwLCBpZGVudGlmaWVyIH07CisgICAgRXdrX0ZyYW1lX1Jlc291cmNl
X1JlcXVlc3QgcmVxdWVzdCA9IHsgMCwgMCwgaWRlbnRpZmllciB9OwogICAgIGV3a19mcmFtZV9y
ZXF1ZXN0X2Fzc2lnbl9pZGVudGlmaWVyKG1fZnJhbWUsICZyZXF1ZXN0KTsKIH0KIApAQCAtMjkz
LDEwICsyOTYsMTEgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudEVmbDo6ZGlzcGF0Y2hEZWNpZGVQ
b2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKEZyYW1lUG9saWN5RnUKIAogICAgIC8vIGlmIG5vdCBh
Y2NlcHROYXZpZ2F0aW9uUmVxdWVzdCAtIGxvb2sgYXQgUXQgLT4gUG9saWN5SWdub3JlOwogICAg
IC8vIEZJWE1FOiBkbyBwcm9wZXIgY2hlY2sgYW5kIG9ubHkgcmVzZXQgZm9ybXMgd2hlbiBvbiBQ
b2xpY3lJZ25vcmUKLSAgICBjaGFyKiB1cmwgPSBzdHJkdXAocmVzb3VyY2VSZXF1ZXN0LnVybCgp
LnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgIEV3a19GcmFtZV9SZXNvdXJjZV9SZXF1ZXN0
IHJlcXVlc3QgPSB7IHVybCwgMCB9OworICAgIGNvbnN0IENTdHJpbmcgdXJsID0gcmVzb3VyY2VS
ZXF1ZXN0LnVybCgpLnN0cmluZygpLnV0ZjgoKTsKKyAgICBjb25zdCBDU3RyaW5nIG1ldGhvZCA9
IHJlc291cmNlUmVxdWVzdC5odHRwTWV0aG9kKCkudXRmOCgpOworICAgIEV3a19GcmFtZV9SZXNv
dXJjZV9SZXF1ZXN0IHJlcXVlc3QgPSB7IHVybC5kYXRhKCksIG1ldGhvZC5kYXRhKCksIDAgfTsK
ICAgICBib29sIHJldCA9IGV3a192aWV3X25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uKG1fdmll
dywgJnJlcXVlc3QpOwotICAgIGZyZWUodXJsKTsKKwogCiAgICAgUG9saWN5QWN0aW9uIHBvbGlj
eTsKICAgICBpZiAoIXJldCkKQEAgLTQ2Niw2ICs0NzAsMjcgQEAgdm9pZCBGcmFtZUxvYWRlckNs
aWVudEVmbDo6cmVzdG9yZVZpZXdTdGF0ZSgpCiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRFZmw6
OnVwZGF0ZUdsb2JhbEhpc3RvcnlSZWRpcmVjdExpbmtzKCkKIHsKKyAgICBXZWJDb3JlOjpGcmFt
ZSogZnJhbWUgPSBFV0tQcml2YXRlOjpjb3JlRnJhbWUobV9mcmFtZSk7CisgICAgaWYgKCFmcmFt
ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqIGxvYWRl
ciA9IGZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKTsKKyAgICBpZiAoIWxvYWRlcikK
KyAgICAgICAgcmV0dXJuOworCisgICAgRXdrX0hpc3RvcnlfRGVsZWdhdGUqIGhpc3RvcnlEZWxl
Z2F0ZSA9IGV3a192aWV3X2hpc3RvcnlfZGVsZWdhdGVfZ2V0KG1fdmlldyk7CisgICAgaWYgKGhp
c3RvcnlEZWxlZ2F0ZSAmJiBoaXN0b3J5RGVsZWdhdGUtPmFwaSkgeworICAgICAgICBjb25zdCBD
U3RyaW5nIHNvdXJjZVVSTCA9IGxvYWRlci0+Y2xpZW50UmVkaXJlY3RTb3VyY2VGb3JIaXN0b3J5
KCkudXRmOCgpOworICAgICAgICBjb25zdCBDU3RyaW5nIGRlc3RVUkwgPSBsb2FkZXItPmNsaWVu
dFJlZGlyZWN0RGVzdGluYXRpb25Gb3JIaXN0b3J5KCkudXRmOCgpOworCisgICAgICAgIGlmICgh
bG9hZGVyLT5jbGllbnRSZWRpcmVjdFNvdXJjZUZvckhpc3RvcnkoKS5pc051bGwoKQorICAgICAg
ICAgICAgJiYgaGlzdG9yeURlbGVnYXRlLT5hcGktPmRpZF9wZXJmb3JtX2NsaWVudF9yZWRpcmVj
dF9mcm9tX3VybCkKKyAgICAgICAgICAgICgqaGlzdG9yeURlbGVnYXRlLT5hcGktPmRpZF9wZXJm
b3JtX2NsaWVudF9yZWRpcmVjdF9mcm9tX3VybCkoaGlzdG9yeURlbGVnYXRlLCBtX3ZpZXcsIHNv
dXJjZVVSTC5kYXRhKCksIGRlc3RVUkwuZGF0YSgpLCBtX2ZyYW1lKTsKKworICAgICAgICBpZiAo
IWxvYWRlci0+c2VydmVyUmVkaXJlY3RTb3VyY2VGb3JIaXN0b3J5KCkuaXNOdWxsKCkKKyAgICAg
ICAgICAgICYmIGhpc3RvcnlEZWxlZ2F0ZS0+YXBpLT5kaWRfcGVyZm9ybV9zZXJ2ZXJfcmVkaXJl
Y3RfZnJvbV91cmwpCisgICAgICAgICAgICAoKmhpc3RvcnlEZWxlZ2F0ZS0+YXBpLT5kaWRfcGVy
Zm9ybV9zZXJ2ZXJfcmVkaXJlY3RfZnJvbV91cmwpKGhpc3RvcnlEZWxlZ2F0ZSwgbV92aWV3LCBz
b3VyY2VVUkwuZGF0YSgpLCBkZXN0VVJMLmRhdGEoKSwgbV9mcmFtZSk7CisgICAgfQogfQogCiBi
b29sIEZyYW1lTG9hZGVyQ2xpZW50RWZsOjpzaG91bGRHb1RvSGlzdG9yeUl0ZW0oSGlzdG9yeUl0
ZW0qIGl0ZW0pIGNvbnN0CkBAIC03MTIsNyArNzM3LDEyIEBAIHZvaWQgRnJhbWVMb2FkZXJDbGll
bnRFZmw6OnByZXBhcmVGb3JEYXRhU291cmNlUmVwbGFjZW1lbnQoKQogCiB2b2lkIEZyYW1lTG9h
ZGVyQ2xpZW50RWZsOjpzZXRUaXRsZShjb25zdCBTdHJpbmdXaXRoRGlyZWN0aW9uJiB0aXRsZSwg
Y29uc3QgS1VSTCYgdXJsKQogewotICAgIC8vIG5vIG5lZWQgZm9yLCBkaXNwYXRjaERpZFJlY2Vp
dmVUaXRsZSBpcyB0aGUgcmlnaHQgY2FsbGJhY2sKKyAgICBFd2tfSGlzdG9yeV9EZWxlZ2F0ZSog
aGlzdG9yeURlbGVnYXRlID0gZXdrX3ZpZXdfaGlzdG9yeV9kZWxlZ2F0ZV9nZXQobV92aWV3KTsK
KworICAgIGlmIChoaXN0b3J5RGVsZWdhdGUKKyAgICAgICAgJiYgaGlzdG9yeURlbGVnYXRlLT5h
cGkKKyAgICAgICAgJiYgaGlzdG9yeURlbGVnYXRlLT5hcGktPnVwZGF0ZV9oaXN0b3J5X3RpdGxl
KQorICAgICAgICAoKmhpc3RvcnlEZWxlZ2F0ZS0+YXBpLT51cGRhdGVfaGlzdG9yeV90aXRsZSko
aGlzdG9yeURlbGVnYXRlLCBtX3ZpZXcsIHRpdGxlLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHVy
bC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKIH0KIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudEVm
bDo6ZGlzcGF0Y2hEaWRSZWNlaXZlQ29udGVudExlbmd0aChEb2N1bWVudExvYWRlciosIHVuc2ln
bmVkIGxvbmcgaWRlbnRpZmllciwgaW50IGRhdGFMZW5ndGgpCkBAIC04NzksNyArOTA5LDMzIEBA
IHZvaWQgRnJhbWVMb2FkZXJDbGllbnRFZmw6OnN0YXJ0RG93bmxvYWQoY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBTCiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRFZmw6OnVw
ZGF0ZUdsb2JhbEhpc3RvcnkoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgV2ViQ29y
ZTo6RnJhbWUqIGZyYW1lID0gRVdLUHJpdmF0ZTo6Y29yZUZyYW1lKG1fZnJhbWUpOworICAgIGlm
ICghZnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYkNvcmU6OkRvY3VtZW50TG9hZGVy
KiBsb2FkZXIgPSBmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCk7CisgICAgaWYgKCFs
b2FkZXIpCisgICAgICAgIHJldHVybjsKKworICAgIEV3a19IaXN0b3J5X0RlbGVnYXRlKiBoaXN0
b3J5RGVsZWdhdGUgPSBld2tfdmlld19oaXN0b3J5X2RlbGVnYXRlX2dldChtX3ZpZXcpOworICAg
IGlmIChoaXN0b3J5RGVsZWdhdGUKKyAgICAgICAgJiYgaGlzdG9yeURlbGVnYXRlLT5hcGkKKyAg
ICAgICAgJiYgaGlzdG9yeURlbGVnYXRlLT5hcGktPmRpZF9uYXZpZ2F0ZV93aXRoX25hdmlnYXRp
b25fZGF0YSkgeworICAgICAgICBjb25zdCBDU3RyaW5nIHVybEZvckhpc3RvcnkgPSBsb2FkZXIt
PnVybEZvckhpc3RvcnkoKS5zdHJpbmcoKS51dGY4KCk7CisgICAgICAgIGNvbnN0IENTdHJpbmcg
dGl0bGUgPSBsb2FkZXItPnRpdGxlKCkuc3RyaW5nKCkudXRmOCgpOworICAgICAgICBjb25zdCBD
U3RyaW5nIGNsaWVudFJlZGlyZWN0U291cmNlID0gbG9hZGVyLT5jbGllbnRSZWRpcmVjdFNvdXJj
ZUZvckhpc3RvcnkoKS51dGY4KCk7CisgICAgICAgIGNvbnN0IENTdHJpbmcgb3JpZ2luYWxVUkwg
PSBsb2FkZXItPm9yaWdpbmFsVVJMKCkuc3RyaW5nKCkudXRmOCgpOworICAgICAgICBjb25zdCBD
U3RyaW5nIGh0dHBNZXRob2QgPSBsb2FkZXItPnJlcXVlc3QoKS5odHRwTWV0aG9kKCkudXRmOCgp
OworICAgICAgICBjb25zdCBDU3RyaW5nIHJlc3BvbnNlVVJMID0gbG9hZGVyLT5yZXNwb25zZVVS
TCgpLnN0cmluZygpLnV0ZjgoKTsKKyAgICAgICAgCisgICAgICAgIEV3a19OYXZpZ2F0aW9uX0Rh
dGEgZGF0YSA9CisgICAgICAgIHt1cmxGb3JIaXN0b3J5LmRhdGEoKSwgdGl0bGUuZGF0YSgpLAor
ICAgICAgICAge29yaWdpbmFsVVJMLmRhdGEoKSwgaHR0cE1ldGhvZC5kYXRhKCksIDB9LAorICAg
ICAgICAge3Jlc3BvbnNlVVJMLmRhdGEoKSwgbG9hZGVyLT5yZXNwb25zZSgpLmh0dHBTdGF0dXND
b2RlKCl9LAorICAgICAgICAgbG9hZGVyLT5zdWJzdGl0dXRlRGF0YSgpLmlzVmFsaWQoKSwgY2xp
ZW50UmVkaXJlY3RTb3VyY2UuZGF0YSgpfTsKKworICAgICAgICAgKCpoaXN0b3J5RGVsZWdhdGUt
PmFwaS0+ZGlkX25hdmlnYXRlX3dpdGhfbmF2aWdhdGlvbl9kYXRhKShoaXN0b3J5RGVsZWdhdGUs
IG1fdmlldywgJmRhdGEsIG1fZnJhbWUpOworICAgIH0KIH0KIAogdm9pZCBGcmFtZUxvYWRlckNs
aWVudEVmbDo6c2F2ZVBsYXRmb3JtRGF0YVRvQ2FjaGVkRnJhbWUoQ2FjaGVkRnJhbWUqKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL0VXZWJLaXQuaCBiL1NvdXJjZS9XZWJLaXQv
ZWZsL2V3ay9FV2ViS2l0LmgKaW5kZXggMGZmYjUxYy4uMzQyZDAzOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9lZmwvZXdrL0VXZWJLaXQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2sv
RVdlYktpdC5oCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiZXdrX2Nvb2tpZXMuaCIKICNp
bmNsdWRlICJld2tfZnJhbWUuaCIKICNpbmNsdWRlICJld2tfaGlzdG9yeS5oIgorI2luY2x1ZGUg
ImV3a19oaXN0b3J5X2RlbGVnYXRlLmgiCiAjaW5jbHVkZSAiZXdrX2pzLmgiCiAjaW5jbHVkZSAi
ZXdrX21haW4uaCIKICNpbmNsdWRlICJld2tfbmV0d29yay5oIgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9lZmwvZXdrL2V3a19mcmFtZS5oIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19m
cmFtZS5oCmluZGV4IGY3NDU1NWUuLjVhZDk2ODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
ZWZsL2V3ay9ld2tfZnJhbWUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2ZyYW1l
LmgKQEAgLTEsNiArMSw3IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFByb0ZV
U0lPTiBlbWJlZGRlZCBzeXN0ZW1zCiAgICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgU2Ftc3Vu
ZyBFbGVjdHJvbmljcworICAgIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbgog
CiAgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCkBAIC05NiwxOCArOTcsMzMgQEAgc3RydWN0IF9Fd2tfRnJhbWVf
TG9hZF9FcnJvciB7CiAKIC8vLyBDcmVhdGVzIGEgdHlwZSBuYW1lIGZvciBfRXdrX0ZyYW1lX1Jl
c291cmNlX1JlcXVlc3QuCiB0eXBlZGVmIHN0cnVjdCBfRXdrX0ZyYW1lX1Jlc291cmNlX1JlcXVl
c3QgRXdrX0ZyYW1lX1Jlc291cmNlX1JlcXVlc3Q7CisKIC8qKgotICogQGJyaWVmICAgU3RydWN0
dXJlIHVzZWQgdG8gcmVwb3J0IHJlc291cmNlIHJlcXVlc3QuCisgKiBAYnJpZWYgICBTdHJ1Y3R1
cmUgY29udGFpbmluZyBkZXRhaWxzIGFib3V0IGEgcmVzb3VyY2UgcmVxdWVzdC4KICAqCi0gKiBE
ZXRhaWxzIGdpdmVuIGJlZm9yZSBhIHJlc291cmNlIGlzIGxvYWRlZCBvbiBhIGdpdmVuIGZyYW1l
LiBJdCdzIHVzZWQgYnkKLSAqIGV3a19mcmFtZV9yZXF1ZXN0X3dpbGxfc2VuZCgpIHRvIGluZm9y
bSB0aGUgZGV0YWlscyBvZiBhIHRvLWJlLWxvYWRlZAotICogcmVzb3VyY2UsIGFsbG93aW5nIHRo
ZW0gdG8gYmUgb3ZlcnJpZGRlbi4KKyAqIERldGFpbHMgZ2l2ZW4gYmVmb3JlIGEgcmVzb3VyY2Ug
aXMgbG9hZGVkIG9uIGEgZ2l2ZW4gZnJhbWUuIEl0J3MgdXNlZCBpbgorICogRXdrX0ZyYW1lX1Jl
c291cmNlX01lc3NhZ2VzIHRvIGluZm9ybSBhYm91dCB0aGUgZGV0YWlscyBvZiBhIHJlc291cmNl
IHJlcXVlc3QuCiAgKi8KIHN0cnVjdCBfRXdrX0ZyYW1lX1Jlc291cmNlX1JlcXVlc3QgewogICAg
IGNvbnN0IGNoYXIgKnVybDsgLyoqPCB1cmwgb2YgdGhlIHJlc291cmNlICovCisgICAgY29uc3Qg
Y2hhciAqaHR0cF9tZXRob2Q7IC8qKjwgaHR0cCBtZXRob2Qgb2YgdGhlIHJlc291cmNlICovCiAg
ICAgY29uc3QgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyOyAvKio8IGlkZW50aWZpZXIgb2YgcmVz
b3VyY2UsIGNhbiBub3QgYmUgY2hhbmdlZCAqLwogfTsKIAorLy8vIENyZWF0ZXMgYSB0eXBlIG5h
bWUgZm9yIF9Fd2tfRnJhbWVfUmVzb3VyY2VfUmVzcG9uc2UuCit0eXBlZGVmIHN0cnVjdCBfRXdr
X0ZyYW1lX1Jlc291cmNlX1Jlc3BvbnNlIEV3a19GcmFtZV9SZXNvdXJjZV9SZXNwb25zZTsKKwor
LyoqCisgKiBAYnJpZWYgICBTdHJ1Y3R1cmUgY29udGFpbmluZyBkZXRhaWxzIGFib3V0IGEgcmVz
cG9uc2UgdG8gYSByZXNvdXJjZSByZXF1ZXN0LgorICoKKyAqIERldGFpbHMgZ2l2ZW4gaW4gdGhl
IHJlc3BvbnNlIHRvIGEgcmVzb3VyY2UgcmVxdWVzdC4gSXQncyB1c2VkIGJ5CisgKiBld2tfZnJh
bWVfcmVzcG9uc2VfcmVjZWl2ZWQoKSB0byBpbmZvcm0gYWJvdXQgdGhlIGRldGFpbHMgb2YgYSBy
ZXNwb25zZS4KKyAqLworc3RydWN0IF9Fd2tfRnJhbWVfUmVzb3VyY2VfUmVzcG9uc2UgeworICAg
IGNvbnN0IGNoYXIgKnVybDsgLyoqPCB1cmwgb2YgdGhlIHJlc291cmNlICovCisgICAgY29uc3Qg
aW50IHN0YXR1c19jb2RlOyAvKio8IGh0dHAgc3RhdHVzIGNvZGUgKi8KK307CisKIC8vLyBFbnVt
IGNvbnRhaW5pbmcgaGl0IHRlc3QgZGF0YSB0eXBlcwogdHlwZWRlZiBlbnVtIHsKICAgICBFV0tf
SElUX1RFU1RfUkVTVUxUX0NPTlRFWFRfRE9DVU1FTlQgPSAxIDw8IDEsCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2hpc3RvcnlfZGVsZWdhdGUuY3BwIGIvU291cmNlL1dl
YktpdC9lZmwvZXdrL2V3a19oaXN0b3J5X2RlbGVnYXRlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5jN2U0NjM4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dC9lZmwvZXdrL2V3a19oaXN0b3J5X2RlbGVnYXRlLmNwcApAQCAtMCwwICsxLDU3IEBACisvKgor
KiBDb3B5cmlnaHQgKGMpIDIwMTIsIEludGVsIENvcnBvcmF0aW9uCisqCisqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyogbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQg
bm90aWNlLAorKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKiAqIE5laXRoZXIgdGhlIG5hbWUgb2YgSW50
ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBz
b2Z0d2FyZSB3aXRob3V0CisqIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoK
KyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUyAiQVMgSVMiCisqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UKKyogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQg
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFCisqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiZXdrX2hpc3RvcnlfZGVsZWdhdGUuaCIKKwor
I2luY2x1ZGUgPGVpbmFfc2FmZXR5X2NoZWNrcy5oPgorCitFd2tfSGlzdG9yeV9EZWxlZ2F0ZSog
ZXdrX2hpc3RvcnlfZGVsZWdhdGVfbmV3KEVpbmFfRnJlZV9DYiBkYXRhX2ZyZWVfY2IpCit7Cisg
ICAgRXdrX0hpc3RvcnlfRGVsZWdhdGUqIHJlcyA9IG5ldyBFd2tfSGlzdG9yeV9EZWxlZ2F0ZTsK
KyAgICBtZW1zZXQocmVzLCAwLCBzaXplb2YoRXdrX0hpc3RvcnlfRGVsZWdhdGUpKTsKKworICAg
IHJlcy0+YXBpID0gbmV3IEV3a19IaXN0b3J5X0RlbGVnYXRlX0NsYXNzOworICAgIG1lbXNldChy
ZXMtPmFwaSwgMCwgc2l6ZW9mKEV3a19IaXN0b3J5X0RlbGVnYXRlX0NsYXNzKSk7CisKKyAgICBy
ZXMtPmRhdGFfZnJlZV9jYiA9IGRhdGFfZnJlZV9jYjsKKworICAgIHJldHVybiByZXM7Cit9CisK
K3ZvaWQgZXdrX2hpc3RvcnlfZGVsZWdhdGVfZnJlZShFd2tfSGlzdG9yeV9EZWxlZ2F0ZSogaGQp
Cit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oaGQpOworCisgICAgaWYgKGhkLT5k
YXRhX2ZyZWVfY2IpCisgICAgICAgICgqaGQtPmRhdGFfZnJlZV9jYikoaGQtPmRhdGEpOworCisg
ICAgZGVsZXRlIGhkLT5hcGk7CisgICAgZGVsZXRlIGhkOworfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9lZmwvZXdrL2V3a19oaXN0b3J5X2RlbGVnYXRlLmggYi9Tb3VyY2UvV2ViS2l0L2Vm
bC9ld2svZXdrX2hpc3RvcnlfZGVsZWdhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5jYWJlM2MyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdr
L2V3a19oaXN0b3J5X2RlbGVnYXRlLmgKQEAgLTAsMCArMSwxNDcgQEAKKy8qCisqIENvcHlyaWdo
dCAoYykgMjAxMiwgSW50ZWwgQ29ycG9yYXRpb24KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUgbWV0OgorKgorKiAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworKiBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisq
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlIGRvY3VtZW50YXRpb24KKyogYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisqICogTmVpdGhlciB0aGUgbmFtZSBvZiBJbnRlbCBDb3Jwb3Jh
dGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqIGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQKKyogc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTICJBUyBJUyIKKyogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUKKyogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUKKyogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjaWZuZGVmIGV3a19o
aXN0b3J5X2RlbGVnYXRlX2gKKyNkZWZpbmUgZXdrX2hpc3RvcnlfZGVsZWdhdGVfaAorCisjaW5j
bHVkZSAiZXdrX2ZyYW1lLmgiCisKKyNpbmNsdWRlIDxFaW5hLmg+CisjaW5jbHVkZSA8RXZhcy5o
PgorI2luY2x1ZGUgPGNhaXJvLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7
CisjZW5kaWYKKy8vIEZJWE1FOiBTaG91bGQgYmUgcmUtZmFjdG9yZWQgaWYgRW5saWdodGVubWVu
dCBnZW5lcmljIG9iamVjdCBtb2RlbCB0dXJucyB1cAorCisvLy8gQ3JlYXRlcyBhIHR5cGUgbmFt
ZSBmb3IgQGEgX0V3a19OYXZpZ2F0aW9uX0RhdGEuCit0eXBlZGVmIHN0cnVjdCBfRXdrX05hdmln
YXRpb25fRGF0YSBFd2tfTmF2aWdhdGlvbl9EYXRhOworCisvLy8gQ3JlYXRlcyBhIHR5cGUgbmFt
ZSBmb3IgQGEgX0V3a19IaXN0b3J5X0RlbGVnYXRlX0NsYXNzLgordHlwZWRlZiBzdHJ1Y3QgX0V3
a19IaXN0b3J5X0RlbGVnYXRlX0NsYXNzIEV3a19IaXN0b3J5X0RlbGVnYXRlX0NsYXNzOworCisv
Ly8gQ3JlYXRlcyBhIHR5cGUgbmFtZSBmb3IgQGEgX0V3a19IaXN0b3J5X0RlbGVnYXRlLgordHlw
ZWRlZiBzdHJ1Y3QgX0V3a19IaXN0b3J5X0RlbGVnYXRlIEV3a19IaXN0b3J5X0RlbGVnYXRlOwor
CisvKioKKyAqIEBicmllZiAgIFN0cnVjdHVyZSBjb250YWluaW5nIGRldGFpbHMgYWJvdXQgYSBX
ZWIgVmlldyBuYXZpZ2F0aW9uLgorICoKKyAqIERldGFpbHMgb2YgYSBXZWIgVmlldyBuYXZpZ2F0
aW9uLiBJdCBpcyB1c2VkIGJ5IGV3a19oaXN0b3J5X2RlbGVnYXRlX2RpZF9uYXZpZ2F0ZV93aXRo
X25hdmlnYXRpb25fZGF0YSgpIHRvIGluZm9ybSBhYm91dCB0aGUgZGVhdGlscyBvZiBhIG5hdmln
YXRpb24uCisgKi8KK3N0cnVjdCBfRXdrX05hdmlnYXRpb25fRGF0YSB7CisgICAgY29uc3QgY2hh
ciogdXJsOyAgLyoqPCB1cmwgb2YgdGhlIG5hdmlnYXRlZCBwYWdlICovCisgICAgY29uc3QgY2hh
ciogdGl0bGU7ICAvKio8IHRpdGxlIG9mIHRoZSBuYXZpZ2F0ZWQgcGFnZSAqLworICAgIEV3a19G
cmFtZV9SZXNvdXJjZV9SZXF1ZXN0IHJlcXVlc3Q7ICAvKio8IG5hdmlnYXRpb24gcmVxdWVzdCAq
LworICAgIEV3a19GcmFtZV9SZXNvdXJjZV9SZXNwb25zZSByZXNwb25zZTsgIC8qKjwgbmF2aWdh
dGlvbiByZXNwb25zZSAqLworICAgIEVpbmFfQm9vbCBoYXNTdWJzdGl0dXRlRGF0YTsgIC8qKjwg
ZGF0YSBzdWJzdGl0dXRpb24gZmxhZyAqLworICAgIGNvbnN0IGNoYXIqIGNsaWVudFJlZGlyZWN0
U291cmNlOyAgLyoqPCBjbGllbnQgcmVkaXJlY3Qgc291cmNlIHVybCovCit9OworCisvLy8gRXdr
IEhpc3RvcnkgRGVsZWdhdGUncyBjbGFzcywgdG8gYmUgb3ZlcnJpZGRlbiBieSBzdWItY2xhc3Nl
cy4KK3N0cnVjdCBfRXdrX0hpc3RvcnlfRGVsZWdhdGVfQ2xhc3MgeworICAgIC8qKgorICAgICAq
IEludm9rZWQgaWYgd2ViIHZpZXcgbmF2aWdhdGVkIHRvIGEgbmV3IHVybC4KKyAgICAgKgorICAg
ICAqIEBwYXJhbSBoZCBoaXN0b3J5IGRlbGVnYXRlIG9iamVjdC4KKyAgICAgKiBAcGFyYW0gdmll
dyBld2tfdmlldyBvYmplY3QuCisgICAgICogQHBhcmFtIG5kIGV3a19uYXZpZ2F0aW9uX2RhdGEg
b2JqZWN0IGNvbnRhaW5pbmcgZGV0YWlscyBvZiB0aGUgbmF2aWdhdGlvbi4KKyAgICAgKiBAcGFy
YW0gZnJhbWUgZXdrX2ZyYW1lIG9iamVjdCBvd25lZCBieSB0aGUgQGEgdmlldy4KKyAgICAgKi8K
KyAgICB2b2lkICgqZGlkX25hdmlnYXRlX3dpdGhfbmF2aWdhdGlvbl9kYXRhKShFd2tfSGlzdG9y
eV9EZWxlZ2F0ZSogaGQsIGNvbnN0IEV2YXNfT2JqZWN0KiB2aWV3LCBFd2tfTmF2aWdhdGlvbl9E
YXRhKiBuZCwgY29uc3QgRXZhc19PYmplY3QqIGZyYW1lKTsKKyAgICAvKioKKyAgICAgKiBJbnZv
a2VkIGlmIHdlYiB2aWV3IHBlcmZvcm1lZCBhIGNsaWVudCByZWRpcmVjdC4KKyAgICAgKgorICAg
ICAqIEBwYXJhbSBoZCBoaXN0b3J5IGRlbGVnYXRlIG9iamVjdC4KKyAgICAgKiBAcGFyYW0gdmll
dyBld2tfdmlldyBvYmplY3QuCisgICAgICogQHBhcmFtIHN1cmwgc291cmNlIHVybC4KKyAgICAg
KiBAcGFyYW0gZHVybCBkZXN0aW5hdGlvbiB1cmwuCisgICAgICogQHBhcmFtIGZyYW1lIGV3a19m
cmFtZSBvYmplY3Qgb3duZWQgYnkgdGhlIEBhIHZpZXcuCisgICAgICovCisgICAgdm9pZCAoKmRp
ZF9wZXJmb3JtX2NsaWVudF9yZWRpcmVjdF9mcm9tX3VybCkoRXdrX0hpc3RvcnlfRGVsZWdhdGUq
IGhkLCBjb25zdCBFdmFzX09iamVjdCogdmlldywgY29uc3QgY2hhciogc3VybCwgY29uc3QgY2hh
ciogZHVybCwgY29uc3QgRXZhc19PYmplY3QqIGZyYW1lKTsKKyAgICAvKioKKyAgICAgKiBJbnZv
a2VkIGlmIHdlYiB2aWV3IHBlcmZvcm1lZCBhIHNlcnZlciByZWRpcmVjdC4KKyAgICAgKgorICAg
ICAqIEBwYXJhbSBoZCBoaXN0b3J5IGRlbGVnYXRlIG9iamVjdC4KKyAgICAgKiBAcGFyYW0gdmll
dyBld2tfdmlldyBvYmplY3QuCisgICAgICogQHBhcmFtIHN1cmwgc291cmNlIHVybC4KKyAgICAg
KiBAcGFyYW0gZHVybCBkZXN0aW5hdGlvbiB1cmwuCisgICAgICogQHBhcmFtIGZyYW1lIGV3a19m
cmFtZSBvYmplY3Qgb3duZWQgYnkgdGhlIEBhIHZpZXcuCisgICAgICovCisgICAgdm9pZCAoKmRp
ZF9wZXJmb3JtX3NlcnZlcl9yZWRpcmVjdF9mcm9tX3VybCkoRXdrX0hpc3RvcnlfRGVsZWdhdGUq
IGhkLCBjb25zdCBFdmFzX09iamVjdCogdmlldywgY29uc3QgY2hhciogc3VybCwgY29uc3QgY2hh
ciogZHVybCwgY29uc3QgRXZhc19PYmplY3QqIGZyYW1lKTsKKyAgICAvKioKKyAgICAgKiBJbnZv
a2VkIGlmIHdlYiB2aWV3IHRpdGxlIGhhcyBiZWVuIHVwZGF0ZWQuCisgICAgICoKKyAgICAgKiBA
cGFyYW0gaGQgaGlzdG9yeSBkZWxlZ2F0ZSBvYmplY3QuCisgICAgICogQHBhcmFtIHZpZXcgZXdr
X3ZpZXcgb2JqZWN0LgorICAgICAqIEBwYXJhbSB0aXRsZSB3ZWIgdmlldyB0aXRsZS4KKyAgICAg
KiBAcGFyYW0gdXJsIHdlYiB2aWV3IHVybC4KKyAgICAgKi8KKyAgICB2b2lkICgqdXBkYXRlX2hp
c3RvcnlfdGl0bGUpKEV3a19IaXN0b3J5X0RlbGVnYXRlKiBoZCwgY29uc3QgRXZhc19PYmplY3Qq
IHZpZXcsIGNvbnN0IGNoYXIqIHRpdGxlLCBjb25zdCBjaGFyKiB1cmwpOworICAgIC8qKgorICAg
ICAqIEludm9rZWQgdG8gcG9wdWxhdGUgdmlzaXRlZCBsaW5rcyBmb3Igd2ViIHZpZXcuCisgICAg
ICoKKyAgICAgKiBAcGFyYW0gaGQgaGlzdG9yeSBkZWxlZ2F0ZSBvYmplY3QuCisgICAgICogQHBh
cmFtIHZpZXcgZXdrX3ZpZXcgb2JqZWN0LgorICAgICAqLworICAgIHZvaWQgKCpwb3B1bGF0ZV92
aXNpdGVkX2xpbmtzX2Zvcl92aWV3KShFd2tfSGlzdG9yeV9EZWxlZ2F0ZSogaGQsIGNvbnN0IEV2
YXNfT2JqZWN0KiB2aWV3KTsKK307CisKKy8qKgorICogQGJyaWVmIENvbnRhaW5zIGFuIGludGVy
bmFsIEhpc3RvcnkgRGVsZWdhdGUgZGF0YS4KKyAqCisgKiBJdCBpcyB0byBiZSBjb25zaWRlcmVk
IHByaXZhdGUgYnkgdXNlcnMsIGJ1dCBtYXkgYmUgZXh0ZW5kZWQgb3IKKyAqIGNoYW5nZWQgYnkg
c3ViLWNsYXNzZXMgKHRoYXQncyB3aHkgaXQncyBpbiB0aGUgcHVibGljIGhlYWRlciBmaWxlKS4K
KyAqLworc3RydWN0IF9Fd2tfSGlzdG9yeV9EZWxlZ2F0ZSB7CisgICAgRXdrX0hpc3RvcnlfRGVs
ZWdhdGVfQ2xhc3MgKmFwaTsgLyoqPCBSZWZlcmVuY2UgdG8gY2FzdGVkIGNsYXNzIGluc3RhbmNl
LiAqLworICAgIHZvaWQgKmRhdGE7IC8qKjwgc3ViLWNsYXNzZXMgb3duIGRhdGEuKi8KKyAgICBF
aW5hX0ZyZWVfQ2IgZGF0YV9mcmVlX2NiOyAvKio8IGNhbGxiYWNrIHRvIGJlIGludm9rZWQgdG8g
ZnJlZSBAYSBkYXRhICovCit9OworCisvKioKKyAqIENyZWF0ZSBhIG5ldyBoaXN0b3J5IGRlbGVn
YXRlIG9iamVjdCBpbnN0YW5jZS4KKyAqCisgKiBAcGFyYW0gZGF0YV9mcmVlX2NiIGNhbGxiYWNr
IHRvIGJlIGludm9rZWQgdG8gZnJlZSBoaXN0b3J5IGRlbGVnYXRlJ3MgZGF0YS4KKyAqCisgKiBA
cmV0dXJuIG5ld2x5IGFsbG9jYXRlZCBoaXN0b3J5IGRlbGVnYXRlLiBZb3UgbXVzdAorICogICAg
ICAgICBmcmVlIHRoaXMgZGVsZWdhdGUgd2l0aCBld2tfaGlzdG9yeV9kZWxlZ2F0ZV9mcmVlKCku
CisgKi8KK0VBUEkgRXdrX0hpc3RvcnlfRGVsZWdhdGUqIGV3a19oaXN0b3J5X2RlbGVnYXRlX25l
dyhFaW5hX0ZyZWVfQ2IgZGF0YV9mcmVlX2NiKTsKKworLyoqCisgKiBGcmVlIGdpdmVuIGhpc3Rv
cnkgZGVsZWdhdGUgaW5zdGFuY2UuCisgKgorICogQHBhcmFtIGhkIHdoYXQgdG8gZnJlZS4KKyAq
LworRUFQSSB2b2lkIGV3a19oaXN0b3J5X2RlbGVnYXRlX2ZyZWUoRXdrX0hpc3RvcnlfRGVsZWdh
dGUqIGhkKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZiAvLyBld2tf
aGlzdG9yeV9kZWxlZ2F0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdr
X3ZpZXcuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3LmNwcAppbmRleCAyNmI1
NTVjLi4yM2RjZWRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5jcHAKQEAgLTEsNiArMSw3
IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBz
eXN0ZW1zCiAgICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcwor
ICAgIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbgogCiAgICAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICAg
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCkBAIC0xNDcsNiArMTQ4LDcgQEAgc3RydWN0IF9Fd2tfVmlld19Qcml2YXRlX0RhdGEgewog
ICAgIFdlYkNvcmU6OkZyYW1lKiBtYWluRnJhbWU7CiAgICAgV2ViQ29yZTo6Vmlld3BvcnRBcmd1
bWVudHMgdmlld3BvcnRBcmd1bWVudHM7CiAgICAgRXdrX0hpc3RvcnkqIGhpc3Rvcnk7CisgICAg
RXdrX0hpc3RvcnlfRGVsZWdhdGUqIGhpc3RvcnlEZWxlZ2F0ZTsKICAgICBPd25QdHI8V2ViQ29y
ZTo6UGFnZUNsaWVudEVmbD4gcGFnZUNsaWVudDsKICAgICBzdHJ1Y3QgewogICAgICAgICBFd2tf
TWVudSBtZW51OwpAQCAtNzUzLDYgKzc1NSw3IEBAIHN0YXRpYyB2b2lkIF9ld2tfdmlld19wcml2
X2RlbChFd2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYpCiAgICAgICAgIGVjb3JlX2FuaW1hdG9y
X2RlbChwcml2LT5hbmltYXRlZFpvb20uYW5pbWF0b3IpOwogCiAgICAgZXdrX2hpc3RvcnlfZnJl
ZShwcml2LT5oaXN0b3J5KTsKKyAgICBld2tfaGlzdG9yeV9kZWxlZ2F0ZV9mcmVlKHByaXYtPmhp
c3RvcnlEZWxlZ2F0ZSk7CiAKICAgICBkZWxldGUgcHJpdjsKIH0KQEAgLTM5MTMsNiArMzkxNiwy
MSBAQCBFd2tfUGFnZV9WaXNpYmlsaXR5X1N0YXRlIGV3a192aWV3X3Zpc2liaWxpdHlfc3RhdGVf
Z2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaQogI2VuZGlmCiB9CiAKK0V3a19IaXN0b3J5X0Rl
bGVnYXRlKiBld2tfdmlld19oaXN0b3J5X2RlbGVnYXRlX2dldChjb25zdCBFdmFzX09iamVjdCog
ZXdrVmlldykKK3sKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0
RGF0YSwgMCk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJp
diwgMCk7CisgICAgcmV0dXJuIHByaXYtPmhpc3RvcnlEZWxlZ2F0ZTsKK30KKwordm9pZCBld2tf
dmlld19oaXN0b3J5X2RlbGVnYXRlX3NldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldywgRXdr
X0hpc3RvcnlfRGVsZWdhdGUqIGRlbGVnYXRlKQoreworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4oZXdrVmlldywgc21hcnREYXRhKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRV
Uk4oc21hcnREYXRhLCBwcml2KTsKKyAgICBld2tfaGlzdG9yeV9kZWxlZ2F0ZV9mcmVlKHByaXYt
Pmhpc3RvcnlEZWxlZ2F0ZSk7CisgICAgcHJpdi0+aGlzdG9yeURlbGVnYXRlID0gZGVsZWdhdGU7
Cit9CisKIFNvdXBTZXNzaW9uKiBld2tfdmlld19zb3VwX3Nlc3Npb25fZ2V0KGNvbnN0IEV2YXNf
T2JqZWN0KiBld2tWaWV3KQogewogICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmll
dywgc21hcnREYXRhLCAwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tf
dmlldy5oIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3LmgKaW5kZXggMWM1MzMzNS4u
OGRlNzdjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3LmgKKysr
IGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3LmgKQEAgLTEsNiArMSw3IEBACiAvKgog
ICAgIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCiAg
ICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcworICAgIENvcHly
aWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbgogCiAgICAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICAgIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC05
MCw2ICs5MSw3IEBACiAKICNpbmNsdWRlICJld2tfZnJhbWUuaCIKICNpbmNsdWRlICJld2tfaGlz
dG9yeS5oIgorI2luY2x1ZGUgImV3a19oaXN0b3J5X2RlbGVnYXRlLmgiCiAjaW5jbHVkZSAiZXdr
X2pzLmgiCiAjaW5jbHVkZSAiZXdrX3dpbmRvd19mZWF0dXJlcy5oIgogCkBAIC0yMzM4LDYgKzIz
NDAsMzAgQEAgRUFQSSBFaW5hX0Jvb2wgZXdrX3ZpZXdfbWl4ZWRfY29udGVudF9kaXNwbGF5ZWRf
Z2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpvKTsKIEVBUEkgRWluYV9Cb29sIGV3a192aWV3X21peGVk
X2NvbnRlbnRfcnVuX2dldChjb25zdCBFdmFzX09iamVjdCAqbyk7CiAKIC8qKgorICogUmV0dXJu
cyB0aGUgRXdrX0hpc3RvcnlfRGVsZWdhdGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdmlldy4KKyAq
CisgKiBAcGFyYW0gbyBUaGUgdmlldyB0byBxdWVyeS4KKyAqCisgKiBAcmV0dXJuIEBjIEV3a19I
aXN0b3J5X0RlbGVnYXRlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHZpZXcgb3IgQGMgMCBpZiB0aGVy
ZSBpcyBubyBhc3NvY2lhdGVkIEV3a19IaXN0b3J5X0RlbGVnYXRlCisgKgorICogQHNhIGV3a192
aWV3X2hpc3RvcnlfZGVsZWdhdGVfc2V0CisgKi8KK0VBUEkgRXdrX0hpc3RvcnlfRGVsZWdhdGUq
IGV3a192aWV3X2hpc3RvcnlfZGVsZWdhdGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpvKTsKKwor
LyoqCisgKiBBc3NvY2lhdGVzIGEgbmV3IEV3a19IaXN0b3J5X0RlbGVnYXRlIHdpdGggdGhpcyB2
aWV3LgorICoKKyAqIEBub3RlIFRoZSB2aWV3IHRha2VzIG93bmVyc2hpcCBvdmVyIHRoZSBkZWxl
Z2F0ZS4gSWYgdGhlIGFzc29jaWF0ZWQgZGVsZWdhdGUgc2hvdWxkIGJlIGRlbGV0ZWQKKyAqICAg
ICAgIGltbWlkaWF0ZWx5IGV3a192aWV3X2hpc3RvcnlfZGVsZWdhdGVfc2V0KGNvbnN0IEV2YXNf
T2JqZWN0ICpvLCAwKSBzaGFsbCBiZSBpbnZva2VkCisgKgorICogQHBhcmFtIG8gVGhlIHZpZXcg
dG8gY2hhbmdlLgorICogQHBhcmFtIHNlc3Npb24gVGhlIG5ldyBFd2tfSGlzdG9yeV9EZWxlZ2F0
ZS4KKyAqCisgKiBAc2EgZXdrX3ZpZXdfaGlzdG9yeV9kZWxlZ2F0ZV9nZXQKKyAqLworRUFQSSB2
b2lkIGV3a192aWV3X2hpc3RvcnlfZGVsZWdhdGVfc2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpvLCBF
d2tfSGlzdG9yeV9EZWxlZ2F0ZSAqZGVsZWdhdGUpOworCisvKioKICAqIFJldHVybnMgdGhlIFNv
dXBTZXNzaW9uIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHZpZXcuCiAgKgogICogQnkgZGVmYXVsdCwg
YWxsIHZpZXdzIHNoYXJlIHRoZSBzYW1lLCBkZWZhdWx0IHNvdXAgc2Vzc2lvbiBhbHNvIGF2YWls
YWJsZQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4
IDljYjY1ODEuLmYxZGI1OWUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29s
cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBAQAorMjAxMi0wMy0zMCAgTWlraGFpbCBQb3pkbnlh
a292ICA8bWlraGFpbC5wb3pkbnlha292QGludGVsLmNvbT4KKworICAgICAgICBbRUZMXSBHbG9i
YWwgaGlzdG9yeSBkZWxlZ2F0ZSBzdXBwb3J0IGZvciBFRkwgcG9ydAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI1NzkKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDcmVhdGUgaGlzdG9yeSBkZWxlZ2F0ZSBh
bmQgc2V0IGl0IGZvciBhcHByb3ByaWF0ZSB0ZXN0cy4KKworICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL2VmbC9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9lZmwvRHVt
cFJlbmRlclRyZWUuY3BwOgorICAgICAgICAoaXNHbG9iYWxIaXN0b3J5VGVzdCk6CisgICAgICAg
IChydW5UZXN0KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9lZmwvSGlzdG9yeURlbGVnYXRl
LmNwcDogQWRkZWQuCisgICAgICAgIChkaWROYXZpZ2F0ZVdpdGhOYXZpZ2F0aW9uRGF0YSk6Cisg
ICAgICAgIChkaWRQZXJmb3JtQ2xpZW50UmVkaXJlY3RGcm9tVVJMKToKKyAgICAgICAgKGRpZFBl
cmZvcm1TZXJ2ZXJSZWRpcmVjdEZyb21VUkwpOgorICAgICAgICAodXBkYXRlSGlzdG9yeVRpdGxl
KToKKyAgICAgICAgKHBvcHVsYXRlVmlzaXRlZExpbmtzRm9yV2ViVmlldyk6CisgICAgICAgICho
aXN0b3J5X2RlbGVnYXRlX25ldyk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvZWZsL0hpc3Rv
cnlEZWxlZ2F0ZS5oOiBBZGRlZC4KKwogMjAxMi0wMy0yOSAgw4Fkw6FtIEthbGxhaSAgPGthZGFt
QGluZi51LXN6ZWdlZC5odT4KIAogICAgICAgICBbUXRdIEJ1aWxkIGZpeCBieSByZW5hbWVpbmcg
UXREZWNsYXJhdGl2ZSB0byBRdFFtbCBpbiBoZWFkZXIgY2FsbHMuCmRpZmYgLS1naXQgYS9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9lZmwvQ01ha2VMaXN0cy50eHQgYi9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9lZmwvQ01ha2VMaXN0cy50eHQKaW5kZXggY2M4ZGZhZi4uMzkyMWE4YSAxMDA2NDQKLS0tIGEv
VG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL2VmbC9DTWFrZUxpc3RzLnR4dApAQCAtMTIsNiArMTIsNyBAQCBTRVQoRHVtcFJl
bmRlclRyZWVfU09VUkNFUwogICAgICR7VE9PTFNfRElSfS9EdW1wUmVuZGVyVHJlZS9lZmwvRXZl
bnRTZW5kZXIuY3BwCiAgICAgJHtUT09MU19ESVJ9L0R1bXBSZW5kZXJUcmVlL2VmbC9Gb250TWFu
YWdlbWVudC5jcHAKICAgICAke1RPT0xTX0RJUn0vRHVtcFJlbmRlclRyZWUvZWZsL0dDQ29udHJv
bGxlckVmbC5jcHAKKyAgICAke1RPT0xTX0RJUn0vRHVtcFJlbmRlclRyZWUvZWZsL0hpc3RvcnlE
ZWxlZ2F0ZS5jcHAKICAgICAke1RPT0xTX0RJUn0vRHVtcFJlbmRlclRyZWUvZWZsL0pTU3RyaW5n
VXRpbHMuY3BwCiAgICAgJHtUT09MU19ESVJ9L0R1bXBSZW5kZXJUcmVlL2VmbC9MYXlvdXRUZXN0
Q29udHJvbGxlckVmbC5jcHAKICAgICAke1RPT0xTX0RJUn0vRHVtcFJlbmRlclRyZWUvZWZsL1Bp
eGVsRHVtcFN1cHBvcnRFZmwuY3BwCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9l
ZmwvRHVtcFJlbmRlclRyZWUuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0R1bXBSZW5k
ZXJUcmVlLmNwcAppbmRleCBiYjhmN2QyLi45ZTY2N2Y0IDEwMDY0NAotLS0gYS9Ub29scy9EdW1w
UmVuZGVyVHJlZS9lZmwvRHVtcFJlbmRlclRyZWUuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL2VmbC9EdW1wUmVuZGVyVHJlZS5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJE
dW1wUmVuZGVyVHJlZVZpZXcuaCIKICNpbmNsdWRlICJFdmVudFNlbmRlci5oIgogI2luY2x1ZGUg
IkZvbnRNYW5hZ2VtZW50LmgiCisjaW5jbHVkZSAiSGlzdG9yeURlbGVnYXRlLmgiCiAjaW5jbHVk
ZSAiTGF5b3V0VGVzdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgog
I2luY2x1ZGUgIlBpeGVsRHVtcFN1cHBvcnQuaCIKQEAgLTIxOCw2ICsyMTksMTEgQEAgc3RhdGlj
IHZvaWQgY3JlYXRlTGF5b3V0VGVzdENvbnRyb2xsZXIoY29uc3QgU3RyaW5nJiB0ZXN0VVJMLCBj
b25zdCBTdHJpbmcmIGV4cGUKICAgICB9CiB9CiAKK3N0YXRpYyBib29sIGlzR2xvYmFsSGlzdG9y
eVRlc3QoY29uc3QgU3RyaW5nJiBjVGVzdFBhdGhPclVSTCkKK3sKKyAgICByZXR1cm4gY1Rlc3RQ
YXRoT3JVUkwuY29udGFpbnMoImdsb2JhbGhpc3RvcnkvIik7Cit9CisKIHN0YXRpYyB2b2lkIHJ1
blRlc3QoY29uc3QgY2hhciogY1Rlc3RQYXRoT3JVUkwpCiB7CiAgICAgY29uc3QgU3RyaW5nIHRl
c3RQYXRoT3JVUkwgPSBTdHJpbmc6OmZyb21VVEY4KGNUZXN0UGF0aE9yVVJMKTsKQEAgLTI0Miw2
ICsyNDgsOSBAQCBzdGF0aWMgdm9pZCBydW5UZXN0KGNvbnN0IGNoYXIqIGNUZXN0UGF0aE9yVVJM
KQogICAgIGNvbnN0IEV3a19IaXN0b3J5KiBoaXN0b3J5ID0gZXdrX3ZpZXdfaGlzdG9yeV9nZXQo
YnJvd3Nlci0+bWFpblZpZXcoKSk7CiAgICAgcHJldlRlc3RCRkl0ZW0gPSBld2tfaGlzdG9yeV9o
aXN0b3J5X2l0ZW1fY3VycmVudF9nZXQoaGlzdG9yeSk7CiAKKyAgICBpZiAoaXNHbG9iYWxIaXN0
b3J5VGVzdCh0ZXN0VVJMKSkKKyAgICAgICAgZXdrX3ZpZXdfaGlzdG9yeV9kZWxlZ2F0ZV9zZXQo
YnJvd3Nlci0+bWFpblZpZXcoKSwgaGlzdG9yeV9kZWxlZ2F0ZV9uZXcoZ0xheW91dFRlc3RDb250
cm9sbGVyLmdldCgpKSk7CisKICAgICBldmFzX29iamVjdF9mb2N1c19zZXQoYnJvd3Nlci0+bWFp
blZpZXcoKSwgRUlOQV9UUlVFKTsKICAgICBld2tfdmlld191cmlfc2V0KGJyb3dzZXItPm1haW5W
aWV3KCksIHRlc3RVUkwudXRmOCgpLmRhdGEoKSk7CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL2VmbC9IaXN0b3J5RGVsZWdhdGUuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUv
ZWZsL0hpc3RvcnlEZWxlZ2F0ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uNmJlYjgwZgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9I
aXN0b3J5RGVsZWdhdGUuY3BwCkBAIC0wLDAgKzEsMTAxIEBACisvKgorKiBDb3B5cmlnaHQgKGMp
IDIwMTIsIEludGVsIENvcnBvcmF0aW9uCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
IG1ldDoKKyoKKyogKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyogbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBk
b2N1bWVudGF0aW9uCisqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorKiAqIE5laXRoZXIgdGhlIG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRpb24g
bm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
CisqIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAi
QVMgSVMiCisqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFCisqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
CisqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiSGlzdG9yeURlbGVnYXRlLmgiCisKKyNpbmNsdWRlICJMYXlvdXRUZXN0
Q29udHJvbGxlci5oIgorCisjaW5jbHVkZSA8ZWluYV9zYWZldHlfY2hlY2tzLmg+CisKK3N0YXRp
YyB2b2lkIGRpZE5hdmlnYXRlV2l0aE5hdmlnYXRpb25EYXRhKEV3a19IaXN0b3J5X0RlbGVnYXRl
KiwgY29uc3QgRXZhc19PYmplY3QqLCBFd2tfTmF2aWdhdGlvbl9EYXRhKiBuYXZpZ2F0aW9uRGF0
YSwgY29uc3QgRXZhc19PYmplY3QqKQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
KG5hdmlnYXRpb25EYXRhKTsKKyAgICBjb25zdCBib29sIHdhc0ZhaWx1cmUgPSBuYXZpZ2F0aW9u
RGF0YS0+aGFzU3Vic3RpdHV0ZURhdGEgfHwgIG5hdmlnYXRpb25EYXRhLT5yZXNwb25zZS5zdGF0
dXNfY29kZSA+PSA0MDA7CisgICAgY29uc3QgYm9vbCB3YXNSZWRpcmVjdGVkID0gbmF2aWdhdGlv
bkRhdGEtPmNsaWVudFJlZGlyZWN0U291cmNlICYmICoobmF2aWdhdGlvbkRhdGEtPmNsaWVudFJl
ZGlyZWN0U291cmNlKTsKKworICAgIHByaW50ZigiV2ViVmlldyBuYXZpZ2F0ZWQgdG8gdXJsIFwi
JXNcIiB3aXRoIHRpdGxlIFwiJXNcIiB3aXRoIEhUVFAgZXF1aXZhbGVudCBtZXRob2QgXCIlc1wi
LiAgVGhlIG5hdmlnYXRpb24gd2FzICVzIGFuZCB3YXMgJXMlcy5cbiIsCisgICAgICAgIG5hdmln
YXRpb25EYXRhLT51cmwsIC8vIEZJWE1FOiBoYW5sZGxlIHVybCB0byBiZSBzdWl0YWJsZSBmb3Ig
dGVzdAorICAgICAgICBuYXZpZ2F0aW9uRGF0YS0+dGl0bGUsCisgICAgICAgIG5hdmlnYXRpb25E
YXRhLT5yZXF1ZXN0Lmh0dHBfbWV0aG9kLAorICAgICAgICB3YXNGYWlsdXJlPyAiYSBmYWlsdXJl
IiA6ICJzdWNjZXNzZnVsIiwKKyAgICAgICAgKHdhc1JlZGlyZWN0ZWQgPyAiYSBjbGllbnQgcmVk
aXJlY3QgZnJvbSAiIDogIm5vdCBhIGNsaWVudCByZWRpcmVjdCIpLAorICAgICAgICAod2FzUmVk
aXJlY3RlZCA/IG5hdmlnYXRpb25EYXRhLT5jbGllbnRSZWRpcmVjdFNvdXJjZSA6ICIiKSk7Cit9
CisKK3N0YXRpYyB2b2lkIGRpZFBlcmZvcm1DbGllbnRSZWRpcmVjdEZyb21VUkwoRXdrX0hpc3Rv
cnlfRGVsZWdhdGUqIGhpc3RvcnlEZWxlZ2F0ZSwgY29uc3QgRXZhc19PYmplY3QqIC8qZXdrVmll
dyovLCBjb25zdCBjaGFyKiBzb3VyY2VVUkwsIGNvbnN0IGNoYXIqIGRlc3RpbmF0aW9uVVJMLCBj
b25zdCBFdmFzX09iamVjdCopCit7CisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xs
ZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KGhpc3RvcnlEZWxlZ2F0ZS0+
ZGF0YSk7CisKKyAgICBpZiAoIWNvbnRyb2xsZXItPmR1bXBIaXN0b3J5RGVsZWdhdGVDYWxsYmFj
a3MoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcHJpbnRmKCJXZWJWaWV3IHBlcmZvcm1lZCBh
IGNsaWVudCByZWRpcmVjdCBmcm9tIFwiJXNcIiB0byBcIiVzXCIuXG4iLCBzb3VyY2VVUkwsIGRl
c3RpbmF0aW9uVVJMKTsKK30KKworc3RhdGljIHZvaWQgZGlkUGVyZm9ybVNlcnZlclJlZGlyZWN0
RnJvbVVSTChFd2tfSGlzdG9yeV9EZWxlZ2F0ZSogaGQsIGNvbnN0IEV2YXNfT2JqZWN0KiwgY29u
c3QgY2hhciogc291cmNlVVJMLCBjb25zdCBjaGFyKiBkZXN0aW5hdGlvblVSTCwgY29uc3QgRXZh
c19PYmplY3QqKQoreworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3Rh
dGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihoZC0+ZGF0YSk7CisKKyAgICBpZiAoIWNv
bnRyb2xsZXItPmR1bXBIaXN0b3J5RGVsZWdhdGVDYWxsYmFja3MoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgcHJpbnRmKCJXZWJWaWV3IHBlcmZvcm1lZCBhIHNlcnZlciByZWRpcmVjdCBmcm9t
IFwiJXNcIiB0byBcIiVzXCIuXG4iLCBzb3VyY2VVUkwsIGRlc3RpbmF0aW9uVVJMKTsKK30KKwor
c3RhdGljIHZvaWQgdXBkYXRlSGlzdG9yeVRpdGxlKEV3a19IaXN0b3J5X0RlbGVnYXRlKiwgY29u
c3QgRXZhc19PYmplY3QqLCBjb25zdCBjaGFyKiB0aXRsZSwgY29uc3QgY2hhciogdXJsKQorewor
ICAgIHByaW50ZigiV2ViVmlldyB1cGRhdGVkIHRoZSB0aXRsZSBmb3IgaGlzdG9yeSBVUkwgXCIl
c1wiIHRvIFwiJXNcIi5cbiIsIHVybCwgdGl0bGUpOworfQorCitzdGF0aWMgdm9pZCBwb3B1bGF0
ZVZpc2l0ZWRMaW5rc0ZvcldlYlZpZXcoRXdrX0hpc3RvcnlfRGVsZWdhdGUqIGhpc3RvcnlEZWxl
Z2F0ZSwgY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCit7CisgICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk4oZXdrVmlldyk7CisKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJv
bGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oaGlzdG9yeURlbGVnYXRl
LT5kYXRhKTsKKworICAgIGlmIChjb250cm9sbGVyLT5kdW1wVmlzaXRlZExpbmtzQ2FsbGJhY2so
KSkKKyAgICAgICAgcHJpbnRmKCJBc2tlZCB0byBwb3B1bGF0ZSB2aXNpdGVkIGxpbmtzIGZvciBX
ZWJWaWV3IFwiJXNcIlxuIiwgZXdrX3ZpZXdfdXJpX2dldChld2tWaWV3KSk7Cit9CisKK0V3a19I
aXN0b3J5X0RlbGVnYXRlKiBoaXN0b3J5X2RlbGVnYXRlX25ldyhMYXlvdXRUZXN0Q29udHJvbGxl
ciogY29udHJvbGxlcikKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoY29u
dHJvbGxlciwgMCk7CisKKyAgICBFd2tfSGlzdG9yeV9EZWxlZ2F0ZSogcmVzID0gZXdrX2hpc3Rv
cnlfZGVsZWdhdGVfbmV3KDApOyAvLyBkbyBub3QgbmVlZCBkYXRhIGRlbGV0ZXIKKworICAgIHJl
cy0+YXBpLT5kaWRfbmF2aWdhdGVfd2l0aF9uYXZpZ2F0aW9uX2RhdGEgPSBkaWROYXZpZ2F0ZVdp
dGhOYXZpZ2F0aW9uRGF0YTsKKyAgICByZXMtPmFwaS0+ZGlkX3BlcmZvcm1fY2xpZW50X3JlZGly
ZWN0X2Zyb21fdXJsID0gZGlkUGVyZm9ybUNsaWVudFJlZGlyZWN0RnJvbVVSTDsKKyAgICByZXMt
PmFwaS0+ZGlkX3BlcmZvcm1fc2VydmVyX3JlZGlyZWN0X2Zyb21fdXJsID0gZGlkUGVyZm9ybVNl
cnZlclJlZGlyZWN0RnJvbVVSTDsKKyAgICByZXMtPmFwaS0+dXBkYXRlX2hpc3RvcnlfdGl0bGUg
PSB1cGRhdGVIaXN0b3J5VGl0bGU7CisgICAgcmVzLT5hcGktPnBvcHVsYXRlX3Zpc2l0ZWRfbGlu
a3NfZm9yX3ZpZXcgPSBwb3B1bGF0ZVZpc2l0ZWRMaW5rc0ZvcldlYlZpZXc7CisgICAgcmVzLT5k
YXRhID0gY29udHJvbGxlcjsKKworICAgIHJldHVybiByZXM7Cit9CmRpZmYgLS1naXQgYS9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9lZmwvSGlzdG9yeURlbGVnYXRlLmggYi9Ub29scy9EdW1wUmVuZGVy
VHJlZS9lZmwvSGlzdG9yeURlbGVnYXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uYjFhOWQxYQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Vm
bC9IaXN0b3J5RGVsZWdhdGUuaApAQCAtMCwwICsxLDM5IEBACisvKgorKiBDb3B5cmlnaHQgKGMp
IDIwMTIsIEludGVsIENvcnBvcmF0aW9uCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
IG1ldDoKKyoKKyogKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyogbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBk
b2N1bWVudGF0aW9uCisqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorKiAqIE5laXRoZXIgdGhlIG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRpb24g
bm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
CisqIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAi
QVMgSVMiCisqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFCisqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
CisqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworCisjaWZuZGVmIEhpc3RvcnlE
ZWxlZ2F0ZV9oCisjZGVmaW5lIEhpc3RvcnlEZWxlZ2F0ZV9oCisKKyNpbmNsdWRlIDxFV2ViS2l0
Lmg+CisKK2NsYXNzIExheW91dFRlc3RDb250cm9sbGVyOworCitFd2tfSGlzdG9yeV9EZWxlZ2F0
ZSAqaGlzdG9yeV9kZWxlZ2F0ZV9uZXcoTGF5b3V0VGVzdENvbnRyb2xsZXIqKTsKKworI2VuZGlm
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>141685</attachid>
            <date>2012-05-14 04:01:38 -0700</date>
            <delta_ts>2012-06-04 00:10:36 -0700</delta_ts>
            <desc>DRT patch</desc>
            <filename>bug82579_v3</filename>
            <type>text/plain</type>
            <size>8784</size>
            <attacher name="Mikhail Pozdnyakov">mikhail.pozdnyakov</attacher>
            
              <data encoding="base64">Y29tbWl0IGU0ZDRmNmRhOGRiMzcwOGZmNjhkMTM1Zjk2M2U3MTgyNWZkZmUyM2MKQXV0aG9yOiBN
aWtoYWlsIFBvemRueWFrb3YgPHBvemRueWFrb3YubWlraGFpbEBnbWFpbC5jb20+CkRhdGU6ICAg
TW9uIE1heSAxNCAxMzo0MjoxMiAyMDEyICswMzAwCgogICAgYnVnODI1NzkKCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMDJm
ZGE1ZC4uYTg1NDBiOSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xh
eW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDEyLTA1LTE0ICBNaWtoYWls
IFBvemRueWFrb3YgIDxtaWtoYWlsLnBvemRueWFrb3ZAaW50ZWwuY29tPgorCisgICAgICAgIFtF
RkxdW0RSVF0gaHR0cC90ZXN0cy9nbG9iYWxoaXN0b3J5IHRlc3RjYXNlcyBkbyBub3QgcGFzcwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI1NzkKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3Jt
L2VmbC9Ta2lwcGVkOiBVbnNraXAgaHR0cC90ZXN0cy9nbG9iYWxoaXN0b3J5LgorCiAyMDEyLTA1
LTEyICBLZW50IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KIAogICAgICAgICBbQ2hyb21p
dW1dIFVwZGF0ZSB0ZXN0IGV4cGVjdGF0aW9ucwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vZWZsL1NraXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9lZmwvU2tpcHBlZAppbmRl
eCA1ZjI3OWRmLi5iYzM5MWM1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9lZmwv
U2tpcHBlZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9lZmwvU2tpcHBlZApAQCAtNTcyLDkg
KzU3Miw2IEBAIGZhc3QvZG9tL3RpdGxlLWRpcmVjdGlvbmFsaXR5Lmh0bWwKIGZhc3QvZG9tL1dp
bmRvdy9zbG93LXVubG9hZC1oYW5kbGVyLmh0bWwKIGZhc3QvZG9tL1dpbmRvdy9zbG93LXVubG9h
ZC1oYW5kbGVyLW9ubHktZnJhbWUtaXMtc3RvcHBlZC5odG1sCiAKLSMgVGhlIEVGTCBwb3J0IGhh
cyBubyBnbG9iYWwgaGlzdG9yeSBkZWxlZ2F0ZQotaHR0cC90ZXN0cy9nbG9iYWxoaXN0b3J5Ci0K
ICMgUGFzdGVCb2FyZDo6cGxhaW5UZXh0KCkgZG9lcyBub3Qgc3VwcG9ydCBmaWxlIG5hbWVzLgog
ZWRpdGluZy9wYXN0ZWJvYXJkL2RyYWctZmlsZXMtdG8tZWRpdGFibGUtZWxlbWVudC5odG1sCiAK
ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAzNjE3
YmNmLi44YmQxMDU2IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTItMDUtMTQgIE1pa2hhaWwgUG96ZG55YWtvdiAg
PG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CisKKyAgICAgICAgW0VGTF1bRFJUXSBodHRw
L3Rlc3RzL2dsb2JhbGhpc3RvcnkgdGVzdGNhc2VzIGRvIG5vdCBwYXNzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MjU3OQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIERSVCBoYXMgcHJvdmlkZWQgY2FsbGJh
Y2tzIGZvciBld2tfdmlldyAiZ2xvYmFsIGhpc3RvcnkgZGVsZWdhdGUiIHNpZ25hbHMuCisKKyAg
ICAgICAgKiBEdW1wUmVuZGVyVHJlZS9lZmwvRHVtcFJlbmRlclRyZWUuY3BwOgorICAgICAgICAo
aXNHbG9iYWxIaXN0b3J5VGVzdCk6IEF1eCBmdW5jdGlvbiB0byBpZGVudCBnbG9iYWwgaGlzdG9y
eSB0ZXN0Y2FzZS4KKyAgICAgICAgKGNyZWF0ZUxheW91dFRlc3RDb250cm9sbGVyKToKKyAgICAg
ICAgKiBEdW1wUmVuZGVyVHJlZS9lZmwvRHVtcFJlbmRlclRyZWVDaHJvbWUuY3BwOgorICAgICAg
ICAoRHVtcFJlbmRlclRyZWVDaHJvbWU6OmNyZWF0ZVZpZXcpOgorICAgICAgICAoRHVtcFJlbmRl
clRyZWVDaHJvbWU6Om9uVGl0bGVDaGFuZ2VkKTogSGFuZGxlcyBhbHNvIHNvbWUgZ2xvYmFsIGhp
c3RvcnkgdGVzdGNhc2VzLgorICAgICAgICAoRHVtcFJlbmRlclRyZWVDaHJvbWU6Om9uV2ViVmll
d05hdmlnYXRlZFdpdGhEYXRhKTogTmV3IGNhbGxiYWNrIGZ1bmN0aW9uLgorICAgICAgICAoRHVt
cFJlbmRlclRyZWVDaHJvbWU6Om9uV2ViVmlld1NlcnZlclJlZGlyZWN0KTogRGl0dG8uCisgICAg
ICAgIChEdW1wUmVuZGVyVHJlZUNocm9tZTo6b25XZWJWaWV3Q2xpZW50UmVkaXJlY3QpOiBEaXR0
by4KKyAgICAgICAgKER1bXBSZW5kZXJUcmVlQ2hyb21lOjpvbldlYlZpZXdQb3B1bGF0ZVZpc2l0
ZWRMaW5rcyk6IERpdHRvLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2VmbC9EdW1wUmVuZGVy
VHJlZUNocm9tZS5oOgorICAgICAgICAoRHVtcFJlbmRlclRyZWVDaHJvbWUpOgorCiAyMDEyLTA1
LTExICBPamFuIFZhZmFpICA8b2phbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQWRkIHByZXZp
b3VzL25leHQgYnV0dG9ucyB0aGUgZ2FyZGVuLW8tbWF0aWNzIHBlcmYgcGFuZWwKZGlmZiAtLWdp
dCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9EdW1wUmVuZGVyVHJlZS5jcHAgYi9Ub29scy9E
dW1wUmVuZGVyVHJlZS9lZmwvRHVtcFJlbmRlclRyZWUuY3BwCmluZGV4IGQ4OTMxZjAuLmJmMWI0
MDMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9EdW1wUmVuZGVyVHJlZS5j
cHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0R1bXBSZW5kZXJUcmVlLmNwcApAQCAt
MTk2LDYgKzE5NiwxMSBAQCBzdGF0aWMgU3RyaW5nIGdldEV4cGVjdGVkUGl4ZWxIYXNoKGNvbnN0
IFN0cmluZyYgdGVzdFVSTCkKICAgICByZXR1cm4gKGhhc2hTZXBhcmF0b3JQb3MgIT0gbm90Rm91
bmQpID8gdGVzdFVSTC5zdWJzdHJpbmcoaGFzaFNlcGFyYXRvclBvcyArIDEpIDogU3RyaW5nKCk7
CiB9CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0dsb2JhbEhpc3RvcnlUZXN0KGNvbnN0IFN0cmlu
ZyYgY1Rlc3RQYXRoT3JVUkwpCit7CisgICAgcmV0dXJuIGNUZXN0UGF0aE9yVVJMLmNvbnRhaW5z
KCJnbG9iYWxoaXN0b3J5LyIpOworfQorCiBzdGF0aWMgdm9pZCBjcmVhdGVMYXlvdXRUZXN0Q29u
dHJvbGxlcihjb25zdCBTdHJpbmcmIHRlc3RVUkwsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRQaXhl
bEhhc2gpCiB7CiAgICAgZ0xheW91dFRlc3RDb250cm9sbGVyID0KQEAgLTIxMSw2ICsyMTYsNyBA
QCBzdGF0aWMgdm9pZCBjcmVhdGVMYXlvdXRUZXN0Q29udHJvbGxlcihjb25zdCBTdHJpbmcmIHRl
c3RVUkwsIGNvbnN0IFN0cmluZyYgZXhwZQogICAgICAgICBnTGF5b3V0VGVzdENvbnRyb2xsZXIt
PnNldER1bXBGcmFtZUxvYWRDYWxsYmFja3ModHJ1ZSk7CiAKICAgICBnTGF5b3V0VGVzdENvbnRy
b2xsZXItPnNldERldmVsb3BlckV4dHJhc0VuYWJsZWQodHJ1ZSk7CisgICAgZ0xheW91dFRlc3RD
b250cm9sbGVyLT5zZXREdW1wSGlzdG9yeURlbGVnYXRlQ2FsbGJhY2tzKGlzR2xvYmFsSGlzdG9y
eVRlc3QodGVzdFVSTCkpOwogCiAgICAgaWYgKHNob3VsZER1bXBBc1RleHQodGVzdFVSTCkpIHsK
ICAgICAgICAgZ0xheW91dFRlc3RDb250cm9sbGVyLT5zZXREdW1wQXNUZXh0KHRydWUpOwpkaWZm
IC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0R1bXBSZW5kZXJUcmVlQ2hyb21lLmNw
cCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9EdW1wUmVuZGVyVHJlZUNocm9tZS5jcHAKaW5k
ZXggOWY3NDQxNi4uYTFjYzdhZiAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZs
L0R1bXBSZW5kZXJUcmVlQ2hyb21lLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwv
RHVtcFJlbmRlclRyZWVDaHJvbWUuY3BwCkBAIC0xMDYsNiArMTA2LDEwIEBAIEV2YXNfT2JqZWN0
KiBEdW1wUmVuZGVyVHJlZUNocm9tZTo6Y3JlYXRlVmlldygpIGNvbnN0CiAgICAgZXZhc19vYmpl
Y3Rfc21hcnRfY2FsbGJhY2tfYWRkKHZpZXcsICJtaXhlZGNvbnRlbnQscnVuIiwgb25JbnNlY3Vy
ZUNvbnRlbnRSdW4sIDApOwogICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZCh2aWV3
LCAibWl4ZWRjb250ZW50LGRpc3BsYXllZCIsIG9uSW5zZWN1cmVDb250ZW50RGlzcGxheWVkLCAw
KTsKICAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQodmlldywgImZyYW1lLGNyZWF0
ZWQiLCBvbkZyYW1lQ3JlYXRlZCwgMCk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tf
YWRkKHZpZXcsICJuYXZpZ2F0ZSx3aXRoLGRhdGEiLCBvbldlYlZpZXdOYXZpZ2F0ZWRXaXRoRGF0
YSwgMCk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKHZpZXcsICJwZXJmb3Jt
LHNlcnZlcixyZWRpcmVjdCIsIG9uV2ViVmlld1NlcnZlclJlZGlyZWN0LCAwKTsKKyAgICBldmFz
X29iamVjdF9zbWFydF9jYWxsYmFja19hZGQodmlldywgInBlcmZvcm0sY2xpZW50LHJlZGlyZWN0
Iiwgb25XZWJWaWV3Q2xpZW50UmVkaXJlY3QsIDApOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2Nh
bGxiYWNrX2FkZCh2aWV3LCAicG9wdWxhdGUsdmlzaXRlZCxsaW5rcyIsIG9uV2ViVmlld1BvcHVs
YXRlVmlzaXRlZExpbmtzLCAwKTsKIAogICAgIEV2YXNfT2JqZWN0KiBtYWluRnJhbWUgPSBld2tf
dmlld19mcmFtZV9tYWluX2dldCh2aWV3KTsKICAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFj
a19hZGQobWFpbkZyYW1lLCAiaWNvbixjaGFuZ2VkIiwgb25GcmFtZUljb25DaGFuZ2VkLCAwKTsK
QEAgLTQzMCwxMyArNDM0LDE1IEBAIHZvaWQgRHVtcFJlbmRlclRyZWVDaHJvbWU6Om9uRnJhbWVJ
Y29uQ2hhbmdlZCh2b2lkKiwgRXZhc19PYmplY3QqIGZyYW1lLCB2b2lkKikKICAgICB9CiB9CiAK
LXZvaWQgRHVtcFJlbmRlclRyZWVDaHJvbWU6Om9uVGl0bGVDaGFuZ2VkKHZvaWQqLCBFdmFzX09i
amVjdCosIHZvaWQqIGV2ZW50SW5mbykKK3ZvaWQgRHVtcFJlbmRlclRyZWVDaHJvbWU6Om9uVGl0
bGVDaGFuZ2VkKHZvaWQqLCBFdmFzX09iamVjdCogdmlldywgdm9pZCogZXZlbnRJbmZvKQogewot
ICAgIGlmICghZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wVGl0bGVDaGFuZ2VzKCkpCi0gICAg
ICAgIHJldHVybjsKLQogICAgIGNvbnN0IGNoYXIqIHRpdGxlVGV4dCA9IHN0YXRpY19jYXN0PGNv
bnN0IGNoYXIqPihldmVudEluZm8pOwotICAgIHByaW50ZigiVElUTEUgQ0hBTkdFRDogJXNcbiIs
IHRpdGxlVGV4dCk7CisgICAgaWYgKGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcFRpdGxlQ2hh
bmdlcygpKQorICAgICAgICBwcmludGYoIlRJVExFIENIQU5HRUQ6ICVzXG4iLCB0aXRsZVRleHQp
OworCisgICAgaWYgKGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcEhpc3RvcnlEZWxlZ2F0ZUNh
bGxiYWNrcygpICYmIHRpdGxlVGV4dCkKKyAgICAgICAgcHJpbnRmKCJXZWJWaWV3IHVwZGF0ZWQg
dGhlIHRpdGxlIGZvciBoaXN0b3J5IFVSTCBcIiVzXCIgdG8gXCIlc1wiLlxuIiwgZXdrX3ZpZXdf
dXJpX2dldCh2aWV3KSwgdGl0bGVUZXh0KTsKKwogfQogCiB2b2lkIER1bXBSZW5kZXJUcmVlQ2hy
b21lOjpvbkRvY3VtZW50TG9hZEZpbmlzaGVkKHZvaWQqLCBFdmFzX09iamVjdCosIHZvaWQqIGV2
ZW50SW5mbykKQEAgLTUyOSw2ICs1MzUsNTQgQEAgdm9pZCBEdW1wUmVuZGVyVHJlZUNocm9tZTo6
b25GcmFtZUNyZWF0ZWQodm9pZCosIEV2YXNfT2JqZWN0Kiwgdm9pZCogZXZlbnRJbmZvKQogICAg
IGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZChmcmFtZSwgInhzcyxkZXRlY3RlZCIsIG9u
RGlkRGV0ZWN0WFNTLCAwKTsKIH0KIAordm9pZCBEdW1wUmVuZGVyVHJlZUNocm9tZTo6b25XZWJW
aWV3TmF2aWdhdGVkV2l0aERhdGEodm9pZCosIEV2YXNfT2JqZWN0Kiwgdm9pZCogZXZlbnRJbmZv
KQoreworICAgIGlmICghZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wSGlzdG9yeURlbGVnYXRl
Q2FsbGJhY2tzKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChldmVudEluZm8pOwor
ICAgIEV3a19WaWV3X05hdmlnYXRpb25fRGF0YSogbmF2aWdhdGlvbkRhdGEgPSBzdGF0aWNfY2Fz
dDxFd2tfVmlld19OYXZpZ2F0aW9uX0RhdGEqPihldmVudEluZm8pOworCisgICAgY29uc3QgYm9v
bCB3YXNGYWlsdXJlID0gbmF2aWdhdGlvbkRhdGEtPmhhc19zdWJzdGl0dXRlX2RhdGEgfHwgIG5h
dmlnYXRpb25EYXRhLT5yZXNwb25zZS5zdGF0dXNfY29kZSA+PSA0MDA7CisgICAgY29uc3QgYm9v
bCB3YXNSZWRpcmVjdGVkID0gbmF2aWdhdGlvbkRhdGEtPmNsaWVudF9yZWRpcmVjdF9zb3VyY2Ug
JiYgKihuYXZpZ2F0aW9uRGF0YS0+Y2xpZW50X3JlZGlyZWN0X3NvdXJjZSk7CisKKyAgICBwcmlu
dGYoIldlYlZpZXcgbmF2aWdhdGVkIHRvIHVybCBcIiVzXCIgd2l0aCB0aXRsZSBcIiVzXCIgd2l0
aCBIVFRQIGVxdWl2YWxlbnQgbWV0aG9kIFwiJXNcIi4gIFRoZSBuYXZpZ2F0aW9uIHdhcyAlcyBh
bmQgd2FzICVzJXMuXG4iLAorICAgICAgICBuYXZpZ2F0aW9uRGF0YS0+dXJsLAorICAgICAgICBu
YXZpZ2F0aW9uRGF0YS0+dGl0bGUsCisgICAgICAgIG5hdmlnYXRpb25EYXRhLT5yZXF1ZXN0Lmh0
dHBfbWV0aG9kLAorICAgICAgICB3YXNGYWlsdXJlPyAiYSBmYWlsdXJlIiA6ICJzdWNjZXNzZnVs
IiwKKyAgICAgICAgKHdhc1JlZGlyZWN0ZWQgPyAiYSBjbGllbnQgcmVkaXJlY3QgZnJvbSAiIDog
Im5vdCBhIGNsaWVudCByZWRpcmVjdCIpLAorICAgICAgICAod2FzUmVkaXJlY3RlZCA/IG5hdmln
YXRpb25EYXRhLT5jbGllbnRfcmVkaXJlY3Rfc291cmNlIDogIiIpKTsKK30KKwordm9pZCBEdW1w
UmVuZGVyVHJlZUNocm9tZTo6b25XZWJWaWV3U2VydmVyUmVkaXJlY3Qodm9pZCosIEV2YXNfT2Jq
ZWN0Kiwgdm9pZCogZXZlbnRJbmZvKQoreworICAgIGlmICghZ0xheW91dFRlc3RDb250cm9sbGVy
LT5kdW1wSGlzdG9yeURlbGVnYXRlQ2FsbGJhY2tzKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IEFTU0VSVChldmVudEluZm8pOworICAgIGNvbnN0IGNoYXIqKiBkYXRhID0gc3RhdGljX2Nhc3Q8
Y29uc3QgY2hhcioqPihldmVudEluZm8pOworICAgIHByaW50ZigiV2ViVmlldyBwZXJmb3JtZWQg
YSBzZXJ2ZXIgcmVkaXJlY3QgZnJvbSBcIiVzXCIgdG8gXCIlc1wiLlxuIiwgZGF0YVswXSwgZGF0
YVsxXSk7Cit9CisKK3ZvaWQgRHVtcFJlbmRlclRyZWVDaHJvbWU6Om9uV2ViVmlld0NsaWVudFJl
ZGlyZWN0KHZvaWQqLCBFdmFzX09iamVjdCosIHZvaWQqIGV2ZW50SW5mbykKK3sKKyAgICBpZiAo
IWdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcEhpc3RvcnlEZWxlZ2F0ZUNhbGxiYWNrcygpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQoZXZlbnRJbmZvKTsKKyAgICBjb25zdCBjaGFy
KiogZGF0YSA9IHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqKj4oZXZlbnRJbmZvKTsKKyAgICBwcmlu
dGYoIldlYlZpZXcgcGVyZm9ybWVkIGEgY2xpZW50IHJlZGlyZWN0IGZyb20gXCIlc1wiIHRvIFwi
JXNcIi5cbiIsIGRhdGFbMF0sIGRhdGFbMV0pOworfQorCit2b2lkIER1bXBSZW5kZXJUcmVlQ2hy
b21lOjpvbldlYlZpZXdQb3B1bGF0ZVZpc2l0ZWRMaW5rcyh2b2lkKiwgRXZhc19PYmplY3QqIGV3
a1ZpZXcsIHZvaWQqKQoreworICAgIGlmICghZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wSGlz
dG9yeURlbGVnYXRlQ2FsbGJhY2tzKCkpCisgICAgICAgIHJldHVybjsKKworICAgIHByaW50Zigi
QXNrZWQgdG8gcG9wdWxhdGUgdmlzaXRlZCBsaW5rcyBmb3IgV2ViVmlldyBcIiVzXCJcbiIsIGV3
a192aWV3X3VyaV9nZXQoZXdrVmlldykpOworfQorCiB2b2lkIER1bXBSZW5kZXJUcmVlQ2hyb21l
OjpvbkZyYW1lUHJvdmlzaW9uYWxMb2FkKHZvaWQqLCBFdmFzX09iamVjdCogZnJhbWUsIHZvaWQq
KQogewogICAgIGlmICghZG9uZSAmJiBnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBGcmFtZUxv
YWRDYWxsYmFja3MoKSkgewpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0R1
bXBSZW5kZXJUcmVlQ2hyb21lLmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvRHVtcFJlbmRl
clRyZWVDaHJvbWUuaAppbmRleCA3ZDYzYTE5Li4wYWUzZjI1IDEwMDY0NAotLS0gYS9Ub29scy9E
dW1wUmVuZGVyVHJlZS9lZmwvRHVtcFJlbmRlclRyZWVDaHJvbWUuaAorKysgYi9Ub29scy9EdW1w
UmVuZGVyVHJlZS9lZmwvRHVtcFJlbmRlclRyZWVDaHJvbWUuaApAQCAtODUsNiArODUsMTQgQEAg
cHJpdmF0ZToKIAogICAgIHN0YXRpYyB2b2lkIG9uV2ViVmlld09ubG9hZEV2ZW50KHZvaWQqLCBF
dmFzX09iamVjdCosIHZvaWQqKTsKIAorICAgIHN0YXRpYyB2b2lkIG9uV2ViVmlld05hdmlnYXRl
ZFdpdGhEYXRhKHZvaWQqLCBFdmFzX09iamVjdCosIHZvaWQqKTsKKworICAgIHN0YXRpYyB2b2lk
IG9uV2ViVmlld1NlcnZlclJlZGlyZWN0KHZvaWQqLCBFdmFzX09iamVjdCosIHZvaWQqKTsKKwor
ICAgIHN0YXRpYyB2b2lkIG9uV2ViVmlld0NsaWVudFJlZGlyZWN0KHZvaWQqLCBFdmFzX09iamVj
dCosIHZvaWQqKTsKKworICAgIHN0YXRpYyB2b2lkIG9uV2ViVmlld1BvcHVsYXRlVmlzaXRlZExp
bmtzKHZvaWQqLCBFdmFzX09iamVjdCosIHZvaWQqKTsKKwogICAgIHN0YXRpYyB2b2lkIG9uSW5z
ZWN1cmVDb250ZW50UnVuKHZvaWQqLCBFdmFzX09iamVjdCosIHZvaWQqKTsKIAogICAgIHN0YXRp
YyB2b2lkIG9uSW5zZWN1cmVDb250ZW50RGlzcGxheWVkKHZvaWQqLCBFdmFzX09iamVjdCosIHZv
aWQqKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>145524</attachid>
            <date>2012-06-04 00:10:36 -0700</date>
            <delta_ts>2012-06-04 00:37:41 -0700</delta_ts>
            <desc>DRT patch v2 (rebased + review comments from Chris)</desc>
            <filename>bug82579_v4</filename>
            <type>text/plain</type>
            <size>8707</size>
            <attacher name="Mikhail Pozdnyakov">mikhail.pozdnyakov</attacher>
            
              <data encoding="base64">Y29tbWl0IGE3NjI3MDNjNTg2NDgwZjBmYzg3ZjY1ZjBlMWFiNjIwZTkyYWU1YzcKQXV0aG9yOiBN
aWtoYWlsIFBvemRueWFrb3YgPHBvemRueWFrb3YubWlraGFpbEBnbWFpbC5jb20+CkRhdGU6ICAg
TW9uIE1heSAxNCAxMzo0MjoxMiAyMDEyICswMzAwCgogICAgYnVnODI1NzkKCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggN2Jh
OTJkZi4uMzgwMzRjNyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xh
eW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDEyLTA1LTE0ICBNaWtoYWls
IFBvemRueWFrb3YgIDxtaWtoYWlsLnBvemRueWFrb3ZAaW50ZWwuY29tPgorCisgICAgICAgIFtF
RkxdW0RSVF0gaHR0cC90ZXN0cy9nbG9iYWxoaXN0b3J5IHRlc3RjYXNlcyBkbyBub3QgcGFzcwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI1NzkKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3Jt
L2VmbC9Ta2lwcGVkOiBVbnNraXAgaHR0cC90ZXN0cy9nbG9iYWxoaXN0b3J5LgorCiAyMDEyLTA2
LTAzICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAg
ICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTE5MzU5LgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vZWZsL1NraXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9lZmwvU2tpcHBl
ZAppbmRleCBlZDdkNGM5Li45NTJhNTA2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS9lZmwvU2tpcHBlZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9lZmwvU2tpcHBlZApAQCAt
Mjk3LDkgKzI5Nyw2IEBAIGZhc3QvcmVwbGFjZWQvcGRmLWFzLWltYWdlLmh0bWwKIGZhc3QvZG9t
L1dpbmRvdy9zbG93LXVubG9hZC1oYW5kbGVyLmh0bWwKIGZhc3QvZG9tL1dpbmRvdy9zbG93LXVu
bG9hZC1oYW5kbGVyLW9ubHktZnJhbWUtaXMtc3RvcHBlZC5odG1sCiAKLSMgVGhlIEVGTCBwb3J0
IGhhcyBubyBnbG9iYWwgaGlzdG9yeSBkZWxlZ2F0ZQotaHR0cC90ZXN0cy9nbG9iYWxoaXN0b3J5
Ci0KICMgRmFpbHMgYmVjYXVzZSBvZiB0aGUgc2VjdXJpdHkgcG9saWN5IG9mIHRoZSB1c2VyIGFn
ZW50PwogIyBodHRwOi8vd2Via2l0Lm9yZy9iLzc5NjA0CiBmYXN0L211dGF0aW9uL2RhdGFiYXNl
LWNhbGxiYWNrLWRlbGl2ZXJ5Lmh0bWwKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rv
b2xzL0NoYW5nZUxvZwppbmRleCBjZmNhZjBlLi45ZDVhMDEwIDEwMDY0NAotLS0gYS9Ub29scy9D
aGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTItMDUt
MTQgIE1pa2hhaWwgUG96ZG55YWtvdiAgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CisK
KyAgICAgICAgW0VGTF1bRFJUXSBodHRwL3Rlc3RzL2dsb2JhbGhpc3RvcnkgdGVzdGNhc2VzIGRv
IG5vdCBwYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD04MjU3OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IERSVCBoYXMgcHJvdmlkZWQgY2FsbGJhY2tzIGZvciBld2tfdmlldyAiZ2xvYmFsIGhpc3Rvcnkg
ZGVsZWdhdGUiIHNpZ25hbHMuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9lZmwvRHVtcFJl
bmRlclRyZWUuY3BwOgorICAgICAgICAoaXNHbG9iYWxIaXN0b3J5VGVzdCk6IEF1eCBmdW5jdGlv
biB0byBpZGVudCBnbG9iYWwgaGlzdG9yeSB0ZXN0Y2FzZS4KKyAgICAgICAgKGNyZWF0ZUxheW91
dFRlc3RDb250cm9sbGVyKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9lZmwvRHVtcFJlbmRl
clRyZWVDaHJvbWUuY3BwOgorICAgICAgICAoRHVtcFJlbmRlclRyZWVDaHJvbWU6OmNyZWF0ZVZp
ZXcpOgorICAgICAgICAoRHVtcFJlbmRlclRyZWVDaHJvbWU6Om9uVGl0bGVDaGFuZ2VkKTogSGFu
ZGxlcyBhbHNvIHNvbWUgZ2xvYmFsIGhpc3RvcnkgdGVzdGNhc2VzLgorICAgICAgICAoRHVtcFJl
bmRlclRyZWVDaHJvbWU6Om9uV2ViVmlld05hdmlnYXRlZFdpdGhEYXRhKTogTmV3IGNhbGxiYWNr
IGZ1bmN0aW9uLgorICAgICAgICAoRHVtcFJlbmRlclRyZWVDaHJvbWU6Om9uV2ViVmlld1NlcnZl
clJlZGlyZWN0KTogRGl0dG8uCisgICAgICAgIChEdW1wUmVuZGVyVHJlZUNocm9tZTo6b25XZWJW
aWV3Q2xpZW50UmVkaXJlY3QpOiBEaXR0by4KKyAgICAgICAgKER1bXBSZW5kZXJUcmVlQ2hyb21l
OjpvbldlYlZpZXdQb3B1bGF0ZVZpc2l0ZWRMaW5rcyk6IERpdHRvLgorICAgICAgICAqIER1bXBS
ZW5kZXJUcmVlL2VmbC9EdW1wUmVuZGVyVHJlZUNocm9tZS5oOgorICAgICAgICAoRHVtcFJlbmRl
clRyZWVDaHJvbWUpOgorCiAyMDEyLTA2LTAzICBWYXJ1biBKYWluICA8dmFydW5qYWluQGdvb2ds
ZS5jb20+CiAKICAgICAgICAgW2Nocm9taXVtXSBBZGQgbmV3IGdlc3R1cmUgdHlwZSAodHdvIGZp
bmdlciB0YXApIHRoYXQgdHJpZ2dlcnMgY29udGV4dCBtZW51LgpkaWZmIC0tZ2l0IGEvVG9vbHMv
RHVtcFJlbmRlclRyZWUvZWZsL0R1bXBSZW5kZXJUcmVlLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL2VmbC9EdW1wUmVuZGVyVHJlZS5jcHAKaW5kZXggZjhiZjg1ZS4uYWFjZTQ3NSAxMDA2NDQK
LS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0R1bXBSZW5kZXJUcmVlLmNwcAorKysgYi9U
b29scy9EdW1wUmVuZGVyVHJlZS9lZmwvRHVtcFJlbmRlclRyZWUuY3BwCkBAIC0xOTksNiArMTk5
LDExIEBAIHN0YXRpYyBTdHJpbmcgZ2V0RXhwZWN0ZWRQaXhlbEhhc2goY29uc3QgU3RyaW5nJiB0
ZXN0VVJMKQogICAgIHJldHVybiAoaGFzaFNlcGFyYXRvclBvcyAhPSBub3RGb3VuZCkgPyB0ZXN0
VVJMLnN1YnN0cmluZyhoYXNoU2VwYXJhdG9yUG9zICsgMSkgOiBTdHJpbmcoKTsKIH0KIAorc3Rh
dGljIGlubGluZSBib29sIGlzR2xvYmFsSGlzdG9yeVRlc3QoY29uc3QgU3RyaW5nJiBjVGVzdFBh
dGhPclVSTCkKK3sKKyAgICByZXR1cm4gY1Rlc3RQYXRoT3JVUkwuY29udGFpbnMoIi9nbG9iYWxo
aXN0b3J5LyIpOworfQorCiBzdGF0aWMgdm9pZCBjcmVhdGVMYXlvdXRUZXN0Q29udHJvbGxlcihj
b25zdCBTdHJpbmcmIHRlc3RVUkwsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRQaXhlbEhhc2gpCiB7
CiAgICAgZ0xheW91dFRlc3RDb250cm9sbGVyID0KQEAgLTIxNCw2ICsyMTksNyBAQCBzdGF0aWMg
dm9pZCBjcmVhdGVMYXlvdXRUZXN0Q29udHJvbGxlcihjb25zdCBTdHJpbmcmIHRlc3RVUkwsIGNv
bnN0IFN0cmluZyYgZXhwZQogICAgICAgICBnTGF5b3V0VGVzdENvbnRyb2xsZXItPnNldER1bXBG
cmFtZUxvYWRDYWxsYmFja3ModHJ1ZSk7CiAKICAgICBnTGF5b3V0VGVzdENvbnRyb2xsZXItPnNl
dERldmVsb3BlckV4dHJhc0VuYWJsZWQodHJ1ZSk7CisgICAgZ0xheW91dFRlc3RDb250cm9sbGVy
LT5zZXREdW1wSGlzdG9yeURlbGVnYXRlQ2FsbGJhY2tzKGlzR2xvYmFsSGlzdG9yeVRlc3QodGVz
dFVSTCkpOwogCiAgICAgaWYgKHNob3VsZER1bXBBc1RleHQodGVzdFVSTCkpIHsKICAgICAgICAg
Z0xheW91dFRlc3RDb250cm9sbGVyLT5zZXREdW1wQXNUZXh0KHRydWUpOwpkaWZmIC0tZ2l0IGEv
VG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0R1bXBSZW5kZXJUcmVlQ2hyb21lLmNwcCBiL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL2VmbC9EdW1wUmVuZGVyVHJlZUNocm9tZS5jcHAKaW5kZXggODYyYTYx
Ni4uMTBiYWZiNyAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0R1bXBSZW5k
ZXJUcmVlQ2hyb21lLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvRHVtcFJlbmRl
clRyZWVDaHJvbWUuY3BwCkBAIC0xMTAsNiArMTEwLDEwIEBAIEV2YXNfT2JqZWN0KiBEdW1wUmVu
ZGVyVHJlZUNocm9tZTo6Y3JlYXRlVmlldygpIGNvbnN0CiAgICAgZXZhc19vYmplY3Rfc21hcnRf
Y2FsbGJhY2tfYWRkKHZpZXcsICJtaXhlZGNvbnRlbnQscnVuIiwgb25JbnNlY3VyZUNvbnRlbnRS
dW4sIDApOwogICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZCh2aWV3LCAibWl4ZWRj
b250ZW50LGRpc3BsYXllZCIsIG9uSW5zZWN1cmVDb250ZW50RGlzcGxheWVkLCAwKTsKICAgICBl
dmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQodmlldywgImZyYW1lLGNyZWF0ZWQiLCBvbkZy
YW1lQ3JlYXRlZCwgMCk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKHZpZXcs
ICJuYXZpZ2F0ZSx3aXRoLGRhdGEiLCBvbldlYlZpZXdOYXZpZ2F0ZWRXaXRoRGF0YSwgMCk7Cisg
ICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKHZpZXcsICJwZXJmb3JtLHNlcnZlcixy
ZWRpcmVjdCIsIG9uV2ViVmlld1NlcnZlclJlZGlyZWN0LCAwKTsKKyAgICBldmFzX29iamVjdF9z
bWFydF9jYWxsYmFja19hZGQodmlldywgInBlcmZvcm0sY2xpZW50LHJlZGlyZWN0Iiwgb25XZWJW
aWV3Q2xpZW50UmVkaXJlY3QsIDApOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2Fk
ZCh2aWV3LCAicG9wdWxhdGUsdmlzaXRlZCxsaW5rcyIsIG9uV2ViVmlld1BvcHVsYXRlVmlzaXRl
ZExpbmtzLCAwKTsKIAogICAgIGNvbm5lY3RFZGl0aW5nQ2FsbGJhY2tzKHZpZXcpOwogCkBAIC00
NTQsNiArNDU4LDEwIEBAIHZvaWQgRHVtcFJlbmRlclRyZWVDaHJvbWU6Om9uRnJhbWVUaXRsZUNo
YW5nZWQodm9pZCosIEV2YXNfT2JqZWN0KiBmcmFtZSwgdm9pZCoKIAogICAgIGlmICghZG9uZSAm
JiBnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBUaXRsZUNoYW5nZXMoKSkKICAgICAgICAgcHJp
bnRmKCJUSVRMRSBDSEFOR0VEOiAlc1xuIiwgKHRpdGxlVGV4dCAmJiB0aXRsZVRleHQtPnN0cmlu
ZykgPyB0aXRsZVRleHQtPnN0cmluZyA6ICIiKTsKKworICAgIGlmICghZG9uZSAmJiBnTGF5b3V0
VGVzdENvbnRyb2xsZXItPmR1bXBIaXN0b3J5RGVsZWdhdGVDYWxsYmFja3MoKSkKKyAgICAgICAg
cHJpbnRmKCJXZWJWaWV3IHVwZGF0ZWQgdGhlIHRpdGxlIGZvciBoaXN0b3J5IFVSTCBcIiVzXCIg
dG8gXCIlc1wiLlxuIiwgZXdrX2ZyYW1lX3VyaV9nZXQoZnJhbWUpCisgICAgICAgICAgICAgICAs
ICh0aXRsZVRleHQgJiYgdGl0bGVUZXh0LT5zdHJpbmcpID8gdGl0bGVUZXh0LT5zdHJpbmcgOiAi
Iik7CiB9CiAKIHZvaWQgRHVtcFJlbmRlclRyZWVDaHJvbWU6Om9uRG9jdW1lbnRMb2FkRmluaXNo
ZWQodm9pZCosIEV2YXNfT2JqZWN0Kiwgdm9pZCogZXZlbnRJbmZvKQpAQCAtNTUwLDYgKzU1OCw1
NyBAQCB2b2lkIER1bXBSZW5kZXJUcmVlQ2hyb21lOjpvbkZyYW1lQ3JlYXRlZCh2b2lkKiwgRXZh
c19PYmplY3QqLCB2b2lkKiBldmVudEluZm8pCiAgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJh
Y2tfYWRkKGZyYW1lLCAieHNzLGRldGVjdGVkIiwgb25EaWREZXRlY3RYU1MsIDApOwogfQogCit2
b2lkIER1bXBSZW5kZXJUcmVlQ2hyb21lOjpvbldlYlZpZXdOYXZpZ2F0ZWRXaXRoRGF0YSh2b2lk
KiwgRXZhc19PYmplY3QqLCB2b2lkKiBldmVudEluZm8pCit7CisgICAgaWYgKGRvbmUgfHwgIWdM
YXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcEhpc3RvcnlEZWxlZ2F0ZUNhbGxiYWNrcygpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBBU1NFUlQoZXZlbnRJbmZvKTsKKyAgICBjb25zdCBFd2tfVmll
d19OYXZpZ2F0aW9uX0RhdGEqIG5hdmlnYXRpb25EYXRhID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdf
TmF2aWdhdGlvbl9EYXRhKj4oZXZlbnRJbmZvKTsKKworICAgIEFTU0VSVChuYXZpZ2F0aW9uRGF0
YS0+cmVxdWVzdCk7CisgICAgQVNTRVJUKG5hdmlnYXRpb25EYXRhLT5yZXNwb25zZSk7CisKKyAg
ICBjb25zdCBib29sIHdhc0ZhaWx1cmUgPSBuYXZpZ2F0aW9uRGF0YS0+aGFzX3N1YnN0aXR1dGVf
ZGF0YSB8fCAgbmF2aWdhdGlvbkRhdGEtPnJlc3BvbnNlLT5zdGF0dXNfY29kZSA+PSA0MDA7Cisg
ICAgY29uc3QgYm9vbCB3YXNSZWRpcmVjdGVkID0gbmF2aWdhdGlvbkRhdGEtPmNsaWVudF9yZWRp
cmVjdF9zb3VyY2UgJiYgKihuYXZpZ2F0aW9uRGF0YS0+Y2xpZW50X3JlZGlyZWN0X3NvdXJjZSk7
CisKKyAgICBwcmludGYoIldlYlZpZXcgbmF2aWdhdGVkIHRvIHVybCBcIiVzXCIgd2l0aCB0aXRs
ZSBcIiVzXCIgd2l0aCBIVFRQIGVxdWl2YWxlbnQgbWV0aG9kIFwiJXNcIi4gIFRoZSBuYXZpZ2F0
aW9uIHdhcyAlcyBhbmQgd2FzICVzJXMuXG4iLAorICAgICAgICBuYXZpZ2F0aW9uRGF0YS0+dXJs
LAorICAgICAgICBuYXZpZ2F0aW9uRGF0YS0+dGl0bGUsCisgICAgICAgIG5hdmlnYXRpb25EYXRh
LT5yZXF1ZXN0LT5odHRwX21ldGhvZCwKKyAgICAgICAgd2FzRmFpbHVyZT8gImEgZmFpbHVyZSIg
OiAic3VjY2Vzc2Z1bCIsCisgICAgICAgICh3YXNSZWRpcmVjdGVkID8gImEgY2xpZW50IHJlZGly
ZWN0IGZyb20gIiA6ICJub3QgYSBjbGllbnQgcmVkaXJlY3QiKSwKKyAgICAgICAgKHdhc1JlZGly
ZWN0ZWQgPyBuYXZpZ2F0aW9uRGF0YS0+Y2xpZW50X3JlZGlyZWN0X3NvdXJjZSA6ICIiKSk7Cit9
CisKK3ZvaWQgRHVtcFJlbmRlclRyZWVDaHJvbWU6Om9uV2ViVmlld1NlcnZlclJlZGlyZWN0KHZv
aWQqLCBFdmFzX09iamVjdCosIHZvaWQqIGV2ZW50SW5mbykKK3sKKyAgICBpZiAoZG9uZSB8fCAh
Z0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wSGlzdG9yeURlbGVnYXRlQ2FsbGJhY2tzKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChldmVudEluZm8pOworICAgIGNvbnN0IEV3a19W
aWV3X1JlZGlyZWN0aW9uX0RhdGEqIGRhdGEgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19SZWRpcmVj
dGlvbl9EYXRhKj4oZXZlbnRJbmZvKTsKKyAgICBwcmludGYoIldlYlZpZXcgcGVyZm9ybWVkIGEg
c2VydmVyIHJlZGlyZWN0IGZyb20gXCIlc1wiIHRvIFwiJXNcIi5cbiIsIGRhdGEtPnNvdXJjZV91
cmwsIGRhdGEtPmRlc3RpbmF0aW9uX3VybCk7Cit9CisKK3ZvaWQgRHVtcFJlbmRlclRyZWVDaHJv
bWU6Om9uV2ViVmlld0NsaWVudFJlZGlyZWN0KHZvaWQqLCBFdmFzX09iamVjdCosIHZvaWQqIGV2
ZW50SW5mbykKK3sKKyAgICBpZiAoZG9uZSB8fCAhZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1w
SGlzdG9yeURlbGVnYXRlQ2FsbGJhY2tzKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VS
VChldmVudEluZm8pOworICAgIGNvbnN0IEV3a19WaWV3X1JlZGlyZWN0aW9uX0RhdGEqIGRhdGEg
PSBzdGF0aWNfY2FzdDxFd2tfVmlld19SZWRpcmVjdGlvbl9EYXRhKj4oZXZlbnRJbmZvKTsKKyAg
ICBwcmludGYoIldlYlZpZXcgcGVyZm9ybWVkIGEgY2xpZW50IHJlZGlyZWN0IGZyb20gXCIlc1wi
IHRvIFwiJXNcIi5cbiIsIGRhdGEtPnNvdXJjZV91cmwsIGRhdGEtPmRlc3RpbmF0aW9uX3VybCk7
Cit9CisKK3ZvaWQgRHVtcFJlbmRlclRyZWVDaHJvbWU6Om9uV2ViVmlld1BvcHVsYXRlVmlzaXRl
ZExpbmtzKHZvaWQqLCBFdmFzX09iamVjdCogZXdrVmlldywgdm9pZCopCit7CisgICAgaWYgKGRv
bmUgfHwgIWdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcEhpc3RvcnlEZWxlZ2F0ZUNhbGxiYWNr
cygpKQorICAgICAgICByZXR1cm47CisKKyAgICBwcmludGYoIkFza2VkIHRvIHBvcHVsYXRlIHZp
c2l0ZWQgbGlua3MgZm9yIFdlYlZpZXcgXCIlc1wiXG4iLCBld2tfdmlld191cmlfZ2V0KGV3a1Zp
ZXcpKTsKK30KKwogdm9pZCBEdW1wUmVuZGVyVHJlZUNocm9tZTo6b25GcmFtZVByb3Zpc2lvbmFs
TG9hZCh2b2lkKiwgRXZhc19PYmplY3QqIGZyYW1lLCB2b2lkKikKIHsKICAgICBpZiAoIWRvbmUg
JiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpIHsKZGlm
ZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9EdW1wUmVuZGVyVHJlZUNocm9tZS5o
IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0R1bXBSZW5kZXJUcmVlQ2hyb21lLmgKaW5kZXgg
OWI2NWI0MS4uOWUyZjMyMyAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0R1
bXBSZW5kZXJUcmVlQ2hyb21lLmgKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0R1bXBS
ZW5kZXJUcmVlQ2hyb21lLmgKQEAgLTkxLDYgKzkxLDE0IEBAIHByaXZhdGU6CiAKICAgICBzdGF0
aWMgdm9pZCBvbldlYlZpZXdPbmxvYWRFdmVudCh2b2lkKiwgRXZhc19PYmplY3QqLCB2b2lkKik7
CiAKKyAgICBzdGF0aWMgdm9pZCBvbldlYlZpZXdOYXZpZ2F0ZWRXaXRoRGF0YSh2b2lkKiwgRXZh
c19PYmplY3QqLCB2b2lkKik7CisKKyAgICBzdGF0aWMgdm9pZCBvbldlYlZpZXdTZXJ2ZXJSZWRp
cmVjdCh2b2lkKiwgRXZhc19PYmplY3QqLCB2b2lkKik7CisKKyAgICBzdGF0aWMgdm9pZCBvbldl
YlZpZXdDbGllbnRSZWRpcmVjdCh2b2lkKiwgRXZhc19PYmplY3QqLCB2b2lkKik7CisKKyAgICBz
dGF0aWMgdm9pZCBvbldlYlZpZXdQb3B1bGF0ZVZpc2l0ZWRMaW5rcyh2b2lkKiwgRXZhc19PYmpl
Y3QqLCB2b2lkKik7CisKICAgICBzdGF0aWMgdm9pZCBvbkluc2VjdXJlQ29udGVudFJ1bih2b2lk
KiwgRXZhc19PYmplY3QqLCB2b2lkKik7CiAKICAgICBzdGF0aWMgdm9pZCBvbkluc2VjdXJlQ29u
dGVudERpc3BsYXllZCh2b2lkKiwgRXZhc19PYmplY3QqLCB2b2lkKik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>145527</attachid>
            <date>2012-06-04 00:37:41 -0700</date>
            <delta_ts>2012-06-06 07:57:58 -0700</delta_ts>
            <desc>DRT patch v3 (more review comments from Chris)</desc>
            <filename>bug82579_v5</filename>
            <type>text/plain</type>
            <size>8706</size>
            <attacher name="Mikhail Pozdnyakov">mikhail.pozdnyakov</attacher>
            
              <data encoding="base64">Y29tbWl0IDQ5NDAyOWU5ZTAwNWM5NGNkMDNlMDc4ZjU3YzU1OWE1Nzk5MDBkMWQKQXV0aG9yOiBN
aWtoYWlsIFBvemRueWFrb3YgPHBvemRueWFrb3YubWlraGFpbEBnbWFpbC5jb20+CkRhdGU6ICAg
TW9uIE1heSAxNCAxMzo0MjoxMiAyMDEyICswMzAwCgogICAgYnVnODI1NzkKCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggN2Jh
OTJkZi4uMzgwMzRjNyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xh
eW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDEyLTA1LTE0ICBNaWtoYWls
IFBvemRueWFrb3YgIDxtaWtoYWlsLnBvemRueWFrb3ZAaW50ZWwuY29tPgorCisgICAgICAgIFtF
RkxdW0RSVF0gaHR0cC90ZXN0cy9nbG9iYWxoaXN0b3J5IHRlc3RjYXNlcyBkbyBub3QgcGFzcwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI1NzkKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3Jt
L2VmbC9Ta2lwcGVkOiBVbnNraXAgaHR0cC90ZXN0cy9nbG9iYWxoaXN0b3J5LgorCiAyMDEyLTA2
LTAzICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAg
ICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTE5MzU5LgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vZWZsL1NraXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9lZmwvU2tpcHBl
ZAppbmRleCBlZDdkNGM5Li45NTJhNTA2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS9lZmwvU2tpcHBlZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9lZmwvU2tpcHBlZApAQCAt
Mjk3LDkgKzI5Nyw2IEBAIGZhc3QvcmVwbGFjZWQvcGRmLWFzLWltYWdlLmh0bWwKIGZhc3QvZG9t
L1dpbmRvdy9zbG93LXVubG9hZC1oYW5kbGVyLmh0bWwKIGZhc3QvZG9tL1dpbmRvdy9zbG93LXVu
bG9hZC1oYW5kbGVyLW9ubHktZnJhbWUtaXMtc3RvcHBlZC5odG1sCiAKLSMgVGhlIEVGTCBwb3J0
IGhhcyBubyBnbG9iYWwgaGlzdG9yeSBkZWxlZ2F0ZQotaHR0cC90ZXN0cy9nbG9iYWxoaXN0b3J5
Ci0KICMgRmFpbHMgYmVjYXVzZSBvZiB0aGUgc2VjdXJpdHkgcG9saWN5IG9mIHRoZSB1c2VyIGFn
ZW50PwogIyBodHRwOi8vd2Via2l0Lm9yZy9iLzc5NjA0CiBmYXN0L211dGF0aW9uL2RhdGFiYXNl
LWNhbGxiYWNrLWRlbGl2ZXJ5Lmh0bWwKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rv
b2xzL0NoYW5nZUxvZwppbmRleCBjZmNhZjBlLi45ZDVhMDEwIDEwMDY0NAotLS0gYS9Ub29scy9D
aGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTItMDUt
MTQgIE1pa2hhaWwgUG96ZG55YWtvdiAgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CisK
KyAgICAgICAgW0VGTF1bRFJUXSBodHRwL3Rlc3RzL2dsb2JhbGhpc3RvcnkgdGVzdGNhc2VzIGRv
IG5vdCBwYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD04MjU3OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IERSVCBoYXMgcHJvdmlkZWQgY2FsbGJhY2tzIGZvciBld2tfdmlldyAiZ2xvYmFsIGhpc3Rvcnkg
ZGVsZWdhdGUiIHNpZ25hbHMuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9lZmwvRHVtcFJl
bmRlclRyZWUuY3BwOgorICAgICAgICAoaXNHbG9iYWxIaXN0b3J5VGVzdCk6IEF1eCBmdW5jdGlv
biB0byBpZGVudCBnbG9iYWwgaGlzdG9yeSB0ZXN0Y2FzZS4KKyAgICAgICAgKGNyZWF0ZUxheW91
dFRlc3RDb250cm9sbGVyKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9lZmwvRHVtcFJlbmRl
clRyZWVDaHJvbWUuY3BwOgorICAgICAgICAoRHVtcFJlbmRlclRyZWVDaHJvbWU6OmNyZWF0ZVZp
ZXcpOgorICAgICAgICAoRHVtcFJlbmRlclRyZWVDaHJvbWU6Om9uVGl0bGVDaGFuZ2VkKTogSGFu
ZGxlcyBhbHNvIHNvbWUgZ2xvYmFsIGhpc3RvcnkgdGVzdGNhc2VzLgorICAgICAgICAoRHVtcFJl
bmRlclRyZWVDaHJvbWU6Om9uV2ViVmlld05hdmlnYXRlZFdpdGhEYXRhKTogTmV3IGNhbGxiYWNr
IGZ1bmN0aW9uLgorICAgICAgICAoRHVtcFJlbmRlclRyZWVDaHJvbWU6Om9uV2ViVmlld1NlcnZl
clJlZGlyZWN0KTogRGl0dG8uCisgICAgICAgIChEdW1wUmVuZGVyVHJlZUNocm9tZTo6b25XZWJW
aWV3Q2xpZW50UmVkaXJlY3QpOiBEaXR0by4KKyAgICAgICAgKER1bXBSZW5kZXJUcmVlQ2hyb21l
OjpvbldlYlZpZXdQb3B1bGF0ZVZpc2l0ZWRMaW5rcyk6IERpdHRvLgorICAgICAgICAqIER1bXBS
ZW5kZXJUcmVlL2VmbC9EdW1wUmVuZGVyVHJlZUNocm9tZS5oOgorICAgICAgICAoRHVtcFJlbmRl
clRyZWVDaHJvbWUpOgorCiAyMDEyLTA2LTAzICBWYXJ1biBKYWluICA8dmFydW5qYWluQGdvb2ds
ZS5jb20+CiAKICAgICAgICAgW2Nocm9taXVtXSBBZGQgbmV3IGdlc3R1cmUgdHlwZSAodHdvIGZp
bmdlciB0YXApIHRoYXQgdHJpZ2dlcnMgY29udGV4dCBtZW51LgpkaWZmIC0tZ2l0IGEvVG9vbHMv
RHVtcFJlbmRlclRyZWUvZWZsL0R1bXBSZW5kZXJUcmVlLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL2VmbC9EdW1wUmVuZGVyVHJlZS5jcHAKaW5kZXggZjhiZjg1ZS4uYWFjZTQ3NSAxMDA2NDQK
LS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0R1bXBSZW5kZXJUcmVlLmNwcAorKysgYi9U
b29scy9EdW1wUmVuZGVyVHJlZS9lZmwvRHVtcFJlbmRlclRyZWUuY3BwCkBAIC0xOTksNiArMTk5
LDExIEBAIHN0YXRpYyBTdHJpbmcgZ2V0RXhwZWN0ZWRQaXhlbEhhc2goY29uc3QgU3RyaW5nJiB0
ZXN0VVJMKQogICAgIHJldHVybiAoaGFzaFNlcGFyYXRvclBvcyAhPSBub3RGb3VuZCkgPyB0ZXN0
VVJMLnN1YnN0cmluZyhoYXNoU2VwYXJhdG9yUG9zICsgMSkgOiBTdHJpbmcoKTsKIH0KIAorc3Rh
dGljIGlubGluZSBib29sIGlzR2xvYmFsSGlzdG9yeVRlc3QoY29uc3QgU3RyaW5nJiBjVGVzdFBh
dGhPclVSTCkKK3sKKyAgICByZXR1cm4gY1Rlc3RQYXRoT3JVUkwuY29udGFpbnMoIi9nbG9iYWxo
aXN0b3J5LyIpOworfQorCiBzdGF0aWMgdm9pZCBjcmVhdGVMYXlvdXRUZXN0Q29udHJvbGxlcihj
b25zdCBTdHJpbmcmIHRlc3RVUkwsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRQaXhlbEhhc2gpCiB7
CiAgICAgZ0xheW91dFRlc3RDb250cm9sbGVyID0KQEAgLTIxNCw2ICsyMTksNyBAQCBzdGF0aWMg
dm9pZCBjcmVhdGVMYXlvdXRUZXN0Q29udHJvbGxlcihjb25zdCBTdHJpbmcmIHRlc3RVUkwsIGNv
bnN0IFN0cmluZyYgZXhwZQogICAgICAgICBnTGF5b3V0VGVzdENvbnRyb2xsZXItPnNldER1bXBG
cmFtZUxvYWRDYWxsYmFja3ModHJ1ZSk7CiAKICAgICBnTGF5b3V0VGVzdENvbnRyb2xsZXItPnNl
dERldmVsb3BlckV4dHJhc0VuYWJsZWQodHJ1ZSk7CisgICAgZ0xheW91dFRlc3RDb250cm9sbGVy
LT5zZXREdW1wSGlzdG9yeURlbGVnYXRlQ2FsbGJhY2tzKGlzR2xvYmFsSGlzdG9yeVRlc3QodGVz
dFVSTCkpOwogCiAgICAgaWYgKHNob3VsZER1bXBBc1RleHQodGVzdFVSTCkpIHsKICAgICAgICAg
Z0xheW91dFRlc3RDb250cm9sbGVyLT5zZXREdW1wQXNUZXh0KHRydWUpOwpkaWZmIC0tZ2l0IGEv
VG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0R1bXBSZW5kZXJUcmVlQ2hyb21lLmNwcCBiL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL2VmbC9EdW1wUmVuZGVyVHJlZUNocm9tZS5jcHAKaW5kZXggODYyYTYx
Ni4uNmY1YjIyZSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0R1bXBSZW5k
ZXJUcmVlQ2hyb21lLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvRHVtcFJlbmRl
clRyZWVDaHJvbWUuY3BwCkBAIC0xMTAsNiArMTEwLDEwIEBAIEV2YXNfT2JqZWN0KiBEdW1wUmVu
ZGVyVHJlZUNocm9tZTo6Y3JlYXRlVmlldygpIGNvbnN0CiAgICAgZXZhc19vYmplY3Rfc21hcnRf
Y2FsbGJhY2tfYWRkKHZpZXcsICJtaXhlZGNvbnRlbnQscnVuIiwgb25JbnNlY3VyZUNvbnRlbnRS
dW4sIDApOwogICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZCh2aWV3LCAibWl4ZWRj
b250ZW50LGRpc3BsYXllZCIsIG9uSW5zZWN1cmVDb250ZW50RGlzcGxheWVkLCAwKTsKICAgICBl
dmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQodmlldywgImZyYW1lLGNyZWF0ZWQiLCBvbkZy
YW1lQ3JlYXRlZCwgMCk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKHZpZXcs
ICJuYXZpZ2F0ZSx3aXRoLGRhdGEiLCBvbldlYlZpZXdOYXZpZ2F0ZWRXaXRoRGF0YSwgMCk7Cisg
ICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKHZpZXcsICJwZXJmb3JtLHNlcnZlcixy
ZWRpcmVjdCIsIG9uV2ViVmlld1NlcnZlclJlZGlyZWN0LCAwKTsKKyAgICBldmFzX29iamVjdF9z
bWFydF9jYWxsYmFja19hZGQodmlldywgInBlcmZvcm0sY2xpZW50LHJlZGlyZWN0Iiwgb25XZWJW
aWV3Q2xpZW50UmVkaXJlY3QsIDApOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2Fk
ZCh2aWV3LCAicG9wdWxhdGUsdmlzaXRlZCxsaW5rcyIsIG9uV2ViVmlld1BvcHVsYXRlVmlzaXRl
ZExpbmtzLCAwKTsKIAogICAgIGNvbm5lY3RFZGl0aW5nQ2FsbGJhY2tzKHZpZXcpOwogCkBAIC00
NTQsNiArNDU4LDEwIEBAIHZvaWQgRHVtcFJlbmRlclRyZWVDaHJvbWU6Om9uRnJhbWVUaXRsZUNo
YW5nZWQodm9pZCosIEV2YXNfT2JqZWN0KiBmcmFtZSwgdm9pZCoKIAogICAgIGlmICghZG9uZSAm
JiBnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBUaXRsZUNoYW5nZXMoKSkKICAgICAgICAgcHJp
bnRmKCJUSVRMRSBDSEFOR0VEOiAlc1xuIiwgKHRpdGxlVGV4dCAmJiB0aXRsZVRleHQtPnN0cmlu
ZykgPyB0aXRsZVRleHQtPnN0cmluZyA6ICIiKTsKKworICAgIGlmICghZG9uZSAmJiBnTGF5b3V0
VGVzdENvbnRyb2xsZXItPmR1bXBIaXN0b3J5RGVsZWdhdGVDYWxsYmFja3MoKSkKKyAgICAgICAg
cHJpbnRmKCJXZWJWaWV3IHVwZGF0ZWQgdGhlIHRpdGxlIGZvciBoaXN0b3J5IFVSTCBcIiVzXCIg
dG8gXCIlc1wiLlxuIiwgZXdrX2ZyYW1lX3VyaV9nZXQoZnJhbWUpCisgICAgICAgICAgICAgICAs
ICh0aXRsZVRleHQgJiYgdGl0bGVUZXh0LT5zdHJpbmcpID8gdGl0bGVUZXh0LT5zdHJpbmcgOiAi
Iik7CiB9CiAKIHZvaWQgRHVtcFJlbmRlclRyZWVDaHJvbWU6Om9uRG9jdW1lbnRMb2FkRmluaXNo
ZWQodm9pZCosIEV2YXNfT2JqZWN0Kiwgdm9pZCogZXZlbnRJbmZvKQpAQCAtNTUwLDYgKzU1OCw1
NyBAQCB2b2lkIER1bXBSZW5kZXJUcmVlQ2hyb21lOjpvbkZyYW1lQ3JlYXRlZCh2b2lkKiwgRXZh
c19PYmplY3QqLCB2b2lkKiBldmVudEluZm8pCiAgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJh
Y2tfYWRkKGZyYW1lLCAieHNzLGRldGVjdGVkIiwgb25EaWREZXRlY3RYU1MsIDApOwogfQogCit2
b2lkIER1bXBSZW5kZXJUcmVlQ2hyb21lOjpvbldlYlZpZXdOYXZpZ2F0ZWRXaXRoRGF0YSh2b2lk
KiwgRXZhc19PYmplY3QqLCB2b2lkKiBldmVudEluZm8pCit7CisgICAgaWYgKGRvbmUgfHwgIWdM
YXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcEhpc3RvcnlEZWxlZ2F0ZUNhbGxiYWNrcygpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBBU1NFUlQoZXZlbnRJbmZvKTsKKyAgICBjb25zdCBFd2tfVmll
d19OYXZpZ2F0aW9uX0RhdGEqIG5hdmlnYXRpb25EYXRhID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdf
TmF2aWdhdGlvbl9EYXRhKj4oZXZlbnRJbmZvKTsKKworICAgIEFTU0VSVChuYXZpZ2F0aW9uRGF0
YS0+cmVxdWVzdCk7CisgICAgQVNTRVJUKG5hdmlnYXRpb25EYXRhLT5yZXNwb25zZSk7CisKKyAg
ICBjb25zdCBib29sIHdhc0ZhaWx1cmUgPSBuYXZpZ2F0aW9uRGF0YS0+aGFzX3N1YnN0aXR1dGVf
ZGF0YSB8fCBuYXZpZ2F0aW9uRGF0YS0+cmVzcG9uc2UtPnN0YXR1c19jb2RlID49IDQwMDsKKyAg
ICBjb25zdCBib29sIHdhc1JlZGlyZWN0ZWQgPSBuYXZpZ2F0aW9uRGF0YS0+Y2xpZW50X3JlZGly
ZWN0X3NvdXJjZSAmJiAqKG5hdmlnYXRpb25EYXRhLT5jbGllbnRfcmVkaXJlY3Rfc291cmNlKTsK
KworICAgIHByaW50ZigiV2ViVmlldyBuYXZpZ2F0ZWQgdG8gdXJsIFwiJXNcIiB3aXRoIHRpdGxl
IFwiJXNcIiB3aXRoIEhUVFAgZXF1aXZhbGVudCBtZXRob2QgXCIlc1wiLiAgVGhlIG5hdmlnYXRp
b24gd2FzICVzIGFuZCB3YXMgJXMlcy5cbiIsCisgICAgICAgIG5hdmlnYXRpb25EYXRhLT51cmws
CisgICAgICAgIG5hdmlnYXRpb25EYXRhLT50aXRsZSwKKyAgICAgICAgbmF2aWdhdGlvbkRhdGEt
PnJlcXVlc3QtPmh0dHBfbWV0aG9kLAorICAgICAgICB3YXNGYWlsdXJlPyAiYSBmYWlsdXJlIiA6
ICJzdWNjZXNzZnVsIiwKKyAgICAgICAgKHdhc1JlZGlyZWN0ZWQgPyAiYSBjbGllbnQgcmVkaXJl
Y3QgZnJvbSAiIDogIm5vdCBhIGNsaWVudCByZWRpcmVjdCIpLAorICAgICAgICAod2FzUmVkaXJl
Y3RlZCA/IG5hdmlnYXRpb25EYXRhLT5jbGllbnRfcmVkaXJlY3Rfc291cmNlIDogIiIpKTsKK30K
Kwordm9pZCBEdW1wUmVuZGVyVHJlZUNocm9tZTo6b25XZWJWaWV3U2VydmVyUmVkaXJlY3Qodm9p
ZCosIEV2YXNfT2JqZWN0Kiwgdm9pZCogZXZlbnRJbmZvKQoreworICAgIGlmIChkb25lIHx8ICFn
TGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBIaXN0b3J5RGVsZWdhdGVDYWxsYmFja3MoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKGV2ZW50SW5mbyk7CisgICAgY29uc3QgRXdrX1Zp
ZXdfUmVkaXJlY3Rpb25fRGF0YSogZGF0YSA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1JlZGlyZWN0
aW9uX0RhdGEqPihldmVudEluZm8pOworICAgIHByaW50ZigiV2ViVmlldyBwZXJmb3JtZWQgYSBz
ZXJ2ZXIgcmVkaXJlY3QgZnJvbSBcIiVzXCIgdG8gXCIlc1wiLlxuIiwgZGF0YS0+c291cmNlX3Vy
bCwgZGF0YS0+ZGVzdGluYXRpb25fdXJsKTsKK30KKwordm9pZCBEdW1wUmVuZGVyVHJlZUNocm9t
ZTo6b25XZWJWaWV3Q2xpZW50UmVkaXJlY3Qodm9pZCosIEV2YXNfT2JqZWN0Kiwgdm9pZCogZXZl
bnRJbmZvKQoreworICAgIGlmIChkb25lIHx8ICFnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBI
aXN0b3J5RGVsZWdhdGVDYWxsYmFja3MoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJU
KGV2ZW50SW5mbyk7CisgICAgY29uc3QgRXdrX1ZpZXdfUmVkaXJlY3Rpb25fRGF0YSogZGF0YSA9
IHN0YXRpY19jYXN0PEV3a19WaWV3X1JlZGlyZWN0aW9uX0RhdGEqPihldmVudEluZm8pOworICAg
IHByaW50ZigiV2ViVmlldyBwZXJmb3JtZWQgYSBjbGllbnQgcmVkaXJlY3QgZnJvbSBcIiVzXCIg
dG8gXCIlc1wiLlxuIiwgZGF0YS0+c291cmNlX3VybCwgZGF0YS0+ZGVzdGluYXRpb25fdXJsKTsK
K30KKwordm9pZCBEdW1wUmVuZGVyVHJlZUNocm9tZTo6b25XZWJWaWV3UG9wdWxhdGVWaXNpdGVk
TGlua3Modm9pZCosIEV2YXNfT2JqZWN0KiBld2tWaWV3LCB2b2lkKikKK3sKKyAgICBpZiAoZG9u
ZSB8fCAhZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wSGlzdG9yeURlbGVnYXRlQ2FsbGJhY2tz
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIHByaW50ZigiQXNrZWQgdG8gcG9wdWxhdGUgdmlz
aXRlZCBsaW5rcyBmb3IgV2ViVmlldyBcIiVzXCJcbiIsIGV3a192aWV3X3VyaV9nZXQoZXdrVmll
dykpOworfQorCiB2b2lkIER1bXBSZW5kZXJUcmVlQ2hyb21lOjpvbkZyYW1lUHJvdmlzaW9uYWxM
b2FkKHZvaWQqLCBFdmFzX09iamVjdCogZnJhbWUsIHZvaWQqKQogewogICAgIGlmICghZG9uZSAm
JiBnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkgewpkaWZm
IC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0R1bXBSZW5kZXJUcmVlQ2hyb21lLmgg
Yi9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvRHVtcFJlbmRlclRyZWVDaHJvbWUuaAppbmRleCA5
YjY1YjQxLi45ZTJmMzIzIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvRHVt
cFJlbmRlclRyZWVDaHJvbWUuaAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvRHVtcFJl
bmRlclRyZWVDaHJvbWUuaApAQCAtOTEsNiArOTEsMTQgQEAgcHJpdmF0ZToKIAogICAgIHN0YXRp
YyB2b2lkIG9uV2ViVmlld09ubG9hZEV2ZW50KHZvaWQqLCBFdmFzX09iamVjdCosIHZvaWQqKTsK
IAorICAgIHN0YXRpYyB2b2lkIG9uV2ViVmlld05hdmlnYXRlZFdpdGhEYXRhKHZvaWQqLCBFdmFz
X09iamVjdCosIHZvaWQqKTsKKworICAgIHN0YXRpYyB2b2lkIG9uV2ViVmlld1NlcnZlclJlZGly
ZWN0KHZvaWQqLCBFdmFzX09iamVjdCosIHZvaWQqKTsKKworICAgIHN0YXRpYyB2b2lkIG9uV2Vi
Vmlld0NsaWVudFJlZGlyZWN0KHZvaWQqLCBFdmFzX09iamVjdCosIHZvaWQqKTsKKworICAgIHN0
YXRpYyB2b2lkIG9uV2ViVmlld1BvcHVsYXRlVmlzaXRlZExpbmtzKHZvaWQqLCBFdmFzX09iamVj
dCosIHZvaWQqKTsKKwogICAgIHN0YXRpYyB2b2lkIG9uSW5zZWN1cmVDb250ZW50UnVuKHZvaWQq
LCBFdmFzX09iamVjdCosIHZvaWQqKTsKIAogICAgIHN0YXRpYyB2b2lkIG9uSW5zZWN1cmVDb250
ZW50RGlzcGxheWVkKHZvaWQqLCBFdmFzX09iamVjdCosIHZvaWQqKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>