<?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>189589</bug_id>
          
          <creation_ts>2018-09-13 10:08:00 -0700</creation_ts>
          <short_desc>Add Copy WebKit Permalink plugin for Sublime Text</short_desc>
          <delta_ts>2020-08-12 11:34:27 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>215418</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Daniel Bates">dbates</reporter>
          <assigned_to name="Daniel Bates">dbates</assigned_to>
          <cc>cturner</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>joepeck</cc>
    
    <cc>lforschler</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1459397</commentid>
    <comment_count>0</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2018-09-13 10:08:00 -0700</bug_when>
    <thetext>I frequently switch between Xcode and Sublime Text 3. We should port the Copy WebKit Permalink Automator service to a Sublime Text plugin so that the same functionality can be accessed in Sublime Text. Porting to a Sublime Text plugin would also make this convenience service available to a larger audience because Sublime Text is cross-platform (available on Mac, Linux, and Windows at the time of writing).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1459424</commentid>
    <comment_count>1</comment_count>
      <attachid>349679</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2018-09-13 10:39:14 -0700</bug_when>
    <thetext>Created attachment 349679
Patch

I tested this plugin in Sublime Text 3 on Mac version 3.1.1 (build 3176). If someone wants to test aon Window or Linxu that would be great. It should work in Sublime Text 2 given that I used &lt;https://code.tutsplus.com/tutorials/how-to-create-a-sublime-text-2-plugin--net-22685&gt; as a reference when writing the plugin. For now, there are only key bindings for Mac because that is the platform I use and is the platform I am most familiar with the keyboard shortcut conventions for. Do any Windows or Linux developers have suggestions for good (read: do not conflict with other apps) key bindings sequences? We need two sequences: one for generating a permalink without blame annotations and one for generating a permalink with blame annotations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1459425</commentid>
    <comment_count>2</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-09-13 10:40:32 -0700</bug_when>
    <thetext>Attachment 349679 did not pass style-queue:


