<?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>47615</bug_id>
          
          <creation_ts>2010-10-13 13:16:43 -0700</creation_ts>
          <short_desc>REGRESSION: Copied content loses formatting on paste to external apps</short_desc>
          <delta_ts>2011-03-08 18:36:39 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac (Intel)</rep_platform>
          <op_sys>OS X 10.6</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar, Regression</keywords>
          <priority>P1</priority>
          <bug_severity>Critical</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>55107</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jochen Sprenger">pwoerter</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>darin</cc>
    
    <cc>enrica</cc>
    
    <cc>eric</cc>
    
    <cc>ggaren</cc>
    
    <cc>jamesr</cc>
    
    <cc>morrita</cc>
    
    <cc>naofumi</cc>
    
    <cc>rniwa</cc>
    
    <cc>tkent</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>293665</commentid>
    <comment_count>0</comment_count>
    <who name="Jochen Sprenger">pwoerter</who>
    <bug_when>2010-10-13 13:16:43 -0700</bug_when>
    <thetext>If you highlight a passage on a webpage and copy it to a texteditor, the copied passage loses all formatting.
This allies to all the text as well as images (latter ones are completely ignored during paste).
This not only happens if you copy the highlighted part to your clipboard and paste it into a new document outside of webkit/Safari.
It happens as well if you highlight a portion of a webpage, click and hold the highlighted part and then drag it to an new document (in TextEdit for example).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294180</commentid>
    <comment_count>1</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-10-14 10:31:25 -0700</bug_when>
    <thetext>Could you please provide step by step instructions to reproduce this?

Here is what I tried, and didn&apos;t see any problems:
1. Open http://www.apple.com/safari/ in Safari 5.0.2.
2. Selected a paragraph starting with &quot;It has innovative new features&quot;.
3. Pressed Cmd+C to copy it.
4. Launched TextEdit, which opened a blank document.
5. Pressed Cmd+V to paste.

All formatting was preserved.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294340</commentid>
    <comment_count>2</comment_count>
    <who name="Jochen Sprenger">pwoerter</who>
    <bug_when>2010-10-14 13:50:56 -0700</bug_when>
    <thetext>Maybe I was unclear in my initial posting. You are right, that formatting is preserved in Safari.
But if you launch WebKit, the formatting is gone.
So just go to http://nightly.webkit.org/ and download the latest nightly build (I just tested the current build r69728).
Install and launch it.
Then follow your very own steps and you’ll see that he formatting won’t transfer.

Please post back if you have additional questions.
And sorry for the typos in post #1.

