<?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>58436</bug_id>
          
          <creation_ts>2011-04-13 06:08:23 -0700</creation_ts>
          <short_desc>[Qt] Upstream Meego/Maemo platform plugin</short_desc>
          <delta_ts>2011-06-30 17:17:14 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Qt</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Qt, QtTriaged</keywords>
          <priority>P1</priority>
          <bug_severity>Major</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexis Menard (darktears)">menard</reporter>
          <assigned_to name="Mahesh Kulkarni">maheshk</assigned_to>
          <cc>ademar</cc>
    
    <cc>hausmann</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>maheshk</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>384819</commentid>
    <comment_count>0</comment_count>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2011-04-13 06:08:23 -0700</bug_when>
    <thetext>The plugin needs to be upstreamed for a better maintainability.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>412218</commentid>
    <comment_count>1</comment_count>
      <attachid>95343</attachid>
    <who name="Mahesh Kulkarni">maheshk</who>
    <bug_when>2011-05-30 07:29:57 -0700</bug_when>
    <thetext>Created attachment 95343
patch

patch to upstream meego platform plugin. Proposing to move symbian plugin as well under Source/WebKit/qt/platformplugin/symbian.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>412230</commentid>
    <comment_count>2</comment_count>
      <attachid>95343</attachid>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2011-05-30 07:53:09 -0700</bug_when>
    <thetext>Comment on attachment 95343
patch

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

&gt; Source/WebKit/qt/platformplugin/meego/README:7
&gt; +   git clone git://gitorious.org/maemo-6-ui-framework/libdui.git

Can it just be installing libdui-dev or something like that?

&gt; Source/WebKit/qt/platformplugin/meego/html5videoplugin.cpp:20
&gt; +#include &quot;html5videoplugin.h&quot;

Why the name of the file doesn&apos;t match the name of the class?

&gt; Source/WebKit/qt/platformplugin/meego/html5videoplugin.cpp:38
&gt; +    if (!m_videoWidget)

I think it&apos;s useless.

&gt; Source/WebKit/qt/platformplugin/meego/html5videoplugin.cpp:64
&gt; +    m_mediaPlayer-&gt;disconnect(m_videoWidget);

Would it be better to instanciate one time the video widget. It will require a bit more memory (but I on&apos;t think it&apos;s that big deal) but will make the switch from fullscreen back and forth smoother after the first time.

&gt; Source/WebKit/qt/platformplugin/meego/html5videoplugin.cpp:90
&gt; +            m_screenSaver = new QtMobility::QSystemScreenSaver(this);   

Why namespacing QtMobility?

&gt; Source/WebKit/qt/platformplugin/meego/html5videoplugin.cpp:101
&gt; +        delete m_screenSaver;

Why you don&apos;t store the screensaver as a member of the class but alocated once. At each time you pause/play it will allocate the object. Also when you start the playback you want full ressources of the system, so I&apos;m wondering if it&apos;s good to make the OS busy by allocating something.

&gt; Source/WebKit/qt/platformplugin/meego/html5videoplugin.cpp:118
&gt; +QObject* HTML5VideoPlugin::createExtension(Extension extension) const

Why is that used for?

&gt; Source/WebKit/qt/platformplugin/meego/html5videoplugin.h:48
&gt; +    QtMobility::QSystemScreenSaver* m_screenSaver;

Same why the prefix?

&gt; Source/WebKit/qt/platformplugin/meego/meegotouchplatformplugin.cpp:55
&gt; +        return new HTML5FullScreenVideoHandler();

why you didn&apos;t follow the pattern of the Notifications/haptics?

&gt; Source/WebKit/qt/platformplugin/meego/overlaywidget.cpp:88
&gt; +    delete m_controlButton;

You don&apos;t need those deletes because they are parented to their parent.

&gt; Source/WebKit/qt/platformplugin/meego/overlaywidget.cpp:95
&gt; +    delete m_toolBar;

That one is not for some reason.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>412312</commentid>
    <comment_count>3</comment_count>
    <who name="Mahesh Kulkarni">maheshk</who>
    <bug_when>2011-05-30 11:50:33 -0700</bug_when>
    <thetext>Thanks Alexis for quick review. 

(In reply to comment #2)
&gt; (From update of attachment 95343 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=95343&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/qt/platformplugin/meego/README:7
&gt; &gt; +   git clone git://gitorious.org/maemo-6-ui-framework/libdui.git
&gt; 
&gt; Can it just be installing libdui-dev or something like that?
&gt; 

Not sure because libdui is not a single component which can be installed. We have to either do something like libdui-* or leave the README content as is, as meego-touch instructions seems to have same details.


&gt; Source/WebKit/qt/platformplugin/meego/html5videoplugin.cpp:90
&gt; +            m_screenSaver = new QtMobility::QSystemScreenSaver(this);   

&gt; Why namespacing QtMobility?

Because QtSystemInfo is still in QtMobility namespace where as QtMultiMedia is moved to Qt namespace?

&gt; &gt; Source/WebKit/qt/platformplugin/meego/html5videoplugin.cpp:90
&gt; &gt; +            m_screenSaver = new QtMobility::QSystemScreenSaver(this);   
&gt; 
&gt; Why namespacing QtMobility?
&gt; 
&gt; &gt; Source/WebKit/qt/platformplugin/meego/html5videoplugin.cpp:101
&gt; &gt; +        delete m_screenSaver;
&gt; 
&gt; Why you don&apos;t store the screensaver as a member of the class but alocated once. At each time you pause/play it will allocate the object. Also when you start the playback you want full ressources of the system, so I&apos;m wondering if it&apos;s good to make the OS busy by allocating something.
&gt;

Because deleting the object is the only way to re-enable screen saver mode. When video is paused/stopped we have to enable to screen saver again (As per qtmobility doc)
 
&gt; You don&apos;t need those deletes because they are parented to their parent.
&gt; 
&gt; &gt; Source/WebKit/qt/platformplugin/meego/overlaywidget.cpp:95
&gt; &gt; +    delete m_toolBar;
&gt; 
&gt; That one is not for some reason.

Yes, because video widget sets background as transparent so all controls/images appear without a background. This toolbar is not connected to the same parent to make it appear with solid background color. This was the work around suggested by Mobility guys.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>412313</commentid>
    <comment_count>4</comment_count>
      <attachid>95359</attachid>
    <who name="Mahesh Kulkarni">maheshk</who>
    <bug_when>2011-05-30 11:56:24 -0700</bug_when>
    <thetext>Created attachment 95359
patch

second attempt.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>412315</commentid>
    <comment_count>5</comment_count>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2011-05-30 12:01:28 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Thanks Alexis for quick review. 
&gt; 
&gt; (In reply to comment #2)
&gt; &gt; (From update of attachment 95343 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=95343&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit/qt/platformplugin/meego/README:7
&gt; &gt; &gt; +   git clone git://gitorious.org/maemo-6-ui-framework/libdui.git
&gt; &gt; 
&gt; &gt; Can it just be installing libdui-dev or something like that?
&gt; &gt; 
&gt; 
&gt; Not sure because libdui is not a single component which can be installed. We have to either do something like libdui-* or leave the README content as is, as meego-touch instructions seems to have same details.

ok seems weird that there is no dev packages for that.

&gt; 
&gt; 
&gt; &gt; Source/WebKit/qt/platformplugin/meego/html5videoplugin.cpp:90
&gt; &gt; +            m_screenSaver = new QtMobility::QSystemScreenSaver(this);   
&gt; 
&gt; &gt; Why namespacing QtMobility?
&gt; 
&gt; Because QtSystemInfo is still in QtMobility namespace where as QtMultiMedia is moved to Qt namespace?

And? I believe you don&apos;t need it or you can use &quot;using namespace QtMobility&quot;.

&gt; 
&gt; &gt; &gt; Source/WebKit/qt/platformplugin/meego/html5videoplugin.cpp:90
&gt; &gt; &gt; +            m_screenSaver = new QtMobility::QSystemScreenSaver(this);   
&gt; &gt; 
&gt; &gt; Why namespacing QtMobility?
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit/qt/platformplugin/meego/html5videoplugin.cpp:101
&gt; &gt; &gt; +        delete m_screenSaver;
&gt; &gt; 
&gt; &gt; Why you don&apos;t store the screensaver as a member of the class but alocated once. At each time you pause/play it will allocate the object. Also when you start the playback you want full ressources of the system, so I&apos;m wondering if it&apos;s good to make the OS busy by allocating something.
&gt; &gt;
&gt; 
&gt; Because deleting the object is the only way to re-enable screen saver mode. When video is paused/stopped we have to enable to screen saver again (As per qtmobility doc)

You are right. What an ugly and useless API. I&apos;m wondering what is the reasoning behind. There could be an activate()/deactivate() slot or something.

http://doc.qt.nokia.com/qtmobility/qsystemscreensaver.html#details

&gt; 
&gt; &gt; You don&apos;t need those deletes because they are parented to their parent.
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit/qt/platformplugin/meego/overlaywidget.cpp:95
&gt; &gt; &gt; +    delete m_toolBar;
&gt; &gt; 
&gt; &gt; That one is not for some reason.
&gt; 
&gt; Yes, because video widget sets background as transparent so all controls/images appear without a background. This toolbar is not connected to the same parent to make it appear with solid background color. This was the work around suggested by Mobility guys.

Ok then it&apos;s fine to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>412321</commentid>
    <comment_count>6</comment_count>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2011-05-30 12:09:28 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #3)
&gt; &gt; Thanks Alexis for quick review. 
&gt; &gt; 
&gt; &gt; (In reply to comment #2)
&gt; &gt; &gt; (From update of attachment 95343 [details] [details] [details])
&gt; &gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=95343&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebKit/qt/platformplugin/meego/README:7
&gt; &gt; &gt; &gt; +   git clone git://gitorious.org/maemo-6-ui-framework/libdui.git
&gt; &gt; &gt; 
&gt; &gt; &gt; Can it just be installing libdui-dev or something like that?
&gt; &gt; &gt; 
&gt; &gt; 
&gt; &gt; Not sure because libdui is not a single component which can be installed. We have to either do something like libdui-* or leave the README content as is, as meego-touch instructions seems to have same details.
&gt; 
&gt; ok seems weird that there is no dev packages for that.
&gt; 
&gt; &gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit/qt/platformplugin/meego/html5videoplugin.cpp:90
&gt; &gt; &gt; +            m_screenSaver = new QtMobility::QSystemScreenSaver(this);   
&gt; &gt; 
&gt; &gt; &gt; Why namespacing QtMobility?
&gt; &gt; 
&gt; &gt; Because QtSystemInfo is still in QtMobility namespace where as QtMultiMedia is moved to Qt namespace?
&gt; 
&gt; And? I believe you don&apos;t need it or you can use &quot;using namespace QtMobility&quot;.
&gt; 
&gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebKit/qt/platformplugin/meego/html5videoplugin.cpp:90
&gt; &gt; &gt; &gt; +            m_screenSaver = new QtMobility::QSystemScreenSaver(this);   
&gt; &gt; &gt; 
&gt; &gt; &gt; Why namespacing QtMobility?
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebKit/qt/platformplugin/meego/html5videoplugin.cpp:101
&gt; &gt; &gt; &gt; +        delete m_screenSaver;
&gt; &gt; &gt; 
&gt; &gt; &gt; Why you don&apos;t store the screensaver as a member of the class but alocated once. At each time you pause/play it will allocate the object. Also when you start the playback you want full ressources of the system, so I&apos;m wondering if it&apos;s good to make the OS busy by allocating something.
&gt; &gt; &gt;
&gt; &gt; 
&gt; &gt; Because deleting the object is the only way to re-enable screen saver mode. When video is paused/stopped we have to enable to screen saver again (As per qtmobility doc)
&gt; 
&gt; You are right. What an ugly and useless API. I&apos;m wondering what is the reasoning behind. There could be an activate()/deactivate() slot or something.
&gt; 
&gt; http://doc.qt.nokia.com/qtmobility/qsystemscreensaver.html#details

Ok 1.2 have a better API. Though the doc doesn&apos;t say that you need to re-create the object to re-enable the screen saver. It sounds like a bug which should be reported and the plugin code should have a FIXME.

&gt; 
&gt; &gt; 
&gt; &gt; &gt; You don&apos;t need those deletes because they are parented to their parent.
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebKit/qt/platformplugin/meego/overlaywidget.cpp:95
&gt; &gt; &gt; &gt; +    delete m_toolBar;
&gt; &gt; &gt; 
&gt; &gt; &gt; That one is not for some reason.
&gt; &gt; 
&gt; &gt; Yes, because video widget sets background as transparent so all controls/images appear without a background. This toolbar is not connected to the same parent to make it appear with solid background color. This was the work around suggested by Mobility guys.
&gt; 
&gt; Ok then it&apos;s fine to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>412595</commentid>
    <comment_count>7</comment_count>
    <who name="Mahesh Kulkarni">maheshk</who>
    <bug_when>2011-05-31 07:02:46 -0700</bug_when>
    <thetext>
&gt; &gt; You are right. What an ugly and useless API. I&apos;m wondering what is the reasoning behind. There could be an activate()/deactivate() slot or something.
&gt; &gt; 
&gt; &gt; http://doc.qt.nokia.com/qtmobility/qsystemscreensaver.html#details
&gt; 
&gt; Ok 1.2 have a better API. Though the doc doesn&apos;t say that you need to re-create the object to re-enable the screen saver. It sounds like a bug which should be reported and the plugin code should have a FIXME.


Sure will add that comment and also update &quot;using namespace QtMobility&quot; in my next patch. Will hunt for a reviewer now :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>412663</commentid>
    <comment_count>8</comment_count>
      <attachid>95359</attachid>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2011-05-31 08:57:55 -0700</bug_when>
    <thetext>Comment on attachment 95359
patch

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

&gt; Source/WebKit/qt/platformplugin/meego/README:10
&gt; +

according to the debian part of the patch just libmeegotouch-dev is good enough. I believe you don&apos;t need to clone.

&gt; Source/WebKit/qt/platformplugin/meego/selectdialog.cpp:87
&gt; +            item-&gt;setText(&quot;   &quot; + m_data.itemText(i));

Why this &quot;    &quot;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>412912</commentid>
    <comment_count>9</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2011-05-31 15:10:14 -0700</bug_when>
    <thetext>Hm, why should we have this upstream if we know that it&apos;s not going to be used in the future?

Meegotouch is dead, MeeGo is moving away from it. Future versions of MeeGo aren&apos;t going to use this code, and Nokia isn&apos;t going to use it in the future neither, right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413264</commentid>
    <comment_count>10</comment_count>
      <attachid>95577</attachid>
    <who name="Mahesh Kulkarni">maheshk</who>
    <bug_when>2011-06-01 03:36:26 -0700</bug_when>
    <thetext>Created attachment 95577
patch

Simon, I guess upstreaming for the only meego device coming in future and probably we can get rid of meego-touch dependency can be removed in future if needed? Laszlo any thoughts? 

Anyway uploading a new patch addressing all above comments. Please review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>415010</commentid>
    <comment_count>11</comment_count>
    <who name="Ademar Reis">ademar</who>
    <bug_when>2011-06-03 11:09:46 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Hm, why should we have this upstream if we know that it&apos;s not going to be used in the future?
&gt; 
&gt; Meegotouch is dead, MeeGo is moving away from it. Future versions of MeeGo aren&apos;t going to use this code, and Nokia isn&apos;t going to use it in the future neither, right?

I&apos;m not sure, but we&apos;re trying to make 2.2 compatible with all devices running 2.1 so that it&apos;s a candidate for an update. So since this plugin is part of 2.1, it would be nice to have it in 2.2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>415739</commentid>
    <comment_count>12</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2011-06-06 01:37:07 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #9)
&gt; &gt; Hm, why should we have this upstream if we know that it&apos;s not going to be used in the future?
&gt; &gt; 
&gt; &gt; Meegotouch is dead, MeeGo is moving away from it. Future versions of MeeGo aren&apos;t going to use this code, and Nokia isn&apos;t going to use it in the future neither, right?
&gt; 
&gt; I&apos;m not sure, but we&apos;re trying to make 2.2 compatible with all devices running 2.1 so that it&apos;s a candidate for an update. So since this plugin is part of 2.1, it would be nice to have it in 2.2.

How likely is it that the MeeGo platform we&apos;re talking about is going to include 2.2?

We could also consider including it only in the 2.2 branch. But beyond that, who is going to maintain the code and test it on MeeGo with newer releases?

Differently put: I have the feeling that we&apos;d be submitting dead code into trunk.

I might be wrong, so take this with a grain of salt :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>415834</commentid>
    <comment_count>13</comment_count>
    <who name="Ademar Reis">ademar</who>
    <bug_when>2011-06-06 07:56:38 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #11)
&gt; &gt; (In reply to comment #9)
&gt; &gt; &gt; Hm, why should we have this upstream if we know that it&apos;s not going to be used in the future?
&gt; &gt; &gt; 
&gt; &gt; &gt; Meegotouch is dead, MeeGo is moving away from it. Future versions of MeeGo aren&apos;t going to use this code, and Nokia isn&apos;t going to use it in the future neither, right?
&gt; &gt; 
&gt; &gt; I&apos;m not sure, but we&apos;re trying to make 2.2 compatible with all devices running 2.1 so that it&apos;s a candidate for an update. So since this plugin is part of 2.1, it would be nice to have it in 2.2.
&gt; 
&gt; How likely is it that the MeeGo platform we&apos;re talking about is going to include 2.2?

The idea is to obsolete 2.1 by releasing 2.2 as an update. I&apos;m not sure how realistic that goal is though...

&gt; 
&gt; We could also consider including it only in the 2.2 branch. But beyond that, who is going to maintain the code and test it on MeeGo with newer releases?
&gt; 
&gt; Differently put: I have the feeling that we&apos;d be submitting dead code into trunk.
&gt; 
&gt; I might be wrong, so take this with a grain of salt :)

If newer versions of meego won&apos;t use this code (who can confirm that?), then you&apos;re right. It should be included only in 2.2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>423745</commentid>
    <comment_count>14</comment_count>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2011-06-20 10:23:48 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #12)
&gt; &gt; (In reply to comment #11)
&gt; &gt; &gt; (In reply to comment #9)
&gt; &gt; &gt; &gt; Hm, why should we have this upstream if we know that it&apos;s not going to be used in the future?
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Meegotouch is dead, MeeGo is moving away from it. Future versions of MeeGo aren&apos;t going to use this code, and Nokia isn&apos;t going to use it in the future neither, right?
&gt; &gt; &gt; 
&gt; &gt; &gt; I&apos;m not sure, but we&apos;re trying to make 2.2 compatible with all devices running 2.1 so that it&apos;s a candidate for an update. So since this plugin is part of 2.1, it would be nice to have it in 2.2.
&gt; &gt; 
&gt; &gt; How likely is it that the MeeGo platform we&apos;re talking about is going to include 2.2?
&gt; 
&gt; The idea is to obsolete 2.1 by releasing 2.2 as an update. I&apos;m not sure how realistic that goal is though...
&gt; 
&gt; &gt; 
&gt; &gt; We could also consider including it only in the 2.2 branch. But beyond that, who is going to maintain the code and test it on MeeGo with newer releases?
&gt; &gt; 
&gt; &gt; Differently put: I have the feeling that we&apos;d be submitting dead code into trunk.
&gt; &gt; 
&gt; &gt; I might be wrong, so take this with a grain of salt :)
&gt; 
&gt; If newer versions of meego won&apos;t use this code (who can confirm that?), then you&apos;re right. It should be included only in 2.2.

Unless someone tells me that MeegoTouch has a long live and will be part on Meego for a while I don&apos;t think we should upstream this code (and also a proper commitment to maintain it). It can stay as a separate package like today. The time was not wasted anyway because the code of the plugin has improved with the review process. Please include all those feedbacks back in the deb files where it comes from.

Thanks for the work.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>95343</attachid>
            <date>2011-05-30 07:29:57 -0700</date>
            <delta_ts>2011-05-30 11:56:24 -0700</delta_ts>
            <desc>patch</desc>
            <filename>58436.patch</filename>
            <type>text/plain</type>
            <size>67610</size>
            <attacher name="Mahesh Kulkarni">maheshk</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lvbiA4NzY4NSkKKysrIFNvdXJjZS9XZWJLaXQvcXQv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTEyIEBACisyMDExLTA1LTMwICBN
YWhlc2ggS3Vsa2FybmkgIDxtYWhlc2gua3Vsa2FybmlAbm9raWEuY29tPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtRdF0gVXBzdHJlYW0gTWVlZ28v
TWFlbW8gcGxhdGZvcm0gcGx1Z2luCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD01ODQzNgorCisgICAgICAgIFVwc3RyZWFtIHBsYXRmb3JtIHBsdWdpbiBv
ZiBtZWVnbyBwbGF0Zm9ybS4KKworICAgICAgICAqIHBsYXRmb3JtcGx1Z2luOiBBZGRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybXBsdWdpbi9tZWVnbzogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm1w
bHVnaW4vbWVlZ28vUkVBRE1FOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybXBsdWdpbi9tZWVn
by9kZWJpYW46IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtcGx1Z2luL21lZWdvL2RlYmlhbi9j
aGFuZ2Vsb2c6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtcGx1Z2luL21lZWdvL2RlYmlhbi9j
b21wYXQ6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtcGx1Z2luL21lZWdvL2RlYmlhbi9jb250
cm9sOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybXBsdWdpbi9tZWVnby9kZWJpYW4vbGlicXR3
ZWJraXQtbWVlZ290b3VjaHBsdWdpbi5pbnN0YWxsOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bXBsdWdpbi9tZWVnby9odG1sNXZpZGVvcGx1Z2luLmNwcDogQWRkZWQuCisgICAgICAgIChIVE1M
NUZ1bGxTY3JlZW5WaWRlb0hhbmRsZXI6OkhUTUw1RnVsbFNjcmVlblZpZGVvSGFuZGxlcik6Cisg
ICAgICAgIChIVE1MNUZ1bGxTY3JlZW5WaWRlb0hhbmRsZXI6OmVudGVyRnVsbFNjcmVlbik6Cisg
ICAgICAgIChIVE1MNUZ1bGxTY3JlZW5WaWRlb0hhbmRsZXI6OmV4aXRGdWxsU2NyZWVuKToKKyAg
ICAgICAgKEhUTUw1RnVsbFNjcmVlblZpZGVvSGFuZGxlcjo6b25QbGF5ZXJFcnJvcik6CisgICAg
ICAgIChIVE1MNUZ1bGxTY3JlZW5WaWRlb0hhbmRsZXI6Om9uUGxheWVyU3RhdGVDaGFuZ2VkKToK
KyAgICAgICAgKEhUTUw1VmlkZW9QbHVnaW46OnN1cHBvcnRzRXh0ZW5zaW9uKToKKyAgICAgICAg
KEhUTUw1VmlkZW9QbHVnaW46OmNyZWF0ZUV4dGVuc2lvbik6CisgICAgICAgICogcGxhdGZvcm1w
bHVnaW4vbWVlZ28vaHRtbDV2aWRlb3BsdWdpbi5oOiBBZGRlZC4KKyAgICAgICAgKEhUTUw1RnVs
bFNjcmVlblZpZGVvSGFuZGxlcjo6cmVxdWlyZXNGdWxsU2NyZWVuRm9yVmlkZW9QbGF5YmFjayk6
CisgICAgICAgIChIVE1MNUZ1bGxTY3JlZW5WaWRlb0hhbmRsZXI6OnVwZGF0ZVNjcmVlblJlY3Qp
OgorICAgICAgICAqIHBsYXRmb3JtcGx1Z2luL21lZWdvL2h0bWw1dmlkZW93aWRnZXQuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKEhUTUw1VmlkZW9XaWRnZXQ6OkhUTUw1VmlkZW9XaWRnZXQpOgorICAg
ICAgICAoSFRNTDVWaWRlb1dpZGdldDo6c2V0RHVyYXRpb24pOgorICAgICAgICAoSFRNTDVWaWRl
b1dpZGdldDo6bW91c2VQcmVzc0V2ZW50KToKKyAgICAgICAgKEhUTUw1VmlkZW9XaWRnZXQ6Om9u
UGxheWVyU3RvcHBlZCk6CisgICAgICAgIChIVE1MNVZpZGVvV2lkZ2V0OjpvblBsYXllckVycm9y
KToKKyAgICAgICAgKEhUTUw1VmlkZW9XaWRnZXQ6Om9uQ29udHJvbENsaWNrZWQpOgorICAgICAg
ICAoSFRNTDVWaWRlb1dpZGdldDo6b25Qb3NpdGlvbkNoYW5nZWQpOgorICAgICAgICAoSFRNTDVW
aWRlb1dpZGdldDo6b25TbGlkZXJNb3ZlZCk6CisgICAgICAgIChIVE1MNVZpZGVvV2lkZ2V0Ojpv
bkNsb3NlQ2xpY2tlZCk6CisgICAgICAgIChIVE1MNVZpZGVvV2lkZ2V0OjpzaG93RnVsbFNjcmVl
bik6CisgICAgICAgICogcGxhdGZvcm1wbHVnaW4vbWVlZ28vaHRtbDV2aWRlb3dpZGdldC5oOiBB
ZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybXBsdWdpbi9tZWVnby9pbWFnZXM6IEFkZGVkLgorICAg
ICAgICAqIHBsYXRmb3JtcGx1Z2luL21lZWdvL2ltYWdlcy9idXR0b25fY2Fubm90cGxheS5wbmc6
IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtcGx1Z2luL21lZWdvL2ltYWdlcy9idXR0b25fY2xv
c2UucG5nOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybXBsdWdpbi9tZWVnby9pbWFnZXMvYnV0
dG9uX3BhdXNlLnBuZzogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm1wbHVnaW4vbWVlZ28vaW1h
Z2VzL2J1dHRvbl9wbGF5LnBuZzogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm1wbHVnaW4vbWVl
Z28vbWVlZ290b3VjaHBsYXRmb3JtcGx1Z2luLmNwcDogQWRkZWQuCisgICAgICAgIChNZWVnb1Rv
dWNoUGxhdGZvcm1QbHVnaW46OnN1cHBvcnRzRXh0ZW5zaW9uKToKKyAgICAgICAgKE1lZWdvVG91
Y2hQbGF0Zm9ybVBsdWdpbjo6Y3JlYXRlRXh0ZW5zaW9uKToKKyAgICAgICAgKE1lZWdvVG91Y2hQ
bGF0Zm9ybVBsdWdpbjo6Y3JlYXRlU2VsZWN0SW5wdXRNZXRob2QpOgorICAgICAgICAoTWVlZ29U
b3VjaFBsYXRmb3JtUGx1Z2luOjpjcmVhdGVOb3RpZmljYXRpb25QcmVzZW50ZXIpOgorICAgICAg
ICAoTWVlZ29Ub3VjaFBsYXRmb3JtUGx1Z2luOjpjcmVhdGVIYXB0aWNGZWVkYmFja1BsYXllcik6
CisgICAgICAgICogcGxhdGZvcm1wbHVnaW4vbWVlZ28vbWVlZ290b3VjaHBsYXRmb3JtcGx1Z2lu
Lmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtcGx1Z2luL21lZWdvL292ZXJsYXl3aWRnZXQu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKE92ZXJsYXlXaWRnZXQ6Ok92ZXJsYXlXaWRnZXQpOgorICAg
ICAgICAoT3ZlcmxheVdpZGdldDo6fk92ZXJsYXlXaWRnZXQpOgorICAgICAgICAoT3ZlcmxheVdp
ZGdldDo6aGlkZUNvbnRyb2xzKToKKyAgICAgICAgKE92ZXJsYXlXaWRnZXQ6OnNldER1cmF0aW9u
KToKKyAgICAgICAgKE92ZXJsYXlXaWRnZXQ6OnNldFBvc2l0aW9uKToKKyAgICAgICAgKE92ZXJs
YXlXaWRnZXQ6Om1vdXNlUHJlc3NFdmVudCk6CisgICAgICAgIChPdmVybGF5V2lkZ2V0OjpvblBs
YXllclN0b3BwZWQpOgorICAgICAgICAoT3ZlcmxheVdpZGdldDo6b25QbGF5ZXJFcnJvcik6Cisg
ICAgICAgIChPdmVybGF5V2lkZ2V0Ojp0aW1lVG9TdHJpbmcpOgorICAgICAgICAoT3ZlcmxheVdp
ZGdldDo6b25Db250cm9sQ2xpY2tlZCk6CisgICAgICAgIChPdmVybGF5V2lkZ2V0OjpvblNsaWRl
ck1vdmVkKToKKyAgICAgICAgKE92ZXJsYXlXaWRnZXQ6Om9uQ2xvc2VDbGlja2VkKToKKyAgICAg
ICAgKE92ZXJsYXlXaWRnZXQ6Om9uVGltZXJUaW1lb3V0KToKKyAgICAgICAgKE92ZXJsYXlXaWRn
ZXQ6OnNob3dGdWxsU2NyZWVuKToKKyAgICAgICAgKiBwbGF0Zm9ybXBsdWdpbi9tZWVnby9vdmVy
bGF5d2lkZ2V0Lmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtcGx1Z2luL21lZWdvL3BsYXll
cmJ1dHRvbi5jcHA6IEFkZGVkLgorICAgICAgICAoUGxheWVyQnV0dG9uOjpQbGF5ZXJCdXR0b24p
OgorICAgICAgICAoUGxheWVyQnV0dG9uOjpldmVudCk6CisgICAgICAgICogcGxhdGZvcm1wbHVn
aW4vbWVlZ28vcGxheWVyYnV0dG9uLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtcGx1Z2lu
L21lZWdvL3F0d2Via2l0LW1lZWdvdG91Y2hwbHVnaW4ucHJvOiBBZGRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybXBsdWdpbi9tZWVnby9xd2Via2l0cGxhdGZvcm1wbHVnaW4uaDogQWRkZWQuCisgICAg
ICAgIChRV2ViU2VsZWN0RGF0YTo6flFXZWJTZWxlY3REYXRhKToKKyAgICAgICAgKFFXZWJTZWxl
Y3RNZXRob2Q6On5RV2ViU2VsZWN0TWV0aG9kKToKKyAgICAgICAgKFFXZWJOb3RpZmljYXRpb25E
YXRhOjp+UVdlYk5vdGlmaWNhdGlvbkRhdGEpOgorICAgICAgICAoUVdlYk5vdGlmaWNhdGlvblBy
ZXNlbnRlcjo6UVdlYk5vdGlmaWNhdGlvblByZXNlbnRlcik6CisgICAgICAgIChRV2ViTm90aWZp
Y2F0aW9uUHJlc2VudGVyOjp+UVdlYk5vdGlmaWNhdGlvblByZXNlbnRlcik6CisgICAgICAgIChR
V2ViVG91Y2hNb2RpZmllcjo6flFXZWJUb3VjaE1vZGlmaWVyKToKKyAgICAgICAgKFFXZWJGdWxs
U2NyZWVuVmlkZW9IYW5kbGVyOjpRV2ViRnVsbFNjcmVlblZpZGVvSGFuZGxlcik6CisgICAgICAg
IChRV2ViRnVsbFNjcmVlblZpZGVvSGFuZGxlcjo6flFXZWJGdWxsU2NyZWVuVmlkZW9IYW5kbGVy
KToKKyAgICAgICAgKFFXZWJLaXRQbGF0Zm9ybVBsdWdpbjo6flFXZWJLaXRQbGF0Zm9ybVBsdWdp
bik6CisgICAgICAgICogcGxhdGZvcm1wbHVnaW4vbWVlZ28vcmVzb3VyY2UucXJjOiBBZGRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybXBsdWdpbi9tZWVnby9zZWxlY3Rjb250cm9sbGVyLmNwcDogQWRk
ZWQuCisgICAgICAgIChTZWxlY3RDb250cm9sbGVyOjp+U2VsZWN0Q29udHJvbGxlcik6CisgICAg
ICAgIChTZWxlY3RDb250cm9sbGVyOjpzaG93KToKKyAgICAgICAgKFNlbGVjdENvbnRyb2xsZXI6
OmhpZGUpOgorICAgICAgICAoU2VsZWN0Q29udHJvbGxlcjo6ZGlhbG9nQ2xvc2VkKToKKyAgICAg
ICAgKiBwbGF0Zm9ybXBsdWdpbi9tZWVnby9zZWxlY3Rjb250cm9sbGVyLmg6IEFkZGVkLgorICAg
ICAgICAoU2VsZWN0Q29udHJvbGxlcjo6U2VsZWN0Q29udHJvbGxlcik6CisgICAgICAgICogcGxh
dGZvcm1wbHVnaW4vbWVlZ28vc2VsZWN0ZGlhbG9nLmNwcDogQWRkZWQuCisgICAgICAgIChDb250
ZW50SXRlbUNyZWF0b3I6OkNvbnRlbnRJdGVtQ3JlYXRvcik6CisgICAgICAgIChDb250ZW50SXRl
bUNyZWF0b3I6OmNyZWF0ZUNlbGwpOgorICAgICAgICAoQ29udGVudEl0ZW1DcmVhdG9yOjp1cGRh
dGVDZWxsKToKKyAgICAgICAgKFNlbGVjdERpYWxvZzo6U2VsZWN0RGlhbG9nKToKKyAgICAgICAg
KFNlbGVjdERpYWxvZzo6flNlbGVjdERpYWxvZyk6CisgICAgICAgIChTZWxlY3REaWFsb2c6OnBv
cHVsYXRlTGlzdCk6CisgICAgICAgIChTZWxlY3REaWFsb2c6Om1vZGlmeUl0ZW1TdGF0ZSk6Cisg
ICAgICAgICogcGxhdGZvcm1wbHVnaW4vbWVlZ28vc2VsZWN0ZGlhbG9nLmg6IEFkZGVkLgorICAg
ICAgICAqIHBsYXRmb3JtcGx1Z2luL21lZWdvL3dlYmhhcHRpY2ZlZWRiYWNrcGxheWVyLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJIYXB0aWNGZWVkYmFja1BsYXllcjo6cGxheUhhcHRpY0ZlZWRi
YWNrKToKKyAgICAgICAgKiBwbGF0Zm9ybXBsdWdpbi9tZWVnby93ZWJoYXB0aWNmZWVkYmFja3Bs
YXllci5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybXBsdWdpbi9tZWVnby93ZWJub3RpZmlj
YXRpb25wcmVzZW50ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYk5vdGlmaWNhdGlvblByZXNl
bnRlcjo6V2ViTm90aWZpY2F0aW9uUHJlc2VudGVyKToKKyAgICAgICAgKFdlYk5vdGlmaWNhdGlv
blByZXNlbnRlcjo6c2hvd05vdGlmaWNhdGlvbik6CisgICAgICAgICogcGxhdGZvcm1wbHVnaW4v
bWVlZ28vd2Vibm90aWZpY2F0aW9ucHJlc2VudGVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViTm90
aWZpY2F0aW9uUHJlc2VudGVyOjp+V2ViTm90aWZpY2F0aW9uUHJlc2VudGVyKToKKwogMjAxMS0w
NS0yOCAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IEFsZXhleSBQcm9za3VyeWFrb3YuCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L3BsYXRmb3Jt
cGx1Z2luL21lZWdvL1JFQURNRQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L3BsYXRm
b3JtcGx1Z2luL21lZWdvL1JFQURNRQkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvcXQv
cGxhdGZvcm1wbHVnaW4vbWVlZ28vUkVBRE1FCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIxIEBA
CitUaGlzIHNvdXJjZSB0cmVlIGNvbnRhaW5zIHRoZSBRdFdlYktpdCBwbGF0Zm9ybSBwbHVnaW4g
Zm9yIE1lZWdvIFRvdWNoIEZyYW1ld29yaworCitQcmVyZXF1aXNpdGVzCis9PT09PT09PT09PT09
CisqIE1lZWdvIFRvdWNoIAorICAgc3VkbyBhcHQtZ2V0IGluc3RhbGwgeDExcHJvdG8tZGFtYWdl
LWRldiBsaWJ4ZGFtYWdlLWRldiBsaWJnc3RyZWFtZXItcGx1Z2lucy1iYXNlMC4xMC1kZXYgbGli
Z2NvbmYyLWRldgorICAgZ2l0IGNsb25lIGdpdDovL2dpdG9yaW91cy5vcmcvbWFlbW8tNi11aS1m
cmFtZXdvcmsvbGliZHVpLmdpdAorICAgY2QgPGNsb25lLWRpcmVjdG9yeT4KKyAgIGRwa2ctYnVp
bGRwYWNrYWdlIC1yZmFrZXJvb3QKKworICAgKGNoZWNrIGZ1cnRoZXIgaW5zdHJ1Y3Rpb25zIGZy
b20gUkVBRE1FIG9mIE1lZWdvVG91Y2gpCisKKyogUXRXZWJraXQgMi4xCisgICAgQ29tcGlsZSBR
dFdlYktpdDIuMSB3aXRoIGZvbGxvd2luZyBERUZJTkVTIGVuYWJsZWQgRU5BQkxFX05PX0xJU1RC
T1hfUkVOREVSSU5HIGFuZCBFTkFCTEVfTk9USUZJQ0FUSU9OUworCisjIFF0TW9iaWxpdHkgMS4x
CisgICBSZXF1aXJlcyBsaWJxdG0tc3lzdGVtaW5mby1kZXYsIGxpYnF0bS1tdWx0aW1lZGlhLWRl
dgorCitCdWlsZGluZyBRdFdlYktpdCBwbGF0Zm9ybSBwbHVnaW4gZm9yIE1lZWdvIFRvdWNoIEZy
YW1ld29yaworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KK2Rwa2ctYnVpbGRwYWNrYWdlIC1yZmFrZXJvb3QKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvcXQvcGxhdGZvcm1wbHVnaW4vbWVlZ28vaHRtbDV2aWRlb3BsdWdpbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9wbGF0Zm9ybXBsdWdpbi9tZWVnby9odG1sNXZpZGVv
cGx1Z2luLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvcXQvcGxhdGZvcm1wbHVn
aW4vbWVlZ28vaHRtbDV2aWRlb3BsdWdpbi5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBp
dHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqCisgKi8KKyNpbmNsdWRlICJodG1sNXZpZGVvcGx1Z2luLmgiCisKKyNp
bmNsdWRlIDxRU3lzdGVtU2NyZWVuU2F2ZXI+CisjaW5jbHVkZSA8UXRQbHVnaW4+CisKK0hUTUw1
RnVsbFNjcmVlblZpZGVvSGFuZGxlcjo6SFRNTDVGdWxsU2NyZWVuVmlkZW9IYW5kbGVyKCkKKyAg
ICA6IG1fdmlkZW9XaWRnZXQoMCkKKyAgICAsIG1fbWVkaWFQbGF5ZXIoMCkKKyAgICAsIG1fc2Ny
ZWVuU2F2ZXIoMCkKK3sKK30KKwordm9pZCBIVE1MNUZ1bGxTY3JlZW5WaWRlb0hhbmRsZXI6OmVu
dGVyRnVsbFNjcmVlbihRTWVkaWFQbGF5ZXIgKnBsYXllcikKK3sKKyAgICBpZiAoIXBsYXllcikK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV92aWRlb1dpZGdldCA9IG5ldyBIVE1MNVZpZGVvV2lk
Z2V0KCk7CisgICAgaWYgKCFtX3ZpZGVvV2lkZ2V0KQorICAgICAgICByZXR1cm47CisgICAgbV92
aWRlb1dpZGdldC0+c2V0RHVyYXRpb24ocGxheWVyLT5kdXJhdGlvbigpKTsKKworICAgIGlmIChw
bGF5ZXItPnN0YXRlKCkgPT0gUU1lZGlhUGxheWVyOjpQbGF5aW5nU3RhdGUpCisgICAgICAgIHBs
YXllci0+cGF1c2UoKTsKKworICAgIG1fbWVkaWFQbGF5ZXIgPSBwbGF5ZXI7CisgICAgY29ubmVj
dChtX21lZGlhUGxheWVyLCBTSUdOQUwocG9zaXRpb25DaGFuZ2VkKHFpbnQ2NCkpLCBtX3ZpZGVv
V2lkZ2V0LCBTTE9UKG9uUG9zaXRpb25DaGFuZ2VkKHFpbnQ2NCkpKTsKKyAgICBjb25uZWN0KG1f
bWVkaWFQbGF5ZXIsIFNJR05BTChkdXJhdGlvbkNoYW5nZWQocWludDY0KSksIG1fdmlkZW9XaWRn
ZXQsIFNMT1Qoc2V0RHVyYXRpb24ocWludDY0KSkpOworICAgIGNvbm5lY3QobV9tZWRpYVBsYXll
ciwgU0lHTkFMKHN0YXRlQ2hhbmdlZChRTWVkaWFQbGF5ZXI6OlN0YXRlKSksIHRoaXMsIFNMT1Qo
b25QbGF5ZXJTdGF0ZUNoYW5nZWQoUU1lZGlhUGxheWVyOjpTdGF0ZSkpKTsKKyAgICBjb25uZWN0
KG1fbWVkaWFQbGF5ZXIsIFNJR05BTChlcnJvcihRTWVkaWFQbGF5ZXI6OkVycm9yKSksIHRoaXMs
IFNMT1Qob25QbGF5ZXJFcnJvcihRTWVkaWFQbGF5ZXI6OkVycm9yKSkpOworICAgIGNvbm5lY3Qo
bV92aWRlb1dpZGdldCwgU0lHTkFMKHBvc2l0aW9uQ2hhbmdlZEJ5VXNlcihxaW50NjQpKSwgbV9t
ZWRpYVBsYXllciwgU0xPVChzZXRQb3NpdGlvbihxaW50NjQpKSk7CisgICAgY29ubmVjdChtX3Zp
ZGVvV2lkZ2V0LCBTSUdOQUwoY2xvc2VDbGlja2VkKCkpLCB0aGlzLCBTSUdOQUwoZnVsbFNjcmVl
bkNsb3NlZCgpKSk7CisgICAgY29ubmVjdChtX3ZpZGVvV2lkZ2V0LCBTSUdOQUwocGF1c2VDbGlj
a2VkKCkpLCBtX21lZGlhUGxheWVyLCBTTE9UKHBhdXNlKCkpKTsKKyAgICBjb25uZWN0KG1fdmlk
ZW9XaWRnZXQsIFNJR05BTChwbGF5Q2xpY2tlZCgpKSwgbV9tZWRpYVBsYXllciwgU0xPVChwbGF5
KCkpKTsKKworICAgIG1fbWVkaWFQbGF5ZXItPnNldFZpZGVvT3V0cHV0KG1fdmlkZW9XaWRnZXQp
OworCisgICAgbV92aWRlb1dpZGdldC0+c2V0U2l6ZVBvbGljeShRU2l6ZVBvbGljeTo6SWdub3Jl
ZCwgUVNpemVQb2xpY3k6Oklnbm9yZWQpOworICAgIG1fdmlkZW9XaWRnZXQtPnNob3dGdWxsU2Ny
ZWVuKCk7Cit9CisKK3ZvaWQgSFRNTDVGdWxsU2NyZWVuVmlkZW9IYW5kbGVyOjpleGl0RnVsbFNj
cmVlbigpCit7CisgICAgbV92aWRlb1dpZGdldC0+aGlkZSgpOworICAgIG1fbWVkaWFQbGF5ZXIt
PmRpc2Nvbm5lY3QobV92aWRlb1dpZGdldCk7CisgICAgbV9tZWRpYVBsYXllci0+ZGlzY29ubmVj
dCh0aGlzKTsKKyAgICBkZWxldGUgbV92aWRlb1dpZGdldDsKKyAgICBtX3ZpZGVvV2lkZ2V0ID0g
MDsKKyAgICAKKyAgICAvLyBwYXVzZSB0aGUgdmlkZW8gYXMgcGVyIHNwZWMuCisgICAgaWYgKG1f
bWVkaWFQbGF5ZXItPnN0YXRlKCkgPT0gUU1lZGlhUGxheWVyOjpQbGF5aW5nU3RhdGUpCisgICAg
ICAgIG1fbWVkaWFQbGF5ZXItPnBhdXNlKCk7Cit9CisKK3ZvaWQgSFRNTDVGdWxsU2NyZWVuVmlk
ZW9IYW5kbGVyOjpvblBsYXllckVycm9yKFFNZWRpYVBsYXllcjo6RXJyb3IgZXJyb3IpCit7Cisg
ICAgc3dpdGNoIChlcnJvcikgeworICAgIGNhc2UgUU1lZGlhUGxheWVyOjpOb0Vycm9yOgorICAg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBtX3ZpZGVvV2lkZ2V0LT5vblBsYXll
ckVycm9yKCk7CisgICAgfQorfQorCit2b2lkIEhUTUw1RnVsbFNjcmVlblZpZGVvSGFuZGxlcjo6
b25QbGF5ZXJTdGF0ZUNoYW5nZWQoUU1lZGlhUGxheWVyOjpTdGF0ZSBzdGF0ZSkKK3sKKyAgICAv
LyBFbmFibGUvRGlzYWJsZSBzY3JlZW4gc2F2ZXIgaW5oaWJpdCB3aGVuIHZpZGVvIHN0YXJ0cyBw
bGF5aW5nL3BhdXNlZAorICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICBjYXNlIFFNZWRpYVBsYXll
cjo6UGxheWluZ1N0YXRlOgorICAgICAgICBpZiAoIW1fc2NyZWVuU2F2ZXIpIHsKKyAgICAgICAg
ICAgIG1fc2NyZWVuU2F2ZXIgPSBuZXcgUXRNb2JpbGl0eTo6UVN5c3RlbVNjcmVlblNhdmVyKHRo
aXMpOyAgIAorICAgICAgICAgICAgbV9zY3JlZW5TYXZlci0+c2V0U2NyZWVuU2F2ZXJJbmhpYml0
KCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFFNZWRpYVBsYXllcjo6
UGF1c2VkU3RhdGU6CisgICAgICAgIGRlbGV0ZSBtX3NjcmVlblNhdmVyOworICAgICAgICBtX3Nj
cmVlblNhdmVyID0gMDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFFNZWRpYVBsYXllcjo6
U3RvcHBlZFN0YXRlOgorICAgICAgICBkZWxldGUgbV9zY3JlZW5TYXZlcjsKKyAgICAgICAgbV9z
Y3JlZW5TYXZlciA9IDA7CisgICAgICAgIG1fdmlkZW9XaWRnZXQtPm9uUGxheWVyU3RvcHBlZCgp
OworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK2Jvb2wgSFRNTDVWaWRlb1BsdWdpbjo6c3Vw
cG9ydHNFeHRlbnNpb24oRXh0ZW5zaW9uIGV4dGVuc2lvbikgY29uc3QKK3sKKyAgICBzd2l0Y2gg
KGV4dGVuc2lvbikgeworICAgIGNhc2UgRnVsbFNjcmVlblZpZGVvUGxheWVyOgorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
fQorCitRT2JqZWN0KiBIVE1MNVZpZGVvUGx1Z2luOjpjcmVhdGVFeHRlbnNpb24oRXh0ZW5zaW9u
IGV4dGVuc2lvbikgY29uc3QKK3sKKyAgICBIVE1MNUZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIqIHZp
ZGVvSGFuZGxlciA9IDA7CisgICAgc3dpdGNoIChleHRlbnNpb24pIHsKKyAgICBjYXNlIEZ1bGxT
Y3JlZW5WaWRlb1BsYXllcjoKKyAgICAgICAgdmlkZW9IYW5kbGVyID0gbmV3IEhUTUw1RnVsbFNj
cmVlblZpZGVvSGFuZGxlcjsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIHJldHVybiB2aWRlb0hhbmRsZXI7Cit9CisKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvcXQvcGxhdGZvcm1wbHVnaW4vbWVlZ28vaHRtbDV2aWRlb3BsdWdpbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvcGxhdGZvcm1wbHVnaW4vbWVlZ28vaHRtbDV2aWRl
b3BsdWdpbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9xdC9wbGF0Zm9ybXBsdWdp
bi9tZWVnby9odG1sNXZpZGVvcGx1Z2luLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBz
dWJzaWRpYXJ5KC1pZXMpCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICoKKyAqLworI2lmbmRlZiBodG1sNXZpZGVvcGx1Z2luX2gKKyNkZWZpbmUgaHRt
bDV2aWRlb3BsdWdpbl9oCisKKyNpbmNsdWRlICJodG1sNXZpZGVvd2lkZ2V0LmgiCisjaW5jbHVk
ZSAicXdlYmtpdHBsYXRmb3JtcGx1Z2luLmgiCisKKyNpbmNsdWRlIDxRTWVkaWFQbGF5ZXI+Cisj
aW5jbHVkZSA8UVN5c3RlbVNjcmVlblNhdmVyPgorCitjbGFzcyBIVE1MNUZ1bGxTY3JlZW5WaWRl
b0hhbmRsZXIgOiBwdWJsaWMgUVdlYkZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIgeworICAgIFFfT0JK
RUNUCitwdWJsaWM6CisgICAgSFRNTDVGdWxsU2NyZWVuVmlkZW9IYW5kbGVyKCk7CisgICAgYm9v
bCByZXF1aXJlc0Z1bGxTY3JlZW5Gb3JWaWRlb1BsYXliYWNrKCkgY29uc3QgeyByZXR1cm4gdHJ1
ZTsgfQorICAgIHZvaWQgdXBkYXRlU2NyZWVuUmVjdChjb25zdCBRUmVjdCYpIHsgfQorCitwdWJs
aWMgUV9TTE9UUzoKKyAgICB2aXJ0dWFsIHZvaWQgZW50ZXJGdWxsU2NyZWVuKFFNZWRpYVBsYXll
ciopOworICAgIHZpcnR1YWwgdm9pZCBleGl0RnVsbFNjcmVlbigpOworICAgIHZvaWQgb25QbGF5
ZXJTdGF0ZUNoYW5nZWQoUU1lZGlhUGxheWVyOjpTdGF0ZSk7CisgICAgdm9pZCBvblBsYXllckVy
cm9yKFFNZWRpYVBsYXllcjo6RXJyb3IpOworCitRX1NJR05BTFM6CisgICAgdm9pZCBmdWxsU2Ny
ZWVuQ2xvc2VkKCk7CisgICAgCitwcml2YXRlOgorICAgIEhUTUw1VmlkZW9XaWRnZXQqIG1fdmlk
ZW9XaWRnZXQ7CisgICAgUU1lZGlhUGxheWVyKiBtX21lZGlhUGxheWVyOworICAgIFF0TW9iaWxp
dHk6OlFTeXN0ZW1TY3JlZW5TYXZlciogbV9zY3JlZW5TYXZlcjsKKyAgICBRUGl4bWFwIG1fZnJh
bWU7Cit9OworCitjbGFzcyBIVE1MNVZpZGVvUGx1Z2luIDogcHVibGljIFFPYmplY3QsIHB1Ymxp
YyBRV2ViS2l0UGxhdGZvcm1QbHVnaW4geworICAgIFFfT0JKRUNUCisgICAgUV9JTlRFUkZBQ0VT
KFFXZWJLaXRQbGF0Zm9ybVBsdWdpbikKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9y
dHNFeHRlbnNpb24oRXh0ZW5zaW9uKSBjb25zdDsKKyAgICB2aXJ0dWFsIFFPYmplY3QqIGNyZWF0
ZUV4dGVuc2lvbihFeHRlbnNpb24pIGNvbnN0OworfTsKKworI2VuZGlmIC8qIGh0bWw1dmlkZW9w
bHVnaW51Z2luX2ggKi8KSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvcGxhdGZvcm1wbHVnaW4vbWVl
Z28vaHRtbDV2aWRlb3dpZGdldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9w
bGF0Zm9ybXBsdWdpbi9tZWVnby9odG1sNXZpZGVvd2lkZ2V0LmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9XZWJLaXQvcXQvcGxhdGZvcm1wbHVnaW4vbWVlZ28vaHRtbDV2aWRlb3dpZGdldC5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5j
bHVkZSAiaHRtbDV2aWRlb3dpZGdldC5oIgorCitIVE1MNVZpZGVvV2lkZ2V0OjpIVE1MNVZpZGVv
V2lkZ2V0KFFXaWRnZXQgKnBhcmVudCkKKyAgICA6IFFWaWRlb1dpZGdldChwYXJlbnQpCisgICAg
LCBtX292ZXJsYXlXaWRnZXQobmV3IE92ZXJsYXlXaWRnZXQodGhpcykpCit7CisgICAgY29ubmVj
dChtX292ZXJsYXlXaWRnZXQsIFNJR05BTChjb250cm9sQ2xpY2tlZChib29sKSksIHRoaXMsIFNM
T1Qob25Db250cm9sQ2xpY2tlZChib29sKSkpOworICAgIGNvbm5lY3QobV9vdmVybGF5V2lkZ2V0
LCBTSUdOQUwoc2xpZGVyTW92ZWQoaW50KSksIHRoaXMsIFNMT1Qob25TbGlkZXJNb3ZlZChpbnQp
KSk7CisgICAgY29ubmVjdChtX292ZXJsYXlXaWRnZXQsIFNJR05BTChjbG9zZUNsaWNrZWQoKSks
IHRoaXMsIFNMT1Qob25DbG9zZUNsaWNrZWQoKSkpOworICAgIG1fb3ZlcmxheVdpZGdldC0+c2V0
U2l6ZVBvbGljeShRU2l6ZVBvbGljeTo6SWdub3JlZCwgUVNpemVQb2xpY3k6Oklnbm9yZWQpOwor
fQorCit2b2lkIEhUTUw1VmlkZW9XaWRnZXQ6OnNldER1cmF0aW9uKHFpbnQ2NCBkdXJhdGlvbikK
K3sKKyAgICBtX292ZXJsYXlXaWRnZXQtPnNldER1cmF0aW9uKGR1cmF0aW9uIC8gMTAwMCk7Cit9
CisKK3ZvaWQgSFRNTDVWaWRlb1dpZGdldDo6bW91c2VQcmVzc0V2ZW50KFFNb3VzZUV2ZW50ICop
Cit7CisgICAgbV9vdmVybGF5V2lkZ2V0LT5zaG93RnVsbFNjcmVlbigpOworfQorCit2b2lkIEhU
TUw1VmlkZW9XaWRnZXQ6Om9uUGxheWVyU3RvcHBlZCgpCit7CisgICAgbV9vdmVybGF5V2lkZ2V0
LT5vblBsYXllclN0b3BwZWQoKTsKK30KKwordm9pZCBIVE1MNVZpZGVvV2lkZ2V0OjpvblBsYXll
ckVycm9yKCkKK3sKKyAgICBtX292ZXJsYXlXaWRnZXQtPm9uUGxheWVyRXJyb3IoKTsKK30KKwor
dm9pZCBIVE1MNVZpZGVvV2lkZ2V0OjpvbkNvbnRyb2xDbGlja2VkKGJvb2wgaXNQYXVzZWQpCit7
CisgICAgaWYgKGlzUGF1c2VkKQorICAgICAgICBlbWl0IHBhdXNlQ2xpY2tlZCgpOworICAgIGVs
c2UKKyAgICAgICAgZW1pdCBwbGF5Q2xpY2tlZCgpOworfQorCit2b2lkIEhUTUw1VmlkZW9XaWRn
ZXQ6Om9uUG9zaXRpb25DaGFuZ2VkKHFpbnQ2NCBwb3NpdGlvbikKK3sKKyAgICBtX292ZXJsYXlX
aWRnZXQtPnNldFBvc2l0aW9uKHBvc2l0aW9uIC8gMTAwMCk7Cit9CisKK3ZvaWQgSFRNTDVWaWRl
b1dpZGdldDo6b25TbGlkZXJNb3ZlZChpbnQgdmFsdWUpCit7CisgICAgZW1pdCBwb3NpdGlvbkNo
YW5nZWRCeVVzZXIoKChxaW50NjQpdmFsdWUpICogMTAwMCk7Cit9CisKK3ZvaWQgSFRNTDVWaWRl
b1dpZGdldDo6b25DbG9zZUNsaWNrZWQoKQoreworICAgIGhpZGUoKTsKKyAgICBlbWl0IGNsb3Nl
Q2xpY2tlZCgpOworfQorCit2b2lkIEhUTUw1VmlkZW9XaWRnZXQ6OnNob3dGdWxsU2NyZWVuKCkK
K3sKKyAgICBzZXRGdWxsU2NyZWVuKHRydWUpOworICAgIG1fb3ZlcmxheVdpZGdldC0+c2hvd0Z1
bGxTY3JlZW4oKTsKK30KSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvcGxhdGZvcm1wbHVnaW4vbWVl
Z28vaHRtbDV2aWRlb3dpZGdldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvcGxh
dGZvcm1wbHVnaW4vbWVlZ28vaHRtbDV2aWRlb3dpZGdldC5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL1dlYktpdC9xdC9wbGF0Zm9ybXBsdWdpbi9tZWVnby9odG1sNXZpZGVvd2lkZ2V0LmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9r
aWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIGh0
bWw1dmlkZW93aWRnZXRfaAorI2RlZmluZSBodG1sNXZpZGVvd2lkZ2V0X2gKKworI2luY2x1ZGUg
Im92ZXJsYXl3aWRnZXQuaCIKKworI2luY2x1ZGUgPFFWaWRlb1dpZGdldD4KKworY2xhc3MgSFRN
TDVWaWRlb1dpZGdldCA6IHB1YmxpYyBRVmlkZW9XaWRnZXQgeworICAgIFFfT0JKRUNUCitwdWJs
aWM6CisgICAgSFRNTDVWaWRlb1dpZGdldChRV2lkZ2V0KiBwYXJlbnQgPSAwKTsKKyAgICB2b2lk
IG1vdXNlUHJlc3NFdmVudChRTW91c2VFdmVudCopOworICAgIHZvaWQgb25QbGF5ZXJTdG9wcGVk
KCk7CisgICAgdm9pZCBvblBsYXllckVycm9yKCk7CisKK3ByaXZhdGUgc2xvdHM6CisgICAgdm9p
ZCBvbkNvbnRyb2xDbGlja2VkKGJvb2wpOworICAgIHZvaWQgb25Qb3NpdGlvbkNoYW5nZWQocWlu
dDY0KTsKKyAgICB2b2lkIG9uU2xpZGVyTW92ZWQoaW50KTsKKyAgICB2b2lkIG9uQ2xvc2VDbGlj
a2VkKCk7CisKK3B1YmxpYyBzbG90czoKKyAgICB2b2lkIHNob3dGdWxsU2NyZWVuKCk7CisgICAg
dm9pZCBzZXREdXJhdGlvbihxaW50NjQpOworCitzaWduYWxzOgorICAgIHZvaWQgcGF1c2VDbGlj
a2VkKCk7CisgICAgdm9pZCBwbGF5Q2xpY2tlZCgpOworICAgIHZvaWQgcG9zaXRpb25DaGFuZ2Vk
QnlVc2VyKHFpbnQ2NCk7CisgICAgdm9pZCBjbG9zZUNsaWNrZWQoKTsKKyAgICB2b2lkIG11dGVk
KGJvb2wpOworICAgIHZvaWQgdm9sdW1lQ2hhbmdlZChpbnQpOworCitwcml2YXRlOgorICAgIE92
ZXJsYXlXaWRnZXQqIG1fb3ZlcmxheVdpZGdldDsKK307CisKKyNlbmRpZiAvKiBodG1sNXZpZGVv
d2lkZ2V0X2ggKi8KSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvcGxhdGZvcm1wbHVnaW4vbWVlZ28v
bWVlZ290b3VjaHBsYXRmb3JtcGx1Z2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L3F0L3BsYXRmb3JtcGx1Z2luL21lZWdvL21lZWdvdG91Y2hwbGF0Zm9ybXBsdWdpbi5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L3F0L3BsYXRmb3JtcGx1Z2luL21lZWdvL21lZWdv
dG91Y2hwbGF0Zm9ybXBsdWdpbi5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODIgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJz
aWRpYXJ5KC1pZXMpCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICoKKyAqLworCisjaW5jbHVkZSAibWVlZ290b3VjaHBsYXRmb3JtcGx1Z2luLmgiCisK
KyNpbmNsdWRlICJodG1sNXZpZGVvcGx1Z2luLmgiCisjaW5jbHVkZSAic2VsZWN0Y29udHJvbGxl
ci5oIgorI2luY2x1ZGUgIndlYmhhcHRpY2ZlZWRiYWNrcGxheWVyLmgiCisjaW5jbHVkZSAid2Vi
bm90aWZpY2F0aW9ucHJlc2VudGVyLmgiCisKKyNpbmNsdWRlIDxNQXBwbGljYXRpb24+CisjaW5j
bHVkZSA8UXRQbHVnaW4+CisKK2Jvb2wgTWVlZ29Ub3VjaFBsYXRmb3JtUGx1Z2luOjpzdXBwb3J0
c0V4dGVuc2lvbihFeHRlbnNpb24gZXh0ZW5zaW9uKSBjb25zdAoreworICAgIHN3aXRjaCAoZXh0
ZW5zaW9uKSB7CisgICAgY2FzZSBNdWx0aXBsZVNlbGVjdGlvbnM6CisgICAgY2FzZSBOb3RpZmlj
YXRpb25zOgorICAgIGNhc2UgSGFwdGljczoKKyAgICBjYXNlIEZ1bGxTY3JlZW5WaWRlb1BsYXll
cjoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KK30KKworUU9iamVjdCogTWVlZ29Ub3VjaFBsYXRmb3JtUGx1Z2luOjpjcmVh
dGVFeHRlbnNpb24oRXh0ZW5zaW9uIGV4dGVuc2lvbikgY29uc3QKK3sKKyAgICBzd2l0Y2ggKGV4
dGVuc2lvbikgeworICAgIGNhc2UgTXVsdGlwbGVTZWxlY3Rpb25zOgorICAgICAgICByZXR1cm4g
Y3JlYXRlU2VsZWN0SW5wdXRNZXRob2QoKTsKKyAgICBjYXNlIE5vdGlmaWNhdGlvbnM6CisgICAg
ICAgIHJldHVybiBjcmVhdGVOb3RpZmljYXRpb25QcmVzZW50ZXIoKTsKKyAgICBjYXNlIEhhcHRp
Y3M6CisgICAgICAgIHJldHVybiBjcmVhdGVIYXB0aWNGZWVkYmFja1BsYXllcigpOworI2lmIGRl
ZmluZWQoV1RGX1VTRV9RVF9NVUxUSU1FRElBKSAmJiBXVEZfVVNFX1FUX01VTFRJTUVESUEKKyAg
ICBjYXNlIEZ1bGxTY3JlZW5WaWRlb1BsYXllcjoKKyAgICAgICAgcmV0dXJuIG5ldyBIVE1MNUZ1
bGxTY3JlZW5WaWRlb0hhbmRsZXIoKTsKKyNlbmRpZgorICAgIGRlZmF1bHQ6CisgICAgICAgIHJl
dHVybiAwOworICAgIH0KK30KKworCitRV2ViU2VsZWN0TWV0aG9kKiBNZWVnb1RvdWNoUGxhdGZv
cm1QbHVnaW46OmNyZWF0ZVNlbGVjdElucHV0TWV0aG9kKCkgY29uc3QKK3sKKyAgICAvLyBPbmx5
IHVzZSB0aGUgTURpYWxvZyBmb3IgTUFwcGxpY2F0aW9ucy4gVGhlcmUgbXVzdCBiZSBhbiBNV2lu
ZG93IGF2YWlsYWJsZSB0bworICAgIC8vIHNob3cgTURpYWxvZy4KKyAgICBpZiAocW9iamVjdF9j
YXN0PE1BcHBsaWNhdGlvbio+KFFDb3JlQXBwbGljYXRpb246Omluc3RhbmNlKCkpICYmIE1BcHBs
aWNhdGlvbjo6YWN0aXZlV2luZG93KCkpCisgICAgICAgIHJldHVybiBuZXcgU2VsZWN0Q29udHJv
bGxlcigpOworICAgIHJldHVybiAwOworfQorCitRV2ViTm90aWZpY2F0aW9uUHJlc2VudGVyKiBN
ZWVnb1RvdWNoUGxhdGZvcm1QbHVnaW46OmNyZWF0ZU5vdGlmaWNhdGlvblByZXNlbnRlcigpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG5ldyBXZWJOb3RpZmljYXRpb25QcmVzZW50ZXIoKTsKK30KKwor
UVdlYkhhcHRpY0ZlZWRiYWNrUGxheWVyKiBNZWVnb1RvdWNoUGxhdGZvcm1QbHVnaW46OmNyZWF0
ZUhhcHRpY0ZlZWRiYWNrUGxheWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbmV3IFdlYkhhcHRp
Y0ZlZWRiYWNrUGxheWVyKCk7Cit9CisKK1FfRVhQT1JUX1BMVUdJTjIocXdlYnNlbGVjdGltLCBN
ZWVnb1RvdWNoUGxhdGZvcm1QbHVnaW4pCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L3BsYXRmb3Jt
cGx1Z2luL21lZWdvL21lZWdvdG91Y2hwbGF0Zm9ybXBsdWdpbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvcXQvcGxhdGZvcm1wbHVnaW4vbWVlZ28vbWVlZ290b3VjaHBsYXRmb3JtcGx1
Z2luLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L3F0L3BsYXRmb3JtcGx1Z2luL21l
ZWdvL21lZWdvdG91Y2hwbGF0Zm9ybXBsdWdpbi5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBp
dHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqCisgKi8KKyNpZm5kZWYgbWVlZ290b3VjaHBsYXRmb3JtcGx1Z2luX2gK
KyNkZWZpbmUgbWVlZ290b3VjaHBsYXRmb3JtcGx1Z2luX2gKKworI2luY2x1ZGUgInF3ZWJraXRw
bGF0Zm9ybXBsdWdpbi5oIgorCitjbGFzcyBNZWVnb1RvdWNoUGxhdGZvcm1QbHVnaW4gOiBwdWJs
aWMgUU9iamVjdCwgcHVibGljIFFXZWJLaXRQbGF0Zm9ybVBsdWdpbiB7CisgICAgUV9PQkpFQ1QK
KyAgICBRX0lOVEVSRkFDRVMoUVdlYktpdFBsYXRmb3JtUGx1Z2luKQorCitwdWJsaWM6CisgICAg
dmlydHVhbCBib29sIHN1cHBvcnRzRXh0ZW5zaW9uKEV4dGVuc2lvbikgY29uc3Q7CisgICAgdmly
dHVhbCBRT2JqZWN0KiBjcmVhdGVFeHRlbnNpb24oRXh0ZW5zaW9uKSBjb25zdDsKKworcHJpdmF0
ZToKKyAgICBRV2ViU2VsZWN0TWV0aG9kKiBjcmVhdGVTZWxlY3RJbnB1dE1ldGhvZCgpIGNvbnN0
OworICAgIFFXZWJOb3RpZmljYXRpb25QcmVzZW50ZXIqIGNyZWF0ZU5vdGlmaWNhdGlvblByZXNl
bnRlcigpIGNvbnN0OworICAgIFFXZWJIYXB0aWNGZWVkYmFja1BsYXllciogY3JlYXRlSGFwdGlj
RmVlZGJhY2tQbGF5ZXIoKSBjb25zdDsKK307CisKKyNlbmRpZiAvLyBtZWVnb3RvdWNocGxhdGZv
cm1wbHVnaW5faApJbmRleDogU291cmNlL1dlYktpdC9xdC9wbGF0Zm9ybXBsdWdpbi9tZWVnby9v
dmVybGF5d2lkZ2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L3BsYXRmb3Jt
cGx1Z2luL21lZWdvL292ZXJsYXl3aWRnZXQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dl
YktpdC9xdC9wbGF0Zm9ybXBsdWdpbi9tZWVnby9vdmVybGF5d2lkZ2V0LmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwxODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29y
cG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworI2luY2x1ZGUgIm92ZXJsYXl3
aWRnZXQuaCIKKworI2luY2x1ZGUgPFF0R3VpPgorI2luY2x1ZGUgPFFUaW1lcj4KKworI2RlZmlu
ZSBMQUJFTF9DT0xPUiAid2hpdGUiCisKK092ZXJsYXlXaWRnZXQ6Ok92ZXJsYXlXaWRnZXQoUVdp
ZGdldCogcGFyZW50KQorICAgIDogUVdpZGdldCgwLCBRdDo6RnJhbWVsZXNzV2luZG93SGludCkK
KyAgICAsIG1faXNQYXVzZWQoZmFsc2UpCit7CisgICAgbV9wbGF5SWNvbiA9IFFJY29uKCI6L2lt
YWdlcy9idXR0b25fcGxheS5wbmciKTsKKyAgICBtX3BhdXNlSWNvbiA9IFFJY29uKCI6L2ltYWdl
cy9idXR0b25fcGF1c2UucG5nIik7CisKKyAgICBtX2NvbnRyb2xCdXR0b24gPSBuZXcgUGxheWVy
QnV0dG9uKHRoaXMpOworICAgIG1fY29udHJvbEJ1dHRvbi0+c2V0SWNvbihtX3BhdXNlSWNvbik7
CisgICAgY29ubmVjdChtX2NvbnRyb2xCdXR0b24sIFNJR05BTChjbGlja2VkKCkpLCB0aGlzLCBT
TE9UKG9uQ29udHJvbENsaWNrZWQoKSkpOworCisgICAgbV9zbGlkZXIgPSBuZXcgUVNsaWRlcihR
dDo6SG9yaXpvbnRhbCwgdGhpcyk7CisgICAgbV9zbGlkZXItPnNldFRyYWNraW5nKGZhbHNlKTsK
KyAgICBtX3NsaWRlci0+c2V0VGlja1Bvc2l0aW9uKFFTbGlkZXI6Ok5vVGlja3MpOworICAgIGNv
bm5lY3QobV9zbGlkZXIsIFNJR05BTChzbGlkZXJNb3ZlZChpbnQpKSwgdGhpcywgU0xPVChvblNs
aWRlck1vdmVkKGludCkpKTsKKworICAgIG1fcG9zaXRpb25MYWJlbCA9IG5ldyBRTGFiZWwodGhp
cyk7CisgICAgbV9wb3NpdGlvbkxhYmVsLT5zZXRUZXh0KHRpbWVUb1N0cmluZygwKSk7CisgICAg
bV9kdXJhdGlvbkxhYmVsID0gbmV3IFFMYWJlbCh0aGlzKTsKKyAgICBtX2R1cmF0aW9uTGFiZWwt
PnNldFRleHQodGltZVRvU3RyaW5nKDApKTsKKworICAgIG1fY2xvc2VCdXR0b24gPSBuZXcgUGxh
eWVyQnV0dG9uKHRoaXMpOworICAgIG1fY2xvc2VCdXR0b24tPnNldEljb24oUUljb24oIjovaW1h
Z2VzL2J1dHRvbl9jbG9zZS5wbmciKSk7CisgICAgY29ubmVjdChtX2Nsb3NlQnV0dG9uLCBTSUdO
QUwoY2xpY2tlZCgpKSwgdGhpcywgU0xPVChvbkNsb3NlQ2xpY2tlZCgpKSk7CisKKyAgICBtX2xh
YmVsID0gbmV3IFFMYWJlbCh0aGlzKTsKKyAgICBtX2xhYmVsLT5zZXRQaXhtYXAoUVBpeG1hcCgi
Oi9pbWFnZXMvYnV0dG9uX2Nhbm5vdHBsYXkucG5nIikuc2NhbGVkKFFTaXplKDgwLCA4MCkpKTsK
KyAgICBtX2xhYmVsLT5oaWRlKCk7CisKKyAgICBRUGFsZXR0ZSBwYWw7CisgICAgLy8gU2VtaS10
cmFuc3BhcmVudCBiYWNrZ3JvdW5kIGNvbG9yIGZvciB0b29sYmFyLiBKdXN0IDgwJSBvcGFxdWUK
KyAgICBwYWwuc2V0Q29sb3IoUVBhbGV0dGU6OkJ1dHRvbiwgUUNvbG9yKDAsIDAsIDAsIDE2MCkp
OworICAgIAorICAgIG1fdG9vbEJhciA9IG5ldyBRVG9vbEJhcigpOworICAgIG1fdG9vbEJhci0+
c2V0QXV0b0ZpbGxCYWNrZ3JvdW5kKHRydWUpOworICAgIG1fdG9vbEJhci0+c2V0UGFsZXR0ZShw
YWwpOworICAgIG1fdG9vbEJhci0+YWRkV2lkZ2V0KG1fY29udHJvbEJ1dHRvbik7CisgICAgbV90
b29sQmFyLT5hZGRXaWRnZXQobV9wb3NpdGlvbkxhYmVsKTsKKyAgICBtX3Rvb2xCYXItPmFkZFdp
ZGdldChtX3NsaWRlcik7CisgICAgbV90b29sQmFyLT5hZGRXaWRnZXQobV9kdXJhdGlvbkxhYmVs
KTsKKyAgICBtX3Rvb2xCYXItPmFkZFdpZGdldChtX2Nsb3NlQnV0dG9uKTsKKyAgICBRQm94TGF5
b3V0KiBjb250cm9sTGF5b3V0ID0gbmV3IFFIQm94TGF5b3V0OworICAgIGNvbnRyb2xMYXlvdXQt
PmFkZFdpZGdldChtX3Rvb2xCYXIpOworCisgICAgUUdyaWRMYXlvdXQqIGxheW91dCA9IG5ldyBR
R3JpZExheW91dDsKKyAgICBsYXlvdXQtPmFkZFdpZGdldChtX2xhYmVsLCAxLCAwLCBRdDo6QWxp
Z25DZW50ZXIpOworICAgIGxheW91dC0+YWRkTGF5b3V0KGNvbnRyb2xMYXlvdXQsIDIsIDAsIFF0
OjpBbGlnbkJvdHRvbSk7CisgICAgc2V0TGF5b3V0KGxheW91dCk7CisKKyAgICBtX3RpbWVyID0g
bmV3IFFUaW1lcih0aGlzKTsKKyAgICBtX3RpbWVyLT5zZXRTaW5nbGVTaG90KHRydWUpOworICAg
IG1fdGltZXItPnNldEludGVydmFsKDMwMDApOworICAgIGNvbm5lY3QobV90aW1lciwgU0lHTkFM
KHRpbWVvdXQoKSksIHRoaXMsIFNMT1Qob25UaW1lclRpbWVvdXQoKSkpOworICAgIGNvbm5lY3Qo
bV9zbGlkZXIsIFNJR05BTChzbGlkZXJQcmVzc2VkKCkpLCBtX3RpbWVyLCBTTE9UKHN0b3AoKSkp
OworICAgIGNvbm5lY3QobV9zbGlkZXIsIFNJR05BTChzbGlkZXJSZWxlYXNlZCgpKSwgbV90aW1l
ciwgU0xPVChzdGFydCgpKSk7CisKKyAgICBzZXRBdHRyaWJ1dGUoUXQ6OldBX1RyYW5zbHVjZW50
QmFja2dyb3VuZCk7Cit9CisKK092ZXJsYXlXaWRnZXQ6On5PdmVybGF5V2lkZ2V0KCkKK3sKKyAg
ICBkZWxldGUgbV9jb250cm9sQnV0dG9uOworICAgIGRlbGV0ZSBtX3NsaWRlcjsKKyAgICBkZWxl
dGUgbV9wb3NpdGlvbkxhYmVsOworICAgIGRlbGV0ZSBtX2R1cmF0aW9uTGFiZWw7CisgICAgZGVs
ZXRlIG1fY2xvc2VCdXR0b247CisgICAgZGVsZXRlIG1fdGltZXI7CisgICAgZGVsZXRlIG1fbGFi
ZWw7CisgICAgZGVsZXRlIG1fdG9vbEJhcjsKK30KKwordm9pZCBPdmVybGF5V2lkZ2V0OjpoaWRl
Q29udHJvbHMoYm9vbCBoaWRlKQoreworICAgIGlmIChoaWRlKQorICAgICAgICBtX3Rvb2xCYXIt
PmhpZGUoKTsKKyAgICBlbHNlCisgICAgICAgIG1fdG9vbEJhci0+c2hvdygpOworfQorCit2b2lk
IE92ZXJsYXlXaWRnZXQ6OnNldER1cmF0aW9uKGludCBkdXJhdGlvbikKK3sKKyAgICBtX3NsaWRl
ci0+c2V0TWF4aW11bShkdXJhdGlvbik7CisgICAgbV9kdXJhdGlvbkxhYmVsLT5zZXRUZXh0KHRp
bWVUb1N0cmluZyhkdXJhdGlvbikpOworfQorCit2b2lkIE92ZXJsYXlXaWRnZXQ6OnNldFBvc2l0
aW9uKGludCBwb3NpdGlvbikKK3sKKyAgICBpZiAoIW1fc2xpZGVyLT5pc1NsaWRlckRvd24oKSkg
eworICAgICAgICBtX3NsaWRlci0+c2V0VmFsdWUocG9zaXRpb24pOworICAgICAgICBtX3Bvc2l0
aW9uTGFiZWwtPnNldFRleHQodGltZVRvU3RyaW5nKHBvc2l0aW9uKSk7CisgICAgfQorfQorCit2
b2lkIE92ZXJsYXlXaWRnZXQ6Om1vdXNlUHJlc3NFdmVudChRTW91c2VFdmVudCAqKQoreworICAg
IGlmICghbV9pc1BhdXNlZCkgeworICAgICAgICBoaWRlQ29udHJvbHMobV9jb250cm9sQnV0dG9u
LT5pc1Zpc2libGUoKSk7CisgICAgICAgIG1fdGltZXItPnN0YXJ0KCk7CisgICAgfQorfQorCit2
b2lkIE92ZXJsYXlXaWRnZXQ6Om9uUGxheWVyU3RvcHBlZCgpCit7CisgICAgaGlkZUNvbnRyb2xz
KGZhbHNlKTsKKyAgICBtX3RpbWVyLT5zdG9wKCk7CisgICAgbV9jb250cm9sQnV0dG9uLT5zZXRJ
Y29uKG1fcGxheUljb24pOworfQorCit2b2lkIE92ZXJsYXlXaWRnZXQ6Om9uUGxheWVyRXJyb3Io
KQoreworICAgIG1fY29udHJvbEJ1dHRvbi0+c2V0RGlzYWJsZWQodHJ1ZSk7CisgICAgbV9zbGlk
ZXItPnNldERpc2FibGVkKHRydWUpOworICAgIG1fbGFiZWwtPnNob3coKTsKKyAgICBzaG93RnVs
bFNjcmVlbigpOworfQorCitRU3RyaW5nIE92ZXJsYXlXaWRnZXQ6OnRpbWVUb1N0cmluZyhpbnQg
c2Vjb25kcykKK3sKKyAgICBRVGltZSBpbml0VGltZSgwLCAwLCAwKTsKKyAgICBRVGltZSB0aW1l
ID0gaW5pdFRpbWUuYWRkU2VjcyhzZWNvbmRzKTsKKyAgICBRU3RyaW5nIHRleHRUZW1wbGF0ZSgi
PGZvbnQgY29sb3I9JyUxJz4lMjwvZm9udD4iKTsKKyAgICByZXR1cm4gdGV4dFRlbXBsYXRlLmFy
ZyhMQUJFTF9DT0xPUiwgdGltZS5ob3VyKCkgPyB0aW1lLnRvU3RyaW5nKCJoOm1tOnNzIikKKyAg
ICAgICAgOiB0aW1lLnRvU3RyaW5nKCJtbTpzcyIpKTsKK30KKwordm9pZCBPdmVybGF5V2lkZ2V0
OjpvbkNvbnRyb2xDbGlja2VkKCkKK3sKKyAgICBtX2lzUGF1c2VkID0gIW1faXNQYXVzZWQ7Cisg
ICAgaWYgKG1faXNQYXVzZWQpCisgICAgICAgIG1fY29udHJvbEJ1dHRvbi0+c2V0SWNvbihtX3Bs
YXlJY29uKTsKKyAgICBlbHNlCisgICAgICAgIG1fY29udHJvbEJ1dHRvbi0+c2V0SWNvbihtX3Bh
dXNlSWNvbik7CisKKyAgICBtX3RpbWVyLT5zdGFydCgpOworICAgIGVtaXQgY29udHJvbENsaWNr
ZWQobV9pc1BhdXNlZCk7Cit9CisKK3ZvaWQgT3ZlcmxheVdpZGdldDo6b25TbGlkZXJNb3ZlZChp
bnQgdmFsdWUpCit7CisgICAgZW1pdCBzbGlkZXJNb3ZlZCh2YWx1ZSk7Cit9CisKK3ZvaWQgT3Zl
cmxheVdpZGdldDo6b25DbG9zZUNsaWNrZWQoKQoreworICAgIG1fdGltZXItPnN0b3AoKTsKKyAg
ICBoaWRlKCk7CisgICAgZW1pdCBjbG9zZUNsaWNrZWQoKTsKK30KKwordm9pZCBPdmVybGF5V2lk
Z2V0OjpvblRpbWVyVGltZW91dCgpCit7CisgICAgaWYgKCFtX2lzUGF1c2VkKQorICAgICAgICBo
aWRlQ29udHJvbHModHJ1ZSk7Cit9CisKK3ZvaWQgT3ZlcmxheVdpZGdldDo6c2hvd0Z1bGxTY3Jl
ZW4oKQoreworICAgIG1fdGltZXItPnN0YXJ0KCk7CisgICAgUVdpZGdldDo6c2hvd0Z1bGxTY3Jl
ZW4oKTsKK30KSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvcGxhdGZvcm1wbHVnaW4vbWVlZ28vb3Zl
cmxheXdpZGdldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvcGxhdGZvcm1wbHVn
aW4vbWVlZ28vb3ZlcmxheXdpZGdldC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9x
dC9wbGF0Zm9ybXBsdWdpbi9tZWVnby9vdmVybGF5d2lkZ2V0LmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24g
YW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIG92ZXJsYXl3aWRnZXRfaAor
I2RlZmluZSBvdmVybGF5d2lkZ2V0X2gKKworI2luY2x1ZGUgInBsYXllcmJ1dHRvbi5oIgorCitj
bGFzcyBRTGFiZWw7CitjbGFzcyBRU2xpZGVyOworY2xhc3MgUVRpbWVyOworY2xhc3MgUVRvb2xC
YXI7CitjbGFzcyBRV2lkZ2V0OworCitjbGFzcyBPdmVybGF5V2lkZ2V0IDogcHVibGljIFFXaWRn
ZXQgeworICAgIFFfT0JKRUNUCitwdWJsaWM6CisgICAgT3ZlcmxheVdpZGdldChRV2lkZ2V0KiBw
YXJlbnQgPSAwKTsKKyAgICB+T3ZlcmxheVdpZGdldCgpOworICAgIHZvaWQgc2V0RHVyYXRpb24o
aW50KTsKKyAgICB2b2lkIHNldFBvc2l0aW9uKGludCk7CisgICAgdm9pZCBtb3VzZVByZXNzRXZl
bnQoUU1vdXNlRXZlbnQqKTsKKyAgICB2b2lkIG9uUGxheWVyU3RvcHBlZCgpOworICAgIHZvaWQg
b25QbGF5ZXJFcnJvcigpOworCitwcml2YXRlOgorICAgIFFTdHJpbmcgdGltZVRvU3RyaW5nKGlu
dCk7CisgICAgdm9pZCBoaWRlQ29udHJvbHMoYm9vbCk7CisKK3ByaXZhdGUgc2xvdHM6CisgICAg
dm9pZCBvbkNvbnRyb2xDbGlja2VkKCk7CisgICAgdm9pZCBvblNsaWRlck1vdmVkKGludCk7Cisg
ICAgdm9pZCBvbkNsb3NlQ2xpY2tlZCgpOworICAgIHZvaWQgb25Wb2x1bWVTbGlkZXJSZWxlYXNl
ZCgpOworICAgIHZvaWQgb25Wb2x1bWVTbGlkZXJNb3ZlZChpbnQpOworICAgIHZvaWQgb25UaW1l
clRpbWVvdXQoKTsKKworcHVibGljIHNsb3RzOgorICAgIHZvaWQgc2hvd0Z1bGxTY3JlZW4oKTsK
Kworc2lnbmFsczoKKyAgICB2b2lkIGNvbnRyb2xDbGlja2VkKGJvb2wpOworICAgIHZvaWQgc2xp
ZGVyTW92ZWQoaW50KTsKKyAgICB2b2lkIGNsb3NlQ2xpY2tlZCgpOworCitwcml2YXRlOgorICAg
IFBsYXllckJ1dHRvbiogbV9jb250cm9sQnV0dG9uOworICAgIGJvb2wgbV9pc1BhdXNlZDsKKyAg
ICBRU2xpZGVyKiBtX3NsaWRlcjsKKyAgICBRTGFiZWwqIG1fcG9zaXRpb25MYWJlbDsKKyAgICBR
TGFiZWwqIG1fZHVyYXRpb25MYWJlbDsKKyAgICBQbGF5ZXJCdXR0b24qIG1fY2xvc2VCdXR0b247
CisgICAgUUljb24gbV9wbGF5SWNvbjsKKyAgICBRSWNvbiBtX3BhdXNlSWNvbjsKKyAgICBRVGlt
ZXIqIG1fdGltZXI7CisgICAgUUxhYmVsKiBtX2xhYmVsOworICAgIFFUb29sQmFyKiBtX3Rvb2xC
YXI7Cit9OworCisjZW5kaWYgLyogb3ZlcmxheXdpZGdldF9oICovCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L3F0L3BsYXRmb3JtcGx1Z2luL21lZWdvL3BsYXllcmJ1dHRvbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9xdC9wbGF0Zm9ybXBsdWdpbi9tZWVnby9wbGF5ZXJidXR0b24uY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9xdC9wbGF0Zm9ybXBsdWdpbi9tZWVnby9w
bGF5ZXJidXR0b24uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgt
aWVzKQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
CisgKi8KKworI2luY2x1ZGUgInBsYXllcmJ1dHRvbi5oIgorCisjaW5jbHVkZSA8UUdlc3R1cmU+
CisjaW5jbHVkZSA8UUdlc3R1cmVFdmVudD4KKworUGxheWVyQnV0dG9uOjpQbGF5ZXJCdXR0b24o
UVdpZGdldCAqcGFyZW50KQorICAgIDogUVB1c2hCdXR0b24ocGFyZW50KQoreworICAgIGdyYWJH
ZXN0dXJlKFF0OjpUYXBBbmRIb2xkR2VzdHVyZSk7CisgICAgc2V0Rml4ZWRTaXplKDUwLCA1MCk7
CisgICAgc2V0SWNvblNpemUoUVNpemUoNTAsIDUwKSk7CisgICAgc2V0U3R5bGVTaGVldCgiYm9y
ZGVyOiBub25lIik7Cit9CisKK2Jvb2wgUGxheWVyQnV0dG9uOjpldmVudChRRXZlbnQgKmV2ZW50
KQoreworICAgIGlmIChldmVudC0+dHlwZSgpID09IFFFdmVudDo6R2VzdHVyZSkgeworICAgICAg
ICBRR2VzdHVyZUV2ZW50KiBnZXN0dXJlRXZlbnQgPSAoUUdlc3R1cmVFdmVudCopc3RhdGljX2Nh
c3Q8UUdlc3R1cmVFdmVudCo+KGV2ZW50KTsKKyAgICAgICAgUUdlc3R1cmUqIGdlc3R1cmUgPSBn
ZXN0dXJlRXZlbnQtPmdlc3R1cmUoUXQ6OlRhcEFuZEhvbGRHZXN0dXJlKTsKKyAgICAgICAgaWYg
KGdlc3R1cmUgJiYgZ2VzdHVyZS0+c3RhdGUoKSA9PSBRdDo6R2VzdHVyZUZpbmlzaGVkKSB7Cisg
ICAgICAgICAgICBlbWl0IHRhcEFuZEhvbGQoKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBRUHVzaEJ1dHRvbjo6ZXZlbnQoZXZlbnQpOwor
fQpJbmRleDogU291cmNlL1dlYktpdC9xdC9wbGF0Zm9ybXBsdWdpbi9tZWVnby9wbGF5ZXJidXR0
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L3BsYXRmb3JtcGx1Z2luL21lZWdv
L3BsYXllcmJ1dHRvbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9xdC9wbGF0Zm9y
bXBsdWdpbi9tZWVnby9wbGF5ZXJidXR0b24uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRz
IHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgcGxheWVyYnV0dG9uX2gKKyNkZWZpbmUgcGxh
eWVyYnV0dG9uX2gKKworI2luY2x1ZGUgPFFQdXNoQnV0dG9uPgorCitjbGFzcyBQbGF5ZXJCdXR0
b24gOiBwdWJsaWMgUVB1c2hCdXR0b24geworICAgIFFfT0JKRUNUCitwdWJsaWM6CisgICAgUGxh
eWVyQnV0dG9uKFFXaWRnZXQqIHBhcmVudCA9IDApOworICAgIGJvb2wgZXZlbnQoUUV2ZW50Kik7
CisKK3NpZ25hbHM6CisgICAgdm9pZCB0YXBBbmRIb2xkKCk7Cit9OworCisjZW5kaWYgLyogcGxh
eWVyYnV0dG9uX2ggKi8KSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvcGxhdGZvcm1wbHVnaW4vbWVl
Z28vcXR3ZWJraXQtbWVlZ290b3VjaHBsdWdpbi5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9xdC9wbGF0Zm9ybXBsdWdpbi9tZWVnby9xdHdlYmtpdC1tZWVnb3RvdWNocGx1Z2luLnBy
bwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvcXQvcGxhdGZvcm1wbHVnaW4vbWVlZ28v
cXR3ZWJraXQtbWVlZ290b3VjaHBsdWdpbi5wcm8JKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDkg
QEAKK1RFTVBMQVRFID0gbGliCitDT05GSUcgKz0gcGx1Z2luIG1vYmlsaXR5CitUQVJHRVQgPSAk
JHF0TGlicmFyeVRhcmdldChxdHdlYmtpdC1tZWVnb3RvdWNocGx1Z2luKQorUVQgICAgICAgKz0g
Y29yZSBndWkgZGJ1cworQ09ORklHICs9IG1lZWdvdG91Y2gKKworUkVTT1VSQ0VTID0gcmVzb3Vy
Y2UucXJjCisKKyMjIGxvYWQgbW9iaWxpdHljb25maWcgaWYgbW9iaWxpdHkgaXMgYXZhaWxhYmxl
Citsb2FkKG1vYmlsaXR5Y29uZmlnLCB0cnVlKQorCisjIEhUTUw1IE1lZGlhIFN1cHBvcnQKKyMg
V2UgcmVxdWlyZSBRdE11bHRpbWVkaWEKK2NvbnRhaW5zKE1PQklMSVRZX0NPTkZJRywgbXVsdGlt
ZWRpYSkgeworICAgIENPTkZJRyArPSBtb2JpbGl0eQorICAgIE1PQklMSVRZICs9IG11bHRpbWVk
aWEgc3lzdGVtaW5mbworICAgIERFRklORVMgKz0gRU5BQkxFX1FUX01VTFRJTUVESUE9MQorfQor
CitTT1VSQ0VTICs9IFwKKyAgICBtZWVnb3RvdWNocGxhdGZvcm1wbHVnaW4uY3BwIFwKKyAgICBz
ZWxlY3Rjb250cm9sbGVyLmNwcCBcCisgICAgc2VsZWN0ZGlhbG9nLmNwcCBcCisgICAgd2Vibm90
aWZpY2F0aW9ucHJlc2VudGVyLmNwcCBcCisgICAgd2ViaGFwdGljZmVlZGJhY2twbGF5ZXIuY3Bw
IFwKKyAgICBodG1sNXZpZGVvcGx1Z2luLmNwcCBcCisgICAgaHRtbDV2aWRlb3dpZGdldC5jcHAg
XAorICAgIG92ZXJsYXl3aWRnZXQuY3BwIFwKKyAgICBwbGF5ZXJidXR0b24uY3BwCisKK0hFQURF
UlMgKz0gXAorICAgIHF3ZWJraXRwbGF0Zm9ybXBsdWdpbi5oIFwKKyAgICBtZWVnb3RvdWNocGxh
dGZvcm1wbHVnaW4uaCBcCisgICAgc2VsZWN0Y29udHJvbGxlci5oIFwKKyAgICBzZWxlY3RkaWFs
b2cuaCBcCisgICAgd2Vibm90aWZpY2F0aW9ucHJlc2VudGVyLmggXAorICAgIHdlYmhhcHRpY2Zl
ZWRiYWNrcGxheWVyLmggXAorICAgIGh0bWw1dmlkZW9wbHVnaW4uaCBcCisgICAgaHRtbDV2aWRl
b3dpZGdldC5oIFwKKyAgICBvdmVybGF5d2lkZ2V0LmggXAorICAgIHBsYXllcmJ1dHRvbi5oCisK
K3RhcmdldC5wYXRoICs9ICQkW1FUX0lOU1RBTExfUExVR0lOU10vd2Via2l0CitJTlNUQUxMUyAr
PSB0YXJnZXQKKworIyBEZWZhdWx0IGZlYXR1cmUgY29uZmlndXJhdGlvbgorCisjIE91dC1vZi1w
cm9jZXNzIG5vdGlmaWNhdGlvbiAKKyFjb250YWlucyhERUZJTkVTLCBVU0VfT09QX05PVElGSUNB
VElPTj0uKTogREVGSU5FUyArPSBVU0VfT09QX05PVElGSUNBVElPTj0xCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L3F0L3BsYXRmb3JtcGx1Z2luL21lZWdvL3F3ZWJraXRwbGF0Zm9ybXBsdWdpbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvcGxhdGZvcm1wbHVnaW4vbWVlZ28vcXdlYmtp
dHBsYXRmb3JtcGx1Z2luLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L3F0L3BsYXRm
b3JtcGx1Z2luL21lZWdvL3F3ZWJraXRwbGF0Zm9ybXBsdWdpbi5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDE1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlv
biBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgcXdlYmtpdHBsYXRmb3Jt
cGx1Z2luX2gKKyNkZWZpbmUgcXdlYmtpdHBsYXRmb3JtcGx1Z2luX2gKKworLyoKKyAqICBXYXJu
aW5nOiBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGlzIG5vdCAgcGFydCBvZiB0aGUgcHVibGlj
IFF0V2ViS2l0IEFQSQorICogIGFuZCBtYXkgYmUgY2hhbmdlZCBmcm9tIHZlcnNpb24gdG8gdmVy
c2lvbiBvciBldmVuIGJlIGNvbXBsZXRlbHkgcmVtb3ZlZC4KKyovCisKKyNpbmNsdWRlIDxRQ29s
b3I+CisjaW5jbHVkZSA8UU9iamVjdD4KKyNpbmNsdWRlIDxRVXJsPgorI2lmIGRlZmluZWQoV1RG
X1VTRV9RVF9NVUxUSU1FRElBKSAmJiBXVEZfVVNFX1FUX01VTFRJTUVESUEKKyNpbmNsdWRlIDxR
TWVkaWFQbGF5ZXI+CisjZW5kaWYKKworY2xhc3MgUVdlYlNlbGVjdERhdGEgeworcHVibGljOgor
ICAgIHZpcnR1YWwgflFXZWJTZWxlY3REYXRhKCkgeyB9CisKKyAgICBlbnVtIEl0ZW1UeXBlIHsg
T3B0aW9uLCBHcm91cCwgU2VwYXJhdG9yIH07CisKKyAgICB2aXJ0dWFsIEl0ZW1UeXBlIGl0ZW1U
eXBlKGludCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgUVN0cmluZyBpdGVtVGV4dChpbnQgaW5k
ZXgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFFTdHJpbmcgaXRlbVRvb2xUaXAoaW50IGluZGV4
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGl0ZW1Jc0VuYWJsZWQoaW50IGluZGV4KSBj
b25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGl0ZW1Jc1NlbGVjdGVkKGludCBpbmRleCkgY29u
c3QgPSAwOworICAgIHZpcnR1YWwgaW50IGl0ZW1Db3VudCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0
dWFsIGJvb2wgbXVsdGlwbGUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBRQ29sb3IgYmFja2dy
b3VuZENvbG9yKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgUUNvbG9yIGZvcmVncm91bmRDb2xv
cigpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFFDb2xvciBpdGVtQmFja2dyb3VuZENvbG9yKGlu
dCBpbmRleCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgUUNvbG9yIGl0ZW1Gb3JlZ3JvdW5kQ29s
b3IoaW50IGluZGV4KSBjb25zdCA9IDA7Cit9OworCitjbGFzcyBRV2ViU2VsZWN0TWV0aG9kIDog
cHVibGljIFFPYmplY3QgeworICAgIFFfT0JKRUNUCitwdWJsaWM6CisgICAgdmlydHVhbCB+UVdl
YlNlbGVjdE1ldGhvZCgpIHsgfQorCisgICAgdmlydHVhbCB2b2lkIHNob3coY29uc3QgUVdlYlNl
bGVjdERhdGEmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGhpZGUoKSA9IDA7CisKK1FfU0lHTkFM
UzoKKyAgICB2b2lkIHNlbGVjdEl0ZW0oaW50IGluZGV4LCBib29sIGFsbG93TXVsdGlwbHlTZWxl
Y3Rpb25zLCBib29sIHNoaWZ0KTsKKyAgICB2b2lkIGRpZEhpZGUoKTsKK307CisKK2NsYXNzIFFX
ZWJOb3RpZmljYXRpb25EYXRhIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5RV2ViTm90aWZpY2F0
aW9uRGF0YSgpIHsgfQorCisgICAgdmlydHVhbCBjb25zdCBRU3RyaW5nIHRpdGxlKCkgY29uc3Qg
PSAwOworICAgIHZpcnR1YWwgY29uc3QgUVN0cmluZyBtZXNzYWdlKCkgY29uc3QgPSAwOworICAg
IHZpcnR1YWwgY29uc3QgUUJ5dGVBcnJheSBpY29uRGF0YSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0
dWFsIGNvbnN0IFFVcmwgb3BlbmVyUGFnZVVybCgpIGNvbnN0ID0gMDsKK307CisKK2NsYXNzIFFX
ZWJOb3RpZmljYXRpb25QcmVzZW50ZXIgOiBwdWJsaWMgUU9iamVjdCB7CisgICAgUV9PQkpFQ1QK
K3B1YmxpYzoKKyAgICBRV2ViTm90aWZpY2F0aW9uUHJlc2VudGVyKCkgeyB9CisgICAgdmlydHVh
bCB+UVdlYk5vdGlmaWNhdGlvblByZXNlbnRlcigpIHsgfQorCisgICAgdmlydHVhbCB2b2lkIHNo
b3dOb3RpZmljYXRpb24oY29uc3QgUVdlYk5vdGlmaWNhdGlvbkRhdGEqKSA9IDA7CisgICAgCitR
X1NJR05BTFM6CisgICAgdm9pZCBub3RpZmljYXRpb25DbG9zZWQoKTsKKyAgICB2b2lkIG5vdGlm
aWNhdGlvbkNsaWNrZWQoKTsKK307CisKK2NsYXNzIFFXZWJIYXB0aWNGZWVkYmFja1BsYXllcjog
cHVibGljIFFPYmplY3QgeworICAgIFFfT0JKRUNUCitwdWJsaWM6CisgICAgUVdlYkhhcHRpY0Zl
ZWRiYWNrUGxheWVyKCkgeyB9CisgICAgdmlydHVhbCB+UVdlYkhhcHRpY0ZlZWRiYWNrUGxheWVy
KCkgeyB9CisKKyAgICBlbnVtIEhhcHRpY1N0cmVuZ3RoIHsKKyAgICAgICAgTm9uZSwgV2Vhaywg
TWVkaXVtLCBTdHJvbmcKKyAgICB9OworCisgICAgZW51bSBIYXB0aWNFdmVudCB7CisgICAgICAg
IFByZXNzLCBSZWxlYXNlCisgICAgfTsKKworICAgIHZpcnR1YWwgdm9pZCBwbGF5SGFwdGljRmVl
ZGJhY2soY29uc3QgSGFwdGljRXZlbnQsIGNvbnN0IFFTdHJpbmcmIGhhcHRpY1R5cGUsIGNvbnN0
IEhhcHRpY1N0cmVuZ3RoKSA9IDA7Cit9OworCitjbGFzcyBRV2ViVG91Y2hNb2RpZmllciA6IHB1
YmxpYyBRT2JqZWN0IHsKKyAgICBRX09CSkVDVAorcHVibGljOgorICAgIHZpcnR1YWwgflFXZWJU
b3VjaE1vZGlmaWVyKCkgeyB9CisKKyAgICBlbnVtIFBhZGRpbmdEaXJlY3Rpb24geworICAgICAg
ICBVcCwgUmlnaHQsIERvd24sIExlZnQKKyAgICB9OworCisgICAgdmlydHVhbCB1bnNpZ25lZCBo
aXRUZXN0UGFkZGluZ0ZvclRvdWNoKGNvbnN0IFBhZGRpbmdEaXJlY3Rpb24pIGNvbnN0ID0gMDsK
K307CisKKyNpZiBkZWZpbmVkKFdURl9VU0VfUVRfTVVMVElNRURJQSkgJiYgV1RGX1VTRV9RVF9N
VUxUSU1FRElBCitjbGFzcyBRV2ViRnVsbFNjcmVlblZpZGVvSGFuZGxlciA6IHB1YmxpYyBRT2Jq
ZWN0IHsKKyAgICBRX09CSkVDVAorcHVibGljOgorICAgIFFXZWJGdWxsU2NyZWVuVmlkZW9IYW5k
bGVyKCkgeyB9CisgICAgdmlydHVhbCB+UVdlYkZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIoKSB7IH0K
KyAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNGdWxsU2NyZWVuRm9yVmlkZW9QbGF5YmFjaygpIGNv
bnN0ID0gMDsKKworUV9TSUdOQUxTOgorICAgIHZvaWQgZnVsbFNjcmVlbkNsb3NlZCgpOworCitw
dWJsaWMgUV9TTE9UUzoKKyAgICB2aXJ0dWFsIHZvaWQgZW50ZXJGdWxsU2NyZWVuKFFNZWRpYVBs
YXllciopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZXhpdEZ1bGxTY3JlZW4oKSA9IDA7Cit9Owor
I2VuZGlmCisKK2NsYXNzIFFXZWJLaXRQbGF0Zm9ybVBsdWdpbiB7CitwdWJsaWM6CisgICAgdmly
dHVhbCB+UVdlYktpdFBsYXRmb3JtUGx1Z2luKCkgeyB9CisKKyAgICBlbnVtIEV4dGVuc2lvbiB7
CisgICAgICAgIE11bHRpcGxlU2VsZWN0aW9ucywKKyAgICAgICAgTm90aWZpY2F0aW9ucywKKyAg
ICAgICAgSGFwdGljcywKKyAgICAgICAgVG91Y2hJbnRlcmFjdGlvbiwKKyAgICAgICAgRnVsbFNj
cmVlblZpZGVvUGxheWVyCisgICAgfTsKKworICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0V4dGVu
c2lvbihFeHRlbnNpb24pIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFFPYmplY3QqIGNyZWF0ZUV4
dGVuc2lvbihFeHRlbnNpb24pIGNvbnN0ID0gMDsKK307CisKK1FUX0JFR0lOX05BTUVTUEFDRQor
UV9ERUNMQVJFX0lOVEVSRkFDRShRV2ViS2l0UGxhdGZvcm1QbHVnaW4sICJjb20ubm9raWEuUXQu
V2ViS2l0LlBsYXRmb3JtUGx1Z2luLzEuNyIpOworUVRfRU5EX05BTUVTUEFDRQorCisjZW5kaWYg
Ly8gcXdlYmtpdHBsYXRmb3JtcGx1Z2luX2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvcGxhdGZv
cm1wbHVnaW4vbWVlZ28vcmVzb3VyY2UucXJjCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
cXQvcGxhdGZvcm1wbHVnaW4vbWVlZ28vcmVzb3VyY2UucXJjCShyZXZpc2lvbiAwKQorKysgU291
cmNlL1dlYktpdC9xdC9wbGF0Zm9ybXBsdWdpbi9tZWVnby9yZXNvdXJjZS5xcmMJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsOCBAQAorPCFET0NUWVBFIFJDQz48UkNDIHZlcnNpb249IjEuMCI+Cis8
cXJlc291cmNlPgorICAgIDxmaWxlPmltYWdlcy9idXR0b25fY2Fubm90cGxheS5wbmc8L2ZpbGU+
CisgICAgPGZpbGU+aW1hZ2VzL2J1dHRvbl9jbG9zZS5wbmc8L2ZpbGU+CisgICAgPGZpbGU+aW1h
Z2VzL2J1dHRvbl9wYXVzZS5wbmc8L2ZpbGU+CisgICAgPGZpbGU+aW1hZ2VzL2J1dHRvbl9wbGF5
LnBuZzwvZmlsZT4KKzwvcXJlc291cmNlPgorPC9SQ0M+CkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0
L3BsYXRmb3JtcGx1Z2luL21lZWdvL3NlbGVjdGNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvcXQvcGxhdGZvcm1wbHVnaW4vbWVlZ28vc2VsZWN0Y29udHJvbGxlci5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L3F0L3BsYXRmb3JtcGx1Z2luL21lZWdv
L3NlbGVjdGNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lk
aWFyeSgtaWVzKQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqCisgKi8KKworI2luY2x1ZGUgInNlbGVjdGNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJz
ZWxlY3RkaWFsb2cuaCIKKworU2VsZWN0Q29udHJvbGxlcjo6flNlbGVjdENvbnRyb2xsZXIoKQor
eworICAgIGlmIChtX2RpYWxvZykKKyAgICAgICAgbV9kaWFsb2ctPmRlbGV0ZUxhdGVyKCk7Cit9
CisKK3ZvaWQgU2VsZWN0Q29udHJvbGxlcjo6c2hvdyhjb25zdCBRV2ViU2VsZWN0RGF0YSYgZGF0
YSkKK3sKKyAgICBpZiAobV9kaWFsb2cpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZGlhbG9n
ID0gbmV3IFNlbGVjdERpYWxvZyhkYXRhKTsKKyAgICBjb25uZWN0KG1fZGlhbG9nLCBTSUdOQUwo
ZGlzYXBwZWFyZWQoKSksIHRoaXMsIFNMT1QoZGlhbG9nQ2xvc2VkKCkpKTsKKyAgICBjb25uZWN0
KG1fZGlhbG9nLCBTSUdOQUwoc2VsZWN0SXRlbShpbnQsIGJvb2wsIGJvb2wpKSwgdGhpcywgU0lH
TkFMKHNlbGVjdEl0ZW0oaW50LCBib29sLCBib29sKSkpOworICAgIG1fZGlhbG9nLT5hcHBlYXIo
TVNjZW5lV2luZG93OjpLZWVwV2hlbkRvbmUpOworfQorCit2b2lkIFNlbGVjdENvbnRyb2xsZXI6
OmhpZGUoKQoreworICAgIGlmICghbV9kaWFsb2cpCisgICAgICAgIHJldHVybjsKK30KKwordm9p
ZCBTZWxlY3RDb250cm9sbGVyOjpkaWFsb2dDbG9zZWQoKQoreworICAgIGlmICghbV9kaWFsb2cp
CisgICAgICAgIHJldHVybjsKKworICAgIG1fZGlhbG9nLT5kZWxldGVMYXRlcigpOworICAgIG1f
ZGlhbG9nID0gMDsKKworICAgIGVtaXQgZGlkSGlkZSgpOworfQpJbmRleDogU291cmNlL1dlYktp
dC9xdC9wbGF0Zm9ybXBsdWdpbi9tZWVnby9zZWxlY3Rjb250cm9sbGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9xdC9wbGF0Zm9ybXBsdWdpbi9tZWVnby9zZWxlY3Rjb250cm9sbGVy
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L3F0L3BsYXRmb3JtcGx1Z2luL21lZWdv
L3NlbGVjdGNvbnRyb2xsZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlh
cnkoLWllcykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKgorICovCisKKyNpZm5kZWYgc2VsZWN0Y29udHJvbGxlcl9oCisjZGVmaW5lIHNlbGVjdGNv
bnRyb2xsZXJfaAorCisjaW5jbHVkZSAicXdlYmtpdHBsYXRmb3JtcGx1Z2luLmgiCisKK2NsYXNz
IFNlbGVjdERpYWxvZzsKKworY2xhc3MgU2VsZWN0Q29udHJvbGxlciA6IHB1YmxpYyBRV2ViU2Vs
ZWN0TWV0aG9kIHsKKyAgICBRX09CSkVDVAorCitwdWJsaWM6CisgICAgU2VsZWN0Q29udHJvbGxl
cigpIDogbV9kaWFsb2coMCkgeyB9OworICAgIHZpcnR1YWwgflNlbGVjdENvbnRyb2xsZXIoKTsK
KworICAgIHZpcnR1YWwgdm9pZCBzaG93KGNvbnN0IFFXZWJTZWxlY3REYXRhJik7CisgICAgdmly
dHVhbCB2b2lkIGhpZGUoKTsKKworcHJpdmF0ZSBzbG90czoKKyAgICB2b2lkIGRpYWxvZ0Nsb3Nl
ZCgpOworCitwcml2YXRlOgorICAgIFNlbGVjdERpYWxvZyogbV9kaWFsb2c7Cit9OworCisjZW5k
aWYgLy8gc2VsZWN0Y29udHJvbGxlcl9ICkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L3BsYXRmb3Jt
cGx1Z2luL21lZWdvL3NlbGVjdGRpYWxvZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9xdC9wbGF0Zm9ybXBsdWdpbi9tZWVnby9zZWxlY3RkaWFsb2cuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL1dlYktpdC9xdC9wbGF0Zm9ybXBsdWdpbi9tZWVnby9zZWxlY3RkaWFsb2cuY3Bw
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNs
dWRlICJzZWxlY3RkaWFsb2cuaCIKKyNpbmNsdWRlICJxd2Via2l0cGxhdGZvcm1wbHVnaW4uaCIK
KworI2luY2x1ZGUgPE1BYnN0cmFjdENlbGxDcmVhdG9yPgorI2luY2x1ZGUgPE1Db250ZW50SXRl
bT4KKyNpbmNsdWRlIDxNTGlzdD4KKyNpbmNsdWRlIDxRTW9kZWxJbmRleD4KKyNpbmNsdWRlIDxR
U3RhbmRhcmRJdGVtPgorI2luY2x1ZGUgPFFTdGFuZGFyZEl0ZW1Nb2RlbD4KKyNpbmNsdWRlIDxR
U3RyaW5nTGlzdD4KKyNpbmNsdWRlIDxRVmFyaWFudD4KKworCitjbGFzcyBDb250ZW50SXRlbUNy
ZWF0b3IgOiBwdWJsaWMgTUFic3RyYWN0Q2VsbENyZWF0b3I8TUNvbnRlbnRJdGVtPiB7CitwdWJs
aWM6CisgICAgQ29udGVudEl0ZW1DcmVhdG9yKCkgOiBNQWJzdHJhY3RDZWxsQ3JlYXRvcjxNQ29u
dGVudEl0ZW0+KCkgeyB9CisKKyAgICBNV2lkZ2V0KiBjcmVhdGVDZWxsKGNvbnN0IFFNb2RlbElu
ZGV4JiBpbmRleCwgTVdpZGdldFJlY3ljbGVyJiByZWN5Y2xlcikgY29uc3QgCisgICAgeworICAg
ICAgICBNQ29udGVudEl0ZW0qIGNlbGwgPSBxb2JqZWN0X2Nhc3Q8TUNvbnRlbnRJdGVtICo+KHJl
Y3ljbGVyLnRha2UoTUNvbnRlbnRJdGVtOjpzdGF0aWNNZXRhT2JqZWN0LmNsYXNzTmFtZSgpKSk7
CisgICAgICAgIGlmICghY2VsbCkKKyAgICAgICAgICAgIGNlbGwgPSBuZXcgTUNvbnRlbnRJdGVt
KE1Db250ZW50SXRlbTo6U2luZ2xlVGV4dExhYmVsKTsKKyAgICAgICAgdXBkYXRlQ2VsbChpbmRl
eCwgY2VsbCk7CisgICAgICAgIHJldHVybiBjZWxsOworICAgIH0KKworICAgIHZvaWQgdXBkYXRl
Q2VsbChjb25zdCBRTW9kZWxJbmRleCYgaW5kZXgsIE1XaWRnZXQqIGNlbGwpIGNvbnN0CisgICAg
eworICAgICAgICBNQ29udGVudEl0ZW0qIGl0ZW0gPSBxb2JqZWN0X2Nhc3Q8TUNvbnRlbnRJdGVt
Kj4oY2VsbCk7CisgICAgICAgIGlmICghaXRlbSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICBRVmFyaWFudCBkYXRhID0gaW5kZXguZGF0YShRdDo6RGlzcGxheVJvbGUpOworICAgICAg
ICBRU3RyaW5nTGlzdCByb3dEYXRhID0gZGF0YS52YWx1ZTxRU3RyaW5nTGlzdD4oKTsKKyAgICAg
ICAgaWYgKCFyb3dEYXRhLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGl0ZW0tPnNldFRpdGxlKHJv
d0RhdGEuYXQoMCkpOworICAgIH0KK307CisKK1NlbGVjdERpYWxvZzo6U2VsZWN0RGlhbG9nKGNv
bnN0IFFXZWJTZWxlY3REYXRhJiBkYXRhKQorICAgIDogbV9kYXRhKGRhdGEpCit7CisgICAgbV9s
aXN0ID0gbmV3IE1MaXN0KCk7CisgICAgbV9saXN0LT5zZXRDZWxsQ3JlYXRvcihuZXcgQ29udGVu
dEl0ZW1DcmVhdG9yKCkpOworICAgIHRoaXMtPnNldENlbnRyYWxXaWRnZXQobV9saXN0KTsKKyAg
ICBpZiAoZGF0YS5tdWx0aXBsZSgpKQorICAgICAgICBtX2xpc3QtPnNldFNlbGVjdGlvbk1vZGUo
TUxpc3Q6Ok11bHRpU2VsZWN0aW9uKTsKKyAgICBlbHNlCisgICAgICAgIG1fbGlzdC0+c2V0U2Vs
ZWN0aW9uTW9kZShNTGlzdDo6U2luZ2xlU2VsZWN0aW9uKTsKKyAgICBwb3B1bGF0ZUxpc3QoKTsK
KyAgICBjb25uZWN0KG1fbGlzdCwgU0lHTkFMKGl0ZW1DbGlja2VkKFFNb2RlbEluZGV4KSksIHRo
aXMsIFNMT1QobW9kaWZ5SXRlbVN0YXRlKFFNb2RlbEluZGV4KSkpOworfQorCitTZWxlY3REaWFs
b2c6On5TZWxlY3REaWFsb2coKQoreworICAgIG1fbGlzdC0+ZGVsZXRlTGF0ZXIoKTsKK30KKwor
dm9pZCBTZWxlY3REaWFsb2c6OnBvcHVsYXRlTGlzdCgpCit7CisgICAgUVN0cmluZ0xpc3QgZGlh
bG9nSXRlbXM7CisgICAgUVN0YW5kYXJkSXRlbU1vZGVsKiBzdGFuZGFyZEl0ZW1Nb2RlbCA9IG5l
dyBRU3RhbmRhcmRJdGVtTW9kZWwodGhpcyk7CisgICAgUUxpc3Q8aW50PiBzZWxlY3RlZE9wdGlv
bnM7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX2RhdGEuaXRlbUNvdW50KCk7ICsraSkgewor
ICAgICAgICBRU3RhbmRhcmRJdGVtKiBpdGVtID0gbmV3IFFTdGFuZGFyZEl0ZW0oKTsKKyAgICAg
ICAgaWYgKG1fZGF0YS5pdGVtVHlwZShpKSA9PSBRV2ViU2VsZWN0RGF0YTo6T3B0aW9uKSB7Cisg
ICAgICAgICAgICBpdGVtLT5zZXRUZXh0KCIgICAiICsgbV9kYXRhLml0ZW1UZXh0KGkpKTsKKyAg
ICAgICAgICAgIGlmIChtX2RhdGEuaXRlbUlzU2VsZWN0ZWQoaSkpCisgICAgICAgICAgICAgICAg
c2VsZWN0ZWRPcHRpb25zIDw8IGk7CisgICAgICAgIH0gZWxzZSBpZiAobV9kYXRhLml0ZW1UeXBl
KGkpID09IFFXZWJTZWxlY3REYXRhOjpHcm91cCkgeworICAgICAgICAgICAgaXRlbS0+c2V0VGV4
dChtX2RhdGEuaXRlbVRleHQoaSkpOworICAgICAgICAgICAgaXRlbS0+c2V0RW5hYmxlZChmYWxz
ZSk7CisgICAgICAgICAgICBpdGVtLT5zZXRTZWxlY3RhYmxlKGZhbHNlKTsKKyAgICAgICAgfQor
ICAgICAgICBzdGFuZGFyZEl0ZW1Nb2RlbC0+YXBwZW5kUm93KGl0ZW0pOworICAgIH0KKworICAg
IG1fbGlzdC0+c2V0SXRlbU1vZGVsKHN0YW5kYXJkSXRlbU1vZGVsKTsKKyAgICBmb3JlYWNoIChp
bnQgc2VsZWN0ZWQsIHNlbGVjdGVkT3B0aW9ucykKKyAgICAgICAgbV9saXN0LT5zZWxlY3RJdGVt
KG1fbGlzdC0+aXRlbU1vZGVsKCktPmluZGV4KHNlbGVjdGVkLCAwKSk7Cit9CisKK3ZvaWQgU2Vs
ZWN0RGlhbG9nOjptb2RpZnlJdGVtU3RhdGUoY29uc3QgUU1vZGVsSW5kZXgmIGluZGV4KQorewor
ICAgIGludCBjbGlja2VkSW5kZXggPSBpbmRleC5yb3coKTsKKyAgICBpZiAobV9kYXRhLm11bHRp
cGxlKCkpIHsKKyAgICAgICAgLy8gTXVsdGkgc2VsZWN0CisgICAgICAgIGVtaXQgc2VsZWN0SXRl
bShjbGlja2VkSW5kZXgsIHRydWUsIGZhbHNlKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBT
aW5nbGUgc2VsZWN0CisgICAgICAgIGVtaXQgc2VsZWN0SXRlbShjbGlja2VkSW5kZXgsIGZhbHNl
LCBmYWxzZSk7CisgICAgICAgIGRpc2FwcGVhcigpOworICAgIH0KK30KSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvcXQvcGxhdGZvcm1wbHVnaW4vbWVlZ28vc2VsZWN0ZGlhbG9nLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9xdC9wbGF0Zm9ybXBsdWdpbi9tZWVnby9zZWxlY3RkaWFsb2cuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvcXQvcGxhdGZvcm1wbHVnaW4vbWVlZ28vc2Vs
ZWN0ZGlhbG9nLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMp
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAq
LworCisjaWZuZGVmIHNlbGVjdGRpYWxvZ19oCisjZGVmaW5lIHNlbGVjdGRpYWxvZ19oCisKKyNp
bmNsdWRlIDxNRGlhbG9nPgorCitjbGFzcyBNTGlzdDsKK2NsYXNzIFFNb2RlbEluZGV4OworY2xh
c3MgUVdlYlNlbGVjdERhdGE7CisKK2NsYXNzIFNlbGVjdERpYWxvZyA6IHB1YmxpYyBNRGlhbG9n
IHsKKyAgICBRX09CSkVDVAorcHVibGljOgorICAgIFNlbGVjdERpYWxvZyhjb25zdCBRV2ViU2Vs
ZWN0RGF0YSYpOworICAgIHZpcnR1YWwgflNlbGVjdERpYWxvZygpOworCitRX1NJR05BTFM6Cisg
ICAgdm9pZCBzZWxlY3RJdGVtKGludCBpbmRleCwgYm9vbCBhbGxvd011bHRpcGx5U2VsZWN0aW9u
cywgYm9vbCBzaGlmdCk7CisKK3ByaXZhdGUgUV9TTE9UUzoKKyAgICB2b2lkIG1vZGlmeUl0ZW1T
dGF0ZShjb25zdCBRTW9kZWxJbmRleCYpOworCitwcml2YXRlOgorICAgIHZvaWQgcG9wdWxhdGVM
aXN0KCk7CisKK3ByaXZhdGU6CisgICAgY29uc3QgUVdlYlNlbGVjdERhdGEmIG1fZGF0YTsKKyAg
ICBNTGlzdCogbV9saXN0OworfTsKKworI2VuZGlmIC8vIHNlbGVjdGRpYWxvZ19oCkluZGV4OiBT
b3VyY2UvV2ViS2l0L3F0L3BsYXRmb3JtcGx1Z2luL21lZWdvL3dlYmhhcHRpY2ZlZWRiYWNrcGxh
eWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L3BsYXRmb3JtcGx1Z2luL21l
ZWdvL3dlYmhhcHRpY2ZlZWRiYWNrcGxheWVyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9X
ZWJLaXQvcXQvcGxhdGZvcm1wbHVnaW4vbWVlZ28vd2ViaGFwdGljZmVlZGJhY2twbGF5ZXIuY3Bw
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNs
dWRlICJ3ZWJoYXB0aWNmZWVkYmFja3BsYXllci5oIgorCisjaW5jbHVkZSA8TUFwcGxpY2F0aW9u
PgorI2luY2x1ZGUgPE1GZWVkYmFja1BsYXllcj4KKwordm9pZCBXZWJIYXB0aWNGZWVkYmFja1Bs
YXllcjo6cGxheUhhcHRpY0ZlZWRiYWNrKGNvbnN0IEhhcHRpY0V2ZW50IGV2ZW50LCBjb25zdCBR
U3RyaW5nJiB0eXBlLCBjb25zdCBIYXB0aWNTdHJlbmd0aCBzdHJlbmd0aCkKK3sKKyAgICBpZiAo
c3RyZW5ndGggPT0gTm9uZSB8fCB0eXBlID09ICJMYXRjaGVkQnV0dG9uU3R1Y2siIHx8IHR5cGUg
PT0gIlVuZGVmaW5lZCIpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICh0eXBlID09ICJDaGVj
a2VkQ2hlY2tCb3giKQorICAgICAgICBNQXBwbGljYXRpb246OmZlZWRiYWNrUGxheWVyKCktPnBs
YXkoInByZXNzLW9mZiIpOworICAgIGVsc2UgaWYgKHR5cGUgPT0gIlVuY2hlY2tlZENoZWNrQm94
IikKKyAgICAgICAgTUFwcGxpY2F0aW9uOjpmZWVkYmFja1BsYXllcigpLT5wbGF5KCJwcmVzcy1v
biIpOworICAgIGVsc2UgeworICAgICAgICBpZiAoZXZlbnQgPT0gUHJlc3MpCisgICAgICAgICAg
ICBNQXBwbGljYXRpb246OmZlZWRiYWNrUGxheWVyKCktPnBsYXkoInByZXNzIik7CisgICAgICAg
IGVsc2UgaWYgKGV2ZW50ID09IFJlbGVhc2UpCisgICAgICAgICAgICBNQXBwbGljYXRpb246OmZl
ZWRiYWNrUGxheWVyKCktPnBsYXkoInJlbGVhc2UiKTsKKyAgICB9Cit9CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L3F0L3BsYXRmb3JtcGx1Z2luL21lZWdvL3dlYmhhcHRpY2ZlZWRiYWNrcGxheWVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9wbGF0Zm9ybXBsdWdpbi9tZWVnby93ZWJo
YXB0aWNmZWVkYmFja3BsYXllci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9xdC9w
bGF0Zm9ybXBsdWdpbi9tZWVnby93ZWJoYXB0aWNmZWVkYmFja3BsYXllci5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDMxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBv
cmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgd2ViaGFwdGlj
ZmVlZGJhY2twbGF5ZXJfaAorI2RlZmluZSB3ZWJoYXB0aWNmZWVkYmFja3BsYXllcl9oCisKKyNp
bmNsdWRlICJxd2Via2l0cGxhdGZvcm1wbHVnaW4uaCIKKworY2xhc3MgV2ViSGFwdGljRmVlZGJh
Y2tQbGF5ZXIgOiBwdWJsaWMgUVdlYkhhcHRpY0ZlZWRiYWNrUGxheWVyIHsKK3B1YmxpYzoKKyAg
ICB2b2lkIHBsYXlIYXB0aWNGZWVkYmFjayhjb25zdCBIYXB0aWNFdmVudCwgY29uc3QgUVN0cmlu
ZyYsIGNvbnN0IEhhcHRpY1N0cmVuZ3RoKTsKK307CisKKyNlbmRpZiAvLyB3ZWJoYXB0aWNmZWVk
YmFja3BsYXllcl9oCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L3BsYXRmb3JtcGx1Z2luL21lZWdv
L3dlYm5vdGlmaWNhdGlvbnByZXNlbnRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9xdC9wbGF0Zm9ybXBsdWdpbi9tZWVnby93ZWJub3RpZmljYXRpb25wcmVzZW50ZXIuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9xdC9wbGF0Zm9ybXBsdWdpbi9tZWVnby93ZWJu
b3RpZmljYXRpb25wcmVzZW50ZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDg4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKS4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJ3ZWJub3RpZmljYXRpb25wcmVzZW50ZXIuaCIK
KworI2lmIFVTRV9PT1BfTk9USUZJQ0FUSU9OCisjaW5jbHVkZSA8TUNvbXBvbmVudERhdGE+Cisj
aW5jbHVkZSA8TU5vdGlmaWNhdGlvbj4KKyNpbmNsdWRlIDxNUmVtb3RlQWN0aW9uPgorI2Vsc2UK
KyNpbmNsdWRlIDxNSW5mb0Jhbm5lcj4KKyNpbmNsdWRlIDxRQnl0ZUFycmF5PgorI2luY2x1ZGUg
PFFQaXhtYXA+CisjZW5kaWYKKworI2luY2x1ZGUgPFFUaW1lcj4KKworV2ViTm90aWZpY2F0aW9u
UHJlc2VudGVyOjpXZWJOb3RpZmljYXRpb25QcmVzZW50ZXIoKQorICAgIDogUVdlYk5vdGlmaWNh
dGlvblByZXNlbnRlcigpCit7Cit9CisKK3ZvaWQgV2ViTm90aWZpY2F0aW9uUHJlc2VudGVyOjpz
aG93Tm90aWZpY2F0aW9uKGNvbnN0IFFXZWJOb3RpZmljYXRpb25EYXRhKiBkYXRhKQoreworI2lm
IFVTRV9PT1BfTk9USUZJQ0FUSU9OCisgICAgTU5vdGlmaWNhdGlvbiogd2ViTm90aWZpY2F0aW9u
ID0gbmV3IE1Ob3RpZmljYXRpb24oIndlYm5vdGlmaWNhdGlvbiIsIGRhdGEtPnRpdGxlKCksIGRh
dGEtPm1lc3NhZ2UoKSk7CisKKyAgICBNUmVtb3RlQWN0aW9uKiBhY3QgPSBuZXcgTVJlbW90ZUFj
dGlvbihNQ29tcG9uZW50RGF0YTo6c2VydmljZU5hbWUoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiL29yZy9tYWVtby9tIiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tLm5va2lhLk1BcHBsaWNhdGlvbklmIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGF1bmNoIik7CisgICAg
d2ViTm90aWZpY2F0aW9uLT5zZXRBY3Rpb24oKmFjdCk7CisKKyAgICAvLyBUT0RPOiBBZGQgc2V0
dGluZyB0aGUgaW1hZ2UKKyAgICAvLyAgV2hhdCB3ZSByZWFsbHkgbmVlZCB0byBkbyBpbiBNTm90
aWZpY2F0aW9uIGlzIHRvIHdyaXRlIGltYWdlIGZyb20gZGF0YS0+aWNvbkRhdGEoKSB0bworICAg
IC8vICBhIHRlbXBvcmFyeSBmaWxlIGFuZCBnaXZlIHRoYXQgcGF0aCB0byBzZXRJbWFnZS4KKwor
ICAgIHdlYk5vdGlmaWNhdGlvbi0+cHVibGlzaCgpOworI2Vsc2UKKyAgICBNSW5mb0Jhbm5lciog
aW5mb0Jhbm5lciA9IG5ldyBNSW5mb0Jhbm5lcihNSW5mb0Jhbm5lcjo6SW5mb3JtYXRpb24pOwor
ICAgIGNvbm5lY3QoaW5mb0Jhbm5lciwgU0lHTkFMKGNsaWNrZWQoKSksIHRoaXMsIFNJR05BTChu
b3RpZmljYXRpb25DbGlja2VkKCkpKTsKKworICAgIFFQaXhtYXAgcGl4bWFwOworICAgIFFCeXRl
QXJyYXkgaWNvbiA9IGRhdGEtPmljb25EYXRhKCk7CisgICAgaWYgKGljb24ubGVuZ3RoKCkgJiYg
cGl4bWFwLmxvYWRGcm9tRGF0YShpY29uKSkKKyAgICAgICAgaW5mb0Jhbm5lci0+c2V0UGl4bWFw
KHBpeG1hcCk7CisKKworICAgIFFTdHJpbmcgbm90aWZpY2F0aW9uVGV4dDsKKyAgICBpZiAoIWRh
dGEtPnRpdGxlKCkuaXNFbXB0eSgpKQorICAgICAgICBub3RpZmljYXRpb25UZXh0ICs9IFFTdHJp
bmcoIjxiPiUxPC9iPjxici8+IikuYXJnKGRhdGEtPnRpdGxlKCkpOworCisgICAgaWYgKCFkYXRh
LT5tZXNzYWdlKCkuaXNFbXB0eSgpKQorICAgICAgICBub3RpZmljYXRpb25UZXh0ICs9IGRhdGEt
Pm1lc3NhZ2UoKTsKKworICAgIGluZm9CYW5uZXItPnNldEJvZHlUZXh0KG5vdGlmaWNhdGlvblRl
eHQpOworICAgIGluZm9CYW5uZXItPmFwcGVhcihNU2NlbmVXaW5kb3c6OkRlc3Ryb3lXaGVuRG9u
ZSk7CisKKyNlbmRpZgorICAgIC8vIFRPRE86IFdoYXQgaWYgTU5vdGlmaWNhdGlvbjo6cHVibGlz
aCgpIGZhaWxzPyBTaW5nbGUgc2hvdCByZXRyeT8KKyAgICAvLyBXb3VsZCByZXRyeSByZWFsbHkg
aGVscCB0byByZWNvdmVyIGZyb20gdGhpcyBlcnJvciAvIGNvdWxkIGl0IGJlIGhhcm1mdWwgaW4g
c29tZSBzaXR1YXRpb25zPworCisgICAgLy8gRklYTUU6IFRoaXMgY291bGQgYmUgY2hhbmdlZCB0
byB1c2Ugc3RhdGljIHNpbmdsZSBzaG90IHRpbWVyIG1ldGhvZAorICAgIFFUaW1lciogdGltZXIg
PSBuZXcgUVRpbWVyKHRoaXMpOworI2lmICFVU0VfT09QX05PVElGSUNBVElPTgorICAgIGNvbm5l
Y3QodGltZXIsIFNJR05BTCh0aW1lb3V0KCkpLCBpbmZvQmFubmVyLCBTTE9UKGRpc2FwcGVhcigp
KSk7CisgICAgY29ubmVjdCh0aW1lciwgU0lHTkFMKHRpbWVvdXQoKSksIHRoaXMsIFNJR05BTChu
b3RpZmljYXRpb25DbG9zZWQoKSkpOworI2VuZGlmCisgICAgdGltZXItPnNldFNpbmdsZVNob3Qo
dHJ1ZSk7CisgICAgdGltZXItPnN0YXJ0KDMwMDApOworfQpJbmRleDogU291cmNlL1dlYktpdC9x
dC9wbGF0Zm9ybXBsdWdpbi9tZWVnby93ZWJub3RpZmljYXRpb25wcmVzZW50ZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L3BsYXRmb3JtcGx1Z2luL21lZWdvL3dlYm5vdGlmaWNh
dGlvbnByZXNlbnRlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9xdC9wbGF0Zm9y
bXBsdWdpbi9tZWVnby93ZWJub3RpZmljYXRpb25wcmVzZW50ZXIuaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlv
biBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIHdlYm5vdGlmaWNhdGlv
bnByZXNlbnRlcl9oCisjZGVmaW5lIHdlYm5vdGlmaWNhdGlvbnByZXNlbnRlcl9oCisKKyNpbmNs
dWRlICJxd2Via2l0cGxhdGZvcm1wbHVnaW4uaCIKKworI2luY2x1ZGUgPFFCYXNpY1RpbWVyPgor
CitjbGFzcyBXZWJOb3RpZmljYXRpb25QcmVzZW50ZXIgOiBwdWJsaWMgUVdlYk5vdGlmaWNhdGlv
blByZXNlbnRlciB7CisgICAgUV9PQkpFQ1QKK3B1YmxpYzoKKyAgICBXZWJOb3RpZmljYXRpb25Q
cmVzZW50ZXIoKTsKKyAgICB2aXJ0dWFsIH5XZWJOb3RpZmljYXRpb25QcmVzZW50ZXIoKSB7IH0K
KworICAgIHZvaWQgc2hvd05vdGlmaWNhdGlvbihjb25zdCBRV2ViTm90aWZpY2F0aW9uRGF0YSop
OworCitwcml2YXRlOgorICAgIFFCYXNpY1RpbWVyIG1fdGltZXI7CisgICAgUVN0cmluZyBtX2Zp
bGVOYW1lOworfTsKKworI2VuZGlmIC8vIHdlYm5vdGlmaWNhdGlvbnByZXNlbnRlcl9oCkluZGV4
OiBTb3VyY2UvV2ViS2l0L3F0L3BsYXRmb3JtcGx1Z2luL21lZWdvL2RlYmlhbi9jaGFuZ2Vsb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9wbGF0Zm9ybXBsdWdpbi9tZWVnby9kZWJp
YW4vY2hhbmdlbG9nCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9xdC9wbGF0Zm9ybXBs
dWdpbi9tZWVnby9kZWJpYW4vY2hhbmdlbG9nCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUgQEAK
K3F0d2Via2l0LW1lZWdvdG91Y2hwbHVnaW4gKDAuMS4wLjEpIHVuc3RhYmxlOyB1cmdlbmN5PWxv
dworCisgICogSW5pdGlhbCByZWxlYXNlLgorCisgLS0gTWFoZXNoIEt1bGthcm5pIDxtYWhlc2gu
a3Vsa2FybmlAbm9raWEuY29tPiAgU2F0LCAwNyBNYXkgMjAxMSAwODo0OTowMCArMDUzMApJbmRl
eDogU291cmNlL1dlYktpdC9xdC9wbGF0Zm9ybXBsdWdpbi9tZWVnby9kZWJpYW4vY29tcGF0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvcGxhdGZvcm1wbHVnaW4vbWVlZ28vZGViaWFu
L2NvbXBhdAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvcXQvcGxhdGZvcm1wbHVnaW4v
bWVlZ28vZGViaWFuL2NvbXBhdAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSBAQAorNQpJbmRleDog
U291cmNlL1dlYktpdC9xdC9wbGF0Zm9ybXBsdWdpbi9tZWVnby9kZWJpYW4vY29udHJvbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L3BsYXRmb3JtcGx1Z2luL21lZWdvL2RlYmlhbi9j
b250cm9sCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9xdC9wbGF0Zm9ybXBsdWdpbi9t
ZWVnby9kZWJpYW4vY29udHJvbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMCBAQAorU291cmNl
OiBxdHdlYmtpdC1tZWVnb3RvdWNocGx1Z2luCitTZWN0aW9uOiBsaWJzCitQcmlvcml0eTogb3B0
aW9uYWwKK01haW50YWluZXI6IE1haGVzaCBLdWxrYXJuaSA8bWFoZXNoLmt1bGthcm5pQG5va2lh
LmNvbT4KK0J1aWxkLURlcGVuZHM6IGRlYmhlbHBlciAoPj0gNSksIGxpYnF0NC1kZXYsIGxpYm1l
ZWdvdG91Y2gtZGV2LCBsaWJxdG0tc3lzdGVtaW5mby1kZXYsIGxpYnF0bS1tdWx0aW1lZGlhLWRl
dgorU3RhbmRhcmRzLVZlcnNpb246IDMuOC4yCisKK1BhY2thZ2U6IGxpYnF0d2Via2l0LW1lZWdv
dG91Y2hwbHVnaW4KK0FyY2hpdGVjdHVyZTogYW55CitEZXBlbmRzOiAke3NobGliczpEZXBlbmRz
fSwgJHttaXNjOkRlcGVuZHN9CitEZXNjcmlwdGlvbjogUXQgNCBXZWJLaXQgcGxhdGZvcm0gcGx1
Z2luIGZvciBNZWVnbyBUb3VjaCBGcmFtZXdvcmsKKworUGFja2FnZTogbGlicXR3ZWJraXQtbWVl
Z290b3VjaHBsdWdpbi1kYmcKK1ByaW9yaXR5OiBleHRyYQorQXJjaGl0ZWN0dXJlOiBhbnkKK1Nl
Y3Rpb246IGRlYnVnCitEZXBlbmRzOiAke3NobGliczpEZXBlbmRzfSwgJHttaXNjOkRlcGVuZHN9
LCBsaWJxdHdlYmtpdC1tZWVnb3RvdWNocGx1Z2luICg9ICR7YmluYXJ5OlZlcnNpb259KQorRGVz
Y3JpcHRpb246IFF0IDQgV2ViS2l0IHBsYXRmb3JtIHBsdWdpbiBmb3IgTWVlZ28gVG91Y2ggRnJh
bWV3b3JrCisgVGhpcyBwYWNrYWdlIGNvbnRhaW5zIHRoZSBkZWJ1Z2dpbmcgc3ltYm9scyBmb3Ig
dGhlIFF0IDQgV2ViS2l0CisgcGxhdGZvcm0gcGx1Z2luIGZvciBNZWVnbyBUb3VjaCBGcmFtZXdv
cmsuCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L3BsYXRmb3JtcGx1Z2luL21lZWdvL2RlYmlhbi9s
aWJxdHdlYmtpdC1tZWVnb3RvdWNocGx1Z2luLmluc3RhbGwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9xdC9wbGF0Zm9ybXBsdWdpbi9tZWVnby9kZWJpYW4vbGlicXR3ZWJraXQtbWVlZ290
b3VjaHBsdWdpbi5pbnN0YWxsCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9xdC9wbGF0
Zm9ybXBsdWdpbi9tZWVnby9kZWJpYW4vbGlicXR3ZWJraXQtbWVlZ290b3VjaHBsdWdpbi5pbnN0
YWxsCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxIEBACisqClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg
ZmlsZQpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxv
ZwkocmV2aXNpb24gODc2ODUpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxNCBAQAorMjAxMS0wNS0zMCAgTWFoZXNoIEt1bGthcm5pICA8bWFoZXNoLmt1bGth
cm5pQG5va2lhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBbUXRdIFVwc3RyZWFtIE1lZWdvL01hZW1vIHBsYXRmb3JtIHBsdWdpbgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTg0MzYKKworICAgICAg
ICBFeGVtcHRpbmcgZGlyZWN0b3J5IFdlYktpdC9xdC9wbGF0Zm9ybXBsdWdpbi9tZWVnbyBmcm9t
IHN0eWxlIGd1aWRlLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vy
LnB5OgorCiAyMDExLTA1LTI5ICBZdXRhIEtpdGFtdXJhICA8eXV0YWtAY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IEtlbnQgVGFtdXJhLgpJbmRleDogVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvc3R5bGUvY2hlY2tlci5weQkocmV2aXNpb24gODc2ODIpCisrKyBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkJKHdvcmtpbmcgY29weSkKQEAgLTE5OSwxMCArMTk5
LDExIEBAIF9QQVRIX1JVTEVTX1NQRUNJRklFUiA9IFsKICAgICAgICIrcGVwOC9XMjkxIiwgICMg
VHJhaWxpbmcgd2hpdGUgc3BhY2UKICAgICAgICIrd2hpdGVzcGFjZS9jYXJyaWFnZV9yZXR1cm4i
XSksCiAKLSAgICAoWyMgUXQgU3ltYmlhbiBwbGF0Zm9ybSBwbHVnaW4gaGFzIG5vIGNvbmZpZy5o
IG9yIGhlYWRlciBndWFyZC4KKyAgICAoWyMgUXQgU3ltYmlhbi9tZWVnbyBwbGF0Zm9ybSBwbHVn
aW4gaGFzIG5vIGNvbmZpZy5oIG9yIGhlYWRlciBndWFyZC4KICAgICAgICMgUXQgY29kZSB1c2Vz
ICdfJyBpbiBzb21lIHBsYWNlcyAoc3VjaCBhcyBwcml2YXRlIHNsb3RzCiAgICAgICAjIGFuZCBv
biB0ZXN0IHh4eF9kYXRhIG1ldGhvcyBvbiB0ZXN0cykuCi0gICAgICAiU291cmNlL1dlYktpdC9x
dC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luLyJdLAorICAgICAgIlNvdXJjZS9XZWJLaXQvcXQvc3lt
Ymlhbi9wbGF0Zm9ybXBsdWdpbi8iLAorICAgICAgIlNvdXJjZS9XZWJLaXQvcXQvcGxhdGZvcm1w
bHVnaW4iXSwKICAgICAgWyItcmVhZGFiaWxpdHkvbmFtaW5nIiwKICAgICAgICItYnVpbGQvaGVh
ZGVyX2d1YXJkIiwKICAgICAgICItYnVpbGQvaW5jbHVkZV9vcmRlciJdKSwKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvcXQvcGxhdGZvcm1wbHVnaW4vbWVlZ28vaW1hZ2VzL2J1dHRvbl9jYW5ub3RwbGF5
LnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09CkNhbm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0
eXBlLgpzdm46bWltZS10eXBlID0gaW1hZ2UvcG5nCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3Vy
Y2UvV2ViS2l0L3F0L3BsYXRmb3JtcGx1Z2luL21lZWdvL2ltYWdlcy9idXR0b25fY2Fubm90cGxh
eS5wbmcKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOm1pbWUtdHlwZQogICArIGltYWdlL3BuZwoKCmlW
Qk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFGQUFBQUJRQ0FZQUFBSDVGc0k3QUFBQUNYQklXWE1BQUFz
VEFBQUxFd0VBbXB3WUFBQUEKR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdS
NWNjbGxQQUFBQkNaSlJFRlVlTnFNa0ZFS0FDQUlROXZ1ZitmRgpJRUVETFQ4RTNYT0trTFIrZ2s0
QVRIY1RzbzdqbUNGa3FEZzJZaG5teXluNnZPNUJWOStndXByVHV0em5BQlU0L2pqZWFIMExRQ21W
CkpBRUFncUQ4LzZNdExVcm81SzBoQkZ5c3RSbE1Yei9yeGtMYW9Sb1c2dzA3d3ROYXdiR3JxZGdL
NEpxM090dzVadFhybmtoRVZFVkUKK3U2UmdwZWNJUGU2UG5Pa1RFSzJLUURyWkpBRUFBaUN3UFQv
ZjY2TFRhV1FIdlJZQXhWc1R6UDdHQy80amRlRXZGazZ5QWhwRkVWOQpGUmhRMlppd0N3alltQWhR
RTdEMWd6MmpteGxua2Vob0htVmZDV1ZVeVZpTFJtTFBTOHRyeDZZZDdDVUFKZlYyQXlBSUExRDBo
ejExCkVJMnJ1Q2tpaXNIU3g0V0VHQko2S0Zpb0tiZGUydG1QU1pjeHFWOXAyNCsyMVpWbUoyT1Nj
aDRMUWIyWUxGdFpOWHZiOTJMcUdkd0QKaW1yWW0rcnphUWRMMEFqN1FJSVM3QWRHS01FRzBFTUpw
b0lFdFRBVDlINUFXRkl6R0VHbnNiQk9hZEhTNHVjM2dCWS92UUVVeGRqRQpqUm9uZUhWbW9lYmpF
R0VhYWo0T0ZQTmlMZ0ZvcjJNY2dFRVlocUwzdjNXbHFtSkFUWWp0ejhBSWVSTEVRTnNwMzVEdkdS
SFYxaWtuCmJKdUhRNmQxeWduRktZdWhhcDIxNzVPSVRxQW4yRitidm1NL29EVFVoYlVYSGdGTlla
TXVkcUVJN0FoMG9SUnNES1NoVTVnTVRLRXEKTEFGS1p5eU9wOXV3RklyRDhCekZreDhPZkR6NThj
Q25ZVFJVWHNDT0M3UE9lQUVYcGtMbHh3SUZjK3RJLzROTFQvNjJ6aU1BcjJaeQpCQ0FNdzhEK3Ur
YkZONzUyVllCSGdvRkVoOXY1bFVsd2ZBNytUMlcvd1E3Tzg5c3dTWFp4eWovTUlEbkJhZjMrSk1r
cFR2c1FKVWh1CmNFWW4vSVhrRmtlN2c2bjdXQlVLaUZndzFRd2h1UlF0cU9oQmtpU3BxdkU4Ulpm
OGdDZEJqUk1lbWNWY0hlMkh0OTQ0YXRvVjQwNlMKM01RZmtWd21rczFjU0Y0QytFajhkbEpCaVd3
d2tnOFNDZXRLcWlYalh5VUNOa0wwa1o2azlWd3M1Yi8wSktqb3hUMkVYZVFnTXAxVQo1cG9TcHJz
Nm8rMUU3SU5aeFNKMWJLTFFQbnFjL3ZCSmxTeHgyc1BFenNJR3B6Vk1ibjVNY2NwaFl5MWxndk1j
dG5abUpqalZOcEM2CmVkVEJxWWIxS3FMQytRUW83d3lTRUlaaEdNaFRlUm8vaFFzSEpnZW1KTGF5
Ry9vQldXcVQyTEluWFdvZHBIb3BxVlpJYTFFM0FEMVQKbjJsSXVHaytQd045bnRqanJKRkJ5R28r
VTBEZmloR3FrRjE4bG9BTVFuYnpLUUVpQ3BuaVV3cEVFRExOcHgwMEplUXVEb2dnak1KZApudWVo
Q2ttSlVSRWtPU2JOMjZhdUN2eXlvVzhubG8wYmU2RGhUMEI2SnFESXdjaTVxQ3FaSlNieHVuS0tW
a1pxNjFKSy9hMXpSbWdPCjBCSGliWFYvVGxxK080UTg4Z0NKMm1nbnB6QUpJZjhpaVc3MUl3MUdK
cm1jVXhnSmFHUFg0QUNUTFMyTmRZNTF5RTNCSWwrcXNhR0UKYWpXWVc1cVEvZG5mVk4vYXMra0Mz
amtmaytSVERreWEwRXJ3S1FNbXp3aDI4bGtHTmsycGR2Q1pCamFPOTNid3FSak0xazdxVi9DNQov
T3VHNFVMeHgvdCs0UHZ0Z0dlRnp3czZUeXRaN01JelNnQUFBQUJKUlU1RXJrSmdnZz09CgpJbmRl
eDogU291cmNlL1dlYktpdC9xdC9wbGF0Zm9ybXBsdWdpbi9tZWVnby9pbWFnZXMvYnV0dG9uX2Ns
b3NlLnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09CkNhbm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFy
eSB0eXBlLgpzdm46bWltZS10eXBlID0gaW1hZ2UvcG5nCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBT
b3VyY2UvV2ViS2l0L3F0L3BsYXRmb3JtcGx1Z2luL21lZWdvL2ltYWdlcy9idXR0b25fY2xvc2Uu
cG5nCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX18KQWRkZWQ6IHN2bjptaW1lLXR5cGUKICAgKyBpbWFnZS9wbmcKCgppVkJP
UncwS0dnb0FBQUFOU1VoRVVnQUFBQ2dBQUFBb0NBWUFBQUNNL3JodEFBQUFHWFJGV0hSVGIyWjBk
MkZ5WlFCQlpHOWlaU0JKCmJXRm5aVkpsWVdSNWNjbGxQQUFBQVJKSlJFRlVlTnJzMklFTmdqQVFC
ZERXT0FBak1JSWJ5QWlPVURkd0JEWmdCTmhBbklBNGdSM0IKRFhTRGVrMk1LVmpLYWVSNmFuOXlN
U1FRWG1pOUhBaVI4dU9SRkRjeHh1VHdvNUNuTjFMS00rbFRBR0JwOE5tNzF5NFlybXJHSGRqTApr
dWcrTGRUYU9TN1lQaEhZWS9YRUh1eWlMYkhGdmZCdnBnVUdjRG82TUlEYlFoMmlBa000YU1oTjFD
VitFM2NsYVRPQXE1QzQxdE9TClNQWmQ1V2toU25ES29PZnh3am5JSGRRbURZNHBmeGU3OGUza0Fi
WGlpRk5PKzdpd1FnNXdEeVQxQzA1M3J4cUJleG95NXdZT1UwemcKVGxCWlZDQWIzQWl3Wm9NYkFm
TEJJWUh4Y0FnZ09VNzZnSUh6dFRPU0gyRXlMcmtCK3hkRDVnYXkvemJ6bFIrUDdNdDBqcmhXcDVr
dQo1UU81Q1RBQWtBVVROQ1Vmd2NjQUFBQUFTVVZPUks1Q1lJST0KCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L3F0L3BsYXRmb3JtcGx1Z2luL21lZWdvL2ltYWdlcy9idXR0b25fcGF1c2UucG5nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KQ2Fubm90IGRpc3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5cGUuCnN2bjpt
aW1lLXR5cGUgPSBpbWFnZS9wbmcKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJLaXQv
cXQvcGxhdGZvcm1wbHVnaW4vbWVlZ28vaW1hZ2VzL2J1dHRvbl9wYXVzZS5wbmcKX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
XwpBZGRlZDogc3ZuOm1pbWUtdHlwZQogICArIGltYWdlL3BuZwoKCmlWQk9SdzBLR2dvQUFBQU5T
VWhFVWdBQUFDZ0FBQUFvQ0FZQUFBQ00vcmh0QUFBQUdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpT
QkoKYldGblpWSmxZV1I1Y2NsbFBBQUFBSUpKUkVGVWVOcnNtRUVOZ0RBTVJWc1VUTUlrSUdFU2NJ
WWxKRXdDRHBpRE1nSFFMdUV3RHU4bAp5dzdOYjkrMUZRRUFBQmN6Mjh5bk9OblUzK1ZrOTJqK011
QzRCdlVTWk5PSDNrT0NVMEVRUVFRUlJCQkJCQkZFRUVFRUVmeTdZQXZxCjFhbWRRVDdxTFRxNEc3
K3RqMDFWYTVETi9jdVB3MVVQTGc4QU1KbGJnQUVBT0RKVGE5REU0bmNBQUFBQVNVVk9SSzVDWUlJ
PQoKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvcGxhdGZvcm1wbHVnaW4vbWVlZ28vaW1hZ2VzL2J1
dHRvbl9wbGF5LnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBh
IGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0gaW1hZ2UvcG5nCgpQcm9wZXJ0eSBjaGFuZ2Vz
IG9uOiBTb3VyY2UvV2ViS2l0L3F0L3BsYXRmb3JtcGx1Z2luL21lZWdvL2ltYWdlcy9idXR0b25f
cGxheS5wbmcKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOm1pbWUtdHlwZQogICArIGltYWdlL3BuZwoK
CmlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFDZ0FBQUFvQ0FZQUFBQ00vcmh0QUFBQUdYUkZXSFJU
YjJaMGQyRnlaUUJCWkc5aVpTQkoKYldGblpWSmxZV1I1Y2NsbFBBQUFBUFpKUkVGVWVOcnNsOUVO
d2lBUWhrdlRBUmpCRVJ6QkVSeEJOOUFON0FTNlFic0JibEEzcUJ2WQpEZXdHZUpkdzZwdEFCZTdo
dnVRZW1oVDZGZjVTcUNwQkVBVGhKOVphRFhXQzJuRVYzTmdQSTE1ekZpUU0xSXF6SVBKMFU2KzVD
aEtQCm92bjBFQ1NHSXZrTUVDUzZyUG1NRUh6bms3UGdkejYzc2MrdU03d2ZUclZ4K1Z4ekZDVHc0
eGxkUGpWSFFRS1hJKzlscVM2MGN1RUkKZHB3Rlo2aWp6NDFOQWJrZXFsVktUZHdFN3pocUlIWUxh
ZFRrbWs0UTYyTWFweFpzb1M0Z044ZDJrRXJ3NmtadFd0clJ2d1ZSYUIrYQpzeHovWXR3WUhManVC
ODljZDlRRDF6UEpvdTFUeW5PeEtab3pRUkNFTkx3RUdBQkUrLys4S3A3ZmRRQUFBQUJKUlU1RXJr
SmdnZz09Cgo=
</data>
<flag name="review"
          id="88810"
          type_id="1"
          status="-"
          setter="menard"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>95359</attachid>
            <date>2011-05-30 11:56:24 -0700</date>
            <delta_ts>2011-06-01 03:36:26 -0700</delta_ts>
            <desc>patch</desc>
            <filename>58436.patch</filename>
            <type>text/plain</type>
            <size>67083</size>
            <attacher name="Mahesh Kulkarni">maheshk</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lvbiA4NzY5NCkKKysrIFNvdXJjZS9XZWJLaXQvcXQv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTEyIEBACisyMDExLTA1LTMwICBN
YWhlc2ggS3Vsa2FybmkgIDxtYWhlc2gua3Vsa2FybmlAbm9raWEuY29tPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtRdF0gVXBzdHJlYW0gTWVlZ28v
TWFlbW8gcGxhdGZvcm0gcGx1Z2luCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD01ODQzNgorCisgICAgICAgIFVwc3RyZWFtIHBsYXRmb3JtIHBsdWdpbiBv
ZiBtZWVnbyBwbGF0Zm9ybS4KKworICAgICAgICAqIHBsYXRmb3JtcGx1Z2luOiBBZGRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybXBsdWdpbi9tZWVnbzogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm1w
bHVnaW4vbWVlZ28vUkVBRE1FOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybXBsdWdpbi9tZWVn
by9kZWJpYW46IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtcGx1Z2luL21lZWdvL2RlYmlhbi9j
aGFuZ2Vsb2c6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtcGx1Z2luL21lZWdvL2RlYmlhbi9j
b21wYXQ6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtcGx1Z2luL21lZWdvL2RlYmlhbi9jb250
cm9sOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybXBsdWdpbi9tZWVnby9kZWJpYW4vbGlicXR3
ZWJraXQtbWVlZ290b3VjaHBsdWdpbi5pbnN0YWxsOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bXBsdWdpbi9tZWVnby9odG1sNXZpZGVvd2lkZ2V0LmNwcDogQWRkZWQuCisgICAgICAgIChIVE1M
NVZpZGVvV2lkZ2V0OjpIVE1MNVZpZGVvV2lkZ2V0KToKKyAgICAgICAgKEhUTUw1VmlkZW9XaWRn
ZXQ6OnNldER1cmF0aW9uKToKKyAgICAgICAgKEhUTUw1VmlkZW9XaWRnZXQ6Om1vdXNlUHJlc3NF
dmVudCk6CisgICAgICAgIChIVE1MNVZpZGVvV2lkZ2V0OjpvblBsYXllclN0b3BwZWQpOgorICAg
ICAgICAoSFRNTDVWaWRlb1dpZGdldDo6b25QbGF5ZXJFcnJvcik6CisgICAgICAgIChIVE1MNVZp
ZGVvV2lkZ2V0OjpvbkNvbnRyb2xDbGlja2VkKToKKyAgICAgICAgKEhUTUw1VmlkZW9XaWRnZXQ6
Om9uUG9zaXRpb25DaGFuZ2VkKToKKyAgICAgICAgKEhUTUw1VmlkZW9XaWRnZXQ6Om9uU2xpZGVy
TW92ZWQpOgorICAgICAgICAoSFRNTDVWaWRlb1dpZGdldDo6b25DbG9zZUNsaWNrZWQpOgorICAg
ICAgICAoSFRNTDVWaWRlb1dpZGdldDo6c2hvd0Z1bGxTY3JlZW4pOgorICAgICAgICAqIHBsYXRm
b3JtcGx1Z2luL21lZWdvL2h0bWw1dmlkZW93aWRnZXQuaDogQWRkZWQuCisgICAgICAgICogcGxh
dGZvcm1wbHVnaW4vbWVlZ28vaW1hZ2VzOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybXBsdWdp
bi9tZWVnby9pbWFnZXMvYnV0dG9uX2Nhbm5vdHBsYXkucG5nOiBBZGRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybXBsdWdpbi9tZWVnby9pbWFnZXMvYnV0dG9uX2Nsb3NlLnBuZzogQWRkZWQuCisgICAg
ICAgICogcGxhdGZvcm1wbHVnaW4vbWVlZ28vaW1hZ2VzL2J1dHRvbl9wYXVzZS5wbmc6IEFkZGVk
LgorICAgICAgICAqIHBsYXRmb3JtcGx1Z2luL21lZWdvL2ltYWdlcy9idXR0b25fcGxheS5wbmc6
IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtcGx1Z2luL21lZWdvL21lZWdvdG91Y2hwbGF0Zm9y
bXBsdWdpbi5jcHA6IEFkZGVkLgorICAgICAgICAoTWVlZ29Ub3VjaFBsYXRmb3JtUGx1Z2luOjpz
dXBwb3J0c0V4dGVuc2lvbik6CisgICAgICAgIChNZWVnb1RvdWNoUGxhdGZvcm1QbHVnaW46OmNy
ZWF0ZUV4dGVuc2lvbik6CisgICAgICAgIChNZWVnb1RvdWNoUGxhdGZvcm1QbHVnaW46OmNyZWF0
ZVNlbGVjdElucHV0TWV0aG9kKToKKyAgICAgICAgKE1lZWdvVG91Y2hQbGF0Zm9ybVBsdWdpbjo6
Y3JlYXRlTm90aWZpY2F0aW9uUHJlc2VudGVyKToKKyAgICAgICAgKE1lZWdvVG91Y2hQbGF0Zm9y
bVBsdWdpbjo6Y3JlYXRlSGFwdGljRmVlZGJhY2tQbGF5ZXIpOgorICAgICAgICAoTWVlZ29Ub3Vj
aFBsYXRmb3JtUGx1Z2luOjpjcmVhdGVGdWxsc2NyZWVuVmlkZW9IYW5kbGVyKToKKyAgICAgICAg
KiBwbGF0Zm9ybXBsdWdpbi9tZWVnby9tZWVnb3RvdWNocGxhdGZvcm1wbHVnaW4uaDogQWRkZWQu
CisgICAgICAgICogcGxhdGZvcm1wbHVnaW4vbWVlZ28vb3ZlcmxheXdpZGdldC5jcHA6IEFkZGVk
LgorICAgICAgICAoT3ZlcmxheVdpZGdldDo6T3ZlcmxheVdpZGdldCk6CisgICAgICAgIChPdmVy
bGF5V2lkZ2V0Ojp+T3ZlcmxheVdpZGdldCk6CisgICAgICAgIChPdmVybGF5V2lkZ2V0OjpoaWRl
Q29udHJvbHMpOgorICAgICAgICAoT3ZlcmxheVdpZGdldDo6c2V0RHVyYXRpb24pOgorICAgICAg
ICAoT3ZlcmxheVdpZGdldDo6c2V0UG9zaXRpb24pOgorICAgICAgICAoT3ZlcmxheVdpZGdldDo6
bW91c2VQcmVzc0V2ZW50KToKKyAgICAgICAgKE92ZXJsYXlXaWRnZXQ6Om9uUGxheWVyU3RvcHBl
ZCk6CisgICAgICAgIChPdmVybGF5V2lkZ2V0OjpvblBsYXllckVycm9yKToKKyAgICAgICAgKE92
ZXJsYXlXaWRnZXQ6OnRpbWVUb1N0cmluZyk6CisgICAgICAgIChPdmVybGF5V2lkZ2V0OjpvbkNv
bnRyb2xDbGlja2VkKToKKyAgICAgICAgKE92ZXJsYXlXaWRnZXQ6Om9uU2xpZGVyTW92ZWQpOgor
ICAgICAgICAoT3ZlcmxheVdpZGdldDo6b25DbG9zZUNsaWNrZWQpOgorICAgICAgICAoT3Zlcmxh
eVdpZGdldDo6b25UaW1lclRpbWVvdXQpOgorICAgICAgICAoT3ZlcmxheVdpZGdldDo6c2hvd0Z1
bGxTY3JlZW4pOgorICAgICAgICAqIHBsYXRmb3JtcGx1Z2luL21lZWdvL292ZXJsYXl3aWRnZXQu
aDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm1wbHVnaW4vbWVlZ28vcGxheWVyYnV0dG9uLmNw
cDogQWRkZWQuCisgICAgICAgIChQbGF5ZXJCdXR0b246OlBsYXllckJ1dHRvbik6CisgICAgICAg
IChQbGF5ZXJCdXR0b246OmV2ZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybXBsdWdpbi9tZWVnby9w
bGF5ZXJidXR0b24uaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm1wbHVnaW4vbWVlZ28vcXR3
ZWJraXQtbWVlZ290b3VjaHBsdWdpbi5wcm86IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtcGx1
Z2luL21lZWdvL3F3ZWJraXRwbGF0Zm9ybXBsdWdpbi5oOiBBZGRlZC4KKyAgICAgICAgKFFXZWJT
ZWxlY3REYXRhOjp+UVdlYlNlbGVjdERhdGEpOgorICAgICAgICAoUVdlYlNlbGVjdE1ldGhvZDo6
flFXZWJTZWxlY3RNZXRob2QpOgorICAgICAgICAoUVdlYk5vdGlmaWNhdGlvbkRhdGE6On5RV2Vi
Tm90aWZpY2F0aW9uRGF0YSk6CisgICAgICAgIChRV2ViTm90aWZpY2F0aW9uUHJlc2VudGVyOjpR
V2ViTm90aWZpY2F0aW9uUHJlc2VudGVyKToKKyAgICAgICAgKFFXZWJOb3RpZmljYXRpb25QcmVz
ZW50ZXI6On5RV2ViTm90aWZpY2F0aW9uUHJlc2VudGVyKToKKyAgICAgICAgKFFXZWJUb3VjaE1v
ZGlmaWVyOjp+UVdlYlRvdWNoTW9kaWZpZXIpOgorICAgICAgICAoUVdlYkZ1bGxTY3JlZW5WaWRl
b0hhbmRsZXI6OlFXZWJGdWxsU2NyZWVuVmlkZW9IYW5kbGVyKToKKyAgICAgICAgKFFXZWJGdWxs
U2NyZWVuVmlkZW9IYW5kbGVyOjp+UVdlYkZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIpOgorICAgICAg
ICAoUVdlYktpdFBsYXRmb3JtUGx1Z2luOjp+UVdlYktpdFBsYXRmb3JtUGx1Z2luKToKKyAgICAg
ICAgKiBwbGF0Zm9ybXBsdWdpbi9tZWVnby9yZXNvdXJjZS5xcmM6IEFkZGVkLgorICAgICAgICAq
IHBsYXRmb3JtcGx1Z2luL21lZWdvL3NlbGVjdGNvbnRyb2xsZXIuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFNlbGVjdENvbnRyb2xsZXI6On5TZWxlY3RDb250cm9sbGVyKToKKyAgICAgICAgKFNlbGVj
dENvbnRyb2xsZXI6OnNob3cpOgorICAgICAgICAoU2VsZWN0Q29udHJvbGxlcjo6aGlkZSk6Cisg
ICAgICAgIChTZWxlY3RDb250cm9sbGVyOjpkaWFsb2dDbG9zZWQpOgorICAgICAgICAqIHBsYXRm
b3JtcGx1Z2luL21lZWdvL3NlbGVjdGNvbnRyb2xsZXIuaDogQWRkZWQuCisgICAgICAgIChTZWxl
Y3RDb250cm9sbGVyOjpTZWxlY3RDb250cm9sbGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybXBsdWdp
bi9tZWVnby9zZWxlY3RkaWFsb2cuY3BwOiBBZGRlZC4KKyAgICAgICAgKENvbnRlbnRJdGVtQ3Jl
YXRvcjo6Q29udGVudEl0ZW1DcmVhdG9yKToKKyAgICAgICAgKENvbnRlbnRJdGVtQ3JlYXRvcjo6
Y3JlYXRlQ2VsbCk6CisgICAgICAgIChDb250ZW50SXRlbUNyZWF0b3I6OnVwZGF0ZUNlbGwpOgor
ICAgICAgICAoU2VsZWN0RGlhbG9nOjpTZWxlY3REaWFsb2cpOgorICAgICAgICAoU2VsZWN0RGlh
bG9nOjp+U2VsZWN0RGlhbG9nKToKKyAgICAgICAgKFNlbGVjdERpYWxvZzo6cG9wdWxhdGVMaXN0
KToKKyAgICAgICAgKFNlbGVjdERpYWxvZzo6bW9kaWZ5SXRlbVN0YXRlKToKKyAgICAgICAgKiBw
bGF0Zm9ybXBsdWdpbi9tZWVnby9zZWxlY3RkaWFsb2cuaDogQWRkZWQuCisgICAgICAgICogcGxh
dGZvcm1wbHVnaW4vbWVlZ28vd2ViZnVsbHNjcmVlbnZpZGVvaGFuZGxlci5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViRnVsbFNjcmVlblZpZGVvSGFuZGxlcjo6V2ViRnVsbFNjcmVlblZpZGVvSGFu
ZGxlcik6CisgICAgICAgIChXZWJGdWxsU2NyZWVuVmlkZW9IYW5kbGVyOjplbnRlckZ1bGxTY3Jl
ZW4pOgorICAgICAgICAoV2ViRnVsbFNjcmVlblZpZGVvSGFuZGxlcjo6ZXhpdEZ1bGxTY3JlZW4p
OgorICAgICAgICAoV2ViRnVsbFNjcmVlblZpZGVvSGFuZGxlcjo6b25QbGF5ZXJFcnJvcik6Cisg
ICAgICAgIChXZWJGdWxsU2NyZWVuVmlkZW9IYW5kbGVyOjpvblBsYXllclN0YXRlQ2hhbmdlZCk6
CisgICAgICAgICogcGxhdGZvcm1wbHVnaW4vbWVlZ28vd2ViZnVsbHNjcmVlbnZpZGVvaGFuZGxl
ci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkZ1bGxTY3JlZW5WaWRlb0hhbmRsZXI6On5XZWJGdWxs
U2NyZWVuVmlkZW9IYW5kbGVyKToKKyAgICAgICAgKFdlYkZ1bGxTY3JlZW5WaWRlb0hhbmRsZXI6
OnJlcXVpcmVzRnVsbFNjcmVlbkZvclZpZGVvUGxheWJhY2spOgorICAgICAgICAoV2ViRnVsbFNj
cmVlblZpZGVvSGFuZGxlcjo6dXBkYXRlU2NyZWVuUmVjdCk6CisgICAgICAgICogcGxhdGZvcm1w
bHVnaW4vbWVlZ28vd2ViaGFwdGljZmVlZGJhY2twbGF5ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkhhcHRpY0ZlZWRiYWNrUGxheWVyOjpwbGF5SGFwdGljRmVlZGJhY2spOgorICAgICAgICAq
IHBsYXRmb3JtcGx1Z2luL21lZWdvL3dlYmhhcHRpY2ZlZWRiYWNrcGxheWVyLmg6IEFkZGVkLgor
ICAgICAgICAqIHBsYXRmb3JtcGx1Z2luL21lZWdvL3dlYm5vdGlmaWNhdGlvbnByZXNlbnRlci5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViTm90aWZpY2F0aW9uUHJlc2VudGVyOjpXZWJOb3RpZmlj
YXRpb25QcmVzZW50ZXIpOgorICAgICAgICAoV2ViTm90aWZpY2F0aW9uUHJlc2VudGVyOjpzaG93
Tm90aWZpY2F0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybXBsdWdpbi9tZWVnby93ZWJub3RpZmlj
YXRpb25wcmVzZW50ZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJOb3RpZmljYXRpb25QcmVzZW50
ZXI6On5XZWJOb3RpZmljYXRpb25QcmVzZW50ZXIpOgorCiAyMDExLTA1LTMwICBOb2FtIFJvc2Vu
dGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBL
ZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbi4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvcGxhdGZv
cm1wbHVnaW4vbWVlZ28vUkVBRE1FCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvcGxh
dGZvcm1wbHVnaW4vbWVlZ28vUkVBRE1FCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9x
dC9wbGF0Zm9ybXBsdWdpbi9tZWVnby9SRUFETUUJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjEg
QEAKK1RoaXMgc291cmNlIHRyZWUgY29udGFpbnMgdGhlIFF0V2ViS2l0IHBsYXRmb3JtIHBsdWdp
biBmb3IgTWVlZ28gVG91Y2ggRnJhbWV3b3JrCisKK1ByZXJlcXVpc2l0ZXMKKz09PT09PT09PT09
PT0KKyogTWVlZ28gVG91Y2ggCisgICBzdWRvIGFwdC1nZXQgaW5zdGFsbCB4MTFwcm90by1kYW1h
Z2UtZGV2IGxpYnhkYW1hZ2UtZGV2IGxpYmdzdHJlYW1lci1wbHVnaW5zLWJhc2UwLjEwLWRldiBs
aWJnY29uZjItZGV2CisgICBnaXQgY2xvbmUgZ2l0Oi8vZ2l0b3Jpb3VzLm9yZy9tYWVtby02LXVp
LWZyYW1ld29yay9saWJkdWkuZ2l0CisgICBjZCA8Y2xvbmUtZGlyZWN0b3J5PgorICAgZHBrZy1i
dWlsZHBhY2thZ2UgLXJmYWtlcm9vdAorCisgICAoY2hlY2sgZnVydGhlciBpbnN0cnVjdGlvbnMg
ZnJvbSBSRUFETUUgb2YgTWVlZ29Ub3VjaCkKKworKiBRdFdlYmtpdCAyLjEKKyAgICBDb21waWxl
IFF0V2ViS2l0Mi4xIHdpdGggZm9sbG93aW5nIERFRklORVMgZW5hYmxlZCBFTkFCTEVfTk9fTElT
VEJPWF9SRU5ERVJJTkcgYW5kIEVOQUJMRV9OT1RJRklDQVRJT05TCisKKyMgUXRNb2JpbGl0eSAx
LjEKKyAgIFJlcXVpcmVzIGxpYnF0bS1zeXN0ZW1pbmZvLWRldiwgbGlicXRtLW11bHRpbWVkaWEt
ZGV2CisKK0J1aWxkaW5nIFF0V2ViS2l0IHBsYXRmb3JtIHBsdWdpbiBmb3IgTWVlZ28gVG91Y2gg
RnJhbWV3b3JrCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQorZHBrZy1idWlsZHBhY2thZ2UgLXJmYWtlcm9vdApJbmRleDogU291cmNl
L1dlYktpdC9xdC9wbGF0Zm9ybXBsdWdpbi9tZWVnby9odG1sNXZpZGVvd2lkZ2V0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L3BsYXRmb3JtcGx1Z2luL21lZWdvL2h0bWw1dmlk
ZW93aWRnZXQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9xdC9wbGF0Zm9ybXBs
dWdpbi9tZWVnby9odG1sNXZpZGVvd2lkZ2V0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3Ig
aXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJodG1sNXZpZGVvd2lkZ2V0LmgiCisK
K0hUTUw1VmlkZW9XaWRnZXQ6OkhUTUw1VmlkZW9XaWRnZXQoUVdpZGdldCAqcGFyZW50KQorICAg
IDogUVZpZGVvV2lkZ2V0KHBhcmVudCkKKyAgICAsIG1fb3ZlcmxheVdpZGdldChuZXcgT3Zlcmxh
eVdpZGdldCh0aGlzKSkKK3sKKyAgICBjb25uZWN0KG1fb3ZlcmxheVdpZGdldCwgU0lHTkFMKGNv
bnRyb2xDbGlja2VkKGJvb2wpKSwgdGhpcywgU0xPVChvbkNvbnRyb2xDbGlja2VkKGJvb2wpKSk7
CisgICAgY29ubmVjdChtX292ZXJsYXlXaWRnZXQsIFNJR05BTChzbGlkZXJNb3ZlZChpbnQpKSwg
dGhpcywgU0xPVChvblNsaWRlck1vdmVkKGludCkpKTsKKyAgICBjb25uZWN0KG1fb3ZlcmxheVdp
ZGdldCwgU0lHTkFMKGNsb3NlQ2xpY2tlZCgpKSwgdGhpcywgU0xPVChvbkNsb3NlQ2xpY2tlZCgp
KSk7CisgICAgbV9vdmVybGF5V2lkZ2V0LT5zZXRTaXplUG9saWN5KFFTaXplUG9saWN5OjpJZ25v
cmVkLCBRU2l6ZVBvbGljeTo6SWdub3JlZCk7Cit9CisKK3ZvaWQgSFRNTDVWaWRlb1dpZGdldDo6
c2V0RHVyYXRpb24ocWludDY0IGR1cmF0aW9uKQoreworICAgIG1fb3ZlcmxheVdpZGdldC0+c2V0
RHVyYXRpb24oZHVyYXRpb24gLyAxMDAwKTsKK30KKwordm9pZCBIVE1MNVZpZGVvV2lkZ2V0Ojpt
b3VzZVByZXNzRXZlbnQoUU1vdXNlRXZlbnQgKikKK3sKKyAgICBtX292ZXJsYXlXaWRnZXQtPnNo
b3dGdWxsU2NyZWVuKCk7Cit9CisKK3ZvaWQgSFRNTDVWaWRlb1dpZGdldDo6b25QbGF5ZXJTdG9w
cGVkKCkKK3sKKyAgICBtX292ZXJsYXlXaWRnZXQtPm9uUGxheWVyU3RvcHBlZCgpOworfQorCit2
b2lkIEhUTUw1VmlkZW9XaWRnZXQ6Om9uUGxheWVyRXJyb3IoKQoreworICAgIG1fb3ZlcmxheVdp
ZGdldC0+b25QbGF5ZXJFcnJvcigpOworfQorCit2b2lkIEhUTUw1VmlkZW9XaWRnZXQ6Om9uQ29u
dHJvbENsaWNrZWQoYm9vbCBpc1BhdXNlZCkKK3sKKyAgICBpZiAoaXNQYXVzZWQpCisgICAgICAg
IGVtaXQgcGF1c2VDbGlja2VkKCk7CisgICAgZWxzZQorICAgICAgICBlbWl0IHBsYXlDbGlja2Vk
KCk7Cit9CisKK3ZvaWQgSFRNTDVWaWRlb1dpZGdldDo6b25Qb3NpdGlvbkNoYW5nZWQocWludDY0
IHBvc2l0aW9uKQoreworICAgIG1fb3ZlcmxheVdpZGdldC0+c2V0UG9zaXRpb24ocG9zaXRpb24g
LyAxMDAwKTsKK30KKwordm9pZCBIVE1MNVZpZGVvV2lkZ2V0OjpvblNsaWRlck1vdmVkKGludCB2
YWx1ZSkKK3sKKyAgICBlbWl0IHBvc2l0aW9uQ2hhbmdlZEJ5VXNlcigoKHFpbnQ2NCl2YWx1ZSkg
KiAxMDAwKTsKK30KKwordm9pZCBIVE1MNVZpZGVvV2lkZ2V0OjpvbkNsb3NlQ2xpY2tlZCgpCit7
CisgICAgaGlkZSgpOworICAgIGVtaXQgY2xvc2VDbGlja2VkKCk7Cit9CisKK3ZvaWQgSFRNTDVW
aWRlb1dpZGdldDo6c2hvd0Z1bGxTY3JlZW4oKQoreworICAgIHNldEZ1bGxTY3JlZW4odHJ1ZSk7
CisgICAgbV9vdmVybGF5V2lkZ2V0LT5zaG93RnVsbFNjcmVlbigpOworfQpJbmRleDogU291cmNl
L1dlYktpdC9xdC9wbGF0Zm9ybXBsdWdpbi9tZWVnby9odG1sNXZpZGVvd2lkZ2V0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9wbGF0Zm9ybXBsdWdpbi9tZWVnby9odG1sNXZpZGVv
d2lkZ2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L3F0L3BsYXRmb3JtcGx1Z2lu
L21lZWdvL2h0bWw1dmlkZW93aWRnZXQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1OCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1
YnNpZGlhcnkoLWllcykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgaHRtbDV2aWRlb3dpZGdldF9oCisjZGVmaW5lIGh0
bWw1dmlkZW93aWRnZXRfaAorCisjaW5jbHVkZSAib3ZlcmxheXdpZGdldC5oIgorCisjaW5jbHVk
ZSA8UVZpZGVvV2lkZ2V0PgorCitjbGFzcyBIVE1MNVZpZGVvV2lkZ2V0IDogcHVibGljIFFWaWRl
b1dpZGdldCB7CisgICAgUV9PQkpFQ1QKK3B1YmxpYzoKKyAgICBIVE1MNVZpZGVvV2lkZ2V0KFFX
aWRnZXQqIHBhcmVudCA9IDApOworICAgIHZvaWQgbW91c2VQcmVzc0V2ZW50KFFNb3VzZUV2ZW50
Kik7CisgICAgdm9pZCBvblBsYXllclN0b3BwZWQoKTsKKyAgICB2b2lkIG9uUGxheWVyRXJyb3Io
KTsKKworcHJpdmF0ZSBzbG90czoKKyAgICB2b2lkIG9uQ29udHJvbENsaWNrZWQoYm9vbCk7Cisg
ICAgdm9pZCBvblBvc2l0aW9uQ2hhbmdlZChxaW50NjQpOworICAgIHZvaWQgb25TbGlkZXJNb3Zl
ZChpbnQpOworICAgIHZvaWQgb25DbG9zZUNsaWNrZWQoKTsKKworcHVibGljIHNsb3RzOgorICAg
IHZvaWQgc2hvd0Z1bGxTY3JlZW4oKTsKKyAgICB2b2lkIHNldER1cmF0aW9uKHFpbnQ2NCk7CisK
K3NpZ25hbHM6CisgICAgdm9pZCBwYXVzZUNsaWNrZWQoKTsKKyAgICB2b2lkIHBsYXlDbGlja2Vk
KCk7CisgICAgdm9pZCBwb3NpdGlvbkNoYW5nZWRCeVVzZXIocWludDY0KTsKKyAgICB2b2lkIGNs
b3NlQ2xpY2tlZCgpOworICAgIHZvaWQgbXV0ZWQoYm9vbCk7CisgICAgdm9pZCB2b2x1bWVDaGFu
Z2VkKGludCk7CisKK3ByaXZhdGU6CisgICAgT3ZlcmxheVdpZGdldCogbV9vdmVybGF5V2lkZ2V0
OworfTsKKworI2VuZGlmIC8qIGh0bWw1dmlkZW93aWRnZXRfaCAqLwpJbmRleDogU291cmNlL1dl
YktpdC9xdC9wbGF0Zm9ybXBsdWdpbi9tZWVnby9tZWVnb3RvdWNocGxhdGZvcm1wbHVnaW4uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvcGxhdGZvcm1wbHVnaW4vbWVlZ28vbWVl
Z290b3VjaHBsYXRmb3JtcGx1Z2luLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQv
cXQvcGxhdGZvcm1wbHVnaW4vbWVlZ28vbWVlZ290b3VjaHBsYXRmb3JtcGx1Z2luLmNwcAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tp
YSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJt
ZWVnb3RvdWNocGxhdGZvcm1wbHVnaW4uaCIKKworI2luY2x1ZGUgInNlbGVjdGNvbnRyb2xsZXIu
aCIKKyNpbmNsdWRlICJ3ZWJoYXB0aWNmZWVkYmFja3BsYXllci5oIgorI2luY2x1ZGUgIndlYm5v
dGlmaWNhdGlvbnByZXNlbnRlci5oIgorI2luY2x1ZGUgIndlYmZ1bGxzY3JlZW52aWRlb2hhbmRs
ZXIuaCIKKworI2luY2x1ZGUgPE1BcHBsaWNhdGlvbj4KKyNpbmNsdWRlIDxRdFBsdWdpbj4KKwor
Ym9vbCBNZWVnb1RvdWNoUGxhdGZvcm1QbHVnaW46OnN1cHBvcnRzRXh0ZW5zaW9uKEV4dGVuc2lv
biBleHRlbnNpb24pIGNvbnN0Cit7CisgICAgc3dpdGNoIChleHRlbnNpb24pIHsKKyAgICBjYXNl
IE11bHRpcGxlU2VsZWN0aW9uczoKKyAgICBjYXNlIE5vdGlmaWNhdGlvbnM6CisgICAgY2FzZSBI
YXB0aWNzOgorICAgIGNhc2UgRnVsbFNjcmVlblZpZGVvUGxheWVyOgorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitR
T2JqZWN0KiBNZWVnb1RvdWNoUGxhdGZvcm1QbHVnaW46OmNyZWF0ZUV4dGVuc2lvbihFeHRlbnNp
b24gZXh0ZW5zaW9uKSBjb25zdAoreworICAgIHN3aXRjaCAoZXh0ZW5zaW9uKSB7CisgICAgY2Fz
ZSBNdWx0aXBsZVNlbGVjdGlvbnM6CisgICAgICAgIHJldHVybiBjcmVhdGVTZWxlY3RJbnB1dE1l
dGhvZCgpOworICAgIGNhc2UgTm90aWZpY2F0aW9uczoKKyAgICAgICAgcmV0dXJuIGNyZWF0ZU5v
dGlmaWNhdGlvblByZXNlbnRlcigpOworICAgIGNhc2UgSGFwdGljczoKKyAgICAgICAgcmV0dXJu
IGNyZWF0ZUhhcHRpY0ZlZWRiYWNrUGxheWVyKCk7CisjaWYgZGVmaW5lZChXVEZfVVNFX1FUX01V
TFRJTUVESUEpICYmIFdURl9VU0VfUVRfTVVMVElNRURJQQorICAgIGNhc2UgRnVsbFNjcmVlblZp
ZGVvUGxheWVyOgorICAgICAgICByZXR1cm4gY3JlYXRlRnVsbHNjcmVlblZpZGVvSGFuZGxlcigp
OworI2VuZGlmCisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCisK
K1FXZWJTZWxlY3RNZXRob2QqIE1lZWdvVG91Y2hQbGF0Zm9ybVBsdWdpbjo6Y3JlYXRlU2VsZWN0
SW5wdXRNZXRob2QoKSBjb25zdAoreworICAgIC8vIE9ubHkgdXNlIHRoZSBNRGlhbG9nIGZvciBN
QXBwbGljYXRpb25zLiBUaGVyZSBtdXN0IGJlIGFuIE1XaW5kb3cgYXZhaWxhYmxlIHRvCisgICAg
Ly8gc2hvdyBNRGlhbG9nLgorICAgIGlmIChxb2JqZWN0X2Nhc3Q8TUFwcGxpY2F0aW9uKj4oUUNv
cmVBcHBsaWNhdGlvbjo6aW5zdGFuY2UoKSkgJiYgTUFwcGxpY2F0aW9uOjphY3RpdmVXaW5kb3co
KSkKKyAgICAgICAgcmV0dXJuIG5ldyBTZWxlY3RDb250cm9sbGVyKCk7CisgICAgcmV0dXJuIDA7
Cit9CisKK1FXZWJOb3RpZmljYXRpb25QcmVzZW50ZXIqIE1lZWdvVG91Y2hQbGF0Zm9ybVBsdWdp
bjo6Y3JlYXRlTm90aWZpY2F0aW9uUHJlc2VudGVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbmV3
IFdlYk5vdGlmaWNhdGlvblByZXNlbnRlcigpOworfQorCitRV2ViSGFwdGljRmVlZGJhY2tQbGF5
ZXIqIE1lZWdvVG91Y2hQbGF0Zm9ybVBsdWdpbjo6Y3JlYXRlSGFwdGljRmVlZGJhY2tQbGF5ZXIo
KSBjb25zdAoreworICAgIHJldHVybiBuZXcgV2ViSGFwdGljRmVlZGJhY2tQbGF5ZXIoKTsKK30K
KworI2lmIGRlZmluZWQoV1RGX1VTRV9RVF9NVUxUSU1FRElBKSAmJiBXVEZfVVNFX1FUX01VTFRJ
TUVESUEKK1FXZWJGdWxsU2NyZWVuVmlkZW9IYW5kbGVyKiBNZWVnb1RvdWNoUGxhdGZvcm1QbHVn
aW46OmNyZWF0ZUZ1bGxzY3JlZW5WaWRlb0hhbmRsZXIoKSBjb25zdAoreworICAgIHJldHVybiBu
ZXcgV2ViRnVsbFNjcmVlblZpZGVvSGFuZGxlcigpOworfQorI2VuZGlmCisKK1FfRVhQT1JUX1BM
VUdJTjIocXdlYnNlbGVjdGltLCBNZWVnb1RvdWNoUGxhdGZvcm1QbHVnaW4pCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L3F0L3BsYXRmb3JtcGx1Z2luL21lZWdvL21lZWdvdG91Y2hwbGF0Zm9ybXBsdWdp
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvcGxhdGZvcm1wbHVnaW4vbWVlZ28v
bWVlZ290b3VjaHBsYXRmb3JtcGx1Z2luLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0
L3F0L3BsYXRmb3JtcGx1Z2luL21lZWdvL21lZWdvdG91Y2hwbGF0Zm9ybXBsdWdpbi5oCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lh
IENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKyNpZm5kZWYgbWVlZ290
b3VjaHBsYXRmb3JtcGx1Z2luX2gKKyNkZWZpbmUgbWVlZ290b3VjaHBsYXRmb3JtcGx1Z2luX2gK
KworI2luY2x1ZGUgInF3ZWJraXRwbGF0Zm9ybXBsdWdpbi5oIgorCitjbGFzcyBNZWVnb1RvdWNo
UGxhdGZvcm1QbHVnaW4gOiBwdWJsaWMgUU9iamVjdCwgcHVibGljIFFXZWJLaXRQbGF0Zm9ybVBs
dWdpbiB7CisgICAgUV9PQkpFQ1QKKyAgICBRX0lOVEVSRkFDRVMoUVdlYktpdFBsYXRmb3JtUGx1
Z2luKQorCitwdWJsaWM6CisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRXh0ZW5zaW9uKEV4dGVu
c2lvbikgY29uc3Q7CisgICAgdmlydHVhbCBRT2JqZWN0KiBjcmVhdGVFeHRlbnNpb24oRXh0ZW5z
aW9uKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBRV2ViU2VsZWN0TWV0aG9kKiBjcmVhdGVTZWxl
Y3RJbnB1dE1ldGhvZCgpIGNvbnN0OworICAgIFFXZWJOb3RpZmljYXRpb25QcmVzZW50ZXIqIGNy
ZWF0ZU5vdGlmaWNhdGlvblByZXNlbnRlcigpIGNvbnN0OworICAgIFFXZWJIYXB0aWNGZWVkYmFj
a1BsYXllciogY3JlYXRlSGFwdGljRmVlZGJhY2tQbGF5ZXIoKSBjb25zdDsKKyAgICBRV2ViRnVs
bFNjcmVlblZpZGVvSGFuZGxlciogY3JlYXRlRnVsbHNjcmVlblZpZGVvSGFuZGxlcigpIGNvbnN0
OworfTsKKworI2VuZGlmIC8vIG1lZWdvdG91Y2hwbGF0Zm9ybXBsdWdpbl9oCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L3F0L3BsYXRmb3JtcGx1Z2luL21lZWdvL292ZXJsYXl3aWRnZXQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvcGxhdGZvcm1wbHVnaW4vbWVlZ28vb3ZlcmxheXdp
ZGdldC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L3F0L3BsYXRmb3JtcGx1Z2lu
L21lZWdvL292ZXJsYXl3aWRnZXQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE3OSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1
YnNpZGlhcnkoLWllcykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKgorICovCisjaW5jbHVkZSAib3ZlcmxheXdpZGdldC5oIgorCisjaW5jbHVkZSA8
UXRHdWk+CisjaW5jbHVkZSA8UVRpbWVyPgorCisjZGVmaW5lIExBQkVMX0NPTE9SICJ3aGl0ZSIK
KworT3ZlcmxheVdpZGdldDo6T3ZlcmxheVdpZGdldChRV2lkZ2V0KiBwYXJlbnQpCisgICAgOiBR
V2lkZ2V0KDAsIFF0OjpGcmFtZWxlc3NXaW5kb3dIaW50KQorICAgICwgbV9pc1BhdXNlZChmYWxz
ZSkKK3sKKyAgICBtX3BsYXlJY29uID0gUUljb24oIjovaW1hZ2VzL2J1dHRvbl9wbGF5LnBuZyIp
OworICAgIG1fcGF1c2VJY29uID0gUUljb24oIjovaW1hZ2VzL2J1dHRvbl9wYXVzZS5wbmciKTsK
KworICAgIG1fY29udHJvbEJ1dHRvbiA9IG5ldyBQbGF5ZXJCdXR0b24odGhpcyk7CisgICAgbV9j
b250cm9sQnV0dG9uLT5zZXRJY29uKG1fcGF1c2VJY29uKTsKKyAgICBjb25uZWN0KG1fY29udHJv
bEJ1dHRvbiwgU0lHTkFMKGNsaWNrZWQoKSksIHRoaXMsIFNMT1Qob25Db250cm9sQ2xpY2tlZCgp
KSk7CisKKyAgICBtX3NsaWRlciA9IG5ldyBRU2xpZGVyKFF0OjpIb3Jpem9udGFsLCB0aGlzKTsK
KyAgICBtX3NsaWRlci0+c2V0VHJhY2tpbmcoZmFsc2UpOworICAgIG1fc2xpZGVyLT5zZXRUaWNr
UG9zaXRpb24oUVNsaWRlcjo6Tm9UaWNrcyk7CisgICAgY29ubmVjdChtX3NsaWRlciwgU0lHTkFM
KHNsaWRlck1vdmVkKGludCkpLCB0aGlzLCBTTE9UKG9uU2xpZGVyTW92ZWQoaW50KSkpOworCisg
ICAgbV9wb3NpdGlvbkxhYmVsID0gbmV3IFFMYWJlbCh0aGlzKTsKKyAgICBtX3Bvc2l0aW9uTGFi
ZWwtPnNldFRleHQodGltZVRvU3RyaW5nKDApKTsKKyAgICBtX2R1cmF0aW9uTGFiZWwgPSBuZXcg
UUxhYmVsKHRoaXMpOworICAgIG1fZHVyYXRpb25MYWJlbC0+c2V0VGV4dCh0aW1lVG9TdHJpbmco
MCkpOworCisgICAgbV9jbG9zZUJ1dHRvbiA9IG5ldyBQbGF5ZXJCdXR0b24odGhpcyk7CisgICAg
bV9jbG9zZUJ1dHRvbi0+c2V0SWNvbihRSWNvbigiOi9pbWFnZXMvYnV0dG9uX2Nsb3NlLnBuZyIp
KTsKKyAgICBjb25uZWN0KG1fY2xvc2VCdXR0b24sIFNJR05BTChjbGlja2VkKCkpLCB0aGlzLCBT
TE9UKG9uQ2xvc2VDbGlja2VkKCkpKTsKKworICAgIG1fbGFiZWwgPSBuZXcgUUxhYmVsKHRoaXMp
OworICAgIG1fbGFiZWwtPnNldFBpeG1hcChRUGl4bWFwKCI6L2ltYWdlcy9idXR0b25fY2Fubm90
cGxheS5wbmciKS5zY2FsZWQoUVNpemUoODAsIDgwKSkpOworICAgIG1fbGFiZWwtPmhpZGUoKTsK
KworICAgIFFQYWxldHRlIHBhbDsKKyAgICAvLyBTZW1pLXRyYW5zcGFyZW50IGJhY2tncm91bmQg
Y29sb3IgZm9yIHRvb2xiYXIuIEp1c3QgODAlIG9wYXF1ZQorICAgIHBhbC5zZXRDb2xvcihRUGFs
ZXR0ZTo6QnV0dG9uLCBRQ29sb3IoMCwgMCwgMCwgMTYwKSk7CisgICAgCisgICAgbV90b29sQmFy
ID0gbmV3IFFUb29sQmFyKCk7CisgICAgbV90b29sQmFyLT5zZXRBdXRvRmlsbEJhY2tncm91bmQo
dHJ1ZSk7CisgICAgbV90b29sQmFyLT5zZXRQYWxldHRlKHBhbCk7CisgICAgbV90b29sQmFyLT5h
ZGRXaWRnZXQobV9jb250cm9sQnV0dG9uKTsKKyAgICBtX3Rvb2xCYXItPmFkZFdpZGdldChtX3Bv
c2l0aW9uTGFiZWwpOworICAgIG1fdG9vbEJhci0+YWRkV2lkZ2V0KG1fc2xpZGVyKTsKKyAgICBt
X3Rvb2xCYXItPmFkZFdpZGdldChtX2R1cmF0aW9uTGFiZWwpOworICAgIG1fdG9vbEJhci0+YWRk
V2lkZ2V0KG1fY2xvc2VCdXR0b24pOworICAgIFFCb3hMYXlvdXQqIGNvbnRyb2xMYXlvdXQgPSBu
ZXcgUUhCb3hMYXlvdXQ7CisgICAgY29udHJvbExheW91dC0+YWRkV2lkZ2V0KG1fdG9vbEJhcik7
CisKKyAgICBRR3JpZExheW91dCogbGF5b3V0ID0gbmV3IFFHcmlkTGF5b3V0OworICAgIGxheW91
dC0+YWRkV2lkZ2V0KG1fbGFiZWwsIDEsIDAsIFF0OjpBbGlnbkNlbnRlcik7CisgICAgbGF5b3V0
LT5hZGRMYXlvdXQoY29udHJvbExheW91dCwgMiwgMCwgUXQ6OkFsaWduQm90dG9tKTsKKyAgICBz
ZXRMYXlvdXQobGF5b3V0KTsKKworICAgIG1fdGltZXIgPSBuZXcgUVRpbWVyKHRoaXMpOworICAg
IG1fdGltZXItPnNldFNpbmdsZVNob3QodHJ1ZSk7CisgICAgbV90aW1lci0+c2V0SW50ZXJ2YWwo
MzAwMCk7CisgICAgY29ubmVjdChtX3RpbWVyLCBTSUdOQUwodGltZW91dCgpKSwgdGhpcywgU0xP
VChvblRpbWVyVGltZW91dCgpKSk7CisgICAgY29ubmVjdChtX3NsaWRlciwgU0lHTkFMKHNsaWRl
clByZXNzZWQoKSksIG1fdGltZXIsIFNMT1Qoc3RvcCgpKSk7CisgICAgY29ubmVjdChtX3NsaWRl
ciwgU0lHTkFMKHNsaWRlclJlbGVhc2VkKCkpLCBtX3RpbWVyLCBTTE9UKHN0YXJ0KCkpKTsKKwor
ICAgIHNldEF0dHJpYnV0ZShRdDo6V0FfVHJhbnNsdWNlbnRCYWNrZ3JvdW5kKTsKK30KKworT3Zl
cmxheVdpZGdldDo6fk92ZXJsYXlXaWRnZXQoKQoreworICAgIGRlbGV0ZSBtX3Rvb2xCYXI7Cit9
CisKK3ZvaWQgT3ZlcmxheVdpZGdldDo6aGlkZUNvbnRyb2xzKGJvb2wgaGlkZSkKK3sKKyAgICBp
ZiAoaGlkZSkKKyAgICAgICAgbV90b29sQmFyLT5oaWRlKCk7CisgICAgZWxzZQorICAgICAgICBt
X3Rvb2xCYXItPnNob3coKTsKK30KKwordm9pZCBPdmVybGF5V2lkZ2V0OjpzZXREdXJhdGlvbihp
bnQgZHVyYXRpb24pCit7CisgICAgbV9zbGlkZXItPnNldE1heGltdW0oZHVyYXRpb24pOworICAg
IG1fZHVyYXRpb25MYWJlbC0+c2V0VGV4dCh0aW1lVG9TdHJpbmcoZHVyYXRpb24pKTsKK30KKwor
dm9pZCBPdmVybGF5V2lkZ2V0OjpzZXRQb3NpdGlvbihpbnQgcG9zaXRpb24pCit7CisgICAgaWYg
KCFtX3NsaWRlci0+aXNTbGlkZXJEb3duKCkpIHsKKyAgICAgICAgbV9zbGlkZXItPnNldFZhbHVl
KHBvc2l0aW9uKTsKKyAgICAgICAgbV9wb3NpdGlvbkxhYmVsLT5zZXRUZXh0KHRpbWVUb1N0cmlu
Zyhwb3NpdGlvbikpOworICAgIH0KK30KKwordm9pZCBPdmVybGF5V2lkZ2V0Ojptb3VzZVByZXNz
RXZlbnQoUU1vdXNlRXZlbnQgKikKK3sKKyAgICBpZiAoIW1faXNQYXVzZWQpIHsKKyAgICAgICAg
aGlkZUNvbnRyb2xzKG1fY29udHJvbEJ1dHRvbi0+aXNWaXNpYmxlKCkpOworICAgICAgICBtX3Rp
bWVyLT5zdGFydCgpOworICAgIH0KK30KKwordm9pZCBPdmVybGF5V2lkZ2V0OjpvblBsYXllclN0
b3BwZWQoKQoreworICAgIGhpZGVDb250cm9scyhmYWxzZSk7CisgICAgbV90aW1lci0+c3RvcCgp
OworICAgIG1fY29udHJvbEJ1dHRvbi0+c2V0SWNvbihtX3BsYXlJY29uKTsKK30KKwordm9pZCBP
dmVybGF5V2lkZ2V0OjpvblBsYXllckVycm9yKCkKK3sKKyAgICBtX2NvbnRyb2xCdXR0b24tPnNl
dERpc2FibGVkKHRydWUpOworICAgIG1fc2xpZGVyLT5zZXREaXNhYmxlZCh0cnVlKTsKKyAgICBt
X2xhYmVsLT5zaG93KCk7CisgICAgc2hvd0Z1bGxTY3JlZW4oKTsKK30KKworUVN0cmluZyBPdmVy
bGF5V2lkZ2V0Ojp0aW1lVG9TdHJpbmcoaW50IHNlY29uZHMpCit7CisgICAgUVRpbWUgaW5pdFRp
bWUoMCwgMCwgMCk7CisgICAgUVRpbWUgdGltZSA9IGluaXRUaW1lLmFkZFNlY3Moc2Vjb25kcyk7
CisgICAgUVN0cmluZyB0ZXh0VGVtcGxhdGUoIjxmb250IGNvbG9yPSclMSc+JTI8L2ZvbnQ+Iik7
CisgICAgcmV0dXJuIHRleHRUZW1wbGF0ZS5hcmcoTEFCRUxfQ09MT1IsIHRpbWUuaG91cigpID8g
dGltZS50b1N0cmluZygiaDptbTpzcyIpCisgICAgICAgIDogdGltZS50b1N0cmluZygibW06c3Mi
KSk7Cit9CisKK3ZvaWQgT3ZlcmxheVdpZGdldDo6b25Db250cm9sQ2xpY2tlZCgpCit7CisgICAg
bV9pc1BhdXNlZCA9ICFtX2lzUGF1c2VkOworICAgIGlmIChtX2lzUGF1c2VkKQorICAgICAgICBt
X2NvbnRyb2xCdXR0b24tPnNldEljb24obV9wbGF5SWNvbik7CisgICAgZWxzZQorICAgICAgICBt
X2NvbnRyb2xCdXR0b24tPnNldEljb24obV9wYXVzZUljb24pOworCisgICAgbV90aW1lci0+c3Rh
cnQoKTsKKyAgICBlbWl0IGNvbnRyb2xDbGlja2VkKG1faXNQYXVzZWQpOworfQorCit2b2lkIE92
ZXJsYXlXaWRnZXQ6Om9uU2xpZGVyTW92ZWQoaW50IHZhbHVlKQoreworICAgIGVtaXQgc2xpZGVy
TW92ZWQodmFsdWUpOworfQorCit2b2lkIE92ZXJsYXlXaWRnZXQ6Om9uQ2xvc2VDbGlja2VkKCkK
K3sKKyAgICBtX3RpbWVyLT5zdG9wKCk7CisgICAgaGlkZSgpOworICAgIGVtaXQgY2xvc2VDbGlj
a2VkKCk7Cit9CisKK3ZvaWQgT3ZlcmxheVdpZGdldDo6b25UaW1lclRpbWVvdXQoKQoreworICAg
IGlmICghbV9pc1BhdXNlZCkKKyAgICAgICAgaGlkZUNvbnRyb2xzKHRydWUpOworfQorCit2b2lk
IE92ZXJsYXlXaWRnZXQ6OnNob3dGdWxsU2NyZWVuKCkKK3sKKyAgICBtX3RpbWVyLT5zdGFydCgp
OworICAgIFFXaWRnZXQ6OnNob3dGdWxsU2NyZWVuKCk7Cit9CkluZGV4OiBTb3VyY2UvV2ViS2l0
L3F0L3BsYXRmb3JtcGx1Z2luL21lZWdvL292ZXJsYXl3aWRnZXQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L3F0L3BsYXRmb3JtcGx1Z2luL21lZWdvL292ZXJsYXl3aWRnZXQuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvcXQvcGxhdGZvcm1wbHVnaW4vbWVlZ28vb3Zlcmxh
eXdpZGdldC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8K
KworI2lmbmRlZiBvdmVybGF5d2lkZ2V0X2gKKyNkZWZpbmUgb3ZlcmxheXdpZGdldF9oCisKKyNp
bmNsdWRlICJwbGF5ZXJidXR0b24uaCIKKworY2xhc3MgUUxhYmVsOworY2xhc3MgUVNsaWRlcjsK
K2NsYXNzIFFUaW1lcjsKK2NsYXNzIFFUb29sQmFyOworY2xhc3MgUVdpZGdldDsKKworY2xhc3Mg
T3ZlcmxheVdpZGdldCA6IHB1YmxpYyBRV2lkZ2V0IHsKKyAgICBRX09CSkVDVAorcHVibGljOgor
ICAgIE92ZXJsYXlXaWRnZXQoUVdpZGdldCogcGFyZW50ID0gMCk7CisgICAgfk92ZXJsYXlXaWRn
ZXQoKTsKKyAgICB2b2lkIHNldER1cmF0aW9uKGludCk7CisgICAgdm9pZCBzZXRQb3NpdGlvbihp
bnQpOworICAgIHZvaWQgbW91c2VQcmVzc0V2ZW50KFFNb3VzZUV2ZW50Kik7CisgICAgdm9pZCBv
blBsYXllclN0b3BwZWQoKTsKKyAgICB2b2lkIG9uUGxheWVyRXJyb3IoKTsKKworcHJpdmF0ZToK
KyAgICBRU3RyaW5nIHRpbWVUb1N0cmluZyhpbnQpOworICAgIHZvaWQgaGlkZUNvbnRyb2xzKGJv
b2wpOworCitwcml2YXRlIHNsb3RzOgorICAgIHZvaWQgb25Db250cm9sQ2xpY2tlZCgpOworICAg
IHZvaWQgb25TbGlkZXJNb3ZlZChpbnQpOworICAgIHZvaWQgb25DbG9zZUNsaWNrZWQoKTsKKyAg
ICB2b2lkIG9uVm9sdW1lU2xpZGVyUmVsZWFzZWQoKTsKKyAgICB2b2lkIG9uVm9sdW1lU2xpZGVy
TW92ZWQoaW50KTsKKyAgICB2b2lkIG9uVGltZXJUaW1lb3V0KCk7CisKK3B1YmxpYyBzbG90czoK
KyAgICB2b2lkIHNob3dGdWxsU2NyZWVuKCk7CisKK3NpZ25hbHM6CisgICAgdm9pZCBjb250cm9s
Q2xpY2tlZChib29sKTsKKyAgICB2b2lkIHNsaWRlck1vdmVkKGludCk7CisgICAgdm9pZCBjbG9z
ZUNsaWNrZWQoKTsKKworcHJpdmF0ZToKKyAgICBQbGF5ZXJCdXR0b24qIG1fY29udHJvbEJ1dHRv
bjsKKyAgICBib29sIG1faXNQYXVzZWQ7CisgICAgUVNsaWRlciogbV9zbGlkZXI7CisgICAgUUxh
YmVsKiBtX3Bvc2l0aW9uTGFiZWw7CisgICAgUUxhYmVsKiBtX2R1cmF0aW9uTGFiZWw7CisgICAg
UGxheWVyQnV0dG9uKiBtX2Nsb3NlQnV0dG9uOworICAgIFFJY29uIG1fcGxheUljb247CisgICAg
UUljb24gbV9wYXVzZUljb247CisgICAgUVRpbWVyKiBtX3RpbWVyOworICAgIFFMYWJlbCogbV9s
YWJlbDsKKyAgICBRVG9vbEJhciogbV90b29sQmFyOworfTsKKworI2VuZGlmIC8qIG92ZXJsYXl3
aWRnZXRfaCAqLwpJbmRleDogU291cmNlL1dlYktpdC9xdC9wbGF0Zm9ybXBsdWdpbi9tZWVnby9w
bGF5ZXJidXR0b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvcGxhdGZvcm1w
bHVnaW4vbWVlZ28vcGxheWVyYnV0dG9uLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJL
aXQvcXQvcGxhdGZvcm1wbHVnaW4vbWVlZ28vcGxheWVyYnV0dG9uLmNwcAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3Jh
dGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJwbGF5ZXJidXR0
b24uaCIKKworI2luY2x1ZGUgPFFHZXN0dXJlPgorI2luY2x1ZGUgPFFHZXN0dXJlRXZlbnQ+CisK
K1BsYXllckJ1dHRvbjo6UGxheWVyQnV0dG9uKFFXaWRnZXQgKnBhcmVudCkKKyAgICA6IFFQdXNo
QnV0dG9uKHBhcmVudCkKK3sKKyAgICBncmFiR2VzdHVyZShRdDo6VGFwQW5kSG9sZEdlc3R1cmUp
OworICAgIHNldEZpeGVkU2l6ZSg1MCwgNTApOworICAgIHNldEljb25TaXplKFFTaXplKDUwLCA1
MCkpOworICAgIHNldFN0eWxlU2hlZXQoImJvcmRlcjogbm9uZSIpOworfQorCitib29sIFBsYXll
ckJ1dHRvbjo6ZXZlbnQoUUV2ZW50ICpldmVudCkKK3sKKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9
PSBRRXZlbnQ6Okdlc3R1cmUpIHsKKyAgICAgICAgUUdlc3R1cmVFdmVudCogZ2VzdHVyZUV2ZW50
ID0gKFFHZXN0dXJlRXZlbnQqKXN0YXRpY19jYXN0PFFHZXN0dXJlRXZlbnQqPihldmVudCk7Cisg
ICAgICAgIFFHZXN0dXJlKiBnZXN0dXJlID0gZ2VzdHVyZUV2ZW50LT5nZXN0dXJlKFF0OjpUYXBB
bmRIb2xkR2VzdHVyZSk7CisgICAgICAgIGlmIChnZXN0dXJlICYmIGdlc3R1cmUtPnN0YXRlKCkg
PT0gUXQ6Okdlc3R1cmVGaW5pc2hlZCkgeworICAgICAgICAgICAgZW1pdCB0YXBBbmRIb2xkKCk7
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4g
UVB1c2hCdXR0b246OmV2ZW50KGV2ZW50KTsKK30KSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvcGxh
dGZvcm1wbHVnaW4vbWVlZ28vcGxheWVyYnV0dG9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9xdC9wbGF0Zm9ybXBsdWdpbi9tZWVnby9wbGF5ZXJidXR0b24uaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9XZWJLaXQvcXQvcGxhdGZvcm1wbHVnaW4vbWVlZ28vcGxheWVyYnV0dG9uLmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
Tm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVm
IHBsYXllcmJ1dHRvbl9oCisjZGVmaW5lIHBsYXllcmJ1dHRvbl9oCisKKyNpbmNsdWRlIDxRUHVz
aEJ1dHRvbj4KKworY2xhc3MgUGxheWVyQnV0dG9uIDogcHVibGljIFFQdXNoQnV0dG9uIHsKKyAg
ICBRX09CSkVDVAorcHVibGljOgorICAgIFBsYXllckJ1dHRvbihRV2lkZ2V0KiBwYXJlbnQgPSAw
KTsKKyAgICBib29sIGV2ZW50KFFFdmVudCopOworCitzaWduYWxzOgorICAgIHZvaWQgdGFwQW5k
SG9sZCgpOworfTsKKworI2VuZGlmIC8qIHBsYXllcmJ1dHRvbl9oICovCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L3F0L3BsYXRmb3JtcGx1Z2luL21lZWdvL3F0d2Via2l0LW1lZWdvdG91Y2hwbHVnaW4u
cHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvcGxhdGZvcm1wbHVnaW4vbWVlZ28v
cXR3ZWJraXQtbWVlZ290b3VjaHBsdWdpbi5wcm8JKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2Vi
S2l0L3F0L3BsYXRmb3JtcGx1Z2luL21lZWdvL3F0d2Via2l0LW1lZWdvdG91Y2hwbHVnaW4ucHJv
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ5IEBACitURU1QTEFURSA9IGxpYgorQ09ORklHICs9
IHBsdWdpbiBtb2JpbGl0eQorVEFSR0VUID0gJCRxdExpYnJhcnlUYXJnZXQocXR3ZWJraXQtbWVl
Z290b3VjaHBsdWdpbikKK1FUICAgICAgICs9IGNvcmUgZ3VpIGRidXMKK0NPTkZJRyArPSBtZWVn
b3RvdWNoCisKK1JFU09VUkNFUyA9IHJlc291cmNlLnFyYworCisjIyBsb2FkIG1vYmlsaXR5Y29u
ZmlnIGlmIG1vYmlsaXR5IGlzIGF2YWlsYWJsZQorbG9hZChtb2JpbGl0eWNvbmZpZywgdHJ1ZSkK
KworIyBIVE1MNSBNZWRpYSBTdXBwb3J0CisjIFdlIHJlcXVpcmUgUXRNdWx0aW1lZGlhCitjb250
YWlucyhNT0JJTElUWV9DT05GSUcsIG11bHRpbWVkaWEpIHsKKyAgICBDT05GSUcgKz0gbW9iaWxp
dHkKKyAgICBNT0JJTElUWSArPSBtdWx0aW1lZGlhIHN5c3RlbWluZm8KKyAgICBERUZJTkVTICs9
IEVOQUJMRV9RVF9NVUxUSU1FRElBPTEKK30KKworU09VUkNFUyArPSBcCisgICAgbWVlZ290b3Vj
aHBsYXRmb3JtcGx1Z2luLmNwcCBcCisgICAgc2VsZWN0Y29udHJvbGxlci5jcHAgXAorICAgIHNl
bGVjdGRpYWxvZy5jcHAgXAorICAgIHdlYm5vdGlmaWNhdGlvbnByZXNlbnRlci5jcHAgXAorICAg
IHdlYmhhcHRpY2ZlZWRiYWNrcGxheWVyLmNwcCBcCisgICAgd2ViZnVsbHNjcmVlbnZpZGVvaGFu
ZGxlci5jcHAgXAorICAgIGh0bWw1dmlkZW93aWRnZXQuY3BwIFwKKyAgICBvdmVybGF5d2lkZ2V0
LmNwcCBcCisgICAgcGxheWVyYnV0dG9uLmNwcAorCitIRUFERVJTICs9IFwKKyAgICBxd2Via2l0
cGxhdGZvcm1wbHVnaW4uaCBcCisgICAgbWVlZ290b3VjaHBsYXRmb3JtcGx1Z2luLmggXAorICAg
IHNlbGVjdGNvbnRyb2xsZXIuaCBcCisgICAgc2VsZWN0ZGlhbG9nLmggXAorICAgIHdlYm5vdGlm
aWNhdGlvbnByZXNlbnRlci5oIFwKKyAgICB3ZWJoYXB0aWNmZWVkYmFja3BsYXllci5oIFwKKyAg
ICB3ZWJmdWxsc2NyZWVudmlkZW9oYW5kbGVyLmggXAorICAgIGh0bWw1dmlkZW93aWRnZXQuaCBc
CisgICAgb3ZlcmxheXdpZGdldC5oIFwKKyAgICBwbGF5ZXJidXR0b24uaAorCit0YXJnZXQucGF0
aCArPSAkJFtRVF9JTlNUQUxMX1BMVUdJTlNdL3dlYmtpdAorSU5TVEFMTFMgKz0gdGFyZ2V0CisK
KyMgRGVmYXVsdCBmZWF0dXJlIGNvbmZpZ3VyYXRpb24KKworIyBPdXQtb2YtcHJvY2VzcyBub3Rp
ZmljYXRpb24gCishY29udGFpbnMoREVGSU5FUywgVVNFX09PUF9OT1RJRklDQVRJT049Lik6IERF
RklORVMgKz0gVVNFX09PUF9OT1RJRklDQVRJT049MQpJbmRleDogU291cmNlL1dlYktpdC9xdC9w
bGF0Zm9ybXBsdWdpbi9tZWVnby9xd2Via2l0cGxhdGZvcm1wbHVnaW4uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L3F0L3BsYXRmb3JtcGx1Z2luL21lZWdvL3F3ZWJraXRwbGF0Zm9ybXBs
dWdpbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9xdC9wbGF0Zm9ybXBsdWdpbi9t
ZWVnby9xd2Via2l0cGxhdGZvcm1wbHVnaW4uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNTcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0
cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIHF3ZWJraXRwbGF0Zm9ybXBsdWdpbl9oCisj
ZGVmaW5lIHF3ZWJraXRwbGF0Zm9ybXBsdWdpbl9oCisKKy8qCisgKiAgV2FybmluZzogVGhlIGNv
bnRlbnRzIG9mIHRoaXMgZmlsZSBpcyBub3QgIHBhcnQgb2YgdGhlIHB1YmxpYyBRdFdlYktpdCBB
UEkKKyAqICBhbmQgbWF5IGJlIGNoYW5nZWQgZnJvbSB2ZXJzaW9uIHRvIHZlcnNpb24gb3IgZXZl
biBiZSBjb21wbGV0ZWx5IHJlbW92ZWQuCisqLworCisjaW5jbHVkZSA8UUNvbG9yPgorI2luY2x1
ZGUgPFFPYmplY3Q+CisjaW5jbHVkZSA8UVVybD4KKyNpZiBkZWZpbmVkKFdURl9VU0VfUVRfTVVM
VElNRURJQSkgJiYgV1RGX1VTRV9RVF9NVUxUSU1FRElBCisjaW5jbHVkZSA8UU1lZGlhUGxheWVy
PgorI2VuZGlmCisKK2NsYXNzIFFXZWJTZWxlY3REYXRhIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFs
IH5RV2ViU2VsZWN0RGF0YSgpIHsgfQorCisgICAgZW51bSBJdGVtVHlwZSB7IE9wdGlvbiwgR3Jv
dXAsIFNlcGFyYXRvciB9OworCisgICAgdmlydHVhbCBJdGVtVHlwZSBpdGVtVHlwZShpbnQpIGNv
bnN0ID0gMDsKKyAgICB2aXJ0dWFsIFFTdHJpbmcgaXRlbVRleHQoaW50IGluZGV4KSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCBRU3RyaW5nIGl0ZW1Ub29sVGlwKGludCBpbmRleCkgY29uc3QgPSAw
OworICAgIHZpcnR1YWwgYm9vbCBpdGVtSXNFbmFibGVkKGludCBpbmRleCkgY29uc3QgPSAwOwor
ICAgIHZpcnR1YWwgYm9vbCBpdGVtSXNTZWxlY3RlZChpbnQgaW5kZXgpIGNvbnN0ID0gMDsKKyAg
ICB2aXJ0dWFsIGludCBpdGVtQ291bnQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIG11
bHRpcGxlKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgUUNvbG9yIGJhY2tncm91bmRDb2xvcigp
IGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFFDb2xvciBmb3JlZ3JvdW5kQ29sb3IoKSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCBRQ29sb3IgaXRlbUJhY2tncm91bmRDb2xvcihpbnQgaW5kZXgpIGNv
bnN0ID0gMDsKKyAgICB2aXJ0dWFsIFFDb2xvciBpdGVtRm9yZWdyb3VuZENvbG9yKGludCBpbmRl
eCkgY29uc3QgPSAwOworfTsKKworY2xhc3MgUVdlYlNlbGVjdE1ldGhvZCA6IHB1YmxpYyBRT2Jq
ZWN0IHsKKyAgICBRX09CSkVDVAorcHVibGljOgorICAgIHZpcnR1YWwgflFXZWJTZWxlY3RNZXRo
b2QoKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBzaG93KGNvbnN0IFFXZWJTZWxlY3REYXRhJikg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBoaWRlKCkgPSAwOworCitRX1NJR05BTFM6CisgICAgdm9p
ZCBzZWxlY3RJdGVtKGludCBpbmRleCwgYm9vbCBhbGxvd011bHRpcGx5U2VsZWN0aW9ucywgYm9v
bCBzaGlmdCk7CisgICAgdm9pZCBkaWRIaWRlKCk7Cit9OworCitjbGFzcyBRV2ViTm90aWZpY2F0
aW9uRGF0YSB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+UVdlYk5vdGlmaWNhdGlvbkRhdGEoKSB7
IH0KKworICAgIHZpcnR1YWwgY29uc3QgUVN0cmluZyB0aXRsZSgpIGNvbnN0ID0gMDsKKyAgICB2
aXJ0dWFsIGNvbnN0IFFTdHJpbmcgbWVzc2FnZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGNv
bnN0IFFCeXRlQXJyYXkgaWNvbkRhdGEoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBjb25zdCBR
VXJsIG9wZW5lclBhZ2VVcmwoKSBjb25zdCA9IDA7Cit9OworCitjbGFzcyBRV2ViTm90aWZpY2F0
aW9uUHJlc2VudGVyIDogcHVibGljIFFPYmplY3QgeworICAgIFFfT0JKRUNUCitwdWJsaWM6Cisg
ICAgUVdlYk5vdGlmaWNhdGlvblByZXNlbnRlcigpIHsgfQorICAgIHZpcnR1YWwgflFXZWJOb3Rp
ZmljYXRpb25QcmVzZW50ZXIoKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBzaG93Tm90aWZpY2F0
aW9uKGNvbnN0IFFXZWJOb3RpZmljYXRpb25EYXRhKikgPSAwOworICAgIAorUV9TSUdOQUxTOgor
ICAgIHZvaWQgbm90aWZpY2F0aW9uQ2xvc2VkKCk7CisgICAgdm9pZCBub3RpZmljYXRpb25DbGlj
a2VkKCk7Cit9OworCitjbGFzcyBRV2ViSGFwdGljRmVlZGJhY2tQbGF5ZXI6IHB1YmxpYyBRT2Jq
ZWN0IHsKKyAgICBRX09CSkVDVAorcHVibGljOgorICAgIFFXZWJIYXB0aWNGZWVkYmFja1BsYXll
cigpIHsgfQorICAgIHZpcnR1YWwgflFXZWJIYXB0aWNGZWVkYmFja1BsYXllcigpIHsgfQorCisg
ICAgZW51bSBIYXB0aWNTdHJlbmd0aCB7CisgICAgICAgIE5vbmUsIFdlYWssIE1lZGl1bSwgU3Ry
b25nCisgICAgfTsKKworICAgIGVudW0gSGFwdGljRXZlbnQgeworICAgICAgICBQcmVzcywgUmVs
ZWFzZQorICAgIH07CisKKyAgICB2aXJ0dWFsIHZvaWQgcGxheUhhcHRpY0ZlZWRiYWNrKGNvbnN0
IEhhcHRpY0V2ZW50LCBjb25zdCBRU3RyaW5nJiBoYXB0aWNUeXBlLCBjb25zdCBIYXB0aWNTdHJl
bmd0aCkgPSAwOworfTsKKworY2xhc3MgUVdlYlRvdWNoTW9kaWZpZXIgOiBwdWJsaWMgUU9iamVj
dCB7CisgICAgUV9PQkpFQ1QKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5RV2ViVG91Y2hNb2RpZmll
cigpIHsgfQorCisgICAgZW51bSBQYWRkaW5nRGlyZWN0aW9uIHsKKyAgICAgICAgVXAsIFJpZ2h0
LCBEb3duLCBMZWZ0CisgICAgfTsKKworICAgIHZpcnR1YWwgdW5zaWduZWQgaGl0VGVzdFBhZGRp
bmdGb3JUb3VjaChjb25zdCBQYWRkaW5nRGlyZWN0aW9uKSBjb25zdCA9IDA7Cit9OworCisjaWYg
ZGVmaW5lZChXVEZfVVNFX1FUX01VTFRJTUVESUEpICYmIFdURl9VU0VfUVRfTVVMVElNRURJQQor
Y2xhc3MgUVdlYkZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIgOiBwdWJsaWMgUU9iamVjdCB7CisgICAg
UV9PQkpFQ1QKK3B1YmxpYzoKKyAgICBRV2ViRnVsbFNjcmVlblZpZGVvSGFuZGxlcigpIHsgfQor
ICAgIHZpcnR1YWwgflFXZWJGdWxsU2NyZWVuVmlkZW9IYW5kbGVyKCkgeyB9CisgICAgdmlydHVh
bCBib29sIHJlcXVpcmVzRnVsbFNjcmVlbkZvclZpZGVvUGxheWJhY2soKSBjb25zdCA9IDA7CisK
K1FfU0lHTkFMUzoKKyAgICB2b2lkIGZ1bGxTY3JlZW5DbG9zZWQoKTsKKworcHVibGljIFFfU0xP
VFM6CisgICAgdmlydHVhbCB2b2lkIGVudGVyRnVsbFNjcmVlbihRTWVkaWFQbGF5ZXIqKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGV4aXRGdWxsU2NyZWVuKCkgPSAwOworfTsKKyNlbmRpZgorCitj
bGFzcyBRV2ViS2l0UGxhdGZvcm1QbHVnaW4geworcHVibGljOgorICAgIHZpcnR1YWwgflFXZWJL
aXRQbGF0Zm9ybVBsdWdpbigpIHsgfQorCisgICAgZW51bSBFeHRlbnNpb24geworICAgICAgICBN
dWx0aXBsZVNlbGVjdGlvbnMsCisgICAgICAgIE5vdGlmaWNhdGlvbnMsCisgICAgICAgIEhhcHRp
Y3MsCisgICAgICAgIFRvdWNoSW50ZXJhY3Rpb24sCisgICAgICAgIEZ1bGxTY3JlZW5WaWRlb1Bs
YXllcgorICAgIH07CisKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNFeHRlbnNpb24oRXh0ZW5z
aW9uKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBRT2JqZWN0KiBjcmVhdGVFeHRlbnNpb24oRXh0
ZW5zaW9uKSBjb25zdCA9IDA7Cit9OworCitRVF9CRUdJTl9OQU1FU1BBQ0UKK1FfREVDTEFSRV9J
TlRFUkZBQ0UoUVdlYktpdFBsYXRmb3JtUGx1Z2luLCAiY29tLm5va2lhLlF0LldlYktpdC5QbGF0
Zm9ybVBsdWdpbi8xLjciKTsKK1FUX0VORF9OQU1FU1BBQ0UKKworI2VuZGlmIC8vIHF3ZWJraXRw
bGF0Zm9ybXBsdWdpbl9oCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L3BsYXRmb3JtcGx1Z2luL21l
ZWdvL3Jlc291cmNlLnFyYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L3BsYXRmb3Jt
cGx1Z2luL21lZWdvL3Jlc291cmNlLnFyYwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQv
cXQvcGxhdGZvcm1wbHVnaW4vbWVlZ28vcmVzb3VyY2UucXJjCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDggQEAKKzwhRE9DVFlQRSBSQ0M+PFJDQyB2ZXJzaW9uPSIxLjAiPgorPHFyZXNvdXJjZT4K
KyAgICA8ZmlsZT5pbWFnZXMvYnV0dG9uX2Nhbm5vdHBsYXkucG5nPC9maWxlPgorICAgIDxmaWxl
PmltYWdlcy9idXR0b25fY2xvc2UucG5nPC9maWxlPgorICAgIDxmaWxlPmltYWdlcy9idXR0b25f
cGF1c2UucG5nPC9maWxlPgorICAgIDxmaWxlPmltYWdlcy9idXR0b25fcGxheS5wbmc8L2ZpbGU+
Cis8L3FyZXNvdXJjZT4KKzwvUkNDPgpJbmRleDogU291cmNlL1dlYktpdC9xdC9wbGF0Zm9ybXBs
dWdpbi9tZWVnby9zZWxlY3Rjb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L3F0L3BsYXRmb3JtcGx1Z2luL21lZWdvL3NlbGVjdGNvbnRyb2xsZXIuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL1dlYktpdC9xdC9wbGF0Zm9ybXBsdWdpbi9tZWVnby9zZWxlY3Rjb250
cm9sbGVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykK
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICov
CisKKyNpbmNsdWRlICJzZWxlY3Rjb250cm9sbGVyLmgiCisjaW5jbHVkZSAic2VsZWN0ZGlhbG9n
LmgiCisKK1NlbGVjdENvbnRyb2xsZXI6On5TZWxlY3RDb250cm9sbGVyKCkKK3sKKyAgICBpZiAo
bV9kaWFsb2cpCisgICAgICAgIG1fZGlhbG9nLT5kZWxldGVMYXRlcigpOworfQorCit2b2lkIFNl
bGVjdENvbnRyb2xsZXI6OnNob3coY29uc3QgUVdlYlNlbGVjdERhdGEmIGRhdGEpCit7CisgICAg
aWYgKG1fZGlhbG9nKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2RpYWxvZyA9IG5ldyBTZWxl
Y3REaWFsb2coZGF0YSk7CisgICAgY29ubmVjdChtX2RpYWxvZywgU0lHTkFMKGRpc2FwcGVhcmVk
KCkpLCB0aGlzLCBTTE9UKGRpYWxvZ0Nsb3NlZCgpKSk7CisgICAgY29ubmVjdChtX2RpYWxvZywg
U0lHTkFMKHNlbGVjdEl0ZW0oaW50LCBib29sLCBib29sKSksIHRoaXMsIFNJR05BTChzZWxlY3RJ
dGVtKGludCwgYm9vbCwgYm9vbCkpKTsKKyAgICBtX2RpYWxvZy0+YXBwZWFyKE1TY2VuZVdpbmRv
dzo6S2VlcFdoZW5Eb25lKTsKK30KKwordm9pZCBTZWxlY3RDb250cm9sbGVyOjpoaWRlKCkKK3sK
KyAgICBpZiAoIW1fZGlhbG9nKQorICAgICAgICByZXR1cm47Cit9CisKK3ZvaWQgU2VsZWN0Q29u
dHJvbGxlcjo6ZGlhbG9nQ2xvc2VkKCkKK3sKKyAgICBpZiAoIW1fZGlhbG9nKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX2RpYWxvZy0+ZGVsZXRlTGF0ZXIoKTsKKyAgICBtX2RpYWxvZyA9IDA7
CisKKyAgICBlbWl0IGRpZEhpZGUoKTsKK30KSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvcGxhdGZv
cm1wbHVnaW4vbWVlZ28vc2VsZWN0Y29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvcXQvcGxhdGZvcm1wbHVnaW4vbWVlZ28vc2VsZWN0Y29udHJvbGxlci5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL1dlYktpdC9xdC9wbGF0Zm9ybXBsdWdpbi9tZWVnby9zZWxlY3Rjb250
cm9sbGVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLwor
CisjaWZuZGVmIHNlbGVjdGNvbnRyb2xsZXJfaAorI2RlZmluZSBzZWxlY3Rjb250cm9sbGVyX2gK
KworI2luY2x1ZGUgInF3ZWJraXRwbGF0Zm9ybXBsdWdpbi5oIgorCitjbGFzcyBTZWxlY3REaWFs
b2c7CisKK2NsYXNzIFNlbGVjdENvbnRyb2xsZXIgOiBwdWJsaWMgUVdlYlNlbGVjdE1ldGhvZCB7
CisgICAgUV9PQkpFQ1QKKworcHVibGljOgorICAgIFNlbGVjdENvbnRyb2xsZXIoKSA6IG1fZGlh
bG9nKDApIHsgfTsKKyAgICB2aXJ0dWFsIH5TZWxlY3RDb250cm9sbGVyKCk7CisKKyAgICB2aXJ0
dWFsIHZvaWQgc2hvdyhjb25zdCBRV2ViU2VsZWN0RGF0YSYpOworICAgIHZpcnR1YWwgdm9pZCBo
aWRlKCk7CisKK3ByaXZhdGUgc2xvdHM6CisgICAgdm9pZCBkaWFsb2dDbG9zZWQoKTsKKworcHJp
dmF0ZToKKyAgICBTZWxlY3REaWFsb2cqIG1fZGlhbG9nOworfTsKKworI2VuZGlmIC8vIHNlbGVj
dGNvbnRyb2xsZXJfSApJbmRleDogU291cmNlL1dlYktpdC9xdC9wbGF0Zm9ybXBsdWdpbi9tZWVn
by9zZWxlY3RkaWFsb2cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvcGxhdGZv
cm1wbHVnaW4vbWVlZ28vc2VsZWN0ZGlhbG9nLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9X
ZWJLaXQvcXQvcGxhdGZvcm1wbHVnaW4vbWVlZ28vc2VsZWN0ZGlhbG9nLmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwxMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29y
cG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAic2VsZWN0
ZGlhbG9nLmgiCisjaW5jbHVkZSAicXdlYmtpdHBsYXRmb3JtcGx1Z2luLmgiCisKKyNpbmNsdWRl
IDxNQWJzdHJhY3RDZWxsQ3JlYXRvcj4KKyNpbmNsdWRlIDxNQ29udGVudEl0ZW0+CisjaW5jbHVk
ZSA8TUxpc3Q+CisjaW5jbHVkZSA8UU1vZGVsSW5kZXg+CisjaW5jbHVkZSA8UVN0YW5kYXJkSXRl
bT4KKyNpbmNsdWRlIDxRU3RhbmRhcmRJdGVtTW9kZWw+CisjaW5jbHVkZSA8UVN0cmluZ0xpc3Q+
CisjaW5jbHVkZSA8UVZhcmlhbnQ+CisKKworY2xhc3MgQ29udGVudEl0ZW1DcmVhdG9yIDogcHVi
bGljIE1BYnN0cmFjdENlbGxDcmVhdG9yPE1Db250ZW50SXRlbT4geworcHVibGljOgorICAgIENv
bnRlbnRJdGVtQ3JlYXRvcigpIDogTUFic3RyYWN0Q2VsbENyZWF0b3I8TUNvbnRlbnRJdGVtPigp
IHsgfQorCisgICAgTVdpZGdldCogY3JlYXRlQ2VsbChjb25zdCBRTW9kZWxJbmRleCYgaW5kZXgs
IE1XaWRnZXRSZWN5Y2xlciYgcmVjeWNsZXIpIGNvbnN0IAorICAgIHsKKyAgICAgICAgTUNvbnRl
bnRJdGVtKiBjZWxsID0gcW9iamVjdF9jYXN0PE1Db250ZW50SXRlbSAqPihyZWN5Y2xlci50YWtl
KE1Db250ZW50SXRlbTo6c3RhdGljTWV0YU9iamVjdC5jbGFzc05hbWUoKSkpOworICAgICAgICBp
ZiAoIWNlbGwpCisgICAgICAgICAgICBjZWxsID0gbmV3IE1Db250ZW50SXRlbShNQ29udGVudEl0
ZW06OlNpbmdsZVRleHRMYWJlbCk7CisgICAgICAgIHVwZGF0ZUNlbGwoaW5kZXgsIGNlbGwpOwor
ICAgICAgICByZXR1cm4gY2VsbDsKKyAgICB9CisKKyAgICB2b2lkIHVwZGF0ZUNlbGwoY29uc3Qg
UU1vZGVsSW5kZXgmIGluZGV4LCBNV2lkZ2V0KiBjZWxsKSBjb25zdAorICAgIHsKKyAgICAgICAg
TUNvbnRlbnRJdGVtKiBpdGVtID0gcW9iamVjdF9jYXN0PE1Db250ZW50SXRlbSo+KGNlbGwpOwor
ICAgICAgICBpZiAoIWl0ZW0pCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgUVZhcmlh
bnQgZGF0YSA9IGluZGV4LmRhdGEoUXQ6OkRpc3BsYXlSb2xlKTsKKyAgICAgICAgUVN0cmluZ0xp
c3Qgcm93RGF0YSA9IGRhdGEudmFsdWU8UVN0cmluZ0xpc3Q+KCk7CisgICAgICAgIGlmICghcm93
RGF0YS5pc0VtcHR5KCkpCisgICAgICAgICAgICBpdGVtLT5zZXRUaXRsZShyb3dEYXRhLmF0KDAp
KTsKKyAgICB9Cit9OworCitTZWxlY3REaWFsb2c6OlNlbGVjdERpYWxvZyhjb25zdCBRV2ViU2Vs
ZWN0RGF0YSYgZGF0YSkKKyAgICA6IG1fZGF0YShkYXRhKQoreworICAgIG1fbGlzdCA9IG5ldyBN
TGlzdCgpOworICAgIG1fbGlzdC0+c2V0Q2VsbENyZWF0b3IobmV3IENvbnRlbnRJdGVtQ3JlYXRv
cigpKTsKKyAgICB0aGlzLT5zZXRDZW50cmFsV2lkZ2V0KG1fbGlzdCk7CisgICAgaWYgKGRhdGEu
bXVsdGlwbGUoKSkKKyAgICAgICAgbV9saXN0LT5zZXRTZWxlY3Rpb25Nb2RlKE1MaXN0OjpNdWx0
aVNlbGVjdGlvbik7CisgICAgZWxzZQorICAgICAgICBtX2xpc3QtPnNldFNlbGVjdGlvbk1vZGUo
TUxpc3Q6OlNpbmdsZVNlbGVjdGlvbik7CisgICAgcG9wdWxhdGVMaXN0KCk7CisgICAgY29ubmVj
dChtX2xpc3QsIFNJR05BTChpdGVtQ2xpY2tlZChRTW9kZWxJbmRleCkpLCB0aGlzLCBTTE9UKG1v
ZGlmeUl0ZW1TdGF0ZShRTW9kZWxJbmRleCkpKTsKK30KKworU2VsZWN0RGlhbG9nOjp+U2VsZWN0
RGlhbG9nKCkKK3sKKyAgICBtX2xpc3QtPmRlbGV0ZUxhdGVyKCk7Cit9CisKK3ZvaWQgU2VsZWN0
RGlhbG9nOjpwb3B1bGF0ZUxpc3QoKQoreworICAgIFFTdHJpbmdMaXN0IGRpYWxvZ0l0ZW1zOwor
ICAgIFFTdGFuZGFyZEl0ZW1Nb2RlbCogc3RhbmRhcmRJdGVtTW9kZWwgPSBuZXcgUVN0YW5kYXJk
SXRlbU1vZGVsKHRoaXMpOworICAgIFFMaXN0PGludD4gc2VsZWN0ZWRPcHRpb25zOworICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgbV9kYXRhLml0ZW1Db3VudCgpOyArK2kpIHsKKyAgICAgICAgUVN0
YW5kYXJkSXRlbSogaXRlbSA9IG5ldyBRU3RhbmRhcmRJdGVtKCk7CisgICAgICAgIGlmIChtX2Rh
dGEuaXRlbVR5cGUoaSkgPT0gUVdlYlNlbGVjdERhdGE6Ok9wdGlvbikgeworICAgICAgICAgICAg
aXRlbS0+c2V0VGV4dCgiICAgIiArIG1fZGF0YS5pdGVtVGV4dChpKSk7CisgICAgICAgICAgICBp
ZiAobV9kYXRhLml0ZW1Jc1NlbGVjdGVkKGkpKQorICAgICAgICAgICAgICAgIHNlbGVjdGVkT3B0
aW9ucyA8PCBpOworICAgICAgICB9IGVsc2UgaWYgKG1fZGF0YS5pdGVtVHlwZShpKSA9PSBRV2Vi
U2VsZWN0RGF0YTo6R3JvdXApIHsKKyAgICAgICAgICAgIGl0ZW0tPnNldFRleHQobV9kYXRhLml0
ZW1UZXh0KGkpKTsKKyAgICAgICAgICAgIGl0ZW0tPnNldEVuYWJsZWQoZmFsc2UpOworICAgICAg
ICAgICAgaXRlbS0+c2V0U2VsZWN0YWJsZShmYWxzZSk7CisgICAgICAgIH0KKyAgICAgICAgc3Rh
bmRhcmRJdGVtTW9kZWwtPmFwcGVuZFJvdyhpdGVtKTsKKyAgICB9CisKKyAgICBtX2xpc3QtPnNl
dEl0ZW1Nb2RlbChzdGFuZGFyZEl0ZW1Nb2RlbCk7CisgICAgZm9yZWFjaCAoaW50IHNlbGVjdGVk
LCBzZWxlY3RlZE9wdGlvbnMpCisgICAgICAgIG1fbGlzdC0+c2VsZWN0SXRlbShtX2xpc3QtPml0
ZW1Nb2RlbCgpLT5pbmRleChzZWxlY3RlZCwgMCkpOworfQorCit2b2lkIFNlbGVjdERpYWxvZzo6
bW9kaWZ5SXRlbVN0YXRlKGNvbnN0IFFNb2RlbEluZGV4JiBpbmRleCkKK3sKKyAgICBpbnQgY2xp
Y2tlZEluZGV4ID0gaW5kZXgucm93KCk7CisgICAgaWYgKG1fZGF0YS5tdWx0aXBsZSgpKSB7Cisg
ICAgICAgIC8vIE11bHRpIHNlbGVjdAorICAgICAgICBlbWl0IHNlbGVjdEl0ZW0oY2xpY2tlZElu
ZGV4LCB0cnVlLCBmYWxzZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gU2luZ2xlIHNlbGVj
dAorICAgICAgICBlbWl0IHNlbGVjdEl0ZW0oY2xpY2tlZEluZGV4LCBmYWxzZSwgZmFsc2UpOwor
ICAgICAgICBkaXNhcHBlYXIoKTsKKyAgICB9Cit9CkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L3Bs
YXRmb3JtcGx1Z2luL21lZWdvL3NlbGVjdGRpYWxvZy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvcXQvcGxhdGZvcm1wbHVnaW4vbWVlZ28vc2VsZWN0ZGlhbG9nLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvV2ViS2l0L3F0L3BsYXRmb3JtcGx1Z2luL21lZWdvL3NlbGVjdGRpYWxvZy5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRl
ZiBzZWxlY3RkaWFsb2dfaAorI2RlZmluZSBzZWxlY3RkaWFsb2dfaAorCisjaW5jbHVkZSA8TURp
YWxvZz4KKworY2xhc3MgTUxpc3Q7CitjbGFzcyBRTW9kZWxJbmRleDsKK2NsYXNzIFFXZWJTZWxl
Y3REYXRhOworCitjbGFzcyBTZWxlY3REaWFsb2cgOiBwdWJsaWMgTURpYWxvZyB7CisgICAgUV9P
QkpFQ1QKK3B1YmxpYzoKKyAgICBTZWxlY3REaWFsb2coY29uc3QgUVdlYlNlbGVjdERhdGEmKTsK
KyAgICB2aXJ0dWFsIH5TZWxlY3REaWFsb2coKTsKKworUV9TSUdOQUxTOgorICAgIHZvaWQgc2Vs
ZWN0SXRlbShpbnQgaW5kZXgsIGJvb2wgYWxsb3dNdWx0aXBseVNlbGVjdGlvbnMsIGJvb2wgc2hp
ZnQpOworCitwcml2YXRlIFFfU0xPVFM6CisgICAgdm9pZCBtb2RpZnlJdGVtU3RhdGUoY29uc3Qg
UU1vZGVsSW5kZXgmKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIHBvcHVsYXRlTGlzdCgpOworCitw
cml2YXRlOgorICAgIGNvbnN0IFFXZWJTZWxlY3REYXRhJiBtX2RhdGE7CisgICAgTUxpc3QqIG1f
bGlzdDsKK307CisKKyNlbmRpZiAvLyBzZWxlY3RkaWFsb2dfaApJbmRleDogU291cmNlL1dlYktp
dC9xdC9wbGF0Zm9ybXBsdWdpbi9tZWVnby93ZWJmdWxsc2NyZWVudmlkZW9oYW5kbGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L3BsYXRmb3JtcGx1Z2luL21lZWdvL3dlYmZ1
bGxzY3JlZW52aWRlb2hhbmRsZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9x
dC9wbGF0Zm9ybXBsdWdpbi9tZWVnby93ZWJmdWxsc2NyZWVudmlkZW9oYW5kbGVyLmNwcAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9r
aWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAi
d2ViZnVsbHNjcmVlbnZpZGVvaGFuZGxlci5oIgorCisjaW5jbHVkZSA8UVN5c3RlbVNjcmVlblNh
dmVyPgorCitXZWJGdWxsU2NyZWVuVmlkZW9IYW5kbGVyOjpXZWJGdWxsU2NyZWVuVmlkZW9IYW5k
bGVyKCkKKyAgICA6IG1fdmlkZW9XaWRnZXQobmV3IEhUTUw1VmlkZW9XaWRnZXQoKSkKKyAgICAs
IG1fbWVkaWFQbGF5ZXIoMCkKKyAgICAsIG1fc2NyZWVuU2F2ZXIoMCkKK3sKK30KKwordm9pZCBX
ZWJGdWxsU2NyZWVuVmlkZW9IYW5kbGVyOjplbnRlckZ1bGxTY3JlZW4oUU1lZGlhUGxheWVyICpw
bGF5ZXIpCit7CisgICAgaWYgKCFwbGF5ZXIgfHwgIW1fdmlkZW9XaWRnZXQpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fdmlkZW9XaWRnZXQtPnNldER1cmF0aW9uKHBsYXllci0+ZHVyYXRpb24o
KSk7CisKKyAgICBpZiAocGxheWVyLT5zdGF0ZSgpID09IFFNZWRpYVBsYXllcjo6UGxheWluZ1N0
YXRlKQorICAgICAgICBwbGF5ZXItPnBhdXNlKCk7CisKKyAgICBtX21lZGlhUGxheWVyID0gcGxh
eWVyOworICAgIGNvbm5lY3QobV9tZWRpYVBsYXllciwgU0lHTkFMKHBvc2l0aW9uQ2hhbmdlZChx
aW50NjQpKSwgbV92aWRlb1dpZGdldCwgU0xPVChvblBvc2l0aW9uQ2hhbmdlZChxaW50NjQpKSk7
CisgICAgY29ubmVjdChtX21lZGlhUGxheWVyLCBTSUdOQUwoZHVyYXRpb25DaGFuZ2VkKHFpbnQ2
NCkpLCBtX3ZpZGVvV2lkZ2V0LCBTTE9UKHNldER1cmF0aW9uKHFpbnQ2NCkpKTsKKyAgICBjb25u
ZWN0KG1fbWVkaWFQbGF5ZXIsIFNJR05BTChzdGF0ZUNoYW5nZWQoUU1lZGlhUGxheWVyOjpTdGF0
ZSkpLCB0aGlzLCBTTE9UKG9uUGxheWVyU3RhdGVDaGFuZ2VkKFFNZWRpYVBsYXllcjo6U3RhdGUp
KSk7CisgICAgY29ubmVjdChtX21lZGlhUGxheWVyLCBTSUdOQUwoZXJyb3IoUU1lZGlhUGxheWVy
OjpFcnJvcikpLCB0aGlzLCBTTE9UKG9uUGxheWVyRXJyb3IoUU1lZGlhUGxheWVyOjpFcnJvcikp
KTsKKyAgICBjb25uZWN0KG1fdmlkZW9XaWRnZXQsIFNJR05BTChwb3NpdGlvbkNoYW5nZWRCeVVz
ZXIocWludDY0KSksIG1fbWVkaWFQbGF5ZXIsIFNMT1Qoc2V0UG9zaXRpb24ocWludDY0KSkpOwor
ICAgIGNvbm5lY3QobV92aWRlb1dpZGdldCwgU0lHTkFMKGNsb3NlQ2xpY2tlZCgpKSwgdGhpcywg
U0lHTkFMKGZ1bGxTY3JlZW5DbG9zZWQoKSkpOworICAgIGNvbm5lY3QobV92aWRlb1dpZGdldCwg
U0lHTkFMKHBhdXNlQ2xpY2tlZCgpKSwgbV9tZWRpYVBsYXllciwgU0xPVChwYXVzZSgpKSk7Cisg
ICAgY29ubmVjdChtX3ZpZGVvV2lkZ2V0LCBTSUdOQUwocGxheUNsaWNrZWQoKSksIG1fbWVkaWFQ
bGF5ZXIsIFNMT1QocGxheSgpKSk7CisKKyAgICBtX21lZGlhUGxheWVyLT5zZXRWaWRlb091dHB1
dChtX3ZpZGVvV2lkZ2V0KTsKKworICAgIG1fdmlkZW9XaWRnZXQtPnNldFNpemVQb2xpY3koUVNp
emVQb2xpY3k6Oklnbm9yZWQsIFFTaXplUG9saWN5OjpJZ25vcmVkKTsKKyAgICBtX3ZpZGVvV2lk
Z2V0LT5zaG93RnVsbFNjcmVlbigpOworfQorCit2b2lkIFdlYkZ1bGxTY3JlZW5WaWRlb0hhbmRs
ZXI6OmV4aXRGdWxsU2NyZWVuKCkKK3sKKyAgICBtX3ZpZGVvV2lkZ2V0LT5oaWRlKCk7CisgICAg
bV9tZWRpYVBsYXllci0+ZGlzY29ubmVjdChtX3ZpZGVvV2lkZ2V0KTsKKyAgICBtX21lZGlhUGxh
eWVyLT5kaXNjb25uZWN0KHRoaXMpOworCisgICAgLy8gcGF1c2UgdGhlIHZpZGVvIGFzIHBlciBz
cGVjLgorICAgIGlmIChtX21lZGlhUGxheWVyLT5zdGF0ZSgpID09IFFNZWRpYVBsYXllcjo6UGxh
eWluZ1N0YXRlKQorICAgICAgICBtX21lZGlhUGxheWVyLT5wYXVzZSgpOworfQorCit2b2lkIFdl
YkZ1bGxTY3JlZW5WaWRlb0hhbmRsZXI6Om9uUGxheWVyRXJyb3IoUU1lZGlhUGxheWVyOjpFcnJv
ciBlcnJvcikKK3sKKyAgICBzd2l0Y2ggKGVycm9yKSB7CisgICAgY2FzZSBRTWVkaWFQbGF5ZXI6
Ok5vRXJyb3I6CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIG1fdmlkZW9X
aWRnZXQtPm9uUGxheWVyRXJyb3IoKTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViRnVsbFNjcmVlblZp
ZGVvSGFuZGxlcjo6b25QbGF5ZXJTdGF0ZUNoYW5nZWQoUU1lZGlhUGxheWVyOjpTdGF0ZSBzdGF0
ZSkKK3sKKyAgICAvLyBFbmFibGUvRGlzYWJsZSBzY3JlZW4gc2F2ZXIgaW5oaWJpdCB3aGVuIHZp
ZGVvIHN0YXJ0cyBwbGF5aW5nL3BhdXNlZAorICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICBjYXNl
IFFNZWRpYVBsYXllcjo6UGxheWluZ1N0YXRlOgorICAgICAgICBpZiAoIW1fc2NyZWVuU2F2ZXIp
IHsKKyAgICAgICAgICAgIG1fc2NyZWVuU2F2ZXIgPSBuZXcgUXRNb2JpbGl0eTo6UVN5c3RlbVNj
cmVlblNhdmVyKHRoaXMpOworICAgICAgICAgICAgbV9zY3JlZW5TYXZlci0+c2V0U2NyZWVuU2F2
ZXJJbmhpYml0KCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFFNZWRp
YVBsYXllcjo6UGF1c2VkU3RhdGU6CisgICAgICAgIGRlbGV0ZSBtX3NjcmVlblNhdmVyOworICAg
ICAgICBtX3NjcmVlblNhdmVyID0gMDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFFNZWRp
YVBsYXllcjo6U3RvcHBlZFN0YXRlOgorICAgICAgICBkZWxldGUgbV9zY3JlZW5TYXZlcjsKKyAg
ICAgICAgbV9zY3JlZW5TYXZlciA9IDA7CisgICAgICAgIG1fdmlkZW9XaWRnZXQtPm9uUGxheWVy
U3RvcHBlZCgpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IApJbmRleDogU291cmNlL1dlYktpdC9xdC9wbGF0Zm9ybXBsdWdpbi9tZWVnby93ZWJmdWxsc2Ny
ZWVudmlkZW9oYW5kbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9wbGF0Zm9y
bXBsdWdpbi9tZWVnby93ZWJmdWxsc2NyZWVudmlkZW9oYW5kbGVyLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvV2ViS2l0L3F0L3BsYXRmb3JtcGx1Z2luL21lZWdvL3dlYmZ1bGxzY3JlZW52aWRl
b2hhbmRsZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykK
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICov
CisjaWZuZGVmIHdlYmZ1bGxzY3JlZW52aWRlb2hhbmRsZXJfaAorI2RlZmluZSB3ZWJmdWxsc2Ny
ZWVudmlkZW9oYW5kbGVyX2gKKworI2luY2x1ZGUgImh0bWw1dmlkZW93aWRnZXQuaCIKKyNpbmNs
dWRlICJxd2Via2l0cGxhdGZvcm1wbHVnaW4uaCIKKworI2luY2x1ZGUgPFFNZWRpYVBsYXllcj4K
KyNpbmNsdWRlIDxRU3lzdGVtU2NyZWVuU2F2ZXI+CisKK2NsYXNzIFdlYkZ1bGxTY3JlZW5WaWRl
b0hhbmRsZXIgOiBwdWJsaWMgUVdlYkZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIgeworICAgIFFfT0JK
RUNUCitwdWJsaWM6CisgICAgV2ViRnVsbFNjcmVlblZpZGVvSGFuZGxlcigpOworICAgIH5XZWJG
dWxsU2NyZWVuVmlkZW9IYW5kbGVyKCkgeyB9CisgICAgYm9vbCByZXF1aXJlc0Z1bGxTY3JlZW5G
b3JWaWRlb1BsYXliYWNrKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZvaWQgdXBkYXRl
U2NyZWVuUmVjdChjb25zdCBRUmVjdCYpIHsgfQorCitwdWJsaWMgUV9TTE9UUzoKKyAgICB2aXJ0
dWFsIHZvaWQgZW50ZXJGdWxsU2NyZWVuKFFNZWRpYVBsYXllciopOworICAgIHZpcnR1YWwgdm9p
ZCBleGl0RnVsbFNjcmVlbigpOworICAgIHZvaWQgb25QbGF5ZXJTdGF0ZUNoYW5nZWQoUU1lZGlh
UGxheWVyOjpTdGF0ZSk7CisgICAgdm9pZCBvblBsYXllckVycm9yKFFNZWRpYVBsYXllcjo6RXJy
b3IpOworCitRX1NJR05BTFM6CisgICAgdm9pZCBmdWxsU2NyZWVuQ2xvc2VkKCk7CisKK3ByaXZh
dGU6CisgICAgSFRNTDVWaWRlb1dpZGdldCogbV92aWRlb1dpZGdldDsKKyAgICBRTWVkaWFQbGF5
ZXIqIG1fbWVkaWFQbGF5ZXI7CisgICAgUXRNb2JpbGl0eTo6UVN5c3RlbVNjcmVlblNhdmVyKiBt
X3NjcmVlblNhdmVyOworICAgIFFQaXhtYXAgbV9mcmFtZTsKK307CisKKyNlbmRpZiAvLyB3ZWJm
dWxsc2NyZWVudmlkZW9oYW5kbGVyX2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvcGxhdGZvcm1w
bHVnaW4vbWVlZ28vd2ViaGFwdGljZmVlZGJhY2twbGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvcXQvcGxhdGZvcm1wbHVnaW4vbWVlZ28vd2ViaGFwdGljZmVlZGJhY2twbGF5
ZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9xdC9wbGF0Zm9ybXBsdWdpbi9t
ZWVnby93ZWJoYXB0aWNmZWVkYmFja3BsYXllci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29y
IGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgIndlYmhhcHRpY2ZlZWRiYWNrcGxh
eWVyLmgiCisKKyNpbmNsdWRlIDxNQXBwbGljYXRpb24+CisjaW5jbHVkZSA8TUZlZWRiYWNrUGxh
eWVyPgorCit2b2lkIFdlYkhhcHRpY0ZlZWRiYWNrUGxheWVyOjpwbGF5SGFwdGljRmVlZGJhY2so
Y29uc3QgSGFwdGljRXZlbnQgZXZlbnQsIGNvbnN0IFFTdHJpbmcmIHR5cGUsIGNvbnN0IEhhcHRp
Y1N0cmVuZ3RoIHN0cmVuZ3RoKQoreworICAgIGlmIChzdHJlbmd0aCA9PSBOb25lIHx8IHR5cGUg
PT0gIkxhdGNoZWRCdXR0b25TdHVjayIgfHwgdHlwZSA9PSAiVW5kZWZpbmVkIikKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKHR5cGUgPT0gIkNoZWNrZWRDaGVja0JveCIpCisgICAgICAgIE1B
cHBsaWNhdGlvbjo6ZmVlZGJhY2tQbGF5ZXIoKS0+cGxheSgicHJlc3Mtb2ZmIik7CisgICAgZWxz
ZSBpZiAodHlwZSA9PSAiVW5jaGVja2VkQ2hlY2tCb3giKQorICAgICAgICBNQXBwbGljYXRpb246
OmZlZWRiYWNrUGxheWVyKCktPnBsYXkoInByZXNzLW9uIik7CisgICAgZWxzZSB7CisgICAgICAg
IGlmIChldmVudCA9PSBQcmVzcykKKyAgICAgICAgICAgIE1BcHBsaWNhdGlvbjo6ZmVlZGJhY2tQ
bGF5ZXIoKS0+cGxheSgicHJlc3MiKTsKKyAgICAgICAgZWxzZSBpZiAoZXZlbnQgPT0gUmVsZWFz
ZSkKKyAgICAgICAgICAgIE1BcHBsaWNhdGlvbjo6ZmVlZGJhY2tQbGF5ZXIoKS0+cGxheSgicmVs
ZWFzZSIpOworICAgIH0KK30KSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvcGxhdGZvcm1wbHVnaW4v
bWVlZ28vd2ViaGFwdGljZmVlZGJhY2twbGF5ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L3F0L3BsYXRmb3JtcGx1Z2luL21lZWdvL3dlYmhhcHRpY2ZlZWRiYWNrcGxheWVyLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L3F0L3BsYXRmb3JtcGx1Z2luL21lZWdvL3dlYmhh
cHRpY2ZlZWRiYWNrcGxheWVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRp
YXJ5KC1pZXMpLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqCisgKi8KKworI2lmbmRlZiB3ZWJoYXB0aWNmZWVkYmFja3BsYXllcl9oCisjZGVmaW5l
IHdlYmhhcHRpY2ZlZWRiYWNrcGxheWVyX2gKKworI2luY2x1ZGUgInF3ZWJraXRwbGF0Zm9ybXBs
dWdpbi5oIgorCitjbGFzcyBXZWJIYXB0aWNGZWVkYmFja1BsYXllciA6IHB1YmxpYyBRV2ViSGFw
dGljRmVlZGJhY2tQbGF5ZXIgeworcHVibGljOgorICAgIHZvaWQgcGxheUhhcHRpY0ZlZWRiYWNr
KGNvbnN0IEhhcHRpY0V2ZW50LCBjb25zdCBRU3RyaW5nJiwgY29uc3QgSGFwdGljU3RyZW5ndGgp
OworfTsKKworI2VuZGlmIC8vIHdlYmhhcHRpY2ZlZWRiYWNrcGxheWVyX2gKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvcXQvcGxhdGZvcm1wbHVnaW4vbWVlZ28vd2Vibm90aWZpY2F0aW9ucHJlc2VudGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L3BsYXRmb3JtcGx1Z2luL21lZWdv
L3dlYm5vdGlmaWNhdGlvbnByZXNlbnRlci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2Vi
S2l0L3F0L3BsYXRmb3JtcGx1Z2luL21lZWdvL3dlYm5vdGlmaWNhdGlvbnByZXNlbnRlci5jcHAJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
Tm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1
ZGUgIndlYm5vdGlmaWNhdGlvbnByZXNlbnRlci5oIgorCisjaWYgVVNFX09PUF9OT1RJRklDQVRJ
T04KKyNpbmNsdWRlIDxNQ29tcG9uZW50RGF0YT4KKyNpbmNsdWRlIDxNTm90aWZpY2F0aW9uPgor
I2luY2x1ZGUgPE1SZW1vdGVBY3Rpb24+CisjZWxzZQorI2luY2x1ZGUgPE1JbmZvQmFubmVyPgor
I2luY2x1ZGUgPFFCeXRlQXJyYXk+CisjaW5jbHVkZSA8UVBpeG1hcD4KKyNlbmRpZgorCisjaW5j
bHVkZSA8UVRpbWVyPgorCitXZWJOb3RpZmljYXRpb25QcmVzZW50ZXI6OldlYk5vdGlmaWNhdGlv
blByZXNlbnRlcigpCisgICAgOiBRV2ViTm90aWZpY2F0aW9uUHJlc2VudGVyKCkKK3sKK30KKwor
dm9pZCBXZWJOb3RpZmljYXRpb25QcmVzZW50ZXI6OnNob3dOb3RpZmljYXRpb24oY29uc3QgUVdl
Yk5vdGlmaWNhdGlvbkRhdGEqIGRhdGEpCit7CisjaWYgVVNFX09PUF9OT1RJRklDQVRJT04KKyAg
ICBNTm90aWZpY2F0aW9uKiB3ZWJOb3RpZmljYXRpb24gPSBuZXcgTU5vdGlmaWNhdGlvbigid2Vi
bm90aWZpY2F0aW9uIiwgZGF0YS0+dGl0bGUoKSwgZGF0YS0+bWVzc2FnZSgpKTsKKworICAgIE1S
ZW1vdGVBY3Rpb24qIGFjdCA9IG5ldyBNUmVtb3RlQWN0aW9uKE1Db21wb25lbnREYXRhOjpzZXJ2
aWNlTmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIv
b3JnL21hZW1vL20iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJjb20ubm9raWEuTUFwcGxpY2F0aW9uSWYiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJsYXVuY2giKTsKKyAgICB3ZWJOb3RpZmljYXRpb24tPnNldEFjdGlv
bigqYWN0KTsKKworICAgIC8vIFRPRE86IEFkZCBzZXR0aW5nIHRoZSBpbWFnZQorICAgIC8vICBX
aGF0IHdlIHJlYWxseSBuZWVkIHRvIGRvIGluIE1Ob3RpZmljYXRpb24gaXMgdG8gd3JpdGUgaW1h
Z2UgZnJvbSBkYXRhLT5pY29uRGF0YSgpIHRvCisgICAgLy8gIGEgdGVtcG9yYXJ5IGZpbGUgYW5k
IGdpdmUgdGhhdCBwYXRoIHRvIHNldEltYWdlLgorCisgICAgd2ViTm90aWZpY2F0aW9uLT5wdWJs
aXNoKCk7CisjZWxzZQorICAgIE1JbmZvQmFubmVyKiBpbmZvQmFubmVyID0gbmV3IE1JbmZvQmFu
bmVyKE1JbmZvQmFubmVyOjpJbmZvcm1hdGlvbik7CisgICAgY29ubmVjdChpbmZvQmFubmVyLCBT
SUdOQUwoY2xpY2tlZCgpKSwgdGhpcywgU0lHTkFMKG5vdGlmaWNhdGlvbkNsaWNrZWQoKSkpOwor
CisgICAgUVBpeG1hcCBwaXhtYXA7CisgICAgUUJ5dGVBcnJheSBpY29uID0gZGF0YS0+aWNvbkRh
dGEoKTsKKyAgICBpZiAoaWNvbi5sZW5ndGgoKSAmJiBwaXhtYXAubG9hZEZyb21EYXRhKGljb24p
KQorICAgICAgICBpbmZvQmFubmVyLT5zZXRQaXhtYXAocGl4bWFwKTsKKworCisgICAgUVN0cmlu
ZyBub3RpZmljYXRpb25UZXh0OworICAgIGlmICghZGF0YS0+dGl0bGUoKS5pc0VtcHR5KCkpCisg
ICAgICAgIG5vdGlmaWNhdGlvblRleHQgKz0gUVN0cmluZygiPGI+JTE8L2I+PGJyLz4iKS5hcmco
ZGF0YS0+dGl0bGUoKSk7CisKKyAgICBpZiAoIWRhdGEtPm1lc3NhZ2UoKS5pc0VtcHR5KCkpCisg
ICAgICAgIG5vdGlmaWNhdGlvblRleHQgKz0gZGF0YS0+bWVzc2FnZSgpOworCisgICAgaW5mb0Jh
bm5lci0+c2V0Qm9keVRleHQobm90aWZpY2F0aW9uVGV4dCk7CisgICAgaW5mb0Jhbm5lci0+YXBw
ZWFyKE1TY2VuZVdpbmRvdzo6RGVzdHJveVdoZW5Eb25lKTsKKworI2VuZGlmCisgICAgLy8gVE9E
TzogV2hhdCBpZiBNTm90aWZpY2F0aW9uOjpwdWJsaXNoKCkgZmFpbHM/IFNpbmdsZSBzaG90IHJl
dHJ5PworICAgIC8vIFdvdWxkIHJldHJ5IHJlYWxseSBoZWxwIHRvIHJlY292ZXIgZnJvbSB0aGlz
IGVycm9yIC8gY291bGQgaXQgYmUgaGFybWZ1bCBpbiBzb21lIHNpdHVhdGlvbnM/CisKKyAgICAv
LyBGSVhNRTogVGhpcyBjb3VsZCBiZSBjaGFuZ2VkIHRvIHVzZSBzdGF0aWMgc2luZ2xlIHNob3Qg
dGltZXIgbWV0aG9kCisgICAgUVRpbWVyKiB0aW1lciA9IG5ldyBRVGltZXIodGhpcyk7CisjaWYg
IVVTRV9PT1BfTk9USUZJQ0FUSU9OCisgICAgY29ubmVjdCh0aW1lciwgU0lHTkFMKHRpbWVvdXQo
KSksIGluZm9CYW5uZXIsIFNMT1QoZGlzYXBwZWFyKCkpKTsKKyAgICBjb25uZWN0KHRpbWVyLCBT
SUdOQUwodGltZW91dCgpKSwgdGhpcywgU0lHTkFMKG5vdGlmaWNhdGlvbkNsb3NlZCgpKSk7Cisj
ZW5kaWYKKyAgICB0aW1lci0+c2V0U2luZ2xlU2hvdCh0cnVlKTsKKyAgICB0aW1lci0+c3RhcnQo
MzAwMCk7Cit9CkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L3BsYXRmb3JtcGx1Z2luL21lZWdvL3dl
Ym5vdGlmaWNhdGlvbnByZXNlbnRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQv
cGxhdGZvcm1wbHVnaW4vbWVlZ28vd2Vibm90aWZpY2F0aW9ucHJlc2VudGVyLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvV2ViS2l0L3F0L3BsYXRmb3JtcGx1Z2luL21lZWdvL3dlYm5vdGlmaWNh
dGlvbnByZXNlbnRlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgt
aWVzKS4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
KgorICovCisKKyNpZm5kZWYgd2Vibm90aWZpY2F0aW9ucHJlc2VudGVyX2gKKyNkZWZpbmUgd2Vi
bm90aWZpY2F0aW9ucHJlc2VudGVyX2gKKworI2luY2x1ZGUgInF3ZWJraXRwbGF0Zm9ybXBsdWdp
bi5oIgorCisjaW5jbHVkZSA8UUJhc2ljVGltZXI+CisKK2NsYXNzIFdlYk5vdGlmaWNhdGlvblBy
ZXNlbnRlciA6IHB1YmxpYyBRV2ViTm90aWZpY2F0aW9uUHJlc2VudGVyIHsKKyAgICBRX09CSkVD
VAorcHVibGljOgorICAgIFdlYk5vdGlmaWNhdGlvblByZXNlbnRlcigpOworICAgIHZpcnR1YWwg
fldlYk5vdGlmaWNhdGlvblByZXNlbnRlcigpIHsgfQorCisgICAgdm9pZCBzaG93Tm90aWZpY2F0
aW9uKGNvbnN0IFFXZWJOb3RpZmljYXRpb25EYXRhKik7CisKK3ByaXZhdGU6CisgICAgUUJhc2lj
VGltZXIgbV90aW1lcjsKKyAgICBRU3RyaW5nIG1fZmlsZU5hbWU7Cit9OworCisjZW5kaWYgLy8g
d2Vibm90aWZpY2F0aW9ucHJlc2VudGVyX2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvcGxhdGZv
cm1wbHVnaW4vbWVlZ28vZGViaWFuL2NoYW5nZWxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L3F0L3BsYXRmb3JtcGx1Z2luL21lZWdvL2RlYmlhbi9jaGFuZ2Vsb2cJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvV2ViS2l0L3F0L3BsYXRmb3JtcGx1Z2luL21lZWdvL2RlYmlhbi9jaGFuZ2Vs
b2cJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNSBAQAorcXR3ZWJraXQtbWVlZ290b3VjaHBsdWdp
biAoMC4xLjAuMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgKiBJbml0aWFsIHJlbGVhc2Uu
CisKKyAtLSBNYWhlc2ggS3Vsa2FybmkgPG1haGVzaC5rdWxrYXJuaUBub2tpYS5jb20+ICBTYXQs
IDA3IE1heSAyMDExIDA4OjQ5OjAwICswNTMwCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L3BsYXRm
b3JtcGx1Z2luL21lZWdvL2RlYmlhbi9jb21wYXQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9xdC9wbGF0Zm9ybXBsdWdpbi9tZWVnby9kZWJpYW4vY29tcGF0CShyZXZpc2lvbiAwKQorKysg
U291cmNlL1dlYktpdC9xdC9wbGF0Zm9ybXBsdWdpbi9tZWVnby9kZWJpYW4vY29tcGF0CShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxIEBACis1CkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L3BsYXRmb3Jt
cGx1Z2luL21lZWdvL2RlYmlhbi9jb250cm9sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
cXQvcGxhdGZvcm1wbHVnaW4vbWVlZ28vZGViaWFuL2NvbnRyb2wJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvV2ViS2l0L3F0L3BsYXRmb3JtcGx1Z2luL21lZWdvL2RlYmlhbi9jb250cm9sCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDIwIEBACitTb3VyY2U6IHF0d2Via2l0LW1lZWdvdG91Y2hwbHVn
aW4KK1NlY3Rpb246IGxpYnMKK1ByaW9yaXR5OiBvcHRpb25hbAorTWFpbnRhaW5lcjogTWFoZXNo
IEt1bGthcm5pIDxtYWhlc2gua3Vsa2FybmlAbm9raWEuY29tPgorQnVpbGQtRGVwZW5kczogZGVi
aGVscGVyICg+PSA1KSwgbGlicXQ0LWRldiwgbGlibWVlZ290b3VjaC1kZXYsIGxpYnF0bS1zeXN0
ZW1pbmZvLWRldiwgbGlicXRtLW11bHRpbWVkaWEtZGV2CitTdGFuZGFyZHMtVmVyc2lvbjogMy44
LjIKKworUGFja2FnZTogbGlicXR3ZWJraXQtbWVlZ290b3VjaHBsdWdpbgorQXJjaGl0ZWN0dXJl
OiBhbnkKK0RlcGVuZHM6ICR7c2hsaWJzOkRlcGVuZHN9LCAke21pc2M6RGVwZW5kc30KK0Rlc2Ny
aXB0aW9uOiBRdCA0IFdlYktpdCBwbGF0Zm9ybSBwbHVnaW4gZm9yIE1lZWdvIFRvdWNoIEZyYW1l
d29yaworCitQYWNrYWdlOiBsaWJxdHdlYmtpdC1tZWVnb3RvdWNocGx1Z2luLWRiZworUHJpb3Jp
dHk6IGV4dHJhCitBcmNoaXRlY3R1cmU6IGFueQorU2VjdGlvbjogZGVidWcKK0RlcGVuZHM6ICR7
c2hsaWJzOkRlcGVuZHN9LCAke21pc2M6RGVwZW5kc30sIGxpYnF0d2Via2l0LW1lZWdvdG91Y2hw
bHVnaW4gKD0gJHtiaW5hcnk6VmVyc2lvbn0pCitEZXNjcmlwdGlvbjogUXQgNCBXZWJLaXQgcGxh
dGZvcm0gcGx1Z2luIGZvciBNZWVnbyBUb3VjaCBGcmFtZXdvcmsKKyBUaGlzIHBhY2thZ2UgY29u
dGFpbnMgdGhlIGRlYnVnZ2luZyBzeW1ib2xzIGZvciB0aGUgUXQgNCBXZWJLaXQKKyBwbGF0Zm9y
bSBwbHVnaW4gZm9yIE1lZWdvIFRvdWNoIEZyYW1ld29yay4KSW5kZXg6IFNvdXJjZS9XZWJLaXQv
cXQvcGxhdGZvcm1wbHVnaW4vbWVlZ28vZGViaWFuL2xpYnF0d2Via2l0LW1lZWdvdG91Y2hwbHVn
aW4uaW5zdGFsbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L3BsYXRmb3JtcGx1Z2lu
L21lZWdvL2RlYmlhbi9saWJxdHdlYmtpdC1tZWVnb3RvdWNocGx1Z2luLmluc3RhbGwJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L3F0L3BsYXRmb3JtcGx1Z2luL21lZWdvL2RlYmlhbi9s
aWJxdHdlYmtpdC1tZWVnb3RvdWNocGx1Z2luLmluc3RhbGwJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEgQEAKKyoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBUb29scy9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA4NzY5NCkKKysrIFRv
b2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDExLTA1LTMw
ICBNYWhlc2ggS3Vsa2FybmkgIDxtYWhlc2gua3Vsa2FybmlAbm9raWEuY29tPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtRdF0gVXBzdHJlYW0gTWVl
Z28vTWFlbW8gcGxhdGZvcm0gcGx1Z2luCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD01ODQzNgorCisgICAgICAgIEV4ZW1wdGluZyBkaXJlY3RvcnkgV2Vi
S2l0L3F0L3BsYXRmb3JtcGx1Z2luL21lZWdvIGZyb20gc3R5bGUgZ3VpZGUuCisKKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHk6CisKIDIwMTEtMDUtMzAgIENhcmxv
cyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IE1hcnRpbiBSb2JpbnNvbi4KSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUv
Y2hlY2tlci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2No
ZWNrZXIucHkJKHJldmlzaW9uIDg3NjgyKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHls
ZS9jaGVja2VyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xOTksMTAgKzE5OSwxMSBAQCBfUEFUSF9S
VUxFU19TUEVDSUZJRVIgPSBbCiAgICAgICAiK3BlcDgvVzI5MSIsICAjIFRyYWlsaW5nIHdoaXRl
IHNwYWNlCiAgICAgICAiK3doaXRlc3BhY2UvY2FycmlhZ2VfcmV0dXJuIl0pLAogCi0gICAgKFsj
IFF0IFN5bWJpYW4gcGxhdGZvcm0gcGx1Z2luIGhhcyBubyBjb25maWcuaCBvciBoZWFkZXIgZ3Vh
cmQuCisgICAgKFsjIFF0IFN5bWJpYW4vbWVlZ28gcGxhdGZvcm0gcGx1Z2luIGhhcyBubyBjb25m
aWcuaCBvciBoZWFkZXIgZ3VhcmQuCiAgICAgICAjIFF0IGNvZGUgdXNlcyAnXycgaW4gc29tZSBw
bGFjZXMgKHN1Y2ggYXMgcHJpdmF0ZSBzbG90cwogICAgICAgIyBhbmQgb24gdGVzdCB4eHhfZGF0
YSBtZXRob3Mgb24gdGVzdHMpLgotICAgICAgIlNvdXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0
Zm9ybXBsdWdpbi8iXSwKKyAgICAgICJTb3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1w
bHVnaW4vIiwKKyAgICAgICJTb3VyY2UvV2ViS2l0L3F0L3BsYXRmb3JtcGx1Z2luIl0sCiAgICAg
IFsiLXJlYWRhYmlsaXR5L25hbWluZyIsCiAgICAgICAiLWJ1aWxkL2hlYWRlcl9ndWFyZCIsCiAg
ICAgICAiLWJ1aWxkL2luY2x1ZGVfb3JkZXIiXSksCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L3Bs
YXRmb3JtcGx1Z2luL21lZWdvL2ltYWdlcy9idXR0b25fY2Fubm90cGxheS5wbmcKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpDYW5ub3QgZGlzcGxheTogZmlsZSBtYXJrZWQgYXMgYSBiaW5hcnkgdHlwZS4Kc3ZuOm1pbWUt
dHlwZSA9IGltYWdlL3BuZwoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYktpdC9xdC9w
bGF0Zm9ybXBsdWdpbi9tZWVnby9pbWFnZXMvYnV0dG9uX2Nhbm5vdHBsYXkucG5nCl9fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X18KQWRkZWQ6IHN2bjptaW1lLXR5cGUKICAgKyBpbWFnZS9wbmcKCgppVkJPUncwS0dnb0FBQUFO
U1VoRVVnQUFBRkFBQUFCUUNBWUFBQUg1RnNJN0FBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lB
QUFBCkdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUJDWkpS
RUZVZU5xTWtGRUtBQ0FJUTl2dWYrZkYKSUVFRExUOEUzWE9La0xSK2drNEFUSGNUc283am1DRmtx
RGcyWWhubXl5bjZ2TzVCVjkrZ3VwclR1dHpuQUJVNC9qamVhSDBMUUNtVgpKQUVBZ3FEOC82TXRM
VXJvNUswaEJGeXN0UmxNWHovcnhrTGFvUm9XNncwN3d0TmF3YkdycWRnSzRKcTNPdHc1WnRYcm5r
aEVWRVZFCit1NlJncGVjSVBlNlBuT2tURUsyS1FEclpKQUVBQWlDd1BUL2Y2NkxUYVdRSHZSWUF4
VnNUelA3R0MvNGpkZUV2Rms2eUFocEZFVjkKRlJoUTJaaXdDd2pZbUFoUUU3RDFnejJqbXhsbmtl
aG9IbVZmQ1dWVXlWaUxSbUxQUzh0cng2WWQ3Q1VBSmZWMkF5QUlBMUQwaHoxMQpFSTJydUNraWlz
SFN4NFdFR0JKNktGaW9LYmRlMnRtUFNaY3hxVjlwMjQrMjFaVm1KMk9TY2g0TFFiMllMRnRaTlh2
YjkyTHFHZHdECmltclltK3J6YVFkTDBBajdRSUlTN0FkR0tNRUcwRU1KcG9JRXRUQVQ5SDVBV0ZJ
ekdFR25zYkJPYWRIUzR1YzNnQlkvdlFFVXhkakUKalJvbmVIVm1vZWJqRUdFYWFqNE9GUE5pTGdG
b3IyTWNnRUVZaHFMM3YzV2xxbUpBVFlqdHo4QUllUkxFUU5zcDM1RHZHUkhWMWlrbgpiSnVIUTZk
MXlnbkZLWXVoYXAyMTc1T0lUcUFuMkYrYnZtTS9vRFRVaGJVWEhnRk5ZWk11ZHFFSTdBaDBvUlJz
REtTaFU1Z01US0VxCkxBRktaeXlPcDl1d0ZJckQ4QnpGa3g4T2ZEejU4Y0NuWVRSVVhzQ09DN1BP
ZUFFWHBrTGx4d0lGYyt0SS80TkxULzYyemlNQXIyWnkKQkNBTXc4RCt1K2JGTjc1MlZZQkhnb0ZF
aDl2NWxVbHdmQTcrVDJXL3dRN084OXN3U1haeHlqL01JRG5CYWYzK0pNa3BUdnNRSlVodQpjRVlu
L0lYa0ZrZTdnNm43V0JVS2lGZ3cxUXdodVJRdHFPaEJraVNwcXZFOFJaZjhnQ2RCalJNZW1jVmNI
ZTJIdDk0NGF0b1Y0MDZTCjNNUWZrVndta3MxY1NGNEMrRWo4ZGxKQmlXd3drZzhTQ2V0S3FpWGpY
eVVDTmtMMGtaNms5VndzNWIvMEpLam94VDJFWGVRZ01wMVUKNXBvU3ByczZvKzFFN0lOWnhTSjFi
S0xRUG5xYy92QkpsU3h4MnNQRXpzSUdwelZNYm41TWNjcGhZeTFsZ3ZNY3RuWm1KampWTnBDNgpl
ZFRCcVliMUtxTEMrUVFvN3d5U0VJWmhHTWhUZVJvL2hRc0hKZ2VtSkxheUcvb0JXV3FUMkxJblhX
b2RwSG9wcVZaSWExRTNBRDFUCm4ybEl1R2srUHdOOW50ampySkZCeUdvK1UwRGZpaEdxa0YxOGxv
QU1RbmJ6S1FFaUNwbmlVd3BFRURMTnB4MDBKZVF1RG9nZ2pNSmQKbnVlaENrbUpVUkVrT1NiTjI2
YXVDdnl5b1c4bmxvMGJlNkRoVDBCNkpxREl3Y2k1cUNxWkpTYnh1bktLVmtacTYxSksvYTF6Um1n
TwowQkhpYlhWL1RscStPNFE4OGdDSjJtZ25wekFKSWY4aWlXNzFJdzFHSnJtY1V4Z0phR1BYNEFD
VExTMk5kWTUxeUUzQklsK3FzYUdFCmFqV1lXNXFRL2RuZlZOL2FzK2tDM2prZmsrUlREa3lhMEVy
d0tRTW16d2gyOGxrR05rMnBkdkNaQmphTzkzYndxUmpNMWs3cVYvQzUKL091RzRVTHh4L3QrNFB2
dGdHZUZ6d3M2VHl0WjdNSXpTZ0FBQUFCSlJVNUVya0pnZ2c9PQoKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvcXQvcGxhdGZvcm1wbHVnaW4vbWVlZ28vaW1hZ2VzL2J1dHRvbl9jbG9zZS5wbmcKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpDYW5ub3QgZGlzcGxheTogZmlsZSBtYXJrZWQgYXMgYSBiaW5hcnkgdHlwZS4Kc3ZuOm1p
bWUtdHlwZSA9IGltYWdlL3BuZwoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYktpdC9x
dC9wbGF0Zm9ybXBsdWdpbi9tZWVnby9pbWFnZXMvYnV0dG9uX2Nsb3NlLnBuZwpfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
CkFkZGVkOiBzdm46bWltZS10eXBlCiAgICsgaW1hZ2UvcG5nCgoKaVZCT1J3MEtHZ29BQUFBTlNV
aEVVZ0FBQUNnQUFBQW9DQVlBQUFDTS9yaHRBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNC
SgpiV0ZuWlZKbFlXUjVjY2xsUEFBQUFSSkpSRUZVZU5yczJJRU5nakFRQmREV09BQWpNSUlieUFp
T1VEZHdCRFpnQk5oQW5JQTRnUjNCCkRYU0RlazJNS1ZqS2FlUjZhbjl5TVNRUVhtaTlIQWlSOHVP
UkZEY3h4dVR3bzVDbk4xTEtNK2xUQUdCcDhObTcxeTRZcm1yR0hkakwKa3VnK0xkVGFPUzdZUGhI
WVkvWEVIdXlpTGJIRnZmQnZwZ1VHY0RvNk1JRGJRaDJpQWtNNGFNaE4xQ1YrRTNjbGFUT0FxNUM0
MXRPUwpTUFpkNVdraFNuREtvT2Z4d2puSUhkUW1EWTRwZnhlNzhlM2tBYlhpaUZOTys3aXdRZzV3
RHlUMUMwNTNyeHFCZXhveTV3WU9VMHpnClRsQlpWQ0FiM0Fpd1pvTWJBZkxCSVlIeGNBZ2dPVTc2
Z0lIenRUT1NIMkV5THJrQit4ZEQ1Z2F5L3piemxSK1A3TXQwanJoV3A1a3UKNVFPNUNUQUFrQVVU
TkNVZndjY0FBQUFBU1VWT1JLNUNZSUk9CgpJbmRleDogU291cmNlL1dlYktpdC9xdC9wbGF0Zm9y
bXBsdWdpbi9tZWVnby9pbWFnZXMvYnV0dG9uX3BhdXNlLnBuZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5vdCBk
aXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0gaW1h
Z2UvcG5nCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViS2l0L3F0L3BsYXRmb3JtcGx1
Z2luL21lZWdvL2ltYWdlcy9idXR0b25fcGF1c2UucG5nCl9fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpt
aW1lLXR5cGUKICAgKyBpbWFnZS9wbmcKCgppVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQ2dBQUFB
b0NBWUFBQUNNL3JodEFBQUFHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKCmJXRm5aVkpsWVdS
NWNjbGxQQUFBQUlKSlJFRlVlTnJzbUVFTmdEQU1SVnNVVE1Ja0lHRVNjSVlsSkV3Q0RwaURNZ0hR
THVFd0R1OGwKeXc3TmI5KzFGUUVBQUJjejI4eW5PTm5VMytWazkyaitNdUM0QnZVU1pOT0gza09D
VTBFUVFRUVJSQkJCQkJGRUVFRUVFZnk3WUF2cQoxYW1kUVQ3cUxUcTRHNyt0ajAxVmE1RE4vY3VQ
dzFVUExnOEFNSmxiZ0FFQU9ESlRhOURFNG5jQUFBQUFTVVZPUks1Q1lJST0KCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L3F0L3BsYXRmb3JtcGx1Z2luL21lZWdvL2ltYWdlcy9idXR0b25fcGxheS5wbmcK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpDYW5ub3QgZGlzcGxheTogZmlsZSBtYXJrZWQgYXMgYSBiaW5hcnkgdHlwZS4K
c3ZuOm1pbWUtdHlwZSA9IGltYWdlL3BuZwoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dl
YktpdC9xdC9wbGF0Zm9ybXBsdWdpbi9tZWVnby9pbWFnZXMvYnV0dG9uX3BsYXkucG5nCl9fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX18KQWRkZWQ6IHN2bjptaW1lLXR5cGUKICAgKyBpbWFnZS9wbmcKCgppVkJPUncwS0dnb0FB
QUFOU1VoRVVnQUFBQ2dBQUFBb0NBWUFBQUNNL3JodEFBQUFHWFJGV0hSVGIyWjBkMkZ5WlFCQlpH
OWlaU0JKCmJXRm5aVkpsWVdSNWNjbGxQQUFBQVBaSlJFRlVlTnJzbDlFTndpQVFoa3ZUQVJqQkVS
ekJFUnhCTjlBTjdBUzZRYnNCYmxBM3FCdlkKRGV3R2VKZHc2cHRBQmU3aHZ1UWVtaFQ2RmY1U3FD
cEJFQVRoSjlaYURYV0MybkVWM05nUEkxNXpGaVFNMUlxeklQSjBVNis1Q2hLUApvdm4wRUNTR0l2
a01FQ1M2clBtTUVIem5rN1BnZHo2M3NjK3VNN3dmVHJWeCtWeHpGQ1R3NHhsZFBqVkhRUUtYSSs5
bHFTNjBjdUVJCmRwd0ZaNmlqejQxTkFia2VxbFZLVGR3RTd6aHFJSFlMYWRUa21rNFE2Mk1hcHha
c29TNGdOOGQya0VydzZrWnRXdHJSdndWUmFCK2EKc3h6L1l0d1lITGp1Qjg5Y2Q5UUQxelBKb3Ux
VHluT3hLWm96UVJDRU5Md0VHQUJFKy8rOEtwN2ZkUUFBQUFCSlJVNUVya0pnZ2c9PQoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>95577</attachid>
            <date>2011-06-01 03:36:26 -0700</date>
            <delta_ts>2011-06-30 17:17:14 -0700</delta_ts>
            <desc>patch</desc>
            <filename>58436.patch</filename>
            <type>text/plain</type>
            <size>66943</size>
            <attacher name="Mahesh Kulkarni">maheshk</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lvbiA4Nzc3NCkKKysrIFNvdXJjZS9XZWJLaXQvcXQv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTEyIEBACisyMDExLTA1LTMxICBN
YWhlc2ggS3Vsa2FybmkgIDxtYWhlc2gua3Vsa2FybmlAbm9raWEuY29tPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtRdF0gVXBzdHJlYW0gTWVlZ28v
TWFlbW8gcGxhdGZvcm0gcGx1Z2luCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD01ODQzNgorCisgICAgICAgIFVwc3RyZWFtIHBsYXRmb3JtIHBsdWdpbiBv
ZiBtZWVnbyBwbGF0Zm9ybS4KKworICAgICAgICAqIHBsYXRmb3JtcGx1Z2luOiBBZGRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybXBsdWdpbi9tZWVnbzogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm1w
bHVnaW4vbWVlZ28vUkVBRE1FOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybXBsdWdpbi9tZWVn
by9kZWJpYW46IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtcGx1Z2luL21lZWdvL2RlYmlhbi9j
aGFuZ2Vsb2c6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtcGx1Z2luL21lZWdvL2RlYmlhbi9j
b21wYXQ6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtcGx1Z2luL21lZWdvL2RlYmlhbi9jb250
cm9sOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybXBsdWdpbi9tZWVnby9kZWJpYW4vbGlicXR3
ZWJraXQtbWVlZ290b3VjaHBsdWdpbi5pbnN0YWxsOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bXBsdWdpbi9tZWVnby9odG1sNXZpZGVvd2lkZ2V0LmNwcDogQWRkZWQuCisgICAgICAgIChIVE1M
NVZpZGVvV2lkZ2V0OjpIVE1MNVZpZGVvV2lkZ2V0KToKKyAgICAgICAgKEhUTUw1VmlkZW9XaWRn
ZXQ6OnNldER1cmF0aW9uKToKKyAgICAgICAgKEhUTUw1VmlkZW9XaWRnZXQ6Om1vdXNlUHJlc3NF
dmVudCk6CisgICAgICAgIChIVE1MNVZpZGVvV2lkZ2V0OjpvblBsYXllclN0b3BwZWQpOgorICAg
ICAgICAoSFRNTDVWaWRlb1dpZGdldDo6b25QbGF5ZXJFcnJvcik6CisgICAgICAgIChIVE1MNVZp
ZGVvV2lkZ2V0OjpvbkNvbnRyb2xDbGlja2VkKToKKyAgICAgICAgKEhUTUw1VmlkZW9XaWRnZXQ6
Om9uUG9zaXRpb25DaGFuZ2VkKToKKyAgICAgICAgKEhUTUw1VmlkZW9XaWRnZXQ6Om9uU2xpZGVy
TW92ZWQpOgorICAgICAgICAoSFRNTDVWaWRlb1dpZGdldDo6b25DbG9zZUNsaWNrZWQpOgorICAg
ICAgICAoSFRNTDVWaWRlb1dpZGdldDo6c2hvd0Z1bGxTY3JlZW4pOgorICAgICAgICAqIHBsYXRm
b3JtcGx1Z2luL21lZWdvL2h0bWw1dmlkZW93aWRnZXQuaDogQWRkZWQuCisgICAgICAgICogcGxh
dGZvcm1wbHVnaW4vbWVlZ28vaW1hZ2VzOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybXBsdWdp
bi9tZWVnby9pbWFnZXMvYnV0dG9uX2Nhbm5vdHBsYXkucG5nOiBBZGRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybXBsdWdpbi9tZWVnby9pbWFnZXMvYnV0dG9uX2Nsb3NlLnBuZzogQWRkZWQuCisgICAg
ICAgICogcGxhdGZvcm1wbHVnaW4vbWVlZ28vaW1hZ2VzL2J1dHRvbl9wYXVzZS5wbmc6IEFkZGVk
LgorICAgICAgICAqIHBsYXRmb3JtcGx1Z2luL21lZWdvL2ltYWdlcy9idXR0b25fcGxheS5wbmc6
IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtcGx1Z2luL21lZWdvL21lZWdvdG91Y2hwbGF0Zm9y
bXBsdWdpbi5jcHA6IEFkZGVkLgorICAgICAgICAoTWVlZ29Ub3VjaFBsYXRmb3JtUGx1Z2luOjpz
dXBwb3J0c0V4dGVuc2lvbik6CisgICAgICAgIChNZWVnb1RvdWNoUGxhdGZvcm1QbHVnaW46OmNy
ZWF0ZUV4dGVuc2lvbik6CisgICAgICAgIChNZWVnb1RvdWNoUGxhdGZvcm1QbHVnaW46OmNyZWF0
ZVNlbGVjdElucHV0TWV0aG9kKToKKyAgICAgICAgKE1lZWdvVG91Y2hQbGF0Zm9ybVBsdWdpbjo6
Y3JlYXRlTm90aWZpY2F0aW9uUHJlc2VudGVyKToKKyAgICAgICAgKE1lZWdvVG91Y2hQbGF0Zm9y
bVBsdWdpbjo6Y3JlYXRlSGFwdGljRmVlZGJhY2tQbGF5ZXIpOgorICAgICAgICAoTWVlZ29Ub3Vj
aFBsYXRmb3JtUGx1Z2luOjpjcmVhdGVGdWxsc2NyZWVuVmlkZW9IYW5kbGVyKToKKyAgICAgICAg
KiBwbGF0Zm9ybXBsdWdpbi9tZWVnby9tZWVnb3RvdWNocGxhdGZvcm1wbHVnaW4uaDogQWRkZWQu
CisgICAgICAgICogcGxhdGZvcm1wbHVnaW4vbWVlZ28vb3ZlcmxheXdpZGdldC5jcHA6IEFkZGVk
LgorICAgICAgICAoT3ZlcmxheVdpZGdldDo6T3ZlcmxheVdpZGdldCk6CisgICAgICAgIChPdmVy
bGF5V2lkZ2V0Ojp+T3ZlcmxheVdpZGdldCk6CisgICAgICAgIChPdmVybGF5V2lkZ2V0OjpoaWRl
Q29udHJvbHMpOgorICAgICAgICAoT3ZlcmxheVdpZGdldDo6c2V0RHVyYXRpb24pOgorICAgICAg
ICAoT3ZlcmxheVdpZGdldDo6c2V0UG9zaXRpb24pOgorICAgICAgICAoT3ZlcmxheVdpZGdldDo6
bW91c2VQcmVzc0V2ZW50KToKKyAgICAgICAgKE92ZXJsYXlXaWRnZXQ6Om9uUGxheWVyU3RvcHBl
ZCk6CisgICAgICAgIChPdmVybGF5V2lkZ2V0OjpvblBsYXllckVycm9yKToKKyAgICAgICAgKE92
ZXJsYXlXaWRnZXQ6OnRpbWVUb1N0cmluZyk6CisgICAgICAgIChPdmVybGF5V2lkZ2V0OjpvbkNv
bnRyb2xDbGlja2VkKToKKyAgICAgICAgKE92ZXJsYXlXaWRnZXQ6Om9uU2xpZGVyTW92ZWQpOgor
ICAgICAgICAoT3ZlcmxheVdpZGdldDo6b25DbG9zZUNsaWNrZWQpOgorICAgICAgICAoT3Zlcmxh
eVdpZGdldDo6b25UaW1lclRpbWVvdXQpOgorICAgICAgICAoT3ZlcmxheVdpZGdldDo6c2hvd0Z1
bGxTY3JlZW4pOgorICAgICAgICAqIHBsYXRmb3JtcGx1Z2luL21lZWdvL292ZXJsYXl3aWRnZXQu
aDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm1wbHVnaW4vbWVlZ28vcGxheWVyYnV0dG9uLmNw
cDogQWRkZWQuCisgICAgICAgIChQbGF5ZXJCdXR0b246OlBsYXllckJ1dHRvbik6CisgICAgICAg
IChQbGF5ZXJCdXR0b246OmV2ZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybXBsdWdpbi9tZWVnby9w
bGF5ZXJidXR0b24uaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm1wbHVnaW4vbWVlZ28vcXR3
ZWJraXQtbWVlZ290b3VjaHBsdWdpbi5wcm86IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtcGx1
Z2luL21lZWdvL3F3ZWJraXRwbGF0Zm9ybXBsdWdpbi5oOiBBZGRlZC4KKyAgICAgICAgKFFXZWJT
ZWxlY3REYXRhOjp+UVdlYlNlbGVjdERhdGEpOgorICAgICAgICAoUVdlYlNlbGVjdE1ldGhvZDo6
flFXZWJTZWxlY3RNZXRob2QpOgorICAgICAgICAoUVdlYk5vdGlmaWNhdGlvbkRhdGE6On5RV2Vi
Tm90aWZpY2F0aW9uRGF0YSk6CisgICAgICAgIChRV2ViTm90aWZpY2F0aW9uUHJlc2VudGVyOjpR
V2ViTm90aWZpY2F0aW9uUHJlc2VudGVyKToKKyAgICAgICAgKFFXZWJOb3RpZmljYXRpb25QcmVz
ZW50ZXI6On5RV2ViTm90aWZpY2F0aW9uUHJlc2VudGVyKToKKyAgICAgICAgKFFXZWJUb3VjaE1v
ZGlmaWVyOjp+UVdlYlRvdWNoTW9kaWZpZXIpOgorICAgICAgICAoUVdlYkZ1bGxTY3JlZW5WaWRl
b0hhbmRsZXI6OlFXZWJGdWxsU2NyZWVuVmlkZW9IYW5kbGVyKToKKyAgICAgICAgKFFXZWJGdWxs
U2NyZWVuVmlkZW9IYW5kbGVyOjp+UVdlYkZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIpOgorICAgICAg
ICAoUVdlYktpdFBsYXRmb3JtUGx1Z2luOjp+UVdlYktpdFBsYXRmb3JtUGx1Z2luKToKKyAgICAg
ICAgKiBwbGF0Zm9ybXBsdWdpbi9tZWVnby9yZXNvdXJjZS5xcmM6IEFkZGVkLgorICAgICAgICAq
IHBsYXRmb3JtcGx1Z2luL21lZWdvL3NlbGVjdGNvbnRyb2xsZXIuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFNlbGVjdENvbnRyb2xsZXI6On5TZWxlY3RDb250cm9sbGVyKToKKyAgICAgICAgKFNlbGVj
dENvbnRyb2xsZXI6OnNob3cpOgorICAgICAgICAoU2VsZWN0Q29udHJvbGxlcjo6aGlkZSk6Cisg
ICAgICAgIChTZWxlY3RDb250cm9sbGVyOjpkaWFsb2dDbG9zZWQpOgorICAgICAgICAqIHBsYXRm
b3JtcGx1Z2luL21lZWdvL3NlbGVjdGNvbnRyb2xsZXIuaDogQWRkZWQuCisgICAgICAgIChTZWxl
Y3RDb250cm9sbGVyOjpTZWxlY3RDb250cm9sbGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybXBsdWdp
bi9tZWVnby9zZWxlY3RkaWFsb2cuY3BwOiBBZGRlZC4KKyAgICAgICAgKENvbnRlbnRJdGVtQ3Jl
YXRvcjo6Q29udGVudEl0ZW1DcmVhdG9yKToKKyAgICAgICAgKENvbnRlbnRJdGVtQ3JlYXRvcjo6
Y3JlYXRlQ2VsbCk6CisgICAgICAgIChDb250ZW50SXRlbUNyZWF0b3I6OnVwZGF0ZUNlbGwpOgor
ICAgICAgICAoU2VsZWN0RGlhbG9nOjpTZWxlY3REaWFsb2cpOgorICAgICAgICAoU2VsZWN0RGlh
bG9nOjp+U2VsZWN0RGlhbG9nKToKKyAgICAgICAgKFNlbGVjdERpYWxvZzo6cG9wdWxhdGVMaXN0
KToKKyAgICAgICAgKFNlbGVjdERpYWxvZzo6bW9kaWZ5SXRlbVN0YXRlKToKKyAgICAgICAgKiBw
bGF0Zm9ybXBsdWdpbi9tZWVnby9zZWxlY3RkaWFsb2cuaDogQWRkZWQuCisgICAgICAgICogcGxh
dGZvcm1wbHVnaW4vbWVlZ28vd2ViZnVsbHNjcmVlbnZpZGVvaGFuZGxlci5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViRnVsbFNjcmVlblZpZGVvSGFuZGxlcjo6V2ViRnVsbFNjcmVlblZpZGVvSGFu
ZGxlcik6CisgICAgICAgIChXZWJGdWxsU2NyZWVuVmlkZW9IYW5kbGVyOjplbnRlckZ1bGxTY3Jl
ZW4pOgorICAgICAgICAoV2ViRnVsbFNjcmVlblZpZGVvSGFuZGxlcjo6ZXhpdEZ1bGxTY3JlZW4p
OgorICAgICAgICAoV2ViRnVsbFNjcmVlblZpZGVvSGFuZGxlcjo6b25QbGF5ZXJFcnJvcik6Cisg
ICAgICAgIChXZWJGdWxsU2NyZWVuVmlkZW9IYW5kbGVyOjpvblBsYXllclN0YXRlQ2hhbmdlZCk6
CisgICAgICAgICogcGxhdGZvcm1wbHVnaW4vbWVlZ28vd2ViZnVsbHNjcmVlbnZpZGVvaGFuZGxl
ci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkZ1bGxTY3JlZW5WaWRlb0hhbmRsZXI6On5XZWJGdWxs
U2NyZWVuVmlkZW9IYW5kbGVyKToKKyAgICAgICAgKFdlYkZ1bGxTY3JlZW5WaWRlb0hhbmRsZXI6
OnJlcXVpcmVzRnVsbFNjcmVlbkZvclZpZGVvUGxheWJhY2spOgorICAgICAgICAoV2ViRnVsbFNj
cmVlblZpZGVvSGFuZGxlcjo6dXBkYXRlU2NyZWVuUmVjdCk6CisgICAgICAgICogcGxhdGZvcm1w
bHVnaW4vbWVlZ28vd2ViaGFwdGljZmVlZGJhY2twbGF5ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkhhcHRpY0ZlZWRiYWNrUGxheWVyOjpwbGF5SGFwdGljRmVlZGJhY2spOgorICAgICAgICAq
IHBsYXRmb3JtcGx1Z2luL21lZWdvL3dlYmhhcHRpY2ZlZWRiYWNrcGxheWVyLmg6IEFkZGVkLgor
ICAgICAgICAqIHBsYXRmb3JtcGx1Z2luL21lZWdvL3dlYm5vdGlmaWNhdGlvbnByZXNlbnRlci5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViTm90aWZpY2F0aW9uUHJlc2VudGVyOjpXZWJOb3RpZmlj
YXRpb25QcmVzZW50ZXIpOgorICAgICAgICAoV2ViTm90aWZpY2F0aW9uUHJlc2VudGVyOjpzaG93
Tm90aWZpY2F0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybXBsdWdpbi9tZWVnby93ZWJub3RpZmlj
YXRpb25wcmVzZW50ZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJOb3RpZmljYXRpb25QcmVzZW50
ZXI6On5XZWJOb3RpZmljYXRpb25QcmVzZW50ZXIpOgorCiAyMDExLTA1LTMxICBSYWZhZWwgQnJh
bmRhbyAgPHJhZmFlbC5sb2JvQG9wZW5ib3NzYS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
QW5kcmVhcyBLbGluZy4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvcGxhdGZvcm1wbHVnaW4vbWVl
Z28vUkVBRE1FCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvcGxhdGZvcm1wbHVnaW4v
bWVlZ28vUkVBRE1FCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9xdC9wbGF0Zm9ybXBs
dWdpbi9tZWVnby9SRUFETUUJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTYgQEAKK1RoaXMgc291
cmNlIHRyZWUgY29udGFpbnMgdGhlIFF0V2ViS2l0IHBsYXRmb3JtIHBsdWdpbiBmb3IgTWVlZ28g
VG91Y2ggRnJhbWV3b3JrCisKK1ByZXJlcXVpc2l0ZXMKKz09PT09PT09PT09PT0KKyogTWVlZ28g
VG91Y2ggCisgICBzdWRvIGFwdC1nZXQgaW5zdGFsbCB4MTFwcm90by1kYW1hZ2UtZGV2IGxpYnhk
YW1hZ2UtZGV2IGxpYmdzdHJlYW1lci1wbHVnaW5zLWJhc2UwLjEwLWRldiBsaWJnY29uZjItZGV2
IGxpYm1lZWdvdG91Y2gtZGV2CisKKyogUXRXZWJraXQgMi4xCisgICAgQ29tcGlsZSBRdFdlYktp
dDIuMSB3aXRoIGZvbGxvd2luZyBERUZJTkVTIGVuYWJsZWQgRU5BQkxFX05PX0xJU1RCT1hfUkVO
REVSSU5HIGFuZCBFTkFCTEVfTk9USUZJQ0FUSU9OUworCisjIFF0TW9iaWxpdHkgMS4xCisgICBS
ZXF1aXJlcyBsaWJxdG0tc3lzdGVtaW5mby1kZXYsIGxpYnF0bS1tdWx0aW1lZGlhLWRldgorCitC
dWlsZGluZyBRdFdlYktpdCBwbGF0Zm9ybSBwbHVnaW4gZm9yIE1lZWdvIFRvdWNoIEZyYW1ld29y
aworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KK2Rwa2ctYnVpbGRwYWNrYWdlIC1yZmFrZXJvb3QKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
cXQvcGxhdGZvcm1wbHVnaW4vbWVlZ28vaHRtbDV2aWRlb3dpZGdldC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9xdC9wbGF0Zm9ybXBsdWdpbi9tZWVnby9odG1sNXZpZGVvd2lkZ2V0
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvcXQvcGxhdGZvcm1wbHVnaW4vbWVl
Z28vaHRtbDV2aWRlb3dpZGdldC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJz
aWRpYXJ5KC1pZXMpCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiaHRtbDV2aWRlb3dpZGdldC5oIgorCitIVE1MNVZp
ZGVvV2lkZ2V0OjpIVE1MNVZpZGVvV2lkZ2V0KFFXaWRnZXQgKnBhcmVudCkKKyAgICA6IFFWaWRl
b1dpZGdldChwYXJlbnQpCisgICAgLCBtX292ZXJsYXlXaWRnZXQobmV3IE92ZXJsYXlXaWRnZXQo
dGhpcykpCit7CisgICAgY29ubmVjdChtX292ZXJsYXlXaWRnZXQsIFNJR05BTChjb250cm9sQ2xp
Y2tlZChib29sKSksIHRoaXMsIFNMT1Qob25Db250cm9sQ2xpY2tlZChib29sKSkpOworICAgIGNv
bm5lY3QobV9vdmVybGF5V2lkZ2V0LCBTSUdOQUwoc2xpZGVyTW92ZWQoaW50KSksIHRoaXMsIFNM
T1Qob25TbGlkZXJNb3ZlZChpbnQpKSk7CisgICAgY29ubmVjdChtX292ZXJsYXlXaWRnZXQsIFNJ
R05BTChjbG9zZUNsaWNrZWQoKSksIHRoaXMsIFNMT1Qob25DbG9zZUNsaWNrZWQoKSkpOworICAg
IG1fb3ZlcmxheVdpZGdldC0+c2V0U2l6ZVBvbGljeShRU2l6ZVBvbGljeTo6SWdub3JlZCwgUVNp
emVQb2xpY3k6Oklnbm9yZWQpOworfQorCit2b2lkIEhUTUw1VmlkZW9XaWRnZXQ6OnNldER1cmF0
aW9uKHFpbnQ2NCBkdXJhdGlvbikKK3sKKyAgICBtX292ZXJsYXlXaWRnZXQtPnNldER1cmF0aW9u
KGR1cmF0aW9uIC8gMTAwMCk7Cit9CisKK3ZvaWQgSFRNTDVWaWRlb1dpZGdldDo6bW91c2VQcmVz
c0V2ZW50KFFNb3VzZUV2ZW50ICopCit7CisgICAgbV9vdmVybGF5V2lkZ2V0LT5zaG93RnVsbFNj
cmVlbigpOworfQorCit2b2lkIEhUTUw1VmlkZW9XaWRnZXQ6Om9uUGxheWVyU3RvcHBlZCgpCit7
CisgICAgbV9vdmVybGF5V2lkZ2V0LT5vblBsYXllclN0b3BwZWQoKTsKK30KKwordm9pZCBIVE1M
NVZpZGVvV2lkZ2V0OjpvblBsYXllckVycm9yKCkKK3sKKyAgICBtX292ZXJsYXlXaWRnZXQtPm9u
UGxheWVyRXJyb3IoKTsKK30KKwordm9pZCBIVE1MNVZpZGVvV2lkZ2V0OjpvbkNvbnRyb2xDbGlj
a2VkKGJvb2wgaXNQYXVzZWQpCit7CisgICAgaWYgKGlzUGF1c2VkKQorICAgICAgICBlbWl0IHBh
dXNlQ2xpY2tlZCgpOworICAgIGVsc2UKKyAgICAgICAgZW1pdCBwbGF5Q2xpY2tlZCgpOworfQor
Cit2b2lkIEhUTUw1VmlkZW9XaWRnZXQ6Om9uUG9zaXRpb25DaGFuZ2VkKHFpbnQ2NCBwb3NpdGlv
bikKK3sKKyAgICBtX292ZXJsYXlXaWRnZXQtPnNldFBvc2l0aW9uKHBvc2l0aW9uIC8gMTAwMCk7
Cit9CisKK3ZvaWQgSFRNTDVWaWRlb1dpZGdldDo6b25TbGlkZXJNb3ZlZChpbnQgdmFsdWUpCit7
CisgICAgZW1pdCBwb3NpdGlvbkNoYW5nZWRCeVVzZXIoKChxaW50NjQpdmFsdWUpICogMTAwMCk7
Cit9CisKK3ZvaWQgSFRNTDVWaWRlb1dpZGdldDo6b25DbG9zZUNsaWNrZWQoKQoreworICAgIGhp
ZGUoKTsKKyAgICBlbWl0IGNsb3NlQ2xpY2tlZCgpOworfQorCit2b2lkIEhUTUw1VmlkZW9XaWRn
ZXQ6OnNob3dGdWxsU2NyZWVuKCkKK3sKKyAgICBzZXRGdWxsU2NyZWVuKHRydWUpOworICAgIG1f
b3ZlcmxheVdpZGdldC0+c2hvd0Z1bGxTY3JlZW4oKTsKK30KSW5kZXg6IFNvdXJjZS9XZWJLaXQv
cXQvcGxhdGZvcm1wbHVnaW4vbWVlZ28vaHRtbDV2aWRlb3dpZGdldC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvcXQvcGxhdGZvcm1wbHVnaW4vbWVlZ28vaHRtbDV2aWRlb3dpZGdldC5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9xdC9wbGF0Zm9ybXBsdWdpbi9tZWVnby9o
dG1sNXZpZGVvd2lkZ2V0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5
KC1pZXMpCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICoKKyAqLworCisjaWZuZGVmIGh0bWw1dmlkZW93aWRnZXRfaAorI2RlZmluZSBodG1sNXZpZGVv
d2lkZ2V0X2gKKworI2luY2x1ZGUgIm92ZXJsYXl3aWRnZXQuaCIKKworI2luY2x1ZGUgPFFWaWRl
b1dpZGdldD4KKworY2xhc3MgSFRNTDVWaWRlb1dpZGdldCA6IHB1YmxpYyBRVmlkZW9XaWRnZXQg
eworICAgIFFfT0JKRUNUCitwdWJsaWM6CisgICAgSFRNTDVWaWRlb1dpZGdldChRV2lkZ2V0KiBw
YXJlbnQgPSAwKTsKKyAgICB2b2lkIG1vdXNlUHJlc3NFdmVudChRTW91c2VFdmVudCopOworICAg
IHZvaWQgb25QbGF5ZXJTdG9wcGVkKCk7CisgICAgdm9pZCBvblBsYXllckVycm9yKCk7CisKK3By
aXZhdGUgc2xvdHM6CisgICAgdm9pZCBvbkNvbnRyb2xDbGlja2VkKGJvb2wpOworICAgIHZvaWQg
b25Qb3NpdGlvbkNoYW5nZWQocWludDY0KTsKKyAgICB2b2lkIG9uU2xpZGVyTW92ZWQoaW50KTsK
KyAgICB2b2lkIG9uQ2xvc2VDbGlja2VkKCk7CisKK3B1YmxpYyBzbG90czoKKyAgICB2b2lkIHNo
b3dGdWxsU2NyZWVuKCk7CisgICAgdm9pZCBzZXREdXJhdGlvbihxaW50NjQpOworCitzaWduYWxz
OgorICAgIHZvaWQgcGF1c2VDbGlja2VkKCk7CisgICAgdm9pZCBwbGF5Q2xpY2tlZCgpOworICAg
IHZvaWQgcG9zaXRpb25DaGFuZ2VkQnlVc2VyKHFpbnQ2NCk7CisgICAgdm9pZCBjbG9zZUNsaWNr
ZWQoKTsKKyAgICB2b2lkIG11dGVkKGJvb2wpOworICAgIHZvaWQgdm9sdW1lQ2hhbmdlZChpbnQp
OworCitwcml2YXRlOgorICAgIE92ZXJsYXlXaWRnZXQqIG1fb3ZlcmxheVdpZGdldDsKK307CisK
KyNlbmRpZiAvKiBodG1sNXZpZGVvd2lkZ2V0X2ggKi8KSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQv
cGxhdGZvcm1wbHVnaW4vbWVlZ28vbWVlZ290b3VjaHBsYXRmb3JtcGx1Z2luLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L3BsYXRmb3JtcGx1Z2luL21lZWdvL21lZWdvdG91Y2hw
bGF0Zm9ybXBsdWdpbi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L3F0L3BsYXRm
b3JtcGx1Z2luL21lZWdvL21lZWdvdG91Y2hwbGF0Zm9ybXBsdWdpbi5jcHAJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9y
YXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAibWVlZ290b3Vj
aHBsYXRmb3JtcGx1Z2luLmgiCisKKyNpbmNsdWRlICJzZWxlY3Rjb250cm9sbGVyLmgiCisjaW5j
bHVkZSAid2ViaGFwdGljZmVlZGJhY2twbGF5ZXIuaCIKKyNpbmNsdWRlICJ3ZWJub3RpZmljYXRp
b25wcmVzZW50ZXIuaCIKKyNpbmNsdWRlICJ3ZWJmdWxsc2NyZWVudmlkZW9oYW5kbGVyLmgiCisK
KyNpbmNsdWRlIDxNQXBwbGljYXRpb24+CisjaW5jbHVkZSA8UXRQbHVnaW4+CisKK2Jvb2wgTWVl
Z29Ub3VjaFBsYXRmb3JtUGx1Z2luOjpzdXBwb3J0c0V4dGVuc2lvbihFeHRlbnNpb24gZXh0ZW5z
aW9uKSBjb25zdAoreworICAgIHN3aXRjaCAoZXh0ZW5zaW9uKSB7CisgICAgY2FzZSBNdWx0aXBs
ZVNlbGVjdGlvbnM6CisgICAgY2FzZSBOb3RpZmljYXRpb25zOgorICAgIGNhc2UgSGFwdGljczoK
KyAgICBjYXNlIEZ1bGxTY3JlZW5WaWRlb1BsYXllcjoKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworUU9iamVjdCog
TWVlZ29Ub3VjaFBsYXRmb3JtUGx1Z2luOjpjcmVhdGVFeHRlbnNpb24oRXh0ZW5zaW9uIGV4dGVu
c2lvbikgY29uc3QKK3sKKyAgICBzd2l0Y2ggKGV4dGVuc2lvbikgeworICAgIGNhc2UgTXVsdGlw
bGVTZWxlY3Rpb25zOgorICAgICAgICByZXR1cm4gY3JlYXRlU2VsZWN0SW5wdXRNZXRob2QoKTsK
KyAgICBjYXNlIE5vdGlmaWNhdGlvbnM6CisgICAgICAgIHJldHVybiBjcmVhdGVOb3RpZmljYXRp
b25QcmVzZW50ZXIoKTsKKyAgICBjYXNlIEhhcHRpY3M6CisgICAgICAgIHJldHVybiBjcmVhdGVI
YXB0aWNGZWVkYmFja1BsYXllcigpOworI2lmIGRlZmluZWQoV1RGX1VTRV9RVF9NVUxUSU1FRElB
KSAmJiBXVEZfVVNFX1FUX01VTFRJTUVESUEKKyAgICBjYXNlIEZ1bGxTY3JlZW5WaWRlb1BsYXll
cjoKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUZ1bGxzY3JlZW5WaWRlb0hhbmRsZXIoKTsKKyNlbmRp
ZgorICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKworCitRV2ViU2Vs
ZWN0TWV0aG9kKiBNZWVnb1RvdWNoUGxhdGZvcm1QbHVnaW46OmNyZWF0ZVNlbGVjdElucHV0TWV0
aG9kKCkgY29uc3QKK3sKKyAgICAvLyBPbmx5IHVzZSB0aGUgTURpYWxvZyBmb3IgTUFwcGxpY2F0
aW9ucy4gVGhlcmUgbXVzdCBiZSBhbiBNV2luZG93IGF2YWlsYWJsZSB0bworICAgIC8vIHNob3cg
TURpYWxvZy4KKyAgICBpZiAocW9iamVjdF9jYXN0PE1BcHBsaWNhdGlvbio+KFFDb3JlQXBwbGlj
YXRpb246Omluc3RhbmNlKCkpICYmIE1BcHBsaWNhdGlvbjo6YWN0aXZlV2luZG93KCkpCisgICAg
ICAgIHJldHVybiBuZXcgU2VsZWN0Q29udHJvbGxlcigpOworICAgIHJldHVybiAwOworfQorCitR
V2ViTm90aWZpY2F0aW9uUHJlc2VudGVyKiBNZWVnb1RvdWNoUGxhdGZvcm1QbHVnaW46OmNyZWF0
ZU5vdGlmaWNhdGlvblByZXNlbnRlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG5ldyBXZWJOb3Rp
ZmljYXRpb25QcmVzZW50ZXIoKTsKK30KKworUVdlYkhhcHRpY0ZlZWRiYWNrUGxheWVyKiBNZWVn
b1RvdWNoUGxhdGZvcm1QbHVnaW46OmNyZWF0ZUhhcHRpY0ZlZWRiYWNrUGxheWVyKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbmV3IFdlYkhhcHRpY0ZlZWRiYWNrUGxheWVyKCk7Cit9CisKKyNpZiBk
ZWZpbmVkKFdURl9VU0VfUVRfTVVMVElNRURJQSkgJiYgV1RGX1VTRV9RVF9NVUxUSU1FRElBCitR
V2ViRnVsbFNjcmVlblZpZGVvSGFuZGxlciogTWVlZ29Ub3VjaFBsYXRmb3JtUGx1Z2luOjpjcmVh
dGVGdWxsc2NyZWVuVmlkZW9IYW5kbGVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbmV3IFdlYkZ1
bGxTY3JlZW5WaWRlb0hhbmRsZXIoKTsKK30KKyNlbmRpZgorCitRX0VYUE9SVF9QTFVHSU4yKHF3
ZWJzZWxlY3RpbSwgTWVlZ29Ub3VjaFBsYXRmb3JtUGx1Z2luKQpJbmRleDogU291cmNlL1dlYktp
dC9xdC9wbGF0Zm9ybXBsdWdpbi9tZWVnby9tZWVnb3RvdWNocGxhdGZvcm1wbHVnaW4uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L3BsYXRmb3JtcGx1Z2luL21lZWdvL21lZWdvdG91
Y2hwbGF0Zm9ybXBsdWdpbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9xdC9wbGF0
Zm9ybXBsdWdpbi9tZWVnby9tZWVnb3RvdWNocGxhdGZvcm1wbHVnaW4uaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3Jh
dGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisjaWZuZGVmIG1lZWdvdG91Y2hwbGF0
Zm9ybXBsdWdpbl9oCisjZGVmaW5lIG1lZWdvdG91Y2hwbGF0Zm9ybXBsdWdpbl9oCisKKyNpbmNs
dWRlICJxd2Via2l0cGxhdGZvcm1wbHVnaW4uaCIKKworY2xhc3MgTWVlZ29Ub3VjaFBsYXRmb3Jt
UGx1Z2luIDogcHVibGljIFFPYmplY3QsIHB1YmxpYyBRV2ViS2l0UGxhdGZvcm1QbHVnaW4gewor
ICAgIFFfT0JKRUNUCisgICAgUV9JTlRFUkZBQ0VTKFFXZWJLaXRQbGF0Zm9ybVBsdWdpbikKKwor
cHVibGljOgorICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0V4dGVuc2lvbihFeHRlbnNpb24pIGNv
bnN0OworICAgIHZpcnR1YWwgUU9iamVjdCogY3JlYXRlRXh0ZW5zaW9uKEV4dGVuc2lvbikgY29u
c3Q7CisKK3ByaXZhdGU6CisgICAgUVdlYlNlbGVjdE1ldGhvZCogY3JlYXRlU2VsZWN0SW5wdXRN
ZXRob2QoKSBjb25zdDsKKyAgICBRV2ViTm90aWZpY2F0aW9uUHJlc2VudGVyKiBjcmVhdGVOb3Rp
ZmljYXRpb25QcmVzZW50ZXIoKSBjb25zdDsKKyAgICBRV2ViSGFwdGljRmVlZGJhY2tQbGF5ZXIq
IGNyZWF0ZUhhcHRpY0ZlZWRiYWNrUGxheWVyKCkgY29uc3Q7CisgICAgUVdlYkZ1bGxTY3JlZW5W
aWRlb0hhbmRsZXIqIGNyZWF0ZUZ1bGxzY3JlZW5WaWRlb0hhbmRsZXIoKSBjb25zdDsKK307CisK
KyNlbmRpZiAvLyBtZWVnb3RvdWNocGxhdGZvcm1wbHVnaW5faApJbmRleDogU291cmNlL1dlYktp
dC9xdC9wbGF0Zm9ybXBsdWdpbi9tZWVnby9vdmVybGF5d2lkZ2V0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L3F0L3BsYXRmb3JtcGx1Z2luL21lZWdvL292ZXJsYXl3aWRnZXQuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9xdC9wbGF0Zm9ybXBsdWdpbi9tZWVnby9v
dmVybGF5d2lkZ2V0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNzkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5
KC1pZXMpCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICoKKyAqLworI2luY2x1ZGUgIm92ZXJsYXl3aWRnZXQuaCIKKworI2luY2x1ZGUgPFF0R3VpPgor
I2luY2x1ZGUgPFFUaW1lcj4KKworI2RlZmluZSBMQUJFTF9DT0xPUiAid2hpdGUiCisKK092ZXJs
YXlXaWRnZXQ6Ok92ZXJsYXlXaWRnZXQoUVdpZGdldCogcGFyZW50KQorICAgIDogUVdpZGdldCgw
LCBRdDo6RnJhbWVsZXNzV2luZG93SGludCkKKyAgICAsIG1faXNQYXVzZWQoZmFsc2UpCit7Cisg
ICAgbV9wbGF5SWNvbiA9IFFJY29uKCI6L2ltYWdlcy9idXR0b25fcGxheS5wbmciKTsKKyAgICBt
X3BhdXNlSWNvbiA9IFFJY29uKCI6L2ltYWdlcy9idXR0b25fcGF1c2UucG5nIik7CisKKyAgICBt
X2NvbnRyb2xCdXR0b24gPSBuZXcgUGxheWVyQnV0dG9uKHRoaXMpOworICAgIG1fY29udHJvbEJ1
dHRvbi0+c2V0SWNvbihtX3BhdXNlSWNvbik7CisgICAgY29ubmVjdChtX2NvbnRyb2xCdXR0b24s
IFNJR05BTChjbGlja2VkKCkpLCB0aGlzLCBTTE9UKG9uQ29udHJvbENsaWNrZWQoKSkpOworCisg
ICAgbV9zbGlkZXIgPSBuZXcgUVNsaWRlcihRdDo6SG9yaXpvbnRhbCwgdGhpcyk7CisgICAgbV9z
bGlkZXItPnNldFRyYWNraW5nKGZhbHNlKTsKKyAgICBtX3NsaWRlci0+c2V0VGlja1Bvc2l0aW9u
KFFTbGlkZXI6Ok5vVGlja3MpOworICAgIGNvbm5lY3QobV9zbGlkZXIsIFNJR05BTChzbGlkZXJN
b3ZlZChpbnQpKSwgdGhpcywgU0xPVChvblNsaWRlck1vdmVkKGludCkpKTsKKworICAgIG1fcG9z
aXRpb25MYWJlbCA9IG5ldyBRTGFiZWwodGhpcyk7CisgICAgbV9wb3NpdGlvbkxhYmVsLT5zZXRU
ZXh0KHRpbWVUb1N0cmluZygwKSk7CisgICAgbV9kdXJhdGlvbkxhYmVsID0gbmV3IFFMYWJlbCh0
aGlzKTsKKyAgICBtX2R1cmF0aW9uTGFiZWwtPnNldFRleHQodGltZVRvU3RyaW5nKDApKTsKKwor
ICAgIG1fY2xvc2VCdXR0b24gPSBuZXcgUGxheWVyQnV0dG9uKHRoaXMpOworICAgIG1fY2xvc2VC
dXR0b24tPnNldEljb24oUUljb24oIjovaW1hZ2VzL2J1dHRvbl9jbG9zZS5wbmciKSk7CisgICAg
Y29ubmVjdChtX2Nsb3NlQnV0dG9uLCBTSUdOQUwoY2xpY2tlZCgpKSwgdGhpcywgU0xPVChvbkNs
b3NlQ2xpY2tlZCgpKSk7CisKKyAgICBtX2xhYmVsID0gbmV3IFFMYWJlbCh0aGlzKTsKKyAgICBt
X2xhYmVsLT5zZXRQaXhtYXAoUVBpeG1hcCgiOi9pbWFnZXMvYnV0dG9uX2Nhbm5vdHBsYXkucG5n
Iikuc2NhbGVkKFFTaXplKDgwLCA4MCkpKTsKKyAgICBtX2xhYmVsLT5oaWRlKCk7CisKKyAgICBR
UGFsZXR0ZSBwYWw7CisgICAgLy8gU2VtaS10cmFuc3BhcmVudCBiYWNrZ3JvdW5kIGNvbG9yIGZv
ciB0b29sYmFyLiBKdXN0IDgwJSBvcGFxdWUKKyAgICBwYWwuc2V0Q29sb3IoUVBhbGV0dGU6OkJ1
dHRvbiwgUUNvbG9yKDAsIDAsIDAsIDE2MCkpOworICAgIAorICAgIG1fdG9vbEJhciA9IG5ldyBR
VG9vbEJhcigpOworICAgIG1fdG9vbEJhci0+c2V0QXV0b0ZpbGxCYWNrZ3JvdW5kKHRydWUpOwor
ICAgIG1fdG9vbEJhci0+c2V0UGFsZXR0ZShwYWwpOworICAgIG1fdG9vbEJhci0+YWRkV2lkZ2V0
KG1fY29udHJvbEJ1dHRvbik7CisgICAgbV90b29sQmFyLT5hZGRXaWRnZXQobV9wb3NpdGlvbkxh
YmVsKTsKKyAgICBtX3Rvb2xCYXItPmFkZFdpZGdldChtX3NsaWRlcik7CisgICAgbV90b29sQmFy
LT5hZGRXaWRnZXQobV9kdXJhdGlvbkxhYmVsKTsKKyAgICBtX3Rvb2xCYXItPmFkZFdpZGdldCht
X2Nsb3NlQnV0dG9uKTsKKyAgICBRQm94TGF5b3V0KiBjb250cm9sTGF5b3V0ID0gbmV3IFFIQm94
TGF5b3V0OworICAgIGNvbnRyb2xMYXlvdXQtPmFkZFdpZGdldChtX3Rvb2xCYXIpOworCisgICAg
UUdyaWRMYXlvdXQqIGxheW91dCA9IG5ldyBRR3JpZExheW91dDsKKyAgICBsYXlvdXQtPmFkZFdp
ZGdldChtX2xhYmVsLCAxLCAwLCBRdDo6QWxpZ25DZW50ZXIpOworICAgIGxheW91dC0+YWRkTGF5
b3V0KGNvbnRyb2xMYXlvdXQsIDIsIDAsIFF0OjpBbGlnbkJvdHRvbSk7CisgICAgc2V0TGF5b3V0
KGxheW91dCk7CisKKyAgICBtX3RpbWVyID0gbmV3IFFUaW1lcih0aGlzKTsKKyAgICBtX3RpbWVy
LT5zZXRTaW5nbGVTaG90KHRydWUpOworICAgIG1fdGltZXItPnNldEludGVydmFsKDMwMDApOwor
ICAgIGNvbm5lY3QobV90aW1lciwgU0lHTkFMKHRpbWVvdXQoKSksIHRoaXMsIFNMT1Qob25UaW1l
clRpbWVvdXQoKSkpOworICAgIGNvbm5lY3QobV9zbGlkZXIsIFNJR05BTChzbGlkZXJQcmVzc2Vk
KCkpLCBtX3RpbWVyLCBTTE9UKHN0b3AoKSkpOworICAgIGNvbm5lY3QobV9zbGlkZXIsIFNJR05B
TChzbGlkZXJSZWxlYXNlZCgpKSwgbV90aW1lciwgU0xPVChzdGFydCgpKSk7CisKKyAgICBzZXRB
dHRyaWJ1dGUoUXQ6OldBX1RyYW5zbHVjZW50QmFja2dyb3VuZCk7Cit9CisKK092ZXJsYXlXaWRn
ZXQ6On5PdmVybGF5V2lkZ2V0KCkKK3sKKyAgICBkZWxldGUgbV90b29sQmFyOworfQorCit2b2lk
IE92ZXJsYXlXaWRnZXQ6OmhpZGVDb250cm9scyhib29sIGhpZGUpCit7CisgICAgaWYgKGhpZGUp
CisgICAgICAgIG1fdG9vbEJhci0+aGlkZSgpOworICAgIGVsc2UKKyAgICAgICAgbV90b29sQmFy
LT5zaG93KCk7Cit9CisKK3ZvaWQgT3ZlcmxheVdpZGdldDo6c2V0RHVyYXRpb24oaW50IGR1cmF0
aW9uKQoreworICAgIG1fc2xpZGVyLT5zZXRNYXhpbXVtKGR1cmF0aW9uKTsKKyAgICBtX2R1cmF0
aW9uTGFiZWwtPnNldFRleHQodGltZVRvU3RyaW5nKGR1cmF0aW9uKSk7Cit9CisKK3ZvaWQgT3Zl
cmxheVdpZGdldDo6c2V0UG9zaXRpb24oaW50IHBvc2l0aW9uKQoreworICAgIGlmICghbV9zbGlk
ZXItPmlzU2xpZGVyRG93bigpKSB7CisgICAgICAgIG1fc2xpZGVyLT5zZXRWYWx1ZShwb3NpdGlv
bik7CisgICAgICAgIG1fcG9zaXRpb25MYWJlbC0+c2V0VGV4dCh0aW1lVG9TdHJpbmcocG9zaXRp
b24pKTsKKyAgICB9Cit9CisKK3ZvaWQgT3ZlcmxheVdpZGdldDo6bW91c2VQcmVzc0V2ZW50KFFN
b3VzZUV2ZW50ICopCit7CisgICAgaWYgKCFtX2lzUGF1c2VkKSB7CisgICAgICAgIGhpZGVDb250
cm9scyhtX2NvbnRyb2xCdXR0b24tPmlzVmlzaWJsZSgpKTsKKyAgICAgICAgbV90aW1lci0+c3Rh
cnQoKTsKKyAgICB9Cit9CisKK3ZvaWQgT3ZlcmxheVdpZGdldDo6b25QbGF5ZXJTdG9wcGVkKCkK
K3sKKyAgICBoaWRlQ29udHJvbHMoZmFsc2UpOworICAgIG1fdGltZXItPnN0b3AoKTsKKyAgICBt
X2NvbnRyb2xCdXR0b24tPnNldEljb24obV9wbGF5SWNvbik7Cit9CisKK3ZvaWQgT3ZlcmxheVdp
ZGdldDo6b25QbGF5ZXJFcnJvcigpCit7CisgICAgbV9jb250cm9sQnV0dG9uLT5zZXREaXNhYmxl
ZCh0cnVlKTsKKyAgICBtX3NsaWRlci0+c2V0RGlzYWJsZWQodHJ1ZSk7CisgICAgbV9sYWJlbC0+
c2hvdygpOworICAgIHNob3dGdWxsU2NyZWVuKCk7Cit9CisKK1FTdHJpbmcgT3ZlcmxheVdpZGdl
dDo6dGltZVRvU3RyaW5nKGludCBzZWNvbmRzKQoreworICAgIFFUaW1lIGluaXRUaW1lKDAsIDAs
IDApOworICAgIFFUaW1lIHRpbWUgPSBpbml0VGltZS5hZGRTZWNzKHNlY29uZHMpOworICAgIFFT
dHJpbmcgdGV4dFRlbXBsYXRlKCI8Zm9udCBjb2xvcj0nJTEnPiUyPC9mb250PiIpOworICAgIHJl
dHVybiB0ZXh0VGVtcGxhdGUuYXJnKExBQkVMX0NPTE9SLCB0aW1lLmhvdXIoKSA/IHRpbWUudG9T
dHJpbmcoImg6bW06c3MiKQorICAgICAgICA6IHRpbWUudG9TdHJpbmcoIm1tOnNzIikpOworfQor
Cit2b2lkIE92ZXJsYXlXaWRnZXQ6Om9uQ29udHJvbENsaWNrZWQoKQoreworICAgIG1faXNQYXVz
ZWQgPSAhbV9pc1BhdXNlZDsKKyAgICBpZiAobV9pc1BhdXNlZCkKKyAgICAgICAgbV9jb250cm9s
QnV0dG9uLT5zZXRJY29uKG1fcGxheUljb24pOworICAgIGVsc2UKKyAgICAgICAgbV9jb250cm9s
QnV0dG9uLT5zZXRJY29uKG1fcGF1c2VJY29uKTsKKworICAgIG1fdGltZXItPnN0YXJ0KCk7Cisg
ICAgZW1pdCBjb250cm9sQ2xpY2tlZChtX2lzUGF1c2VkKTsKK30KKwordm9pZCBPdmVybGF5V2lk
Z2V0OjpvblNsaWRlck1vdmVkKGludCB2YWx1ZSkKK3sKKyAgICBlbWl0IHNsaWRlck1vdmVkKHZh
bHVlKTsKK30KKwordm9pZCBPdmVybGF5V2lkZ2V0OjpvbkNsb3NlQ2xpY2tlZCgpCit7CisgICAg
bV90aW1lci0+c3RvcCgpOworICAgIGhpZGUoKTsKKyAgICBlbWl0IGNsb3NlQ2xpY2tlZCgpOwor
fQorCit2b2lkIE92ZXJsYXlXaWRnZXQ6Om9uVGltZXJUaW1lb3V0KCkKK3sKKyAgICBpZiAoIW1f
aXNQYXVzZWQpCisgICAgICAgIGhpZGVDb250cm9scyh0cnVlKTsKK30KKwordm9pZCBPdmVybGF5
V2lkZ2V0OjpzaG93RnVsbFNjcmVlbigpCit7CisgICAgbV90aW1lci0+c3RhcnQoKTsKKyAgICBR
V2lkZ2V0OjpzaG93RnVsbFNjcmVlbigpOworfQpJbmRleDogU291cmNlL1dlYktpdC9xdC9wbGF0
Zm9ybXBsdWdpbi9tZWVnby9vdmVybGF5d2lkZ2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9xdC9wbGF0Zm9ybXBsdWdpbi9tZWVnby9vdmVybGF5d2lkZ2V0LmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvV2ViS2l0L3F0L3BsYXRmb3JtcGx1Z2luL21lZWdvL292ZXJsYXl3aWRnZXQu
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5k
ZWYgb3ZlcmxheXdpZGdldF9oCisjZGVmaW5lIG92ZXJsYXl3aWRnZXRfaAorCisjaW5jbHVkZSAi
cGxheWVyYnV0dG9uLmgiCisKK2NsYXNzIFFMYWJlbDsKK2NsYXNzIFFTbGlkZXI7CitjbGFzcyBR
VGltZXI7CitjbGFzcyBRVG9vbEJhcjsKK2NsYXNzIFFXaWRnZXQ7CisKK2NsYXNzIE92ZXJsYXlX
aWRnZXQgOiBwdWJsaWMgUVdpZGdldCB7CisgICAgUV9PQkpFQ1QKK3B1YmxpYzoKKyAgICBPdmVy
bGF5V2lkZ2V0KFFXaWRnZXQqIHBhcmVudCA9IDApOworICAgIH5PdmVybGF5V2lkZ2V0KCk7Cisg
ICAgdm9pZCBzZXREdXJhdGlvbihpbnQpOworICAgIHZvaWQgc2V0UG9zaXRpb24oaW50KTsKKyAg
ICB2b2lkIG1vdXNlUHJlc3NFdmVudChRTW91c2VFdmVudCopOworICAgIHZvaWQgb25QbGF5ZXJT
dG9wcGVkKCk7CisgICAgdm9pZCBvblBsYXllckVycm9yKCk7CisKK3ByaXZhdGU6CisgICAgUVN0
cmluZyB0aW1lVG9TdHJpbmcoaW50KTsKKyAgICB2b2lkIGhpZGVDb250cm9scyhib29sKTsKKwor
cHJpdmF0ZSBzbG90czoKKyAgICB2b2lkIG9uQ29udHJvbENsaWNrZWQoKTsKKyAgICB2b2lkIG9u
U2xpZGVyTW92ZWQoaW50KTsKKyAgICB2b2lkIG9uQ2xvc2VDbGlja2VkKCk7CisgICAgdm9pZCBv
blZvbHVtZVNsaWRlclJlbGVhc2VkKCk7CisgICAgdm9pZCBvblZvbHVtZVNsaWRlck1vdmVkKGlu
dCk7CisgICAgdm9pZCBvblRpbWVyVGltZW91dCgpOworCitwdWJsaWMgc2xvdHM6CisgICAgdm9p
ZCBzaG93RnVsbFNjcmVlbigpOworCitzaWduYWxzOgorICAgIHZvaWQgY29udHJvbENsaWNrZWQo
Ym9vbCk7CisgICAgdm9pZCBzbGlkZXJNb3ZlZChpbnQpOworICAgIHZvaWQgY2xvc2VDbGlja2Vk
KCk7CisKK3ByaXZhdGU6CisgICAgUGxheWVyQnV0dG9uKiBtX2NvbnRyb2xCdXR0b247CisgICAg
Ym9vbCBtX2lzUGF1c2VkOworICAgIFFTbGlkZXIqIG1fc2xpZGVyOworICAgIFFMYWJlbCogbV9w
b3NpdGlvbkxhYmVsOworICAgIFFMYWJlbCogbV9kdXJhdGlvbkxhYmVsOworICAgIFBsYXllckJ1
dHRvbiogbV9jbG9zZUJ1dHRvbjsKKyAgICBRSWNvbiBtX3BsYXlJY29uOworICAgIFFJY29uIG1f
cGF1c2VJY29uOworICAgIFFUaW1lciogbV90aW1lcjsKKyAgICBRTGFiZWwqIG1fbGFiZWw7Cisg
ICAgUVRvb2xCYXIqIG1fdG9vbEJhcjsKK307CisKKyNlbmRpZiAvKiBvdmVybGF5d2lkZ2V0X2gg
Ki8KSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvcGxhdGZvcm1wbHVnaW4vbWVlZ28vcGxheWVyYnV0
dG9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L3BsYXRmb3JtcGx1Z2luL21l
ZWdvL3BsYXllcmJ1dHRvbi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L3F0L3Bs
YXRmb3JtcGx1Z2luL21lZWdvL3BsYXllcmJ1dHRvbi5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5k
L29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAicGxheWVyYnV0dG9uLmgiCisK
KyNpbmNsdWRlIDxRR2VzdHVyZT4KKyNpbmNsdWRlIDxRR2VzdHVyZUV2ZW50PgorCitQbGF5ZXJC
dXR0b246OlBsYXllckJ1dHRvbihRV2lkZ2V0ICpwYXJlbnQpCisgICAgOiBRUHVzaEJ1dHRvbihw
YXJlbnQpCit7CisgICAgZ3JhYkdlc3R1cmUoUXQ6OlRhcEFuZEhvbGRHZXN0dXJlKTsKKyAgICBz
ZXRGaXhlZFNpemUoNTAsIDUwKTsKKyAgICBzZXRJY29uU2l6ZShRU2l6ZSg1MCwgNTApKTsKKyAg
ICBzZXRTdHlsZVNoZWV0KCJib3JkZXI6IG5vbmUiKTsKK30KKworYm9vbCBQbGF5ZXJCdXR0b246
OmV2ZW50KFFFdmVudCAqZXZlbnQpCit7CisgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gUUV2ZW50
OjpHZXN0dXJlKSB7CisgICAgICAgIFFHZXN0dXJlRXZlbnQqIGdlc3R1cmVFdmVudCA9IChRR2Vz
dHVyZUV2ZW50KilzdGF0aWNfY2FzdDxRR2VzdHVyZUV2ZW50Kj4oZXZlbnQpOworICAgICAgICBR
R2VzdHVyZSogZ2VzdHVyZSA9IGdlc3R1cmVFdmVudC0+Z2VzdHVyZShRdDo6VGFwQW5kSG9sZEdl
c3R1cmUpOworICAgICAgICBpZiAoZ2VzdHVyZSAmJiBnZXN0dXJlLT5zdGF0ZSgpID09IFF0OjpH
ZXN0dXJlRmluaXNoZWQpIHsKKyAgICAgICAgICAgIGVtaXQgdGFwQW5kSG9sZCgpOworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIFFQdXNoQnV0
dG9uOjpldmVudChldmVudCk7Cit9CkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L3BsYXRmb3JtcGx1
Z2luL21lZWdvL3BsYXllcmJ1dHRvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQv
cGxhdGZvcm1wbHVnaW4vbWVlZ28vcGxheWVyYnV0dG9uLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvV2ViS2l0L3F0L3BsYXRmb3JtcGx1Z2luL21lZWdvL3BsYXllcmJ1dHRvbi5oCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENv
cnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBwbGF5ZXJi
dXR0b25faAorI2RlZmluZSBwbGF5ZXJidXR0b25faAorCisjaW5jbHVkZSA8UVB1c2hCdXR0b24+
CisKK2NsYXNzIFBsYXllckJ1dHRvbiA6IHB1YmxpYyBRUHVzaEJ1dHRvbiB7CisgICAgUV9PQkpF
Q1QKK3B1YmxpYzoKKyAgICBQbGF5ZXJCdXR0b24oUVdpZGdldCogcGFyZW50ID0gMCk7CisgICAg
Ym9vbCBldmVudChRRXZlbnQqKTsKKworc2lnbmFsczoKKyAgICB2b2lkIHRhcEFuZEhvbGQoKTsK
K307CisKKyNlbmRpZiAvKiBwbGF5ZXJidXR0b25faCAqLwpJbmRleDogU291cmNlL1dlYktpdC9x
dC9wbGF0Zm9ybXBsdWdpbi9tZWVnby9xdHdlYmtpdC1tZWVnb3RvdWNocGx1Z2luLnBybwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L3BsYXRmb3JtcGx1Z2luL21lZWdvL3F0d2Via2l0
LW1lZWdvdG91Y2hwbHVnaW4ucHJvCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9xdC9w
bGF0Zm9ybXBsdWdpbi9tZWVnby9xdHdlYmtpdC1tZWVnb3RvdWNocGx1Z2luLnBybwkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw0OSBAQAorVEVNUExBVEUgPSBsaWIKK0NPTkZJRyArPSBwbHVnaW4g
bW9iaWxpdHkKK1RBUkdFVCA9ICQkcXRMaWJyYXJ5VGFyZ2V0KHF0d2Via2l0LW1lZWdvdG91Y2hw
bHVnaW4pCitRVCAgICAgICArPSBjb3JlIGd1aSBkYnVzCitDT05GSUcgKz0gbWVlZ290b3VjaAor
CitSRVNPVVJDRVMgPSByZXNvdXJjZS5xcmMKKworIyMgbG9hZCBtb2JpbGl0eWNvbmZpZyBpZiBt
b2JpbGl0eSBpcyBhdmFpbGFibGUKK2xvYWQobW9iaWxpdHljb25maWcsIHRydWUpCisKKyMgSFRN
TDUgTWVkaWEgU3VwcG9ydAorIyBXZSByZXF1aXJlIFF0TXVsdGltZWRpYQorY29udGFpbnMoTU9C
SUxJVFlfQ09ORklHLCBtdWx0aW1lZGlhKSB7CisgICAgQ09ORklHICs9IG1vYmlsaXR5CisgICAg
TU9CSUxJVFkgKz0gbXVsdGltZWRpYSBzeXN0ZW1pbmZvCisgICAgREVGSU5FUyArPSBFTkFCTEVf
UVRfTVVMVElNRURJQT0xCit9CisKK1NPVVJDRVMgKz0gXAorICAgIG1lZWdvdG91Y2hwbGF0Zm9y
bXBsdWdpbi5jcHAgXAorICAgIHNlbGVjdGNvbnRyb2xsZXIuY3BwIFwKKyAgICBzZWxlY3RkaWFs
b2cuY3BwIFwKKyAgICB3ZWJub3RpZmljYXRpb25wcmVzZW50ZXIuY3BwIFwKKyAgICB3ZWJoYXB0
aWNmZWVkYmFja3BsYXllci5jcHAgXAorICAgIHdlYmZ1bGxzY3JlZW52aWRlb2hhbmRsZXIuY3Bw
IFwKKyAgICBodG1sNXZpZGVvd2lkZ2V0LmNwcCBcCisgICAgb3ZlcmxheXdpZGdldC5jcHAgXAor
ICAgIHBsYXllcmJ1dHRvbi5jcHAKKworSEVBREVSUyArPSBcCisgICAgcXdlYmtpdHBsYXRmb3Jt
cGx1Z2luLmggXAorICAgIG1lZWdvdG91Y2hwbGF0Zm9ybXBsdWdpbi5oIFwKKyAgICBzZWxlY3Rj
b250cm9sbGVyLmggXAorICAgIHNlbGVjdGRpYWxvZy5oIFwKKyAgICB3ZWJub3RpZmljYXRpb25w
cmVzZW50ZXIuaCBcCisgICAgd2ViaGFwdGljZmVlZGJhY2twbGF5ZXIuaCBcCisgICAgd2ViZnVs
bHNjcmVlbnZpZGVvaGFuZGxlci5oIFwKKyAgICBodG1sNXZpZGVvd2lkZ2V0LmggXAorICAgIG92
ZXJsYXl3aWRnZXQuaCBcCisgICAgcGxheWVyYnV0dG9uLmgKKwordGFyZ2V0LnBhdGggKz0gJCRb
UVRfSU5TVEFMTF9QTFVHSU5TXS93ZWJraXQKK0lOU1RBTExTICs9IHRhcmdldAorCisjIERlZmF1
bHQgZmVhdHVyZSBjb25maWd1cmF0aW9uCisKKyMgT3V0LW9mLXByb2Nlc3Mgbm90aWZpY2F0aW9u
IAorIWNvbnRhaW5zKERFRklORVMsIFVTRV9PT1BfTk9USUZJQ0FUSU9OPS4pOiBERUZJTkVTICs9
IFVTRV9PT1BfTk9USUZJQ0FUSU9OPTEKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvcGxhdGZvcm1w
bHVnaW4vbWVlZ28vcXdlYmtpdHBsYXRmb3JtcGx1Z2luLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9xdC9wbGF0Zm9ybXBsdWdpbi9tZWVnby9xd2Via2l0cGxhdGZvcm1wbHVnaW4uaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvcXQvcGxhdGZvcm1wbHVnaW4vbWVlZ28vcXdl
YmtpdHBsYXRmb3JtcGx1Z2luLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTU3IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lk
aWFyeSgtaWVzKQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqCisgKi8KKworI2lmbmRlZiBxd2Via2l0cGxhdGZvcm1wbHVnaW5faAorI2RlZmluZSBx
d2Via2l0cGxhdGZvcm1wbHVnaW5faAorCisvKgorICogIFdhcm5pbmc6IFRoZSBjb250ZW50cyBv
ZiB0aGlzIGZpbGUgaXMgbm90ICBwYXJ0IG9mIHRoZSBwdWJsaWMgUXRXZWJLaXQgQVBJCisgKiAg
YW5kIG1heSBiZSBjaGFuZ2VkIGZyb20gdmVyc2lvbiB0byB2ZXJzaW9uIG9yIGV2ZW4gYmUgY29t
cGxldGVseSByZW1vdmVkLgorKi8KKworI2luY2x1ZGUgPFFDb2xvcj4KKyNpbmNsdWRlIDxRT2Jq
ZWN0PgorI2luY2x1ZGUgPFFVcmw+CisjaWYgZGVmaW5lZChXVEZfVVNFX1FUX01VTFRJTUVESUEp
ICYmIFdURl9VU0VfUVRfTVVMVElNRURJQQorI2luY2x1ZGUgPFFNZWRpYVBsYXllcj4KKyNlbmRp
ZgorCitjbGFzcyBRV2ViU2VsZWN0RGF0YSB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+UVdlYlNl
bGVjdERhdGEoKSB7IH0KKworICAgIGVudW0gSXRlbVR5cGUgeyBPcHRpb24sIEdyb3VwLCBTZXBh
cmF0b3IgfTsKKworICAgIHZpcnR1YWwgSXRlbVR5cGUgaXRlbVR5cGUoaW50KSBjb25zdCA9IDA7
CisgICAgdmlydHVhbCBRU3RyaW5nIGl0ZW1UZXh0KGludCBpbmRleCkgY29uc3QgPSAwOworICAg
IHZpcnR1YWwgUVN0cmluZyBpdGVtVG9vbFRpcChpbnQgaW5kZXgpIGNvbnN0ID0gMDsKKyAgICB2
aXJ0dWFsIGJvb2wgaXRlbUlzRW5hYmxlZChpbnQgaW5kZXgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0
dWFsIGJvb2wgaXRlbUlzU2VsZWN0ZWQoaW50IGluZGV4KSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCBpbnQgaXRlbUNvdW50KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBtdWx0aXBsZSgp
IGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFFDb2xvciBiYWNrZ3JvdW5kQ29sb3IoKSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCBRQ29sb3IgZm9yZWdyb3VuZENvbG9yKCkgY29uc3QgPSAwOworICAg
IHZpcnR1YWwgUUNvbG9yIGl0ZW1CYWNrZ3JvdW5kQ29sb3IoaW50IGluZGV4KSBjb25zdCA9IDA7
CisgICAgdmlydHVhbCBRQ29sb3IgaXRlbUZvcmVncm91bmRDb2xvcihpbnQgaW5kZXgpIGNvbnN0
ID0gMDsKK307CisKK2NsYXNzIFFXZWJTZWxlY3RNZXRob2QgOiBwdWJsaWMgUU9iamVjdCB7Cisg
ICAgUV9PQkpFQ1QKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5RV2ViU2VsZWN0TWV0aG9kKCkgeyB9
CisKKyAgICB2aXJ0dWFsIHZvaWQgc2hvdyhjb25zdCBRV2ViU2VsZWN0RGF0YSYpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgaGlkZSgpID0gMDsKKworUV9TSUdOQUxTOgorICAgIHZvaWQgc2VsZWN0
SXRlbShpbnQgaW5kZXgsIGJvb2wgYWxsb3dNdWx0aXBseVNlbGVjdGlvbnMsIGJvb2wgc2hpZnQp
OworICAgIHZvaWQgZGlkSGlkZSgpOworfTsKKworY2xhc3MgUVdlYk5vdGlmaWNhdGlvbkRhdGEg
eworcHVibGljOgorICAgIHZpcnR1YWwgflFXZWJOb3RpZmljYXRpb25EYXRhKCkgeyB9CisKKyAg
ICB2aXJ0dWFsIGNvbnN0IFFTdHJpbmcgdGl0bGUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBj
b25zdCBRU3RyaW5nIG1lc3NhZ2UoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBjb25zdCBRQnl0
ZUFycmF5IGljb25EYXRhKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgY29uc3QgUVVybCBvcGVu
ZXJQYWdlVXJsKCkgY29uc3QgPSAwOworfTsKKworY2xhc3MgUVdlYk5vdGlmaWNhdGlvblByZXNl
bnRlciA6IHB1YmxpYyBRT2JqZWN0IHsKKyAgICBRX09CSkVDVAorcHVibGljOgorICAgIFFXZWJO
b3RpZmljYXRpb25QcmVzZW50ZXIoKSB7IH0KKyAgICB2aXJ0dWFsIH5RV2ViTm90aWZpY2F0aW9u
UHJlc2VudGVyKCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgc2hvd05vdGlmaWNhdGlvbihjb25z
dCBRV2ViTm90aWZpY2F0aW9uRGF0YSopID0gMDsKKyAgICAKK1FfU0lHTkFMUzoKKyAgICB2b2lk
IG5vdGlmaWNhdGlvbkNsb3NlZCgpOworICAgIHZvaWQgbm90aWZpY2F0aW9uQ2xpY2tlZCgpOwor
fTsKKworY2xhc3MgUVdlYkhhcHRpY0ZlZWRiYWNrUGxheWVyOiBwdWJsaWMgUU9iamVjdCB7Cisg
ICAgUV9PQkpFQ1QKK3B1YmxpYzoKKyAgICBRV2ViSGFwdGljRmVlZGJhY2tQbGF5ZXIoKSB7IH0K
KyAgICB2aXJ0dWFsIH5RV2ViSGFwdGljRmVlZGJhY2tQbGF5ZXIoKSB7IH0KKworICAgIGVudW0g
SGFwdGljU3RyZW5ndGggeworICAgICAgICBOb25lLCBXZWFrLCBNZWRpdW0sIFN0cm9uZworICAg
IH07CisKKyAgICBlbnVtIEhhcHRpY0V2ZW50IHsKKyAgICAgICAgUHJlc3MsIFJlbGVhc2UKKyAg
ICB9OworCisgICAgdmlydHVhbCB2b2lkIHBsYXlIYXB0aWNGZWVkYmFjayhjb25zdCBIYXB0aWNF
dmVudCwgY29uc3QgUVN0cmluZyYgaGFwdGljVHlwZSwgY29uc3QgSGFwdGljU3RyZW5ndGgpID0g
MDsKK307CisKK2NsYXNzIFFXZWJUb3VjaE1vZGlmaWVyIDogcHVibGljIFFPYmplY3QgeworICAg
IFFfT0JKRUNUCitwdWJsaWM6CisgICAgdmlydHVhbCB+UVdlYlRvdWNoTW9kaWZpZXIoKSB7IH0K
KworICAgIGVudW0gUGFkZGluZ0RpcmVjdGlvbiB7CisgICAgICAgIFVwLCBSaWdodCwgRG93biwg
TGVmdAorICAgIH07CisKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGhpdFRlc3RQYWRkaW5nRm9yVG91
Y2goY29uc3QgUGFkZGluZ0RpcmVjdGlvbikgY29uc3QgPSAwOworfTsKKworI2lmIGRlZmluZWQo
V1RGX1VTRV9RVF9NVUxUSU1FRElBKSAmJiBXVEZfVVNFX1FUX01VTFRJTUVESUEKK2NsYXNzIFFX
ZWJGdWxsU2NyZWVuVmlkZW9IYW5kbGVyIDogcHVibGljIFFPYmplY3QgeworICAgIFFfT0JKRUNU
CitwdWJsaWM6CisgICAgUVdlYkZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIoKSB7IH0KKyAgICB2aXJ0
dWFsIH5RV2ViRnVsbFNjcmVlblZpZGVvSGFuZGxlcigpIHsgfQorICAgIHZpcnR1YWwgYm9vbCBy
ZXF1aXJlc0Z1bGxTY3JlZW5Gb3JWaWRlb1BsYXliYWNrKCkgY29uc3QgPSAwOworCitRX1NJR05B
TFM6CisgICAgdm9pZCBmdWxsU2NyZWVuQ2xvc2VkKCk7CisKK3B1YmxpYyBRX1NMT1RTOgorICAg
IHZpcnR1YWwgdm9pZCBlbnRlckZ1bGxTY3JlZW4oUU1lZGlhUGxheWVyKikgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBleGl0RnVsbFNjcmVlbigpID0gMDsKK307CisjZW5kaWYKKworY2xhc3MgUVdl
YktpdFBsYXRmb3JtUGx1Z2luIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5RV2ViS2l0UGxhdGZv
cm1QbHVnaW4oKSB7IH0KKworICAgIGVudW0gRXh0ZW5zaW9uIHsKKyAgICAgICAgTXVsdGlwbGVT
ZWxlY3Rpb25zLAorICAgICAgICBOb3RpZmljYXRpb25zLAorICAgICAgICBIYXB0aWNzLAorICAg
ICAgICBUb3VjaEludGVyYWN0aW9uLAorICAgICAgICBGdWxsU2NyZWVuVmlkZW9QbGF5ZXIKKyAg
ICB9OworCisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRXh0ZW5zaW9uKEV4dGVuc2lvbikgY29u
c3QgPSAwOworICAgIHZpcnR1YWwgUU9iamVjdCogY3JlYXRlRXh0ZW5zaW9uKEV4dGVuc2lvbikg
Y29uc3QgPSAwOworfTsKKworUVRfQkVHSU5fTkFNRVNQQUNFCitRX0RFQ0xBUkVfSU5URVJGQUNF
KFFXZWJLaXRQbGF0Zm9ybVBsdWdpbiwgImNvbS5ub2tpYS5RdC5XZWJLaXQuUGxhdGZvcm1QbHVn
aW4vMS43Iik7CitRVF9FTkRfTkFNRVNQQUNFCisKKyNlbmRpZiAvLyBxd2Via2l0cGxhdGZvcm1w
bHVnaW5faApJbmRleDogU291cmNlL1dlYktpdC9xdC9wbGF0Zm9ybXBsdWdpbi9tZWVnby9yZXNv
dXJjZS5xcmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9wbGF0Zm9ybXBsdWdpbi9t
ZWVnby9yZXNvdXJjZS5xcmMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L3F0L3BsYXRm
b3JtcGx1Z2luL21lZWdvL3Jlc291cmNlLnFyYwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4IEBA
Cis8IURPQ1RZUEUgUkNDPjxSQ0MgdmVyc2lvbj0iMS4wIj4KKzxxcmVzb3VyY2U+CisgICAgPGZp
bGU+aW1hZ2VzL2J1dHRvbl9jYW5ub3RwbGF5LnBuZzwvZmlsZT4KKyAgICA8ZmlsZT5pbWFnZXMv
YnV0dG9uX2Nsb3NlLnBuZzwvZmlsZT4KKyAgICA8ZmlsZT5pbWFnZXMvYnV0dG9uX3BhdXNlLnBu
ZzwvZmlsZT4KKyAgICA8ZmlsZT5pbWFnZXMvYnV0dG9uX3BsYXkucG5nPC9maWxlPgorPC9xcmVz
b3VyY2U+Cis8L1JDQz4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvcGxhdGZvcm1wbHVnaW4vbWVl
Z28vc2VsZWN0Y29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9w
bGF0Zm9ybXBsdWdpbi9tZWVnby9zZWxlY3Rjb250cm9sbGVyLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9XZWJLaXQvcXQvcGxhdGZvcm1wbHVnaW4vbWVlZ28vc2VsZWN0Y29udHJvbGxlci5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5j
bHVkZSAic2VsZWN0Y29udHJvbGxlci5oIgorI2luY2x1ZGUgInNlbGVjdGRpYWxvZy5oIgorCitT
ZWxlY3RDb250cm9sbGVyOjp+U2VsZWN0Q29udHJvbGxlcigpCit7CisgICAgaWYgKG1fZGlhbG9n
KQorICAgICAgICBtX2RpYWxvZy0+ZGVsZXRlTGF0ZXIoKTsKK30KKwordm9pZCBTZWxlY3RDb250
cm9sbGVyOjpzaG93KGNvbnN0IFFXZWJTZWxlY3REYXRhJiBkYXRhKQoreworICAgIGlmIChtX2Rp
YWxvZykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9kaWFsb2cgPSBuZXcgU2VsZWN0RGlhbG9n
KGRhdGEpOworICAgIGNvbm5lY3QobV9kaWFsb2csIFNJR05BTChkaXNhcHBlYXJlZCgpKSwgdGhp
cywgU0xPVChkaWFsb2dDbG9zZWQoKSkpOworICAgIGNvbm5lY3QobV9kaWFsb2csIFNJR05BTChz
ZWxlY3RJdGVtKGludCwgYm9vbCwgYm9vbCkpLCB0aGlzLCBTSUdOQUwoc2VsZWN0SXRlbShpbnQs
IGJvb2wsIGJvb2wpKSk7CisgICAgbV9kaWFsb2ctPmFwcGVhcihNU2NlbmVXaW5kb3c6OktlZXBX
aGVuRG9uZSk7Cit9CisKK3ZvaWQgU2VsZWN0Q29udHJvbGxlcjo6aGlkZSgpCit7CisgICAgaWYg
KCFtX2RpYWxvZykKKyAgICAgICAgcmV0dXJuOworfQorCit2b2lkIFNlbGVjdENvbnRyb2xsZXI6
OmRpYWxvZ0Nsb3NlZCgpCit7CisgICAgaWYgKCFtX2RpYWxvZykKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbV9kaWFsb2ctPmRlbGV0ZUxhdGVyKCk7CisgICAgbV9kaWFsb2cgPSAwOworCisgICAg
ZW1pdCBkaWRIaWRlKCk7Cit9CkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L3BsYXRmb3JtcGx1Z2lu
L21lZWdvL3NlbGVjdGNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0
L3BsYXRmb3JtcGx1Z2luL21lZWdvL3NlbGVjdGNvbnRyb2xsZXIuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9XZWJLaXQvcXQvcGxhdGZvcm1wbHVnaW4vbWVlZ28vc2VsZWN0Y29udHJvbGxlci5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRl
ZiBzZWxlY3Rjb250cm9sbGVyX2gKKyNkZWZpbmUgc2VsZWN0Y29udHJvbGxlcl9oCisKKyNpbmNs
dWRlICJxd2Via2l0cGxhdGZvcm1wbHVnaW4uaCIKKworY2xhc3MgU2VsZWN0RGlhbG9nOworCitj
bGFzcyBTZWxlY3RDb250cm9sbGVyIDogcHVibGljIFFXZWJTZWxlY3RNZXRob2QgeworICAgIFFf
T0JKRUNUCisKK3B1YmxpYzoKKyAgICBTZWxlY3RDb250cm9sbGVyKCkgOiBtX2RpYWxvZygwKSB7
IH07CisgICAgdmlydHVhbCB+U2VsZWN0Q29udHJvbGxlcigpOworCisgICAgdmlydHVhbCB2b2lk
IHNob3coY29uc3QgUVdlYlNlbGVjdERhdGEmKTsKKyAgICB2aXJ0dWFsIHZvaWQgaGlkZSgpOwor
Citwcml2YXRlIHNsb3RzOgorICAgIHZvaWQgZGlhbG9nQ2xvc2VkKCk7CisKK3ByaXZhdGU6Cisg
ICAgU2VsZWN0RGlhbG9nKiBtX2RpYWxvZzsKK307CisKKyNlbmRpZiAvLyBzZWxlY3Rjb250cm9s
bGVyX0gKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvcGxhdGZvcm1wbHVnaW4vbWVlZ28vc2VsZWN0
ZGlhbG9nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L3BsYXRmb3JtcGx1Z2lu
L21lZWdvL3NlbGVjdGRpYWxvZy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L3F0
L3BsYXRmb3JtcGx1Z2luL21lZWdvL3NlbGVjdGRpYWxvZy5jcHAJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMTE0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9u
IGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgInNlbGVjdGRpYWxvZy5o
IgorI2luY2x1ZGUgInF3ZWJraXRwbGF0Zm9ybXBsdWdpbi5oIgorCisjaW5jbHVkZSA8TUFic3Ry
YWN0Q2VsbENyZWF0b3I+CisjaW5jbHVkZSA8TUNvbnRlbnRJdGVtPgorI2luY2x1ZGUgPE1MaXN0
PgorI2luY2x1ZGUgPFFNb2RlbEluZGV4PgorI2luY2x1ZGUgPFFTdGFuZGFyZEl0ZW0+CisjaW5j
bHVkZSA8UVN0YW5kYXJkSXRlbU1vZGVsPgorI2luY2x1ZGUgPFFTdHJpbmdMaXN0PgorI2luY2x1
ZGUgPFFWYXJpYW50PgorCisKK2NsYXNzIENvbnRlbnRJdGVtQ3JlYXRvciA6IHB1YmxpYyBNQWJz
dHJhY3RDZWxsQ3JlYXRvcjxNQ29udGVudEl0ZW0+IHsKK3B1YmxpYzoKKyAgICBDb250ZW50SXRl
bUNyZWF0b3IoKSA6IE1BYnN0cmFjdENlbGxDcmVhdG9yPE1Db250ZW50SXRlbT4oKSB7IH0KKwor
ICAgIE1XaWRnZXQqIGNyZWF0ZUNlbGwoY29uc3QgUU1vZGVsSW5kZXgmIGluZGV4LCBNV2lkZ2V0
UmVjeWNsZXImIHJlY3ljbGVyKSBjb25zdCAKKyAgICB7CisgICAgICAgIE1Db250ZW50SXRlbSog
Y2VsbCA9IHFvYmplY3RfY2FzdDxNQ29udGVudEl0ZW0gKj4ocmVjeWNsZXIudGFrZShNQ29udGVu
dEl0ZW06OnN0YXRpY01ldGFPYmplY3QuY2xhc3NOYW1lKCkpKTsKKyAgICAgICAgaWYgKCFjZWxs
KQorICAgICAgICAgICAgY2VsbCA9IG5ldyBNQ29udGVudEl0ZW0oTUNvbnRlbnRJdGVtOjpTaW5n
bGVUZXh0TGFiZWwpOworICAgICAgICB1cGRhdGVDZWxsKGluZGV4LCBjZWxsKTsKKyAgICAgICAg
cmV0dXJuIGNlbGw7CisgICAgfQorCisgICAgdm9pZCB1cGRhdGVDZWxsKGNvbnN0IFFNb2RlbElu
ZGV4JiBpbmRleCwgTVdpZGdldCogY2VsbCkgY29uc3QKKyAgICB7CisgICAgICAgIE1Db250ZW50
SXRlbSogaXRlbSA9IHFvYmplY3RfY2FzdDxNQ29udGVudEl0ZW0qPihjZWxsKTsKKyAgICAgICAg
aWYgKCFpdGVtKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFFWYXJpYW50IGRhdGEg
PSBpbmRleC5kYXRhKFF0OjpEaXNwbGF5Um9sZSk7CisgICAgICAgIFFTdHJpbmdMaXN0IHJvd0Rh
dGEgPSBkYXRhLnZhbHVlPFFTdHJpbmdMaXN0PigpOworICAgICAgICBpZiAoIXJvd0RhdGEuaXNF
bXB0eSgpKQorICAgICAgICAgICAgaXRlbS0+c2V0VGl0bGUocm93RGF0YS5hdCgwKSk7CisgICAg
fQorfTsKKworU2VsZWN0RGlhbG9nOjpTZWxlY3REaWFsb2coY29uc3QgUVdlYlNlbGVjdERhdGEm
IGRhdGEpCisgICAgOiBtX2RhdGEoZGF0YSkKK3sKKyAgICBtX2xpc3QgPSBuZXcgTUxpc3QoKTsK
KyAgICBtX2xpc3QtPnNldENlbGxDcmVhdG9yKG5ldyBDb250ZW50SXRlbUNyZWF0b3IoKSk7Cisg
ICAgdGhpcy0+c2V0Q2VudHJhbFdpZGdldChtX2xpc3QpOworICAgIGlmIChkYXRhLm11bHRpcGxl
KCkpCisgICAgICAgIG1fbGlzdC0+c2V0U2VsZWN0aW9uTW9kZShNTGlzdDo6TXVsdGlTZWxlY3Rp
b24pOworICAgIGVsc2UKKyAgICAgICAgbV9saXN0LT5zZXRTZWxlY3Rpb25Nb2RlKE1MaXN0OjpT
aW5nbGVTZWxlY3Rpb24pOworICAgIHBvcHVsYXRlTGlzdCgpOworICAgIGNvbm5lY3QobV9saXN0
LCBTSUdOQUwoaXRlbUNsaWNrZWQoUU1vZGVsSW5kZXgpKSwgdGhpcywgU0xPVChtb2RpZnlJdGVt
U3RhdGUoUU1vZGVsSW5kZXgpKSk7Cit9CisKK1NlbGVjdERpYWxvZzo6flNlbGVjdERpYWxvZygp
Cit7CisgICAgbV9saXN0LT5kZWxldGVMYXRlcigpOworfQorCit2b2lkIFNlbGVjdERpYWxvZzo6
cG9wdWxhdGVMaXN0KCkKK3sKKyAgICBRU3RyaW5nTGlzdCBkaWFsb2dJdGVtczsKKyAgICBRU3Rh
bmRhcmRJdGVtTW9kZWwqIHN0YW5kYXJkSXRlbU1vZGVsID0gbmV3IFFTdGFuZGFyZEl0ZW1Nb2Rl
bCh0aGlzKTsKKyAgICBRTGlzdDxpbnQ+IHNlbGVjdGVkT3B0aW9uczsKKyAgICBmb3IgKGludCBp
ID0gMDsgaSA8IG1fZGF0YS5pdGVtQ291bnQoKTsgKytpKSB7CisgICAgICAgIFFTdGFuZGFyZEl0
ZW0qIGl0ZW0gPSBuZXcgUVN0YW5kYXJkSXRlbSgpOworICAgICAgICBpZiAobV9kYXRhLml0ZW1U
eXBlKGkpID09IFFXZWJTZWxlY3REYXRhOjpPcHRpb24pIHsKKyAgICAgICAgICAgIGl0ZW0tPnNl
dFRleHQobV9kYXRhLml0ZW1UZXh0KGkpKTsKKyAgICAgICAgICAgIGlmIChtX2RhdGEuaXRlbUlz
U2VsZWN0ZWQoaSkpCisgICAgICAgICAgICAgICAgc2VsZWN0ZWRPcHRpb25zIDw8IGk7CisgICAg
ICAgIH0gZWxzZSBpZiAobV9kYXRhLml0ZW1UeXBlKGkpID09IFFXZWJTZWxlY3REYXRhOjpHcm91
cCkgeworICAgICAgICAgICAgaXRlbS0+c2V0VGV4dChtX2RhdGEuaXRlbVRleHQoaSkpOworICAg
ICAgICAgICAgaXRlbS0+c2V0RW5hYmxlZChmYWxzZSk7CisgICAgICAgICAgICBpdGVtLT5zZXRT
ZWxlY3RhYmxlKGZhbHNlKTsKKyAgICAgICAgfQorICAgICAgICBzdGFuZGFyZEl0ZW1Nb2RlbC0+
YXBwZW5kUm93KGl0ZW0pOworICAgIH0KKworICAgIG1fbGlzdC0+c2V0SXRlbU1vZGVsKHN0YW5k
YXJkSXRlbU1vZGVsKTsKKyAgICBmb3JlYWNoIChpbnQgc2VsZWN0ZWQsIHNlbGVjdGVkT3B0aW9u
cykKKyAgICAgICAgbV9saXN0LT5zZWxlY3RJdGVtKG1fbGlzdC0+aXRlbU1vZGVsKCktPmluZGV4
KHNlbGVjdGVkLCAwKSk7Cit9CisKK3ZvaWQgU2VsZWN0RGlhbG9nOjptb2RpZnlJdGVtU3RhdGUo
Y29uc3QgUU1vZGVsSW5kZXgmIGluZGV4KQoreworICAgIGludCBjbGlja2VkSW5kZXggPSBpbmRl
eC5yb3coKTsKKyAgICBpZiAobV9kYXRhLm11bHRpcGxlKCkpIHsKKyAgICAgICAgLy8gTXVsdGkg
c2VsZWN0CisgICAgICAgIGVtaXQgc2VsZWN0SXRlbShjbGlja2VkSW5kZXgsIHRydWUsIGZhbHNl
KTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBTaW5nbGUgc2VsZWN0CisgICAgICAgIGVtaXQg
c2VsZWN0SXRlbShjbGlja2VkSW5kZXgsIGZhbHNlLCBmYWxzZSk7CisgICAgICAgIGRpc2FwcGVh
cigpOworICAgIH0KK30KSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvcGxhdGZvcm1wbHVnaW4vbWVl
Z28vc2VsZWN0ZGlhbG9nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9wbGF0Zm9y
bXBsdWdpbi9tZWVnby9zZWxlY3RkaWFsb2cuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJL
aXQvcXQvcGxhdGZvcm1wbHVnaW4vbWVlZ28vc2VsZWN0ZGlhbG9nLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRp
b24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIHNlbGVjdGRpYWxvZ19o
CisjZGVmaW5lIHNlbGVjdGRpYWxvZ19oCisKKyNpbmNsdWRlIDxNRGlhbG9nPgorCitjbGFzcyBN
TGlzdDsKK2NsYXNzIFFNb2RlbEluZGV4OworY2xhc3MgUVdlYlNlbGVjdERhdGE7CisKK2NsYXNz
IFNlbGVjdERpYWxvZyA6IHB1YmxpYyBNRGlhbG9nIHsKKyAgICBRX09CSkVDVAorcHVibGljOgor
ICAgIFNlbGVjdERpYWxvZyhjb25zdCBRV2ViU2VsZWN0RGF0YSYpOworICAgIHZpcnR1YWwgflNl
bGVjdERpYWxvZygpOworCitRX1NJR05BTFM6CisgICAgdm9pZCBzZWxlY3RJdGVtKGludCBpbmRl
eCwgYm9vbCBhbGxvd011bHRpcGx5U2VsZWN0aW9ucywgYm9vbCBzaGlmdCk7CisKK3ByaXZhdGUg
UV9TTE9UUzoKKyAgICB2b2lkIG1vZGlmeUl0ZW1TdGF0ZShjb25zdCBRTW9kZWxJbmRleCYpOwor
Citwcml2YXRlOgorICAgIHZvaWQgcG9wdWxhdGVMaXN0KCk7CisKK3ByaXZhdGU6CisgICAgY29u
c3QgUVdlYlNlbGVjdERhdGEmIG1fZGF0YTsKKyAgICBNTGlzdCogbV9saXN0OworfTsKKworI2Vu
ZGlmIC8vIHNlbGVjdGRpYWxvZ19oCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L3BsYXRmb3JtcGx1
Z2luL21lZWdvL3dlYmZ1bGxzY3JlZW52aWRlb2hhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvcXQvcGxhdGZvcm1wbHVnaW4vbWVlZ28vd2ViZnVsbHNjcmVlbnZpZGVvaGFu
ZGxlci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L3F0L3BsYXRmb3JtcGx1Z2lu
L21lZWdvL3dlYmZ1bGxzY3JlZW52aWRlb2hhbmRsZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDEwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBh
bmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJ3ZWJmdWxsc2NyZWVudmlk
ZW9oYW5kbGVyLmgiCisKKyNpbmNsdWRlIDxRU3lzdGVtU2NyZWVuU2F2ZXI+CisKK3VzaW5nIG5h
bWVzcGFjZSBRdE1vYmlsaXR5OworCitXZWJGdWxsU2NyZWVuVmlkZW9IYW5kbGVyOjpXZWJGdWxs
U2NyZWVuVmlkZW9IYW5kbGVyKCkKKyAgICA6IG1fdmlkZW9XaWRnZXQobmV3IEhUTUw1VmlkZW9X
aWRnZXQoKSkKKyAgICAsIG1fbWVkaWFQbGF5ZXIoMCkKKyAgICAsIG1fc2NyZWVuU2F2ZXIoMCkK
K3sKK30KKwordm9pZCBXZWJGdWxsU2NyZWVuVmlkZW9IYW5kbGVyOjplbnRlckZ1bGxTY3JlZW4o
UU1lZGlhUGxheWVyICpwbGF5ZXIpCit7CisgICAgaWYgKCFwbGF5ZXIgfHwgIW1fdmlkZW9XaWRn
ZXQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fdmlkZW9XaWRnZXQtPnNldER1cmF0aW9uKHBs
YXllci0+ZHVyYXRpb24oKSk7CisKKyAgICBpZiAocGxheWVyLT5zdGF0ZSgpID09IFFNZWRpYVBs
YXllcjo6UGxheWluZ1N0YXRlKQorICAgICAgICBwbGF5ZXItPnBhdXNlKCk7CisKKyAgICBtX21l
ZGlhUGxheWVyID0gcGxheWVyOworICAgIGNvbm5lY3QobV9tZWRpYVBsYXllciwgU0lHTkFMKHBv
c2l0aW9uQ2hhbmdlZChxaW50NjQpKSwgbV92aWRlb1dpZGdldCwgU0xPVChvblBvc2l0aW9uQ2hh
bmdlZChxaW50NjQpKSk7CisgICAgY29ubmVjdChtX21lZGlhUGxheWVyLCBTSUdOQUwoZHVyYXRp
b25DaGFuZ2VkKHFpbnQ2NCkpLCBtX3ZpZGVvV2lkZ2V0LCBTTE9UKHNldER1cmF0aW9uKHFpbnQ2
NCkpKTsKKyAgICBjb25uZWN0KG1fbWVkaWFQbGF5ZXIsIFNJR05BTChzdGF0ZUNoYW5nZWQoUU1l
ZGlhUGxheWVyOjpTdGF0ZSkpLCB0aGlzLCBTTE9UKG9uUGxheWVyU3RhdGVDaGFuZ2VkKFFNZWRp
YVBsYXllcjo6U3RhdGUpKSk7CisgICAgY29ubmVjdChtX21lZGlhUGxheWVyLCBTSUdOQUwoZXJy
b3IoUU1lZGlhUGxheWVyOjpFcnJvcikpLCB0aGlzLCBTTE9UKG9uUGxheWVyRXJyb3IoUU1lZGlh
UGxheWVyOjpFcnJvcikpKTsKKyAgICBjb25uZWN0KG1fdmlkZW9XaWRnZXQsIFNJR05BTChwb3Np
dGlvbkNoYW5nZWRCeVVzZXIocWludDY0KSksIG1fbWVkaWFQbGF5ZXIsIFNMT1Qoc2V0UG9zaXRp
b24ocWludDY0KSkpOworICAgIGNvbm5lY3QobV92aWRlb1dpZGdldCwgU0lHTkFMKGNsb3NlQ2xp
Y2tlZCgpKSwgdGhpcywgU0lHTkFMKGZ1bGxTY3JlZW5DbG9zZWQoKSkpOworICAgIGNvbm5lY3Qo
bV92aWRlb1dpZGdldCwgU0lHTkFMKHBhdXNlQ2xpY2tlZCgpKSwgbV9tZWRpYVBsYXllciwgU0xP
VChwYXVzZSgpKSk7CisgICAgY29ubmVjdChtX3ZpZGVvV2lkZ2V0LCBTSUdOQUwocGxheUNsaWNr
ZWQoKSksIG1fbWVkaWFQbGF5ZXIsIFNMT1QocGxheSgpKSk7CisKKyAgICBtX21lZGlhUGxheWVy
LT5zZXRWaWRlb091dHB1dChtX3ZpZGVvV2lkZ2V0KTsKKworICAgIG1fdmlkZW9XaWRnZXQtPnNl
dFNpemVQb2xpY3koUVNpemVQb2xpY3k6Oklnbm9yZWQsIFFTaXplUG9saWN5OjpJZ25vcmVkKTsK
KyAgICBtX3ZpZGVvV2lkZ2V0LT5zaG93RnVsbFNjcmVlbigpOworfQorCit2b2lkIFdlYkZ1bGxT
Y3JlZW5WaWRlb0hhbmRsZXI6OmV4aXRGdWxsU2NyZWVuKCkKK3sKKyAgICBtX3ZpZGVvV2lkZ2V0
LT5oaWRlKCk7CisgICAgbV9tZWRpYVBsYXllci0+ZGlzY29ubmVjdChtX3ZpZGVvV2lkZ2V0KTsK
KyAgICBtX21lZGlhUGxheWVyLT5kaXNjb25uZWN0KHRoaXMpOworCisgICAgLy8gcGF1c2UgdGhl
IHZpZGVvIGFzIHBlciBzcGVjLgorICAgIGlmIChtX21lZGlhUGxheWVyLT5zdGF0ZSgpID09IFFN
ZWRpYVBsYXllcjo6UGxheWluZ1N0YXRlKQorICAgICAgICBtX21lZGlhUGxheWVyLT5wYXVzZSgp
OworfQorCit2b2lkIFdlYkZ1bGxTY3JlZW5WaWRlb0hhbmRsZXI6Om9uUGxheWVyRXJyb3IoUU1l
ZGlhUGxheWVyOjpFcnJvciBlcnJvcikKK3sKKyAgICBzd2l0Y2ggKGVycm9yKSB7CisgICAgY2Fz
ZSBRTWVkaWFQbGF5ZXI6Ok5vRXJyb3I6CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIG1fdmlkZW9XaWRnZXQtPm9uUGxheWVyRXJyb3IoKTsKKyAgICB9Cit9CisKK3ZvaWQg
V2ViRnVsbFNjcmVlblZpZGVvSGFuZGxlcjo6b25QbGF5ZXJTdGF0ZUNoYW5nZWQoUU1lZGlhUGxh
eWVyOjpTdGF0ZSBzdGF0ZSkKK3sKKyAgICAvLyBFbmFibGUvRGlzYWJsZSBzY3JlZW4gc2F2ZXIg
aW5oaWJpdCB3aGVuIHZpZGVvIHN0YXJ0cyBwbGF5aW5nL3BhdXNlZAorICAgIC8vIEZJWE1FOiBV
c2UgYmV0dGVyIEFQSSdzIGZyb20gUXRNb2JpbGl0eSAxLjIgKGFjdGl2YXRlL2RlYWN0aXZhdGUp
CisgICAgc3dpdGNoIChzdGF0ZSkgeworICAgIGNhc2UgUU1lZGlhUGxheWVyOjpQbGF5aW5nU3Rh
dGU6CisgICAgICAgIGlmICghbV9zY3JlZW5TYXZlcikgeworICAgICAgICAgICAgbV9zY3JlZW5T
YXZlciA9IG5ldyBRdE1vYmlsaXR5OjpRU3lzdGVtU2NyZWVuU2F2ZXIodGhpcyk7CisgICAgICAg
ICAgICBtX3NjcmVlblNhdmVyLT5zZXRTY3JlZW5TYXZlckluaGliaXQoKTsKKyAgICAgICAgfQor
ICAgICAgICBicmVhazsKKworICAgIGNhc2UgUU1lZGlhUGxheWVyOjpQYXVzZWRTdGF0ZToKKyAg
ICAgICAgZGVsZXRlIG1fc2NyZWVuU2F2ZXI7CisgICAgICAgIG1fc2NyZWVuU2F2ZXIgPSAwOwor
ICAgICAgICBicmVhazsKKworICAgIGNhc2UgUU1lZGlhUGxheWVyOjpTdG9wcGVkU3RhdGU6Cisg
ICAgICAgIGRlbGV0ZSBtX3NjcmVlblNhdmVyOworICAgICAgICBtX3NjcmVlblNhdmVyID0gMDsK
KyAgICAgICAgbV92aWRlb1dpZGdldC0+b25QbGF5ZXJTdG9wcGVkKCk7CisgICAgICAgIGJyZWFr
OworICAgIH0KK30KKwpJbmRleDogU291cmNlL1dlYktpdC9xdC9wbGF0Zm9ybXBsdWdpbi9tZWVn
by93ZWJmdWxsc2NyZWVudmlkZW9oYW5kbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9xdC9wbGF0Zm9ybXBsdWdpbi9tZWVnby93ZWJmdWxsc2NyZWVudmlkZW9oYW5kbGVyLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L3F0L3BsYXRmb3JtcGx1Z2luL21lZWdvL3dlYmZ1
bGxzY3JlZW52aWRlb2hhbmRsZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKgorICovCisjaWZuZGVmIHdlYmZ1bGxzY3JlZW52aWRlb2hhbmRsZXJfaAorI2RlZmlu
ZSB3ZWJmdWxsc2NyZWVudmlkZW9oYW5kbGVyX2gKKworI2luY2x1ZGUgImh0bWw1dmlkZW93aWRn
ZXQuaCIKKyNpbmNsdWRlICJxd2Via2l0cGxhdGZvcm1wbHVnaW4uaCIKKworI2luY2x1ZGUgPFFN
ZWRpYVBsYXllcj4KKyNpbmNsdWRlIDxRU3lzdGVtU2NyZWVuU2F2ZXI+CisKK3VzaW5nIG5hbWVz
cGFjZSBRdE1vYmlsaXR5OworCitjbGFzcyBXZWJGdWxsU2NyZWVuVmlkZW9IYW5kbGVyIDogcHVi
bGljIFFXZWJGdWxsU2NyZWVuVmlkZW9IYW5kbGVyIHsKKyAgICBRX09CSkVDVAorcHVibGljOgor
ICAgIFdlYkZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIoKTsKKyAgICB+V2ViRnVsbFNjcmVlblZpZGVv
SGFuZGxlcigpIHsgfQorICAgIGJvb2wgcmVxdWlyZXNGdWxsU2NyZWVuRm9yVmlkZW9QbGF5YmFj
aygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICB2b2lkIHVwZGF0ZVNjcmVlblJlY3QoY29u
c3QgUVJlY3QmKSB7IH0KKworcHVibGljIFFfU0xPVFM6CisgICAgdmlydHVhbCB2b2lkIGVudGVy
RnVsbFNjcmVlbihRTWVkaWFQbGF5ZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZXhpdEZ1bGxTY3Jl
ZW4oKTsKKyAgICB2b2lkIG9uUGxheWVyU3RhdGVDaGFuZ2VkKFFNZWRpYVBsYXllcjo6U3RhdGUp
OworICAgIHZvaWQgb25QbGF5ZXJFcnJvcihRTWVkaWFQbGF5ZXI6OkVycm9yKTsKKworUV9TSUdO
QUxTOgorICAgIHZvaWQgZnVsbFNjcmVlbkNsb3NlZCgpOworCitwcml2YXRlOgorICAgIEhUTUw1
VmlkZW9XaWRnZXQqIG1fdmlkZW9XaWRnZXQ7CisgICAgUU1lZGlhUGxheWVyKiBtX21lZGlhUGxh
eWVyOworICAgIFF0TW9iaWxpdHk6OlFTeXN0ZW1TY3JlZW5TYXZlciogbV9zY3JlZW5TYXZlcjsK
KyAgICBRUGl4bWFwIG1fZnJhbWU7Cit9OworCisjZW5kaWYgLy8gd2ViZnVsbHNjcmVlbnZpZGVv
aGFuZGxlcl9oCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L3BsYXRmb3JtcGx1Z2luL21lZWdvL3dl
YmhhcHRpY2ZlZWRiYWNrcGxheWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0
L3BsYXRmb3JtcGx1Z2luL21lZWdvL3dlYmhhcHRpY2ZlZWRiYWNrcGxheWVyLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9XZWJLaXQvcXQvcGxhdGZvcm1wbHVnaW4vbWVlZ28vd2ViaGFwdGlj
ZmVlZGJhY2twbGF5ZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFy
eSgtaWVzKS4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKgorICovCisKKyNpbmNsdWRlICJ3ZWJoYXB0aWNmZWVkYmFja3BsYXllci5oIgorCisjaW5j
bHVkZSA8TUFwcGxpY2F0aW9uPgorI2luY2x1ZGUgPE1GZWVkYmFja1BsYXllcj4KKwordm9pZCBX
ZWJIYXB0aWNGZWVkYmFja1BsYXllcjo6cGxheUhhcHRpY0ZlZWRiYWNrKGNvbnN0IEhhcHRpY0V2
ZW50IGV2ZW50LCBjb25zdCBRU3RyaW5nJiB0eXBlLCBjb25zdCBIYXB0aWNTdHJlbmd0aCBzdHJl
bmd0aCkKK3sKKyAgICBpZiAoc3RyZW5ndGggPT0gTm9uZSB8fCB0eXBlID09ICJMYXRjaGVkQnV0
dG9uU3R1Y2siIHx8IHR5cGUgPT0gIlVuZGVmaW5lZCIpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmICh0eXBlID09ICJDaGVja2VkQ2hlY2tCb3giKQorICAgICAgICBNQXBwbGljYXRpb246OmZl
ZWRiYWNrUGxheWVyKCktPnBsYXkoInByZXNzLW9mZiIpOworICAgIGVsc2UgaWYgKHR5cGUgPT0g
IlVuY2hlY2tlZENoZWNrQm94IikKKyAgICAgICAgTUFwcGxpY2F0aW9uOjpmZWVkYmFja1BsYXll
cigpLT5wbGF5KCJwcmVzcy1vbiIpOworICAgIGVsc2UgeworICAgICAgICBpZiAoZXZlbnQgPT0g
UHJlc3MpCisgICAgICAgICAgICBNQXBwbGljYXRpb246OmZlZWRiYWNrUGxheWVyKCktPnBsYXko
InByZXNzIik7CisgICAgICAgIGVsc2UgaWYgKGV2ZW50ID09IFJlbGVhc2UpCisgICAgICAgICAg
ICBNQXBwbGljYXRpb246OmZlZWRiYWNrUGxheWVyKCktPnBsYXkoInJlbGVhc2UiKTsKKyAgICB9
Cit9CkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L3BsYXRmb3JtcGx1Z2luL21lZWdvL3dlYmhhcHRp
Y2ZlZWRiYWNrcGxheWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9wbGF0Zm9y
bXBsdWdpbi9tZWVnby93ZWJoYXB0aWNmZWVkYmFja3BsYXllci5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL1dlYktpdC9xdC9wbGF0Zm9ybXBsdWdpbi9tZWVnby93ZWJoYXB0aWNmZWVkYmFja3Bs
YXllci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisK
KyNpZm5kZWYgd2ViaGFwdGljZmVlZGJhY2twbGF5ZXJfaAorI2RlZmluZSB3ZWJoYXB0aWNmZWVk
YmFja3BsYXllcl9oCisKKyNpbmNsdWRlICJxd2Via2l0cGxhdGZvcm1wbHVnaW4uaCIKKworY2xh
c3MgV2ViSGFwdGljRmVlZGJhY2tQbGF5ZXIgOiBwdWJsaWMgUVdlYkhhcHRpY0ZlZWRiYWNrUGxh
eWVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIHBsYXlIYXB0aWNGZWVkYmFjayhjb25zdCBIYXB0aWNF
dmVudCwgY29uc3QgUVN0cmluZyYsIGNvbnN0IEhhcHRpY1N0cmVuZ3RoKTsKK307CisKKyNlbmRp
ZiAvLyB3ZWJoYXB0aWNmZWVkYmFja3BsYXllcl9oCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L3Bs
YXRmb3JtcGx1Z2luL21lZWdvL3dlYm5vdGlmaWNhdGlvbnByZXNlbnRlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9xdC9wbGF0Zm9ybXBsdWdpbi9tZWVnby93ZWJub3RpZmljYXRp
b25wcmVzZW50ZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9xdC9wbGF0Zm9y
bXBsdWdpbi9tZWVnby93ZWJub3RpZmljYXRpb25wcmVzZW50ZXIuY3BwCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDg4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0
aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJ3ZWJub3RpZmlj
YXRpb25wcmVzZW50ZXIuaCIKKworI2lmIFVTRV9PT1BfTk9USUZJQ0FUSU9OCisjaW5jbHVkZSA8
TUNvbXBvbmVudERhdGE+CisjaW5jbHVkZSA8TU5vdGlmaWNhdGlvbj4KKyNpbmNsdWRlIDxNUmVt
b3RlQWN0aW9uPgorI2Vsc2UKKyNpbmNsdWRlIDxNSW5mb0Jhbm5lcj4KKyNpbmNsdWRlIDxRQnl0
ZUFycmF5PgorI2luY2x1ZGUgPFFQaXhtYXA+CisjZW5kaWYKKworI2luY2x1ZGUgPFFUaW1lcj4K
KworV2ViTm90aWZpY2F0aW9uUHJlc2VudGVyOjpXZWJOb3RpZmljYXRpb25QcmVzZW50ZXIoKQor
ICAgIDogUVdlYk5vdGlmaWNhdGlvblByZXNlbnRlcigpCit7Cit9CisKK3ZvaWQgV2ViTm90aWZp
Y2F0aW9uUHJlc2VudGVyOjpzaG93Tm90aWZpY2F0aW9uKGNvbnN0IFFXZWJOb3RpZmljYXRpb25E
YXRhKiBkYXRhKQoreworI2lmIFVTRV9PT1BfTk9USUZJQ0FUSU9OCisgICAgTU5vdGlmaWNhdGlv
biogd2ViTm90aWZpY2F0aW9uID0gbmV3IE1Ob3RpZmljYXRpb24oIndlYm5vdGlmaWNhdGlvbiIs
IGRhdGEtPnRpdGxlKCksIGRhdGEtPm1lc3NhZ2UoKSk7CisKKyAgICBNUmVtb3RlQWN0aW9uKiBh
Y3QgPSBuZXcgTVJlbW90ZUFjdGlvbihNQ29tcG9uZW50RGF0YTo6c2VydmljZU5hbWUoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiL29yZy9tYWVtby9tIiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tLm5va2lhLk1B
cHBsaWNhdGlvbklmIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAibGF1bmNoIik7CisgICAgd2ViTm90aWZpY2F0aW9uLT5zZXRBY3Rpb24oKmFjdCk7CisKKyAg
ICAvLyBUT0RPOiBBZGQgc2V0dGluZyB0aGUgaW1hZ2UKKyAgICAvLyAgV2hhdCB3ZSByZWFsbHkg
bmVlZCB0byBkbyBpbiBNTm90aWZpY2F0aW9uIGlzIHRvIHdyaXRlIGltYWdlIGZyb20gZGF0YS0+
aWNvbkRhdGEoKSB0bworICAgIC8vICBhIHRlbXBvcmFyeSBmaWxlIGFuZCBnaXZlIHRoYXQgcGF0
aCB0byBzZXRJbWFnZS4KKworICAgIHdlYk5vdGlmaWNhdGlvbi0+cHVibGlzaCgpOworI2Vsc2UK
KyAgICBNSW5mb0Jhbm5lciogaW5mb0Jhbm5lciA9IG5ldyBNSW5mb0Jhbm5lcihNSW5mb0Jhbm5l
cjo6SW5mb3JtYXRpb24pOworICAgIGNvbm5lY3QoaW5mb0Jhbm5lciwgU0lHTkFMKGNsaWNrZWQo
KSksIHRoaXMsIFNJR05BTChub3RpZmljYXRpb25DbGlja2VkKCkpKTsKKworICAgIFFQaXhtYXAg
cGl4bWFwOworICAgIFFCeXRlQXJyYXkgaWNvbiA9IGRhdGEtPmljb25EYXRhKCk7CisgICAgaWYg
KGljb24ubGVuZ3RoKCkgJiYgcGl4bWFwLmxvYWRGcm9tRGF0YShpY29uKSkKKyAgICAgICAgaW5m
b0Jhbm5lci0+c2V0UGl4bWFwKHBpeG1hcCk7CisKKworICAgIFFTdHJpbmcgbm90aWZpY2F0aW9u
VGV4dDsKKyAgICBpZiAoIWRhdGEtPnRpdGxlKCkuaXNFbXB0eSgpKQorICAgICAgICBub3RpZmlj
YXRpb25UZXh0ICs9IFFTdHJpbmcoIjxiPiUxPC9iPjxici8+IikuYXJnKGRhdGEtPnRpdGxlKCkp
OworCisgICAgaWYgKCFkYXRhLT5tZXNzYWdlKCkuaXNFbXB0eSgpKQorICAgICAgICBub3RpZmlj
YXRpb25UZXh0ICs9IGRhdGEtPm1lc3NhZ2UoKTsKKworICAgIGluZm9CYW5uZXItPnNldEJvZHlU
ZXh0KG5vdGlmaWNhdGlvblRleHQpOworICAgIGluZm9CYW5uZXItPmFwcGVhcihNU2NlbmVXaW5k
b3c6OkRlc3Ryb3lXaGVuRG9uZSk7CisKKyNlbmRpZgorICAgIC8vIFRPRE86IFdoYXQgaWYgTU5v
dGlmaWNhdGlvbjo6cHVibGlzaCgpIGZhaWxzPyBTaW5nbGUgc2hvdCByZXRyeT8KKyAgICAvLyBX
b3VsZCByZXRyeSByZWFsbHkgaGVscCB0byByZWNvdmVyIGZyb20gdGhpcyBlcnJvciAvIGNvdWxk
IGl0IGJlIGhhcm1mdWwgaW4gc29tZSBzaXR1YXRpb25zPworCisgICAgLy8gRklYTUU6IFRoaXMg
Y291bGQgYmUgY2hhbmdlZCB0byB1c2Ugc3RhdGljIHNpbmdsZSBzaG90IHRpbWVyIG1ldGhvZAor
ICAgIFFUaW1lciogdGltZXIgPSBuZXcgUVRpbWVyKHRoaXMpOworI2lmICFVU0VfT09QX05PVElG
SUNBVElPTgorICAgIGNvbm5lY3QodGltZXIsIFNJR05BTCh0aW1lb3V0KCkpLCBpbmZvQmFubmVy
LCBTTE9UKGRpc2FwcGVhcigpKSk7CisgICAgY29ubmVjdCh0aW1lciwgU0lHTkFMKHRpbWVvdXQo
KSksIHRoaXMsIFNJR05BTChub3RpZmljYXRpb25DbG9zZWQoKSkpOworI2VuZGlmCisgICAgdGlt
ZXItPnNldFNpbmdsZVNob3QodHJ1ZSk7CisgICAgdGltZXItPnN0YXJ0KDMwMDApOworfQpJbmRl
eDogU291cmNlL1dlYktpdC9xdC9wbGF0Zm9ybXBsdWdpbi9tZWVnby93ZWJub3RpZmljYXRpb25w
cmVzZW50ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L3BsYXRmb3JtcGx1Z2lu
L21lZWdvL3dlYm5vdGlmaWNhdGlvbnByZXNlbnRlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L1dlYktpdC9xdC9wbGF0Zm9ybXBsdWdpbi9tZWVnby93ZWJub3RpZmljYXRpb25wcmVzZW50ZXIu
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZu
ZGVmIHdlYm5vdGlmaWNhdGlvbnByZXNlbnRlcl9oCisjZGVmaW5lIHdlYm5vdGlmaWNhdGlvbnBy
ZXNlbnRlcl9oCisKKyNpbmNsdWRlICJxd2Via2l0cGxhdGZvcm1wbHVnaW4uaCIKKworI2luY2x1
ZGUgPFFCYXNpY1RpbWVyPgorCitjbGFzcyBXZWJOb3RpZmljYXRpb25QcmVzZW50ZXIgOiBwdWJs
aWMgUVdlYk5vdGlmaWNhdGlvblByZXNlbnRlciB7CisgICAgUV9PQkpFQ1QKK3B1YmxpYzoKKyAg
ICBXZWJOb3RpZmljYXRpb25QcmVzZW50ZXIoKTsKKyAgICB2aXJ0dWFsIH5XZWJOb3RpZmljYXRp
b25QcmVzZW50ZXIoKSB7IH0KKworICAgIHZvaWQgc2hvd05vdGlmaWNhdGlvbihjb25zdCBRV2Vi
Tm90aWZpY2F0aW9uRGF0YSopOworCitwcml2YXRlOgorICAgIFFCYXNpY1RpbWVyIG1fdGltZXI7
CisgICAgUVN0cmluZyBtX2ZpbGVOYW1lOworfTsKKworI2VuZGlmIC8vIHdlYm5vdGlmaWNhdGlv
bnByZXNlbnRlcl9oCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L3BsYXRmb3JtcGx1Z2luL21lZWdv
L2RlYmlhbi9jaGFuZ2Vsb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9wbGF0Zm9y
bXBsdWdpbi9tZWVnby9kZWJpYW4vY2hhbmdlbG9nCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dl
YktpdC9xdC9wbGF0Zm9ybXBsdWdpbi9tZWVnby9kZWJpYW4vY2hhbmdlbG9nCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDUgQEAKK3F0d2Via2l0LW1lZWdvdG91Y2hwbHVnaW4gKDAuMS4wLjEpIHVu
c3RhYmxlOyB1cmdlbmN5PWxvdworCisgICogSW5pdGlhbCByZWxlYXNlLgorCisgLS0gTWFoZXNo
IEt1bGthcm5pIDxtYWhlc2gua3Vsa2FybmlAbm9raWEuY29tPiAgU2F0LCAwNyBNYXkgMjAxMSAw
ODo0OTowMCArMDUzMApJbmRleDogU291cmNlL1dlYktpdC9xdC9wbGF0Zm9ybXBsdWdpbi9tZWVn
by9kZWJpYW4vY29tcGF0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvcGxhdGZvcm1w
bHVnaW4vbWVlZ28vZGViaWFuL2NvbXBhdAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQv
cXQvcGxhdGZvcm1wbHVnaW4vbWVlZ28vZGViaWFuL2NvbXBhdAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSBAQAorNQpJbmRleDogU291cmNlL1dlYktpdC9xdC9wbGF0Zm9ybXBsdWdpbi9tZWVnby9k
ZWJpYW4vY29udHJvbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L3BsYXRmb3JtcGx1
Z2luL21lZWdvL2RlYmlhbi9jb250cm9sCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9x
dC9wbGF0Zm9ybXBsdWdpbi9tZWVnby9kZWJpYW4vY29udHJvbAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwyMCBAQAorU291cmNlOiBxdHdlYmtpdC1tZWVnb3RvdWNocGx1Z2luCitTZWN0aW9uOiBs
aWJzCitQcmlvcml0eTogb3B0aW9uYWwKK01haW50YWluZXI6IE1haGVzaCBLdWxrYXJuaSA8bWFo
ZXNoLmt1bGthcm5pQG5va2lhLmNvbT4KK0J1aWxkLURlcGVuZHM6IGRlYmhlbHBlciAoPj0gNSks
IGxpYnF0NC1kZXYsIGxpYm1lZWdvdG91Y2gtZGV2LCBsaWJxdG0tc3lzdGVtaW5mby1kZXYsIGxp
YnF0bS1tdWx0aW1lZGlhLWRldgorU3RhbmRhcmRzLVZlcnNpb246IDMuOC4yCisKK1BhY2thZ2U6
IGxpYnF0d2Via2l0LW1lZWdvdG91Y2hwbHVnaW4KK0FyY2hpdGVjdHVyZTogYW55CitEZXBlbmRz
OiAke3NobGliczpEZXBlbmRzfSwgJHttaXNjOkRlcGVuZHN9CitEZXNjcmlwdGlvbjogUXQgNCBX
ZWJLaXQgcGxhdGZvcm0gcGx1Z2luIGZvciBNZWVnbyBUb3VjaCBGcmFtZXdvcmsKKworUGFja2Fn
ZTogbGlicXR3ZWJraXQtbWVlZ290b3VjaHBsdWdpbi1kYmcKK1ByaW9yaXR5OiBleHRyYQorQXJj
aGl0ZWN0dXJlOiBhbnkKK1NlY3Rpb246IGRlYnVnCitEZXBlbmRzOiAke3NobGliczpEZXBlbmRz
fSwgJHttaXNjOkRlcGVuZHN9LCBsaWJxdHdlYmtpdC1tZWVnb3RvdWNocGx1Z2luICg9ICR7Ymlu
YXJ5OlZlcnNpb259KQorRGVzY3JpcHRpb246IFF0IDQgV2ViS2l0IHBsYXRmb3JtIHBsdWdpbiBm
b3IgTWVlZ28gVG91Y2ggRnJhbWV3b3JrCisgVGhpcyBwYWNrYWdlIGNvbnRhaW5zIHRoZSBkZWJ1
Z2dpbmcgc3ltYm9scyBmb3IgdGhlIFF0IDQgV2ViS2l0CisgcGxhdGZvcm0gcGx1Z2luIGZvciBN
ZWVnbyBUb3VjaCBGcmFtZXdvcmsuCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L3BsYXRmb3JtcGx1
Z2luL21lZWdvL2RlYmlhbi9saWJxdHdlYmtpdC1tZWVnb3RvdWNocGx1Z2luLmluc3RhbGwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9wbGF0Zm9ybXBsdWdpbi9tZWVnby9kZWJpYW4v
bGlicXR3ZWJraXQtbWVlZ290b3VjaHBsdWdpbi5pbnN0YWxsCShyZXZpc2lvbiAwKQorKysgU291
cmNlL1dlYktpdC9xdC9wbGF0Zm9ybXBsdWdpbi9tZWVnby9kZWJpYW4vbGlicXR3ZWJraXQtbWVl
Z290b3VjaHBsdWdpbi5pbnN0YWxsCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxIEBACisqClwgTm8g
bmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gODc3NzQpCisrKyBUb29scy9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAxMS0wNS0zMSAgTWFoZXNoIEt1bGth
cm5pICA8bWFoZXNoLmt1bGthcm5pQG5va2lhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRdIFVwc3RyZWFtIE1lZWdvL01hZW1vIHBsYXRm
b3JtIHBsdWdpbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NTg0MzYKKworICAgICAgICBFeGVtcHRpbmcgZGlyZWN0b3J5IFdlYktpdC9xdC9wbGF0Zm9y
bXBsdWdpbi9tZWVnbyBmcm9tIHN0eWxlIGd1aWRlLgorCisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS9zdHlsZS9jaGVja2VyLnB5OgorCiAyMDExLTA1LTMxICBIYW8gWmhlbmcgIDx6aGVuZ2hh
b0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGlyayBQcmFua2UuCkluZGV4
OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5CShyZXZpc2lvbiA4Nzc3NCkK
KysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weQkod29ya2luZyBjb3B5
KQpAQCAtMTk5LDEwICsxOTksMTEgQEAgX1BBVEhfUlVMRVNfU1BFQ0lGSUVSID0gWwogICAgICAg
IitwZXA4L1cyOTEiLCAgIyBUcmFpbGluZyB3aGl0ZSBzcGFjZQogICAgICAgIit3aGl0ZXNwYWNl
L2NhcnJpYWdlX3JldHVybiJdKSwKIAotICAgIChbIyBRdCBTeW1iaWFuIHBsYXRmb3JtIHBsdWdp
biBoYXMgbm8gY29uZmlnLmggb3IgaGVhZGVyIGd1YXJkLgorICAgIChbIyBRdCBTeW1iaWFuL21l
ZWdvIHBsYXRmb3JtIHBsdWdpbiBoYXMgbm8gY29uZmlnLmggb3IgaGVhZGVyIGd1YXJkLgogICAg
ICAgIyBRdCBjb2RlIHVzZXMgJ18nIGluIHNvbWUgcGxhY2VzIChzdWNoIGFzIHByaXZhdGUgc2xv
dHMKICAgICAgICMgYW5kIG9uIHRlc3QgeHh4X2RhdGEgbWV0aG9zIG9uIHRlc3RzKS4KLSAgICAg
ICJTb3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1wbHVnaW4vIl0sCisgICAgICAiU291
cmNlL1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luLyIsCisgICAgICAiU291cmNlL1dl
YktpdC9xdC9wbGF0Zm9ybXBsdWdpbiJdLAogICAgICBbIi1yZWFkYWJpbGl0eS9uYW1pbmciLAog
ICAgICAgIi1idWlsZC9oZWFkZXJfZ3VhcmQiLAogICAgICAgIi1idWlsZC9pbmNsdWRlX29yZGVy
Il0pLApJbmRleDogU291cmNlL1dlYktpdC9xdC9wbGF0Zm9ybXBsdWdpbi9tZWVnby9pbWFnZXMv
YnV0dG9uX2Nhbm5vdHBsYXkucG5nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2Fubm90IGRpc3BsYXk6IGZpbGUgbWFy
a2VkIGFzIGEgYmluYXJ5IHR5cGUuCnN2bjptaW1lLXR5cGUgPSBpbWFnZS9wbmcKClByb3BlcnR5
IGNoYW5nZXMgb246IFNvdXJjZS9XZWJLaXQvcXQvcGxhdGZvcm1wbHVnaW4vbWVlZ28vaW1hZ2Vz
L2J1dHRvbl9jYW5ub3RwbGF5LnBuZwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46bWltZS10eXBlCiAg
ICsgaW1hZ2UvcG5nCgoKaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUZBQUFBQlFDQVlBQUFINUZz
STdBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQQpHWFJGV0hSVGIyWjBkMkZ5WlFCQlpH
OWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFCQ1pKUkVGVWVOcU1rRkVLQUNBSVE5dnVmK2ZGCklF
RURMVDhFM1hPS2tMUitnazRBVEhjVHNvN2ptQ0ZrcURnMllobm15eW42dk81QlY5K2d1cHJUdXR6
bkFCVTQvamplYUgwTFFDbVYKSkFFQWdxRDgvNk10TFVybzVLMGhCRnlzdFJsTVh6L3J4a0xhb1Jv
VzZ3MDd3dE5hd2JHcnFkZ0s0SnEzT3R3NVp0WHJua2hFVkVWRQordTZSZ3BlY0lQZTZQbk9rVEVL
MktRRHJaSkFFQUFpQ3dQVC9mNjZMVGFXUUh2UllBeFZzVHpQN0dDLzRqZGVFdkZrNnlBaHBGRVY5
CkZSaFEyWml3Q3dqWW1BaFFFN0QxZ3oyam14bG5rZWhvSG1WZkNXVlV5VmlMUm1MUFM4dHJ4Nllk
N0NVQUpmVjJBeUFJQTFEMGh6MTEKRUkycnVDa2lpc0hTeDRXRUdCSjZLRmlvS2JkZTJ0bVBTWmN4
cVY5cDI0KzIxWlZtSjJPU2NoNExRYjJZTEZ0Wk5YdmI5MkxxR2R3RAppbXJZbStyemFRZEwwQWo3
UUlJUzdBZEdLTUVHMEVNSnBvSUV0VEFUOUg1QVdGSXpHRUduc2JCT2FkSFM0dWMzZ0JZL3ZRRVV4
ZGpFCmpSb25lSFZtb2ViakVHRWFhajRPRlBOaUxnRm9yMk1jZ0VFWWhxTDN2M1dscW1KQVRZanR6
OEFJZVJMRVFOc3AzNUR2R1JIVjFpa24KYkp1SFE2ZDF5Z25GS1l1aGFwMjE3NU9JVHFBbjJGK2J2
bU0vb0RUVWhiVVhIZ0ZOWVpNdWRxRUk3QWgwb1JSc0RLU2hVNWdNVEtFcQpMQUZLWnl5T3A5dXdG
SXJEOEJ6Rmt4OE9mRHo1OGNDbllUUlVYc0NPQzdQT2VBRVhwa0xseHdJRmMrdEkvNE5MVC82Mnpp
TUFyMlp5CkJDQU13OEQrdStiRk43NTJWWUJIZ29GRWg5djVsVWx3ZkE3K1QyVy93UTdPODlzd1NY
Wnh5ai9NSURuQmFmMytKTWtwVHZzUUpVaHUKY0VZbi9JWGtGa2U3ZzZuN1dCVUtpRmd3MVF3aHVS
UXRxT2hCa2lTcHF2RThSWmY4Z0NkQmpSTWVtY1ZjSGUySHQ5NDRhdG9WNDA2UwozTVFma1Z3bWtz
MWNTRjRDK0VqOGRsSkJpV3d3a2c4U0NldEtxaVhqWHlVQ05rTDBrWjZrOVZ3czViLzBKS2pveFQy
RVhlUWdNcDFVCjVwb1NwcnM2bysxRTdJTlp4U0oxYktMUVBucWMvdkJKbFN4eDJzUEV6c0lHcHpW
TWJuNU1jY3BoWXkxbGd2TWN0blptSmpqVk5wQzYKZWRUQnFZYjFLcUxDK1FRbzd3eVNFSVpoR01o
VGVSby9oUXNISmdlbUpMYXlHL29CV1dxVDJMSW5YV29kcEhvcHFWWklhMUUzQUQxVApuMmxJdUdr
K1B3TjludGpqckpGQnlHbytVMERmaWhHcWtGMThsb0FNUW5iektRRWlDcG5pVXdwRUVETE5weDAw
SmVRdURvZ2dqTUpkCm51ZWhDa21KVVJFa09TYk4yNmF1Q3Z5eW9XOG5sbzBiZTZEaFQwQjZKcURJ
d2NpNXFDcVpKU2J4dW5LS1ZrWnE2MUpLL2ExelJtZ08KMEJIaWJYVi9UbHErTzRRODhnQ0oybWdu
cHpBSklmOGlpVzcxSXcxR0pybWNVeGdKYUdQWDRBQ1RMUzJOZFk1MXlFM0JJbCtxc2FHRQphaldZ
VzVxUS9kbmZWTi9hcytrQzNqa2ZrK1JURGt5YTBFcndLUU1tendoMjhsa0dOazJwZHZDWkJqYU85
M2J3cVJqTTFrN3FWL0M1Ci9PdUc0VUx4eC90KzRQdnRnR2VGendzNlR5dFo3TUl6U2dBQUFBQkpS
VTVFcmtKZ2dnPT0KCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L3BsYXRmb3JtcGx1Z2luL21lZWdv
L2ltYWdlcy9idXR0b25fY2xvc2UucG5nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2Fubm90IGRpc3BsYXk6IGZpbGUg
bWFya2VkIGFzIGEgYmluYXJ5IHR5cGUuCnN2bjptaW1lLXR5cGUgPSBpbWFnZS9wbmcKClByb3Bl
cnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJLaXQvcXQvcGxhdGZvcm1wbHVnaW4vbWVlZ28vaW1h
Z2VzL2J1dHRvbl9jbG9zZS5wbmcKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOm1pbWUtdHlwZQogICAr
IGltYWdlL3BuZwoKCmlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFDZ0FBQUFvQ0FZQUFBQ00vcmh0
QUFBQUdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkoKYldGblpWSmxZV1I1Y2NsbFBBQUFBUkpK
UkVGVWVOcnMySUVOZ2pBUUJkRFdPQUFqTUlJYnlBaU9VRGR3QkRaZ0JOaEFuSUE0Z1IzQgpEWFNE
ZWsyTUtWakthZVI2YW45eU1TUVFYbWk5SEFpUjh1T1JGRGN4eHVUd281Q25OMUxLTStsVEFHQnA4
Tm03MXk0WXJtckdIZGpMCmt1ZytMZFRhT1M3WVBoSFlZL1hFSHV5aUxiSEZ2ZkJ2cGdVR2NEbzZN
SURiUWgyaUFrTTRhTWhOMUNWK0UzY2xhVE9BcTVDNDF0T1MKU1BaZDVXa2hTbkRLb09meHdqbklI
ZFFtRFk0cGZ4ZTc4ZTNrQWJYaWlGTk8rN2l3UWc1d0R5VDFDMDUzcnhxQmV4b3k1d1lPVTB6ZwpU
bEJaVkNBYjNBaXdab01iQWZMQklZSHhjQWdnT1U3NmdJSHp0VE9TSDJFeUxya0IreGRENWdheS96
YnpsUitQN010MGpyaFdwNWt1CjVRTzVDVEFBa0FVVE5DVWZ3Y2NBQUFBQVNVVk9SSzVDWUlJPQoK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvcGxhdGZvcm1wbHVnaW4vbWVlZ28vaW1hZ2VzL2J1dHRv
bl9wYXVzZS5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpDYW5ub3QgZGlzcGxheTogZmlsZSBtYXJrZWQgYXMgYSBi
aW5hcnkgdHlwZS4Kc3ZuOm1pbWUtdHlwZSA9IGltYWdlL3BuZwoKUHJvcGVydHkgY2hhbmdlcyBv
bjogU291cmNlL1dlYktpdC9xdC9wbGF0Zm9ybXBsdWdpbi9tZWVnby9pbWFnZXMvYnV0dG9uX3Bh
dXNlLnBuZwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46bWltZS10eXBlCiAgICsgaW1hZ2UvcG5nCgoK
aVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUNnQUFBQW9DQVlBQUFDTS9yaHRBQUFBR1hSRldIUlRi
MlowZDJGeVpRQkJaRzlpWlNCSgpiV0ZuWlZKbFlXUjVjY2xsUEFBQUFJSkpSRUZVZU5yc21FRU5n
REFNUlZzVVRNSWtJR0VTY0lZbEpFd0NEcGlETWdIUUx1RXdEdThsCnl3N05iOSsxRlFFQUFCY3oy
OHluT05uVTMrVms5MmorTXVDNEJ2VVNaTk9IM2tPQ1UwRVFRUVFSUkJCQkJCRkVFRUVFRWZ5N1lB
dnEKMWFtZFFUN3FMVHE0RzcrdGowMVZhNUROL2N1UHcxVVBMZzhBTUpsYmdBRUFPREpUYTlERTRu
Y0FBQUFBU1VWT1JLNUNZSUk9CgpJbmRleDogU291cmNlL1dlYktpdC9xdC9wbGF0Zm9ybXBsdWdp
bi9tZWVnby9pbWFnZXMvYnV0dG9uX3BsYXkucG5nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2Fubm90IGRpc3BsYXk6
IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5cGUuCnN2bjptaW1lLXR5cGUgPSBpbWFnZS9wbmcK
ClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJLaXQvcXQvcGxhdGZvcm1wbHVnaW4vbWVl
Z28vaW1hZ2VzL2J1dHRvbl9wbGF5LnBuZwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46bWltZS10eXBl
CiAgICsgaW1hZ2UvcG5nCgoKaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUNnQUFBQW9DQVlBQUFD
TS9yaHRBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSgpiV0ZuWlZKbFlXUjVjY2xsUEFB
QUFQWkpSRUZVZU5yc2w5RU53aUFRaGt2VEFSakJFUnpCRVJ4Qk45QU43QVM2UWJzQmJsQTNxQnZZ
CkRld0dlSmR3NnB0QUJlN2h2dVFlbWhUNkZmNVNxQ3BCRUFUaEo5WmFEWFdDMm5FVjNOZ1BJMTV6
RmlRTTFJcXpJUEowVTYrNUNoS1AKb3ZuMEVDU0dJdmtNRUNTNnJQbU1FSHpuazdQZ2R6NjNzYyt1
TTd3ZlRyVngrVnh6RkNUdzR4bGRQalZIUVFLWEkrOWxxUzYwY3VFSQpkcHdGWjZpano0MU5BYmtl
cWxWS1Rkd0U3emhxSUhZTGFkVGttazRRNjJNYXB4WnNvUzRnTjhkMmtFcnc2a1p0V3RyUnZ3VlJh
QithCnN4ei9ZdHdZSExqdUI4OWNkOVFEMXpQSm91MVR5bk94S1pvelFSQ0VOTHdFR0FCRSsvKzhL
cDdmZFFBQUFBQkpSVTVFcmtKZ2dnPT0KCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>