ERROR: Tools/CopyPermalink/Sublime Text/CopyWebKitPermalink/CopyWebKitPermalink.py:35:  [CopyWebKitPermalinkCommand.run] Instance of &apos;CopyWebKitPermalinkCommand&apos; has no &apos;view&apos; member  [pylint/E1101] [5]
ERROR: Tools/CopyPermalink/Sublime Text/CopyWebKitPermalink/CopyWebKitPermalink.py:43:  [CopyWebKitPermalinkCommand.run] Instance of &apos;CopyWebKitPermalinkCommand&apos; has no &apos;view&apos; member  [pylint/E1101] [5]
ERROR: Tools/CopyPermalink/Sublime Text/CopyWebKitPermalink/CopyWebKitPermalink.py:43:  [CopyWebKitPermalinkCommand.run] Instance of &apos;CopyWebKitPermalinkCommand&apos; has no &apos;view&apos; member  [pylint/E1101] [5]
ERROR: Tools/CopyPermalink/Sublime Text/CopyWebKitPermalink/CopyWebKitPermalink.py:51:  [CopyWebKitPermalinkCommand.is_enabled] Instance of &apos;CopyWebKitPermalinkCommand&apos; has no &apos;view&apos; member  [pylint/E1101] [5]
ERROR: Tools/CopyPermalink/Sublime Text/CopyWebKitPermalink/CopyWebKitPermalink.py:51:  [CopyWebKitPermalinkCommand.is_enabled] Instance of &apos;CopyWebKitPermalinkCommand&apos; has no &apos;view&apos; member  [pylint/E1101] [5]
Total errors found: 5 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1459427</commentid>
    <comment_count>3</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2018-09-13 10:44:02 -0700</bug_when>
    <thetext>(In reply to Build Bot from comment #2)
&gt; Attachment 349679 [details] did not pass style-queue:
&gt; 
&gt; 
&gt; ERROR: Tools/CopyPermalink/Sublime
&gt; Text/CopyWebKitPermalink/CopyWebKitPermalink.py:35: 
&gt; [CopyWebKitPermalinkCommand.run] Instance of &apos;CopyWebKitPermalinkCommand&apos;
&gt; has no &apos;view&apos; member  [pylint/E1101] [5]
&gt; ERROR: Tools/CopyPermalink/Sublime
&gt; Text/CopyWebKitPermalink/CopyWebKitPermalink.py:43: 
&gt; [CopyWebKitPermalinkCommand.run] Instance of &apos;CopyWebKitPermalinkCommand&apos;
&gt; has no &apos;view&apos; member  [pylint/E1101] [5]
&gt; ERROR: Tools/CopyPermalink/Sublime
&gt; Text/CopyWebKitPermalink/CopyWebKitPermalink.py:43: 
&gt; [CopyWebKitPermalinkCommand.run] Instance of &apos;CopyWebKitPermalinkCommand&apos;
&gt; has no &apos;view&apos; member  [pylint/E1101] [5]
&gt; ERROR: Tools/CopyPermalink/Sublime
&gt; Text/CopyWebKitPermalink/CopyWebKitPermalink.py:51: 
&gt; [CopyWebKitPermalinkCommand.is_enabled] Instance of
&gt; &apos;CopyWebKitPermalinkCommand&apos; has no &apos;view&apos; member  [pylint/E1101] [5]
&gt; ERROR: Tools/CopyPermalink/Sublime
&gt; Text/CopyWebKitPermalink/CopyWebKitPermalink.py:51: 
&gt; [CopyWebKitPermalinkCommand.is_enabled] Instance of
&gt; &apos;CopyWebKitPermalinkCommand&apos; has no &apos;view&apos; member  [pylint/E1101] [5]
&gt; Total errors found: 5 in 8 files
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against
&gt; check-webkit-style.

These warnings can be ignored as Pylint does not have access to the Sublime modules to check dependencies related to inheritance from class sublime_plugin.TextCommand.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1459432</commentid>
    <comment_count>4</comment_count>
      <attachid>349679</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2018-09-13 10:52:53 -0700</bug_when>
    <thetext>Comment on attachment 349679
Patch

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

Neat! rs=me

&gt; Tools/CopyPermalink/Sublime Text/CopyWebKitPermalink/Context.sublime-menu:2
&gt; +    { &quot;command&quot;: &quot;copy_web_kit_permalink&quot; },

Why &quot;web_kit&quot; and not &quot;webkit&quot;?

&gt; Tools/CopyPermalink/Sublime Text/CopyWebKitPermalink/Default (OSX).sublime-keymap:2
&gt; +	{ &quot;keys&quot;: [&quot;super+ctrl+shift+c&quot;], &quot;command&quot;: &quot;copy_web_kit_permalink&quot; },

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1459434</commentid>
    <comment_count>5</comment_count>
      <attachid>349679</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2018-09-13 10:54:09 -0700</bug_when>
    <thetext>Comment on attachment 349679
Patch

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

&gt;&gt; Tools/CopyPermalink/Sublime Text/CopyWebKitPermalink/Context.sublime-menu:2
&gt;&gt; +    { &quot;command&quot;: &quot;copy_web_kit_permalink&quot; },
&gt; 
&gt; Why &quot;web_kit&quot; and not &quot;webkit&quot;?

Maybe this was needed to convert to the python class name: CopyWebKitPermalinkCommand</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1459436</commentid>
    <comment_count>6</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2018-09-13 11:03:57 -0700</bug_when>
    <thetext>(In reply to Joseph Pecoraro from comment #5)
&gt; Comment on attachment 349679 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=349679&amp;action=review
&gt; 
&gt; &gt;&gt; Tools/CopyPermalink/Sublime Text/CopyWebKitPermalink/Context.sublime-menu:2
&gt; &gt;&gt; +    { &quot;command&quot;: &quot;copy_web_kit_permalink&quot; },
&gt; &gt; 
&gt; &gt; Why &quot;web_kit&quot; and not &quot;webkit&quot;?
&gt; 
&gt; Maybe this was needed to convert to the python class name:
&gt; CopyWebKitPermalinkCommand

Correct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1459439</commentid>
    <comment_count>7</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2018-09-13 11:07:32 -0700</bug_when>
    <thetext>Committed r235981: &lt;https://trac.webkit.org/changeset/235981&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1459441</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-09-13 11:08:25 -0700</bug_when>
    <thetext>&lt;rdar://problem/44424184&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>349679</attachid>
            <date>2018-09-13 10:39:14 -0700</date>
            <delta_ts>2018-09-13 10:52:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-189589-20180913103913.patch</filename>
            <type>text/plain</type>
            <size>43840</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM1OTc0CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMDc2YzgzMGNhNjFiZTMwMzM5YjFjZjVkMmY0ODRiMWNk
MGQ1YWU5Ny4uMWE4NTg0NzNiNjM4ZDlkNzdmNTgzYzllNDAxMGVjNDUxYzA4MDdmMSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4
IEBACisyMDE4LTA5LTEzICBEYW5pZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KKworICAg
ICAgICBBZGQgQ29weSBXZWJLaXQgUGVybWFsaW5rIHBsdWdpbiBmb3IgU3VibGltZSBUZXh0Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODk1ODkKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQb3J0IHRoZSBD
b3B5IFdlYktpdCBQZXJtYWxpbmsgQXV0b21hdG9yIHNlcnZpY2UgdG8gYSBTdWJsaW1lIFRleHQg
cGx1Z2luLiBPbmNlIGluc3RhbGxlZCB5b3UgY2FuCisgICAgICAgIHVzZSB0aGUgcGx1Z2luIHRv
IGNvcHkgdG8gdGhlIENsaXBib2FyZCBhIHRyYWMud2Via2l0Lm9yZyBoeXBlcmxpbmsgdG8gdGhl
IHNlbGVjdGVkIGxpbmUgaW4gdGhlCisgICAgICAgIGFjdGl2ZSBkb2N1bWVudCB3aXRoIG9yIHdp
dGhvdXQgYmxhbWUgYW5ub3RhdGlvbnMuCisKKyAgICAgICAgT25jZSBpbnN0YWxsZWQsIHlvdSBj
YW4gQ29udHJvbC1jbGljayAob24gTWFjKSBvciByaWdodC1jbGljayAob24gV2luZG93cyBhbmQg
TGludXgpIG9uIGEgbGluZSBhbmQKKyAgICAgICAgY2hvb3NlIENvcHkgV2ViS2l0IFBlcm1hbGlu
ayBvciBDb3B5IFdlYktpdCBQZXJtYWxpbmsgdG8gQmxhbWUgZnJvbSB0aGUgY29udGV4dCBtZW51
IHRvIGNvcHkgdG8gdGhlCisgICAgICAgIENsaXBib2FyZCBhIHBlcm1hbmVudCBoeXBlcmxpbmsg
dG8gdGhlIHNlbGVjdGVkIGxpbmUgd2l0aG91dCBvciB3aXRoIGJsYW1lIGFubm90YXRpb25zLCBy
ZXNwZWN0aXZlbHkuCisgICAgICAgIE9uIE1hYyB5b3UgY2FuIGFsc28gaW52b2tlIHRoZSBzYW1l
IGZ1bmN0aW9uYWxpdHkgdXNpbmcgdGhlIGtleWJvYXJkIHNob3J0Y3V0cyBDb21tYW5kICsgU2hp
ZnQgKyBDb250cm9sICsgQworICAgICAgICBhbmQgQ29tbWFuZCArIFNoaWZ0ICsgQ29udHJvbCAr
IE9wdGlvbiArIEMsIHJlc3BlY3RpdmVseS4KKworICAgICAgICAqIENvcHlQZXJtYWxpbmsvU3Vi
bGltZSBUZXh0L0NvcHlXZWJLaXRQZXJtYWxpbmsvQ29udGV4dC5zdWJsaW1lLW1lbnU6IEFkZGVk
LgorICAgICAgICAqIENvcHlQZXJtYWxpbmsvU3VibGltZSBUZXh0L0NvcHlXZWJLaXRQZXJtYWxp
bmsvQ29weVdlYktpdFBlcm1hbGluay5weTogQWRkZWQuCisgICAgICAgICogQ29weVBlcm1hbGlu
ay9TdWJsaW1lIFRleHQvQ29weVdlYktpdFBlcm1hbGluay9EZWZhdWx0IChPU1gpLnN1YmxpbWUt
a2V5bWFwOiBBZGRlZC4KKyAgICAgICAgKiBDb3B5UGVybWFsaW5rL1N1YmxpbWUgVGV4dC9JTlNU
QUxMOiBBZGRlZC4KKyAgICAgICAgKiBDb3B5UGVybWFsaW5rL1hjb2RlL0NvcHkgV2ViS2l0IFBl
cm1hbGluay53b3JrZmxvdy9Db250ZW50cy9JbmZvLnBsaXN0OiBSZW5hbWVkIGZyb20gVG9vbHMv
Q29weVBlcm1hbGluay9Db3B5IFdlYktpdCBQZXJtYWxpbmsud29ya2Zsb3cvQ29udGVudHMvSW5m
by5wbGlzdC4KKyAgICAgICAgKiBDb3B5UGVybWFsaW5rL1hjb2RlL0NvcHkgV2ViS2l0IFBlcm1h
bGluay53b3JrZmxvdy9Db250ZW50cy9kb2N1bWVudC53ZmxvdzogUmVuYW1lZCBmcm9tIFRvb2xz
L0NvcHlQZXJtYWxpbmsvQ29weSBXZWJLaXQgUGVybWFsaW5rLndvcmtmbG93L0NvbnRlbnRzL2Rv
Y3VtZW50LndmbG93LgorICAgICAgICAqIENvcHlQZXJtYWxpbmsvWGNvZGUvSU5TVEFMTDogUmVu
YW1lZCBmcm9tIFRvb2xzL0NvcHlQZXJtYWxpbmsvUkVBRE1FLgorCiAyMDE4LTA5LTEzICBDYXJs
b3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJldmll
d2VkLiBGaXggV2ViRHJpdmVyIHRlc3RzIGFmdGVyIHIyMzUyMjUuCmRpZmYgLS1naXQgYS9Ub29s
cy9Db3B5UGVybWFsaW5rL0NvcHkgV2ViS2l0IFBlcm1hbGluay53b3JrZmxvdy9Db250ZW50cy9J
bmZvLnBsaXN0IGIvVG9vbHMvQ29weVBlcm1hbGluay9Db3B5IFdlYktpdCBQZXJtYWxpbmsud29y
a2Zsb3cvQ29udGVudHMvSW5mby5wbGlzdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NTlkMjZhNGM4YzQzY2YwOWIwZmIwNDczMWMxNTkwM2EzNWYyMzU4Yy4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9Db3B5UGVybWFsaW5rL0NvcHkg
V2ViS2l0IFBlcm1hbGluay53b3JrZmxvdy9Db250ZW50cy9JbmZvLnBsaXN0CQorKysgL2Rldi9u
dWxsCkBAIC0xLDIzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04
Ij8+Ci08IURPQ1RZUEUgcGxpc3QgUFVCTElDICItLy9BcHBsZS8vRFREIFBMSVNUIDEuMC8vRU4i
ICJodHRwOi8vd3d3LmFwcGxlLmNvbS9EVERzL1Byb3BlcnR5TGlzdC0xLjAuZHRkIj4KLTxwbGlz
dCB2ZXJzaW9uPSIxLjAiPgotPGRpY3Q+Ci0JPGtleT5OU1NlcnZpY2VzPC9rZXk+Ci0JPGFycmF5
PgotCQk8ZGljdD4KLQkJCTxrZXk+TlNNZW51SXRlbTwva2V5PgotCQkJPGRpY3Q+Ci0JCQkJPGtl
eT5kZWZhdWx0PC9rZXk+Ci0JCQkJPHN0cmluZz5Db3B5IFdlYktpdCBQZXJtYWxpbms8L3N0cmlu
Zz4KLQkJCTwvZGljdD4KLQkJCTxrZXk+TlNNZXNzYWdlPC9rZXk+Ci0JCQk8c3RyaW5nPnJ1bldv
cmtmbG93QXNTZXJ2aWNlPC9zdHJpbmc+Ci0JCQk8a2V5Pk5TUmVxdWlyZWRDb250ZXh0PC9rZXk+
Ci0JCQk8ZGljdD4KLQkJCQk8a2V5Pk5TQXBwbGljYXRpb25JZGVudGlmaWVyPC9rZXk+Ci0JCQkJ
PHN0cmluZz5jb20uYXBwbGUuZHQuWGNvZGU8L3N0cmluZz4KLQkJCTwvZGljdD4KLQkJPC9kaWN0
PgotCTwvYXJyYXk+Ci08L2RpY3Q+Ci08L3BsaXN0PgpkaWZmIC0tZ2l0IGEvVG9vbHMvQ29weVBl
cm1hbGluay9Db3B5IFdlYktpdCBQZXJtYWxpbmsud29ya2Zsb3cvQ29udGVudHMvZG9jdW1lbnQu
d2Zsb3cgYi9Ub29scy9Db3B5UGVybWFsaW5rL0NvcHkgV2ViS2l0IFBlcm1hbGluay53b3JrZmxv
dy9Db250ZW50cy9kb2N1bWVudC53ZmxvdwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NzM2OGMxODcyOWYwODU4ZWJjNTM3N2E5YTYzN2NjYmJlZjNmYjVhNy4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9Db3B5UGVybWFsaW5rL0NvcHkg
V2ViS2l0IFBlcm1hbGluay53b3JrZmxvdy9Db250ZW50cy9kb2N1bWVudC53ZmxvdwkKKysrIC9k
ZXYvbnVsbApAQCAtMSw0MTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0i
VVRGLTgiPz4KLTwhRE9DVFlQRSBwbGlzdCBQVUJMSUMgIi0vL0FwcGxlLy9EVEQgUExJU1QgMS4w
Ly9FTiIgImh0dHA6Ly93d3cuYXBwbGUuY29tL0RURHMvUHJvcGVydHlMaXN0LTEuMC5kdGQiPgot
PHBsaXN0IHZlcnNpb249IjEuMCI+Ci08ZGljdD4KLQk8a2V5PkFNQXBwbGljYXRpb25CdWlsZDwv
a2V5PgotCTxzdHJpbmc+NDI4PC9zdHJpbmc+Ci0JPGtleT5BTUFwcGxpY2F0aW9uVmVyc2lvbjwv
a2V5PgotCTxzdHJpbmc+Mi43PC9zdHJpbmc+Ci0JPGtleT5BTURvY3VtZW50VmVyc2lvbjwva2V5
PgotCTxzdHJpbmc+Mjwvc3RyaW5nPgotCTxrZXk+YWN0aW9uczwva2V5PgotCTxhcnJheT4KLQkJ
PGRpY3Q+Ci0JCQk8a2V5PmFjdGlvbjwva2V5PgotCQkJPGRpY3Q+Ci0JCQkJPGtleT5BTUFjY2Vw
dHM8L2tleT4KLQkJCQk8ZGljdD4KLQkJCQkJPGtleT5Db250YWluZXI8L2tleT4KLQkJCQkJPHN0
cmluZz5MaXN0PC9zdHJpbmc+Ci0JCQkJCTxrZXk+T3B0aW9uYWw8L2tleT4KLQkJCQkJPHRydWUv
PgotCQkJCQk8a2V5PlR5cGVzPC9rZXk+Ci0JCQkJCTxhcnJheT4KLQkJCQkJCTxzdHJpbmc+Y29t
LmFwcGxlLmFwcGxlc2NyaXB0Lm9iamVjdDwvc3RyaW5nPgotCQkJCQk8L2FycmF5PgotCQkJCTwv
ZGljdD4KLQkJCQk8a2V5PkFNQWN0aW9uVmVyc2lvbjwva2V5PgotCQkJCTxzdHJpbmc+MS4wPC9z
dHJpbmc+Ci0JCQkJPGtleT5BTUFwcGxpY2F0aW9uPC9rZXk+Ci0JCQkJPGFycmF5PgotCQkJCQk8
c3RyaW5nPkF1dG9tYXRvcjwvc3RyaW5nPgotCQkJCTwvYXJyYXk+Ci0JCQkJPGtleT5BTVBhcmFt
ZXRlclByb3BlcnRpZXM8L2tleT4KLQkJCQk8ZGljdD4KLQkJCQkJPGtleT5zb3VyY2U8L2tleT4K
LQkJCQkJPGRpY3QvPgotCQkJCTwvZGljdD4KLQkJCQk8a2V5PkFNUHJvdmlkZXM8L2tleT4KLQkJ
CQk8ZGljdD4KLQkJCQkJPGtleT5Db250YWluZXI8L2tleT4KLQkJCQkJPHN0cmluZz5MaXN0PC9z
dHJpbmc+Ci0JCQkJCTxrZXk+VHlwZXM8L2tleT4KLQkJCQkJPGFycmF5PgotCQkJCQkJPHN0cmlu
Zz5jb20uYXBwbGUuYXBwbGVzY3JpcHQub2JqZWN0PC9zdHJpbmc+Ci0JCQkJCTwvYXJyYXk+Ci0J
CQkJPC9kaWN0PgotCQkJCTxrZXk+QWN0aW9uQnVuZGxlUGF0aDwva2V5PgotCQkJCTxzdHJpbmc+
L1N5c3RlbS9MaWJyYXJ5L0F1dG9tYXRvci9SdW4gSmF2YVNjcmlwdC5hY3Rpb248L3N0cmluZz4K
LQkJCQk8a2V5PkFjdGlvbk5hbWU8L2tleT4KLQkJCQk8c3RyaW5nPlJ1biBKYXZhU2NyaXB0PC9z
dHJpbmc+Ci0JCQkJPGtleT5BY3Rpb25QYXJhbWV0ZXJzPC9rZXk+Ci0JCQkJPGRpY3Q+Ci0JCQkJ
CTxrZXk+c291cmNlPC9rZXk+Ci0JCQkJCTxzdHJpbmc+LyoKLSAqICBDb3B5cmlnaHQgKEMpIDIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
ICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqICBhcmUgbWV0OgotICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqICBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiAgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiAgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqICBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqICBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotT2JqQy5pbXBvcnQoIkNvY29hIik7Ci0KLXZhciBnX2lzU1ZOOwotdmFyIGdfaXNH
aXQ7Ci12YXIgZ19pc0dpdFNWTjsKLXZhciBnX2xhc3RTVk5JbmZvOwotCi12YXIgQXBwID0gQXBw
bGljYXRpb24uY3VycmVudEFwcGxpY2F0aW9uKCk7Ci1BcHAuaW5jbHVkZVN0YW5kYXJkQWRkaXRp
b25zID0gdHJ1ZTsKLQotZnVuY3Rpb24gcnVuKGlucHV0LCBwYXJhbWV0ZXJzKSB7Ci0gICAgdmFy
IHhjb2RlRG9jdW1lbnQgPSB4Y29kZUFjdGl2ZURvY3VtZW50KCk7Ci0gICAgaWYgKCF4Y29kZURv
Y3VtZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICB2YXIgeGNvZGVEb2N1bWVudFBhdGggPSB4
Y29kZURvY3VtZW50LnBhdGgoKTsKLSAgICBkZXRlcm1pbmVWQ1NGcm9tUGF0aCh4Y29kZURvY3Vt
ZW50UGF0aCk7Ci0KLSAgICBpZiAoIXBhdGhJc0luV2ViS2l0Q2hlY2tvdXQoeGNvZGVEb2N1bWVu
dFBhdGgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICB2YXIgbGluZU51bWJlciA9IHhjb2RlU2Vs
ZWN0ZWRMaW5lSW5Eb2N1bWVudCh4Y29kZURvY3VtZW50KTsKLSAgICB2YXIgcGF0aCA9IHBhdGhS
ZWxhdGl2ZVRvUmVwb3NpdG9yeVJvb3RGb3JQYXRoKHhjb2RlRG9jdW1lbnRQYXRoKTsKLSAgICB2
YXIgcmV2aXNpb25JbmZvID0gcmV2aXNpb25JbmZvRm9yUGF0aCh4Y29kZURvY3VtZW50UGF0aCk7
Ci0gICAgdmFyIGFubm90YXRlQmxhbWUgPSAkLk5TRXZlbnQubW9kaWZpZXJGbGFncyAmYW1wOyAk
Lk5TQWx0ZXJuYXRlS2V5TWFzazsKLQotICAgIEFwcC5zZXRUaGVDbGlwYm9hcmRUbyhwZXJtYWxp
bmtGb3JQYXRoKHBhdGgsIGxpbmVOdW1iZXIsIHJldmlzaW9uSW5mbywgYW5ub3RhdGVCbGFtZSkp
OwotfQotCi1mdW5jdGlvbiBwYXRoSXNJbldlYktpdENoZWNrb3V0KHBhdGgpCi17Ci0gICAgdmFy
IHJlcG9zaXRvcnlVUkwgPSByZXZpc2lvbkluZm9Gb3JQYXRoKHBhdGgpLnJlcG9zaXRvcnlVUkw7
Ci0gICAgcmV0dXJuICEhcmVwb3NpdG9yeVVSTC5tYXRjaCgvXlx3KzpcL1wvXHcrXC53ZWJraXQu
b3JnLyk7Ci19Ci0KLWZ1bmN0aW9uIHBlcm1hbGlua0ZvclBhdGgocGF0aCwgbGluZU51bWJlciwg
cmV2aXNpb25JbmZvLCBhbm5vdGF0ZUJsYW1lKQotewotICAgIHZhciByZXZpc2lvbiA9IHJldmlz
aW9uSW5mby5yZXZpc2lvbiA/ICI/cmV2PSIgKyByZXZpc2lvbkluZm8ucmV2aXNpb24gOiAiIjsK
LSAgICB2YXIgbGluZU51bWJlciA9IGxpbmVOdW1iZXIgPyAiI0wiICsgbGluZU51bWJlciA6ICIi
OwotICAgIHZhciBicmFuY2ggPSByZXZpc2lvbkluZm8uYnJhbmNoIHx8ICJ0cnVuayI7Ci0gICAg
dmFyIHdpdGhCbGFtZSA9IGFubm90YXRlQmxhbWUgPyAiJmFtcDthbm5vdGF0ZT1ibGFtZSIgOiAi
IjsKLSAgICByZXR1cm4gYGh0dHBzOi8vdHJhYy53ZWJraXQub3JnL2Jyb3dzZXIvJHticmFuY2h9
LyR7cGF0aH0ke3JldmlzaW9ufSR7d2l0aEJsYW1lfSR7bGluZU51bWJlcn1gOwotfQotCi0vLyBN
QVJLOiBYY29kZQotCi1mdW5jdGlvbiB4Y29kZUFjdGl2ZURvY3VtZW50KCkKLXsKLSAgICB2YXIg
eGNvZGUgPSBBcHBsaWNhdGlvbigiWGNvZGUiKTsKLSAgICB2YXIgd2luZG93cyA9IHhjb2RlLndp
bmRvd3MoKTsKLSAgICB2YXIgbnVtYmVyT2ZXaW5kb3dzID0gd2luZG93cy5sZW5ndGg7Ci0gICAg
aWYgKCFudW1iZXJPZldpbmRvd3MpCi0gICAgICAgIHJldHVybiBudWxsOwotCi0gICAgLy8gVGhl
IHRpdGxlIG9mIGFuIFhjb2RlIFdvcmtzcGFjZSB3aW5kb3cgaXMgdGhlIHRpdGxlIG9mIHRoZSBk
b2N1bWVudCBpbiB0aGUgZWRpdG9yIHBhbmUuCi0gICAgLy8gSWdub3JlIHdpbmRvd3Mgd2l0aG91
dCBhIG5hbWUgKGUuZy4gIkVkaXQgYWxsIG9jY3VycmVuY2VzIG9mIGEgc3ltYm9sIiBwb3AtdXAg
bWVudSkuCi0gICAgdmFyIGRvY3VtZW50TmFtZTsKLSAgICBmb3IgKHZhciBpID0gMDsgIWRvY3Vt
ZW50TmFtZSAmYW1wOyZhbXA7IGkgJmx0OyBudW1iZXJPZldpbmRvd3M7ICsraSkKLSAgICAgICAg
ZG9jdW1lbnROYW1lID0gd2luZG93c1tpXS5uYW1lKCk7Ci0gICAgaWYgKCFkb2N1bWVudE5hbWUp
Ci0gICAgICAgIHJldHVybiBudWxsOwotCi0gICAgLy8gVGhlIHRpdGxlIG9mIGEgbW9kaWZpZWQg
ZG9jdW1lbnQgdGhhdCBoYXMgbm90IGJlZW4gc2F2ZWQgd2lsbCBoYXZlIGEgc3VmZml4LiBSZW1v
dmUKLSAgICAvLyB0aGUgc3VmZml4LgotICAgIGNvbnN0IGVkaXRlZFN1ZmZpeCA9ICIg4oCUIEVk
aXRlZCI7Ci0gICAgaWYgKGRvY3VtZW50TmFtZS5lbmRzV2l0aChlZGl0ZWRTdWZmaXgpKQotICAg
ICAgICBkb2N1bWVudE5hbWUgPSBkb2N1bWVudE5hbWUuc3Vic3RyKDAsIGRvY3VtZW50TmFtZS5s
YXN0SW5kZXhPZihlZGl0ZWRTdWZmaXgpKTsKLSAgICByZXR1cm4geGNvZGUuZG9jdW1lbnRzLmJ5
TmFtZShkb2N1bWVudE5hbWUpOwotfQotCi1mdW5jdGlvbiB4Y29kZVNlbGVjdGVkTGluZUluRG9j
dW1lbnQoeGNvZGVEb2N1bWVudCkKLXsKLSAgICBpZiAoIXhjb2RlRG9jdW1lbnQpCi0gICAgICAg
IHJldHVybiAtMTsKLSAgICB2YXIgcmFuZ2UgPSB4Y29kZURvY3VtZW50LnNlbGVjdGVkQ2hhcmFj
dGVyUmFuZ2UoKTsKLSAgICBpZiAoIXJhbmdlKQotICAgICAgICByZXR1cm4gLTE7Ci0gICAgdmFy
IGJlZ2luUG9zaXRpb24gPSByYW5nZVswXSAtIDE7Ci0gICAgaWYgKCFiZWdpblBvc2l0aW9uKQot
ICAgICAgICByZXR1cm4gMDsKLSAgICAvLyBGSVhNRTogSXQgd291bGQgYmUgbW9yZSBlZmZpY2ll
bnQgdG8gY291bnQgdGhlIENSTEYsIENSLCBvciBMRiBjaGFyYWN0ZXJzCi0gICAgLy8gaW4gdGhl
IHN1YnN0cmluZyBmcm9tIFswLCBiZWdpblBvc2l0aW9uXS4KLSAgICB2YXIgbGluZXMgPSB4Y29k
ZURvY3VtZW50LnRleHQoKS5zcGxpdCgvXHI/XG58XHIvKTsKLSAgICB2YXIgbnVtYmVyT2ZMaW5l
cyA9IGxpbmVzLmxlbmd0aDsKLSAgICB2YXIgY2hhcmFjdGVyQ291bnQgPSAwOwotICAgIHZhciBp
ID0gMDsKLSAgICBkbyB7Ci0gICAgICAgIGNoYXJhY3RlckNvdW50ICs9IGxpbmVzW2ldLmxlbmd0
aCArIDE7Ci0gICAgICAgIGlmIChjaGFyYWN0ZXJDb3VudCAmZ3Q7IGJlZ2luUG9zaXRpb24pCi0g
ICAgICAgICAgICBicmVhazsKLSAgICB9IHdoaWxlICgrK2kgJmx0OyBudW1iZXJPZkxpbmVzKTsK
LSAgICByZXR1cm4gaSArIDE7Ci19Ci0KLS8vIE1BUks6IFZDUyB1dGlsaXRpZXMKLQotZnVuY3Rp
b24gZGV0ZXJtaW5lVkNTRnJvbVBhdGgocGF0aCkKLXsKLSAgICBpZiAoIWlzRGlyZWN0b3J5KHBh
dGgpKQotICAgICAgICBwYXRoID0gZGlybmFtZShwYXRoKTsKLQotICAgIGdfaXNTVk4gPSBmYWxz
ZTsKLSAgICBnX2lzR2l0ID0gZmFsc2U7Ci0gICAgZ19pc0dpdFNWTiA9IGZhbHNlOwotCi0gICAg
aWYgKGlzU1ZORGlyZWN0b3J5KHBhdGgpKSB7Ci0gICAgICAgIGdfaXNTVk4gPSB0cnVlOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGlzR2l0U1ZORGlyZWN0b3J5KHBhdGgpKSB7
Ci0gICAgICAgIGdfaXNHaXQgPSB0cnVlOwotICAgICAgICBnX2lzR2l0U1ZOID0gdHJ1ZTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChpc0dpdERpcmVjdG9yeShwYXRoKSkgewot
ICAgICAgICBnX2lzR2l0ID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLX0KLQotZnVu
Y3Rpb24gcGF0aFJlbGF0aXZlVG9SZXBvc2l0b3J5Um9vdEZvclBhdGgocGF0aCkKLXsKLSAgICB2
YXIgZGlyZWN0b3J5SW5DaGVja291dCA9IGlzRGlyZWN0b3J5KHBhdGgpID8gcGF0aCA6IGRpcm5h
bWUocGF0aCk7Ci0gICAgaWYgKGdfaXNTVk4pCi0gICAgICAgIHJldHVybiBzdm5QYXRoUmVsYXRp
dmVUb1JlcG9zaXRvcnlSb290Rm9yUGF0aChwYXRoLCBkaXJlY3RvcnlJbkNoZWNrb3V0KTsKLSAg
ICBpZiAoZ19pc0dpdCkKLSAgICAgICAgcmV0dXJuIGdpdFBhdGhSZWxhdGl2ZVRvUmVwb3NpdG9y
eVJvb3RGb3JQYXRoKHBhdGgsIGRpcmVjdG9yeUluQ2hlY2tvdXQpOwotICAgIHJldHVybiAiIjsK
LX0KLQotZnVuY3Rpb24gZ2l0UGF0aFJlbGF0aXZlVG9SZXBvc2l0b3J5Um9vdEZvclBhdGgocGF0
aCwgZGlyZWN0b3J5SW5DaGVja291dCkKLXsKLSAgICByZXR1cm4gQXBwLmRvU2hlbGxTY3JpcHQo
YGdpdCAtQyAnJHtkaXJlY3RvcnlJbkNoZWNrb3V0fScgbHMtdHJlZSAtLWZ1bGwtbmFtZSAtLW5h
bWUtb25seSBIRUFEICcke3BhdGh9J2ApOwotfQotCi1mdW5jdGlvbiBzdm5QYXRoUmVsYXRpdmVU
b1JlcG9zaXRvcnlSb290Rm9yUGF0aChwYXRoLCBkaXJlY3RvcnlJbkNoZWNrb3V0KQotewotICAg
IHJldHVybiBzdm5JbmZvRm9yUGF0aChwYXRoLCBkaXJlY3RvcnlJbkNoZWNrb3V0KS5wYXRoOwot
fQotCi1mdW5jdGlvbiByZXZpc2lvbkluZm9Gb3JQYXRoKHBhdGgpCi17Ci0gICAgdmFyIGRpcmVj
dG9yeUluQ2hlY2tvdXQgPSBpc0RpcmVjdG9yeShwYXRoKSA/IHBhdGggOiBkaXJuYW1lKHBhdGgp
OwotICAgIGlmIChnX2lzU1ZOIHx8IGdfaXNHaXRTVk4pCi0gICAgICAgIHJldHVybiBzdm5SZXZp
c2lvbkluZm9Gb3JQYXRoKHBhdGgsIGRpcmVjdG9yeUluQ2hlY2tvdXQpOwotICAgIGlmIChnX2lz
R2l0KQotICAgICAgICByZXR1cm4gZ2l0UmV2aXNpb25JbmZvRm9yUGF0aChwYXRoLCBkaXJlY3Rv
cnlJbkNoZWNrb3V0KTsKLSAgICByZXR1cm4gIiI7Ci19Ci0KLWZ1bmN0aW9uIHN2blJldmlzaW9u
SW5mb0ZvclBhdGgocGF0aCwgZGlyZWN0b3J5SW5DaGVja291dCkKLXsKLSAgICB2YXIgc3ZuSW5m
byA9IHN2bkluZm9Gb3JQYXRoKHBhdGgsIGRpcmVjdG9yeUluQ2hlY2tvdXQpOwotICAgIHJldHVy
biB7ICJicmFuY2giOiBzdm5JbmZvLmJyYW5jaCwgInJldmlzaW9uIjogc3ZuSW5mby5yZXZpc2lv
biwgInJlcG9zaXRvcnlVUkwiOiBzdm5JbmZvLnJlcG9zaXRvcnlSb290IH07Ci19Ci0KLWZ1bmN0
aW9uIGdpdFJldmlzaW9uSW5mb0ZvclBhdGgocGF0aCwgZGlyZWN0b3J5SW5DaGVja291dCkKLXsK
LSAgICB2YXIgcmVwb3NpdG9yeVVSTCA9IEFwcC5kb1NoZWxsU2NyaXB0KGBnaXQgLUMgJyR7ZGly
ZWN0b3J5SW5DaGVja291dH0nIHJlbW90ZSBnZXQtdXJsIG9yaWdpbmApOwotICAgIHZhciByZXZp
c2lvbiA9IEFwcC5kb1NoZWxsU2NyaXB0KGBnaXQgLUMgJyR7ZGlyZWN0b3J5SW5DaGVja291dH0n
IGxvZyAtMSAtLWZvcm1hdD0nJUgnICcke3BhdGh9J2ApOwotICAgIHZhciBicmFuY2ggPSBBcHAu
ZG9TaGVsbFNjcmlwdChgZ2l0IC1DICcke2RpcmVjdG9yeUluQ2hlY2tvdXR9JyBzeW1ib2xpYy1y
ZWYgLXEgSEVBRGApOwotICAgIGJyYW5jaCA9IGJyYW5jaC5yZXBsYWNlKC9ecmVmc1wvaGVhZHNc
Ly8sICIiKSB8fCAibWFzdGVyIjsKLSAgICByZXR1cm4geyBicmFuY2gsIHJldmlzaW9uLCByZXBv
c2l0b3J5VVJMIH07Ci19Ci0KLWZ1bmN0aW9uIHN2bkluZm9Gb3JQYXRoKHBhdGgsIGRpcmVjdG9y
eUluQ2hlY2tvdXQpCi17Ci0gICAgaWYgKGdfbGFzdFNWTkluZm8gJmFtcDsmYW1wOyBnX2xhc3RT
Vk5JbmZvLnBhdGggPT09IHBhdGgpIHsKLSAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBhbHNv
IGVuc3VyZSB0aGF0IHRoZSBjaGVja291dCBkaXJlY3RvcnkgZm9yIHRoZSBjYWNoZWQgU1ZOIGlu
Zm8gaXMKLSAgICAgICAgLy8gdGhlIHNhbWUgYXMgdGhlIHNwZWNpZmllZCBjaGVja291dCBkaXJl
Y3RvcnkuCi0gICAgICAgIHJldHVybiBnX2xhc3RTVk5JbmZvOwotICAgIH0KLQotICAgIHZhciBz
dm5JbmZvQ29tbWFuZCA9ICJzdm4gaW5mbyI7Ci0gICAgaWYgKGdfaXNHaXRTVk4pCi0gICAgICAg
IHN2bkluZm9Db21tYW5kID0gImdpdCAiICsgc3ZuSW5mb0NvbW1hbmQ7Ci0gICAgdmFyIG91dHB1
dCA9IEFwcC5kb1NoZWxsU2NyaXB0KGBjZCAnJHtkaXJlY3RvcnlJbkNoZWNrb3V0fScgJmFtcDsm
YW1wOyAke3N2bkluZm9Db21tYW5kfSAnJHtwYXRofSdgLCB7ImFsdGVyaW5nTGluZUVuZGluZ3Mi
OiBmYWxzZX0pOwotICAgIGlmICghb3V0cHV0KQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAg
dmFyIHRlbXAgPSB7IH07Ci0gICAgdmFyIGxpbmVzID0gb3V0cHV0LnNwbGl0KCJcbiIpOwotICAg
IGZvciAodmFyIGxpbmUgb2YgbGluZXMpIHsKLSAgICAgICAgdmFyIFtrZXksIHZhbHVlXSA9IGxp
bmUuc3BsaXQoIjogIiwgMik7Ci0gICAgICAgIGlmIChrZXkgJmFtcDsmYW1wOyB2YWx1ZSkKLSAg
ICAgICAgICAgIHRlbXBba2V5XSA9IHZhbHVlOwotICAgIH0KLSAgICB2YXIgc3ZuSW5mbyA9IHsK
LSAgICAgICAgInBhdGhBc1VSTCI6IHRlbXBbIlVSTCJdLAotICAgICAgICAicmVwb3NpdG9yeVJv
b3QiOiB0ZW1wWyJSZXBvc2l0b3J5IFJvb3QiXSwKLSAgICAgICAgInJldmlzaW9uIjogdGVtcFsi
UmV2aXNpb24iXSwKLSAgICB9OwotICAgIHZhciBicmFuY2ggPSBzdm5JbmZvLnBhdGhBc1VSTC5y
ZXBsYWNlKHN2bkluZm8ucmVwb3NpdG9yeVJvb3QgKyAiLyIsICIiKTsKLSAgICBicmFuY2ggPSBi
cmFuY2guc3Vic3RyKDAsIGJyYW5jaC5pbmRleE9mKCIvIikpOwotICAgIHN2bkluZm8uYnJhbmNo
ID0gYnJhbmNoOwotCi0gICAgLy8gQWx0aG91Z2ggdGVtcHRpbmcgdG8gdXNlIHRlbXBbIlBhdGgi
XSB3ZSBjYW5ub3QgYmVjYXVzZSBpdCBpcyByZWxhdGl2ZSB0byBkaXJlY3RvcnlJbkNoZWNrb3V0
LgotICAgIC8vIEFuZCBkaXJlY3RvcnlJbkNoZWNrb3V0IG1heSBub3QgYmUgdGhlIHRvcC1sZXZl
bCBjaGVja291dCBkaXJlY3RvcnkuIFdlIG5lZWQgdG8gY29tcHV0ZSB0aGUKLSAgICAvLyByZWxh
dGl2ZSBwYXRoIHdpdGggcmVzcGVjdCB0byB0aGUgdG9wLWxldmVsIGNoZWNrb3V0IGRpcmVjdG9y
eS4KLSAgICBzdm5JbmZvLnBhdGggPSBzdm5JbmZvLnBhdGhBc1VSTC5yZXBsYWNlKGAke3N2bklu
Zm8ucmVwb3NpdG9yeVJvb3R9LyR7YnJhbmNofS9gLCAiIik7Ci0KLSAgICBnX2xhc3RTVk5JbmZv
ID0gc3ZuSW5mbzsKLQotICAgIHJldHVybiBzdm5JbmZvOwotfQotCi1mdW5jdGlvbiBpc1NWTkRp
cmVjdG9yeShkaXJlY3RvcnkpCi17Ci0gICAgdHJ5IHsKLSAgICAgICAgQXBwLmRvU2hlbGxTY3Jp
cHQoYGNkICcke2RpcmVjdG9yeX0nICZhbXA7JmFtcDsgc3ZuIGluZm8gJmd0OyAvZGV2L251bGwg
MiZndDsmYW1wOzFgKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSBjYXRjaCAoZSkgewot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1mdW5jdGlvbiBpc0dpdERpcmVjdG9y
eShkaXJlY3RvcnkpCi17Ci0gICAgdHJ5IHsKLSAgICAgICAgQXBwLmRvU2hlbGxTY3JpcHQoYGdp
dCAtQyAnJHtkaXJlY3Rvcnl9JyByZXYtcGFyc2UgJmd0OyAvZGV2L251bGwgMiZndDsmYW1wOzFg
KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSBjYXRjaCAoZSkgewotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotfQotCi1mdW5jdGlvbiBpc0dpdFNWTkRpcmVjdG9yeShkaXJlY3Rv
cnkpCi17Ci0gICAgdmFyIG91dHB1dCA9ICIiOwotICAgIHRyeSB7Ci0gICAgICAgIG91dHB1dCA9
IEFwcC5kb1NoZWxsU2NyaXB0KGBnaXQgLUMgJyR7ZGlyZWN0b3J5fScgY29uZmlnIC0tZ2V0IHN2
bi1yZW1vdGUuc3ZuLmZldGNoIDImZ3Q7JmFtcDsxYCk7Ci0gICAgfSBjYXRjaCAoZSkgeyB9Ci0g
ICAgcmV0dXJuIG91dHB1dCAhPT0gIiI7Ci19Ci0KLS8vIE1BUks6IFV0aWxpdGllcwotCi1mdW5j
dGlvbiBpc0RpcmVjdG9yeShwYXRoKQotewotICAgIHRyeSB7Ci0gICAgICAgIHJldHVybiBBcHAu
aW5mb0ZvcihwYXRoKS5mb2xkZXI7Ci0gICAgfSBjYXRjaCAoZSkgewotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotfQotCi1mdW5jdGlvbiBkaXJuYW1lKHBhdGgpCi17Ci0gICAgcmV0dXJu
IHBhdGguc3Vic3RyKDAsIHBhdGgubGFzdEluZGV4T2YoIi8iKSk7Ci19Ci08L3N0cmluZz4KLQkJ
CQk8L2RpY3Q+Ci0JCQkJPGtleT5CdW5kbGVJZGVudGlmaWVyPC9rZXk+Ci0JCQkJPHN0cmluZz5j
b20uYXBwbGUuQXV0b21hdG9yLlJ1bkphdmFTY3JpcHQ8L3N0cmluZz4KLQkJCQk8a2V5PkNGQnVu
ZGxlVmVyc2lvbjwva2V5PgotCQkJCTxzdHJpbmc+MS4wPC9zdHJpbmc+Ci0JCQkJPGtleT5DYW5T
aG93U2VsZWN0ZWRJdGVtc1doZW5SdW48L2tleT4KLQkJCQk8ZmFsc2UvPgotCQkJCTxrZXk+Q2Fu
U2hvd1doZW5SdW48L2tleT4KLQkJCQk8dHJ1ZS8+Ci0JCQkJPGtleT5DYXRlZ29yeTwva2V5Pgot
CQkJCTxhcnJheT4KLQkJCQkJPHN0cmluZz5BTUNhdGVnb3J5VXRpbGl0aWVzPC9zdHJpbmc+Ci0J
CQkJPC9hcnJheT4KLQkJCQk8a2V5PkNsYXNzIE5hbWU8L2tleT4KLQkJCQk8c3RyaW5nPlJ1bkph
dmFTY3JpcHRBY3Rpb248L3N0cmluZz4KLQkJCQk8a2V5PklucHV0VVVJRDwva2V5PgotCQkJCTxz
dHJpbmc+MEMwNjU1RUYtNzg5My00QTYxLUFERDAtQkE4MDNBRjNDMkNEPC9zdHJpbmc+Ci0JCQkJ
PGtleT5LZXl3b3Jkczwva2V5PgotCQkJCTxhcnJheT4KLQkJCQkJPHN0cmluZz5SdW48L3N0cmlu
Zz4KLQkJCQkJPHN0cmluZz5KYXZhU2NyaXB0PC9zdHJpbmc+Ci0JCQkJPC9hcnJheT4KLQkJCQk8
a2V5Pk91dHB1dFVVSUQ8L2tleT4KLQkJCQk8c3RyaW5nPjVCQUQ4MTQ4LTA3RTAtNEZBMi1BQUEx
LTk5MEE3QkU5MjZGQzwvc3RyaW5nPgotCQkJCTxrZXk+VVVJRDwva2V5PgotCQkJCTxzdHJpbmc+
MjRCRkQ2Q0MtN0E5Ni00MkMyLTg0NjktNUQ4M0ZBOTIxREIyPC9zdHJpbmc+Ci0JCQkJPGtleT5V
bmxvY2FsaXplZEFwcGxpY2F0aW9uczwva2V5PgotCQkJCTxhcnJheT4KLQkJCQkJPHN0cmluZz5B
dXRvbWF0b3I8L3N0cmluZz4KLQkJCQk8L2FycmF5PgotCQkJCTxrZXk+YXJndW1lbnRzPC9rZXk+
Ci0JCQkJPGRpY3Q+Ci0JCQkJCTxrZXk+MDwva2V5PgotCQkJCQk8ZGljdD4KLQkJCQkJCTxrZXk+
ZGVmYXVsdCB2YWx1ZTwva2V5PgotCQkJCQkJPHN0cmluZz5mdW5jdGlvbiBydW4oaW5wdXQsIHBh
cmFtZXRlcnMpIHsKLQkKLQkvLyBZb3VyIHNjcmlwdCBnb2VzIGhlcmUKLQotCXJldHVybiBpbnB1
dDsKLX08L3N0cmluZz4KLQkJCQkJCTxrZXk+bmFtZTwva2V5PgotCQkJCQkJPHN0cmluZz5zb3Vy
Y2U8L3N0cmluZz4KLQkJCQkJCTxrZXk+cmVxdWlyZWQ8L2tleT4KLQkJCQkJCTxzdHJpbmc+MDwv
c3RyaW5nPgotCQkJCQkJPGtleT50eXBlPC9rZXk+Ci0JCQkJCQk8c3RyaW5nPjA8L3N0cmluZz4K
LQkJCQkJCTxrZXk+dXVpZDwva2V5PgotCQkJCQkJPHN0cmluZz4wPC9zdHJpbmc+Ci0JCQkJCTwv
ZGljdD4KLQkJCQk8L2RpY3Q+Ci0JCQkJPGtleT5pc1ZpZXdWaXNpYmxlPC9rZXk+Ci0JCQkJPHRy
dWUvPgotCQkJCTxrZXk+bG9jYXRpb248L2tleT4KLQkJCQk8c3RyaW5nPjQ4MC41MDAwMDA6MzE2
LjAwMDAwMDwvc3RyaW5nPgotCQkJCTxrZXk+bmliUGF0aDwva2V5PgotCQkJCTxzdHJpbmc+L1N5
c3RlbS9MaWJyYXJ5L0F1dG9tYXRvci9SdW4gSmF2YVNjcmlwdC5hY3Rpb24vQ29udGVudHMvUmVz
b3VyY2VzL0Jhc2UubHByb2ovbWFpbi5uaWI8L3N0cmluZz4KLQkJCTwvZGljdD4KLQkJCTxrZXk+
aXNWaWV3VmlzaWJsZTwva2V5PgotCQkJPHRydWUvPgotCQk8L2RpY3Q+Ci0JPC9hcnJheT4KLQk8
a2V5PmNvbm5lY3RvcnM8L2tleT4KLQk8ZGljdC8+Ci0JPGtleT53b3JrZmxvd01ldGFEYXRhPC9r
ZXk+Ci0JPGRpY3Q+Ci0JCTxrZXk+c2VydmljZUFwcGxpY2F0aW9uQnVuZGxlSUQ8L2tleT4KLQkJ
PHN0cmluZz5jb20uYXBwbGUuZHQuWGNvZGU8L3N0cmluZz4KLQkJPGtleT5zZXJ2aWNlQXBwbGlj
YXRpb25QYXRoPC9rZXk+Ci0JCTxzdHJpbmc+L0FwcGxpY2F0aW9ucy9YY29kZS5hcHA8L3N0cmlu
Zz4KLQkJPGtleT5zZXJ2aWNlSW5wdXRUeXBlSWRlbnRpZmllcjwva2V5PgotCQk8c3RyaW5nPmNv
bS5hcHBsZS5BdXRvbWF0b3Iubm90aGluZzwvc3RyaW5nPgotCQk8a2V5PnNlcnZpY2VPdXRwdXRU
eXBlSWRlbnRpZmllcjwva2V5PgotCQk8c3RyaW5nPmNvbS5hcHBsZS5BdXRvbWF0b3Iubm90aGlu
Zzwvc3RyaW5nPgotCQk8a2V5PnNlcnZpY2VQcm9jZXNzZXNJbnB1dDwva2V5PgotCQk8aW50ZWdl
cj4wPC9pbnRlZ2VyPgotCQk8a2V5PndvcmtmbG93VHlwZUlkZW50aWZpZXI8L2tleT4KLQkJPHN0
cmluZz5jb20uYXBwbGUuQXV0b21hdG9yLnNlcnZpY2VzTWVudTwvc3RyaW5nPgotCTwvZGljdD4K
LTwvZGljdD4KLTwvcGxpc3Q+CmRpZmYgLS1naXQgYS9Ub29scy9Db3B5UGVybWFsaW5rL1JFQURN
RSBiL1Rvb2xzL0NvcHlQZXJtYWxpbmsvUkVBRE1FCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA2MzU4YzFmNTJkOGI0NWViOWQ0NWRjYzlhMGFmYTNiMGMxMzBjMzA3Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL0NvcHlQZXJtYWxpbmsv
UkVBRE1FCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotQ29weSBXZWJLaXQgUGVybWFs
aW5rIGlzIGFuIFhjb2RlIHNlcnZpY2UgdGhhdCBjb3BpZXMgdG8gdGhlIENsaXBib2FyZCBhIHBl
cm1hbmVudCBoeXBlcmxpbmsgdG8gdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBsaW5lIGluIHRoZSBh
Y3RpdmUgWGNvZGUgZG9jdW1lbnQuCi0KLVRvIGluc3RhbGw6Ci0KLTEuIERvdWJsZS1jbGljayAi
Q29weSBXZWJLaXQgUGVybWFsaW5rLndvcmtmbG93Ii4KLTIuIEluIHRoZSBkaWFsb2cgdGhhdCBh
cHBlYXJzLCBjbGljayBJbnN0YWxsLCB0aGVuIGNsaWNrIERvbmUuCi0zLiBDaG9vc2UgQXBwbGUg
bWVudSA+IFN5c3RlbSBQcmVmZXJlbmNlcywgY2xpY2sgS2V5Ym9hcmQsIHRoZW4gY2xpY2sgU2hv
cnRjdXRzLgotNC4gU2VsZWN0IFNlcnZpY2VzIG9uIHRoZSBsZWZ0LCBzZWxlY3QgQ29weSBXZWJL
aXQgUGVybWFsaW5rLCBjbGljayBpbiB0aGUgS2V5Ym9hcmQgU2hvcnRjdXQgZmllbGQsIHRoZW4g
cHJlc3MgdGhlIGtleSBjb21iaW5hdGlvbiB0aGF0IHlvdSB3YW50IHRvIHVzZSBhcyB0aGUga2V5
Ym9hcmQgc2hvcnRjdXQuCi0KLUZvciBleGFtcGxlLCBwcmVzcyBDb21tYW5kLCBTaGlmdCwgQ29u
dHJvbCwgYW5kIEMga2V5cyBhdCB0aGUgc2FtZSB0aW1lLgotCi01LiBFbmFibGUgIkNvcHkgV2Vi
S2l0IFBlcm1hbGluayIgdXNpbmcgdGhlIGNoZWNrYm94LgotCi1UaGUgQ29weSBXZWJLaXQgUGVy
bWFsaW5rIHNlcnZpY2Ugd2lsbCBub3cgYXBwZWFyIHVuZGVyIFhjb2RlIG1lbnUgPiBTZXJ2aWNl
cy4KLQotPT0gUGVybWFsaW5rIHRvIGJsYW1lIGhpc3RvcnkgPT0KLQotSG9sZCBkb3duIHRoZSBP
cHRpb24ga2V5IHdoZW4gcnVubmluZyB0aGUgQ29weSBXZWJLaXQgUGVybWFsaW5rIHNlcnZpY2Ug
dG8gZ2VuZXJhdGUgYSBwZXJtYWxpbmsgdG8gdGhlIHNlbGVjdGVkIGxpbmUgaW4gdGhlIGJsYW1l
IGhpc3RvcnkgZm9yIHRoZSBmaWxlLgpkaWZmIC0tZ2l0IGEvVG9vbHMvQ29weVBlcm1hbGluay9T
dWJsaW1lIFRleHQvQ29weVdlYktpdFBlcm1hbGluay9Db250ZXh0LnN1YmxpbWUtbWVudSBiL1Rv
b2xzL0NvcHlQZXJtYWxpbmsvU3VibGltZSBUZXh0L0NvcHlXZWJLaXRQZXJtYWxpbmsvQ29udGV4
dC5zdWJsaW1lLW1lbnUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmIwNzk1M2NjZGYxMmI1NWMzNGU0YmFlMGM4N2Uz
MmE3YzhjMDkzNgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL0NvcHlQZXJtYWxpbmsvU3VibGlt
ZSBUZXh0L0NvcHlXZWJLaXRQZXJtYWxpbmsvQ29udGV4dC5zdWJsaW1lLW1lbnUJCkBAIC0wLDAg
KzEsNCBAQAorWworICAgIHsgImNvbW1hbmQiOiAiY29weV93ZWJfa2l0X3Blcm1hbGluayIgfSwK
KyAgICB7ICJjb21tYW5kIjogImNvcHlfd2ViX2tpdF9wZXJtYWxpbmsiLCAiYXJncyI6IHsgImFu
bm90YXRlX2JsYW1lIjogdHJ1ZSB9LCAiY2FwdGlvbiI6ICJDb3B5IFdlYktpdCBQZXJtYWxpbmsg
dG8gQmxhbWUiIH0sCitdCmRpZmYgLS1naXQgYS9Ub29scy9Db3B5UGVybWFsaW5rL1N1YmxpbWUg
VGV4dC9Db3B5V2ViS2l0UGVybWFsaW5rL0NvcHlXZWJLaXRQZXJtYWxpbmsucHkgYi9Ub29scy9D
b3B5UGVybWFsaW5rL1N1YmxpbWUgVGV4dC9Db3B5V2ViS2l0UGVybWFsaW5rL0NvcHlXZWJLaXRQ
ZXJtYWxpbmsucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWYxYmVlYmE1ZTU5NWVhN2E0YzUyOTA1OTgwMGEwMDVi
MGE2Nzg3NAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL0NvcHlQZXJtYWxpbmsvU3VibGltZSBU
ZXh0L0NvcHlXZWJLaXRQZXJtYWxpbmsvQ29weVdlYktpdFBlcm1hbGluay5weQkKQEAgLTAsMCAr
MSwxNzggQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwK
KyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0
IG9zCitpbXBvcnQgcmUKK2ltcG9ydCBzdWJsaW1lCitpbXBvcnQgc3VibGltZV9wbHVnaW4KK2lt
cG9ydCBzdWJwcm9jZXNzCisKKworY2xhc3MgQ29weVdlYktpdFBlcm1hbGlua0NvbW1hbmQoc3Vi
bGltZV9wbHVnaW4uVGV4dENvbW1hbmQpOgorICAgIGRlZiBydW4oc2VsZiwgZWRpdCwgYW5ub3Rh
dGVfYmxhbWU9RmFsc2UpOgorICAgICAgICBpZiBub3Qgc2VsZi5pc19lbmFibGVkKCk6CisgICAg
ICAgICAgICByZXR1cm4KKworICAgICAgICBkb2N1bWVudF9wYXRoID0gc2VsZi52aWV3LmZpbGVf
bmFtZSgpCisgICAgICAgIHNlbGYuX2xhc3Rfc3ZuX2luZm8gPSBOb25lCisgICAgICAgIHNlbGYu
X2RpcmVjdG9yeV9pbl9jaGVja291dCA9IGRvY3VtZW50X3BhdGggaWYgb3MucGF0aC5pc2Rpcihk
b2N1bWVudF9wYXRoKSBlbHNlIG9zLnBhdGguZGlybmFtZShkb2N1bWVudF9wYXRoKQorICAgICAg
ICBzZWxmLmRldGVybWluZV92Y3NfZnJvbV9wYXRoKGRvY3VtZW50X3BhdGgpCisKKyAgICAgICAg
aWYgbm90IHNlbGYucGF0aF9pc19pbl93ZWJraXRfY2hlY2tvdXQoZG9jdW1lbnRfcGF0aCk6Cisg
ICAgICAgICAgICByZXR1cm4KKworICAgICAgICBsaW5lX251bWJlciwgXyA9IHNlbGYudmlldy5y
b3djb2woc2VsZi52aWV3LnNlbCgpWzBdLmJlZ2luKCkpICAjIFplcm8tYmFzZWQKKyAgICAgICAg
bGluZV9udW1iZXIgPSBsaW5lX251bWJlciArIDEKKworICAgICAgICBwYXRoID0gc2VsZi5wYXRo
X3JlbGF0aXZlX3RvX3JlcG9zaXRvcnlfcm9vdF9mb3JfcGF0aChkb2N1bWVudF9wYXRoKQorICAg
ICAgICByZXZpc2lvbl9pbmZvID0gc2VsZi5yZXZpc2lvbl9pbmZvX2Zvcl9wYXRoKGRvY3VtZW50
X3BhdGgpCisgICAgICAgIHN1YmxpbWUuc2V0X2NsaXBib2FyZChzZWxmLnBlcm1hbGlua19mb3Jf
cGF0aChwYXRoLCBsaW5lX251bWJlciwgcmV2aXNpb25faW5mbywgYW5ub3RhdGVfYmxhbWUpKQor
CisgICAgZGVmIGlzX2VuYWJsZWQoc2VsZik6CisgICAgICAgIHJldHVybiBsZW4oc2VsZi52aWV3
LnNlbCgpKSA+IDAgYW5kIGJvb2woc2VsZi52aWV3LmZpbGVfbmFtZSgpKQorCisgICAgZGVmIGlz
X3Zpc2libGUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmlzX2VuYWJsZWQoKQorCisgICAg
ZGVmIGRlc2NyaXB0aW9uKHNlbGYpOgorICAgICAgICByZXR1cm4gJ0NvcHkgV2ViS2l0IFBlcm1h
bGluaycKKworICAgIGRlZiBkZXRlcm1pbmVfdmNzX2Zyb21fcGF0aChzZWxmLCBwYXRoKToKKyAg
ICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIocGF0aCk6CisgICAgICAgICAgICBwYXRoID0gb3Mu
cGF0aC5kaXJuYW1lKHBhdGgpCisgICAgICAgIHNlbGYuX2lzX3N2biA9IEZhbHNlCisgICAgICAg
IHNlbGYuX2lzX2dpdCA9IEZhbHNlCisgICAgICAgIHNlbGYuX2lzX2dpdF9zdm4gPSBGYWxzZQor
ICAgICAgICBpZiBzZWxmLmlzX3N2bl9kaXJlY3RvcnkocGF0aCk6CisgICAgICAgICAgICBzZWxm
Ll9pc19zdm4gPSBUcnVlCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgc2VsZi5pc19n
aXRfc3ZuX2RpcmVjdG9yeShwYXRoKToKKyAgICAgICAgICAgIHNlbGYuX2lzX2dpdCA9IFRydWUK
KyAgICAgICAgICAgIHNlbGYuX2lzX2dpdF9zdm4gPSBUcnVlCisgICAgICAgICAgICByZXR1cm4K
KyAgICAgICAgaWYgc2VsZi5pc19naXRfZGlyZWN0b3J5KHBhdGgpOgorICAgICAgICAgICAgc2Vs
Zi5faXNfZ2l0ID0gVHJ1ZQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICBkZWYgcGF0aF9pc19p
bl93ZWJraXRfY2hlY2tvdXQoc2VsZiwgcGF0aCk6CisgICAgICAgIHJlcG9zaXRvcnlfdXJsID0g
c2VsZi5yZXZpc2lvbl9pbmZvX2Zvcl9wYXRoKHBhdGgpLmdldCgncmVwb3NpdG9yeV91cmwnLCAn
JykKKyAgICAgICAgcmV0dXJuIGJvb2wocmUubWF0Y2gocidcdys6XC9cL1x3K1wud2Via2l0Lm9y
ZycsIHJlcG9zaXRvcnlfdXJsKSkKKworICAgIGRlZiBnaXRfcGF0aF9yZWxhdGl2ZV90b19yZXBv
c2l0b3J5X3Jvb3RfZm9yX3BhdGgoc2VsZiwgcGF0aCk6CisgICAgICAgIHJldHVybiBzdWJwcm9j
ZXNzLmNoZWNrX291dHB1dChbJ2dpdCcsICdscy10cmVlJywgJy0tZnVsbC1uYW1lJywgJy0tbmFt
ZS1vbmx5JywgJ0hFQUQnLCBwYXRoXSwgY3dkPXNlbGYuX2RpcmVjdG9yeV9pbl9jaGVja291dCku
ZGVjb2RlKCd1dGYtOCcpLnJzdHJpcCgpCisKKyAgICBkZWYgc3ZuX3BhdGhfcmVsYXRpdmVfdG9f
cmVwb3NpdG9yeV9yb290X2Zvcl9wYXRoKHNlbGYsIHBhdGgpOgorICAgICAgICByZXR1cm4gc2Vs
Zi5zdm5faW5mb19mb3JfcGF0aChwYXRoKVsncGF0aCddCisKKyAgICBkZWYgcGF0aF9yZWxhdGl2
ZV90b19yZXBvc2l0b3J5X3Jvb3RfZm9yX3BhdGgoc2VsZiwgcGF0aCk6CisgICAgICAgIGlmIHNl
bGYuX2lzX3N2bjoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnN2bl9wYXRoX3JlbGF0aXZlX3Rv
X3JlcG9zaXRvcnlfcm9vdF9mb3JfcGF0aChwYXRoKQorICAgICAgICBpZiBzZWxmLl9pc19naXQ6
CisgICAgICAgICAgICByZXR1cm4gc2VsZi5naXRfcGF0aF9yZWxhdGl2ZV90b19yZXBvc2l0b3J5
X3Jvb3RfZm9yX3BhdGgocGF0aCkKKyAgICAgICAgcmV0dXJuICcnCisKKyAgICBkZWYgcmV2aXNp
b25faW5mb19mb3JfcGF0aChzZWxmLCBwYXRoKToKKyAgICAgICAgaWYgc2VsZi5faXNfc3ZuIG9y
IHNlbGYuX2lzX2dpdF9zdm46CisgICAgICAgICAgICByZXR1cm4gc2VsZi5zdm5fcmV2aXNpb25f
aW5mb19mb3JfcGF0aChwYXRoKQorICAgICAgICBpZiBzZWxmLl9pc19naXQ6CisgICAgICAgICAg
ICByZXR1cm4gc2VsZi5naXRfcmV2aXNpb25faW5mb19mb3JfcGF0aChwYXRoKQorICAgICAgICBy
ZXR1cm4ge30KKworICAgIGRlZiBzdm5fcmV2aXNpb25faW5mb19mb3JfcGF0aChzZWxmLCBwYXRo
KToKKyAgICAgICAgc3ZuX2luZm8gPSBzZWxmLnN2bl9pbmZvX2Zvcl9wYXRoKHBhdGgpCisgICAg
ICAgIHJldHVybiB7J2JyYW5jaCc6IHN2bl9pbmZvWydicmFuY2gnXSwgJ3JldmlzaW9uJzogc3Zu
X2luZm9bJ3JldmlzaW9uJ10sICdyZXBvc2l0b3J5X3VybCc6IHN2bl9pbmZvWydyZXBvc2l0b3J5
Um9vdCddfQorCisgICAgZGVmIGdpdF9yZXZpc2lvbl9pbmZvX2Zvcl9wYXRoKHNlbGYsIHBhdGgp
OgorICAgICAgICByZXBvc2l0b3J5X3VybCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsnZ2l0
JywgJ3JlbW90ZScsICdnZXQtdXJsJywgJ29yaWdpbiddLCBjd2Q9c2VsZi5fZGlyZWN0b3J5X2lu
X2NoZWNrb3V0KS5kZWNvZGUoJ3V0Zi04JykucnN0cmlwKCkKKyAgICAgICAgcmV2aXNpb24gPSBz
dWJwcm9jZXNzLmNoZWNrX291dHB1dChbJ2dpdCcsICdsb2cnLCAnLTEnLCAnLS1mb3JtYXQnLCAn
JUgnLCBwYXRoXSwgY3dkPXNlbGYuX2RpcmVjdG9yeV9pbl9jaGVja291dCkuZGVjb2RlKCd1dGYt
OCcpLnJzdHJpcCgpCisgICAgICAgIGJyYW5jaCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsn
Z2l0JywgJ3N5bWJvbGljLXJlZicsICctcScsICdIRUFEJ10sIGN3ZD1zZWxmLl9kaXJlY3Rvcnlf
aW5fY2hlY2tvdXQpLmRlY29kZSgndXRmLTgnKS5yc3RyaXAoKQorICAgICAgICBicmFuY2ggPSBy
ZS5zdWIocidecmVmc1wvaGVhZHNcLycsICcnLCBicmFuY2gpIG9yICdtYXN0ZXInCisgICAgICAg
IHJldHVybiB7YnJhbmNoLCByZXZpc2lvbiwgcmVwb3NpdG9yeV91cmx9CisKKyAgICBkZWYgc3Zu
X2luZm9fZm9yX3BhdGgoc2VsZiwgcGF0aCk6CisgICAgICAgIGlmIHNlbGYuX2xhc3Rfc3ZuX2lu
Zm8gYW5kIHNlbGYuX2xhc3Rfc3ZuX2luZm9bJ3BhdGgnXSA9PSBwYXRoOgorICAgICAgICAgICAg
IyBGSVhNRTogV2Ugc2hvdWxkIGFsc28gZW5zdXJlIHRoYXQgdGhlIGNoZWNrb3V0IGRpcmVjdG9y
eSBmb3IgdGhlIGNhY2hlZCBTVk4gaW5mbyBpcworICAgICAgICAgICAgIyB0aGUgc2FtZSBhcyB0
aGUgc3BlY2lmaWVkIGNoZWNrb3V0IGRpcmVjdG9yeS4KKyAgICAgICAgICAgIHJldHVybiBzZWxm
Ll9sYXN0X3N2bl9pbmZvCisKKyAgICAgICAgc3ZuX2luZm9fY29tbWFuZCA9IFsnc3ZuJywgJ2lu
Zm8nXQorICAgICAgICBpZiBzZWxmLl9pc19naXRfc3ZuOgorICAgICAgICAgICAgc3ZuX2luZm9f
Y29tbWFuZCA9IFsnZ2l0J10gKyBzdm5faW5mb19jb21tYW5kCisgICAgICAgIG91dHB1dCA9IHN1
YnByb2Nlc3MuY2hlY2tfb3V0cHV0KHN2bl9pbmZvX2NvbW1hbmQgKyBbcGF0aF0sIGN3ZD1zZWxm
Ll9kaXJlY3RvcnlfaW5fY2hlY2tvdXQpLmRlY29kZSgndXRmLTgnKS5yc3RyaXAoKQorICAgICAg
ICBpZiBub3Qgb3V0cHV0OgorICAgICAgICAgICAgcmV0dXJuIHt9CisKKyAgICAgICAgdGVtcCA9
IHt9CisgICAgICAgIGxpbmVzID0gb3V0cHV0LnNwbGl0bGluZXMoKQorICAgICAgICBmb3IgbGlu
ZSBpbiBsaW5lczoKKyAgICAgICAgICAgIGtleSwgdmFsdWUgPSBsaW5lLnNwbGl0KCc6ICcsIDEp
CisgICAgICAgICAgICBpZiBrZXkgYW5kIHZhbHVlOgorICAgICAgICAgICAgICAgIHRlbXBba2V5
XSA9IHZhbHVlCisKKyAgICAgICAgc3ZuX2luZm8gPSB7CisgICAgICAgICAgICAncGF0aEFzVVJM
JzogdGVtcFsnVVJMJ10sCisgICAgICAgICAgICAncmVwb3NpdG9yeVJvb3QnOiB0ZW1wWydSZXBv
c2l0b3J5IFJvb3QnXSwKKyAgICAgICAgICAgICdyZXZpc2lvbic6IHRlbXBbJ1JldmlzaW9uJ10s
CisgICAgICAgIH0KKyAgICAgICAgYnJhbmNoID0gc3ZuX2luZm9bJ3BhdGhBc1VSTCddLnJlcGxh
Y2Uoc3ZuX2luZm9bJ3JlcG9zaXRvcnlSb290J10gKyAnLycsICcnKQorICAgICAgICBicmFuY2gg
PSBicmFuY2hbMDpicmFuY2guZmluZCgnLycpXQorICAgICAgICBzdm5faW5mb1snYnJhbmNoJ10g
PSBicmFuY2gKKworICAgICAgICAjIEFsdGhvdWdoIHRlbXB0aW5nIHRvIHVzZSB0ZW1wWydQYXRo
J10gd2UgY2Fubm90IGJlY2F1c2UgaXQgaXMgcmVsYXRpdmUgdG8gc2VsZi5fZGlyZWN0b3J5X2lu
X2NoZWNrb3V0LgorICAgICAgICAjIEFuZCBzZWxmLl9kaXJlY3RvcnlfaW5fY2hlY2tvdXQgbWF5
IG5vdCBiZSB0aGUgdG9wLWxldmVsIGNoZWNrb3V0IGRpcmVjdG9yeS4gV2UgbmVlZCB0byBjb21w
dXRlIHRoZQorICAgICAgICAjIHJlbGF0aXZlIHBhdGggd2l0aCByZXNwZWN0IHRvIHRoZSB0b3At
bGV2ZWwgY2hlY2tvdXQgZGlyZWN0b3J5LgorICAgICAgICBzdm5faW5mb1sncGF0aCddID0gc3Zu
X2luZm9bJ3BhdGhBc1VSTCddLnJlcGxhY2UoJ3t9L3t9LycuZm9ybWF0KHN2bl9pbmZvWydyZXBv
c2l0b3J5Um9vdCddLCBicmFuY2gpLCAnJykKKworICAgICAgICBzZWxmLl9sYXN0X3N2bl9pbmZv
ID0gc3ZuX2luZm8KKworICAgICAgICByZXR1cm4gc3ZuX2luZm8KKworICAgIEBzdGF0aWNtZXRo
b2QKKyAgICBkZWYgcGVybWFsaW5rX2Zvcl9wYXRoKHBhdGgsIGxpbmVfbnVtYmVyLCByZXZpc2lv
bl9pbmZvLCBhbm5vdGF0ZV9ibGFtZSk6CisgICAgICAgIHJldmlzaW9uID0gJz9yZXY9JyArIHN0
cihyZXZpc2lvbl9pbmZvWydyZXZpc2lvbiddKSBpZiByZXZpc2lvbl9pbmZvWydyZXZpc2lvbidd
IGVsc2UgJycKKyAgICAgICAgbGluZV9udW1iZXIgPSAnI0wnICsgc3RyKGxpbmVfbnVtYmVyKSBp
ZiBsaW5lX251bWJlciBlbHNlICcnCisgICAgICAgIGJyYW5jaCA9IHJldmlzaW9uX2luZm9bJ2Jy
YW5jaCddIG9yICd0cnVuaycKKyAgICAgICAgYW5ub3RhdGVfYmxhbWUgPSAnJmFubm90YXRlPWJs
YW1lJyBpZiBhbm5vdGF0ZV9ibGFtZSBlbHNlICcnCisgICAgICAgIHJldHVybiAnaHR0cHM6Ly90
cmFjLndlYmtpdC5vcmcvYnJvd3Nlci97fS97fXt9e317fScuZm9ybWF0KGJyYW5jaCwgcGF0aCwg
cmV2aXNpb24sIGFubm90YXRlX2JsYW1lLCBsaW5lX251bWJlcikKKworICAgIEBzdGF0aWNtZXRo
b2QKKyAgICBkZWYgaXNfc3ZuX2RpcmVjdG9yeShkaXJlY3RvcnkpOgorICAgICAgICB0cnk6Cisg
ICAgICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX2NhbGwoWydzdm4nLCAnaW5mbyddLCBjd2Q9ZGly
ZWN0b3J5KQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAg
ICAgcmV0dXJuIFRydWUKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgaXNfZ2l0X2RpcmVj
dG9yeShkaXJlY3RvcnkpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzdWJwcm9jZXNzLmNo
ZWNrX2NhbGwoWydnaXQnLCAncmV2LXBhcnNlJ10sIGN3ZD1kaXJlY3RvcnkpCisgICAgICAgIGV4
Y2VwdDoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gVHJ1ZQorCisg
ICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBpc19naXRfc3ZuX2RpcmVjdG9yeShkaXJlY3Rvcnkp
OgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gYm9vbChzdWJwcm9jZXNzLmNoZWNr
X291dHB1dChbJ2dpdCcsICdjb25maWcnLCAnLS1nZXQnLCAnc3ZuLXJlbW90ZS5zdm4uZmV0Y2gn
XSwgY3dkPWRpcmVjdG9yeSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKS5kZWNvZGUoJ3V0Zi04
JykucnN0cmlwKCkpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQpk
aWZmIC0tZ2l0IGEvVG9vbHMvQ29weVBlcm1hbGluay9TdWJsaW1lIFRleHQvQ29weVdlYktpdFBl
cm1hbGluay9EZWZhdWx0IChPU1gpLnN1YmxpbWUta2V5bWFwIGIvVG9vbHMvQ29weVBlcm1hbGlu
ay9TdWJsaW1lIFRleHQvQ29weVdlYktpdFBlcm1hbGluay9EZWZhdWx0IChPU1gpLnN1YmxpbWUt
a2V5bWFwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmMwOGIwNmI2ZjhmYzAzMjg3MzRiMjczODZjNTdjNTM2Y2Y1NmJl
NjMKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9Db3B5UGVybWFsaW5rL1N1YmxpbWUgVGV4dC9D
b3B5V2ViS2l0UGVybWFsaW5rL0RlZmF1bHQgKE9TWCkuc3VibGltZS1rZXltYXAJCkBAIC0wLDAg
KzEsNCBAQAorWworCXsgImtleXMiOiBbInN1cGVyK2N0cmwrc2hpZnQrYyJdLCAiY29tbWFuZCI6
ICJjb3B5X3dlYl9raXRfcGVybWFsaW5rIiB9LAorICAgIHsgImtleXMiOiBbInN1cGVyK2N0cmwr
b3B0aW9uK3NoaWZ0K2MiXSwgImNvbW1hbmQiOiAiY29weV93ZWJfa2l0X3Blcm1hbGluayIsICJh
cmdzIjogeyAiYW5ub3RhdGVfYmxhbWUiOiB0cnVlIH0gfQorXQpkaWZmIC0tZ2l0IGEvVG9vbHMv
Q29weVBlcm1hbGluay9TdWJsaW1lIFRleHQvSU5TVEFMTCBiL1Rvb2xzL0NvcHlQZXJtYWxpbmsv
U3VibGltZSBUZXh0L0lOU1RBTEwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDI3ZjFmZmI1NjViYzZiZGQ2NGI0MDdk
ODg1YzE5OTg3MTY1ODlkMwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL0NvcHlQZXJtYWxpbmsv
U3VibGltZSBUZXh0L0lOU1RBTEwJCkBAIC0wLDAgKzEsMTQgQEAKK0NvcHkgV2ViS2l0IFBlcm1h
bGluayBpcyBhIFN1YmxpbWUgVGV4dCBwbHVnaW4gdGhhdCBjb3BpZXMgdG8gdGhlIENsaXBib2Fy
ZCBhIHBlcm1hbmVudCBoeXBlcmxpbmsgdG8gdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBsaW5lIGlu
IHRoZSBhY3RpdmUgZG9jdW1lbnQuCisKKz09IEhvdyB0byBpbnN0YWxsID09CisKK0NvcHkgdGhl
IGRpcmVjdG9yeSBDb3B5V2ViS2l0UGVybWFsaW5rIChsb2NhdGVkIGluIHRoZSBzYW1lIGRpcmVj
dG9yeSBhcyB0aGlzIGZpbGUpIHRvIHlvdXIgUGFja2FnZXMgZGlyZWN0b3J5LiBPbiBNYWMsIHlv
dSBjYW4gb3BlbiB5b3VyIFBhY2thZ2VzIGRpcmVjdG9yeSBieSBsYXVuY2hpbmcgU3VibGltZSBU
ZXh0IGFuZCBjaG9vc2luZyBTdWJsaW1lIFRleHQgPiBQcmVmZXJlbmNlcyA+IEJyb3dzZSBQYWNr
YWdlcyBmcm9tIHRoZSBtZW51IGJhci4KKworPT0gSG93IHRvIHVzZSA9PQorCitDb250cm9sLWNs
aWNrIChvbiBNYWMpIG9yIHJpZ2h0LWNsaWNrIChvbiBMaW51eCBhbmQgV2luZG93cykgb24gYSBs
aW5lIGFuZCBzZWxlY3QgQ29weSBXZWJLaXQgUGVybWFsaW5rIG9yIENvcHkgV2ViS2l0IFBlcm1h
bGluayB0byBCbGFtZSBmcm9tIHRoZSBjb250ZXh0IG1lbnUgdG8gY29weSB0byB0aGUgQ2xpcGJv
YXJkIGEgcGVybWFuZW50IGh5cGVybGluayB0byB0aGUgc2VsZWN0ZWQgbGluZSB3aXRob3V0IG9y
IHdpdGggYmxhbWUgYW5ub3RhdGlvbnMsIHJlc3BlY3RpdmVseS4KKworPT0gS2V5IGJpbmRpbmdz
IGZvciBNYWMgPT0KKworV2l0aG91dCBibGFtZSBhbm5vdGF0aW9uczogQ29tbWFuZCArIFNoaWZ0
ICsgQ29udHJvbCArIEMKK1dpdGggYmxhbWUgYW5ub3RhdGlvbnM6IENvbW1hbmQgKyBTaGlmdCAr
IENvbnRyb2wgKyBPcHRpb24gKyBDCmRpZmYgLS1naXQgYS9Ub29scy9Db3B5UGVybWFsaW5rL1hj
b2RlL0NvcHkgV2ViS2l0IFBlcm1hbGluay53b3JrZmxvdy9Db250ZW50cy9JbmZvLnBsaXN0IGIv
VG9vbHMvQ29weVBlcm1hbGluay9YY29kZS9Db3B5IFdlYktpdCBQZXJtYWxpbmsud29ya2Zsb3cv
Q29udGVudHMvSW5mby5wbGlzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41OWQyNmE0YzhjNDNjZjA5YjBmYjA0NzMx
YzE1OTAzYTM1ZjIzNThjCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvQ29weVBlcm1hbGluay9Y
Y29kZS9Db3B5IFdlYktpdCBQZXJtYWxpbmsud29ya2Zsb3cvQ29udGVudHMvSW5mby5wbGlzdAkK
QEAgLTAsMCArMSwyMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4K
KzwhRE9DVFlQRSBwbGlzdCBQVUJMSUMgIi0vL0FwcGxlLy9EVEQgUExJU1QgMS4wLy9FTiIgImh0
dHA6Ly93d3cuYXBwbGUuY29tL0RURHMvUHJvcGVydHlMaXN0LTEuMC5kdGQiPgorPHBsaXN0IHZl
cnNpb249IjEuMCI+Cis8ZGljdD4KKwk8a2V5Pk5TU2VydmljZXM8L2tleT4KKwk8YXJyYXk+CisJ
CTxkaWN0PgorCQkJPGtleT5OU01lbnVJdGVtPC9rZXk+CisJCQk8ZGljdD4KKwkJCQk8a2V5PmRl
ZmF1bHQ8L2tleT4KKwkJCQk8c3RyaW5nPkNvcHkgV2ViS2l0IFBlcm1hbGluazwvc3RyaW5nPgor
CQkJPC9kaWN0PgorCQkJPGtleT5OU01lc3NhZ2U8L2tleT4KKwkJCTxzdHJpbmc+cnVuV29ya2Zs
b3dBc1NlcnZpY2U8L3N0cmluZz4KKwkJCTxrZXk+TlNSZXF1aXJlZENvbnRleHQ8L2tleT4KKwkJ
CTxkaWN0PgorCQkJCTxrZXk+TlNBcHBsaWNhdGlvbklkZW50aWZpZXI8L2tleT4KKwkJCQk8c3Ry
aW5nPmNvbS5hcHBsZS5kdC5YY29kZTwvc3RyaW5nPgorCQkJPC9kaWN0PgorCQk8L2RpY3Q+CisJ
PC9hcnJheT4KKzwvZGljdD4KKzwvcGxpc3Q+CmRpZmYgLS1naXQgYS9Ub29scy9Db3B5UGVybWFs
aW5rL1hjb2RlL0NvcHkgV2ViS2l0IFBlcm1hbGluay53b3JrZmxvdy9Db250ZW50cy9kb2N1bWVu
dC53ZmxvdyBiL1Rvb2xzL0NvcHlQZXJtYWxpbmsvWGNvZGUvQ29weSBXZWJLaXQgUGVybWFsaW5r
LndvcmtmbG93L0NvbnRlbnRzL2RvY3VtZW50LndmbG93Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjczNjhjMTg3Mjlm
MDg1OGViYzUzNzdhOWE2MzdjY2JiZWYzZmI1YTcKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9D
b3B5UGVybWFsaW5rL1hjb2RlL0NvcHkgV2ViS2l0IFBlcm1hbGluay53b3JrZmxvdy9Db250ZW50
cy9kb2N1bWVudC53ZmxvdwkKQEAgLTAsMCArMSw0MTIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIg
ZW5jb2Rpbmc9IlVURi04Ij8+Cis8IURPQ1RZUEUgcGxpc3QgUFVCTElDICItLy9BcHBsZS8vRFRE
IFBMSVNUIDEuMC8vRU4iICJodHRwOi8vd3d3LmFwcGxlLmNvbS9EVERzL1Byb3BlcnR5TGlzdC0x
LjAuZHRkIj4KKzxwbGlzdCB2ZXJzaW9uPSIxLjAiPgorPGRpY3Q+CisJPGtleT5BTUFwcGxpY2F0
aW9uQnVpbGQ8L2tleT4KKwk8c3RyaW5nPjQyODwvc3RyaW5nPgorCTxrZXk+QU1BcHBsaWNhdGlv
blZlcnNpb248L2tleT4KKwk8c3RyaW5nPjIuNzwvc3RyaW5nPgorCTxrZXk+QU1Eb2N1bWVudFZl
cnNpb248L2tleT4KKwk8c3RyaW5nPjI8L3N0cmluZz4KKwk8a2V5PmFjdGlvbnM8L2tleT4KKwk8
YXJyYXk+CisJCTxkaWN0PgorCQkJPGtleT5hY3Rpb248L2tleT4KKwkJCTxkaWN0PgorCQkJCTxr
ZXk+QU1BY2NlcHRzPC9rZXk+CisJCQkJPGRpY3Q+CisJCQkJCTxrZXk+Q29udGFpbmVyPC9rZXk+
CisJCQkJCTxzdHJpbmc+TGlzdDwvc3RyaW5nPgorCQkJCQk8a2V5Pk9wdGlvbmFsPC9rZXk+CisJ
CQkJCTx0cnVlLz4KKwkJCQkJPGtleT5UeXBlczwva2V5PgorCQkJCQk8YXJyYXk+CisJCQkJCQk8
c3RyaW5nPmNvbS5hcHBsZS5hcHBsZXNjcmlwdC5vYmplY3Q8L3N0cmluZz4KKwkJCQkJPC9hcnJh
eT4KKwkJCQk8L2RpY3Q+CisJCQkJPGtleT5BTUFjdGlvblZlcnNpb248L2tleT4KKwkJCQk8c3Ry
aW5nPjEuMDwvc3RyaW5nPgorCQkJCTxrZXk+QU1BcHBsaWNhdGlvbjwva2V5PgorCQkJCTxhcnJh
eT4KKwkJCQkJPHN0cmluZz5BdXRvbWF0b3I8L3N0cmluZz4KKwkJCQk8L2FycmF5PgorCQkJCTxr
ZXk+QU1QYXJhbWV0ZXJQcm9wZXJ0aWVzPC9rZXk+CisJCQkJPGRpY3Q+CisJCQkJCTxrZXk+c291
cmNlPC9rZXk+CisJCQkJCTxkaWN0Lz4KKwkJCQk8L2RpY3Q+CisJCQkJPGtleT5BTVByb3ZpZGVz
PC9rZXk+CisJCQkJPGRpY3Q+CisJCQkJCTxrZXk+Q29udGFpbmVyPC9rZXk+CisJCQkJCTxzdHJp
bmc+TGlzdDwvc3RyaW5nPgorCQkJCQk8a2V5PlR5cGVzPC9rZXk+CisJCQkJCTxhcnJheT4KKwkJ
CQkJCTxzdHJpbmc+Y29tLmFwcGxlLmFwcGxlc2NyaXB0Lm9iamVjdDwvc3RyaW5nPgorCQkJCQk8
L2FycmF5PgorCQkJCTwvZGljdD4KKwkJCQk8a2V5PkFjdGlvbkJ1bmRsZVBhdGg8L2tleT4KKwkJ
CQk8c3RyaW5nPi9TeXN0ZW0vTGlicmFyeS9BdXRvbWF0b3IvUnVuIEphdmFTY3JpcHQuYWN0aW9u
PC9zdHJpbmc+CisJCQkJPGtleT5BY3Rpb25OYW1lPC9rZXk+CisJCQkJPHN0cmluZz5SdW4gSmF2
YVNjcmlwdDwvc3RyaW5nPgorCQkJCTxrZXk+QWN0aW9uUGFyYW1ldGVyczwva2V5PgorCQkJCTxk
aWN0PgorCQkJCQk8a2V5PnNvdXJjZTwva2V5PgorCQkJCQk8c3RyaW5nPi8qCisgKiAgQ29weXJp
Z2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiAgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiAgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiAgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKK09iakMuaW1wb3J0KCJDb2NvYSIpOworCit2YXIgZ19pc1NWTjsK
K3ZhciBnX2lzR2l0OwordmFyIGdfaXNHaXRTVk47Cit2YXIgZ19sYXN0U1ZOSW5mbzsKKwordmFy
IEFwcCA9IEFwcGxpY2F0aW9uLmN1cnJlbnRBcHBsaWNhdGlvbigpOworQXBwLmluY2x1ZGVTdGFu
ZGFyZEFkZGl0aW9ucyA9IHRydWU7CisKK2Z1bmN0aW9uIHJ1bihpbnB1dCwgcGFyYW1ldGVycykg
eworICAgIHZhciB4Y29kZURvY3VtZW50ID0geGNvZGVBY3RpdmVEb2N1bWVudCgpOworICAgIGlm
ICgheGNvZGVEb2N1bWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgdmFyIHhjb2RlRG9jdW1l
bnRQYXRoID0geGNvZGVEb2N1bWVudC5wYXRoKCk7CisgICAgZGV0ZXJtaW5lVkNTRnJvbVBhdGgo
eGNvZGVEb2N1bWVudFBhdGgpOworCisgICAgaWYgKCFwYXRoSXNJbldlYktpdENoZWNrb3V0KHhj
b2RlRG9jdW1lbnRQYXRoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgdmFyIGxpbmVOdW1iZXIg
PSB4Y29kZVNlbGVjdGVkTGluZUluRG9jdW1lbnQoeGNvZGVEb2N1bWVudCk7CisgICAgdmFyIHBh
dGggPSBwYXRoUmVsYXRpdmVUb1JlcG9zaXRvcnlSb290Rm9yUGF0aCh4Y29kZURvY3VtZW50UGF0
aCk7CisgICAgdmFyIHJldmlzaW9uSW5mbyA9IHJldmlzaW9uSW5mb0ZvclBhdGgoeGNvZGVEb2N1
bWVudFBhdGgpOworICAgIHZhciBhbm5vdGF0ZUJsYW1lID0gJC5OU0V2ZW50Lm1vZGlmaWVyRmxh
Z3MgJmFtcDsgJC5OU0FsdGVybmF0ZUtleU1hc2s7CisKKyAgICBBcHAuc2V0VGhlQ2xpcGJvYXJk
VG8ocGVybWFsaW5rRm9yUGF0aChwYXRoLCBsaW5lTnVtYmVyLCByZXZpc2lvbkluZm8sIGFubm90
YXRlQmxhbWUpKTsKK30KKworZnVuY3Rpb24gcGF0aElzSW5XZWJLaXRDaGVja291dChwYXRoKQor
eworICAgIHZhciByZXBvc2l0b3J5VVJMID0gcmV2aXNpb25JbmZvRm9yUGF0aChwYXRoKS5yZXBv
c2l0b3J5VVJMOworICAgIHJldHVybiAhIXJlcG9zaXRvcnlVUkwubWF0Y2goL15cdys6XC9cL1x3
K1wud2Via2l0Lm9yZy8pOworfQorCitmdW5jdGlvbiBwZXJtYWxpbmtGb3JQYXRoKHBhdGgsIGxp
bmVOdW1iZXIsIHJldmlzaW9uSW5mbywgYW5ub3RhdGVCbGFtZSkKK3sKKyAgICB2YXIgcmV2aXNp
b24gPSByZXZpc2lvbkluZm8ucmV2aXNpb24gPyAiP3Jldj0iICsgcmV2aXNpb25JbmZvLnJldmlz
aW9uIDogIiI7CisgICAgdmFyIGxpbmVOdW1iZXIgPSBsaW5lTnVtYmVyID8gIiNMIiArIGxpbmVO
dW1iZXIgOiAiIjsKKyAgICB2YXIgYnJhbmNoID0gcmV2aXNpb25JbmZvLmJyYW5jaCB8fCAidHJ1
bmsiOworICAgIHZhciB3aXRoQmxhbWUgPSBhbm5vdGF0ZUJsYW1lID8gIiZhbXA7YW5ub3RhdGU9
YmxhbWUiIDogIiI7CisgICAgcmV0dXJuIGBodHRwczovL3RyYWMud2Via2l0Lm9yZy9icm93c2Vy
LyR7YnJhbmNofS8ke3BhdGh9JHtyZXZpc2lvbn0ke3dpdGhCbGFtZX0ke2xpbmVOdW1iZXJ9YDsK
K30KKworLy8gTUFSSzogWGNvZGUKKworZnVuY3Rpb24geGNvZGVBY3RpdmVEb2N1bWVudCgpCit7
CisgICAgdmFyIHhjb2RlID0gQXBwbGljYXRpb24oIlhjb2RlIik7CisgICAgdmFyIHdpbmRvd3Mg
PSB4Y29kZS53aW5kb3dzKCk7CisgICAgdmFyIG51bWJlck9mV2luZG93cyA9IHdpbmRvd3MubGVu
Z3RoOworICAgIGlmICghbnVtYmVyT2ZXaW5kb3dzKQorICAgICAgICByZXR1cm4gbnVsbDsKKwor
ICAgIC8vIFRoZSB0aXRsZSBvZiBhbiBYY29kZSBXb3Jrc3BhY2Ugd2luZG93IGlzIHRoZSB0aXRs
ZSBvZiB0aGUgZG9jdW1lbnQgaW4gdGhlIGVkaXRvciBwYW5lLgorICAgIC8vIElnbm9yZSB3aW5k
b3dzIHdpdGhvdXQgYSBuYW1lIChlLmcuICJFZGl0IGFsbCBvY2N1cnJlbmNlcyBvZiBhIHN5bWJv
bCIgcG9wLXVwIG1lbnUpLgorICAgIHZhciBkb2N1bWVudE5hbWU7CisgICAgZm9yICh2YXIgaSA9
IDA7ICFkb2N1bWVudE5hbWUgJmFtcDsmYW1wOyBpICZsdDsgbnVtYmVyT2ZXaW5kb3dzOyArK2kp
CisgICAgICAgIGRvY3VtZW50TmFtZSA9IHdpbmRvd3NbaV0ubmFtZSgpOworICAgIGlmICghZG9j
dW1lbnROYW1lKQorICAgICAgICByZXR1cm4gbnVsbDsKKworICAgIC8vIFRoZSB0aXRsZSBvZiBh
IG1vZGlmaWVkIGRvY3VtZW50IHRoYXQgaGFzIG5vdCBiZWVuIHNhdmVkIHdpbGwgaGF2ZSBhIHN1
ZmZpeC4gUmVtb3ZlCisgICAgLy8gdGhlIHN1ZmZpeC4KKyAgICBjb25zdCBlZGl0ZWRTdWZmaXgg
PSAiIOKAlCBFZGl0ZWQiOworICAgIGlmIChkb2N1bWVudE5hbWUuZW5kc1dpdGgoZWRpdGVkU3Vm
Zml4KSkKKyAgICAgICAgZG9jdW1lbnROYW1lID0gZG9jdW1lbnROYW1lLnN1YnN0cigwLCBkb2N1
bWVudE5hbWUubGFzdEluZGV4T2YoZWRpdGVkU3VmZml4KSk7CisgICAgcmV0dXJuIHhjb2RlLmRv
Y3VtZW50cy5ieU5hbWUoZG9jdW1lbnROYW1lKTsKK30KKworZnVuY3Rpb24geGNvZGVTZWxlY3Rl
ZExpbmVJbkRvY3VtZW50KHhjb2RlRG9jdW1lbnQpCit7CisgICAgaWYgKCF4Y29kZURvY3VtZW50
KQorICAgICAgICByZXR1cm4gLTE7CisgICAgdmFyIHJhbmdlID0geGNvZGVEb2N1bWVudC5zZWxl
Y3RlZENoYXJhY3RlclJhbmdlKCk7CisgICAgaWYgKCFyYW5nZSkKKyAgICAgICAgcmV0dXJuIC0x
OworICAgIHZhciBiZWdpblBvc2l0aW9uID0gcmFuZ2VbMF0gLSAxOworICAgIGlmICghYmVnaW5Q
b3NpdGlvbikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIG1v
cmUgZWZmaWNpZW50IHRvIGNvdW50IHRoZSBDUkxGLCBDUiwgb3IgTEYgY2hhcmFjdGVycworICAg
IC8vIGluIHRoZSBzdWJzdHJpbmcgZnJvbSBbMCwgYmVnaW5Qb3NpdGlvbl0uCisgICAgdmFyIGxp
bmVzID0geGNvZGVEb2N1bWVudC50ZXh0KCkuc3BsaXQoL1xyP1xufFxyLyk7CisgICAgdmFyIG51
bWJlck9mTGluZXMgPSBsaW5lcy5sZW5ndGg7CisgICAgdmFyIGNoYXJhY3RlckNvdW50ID0gMDsK
KyAgICB2YXIgaSA9IDA7CisgICAgZG8geworICAgICAgICBjaGFyYWN0ZXJDb3VudCArPSBsaW5l
c1tpXS5sZW5ndGggKyAxOworICAgICAgICBpZiAoY2hhcmFjdGVyQ291bnQgJmd0OyBiZWdpblBv
c2l0aW9uKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfSB3aGlsZSAoKytpICZsdDsgbnVtYmVy
T2ZMaW5lcyk7CisgICAgcmV0dXJuIGkgKyAxOworfQorCisvLyBNQVJLOiBWQ1MgdXRpbGl0aWVz
CisKK2Z1bmN0aW9uIGRldGVybWluZVZDU0Zyb21QYXRoKHBhdGgpCit7CisgICAgaWYgKCFpc0Rp
cmVjdG9yeShwYXRoKSkKKyAgICAgICAgcGF0aCA9IGRpcm5hbWUocGF0aCk7CisKKyAgICBnX2lz
U1ZOID0gZmFsc2U7CisgICAgZ19pc0dpdCA9IGZhbHNlOworICAgIGdfaXNHaXRTVk4gPSBmYWxz
ZTsKKworICAgIGlmIChpc1NWTkRpcmVjdG9yeShwYXRoKSkgeworICAgICAgICBnX2lzU1ZOID0g
dHJ1ZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChpc0dpdFNWTkRpcmVjdG9y
eShwYXRoKSkgeworICAgICAgICBnX2lzR2l0ID0gdHJ1ZTsKKyAgICAgICAgZ19pc0dpdFNWTiA9
IHRydWU7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoaXNHaXREaXJlY3Rvcnko
cGF0aCkpIHsKKyAgICAgICAgZ19pc0dpdCA9IHRydWU7CisgICAgICAgIHJldHVybjsKKyAgICB9
Cit9CisKK2Z1bmN0aW9uIHBhdGhSZWxhdGl2ZVRvUmVwb3NpdG9yeVJvb3RGb3JQYXRoKHBhdGgp
Cit7CisgICAgdmFyIGRpcmVjdG9yeUluQ2hlY2tvdXQgPSBpc0RpcmVjdG9yeShwYXRoKSA/IHBh
dGggOiBkaXJuYW1lKHBhdGgpOworICAgIGlmIChnX2lzU1ZOKQorICAgICAgICByZXR1cm4gc3Zu
UGF0aFJlbGF0aXZlVG9SZXBvc2l0b3J5Um9vdEZvclBhdGgocGF0aCwgZGlyZWN0b3J5SW5DaGVj
a291dCk7CisgICAgaWYgKGdfaXNHaXQpCisgICAgICAgIHJldHVybiBnaXRQYXRoUmVsYXRpdmVU
b1JlcG9zaXRvcnlSb290Rm9yUGF0aChwYXRoLCBkaXJlY3RvcnlJbkNoZWNrb3V0KTsKKyAgICBy
ZXR1cm4gIiI7Cit9CisKK2Z1bmN0aW9uIGdpdFBhdGhSZWxhdGl2ZVRvUmVwb3NpdG9yeVJvb3RG
b3JQYXRoKHBhdGgsIGRpcmVjdG9yeUluQ2hlY2tvdXQpCit7CisgICAgcmV0dXJuIEFwcC5kb1No
ZWxsU2NyaXB0KGBnaXQgLUMgJyR7ZGlyZWN0b3J5SW5DaGVja291dH0nIGxzLXRyZWUgLS1mdWxs
LW5hbWUgLS1uYW1lLW9ubHkgSEVBRCAnJHtwYXRofSdgKTsKK30KKworZnVuY3Rpb24gc3ZuUGF0
aFJlbGF0aXZlVG9SZXBvc2l0b3J5Um9vdEZvclBhdGgocGF0aCwgZGlyZWN0b3J5SW5DaGVja291
dCkKK3sKKyAgICByZXR1cm4gc3ZuSW5mb0ZvclBhdGgocGF0aCwgZGlyZWN0b3J5SW5DaGVja291
dCkucGF0aDsKK30KKworZnVuY3Rpb24gcmV2aXNpb25JbmZvRm9yUGF0aChwYXRoKQoreworICAg
IHZhciBkaXJlY3RvcnlJbkNoZWNrb3V0ID0gaXNEaXJlY3RvcnkocGF0aCkgPyBwYXRoIDogZGly
bmFtZShwYXRoKTsKKyAgICBpZiAoZ19pc1NWTiB8fCBnX2lzR2l0U1ZOKQorICAgICAgICByZXR1
cm4gc3ZuUmV2aXNpb25JbmZvRm9yUGF0aChwYXRoLCBkaXJlY3RvcnlJbkNoZWNrb3V0KTsKKyAg
ICBpZiAoZ19pc0dpdCkKKyAgICAgICAgcmV0dXJuIGdpdFJldmlzaW9uSW5mb0ZvclBhdGgocGF0
aCwgZGlyZWN0b3J5SW5DaGVja291dCk7CisgICAgcmV0dXJuICIiOworfQorCitmdW5jdGlvbiBz
dm5SZXZpc2lvbkluZm9Gb3JQYXRoKHBhdGgsIGRpcmVjdG9yeUluQ2hlY2tvdXQpCit7CisgICAg
dmFyIHN2bkluZm8gPSBzdm5JbmZvRm9yUGF0aChwYXRoLCBkaXJlY3RvcnlJbkNoZWNrb3V0KTsK
KyAgICByZXR1cm4geyAiYnJhbmNoIjogc3ZuSW5mby5icmFuY2gsICJyZXZpc2lvbiI6IHN2bklu
Zm8ucmV2aXNpb24sICJyZXBvc2l0b3J5VVJMIjogc3ZuSW5mby5yZXBvc2l0b3J5Um9vdCB9Owor
fQorCitmdW5jdGlvbiBnaXRSZXZpc2lvbkluZm9Gb3JQYXRoKHBhdGgsIGRpcmVjdG9yeUluQ2hl
Y2tvdXQpCit7CisgICAgdmFyIHJlcG9zaXRvcnlVUkwgPSBBcHAuZG9TaGVsbFNjcmlwdChgZ2l0
IC1DICcke2RpcmVjdG9yeUluQ2hlY2tvdXR9JyByZW1vdGUgZ2V0LXVybCBvcmlnaW5gKTsKKyAg
ICB2YXIgcmV2aXNpb24gPSBBcHAuZG9TaGVsbFNjcmlwdChgZ2l0IC1DICcke2RpcmVjdG9yeUlu
Q2hlY2tvdXR9JyBsb2cgLTEgLS1mb3JtYXQ9JyVIJyAnJHtwYXRofSdgKTsKKyAgICB2YXIgYnJh
bmNoID0gQXBwLmRvU2hlbGxTY3JpcHQoYGdpdCAtQyAnJHtkaXJlY3RvcnlJbkNoZWNrb3V0fScg
c3ltYm9saWMtcmVmIC1xIEhFQURgKTsKKyAgICBicmFuY2ggPSBicmFuY2gucmVwbGFjZSgvXnJl
ZnNcL2hlYWRzXC8vLCAiIikgfHwgIm1hc3RlciI7CisgICAgcmV0dXJuIHsgYnJhbmNoLCByZXZp
c2lvbiwgcmVwb3NpdG9yeVVSTCB9OworfQorCitmdW5jdGlvbiBzdm5JbmZvRm9yUGF0aChwYXRo
LCBkaXJlY3RvcnlJbkNoZWNrb3V0KQoreworICAgIGlmIChnX2xhc3RTVk5JbmZvICZhbXA7JmFt
cDsgZ19sYXN0U1ZOSW5mby5wYXRoID09PSBwYXRoKSB7CisgICAgICAgIC8vIEZJWE1FOiBXZSBz
aG91bGQgYWxzbyBlbnN1cmUgdGhhdCB0aGUgY2hlY2tvdXQgZGlyZWN0b3J5IGZvciB0aGUgY2Fj
aGVkIFNWTiBpbmZvIGlzCisgICAgICAgIC8vIHRoZSBzYW1lIGFzIHRoZSBzcGVjaWZpZWQgY2hl
Y2tvdXQgZGlyZWN0b3J5LgorICAgICAgICByZXR1cm4gZ19sYXN0U1ZOSW5mbzsKKyAgICB9CisK
KyAgICB2YXIgc3ZuSW5mb0NvbW1hbmQgPSAic3ZuIGluZm8iOworICAgIGlmIChnX2lzR2l0U1ZO
KQorICAgICAgICBzdm5JbmZvQ29tbWFuZCA9ICJnaXQgIiArIHN2bkluZm9Db21tYW5kOworICAg
IHZhciBvdXRwdXQgPSBBcHAuZG9TaGVsbFNjcmlwdChgY2QgJyR7ZGlyZWN0b3J5SW5DaGVja291
dH0nICZhbXA7JmFtcDsgJHtzdm5JbmZvQ29tbWFuZH0gJyR7cGF0aH0nYCwgeyJhbHRlcmluZ0xp
bmVFbmRpbmdzIjogZmFsc2V9KTsKKyAgICBpZiAoIW91dHB1dCkKKyAgICAgICAgcmV0dXJuIHsg
fTsKKworICAgIHZhciB0ZW1wID0geyB9OworICAgIHZhciBsaW5lcyA9IG91dHB1dC5zcGxpdCgi
XG4iKTsKKyAgICBmb3IgKHZhciBsaW5lIG9mIGxpbmVzKSB7CisgICAgICAgIHZhciBba2V5LCB2
YWx1ZV0gPSBsaW5lLnNwbGl0KCI6ICIsIDIpOworICAgICAgICBpZiAoa2V5ICZhbXA7JmFtcDsg
dmFsdWUpCisgICAgICAgICAgICB0ZW1wW2tleV0gPSB2YWx1ZTsKKyAgICB9CisgICAgdmFyIHN2
bkluZm8gPSB7CisgICAgICAgICJwYXRoQXNVUkwiOiB0ZW1wWyJVUkwiXSwKKyAgICAgICAgInJl
cG9zaXRvcnlSb290IjogdGVtcFsiUmVwb3NpdG9yeSBSb290Il0sCisgICAgICAgICJyZXZpc2lv
biI6IHRlbXBbIlJldmlzaW9uIl0sCisgICAgfTsKKyAgICB2YXIgYnJhbmNoID0gc3ZuSW5mby5w
YXRoQXNVUkwucmVwbGFjZShzdm5JbmZvLnJlcG9zaXRvcnlSb290ICsgIi8iLCAiIik7CisgICAg
YnJhbmNoID0gYnJhbmNoLnN1YnN0cigwLCBicmFuY2guaW5kZXhPZigiLyIpKTsKKyAgICBzdm5J
bmZvLmJyYW5jaCA9IGJyYW5jaDsKKworICAgIC8vIEFsdGhvdWdoIHRlbXB0aW5nIHRvIHVzZSB0
ZW1wWyJQYXRoIl0gd2UgY2Fubm90IGJlY2F1c2UgaXQgaXMgcmVsYXRpdmUgdG8gZGlyZWN0b3J5
SW5DaGVja291dC4KKyAgICAvLyBBbmQgZGlyZWN0b3J5SW5DaGVja291dCBtYXkgbm90IGJlIHRo
ZSB0b3AtbGV2ZWwgY2hlY2tvdXQgZGlyZWN0b3J5LiBXZSBuZWVkIHRvIGNvbXB1dGUgdGhlCisg
ICAgLy8gcmVsYXRpdmUgcGF0aCB3aXRoIHJlc3BlY3QgdG8gdGhlIHRvcC1sZXZlbCBjaGVja291
dCBkaXJlY3RvcnkuCisgICAgc3ZuSW5mby5wYXRoID0gc3ZuSW5mby5wYXRoQXNVUkwucmVwbGFj
ZShgJHtzdm5JbmZvLnJlcG9zaXRvcnlSb290fS8ke2JyYW5jaH0vYCwgIiIpOworCisgICAgZ19s
YXN0U1ZOSW5mbyA9IHN2bkluZm87CisKKyAgICByZXR1cm4gc3ZuSW5mbzsKK30KKworZnVuY3Rp
b24gaXNTVk5EaXJlY3RvcnkoZGlyZWN0b3J5KQoreworICAgIHRyeSB7CisgICAgICAgIEFwcC5k
b1NoZWxsU2NyaXB0KGBjZCAnJHtkaXJlY3Rvcnl9JyAmYW1wOyZhbXA7IHN2biBpbmZvICZndDsg
L2Rldi9udWxsIDImZ3Q7JmFtcDsxYCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0gY2F0
Y2ggKGUpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworZnVuY3Rpb24gaXNH
aXREaXJlY3RvcnkoZGlyZWN0b3J5KQoreworICAgIHRyeSB7CisgICAgICAgIEFwcC5kb1NoZWxs
U2NyaXB0KGBnaXQgLUMgJyR7ZGlyZWN0b3J5fScgcmV2LXBhcnNlICZndDsgL2Rldi9udWxsIDIm
Z3Q7JmFtcDsxYCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0gY2F0Y2ggKGUpIHsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworZnVuY3Rpb24gaXNHaXRTVk5EaXJlY3Rv
cnkoZGlyZWN0b3J5KQoreworICAgIHZhciBvdXRwdXQgPSAiIjsKKyAgICB0cnkgeworICAgICAg
ICBvdXRwdXQgPSBBcHAuZG9TaGVsbFNjcmlwdChgZ2l0IC1DICcke2RpcmVjdG9yeX0nIGNvbmZp
ZyAtLWdldCBzdm4tcmVtb3RlLnN2bi5mZXRjaCAyJmd0OyZhbXA7MWApOworICAgIH0gY2F0Y2gg
KGUpIHsgfQorICAgIHJldHVybiBvdXRwdXQgIT09ICIiOworfQorCisvLyBNQVJLOiBVdGlsaXRp
ZXMKKworZnVuY3Rpb24gaXNEaXJlY3RvcnkocGF0aCkKK3sKKyAgICB0cnkgeworICAgICAgICBy
ZXR1cm4gQXBwLmluZm9Gb3IocGF0aCkuZm9sZGVyOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworZnVuY3Rpb24gZGlybmFtZShwYXRoKQorewor
ICAgIHJldHVybiBwYXRoLnN1YnN0cigwLCBwYXRoLmxhc3RJbmRleE9mKCIvIikpOworfQorPC9z
dHJpbmc+CisJCQkJPC9kaWN0PgorCQkJCTxrZXk+QnVuZGxlSWRlbnRpZmllcjwva2V5PgorCQkJ
CTxzdHJpbmc+Y29tLmFwcGxlLkF1dG9tYXRvci5SdW5KYXZhU2NyaXB0PC9zdHJpbmc+CisJCQkJ
PGtleT5DRkJ1bmRsZVZlcnNpb248L2tleT4KKwkJCQk8c3RyaW5nPjEuMDwvc3RyaW5nPgorCQkJ
CTxrZXk+Q2FuU2hvd1NlbGVjdGVkSXRlbXNXaGVuUnVuPC9rZXk+CisJCQkJPGZhbHNlLz4KKwkJ
CQk8a2V5PkNhblNob3dXaGVuUnVuPC9rZXk+CisJCQkJPHRydWUvPgorCQkJCTxrZXk+Q2F0ZWdv
cnk8L2tleT4KKwkJCQk8YXJyYXk+CisJCQkJCTxzdHJpbmc+QU1DYXRlZ29yeVV0aWxpdGllczwv
c3RyaW5nPgorCQkJCTwvYXJyYXk+CisJCQkJPGtleT5DbGFzcyBOYW1lPC9rZXk+CisJCQkJPHN0
cmluZz5SdW5KYXZhU2NyaXB0QWN0aW9uPC9zdHJpbmc+CisJCQkJPGtleT5JbnB1dFVVSUQ8L2tl
eT4KKwkJCQk8c3RyaW5nPjBDMDY1NUVGLTc4OTMtNEE2MS1BREQwLUJBODAzQUYzQzJDRDwvc3Ry
aW5nPgorCQkJCTxrZXk+S2V5d29yZHM8L2tleT4KKwkJCQk8YXJyYXk+CisJCQkJCTxzdHJpbmc+
UnVuPC9zdHJpbmc+CisJCQkJCTxzdHJpbmc+SmF2YVNjcmlwdDwvc3RyaW5nPgorCQkJCTwvYXJy
YXk+CisJCQkJPGtleT5PdXRwdXRVVUlEPC9rZXk+CisJCQkJPHN0cmluZz41QkFEODE0OC0wN0Uw
LTRGQTItQUFBMS05OTBBN0JFOTI2RkM8L3N0cmluZz4KKwkJCQk8a2V5PlVVSUQ8L2tleT4KKwkJ
CQk8c3RyaW5nPjI0QkZENkNDLTdBOTYtNDJDMi04NDY5LTVEODNGQTkyMURCMjwvc3RyaW5nPgor
CQkJCTxrZXk+VW5sb2NhbGl6ZWRBcHBsaWNhdGlvbnM8L2tleT4KKwkJCQk8YXJyYXk+CisJCQkJ
CTxzdHJpbmc+QXV0b21hdG9yPC9zdHJpbmc+CisJCQkJPC9hcnJheT4KKwkJCQk8a2V5PmFyZ3Vt
ZW50czwva2V5PgorCQkJCTxkaWN0PgorCQkJCQk8a2V5PjA8L2tleT4KKwkJCQkJPGRpY3Q+CisJ
CQkJCQk8a2V5PmRlZmF1bHQgdmFsdWU8L2tleT4KKwkJCQkJCTxzdHJpbmc+ZnVuY3Rpb24gcnVu
KGlucHV0LCBwYXJhbWV0ZXJzKSB7CisJCisJLy8gWW91ciBzY3JpcHQgZ29lcyBoZXJlCisKKwly
ZXR1cm4gaW5wdXQ7Cit9PC9zdHJpbmc+CisJCQkJCQk8a2V5Pm5hbWU8L2tleT4KKwkJCQkJCTxz
dHJpbmc+c291cmNlPC9zdHJpbmc+CisJCQkJCQk8a2V5PnJlcXVpcmVkPC9rZXk+CisJCQkJCQk8
c3RyaW5nPjA8L3N0cmluZz4KKwkJCQkJCTxrZXk+dHlwZTwva2V5PgorCQkJCQkJPHN0cmluZz4w
PC9zdHJpbmc+CisJCQkJCQk8a2V5PnV1aWQ8L2tleT4KKwkJCQkJCTxzdHJpbmc+MDwvc3RyaW5n
PgorCQkJCQk8L2RpY3Q+CisJCQkJPC9kaWN0PgorCQkJCTxrZXk+aXNWaWV3VmlzaWJsZTwva2V5
PgorCQkJCTx0cnVlLz4KKwkJCQk8a2V5PmxvY2F0aW9uPC9rZXk+CisJCQkJPHN0cmluZz40ODAu
NTAwMDAwOjMxNi4wMDAwMDA8L3N0cmluZz4KKwkJCQk8a2V5Pm5pYlBhdGg8L2tleT4KKwkJCQk8
c3RyaW5nPi9TeXN0ZW0vTGlicmFyeS9BdXRvbWF0b3IvUnVuIEphdmFTY3JpcHQuYWN0aW9uL0Nv
bnRlbnRzL1Jlc291cmNlcy9CYXNlLmxwcm9qL21haW4ubmliPC9zdHJpbmc+CisJCQk8L2RpY3Q+
CisJCQk8a2V5PmlzVmlld1Zpc2libGU8L2tleT4KKwkJCTx0cnVlLz4KKwkJPC9kaWN0PgorCTwv
YXJyYXk+CisJPGtleT5jb25uZWN0b3JzPC9rZXk+CisJPGRpY3QvPgorCTxrZXk+d29ya2Zsb3dN
ZXRhRGF0YTwva2V5PgorCTxkaWN0PgorCQk8a2V5PnNlcnZpY2VBcHBsaWNhdGlvbkJ1bmRsZUlE
PC9rZXk+CisJCTxzdHJpbmc+Y29tLmFwcGxlLmR0Llhjb2RlPC9zdHJpbmc+CisJCTxrZXk+c2Vy
dmljZUFwcGxpY2F0aW9uUGF0aDwva2V5PgorCQk8c3RyaW5nPi9BcHBsaWNhdGlvbnMvWGNvZGUu
YXBwPC9zdHJpbmc+CisJCTxrZXk+c2VydmljZUlucHV0VHlwZUlkZW50aWZpZXI8L2tleT4KKwkJ
PHN0cmluZz5jb20uYXBwbGUuQXV0b21hdG9yLm5vdGhpbmc8L3N0cmluZz4KKwkJPGtleT5zZXJ2
aWNlT3V0cHV0VHlwZUlkZW50aWZpZXI8L2tleT4KKwkJPHN0cmluZz5jb20uYXBwbGUuQXV0b21h
dG9yLm5vdGhpbmc8L3N0cmluZz4KKwkJPGtleT5zZXJ2aWNlUHJvY2Vzc2VzSW5wdXQ8L2tleT4K
KwkJPGludGVnZXI+MDwvaW50ZWdlcj4KKwkJPGtleT53b3JrZmxvd1R5cGVJZGVudGlmaWVyPC9r
ZXk+CisJCTxzdHJpbmc+Y29tLmFwcGxlLkF1dG9tYXRvci5zZXJ2aWNlc01lbnU8L3N0cmluZz4K
Kwk8L2RpY3Q+Cis8L2RpY3Q+Cis8L3BsaXN0PgpkaWZmIC0tZ2l0IGEvVG9vbHMvQ29weVBlcm1h
bGluay9YY29kZS9JTlNUQUxMIGIvVG9vbHMvQ29weVBlcm1hbGluay9YY29kZS9JTlNUQUxMCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjQ0OWI2ZmIyOTFjOGE4MjdlOTJhYWE5ZDBlYjc1MjZmZmI3MThhOGEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Ub29scy9Db3B5UGVybWFsaW5rL1hjb2RlL0lOU1RBTEwKQEAgLTAsMCAr
MSwxOCBAQAorQ29weSBXZWJLaXQgUGVybWFsaW5rIGlzIGFuIFhjb2RlIHNlcnZpY2UgdGhhdCBj
b3BpZXMgdG8gdGhlIENsaXBib2FyZCBhIHBlcm1hbmVudCBoeXBlcmxpbmsgdG8gdGhlIGN1cnJl
bnRseSBzZWxlY3RlZCBsaW5lIGluIHRoZSBhY3RpdmUgWGNvZGUgZG9jdW1lbnQuCisKKz09IEhv
dyB0byBpbnN0YWxsIGFuZCB1c2UgPT0KKworMS4gRG91YmxlLWNsaWNrICJDb3B5IFdlYktpdCBQ
ZXJtYWxpbmsud29ya2Zsb3ciLgorMi4gSW4gdGhlIGRpYWxvZyB0aGF0IGFwcGVhcnMsIGNsaWNr
IEluc3RhbGwsIHRoZW4gY2xpY2sgRG9uZS4KKzMuIENob29zZSBBcHBsZSBtZW51ID4gU3lzdGVt
IFByZWZlcmVuY2VzLCBjbGljayBLZXlib2FyZCwgdGhlbiBjbGljayBTaG9ydGN1dHMuCis0LiBT
ZWxlY3QgU2VydmljZXMgb24gdGhlIGxlZnQsIHNlbGVjdCBDb3B5IFdlYktpdCBQZXJtYWxpbmss
IGNsaWNrIGluIHRoZSBLZXlib2FyZCBTaG9ydGN1dCBmaWVsZCwgdGhlbiBwcmVzcyB0aGUga2V5
IGNvbWJpbmF0aW9uIHRoYXQgeW91IHdhbnQgdG8gdXNlIGFzIHRoZSBrZXlib2FyZCBzaG9ydGN1
dC4KKworRm9yIGV4YW1wbGUsIHByZXNzIENvbW1hbmQsIFNoaWZ0LCBDb250cm9sLCBhbmQgQyBr
ZXlzIGF0IHRoZSBzYW1lIHRpbWUuCisKKzUuIEVuYWJsZSAiQ29weSBXZWJLaXQgUGVybWFsaW5r
IiB1c2luZyB0aGUgY2hlY2tib3guCisKK1RoZSBDb3B5IFdlYktpdCBQZXJtYWxpbmsgc2Vydmlj
ZSB3aWxsIG5vdyBhcHBlYXIgdW5kZXIgWGNvZGUgbWVudSA+IFNlcnZpY2VzLgorCis9PSBIb3cg
dG8gdXNlID09CisKK0luIFhjb2RlLCB1c2UgdGhlIGtleSBiaW5kaW5nIHlvdSBzZXR1cCBhYm92
ZSBvciBjaG9vc2UgWGNvZGUgPiBTZXJ2aWNlcyA+IENvcHkgV2ViS2l0IFBlcm1hbGluayB0byBj
b3B5IHRvIHRoZSBDbGlwYm9hcmQgYSBwZXJtYW5lbnQgaHlwZXJsaW5rIHRvIHRoZSBzZWxlY3Rl
ZCBsaW5lLiBIb2xkIGRvd24gdGhlIE9wdGlvbiBrZXkgd2hlbiBydW5uaW5nIHRoZSBzZXJ2aWNl
IHRvIGNvcHkgdG8gdGhlIENsaXBib2FyZCBhIHBlcm1hbmVudCBoeXBlcmxpbmsgdG8gdGhlIHNl
bGVjdGVkIGxpbmUgd2l0aCBibGFtZSBhbm5vdGF0aW9ucy4KXCBObyBuZXdsaW5lIGF0IGVuZCBv
ZiBmaWxlCg==
</data>
<flag name="review"
          id="367207"
          type_id="1"
          status="+"
          setter="joepeck"
    />
          </attachment>
      

    </bug>

</bugzilla>