<?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>105660</bug_id>
          
          <creation_ts>2012-12-21 14:46:29 -0800</creation_ts>
          <short_desc>Split fast-rejection filter logic off SelectorChecker.</short_desc>
          <delta_ts>2012-12-23 22:23:46 -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>New Bugs</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>89879</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dimitri Glazkov (Google)">dglazkov</reporter>
          <assigned_to name="Dimitri Glazkov (Google)">dglazkov</assigned_to>
          <cc>allan.jensen</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dpranke</cc>
    
    <cc>eric</cc>
    
    <cc>gtk-ews</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>koivisto</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>796472</commentid>
    <comment_count>0</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-12-21 14:46:29 -0800</bug_when>
    <thetext>Split fast-rejection filter logic off SelectorChecker.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>796475</commentid>
    <comment_count>1</comment_count>
      <attachid>180561</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-12-21 14:50:00 -0800</bug_when>
    <thetext>Created attachment 180561
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>796483</commentid>
    <comment_count>2</comment_count>
      <attachid>180561</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-12-21 14:56:14 -0800</bug_when>
    <thetext>Comment on attachment 180561
Patch

Attachment 180561 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/15460466</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>796485</commentid>
    <comment_count>3</comment_count>
      <attachid>180561</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2012-12-21 14:59:33 -0800</bug_when>
    <thetext>Comment on attachment 180561
Patch

Attachment 180561 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/15449585</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>796489</commentid>
    <comment_count>4</comment_count>
      <attachid>180561</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-12-21 15:03:33 -0800</bug_when>
    <thetext>Comment on attachment 180561
Patch

Attachment 180561 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/15456567</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>796491</commentid>
    <comment_count>5</comment_count>
      <attachid>180561</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2012-12-21 15:05:43 -0800</bug_when>
    <thetext>Comment on attachment 180561
Patch

Attachment 180561 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/15445627</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>796492</commentid>
    <comment_count>6</comment_count>
      <attachid>180561</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-12-21 15:06:00 -0800</bug_when>
    <thetext>Comment on attachment 180561
Patch

Attachment 180561 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/15451569</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>796495</commentid>
    <comment_count>7</comment_count>
      <attachid>180561</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-12-21 15:09:48 -0800</bug_when>
    <thetext>Comment on attachment 180561
Patch

Failed to add the files. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>796517</commentid>
    <comment_count>8</comment_count>
      <attachid>180567</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-12-21 15:55:54 -0800</bug_when>
    <thetext>Created attachment 180567
Now with actual files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>796520</commentid>
    <comment_count>9</comment_count>
      <attachid>180567</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-12-21 15:59:38 -0800</bug_when>
    <thetext>Comment on attachment 180567
Now with actual files.

Its a bit odd that the stack is in teh filter object, but seems OK.  Definitely better that the current location.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>796541</commentid>
    <comment_count>10</comment_count>
      <attachid>180567</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-12-21 16:27:47 -0800</bug_when>
    <thetext>Comment on attachment 180567
Now with actual files.

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

Looks like a good refactoring.

&gt; Source/WebCore/ChangeLog:7
&gt; +        The awesome Bloom filter and parent stack logic don&apos;t need to be in SelectorChecker. They nicely abstract out
&gt; +        into their own pretty thing, named thereby SelectorFilter.

It is not exactly &quot;abstracting out&quot;. It thankfully doesn&apos;t get any more abstract.

&gt; Source/WebCore/css/StyleResolver.h:496
&gt;      SelectorChecker m_checker;
&gt; +    SelectorFilter m_filter;

m_filter does seems like overly generic name. So does m_checker, obviously, but there is no need to propagate bad naming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>796542</commentid>
    <comment_count>11</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-12-21 16:29:01 -0800</bug_when>
    <thetext>m_selectorFilter and m_selectorChecker would be way more informative.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>796845</commentid>
    <comment_count>12</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-12-23 19:58:21 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 180567 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=180567&amp;action=review
&gt; 
&gt; Looks like a good refactoring.
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:7
&gt; &gt; +        The awesome Bloom filter and parent stack logic don&apos;t need to be in SelectorChecker. They nicely abstract out
&gt; &gt; +        into their own pretty thing, named thereby SelectorFilter.
&gt; 
&gt; It is not exactly &quot;abstracting out&quot;. It thankfully doesn&apos;t get any more abstract.

Changed to &quot;factor out&quot;.

&gt; 
&gt; &gt; Source/WebCore/css/StyleResolver.h:496
&gt; &gt;      SelectorChecker m_checker;
&gt; &gt; +    SelectorFilter m_filter;
&gt; 
&gt; m_filter does seems like overly generic name. So does m_checker, obviously, but there is no need to propagate bad naming.

Renamed to m_selectorFilter, will change m_checker in a separate patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>796847</commentid>
    <comment_count>13</comment_count>
      <attachid>180636</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-12-23 19:59:50 -0800</bug_when>
    <thetext>Created attachment 180636
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>796852</commentid>
    <comment_count>14</comment_count>
      <attachid>180636</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-23 20:39:06 -0800</bug_when>
    <thetext>Comment on attachment 180636
Patch for landing

Rejecting attachment 180636 from commit-queue.

