<?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>73513</bug_id>
          
          <creation_ts>2011-11-30 19:44:45 -0800</creation_ts>
          <short_desc>[Blackberry] Upstream BlackBerry porting of plugin framework -- part 2</short_desc>
          <delta_ts>2011-12-01 11:01:03 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</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>
          
          <blocked>73185</blocked>
    
    <blocked>73397</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Charles Wei">charles.wei</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>dbates</cc>
    
    <cc>levin+threading</cc>
    
    <cc>staikos</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>512371</commentid>
    <comment_count>0</comment_count>
    <who name="Charles Wei">charles.wei</who>
    <bug_when>2011-11-30 19:44:45 -0800</bug_when>
    <thetext>This is continue the work from 78135 to upstream PluginViewPrivateBlackBerry and NPCallbacksBlackBerry.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512380</commentid>
    <comment_count>1</comment_count>
    <who name="Charles Wei">charles.wei</who>
    <bug_when>2011-11-30 19:53:58 -0800</bug_when>
    <thetext>Should be 73185 instead of 78135 in the last comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512387</commentid>
    <comment_count>2</comment_count>
      <attachid>117317</attachid>
    <who name="Charles Wei">charles.wei</who>
    <bug_when>2011-11-30 20:06:31 -0800</bug_when>
    <thetext>Created attachment 117317
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512394</commentid>
    <comment_count>3</comment_count>
      <attachid>117318</attachid>
    <who name="Charles Wei">charles.wei</who>
    <bug_when>2011-11-30 20:35:21 -0800</bug_when>
    <thetext>Created attachment 117318
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512399</commentid>
    <comment_count>4</comment_count>
      <attachid>117318</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2011-11-30 20:39:27 -0800</bug_when>
    <thetext>Comment on attachment 117318
Patch

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

&gt; Source/WebCore/plugins/blackberry/PluginViewPrivateBlackBerry.cpp:183
&gt; +    FrameView* frameView = static_cast&lt;FrameView*&gt;(m_view-&gt;parent());
&gt; +
&gt; +    if (preventIdle == m_idlePrevented)
&gt; +        return;

we could move the early return before the &apos; frameview = xxx&apos; lines.