(In reply to comment #1)
&gt; Could you please provide step by step instructions to reproduce this?
&gt; 
&gt; Here is what I tried, and didn&apos;t see any problems:
&gt; 1. Open http://www.apple.com/safari/ in Safari 5.0.2.
&gt; 2. Selected a paragraph starting with &quot;It has innovative new features&quot;.
&gt; 3. Pressed Cmd+C to copy it.
&gt; 4. Launched TextEdit, which opened a blank document.
&gt; 5. Pressed Cmd+V to paste.
&gt; 
&gt; All formatting was preserved.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294372</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-10-14 14:31:56 -0700</bug_when>
    <thetext>Thank you, I can reproduce this with a nightly build. Should have tried right away, but this didn&apos;t sound like a typical WebKit bug, so I asked for clarification instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294374</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-10-14 14:32:36 -0700</bug_when>
    <thetext>&lt;rdar://problem/8553404&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294392</commentid>
    <comment_count>5</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-10-14 15:03:51 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; Here is what I tried, and didn&apos;t see any problems:
&gt; 1. Open http://www.apple.com/safari/ in Safari 5.0.2.
&gt; 2. Selected a paragraph starting with &quot;It has innovative new features&quot;.
&gt; 3. Pressed Cmd+C to copy it.
&gt; 4. Launched TextEdit, which opened a blank document.
&gt; 5. Pressed Cmd+V to paste.

This seems to be some bug with clipboard.  We DO preserve the style when I paste it on http://www.mozilla.org/editor/midasdemo/

Alexey &amp; Enrica:
do we use WebKit2 for nightly yet?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294396</commentid>
    <comment_count>6</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-10-14 15:08:42 -0700</bug_when>
    <thetext>&gt; do we use WebKit2 for nightly yet?

No. There is no way to use it with nightlies in Safari 5.0.2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294405</commentid>
    <comment_count>7</comment_count>
    <who name="Jochen Sprenger">pwoerter</who>
    <bug_when>2010-10-14 15:19:06 -0700</bug_when>
    <thetext>&gt; This seems to be some bug with clipboard.  We DO preserve the style when I paste it on http://www.mozilla.org/editor/midasdemo/
&gt;

I don’t know what you mean with mozilla, but using WebKit you also loose formatting when you drag text out of the browser and into a textdocument.
As far as I know during drag&amp;drop the clipboard is not involved.
(At least the dragged part ain’t in your clipboard after dropping).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294681</commentid>
    <comment_count>8</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2010-10-15 04:21:10 -0700</bug_when>
    <thetext>I&apos;ve just play with this a bit.
I wonder why other apps can read NSHTMLPboardTypes from the pboard regardless
WebKit doesn&apos;t write with that type.
It looks WebKit just provides
WebArchivePboardType, NSRTFDPboardType, NSRTFPboardType, NSStringPboardType....</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294830</commentid>
    <comment_count>9</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-10-15 11:16:22 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; I&apos;ve just play with this a bit.
&gt; I wonder why other apps can read NSHTMLPboardTypes from the pboard regardless
&gt; WebKit doesn&apos;t write with that type.
&gt; It looks WebKit just provides
&gt; WebArchivePboardType, NSRTFDPboardType, NSRTFPboardType, NSStringPboardType....

WebKit doesn&apos;t write text/html to the pasteboard because it broke MS Office 2004.
http://trac.webkit.org/changeset/6793
https://bugs.webkit.org/show_bug.cgi?id=19893

However, WebArchivePboardType should include the information necessary to paste HTML.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298064</commentid>
    <comment_count>10</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-10-22 10:45:35 -0700</bug_when>
    <thetext>*** Bug 48115 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353910</commentid>
    <comment_count>11</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-02-18 16:10:56 -0800</bug_when>
    <thetext>*** Bug 54500 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>354041</commentid>
    <comment_count>12</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-02-18 20:23:11 -0800</bug_when>
    <thetext>&gt; &lt;rdar://problem/8553404&gt;

Now tracked as &lt;rdar://problem/9001214&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>356415</commentid>
    <comment_count>13</comment_count>
      <attachid>83549</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2011-02-23 14:16:41 -0800</bug_when>
    <thetext>Created attachment 83549
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>356426</commentid>
    <comment_count>14</comment_count>
      <attachid>83549</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-02-23 14:28:16 -0800</bug_when>
    <thetext>Comment on attachment 83549
Patch

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

OK to land this as-is, but over time we should make this use coding style closer to the rest of WebKit.

&gt; Source/WebCore/platform/mac/PasteboardMac.mm:153
&gt; +        // In WebKit2 we are using a different way to create the NSAttributedString from the DOMrange that doesn&apos;t require access to the WebView.

Typo: &quot;DOM range&quot; instead of &quot;DOMrange&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>356522</commentid>
    <comment_count>15</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2011-02-23 16:09:51 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/79502</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>356569</commentid>
    <comment_count>16</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-02-23 17:05:26 -0800</bug_when>
    <thetext>This doesn&apos;t seem to compile on my Snow Leopard box or the Leopard builder on build.webkit.org (the SL builder hasn&apos;t cycled yet):


/usr/local/home/jamesr/WebKit/Source/WebCore/platform/mac/HTMLConverter.mm:41:41: error: Foundation/NSURL_NSURLExtras.h: No such file or directory
cc1objplus: warnings being treated as errors
/usr/local/home/jamesr/WebKit/Source/WebCore/platform/mac/HTMLConverter.mm: In function ‘NSFileWrapper* fileWrapperForURL(WebCore::DocumentLoader*, NSURL*)’:
/usr/local/home/jamesr/WebKit/Source/WebCore/platform/mac/HTMLConverter.mm:785: warning: ‘NSURL’ may not respond to ‘-_web_suggestedFilenameWithMIMEType:’
/usr/local/home/jamesr/WebKit/Source/WebCore/platform/mac/HTMLConverter.mm:785: warning: (Messages without a matching method signature
/usr/local/home/jamesr/WebKit/Source/WebCore/platform/mac/HTMLConverter.mm:785: warning: will be assumed to return ‘id’ and accept
/usr/local/home/jamesr/WebKit/Source/WebCore/platform/mac/HTMLConverter.mm:785: warning: ‘...’ as arguments.)


is someone working on fixing it or should I roll this out for now?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>356610</commentid>
    <comment_count>17</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-02-23 18:13:34 -0800</bug_when>
    <thetext>I rolled this out in http://trac.webkit.org/changeset/79513. Reopening.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>356611</commentid>
    <comment_count>18</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-02-23 18:15:27 -0800</bug_when>
    <thetext>There were two build failures.

Leopard (32bit-64bit conversions):

http://build.webkit.org/builders/Leopard%20Intel%20Release%20%28Build%29/builds/30390/steps/compile-webkit/logs/stdio

SnowLeopard (Private header issues):

http://build.webkit.org/builders/SnowLeopard%20Intel%20Leaks/builds/15096/steps/compile-webkit/logs/stdio</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>363578</commentid>
    <comment_count>19</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2011-03-07 14:16:14 -0800</bug_when>
    <thetext>Landed with build fix. http://trac.webkit.org/changeset/80497</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>363600</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-07 14:44:43 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/80497 might have broken Chromium Mac Release</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>363673</commentid>
    <comment_count>21</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2011-03-07 16:30:44 -0800</bug_when>
    <thetext>Reopening because of the failures on the 32-bit builds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>364281</commentid>
    <comment_count>22</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2011-03-08 18:36:39 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/80615</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>83549</attachid>
            <date>2011-02-23 14:16:41 -0800</date>
            <delta_ts>2011-02-23 14:28:16 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>objcconverter.txt</filename>
            <type>text/plain</type>
            <size>104839</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc4ODgzKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTEtMDItMTcgIEVucmljYSBD
YXN1Y2NpICA8ZW5yaWNhQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBXZWJLaXQyOiBSVEYgcGFzdGVib2FyZCBmb3JtYXQgZG9lc24n
dCBwcmVzZXJ2ZSBzdHlsZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTU0NTAwCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS85MDAxMjE0PgorCisgICAg
ICAgIFRoaXMgcGF0Y2ggYWRkcyBhIHdheSBmb3IgV2ViS2l0MiB0byBjcmVhdGUgTlNBdHRyaWJ1
dGVkU3RyaW5ncyBmcm9tCisgICAgICAgIGEgRE9NIHJhbmdlIHdpdGhvdXQgdXNpbmcgdGhlIEFw
cEtpdCBhcGkgaW5pdFdpdGhET01SYW5nZSB0aGF0IGludGVybmFsbHkKKyAgICAgICAgbmVlZHMg
dG8gYWNjZXNzIHRoZSBXZWJWaWV3LiBUaGUgTlNBdHRyaWJ1dGVkU3RyaW5nIGlzIG5lZWRlZCB0
byBjcmVhdGUKKyAgICAgICAgUlRGIGZvcm1hdHMgaW4gdGhlIHBhc3RlYm9hcmQuCisgICAgICAg
IFRoaXMgaXMgdG8gYmUgY29uc2lkZXJlZCBhIGZpcnN0IHN0ZXAsIHNpbmNlIGluIHRoZSBmdXR1
cmUgd2Ugd2FudCB0byBoYXZlCisgICAgICAgIGFuIGltcGxlbWVudGF0aW9uIGJhc2VkIG9uIHRo
ZSBUZXh0SXRlcmF0b3IuCisgICAgICAgIAorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajogQWRkZWQgbmV3IGZpbGUuCisgICAgICAgICogcGxhdGZvcm0vbWFjL0hU
TUxDb252ZXJ0ZXIuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjL0hUTUxDb252ZXJ0
ZXIubW06IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFjLm1tOgor
ICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6d3JpdGVTZWxlY3Rpb24pOiBXZSBub3cgdXNl
IFdlYkhUTUxDb252ZXJ0ZXIKKyAgICAgICAgY2xhc3MgZm9yIFdlYktpdDIgdG8gY3JlYXRlIHRo
ZSBOU0F0dHJpYnV0ZWRTdHJpbmcgZnJvbSB0aGUgRE9NIHJhbmdlLgorCiAyMDExLTAyLTE3ICBX
LiBKYW1lcyBNYWNMZWFuICA8d2ptYWNsZWFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBKYW1lcyBSb2JpbnNvbi4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDc4NzU5KQorKysgU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkp
CkBAIC01MzExLDYgKzUzMTEsOCBAQAogCQlDNTEzN0NGMzExQTU4Mzc4MDA0QURCOTkgLyogSlNE
T01TdHJpbmdMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDNTEzN0NGMTExQTU4Mzc4MDA0QURCOTkgLyogSlNET01TdHJpbmdMaXN0LmggKi87IH07
CiAJCUM1MTYwRUVBMTAwNDU0M0EwMEE3Q0VFMiAvKiBTdG9yYWdlQXJlYUltcGwuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzUxNjBFRTgxMDA0NTQz
QTAwQTdDRUUyIC8qIFN0b3JhZ2VBcmVhSW1wbC5jcHAgKi87IH07CiAJCUM1MTYwRUVCMTAwNDU0
M0EwMEE3Q0VFMiAvKiBTdG9yYWdlQXJlYUltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1MTYwRUU5MTAwNDU0M0EwMEE3Q0VFMiAvKiBTdG9yYWdl
QXJlYUltcGwuaCAqLzsgfTsKKwkJQzUyNDM0RkMxMzBDRDA5QjAwQkQ3QTRGIC8qIEhUTUxDb252
ZXJ0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1
MjQzNEZBMTMwQ0QwOUIwMEJEN0E0RiAvKiBIVE1MQ29udmVydGVyLmggKi87IH07CisJCUM1MjQz
NEZEMTMwQ0QwOUIwMEJEN0E0RiAvKiBIVE1MQ29udmVydGVyLm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzUyNDM0RkIxMzBDRDA5QjAwQkQ3QTRGIC8q
IEhUTUxDb252ZXJ0ZXIubW0gKi87IH07CiAJCUM1NDQyNzRCMTFBNTdFN0EwMDYzQTc0OSAvKiBE
T01TdHJpbmdMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDNTQ0Mjc0OTExQTU3RTdBMDA2M0E3NDkgLyogRE9NU3RyaW5nTGlzdC5oICovOyB9Owog
CQlDNTU2MTBGMTExQTcwNEVCMDBCODJEMjcgLyogRE9NU3RyaW5nTGlzdC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTU2MTBGMDExQTcwNEVCMDBC
ODJEMjcgLyogRE9NU3RyaW5nTGlzdC5jcHAgKi87IH07CiAJCUM1NUUzOEJGMTAwNDBENUQwMEE1
NkJEQiAvKiBTdG9yYWdlTmFtZXNwYWNlSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQzU1RTM4QkIxMDA0MEQ1RDAwQTU2QkRCIC8qIFN0b3JhZ2VO
YW1lc3BhY2VJbXBsLmggKi87IH07CkBAIC0xMTY0Miw2ICsxMTY0NCw4IEBACiAJCUM1MTM3Q0Yx
MTFBNTgzNzgwMDRBREI5OSAvKiBKU0RPTVN0cmluZ0xpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNET01TdHJpbmdMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUM1MTYwRUU4MTAwNDU0M0EwMEE3Q0VFMiAvKiBTdG9yYWdlQXJlYUltcGwuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RvcmFnZUFyZWFJbXBsLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzUxNjBFRTkxMDA0NTQzQTAwQTdDRUUyIC8q
IFN0b3JhZ2VBcmVhSW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9y
YWdlQXJlYUltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzUyNDM0RkExMzBD
RDA5QjAwQkQ3QTRGIC8qIEhUTUxDb252ZXJ0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSFRNTENvbnZlcnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlD
NTI0MzRGQjEzMENEMDlCMDBCRDdBNEYgLyogSFRNTENvbnZlcnRlci5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEhUTUxDb252ZXJ0ZXIubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUM1NDQyNzQ5MTFBNTdFN0EwMDYzQTc0OSAvKiBET01TdHJpbmdM
aXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTVN0cmluZ0xpc3QuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzU0NDI3NEExMUE1N0U3QTAwNjNBNzQ5IC8q
IERPTVN0cmluZ0xpc3QuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IERPTVN0cmluZ0xpc3Qu
aWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDNTU2MTBGMDExQTcwNEVCMDBCODJE
MjcgLyogRE9NU3RyaW5nTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBET01TdHJpbmdMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEz
ODY1LDYgKzEzODY5LDggQEAKIAkJCQkwNjZDNzcyQzBBQjYwM0QyMDAyMzhDQzQgLyogRmlsZUNo
b29zZXJNYWMubW0gKi8sCiAJCQkJNTE0QjNGNzUwQzcyMjA1NTAwMDUzMERGIC8qIEZpbGVTeXN0
ZW1NYWMubW0gKi8sCiAJCQkJOTM1QzQ3NkMwOUFDNEQ2MzAwQTZBQUI0IC8qIEZvdW5kYXRpb25F
eHRyYXMuaCAqLywKKwkJCQlDNTI0MzRGQTEzMENEMDlCMDBCRDdBNEYgLyogSFRNTENvbnZlcnRl
ci5oICovLAorCQkJCUM1MjQzNEZCMTMwQ0QwOUIwMEJEN0E0RiAvKiBIVE1MQ29udmVydGVyLm1t
ICovLAogCQkJCTkzNUM0NzZFMDlBQzRENzMwMEE2QUFCNCAvKiBLZXlFdmVudE1hYy5tbSAqLywK
IAkJCQk1MjFENDZGNTExQUVDOTgxMDA1MTQ2MTMgLyogS2lsbFJpbmdNYWMubW0gKi8sCiAJCQkJ
NjU5MzkyMzkwOUFFNDM1QzAwMkM1MzFGIC8qIEtVUkxNYWMubW0gKi8sCkBAIC0yMjQzNCw2ICsy
MjQ0MCw3IEBACiAJCQkJMjZFOThBMTAxMzBBOUZDQTAwOEVCN0IyIC8qIFRleHRDb2RlY0FTQ0lJ
RmFzdFBhdGguaCBpbiBIZWFkZXJzICovLAogCQkJCUI4REJEQjRDMTMwQjBGOEEwMEY1Q0RCMSAv
KiBTZXRTZWxlY3Rpb25Db21tYW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQlCOERCREI0RTEzMEIw
RjhBMDBGNUNEQjEgLyogU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJQzUyNDM0RkMxMzBDRDA5QjAwQkQ3QTRGIC8qIEhUTUxDb252ZXJ0ZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAw
OwogCQl9OwpAQCAtMjUxMTgsNiArMjUxMjUsNyBAQAogCQkJCUExRTExNTQ4MTMwMTVDNUQwMDU0
QUM4QyAvKiBTcG90TGlnaHRTb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjhEQkRCNEIx
MzBCMEY4QTAwRjVDREIxIC8qIFNldFNlbGVjdGlvbkNvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQjhEQkRCNEQxMzBCMEY4QTAwRjVDREIxIC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1h
bmQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQzUyNDM0RkQxMzBDRDA5QjAwQkQ3QTRGIC8qIEhU
TUxDb252ZXJ0ZXIubW0gaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95
bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21hYy9IVE1MQ29udmVydGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL0hUTUxDb252ZXJ0ZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9IVE1MQ29udmVydGVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJEb2N1bWVudExvYWRlci5oIgorI2ltcG9ydCAiRE9N
RG9jdW1lbnQuaCIKKyNpbXBvcnQgIkRPTVJhbmdlLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOworCitAaW50ZXJmYWNlIFdlYkhUTUxDb252ZXJ0ZXIgOiBOU09iamVjdCB7CisgICAgTlNN
dXRhYmxlQXR0cmlidXRlZFN0cmluZyAqX2F0dHJTdHI7CisgICAgTlNVUkwgKl9iYXNlVVJMOwor
ICAgIERPTURvY3VtZW50ICpfZG9jdW1lbnQ7CisgICAgRE9NUmFuZ2UgKl9kb21SYW5nZTsKKyAg
ICBOU011dGFibGVBcnJheSAqX2RvbVN0YXJ0QW5jZXN0b3JzOworICAgIERvY3VtZW50TG9hZGVy
ICpfZGF0YVNvdXJjZTsKKyAgICBOU1N0cmluZyAqX3N0YW5kYXJkRm9udEZhbWlseTsKKyAgICBD
R0Zsb2F0IF90ZXh0U2l6ZU11bHRpcGxpZXI7CisgICAgQ0dGbG9hdCBfd2ViVmlld1RleHRTaXpl
TXVsdGlwbGllcjsKKyAgICBDR0Zsb2F0IF9kZWZhdWx0VGFiSW50ZXJ2YWw7CisgICAgQ0dGbG9h
dCBfZGVmYXVsdEZvbnRTaXplOworICAgIENHRmxvYXQgX21pbmltdW1Gb250U2l6ZTsKKyAgICBO
U011dGFibGVBcnJheSAqX3RleHRMaXN0czsKKyAgICBOU011dGFibGVBcnJheSAqX3RleHRCbG9j
a3M7CisgICAgTlNNdXRhYmxlQXJyYXkgKl90ZXh0VGFibGVzOworICAgIE5TTXV0YWJsZURpY3Rp
b25hcnkgKl90ZXh0VGFibGVGb290ZXJzOworICAgIE5TTXV0YWJsZUFycmF5ICpfdGV4dFRhYmxl
U3BhY2luZ3M7CisgICAgTlNNdXRhYmxlQXJyYXkgKl90ZXh0VGFibGVQYWRkaW5nczsKKyAgICBO
U011dGFibGVBcnJheSAqX3RleHRUYWJsZVJvd3M7CisgICAgTlNNdXRhYmxlQXJyYXkgKl90ZXh0
VGFibGVSb3dBcnJheXM7CisgICAgTlNNdXRhYmxlQXJyYXkgKl90ZXh0VGFibGVSb3dCYWNrZ3Jv
dW5kQ29sb3JzOworICAgIE5TTXV0YWJsZURpY3Rpb25hcnkgKl9jb21wdXRlZFN0eWxlc0ZvckVs
ZW1lbnRzOworICAgIE5TTXV0YWJsZURpY3Rpb25hcnkgKl9zcGVjaWZpZWRTdHlsZXNGb3JFbGVt
ZW50czsKKyAgICBOU011dGFibGVEaWN0aW9uYXJ5ICpfc3RyaW5nc0Zvck5vZGVzOworICAgIE5T
TXV0YWJsZURpY3Rpb25hcnkgKl9mbG9hdHNGb3JOb2RlczsKKyAgICBOU011dGFibGVEaWN0aW9u
YXJ5ICpfY29sb3JzRm9yTm9kZXM7CisgICAgTlNNdXRhYmxlRGljdGlvbmFyeSAqX2F0dHJpYnV0
ZXNGb3JFbGVtZW50czsKKyAgICBOU011dGFibGVEaWN0aW9uYXJ5ICpfZWxlbWVudElzQmxvY2tM
ZXZlbDsKKyAgICBOU011dGFibGVEaWN0aW9uYXJ5ICpfZm9udENhY2hlOworICAgIE5TTXV0YWJs
ZUFycmF5ICpfd3JpdGluZ0RpcmVjdGlvbkFycmF5OworICAgIE5TVUludGVnZXIgX2RvbVJhbmdl
U3RhcnRJbmRleDsKKyAgICBOU0ludGVnZXIgX2luZGV4aW5nTGltaXQ7CisgICAgTlNVSW50ZWdl
ciBfdGh1bWJuYWlsTGltaXQ7CisgICAgTlNJbnRlZ2VyIF9lcnJvckNvZGU7CisgICAgTlNJbnRl
Z2VyIF9xdW90ZUxldmVsOworCisgICAgc3RydWN0IHsKKyAgICAgICAgdW5zaWduZWQgaW50IGlz
U29mdDoxOworICAgICAgICB1bnNpZ25lZCBpbnQgcmVhY2hlZFN0YXJ0OjE7CisgICAgICAgIHVu
c2lnbmVkIGludCByZWFjaGVkRW5kOjE7CisgICAgICAgIHVuc2lnbmVkIGludCBpc0luZGV4aW5n
OjE7CisgICAgICAgIHVuc2lnbmVkIGludCBpc1Rlc3Rpbmc6MTsKKyAgICAgICAgdW5zaWduZWQg
aW50IGhhc1RyYWlsaW5nTmV3bGluZToxOworICAgICAgICB1bnNpZ25lZCBpbnQgcGFkOjI2Owor
ICAgIH0gX2ZsYWdzOworfQorCistIChpZClpbml0OworLSAoaWQpaW5pdFdpdGhET01SYW5nZToo
RE9NUmFuZ2UgKilkb21SYW5nZTsKKworLSAoTlNBdHRyaWJ1dGVkU3RyaW5nICopYXR0cmlidXRl
ZFN0cmluZzsKKworQGVuZAorCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvSFRN
TENvbnZlcnRlci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
SFRNTENvbnZlcnRlci5tbQkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21hYy9IVE1MQ29udmVydGVyLm1tCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE2ODAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIkhUTUxDb252ZXJ0ZXIuaCIK
KworI2ltcG9ydCAiQXJjaGl2ZVJlc291cmNlLmgiCisjaW1wb3J0ICJEb2N1bWVudC5oIgorI2lt
cG9ydCAiRG9jdW1lbnRMb2FkZXIuaCIKKyNpbXBvcnQgIkRPTS5oIgorI2ltcG9ydCAiRE9NRG9j
dW1lbnRJbnRlcm5hbC5oIgorI2ltcG9ydCAiRE9NRWxlbWVudEludGVybmFsLmgiCisjaW1wb3J0
ICJET01IVE1MVGFibGVDZWxsRWxlbWVudC5oIgorI2ltcG9ydCAiRE9NUHJpdmF0ZS5oIgorI2lt
cG9ydCAiRWxlbWVudC5oIgorI2ltcG9ydCAiRnJhbWUuaCIKKyNpbXBvcnQgIkhUTUxOYW1lcy5o
IgorI2ltcG9ydCAiSFRNTFBhcnNlcklkaW9tcy5oIgorI2ltcG9ydCA8Rm91bmRhdGlvbi9OU1VS
TF9OU1VSTEV4dHJhcy5oPgorI2ltcG9ydCA8d3RmL0FTQ0lJQ1R5cGUuaD4KKwordXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCisvLyBBZGRpdGlv
bmFsIGNvbnRyb2wgVW5pY29kZSBjaGFyYWN0ZXJzCitjb25zdCB1bmljaGFyIFdlYk5leHRMaW5l
Q2hhcmFjdGVyID0gMHgwMDg1OworCitAaW50ZXJmYWNlIE5TVGV4dExpc3QgKFRleHRMaXN0UHJp
dmF0ZSkKKysgKE5TRGljdGlvbmFyeSAqKV9zdGFuZGFyZE1hcmtlckF0dHJpYnV0ZXNGb3JBdHRy
aWJ1dGVzOihOU0RpY3Rpb25hcnkgKilhdHRyczsKK0BlbmQKKworQGludGVyZmFjZSBOU1RleHRB
dHRhY2htZW50IChOU0lnbm9yZU9yaWVudGF0aW9uKQorLSAodm9pZClzZXRJZ25vcmVzT3JpZW50
YXRpb246KEJPT0wpZmxhZzsKKy0gKEJPT0wpaWdub3Jlc09yaWVudGF0aW9uOworQGVuZAorCitA
aW50ZXJmYWNlIE5TVVJMIChXZWJEYXRhVVJMKQorKyAoTlNVUkwgKilfd2ViX3VuaXF1ZVdlYkRh
dGFVUkw7CisrIChOU1VSTCAqKV93ZWJfdW5pcXVlV2ViRGF0YVVSTFdpdGhSZWxhdGl2ZVN0cmlu
ZzooTlNTdHJpbmcgKilzdHJpbmc7CitAZW5kCisKK0BpbnRlcmZhY2UgV2ViSFRNTENvbnZlcnRl
cihXZWJIVE1MQ29udmVydGVyUHJpdmF0ZSkKKworLSAoTlNTdHJpbmcgKilfc3RyaW5nRm9yTm9k
ZTooRE9NTm9kZSAqKW5vZGUgcHJvcGVydHk6KE5TU3RyaW5nICopa2V5OworLSAoTlNDb2xvciAq
KV9jb2xvckZvck5vZGU6KERPTU5vZGUgKilub2RlIHByb3BlcnR5OihOU1N0cmluZyAqKWtleTsK
Ky0gKEJPT0wpX2dldEZsb2F0OihDR0Zsb2F0ICopdmFsIGZvck5vZGU6KERPTU5vZGUgKilub2Rl
IHByb3BlcnR5OihOU1N0cmluZyAqKWtleTsKKy0gKHZvaWQpX3RyYXZlcnNlTm9kZTooRE9NTm9k
ZSAqKW5vZGUgZGVwdGg6KE5TSW50ZWdlcilkZXB0aCBlbWJlZGRlZDooQk9PTCllbWJlZGRlZDsK
Ky0gKHZvaWQpX3RyYXZlcnNlRm9vdGVyTm9kZTooRE9NTm9kZSAqKW5vZGUgZGVwdGg6KE5TSW50
ZWdlcilkZXB0aDsKKworQGVuZAorCisvLyBSZXR1cm5zIHRoZSBmb250IHRvIGJlIHVzZWQgaWYg
dGhlIE5TRm9udEF0dHJpYnV0ZU5hbWUgZG9lc24ndCBleGlzdAorc3RhdGljIE5TRm9udCAqV2Vi
RGVmYXVsdEZvbnQoKQoreworICAgIHN0YXRpYyBOU0ZvbnQgKmRlZmF1bHRGb250ID0gbmlsOwor
ICAgIAorICAgIGlmIChkZWZhdWx0Rm9udCkKKyAgICAgICAgcmV0dXJuIGRlZmF1bHRGb250Owor
ICAgIAorICAgIE5TRm9udCAqZm9udCA9IFtOU0ZvbnQgZm9udFdpdGhOYW1lOkAiSGVsdmV0aWNh
IiBzaXplOjEyLjBdOyAgICAKKyAgICBpZiAoIWZvbnQpCisgICAgICAgIGZvbnQgPSBbTlNGb250
IHN5c3RlbUZvbnRPZlNpemU6MTIuMF07CisgICAgCisgICAgZGVmYXVsdEZvbnQgPSBbZm9udCBy
ZXRhaW5dOworICAgIAorICAgIHJldHVybiBkZWZhdWx0Rm9udDsKK30KKworQGltcGxlbWVudGF0
aW9uIFdlYkhUTUxDb252ZXJ0ZXIKKworc3RhdGljIE5TRm9udCAqX2ZvbnRGb3JOYW1lQW5kU2l6
ZShOU1N0cmluZyAqZm9udE5hbWUsIENHRmxvYXQgc2l6ZSwgTlNNdXRhYmxlRGljdGlvbmFyeSAq
Y2FjaGUpCit7CisgICAgTlNGb250TWFuYWdlciAqZm9udE1hbmFnZXIgPSBbTlNGb250TWFuYWdl
ciBzaGFyZWRGb250TWFuYWdlcl07CisgICAgTlNGb250ICpmb250ID0gW2NhY2hlIG9iamVjdEZv
cktleTpmb250TmFtZV07CisKKyAgICBpZiAoZm9udCkgeworICAgICAgICBmb250ID0gW2ZvbnRN
YW5hZ2VyIGNvbnZlcnRGb250OmZvbnQgdG9TaXplOnNpemVdOworICAgICAgICByZXR1cm4gZm9u
dDsKKyAgICB9CisgICAgZm9udCA9IFtmb250TWFuYWdlciBmb250V2l0aEZhbWlseTpmb250TmFt
ZSB0cmFpdHM6MCB3ZWlnaHQ6MCBzaXplOnNpemVdOworICAgIGlmICghZm9udCkgeworICAgICAg
ICBOU0FycmF5ICphdmFpbGFibGVGYW1pbHlOYW1lcyA9IFtmb250TWFuYWdlciBhdmFpbGFibGVG
b250RmFtaWxpZXNdOworICAgICAgICBOU1JhbmdlIGRpdmlkaW5nUmFuZ2UsIGRpdmlkaW5nU3Bh
Y2VSYW5nZSA9IFtmb250TmFtZSByYW5nZU9mU3RyaW5nOkAiICIgb3B0aW9uczpOU0JhY2t3YXJk
c1NlYXJjaF0sIGRpdmlkaW5nRGFzaFJhbmdlID0gW2ZvbnROYW1lIHJhbmdlT2ZTdHJpbmc6QCIt
IiBvcHRpb25zOk5TQmFja3dhcmRzU2VhcmNoXTsKKyAgICAgICAgZGl2aWRpbmdSYW5nZSA9ICgw
IDwgZGl2aWRpbmdTcGFjZVJhbmdlLmxlbmd0aCAmJiAwIDwgZGl2aWRpbmdEYXNoUmFuZ2UubGVu
Z3RoKSA/IChkaXZpZGluZ1NwYWNlUmFuZ2UubG9jYXRpb24gPiBkaXZpZGluZ0Rhc2hSYW5nZS5s
b2NhdGlvbiA/IGRpdmlkaW5nU3BhY2VSYW5nZSA6IGRpdmlkaW5nRGFzaFJhbmdlKSA6ICgwIDwg
ZGl2aWRpbmdTcGFjZVJhbmdlLmxlbmd0aCA/IGRpdmlkaW5nU3BhY2VSYW5nZSA6IGRpdmlkaW5n
RGFzaFJhbmdlKTsKKyAgICAgICAgd2hpbGUgKDAgPCBkaXZpZGluZ1JhbmdlLmxlbmd0aCkgewor
ICAgICAgICAgICAgTlNTdHJpbmcgKmZhbWlseU5hbWUgPSBbZm9udE5hbWUgc3Vic3RyaW5nVG9J
bmRleDpkaXZpZGluZ1JhbmdlLmxvY2F0aW9uXTsKKyAgICAgICAgICAgIGlmIChbYXZhaWxhYmxl
RmFtaWx5TmFtZXMgY29udGFpbnNPYmplY3Q6ZmFtaWx5TmFtZV0pIHsKKyAgICAgICAgICAgICAg
ICBOU0FycmF5ICpmYW1pbHlNZW1iZXJBcnJheTsKKyAgICAgICAgICAgICAgICBOU1N0cmluZyAq
ZmFjZU5hbWUgPSBbZm9udE5hbWUgc3Vic3RyaW5nRnJvbUluZGV4OihkaXZpZGluZ1JhbmdlLmxv
Y2F0aW9uICsgZGl2aWRpbmdSYW5nZS5sZW5ndGgpXTsKKyAgICAgICAgICAgICAgICBOU0FycmF5
ICpmYW1pbHlNZW1iZXJBcnJheXMgPSBbZm9udE1hbmFnZXIgYXZhaWxhYmxlTWVtYmVyc09mRm9u
dEZhbWlseTpmYW1pbHlOYW1lXTsKKyAgICAgICAgICAgICAgICBOU0VudW1lcmF0b3IgKmZhbWls
eU1lbWJlckFycmF5c0VudW0gPSBbZmFtaWx5TWVtYmVyQXJyYXlzIG9iamVjdEVudW1lcmF0b3Jd
OworICAgICAgICAgICAgICAgIHdoaWxlICgoZmFtaWx5TWVtYmVyQXJyYXkgPSBbZmFtaWx5TWVt
YmVyQXJyYXlzRW51bSBuZXh0T2JqZWN0XSkpIHsKKyAgICAgICAgICAgICAgICAgICAgTlNTdHJp
bmcgKmZhbWlseU1lbWJlckZhY2VOYW1lID0gW2ZhbWlseU1lbWJlckFycmF5IG9iamVjdEF0SW5k
ZXg6MV07CisgICAgICAgICAgICAgICAgICAgIGlmIChbZmFtaWx5TWVtYmVyRmFjZU5hbWUgY29t
cGFyZTpmYWNlTmFtZSBvcHRpb25zOk5TQ2FzZUluc2Vuc2l0aXZlU2VhcmNoXSA9PSBOU09yZGVy
ZWRTYW1lKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBOU0ZvbnRUcmFpdE1hc2sgdHJhaXRz
ID0gW1tmYW1pbHlNZW1iZXJBcnJheSBvYmplY3RBdEluZGV4OjNdIGludGVnZXJWYWx1ZV07Cisg
ICAgICAgICAgICAgICAgICAgICAgICBOU0ludGVnZXIgd2VpZ2h0ID0gW1tmYW1pbHlNZW1iZXJB
cnJheSBvYmplY3RBdEluZGV4OjJdIGludGVnZXJWYWx1ZV07CisgICAgICAgICAgICAgICAgICAg
ICAgICBmb250ID0gW2ZvbnRNYW5hZ2VyIGZvbnRXaXRoRmFtaWx5OmZhbWlseU5hbWUgdHJhaXRz
OnRyYWl0cyB3ZWlnaHQ6d2VpZ2h0IHNpemU6c2l6ZV07CisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBpZiAoIWZvbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKDAgPCBbZmFt
aWx5TWVtYmVyQXJyYXlzIGNvdW50XSkgeworICAgICAgICAgICAgICAgICAgICAgICAgTlNBcnJh
eSAqZmFtaWx5TWVtYmVyQXJyYXkgPSBbZmFtaWx5TWVtYmVyQXJyYXlzIG9iamVjdEF0SW5kZXg6
MF07CisgICAgICAgICAgICAgICAgICAgICAgICBOU0ZvbnRUcmFpdE1hc2sgdHJhaXRzID0gW1tm
YW1pbHlNZW1iZXJBcnJheSBvYmplY3RBdEluZGV4OjNdIGludGVnZXJWYWx1ZV07CisgICAgICAg
ICAgICAgICAgICAgICAgICBOU0ludGVnZXIgd2VpZ2h0ID0gW1tmYW1pbHlNZW1iZXJBcnJheSBv
YmplY3RBdEluZGV4OjJdIGludGVnZXJWYWx1ZV07CisgICAgICAgICAgICAgICAgICAgICAgICBm
b250ID0gW2ZvbnRNYW5hZ2VyIGZvbnRXaXRoRmFtaWx5OmZhbWlseU5hbWUgdHJhaXRzOnRyYWl0
cyB3ZWlnaHQ6d2VpZ2h0IHNpemU6c2l6ZV07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIGRpdmlkaW5nU3BhY2VSYW5nZSA9IFtmYW1pbHlOYW1lIHJhbmdl
T2ZTdHJpbmc6QCIgIiBvcHRpb25zOk5TQmFja3dhcmRzU2VhcmNoXTsKKyAgICAgICAgICAgICAg
ICBkaXZpZGluZ0Rhc2hSYW5nZSA9IFtmYW1pbHlOYW1lIHJhbmdlT2ZTdHJpbmc6QCItIiBvcHRp
b25zOk5TQmFja3dhcmRzU2VhcmNoXTsKKyAgICAgICAgICAgICAgICBkaXZpZGluZ1JhbmdlID0g
KDAgPCBkaXZpZGluZ1NwYWNlUmFuZ2UubGVuZ3RoICYmIDAgPCBkaXZpZGluZ0Rhc2hSYW5nZS5s
ZW5ndGgpID8gKGRpdmlkaW5nU3BhY2VSYW5nZS5sb2NhdGlvbiA+IGRpdmlkaW5nRGFzaFJhbmdl
LmxvY2F0aW9uID8gZGl2aWRpbmdTcGFjZVJhbmdlIDogZGl2aWRpbmdEYXNoUmFuZ2UpIDogKDAg
PCBkaXZpZGluZ1NwYWNlUmFuZ2UubGVuZ3RoID8gZGl2aWRpbmdTcGFjZVJhbmdlIDogZGl2aWRp
bmdEYXNoUmFuZ2UpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGlmICgh
Zm9udCkgZm9udCA9IFtOU0ZvbnQgZm9udFdpdGhOYW1lOkAiVGltZXMiIHNpemU6c2l6ZV07Cisg
ICAgaWYgKCFmb250KSBmb250ID0gW05TRm9udCB1c2VyRm9udE9mU2l6ZTpzaXplXTsKKyAgICBp
ZiAoIWZvbnQpIGZvbnQgPSBbZm9udE1hbmFnZXIgY29udmVydEZvbnQ6V2ViRGVmYXVsdEZvbnQo
KSB0b1NpemU6c2l6ZV07CisgICAgaWYgKCFmb250KSBmb250ID0gV2ViRGVmYXVsdEZvbnQoKTsK
KyAgICBbY2FjaGUgc2V0T2JqZWN0OmZvbnQgZm9yS2V5OmZvbnROYW1lXTsKKyAgICByZXR1cm4g
Zm9udDsKK30KKworKyAoTlNQYXJhZ3JhcGhTdHlsZSAqKWRlZmF1bHRQYXJhZ3JhcGhTdHlsZQor
eworICAgIHN0YXRpYyBOU011dGFibGVQYXJhZ3JhcGhTdHlsZSAqZGVmYXVsdFBhcmFncmFwaFN0
eWxlID0gbmlsOworICAgIGlmICghZGVmYXVsdFBhcmFncmFwaFN0eWxlKSB7CisgICAgICAgIGRl
ZmF1bHRQYXJhZ3JhcGhTdHlsZSA9IFtbTlNQYXJhZ3JhcGhTdHlsZSBkZWZhdWx0UGFyYWdyYXBo
U3R5bGVdIG11dGFibGVDb3B5XTsKKyAgICAgICAgW2RlZmF1bHRQYXJhZ3JhcGhTdHlsZSBzZXRE
ZWZhdWx0VGFiSW50ZXJ2YWw6MzYuMF07CisgICAgICAgIFtkZWZhdWx0UGFyYWdyYXBoU3R5bGUg
c2V0VGFiU3RvcHM6W05TQXJyYXkgYXJyYXldXTsKKyAgICB9CisgICAgcmV0dXJuIGRlZmF1bHRQ
YXJhZ3JhcGhTdHlsZTsKK30KKworLSAoTlNBcnJheSAqKV9jaGlsZHJlbkZvck5vZGU6KERPTU5v
ZGUgKilub2RlCit7CisgICAgTlNNdXRhYmxlQXJyYXkgKmFycmF5ID0gW05TTXV0YWJsZUFycmF5
IGFycmF5XTsKKyAgICBET01Ob2RlICpjaGlsZCA9IFtub2RlIGZpcnN0Q2hpbGRdOworICAgIHdo
aWxlIChjaGlsZCkgeworICAgICAgICBbYXJyYXkgYWRkT2JqZWN0OmNoaWxkXTsKKyAgICAgICAg
Y2hpbGQgPSBbY2hpbGQgbmV4dFNpYmxpbmddOworICAgIH0KKyAgICByZXR1cm4gYXJyYXk7Cit9
CisKKy0gKERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKilfY29tcHV0ZWRTdHlsZUZvckVsZW1lbnQ6
KERPTUVsZW1lbnQgKillbGVtZW50Cit7CisgICAgRE9NRG9jdW1lbnQgKmRvY3VtZW50ID0gW2Vs
ZW1lbnQgb3duZXJEb2N1bWVudF07CisgICAgRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiAqcmVzdWx0
ID0gbmlsOworICAgIHJlc3VsdCA9IFtfY29tcHV0ZWRTdHlsZXNGb3JFbGVtZW50cyBvYmplY3RG
b3JLZXk6ZWxlbWVudF07CisgICAgaWYgKHJlc3VsdCkgeworICAgICAgICBpZiAoW1tOU051bGwg
bnVsbF0gaXNFcXVhbDpyZXN1bHRdKSByZXN1bHQgPSBuaWw7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgcmVzdWx0ID0gW2RvY3VtZW50IGdldENvbXB1dGVkU3R5bGU6ZWxlbWVudCBwc2V1ZG9FbGVt
ZW50OkAiIl0gOworICAgICAgICBbX2NvbXB1dGVkU3R5bGVzRm9yRWxlbWVudHMgc2V0T2JqZWN0
OihyZXN1bHQgPyAoaWQpcmVzdWx0IDogKGlkKVtOU051bGwgbnVsbF0pIGZvcktleTplbGVtZW50
XTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLSAoRE9NQ1NTU3R5bGVEZWNsYXJh
dGlvbiAqKV9zcGVjaWZpZWRTdHlsZUZvckVsZW1lbnQ6KERPTUVsZW1lbnQgKillbGVtZW50Cit7
CisgICAgRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiAqcmVzdWx0ID0gW19zcGVjaWZpZWRTdHlsZXNG
b3JFbGVtZW50cyBvYmplY3RGb3JLZXk6ZWxlbWVudF07CisgICAgaWYgKHJlc3VsdCkgeworICAg
ICAgICBpZiAoW1tOU051bGwgbnVsbF0gaXNFcXVhbDpyZXN1bHRdKSByZXN1bHQgPSBuaWw7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgcmVzdWx0ID0gW2VsZW1lbnQgc3R5bGVdOworICAgICAgICBb
X3NwZWNpZmllZFN0eWxlc0ZvckVsZW1lbnRzIHNldE9iamVjdDoocmVzdWx0ID8gKGlkKXJlc3Vs
dCA6IChpZClbTlNOdWxsIG51bGxdKSBmb3JLZXk6ZWxlbWVudF07CisgICAgfQorICAgIHJldHVy
biByZXN1bHQ7Cit9CisKKy0gKE5TU3RyaW5nICopX2NvbXB1dGVkU3RyaW5nRm9yTm9kZTooRE9N
Tm9kZSAqKW5vZGUgcHJvcGVydHk6KE5TU3RyaW5nICopa2V5Cit7CisgICAgTlNTdHJpbmcgKnJl
c3VsdCA9IG5pbDsKKyAgICBCT09MIGluaGVyaXQgPSBZRVM7CisgICAgRE9NRWxlbWVudCAqZWxl
bWVudCA9IChET01FbGVtZW50ICopbm9kZTsgICAgCisgICAgaWYgKGVsZW1lbnQgJiYgW2VsZW1l
bnQgbm9kZVR5cGVdID09IERPTV9FTEVNRU5UX05PREUpIHsKKyAgICAgICAgRE9NQ1NTU3R5bGVE
ZWNsYXJhdGlvbiAqY29tcHV0ZWRTdHlsZSwgKnNwZWNpZmllZFN0eWxlOworICAgICAgICBpbmhl
cml0ID0gTk87CisgICAgICAgIGlmICghcmVzdWx0ICYmIChjb21wdXRlZFN0eWxlID0gW3NlbGYg
X2NvbXB1dGVkU3R5bGVGb3JFbGVtZW50OmVsZW1lbnRdKSkgeworICAgICAgICAgICAgRE9NQ1NT
UHJpbWl0aXZlVmFsdWUgKmNvbXB1dGVkVmFsdWUgPSAoRE9NQ1NTUHJpbWl0aXZlVmFsdWUgKilb
Y29tcHV0ZWRTdHlsZSBnZXRQcm9wZXJ0eUNTU1ZhbHVlOmtleV07CisgICAgICAgICAgICBpZiAo
Y29tcHV0ZWRWYWx1ZSkgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHZhbHVlVHlw
ZSA9IFtjb21wdXRlZFZhbHVlIGNzc1ZhbHVlVHlwZV07CisgICAgICAgICAgICAgICAgaWYgKHZh
bHVlVHlwZSA9PSBET01fQ1NTX1BSSU1JVElWRV9WQUxVRSkgeworICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBzaG9ydCBwcmltaXRpdmVUeXBlID0gW2NvbXB1dGVkVmFsdWUgcHJpbWl0aXZl
VHlwZV07CisgICAgICAgICAgICAgICAgICAgIGlmIChwcmltaXRpdmVUeXBlID09IERPTV9DU1Nf
U1RSSU5HIHx8IHByaW1pdGl2ZVR5cGUgPT0gRE9NX0NTU19VUkkgfHwgcHJpbWl0aXZlVHlwZSA9
PSBET01fQ1NTX0lERU5UIHx8IHByaW1pdGl2ZVR5cGUgPT0gRE9NX0NTU19BVFRSKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBbY29tcHV0ZWRWYWx1ZSBnZXRTdHJpbmdWYWx1
ZV07CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICYmIFtyZXN1bHQgbGVuZ3Ro
XSA9PSAwKSByZXN1bHQgPSBuaWw7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKHZhbHVlVHlwZSA9PSBET01fQ1NTX1ZBTFVFX0xJU1QpIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0ID0gW2NvbXB1dGVkU3R5bGUgZ2V0UHJvcGVydHlWYWx1ZTpr
ZXldOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICBpZiAoIXJlc3VsdCAmJiAoc3BlY2lmaWVkU3R5bGUgPSBbc2VsZiBfc3BlY2lmaWVkU3R5bGVG
b3JFbGVtZW50OmVsZW1lbnRdKSkgeworICAgICAgICAgICAgRE9NQ1NTUHJpbWl0aXZlVmFsdWUg
KnNwZWNpZmllZFZhbHVlID0gKERPTUNTU1ByaW1pdGl2ZVZhbHVlICopW3NwZWNpZmllZFN0eWxl
IGdldFByb3BlcnR5Q1NTVmFsdWU6a2V5XTsKKyAgICAgICAgICAgIGlmIChzcGVjaWZpZWRWYWx1
ZSkgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHZhbHVlVHlwZSA9IFtzcGVjaWZp
ZWRWYWx1ZSBjc3NWYWx1ZVR5cGVdOworICAgICAgICAgICAgICAgIGlmICh2YWx1ZVR5cGUgPT0g
RE9NX0NTU19QUklNSVRJVkVfVkFMVUUpIHsKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
c2hvcnQgcHJpbWl0aXZlVHlwZSA9IFtzcGVjaWZpZWRWYWx1ZSBwcmltaXRpdmVUeXBlXTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVR5cGUgPT0gRE9NX0NTU19TVFJJTkcgfHwg
cHJpbWl0aXZlVHlwZSA9PSBET01fQ1NTX1VSSSB8fCBwcmltaXRpdmVUeXBlID09IERPTV9DU1Nf
SURFTlQgfHwgcHJpbWl0aXZlVHlwZSA9PSBET01fQ1NTX0FUVFIpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdCA9IFtzcGVjaWZpZWRWYWx1ZSBnZXRTdHJpbmdWYWx1ZV07CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICYmIFtyZXN1bHQgbGVuZ3RoXSA9PSAwKSBy
ZXN1bHQgPSBuaWw7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyA/Pz8gaGFjayBhbGVydAor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXN1bHQgPSBbc3BlY2lmaWVkU3R5bGUgZ2V0UHJvcGVydHlWYWx1ZTprZXld
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZVR5cGUgPT0gRE9NX0NTU19JTkhFUklUKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGluaGVyaXQgPSBZRVM7CisgICAgICAgICAgICAgICAgfSBlbHNl
IGlmICh2YWx1ZVR5cGUgPT0gRE9NX0NTU19WQUxVRV9MSVNUKSB7CisgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdCA9IFtzcGVjaWZpZWRTdHlsZSBnZXRQcm9wZXJ0eVZhbHVlOmtleV07CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICghcmVz
dWx0KSB7CisgICAgICAgICAgICBFbGVtZW50KiBjb3JlRWxlbWVudCA9IGNvcmUoZWxlbWVudCk7
CisgICAgICAgICAgICBpZiAoW0AiZGlzcGxheSIgaXNFcXVhbFRvU3RyaW5nOmtleV0pIHsKKyAg
ICAgICAgICAgICAgICBpZiAoY29yZUVsZW1lbnQtPmhhc1RhZ05hbWUoaGVhZFRhZykgfHwgY29y
ZUVsZW1lbnQtPmhhc1RhZ05hbWUoc2NyaXB0VGFnKSB8fCBjb3JlRWxlbWVudC0+aGFzVGFnTmFt
ZShhcHBsZXRUYWcpIHx8IGNvcmVFbGVtZW50LT5oYXNUYWdOYW1lKG5vZnJhbWVzVGFnKSkKKyAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gQCJub25lIjsKKyAgICAgICAgICAgICAgICBlbHNl
IGlmIChjb3JlRWxlbWVudC0+aGFzVGFnTmFtZShhZGRyZXNzVGFnKSB8fCBjb3JlRWxlbWVudC0+
aGFzVGFnTmFtZShibG9ja3F1b3RlVGFnKSB8fCBjb3JlRWxlbWVudC0+aGFzVGFnTmFtZShib2R5
VGFnKSB8fCBjb3JlRWxlbWVudC0+aGFzVGFnTmFtZShjZW50ZXJUYWcpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgfHwgY29yZUVsZW1lbnQtPmhhc1RhZ05hbWUoZGRUYWcpIHx8IGNvcmVFbGVt
ZW50LT5oYXNUYWdOYW1lKGRpclRhZykgfHwgY29yZUVsZW1lbnQtPmhhc1RhZ05hbWUoZGl2VGFn
KSB8fCBjb3JlRWxlbWVudC0+aGFzVGFnTmFtZShkbFRhZykKKyAgICAgICAgICAgICAgICAgICAg
ICAgICB8fCBjb3JlRWxlbWVudC0+aGFzVGFnTmFtZShkdFRhZykgfHwgY29yZUVsZW1lbnQtPmhh
c1RhZ05hbWUoZmllbGRzZXRUYWcpIHx8IGNvcmVFbGVtZW50LT5oYXNUYWdOYW1lKGZvcm1UYWcp
IHx8IGNvcmVFbGVtZW50LT5oYXNUYWdOYW1lKGZyYW1lVGFnKQorICAgICAgICAgICAgICAgICAg
ICAgICAgIHx8IGNvcmVFbGVtZW50LT5oYXNUYWdOYW1lKGZyYW1lc2V0VGFnKSB8fCBjb3JlRWxl
bWVudC0+aGFzVGFnTmFtZShoclRhZykgfHwgY29yZUVsZW1lbnQtPmhhc1RhZ05hbWUoaHRtbFRh
ZykgfHwgY29yZUVsZW1lbnQtPmhhc1RhZ05hbWUoaDFUYWcpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgfHwgY29yZUVsZW1lbnQtPmhhc1RhZ05hbWUoaDJUYWcpIHx8IGNvcmVFbGVtZW50LT5o
YXNUYWdOYW1lKGgzVGFnKSB8fCBjb3JlRWxlbWVudC0+aGFzVGFnTmFtZShoNFRhZykgfHwgY29y
ZUVsZW1lbnQtPmhhc1RhZ05hbWUoaDVUYWcpCisgICAgICAgICAgICAgICAgICAgICAgICAgfHwg
Y29yZUVsZW1lbnQtPmhhc1RhZ05hbWUoaDZUYWcpIHx8IGNvcmVFbGVtZW50LT5oYXNUYWdOYW1l
KGlmcmFtZVRhZykgfHwgY29yZUVsZW1lbnQtPmhhc1RhZ05hbWUobWVudVRhZykgfHwgY29yZUVs
ZW1lbnQtPmhhc1RhZ05hbWUobm9zY3JpcHRUYWcpCisgICAgICAgICAgICAgICAgICAgICAgICAg
fHwgY29yZUVsZW1lbnQtPmhhc1RhZ05hbWUob2xUYWcpIHx8IGNvcmVFbGVtZW50LT5oYXNUYWdO
YW1lKHBUYWcpIHx8IGNvcmVFbGVtZW50LT5oYXNUYWdOYW1lKHByZVRhZykgfHwgY29yZUVsZW1l
bnQtPmhhc1RhZ05hbWUodWxUYWcpKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBAImJs
b2NrIjsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChjb3JlRWxlbWVudC0+aGFzVGFnTmFtZShs
aVRhZykpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEAibGlzdC1pdGVtIjsKKyAgICAg
ICAgICAgICAgICBlbHNlIGlmIChjb3JlRWxlbWVudC0+aGFzVGFnTmFtZSh0YWJsZVRhZykpCisg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEAidGFibGUiOworICAgICAgICAgICAgICAgIGVs
c2UgaWYgKGNvcmVFbGVtZW50LT5oYXNUYWdOYW1lKHRyVGFnKSkKKyAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0ID0gQCJ0YWJsZS1yb3ciOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvcmVF
bGVtZW50LT5oYXNUYWdOYW1lKHRoVGFnKSB8fCBjb3JlRWxlbWVudC0+aGFzVGFnTmFtZSh0ZFRh
ZykpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEAidGFibGUtY2VsbCI7CisgICAgICAg
ICAgICAgICAgZWxzZSBpZiAoY29yZUVsZW1lbnQtPmhhc1RhZ05hbWUodGhlYWRUYWcpKQorICAg
ICAgICAgICAgICAgICAgICByZXN1bHQgPSBAInRhYmxlLWhlYWRlci1ncm91cCI7CisgICAgICAg
ICAgICAgICAgZWxzZSBpZiAoY29yZUVsZW1lbnQtPmhhc1RhZ05hbWUodGJvZHlUYWcpKQorICAg
ICAgICAgICAgICAgICAgICByZXN1bHQgPSBAInRhYmxlLXJvdy1ncm91cCI7CisgICAgICAgICAg
ICAgICAgZWxzZSBpZiAoY29yZUVsZW1lbnQtPmhhc1RhZ05hbWUodGZvb3RUYWcpKQorICAgICAg
ICAgICAgICAgICAgICByZXN1bHQgPSBAInRhYmxlLWZvb3Rlci1ncm91cCI7CisgICAgICAgICAg
ICAgICAgZWxzZSBpZiAoY29yZUVsZW1lbnQtPmhhc1RhZ05hbWUoY29sVGFnKSkKKyAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0ID0gQCJ0YWJsZS1jb2x1bW4iOworICAgICAgICAgICAgICAgIGVs
c2UgaWYgKGNvcmVFbGVtZW50LT5oYXNUYWdOYW1lKGNvbGdyb3VwVGFnKSkKKyAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0ID0gQCJ0YWJsZS1jb2x1bW4tZ3JvdXAiOworICAgICAgICAgICAgICAg
IGVsc2UgaWYgKGNvcmVFbGVtZW50LT5oYXNUYWdOYW1lKGNhcHRpb25UYWcpKQorICAgICAgICAg
ICAgICAgICAgICByZXN1bHQgPSBAInRhYmxlLWNhcHRpb24iOworICAgICAgICAgICAgfSBlbHNl
IGlmIChbQCJ3aGl0ZS1zcGFjZSIgaXNFcXVhbFRvU3RyaW5nOmtleV0pIHsKKyAgICAgICAgICAg
ICAgICBpZiAoY29yZUVsZW1lbnQtPmhhc1RhZ05hbWUocHJlVGFnKSkKKyAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0ID0gQCJwcmUiOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICAgICAgaW5oZXJpdCA9IFlFUzsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoW0AiZm9udC1z
dHlsZSIgaXNFcXVhbFRvU3RyaW5nOmtleV0pIHsKKyAgICAgICAgICAgICAgICBpZiAoY29yZUVs
ZW1lbnQtPmhhc1RhZ05hbWUoaVRhZykgfHwgY29yZUVsZW1lbnQtPmhhc1RhZ05hbWUoY2l0ZVRh
ZykgfHwgY29yZUVsZW1lbnQtPmhhc1RhZ05hbWUoZW1UYWcpIHx8IGNvcmVFbGVtZW50LT5oYXNU
YWdOYW1lKHZhclRhZykgfHwgY29yZUVsZW1lbnQtPmhhc1RhZ05hbWUoYWRkcmVzc1RhZykpCisg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEAiaXRhbGljIjsKKyAgICAgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgICAgIGluaGVyaXQgPSBZRVM7CisgICAgICAgICAgICB9IGVs
c2UgaWYgKFtAImZvbnQtd2VpZ2h0IiBpc0VxdWFsVG9TdHJpbmc6a2V5XSkgeworICAgICAgICAg
ICAgICAgIGlmIChjb3JlRWxlbWVudC0+aGFzVGFnTmFtZShiVGFnKSB8fCBjb3JlRWxlbWVudC0+
aGFzVGFnTmFtZShzdHJvbmdUYWcpIHx8IGNvcmVFbGVtZW50LT5oYXNUYWdOYW1lKHRoVGFnKSkK
KyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gQCJib2xkZXIiOworICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgaW5oZXJpdCA9IFlFUzsKKyAgICAgICAgICAgIH0g
ZWxzZSBpZiAoW0AidGV4dC1kZWNvcmF0aW9uIiBpc0VxdWFsVG9TdHJpbmc6a2V5XSkgeworICAg
ICAgICAgICAgICAgIGlmIChjb3JlRWxlbWVudC0+aGFzVGFnTmFtZSh1VGFnKSB8fCBjb3JlRWxl
bWVudC0+aGFzVGFnTmFtZShpbnNUYWcpKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBA
InVuZGVybGluZSI7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoY29yZUVsZW1lbnQtPmhhc1Rh
Z05hbWUoc1RhZykgfHwgY29yZUVsZW1lbnQtPmhhc1RhZ05hbWUoc3RyaWtlVGFnKSB8fCBjb3Jl
RWxlbWVudC0+aGFzVGFnTmFtZShkZWxUYWcpKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQg
PSBAImxpbmUtdGhyb3VnaCI7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
ICAgICBpbmhlcml0ID0gWUVTOyAvLyA/Pz8gdGhpcyBpcyBub3Qgc3RyaWN0bHkgY29ycmVjdAor
ICAgICAgICAgICAgfSBlbHNlIGlmIChbQCJ0ZXh0LWFsaWduIiBpc0VxdWFsVG9TdHJpbmc6a2V5
XSkgeworICAgICAgICAgICAgICAgIGlmIChjb3JlRWxlbWVudC0+aGFzVGFnTmFtZShjZW50ZXJU
YWcpIHx8IGNvcmVFbGVtZW50LT5oYXNUYWdOYW1lKGNhcHRpb25UYWcpIHx8IGNvcmVFbGVtZW50
LT5oYXNUYWdOYW1lKHRoVGFnKSkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gQCJjZW50
ZXIiOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgaW5oZXJpdCA9
IFlFUzsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoW0AidmVydGljYWwtYWxpZ24iIGlzRXF1YWxU
b1N0cmluZzprZXldKSB7CisgICAgICAgICAgICAgICAgaWYgKGNvcmVFbGVtZW50LT5oYXNUYWdO
YW1lKHN1cFRhZykpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEAic3VwZXIiOworICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKGNvcmVFbGVtZW50LT5oYXNUYWdOYW1lKHN1YlRhZykpCisg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEAic3ViIjsKKyAgICAgICAgICAgICAgICBlbHNl
IGlmIChjb3JlRWxlbWVudC0+aGFzVGFnTmFtZSh0aGVhZFRhZykgfHwgY29yZUVsZW1lbnQtPmhh
c1RhZ05hbWUodGJvZHlUYWcpIHx8IGNvcmVFbGVtZW50LT5oYXNUYWdOYW1lKHRmb290VGFnKSkK
KyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gQCJtaWRkbGUiOworICAgICAgICAgICAgICAg
IGVsc2UgaWYgKGNvcmVFbGVtZW50LT5oYXNUYWdOYW1lKHRyVGFnKSB8fCBjb3JlRWxlbWVudC0+
aGFzVGFnTmFtZSh0aFRhZykgfHwgY29yZUVsZW1lbnQtPmhhc1RhZ05hbWUodGRUYWcpKQorICAg
ICAgICAgICAgICAgICAgICBpbmhlcml0ID0gWUVTOworICAgICAgICAgICAgfSBlbHNlIGlmIChb
QCJmb250LWZhbWlseSIgaXNFcXVhbFRvU3RyaW5nOmtleV0gfHwgW0AiZm9udC12YXJpYW50IiBp
c0VxdWFsVG9TdHJpbmc6a2V5XSB8fCBbQCJmb250LWVmZmVjdCIgaXNFcXVhbFRvU3RyaW5nOmtl
eV0KKyAgICAgICAgICAgICAgICAgICAgICAgfHwgW0AidGV4dC10cmFuc2Zvcm0iIGlzRXF1YWxU
b1N0cmluZzprZXldIHx8IFtAInRleHQtc2hhZG93IiBpc0VxdWFsVG9TdHJpbmc6a2V5XSB8fCBb
QCJ2aXNpYmlsaXR5IiBpc0VxdWFsVG9TdHJpbmc6a2V5XQorICAgICAgICAgICAgICAgICAgICAg
ICB8fCBbQCJib3JkZXItY29sbGFwc2UiIGlzRXF1YWxUb1N0cmluZzprZXldIHx8IFtAImVtcHR5
LWNlbGxzIiBpc0VxdWFsVG9TdHJpbmc6a2V5XSB8fCBbQCJ3b3JkLXNwYWNpbmciIGlzRXF1YWxU
b1N0cmluZzprZXldCisgICAgICAgICAgICAgICAgICAgICAgIHx8IFtAImxpc3Qtc3R5bGUtdHlw
ZSIgaXNFcXVhbFRvU3RyaW5nOmtleV0gfHwgW0AiZGlyZWN0aW9uIiBpc0VxdWFsVG9TdHJpbmc6
a2V5XSkgeworICAgICAgICAgICAgICAgIGluaGVyaXQgPSBZRVM7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisgICAgaWYgKCFyZXN1bHQgJiYgaW5oZXJpdCkgeworICAgICAgICBE
T01Ob2RlICpwYXJlbnROb2RlID0gW25vZGUgcGFyZW50Tm9kZV07CisgICAgICAgIGlmIChwYXJl
bnROb2RlKSByZXN1bHQgPSBbc2VsZiBfc3RyaW5nRm9yTm9kZTpwYXJlbnROb2RlIHByb3BlcnR5
OmtleV07CisgICAgfQorICAgIHJldHVybiByZXN1bHQgPyBbcmVzdWx0IGxvd2VyY2FzZVN0cmlu
Z10gOiBuaWw7Cit9CisKKy0gKE5TU3RyaW5nICopX3N0cmluZ0Zvck5vZGU6KERPTU5vZGUgKilu
b2RlIHByb3BlcnR5OihOU1N0cmluZyAqKWtleQoreworICAgIE5TU3RyaW5nICpyZXN1bHQgPSBu
aWw7CisgICAgTlNNdXRhYmxlRGljdGlvbmFyeSAqYXR0cmlidXRlRGljdGlvbmFyeSA9IFtfc3Ry
aW5nc0Zvck5vZGVzIG9iamVjdEZvcktleTpub2RlXTsKKyAgICBpZiAoIWF0dHJpYnV0ZURpY3Rp
b25hcnkpIHsKKyAgICAgICAgYXR0cmlidXRlRGljdGlvbmFyeSA9IFtbTlNNdXRhYmxlRGljdGlv
bmFyeSBhbGxvY10gaW5pdF07CisgICAgICAgIFtfc3RyaW5nc0Zvck5vZGVzIHNldE9iamVjdDph
dHRyaWJ1dGVEaWN0aW9uYXJ5IGZvcktleTpub2RlXTsKKyAgICAgICAgW2F0dHJpYnV0ZURpY3Rp
b25hcnkgcmVsZWFzZV07CisgICAgfQorICAgIHJlc3VsdCA9IFthdHRyaWJ1dGVEaWN0aW9uYXJ5
IG9iamVjdEZvcktleTprZXldOworICAgIGlmIChyZXN1bHQpIHsKKyAgICAgICAgaWYgKFtAIiIg
aXNFcXVhbFRvU3RyaW5nOnJlc3VsdF0pIHJlc3VsdCA9IG5pbDsKKyAgICB9IGVsc2UgeworICAg
ICAgICByZXN1bHQgPSBbc2VsZiBfY29tcHV0ZWRTdHJpbmdGb3JOb2RlOm5vZGUgcHJvcGVydHk6
a2V5XTsKKyAgICAgICAgW2F0dHJpYnV0ZURpY3Rpb25hcnkgc2V0T2JqZWN0OihyZXN1bHQgPyBy
ZXN1bHQgOiBAIiIpIGZvcktleTprZXldOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQor
CitzdGF0aWMgaW5saW5lIEJPT0wgX2dldEZsb2F0KERPTUNTU1ByaW1pdGl2ZVZhbHVlICpwcmlt
aXRpdmVWYWx1ZSwgQ0dGbG9hdCAqdmFsKQoreworICAgIGlmICghdmFsKQorICAgICAgICByZXR1
cm4gTk87CisgICAgc3dpdGNoIChbcHJpbWl0aXZlVmFsdWUgcHJpbWl0aXZlVHlwZV0pIHsKKyAg
ICAgICAgY2FzZSBET01fQ1NTX1BYOgorICAgICAgICAgICAgKnZhbCA9IFtwcmltaXRpdmVWYWx1
ZSBnZXRGbG9hdFZhbHVlOkRPTV9DU1NfUFhdOworICAgICAgICAgICAgcmV0dXJuIFlFUzsKKyAg
ICAgICAgY2FzZSBET01fQ1NTX1BUOgorICAgICAgICAgICAgKnZhbCA9IDQuMCAqIFtwcmltaXRp
dmVWYWx1ZSBnZXRGbG9hdFZhbHVlOkRPTV9DU1NfUFRdIC8gMy4wOworICAgICAgICAgICAgcmV0
dXJuIFlFUzsKKyAgICAgICAgY2FzZSBET01fQ1NTX1BDOgorICAgICAgICAgICAgKnZhbCA9IDE2
LjAgKiBbcHJpbWl0aXZlVmFsdWUgZ2V0RmxvYXRWYWx1ZTpET01fQ1NTX1BDXTsKKyAgICAgICAg
ICAgIHJldHVybiBZRVM7CisgICAgICAgIGNhc2UgRE9NX0NTU19DTToKKyAgICAgICAgICAgICp2
YWwgPSA5Ni4wICogW3ByaW1pdGl2ZVZhbHVlIGdldEZsb2F0VmFsdWU6RE9NX0NTU19DTV0gLyAy
LjU0OworICAgICAgICAgICAgcmV0dXJuIFlFUzsKKyAgICAgICAgY2FzZSBET01fQ1NTX01NOgor
ICAgICAgICAgICAgKnZhbCA9IDk2LjAgKiBbcHJpbWl0aXZlVmFsdWUgZ2V0RmxvYXRWYWx1ZTpE
T01fQ1NTX01NXSAvIDI1LjQ7CisgICAgICAgICAgICByZXR1cm4gWUVTOworICAgICAgICBjYXNl
IERPTV9DU1NfSU46CisgICAgICAgICAgICAqdmFsID0gOTYuMCAqIFtwcmltaXRpdmVWYWx1ZSBn
ZXRGbG9hdFZhbHVlOkRPTV9DU1NfSU5dOworICAgICAgICAgICAgcmV0dXJuIFlFUzsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBOTzsKKyAgICB9Cit9CisKKy0gKEJPT0wp
X2dldENvbXB1dGVkRmxvYXQ6KENHRmxvYXQgKil2YWwgZm9yTm9kZTooRE9NTm9kZSAqKW5vZGUg
cHJvcGVydHk6KE5TU3RyaW5nICopa2V5Cit7CisgICAgQk9PTCByZXN1bHQgPSBOTywgaW5oZXJp
dCA9IFlFUzsKKyAgICBDR0Zsb2F0IGZsb2F0VmFsID0gMC4wOworICAgIERPTUVsZW1lbnQgKmVs
ZW1lbnQgPSAoRE9NRWxlbWVudCAqKW5vZGU7ICAgIAorICAgIGlmIChlbGVtZW50ICYmIFtlbGVt
ZW50IG5vZGVUeXBlXSA9PSBET01fRUxFTUVOVF9OT0RFKSB7CisgICAgICAgIERPTUNTU1N0eWxl
RGVjbGFyYXRpb24gKmNvbXB1dGVkU3R5bGUsICpzcGVjaWZpZWRTdHlsZTsKKyAgICAgICAgaW5o
ZXJpdCA9IE5POworICAgICAgICBpZiAoIXJlc3VsdCAmJiAoY29tcHV0ZWRTdHlsZSA9IFtzZWxm
IF9jb21wdXRlZFN0eWxlRm9yRWxlbWVudDplbGVtZW50XSkpIHsKKyAgICAgICAgICAgIERPTUNT
U1ByaW1pdGl2ZVZhbHVlICpjb21wdXRlZFZhbHVlID0gKERPTUNTU1ByaW1pdGl2ZVZhbHVlICop
W2NvbXB1dGVkU3R5bGUgZ2V0UHJvcGVydHlDU1NWYWx1ZTprZXldOworICAgICAgICAgICAgaWYg
KGNvbXB1dGVkVmFsdWUgJiYgW2NvbXB1dGVkVmFsdWUgY3NzVmFsdWVUeXBlXSA9PSBET01fQ1NT
X1BSSU1JVElWRV9WQUxVRSkgeworICAgICAgICAgICAgICAgIHJlc3VsdCA9IF9nZXRGbG9hdChj
b21wdXRlZFZhbHVlLCAmZmxvYXRWYWwpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIGlmICghcmVzdWx0ICYmIChzcGVjaWZpZWRTdHlsZSA9IFtzZWxmIF9zcGVjaWZpZWRTdHls
ZUZvckVsZW1lbnQ6ZWxlbWVudF0pKSB7CisgICAgICAgICAgICBET01DU1NQcmltaXRpdmVWYWx1
ZSAqc3BlY2lmaWVkVmFsdWUgPSAoRE9NQ1NTUHJpbWl0aXZlVmFsdWUgKilbc3BlY2lmaWVkU3R5
bGUgZ2V0UHJvcGVydHlDU1NWYWx1ZTprZXldOworICAgICAgICAgICAgaWYgKHNwZWNpZmllZFZh
bHVlKSB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgdmFsdWVUeXBlID0gW3NwZWNp
ZmllZFZhbHVlIGNzc1ZhbHVlVHlwZV07CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlVHlwZSA9
PSBET01fQ1NTX1BSSU1JVElWRV9WQUxVRSkgeworICAgICAgICAgICAgICAgICAgICByZXN1bHQg
PSBfZ2V0RmxvYXQoc3BlY2lmaWVkVmFsdWUsICZmbG9hdFZhbCk7CisgICAgICAgICAgICAgICAg
fSBlbHNlIGlmICh2YWx1ZVR5cGUgPT0gRE9NX0NTU19JTkhFUklUKSB7CisgICAgICAgICAgICAg
ICAgICAgIGluaGVyaXQgPSBZRVM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgICAgICBpZiAoW0AidGV4
dC1pbmRlbnQiIGlzRXF1YWxUb1N0cmluZzprZXldIHx8IFtAImxldHRlci1zcGFjaW5nIiBpc0Vx
dWFsVG9TdHJpbmc6a2V5XSB8fCBbQCJ3b3JkLXNwYWNpbmciIGlzRXF1YWxUb1N0cmluZzprZXld
CisgICAgICAgICAgICAgICAgfHwgW0AibGluZS1oZWlnaHQiIGlzRXF1YWxUb1N0cmluZzprZXld
IHx8IFtAIndpZG93cyIgaXNFcXVhbFRvU3RyaW5nOmtleV0gfHwgW0Aib3JwaGFucyIgaXNFcXVh
bFRvU3RyaW5nOmtleV0pCisgICAgICAgICAgICAgICAgaW5oZXJpdCA9IFlFUzsKKyAgICAgICAg
fQorICAgIH0KKyAgICBpZiAoIXJlc3VsdCAmJiBpbmhlcml0KSB7CisgICAgICAgIERPTU5vZGUg
KnBhcmVudE5vZGUgPSBbbm9kZSBwYXJlbnROb2RlXTsKKyAgICAgICAgaWYgKHBhcmVudE5vZGUp
IHJlc3VsdCA9IFtzZWxmIF9nZXRGbG9hdDomZmxvYXRWYWwgZm9yTm9kZTpwYXJlbnROb2RlIHBy
b3BlcnR5OmtleV07CisgICAgfQorICAgIGlmIChyZXN1bHQgJiYgdmFsKQorICAgICAgICAqdmFs
ID0gZmxvYXRWYWw7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLSAoQk9PTClfZ2V0RmxvYXQ6
KENHRmxvYXQgKil2YWwgZm9yTm9kZTooRE9NTm9kZSAqKW5vZGUgcHJvcGVydHk6KE5TU3RyaW5n
ICopa2V5Cit7CisgICAgQk9PTCByZXN1bHQgPSBOTzsKKyAgICBDR0Zsb2F0IGZsb2F0VmFsID0g
MC4wOworICAgIE5TTnVtYmVyICpmbG9hdE51bWJlcjsKKyAgICBOU011dGFibGVEaWN0aW9uYXJ5
ICphdHRyaWJ1dGVEaWN0aW9uYXJ5ID0gW19mbG9hdHNGb3JOb2RlcyBvYmplY3RGb3JLZXk6bm9k
ZV07CisgICAgaWYgKCFhdHRyaWJ1dGVEaWN0aW9uYXJ5KSB7CisgICAgICAgIGF0dHJpYnV0ZURp
Y3Rpb25hcnkgPSBbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdOworICAgICAgICBb
X2Zsb2F0c0Zvck5vZGVzIHNldE9iamVjdDphdHRyaWJ1dGVEaWN0aW9uYXJ5IGZvcktleTpub2Rl
XTsKKyAgICAgICAgW2F0dHJpYnV0ZURpY3Rpb25hcnkgcmVsZWFzZV07CisgICAgfQorICAgIGZs
b2F0TnVtYmVyID0gW2F0dHJpYnV0ZURpY3Rpb25hcnkgb2JqZWN0Rm9yS2V5OmtleV07CisgICAg
aWYgKGZsb2F0TnVtYmVyKSB7CisgICAgICAgIGlmICghW1tOU051bGwgbnVsbF0gaXNFcXVhbDpm
bG9hdE51bWJlcl0pIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IFlFUzsKKyAgICAgICAgICAgIGZs
b2F0VmFsID0gW2Zsb2F0TnVtYmVyIGRvdWJsZVZhbHVlXTsKKyAgICAgICAgfQorICAgIH0gZWxz
ZSB7CisgICAgICAgIHJlc3VsdCA9IFtzZWxmIF9nZXRDb21wdXRlZEZsb2F0OiZmbG9hdFZhbCBm
b3JOb2RlOm5vZGUgcHJvcGVydHk6a2V5XTsKKyAgICAgICAgW2F0dHJpYnV0ZURpY3Rpb25hcnkg
c2V0T2JqZWN0OihyZXN1bHQgPyAoaWQpW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6ZmxvYXRW
YWxdIDogKGlkKVtOU051bGwgbnVsbF0pIGZvcktleTprZXldOworICAgIH0KKyAgICBpZiAocmVz
dWx0ICYmIHZhbCkgKnZhbCA9IGZsb2F0VmFsOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0
YXRpYyBpbmxpbmUgTlNDb2xvciAqX2NvbG9yRm9yUkdCQ29sb3IoRE9NUkdCQ29sb3IgKmRvbVJH
QkNvbG9yLCBCT09MIGlnbm9yZUJsYWNrKQoreworICAgIE5TQ29sb3IgKmNvbG9yID0gW2RvbVJH
QkNvbG9yIF9jb2xvcl07CisgICAgTlNDb2xvclNwYWNlICpjb2xvclNwYWNlID0gW2NvbG9yIGNv
bG9yU3BhY2VdOworICAgIGNvbnN0IENHRmxvYXQgQ29sb3JFcHNpbG9uID0gMSAvICgyICogMjU1
LjApOworICAgIAorICAgIGlmIChjb2xvcikgeworICAgICAgICBpZiAoW2NvbG9yU3BhY2UgaXNF
cXVhbDpbTlNDb2xvclNwYWNlIGdlbmVyaWNHcmF5Q29sb3JTcGFjZV1dIHx8IFtjb2xvclNwYWNl
IGlzRXF1YWw6W05TQ29sb3JTcGFjZSBkZXZpY2VHcmF5Q29sb3JTcGFjZV1dKSB7CisgICAgICAg
ICAgICBDR0Zsb2F0IHdoaXRlLCBhbHBoYTsKKyAgICAgICAgICAgIFtjb2xvciBnZXRXaGl0ZTom
d2hpdGUgYWxwaGE6JmFscGhhXTsKKyAgICAgICAgICAgIGlmICh3aGl0ZSA8IENvbG9yRXBzaWxv
biAmJiAoaWdub3JlQmxhY2sgfHwgYWxwaGEgPCBDb2xvckVwc2lsb24pKSBjb2xvciA9IG5pbDsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIE5TQ29sb3IgKnJnYkNvbG9yID0gbmlsOwor
ICAgICAgICAgICAgaWYgKFtjb2xvclNwYWNlIGlzRXF1YWw6W05TQ29sb3JTcGFjZSBnZW5lcmlj
UkdCQ29sb3JTcGFjZV1dIHx8IFtjb2xvclNwYWNlIGlzRXF1YWw6W05TQ29sb3JTcGFjZSBkZXZp
Y2VSR0JDb2xvclNwYWNlXV0pIHJnYkNvbG9yID0gY29sb3I7CisgICAgICAgICAgICBpZiAoIXJn
YkNvbG9yKSByZ2JDb2xvciA9IFtjb2xvciBjb2xvclVzaW5nQ29sb3JTcGFjZU5hbWU6TlNEZXZp
Y2VSR0JDb2xvclNwYWNlXTsKKyAgICAgICAgICAgIGlmIChyZ2JDb2xvcikgeworICAgICAgICAg
ICAgICAgIENHRmxvYXQgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGE7CisgICAgICAgICAgICAgICAg
W3JnYkNvbG9yIGdldFJlZDomcmVkIGdyZWVuOiZncmVlbiBibHVlOiZibHVlIGFscGhhOiZhbHBo
YV07CisgICAgICAgICAgICAgICAgaWYgKHJlZCA8IENvbG9yRXBzaWxvbiAmJiBncmVlbiA8IENv
bG9yRXBzaWxvbiAmJiBibHVlIDwgQ29sb3JFcHNpbG9uICYmIChpZ25vcmVCbGFjayB8fCBhbHBo
YSA8IENvbG9yRXBzaWxvbikpIGNvbG9yID0gbmlsOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorICAgIHJldHVybiBjb2xvcjsKK30KKworc3RhdGljIGlubGluZSBOU1NoYWRvdyAq
X3NoYWRvd0ZvclNoYWRvd1N0eWxlKE5TU3RyaW5nICpzaGFkb3dTdHlsZSkKK3sKKyAgICBOU1No
YWRvdyAqc2hhZG93ID0gbmlsOworICAgIE5TVUludGVnZXIgc2hhZG93U3R5bGVMZW5ndGggPSBb
c2hhZG93U3R5bGUgbGVuZ3RoXTsKKyAgICBOU1JhbmdlIG9wZW5QYXJlblJhbmdlID0gW3NoYWRv
d1N0eWxlIHJhbmdlT2ZTdHJpbmc6QCIoIl0sIGNsb3NlUGFyZW5SYW5nZSA9IFtzaGFkb3dTdHls
ZSByYW5nZU9mU3RyaW5nOkAiKSJdLCBmaXJzdFJhbmdlID0gTlNNYWtlUmFuZ2UoTlNOb3RGb3Vu
ZCwgMCksIHNlY29uZFJhbmdlID0gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCksIHRoaXJkUmFu
Z2UgPSBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAwKSwgc3BhY2VSYW5nZTsKKyAgICBpZiAob3Bl
blBhcmVuUmFuZ2UubGVuZ3RoID4gMCAmJiBjbG9zZVBhcmVuUmFuZ2UubGVuZ3RoID4gMCAmJiBO
U01heFJhbmdlKG9wZW5QYXJlblJhbmdlKSA8IGNsb3NlUGFyZW5SYW5nZS5sb2NhdGlvbikgewor
ICAgICAgICBOU0FycmF5ICpjb21wb25lbnRzID0gW1tzaGFkb3dTdHlsZSBzdWJzdHJpbmdXaXRo
UmFuZ2U6TlNNYWtlUmFuZ2UoTlNNYXhSYW5nZShvcGVuUGFyZW5SYW5nZSksIGNsb3NlUGFyZW5S
YW5nZS5sb2NhdGlvbiAtIE5TTWF4UmFuZ2Uob3BlblBhcmVuUmFuZ2UpKV0gY29tcG9uZW50c1Nl
cGFyYXRlZEJ5U3RyaW5nOkAiLCJdOworICAgICAgICBpZiAoW2NvbXBvbmVudHMgY291bnRdID49
IDMpIHsKKyAgICAgICAgICAgIENHRmxvYXQgcmVkID0gW1tjb21wb25lbnRzIG9iamVjdEF0SW5k
ZXg6MF0gZmxvYXRWYWx1ZV0gLyAyNTUuMCwgZ3JlZW4gPSBbW2NvbXBvbmVudHMgb2JqZWN0QXRJ
bmRleDoxXSBmbG9hdFZhbHVlXSAvIDI1NS4wLCBibHVlID0gW1tjb21wb25lbnRzIG9iamVjdEF0
SW5kZXg6Ml0gZmxvYXRWYWx1ZV0gLyAyNTUuMCwgYWxwaGEgPSAoW2NvbXBvbmVudHMgY291bnRd
ID49IDQpID8gW1tjb21wb25lbnRzIG9iamVjdEF0SW5kZXg6M10gZmxvYXRWYWx1ZV0gLyAyNTUu
MCA6IDEuMDsKKyAgICAgICAgICAgIE5TQ29sb3IgKnNoYWRvd0NvbG9yID0gW05TQ29sb3IgY29s
b3JXaXRoQ2FsaWJyYXRlZFJlZDpyZWQgZ3JlZW46Z3JlZW4gYmx1ZTpibHVlIGFscGhhOmFscGhh
XTsKKyAgICAgICAgICAgIE5TU2l6ZSBzaGFkb3dPZmZzZXQ7CisgICAgICAgICAgICBDR0Zsb2F0
IHNoYWRvd0JsdXJSYWRpdXM7CisgICAgICAgICAgICBmaXJzdFJhbmdlID0gW3NoYWRvd1N0eWxl
IHJhbmdlT2ZTdHJpbmc6QCJweCJdOworICAgICAgICAgICAgaWYgKGZpcnN0UmFuZ2UubGVuZ3Ro
ID4gMCAmJiBOU01heFJhbmdlKGZpcnN0UmFuZ2UpIDwgc2hhZG93U3R5bGVMZW5ndGgpIHNlY29u
ZFJhbmdlID0gW3NoYWRvd1N0eWxlIHJhbmdlT2ZTdHJpbmc6QCJweCIgb3B0aW9uczowIHJhbmdl
Ok5TTWFrZVJhbmdlKE5TTWF4UmFuZ2UoZmlyc3RSYW5nZSksIHNoYWRvd1N0eWxlTGVuZ3RoIC0g
TlNNYXhSYW5nZShmaXJzdFJhbmdlKSldOworICAgICAgICAgICAgaWYgKHNlY29uZFJhbmdlLmxl
bmd0aCA+IDAgJiYgTlNNYXhSYW5nZShzZWNvbmRSYW5nZSkgPCBzaGFkb3dTdHlsZUxlbmd0aCkg
dGhpcmRSYW5nZSA9IFtzaGFkb3dTdHlsZSByYW5nZU9mU3RyaW5nOkAicHgiIG9wdGlvbnM6MCBy
YW5nZTpOU01ha2VSYW5nZShOU01heFJhbmdlKHNlY29uZFJhbmdlKSwgc2hhZG93U3R5bGVMZW5n
dGggLSBOU01heFJhbmdlKHNlY29uZFJhbmdlKSldOworICAgICAgICAgICAgaWYgKGZpcnN0UmFu
Z2UubG9jYXRpb24gPiAwICYmIGZpcnN0UmFuZ2UubGVuZ3RoID4gMCAmJiBzZWNvbmRSYW5nZS5s
ZW5ndGggPiAwICYmIHRoaXJkUmFuZ2UubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgICAgIHNw
YWNlUmFuZ2UgPSBbc2hhZG93U3R5bGUgcmFuZ2VPZlN0cmluZzpAIiAiIG9wdGlvbnM6TlNCYWNr
d2FyZHNTZWFyY2ggcmFuZ2U6TlNNYWtlUmFuZ2UoMCwgZmlyc3RSYW5nZS5sb2NhdGlvbildOwor
ICAgICAgICAgICAgICAgIGlmIChzcGFjZVJhbmdlLmxlbmd0aCA9PSAwKSBzcGFjZVJhbmdlID0g
TlNNYWtlUmFuZ2UoMCwgMCk7CisgICAgICAgICAgICAgICAgc2hhZG93T2Zmc2V0LndpZHRoID0g
W1tzaGFkb3dTdHlsZSBzdWJzdHJpbmdXaXRoUmFuZ2U6TlNNYWtlUmFuZ2UoTlNNYXhSYW5nZShz
cGFjZVJhbmdlKSwgZmlyc3RSYW5nZS5sb2NhdGlvbiAtIE5TTWF4UmFuZ2Uoc3BhY2VSYW5nZSkp
XSBmbG9hdFZhbHVlXTsKKyAgICAgICAgICAgICAgICBzcGFjZVJhbmdlID0gW3NoYWRvd1N0eWxl
IHJhbmdlT2ZTdHJpbmc6QCIgIiBvcHRpb25zOk5TQmFja3dhcmRzU2VhcmNoIHJhbmdlOk5TTWFr
ZVJhbmdlKDAsIHNlY29uZFJhbmdlLmxvY2F0aW9uKV07CisgICAgICAgICAgICAgICAgaWYgKHNw
YWNlUmFuZ2UubGVuZ3RoID09IDApIHNwYWNlUmFuZ2UgPSBOU01ha2VSYW5nZSgwLCAwKTsKKyAg
ICAgICAgICAgICAgICBzaGFkb3dPZmZzZXQuaGVpZ2h0ID0gLVtbc2hhZG93U3R5bGUgc3Vic3Ry
aW5nV2l0aFJhbmdlOk5TTWFrZVJhbmdlKE5TTWF4UmFuZ2Uoc3BhY2VSYW5nZSksIHNlY29uZFJh
bmdlLmxvY2F0aW9uIC0gTlNNYXhSYW5nZShzcGFjZVJhbmdlKSldIGZsb2F0VmFsdWVdOworICAg
ICAgICAgICAgICAgIHNwYWNlUmFuZ2UgPSBbc2hhZG93U3R5bGUgcmFuZ2VPZlN0cmluZzpAIiAi
IG9wdGlvbnM6TlNCYWNrd2FyZHNTZWFyY2ggcmFuZ2U6TlNNYWtlUmFuZ2UoMCwgdGhpcmRSYW5n
ZS5sb2NhdGlvbildOworICAgICAgICAgICAgICAgIGlmIChzcGFjZVJhbmdlLmxlbmd0aCA9PSAw
KSBzcGFjZVJhbmdlID0gTlNNYWtlUmFuZ2UoMCwgMCk7CisgICAgICAgICAgICAgICAgc2hhZG93
Qmx1clJhZGl1cyA9IFtbc2hhZG93U3R5bGUgc3Vic3RyaW5nV2l0aFJhbmdlOk5TTWFrZVJhbmdl
KE5TTWF4UmFuZ2Uoc3BhY2VSYW5nZSksIHRoaXJkUmFuZ2UubG9jYXRpb24gLSBOU01heFJhbmdl
KHNwYWNlUmFuZ2UpKV0gZmxvYXRWYWx1ZV07CisgICAgICAgICAgICAgICAgc2hhZG93ID0gW1tb
TlNTaGFkb3cgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgICAgICAgICBbc2hh
ZG93IHNldFNoYWRvd0NvbG9yOnNoYWRvd0NvbG9yXTsKKyAgICAgICAgICAgICAgICBbc2hhZG93
IHNldFNoYWRvd09mZnNldDpzaGFkb3dPZmZzZXRdOworICAgICAgICAgICAgICAgIFtzaGFkb3cg
c2V0U2hhZG93Qmx1clJhZGl1czpzaGFkb3dCbHVyUmFkaXVzXTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gc2hhZG93OworfQorCistIChCT09MKV9lbGVtZW50
SXNCbG9ja0xldmVsOihET01FbGVtZW50ICopZWxlbWVudAoreworICAgIEJPT0wgaXNCbG9ja0xl
dmVsID0gTk87CisgICAgTlNOdW1iZXIgKnZhbCA9IG5pbDsKKyAgICB2YWwgPSBbX2VsZW1lbnRJ
c0Jsb2NrTGV2ZWwgb2JqZWN0Rm9yS2V5OmVsZW1lbnRdOworICAgIGlmICh2YWwpIHsKKyAgICAg
ICAgaXNCbG9ja0xldmVsID0gW3ZhbCBib29sVmFsdWVdOworICAgIH0gZWxzZSB7CisgICAgICAg
IE5TU3RyaW5nICpkaXNwbGF5VmFsID0gW3NlbGYgX3N0cmluZ0Zvck5vZGU6ZWxlbWVudCBwcm9w
ZXJ0eTpAImRpc3BsYXkiXSwgKmZsb2F0VmFsID0gW3NlbGYgX3N0cmluZ0Zvck5vZGU6ZWxlbWVu
dCBwcm9wZXJ0eTpAImZsb2F0Il07CisgICAgICAgIGlmIChmbG9hdFZhbCAmJiAoW0AibGVmdCIg
aXNFcXVhbFRvU3RyaW5nOmZsb2F0VmFsXSB8fCBbQCJyaWdodCIgaXNFcXVhbFRvU3RyaW5nOmZs
b2F0VmFsXSkpIHsKKyAgICAgICAgICAgIGlzQmxvY2tMZXZlbCA9IFlFUzsKKyAgICAgICAgfSBl
bHNlIGlmIChkaXNwbGF5VmFsKSB7CisgICAgICAgICAgICBpc0Jsb2NrTGV2ZWwgPSAoW0AiYmxv
Y2siIGlzRXF1YWxUb1N0cmluZzpkaXNwbGF5VmFsXSB8fCBbQCJsaXN0LWl0ZW0iIGlzRXF1YWxU
b1N0cmluZzpkaXNwbGF5VmFsXSB8fCBbZGlzcGxheVZhbCBoYXNQcmVmaXg6QCJ0YWJsZSJdKTsK
KyAgICAgICAgfQorICAgICAgICBbX2VsZW1lbnRJc0Jsb2NrTGV2ZWwgc2V0T2JqZWN0OltOU051
bWJlciBudW1iZXJXaXRoQm9vbDppc0Jsb2NrTGV2ZWxdIGZvcktleTplbGVtZW50XTsKKyAgICB9
CisgICAgcmV0dXJuIGlzQmxvY2tMZXZlbDsKK30KKworLSAoQk9PTClfZWxlbWVudEhhc093bkJh
Y2tncm91bmRDb2xvcjooRE9NRWxlbWVudCAqKWVsZW1lbnQKK3sKKyAgICAvLyBJbiB0aGUgdGV4
dCBzeXN0ZW0sIHRleHQgYmxvY2tzICh0YWJsZSBlbGVtZW50cykgYW5kIGRvY3VtZW50cyAoYm9k
eSBlbGVtZW50cykgaGF2ZSB0aGVpciBvd24gYmFja2dyb3VuZCBjb2xvcnMsIHdoaWNoIHNob3Vs
ZCBub3QgYmUgaW5oZXJpdGVkCisgICAgaWYgKFtzZWxmIF9lbGVtZW50SXNCbG9ja0xldmVsOmVs
ZW1lbnRdKSB7CisgICAgICAgIEVsZW1lbnQqIGNvcmVFbGVtZW50ID0gY29yZShlbGVtZW50KTsK
KyAgICAgICAgTlNTdHJpbmcgKmRpc3BsYXlWYWwgPSBbc2VsZiBfc3RyaW5nRm9yTm9kZTplbGVt
ZW50IHByb3BlcnR5OkAiZGlzcGxheSJdOworICAgICAgICBpZiAoY29yZUVsZW1lbnQtPmhhc1Rh
Z05hbWUoaHRtbFRhZykgfHwgY29yZUVsZW1lbnQtPmhhc1RhZ05hbWUoYm9keVRhZykgfHwgW2Rp
c3BsYXlWYWwgaGFzUHJlZml4OkAidGFibGUiXSkKKyAgICAgICAgICAgIHJldHVybiBZRVM7Cisg
ICAgfQorICAgIHJldHVybiBOTzsKK30KKyAgICAKKy0gKERPTUVsZW1lbnQgKilfYmxvY2tMZXZl
bEVsZW1lbnRGb3JOb2RlOihET01Ob2RlICopbm9kZQoreworICAgIERPTUVsZW1lbnQgKmVsZW1l
bnQgPSAoRE9NRWxlbWVudCAqKW5vZGU7CisgICAgd2hpbGUgKGVsZW1lbnQgJiYgW2VsZW1lbnQg
bm9kZVR5cGVdICE9IERPTV9FTEVNRU5UX05PREUpCisgICAgICAgIGVsZW1lbnQgPSAoRE9NRWxl
bWVudCAqKVtlbGVtZW50IHBhcmVudE5vZGVdOworICAgIGlmIChlbGVtZW50ICYmICFbc2VsZiBf
ZWxlbWVudElzQmxvY2tMZXZlbDplbGVtZW50XSkKKyAgICAgICAgZWxlbWVudCA9IFtzZWxmIF9i
bG9ja0xldmVsRWxlbWVudEZvck5vZGU6W2VsZW1lbnQgcGFyZW50Tm9kZV1dOworICAgIHJldHVy
biBlbGVtZW50OworfQorCistIChOU0NvbG9yICopX2NvbXB1dGVkQ29sb3JGb3JOb2RlOihET01O
b2RlICopbm9kZSBwcm9wZXJ0eTooTlNTdHJpbmcgKilrZXkKK3sKKyAgICBOU0NvbG9yICpyZXN1
bHQgPSBuaWw7CisgICAgQk9PTCBpbmhlcml0ID0gWUVTLCBoYXZlUmVzdWx0ID0gTk8sIGlzQ29s
b3IgPSBbQCJjb2xvciIgaXNFcXVhbFRvU3RyaW5nOmtleV0sIGlzQmFja2dyb3VuZENvbG9yID0g
W0AiYmFja2dyb3VuZC1jb2xvciIgaXNFcXVhbFRvU3RyaW5nOmtleV07CisgICAgRE9NRWxlbWVu
dCAqZWxlbWVudCA9IChET01FbGVtZW50ICopbm9kZTsgICAgCisgICAgaWYgKGVsZW1lbnQgJiYg
W2VsZW1lbnQgbm9kZVR5cGVdID09IERPTV9FTEVNRU5UX05PREUpIHsKKyAgICAgICAgRE9NQ1NT
U3R5bGVEZWNsYXJhdGlvbiAqY29tcHV0ZWRTdHlsZSwgKnNwZWNpZmllZFN0eWxlOworICAgICAg
ICBpbmhlcml0ID0gTk87CisgICAgICAgIGlmICghaGF2ZVJlc3VsdCAmJiAoY29tcHV0ZWRTdHls
ZSA9IFtzZWxmIF9jb21wdXRlZFN0eWxlRm9yRWxlbWVudDplbGVtZW50XSkpIHsKKyAgICAgICAg
ICAgIERPTUNTU1ByaW1pdGl2ZVZhbHVlICpjb21wdXRlZFZhbHVlID0gKERPTUNTU1ByaW1pdGl2
ZVZhbHVlICopW2NvbXB1dGVkU3R5bGUgZ2V0UHJvcGVydHlDU1NWYWx1ZTprZXldOworICAgICAg
ICAgICAgaWYgKGNvbXB1dGVkVmFsdWUgJiYgW2NvbXB1dGVkVmFsdWUgY3NzVmFsdWVUeXBlXSA9
PSBET01fQ1NTX1BSSU1JVElWRV9WQUxVRSAmJiBbY29tcHV0ZWRWYWx1ZSBwcmltaXRpdmVUeXBl
XSA9PSBET01fQ1NTX1JHQkNPTE9SKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gX2NvbG9y
Rm9yUkdCQ29sb3IoW2NvbXB1dGVkVmFsdWUgZ2V0UkdCQ29sb3JWYWx1ZV0sIGlzQ29sb3IpOwor
ICAgICAgICAgICAgICAgIGhhdmVSZXN1bHQgPSBZRVM7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgaWYgKCFoYXZlUmVzdWx0ICYmIChzcGVjaWZpZWRTdHlsZSA9IFtzZWxmIF9z
cGVjaWZpZWRTdHlsZUZvckVsZW1lbnQ6ZWxlbWVudF0pKSB7CisgICAgICAgICAgICBET01DU1NQ
cmltaXRpdmVWYWx1ZSAqc3BlY2lmaWVkVmFsdWUgPSAoRE9NQ1NTUHJpbWl0aXZlVmFsdWUgKilb
c3BlY2lmaWVkU3R5bGUgZ2V0UHJvcGVydHlDU1NWYWx1ZTprZXldOworICAgICAgICAgICAgaWYg
KHNwZWNpZmllZFZhbHVlKSB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgdmFsdWVU
eXBlID0gW3NwZWNpZmllZFZhbHVlIGNzc1ZhbHVlVHlwZV07CisgICAgICAgICAgICAgICAgaWYg
KHZhbHVlVHlwZSA9PSBET01fQ1NTX1BSSU1JVElWRV9WQUxVRSAmJiBbc3BlY2lmaWVkVmFsdWUg
cHJpbWl0aXZlVHlwZV0gPT0gRE9NX0NTU19SR0JDT0xPUikgeworICAgICAgICAgICAgICAgICAg
ICByZXN1bHQgPSBfY29sb3JGb3JSR0JDb2xvcihbc3BlY2lmaWVkVmFsdWUgZ2V0UkdCQ29sb3JW
YWx1ZV0sIGlzQ29sb3IpOworICAgICAgICAgICAgICAgICAgICBoYXZlUmVzdWx0ID0gWUVTOwor
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVUeXBlID09IERPTV9DU1NfSU5IRVJJVCkg
eworICAgICAgICAgICAgICAgICAgICBpbmhlcml0ID0gWUVTOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoIXJlc3VsdCkgeworICAgICAg
ICAgICAgaWYgKChpc0NvbG9yICYmICFoYXZlUmVzdWx0KSB8fCAoaXNCYWNrZ3JvdW5kQ29sb3Ig
JiYgIVtzZWxmIF9lbGVtZW50SGFzT3duQmFja2dyb3VuZENvbG9yOmVsZW1lbnRdKSkgaW5oZXJp
dCA9IFlFUzsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoIXJlc3VsdCAmJiBpbmhlcml0KSB7
CisgICAgICAgIERPTU5vZGUgKnBhcmVudE5vZGUgPSBbbm9kZSBwYXJlbnROb2RlXTsKKyAgICAg
ICAgaWYgKHBhcmVudE5vZGUgJiYgIShpc0JhY2tncm91bmRDb2xvciAmJiBbcGFyZW50Tm9kZSBu
b2RlVHlwZV0gPT0gRE9NX0VMRU1FTlRfTk9ERSAmJiBbc2VsZiBfZWxlbWVudEhhc093bkJhY2tn
cm91bmRDb2xvcjooRE9NRWxlbWVudCAqKXBhcmVudE5vZGVdKSkgeworICAgICAgICAgICAgcmVz
dWx0ID0gW3NlbGYgX2NvbG9yRm9yTm9kZTpwYXJlbnROb2RlIHByb3BlcnR5OmtleV07CisgICAg
ICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLSAoTlNDb2xvciAqKV9jb2xv
ckZvck5vZGU6KERPTU5vZGUgKilub2RlIHByb3BlcnR5OihOU1N0cmluZyAqKWtleQoreworICAg
IE5TQ29sb3IgKnJlc3VsdCA9IG5pbDsKKyAgICBOU011dGFibGVEaWN0aW9uYXJ5ICphdHRyaWJ1
dGVEaWN0aW9uYXJ5ID0gW19jb2xvcnNGb3JOb2RlcyBvYmplY3RGb3JLZXk6bm9kZV07CisgICAg
aWYgKCFhdHRyaWJ1dGVEaWN0aW9uYXJ5KSB7CisgICAgICAgIGF0dHJpYnV0ZURpY3Rpb25hcnkg
PSBbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdOworICAgICAgICBbX2NvbG9yc0Zv
ck5vZGVzIHNldE9iamVjdDphdHRyaWJ1dGVEaWN0aW9uYXJ5IGZvcktleTpub2RlXTsKKyAgICAg
ICAgW2F0dHJpYnV0ZURpY3Rpb25hcnkgcmVsZWFzZV07CisgICAgfQorICAgIHJlc3VsdCA9IFth
dHRyaWJ1dGVEaWN0aW9uYXJ5IG9iamVjdEZvcktleTprZXldOworICAgIGlmIChyZXN1bHQpIHsK
KyAgICAgICAgaWYgKFtbTlNDb2xvciBjbGVhckNvbG9yXSBpc0VxdWFsOnJlc3VsdF0pIHJlc3Vs
dCA9IG5pbDsKKyAgICB9IGVsc2UgeworICAgICAgICByZXN1bHQgPSBbc2VsZiBfY29tcHV0ZWRD
b2xvckZvck5vZGU6bm9kZSBwcm9wZXJ0eTprZXldOworICAgICAgICBbYXR0cmlidXRlRGljdGlv
bmFyeSBzZXRPYmplY3Q6KHJlc3VsdCA/IHJlc3VsdCA6IFtOU0NvbG9yIGNsZWFyQ29sb3JdKSBm
b3JLZXk6a2V5XTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLSAoTlNEaWN0aW9u
YXJ5ICopX2NvbXB1dGVkQXR0cmlidXRlc0ZvckVsZW1lbnQ6KERPTUVsZW1lbnQgKillbGVtZW50
Cit7CisgICAgRE9NRWxlbWVudCAqYmxvY2tFbGVtZW50ID0gW3NlbGYgX2Jsb2NrTGV2ZWxFbGVt
ZW50Rm9yTm9kZTplbGVtZW50XTsKKyAgICBOU011dGFibGVEaWN0aW9uYXJ5ICphdHRycyA9IFtO
U011dGFibGVEaWN0aW9uYXJ5IGRpY3Rpb25hcnldOworICAgIE5TRm9udE1hbmFnZXIgKmZvbnRN
YW5hZ2VyID0gW05TRm9udE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJdOworICAgIE5TU3RyaW5n
ICpmb250RWZmZWN0ID0gW3NlbGYgX3N0cmluZ0Zvck5vZGU6ZWxlbWVudCBwcm9wZXJ0eTpAImZv
bnQtZWZmZWN0Il0sICp0ZXh0RGVjb3JhdGlvbiA9IFtzZWxmIF9zdHJpbmdGb3JOb2RlOmVsZW1l
bnQgcHJvcGVydHk6QCJ0ZXh0LWRlY29yYXRpb24iXSwgKnZlcnRpY2FsQWxpZ24gPSBbc2VsZiBf
c3RyaW5nRm9yTm9kZTplbGVtZW50IHByb3BlcnR5OkAidmVydGljYWwtYWxpZ24iXSwgKnRleHRT
aGFkb3cgPSBbc2VsZiBfc3RyaW5nRm9yTm9kZTplbGVtZW50IHByb3BlcnR5OkAidGV4dC1zaGFk
b3ciXTsKKyAgICBDR0Zsb2F0IGZvbnRTaXplID0gMC4wLCBiYXNlbGluZU9mZnNldCA9IDAuMCwg
a2VybmluZyA9IDAuMDsKKyAgICBOU0ZvbnQgKmZvbnQgPSBuaWwsICphY3R1YWxGb250ID0gW2Vs
ZW1lbnQgX2ZvbnRdOworICAgIE5TQ29sb3IgKmZvcmVncm91bmRDb2xvciA9IFtzZWxmIF9jb2xv
ckZvck5vZGU6ZWxlbWVudCBwcm9wZXJ0eTpAImNvbG9yIl0sICpiYWNrZ3JvdW5kQ29sb3IgPSBb
c2VsZiBfY29sb3JGb3JOb2RlOmVsZW1lbnQgcHJvcGVydHk6QCJiYWNrZ3JvdW5kLWNvbG9yIl07
CisKKyAgICBpZiAoIVtzZWxmIF9nZXRGbG9hdDomZm9udFNpemUgZm9yTm9kZTplbGVtZW50IHBy
b3BlcnR5OkAiZm9udC1zaXplIl0gfHwgZm9udFNpemUgPD0gMC4wKSBmb250U2l6ZSA9IF9kZWZh
dWx0Rm9udFNpemU7CisgICAgZm9udFNpemUgKj0gX3RleHRTaXplTXVsdGlwbGllcjsKKyAgICBp
ZiAoZm9udFNpemUgPCBfbWluaW11bUZvbnRTaXplKSBmb250U2l6ZSA9IF9taW5pbXVtRm9udFNp
emU7CisgICAgaWYgKGZhYnMoZmxvb3IoMi4wICogZm9udFNpemUgKyAwLjUpIC8gMi4wIC0gZm9u
dFNpemUpIDwgMC4wNSkgeworICAgICAgICBmb250U2l6ZSA9IGZsb29yKDIuMCAqIGZvbnRTaXpl
ICsgMC41KSAvIDIuMDsKKyAgICB9IGVsc2UgaWYgKGZhYnMoZmxvb3IoMTAuMCAqIGZvbnRTaXpl
ICsgMC41KSAvIDEwLjAgLSBmb250U2l6ZSkgPCAwLjAwNSkgeworICAgICAgICBmb250U2l6ZSA9
IGZsb29yKDEwLjAgKiBmb250U2l6ZSArIDAuNSkgLyAxMC4wOworICAgIH0KKyAgICBpZiAoZm9u
dFNpemUgPD0gMC4wKSBmb250U2l6ZSA9IDEyLjA7CisgICAgCisgICAgaWYgKGFjdHVhbEZvbnQp
IGZvbnQgPSBbZm9udE1hbmFnZXIgY29udmVydEZvbnQ6YWN0dWFsRm9udCB0b1NpemU6Zm9udFNp
emVdOworICAgIGlmICghZm9udCkgeworICAgICAgICBOU1N0cmluZyAqZm9udE5hbWUgPSBbW3Nl
bGYgX3N0cmluZ0Zvck5vZGU6ZWxlbWVudCBwcm9wZXJ0eTpAImZvbnQtZmFtaWx5Il0gY2FwaXRh
bGl6ZWRTdHJpbmddLCAqZm9udFN0eWxlID0gW3NlbGYgX3N0cmluZ0Zvck5vZGU6ZWxlbWVudCBw
cm9wZXJ0eTpAImZvbnQtc3R5bGUiXSwgKmZvbnRXZWlnaHQgPSBbc2VsZiBfc3RyaW5nRm9yTm9k
ZTplbGVtZW50IHByb3BlcnR5OkAiZm9udC13ZWlnaHQiXSwgKmZvbnRWYXJpYW50ID0gW3NlbGYg
X3N0cmluZ0Zvck5vZGU6ZWxlbWVudCBwcm9wZXJ0eTpAImZvbnQtdmFyaWFudCJdOworICAgICAg
ICAKKyAgICAgICAgaWYgKCFmb250TmFtZSkgZm9udE5hbWUgPSBfc3RhbmRhcmRGb250RmFtaWx5
OworICAgICAgICBpZiAoZm9udE5hbWUpIGZvbnQgPSBfZm9udEZvck5hbWVBbmRTaXplKGZvbnRO
YW1lLCBmb250U2l6ZSwgX2ZvbnRDYWNoZSk7CisgICAgICAgIGlmICghZm9udCkgZm9udCA9IFtO
U0ZvbnQgZm9udFdpdGhOYW1lOkAiVGltZXMiIHNpemU6Zm9udFNpemVdOworICAgICAgICBpZiAo
W0AiaXRhbGljIiBpc0VxdWFsVG9TdHJpbmc6Zm9udFN0eWxlXSB8fCBbQCJvYmxpcXVlIiBpc0Vx
dWFsVG9TdHJpbmc6Zm9udFN0eWxlXSkgeworICAgICAgICAgICAgTlNGb250ICpvcmlnaW5hbEZv
bnQgPSBmb250OworICAgICAgICAgICAgZm9udCA9IFtmb250TWFuYWdlciBjb252ZXJ0Rm9udDpm
b250IHRvSGF2ZVRyYWl0Ok5TSXRhbGljRm9udE1hc2tdOworICAgICAgICAgICAgaWYgKCFmb250
KSBmb250ID0gb3JpZ2luYWxGb250OworICAgICAgICB9CisgICAgICAgIGlmIChbZm9udFdlaWdo
dCBoYXNQcmVmaXg6QCJib2xkIl0gfHwgW2ZvbnRXZWlnaHQgaW50ZWdlclZhbHVlXSA+PSA3MDAp
IHsKKyAgICAgICAgICAgIC8vID8/PyBoYW5kbGUgd2VpZ2h0IHByb3Blcmx5IHVzaW5nIE5TRm9u
dE1hbmFnZXIKKyAgICAgICAgICAgIE5TRm9udCAqb3JpZ2luYWxGb250ID0gZm9udDsKKyAgICAg
ICAgICAgIGZvbnQgPSBbZm9udE1hbmFnZXIgY29udmVydEZvbnQ6Zm9udCB0b0hhdmVUcmFpdDpO
U0JvbGRGb250TWFza107CisgICAgICAgICAgICBpZiAoIWZvbnQpIGZvbnQgPSBvcmlnaW5hbEZv
bnQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKFtAInNtYWxsLWNhcHMiIGlzRXF1YWxUb1N0cmlu
Zzpmb250VmFyaWFudF0pIHsKKyAgICAgICAgICAgIC8vID8/PyBzeW50aGVzaXplIHNtYWxsLWNh
cHMgaWYgW2ZvbnQgaXNFcXVhbDpvcmlnaW5hbEZvbnRdCisgICAgICAgICAgICBOU0ZvbnQgKm9y
aWdpbmFsRm9udCA9IGZvbnQ7CisgICAgICAgICAgICBmb250ID0gW2ZvbnRNYW5hZ2VyIGNvbnZl
cnRGb250OmZvbnQgdG9IYXZlVHJhaXQ6TlNTbWFsbENhcHNGb250TWFza107CisgICAgICAgICAg
ICBpZiAoIWZvbnQpIGZvbnQgPSBvcmlnaW5hbEZvbnQ7CisgICAgICAgIH0KKyAgICB9CisgICAg
aWYgKGZvbnQpIFthdHRycyBzZXRPYmplY3Q6Zm9udCBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFt
ZV07CisgICAgaWYgKGZvcmVncm91bmRDb2xvcikgW2F0dHJzIHNldE9iamVjdDpmb3JlZ3JvdW5k
Q29sb3IgZm9yS2V5Ok5TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07CisgICAgaWYgKGJh
Y2tncm91bmRDb2xvciAmJiAhW3NlbGYgX2VsZW1lbnRIYXNPd25CYWNrZ3JvdW5kQ29sb3I6ZWxl
bWVudF0pIFthdHRycyBzZXRPYmplY3Q6YmFja2dyb3VuZENvbG9yIGZvcktleTpOU0JhY2tncm91
bmRDb2xvckF0dHJpYnV0ZU5hbWVdOworICAgIGlmIChmb250RWZmZWN0KSB7CisgICAgICAgIGlm
IChbZm9udEVmZmVjdCByYW5nZU9mU3RyaW5nOkAib3V0bGluZSJdLmxvY2F0aW9uICE9IE5TTm90
Rm91bmQpIFthdHRycyBzZXRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6My4wXSBm
b3JLZXk6TlNTdHJva2VXaWR0aEF0dHJpYnV0ZU5hbWVdOworICAgICAgICBpZiAoW2ZvbnRFZmZl
Y3QgcmFuZ2VPZlN0cmluZzpAImVtYm9zcyJdLmxvY2F0aW9uICE9IE5TTm90Rm91bmQpIFthdHRy
cyBzZXRPYmplY3Q6W1tbTlNTaGFkb3cgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXSBmb3JLZXk6
TlNTaGFkb3dBdHRyaWJ1dGVOYW1lXTsKKyAgICB9CisgICAgaWYgKHRleHREZWNvcmF0aW9uICYm
IFt0ZXh0RGVjb3JhdGlvbiBsZW5ndGhdID4gNCkgeworICAgICAgICBpZiAoW3RleHREZWNvcmF0
aW9uIHJhbmdlT2ZTdHJpbmc6QCJ1bmRlcmxpbmUiXS5sb2NhdGlvbiAhPSBOU05vdEZvdW5kKSBb
YXR0cnMgc2V0T2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoSW50ZWdlcjpOU1VuZGVybGluZVN0
eWxlU2luZ2xlXSBmb3JLZXk6TlNVbmRlcmxpbmVTdHlsZUF0dHJpYnV0ZU5hbWVdOworICAgICAg
ICBpZiAoW3RleHREZWNvcmF0aW9uIHJhbmdlT2ZTdHJpbmc6QCJsaW5lLXRocm91Z2giXS5sb2Nh
dGlvbiAhPSBOU05vdEZvdW5kKSBbYXR0cnMgc2V0T2JqZWN0OltOU051bWJlciBudW1iZXJXaXRo
SW50ZWdlcjpOU1VuZGVybGluZVN0eWxlU2luZ2xlXSBmb3JLZXk6TlNTdHJpa2V0aHJvdWdoU3R5
bGVBdHRyaWJ1dGVOYW1lXTsKKyAgICB9CisgICAgaWYgKHZlcnRpY2FsQWxpZ24pIHsKKyAgICAg
ICAgaWYgKFt2ZXJ0aWNhbEFsaWduIHJhbmdlT2ZTdHJpbmc6QCJzdXBlciJdLmxvY2F0aW9uICE9
IE5TTm90Rm91bmQpIFthdHRycyBzZXRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhJbnRlZ2Vy
OjFdIGZvcktleTpOU1N1cGVyc2NyaXB0QXR0cmlidXRlTmFtZV07CisgICAgICAgIGlmIChbdmVy
dGljYWxBbGlnbiByYW5nZU9mU3RyaW5nOkAic3ViIl0ubG9jYXRpb24gIT0gTlNOb3RGb3VuZCkg
W2F0dHJzIHNldE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aEludGVnZXI6LTFdIGZvcktleTpO
U1N1cGVyc2NyaXB0QXR0cmlidXRlTmFtZV07CisgICAgfQorICAgIGlmIChbc2VsZiBfZ2V0Rmxv
YXQ6JmJhc2VsaW5lT2Zmc2V0IGZvck5vZGU6ZWxlbWVudCBwcm9wZXJ0eTpAInZlcnRpY2FsLWFs
aWduIl0pIFthdHRycyBzZXRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6YmFzZWxp
bmVPZmZzZXRdIGZvcktleTpOU0Jhc2VsaW5lT2Zmc2V0QXR0cmlidXRlTmFtZV07CisgICAgaWYg
KFtzZWxmIF9nZXRGbG9hdDoma2VybmluZyBmb3JOb2RlOmVsZW1lbnQgcHJvcGVydHk6QCJsZXR0
ZXItc3BhY2luZyJdKSBbYXR0cnMgc2V0T2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoRG91Ymxl
Omtlcm5pbmddIGZvcktleTpOU0tlcm5BdHRyaWJ1dGVOYW1lXTsKKyAgICBpZiAodGV4dFNoYWRv
dyAmJiBbdGV4dFNoYWRvdyBsZW5ndGhdID4gNCkgeworICAgICAgICBOU1NoYWRvdyAqc2hhZG93
ID0gX3NoYWRvd0ZvclNoYWRvd1N0eWxlKHRleHRTaGFkb3cpOworICAgICAgICBpZiAoc2hhZG93
KSBbYXR0cnMgc2V0T2JqZWN0OnNoYWRvdyBmb3JLZXk6TlNTaGFkb3dBdHRyaWJ1dGVOYW1lXTsK
KyAgICB9CisgICAgaWYgKGVsZW1lbnQgIT0gYmxvY2tFbGVtZW50ICYmIFtfd3JpdGluZ0RpcmVj
dGlvbkFycmF5IGNvdW50XSA+IDApIFthdHRycyBzZXRPYmplY3Q6W05TQXJyYXkgYXJyYXlXaXRo
QXJyYXk6X3dyaXRpbmdEaXJlY3Rpb25BcnJheV0gZm9yS2V5Ok5TV3JpdGluZ0RpcmVjdGlvbkF0
dHJpYnV0ZU5hbWVdOworICAgIAorICAgIGlmIChibG9ja0VsZW1lbnQpIHsKKyAgICAgICAgTlNN
dXRhYmxlUGFyYWdyYXBoU3R5bGUgKnBhcmFncmFwaFN0eWxlID0gW1tbc2VsZiBjbGFzc10gZGVm
YXVsdFBhcmFncmFwaFN0eWxlXSBtdXRhYmxlQ29weV07CisgICAgICAgIE5TU3RyaW5nICpibG9j
a1RhZyA9IFtibG9ja0VsZW1lbnQgdGFnTmFtZV07CisgICAgICAgIEJPT0wgaXNQYXJhZ3JhcGgg
PSAoW0AiUCIgaXNFcXVhbFRvU3RyaW5nOmJsb2NrVGFnXSB8fCBbQCJMSSIgaXNFcXVhbFRvU3Ry
aW5nOmJsb2NrVGFnXSB8fCAoW2Jsb2NrVGFnIGhhc1ByZWZpeDpAIkgiXSAmJiAyID09IFtibG9j
a1RhZyBsZW5ndGhdKSk7CisgICAgICAgIE5TU3RyaW5nICp0ZXh0QWxpZ24gPSBbc2VsZiBfc3Ry
aW5nRm9yTm9kZTpibG9ja0VsZW1lbnQgcHJvcGVydHk6QCJ0ZXh0LWFsaWduIl0sICpkaXJlY3Rp
b24gPSBbc2VsZiBfc3RyaW5nRm9yTm9kZTpibG9ja0VsZW1lbnQgcHJvcGVydHk6QCJkaXJlY3Rp
b24iXTsKKyAgICAgICAgQ0dGbG9hdCBsZWZ0TWFyZ2luID0gMC4wLCByaWdodE1hcmdpbiA9IDAu
MCwgYm90dG9tTWFyZ2luID0gMC4wLCB0ZXh0SW5kZW50ID0gMC4wLCBsaW5lSGVpZ2h0ID0gMC4w
OworICAgICAgICBpZiAodGV4dEFsaWduKSB7CisgICAgICAgICAgICAvLyBXZWJLaXQgY2FuIHJl
dHVybiAta2h0bWwtbGVmdCwgLWtodG1sLXJpZ2h0LCAta2h0bWwtY2VudGVyCisgICAgICAgICAg
ICBpZiAoW3RleHRBbGlnbiBoYXNTdWZmaXg6QCJsZWZ0Il0pIFtwYXJhZ3JhcGhTdHlsZSBzZXRB
bGlnbm1lbnQ6TlNMZWZ0VGV4dEFsaWdubWVudF07CisgICAgICAgICAgICBlbHNlIGlmIChbdGV4
dEFsaWduIGhhc1N1ZmZpeDpAInJpZ2h0Il0pIFtwYXJhZ3JhcGhTdHlsZSBzZXRBbGlnbm1lbnQ6
TlNSaWdodFRleHRBbGlnbm1lbnRdOworICAgICAgICAgICAgZWxzZSBpZiAoW3RleHRBbGlnbiBo
YXNTdWZmaXg6QCJjZW50ZXIiXSkgW3BhcmFncmFwaFN0eWxlIHNldEFsaWdubWVudDpOU0NlbnRl
clRleHRBbGlnbm1lbnRdOworICAgICAgICAgICAgZWxzZSBpZiAoW3RleHRBbGlnbiBoYXNTdWZm
aXg6QCJqdXN0aWZ5Il0pIFtwYXJhZ3JhcGhTdHlsZSBzZXRBbGlnbm1lbnQ6TlNKdXN0aWZpZWRU
ZXh0QWxpZ25tZW50XTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZGlyZWN0aW9uKSB7CisgICAg
ICAgICAgICBpZiAoW2RpcmVjdGlvbiBpc0VxdWFsVG9TdHJpbmc6QCJsdHIiXSkgW3BhcmFncmFw
aFN0eWxlIHNldEJhc2VXcml0aW5nRGlyZWN0aW9uOk5TV3JpdGluZ0RpcmVjdGlvbkxlZnRUb1Jp
Z2h0XTsKKyAgICAgICAgICAgIGVsc2UgaWYgKFtkaXJlY3Rpb24gaXNFcXVhbFRvU3RyaW5nOkAi
cnRsIl0pIFtwYXJhZ3JhcGhTdHlsZSBzZXRCYXNlV3JpdGluZ0RpcmVjdGlvbjpOU1dyaXRpbmdE
aXJlY3Rpb25SaWdodFRvTGVmdF07CisgICAgICAgIH0KKyAgICAgICAgaWYgKFtibG9ja1RhZyBo
YXNQcmVmaXg6QCJIIl0gJiYgMiA9PSBbYmxvY2tUYWcgbGVuZ3RoXSkgeworICAgICAgICAgICAg
TlNJbnRlZ2VyIGhlYWRlckxldmVsID0gW2Jsb2NrVGFnIGNoYXJhY3RlckF0SW5kZXg6MV0gLSAn
MCc7CisgICAgICAgICAgICBpZiAoMSA8PSBoZWFkZXJMZXZlbCAmJiBoZWFkZXJMZXZlbCA8PSA2
KSBbcGFyYWdyYXBoU3R5bGUgc2V0SGVhZGVyTGV2ZWw6aGVhZGVyTGV2ZWxdOyAgICAgICAgICAg
IAorICAgICAgICB9CisgICAgICAgIGlmIChpc1BhcmFncmFwaCkgeworICAgICAgICAgICAgLy9p
ZiAoW3NlbGYgX2dldEZsb2F0OiZ0b3BNYXJnaW4gZm9yTm9kZTpibG9ja0VsZW1lbnQgcHJvcGVy
dHk6QCJtYXJnaW4tdG9wIl0gJiYgdG9wTWFyZ2luID4gMC4wKSBbcGFyYWdyYXBoU3R5bGUgc2V0
UGFyYWdyYXBoU3BhY2luZ0JlZm9yZTp0b3BNYXJnaW5dOworICAgICAgICAgICAgaWYgKFtzZWxm
IF9nZXRGbG9hdDombGVmdE1hcmdpbiBmb3JOb2RlOmJsb2NrRWxlbWVudCBwcm9wZXJ0eTpAIm1h
cmdpbi1sZWZ0Il0gJiYgbGVmdE1hcmdpbiA+IDAuMCkgW3BhcmFncmFwaFN0eWxlIHNldEhlYWRJ
bmRlbnQ6bGVmdE1hcmdpbl07CisgICAgICAgICAgICBpZiAoW3NlbGYgX2dldEZsb2F0OiZ0ZXh0
SW5kZW50IGZvck5vZGU6YmxvY2tFbGVtZW50IHByb3BlcnR5OkAidGV4dC1pbmRlbnQiXSkgW3Bh
cmFncmFwaFN0eWxlIHNldEZpcnN0TGluZUhlYWRJbmRlbnQ6W3BhcmFncmFwaFN0eWxlIGhlYWRJ
bmRlbnRdICsgdGV4dEluZGVudF07CisgICAgICAgICAgICBpZiAoW3NlbGYgX2dldEZsb2F0OiZy
aWdodE1hcmdpbiBmb3JOb2RlOmJsb2NrRWxlbWVudCBwcm9wZXJ0eTpAIm1hcmdpbi1yaWdodCJd
ICYmIHJpZ2h0TWFyZ2luID4gMC4wKSBbcGFyYWdyYXBoU3R5bGUgc2V0VGFpbEluZGVudDotcmln
aHRNYXJnaW5dOworICAgICAgICAgICAgaWYgKFtzZWxmIF9nZXRGbG9hdDomYm90dG9tTWFyZ2lu
IGZvck5vZGU6YmxvY2tFbGVtZW50IHByb3BlcnR5OkAibWFyZ2luLWJvdHRvbSJdICYmIGJvdHRv
bU1hcmdpbiA+IDAuMCkgW3BhcmFncmFwaFN0eWxlIHNldFBhcmFncmFwaFNwYWNpbmc6Ym90dG9t
TWFyZ2luXTsKKyAgICAgICAgfQorICAgICAgICBpZiAoX3dlYlZpZXdUZXh0U2l6ZU11bHRpcGxp
ZXIgPiAwLjAgJiYgW3NlbGYgX2dldEZsb2F0OiZsaW5lSGVpZ2h0IGZvck5vZGU6ZWxlbWVudCBw
cm9wZXJ0eTpAImxpbmUtaGVpZ2h0Il0gJiYgbGluZUhlaWdodCA+IDAuMCkgeworICAgICAgICAg
ICAgW3BhcmFncmFwaFN0eWxlIHNldE1pbmltdW1MaW5lSGVpZ2h0OmxpbmVIZWlnaHQgLyBfd2Vi
Vmlld1RleHRTaXplTXVsdGlwbGllcl07CisgICAgICAgIH0KKyAgICAgICAgaWYgKFtfdGV4dExp
c3RzIGNvdW50XSA+IDApIFtwYXJhZ3JhcGhTdHlsZSBzZXRUZXh0TGlzdHM6X3RleHRMaXN0c107
CisgICAgICAgIGlmIChbX3RleHRCbG9ja3MgY291bnRdID4gMCkgW3BhcmFncmFwaFN0eWxlIHNl
dFRleHRCbG9ja3M6X3RleHRCbG9ja3NdOworICAgICAgICBbYXR0cnMgc2V0T2JqZWN0OnBhcmFn
cmFwaFN0eWxlIGZvcktleTpOU1BhcmFncmFwaFN0eWxlQXR0cmlidXRlTmFtZV07CisgICAgICAg
IFtwYXJhZ3JhcGhTdHlsZSByZWxlYXNlXTsKKyAgICB9CisgICAgcmV0dXJuIGF0dHJzOworfQor
CistIChOU0RpY3Rpb25hcnkgKilfYXR0cmlidXRlc0ZvckVsZW1lbnQ6KERPTUVsZW1lbnQgKill
bGVtZW50Cit7CisgICAgTlNEaWN0aW9uYXJ5ICpyZXN1bHQ7CisgICAgaWYgKGVsZW1lbnQpIHsK
KyAgICAgICAgcmVzdWx0ID0gW19hdHRyaWJ1dGVzRm9yRWxlbWVudHMgb2JqZWN0Rm9yS2V5OmVs
ZW1lbnRdOworICAgICAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICAgICAgcmVzdWx0ID0gW3Nl
bGYgX2NvbXB1dGVkQXR0cmlidXRlc0ZvckVsZW1lbnQ6ZWxlbWVudF07CisgICAgICAgICAgICBb
X2F0dHJpYnV0ZXNGb3JFbGVtZW50cyBzZXRPYmplY3Q6cmVzdWx0IGZvcktleTplbGVtZW50XTsK
KyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIHJlc3VsdCA9IFtOU0RpY3Rpb25hcnkg
ZGljdGlvbmFyeV07CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7CisKK30KKworLSAodm9pZClf
bmV3UGFyYWdyYXBoRm9yRWxlbWVudDooRE9NRWxlbWVudCAqKWVsZW1lbnQgdGFnOihOU1N0cmlu
ZyAqKXRhZyBhbGxvd0VtcHR5OihCT09MKWZsYWcgc3VwcHJlc3NUcmFpbGluZ1NwYWNlOihCT09M
KXN1cHByZXNzCit7CisgICAgTlNVSW50ZWdlciB0ZXh0TGVuZ3RoID0gW19hdHRyU3RyIGxlbmd0
aF07CisgICAgdW5pY2hhciBsYXN0Q2hhciA9ICh0ZXh0TGVuZ3RoID4gMCkgPyBbW19hdHRyU3Ry
IHN0cmluZ10gY2hhcmFjdGVyQXRJbmRleDp0ZXh0TGVuZ3RoIC0gMV0gOiAnXG4nOworICAgIE5T
UmFuZ2UgcmFuZ2VUb1JlcGxhY2UgPSAoc3VwcHJlc3MgJiYgX2ZsYWdzLmlzU29mdCAmJiAobGFz
dENoYXIgPT0gJyAnIHx8IGxhc3RDaGFyID09IE5TTGluZVNlcGFyYXRvckNoYXJhY3RlcikpID8g
TlNNYWtlUmFuZ2UodGV4dExlbmd0aCAtIDEsIDEpIDogTlNNYWtlUmFuZ2UodGV4dExlbmd0aCwg
MCk7CisgICAgQk9PTCBuZWVkQnJlYWsgPSAoZmxhZyB8fCBsYXN0Q2hhciAhPSAnXG4nKTsKKyAg
ICBpZiAobmVlZEJyZWFrKSB7CisgICAgICAgIE5TU3RyaW5nICpzdHJpbmcgPSAoKFtAIkJPRFki
IGlzRXF1YWxUb1N0cmluZzp0YWddIHx8IFtAIkhUTUwiIGlzRXF1YWxUb1N0cmluZzp0YWddKSA/
IEAiIiA6IEAiXG4iKTsKKyAgICAgICAgW193cml0aW5nRGlyZWN0aW9uQXJyYXkgcmVtb3ZlQWxs
T2JqZWN0c107CisgICAgICAgIFtfYXR0clN0ciByZXBsYWNlQ2hhcmFjdGVyc0luUmFuZ2U6cmFu
Z2VUb1JlcGxhY2Ugd2l0aFN0cmluZzpzdHJpbmddOworICAgICAgICBpZiAocmFuZ2VUb1JlcGxh
Y2UubG9jYXRpb24gPCBfZG9tUmFuZ2VTdGFydEluZGV4KSBfZG9tUmFuZ2VTdGFydEluZGV4ICs9
IFtzdHJpbmcgbGVuZ3RoXSAtIHJhbmdlVG9SZXBsYWNlLmxlbmd0aDsKKyAgICAgICAgcmFuZ2VU
b1JlcGxhY2UubGVuZ3RoID0gW3N0cmluZyBsZW5ndGhdOworICAgICAgICBpZiAoIV9mbGFncy5p
c0luZGV4aW5nKSB7CisgICAgICAgICAgICBOU0RpY3Rpb25hcnkgKmF0dHJzID0gW3NlbGYgX2F0
dHJpYnV0ZXNGb3JFbGVtZW50OmVsZW1lbnRdOworICAgICAgICAgICAgaWYgKCFfZmxhZ3MuaXNU
ZXN0aW5nICYmIHJhbmdlVG9SZXBsYWNlLmxlbmd0aCA+IDApIFtfYXR0clN0ciBzZXRBdHRyaWJ1
dGVzOmF0dHJzIHJhbmdlOnJhbmdlVG9SZXBsYWNlXTsKKyAgICAgICAgfQorICAgICAgICBfZmxh
Z3MuaXNTb2Z0ID0gWUVTOworICAgIH0KK30KKworLSAodm9pZClfbmV3TGluZUZvckVsZW1lbnQ6
KERPTUVsZW1lbnQgKillbGVtZW50Cit7CisgICAgdW5pY2hhciBjID0gTlNMaW5lU2VwYXJhdG9y
Q2hhcmFjdGVyOworICAgIE5TU3RyaW5nICpzdHJpbmcgPSBbW05TU3RyaW5nIGFsbG9jXSBpbml0
V2l0aENoYXJhY3RlcnM6JmMgbGVuZ3RoOjFdOworICAgIE5TVUludGVnZXIgdGV4dExlbmd0aCA9
IFtfYXR0clN0ciBsZW5ndGhdOworICAgIE5TUmFuZ2UgcmFuZ2VUb1JlcGxhY2UgPSBOU01ha2VS
YW5nZSh0ZXh0TGVuZ3RoLCAwKTsKKyAgICBbX2F0dHJTdHIgcmVwbGFjZUNoYXJhY3RlcnNJblJh
bmdlOnJhbmdlVG9SZXBsYWNlIHdpdGhTdHJpbmc6c3RyaW5nXTsKKyAgICByYW5nZVRvUmVwbGFj
ZS5sZW5ndGggPSBbc3RyaW5nIGxlbmd0aF07CisgICAgaWYgKHJhbmdlVG9SZXBsYWNlLmxvY2F0
aW9uIDwgX2RvbVJhbmdlU3RhcnRJbmRleCkgX2RvbVJhbmdlU3RhcnRJbmRleCArPSByYW5nZVRv
UmVwbGFjZS5sZW5ndGg7CisgICAgaWYgKCFfZmxhZ3MuaXNJbmRleGluZykgeworICAgICAgICBO
U0RpY3Rpb25hcnkgKmF0dHJzID0gW3NlbGYgX2F0dHJpYnV0ZXNGb3JFbGVtZW50OmVsZW1lbnRd
OworICAgICAgICBpZiAoIV9mbGFncy5pc1Rlc3RpbmcgJiYgcmFuZ2VUb1JlcGxhY2UubGVuZ3Ro
ID4gMCkgW19hdHRyU3RyIHNldEF0dHJpYnV0ZXM6YXR0cnMgcmFuZ2U6cmFuZ2VUb1JlcGxhY2Vd
OworICAgIH0KKyAgICBbc3RyaW5nIHJlbGVhc2VdOworICAgIF9mbGFncy5pc1NvZnQgPSBZRVM7
Cit9CisKKy0gKHZvaWQpX25ld1RhYkZvckVsZW1lbnQ6KERPTUVsZW1lbnQgKillbGVtZW50Cit7
CisgICAgTlNTdHJpbmcgKnN0cmluZyA9IEAiXHQiOworICAgIE5TVUludGVnZXIgdGV4dExlbmd0
aCA9IFtfYXR0clN0ciBsZW5ndGhdOworICAgIHVuaWNoYXIgbGFzdENoYXIgPSAodGV4dExlbmd0
aCA+IDApID8gW1tfYXR0clN0ciBzdHJpbmddIGNoYXJhY3RlckF0SW5kZXg6dGV4dExlbmd0aCAt
IDFdIDogJ1xuJzsKKyAgICBOU1JhbmdlIHJhbmdlVG9SZXBsYWNlID0gKF9mbGFncy5pc1NvZnQg
JiYgbGFzdENoYXIgPT0gJyAnKSA/IE5TTWFrZVJhbmdlKHRleHRMZW5ndGggLSAxLCAxKSA6IE5T
TWFrZVJhbmdlKHRleHRMZW5ndGgsIDApOworICAgIFtfYXR0clN0ciByZXBsYWNlQ2hhcmFjdGVy
c0luUmFuZ2U6cmFuZ2VUb1JlcGxhY2Ugd2l0aFN0cmluZzpzdHJpbmddOworICAgIHJhbmdlVG9S
ZXBsYWNlLmxlbmd0aCA9IFtzdHJpbmcgbGVuZ3RoXTsKKyAgICBpZiAocmFuZ2VUb1JlcGxhY2Uu
bG9jYXRpb24gPCBfZG9tUmFuZ2VTdGFydEluZGV4KSBfZG9tUmFuZ2VTdGFydEluZGV4ICs9IHJh
bmdlVG9SZXBsYWNlLmxlbmd0aDsKKyAgICBpZiAoIV9mbGFncy5pc0luZGV4aW5nKSB7CisgICAg
ICAgIE5TRGljdGlvbmFyeSAqYXR0cnMgPSBbc2VsZiBfYXR0cmlidXRlc0ZvckVsZW1lbnQ6ZWxl
bWVudF07CisgICAgICAgIGlmICghX2ZsYWdzLmlzVGVzdGluZyAmJiByYW5nZVRvUmVwbGFjZS5s
ZW5ndGggPiAwKSBbX2F0dHJTdHIgc2V0QXR0cmlidXRlczphdHRycyByYW5nZTpyYW5nZVRvUmVw
bGFjZV07CisgICAgfQorICAgIFtzdHJpbmcgcmVsZWFzZV07CisgICAgX2ZsYWdzLmlzU29mdCA9
IFlFUzsKK30KKworc3RhdGljIE5TRmlsZVdyYXBwZXIgKmZpbGVXcmFwcGVyRm9yVVJMKERvY3Vt
ZW50TG9hZGVyICpkYXRhU291cmNlLCBOU1VSTCAqVVJMKQoreworICAgIGlmIChbVVJMIGlzRmls
ZVVSTF0pIHsKKyAgICAgICAgTlNTdHJpbmcgKnBhdGggPSBbW1VSTCBwYXRoXSBzdHJpbmdCeVJl
c29sdmluZ1N5bWxpbmtzSW5QYXRoXTsKKyAgICAgICAgcmV0dXJuIFtbW05TRmlsZVdyYXBwZXIg
YWxsb2NdIGluaXRXaXRoUGF0aDpwYXRoXSBhdXRvcmVsZWFzZV07CisgICAgfQorICAgIAorICAg
IFJlZlB0cjxBcmNoaXZlUmVzb3VyY2U+IHJlc291cmNlID0gZGF0YVNvdXJjZS0+c3VicmVzb3Vy
Y2UoVVJMKTsKKyAgICBpZiAocmVzb3VyY2UpIHsKKyAgICAgICAgTlNGaWxlV3JhcHBlciAqd3Jh
cHBlciA9IFtbW05TRmlsZVdyYXBwZXIgYWxsb2NdIGluaXRSZWd1bGFyRmlsZVdpdGhDb250ZW50
czpbcmVzb3VyY2UtPmRhdGEoKS0+Y3JlYXRlTlNEYXRhKCkgYXV0b3JlbGVhc2VdXSBhdXRvcmVs
ZWFzZV07CisgICAgICAgIE5TU3RyaW5nICpmaWxlbmFtZSA9IHJlc291cmNlLT5yZXNwb25zZSgp
LnN1Z2dlc3RlZEZpbGVuYW1lKCk7CisgICAgICAgIGlmICghZmlsZW5hbWUgfHwgIVtmaWxlbmFt
ZSBsZW5ndGhdKSB7CisgICAgICAgICAgICBOU1VSTCAqVVJMID0gcmVzb3VyY2UtPnVybCgpOwor
ICAgICAgICAgICAgZmlsZW5hbWUgPSBbVVJMIF93ZWJfc3VnZ2VzdGVkRmlsZW5hbWVXaXRoTUlN
RVR5cGU6cmVzb3VyY2UtPm1pbWVUeXBlKCldOworICAgICAgICB9CisgICAgICAgIFt3cmFwcGVy
IHNldFByZWZlcnJlZEZpbGVuYW1lOmZpbGVuYW1lXTsKKyAgICAgICAgcmV0dXJuIHdyYXBwZXI7
CisgICAgfQorICAgIAorICAgIE5TTXV0YWJsZVVSTFJlcXVlc3QgKnJlcXVlc3QgPSBbW05TTXV0
YWJsZVVSTFJlcXVlc3QgYWxsb2NdIGluaXRXaXRoVVJMOlVSTF07CisKKyAgICBOU0NhY2hlZFVS
TFJlc3BvbnNlICpjYWNoZWRSZXNwb25zZSA9IFtbTlNVUkxDYWNoZSBzaGFyZWRVUkxDYWNoZV0g
Y2FjaGVkUmVzcG9uc2VGb3JSZXF1ZXN0OnJlcXVlc3RdOworICAgIFtyZXF1ZXN0IHJlbGVhc2Vd
OworICAgIAorICAgIGlmIChjYWNoZWRSZXNwb25zZSkgeworICAgICAgICBOU0ZpbGVXcmFwcGVy
ICp3cmFwcGVyID0gW1tbTlNGaWxlV3JhcHBlciBhbGxvY10gaW5pdFJlZ3VsYXJGaWxlV2l0aENv
bnRlbnRzOltjYWNoZWRSZXNwb25zZSBkYXRhXV0gYXV0b3JlbGVhc2VdOworICAgICAgICBbd3Jh
cHBlciBzZXRQcmVmZXJyZWRGaWxlbmFtZTpbW2NhY2hlZFJlc3BvbnNlIHJlc3BvbnNlXSBzdWdn
ZXN0ZWRGaWxlbmFtZV1dOworICAgICAgICByZXR1cm4gd3JhcHBlcjsKKyAgICB9CisgICAgCisg
ICAgcmV0dXJuIG5pbDsKK30KKyAgICAKKy0gKEJPT0wpX2FkZEF0dGFjaG1lbnRGb3JFbGVtZW50
OihET01FbGVtZW50ICopZWxlbWVudCBVUkw6KE5TVVJMICopdXJsIG5lZWRzUGFyYWdyYXBoOihC
T09MKW5lZWRzUGFyYWdyYXBoIHVzZVBsYWNlaG9sZGVyOihCT09MKWZsYWcKK3sKKyAgICBCT09M
IHJldHZhbCA9IE5PLCBub3RGb3VuZCA9IE5POworICAgIE5TRmlsZVdyYXBwZXIgKmZpbGVXcmFw
cGVyID0gbmlsOworICAgIHN0YXRpYyBOU0ltYWdlICptaXNzaW5nSW1hZ2UgPSBuaWw7CisgICAg
RnJhbWUqIGZyYW1lID0gY29yZShbZWxlbWVudCBvd25lckRvY3VtZW50XSktPmZyYW1lKCk7Cisg
ICAgRG9jdW1lbnRMb2FkZXIgKmRhdGFTb3VyY2UgPSBmcmFtZS0+bG9hZGVyKCktPmZyYW1lSGFz
TG9hZGVkKCkgPyBmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCkgOiAwOworICAgIEJP
T0wgaWdub3JlT3JpZW50YXRpb24gPSBZRVM7CisKKyAgICBpZiAoX2ZsYWdzLmlzSW5kZXhpbmcp
IHJldHVybiBOTzsKKyAgICBpZiAoW3VybCBpc0ZpbGVVUkxdKSB7CisgICAgICAgIE5TU3RyaW5n
ICpwYXRoID0gW1t1cmwgcGF0aF0gc3RyaW5nQnlTdGFuZGFyZGl6aW5nUGF0aF07CisgICAgICAg
IGlmIChwYXRoKSBmaWxlV3JhcHBlciA9IFtbW05TRmlsZVdyYXBwZXIgYWxsb2NdIGluaXRXaXRo
UGF0aDpwYXRoXSBhdXRvcmVsZWFzZV07CisgICAgfQorICAgIGlmICghZmlsZVdyYXBwZXIpIHsK
KyAgICAgICAgUmVmUHRyPEFyY2hpdmVSZXNvdXJjZT4gcmVzb3VyY2UgPSBkYXRhU291cmNlLT5z
dWJyZXNvdXJjZSh1cmwpOworICAgICAgICBpZiAoIXJlc291cmNlKSByZXNvdXJjZSA9IGRhdGFT
b3VyY2UtPnN1YnJlc291cmNlKHVybCk7CisgICAgICAgIGlmIChmbGFnICYmIHJlc291cmNlICYm
IFtAInRleHQvaHRtbCIgaXNFcXVhbDpyZXNvdXJjZS0+bWltZVR5cGUoKV0pIG5vdEZvdW5kID0g
WUVTOworICAgICAgICBpZiAocmVzb3VyY2UgJiYgIW5vdEZvdW5kKSB7CisgICAgICAgICAgICBm
aWxlV3JhcHBlciA9IFtbW05TRmlsZVdyYXBwZXIgYWxsb2NdIGluaXRSZWd1bGFyRmlsZVdpdGhD
b250ZW50czpbcmVzb3VyY2UtPmRhdGEoKS0+Y3JlYXRlTlNEYXRhKCkgYXV0b3JlbGVhc2VdXSBh
dXRvcmVsZWFzZV07CisgICAgICAgICAgICBbZmlsZVdyYXBwZXIgc2V0UHJlZmVycmVkRmlsZW5h
bWU6W3VybCBfd2ViX3N1Z2dlc3RlZEZpbGVuYW1lV2l0aE1JTUVUeXBlOnJlc291cmNlLT5taW1l
VHlwZSgpXV07CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKCFmaWxlV3JhcHBlciAmJiAhbm90
Rm91bmQpIHsKKyAgICAgICAgZmlsZVdyYXBwZXIgPSBmaWxlV3JhcHBlckZvclVSTChkYXRhU291
cmNlLCB1cmwpOworICAgICAgICBpZiAoZmxhZyAmJiBmaWxlV3JhcHBlciAmJiBbW1tbZmlsZVdy
YXBwZXIgcHJlZmVycmVkRmlsZW5hbWVdIHBhdGhFeHRlbnNpb25dIGxvd2VyY2FzZVN0cmluZ10g
aGFzUHJlZml4OkAiaHRtIl0pIG5vdEZvdW5kID0gWUVTOworICAgICAgICBpZiAobm90Rm91bmQp
IGZpbGVXcmFwcGVyID0gbmlsOworICAgIH0KKyAgICBpZiAoIWZpbGVXcmFwcGVyICYmICFub3RG
b3VuZCkgeworICAgICAgICBmaWxlV3JhcHBlciA9IGZpbGVXcmFwcGVyRm9yVVJMKF9kYXRhU291
cmNlLCB1cmwpOworICAgICAgICBpZiAoZmxhZyAmJiBmaWxlV3JhcHBlciAmJiBbW1tbZmlsZVdy
YXBwZXIgcHJlZmVycmVkRmlsZW5hbWVdIHBhdGhFeHRlbnNpb25dIGxvd2VyY2FzZVN0cmluZ10g
aGFzUHJlZml4OkAiaHRtIl0pIG5vdEZvdW5kID0gWUVTOworICAgICAgICBpZiAobm90Rm91bmQp
IGZpbGVXcmFwcGVyID0gbmlsOworICAgIH0KKyAgICBpZiAoZmlsZVdyYXBwZXIgfHwgZmxhZykg
eworICAgICAgICBOU1VJbnRlZ2VyIHRleHRMZW5ndGggPSBbX2F0dHJTdHIgbGVuZ3RoXTsKKyAg
ICAgICAgTlNUZXh0QXR0YWNobWVudCAqYXR0YWNobWVudCA9IFtbTlNUZXh0QXR0YWNobWVudCBh
bGxvY10gaW5pdFdpdGhGaWxlV3JhcHBlcjpmaWxlV3JhcHBlcl07CisgICAgICAgIE5TVGV4dEF0
dGFjaG1lbnRDZWxsICpjZWxsOworICAgICAgICBOU1N0cmluZyAqc3RyaW5nID0gW1tOU1N0cmlu
ZyBhbGxvY10gaW5pdFdpdGhGb3JtYXQ6KG5lZWRzUGFyYWdyYXBoID8gQCIlQ1xuIiA6IEAiJUMi
KSwgTlNBdHRhY2htZW50Q2hhcmFjdGVyXTsKKyAgICAgICAgTlNSYW5nZSByYW5nZVRvUmVwbGFj
ZSA9IE5TTWFrZVJhbmdlKHRleHRMZW5ndGgsIDApOworICAgICAgICBOU0RpY3Rpb25hcnkgKmF0
dHJzOworICAgICAgICBpZiAoZmlsZVdyYXBwZXIpIHsKKyAgICAgICAgICAgIGlmIChpZ25vcmVP
cmllbnRhdGlvbikgW2F0dGFjaG1lbnQgc2V0SWdub3Jlc09yaWVudGF0aW9uOllFU107CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjZWxsID0gW1tOU1RleHRBdHRhY2htZW50Q2VsbCBh
bGxvY10gaW5pdEltYWdlQ2VsbDptaXNzaW5nSW1hZ2VdOworICAgICAgICAgICAgW2F0dGFjaG1l
bnQgc2V0QXR0YWNobWVudENlbGw6Y2VsbF07CisgICAgICAgICAgICBbY2VsbCByZWxlYXNlXTsK
KyAgICAgICAgfQorICAgICAgICBbX2F0dHJTdHIgcmVwbGFjZUNoYXJhY3RlcnNJblJhbmdlOnJh
bmdlVG9SZXBsYWNlIHdpdGhTdHJpbmc6c3RyaW5nXTsKKyAgICAgICAgcmFuZ2VUb1JlcGxhY2Uu
bGVuZ3RoID0gW3N0cmluZyBsZW5ndGhdOworICAgICAgICBpZiAocmFuZ2VUb1JlcGxhY2UubG9j
YXRpb24gPCBfZG9tUmFuZ2VTdGFydEluZGV4KSBfZG9tUmFuZ2VTdGFydEluZGV4ICs9IHJhbmdl
VG9SZXBsYWNlLmxlbmd0aDsKKyAgICAgICAgYXR0cnMgPSBbc2VsZiBfYXR0cmlidXRlc0ZvckVs
ZW1lbnQ6ZWxlbWVudF07CisgICAgICAgIGlmICghX2ZsYWdzLmlzVGVzdGluZyAmJiByYW5nZVRv
UmVwbGFjZS5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICBbX2F0dHJTdHIgc2V0QXR0cmlidXRl
czphdHRycyByYW5nZTpyYW5nZVRvUmVwbGFjZV07CisgICAgICAgICAgICByYW5nZVRvUmVwbGFj
ZS5sZW5ndGggPSAxOworICAgICAgICAgICAgW19hdHRyU3RyIGFkZEF0dHJpYnV0ZTpOU0F0dGFj
aG1lbnRBdHRyaWJ1dGVOYW1lIHZhbHVlOmF0dGFjaG1lbnQgcmFuZ2U6cmFuZ2VUb1JlcGxhY2Vd
OworICAgICAgICB9CisgICAgICAgIFtzdHJpbmcgcmVsZWFzZV07CisgICAgICAgIFthdHRhY2ht
ZW50IHJlbGVhc2VdOworICAgICAgICBfZmxhZ3MuaXNTb2Z0ID0gTk87CisgICAgICAgIHJldHZh
bCA9IFlFUzsKKyAgICB9CisgICAgcmV0dXJuIHJldHZhbDsKK30KKworLSAodm9pZClfYWRkUXVv
dGVGb3JFbGVtZW50OihET01FbGVtZW50ICopZWxlbWVudCBvcGVuaW5nOihCT09MKW9wZW5pbmcg
bGV2ZWw6KE5TSW50ZWdlcilsZXZlbAoreworICAgIHVuaWNoYXIgYyA9ICgobGV2ZWwgJSAyKSA9
PSAwKSA/IChvcGVuaW5nID8gMHgyMDFjIDogMHgyMDFkKSA6IChvcGVuaW5nID8gMHgyMDE4IDog
MHgyMDE5KTsKKyAgICBOU1N0cmluZyAqc3RyaW5nID0gW1tOU1N0cmluZyBhbGxvY10gaW5pdFdp
dGhDaGFyYWN0ZXJzOiZjIGxlbmd0aDoxXTsKKyAgICBOU1VJbnRlZ2VyIHRleHRMZW5ndGggPSBb
X2F0dHJTdHIgbGVuZ3RoXTsKKyAgICBOU1JhbmdlIHJhbmdlVG9SZXBsYWNlID0gTlNNYWtlUmFu
Z2UodGV4dExlbmd0aCwgMCk7CisgICAgW19hdHRyU3RyIHJlcGxhY2VDaGFyYWN0ZXJzSW5SYW5n
ZTpyYW5nZVRvUmVwbGFjZSB3aXRoU3RyaW5nOnN0cmluZ107CisgICAgcmFuZ2VUb1JlcGxhY2Uu
bGVuZ3RoID0gW3N0cmluZyBsZW5ndGhdOworICAgIGlmIChyYW5nZVRvUmVwbGFjZS5sb2NhdGlv
biA8IF9kb21SYW5nZVN0YXJ0SW5kZXgpIF9kb21SYW5nZVN0YXJ0SW5kZXggKz0gcmFuZ2VUb1Jl
cGxhY2UubGVuZ3RoOworICAgIGlmICghX2ZsYWdzLmlzSW5kZXhpbmcpIHsKKyAgICAgICAgTlNE
aWN0aW9uYXJ5ICphdHRycyA9IFtzZWxmIF9hdHRyaWJ1dGVzRm9yRWxlbWVudDplbGVtZW50XTsK
KyAgICAgICAgaWYgKCFfZmxhZ3MuaXNUZXN0aW5nICYmIHJhbmdlVG9SZXBsYWNlLmxlbmd0aCA+
IDApIFtfYXR0clN0ciBzZXRBdHRyaWJ1dGVzOmF0dHJzIHJhbmdlOnJhbmdlVG9SZXBsYWNlXTsK
KyAgICB9CisgICAgW3N0cmluZyByZWxlYXNlXTsKKyAgICBfZmxhZ3MuaXNTb2Z0ID0gTk87Cit9
CisKKy0gKHZvaWQpX2FkZFZhbHVlOihOU1N0cmluZyAqKXZhbHVlIGZvckVsZW1lbnQ6KERPTUVs
ZW1lbnQgKillbGVtZW50Cit7CisgICAgTlNVSW50ZWdlciB0ZXh0TGVuZ3RoID0gW19hdHRyU3Ry
IGxlbmd0aF0sIHZhbHVlTGVuZ3RoID0gW3ZhbHVlIGxlbmd0aF07CisgICAgTlNSYW5nZSByYW5n
ZVRvUmVwbGFjZSA9IE5TTWFrZVJhbmdlKHRleHRMZW5ndGgsIDApOworICAgIGlmICh2YWx1ZUxl
bmd0aCA+IDApIHsKKyAgICAgICAgW19hdHRyU3RyIHJlcGxhY2VDaGFyYWN0ZXJzSW5SYW5nZTpy
YW5nZVRvUmVwbGFjZSB3aXRoU3RyaW5nOnZhbHVlXTsKKyAgICAgICAgcmFuZ2VUb1JlcGxhY2Uu
bGVuZ3RoID0gdmFsdWVMZW5ndGg7CisgICAgICAgIGlmIChyYW5nZVRvUmVwbGFjZS5sb2NhdGlv
biA8IF9kb21SYW5nZVN0YXJ0SW5kZXgpIF9kb21SYW5nZVN0YXJ0SW5kZXggKz0gcmFuZ2VUb1Jl
cGxhY2UubGVuZ3RoOworICAgICAgICBpZiAoIV9mbGFncy5pc0luZGV4aW5nKSB7CisgICAgICAg
ICAgICBOU0RpY3Rpb25hcnkgKmF0dHJzID0gW3NlbGYgX2F0dHJpYnV0ZXNGb3JFbGVtZW50OmVs
ZW1lbnRdOworICAgICAgICAgICAgaWYgKCFfZmxhZ3MuaXNUZXN0aW5nICYmIHJhbmdlVG9SZXBs
YWNlLmxlbmd0aCA+IDApIFtfYXR0clN0ciBzZXRBdHRyaWJ1dGVzOmF0dHJzIHJhbmdlOnJhbmdl
VG9SZXBsYWNlXTsKKyAgICAgICAgfQorICAgICAgICBfZmxhZ3MuaXNTb2Z0ID0gTk87CisgICAg
fQorfQorCistICh2b2lkKV9maWxsSW5CbG9jazooTlNUZXh0QmxvY2sgKilibG9jayBmb3JFbGVt
ZW50OihET01FbGVtZW50ICopZWxlbWVudCBiYWNrZ3JvdW5kQ29sb3I6KE5TQ29sb3IgKiliYWNr
Z3JvdW5kQ29sb3IgZXh0cmFNYXJnaW46KENHRmxvYXQpZXh0cmFNYXJnaW4gZXh0cmFQYWRkaW5n
OihDR0Zsb2F0KWV4dHJhUGFkZGluZyBpc1RhYmxlOihCT09MKWlzVGFibGUKK3sKKyAgICBDR0Zs
b2F0IHZhbCA9IDAuMDsKKyAgICBOU0NvbG9yICpjb2xvciA9IG5pbDsKKyAgICBCT09MIGlzVGFi
bGVDZWxsRWxlbWVudCA9IFtlbGVtZW50IGlzS2luZE9mQ2xhc3M6W0RPTUhUTUxUYWJsZUNlbGxF
bGVtZW50IGNsYXNzXV07CisgICAgTlNTdHJpbmcgKndpZHRoID0gaXNUYWJsZUNlbGxFbGVtZW50
ID8gWyhET01IVE1MVGFibGVDZWxsRWxlbWVudCAqKWVsZW1lbnQgd2lkdGhdIDogW2VsZW1lbnQg
Z2V0QXR0cmlidXRlOkAid2lkdGgiXTsKKworICAgIGlmICgod2lkdGggJiYgW3dpZHRoIGxlbmd0
aF0gPiAwKSB8fCAhaXNUYWJsZSkgeworICAgICAgICBpZiAoW3NlbGYgX2dldEZsb2F0OiZ2YWwg
Zm9yTm9kZTplbGVtZW50IHByb3BlcnR5OkAid2lkdGgiXSkgW2Jsb2NrIHNldFZhbHVlOnZhbCB0
eXBlOk5TVGV4dEJsb2NrQWJzb2x1dGVWYWx1ZVR5cGUgZm9yRGltZW5zaW9uOk5TVGV4dEJsb2Nr
V2lkdGhdOworICAgIH0KKyAgICAKKyAgICBpZiAoW3NlbGYgX2dldEZsb2F0OiZ2YWwgZm9yTm9k
ZTplbGVtZW50IHByb3BlcnR5OkAibWluLXdpZHRoIl0pIFtibG9jayBzZXRWYWx1ZTp2YWwgdHlw
ZTpOU1RleHRCbG9ja0Fic29sdXRlVmFsdWVUeXBlIGZvckRpbWVuc2lvbjpOU1RleHRCbG9ja01p
bmltdW1XaWR0aF07CisgICAgaWYgKFtzZWxmIF9nZXRGbG9hdDomdmFsIGZvck5vZGU6ZWxlbWVu
dCBwcm9wZXJ0eTpAIm1heC13aWR0aCJdKSBbYmxvY2sgc2V0VmFsdWU6dmFsIHR5cGU6TlNUZXh0
QmxvY2tBYnNvbHV0ZVZhbHVlVHlwZSBmb3JEaW1lbnNpb246TlNUZXh0QmxvY2tNYXhpbXVtV2lk
dGhdOworICAgIGlmIChbc2VsZiBfZ2V0RmxvYXQ6JnZhbCBmb3JOb2RlOmVsZW1lbnQgcHJvcGVy
dHk6QCJtaW4taGVpZ2h0Il0pIFtibG9jayBzZXRWYWx1ZTp2YWwgdHlwZTpOU1RleHRCbG9ja0Fi
c29sdXRlVmFsdWVUeXBlIGZvckRpbWVuc2lvbjpOU1RleHRCbG9ja01pbmltdW1IZWlnaHRdOwor
ICAgIGlmIChbc2VsZiBfZ2V0RmxvYXQ6JnZhbCBmb3JOb2RlOmVsZW1lbnQgcHJvcGVydHk6QCJt
YXgtaGVpZ2h0Il0pIFtibG9jayBzZXRWYWx1ZTp2YWwgdHlwZTpOU1RleHRCbG9ja0Fic29sdXRl
VmFsdWVUeXBlIGZvckRpbWVuc2lvbjpOU1RleHRCbG9ja01heGltdW1IZWlnaHRdOworCisgICAg
aWYgKFtzZWxmIF9nZXRGbG9hdDomdmFsIGZvck5vZGU6ZWxlbWVudCBwcm9wZXJ0eTpAInBhZGRp
bmctbGVmdCJdKSBbYmxvY2sgc2V0V2lkdGg6dmFsICsgZXh0cmFQYWRkaW5nIHR5cGU6TlNUZXh0
QmxvY2tBYnNvbHV0ZVZhbHVlVHlwZSBmb3JMYXllcjpOU1RleHRCbG9ja1BhZGRpbmcgZWRnZTpO
U01pblhFZGdlXTsgZWxzZSBbYmxvY2sgc2V0V2lkdGg6ZXh0cmFQYWRkaW5nIHR5cGU6TlNUZXh0
QmxvY2tBYnNvbHV0ZVZhbHVlVHlwZSBmb3JMYXllcjpOU1RleHRCbG9ja1BhZGRpbmcgZWRnZTpO
U01pblhFZGdlXTsKKyAgICBpZiAoW3NlbGYgX2dldEZsb2F0OiZ2YWwgZm9yTm9kZTplbGVtZW50
IHByb3BlcnR5OkAicGFkZGluZy10b3AiXSkgW2Jsb2NrIHNldFdpZHRoOnZhbCArIGV4dHJhUGFk
ZGluZyB0eXBlOk5TVGV4dEJsb2NrQWJzb2x1dGVWYWx1ZVR5cGUgZm9yTGF5ZXI6TlNUZXh0Qmxv
Y2tQYWRkaW5nIGVkZ2U6TlNNaW5ZRWRnZV07IGVsc2UgW2Jsb2NrIHNldFdpZHRoOmV4dHJhUGFk
ZGluZyB0eXBlOk5TVGV4dEJsb2NrQWJzb2x1dGVWYWx1ZVR5cGUgZm9yTGF5ZXI6TlNUZXh0Qmxv
Y2tQYWRkaW5nIGVkZ2U6TlNNaW5ZRWRnZV07CisgICAgaWYgKFtzZWxmIF9nZXRGbG9hdDomdmFs
IGZvck5vZGU6ZWxlbWVudCBwcm9wZXJ0eTpAInBhZGRpbmctcmlnaHQiXSkgW2Jsb2NrIHNldFdp
ZHRoOnZhbCArIGV4dHJhUGFkZGluZyB0eXBlOk5TVGV4dEJsb2NrQWJzb2x1dGVWYWx1ZVR5cGUg
Zm9yTGF5ZXI6TlNUZXh0QmxvY2tQYWRkaW5nIGVkZ2U6TlNNYXhYRWRnZV07IGVsc2UgW2Jsb2Nr
IHNldFdpZHRoOmV4dHJhUGFkZGluZyB0eXBlOk5TVGV4dEJsb2NrQWJzb2x1dGVWYWx1ZVR5cGUg
Zm9yTGF5ZXI6TlNUZXh0QmxvY2tQYWRkaW5nIGVkZ2U6TlNNYXhYRWRnZV07CisgICAgaWYgKFtz
ZWxmIF9nZXRGbG9hdDomdmFsIGZvck5vZGU6ZWxlbWVudCBwcm9wZXJ0eTpAInBhZGRpbmctYm90
dG9tIl0pIFtibG9jayBzZXRXaWR0aDp2YWwgKyBleHRyYVBhZGRpbmcgdHlwZTpOU1RleHRCbG9j
a0Fic29sdXRlVmFsdWVUeXBlIGZvckxheWVyOk5TVGV4dEJsb2NrUGFkZGluZyBlZGdlOk5TTWF4
WUVkZ2VdOyBlbHNlIFtibG9jayBzZXRXaWR0aDpleHRyYVBhZGRpbmcgdHlwZTpOU1RleHRCbG9j
a0Fic29sdXRlVmFsdWVUeXBlIGZvckxheWVyOk5TVGV4dEJsb2NrUGFkZGluZyBlZGdlOk5TTWF4
WUVkZ2VdOworICAgIAorICAgIGlmIChbc2VsZiBfZ2V0RmxvYXQ6JnZhbCBmb3JOb2RlOmVsZW1l
bnQgcHJvcGVydHk6QCJib3JkZXItbGVmdC13aWR0aCJdKSBbYmxvY2sgc2V0V2lkdGg6dmFsIHR5
cGU6TlNUZXh0QmxvY2tBYnNvbHV0ZVZhbHVlVHlwZSBmb3JMYXllcjpOU1RleHRCbG9ja0JvcmRl
ciBlZGdlOk5TTWluWEVkZ2VdOworICAgIGlmIChbc2VsZiBfZ2V0RmxvYXQ6JnZhbCBmb3JOb2Rl
OmVsZW1lbnQgcHJvcGVydHk6QCJib3JkZXItdG9wLXdpZHRoIl0pIFtibG9jayBzZXRXaWR0aDp2
YWwgdHlwZTpOU1RleHRCbG9ja0Fic29sdXRlVmFsdWVUeXBlIGZvckxheWVyOk5TVGV4dEJsb2Nr
Qm9yZGVyIGVkZ2U6TlNNaW5ZRWRnZV07CisgICAgaWYgKFtzZWxmIF9nZXRGbG9hdDomdmFsIGZv
ck5vZGU6ZWxlbWVudCBwcm9wZXJ0eTpAImJvcmRlci1yaWdodC13aWR0aCJdKSBbYmxvY2sgc2V0
V2lkdGg6dmFsIHR5cGU6TlNUZXh0QmxvY2tBYnNvbHV0ZVZhbHVlVHlwZSBmb3JMYXllcjpOU1Rl
eHRCbG9ja0JvcmRlciBlZGdlOk5TTWF4WEVkZ2VdOworICAgIGlmIChbc2VsZiBfZ2V0RmxvYXQ6
JnZhbCBmb3JOb2RlOmVsZW1lbnQgcHJvcGVydHk6QCJib3JkZXItYm90dG9tLXdpZHRoIl0pIFti
bG9jayBzZXRXaWR0aDp2YWwgdHlwZTpOU1RleHRCbG9ja0Fic29sdXRlVmFsdWVUeXBlIGZvckxh
eWVyOk5TVGV4dEJsb2NrQm9yZGVyIGVkZ2U6TlNNYXhZRWRnZV07CisKKyAgICBpZiAoW3NlbGYg
X2dldEZsb2F0OiZ2YWwgZm9yTm9kZTplbGVtZW50IHByb3BlcnR5OkAibWFyZ2luLWxlZnQiXSkg
W2Jsb2NrIHNldFdpZHRoOnZhbCArIGV4dHJhTWFyZ2luIHR5cGU6TlNUZXh0QmxvY2tBYnNvbHV0
ZVZhbHVlVHlwZSBmb3JMYXllcjpOU1RleHRCbG9ja01hcmdpbiBlZGdlOk5TTWluWEVkZ2VdOyBl
bHNlIFtibG9jayBzZXRXaWR0aDpleHRyYU1hcmdpbiB0eXBlOk5TVGV4dEJsb2NrQWJzb2x1dGVW
YWx1ZVR5cGUgZm9yTGF5ZXI6TlNUZXh0QmxvY2tNYXJnaW4gZWRnZTpOU01pblhFZGdlXTsKKyAg
ICBpZiAoW3NlbGYgX2dldEZsb2F0OiZ2YWwgZm9yTm9kZTplbGVtZW50IHByb3BlcnR5OkAibWFy
Z2luLXRvcCJdKSBbYmxvY2sgc2V0V2lkdGg6dmFsICsgZXh0cmFNYXJnaW4gdHlwZTpOU1RleHRC
bG9ja0Fic29sdXRlVmFsdWVUeXBlIGZvckxheWVyOk5TVGV4dEJsb2NrTWFyZ2luIGVkZ2U6TlNN
aW5ZRWRnZV07IGVsc2UgW2Jsb2NrIHNldFdpZHRoOmV4dHJhTWFyZ2luIHR5cGU6TlNUZXh0Qmxv
Y2tBYnNvbHV0ZVZhbHVlVHlwZSBmb3JMYXllcjpOU1RleHRCbG9ja01hcmdpbiBlZGdlOk5TTWlu
WUVkZ2VdOworICAgIGlmIChbc2VsZiBfZ2V0RmxvYXQ6JnZhbCBmb3JOb2RlOmVsZW1lbnQgcHJv
cGVydHk6QCJtYXJnaW4tcmlnaHQiXSkgW2Jsb2NrIHNldFdpZHRoOnZhbCArIGV4dHJhTWFyZ2lu
IHR5cGU6TlNUZXh0QmxvY2tBYnNvbHV0ZVZhbHVlVHlwZSBmb3JMYXllcjpOU1RleHRCbG9ja01h
cmdpbiBlZGdlOk5TTWF4WEVkZ2VdOyBlbHNlIFtibG9jayBzZXRXaWR0aDpleHRyYU1hcmdpbiB0
eXBlOk5TVGV4dEJsb2NrQWJzb2x1dGVWYWx1ZVR5cGUgZm9yTGF5ZXI6TlNUZXh0QmxvY2tNYXJn
aW4gZWRnZTpOU01heFhFZGdlXTsKKyAgICBpZiAoW3NlbGYgX2dldEZsb2F0OiZ2YWwgZm9yTm9k
ZTplbGVtZW50IHByb3BlcnR5OkAibWFyZ2luLWJvdHRvbSJdKSBbYmxvY2sgc2V0V2lkdGg6dmFs
ICsgZXh0cmFNYXJnaW4gdHlwZTpOU1RleHRCbG9ja0Fic29sdXRlVmFsdWVUeXBlIGZvckxheWVy
Ok5TVGV4dEJsb2NrTWFyZ2luIGVkZ2U6TlNNYXhZRWRnZV07IGVsc2UgW2Jsb2NrIHNldFdpZHRo
OmV4dHJhTWFyZ2luIHR5cGU6TlNUZXh0QmxvY2tBYnNvbHV0ZVZhbHVlVHlwZSBmb3JMYXllcjpO
U1RleHRCbG9ja01hcmdpbiBlZGdlOk5TTWF4WUVkZ2VdOworCisgICAgaWYgKChjb2xvciA9IFtz
ZWxmIF9jb2xvckZvck5vZGU6ZWxlbWVudCBwcm9wZXJ0eTpAImJhY2tncm91bmQtY29sb3IiXSkp
IFtibG9jayBzZXRCYWNrZ3JvdW5kQ29sb3I6Y29sb3JdOworICAgIGlmICghY29sb3IgJiYgYmFj
a2dyb3VuZENvbG9yKSBbYmxvY2sgc2V0QmFja2dyb3VuZENvbG9yOmJhY2tncm91bmRDb2xvcl07
CisgICAgaWYgKChjb2xvciA9IFtzZWxmIF9jb2xvckZvck5vZGU6ZWxlbWVudCBwcm9wZXJ0eTpA
ImJvcmRlci1sZWZ0LWNvbG9yIl0pKSBbYmxvY2sgc2V0Qm9yZGVyQ29sb3I6Y29sb3IgZm9yRWRn
ZTpOU01pblhFZGdlXTsKKyAgICBpZiAoKGNvbG9yID0gW3NlbGYgX2NvbG9yRm9yTm9kZTplbGVt
ZW50IHByb3BlcnR5OkAiYm9yZGVyLXRvcC1jb2xvciJdKSkgW2Jsb2NrIHNldEJvcmRlckNvbG9y
OmNvbG9yIGZvckVkZ2U6TlNNaW5ZRWRnZV07CisgICAgaWYgKChjb2xvciA9IFtzZWxmIF9jb2xv
ckZvck5vZGU6ZWxlbWVudCBwcm9wZXJ0eTpAImJvcmRlci1yaWdodC1jb2xvciJdKSkgW2Jsb2Nr
IHNldEJvcmRlckNvbG9yOmNvbG9yIGZvckVkZ2U6TlNNYXhYRWRnZV07CisgICAgaWYgKChjb2xv
ciA9IFtzZWxmIF9jb2xvckZvck5vZGU6ZWxlbWVudCBwcm9wZXJ0eTpAImJvcmRlci1ib3R0b20t
Y29sb3IiXSkpIFtibG9jayBzZXRCb3JkZXJDb2xvcjpjb2xvciBmb3JFZGdlOk5TTWF4WUVkZ2Vd
OworfQorCitzdGF0aWMgaW5saW5lIEJPT0wgcmVhZDJEaWdpdE51bWJlcihjb25zdCBjaGFyICoq
cHAsIGludDhfdCAqb3V0dmFsKQoreworICAgIEJPT0wgcmVzdWx0ID0gTk87CisgICAgY2hhciBj
MSA9ICooKnBwKSsrLCBjMjsKKyAgICBpZiAoaXNBU0NJSURpZ2l0KGMxKSkgeworICAgICAgICBj
MiA9ICooKnBwKSsrOworICAgICAgICBpZiAoaXNBU0NJSURpZ2l0KGMyKSkgeworICAgICAgICAg
ICAgKm91dHZhbCA9IDEwICogKGMxIC0gJzAnKSArIChjMiAtICcwJyk7CisgICAgICAgICAgICBy
ZXN1bHQgPSBZRVM7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
c3RhdGljIGlubGluZSBOU0RhdGUgKl9kYXRlRm9yU3RyaW5nKE5TU3RyaW5nICpzdHJpbmcpCit7
CisgICAgQ0ZHcmVnb3JpYW5EYXRlIGRhdGU7CisgICAgY29uc3QgY2hhciAqcCA9IFtzdHJpbmcg
VVRGOFN0cmluZ107CisgICAgaW50OF90IHNlY3ZhbCA9IDA7CisgICAgQk9PTCB3ZWxsRm9ybWVk
ID0gWUVTOworCisgICAgZGF0ZS55ZWFyID0gMDsKKyAgICB3aGlsZSAoKnAgJiYgaXNBU0NJSURp
Z2l0KCpwKSkgZGF0ZS55ZWFyID0gMTAgKiBkYXRlLnllYXIgKyAqcCsrIC0gJzAnOworICAgIGlm
ICgqcCsrICE9ICctJykgd2VsbEZvcm1lZCA9IE5POworICAgIGlmICghd2VsbEZvcm1lZCB8fCAh
cmVhZDJEaWdpdE51bWJlcigmcCwgJmRhdGUubW9udGgpIHx8ICpwKysgIT0gJy0nKSB3ZWxsRm9y
bWVkID0gTk87CisgICAgaWYgKCF3ZWxsRm9ybWVkIHx8ICFyZWFkMkRpZ2l0TnVtYmVyKCZwLCAm
ZGF0ZS5kYXkpIHx8ICpwKysgIT0gJ1QnKSB3ZWxsRm9ybWVkID0gTk87CisgICAgaWYgKCF3ZWxs
Rm9ybWVkIHx8ICFyZWFkMkRpZ2l0TnVtYmVyKCZwLCAmZGF0ZS5ob3VyKSB8fCAqcCsrICE9ICc6
Jykgd2VsbEZvcm1lZCA9IE5POworICAgIGlmICghd2VsbEZvcm1lZCB8fCAhcmVhZDJEaWdpdE51
bWJlcigmcCwgJmRhdGUubWludXRlKSB8fCAqcCsrICE9ICc6Jykgd2VsbEZvcm1lZCA9IE5POwor
ICAgIGlmICghd2VsbEZvcm1lZCB8fCAhcmVhZDJEaWdpdE51bWJlcigmcCwgJnNlY3ZhbCkgfHwg
KnArKyAhPSAnWicpIHdlbGxGb3JtZWQgPSBOTzsKKyAgICBpZiAod2VsbEZvcm1lZCkgZGF0ZS5z
ZWNvbmQgPSBzZWN2YWw7CisgICAgcmV0dXJuIHdlbGxGb3JtZWQgPyBbKE5TRGF0ZSAqKUNGRGF0
ZUNyZWF0ZShOVUxMLCBDRkdyZWdvcmlhbkRhdGVHZXRBYnNvbHV0ZVRpbWUoZGF0ZSwgTlVMTCkp
IGF1dG9yZWxlYXNlXSA6IG5pbDsKK30KKworc3RhdGljIE5TSW50ZWdlciBfY29sQ29tcGFyZShp
ZCBibG9jazEsIGlkIGJsb2NrMiwgdm9pZCAqKQoreworICAgIE5TSW50ZWdlciBjb2wxID0gWyhO
U1RleHRUYWJsZUJsb2NrICopYmxvY2sxIHN0YXJ0aW5nQ29sdW1uXSwgY29sMiA9IFsoTlNUZXh0
VGFibGVCbG9jayAqKWJsb2NrMiBzdGFydGluZ0NvbHVtbl07CisgICAgcmV0dXJuICgoY29sMSA8
IGNvbDIpID8gTlNPcmRlcmVkQXNjZW5kaW5nIDogKChjb2wxID09IGNvbDIpID8gTlNPcmRlcmVk
U2FtZSA6IE5TT3JkZXJlZERlc2NlbmRpbmcpKTsKK30KKworLSAoQk9PTClfZW50ZXJFbGVtZW50
OihET01FbGVtZW50ICopZWxlbWVudCB0YWc6KE5TU3RyaW5nICopdGFnIGRpc3BsYXk6KE5TU3Ry
aW5nICopZGlzcGxheVZhbAoreworICAgIGlmICghZGlzcGxheVZhbCB8fCAhKFtAIm5vbmUiIGlz
RXF1YWxUb1N0cmluZzpkaXNwbGF5VmFsXSB8fCBbQCJ0YWJsZS1jb2x1bW4iIGlzRXF1YWxUb1N0
cmluZzpkaXNwbGF5VmFsXSB8fCBbQCJ0YWJsZS1jb2x1bW4tZ3JvdXAiIGlzRXF1YWxUb1N0cmlu
ZzpkaXNwbGF5VmFsXSkpIHsKKyAgICAgICAgaWYgKFtzZWxmIF9lbGVtZW50SXNCbG9ja0xldmVs
OmVsZW1lbnRdICYmICFbQCJCUiIgaXNFcXVhbFRvU3RyaW5nOnRhZ10gJiYgIShbQCJ0YWJsZS1j
ZWxsIiBpc0VxdWFsVG9TdHJpbmc6ZGlzcGxheVZhbF0gJiYgW190ZXh0VGFibGVzIGNvdW50XSA9
PSAwKSAKKyAgICAgICAgICAgICYmICEoW190ZXh0TGlzdHMgY291bnRdID4gMCAmJiBbQCJibG9j
ayIgaXNFcXVhbFRvU3RyaW5nOmRpc3BsYXlWYWxdICYmICFbQCJMSSIgaXNFcXVhbFRvU3RyaW5n
OnRhZ10gJiYgIVtAIlVMIiBpc0VxdWFsVG9TdHJpbmc6dGFnXSAmJiAhW0AiT0wiIGlzRXF1YWxU
b1N0cmluZzp0YWddKSkKKyAgICAgICAgICAgIFtzZWxmIF9uZXdQYXJhZ3JhcGhGb3JFbGVtZW50
OmVsZW1lbnQgdGFnOnRhZyBhbGxvd0VtcHR5Ok5PIHN1cHByZXNzVHJhaWxpbmdTcGFjZTpZRVNd
OworICAgICAgICByZXR1cm4gWUVTOworICAgIH0KKyAgICByZXR1cm4gTk87Cit9CisKKy0gKHZv
aWQpX2FkZFRhYmxlRm9yRWxlbWVudDooRE9NRWxlbWVudCAqKXRhYmxlRWxlbWVudAoreworICAg
IE5TVGV4dFRhYmxlICp0YWJsZSA9IFtbTlNUZXh0VGFibGUgYWxsb2NdIGluaXRdOworICAgIENH
RmxvYXQgY2VsbFNwYWNpbmdWYWwgPSAxLjAsIGNlbGxQYWRkaW5nVmFsID0gMS4wOworICAgIFt0
YWJsZSBzZXROdW1iZXJPZkNvbHVtbnM6MV07CisgICAgW3RhYmxlIHNldExheW91dEFsZ29yaXRo
bTpOU1RleHRUYWJsZUF1dG9tYXRpY0xheW91dEFsZ29yaXRobV07CisgICAgW3RhYmxlIHNldENv
bGxhcHNlc0JvcmRlcnM6Tk9dOworICAgIFt0YWJsZSBzZXRIaWRlc0VtcHR5Q2VsbHM6Tk9dOwor
ICAgIGlmICh0YWJsZUVsZW1lbnQpIHsKKyAgICAgICAgTlNTdHJpbmcgKmJvcmRlckNvbGxhcHNl
ID0gW3NlbGYgX3N0cmluZ0Zvck5vZGU6dGFibGVFbGVtZW50IHByb3BlcnR5OkAiYm9yZGVyLWNv
bGxhcHNlIl0sICplbXB0eUNlbGxzID0gW3NlbGYgX3N0cmluZ0Zvck5vZGU6dGFibGVFbGVtZW50
IHByb3BlcnR5OkAiZW1wdHktY2VsbHMiXSwgKnRhYmxlTGF5b3V0ID0gW3NlbGYgX3N0cmluZ0Zv
ck5vZGU6dGFibGVFbGVtZW50IHByb3BlcnR5OkAidGFibGUtbGF5b3V0Il07CisgICAgICAgIGlm
IChbdGFibGVFbGVtZW50IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoY2VsbFNwYWNpbmcp
XSkgeworICAgICAgICAgICAgTlNTdHJpbmcgKmNlbGxTcGFjaW5nID0gWyhET01IVE1MVGFibGVF
bGVtZW50ICopdGFibGVFbGVtZW50IGNlbGxTcGFjaW5nXTsKKyAgICAgICAgICAgIGlmIChjZWxs
U3BhY2luZyAmJiBbY2VsbFNwYWNpbmcgbGVuZ3RoXSA+IDAgJiYgIVtjZWxsU3BhY2luZyBoYXNT
dWZmaXg6QCIlIl0pIGNlbGxTcGFjaW5nVmFsID0gW2NlbGxTcGFjaW5nIGRvdWJsZVZhbHVlXTsK
KyAgICAgICAgfQorICAgICAgICBpZiAoW3RhYmxlRWxlbWVudCByZXNwb25kc1RvU2VsZWN0b3I6
QHNlbGVjdG9yKGNlbGxQYWRkaW5nKV0pIHsKKyAgICAgICAgICAgIE5TU3RyaW5nICpjZWxsUGFk
ZGluZyA9IFsoRE9NSFRNTFRhYmxlRWxlbWVudCAqKXRhYmxlRWxlbWVudCBjZWxsUGFkZGluZ107
CisgICAgICAgICAgICBpZiAoY2VsbFBhZGRpbmcgJiYgW2NlbGxQYWRkaW5nIGxlbmd0aF0gPiAw
ICYmICFbY2VsbFBhZGRpbmcgaGFzU3VmZml4OkAiJSJdKSBjZWxsUGFkZGluZ1ZhbCA9IFtjZWxs
UGFkZGluZyBkb3VibGVWYWx1ZV07CisgICAgICAgIH0KKyAgICAgICAgW3NlbGYgX2ZpbGxJbkJs
b2NrOnRhYmxlIGZvckVsZW1lbnQ6dGFibGVFbGVtZW50IGJhY2tncm91bmRDb2xvcjpuaWwgZXh0
cmFNYXJnaW46MC4wIGV4dHJhUGFkZGluZzowLjAgaXNUYWJsZTpZRVNdOworICAgICAgICBpZiAo
W0AiY29sbGFwc2UiIGlzRXF1YWxUb1N0cmluZzpib3JkZXJDb2xsYXBzZV0pIHsKKyAgICAgICAg
ICAgIFt0YWJsZSBzZXRDb2xsYXBzZXNCb3JkZXJzOllFU107CisgICAgICAgICAgICBjZWxsU3Bh
Y2luZ1ZhbCA9IDAuMDsKKyAgICAgICAgfQorICAgICAgICBpZiAoW0AiaGlkZSIgaXNFcXVhbFRv
U3RyaW5nOmVtcHR5Q2VsbHNdKSBbdGFibGUgc2V0SGlkZXNFbXB0eUNlbGxzOllFU107CisgICAg
ICAgIGlmIChbQCJmaXhlZCIgaXNFcXVhbFRvU3RyaW5nOnRhYmxlTGF5b3V0XSkgW3RhYmxlIHNl
dExheW91dEFsZ29yaXRobTpOU1RleHRUYWJsZUZpeGVkTGF5b3V0QWxnb3JpdGhtXTsKKyAgICB9
CisgICAgW190ZXh0VGFibGVzIGFkZE9iamVjdDp0YWJsZV07CisgICAgW190ZXh0VGFibGVTcGFj
aW5ncyBhZGRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6Y2VsbFNwYWNpbmdWYWxd
XTsKKyAgICBbX3RleHRUYWJsZVBhZGRpbmdzIGFkZE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0
aERvdWJsZTpjZWxsUGFkZGluZ1ZhbF1dOworICAgIFtfdGV4dFRhYmxlUm93cyBhZGRPYmplY3Q6
W05TTnVtYmVyIG51bWJlcldpdGhJbnRlZ2VyOjBdXTsKKyAgICBbX3RleHRUYWJsZVJvd0FycmF5
cyBhZGRPYmplY3Q6W05TTXV0YWJsZUFycmF5IGFycmF5XV07CisgICAgW3RhYmxlIHJlbGVhc2Vd
OworfQorCistICh2b2lkKV9hZGRUYWJsZUNlbGxGb3JFbGVtZW50OihET01FbGVtZW50ICopdGFi
bGVDZWxsRWxlbWVudAoreworICAgIE5TVGV4dFRhYmxlICp0YWJsZSA9IFtfdGV4dFRhYmxlcyBs
YXN0T2JqZWN0XTsKKyAgICBOU0ludGVnZXIgcm93TnVtYmVyID0gW1tfdGV4dFRhYmxlUm93cyBs
YXN0T2JqZWN0XSBpbnRlZ2VyVmFsdWVdLCBjb2x1bW5OdW1iZXIgPSAwLCByb3dTcGFuID0gMSwg
Y29sU3BhbiA9IDE7CisgICAgTlNNdXRhYmxlQXJyYXkgKnJvd0FycmF5ID0gW190ZXh0VGFibGVS
b3dBcnJheXMgbGFzdE9iamVjdF07CisgICAgTlNVSW50ZWdlciBpLCBjb3VudCA9IFtyb3dBcnJh
eSBjb3VudF07CisgICAgTlNDb2xvciAqY29sb3IgPSAoW190ZXh0VGFibGVSb3dCYWNrZ3JvdW5k
Q29sb3JzIGNvdW50XSA+IDApID8gW190ZXh0VGFibGVSb3dCYWNrZ3JvdW5kQ29sb3JzIGxhc3RP
YmplY3RdIDogbmlsOworICAgIE5TVGV4dFRhYmxlQmxvY2sgKmJsb2NrLCAqcHJldmlvdXNCbG9j
azsKKyAgICBDR0Zsb2F0IGNlbGxTcGFjaW5nVmFsID0gW1tfdGV4dFRhYmxlU3BhY2luZ3MgbGFz
dE9iamVjdF0gZG91YmxlVmFsdWVdOworICAgIGlmIChbY29sb3IgaXNFcXVhbDpbTlNDb2xvciBj
bGVhckNvbG9yXV0pIGNvbG9yID0gbmlsOworICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsr
KSB7CisgICAgICAgIHByZXZpb3VzQmxvY2sgPSBbcm93QXJyYXkgb2JqZWN0QXRJbmRleDppXTsK
KyAgICAgICAgaWYgKGNvbHVtbk51bWJlciA+PSBbcHJldmlvdXNCbG9jayBzdGFydGluZ0NvbHVt
bl0gJiYgY29sdW1uTnVtYmVyIDwgW3ByZXZpb3VzQmxvY2sgc3RhcnRpbmdDb2x1bW5dICsgW3By
ZXZpb3VzQmxvY2sgY29sdW1uU3Bhbl0pIGNvbHVtbk51bWJlciA9IFtwcmV2aW91c0Jsb2NrIHN0
YXJ0aW5nQ29sdW1uXSArIFtwcmV2aW91c0Jsb2NrIGNvbHVtblNwYW5dOworICAgIH0KKyAgICBp
ZiAodGFibGVDZWxsRWxlbWVudCkgeworICAgICAgICBpZiAoW3RhYmxlQ2VsbEVsZW1lbnQgcmVz
cG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihyb3dTcGFuKV0pIHsKKyAgICAgICAgICAgIHJvd1Nw
YW4gPSBbKERPTUhUTUxUYWJsZUNlbGxFbGVtZW50ICopdGFibGVDZWxsRWxlbWVudCByb3dTcGFu
XTsKKyAgICAgICAgICAgIGlmIChyb3dTcGFuIDwgMSkgcm93U3BhbiA9IDE7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKFt0YWJsZUNlbGxFbGVtZW50IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0
b3IoY29sU3BhbildKSB7CisgICAgICAgICAgICBjb2xTcGFuID0gWyhET01IVE1MVGFibGVDZWxs
RWxlbWVudCAqKXRhYmxlQ2VsbEVsZW1lbnQgY29sU3Bhbl07CisgICAgICAgICAgICBpZiAoY29s
U3BhbiA8IDEpIGNvbFNwYW4gPSAxOworICAgICAgICB9CisgICAgfQorICAgIGJsb2NrID0gW1tO
U1RleHRUYWJsZUJsb2NrIGFsbG9jXSBpbml0V2l0aFRhYmxlOnRhYmxlIHN0YXJ0aW5nUm93OnJv
d051bWJlciByb3dTcGFuOnJvd1NwYW4gc3RhcnRpbmdDb2x1bW46Y29sdW1uTnVtYmVyIGNvbHVt
blNwYW46Y29sU3Bhbl07CisgICAgaWYgKHRhYmxlQ2VsbEVsZW1lbnQpIHsKKyAgICAgICAgTlNT
dHJpbmcgKnZlcnRpY2FsQWxpZ24gPSBbc2VsZiBfc3RyaW5nRm9yTm9kZTp0YWJsZUNlbGxFbGVt
ZW50IHByb3BlcnR5OkAidmVydGljYWwtYWxpZ24iXTsKKyAgICAgICAgW3NlbGYgX2ZpbGxJbkJs
b2NrOmJsb2NrIGZvckVsZW1lbnQ6dGFibGVDZWxsRWxlbWVudCBiYWNrZ3JvdW5kQ29sb3I6Y29s
b3IgZXh0cmFNYXJnaW46Y2VsbFNwYWNpbmdWYWwgLyAyLjAgZXh0cmFQYWRkaW5nOjAuMCBpc1Rh
YmxlOk5PXTsKKyAgICAgICAgaWYgKFtAIm1pZGRsZSIgaXNFcXVhbFRvU3RyaW5nOnZlcnRpY2Fs
QWxpZ25dKSBbYmxvY2sgc2V0VmVydGljYWxBbGlnbm1lbnQ6TlNUZXh0QmxvY2tNaWRkbGVBbGln
bm1lbnRdOworICAgICAgICBlbHNlIGlmIChbQCJib3R0b20iIGlzRXF1YWxUb1N0cmluZzp2ZXJ0
aWNhbEFsaWduXSkgW2Jsb2NrIHNldFZlcnRpY2FsQWxpZ25tZW50Ok5TVGV4dEJsb2NrQm90dG9t
QWxpZ25tZW50XTsKKyAgICAgICAgZWxzZSBpZiAoW0AiYmFzZWxpbmUiIGlzRXF1YWxUb1N0cmlu
Zzp2ZXJ0aWNhbEFsaWduXSkgW2Jsb2NrIHNldFZlcnRpY2FsQWxpZ25tZW50Ok5TVGV4dEJsb2Nr
QmFzZWxpbmVBbGlnbm1lbnRdOworICAgICAgICBlbHNlIGlmIChbQCJ0b3AiIGlzRXF1YWxUb1N0
cmluZzp2ZXJ0aWNhbEFsaWduXSkgW2Jsb2NrIHNldFZlcnRpY2FsQWxpZ25tZW50Ok5TVGV4dEJs
b2NrVG9wQWxpZ25tZW50XTsKKyAgICB9CisgICAgW190ZXh0QmxvY2tzIGFkZE9iamVjdDpibG9j
a107CisgICAgW3Jvd0FycmF5IGFkZE9iamVjdDpibG9ja107CisgICAgW3Jvd0FycmF5IHNvcnRV
c2luZ0Z1bmN0aW9uOl9jb2xDb21wYXJlIGNvbnRleHQ6TlVMTF07CisgICAgW2Jsb2NrIHJlbGVh
c2VdOworfQorCistIChCT09MKV9wcm9jZXNzRWxlbWVudDooRE9NRWxlbWVudCAqKWVsZW1lbnQg
dGFnOihOU1N0cmluZyAqKXRhZyBkaXNwbGF5OihOU1N0cmluZyAqKWRpc3BsYXlWYWwgZGVwdGg6
KE5TSW50ZWdlcilkZXB0aAoreworICAgIEJPT0wgcmV0dmFsID0gWUVTLCBpc0Jsb2NrTGV2ZWwg
PSBbc2VsZiBfZWxlbWVudElzQmxvY2tMZXZlbDplbGVtZW50XTsKKyAgICBpZiAoaXNCbG9ja0xl
dmVsKSB7CisgICAgICAgIFtfd3JpdGluZ0RpcmVjdGlvbkFycmF5IHJlbW92ZUFsbE9iamVjdHNd
OworICAgIH0gZWxzZSB7CisgICAgICAgIE5TU3RyaW5nICpiaWRpID0gW3NlbGYgX3N0cmluZ0Zv
ck5vZGU6ZWxlbWVudCBwcm9wZXJ0eTpAInVuaWNvZGUtYmlkaSJdOworICAgICAgICBpZiAoYmlk
aSAmJiBbYmlkaSBpc0VxdWFsVG9TdHJpbmc6QCJlbWJlZCJdKSB7CisgICAgICAgICAgICBOU1VJ
bnRlZ2VyIHZhbCA9IE5TVGV4dFdyaXRpbmdEaXJlY3Rpb25FbWJlZGRpbmc7CisgICAgICAgICAg
ICBOU1N0cmluZyAqZGlyZWN0aW9uID0gW3NlbGYgX3N0cmluZ0Zvck5vZGU6ZWxlbWVudCBwcm9w
ZXJ0eTpAImRpcmVjdGlvbiJdOworICAgICAgICAgICAgaWYgKFtkaXJlY3Rpb24gaXNFcXVhbFRv
U3RyaW5nOkAicnRsIl0pIHZhbCB8PSBOU1dyaXRpbmdEaXJlY3Rpb25SaWdodFRvTGVmdDsKKyAg
ICAgICAgICAgIFtfd3JpdGluZ0RpcmVjdGlvbkFycmF5IGFkZE9iamVjdDpbTlNOdW1iZXIgbnVt
YmVyV2l0aFVuc2lnbmVkSW50ZWdlcjp2YWxdXTsKKyAgICAgICAgfSBlbHNlIGlmIChiaWRpICYm
IFtiaWRpIGlzRXF1YWxUb1N0cmluZzpAImJpZGktb3ZlcnJpZGUiXSkgeworICAgICAgICAgICAg
TlNVSW50ZWdlciB2YWwgPSBOU1RleHRXcml0aW5nRGlyZWN0aW9uT3ZlcnJpZGU7CisgICAgICAg
ICAgICBOU1N0cmluZyAqZGlyZWN0aW9uID0gW3NlbGYgX3N0cmluZ0Zvck5vZGU6ZWxlbWVudCBw
cm9wZXJ0eTpAImRpcmVjdGlvbiJdOworICAgICAgICAgICAgaWYgKFtkaXJlY3Rpb24gaXNFcXVh
bFRvU3RyaW5nOkAicnRsIl0pIHZhbCB8PSBOU1dyaXRpbmdEaXJlY3Rpb25SaWdodFRvTGVmdDsK
KyAgICAgICAgICAgIFtfd3JpdGluZ0RpcmVjdGlvbkFycmF5IGFkZE9iamVjdDpbTlNOdW1iZXIg
bnVtYmVyV2l0aFVuc2lnbmVkSW50ZWdlcjp2YWxdXTsKKyAgICAgICAgfQorICAgIH0KKyAgICBp
ZiAoW0AidGFibGUiIGlzRXF1YWxUb1N0cmluZzpkaXNwbGF5VmFsXSB8fCAoW190ZXh0VGFibGVz
IGNvdW50XSA9PSAwICYmIFtAInRhYmxlLXJvdy1ncm91cCIgaXNFcXVhbFRvU3RyaW5nOmRpc3Bs
YXlWYWxdKSkgeworICAgICAgICBET01FbGVtZW50ICp0YWJsZUVsZW1lbnQgPSBlbGVtZW50Owor
ICAgICAgICBpZiAoW0AidGFibGUtcm93LWdyb3VwIiBpc0VxdWFsVG9TdHJpbmc6ZGlzcGxheVZh
bF0pIHsKKyAgICAgICAgICAgIC8vIElmIHdlIGFyZSBzdGFydGluZyBpbiBtZWRpYXMgcmVzLCB0
aGUgZmlyc3QgdGhpbmcgd2Ugc2VlIG1heSBiZSB0aGUgdGJvZHksIHNvIGdvIHVwIHRvIHRoZSB0
YWJsZQorICAgICAgICAgICAgdGFibGVFbGVtZW50ID0gW3NlbGYgX2Jsb2NrTGV2ZWxFbGVtZW50
Rm9yTm9kZTpbZWxlbWVudCBwYXJlbnROb2RlXV07CisgICAgICAgICAgICBpZiAoIVtAInRhYmxl
IiBpc0VxdWFsVG9TdHJpbmc6W3NlbGYgX3N0cmluZ0Zvck5vZGU6dGFibGVFbGVtZW50IHByb3Bl
cnR5OkAiZGlzcGxheSJdXSkgdGFibGVFbGVtZW50ID0gZWxlbWVudDsKKyAgICAgICAgfQorICAg
ICAgICB3aGlsZSAoW190ZXh0VGFibGVzIGNvdW50XSA+IFtfdGV4dEJsb2NrcyBjb3VudF0pIHsK
KyAgICAgICAgICAgIFtzZWxmIF9hZGRUYWJsZUNlbGxGb3JFbGVtZW50Om5pbF07CisgICAgICAg
IH0KKyAgICAgICAgW3NlbGYgX2FkZFRhYmxlRm9yRWxlbWVudDp0YWJsZUVsZW1lbnRdOworICAg
IH0gZWxzZSBpZiAoW0AidGFibGUtZm9vdGVyLWdyb3VwIiBpc0VxdWFsVG9TdHJpbmc6ZGlzcGxh
eVZhbF0gJiYgW190ZXh0VGFibGVzIGNvdW50XSA+IDApIHsKKyAgICAgICAgW190ZXh0VGFibGVG
b290ZXJzIHNldE9iamVjdDplbGVtZW50IGZvcktleTpbTlNWYWx1ZSB2YWx1ZVdpdGhOb25yZXRh
aW5lZE9iamVjdDpbX3RleHRUYWJsZXMgbGFzdE9iamVjdF1dXTsKKyAgICAgICAgcmV0dmFsID0g
Tk87CisgICAgfSBlbHNlIGlmIChbQCJ0YWJsZS1yb3ciIGlzRXF1YWxUb1N0cmluZzpkaXNwbGF5
VmFsXSAmJiBbX3RleHRUYWJsZXMgY291bnRdID4gMCkgeworICAgICAgICBOU0NvbG9yICpjb2xv
ciA9IFtzZWxmIF9jb2xvckZvck5vZGU6ZWxlbWVudCBwcm9wZXJ0eTpAImJhY2tncm91bmQtY29s
b3IiXTsKKyAgICAgICAgaWYgKCFjb2xvcikgY29sb3IgPSBbTlNDb2xvciBjbGVhckNvbG9yXTsK
KyAgICAgICAgW190ZXh0VGFibGVSb3dCYWNrZ3JvdW5kQ29sb3JzIGFkZE9iamVjdDpjb2xvcl07
CisgICAgfSBlbHNlIGlmIChbQCJ0YWJsZS1jZWxsIiBpc0VxdWFsVG9TdHJpbmc6ZGlzcGxheVZh
bF0pIHsKKyAgICAgICAgd2hpbGUgKFtfdGV4dFRhYmxlcyBjb3VudF0gPCBbX3RleHRCbG9ja3Mg
Y291bnRdICsgMSkgeworICAgICAgICAgICAgW3NlbGYgX2FkZFRhYmxlRm9yRWxlbWVudDpuaWxd
OworICAgICAgICB9CisgICAgICAgIFtzZWxmIF9hZGRUYWJsZUNlbGxGb3JFbGVtZW50OmVsZW1l
bnRdOworICAgIH0gZWxzZSBpZiAoW0AiSU1HIiBpc0VxdWFsVG9TdHJpbmc6dGFnXSkgeworICAg
ICAgICBOU1N0cmluZyAqdXJsU3RyaW5nID0gW2VsZW1lbnQgZ2V0QXR0cmlidXRlOkAic3JjIl07
CisgICAgICAgIGlmICh1cmxTdHJpbmcgJiYgW3VybFN0cmluZyBsZW5ndGhdID4gMCkgeworICAg
ICAgICAgICAgTlNVUkwgKnVybCA9IGNvcmUoW2VsZW1lbnQgb3duZXJEb2N1bWVudF0pLT5jb21w
bGV0ZVVSTChzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFjZXModXJsU3RyaW5nKSk7Cisg
ICAgICAgICAgICBpZiAoIXVybCkgdXJsID0gW05TVVJMIF93ZWJfVVJMV2l0aFN0cmluZzpbdXJs
U3RyaW5nIHN0cmluZ0J5VHJpbW1pbmdDaGFyYWN0ZXJzSW5TZXQ6W05TQ2hhcmFjdGVyU2V0IHdo
aXRlc3BhY2VBbmROZXdsaW5lQ2hhcmFjdGVyU2V0XV0gcmVsYXRpdmVUb1VSTDpfYmFzZVVSTF07
CisgICAgICAgICAgICBpZiAodXJsKSBbc2VsZiBfYWRkQXR0YWNobWVudEZvckVsZW1lbnQ6ZWxl
bWVudCBVUkw6dXJsIG5lZWRzUGFyYWdyYXBoOmlzQmxvY2tMZXZlbCB1c2VQbGFjZWhvbGRlcjpZ
RVNdOworICAgICAgICB9CisgICAgICAgIHJldHZhbCA9IE5POworICAgIH0gZWxzZSBpZiAoW0Ai
T0JKRUNUIiBpc0VxdWFsVG9TdHJpbmc6dGFnXSkgeworICAgICAgICBOU1N0cmluZyAqYmFzZVN0
cmluZyA9IFtlbGVtZW50IGdldEF0dHJpYnV0ZTpAImNvZGViYXNlIl0sICp1cmxTdHJpbmcgPSBb
ZWxlbWVudCBnZXRBdHRyaWJ1dGU6QCJkYXRhIl0sICpkZWNsYXJlU3RyaW5nID0gW2VsZW1lbnQg
Z2V0QXR0cmlidXRlOkAiZGVjbGFyZSJdOworICAgICAgICBpZiAodXJsU3RyaW5nICYmIFt1cmxT
dHJpbmcgbGVuZ3RoXSA+IDAgJiYgIVtAInRydWUiIGlzRXF1YWxUb1N0cmluZzpkZWNsYXJlU3Ry
aW5nXSkgeworICAgICAgICAgICAgTlNVUkwgKmJhc2VVUkwgPSBuaWwsICp1cmwgPSBuaWw7Cisg
ICAgICAgICAgICBpZiAoYmFzZVN0cmluZyAmJiBbYmFzZVN0cmluZyBsZW5ndGhdID4gMCkgewor
ICAgICAgICAgICAgICAgIGJhc2VVUkwgPSBjb3JlKFtlbGVtZW50IG93bmVyRG9jdW1lbnRdKS0+
Y29tcGxldGVVUkwoc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3BhY2VzKGJhc2VTdHJpbmcp
KTsKKyAgICAgICAgICAgICAgICBpZiAoIWJhc2VVUkwpIGJhc2VVUkwgPSBbTlNVUkwgX3dlYl9V
UkxXaXRoU3RyaW5nOltiYXNlU3RyaW5nIHN0cmluZ0J5VHJpbW1pbmdDaGFyYWN0ZXJzSW5TZXQ6
W05TQ2hhcmFjdGVyU2V0IHdoaXRlc3BhY2VBbmROZXdsaW5lQ2hhcmFjdGVyU2V0XV0gcmVsYXRp
dmVUb1VSTDpfYmFzZVVSTF07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYmFzZVVS
TCkgdXJsID0gW05TVVJMIF93ZWJfVVJMV2l0aFN0cmluZzpbdXJsU3RyaW5nIHN0cmluZ0J5VHJp
bW1pbmdDaGFyYWN0ZXJzSW5TZXQ6W05TQ2hhcmFjdGVyU2V0IHdoaXRlc3BhY2VBbmROZXdsaW5l
Q2hhcmFjdGVyU2V0XV0gcmVsYXRpdmVUb1VSTDpiYXNlVVJMXTsKKyAgICAgICAgICAgIGlmICgh
dXJsKSB1cmwgPWNvcmUoW2VsZW1lbnQgb3duZXJEb2N1bWVudF0pLT5jb21wbGV0ZVVSTChzdHJp
cExlYWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFjZXModXJsU3RyaW5nKSk7CisgICAgICAgICAgICBp
ZiAoIXVybCkgdXJsID0gW05TVVJMIF93ZWJfVVJMV2l0aFN0cmluZzpbdXJsU3RyaW5nIHN0cmlu
Z0J5VHJpbW1pbmdDaGFyYWN0ZXJzSW5TZXQ6W05TQ2hhcmFjdGVyU2V0IHdoaXRlc3BhY2VBbmRO
ZXdsaW5lQ2hhcmFjdGVyU2V0XV0gcmVsYXRpdmVUb1VSTDpfYmFzZVVSTF07CisgICAgICAgICAg
ICBpZiAodXJsKSByZXR2YWwgPSAhW3NlbGYgX2FkZEF0dGFjaG1lbnRGb3JFbGVtZW50OmVsZW1l
bnQgVVJMOnVybCBuZWVkc1BhcmFncmFwaDppc0Jsb2NrTGV2ZWwgdXNlUGxhY2Vob2xkZXI6Tk9d
OworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChbQCJGUkFNRSIgaXNFcXVhbFRvU3RyaW5nOnRh
Z10pIHsKKyAgICAgICAgaWYgKFtlbGVtZW50IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Io
Y29udGVudERvY3VtZW50KV0pIHsKKyAgICAgICAgICAgIERPTURvY3VtZW50ICpjb250ZW50RG9j
dW1lbnQgPSBbKERPTUhUTUxGcmFtZUVsZW1lbnQgKillbGVtZW50IGNvbnRlbnREb2N1bWVudF07
CisgICAgICAgICAgICBpZiAoY29udGVudERvY3VtZW50KSBbc2VsZiBfdHJhdmVyc2VOb2RlOmNv
bnRlbnREb2N1bWVudCBkZXB0aDpkZXB0aCArIDEgZW1iZWRkZWQ6WUVTXTsKKyAgICAgICAgfQor
ICAgICAgICByZXR2YWwgPSBOTzsKKyAgICB9IGVsc2UgaWYgKFtAIklGUkFNRSIgaXNFcXVhbFRv
U3RyaW5nOnRhZ10pIHsKKyAgICAgICAgaWYgKFtlbGVtZW50IHJlc3BvbmRzVG9TZWxlY3RvcjpA
c2VsZWN0b3IoY29udGVudERvY3VtZW50KV0pIHsKKyAgICAgICAgICAgIERPTURvY3VtZW50ICpj
b250ZW50RG9jdW1lbnQgPSBbKERPTUhUTUxJRnJhbWVFbGVtZW50ICopZWxlbWVudCBjb250ZW50
RG9jdW1lbnRdOworICAgICAgICAgICAgaWYgKGNvbnRlbnREb2N1bWVudCkgeworICAgICAgICAg
ICAgICAgIFtzZWxmIF90cmF2ZXJzZU5vZGU6Y29udGVudERvY3VtZW50IGRlcHRoOmRlcHRoICsg
MSBlbWJlZGRlZDpZRVNdOworICAgICAgICAgICAgICAgIHJldHZhbCA9IE5POworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfSBlbHNlIGlmIChbQCJCUiIgaXNFcXVhbFRvU3RyaW5nOnRh
Z10pIHsKKyAgICAgICAgRE9NRWxlbWVudCAqYmxvY2tFbGVtZW50ID0gW3NlbGYgX2Jsb2NrTGV2
ZWxFbGVtZW50Rm9yTm9kZTpbZWxlbWVudCBwYXJlbnROb2RlXV07CisgICAgICAgIE5TU3RyaW5n
ICpicmVha0NsYXNzID0gW2VsZW1lbnQgZ2V0QXR0cmlidXRlOkAiY2xhc3MiXSwgKmJsb2NrVGFn
ID0gW2Jsb2NrRWxlbWVudCB0YWdOYW1lXTsKKyAgICAgICAgQk9PTCBpc0V4dHJhQnJlYWsgPSBb
QCJBcHBsZS1pbnRlcmNoYW5nZS1uZXdsaW5lIiBpc0VxdWFsVG9TdHJpbmc6YnJlYWtDbGFzc10s
IGJsb2NrRWxlbWVudElzUGFyYWdyYXBoID0gKFtAIlAiIGlzRXF1YWxUb1N0cmluZzpibG9ja1Rh
Z10gfHwgW0AiTEkiIGlzRXF1YWxUb1N0cmluZzpibG9ja1RhZ10gfHwgKFtibG9ja1RhZyBoYXNQ
cmVmaXg6QCJIIl0gJiYgMiA9PSBbYmxvY2tUYWcgbGVuZ3RoXSkpOworICAgICAgICBpZiAoaXNF
eHRyYUJyZWFrKSB7CisgICAgICAgICAgICBfZmxhZ3MuaGFzVHJhaWxpbmdOZXdsaW5lID0gWUVT
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGJsb2NrRWxlbWVudCAmJiBibG9j
a0VsZW1lbnRJc1BhcmFncmFwaCkgeworICAgICAgICAgICAgICAgIFtzZWxmIF9uZXdMaW5lRm9y
RWxlbWVudDplbGVtZW50XTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
W3NlbGYgX25ld1BhcmFncmFwaEZvckVsZW1lbnQ6ZWxlbWVudCB0YWc6dGFnIGFsbG93RW1wdHk6
WUVTIHN1cHByZXNzVHJhaWxpbmdTcGFjZTpOT107CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9IGVsc2UgaWYgKFtAIlVMIiBpc0VxdWFsVG9TdHJpbmc6dGFnXSkgeworICAgICAgICBO
U1RleHRMaXN0ICpsaXN0OworICAgICAgICBOU1N0cmluZyAqbGlzdFN0eWxlVHlwZSA9IFtzZWxm
IF9zdHJpbmdGb3JOb2RlOmVsZW1lbnQgcHJvcGVydHk6QCJsaXN0LXN0eWxlLXR5cGUiXTsKKyAg
ICAgICAgaWYgKCFsaXN0U3R5bGVUeXBlIHx8IFtsaXN0U3R5bGVUeXBlIGxlbmd0aF0gPT0gMCkg
bGlzdFN0eWxlVHlwZSA9IEAiZGlzYyI7CisgICAgICAgIGxpc3QgPSBbW05TVGV4dExpc3QgYWxs
b2NdIGluaXRXaXRoTWFya2VyRm9ybWF0OltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAieyVA
fSIsIGxpc3RTdHlsZVR5cGVdIG9wdGlvbnM6MF07CisgICAgICAgIFtfdGV4dExpc3RzIGFkZE9i
amVjdDpsaXN0XTsKKyAgICAgICAgW2xpc3QgcmVsZWFzZV07CisgICAgfSBlbHNlIGlmIChbQCJP
TCIgaXNFcXVhbFRvU3RyaW5nOnRhZ10pIHsKKyAgICAgICAgTlNUZXh0TGlzdCAqbGlzdDsKKyAg
ICAgICAgTlNTdHJpbmcgKmxpc3RTdHlsZVR5cGUgPSBbc2VsZiBfc3RyaW5nRm9yTm9kZTplbGVt
ZW50IHByb3BlcnR5OkAibGlzdC1zdHlsZS10eXBlIl07CisgICAgICAgIGlmICghbGlzdFN0eWxl
VHlwZSB8fCBbbGlzdFN0eWxlVHlwZSBsZW5ndGhdID09IDApIGxpc3RTdHlsZVR5cGUgPSBAImRl
Y2ltYWwiOworICAgICAgICBsaXN0ID0gW1tOU1RleHRMaXN0IGFsbG9jXSBpbml0V2l0aE1hcmtl
ckZvcm1hdDpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAInslQH0uIiwgbGlzdFN0eWxlVHlw
ZV0gb3B0aW9uczowXTsKKyAgICAgICAgaWYgKFtlbGVtZW50IHJlc3BvbmRzVG9TZWxlY3RvcjpA
c2VsZWN0b3Ioc3RhcnQpXSkgeworICAgICAgICAgICAgTlNJbnRlZ2VyIHN0YXJ0aW5nSXRlbU51
bWJlciA9IFsoRE9NSFRNTE9MaXN0RWxlbWVudCAqKWVsZW1lbnQgc3RhcnRdOworICAgICAgICAg
ICAgW2xpc3Qgc2V0U3RhcnRpbmdJdGVtTnVtYmVyOnN0YXJ0aW5nSXRlbU51bWJlcl07CisgICAg
ICAgIH0KKyAgICAgICAgW190ZXh0TGlzdHMgYWRkT2JqZWN0Omxpc3RdOworICAgICAgICBbbGlz
dCByZWxlYXNlXTsKKyAgICB9IGVsc2UgaWYgKFtAIlEiIGlzRXF1YWxUb1N0cmluZzp0YWddKSB7
CisgICAgICAgIFtzZWxmIF9hZGRRdW90ZUZvckVsZW1lbnQ6ZWxlbWVudCBvcGVuaW5nOllFUyBs
ZXZlbDpfcXVvdGVMZXZlbCsrXTsKKyAgICB9IGVsc2UgaWYgKFtAIklOUFVUIiBpc0VxdWFsVG9T
dHJpbmc6dGFnXSkgeworICAgICAgICBpZiAoW2VsZW1lbnQgcmVzcG9uZHNUb1NlbGVjdG9yOkBz
ZWxlY3Rvcih0eXBlKV0gJiYgW2VsZW1lbnQgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih2
YWx1ZSldICYmIFtAInRleHQiIGNvbXBhcmU6WyhET01IVE1MSW5wdXRFbGVtZW50ICopZWxlbWVu
dCB0eXBlXSBvcHRpb25zOk5TQ2FzZUluc2Vuc2l0aXZlU2VhcmNoXSA9PSBOU09yZGVyZWRTYW1l
KSB7CisgICAgICAgICAgICBOU1N0cmluZyAqdmFsdWUgPSBbKERPTUhUTUxJbnB1dEVsZW1lbnQg
KillbGVtZW50IHZhbHVlXTsKKyAgICAgICAgICAgIGlmICh2YWx1ZSAmJiBbdmFsdWUgbGVuZ3Ro
XSA+IDApIFtzZWxmIF9hZGRWYWx1ZTp2YWx1ZSBmb3JFbGVtZW50OmVsZW1lbnRdOworICAgICAg
ICB9CisgICAgfSBlbHNlIGlmIChbQCJURVhUQVJFQSIgaXNFcXVhbFRvU3RyaW5nOnRhZ10pIHsK
KyAgICAgICAgaWYgKFtlbGVtZW50IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IodmFsdWUp
XSkgeworICAgICAgICAgICAgTlNTdHJpbmcgKnZhbHVlID0gWyhET01IVE1MVGV4dEFyZWFFbGVt
ZW50ICopZWxlbWVudCB2YWx1ZV07CisgICAgICAgICAgICBpZiAodmFsdWUgJiYgW3ZhbHVlIGxl
bmd0aF0gPiAwKSBbc2VsZiBfYWRkVmFsdWU6dmFsdWUgZm9yRWxlbWVudDplbGVtZW50XTsKKyAg
ICAgICAgfQorICAgICAgICByZXR2YWwgPSBOTzsKKyAgICB9CisgICAgcmV0dXJuIHJldHZhbDsK
K30KKworLSAodm9pZClfYWRkTWFya2Vyc1RvTGlzdDooTlNUZXh0TGlzdCAqKWxpc3QgcmFuZ2U6
KE5TUmFuZ2UpcmFuZ2UKK3sKKyAgICBOU0ludGVnZXIgaXRlbU51bSA9IFtsaXN0IHN0YXJ0aW5n
SXRlbU51bWJlcl07CisgICAgTlNTdHJpbmcgKnN0cmluZyA9IFtfYXR0clN0ciBzdHJpbmddLCAq
c3RyaW5nVG9JbnNlcnQ7CisgICAgTlNEaWN0aW9uYXJ5ICphdHRyc1RvSW5zZXJ0ID0gbmlsOwor
ICAgIE5TRm9udCAqZm9udDsKKyAgICBOU1BhcmFncmFwaFN0eWxlICpwYXJhZ3JhcGhTdHlsZTsK
KyAgICBOU011dGFibGVQYXJhZ3JhcGhTdHlsZSAqbmV3U3R5bGU7CisgICAgTlNUZXh0VGFiICp0
YWIgPSBuaWwsICp0YWJUb1JlbW92ZTsKKyAgICBOU1JhbmdlIHBhcmFncmFwaFJhbmdlLCBzdHls
ZVJhbmdlOworICAgIE5TVUludGVnZXIgdGV4dExlbmd0aCA9IFtfYXR0clN0ciBsZW5ndGhdLCBs
aXN0SW5kZXgsIGlkeCwgaW5zZXJ0TGVuZ3RoLCBpLCBjb3VudDsKKyAgICBOU0FycmF5ICp0ZXh0
TGlzdHM7CisgICAgQ0dGbG9hdCBtYXJrZXJMb2NhdGlvbiwgbGlzdExvY2F0aW9uLCBwb2ludFNp
emU7CisgICAgCisgICAgaWYgKHJhbmdlLmxlbmd0aCA9PSAwIHx8IHJhbmdlLmxvY2F0aW9uID49
IHRleHRMZW5ndGgpIHJldHVybjsKKyAgICBpZiAoTlNNYXhSYW5nZShyYW5nZSkgPiB0ZXh0TGVu
Z3RoKSByYW5nZS5sZW5ndGggPSB0ZXh0TGVuZ3RoIC0gcmFuZ2UubG9jYXRpb247CisgICAgcGFy
YWdyYXBoU3R5bGUgPSBbX2F0dHJTdHIgYXR0cmlidXRlOk5TUGFyYWdyYXBoU3R5bGVBdHRyaWJ1
dGVOYW1lIGF0SW5kZXg6cmFuZ2UubG9jYXRpb24gZWZmZWN0aXZlUmFuZ2U6TlVMTF07CisgICAg
aWYgKHBhcmFncmFwaFN0eWxlKSB7CisgICAgICAgIHRleHRMaXN0cyA9IFtwYXJhZ3JhcGhTdHls
ZSB0ZXh0TGlzdHNdOworICAgICAgICBsaXN0SW5kZXggPSBbdGV4dExpc3RzIGluZGV4T2ZPYmpl
Y3Q6bGlzdF07CisgICAgICAgIGlmICh0ZXh0TGlzdHMgJiYgbGlzdEluZGV4ICE9IE5TTm90Rm91
bmQpIHsKKyAgICAgICAgICAgIGZvciAoaWR4ID0gcmFuZ2UubG9jYXRpb247IGlkeCA8IE5TTWF4
UmFuZ2UocmFuZ2UpOykgeworICAgICAgICAgICAgICAgIHBhcmFncmFwaFJhbmdlID0gW3N0cmlu
ZyBwYXJhZ3JhcGhSYW5nZUZvclJhbmdlOk5TTWFrZVJhbmdlKGlkeCwgMCldOworICAgICAgICAg
ICAgICAgIHBhcmFncmFwaFN0eWxlID0gW19hdHRyU3RyIGF0dHJpYnV0ZTpOU1BhcmFncmFwaFN0
eWxlQXR0cmlidXRlTmFtZSBhdEluZGV4OmlkeCBlZmZlY3RpdmVSYW5nZTomc3R5bGVSYW5nZV07
CisgICAgICAgICAgICAgICAgZm9udCA9IFtfYXR0clN0ciBhdHRyaWJ1dGU6TlNGb250QXR0cmli
dXRlTmFtZSBhdEluZGV4OmlkeCBlZmZlY3RpdmVSYW5nZTpOVUxMXTsKKyAgICAgICAgICAgICAg
ICBwb2ludFNpemUgPSBmb250ID8gW2ZvbnQgcG9pbnRTaXplXSA6IDEyLjA7CisgICAgICAgICAg
ICAgICAgaWYgKFtbcGFyYWdyYXBoU3R5bGUgdGV4dExpc3RzXSBjb3VudF0gPT0gbGlzdEluZGV4
ICsgMSkgeworICAgICAgICAgICAgICAgICAgICBzdHJpbmdUb0luc2VydCA9IFtOU1N0cmluZyBz
dHJpbmdXaXRoRm9ybWF0OkAiXHQlQFx0IiwgW2xpc3QgbWFya2VyRm9ySXRlbU51bWJlcjppdGVt
TnVtKytdXTsKKyAgICAgICAgICAgICAgICAgICAgaW5zZXJ0TGVuZ3RoID0gW3N0cmluZ1RvSW5z
ZXJ0IGxlbmd0aF07CisgICAgICAgICAgICAgICAgICAgIGlmICghX2ZsYWdzLmlzSW5kZXhpbmcg
JiYgIV9mbGFncy5pc1Rlc3RpbmcpIGF0dHJzVG9JbnNlcnQgPSBbTlNUZXh0TGlzdCBfc3RhbmRh
cmRNYXJrZXJBdHRyaWJ1dGVzRm9yQXR0cmlidXRlczpbX2F0dHJTdHIgYXR0cmlidXRlc0F0SW5k
ZXg6cGFyYWdyYXBoUmFuZ2UubG9jYXRpb24gZWZmZWN0aXZlUmFuZ2U6TlVMTF1dOworICAgICAg
ICAgICAgICAgICAgICBbX2F0dHJTdHIgcmVwbGFjZUNoYXJhY3RlcnNJblJhbmdlOk5TTWFrZVJh
bmdlKHBhcmFncmFwaFJhbmdlLmxvY2F0aW9uLCAwKSB3aXRoU3RyaW5nOnN0cmluZ1RvSW5zZXJ0
XTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFfZmxhZ3MuaXNJbmRleGluZyAmJiAhX2ZsYWdz
LmlzVGVzdGluZykgW19hdHRyU3RyIHNldEF0dHJpYnV0ZXM6YXR0cnNUb0luc2VydCByYW5nZTpO
U01ha2VSYW5nZShwYXJhZ3JhcGhSYW5nZS5sb2NhdGlvbiwgaW5zZXJ0TGVuZ3RoKV07CisgICAg
ICAgICAgICAgICAgICAgIHJhbmdlLmxlbmd0aCArPSBpbnNlcnRMZW5ndGg7CisgICAgICAgICAg
ICAgICAgICAgIHBhcmFncmFwaFJhbmdlLmxlbmd0aCArPSBpbnNlcnRMZW5ndGg7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChwYXJhZ3JhcGhSYW5nZS5sb2NhdGlvbiA8IF9kb21SYW5nZVN0YXJ0
SW5kZXgpIF9kb21SYW5nZVN0YXJ0SW5kZXggKz0gaW5zZXJ0TGVuZ3RoOworICAgICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgbmV3U3R5bGUgPSBbcGFyYWdyYXBoU3R5bGUg
bXV0YWJsZUNvcHldOworICAgICAgICAgICAgICAgICAgICBsaXN0TG9jYXRpb24gPSAobGlzdElu
ZGV4ICsgMSkgKiAzNi4wOworICAgICAgICAgICAgICAgICAgICBtYXJrZXJMb2NhdGlvbiA9IGxp
c3RMb2NhdGlvbiAtIDI1LjA7CisgICAgICAgICAgICAgICAgICAgIFtuZXdTdHlsZSBzZXRGaXJz
dExpbmVIZWFkSW5kZW50OjAuMF07CisgICAgICAgICAgICAgICAgICAgIFtuZXdTdHlsZSBzZXRI
ZWFkSW5kZW50Omxpc3RMb2NhdGlvbl07CisgICAgICAgICAgICAgICAgICAgIHdoaWxlICgoY291
bnQgPSBbW25ld1N0eWxlIHRhYlN0b3BzXSBjb3VudF0pID4gMCkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yIChpID0gMCwgdGFiVG9SZW1vdmUgPSBuaWw7ICF0YWJUb1JlbW92ZSAmJiBp
IDwgY291bnQ7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYiA9IFtbbmV3
U3R5bGUgdGFiU3RvcHNdIG9iamVjdEF0SW5kZXg6aV07CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKFt0YWIgbG9jYXRpb25dIDw9IGxpc3RMb2NhdGlvbikgdGFiVG9SZW1vdmUgPSB0
YWI7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAodGFiVG9SZW1vdmUpIFtuZXdTdHlsZSByZW1vdmVUYWJTdG9wOnRhYl07IGVsc2UgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgdGFiID0gW1tOU1Rl
eHRUYWIgYWxsb2NdIGluaXRXaXRoVHlwZTpOU0xlZnRUYWJTdG9wVHlwZSBsb2NhdGlvbjptYXJr
ZXJMb2NhdGlvbl07CisgICAgICAgICAgICAgICAgICAgIFtuZXdTdHlsZSBhZGRUYWJTdG9wOnRh
Yl07CisgICAgICAgICAgICAgICAgICAgIFt0YWIgcmVsZWFzZV07CisgICAgICAgICAgICAgICAg
ICAgIHRhYiA9IFtbTlNUZXh0VGFiIGFsbG9jXSBpbml0V2l0aFRleHRBbGlnbm1lbnQ6TlNOYXR1
cmFsVGV4dEFsaWdubWVudCBsb2NhdGlvbjpsaXN0TG9jYXRpb24gb3B0aW9uczpuaWxdOworICAg
ICAgICAgICAgICAgICAgICBbbmV3U3R5bGUgYWRkVGFiU3RvcDp0YWJdOworICAgICAgICAgICAg
ICAgICAgICBbdGFiIHJlbGVhc2VdOworICAgICAgICAgICAgICAgICAgICBpZiAoIV9mbGFncy5p
c0luZGV4aW5nICYmICFfZmxhZ3MuaXNUZXN0aW5nKSBbX2F0dHJTdHIgYWRkQXR0cmlidXRlOk5T
UGFyYWdyYXBoU3R5bGVBdHRyaWJ1dGVOYW1lIHZhbHVlOm5ld1N0eWxlIHJhbmdlOnBhcmFncmFw
aFJhbmdlXTsKKyAgICAgICAgICAgICAgICAgICAgW25ld1N0eWxlIHJlbGVhc2VdOworICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWR4ID0gTlNNYXhSYW5nZShwYXJh
Z3JhcGhSYW5nZSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgLy8gc2tpcCBhbnkgZGVlcGVyLW5lc3RlZCBsaXN0cworICAgICAgICAgICAgICAgICAgICBp
ZHggPSBOU01heFJhbmdlKHN0eWxlUmFuZ2UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworLSAodm9pZClfZXhpdEVsZW1lbnQ6KERPTUVs
ZW1lbnQgKillbGVtZW50IHRhZzooTlNTdHJpbmcgKil0YWcgZGlzcGxheTooTlNTdHJpbmcgKilk
aXNwbGF5VmFsIGRlcHRoOihOU0ludGVnZXIpZGVwdGggc3RhcnRJbmRleDooTlNVSW50ZWdlcilz
dGFydEluZGV4Cit7CisgICAgTlNSYW5nZSByYW5nZSA9IE5TTWFrZVJhbmdlKHN0YXJ0SW5kZXgs
IFtfYXR0clN0ciBsZW5ndGhdIC0gc3RhcnRJbmRleCk7CisgICAgaWYgKHJhbmdlLmxlbmd0aCA+
IDAgJiYgW0AiQSIgaXNFcXVhbFRvU3RyaW5nOnRhZ10pIHsKKyAgICAgICAgTlNTdHJpbmcgKnVy
bFN0cmluZyA9IFtlbGVtZW50IGdldEF0dHJpYnV0ZTpAImhyZWYiXSwgKnN0cmlwcGVkU3RyaW5n
ID0gW3VybFN0cmluZyBzdHJpbmdCeVRyaW1taW5nQ2hhcmFjdGVyc0luU2V0OltOU0NoYXJhY3Rl
clNldCB3aGl0ZXNwYWNlQW5kTmV3bGluZUNoYXJhY3RlclNldF1dOworICAgICAgICBpZiAodXJs
U3RyaW5nICYmIFt1cmxTdHJpbmcgbGVuZ3RoXSA+IDAgJiYgc3RyaXBwZWRTdHJpbmcgJiYgW3N0
cmlwcGVkU3RyaW5nIGxlbmd0aF0gPiAwICYmICFbc3RyaXBwZWRTdHJpbmcgaGFzUHJlZml4OkAi
IyJdKSB7CisgICAgICAgICAgICBOU1VSTCAqdXJsID0gY29yZShbZWxlbWVudCBvd25lckRvY3Vt
ZW50XSktPmNvbXBsZXRlVVJMKHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRNTFNwYWNlcyh1cmxT
dHJpbmcpKTsKKyAgICAgICAgICAgIGlmICghdXJsKSB1cmwgPSBjb3JlKFtlbGVtZW50IG93bmVy
RG9jdW1lbnRdKS0+Y29tcGxldGVVUkwoc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3BhY2Vz
KHN0cmlwcGVkU3RyaW5nKSk7CisgICAgICAgICAgICBpZiAoIXVybCkgdXJsID0gW05TVVJMIF93
ZWJfVVJMV2l0aFN0cmluZzpzdHJpcHBlZFN0cmluZyByZWxhdGl2ZVRvVVJMOl9iYXNlVVJMXTsK
KyAgICAgICAgICAgIGlmICghX2ZsYWdzLmlzSW5kZXhpbmcgJiYgIV9mbGFncy5pc1Rlc3Rpbmcp
IFtfYXR0clN0ciBhZGRBdHRyaWJ1dGU6TlNMaW5rQXR0cmlidXRlTmFtZSB2YWx1ZTp1cmwgPyAo
aWQpdXJsIDogKGlkKXVybFN0cmluZyByYW5nZTpyYW5nZV07CisgICAgICAgIH0KKyAgICB9Cisg
ICAgaWYgKCFfZmxhZ3MucmVhY2hlZEVuZCAmJiBbc2VsZiBfZWxlbWVudElzQmxvY2tMZXZlbDpl
bGVtZW50XSkgeworICAgICAgICBbX3dyaXRpbmdEaXJlY3Rpb25BcnJheSByZW1vdmVBbGxPYmpl
Y3RzXTsKKyAgICAgICAgaWYgKFtAInRhYmxlLWNlbGwiIGlzRXF1YWxUb1N0cmluZzpkaXNwbGF5
VmFsXSAmJiBbX3RleHRCbG9ja3MgY291bnRdID09IDApIHsKKyAgICAgICAgICAgIFtzZWxmIF9u
ZXdUYWJGb3JFbGVtZW50OmVsZW1lbnRdOworICAgICAgICB9IGVsc2UgaWYgKFtfdGV4dExpc3Rz
IGNvdW50XSA+IDAgJiYgW0AiYmxvY2siIGlzRXF1YWxUb1N0cmluZzpkaXNwbGF5VmFsXSAmJiAh
W0AiTEkiIGlzRXF1YWxUb1N0cmluZzp0YWddICYmICFbQCJVTCIgaXNFcXVhbFRvU3RyaW5nOnRh
Z10gJiYgIVtAIk9MIiBpc0VxdWFsVG9TdHJpbmc6dGFnXSkgeworICAgICAgICAgICAgW3NlbGYg
X25ld0xpbmVGb3JFbGVtZW50OmVsZW1lbnRdOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgW3NlbGYgX25ld1BhcmFncmFwaEZvckVsZW1lbnQ6ZWxlbWVudCB0YWc6dGFnIGFsbG93RW1w
dHk6KHJhbmdlLmxlbmd0aCA9PSAwKSBzdXBwcmVzc1RyYWlsaW5nU3BhY2U6WUVTXTsKKyAgICAg
ICAgfQorICAgIH0gZWxzZSBpZiAoW193cml0aW5nRGlyZWN0aW9uQXJyYXkgY291bnRdID4gMCkg
eworICAgICAgICBOU1N0cmluZyAqYmlkaSA9IFtzZWxmIF9zdHJpbmdGb3JOb2RlOmVsZW1lbnQg
cHJvcGVydHk6QCJ1bmljb2RlLWJpZGkiXTsKKyAgICAgICAgaWYgKGJpZGkgJiYgKFtiaWRpIGlz
RXF1YWxUb1N0cmluZzpAImVtYmVkIl0gfHwgW2JpZGkgaXNFcXVhbFRvU3RyaW5nOkAiYmlkaS1v
dmVycmlkZSJdKSkgeworICAgICAgICAgICAgW193cml0aW5nRGlyZWN0aW9uQXJyYXkgcmVtb3Zl
TGFzdE9iamVjdF07CisgICAgICAgIH0KKyAgICB9CisgICAgcmFuZ2UgPSBOU01ha2VSYW5nZShz
dGFydEluZGV4LCBbX2F0dHJTdHIgbGVuZ3RoXSAtIHN0YXJ0SW5kZXgpOworICAgIGlmIChbQCJ0
YWJsZSIgaXNFcXVhbFRvU3RyaW5nOmRpc3BsYXlWYWxdICYmIFtfdGV4dFRhYmxlcyBjb3VudF0g
PiAwKSB7CisgICAgICAgIE5TVmFsdWUgKmtleSA9IFtOU1ZhbHVlIHZhbHVlV2l0aE5vbnJldGFp
bmVkT2JqZWN0OltfdGV4dFRhYmxlcyBsYXN0T2JqZWN0XV07CisgICAgICAgIERPTU5vZGUgKmZv
b3RlciA9IFtfdGV4dFRhYmxlRm9vdGVycyBvYmplY3RGb3JLZXk6a2V5XTsKKyAgICAgICAgd2hp
bGUgKFtfdGV4dFRhYmxlcyBjb3VudF0gPCBbX3RleHRCbG9ja3MgY291bnRdICsgMSkgeworICAg
ICAgICAgICAgW190ZXh0QmxvY2tzIHJlbW92ZUxhc3RPYmplY3RdOworICAgICAgICB9CisgICAg
ICAgIGlmIChmb290ZXIpIHsKKyAgICAgICAgICAgIFtzZWxmIF90cmF2ZXJzZUZvb3Rlck5vZGU6
Zm9vdGVyIGRlcHRoOmRlcHRoICsgMV07CisgICAgICAgICAgICBbX3RleHRUYWJsZUZvb3RlcnMg
cmVtb3ZlT2JqZWN0Rm9yS2V5OmtleV07CisgICAgICAgIH0KKyAgICAgICAgW190ZXh0VGFibGVz
IHJlbW92ZUxhc3RPYmplY3RdOworICAgICAgICBbX3RleHRUYWJsZVNwYWNpbmdzIHJlbW92ZUxh
c3RPYmplY3RdOworICAgICAgICBbX3RleHRUYWJsZVBhZGRpbmdzIHJlbW92ZUxhc3RPYmplY3Rd
OworICAgICAgICBbX3RleHRUYWJsZVJvd3MgcmVtb3ZlTGFzdE9iamVjdF07CisgICAgICAgIFtf
dGV4dFRhYmxlUm93QXJyYXlzIHJlbW92ZUxhc3RPYmplY3RdOworICAgIH0gZWxzZSBpZiAoW0Ai
dGFibGUtcm93IiBpc0VxdWFsVG9TdHJpbmc6ZGlzcGxheVZhbF0gJiYgW190ZXh0VGFibGVzIGNv
dW50XSA+IDApIHsKKyAgICAgICAgTlNUZXh0VGFibGUgKnRhYmxlID0gW190ZXh0VGFibGVzIGxh
c3RPYmplY3RdOworICAgICAgICBOU1RleHRUYWJsZUJsb2NrICpibG9jazsKKyAgICAgICAgTlNN
dXRhYmxlQXJyYXkgKnJvd0FycmF5ID0gW190ZXh0VGFibGVSb3dBcnJheXMgbGFzdE9iamVjdF0s
ICpwcmV2aW91c1Jvd0FycmF5OworICAgICAgICBOU1VJbnRlZ2VyIGksIGNvdW50OworICAgICAg
ICBOU0ludGVnZXIgbnVtYmVyT2ZDb2x1bW5zID0gW3RhYmxlIG51bWJlck9mQ29sdW1uc107Cisg
ICAgICAgIE5TSW50ZWdlciBvcGVuQ29sdW1uOworICAgICAgICBOU0ludGVnZXIgcm93TnVtYmVy
ID0gW1tfdGV4dFRhYmxlUm93cyBsYXN0T2JqZWN0XSBpbnRlZ2VyVmFsdWVdOworICAgICAgICBk
byB7CisgICAgICAgICAgICByb3dOdW1iZXIrKzsKKyAgICAgICAgICAgIHByZXZpb3VzUm93QXJy
YXkgPSByb3dBcnJheTsKKyAgICAgICAgICAgIHJvd0FycmF5ID0gW05TTXV0YWJsZUFycmF5IGFy
cmF5XTsKKyAgICAgICAgICAgIGNvdW50ID0gW3ByZXZpb3VzUm93QXJyYXkgY291bnRdOworICAg
ICAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgICAgICAgICBi
bG9jayA9IFtwcmV2aW91c1Jvd0FycmF5IG9iamVjdEF0SW5kZXg6aV07CisgICAgICAgICAgICAg
ICAgaWYgKFtibG9jayBzdGFydGluZ0NvbHVtbl0gKyBbYmxvY2sgY29sdW1uU3Bhbl0gPiBudW1i
ZXJPZkNvbHVtbnMpIG51bWJlck9mQ29sdW1ucyA9IFtibG9jayBzdGFydGluZ0NvbHVtbl0gKyBb
YmxvY2sgY29sdW1uU3Bhbl07CisgICAgICAgICAgICAgICAgaWYgKFtibG9jayBzdGFydGluZ1Jv
d10gKyBbYmxvY2sgcm93U3Bhbl0gPiByb3dOdW1iZXIpIFtyb3dBcnJheSBhZGRPYmplY3Q6Ymxv
Y2tdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY291bnQgPSBbcm93QXJyYXkgY291bnRd
OworICAgICAgICAgICAgb3BlbkNvbHVtbiA9IDA7CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBp
IDwgY291bnQ7IGkrKykgeworICAgICAgICAgICAgICAgIGJsb2NrID0gW3Jvd0FycmF5IG9iamVj
dEF0SW5kZXg6aV07CisgICAgICAgICAgICAgICAgaWYgKG9wZW5Db2x1bW4gPj0gW2Jsb2NrIHN0
YXJ0aW5nQ29sdW1uXSAmJiBvcGVuQ29sdW1uIDwgW2Jsb2NrIHN0YXJ0aW5nQ29sdW1uXSArIFti
bG9jayBjb2x1bW5TcGFuXSkgb3BlbkNvbHVtbiA9IFtibG9jayBzdGFydGluZ0NvbHVtbl0gKyBb
YmxvY2sgY29sdW1uU3Bhbl07CisgICAgICAgICAgICB9CisgICAgICAgIH0gd2hpbGUgKG9wZW5D
b2x1bW4gPj0gbnVtYmVyT2ZDb2x1bW5zKTsKKyAgICAgICAgaWYgKChOU1VJbnRlZ2VyKW51bWJl
ck9mQ29sdW1ucyA+IFt0YWJsZSBudW1iZXJPZkNvbHVtbnNdKSBbdGFibGUgc2V0TnVtYmVyT2ZD
b2x1bW5zOm51bWJlck9mQ29sdW1uc107CisgICAgICAgIFtfdGV4dFRhYmxlUm93cyByZW1vdmVM
YXN0T2JqZWN0XTsKKyAgICAgICAgW190ZXh0VGFibGVSb3dzIGFkZE9iamVjdDpbTlNOdW1iZXIg
bnVtYmVyV2l0aEludGVnZXI6cm93TnVtYmVyXV07CisgICAgICAgIFtfdGV4dFRhYmxlUm93QXJy
YXlzIHJlbW92ZUxhc3RPYmplY3RdOworICAgICAgICBbX3RleHRUYWJsZVJvd0FycmF5cyBhZGRP
YmplY3Q6cm93QXJyYXldOworICAgICAgICBpZiAoW190ZXh0VGFibGVSb3dCYWNrZ3JvdW5kQ29s
b3JzIGNvdW50XSA+IDApIFtfdGV4dFRhYmxlUm93QmFja2dyb3VuZENvbG9ycyByZW1vdmVMYXN0
T2JqZWN0XTsKKyAgICB9IGVsc2UgaWYgKFtAInRhYmxlLWNlbGwiIGlzRXF1YWxUb1N0cmluZzpk
aXNwbGF5VmFsXSAmJiBbX3RleHRCbG9ja3MgY291bnRdID4gMCkgeworICAgICAgICB3aGlsZSAo
W190ZXh0VGFibGVzIGNvdW50XSA+IFtfdGV4dEJsb2NrcyBjb3VudF0pIHsKKyAgICAgICAgICAg
IFtfdGV4dFRhYmxlcyByZW1vdmVMYXN0T2JqZWN0XTsKKyAgICAgICAgICAgIFtfdGV4dFRhYmxl
U3BhY2luZ3MgcmVtb3ZlTGFzdE9iamVjdF07CisgICAgICAgICAgICBbX3RleHRUYWJsZVBhZGRp
bmdzIHJlbW92ZUxhc3RPYmplY3RdOworICAgICAgICAgICAgW190ZXh0VGFibGVSb3dzIHJlbW92
ZUxhc3RPYmplY3RdOworICAgICAgICAgICAgW190ZXh0VGFibGVSb3dBcnJheXMgcmVtb3ZlTGFz
dE9iamVjdF07CisgICAgICAgIH0KKyAgICAgICAgW190ZXh0QmxvY2tzIHJlbW92ZUxhc3RPYmpl
Y3RdOworICAgIH0gZWxzZSBpZiAoKFtAIlVMIiBpc0VxdWFsVG9TdHJpbmc6dGFnXSB8fCBbQCJP
TCIgaXNFcXVhbFRvU3RyaW5nOnRhZ10pICYmIFtfdGV4dExpc3RzIGNvdW50XSA+IDApIHsKKyAg
ICAgICAgTlNUZXh0TGlzdCAqbGlzdCA9IFtfdGV4dExpc3RzIGxhc3RPYmplY3RdOworICAgICAg
ICBbc2VsZiBfYWRkTWFya2Vyc1RvTGlzdDpsaXN0IHJhbmdlOnJhbmdlXTsKKyAgICAgICAgW190
ZXh0TGlzdHMgcmVtb3ZlTGFzdE9iamVjdF07CisgICAgfSBlbHNlIGlmIChbQCJRIiBpc0VxdWFs
VG9TdHJpbmc6dGFnXSkgeworICAgICAgICBbc2VsZiBfYWRkUXVvdGVGb3JFbGVtZW50OmVsZW1l
bnQgb3BlbmluZzpOTyBsZXZlbDotLV9xdW90ZUxldmVsXTsKKyAgICB9IGVsc2UgaWYgKFtAIlNQ
QU4iIGlzRXF1YWxUb1N0cmluZzp0YWddKSB7CisgICAgICAgIE5TU3RyaW5nICpjbGFzc05hbWUg
PSBbZWxlbWVudCBnZXRBdHRyaWJ1dGU6QCJjbGFzcyJdOworICAgICAgICBOU011dGFibGVTdHJp
bmcgKm11dGFibGVTdHJpbmc7CisgICAgICAgIE5TVUludGVnZXIgaSwgY291bnQgPSAwOworICAg
ICAgICB1bmljaGFyIGM7CisgICAgICAgIGlmIChbQCJBcHBsZS1jb252ZXJ0ZWQtc3BhY2UiIGlz
RXF1YWxUb1N0cmluZzpjbGFzc05hbWVdKSB7CisgICAgICAgICAgICBtdXRhYmxlU3RyaW5nID0g
W19hdHRyU3RyIG11dGFibGVTdHJpbmddOworICAgICAgICAgICAgZm9yIChpID0gcmFuZ2UubG9j
YXRpb247IGkgPCBOU01heFJhbmdlKHJhbmdlKTsgaSsrKSB7CisgICAgICAgICAgICAgICAgYyA9
IFttdXRhYmxlU3RyaW5nIGNoYXJhY3RlckF0SW5kZXg6aV07CisgICAgICAgICAgICAgICAgaWYg
KDB4YTAgPT0gYykgW211dGFibGVTdHJpbmcgcmVwbGFjZUNoYXJhY3RlcnNJblJhbmdlOk5TTWFr
ZVJhbmdlKGksIDEpIHdpdGhTdHJpbmc6QCIgIl07CisgICAgICAgICAgICB9CisgICAgICAgIH0g
ZWxzZSBpZiAoW0AiQXBwbGUtY29udmVydGVkLXRhYiIgaXNFcXVhbFRvU3RyaW5nOmNsYXNzTmFt
ZV0pIHsKKyAgICAgICAgICAgIG11dGFibGVTdHJpbmcgPSBbX2F0dHJTdHIgbXV0YWJsZVN0cmlu
Z107CisgICAgICAgICAgICBmb3IgKGkgPSByYW5nZS5sb2NhdGlvbjsgaSA8IE5TTWF4UmFuZ2Uo
cmFuZ2UpOyBpKyspIHsKKyAgICAgICAgICAgICAgICBOU1JhbmdlIHJhbmdlVG9SZXBsYWNlID0g
TlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7CisgICAgICAgICAgICAgICAgYyA9IFttdXRhYmxl
U3RyaW5nIGNoYXJhY3RlckF0SW5kZXg6aV07CisgICAgICAgICAgICAgICAgaWYgKCcgJyA9PSBj
IHx8IDB4YTAgPT0gYykgeworICAgICAgICAgICAgICAgICAgICBjb3VudCsrOworICAgICAgICAg
ICAgICAgICAgICBpZiAoY291bnQgPj0gNCB8fCBpICsgMSA+PSBOU01heFJhbmdlKHJhbmdlKSkg
cmFuZ2VUb1JlcGxhY2UgPSBOU01ha2VSYW5nZShpICsgMSAtIGNvdW50LCBjb3VudCk7CisgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50ID4gMCkg
cmFuZ2VUb1JlcGxhY2UgPSBOU01ha2VSYW5nZShpIC0gY291bnQsIGNvdW50KTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHJhbmdlVG9SZXBsYWNlLmxlbmd0aCA+IDAp
IHsKKyAgICAgICAgICAgICAgICAgICAgW211dGFibGVTdHJpbmcgcmVwbGFjZUNoYXJhY3RlcnNJ
blJhbmdlOnJhbmdlVG9SZXBsYWNlIHdpdGhTdHJpbmc6QCJcdCJdOworICAgICAgICAgICAgICAg
ICAgICByYW5nZS5sZW5ndGggLT0gKHJhbmdlVG9SZXBsYWNlLmxlbmd0aCAtIDEpOworICAgICAg
ICAgICAgICAgICAgICBpIC09IChyYW5nZVRvUmVwbGFjZS5sZW5ndGggLSAxKTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKE5TTWF4UmFuZ2UocmFuZ2VUb1JlcGxhY2UpIDw9IF9kb21SYW5nZVN0
YXJ0SW5kZXgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIF9kb21SYW5nZVN0YXJ0SW5kZXgg
LT0gKHJhbmdlVG9SZXBsYWNlLmxlbmd0aCAtIDEpOworICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKHJhbmdlVG9SZXBsYWNlLmxvY2F0aW9uIDwgX2RvbVJhbmdlU3RhcnRJbmRleCkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgX2RvbVJhbmdlU3RhcnRJbmRleCA9IHJhbmdlVG9SZXBs
YWNlLmxvY2F0aW9uOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IGNvdW50ID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9Cit9CisKKy0gKHZvaWQpX3Byb2Nlc3NUZXh0OihET01DaGFyYWN0ZXJEYXRhICopdGV4
dAoreworICAgIE5TU3RyaW5nICppbnN0ciA9IFt0ZXh0IGRhdGFdLCAqb3V0c3RyID0gaW5zdHIs
ICp3aGl0ZXNwYWNlVmFsLCAqdHJhbnNmb3JtVmFsOworICAgIE5TVUludGVnZXIgdGV4dExlbmd0
aCA9IFtfYXR0clN0ciBsZW5ndGhdLCBzdGFydE9mZnNldCA9IDAsIGVuZE9mZnNldCA9IFtpbnN0
ciBsZW5ndGhdOworICAgIHVuaWNoYXIgbGFzdENoYXIgPSAodGV4dExlbmd0aCA+IDApID8gW1tf
YXR0clN0ciBzdHJpbmddIGNoYXJhY3RlckF0SW5kZXg6dGV4dExlbmd0aCAtIDFdIDogJ1xuJzsK
KyAgICBCT09MIHdhc1NwYWNlID0gTk8sIHdhc0xlYWRpbmcgPSBZRVMsIHN1cHByZXNzTGVhZGlu
Z1NwYWNlID0gKChfZmxhZ3MuaXNTb2Z0ICYmIGxhc3RDaGFyID09ICcgJykgfHwgbGFzdENoYXIg
PT0gJ1xuJyB8fCBsYXN0Q2hhciA9PSAnXHInIHx8IGxhc3RDaGFyID09ICdcdCcgfHwgbGFzdENo
YXIgPT0gTlNQYXJhZ3JhcGhTZXBhcmF0b3JDaGFyYWN0ZXIgfHwgbGFzdENoYXIgPT0gTlNMaW5l
U2VwYXJhdG9yQ2hhcmFjdGVyIHx8IGxhc3RDaGFyID09IE5TRm9ybUZlZWRDaGFyYWN0ZXIgfHwg
bGFzdENoYXIgPT0gV2ViTmV4dExpbmVDaGFyYWN0ZXIpOworICAgIE5TUmFuZ2UgcmFuZ2VUb1Jl
cGxhY2UgPSBOU01ha2VSYW5nZSh0ZXh0TGVuZ3RoLCAwKTsKKyAgICBDRk11dGFibGVTdHJpbmdS
ZWYgbXV0c3RyID0gTlVMTDsKKyAgICB3aGl0ZXNwYWNlVmFsID0gW3NlbGYgX3N0cmluZ0Zvck5v
ZGU6dGV4dCBwcm9wZXJ0eTpAIndoaXRlLXNwYWNlIl07CisgICAgdHJhbnNmb3JtVmFsID0gW3Nl
bGYgX3N0cmluZ0Zvck5vZGU6dGV4dCBwcm9wZXJ0eTpAInRleHQtdHJhbnNmb3JtIl07CisgICAg
CisgICAgaWYgKF9kb21SYW5nZSkgeworICAgICAgICBpZiAodGV4dCA9PSBbX2RvbVJhbmdlIHN0
YXJ0Q29udGFpbmVyXSkgeworICAgICAgICAgICAgc3RhcnRPZmZzZXQgPSAoTlNVSW50ZWdlcilb
X2RvbVJhbmdlIHN0YXJ0T2Zmc2V0XTsKKyAgICAgICAgICAgIF9kb21SYW5nZVN0YXJ0SW5kZXgg
PSBbX2F0dHJTdHIgbGVuZ3RoXTsKKyAgICAgICAgICAgIF9mbGFncy5yZWFjaGVkU3RhcnQgPSBZ
RVM7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRleHQgPT0gW19kb21SYW5nZSBlbmRDb250YWlu
ZXJdKSB7CisgICAgICAgICAgICBlbmRPZmZzZXQgPSAoTlNVSW50ZWdlcilbX2RvbVJhbmdlIGVu
ZE9mZnNldF07CisgICAgICAgICAgICBfZmxhZ3MucmVhY2hlZEVuZCA9IFlFUzsKKyAgICAgICAg
fQorICAgICAgICBpZiAoKHN0YXJ0T2Zmc2V0ID4gMCB8fCBlbmRPZmZzZXQgPCBbaW5zdHIgbGVu
Z3RoXSkgJiYgZW5kT2Zmc2V0ID49IHN0YXJ0T2Zmc2V0KSB7CisgICAgICAgICAgICBpbnN0ciA9
IFtpbnN0ciBzdWJzdHJpbmdXaXRoUmFuZ2U6TlNNYWtlUmFuZ2Uoc3RhcnRPZmZzZXQsIGVuZE9m
ZnNldCAtIHN0YXJ0T2Zmc2V0KV07CisgICAgICAgICAgICBvdXRzdHIgPSBpbnN0cjsKKyAgICAg
ICAgfQorICAgIH0KKyAgICBpZiAoW3doaXRlc3BhY2VWYWwgaGFzUHJlZml4OkAicHJlIl0pIHsK
KyAgICAgICAgaWYgKHRleHRMZW5ndGggPiAwICYmIFtpbnN0ciBsZW5ndGhdID4gMCAmJiBfZmxh
Z3MuaXNTb2Z0KSB7CisgICAgICAgICAgICB1bmljaGFyIGMgPSBbaW5zdHIgY2hhcmFjdGVyQXRJ
bmRleDowXTsKKyAgICAgICAgICAgIGlmIChjID09ICdcbicgfHwgYyA9PSAnXHInIHx8IGMgPT0g
TlNQYXJhZ3JhcGhTZXBhcmF0b3JDaGFyYWN0ZXIgfHwgYyA9PSBOU0xpbmVTZXBhcmF0b3JDaGFy
YWN0ZXIgfHwgYyA9PSBOU0Zvcm1GZWVkQ2hhcmFjdGVyIHx8IGMgPT0gV2ViTmV4dExpbmVDaGFy
YWN0ZXIpIHJhbmdlVG9SZXBsYWNlID0gTlNNYWtlUmFuZ2UodGV4dExlbmd0aCAtIDEsIDEpOwor
ICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgQ0ZTdHJpbmdJbmxpbmVCdWZmZXIgaW5s
aW5lQnVmZmVyOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgVGV4dEJ1ZmZlclNpemUgPSAy
NTU7CisKKyAgICAgICAgdW5pY2hhciBidWZmZXJbVGV4dEJ1ZmZlclNpemUgKyAxXTsKKyAgICAg
ICAgTlNVSW50ZWdlciBpLCBjb3VudCA9IFtpbnN0ciBsZW5ndGhdLCBpZHggPSAwOworCisgICAg
ICAgIG11dHN0ciA9IENGU3RyaW5nQ3JlYXRlTXV0YWJsZShOVUxMLCAwKTsKKyAgICAgICAgQ0ZT
dHJpbmdJbml0SW5saW5lQnVmZmVyKChDRlN0cmluZ1JlZilpbnN0ciwgJmlubGluZUJ1ZmZlciwg
Q0ZSYW5nZU1ha2UoMCwgY291bnQpKTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBp
KyspIHsKKyAgICAgICAgICAgIHVuaWNoYXIgYyA9IENGU3RyaW5nR2V0Q2hhcmFjdGVyRnJvbUlu
bGluZUJ1ZmZlcigmaW5saW5lQnVmZmVyLCBpKTsKKyAgICAgICAgICAgIGlmIChjID09ICcgJyB8
fCBjID09ICdcbicgfHwgYyA9PSAnXHInIHx8IGMgPT0gJ1x0JyB8fCBjID09IDB4YyB8fCBjID09
IDB4MjAwYikgeworICAgICAgICAgICAgICAgIHdhc1NwYWNlID0gKCF3YXNMZWFkaW5nIHx8ICFz
dXBwcmVzc0xlYWRpbmdTcGFjZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIGlmICh3YXNTcGFjZSkgYnVmZmVyW2lkeCsrXSA9ICcgJzsKKyAgICAgICAgICAgICAgICBi
dWZmZXJbaWR4KytdID0gYzsKKyAgICAgICAgICAgICAgICBpZiAoaWR4ID49IFRleHRCdWZmZXJT
aXplKSB7CisgICAgICAgICAgICAgICAgICAgIENGU3RyaW5nQXBwZW5kQ2hhcmFjdGVycyhtdXRz
dHIsIGJ1ZmZlciwgaWR4KTsKKyAgICAgICAgICAgICAgICAgICAgaWR4ID0gMDsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgd2FzU3BhY2UgPSB3YXNMZWFkaW5nID0gTk87Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHdhc1NwYWNlKSBidWZmZXJbaWR4
KytdID0gJyAnOworICAgICAgICBpZiAoaWR4ID4gMCkgQ0ZTdHJpbmdBcHBlbmRDaGFyYWN0ZXJz
KG11dHN0ciwgYnVmZmVyLCBpZHgpOworICAgICAgICBvdXRzdHIgPSAoTlNTdHJpbmcgKiltdXRz
dHI7CisgICAgfQorICAgIGlmIChbb3V0c3RyIGxlbmd0aF0gPiAwKSB7CisgICAgICAgIGlmIChb
QCJjYXBpdGFsaXplIiBpc0VxdWFsVG9TdHJpbmc6dHJhbnNmb3JtVmFsXSkgeworICAgICAgICAg
ICAgb3V0c3RyID0gW291dHN0ciBjYXBpdGFsaXplZFN0cmluZ107CisgICAgICAgIH0gZWxzZSBp
ZiAoW0AidXBwZXJjYXNlIiBpc0VxdWFsVG9TdHJpbmc6dHJhbnNmb3JtVmFsXSkgeworICAgICAg
ICAgICAgb3V0c3RyID0gW291dHN0ciB1cHBlcmNhc2VTdHJpbmddOworICAgICAgICB9IGVsc2Ug
aWYgKFtAImxvd2VyY2FzZSIgaXNFcXVhbFRvU3RyaW5nOnRyYW5zZm9ybVZhbF0pIHsKKyAgICAg
ICAgICAgIG91dHN0ciA9IFtvdXRzdHIgbG93ZXJjYXNlU3RyaW5nXTsKKyAgICAgICAgfQorICAg
ICAgICBbX2F0dHJTdHIgcmVwbGFjZUNoYXJhY3RlcnNJblJhbmdlOnJhbmdlVG9SZXBsYWNlIHdp
dGhTdHJpbmc6b3V0c3RyXTsKKyAgICAgICAgcmFuZ2VUb1JlcGxhY2UubGVuZ3RoID0gW291dHN0
ciBsZW5ndGhdOworICAgICAgICBpZiAoIV9mbGFncy5pc0luZGV4aW5nKSB7CisgICAgICAgICAg
ICBOU0RpY3Rpb25hcnkgKmF0dHJzOworICAgICAgICAgICAgRE9NRWxlbWVudCAqZWxlbWVudCA9
IChET01FbGVtZW50ICopdGV4dDsKKyAgICAgICAgICAgIHdoaWxlIChlbGVtZW50ICYmIFtlbGVt
ZW50IG5vZGVUeXBlXSAhPSBET01fRUxFTUVOVF9OT0RFKSBlbGVtZW50ID0gKERPTUVsZW1lbnQg
KilbZWxlbWVudCBwYXJlbnROb2RlXTsKKyAgICAgICAgICAgIGF0dHJzID0gW3NlbGYgX2F0dHJp
YnV0ZXNGb3JFbGVtZW50OmVsZW1lbnRdOworICAgICAgICAgICAgaWYgKCFfZmxhZ3MuaXNUZXN0
aW5nICYmIHJhbmdlVG9SZXBsYWNlLmxlbmd0aCA+IDApIFtfYXR0clN0ciBzZXRBdHRyaWJ1dGVz
OmF0dHJzIHJhbmdlOnJhbmdlVG9SZXBsYWNlXTsKKyAgICAgICAgfQorICAgICAgICBfZmxhZ3Mu
aXNTb2Z0ID0gd2FzU3BhY2U7CisgICAgfQorICAgIGlmIChtdXRzdHIpIENGUmVsZWFzZShtdXRz
dHIpOworfQorCistICh2b2lkKV90cmF2ZXJzZU5vZGU6KERPTU5vZGUgKilub2RlIGRlcHRoOihO
U0ludGVnZXIpZGVwdGggZW1iZWRkZWQ6KEJPT0wpZW1iZWRkZWQKK3sKKyAgICB1bnNpZ25lZCBz
aG9ydCBub2RlVHlwZTsKKyAgICBOU0FycmF5ICpjaGlsZE5vZGVzOworICAgIE5TVUludGVnZXIg
aSwgY291bnQsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQ7CisgICAgQk9PTCBpc1N0YXJ0ID0gTk8s
IGlzRW5kID0gTk87CisKKyAgICBpZiAoX2ZsYWdzLnJlYWNoZWRFbmQpIHJldHVybjsKKyAgICBp
ZiAoX2RvbVJhbmdlICYmICFfZmxhZ3MucmVhY2hlZFN0YXJ0ICYmIF9kb21TdGFydEFuY2VzdG9y
cyAmJiAhW19kb21TdGFydEFuY2VzdG9ycyBjb250YWluc09iamVjdDpub2RlXSkgcmV0dXJuOwor
ICAgIAorICAgIG5vZGVUeXBlID0gW25vZGUgbm9kZVR5cGVdOworICAgIGNoaWxkTm9kZXMgPSBb
c2VsZiBfY2hpbGRyZW5Gb3JOb2RlOm5vZGVdOworICAgIGNvdW50ID0gW2NoaWxkTm9kZXMgY291
bnRdOworICAgIHN0YXJ0T2Zmc2V0ID0gMDsKKyAgICBlbmRPZmZzZXQgPSBjb3VudDsKKworICAg
IGlmIChfZG9tUmFuZ2UpIHsKKyAgICAgICAgaWYgKG5vZGUgPT0gW19kb21SYW5nZSBzdGFydENv
bnRhaW5lcl0pIHsKKyAgICAgICAgICAgIHN0YXJ0T2Zmc2V0ID0gKE5TVUludGVnZXIpW19kb21S
YW5nZSBzdGFydE9mZnNldF07CisgICAgICAgICAgICBpc1N0YXJ0ID0gWUVTOworICAgICAgICAg
ICAgX2ZsYWdzLnJlYWNoZWRTdGFydCA9IFlFUzsKKyAgICAgICAgfQorICAgICAgICBpZiAobm9k
ZSA9PSBbX2RvbVJhbmdlIGVuZENvbnRhaW5lcl0pIHsKKyAgICAgICAgICAgIGVuZE9mZnNldCA9
IChOU1VJbnRlZ2VyKVtfZG9tUmFuZ2UgZW5kT2Zmc2V0XTsKKyAgICAgICAgICAgIGlzRW5kID0g
WUVTOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGlmIChub2RlVHlwZSA9PSBET01fRE9D
VU1FTlRfTk9ERSB8fCBub2RlVHlwZSA9PSBET01fRE9DVU1FTlRfRlJBR01FTlRfTk9ERSkgewor
ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworICAgICAgICAgICAgaWYgKGlz
U3RhcnQgJiYgaSA9PSBzdGFydE9mZnNldCkgX2RvbVJhbmdlU3RhcnRJbmRleCA9IFtfYXR0clN0
ciBsZW5ndGhdOworICAgICAgICAgICAgaWYgKCghaXNTdGFydCB8fCBzdGFydE9mZnNldCA8PSBp
KSAmJiAoIWlzRW5kIHx8IGVuZE9mZnNldCA+IGkpKSBbc2VsZiBfdHJhdmVyc2VOb2RlOltjaGls
ZE5vZGVzIG9iamVjdEF0SW5kZXg6aV0gZGVwdGg6ZGVwdGggKyAxIGVtYmVkZGVkOmVtYmVkZGVk
XTsKKyAgICAgICAgICAgIGlmIChpc0VuZCAmJiBpICsgMSA+PSBlbmRPZmZzZXQpIF9mbGFncy5y
ZWFjaGVkRW5kID0gWUVTOworICAgICAgICAgICAgaWYgKF90aHVtYm5haWxMaW1pdCA+IDAgJiYg
W19hdHRyU3RyIGxlbmd0aF0gPj0gX3RodW1ibmFpbExpbWl0KSBfZmxhZ3MucmVhY2hlZEVuZCA9
IFlFUzsKKyAgICAgICAgICAgIGlmIChfZmxhZ3MucmVhY2hlZEVuZCkgYnJlYWs7CisgICAgICAg
IH0KKyAgICB9IGVsc2UgaWYgKG5vZGVUeXBlID09IERPTV9FTEVNRU5UX05PREUpIHsKKyAgICAg
ICAgRE9NRWxlbWVudCAqZWxlbWVudCA9IChET01FbGVtZW50ICopbm9kZTsKKyAgICAgICAgTlNT
dHJpbmcgKnRhZyA9IFtlbGVtZW50IHRhZ05hbWVdLCAqZGlzcGxheVZhbCA9IFtzZWxmIF9zdHJp
bmdGb3JOb2RlOmVsZW1lbnQgcHJvcGVydHk6QCJkaXNwbGF5Il0sICpmbG9hdFZhbCA9IFtzZWxm
IF9zdHJpbmdGb3JOb2RlOmVsZW1lbnQgcHJvcGVydHk6QCJmbG9hdCJdOworICAgICAgICBCT09M
IGlzQmxvY2tMZXZlbCA9IE5POworICAgICAgICBpZiAoZmxvYXRWYWwgJiYgKFtAImxlZnQiIGlz
RXF1YWxUb1N0cmluZzpmbG9hdFZhbF0gfHwgW0AicmlnaHQiIGlzRXF1YWxUb1N0cmluZzpmbG9h
dFZhbF0pKSB7CisgICAgICAgICAgICBpc0Jsb2NrTGV2ZWwgPSBZRVM7CisgICAgICAgIH0gZWxz
ZSBpZiAoZGlzcGxheVZhbCkgeworICAgICAgICAgICAgaXNCbG9ja0xldmVsID0gKFtAImJsb2Nr
IiBpc0VxdWFsVG9TdHJpbmc6ZGlzcGxheVZhbF0gfHwgW0AibGlzdC1pdGVtIiBpc0VxdWFsVG9T
dHJpbmc6ZGlzcGxheVZhbF0gfHwgW2Rpc3BsYXlWYWwgaGFzUHJlZml4OkAidGFibGUiXSk7Cisg
ICAgICAgIH0KKyAgICAgICAgW19lbGVtZW50SXNCbG9ja0xldmVsIHNldE9iamVjdDpbTlNOdW1i
ZXIgbnVtYmVyV2l0aEJvb2w6aXNCbG9ja0xldmVsXSBmb3JLZXk6ZWxlbWVudF07CisgICAgICAg
IGlmIChbc2VsZiBfZW50ZXJFbGVtZW50OmVsZW1lbnQgdGFnOnRhZyBkaXNwbGF5OmRpc3BsYXlW
YWxdKSB7CisgICAgICAgICAgICBOU1VJbnRlZ2VyIHN0YXJ0SW5kZXggPSBbX2F0dHJTdHIgbGVu
Z3RoXTsKKyAgICAgICAgICAgIGlmIChbc2VsZiBfcHJvY2Vzc0VsZW1lbnQ6ZWxlbWVudCB0YWc6
dGFnIGRpc3BsYXk6ZGlzcGxheVZhbCBkZXB0aDpkZXB0aF0pIHsKKyAgICAgICAgICAgICAgICBm
b3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBpZiAoaXNT
dGFydCAmJiBpID09IHN0YXJ0T2Zmc2V0KSBfZG9tUmFuZ2VTdGFydEluZGV4ID0gW19hdHRyU3Ry
IGxlbmd0aF07CisgICAgICAgICAgICAgICAgICAgIGlmICgoIWlzU3RhcnQgfHwgc3RhcnRPZmZz
ZXQgPD0gaSkgJiYgKCFpc0VuZCB8fCBlbmRPZmZzZXQgPiBpKSkgW3NlbGYgX3RyYXZlcnNlTm9k
ZTpbY2hpbGROb2RlcyBvYmplY3RBdEluZGV4OmldIGRlcHRoOmRlcHRoICsgMSBlbWJlZGRlZDpl
bWJlZGRlZF07CisgICAgICAgICAgICAgICAgICAgIGlmIChpc0VuZCAmJiBpICsgMSA+PSBlbmRP
ZmZzZXQpIF9mbGFncy5yZWFjaGVkRW5kID0gWUVTOworICAgICAgICAgICAgICAgICAgICBpZiAo
X2ZsYWdzLnJlYWNoZWRFbmQpIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBbc2VsZiBfZXhpdEVsZW1lbnQ6ZWxlbWVudCB0YWc6dGFnIGRpc3BsYXk6ZGlzcGxheVZh
bCBkZXB0aDpkZXB0aCBzdGFydEluZGV4OnN0YXJ0SW5kZXhdOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfSBlbHNlIGlmIChub2RlVHlwZSA9PSBET01fVEVYVF9OT0RFIHx8IG5vZGVU
eXBlID09IERPTV9DREFUQV9TRUNUSU9OX05PREUpIHsKKyAgICAgICAgW3NlbGYgX3Byb2Nlc3NU
ZXh0OihET01DaGFyYWN0ZXJEYXRhICopbm9kZV07CisgICAgfQorICAgIAorICAgIGlmIChpc0Vu
ZCkgX2ZsYWdzLnJlYWNoZWRFbmQgPSBZRVM7Cit9CisKKy0gKHZvaWQpX3RyYXZlcnNlRm9vdGVy
Tm9kZTooRE9NTm9kZSAqKW5vZGUgZGVwdGg6KE5TSW50ZWdlcilkZXB0aAoreworICAgIERPTUVs
ZW1lbnQgKmVsZW1lbnQgPSAoRE9NRWxlbWVudCAqKW5vZGU7CisgICAgTlNBcnJheSAqY2hpbGRO
b2RlcyA9IFtzZWxmIF9jaGlsZHJlbkZvck5vZGU6bm9kZV07CisgICAgTlNTdHJpbmcgKnRhZyA9
IEAiVEJPRFkiLCAqZGlzcGxheVZhbCA9IEAidGFibGUtcm93LWdyb3VwIjsKKyAgICBOU1VJbnRl
Z2VyIGksIGNvdW50ID0gW2NoaWxkTm9kZXMgY291bnRdLCBzdGFydE9mZnNldCA9IDAsIGVuZE9m
ZnNldCA9IGNvdW50OworICAgIEJPT0wgaXNTdGFydCA9IE5PLCBpc0VuZCA9IE5POworCisgICAg
aWYgKF9mbGFncy5yZWFjaGVkRW5kKSByZXR1cm47CisgICAgaWYgKF9kb21SYW5nZSAmJiAhX2Zs
YWdzLnJlYWNoZWRTdGFydCAmJiBfZG9tU3RhcnRBbmNlc3RvcnMgJiYgIVtfZG9tU3RhcnRBbmNl
c3RvcnMgY29udGFpbnNPYmplY3Q6bm9kZV0pIHJldHVybjsKKyAgICBpZiAoX2RvbVJhbmdlKSB7
CisgICAgICAgIGlmIChub2RlID09IFtfZG9tUmFuZ2Ugc3RhcnRDb250YWluZXJdKSB7CisgICAg
ICAgICAgICBzdGFydE9mZnNldCA9IChOU1VJbnRlZ2VyKVtfZG9tUmFuZ2Ugc3RhcnRPZmZzZXRd
OworICAgICAgICAgICAgaXNTdGFydCA9IFlFUzsKKyAgICAgICAgICAgIF9mbGFncy5yZWFjaGVk
U3RhcnQgPSBZRVM7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG5vZGUgPT0gW19kb21SYW5nZSBl
bmRDb250YWluZXJdKSB7CisgICAgICAgICAgICBlbmRPZmZzZXQgPSAoTlNVSW50ZWdlcilbX2Rv
bVJhbmdlIGVuZE9mZnNldF07CisgICAgICAgICAgICBpc0VuZCA9IFlFUzsKKyAgICAgICAgfQor
ICAgIH0KKyAgICBpZiAoW3NlbGYgX2VudGVyRWxlbWVudDplbGVtZW50IHRhZzp0YWcgZGlzcGxh
eTpkaXNwbGF5VmFsXSkgeworICAgICAgICBOU1VJbnRlZ2VyIHN0YXJ0SW5kZXggPSBbX2F0dHJT
dHIgbGVuZ3RoXTsKKyAgICAgICAgaWYgKFtzZWxmIF9wcm9jZXNzRWxlbWVudDplbGVtZW50IHRh
Zzp0YWcgZGlzcGxheTpkaXNwbGF5VmFsIGRlcHRoOmRlcHRoXSkgeworICAgICAgICAgICAgZm9y
IChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNTdGFydCAm
JiBpID09IHN0YXJ0T2Zmc2V0KSBfZG9tUmFuZ2VTdGFydEluZGV4ID0gW19hdHRyU3RyIGxlbmd0
aF07CisgICAgICAgICAgICAgICAgaWYgKCghaXNTdGFydCB8fCBzdGFydE9mZnNldCA8PSBpKSAm
JiAoIWlzRW5kIHx8IGVuZE9mZnNldCA+IGkpKSBbc2VsZiBfdHJhdmVyc2VOb2RlOltjaGlsZE5v
ZGVzIG9iamVjdEF0SW5kZXg6aV0gZGVwdGg6ZGVwdGggKyAxIGVtYmVkZGVkOllFU107CisgICAg
ICAgICAgICAgICAgaWYgKGlzRW5kICYmIGkgKyAxID49IGVuZE9mZnNldCkgX2ZsYWdzLnJlYWNo
ZWRFbmQgPSBZRVM7CisgICAgICAgICAgICAgICAgaWYgKF9mbGFncy5yZWFjaGVkRW5kKSBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFtzZWxmIF9leGl0RWxlbWVudDplbGVtZW50
IHRhZzp0YWcgZGlzcGxheTpkaXNwbGF5VmFsIGRlcHRoOmRlcHRoIHN0YXJ0SW5kZXg6c3RhcnRJ
bmRleF07CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGlzRW5kKSBfZmxhZ3MucmVhY2hlZEVu
ZCA9IFlFUzsKK30KKworLSAodm9pZClfYWRqdXN0VHJhaWxpbmdOZXdsaW5lCit7CisgICAgTlNV
SW50ZWdlciB0ZXh0TGVuZ3RoID0gW19hdHRyU3RyIGxlbmd0aF07CisgICAgdW5pY2hhciBsYXN0
Q2hhciA9ICh0ZXh0TGVuZ3RoID4gMCkgPyBbW19hdHRyU3RyIHN0cmluZ10gY2hhcmFjdGVyQXRJ
bmRleDp0ZXh0TGVuZ3RoIC0gMV0gOiAwOworICAgIEJPT0wgYWxyZWFkeUhhc1RyYWlsaW5nTmV3
bGluZSA9IChsYXN0Q2hhciA9PSAnXG4nIHx8IGxhc3RDaGFyID09ICdccicgfHwgbGFzdENoYXIg
PT0gTlNQYXJhZ3JhcGhTZXBhcmF0b3JDaGFyYWN0ZXIgfHwgbGFzdENoYXIgPT0gTlNMaW5lU2Vw
YXJhdG9yQ2hhcmFjdGVyIHx8IGxhc3RDaGFyID09IFdlYk5leHRMaW5lQ2hhcmFjdGVyKTsKKyAg
ICBpZiAoX2ZsYWdzLmhhc1RyYWlsaW5nTmV3bGluZSAmJiAhYWxyZWFkeUhhc1RyYWlsaW5nTmV3
bGluZSkKKyAgICAgICAgW19hdHRyU3RyIHJlcGxhY2VDaGFyYWN0ZXJzSW5SYW5nZTpOU01ha2VS
YW5nZSh0ZXh0TGVuZ3RoLCAwKSB3aXRoU3RyaW5nOkAiXG4iXTsKK30KKworLSAodm9pZClfbG9h
ZEZyb21ET01SYW5nZQoreworICAgIGlmICgtMSA9PSBfZXJyb3JDb2RlKSB7CisgICAgICAgIERP
TU5vZGUgKmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyID0gW19kb21SYW5nZSBjb21tb25BbmNlc3Rv
ckNvbnRhaW5lcl0sICphbmNlc3RvckNvbnRhaW5lciA9IFtfZG9tUmFuZ2Ugc3RhcnRDb250YWlu
ZXJdOworICAgICAgICAKKyAgICAgICAgX2RvbVN0YXJ0QW5jZXN0b3JzID0gW1tOU011dGFibGVB
cnJheSBhbGxvY10gaW5pdF07CisgICAgICAgIHdoaWxlIChhbmNlc3RvckNvbnRhaW5lcikgewor
ICAgICAgICAgICAgW19kb21TdGFydEFuY2VzdG9ycyBhZGRPYmplY3Q6YW5jZXN0b3JDb250YWlu
ZXJdOworICAgICAgICAgICAgaWYgKGFuY2VzdG9yQ29udGFpbmVyID09IGNvbW1vbkFuY2VzdG9y
Q29udGFpbmVyKSBicmVhazsKKyAgICAgICAgICAgIGFuY2VzdG9yQ29udGFpbmVyID0gW2FuY2Vz
dG9yQ29udGFpbmVyIHBhcmVudE5vZGVdOworICAgICAgICB9CisgICAgICAgIF9kb2N1bWVudCA9
IFtjb21tb25BbmNlc3RvckNvbnRhaW5lciBvd25lckRvY3VtZW50XTsKKyAgICAgICAgX2RhdGFT
b3VyY2UgPSAoRG9jdW1lbnRMb2FkZXIgKiljb3JlKF9kb2N1bWVudCktPmZyYW1lKCktPmxvYWRl
cigpLT5kb2N1bWVudExvYWRlcigpOworICAgICAgICBpZiAoX3RleHRTaXplTXVsdGlwbGllciA8
PSAwLjApIF90ZXh0U2l6ZU11bHRpcGxpZXIgPSAxLjA7CisgICAgICAgIGlmIChfZGVmYXVsdEZv
bnRTaXplIDw9IDAuMCkgX2RlZmF1bHRGb250U2l6ZSA9IDEyLjA7CisgICAgICAgIGlmIChfbWlu
aW11bUZvbnRTaXplIDwgMS4wKSBfbWluaW11bUZvbnRTaXplID0gMS4wOworICAgICAgICBpZiAo
X2RvY3VtZW50ICYmIF9kYXRhU291cmNlKSB7CisgICAgICAgICAgICBfZG9tUmFuZ2VTdGFydElu
ZGV4ID0gMDsKKyAgICAgICAgICAgIF9lcnJvckNvZGUgPSAwOworICAgICAgICAgICAgW3NlbGYg
X3RyYXZlcnNlTm9kZTpjb21tb25BbmNlc3RvckNvbnRhaW5lciBkZXB0aDowIGVtYmVkZGVkOk5P
XTsKKyAgICAgICAgICAgIGlmIChfZG9tUmFuZ2VTdGFydEluZGV4ID4gMCAmJiBfZG9tUmFuZ2VT
dGFydEluZGV4IDw9IFtfYXR0clN0ciBsZW5ndGhdKSBbX2F0dHJTdHIgZGVsZXRlQ2hhcmFjdGVy
c0luUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgX2RvbVJhbmdlU3RhcnRJbmRleCldOworICAgICAgICB9
CisgICAgfQorfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbX2F0dHJTdHIgcmVsZWFzZV07
CisgICAgW19kb21SYW5nZSByZWxlYXNlXTsKKyAgICBbX2RvbVN0YXJ0QW5jZXN0b3JzIHJlbGVh
c2VdOworICAgIFtfc3RhbmRhcmRGb250RmFtaWx5IHJlbGVhc2VdOworICAgIFtfdGV4dExpc3Rz
IHJlbGVhc2VdOworICAgIFtfdGV4dEJsb2NrcyByZWxlYXNlXTsKKyAgICBbX3RleHRUYWJsZXMg
cmVsZWFzZV07CisgICAgW190ZXh0VGFibGVGb290ZXJzIHJlbGVhc2VdOworICAgIFtfdGV4dFRh
YmxlU3BhY2luZ3MgcmVsZWFzZV07CisgICAgW190ZXh0VGFibGVQYWRkaW5ncyByZWxlYXNlXTsK
KyAgICBbX3RleHRUYWJsZVJvd3MgcmVsZWFzZV07CisgICAgW190ZXh0VGFibGVSb3dBcnJheXMg
cmVsZWFzZV07CisgICAgW190ZXh0VGFibGVSb3dCYWNrZ3JvdW5kQ29sb3JzIHJlbGVhc2VdOwor
ICAgIFtfY29tcHV0ZWRTdHlsZXNGb3JFbGVtZW50cyByZWxlYXNlXTsKKyAgICBbX3NwZWNpZmll
ZFN0eWxlc0ZvckVsZW1lbnRzIHJlbGVhc2VdOworICAgIFtfc3RyaW5nc0Zvck5vZGVzIHJlbGVh
c2VdOworICAgIFtfZmxvYXRzRm9yTm9kZXMgcmVsZWFzZV07CisgICAgW19jb2xvcnNGb3JOb2Rl
cyByZWxlYXNlXTsKKyAgICBbX2F0dHJpYnV0ZXNGb3JFbGVtZW50cyByZWxlYXNlXTsKKyAgICBb
X2VsZW1lbnRJc0Jsb2NrTGV2ZWwgcmVsZWFzZV07CisgICAgW19mb250Q2FjaGUgcmVsZWFzZV07
CisgICAgW193cml0aW5nRGlyZWN0aW9uQXJyYXkgcmVsZWFzZV07CisgICAgW3N1cGVyIGRlYWxs
b2NdOworfQorCistIChpZClpbml0Cit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBp
ZiAoIXNlbGYpIHJldHVybiBuaWw7CisgICAgCisgICAgX2F0dHJTdHIgPSBbW05TTXV0YWJsZUF0
dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRdOworCisgICAgX3RleHRMaXN0cyA9IFtbTlNNdXRh
YmxlQXJyYXkgYWxsb2NdIGluaXRdOworICAgIF90ZXh0QmxvY2tzID0gW1tOU011dGFibGVBcnJh
eSBhbGxvY10gaW5pdF07CisgICAgX3RleHRUYWJsZXMgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9j
XSBpbml0XTsKKyAgICBfdGV4dFRhYmxlRm9vdGVycyA9IFtbTlNNdXRhYmxlRGljdGlvbmFyeSBh
bGxvY10gaW5pdF07CisgICAgX3RleHRUYWJsZVNwYWNpbmdzID0gW1tOU011dGFibGVBcnJheSBh
bGxvY10gaW5pdF07CisgICAgX3RleHRUYWJsZVBhZGRpbmdzID0gW1tOU011dGFibGVBcnJheSBh
bGxvY10gaW5pdF07CisgICAgX3RleHRUYWJsZVJvd3MgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9j
XSBpbml0XTsKKyAgICBfdGV4dFRhYmxlUm93QXJyYXlzID0gW1tOU011dGFibGVBcnJheSBhbGxv
Y10gaW5pdF07CisgICAgX3RleHRUYWJsZVJvd0JhY2tncm91bmRDb2xvcnMgPSBbW05TTXV0YWJs
ZUFycmF5IGFsbG9jXSBpbml0XTsKKyAgICBfY29tcHV0ZWRTdHlsZXNGb3JFbGVtZW50cyA9IFtb
TlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF07CisgICAgX3NwZWNpZmllZFN0eWxlc0Zv
ckVsZW1lbnRzID0gW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XTsKKyAgICBfc3Ry
aW5nc0Zvck5vZGVzID0gW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XTsKKyAgICBf
ZmxvYXRzRm9yTm9kZXMgPSBbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdOworICAg
IF9jb2xvcnNGb3JOb2RlcyA9IFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF07Cisg
ICAgX2F0dHJpYnV0ZXNGb3JFbGVtZW50cyA9IFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10g
aW5pdF07CisgICAgX2VsZW1lbnRJc0Jsb2NrTGV2ZWwgPSBbW05TTXV0YWJsZURpY3Rpb25hcnkg
YWxsb2NdIGluaXRdOworICAgIF9mb250Q2FjaGUgPSBbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxs
b2NdIGluaXRdOworICAgIF93cml0aW5nRGlyZWN0aW9uQXJyYXkgPSBbW05TTXV0YWJsZUFycmF5
IGFsbG9jXSBpbml0XTsKKworICAgIF90ZXh0U2l6ZU11bHRpcGxpZXIgPSAxLjA7CisgICAgX3dl
YlZpZXdUZXh0U2l6ZU11bHRpcGxpZXIgPSAwLjA7CisgICAgX2RlZmF1bHRUYWJJbnRlcnZhbCA9
IDM2LjA7CisgICAgX2RlZmF1bHRGb250U2l6ZSA9IDEyLjA7CisgICAgX21pbmltdW1Gb250U2l6
ZSA9IDEuMDsKKyAgICBfZXJyb3JDb2RlID0gLTE7CisgICAgX2luZGV4aW5nTGltaXQgPSAwOwor
ICAgIF90aHVtYm5haWxMaW1pdCA9IDA7CisKKyAgICBfZmxhZ3MuaXNJbmRleGluZyA9IChfaW5k
ZXhpbmdMaW1pdCA+IDApOworICAgIF9mbGFncy5pc1Rlc3RpbmcgPSAwOworICAgIAorICAgIHJl
dHVybiBzZWxmOworfQorCistIChpZClpbml0V2l0aERPTVJhbmdlOihET01SYW5nZSAqKWRvbVJh
bmdlCit7CisgICAgc2VsZiA9IFtzZWxmIGluaXRdOworICAgIGlmICghc2VsZikgcmV0dXJuIG5p
bDsKKyAgICBfZG9tUmFuZ2UgPSBbZG9tUmFuZ2UgcmV0YWluXTsKKyAgICByZXR1cm4gc2VsZjsK
K30KKworLSAoTlNBdHRyaWJ1dGVkU3RyaW5nICopYXR0cmlidXRlZFN0cmluZworeworICAgIFtz
ZWxmIF9sb2FkRnJvbURPTVJhbmdlXTsKKyAgICByZXR1cm4gKDAgPT0gX2Vycm9yQ29kZSkgPyBb
W19hdHRyU3RyIHJldGFpbl0gYXV0b3JlbGVhc2VdIDogbmlsOworfQorCitAZW5kCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5tbQkocmV2aXNpb24g
Nzg3NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5tbQko
d29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQAogI2ltcG9ydCAiRnJhbWVMb2FkZXJDbGll
bnQuaCIKICNpbXBvcnQgIkhpdFRlc3RSZXN1bHQuaCIKICNpbXBvcnQgIkhUTUxBbmNob3JFbGVt
ZW50LmgiCisjaW1wb3J0ICJIVE1MQ29udmVydGVyLmgiCiAjaW1wb3J0ICJIVE1MTmFtZXMuaCIK
ICNpbXBvcnQgIkltYWdlLmgiCiAjaW1wb3J0ICJLVVJMLmgiCkBAIC0xNDUsOCArMTQ2LDE2IEBA
IHZvaWQgUGFzdGVib2FyZDo6d3JpdGVTZWxlY3Rpb24oTlNQYXN0ZWIKICAgICBBU1NFUlQoc2Vs
ZWN0ZWRSYW5nZSk7CiAgICAgCiAgICAgLy8gVXNpbmcgZGlmZmVyZW50IEFQSSBmb3IgV2ViS2l0
IGFuZCBXZWJLaXQyLgotICAgIC8vIEZJWE1FIC0gV2UgbmVlZCB0byBoYXZlIGEgd2F5IHRvIGNy
ZWF0ZSB0aGUgTlNBdHRyaWJ1dGVkU3RyaW5nIGZvciBXZWJLaXQyIHRoYXQgZG9lc24ndCByZXF1
aXJlIGFjY2Vzc2luZyB0aGUgV2ViRnJhbWUuCi0gICAgTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRy
aWJ1dGVkU3RyaW5nID0gKGZyYW1lLT52aWV3KCktPnBsYXRmb3JtV2lkZ2V0KCkpID8gW1tbTlNB
dHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBfaW5pdFdpdGhET01SYW5nZTpraXQoc2VsZWN0ZWRSYW5n
ZSldIGF1dG9yZWxlYXNlXSA6IFtbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhT
dHJpbmc6c2VsZWN0ZWRSYW5nZS0+dGV4dCgpXSBhdXRvcmVsZWFzZV07CisgICAgTlNBdHRyaWJ1
dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nOworICAgIGlmIChmcmFtZS0+dmlldygpLT5wbGF0
Zm9ybVdpZGdldCgpKQorICAgICAgICBhdHRyaWJ1dGVkU3RyaW5nID0gW1tbTlNBdHRyaWJ1dGVk
U3RyaW5nIGFsbG9jXSBfaW5pdFdpdGhET01SYW5nZTpraXQoc2VsZWN0ZWRSYW5nZSldIGF1dG9y
ZWxlYXNlXTsKKyAgICBlbHNlIHsKKyAgICAgICAgLy8gSW4gV2ViS2l0MiB3ZSBhcmUgdXNpbmcg
YSBkaWZmZXJlbnQgd2F5IHRvIGNyZWF0ZSB0aGUgTlNBdHRyaWJ1dGVkU3RyaW5nIGZyb20gdGhl
IERPTXJhbmdlIHRoYXQgZG9lc24ndCByZXF1aXJlIGFjY2VzcyB0byB0aGUgV2ViVmlldy4KKyAg
ICAgICAgUmV0YWluUHRyPFdlYkhUTUxDb252ZXJ0ZXI+IGNvbnZlcnRlciA9IFtbV2ViSFRNTENv
bnZlcnRlciBhbGxvY10gaW5pdFdpdGhET01SYW5nZTpraXQoc2VsZWN0ZWRSYW5nZSldOworICAg
ICAgICBpZiAoY29udmVydGVyKQorICAgICAgICAgICAgYXR0cmlidXRlZFN0cmluZyA9IFtjb252
ZXJ0ZXIuZ2V0KCkgYXR0cmlidXRlZFN0cmluZ107CisgICAgfQorCiAjaWZkZWYgQlVJTERJTkdf
T05fVElHRVIKICAgICAvLyA0OTMwMTk3OiBNYWlsIG92ZXJyaWRlcyBbV2ViSFRNTFZpZXcgcGFz
dGVib2FyZFR5cGVzRm9yU2VsZWN0aW9uXSBpbiBvcmRlciB0byBhZGQgYW5vdGhlciB0eXBlIHRv
IHRoZSBwYXN0ZWJvYXJkCiAgICAgLy8gYWZ0ZXIgV2ViS2l0IGRvZXMuICBPbiBUaWdlciB3ZSBt
dXN0IGNhbGwgdGhpcyBmdW5jdGlvbiBzbyB0aGF0IE1haWwgY29kZSB3aWxsIGJlIGV4ZWN1dGVk
LCBtZWFuaW5nIHRoYXQgCg==
</data>
<flag name="review"
          id="75385"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>