Failed to run &quot;[u&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, u&apos;--status-host=queues.webkit.org&apos;, ...&quot; exit_code: 2 cwd: /mnt/git/webkit-commit-queue

Last 500 characters of output:
Kit/chromium/third_party/yasm/source/patched-yasm --revision 167605 --non-interactive --force --accept theirs-conflict --ignore-externals&apos; in &apos;/mnt/git/webkit-commit-queue/Source/WebKit/chromium&apos;
55&gt;At revision 167605.

________ running &apos;/usr/bin/python tools/clang/scripts/update.py --mac-only&apos; in &apos;/mnt/git/webkit-commit-queue/Source/WebKit/chromium&apos;

________ running &apos;/usr/bin/python gyp_webkit&apos; in &apos;/mnt/git/webkit-commit-queue/Source/WebKit/chromium&apos;
Updating webkit projects from gyp files...

Full output: http://queues.webkit.org/results/15495309</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>796857</commentid>
    <comment_count>15</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-12-23 20:50:01 -0800</bug_when>
    <thetext>I think I&apos;ve made the error reporting less-awesome.

But this was the error:
Merge conflict during commit: Conflict at &apos;/trunk/Source/WebCore/ChangeLog&apos; at /usr/lib/git-core/git-svn line 570</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>796861</commentid>
    <comment_count>16</comment_count>
      <attachid>180636</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-23 21:06:23 -0800</bug_when>
    <thetext>Comment on attachment 180636
Patch for landing

Clearing flags on attachment: 180636

Committed r138432: &lt;http://trac.webkit.org/changeset/138432&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>796862</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-23 21:06:30 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>796877</commentid>
    <comment_count>18</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-12-23 22:23:46 -0800</bug_when>
    <thetext>I&apos;ve filed bug 105705 about the less-than-stellar reporting from the EWS.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180561</attachid>
            <date>2012-12-21 14:50:00 -0800</date>
            <delta_ts>2012-12-21 15:55:50 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-105660-20121221144715.patch</filename>
            <type>text/plain</type>
            <size>22286</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM4Mzk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWEwNDA0ZjEwNTAwN2Rj
ODA0N2JiZDA3ZjYxZDdlYTYyNjM1ZTAzZi4uYWEwNGJiN2M0Zjc0MzNiNjE3NWIxMWFlZTQ1ZjEz
NjVjYTMyMzk5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDEyLTEyLTIxICBEaW1p
dHJpIEdsYXprb3YgIDxkZ2xhemtvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgU3BsaXQgZmFz
dC1yZWplY3Rpb24gZmlsdGVyIGxvZ2ljIG9mZiBTZWxlY3RvckNoZWNrZXIuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDU2NjAKKworICAgICAgICBU
aGUgYXdlc29tZSBCbG9vbSBmaWx0ZXIgYW5kIHBhcmVudCBzdGFjayBsb2dpYyBkb24ndCBuZWVk
IHRvIGJlIGluIFNlbGVjdG9yQ2hlY2tlci4gVGhleSBuaWNlbHkgYWJzdHJhY3Qgb3V0CisgICAg
ICAgIGludG8gdGhlaXIgb3duIHByZXR0eSB0aGluZywgbmFtZWQgdGhlcmVieSBTZWxlY3RvckZp
bHRlci4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBO
byBjaGFuZ2UgaW4gZnVuY3Rpb25hbGl0eSwgY292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKwor
ICAgICAgICAqIENNYWtlTGlzdHMudHh0OiBBZGRlZCBTZWxlY3RvckZpbHRlciB0byBidWlsZCBz
eXN0ZW1zLgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06IERpdHRvLgorICAgICAgICAq
IFRhcmdldC5wcmk6IERpdHRvLgorICAgICAgICAqIFdlYkNvcmUuZ3lwaTogRGl0dG8uCisgICAg
ICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBEaXR0by4KKyAgICAgICAg
KiBjc3MvQ1NTQWxsSW5PbmUuY3BwOiBEaXR0by4KKyAgICAgICAgKiBjc3MvUnVsZVNldC5jcHA6
IENoYW5nZWQgdG8gdXNlIFNlbGVjdG9yRmlsdGVyLgorICAgICAgICAoV2ViQ29yZTo6UnVsZURh
dGE6OlJ1bGVEYXRhKTogRGl0dG8uCisgICAgICAgICogY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHA6
IERpdHRvLgorICAgICAgICAqIGNzcy9TZWxlY3RvckNoZWNrZXIuaDogRGl0dG8uCisgICAgICAg
IChTZWxlY3RvckNoZWNrZXIpOgorICAgICAgICAqIGNzcy9TdHlsZVJlc29sdmVyLmNwcDogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6
OnB1c2hQYXJlbnRFbGVtZW50KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjpwb3BQYXJlbnRFbGVtZW50KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJl
c29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QpOiBEaXR0by4KKyAgICAgICAgKiBj
c3MvU3R5bGVSZXNvbHZlci5oOgorICAgICAgICAoU3R5bGVSZXNvbHZlcik6IERpdHRvLgorCiAy
MDEyLTEyLTIxICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBV
cGRhdGUgbG9jYWxpemFibGUgc3RyaW5ncyBhcyBhIGZvbGxvd3VwIHRvIGh0dHA6Ly90cmFjLndl
YmtpdC5vcmcvY2hhbmdlc2V0LzEzODM4NwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01h
a2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCAxNzQ1OTMz
ZTRiYzI1ZDlmY2ZkZWI1YjliZjk3ODNlODhhZjZlOWVjLi5mMDA2NjM3ZDE5ZWY2NmIwYTJhODdi
OWNkN2RjM2I3YmY2NmE1ZGM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3Rz
LnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTA3OCw2ICsxMDc4
LDcgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIGNzcy9SdWxlU2V0LmgKICAgICBjc3MvUnVs
ZVNldC5jcHAKICAgICBjc3MvU2VsZWN0b3JDaGVja2VyLmNwcAorICAgIGNzcy9TZWxlY3RvckZp
bHRlci5jcHAKICAgICBjc3MvU2hhZG93VmFsdWUuY3BwCiAgICAgY3NzL1N0eWxlQnVpbGRlci5j
cHAKICAgICBjc3MvU3R5bGVJbnZhbGlkYXRpb25BbmFseXNpcy5jcHAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5saXN0LmFtCmluZGV4IDE4ZjA0ODc0YzA1ZjFmODQ3MmQzMDFkY2FlZjAzM2Y3NWYwNWMw
OGIuLmUyYmIxOWFiOTBhMjY3MWYzODk1NTQ5MzFjNWI1ZjgxZDU5MTJjMWIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUv
R05VbWFrZWZpbGUubGlzdC5hbQpAQCAtMjYzMSw2ICsyNjMxLDggQEAgd2ViY29yZV9zb3VyY2Vz
ICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9jc3MvUnVsZVNldC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9j
c3MvU2VsZWN0b3JDaGVja2VyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hl
Y2tlci5oIFwKKyAgICBTb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JGaWx0ZXIuY3BwIFwKKyAg
ICBTb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JGaWx0ZXIuaCBcCiAJU291cmNlL1dlYkNvcmUv
Y3NzL1NoYWRvd1ZhbHVlLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvY3NzL1NoYWRvd1ZhbHVlLmgg
XAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9TaWJsaW5nVHJhdmVyc2FsU3RyYXRlZ2llcy5oIFwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9UYXJn
ZXQucHJpCmluZGV4IGIxYmI4ZjNjOGI1ODc5MWIzZWNkNjcxMThhMWIxM2YxMDM0ZDRlZDEuLjIy
M2U3M2QwZGY5MDI1NTQ3YWIxMjY1MWYxMDA0ZGVjNTBkODU5ZjUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpAQCAt
MzA2LDYgKzMwNiw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGNzcy9SdWxlRmVhdHVyZS5jcHAgXAog
ICAgIGNzcy9SdWxlU2V0LmNwcCBcCiAgICAgY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAgXAorICAg
IGNzcy9TZWxlY3RvckZpbHRlci5jcHAgXAogICAgIGNzcy9TaGFkb3dWYWx1ZS5jcHAgXAogICAg
IGNzcy9TdHlsZUJ1aWxkZXIuY3BwIFwKICAgICBjc3MvU3R5bGVJbnZhbGlkYXRpb25BbmFseXNp
cy5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDM2ODVhOTg4NDkzN2RkM2Y3MjEyZTIxNzZmYWYy
Njk4OTg2NWJhMGMuLmFjZGQyNzNhYTJkYjg5NTVlYmZkYjYyYWZlNGZjYTJhNzY4ZmVmODIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkKQEAgLTE1NDksNiArMTU0OSw4IEBACiAgICAgICAgICAgICAnY3NzL1NW
R0NTU1N0eWxlU2VsZWN0b3IuY3BwJywKICAgICAgICAgICAgICdjc3MvU2VsZWN0b3JDaGVja2Vy
LmNwcCcsCiAgICAgICAgICAgICAnY3NzL1NlbGVjdG9yQ2hlY2tlci5oJywKKyAgICAgICAgICAg
ICdjc3MvU2VsZWN0b3JGaWx0ZXIuY3BwJywKKyAgICAgICAgICAgICdjc3MvU2VsZWN0b3JGaWx0
ZXIuaCcsCiAgICAgICAgICAgICAnY3NzL1NoYWRvd1ZhbHVlLmNwcCcsCiAgICAgICAgICAgICAn
Y3NzL1NoYWRvd1ZhbHVlLmgnLAogICAgICAgICAgICAgJ2Nzcy9TaWJsaW5nVHJhdmVyc2FsU3Ry
YXRlZ2llcy5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagppbmRleCBjY2ZiODk0ZTVhYzJmYWU5ZjBkMzk0OTgyN2U1ZGIyZjkyY2IyYWY1
Li45Y2VmMjE0NTNiMWZlMmFjMjZjN2ZhZWU2MTA4NGYxOGJiMzU5MzI3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMDYwLDYg
KzEwNjAsOCBAQAogCQk0MTM4RDMzNjEyNDQwNTQ4MDAzMjNEMzMgLyogRXZlbnRDb250ZXh0LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxMzhEMzM0
MTI0NDA1NDgwMDMyM0QzMyAvKiBFdmVudENvbnRleHQuY3BwICovOyB9OwogCQk0MTRCODY3MzEz
QUQwNzRFMDBCNEIzNzMgLyogRmlsZUljb25Mb2FkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDE0Qjg2NzExM0FEMDc0RTAwQjRCMzczIC8qIEZp
bGVJY29uTG9hZGVyLmNwcCAqLzsgfTsKIAkJNDE0Qjg2NzQxM0FEMDc0RTAwQjRCMzczIC8qIEZp
bGVJY29uTG9hZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0MTRCODY3MjEzQUQwNzRFMDBCNEIzNzMgLyogRmlsZUljb25Mb2FkZXIuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk0MTUwNzE1NzE2ODUw
NjczMDBDM0M3QjMgLyogU2VsZWN0b3JGaWx0ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDE1MDcxNTUxNjg1MDY3MzAwQzNDN0IzIC8qIFNlbGVj
dG9yRmlsdGVyLmNwcCAqLzsgfTsKKwkJNDE1MDcxNTgxNjg1MDY3MzAwQzNDN0IzIC8qIFNlbGVj
dG9yRmlsdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0MTUwNzE1NjE2ODUwNjczMDBDM0M3QjMgLyogU2VsZWN0b3JGaWx0ZXIuaCAqLzsgfTsKIAkJ
NDE1MEY5RjExMkI2RTBFNzAwMDhDODYwIC8qIFNsaWRlclRodW1iRWxlbWVudC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDE1MEY5RUYxMkI2RTBFNzAw
MDhDODYwIC8qIFNsaWRlclRodW1iRWxlbWVudC5oICovOyB9OwogCQk0MTUwRjlGMjEyQjZFMEU3
MDAwOEM4NjAgLyogU2xpZGVyVGh1bWJFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxNTBGOUYwMTJCNkUwRTcwMDA4Qzg2MCAvKiBTbGlk
ZXJUaHVtYkVsZW1lbnQuY3BwICovOyB9OwogCQk0MTU3QUY4MDEyRjFGQjA0MDBBOEM2RjUgLyog
TWVkaWFDb250cm9sc0FwcGxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0MTU3QUY3RTEyRjFGQjA0MDBBOEM2RjUgLyogTWVkaWFDb250cm9sc0FwcGxl
LmggKi87IH07CkBAIC04Mjg3LDYgKzgyODksOCBAQAogCQk0MTM4RDMzNDEyNDQwNTQ4MDAzMjNE
MzMgLyogRXZlbnRDb250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEV2ZW50Q29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxNEI4
NjcxMTNBRDA3NEUwMEI0QjM3MyAvKiBGaWxlSWNvbkxvYWRlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGaWxlSWNvbkxvYWRlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTQxNEI4NjcyMTNBRDA3NEUwMEI0QjM3MyAvKiBGaWxlSWNvbkxvYWRl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWxlSWNvbkxvYWRlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MTUwNzE1NTE2ODUwNjczMDBDM0M3QjMgLyog
U2VsZWN0b3JGaWx0ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U2VsZWN0b3JGaWx0ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MTUwNzE1
NjE2ODUwNjczMDBDM0M3QjMgLyogU2VsZWN0b3JGaWx0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU2VsZWN0b3JGaWx0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNDE1MEY5RUYxMkI2RTBFNzAwMDhDODYwIC8qIFNsaWRlclRodW1iRWxlbWVudC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTbGlkZXJUaHVtYkVsZW1lbnQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDE1MEY5RjAxMkI2RTBFNzAwMDhDODYwIC8qIFNs
aWRlclRodW1iRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBTbGlkZXJUaHVtYkVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0
MTU3QUY3RTEyRjFGQjA0MDBBOEM2RjUgLyogTWVkaWFDb250cm9sc0FwcGxlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhQ29udHJvbHNBcHBsZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMjE1NzcsNiArMjE1ODEsOCBAQAogCQkJCUE3OUJBREEwMTYx
RTdGM0YwMEMyRTY1MiAvKiBSdWxlU2V0LmggKi8sCiAJCQkJRTQ0QjRCQjExNDE2NTBENzAwMkIx
RDhCIC8qIFNlbGVjdG9yQ2hlY2tlci5jcHAgKi8sCiAJCQkJRTQ0QjRCQjIxNDE2NTBENzAwMkIx
RDhCIC8qIFNlbGVjdG9yQ2hlY2tlci5oICovLAorCQkJCTQxNTA3MTU1MTY4NTA2NzMwMEMzQzdC
MyAvKiBTZWxlY3RvckZpbHRlci5jcHAgKi8sCisJCQkJNDE1MDcxNTYxNjg1MDY3MzAwQzNDN0Iz
IC8qIFNlbGVjdG9yRmlsdGVyLmggKi8sCiAJCQkJQTgwRTZDQ0EwQTE5ODlDQTAwN0ZCOEM1IC8q
IFNoYWRvd1ZhbHVlLmNwcCAqLywKIAkJCQlBODBFNkNCRTBBMTk4OUNBMDA3RkI4QzUgLyogU2hh
ZG93VmFsdWUuaCAqLywKIAkJCQk1NzI4QkQ5RDE2MjUzNjk2MDBDNDBCNTYgLyogU2libGluZ1Ry
YXZlcnNhbFN0cmF0ZWdpZXMuaCAqLywKQEAgLTI1OTgyLDYgKzI1OTg4LDcgQEAKIAkJCQlGMzdB
NTYyMzE2NzlDRjdCMDBDNTcwNDYgLyogSGVhcEdyYXBoU2VyaWFsaXplci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZCODg5MEExNjdEMkZBMTAwMTBDREE1IC8qIFNjcm9sbGluZ1RyZWVTdGlja3lO
b2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkI4ODkwRjE2N0QzMDE2MDAxMENEQTUgLyogU2Ny
b2xsaW5nU3RhdGVTdGlja3lOb2RlLmggaW4gSGVhZGVycyAqLywKKwkJCQk0MTUwNzE1ODE2ODUw
NjczMDBDM0M3QjMgLyogU2VsZWN0b3JGaWx0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJ
CXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjkxMDAs
NiArMjkxMDcsNyBAQAogCQkJCTBGQjg4OTBCMTY3RDJGQTEwMDEwQ0RBNSAvKiBTY3JvbGxpbmdU
cmVlU3RpY2t5Tm9kZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTBGQjg4OTBFMTY3RDMwMTYwMDEw
Q0RBNSAvKiBTY3JvbGxpbmdTdGF0ZVN0aWNreU5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MjA5QjQ1NkIxNjc5NkE3RTAwRTU0RTRFIC8qIEpTQ3J5cHRvQ3VzdG9tLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTQxNTA3MTU3MTY4NTA2NzMwMEMzQzdCMyAvKiBTZWxlY3RvckZpbHRlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNz
aW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NBbGxJbk9u
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQWxsSW5PbmUuY3BwCmluZGV4IDQ3OWQ4ZGVm
NzhjOWQzNzQwOTdjMGM0ZTk5OTEzNzEzZTJhMjMxMDUuLjZiN2E4YjllZGZlOGNiYmU2YzAxYmZi
OTc1OWIzYWE0NDA1NjhlNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NBbGxJ
bk9uZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0FsbEluT25lLmNwcApAQCAtNjgs
NiArNjgsNyBAQAogI2luY2x1ZGUgIkNTU1ZhbHVlUG9vbC5jcHAiCiAjaW5jbHVkZSAiUnVsZUZl
YXR1cmUuY3BwIgogI2luY2x1ZGUgIlJ1bGVTZXQuY3BwIgorI2luY2x1ZGUgIlNlbGVjdG9yRmls
dGVyLmNwcCIKICNpbmNsdWRlICJTdHlsZUJ1aWxkZXIuY3BwIgogI2luY2x1ZGUgIlN0eWxlUHJv
cGVydHlTZXQuY3BwIgogI2luY2x1ZGUgIlN0eWxlUHJvcGVydHlTaG9ydGhhbmQuY3BwIgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1J1bGVTZXQuY3BwIGIvU291cmNlL1dlYkNvcmUv
Y3NzL1J1bGVTZXQuY3BwCmluZGV4IDM1MGEyNzE1ZGI3YjAzYjkwNmI5MzI2YzkwYjBhMTM5ZTIz
ZmUyMWEuLmU5NjY2NjVlY2RmM2EyZjhmMWQ3YTBiNmM4YjY1ODVmYmQ4Mzg1NzYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9SdWxlU2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvUnVsZVNldC5jcHAKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJNZWRpYVF1ZXJ5RXZh
bHVhdG9yLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJTZWxlY3Rv
ckNoZWNrZXIuaCIKKyNpbmNsdWRlICJTZWxlY3RvckZpbHRlci5oIgogI2luY2x1ZGUgIlN0eWxl
UmVzb2x2ZXIuaCIKICNpbmNsdWRlICJTdHlsZVJ1bGUuaCIKICNpbmNsdWRlICJTdHlsZVJ1bGVJ
bXBvcnQuaCIKQEAgLTEyMiw3ICsxMjMsNyBAQCBSdWxlRGF0YTo6UnVsZURhdGEoU3R5bGVSdWxl
KiBydWxlLCB1bnNpZ25lZCBzZWxlY3RvckluZGV4LCB1bnNpZ25lZCBwb3NpdGlvbiwgQQogewog
ICAgIEFTU0VSVChtX3Bvc2l0aW9uID09IHBvc2l0aW9uKTsKICAgICBBU1NFUlQobV9zZWxlY3Rv
ckluZGV4ID09IHNlbGVjdG9ySW5kZXgpOwotICAgIFNlbGVjdG9yQ2hlY2tlcjo6Y29sbGVjdElk
ZW50aWZpZXJIYXNoZXMoc2VsZWN0b3IoKSwgbV9kZXNjZW5kYW50U2VsZWN0b3JJZGVudGlmaWVy
SGFzaGVzLCBtYXhpbXVtSWRlbnRpZmllckNvdW50KTsKKyAgICBTZWxlY3RvckZpbHRlcjo6Y29s
bGVjdElkZW50aWZpZXJIYXNoZXMoc2VsZWN0b3IoKSwgbV9kZXNjZW5kYW50U2VsZWN0b3JJZGVu
dGlmaWVySGFzaGVzLCBtYXhpbXVtSWRlbnRpZmllckNvdW50KTsKIH0KIAogdm9pZCBSdWxlRGF0
YTo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykg
Y29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAKaW5kZXggNTdhMWQ5Zjk3
Mzg4MWZlNTViZWRmNTE0MDgwZDJmYTI2MDAzY2VlMS4uNDIxZWE5MGFiNDA3NmFjOTZiZDJjOWU4
ZDJhMmQxNzcyMTI1ZGY3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9y
Q2hlY2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAK
QEAgLTc3LDEzNiArNzcsNiBAQCBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tlcihEb2N1
bWVudCogZG9jdW1lbnQsIGJvb2wgc3RyaWN0UGFyc2luZykKIHsKIH0KIAotLy8gU2FsdCB0byBz
ZXBhcmF0ZSBvdGhlcndpc2UgaWRlbnRpY2FsIHN0cmluZyBoYXNoZXMgc28gYSBjbGFzcy1zZWxl
Y3RvciBsaWtlIC5hcnRpY2xlIHdvbid0IG1hdGNoIDxhcnRpY2xlPiBlbGVtZW50cy4KLWVudW0g
eyBUYWdOYW1lU2FsdCA9IDEzLCBJZEF0dHJpYnV0ZVNhbHQgPSAxNywgQ2xhc3NBdHRyaWJ1dGVT
YWx0ID0gMTkgfTsKLQotc3RhdGljIGlubGluZSB2b2lkIGNvbGxlY3RFbGVtZW50SWRlbnRpZmll
ckhhc2hlcyhjb25zdCBFbGVtZW50KiBlbGVtZW50LCBWZWN0b3I8dW5zaWduZWQsIDQ+JiBpZGVu
dGlmaWVySGFzaGVzKQotewotICAgIGlkZW50aWZpZXJIYXNoZXMuYXBwZW5kKGVsZW1lbnQtPmxv
Y2FsTmFtZSgpLmltcGwoKS0+ZXhpc3RpbmdIYXNoKCkgKiBUYWdOYW1lU2FsdCk7Ci0gICAgaWYg
KGVsZW1lbnQtPmhhc0lEKCkpCi0gICAgICAgIGlkZW50aWZpZXJIYXNoZXMuYXBwZW5kKGVsZW1l
bnQtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpLT5leGlzdGluZ0hhc2goKSAqIElkQXR0
cmlidXRlU2FsdCk7Ci0gICAgY29uc3QgU3R5bGVkRWxlbWVudCogc3R5bGVkRWxlbWVudCA9IGVs
ZW1lbnQtPmlzU3R5bGVkRWxlbWVudCgpID8gc3RhdGljX2Nhc3Q8Y29uc3QgU3R5bGVkRWxlbWVu
dCo+KGVsZW1lbnQpIDogMDsKLSAgICBpZiAoc3R5bGVkRWxlbWVudCAmJiBzdHlsZWRFbGVtZW50
LT5oYXNDbGFzcygpKSB7Ci0gICAgICAgIGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcmIGNsYXNzTmFt
ZXMgPSBzdHlsZWRFbGVtZW50LT5jbGFzc05hbWVzKCk7Ci0gICAgICAgIHNpemVfdCBjb3VudCA9
IGNsYXNzTmFtZXMuc2l6ZSgpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50
OyArK2kpCi0gICAgICAgICAgICBpZGVudGlmaWVySGFzaGVzLmFwcGVuZChjbGFzc05hbWVzW2ld
LmltcGwoKS0+ZXhpc3RpbmdIYXNoKCkgKiBDbGFzc0F0dHJpYnV0ZVNhbHQpOwotICAgIH0KLX0K
LQotdm9pZCBTZWxlY3RvckNoZWNrZXI6OnB1c2hQYXJlbnRTdGFja0ZyYW1lKEVsZW1lbnQqIHBh
cmVudCkKLXsKLSAgICBBU1NFUlQobV9hbmNlc3RvcklkZW50aWZpZXJGaWx0ZXIpOwotICAgIEFT
U0VSVChtX3BhcmVudFN0YWNrLmlzRW1wdHkoKSB8fCBtX3BhcmVudFN0YWNrLmxhc3QoKS5lbGVt
ZW50ID09IHBhcmVudC0+cGFyZW50T3JIb3N0RWxlbWVudCgpKTsKLSAgICBBU1NFUlQoIW1fcGFy
ZW50U3RhY2suaXNFbXB0eSgpIHx8ICFwYXJlbnQtPnBhcmVudE9ySG9zdEVsZW1lbnQoKSk7Ci0g
ICAgbV9wYXJlbnRTdGFjay5hcHBlbmQoUGFyZW50U3RhY2tGcmFtZShwYXJlbnQpKTsKLSAgICBQ
YXJlbnRTdGFja0ZyYW1lJiBwYXJlbnRGcmFtZSA9IG1fcGFyZW50U3RhY2subGFzdCgpOwotICAg
IC8vIE1peCB0YWdzLCBjbGFzcyBuYW1lcyBhbmQgaWRzIGludG8gc29tZSBzb3J0IG9mIHdlaXJk
IGJvdWlsbGFiYWlzc2UuCi0gICAgLy8gVGhlIGZpbHRlciBpcyB1c2VkIGZvciBmYXN0IHJlamVj
dGlvbiBvZiBjaGlsZCBhbmQgZGVzY2VuZGFudCBzZWxlY3RvcnMuCi0gICAgY29sbGVjdEVsZW1l
bnRJZGVudGlmaWVySGFzaGVzKHBhcmVudCwgcGFyZW50RnJhbWUuaWRlbnRpZmllckhhc2hlcyk7
Ci0gICAgc2l6ZV90IGNvdW50ID0gcGFyZW50RnJhbWUuaWRlbnRpZmllckhhc2hlcy5zaXplKCk7
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKQotICAgICAgICBtX2FuY2Vz
dG9ySWRlbnRpZmllckZpbHRlci0+YWRkKHBhcmVudEZyYW1lLmlkZW50aWZpZXJIYXNoZXNbaV0p
OwotfQotCi12b2lkIFNlbGVjdG9yQ2hlY2tlcjo6cG9wUGFyZW50U3RhY2tGcmFtZSgpCi17Ci0g
ICAgQVNTRVJUKCFtX3BhcmVudFN0YWNrLmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJUKG1fYW5jZXN0
b3JJZGVudGlmaWVyRmlsdGVyKTsKLSAgICBjb25zdCBQYXJlbnRTdGFja0ZyYW1lJiBwYXJlbnRG
cmFtZSA9IG1fcGFyZW50U3RhY2subGFzdCgpOwotICAgIHNpemVfdCBjb3VudCA9IHBhcmVudEZy
YW1lLmlkZW50aWZpZXJIYXNoZXMuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
Y291bnQ7ICsraSkKLSAgICAgICAgbV9hbmNlc3RvcklkZW50aWZpZXJGaWx0ZXItPnJlbW92ZShw
YXJlbnRGcmFtZS5pZGVudGlmaWVySGFzaGVzW2ldKTsKLSAgICBtX3BhcmVudFN0YWNrLnJlbW92
ZUxhc3QoKTsKLSAgICBpZiAobV9wYXJlbnRTdGFjay5pc0VtcHR5KCkpIHsKLSAgICAgICAgQVNT
RVJUKG1fYW5jZXN0b3JJZGVudGlmaWVyRmlsdGVyLT5saWtlbHlFbXB0eSgpKTsKLSAgICAgICAg
bV9hbmNlc3RvcklkZW50aWZpZXJGaWx0ZXIuY2xlYXIoKTsKLSAgICB9Ci19Ci0KLXZvaWQgU2Vs
ZWN0b3JDaGVja2VyOjpzZXR1cFBhcmVudFN0YWNrKEVsZW1lbnQqIHBhcmVudCkKLXsKLSAgICBB
U1NFUlQobV9wYXJlbnRTdGFjay5pc0VtcHR5KCkgPT0gIW1fYW5jZXN0b3JJZGVudGlmaWVyRmls
dGVyKTsKLSAgICAvLyBLaWxsIHdoYXRldmVyIHdlIHN0b3JlZCBiZWZvcmUuCi0gICAgbV9wYXJl
bnRTdGFjay5zaHJpbmsoMCk7Ci0gICAgbV9hbmNlc3RvcklkZW50aWZpZXJGaWx0ZXIgPSBhZG9w
dFB0cihuZXcgQmxvb21GaWx0ZXI8Ymxvb21GaWx0ZXJLZXlCaXRzPik7Ci0gICAgLy8gRmFzdCB2
ZXJzaW9uIGlmIHBhcmVudCBpcyBhIHJvb3QgZWxlbWVudDoKLSAgICBpZiAoIXBhcmVudC0+cGFy
ZW50T3JIb3N0Tm9kZSgpKSB7Ci0gICAgICAgIHB1c2hQYXJlbnRTdGFja0ZyYW1lKHBhcmVudCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gT3RoZXJ3aXNlIGNsaW1iIHVwIHRoZSB0
cmVlLgotICAgIFZlY3RvcjxFbGVtZW50KiwgMzA+IGFuY2VzdG9yczsKLSAgICBmb3IgKEVsZW1l
bnQqIGFuY2VzdG9yID0gcGFyZW50OyBhbmNlc3RvcjsgYW5jZXN0b3IgPSBhbmNlc3Rvci0+cGFy
ZW50T3JIb3N0RWxlbWVudCgpKQotICAgICAgICBhbmNlc3RvcnMuYXBwZW5kKGFuY2VzdG9yKTsK
LSAgICBmb3IgKHNpemVfdCBuID0gYW5jZXN0b3JzLnNpemUoKTsgbjsgLS1uKQotICAgICAgICBw
dXNoUGFyZW50U3RhY2tGcmFtZShhbmNlc3RvcnNbbiAtIDFdKTsKLX0KLQotdm9pZCBTZWxlY3Rv
ckNoZWNrZXI6OnB1c2hQYXJlbnQoRWxlbWVudCogcGFyZW50KQotewotICAgIEFTU0VSVChtX2Fu
Y2VzdG9ySWRlbnRpZmllckZpbHRlcik7Ci0gICAgLy8gV2UgbWF5IGdldCBpbnZva2VkIGZvciBz
b21lIHJhbmRvbSBlbGVtZW50cyBpbiBzb21lIHdhY2t5IGNhc2VzIGR1cmluZyBzdHlsZSByZXNv
bHZlLgotICAgIC8vIFBhdXNlIG1haW50YWluaW5nIHRoZSBzdGFjayBpbiB0aGlzIGNhc2UuCi0g
ICAgaWYgKG1fcGFyZW50U3RhY2subGFzdCgpLmVsZW1lbnQgIT0gcGFyZW50LT5wYXJlbnRPckhv
c3RFbGVtZW50KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBwdXNoUGFyZW50U3RhY2tGcmFtZShw
YXJlbnQpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgY29sbGVjdERlc2NlbmRhbnRTZWxlY3Rv
cklkZW50aWZpZXJIYXNoZXMoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCB1bnNpZ25lZCom
IGhhc2gsIGNvbnN0IHVuc2lnbmVkKiBlbmQpCi17Ci0gICAgc3dpdGNoIChzZWxlY3Rvci0+bV9t
YXRjaCkgewotICAgIGNhc2UgQ1NTU2VsZWN0b3I6OklkOgotICAgICAgICBpZiAoIXNlbGVjdG9y
LT52YWx1ZSgpLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICgqaGFzaCsrKSA9IHNlbGVjdG9yLT52
YWx1ZSgpLmltcGwoKS0+ZXhpc3RpbmdIYXNoKCkgKiBJZEF0dHJpYnV0ZVNhbHQ7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkNsYXNzOgotICAgICAgICBpZiAoIXNlbGVj
dG9yLT52YWx1ZSgpLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICgqaGFzaCsrKSA9IHNlbGVjdG9y
LT52YWx1ZSgpLmltcGwoKS0+ZXhpc3RpbmdIYXNoKCkgKiBDbGFzc0F0dHJpYnV0ZVNhbHQ7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBp
ZiAoaGFzaCA9PSBlbmQpCi0gICAgICAgIHJldHVybjsKLSAgICBjb25zdCBBdG9taWNTdHJpbmcm
IGxvY2FsTmFtZSA9IHNlbGVjdG9yLT50YWcoKS5sb2NhbE5hbWUoKTsKLSAgICBpZiAobG9jYWxO
YW1lICE9IHN0YXJBdG9tKQotICAgICAgICAoKmhhc2grKykgPSBsb2NhbE5hbWUuaW1wbCgpLT5l
eGlzdGluZ0hhc2goKSAqIFRhZ05hbWVTYWx0OwotfQotCi12b2lkIFNlbGVjdG9yQ2hlY2tlcjo6
Y29sbGVjdElkZW50aWZpZXJIYXNoZXMoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCB1bnNp
Z25lZCogaWRlbnRpZmllckhhc2hlcywgdW5zaWduZWQgbWF4aW11bUlkZW50aWZpZXJDb3VudCkK
LXsKLSAgICB1bnNpZ25lZCogaGFzaCA9IGlkZW50aWZpZXJIYXNoZXM7Ci0gICAgdW5zaWduZWQq
IGVuZCA9IGlkZW50aWZpZXJIYXNoZXMgKyBtYXhpbXVtSWRlbnRpZmllckNvdW50OwotICAgIENT
U1NlbGVjdG9yOjpSZWxhdGlvbiByZWxhdGlvbiA9IHNlbGVjdG9yLT5yZWxhdGlvbigpOwotCi0g
ICAgLy8gU2tpcCB0aGUgdG9wbW9zdCBzZWxlY3Rvci4gSXQgaXMgaGFuZGxlZCBxdWlja2x5IGJ5
IHRoZSBydWxlIGhhc2hlcy4KLSAgICBib29sIHNraXBPdmVyU3Vic2VsZWN0b3JzID0gdHJ1ZTsK
LSAgICBmb3IgKHNlbGVjdG9yID0gc2VsZWN0b3ItPnRhZ0hpc3RvcnkoKTsgc2VsZWN0b3I7IHNl
bGVjdG9yID0gc2VsZWN0b3ItPnRhZ0hpc3RvcnkoKSkgewotICAgICAgICAvLyBPbmx5IGNvbGxl
Y3QgaWRlbnRpZmllcnMgdGhhdCBtYXRjaCBhbmNlc3RvcnMuCi0gICAgICAgIHN3aXRjaCAocmVs
YXRpb24pIHsKLSAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6U3ViU2VsZWN0b3I6Ci0gICAgICAg
ICAgICBpZiAoIXNraXBPdmVyU3Vic2VsZWN0b3JzKQotICAgICAgICAgICAgICAgIGNvbGxlY3RE
ZXNjZW5kYW50U2VsZWN0b3JJZGVudGlmaWVySGFzaGVzKHNlbGVjdG9yLCBoYXNoLCBlbmQpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkRpcmVjdEFkamFj
ZW50OgotICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpJbmRpcmVjdEFkamFjZW50OgotICAgICAg
ICBjYXNlIENTU1NlbGVjdG9yOjpTaGFkb3dEZXNjZW5kYW50OgotICAgICAgICAgICAgc2tpcE92
ZXJTdWJzZWxlY3RvcnMgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
Q1NTU2VsZWN0b3I6OkRlc2NlbmRhbnQ6Ci0gICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkNoaWxk
OgotICAgICAgICAgICAgc2tpcE92ZXJTdWJzZWxlY3RvcnMgPSBmYWxzZTsKLSAgICAgICAgICAg
IGNvbGxlY3REZXNjZW5kYW50U2VsZWN0b3JJZGVudGlmaWVySGFzaGVzKHNlbGVjdG9yLCBoYXNo
LCBlbmQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGhhc2gg
PT0gZW5kKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICByZWxhdGlvbiA9IHNlbGVjdG9y
LT5yZWxhdGlvbigpOwotICAgIH0KLSAgICAqaGFzaCA9IDA7Ci19Ci0KIHN0YXRpYyBpbmxpbmUg
Y29uc3QgQXRvbWljU3RyaW5nKiBsaW5rQXR0cmlidXRlKEVsZW1lbnQqIGVsZW1lbnQpCiB7CiAg
ICAgaWYgKCFlbGVtZW50LT5pc0xpbmsoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9TZWxlY3RvckNoZWNrZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIu
aAppbmRleCA5YmRiNjY5YjI0NmVlNjQzZDVlMmVlMjJiNWExYTI0ZWUwOTE4ZTZhLi44NDQ1YzYy
NWMwMjA3N2MxYzY2MzVmZDg2YWMyOGY1Y2M2N2VmMGRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVj
dG9yQ2hlY2tlci5oCkBAIC0zNSw3ICszNSw2IEBACiAjaW5jbHVkZSAiUmVuZGVyU3R5bGVDb25z
dGFudHMuaCIKICNpbmNsdWRlICJTcGFjZVNwbGl0U3RyaW5nLmgiCiAjaW5jbHVkZSAiU3R5bGVk
RWxlbWVudC5oIgotI2luY2x1ZGUgPHd0Zi9CbG9vbUZpbHRlci5oPgogI2luY2x1ZGUgPHd0Zi9I
YXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC04OSwxNiArODgsNiBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIGJvb2wgaXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IoY29uc3QgQ1NT
U2VsZWN0b3IqKTsKICAgICBib29sIGZhc3RDaGVja1NlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9y
KiwgY29uc3QgRWxlbWVudCopIGNvbnN0OwogCi0gICAgdGVtcGxhdGUgPHVuc2lnbmVkIG1heGlt
dW1JZGVudGlmaWVyQ291bnQ+Ci0gICAgaW5saW5lIGJvb2wgZmFzdFJlamVjdFNlbGVjdG9yKGNv
bnN0IHVuc2lnbmVkKiBpZGVudGlmaWVySGFzaGVzKSBjb25zdDsKLSAgICBzdGF0aWMgdm9pZCBj
b2xsZWN0SWRlbnRpZmllckhhc2hlcyhjb25zdCBDU1NTZWxlY3RvciosIHVuc2lnbmVkKiBpZGVu
dGlmaWVySGFzaGVzLCB1bnNpZ25lZCBtYXhpbXVtSWRlbnRpZmllckNvdW50KTsKLQotICAgIHZv
aWQgc2V0dXBQYXJlbnRTdGFjayhFbGVtZW50KiBwYXJlbnQpOwotICAgIHZvaWQgcHVzaFBhcmVu
dChFbGVtZW50KiBwYXJlbnQpOwotICAgIHZvaWQgcG9wUGFyZW50KCkgeyBwb3BQYXJlbnRTdGFj
a0ZyYW1lKCk7IH0KLSAgICBib29sIHBhcmVudFN0YWNrSXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJu
IG1fcGFyZW50U3RhY2suaXNFbXB0eSgpOyB9Ci0gICAgYm9vbCBwYXJlbnRTdGFja0lzQ29uc2lz
dGVudChjb25zdCBDb250YWluZXJOb2RlKiBwYXJlbnROb2RlKSBjb25zdCB7IHJldHVybiAhbV9w
YXJlbnRTdGFjay5pc0VtcHR5KCkgJiYgbV9wYXJlbnRTdGFjay5sYXN0KCkuZWxlbWVudCA9PSBw
YXJlbnROb2RlOyB9Ci0KICAgICBFSW5zaWRlTGluayBkZXRlcm1pbmVMaW5rU3RhdGUoRWxlbWVu
dCopIGNvbnN0OwogICAgIHZvaWQgYWxsVmlzaXRlZFN0YXRlQ2hhbmdlZCgpOwogICAgIHZvaWQg
dmlzaXRlZFN0YXRlQ2hhbmdlZChMaW5rSGFzaCB2aXNpdGVkSGFzaCk7CkBAIC0xMjgsMjYgKzEx
NywxMSBAQCBwcml2YXRlOgogCiAgICAgRUluc2lkZUxpbmsgZGV0ZXJtaW5lTGlua1N0YXRlU2xv
d0Nhc2UoRWxlbWVudCopIGNvbnN0OwogCi0gICAgdm9pZCBwdXNoUGFyZW50U3RhY2tGcmFtZShF
bGVtZW50KiBwYXJlbnQpOwotICAgIHZvaWQgcG9wUGFyZW50U3RhY2tGcmFtZSgpOwotCiAgICAg
RG9jdW1lbnQqIG1fZG9jdW1lbnQ7CiAgICAgYm9vbCBtX3N0cmljdFBhcnNpbmc7CiAgICAgYm9v
bCBtX2RvY3VtZW50SXNIVE1MOwogICAgIE1vZGUgbV9tb2RlOwogICAgIG11dGFibGUgSGFzaFNl
dDxMaW5rSGFzaCwgTGlua0hhc2hIYXNoPiBtX2xpbmtzQ2hlY2tlZEZvclZpc2l0ZWRTdGF0ZTsK
LQotICAgIHN0cnVjdCBQYXJlbnRTdGFja0ZyYW1lIHsKLSAgICAgICAgUGFyZW50U3RhY2tGcmFt
ZSgpIDogZWxlbWVudCgwKSB7IH0KLSAgICAgICAgUGFyZW50U3RhY2tGcmFtZShFbGVtZW50KiBl
bGVtZW50KSA6IGVsZW1lbnQoZWxlbWVudCkgeyB9Ci0gICAgICAgIEVsZW1lbnQqIGVsZW1lbnQ7
Ci0gICAgICAgIFZlY3Rvcjx1bnNpZ25lZCwgND4gaWRlbnRpZmllckhhc2hlczsKLSAgICB9Owot
ICAgIFZlY3RvcjxQYXJlbnRTdGFja0ZyYW1lPiBtX3BhcmVudFN0YWNrOwotCi0gICAgLy8gV2l0
aCAxMDAgdW5pcXVlIHN0cmluZ3MgaW4gdGhlIGZpbHRlciwgMl4xMiBzbG90IHRhYmxlIGhhcyBm
YWxzZSBwb3NpdGl2ZSByYXRlIG9mIH4wLjIlLgotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBi
bG9vbUZpbHRlcktleUJpdHMgPSAxMjsKLSAgICBPd25QdHI8Qmxvb21GaWx0ZXI8Ymxvb21GaWx0
ZXJLZXlCaXRzPiA+IG1fYW5jZXN0b3JJZGVudGlmaWVyRmlsdGVyOwogfTsKIAogaW5saW5lIEVJ
bnNpZGVMaW5rIFNlbGVjdG9yQ2hlY2tlcjo6ZGV0ZXJtaW5lTGlua1N0YXRlKEVsZW1lbnQqIGVs
ZW1lbnQpIGNvbnN0CkBAIC0xNTcsMTcgKzEzMSw2IEBAIGlubGluZSBFSW5zaWRlTGluayBTZWxl
Y3RvckNoZWNrZXI6OmRldGVybWluZUxpbmtTdGF0ZShFbGVtZW50KiBlbGVtZW50KSBjb25zdAog
ICAgIHJldHVybiBkZXRlcm1pbmVMaW5rU3RhdGVTbG93Q2FzZShlbGVtZW50KTsKIH0KIAotdGVt
cGxhdGUgPHVuc2lnbmVkIG1heGltdW1JZGVudGlmaWVyQ291bnQ+Ci1pbmxpbmUgYm9vbCBTZWxl
Y3RvckNoZWNrZXI6OmZhc3RSZWplY3RTZWxlY3Rvcihjb25zdCB1bnNpZ25lZCogaWRlbnRpZmll
ckhhc2hlcykgY29uc3QKLXsKLSAgICBBU1NFUlQobV9hbmNlc3RvcklkZW50aWZpZXJGaWx0ZXIp
OwotICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCBtYXhpbXVtSWRlbnRpZmllckNvdW50ICYm
IGlkZW50aWZpZXJIYXNoZXNbbl07ICsrbikgewotICAgICAgICBpZiAoIW1fYW5jZXN0b3JJZGVu
dGlmaWVyRmlsdGVyLT5tYXlDb250YWluKGlkZW50aWZpZXJIYXNoZXNbbl0pKQotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQogaW5saW5lIGJv
b2wgU2VsZWN0b3JDaGVja2VyOjppc0NvbW1vblBzZXVkb0NsYXNzU2VsZWN0b3IoY29uc3QgQ1NT
U2VsZWN0b3IqIHNlbGVjdG9yKQogewogICAgIGlmIChzZWxlY3Rvci0+bV9tYXRjaCAhPSBDU1NT
ZWxlY3Rvcjo6UHNldWRvQ2xhc3MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVSZXNvbHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKaW5k
ZXggZTgzNmYzMzA3Nzk0NjA0MThjOGUxNWEyYTRkOThkN2MzYzA1YzhjZC4uODJkNjQxZWJkZTA3
NWZlNTZkMDdkYjdhZmRmNzMxYTJjMjZjYzFmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL1N0eWxlUmVzb2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29s
dmVyLmNwcApAQCAtMjU4LDYgKzI1OCw3IEBAIHN0YXRpYyBTdHlsZVByb3BlcnR5U2V0KiByaWdo
dFRvTGVmdERlY2xhcmF0aW9uKCkKICAgICByZXR1cm4gcmlnaHRUb0xlZnREZWNsLmdldCgpOwog
fQogCisKIFN0eWxlUmVzb2x2ZXI6OlN0eWxlUmVzb2x2ZXIoRG9jdW1lbnQqIGRvY3VtZW50LCBi
b29sIG1hdGNoQXV0aG9yQW5kVXNlclN0eWxlcykKICAgICA6IG1faGFzVUFBcHBlYXJhbmNlKGZh
bHNlKQogICAgICwgbV9iYWNrZ3JvdW5kRGF0YShCYWNrZ3JvdW5kRmlsbExheWVyKQpAQCAtNDA1
LDEwICs0MDYsMTAgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpwdXNoUGFyZW50RWxlbWVudChFbGVt
ZW50KiBwYXJlbnQpCiAgICAgLy8gc3R5bGUgcmVjYWxjIGluIHRoZSBtaWRkbGUgb2YgdHJlZSBi
dWlsZGluZy4gV2UgbWF5IGFsc28gYmUgaW52b2tlZCBmcm9tIHNvbWV3aGVyZSB3aXRoaW4gdGhl
IHRyZWUuCiAgICAgLy8gUmVzZXQgdGhlIHN0YWNrIGluIHRoaXMgY2FzZSwgb3IgaWYgd2Ugc2Vl
IGEgbmV3IHJvb3QgZWxlbWVudC4KICAgICAvLyBPdGhlcndpc2UganVzdCBwdXNoIHRoZSBuZXcg
cGFyZW50LgotICAgIGlmICghcGFyZW50c1BhcmVudCB8fCBtX2NoZWNrZXIucGFyZW50U3RhY2tJ
c0VtcHR5KCkpCi0gICAgICAgIG1fY2hlY2tlci5zZXR1cFBhcmVudFN0YWNrKHBhcmVudCk7Cisg
ICAgaWYgKCFwYXJlbnRzUGFyZW50IHx8IG1fZmlsdGVyLnBhcmVudFN0YWNrSXNFbXB0eSgpKQor
ICAgICAgICBtX2ZpbHRlci5zZXR1cFBhcmVudFN0YWNrKHBhcmVudCk7CiAgICAgZWxzZQotICAg
ICAgICBtX2NoZWNrZXIucHVzaFBhcmVudChwYXJlbnQpOworICAgICAgICBtX2ZpbHRlci5wdXNo
UGFyZW50KHBhcmVudCk7CiAKICAgICAvLyBOb3RlOiBXZSBtdXN0bid0IHNraXAgU2hhZG93Um9v
dCBub2RlcyBmb3IgdGhlIHNjb3BlIHN0YWNrLgogICAgIGlmIChtX3Njb3BlUmVzb2x2ZXIpCkBA
IC00MTksOCArNDIwLDggQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpwb3BQYXJlbnRFbGVtZW50KEVs
ZW1lbnQqIHBhcmVudCkKIHsKICAgICAvLyBOb3RlIHRoYXQgd2UgbWF5IGdldCBpbnZva2VkIGZv
ciBzb21lIHJhbmRvbSBlbGVtZW50cyBpbiBzb21lIHdhY2t5IGNhc2VzIGR1cmluZyBzdHlsZSBy
ZXNvbHZlLgogICAgIC8vIFBhdXNlIG1haW50YWluaW5nIHRoZSBzdGFjayBpbiB0aGlzIGNhc2Uu
Ci0gICAgaWYgKG1fY2hlY2tlci5wYXJlbnRTdGFja0lzQ29uc2lzdGVudChwYXJlbnQpKQotICAg
ICAgICBtX2NoZWNrZXIucG9wUGFyZW50KCk7CisgICAgaWYgKG1fZmlsdGVyLnBhcmVudFN0YWNr
SXNDb25zaXN0ZW50KHBhcmVudCkpCisgICAgICAgIG1fZmlsdGVyLnBvcFBhcmVudCgpOwogICAg
IGlmIChtX3Njb3BlUmVzb2x2ZXIpCiAgICAgICAgIG1fc2NvcGVSZXNvbHZlci0+cG9wKHBhcmVu
dCk7CiB9CkBAIC04NDMsMTIgKzg0NCwxMiBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RN
YXRjaGluZ1J1bGVzRm9yTGlzdChjb25zdCBWZWN0b3I8UnVsZURhdGE+KiBydWxlcywgaQogCiAg
ICAgLy8gSW4gc29tZSBjYXNlcyB3ZSBtYXkgZW5kIHVwIGxvb2tpbmcgdXAgc3R5bGUgZm9yIHJh
bmRvbSBlbGVtZW50cyBpbiB0aGUgbWlkZGxlIG9mIGEgcmVjdXJzaXZlIHRyZWUgcmVzb2x2ZS4K
ICAgICAvLyBBbmNlc3RvciBpZGVudGlmaWVyIGZpbHRlciB3b24ndCBiZSB1cC10by1kYXRlIGlu
IHRoYXQgY2FzZSBhbmQgd2UgY2FuJ3QgdXNlIHRoZSBmYXN0IHBhdGguCi0gICAgYm9vbCBjYW5V
c2VGYXN0UmVqZWN0ID0gbV9jaGVja2VyLnBhcmVudFN0YWNrSXNDb25zaXN0ZW50KG1fcGFyZW50
Tm9kZSk7CisgICAgYm9vbCBjYW5Vc2VGYXN0UmVqZWN0ID0gbV9maWx0ZXIucGFyZW50U3RhY2tJ
c0NvbnNpc3RlbnQobV9wYXJlbnROb2RlKTsKIAogICAgIHVuc2lnbmVkIHNpemUgPSBydWxlcy0+
c2l6ZSgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKICAgICAg
ICAgY29uc3QgUnVsZURhdGEmIHJ1bGVEYXRhID0gcnVsZXMtPmF0KGkpOwotICAgICAgICBpZiAo
Y2FuVXNlRmFzdFJlamVjdCAmJiBtX2NoZWNrZXIuZmFzdFJlamVjdFNlbGVjdG9yPFJ1bGVEYXRh
OjptYXhpbXVtSWRlbnRpZmllckNvdW50PihydWxlRGF0YS5kZXNjZW5kYW50U2VsZWN0b3JJZGVu
dGlmaWVySGFzaGVzKCkpKQorICAgICAgICBpZiAoY2FuVXNlRmFzdFJlamVjdCAmJiBtX2ZpbHRl
ci5mYXN0UmVqZWN0U2VsZWN0b3I8UnVsZURhdGE6Om1heGltdW1JZGVudGlmaWVyQ291bnQ+KHJ1
bGVEYXRhLmRlc2NlbmRhbnRTZWxlY3RvcklkZW50aWZpZXJIYXNoZXMoKSkpCiAgICAgICAgICAg
ICBjb250aW51ZTsKIAogICAgICAgICBTdHlsZVJ1bGUqIHJ1bGUgPSBydWxlRGF0YS5ydWxlKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oIGIvU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAppbmRleCA5N2JjZjE2OTQwODNlMGEyNmFkZDQ2
YWY0YTk5OGQ1OGY1NGRiNzZlLi5iMGJkMmJhMjNiOWFiYzQ3NDUxYjVjZDU0NmFmZTkzYzcwZWFi
ZjVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKQEAgLTMxLDYgKzMxLDcgQEAKICNp
bmNsdWRlICJSdWxlRmVhdHVyZS5oIgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMu
aCIKICNpbmNsdWRlICJTZWxlY3RvckNoZWNrZXIuaCIKKyNpbmNsdWRlICJTZWxlY3RvckZpbHRl
ci5oIgogI2luY2x1ZGUgIlN0eWxlSW5oZXJpdGVkRGF0YS5oIgogI2luY2x1ZGUgIlN0eWxlU2Nv
cGVSZXNvbHZlci5oIgogI2luY2x1ZGUgIlZpZXdwb3J0U3R5bGVSZXNvbHZlci5oIgpAQCAtMTMw
LDYgKzEzMSw3IEBAIGVudW0gUnVsZU1hdGNoaW5nQmVoYXZpb3IgewogICAgIE1hdGNoT25seVVz
ZXJBZ2VudFJ1bGVzLAogfTsKIAorCiAvLyBUaGlzIGNsYXNzIHNlbGVjdHMgYSBSZW5kZXJTdHls
ZSBmb3IgYSBnaXZlbiBlbGVtZW50IGJhc2VkIG9uIGEgY29sbGVjdGlvbiBvZiBzdHlsZXNoZWV0
cy4KIGNsYXNzIFN0eWxlUmVzb2x2ZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN0eWxl
UmVzb2x2ZXIpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTQ5MSw2ICs0OTMsNyBAQCBw
cml2YXRlOgogICAgIFBzZXVkb0lkIG1fcHNldWRvU3R5bGU7CiAKICAgICBTZWxlY3RvckNoZWNr
ZXIgbV9jaGVja2VyOworICAgIFNlbGVjdG9yRmlsdGVyIG1fZmlsdGVyOwogCiAgICAgUmVmUHRy
PFJlbmRlclN0eWxlPiBtX3N0eWxlOwogICAgIFJlbmRlclN0eWxlKiBtX3BhcmVudFN0eWxlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180567</attachid>
            <date>2012-12-21 15:55:54 -0800</date>
            <delta_ts>2012-12-23 19:59:45 -0800</delta_ts>
            <desc>Now with actual files.</desc>
            <filename>bug-105660-20121221155309.patch</filename>
            <type>text/plain</type>
            <size>33270</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM4Mzk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWEwNDA0ZjEwNTAwN2Rj
ODA0N2JiZDA3ZjYxZDdlYTYyNjM1ZTAzZi4uYWEwNGJiN2M0Zjc0MzNiNjE3NWIxMWFlZTQ1ZjEz
NjVjYTMyMzk5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDEyLTEyLTIxICBEaW1p
dHJpIEdsYXprb3YgIDxkZ2xhemtvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgU3BsaXQgZmFz
dC1yZWplY3Rpb24gZmlsdGVyIGxvZ2ljIG9mZiBTZWxlY3RvckNoZWNrZXIuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDU2NjAKKworICAgICAgICBU
aGUgYXdlc29tZSBCbG9vbSBmaWx0ZXIgYW5kIHBhcmVudCBzdGFjayBsb2dpYyBkb24ndCBuZWVk
IHRvIGJlIGluIFNlbGVjdG9yQ2hlY2tlci4gVGhleSBuaWNlbHkgYWJzdHJhY3Qgb3V0CisgICAg
ICAgIGludG8gdGhlaXIgb3duIHByZXR0eSB0aGluZywgbmFtZWQgdGhlcmVieSBTZWxlY3RvckZp
bHRlci4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBO
byBjaGFuZ2UgaW4gZnVuY3Rpb25hbGl0eSwgY292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKwor
ICAgICAgICAqIENNYWtlTGlzdHMudHh0OiBBZGRlZCBTZWxlY3RvckZpbHRlciB0byBidWlsZCBz
eXN0ZW1zLgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06IERpdHRvLgorICAgICAgICAq
IFRhcmdldC5wcmk6IERpdHRvLgorICAgICAgICAqIFdlYkNvcmUuZ3lwaTogRGl0dG8uCisgICAg
ICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBEaXR0by4KKyAgICAgICAg
KiBjc3MvQ1NTQWxsSW5PbmUuY3BwOiBEaXR0by4KKyAgICAgICAgKiBjc3MvUnVsZVNldC5jcHA6
IENoYW5nZWQgdG8gdXNlIFNlbGVjdG9yRmlsdGVyLgorICAgICAgICAoV2ViQ29yZTo6UnVsZURh
dGE6OlJ1bGVEYXRhKTogRGl0dG8uCisgICAgICAgICogY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHA6
IERpdHRvLgorICAgICAgICAqIGNzcy9TZWxlY3RvckNoZWNrZXIuaDogRGl0dG8uCisgICAgICAg
IChTZWxlY3RvckNoZWNrZXIpOgorICAgICAgICAqIGNzcy9TdHlsZVJlc29sdmVyLmNwcDogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6
OnB1c2hQYXJlbnRFbGVtZW50KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjpwb3BQYXJlbnRFbGVtZW50KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJl
c29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QpOiBEaXR0by4KKyAgICAgICAgKiBj
c3MvU3R5bGVSZXNvbHZlci5oOgorICAgICAgICAoU3R5bGVSZXNvbHZlcik6IERpdHRvLgorCiAy
MDEyLTEyLTIxICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBV
cGRhdGUgbG9jYWxpemFibGUgc3RyaW5ncyBhcyBhIGZvbGxvd3VwIHRvIGh0dHA6Ly90cmFjLndl
YmtpdC5vcmcvY2hhbmdlc2V0LzEzODM4NwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01h
a2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCAxNzQ1OTMz
ZTRiYzI1ZDlmY2ZkZWI1YjliZjk3ODNlODhhZjZlOWVjLi5mMDA2NjM3ZDE5ZWY2NmIwYTJhODdi
OWNkN2RjM2I3YmY2NmE1ZGM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3Rz
LnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTA3OCw2ICsxMDc4
LDcgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIGNzcy9SdWxlU2V0LmgKICAgICBjc3MvUnVs
ZVNldC5jcHAKICAgICBjc3MvU2VsZWN0b3JDaGVja2VyLmNwcAorICAgIGNzcy9TZWxlY3RvckZp
bHRlci5jcHAKICAgICBjc3MvU2hhZG93VmFsdWUuY3BwCiAgICAgY3NzL1N0eWxlQnVpbGRlci5j
cHAKICAgICBjc3MvU3R5bGVJbnZhbGlkYXRpb25BbmFseXNpcy5jcHAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5saXN0LmFtCmluZGV4IDE4ZjA0ODc0YzA1ZjFmODQ3MmQzMDFkY2FlZjAzM2Y3NWYwNWMw
OGIuLmUyYmIxOWFiOTBhMjY3MWYzODk1NTQ5MzFjNWI1ZjgxZDU5MTJjMWIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUv
R05VbWFrZWZpbGUubGlzdC5hbQpAQCAtMjYzMSw2ICsyNjMxLDggQEAgd2ViY29yZV9zb3VyY2Vz
ICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9jc3MvUnVsZVNldC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9j
c3MvU2VsZWN0b3JDaGVja2VyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hl
Y2tlci5oIFwKKyAgICBTb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JGaWx0ZXIuY3BwIFwKKyAg
ICBTb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JGaWx0ZXIuaCBcCiAJU291cmNlL1dlYkNvcmUv
Y3NzL1NoYWRvd1ZhbHVlLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvY3NzL1NoYWRvd1ZhbHVlLmgg
XAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9TaWJsaW5nVHJhdmVyc2FsU3RyYXRlZ2llcy5oIFwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9UYXJn
ZXQucHJpCmluZGV4IGIxYmI4ZjNjOGI1ODc5MWIzZWNkNjcxMThhMWIxM2YxMDM0ZDRlZDEuLjIy
M2U3M2QwZGY5MDI1NTQ3YWIxMjY1MWYxMDA0ZGVjNTBkODU5ZjUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpAQCAt
MzA2LDYgKzMwNiw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGNzcy9SdWxlRmVhdHVyZS5jcHAgXAog
ICAgIGNzcy9SdWxlU2V0LmNwcCBcCiAgICAgY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAgXAorICAg
IGNzcy9TZWxlY3RvckZpbHRlci5jcHAgXAogICAgIGNzcy9TaGFkb3dWYWx1ZS5jcHAgXAogICAg
IGNzcy9TdHlsZUJ1aWxkZXIuY3BwIFwKICAgICBjc3MvU3R5bGVJbnZhbGlkYXRpb25BbmFseXNp
cy5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDM2ODVhOTg4NDkzN2RkM2Y3MjEyZTIxNzZmYWYy
Njk4OTg2NWJhMGMuLmFjZGQyNzNhYTJkYjg5NTVlYmZkYjYyYWZlNGZjYTJhNzY4ZmVmODIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkKQEAgLTE1NDksNiArMTU0OSw4IEBACiAgICAgICAgICAgICAnY3NzL1NW
R0NTU1N0eWxlU2VsZWN0b3IuY3BwJywKICAgICAgICAgICAgICdjc3MvU2VsZWN0b3JDaGVja2Vy
LmNwcCcsCiAgICAgICAgICAgICAnY3NzL1NlbGVjdG9yQ2hlY2tlci5oJywKKyAgICAgICAgICAg
ICdjc3MvU2VsZWN0b3JGaWx0ZXIuY3BwJywKKyAgICAgICAgICAgICdjc3MvU2VsZWN0b3JGaWx0
ZXIuaCcsCiAgICAgICAgICAgICAnY3NzL1NoYWRvd1ZhbHVlLmNwcCcsCiAgICAgICAgICAgICAn
Y3NzL1NoYWRvd1ZhbHVlLmgnLAogICAgICAgICAgICAgJ2Nzcy9TaWJsaW5nVHJhdmVyc2FsU3Ry
YXRlZ2llcy5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagppbmRleCBjY2ZiODk0ZTVhYzJmYWU5ZjBkMzk0OTgyN2U1ZGIyZjkyY2IyYWY1
Li45Y2VmMjE0NTNiMWZlMmFjMjZjN2ZhZWU2MTA4NGYxOGJiMzU5MzI3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMDYwLDYg
KzEwNjAsOCBAQAogCQk0MTM4RDMzNjEyNDQwNTQ4MDAzMjNEMzMgLyogRXZlbnRDb250ZXh0LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxMzhEMzM0
MTI0NDA1NDgwMDMyM0QzMyAvKiBFdmVudENvbnRleHQuY3BwICovOyB9OwogCQk0MTRCODY3MzEz
QUQwNzRFMDBCNEIzNzMgLyogRmlsZUljb25Mb2FkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDE0Qjg2NzExM0FEMDc0RTAwQjRCMzczIC8qIEZp
bGVJY29uTG9hZGVyLmNwcCAqLzsgfTsKIAkJNDE0Qjg2NzQxM0FEMDc0RTAwQjRCMzczIC8qIEZp
bGVJY29uTG9hZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0MTRCODY3MjEzQUQwNzRFMDBCNEIzNzMgLyogRmlsZUljb25Mb2FkZXIuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk0MTUwNzE1NzE2ODUw
NjczMDBDM0M3QjMgLyogU2VsZWN0b3JGaWx0ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDE1MDcxNTUxNjg1MDY3MzAwQzNDN0IzIC8qIFNlbGVj
dG9yRmlsdGVyLmNwcCAqLzsgfTsKKwkJNDE1MDcxNTgxNjg1MDY3MzAwQzNDN0IzIC8qIFNlbGVj
dG9yRmlsdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0MTUwNzE1NjE2ODUwNjczMDBDM0M3QjMgLyogU2VsZWN0b3JGaWx0ZXIuaCAqLzsgfTsKIAkJ
NDE1MEY5RjExMkI2RTBFNzAwMDhDODYwIC8qIFNsaWRlclRodW1iRWxlbWVudC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDE1MEY5RUYxMkI2RTBFNzAw
MDhDODYwIC8qIFNsaWRlclRodW1iRWxlbWVudC5oICovOyB9OwogCQk0MTUwRjlGMjEyQjZFMEU3
MDAwOEM4NjAgLyogU2xpZGVyVGh1bWJFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxNTBGOUYwMTJCNkUwRTcwMDA4Qzg2MCAvKiBTbGlk
ZXJUaHVtYkVsZW1lbnQuY3BwICovOyB9OwogCQk0MTU3QUY4MDEyRjFGQjA0MDBBOEM2RjUgLyog
TWVkaWFDb250cm9sc0FwcGxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0MTU3QUY3RTEyRjFGQjA0MDBBOEM2RjUgLyogTWVkaWFDb250cm9sc0FwcGxl
LmggKi87IH07CkBAIC04Mjg3LDYgKzgyODksOCBAQAogCQk0MTM4RDMzNDEyNDQwNTQ4MDAzMjNE
MzMgLyogRXZlbnRDb250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEV2ZW50Q29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxNEI4
NjcxMTNBRDA3NEUwMEI0QjM3MyAvKiBGaWxlSWNvbkxvYWRlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGaWxlSWNvbkxvYWRlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTQxNEI4NjcyMTNBRDA3NEUwMEI0QjM3MyAvKiBGaWxlSWNvbkxvYWRl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWxlSWNvbkxvYWRlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MTUwNzE1NTE2ODUwNjczMDBDM0M3QjMgLyog
U2VsZWN0b3JGaWx0ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U2VsZWN0b3JGaWx0ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MTUwNzE1
NjE2ODUwNjczMDBDM0M3QjMgLyogU2VsZWN0b3JGaWx0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU2VsZWN0b3JGaWx0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNDE1MEY5RUYxMkI2RTBFNzAwMDhDODYwIC8qIFNsaWRlclRodW1iRWxlbWVudC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTbGlkZXJUaHVtYkVsZW1lbnQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDE1MEY5RjAxMkI2RTBFNzAwMDhDODYwIC8qIFNs
aWRlclRodW1iRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBTbGlkZXJUaHVtYkVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0
MTU3QUY3RTEyRjFGQjA0MDBBOEM2RjUgLyogTWVkaWFDb250cm9sc0FwcGxlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhQ29udHJvbHNBcHBsZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMjE1NzcsNiArMjE1ODEsOCBAQAogCQkJCUE3OUJBREEwMTYx
RTdGM0YwMEMyRTY1MiAvKiBSdWxlU2V0LmggKi8sCiAJCQkJRTQ0QjRCQjExNDE2NTBENzAwMkIx
RDhCIC8qIFNlbGVjdG9yQ2hlY2tlci5jcHAgKi8sCiAJCQkJRTQ0QjRCQjIxNDE2NTBENzAwMkIx
RDhCIC8qIFNlbGVjdG9yQ2hlY2tlci5oICovLAorCQkJCTQxNTA3MTU1MTY4NTA2NzMwMEMzQzdC
MyAvKiBTZWxlY3RvckZpbHRlci5jcHAgKi8sCisJCQkJNDE1MDcxNTYxNjg1MDY3MzAwQzNDN0Iz
IC8qIFNlbGVjdG9yRmlsdGVyLmggKi8sCiAJCQkJQTgwRTZDQ0EwQTE5ODlDQTAwN0ZCOEM1IC8q
IFNoYWRvd1ZhbHVlLmNwcCAqLywKIAkJCQlBODBFNkNCRTBBMTk4OUNBMDA3RkI4QzUgLyogU2hh
ZG93VmFsdWUuaCAqLywKIAkJCQk1NzI4QkQ5RDE2MjUzNjk2MDBDNDBCNTYgLyogU2libGluZ1Ry
YXZlcnNhbFN0cmF0ZWdpZXMuaCAqLywKQEAgLTI1OTgyLDYgKzI1OTg4LDcgQEAKIAkJCQlGMzdB
NTYyMzE2NzlDRjdCMDBDNTcwNDYgLyogSGVhcEdyYXBoU2VyaWFsaXplci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZCODg5MEExNjdEMkZBMTAwMTBDREE1IC8qIFNjcm9sbGluZ1RyZWVTdGlja3lO
b2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkI4ODkwRjE2N0QzMDE2MDAxMENEQTUgLyogU2Ny
b2xsaW5nU3RhdGVTdGlja3lOb2RlLmggaW4gSGVhZGVycyAqLywKKwkJCQk0MTUwNzE1ODE2ODUw
NjczMDBDM0M3QjMgLyogU2VsZWN0b3JGaWx0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJ
CXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjkxMDAs
NiArMjkxMDcsNyBAQAogCQkJCTBGQjg4OTBCMTY3RDJGQTEwMDEwQ0RBNSAvKiBTY3JvbGxpbmdU
cmVlU3RpY2t5Tm9kZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTBGQjg4OTBFMTY3RDMwMTYwMDEw
Q0RBNSAvKiBTY3JvbGxpbmdTdGF0ZVN0aWNreU5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MjA5QjQ1NkIxNjc5NkE3RTAwRTU0RTRFIC8qIEpTQ3J5cHRvQ3VzdG9tLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTQxNTA3MTU3MTY4NTA2NzMwMEMzQzdCMyAvKiBTZWxlY3RvckZpbHRlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNz
aW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NBbGxJbk9u
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQWxsSW5PbmUuY3BwCmluZGV4IDQ3OWQ4ZGVm
NzhjOWQzNzQwOTdjMGM0ZTk5OTEzNzEzZTJhMjMxMDUuLjZiN2E4YjllZGZlOGNiYmU2YzAxYmZi
OTc1OWIzYWE0NDA1NjhlNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NBbGxJ
bk9uZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0FsbEluT25lLmNwcApAQCAtNjgs
NiArNjgsNyBAQAogI2luY2x1ZGUgIkNTU1ZhbHVlUG9vbC5jcHAiCiAjaW5jbHVkZSAiUnVsZUZl
YXR1cmUuY3BwIgogI2luY2x1ZGUgIlJ1bGVTZXQuY3BwIgorI2luY2x1ZGUgIlNlbGVjdG9yRmls
dGVyLmNwcCIKICNpbmNsdWRlICJTdHlsZUJ1aWxkZXIuY3BwIgogI2luY2x1ZGUgIlN0eWxlUHJv
cGVydHlTZXQuY3BwIgogI2luY2x1ZGUgIlN0eWxlUHJvcGVydHlTaG9ydGhhbmQuY3BwIgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1J1bGVTZXQuY3BwIGIvU291cmNlL1dlYkNvcmUv
Y3NzL1J1bGVTZXQuY3BwCmluZGV4IDM1MGEyNzE1ZGI3YjAzYjkwNmI5MzI2YzkwYjBhMTM5ZTIz
ZmUyMWEuLmU5NjY2NjVlY2RmM2EyZjhmMWQ3YTBiNmM4YjY1ODVmYmQ4Mzg1NzYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9SdWxlU2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvUnVsZVNldC5jcHAKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJNZWRpYVF1ZXJ5RXZh
bHVhdG9yLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJTZWxlY3Rv
ckNoZWNrZXIuaCIKKyNpbmNsdWRlICJTZWxlY3RvckZpbHRlci5oIgogI2luY2x1ZGUgIlN0eWxl
UmVzb2x2ZXIuaCIKICNpbmNsdWRlICJTdHlsZVJ1bGUuaCIKICNpbmNsdWRlICJTdHlsZVJ1bGVJ
bXBvcnQuaCIKQEAgLTEyMiw3ICsxMjMsNyBAQCBSdWxlRGF0YTo6UnVsZURhdGEoU3R5bGVSdWxl
KiBydWxlLCB1bnNpZ25lZCBzZWxlY3RvckluZGV4LCB1bnNpZ25lZCBwb3NpdGlvbiwgQQogewog
ICAgIEFTU0VSVChtX3Bvc2l0aW9uID09IHBvc2l0aW9uKTsKICAgICBBU1NFUlQobV9zZWxlY3Rv
ckluZGV4ID09IHNlbGVjdG9ySW5kZXgpOwotICAgIFNlbGVjdG9yQ2hlY2tlcjo6Y29sbGVjdElk
ZW50aWZpZXJIYXNoZXMoc2VsZWN0b3IoKSwgbV9kZXNjZW5kYW50U2VsZWN0b3JJZGVudGlmaWVy
SGFzaGVzLCBtYXhpbXVtSWRlbnRpZmllckNvdW50KTsKKyAgICBTZWxlY3RvckZpbHRlcjo6Y29s
bGVjdElkZW50aWZpZXJIYXNoZXMoc2VsZWN0b3IoKSwgbV9kZXNjZW5kYW50U2VsZWN0b3JJZGVu
dGlmaWVySGFzaGVzLCBtYXhpbXVtSWRlbnRpZmllckNvdW50KTsKIH0KIAogdm9pZCBSdWxlRGF0
YTo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykg
Y29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAKaW5kZXggNTdhMWQ5Zjk3
Mzg4MWZlNTViZWRmNTE0MDgwZDJmYTI2MDAzY2VlMS4uNDIxZWE5MGFiNDA3NmFjOTZiZDJjOWU4
ZDJhMmQxNzcyMTI1ZGY3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9y
Q2hlY2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAK
QEAgLTc3LDEzNiArNzcsNiBAQCBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tlcihEb2N1
bWVudCogZG9jdW1lbnQsIGJvb2wgc3RyaWN0UGFyc2luZykKIHsKIH0KIAotLy8gU2FsdCB0byBz
ZXBhcmF0ZSBvdGhlcndpc2UgaWRlbnRpY2FsIHN0cmluZyBoYXNoZXMgc28gYSBjbGFzcy1zZWxl
Y3RvciBsaWtlIC5hcnRpY2xlIHdvbid0IG1hdGNoIDxhcnRpY2xlPiBlbGVtZW50cy4KLWVudW0g
eyBUYWdOYW1lU2FsdCA9IDEzLCBJZEF0dHJpYnV0ZVNhbHQgPSAxNywgQ2xhc3NBdHRyaWJ1dGVT
YWx0ID0gMTkgfTsKLQotc3RhdGljIGlubGluZSB2b2lkIGNvbGxlY3RFbGVtZW50SWRlbnRpZmll
ckhhc2hlcyhjb25zdCBFbGVtZW50KiBlbGVtZW50LCBWZWN0b3I8dW5zaWduZWQsIDQ+JiBpZGVu
dGlmaWVySGFzaGVzKQotewotICAgIGlkZW50aWZpZXJIYXNoZXMuYXBwZW5kKGVsZW1lbnQtPmxv
Y2FsTmFtZSgpLmltcGwoKS0+ZXhpc3RpbmdIYXNoKCkgKiBUYWdOYW1lU2FsdCk7Ci0gICAgaWYg
KGVsZW1lbnQtPmhhc0lEKCkpCi0gICAgICAgIGlkZW50aWZpZXJIYXNoZXMuYXBwZW5kKGVsZW1l
bnQtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpLT5leGlzdGluZ0hhc2goKSAqIElkQXR0
cmlidXRlU2FsdCk7Ci0gICAgY29uc3QgU3R5bGVkRWxlbWVudCogc3R5bGVkRWxlbWVudCA9IGVs
ZW1lbnQtPmlzU3R5bGVkRWxlbWVudCgpID8gc3RhdGljX2Nhc3Q8Y29uc3QgU3R5bGVkRWxlbWVu
dCo+KGVsZW1lbnQpIDogMDsKLSAgICBpZiAoc3R5bGVkRWxlbWVudCAmJiBzdHlsZWRFbGVtZW50
LT5oYXNDbGFzcygpKSB7Ci0gICAgICAgIGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcmIGNsYXNzTmFt
ZXMgPSBzdHlsZWRFbGVtZW50LT5jbGFzc05hbWVzKCk7Ci0gICAgICAgIHNpemVfdCBjb3VudCA9
IGNsYXNzTmFtZXMuc2l6ZSgpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50
OyArK2kpCi0gICAgICAgICAgICBpZGVudGlmaWVySGFzaGVzLmFwcGVuZChjbGFzc05hbWVzW2ld
LmltcGwoKS0+ZXhpc3RpbmdIYXNoKCkgKiBDbGFzc0F0dHJpYnV0ZVNhbHQpOwotICAgIH0KLX0K
LQotdm9pZCBTZWxlY3RvckNoZWNrZXI6OnB1c2hQYXJlbnRTdGFja0ZyYW1lKEVsZW1lbnQqIHBh
cmVudCkKLXsKLSAgICBBU1NFUlQobV9hbmNlc3RvcklkZW50aWZpZXJGaWx0ZXIpOwotICAgIEFT
U0VSVChtX3BhcmVudFN0YWNrLmlzRW1wdHkoKSB8fCBtX3BhcmVudFN0YWNrLmxhc3QoKS5lbGVt
ZW50ID09IHBhcmVudC0+cGFyZW50T3JIb3N0RWxlbWVudCgpKTsKLSAgICBBU1NFUlQoIW1fcGFy
ZW50U3RhY2suaXNFbXB0eSgpIHx8ICFwYXJlbnQtPnBhcmVudE9ySG9zdEVsZW1lbnQoKSk7Ci0g
ICAgbV9wYXJlbnRTdGFjay5hcHBlbmQoUGFyZW50U3RhY2tGcmFtZShwYXJlbnQpKTsKLSAgICBQ
YXJlbnRTdGFja0ZyYW1lJiBwYXJlbnRGcmFtZSA9IG1fcGFyZW50U3RhY2subGFzdCgpOwotICAg
IC8vIE1peCB0YWdzLCBjbGFzcyBuYW1lcyBhbmQgaWRzIGludG8gc29tZSBzb3J0IG9mIHdlaXJk
IGJvdWlsbGFiYWlzc2UuCi0gICAgLy8gVGhlIGZpbHRlciBpcyB1c2VkIGZvciBmYXN0IHJlamVj
dGlvbiBvZiBjaGlsZCBhbmQgZGVzY2VuZGFudCBzZWxlY3RvcnMuCi0gICAgY29sbGVjdEVsZW1l
bnRJZGVudGlmaWVySGFzaGVzKHBhcmVudCwgcGFyZW50RnJhbWUuaWRlbnRpZmllckhhc2hlcyk7
Ci0gICAgc2l6ZV90IGNvdW50ID0gcGFyZW50RnJhbWUuaWRlbnRpZmllckhhc2hlcy5zaXplKCk7
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKQotICAgICAgICBtX2FuY2Vz
dG9ySWRlbnRpZmllckZpbHRlci0+YWRkKHBhcmVudEZyYW1lLmlkZW50aWZpZXJIYXNoZXNbaV0p
OwotfQotCi12b2lkIFNlbGVjdG9yQ2hlY2tlcjo6cG9wUGFyZW50U3RhY2tGcmFtZSgpCi17Ci0g
ICAgQVNTRVJUKCFtX3BhcmVudFN0YWNrLmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJUKG1fYW5jZXN0
b3JJZGVudGlmaWVyRmlsdGVyKTsKLSAgICBjb25zdCBQYXJlbnRTdGFja0ZyYW1lJiBwYXJlbnRG
cmFtZSA9IG1fcGFyZW50U3RhY2subGFzdCgpOwotICAgIHNpemVfdCBjb3VudCA9IHBhcmVudEZy
YW1lLmlkZW50aWZpZXJIYXNoZXMuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
Y291bnQ7ICsraSkKLSAgICAgICAgbV9hbmNlc3RvcklkZW50aWZpZXJGaWx0ZXItPnJlbW92ZShw
YXJlbnRGcmFtZS5pZGVudGlmaWVySGFzaGVzW2ldKTsKLSAgICBtX3BhcmVudFN0YWNrLnJlbW92
ZUxhc3QoKTsKLSAgICBpZiAobV9wYXJlbnRTdGFjay5pc0VtcHR5KCkpIHsKLSAgICAgICAgQVNT
RVJUKG1fYW5jZXN0b3JJZGVudGlmaWVyRmlsdGVyLT5saWtlbHlFbXB0eSgpKTsKLSAgICAgICAg
bV9hbmNlc3RvcklkZW50aWZpZXJGaWx0ZXIuY2xlYXIoKTsKLSAgICB9Ci19Ci0KLXZvaWQgU2Vs
ZWN0b3JDaGVja2VyOjpzZXR1cFBhcmVudFN0YWNrKEVsZW1lbnQqIHBhcmVudCkKLXsKLSAgICBB
U1NFUlQobV9wYXJlbnRTdGFjay5pc0VtcHR5KCkgPT0gIW1fYW5jZXN0b3JJZGVudGlmaWVyRmls
dGVyKTsKLSAgICAvLyBLaWxsIHdoYXRldmVyIHdlIHN0b3JlZCBiZWZvcmUuCi0gICAgbV9wYXJl
bnRTdGFjay5zaHJpbmsoMCk7Ci0gICAgbV9hbmNlc3RvcklkZW50aWZpZXJGaWx0ZXIgPSBhZG9w
dFB0cihuZXcgQmxvb21GaWx0ZXI8Ymxvb21GaWx0ZXJLZXlCaXRzPik7Ci0gICAgLy8gRmFzdCB2
ZXJzaW9uIGlmIHBhcmVudCBpcyBhIHJvb3QgZWxlbWVudDoKLSAgICBpZiAoIXBhcmVudC0+cGFy
ZW50T3JIb3N0Tm9kZSgpKSB7Ci0gICAgICAgIHB1c2hQYXJlbnRTdGFja0ZyYW1lKHBhcmVudCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gT3RoZXJ3aXNlIGNsaW1iIHVwIHRoZSB0
cmVlLgotICAgIFZlY3RvcjxFbGVtZW50KiwgMzA+IGFuY2VzdG9yczsKLSAgICBmb3IgKEVsZW1l
bnQqIGFuY2VzdG9yID0gcGFyZW50OyBhbmNlc3RvcjsgYW5jZXN0b3IgPSBhbmNlc3Rvci0+cGFy
ZW50T3JIb3N0RWxlbWVudCgpKQotICAgICAgICBhbmNlc3RvcnMuYXBwZW5kKGFuY2VzdG9yKTsK
LSAgICBmb3IgKHNpemVfdCBuID0gYW5jZXN0b3JzLnNpemUoKTsgbjsgLS1uKQotICAgICAgICBw
dXNoUGFyZW50U3RhY2tGcmFtZShhbmNlc3RvcnNbbiAtIDFdKTsKLX0KLQotdm9pZCBTZWxlY3Rv
ckNoZWNrZXI6OnB1c2hQYXJlbnQoRWxlbWVudCogcGFyZW50KQotewotICAgIEFTU0VSVChtX2Fu
Y2VzdG9ySWRlbnRpZmllckZpbHRlcik7Ci0gICAgLy8gV2UgbWF5IGdldCBpbnZva2VkIGZvciBz
b21lIHJhbmRvbSBlbGVtZW50cyBpbiBzb21lIHdhY2t5IGNhc2VzIGR1cmluZyBzdHlsZSByZXNv
bHZlLgotICAgIC8vIFBhdXNlIG1haW50YWluaW5nIHRoZSBzdGFjayBpbiB0aGlzIGNhc2UuCi0g
ICAgaWYgKG1fcGFyZW50U3RhY2subGFzdCgpLmVsZW1lbnQgIT0gcGFyZW50LT5wYXJlbnRPckhv
c3RFbGVtZW50KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBwdXNoUGFyZW50U3RhY2tGcmFtZShw
YXJlbnQpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgY29sbGVjdERlc2NlbmRhbnRTZWxlY3Rv
cklkZW50aWZpZXJIYXNoZXMoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCB1bnNpZ25lZCom
IGhhc2gsIGNvbnN0IHVuc2lnbmVkKiBlbmQpCi17Ci0gICAgc3dpdGNoIChzZWxlY3Rvci0+bV9t
YXRjaCkgewotICAgIGNhc2UgQ1NTU2VsZWN0b3I6OklkOgotICAgICAgICBpZiAoIXNlbGVjdG9y
LT52YWx1ZSgpLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICgqaGFzaCsrKSA9IHNlbGVjdG9yLT52
YWx1ZSgpLmltcGwoKS0+ZXhpc3RpbmdIYXNoKCkgKiBJZEF0dHJpYnV0ZVNhbHQ7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkNsYXNzOgotICAgICAgICBpZiAoIXNlbGVj
dG9yLT52YWx1ZSgpLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICgqaGFzaCsrKSA9IHNlbGVjdG9y
LT52YWx1ZSgpLmltcGwoKS0+ZXhpc3RpbmdIYXNoKCkgKiBDbGFzc0F0dHJpYnV0ZVNhbHQ7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBp
ZiAoaGFzaCA9PSBlbmQpCi0gICAgICAgIHJldHVybjsKLSAgICBjb25zdCBBdG9taWNTdHJpbmcm
IGxvY2FsTmFtZSA9IHNlbGVjdG9yLT50YWcoKS5sb2NhbE5hbWUoKTsKLSAgICBpZiAobG9jYWxO
YW1lICE9IHN0YXJBdG9tKQotICAgICAgICAoKmhhc2grKykgPSBsb2NhbE5hbWUuaW1wbCgpLT5l
eGlzdGluZ0hhc2goKSAqIFRhZ05hbWVTYWx0OwotfQotCi12b2lkIFNlbGVjdG9yQ2hlY2tlcjo6
Y29sbGVjdElkZW50aWZpZXJIYXNoZXMoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCB1bnNp
Z25lZCogaWRlbnRpZmllckhhc2hlcywgdW5zaWduZWQgbWF4aW11bUlkZW50aWZpZXJDb3VudCkK
LXsKLSAgICB1bnNpZ25lZCogaGFzaCA9IGlkZW50aWZpZXJIYXNoZXM7Ci0gICAgdW5zaWduZWQq
IGVuZCA9IGlkZW50aWZpZXJIYXNoZXMgKyBtYXhpbXVtSWRlbnRpZmllckNvdW50OwotICAgIENT
U1NlbGVjdG9yOjpSZWxhdGlvbiByZWxhdGlvbiA9IHNlbGVjdG9yLT5yZWxhdGlvbigpOwotCi0g
ICAgLy8gU2tpcCB0aGUgdG9wbW9zdCBzZWxlY3Rvci4gSXQgaXMgaGFuZGxlZCBxdWlja2x5IGJ5
IHRoZSBydWxlIGhhc2hlcy4KLSAgICBib29sIHNraXBPdmVyU3Vic2VsZWN0b3JzID0gdHJ1ZTsK
LSAgICBmb3IgKHNlbGVjdG9yID0gc2VsZWN0b3ItPnRhZ0hpc3RvcnkoKTsgc2VsZWN0b3I7IHNl
bGVjdG9yID0gc2VsZWN0b3ItPnRhZ0hpc3RvcnkoKSkgewotICAgICAgICAvLyBPbmx5IGNvbGxl
Y3QgaWRlbnRpZmllcnMgdGhhdCBtYXRjaCBhbmNlc3RvcnMuCi0gICAgICAgIHN3aXRjaCAocmVs
YXRpb24pIHsKLSAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6U3ViU2VsZWN0b3I6Ci0gICAgICAg
ICAgICBpZiAoIXNraXBPdmVyU3Vic2VsZWN0b3JzKQotICAgICAgICAgICAgICAgIGNvbGxlY3RE
ZXNjZW5kYW50U2VsZWN0b3JJZGVudGlmaWVySGFzaGVzKHNlbGVjdG9yLCBoYXNoLCBlbmQpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkRpcmVjdEFkamFj
ZW50OgotICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpJbmRpcmVjdEFkamFjZW50OgotICAgICAg
ICBjYXNlIENTU1NlbGVjdG9yOjpTaGFkb3dEZXNjZW5kYW50OgotICAgICAgICAgICAgc2tpcE92
ZXJTdWJzZWxlY3RvcnMgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
Q1NTU2VsZWN0b3I6OkRlc2NlbmRhbnQ6Ci0gICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkNoaWxk
OgotICAgICAgICAgICAgc2tpcE92ZXJTdWJzZWxlY3RvcnMgPSBmYWxzZTsKLSAgICAgICAgICAg
IGNvbGxlY3REZXNjZW5kYW50U2VsZWN0b3JJZGVudGlmaWVySGFzaGVzKHNlbGVjdG9yLCBoYXNo
LCBlbmQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGhhc2gg
PT0gZW5kKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICByZWxhdGlvbiA9IHNlbGVjdG9y
LT5yZWxhdGlvbigpOwotICAgIH0KLSAgICAqaGFzaCA9IDA7Ci19Ci0KIHN0YXRpYyBpbmxpbmUg
Y29uc3QgQXRvbWljU3RyaW5nKiBsaW5rQXR0cmlidXRlKEVsZW1lbnQqIGVsZW1lbnQpCiB7CiAg
ICAgaWYgKCFlbGVtZW50LT5pc0xpbmsoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9TZWxlY3RvckNoZWNrZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIu
aAppbmRleCA5YmRiNjY5YjI0NmVlNjQzZDVlMmVlMjJiNWExYTI0ZWUwOTE4ZTZhLi44NDQ1YzYy
NWMwMjA3N2MxYzY2MzVmZDg2YWMyOGY1Y2M2N2VmMGRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVj
dG9yQ2hlY2tlci5oCkBAIC0zNSw3ICszNSw2IEBACiAjaW5jbHVkZSAiUmVuZGVyU3R5bGVDb25z
dGFudHMuaCIKICNpbmNsdWRlICJTcGFjZVNwbGl0U3RyaW5nLmgiCiAjaW5jbHVkZSAiU3R5bGVk
RWxlbWVudC5oIgotI2luY2x1ZGUgPHd0Zi9CbG9vbUZpbHRlci5oPgogI2luY2x1ZGUgPHd0Zi9I
YXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC04OSwxNiArODgsNiBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIGJvb2wgaXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IoY29uc3QgQ1NT
U2VsZWN0b3IqKTsKICAgICBib29sIGZhc3RDaGVja1NlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9y
KiwgY29uc3QgRWxlbWVudCopIGNvbnN0OwogCi0gICAgdGVtcGxhdGUgPHVuc2lnbmVkIG1heGlt
dW1JZGVudGlmaWVyQ291bnQ+Ci0gICAgaW5saW5lIGJvb2wgZmFzdFJlamVjdFNlbGVjdG9yKGNv
bnN0IHVuc2lnbmVkKiBpZGVudGlmaWVySGFzaGVzKSBjb25zdDsKLSAgICBzdGF0aWMgdm9pZCBj
b2xsZWN0SWRlbnRpZmllckhhc2hlcyhjb25zdCBDU1NTZWxlY3RvciosIHVuc2lnbmVkKiBpZGVu
dGlmaWVySGFzaGVzLCB1bnNpZ25lZCBtYXhpbXVtSWRlbnRpZmllckNvdW50KTsKLQotICAgIHZv
aWQgc2V0dXBQYXJlbnRTdGFjayhFbGVtZW50KiBwYXJlbnQpOwotICAgIHZvaWQgcHVzaFBhcmVu
dChFbGVtZW50KiBwYXJlbnQpOwotICAgIHZvaWQgcG9wUGFyZW50KCkgeyBwb3BQYXJlbnRTdGFj
a0ZyYW1lKCk7IH0KLSAgICBib29sIHBhcmVudFN0YWNrSXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJu
IG1fcGFyZW50U3RhY2suaXNFbXB0eSgpOyB9Ci0gICAgYm9vbCBwYXJlbnRTdGFja0lzQ29uc2lz
dGVudChjb25zdCBDb250YWluZXJOb2RlKiBwYXJlbnROb2RlKSBjb25zdCB7IHJldHVybiAhbV9w
YXJlbnRTdGFjay5pc0VtcHR5KCkgJiYgbV9wYXJlbnRTdGFjay5sYXN0KCkuZWxlbWVudCA9PSBw
YXJlbnROb2RlOyB9Ci0KICAgICBFSW5zaWRlTGluayBkZXRlcm1pbmVMaW5rU3RhdGUoRWxlbWVu
dCopIGNvbnN0OwogICAgIHZvaWQgYWxsVmlzaXRlZFN0YXRlQ2hhbmdlZCgpOwogICAgIHZvaWQg
dmlzaXRlZFN0YXRlQ2hhbmdlZChMaW5rSGFzaCB2aXNpdGVkSGFzaCk7CkBAIC0xMjgsMjYgKzEx
NywxMSBAQCBwcml2YXRlOgogCiAgICAgRUluc2lkZUxpbmsgZGV0ZXJtaW5lTGlua1N0YXRlU2xv
d0Nhc2UoRWxlbWVudCopIGNvbnN0OwogCi0gICAgdm9pZCBwdXNoUGFyZW50U3RhY2tGcmFtZShF
bGVtZW50KiBwYXJlbnQpOwotICAgIHZvaWQgcG9wUGFyZW50U3RhY2tGcmFtZSgpOwotCiAgICAg
RG9jdW1lbnQqIG1fZG9jdW1lbnQ7CiAgICAgYm9vbCBtX3N0cmljdFBhcnNpbmc7CiAgICAgYm9v
bCBtX2RvY3VtZW50SXNIVE1MOwogICAgIE1vZGUgbV9tb2RlOwogICAgIG11dGFibGUgSGFzaFNl
dDxMaW5rSGFzaCwgTGlua0hhc2hIYXNoPiBtX2xpbmtzQ2hlY2tlZEZvclZpc2l0ZWRTdGF0ZTsK
LQotICAgIHN0cnVjdCBQYXJlbnRTdGFja0ZyYW1lIHsKLSAgICAgICAgUGFyZW50U3RhY2tGcmFt
ZSgpIDogZWxlbWVudCgwKSB7IH0KLSAgICAgICAgUGFyZW50U3RhY2tGcmFtZShFbGVtZW50KiBl
bGVtZW50KSA6IGVsZW1lbnQoZWxlbWVudCkgeyB9Ci0gICAgICAgIEVsZW1lbnQqIGVsZW1lbnQ7
Ci0gICAgICAgIFZlY3Rvcjx1bnNpZ25lZCwgND4gaWRlbnRpZmllckhhc2hlczsKLSAgICB9Owot
ICAgIFZlY3RvcjxQYXJlbnRTdGFja0ZyYW1lPiBtX3BhcmVudFN0YWNrOwotCi0gICAgLy8gV2l0
aCAxMDAgdW5pcXVlIHN0cmluZ3MgaW4gdGhlIGZpbHRlciwgMl4xMiBzbG90IHRhYmxlIGhhcyBm
YWxzZSBwb3NpdGl2ZSByYXRlIG9mIH4wLjIlLgotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBi
bG9vbUZpbHRlcktleUJpdHMgPSAxMjsKLSAgICBPd25QdHI8Qmxvb21GaWx0ZXI8Ymxvb21GaWx0
ZXJLZXlCaXRzPiA+IG1fYW5jZXN0b3JJZGVudGlmaWVyRmlsdGVyOwogfTsKIAogaW5saW5lIEVJ
bnNpZGVMaW5rIFNlbGVjdG9yQ2hlY2tlcjo6ZGV0ZXJtaW5lTGlua1N0YXRlKEVsZW1lbnQqIGVs
ZW1lbnQpIGNvbnN0CkBAIC0xNTcsMTcgKzEzMSw2IEBAIGlubGluZSBFSW5zaWRlTGluayBTZWxl
Y3RvckNoZWNrZXI6OmRldGVybWluZUxpbmtTdGF0ZShFbGVtZW50KiBlbGVtZW50KSBjb25zdAog
ICAgIHJldHVybiBkZXRlcm1pbmVMaW5rU3RhdGVTbG93Q2FzZShlbGVtZW50KTsKIH0KIAotdGVt
cGxhdGUgPHVuc2lnbmVkIG1heGltdW1JZGVudGlmaWVyQ291bnQ+Ci1pbmxpbmUgYm9vbCBTZWxl
Y3RvckNoZWNrZXI6OmZhc3RSZWplY3RTZWxlY3Rvcihjb25zdCB1bnNpZ25lZCogaWRlbnRpZmll
ckhhc2hlcykgY29uc3QKLXsKLSAgICBBU1NFUlQobV9hbmNlc3RvcklkZW50aWZpZXJGaWx0ZXIp
OwotICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCBtYXhpbXVtSWRlbnRpZmllckNvdW50ICYm
IGlkZW50aWZpZXJIYXNoZXNbbl07ICsrbikgewotICAgICAgICBpZiAoIW1fYW5jZXN0b3JJZGVu
dGlmaWVyRmlsdGVyLT5tYXlDb250YWluKGlkZW50aWZpZXJIYXNoZXNbbl0pKQotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQogaW5saW5lIGJv
b2wgU2VsZWN0b3JDaGVja2VyOjppc0NvbW1vblBzZXVkb0NsYXNzU2VsZWN0b3IoY29uc3QgQ1NT
U2VsZWN0b3IqIHNlbGVjdG9yKQogewogICAgIGlmIChzZWxlY3Rvci0+bV9tYXRjaCAhPSBDU1NT
ZWxlY3Rvcjo6UHNldWRvQ2xhc3MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2Vs
ZWN0b3JGaWx0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yRmlsdGVyLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5jZWFhNzY4MTQ5MDBjMGIzMWQzOTRjNGYyNmNjNGNiYjVlMzVlOGRjCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yRmlsdGVyLmNwcApAQCAt
MCwwICsxLDE2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9s
bEBrZGUub3JnKQorICogICAgICAgICAgIChDKSAyMDA0LTIwMDUgQWxsYW4gU2FuZGZlbGQgSmVu
c2VuIChrZGVAY2FyZXdvbGYuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IE5pY2hv
bGFzIFNoYW5rcyAod2Via2l0QG5pY2tzaGFua3MuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDA1
LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBBbGV4ZXkgUHJvc2t1cnlha292IDxh
cEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEVyaWMgU2VpZGVsIDxl
cmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgVG9yY2ggTW9iaWxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykK
KyAqIENvcHlyaWdodCAoYykgMjAxMSwgQ29kZSBBdXJvcmEgRm9ydW0uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTEu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNlbGVj
dG9yRmlsdGVyLmgiCisKKyNpbmNsdWRlICJDU1NTZWxlY3Rvci5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKKy8vIFNhbHQgdG8gc2VwYXJhdGUgb3RoZXJ3aXNlIGlkZW50aWNhbCBzdHJpbmcg
aGFzaGVzIHNvIGEgY2xhc3Mtc2VsZWN0b3IgbGlrZSAuYXJ0aWNsZSB3b24ndCBtYXRjaCA8YXJ0
aWNsZT4gZWxlbWVudHMuCitlbnVtIHsgVGFnTmFtZVNhbHQgPSAxMywgSWRBdHRyaWJ1dGVTYWx0
ID0gMTcsIENsYXNzQXR0cmlidXRlU2FsdCA9IDE5IH07CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBj
b2xsZWN0RWxlbWVudElkZW50aWZpZXJIYXNoZXMoY29uc3QgRWxlbWVudCogZWxlbWVudCwgVmVj
dG9yPHVuc2lnbmVkLCA0PiYgaWRlbnRpZmllckhhc2hlcykKK3sKKyAgICBpZGVudGlmaWVySGFz
aGVzLmFwcGVuZChlbGVtZW50LT5sb2NhbE5hbWUoKS5pbXBsKCktPmV4aXN0aW5nSGFzaCgpICog
VGFnTmFtZVNhbHQpOworICAgIGlmIChlbGVtZW50LT5oYXNJRCgpKQorICAgICAgICBpZGVudGlm
aWVySGFzaGVzLmFwcGVuZChlbGVtZW50LT5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmltcGwoKS0+
ZXhpc3RpbmdIYXNoKCkgKiBJZEF0dHJpYnV0ZVNhbHQpOworICAgIGNvbnN0IFN0eWxlZEVsZW1l
bnQqIHN0eWxlZEVsZW1lbnQgPSBlbGVtZW50LT5pc1N0eWxlZEVsZW1lbnQoKSA/IHN0YXRpY19j
YXN0PGNvbnN0IFN0eWxlZEVsZW1lbnQqPihlbGVtZW50KSA6IDA7CisgICAgaWYgKHN0eWxlZEVs
ZW1lbnQgJiYgc3R5bGVkRWxlbWVudC0+aGFzQ2xhc3MoKSkgeworICAgICAgICBjb25zdCBTcGFj
ZVNwbGl0U3RyaW5nJiBjbGFzc05hbWVzID0gc3R5bGVkRWxlbWVudC0+Y2xhc3NOYW1lcygpOwor
ICAgICAgICBzaXplX3QgY291bnQgPSBjbGFzc05hbWVzLnNpemUoKTsKKyAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAgICAgICAgaWRlbnRpZmllckhhc2hl
cy5hcHBlbmQoY2xhc3NOYW1lc1tpXS5pbXBsKCktPmV4aXN0aW5nSGFzaCgpICogQ2xhc3NBdHRy
aWJ1dGVTYWx0KTsKKyAgICB9Cit9CisKK3ZvaWQgU2VsZWN0b3JGaWx0ZXI6OnB1c2hQYXJlbnRT
dGFja0ZyYW1lKEVsZW1lbnQqIHBhcmVudCkKK3sKKyAgICBBU1NFUlQobV9hbmNlc3RvcklkZW50
aWZpZXJGaWx0ZXIpOworICAgIEFTU0VSVChtX3BhcmVudFN0YWNrLmlzRW1wdHkoKSB8fCBtX3Bh
cmVudFN0YWNrLmxhc3QoKS5lbGVtZW50ID09IHBhcmVudC0+cGFyZW50T3JIb3N0RWxlbWVudCgp
KTsKKyAgICBBU1NFUlQoIW1fcGFyZW50U3RhY2suaXNFbXB0eSgpIHx8ICFwYXJlbnQtPnBhcmVu
dE9ySG9zdEVsZW1lbnQoKSk7CisgICAgbV9wYXJlbnRTdGFjay5hcHBlbmQoUGFyZW50U3RhY2tG
cmFtZShwYXJlbnQpKTsKKyAgICBQYXJlbnRTdGFja0ZyYW1lJiBwYXJlbnRGcmFtZSA9IG1fcGFy
ZW50U3RhY2subGFzdCgpOworICAgIC8vIE1peCB0YWdzLCBjbGFzcyBuYW1lcyBhbmQgaWRzIGlu
dG8gc29tZSBzb3J0IG9mIHdlaXJkIGJvdWlsbGFiYWlzc2UuCisgICAgLy8gVGhlIGZpbHRlciBp
cyB1c2VkIGZvciBmYXN0IHJlamVjdGlvbiBvZiBjaGlsZCBhbmQgZGVzY2VuZGFudCBzZWxlY3Rv
cnMuCisgICAgY29sbGVjdEVsZW1lbnRJZGVudGlmaWVySGFzaGVzKHBhcmVudCwgcGFyZW50RnJh
bWUuaWRlbnRpZmllckhhc2hlcyk7CisgICAgc2l6ZV90IGNvdW50ID0gcGFyZW50RnJhbWUuaWRl
bnRpZmllckhhc2hlcy5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsg
KytpKQorICAgICAgICBtX2FuY2VzdG9ySWRlbnRpZmllckZpbHRlci0+YWRkKHBhcmVudEZyYW1l
LmlkZW50aWZpZXJIYXNoZXNbaV0pOworfQorCit2b2lkIFNlbGVjdG9yRmlsdGVyOjpwb3BQYXJl
bnRTdGFja0ZyYW1lKCkKK3sKKyAgICBBU1NFUlQoIW1fcGFyZW50U3RhY2suaXNFbXB0eSgpKTsK
KyAgICBBU1NFUlQobV9hbmNlc3RvcklkZW50aWZpZXJGaWx0ZXIpOworICAgIGNvbnN0IFBhcmVu
dFN0YWNrRnJhbWUmIHBhcmVudEZyYW1lID0gbV9wYXJlbnRTdGFjay5sYXN0KCk7CisgICAgc2l6
ZV90IGNvdW50ID0gcGFyZW50RnJhbWUuaWRlbnRpZmllckhhc2hlcy5zaXplKCk7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAgICBtX2FuY2VzdG9ySWRlbnRp
ZmllckZpbHRlci0+cmVtb3ZlKHBhcmVudEZyYW1lLmlkZW50aWZpZXJIYXNoZXNbaV0pOworICAg
IG1fcGFyZW50U3RhY2sucmVtb3ZlTGFzdCgpOworICAgIGlmIChtX3BhcmVudFN0YWNrLmlzRW1w
dHkoKSkgeworICAgICAgICBBU1NFUlQobV9hbmNlc3RvcklkZW50aWZpZXJGaWx0ZXItPmxpa2Vs
eUVtcHR5KCkpOworICAgICAgICBtX2FuY2VzdG9ySWRlbnRpZmllckZpbHRlci5jbGVhcigpOwor
ICAgIH0KK30KKwordm9pZCBTZWxlY3RvckZpbHRlcjo6c2V0dXBQYXJlbnRTdGFjayhFbGVtZW50
KiBwYXJlbnQpCit7CisgICAgQVNTRVJUKG1fcGFyZW50U3RhY2suaXNFbXB0eSgpID09ICFtX2Fu
Y2VzdG9ySWRlbnRpZmllckZpbHRlcik7CisgICAgLy8gS2lsbCB3aGF0ZXZlciB3ZSBzdG9yZWQg
YmVmb3JlLgorICAgIG1fcGFyZW50U3RhY2suc2hyaW5rKDApOworICAgIG1fYW5jZXN0b3JJZGVu
dGlmaWVyRmlsdGVyID0gYWRvcHRQdHIobmV3IEJsb29tRmlsdGVyPGJsb29tRmlsdGVyS2V5Qml0
cz4pOworICAgIC8vIEZhc3QgdmVyc2lvbiBpZiBwYXJlbnQgaXMgYSByb290IGVsZW1lbnQ6Cisg
ICAgaWYgKCFwYXJlbnQtPnBhcmVudE9ySG9zdE5vZGUoKSkgeworICAgICAgICBwdXNoUGFyZW50
U3RhY2tGcmFtZShwYXJlbnQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIC8vIE90aGVy
d2lzZSBjbGltYiB1cCB0aGUgdHJlZS4KKyAgICBWZWN0b3I8RWxlbWVudCosIDMwPiBhbmNlc3Rv
cnM7CisgICAgZm9yIChFbGVtZW50KiBhbmNlc3RvciA9IHBhcmVudDsgYW5jZXN0b3I7IGFuY2Vz
dG9yID0gYW5jZXN0b3ItPnBhcmVudE9ySG9zdEVsZW1lbnQoKSkKKyAgICAgICAgYW5jZXN0b3Jz
LmFwcGVuZChhbmNlc3Rvcik7CisgICAgZm9yIChzaXplX3QgbiA9IGFuY2VzdG9ycy5zaXplKCk7
IG47IC0tbikKKyAgICAgICAgcHVzaFBhcmVudFN0YWNrRnJhbWUoYW5jZXN0b3JzW24gLSAxXSk7
Cit9CisKK3ZvaWQgU2VsZWN0b3JGaWx0ZXI6OnB1c2hQYXJlbnQoRWxlbWVudCogcGFyZW50KQor
eworICAgIEFTU0VSVChtX2FuY2VzdG9ySWRlbnRpZmllckZpbHRlcik7CisgICAgLy8gV2UgbWF5
IGdldCBpbnZva2VkIGZvciBzb21lIHJhbmRvbSBlbGVtZW50cyBpbiBzb21lIHdhY2t5IGNhc2Vz
IGR1cmluZyBzdHlsZSByZXNvbHZlLgorICAgIC8vIFBhdXNlIG1haW50YWluaW5nIHRoZSBzdGFj
ayBpbiB0aGlzIGNhc2UuCisgICAgaWYgKG1fcGFyZW50U3RhY2subGFzdCgpLmVsZW1lbnQgIT0g
cGFyZW50LT5wYXJlbnRPckhvc3RFbGVtZW50KCkpCisgICAgICAgIHJldHVybjsKKyAgICBwdXNo
UGFyZW50U3RhY2tGcmFtZShwYXJlbnQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY29sbGVj
dERlc2NlbmRhbnRTZWxlY3RvcklkZW50aWZpZXJIYXNoZXMoY29uc3QgQ1NTU2VsZWN0b3IqIHNl
bGVjdG9yLCB1bnNpZ25lZComIGhhc2gsIGNvbnN0IHVuc2lnbmVkKiBlbmQpCit7CisgICAgc3dp
dGNoIChzZWxlY3Rvci0+bV9tYXRjaCkgeworICAgIGNhc2UgQ1NTU2VsZWN0b3I6OklkOgorICAg
ICAgICBpZiAoIXNlbGVjdG9yLT52YWx1ZSgpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICgqaGFz
aCsrKSA9IHNlbGVjdG9yLT52YWx1ZSgpLmltcGwoKS0+ZXhpc3RpbmdIYXNoKCkgKiBJZEF0dHJp
YnV0ZVNhbHQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkNsYXNzOgor
ICAgICAgICBpZiAoIXNlbGVjdG9yLT52YWx1ZSgpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICgq
aGFzaCsrKSA9IHNlbGVjdG9yLT52YWx1ZSgpLmltcGwoKS0+ZXhpc3RpbmdIYXNoKCkgKiBDbGFz
c0F0dHJpYnV0ZVNhbHQ7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICBpZiAoaGFzaCA9PSBlbmQpCisgICAgICAgIHJldHVybjsKKyAgICBj
b25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSA9IHNlbGVjdG9yLT50YWcoKS5sb2NhbE5hbWUo
KTsKKyAgICBpZiAobG9jYWxOYW1lICE9IHN0YXJBdG9tKQorICAgICAgICAoKmhhc2grKykgPSBs
b2NhbE5hbWUuaW1wbCgpLT5leGlzdGluZ0hhc2goKSAqIFRhZ05hbWVTYWx0OworfQorCit2b2lk
IFNlbGVjdG9yRmlsdGVyOjpjb2xsZWN0SWRlbnRpZmllckhhc2hlcyhjb25zdCBDU1NTZWxlY3Rv
ciogc2VsZWN0b3IsIHVuc2lnbmVkKiBpZGVudGlmaWVySGFzaGVzLCB1bnNpZ25lZCBtYXhpbXVt
SWRlbnRpZmllckNvdW50KQoreworICAgIHVuc2lnbmVkKiBoYXNoID0gaWRlbnRpZmllckhhc2hl
czsKKyAgICB1bnNpZ25lZCogZW5kID0gaWRlbnRpZmllckhhc2hlcyArIG1heGltdW1JZGVudGlm
aWVyQ291bnQ7CisgICAgQ1NTU2VsZWN0b3I6OlJlbGF0aW9uIHJlbGF0aW9uID0gc2VsZWN0b3It
PnJlbGF0aW9uKCk7CisKKyAgICAvLyBTa2lwIHRoZSB0b3Btb3N0IHNlbGVjdG9yLiBJdCBpcyBo
YW5kbGVkIHF1aWNrbHkgYnkgdGhlIHJ1bGUgaGFzaGVzLgorICAgIGJvb2wgc2tpcE92ZXJTdWJz
ZWxlY3RvcnMgPSB0cnVlOworICAgIGZvciAoc2VsZWN0b3IgPSBzZWxlY3Rvci0+dGFnSGlzdG9y
eSgpOyBzZWxlY3Rvcjsgc2VsZWN0b3IgPSBzZWxlY3Rvci0+dGFnSGlzdG9yeSgpKSB7CisgICAg
ICAgIC8vIE9ubHkgY29sbGVjdCBpZGVudGlmaWVycyB0aGF0IG1hdGNoIGFuY2VzdG9ycy4KKyAg
ICAgICAgc3dpdGNoIChyZWxhdGlvbikgeworICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpTdWJT
ZWxlY3RvcjoKKyAgICAgICAgICAgIGlmICghc2tpcE92ZXJTdWJzZWxlY3RvcnMpCisgICAgICAg
ICAgICAgICAgY29sbGVjdERlc2NlbmRhbnRTZWxlY3RvcklkZW50aWZpZXJIYXNoZXMoc2VsZWN0
b3IsIGhhc2gsIGVuZCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NTZWxl
Y3Rvcjo6RGlyZWN0QWRqYWNlbnQ6CisgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkluZGlyZWN0
QWRqYWNlbnQ6CisgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlNoYWRvd0Rlc2NlbmRhbnQ6Cisg
ICAgICAgICAgICBza2lwT3ZlclN1YnNlbGVjdG9ycyA9IHRydWU7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6RGVzY2VuZGFudDoKKyAgICAgICAgY2FzZSBD
U1NTZWxlY3Rvcjo6Q2hpbGQ6CisgICAgICAgICAgICBza2lwT3ZlclN1YnNlbGVjdG9ycyA9IGZh
bHNlOworICAgICAgICAgICAgY29sbGVjdERlc2NlbmRhbnRTZWxlY3RvcklkZW50aWZpZXJIYXNo
ZXMoc2VsZWN0b3IsIGhhc2gsIGVuZCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBpZiAoaGFzaCA9PSBlbmQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHJl
bGF0aW9uID0gc2VsZWN0b3ItPnJlbGF0aW9uKCk7CisgICAgfQorICAgICpoYXNoID0gMDsKK30K
KworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JGaWx0ZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckZpbHRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU4MTI0ZjAz
YjRlYzY0ZjdiOTVjMmU3YWY3N2I4Yzc0MTQ5ZmQxZGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JGaWx0ZXIuaApAQCAtMCwwICsxLDgyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiAgICAgICAg
ICAgKEMpIDIwMDQtMjAwNSBBbGxhbiBTYW5kZmVsZCBKZW5zZW4gKGtkZUBjYXJld29sZi5jb20p
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgTmljaG9sYXMgU2hhbmtzICh3ZWJraXRAbmlj
a3NoYW5rcy5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIw
MDksIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA3IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQHdlYmtpdC5vcmc+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMDcsIDIwMDggRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQorICogQ29weXJpZ2h0IChjKSAyMDEx
LCBDb2RlIEF1cm9yYSBGb3J1bS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aWZuZGVmIFNlbGVjdG9yRmlsdGVyX2gKKyNkZWZpbmUgU2VsZWN0b3JGaWx0ZXJfaAorCisjaW5j
bHVkZSAiU3R5bGVkRWxlbWVudC5oIgorI2luY2x1ZGUgPHd0Zi9CbG9vbUZpbHRlci5oPgorI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDU1NT
ZWxlY3RvcjsKKworY2xhc3MgU2VsZWN0b3JGaWx0ZXIgeworcHVibGljOgorICAgIHZvaWQgcHVz
aFBhcmVudFN0YWNrRnJhbWUoRWxlbWVudCogcGFyZW50KTsKKyAgICB2b2lkIHBvcFBhcmVudFN0
YWNrRnJhbWUoKTsKKworICAgIHZvaWQgc2V0dXBQYXJlbnRTdGFjayhFbGVtZW50KiBwYXJlbnQp
OworICAgIHZvaWQgcHVzaFBhcmVudChFbGVtZW50KiBwYXJlbnQpOworICAgIHZvaWQgcG9wUGFy
ZW50KCkgeyBwb3BQYXJlbnRTdGFja0ZyYW1lKCk7IH0KKyAgICBib29sIHBhcmVudFN0YWNrSXNF
bXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50U3RhY2suaXNFbXB0eSgpOyB9CisgICAgYm9v
bCBwYXJlbnRTdGFja0lzQ29uc2lzdGVudChjb25zdCBDb250YWluZXJOb2RlKiBwYXJlbnROb2Rl
KSBjb25zdCB7IHJldHVybiAhbV9wYXJlbnRTdGFjay5pc0VtcHR5KCkgJiYgbV9wYXJlbnRTdGFj
ay5sYXN0KCkuZWxlbWVudCA9PSBwYXJlbnROb2RlOyB9CisKKyAgICB0ZW1wbGF0ZSA8dW5zaWdu
ZWQgbWF4aW11bUlkZW50aWZpZXJDb3VudD4KKyAgICBpbmxpbmUgYm9vbCBmYXN0UmVqZWN0U2Vs
ZWN0b3IoY29uc3QgdW5zaWduZWQqIGlkZW50aWZpZXJIYXNoZXMpIGNvbnN0OworICAgIHN0YXRp
YyB2b2lkIGNvbGxlY3RJZGVudGlmaWVySGFzaGVzKGNvbnN0IENTU1NlbGVjdG9yKiwgdW5zaWdu
ZWQqIGlkZW50aWZpZXJIYXNoZXMsIHVuc2lnbmVkIG1heGltdW1JZGVudGlmaWVyQ291bnQpOwor
Citwcml2YXRlOgorICAgIHN0cnVjdCBQYXJlbnRTdGFja0ZyYW1lIHsKKyAgICAgICAgUGFyZW50
U3RhY2tGcmFtZSgpIDogZWxlbWVudCgwKSB7IH0KKyAgICAgICAgUGFyZW50U3RhY2tGcmFtZShF
bGVtZW50KiBlbGVtZW50KSA6IGVsZW1lbnQoZWxlbWVudCkgeyB9CisgICAgICAgIEVsZW1lbnQq
IGVsZW1lbnQ7CisgICAgICAgIFZlY3Rvcjx1bnNpZ25lZCwgND4gaWRlbnRpZmllckhhc2hlczsK
KyAgICB9OworICAgIFZlY3RvcjxQYXJlbnRTdGFja0ZyYW1lPiBtX3BhcmVudFN0YWNrOworCisg
ICAgLy8gV2l0aCAxMDAgdW5pcXVlIHN0cmluZ3MgaW4gdGhlIGZpbHRlciwgMl4xMiBzbG90IHRh
YmxlIGhhcyBmYWxzZSBwb3NpdGl2ZSByYXRlIG9mIH4wLjIlLgorICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBibG9vbUZpbHRlcktleUJpdHMgPSAxMjsKKyAgICBPd25QdHI8Qmxvb21GaWx0ZXI8
Ymxvb21GaWx0ZXJLZXlCaXRzPiA+IG1fYW5jZXN0b3JJZGVudGlmaWVyRmlsdGVyOworfTsKKwor
dGVtcGxhdGUgPHVuc2lnbmVkIG1heGltdW1JZGVudGlmaWVyQ291bnQ+CitpbmxpbmUgYm9vbCBT
ZWxlY3RvckZpbHRlcjo6ZmFzdFJlamVjdFNlbGVjdG9yKGNvbnN0IHVuc2lnbmVkKiBpZGVudGlm
aWVySGFzaGVzKSBjb25zdAoreworICAgIEFTU0VSVChtX2FuY2VzdG9ySWRlbnRpZmllckZpbHRl
cik7CisgICAgZm9yICh1bnNpZ25lZCBuID0gMDsgbiA8IG1heGltdW1JZGVudGlmaWVyQ291bnQg
JiYgaWRlbnRpZmllckhhc2hlc1tuXTsgKytuKSB7CisgICAgICAgIGlmICghbV9hbmNlc3Rvcklk
ZW50aWZpZXJGaWx0ZXItPm1heUNvbnRhaW4oaWRlbnRpZmllckhhc2hlc1tuXSkpCisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCit9CisKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCmluZGV4IGU4MzZmMzMwNzc5NDYw
NDE4YzhlMTVhMmE0ZDk4ZDdjM2MwNWM4Y2QuLjgyZDY0MWViZGUwNzVmZTU2ZDA3ZGI3YWZkZjcz
MWEyYzI2Y2MxZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKQEAgLTI1OCw2
ICsyNTgsNyBAQCBzdGF0aWMgU3R5bGVQcm9wZXJ0eVNldCogcmlnaHRUb0xlZnREZWNsYXJhdGlv
bigpCiAgICAgcmV0dXJuIHJpZ2h0VG9MZWZ0RGVjbC5nZXQoKTsKIH0KIAorCiBTdHlsZVJlc29s
dmVyOjpTdHlsZVJlc29sdmVyKERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCBtYXRjaEF1dGhvckFu
ZFVzZXJTdHlsZXMpCiAgICAgOiBtX2hhc1VBQXBwZWFyYW5jZShmYWxzZSkKICAgICAsIG1fYmFj
a2dyb3VuZERhdGEoQmFja2dyb3VuZEZpbGxMYXllcikKQEAgLTQwNSwxMCArNDA2LDEwIEBAIHZv
aWQgU3R5bGVSZXNvbHZlcjo6cHVzaFBhcmVudEVsZW1lbnQoRWxlbWVudCogcGFyZW50KQogICAg
IC8vIHN0eWxlIHJlY2FsYyBpbiB0aGUgbWlkZGxlIG9mIHRyZWUgYnVpbGRpbmcuIFdlIG1heSBh
bHNvIGJlIGludm9rZWQgZnJvbSBzb21ld2hlcmUgd2l0aGluIHRoZSB0cmVlLgogICAgIC8vIFJl
c2V0IHRoZSBzdGFjayBpbiB0aGlzIGNhc2UsIG9yIGlmIHdlIHNlZSBhIG5ldyByb290IGVsZW1l
bnQuCiAgICAgLy8gT3RoZXJ3aXNlIGp1c3QgcHVzaCB0aGUgbmV3IHBhcmVudC4KLSAgICBpZiAo
IXBhcmVudHNQYXJlbnQgfHwgbV9jaGVja2VyLnBhcmVudFN0YWNrSXNFbXB0eSgpKQotICAgICAg
ICBtX2NoZWNrZXIuc2V0dXBQYXJlbnRTdGFjayhwYXJlbnQpOworICAgIGlmICghcGFyZW50c1Bh
cmVudCB8fCBtX2ZpbHRlci5wYXJlbnRTdGFja0lzRW1wdHkoKSkKKyAgICAgICAgbV9maWx0ZXIu
c2V0dXBQYXJlbnRTdGFjayhwYXJlbnQpOwogICAgIGVsc2UKLSAgICAgICAgbV9jaGVja2VyLnB1
c2hQYXJlbnQocGFyZW50KTsKKyAgICAgICAgbV9maWx0ZXIucHVzaFBhcmVudChwYXJlbnQpOwog
CiAgICAgLy8gTm90ZTogV2UgbXVzdG4ndCBza2lwIFNoYWRvd1Jvb3Qgbm9kZXMgZm9yIHRoZSBz
Y29wZSBzdGFjay4KICAgICBpZiAobV9zY29wZVJlc29sdmVyKQpAQCAtNDE5LDggKzQyMCw4IEBA
IHZvaWQgU3R5bGVSZXNvbHZlcjo6cG9wUGFyZW50RWxlbWVudChFbGVtZW50KiBwYXJlbnQpCiB7
CiAgICAgLy8gTm90ZSB0aGF0IHdlIG1heSBnZXQgaW52b2tlZCBmb3Igc29tZSByYW5kb20gZWxl
bWVudHMgaW4gc29tZSB3YWNreSBjYXNlcyBkdXJpbmcgc3R5bGUgcmVzb2x2ZS4KICAgICAvLyBQ
YXVzZSBtYWludGFpbmluZyB0aGUgc3RhY2sgaW4gdGhpcyBjYXNlLgotICAgIGlmIChtX2NoZWNr
ZXIucGFyZW50U3RhY2tJc0NvbnNpc3RlbnQocGFyZW50KSkKLSAgICAgICAgbV9jaGVja2VyLnBv
cFBhcmVudCgpOworICAgIGlmIChtX2ZpbHRlci5wYXJlbnRTdGFja0lzQ29uc2lzdGVudChwYXJl
bnQpKQorICAgICAgICBtX2ZpbHRlci5wb3BQYXJlbnQoKTsKICAgICBpZiAobV9zY29wZVJlc29s
dmVyKQogICAgICAgICBtX3Njb3BlUmVzb2x2ZXItPnBvcChwYXJlbnQpOwogfQpAQCAtODQzLDEy
ICs4NDQsMTIgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxp
c3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogcnVsZXMsIGkKIAogICAgIC8vIEluIHNvbWUgY2Fz
ZXMgd2UgbWF5IGVuZCB1cCBsb29raW5nIHVwIHN0eWxlIGZvciByYW5kb20gZWxlbWVudHMgaW4g
dGhlIG1pZGRsZSBvZiBhIHJlY3Vyc2l2ZSB0cmVlIHJlc29sdmUuCiAgICAgLy8gQW5jZXN0b3Ig
aWRlbnRpZmllciBmaWx0ZXIgd29uJ3QgYmUgdXAtdG8tZGF0ZSBpbiB0aGF0IGNhc2UgYW5kIHdl
IGNhbid0IHVzZSB0aGUgZmFzdCBwYXRoLgotICAgIGJvb2wgY2FuVXNlRmFzdFJlamVjdCA9IG1f
Y2hlY2tlci5wYXJlbnRTdGFja0lzQ29uc2lzdGVudChtX3BhcmVudE5vZGUpOworICAgIGJvb2wg
Y2FuVXNlRmFzdFJlamVjdCA9IG1fZmlsdGVyLnBhcmVudFN0YWNrSXNDb25zaXN0ZW50KG1fcGFy
ZW50Tm9kZSk7CiAKICAgICB1bnNpZ25lZCBzaXplID0gcnVsZXMtPnNpemUoKTsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgIGNvbnN0IFJ1bGVEYXRh
JiBydWxlRGF0YSA9IHJ1bGVzLT5hdChpKTsKLSAgICAgICAgaWYgKGNhblVzZUZhc3RSZWplY3Qg
JiYgbV9jaGVja2VyLmZhc3RSZWplY3RTZWxlY3RvcjxSdWxlRGF0YTo6bWF4aW11bUlkZW50aWZp
ZXJDb3VudD4ocnVsZURhdGEuZGVzY2VuZGFudFNlbGVjdG9ySWRlbnRpZmllckhhc2hlcygpKSkK
KyAgICAgICAgaWYgKGNhblVzZUZhc3RSZWplY3QgJiYgbV9maWx0ZXIuZmFzdFJlamVjdFNlbGVj
dG9yPFJ1bGVEYXRhOjptYXhpbXVtSWRlbnRpZmllckNvdW50PihydWxlRGF0YS5kZXNjZW5kYW50
U2VsZWN0b3JJZGVudGlmaWVySGFzaGVzKCkpKQogICAgICAgICAgICAgY29udGludWU7CiAKICAg
ICAgICAgU3R5bGVSdWxlKiBydWxlID0gcnVsZURhdGEucnVsZSgpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHls
ZVJlc29sdmVyLmgKaW5kZXggOTdiY2YxNjk0MDgzZTBhMjZhZGQ0NmFmNGE5OThkNThmNTRkYjc2
ZS4uYjBiZDJiYTIzYjlhYmM0NzQ1MWI1Y2Q1NDZhZmU5M2M3MGVhYmY1YSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvU3R5bGVSZXNvbHZlci5oCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiUnVsZUZlYXR1
cmUuaCIKICNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2Vs
ZWN0b3JDaGVja2VyLmgiCisjaW5jbHVkZSAiU2VsZWN0b3JGaWx0ZXIuaCIKICNpbmNsdWRlICJT
dHlsZUluaGVyaXRlZERhdGEuaCIKICNpbmNsdWRlICJTdHlsZVNjb3BlUmVzb2x2ZXIuaCIKICNp
bmNsdWRlICJWaWV3cG9ydFN0eWxlUmVzb2x2ZXIuaCIKQEAgLTEzMCw2ICsxMzEsNyBAQCBlbnVt
IFJ1bGVNYXRjaGluZ0JlaGF2aW9yIHsKICAgICBNYXRjaE9ubHlVc2VyQWdlbnRSdWxlcywKIH07
CiAKKwogLy8gVGhpcyBjbGFzcyBzZWxlY3RzIGEgUmVuZGVyU3R5bGUgZm9yIGEgZ2l2ZW4gZWxl
bWVudCBiYXNlZCBvbiBhIGNvbGxlY3Rpb24gb2Ygc3R5bGVzaGVldHMuCiBjbGFzcyBTdHlsZVJl
c29sdmVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdHlsZVJlc29sdmVyKTsgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CkBAIC00OTEsNiArNDkzLDcgQEAgcHJpdmF0ZToKICAgICBQc2V1
ZG9JZCBtX3BzZXVkb1N0eWxlOwogCiAgICAgU2VsZWN0b3JDaGVja2VyIG1fY2hlY2tlcjsKKyAg
ICBTZWxlY3RvckZpbHRlciBtX2ZpbHRlcjsKIAogICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbV9z
dHlsZTsKICAgICBSZW5kZXJTdHlsZSogbV9wYXJlbnRTdHlsZTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180636</attachid>
            <date>2012-12-23 19:59:50 -0800</date>
            <delta_ts>2012-12-23 21:06:23 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-105660-20121223195704.patch</filename>
            <type>text/plain</type>
            <size>33060</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM4NDI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzljMDIyNjBmN2Q2ZWEw
OTM4NTAzZGRkYzY1NDI5ZGY0MTRhMDg0ZC4uODlkNzY1ZDgxMmY5YTAzYzI0NjU4NTBlYzdmMGRl
MGY3ZGM5YzdkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDEyLTEyLTIxICBEaW1p
dHJpIEdsYXprb3YgIDxkZ2xhemtvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgU3BsaXQgZmFz
dC1yZWplY3Rpb24gZmlsdGVyIGxvZ2ljIG9mZiBTZWxlY3RvckNoZWNrZXIuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDU2NjAKKworICAgICAgICBU
aGUgYXdlc29tZSBCbG9vbSBmaWx0ZXIgYW5kIHBhcmVudCBzdGFjayBsb2dpYyBkb24ndCBuZWVk
IHRvIGJlIGluIFNlbGVjdG9yQ2hlY2tlci4gVGhleSBuaWNlbHkgZmFjdG9yIG91dAorICAgICAg
ICBpbnRvIHRoZWlyIG93biBwcmV0dHkgdGhpbmcsIG5hbWVkIHRoZXJlYnkgU2VsZWN0b3JGaWx0
ZXIuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCisKKyAgICAgICAgTm8gY2hh
bmdlIGluIGZ1bmN0aW9uYWxpdHksIGNvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAg
ICAgKiBDTWFrZUxpc3RzLnR4dDogQWRkZWQgU2VsZWN0b3JGaWx0ZXIgdG8gYnVpbGQgc3lzdGVt
cy4KKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOiBEaXR0by4KKyAgICAgICAgKiBUYXJn
ZXQucHJpOiBEaXR0by4KKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6IERpdHRvLgorICAgICAgICAq
IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogRGl0dG8uCisgICAgICAgICogY3Nz
L0NTU0FsbEluT25lLmNwcDogRGl0dG8uCisgICAgICAgICogY3NzL1J1bGVTZXQuY3BwOiBDaGFu
Z2VkIHRvIHVzZSBTZWxlY3RvckZpbHRlci4KKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVEYXRhOjpS
dWxlRGF0YSk6IERpdHRvLgorICAgICAgICAqIGNzcy9TZWxlY3RvckNoZWNrZXIuY3BwOiBEaXR0
by4KKyAgICAgICAgKiBjc3MvU2VsZWN0b3JDaGVja2VyLmg6IERpdHRvLgorICAgICAgICAoU2Vs
ZWN0b3JDaGVja2VyKToKKyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpwdXNo
UGFyZW50RWxlbWVudCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
cG9wUGFyZW50RWxlbWVudCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KTogRGl0dG8uCisgICAgICAgICogY3NzL1N0
eWxlUmVzb2x2ZXIuaDoKKyAgICAgICAgKFN0eWxlUmVzb2x2ZXIpOiBEaXR0by4KKwogMjAxMi0x
Mi0yMyAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KIAogICAgICAgICA8cmRh
cjovL3Byb2JsZW0vMTI4MDgzNzc+IE5ldHdvcmsgcHJvY2VzcyBzaG91bGQgcmVzcGVjdCBjb29r
aWUgYWNjZXB0IHBvbGljeQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50
eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCBhNmQ2M2EzZDA0YTE1ODEy
Zjc5NmYzZmI2ODhiYjk1ODU4OTk5NmRiLi44NGFlOWExZGEzZmQ4MWMwZDIxYjA2OTJkMTE5YjI3
YjNiYTAxMWY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTA3OCw2ICsxMDc4LDcgQEAgc2V0
KFdlYkNvcmVfU09VUkNFUwogICAgIGNzcy9SdWxlU2V0LmgKICAgICBjc3MvUnVsZVNldC5jcHAK
ICAgICBjc3MvU2VsZWN0b3JDaGVja2VyLmNwcAorICAgIGNzcy9TZWxlY3RvckZpbHRlci5jcHAK
ICAgICBjc3MvU2hhZG93VmFsdWUuY3BwCiAgICAgY3NzL1N0eWxlQnVpbGRlci5jcHAKICAgICBj
c3MvU3R5bGVJbnZhbGlkYXRpb25BbmFseXNpcy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0
LmFtCmluZGV4IDc0MGI3M2ZmODAyZDkzOGM4NDQ3ZmJkZGNjNWYzYTNlOTNmMTYyYjkuLjJmNzRk
ODhmY2IyMWQyNzQxMDE0ZDU0NWM3MzQ2ZDY4MjM3ZTI4NWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZp
bGUubGlzdC5hbQpAQCAtMjYzMSw2ICsyNjMxLDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlT
b3VyY2UvV2ViQ29yZS9jc3MvUnVsZVNldC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0
b3JDaGVja2VyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oIFwK
KyAgICBTb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JGaWx0ZXIuY3BwIFwKKyAgICBTb3VyY2Uv
V2ViQ29yZS9jc3MvU2VsZWN0b3JGaWx0ZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvY3NzL1NoYWRv
d1ZhbHVlLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvY3NzL1NoYWRvd1ZhbHVlLmggXAogCVNvdXJj
ZS9XZWJDb3JlL2Nzcy9TaWJsaW5nVHJhdmVyc2FsU3RyYXRlZ2llcy5oIFwKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCmlu
ZGV4IGI2NjViOGFlMDcxMDg2NjczMDhmYzE3Y2E4YWQxYmY5NmFhMWYzNzMuLjBiNzY4NTNjM2Jm
Yzc5MGY4MDYwODIyNmJkNDg5OGI3YzRmZDNkYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpAQCAtMzA2LDYgKzMw
Niw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGNzcy9SdWxlRmVhdHVyZS5jcHAgXAogICAgIGNzcy9S
dWxlU2V0LmNwcCBcCiAgICAgY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAgXAorICAgIGNzcy9TZWxl
Y3RvckZpbHRlci5jcHAgXAogICAgIGNzcy9TaGFkb3dWYWx1ZS5jcHAgXAogICAgIGNzcy9TdHls
ZUJ1aWxkZXIuY3BwIFwKICAgICBjc3MvU3R5bGVJbnZhbGlkYXRpb25BbmFseXNpcy5jcHAgXApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpCmluZGV4IDNiNzUxMmZjNDhkN2VkMzcyODFlNjkzZjE1NzQ2NmVkM2FmNTQ1
YjUuLmNmOWJiYTFiOWYwNjgxOTcyZmZjYzUxZjk5NjVjNmYxODdkM2FjN2QgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkKQEAgLTE1NDksNiArMTU0OSw4IEBACiAgICAgICAgICAgICAnY3NzL1NWR0NTU1N0eWxl
U2VsZWN0b3IuY3BwJywKICAgICAgICAgICAgICdjc3MvU2VsZWN0b3JDaGVja2VyLmNwcCcsCiAg
ICAgICAgICAgICAnY3NzL1NlbGVjdG9yQ2hlY2tlci5oJywKKyAgICAgICAgICAgICdjc3MvU2Vs
ZWN0b3JGaWx0ZXIuY3BwJywKKyAgICAgICAgICAgICdjc3MvU2VsZWN0b3JGaWx0ZXIuaCcsCiAg
ICAgICAgICAgICAnY3NzL1NoYWRvd1ZhbHVlLmNwcCcsCiAgICAgICAgICAgICAnY3NzL1NoYWRv
d1ZhbHVlLmgnLAogICAgICAgICAgICAgJ2Nzcy9TaWJsaW5nVHJhdmVyc2FsU3RyYXRlZ2llcy5o
JywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agppbmRleCA5MGFlZTA2NWI2NzhjZmE1MmZlZTU5ZDg4N2RjNWZmYjJkMTVhZWQxLi5mNmRmZDBh
N2NkNDEzNjE3MTdhMWZlNGIyZDc2YWQ1MzQwYWM4YzliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMDYwLDYgKzEwNjAsOCBA
QAogCQk0MTM4RDMzNjEyNDQwNTQ4MDAzMjNEMzMgLyogRXZlbnRDb250ZXh0LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxMzhEMzM0MTI0NDA1NDgw
MDMyM0QzMyAvKiBFdmVudENvbnRleHQuY3BwICovOyB9OwogCQk0MTRCODY3MzEzQUQwNzRFMDBC
NEIzNzMgLyogRmlsZUljb25Mb2FkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDE0Qjg2NzExM0FEMDc0RTAwQjRCMzczIC8qIEZpbGVJY29uTG9h
ZGVyLmNwcCAqLzsgfTsKIAkJNDE0Qjg2NzQxM0FEMDc0RTAwQjRCMzczIC8qIEZpbGVJY29uTG9h
ZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTRC
ODY3MjEzQUQwNzRFMDBCNEIzNzMgLyogRmlsZUljb25Mb2FkZXIuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk0MTUwNzE1NzE2ODUwNjczMDBDM0M3
QjMgLyogU2VsZWN0b3JGaWx0ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNDE1MDcxNTUxNjg1MDY3MzAwQzNDN0IzIC8qIFNlbGVjdG9yRmlsdGVy
LmNwcCAqLzsgfTsKKwkJNDE1MDcxNTgxNjg1MDY3MzAwQzNDN0IzIC8qIFNlbGVjdG9yRmlsdGVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTUwNzE1
NjE2ODUwNjczMDBDM0M3QjMgLyogU2VsZWN0b3JGaWx0ZXIuaCAqLzsgfTsKIAkJNDE1MEY5RjEx
MkI2RTBFNzAwMDhDODYwIC8qIFNsaWRlclRodW1iRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDE1MEY5RUYxMkI2RTBFNzAwMDhDODYwIC8q
IFNsaWRlclRodW1iRWxlbWVudC5oICovOyB9OwogCQk0MTUwRjlGMjEyQjZFMEU3MDAwOEM4NjAg
LyogU2xpZGVyVGh1bWJFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQxNTBGOUYwMTJCNkUwRTcwMDA4Qzg2MCAvKiBTbGlkZXJUaHVtYkVs
ZW1lbnQuY3BwICovOyB9OwogCQk0MTU3QUY4MDEyRjFGQjA0MDBBOEM2RjUgLyogTWVkaWFDb250
cm9sc0FwcGxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0MTU3QUY3RTEyRjFGQjA0MDBBOEM2RjUgLyogTWVkaWFDb250cm9sc0FwcGxlLmggKi87IH07
CkBAIC04Mjg4LDYgKzgyOTAsOCBAQAogCQk0MTM4RDMzNDEyNDQwNTQ4MDAzMjNEMzMgLyogRXZl
bnRDb250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV2ZW50
Q29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxNEI4NjcxMTNBRDA3
NEUwMEI0QjM3MyAvKiBGaWxlSWNvbkxvYWRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBGaWxlSWNvbkxvYWRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTQxNEI4NjcyMTNBRDA3NEUwMEI0QjM3MyAvKiBGaWxlSWNvbkxvYWRlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWxlSWNvbkxvYWRlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk0MTUwNzE1NTE2ODUwNjczMDBDM0M3QjMgLyogU2VsZWN0b3JG
aWx0ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2VsZWN0b3JG
aWx0ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MTUwNzE1NjE2ODUwNjcz
MDBDM0M3QjMgLyogU2VsZWN0b3JGaWx0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU2VsZWN0b3JGaWx0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDE1
MEY5RUYxMkI2RTBFNzAwMDhDODYwIC8qIFNsaWRlclRodW1iRWxlbWVudC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTbGlkZXJUaHVtYkVsZW1lbnQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNDE1MEY5RjAxMkI2RTBFNzAwMDhDODYwIC8qIFNsaWRlclRodW1i
RWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTbGlkZXJU
aHVtYkVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTU3QUY3RTEy
RjFGQjA0MDBBOEM2RjUgLyogTWVkaWFDb250cm9sc0FwcGxlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IE1lZGlhQ29udHJvbHNBcHBsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMjE1ODAsNiArMjE1ODQsOCBAQAogCQkJCUE3OUJBREEwMTYxRTdGM0YwMEMy
RTY1MiAvKiBSdWxlU2V0LmggKi8sCiAJCQkJRTQ0QjRCQjExNDE2NTBENzAwMkIxRDhCIC8qIFNl
bGVjdG9yQ2hlY2tlci5jcHAgKi8sCiAJCQkJRTQ0QjRCQjIxNDE2NTBENzAwMkIxRDhCIC8qIFNl
bGVjdG9yQ2hlY2tlci5oICovLAorCQkJCTQxNTA3MTU1MTY4NTA2NzMwMEMzQzdCMyAvKiBTZWxl
Y3RvckZpbHRlci5jcHAgKi8sCisJCQkJNDE1MDcxNTYxNjg1MDY3MzAwQzNDN0IzIC8qIFNlbGVj
dG9yRmlsdGVyLmggKi8sCiAJCQkJQTgwRTZDQ0EwQTE5ODlDQTAwN0ZCOEM1IC8qIFNoYWRvd1Zh
bHVlLmNwcCAqLywKIAkJCQlBODBFNkNCRTBBMTk4OUNBMDA3RkI4QzUgLyogU2hhZG93VmFsdWUu
aCAqLywKIAkJCQk1NzI4QkQ5RDE2MjUzNjk2MDBDNDBCNTYgLyogU2libGluZ1RyYXZlcnNhbFN0
cmF0ZWdpZXMuaCAqLywKQEAgLTI1OTg1LDYgKzI1OTkxLDcgQEAKIAkJCQkwRkI4ODkwQTE2N0Qy
RkExMDAxMENEQTUgLyogU2Nyb2xsaW5nVHJlZVN0aWNreU5vZGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGQjg4OTBGMTY3RDMwMTYwMDEwQ0RBNSAvKiBTY3JvbGxpbmdTdGF0ZVN0aWNreU5vZGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUUxM0VGMzQ0MTY4NEVDRjQwMDM0QzgzRiAvKiBOZXR3b3Jr
U3RvcmFnZVNlc3Npb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTQxNTA3MTU4MTY4NTA2NzMwMEMz
QzdCMyAvKiBTZWxlY3RvckZpbHRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0yOTEwNCw2ICsyOTEx
MSw3IEBACiAJCQkJMEZCODg5MEUxNjdEMzAxNjAwMTBDREE1IC8qIFNjcm9sbGluZ1N0YXRlU3Rp
Y2t5Tm9kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyMDlCNDU2QjE2Nzk2QTdFMDBFNTRFNEUg
LyogSlNDcnlwdG9DdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTEzRUYzNDkxNjg1MEM0
NzAwMzRDODNGIC8qIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbkNGTmV0LmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTQxNTA3MTU3MTY4NTA2NzMwMEMzQzdCMyAvKiBTZWxlY3RvckZpbHRlci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5n
ID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NBbGxJbk9uZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQWxsSW5PbmUuY3BwCmluZGV4IDQ3OWQ4ZGVmNzhj
OWQzNzQwOTdjMGM0ZTk5OTEzNzEzZTJhMjMxMDUuLjZiN2E4YjllZGZlOGNiYmU2YzAxYmZiOTc1
OWIzYWE0NDA1NjhlNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NBbGxJbk9u
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0FsbEluT25lLmNwcApAQCAtNjgsNiAr
NjgsNyBAQAogI2luY2x1ZGUgIkNTU1ZhbHVlUG9vbC5jcHAiCiAjaW5jbHVkZSAiUnVsZUZlYXR1
cmUuY3BwIgogI2luY2x1ZGUgIlJ1bGVTZXQuY3BwIgorI2luY2x1ZGUgIlNlbGVjdG9yRmlsdGVy
LmNwcCIKICNpbmNsdWRlICJTdHlsZUJ1aWxkZXIuY3BwIgogI2luY2x1ZGUgIlN0eWxlUHJvcGVy
dHlTZXQuY3BwIgogI2luY2x1ZGUgIlN0eWxlUHJvcGVydHlTaG9ydGhhbmQuY3BwIgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1J1bGVTZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvY3Nz
L1J1bGVTZXQuY3BwCmluZGV4IDM1MGEyNzE1ZGI3YjAzYjkwNmI5MzI2YzkwYjBhMTM5ZTIzZmUy
MWEuLmU5NjY2NjVlY2RmM2EyZjhmMWQ3YTBiNmM4YjY1ODVmYmQ4Mzg1NzYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9SdWxlU2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
UnVsZVNldC5jcHAKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJNZWRpYVF1ZXJ5RXZhbHVh
dG9yLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJTZWxlY3RvckNo
ZWNrZXIuaCIKKyNpbmNsdWRlICJTZWxlY3RvckZpbHRlci5oIgogI2luY2x1ZGUgIlN0eWxlUmVz
b2x2ZXIuaCIKICNpbmNsdWRlICJTdHlsZVJ1bGUuaCIKICNpbmNsdWRlICJTdHlsZVJ1bGVJbXBv
cnQuaCIKQEAgLTEyMiw3ICsxMjMsNyBAQCBSdWxlRGF0YTo6UnVsZURhdGEoU3R5bGVSdWxlKiBy
dWxlLCB1bnNpZ25lZCBzZWxlY3RvckluZGV4LCB1bnNpZ25lZCBwb3NpdGlvbiwgQQogewogICAg
IEFTU0VSVChtX3Bvc2l0aW9uID09IHBvc2l0aW9uKTsKICAgICBBU1NFUlQobV9zZWxlY3Rvcklu
ZGV4ID09IHNlbGVjdG9ySW5kZXgpOwotICAgIFNlbGVjdG9yQ2hlY2tlcjo6Y29sbGVjdElkZW50
aWZpZXJIYXNoZXMoc2VsZWN0b3IoKSwgbV9kZXNjZW5kYW50U2VsZWN0b3JJZGVudGlmaWVySGFz
aGVzLCBtYXhpbXVtSWRlbnRpZmllckNvdW50KTsKKyAgICBTZWxlY3RvckZpbHRlcjo6Y29sbGVj
dElkZW50aWZpZXJIYXNoZXMoc2VsZWN0b3IoKSwgbV9kZXNjZW5kYW50U2VsZWN0b3JJZGVudGlm
aWVySGFzaGVzLCBtYXhpbXVtSWRlbnRpZmllckNvdW50KTsKIH0KIAogdm9pZCBSdWxlRGF0YTo6
cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykgY29u
c3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAKaW5kZXggNTdhMWQ5Zjk3Mzg4
MWZlNTViZWRmNTE0MDgwZDJmYTI2MDAzY2VlMS4uNDIxZWE5MGFiNDA3NmFjOTZiZDJjOWU4ZDJh
MmQxNzcyMTI1ZGY3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hl
Y2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAKQEAg
LTc3LDEzNiArNzcsNiBAQCBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tlcihEb2N1bWVu
dCogZG9jdW1lbnQsIGJvb2wgc3RyaWN0UGFyc2luZykKIHsKIH0KIAotLy8gU2FsdCB0byBzZXBh
cmF0ZSBvdGhlcndpc2UgaWRlbnRpY2FsIHN0cmluZyBoYXNoZXMgc28gYSBjbGFzcy1zZWxlY3Rv
ciBsaWtlIC5hcnRpY2xlIHdvbid0IG1hdGNoIDxhcnRpY2xlPiBlbGVtZW50cy4KLWVudW0geyBU
YWdOYW1lU2FsdCA9IDEzLCBJZEF0dHJpYnV0ZVNhbHQgPSAxNywgQ2xhc3NBdHRyaWJ1dGVTYWx0
ID0gMTkgfTsKLQotc3RhdGljIGlubGluZSB2b2lkIGNvbGxlY3RFbGVtZW50SWRlbnRpZmllckhh
c2hlcyhjb25zdCBFbGVtZW50KiBlbGVtZW50LCBWZWN0b3I8dW5zaWduZWQsIDQ+JiBpZGVudGlm
aWVySGFzaGVzKQotewotICAgIGlkZW50aWZpZXJIYXNoZXMuYXBwZW5kKGVsZW1lbnQtPmxvY2Fs
TmFtZSgpLmltcGwoKS0+ZXhpc3RpbmdIYXNoKCkgKiBUYWdOYW1lU2FsdCk7Ci0gICAgaWYgKGVs
ZW1lbnQtPmhhc0lEKCkpCi0gICAgICAgIGlkZW50aWZpZXJIYXNoZXMuYXBwZW5kKGVsZW1lbnQt
PmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpLT5leGlzdGluZ0hhc2goKSAqIElkQXR0cmli
dXRlU2FsdCk7Ci0gICAgY29uc3QgU3R5bGVkRWxlbWVudCogc3R5bGVkRWxlbWVudCA9IGVsZW1l
bnQtPmlzU3R5bGVkRWxlbWVudCgpID8gc3RhdGljX2Nhc3Q8Y29uc3QgU3R5bGVkRWxlbWVudCo+
KGVsZW1lbnQpIDogMDsKLSAgICBpZiAoc3R5bGVkRWxlbWVudCAmJiBzdHlsZWRFbGVtZW50LT5o
YXNDbGFzcygpKSB7Ci0gICAgICAgIGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcmIGNsYXNzTmFtZXMg
PSBzdHlsZWRFbGVtZW50LT5jbGFzc05hbWVzKCk7Ci0gICAgICAgIHNpemVfdCBjb3VudCA9IGNs
YXNzTmFtZXMuc2l6ZSgpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyAr
K2kpCi0gICAgICAgICAgICBpZGVudGlmaWVySGFzaGVzLmFwcGVuZChjbGFzc05hbWVzW2ldLmlt
cGwoKS0+ZXhpc3RpbmdIYXNoKCkgKiBDbGFzc0F0dHJpYnV0ZVNhbHQpOwotICAgIH0KLX0KLQot
dm9pZCBTZWxlY3RvckNoZWNrZXI6OnB1c2hQYXJlbnRTdGFja0ZyYW1lKEVsZW1lbnQqIHBhcmVu
dCkKLXsKLSAgICBBU1NFUlQobV9hbmNlc3RvcklkZW50aWZpZXJGaWx0ZXIpOwotICAgIEFTU0VS
VChtX3BhcmVudFN0YWNrLmlzRW1wdHkoKSB8fCBtX3BhcmVudFN0YWNrLmxhc3QoKS5lbGVtZW50
ID09IHBhcmVudC0+cGFyZW50T3JIb3N0RWxlbWVudCgpKTsKLSAgICBBU1NFUlQoIW1fcGFyZW50
U3RhY2suaXNFbXB0eSgpIHx8ICFwYXJlbnQtPnBhcmVudE9ySG9zdEVsZW1lbnQoKSk7Ci0gICAg
bV9wYXJlbnRTdGFjay5hcHBlbmQoUGFyZW50U3RhY2tGcmFtZShwYXJlbnQpKTsKLSAgICBQYXJl
bnRTdGFja0ZyYW1lJiBwYXJlbnRGcmFtZSA9IG1fcGFyZW50U3RhY2subGFzdCgpOwotICAgIC8v
IE1peCB0YWdzLCBjbGFzcyBuYW1lcyBhbmQgaWRzIGludG8gc29tZSBzb3J0IG9mIHdlaXJkIGJv
dWlsbGFiYWlzc2UuCi0gICAgLy8gVGhlIGZpbHRlciBpcyB1c2VkIGZvciBmYXN0IHJlamVjdGlv
biBvZiBjaGlsZCBhbmQgZGVzY2VuZGFudCBzZWxlY3RvcnMuCi0gICAgY29sbGVjdEVsZW1lbnRJ
ZGVudGlmaWVySGFzaGVzKHBhcmVudCwgcGFyZW50RnJhbWUuaWRlbnRpZmllckhhc2hlcyk7Ci0g
ICAgc2l6ZV90IGNvdW50ID0gcGFyZW50RnJhbWUuaWRlbnRpZmllckhhc2hlcy5zaXplKCk7Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKQotICAgICAgICBtX2FuY2VzdG9y
SWRlbnRpZmllckZpbHRlci0+YWRkKHBhcmVudEZyYW1lLmlkZW50aWZpZXJIYXNoZXNbaV0pOwot
fQotCi12b2lkIFNlbGVjdG9yQ2hlY2tlcjo6cG9wUGFyZW50U3RhY2tGcmFtZSgpCi17Ci0gICAg
QVNTRVJUKCFtX3BhcmVudFN0YWNrLmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJUKG1fYW5jZXN0b3JJ
ZGVudGlmaWVyRmlsdGVyKTsKLSAgICBjb25zdCBQYXJlbnRTdGFja0ZyYW1lJiBwYXJlbnRGcmFt
ZSA9IG1fcGFyZW50U3RhY2subGFzdCgpOwotICAgIHNpemVfdCBjb3VudCA9IHBhcmVudEZyYW1l
LmlkZW50aWZpZXJIYXNoZXMuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291
bnQ7ICsraSkKLSAgICAgICAgbV9hbmNlc3RvcklkZW50aWZpZXJGaWx0ZXItPnJlbW92ZShwYXJl
bnRGcmFtZS5pZGVudGlmaWVySGFzaGVzW2ldKTsKLSAgICBtX3BhcmVudFN0YWNrLnJlbW92ZUxh
c3QoKTsKLSAgICBpZiAobV9wYXJlbnRTdGFjay5pc0VtcHR5KCkpIHsKLSAgICAgICAgQVNTRVJU
KG1fYW5jZXN0b3JJZGVudGlmaWVyRmlsdGVyLT5saWtlbHlFbXB0eSgpKTsKLSAgICAgICAgbV9h
bmNlc3RvcklkZW50aWZpZXJGaWx0ZXIuY2xlYXIoKTsKLSAgICB9Ci19Ci0KLXZvaWQgU2VsZWN0
b3JDaGVja2VyOjpzZXR1cFBhcmVudFN0YWNrKEVsZW1lbnQqIHBhcmVudCkKLXsKLSAgICBBU1NF
UlQobV9wYXJlbnRTdGFjay5pc0VtcHR5KCkgPT0gIW1fYW5jZXN0b3JJZGVudGlmaWVyRmlsdGVy
KTsKLSAgICAvLyBLaWxsIHdoYXRldmVyIHdlIHN0b3JlZCBiZWZvcmUuCi0gICAgbV9wYXJlbnRT
dGFjay5zaHJpbmsoMCk7Ci0gICAgbV9hbmNlc3RvcklkZW50aWZpZXJGaWx0ZXIgPSBhZG9wdFB0
cihuZXcgQmxvb21GaWx0ZXI8Ymxvb21GaWx0ZXJLZXlCaXRzPik7Ci0gICAgLy8gRmFzdCB2ZXJz
aW9uIGlmIHBhcmVudCBpcyBhIHJvb3QgZWxlbWVudDoKLSAgICBpZiAoIXBhcmVudC0+cGFyZW50
T3JIb3N0Tm9kZSgpKSB7Ci0gICAgICAgIHB1c2hQYXJlbnRTdGFja0ZyYW1lKHBhcmVudCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gT3RoZXJ3aXNlIGNsaW1iIHVwIHRoZSB0cmVl
LgotICAgIFZlY3RvcjxFbGVtZW50KiwgMzA+IGFuY2VzdG9yczsKLSAgICBmb3IgKEVsZW1lbnQq
IGFuY2VzdG9yID0gcGFyZW50OyBhbmNlc3RvcjsgYW5jZXN0b3IgPSBhbmNlc3Rvci0+cGFyZW50
T3JIb3N0RWxlbWVudCgpKQotICAgICAgICBhbmNlc3RvcnMuYXBwZW5kKGFuY2VzdG9yKTsKLSAg
ICBmb3IgKHNpemVfdCBuID0gYW5jZXN0b3JzLnNpemUoKTsgbjsgLS1uKQotICAgICAgICBwdXNo
UGFyZW50U3RhY2tGcmFtZShhbmNlc3RvcnNbbiAtIDFdKTsKLX0KLQotdm9pZCBTZWxlY3RvckNo
ZWNrZXI6OnB1c2hQYXJlbnQoRWxlbWVudCogcGFyZW50KQotewotICAgIEFTU0VSVChtX2FuY2Vz
dG9ySWRlbnRpZmllckZpbHRlcik7Ci0gICAgLy8gV2UgbWF5IGdldCBpbnZva2VkIGZvciBzb21l
IHJhbmRvbSBlbGVtZW50cyBpbiBzb21lIHdhY2t5IGNhc2VzIGR1cmluZyBzdHlsZSByZXNvbHZl
LgotICAgIC8vIFBhdXNlIG1haW50YWluaW5nIHRoZSBzdGFjayBpbiB0aGlzIGNhc2UuCi0gICAg
aWYgKG1fcGFyZW50U3RhY2subGFzdCgpLmVsZW1lbnQgIT0gcGFyZW50LT5wYXJlbnRPckhvc3RF
bGVtZW50KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBwdXNoUGFyZW50U3RhY2tGcmFtZShwYXJl
bnQpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgY29sbGVjdERlc2NlbmRhbnRTZWxlY3Rvcklk
ZW50aWZpZXJIYXNoZXMoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCB1bnNpZ25lZComIGhh
c2gsIGNvbnN0IHVuc2lnbmVkKiBlbmQpCi17Ci0gICAgc3dpdGNoIChzZWxlY3Rvci0+bV9tYXRj
aCkgewotICAgIGNhc2UgQ1NTU2VsZWN0b3I6OklkOgotICAgICAgICBpZiAoIXNlbGVjdG9yLT52
YWx1ZSgpLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICgqaGFzaCsrKSA9IHNlbGVjdG9yLT52YWx1
ZSgpLmltcGwoKS0+ZXhpc3RpbmdIYXNoKCkgKiBJZEF0dHJpYnV0ZVNhbHQ7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkNsYXNzOgotICAgICAgICBpZiAoIXNlbGVjdG9y
LT52YWx1ZSgpLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICgqaGFzaCsrKSA9IHNlbGVjdG9yLT52
YWx1ZSgpLmltcGwoKS0+ZXhpc3RpbmdIYXNoKCkgKiBDbGFzc0F0dHJpYnV0ZVNhbHQ7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBpZiAo
aGFzaCA9PSBlbmQpCi0gICAgICAgIHJldHVybjsKLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIGxv
Y2FsTmFtZSA9IHNlbGVjdG9yLT50YWcoKS5sb2NhbE5hbWUoKTsKLSAgICBpZiAobG9jYWxOYW1l
ICE9IHN0YXJBdG9tKQotICAgICAgICAoKmhhc2grKykgPSBsb2NhbE5hbWUuaW1wbCgpLT5leGlz
dGluZ0hhc2goKSAqIFRhZ05hbWVTYWx0OwotfQotCi12b2lkIFNlbGVjdG9yQ2hlY2tlcjo6Y29s
bGVjdElkZW50aWZpZXJIYXNoZXMoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCB1bnNpZ25l
ZCogaWRlbnRpZmllckhhc2hlcywgdW5zaWduZWQgbWF4aW11bUlkZW50aWZpZXJDb3VudCkKLXsK
LSAgICB1bnNpZ25lZCogaGFzaCA9IGlkZW50aWZpZXJIYXNoZXM7Ci0gICAgdW5zaWduZWQqIGVu
ZCA9IGlkZW50aWZpZXJIYXNoZXMgKyBtYXhpbXVtSWRlbnRpZmllckNvdW50OwotICAgIENTU1Nl
bGVjdG9yOjpSZWxhdGlvbiByZWxhdGlvbiA9IHNlbGVjdG9yLT5yZWxhdGlvbigpOwotCi0gICAg
Ly8gU2tpcCB0aGUgdG9wbW9zdCBzZWxlY3Rvci4gSXQgaXMgaGFuZGxlZCBxdWlja2x5IGJ5IHRo
ZSBydWxlIGhhc2hlcy4KLSAgICBib29sIHNraXBPdmVyU3Vic2VsZWN0b3JzID0gdHJ1ZTsKLSAg
ICBmb3IgKHNlbGVjdG9yID0gc2VsZWN0b3ItPnRhZ0hpc3RvcnkoKTsgc2VsZWN0b3I7IHNlbGVj
dG9yID0gc2VsZWN0b3ItPnRhZ0hpc3RvcnkoKSkgewotICAgICAgICAvLyBPbmx5IGNvbGxlY3Qg
aWRlbnRpZmllcnMgdGhhdCBtYXRjaCBhbmNlc3RvcnMuCi0gICAgICAgIHN3aXRjaCAocmVsYXRp
b24pIHsKLSAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6U3ViU2VsZWN0b3I6Ci0gICAgICAgICAg
ICBpZiAoIXNraXBPdmVyU3Vic2VsZWN0b3JzKQotICAgICAgICAgICAgICAgIGNvbGxlY3REZXNj
ZW5kYW50U2VsZWN0b3JJZGVudGlmaWVySGFzaGVzKHNlbGVjdG9yLCBoYXNoLCBlbmQpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkRpcmVjdEFkamFjZW50
OgotICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpJbmRpcmVjdEFkamFjZW50OgotICAgICAgICBj
YXNlIENTU1NlbGVjdG9yOjpTaGFkb3dEZXNjZW5kYW50OgotICAgICAgICAgICAgc2tpcE92ZXJT
dWJzZWxlY3RvcnMgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NT
U2VsZWN0b3I6OkRlc2NlbmRhbnQ6Ci0gICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkNoaWxkOgot
ICAgICAgICAgICAgc2tpcE92ZXJTdWJzZWxlY3RvcnMgPSBmYWxzZTsKLSAgICAgICAgICAgIGNv
bGxlY3REZXNjZW5kYW50U2VsZWN0b3JJZGVudGlmaWVySGFzaGVzKHNlbGVjdG9yLCBoYXNoLCBl
bmQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGhhc2ggPT0g
ZW5kKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICByZWxhdGlvbiA9IHNlbGVjdG9yLT5y
ZWxhdGlvbigpOwotICAgIH0KLSAgICAqaGFzaCA9IDA7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgY29u
c3QgQXRvbWljU3RyaW5nKiBsaW5rQXR0cmlidXRlKEVsZW1lbnQqIGVsZW1lbnQpCiB7CiAgICAg
aWYgKCFlbGVtZW50LT5pc0xpbmsoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9T
ZWxlY3RvckNoZWNrZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuaApp
bmRleCA5YmRiNjY5YjI0NmVlNjQzZDVlMmVlMjJiNWExYTI0ZWUwOTE4ZTZhLi44NDQ1YzYyNWMw
MjA3N2MxYzY2MzVmZDg2YWMyOGY1Y2M2N2VmMGRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvU2VsZWN0b3JDaGVja2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9y
Q2hlY2tlci5oCkBAIC0zNSw3ICszNSw2IEBACiAjaW5jbHVkZSAiUmVuZGVyU3R5bGVDb25zdGFu
dHMuaCIKICNpbmNsdWRlICJTcGFjZVNwbGl0U3RyaW5nLmgiCiAjaW5jbHVkZSAiU3R5bGVkRWxl
bWVudC5oIgotI2luY2x1ZGUgPHd0Zi9CbG9vbUZpbHRlci5oPgogI2luY2x1ZGUgPHd0Zi9IYXNo
U2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC04OSwxNiArODgsNiBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIGJvb2wgaXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IoY29uc3QgQ1NTU2Vs
ZWN0b3IqKTsKICAgICBib29sIGZhc3RDaGVja1NlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiwg
Y29uc3QgRWxlbWVudCopIGNvbnN0OwogCi0gICAgdGVtcGxhdGUgPHVuc2lnbmVkIG1heGltdW1J
ZGVudGlmaWVyQ291bnQ+Ci0gICAgaW5saW5lIGJvb2wgZmFzdFJlamVjdFNlbGVjdG9yKGNvbnN0
IHVuc2lnbmVkKiBpZGVudGlmaWVySGFzaGVzKSBjb25zdDsKLSAgICBzdGF0aWMgdm9pZCBjb2xs
ZWN0SWRlbnRpZmllckhhc2hlcyhjb25zdCBDU1NTZWxlY3RvciosIHVuc2lnbmVkKiBpZGVudGlm
aWVySGFzaGVzLCB1bnNpZ25lZCBtYXhpbXVtSWRlbnRpZmllckNvdW50KTsKLQotICAgIHZvaWQg
c2V0dXBQYXJlbnRTdGFjayhFbGVtZW50KiBwYXJlbnQpOwotICAgIHZvaWQgcHVzaFBhcmVudChF
bGVtZW50KiBwYXJlbnQpOwotICAgIHZvaWQgcG9wUGFyZW50KCkgeyBwb3BQYXJlbnRTdGFja0Zy
YW1lKCk7IH0KLSAgICBib29sIHBhcmVudFN0YWNrSXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1f
cGFyZW50U3RhY2suaXNFbXB0eSgpOyB9Ci0gICAgYm9vbCBwYXJlbnRTdGFja0lzQ29uc2lzdGVu
dChjb25zdCBDb250YWluZXJOb2RlKiBwYXJlbnROb2RlKSBjb25zdCB7IHJldHVybiAhbV9wYXJl
bnRTdGFjay5pc0VtcHR5KCkgJiYgbV9wYXJlbnRTdGFjay5sYXN0KCkuZWxlbWVudCA9PSBwYXJl
bnROb2RlOyB9Ci0KICAgICBFSW5zaWRlTGluayBkZXRlcm1pbmVMaW5rU3RhdGUoRWxlbWVudCop
IGNvbnN0OwogICAgIHZvaWQgYWxsVmlzaXRlZFN0YXRlQ2hhbmdlZCgpOwogICAgIHZvaWQgdmlz
aXRlZFN0YXRlQ2hhbmdlZChMaW5rSGFzaCB2aXNpdGVkSGFzaCk7CkBAIC0xMjgsMjYgKzExNywx
MSBAQCBwcml2YXRlOgogCiAgICAgRUluc2lkZUxpbmsgZGV0ZXJtaW5lTGlua1N0YXRlU2xvd0Nh
c2UoRWxlbWVudCopIGNvbnN0OwogCi0gICAgdm9pZCBwdXNoUGFyZW50U3RhY2tGcmFtZShFbGVt
ZW50KiBwYXJlbnQpOwotICAgIHZvaWQgcG9wUGFyZW50U3RhY2tGcmFtZSgpOwotCiAgICAgRG9j
dW1lbnQqIG1fZG9jdW1lbnQ7CiAgICAgYm9vbCBtX3N0cmljdFBhcnNpbmc7CiAgICAgYm9vbCBt
X2RvY3VtZW50SXNIVE1MOwogICAgIE1vZGUgbV9tb2RlOwogICAgIG11dGFibGUgSGFzaFNldDxM
aW5rSGFzaCwgTGlua0hhc2hIYXNoPiBtX2xpbmtzQ2hlY2tlZEZvclZpc2l0ZWRTdGF0ZTsKLQot
ICAgIHN0cnVjdCBQYXJlbnRTdGFja0ZyYW1lIHsKLSAgICAgICAgUGFyZW50U3RhY2tGcmFtZSgp
IDogZWxlbWVudCgwKSB7IH0KLSAgICAgICAgUGFyZW50U3RhY2tGcmFtZShFbGVtZW50KiBlbGVt
ZW50KSA6IGVsZW1lbnQoZWxlbWVudCkgeyB9Ci0gICAgICAgIEVsZW1lbnQqIGVsZW1lbnQ7Ci0g
ICAgICAgIFZlY3Rvcjx1bnNpZ25lZCwgND4gaWRlbnRpZmllckhhc2hlczsKLSAgICB9OwotICAg
IFZlY3RvcjxQYXJlbnRTdGFja0ZyYW1lPiBtX3BhcmVudFN0YWNrOwotCi0gICAgLy8gV2l0aCAx
MDAgdW5pcXVlIHN0cmluZ3MgaW4gdGhlIGZpbHRlciwgMl4xMiBzbG90IHRhYmxlIGhhcyBmYWxz
ZSBwb3NpdGl2ZSByYXRlIG9mIH4wLjIlLgotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBibG9v
bUZpbHRlcktleUJpdHMgPSAxMjsKLSAgICBPd25QdHI8Qmxvb21GaWx0ZXI8Ymxvb21GaWx0ZXJL
ZXlCaXRzPiA+IG1fYW5jZXN0b3JJZGVudGlmaWVyRmlsdGVyOwogfTsKIAogaW5saW5lIEVJbnNp
ZGVMaW5rIFNlbGVjdG9yQ2hlY2tlcjo6ZGV0ZXJtaW5lTGlua1N0YXRlKEVsZW1lbnQqIGVsZW1l
bnQpIGNvbnN0CkBAIC0xNTcsMTcgKzEzMSw2IEBAIGlubGluZSBFSW5zaWRlTGluayBTZWxlY3Rv
ckNoZWNrZXI6OmRldGVybWluZUxpbmtTdGF0ZShFbGVtZW50KiBlbGVtZW50KSBjb25zdAogICAg
IHJldHVybiBkZXRlcm1pbmVMaW5rU3RhdGVTbG93Q2FzZShlbGVtZW50KTsKIH0KIAotdGVtcGxh
dGUgPHVuc2lnbmVkIG1heGltdW1JZGVudGlmaWVyQ291bnQ+Ci1pbmxpbmUgYm9vbCBTZWxlY3Rv
ckNoZWNrZXI6OmZhc3RSZWplY3RTZWxlY3Rvcihjb25zdCB1bnNpZ25lZCogaWRlbnRpZmllckhh
c2hlcykgY29uc3QKLXsKLSAgICBBU1NFUlQobV9hbmNlc3RvcklkZW50aWZpZXJGaWx0ZXIpOwot
ICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCBtYXhpbXVtSWRlbnRpZmllckNvdW50ICYmIGlk
ZW50aWZpZXJIYXNoZXNbbl07ICsrbikgewotICAgICAgICBpZiAoIW1fYW5jZXN0b3JJZGVudGlm
aWVyRmlsdGVyLT5tYXlDb250YWluKGlkZW50aWZpZXJIYXNoZXNbbl0pKQotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQogaW5saW5lIGJvb2wg
U2VsZWN0b3JDaGVja2VyOjppc0NvbW1vblBzZXVkb0NsYXNzU2VsZWN0b3IoY29uc3QgQ1NTU2Vs
ZWN0b3IqIHNlbGVjdG9yKQogewogICAgIGlmIChzZWxlY3Rvci0+bV9tYXRjaCAhPSBDU1NTZWxl
Y3Rvcjo6UHNldWRvQ2xhc3MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0
b3JGaWx0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yRmlsdGVyLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5jZWFhNzY4MTQ5MDBjMGIzMWQzOTRjNGYyNmNjNGNiYjVlMzVlOGRjCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yRmlsdGVyLmNwcApAQCAtMCww
ICsxLDE2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBr
ZGUub3JnKQorICogICAgICAgICAgIChDKSAyMDA0LTIwMDUgQWxsYW4gU2FuZGZlbGQgSmVuc2Vu
IChrZGVAY2FyZXdvbGYuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IE5pY2hvbGFz
IFNoYW5rcyAod2Via2l0QG5pY2tzaGFua3MuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDA1LCAy
MDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBBbGV4ZXkgUHJvc2t1cnlha292IDxhcEB3
ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEVyaWMgU2VpZGVsIDxlcmlj
QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgVG9yY2ggTW9iaWxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKKyAq
IENvcHlyaWdodCAoYykgMjAxMSwgQ29kZSBBdXJvcmEgRm9ydW0uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNlbGVjdG9y
RmlsdGVyLmgiCisKKyNpbmNsdWRlICJDU1NTZWxlY3Rvci5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKKy8vIFNhbHQgdG8gc2VwYXJhdGUgb3RoZXJ3aXNlIGlkZW50aWNhbCBzdHJpbmcgaGFz
aGVzIHNvIGEgY2xhc3Mtc2VsZWN0b3IgbGlrZSAuYXJ0aWNsZSB3b24ndCBtYXRjaCA8YXJ0aWNs
ZT4gZWxlbWVudHMuCitlbnVtIHsgVGFnTmFtZVNhbHQgPSAxMywgSWRBdHRyaWJ1dGVTYWx0ID0g
MTcsIENsYXNzQXR0cmlidXRlU2FsdCA9IDE5IH07CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb2xs
ZWN0RWxlbWVudElkZW50aWZpZXJIYXNoZXMoY29uc3QgRWxlbWVudCogZWxlbWVudCwgVmVjdG9y
PHVuc2lnbmVkLCA0PiYgaWRlbnRpZmllckhhc2hlcykKK3sKKyAgICBpZGVudGlmaWVySGFzaGVz
LmFwcGVuZChlbGVtZW50LT5sb2NhbE5hbWUoKS5pbXBsKCktPmV4aXN0aW5nSGFzaCgpICogVGFn
TmFtZVNhbHQpOworICAgIGlmIChlbGVtZW50LT5oYXNJRCgpKQorICAgICAgICBpZGVudGlmaWVy
SGFzaGVzLmFwcGVuZChlbGVtZW50LT5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmltcGwoKS0+ZXhp
c3RpbmdIYXNoKCkgKiBJZEF0dHJpYnV0ZVNhbHQpOworICAgIGNvbnN0IFN0eWxlZEVsZW1lbnQq
IHN0eWxlZEVsZW1lbnQgPSBlbGVtZW50LT5pc1N0eWxlZEVsZW1lbnQoKSA/IHN0YXRpY19jYXN0
PGNvbnN0IFN0eWxlZEVsZW1lbnQqPihlbGVtZW50KSA6IDA7CisgICAgaWYgKHN0eWxlZEVsZW1l
bnQgJiYgc3R5bGVkRWxlbWVudC0+aGFzQ2xhc3MoKSkgeworICAgICAgICBjb25zdCBTcGFjZVNw
bGl0U3RyaW5nJiBjbGFzc05hbWVzID0gc3R5bGVkRWxlbWVudC0+Y2xhc3NOYW1lcygpOworICAg
ICAgICBzaXplX3QgY291bnQgPSBjbGFzc05hbWVzLnNpemUoKTsKKyAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAgICAgICAgaWRlbnRpZmllckhhc2hlcy5h
cHBlbmQoY2xhc3NOYW1lc1tpXS5pbXBsKCktPmV4aXN0aW5nSGFzaCgpICogQ2xhc3NBdHRyaWJ1
dGVTYWx0KTsKKyAgICB9Cit9CisKK3ZvaWQgU2VsZWN0b3JGaWx0ZXI6OnB1c2hQYXJlbnRTdGFj
a0ZyYW1lKEVsZW1lbnQqIHBhcmVudCkKK3sKKyAgICBBU1NFUlQobV9hbmNlc3RvcklkZW50aWZp
ZXJGaWx0ZXIpOworICAgIEFTU0VSVChtX3BhcmVudFN0YWNrLmlzRW1wdHkoKSB8fCBtX3BhcmVu
dFN0YWNrLmxhc3QoKS5lbGVtZW50ID09IHBhcmVudC0+cGFyZW50T3JIb3N0RWxlbWVudCgpKTsK
KyAgICBBU1NFUlQoIW1fcGFyZW50U3RhY2suaXNFbXB0eSgpIHx8ICFwYXJlbnQtPnBhcmVudE9y
SG9zdEVsZW1lbnQoKSk7CisgICAgbV9wYXJlbnRTdGFjay5hcHBlbmQoUGFyZW50U3RhY2tGcmFt
ZShwYXJlbnQpKTsKKyAgICBQYXJlbnRTdGFja0ZyYW1lJiBwYXJlbnRGcmFtZSA9IG1fcGFyZW50
U3RhY2subGFzdCgpOworICAgIC8vIE1peCB0YWdzLCBjbGFzcyBuYW1lcyBhbmQgaWRzIGludG8g
c29tZSBzb3J0IG9mIHdlaXJkIGJvdWlsbGFiYWlzc2UuCisgICAgLy8gVGhlIGZpbHRlciBpcyB1
c2VkIGZvciBmYXN0IHJlamVjdGlvbiBvZiBjaGlsZCBhbmQgZGVzY2VuZGFudCBzZWxlY3RvcnMu
CisgICAgY29sbGVjdEVsZW1lbnRJZGVudGlmaWVySGFzaGVzKHBhcmVudCwgcGFyZW50RnJhbWUu
aWRlbnRpZmllckhhc2hlcyk7CisgICAgc2l6ZV90IGNvdW50ID0gcGFyZW50RnJhbWUuaWRlbnRp
Zmllckhhc2hlcy5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytp
KQorICAgICAgICBtX2FuY2VzdG9ySWRlbnRpZmllckZpbHRlci0+YWRkKHBhcmVudEZyYW1lLmlk
ZW50aWZpZXJIYXNoZXNbaV0pOworfQorCit2b2lkIFNlbGVjdG9yRmlsdGVyOjpwb3BQYXJlbnRT
dGFja0ZyYW1lKCkKK3sKKyAgICBBU1NFUlQoIW1fcGFyZW50U3RhY2suaXNFbXB0eSgpKTsKKyAg
ICBBU1NFUlQobV9hbmNlc3RvcklkZW50aWZpZXJGaWx0ZXIpOworICAgIGNvbnN0IFBhcmVudFN0
YWNrRnJhbWUmIHBhcmVudEZyYW1lID0gbV9wYXJlbnRTdGFjay5sYXN0KCk7CisgICAgc2l6ZV90
IGNvdW50ID0gcGFyZW50RnJhbWUuaWRlbnRpZmllckhhc2hlcy5zaXplKCk7CisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAgICBtX2FuY2VzdG9ySWRlbnRpZmll
ckZpbHRlci0+cmVtb3ZlKHBhcmVudEZyYW1lLmlkZW50aWZpZXJIYXNoZXNbaV0pOworICAgIG1f
cGFyZW50U3RhY2sucmVtb3ZlTGFzdCgpOworICAgIGlmIChtX3BhcmVudFN0YWNrLmlzRW1wdHko
KSkgeworICAgICAgICBBU1NFUlQobV9hbmNlc3RvcklkZW50aWZpZXJGaWx0ZXItPmxpa2VseUVt
cHR5KCkpOworICAgICAgICBtX2FuY2VzdG9ySWRlbnRpZmllckZpbHRlci5jbGVhcigpOworICAg
IH0KK30KKwordm9pZCBTZWxlY3RvckZpbHRlcjo6c2V0dXBQYXJlbnRTdGFjayhFbGVtZW50KiBw
YXJlbnQpCit7CisgICAgQVNTRVJUKG1fcGFyZW50U3RhY2suaXNFbXB0eSgpID09ICFtX2FuY2Vz
dG9ySWRlbnRpZmllckZpbHRlcik7CisgICAgLy8gS2lsbCB3aGF0ZXZlciB3ZSBzdG9yZWQgYmVm
b3JlLgorICAgIG1fcGFyZW50U3RhY2suc2hyaW5rKDApOworICAgIG1fYW5jZXN0b3JJZGVudGlm
aWVyRmlsdGVyID0gYWRvcHRQdHIobmV3IEJsb29tRmlsdGVyPGJsb29tRmlsdGVyS2V5Qml0cz4p
OworICAgIC8vIEZhc3QgdmVyc2lvbiBpZiBwYXJlbnQgaXMgYSByb290IGVsZW1lbnQ6CisgICAg
aWYgKCFwYXJlbnQtPnBhcmVudE9ySG9zdE5vZGUoKSkgeworICAgICAgICBwdXNoUGFyZW50U3Rh
Y2tGcmFtZShwYXJlbnQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIC8vIE90aGVyd2lz
ZSBjbGltYiB1cCB0aGUgdHJlZS4KKyAgICBWZWN0b3I8RWxlbWVudCosIDMwPiBhbmNlc3RvcnM7
CisgICAgZm9yIChFbGVtZW50KiBhbmNlc3RvciA9IHBhcmVudDsgYW5jZXN0b3I7IGFuY2VzdG9y
ID0gYW5jZXN0b3ItPnBhcmVudE9ySG9zdEVsZW1lbnQoKSkKKyAgICAgICAgYW5jZXN0b3JzLmFw
cGVuZChhbmNlc3Rvcik7CisgICAgZm9yIChzaXplX3QgbiA9IGFuY2VzdG9ycy5zaXplKCk7IG47
IC0tbikKKyAgICAgICAgcHVzaFBhcmVudFN0YWNrRnJhbWUoYW5jZXN0b3JzW24gLSAxXSk7Cit9
CisKK3ZvaWQgU2VsZWN0b3JGaWx0ZXI6OnB1c2hQYXJlbnQoRWxlbWVudCogcGFyZW50KQorewor
ICAgIEFTU0VSVChtX2FuY2VzdG9ySWRlbnRpZmllckZpbHRlcik7CisgICAgLy8gV2UgbWF5IGdl
dCBpbnZva2VkIGZvciBzb21lIHJhbmRvbSBlbGVtZW50cyBpbiBzb21lIHdhY2t5IGNhc2VzIGR1
cmluZyBzdHlsZSByZXNvbHZlLgorICAgIC8vIFBhdXNlIG1haW50YWluaW5nIHRoZSBzdGFjayBp
biB0aGlzIGNhc2UuCisgICAgaWYgKG1fcGFyZW50U3RhY2subGFzdCgpLmVsZW1lbnQgIT0gcGFy
ZW50LT5wYXJlbnRPckhvc3RFbGVtZW50KCkpCisgICAgICAgIHJldHVybjsKKyAgICBwdXNoUGFy
ZW50U3RhY2tGcmFtZShwYXJlbnQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY29sbGVjdERl
c2NlbmRhbnRTZWxlY3RvcklkZW50aWZpZXJIYXNoZXMoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVj
dG9yLCB1bnNpZ25lZComIGhhc2gsIGNvbnN0IHVuc2lnbmVkKiBlbmQpCit7CisgICAgc3dpdGNo
IChzZWxlY3Rvci0+bV9tYXRjaCkgeworICAgIGNhc2UgQ1NTU2VsZWN0b3I6OklkOgorICAgICAg
ICBpZiAoIXNlbGVjdG9yLT52YWx1ZSgpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICgqaGFzaCsr
KSA9IHNlbGVjdG9yLT52YWx1ZSgpLmltcGwoKS0+ZXhpc3RpbmdIYXNoKCkgKiBJZEF0dHJpYnV0
ZVNhbHQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkNsYXNzOgorICAg
ICAgICBpZiAoIXNlbGVjdG9yLT52YWx1ZSgpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICgqaGFz
aCsrKSA9IHNlbGVjdG9yLT52YWx1ZSgpLmltcGwoKS0+ZXhpc3RpbmdIYXNoKCkgKiBDbGFzc0F0
dHJpYnV0ZVNhbHQ7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICBpZiAoaGFzaCA9PSBlbmQpCisgICAgICAgIHJldHVybjsKKyAgICBjb25z
dCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSA9IHNlbGVjdG9yLT50YWcoKS5sb2NhbE5hbWUoKTsK
KyAgICBpZiAobG9jYWxOYW1lICE9IHN0YXJBdG9tKQorICAgICAgICAoKmhhc2grKykgPSBsb2Nh
bE5hbWUuaW1wbCgpLT5leGlzdGluZ0hhc2goKSAqIFRhZ05hbWVTYWx0OworfQorCit2b2lkIFNl
bGVjdG9yRmlsdGVyOjpjb2xsZWN0SWRlbnRpZmllckhhc2hlcyhjb25zdCBDU1NTZWxlY3Rvciog
c2VsZWN0b3IsIHVuc2lnbmVkKiBpZGVudGlmaWVySGFzaGVzLCB1bnNpZ25lZCBtYXhpbXVtSWRl
bnRpZmllckNvdW50KQoreworICAgIHVuc2lnbmVkKiBoYXNoID0gaWRlbnRpZmllckhhc2hlczsK
KyAgICB1bnNpZ25lZCogZW5kID0gaWRlbnRpZmllckhhc2hlcyArIG1heGltdW1JZGVudGlmaWVy
Q291bnQ7CisgICAgQ1NTU2VsZWN0b3I6OlJlbGF0aW9uIHJlbGF0aW9uID0gc2VsZWN0b3ItPnJl
bGF0aW9uKCk7CisKKyAgICAvLyBTa2lwIHRoZSB0b3Btb3N0IHNlbGVjdG9yLiBJdCBpcyBoYW5k
bGVkIHF1aWNrbHkgYnkgdGhlIHJ1bGUgaGFzaGVzLgorICAgIGJvb2wgc2tpcE92ZXJTdWJzZWxl
Y3RvcnMgPSB0cnVlOworICAgIGZvciAoc2VsZWN0b3IgPSBzZWxlY3Rvci0+dGFnSGlzdG9yeSgp
OyBzZWxlY3Rvcjsgc2VsZWN0b3IgPSBzZWxlY3Rvci0+dGFnSGlzdG9yeSgpKSB7CisgICAgICAg
IC8vIE9ubHkgY29sbGVjdCBpZGVudGlmaWVycyB0aGF0IG1hdGNoIGFuY2VzdG9ycy4KKyAgICAg
ICAgc3dpdGNoIChyZWxhdGlvbikgeworICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpTdWJTZWxl
Y3RvcjoKKyAgICAgICAgICAgIGlmICghc2tpcE92ZXJTdWJzZWxlY3RvcnMpCisgICAgICAgICAg
ICAgICAgY29sbGVjdERlc2NlbmRhbnRTZWxlY3RvcklkZW50aWZpZXJIYXNoZXMoc2VsZWN0b3Is
IGhhc2gsIGVuZCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NTZWxlY3Rv
cjo6RGlyZWN0QWRqYWNlbnQ6CisgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkluZGlyZWN0QWRq
YWNlbnQ6CisgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlNoYWRvd0Rlc2NlbmRhbnQ6CisgICAg
ICAgICAgICBza2lwT3ZlclN1YnNlbGVjdG9ycyA9IHRydWU7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6RGVzY2VuZGFudDoKKyAgICAgICAgY2FzZSBDU1NT
ZWxlY3Rvcjo6Q2hpbGQ6CisgICAgICAgICAgICBza2lwT3ZlclN1YnNlbGVjdG9ycyA9IGZhbHNl
OworICAgICAgICAgICAgY29sbGVjdERlc2NlbmRhbnRTZWxlY3RvcklkZW50aWZpZXJIYXNoZXMo
c2VsZWN0b3IsIGhhc2gsIGVuZCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBpZiAoaGFzaCA9PSBlbmQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHJlbGF0
aW9uID0gc2VsZWN0b3ItPnJlbGF0aW9uKCk7CisgICAgfQorICAgICpoYXNoID0gMDsKK30KKwor
fQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JGaWx0ZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckZpbHRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU4MTI0ZjAzYjRl
YzY0ZjdiOTVjMmU3YWY3N2I4Yzc0MTQ5ZmQxZGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU2VsZWN0b3JGaWx0ZXIuaApAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiAgICAgICAgICAg
KEMpIDIwMDQtMjAwNSBBbGxhbiBTYW5kZmVsZCBKZW5zZW4gKGtkZUBjYXJld29sZi5jb20pCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgTmljaG9sYXMgU2hhbmtzICh3ZWJraXRAbmlja3No
YW5rcy5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDks
IDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA3IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQHdlYmtpdC5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDcsIDIwMDggRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQorICogQ29weXJpZ2h0IChjKSAyMDExLCBD
b2RlIEF1cm9yYSBGb3J1bS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
UmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZu
ZGVmIFNlbGVjdG9yRmlsdGVyX2gKKyNkZWZpbmUgU2VsZWN0b3JGaWx0ZXJfaAorCisjaW5jbHVk
ZSAiU3R5bGVkRWxlbWVudC5oIgorI2luY2x1ZGUgPHd0Zi9CbG9vbUZpbHRlci5oPgorI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDU1NTZWxl
Y3RvcjsKKworY2xhc3MgU2VsZWN0b3JGaWx0ZXIgeworcHVibGljOgorICAgIHZvaWQgcHVzaFBh
cmVudFN0YWNrRnJhbWUoRWxlbWVudCogcGFyZW50KTsKKyAgICB2b2lkIHBvcFBhcmVudFN0YWNr
RnJhbWUoKTsKKworICAgIHZvaWQgc2V0dXBQYXJlbnRTdGFjayhFbGVtZW50KiBwYXJlbnQpOwor
ICAgIHZvaWQgcHVzaFBhcmVudChFbGVtZW50KiBwYXJlbnQpOworICAgIHZvaWQgcG9wUGFyZW50
KCkgeyBwb3BQYXJlbnRTdGFja0ZyYW1lKCk7IH0KKyAgICBib29sIHBhcmVudFN0YWNrSXNFbXB0
eSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50U3RhY2suaXNFbXB0eSgpOyB9CisgICAgYm9vbCBw
YXJlbnRTdGFja0lzQ29uc2lzdGVudChjb25zdCBDb250YWluZXJOb2RlKiBwYXJlbnROb2RlKSBj
b25zdCB7IHJldHVybiAhbV9wYXJlbnRTdGFjay5pc0VtcHR5KCkgJiYgbV9wYXJlbnRTdGFjay5s
YXN0KCkuZWxlbWVudCA9PSBwYXJlbnROb2RlOyB9CisKKyAgICB0ZW1wbGF0ZSA8dW5zaWduZWQg
bWF4aW11bUlkZW50aWZpZXJDb3VudD4KKyAgICBpbmxpbmUgYm9vbCBmYXN0UmVqZWN0U2VsZWN0
b3IoY29uc3QgdW5zaWduZWQqIGlkZW50aWZpZXJIYXNoZXMpIGNvbnN0OworICAgIHN0YXRpYyB2
b2lkIGNvbGxlY3RJZGVudGlmaWVySGFzaGVzKGNvbnN0IENTU1NlbGVjdG9yKiwgdW5zaWduZWQq
IGlkZW50aWZpZXJIYXNoZXMsIHVuc2lnbmVkIG1heGltdW1JZGVudGlmaWVyQ291bnQpOworCitw
cml2YXRlOgorICAgIHN0cnVjdCBQYXJlbnRTdGFja0ZyYW1lIHsKKyAgICAgICAgUGFyZW50U3Rh
Y2tGcmFtZSgpIDogZWxlbWVudCgwKSB7IH0KKyAgICAgICAgUGFyZW50U3RhY2tGcmFtZShFbGVt
ZW50KiBlbGVtZW50KSA6IGVsZW1lbnQoZWxlbWVudCkgeyB9CisgICAgICAgIEVsZW1lbnQqIGVs
ZW1lbnQ7CisgICAgICAgIFZlY3Rvcjx1bnNpZ25lZCwgND4gaWRlbnRpZmllckhhc2hlczsKKyAg
ICB9OworICAgIFZlY3RvcjxQYXJlbnRTdGFja0ZyYW1lPiBtX3BhcmVudFN0YWNrOworCisgICAg
Ly8gV2l0aCAxMDAgdW5pcXVlIHN0cmluZ3MgaW4gdGhlIGZpbHRlciwgMl4xMiBzbG90IHRhYmxl
IGhhcyBmYWxzZSBwb3NpdGl2ZSByYXRlIG9mIH4wLjIlLgorICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBibG9vbUZpbHRlcktleUJpdHMgPSAxMjsKKyAgICBPd25QdHI8Qmxvb21GaWx0ZXI8Ymxv
b21GaWx0ZXJLZXlCaXRzPiA+IG1fYW5jZXN0b3JJZGVudGlmaWVyRmlsdGVyOworfTsKKwordGVt
cGxhdGUgPHVuc2lnbmVkIG1heGltdW1JZGVudGlmaWVyQ291bnQ+CitpbmxpbmUgYm9vbCBTZWxl
Y3RvckZpbHRlcjo6ZmFzdFJlamVjdFNlbGVjdG9yKGNvbnN0IHVuc2lnbmVkKiBpZGVudGlmaWVy
SGFzaGVzKSBjb25zdAoreworICAgIEFTU0VSVChtX2FuY2VzdG9ySWRlbnRpZmllckZpbHRlcik7
CisgICAgZm9yICh1bnNpZ25lZCBuID0gMDsgbiA8IG1heGltdW1JZGVudGlmaWVyQ291bnQgJiYg
aWRlbnRpZmllckhhc2hlc1tuXTsgKytuKSB7CisgICAgICAgIGlmICghbV9hbmNlc3RvcklkZW50
aWZpZXJGaWx0ZXItPm1heUNvbnRhaW4oaWRlbnRpZmllckhhc2hlc1tuXSkpCisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCit9CisKKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCmluZGV4IGU4MzZmMzMwNzc5NDYwNDE4
YzhlMTVhMmE0ZDk4ZDdjM2MwNWM4Y2QuLjI4ZDhlZGJjN2RmMWQ2NTUxNTI0ZWVhMDljNzA4ZDRj
YjIzZWJkMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKQEAgLTI1OCw2ICsy
NTgsNyBAQCBzdGF0aWMgU3R5bGVQcm9wZXJ0eVNldCogcmlnaHRUb0xlZnREZWNsYXJhdGlvbigp
CiAgICAgcmV0dXJuIHJpZ2h0VG9MZWZ0RGVjbC5nZXQoKTsKIH0KIAorCiBTdHlsZVJlc29sdmVy
OjpTdHlsZVJlc29sdmVyKERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCBtYXRjaEF1dGhvckFuZFVz
ZXJTdHlsZXMpCiAgICAgOiBtX2hhc1VBQXBwZWFyYW5jZShmYWxzZSkKICAgICAsIG1fYmFja2dy
b3VuZERhdGEoQmFja2dyb3VuZEZpbGxMYXllcikKQEAgLTQwNSwxMCArNDA2LDEwIEBAIHZvaWQg
U3R5bGVSZXNvbHZlcjo6cHVzaFBhcmVudEVsZW1lbnQoRWxlbWVudCogcGFyZW50KQogICAgIC8v
IHN0eWxlIHJlY2FsYyBpbiB0aGUgbWlkZGxlIG9mIHRyZWUgYnVpbGRpbmcuIFdlIG1heSBhbHNv
IGJlIGludm9rZWQgZnJvbSBzb21ld2hlcmUgd2l0aGluIHRoZSB0cmVlLgogICAgIC8vIFJlc2V0
IHRoZSBzdGFjayBpbiB0aGlzIGNhc2UsIG9yIGlmIHdlIHNlZSBhIG5ldyByb290IGVsZW1lbnQu
CiAgICAgLy8gT3RoZXJ3aXNlIGp1c3QgcHVzaCB0aGUgbmV3IHBhcmVudC4KLSAgICBpZiAoIXBh
cmVudHNQYXJlbnQgfHwgbV9jaGVja2VyLnBhcmVudFN0YWNrSXNFbXB0eSgpKQotICAgICAgICBt
X2NoZWNrZXIuc2V0dXBQYXJlbnRTdGFjayhwYXJlbnQpOworICAgIGlmICghcGFyZW50c1BhcmVu
dCB8fCBtX3NlbGVjdG9yRmlsdGVyLnBhcmVudFN0YWNrSXNFbXB0eSgpKQorICAgICAgICBtX3Nl
bGVjdG9yRmlsdGVyLnNldHVwUGFyZW50U3RhY2socGFyZW50KTsKICAgICBlbHNlCi0gICAgICAg
IG1fY2hlY2tlci5wdXNoUGFyZW50KHBhcmVudCk7CisgICAgICAgIG1fc2VsZWN0b3JGaWx0ZXIu
cHVzaFBhcmVudChwYXJlbnQpOwogCiAgICAgLy8gTm90ZTogV2UgbXVzdG4ndCBza2lwIFNoYWRv
d1Jvb3Qgbm9kZXMgZm9yIHRoZSBzY29wZSBzdGFjay4KICAgICBpZiAobV9zY29wZVJlc29sdmVy
KQpAQCAtNDE5LDggKzQyMCw4IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6cG9wUGFyZW50RWxlbWVu
dChFbGVtZW50KiBwYXJlbnQpCiB7CiAgICAgLy8gTm90ZSB0aGF0IHdlIG1heSBnZXQgaW52b2tl
ZCBmb3Igc29tZSByYW5kb20gZWxlbWVudHMgaW4gc29tZSB3YWNreSBjYXNlcyBkdXJpbmcgc3R5
bGUgcmVzb2x2ZS4KICAgICAvLyBQYXVzZSBtYWludGFpbmluZyB0aGUgc3RhY2sgaW4gdGhpcyBj
YXNlLgotICAgIGlmIChtX2NoZWNrZXIucGFyZW50U3RhY2tJc0NvbnNpc3RlbnQocGFyZW50KSkK
LSAgICAgICAgbV9jaGVja2VyLnBvcFBhcmVudCgpOworICAgIGlmIChtX3NlbGVjdG9yRmlsdGVy
LnBhcmVudFN0YWNrSXNDb25zaXN0ZW50KHBhcmVudCkpCisgICAgICAgIG1fc2VsZWN0b3JGaWx0
ZXIucG9wUGFyZW50KCk7CiAgICAgaWYgKG1fc2NvcGVSZXNvbHZlcikKICAgICAgICAgbV9zY29w
ZVJlc29sdmVyLT5wb3AocGFyZW50KTsKIH0KQEAgLTg0MywxMiArODQ0LDEyIEBAIHZvaWQgU3R5
bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxl
RGF0YT4qIHJ1bGVzLCBpCiAKICAgICAvLyBJbiBzb21lIGNhc2VzIHdlIG1heSBlbmQgdXAgbG9v
a2luZyB1cCBzdHlsZSBmb3IgcmFuZG9tIGVsZW1lbnRzIGluIHRoZSBtaWRkbGUgb2YgYSByZWN1
cnNpdmUgdHJlZSByZXNvbHZlLgogICAgIC8vIEFuY2VzdG9yIGlkZW50aWZpZXIgZmlsdGVyIHdv
bid0IGJlIHVwLXRvLWRhdGUgaW4gdGhhdCBjYXNlIGFuZCB3ZSBjYW4ndCB1c2UgdGhlIGZhc3Qg
cGF0aC4KLSAgICBib29sIGNhblVzZUZhc3RSZWplY3QgPSBtX2NoZWNrZXIucGFyZW50U3RhY2tJ
c0NvbnNpc3RlbnQobV9wYXJlbnROb2RlKTsKKyAgICBib29sIGNhblVzZUZhc3RSZWplY3QgPSBt
X3NlbGVjdG9yRmlsdGVyLnBhcmVudFN0YWNrSXNDb25zaXN0ZW50KG1fcGFyZW50Tm9kZSk7CiAK
ICAgICB1bnNpZ25lZCBzaXplID0gcnVsZXMtPnNpemUoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgIGNvbnN0IFJ1bGVEYXRhJiBydWxlRGF0YSA9
IHJ1bGVzLT5hdChpKTsKLSAgICAgICAgaWYgKGNhblVzZUZhc3RSZWplY3QgJiYgbV9jaGVja2Vy
LmZhc3RSZWplY3RTZWxlY3RvcjxSdWxlRGF0YTo6bWF4aW11bUlkZW50aWZpZXJDb3VudD4ocnVs
ZURhdGEuZGVzY2VuZGFudFNlbGVjdG9ySWRlbnRpZmllckhhc2hlcygpKSkKKyAgICAgICAgaWYg
KGNhblVzZUZhc3RSZWplY3QgJiYgbV9zZWxlY3RvckZpbHRlci5mYXN0UmVqZWN0U2VsZWN0b3I8
UnVsZURhdGE6Om1heGltdW1JZGVudGlmaWVyQ291bnQ+KHJ1bGVEYXRhLmRlc2NlbmRhbnRTZWxl
Y3RvcklkZW50aWZpZXJIYXNoZXMoKSkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAg
ICBTdHlsZVJ1bGUqIHJ1bGUgPSBydWxlRGF0YS5ydWxlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVz
b2x2ZXIuaAppbmRleCA5N2JjZjE2OTQwODNlMGEyNmFkZDQ2YWY0YTk5OGQ1OGY1NGRiNzZlLi5h
YzkxNTA5OWEyZWZlZThiNWJkOTU0ODBiYzA1ODM0YjNlMzJlZWRkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZVJlc29sdmVyLmgKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJSdWxlRmVhdHVyZS5o
IgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJTZWxlY3Rv
ckNoZWNrZXIuaCIKKyNpbmNsdWRlICJTZWxlY3RvckZpbHRlci5oIgogI2luY2x1ZGUgIlN0eWxl
SW5oZXJpdGVkRGF0YS5oIgogI2luY2x1ZGUgIlN0eWxlU2NvcGVSZXNvbHZlci5oIgogI2luY2x1
ZGUgIlZpZXdwb3J0U3R5bGVSZXNvbHZlci5oIgpAQCAtNDkxLDYgKzQ5Miw3IEBAIHByaXZhdGU6
CiAgICAgUHNldWRvSWQgbV9wc2V1ZG9TdHlsZTsKIAogICAgIFNlbGVjdG9yQ2hlY2tlciBtX2No
ZWNrZXI7CisgICAgU2VsZWN0b3JGaWx0ZXIgbV9zZWxlY3RvckZpbHRlcjsKIAogICAgIFJlZlB0
cjxSZW5kZXJTdHlsZT4gbV9zdHlsZTsKICAgICBSZW5kZXJTdHlsZSogbV9wYXJlbnRTdHlsZTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>