&gt; Source/WebCore/plugins/blackberry/PluginViewPrivateBlackBerry.cpp:325
&gt; +    for (int i = 0; (i &lt; PLUGIN_BUFFERS) &amp;&amp; success; i++) {

unneeded ()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512401</commentid>
    <comment_count>5</comment_count>
      <attachid>117318</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-11-30 20:42:20 -0800</bug_when>
    <thetext>Comment on attachment 117318
Patch

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

Thanks for the updated patch. In addition to Antonio&apos;s suggestions, I have a small nit.

&gt; Source/WebCore/plugins/blackberry/NPCallbacksBlackBerry.h:22
&gt; +#include &lt;PluginView.h&gt;

Nit: This should be:

#include &quot;PluginView.h&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512428</commentid>
    <comment_count>6</comment_count>
    <who name="Charles Wei">charles.wei</who>
    <bug_when>2011-11-30 21:24:50 -0800</bug_when>
    <thetext>Thanks, Daniel and Antonio.  A new patch is coming to address your comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512432</commentid>
    <comment_count>7</comment_count>
      <attachid>117326</attachid>
    <who name="Charles Wei">charles.wei</who>
    <bug_when>2011-11-30 21:28:05 -0800</bug_when>
    <thetext>Created attachment 117326
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512908</commentid>
    <comment_count>8</comment_count>
      <attachid>117326</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-01 11:00:57 -0800</bug_when>
    <thetext>Comment on attachment 117326
Patch

Clearing flags on attachment: 117326

Committed r101689: &lt;http://trac.webkit.org/changeset/101689&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512909</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-01 11:01:03 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117317</attachid>
            <date>2011-11-30 20:06:31 -0800</date>
            <delta_ts>2011-11-30 20:35:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73513-20111201120706.patch</filename>
            <type>text/plain</type>
            <size>26004</size>
            <attacher name="Charles Wei">charles.wei</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMTU5NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDExLTExLTMwICBXZWkgQ2hh
cmxlcyAgPGNoYXJsZXMud2VpQHRvcmNobW9iaWxlLmNvbS5jbj4KKworICAgICAgICBbQmxhY2ti
ZXJyeV0gVXBzdHJlYW0gQmxhY2tCZXJyeSBwb3J0aW5nIG9mIHBsdWdpbiBmcmFtZXdvcmsgLS0g
cGFydCAyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
MzUxMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cyBmb3Igbm93LgorCisgICAgICAgICogcGx1Z2lucy9ibGFja2JlcnJ5L05QQ2Fs
bGJhY2tzQmxhY2tCZXJyeS5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsdWdpbnMvYmxhY2tiZXJy
eS9OUENhbGxiYWNrc0JsYWNrQmVycnkuaDogQWRkZWQuCisgICAgICAgICogcGx1Z2lucy9ibGFj
a2JlcnJ5L1BsdWdpblZpZXdQcml2YXRlQmxhY2tCZXJyeS5jcHA6IEFkZGVkLgorICAgICAgICAq
IHBsdWdpbnMvYmxhY2tiZXJyeS9QbHVnaW5WaWV3UHJpdmF0ZUJsYWNrQmVycnkuaDogQWRkZWQu
CisKIDIwMTEtMTEtMzAgIFRha2FzaGkgVG95b3NoaW1hICA8dG95b3NoaW1AY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIEFkZCBPVkVSUklERSB0byBXZWJTb2NrZXQgcmVsYXRlZCBzb3VyY2VzIGZv
ciBzYWZlIGluaGVyaXRhbmNlcy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvYmxhY2ti
ZXJyeS9OUENhbGxiYWNrc0JsYWNrQmVycnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsdWdpbnMvYmxhY2tiZXJyeS9OUENhbGxiYWNrc0JsYWNrQmVycnkuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ibGFja2JlcnJ5L05QQ2FsbGJhY2tzQmxh
Y2tCZXJyeS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjIyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDExIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rvbiwg
TUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJOUENhbGxiYWNrc0JsYWNrQmVycnkuaCIKKworI2luY2x1ZGUgIlBsdWdpblZpZXdQcml2YXRl
QmxhY2tCZXJyeS5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorI2luY2x1
ZGUgIlBsdWdpbkxheWVyV2ViS2l0VGhyZWFkLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitQdGhyZWFkTXV0ZXhMb2NrZXI6OlB0aHJlYWRNdXRleExvY2tlcihwdGhyZWFkX211
dGV4X3QqIG11dGV4KQorICAgIDogbV9tdXRleChtdXRleCkKK3sKKyAgICBwdGhyZWFkX211dGV4
X2xvY2sobV9tdXRleCk7Cit9CisKK1B0aHJlYWRNdXRleExvY2tlcjo6flB0aHJlYWRNdXRleExv
Y2tlcigpCit7CisgICAgcHRocmVhZF9tdXRleF91bmxvY2sobV9tdXRleCk7Cit9CisKK1B0aHJl
YWRSZWFkTG9ja2VyOjpQdGhyZWFkUmVhZExvY2tlcihwdGhyZWFkX3J3bG9ja190KiByd2xvY2sp
CisgICAgOiBtX3J3bG9jayhyd2xvY2spCit7CisgICAgcHRocmVhZF9yd2xvY2tfcmRsb2NrKG1f
cndsb2NrKTsKK30KKworUHRocmVhZFJlYWRMb2NrZXI6On5QdGhyZWFkUmVhZExvY2tlcigpCit7
CisgICAgcHRocmVhZF9yd2xvY2tfdW5sb2NrKG1fcndsb2NrKTsKK30KKworUHRocmVhZFdyaXRl
TG9ja2VyOjpQdGhyZWFkV3JpdGVMb2NrZXIocHRocmVhZF9yd2xvY2tfdCogcndsb2NrKQorICAg
IDogbV9yd2xvY2socndsb2NrKQoreworICAgIHB0aHJlYWRfcndsb2NrX3dybG9jayhtX3J3bG9j
ayk7Cit9CisKK1B0aHJlYWRXcml0ZUxvY2tlcjo6flB0aHJlYWRXcml0ZUxvY2tlcigpCit7Cisg
ICAgcHRocmVhZF9yd2xvY2tfdW5sb2NrKG1fcndsb2NrKTsKK30KKworI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKK3ZvaWQgbnBTZXRIb2xlUHVuY2hIYW5kbGVyKHZvaWQqIGhvbGVQ
dW5jaERhdGEpCit7CisgICAgT3duUHRyPEhvbGVQdW5jaERhdGE+IGRhdGEgPSBhZG9wdFB0cihz
dGF0aWNfY2FzdDxIb2xlUHVuY2hEYXRhKj4oaG9sZVB1bmNoRGF0YSkpOworICAgIGlmIChkYXRh
LT5sYXllcikKKyAgICAgICAgZGF0YS0+bGF5ZXItPnNldEhvbGVQdW5jaFJlY3QoSW50UmVjdChk
YXRhLT54LCBkYXRhLT55LCBkYXRhLT53LCBkYXRhLT5oKSk7Cit9CisjZW5kaWYKKworLy8gTlBB
UEkgY2FsbGJhY2sgZnVuY3Rpb25zCisKK3ZvaWQgc2V0VmlzaWJsZVJlY3RzKE5QUCBpbnN0YW5j
ZSwgY29uc3QgTlBSZWN0IHJlY3RzW10sIGludDMyX3QgY291bnQpCit7CisgICAgUGx1Z2luVmll
dyogdmlldyA9IHN0YXRpY19jYXN0PFBsdWdpblZpZXcqPihpbnN0YW5jZS0+bmRhdGEpOworICAg
IFBsdWdpblZpZXdQcml2YXRlKiB2aWV3UHJpdmF0ZSA9IHZpZXctPmdldFByaXZhdGUoKTsKKyAg
ICB2aWV3UHJpdmF0ZS0+c2V0VmlzaWJsZVJlY3RzKHJlY3RzLCBjb3VudCk7Cit9CisKK3ZvaWQg
Y2xlYXJWaXNpYmxlUmVjdHMoTlBQIGluc3RhbmNlKQoreworICAgIFBsdWdpblZpZXcqIHZpZXcg
PSBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3Kj4oaW5zdGFuY2UtPm5kYXRhKTsKKyAgICBQbHVnaW5W
aWV3UHJpdmF0ZSogdmlld1ByaXZhdGUgPSB2aWV3LT5nZXRQcml2YXRlKCk7CisgICAgdmlld1By
aXZhdGUtPmNsZWFyVmlzaWJsZVJlY3RzKCk7Cit9CisKK3ZvaWQgc2hvd0tleWJvYXJkKE5QUCBp
bnN0YW5jZSwgYm9vbCB2YWx1ZSkKK3sKKyAgICBQbHVnaW5WaWV3KiB2aWV3ID0gc3RhdGljX2Nh
c3Q8UGx1Z2luVmlldyo+KGluc3RhbmNlLT5uZGF0YSk7CisgICAgUGx1Z2luVmlld1ByaXZhdGUq
IHZpZXdQcml2YXRlID0gdmlldy0+Z2V0UHJpdmF0ZSgpOworICAgIHZpZXdQcml2YXRlLT5zaG93
S2V5Ym9hcmQodmFsdWUpOworfQorCit2b2lkIHJlcXVlc3RGdWxsU2NyZWVuKE5QUCBpbnN0YW5j
ZSkKK3sKKyAgICBQbHVnaW5WaWV3KiB2aWV3ID0gc3RhdGljX2Nhc3Q8UGx1Z2luVmlldyo+KGlu
c3RhbmNlLT5uZGF0YSk7CisgICAgUGx1Z2luVmlld1ByaXZhdGUqIHZpZXdQcml2YXRlID0gdmll
dy0+Z2V0UHJpdmF0ZSgpOworICAgIHZpZXdQcml2YXRlLT5yZXF1ZXN0RnVsbFNjcmVlbigpOwor
fQorCit2b2lkIGV4aXRGdWxsU2NyZWVuKE5QUCBpbnN0YW5jZSkKK3sKKyAgICBQbHVnaW5WaWV3
KiB2aWV3ID0gc3RhdGljX2Nhc3Q8UGx1Z2luVmlldyo+KGluc3RhbmNlLT5uZGF0YSk7CisgICAg
UGx1Z2luVmlld1ByaXZhdGUqIHZpZXdQcml2YXRlID0gdmlldy0+Z2V0UHJpdmF0ZSgpOworICAg
IHZpZXdQcml2YXRlLT5leGl0RnVsbFNjcmVlbigpOworfQorCit2b2lkIHJlcXVlc3RDZW50ZXJG
aXRab29tKE5QUCBpbnN0YW5jZSkKK3sKKyAgICBQbHVnaW5WaWV3KiB2aWV3ID0gc3RhdGljX2Nh
c3Q8UGx1Z2luVmlldyo+KGluc3RhbmNlLT5uZGF0YSk7CisgICAgUGx1Z2luVmlld1ByaXZhdGUq
IHZpZXdQcml2YXRlID0gdmlldy0+Z2V0UHJpdmF0ZSgpOworICAgIHZpZXdQcml2YXRlLT5yZXF1
ZXN0Q2VudGVyRml0Wm9vbSgpOworfQorCit2b2lkIGxvY2tPcmllbnRhdGlvbihOUFAgaW5zdGFu
Y2UsIGJvb2wgbGFuZHNjYXBlKQoreworICAgIFBsdWdpblZpZXcqIHZpZXcgPSBzdGF0aWNfY2Fz
dDxQbHVnaW5WaWV3Kj4oaW5zdGFuY2UtPm5kYXRhKTsKKyAgICBQbHVnaW5WaWV3UHJpdmF0ZSog
dmlld1ByaXZhdGUgPSB2aWV3LT5nZXRQcml2YXRlKCk7CisgICAgdmlld1ByaXZhdGUtPmxvY2tP
cmllbnRhdGlvbihsYW5kc2NhcGUpOworfQorCit2b2lkIHVubG9ja09yaWVudGF0aW9uKE5QUCBp
bnN0YW5jZSkKK3sKKyAgICBQbHVnaW5WaWV3KiB2aWV3ID0gc3RhdGljX2Nhc3Q8UGx1Z2luVmll
dyo+KGluc3RhbmNlLT5uZGF0YSk7CisgICAgUGx1Z2luVmlld1ByaXZhdGUqIHZpZXdQcml2YXRl
ID0gdmlldy0+Z2V0UHJpdmF0ZSgpOworICAgIHZpZXdQcml2YXRlLT51bmxvY2tPcmllbnRhdGlv
bigpOworfQorCit2b2lkIHByZXZlbnRJZGxlKE5QUCBpbnN0YW5jZSwgYm9vbCBwcmV2ZW50SWRs
ZSkKK3sKKyAgICBQbHVnaW5WaWV3KiB2aWV3ID0gc3RhdGljX2Nhc3Q8UGx1Z2luVmlldyo+KGlu
c3RhbmNlLT5uZGF0YSk7CisgICAgUGx1Z2luVmlld1ByaXZhdGUqIHZpZXdQcml2YXRlID0gdmll
dy0+Z2V0UHJpdmF0ZSgpOworICAgIHZpZXdQcml2YXRlLT5wcmV2ZW50SWRsZShwcmV2ZW50SWRs
ZSk7Cit9CisKK05QU3VyZmFjZSBsb2NrQmFja0J1ZmZlcihOUFAgaW5zdGFuY2UpCit7CisgICAg
UGx1Z2luVmlldyogdmlldyA9IHN0YXRpY19jYXN0PFBsdWdpblZpZXcqPihpbnN0YW5jZS0+bmRh
dGEpOworICAgIFBsdWdpblZpZXdQcml2YXRlKiB2aWV3UHJpdmF0ZSA9IHZpZXctPmdldFByaXZh
dGUoKTsKKyAgICByZXR1cm4gdmlld1ByaXZhdGUtPmxvY2tCYWNrQnVmZmVyKCk7Cit9CisKK3Zv
aWQgdW5sb2NrQmFja0J1ZmZlcihOUFAgaW5zdGFuY2UpCit7CisgICAgUGx1Z2luVmlldyogdmll
dyA9IHN0YXRpY19jYXN0PFBsdWdpblZpZXcqPihpbnN0YW5jZS0+bmRhdGEpOworICAgIFBsdWdp
blZpZXdQcml2YXRlKiB2aWV3UHJpdmF0ZSA9IHZpZXctPmdldFByaXZhdGUoKTsKKyAgICB2aWV3
UHJpdmF0ZS0+dW5sb2NrQmFja0J1ZmZlcigpOworfQorCitOUFN1cmZhY2UgbG9ja1JlYWRGcm9u
dEJ1ZmZlcihOUFAgaW5zdGFuY2UpCit7CisgICAgUGx1Z2luVmlldyogdmlldyA9IHN0YXRpY19j
YXN0PFBsdWdpblZpZXcqPihpbnN0YW5jZS0+bmRhdGEpOworICAgIFBsdWdpblZpZXdQcml2YXRl
KiB2aWV3UHJpdmF0ZSA9IHZpZXctPmdldFByaXZhdGUoKTsKKyAgICByZXR1cm4gdmlld1ByaXZh
dGUtPmxvY2tSZWFkRnJvbnRCdWZmZXIoKTsKK30KKwordm9pZCB1bmxvY2tSZWFkRnJvbnRCdWZm
ZXIoTlBQIGluc3RhbmNlKQoreworICAgIFBsdWdpblZpZXcqIHZpZXcgPSBzdGF0aWNfY2FzdDxQ
bHVnaW5WaWV3Kj4oaW5zdGFuY2UtPm5kYXRhKTsKKyAgICBQbHVnaW5WaWV3UHJpdmF0ZSogdmll
d1ByaXZhdGUgPSB2aWV3LT5nZXRQcml2YXRlKCk7CisgICAgdmlld1ByaXZhdGUtPnVubG9ja1Jl
YWRGcm9udEJ1ZmZlcigpOworfQorCit2b2lkIHN3YXBCdWZmZXJzKE5QUCBpbnN0YW5jZSkKK3sK
KyAgICBQbHVnaW5WaWV3KiB2aWV3ID0gc3RhdGljX2Nhc3Q8UGx1Z2luVmlldyo+KGluc3RhbmNl
LT5uZGF0YSk7CisgICAgUGx1Z2luVmlld1ByaXZhdGUqIHZpZXdQcml2YXRlID0gdmlldy0+Z2V0
UHJpdmF0ZSgpOworICAgIHZpZXdQcml2YXRlLT5zd2FwQnVmZmVycygpOworfQorCitib29sIGNy
ZWF0ZUJ1ZmZlcnMoTlBQIGluc3RhbmNlLCBOUFN1cmZhY2VGb3JtYXQgZm9ybWF0LCBpbnQgd2lk
dGgsIGludCBoZWlnaHQpCit7CisgICAgUGx1Z2luVmlldyogdmlldyA9IHN0YXRpY19jYXN0PFBs
dWdpblZpZXcqPihpbnN0YW5jZS0+bmRhdGEpOworICAgIFBsdWdpblZpZXdQcml2YXRlKiB2aWV3
UHJpdmF0ZSA9IHZpZXctPmdldFByaXZhdGUoKTsKKyAgICByZXR1cm4gdmlld1ByaXZhdGUtPmNy
ZWF0ZUJ1ZmZlcnMoZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKK30KKworYm9vbCBkZXN0cm95QnVm
ZmVycyhOUFAgaW5zdGFuY2UpCit7CisgICAgUGx1Z2luVmlldyogdmlldyA9IHN0YXRpY19jYXN0
PFBsdWdpblZpZXcqPihpbnN0YW5jZS0+bmRhdGEpOworICAgIFBsdWdpblZpZXdQcml2YXRlKiB2
aWV3UHJpdmF0ZSA9IHZpZXctPmdldFByaXZhdGUoKTsKKyAgICByZXR1cm4gdmlld1ByaXZhdGUt
PmRlc3Ryb3lCdWZmZXJzKCk7Cit9CisKK2Jvb2wgcmVzaXplQnVmZmVycyhOUFAgaW5zdGFuY2Us
IE5QU3VyZmFjZUZvcm1hdCBmb3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKyAgICBQ
bHVnaW5WaWV3KiB2aWV3ID0gc3RhdGljX2Nhc3Q8UGx1Z2luVmlldyo+KGluc3RhbmNlLT5uZGF0
YSk7CisgICAgUGx1Z2luVmlld1ByaXZhdGUqIHZpZXdQcml2YXRlID0gdmlldy0+Z2V0UHJpdmF0
ZSgpOworICAgIHJldHVybiB2aWV3UHJpdmF0ZS0+cmVzaXplQnVmZmVycyhmb3JtYXQsIHdpZHRo
LCBoZWlnaHQpOworfQorCit2b2lkIHNldEhvbGVQdW5jaChOUFAgaW5zdGFuY2UsIGludCB4LCBp
bnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworICAgIFBsdWdpblZpZXcqIHZpZXcgPSBz
dGF0aWNfY2FzdDxQbHVnaW5WaWV3Kj4oaW5zdGFuY2UtPm5kYXRhKTsKKyAgICBQbHVnaW5WaWV3
UHJpdmF0ZSogdmlld1ByaXZhdGUgPSB2aWV3LT5nZXRQcml2YXRlKCk7CisgICAgdmlld1ByaXZh
dGUtPnNldEhvbGVQdW5jaCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKK30KKworTlBDYWxsYmFja3Mg
c19OcENhbGxiYWNrcyA9IHsKKyAgICBzZXRWaXNpYmxlUmVjdHMsCisgICAgY2xlYXJWaXNpYmxl
UmVjdHMsCisgICAgc2hvd0tleWJvYXJkLAorICAgIHJlcXVlc3RGdWxsU2NyZWVuLAorICAgIGV4
aXRGdWxsU2NyZWVuLAorICAgIHJlcXVlc3RDZW50ZXJGaXRab29tLAorICAgIGxvY2tPcmllbnRh
dGlvbiwKKyAgICB1bmxvY2tPcmllbnRhdGlvbiwKKyAgICBwcmV2ZW50SWRsZSwKKyAgICBsb2Nr
QmFja0J1ZmZlciwKKyAgICB1bmxvY2tCYWNrQnVmZmVyLAorICAgIGxvY2tSZWFkRnJvbnRCdWZm
ZXIsCisgICAgdW5sb2NrUmVhZEZyb250QnVmZmVyLAorICAgIHN3YXBCdWZmZXJzLAorICAgIGNy
ZWF0ZUJ1ZmZlcnMsCisgICAgZGVzdHJveUJ1ZmZlcnMsCisgICAgcmVzaXplQnVmZmVycywKKyAg
ICBzZXRIb2xlUHVuY2gKK307CisKK30gLy8gTmFtZXNwYWNlIFdlYkNvcmUKKwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGx1Z2lucy9ibGFja2JlcnJ5L05QQ2FsbGJhY2tzQmxhY2tCZXJyeS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvYmxhY2tiZXJyeS9OUENhbGxiYWNr
c0JsYWNrQmVycnkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvYmxh
Y2tiZXJyeS9OUENhbGxiYWNrc0JsYWNrQmVycnkuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRl
ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBG
cmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaWZuZGVmIE5Q
Q2FsbGJhY2tzQmxhY2tCZXJyeV9oCisjZGVmaW5lIE5QQ2FsbGJhY2tzQmxhY2tCZXJyeV9oCisK
KyNpbmNsdWRlIDxQbHVnaW5WaWV3Lmg+CisjaW5jbHVkZSA8cHRocmVhZC5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK3N0cnVjdCBQdGhyZWFkTXV0ZXhMb2NrZXIgeworICAgIFB0aHJlYWRN
dXRleExvY2tlcihwdGhyZWFkX211dGV4X3QqKTsKKyAgICB+UHRocmVhZE11dGV4TG9ja2VyKCk7
CisKKyAgICBwdGhyZWFkX211dGV4X3QqIG1fbXV0ZXg7Cit9OworCitzdHJ1Y3QgUHRocmVhZFJl
YWRMb2NrZXIgeworICAgIFB0aHJlYWRSZWFkTG9ja2VyKHB0aHJlYWRfcndsb2NrX3QqKTsKKyAg
ICB+UHRocmVhZFJlYWRMb2NrZXIoKTsKKworICAgIHB0aHJlYWRfcndsb2NrX3QqIG1fcndsb2Nr
OworfTsKKworc3RydWN0IFB0aHJlYWRXcml0ZUxvY2tlciB7CisgICAgUHRocmVhZFdyaXRlTG9j
a2VyKHB0aHJlYWRfcndsb2NrX3QqKTsKKyAgICB+UHRocmVhZFdyaXRlTG9ja2VyKCk7CisKKyAg
ICBwdGhyZWFkX3J3bG9ja190KiBtX3J3bG9jazsKK307CisKKyNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCitzdHJ1Y3QgSG9sZVB1bmNoRGF0YSB7CisgICAgaW50IHgsIHk7CisgICAg
aW50IHcsIGg7CisgICAgUmVmUHRyPFBsYXRmb3JtTGF5ZXI+IGxheWVyOworfTsKKwordm9pZCBu
cFNldEhvbGVQdW5jaEhhbmRsZXIodm9pZCogaG9sZVB1bmNoRGF0YSk7CisjZW5kaWYKKworLy8g
U3RhdGljIE5QQVBJIENhbGxiYWNrcworCit2b2lkIHNldFZpc2libGVSZWN0cyhOUFAgaW5zdGFu
Y2UsIGNvbnN0IE5QUmVjdCByZWN0c1tdLCBpbnQzMl90IGNvdW50KTsKK3ZvaWQgY2xlYXJWaXNp
YmxlUmVjdHMoTlBQIGluc3RhbmNlKTsKK3ZvaWQgc2hvd0tleWJvYXJkKE5QUCBpbnN0YW5jZSwg
Ym9vbCB2YWx1ZSk7Cit2b2lkIHJlcXVlc3RGdWxsU2NyZWVuKE5QUCBpbnN0YW5jZSk7Cit2b2lk
IGV4aXRGdWxsU2NyZWVuKE5QUCBpbnN0YW5jZSk7Cit2b2lkIHJlcXVlc3RDZW50ZXJGaXRab29t
KE5QUCBpbnN0YW5jZSk7Cit2b2lkIGxvY2tPcmllbnRhdGlvbihOUFAgaW5zdGFuY2UsIGJvb2wg
bGFuZHNjYXBlKTsKK3ZvaWQgdW5sb2NrT3JpZW50YXRpb24oTlBQIGluc3RhbmNlKTsKK3ZvaWQg
cHJldmVudElkbGUoTlBQIGluc3RhbmNlLCBib29sIHByZXZlbnRJZGxlKTsKK05QU3VyZmFjZSBs
b2NrQmFja0J1ZmZlcihOUFAgaW5zdGFuY2UpOwordm9pZCB1bmxvY2tCYWNrQnVmZmVyKE5QUCBp
bnN0YW5jZSk7CitOUFN1cmZhY2UgbG9ja1JlYWRGcm9udEJ1ZmZlcihOUFAgaW5zdGFuY2UpOwor
dm9pZCB1bmxvY2tSZWFkRnJvbnRCdWZmZXIoTlBQIGluc3RhbmNlKTsKK3ZvaWQgc3dhcEJ1ZmZl
cnMoTlBQIGluc3RhbmNlKTsKK2Jvb2wgY3JlYXRlQnVmZmVycyhOUFAgaW5zdGFuY2UsIE5QU3Vy
ZmFjZUZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKK2Jvb2wgZGVzdHJveUJ1ZmZlcnMo
TlBQIGluc3RhbmNlKTsKK2Jvb2wgcmVzaXplQnVmZmVycyhOUFAgaW5zdGFuY2UsIE5QU3VyZmFj
ZUZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKK3ZvaWQgc2V0SG9sZVB1bmNoKE5QUCBp
bnN0YW5jZSwgaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpOworCitleHRlcm4g
TlBDYWxsYmFja3Mgc19OcENhbGxiYWNrczsKKworfSAvLyBOYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvYmxhY2tiZXJyeS9QbHVnaW5WaWV3
UHJpdmF0ZUJsYWNrQmVycnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdp
bnMvYmxhY2tiZXJyeS9QbHVnaW5WaWV3UHJpdmF0ZUJsYWNrQmVycnkuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ibGFja2JlcnJ5L1BsdWdpblZpZXdQcml2YXRl
QmxhY2tCZXJyeS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzc1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAq
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rv
biwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJQbHVnaW5WaWV3UHJpdmF0ZUJsYWNrQmVycnkuaCIKKworI2luY2x1ZGUgIkZyYW1lVmll
dy5oIgorI2luY2x1ZGUgIkhvc3RXaW5kb3cuaCIKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCisjaW5jbHVkZSAiUGx1Z2luTGF5ZXJXZWJLaXRUaHJlYWQuaCIKKyNlbmRpZgorI2lu
Y2x1ZGUgIk5QQ2FsbGJhY2tzQmxhY2tCZXJyeS5oIgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFk
Lmg+CisKK3N0YXRpYyB1bnNpZ25lZCBzX2NvdW50ZXIgPSAwOworCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK1BsdWdpblZpZXdQcml2YXRlOjpQbHVnaW5WaWV3UHJpdmF0ZShQbHVnaW5WaWV3KiB2
aWV3KQorICAgIDogbV92aWV3KHZpZXcpCisgICAgLCBtX3BsdWdpbkJ1ZmZlclR5cGUoQmxhY2tC
ZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpQbHVnaW5CdWZmZXJXaXRoQWxwaGEpCisgICAgLCBt
X3BsdWdpbkZyb250QnVmZmVyKDApCisgICAgLCBtX2lkbGVQcmV2ZW50ZWQoZmFsc2UpCisgICAg
LCBtX2hhc1BlbmRpbmdHZW9tZXRyeUNoYW5nZSh0cnVlKQorICAgICwgbV9zZW50T25Mb2FkKGZh
bHNlKQorICAgICwgbV9pc0Z1bGxTY3JlZW4oZmFsc2UpCisgICAgLCBtX2lzRm9jdXNlZChmYWxz
ZSkKKyAgICAsIG1fb3JpZW50YXRpb25Mb2NrZWQoZmFsc2UpCisgICAgLCBtX2lzQmFja2dyb3Vu
ZFBsYXlpbmcoZmFsc2UpCit7CisgICAgbV9wbHVnaW5CdWZmZXJzWzBdID0gMDsKKyAgICBtX3Bs
dWdpbkJ1ZmZlcnNbMV0gPSAwOworCisgICAgcHRocmVhZF9tdXRleGF0dHJfdCBtdXRleEF0dHJp
YnV0ZXM7CisgICAgcHRocmVhZF9tdXRleGF0dHJfaW5pdCgmbXV0ZXhBdHRyaWJ1dGVzKTsKKyAg
ICBwdGhyZWFkX211dGV4YXR0cl9zZXR0eXBlKCZtdXRleEF0dHJpYnV0ZXMsIFBUSFJFQURfTVVU
RVhfUkVDVVJTSVZFKTsKKworICAgIHB0aHJlYWRfbXV0ZXhfaW5pdCgmbV9iYWNrQnVmZmVyTXV0
ZXgsICZtdXRleEF0dHJpYnV0ZXMpOworICAgIHB0aHJlYWRfcndsb2NrX2luaXQoJm1fZnJvbnRC
dWZmZXJSd0xvY2ssIDApOworCisgICAgcHRocmVhZF9tdXRleGF0dHJfZGVzdHJveSgmbXV0ZXhB
dHRyaWJ1dGVzKTsKKworICAgIGNoYXIgdW5pcXVlSWRbNTBdOworICAgIHNucHJpbnRmKHVuaXF1
ZUlkLCBzaXplb2YodW5pcXVlSWQpLCAiUGx1Z2luVmlld0JCLSUwOHglMDh4LSIsIHNfY291bnRl
cisrLCAoaW50KXRoaXMpOworICAgIG1fcGx1Z2luVW5pcXVlUHJlZml4ID0gdW5pcXVlSWQ7Cit9
CisKK1BsdWdpblZpZXdQcml2YXRlOjp+UGx1Z2luVmlld1ByaXZhdGUoKQoreworI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICAgICAgaWYgKG1fcGxhdGZvcm1MYXllcikKKyAg
ICAgICAgICAgIHN0YXRpY19jYXN0PFBsdWdpbkxheWVyV2ViS2l0VGhyZWFkKj4obV9wbGF0Zm9y
bUxheWVyLmdldCgpKS0+c2V0UGx1Z2luVmlldygwKTsKKyNlbmRpZgorCisgICAgZGVzdHJveUJ1
ZmZlcnMoKTsKKworICAgIHB0aHJlYWRfbXV0ZXhfZGVzdHJveSgmbV9iYWNrQnVmZmVyTXV0ZXgp
OworICAgIHB0aHJlYWRfcndsb2NrX2Rlc3Ryb3koJm1fZnJvbnRCdWZmZXJSd0xvY2spOworfQor
CitCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkJ1ZmZlclR5cGUgUGx1Z2luVmlld1By
aXZhdGU6OnRvQnVmZmVyVHlwZShOUFN1cmZhY2VGb3JtYXQgZm9ybWF0KQoreworICAgIHN3aXRj
aCAoZm9ybWF0KSB7CisgICAgY2FzZSBGT1JNQVRfUkdCXzU2NToKKyAgICAgICAgcmV0dXJuIEJs
YWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6UGx1Z2luQnVmZmVyOworICAgIGNhc2UgRk9S
TUFUX1JHQkFfODg4ODoKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gQmxhY2tCZXJyeTo6
UGxhdGZvcm06OkdyYXBoaWNzOjpQbHVnaW5CdWZmZXJXaXRoQWxwaGE7CisgICAgfQorfQorCit2
b2lkIFBsdWdpblZpZXdQcml2YXRlOjpzZXRab29tRmFjdG9yKGZsb2F0IHpvb21GYWN0b3IpCit7
CisgICAgaWYgKCgoTlBTZXRXaW5kb3dDYWxsYmFja1N0cnVjdCopbV92aWV3LT5tX25wV2luZG93
LndzX2luZm8pLT56b29tRmFjdG9yICE9IHpvb21GYWN0b3IpCisgICAgICAgIG1faGFzUGVuZGlu
Z0dlb21ldHJ5Q2hhbmdlID0gdHJ1ZTsKKworICAgICgoTlBTZXRXaW5kb3dDYWxsYmFja1N0cnVj
dCopbV92aWV3LT5tX25wV2luZG93LndzX2luZm8pLT56b29tRmFjdG9yID0gem9vbUZhY3RvcjsK
K30KKwordm9pZCBQbHVnaW5WaWV3UHJpdmF0ZTo6c2V0VmlzaWJsZVJlY3RzKGNvbnN0IE5QUmVj
dCByZWN0c1tdLCBpbnQzMl90IGNvdW50KQoreworICAgIG1fa2VlcFZpc2libGVSZWN0ID0gSW50
UmVjdCgpOworCisgICAgaWYgKCFtX3ZpZXctPnBhcmVudCgpIHx8ICFjb3VudCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAg
IEludFJlY3QgYWRkUmVjdCA9IEludFJlY3QocmVjdHNbaV0ubGVmdCwgcmVjdHNbaV0udG9wLCBy
ZWN0c1tpXS5yaWdodCAtIHJlY3RzW2ldLmxlZnQsIHJlY3RzW2ldLmJvdHRvbSAtIHJlY3RzW2ld
LnRvcCk7CisgICAgICAgIG1fa2VlcFZpc2libGVSZWN0LnVuaXRlKGFkZFJlY3QpOworICAgIH0K
KworICAgIC8vIERvbid0IGNhdXNlIGEgcG9zc2libGUgc2Nyb2xsIGlmIHRoZSByZXN1bHQgaXMg
YW4gZW1wdHkgcmVjdGFuZ2xlLgorICAgIGlmIChtX2tlZXBWaXNpYmxlUmVjdC5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIC8vIEFkanVzdCB0aGUgcmVjdCB0byB0aGUgcGFyZW50
IHdpbmRvdyBhbmQgdGhlbiBhZGp1c3QgZm9yIHNjcm9sbGluZy4KKyAgICBtX2tlZXBWaXNpYmxl
UmVjdCA9IG1fdmlldy0+Y29udmVydFRvQ29udGFpbmluZ1dpbmRvdyhtX2tlZXBWaXNpYmxlUmVj
dCk7CisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPiht
X3ZpZXctPnBhcmVudCgpKTsKKyAgICBtX2tlZXBWaXNpYmxlUmVjdC5tb3ZlKGZyYW1lVmlldy0+
c2Nyb2xsUG9zaXRpb24oKS54KCksIGZyYW1lVmlldy0+c2Nyb2xsUG9zaXRpb24oKS55KCkpOwor
CisgICAgZnJhbWVWaWV3LT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpLT5lbnN1
cmVDb250ZW50VmlzaWJsZSgpOworfQorCit2b2lkIFBsdWdpblZpZXdQcml2YXRlOjpjbGVhclZp
c2libGVSZWN0cygpCit7CisgICAgaWYgKCFtX2tlZXBWaXNpYmxlUmVjdC5pc0VtcHR5KCkpCisg
ICAgICAgIHNldFZpc2libGVSZWN0cygwLCAwKTsKK30KKwordm9pZCBQbHVnaW5WaWV3UHJpdmF0
ZTo6c2hvd0tleWJvYXJkKGJvb2wgdmFsdWUpCit7CisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcg
PSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihtX3ZpZXctPnBhcmVudCgpKTsKKyAgICBmcmFtZVZp
ZXctPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCktPnNob3dWaXJ0dWFsS2V5Ym9h
cmQodmFsdWUpOworfQorCit2b2lkIFBsdWdpblZpZXdQcml2YXRlOjpyZXF1ZXN0RnVsbFNjcmVl
bigpCit7CisgICAgaWYgKEZyYW1lVmlldyogZnJhbWVWaWV3ID0gc3RhdGljX2Nhc3Q8RnJhbWVW
aWV3Kj4obV92aWV3LT5wYXJlbnQoKSkpCisgICAgICAgIGlmIChmcmFtZVZpZXctPmhvc3RXaW5k
b3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCktPnNob3VsZFBsdWdpbkVudGVyRnVsbFNjcmVlbiht
X3ZpZXcsIG1fcGx1Z2luVW5pcXVlUHJlZml4LmNfc3RyKCkpKQorICAgICAgICAgICAgbV92aWV3
LT5oYW5kbGVGdWxsU2NyZWVuQWxsb3dlZEV2ZW50KCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld1By
aXZhdGU6OmV4aXRGdWxsU2NyZWVuKCkKK3sKKyAgICBtX3ZpZXctPmhhbmRsZUZ1bGxTY3JlZW5F
eGl0RXZlbnQoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3UHJpdmF0ZTo6cmVxdWVzdENlbnRlckZp
dFpvb20oKQoreworICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gc3RhdGljX2Nhc3Q8RnJhbWVW
aWV3Kj4obV92aWV3LT5wYXJlbnQoKSk7CisKKyAgICBpZiAoIWZyYW1lVmlldykKKyAgICAgICAg
cmV0dXJuOworCisgICAgZnJhbWVWaWV3LT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVu
dCgpLT56b29tVG9Db250ZW50UmVjdChtX3ZpZXctPm1fd2luZG93UmVjdCk7Cit9CisKK3ZvaWQg
UGx1Z2luVmlld1ByaXZhdGU6OmxvY2tPcmllbnRhdGlvbihib29sIGxhbmRzY2FwZSkKK3sKKyAg
ICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KG1fdmlldy0+
cGFyZW50KCkpOworCisgICAgaWYgKCFmcmFtZVZpZXcpCisgICAgICAgIHJldHVybjsKKworICAg
IGZyYW1lVmlldy0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKS0+bG9ja09yaWVu
dGF0aW9uKGxhbmRzY2FwZSk7CisgICAgbV9vcmllbnRhdGlvbkxvY2tlZCA9IHRydWU7Cit9CisK
K3ZvaWQgUGx1Z2luVmlld1ByaXZhdGU6OnVubG9ja09yaWVudGF0aW9uKCkKK3sKKyAgICBpZiAo
IW1fb3JpZW50YXRpb25Mb2NrZWQpCisgICAgICAgIHJldHVybjsKKworICAgIEZyYW1lVmlldyog
ZnJhbWVWaWV3ID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4obV92aWV3LT5wYXJlbnQoKSk7CisK
KyAgICBpZiAoIWZyYW1lVmlldykKKyAgICAgICAgcmV0dXJuOworCisgICAgZnJhbWVWaWV3LT5o
b3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpLT51bmxvY2tPcmllbnRhdGlvbigpOwor
ICAgIG1fb3JpZW50YXRpb25Mb2NrZWQgPSBmYWxzZTsKK30KKwordm9pZCBQbHVnaW5WaWV3UHJp
dmF0ZTo6cHJldmVudElkbGUoYm9vbCBwcmV2ZW50SWRsZSkKK3sKKyAgICBGcmFtZVZpZXcqIGZy
YW1lVmlldyA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KG1fdmlldy0+cGFyZW50KCkpOworCisg
ICAgaWYgKHByZXZlbnRJZGxlID09IG1faWRsZVByZXZlbnRlZCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKCFmcmFtZVZpZXcpCisgICAgICAgIHJldHVybjsKKworICAgIGZyYW1lVmlldy0+
aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKS0+c2V0UHJldmVudHNTY3JlZW5EaW1t
aW5nKHByZXZlbnRJZGxlKTsKKyAgICBtX2lkbGVQcmV2ZW50ZWQgPSBwcmV2ZW50SWRsZTsKK30K
Kwordm9pZCBQbHVnaW5WaWV3UHJpdmF0ZTo6c2V0SG9sZVB1bmNoKGludCB4LCBpbnQgeSwgaW50
IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworICAgIGlmICh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCkK
KyAgICAgICAgbV9ob2xlUHVuY2hSZWN0ID0gSW50UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsK
KyAgICBlbHNlCisgICAgICAgIG1faG9sZVB1bmNoUmVjdCA9IEludFJlY3QoKTsKKworICAgIC8v
IENsaXAgdGhlIGhvbGUgcHVuY2ggcmVjdGFuZ2xlIGluIGNhc2UgYSBwbHVnaW4gaXMgJ292ZXJ6
ZWFsb3VzJywgb3IgCisgICAgLy8gZG9lcyBub3QgY2xlYW4gdXAgdGhlIGhvbGUgcHVuY2ggcmVj
dGFuZ2xlIGNvcnJlY3RseSB3aGVuIGV4aXRpbmcgCisgICAgLy8gZnVsbHNjcmVlbiAod2lsbCBt
YXNrIGJ1Z3MgaW4gdGhlIHBsdWdpbikuCisgICAgbV9ob2xlUHVuY2hSZWN0LmludGVyc2VjdChJ
bnRSZWN0KEludFBvaW50KDAsIDApLCBtX3ZpZXctPmZyYW1lUmVjdCgpLnNpemUoKSkpOworCisj
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIGlmIChtX3BsYXRmb3JtTGF5ZXIp
IHsKKyAgICAgICAgSW50UmVjdCByZWN0ID0gbV9ob2xlUHVuY2hSZWN0OworCisgICAgICAgIC8v
IFRyYW5zbGF0ZSBmcm9tIHBsdWdpbiBjb29yZGluYXRlcyB0byBjb250ZW50cyBjb29yZGluYXRl
cy4KKyAgICAgICAgaWYgKCFtX2hvbGVQdW5jaFJlY3QuaXNFbXB0eSgpKQorICAgICAgICAgICAg
cmVjdC5tb3ZlKG1fdmlldy0+ZnJhbWVSZWN0KCkueCgpLCBtX3ZpZXctPmZyYW1lUmVjdCgpLnko
KSk7CisKKyAgICAgICAgT3duUHRyPEhvbGVQdW5jaERhdGE+IGhwID0gYWRvcHRQdHIobmV3IEhv
bGVQdW5jaERhdGEpOworICAgICAgICBocC0+eCA9IG1faG9sZVB1bmNoUmVjdC54KCk7CisgICAg
ICAgIGhwLT55ID0gbV9ob2xlUHVuY2hSZWN0LnkoKTsKKyAgICAgICAgaHAtPncgPSBtX2hvbGVQ
dW5jaFJlY3Qud2lkdGgoKTsKKyAgICAgICAgaHAtPmggPSBtX2hvbGVQdW5jaFJlY3QuaGVpZ2h0
KCk7CisgICAgICAgIGhwLT5sYXllciA9IG1fcGxhdGZvcm1MYXllcjsKKworICAgICAgICAvLyBO
b3RpZnkgY29tcG9zaXRpbmcgbGF5ZXIgYW5kIHBhZ2UgY2xpZW50IGluIG9yZGVyIHRvIGJlIGFi
bGUgdG8KKyAgICAgICAgLy8gcHVuY2ggdGhyb3VnaCBjb21wb3NpdGVkIGFuZCBub24tY29tcG9z
aXRlZCBwYXJ0cyBvZiB0aGUgcGFnZS4KKyAgICAgICAgY2FsbE9uTWFpblRocmVhZChucFNldEhv
bGVQdW5jaEhhbmRsZXIsIGhwLmxlYWtQdHIoKSk7IC8vIG5wU2V0SG9sZVB1bmNoSGFuZGxlcigp
IHRha2VzIG93bmVyc2hpcCBvZiBocC4KKyAgICB9CisjZW5kaWYKK30KKworTlBTdXJmYWNlIFBs
dWdpblZpZXdQcml2YXRlOjpsb2NrQmFja0J1ZmZlcigpCit7CisgICAgcHRocmVhZF9tdXRleF9s
b2NrKCZtX2JhY2tCdWZmZXJNdXRleCk7CisgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBo
aWNzOjpCdWZmZXIqIGJ1ZmZlciA9IG1fcGx1Z2luQnVmZmVyc1sobV9wbHVnaW5Gcm9udEJ1ZmZl
ciArIDEpICUgUExVR0lOX0JVRkZFUlNdOworCisgICAgaWYgKCFidWZmZXIgfHwgIUJsYWNrQmVy
cnk6OlBsYXRmb3JtOjpHcmFwaGljczo6cGxhdGZvcm1CdWZmZXJIYW5kbGUoYnVmZmVyKSkgewor
ICAgICAgICB1bmxvY2tCYWNrQnVmZmVyKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKwor
ICAgIHJldHVybiBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OnBsYXRmb3JtQnVmZmVy
SGFuZGxlKGJ1ZmZlcik7Cit9CisKK3ZvaWQgUGx1Z2luVmlld1ByaXZhdGU6OnVubG9ja0JhY2tC
dWZmZXIoKQoreworICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZtX2JhY2tCdWZmZXJNdXRleCk7
Cit9CisKK0JsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6QnVmZmVyKiBQbHVnaW5WaWV3
UHJpdmF0ZTo6bG9ja1JlYWRGcm9udEJ1ZmZlckludGVybmFsKCkKK3sKKyAgICBwdGhyZWFkX3J3
bG9ja19yZGxvY2soJm1fZnJvbnRCdWZmZXJSd0xvY2spOworICAgIHJldHVybiBtX3BsdWdpbkJ1
ZmZlcnNbbV9wbHVnaW5Gcm9udEJ1ZmZlcl07Cit9CisKK05QU3VyZmFjZSBQbHVnaW5WaWV3UHJp
dmF0ZTo6bG9ja1JlYWRGcm9udEJ1ZmZlcigpCit7CisgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06
OkdyYXBoaWNzOjpCdWZmZXIqIGJ1ZmZlciA9IGxvY2tSZWFkRnJvbnRCdWZmZXJJbnRlcm5hbCgp
OworCisgICAgaWYgKCFidWZmZXIgfHwgIUJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6
cGxhdGZvcm1CdWZmZXJIYW5kbGUoYnVmZmVyKSkgeworICAgICAgICB1bmxvY2tSZWFkRnJvbnRC
dWZmZXIoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJuIEJsYWNrQmVy
cnk6OlBsYXRmb3JtOjpHcmFwaGljczo6cGxhdGZvcm1CdWZmZXJIYW5kbGUoYnVmZmVyKTsKK30K
Kwordm9pZCBQbHVnaW5WaWV3UHJpdmF0ZTo6dW5sb2NrUmVhZEZyb250QnVmZmVyKCkKK3sKKyAg
ICBwdGhyZWFkX3J3bG9ja191bmxvY2soJm1fZnJvbnRCdWZmZXJSd0xvY2spOworfQorCit2b2lk
IFBsdWdpblZpZXdQcml2YXRlOjpzd2FwQnVmZmVycygpCit7CisgICAgUHRocmVhZE11dGV4TG9j
a2VyIGJhY2tMb2NrKCZtX2JhY2tCdWZmZXJNdXRleCk7CisgICAgUHRocmVhZFdyaXRlTG9ja2Vy
IGZyb250TG9jaygmbV9mcm9udEJ1ZmZlclJ3TG9jayk7CisgICAgbV9wbHVnaW5Gcm9udEJ1ZmZl
ciA9IChtX3BsdWdpbkZyb250QnVmZmVyICsgMSkgJSAyOworfQorCitib29sIFBsdWdpblZpZXdQ
cml2YXRlOjpjcmVhdGVCdWZmZXJzKE5QU3VyZmFjZUZvcm1hdCBmb3JtYXQsIGludCB3aWR0aCwg
aW50IGhlaWdodCkKK3sKKyAgICBib29sIHN1Y2Nlc3MgPSB0cnVlOworCisgICAgUHRocmVhZE11
dGV4TG9ja2VyIGJhY2tMb2NrKCZtX2JhY2tCdWZmZXJNdXRleCk7CisgICAgUHRocmVhZFdyaXRl
TG9ja2VyIGZyb250TG9jaygmbV9mcm9udEJ1ZmZlclJ3TG9jayk7CisKKyAgICBmb3IgKGludCBp
ID0gMDsgaSA8IFBMVUdJTl9CVUZGRVJTOyBpKyspIHsKKyAgICAgICAgaWYgKG1fcGx1Z2luQnVm
ZmVyc1tpXSkgeworICAgICAgICAgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpk
ZXN0cm95QnVmZmVyKG1fcGx1Z2luQnVmZmVyc1tpXSk7CisgICAgICAgICAgICBtX3BsdWdpbkJ1
ZmZlcnNbaV0gPSAwOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHdpZHRoIDw9IDAgfHwgaGVp
Z2h0IDw9IDApCisgICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKKyAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICBtX3BsdWdpbkJ1ZmZlcnNbaV0gPSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3Jh
cGhpY3M6OmNyZWF0ZUJ1ZmZlcigKKyAgICAgICAgICAgICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9y
bTo6SW50U2l6ZSh3aWR0aCwgaGVpZ2h0KSwKKyAgICAgICAgICAgICAgICB0b0J1ZmZlclR5cGUo
Zm9ybWF0KSk7CisKKyAgICAgICAgICAgIGlmICghbV9wbHVnaW5CdWZmZXJzW2ldKQorICAgICAg
ICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChz
dWNjZXNzKSB7CisgICAgICAgIG1fcGx1Z2luQnVmZmVyU2l6ZSA9IEludFNpemUod2lkdGgsIGhl
aWdodCk7CisgICAgICAgIG1fcGx1Z2luQnVmZmVyVHlwZSA9IHRvQnVmZmVyVHlwZShmb3JtYXQp
OworICAgIH0gZWxzZSB7CisgICAgICAgIG1fcGx1Z2luQnVmZmVyU2l6ZSA9IEludFNpemUoKTsK
KyAgICAgICAgbV9wbHVnaW5CdWZmZXJUeXBlID0gQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBo
aWNzOjpQbHVnaW5CdWZmZXJXaXRoQWxwaGE7CisgICAgICAgIGRlc3Ryb3lCdWZmZXJzKCk7Cisg
ICAgfQorCisgICAgcmV0dXJuIHN1Y2Nlc3M7Cit9CisKK2Jvb2wgUGx1Z2luVmlld1ByaXZhdGU6
OnJlc2l6ZUJ1ZmZlcnMoTlBTdXJmYWNlRm9ybWF0IGZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVp
Z2h0KQoreworICAgIGJvb2wgc3VjY2VzcyA9IHRydWU7CisKKyAgICAvLyBJZiB0aGVyZSBpcyBu
byBidWZmZXIgY3JlYXRlZCwgdGhlbiB0cnkgdG8gY3JlYXRlIGl0LgorICAgIGlmICghbV9wbHVn
aW5CdWZmZXJTaXplLndpZHRoKCkgfHwgIW1fcGx1Z2luQnVmZmVyU2l6ZS5oZWlnaHQoKSkKKyAg
ICAgICAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcnMoZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKKworICAg
IGlmICghd2lkdGggfHwgIWhlaWdodCkKKyAgICAgICAgcmV0dXJuIGRlc3Ryb3lCdWZmZXJzKCk7
CisKKyAgICBQdGhyZWFkTXV0ZXhMb2NrZXIgYmFja0xvY2soJm1fYmFja0J1ZmZlck11dGV4KTsK
KyAgICBQdGhyZWFkV3JpdGVMb2NrZXIgZnJvbnRMb2NrKCZtX2Zyb250QnVmZmVyUndMb2NrKTsK
KworICAgIGZvciAoaW50IGkgPSAwOyAoaSA8IFBMVUdJTl9CVUZGRVJTKSAmJiBzdWNjZXNzOyBp
KyspIHsKKyAgICAgICAgc3VjY2VzcyAmPSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6
OnJlYWxsb2NCdWZmZXIobV9wbHVnaW5CdWZmZXJzW2ldLAorICAgICAgICAgICAgQmxhY2tCZXJy
eTo6UGxhdGZvcm06OkludFNpemUod2lkdGgsIGhlaWdodCksCisgICAgICAgICAgICB0b0J1ZmZl
clR5cGUoZm9ybWF0KSk7CisgICAgfQorCisgICAgaWYgKHN1Y2Nlc3MpIHsKKyAgICAgICAgbV9w
bHVnaW5CdWZmZXJTaXplID0gSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgbV9wbHVn
aW5CdWZmZXJUeXBlID0gdG9CdWZmZXJUeXBlKGZvcm1hdCk7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICAgIC8vIEF0dGVtcHQgdG8gdW5kbyBpZiB3ZSBmYWlsZWQgdG8gZ2V0IHRo
ZSBuZXcgc2l6ZS9mb3JtYXQuIFdlIGNhbid0IGd1YXJhbnRlZQorICAgIC8vIHdlIHdpbGwgZ2V0
IGl0IGJhY2sgdGhvdWdoLgorICAgIGlmICghbV9wbHVnaW5CdWZmZXJTaXplLndpZHRoKCkgfHwg
IW1fcGx1Z2luQnVmZmVyU2l6ZS5oZWlnaHQoKSkgeworICAgICAgICBkZXN0cm95QnVmZmVycygp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYm9vbCB1bmRvbmUgPSB0cnVl
OworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgUExVR0lOX0JVRkZFUlM7IGkrKykgeworICAgICAg
ICB1bmRvbmUgJj0gQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpyZWFsbG9jQnVmZmVy
KG1fcGx1Z2luQnVmZmVyc1tpXSwKKyAgICAgICAgICAgIG1fcGx1Z2luQnVmZmVyU2l6ZSwgbV9w
bHVnaW5CdWZmZXJUeXBlKTsKKyAgICB9CisKKyAgICAvLyBJZiB3ZSBmYWlsIHRvIHVuZG8sIGRl
bGV0ZSB0aGUgYnVmZmVycyBhbHRvZ2V0aGVyLgorICAgIGlmICghdW5kb25lKQorICAgICAgICBk
ZXN0cm95QnVmZmVycygpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFBsdWdpblZp
ZXdQcml2YXRlOjpkZXN0cm95QnVmZmVycygpCit7CisgICAgUHRocmVhZE11dGV4TG9ja2VyIGJh
Y2tMb2NrKCZtX2JhY2tCdWZmZXJNdXRleCk7CisgICAgUHRocmVhZFdyaXRlTG9ja2VyIGZyb250
TG9jaygmbV9mcm9udEJ1ZmZlclJ3TG9jayk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IFBM
VUdJTl9CVUZGRVJTOyBpKyspIHsKKyAgICAgICAgaWYgKG1fcGx1Z2luQnVmZmVyc1tpXSkgewor
ICAgICAgICAgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpkZXN0cm95QnVmZmVy
KG1fcGx1Z2luQnVmZmVyc1tpXSk7CisgICAgICAgICAgICBtX3BsdWdpbkJ1ZmZlcnNbaV0gPSAw
OworICAgICAgICB9CisgICAgfQorICAgIG1fcGx1Z2luQnVmZmVyU2l6ZSA9IEludFNpemUoKTsK
KworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ibGFja2JlcnJ5L1BsdWdpblZpZXdQcml2YXRlQmxh
Y2tCZXJyeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvYmxhY2tiZXJy
eS9QbHVnaW5WaWV3UHJpdmF0ZUJsYWNrQmVycnkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsdWdpbnMvYmxhY2tiZXJyeS9QbHVnaW5WaWV3UHJpdmF0ZUJsYWNrQmVycnkuaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBS
ZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAx
ICBVU0EKKyAqLworCisjaWZuZGVmIFBsdWdpblZpZXdQcml2YXRlQmxhY2tCZXJyeV9oCisjZGVm
aW5lIFBsdWdpblZpZXdQcml2YXRlQmxhY2tCZXJyeV9oCisKKyNpbmNsdWRlICJQbHVnaW5WaWV3
LmgiCisjaW5jbHVkZSA8cHRocmVhZC5oPgorCisjZGVmaW5lIFBMVUdJTl9CVUZGRVJTIDIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBQbHVnaW5WaWV3UHJpdmF0ZSB7CisKK3B1Ymxp
YzoKKyAgICBQbHVnaW5WaWV3UHJpdmF0ZShQbHVnaW5WaWV3Kik7CisgICAgflBsdWdpblZpZXdQ
cml2YXRlKCk7CisKKyAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkJ1ZmZlclR5
cGUgdG9CdWZmZXJUeXBlKE5QU3VyZmFjZUZvcm1hdCk7CisgICAgdm9pZCBzZXRab29tRmFjdG9y
KGZsb2F0KTsKKyAgICB2b2lkIHNldFZpc2libGVSZWN0cyhjb25zdCBOUFJlY3QgcmVjdHNbXSwg
aW50MzJfdCBjb3VudCk7CisgICAgdm9pZCBjbGVhclZpc2libGVSZWN0cygpOworICAgIHZvaWQg
c2hvd0tleWJvYXJkKGJvb2wgdmFsdWUpOworICAgIHZvaWQgcmVxdWVzdEZ1bGxTY3JlZW4oKTsK
KyAgICB2b2lkIGV4aXRGdWxsU2NyZWVuKCk7CisgICAgdm9pZCByZXF1ZXN0Q2VudGVyRml0Wm9v
bSgpOworICAgIHZvaWQgbG9ja09yaWVudGF0aW9uKGJvb2wgbGFuZHNjYXBlKTsKKyAgICB2b2lk
IHVubG9ja09yaWVudGF0aW9uKCk7CisgICAgdm9pZCBwcmV2ZW50SWRsZShib29sIHByZXZlbnRJ
ZGxlKTsKKyAgICB2b2lkIHNldEhvbGVQdW5jaChpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50
IGhlaWdodCk7CisgICAgTlBTdXJmYWNlIGxvY2tCYWNrQnVmZmVyKCk7CisgICAgdm9pZCB1bmxv
Y2tCYWNrQnVmZmVyKCk7CisgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpCdWZm
ZXIqIGxvY2tSZWFkRnJvbnRCdWZmZXJJbnRlcm5hbCgpOworICAgIE5QU3VyZmFjZSBsb2NrUmVh
ZEZyb250QnVmZmVyKCk7CisgICAgdm9pZCB1bmxvY2tSZWFkRnJvbnRCdWZmZXIoKTsKKyAgICB2
b2lkIHN3YXBCdWZmZXJzKCk7CisgICAgYm9vbCBjcmVhdGVCdWZmZXJzKE5QU3VyZmFjZUZvcm1h
dCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKKyAgICBib29sIHJlc2l6ZUJ1ZmZlcnMoTlBTdXJm
YWNlRm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpOworICAgIGJvb2wgZGVzdHJveUJ1ZmZl
cnMoKTsKKworcHJpdmF0ZToKKyAgICBQbHVnaW5WaWV3KiBtX3ZpZXc7CisgICAgcHRocmVhZF9t
dXRleF90IG1fYmFja0J1ZmZlck11dGV4OworICAgIHB0aHJlYWRfcndsb2NrX3QgbV9mcm9udEJ1
ZmZlclJ3TG9jazsKKworICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6QnVmZmVy
KiBtX3BsdWdpbkJ1ZmZlcnNbUExVR0lOX0JVRkZFUlNdOworICAgIEludFNpemUgbV9wbHVnaW5C
dWZmZXJTaXplOworICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6QnVmZmVyVHlw
ZSBtX3BsdWdpbkJ1ZmZlclR5cGU7CisgICAgaW50IG1fcGx1Z2luRnJvbnRCdWZmZXI7CisKKyAg
ICBJbnRSZWN0IG1faG9sZVB1bmNoUmVjdDsKKyAgICBJbnRSZWN0IG1fa2VlcFZpc2libGVSZWN0
OworCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIFJlZlB0cjxQbGF0Zm9y
bUxheWVyPiBtX3BsYXRmb3JtTGF5ZXI7CisjZW5kaWYKKworICAgIGJvb2wgbV9pZGxlUHJldmVu
dGVkOworICAgIGJvb2wgbV9oYXNQZW5kaW5nR2VvbWV0cnlDaGFuZ2U7CisgICAgYm9vbCBtX3Nl
bnRPbkxvYWQ7CisgICAgYm9vbCBtX2lzRnVsbFNjcmVlbjsKKyAgICBib29sIG1faXNGb2N1c2Vk
OworICAgIGJvb2wgbV9vcmllbnRhdGlvbkxvY2tlZDsKKyAgICBib29sIG1faXNCYWNrZ3JvdW5k
UGxheWluZzsKKworICAgIHN0ZDo6c3RyaW5nIG1fcGx1Z2luVW5pcXVlUHJlZml4OworCisgICAg
QmxhY2tCZXJyeTo6UGxhdGZvcm06OkludFJlY3RSZWdpb24gbV9pbnZhbGlkYXRlUmVnaW9uOwor
ICAgIGZyaWVuZCBjbGFzcyBQbHVnaW5WaWV3OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117318</attachid>
            <date>2011-11-30 20:35:21 -0800</date>
            <delta_ts>2011-11-30 21:27:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73513-20111201123556.patch</filename>
            <type>text/plain</type>
            <size>25842</size>
            <attacher name="Charles Wei">charles.wei</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMTU5NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDExLTExLTMwICBXZWkgQ2hh
cmxlcyAgPGNoYXJsZXMud2VpQHRvcmNobW9iaWxlLmNvbS5jbj4KKworICAgICAgICBbQmxhY2ti
ZXJyeV0gVXBzdHJlYW0gQmxhY2tCZXJyeSBwb3J0aW5nIG9mIHBsdWdpbiBmcmFtZXdvcmsgLS0g
cGFydCAyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
MzUxMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cyBmb3Igbm93LgorCisgICAgICAgICogcGx1Z2lucy9ibGFja2JlcnJ5L05QQ2Fs
bGJhY2tzQmxhY2tCZXJyeS5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsdWdpbnMvYmxhY2tiZXJy
eS9OUENhbGxiYWNrc0JsYWNrQmVycnkuaDogQWRkZWQuCisgICAgICAgICogcGx1Z2lucy9ibGFj
a2JlcnJ5L1BsdWdpblZpZXdQcml2YXRlQmxhY2tCZXJyeS5jcHA6IEFkZGVkLgorICAgICAgICAq
IHBsdWdpbnMvYmxhY2tiZXJyeS9QbHVnaW5WaWV3UHJpdmF0ZUJsYWNrQmVycnkuaDogQWRkZWQu
CisKIDIwMTEtMTEtMzAgIFRha2FzaGkgVG95b3NoaW1hICA8dG95b3NoaW1AY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIEFkZCBPVkVSUklERSB0byBXZWJTb2NrZXQgcmVsYXRlZCBzb3VyY2VzIGZv
ciBzYWZlIGluaGVyaXRhbmNlcy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvYmxhY2ti
ZXJyeS9OUENhbGxiYWNrc0JsYWNrQmVycnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsdWdpbnMvYmxhY2tiZXJyeS9OUENhbGxiYWNrc0JsYWNrQmVycnkuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ibGFja2JlcnJ5L05QQ2FsbGJhY2tzQmxh
Y2tCZXJyeS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjIyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDExIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rvbiwg
TUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJOUENhbGxiYWNrc0JsYWNrQmVycnkuaCIKKworI2luY2x1ZGUgIlBsdWdpblZpZXdQcml2YXRl
QmxhY2tCZXJyeS5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorI2luY2x1
ZGUgIlBsdWdpbkxheWVyV2ViS2l0VGhyZWFkLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitQdGhyZWFkTXV0ZXhMb2NrZXI6OlB0aHJlYWRNdXRleExvY2tlcihwdGhyZWFkX211
dGV4X3QqIG11dGV4KQorICAgIDogbV9tdXRleChtdXRleCkKK3sKKyAgICBwdGhyZWFkX211dGV4
X2xvY2sobV9tdXRleCk7Cit9CisKK1B0aHJlYWRNdXRleExvY2tlcjo6flB0aHJlYWRNdXRleExv
Y2tlcigpCit7CisgICAgcHRocmVhZF9tdXRleF91bmxvY2sobV9tdXRleCk7Cit9CisKK1B0aHJl
YWRSZWFkTG9ja2VyOjpQdGhyZWFkUmVhZExvY2tlcihwdGhyZWFkX3J3bG9ja190KiByd2xvY2sp
CisgICAgOiBtX3J3bG9jayhyd2xvY2spCit7CisgICAgcHRocmVhZF9yd2xvY2tfcmRsb2NrKG1f
cndsb2NrKTsKK30KKworUHRocmVhZFJlYWRMb2NrZXI6On5QdGhyZWFkUmVhZExvY2tlcigpCit7
CisgICAgcHRocmVhZF9yd2xvY2tfdW5sb2NrKG1fcndsb2NrKTsKK30KKworUHRocmVhZFdyaXRl
TG9ja2VyOjpQdGhyZWFkV3JpdGVMb2NrZXIocHRocmVhZF9yd2xvY2tfdCogcndsb2NrKQorICAg
IDogbV9yd2xvY2socndsb2NrKQoreworICAgIHB0aHJlYWRfcndsb2NrX3dybG9jayhtX3J3bG9j
ayk7Cit9CisKK1B0aHJlYWRXcml0ZUxvY2tlcjo6flB0aHJlYWRXcml0ZUxvY2tlcigpCit7Cisg
ICAgcHRocmVhZF9yd2xvY2tfdW5sb2NrKG1fcndsb2NrKTsKK30KKworI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKK3ZvaWQgbnBTZXRIb2xlUHVuY2hIYW5kbGVyKHZvaWQqIGhvbGVQ
dW5jaERhdGEpCit7CisgICAgT3duUHRyPEhvbGVQdW5jaERhdGE+IGRhdGEgPSBhZG9wdFB0cihz
dGF0aWNfY2FzdDxIb2xlUHVuY2hEYXRhKj4oaG9sZVB1bmNoRGF0YSkpOworICAgIGlmIChkYXRh
LT5sYXllcikKKyAgICAgICAgZGF0YS0+bGF5ZXItPnNldEhvbGVQdW5jaFJlY3QoSW50UmVjdChk
YXRhLT54LCBkYXRhLT55LCBkYXRhLT53LCBkYXRhLT5oKSk7Cit9CisjZW5kaWYKKworLy8gTlBB
UEkgY2FsbGJhY2sgZnVuY3Rpb25zCisKK3ZvaWQgc2V0VmlzaWJsZVJlY3RzKE5QUCBpbnN0YW5j
ZSwgY29uc3QgTlBSZWN0IHJlY3RzW10sIGludDMyX3QgY291bnQpCit7CisgICAgUGx1Z2luVmll
dyogdmlldyA9IHN0YXRpY19jYXN0PFBsdWdpblZpZXcqPihpbnN0YW5jZS0+bmRhdGEpOworICAg
IFBsdWdpblZpZXdQcml2YXRlKiB2aWV3UHJpdmF0ZSA9IHZpZXctPmdldFByaXZhdGUoKTsKKyAg
ICB2aWV3UHJpdmF0ZS0+c2V0VmlzaWJsZVJlY3RzKHJlY3RzLCBjb3VudCk7Cit9CisKK3ZvaWQg
Y2xlYXJWaXNpYmxlUmVjdHMoTlBQIGluc3RhbmNlKQoreworICAgIFBsdWdpblZpZXcqIHZpZXcg
PSBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3Kj4oaW5zdGFuY2UtPm5kYXRhKTsKKyAgICBQbHVnaW5W
aWV3UHJpdmF0ZSogdmlld1ByaXZhdGUgPSB2aWV3LT5nZXRQcml2YXRlKCk7CisgICAgdmlld1By
aXZhdGUtPmNsZWFyVmlzaWJsZVJlY3RzKCk7Cit9CisKK3ZvaWQgc2hvd0tleWJvYXJkKE5QUCBp
bnN0YW5jZSwgYm9vbCB2YWx1ZSkKK3sKKyAgICBQbHVnaW5WaWV3KiB2aWV3ID0gc3RhdGljX2Nh
c3Q8UGx1Z2luVmlldyo+KGluc3RhbmNlLT5uZGF0YSk7CisgICAgUGx1Z2luVmlld1ByaXZhdGUq
IHZpZXdQcml2YXRlID0gdmlldy0+Z2V0UHJpdmF0ZSgpOworICAgIHZpZXdQcml2YXRlLT5zaG93
S2V5Ym9hcmQodmFsdWUpOworfQorCit2b2lkIHJlcXVlc3RGdWxsU2NyZWVuKE5QUCBpbnN0YW5j
ZSkKK3sKKyAgICBQbHVnaW5WaWV3KiB2aWV3ID0gc3RhdGljX2Nhc3Q8UGx1Z2luVmlldyo+KGlu
c3RhbmNlLT5uZGF0YSk7CisgICAgUGx1Z2luVmlld1ByaXZhdGUqIHZpZXdQcml2YXRlID0gdmll
dy0+Z2V0UHJpdmF0ZSgpOworICAgIHZpZXdQcml2YXRlLT5yZXF1ZXN0RnVsbFNjcmVlbigpOwor
fQorCit2b2lkIGV4aXRGdWxsU2NyZWVuKE5QUCBpbnN0YW5jZSkKK3sKKyAgICBQbHVnaW5WaWV3
KiB2aWV3ID0gc3RhdGljX2Nhc3Q8UGx1Z2luVmlldyo+KGluc3RhbmNlLT5uZGF0YSk7CisgICAg
UGx1Z2luVmlld1ByaXZhdGUqIHZpZXdQcml2YXRlID0gdmlldy0+Z2V0UHJpdmF0ZSgpOworICAg
IHZpZXdQcml2YXRlLT5leGl0RnVsbFNjcmVlbigpOworfQorCit2b2lkIHJlcXVlc3RDZW50ZXJG
aXRab29tKE5QUCBpbnN0YW5jZSkKK3sKKyAgICBQbHVnaW5WaWV3KiB2aWV3ID0gc3RhdGljX2Nh
c3Q8UGx1Z2luVmlldyo+KGluc3RhbmNlLT5uZGF0YSk7CisgICAgUGx1Z2luVmlld1ByaXZhdGUq
IHZpZXdQcml2YXRlID0gdmlldy0+Z2V0UHJpdmF0ZSgpOworICAgIHZpZXdQcml2YXRlLT5yZXF1
ZXN0Q2VudGVyRml0Wm9vbSgpOworfQorCit2b2lkIGxvY2tPcmllbnRhdGlvbihOUFAgaW5zdGFu
Y2UsIGJvb2wgbGFuZHNjYXBlKQoreworICAgIFBsdWdpblZpZXcqIHZpZXcgPSBzdGF0aWNfY2Fz
dDxQbHVnaW5WaWV3Kj4oaW5zdGFuY2UtPm5kYXRhKTsKKyAgICBQbHVnaW5WaWV3UHJpdmF0ZSog
dmlld1ByaXZhdGUgPSB2aWV3LT5nZXRQcml2YXRlKCk7CisgICAgdmlld1ByaXZhdGUtPmxvY2tP
cmllbnRhdGlvbihsYW5kc2NhcGUpOworfQorCit2b2lkIHVubG9ja09yaWVudGF0aW9uKE5QUCBp
bnN0YW5jZSkKK3sKKyAgICBQbHVnaW5WaWV3KiB2aWV3ID0gc3RhdGljX2Nhc3Q8UGx1Z2luVmll
dyo+KGluc3RhbmNlLT5uZGF0YSk7CisgICAgUGx1Z2luVmlld1ByaXZhdGUqIHZpZXdQcml2YXRl
ID0gdmlldy0+Z2V0UHJpdmF0ZSgpOworICAgIHZpZXdQcml2YXRlLT51bmxvY2tPcmllbnRhdGlv
bigpOworfQorCit2b2lkIHByZXZlbnRJZGxlKE5QUCBpbnN0YW5jZSwgYm9vbCBwcmV2ZW50SWRs
ZSkKK3sKKyAgICBQbHVnaW5WaWV3KiB2aWV3ID0gc3RhdGljX2Nhc3Q8UGx1Z2luVmlldyo+KGlu
c3RhbmNlLT5uZGF0YSk7CisgICAgUGx1Z2luVmlld1ByaXZhdGUqIHZpZXdQcml2YXRlID0gdmll
dy0+Z2V0UHJpdmF0ZSgpOworICAgIHZpZXdQcml2YXRlLT5wcmV2ZW50SWRsZShwcmV2ZW50SWRs
ZSk7Cit9CisKK05QU3VyZmFjZSBsb2NrQmFja0J1ZmZlcihOUFAgaW5zdGFuY2UpCit7CisgICAg
UGx1Z2luVmlldyogdmlldyA9IHN0YXRpY19jYXN0PFBsdWdpblZpZXcqPihpbnN0YW5jZS0+bmRh
dGEpOworICAgIFBsdWdpblZpZXdQcml2YXRlKiB2aWV3UHJpdmF0ZSA9IHZpZXctPmdldFByaXZh
dGUoKTsKKyAgICByZXR1cm4gdmlld1ByaXZhdGUtPmxvY2tCYWNrQnVmZmVyKCk7Cit9CisKK3Zv
aWQgdW5sb2NrQmFja0J1ZmZlcihOUFAgaW5zdGFuY2UpCit7CisgICAgUGx1Z2luVmlldyogdmll
dyA9IHN0YXRpY19jYXN0PFBsdWdpblZpZXcqPihpbnN0YW5jZS0+bmRhdGEpOworICAgIFBsdWdp
blZpZXdQcml2YXRlKiB2aWV3UHJpdmF0ZSA9IHZpZXctPmdldFByaXZhdGUoKTsKKyAgICB2aWV3
UHJpdmF0ZS0+dW5sb2NrQmFja0J1ZmZlcigpOworfQorCitOUFN1cmZhY2UgbG9ja1JlYWRGcm9u
dEJ1ZmZlcihOUFAgaW5zdGFuY2UpCit7CisgICAgUGx1Z2luVmlldyogdmlldyA9IHN0YXRpY19j
YXN0PFBsdWdpblZpZXcqPihpbnN0YW5jZS0+bmRhdGEpOworICAgIFBsdWdpblZpZXdQcml2YXRl
KiB2aWV3UHJpdmF0ZSA9IHZpZXctPmdldFByaXZhdGUoKTsKKyAgICByZXR1cm4gdmlld1ByaXZh
dGUtPmxvY2tSZWFkRnJvbnRCdWZmZXIoKTsKK30KKwordm9pZCB1bmxvY2tSZWFkRnJvbnRCdWZm
ZXIoTlBQIGluc3RhbmNlKQoreworICAgIFBsdWdpblZpZXcqIHZpZXcgPSBzdGF0aWNfY2FzdDxQ
bHVnaW5WaWV3Kj4oaW5zdGFuY2UtPm5kYXRhKTsKKyAgICBQbHVnaW5WaWV3UHJpdmF0ZSogdmll
d1ByaXZhdGUgPSB2aWV3LT5nZXRQcml2YXRlKCk7CisgICAgdmlld1ByaXZhdGUtPnVubG9ja1Jl
YWRGcm9udEJ1ZmZlcigpOworfQorCit2b2lkIHN3YXBCdWZmZXJzKE5QUCBpbnN0YW5jZSkKK3sK
KyAgICBQbHVnaW5WaWV3KiB2aWV3ID0gc3RhdGljX2Nhc3Q8UGx1Z2luVmlldyo+KGluc3RhbmNl
LT5uZGF0YSk7CisgICAgUGx1Z2luVmlld1ByaXZhdGUqIHZpZXdQcml2YXRlID0gdmlldy0+Z2V0
UHJpdmF0ZSgpOworICAgIHZpZXdQcml2YXRlLT5zd2FwQnVmZmVycygpOworfQorCitib29sIGNy
ZWF0ZUJ1ZmZlcnMoTlBQIGluc3RhbmNlLCBOUFN1cmZhY2VGb3JtYXQgZm9ybWF0LCBpbnQgd2lk
dGgsIGludCBoZWlnaHQpCit7CisgICAgUGx1Z2luVmlldyogdmlldyA9IHN0YXRpY19jYXN0PFBs
dWdpblZpZXcqPihpbnN0YW5jZS0+bmRhdGEpOworICAgIFBsdWdpblZpZXdQcml2YXRlKiB2aWV3
UHJpdmF0ZSA9IHZpZXctPmdldFByaXZhdGUoKTsKKyAgICByZXR1cm4gdmlld1ByaXZhdGUtPmNy
ZWF0ZUJ1ZmZlcnMoZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKK30KKworYm9vbCBkZXN0cm95QnVm
ZmVycyhOUFAgaW5zdGFuY2UpCit7CisgICAgUGx1Z2luVmlldyogdmlldyA9IHN0YXRpY19jYXN0
PFBsdWdpblZpZXcqPihpbnN0YW5jZS0+bmRhdGEpOworICAgIFBsdWdpblZpZXdQcml2YXRlKiB2
aWV3UHJpdmF0ZSA9IHZpZXctPmdldFByaXZhdGUoKTsKKyAgICByZXR1cm4gdmlld1ByaXZhdGUt
PmRlc3Ryb3lCdWZmZXJzKCk7Cit9CisKK2Jvb2wgcmVzaXplQnVmZmVycyhOUFAgaW5zdGFuY2Us
IE5QU3VyZmFjZUZvcm1hdCBmb3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKyAgICBQ
bHVnaW5WaWV3KiB2aWV3ID0gc3RhdGljX2Nhc3Q8UGx1Z2luVmlldyo+KGluc3RhbmNlLT5uZGF0
YSk7CisgICAgUGx1Z2luVmlld1ByaXZhdGUqIHZpZXdQcml2YXRlID0gdmlldy0+Z2V0UHJpdmF0
ZSgpOworICAgIHJldHVybiB2aWV3UHJpdmF0ZS0+cmVzaXplQnVmZmVycyhmb3JtYXQsIHdpZHRo
LCBoZWlnaHQpOworfQorCit2b2lkIHNldEhvbGVQdW5jaChOUFAgaW5zdGFuY2UsIGludCB4LCBp
bnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworICAgIFBsdWdpblZpZXcqIHZpZXcgPSBz
dGF0aWNfY2FzdDxQbHVnaW5WaWV3Kj4oaW5zdGFuY2UtPm5kYXRhKTsKKyAgICBQbHVnaW5WaWV3
UHJpdmF0ZSogdmlld1ByaXZhdGUgPSB2aWV3LT5nZXRQcml2YXRlKCk7CisgICAgdmlld1ByaXZh
dGUtPnNldEhvbGVQdW5jaCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKK30KKworTlBDYWxsYmFja3Mg
c19OcENhbGxiYWNrcyA9IHsKKyAgICBzZXRWaXNpYmxlUmVjdHMsCisgICAgY2xlYXJWaXNpYmxl
UmVjdHMsCisgICAgc2hvd0tleWJvYXJkLAorICAgIHJlcXVlc3RGdWxsU2NyZWVuLAorICAgIGV4
aXRGdWxsU2NyZWVuLAorICAgIHJlcXVlc3RDZW50ZXJGaXRab29tLAorICAgIGxvY2tPcmllbnRh
dGlvbiwKKyAgICB1bmxvY2tPcmllbnRhdGlvbiwKKyAgICBwcmV2ZW50SWRsZSwKKyAgICBsb2Nr
QmFja0J1ZmZlciwKKyAgICB1bmxvY2tCYWNrQnVmZmVyLAorICAgIGxvY2tSZWFkRnJvbnRCdWZm
ZXIsCisgICAgdW5sb2NrUmVhZEZyb250QnVmZmVyLAorICAgIHN3YXBCdWZmZXJzLAorICAgIGNy
ZWF0ZUJ1ZmZlcnMsCisgICAgZGVzdHJveUJ1ZmZlcnMsCisgICAgcmVzaXplQnVmZmVycywKKyAg
ICBzZXRIb2xlUHVuY2gKK307CisKK30gLy8gTmFtZXNwYWNlIFdlYkNvcmUKKwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGx1Z2lucy9ibGFja2JlcnJ5L05QQ2FsbGJhY2tzQmxhY2tCZXJyeS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvYmxhY2tiZXJyeS9OUENhbGxiYWNr
c0JsYWNrQmVycnkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvYmxh
Y2tiZXJyeS9OUENhbGxiYWNrc0JsYWNrQmVycnkuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRl
ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBG
cmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaWZuZGVmIE5Q
Q2FsbGJhY2tzQmxhY2tCZXJyeV9oCisjZGVmaW5lIE5QQ2FsbGJhY2tzQmxhY2tCZXJyeV9oCisK
KyNpbmNsdWRlIDxQbHVnaW5WaWV3Lmg+CisjaW5jbHVkZSA8cHRocmVhZC5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK3N0cnVjdCBQdGhyZWFkTXV0ZXhMb2NrZXIgeworICAgIFB0aHJlYWRN
dXRleExvY2tlcihwdGhyZWFkX211dGV4X3QqKTsKKyAgICB+UHRocmVhZE11dGV4TG9ja2VyKCk7
CisKKyAgICBwdGhyZWFkX211dGV4X3QqIG1fbXV0ZXg7Cit9OworCitzdHJ1Y3QgUHRocmVhZFJl
YWRMb2NrZXIgeworICAgIFB0aHJlYWRSZWFkTG9ja2VyKHB0aHJlYWRfcndsb2NrX3QqKTsKKyAg
ICB+UHRocmVhZFJlYWRMb2NrZXIoKTsKKworICAgIHB0aHJlYWRfcndsb2NrX3QqIG1fcndsb2Nr
OworfTsKKworc3RydWN0IFB0aHJlYWRXcml0ZUxvY2tlciB7CisgICAgUHRocmVhZFdyaXRlTG9j
a2VyKHB0aHJlYWRfcndsb2NrX3QqKTsKKyAgICB+UHRocmVhZFdyaXRlTG9ja2VyKCk7CisKKyAg
ICBwdGhyZWFkX3J3bG9ja190KiBtX3J3bG9jazsKK307CisKKyNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCitzdHJ1Y3QgSG9sZVB1bmNoRGF0YSB7CisgICAgaW50IHgsIHk7CisgICAg
aW50IHcsIGg7CisgICAgUmVmUHRyPFBsYXRmb3JtTGF5ZXI+IGxheWVyOworfTsKKwordm9pZCBu
cFNldEhvbGVQdW5jaEhhbmRsZXIodm9pZCogaG9sZVB1bmNoRGF0YSk7CisjZW5kaWYKKworLy8g
U3RhdGljIE5QQVBJIENhbGxiYWNrcworCit2b2lkIHNldFZpc2libGVSZWN0cyhOUFAsIGNvbnN0
IE5QUmVjdCByZWN0c1tdLCBpbnQzMl90IGNvdW50KTsKK3ZvaWQgY2xlYXJWaXNpYmxlUmVjdHMo
TlBQKTsKK3ZvaWQgc2hvd0tleWJvYXJkKE5QUCwgYm9vbCB2YWx1ZSk7Cit2b2lkIHJlcXVlc3RG
dWxsU2NyZWVuKE5QUCk7Cit2b2lkIGV4aXRGdWxsU2NyZWVuKE5QUCk7Cit2b2lkIHJlcXVlc3RD
ZW50ZXJGaXRab29tKE5QUCk7Cit2b2lkIGxvY2tPcmllbnRhdGlvbihOUFAsIGJvb2wgbGFuZHNj
YXBlKTsKK3ZvaWQgdW5sb2NrT3JpZW50YXRpb24oTlBQKTsKK3ZvaWQgcHJldmVudElkbGUoTlBQ
LCBib29sIHByZXZlbnRJZGxlKTsKK05QU3VyZmFjZSBsb2NrQmFja0J1ZmZlcihOUFApOwordm9p
ZCB1bmxvY2tCYWNrQnVmZmVyKE5QUCk7CitOUFN1cmZhY2UgbG9ja1JlYWRGcm9udEJ1ZmZlcihO
UFApOwordm9pZCB1bmxvY2tSZWFkRnJvbnRCdWZmZXIoTlBQKTsKK3ZvaWQgc3dhcEJ1ZmZlcnMo
TlBQKTsKK2Jvb2wgY3JlYXRlQnVmZmVycyhOUFAsIE5QU3VyZmFjZUZvcm1hdCwgaW50IHdpZHRo
LCBpbnQgaGVpZ2h0KTsKK2Jvb2wgZGVzdHJveUJ1ZmZlcnMoTlBQKTsKK2Jvb2wgcmVzaXplQnVm
ZmVycyhOUFAsIE5QU3VyZmFjZUZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKK3ZvaWQg
c2V0SG9sZVB1bmNoKE5QUCwgaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpOwor
CitleHRlcm4gTlBDYWxsYmFja3Mgc19OcENhbGxiYWNrczsKKworfSAvLyBOYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvYmxhY2tiZXJyeS9Q
bHVnaW5WaWV3UHJpdmF0ZUJsYWNrQmVycnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsdWdpbnMvYmxhY2tiZXJyeS9QbHVnaW5WaWV3UHJpdmF0ZUJsYWNrQmVycnkuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ibGFja2JlcnJ5L1BsdWdpblZp
ZXdQcml2YXRlQmxhY2tCZXJyeS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzc1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDExIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m
dHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJQbHVnaW5WaWV3UHJpdmF0ZUJsYWNrQmVycnkuaCIKKworI2luY2x1ZGUg
IkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkhvc3RXaW5kb3cuaCIKKyNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCisjaW5jbHVkZSAiUGx1Z2luTGF5ZXJXZWJLaXRUaHJlYWQuaCIKKyNl
bmRpZgorI2luY2x1ZGUgIk5QQ2FsbGJhY2tzQmxhY2tCZXJyeS5oIgorI2luY2x1ZGUgPHd0Zi9N
YWluVGhyZWFkLmg+CisKK3N0YXRpYyB1bnNpZ25lZCBzX2NvdW50ZXIgPSAwOworCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK1BsdWdpblZpZXdQcml2YXRlOjpQbHVnaW5WaWV3UHJpdmF0ZShQbHVn
aW5WaWV3KiB2aWV3KQorICAgIDogbV92aWV3KHZpZXcpCisgICAgLCBtX3BsdWdpbkJ1ZmZlclR5
cGUoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpQbHVnaW5CdWZmZXJXaXRoQWxwaGEp
CisgICAgLCBtX3BsdWdpbkZyb250QnVmZmVyKDApCisgICAgLCBtX2lkbGVQcmV2ZW50ZWQoZmFs
c2UpCisgICAgLCBtX2hhc1BlbmRpbmdHZW9tZXRyeUNoYW5nZSh0cnVlKQorICAgICwgbV9zZW50
T25Mb2FkKGZhbHNlKQorICAgICwgbV9pc0Z1bGxTY3JlZW4oZmFsc2UpCisgICAgLCBtX2lzRm9j
dXNlZChmYWxzZSkKKyAgICAsIG1fb3JpZW50YXRpb25Mb2NrZWQoZmFsc2UpCisgICAgLCBtX2lz
QmFja2dyb3VuZFBsYXlpbmcoZmFsc2UpCit7CisgICAgbV9wbHVnaW5CdWZmZXJzWzBdID0gMDsK
KyAgICBtX3BsdWdpbkJ1ZmZlcnNbMV0gPSAwOworCisgICAgcHRocmVhZF9tdXRleGF0dHJfdCBt
dXRleEF0dHJpYnV0ZXM7CisgICAgcHRocmVhZF9tdXRleGF0dHJfaW5pdCgmbXV0ZXhBdHRyaWJ1
dGVzKTsKKyAgICBwdGhyZWFkX211dGV4YXR0cl9zZXR0eXBlKCZtdXRleEF0dHJpYnV0ZXMsIFBU
SFJFQURfTVVURVhfUkVDVVJTSVZFKTsKKworICAgIHB0aHJlYWRfbXV0ZXhfaW5pdCgmbV9iYWNr
QnVmZmVyTXV0ZXgsICZtdXRleEF0dHJpYnV0ZXMpOworICAgIHB0aHJlYWRfcndsb2NrX2luaXQo
Jm1fZnJvbnRCdWZmZXJSd0xvY2ssIDApOworCisgICAgcHRocmVhZF9tdXRleGF0dHJfZGVzdHJv
eSgmbXV0ZXhBdHRyaWJ1dGVzKTsKKworICAgIGNoYXIgdW5pcXVlSWRbNTBdOworICAgIHNucHJp
bnRmKHVuaXF1ZUlkLCBzaXplb2YodW5pcXVlSWQpLCAiUGx1Z2luVmlld0JCLSUwOHglMDh4LSIs
IHNfY291bnRlcisrLCAoaW50KXRoaXMpOworICAgIG1fcGx1Z2luVW5pcXVlUHJlZml4ID0gdW5p
cXVlSWQ7Cit9CisKK1BsdWdpblZpZXdQcml2YXRlOjp+UGx1Z2luVmlld1ByaXZhdGUoKQorewor
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICAgICAgaWYgKG1fcGxhdGZvcm1M
YXllcikKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PFBsdWdpbkxheWVyV2ViS2l0VGhyZWFkKj4o
bV9wbGF0Zm9ybUxheWVyLmdldCgpKS0+c2V0UGx1Z2luVmlldygwKTsKKyNlbmRpZgorCisgICAg
ZGVzdHJveUJ1ZmZlcnMoKTsKKworICAgIHB0aHJlYWRfbXV0ZXhfZGVzdHJveSgmbV9iYWNrQnVm
ZmVyTXV0ZXgpOworICAgIHB0aHJlYWRfcndsb2NrX2Rlc3Ryb3koJm1fZnJvbnRCdWZmZXJSd0xv
Y2spOworfQorCitCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkJ1ZmZlclR5cGUgUGx1
Z2luVmlld1ByaXZhdGU6OnRvQnVmZmVyVHlwZShOUFN1cmZhY2VGb3JtYXQgZm9ybWF0KQorewor
ICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgY2FzZSBGT1JNQVRfUkdCXzU2NToKKyAgICAgICAg
cmV0dXJuIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6UGx1Z2luQnVmZmVyOworICAg
IGNhc2UgRk9STUFUX1JHQkFfODg4ODoKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gQmxh
Y2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpQbHVnaW5CdWZmZXJXaXRoQWxwaGE7CisgICAg
fQorfQorCit2b2lkIFBsdWdpblZpZXdQcml2YXRlOjpzZXRab29tRmFjdG9yKGZsb2F0IHpvb21G
YWN0b3IpCit7CisgICAgaWYgKCgoTlBTZXRXaW5kb3dDYWxsYmFja1N0cnVjdCopbV92aWV3LT5t
X25wV2luZG93LndzX2luZm8pLT56b29tRmFjdG9yICE9IHpvb21GYWN0b3IpCisgICAgICAgIG1f
aGFzUGVuZGluZ0dlb21ldHJ5Q2hhbmdlID0gdHJ1ZTsKKworICAgICgoTlBTZXRXaW5kb3dDYWxs
YmFja1N0cnVjdCopbV92aWV3LT5tX25wV2luZG93LndzX2luZm8pLT56b29tRmFjdG9yID0gem9v
bUZhY3RvcjsKK30KKwordm9pZCBQbHVnaW5WaWV3UHJpdmF0ZTo6c2V0VmlzaWJsZVJlY3RzKGNv
bnN0IE5QUmVjdCByZWN0c1tdLCBpbnQzMl90IGNvdW50KQoreworICAgIG1fa2VlcFZpc2libGVS
ZWN0ID0gSW50UmVjdCgpOworCisgICAgaWYgKCFtX3ZpZXctPnBhcmVudCgpIHx8ICFjb3VudCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7
CisgICAgICAgIEludFJlY3QgYWRkUmVjdCA9IEludFJlY3QocmVjdHNbaV0ubGVmdCwgcmVjdHNb
aV0udG9wLCByZWN0c1tpXS5yaWdodCAtIHJlY3RzW2ldLmxlZnQsIHJlY3RzW2ldLmJvdHRvbSAt
IHJlY3RzW2ldLnRvcCk7CisgICAgICAgIG1fa2VlcFZpc2libGVSZWN0LnVuaXRlKGFkZFJlY3Qp
OworICAgIH0KKworICAgIC8vIERvbid0IGNhdXNlIGEgcG9zc2libGUgc2Nyb2xsIGlmIHRoZSBy
ZXN1bHQgaXMgYW4gZW1wdHkgcmVjdGFuZ2xlLgorICAgIGlmIChtX2tlZXBWaXNpYmxlUmVjdC5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEFkanVzdCB0aGUgcmVjdCB0byB0
aGUgcGFyZW50IHdpbmRvdyBhbmQgdGhlbiBhZGp1c3QgZm9yIHNjcm9sbGluZy4KKyAgICBtX2tl
ZXBWaXNpYmxlUmVjdCA9IG1fdmlldy0+Y29udmVydFRvQ29udGFpbmluZ1dpbmRvdyhtX2tlZXBW
aXNpYmxlUmVjdCk7CisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBzdGF0aWNfY2FzdDxGcmFt
ZVZpZXcqPihtX3ZpZXctPnBhcmVudCgpKTsKKyAgICBtX2tlZXBWaXNpYmxlUmVjdC5tb3ZlKGZy
YW1lVmlldy0+c2Nyb2xsUG9zaXRpb24oKS54KCksIGZyYW1lVmlldy0+c2Nyb2xsUG9zaXRpb24o
KS55KCkpOworCisgICAgZnJhbWVWaWV3LT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVu
dCgpLT5lbnN1cmVDb250ZW50VmlzaWJsZSgpOworfQorCit2b2lkIFBsdWdpblZpZXdQcml2YXRl
OjpjbGVhclZpc2libGVSZWN0cygpCit7CisgICAgaWYgKCFtX2tlZXBWaXNpYmxlUmVjdC5pc0Vt
cHR5KCkpCisgICAgICAgIHNldFZpc2libGVSZWN0cygwLCAwKTsKK30KKwordm9pZCBQbHVnaW5W
aWV3UHJpdmF0ZTo6c2hvd0tleWJvYXJkKGJvb2wgdmFsdWUpCit7CisgICAgRnJhbWVWaWV3KiBm
cmFtZVZpZXcgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihtX3ZpZXctPnBhcmVudCgpKTsKKyAg
ICBmcmFtZVZpZXctPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCktPnNob3dWaXJ0
dWFsS2V5Ym9hcmQodmFsdWUpOworfQorCit2b2lkIFBsdWdpblZpZXdQcml2YXRlOjpyZXF1ZXN0
RnVsbFNjcmVlbigpCit7CisgICAgaWYgKEZyYW1lVmlldyogZnJhbWVWaWV3ID0gc3RhdGljX2Nh
c3Q8RnJhbWVWaWV3Kj4obV92aWV3LT5wYXJlbnQoKSkpCisgICAgICAgIGlmIChmcmFtZVZpZXct
Pmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCktPnNob3VsZFBsdWdpbkVudGVyRnVs
bFNjcmVlbihtX3ZpZXcsIG1fcGx1Z2luVW5pcXVlUHJlZml4LmNfc3RyKCkpKQorICAgICAgICAg
ICAgbV92aWV3LT5oYW5kbGVGdWxsU2NyZWVuQWxsb3dlZEV2ZW50KCk7Cit9CisKK3ZvaWQgUGx1
Z2luVmlld1ByaXZhdGU6OmV4aXRGdWxsU2NyZWVuKCkKK3sKKyAgICBtX3ZpZXctPmhhbmRsZUZ1
bGxTY3JlZW5FeGl0RXZlbnQoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3UHJpdmF0ZTo6cmVxdWVz
dENlbnRlckZpdFpvb20oKQoreworICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gc3RhdGljX2Nh
c3Q8RnJhbWVWaWV3Kj4obV92aWV3LT5wYXJlbnQoKSk7CisKKyAgICBpZiAoIWZyYW1lVmlldykK
KyAgICAgICAgcmV0dXJuOworCisgICAgZnJhbWVWaWV3LT5ob3N0V2luZG93KCktPnBsYXRmb3Jt
UGFnZUNsaWVudCgpLT56b29tVG9Db250ZW50UmVjdChtX3ZpZXctPm1fd2luZG93UmVjdCk7Cit9
CisKK3ZvaWQgUGx1Z2luVmlld1ByaXZhdGU6OmxvY2tPcmllbnRhdGlvbihib29sIGxhbmRzY2Fw
ZSkKK3sKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+
KG1fdmlldy0+cGFyZW50KCkpOworCisgICAgaWYgKCFmcmFtZVZpZXcpCisgICAgICAgIHJldHVy
bjsKKworICAgIGZyYW1lVmlldy0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKS0+
bG9ja09yaWVudGF0aW9uKGxhbmRzY2FwZSk7CisgICAgbV9vcmllbnRhdGlvbkxvY2tlZCA9IHRy
dWU7Cit9CisKK3ZvaWQgUGx1Z2luVmlld1ByaXZhdGU6OnVubG9ja09yaWVudGF0aW9uKCkKK3sK
KyAgICBpZiAoIW1fb3JpZW50YXRpb25Mb2NrZWQpCisgICAgICAgIHJldHVybjsKKworICAgIEZy
YW1lVmlldyogZnJhbWVWaWV3ID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4obV92aWV3LT5wYXJl
bnQoKSk7CisKKyAgICBpZiAoIWZyYW1lVmlldykKKyAgICAgICAgcmV0dXJuOworCisgICAgZnJh
bWVWaWV3LT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpLT51bmxvY2tPcmllbnRh
dGlvbigpOworICAgIG1fb3JpZW50YXRpb25Mb2NrZWQgPSBmYWxzZTsKK30KKwordm9pZCBQbHVn
aW5WaWV3UHJpdmF0ZTo6cHJldmVudElkbGUoYm9vbCBwcmV2ZW50SWRsZSkKK3sKKyAgICBGcmFt
ZVZpZXcqIGZyYW1lVmlldyA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KG1fdmlldy0+cGFyZW50
KCkpOworCisgICAgaWYgKHByZXZlbnRJZGxlID09IG1faWRsZVByZXZlbnRlZCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKCFmcmFtZVZpZXcpCisgICAgICAgIHJldHVybjsKKworICAgIGZy
YW1lVmlldy0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKS0+c2V0UHJldmVudHNT
Y3JlZW5EaW1taW5nKHByZXZlbnRJZGxlKTsKKyAgICBtX2lkbGVQcmV2ZW50ZWQgPSBwcmV2ZW50
SWRsZTsKK30KKwordm9pZCBQbHVnaW5WaWV3UHJpdmF0ZTo6c2V0SG9sZVB1bmNoKGludCB4LCBp
bnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworICAgIGlmICh3aWR0aCA+IDAgJiYgaGVp
Z2h0ID4gMCkKKyAgICAgICAgbV9ob2xlUHVuY2hSZWN0ID0gSW50UmVjdCh4LCB5LCB3aWR0aCwg
aGVpZ2h0KTsKKyAgICBlbHNlCisgICAgICAgIG1faG9sZVB1bmNoUmVjdCA9IEludFJlY3QoKTsK
KworICAgIC8vIENsaXAgdGhlIGhvbGUgcHVuY2ggcmVjdGFuZ2xlIGluIGNhc2UgYSBwbHVnaW4g
aXMgJ292ZXJ6ZWFsb3VzJywgb3IgCisgICAgLy8gZG9lcyBub3QgY2xlYW4gdXAgdGhlIGhvbGUg
cHVuY2ggcmVjdGFuZ2xlIGNvcnJlY3RseSB3aGVuIGV4aXRpbmcgCisgICAgLy8gZnVsbHNjcmVl
biAod2lsbCBtYXNrIGJ1Z3MgaW4gdGhlIHBsdWdpbikuCisgICAgbV9ob2xlUHVuY2hSZWN0Lmlu
dGVyc2VjdChJbnRSZWN0KEludFBvaW50KDAsIDApLCBtX3ZpZXctPmZyYW1lUmVjdCgpLnNpemUo
KSkpOworCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIGlmIChtX3BsYXRm
b3JtTGF5ZXIpIHsKKyAgICAgICAgSW50UmVjdCByZWN0ID0gbV9ob2xlUHVuY2hSZWN0OworCisg
ICAgICAgIC8vIFRyYW5zbGF0ZSBmcm9tIHBsdWdpbiBjb29yZGluYXRlcyB0byBjb250ZW50cyBj
b29yZGluYXRlcy4KKyAgICAgICAgaWYgKCFtX2hvbGVQdW5jaFJlY3QuaXNFbXB0eSgpKQorICAg
ICAgICAgICAgcmVjdC5tb3ZlKG1fdmlldy0+ZnJhbWVSZWN0KCkueCgpLCBtX3ZpZXctPmZyYW1l
UmVjdCgpLnkoKSk7CisKKyAgICAgICAgT3duUHRyPEhvbGVQdW5jaERhdGE+IGhwID0gYWRvcHRQ
dHIobmV3IEhvbGVQdW5jaERhdGEpOworICAgICAgICBocC0+eCA9IG1faG9sZVB1bmNoUmVjdC54
KCk7CisgICAgICAgIGhwLT55ID0gbV9ob2xlUHVuY2hSZWN0LnkoKTsKKyAgICAgICAgaHAtPncg
PSBtX2hvbGVQdW5jaFJlY3Qud2lkdGgoKTsKKyAgICAgICAgaHAtPmggPSBtX2hvbGVQdW5jaFJl
Y3QuaGVpZ2h0KCk7CisgICAgICAgIGhwLT5sYXllciA9IG1fcGxhdGZvcm1MYXllcjsKKworICAg
ICAgICAvLyBOb3RpZnkgY29tcG9zaXRpbmcgbGF5ZXIgYW5kIHBhZ2UgY2xpZW50IGluIG9yZGVy
IHRvIGJlIGFibGUgdG8KKyAgICAgICAgLy8gcHVuY2ggdGhyb3VnaCBjb21wb3NpdGVkIGFuZCBu
b24tY29tcG9zaXRlZCBwYXJ0cyBvZiB0aGUgcGFnZS4KKyAgICAgICAgY2FsbE9uTWFpblRocmVh
ZChucFNldEhvbGVQdW5jaEhhbmRsZXIsIGhwLmxlYWtQdHIoKSk7IC8vIG5wU2V0SG9sZVB1bmNo
SGFuZGxlcigpIHRha2VzIG93bmVyc2hpcCBvZiBocC4KKyAgICB9CisjZW5kaWYKK30KKworTlBT
dXJmYWNlIFBsdWdpblZpZXdQcml2YXRlOjpsb2NrQmFja0J1ZmZlcigpCit7CisgICAgcHRocmVh
ZF9tdXRleF9sb2NrKCZtX2JhY2tCdWZmZXJNdXRleCk7CisgICAgQmxhY2tCZXJyeTo6UGxhdGZv
cm06OkdyYXBoaWNzOjpCdWZmZXIqIGJ1ZmZlciA9IG1fcGx1Z2luQnVmZmVyc1sobV9wbHVnaW5G
cm9udEJ1ZmZlciArIDEpICUgUExVR0lOX0JVRkZFUlNdOworCisgICAgaWYgKCFidWZmZXIgfHwg
IUJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6cGxhdGZvcm1CdWZmZXJIYW5kbGUoYnVm
ZmVyKSkgeworICAgICAgICB1bmxvY2tCYWNrQnVmZmVyKCk7CisgICAgICAgIHJldHVybiAwOwor
ICAgIH0KKworICAgIHJldHVybiBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OnBsYXRm
b3JtQnVmZmVySGFuZGxlKGJ1ZmZlcik7Cit9CisKK3ZvaWQgUGx1Z2luVmlld1ByaXZhdGU6OnVu
bG9ja0JhY2tCdWZmZXIoKQoreworICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZtX2JhY2tCdWZm
ZXJNdXRleCk7Cit9CisKK0JsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6QnVmZmVyKiBQ
bHVnaW5WaWV3UHJpdmF0ZTo6bG9ja1JlYWRGcm9udEJ1ZmZlckludGVybmFsKCkKK3sKKyAgICBw
dGhyZWFkX3J3bG9ja19yZGxvY2soJm1fZnJvbnRCdWZmZXJSd0xvY2spOworICAgIHJldHVybiBt
X3BsdWdpbkJ1ZmZlcnNbbV9wbHVnaW5Gcm9udEJ1ZmZlcl07Cit9CisKK05QU3VyZmFjZSBQbHVn
aW5WaWV3UHJpdmF0ZTo6bG9ja1JlYWRGcm9udEJ1ZmZlcigpCit7CisgICAgQmxhY2tCZXJyeTo6
UGxhdGZvcm06OkdyYXBoaWNzOjpCdWZmZXIqIGJ1ZmZlciA9IGxvY2tSZWFkRnJvbnRCdWZmZXJJ
bnRlcm5hbCgpOworCisgICAgaWYgKCFidWZmZXIgfHwgIUJsYWNrQmVycnk6OlBsYXRmb3JtOjpH
cmFwaGljczo6cGxhdGZvcm1CdWZmZXJIYW5kbGUoYnVmZmVyKSkgeworICAgICAgICB1bmxvY2tS
ZWFkRnJvbnRCdWZmZXIoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJu
IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6cGxhdGZvcm1CdWZmZXJIYW5kbGUoYnVm
ZmVyKTsKK30KKwordm9pZCBQbHVnaW5WaWV3UHJpdmF0ZTo6dW5sb2NrUmVhZEZyb250QnVmZmVy
KCkKK3sKKyAgICBwdGhyZWFkX3J3bG9ja191bmxvY2soJm1fZnJvbnRCdWZmZXJSd0xvY2spOwor
fQorCit2b2lkIFBsdWdpblZpZXdQcml2YXRlOjpzd2FwQnVmZmVycygpCit7CisgICAgUHRocmVh
ZE11dGV4TG9ja2VyIGJhY2tMb2NrKCZtX2JhY2tCdWZmZXJNdXRleCk7CisgICAgUHRocmVhZFdy
aXRlTG9ja2VyIGZyb250TG9jaygmbV9mcm9udEJ1ZmZlclJ3TG9jayk7CisgICAgbV9wbHVnaW5G
cm9udEJ1ZmZlciA9IChtX3BsdWdpbkZyb250QnVmZmVyICsgMSkgJSAyOworfQorCitib29sIFBs
dWdpblZpZXdQcml2YXRlOjpjcmVhdGVCdWZmZXJzKE5QU3VyZmFjZUZvcm1hdCBmb3JtYXQsIGlu
dCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKyAgICBib29sIHN1Y2Nlc3MgPSB0cnVlOworCisgICAg
UHRocmVhZE11dGV4TG9ja2VyIGJhY2tMb2NrKCZtX2JhY2tCdWZmZXJNdXRleCk7CisgICAgUHRo
cmVhZFdyaXRlTG9ja2VyIGZyb250TG9jaygmbV9mcm9udEJ1ZmZlclJ3TG9jayk7CisKKyAgICBm
b3IgKGludCBpID0gMDsgaSA8IFBMVUdJTl9CVUZGRVJTOyBpKyspIHsKKyAgICAgICAgaWYgKG1f
cGx1Z2luQnVmZmVyc1tpXSkgeworICAgICAgICAgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06Okdy
YXBoaWNzOjpkZXN0cm95QnVmZmVyKG1fcGx1Z2luQnVmZmVyc1tpXSk7CisgICAgICAgICAgICBt
X3BsdWdpbkJ1ZmZlcnNbaV0gPSAwOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHdpZHRoIDw9
IDAgfHwgaGVpZ2h0IDw9IDApCisgICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICBtX3BsdWdpbkJ1ZmZlcnNbaV0gPSBCbGFja0JlcnJ5OjpQbGF0
Zm9ybTo6R3JhcGhpY3M6OmNyZWF0ZUJ1ZmZlcigKKyAgICAgICAgICAgICAgICBCbGFja0JlcnJ5
OjpQbGF0Zm9ybTo6SW50U2l6ZSh3aWR0aCwgaGVpZ2h0KSwKKyAgICAgICAgICAgICAgICB0b0J1
ZmZlclR5cGUoZm9ybWF0KSk7CisKKyAgICAgICAgICAgIGlmICghbV9wbHVnaW5CdWZmZXJzW2ld
KQorICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGlmIChzdWNjZXNzKSB7CisgICAgICAgIG1fcGx1Z2luQnVmZmVyU2l6ZSA9IEludFNpemUo
d2lkdGgsIGhlaWdodCk7CisgICAgICAgIG1fcGx1Z2luQnVmZmVyVHlwZSA9IHRvQnVmZmVyVHlw
ZShmb3JtYXQpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fcGx1Z2luQnVmZmVyU2l6ZSA9IElu
dFNpemUoKTsKKyAgICAgICAgbV9wbHVnaW5CdWZmZXJUeXBlID0gQmxhY2tCZXJyeTo6UGxhdGZv
cm06OkdyYXBoaWNzOjpQbHVnaW5CdWZmZXJXaXRoQWxwaGE7CisgICAgICAgIGRlc3Ryb3lCdWZm
ZXJzKCk7CisgICAgfQorCisgICAgcmV0dXJuIHN1Y2Nlc3M7Cit9CisKK2Jvb2wgUGx1Z2luVmll
d1ByaXZhdGU6OnJlc2l6ZUJ1ZmZlcnMoTlBTdXJmYWNlRm9ybWF0IGZvcm1hdCwgaW50IHdpZHRo
LCBpbnQgaGVpZ2h0KQoreworICAgIGJvb2wgc3VjY2VzcyA9IHRydWU7CisKKyAgICAvLyBJZiB0
aGVyZSBpcyBubyBidWZmZXIgY3JlYXRlZCwgdGhlbiB0cnkgdG8gY3JlYXRlIGl0LgorICAgIGlm
ICghbV9wbHVnaW5CdWZmZXJTaXplLndpZHRoKCkgfHwgIW1fcGx1Z2luQnVmZmVyU2l6ZS5oZWln
aHQoKSkKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcnMoZm9ybWF0LCB3aWR0aCwgaGVpZ2h0
KTsKKworICAgIGlmICghd2lkdGggfHwgIWhlaWdodCkKKyAgICAgICAgcmV0dXJuIGRlc3Ryb3lC
dWZmZXJzKCk7CisKKyAgICBQdGhyZWFkTXV0ZXhMb2NrZXIgYmFja0xvY2soJm1fYmFja0J1ZmZl
ck11dGV4KTsKKyAgICBQdGhyZWFkV3JpdGVMb2NrZXIgZnJvbnRMb2NrKCZtX2Zyb250QnVmZmVy
UndMb2NrKTsKKworICAgIGZvciAoaW50IGkgPSAwOyAoaSA8IFBMVUdJTl9CVUZGRVJTKSAmJiBz
dWNjZXNzOyBpKyspIHsKKyAgICAgICAgc3VjY2VzcyAmPSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6
R3JhcGhpY3M6OnJlYWxsb2NCdWZmZXIobV9wbHVnaW5CdWZmZXJzW2ldLAorICAgICAgICAgICAg
QmxhY2tCZXJyeTo6UGxhdGZvcm06OkludFNpemUod2lkdGgsIGhlaWdodCksCisgICAgICAgICAg
ICB0b0J1ZmZlclR5cGUoZm9ybWF0KSk7CisgICAgfQorCisgICAgaWYgKHN1Y2Nlc3MpIHsKKyAg
ICAgICAgbV9wbHVnaW5CdWZmZXJTaXplID0gSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICAg
ICAgbV9wbHVnaW5CdWZmZXJUeXBlID0gdG9CdWZmZXJUeXBlKGZvcm1hdCk7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKworICAgIC8vIEF0dGVtcHQgdG8gdW5kbyBpZiB3ZSBmYWlsZWQg
dG8gZ2V0IHRoZSBuZXcgc2l6ZS9mb3JtYXQuIFdlIGNhbid0IGd1YXJhbnRlZQorICAgIC8vIHdl
IHdpbGwgZ2V0IGl0IGJhY2sgdGhvdWdoLgorICAgIGlmICghbV9wbHVnaW5CdWZmZXJTaXplLndp
ZHRoKCkgfHwgIW1fcGx1Z2luQnVmZmVyU2l6ZS5oZWlnaHQoKSkgeworICAgICAgICBkZXN0cm95
QnVmZmVycygpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYm9vbCB1bmRv
bmUgPSB0cnVlOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgUExVR0lOX0JVRkZFUlM7IGkrKykg
eworICAgICAgICB1bmRvbmUgJj0gQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpyZWFs
bG9jQnVmZmVyKG1fcGx1Z2luQnVmZmVyc1tpXSwKKyAgICAgICAgICAgIG1fcGx1Z2luQnVmZmVy
U2l6ZSwgbV9wbHVnaW5CdWZmZXJUeXBlKTsKKyAgICB9CisKKyAgICAvLyBJZiB3ZSBmYWlsIHRv
IHVuZG8sIGRlbGV0ZSB0aGUgYnVmZmVycyBhbHRvZ2V0aGVyLgorICAgIGlmICghdW5kb25lKQor
ICAgICAgICBkZXN0cm95QnVmZmVycygpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29s
IFBsdWdpblZpZXdQcml2YXRlOjpkZXN0cm95QnVmZmVycygpCit7CisgICAgUHRocmVhZE11dGV4
TG9ja2VyIGJhY2tMb2NrKCZtX2JhY2tCdWZmZXJNdXRleCk7CisgICAgUHRocmVhZFdyaXRlTG9j
a2VyIGZyb250TG9jaygmbV9mcm9udEJ1ZmZlclJ3TG9jayk7CisKKyAgICBmb3IgKGludCBpID0g
MDsgaSA8IFBMVUdJTl9CVUZGRVJTOyBpKyspIHsKKyAgICAgICAgaWYgKG1fcGx1Z2luQnVmZmVy
c1tpXSkgeworICAgICAgICAgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpkZXN0
cm95QnVmZmVyKG1fcGx1Z2luQnVmZmVyc1tpXSk7CisgICAgICAgICAgICBtX3BsdWdpbkJ1ZmZl
cnNbaV0gPSAwOworICAgICAgICB9CisgICAgfQorICAgIG1fcGx1Z2luQnVmZmVyU2l6ZSA9IElu
dFNpemUoKTsKKworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKwpJbmRleDogU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ibGFja2JlcnJ5L1BsdWdpblZpZXdQ
cml2YXRlQmxhY2tCZXJyeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMv
YmxhY2tiZXJyeS9QbHVnaW5WaWV3UHJpdmF0ZUJsYWNrQmVycnkuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvYmxhY2tiZXJyeS9QbHVnaW5WaWV3UHJpdmF0ZUJsYWNr
QmVycnkuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAw
MjExMC0xMzAxICBVU0EKKyAqLworCisjaWZuZGVmIFBsdWdpblZpZXdQcml2YXRlQmxhY2tCZXJy
eV9oCisjZGVmaW5lIFBsdWdpblZpZXdQcml2YXRlQmxhY2tCZXJyeV9oCisKKyNpbmNsdWRlICJQ
bHVnaW5WaWV3LmgiCisjaW5jbHVkZSA8cHRocmVhZC5oPgorCisjZGVmaW5lIFBMVUdJTl9CVUZG
RVJTIDIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBQbHVnaW5WaWV3UHJpdmF0ZSB7
CisKK3B1YmxpYzoKKyAgICBQbHVnaW5WaWV3UHJpdmF0ZShQbHVnaW5WaWV3Kik7CisgICAgflBs
dWdpblZpZXdQcml2YXRlKCk7CisKKyAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6
OkJ1ZmZlclR5cGUgdG9CdWZmZXJUeXBlKE5QU3VyZmFjZUZvcm1hdCk7CisgICAgdm9pZCBzZXRa
b29tRmFjdG9yKGZsb2F0KTsKKyAgICB2b2lkIHNldFZpc2libGVSZWN0cyhjb25zdCBOUFJlY3Qg
cmVjdHNbXSwgaW50MzJfdCBjb3VudCk7CisgICAgdm9pZCBjbGVhclZpc2libGVSZWN0cygpOwor
ICAgIHZvaWQgc2hvd0tleWJvYXJkKGJvb2wgdmFsdWUpOworICAgIHZvaWQgcmVxdWVzdEZ1bGxT
Y3JlZW4oKTsKKyAgICB2b2lkIGV4aXRGdWxsU2NyZWVuKCk7CisgICAgdm9pZCByZXF1ZXN0Q2Vu
dGVyRml0Wm9vbSgpOworICAgIHZvaWQgbG9ja09yaWVudGF0aW9uKGJvb2wgbGFuZHNjYXBlKTsK
KyAgICB2b2lkIHVubG9ja09yaWVudGF0aW9uKCk7CisgICAgdm9pZCBwcmV2ZW50SWRsZShib29s
IHByZXZlbnRJZGxlKTsKKyAgICB2b2lkIHNldEhvbGVQdW5jaChpbnQgeCwgaW50IHksIGludCB3
aWR0aCwgaW50IGhlaWdodCk7CisgICAgTlBTdXJmYWNlIGxvY2tCYWNrQnVmZmVyKCk7CisgICAg
dm9pZCB1bmxvY2tCYWNrQnVmZmVyKCk7CisgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBo
aWNzOjpCdWZmZXIqIGxvY2tSZWFkRnJvbnRCdWZmZXJJbnRlcm5hbCgpOworICAgIE5QU3VyZmFj
ZSBsb2NrUmVhZEZyb250QnVmZmVyKCk7CisgICAgdm9pZCB1bmxvY2tSZWFkRnJvbnRCdWZmZXIo
KTsKKyAgICB2b2lkIHN3YXBCdWZmZXJzKCk7CisgICAgYm9vbCBjcmVhdGVCdWZmZXJzKE5QU3Vy
ZmFjZUZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKKyAgICBib29sIHJlc2l6ZUJ1ZmZl
cnMoTlBTdXJmYWNlRm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpOworICAgIGJvb2wgZGVz
dHJveUJ1ZmZlcnMoKTsKKworcHJpdmF0ZToKKyAgICBQbHVnaW5WaWV3KiBtX3ZpZXc7CisgICAg
cHRocmVhZF9tdXRleF90IG1fYmFja0J1ZmZlck11dGV4OworICAgIHB0aHJlYWRfcndsb2NrX3Qg
bV9mcm9udEJ1ZmZlclJ3TG9jazsKKworICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGlj
czo6QnVmZmVyKiBtX3BsdWdpbkJ1ZmZlcnNbUExVR0lOX0JVRkZFUlNdOworICAgIEludFNpemUg
bV9wbHVnaW5CdWZmZXJTaXplOworICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6
QnVmZmVyVHlwZSBtX3BsdWdpbkJ1ZmZlclR5cGU7CisgICAgaW50IG1fcGx1Z2luRnJvbnRCdWZm
ZXI7CisKKyAgICBJbnRSZWN0IG1faG9sZVB1bmNoUmVjdDsKKyAgICBJbnRSZWN0IG1fa2VlcFZp
c2libGVSZWN0OworCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIFJlZlB0
cjxQbGF0Zm9ybUxheWVyPiBtX3BsYXRmb3JtTGF5ZXI7CisjZW5kaWYKKworICAgIGJvb2wgbV9p
ZGxlUHJldmVudGVkOworICAgIGJvb2wgbV9oYXNQZW5kaW5nR2VvbWV0cnlDaGFuZ2U7CisgICAg
Ym9vbCBtX3NlbnRPbkxvYWQ7CisgICAgYm9vbCBtX2lzRnVsbFNjcmVlbjsKKyAgICBib29sIG1f
aXNGb2N1c2VkOworICAgIGJvb2wgbV9vcmllbnRhdGlvbkxvY2tlZDsKKyAgICBib29sIG1faXNC
YWNrZ3JvdW5kUGxheWluZzsKKworICAgIHN0ZDo6c3RyaW5nIG1fcGx1Z2luVW5pcXVlUHJlZml4
OworCisgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkludFJlY3RSZWdpb24gbV9pbnZhbGlkYXRl
UmVnaW9uOworICAgIGZyaWVuZCBjbGFzcyBQbHVnaW5WaWV3OworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117326</attachid>
            <date>2011-11-30 21:28:05 -0800</date>
            <delta_ts>2011-12-01 11:00:57 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73513-20111201132841.patch</filename>
            <type>text/plain</type>
            <size>25814</size>
            <attacher name="Charles Wei">charles.wei</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMTYwMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDExLTExLTMwICBXZWkgQ2hh
cmxlcyAgPGNoYXJsZXMud2VpQHRvcmNobW9iaWxlLmNvbS5jbj4KKworICAgICAgICBbQmxhY2ti
ZXJyeV0gVXBzdHJlYW0gQmxhY2tCZXJyeSBwb3J0aW5nIG9mIHBsdWdpbiBmcmFtZXdvcmsgLS0g
cGFydCAyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
MzUxMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cyBmb3Igbm93LgorCisgICAgICAgICogcGx1Z2lucy9ibGFja2JlcnJ5L05QQ2Fs
bGJhY2tzQmxhY2tCZXJyeS5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsdWdpbnMvYmxhY2tiZXJy
eS9OUENhbGxiYWNrc0JsYWNrQmVycnkuaDogQWRkZWQuCisgICAgICAgICogcGx1Z2lucy9ibGFj
a2JlcnJ5L1BsdWdpblZpZXdQcml2YXRlQmxhY2tCZXJyeS5jcHA6IEFkZGVkLgorICAgICAgICAq
IHBsdWdpbnMvYmxhY2tiZXJyeS9QbHVnaW5WaWV3UHJpdmF0ZUJsYWNrQmVycnkuaDogQWRkZWQu
CisKIDIwMTEtMTEtMzAgIEpvc2h1YSBCZWxsICA8anNiZWxsQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBJbmRleGVkREI6IEltcGxlbWVudCBJREJJbmRleCBtdWx0aWVudHJ5IGZlYXR1cmUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvYmxhY2tiZXJyeS9OUENhbGxiYWNrc0JsYWNrQmVy
cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvYmxhY2tiZXJyeS9O
UENhbGxiYWNrc0JsYWNrQmVycnkuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUv
cGx1Z2lucy9ibGFja2JlcnJ5L05QQ2FsbGJhY2tzQmxhY2tCZXJyeS5jcHAJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMjIyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIFJlc2VhcmNoIElu
IE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwg
d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJOUENhbGxiYWNrc0JsYWNrQmVycnku
aCIKKworI2luY2x1ZGUgIlBsdWdpblZpZXdQcml2YXRlQmxhY2tCZXJyeS5oIgorCisjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorI2luY2x1ZGUgIlBsdWdpbkxheWVyV2ViS2l0VGhy
ZWFkLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQdGhyZWFkTXV0ZXhMb2Nr
ZXI6OlB0aHJlYWRNdXRleExvY2tlcihwdGhyZWFkX211dGV4X3QqIG11dGV4KQorICAgIDogbV9t
dXRleChtdXRleCkKK3sKKyAgICBwdGhyZWFkX211dGV4X2xvY2sobV9tdXRleCk7Cit9CisKK1B0
aHJlYWRNdXRleExvY2tlcjo6flB0aHJlYWRNdXRleExvY2tlcigpCit7CisgICAgcHRocmVhZF9t
dXRleF91bmxvY2sobV9tdXRleCk7Cit9CisKK1B0aHJlYWRSZWFkTG9ja2VyOjpQdGhyZWFkUmVh
ZExvY2tlcihwdGhyZWFkX3J3bG9ja190KiByd2xvY2spCisgICAgOiBtX3J3bG9jayhyd2xvY2sp
Cit7CisgICAgcHRocmVhZF9yd2xvY2tfcmRsb2NrKG1fcndsb2NrKTsKK30KKworUHRocmVhZFJl
YWRMb2NrZXI6On5QdGhyZWFkUmVhZExvY2tlcigpCit7CisgICAgcHRocmVhZF9yd2xvY2tfdW5s
b2NrKG1fcndsb2NrKTsKK30KKworUHRocmVhZFdyaXRlTG9ja2VyOjpQdGhyZWFkV3JpdGVMb2Nr
ZXIocHRocmVhZF9yd2xvY2tfdCogcndsb2NrKQorICAgIDogbV9yd2xvY2socndsb2NrKQorewor
ICAgIHB0aHJlYWRfcndsb2NrX3dybG9jayhtX3J3bG9jayk7Cit9CisKK1B0aHJlYWRXcml0ZUxv
Y2tlcjo6flB0aHJlYWRXcml0ZUxvY2tlcigpCit7CisgICAgcHRocmVhZF9yd2xvY2tfdW5sb2Nr
KG1fcndsb2NrKTsKK30KKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKK3ZvaWQg
bnBTZXRIb2xlUHVuY2hIYW5kbGVyKHZvaWQqIGhvbGVQdW5jaERhdGEpCit7CisgICAgT3duUHRy
PEhvbGVQdW5jaERhdGE+IGRhdGEgPSBhZG9wdFB0cihzdGF0aWNfY2FzdDxIb2xlUHVuY2hEYXRh
Kj4oaG9sZVB1bmNoRGF0YSkpOworICAgIGlmIChkYXRhLT5sYXllcikKKyAgICAgICAgZGF0YS0+
bGF5ZXItPnNldEhvbGVQdW5jaFJlY3QoSW50UmVjdChkYXRhLT54LCBkYXRhLT55LCBkYXRhLT53
LCBkYXRhLT5oKSk7Cit9CisjZW5kaWYKKworLy8gTlBBUEkgY2FsbGJhY2sgZnVuY3Rpb25zCisK
K3ZvaWQgc2V0VmlzaWJsZVJlY3RzKE5QUCBpbnN0YW5jZSwgY29uc3QgTlBSZWN0IHJlY3RzW10s
IGludDMyX3QgY291bnQpCit7CisgICAgUGx1Z2luVmlldyogdmlldyA9IHN0YXRpY19jYXN0PFBs
dWdpblZpZXcqPihpbnN0YW5jZS0+bmRhdGEpOworICAgIFBsdWdpblZpZXdQcml2YXRlKiB2aWV3
UHJpdmF0ZSA9IHZpZXctPmdldFByaXZhdGUoKTsKKyAgICB2aWV3UHJpdmF0ZS0+c2V0VmlzaWJs
ZVJlY3RzKHJlY3RzLCBjb3VudCk7Cit9CisKK3ZvaWQgY2xlYXJWaXNpYmxlUmVjdHMoTlBQIGlu
c3RhbmNlKQoreworICAgIFBsdWdpblZpZXcqIHZpZXcgPSBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3
Kj4oaW5zdGFuY2UtPm5kYXRhKTsKKyAgICBQbHVnaW5WaWV3UHJpdmF0ZSogdmlld1ByaXZhdGUg
PSB2aWV3LT5nZXRQcml2YXRlKCk7CisgICAgdmlld1ByaXZhdGUtPmNsZWFyVmlzaWJsZVJlY3Rz
KCk7Cit9CisKK3ZvaWQgc2hvd0tleWJvYXJkKE5QUCBpbnN0YW5jZSwgYm9vbCB2YWx1ZSkKK3sK
KyAgICBQbHVnaW5WaWV3KiB2aWV3ID0gc3RhdGljX2Nhc3Q8UGx1Z2luVmlldyo+KGluc3RhbmNl
LT5uZGF0YSk7CisgICAgUGx1Z2luVmlld1ByaXZhdGUqIHZpZXdQcml2YXRlID0gdmlldy0+Z2V0
UHJpdmF0ZSgpOworICAgIHZpZXdQcml2YXRlLT5zaG93S2V5Ym9hcmQodmFsdWUpOworfQorCit2
b2lkIHJlcXVlc3RGdWxsU2NyZWVuKE5QUCBpbnN0YW5jZSkKK3sKKyAgICBQbHVnaW5WaWV3KiB2
aWV3ID0gc3RhdGljX2Nhc3Q8UGx1Z2luVmlldyo+KGluc3RhbmNlLT5uZGF0YSk7CisgICAgUGx1
Z2luVmlld1ByaXZhdGUqIHZpZXdQcml2YXRlID0gdmlldy0+Z2V0UHJpdmF0ZSgpOworICAgIHZp
ZXdQcml2YXRlLT5yZXF1ZXN0RnVsbFNjcmVlbigpOworfQorCit2b2lkIGV4aXRGdWxsU2NyZWVu
KE5QUCBpbnN0YW5jZSkKK3sKKyAgICBQbHVnaW5WaWV3KiB2aWV3ID0gc3RhdGljX2Nhc3Q8UGx1
Z2luVmlldyo+KGluc3RhbmNlLT5uZGF0YSk7CisgICAgUGx1Z2luVmlld1ByaXZhdGUqIHZpZXdQ
cml2YXRlID0gdmlldy0+Z2V0UHJpdmF0ZSgpOworICAgIHZpZXdQcml2YXRlLT5leGl0RnVsbFNj
cmVlbigpOworfQorCit2b2lkIHJlcXVlc3RDZW50ZXJGaXRab29tKE5QUCBpbnN0YW5jZSkKK3sK
KyAgICBQbHVnaW5WaWV3KiB2aWV3ID0gc3RhdGljX2Nhc3Q8UGx1Z2luVmlldyo+KGluc3RhbmNl
LT5uZGF0YSk7CisgICAgUGx1Z2luVmlld1ByaXZhdGUqIHZpZXdQcml2YXRlID0gdmlldy0+Z2V0
UHJpdmF0ZSgpOworICAgIHZpZXdQcml2YXRlLT5yZXF1ZXN0Q2VudGVyRml0Wm9vbSgpOworfQor
Cit2b2lkIGxvY2tPcmllbnRhdGlvbihOUFAgaW5zdGFuY2UsIGJvb2wgbGFuZHNjYXBlKQorewor
ICAgIFBsdWdpblZpZXcqIHZpZXcgPSBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3Kj4oaW5zdGFuY2Ut
Pm5kYXRhKTsKKyAgICBQbHVnaW5WaWV3UHJpdmF0ZSogdmlld1ByaXZhdGUgPSB2aWV3LT5nZXRQ
cml2YXRlKCk7CisgICAgdmlld1ByaXZhdGUtPmxvY2tPcmllbnRhdGlvbihsYW5kc2NhcGUpOwor
fQorCit2b2lkIHVubG9ja09yaWVudGF0aW9uKE5QUCBpbnN0YW5jZSkKK3sKKyAgICBQbHVnaW5W
aWV3KiB2aWV3ID0gc3RhdGljX2Nhc3Q8UGx1Z2luVmlldyo+KGluc3RhbmNlLT5uZGF0YSk7Cisg
ICAgUGx1Z2luVmlld1ByaXZhdGUqIHZpZXdQcml2YXRlID0gdmlldy0+Z2V0UHJpdmF0ZSgpOwor
ICAgIHZpZXdQcml2YXRlLT51bmxvY2tPcmllbnRhdGlvbigpOworfQorCit2b2lkIHByZXZlbnRJ
ZGxlKE5QUCBpbnN0YW5jZSwgYm9vbCBwcmV2ZW50SWRsZSkKK3sKKyAgICBQbHVnaW5WaWV3KiB2
aWV3ID0gc3RhdGljX2Nhc3Q8UGx1Z2luVmlldyo+KGluc3RhbmNlLT5uZGF0YSk7CisgICAgUGx1
Z2luVmlld1ByaXZhdGUqIHZpZXdQcml2YXRlID0gdmlldy0+Z2V0UHJpdmF0ZSgpOworICAgIHZp
ZXdQcml2YXRlLT5wcmV2ZW50SWRsZShwcmV2ZW50SWRsZSk7Cit9CisKK05QU3VyZmFjZSBsb2Nr
QmFja0J1ZmZlcihOUFAgaW5zdGFuY2UpCit7CisgICAgUGx1Z2luVmlldyogdmlldyA9IHN0YXRp
Y19jYXN0PFBsdWdpblZpZXcqPihpbnN0YW5jZS0+bmRhdGEpOworICAgIFBsdWdpblZpZXdQcml2
YXRlKiB2aWV3UHJpdmF0ZSA9IHZpZXctPmdldFByaXZhdGUoKTsKKyAgICByZXR1cm4gdmlld1By
aXZhdGUtPmxvY2tCYWNrQnVmZmVyKCk7Cit9CisKK3ZvaWQgdW5sb2NrQmFja0J1ZmZlcihOUFAg
aW5zdGFuY2UpCit7CisgICAgUGx1Z2luVmlldyogdmlldyA9IHN0YXRpY19jYXN0PFBsdWdpblZp
ZXcqPihpbnN0YW5jZS0+bmRhdGEpOworICAgIFBsdWdpblZpZXdQcml2YXRlKiB2aWV3UHJpdmF0
ZSA9IHZpZXctPmdldFByaXZhdGUoKTsKKyAgICB2aWV3UHJpdmF0ZS0+dW5sb2NrQmFja0J1ZmZl
cigpOworfQorCitOUFN1cmZhY2UgbG9ja1JlYWRGcm9udEJ1ZmZlcihOUFAgaW5zdGFuY2UpCit7
CisgICAgUGx1Z2luVmlldyogdmlldyA9IHN0YXRpY19jYXN0PFBsdWdpblZpZXcqPihpbnN0YW5j
ZS0+bmRhdGEpOworICAgIFBsdWdpblZpZXdQcml2YXRlKiB2aWV3UHJpdmF0ZSA9IHZpZXctPmdl
dFByaXZhdGUoKTsKKyAgICByZXR1cm4gdmlld1ByaXZhdGUtPmxvY2tSZWFkRnJvbnRCdWZmZXIo
KTsKK30KKwordm9pZCB1bmxvY2tSZWFkRnJvbnRCdWZmZXIoTlBQIGluc3RhbmNlKQoreworICAg
IFBsdWdpblZpZXcqIHZpZXcgPSBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3Kj4oaW5zdGFuY2UtPm5k
YXRhKTsKKyAgICBQbHVnaW5WaWV3UHJpdmF0ZSogdmlld1ByaXZhdGUgPSB2aWV3LT5nZXRQcml2
YXRlKCk7CisgICAgdmlld1ByaXZhdGUtPnVubG9ja1JlYWRGcm9udEJ1ZmZlcigpOworfQorCit2
b2lkIHN3YXBCdWZmZXJzKE5QUCBpbnN0YW5jZSkKK3sKKyAgICBQbHVnaW5WaWV3KiB2aWV3ID0g
c3RhdGljX2Nhc3Q8UGx1Z2luVmlldyo+KGluc3RhbmNlLT5uZGF0YSk7CisgICAgUGx1Z2luVmll
d1ByaXZhdGUqIHZpZXdQcml2YXRlID0gdmlldy0+Z2V0UHJpdmF0ZSgpOworICAgIHZpZXdQcml2
YXRlLT5zd2FwQnVmZmVycygpOworfQorCitib29sIGNyZWF0ZUJ1ZmZlcnMoTlBQIGluc3RhbmNl
LCBOUFN1cmZhY2VGb3JtYXQgZm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCit7CisgICAg
UGx1Z2luVmlldyogdmlldyA9IHN0YXRpY19jYXN0PFBsdWdpblZpZXcqPihpbnN0YW5jZS0+bmRh
dGEpOworICAgIFBsdWdpblZpZXdQcml2YXRlKiB2aWV3UHJpdmF0ZSA9IHZpZXctPmdldFByaXZh
dGUoKTsKKyAgICByZXR1cm4gdmlld1ByaXZhdGUtPmNyZWF0ZUJ1ZmZlcnMoZm9ybWF0LCB3aWR0
aCwgaGVpZ2h0KTsKK30KKworYm9vbCBkZXN0cm95QnVmZmVycyhOUFAgaW5zdGFuY2UpCit7Cisg
ICAgUGx1Z2luVmlldyogdmlldyA9IHN0YXRpY19jYXN0PFBsdWdpblZpZXcqPihpbnN0YW5jZS0+
bmRhdGEpOworICAgIFBsdWdpblZpZXdQcml2YXRlKiB2aWV3UHJpdmF0ZSA9IHZpZXctPmdldFBy
aXZhdGUoKTsKKyAgICByZXR1cm4gdmlld1ByaXZhdGUtPmRlc3Ryb3lCdWZmZXJzKCk7Cit9CisK
K2Jvb2wgcmVzaXplQnVmZmVycyhOUFAgaW5zdGFuY2UsIE5QU3VyZmFjZUZvcm1hdCBmb3JtYXQs
IGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKyAgICBQbHVnaW5WaWV3KiB2aWV3ID0gc3RhdGlj
X2Nhc3Q8UGx1Z2luVmlldyo+KGluc3RhbmNlLT5uZGF0YSk7CisgICAgUGx1Z2luVmlld1ByaXZh
dGUqIHZpZXdQcml2YXRlID0gdmlldy0+Z2V0UHJpdmF0ZSgpOworICAgIHJldHVybiB2aWV3UHJp
dmF0ZS0+cmVzaXplQnVmZmVycyhmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworfQorCit2b2lkIHNl
dEhvbGVQdW5jaChOUFAgaW5zdGFuY2UsIGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVp
Z2h0KQoreworICAgIFBsdWdpblZpZXcqIHZpZXcgPSBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3Kj4o
aW5zdGFuY2UtPm5kYXRhKTsKKyAgICBQbHVnaW5WaWV3UHJpdmF0ZSogdmlld1ByaXZhdGUgPSB2
aWV3LT5nZXRQcml2YXRlKCk7CisgICAgdmlld1ByaXZhdGUtPnNldEhvbGVQdW5jaCh4LCB5LCB3
aWR0aCwgaGVpZ2h0KTsKK30KKworTlBDYWxsYmFja3Mgc19OcENhbGxiYWNrcyA9IHsKKyAgICBz
ZXRWaXNpYmxlUmVjdHMsCisgICAgY2xlYXJWaXNpYmxlUmVjdHMsCisgICAgc2hvd0tleWJvYXJk
LAorICAgIHJlcXVlc3RGdWxsU2NyZWVuLAorICAgIGV4aXRGdWxsU2NyZWVuLAorICAgIHJlcXVl
c3RDZW50ZXJGaXRab29tLAorICAgIGxvY2tPcmllbnRhdGlvbiwKKyAgICB1bmxvY2tPcmllbnRh
dGlvbiwKKyAgICBwcmV2ZW50SWRsZSwKKyAgICBsb2NrQmFja0J1ZmZlciwKKyAgICB1bmxvY2tC
YWNrQnVmZmVyLAorICAgIGxvY2tSZWFkRnJvbnRCdWZmZXIsCisgICAgdW5sb2NrUmVhZEZyb250
QnVmZmVyLAorICAgIHN3YXBCdWZmZXJzLAorICAgIGNyZWF0ZUJ1ZmZlcnMsCisgICAgZGVzdHJv
eUJ1ZmZlcnMsCisgICAgcmVzaXplQnVmZmVycywKKyAgICBzZXRIb2xlUHVuY2gKK307CisKK30g
Ly8gTmFtZXNwYWNlIFdlYkNvcmUKKwpJbmRleDogU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ibGFj
a2JlcnJ5L05QQ2FsbGJhY2tzQmxhY2tCZXJyeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsdWdpbnMvYmxhY2tiZXJyeS9OUENhbGxiYWNrc0JsYWNrQmVycnkuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvYmxhY2tiZXJyeS9OUENhbGxiYWNrc0JsYWNr
QmVycnkuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAw
MjExMC0xMzAxICBVU0EKKyAqLworCisjaWZuZGVmIE5QQ2FsbGJhY2tzQmxhY2tCZXJyeV9oCisj
ZGVmaW5lIE5QQ2FsbGJhY2tzQmxhY2tCZXJyeV9oCisKKyNpbmNsdWRlICJQbHVnaW5WaWV3Lmgi
CisjaW5jbHVkZSA8cHRocmVhZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBQ
dGhyZWFkTXV0ZXhMb2NrZXIgeworICAgIFB0aHJlYWRNdXRleExvY2tlcihwdGhyZWFkX211dGV4
X3QqKTsKKyAgICB+UHRocmVhZE11dGV4TG9ja2VyKCk7CisKKyAgICBwdGhyZWFkX211dGV4X3Qq
IG1fbXV0ZXg7Cit9OworCitzdHJ1Y3QgUHRocmVhZFJlYWRMb2NrZXIgeworICAgIFB0aHJlYWRS
ZWFkTG9ja2VyKHB0aHJlYWRfcndsb2NrX3QqKTsKKyAgICB+UHRocmVhZFJlYWRMb2NrZXIoKTsK
KworICAgIHB0aHJlYWRfcndsb2NrX3QqIG1fcndsb2NrOworfTsKKworc3RydWN0IFB0aHJlYWRX
cml0ZUxvY2tlciB7CisgICAgUHRocmVhZFdyaXRlTG9ja2VyKHB0aHJlYWRfcndsb2NrX3QqKTsK
KyAgICB+UHRocmVhZFdyaXRlTG9ja2VyKCk7CisKKyAgICBwdGhyZWFkX3J3bG9ja190KiBtX3J3
bG9jazsKK307CisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCitzdHJ1Y3QgSG9s
ZVB1bmNoRGF0YSB7CisgICAgaW50IHgsIHk7CisgICAgaW50IHcsIGg7CisgICAgUmVmUHRyPFBs
YXRmb3JtTGF5ZXI+IGxheWVyOworfTsKKwordm9pZCBucFNldEhvbGVQdW5jaEhhbmRsZXIodm9p
ZCogaG9sZVB1bmNoRGF0YSk7CisjZW5kaWYKKworLy8gU3RhdGljIE5QQVBJIENhbGxiYWNrcwor
Cit2b2lkIHNldFZpc2libGVSZWN0cyhOUFAsIGNvbnN0IE5QUmVjdCByZWN0c1tdLCBpbnQzMl90
IGNvdW50KTsKK3ZvaWQgY2xlYXJWaXNpYmxlUmVjdHMoTlBQKTsKK3ZvaWQgc2hvd0tleWJvYXJk
KE5QUCwgYm9vbCB2YWx1ZSk7Cit2b2lkIHJlcXVlc3RGdWxsU2NyZWVuKE5QUCk7Cit2b2lkIGV4
aXRGdWxsU2NyZWVuKE5QUCk7Cit2b2lkIHJlcXVlc3RDZW50ZXJGaXRab29tKE5QUCk7Cit2b2lk
IGxvY2tPcmllbnRhdGlvbihOUFAsIGJvb2wgbGFuZHNjYXBlKTsKK3ZvaWQgdW5sb2NrT3JpZW50
YXRpb24oTlBQKTsKK3ZvaWQgcHJldmVudElkbGUoTlBQLCBib29sIHByZXZlbnRJZGxlKTsKK05Q
U3VyZmFjZSBsb2NrQmFja0J1ZmZlcihOUFApOwordm9pZCB1bmxvY2tCYWNrQnVmZmVyKE5QUCk7
CitOUFN1cmZhY2UgbG9ja1JlYWRGcm9udEJ1ZmZlcihOUFApOwordm9pZCB1bmxvY2tSZWFkRnJv
bnRCdWZmZXIoTlBQKTsKK3ZvaWQgc3dhcEJ1ZmZlcnMoTlBQKTsKK2Jvb2wgY3JlYXRlQnVmZmVy
cyhOUFAsIE5QU3VyZmFjZUZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKK2Jvb2wgZGVz
dHJveUJ1ZmZlcnMoTlBQKTsKK2Jvb2wgcmVzaXplQnVmZmVycyhOUFAsIE5QU3VyZmFjZUZvcm1h
dCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKK3ZvaWQgc2V0SG9sZVB1bmNoKE5QUCwgaW50IHgs
IGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpOworCitleHRlcm4gTlBDYWxsYmFja3Mgc19O
cENhbGxiYWNrczsKKworfSAvLyBOYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsdWdpbnMvYmxhY2tiZXJyeS9QbHVnaW5WaWV3UHJpdmF0ZUJsYWNrQmVy
cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvYmxhY2tiZXJyeS9Q
bHVnaW5WaWV3UHJpdmF0ZUJsYWNrQmVycnkuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dl
YkNvcmUvcGx1Z2lucy9ibGFja2JlcnJ5L1BsdWdpblZpZXdQcml2YXRlQmxhY2tCZXJyeS5jcHAJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEz
MDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5WaWV3
UHJpdmF0ZUJsYWNrQmVycnkuaCIKKworI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUg
Ikhvc3RXaW5kb3cuaCIKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisjaW5jbHVk
ZSAiUGx1Z2luTGF5ZXJXZWJLaXRUaHJlYWQuaCIKKyNlbmRpZgorI2luY2x1ZGUgIk5QQ2FsbGJh
Y2tzQmxhY2tCZXJyeS5oIgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisKK3N0YXRpYyB1
bnNpZ25lZCBzX2NvdW50ZXIgPSAwOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1BsdWdpblZp
ZXdQcml2YXRlOjpQbHVnaW5WaWV3UHJpdmF0ZShQbHVnaW5WaWV3KiB2aWV3KQorICAgIDogbV92
aWV3KHZpZXcpCisgICAgLCBtX3BsdWdpbkJ1ZmZlclR5cGUoQmxhY2tCZXJyeTo6UGxhdGZvcm06
OkdyYXBoaWNzOjpQbHVnaW5CdWZmZXJXaXRoQWxwaGEpCisgICAgLCBtX3BsdWdpbkZyb250QnVm
ZmVyKDApCisgICAgLCBtX2lkbGVQcmV2ZW50ZWQoZmFsc2UpCisgICAgLCBtX2hhc1BlbmRpbmdH
ZW9tZXRyeUNoYW5nZSh0cnVlKQorICAgICwgbV9zZW50T25Mb2FkKGZhbHNlKQorICAgICwgbV9p
c0Z1bGxTY3JlZW4oZmFsc2UpCisgICAgLCBtX2lzRm9jdXNlZChmYWxzZSkKKyAgICAsIG1fb3Jp
ZW50YXRpb25Mb2NrZWQoZmFsc2UpCisgICAgLCBtX2lzQmFja2dyb3VuZFBsYXlpbmcoZmFsc2Up
Cit7CisgICAgbV9wbHVnaW5CdWZmZXJzWzBdID0gMDsKKyAgICBtX3BsdWdpbkJ1ZmZlcnNbMV0g
PSAwOworCisgICAgcHRocmVhZF9tdXRleGF0dHJfdCBtdXRleEF0dHJpYnV0ZXM7CisgICAgcHRo
cmVhZF9tdXRleGF0dHJfaW5pdCgmbXV0ZXhBdHRyaWJ1dGVzKTsKKyAgICBwdGhyZWFkX211dGV4
YXR0cl9zZXR0eXBlKCZtdXRleEF0dHJpYnV0ZXMsIFBUSFJFQURfTVVURVhfUkVDVVJTSVZFKTsK
KworICAgIHB0aHJlYWRfbXV0ZXhfaW5pdCgmbV9iYWNrQnVmZmVyTXV0ZXgsICZtdXRleEF0dHJp
YnV0ZXMpOworICAgIHB0aHJlYWRfcndsb2NrX2luaXQoJm1fZnJvbnRCdWZmZXJSd0xvY2ssIDAp
OworCisgICAgcHRocmVhZF9tdXRleGF0dHJfZGVzdHJveSgmbXV0ZXhBdHRyaWJ1dGVzKTsKKwor
ICAgIGNoYXIgdW5pcXVlSWRbNTBdOworICAgIHNucHJpbnRmKHVuaXF1ZUlkLCBzaXplb2YodW5p
cXVlSWQpLCAiUGx1Z2luVmlld0JCLSUwOHglMDh4LSIsIHNfY291bnRlcisrLCAoaW50KXRoaXMp
OworICAgIG1fcGx1Z2luVW5pcXVlUHJlZml4ID0gdW5pcXVlSWQ7Cit9CisKK1BsdWdpblZpZXdQ
cml2YXRlOjp+UGx1Z2luVmlld1ByaXZhdGUoKQoreworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKKyAgICAgICAgaWYgKG1fcGxhdGZvcm1MYXllcikKKyAgICAgICAgICAgIHN0YXRp
Y19jYXN0PFBsdWdpbkxheWVyV2ViS2l0VGhyZWFkKj4obV9wbGF0Zm9ybUxheWVyLmdldCgpKS0+
c2V0UGx1Z2luVmlldygwKTsKKyNlbmRpZgorCisgICAgZGVzdHJveUJ1ZmZlcnMoKTsKKworICAg
IHB0aHJlYWRfbXV0ZXhfZGVzdHJveSgmbV9iYWNrQnVmZmVyTXV0ZXgpOworICAgIHB0aHJlYWRf
cndsb2NrX2Rlc3Ryb3koJm1fZnJvbnRCdWZmZXJSd0xvY2spOworfQorCitCbGFja0JlcnJ5OjpQ
bGF0Zm9ybTo6R3JhcGhpY3M6OkJ1ZmZlclR5cGUgUGx1Z2luVmlld1ByaXZhdGU6OnRvQnVmZmVy
VHlwZShOUFN1cmZhY2VGb3JtYXQgZm9ybWF0KQoreworICAgIHN3aXRjaCAoZm9ybWF0KSB7Cisg
ICAgY2FzZSBGT1JNQVRfUkdCXzU2NToKKyAgICAgICAgcmV0dXJuIEJsYWNrQmVycnk6OlBsYXRm
b3JtOjpHcmFwaGljczo6UGx1Z2luQnVmZmVyOworICAgIGNhc2UgRk9STUFUX1JHQkFfODg4ODoK
KyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBo
aWNzOjpQbHVnaW5CdWZmZXJXaXRoQWxwaGE7CisgICAgfQorfQorCit2b2lkIFBsdWdpblZpZXdQ
cml2YXRlOjpzZXRab29tRmFjdG9yKGZsb2F0IHpvb21GYWN0b3IpCit7CisgICAgaWYgKCgoTlBT
ZXRXaW5kb3dDYWxsYmFja1N0cnVjdCopbV92aWV3LT5tX25wV2luZG93LndzX2luZm8pLT56b29t
RmFjdG9yICE9IHpvb21GYWN0b3IpCisgICAgICAgIG1faGFzUGVuZGluZ0dlb21ldHJ5Q2hhbmdl
ID0gdHJ1ZTsKKworICAgICgoTlBTZXRXaW5kb3dDYWxsYmFja1N0cnVjdCopbV92aWV3LT5tX25w
V2luZG93LndzX2luZm8pLT56b29tRmFjdG9yID0gem9vbUZhY3RvcjsKK30KKwordm9pZCBQbHVn
aW5WaWV3UHJpdmF0ZTo6c2V0VmlzaWJsZVJlY3RzKGNvbnN0IE5QUmVjdCByZWN0c1tdLCBpbnQz
Ml90IGNvdW50KQoreworICAgIG1fa2VlcFZpc2libGVSZWN0ID0gSW50UmVjdCgpOworCisgICAg
aWYgKCFtX3ZpZXctPnBhcmVudCgpIHx8ICFjb3VudCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgIEludFJlY3QgYWRkUmVj
dCA9IEludFJlY3QocmVjdHNbaV0ubGVmdCwgcmVjdHNbaV0udG9wLCByZWN0c1tpXS5yaWdodCAt
IHJlY3RzW2ldLmxlZnQsIHJlY3RzW2ldLmJvdHRvbSAtIHJlY3RzW2ldLnRvcCk7CisgICAgICAg
IG1fa2VlcFZpc2libGVSZWN0LnVuaXRlKGFkZFJlY3QpOworICAgIH0KKworICAgIC8vIERvbid0
IGNhdXNlIGEgcG9zc2libGUgc2Nyb2xsIGlmIHRoZSByZXN1bHQgaXMgYW4gZW1wdHkgcmVjdGFu
Z2xlLgorICAgIGlmIChtX2tlZXBWaXNpYmxlUmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIC8vIEFkanVzdCB0aGUgcmVjdCB0byB0aGUgcGFyZW50IHdpbmRvdyBhbmQgdGhl
biBhZGp1c3QgZm9yIHNjcm9sbGluZy4KKyAgICBtX2tlZXBWaXNpYmxlUmVjdCA9IG1fdmlldy0+
Y29udmVydFRvQ29udGFpbmluZ1dpbmRvdyhtX2tlZXBWaXNpYmxlUmVjdCk7CisgICAgRnJhbWVW
aWV3KiBmcmFtZVZpZXcgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihtX3ZpZXctPnBhcmVudCgp
KTsKKyAgICBtX2tlZXBWaXNpYmxlUmVjdC5tb3ZlKGZyYW1lVmlldy0+c2Nyb2xsUG9zaXRpb24o
KS54KCksIGZyYW1lVmlldy0+c2Nyb2xsUG9zaXRpb24oKS55KCkpOworCisgICAgZnJhbWVWaWV3
LT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpLT5lbnN1cmVDb250ZW50VmlzaWJs
ZSgpOworfQorCit2b2lkIFBsdWdpblZpZXdQcml2YXRlOjpjbGVhclZpc2libGVSZWN0cygpCit7
CisgICAgaWYgKCFtX2tlZXBWaXNpYmxlUmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHNldFZpc2li
bGVSZWN0cygwLCAwKTsKK30KKwordm9pZCBQbHVnaW5WaWV3UHJpdmF0ZTo6c2hvd0tleWJvYXJk
KGJvb2wgdmFsdWUpCit7CisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBzdGF0aWNfY2FzdDxG
cmFtZVZpZXcqPihtX3ZpZXctPnBhcmVudCgpKTsKKyAgICBmcmFtZVZpZXctPmhvc3RXaW5kb3co
KS0+cGxhdGZvcm1QYWdlQ2xpZW50KCktPnNob3dWaXJ0dWFsS2V5Ym9hcmQodmFsdWUpOworfQor
Cit2b2lkIFBsdWdpblZpZXdQcml2YXRlOjpyZXF1ZXN0RnVsbFNjcmVlbigpCit7CisgICAgaWYg
KEZyYW1lVmlldyogZnJhbWVWaWV3ID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4obV92aWV3LT5w
YXJlbnQoKSkpCisgICAgICAgIGlmIChmcmFtZVZpZXctPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1Q
YWdlQ2xpZW50KCktPnNob3VsZFBsdWdpbkVudGVyRnVsbFNjcmVlbihtX3ZpZXcsIG1fcGx1Z2lu
VW5pcXVlUHJlZml4LmNfc3RyKCkpKQorICAgICAgICAgICAgbV92aWV3LT5oYW5kbGVGdWxsU2Ny
ZWVuQWxsb3dlZEV2ZW50KCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld1ByaXZhdGU6OmV4aXRGdWxs
U2NyZWVuKCkKK3sKKyAgICBtX3ZpZXctPmhhbmRsZUZ1bGxTY3JlZW5FeGl0RXZlbnQoKTsKK30K
Kwordm9pZCBQbHVnaW5WaWV3UHJpdmF0ZTo6cmVxdWVzdENlbnRlckZpdFpvb20oKQoreworICAg
IEZyYW1lVmlldyogZnJhbWVWaWV3ID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4obV92aWV3LT5w
YXJlbnQoKSk7CisKKyAgICBpZiAoIWZyYW1lVmlldykKKyAgICAgICAgcmV0dXJuOworCisgICAg
ZnJhbWVWaWV3LT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpLT56b29tVG9Db250
ZW50UmVjdChtX3ZpZXctPm1fd2luZG93UmVjdCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld1ByaXZh
dGU6OmxvY2tPcmllbnRhdGlvbihib29sIGxhbmRzY2FwZSkKK3sKKyAgICBGcmFtZVZpZXcqIGZy
YW1lVmlldyA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KG1fdmlldy0+cGFyZW50KCkpOworCisg
ICAgaWYgKCFmcmFtZVZpZXcpCisgICAgICAgIHJldHVybjsKKworICAgIGZyYW1lVmlldy0+aG9z
dFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKS0+bG9ja09yaWVudGF0aW9uKGxhbmRzY2Fw
ZSk7CisgICAgbV9vcmllbnRhdGlvbkxvY2tlZCA9IHRydWU7Cit9CisKK3ZvaWQgUGx1Z2luVmll
d1ByaXZhdGU6OnVubG9ja09yaWVudGF0aW9uKCkKK3sKKyAgICBpZiAoIW1fb3JpZW50YXRpb25M
b2NrZWQpCisgICAgICAgIHJldHVybjsKKworICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gc3Rh
dGljX2Nhc3Q8RnJhbWVWaWV3Kj4obV92aWV3LT5wYXJlbnQoKSk7CisKKyAgICBpZiAoIWZyYW1l
VmlldykKKyAgICAgICAgcmV0dXJuOworCisgICAgZnJhbWVWaWV3LT5ob3N0V2luZG93KCktPnBs
YXRmb3JtUGFnZUNsaWVudCgpLT51bmxvY2tPcmllbnRhdGlvbigpOworICAgIG1fb3JpZW50YXRp
b25Mb2NrZWQgPSBmYWxzZTsKK30KKwordm9pZCBQbHVnaW5WaWV3UHJpdmF0ZTo6cHJldmVudElk
bGUoYm9vbCBwcmV2ZW50SWRsZSkKK3sKKyAgICBpZiAocHJldmVudElkbGUgPT0gbV9pZGxlUHJl
dmVudGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IHN0
YXRpY19jYXN0PEZyYW1lVmlldyo+KG1fdmlldy0+cGFyZW50KCkpOworICAgIGlmICghZnJhbWVW
aWV3KQorICAgICAgICByZXR1cm47CisKKyAgICBmcmFtZVZpZXctPmhvc3RXaW5kb3coKS0+cGxh
dGZvcm1QYWdlQ2xpZW50KCktPnNldFByZXZlbnRzU2NyZWVuRGltbWluZyhwcmV2ZW50SWRsZSk7
CisgICAgbV9pZGxlUHJldmVudGVkID0gcHJldmVudElkbGU7Cit9CisKK3ZvaWQgUGx1Z2luVmll
d1ByaXZhdGU6OnNldEhvbGVQdW5jaChpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdo
dCkKK3sKKyAgICBpZiAod2lkdGggPiAwICYmIGhlaWdodCA+IDApCisgICAgICAgIG1faG9sZVB1
bmNoUmVjdCA9IEludFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCk7CisgICAgZWxzZQorICAgICAg
ICBtX2hvbGVQdW5jaFJlY3QgPSBJbnRSZWN0KCk7CisKKyAgICAvLyBDbGlwIHRoZSBob2xlIHB1
bmNoIHJlY3RhbmdsZSBpbiBjYXNlIGEgcGx1Z2luIGlzICdvdmVyemVhbG91cycsIG9yIAorICAg
IC8vIGRvZXMgbm90IGNsZWFuIHVwIHRoZSBob2xlIHB1bmNoIHJlY3RhbmdsZSBjb3JyZWN0bHkg
d2hlbiBleGl0aW5nIAorICAgIC8vIGZ1bGxzY3JlZW4gKHdpbGwgbWFzayBidWdzIGluIHRoZSBw
bHVnaW4pLgorICAgIG1faG9sZVB1bmNoUmVjdC5pbnRlcnNlY3QoSW50UmVjdChJbnRQb2ludCgw
LCAwKSwgbV92aWV3LT5mcmFtZVJlY3QoKS5zaXplKCkpKTsKKworI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKKyAgICBpZiAobV9wbGF0Zm9ybUxheWVyKSB7CisgICAgICAgIEludFJl
Y3QgcmVjdCA9IG1faG9sZVB1bmNoUmVjdDsKKworICAgICAgICAvLyBUcmFuc2xhdGUgZnJvbSBw
bHVnaW4gY29vcmRpbmF0ZXMgdG8gY29udGVudHMgY29vcmRpbmF0ZXMuCisgICAgICAgIGlmICgh
bV9ob2xlUHVuY2hSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJlY3QubW92ZShtX3ZpZXct
PmZyYW1lUmVjdCgpLngoKSwgbV92aWV3LT5mcmFtZVJlY3QoKS55KCkpOworCisgICAgICAgIE93
blB0cjxIb2xlUHVuY2hEYXRhPiBocCA9IGFkb3B0UHRyKG5ldyBIb2xlUHVuY2hEYXRhKTsKKyAg
ICAgICAgaHAtPnggPSBtX2hvbGVQdW5jaFJlY3QueCgpOworICAgICAgICBocC0+eSA9IG1faG9s
ZVB1bmNoUmVjdC55KCk7CisgICAgICAgIGhwLT53ID0gbV9ob2xlUHVuY2hSZWN0LndpZHRoKCk7
CisgICAgICAgIGhwLT5oID0gbV9ob2xlUHVuY2hSZWN0LmhlaWdodCgpOworICAgICAgICBocC0+
bGF5ZXIgPSBtX3BsYXRmb3JtTGF5ZXI7CisKKyAgICAgICAgLy8gTm90aWZ5IGNvbXBvc2l0aW5n
IGxheWVyIGFuZCBwYWdlIGNsaWVudCBpbiBvcmRlciB0byBiZSBhYmxlIHRvCisgICAgICAgIC8v
IHB1bmNoIHRocm91Z2ggY29tcG9zaXRlZCBhbmQgbm9uLWNvbXBvc2l0ZWQgcGFydHMgb2YgdGhl
IHBhZ2UuCisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQobnBTZXRIb2xlUHVuY2hIYW5kbGVyLCBo
cC5sZWFrUHRyKCkpOyAvLyBucFNldEhvbGVQdW5jaEhhbmRsZXIoKSB0YWtlcyBvd25lcnNoaXAg
b2YgaHAuCisgICAgfQorI2VuZGlmCit9CisKK05QU3VyZmFjZSBQbHVnaW5WaWV3UHJpdmF0ZTo6
bG9ja0JhY2tCdWZmZXIoKQoreworICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmbV9iYWNrQnVmZmVy
TXV0ZXgpOworICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6QnVmZmVyKiBidWZm
ZXIgPSBtX3BsdWdpbkJ1ZmZlcnNbKG1fcGx1Z2luRnJvbnRCdWZmZXIgKyAxKSAlIFBMVUdJTl9C
VUZGRVJTXTsKKworICAgIGlmICghYnVmZmVyIHx8ICFCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3Jh
cGhpY3M6OnBsYXRmb3JtQnVmZmVySGFuZGxlKGJ1ZmZlcikpIHsKKyAgICAgICAgdW5sb2NrQmFj
a0J1ZmZlcigpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICByZXR1cm4gQmxhY2tC
ZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpwbGF0Zm9ybUJ1ZmZlckhhbmRsZShidWZmZXIpOwor
fQorCit2b2lkIFBsdWdpblZpZXdQcml2YXRlOjp1bmxvY2tCYWNrQnVmZmVyKCkKK3sKKyAgICBw
dGhyZWFkX211dGV4X3VubG9jaygmbV9iYWNrQnVmZmVyTXV0ZXgpOworfQorCitCbGFja0JlcnJ5
OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkJ1ZmZlciogUGx1Z2luVmlld1ByaXZhdGU6OmxvY2tSZWFk
RnJvbnRCdWZmZXJJbnRlcm5hbCgpCit7CisgICAgcHRocmVhZF9yd2xvY2tfcmRsb2NrKCZtX2Zy
b250QnVmZmVyUndMb2NrKTsKKyAgICByZXR1cm4gbV9wbHVnaW5CdWZmZXJzW21fcGx1Z2luRnJv
bnRCdWZmZXJdOworfQorCitOUFN1cmZhY2UgUGx1Z2luVmlld1ByaXZhdGU6OmxvY2tSZWFkRnJv
bnRCdWZmZXIoKQoreworICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6QnVmZmVy
KiBidWZmZXIgPSBsb2NrUmVhZEZyb250QnVmZmVySW50ZXJuYWwoKTsKKworICAgIGlmICghYnVm
ZmVyIHx8ICFCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OnBsYXRmb3JtQnVmZmVySGFu
ZGxlKGJ1ZmZlcikpIHsKKyAgICAgICAgdW5sb2NrUmVhZEZyb250QnVmZmVyKCk7CisgICAgICAg
IHJldHVybiAwOworICAgIH0KKworICAgIHJldHVybiBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3Jh
cGhpY3M6OnBsYXRmb3JtQnVmZmVySGFuZGxlKGJ1ZmZlcik7Cit9CisKK3ZvaWQgUGx1Z2luVmll
d1ByaXZhdGU6OnVubG9ja1JlYWRGcm9udEJ1ZmZlcigpCit7CisgICAgcHRocmVhZF9yd2xvY2tf
dW5sb2NrKCZtX2Zyb250QnVmZmVyUndMb2NrKTsKK30KKwordm9pZCBQbHVnaW5WaWV3UHJpdmF0
ZTo6c3dhcEJ1ZmZlcnMoKQoreworICAgIFB0aHJlYWRNdXRleExvY2tlciBiYWNrTG9jaygmbV9i
YWNrQnVmZmVyTXV0ZXgpOworICAgIFB0aHJlYWRXcml0ZUxvY2tlciBmcm9udExvY2soJm1fZnJv
bnRCdWZmZXJSd0xvY2spOworICAgIG1fcGx1Z2luRnJvbnRCdWZmZXIgPSAobV9wbHVnaW5Gcm9u
dEJ1ZmZlciArIDEpICUgMjsKK30KKworYm9vbCBQbHVnaW5WaWV3UHJpdmF0ZTo6Y3JlYXRlQnVm
ZmVycyhOUFN1cmZhY2VGb3JtYXQgZm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCit7Cisg
ICAgYm9vbCBzdWNjZXNzID0gdHJ1ZTsKKworICAgIFB0aHJlYWRNdXRleExvY2tlciBiYWNrTG9j
aygmbV9iYWNrQnVmZmVyTXV0ZXgpOworICAgIFB0aHJlYWRXcml0ZUxvY2tlciBmcm9udExvY2so
Jm1fZnJvbnRCdWZmZXJSd0xvY2spOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBQTFVHSU5f
QlVGRkVSUzsgaSsrKSB7CisgICAgICAgIGlmIChtX3BsdWdpbkJ1ZmZlcnNbaV0pIHsKKyAgICAg
ICAgICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6ZGVzdHJveUJ1ZmZlcihtX3Bs
dWdpbkJ1ZmZlcnNbaV0pOworICAgICAgICAgICAgbV9wbHVnaW5CdWZmZXJzW2ldID0gMDsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmICh3aWR0aCA8PSAwIHx8IGhlaWdodCA8PSAwKQorICAgICAg
ICAgICAgc3VjY2VzcyA9IHRydWU7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbV9wbHVn
aW5CdWZmZXJzW2ldID0gQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpjcmVhdGVCdWZm
ZXIoCisgICAgICAgICAgICAgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkludFNpemUod2lkdGgs
IGhlaWdodCksCisgICAgICAgICAgICAgICAgdG9CdWZmZXJUeXBlKGZvcm1hdCkpOworCisgICAg
ICAgICAgICBpZiAoIW1fcGx1Z2luQnVmZmVyc1tpXSkKKyAgICAgICAgICAgICAgICBzdWNjZXNz
ID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoc3VjY2VzcykgeworICAgICAg
ICBtX3BsdWdpbkJ1ZmZlclNpemUgPSBJbnRTaXplKHdpZHRoLCBoZWlnaHQpOworICAgICAgICBt
X3BsdWdpbkJ1ZmZlclR5cGUgPSB0b0J1ZmZlclR5cGUoZm9ybWF0KTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBtX3BsdWdpbkJ1ZmZlclNpemUgPSBJbnRTaXplKCk7CisgICAgICAgIG1fcGx1Z2lu
QnVmZmVyVHlwZSA9IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6UGx1Z2luQnVmZmVy
V2l0aEFscGhhOworICAgICAgICBkZXN0cm95QnVmZmVycygpOworICAgIH0KKworICAgIHJldHVy
biBzdWNjZXNzOworfQorCitib29sIFBsdWdpblZpZXdQcml2YXRlOjpyZXNpemVCdWZmZXJzKE5Q
U3VyZmFjZUZvcm1hdCBmb3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKyAgICBib29s
IHN1Y2Nlc3MgPSB0cnVlOworCisgICAgLy8gSWYgdGhlcmUgaXMgbm8gYnVmZmVyIGNyZWF0ZWQs
IHRoZW4gdHJ5IHRvIGNyZWF0ZSBpdC4KKyAgICBpZiAoIW1fcGx1Z2luQnVmZmVyU2l6ZS53aWR0
aCgpIHx8ICFtX3BsdWdpbkJ1ZmZlclNpemUuaGVpZ2h0KCkpCisgICAgICAgIHJldHVybiBjcmVh
dGVCdWZmZXJzKGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CisKKyAgICBpZiAoIXdpZHRoIHx8ICFo
ZWlnaHQpCisgICAgICAgIHJldHVybiBkZXN0cm95QnVmZmVycygpOworCisgICAgUHRocmVhZE11
dGV4TG9ja2VyIGJhY2tMb2NrKCZtX2JhY2tCdWZmZXJNdXRleCk7CisgICAgUHRocmVhZFdyaXRl
TG9ja2VyIGZyb250TG9jaygmbV9mcm9udEJ1ZmZlclJ3TG9jayk7CisKKyAgICBmb3IgKGludCBp
ID0gMDsgaSA8IFBMVUdJTl9CVUZGRVJTICYmIHN1Y2Nlc3M7IGkrKykgeworICAgICAgICBzdWNj
ZXNzICY9IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6cmVhbGxvY0J1ZmZlcihtX3Bs
dWdpbkJ1ZmZlcnNbaV0sCisgICAgICAgICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6SW50U2l6
ZSh3aWR0aCwgaGVpZ2h0KSwKKyAgICAgICAgICAgIHRvQnVmZmVyVHlwZShmb3JtYXQpKTsKKyAg
ICB9CisKKyAgICBpZiAoc3VjY2VzcykgeworICAgICAgICBtX3BsdWdpbkJ1ZmZlclNpemUgPSBJ
bnRTaXplKHdpZHRoLCBoZWlnaHQpOworICAgICAgICBtX3BsdWdpbkJ1ZmZlclR5cGUgPSB0b0J1
ZmZlclR5cGUoZm9ybWF0KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgLy8g
QXR0ZW1wdCB0byB1bmRvIGlmIHdlIGZhaWxlZCB0byBnZXQgdGhlIG5ldyBzaXplL2Zvcm1hdC4g
V2UgY2FuJ3QgZ3VhcmFudGVlCisgICAgLy8gd2Ugd2lsbCBnZXQgaXQgYmFjayB0aG91Z2guCisg
ICAgaWYgKCFtX3BsdWdpbkJ1ZmZlclNpemUud2lkdGgoKSB8fCAhbV9wbHVnaW5CdWZmZXJTaXpl
LmhlaWdodCgpKSB7CisgICAgICAgIGRlc3Ryb3lCdWZmZXJzKCk7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBib29sIHVuZG9uZSA9IHRydWU7CisgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBQTFVHSU5fQlVGRkVSUzsgaSsrKSB7CisgICAgICAgIHVuZG9uZSAmPSBCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OnJlYWxsb2NCdWZmZXIobV9wbHVnaW5CdWZmZXJzW2ld
LAorICAgICAgICAgICAgbV9wbHVnaW5CdWZmZXJTaXplLCBtX3BsdWdpbkJ1ZmZlclR5cGUpOwor
ICAgIH0KKworICAgIC8vIElmIHdlIGZhaWwgdG8gdW5kbywgZGVsZXRlIHRoZSBidWZmZXJzIGFs
dG9nZXRoZXIuCisgICAgaWYgKCF1bmRvbmUpCisgICAgICAgIGRlc3Ryb3lCdWZmZXJzKCk7CisK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUGx1Z2luVmlld1ByaXZhdGU6OmRlc3Ryb3lC
dWZmZXJzKCkKK3sKKyAgICBQdGhyZWFkTXV0ZXhMb2NrZXIgYmFja0xvY2soJm1fYmFja0J1ZmZl
ck11dGV4KTsKKyAgICBQdGhyZWFkV3JpdGVMb2NrZXIgZnJvbnRMb2NrKCZtX2Zyb250QnVmZmVy
UndMb2NrKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgUExVR0lOX0JVRkZFUlM7IGkrKykg
eworICAgICAgICBpZiAobV9wbHVnaW5CdWZmZXJzW2ldKSB7CisgICAgICAgICAgICBCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OmRlc3Ryb3lCdWZmZXIobV9wbHVnaW5CdWZmZXJzW2ld
KTsKKyAgICAgICAgICAgIG1fcGx1Z2luQnVmZmVyc1tpXSA9IDA7CisgICAgICAgIH0KKyAgICB9
CisgICAgbV9wbHVnaW5CdWZmZXJTaXplID0gSW50U2l6ZSgpOworCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bHVnaW5zL2JsYWNrYmVycnkvUGx1Z2luVmlld1ByaXZhdGVCbGFja0JlcnJ5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ibGFja2JlcnJ5L1BsdWdpblZpZXdQcml2YXRl
QmxhY2tCZXJyeS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ibGFj
a2JlcnJ5L1BsdWdpblZpZXdQcml2YXRlQmxhY2tCZXJyeS5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIFJlc2VhcmNoIEluIE1vdGlvbiBM
aW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8g
dGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpZm5k
ZWYgUGx1Z2luVmlld1ByaXZhdGVCbGFja0JlcnJ5X2gKKyNkZWZpbmUgUGx1Z2luVmlld1ByaXZh
dGVCbGFja0JlcnJ5X2gKKworI2luY2x1ZGUgIlBsdWdpblZpZXcuaCIKKyNpbmNsdWRlIDxwdGhy
ZWFkLmg+CisKKyNkZWZpbmUgUExVR0lOX0JVRkZFUlMgMgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIFBsdWdpblZpZXdQcml2YXRlIHsKKworcHVibGljOgorICAgIFBsdWdpblZpZXdQ
cml2YXRlKFBsdWdpblZpZXcqKTsKKyAgICB+UGx1Z2luVmlld1ByaXZhdGUoKTsKKworICAgIEJs
YWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6QnVmZmVyVHlwZSB0b0J1ZmZlclR5cGUoTlBT
dXJmYWNlRm9ybWF0KTsKKyAgICB2b2lkIHNldFpvb21GYWN0b3IoZmxvYXQpOworICAgIHZvaWQg
c2V0VmlzaWJsZVJlY3RzKGNvbnN0IE5QUmVjdCByZWN0c1tdLCBpbnQzMl90IGNvdW50KTsKKyAg
ICB2b2lkIGNsZWFyVmlzaWJsZVJlY3RzKCk7CisgICAgdm9pZCBzaG93S2V5Ym9hcmQoYm9vbCB2
YWx1ZSk7CisgICAgdm9pZCByZXF1ZXN0RnVsbFNjcmVlbigpOworICAgIHZvaWQgZXhpdEZ1bGxT
Y3JlZW4oKTsKKyAgICB2b2lkIHJlcXVlc3RDZW50ZXJGaXRab29tKCk7CisgICAgdm9pZCBsb2Nr
T3JpZW50YXRpb24oYm9vbCBsYW5kc2NhcGUpOworICAgIHZvaWQgdW5sb2NrT3JpZW50YXRpb24o
KTsKKyAgICB2b2lkIHByZXZlbnRJZGxlKGJvb2wgcHJldmVudElkbGUpOworICAgIHZvaWQgc2V0
SG9sZVB1bmNoKGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKKyAgICBOUFN1
cmZhY2UgbG9ja0JhY2tCdWZmZXIoKTsKKyAgICB2b2lkIHVubG9ja0JhY2tCdWZmZXIoKTsKKyAg
ICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkJ1ZmZlciogbG9ja1JlYWRGcm9udEJ1
ZmZlckludGVybmFsKCk7CisgICAgTlBTdXJmYWNlIGxvY2tSZWFkRnJvbnRCdWZmZXIoKTsKKyAg
ICB2b2lkIHVubG9ja1JlYWRGcm9udEJ1ZmZlcigpOworICAgIHZvaWQgc3dhcEJ1ZmZlcnMoKTsK
KyAgICBib29sIGNyZWF0ZUJ1ZmZlcnMoTlBTdXJmYWNlRm9ybWF0LCBpbnQgd2lkdGgsIGludCBo
ZWlnaHQpOworICAgIGJvb2wgcmVzaXplQnVmZmVycyhOUFN1cmZhY2VGb3JtYXQsIGludCB3aWR0
aCwgaW50IGhlaWdodCk7CisgICAgYm9vbCBkZXN0cm95QnVmZmVycygpOworCitwcml2YXRlOgor
ICAgIFBsdWdpblZpZXcqIG1fdmlldzsKKyAgICBwdGhyZWFkX211dGV4X3QgbV9iYWNrQnVmZmVy
TXV0ZXg7CisgICAgcHRocmVhZF9yd2xvY2tfdCBtX2Zyb250QnVmZmVyUndMb2NrOworCisgICAg
QmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpCdWZmZXIqIG1fcGx1Z2luQnVmZmVyc1tQ
TFVHSU5fQlVGRkVSU107CisgICAgSW50U2l6ZSBtX3BsdWdpbkJ1ZmZlclNpemU7CisgICAgQmxh
Y2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpCdWZmZXJUeXBlIG1fcGx1Z2luQnVmZmVyVHlw
ZTsKKyAgICBpbnQgbV9wbHVnaW5Gcm9udEJ1ZmZlcjsKKworICAgIEludFJlY3QgbV9ob2xlUHVu
Y2hSZWN0OworICAgIEludFJlY3QgbV9rZWVwVmlzaWJsZVJlY3Q7CisKKyNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCisgICAgUmVmUHRyPFBsYXRmb3JtTGF5ZXI+IG1fcGxhdGZvcm1M
YXllcjsKKyNlbmRpZgorCisgICAgYm9vbCBtX2lkbGVQcmV2ZW50ZWQ7CisgICAgYm9vbCBtX2hh
c1BlbmRpbmdHZW9tZXRyeUNoYW5nZTsKKyAgICBib29sIG1fc2VudE9uTG9hZDsKKyAgICBib29s
IG1faXNGdWxsU2NyZWVuOworICAgIGJvb2wgbV9pc0ZvY3VzZWQ7CisgICAgYm9vbCBtX29yaWVu
dGF0aW9uTG9ja2VkOworICAgIGJvb2wgbV9pc0JhY2tncm91bmRQbGF5aW5nOworCisgICAgc3Rk
OjpzdHJpbmcgbV9wbHVnaW5VbmlxdWVQcmVmaXg7CisKKyAgICBCbGFja0JlcnJ5OjpQbGF0Zm9y
bTo6SW50UmVjdFJlZ2lvbiBtX2ludmFsaWRhdGVSZWdpb247CisgICAgZnJpZW5kIGNsYXNzIFBs
dWdpblZpZXc7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>